%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=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 ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy42YTQ2YjRjM2JlZTJjNDFhLmNzcyI+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+PHNjcmlwdCBzcmM9Im1haW4uOGE2ZjYyMmM1YWJiNmEzMC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48L2JvZHk+Cjwv''@;'; put 'put ''aHRtbD4K'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.8a6f622c5abb6a30-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+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTt5LnIoSSkseS5kKEkse2FycmF5QXZnOigpPT5lcWUsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+SW0sYXJyYXlGbGF0dGVuOigpPT5mMmUsYXJyYXlNYXA6KCk9PnlzLGFycmF5TWF4OigpPT5KS2Us''@;'; put 'put ''YXJyYXlNaW46KCk9PlFLZSxhcnJheVJlZHVjZTooKT0+cXUsYXJyYXlTdW06KCk9PmgyZSxhcnJheVVuaXF1ZTooKT0+cDJlLGV4dGVuZEFycmF5OigpPT5vJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PnMkLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT50cWUsZ2V0VW5pb25PZkFy''@;'; put 'put ''cmF5czooKT0+bnFlLHBpdm90OigpPT5kRSxzdHJpbmdUb0FycmF5OigpPT5sJCx0bzJkQXJyYXk6KCk9PmQyZX0pO3ZhciBfPXt9O3kucihfKSx5LmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5fMmUsaXNEZWZpbmVkOigpPT5QYSxpc0VtcHR5OigpPT5VYyxpc1JlZ0V4cDooKT0+ZzJl''@;'; put 'put ''LGlzVW5kZWZpbmVkOigpPT55YyxzdHJpbmdpZnk6KCk9PmxjfSk7dmFyIGc9e307eS5yKGcpLHkuZChnLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5vcWUsaXNQZXJjZW50VmFsdWU6KCk9PmQkLHJhbmRvbVN0cmluZzooKT0+dSQsc2FuaXRpemU6KCk9PklPLHN0cmlwVGFnczooKT0+ZiQsc3Vi''@;'; put 'put ''c3RpdHV0ZTooKT0+aCQsdG9VcHBlckNhc2VGaXJzdDooKT0+cDF9KTt2YXIgQj17fTt5LnIoQikseS5kKEIse0hUTUxfQ0hBUkFDVEVSUzooKT0+UDJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+UnFlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+QyQsY2xvc2VzdDooKT0+Um0sY2xv''@;'; put 'put ''c2VzdERvd246KCk9PnZFLGVtcHR5OigpPT54cCxmYXN0SW5uZXJIVE1MOigpPT5qNyxmYXN0SW5uZXJUZXh0OigpPT5QbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9PkkyZSxnZXRDYXJldFBvc2l0aW9uOigpPT53JCxnZXRDc3NUcmFuc2Zvcm06KCk9PkZxZSxnZXRGcmFtZUVsZW1l''@;'; put 'put ''bnQ6KCk9PkQyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+TjJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PkgyZSxnZXRQYXJlbnQ6KCk9PmsyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PlY3LGdldFNjcm9sbExlZnQ6KCk9PnkkLGdldFNjcm9sbFRvcDooKT0+T08sZ2V0U2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ6KCk9PmJFLGdldFNjcm9sbGJhcldpZHRoOigpPT5mMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+VjJlLGdldFNlbGVjdGlvblRleHQ6KCk9Pk9xZSxnZXRTdHlsZTooKT0+eUUsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PmFfLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PkxP''@;'; put 'put ''LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+YiQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PkRxZSxoYXNDbGFzczooKT0+cG8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+eCQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9Pk0kLGhhc1plcm9IZWlnaHQ6KCk9PkYyZSxpbmRleDooKT0+''@;'; put 'put ''UjJlLGlubmVySGVpZ2h0OigpPT5vXyxpbm5lcldpZHRoOigpPT5fJCxpc0NoaWxkT2Y6KCk9PkxtLGlzRGV0YWNoZWQ6KCk9PkUkLGlzSFRNTEVsZW1lbnQ6KCk9PkVwLGlzSW5wdXQ6KCk9PkNFLGlzSW50ZXJuYWxFbGVtZW50OigpPT5tRSxpc091dHNpZGVJbnB1dDooKT0+Rk8saXNWaXNp''@;'; put 'put ''YmxlOigpPT56NyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PlQkLG1hdGNoZXNDU1NSdWxlczooKT0+SXFlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+QjJlLG9mZnNldDooKT0+VTAsb3V0ZXJIZWlnaHQ6KCk9Pk11LG91dGVyV2lk''@;'; put 'put ''dGg6KCk9PnN1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9Pk9tLHJlbW92ZUF0dHJpYnV0ZTooKT0+QjcscmVtb3ZlQ2xhc3M6KCk9PmxvLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkEkLHJlbW92ZUV2ZW50OigpPT5McWUscmVtb3ZlVGV4dE5v''@;'; put 'put ''ZGVzOigpPT52JCxyZXNldENzc1RyYW5zZm9ybTooKT0+d0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+ajJlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9PkhxZSxzZXRBdHRyaWJ1dGU6KCk9PnZvLHNldENhcmV0UG9zaXRpb246KCk9Pl9FLHNldE92ZXJs''@;'; put 'put ''YXlQb3NpdGlvbjooKT0+UE99KTt2YXIgdz17fTt5LnIodykseS5kKHcse2N1cnJ5OigpPT5VMmUsY3VycnlSaWdodDooKT0+QnFlLGRlYm91bmNlOigpPT5TRSxmYXN0Q2FsbDooKT0+SE8saXNGdW5jdGlvbjooKT0+bWwscGFydGlhbDooKT0+ayQscGlwZTooKT0+VnFlLHRocm90dGxlOigp''@;'; put 'put ''PT56MmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9Pk5xZX0pO3ZhciBQPXt9O3kucihQKSx5LmQoUCx7Y2xvbmU6KCk9Pm4zLGNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcjooKT0+RmQsZGVlcENsb25lOigpPT5nMSxkZWVwRXh0ZW5kOigpPT5NRSxkZWVwT2JqZWN0U2l6ZTooKT0+Qk8sZGVmaW5l''@;'; put 'put ''R2V0dGVyOigpPT5UcCxkdWNrU2NoZW1hOigpPT5zXyxleHRlbmQ6KCk9Pnh1LGdldFByb3BlcnR5OigpPT5XMmUsaGFzT3duUHJvcGVydHk6KCk9PkV1LGluaGVyaXQ6KCk9PloyZSxpc09iamVjdDooKT0+cW8saXNPYmplY3RFcXVhbDooKT0+Tk8sbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6''@;'; put 'put ''KCk9PlhvLHNldFByb3BlcnR5OigpPT5WT30pO3ZhciBGPXt9O3kucihGKSx5LmQoRix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PkVFLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+RzJlLGlzQ1NSOigpPT5ZMmUsaXNUb3VjaFN1cHBvcnRlZDooKT0+RCQscmVxdWVzdEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lOigpPT54RX0pO3ZhciBPPXt9O3kucihPKSx5LmQoTyx7aXNDaHJvbWU6KCk9PkkkLGlzQ2hyb21lV2ViS2l0OigpPT5xMmUsaXNFZGdlOigpPT5KMmUsaXNFZGdlV2ViS2l0OigpPT5qcWUsaXNGaXJlZm94OigpPT5qTyxpc0ZpcmVmb3hXZWJLaXQ6KCk9PlgyZSxpc0lPUzooKT0+UiQs''@;'; put 'put ''aXNJcGFkT1M6KCk9PkwkLGlzTGludXhPUzooKT0+enFlLGlzTWFjT1M6KCk9PnpPLGlzTW9iaWxlQnJvd3NlcjooKT0+QXAsaXNTYWZhcmk6KCk9PlRFLGlzV2luZG93c09TOigpPT5PJCxzZXRCcm93c2VyTWV0YTooKT0+JDJlLHNldFBsYXRmb3JtTWV0YTooKT0+SzJlfSk7dmFyIHo9e307''@;'; put 'put ''eS5yKHopLHkuZCh6LHtLRVlfQ09ERVM6KCk9PllhLGlzQ3RybEtleTooKT0+WnFlLGlzQ3RybE1ldGFLZXk6KCk9PmVmZSxpc0Z1bmN0aW9uS2V5OigpPT5QJCxpc0tleTooKT0+dV8saXNQcmludGFibGVDaGFyOigpPT5RMmV9KTt2YXIgTj17fTt5LnIoTikseS5kKE4se2lzSW1tZWRpYXRl''@;'; put 'put ''UHJvcGFnYXRpb25TdG9wcGVkOigpPT5GbSxpc0xlZnRDbGljazooKT0+VU8saXNSaWdodENsaWNrOigpPT5IbSxpc1RvdWNoRXZlbnQ6KCk9PnRmZSxvZmZzZXRSZWxhdGl2ZVRvOigpPT5uZmUsc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5CMn0pO3ZhciBMPXt9O3kucihMKSx5LmQo''@;'; put 'put ''TCx7X2RhdGFUb0hUTUw6KCk9PiQkLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+Z2ZlLGluc3RhbmNlVG9IVE1MOigpPT5HJH0pO3ZhciBLPXt9O3kucihLKSx5LmQoSyx7Y2xhbXA6KCk9PmtzLGlzTnVtZXJpYzooKT0+bTEsaXNOdW1lcmljTGlrZTooKT0+bWZlLHJhbmdlRWFjaDooKT0+R2Es''@;'; put 'put ''cmFuZ2VFYWNoUmV2ZXJzZTooKT0+SyQsdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT5xJH0pO3ZhciBVPXt9O3kucihVKSx5LmQoVSx7Y291bnRGaXJzdFJvd0tleXM6KCk9Pk9LLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5xZXQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT4k''@;'; put 'put ''ZXQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5LZXQsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5MSyxpc0FycmF5T2ZBcnJheXM6KCk9PlMzZSxpc0FycmF5T2ZPYmplY3RzOigpPT5NM2Usc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+R2V0LHNwcmVhZHNoZWV0Q29sdW1u''@;'; put 'put ''TGFiZWw6KCk9PmhQfSk7dmFyIFc9e307eS5yKFcpLHkuZChXLHtDSEVDS0JPWF9DSEVDS0VEOigpPT51WCxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PmNYLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+ZFgsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9PnVxLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+d3EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+bXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PmJxLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5ncSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5fcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PnZxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PnlxLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0JPUkRFUlM6KCk9PkNxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT54cSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PkVxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9Pk1xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf''@;'; put 'put ''VE9QOigpPT5TcSxDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PmVxLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PnRxLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+aXEsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9H''@;'; put 'put ''Uk9VUF9IRUFERVJTOigpPT5ycSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9Pm5xLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+YXEsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5kcSxDT05URVhUTUVOVV9JVEVNU19GUkVFWkVfQ09M''@;'; put 'put ''VU1OOigpPT5vcSxDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+RHEsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PlJxLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT4kSyxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PktLLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5scSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PmtxLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+QXEsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9PldLLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+X1AsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmZxLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PlFLLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT5UcSxDT05URVhUTUVOVV9JVEVNU19S''@;'; put 'put ''RU1PVkVfQ09MVU1OOigpPT5YSyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+aHEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+cUssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5ZSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PkdL''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5JcSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+THEsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+SkssQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5zcSxDT05URVhUTUVOVV9JVEVNU19VTk1F''@;'; put 'put ''UkdFX0NFTExTOigpPT5jcSxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5GM2UsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+YVgsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5yWCxGSUxURVJTX0JVVFRPTlNfT0s6KCk9PmlYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF''@;'; put 'put ''Ul9TRUFSQ0g6KCk9Pm9YLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PmxYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+c1gsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9Pm5YLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjoo''@;'; put 'put ''KT0+JHEsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+S3EsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5OcSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+WXEsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5BdHQsRklMVEVSU19DT05ESVRJT05T''@;'; put 'put ''X0NPTlRBSU5TOigpPT5CcSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9Pk9xLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PlZxLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+RnEsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+enEsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+VXEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+WnEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+V3EsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+V2MsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX05PTkU6KCk9PndQLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+R3EsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5qcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5QcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMOigp''@;'; put 'put ''PT5IcSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9PnFxLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+WHEsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+SnEsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PlFxLEZJTFRFUlNfRElWU19GSUxU''@;'; put 'put ''RVJfQllfVkFMVUU6KCk9PmVYLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT50WCxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+Q1AsRklMVEVSU19OQU1FU1BBQ0U6KCk9PnExLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5TUH0pO3ZhciBZPXt9O2Z1bmN0aW9u''@;'; put 'put ''IHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksRD1NLnZhbHVlfWNhdGNoKFope3JldHVybiB2b2lkIGEoWil9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1l''@;'; put 'put ''bnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe3EoZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe3EoZixkLGgsdixNLCJ0aHJvdyIsRCl9dih2b2lkIDApfSl9fXkucihZKSx5LmQoWSx7Z2V0Tm9ybWFs''@;'; put 'put ''aXplZERhdGU6KCk9PnA0ZX0pO2xldCBuZT1udWxsLGxlPTE7Y29uc3QgbWU9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlvbiBfZShjKXtjb25zdCBsPW5lO3JldHVybiBuZT1jLGx9ZnVuY3Rpb24geChjKXtpZigoIXNlKGMpfHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2gh''@;'; 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 ''VGVhcmRvd246ZH09dGhpcztpZigkZShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIEhlP2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXtzaShmKX1jYXRjaCh2KXts''@;'; put 'put ''PWw/P1tdLHYgaW5zdGFuY2VvZiBIZT9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IEhlKGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpc2kobCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgcXQpe2lmKGwuY2xvc2VkfHxs''@;'; put 'put ''Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9''@;'; put 'put ''PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFn''@;'; put 'put ''ZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJnV0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmdXQoYSxsKSxsIGluc3RhbmNlb2YgcXQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19cXQuRU1QVFk9KCgpPT57''@;'; put 'put ''Y29uc3QgYz1uZXcgcXQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IFJ0PXF0LkVNUFRZO2Z1bmN0aW9uIFB0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgcXR8fGMmJiJjbG9zZWQiaW4gYyYmJGUoYy5yZW1vdmUpJiYkZShjLmFkZCkmJiRlKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9u''@;'; put 'put ''IHNpKGMpeyRlKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgUXQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0''@;'; 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 ''cm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gUnUoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiBQcihjKXtpZigi''@;'; 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 ''PSJPcHRpb25hbCIsY30ocmF8fHt9KTtsZXQgb287ZnVuY3Rpb24gYWcoKXtyZXR1cm4gb299ZnVuY3Rpb24gX2woYyl7Y29uc3QgbD1vbztyZXR1cm4gb289YyxsfWZ1bmN0aW9uIHRoKGMsbCxhKXtjb25zdCBkPVBvKGMpO3JldHVybiBkJiYicm9vdCI9PWQucHJvdmlkZWRJbj92b2lkIDA9''@;'; put 'put ''PT1kLnZhbHVlP2QudmFsdWU9ZC5mYWN0b3J5KCk6ZC52YWx1ZTphJnJhLk9wdGlvbmFsP251bGw6dm9pZCAwIT09bD9sOnZvaWQgTXMoKX1jb25zdCBLMD17fSxndT0iX19OR19ESV9GTEFHX18iLEZjPSJuZ1RlbXBUb2tlblBhdGgiLFJ3PS9cbi9nbSxzbD0iX19zb3VyY2UiO2xldCBJMztm''@;'; put 'put ''dW5jdGlvbiBuaChjKXtjb25zdCBsPUkzO3JldHVybiBJMz1jLGx9ZnVuY3Rpb24gRDEoYyxsPXJhLkRlZmF1bHQpe2lmKHZvaWQgMD09PUkzKXRocm93IG5ldyBRbigtMjAzLCExKTtyZXR1cm4gbnVsbD09PUkzP3RoKGMsdm9pZCAwLGwpOkkzLmdldChjLGwmcmEuT3B0aW9uYWw/bnVsbDp2''@;'; put 'put ''b2lkIDAsbCl9ZnVuY3Rpb24geHIoYyxsPXJhLkRlZmF1bHQpe3JldHVybihhZygpfHxEMSkoWWkoYyksbCl9ZnVuY3Rpb24gZmkoYyxsPXJhLkRlZmF1bHQpe3JldHVybiB4cihjLG9nKGwpKX1mdW5jdGlvbiBvZyhjKXtyZXR1cm4gdHlwZW9mIGM+InUifHwibnVtYmVyIj09dHlwZW9mIGM/''@;'; put 'put ''YzooYy5vcHRpb25hbCYmOCl8KGMuaG9zdCYmMSl8KGMuc2VsZiYmMil8KGMuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIHNnKGMpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9WWkoY1thXSk7aWYoQXJyYXkuaXNBcnJheShkKSl7aWYoMD09PWQubGVuZ3Ro''@;'; put 'put ''KXRocm93IG5ldyBRbig5MDAsITEpO2xldCBoLGY9cmEuRGVmYXVsdDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7Y29uc3QgTT1kW3ZdLEQ9cGYoTSk7Im51bWJlciI9PXR5cGVvZiBEPy0xPT09RD9oPU0udG9rZW46Znw9RDpoPU19bC5wdXNoKHhyKGgsZikpfWVsc2UgbC5wdXNoKHhy''@;'; put 'put ''KGQpKX1yZXR1cm4gbH1mdW5jdGlvbiB0MChjLGwpe3JldHVybiBjW2d1XT1sLGMucHJvdG90eXBlW2d1XT1sLGN9ZnVuY3Rpb24gcGYoYyl7cmV0dXJuIGNbZ3VdfWNvbnN0IGNnPXQwKHhhKCJJbmplY3QiLGM9Pih7dG9rZW46Y30pKSwtMSksSTE9dDAoeGEoIk9wdGlvbmFsIiksOCksbGQ9''@;'; put 'put ''dDAoeGEoIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gbXUoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShqaSk/Y1tqaV06bnVsbH1mdW5jdGlvbiBSMyhjLGwpe2MuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP1IzKGEsbCk6bChhKSl9ZnVuY3Rpb24gUGwoYyxsLGEpe2w+PWMubGVu''@;'; put 'put ''Z3RoP2MucHVzaChhKTpjLnNwbGljZShsLDAsYSl9ZnVuY3Rpb24gTHUoYyxsKXtyZXR1cm4gbD49Yy5sZW5ndGgtMT9jLnBvcCgpOmMuc3BsaWNlKGwsMSlbMF19ZnVuY3Rpb24gXzAoYyxsLGEpe2xldCBkPWUyKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRdPWE6KGQ9fmQsZnVuY3Rpb24gdXYo''@;'; put 'put ''YyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1tsKzFdPWR9fShjLGQsbCxhKSksZH1m''@;'; put 'put ''dW5jdGlvbiBBNihjLGwpe2NvbnN0IGE9ZTIoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gZTIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUjEoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyhoLWQ+PjEpLHY9Y1tmPDxhXTtpZihs''@;'; put 'put ''PT09dilyZXR1cm4gZjw8YTt2Pmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCBJMD17fSx0cz1bXSx0Mj1uZXcgU3QoIiIpLEwzPW5ldyBTdCgiIiwtMSksazY9bmV3IFN0KCIiKTtjbGFzcyB1Z3tnZXQobCxhPUswKXtpZihhPT09SzApe2NvbnN0IGQ9bmV3IEVycm9y''@;'; put 'put ''KGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7UHIobCl9IWApO3Rocm93IGQubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGR9cmV0dXJuIGF9fXZhciBPMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVs''@;'; put 'put ''dCIsY30oTzN8fHt9KSxYcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsY1tjLk5vbmU9Ml09Ik5vbmUiLGNbYy5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsY30oWHN8fHt9KSxObj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNb''@;'; put 'put ''Yy5TaWduYWxCYXNlZD0xXT0iU2lnbmFsQmFzZWQiLGNbYy5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybT0yXT0iSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0iLGN9KE5ufHx7fSk7ZnVuY3Rpb24gRncoYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2Yo''@;'; put 'put ''bCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWZ1bmN0aW9uIG00KGMsbCxhKXtsZXQgZD0wO2Zvcig7ZDxhLmxlbmd0''@;'; put 'put ''aDspe2NvbnN0IGg9YVtkXTtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKDAhPT1oKWJyZWFrO2QrKztjb25zdCBmPWFbZCsrXSx2PWFbZCsrXSxNPWFbZCsrXTtjLnNldEF0dHJpYnV0ZShsLHYsTSxmKX1lbHNle2NvbnN0IGY9aCx2PWFbKytkXTtoZyhmKT9jLnNldFByb3BlcnR5KGwsZix2''@;'; put 'put ''KTpjLnNldEF0dHJpYnV0ZShsLGYsdiksZCsrfX1yZXR1cm4gZH1mdW5jdGlvbiBkZyhjKXtyZXR1cm4gMz09PWN8fDQ9PT1jfHw2PT09Y31mdW5jdGlvbiBoZyhjKXtyZXR1cm4gNjQ9PT1jLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gdmYoYyxsKXtpZihudWxsIT09bCYmMCE9PWwubGVuZ3Ro''@;'; put 'put ''KWlmKG51bGw9PT1jfHwwPT09Yy5sZW5ndGgpYz1sLnNsaWNlKCk7ZWxzZXtsZXQgYT0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3QgaD1sW2RdOyJudW1iZXIiPT10eXBlb2YgaD9hPWg6MD09PWF8fEQ2KGMsYSxoLG51bGwsLTE9PT1hfHwyPT09YT9sWysrZF06bnVsbCl9''@;'; put 'put ''fXJldHVybiBjfWZ1bmN0aW9uIEQ2KGMsbCxhLGQsaCl7bGV0IGY9MCx2PWMubGVuZ3RoO2lmKC0xPT09bCl2PS0xO2Vsc2UgZm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2YrK107aWYoIm51bWJlciI9PXR5cGVvZiBNKXtpZihNPT09bCl7dj0tMTticmVha31pZihNPmwpe3Y9Zi0xO2Jy''@;'; put 'put ''ZWFrfX19Zm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2ZdO2lmKCJudW1iZXIiPT10eXBlb2YgTSlicmVhaztpZihNPT09YSl7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbCE9PWgmJihjW2YrMV09aCkpO2lmKGQ9PT1jW2YrMV0pcmV0dXJuIHZvaWQoY1tmKzJdPWgpfWYrKyxudWxs''@;'; put 'put ''IT09ZCYmZisrLG51bGwhPT1oJiZmKyt9LTEhPT12JiYoYy5zcGxpY2UodiwwLGwpLGY9disxKSxjLnNwbGljZShmKyssMCxhKSxudWxsIT09ZCYmYy5zcGxpY2UoZisrLDAsZCksbnVsbCE9PWgmJmMuc3BsaWNlKGYrKywwLGgpfWNvbnN0IGR2PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gSTYo''@;'; put 'put ''YyxsLGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PUZ3KGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZih2NChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhP''@;'; put 'put ''ZigxLGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdjQoYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1kdn1mdW5jdGlvbiByMChj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOmR2KX1mdW5jdGlvbiBIdyhjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBmdihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihkZyhjW2xdKSlyZXR1cm4gbDtyZXR1''@;'; put 'put ''cm4gYy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiFyMChjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihNYyhk''@;'; put 'put ''KSlyZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFJNihjLGgsRCxhKSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBaPWxbKytNXSxyZT1QMyhELGgsdjQoYyksYSk7aWYoLTE9PT1yZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1p''@;'; put 'put ''ZigiIiE9PVope2xldCBjZTtpZihjZT1yZT5mPyIiOmhbcmUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlohPT1jZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhTWMoZCkmJiFNYyhEKSlyZXR1cm4hMTtpZih2JiZNYyhEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJl''@;'; put 'put ''dHVybiBNYyhkKXx8dn1mdW5jdGlvbiBNYyhjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gUDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9''@;'; put 'put ''PT12fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gcHYoYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBiNChjLGwsYT0hMSl7Zm9y''@;'; put 'put ''KGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoSHcoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE53KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7''@;'; put 'put ''aCsrKWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGd2KGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBWdyhjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2''@;'; put 'put ''PWNbYV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhTWModikmJihsKz1ndihmLGgpLGg9IiIpLGQ9''@;'; put 'put ''dixmPWZ8fCFNYyhkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9Z3YoZixoKSksbH1mdW5jdGlvbiBWcihjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPVI2KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVs''@;'; put 'put ''bCxuZ0NvbnRlbnRTZWxlY3RvcnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09TzMuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0''@;'; put 'put ''YW5kYWxvbmVJbmplY3RvcjpudWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fFhzLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8dHMsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGws''@;'; put 'put ''aWQ6IiJ9O1IwKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1wZyhkLCExKSxhLnBpcGVEZWZzPXBnKGQsITApLGEuaWQ9ZnVuY3Rpb24gancoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RW''@;'; put 'put ''YXJzLGMuaG9zdEF0dHJzLGMuY29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFt''@;'; put 'put ''ZXMoYy50eXBlLnByb3RvdHlwZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKXwwO3JldHVybiBsKz0yMTQ3NDgzNjQ4LCJjIitsfShhKSxhfSl9ZnVuY3Rpb24gYmYo''@;'; put 'put ''Yyl7cmV0dXJuIFZvKGMpfHx4YyhjKX1mdW5jdGlvbiBmZyhjKXtyZXR1cm4gbnVsbCE9PWN9ZnVuY3Rpb24ga2koYyl7cmV0dXJuIE5zKCgpPT4oe3R5cGU6Yy50eXBlLGJvb3RzdHJhcDpjLmJvb3RzdHJhcHx8dHMsZGVjbGFyYXRpb25zOmMuZGVjbGFyYXRpb25zfHx0cyxpbXBvcnRzOmMu''@;'; put 'put ''aW1wb3J0c3x8dHMsZXhwb3J0czpjLmV4cG9ydHN8fHRzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsaWQ6Yy5pZHx8bnVsbH0pKX1mdW5jdGlvbiB5NChjLGwpe2lmKG51bGw9PWMpcmV0dXJuIEkwO2NvbnN0IGE9e307Zm9yKGNvbnN0IGQg''@;'; put 'put ''aW4gYylpZihjLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWNbZF07bGV0IGYsdixNPU5uLk5vbmU7QXJyYXkuaXNBcnJheShoKT8oTT1oWzBdLGY9aFsxXSx2PWhbMl0/P2YpOihmPWgsdj1oKSxsPyhhW2ZdPU0hPT1Obi5Ob25lP1tkLE1dOmQsbFtmXT12KTphW2ZdPWR9cmV0dXJuIGF9''@;'; put 'put ''ZnVuY3Rpb24gRXIoYyl7cmV0dXJuIE5zKCgpPT57Y29uc3QgbD1SNihjKTtyZXR1cm4gUjAobCksbH0pfWZ1bmN0aW9uIGxsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOiEwPT09Yy5zdGFuZGFsb25l''@;'; put 'put ''LG9uRGVzdHJveTpjLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBWbyhjKXtyZXR1cm4gY1skb118fG51bGx9ZnVuY3Rpb24geGMoYyl7cmV0dXJuIGNbWGxdfHxudWxsfWZ1bmN0aW9uIGV1KGMpe3JldHVybiBjW3RvXXx8bnVsbH1mdW5jdGlvbiBPdShjLGwp''@;'; put 'put ''e2NvbnN0IGE9Y1tfb118fG51bGw7aWYoIWEmJiEwPT09bCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtQcihjKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gYX1mdW5jdGlvbiBSNihjKXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRl''@;'; put 'put ''cnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0''@;'; put 'put ''czpsLGlucHV0VHJhbnNmb3JtczpudWxsLGlucHV0Q29uZmlnOmMuaW5wdXRzfHxJMCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsc2lnbmFsczohMD09PWMuc2lnbmFscyxzZWxlY3RvcnM6Yy5zZWxlY3RvcnN8fHRzLHZpZXdRdWVyeTpj''@;'; put 'put ''LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpjLmZlYXR1cmVzfHxudWxsLHNldElucHV0Om51bGwsZmluZEhvc3REaXJlY3RpdmVEZWZzOm51bGwsaG9zdERpcmVjdGl2ZXM6bnVsbCxpbnB1dHM6eTQoYy5pbnB1dHMsbCksb3V0cHV0czp5NChjLm91dHB1dHMpLGRlYnVnSW5mbzpudWxsfX1m''@;'; put 'put ''dW5jdGlvbiBSMChjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9PmwoYykpfWZ1bmN0aW9uIHBnKGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP2V1OmJmO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIoZmcpfWZ1bmN0aW9u''@;'; put 'put ''IHp3KC4uLmMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6cmgoMCxjKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIHJoKGMsLi4ubCl7Y29uc3QgYT1bXSxkPW5ldyBTZXQ7bGV0IGg7Y29uc3QgZj12PT57YS5wdXNoKHYpfTtyZXR1cm4gUjMobCx2PT57Y29uc3QgTT12O180KE0s''@;'; put 'put ''ZixbXSxkKSYmKGh8fD1bXSxoLnB1c2goTSkpfSksdm9pZCAwIT09aCYmdnYoaCxmKSxhfWZ1bmN0aW9uIHZ2KGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0e25nTW9kdWxlOmQscHJvdmlkZXJzOmh9PWNbYV07TDYoaCxmPT57bChmLGQpfSl9fWZ1bmN0aW9uIF80KGMs''@;'; put 'put ''bCxhLGQpe2lmKCEoYz1ZaShjKSkpcmV0dXJuITE7bGV0IGg9bnVsbCxmPVZzKGMpO2NvbnN0IHY9IWYmJlZvKGMpO2lmKGZ8fHYpe2lmKHYmJiF2LnN0YW5kYWxvbmUpcmV0dXJuITE7aD1jfWVsc2V7Y29uc3QgRD1jLm5nTW9kdWxlO2lmKGY9VnMoRCksIWYpcmV0dXJuITE7aD1EfWNvbnN0''@;'; put 'put ''IE09ZC5oYXMoaCk7aWYodil7aWYoTSlyZXR1cm4hMTtpZihkLmFkZChoKSx2LmRlcGVuZGVuY2llcyl7Y29uc3QgRD0iZnVuY3Rpb24iPT10eXBlb2Ygdi5kZXBlbmRlbmNpZXM/di5kZXBlbmRlbmNpZXMoKTp2LmRlcGVuZGVuY2llcztmb3IoY29uc3QgWiBvZiBEKV80KFosbCxhLGQpfX1l''@;'; put 'put ''bHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFNKXtsZXQgWjtkLmFkZChoKTt0cnl7UjMoZi5pbXBvcnRzLHJlPT57XzQocmUsbCxhLGQpJiYoWnx8PVtdLFoucHVzaChyZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09WiYmdnYoWixsKX1pZighTSl7Y29uc3QgWj1tdSho''@;'; put 'put ''KXx8KCgpPT5uZXcgaCk7bCh7cHJvdmlkZTpoLHVzZUZhY3Rvcnk6WixkZXBzOnRzfSxoKSxsKHtwcm92aWRlOms2LHVzZVZhbHVlOmgsbXVsdGk6ITB9LGgpLGwoe3Byb3ZpZGU6dDIsdXNlVmFsdWU6KCk9PnhyKGgpLG11bHRpOiEwfSxoKX1jb25zdCBEPWYucHJvdmlkZXJzO2lmKG51bGwh''@;'; put 'put ''PUQmJiFNKXtjb25zdCBaPWM7TDYoRCxyZT0+e2wocmUsWil9KX19fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gTDYoYyxsKXtmb3IobGV0IGEgb2YgYylWYShhKSYmKGE9YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/TDYoYSxsKTpsKGEp''@;'; put 'put ''fWNvbnN0IFV3PUhhKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpIYX0pO2Z1bmN0aW9uIE82KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZVdyBpbiBjfWZ1bmN0aW9uIF9mKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IEY2PW5ldyBTdCgiIiks''@;'; put 'put ''RjM9e30sWnc9e307bGV0IEg2O2Z1bmN0aW9uIEgzKCl7cmV0dXJuIHZvaWQgMD09PUg2JiYoSDY9bmV3IHVnKSxINn1jbGFzcyBoY3t9Y2xhc3MgY2QgZXh0ZW5kcyBoY3tnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1jb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigp''@;'; put 'put ''LHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuX25nT25EZXN0cm95SG9va3M9bmV3IFNldCx0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsbWcobCx2PT50aGlzLnByb2Nlc3NQcm92aWRl''@;'; put 'put ''cih2KSksdGhpcy5yZWNvcmRzLnNldChMMyxOMyh2b2lkIDAsdGhpcykpLGguaGFzKCJlbnZpcm9ubWVudCIpJiZ0aGlzLnJlY29yZHMuc2V0KGhjLE4zKHZvaWQgMCx0aGlzKSk7Y29uc3QgZj10aGlzLnJlY29yZHMuZ2V0KEY2KTtudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGYudmFsdWUm''@;'; put 'put ''JnRoaXMuc2NvcGVzLmFkZChmLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChrNix0cyxyYS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25z''@;'; put 'put ''dCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJv''@;'; put 'put ''eUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGwpLCgpPT50aGlzLnJlbW92ZU9uRGVzdHJveShsKX1ydW5JbkNvbnRl''@;'; put 'put ''eHQobCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e25oKGEpLF9sKGQpfX1nZXQobCxhPUswLGQ9cmEuRGVmYXVsdCl7aWYodGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSxsLmhhc093blByb3Bl''@;'; put 'put ''cnR5KHpsKSlyZXR1cm4gbFt6bF0odGhpcyk7ZD1vZyhkKTtjb25zdCBmPW5oKHRoaXMpLHY9X2wodm9pZCAwKTt0cnl7aWYoIShkJnJhLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25zdCBaPWZ1bmN0aW9uIFl3KGMpe3JldHVybiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBTdH0obCkmJlBvKGwpO0Q9WiYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShaKT9OMyhnZyhsKSxGMyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGwsRCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRy''@;'; put 'put ''YXRlKGwsRCl9cmV0dXJuKGQmcmEuU2VsZj9IMygpOnRoaXMucGFyZW50KS5nZXQobCxhPWQmcmEuT3B0aW9uYWwmJmE9PT1LMD9udWxsOmEpfWNhdGNoKE0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1NLm5hbWUpe2lmKChNW0ZjXT1NW0ZjXXx8W10pLnVuc2hpZnQoUHIobCkpLGYpdGhy''@;'; put 'put ''b3cgTTtyZXR1cm4gZnVuY3Rpb24gbGcoYyxsLGEsZCl7Y29uc3QgaD1jW0ZjXTt0aHJvdyBsW3NsXSYmaC51bnNoaWZ0KGxbc2xdKSxjLm1lc3NhZ2U9ZnVuY3Rpb24gZzQoYyxsLGEsZD1udWxsKXtjPWMmJiJcbiI9PT1jLmNoYXJBdCgwKSYmIlx1MDI3NSI9PWMuY2hhckF0KDEpP2Muc2xp''@;'; put 'put ''Y2UoMik6YztsZXQgaD1QcihsKTtpZihBcnJheS5pc0FycmF5KGwpKWg9bC5tYXAoUHIpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCl7bGV0IGY9W107Zm9yKGxldCB2IGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eSh2KSl7bGV0IE09bFt2XTtmLnB1c2godisiOiIr''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgTT9KU09OLnN0cmluZ2lmeShNKTpQcihNKSkpfWg9YHske2Yuam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7ZD8iKCIrZCsiKSI6IiJ9WyR7aH1dOiAke2MucmVwbGFjZShSdywiXG4gICIpfWB9KCJcbiIrYy5tZXNzYWdlLGgsYSxkKSxjLm5nVG9rZW5QYXRo''@;'; put 'put ''PWgsY1tGY109bnVsbCxjfShNLGwsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IE19ZmluYWxseXtfbCh2KSxuaChmKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgbD1fZShudWxsKSxhPW5oKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7Y29uc3QgZj10''@;'; put 'put ''aGlzLmdldCh0Mix0cyxyYS5TZWxmKTtmb3IoY29uc3QgdiBvZiBmKXYoKX1maW5hbGx5e25oKGEpLF9sKGQpLF9lKGwpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5rZXlzKCkpbC5wdXNoKFByKGQpKTtyZXR1cm5gUjNJbmplY3Rvclsk''@;'; put 'put ''e2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPV9mKGw9WWkobCkpP2w6WWkobCYmbC5wcm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIE42KGMpe3JldHVybiBP''@;'; put 'put ''NihjKT9OMyh2b2lkIDAsYy51c2VWYWx1ZSk6TjMod3YoYyksRjMpfShsKTtpZighX2YobCkmJiEwPT09bC5tdWx0aSl7bGV0IGg9dGhpcy5yZWNvcmRzLmdldChhKTtofHwoaD1OMyh2b2lkIDAsRjMsITApLGguZmFjdG9yeT0oKT0+c2coaC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGgp''@;'; put 'put ''KSxhPWwsaC5tdWx0aS5wdXNoKGwpfXRoaXMucmVjb3Jkcy5zZXQoYSxkKX1oeWRyYXRlKGwsYSl7Y29uc3QgZD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1GMyYmKGEudmFsdWU9WncsYS52YWx1ZT1hLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBhLnZhbHVlJiZhLnZhbHVl''@;'; put 'put ''JiZmdW5jdGlvbiBDdihjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChhLnZhbHVlKSxhLnZhbHVlfWZpbmFsbHl7X2UoZCl9fWluamVjdGFi''@;'; put 'put ''bGVEZWZJblNjb3BlKGwpe2lmKCFsLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1ZaShsLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJv''@;'; put 'put ''eShsKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YobCk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gZ2coYyl7Y29uc3QgbD1QbyhjKSxhPW51bGwhPT1sP2wuZmFjdG9yeTptdShjKTtpZihudWxsIT09YSlyZXR1cm4gYTtp''@;'; put 'put ''ZihjIGluc3RhbmNlb2YgU3QpdGhyb3cgbmV3IFFuKDIwNCwhMSk7aWYoYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiBfdihjKXtpZihjLmxlbmd0aD4wKXRocm93IG5ldyBRbigyMDQsITEpO2NvbnN0IGE9ZnVuY3Rpb24gem8oYyl7cmV0dXJuIGMmJihjW1NzXXx8Y1tI''@;'; put 'put ''b10pfHxudWxsfShjKTtyZXR1cm4gbnVsbCE9PWE/KCk9PmEuZmFjdG9yeShjKTooKT0+bmV3IGN9KGMpO3Rocm93IG5ldyBRbigyMDQsITEpfWZ1bmN0aW9uIHd2KGMsbCxhKXtsZXQgZDtpZihfZihjKSl7Y29uc3QgaD1ZaShjKTtyZXR1cm4gbXUoaCl8fGdnKGgpfWlmKE82KGMpKWQ9KCk9''@;'; put 'put ''PllpKGMudXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24geXYoYyl7cmV0dXJuISghY3x8IWMudXNlRmFjdG9yeSl9KGMpKWQ9KCk9PmMudXNlRmFjdG9yeSguLi5zZyhjLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbiBidihjKXtyZXR1cm4hKCFjfHwhYy51c2VFeGlzdGluZyl9KGMpKWQ9''@;'; put 'put ''KCk9PnhyKFlpKGMudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGg9WWkoYyYmKGMudXNlQ2xhc3N8fGMucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBXdyhjKXtyZXR1cm4hIWMuZGVwc30oYykpcmV0dXJuIG11KGgpfHxnZyhoKTtkPSgpPT5uZXcgaCguLi5zZyhjLmRlcHMpKX1yZXR1cm4gZH1m''@;'; put 'put ''dW5jdGlvbiBOMyhjLGwsYT0hMSl7cmV0dXJue2ZhY3Rvcnk6Yyx2YWx1ZTpsLG11bHRpOmE/W106dm9pZCAwfX1mdW5jdGlvbiBtZyhjLGwpe2Zvcihjb25zdCBhIG9mIGMpQXJyYXkuaXNBcnJheShhKT9tZyhhLGwpOmEmJlZhKGEpP21nKGEuXHUwMjc1cHJvdmlkZXJzLGwpOmwoYSl9ZnVu''@;'; put 'put ''Y3Rpb24gcTAoYyxsKXtjIGluc3RhbmNlb2YgY2QmJmMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgZD1uaChjKSxoPV9sKHZvaWQgMCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXtuaChkKSxfbChoKX19ZnVuY3Rpb24gU3YoKXtyZXR1cm4gdm9pZCAwIT09YWcoKXx8bnVsbCE9ZnVuY3Rp''@;'; put 'put ''b24gTHcoKXtyZXR1cm4gSTN9KCl9Y29uc3QgajY9RnVuY3Rpb247Y29uc3QgVWw9MCxLaT0xLFVhPTIsZmM9MyxOYz00LHJjPTUsbnU9NixYMD03LGNsPTgscGM9OSxMMT0xMCxibz0xMSxTZj0xMixDND0xMyxvMD0xNCxabD0xNSxTND0xNixNZj0xNyx1ZD0xOCx3MD0xOSxhMj0yMCxvMj0y''@;'; put 'put ''MSx2Zz0yMix4Zj0yMyx3bz0yNSx6Nj0xLHZ1PTcsVjM9OSxnYz0xMDt2YXIgYmc9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuSGFzVHJhbnNwbGFudGVkVmlld3M9Ml09Ikhhc1RyYW5zcGxhbnRlZFZpZXdzIixjfShiZ3x8e30pO2Z1bmN0aW9uIFB1KGMpe3Jl''@;'; put 'put ''dHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbejZdfWZ1bmN0aW9uIEZ1KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYhMD09PWNbejZdfWZ1bmN0aW9uIHJ1KGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gRWYoYyl7cmV0dXJuIGMuY29tcG9uZW50''@;'; put 'put ''T2Zmc2V0Pi0xfWZ1bmN0aW9uIEowKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gVmMoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHg0KGMpe3JldHVybiEhKDUxMiZjW1VhXSl9Y2xhc3MgdFZ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRo''@;'; put 'put ''aXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gV0EoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1mdW5jdGlvbiB3bCgpe3JldHVy''@;'; put 'put ''biBZQX1mdW5jdGlvbiBZQShjKXtyZXR1cm4gYy50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKGMuc2V0SW5wdXQ9clYpLG5WfWZ1bmN0aW9uIG5WKCl7Y29uc3QgYz0kQSh0aGlzKSxsPWM/LmN1cnJlbnQ7aWYobCl7Y29uc3QgYT1jLnByZXZpb3VzO2lmKGE9PT1JMCljLnByZXZpb3Vz''@;'; put 'put ''PWw7ZWxzZSBmb3IobGV0IGQgaW4gbClhW2RdPWxbZF07Yy5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhsKX19ZnVuY3Rpb24gclYoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMuZGVjbGFyZWRJbnB1dHNbZF0sdj0kQShjKXx8ZnVuY3Rpb24gaVYoYyxsKXtyZXR1cm4gY1tHQV09bH0o''@;'; put 'put ''Yyx7cHJldmlvdXM6STAsY3VycmVudDpudWxsfSksTT12LmN1cnJlbnR8fCh2LmN1cnJlbnQ9e30pLEQ9di5wcmV2aW91cyxaPURbZl07TVtmXT1uZXcgdFYoWiYmWi5jdXJyZW50VmFsdWUsYSxEPT09STApLFdBKGMsbCxoLGEpfXdsLm5nSW5oZXJpdD0hMDtjb25zdCBHQT0iX19uZ1NpbXBs''@;'; put 'put ''ZUNoYW5nZXNfXyI7ZnVuY3Rpb24gJEEoYyl7cmV0dXJuIGNbR0FdfHxudWxsfWNvbnN0IHUyPWZ1bmN0aW9uKGMsbCxhKXt9O2xldCBxQT0hMTtmdW5jdGlvbiBDbChjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9Y1tVbF07cmV0dXJuIGN9ZnVuY3Rpb24geWcoYyxsKXtyZXR1cm4gQ2wo''@;'; put 'put ''bFtjXSl9ZnVuY3Rpb24gTDAoYyxsKXtyZXR1cm4gQ2wobFtjLmluZGV4XSl9ZnVuY3Rpb24gWTYoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uIEU0KGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gTzEoYyxsKXtjb25zdCBhPWxbY107cmV0dXJuIFB1KGEpP2E6YVtVbF19ZnVuY3Rp''@;'; put 'put ''b24gUXcoYyl7cmV0dXJuISgxMjgmfmNbVWFdKX1mdW5jdGlvbiBkMihjLGwpe3JldHVybiBudWxsPT1sP251bGw6Y1tsXX1mdW5jdGlvbiBlQyhjKXtjW01mXT0wfWZ1bmN0aW9uIGNWKGMpezEwMjQmY1tVYV18fChjW1VhXXw9MTAyNCxRdyhjKSYmRzYoYykpfWZ1bmN0aW9uIEV2KGMpe3Jl''@;'; put 'put ''dHVybiEhKDkyMTYmY1tVYV18fGNbeGZdPy5kaXJ0eSl9ZnVuY3Rpb24gbkMoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoMSksRXYoYyk/RzYoYyk6NjQmY1tVYV0mJihmdW5jdGlvbiBvVigpe3JldHVybiBxQX0oKT8oY1tVYV18PTEwMjQsRzYoYykpOmNbTDFd''@;'; put 'put ''LmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCkpfWZ1bmN0aW9uIEc2KGMpe2NbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCk7bGV0IGw9VDQoYyk7Zm9yKDtudWxsIT09bCYmISg4MTkyJmxbVWFdKSYmKGxbVWFdfD04MTkyLFF3KGwpKTspbD1UNChsKX1m''@;'; put 'put ''dW5jdGlvbiBUdihjLGwpe2lmKCEoMjU2Jn5jW1VhXSkpdGhyb3cgbmV3IFFuKDkxMSwhMSk7bnVsbD09PWNbbzJdJiYoY1tvMl09W10pLGNbbzJdLnB1c2gobCl9ZnVuY3Rpb24gVDQoYyl7Y29uc3QgbD1jW2ZjXTtyZXR1cm4gRnUobCk/bFtmY106bH1jb25zdCBDbz17bEZyYW1lOmlrKG51''@;'; put 'put ''bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxza2lwSHlkcmF0aW9uUm9vdFROb2RlOm51bGx9O2Z1bmN0aW9uIGVrKCl7cmV0dXJuIENvLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBfZygpe3JldHVybiBudWxsIT09Q28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZX1mdW5jdGlvbiBkaSgpe3JldHVy''@;'; put 'put ''biBDby5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gbHMoKXtyZXR1cm4gQ28ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHd0KGMpe3JldHVybiBDby5sRnJhbWUuY29udGV4dExWaWV3PWMsY1tjbF19ZnVuY3Rpb24gQ3QoYyl7cmV0dXJuIENvLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxjfWZ1bmN0''@;'; put 'put ''aW9uIHVsKCl7bGV0IGM9ckMoKTtmb3IoO251bGwhPT1jJiY2ND09PWMudHlwZTspYz1jLnBhcmVudDtyZXR1cm4gY31mdW5jdGlvbiByQygpe3JldHVybiBDby5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIGgyKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5jdXJyZW50VE5vZGU9Yyxh''@;'; put 'put ''LmlzUGFyZW50PWx9ZnVuY3Rpb24gaUMoKXtyZXR1cm4gQ28ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIGFDKCl7Q28ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIE8wKCl7Y29uc3QgYz1Dby5sRnJhbWU7bGV0IGw9Yy5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09bCYmKGw9Yy5i''@;'; put 'put ''aW5kaW5nUm9vdEluZGV4PWMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLGx9ZnVuY3Rpb24gVGYoKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBhaCgpe3JldHVybiBDby5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gQWYoYyl7Y29uc3QgbD1Dby5sRnJh''@;'; put 'put ''bWUsYT1sLmJpbmRpbmdJbmRleDtyZXR1cm4gbC5iaW5kaW5nSW5kZXg9bC5iaW5kaW5nSW5kZXgrYyxhfWZ1bmN0aW9uIHlWKGMsbCl7Y29uc3QgYT1Dby5sRnJhbWU7YS5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nUm9vdEluZGV4PWMsb0MobCl9ZnVuY3Rpb24gb0MoYyl7Q28ubEZyYW1lLmN1''@;'; put 'put ''cnJlbnREaXJlY3RpdmVJbmRleD1jfWZ1bmN0aW9uIHNDKGMpe2NvbnN0IGw9Q28ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGxDKCl7cmV0dXJuIENvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBCMyhjKXtD''@;'; put 'put ''by5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9Y31mdW5jdGlvbiBjQyhjKXtjb25zdCBsPWNbS2ldO3JldHVybiAyPT09bC50eXBlP2wuZGVjbFROb2RlOjE9PT1sLnR5cGU/Y1tyY106bnVsbH1mdW5jdGlvbiBrdihjLGwsYSl7aWYoYSZyYS5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDsh''@;'; put 'put ''KGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmcmEuSG9zdHx8KGg9Y0MoZiksbnVsbD09PWh8fChmPWZbbzBdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD1Dby5sRnJhbWU9ajMoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9''@;'; put 'put ''ZnVuY3Rpb24gSzYoYyl7Y29uc3QgbD1qMygpLGE9Y1tLaV07Q28ubEZyYW1lPWwsbC5jdXJyZW50VE5vZGU9YS5maXJzdENoaWxkLGwubFZpZXc9YyxsLnRWaWV3PWEsbC5jb250ZXh0TFZpZXc9YyxsLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdTdGFydEluZGV4LGwuaW5JMThuPSExfWZ1bmN0''@;'; put 'put ''aW9uIGozKCl7Y29uc3QgYz1Dby5sRnJhbWUsbD1udWxsPT09Yz9udWxsOmMuY2hpbGQ7cmV0dXJuIG51bGw9PT1sP2lrKGMpOmx9ZnVuY3Rpb24gaWsoYyl7Y29uc3QgbD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6''@;'; put 'put ''LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OmMsY2hpbGQ6bnVsbCxp''@;'; put 'put ''bkkxOG46ITF9O3JldHVybiBudWxsIT09YyYmKGMuY2hpbGQ9bCksbH1mdW5jdGlvbiBEdigpe2NvbnN0IGM9Q28ubEZyYW1lO3JldHVybiBDby5sRnJhbWU9Yy5wYXJlbnQsYy5jdXJyZW50VE5vZGU9bnVsbCxjLmxWaWV3PW51bGwsY31jb25zdCBhaz1EdjtmdW5jdGlvbiB3Zygpe2NvbnN0''@;'; put 'put ''IGM9RHYoKTtjLmlzUGFyZW50PSEwLGMudFZpZXc9bnVsbCxjLnNlbGVjdGVkSW5kZXg9LTEsYy5jb250ZXh0TFZpZXc9bnVsbCxjLmVsZW1lbnREZXB0aENvdW50PTAsYy5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsYy5jdXJyZW50TmFtZXNwYWNlPW51bGwsYy5iaW5kaW5nUm9vdEluZGV4''@;'; put 'put ''PS0xLGMuYmluZGluZ0luZGV4PS0xLGMuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBOdSgpe3JldHVybiBDby5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBBNChjKXtDby5sRnJhbWUuc2VsZWN0ZWRJbmRleD1jfWZ1bmN0aW9uIEpzKCl7Y29uc3QgYz1Dby5sRnJhbWU7cmV0''@;'; put 'put ''dXJuIFk2KGMudFZpZXcsYy5zZWxlY3RlZEluZGV4KX1sZXQgc2s9ITA7ZnVuY3Rpb24gcTYoKXtyZXR1cm4gc2t9ZnVuY3Rpb24gZjIoYyl7c2s9Y31mdW5jdGlvbiBJdihjLGwpe2ZvcihsZXQgYT1sLmRpcmVjdGl2ZVN0YXJ0LGQ9bC5kaXJlY3RpdmVFbmQ7YTxkO2ErKyl7Y29uc3QgZj1j''@;'; put 'put ''LmRhdGFbYV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDp2LG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpNLG5nQWZ0ZXJWaWV3SW5pdDpELG5nQWZ0ZXJWaWV3Q2hlY2tlZDpaLG5nT25EZXN0cm95OnJlfT1mO3YmJihjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKC1hLHYpLE0m''@;'; put 'put ''JigoYy5jb250ZW50SG9va3M/Pz1bXSkucHVzaChhLE0pLChjLmNvbnRlbnRDaGVja0hvb2tzPz89W10pLnB1c2goYSxNKSksRCYmKGMudmlld0hvb2tzPz89W10pLnB1c2goLWEsRCksWiYmKChjLnZpZXdIb29rcz8/PVtdKS5wdXNoKGEsWiksKGMudmlld0NoZWNrSG9va3M/Pz1bXSkucHVz''@;'; put 'put ''aChhLFopKSxudWxsIT1yZSYmKGMuZGVzdHJveUhvb2tzPz89W10pLnB1c2goYSxyZSl9fWZ1bmN0aW9uIFJ2KGMsbCxhKXtsayhjLGwsMyxhKX1mdW5jdGlvbiBMdihjLGwsYSxkKXsoMyZjW1VhXSk9PT1hJiZsayhjLGwsYSxkKX1mdW5jdGlvbiBkQyhjLGwpe2xldCBhPWNbVWFdOygzJmEp''@;'; put 'put ''PT09bCYmKGEmPTE2MzgzLGErPTEsY1tVYV09YSl9ZnVuY3Rpb24gbGsoYyxsLGEsZCl7Y29uc3QgZj1kPz8tMSx2PWwubGVuZ3RoLTE7bGV0IE09MDtmb3IobGV0IEQ9dm9pZCAwIT09ZD82NTUzNSZjW01mXTowO0Q8djtEKyspaWYoIm51bWJlciI9PXR5cGVvZiBsW0QrMV0pe2lmKE09bFtE''@;'; put 'put ''XSxudWxsIT1kJiZNPj1kKWJyZWFrfWVsc2UgbFtEXTwwJiYoY1tNZl0rPTY1NTM2KSwoTTxmfHwtMT09ZikmJihFVihjLGEsbCxEKSxjW01mXT0oNDI5NDkwMTc2MCZjW01mXSkrRCsyKSxEKyt9ZnVuY3Rpb24gY2soYyxsKXt1Mig0LGMsbCk7Y29uc3QgYT1fZShudWxsKTt0cnl7bC5jYWxs''@;'; put 'put ''KGMpfWZpbmFsbHl7X2UoYSksdTIoNSxjLGwpfX1mdW5jdGlvbiBFVihjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbVWFdPj4xNDxjW01mXT4+MTYmJigzJmNbVWFdKT09PWwmJihjW1VhXSs9MTYzODQsY2soTSxmKSk6Y2soTSxmKX1jb25z''@;'; put 'put ''dCBrND0tMTtjbGFzcyBQMXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIE92KGMpe3JldHVybiBjIT09azR9ZnVuY3Rpb24gWDYoYyl7cmV0dXJu''@;'; put 'put ''IDMyNzY3JmN9ZnVuY3Rpb24gSjYoYyxsKXtsZXQgYT1mdW5jdGlvbiBSVihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW28wXSxhLS07cmV0dXJuIGR9bGV0IGZDPSEwO2Z1bmN0aW9uIFB2KGMpe2NvbnN0IGw9ZkM7cmV0dXJuIGZDPWMsbH1jb25zdCBGdj0yNTUscEM9''@;'; put 'put ''NTtsZXQgTFY9MDtjb25zdCBwMj17fTtmdW5jdGlvbiBIdihjLGwpe2NvbnN0IGE9TnYoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0tpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRleD1sLmxlbmd0aCxnQyhkLmRhdGEsYyksZ0MobCxudWxsKSxnQyhkLmJs''@;'; put 'put ''dWVwcmludCxudWxsKSk7Y29uc3QgaD1DZyhjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKE92KGgpKXtjb25zdCB2PVg2KGgpLE09SjYoaCxsKSxEPU1bS2ldLmRhdGE7Zm9yKGxldCBaPTA7Wjw4O1orKylsW2YrWl09TVt2K1pdfERbditaXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBn''@;'; put 'put ''QyhjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gTnYoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmluamVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmlu''@;'; put 'put ''amVjdG9ySW5kZXh9ZnVuY3Rpb24gQ2coYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zaChoKSxudWxsPT09ZClyZXR1cm4gazQ7''@;'; put 'put ''aWYoYSsrLGg9aFtvMF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gazR9ZnVuY3Rpb24gaGQoYyxsLGEpeyFmdW5jdGlvbiBPVihjLGwsYSl7bGV0IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFz''@;'; put 'put ''T3duUHJvcGVydHkoUGMpJiYoZD1hW1BjXSksbnVsbD09ZCYmKGQ9YVtQY109TFYrKyk7Y29uc3QgaD1kJkZ2O2wuZGF0YVtjKyhoPj5wQyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gdWsoYyxsLGEpe2lmKGEmcmEuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7TXMoKX1mdW5jdGlv''@;'; put 'put ''biBvaChjLGwsYSxkKXtpZihhJnJhLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKHJhLlNlbGZ8cmEuSG9zdCkpKXtjb25zdCBoPWNbcGNdLGY9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGg/aC5nZXQobCxkLGEmcmEuT3B0aW9uYWwpOnRoKGwsZCxhJnJhLk9wdGlvbmFsKX1m''@;'; put 'put ''aW5hbGx5e19sKGYpfX1yZXR1cm4gdWsoZCwwLGEpfWZ1bmN0aW9uIGRrKGMsbCxhLGQ9cmEuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW1VhXSYmIShkJnJhLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIFUzKGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYm''@;'; put 'put ''bnVsbCE9PXYmJjIwNDgmdltVYV0mJiEoNTEyJnZbVWFdKTspe2NvbnN0IE09U2coZix2LGEsZHxyYS5TZWxmLHAyKTtpZihNIT09cDIpcmV0dXJuIE07bGV0IEQ9Zi5wYXJlbnQ7aWYoIUQpe2NvbnN0IFo9dlthMl07aWYoWil7Y29uc3QgcmU9Wi5nZXQoYSxwMixkKTtpZihyZSE9PXAyKXJl''@;'; put 'put ''dHVybiByZX1EPXNoKHYpLHY9dltvMF19Zj1EfXJldHVybiBofShjLGwsYSxkLHAyKTtpZih2IT09cDIpcmV0dXJuIHZ9Y29uc3QgZj1TZyhjLGwsYSxkLHAyKTtpZihmIT09cDIpcmV0dXJuIGZ9cmV0dXJuIG9oKGwsYSxkLGgpfWZ1bmN0aW9uIFNnKGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5j''@;'; put 'put ''dGlvbiBUYyhjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoUGMpP2NbUGNdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bD49MD9sJkZ2OlEwOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBmKXtpZigha3YobCxjLGQpKXJldHVybiBkJnJhLkhvc3Q/dWsoaCwwLGQpOm9oKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZyYS5PcHRpb25hbClyZXR1cm4gdjtNcygpfWZpbmFsbHl7YWsoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51''@;'; put 'put ''bGwsTT1OdihjLGwpLEQ9azQsWj1kJnJhLkhvc3Q/bFtabF1bcmNdOm51bGw7Zm9yKCgtMT09PU18fGQmcmEuU2tpcFNlbGYpJiYoRD0tMT09PU0/Q2coYyxsKTpsW00rOF0sRCE9PWs0JiZ4ZyhkLCExKT8odj1sW0tpXSxNPVg2KEQpLGw9SjYoRCxsKSk6TT0tMSk7LTEhPT1NOyl7Y29uc3Qg''@;'; put 'put ''cmU9bFtLaV07aWYoTWcoZixNLHJlLmRhdGEpKXtjb25zdCBjZT1oayhNLGwsYSx2LGQsWik7aWYoY2UhPT1wMilyZXR1cm4gY2V9RD1sW00rOF0sRCE9PWs0JiZ4ZyhkLGxbS2ldLmRhdGFbTSs4XT09PVopJiZNZyhmLE0sbCk/KHY9cmUsTT1YNihEKSxsPUo2KEQsbCkpOk09LTF9fXJldHVy''@;'; put 'put ''biBofWZ1bmN0aW9uIGhrKGMsbCxhLGQsaCxmKXtjb25zdCB2PWxbS2ldLE09di5kYXRhW2MrOF0scmU9VnYoTSx2LGEsbnVsbD09ZD9FZihNKSYmZkM6ZCE9diYmISEoMyZNLnR5cGUpLGgmcmEuSG9zdCYmZj09PU0pO3JldHVybiBudWxsIT09cmU/RDQobCx2LHJlLE0pOnAyfWZ1bmN0aW9u''@;'; put 'put ''IFZ2KGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQscmU9Zj4+MjAsYmU9aD9NK3JlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgRWU9ZD9NOk0rcmU7RWU8YmU7RWUrKyl7Y29uc3QgQmU9dltFZV07aWYo''@;'; put 'put ''RWU8RCYmYT09PUJlfHxFZT49RCYmQmUudHlwZT09PWEpcmV0dXJuIEVlfWlmKGgpe2NvbnN0IEVlPXZbRF07aWYoRWUmJlZjKEVlKSYmRWUudHlwZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDQoYyxsLGEsZCl7bGV0IGg9Y1thXTtjb25zdCBmPWwuZGF0YTtpZihmdW5j''@;'; put 'put ''dGlvbiBUVihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFAxfShoKSl7Y29uc3Qgdj1oO3YucmVzb2x2aW5nJiZmdW5jdGlvbiAkMChjLGwpe3Rocm93IGwmJmwuam9pbigiID4gIiksbmV3IFFuKC0yMDAsYyl9KGZ1bmN0aW9uIFRhKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFt''@;'; put 'put ''ZXx8Yy50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6Q2EoYyl9KGZbYV0pKTtjb25zdCBNPVB2KHYuY2FuU2VlVmlld1Byb3ZpZGVycyk7di5yZXNvbHZpbmc9ITA7''@;'; put 'put ''Y29uc3QgWj12LmluamVjdEltcGw/X2wodi5pbmplY3RJbXBsKTpudWxsO2t2KGMsZCxyYS5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiB4VihjLGwsYSl7Y29uc3R7bmdP''@;'; put 'put ''bkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9WUEobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89''@;'; put 'put ''W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVomJl9sKFopLFB2KE0pLHYucmVzb2x2aW5nPSExLGFrKCl9fXJldHVybiBofWZ1''@;'; put 'put ''bmN0aW9uIE1nKGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PnBDKV0mMTw8Yyl9ZnVuY3Rpb24geGcoYyxsKXtyZXR1cm4hKGMmcmEuU2VsZnx8YyZyYS5Ib3N0JiZsKX1jbGFzcyBWdXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVy''@;'; put 'put ''biBkayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG9nKGQpLGEpfX1mdW5jdGlvbiBRMCgpe3JldHVybiBuZXcgVnUodWwoKSxkaSgpKX1mdW5jdGlvbiBXcyhjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fERmKGwpLGQ9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZTtsZXQgaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbamldfHxEZihoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9''@;'; put 'put ''KX1mdW5jdGlvbiBEZihjKXtyZXR1cm4geWwoYyk/KCk9Pntjb25zdCBsPURmKFlpKGMpKTtyZXR1cm4gbCYmbCgpfTptdShjKX1mdW5jdGlvbiBzaChjKXtjb25zdCBsPWNbS2ldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3JjXTpudWxsfWZ1bmN0aW9uIElm''@;'; put 'put ''KGMpe3JldHVybiBmdW5jdGlvbiBQVihjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYo''@;'; put 'put ''ZGcoZikpYnJlYWs7aWYoMD09PWYpaCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0odWwoKSxjKX1mdW5jdGlvbiB3QyhjLGw9''@;'; put 'put ''bnVsbCxhPW51bGwsZCl7Y29uc3QgaD1SNChjLGwsYSxkKTtyZXR1cm4gaC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxofWZ1bmN0aW9uIFI0KGMsbD1udWxsLGE9bnVsbCxkLGg9bmV3IFNldCl7Y29uc3QgZj1bYXx8dHMsencoYyldO3JldHVybiBkPWR8fCgib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGM/dm9pZCAwOlByKGMpKSxuZXcgY2QoZixsfHxIMygpLGR8fG51bGwsaCl9bGV0IERzPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuVEhST1dfSUZfTk9UX0ZPVU5EPUswfXN0YXRpY3t0aGlzLk5VTEw9bmV3IHVnfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEp''@;'; put 'put ''KXJldHVybiB3Qyh7bmFtZToiIn0sZCxhLCIiKTt7Y29uc3QgaD1hLm5hbWU/PyIiO3JldHVybiB3Qyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PnhyKEwzKX0p''@;'; put 'put ''fXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPS0xfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQWcoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIGcye2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmlu''@;'; put 'put ''ZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29sZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmQWcobCk7Zm9yKDthJiZBZyhhKTspYT1BZyhhKTtyZXR1cm4gYXx8bnVs''@;'; put 'put ''bH19Y29uc3QgbWs9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShnMikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IGtnPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189VzN9c3RhdGlje3RoaXMuX19OR19FTlZfSURf''@;'; put 'put ''Xz1hPT5hfX1yZXR1cm4gY30pKCk7Y2xhc3MgWjMgZXh0ZW5kcyBrZ3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiBUdih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rpb24gQXYoYyxsKXtpZihudWxsPT09Y1tvMl0pcmV0dXJuO2NvbnN0''@;'; put 'put ''IGE9Y1tvMl0uaW5kZXhPZihsKTstMSE9PWEmJmNbbzJdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gVzMoKXtyZXR1cm4gbmV3IFozKGRpKCkpfWZ1bmN0aW9uIE5WKCl7cmV0dXJuIEw0KHVsKCksZGkoKSl9ZnVuY3Rpb24gTDQoYyxsKXtyZXR1cm4gbmV3IEppKEww''@;'; put 'put ''KGMsbCkpfWxldCBKaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU5WfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYmsoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9jLm5hdGl2ZUVsZW1lbnQ6''@;'; put 'put ''Y31mdW5jdGlvbiBDQyhjKXtyZXR1cm4gbD0+e3NldFRpbWVvdXQoYyx2b2lkIDAsbCl9fWNvbnN0IEtyPWNsYXNzIFZWIGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLmRlc3Ryb3lSZWY9dm9pZCAwLHRoaXMuX19pc0FzeW5jPWwsU3YoKSYmKHRoaXMuZGVzdHJv''@;'; put 'put ''eVJlZj1maShrZyx7b3B0aW9uYWw6ITB9KT8/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 ''b3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9fWZ1bmN0aW9uIFV2KGMpe3JldHVybiEoMTI4Jn5jLmZsYWdzKX1jb25zdCBTQz1uZXcgTWFwO2xldCB6Vj0wO2NvbnN0IHhDPSJfX25nQ29u''@;'; put 'put ''dGV4dF9fIjtmdW5jdGlvbiBCdShjLGwpe1B1KGwpPyhjW3hDXT1sW3cwXSxmdW5jdGlvbiBaVihjKXtTQy5zZXQoY1t3MF0sYyl9KGwpKTpjW3hDXT1sfWZ1bmN0aW9uIHhrKGMpe3JldHVybiBUayhjW1NmXSl9ZnVuY3Rpb24gRWsoYyl7cmV0dXJuIFRrKGNbTmNdKX1mdW5jdGlvbiBUayhj''@;'; put 'put ''KXtmb3IoO251bGwhPT1jJiYhRnUoYyk7KWM9Y1tOY107cmV0dXJuIGN9bGV0IFRDO2Z1bmN0aW9uIFkzKCl7aWYodm9pZCAwIT09VEMpcmV0dXJuIFRDO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBRbigyMTAsITEpfWNvbnN0IEd2PW5ldyBTdCgi''@;'; put 'put ''Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+c0J9KSxzQj0ibmciLE9rPW5ldyBTdCgiIiksaW89bmV3IFN0KCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksUGs9bmV3IFN0KCIiKSxMZz1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''LGZhY3Rvcnk6KCk9PlkzKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSk7bGV0IEhrPSgpPT5udWxsO2Z1bmN0aW9uIFJDKGMsbCxhPSExKXtyZXR1cm4gSGsoYyxsLGEpfWNvbnN0IEJrPW5ldyBTdCgiIix7''@;'; put 'put ''cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtsZXQgSnYsUXY7ZnVuY3Rpb24gRmcoYyl7cmV0dXJuIGZ1bmN0aW9uIEhDKCl7aWYodm9pZCAwPT09SnYmJihKdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e0p2PVZ0LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3Vs''@;'; put 'put ''YXIiLHtjcmVhdGVIVE1MOmM9PmMsY3JlYXRlU2NyaXB0OmM9PmMsY3JlYXRlU2NyaXB0VVJMOmM9PmN9KX1jYXRjaHt9cmV0dXJuIEp2fSgpPy5jcmVhdGVIVE1MKGMpfHxjfWZ1bmN0aW9uIE5DKCl7aWYodm9pZCAwPT09UXYmJihRdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e1F2PVZ0''@;'; put 'put ''LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gUXZ9ZnVuY3Rpb24gemsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZUhUTUwo''@;'; put 'put ''Yyl8fGN9ZnVuY3Rpb24gWmsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZVNjcmlwdFVSTChjKXx8Y31jbGFzcyBXa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9bH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3By''@;'; put 'put ''b3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke3BhfSlgfX1mdW5jdGlvbiBtMihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdrP2MuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpjfWZ1bmN0aW9u''@;'; put 'put ''IEg0KGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBZayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdrJiZjLmdldFR5cGVOYW1lKCl8fG51bGx9KGMpO2lmKG51bGwhPWEmJmEhPT1sKXtpZigiUmVzb3VyY2VVUkwiPT09YSYmIlVSTCI9PT1sKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWly''@;'; put 'put ''ZWQgYSBzYWZlICR7bH0sIGdvdCBhICR7YX0gKHNlZSAke3BhfSlgKX1yZXR1cm4gYT09PWx9Y2xhc3MgR2t7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29u''@;'; put 'put ''c3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGZyhsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQobCk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1j''@;'; put 'put ''YXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIFRCe2NvbnN0cnVjdG9yKGwpe3RoaXMuZGVmYXVsdERvYz1sLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlF''@;'; put 'put ''bGVtZW50KGwpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPUZnKGwpLGF9fWNvbnN0IEFCPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0''@;'; put 'put ''aW9uIEJDKGMpe3JldHVybihjPVN0cmluZyhjKSkubWF0Y2goQUIpP2M6InVuc2FmZToiK2N9ZnVuY3Rpb24gTGYoYyl7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCIsIikpbFthXT0hMDtyZXR1cm4gbH1mdW5jdGlvbiBhOCguLi5jKXtjb25zdCBsPXt9O2Zvcihjb25zdCBh''@;'; put 'put ''IG9mIGMpZm9yKGNvbnN0IGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiYobFtkXT0hMCk7cmV0dXJuIGx9Y29uc3QgS2s9TGYoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxxaz1MZigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLFhrPUxmKCJy''@;'; put 'put ''cCxydCIpLGpDPWE4KEtrLGE4KHFrLExmKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixp''@;'; put 'put ''bnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxhOChYayxMZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVy''@;'; put 'put ''ZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGE4KFhrLHFrKSksekM9TGYoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6''@;'; put 'put ''aHJlZiIpLEprPWE4KHpDLExmKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVm''@;'; put 'put ''YXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJv''@;'; put 'put ''bGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxMZigi''@;'; put 'put ''YXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEt''@;'; put 'put ''ZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFy''@;'; put 'put ''aWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25s''@;'; put 'put ''eSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFs''@;'; put 'put ''dWVub3csYXJpYS12YWx1ZXRleHQiKSksa0I9TGYoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIFFre2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbihsKXtsZXQgYT1sLmZpcnN0Q2hpbGQsZD0hMCxoPVtd''@;'; put 'put ''O2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZCloLnB1''@;'; put 'put ''c2goYSksYT1SQihhKTtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBmPUlCKGEpO2lmKGYpe2E9ZjticmVha31hPWgucG9wKCl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChsKXtjb25zdCBh''@;'; put 'put ''PWVEKGwpLnRvTG93ZXJDYXNlKCk7aWYoIWpDLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwha0IuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxl''@;'; put 'put ''dCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZC5pdGVtKGgpLHY9Zi5uYW1lLE09di50b0xvd2VyQ2FzZSgpO2lmKCFKay5oYXNPd25Qcm9wZXJ0eShNKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IEQ9Zi52YWx1ZTt6Q1tNXSYmKEQ9QkMoRCkpLHRoaXMu''@;'; put 'put ''YnVmLnB1c2goIiAiLHYsJz0iJyxuRChEKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWVEKGwpLnRvTG93ZXJDYXNlKCk7akMuaGFzT3duUHJvcGVydHkoYSkmJiFLay5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwv''@;'; put 'put ''IiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGwpe3RoaXMuYnVmLnB1c2gobkQobCkpfX1mdW5jdGlvbiBJQihjKXtjb25zdCBsPWMubmV4dFNpYmxpbmc7aWYobCYmYyE9PWwucHJldmlvdXNTaWJsaW5nKXRocm93IHREKGwpO3JldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''IFJCKGMpe2NvbnN0IGw9Yy5maXJzdENoaWxkO2lmKGwmJmZ1bmN0aW9uIERCKGMsbCl7cmV0dXJuKGMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KGMs''@;'; put 'put ''bCkpdGhyb3cgdEQobCk7cmV0dXJuIGx9ZnVuY3Rpb24gZUQoYyl7Y29uc3QgbD1jLm5vZGVOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbD9sOiJGT1JNIn1mdW5jdGlvbiB0RChjKXtyZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVt''@;'; put 'put ''ZW50IGlzIGNsb2JiZXJlZDogJHtjLm91dGVySFRNTH1gKX1jb25zdCBMQj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csT0I9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIG5EKGMpe3JldHVybiBjLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKExCLGZ1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiImIyIrKDEwMjQqKGwuY2hhckNvZGVBdCgwKS01NTI5NikrKGwuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoT0IsZnVuY3Rpb24obCl7cmV0dXJuIiYjIitsLmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgv''@;'; put 'put ''Pi9nLCImZ3Q7Iil9bGV0IGViO2Z1bmN0aW9uIFVDKGMpe3JldHVybiJjb250ZW50ImluIGMmJmZ1bmN0aW9uIEZCKGMpe3JldHVybiBjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1jLm5vZGVOYW1lfShjKT9jLmNvbnRlbnQ6bnVsbH12YXIgTmc9ZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuSFRNTD0xXT0iSFRNTCIsY1tjLlNUWUxFPTJdPSJTVFlMRSIsY1tjLlNDUklQVD0zXT0iU0NSSVBUIixjW2MuVVJMPTRdPSJVUkwiLGNbYy5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsY30oTmd8fHt9KTtmdW5jdGlv''@;'; put 'put ''biBWNChjKXtjb25zdCBsPW84KCk7cmV0dXJuIGw/emsobC5zYW5pdGl6ZShOZy5IVE1MLGMpfHwiIik6SDQoYywiSFRNTCIpP3prKG0yKGMpKTpmdW5jdGlvbiBQQihjLGwpe2xldCBhPW51bGw7dHJ5e2ViPWVifHxmdW5jdGlvbiBWQyhjKXtjb25zdCBsPW5ldyBUQihjKTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gJGsoKXt0cnl7cmV0dXJuISEobmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhGZygiIiksInRleHQvaHRtbCIpfWNhdGNoe3JldHVybiExfX0oKT9uZXcgR2sobCk6bH0oYyk7bGV0IGQ9bD9TdHJpbmcobCk6IiI7YT1lYi5nZXRJbmVydEJvZHlFbGVtZW50KGQp''@;'; put 'put ''O2xldCBoPTUsZj1kO2Rve2lmKDA9PT1oKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtoLS0sZD1mLGY9YS5pbm5lckhUTUwsYT1lYi5nZXRJbmVydEJvZHlFbGVtZW50KGQpfXdoaWxlKGQhPT1mKTtyZXR1''@;'; put 'put ''cm4gRmcoKG5ldyBRaykuc2FuaXRpemVDaGlsZHJlbihVQyhhKXx8YSkpfWZpbmFsbHl7aWYoYSl7Y29uc3QgZD1VQyhhKXx8YTtmb3IoO2QuZmlyc3RDaGlsZDspZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQpfX19KFkzKCksQ2EoYykpfWZ1bmN0aW9uIFpDKGMpe2NvbnN0IGw9bzgoKTty''@;'; put 'put ''ZXR1cm4gbD9sLnNhbml0aXplKE5nLlVSTCxjKXx8IiI6SDQoYywiVVJMIik/bTIoYyk6QkMoQ2EoYykpfWZ1bmN0aW9uIHJEKGMpe2NvbnN0IGw9bzgoKTtpZihsKXJldHVybiBaayhsLnNhbml0aXplKE5nLlJFU09VUkNFX1VSTCxjKXx8IiIpO2lmKEg0KGMsIlJlc291cmNlVVJMIikpcmV0''@;'; put 'put ''dXJuIFprKG0yKGMpKTt0aHJvdyBuZXcgUW4oOTA0LCExKX1mdW5jdGlvbiBvOCgpe2NvbnN0IGM9ZGkoKTtyZXR1cm4gYyYmY1tMMV0uc2FuaXRpemVyfWNvbnN0IHpCPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csVUI9Lyg8fD4pL2csWkI9Ilx1MjAwYiQxXHUyMDBiIjtmdW5jdGlv''@;'; put 'put ''biBxQyhjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uICQzKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gRjEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj9jKCk6Y312YXIgSzM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBv''@;'; put 'put ''cnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsY30oSzN8fHt9KTtsZXQgWEM7ZnVuY3Rpb24gSkMoYyxsKXtyZXR1cm4gWEMoYyxsKX1mdW5jdGlvbiBCZyhjLGwsYSxkLGgpe2lmKG51bGwhPWQpe2xldCBmLHY9ITE7RnUoZCk/Zj1kOlB1KGQpJiYodj0h''@;'; put 'put ''MCxkPWRbVWxdKTtjb25zdCBNPUNsKGQpOzA9PT1jJiZudWxsIT09YT9udWxsPT1oP2FiKGwsYSxNKTpaNChsLGEsTSxofHxudWxsLCEwKToxPT09YyYmbnVsbCE9PWE/WjQobCxhLE0saHx8bnVsbCwhMCk6Mj09PWM/ZnVuY3Rpb24gZDgoYyxsLGEpe2NvbnN0IGQ9cTMoYyxsKTtkJiZmdW5j''@;'; put 'put ''dGlvbiBsOChjLGwsYSxkKXtjLnJlbW92ZUNoaWxkKGwsYSxkKX0oYyxkLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxudWxsIT1mJiZmdW5jdGlvbiBuaihjLGwsYSxkLGgpe2NvbnN0IGY9YVt2dV07ZiE9PUNsKGEpJiZCZyhsLGMsZCxmLGgpO2ZvcihsZXQgTT1nYztN''@;'; put 'put ''PGEubGVuZ3RoO00rKyl7Y29uc3QgRD1hW01dO29iKERbS2ldLEQsYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBlUyhjLGwpe3JldHVybiBjLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gVmcoYyl7cmV0dXJuIGMucmVwbGFjZSh6QixsPT5sLnJlcGxhY2UoVUIsWkIpKX0obCkpfWZ1''@;'; put 'put ''bmN0aW9uIHo0KGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gaEQoYyxsKXtsW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxvYihjLGwsbFtib10sMixudWxsLG51bGwpfWZ1bmN0aW9uIG5TKGMsbCl7Y29uc3QgYT1jW1YzXSxkPWEu''@;'; put 'put ''aW5kZXhPZihsKTthLnNwbGljZShkLDEpfWZ1bmN0aW9uIHM4KGMsbCl7aWYoYy5sZW5ndGg8PWdjKXJldHVybjtjb25zdCBhPWdjK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFtTNF07bnVsbCE9PWgmJmghPT1jJiZuUyhoLGQpLGw+MCYmKGNbYS0xXVtOY109ZFtOY10pO2NvbnN0IGY9THUo''@;'; put 'put ''YyxnYytsKTshZnVuY3Rpb24gZEQoYyxsKXtoRChjLGwpLGxbVWxdPW51bGwsbFtyY109bnVsbH0oZFtLaV0sZCk7Y29uc3Qgdj1mW3VkXTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbS2ldKSxkW2ZjXT1udWxsLGRbTmNdPW51bGwsZFtVYV0mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gVTQo''@;'; put 'put ''YyxsKXtpZighKDI1NiZsW1VhXSkpe2NvbnN0IGE9bFtib107YS5kZXN0cm95Tm9kZSYmb2IoYyxsLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIEpCKGMpe2xldCBsPWNbU2ZdO2lmKCFsKXJldHVybiByUyhjW0tpXSxjKTtmb3IoO2w7KXtsZXQgYT1udWxsO2lmKFB1KGwpKWE9bFtTZl07ZWxz''@;'; put 'put ''ZXtjb25zdCBkPWxbZ2NdO2QmJihhPWQpfWlmKCFhKXtmb3IoO2wmJiFsW05jXSYmbCE9PWM7KVB1KGwpJiZyUyhsW0tpXSxsKSxsPWxbZmNdO251bGw9PT1sJiYobD1jKSxQdShsKSYmclMobFtLaV0sbCksYT1sJiZsW05jXX1sPWF9fShsKX19ZnVuY3Rpb24gclMoYyxsKXtpZigyNTYmbFtV''@;'; put 'put ''YV0pcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbVWFdJj0tMTI5LGxbVWFdfD0yNTYsbFt4Zl0mJmZ1bmN0aW9uIEEoYyl7aWYod2UoYyksc2UoYykpZm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXRlKGMucHJvZHVjZXJOb2RlW2xdLGMucHJvZHVjZXJJbmRl''@;'; put 'put ''eE9mVGhpc1tsXSk7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ubGVuZ3RoPWMucHJvZHVjZXJJbmRleE9mVGhpcy5sZW5ndGg9MCxjLmxpdmVDb25zdW1lck5vZGUmJihjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoPWMubGl2ZUNvbnN1bWVySW5kZXhP''@;'; put 'put ''ZlRoaXMubGVuZ3RoPTApfShsW3hmXSksZnVuY3Rpb24gZWooYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtkXV07aWYoIShoIGluc3RhbmNlb2YgUDEpKXtjb25zdCBmPWFbZCsx''@;'; put 'put ''XTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEQ9Zlt2KzFdO3UyKDQsTSxEKTt0cnl7RC5jYWxsKE0pfWZpbmFsbHl7dTIoNSxNLEQpfX1lbHNle3UyKDQsaCxmKTt0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7dTIoNSxoLGYp''@;'; put 'put ''fX19fX0oYyxsKSxmdW5jdGlvbiBmRChjLGwpe2NvbnN0IGE9Yy5jbGVhbnVwLGQ9bFtYMF07aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aC0xO2YrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBhW2ZdKXtjb25zdCB2PWFbZiszXTt2Pj0wP2Rbdl0oKTpkWy12XS51bnN1YnNjcmli''@;'; put 'put ''ZSgpLGYrPTJ9ZWxzZSBhW2ZdLmNhbGwoZFthW2YrMV1dKTtudWxsIT09ZCYmKGxbWDBdPW51bGwpO2NvbnN0IGg9bFtvMl07aWYobnVsbCE9PWgpe2xbbzJdPW51bGw7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspKDAsaFtmXSkoKX19KGMsbCksMT09PWxbS2ldLnR5cGUmJmxbYm9dLmRl''@;'; put 'put ''c3Ryb3koKTtjb25zdCBkPWxbUzRdO2lmKG51bGwhPT1kJiZGdShsW2ZjXSkpe2QhPT1sW2ZjXSYmblMoZCxsKTtjb25zdCBoPWxbdWRdO251bGwhPT1oJiZoLmRldGFjaFZpZXcoYyl9IWZ1bmN0aW9uIFdWKGMpe1NDLmRlbGV0ZShjW3cwXSl9KGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9u''@;'; put 'put ''IGliKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gaVMoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtVbF07e2NvbnN0e2NvbXBvbmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRp''@;'; put 'put ''b246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PVhzLk5vbmV8fGY9PT1Ycy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gTDAoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWjQoYyxsLGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBh''@;'; put 'put ''YihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIHBEKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WjQoYyxsLGEsZCxoKTphYihjLGwsYSl9ZnVuY3Rpb24gcTMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwpfWZ1bmN0aW9uIHU4KGMsbCxhKXtyZXR1cm4gWDMoYyxsLGEpfWxldCBz''@;'; put 'put ''UyxYMz1mdW5jdGlvbiBvUyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9MMChjLGEpOm51bGx9O2Z1bmN0aW9uIGwwKGMsbCxhLGQpe2NvbnN0IGg9aWIoYyxkLGwpLGY9bFtib10sTT11OChkLnBhcmVudHx8bFtyY10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxl''@;'; put 'put ''dCBEPTA7RDxhLmxlbmd0aDtEKyspcEQoZixoLGFbRF0sTSwhMSk7ZWxzZSBwRChmLGgsYSxNLCExKTt2b2lkIDAhPT1zUyYmc1MoZixkLGwsYSxoKX1mdW5jdGlvbiBKMyhjLGwpe2lmKG51bGwhPT1sKXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEwwKGwsYyk7aWYoNCZhKXJldHVy''@;'; put 'put ''biBjUygtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gSjMoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBGdShoKT9jUygtMSxoKTpDbChoKX19aWYoMzImYSlyZXR1cm4gSkMobCxjKSgpfHxDbChjW2wuaW5kZXhdKTt7Y29u''@;'; put 'put ''c3QgZD1nRChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06SjMoVDQoY1tabF0pLGQpOkozKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gZ0QoYyxsKXtyZXR1cm4gbnVsbCE9PWw/Y1tabF1bcmNdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxs''@;'; put 'put ''fWZ1bmN0aW9uIGNTKGMsbCl7Y29uc3QgYT1nYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtLaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gSjMoZCxoKX1yZXR1cm4gbFt2dV19ZnVuY3Rpb24gdVMoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7Y29u''@;'; put 'put ''c3QgTT1kW2EuaW5kZXhdLEQ9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmQnUoQ2woTSksZCksYS5mbGFnc3w9MiksMzImfmEuZmxhZ3MpaWYoOCZEKXVTKGMsbCxhLmNoaWxkLGQsaCxmLCExKSxCZyhsLGMsaCxNLGYpO2Vsc2UgaWYoMzImRCl7Y29uc3QgWj1KQyhhLGQpO2xldCByZTtmb3Io''@;'; put 'put ''O3JlPVooKTspQmcobCxjLGgscmUsZik7QmcobCxjLGgsTSxmKX1lbHNlIDE2JkQ/dkQoYyxsLGQsYSxoLGYpOkJnKGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBvYihjLGwsYSxkLGgsZil7dVMoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVu''@;'; put 'put ''Y3Rpb24gdkQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9YVtabF0sRD12W3JjXS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShEKSlmb3IobGV0IFo9MDtaPEQubGVuZ3RoO1orKylCZyhsLGMsaCxEW1pdLGYpO2Vsc2V7bGV0IFo9RDtjb25zdCByZT12W2ZjXTtVdihk''@;'; put 'put ''KSYmKFouZmxhZ3N8PTEyOCksdVMoYyxsLFoscmUsaCxmLCEwKX19ZnVuY3Rpb24gX0QoYyxsLGEpeyIiPT09YT9jLnJlbW92ZUF0dHJpYnV0ZShsLCJjbGFzcyIpOmMuc2V0QXR0cmlidXRlKGwsImNsYXNzIixhKX1mdW5jdGlvbiB3RChjLGwsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZCxjbGFz''@;'; put 'put ''c2VzOmgsc3R5bGVzOmZ9PWE7bnVsbCE9PWQmJm00KGMsbCxkKSxudWxsIT09aCYmX0QoYyxsLGgpLG51bGwhPT1mJiZmdW5jdGlvbiB5RChjLGwsYSl7Yy5zZXRBdHRyaWJ1dGUobCwic3R5bGUiLGEpfShjLGwsZil9Y29uc3QgUm89e307ZnVuY3Rpb24gZmUoYz0xKXtkUyhscygpLGRpKCks''@;'; put 'put ''TnUoKStjLCExKX1mdW5jdGlvbiBkUyhjLGwsYSxkKXtpZighZClpZigzJn5sW1VhXSl7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkx2KGwsZiwwLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYmUnYobCxmLGEpfUE0KGEpfWZ1bmN0aW9u''@;'; put 'put ''IEdlKGMsbD1yYS5EZWZhdWx0KXtjb25zdCBhPWRpKCk7cmV0dXJuIG51bGw9PT1hP3hyKGMsbCk6ZGsodWwoKSxhLFlpKGMpLGwpfWZ1bmN0aW9uIFNEKGMsbCxhLGQsaCxmKXtjb25zdCB2PV9lKG51bGwpO3RyeXtsZXQgTT1udWxsO2gmTm4uU2lnbmFsQmFzZWQmJihNPWxbZF1bbWVdKSxu''@;'; put 'put ''dWxsIT09TSYmdm9pZCAwIT09TS50cmFuc2Zvcm1GbiYmKGY9TS50cmFuc2Zvcm1GbihmKSksaCZObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSYmKGY9Yy5pbnB1dFRyYW5zZm9ybXNbZF0uY2FsbChsLGYpKSxudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwsTSxmLGEsZCk6V0Eo''@;'; put 'put ''bCxNLGQsZil9ZmluYWxseXtfZSh2KX19ZnVuY3Rpb24gc2IoYyxsLGEsZCxoLGYsdixNLEQsWixyZSl7Y29uc3QgY2U9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gY2VbVWxdPWgsY2VbVWFdPTIwNHxkLChudWxsIT09Wnx8YyYmMjA0OCZjW1VhXSkmJihjZVtVYV18PTIwNDgpLGVDKGNl''@;'; put 'put ''KSxjZVtmY109Y2VbbzBdPWMsY2VbY2xdPWEsY2VbTDFdPXZ8fGMmJmNbTDFdLGNlW2JvXT1NfHxjJiZjW2JvXSxjZVtwY109RHx8YyYmY1twY118fG51bGwsY2VbcmNdPWYsY2VbdzBdPWZ1bmN0aW9uIFVWKCl7cmV0dXJuIHpWKyt9KCksY2VbbnVdPXJlLGNlW2EyXT1aLGNlW1psXT0yPT1s''@;'; put 'put ''LnR5cGU/Y1tabF06Y2UsY2V9ZnVuY3Rpb24gamcoYyxsLGEsZCxoKXtsZXQgZj1jLmRhdGFbbF07aWYobnVsbD09PWYpZj1mdW5jdGlvbiBoUyhjLGwsYSxkLGgpe2NvbnN0IGY9ckMoKSx2PWlDKCksRD1jLmRhdGFbbF09ZnVuY3Rpb24ga0QoYyxsLGEsZCxoLGYpe2xldCB2PWw/bC5pbmpl''@;'; put 'put ''Y3RvckluZGV4Oi0xLE09MDtyZXR1cm4gX2coKSYmKE18PTEyOCkse3R5cGU6YSxpbmRleDpkLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp2LGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZz''@;'; put 'put ''ZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOk0scHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6aCxhdHRyczpmLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6''@;'; put 'put ''bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGws''@;'; put 'put ''cmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIG51bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9RCksbnVsbCE9PWYmJih2P251bGw9PWYuY2hpbGQmJm51bGwhPT1E''@;'; put 'put ''LnBhcmVudCYmKGYuY2hpbGQ9RCk6bnVsbD09PWYubmV4dCYmKGYubmV4dD1ELEQucHJldj1mKSksRH0oYyxsLGEsZCxoKSxmdW5jdGlvbiBiVigpe3JldHVybiBDby5sRnJhbWUuaW5JMThufSgpJiYoZi5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmZi50eXBlKXtmLnR5cGU9YSxmLnZhbHVlPWQs''@;'; put 'put ''Zi5hdHRycz1oO2NvbnN0IHY9ZnVuY3Rpb24gJDYoKXtjb25zdCBjPUNvLmxGcmFtZSxsPWMuY3VycmVudFROb2RlO3JldHVybiBjLmlzUGFyZW50P2w6bC5wYXJlbnR9KCk7Zi5pbmplY3RvckluZGV4PW51bGw9PT12Py0xOnYuaW5qZWN0b3JJbmRleH1yZXR1cm4gaDIoZiwhMCksZn1mdW5j''@;'; put 'put ''dGlvbiBoOChjLGwsYSxkKXtpZigwPT09YSlyZXR1cm4tMTtjb25zdCBoPWwubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8YTtmKyspbC5wdXNoKGQpLGMuYmx1ZXByaW50LnB1c2goZCksYy5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGh9ZnVuY3Rpb24gTUQoYyxsLGEsZCxoKXtjb25zdCBmPU51KCks''@;'; put 'put ''dj0yJmQ7dHJ5e0E0KC0xKSx2JiZsLmxlbmd0aD53byYmZFMoYyxsLHdvLCExKSx1Mih2PzI6MCxoKSxhKGQsaCl9ZmluYWxseXtBNChmKSx1Mih2PzM6MSxoKX19ZnVuY3Rpb24gZlMoYyxsLGEpe2lmKHJ1KGwpKXtjb25zdCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5k''@;'; put 'put ''O2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gcFMoYyxsLGEpe2VrKCkmJihmdW5jdGlvbiBoaihjLGwsYSxkKXtj''@;'; put 'put ''b25zdCBoPWEuZGlyZWN0aXZlU3RhcnQsZj1hLmRpcmVjdGl2ZUVuZDtFZihhKSYmZnVuY3Rpb24gYmooYyxsLGEpe2NvbnN0IGQ9TDAobCxjKSxoPWxiKGEpO2xldCB2PTE2O2Euc2lnbmFscz92PTQwOTY6YS5vblB1c2gmJih2PTY0KTtjb25zdCBNPWY4KGMsc2IoYyxoLG51bGwsdixkLGws''@;'; put 'put ''bnVsbCxjW0wxXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZCxhKSxudWxsLG51bGwsbnVsbCkpO2NbbC5pbmRleF09TX0obCxhLGMuZGF0YVtoK2EuY29tcG9uZW50T2Zmc2V0XSksYy5maXJzdENyZWF0ZVBhc3N8fEh2KGEsbCksQnUoZCxsKTtjb25zdCB2PWEuaW5pdGlhbElu''@;'; put 'put ''cHV0cztmb3IobGV0IE09aDtNPGY7TSsrKXtjb25zdCBEPWMuZGF0YVtNXSxaPUQ0KGwsYyxNLGEpO0J1KFosbCksbnVsbCE9PXYmJmNiKDAsTS1oLFosRCwwLHYpLFZjKEQpJiYoTzEoYS5pbmRleCxsKVtjbF09RDQobCxjLE0sYSkpfX0oYyxsLGEsTDAoYSxsKSksISg2NCZ+YS5mbGFncykm''@;'; put 'put ''JkxEKGMsbCxhKSl9ZnVuY3Rpb24gZ1MoYyxsLGE9TDApe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtjb25zdCB2PWRbZisxXSxNPS0xPT09dj9hKGwsYyk6Y1t2XTtjW2grK109TX19fWZ1bmN0''@;'; put 'put ''aW9uIGxiKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PW1TKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0''@;'; put 'put ''cyxjLmlkKTpsfWZ1bmN0aW9uIG1TKGMsbCxhLGQsaCxmLHYsTSxELFoscmUpe2NvbnN0IGNlPXdvK2QsYmU9Y2UraCxFZT1mdW5jdGlvbiBpaihjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2goZDxjP251bGw6Um8pO3JldHVybiBhfShjZSxiZSksQmU9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFo/WigpOlo7cmV0dXJuIEVlW0tpXT17dHlwZTpjLGJsdWVwcmludDpFZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOkVlLnNsaWNlKCkuZmlsbChudWxsLGNlKSxiaW5kaW5nU3RhcnRJbmRleDpjZSxleHBhbmRvU3Rh''@;'; put 'put ''cnRJbmRleDpiZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250''@;'; put 'put ''ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpCZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOnJlfX1sZXQgeEQ9KCk9Pm51bGw7ZnVuY3Rpb24gREQoYyxsLGEsZCxo''@;'; put 'put ''KXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBNLEQ9Tm4uTm9uZTtBcnJheS5pc0FycmF5KHYpPyhNPXZbMF0sRD12WzFdKTpNPXY7bGV0IFo9ZjtpZihudWxsIT09''@;'; put 'put ''aCl7aWYoIWguaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Wj1oW2ZdfTA9PT1jP0lEKGQsYSxaLE0sRCk6SUQoZCxhLFosTSl9cmV0dXJuIGR9ZnVuY3Rpb24gSUQoYyxsLGEsZCxoKXtsZXQgZjtjLmhhc093blByb3BlcnR5KGEpPyhmPWNbYV0pLnB1c2gobCxkKTpmPWNbYV09W2wsZF0s''@;'; put 'put ''dm9pZCAwIT09aCYmZi5wdXNoKGgpfWZ1bmN0aW9uIEYwKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1MMChsLGEpO2xldCByZSxaPWwuaW5wdXRzOyFNJiZudWxsIT1aJiYocmU9WltkXSk/KENTKGMsYSxyZSxkLGgpLEVmKGwpJiZmdW5jdGlvbiBjaihjLGwpe2NvbnN0IGE9TzEobCxjKTsx''@;'; put 'put ''NiZhW1VhXXx8KGFbVWFdfD02NCl9KGEsbC5pbmRleCkpOjMmbC50eXBlJiYoZD1mdW5jdGlvbiBsaihjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJI''@;'; put 'put ''VE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpKX1mdW5jdGlvbiB2UyhjLGwsYSxkKXtpZihlaygpKXtjb25zdCBoPW51bGw9PT1kP251''@;'; put 'put ''bGw6eyIiOi0xfSxmPWZ1bmN0aW9uIGZqKGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGwsaD1udWxsO2lmKGEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXTtpZihiNChsLHYuc2VsZWN0b3JzLCExKSlpZihkfHwoZD1bXSksVmModikp''@;'; put 'put ''aWYobnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBNPVtdO2g9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh2LE0saCksZC51bnNoaWZ0KC4uLk0sdikseVMoYyxsLE0ubGVuZ3RoKX1lbHNlIGQudW5zaGlmdCh2KSx5UyhjLGwsMCk7ZWxzZSBoPWh8fG5l''@;'; put 'put ''dyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnM/Lih2LGQsaCksZC5wdXNoKHYpfXJldHVybiBudWxsPT09ZD9udWxsOltkLGhdfShjLGEpO2xldCB2LE07bnVsbD09PWY/dj1NPW51bGw6W3YsTV09ZixudWxsIT09diYmYlMoYyxsLGEsdixoLE0pLGgmJmZ1bmN0aW9uIHBqKGMsbCxhKXtp''@;'; put 'put ''ZihsKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51bGw9PWYpdGhyb3cgbmV3IFFuKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX19KGEsZCxoKX1hLm1lcmdlZEF0dHJzPXZmKGEubWVyZ2VkQXR0cnMs''@;'; put 'put ''YS5hdHRycyl9ZnVuY3Rpb24gYlMoYyxsLGEsZCxoLGYpe2ZvcihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKWhkKEh2KGEsbCksYyxkW1pdLnR5cGUpOyFmdW5jdGlvbiBtaihjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJ''@;'; put 'put ''bmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKyspe2NvbnN0IHJlPWRbWl07cmUucHJvdmlkZXJzUmVzb2x2ZXImJnJlLnByb3ZpZGVyc1Jlc29sdmVyKHJlKX1sZXQgdj0hMSxNPSExLEQ9aDgoYyxsLGQubGVuZ3RoLG51bGwpO2Zv''@;'; put 'put ''cihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKXtjb25zdCByZT1kW1pdO2EubWVyZ2VkQXR0cnM9dmYoYS5tZXJnZWRBdHRycyxyZS5ob3N0QXR0cnMpLHZqKGMsYSxsLEQscmUpLGdqKEQscmUsaCksbnVsbCE9PXJlLmNvbnRlbnRRdWVyaWVzJiYoYS5mbGFnc3w9NCksKG51bGwhPT1yZS5ob3N0''@;'; put 'put ''QmluZGluZ3N8fG51bGwhPT1yZS5ob3N0QXR0cnN8fDAhPT1yZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgY2U9cmUudHlwZS5wcm90b3R5cGU7IXYmJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdPbkluaXR8fGNlLm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckhvb2tzPz89W10pLnB1''@;'; put 'put ''c2goYS5pbmRleCksdj0hMCksIU0mJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLE09ITApLEQrK30hZnVuY3Rpb24gc2ooYyxsLGEpe2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQsZj1jLmRhdGEsdj1sLmF0''@;'; put 'put ''dHJzLE09W107bGV0IEQ9bnVsbCxaPW51bGw7Zm9yKGxldCByZT1sLmRpcmVjdGl2ZVN0YXJ0O3JlPGg7cmUrKyl7Y29uc3QgY2U9ZltyZV0sYmU9YT9hLmdldChjZSk6bnVsbCxCZT1iZT9iZS5vdXRwdXRzOm51bGw7RD1ERCgwLGNlLmlucHV0cyxyZSxELGJlP2JlLmlucHV0czpudWxsKSxa''@;'; put 'put ''PUREKDEsY2Uub3V0cHV0cyxyZSxaLEJlKTtjb25zdCBxZT1udWxsPT09RHx8bnVsbD09PXZ8fHY0KGwpP251bGw6UEQoRCxyZSx2KTtNLnB1c2gocWUpfW51bGwhPT1EJiYoRC5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKGwuZmxhZ3N8PTgpLEQuaGFzT3duUHJvcGVydHkoInN0eWxlIikm''@;'; put 'put ''JihsLmZsYWdzfD0xNikpLGwuaW5pdGlhbElucHV0cz1NLGwuaW5wdXRzPUQsbC5vdXRwdXRzPVp9KGMsYSxmKX1mdW5jdGlvbiBMRChjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24gX1YoKXtyZXR1cm4gQ28ubEZy''@;'; put 'put ''YW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7QTQoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sWj1sW01dO29DKE0pLChudWxsIT09RC5ob3N0QmluZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZPRChELFopfX1maW5h''@;'; put 'put ''bGx5e0E0KC0xKSxvQyh2KX19ZnVuY3Rpb24gT0QoYyxsKXtudWxsIT09Yy5ob3N0QmluZGluZ3MmJmMuaG9zdEJpbmRpbmdzKDEsbCl9ZnVuY3Rpb24geVMoYyxsLGEpe2wuY29tcG9uZW50T2Zmc2V0PWEsKGMuY29tcG9uZW50cz8/PVtdKS5wdXNoKGwuaW5kZXgpfWZ1bmN0aW9uIGdqKGMs''@;'; put 'put ''bCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztWYyhsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiB2aihjLGwsYSxkLGgpe2MuZGF0YVtkXT1oO2NvbnN0IGY9aC5mYWN0b3J5fHwoaC5mYWN0b3J5PW11''@;'; put 'put ''KGgudHlwZSkpLHY9bmV3IFAxKGYsVmMoaCksR2UpO2MuYmx1ZXByaW50W2RdPXYsYVtkXT12LGZ1bmN0aW9uIFJEKGMsbCxhLGQsaCl7Y29uc3QgZj1oLmhvc3RCaW5kaW5ncztpZihmKXtsZXQgdj1jLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09diYmKHY9Yy5ob3N0QmluZGluZ09wQ29k''@;'; put 'put ''ZXM9W10pO2NvbnN0IE09fmwuaW5kZXg7KGZ1bmN0aW9uIGRqKGMpe2xldCBsPWMubGVuZ3RoO2Zvcig7bD4wOyl7Y29uc3QgYT1jWy0tbF07aWYoIm51bWJlciI9PXR5cGVvZiBhJiZhPDApcmV0dXJuIGF9cmV0dXJuIDB9KSh2KSE9TSYmdi5wdXNoKE0pLHYucHVzaChhLGQsZil9fShjLGws''@;'; put 'put ''ZCxoOChjLGEsaC5ob3N0VmFycyxSbyksaCl9ZnVuY3Rpb24gdWgoYyxsLGEsZCxoLGYpe2NvbnN0IHY9TDAoYyxsKTshZnVuY3Rpb24gX1MoYyxsLGEsZCxoLGYsdil7aWYobnVsbD09ZiljLnJlbW92ZUF0dHJpYnV0ZShsLGgsYSk7ZWxzZXtjb25zdCBNPW51bGw9PXY/Q2EoZik6dihmLGR8''@;'; put 'put ''fCIiLGgpO2Muc2V0QXR0cmlidXRlKGwsaCxNLGEpfX0obFtib10sdixmLGMudmFsdWUsYSxkLGgpfWZ1bmN0aW9uIGNiKGMsbCxhLGQsaCxmKXtjb25zdCB2PWZbbF07aWYobnVsbCE9PXYpZm9yKGxldCBNPTA7TTx2Lmxlbmd0aDspU0QoZCxhLHZbTSsrXSx2W00rK10sdltNKytdLHZbTSsr''@;'; put 'put ''XSl9ZnVuY3Rpb24gUEQoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigwIT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3Qgdj1j''@;'; put 'put ''W2ZdO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MylpZih2W01dPT09bCl7ZC5wdXNoKGYsdltNKzFdLHZbTSsyXSxhW2grMV0pO2JyZWFrfX1oKz0yfWVsc2UgaCs9MjtlbHNlIGgrPTR9cmV0dXJuIGR9ZnVuY3Rpb24gd1MoYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxs''@;'; put 'put ''LGEsbnVsbCxudWxsXX1mdW5jdGlvbiBGRChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO0Iz''@;'; put 'put ''KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIGY4KGMsbCl7cmV0dXJuIGNbU2ZdP2NbQzRdW05jXT1sOmNbU2ZdPWwsY1tDNF09bCxsfWZ1bmN0aW9uIHViKGMsbCxhKXtCMygwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9''@;'; put 'put ''ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gSEQoYyl7cmV0dXJuIGNbWDBdfHwoY1tYMF09W10pfWZ1bmN0aW9uIHA4KGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFc0KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFZjKGMpKSYmKGE9ZnVuY3Rpb24gSncoYyl7''@;'; put 'put ''Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW3o2XSlyZXR1cm4gYztjPWNbVWxdfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtib119ZnVuY3Rpb24gemcoYyxsKXtjb25zdCBhPWNbcGNdLGQ9YT9hLmdldChnMixudWxsKTpudWxsO2QmJmQuaGFuZGxl''@;'; put 'put ''RXJyb3IobCl9ZnVuY3Rpb24gQ1MoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3Qgdj1hW2YrK10sTT1hW2YrK10sRD1hW2YrK107U0QoYy5kYXRhW3ZdLGxbdl0sZCxNLEQsaCl9fWZ1bmN0aW9uIHYyKGMsbCxhKXtjb25zdCBkPXlnKGwsYyk7IWZ1bmN0aW9uIHVE''@;'; put 'put ''KGMsbCxhKXtjLnNldFZhbHVlKGwsYSl9KGNbYm9dLGQsYSl9ZnVuY3Rpb24gX2ooYyxsKXtjb25zdCBhPU8xKGwsYyksZD1hW0tpXTshZnVuY3Rpb24gd2ooYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmludC5sZW5ndGg7YSsrKWwucHVzaChjLmJsdWVwcmludFthXSl9KGQs''@;'; put 'put ''YSk7Y29uc3QgaD1hW1VsXTtudWxsIT09aCYmbnVsbD09PWFbbnVdJiYoYVtudV09UkMoaCxhW3BjXSkpLFNTKGQsYSxhW2NsXSl9ZnVuY3Rpb24gU1MoYyxsLGEpe0s2KGwpO3RyeXtjb25zdCBkPWMudmlld1F1ZXJ5O251bGwhPT1kJiZ1YigxLGQsYSk7Y29uc3QgaD1jLnRlbXBsYXRlO251''@;'; put 'put ''bGwhPT1oJiZNRChjLGwsaCwxLGEpLGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5maXJzdENyZWF0ZVBhc3M9ITEpLGxbdWRdPy5maW5pc2hWaWV3Q3JlYXRpb24oYyksYy5zdGF0aWNDb250ZW50UXVlcmllcyYmRkQoYyxsKSxjLnN0YXRpY1ZpZXdRdWVyaWVzJiZ1YigyLGMudmlld1F1ZXJ5LGEp''@;'; put 'put ''O2NvbnN0IGY9Yy5jb21wb25lbnRzO251bGwhPT1mJiZmdW5jdGlvbiBDaihjLGwpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKV9qKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3MmJihjLmluY29tcGxldGVGaXJzdFBhc3M9ITAsYy5maXJzdENyZWF0''@;'; put 'put ''ZVBhc3M9ITEpLGR9ZmluYWxseXtsW1VhXSY9LTUsd2coKX19ZnVuY3Rpb24gVWcoYyxsKXtyZXR1cm4hbHx8bnVsbD09PWwuZmlyc3RDaGlsZHx8VXYoYyl9ZnVuY3Rpb24gdjgoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0tpXTtpZihmdW5jdGlvbiB0UyhjLGwsYSxkKXtjb25zdCBoPWdjK2Qs''@;'; put 'put ''Zj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bTmNdPWwpLGQ8Zi1nYz8obFtOY109YVtoXSxQbChhLGdjK2QsbCkpOihhLnB1c2gobCksbFtOY109bnVsbCksbFtmY109YTtjb25zdCB2PWxbUzRdO251bGwhPT12JiZhIT09diYmZnVuY3Rpb24gUUIoYyxsKXtjb25zdCBhPWNbVjNdO2xbWmxdIT09''@;'; put 'put ''bFtmY11bZmNdW1psXSYmKGNbVWFdfD1iZy5IYXNUcmFuc3BsYW50ZWRWaWV3cyksbnVsbD09PWE/Y1tWM109W2xdOmEucHVzaChsKX0odixsKTtjb25zdCBNPWxbdWRdO251bGwhPT1NJiZNLmluc2VydFZpZXcoYyksbkMobCksbFtVYV18PTEyOH0oaCxsLGMsYSksZCl7Y29uc3Qgdj1jUyhh''@;'; put 'put ''LGMpLE09bFtib10sRD1xMyhNLGNbdnVdKTtudWxsIT09RCYmZnVuY3Rpb24gWEIoYyxsLGEsZCxoLGYpe2RbVWxdPWgsZFtyY109bCxvYihjLGQsYSwxLGgsZil9KGgsY1tyY10sTSxsLEQsdil9Y29uc3QgZj1sW251XTtudWxsIT09ZiYmbnVsbCE9PWYuZmlyc3RDaGlsZCYmKGYuZmlyc3RD''@;'; put 'put ''aGlsZD1udWxsKX1mdW5jdGlvbiBiOChjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChDbChmKSksRnUoZikmJk5EKGYsZCk7Y29uc3Qgdj1hLnR5cGU7aWYoOCZ2KWI4KGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7''@;'; put 'put ''Y29uc3QgTT1KQyhhLGwpO2xldCBEO2Zvcig7RD1NKCk7KWQucHVzaChEKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09Z0QobCxhKTtpZihBcnJheS5pc0FycmF5KE0pKWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEQ9VDQobFtabF0pO2I4KERbS2ldLEQsTSxkLCEwKX19YT1oP2EucHJvamVjdGlv''@;'; put 'put ''bk5leHQ6YS5uZXh0fXJldHVybiBkfWZ1bmN0aW9uIE5EKGMsbCl7Zm9yKGxldCBhPWdjO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV0saD1kW0tpXS5maXJzdENoaWxkO251bGwhPT1oJiZiOChkW0tpXSxkLGgsbCl9Y1t2dV0hPT1jW1VsXSYmbC5wdXNoKGNbdnVdKX1sZXQgVkQ9W107''@;'; put 'put ''Y29uc3QgRWo9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5leHRQcm9kdWNlckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lk''@;'; put 'put ''IDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9kdWNlclJlY29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5''@;'; put 'put ''OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e30sY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57RzYoYy5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1t4Zl09dGhpc319LEJEPTEwMDtmdW5jdGlvbiBkYihjLGw9''@;'; put 'put ''ITAsYT0wKXtjb25zdCBkPWNbTDFdLGg9ZC5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBUaihjLGwpe3hTKGMsbCk7bGV0IGE9MDtmb3IoO0V2KGMpOyl7aWYoYT09PUJEKXRocm93IG5ldyBRbigxMDMsITEpO2ErKyx4UyhjLDEpfX0oYyxhKX1jYXRjaCh2KXt0''@;'; put 'put ''aHJvdyBsJiZ6ZyhjLHYpLHZ9ZmluYWxseXtoLmVuZD8uKCksZC5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCl9fWZ1bmN0aW9uIEFqKGMsbCxhLGQpe2NvbnN0IGg9bFtVYV07aWYoISgyNTYmfmgpKXJldHVybjtsW0wxXS5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCksSzYobCk7bGV0''@;'; put 'put ''IHY9bnVsbCxNPW51bGw7KGZ1bmN0aW9uIGtqKGMpe3JldHVybiAyIT09Yy50eXBlfSkoYykmJihNPWZ1bmN0aW9uIFNqKGMpe3JldHVybiBjW3hmXT8/ZnVuY3Rpb24gTWooYyl7Y29uc3QgbD1WRC5wb3AoKT8/T2JqZWN0LmNyZWF0ZShFaik7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCks''@;'; put 'put ''dj1mdW5jdGlvbiBqKGMpe3JldHVybiBjJiYoYy5uZXh0UHJvZHVjZXJJbmRleD0wKSxfZShjKX0oTSkpO3RyeXtlQyhsKSxmdW5jdGlvbiBuayhjKXtyZXR1cm4gQ28ubEZyYW1lLmJpbmRpbmdJbmRleD1jfShjLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09YSYmTUQoYyxsLGEsMixkKTtj''@;'; put 'put ''b25zdCBEPSEoMyZ+aCk7aWYoRCl7Y29uc3QgY2U9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWNlJiZSdihsLGNlLG51bGwpfWVsc2V7Y29uc3QgY2U9Yy5wcmVPcmRlckhvb2tzO251bGwhPT1jZSYmTHYobCxjZSwwLG51bGwpLGRDKGwsMCl9aWYoZnVuY3Rpb24gRGooYyl7Zm9yKGxl''@;'; put 'put ''dCBsPXhrKGMpO251bGwhPT1sO2w9RWsobCkpe2lmKCEobFtVYV0mYmcuSGFzVHJhbnNwbGFudGVkVmlld3MpKWNvbnRpbnVlO2NvbnN0IGE9bFtWM107Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NWKGFbZF0pfX19KGwpLGpEKGwsMCksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJkZE''@;'; put 'put ''KGMsbCksRCl7Y29uc3QgY2U9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09Y2UmJlJ2KGwsY2UpfWVsc2V7Y29uc3QgY2U9Yy5jb250ZW50SG9va3M7bnVsbCE9PWNlJiZMdihsLGNlLDEpLGRDKGwsMSl9IWZ1bmN0aW9uIHJqKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2Rlcztp''@;'; put 'put ''ZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApQTQofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO3lWKHYsZiksTSgyLGxbZl0pfX19ZmluYWxseXtBNCgtMSl9fShjLGwpO2NvbnN0IFo9Yy5jb21wb25lbnRz''@;'; put 'put ''O251bGwhPT1aJiZVRChsLFosMCk7Y29uc3QgcmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PXJlJiZ1YigyLHJlLGQpLEQpe2NvbnN0IGNlPWMudmlld0NoZWNrSG9va3M7bnVsbCE9PWNlJiZSdihsLGNlKX1lbHNle2NvbnN0IGNlPWMudmlld0hvb2tzO251bGwhPT1jZSYmTHYobCxjZSwyKSxk''@;'; put 'put ''QyhsLDIpfWlmKCEwPT09Yy5maXJzdFVwZGF0ZVBhc3MmJihjLmZpcnN0VXBkYXRlUGFzcz0hMSksbFt2Z10pe2Zvcihjb25zdCBjZSBvZiBsW3ZnXSljZSgpO2xbdmddPW51bGx9bFtVYV0mPS03M31jYXRjaChEKXt0aHJvdyBHNihsKSxEfWZpbmFsbHl7bnVsbCE9PU0mJihmdW5jdGlvbiBF''@;'; put 'put ''KGMsbCl7aWYoX2UobCksYyYmdm9pZCAwIT09Yy5wcm9kdWNlck5vZGUmJnZvaWQgMCE9PWMucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYoc2UoYykpZm9yKGxldCBhPWMubmV4dFByb2R1Y2VySW5kZXg7YTxjLnByb2R1Y2VyTm9k''@;'; put 'put ''ZS5sZW5ndGg7YSsrKXRlKGMucHJvZHVjZXJOb2RlW2FdLGMucHJvZHVjZXJJbmRleE9mVGhpc1thXSk7Zm9yKDtjLnByb2R1Y2VyTm9kZS5sZW5ndGg+Yy5uZXh0UHJvZHVjZXJJbmRleDspYy5wcm9kdWNlck5vZGUucG9wKCksYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5wb3AoKSxjLnBy''@;'; put 'put ''b2R1Y2VySW5kZXhPZlRoaXMucG9wKCl9fShNLHYpLGZ1bmN0aW9uIHhqKGMpe2MubFZpZXdbeGZdIT09YyYmKGMubFZpZXc9bnVsbCxWRC5wdXNoKGMpKX0oTSkpLHdnKCl9fWZ1bmN0aW9uIGpEKGMsbCl7Zm9yKGxldCBhPXhrKGMpO251bGwhPT1hO2E9RWsoYSkpZm9yKGxldCBkPWdjO2Q8''@;'; put 'put ''YS5sZW5ndGg7ZCsrKXpEKGFbZF0sbCl9ZnVuY3Rpb24gSWooYyxsLGEpe3pEKE8xKGwsYyksYSl9ZnVuY3Rpb24gekQoYyxsKXtRdyhjKSYmeFMoYyxsKX1mdW5jdGlvbiB4UyhjLGwpe2NvbnN0IGQ9Y1tLaV0saD1jW1VhXSxmPWNbeGZdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9''@;'; put 'put ''ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0JmgpLHZ8fD0hKCFmPy5kaXJ0eXx8IW0oZikpLGYmJihmLmRpcnR5PSExKSxjW1VhXSY9LTkyMTcsdilBaihkLGMsZC50ZW1wbGF0ZSxjW2NsXSk7ZWxzZSBpZig4MTkyJmgpe2pEKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0m''@;'; put 'put ''JlVEKGMsTSwxKX19ZnVuY3Rpb24gVUQoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKUlqKGMsbFtkXSxhKX1mdW5jdGlvbiB5OChjKXtmb3IoY1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtjOyl7Y1tVYV18PTY0O2NvbnN0IGw9VDQoYyk7aWYoeDQo''@;'; put 'put ''YykmJiFsKXJldHVybiBjO2M9bH1yZXR1cm4gbnVsbH1jbGFzcyBfOHtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbS2ldO3JldHVybiBiOChhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihsLGEsZD0hMCl7dGhpcy5fbFZpZXc9bCx0aGlzLl9jZFJlZklu''@;'; put 'put ''amVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W2NsXX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1tjbF09bH1nZXQg''@;'; put 'put ''ZGVzdHJveWVkKCl7cmV0dXJuISgyNTYmfnRoaXMuX2xWaWV3W1VhXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3W2ZjXTtpZihG''@;'; put 'put ''dShsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHM4KGwsZCksTHUoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7VHYodGhpcy5fbFZpZXcsbCl9bWFy''@;'; put 'put ''a0ZvckNoZWNrKCl7eTgodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbVWFdJj0tMTI5fXJlYXR0YWNoKCl7bkModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3W1VhXXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1tVYV18''@;'; put 'put ''PTEwMjQsZGIodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRh''@;'; put 'put ''Y2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsaEQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihsKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hcHBSZWY9bCxuQyh0aGlzLl9sVmll''@;'; put 'put ''dyl9fWxldCBTbD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPU9qfX1yZXR1cm4gY30pKCk7Y29uc3QgUmo9U2wsTGo9Y2xhc3MgZXh0ZW5kcyBSantjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVj''@;'; put 'put ''bGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChs''@;'; put 'put ''LGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gZzgoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEQ9c2IoYyxmLGEsNDA5NiZjW1VhXT80MDk2OjE2LG51bGwsbCxudWxsLG51bGwsZD8uaW5qZWN0b3I/P251bGws''@;'; put 'put ''ZD8uZW1iZWRkZWRWaWV3SW5qZWN0b3I/P251bGwsZD8uZGVoeWRyYXRlZFZpZXc/P251bGwpO0RbUzRdPWNbbC5pbmRleF07Y29uc3QgcmU9Y1t1ZF07cmV0dXJuIG51bGwhPT1yZSYmKERbdWRdPXJlLmNyZWF0ZUVtYmVkZGVkVmlldyhmKSksU1MoZixELGEpLER9ZmluYWxseXtfZShoKX19''@;'; put 'put ''KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgXzgoaCl9fTtmdW5jdGlvbiBPaigpe3JldHVybiBoYih1bCgpLGRpKCkpfWZ1bmN0aW9uIGhiKGMs''@;'; put 'put ''bCl7cmV0dXJuIDQmYy50eXBlP25ldyBMaihsLGMsTDQoYyxsKSk6bnVsbH1jbGFzcyB2Ynt9Y2xhc3Mgcnp7fWNsYXNzIEpEe31jbGFzcyBventyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBmdW5jdGlvbiBpeihjKXtjb25zdCBsPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9y''@;'; put 'put ''eSBmb3VuZCBmb3IgJHtQcihjKX0uYCk7cmV0dXJuIGwubmdDb21wb25lbnQ9YyxsfShsKX19bGV0IFdnPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuTlVMTD1uZXcgb3p9fXJldHVybiBjfSkoKTtjbGFzcyB4OHt9bGV0IEVvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRl''@;'; put 'put ''c3Ryb3lOb2RlPW51bGx9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIHN6KCl7Y29uc3QgYz1kaSgpLGE9TzEodWwoKS5pbmRleCxjKTtyZXR1cm4oUHUoYSk/YTpjKVtib119KCl9fXJldHVybiBjfSkoKSxsej0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUlM9e30sUUQ9bmV3IFNldDtmdW5jdGlvbiBiMihjKXtRRC5oYXMoYyl8fChRRC5hZGQoYykscGVyZm9ybWFuY2U/Lm1hcms/LigibWFya19mZWF0dXJl''@;'; put 'put ''X3VzYWdlIix7ZGV0YWlsOntmZWF0dXJlOmN9fSkpfWZ1bmN0aW9uIGVJKC4uLmMpe31jbGFzcyBXYXtjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6bD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmE9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRl''@;'; 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 ''ZV9ffShNKSlyZXR1cm4gYS5pbnZva2VUYXNrKGgsZix2LE0pO3RyeXtyZXR1cm4gYmIoYyksYS5pbnZva2VUYXNrKGgsZix2LE0pfWZpbmFsbHl7KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1mLnR5cGV8fGMuc2hvdWxkQ29hbGVzY2VSdW5D''@;'; put 'put ''aGFuZ2VEZXRlY3Rpb24pJiZsKCksdEkoYyl9fSxvbkludm9rZTooYSxkLGgsZix2LE0sRCk9Pnt0cnl7cmV0dXJuIGJiKGMpLGEuaW52b2tlKGgsZix2LE0sRCl9ZmluYWxseXtjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZsKCksdEkoYyl9fSxvbkhhc1Rhc2s6KGEsZCxo''@;'; put 'put ''LGYpPT57YS5oYXNUYXNrKGgsZiksZD09PWgmJigibWljcm9UYXNrIj09Zi5jaGFuZ2U/KGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWYubWljcm9UYXNrLE9TKGMpLExTKGMpKToibWFjcm9UYXNrIj09Zi5jaGFuZ2UmJihjLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWYubWFjcm9UYXNrKSl9LG9u''@;'; put 'put ''SGFuZGxlRXJyb3I6KGEsZCxoLGYpPT4oYS5oYW5kbGVFcnJvcihoLGYpLGMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25FcnJvci5lbWl0KGYpKSwhMSl9KX0oaCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50Lmdl''@;'; put 'put ''dCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVdhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBRbig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoV2EuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFFuKDkw''@;'; put 'put ''OSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsdXosZUksZUkpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1m''@;'; put 'put ''aW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IHV6PXt9O2Z1bmN0aW9uIExTKGMpe2lmKDA9PWMuX25l''@;'; put 'put ''c3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgp''@;'; put 'put ''PT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIE9TKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29h''@;'; put 'put ''bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiBiYihjKXtjLl9uZXN0aW5nKyssYy5pc1N0YWJsZSYmKGMuaXNTdGFibGU9ITEsYy5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIHRJKGMpe2MuX25lc3Rp''@;'; put 'put ''bmctLSxMUyhjKX1jbGFzcyBuSXtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgS3IsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBLcix0aGlz''@;'; put 'put ''Lm9uU3RhYmxlPW5ldyBLcix0aGlzLm9uRXJyb3I9bmV3IEtyfXJ1bihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiBsKCl9cnVuVGFzayhsLGEsZCxoKXtyZXR1cm4gbC5h''@;'; put 'put ''cHBseShhLGQpfX12YXIgUTM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FYXJseVJlYWQ9MF09IkVhcmx5UmVhZCIsY1tjLldyaXRlPTFdPSJXcml0ZSIsY1tjLk1peGVkUmVhZFdyaXRlPTJdPSJNaXhlZFJlYWRXcml0ZSIsY1tjLlJlYWQ9M109IlJlYWQiLGN9KFEzfHx7fSk7Y29uc3QgUFM9''@;'; put 'put ''e2Rlc3Ryb3koKXt9fTtmdW5jdGlvbiB5YihjLGwpeyFsJiZmdW5jdGlvbiB3ZihjKXtpZighU3YoKSl0aHJvdyBuZXcgUW4oLTIwMywhMSl9KCk7Y29uc3QgYT1sPy5pbmplY3Rvcj8/ZmkoRHMpO2lmKCFmdW5jdGlvbiBjaChjKXtyZXR1cm4iYnJvd3NlciI9PT0oYz8/ZmkoRHMpKS5nZXQo''@;'; put 'put ''aW8pfShhKSlyZXR1cm4gUFM7YjIoIk5nQWZ0ZXJOZXh0UmVuZGVyIik7Y29uc3QgZD1hLmdldChFOCksaD1kLmhhbmRsZXI/Pz1uZXcgYUksZj1sPy5waGFzZT8/UTMuTWl4ZWRSZWFkV3JpdGUsdj0oKT0+e2gudW5yZWdpc3RlcihEKSxNKCl9LE09YS5nZXQoa2cpLm9uRGVzdHJveSh2KSxE''@;'; put 'put ''PXEwKGEsKCk9Pm5ldyBpSShmLCgpPT57digpLGMoKX0pKTtyZXR1cm4gaC5yZWdpc3RlcihEKSx7ZGVzdHJveTp2fX1jbGFzcyBpSXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGhhc2U9bCx0aGlzLmNhbGxiYWNrRm49YSx0aGlzLnpvbmU9ZmkoV2EpLHRoaXMuZXJyb3JIYW5kbGVyPWZpKGcy''@;'; put 'put ''LHtvcHRpb25hbDohMH0pLGZpKHZiLHtvcHRpb25hbDohMH0pPy5ub3RpZnkoMSl9aW52b2tlKCl7dHJ5e3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNhbGxiYWNrRm4pfWNhdGNoKGwpe3RoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihsKX19fWNsYXNzIGFJe2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITEsdGhpcy5idWNrZXRzPXtbUTMuRWFybHlSZWFkXTpuZXcgU2V0LFtRMy5Xcml0ZV06bmV3IFNldCxbUTMuTWl4ZWRSZWFkV3JpdGVdOm5ldyBTZXQsW1EzLlJlYWRdOm5ldyBTZXR9LHRoaXMuZGVmZXJyZWRDYWxsYmFja3M9bmV3''@;'; put 'put ''IFNldH1yZWdpc3RlcihsKXsodGhpcy5leGVjdXRpbmdDYWxsYmFja3M/dGhpcy5kZWZlcnJlZENhbGxiYWNrczp0aGlzLmJ1Y2tldHNbbC5waGFzZV0pLmFkZChsKX11bnJlZ2lzdGVyKGwpe3RoaXMuYnVja2V0c1tsLnBoYXNlXS5kZWxldGUobCksdGhpcy5kZWZlcnJlZENhbGxiYWNrcy5k''@;'; put 'put ''ZWxldGUobCl9ZXhlY3V0ZSgpe3RoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzPSEwO2Zvcihjb25zdCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5idWNrZXRzKSlmb3IoY29uc3QgYSBvZiBsKWEuaW52b2tlKCk7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITE7Zm9yKGNvbnN0IGwgb2YgdGhpcy5k''@;'; put 'put ''ZWZlcnJlZENhbGxiYWNrcyl0aGlzLmJ1Y2tldHNbbC5waGFzZV0uYWRkKGwpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX1kZXN0cm95KCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWwuY2xlYXIoKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmNs''@;'; put 'put ''ZWFyKCl9fWxldCBFOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcz1bXX1leGVjdXRlKCl7dGhpcy5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSx0aGlzLmhhbmRsZXI/LmV4ZWN1dGUoKX1leGVjdXRlSW50ZXJu''@;'; put 'put ''YWxDYWxsYmFja3MoKXtjb25zdCBhPVsuLi50aGlzLmludGVybmFsQ2FsbGJhY2tzXTt0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wO2Zvcihjb25zdCBkIG9mIGEpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5oYW5kbGVyPy5kZXN0cm95KCksdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5p''@;'; put 'put ''bnRlcm5hbENhbGxiYWNrcy5sZW5ndGg9MH1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB3YihjLGwsYSl7bGV0IGQ9YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNz''@;'; put 'put ''ZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IE09bFt2XTsibnVtYmVyIj09dHlwZW9mIE0/Zj1NOjE9PWY/aD1vZChoLE0pOjI9PWYmJihkPW9kKGQsTSsiOiAiK2xbKyt2XSsiOyIpKX1hP2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0''@;'; put 'put ''SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBsSSBleHRlbmRzIFdne2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9Vm8obCk7cmV0dXJuIG5ldyBrOChhLHRoaXMu''@;'; put 'put ''bmdNb2R1bGUpfX1mdW5jdGlvbiBjSShjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BOYW1lOkFycmF5LmlzQXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFt''@;'; put 'put ''ZTphfSl9cmV0dXJuIGx9Y2xhc3MgQ2J7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1vZyhkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsUlMsZCk7cmV0dXJuIGghPT1SU3x8YT09PVJTP2g6dGhpcy5wYXJl''@;'; put 'put ''bnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBrOCBleHRlbmRzIEpEe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD1jSShsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgu''@;'; put 'put ''cHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gY0kodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMu''@;'; put 'put ''Y29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBCdyhjKXtyZXR1cm4gYy5tYXAoVncpLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMu''@;'; put 'put ''aXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIGhjP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9''@;'; put 'put ''dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBNPXY/bmV3IENiKGwsdik6bCxEPU0uZ2V0KHg4LG51bGwpO2lmKG51bGw9PT1EKXRocm93IG5ldyBRbig0MDcsITEpO2NvbnN0IFo9TS5nZXQobHosbnVsbCksYmU9e3JlbmRlcmVyRmFjdG9yeTpE''@;'; put 'put ''LHNhbml0aXplcjpaLGlubGluZUVmZmVjdFJ1bm5lcjpudWxsLGFmdGVyUmVuZGVyRXZlbnRNYW5hZ2VyOk0uZ2V0KEU4LG51bGwpLGNoYW5nZURldGVjdGlvblNjaGVkdWxlcjpNLmdldCh2YixudWxsKX0sRWU9RC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxCZT10''@;'; put 'put ''aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLHFlPWQ/ZnVuY3Rpb24gYWooYyxsLGEsZCl7Y29uc3QgZj1kLmdldChCaywhMSl8fGE9PT1Ycy5TaGFkb3dEb20sdj1jLnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIG9qKGMpe3hEKGMpfSh2KSx2''@;'; put 'put ''fShFZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sTSk6ejQoRWUsQmUsZnVuY3Rpb24gdnooYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJzdmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEJlKSk7bGV0IHJ0PTUxMjt0aGlzLmNvbXBvbmVu''@;'; put 'put ''dERlZi5zaWduYWxzP3J0fD00MDk2OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaHx8KHJ0fD0xNik7bGV0IHB0PW51bGw7bnVsbCE9PXFlJiYocHQ9UkMocWUsTSwhMCkpO2NvbnN0IGR0PW1TKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksSnQ9c2IobnVs''@;'; put 'put ''bCxkdCxudWxsLHJ0LG51bGwsbnVsbCxiZSxFZSxNLG51bGwscHQpO2xldCB2bixDbjtLNihKdCk7dHJ5e2NvbnN0IHRuPXRoaXMuY29tcG9uZW50RGVmO2xldCBNbix3cj1udWxsO3RuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oTW49W10sd3I9bmV3IE1hcCx0bi5maW5kSG9zdERpcmVjdGl2''@;'; put 'put ''ZURlZnModG4sTW4sd3IpLE1uLnB1c2godG4pKTpNbj1bdG5dO2NvbnN0IEdyPWZ1bmN0aW9uIHl6KGMsbCl7Y29uc3QgYT1jW0tpXSxkPXdvO3JldHVybiBjW2RdPWwsamcoYSxkLDIsIiNob3N0IixudWxsKX0oSnQscWUpLG1yPWZ1bmN0aW9uIF96KGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09''@;'; put 'put ''aFtLaV07IWZ1bmN0aW9uIHd6KGMsbCxhLGQpe2Zvcihjb25zdCBoIG9mIGMpbC5tZXJnZWRBdHRycz12ZihsLm1lcmdlZEF0dHJzLGguaG9zdEF0dHJzKTtudWxsIT09bC5tZXJnZWRBdHRycyYmKHdiKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWEmJndEKGQsYSxsKSl9KGQsYyxsLHYp''@;'; put 'put ''O2xldCBEPW51bGw7bnVsbCE9PWwmJihEPVJDKGwsaFtwY10pKTtjb25zdCBaPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHJlPTE2O2Euc2lnbmFscz9yZT00MDk2OmEub25QdXNoJiYocmU9NjQpO2NvbnN0IGNlPXNiKGgsbGIoYSksbnVsbCxyZSxoW2MuaW5k''@;'; put 'put ''ZXhdLGMsZixaLG51bGwsbnVsbCxEKTtyZXR1cm4gTS5maXJzdENyZWF0ZVBhc3MmJnlTKE0sYyxkLmxlbmd0aC0xKSxmOChoLGNlKSxoW2MuaW5kZXhdPWNlfShHcixxZSx0bixNbixKdCxiZSxFZSk7Q249WTYoZHQsd28pLHFlJiZmdW5jdGlvbiBTeihjLGwsYSxkKXtpZihkKW00KGMsYSxb''@;'; put 'put ''Im5nLXZlcnNpb24iLCIxNy4zLjEyIl0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIEthKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwu''@;'; put 'put ''cHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFNYyhoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZtNChjLGEsaCksZiYmZi5sZW5ndGg+MCYmX0QoYyxhLGYuam9pbigiICIpKX19KEVlLHRuLHFlLGQp''@;'; put 'put ''LHZvaWQgMCE9PWEmJmZ1bmN0aW9uIE16KGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6bnVsbCl9fShDbix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSx2''@;'; put 'put ''bj1mdW5jdGlvbiBDeihjLGwsYSxkLGgsZil7Y29uc3Qgdj11bCgpLE09aFtLaV0sRD1MMCh2LGgpO2JTKE0saCx2LGEsbnVsbCxkKTtmb3IobGV0IHJlPTA7cmU8YS5sZW5ndGg7cmUrKylCdShENChoLE0sdi5kaXJlY3RpdmVTdGFydCtyZSx2KSxoKTtMRChNLGgsdiksRCYmQnUoRCxoKTtj''@;'; put 'put ''b25zdCBaPUQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K3YuY29tcG9uZW50T2Zmc2V0LHYpO2lmKGNbY2xdPWhbY2xdPVosbnVsbCE9PWYpZm9yKGNvbnN0IHJlIG9mIGYpcmUoWixsKTtyZXR1cm4gZlMoTSx2LGgpLFp9KG1yLHRuLE1uLHdyLEp0LFt4el0pLFNTKGR0LEp0LG51bGwpfWZpbmFs''@;'; put 'put ''bHl7d2coKX1yZXR1cm4gbmV3IGJ6KHRoaXMuY29tcG9uZW50VHlwZSx2bixMNChDbixKdCksSnQsQ24pfWZpbmFsbHl7X2UoZil9fX1jbGFzcyBieiBleHRlbmRzIHJ6e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhp''@;'; put 'put ''cy5fdE5vZGU9Zix0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBfOChoLHZvaWQgMCwhMSksdGhpcy5jb21wb25lbnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25zdCBkPXRoaXMuX3RO''@;'; put 'put ''b2RlLmlucHV0cztsZXQgaDtpZihudWxsIT09ZCYmKGg9ZFtsXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5fcm9vdExWaWV3O0NTKGZbS2ldLGYsaCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSx5OChPMSh0aGlzLl90Tm9kZS5pbmRleCxmKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgVnUodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1mdW5jdGlvbiB4eigpe2NvbnN0IGM9dWwoKTtJdihkaSgpW0tpXSxjKX1sZXQgRG89KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1F''@;'; put 'put ''en19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEV6KCl7cmV0dXJuIGhJKHVsKCksZGkoKSl9Y29uc3QgVHo9RG8sdUk9Y2xhc3MgZXh0ZW5kcyBUentjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9''@;'; put 'put ''Z2V0IGVsZW1lbnQoKXtyZXR1cm4gTDQodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBWdSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBsPUNnKHRoaXMuX2hvc3RUTm9k''@;'; put 'put ''ZSx0aGlzLl9ob3N0TFZpZXcpO2lmKE92KGwpKXtjb25zdCBhPUo2KGwsdGhpcy5faG9zdExWaWV3KSxkPVg2KGwpO3JldHVybiBuZXcgVnUoYVtLaV0uZGF0YVtkKzhdLGEpfXJldHVybiBuZXcgVnUobnVsbCx0aGlzLl9ob3N0TFZpZXcpfWNsZWFyKCl7Zm9yKDt0aGlzLmxlbmd0aD4wOyl0''@;'; put 'put ''aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKX1nZXQobCl7Y29uc3QgYT1kSSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbbF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1nY31jcmVhdGVFbWJlZGRlZFZpZXcobCxhLGQpe2xl''@;'; put 'put ''dCBoLGY7Im51bWJlciI9PXR5cGVvZiBkP2g9ZDpudWxsIT1kJiYoaD1kLmluZGV4LGY9ZC5pbmplY3Rvcik7Y29uc3QgTT1sLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30sZixudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKE0saCxVZyh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLE19''@;'; put 'put ''Y3JlYXRlQ29tcG9uZW50KGwsYSxkLGgsZil7Y29uc3Qgdj1sJiYhZnVuY3Rpb24gemkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9KGwpO2xldCBNO2lmKHYpTT1hO2Vsc2V7Y29uc3QgQmU9YXx8e307TT1CZS5pbmRleCxkPUJlLmluamVjdG9yLGg9QmUucHJvamVjdGFibGVOb2Rl''@;'; put 'put ''cyxmPUJlLmVudmlyb25tZW50SW5qZWN0b3J8fEJlLm5nTW9kdWxlUmVmfWNvbnN0IEQ9dj9sOm5ldyBrOChWbyhsKSksWj1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1ELm5nTW9kdWxlKXtjb25zdCBxZT0odj9aOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChoYyxudWxs''@;'; put 'put ''KTtxZSYmKGY9cWUpfVZvKEQuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IEVlPUQuY3JlYXRlKFosaCxudWxsLGYpO3JldHVybiB0aGlzLmluc2VydEltcGwoRWUuaG9zdFZpZXcsTSxVZyh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLEVlfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydElt''@;'; put 'put ''cGwobCxhLCEwKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3O2lmKGZ1bmN0aW9uIFhBKGMpe3JldHVybiBGdShjW2ZjXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5kZXRhY2goTSk7ZWxzZXtjb25zdCBEPWhbZmNdLFo9bmV3IHVJKEQs''@;'; put 'put ''RFtyY10sRFtmY10pO1ouZGV0YWNoKFouaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgoYSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiB2OCh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLFBsKFZTKHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPWRJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihMdShW''@;'; put 'put ''Uyh0aGlzLl9sQ29udGFpbmVyKSxhKSxVNChkW0tpXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1zOCh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1MdShWUyh0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgXzgoZCk6bnVsbH1fYWRq''@;'; put 'put ''dXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gZEkoYyl7cmV0dXJuIGNbOF19ZnVuY3Rpb24gVlMoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBoSShjLGwpe2xldCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gRnUoZCk/YT1k''@;'; put 'put ''OihhPXdTKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxmOChsLGEpKSxCUyhhLGwsYyxkKSxuZXcgdUkoYSxjLGwpfWxldCBCUz1mdW5jdGlvbiBqUyhjLGwsYSxkKXtpZihjW3Z1XSlyZXR1cm47bGV0IGg7aD04JmEudHlwZT9DbChkKTpmdW5jdGlvbiBBeihjLGwpe2NvbnN0IGE9Y1tib10s''@;'; put 'put ''ZD1hLmNyZWF0ZUNvbW1lbnQoIiIpLGg9TDAobCxjKTtyZXR1cm4gWjQoYSxxMyhhLGgpLGQsZnVuY3Rpb24gYVMoYyxsKXtyZXR1cm4gYy5uZXh0U2libGluZyhsKX0oYSxoKSwhMSksZH0obCxhKSxjW3Z1XT1ofSxTYj0oKT0+ITE7Y2xhc3MgelN7Y29uc3RydWN0b3IobCl7dGhpcy5xdWVy''@;'; put 'put ''eUxpc3Q9bCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgelModGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3MgTWJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwp''@;'; put 'put ''e2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3Yu''@;'; put 'put ''aW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBNYihoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdD''@;'; put 'put ''cmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PVlTKGwsYSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNz''@;'; put 'put ''IGZJe2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnByZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24gYkkoYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAobD0+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 ''dGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsVnYoYSxsLGYsITEsITEpKX1lbHNlIGQ9PT1TbD80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsVnYoYSxsLGQsITEsITEpKX1tYXRjaFROb2Rl''@;'; put 'put ''V2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Sml8fGg9PT1Eb3x8aD09PVNsJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1WdihhLGwsaCwhMSwhMSk7''@;'; put 'put ''bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBSeihjLGwpe2NvbnN0''@;'; put 'put ''IGE9Yy5sb2NhbE5hbWVzO2lmKG51bGwhPT1hKWZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MilpZihhW2RdPT09bClyZXR1cm4gYVtkKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIEx6KGMsbCxhLGQpe3JldHVybi0xPT09YT9mdW5jdGlvbiBwSShjLGwpe3JldHVybiAxMSZjLnR5cGU/TDQo''@;'; put 'put ''YyxsKTo0JmMudHlwZT9oYihjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIFdTKGMsbCxhKXtyZXR1cm4gYT09PUppP0w0KGwsYyk6YT09PVNsP2hiKGwsYyk6YT09PURvP2hJKGwsYyk6dm9pZCAwfShjLGwsZCk6RDQoYyxjW0tpXSxhLGwpfWZ1bmN0aW9uIFlnKGMsbCxhLGQpe2Nv''@;'; put 'put ''bnN0IGg9bFt1ZF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVzKXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgRD0wO251bGwhPT12JiZEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFo9dltEXTtNLnB1c2goWjwwP251bGw6THoobCxmW1pdLHZbRCsxXSxhLm1l''@;'; put 'put ''dGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVzfWZ1bmN0aW9uIEQ4KGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0IHY9WWcoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtN''@;'; put 'put ''Kz0yKXtjb25zdCBEPWZbTV07aWYoRD4wKWQucHVzaCh2W00vMl0pO2Vsc2V7Y29uc3QgWj1mW00rMV0scmU9bFstRF07Zm9yKGxldCBjZT1nYztjZTxyZS5sZW5ndGg7Y2UrKyl7Y29uc3QgYmU9cmVbY2VdO2JlW1M0XT09PWJlW2ZjXSYmRDgoYmVbS2ldLGJlLFosZCl9aWYobnVsbCE9PXJl''@;'; put 'put ''W1YzXSl7Y29uc3QgY2U9cmVbVjNdO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKyl7Y29uc3QgRWU9Y2VbYmVdO0Q4KEVlW0tpXSxFZSxaLGQpfX19fX1yZXR1cm4gZH1mdW5jdGlvbiBnSShjLGwsYSl7Y29uc3QgZD1uZXcgZmQoISg0Jn5hKSk7cmV0dXJuIGZ1bmN0aW9uIEFEKGMs''@;'; put 'put ''bCxhLGQpe2NvbnN0IGg9SEQobCk7aC5wdXNoKGEpLGMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKS5wdXNoKGQsaC5sZW5ndGgtMSl9KGMsbCxkLGQuZGVzdHJveSksKGxbdWRdPz89bmV3IE1iKS5xdWVyaWVzLnB1c2gobmV3IHpTKGQpKS0xfWZ1bmN0aW9uIHlJKGMsbCxhKXtudWxsPT09Yy5x''@;'; put 'put ''dWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBVUyksYy5xdWVyaWVzLnRyYWNrKG5ldyBaUyhsLGEpKX1mdW5jdGlvbiBZUyhjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBfSShjLGwpe2NvbnN0IGE9Y1tLaV0sZD1ZUyhhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1Rl''@;'; put 'put ''bXBsYXRlP0Q4KGEsYyxsLFtdKTpZZyhhLGMsZCxsKX1mdW5jdGlvbiBDSShjKXtyZXR1cm4gZnVuY3Rpb24geGIoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJnZvaWQgMCE9PWNbbWVdfShjKSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0fWZ1bmN0aW9uIHdhKGMpe2xldCBsPWZ1''@;'; put 'put ''bmN0aW9uIFhTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoVmMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0''@;'; put 'put ''aHJvdyBuZXcgUW4oOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVzaChoKTtjb25zdCB2PWM7di5pbnB1dHM9UDgoYy5pbnB1dHMpLHYuaW5wdXRUcmFuc2Zvcm1zPVA4KGMuaW5wdXRUcmFuc2Zvcm1zKSx2LmRlY2xhcmVkSW5wdXRzPVA4KGMuZGVjbGFyZWRJbnB1dHMp''@;'; put 'put ''LHYub3V0cHV0cz1QOChjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmT2YoYyxNKTtjb25zdCBEPWgudmlld1F1ZXJ5LFo9aC5jb250ZW50UXVlcmllcztpZihEJiZJSShjLEQpLFomJlp6KGMsWiksREkoYyxoKSxSdShjLm91dHB1dHMsaC5vdXRwdXRzKSxWYyhoKSYmaC5k''@;'; put 'put ''YXRhLmFuaW1hdGlvbil7Y29uc3QgcmU9Yy5kYXRhO3JlLmFuaW1hdGlvbj0ocmUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGguZGF0YS5hbmltYXRpb24pfX1jb25zdCBmPWguZmVhdHVyZXM7aWYoZilmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdO00mJk0ubmdJbmhl''@;'; put 'put ''cml0JiZNKGMpLE09PT13YSYmKGE9ITEpfX1sPU9iamVjdC5nZXRQcm90b3R5cGVPZihsKX0hZnVuY3Rpb24gVXooYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tkXTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9''@;'; put 'put ''dmYoaC5ob3N0QXR0cnMsYT12ZihhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBESShjLGwpe2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1''@;'; put 'put ''dHNbYV07aWYodm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRlY2xhcmVkSW5wdXRzW2FdLG51bGwhPT1sLmlucHV0VHJhbnNmb3Jtcykpe2NvbnN0IGg9QXJyYXkuaXNBcnJheShkKT9kWzBdOmQ7aWYoIWwuaW5wdXRUcmFuc2Zvcm1zLmhhc093blBy''@;'; put 'put ''b3BlcnR5KGgpKWNvbnRpbnVlO2MuaW5wdXRUcmFuc2Zvcm1zPz89e30sYy5pbnB1dFRyYW5zZm9ybXNbaF09bC5pbnB1dFRyYW5zZm9ybXNbaF19fX1mdW5jdGlvbiBQOChjKXtyZXR1cm4gYz09PUkwP3t9OmM9PT10cz9bXTpjfWZ1bmN0aW9uIElJKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVy''@;'; put 'put ''eTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBaeihjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxoLGYpfTpsfWZ1bmN0aW9uIE9mKGMsbCl7Y29uc3QgYT1jLmhvc3RC''@;'; put 'put ''aW5kaW5ncztjLmhvc3RCaW5kaW5ncz1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiB2ZChjKXtjb25zdCBsPWE9Pntjb25zdCBkPShBcnJheS5pc0FycmF5KGMpP2M6YygpKS5tYXAoaD0+ImZ1bmN0aW9uIj09dHlwZW9mIGg/e2RpcmVjdGl2ZTpZaShoKSxpbnB1dHM6STAs''@;'; put 'put ''b3V0cHV0czpJMH06e2RpcmVjdGl2ZTpZaShoLmRpcmVjdGl2ZSksaW5wdXRzOkxJKGguaW5wdXRzKSxvdXRwdXRzOkxJKGgub3V0cHV0cyl9KTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2ZURlZnM9UkksYS5ob3N0RGlyZWN0aXZlcz1kKTphLmhvc3REaXJl''@;'; put 'put ''Y3RpdmVzLnVuc2hpZnQoLi4uZCl9O3JldHVybiBsLm5nSW5oZXJpdD0hMCxsfWZ1bmN0aW9uIFJJKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKXtjb25zdCBoPXhjKGQuZGlyZWN0aXZlKTskeihoLmRlY2xhcmVkSW5w''@;'; put 'put ''dXRzLGQuaW5wdXRzKSxSSShoLGwsYSksYS5zZXQoaCxkKSxsLnB1c2goaCl9fWZ1bmN0aW9uIExJKGMpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmxlbmd0aClyZXR1cm4gSTA7Y29uc3QgbD17fTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErPTIpbFtjW2FdXT1jW2ErMV07cmV0dXJuIGx9ZnVu''@;'; put 'put ''Y3Rpb24gJHooYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfWZ1bmN0aW9uIFdsKGMpe2NvbnN0IGw9Yy5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkoaCkmJmhbM10mJihhW2RdPWhbM10pfWMuaW5wdXRUcmFuc2Zvcm1zPWF9Y2xhc3MgbnB7fWNsYXNzIG1je31jbGFzcyBJYiBleHRlbmRzIG5we2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX3BhcmVudD1hLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10s''@;'; put 'put ''dGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBsSSh0aGlzKTtjb25zdCBoPU91KGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9RjEoaC5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9UjQobCxhLFt7cHJvdmlkZTpucCx1c2VWYWx1ZTp0''@;'; put 'put ''aGlzfSx7cHJvdmlkZTpXZyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sUHIobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSx0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLHRoaXMuaW5zdGFuY2U9dGhpcy5fcjNJ''@;'; put 'put ''bmplY3Rvci5nZXQobCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5kZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51''@;'; put 'put ''bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBSYiBleHRlbmRzIG1je2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPWx9Y3JlYXRlKGwpe3JldHVybiBuZXcgSWIodGhpcy5tb2R1bGVUeXBlLGwsW10pfX1jbGFzcyBGOCBleHRlbmRz''@;'; put 'put ''IG5we2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGxJKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtjb25zdCBhPW5ldyBjZChbLi4ubC5wcm92aWRlcnMse3Byb3ZpZGU6bnAsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6V2csdXNlVmFs''@;'; put 'put ''dWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8SDMoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygp''@;'; put 'put ''fWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIEc0KGMsbCxhPW51bGwpe3JldHVybiBuZXcgRjgoe3Byb3ZpZGVyczpjLHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5p''@;'; put 'put ''dGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnRhc2tJZD0wLHRoaXMucGVuZGluZ1Rhc2tzPW5ldyBTZXQsdGhpcy5oYXNQZW5kaW5nVGFza3M9bmV3IGVpKCExKX1nZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlz''@;'; put 'put ''Lmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1hZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tz''@;'; put 'put ''LmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1Bl''@;'; put 'put ''bmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5j''@;'; put 'put ''dGlvbiBMYihjKXtyZXR1cm4hIUpTKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEpTKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1''@;'; put 'put ''bmN0aW9uIHkyKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIHJwKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBQYihjLGws''@;'; put 'put ''YSxkLGgpe2NvbnN0IGY9cnAoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxmfWZ1bmN0aW9uIGJkKGMsbCxhLGQsaCxmKXtjb25zdCB2PXJwKGMsbCxhLGQpO3JldHVybiBycChjLGwrMixoLGYpfHx2fWZ1bmN0aW9uIG10KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1kaSgpLFo9bHMo''@;'; put 'put ''KSxyZT1jK3dvLGNlPVouZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFFTKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwuY29uc3RzLHJlPWpnKGwsYyw0LHZ8fG51bGwsZDIoWixNKSk7dlMobCxhLHJlLGQyKFosRCkpLEl2KGwscmUpO2NvbnN0IGNlPXJlLnRWaWV3PW1TKDIscmUsZCxo''@;'; put 'put ''LGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxaLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscmUpLGNlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocmUpKSxyZX0ocmUsWixELGws''@;'; put 'put ''YSxkLGgsZix2KTpaLmRhdGFbcmVdO2gyKGNlLCExKTtjb25zdCBiZT1OSShaLEQsY2UsYyk7cTYoKSYmbDAoWixELGJlLGNlKSxCdShiZSxEKTtjb25zdCBFZT13UyhiZSxELGJlLGNlKTtyZXR1cm4gRFtyZV09RWUsZjgoRCxFZSksZnVuY3Rpb24gSDAoYyxsLGEpe3JldHVybiBTYihjLGws''@;'; put 'put ''YSl9KEVlLGNlLEQpLEowKGNlKSYmcFMoWixELGNlKSxudWxsIT12JiZnUyhELGNlLE0pLG10fWxldCBOST1mdW5jdGlvbiBlTShjLGwsYSxkKXtyZXR1cm4gZjIoITApLGxbYm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiBocihjLGwsYSxkKXtjb25zdCBoPWRpKCk7cmV0dXJuIEJj''@;'; put 'put ''KGgsYWgoKSxsKSYmKGxzKCksdWgoSnMoKSxoLGMsbCxhLGQpKSxocn1mdW5jdGlvbiBZbChjLGwsYSxkKXtyZXR1cm4gQmMoYyxhaCgpLGEpP2wrQ2EoYSkrZDpSb31mdW5jdGlvbiBZbyhjLGwpe3JldHVybiBjPDwxN3xsPDwyfWZ1bmN0aW9uIHhsKGMpe3JldHVybiBjPj4xNyYzMjc2N31m''@;'; put 'put ''dW5jdGlvbiBGZihjKXtyZXR1cm4gMnxjfWZ1bmN0aW9uIHlkKGMpe3JldHVybigxMzEwNjgmYyk+PjJ9ZnVuY3Rpb24gZ24oYyxsKXtyZXR1cm4tMTMxMDY5JmN8bDw8Mn1mdW5jdGlvbiB3bihjKXtyZXR1cm4gMXxjfWZ1bmN0aW9uIHlyKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVs''@;'; put 'put ''bD09PWw7bGV0IHY9ZD94bChoKTp5ZChoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgWj1jW3YrMV07V3IoY1t2XSxsKSYmKE09ITAsY1t2KzFdPWQ/d24oWik6RmYoWikpLHY9ZD94bChaKTp5ZChaKX1NJiYoY1thKzFdPWQ/RmYoaCk6d24oaCkpfWZ1bmN0aW9uIFdy''@;'; put 'put ''KGMsbCl7cmV0dXJuIG51bGw9PT1jfHxudWxsPT1sfHwoQXJyYXkuaXNBcnJheShjKT9jWzFdOmMpPT09bHx8ISghQXJyYXkuaXNBcnJheShjKXx8InN0cmluZyIhPXR5cGVvZiBsKSYmZTIoYyxsKT49MH1jb25zdCBvaT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVF''@;'; put 'put ''bmQ6MH07ZnVuY3Rpb24gbmkoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKG9pLmtleSxvaS5rZXlFbmQpfWZ1bmN0aW9uIG5vKGMsbCl7Y29uc3QgYT1vaS50ZXh0RW5kO3JldHVybiBhPT09bD8tMToobD1vaS5rZXlFbmQ9ZnVuY3Rpb24gcjEoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQo''@;'; put 'put ''bCk+MzI7KWwrKztyZXR1cm4gbH0oYyxvaS5rZXk9bCxhKSx4cyhjLGwsYSkpfWZ1bmN0aW9uIHhzKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPD0zMjspbCsrO3JldHVybiBsfWZ1bmN0aW9uIHhlKGMsbCxhKXtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAo''@;'; put 'put ''bHMoKSxKcygpLGQsYyxsLGRbYm9dLGEsITEpLHhlfWZ1bmN0aW9uIGhoKGMsbCxhLGQsaCl7Y29uc3Qgdj1oPyJjbGFzcyI6InN0eWxlIjtDUyhjLGEsbC5pbnB1dHNbdl0sdixkKX1mdW5jdGlvbiBfZChjLGwsYSl7cmV0dXJuIEhmKGMsbCxhLCExKSxfZH1mdW5jdGlvbiBUcihjLGwpe3Jl''@;'; put 'put ''dHVybiBIZihjLGwsbnVsbCwhMCksVHJ9ZnVuY3Rpb24gYXAoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gVWkoYyl7cmV0dXJuIGZ1bmN0aW9uIFRvKGMpe29pLmtleT0wLG9pLmtleUVuZD0wLG9pLnZhbHVlPTAsb2kudmFsdWVFbmQ9MCxvaS50ZXh0RW5kPWMubGVuZ3RofShjKSxubyhjLHhz''@;'; put 'put ''KGMsMCxvaS50ZXh0RW5kKSl9KGwpO2E+PTA7YT1ubyhsLGEpKV8wKGMsbmkobCksITApfWZ1bmN0aW9uIEhmKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj1BZigyKTtmLmZpcnN0VXBkYXRlUGFzcyYmb3JlKGYsYyx2LGQpLGwhPT1SbyYmQmMoaCx2LGwpJiZscmUoZixmLmRhdGFb''@;'; put 'put ''TnUoKV0saCxoW2JvXSxjLGhbdisxXT1mdW5jdGlvbiBuOWUoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jfHwoInN0cmluZyI9PXR5cGVvZiBsP2MrPWw6Im9iamVjdCI9PXR5cGVvZiBjJiYoYz1QcihtMihjKSkpKSxjfShsLGEpLGQsdil9ZnVuY3Rpb24gYXJlKGMsbCl7cmV0dXJuIGw+''@;'; put 'put ''PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gb3JlKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtOdSgpXSx2PWFyZShjLGEpO3VyZShmLGQpJiZudWxsPT09bCYmIXYmJihsPSExKSxsPWZ1bmN0aW9uIEs3ZShjLGwsYSxkKXtjb25zdCBo''@;'; 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/Y3JlKEQsbCxhLGgseWQoWiksdik6dm9pZCAwO1VJKHJlKXx8KFVJKGYpfHxmdW5jdGlvbiBfdShjKXty''@;'; put 'put ''ZXR1cm4hKDImfmMpfShaKSYmKGY9Y3JlKEQsbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24gYkQoYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3MoYSxkKTtlbHNle2xldCBmPS0xPT09ZC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGw9PWg/''@;'; put 'put ''Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1LMy5JbXBvcnRhbnQpLGMuc2V0U3R5bGUoYSxkLGgsZikpfX0oZCx2LHlnKE51KCksYSksaCxmKSl9ZnVuY3Rpb24gY3JlKGMsbCxh''@;'; put 'put ''LGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgRD1jW2hdLFo9QXJyYXkuaXNBcnJheShEKSxyZT1aP0RbMV06RCxjZT1udWxsPT09cmU7bGV0IGJlPWFbaCsxXTtiZT09PVJvJiYoYmU9Y2U/dHM6dm9pZCAwKTtsZXQgRWU9Y2U/QTYoYmUsZCk6cmU9PT1k''@;'; put 'put ''P2JlOnZvaWQgMDtpZihaJiYhVUkoRWUpJiYoRWU9QTYoRCxkKSksVUkoRWUpJiYoTT1FZSx2KSlyZXR1cm4gTTtjb25zdCBCZT1jW2grMV07aD12P3hsKEJlKTp5ZChCZSl9aWYobnVsbCE9PWwpe2xldCBEPWY/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1EJiYo''@;'; put 'put ''TT1BNihELGQpKX1yZXR1cm4gTX1mdW5jdGlvbiBVSShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1cmUoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiBkcmUoYyxsLGEpeyFmdW5jdGlvbiBOZihjLGwsYSxkKXtjb25zdCBoPWxzKCksZj1BZigyKTtoLmZp''@;'; put 'put ''cnN0VXBkYXRlUGFzcyYmb3JlKGgsbnVsbCxmLGQpO2NvbnN0IHY9ZGkoKTtpZihhIT09Um8mJkJjKHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbTnUoKV07aWYodXJlKE0sZCkmJiFhcmUoaCxmKSl7bGV0IEQ9ZD9NLmNsYXNzZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwh''@;'; put 'put ''PT1EJiYoYT1vZChELGF8fCIiKSksaGgoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIHQ5ZShjLGwsYSxkLGgsZix2LE0pe2g9PT1SbyYmKGg9dHMpO2xldCBEPTAsWj0wLHJlPTA8aC5sZW5ndGg/aFswXTpudWxsLGNlPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PXJlfHxudWxs''@;'; put 'put ''IT09Y2U7KXtjb25zdCBiZT1EPGgubGVuZ3RoP2hbRCsxXTp2b2lkIDAsRWU9WjxmLmxlbmd0aD9mW1orMV06dm9pZCAwO2xldCBxZSxCZT1udWxsO3JlPT09Y2U/KEQrPTIsWis9MixiZSE9PUVlJiYoQmU9Y2UscWU9RWUpKTpudWxsPT09Y2V8fG51bGwhPT1yZSYmcmU8Y2U/KEQrPTIsQmU9''@;'; put 'put ''cmUpOihaKz0yLEJlPWNlLHFlPUVlKSxudWxsIT09QmUmJmxyZShjLGwsYSxkLEJlLHFlLHYsTSkscmU9RDxoLmxlbmd0aD9oW0RdOm51bGwsY2U9WjxmLmxlbmd0aD9mW1pdOm51bGx9fShoLE0sdix2W2JvXSx2W2YrMV0sdltmKzFdPWZ1bmN0aW9uIFE3ZShjLGwsYSl7aWYobnVsbD09YXx8''@;'; put 'put ''IiI9PT1hKXJldHVybiB0cztjb25zdCBkPVtdLGg9bTIoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGgpZm9yKGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQs''@;'; put 'put ''ZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0oXzAsYXAsWWwoZGkoKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj13bytjLE09aFtib10sRD1mLmZpcnN0Q3JlYXRlUGFzcz9m''@;'; put 'put ''dW5jdGlvbiBNOWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bC5jb25zdHMsRD1qZyhsLGMsMixkLGQyKHYsaCkpO3JldHVybiB2UyhsLGEsRCxkMih2LGYpKSxudWxsIT09RC5hdHRycyYmd2IoRCxELmF0dHJzLCExKSxudWxsIT09RC5tZXJnZWRBdHRycyYmd2IoRCxELm1lcmdlZEF0dHJzLCEw''@;'; put 'put ''KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsRCksRH0odixmLGgsbCxhLGQpOmYuZGF0YVt2XSxaPWdyZShmLGgsRCxNLGwsYyk7aFt2XT1aO2NvbnN0IHJlPUowKEQpO3JldHVybiBoMihELCEwKSx3RChNLFosRCksIWZ1bmN0aW9uIEg4KGMpe3JldHVybiEo''@;'; put 'put ''MzImfmMuZmxhZ3MpfShEKSYmcTYoKSYmbDAoZixoLFosRCksMD09PWZ1bmN0aW9uIHVWKCl7cmV0dXJuIENvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKSYmQnUoWixoKSxmdW5jdGlvbiBkVigpe0NvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLHJlJiYocFMoZixoLEQpLGZT''@;'; put 'put ''KGYsRCxoKSksbnVsbCE9PWQmJmdTKGgsRCksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz11bCgpO2lDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBoVihjKXtyZXR1cm4gQ28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24g''@;'; put 'put ''bVYoKXtDby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gUUEoKXtDby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPWxzKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiYoSXYoYSxjKSxydShjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykp''@;'; put 'put ''LG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBrVihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmaGgoYSxsLGRpKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIERWKGMpe3JldHVybiEhKDE2JmMuZmxh''@;'; put 'put ''Z3MpfShsKSYmaGgoYSxsLGRpKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksaGV9ZnVuY3Rpb24gR3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksR3R9bGV0IGdyZT0oYyxsLGEsZCxoLGYpPT4oZjIoITApLHo0KGQsaCxmdW5jdGlvbiBvaygpe3JldHVybiBDby5sRnJhbWUu''@;'; put 'put ''Y3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIGNpKGMsbCxhKXtjb25zdCBkPWRpKCksaD1scygpLGY9Yyt3byx2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFQ5ZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25zdHMsdj1kMihmLGQpLE09amcobCxjLDgsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''dik7cmV0dXJuIG51bGwhPT12JiZ3YihNLHYsITApLHZTKGwsYSxNLGQyKGYsaCkpLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxNKSxNfShmLGgsZCxsLGEpOmguZGF0YVtmXTtoMih2LCEwKTtjb25zdCBNPW1yZShoLGQsdixjKTtyZXR1cm4gZFtmXT1NLHE2''@;'; put 'put ''KCkmJmwwKGgsZCxNLHYpLEJ1KE0sZCksSjAodikmJihwUyhoLGQsdiksZlMoaCx2LGQpKSxudWxsIT1hJiZnUyhkLHYpLGNpfWZ1bmN0aW9uIHVpKCl7bGV0IGM9dWwoKTtjb25zdCBsPWxzKCk7cmV0dXJuIGlDKCk/YUMoKTooYz1jLnBhcmVudCxoMihjLCExKSksbC5maXJzdENyZWF0ZVBh''@;'; put 'put ''c3MmJihJdihsLGMpLHJ1KGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksdWl9ZnVuY3Rpb24gRmwoYyxsLGEpe3JldHVybiBjaShjLGwsYSksdWkoKSxGbH1sZXQgbXJlPShjLGwsYSxkKT0+KGYyKCEwKSxlUyhsW2JvXSwiIikpO2Z1bmN0aW9uIExuKCl7cmV0dXJuIGRpKCl9ZnVuY3Rp''@;'; put 'put ''b24gb3AoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtyZXR1cm4gQmMoZCxhaCgpLGwpJiZGMChscygpLEpzKCksZCxjLGwsZFtib10sYSwhMCksb3B9ZnVuY3Rpb24gbFUoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtpZihCYyhkLGFoKCksbCkpe2NvbnN0IGY9bHMoKSx2PUpzKCk7RjAoZix2LGQsYyxsLFc0''@;'; put 'put ''KHNDKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gbFV9Y29uc3Qgajg9dm9pZCAwO3ZhciBJOWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxqOF0sW1siQU0iLCJQTSJdLGo4LGo4XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQi''@;'; put 'put ''LCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxqOCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi''@;'; put 'put ''QSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2Vw''@;'; put 'put ''dGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sajgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6''@;'; put 'put ''bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixqOCwiezF9ICdhdCcgezB9IixqOF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMs''@;'; put 'put ''IyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBEOWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1h''@;'; put 'put ''JiYwPT09ZD8xOjV9XTtsZXQgemI9e307ZnVuY3Rpb24gbzEoYyl7Y29uc3QgbD1mdW5jdGlvbiBMOWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9YnJlKGwpO2lmKGEpcmV0dXJuIGE7Y29uc3QgZD1sLnNwbGl0KCItIilbMF07aWYoYT1i''@;'; put 'put ''cmUoZCksYSlyZXR1cm4gYTtpZigiZW4iPT09ZClyZXR1cm4gSTllO3Rocm93IG5ldyBRbig3MDEsITEpfWZ1bmN0aW9uIGJyZShjKXtyZXR1cm4gYyBpbiB6Ynx8KHpiW2NdPVZ0Lm5nJiZWdC5uZy5jb21tb24mJlZ0Lm5nLmNvbW1vbi5sb2NhbGVzJiZWdC5uZy5jb21tb24ubG9jYWxlc1tj''@;'; put 'put ''XSksemJbY119dmFyIGVjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNG''@;'; put 'put ''b3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmly''@;'; put 'put ''c3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZv''@;'; put 'put ''cm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLGNbYy5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3Vy''@;'; put 'put ''cmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9''@;'; put 'put ''KGVjfHx7fSk7Y29uc3QgVWI9ImVuLVVTIjtsZXQgeXJlPVViO2Z1bmN0aW9uIEh0KGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWxzKCksdj11bCgpO3JldHVybiBoVShmLGgsaFtib10sdixjLGwsZCksSHR9ZnVuY3Rpb24gZFUoYyxsKXtjb25zdCBhPXVsKCksZD1kaSgpLGg9bHMoKTtyZXR1''@;'; put 'put ''cm4gaFUoaCxkLFc0KHNDKGguZGF0YSksYSxkKSxhLGMsbCksZFV9ZnVuY3Rpb24gaFUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1KMChkKSxaPWMuZmlyc3RDcmVhdGVQYXNzJiZwOChjKSxyZT1sW2NsXSxjZT1IRChsKTtsZXQgYmU9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHFlPUwwKGQs''@;'; put 'put ''bCkscnQ9dj92KHFlKTpxZSxwdD1jZS5sZW5ndGgsZHQ9dj92bj0+dihDbCh2bltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIXYmJk0mJihKdD1mdW5jdGlvbiBrdmUoYyxsLGEsZCl7Y29uc3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3Ro''@;'; put 'put ''LTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbWDBdLEQ9aFtmKzJdO3JldHVybiBNLmxlbmd0aD5EP01bRF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihmKz0yKX1yZXR1cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1KdCkoSnQu''@;'; put 'put ''X19uZ0xhc3RMaXN0ZW5lckZuX198fEp0KS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLEp0Ll9fbmdMYXN0TGlzdGVuZXJGbl9fPWYsYmU9ITE7ZWxzZXtmPVlyZShkLGwscmUsZiwhMSk7Y29uc3Qgdm49YS5saXN0ZW4ocnQsaCxmKTtjZS5wdXNoKGYsdm4pLFomJloucHVzaChoLGR0LHB0LHB0''@;'; put 'put ''KzEpfX1lbHNlIGY9WXJlKGQsbCxyZSxmLCExKTtjb25zdCBFZT1kLm91dHB1dHM7bGV0IEJlO2lmKGJlJiZudWxsIT09RWUmJihCZT1FZVtoXSkpe2NvbnN0IHFlPUJlLmxlbmd0aDtpZihxZSlmb3IobGV0IHJ0PTA7cnQ8cWU7cnQrPTIpe2NvbnN0IENuPWxbQmVbcnRdXVtCZVtydCsxXV0u''@;'; put 'put ''c3Vic2NyaWJlKGYpLHRuPWNlLmxlbmd0aDtjZS5wdXNoKGYsQ24pLFomJloucHVzaChoLGQuaW5kZXgsdG4sLSh0bisxKSl9fX1mdW5jdGlvbiBXcmUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIHUyKDYsbCxhKSwhMSE9PWEoZCl9Y2F0Y2goZil7cmV0dXJuIHpnKGMs''@;'; put 'put ''ZiksITF9ZmluYWxseXt1Mig3LGwsYSksX2UoaCl9fWZ1bmN0aW9uIFlyZShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDt5OChjLmNvbXBvbmVudE9mZnNldD4tMT9PMShjLmluZGV4LGwpOmwpO2xldCBEPVdyZShsLGEsZCx2KSxaPWYu''@;'; put 'put ''X19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtaOylEPVdyZShsLGEsWix2KSYmRCxaPVouX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09RCYmdi5wcmV2ZW50RGVmYXVsdCgpLER9fWZ1bmN0aW9uIExlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIHdWKGMpe3JldHVybihDby5sRnJh''@;'; put 'put ''bWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIHRDKGMsbCl7Zm9yKDtjPjA7KWw9bFtvMF0sYy0tO3JldHVybiBsfShjLENvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtjbF19KGMpfWZ1bmN0aW9uIER2ZShjLGwpe2xldCBhPW51bGw7Y29uc3QgZD1mdW5jdGlvbiBodihjKXtjb25zdCBsPWMuYXR0''@;'; put 'put ''cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxbaF07aWYoIioiIT09Zil7aWYobnVsbD09PWQ/YjQoYyxmLCEwKTpOdyhkLGYpKXJldHVy''@;'; put 'put ''biBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIHNhKGMpe2NvbnN0IGw9ZGkoKVtabF1bcmNdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIFFoKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0o''@;'; put 'put ''Yz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz9EdmUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6ZFt2XT1mLGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBZcihjLGw9MCxh''@;'; put 'put ''KXtjb25zdCBkPWRpKCksaD1scygpLGY9amcoaCx3bytjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSxhQygpLCghZFtudV18fF9nKCkpJiYzMiZ+Zi5mbGFncyYmZnVuY3Rpb24gdGooYyxsLGEpe3ZEKGxbYm9dLDAsbCxhLGliKGMsYSxs''@;'; put 'put ''KSx1OChhLnBhcmVudHx8bFtyY10sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiBmTShjLGwsYSl7cmV0dXJuIGZVKGMsIiIsbCwiIixhKSxmTX1mdW5jdGlvbiBmVShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PVlsKGYsbCxhLGQpO3JldHVybiB2IT09Um8mJkYwKGxzKCksSnMoKSxmLGMsdixm''@;'; put 'put ''W2JvXSxoLCExKSxmVX1mdW5jdGlvbiBhbyhjLGwsYSxkKXshZnVuY3Rpb24gdkkoYyxsLGEsZCl7Y29uc3QgaD1scygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPXVsKCk7eUkoaCxuZXcgZkkobCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIE96KGMsbCl7Y29uc3QgYT1jLmNvbnRl''@;'; put 'put ''bnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIGdJKGgsZGkoKSxhKX0oYyxsLGEs''@;'; put 'put ''ZCl9ZnVuY3Rpb24gcWEoYyxsLGEpeyFmdW5jdGlvbiBtSShjLGwsYSl7Y29uc3QgZD1scygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKHlJKGQsbmV3IGZJKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxnSShkLGRpKCksbCl9KGMsbCxhKX1mdW5j''@;'; put 'put ''dGlvbiBDaShjKXtjb25zdCBsPWRpKCksYT1scygpLGQ9bEMoKTtCMyhkKzEpO2NvbnN0IGg9WVMoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBsVihjKXtyZXR1cm4hKDQmfmNbVWFdKX0obCk9PT0hKDImfmgubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQo''@;'; put 'put ''W10pO2Vsc2V7Y29uc3QgZj1fSShsLGQpO2MucmVzZXQoZixiayksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTaSgpe3JldHVybiBmdW5jdGlvbiBJOChjLGwpe3JldHVybiBjW3VkXS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oZGkoKSxsQygpKX1mdW5j''@;'; put 'put ''dGlvbiBoYShjKXtyZXR1cm4gRTQoZnVuY3Rpb24gdlYoKXtyZXR1cm4gQ28ubEZyYW1lLmNvbnRleHRMVmlld30oKSx3bytjKX1mdW5jdGlvbiBPZShjLGw9IiIpe2NvbnN0IGE9ZGkoKSxkPWxzKCksaD1jK3dvLGY9ZC5maXJzdENyZWF0ZVBhc3M/amcoZCxoLDEsbCxudWxsKTpkLmRhdGFb''@;'; put 'put ''aF0sdj11aWUoZCxhLGYsbCxjKTthW2hdPXYscTYoKSYmbDAoZCxhLHYsZiksaDIoZiwhMSl9bGV0IHVpZT0oYyxsLGEsZCxoKT0+KGYyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxbYm9dLGQpKTtmdW5jdGlvbiBDcihjKXtyZXR1cm4gSXIoIiIsYywi''@;'; put 'put ''IiksQ3J9ZnVuY3Rpb24gSXIoYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPVlsKGQsYyxsLGEpO3JldHVybiBoIT09Um8mJnYyKGQsTnUoKSxoKSxJcn1mdW5jdGlvbiB6dShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PWZ1bmN0aW9uIEdsKGMsbCxhLGQsaCxmKXtjb25zdCBNPXJwKGMsVGYoKSxh''@;'; put 'put ''LGgpO3JldHVybiBBZigyKSxNP2wrQ2EoYSkrZCtDYShoKStmOlJvfShmLGMsbCxhLGQsaCk7cmV0dXJuIHYhPT1SbyYmdjIoZixOdSgpLHYpLHp1fWZ1bmN0aW9uIFZmKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09ZGkoKSxEPWZ1bmN0aW9uIHl1KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgWj1Q''@;'; put 'put ''YihjLFRmKCksYSxoLHYpO3JldHVybiBBZigzKSxaP2wrQ2EoYSkrZCtDYShoKStmK0NhKHYpK006Um99KE0sYyxsLGEsZCxoLGYsdik7cmV0dXJuIEQhPT1SbyYmdjIoTSxOdSgpLEQpLFZmfWZ1bmN0aW9uICRJKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWRpKCkscmU9ZnVuY3Rpb24g''@;'; put 'put ''TWwoYyxsLGEsZCxoLGYsdixNLEQsWil7Y29uc3QgY2U9YmQoYyxUZigpLGEsaCx2LEQpO3JldHVybiBBZig0KSxjZT9sK0NhKGEpK2QrQ2EoaCkrZitDYSh2KStNK0NhKEQpK1o6Um99KFosYyxsLGEsZCxoLGYsdixNLEQpO3JldHVybiByZSE9PVJvJiZ2MihaLE51KCkscmUpLCRJfWZ1bmN0''@;'; put 'put ''aW9uIHBpKGMsbCxhKXtDSShsKSYmKGw9bCgpKTtjb25zdCBkPWRpKCk7cmV0dXJuIEJjKGQsYWgoKSxsKSYmRjAobHMoKSxKcygpLGQsYyxsLGRbYm9dLGEsITEpLHBpfWZ1bmN0aW9uIG1pKGMsbCl7Y29uc3QgYT1DSShjKTtyZXR1cm4gYSYmYy5zZXQobCksYX1mdW5jdGlvbiBnaShjLGwp''@;'; put 'put ''e2NvbnN0IGE9ZGkoKSxkPWxzKCksaD11bCgpO3JldHVybiBoVShkLGEsYVtib10saCxjLGwpLGdpfWZ1bmN0aW9uIHBVKGMsbCxhLGQsaCl7aWYoYz1ZaShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKXBVKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBm''@;'; put 'put ''PWxzKCksdj1kaSgpLE09dWwoKTtsZXQgRD1fZihjKT9jOllpKGMucHJvdmlkZSk7Y29uc3QgWj13dihjKSxyZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLGNlPU0uZGlyZWN0aXZlU3RhcnQsYmU9TS5wcm92aWRlckluZGV4ZXM+PjIwO2lmKF9mKGMpfHwhYy5tdWx0aSl7Y29uc3QgRWU9''@;'; put 'put ''bmV3IFAxKFosaCxHZSksQmU9bVUoRCxsLGg/cmU6cmUrYmUsY2UpOy0xPT09QmU/KGhkKEh2KE0sdiksZixEKSxnVShmLGMsbC5sZW5ndGgpLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVz''@;'; put 'put ''aChFZSksdi5wdXNoKEVlKSk6KGFbQmVdPUVlLHZbQmVdPUVlKX1lbHNle2NvbnN0IEVlPW1VKEQsbCxyZStiZSxjZSksQmU9bVUoRCxsLHJlLHJlK2JlKSxydD1CZT49MCYmYVtCZV07aWYoaCYmIXJ0fHwhaCYmIShFZT49MCYmYVtFZV0pKXtoZChIdihNLHYpLGYsRCk7Y29uc3QgcHQ9ZnVu''@;'; 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 ''LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgYyh4cihoYykpfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBLSShjKXtiMigiTmdTdGFuZGFsb25lIiksYy5n''@;'; put 'put ''ZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQocXZlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBZcyhjLGwsYSl7Y29uc3QgZD1PMCgpK2MsaD1kaSgpO3JldHVybiBoW2RdPT09Um8/eTIoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gQWMoYyxs''@;'; put 'put ''KXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBzcChjLGwsYSxkKXtyZXR1cm4gYmllKGRpKCksTzAoKSxjLGwsYSxkKX1mdW5jdGlvbiBscChjLGwsYSxkLGgpe3JldHVybiB5aWUoZGkoKSxPMCgpLGMsbCxhLGQsaCl9ZnVuY3Rpb24gcE0oYyxsLGEsZCxoLGYpe3JldHVybiBfaWUoZGko''@;'; put 'put ''KSxPMCgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBYSShjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gd2llKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwrYTtyZXR1cm4gYmQoYyxaLGgsZix2LE0pP3kyKGMsWis0LEQ/ZC5jYWxsKEQsaCxmLHYsTSk6ZChoLGYsdixNKSk6Z00o''@;'; put 'put ''YyxaKzQpfShkaSgpLE8wKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gZ00oYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1Sbz92b2lkIDA6YX1mdW5jdGlvbiBiaWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3JldHVybiBCYyhjLHYsaCk/eTIoYyx2KzEsZj9kLmNhbGwoZixoKTpk''@;'; put 'put ''KGgpKTpnTShjLHYrMSl9ZnVuY3Rpb24geWllKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBycChjLE0saCxmKT95MihjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpnTShjLE0rMil9ZnVuY3Rpb24gX2llKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1sK2E7cmV0dXJu''@;'; put 'put ''IFBiKGMsRCxoLGYsdik/eTIoYyxEKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOmdNKGMsRCszKX1mdW5jdGlvbiBRcyhjLGwpe2NvbnN0IGE9bHMoKTtsZXQgZDtjb25zdCBoPWMrd287YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24gaWJlKGMsbCl7aWYobClmb3IobGV0IGE9''@;'; put 'put ''bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9''@;'; put 'put ''ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PW11KGQudHlwZSkpLE09X2woR2UpO3RyeXtjb25zdCBEPVB2KCExKSxaPWYoKTtyZXR1cm4gUHYoRCksZnVuY3Rpb24gT3ZlKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9''@;'; put 'put ''KGEsZGkoKSxoLFopLFp9ZmluYWxseXtfbChNKX19ZnVuY3Rpb24gRGMoYyxsLGEpe2NvbnN0IGQ9Yyt3byxoPWRpKCksZj1FNChoLGQpO3JldHVybiBtTShoLGQpP2JpZShoLE8wKCksbCxmLnRyYW5zZm9ybSxhLGYpOmYudHJhbnNmb3JtKGEpfWZ1bmN0aW9uIHo4KGMsbCxhLGQpe2NvbnN0''@;'; put 'put ''IGg9Yyt3byxmPWRpKCksdj1FNChmLGgpO3JldHVybiBtTShmLGgpP3lpZShmLE8wKCksbCx2LnRyYW5zZm9ybSxhLGQsdik6di50cmFuc2Zvcm0oYSxkKX1mdW5jdGlvbiBiVShjLGwsYSxkLGgpe2NvbnN0IGY9Yyt3byx2PWRpKCksTT1FNCh2LGYpO3JldHVybiBtTSh2LGYpP19pZSh2LE8w''@;'; put 'put ''KCksbCxNLnRyYW5zZm9ybSxhLGQsaCxNKTpNLnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gbU0oYyxsKXtyZXR1cm4gY1tLaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIEljKGMsbCl7cmV0dXJuIGhiKGMsbCl9Y2xhc3MgYk17Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1s''@;'; put 'put ''LnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBOaWU9bmV3IGJNKCIxNy4zLjEyIik7bGV0IFZpZT0oKCk9PntjbGFzcyBje2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUu''@;'; put 'put ''d2FybihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWmllPW5l''@;'; put 'put ''dyBTdCgiIiksZVI9bmV3IFN0KCIiKTtsZXQgRVUsTVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50''@;'; 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 ''cihlUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLHhVPSgoKT0+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 ''dGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9ZmkobWspLHRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPWZpKEU4KSx0aGlz''@;'; put 'put ''LmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IFduLHRoaXMuYWZ0ZXJUaWNrPW5ldyBXbix0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPWZpKFBmKS5oYXNQZW5kaW5nVGFza3MucGlwZShMcihhPT4h''@;'; put 'put ''YSkpLHRoaXMuX2luamVjdG9yPWZpKGhjKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgSkQ7aWYoIXRoaXMuX2luamVjdG9yLmdldChB''@;'; put 'put ''VSkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBuMihjKXtjb25zdCBsPVZvKGMpfHx4YyhjKXx8ZXUoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBRbig0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMuX2luamVjdG9yLmdldChXZykucmVzb2x2ZUNvbXBvbmVudEZhY3Rv''@;'; put 'put ''cnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgTT1mdW5jdGlvbiBleWUoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KG5wKSxaPXYuY3JlYXRlKERzLk5VTEwsW10sZHx8di5zZWxlY3Rv''@;'; put 'put ''cixNKSxyZT1aLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsY2U9Wi5pbmplY3Rvci5nZXQoWmllLG51bGwpO3JldHVybiBjZT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihyZSksWi5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoWi5ob3N0VmlldyksdFIodGhpcy5jb21wb25lbnRzLFopLGNl''@;'; put 'put ''Py51bnJlZ2lzdGVyQXBwbGljYXRpb24ocmUpfSksdGhpcy5fbG9hZENvbXBvbmVudChaKSxafXRpY2soKXt0aGlzLl90aWNrKCEwKX1fdGljayhhKXtpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgUW4oMTAxLCExKTtjb25zdCBkPV9lKG51bGwpO3RyeXt0aGlzLl9ydW5uaW5nVGlj''@;'; put 'put ''az0hMCx0aGlzLmRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl9Y2F0Y2goaCl7dGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcihoKX1maW5hbGx5e3RoaXMuYWZ0ZXJUaWNrLm5leHQoKSx0aGlzLl9ydW5uaW5nVGljaz0hMSxfZShkKX19ZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3''@;'; put 'put ''cyhhKXtsZXQgZD0wO2NvbnN0IGg9dGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI7Zm9yKDs7KXtpZihkPT09QkQpdGhyb3cgbmV3IFFuKDEwMywhMSk7aWYoYSl7Y29uc3QgZj0wPT09ZDt0aGlzLmJlZm9yZVJlbmRlci5uZXh0KGYpO2ZvcihsZXR7X2xWaWV3OnYsbm90aWZ5RXJyb3JI''@;'; put 'put ''YW5kbGVyOk19b2YgdGhpcy5fdmlld3MpbnllKHYsZixNKX1pZihkKyssaC5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+RFUoZikpJiYoaC5leGVjdXRlKCksIVsu''@;'; put 'put ''Li50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9PkRVKGYpKSkpYnJlYWt9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2Nv''@;'; put 'put ''bnN0IGQ9YTt0Uih0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoa1UsW10pO1su''@;'; put 'put ''Li50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMsLi4uZF0uZm9yRWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ry''@;'; put 'put ''b3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT50Uih0aGlz''@;'; put 'put ''Ll9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3''@;'; put 'put ''cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9''@;'; put 'put ''KSgpO2Z1bmN0aW9uIHRSKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBueWUoYyxsLGEpeyFsJiYhRFUoYyl8fGZ1bmN0aW9uIHJ5ZShjLGwsYSl7bGV0IGQ7YT8oZD0wLGNbVWFdfD0xMDI0KTpkPTY0JmNbVWFdPzA6MSxkYihjLGwsZCl9''@;'; put 'put ''KGMsYSxsKX1mdW5jdGlvbiBEVShjKXtyZXR1cm4gRXYoYyl9Y2xhc3MgaXlle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgS2llPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5l''@;'; put 'put ''dyBSYihhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9RjEoT3UoYSkuZGVj''@;'; 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 ''c3QgQmY9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShCZixyYS5PcHRpb25hbHxyYS5Ta2lwU2VsZil8fGZ1bmN0aW9uIGR5ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8VWJ9KCl9KSxJVT1uZXcgU3QoIiIpO2xl''@;'; put 'put ''dCBRaWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gckkoYz0i''@;'; put 'put ''em9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9uZXcgbkk6InpvbmUuanMiPT09Yz9uZXcgV2EobCk6Y30oZD8ubmdab25lLGZ1bmN0aW9uIEppZShjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENv''@;'; put 'put ''YWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigo''@;'; put 'put ''KT0+e2NvbnN0IGY9ZnVuY3Rpb24gUEkoYyxsLGEpe3JldHVybiBuZXcgSWIoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBYaWUoYyl7cmV0dXJuW3twcm92aWRlOldhLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6dDIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+''@;'; put 'put ''e2NvbnN0IGw9Zmkoc3llLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnQyLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKHV5ZSk7cmV0dXJuKCk9PntsLmluaXRpYWxpemUoKX19fSx7cHJvdmlkZTptayx1c2VGYWN0b3J5Omx5''@;'; put 'put ''ZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQoZzIsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBNPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6RD0+e3YuaGFuZGxlRXJyb3IoRCl9fSk7Zi5vbkRlc3Ryb3koKCk9Pnt0Uih0aGlzLl9tb2R1bGVzLGYp''@;'; put 'put ''LE0udW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24gR2llKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIF9NKGQpP2QuY2F0Y2goaD0+e3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFu''@;'; put 'put ''Z3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fSh2LGgsKCk9Pntjb25zdCBNPWYuaW5qZWN0b3IuZ2V0KEFVKTtyZXR1cm4gTS5ydW5Jbml0aWFsaXplcnMoKSxNLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBfcmUoYyl7InN0cmluZyI9PXR5cGVvZiBjJiYoeXJlPWMudG9M''@;'; put 'put ''b3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KEJmLFViKXx8VWIpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD0kaWUoe30sZCk7cmV0dXJuIGZ1bmN0aW9uIG95ZShjLGwsYSl7Y29u''@;'; put 'put ''c3QgZD1uZXcgUmIoYSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShkKX0oMCwwLGEpLnRoZW4oZj0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KGYsaCkpfV9tb2R1bGVEb0Jvb3RzdHJhcChhKXtjb25zdCBkPWEuaW5qZWN0b3IuZ2V0KHE0KTtpZihhLl9ib290c3RyYXBDb21wb25lbnRz''@;'; put 'put ''Lmxlbmd0aD4wKWEuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChoPT5kLmJvb3RzdHJhcChoKSk7ZWxzZXtpZighYS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBRbigtNDAzLCExKTthLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZCl9dGhpcy5fbW9kdWxlcy5wdXNoKGEp''@;'; put 'put ''fW9uRGVzdHJveShhKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZD0+''@;'; put 'put ''ZC5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChkPT5kKCkpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3IuZ2V0KElVLG51bGwpO2EmJihhLmZvckVhY2goZD0+ZCgpKSxhLmNsZWFyKCkpLHRoaXMuX2Rlc3Ryb3llZD0hMH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2Rlc3Ryb3llZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxRZz1udWxsO2NvbnN0IGVhZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIHRhZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFN0KGQpO3JldHVybihmPVtdKT0+e2xldCB2PVJVKCk7aWYoIXZ8fHYuaW5qZWN0b3IuZ2V0KGVhZSwhMSkpe2NvbnN0IE09Wy4uLmEsLi4u''@;'; put 'put ''Zix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07Yz9jKE0pOmZ1bmN0aW9uIHB5ZShjKXtpZihRZyYmIVFnLmdldChlYWUsITEpKXRocm93IG5ldyBRbig0MDAsITEpOyhmdW5jdGlvbiBZaWUoKXshZnVuY3Rpb24gUmUoYyl7RGU9Y30oKCk9Pnt0aHJvdyBuZXcgUW4oNjAwLCExKX0pfSkoKSxR''@;'; put 'put ''Zz1jO2NvbnN0IGw9Yy5nZXQoUWllKTsoZnVuY3Rpb24gcmFlKGMpe2MuZ2V0KE9rLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShjKX0oZnVuY3Rpb24gbmFlKGM9W10sbCl7cmV0dXJuIERzLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6RjYsdXNlVmFsdWU6InBsYXRmb3Jt''@;'; put 'put ''In0se3Byb3ZpZGU6SVUsdXNlVmFsdWU6bmV3IFNldChbKCk9PlFnPW51bGxdKX0sLi4uY119KX0oTSxkKSl9cmV0dXJuIGZ1bmN0aW9uIGd5ZShjKXtjb25zdCBsPVJVKCk7aWYoIWwpdGhyb3cgbmV3IFFuKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFJVKCl7cmV0dXJuIFFnPy5n''@;'; put 'put ''ZXQoUWllKT8/bnVsbH1sZXQgRXM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz12eWV9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2eWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGJ5ZShjLGwsYSl7aWYoRWYoYykmJiFhKXtjb25zdCBkPU8xKGMuaW5kZXgsbCk7cmV0''@;'; put 'put ''dXJuIG5ldyBfOChkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IF84KGxbWmxdLGwpOm51bGx9KHVsKCksZGkoKSwhKDE2Jn5jKSl9Y2xhc3MgbGFle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBMYihsKX1jcmVhdGUobCl7cmV0dXJuIG5ldyBTeWUobCl9fWNvbnN0IEN5ZT0o''@;'; 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 ''LCFMYihsKSl0aHJvdyBuZXcgUW4oOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7aWYoQXJyYXkuaXNBcnJheShsKSl7dGhpcy5sZW5ndGg9bC5sZW5n''@;'; 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 ''MSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxfUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlmZmVycz1hLHRoaXMua2V5VmFsdWVzPVtdLHRoaXMuY29tcGFyZUZuPXJvZX10cmFuc2Zvcm0oYSxkPXJvZSl7aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpO2NvbnN0IGg9dGhpcy5kaWZmZXIuZGlmZihhKSxmPWQhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaCYmKHRoaXMua2V5VmFsdWVzPVtdLGguZm9yRWFjaEl0ZW0o''@;'; put 'put ''dj0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24geHdlKGMsbCl7cmV0dXJue2tleTpjLHZhbHVlOmx9fSh2LmtleSx2LmN1cnJlbnRWYWx1ZSkpfSkpLChofHxmKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZCksdGhpcy5jb21wYXJlRm49ZCksdGhpcy5rZXlWYWx1ZXN9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uod00sMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJvZShjLGwpe2NvbnN0''@;'; put 'put ''IGE9Yy5rZXksZD1sLmtleTtpZihhPT09ZClyZXR1cm4gMDtpZih2b2lkIDA9PT1hKXJldHVybiAxO2lmKHZvaWQgMD09PWQpcmV0dXJuLTE7aWYobnVsbD09PWEpcmV0dXJuIDE7aWYobnVsbD09PWQpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGE8ZD8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkKXJldHVybiBhLWQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7Y29uc3QgaD1TdHJpbmcoYSksZj1TdHJpbmcoZCk7cmV0dXJu''@;'; put 'put ''IGg9PWY/MDpoPGY/LTE6MX1sZXQgUmE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7ZnVuY3Rpb24gZWwoYyl7cmV0dXJuImJyb3dzZXIiPT09Y31mdW5jdGlvbiBhb2UoYyl7cmV0dXJuInNlcnZlciI9PT1jfWxldCBSd2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmVsKGZp''@;'; 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 ''Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVzO2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoR3YpLHhyKExnLDgpLHhyKGlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3Qgc1o9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu''@;'; put 'put ''ayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sbFo9LyVDT01QJS9nLHZDZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24geW9lKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShsWixjKSl9bGV0IGNaPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWEsdGhpcy5zaGFyZWRTdHlsZXNI''@;'; put 'put ''b3N0PWQsdGhpcy5hcHBJZD1oLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1mLHRoaXMuZG9jPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLm5vbmNlPVosdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFvZShN''@;'; put 'put ''KSx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgdVooYSx2LEQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyKX1jcmVhdGVSZW5kZXJlcihhLGQpe2lmKCFhfHwhZClyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZkLmVuY2Fwc3VsYXRpb249PT1Ycy5TaGFk''@;'; put 'put ''b3dEb20mJihkPXsuLi5kLGVuY2Fwc3VsYXRpb246WHMuRW11bGF0ZWR9KTtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpO3JldHVybiBoIGluc3RhbmNlb2Ygd29lP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIGRaJiZoLmFwcGx5U3R5bGVzKCksaH1nZXRPckNy''@;'; put 'put ''ZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsTT10aGlzLm5nWm9uZSxEPXRoaXMuZXZlbnRNYW5hZ2VyLFo9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LHJlPXRoaXMucmVtb3ZlU3R5''@;'; put 'put ''bGVzT25Db21wRGVzdHJveSxjZT10aGlzLnBsYXRmb3JtSXNTZXJ2ZXI7c3dpdGNoKGQuZW5jYXBzdWxhdGlvbil7Y2FzZSBYcy5FbXVsYXRlZDpmPW5ldyB3b2UoRCxaLGQsdGhpcy5hcHBJZCxyZSx2LE0sY2UpO2JyZWFrO2Nhc2UgWHMuU2hhZG93RG9tOnJldHVybiBuZXcgd0NlKEQsWixh''@;'; put 'put ''LGQsdixNLHRoaXMubm9uY2UsY2UpO2RlZmF1bHQ6Zj1uZXcgZFooRCxaLGQscmUsdixNLGNlKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoeHIoZ29lKSx4cih2b2UpLHhyKEd2KSx4cih2Q2UpLHhyKHZzKSx4cihpbykseHIoV2EpLHhyKExnKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgdVp7Y29uc3RydWN0b3IobCxh''@;'; 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 ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgTW9lPVt7cHJvdmlkZTppbyx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOk9rLHVzZVZhbHVlOmZ1bmN0aW9uIEVDZSgpe2laLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTp2cyx1c2VG''@;'; put 'put ''YWN0b3J5OmZ1bmN0aW9uIEFDZSgpe3JldHVybiBmdW5jdGlvbiBvQihjKXtUQz1jfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxrQ2U9dGFlKER5ZSwiYnJvd3NlciIsTW9lKSxEQ2U9bmV3IFN0KCIiKSx4b2U9W3twcm92aWRlOmVSLHVzZUNsYXNzOmNsYXNzIGhDZXthZGRUb1dp''@;'; put 'put ''bmRvdyhsKXtWdC5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgUW4oNTEwMywhMSk7cmV0dXJuIGZ9LFZ0LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdldEFs''@;'; put 'put ''bFRlc3RhYmlsaXRpZXMoKSxWdC5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoVnQuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2NvbnN0''@;'; put 'put ''IGg9VnQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1oLmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKE09PntNLndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/bnVs''@;'; put 'put ''bDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD90bSgpLmlzU2hhZG93Um9vdChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6Wmll''@;'; put 'put ''LHVzZUNsYXNzOk1VLGRlcHM6W1dhLHhVLGVSXX0se3Byb3ZpZGU6TVUsdXNlQ2xhc3M6TVUsZGVwczpbV2EseFUsZVJdfV0sRW9lPVt7cHJvdmlkZTpGNix1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmcyLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gVENlKCl7cmV0dXJuIG5ldyBnMn0sZGVwczpb''@;'; put 'put ''XX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6Q0NlLG11bHRpOiEwLGRlcHM6W3ZzLFdhLGlvXX0se3Byb3ZpZGU6YVosdXNlQ2xhc3M6eENlLG11bHRpOiEwLGRlcHM6W3ZzXX0sY1osdm9lLGdvZSx7cHJvdmlkZTp4OCx1c2VFeGlzdGluZzpjWn0se3Byb3ZpZGU6b29lLHVzZUNsYXNzOmZDZSxk''@;'; put 'put ''ZXBzOltdfSxbXV07bGV0IFRvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpHdix1c2VWYWx1ZTphLmFwcElkfV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; 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 ''cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBlNShjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fG5tKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uICRiKGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIG5tKGEpP2w6ZTUoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIG5tKGEpJiZubShkKT9sOm5tKGEpP2U1KGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTpubShkKT9lNShmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19ZnVuY3Rpb24gTG9lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9Yyx2PTAsTT0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgRDt2PGwubGVuZ3RoJiYoIW5tKGxbdl0pfHxoPj1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoKT9EPWxbdl06KEQ9YXJndW1lbnRzW2hdLGgrPTEpLGRbdl09RCxubShEKT9NPSEwOmYtPTEsdis9MX1yZXR1cm4hTSYmZjw9MD9hLmFwcGx5KHRoaXMsZCk6Um9lKE1hdGgubWF4KDAsZiksTG9lKGMsZCxhKSl9fWNvbnN0IE9vZT0kYihmdW5jdGlvbihsLGEpe3JldHVy''@;'; put 'put ''biAxPT09bD9lNShhKTpSb2UobCxMb2UobCxbXSxhKSl9KSxQb2U9JGIoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBNUihjLGwp''@;'; put 'put ''e3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgRm9lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgSG9lPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1Gb2UuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwp''@;'; put 'put ''e3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09Rm9lLmNhbGwobCl9OmZ1bmN0aW9uKGwpe3JldHVybiBNUigiY2FsbGVlIixsKX19KCksTkNlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gTm9lKGMpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfXZhciBqQ2U9ZTUoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBs''@;'; 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 ''PWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgibGVuZ3RoIil9KCksWUNlPWZ1bmN0aW9uKGwsYSl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDspe2lmKGxbZF09PT1hKXJldHVybiEwO2QrPTF9cmV0dXJuITF9O2NvbnN0IFVvZT1lNSgiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgT2JqZWN0LmtleXN8fHpvZT9mdW5jdGlvbihsKXtpZihPYmplY3QobCkhPT1sKXJldHVybltdO3ZhciBhLGQsaD1bXSxmPXpvZSYmSG9lKGwpO2ZvcihhIGluIGwpTVIoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoV0NlKWZvcihkPWpvZS5s''@;'; put 'put ''ZW5ndGgtMTtkPj0wOylNUihhPWpvZVtkXSxsKSYmIVlDZShoLGEpJiYoaFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24obCl7cmV0dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSxab2U9ZTUoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxs''@;'; 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 ''Zl07aWYoIU1SKFosbCl8fCFwWihsW1pdLGNbWl0sTSxEKSlyZXR1cm4hMTtmLT0xfXJldHVybiEwfWNvbnN0IHFDZT0kYihmdW5jdGlvbihsLGEpe3JldHVybiBwWihsLGEsW10sW10pfSksWW9lPWU1KGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZxQ2UobCx6Q2UobCkpfSk7ZnVuY3Rp''@;'; put 'put ''b24gSU0oYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gUk0oYyl7cmV0dXJuIElNKGMpfHxZb2UoYyl9ZnVuY3Rpb24gZ1ooYyl7cmV0dXJuIFBvZShTdHJpbmcsYyl9ZnVuY3Rpb24gS29lKGMsbCl7cmV0dXJuIGMhPT1sfWZ1bmN0aW9uIFFvZShjPXdpbmRvdyl7cmV0dXJuIUlNKGMpfWNv''@;'; put 'put ''bnN0IG9TZT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihsKXtyZXR1cm4oMHxsKT09PWx9LGxTZT0kYihmdW5jdGlvbihsLGEpe3ZhciBkPWw8MD9hLmxlbmd0aCtsOmw7cmV0dXJuIE5vZShhKT9hLmNoYXJBdChkKTphW2RdfSksdVNlPSRiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFw''@;'; put 'put ''KGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPW9TZSh2PWRbZl0pP2xTZSh2LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSksaFNlPSRiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIHVTZShbbF0sYSlbMF19KSxwU2U9T29lKDIsKGMs''@;'; put 'put ''bCk9PnZvaWQgMCE9PWhTZShjLGwpKSxlc2U9cFNlKHsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtsZXQgRVIsdHNlLG1aLHZaO2Z1bmN0aW9uIG5zZShjPSEwKXtpZighY3x8IUVSKXtjb25zdCBsPWRvY3VtZW50JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmct''@;'; put 'put ''dmVyc2lvbl0iKTtFUj1sPyIiK2wuZ2V0QXR0cmlidXRlKCJuZy12ZXJzaW9uIik6dm9pZCAwfXJldHVybiBFUn1mdW5jdGlvbiBtU2UoYz0hMCl7cmV0dXJuIGMmJkVSfHwodHNlPXdpbmRvdz8uYW5ndWxhcj8udmVyc2lvbj8uZnVsbCksdHNlfWZ1bmN0aW9uIHJzZShjPSEwKXtyZXR1cm4g''@;'; 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 ''KSk7Y29uc3QgVFI9d2luZG93LEVaPVRSLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1UUi5TaGFkeUNTU3x8VFIuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBl''@;'; put 'put ''LFRaPVN5bWJvbCgpLF9zZT1uZXcgV2Vha01hcDtjbGFzcyB3c2V7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLGQhPT1UWil0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVh''@;'; put 'put ''ZC4iKTt0aGlzLmNzc1RleHQ9bCx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBsPXRoaXMubztjb25zdCBhPXRoaXMudDtpZihFWiYmdm9pZCAwPT09bCl7Y29uc3QgZD12b2lkIDAhPT1hJiYxPT09YS5sZW5ndGg7ZCYmKGw9X3NlLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89''@;'; put 'put ''bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZfc2Uuc2V0KGEsbCkpfXJldHVybiBsfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19Y29uc3QgQ3NlPShjLC4uLmwpPT57Y29uc3QgYT0xPT09Yy5sZW5ndGg/Y1swXTpsLnJlZHVjZSgoZCxo''@;'; put 'put ''LGYpPT5kKyh2PT57aWYoITA9PT12Ll8kY3NzUmVzdWx0JClyZXR1cm4gdi5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdjt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrdisi''@;'; put 'put ''LiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIil9KShoKStjW2YrMV0sY1swXSk7cmV0dXJuIG5ldyB3c2UoYSxjLFRaKX0sU3NlPUVaP2M9PmM6Yz0+YyBpbnN0YW5jZW9mIENTU1N0eWxl''@;'; put 'put ''U2hlZXQ/KGw9PntsZXQgYT0iIjtmb3IoY29uc3QgZCBvZiBsLmNzc1J1bGVzKWErPWQuY3NzVGV4dDtyZXR1cm4oYz0+bmV3IHdzZSgic3RyaW5nIj09dHlwZW9mIGM/YzpjKyIiLHZvaWQgMCxUWikpKGEpfSkoYyk6Yzt2YXIgQVo7Y29uc3QgQVI9d2luZG93LE1zZT1BUi50cnVzdGVkVHlw''@;'; put 'put ''ZXMsZU1lPU1zZT9Nc2UuZW1wdHlTY3JpcHQ6IiIseHNlPUFSLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxrWj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9lTWU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9j''@;'; put 'put ''OkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9tQXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRy''@;'; put 'put ''eXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LEVzZT0oYyxsKT0+bCE9PWMmJihsPT1sfHxjPT1jKSxEWj17YXR0cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjprWixyZWZsZWN0OiExLGhhc0NoYW5nZWQ6RXNlfSxJWj0iZmluYWxpemVkIjtjbGFzcyBL''@;'; 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+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxoPVRSLmxpdE5vbmNlO3ZvaWQgMCE9PWgmJmQuc2V0QXR0cmlidXRlKCJub25jZSIsaCksZC50ZXh0Q29udGVudD1hLmNzc1RleHQsYy5hcHBlbmRDaGlsZChkKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9y''@;'; 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 ''RUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgUlo7S2JbSVpdPSEwLEtiLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAsS2IuZWxlbWVudFN0eWxlcz1bXSxLYi5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LHhzZT8uKHtSZWFj''@;'; put 'put ''dGl2ZUVsZW1lbnQ6S2J9KSwobnVsbCE9PShBWj1BUi5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PUFaP0FaOkFSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IGtSPXdpbmRvdyxxYj1rUi50cnVzdGVkVHlwZXMsVHNlPXFiP3FiLmNy''@;'; put 'put ''ZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsRFI9IiRsaXQkIix0NT1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLExaPSI/Iit0NSx0TWU9YDwke0xafT5gLFk4PWRvY3VtZW50LE9NPSgpPT5ZOC5jcmVhdGVDb21tZW50KCIiKSxQ''@;'; put 'put ''TT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxBc2U9QXJyYXkuaXNBcnJheSxPWj0iWyBcdFxuXGZccl0iLEZNPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLERzZT0vLS0+L2csSXNlPS8+''@;'; put 'put ''L2csRzg9UmVnRXhwKGA+fCR7T1p9KD86KFteXFxzIic+PS9dKykoJHtPWn0qPSR7T1p9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksUnNlPS8nL2csTHNlPS8iL2csT3NlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxQc2U9Yz0+KGwsLi4u''@;'; put 'put ''YSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLG5NZT1Qc2UoMSksck1lPVBzZSgyKSxYYj1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxTMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLEZzZT1uZXcgV2Vha01hcCwkOD1ZOC5jcmVhdGVUcmVlV2Fsa2VyKFk4LDEy''@;'; put 'put ''OSxudWxsLCExKTtmdW5jdGlvbiBIc2UoYyxsKXtpZighQXJyYXkuaXNBcnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09VHNlP1RzZS5jcmVhdGVIVE1MKGwpOmx9Y2xh''@;'; put 'put ''c3MgSE17Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29uc3QgTT1sLmxlbmd0aC0xLEQ9dGhpcy5wYXJ0cyxbWixyZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8i''@;'; put 'put ''PHN2Zz4iOiIiLHY9Rk07Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3QgRD1jW01dO2xldCBaLHJlLGNlPS0xLGJlPTA7Zm9yKDtiZTxELmxlbmd0aCYmKHYubGFzdEluZGV4PWJlLHJlPXYuZXhlYyhEKSxudWxsIT09cmUpOyliZT12Lmxhc3RJbmRleCx2PT09Rk0/IiEtLSI9PT1yZVsxXT92''@;'; put 'put ''PURzZTp2b2lkIDAhPT1yZVsxXT92PUlzZTp2b2lkIDAhPT1yZVsyXT8oT3NlLnRlc3QocmVbMl0pJiYoaD1SZWdFeHAoIjwvIityZVsyXSwiZyIpKSx2PUc4KTp2b2lkIDAhPT1yZVszXSYmKHY9RzgpOnY9PT1HOD8iPiI9PT1yZVswXT8odj1oPz9GTSxjZT0tMSk6dm9pZCAwPT09cmVbMV0/''@;'; put 'put ''Y2U9LTI6KGNlPXYubGFzdEluZGV4LXJlWzJdLmxlbmd0aCxaPXJlWzFdLHY9dm9pZCAwPT09cmVbM10/Rzg6JyInPT09cmVbM10/THNlOlJzZSk6dj09PUxzZXx8dj09PVJzZT92PUc4OnY9PT1Ec2V8fHY9PT1Jc2U/dj1GTToodj1HOCxoPXZvaWQgMCk7Y29uc3QgRWU9dj09PUc4JiZjW00r''@;'; put 'put ''MV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PUZNP0QrdE1lOmNlPj0wPyhkLnB1c2goWiksRC5zbGljZSgwLGNlKStEUitELnNsaWNlKGNlKSt0NStFZSk6RCt0NSsoLTI9PT1jZT8oZC5wdXNoKHZvaWQgMCksTSk6RWUpfXJldHVybltIc2UoYyxmKyhjW2FdfHwiPD8+IikrKDI9''@;'; put 'put ''PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9SE0uY3JlYXRlRWxlbWVudChaLGQpLCQ4LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09YSl7Y29uc3QgY2U9dGhpcy5lbC5jb250ZW50LGJlPWNlLmZpcnN0Q2hpbGQ7YmUucmVtb3ZlKCksY2UuYXBwZW5kKC4u''@;'; put 'put ''LmJlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPSQ4Lm5leHROb2RlKCkpJiZELmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lmKGguaGFzQXR0cmlidXRlcygpKXtjb25zdCBjZT1bXTtmb3IoY29uc3QgYmUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlmKGJlLmVuZHNXaXRo''@;'; put 'put ''KERSKXx8YmUuc3RhcnRzV2l0aCh0NSkpe2NvbnN0IEVlPXJlW3YrK107aWYoY2UucHVzaChiZSksdm9pZCAwIT09RWUpe2NvbnN0IEJlPWguZ2V0QXR0cmlidXRlKEVlLnRvTG93ZXJDYXNlKCkrRFIpLnNwbGl0KHQ1KSxxZT0vKFsuP0BdKT8oLiopLy5leGVjKEVlKTtELnB1c2goe3R5cGU6''@;'; put 'put ''MSxpbmRleDpmLG5hbWU6cWVbMl0sc3RyaW5nczpCZSxjdG9yOiIuIj09PXFlWzFdP0JzZToiPyI9PT1xZVsxXT9qc2U6IkAiPT09cWVbMV0/enNlOk5NfSl9ZWxzZSBELnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IGJlIG9mIGNlKWgucmVtb3ZlQXR0cmlidXRlKGJlKX1pZihP''@;'; put 'put ''c2UudGVzdChoLnRhZ05hbWUpKXtjb25zdCBjZT1oLnRleHRDb250ZW50LnNwbGl0KHQ1KSxiZT1jZS5sZW5ndGgtMTtpZihiZT4wKXtoLnRleHRDb250ZW50PXFiP3FiLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgRWU9MDtFZTxiZTtFZSsrKWguYXBwZW5kKGNlW0VlXSxPTSgpKSwkOC5uZXh0''@;'; put 'put ''Tm9kZSgpLEQucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKGNlW2JlXSxPTSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09TFopRC5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IGNlPS0xO2Zvcig7LTEhPT0oY2U9aC5kYXRhLmluZGV4T2Yo''@;'; put 'put ''dDUsY2UrMSkpOylELnB1c2goe3R5cGU6NyxpbmRleDpmfSksY2UrPXQ1Lmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPVk4LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gSzgoYyxsLGE9Yyxk''@;'; put 'put ''KXt2YXIgaCxmLHYsTTtpZihsPT09WGIpcmV0dXJuIGw7bGV0IEQ9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgWj1QTShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEQ/LmNvbnN0cnVjdG9yIT09WiYm''@;'; put 'put ''KG51bGw9PT0oZj1EPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEQsITEpLHZvaWQgMD09PVo/RD12b2lkIDA6KEQ9bmV3IFooYyksRC5fJEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtkXT1EOmEuXyRDbD1E''@;'; put 'put ''KSx2b2lkIDAhPT1EJiYobD1LOChjLEQuXyRBUyhjLGwudmFsdWVzKSxELGQpKSxsfWNsYXNzIFZzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5w''@;'; put 'put ''YXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOlk4KS5pbXBvcnROb2RlKGQsITApOyQ4LmN1''@;'; put 'put ''cnJlbnROb2RlPWY7bGV0IHY9JDgubmV4dE5vZGUoKSxNPTAsRD0wLFo9aFswXTtmb3IoO3ZvaWQgMCE9PVo7KXtpZihNPT09Wi5pbmRleCl7bGV0IHJlOzI9PT1aLnR5cGU/cmU9bmV3IEpiKHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1aLnR5cGU/cmU9bmV3IFouY3Rvcih2LFoubmFt''@;'; put 'put ''ZSxaLnN0cmluZ3MsdGhpcyxsKTo2PT09Wi50eXBlJiYocmU9bmV3IFVzZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKHJlKSxaPWhbKytEXX1NIT09Wj8uaW5kZXgmJih2PSQ4Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gJDguY3VycmVudE5vZGU9WTgsZn12KGwpe2xldCBhPTA7Zm9yKGNv''@;'; put 'put ''bnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1kLnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxlbmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgSmJ7Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBlPTIsdGhpcy5fJEFI''@;'; put 'put ''PVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENwPW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGE9bnVsbD09''@;'; put 'put ''PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkmJnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUoKXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1sPy5ub2RlVHlwZSYm''@;'; put 'put ''KGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQn1fJEFJKGwsYT10aGlzKXtsPUs4KHRoaXMsbCxhKSxQTShsKT9sPT09UzB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFIIT09UzAmJnRoaXMu''@;'; put 'put ''XyRBUigpLHRoaXMuXyRBSD1TMCk6bCE9PXRoaXMuXyRBSCYmbCE9PVhiJiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMuZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+QXNlKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRv''@;'; put 'put ''cl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVMwJiZQTSh0''@;'; put 'put ''aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKFk4LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09''@;'; put 'put ''PWguZWwmJihoLmVsPUhNLmNyZWF0ZUVsZW1lbnQoSHNlKGguaCxoLmhbMF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhpcy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyBWc2UoZix0aGlzKSxN''@;'; put 'put ''PXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5fJEFIPXZ9fV8kQUMobCl7bGV0IGE9RnNlLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZGc2Uuc2V0KGwuc3RyaW5ncyxhPW5ldyBITShsKSksYX1UKGwpe0FzZSh0aGlzLl8kQUgpfHwodGhpcy5fJEFI''@;'; put 'put ''PVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxoPTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNoKGQ9bmV3IEpiKHRoaXMuayhPTSgpKSx0aGlzLmsoT00oKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYpLGgrKztoPGEubGVu''@;'; put 'put ''Z3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxhLmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5nLGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYmbCE9PXRoaXMuXyRB''@;'; put 'put ''Qjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRBTSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNzIE5Ne2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPVMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1lPWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRBSD1BcnJheShkLmxl''@;'; put 'put ''bmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0aGlzLl8kQUg9UzB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0IGY9dGhpcy5zdHJp''@;'; put 'put ''bmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD1LOCh0aGlzLGwsYSwwKSx2PSFQTShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PVhiLHYmJih0aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEQsWjtmb3IobD1mWzBdLEQ9MDtEPGYubGVuZ3RoLTE7RCsrKVo9SzgodGhpcyxNW2QrRF0s''@;'; put 'put ''YSxEKSxaPT09WGImJihaPXRoaXMuXyRBSFtEXSksdnx8KHY9IVBNKFopfHxaIT09dGhpcy5fJEFIW0RdKSxaPT09UzA/bD1TMDpsIT09UzAmJihsKz0oWj8/IiIpK2ZbRCsxXSksdGhpcy5fJEFIW0RdPVp9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1TMD90aGlzLmVsZW1lbnQucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBCc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09''@;'; put 'put ''UzA/dm9pZCAwOmx9fWNvbnN0IGlNZT1xYj9xYi5lbXB0eVNjcmlwdDoiIjtjbGFzcyBqc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09UzA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsaU1l''@;'; put 'put ''KTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIHpzZSBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9SzgodGhpcyxsLGEs''@;'; put 'put ''MCkpJiZ2b2lkIDAhPT1kP2Q6UzApPT09WGIpcmV0dXJuO2NvbnN0IGg9dGhpcy5fJEFILGY9bD09PVMwJiZoIT09UzB8fGwuY2FwdHVyZSE9PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09UzAmJihoPT09UzB8fGYpO2YmJnRoaXMuZWxl''@;'; put 'put ''bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgpLHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuXyRBSD90aGlzLl8k''@;'; put 'put ''QUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBVc2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVu''@;'; put 'put ''dD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtLOCh0aGlzLGwpfX1jb25zdCBac2U9a1IubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIgUFosRlo7WnNlPy4o''@;'; put 'put ''SE0sSmIpLChudWxsIT09KFJaPWtSLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PVJaP1JaOmtSLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBWTSBleHRlbmRzIEtie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9''@;'; put 'put ''e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVy''@;'; put 'put ''QmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxsLGEpPT57dmFyIGQs''@;'; put 'put ''aDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPXY9bmV3IEpiKGwu''@;'; put 'put ''aW5zZXJ0QmVmb3JlKE9NKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVybiB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8k''@;'; put 'put ''RG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIFhi''@;'; 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+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiBuNShjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNjaGVkdWxlKGZ1bmN0''@;'; put 'put ''aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1bmN0aW9uIG9sZShjLGw9MCl7cmV0dXJuIFZpKChhLGQpPT57YS5zdWJzY3JpYmUoTmkoZCxoPT5uNShkLGMsKCk9PmQubmV4dCho''@;'; put 'put ''KSxsKSwoKT0+bjUoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+bjUoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiBzbGUoYyxsPTApe3JldHVybiBWaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0aW9uIGxsZShjLGwp''@;'; put 'put ''e2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IFh0KGE9PntuNShhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7bjUoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTph''@;'; put 'put ''Lm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFd1KGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24gcU1lKGMsbCl7aWYobnVsbCE9Yyl7aWYoSnNlKGMpKXJldHVybiBmdW5jdGlvbiBXTWUoYyxsKXtyZXR1cm4gbDEoYykucGlwZShzbGUobCksb2xlKGwpKX0oYyxsKTtpZihCWihj''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gR01lKGMsbCl7cmV0dXJuIG5ldyBYdChhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZihY''@;'; put 'put ''c2UoYykpcmV0dXJuIGZ1bmN0aW9uIFlNZShjLGwpe3JldHVybiBsMShjKS5waXBlKHNsZShsKSxvbGUobCkpfShjLGwpO2lmKFFzZShjKSlyZXR1cm4gbGxlKGMsbCk7aWYobmxlKGMpKXJldHVybiBmdW5jdGlvbiAkTWUoYyxsKXtyZXR1cm4gbmV3IFh0KGE9PntsZXQgZDtyZXR1cm4gbjUo''@;'; put 'put ''YSxsLCgpPT57ZD1jW3RsZV0oKSxuNShhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PiRlKGQ/LnJldHVybikmJmQucmV0dXJu''@;'; put 'put ''KCl9KX0oYyxsKTtpZihpbGUoYykpcmV0dXJuIGZ1bmN0aW9uIEtNZShjLGwpe3JldHVybiBsbGUocmxlKGMpLGwpfShjLGwpfXRocm93IGVsZShjKX0oYyxsKTpsMShjKX1mdW5jdGlvbiBjbGUoYyl7cmV0dXJuIGMmJiRlKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIGpaKGMpe3JldHVybiBjW2Mu''@;'; put 'put ''bGVuZ3RoLTFdfWZ1bmN0aW9uIHVsZShjKXtyZXR1cm4gJGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGpNKGMpe3JldHVybiBjbGUoalooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGZvKC4uLmMpe3JldHVybiBXdShjLGpNKGMpKX1jb25zdHtpc0FycmF5OkpNZX09QXJy''@;'; put 'put ''YXkse2dldFByb3RvdHlwZU9mOlFNZSxwcm90b3R5cGU6ZXhlLGtleXM6dHhlfT1PYmplY3Q7ZnVuY3Rpb24gZGxlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29uc3QgbD1jWzBdO2lmKEpNZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gbnhlKGMpe3JldHVybiBjJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGMmJlFNZShjKT09PWV4ZX0obCkpe2NvbnN0IGE9dHhlKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJldHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5OnJ4ZX09QXJyYXk7ZnVuY3Rpb24gelooYyl7cmV0dXJuIExyKGw9''@;'; put 'put ''PmZ1bmN0aW9uIGl4ZShjLGwpe3JldHVybiByeGUobCk/YyguLi5sKTpjKGwpfShjLGwpKX1mdW5jdGlvbiBobGUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gcTgoLi4uYyl7Y29uc3QgbD1qTShjKSxhPXVsZShjKSx7YXJnczpkLGtl''@;'; put 'put ''eXM6aH09ZGxlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gV3UoW10sbCk7Y29uc3QgZj1uZXcgWHQoZnVuY3Rpb24gYXhlKGMsbCxhPWNuKXtyZXR1cm4gZD0+e2ZsZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9yKGxldCBEPTA7RDxo''@;'; put 'put ''O0QrKylmbGUobCwoKT0+e2NvbnN0IFo9V3UoY1tEXSxsKTtsZXQgcmU9ITE7Wi5zdWJzY3JpYmUoTmkoZCxjZT0+e2ZbRF09Y2UscmV8fChyZT0hMCxNLS0pLE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShkLGwsaD92PT5obGUo''@;'; put 'put ''aCx2KTpjbikpO3JldHVybiBhP2YucGlwZSh6WihhKSk6Zn1mdW5jdGlvbiBmbGUoYyxsLGEpe2M/bjUoYSxjLGwpOmwoKX1jb25zdCBJUj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNl''@;'; put 'put ''In0pO2Z1bmN0aW9uIE4wKGMsbCxhPTEvMCl7cmV0dXJuICRlKGwpP04wKChkLGgpPT5McigoZix2KT0+bChkLGYsaCx2KSkobDEoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksVmkoKGQsaCk9PmZ1bmN0aW9uIG94ZShjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9W107''@;'; put 'put ''bGV0IFo9MCxyZT0wLGNlPSExO2NvbnN0IGJlPSgpPT57Y2UmJiFELmxlbmd0aCYmIVomJmwuY29tcGxldGUoKX0sRWU9cWU9Plo8ZD9CZShxZSk6RC5wdXNoKHFlKSxCZT1xZT0+e2YmJmwubmV4dChxZSksWisrO2xldCBydD0hMTtsMShhKHFlLHJlKyspKS5zdWJzY3JpYmUoTmkobCxwdD0+''@;'; put 'put ''e2g/LihwdCksZj9FZShwdCk6bC5uZXh0KHB0KX0sKCk9PntydD0hMH0sdm9pZCAwLCgpPT57aWYocnQpdHJ5e2ZvcihaLS07RC5sZW5ndGgmJlo8ZDspe2NvbnN0IHB0PUQuc2hpZnQoKTt2P241KGwsdiwoKT0+QmUocHQpKTpCZShwdCl9YmUoKX1jYXRjaChwdCl7bC5lcnJvcihwdCl9fSkp''@;'; put 'put ''fTtyZXR1cm4gYy5zdWJzY3JpYmUoTmkobCxFZSwoKT0+e2NlPSEwLGJlKCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gUWIoYz0xLzApe3JldHVybiBOMChjbixjKX1mdW5jdGlvbiBVWiguLi5jKXtyZXR1cm4gZnVuY3Rpb24gc3hlKCl7cmV0dXJuIFFiKDEpfSgpKFd1''@;'; put 'put ''KGMsak0oYykpKX1mdW5jdGlvbiBwbGUoYyl7cmV0dXJuIG5ldyBYdChsPT57bDEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiBSUihjLGwpe2NvbnN0IGE9JGUoYyk/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 ''cGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIGN4ZSgpe3JldHVybiBuZXcgSVJ9ZnVuY3Rpb24gYW0oYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjPyRsKChoLGYpPT5jKGgsZixkKSk6Y24sWWYoMSksYT9MUihsKTpnbGUoKCk9Pm5l''@;'; put 'put ''dyBJUikpfWZ1bmN0aW9uIGV5KGMsbCl7cmV0dXJuICRlKGwpP04wKGMsbCwxKTpOMChjLDEpfWZ1bmN0aW9uIFl1KGMsbCxhKXtjb25zdCBkPSRlKGMpfHxsfHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1ZpKChoLGYpPT57dmFyIHY7bnVsbD09PSh2PWQuc3Vi''@;'; put 'put ''c2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2guc3Vic2NyaWJlKE5pKGYsRD0+e3ZhciBaO251bGw9PT0oWj1kLm5leHQpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCxEKSxmLm5leHQoRCl9LCgpPT57dmFyIEQ7TT0hMSxudWxsPT09KEQ9ZC5jb21wbGV0ZSl8fHZvaWQg''@;'; put 'put ''MD09PUR8fEQuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEQ9Pnt2YXIgWjtNPSExLG51bGw9PT0oWj1kLmVycm9yKXx8dm9pZCAwPT09Wnx8Wi5jYWxsKGQsRCksZi5lcnJvcihEKX0sKCk9Pnt2YXIgRCxaO00mJihudWxsPT09KEQ9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PUR8fEQuY2FsbChk''@;'; put 'put ''KSksbnVsbD09PShaPWQuZmluYWxpemUpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCl9KSl9KTpjbn1mdW5jdGlvbiB0eShjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1sMShjKHYsdHkoYykobCkpKSxk''@;'; put 'put ''PyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFlaKGMpe3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKE5pKGEs''@;'; put 'put ''aD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiB6TShjKXtyZXR1cm4gVmkoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxs''@;'; put 'put ''eXthLmFkZChjKX19KX1mdW5jdGlvbiBWMChjKXtyZXR1cm4gVmkoKGwsYSk9PntsMShjKS5zdWJzY3JpYmUoTmkoYSwoKT0+YS5jb21wbGV0ZSgpLGhuKSksIWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWNvbnN0IEtvPSJwcmltYXJ5IixVTT1TeW1ib2woIlJvdXRlVGl0bGUiKTtjbGFz''@;'; 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/V3UoUHJvbWlzZS5yZXNvbHZlKGMpKTpmbyhjKX1jb25zdCB2eGU9e2V4YWN0OmZ1bmN0aW9uIF9sZShjLGwsYSl7aWYoIVg4KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFPUihjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVt''@;'; put 'put ''YmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhX2xlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OndsZX0sYmxlPXtleGFj''@;'; put 'put ''dDpmdW5jdGlvbiBieGUoYyxsKXtyZXR1cm4gaHAoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIHl4ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+bWxlKGNbYV0sbFthXSkpfSxpZ25vcmVkOigp''@;'; put 'put ''PT4hMH07ZnVuY3Rpb24geWxlKGMsbCxhKXtyZXR1cm4gdnhlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZibGVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwu''@;'; put 'put ''ZnJhZ21lbnQpfWZ1bmN0aW9uIHdsZShjLGwsYSl7cmV0dXJuIENsZShjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBDbGUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFYOChoLGEp''@;'; put 'put ''fHxsLmhhc0NoaWxkcmVuKCl8fCFPUihoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFYOChjLnNlZ21lbnRzLGEpfHwhT1IoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCF3bGUo''@;'; put 'put ''Yy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3JldHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShYOChjLnNlZ21lbnRzLGgpJiZPUihjLnNlZ21lbnRzLGgsZCkmJmMu''@;'; put 'put ''Y2hpbGRyZW5bS29dKSYmQ2xlKGMuY2hpbGRyZW5bS29dLGwsZixkKX19ZnVuY3Rpb24gT1IoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5ibGVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIHJ5e2NvbnN0cnVjdG9yKGw9bmV3IEtsKFtdLHt9KSxhPXt9LGQ9''@;'; put 'put ''bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89bnkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiBDeGUu''@;'; put 'put ''c2VyaWFsaXplKHRoaXMpfX1jbGFzcyBLbHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1i''@;'; put 'put ''ZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIFBSKHRoaXMpfX1jbGFzcyBaTXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdl''@;'; put 'put ''dCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89bnkodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4geGxlKHRoaXMpfX1mdW5jdGlvbiBYOChjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5''@;'; put 'put ''KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBpeT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyAkWixwcm92aWRlZElu''@;'; put 'put ''OiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgJFp7cGFyc2UobCl7Y29uc3QgYT1uZXcgTHhlKGwpO3JldHVybiBuZXcgcnkoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25zdCBhPWAvJHtXTShs''@;'; put 'put ''LnJvb3QsITApfWAsZD1mdW5jdGlvbiB4eGUoYyl7Y29uc3QgbD1PYmplY3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9kLm1hcChoPT5gJHtGUihhKX09JHtGUihoKX1gKS5qb2luKCImIik6YCR7RlIoYSl9PSR7RlIoZCl9YCkuZmlsdGVyKGE9PmEpO3JldHVy''@;'; put 'put ''biBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBhcmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIFN4ZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7aH1gfX1jb25zdCBD''@;'; put 'put ''eGU9bmV3ICRaO2Z1bmN0aW9uIFBSKGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT54bGUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBXTShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIFBSKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltLb10/V00oYy5jaGlsZHJlbltLb10s''@;'; put 'put ''ITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1LbyYmZC5wdXNoKGAke2h9OiR7V00oZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gd3hlKGMsbCl7''@;'; put 'put ''bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT1LbyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09S28mJihhPWEuY29uY2F0KGwoaCxkKSkp''@;'; put 'put ''fSksYX0oYywoZCxoKT0+aD09PUtvP1tXTShjLmNoaWxkcmVuW0tvXSwhMSldOltgJHtofToke1dNKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltLb10/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 ''aHJvdyBuZXcgUW4oNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgWk0oSFIobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7''@;'; 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 ''Lm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0NoaWxkcmVuP0dNKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6UmxlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIFhaKGgsdi5zZWdtZW50R3JvdXAsTSxhLGQpfWZ1bmN0''@;'; put 'put ''aW9uIE5SKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rpb24gWU0oYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24gWFooYyxsLGEsZCxoKXtsZXQgdixmPXt9''@;'; put 'put ''O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtELFpdKT0+e2ZbRF09QXJyYXkuaXNBcnJheShaKT9aLm1hcChyZT0+YCR7cmV9YCk6YCR7Wn1gfSksdj1jPT09bD9hOkRsZShjLGwsYSk7Y29uc3QgTT1FbGUoVGxlKHYpKTtyZXR1cm4gbmV3IHJ5KE0sZixoKX1mdW5jdGlvbiBEbGUo''@;'; put 'put ''YyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09PWw/YTpEbGUoZixsLGEpfSksbmV3IEtsKGMuc2VnbWVudHMsZCl9Y2xhc3MgSWxle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9''@;'; put 'put ''bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZOUihkWzBdKSl0aHJvdyBuZXcgUW4oNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoWU0pO2lmKGgmJmghPT12bGUoZCkpdGhyb3cgbmV3IFFuKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBWUntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zZWdtZW50R3JvdXA9bCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9ZH19ZnVuY3Rpb24gUmxlKGMs''@;'; put 'put ''bCxhKXtpZihjPz89bmV3IEtsKFtdLHt9KSwwPT09Yy5zZWdtZW50cy5sZW5ndGgmJmMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gR00oYyxsLGEpO2NvbnN0IGQ9ZnVuY3Rpb24gQnhlKGMsbCxhKXtsZXQgZD0wLGg9bDtjb25zdCBmPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6''@;'; put 'put ''MH07Zm9yKDtoPGMuc2VnbWVudHMubGVuZ3RoOyl7aWYoZD49YS5sZW5ndGgpcmV0dXJuIGY7Y29uc3Qgdj1jLnNlZ21lbnRzW2hdLE09YVtkXTtpZihZTShNKSlicmVhaztjb25zdCBEPWAke019YCxaPWQ8YS5sZW5ndGgtMT9hW2QrMV06bnVsbDtpZihoPjAmJnZvaWQgMD09PUQpYnJlYWs7''@;'; put 'put ''aWYoRCYmWiYmIm9iamVjdCI9PXR5cGVvZiBaJiZ2b2lkIDA9PT1aLm91dGxldHMpe2lmKCFPbGUoRCxaLHYpKXJldHVybiBmO2QrPTJ9ZWxzZXtpZighT2xlKEQse30sdikpcmV0dXJuIGY7ZCsrfWgrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmgsY29tbWFuZEluZGV4OmR9fShjLGws''@;'; put 'put ''YSksaD1hLnNsaWNlKGQuY29tbWFuZEluZGV4KTtpZihkLm1hdGNoJiZkLnBhdGhJbmRleDxjLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1uZXcgS2woYy5zZWdtZW50cy5zbGljZSgwLGQucGF0aEluZGV4KSx7fSk7cmV0dXJuIGYuY2hpbGRyZW5bS29dPW5ldyBLbChjLnNlZ21lbnRzLnNs''@;'; put 'put ''aWNlKGQucGF0aEluZGV4KSxjLmNoaWxkcmVuKSxHTShmLDAsaCl9cmV0dXJuIGQubWF0Y2gmJjA9PT1oLmxlbmd0aD9uZXcgS2woYy5zZWdtZW50cyx7fSk6ZC5tYXRjaCYmIWMuaGFzQ2hpbGRyZW4oKT9KWihjLGwsYSk6ZC5tYXRjaD9HTShjLDAsaCk6SlooYyxsLGEpfWZ1bmN0aW9uIEdN''@;'; put 'put ''KGMsbCxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLHt9KTt7Y29uc3QgZD1mdW5jdGlvbiBWeGUoYyl7cmV0dXJuIFlNKGNbMF0pP2NbMF0ub3V0bGV0czp7W0tvXTpjfX0oYSksaD17fTtpZihPYmplY3Qua2V5cyhkKS5zb21lKGY9PmYhPT1LbykmJmMuY2hp''@;'; put 'put ''bGRyZW5bS29dJiYxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiYwPT09Yy5jaGlsZHJlbltLb10uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPUdNKGMuY2hpbGRyZW5bS29dLGwsYSk7cmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLGYuY2hpbGRyZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhkKS5m''@;'; put 'put ''b3JFYWNoKChbZix2XSk9Pnsic3RyaW5nIj09dHlwZW9mIHYmJih2PVt2XSksbnVsbCE9PXYmJihoW2ZdPVJsZShjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09dil9KSxuZXcgS2wo''@;'; put 'put ''Yy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gSlooYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKFlNKGYpKXtjb25zdCBEPWp4ZShmLm91dGxldHMpO3JldHVybiBuZXcgS2woZCxEKX1pZigwPT09aCYm''@;'; put 'put ''TlIoYVswXSkpe2QucHVzaChuZXcgWk0oYy5zZWdtZW50c1tsXS5wYXRoLExsZShhWzBdKSkpLGgrKztjb250aW51ZX1jb25zdCB2PVlNKGYpP2Yub3V0bGV0c1tLb106YCR7Zn1gLE09aDxhLmxlbmd0aC0xP2FbaCsxXTpudWxsO3YmJk0mJk5SKE0pPyhkLnB1c2gobmV3IFpNKHYsTGxlKE0p''@;'; put 'put ''KSksaCs9Mik6KGQucHVzaChuZXcgWk0odix7fSkpLGgrKyl9cmV0dXJuIG5ldyBLbChkLHt9KX1mdW5jdGlvbiBqeGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT57InN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLG51bGwhPT1kJiYo''@;'; put 'put ''bFthXT1KWihuZXcgS2woW10se30pLDAsZCkpfSksbH1mdW5jdGlvbiBMbGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBPbGUoYyxsLGEpe3JldHVybiBjPT1hLnBhdGgmJmhwKGwsYS5wYXJh''@;'; put 'put ''bWV0ZXJzKX1jb25zdCAkTT0iaW1wZXJhdGl2ZSI7dmFyIFJzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmF2aWdhdGlvblN0YXJ0PTBdPSJOYXZpZ2F0aW9uU3RhcnQiLGNbYy5OYXZpZ2F0aW9uRW5kPTFdPSJOYXZpZ2F0aW9uRW5kIixjW2MuTmF2aWdhdGlvbkNhbmNlbD0yXT0iTmF2aWdh''@;'; 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 ''b3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBLTSx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgS009KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxkT3V0bGV0Q3JlYXRl''@;'; 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 ''fSwiIix7fSxLbyxjLG51bGwse30pO3JldHVybiBuZXcgQmxlKCIiLG5ldyBHZihmLFtdKSl9KGMpLGE9bmV3IGVpKFtuZXcgWk0oIiIse30pXSksZD1uZXcgZWkoe30pLGg9bmV3IGVpKHt9KSxmPW5ldyBlaSh7fSksdj1uZXcgZWkoIiIpLE09bmV3IEN1KGEsZCxmLHYsaCxLbyxjLGwucm9v''@;'; put 'put ''dCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyBObGUobmV3IEdmKE0sW10pLGwpfWNsYXNzIEN1e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9ZCx0aGlzLmZyYWdt''@;'; put 'put ''ZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5fZnV0dXJlU25hcHNob3Q9RCx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoTHIoWj0+WltVTV0pKT8/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 ''Py5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJnpsZShoKSYmKGQucmVzb2x2ZVtVTV09aC50aXRsZSksZH1jbGFzcyBpV3tnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bVU1dfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEs''@;'; 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 ''dXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBzVyhjLGwpe2NvbnN0IGE9aHAoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBfeGUoYyxsKXtyZXR1cm4gWDgoYyxsKSYmYy5ldmVyeSgoYSxkKT0+aHAoYS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7''@;'; put 'put ''cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxzVyhjLnBhcmVudCxsLnBhcmVudCkpfWZ1bmN0aW9uIHpsZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCByNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1Lbyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBLcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEtyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBLcix0aGlzLmRldGFjaEV2ZW50cz1uZXcg''@;'; put 'put ''S3IsdGhpcy5wYXJlbnRDb250ZXh0cz1maShLTSksdGhpcy5sb2NhdGlvbj1maShEbyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1maShFcyksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLmlucHV0QmluZGVyPWZpKFVSLHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5k''@;'; 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 ''KXtyZXR1cm4gbmV3IGxXKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRleHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUN1P3RoaXMucm91dGU6bD09PUtNP3RoaXMuY2hp''@;'; 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 ''b25zLnNldChhLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHFNKGMsbCxhKXtpZihhJiZjLnNo''@;'; put 'put ''b3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiB0RWUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilp''@;'; put 'put ''ZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gcU0oYyxkLGgpO3JldHVybiBxTShjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IEdmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7''@;'; put 'put ''aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09PnFNKGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gbkVlKGMpe3JldHVybiBuZXcgQ3UobmV3IGVpKGMudXJsKSxuZXcg''@;'; put 'put ''ZWkoYy5wYXJhbXMpLG5ldyBlaShjLnF1ZXJ5UGFyYW1zKSxuZXcgZWkoYy5mcmFnbWVudCksbmV3IGVpKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+cU0oYyxmKSk7cmV0dXJuIG5ldyBHZihkLGgpfX1jb25zdCBabGU9Im5n''@;'; put 'put ''TmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBXbGUoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT1heShsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9WWxlKCExLHBoLlJlZGly''@;'; put 'put ''ZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM9ZCxofWZ1bmN0aW9uIFlsZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbWmxlXT0hMCxhLmNhbmNlbGxhdGlvbkNvZGU9bCxh''@;'; put 'put ''fWZ1bmN0aW9uIEdsZShjKXtyZXR1cm4hIWMmJmNbWmxlXX1sZXQgJGxlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25l''@;'; put 'put ''bnQiXV0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbS0ldLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcjVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gY1coYyl7''@;'; put 'put ''Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChjVyksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PUtvJiYoYS5jb21wb25lbnQ9''@;'; put 'put ''JGxlKSxhfWZ1bmN0aW9uIGdwKGMpe3JldHVybiBjLm91dGxldHx8S299ZnVuY3Rpb24gWE0oYyl7aWYoIWMpcmV0dXJuIG51bGw7aWYoYy5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBjLnJvdXRlQ29uZmlnLl9pbmplY3Rvcjtmb3IobGV0IGw9Yy5wYXJlbnQ7bDtsPWwucGFyZW50''@;'; 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 ''ZS52YWx1ZSksb1coTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNle2NvbnN0IE09WE0oaC5zbmFwc2hvdCk7di5hdHRhY2hSZWY9bnVsbCx2LnJvdXRlPWgsdi5pbmplY3Rvcj1NLHYub3V0bGV0JiZ2Lm91dGxldC5hY3RpdmF0''@;'; put 'put ''ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNsYXNzIEtsZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0''@;'; put 'put ''aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBaUntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuY29tcG9uZW50PWwsdGhpcy5yb3V0ZT1hfX1mdW5jdGlvbiBkRWUoYyxsLGEpe2NvbnN0IGQ9Yy5fcm9vdDtyZXR1cm4gSk0oZCxsP2wuX3Jvb3Q6bnVsbCxhLFtkLnZhbHVlXSl9ZnVuY3Rpb24gY3ko''@;'; put 'put ''YyxsKXtjb25zdCBhPVN5bWJvbCgpLGQ9bC5nZXQoYyxhKTtyZXR1cm4gZD09PWE/ImZ1bmN0aW9uIiE9dHlwZW9mIGN8fGZ1bmN0aW9uIGVvKGMpe3JldHVybiBudWxsIT09UG8oYyl9KGMpP2wuZ2V0KGMpOmM6ZH1mdW5jdGlvbiBKTShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVDaGVja3M6''@;'; put 'put ''W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWx5KGwpO3JldHVybiBjLmNoaWxkcmVuLmZvckVhY2godj0+eyhmdW5jdGlvbiBmRWUoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1jLnZhbHVlLHY9bD9sLnZh''@;'; put 'put ''bHVlOm51bGwsTT1hP2EuZ2V0Q29udGV4dChjLnZhbHVlLm91dGxldCk6bnVsbDtpZih2JiZmLnJvdXRlQ29uZmlnPT09di5yb3V0ZUNvbmZpZyl7Y29uc3QgRD1mdW5jdGlvbiBwRWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhKGMsbCk7c3dpdGNoKGEpe2Nhc2Ui''@;'; put 'put ''cGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIVg4KGMudXJsLGwudXJsKTtjYXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hWDgoYy51cmwsbC51cmwpfHwhaHAoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJh''@;'; put 'put ''bXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hc1coYyxsKXx8IWhwKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7ZGVmYXVsdDpyZXR1cm4hc1coYyxsKX19KHYsZixmLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7RD9oLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2go''@;'; put 'put ''bmV3IEtsZShkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRhPXYuX3Jlc29sdmVkRGF0YSksSk0oYyxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKSxEJiZNJiZNLm91dGxldCYmTS5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3RpdmF0ZUNoZWNrcy5w''@;'; put 'put ''dXNoKG5ldyBaUihNLm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYmUU0obCxNLGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgS2xlKGQpKSxKTShjLG51bGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpfSkodixmW3YudmFsdWUub3V0bGV0XSxhLGQuY29u''@;'; put 'put ''Y2F0KFt2LnZhbHVlXSksaCksZGVsZXRlIGZbdi52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3YsTV0pPT5RTShNLGEuZ2V0Q29udGV4dCh2KSxoKSksaH1mdW5jdGlvbiBRTShjLGwsYSl7Y29uc3QgZD1seShjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMo''@;'; put 'put ''ZCkuZm9yRWFjaCgoW2Ysdl0pPT57UU0odixoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgWlIoaC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxl''@;'; put 'put ''dC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gZXgoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gcWxlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgSVJ8fCJFbXB0eUVycm9yIj09PWM/Lm5hbWV9Y29uc3QgV1I9U3ltYm9sKCJJTklUSUFMX1ZBTFVFIik7ZnVuY3Rp''@;'; put 'put ''b24gdXkoKXtyZXR1cm4gVjEoYz0+cTgoYy5tYXAobD0+bC5waXBlKFlmKDEpLHgyKFdSKSkpKS5waXBlKExyKGw9Pntmb3IoY29uc3QgYSBvZiBsKWlmKCEwIT09YSl7aWYoYT09PVdSKXJldHVybiBXUjtpZighMT09PWF8fGEgaW5zdGFuY2VvZiByeSlyZXR1cm4gYX1yZXR1cm4hMH0pLCRs''@;'; put 'put ''KGw9PmwhPT1XUiksWWYoMSkpKX1mdW5jdGlvbiBYbGUoYyl7cmV0dXJuIGZ1bmN0aW9uIGZuKC4uLmMpe3JldHVybiBJaShjKX0oWXUobD0+e2lmKGF5KGwpKXRocm93IFdsZSgwLGwpfSksTHIobD0+ITA9PT1sKSl9Y2xhc3MgdVd7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9''@;'; put 'put ''bHx8bnVsbH19Y2xhc3MgZFcgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiBkeShjKXtyZXR1cm4gUlIobmV3IHVXKGMpKX1jbGFzcyBMRWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybFNlcmlhbGl6ZXI9bCx0aGlzLnVybFRy''@;'; put 'put ''ZWU9YX1saW5lcmFsaXplU2VnbWVudHMobCxhKXtsZXQgZD1bXSxoPWEucm9vdDtmb3IoOzspe2lmKGQ9ZC5jb25jYXQoaC5zZWdtZW50cyksMD09PWgubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZm8oZCk7aWYoaC5udW1iZXJPZkNoaWxkcmVuPjF8fCFoLmNoaWxkcmVuW0tvXSlyZXR1cm4g''@;'; put 'put ''UlIobmV3IFFuKDRlMywhMSkpO2g9aC5jaGlsZHJlbltLb119fWFwcGx5UmVkaXJlY3RDb21tYW5kcyhsLGEsZCl7Y29uc3QgaD10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoYS5zdGFydHNXaXRoKCIvIikpdGhy''@;'; put 'put ''b3cgbmV3IGRXKGgpO3JldHVybiBofWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IHJ5KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJs''@;'; put 'put ''VHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBNPWYuc3Vic3Ry''@;'; put 'put ''aW5nKDEpO2RbaF09YVtNXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTtsZXQgdj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW00sRF0p''@;'; put 'put ''PT57dltNXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLEQsZCxoKX0pLG5ldyBLbChmLHYpfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRzV2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQp''@;'; put 'put ''KX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgUW4oNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3Bs''@;'; put 'put ''aWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBoVz17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIE9FZShjLGwsYSxkLGgpe2NvbnN0IGY9ZlcoYyxs''@;'; put 'put ''LGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gaUVlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1HNChjLnByb3ZpZGVycyxsLGBSb3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIERFZShjLGws''@;'; put 'put ''YSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9mbyhoLm1hcCh2PT57Y29uc3QgTT1jeSh2LGMpO3JldHVybiBvbShmdW5jdGlvbiBfRWUoYyl7cmV0dXJuIGMmJmV4KGMuY2FuTWF0Y2gpfShNKT9NLmNhbk1hdGNoKGwsYSk6cTAoYywoKT0+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 ''dGhpcy5jb25maWcsbCxLbykucGlwZSh0eShkPT57aWYoZCBpbnN0YW5jZW9mIGRXKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Rocm93IGQgaW5zdGFuY2VvZiB1Vz90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkpfWluaGVyaXRQYXJh''@;'; put 'put ''bXNBbmREYXRhKGwsYSl7Y29uc3QgZD1sLnZhbHVlLGg9clcoZCxhLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZC5wYXJhbXM9T2JqZWN0LmZyZWV6ZShoLnBhcmFtcyksZC5kYXRhPU9iamVjdC5mcmVlemUoaC5kYXRhKSxsLmNoaWxkcmVuLmZvckVhY2goZj0+dGhpcy5pbmhl''@;'; put 'put ''cml0UGFyYW1zQW5kRGF0YShmLGQpKX1wcm9jZXNzU2VnbWVudEdyb3VwKGwsYSxkLGgpe3JldHVybiAwPT09ZC5zZWdtZW50cy5sZW5ndGgmJmQuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihsLGEsZCk6dGhpcy5wcm9jZXNzU2VnbWVudChsLGEsZCxkLnNlZ21lbnRzLGgs''@;'; put 'put ''ITApLnBpcGUoTHIoZj0+ZiBpbnN0YW5jZW9mIEdmP1tmXTpbXSkpfXByb2Nlc3NDaGlsZHJlbihsLGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhkLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1mP2gudW5zaGlmdChmKTpoLnB1c2goZik7cmV0dXJuIFd1KGgpLnBp''@;'; put 'put ''cGUoZXkoZj0+e2NvbnN0IHY9ZC5jaGlsZHJlbltmXSxNPWZ1bmN0aW9uIGxFZShjLGwpe2NvbnN0IGE9Yy5maWx0ZXIoZD0+Z3AoZCk9PT1sKTtyZXR1cm4gYS5wdXNoKC4uLmMuZmlsdGVyKGQ9PmdwKGQpIT09bCkpLGF9KGEsZik7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cChs''@;'; put 'put ''LE0sdixmKX0pLGZ1bmN0aW9uIGR4ZShjLGwpe3JldHVybiBWaShmdW5jdGlvbiB1eGUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsRD1sLFo9MDtmLnN1YnNjcmliZShOaSh2LHJlPT57Y29uc3QgY2U9WisrO0Q9TT9jKEQscmUsY2UpOihNPSEwLHJlKSxkJiZ2Lm5leHQoRCl9''@;'; put 'put ''LGgmJigoKT0+e00mJnYubmV4dChEKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLExSKG51bGwpLGZ1bmN0aW9uIGh4ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5w''@;'; put 'put ''aXBlKGM/JGwoKGgsZik9PmMoaCxmLGQpKTpjbixZWigxKSxhP0xSKGwpOmdsZSgoKT0+bmV3IElSKSl9KCksTjAoZj0+e2lmKG51bGw9PT1mKXJldHVybiBkeShkKTtjb25zdCB2PVFsZShmKTtyZXR1cm4gZnVuY3Rpb24gWUVlKGMpe2Muc29ydCgobCxhKT0+bC52YWx1ZS5vdXRsZXQ9PT1L''@;'; put 'put ''bz8tMTphLnZhbHVlLm91dGxldD09PUtvPzE6bC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfSh2KSxmbyh2KX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdil7cmV0dXJuIFd1KGEpLnBpcGUoZXkoTT0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RS''@;'; put 'put ''b3V0ZShNLl9pbmplY3Rvcj8/bCxhLE0sZCxoLGYsdikucGlwZSh0eShEPT57aWYoRCBpbnN0YW5jZW9mIHVXKXJldHVybiBmbyhudWxsKTt0aHJvdyBEfSkpKSxhbShNPT4hIU0pLHR5KE09PntpZihxbGUoTSkpcmV0dXJuIGZ1bmN0aW9uIGpFZShjLGwsYSl7cmV0dXJuIDA9PT1sLmxlbmd0''@;'; 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+e2NvbnN0IE09Y3kodixjKTtyZXR1cm4gb20oZnVuY3Rpb24gbUVlKGMpe3JldHVybiBjJiZleChjLmNhbkxvYWQpfShNKT9NLmNhbkxv''@;'; put 'put ''YWQobCxhKTpxMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKHV5KCksWGxlKCkpfShsLGEsZCkucGlwZShOMChoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoWXUoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVj''@;'; put 'put ''dG9yfSkpOmZ1bmN0aW9uIFJFZShjKXtyZXR1cm4gUlIoWWxlKCExLHBoLkd1YXJkUmVqZWN0ZWQpKX0oKSkpOmZvKHtyb3V0ZXM6W10saW5qZWN0b3I6bH0pfX1mdW5jdGlvbiBHRWUoYyl7Y29uc3QgbD1jLnZhbHVlLnJvdXRlQ29uZmlnO3JldHVybiBsJiYiIj09PWwucGF0aH1mdW5jdGlv''@;'; put 'put ''biBRbGUoYyl7Y29uc3QgbD1bXSxhPW5ldyBTZXQ7Zm9yKGNvbnN0IGQgb2YgYyl7aWYoIUdFZShkKSl7bC5wdXNoKGQpO2NvbnRpbnVlfWNvbnN0IGg9bC5maW5kKGY9PmQudmFsdWUucm91dGVDb25maWc9PT1mLnZhbHVlLnJvdXRlQ29uZmlnKTt2b2lkIDAhPT1oPyhoLmNoaWxkcmVuLnB1''@;'; put 'put ''c2goLi4uZC5jaGlsZHJlbiksYS5hZGQoaCkpOmwucHVzaChkKX1mb3IoY29uc3QgZCBvZiBhKXtjb25zdCBoPVFsZShkLmNoaWxkcmVuKTtsLnB1c2gobmV3IEdmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIGVjZShjKXtjb25zdCBsPWMuY2hp''@;'; put 'put ''bGRyZW4ubWFwKGE9PmVjZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxdfWZ1bmN0aW9uIHBXKGMpe3JldHVybiBWMShsPT57Y29uc3QgYT1jKGwpO3JldHVybiBhP1d1KGEpLnBpcGUoTHIoKCk9PmwpKTpmbyhsKX0pfWxldCB0Y2U9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBk''@;'; put 'put ''LGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PUtvKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtVTV19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkodFRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdFRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0Y2V7Y29u''@;'; put 'put ''c3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihJ''@;'; put 'put ''Q2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBoeT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxmeT1uZXcgU3QoIiIp''@;'; put 'put ''O2xldCBnVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9ZmkoS2llKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9uZW50TG9hZGVy''@;'; put 'put ''cy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBmbyhhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0IGQ9b20oYS5s''@;'; put 'put ''b2FkQ29tcG9uZW50KCkpLnBpcGUoTHIobmNlKSxZdShmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLHpNKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBXWihkLCgp''@;'; put 'put ''PT5uZXcgV24pLnBpcGUoWlooKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcyly''@;'; put 'put ''ZXR1cm4gZm8oe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIG5UZShjLGwsYSxkKXtyZXR1cm4gb20oYy5sb2FkQ2hp''@;'; put 'put ''bGRyZW4oKSkucGlwZShMcihuY2UpLE4wKGg9PmggaW5zdGFuY2VvZiBtY3x8QXJyYXkuaXNBcnJheShoKT9mbyhoKTpXdShsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLExyKGg9PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1oLCEwKTooZj1oLmNy''@;'; put 'put ''ZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGZ5LFtdLHtvcHRpb25hbDohMCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKGNXKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlzLmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZSh6TSgoKT0+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+KGYoKSxmdW5jdGlvbiBvVGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9Pnt5YihsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6RH09ZDtyZXR1cm4gRCYmcTAoYywoKT0+RCh7dHJhbnNpdGlv''@;'; put 'put ''bjpNLGZyb206bCx0bzphfSkpLHZ9KX1sZXQgR1I9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlv''@;'; put 'put ''bj1udWxsLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGwsdGhpcy5ldmVudHM9bmV3IFduLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgV24sdGhpcy5jb25maWdMb2FkZXI9ZmkoZ1cpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdGhpcy51cmxTZXJp''@;'; put 'put ''YWxpemVyPWZpKGl5KSx0aGlzLnJvb3RDb250ZXh0cz1maShLTSksdGhpcy5sb2NhdGlvbj1maShmaCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1maShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9ZmkodGNlKSx0aGlzLm9wdGlvbnM9ZmkoaHkse29wdGlv''@;'; put 'put ''bmFsOiEwfSl8fHt9LHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKG1XKSx0aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPWZpKHJjZSx7b3B0''@;'; put 'put ''aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5mbyh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBHeGUoaCkp''@;'; put 'put ''LHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgWXhlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMubmF2aWdhdGlvbklk''@;'; put 'put ''O3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IGVpKHtpZDowLGN1cnJlbnRVcmxUcmVlOmQsY3VycmVudFJhd1VybDpkLGV4dHJhY3Rl''@;'; put 'put ''ZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSx1cmxBZnRlclJlZGlyZWN0czp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSxyYXdVcmw6ZCxleHRyYXM6e30scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHByb21pc2U6UHJvbWlzZS5yZXNvbHZlKCEw''@;'; put 'put ''KSxzb3VyY2U6JE0scmVzdG9yZWRTdGF0ZTpudWxsLGN1cnJlbnRTbmFwc2hvdDpoLnNuYXBzaG90LHRhcmdldFNuYXBzaG90Om51bGwsY3VycmVudFJvdXRlclN0YXRlOmgsdGFyZ2V0Um91dGVyU3RhdGU6bnVsbCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOltdLGNhbkRlYWN0aXZhdGVD''@;'; 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 ''aG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6RH0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxZdShjZT0+''@;'; put 'put ''e2YudGFyZ2V0U25hcHNob3Q9Y2UudGFyZ2V0U25hcHNob3QsZi51cmxBZnRlclJlZGlyZWN0cz1jZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOmNlLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBi''@;'; put 'put ''ZT1uZXcgUGxlKGNlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoY2UuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGNlLnVybEFmdGVyUmVkaXJlY3RzKSxjZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChiZSl9KSk7aWYoWiYmdGhp''@;'; put 'put ''cy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6Y2UsZXh0cmFjdGVkVXJsOmJlLHNvdXJjZTpFZSxyZXN0b3JlZFN0YXRlOkJlLGV4dHJhczpxZX09RCxydD1uZXcgQlIoY2UsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZShiZSksRWUsQmUpO3RoaXMuZXZlbnRzLm5leHQocnQpO2NvbnN0IHB0PVZsZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFNuYXBzaG90OnB0LHVybEFmdGVyUmVkaXJlY3RzOmJlLGV4dHJhczp7''@;'; put 'put ''Li4ucWUsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmZpbmFsVXJsPWJlLGZvKGYpfXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgc3koRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQu''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSxjZSxqUi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5KSksRC5yZXNvbHZlKG51bGwpLE0yfX0pLFl1KEQ9Pntjb25zdCBaPW5ldyB6eGUoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIu''@;'; put 'put ''c2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpLEQudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoWil9KSxMcihEPT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELGd1YXJkczpkRWUoRC50YXJnZXRTbmFwc2hvdCxELmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RD''@;'; put 'put ''b250ZXh0cyl9LGYpKSxmdW5jdGlvbiB3RWUoYyxsKXtyZXR1cm4gTjAoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12Lmxlbmd0aCYmMD09''@;'; put 'put ''PWYubGVuZ3RoP2ZvKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIENFZShjLGwsYSxkKXtyZXR1cm4gV3UoYykucGlwZShOMChoPT5mdW5jdGlvbiBBRWUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7''@;'; put 'put ''cmV0dXJuIGYmJjAhPT1mLmxlbmd0aD9mbyhmLm1hcChNPT57Y29uc3QgRD1YTShsKT8/aCxaPWN5KE0sRCk7cmV0dXJuIG9tKGZ1bmN0aW9uIHlFZShjKXtyZXR1cm4gYyYmZXgoYy5jYW5EZWFjdGl2YXRlKX0oWik/Wi5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOnEwKEQsKCk9PlooYyxsLGEs''@;'; put 'put ''ZCkpKS5waXBlKGFtKCkpfSkpLnBpcGUodXkoKSk6Zm8oITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksYW0oaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoTjAoTT0+TSYmZnVuY3Rpb24gZ0VlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0pP2Z1bmN0aW9uIFNF''@;'; put 'put ''ZShjLGwsYSxkKXtyZXR1cm4gV3UobCkucGlwZShleShoPT5VWihmdW5jdGlvbiB4RWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3ICR4ZShjKSksZm8oITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBNRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IHF4ZShj''@;'; put 'put ''KSksZm8oITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIFRFZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gaEVlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2''@;'; put 'put ''YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5wbGUoKCk9PmZvKHYuZ3VhcmRzLm1hcChEPT57Y29uc3QgWj1YTSh2Lm5vZGUpPz9hLHJlPWN5KEQsWik7cmV0dXJuIG9tKGZ1''@;'; put 'put ''bmN0aW9uIGJFZShjKXtyZXR1cm4gYyYmZXgoYy5jYW5BY3RpdmF0ZUNoaWxkKX0ocmUpP3JlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpxMChaLCgpPT5yZShkLGMpKSkucGlwZShhbSgpKX0pKS5waXBlKHV5KCkpKSk7cmV0dXJuIGZvKGYpLnBpcGUodXkoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0''@;'; put 'put ''aW9uIEVFZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBmbyghMCk7Y29uc3QgaD1kLm1hcChmPT5wbGUoKCk9Pntjb25zdCB2PVhNKGwpPz9hLE09Y3koZix2KTtyZXR1cm4gb20o''@;'; put 'put ''ZnVuY3Rpb24gdkVlKGMpe3JldHVybiBjJiZleChjLmNhbkFjdGl2YXRlKX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOnEwKHYsKCk9Pk0obCxjKSkpLnBpcGUoYW0oKSl9KSk7cmV0dXJuIGZvKGgpLnBpcGUodXkoKSl9KGMsaC5yb3V0ZSxhKSkpLGFtKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs''@;'; put 'put ''KTpmbyhNKSksTHIoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsRD0+dGhpcy5ldmVudHMubmV4dChEKSksWXUoRD0+e2lmKGYuZ3VhcmRzUmVzdWx0PUQuZ3VhcmRzUmVzdWx0LGF5KEQuZ3VhcmRzUmVzdWx0KSl0aHJvdyBXbGUoMCxE''@;'; put 'put ''Lmd1YXJkc1Jlc3VsdCk7Y29uc3QgWj1uZXcgVXhlKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSxELnRhcmdldFNuYXBzaG90LCEhRC5ndWFyZHNSZXN1bHQp''@;'; put 'put ''O3RoaXMuZXZlbnRzLm5leHQoWil9KSwkbChEPT4hIUQuZ3VhcmRzUmVzdWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihELCIiLHBoLkd1YXJkUmVqZWN0ZWQpLCExKSkscFcoRD0+e2lmKEQuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aClyZXR1cm4gZm8oRCku''@;'; put 'put ''cGlwZShZdShaPT57Y29uc3QgcmU9bmV3IFp4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChy''@;'; put 'put ''ZSl9KSxWMShaPT57bGV0IHJlPSExO3JldHVybiBmbyhaKS5waXBlKGZ1bmN0aW9uIFhFZShjLGwpe3JldHVybiBOMChhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gZm8oYSk7Y29uc3QgZj1uZXcg''@;'; put 'put ''U2V0KGgubWFwKEQ9PkQucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0IEQgb2YgZilpZighdi5oYXMoRCkpZm9yKGNvbnN0IFogb2YgZWNlKEQpKXYuYWRkKFopO2xldCBNPTA7cmV0dXJuIFd1KHYpLnBpcGUoZXkoRD0+Zi5oYXMoRCk/ZnVuY3Rpb24gSkVlKGMsbCxhLGQpe2NvbnN0IGg9''@;'; put 'put ''Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhemxlKGgpJiYoZltVTV09aC50aXRsZSksZnVuY3Rpb24gUUVlKGMsbCxhLGQpe2NvbnN0IGg9R1ooYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBmbyh7fSk7Y29uc3QgZj17fTtyZXR1cm4gV3Uo''@;'; put 'put ''aCkucGlwZShOMCh2PT5mdW5jdGlvbiBlVGUoYyxsLGEsZCl7Y29uc3QgaD1YTShsKT8/ZCxmPWN5KGMsaCk7cmV0dXJuIG9tKGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpxMChoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZShhbSgpLFl1KE09PntmW3ZdPU19KSkpLFlaKDEpLGZ1''@;'; put 'put ''bmN0aW9uIGZ4ZShjKXtyZXR1cm4gTHIoKCk9PmMpfShmKSx0eSh2PT5xbGUodik/TTI6UlIodikpKX0oZixjLGwsZCkucGlwZShMcih2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPXJXKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxudWxsKSkpfShELGQsYyxsKTooRC5kYXRhPXJXKEQsRC5w''@;'; put 'put ''YXJlbnQsYykucmVzb2x2ZSxmbyh2b2lkIDApKSksWXUoKCk9Pk0rKyksWVooMSksTjAoRD0+TT09PXYuc2l6ZT9mbyhhKTpNMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLFl1KHtuZXh0OigpPT5yZT0hMCxjb21wbGV0ZToo''@;'; put 'put ''KT0+e3JlfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKFosIiIscGguTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSxZdShaPT57Y29uc3QgcmU9bmV3IFd4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXpl''@;'; put 'put ''ci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChyZSl9KSl9KSxwVyhEPT57Y29uc3QgWj1yZT0+e2NvbnN0IGNlPVtdO3JlLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhcmUucm91dGVDb25maWcuX2xvYWRlZENv''@;'; put 'put ''bXBvbmVudCYmY2UucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29tcG9uZW50KHJlLnJvdXRlQ29uZmlnKS5waXBlKFl1KGJlPT57cmUuY29tcG9uZW50PWJlfSksTHIoKCk9Pnt9KSkpO2Zvcihjb25zdCBiZSBvZiByZS5jaGlsZHJlbiljZS5wdXNoKC4uLlooYmUpKTtyZXR1cm4gY2V9''@;'; put 'put ''O3JldHVybiBxOChaKEQudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUoTFIobnVsbCksWWYoMSkpfSkscFcoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLFYxKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OkQsdGFyZ2V0U25hcHNob3Q6Wn09ZixyZT10aGlzLmNyZWF0ZVZpZXdU''@;'; put 'put ''cmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEQucm9vdCxaLnJvb3QpO3JldHVybiByZT9XdShyZSkucGlwZShMcigoKT0+ZikpOmZvKGYpfSksTHIoRD0+e2NvbnN0IFo9ZnVuY3Rpb24gZUVlKGMsbCxhKXtjb25zdCBkPXFNKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAw''@;'; put 'put ''KTtyZXR1cm4gbmV3IE5sZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSxELnRhcmdldFNuYXBzaG90LEQuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFJvdXRlclN0YXRlOlp9LHRoaXMuY3VycmVudE5hdmlnYXRpb24u''@;'; put 'put ''dGFyZ2V0Um91dGVyU3RhdGU9WixmfSksWXUoKCk9Pnt0aGlzLmV2ZW50cy5uZXh0KG5ldyBRWil9KSwoKGMsbCxhLGQpPT5McihoPT4obmV3IHVFZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShjKSxoKSkpKHRoaXMucm9vdENvbnRl''@;'; put 'put ''eHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LEQ9PnRoaXMuZXZlbnRzLm5leHQoRCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxZZigxKSxZdSh7bmV4dDpEPT57dj0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZpZ2F0aW9uLHRoaXMuZXZlbnRzLm5l''@;'; put 'put ''eHQobmV3IHBwKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUoRC50YXJnZXRSb3V0ZXJTdGF0ZS5z''@;'; put 'put ''bmFwc2hvdCksRC5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9Pnt2PSEwfX0pLFYwKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKFl1KEQ9Pnt0aHJvdyBEfSkpKSx6TSgoKT0+eyF2JiYhTSYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLHBoLlN1cGVyc2Vk''@;'; put 'put ''ZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkPT09Zi5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSksdHkoRD0+e2lmKE09ITAsR2xlKEQpKXRoaXMuZXZlbnRzLm5leHQobmV3IG95KGYuaWQs''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRC5tZXNzYWdlLEQuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIHJFZShjKXtyZXR1cm4gR2xlKGMpJiZheShjLnVybCl9KEQpP3RoaXMuZXZlbnRzLm5leHQobmV3IGVXKEQudXJsKSk6Zi5yZXNvbHZlKCEx''@;'; put 'put ''KTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IHpSKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRCxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKEQpKX1jYXRjaChaKXt0aGlzLm9wdGlvbnMu''@;'; put 'put ''cmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9mLnJlc29sdmUoITEpOmYucmVqZWN0KFopfX1yZXR1cm4gTTJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IG95KGEuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhLmV4dHJh''@;'; put 'put ''Y3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJs''@;'; put 'put ''VHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtyZXR1cm4gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCghMCkpKS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8u''@;'; put 'put ''ZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHNUZShjKXtyZXR1cm4gYyE9PSRNfWxldCBsVGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro''@;'; 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 ''YT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgdHg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0iQ09NUExFVEUiLGNb''@;'; put 'put ''Yy5GQUlMRUQ9MV09IkZBSUxFRCIsY1tjLlJFRElSRUNUSU5HPTJdPSJSRURJUkVDVElORyIsY30odHh8fHt9KTtmdW5jdGlvbiBvY2UoYyxsKXtjLmV2ZW50cy5waXBlKCRsKGE9PmEgaW5zdGFuY2VvZiBwcHx8YSBpbnN0YW5jZW9mIG95fHxhIGluc3RhbmNlb2YgelJ8fGEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBzeSksTHIoYT0+YSBpbnN0YW5jZW9mIHBwfHxhIGluc3RhbmNlb2Ygc3k/dHguQ09NUExFVEU6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09cGguUmVkaXJlY3R8fGEuY29kZT09PXBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP3R4LlJFRElSRUNUSU5HOnR4LkZBSUxFRCksJGwo''@;'; put 'put ''YT0+YSE9PXR4LlJFRElSRUNUSU5HKSxZZigxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9ZnVuY3Rpb24gaFRlKGMpe3Rocm93IGN9Y29uc3QgZlRlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHBU''@;'; 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 ''aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxzVGUoaC5zb3VyY2UpfTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbih2LCRNLG51bGwsTSx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6aC5wcm9taXNlfSl9KGZ1bmN0aW9uIG1UZShjKXtyZXR1cm4hKGMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBRWnx8YyBpbnN0YW5jZW9mIGVXKX0pKGQpJiZ0aGlzLl9ldmVudHMubmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJlc2V0Um9vdENvbXBv''@;'; put 'put ''bmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVudD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMubmF2aWdhdGlvblRy''@;'; put 'put ''YW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLCRNLHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVkU3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl7dGhpcy5ub25S''@;'; 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 ''biB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLCRNLG51bGwsZCl9bmF2aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gZ1RlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IFFuKDQwMDgsITEpfShh''@;'; 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/bnVsbDpmdW5jdGlvbiBpRChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGpCKGMsbCl7cmV0dXJuInNyYyI9PT1sJiYoImVtYmVkIj09PWN8fCJmcmFtZSI9''@;'; put 'put ''PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/ckQ6WkN9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhp''@;'; put 'put ''cy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJpYnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpoLnJlbW92ZUF0dHJpYnV0ZShmLGEpfWdldCB1cmxU''@;'; put 'put ''cmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLmNvbW1hbmRzP251bGw6dGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5''@;'; put 'put ''UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNIYW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KShHZShMcyksR2UoQ3UpLElmKCJ0YWJpbmRleCIpLEdlKEVvKSxHZShKaSksR2UoWjgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZocigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFyZ2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1zOiJxdWVyeVBhcmFt''@;'; put 'put ''cyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5nOiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21lbnQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJw''@;'; put 'put ''cmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsczFdLHNraXBMb2NhdGlvbkNoYW5nZTpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsczFdLHJlcGxhY2VVcmw6W05uLkhhc0RlY29yYXRvcklu''@;'; put 'put ''cHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIsczFdLHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltXbCx3bF19KX19cmV0dXJuIGN9KSgpLHB5PSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0''@;'; put 'put ''aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6''@;'; put 'put ''ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEtyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIHBwJiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7Zm8odGhpcy5saW5rcy5jaGFuZ2VzLGZvKG51''@;'; put 'put ''bGwpKS5waXBlKFFiKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29u''@;'; put 'put ''c3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1XdShhKS5waXBlKFFiKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlz''@;'; 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 ''dXRlci5ldmVudHMucGlwZSgkbChhPT5hIGluc3RhbmNlb2YgcHApLGV5KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRoaXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIGQpe2YucHJvdmlkZXJzJiYhZi5faW5qZWN0b3ImJihmLl9pbmplY3Rvcj1HNChmLnByb3ZpZGVycyxhLGBSb3V0ZTog''@;'; put 'put ''JHtmLnBhdGh9YCkpO2NvbnN0IHY9Zi5faW5qZWN0b3I/P2EsTT1mLl9sb2FkZWRJbmplY3Rvcj8/djsoZi5sb2FkQ2hpbGRyZW4mJiFmLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWYuY2FuTG9hZHx8Zi5sb2FkQ29tcG9uZW50JiYhZi5fbG9hZGVkQ29tcG9uZW50KSYmaC5wdXNoKHRoaXMu''@;'; put 'put ''cHJlbG9hZENvbmZpZyh2LGYpKSwoZi5jaGlsZHJlbnx8Zi5fbG9hZGVkUm91dGVzKSYmaC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhNLGYuY2hpbGRyZW4/P2YuX2xvYWRlZFJvdXRlcykpfXJldHVybiBXdShoKS5waXBlKFFiKCkpfXByZWxvYWRDb25maWcoYSxkKXtyZXR1cm4gdGhpcy5w''@;'; put 'put ''cmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChkLCgpPT57bGV0IGg7aD1kLmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09ZC5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGQpOmZvKG51bGwpO2NvbnN0IGY9aC5waXBlKE4wKHY9Pm51bGw9PT12P2ZvKHZvaWQgMCk6KGQuX2xvYWRl''@;'; put 'put ''ZFJvdXRlcz12LnJvdXRlcyxkLl9sb2FkZWRJbmplY3Rvcj12LmluamVjdG9yLHRoaXMucHJvY2Vzc1JvdXRlcyh2LmluamVjdG9yPz9hLHYucm91dGVzKSkpKTtyZXR1cm4gZC5sb2FkQ29tcG9uZW50JiYhZC5fbG9hZGVkQ29tcG9uZW50P1d1KFtmLHRoaXMubG9hZGVyLmxvYWRDb21wb25l''@;'; put 'put ''bnQoZCldKS5waXBlKFFiKCkpOmZ9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihMcykseHIoS2llKSx4cihoYykseHIoc2NlKSx4cihnVykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm''@;'; 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+e3NldFRpbWVvdXQoKCk9PntmKCl9KSx5YigoKT0+e2YoKX0se2luamVjdG9yOmguZW52aXJvbm1lbnRJbmplY3Rvcn0pfSksaC56b25l''@;'; put 'put ''LnJ1bigoKT0+e2gudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IEZsZShhLCJwb3BzdGF0ZSI9PT1oLmxhc3RTb3VyY2U/aC5zdG9yZVtoLnJlc3RvcmVkSWRdOm51bGwsZCkpfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUo''@;'; put 'put ''KSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIENEKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbXAoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiB1Y2UoKXtjb25zdCBjPWZpKERzKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQocTQpO2lmKGwhPT1hLmNvbXBvbmVu''@;'; put 'put ''dHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoTHMpLGg9Yy5nZXQoZGNlKTsxPT09Yy5nZXQoYlcpJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQoaGNlLG51bGwscmEuT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxjLmdldCh2VyxudWxsLHJhLk9wdGlvbmFsKT8uaW5pdCgpLGQu''@;'; put 'put ''cmVzZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBdKSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBkY2U9bmV3IFN0KCIiLHtmYWN0b3J5OigpPT5uZXcgV259KSxiVz1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PjF9KSxoY2U9bmV3IFN0KCIiKTtmdW5jdGlvbiBDVGUoYyl7cmV0dXJuIG1wKDAsW3twcm92aWRlOmhjZSx1c2VFeGlzdGluZzpiVGV9LHtwcm92aWRlOnNjZSx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIE1UZShjKXtyZXR1cm4gbXAoOSxbe3Byb3ZpZGU6cmNl''@;'; put 'put ''LHVzZVZhbHVlOmFUZX0se3Byb3ZpZGU6aWNlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319XSl9Y29uc3QgZmNlPW5ldyBTdCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSx4VGU9W2ZoLHtwcm92aWRlOml5LHVzZUNsYXNzOiRa''@;'; put 'put ''fSxMcyxLTSx7cHJvdmlkZTpDdSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGNjZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0ZS5yb290fSxkZXBzOltMc119LGdXLFtdXTtsZXQgemM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6''@;'; 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 ''ZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30oZ2h8fHt9KSxtaD15KDM3MzQpLG1jZT15Lm4obWgpLEIwPXkoMTMyNDcpO2xldCBKOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3Ro''@;'; 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 ''c3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBfY2UoYyl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyBueHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9''@;'; 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 ''YW1zJiYocmU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRQYXJhbXNbRWVdKSxyZSkpLG5ldyBueChhLGQsdix7cGFyYW1zOnJlLGhlYWRlcnM6Wixjb250ZXh0OmNlLHJlcG9ydFByb2dyZXNzOkQscmVzcG9uc2VUeXBlOmgsd2l0aENy''@;'; put 'put ''ZWRlbnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciBsbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9h''@;'; put 'put ''ZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30obG18fHt9KTtjbGFzcyB3V3tjb25zdHJ1Y3RvcihsLGE9cnguT2ssZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgRTIsdGhpcy5z''@;'; put 'put ''dGF0dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBKUiBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9''@;'; put 'put ''e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZUhlYWRlcn1jbG9uZShsPXt9KXtyZXR1cm4gbmV3IEpSKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVz''@;'; put 'put ''VGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBROCBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09bC5ib2R5P2wuYm9keTpudWxsfWNsb25l''@;'; put 'put ''KGw9e30pe3JldHVybiBuZXcgUTgoe2JvZHk6dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRo''@;'; put 'put ''aXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgbXkgZXh0ZW5kcyB3V3tjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlz''@;'; put 'put ''LnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifTogJHtsLnN0YXR1c30gJHtsLnN0YXR1''@;'; put 'put ''c1RleHR9YCx0aGlzLmVycm9yPWwuZXJyb3J8fG51bGx9fXZhciByeD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNvbnRpbnVlPTEwMF09IkNvbnRpbnVlIixjW2MuU3dpdGNoaW5nUHJvdG9jb2xzPTEwMV09IlN3aXRjaGluZ1Byb3RvY29scyIsY1tjLlByb2Nlc3Npbmc9MTAyXT0iUHJvY2Vz''@;'; 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 ''ZmZpY2llbnRTdG9yYWdlIixjW2MuTG9vcERldGVjdGVkPTUwOF09Ikxvb3BEZXRlY3RlZCIsY1tjLk5vdEV4dGVuZGVkPTUxMF09Ik5vdEV4dGVuZGVkIixjW2MuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NTExXT0iTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGN9KHJ4''@;'; put 'put ''fHx7fSk7ZnVuY3Rpb24gQ1coYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlw''@;'; put 'put ''ZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBTVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5zdGFuY2VvZiBueClmPWE7''@;'; put 'put ''ZWxzZXtsZXQgRCxaO0Q9aC5oZWFkZXJzIGluc3RhbmNlb2YgRTI/aC5oZWFkZXJzOm5ldyBFMihoLmhlYWRlcnMpLGgucGFyYW1zJiYoWj1oLnBhcmFtcyBpbnN0YW5jZW9mIHNtP2gucGFyYW1zOm5ldyBzbSh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyBueChhLGQsdm9pZCAwIT09''@;'; put 'put ''aC5ib2R5P2guYm9keTpudWxsLHtoZWFkZXJzOkQsY29udGV4dDpoLmNvbnRleHQscGFyYW1zOloscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRoQ3JlZGVudGlhbHMsdHJhbnNm''@;'; put 'put ''ZXJDYWNoZTpoLnRyYW5zZmVyQ2FjaGV9KX1jb25zdCB2PWZvKGYpLnBpcGUoZXkoRD0+dGhpcy5oYW5kbGVyLmhhbmRsZShEKSkpO2lmKGEgaW5zdGFuY2VvZiBueHx8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIHY7Y29uc3QgTT12LnBpcGUoJGwoRD0+RCBpbnN0YW5jZW9mIFE4KSk7''@;'; 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 ''KX0pfWNvbnN0IFlUZT1uZXcgU3QoIiIpLGl4PW5ldyBTdCgiIiksU2NlPW5ldyBTdCgiIiksTWNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gR1RlKCl7bGV0IGM9bnVsbDtyZXR1cm4obCxhKT0+e251bGw9PT1jJiYoYz0oZmkoWVRlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoWlRl''@;'; put 'put ''LENjZSkpO2NvbnN0IGQ9ZmkoUGYpLGg9ZC5hZGQoKTtyZXR1cm4gYyhsLGEpLnBpcGUoek0oKCk9PmQucmVtb3ZlKGgpKSl9fWxldCB4Y2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtSe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhp''@;'; put 'put ''cy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKTtjb25zdCBoPWZpKE1jZSx7b3B0aW9uYWw6ITB9KTt0aGlzLmJhY2tlbmQ9aD8/YX1oYW5kbGUoYSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdl''@;'; put 'put ''dChpeCksLi4udGhpcy5pbmplY3Rvci5nZXQoU2NlLFtdKV0pKTt0aGlzLmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIFdUZShjLGwsYSl7cmV0dXJuKGQsaCk9PnEwKGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLENjZSl9Y29uc3QgZD10aGlz''@;'; put 'put ''LnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoek0oKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShkKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHFS''@;'; put 'put ''KSx4cihoYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEpUZT0vXlwpXF1cfScsP1xuLztsZXQgVGNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFu''@;'; put 'put ''ZGxlKGEpe2lmKCJKU09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgUW4oLTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP1d1KGQuXHUwMjc1bG9hZEltcGwoKSk6Zm8obnVsbCkpLnBpcGUoVjEoKCk9Pm5ldyBYdChmPT57Y29uc3Qgdj1k''@;'; put 'put ''LmJ1aWxkKCk7aWYodi5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFtcyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKHFlLHJ0KT0+di5zZXRSZXF1ZXN0SGVhZGVyKHFlLHJ0LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMo''@;'; put 'put ''IkFjY2VwdCIpfHx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFhLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgcWU9YS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1xZSYmdi5zZXRSZXF1''@;'; put 'put ''ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHFlKX1pZihhLnJlc3BvbnNlVHlwZSl7Y29uc3QgcWU9YS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTt2LnJlc3BvbnNlVHlwZT0ianNvbiIhPT1xZT9xZToidGV4dCJ9Y29uc3QgTT1hLnNlcmlhbGl6ZUJvZHkoKTtsZXQgRD1udWxsO2NvbnN0''@;'; put 'put ''IFo9KCk9PntpZihudWxsIT09RClyZXR1cm4gRDtjb25zdCBxZT12LnN0YXR1c1RleHR8fCJPSyIscnQ9bmV3IEUyKHYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHB0PWZ1bmN0aW9uIFFUZShjKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJM''@;'; put 'put ''Oi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSh2KXx8YS51cmw7cmV0dXJuIEQ9bmV3IEpSKHtoZWFkZXJzOnJ0LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OnFlLHVy''@;'; put 'put ''bDpwdH0pLER9LHJlPSgpPT57bGV0e2hlYWRlcnM6cWUsc3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fT1aKCksSnQ9bnVsbDtydCE9PXJ4Lk5vQ29udGVudCYmKEp0PXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09cnQmJihydD1KdD9y''@;'; put 'put ''eC5PazowKTtsZXQgdm49cnQ+PTIwMCYmcnQ8MzAwO2lmKCJqc29uIj09PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEp0KXtjb25zdCBDbj1KdDtKdD1KdC5yZXBsYWNlKEpUZSwiIik7dHJ5e0p0PSIiIT09SnQ/SlNPTi5wYXJzZShKdCk6bnVsbH1jYXRjaCh0bil7SnQ9Q24s''@;'; put 'put ''dm4mJih2bj0hMSxKdD17ZXJyb3I6dG4sdGV4dDpKdH0pfX12bj8oZi5uZXh0KG5ldyBROCh7Ym9keTpKdCxoZWFkZXJzOnFlLHN0YXR1czpydCxzdGF0dXNUZXh0OnB0LHVybDpkdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgbXkoe2Vycm9yOkp0LGhlYWRlcnM6cWUs''@;'; 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 ''aCIsY30oY218fHt9KTtmdW5jdGlvbiBlNyhjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIGlBZSguLi5jKXtjb25zdCBsPVtTVyxUY2UseGNlLHtwcm92aWRlOktSLHVzZUV4aXN0aW5nOnhjZX0se3Byb3ZpZGU6cVIsdXNlRXhpc3Rpbmc6VGNl''@;'; put 'put ''fSx7cHJvdmlkZTppeCx1c2VWYWx1ZTpyQWUsbXVsdGk6ITB9LHtwcm92aWRlOkVXLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpEY2UsdXNlQ2xhc3M6bkFlfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbiB5ZihjKXtyZXR1cm57''@;'; put 'put ''XHUwMjc1cHJvdmlkZXJzOmN9fShsKX1jb25zdCBJY2U9bmV3IFN0KCIiKTtsZXQgb0FlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W2lBZShlNyhjbS5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkljZSx1c2VGYWN0b3J5OkdUZX0se3Byb3ZpZGU6aXgsdXNlRXhpc3Rpbmc6SWNlLG11bHRpOiEwfV0pKV19KX19cmV0dXJuIGN9KSgpLFZjZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNl''@;'; put 'put ''dHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHth''@;'; put 'put ''fWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlz''@;'; put 'put ''LmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlz''@;'; put 'put ''LmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTVykseHIoSjgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46''@;'; put 'put ''InJvb3QifSl9fXJldHVybiBjfSkoKSxUVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOnty''@;'; put 'put ''ZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246''@;'; put 'put ''Ii9qb2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2gi''@;'; put 'put ''LG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZp''@;'; put 'put ''bml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3Rh''@;'; put 'put ''dGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0s''@;'; put 'put ''T3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWE/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3''@;'; put 'put ''aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlckJ5UGF0aChhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0''@;'; put 'put ''aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlck1lbWJlcnMoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy8ke2F9L21lbWJlcnNgLHt3aXRo''@;'; put 'put ''Q3JlZGVudGlhbHM6ITB9KX1nZXRBZG1pbkdyb3VwcyhhPTVlMyl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvZ3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTVykseHIoSjgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSx0bD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCxoLGYsdixNLEQpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy51c2VyU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNqc1NlcnZpY2U9Zix0aGlzLnNhc1ZpeWFTZXJ2aWNlPXYsdGhpcy5sb2dnZXJTZXJ2aWNlPU0sdGhpcy5yb3V0ZXI9RCx0aGlzLmxvYWRTdGFy''@;'; put 'put ''dHVwU2VydmljZUVtaXR0ZXI9bmV3IEtyLHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlcj1uZXcgS3IsdGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlcj1uZXcgS3IsdGhpcy5zYXNqc0FkYXB0ZXI9bmV3KG1jZSgpKSx0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2lu''@;'; put 'put ''PW5ldyBlaSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IGVpKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5z''@;'; put 'put ''YXNWaXlhU2VydmljZS5zZXR1cCgpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Mpe3N3aXRjaCh0aGlzLnNhc2pzQWRhcHRlcj1uZXcobWNlKCkpKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MpLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3Muc2VydmVyVHlwZSl7Y2FzZSBCMC5ZLlNhc1ZpeWE6dGhpcy5j''@;'; put 'put ''aGVja1ZpeWFEZXBsb3kodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncy5hcHBMb2N8fCIiKTticmVhaztjYXNlIEIwLlkuU2FzOTp0aGlzLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpO2JyZWFrO2Nhc2UgQjAuWS5TYXNqczp0aGlzLmNoZWNrU2FzanNEZXBsb3koKX0iUmVkaXJlY3Rl''@;'; put 'put ''ZCI9PT10aGlzLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJnRoaXMuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGE9PnthJiZ0aGlzLnNhc2pzQWRhcHRlci5sb2dJbigpLnRoZW4oZD0+e2NvbnNvbGUubG9nKCJyZXMiLGQpfSl9KX1lbHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJ''@;'; put 'put ''bmZvTW9kYWwoIkVycm9yIiwiQWRhcHRlciBzZXR0aW5ncyAoaW5kZXguaHRtbCkgYXJlIG5vdCBwcmVzZW50LiIpfXJlcXVlc3QoYSxkLGgsZil7cmV0dXJuIGZ8fChmPXt9KSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nUmVxdWVzdERhdGEoYT0ic2VydmljZXMvIithLGQpLG5ldyBQcm9taXNl''@;'; put 'put ''KCh2LE0pPT57dGhpcy5zYXNqc0FkYXB0ZXIucmVxdWVzdChhLGQsaCwoKT0+e3RoaXMuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKEQ9Pntjb25zdCBaPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChyZT0+cmUuc2VydmljZUxpbms9PT1hKTtpZighMT09PUQu''@;'; put 'put ''bG9naW4mJih0aGlzLnNob3VsZExvZ2luLm5leHQoITApLE0oe2FkYXB0ZXJSZXNwb25zZTohMSxsb2c6Wj8ubG9nRmlsZX0pKSwhdGhpcy51c2VyU2VydmljZS51c2VyJiZELk1GX0dFVFVTRVImJih0aGlzLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOkQuTUZfR0VUVVNFUn0pLEQuU1lT''@;'; put 'put ''U0lURSYmKHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXIuZW1pdChELlNZU1NJVEUpLHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmxlbmd0aD4wJiYodGhpcy5nZXRMaWNlbnNlU2l0ZUlkKCkuaW5jbHVkZXMoRC5TWVNTSVRFKXx8dGhpcy5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLmVtaXQoRC5T''@;'; put 'put ''WVNTSVRFKSkpLDQwND09PUQuc3RhdHVzJiZNKHthZGFwdGVyUmVzcG9uc2U6e01FU1NBR0U6RC5ib2R5fHwiU0FTIFJlc3BvbmRlZCB3aXRoIGVycm9yIn0sbG9nOlo/LmxvZ0ZpbGV9KSx0eXBlb2YgRC5zYXNqc0Fib3J0PCJ1Iil7Y29uc3QgcmU9RCxjZT1yZS5zYXNqc0Fib3J0WzBdLk1T''@;'; put 'put ''RyxiZT1yZS5zYXNqc0Fib3J0WzBdLk1BQztpZihjZS5pbmNsdWRlcygiRGF0YV9Db250cm9sbGVyX1NldHRpbmdzKFN0b3JlZFByb2Nlc3MpIG5vdCBmb3VuZCIpKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwo''@;'; put 'put ''Ii9kZXBsb3kiKSx2b2lkIE0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6Y2V9LGxvZzpaPy5sb2dGaWxlfSk7Zj8uc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbHx8dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoYS5yZXBsYWNlKCJzZXJ2aWNlcy8iLCIiKSxjZSx7U1lTV0FSTklO''@;'; put 'put ''R1RFWFQ6cmUuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOnJlLlNZU0VSUk9SVEVYVCxNQUM6YmV9KSxNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOmNlfSxsb2c6Wj8ubG9nRmlsZX0pfXYoe2FkYXB0ZXJSZXNwb25zZTpELGxvZzpaPy5sb2dGaWxlfSl9LEQ9Pntjb25zb2xlLmVycm9y''@;'; put 'put ''KEQpO2NvbnN0IFo9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKHJlPT5yZS5zZXJ2aWNlTGluaz09PWEpO2lmKEQuZXJyb3Ipe2xldCBjZSxyZT1ELmVycm9yLm1lc3NhZ2U7RC5lcnJvci5kZXRhaWxzJiZELmVycm9yLmRldGFpbHMubG9nJiYoY2U9RC5lcnJvci5k''@;'; put 'put ''ZXRhaWxzLmxvZyksKCFyZXx8cmUudHJpbSgpLmxlbmd0aDwxKSYmKHJlPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksZj8uc3VwcHJlc3NFcnJvckFib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEscmUse0xPRzpjZX0sIlJlcXVlc3QgZXJyb3IiKSxN''@;'; put 'put ''KHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOnJlfSxsb2c6Wj8ubG9nRmlsZX0pfU0oe2FkYXB0ZXJSZXNwb25zZTpELGxvZzpaPy5sb2dGaWxlfSl9KX0pfXVwbG9hZEZpbGUoYSxkLGgpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e3RoaXMuc2FzanNBZGFwdGVyLnVwbG9hZEZpbGUoYSxk''@;'; put 'put ''LGgpLnRoZW4oTT0+e2NvbnN0IEQ9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKFo9PiJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIj09PVouc2VydmljZUxpbmspO2Yoe2FkYXB0ZXJSZXNwb25zZTpNLGxvZzpEPy5sb2dGaWxlfSl9LE09Pntjb25zdCBEPXRoaXMu''@;'; put 'put ''c2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChaPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1aLnNlcnZpY2VMaW5rKTt2KHtyZXNwb25zZTpNLGxvZzpEPy5sb2dGaWxlfSl9KX0pfWxvZ2luKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29u''@;'; put 'put ''c3QgZj1oLmdldFNlcnZlclR5cGUoKT09PUIwLlkuU2FzanM/ImNsaWVudElEMSI6dm9pZCAwO3JldHVybiBoLnNhc2pzQWRhcHRlci5sb2dJbihhLGQsZikudGhlbih2PT4odi5pc0xvZ2dlZEluJiYoaC51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTp2LnVzZXJOYW1lfSxoLmFwcExvY0No''@;'; put 'put ''ZWNrUGVuZGluZyYmKGguY2hlY2tWaXlhRGVwbG95KGguZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIpLGguYXBwTG9jQ2hlY2tQZW5kaW5nPSExKSksaC5zaG91bGRMb2dpbi5uZXh0KCF2LmlzTG9nZ2VkSW4pLHYuaXNMb2dnZWRJbiksdj0+KGNvbnNvbGUuZXJyb3IodiksaC5zaG91''@;'; put 'put ''bGRMb2dpbi5uZXh0KCEwKSwhMSkpLmNhdGNoKHY9Pig0MDM9PT12JiZjb25zb2xlLmVycm9yKCJJbnZhbGlkIGhvc3QiKSwhMSkpfSkoKX1nZXRMaWNlbnNlU2l0ZUlkKCl7cmV0dXJuIHRoaXMubGljZW5zZV9zaXRlX2lkLnZhbHVlfHxbXX1zZXRMaWNlbnNlU2l0ZUlkKGEpe3RoaXMubGlj''@;'; put 'put ''ZW5zZV9zaXRlX2lkLm5leHQoIm9iamVjdCI9PXR5cGVvZiBhP2E6W2FdKX1jaGVja1Nhc2pzRGVwbG95KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1gJHthLmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNqc1NlcnZpY2Uu''@;'; put 'put ''Z2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUoaCkuc3Vic2NyaWJlKGY9PntmLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5zYXMiKT8oYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpOihhLmxvYWRTdGFydHVwU2Vy''@;'; put 'put ''dmljZUVtaXR0ZXIuZW1pdCgpLGEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKSl9LGY9PntmLmVycm9yLmluY2x1ZGVzKCJVbmF1dGhvcml6ZWQiKT8oYS5zaG91bGRMb2dpbi5uZXh0KCEwKSxhLnNob3VsZExvZ2luLnN1YnNjcmli''@;'; put 'put ''ZSh2PT57ITE9PT12JiZsb2NhdGlvbi5yZWxvYWQoKX0pKTpmLmVycm9yLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmKGNvbnNvbGUud2FybigiU0FTanMgU0FTIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksYS5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpfSl9KSgpfXNhc2pzTWFrZWRhdGFDaGVja2luZygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0''@;'; put 'put ''aW9uKihoLGYpe2EuY2hlY2tpbmdJbnRlcnZhbD1zZXRJbnRlcnZhbChlZShmdW5jdGlvbiooKXthLnNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpLnRoZW4odj0+e3YmJihjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksaCh2KSl9KS5jYXRjaCh2PT57Y2xlYXJJbnRlcnZhbChh''@;'; put 'put ''LmNoZWNraW5nSW50ZXJ2YWwpLGYodil9KX0pLDFlMyl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX0pKCl9c2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5l''@;'; put 'put ''dyBQcm9taXNlKChkLGgpPT57Y29uc3Qgdj1gJHthLmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNqc1NlcnZpY2UuZ2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUodikuc3Vic2NyaWJlKE09PntNLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5zYXMiKT9k''@;'; put 'put ''KCExKTpkKCEwKX0sTT0+e00uZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiZoKCl9KX0pfSkoKX1jaGVja1ZpeWFEZXBsb3koYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHYsZj0hMTtpZih0eXBlb2YgZC5zYXNqc0FkYXB0ZXIuZ2V0Rm9s''@;'; put 'put ''ZGVyPCJ1Iil7Y29uc3QgTT15aWVsZCBkLmFwcExvY0NoZWNrKGEpO2Y9TS5mb3VuZCx2PU0uZXJyb3JNZXNzYWdlfWVsc2UgZj15aWVsZCBkLmFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKTtmP2Qudml5YU1ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKE09PntNP2QubG9hZFN0YXJ0''@;'; put 'put ''dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCk6KGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0sTT0+e2NvbnNvbGUuZXJyb3IoIkVycm9yIHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBmaWxlOiBtYWtlZGF0YS5zYXMiLE0p''@;'; put 'put ''fSk6ZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCh2fHwiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLCBvciBBUEkgbm90IHJlYWNoYWJsZS4gQ2hlY2sgdGhlIEFEQVBURVIgY29uZmlndXJhdGlvbi4iKStgXG5BcHBMb2M6''@;'; put 'put ''ICR7YX1gKX0pKCl9dml5YU1ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCBmPWEuZ2V0U2FzanNDb25maWcoKSx2PWAke2YuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNWaXlh''@;'; put 'put ''U2VydmljZS5nZXRGb2xkZXJCeVBhdGgodikuc3Vic2NyaWJlKE09Pntjb25zdCBEPU0uaWQ7RHx8KGNvbnNvbGUuZXJyb3IoYEZvbGRlciBJRCBpcyBub3QgcHJlc2VudC4gJHt2fWAsZiksZCghMSkpLGEuc2FzVml5YVNlcnZpY2UuZ2V0Rm9sZGVyTWVtYmVycyhEKS5zdWJzY3JpYmUoWj0+''@;'; put 'put ''e1ouaXRlbXMuc29tZShyZT0+Im1ha2VkYXRhIj09PXJlLm5hbWUpP2QoITEpOmQoITApfSxaPT57Y29uc29sZS5lcnJvcigiRXJyb3IgZ2V0dGluZyBmb2xkZXIgY29udGVudHMiLFopLGgoKX0pfSxNPT57Y29uc29sZS53YXJuKCJFcnJvciBnZXR0aW5nIGZvbGRlciBpbmZvIixNKSxoKE0p''@;'; put 'put ''fSl9KX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1lZShmdW5jdGlvbiooZix2KXtsZXQgRCxNPSIiO3RyeXtEPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChaKXsiTG9naW5SZXF1aXJlZEVy''@;'; put 'put ''cm9yIj09PVoubmFtZT8oZC5hcHBMb2NDaGVja1BlbmRpbmc9ITAsZC5zaG91bGRMb2dpbi5uZXh0KCEwKSxmKHtmb3VuZDohMX0pKTpNPSJOb3RGb3VuZGVFcnJvciI9PT1aLm5hbWU/Wi5tZXNzYWdlOiJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBM''@;'; put 'put ''b2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURBUFRFUiBjb25maWd1cmF0aW9uLiJ9aWYoTS5sZW5ndGgpcmV0dXJuIGNvbnNvbGUud2FybihNKSxmKHtmb3VuZDohMSxlcnJvck1lc3NhZ2U6TX0pO2Yoe2ZvdW5kOiEwfSl9KTtyZXR1cm4gZnVuY3Rpb24oZix2KXtyZXR1''@;'; put 'put ''cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IHY9ITE7cmV0dXJuIGZldGNoKGAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHthfWApLnRoZW4oTT0+KDQwND09PU0u''@;'; put 'put ''c3RhdHVzJiYodj0hMCksTS50ZXh0KCkpKS50aGVuKE09PntpZih0aGlzLmlzTG9naW5SZXF1aXJlZChNKSl0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMCx0aGlzLnNob3VsZExvZ2luLm5leHQoITApO2Vsc2V7aWYodilyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBu''@;'; put 'put ''b3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7bGV0IEQ9bnVsbDt0cnl7RD1KU09OLnBhcnNlKE0pfWNhdGNoe31pZihEJiZELmh0''@;'; put 'put ''dHBTdGF0dXNDb2RlJiY0MDQ9PT1ELmh0dHBTdGF0dXNDb2RlKXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5h''@;'; put 'put ''dmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtkKCEwKX19KS5jYXRjaChNPT57ZCghMSl9KX0pfWlzTG9naW5SZXF1aXJlZChhKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25bXiJdKikuKj4vZ20udGVzdChhKX1sb2dvdXQoKXt0aGlzLnNhc2pzQWRhcHRlci5sb2dPdXQoKS50''@;'; put 'put ''aGVuKCgpPT57bG9jYXRpb24ucmVsb2FkKCl9KX1nZXRTYXNqc0NvbmZpZygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpfWdldFNhc1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCl9c2V0RGVidWdTdGF0ZShhKXt0''@;'; put 'put ''aGlzLnNhc2pzQWRhcHRlci5zZXREZWJ1Z1N0YXRlKGEpfWdldFNhc2pzSW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXJ9Z2V0U2VydmVyVHlwZSgpe2NvbnN0IGE9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKTtyZXR1cm4gYS5zZXJ2ZXJUeXBlP2Euc2VydmVy''@;'; put 'put ''VHlwZToiU0FTVklZQSJ9Z2V0RXhlY3V0aW9uUGF0aCgpe2NvbnN0IGE9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKTtzd2l0Y2goYS5zZXJ2ZXJUeXBlKXtjYXNlIEIwLlkuU2FzVml5YTpyZXR1cm4gYS5wYXRoU0FTVml5YTtjYXNlIEIwLlkuU2FzOTpyZXR1cm4gYS5wYXRo''@;'; put 'put ''U0FTOTtjYXNlIEIwLlkuU2FzanM6cmV0dXJuIGEucGF0aFNBU0pTfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihKOCkseHIoX1cpLHhyKHZjKSx4cihWY2UpLHhyKFRXKSx4cihTZCkseHIoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxTZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmln''@;'; put 'put ''Py5kZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGgg''@;'; put 'put ''b2YgT2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KHRsKTt0aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnPWEuZ2V0U2FzanNDb25maWcoKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoRHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJl''@;'; put 'put ''dHVybiBjfSkoKTtjb25zdCBCY2U9ZnVuY3Rpb24gcEFlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxlTD1mdW5jdGlvbiBnQWUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihCY2UoY1thXVswXSxsKSlyZXR1cm4gYTtyZXR1cm4tMX07dmFyIHZBZT1BcnJheS5wcm90''@;'; put 'put ''b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIHZ5KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fXZ5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBoQWUoKXt0aGlzLl9fZGF0YV9fPVtd''@;'; put 'put ''LHRoaXMuc2l6ZT0wfSx2eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGJBZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9ZUwobCxjKTtyZXR1cm4hKGE8MHx8KGE9PWwubGVuZ3RoLTE/bC5wb3AoKTp2QWUuY2FsbChsLGEsMSksLS10aGlzLnNpemUsMCkpfSx2eS5wcm90b3R5cGUuZ2V0''@;'; put 'put ''PWZ1bmN0aW9uIF9BZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9ZUwobCxjKTtyZXR1cm4gYTwwP3ZvaWQgMDpsW2FdWzFdfSx2eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIENBZShjKXtyZXR1cm4gZUwodGhpcy5fX2RhdGFfXyxjKT4tMX0sdnkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBN''@;'; put 'put ''QWUoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fLGQ9ZUwoYSxjKTtyZXR1cm4gZDwwPygrK3RoaXMuc2l6ZSxhLnB1c2goW2MsbF0pKTphW2RdWzFdPWwsdGhpc307Y29uc3QgdEw9dnksamNlPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3Qm''@;'; put 'put ''Jmdsb2JhbDt2YXIgUEFlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGY7Y29uc3QgdnA9amNlfHxQQWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksdW09dnAuU3ltYm9sO3ZhciB6Y2U9T2JqZWN0LnByb3RvdHlwZSxOQWU9emNlLmhh''@;'; put 'put ''c093blByb3BlcnR5LFZBZT16Y2UudG9TdHJpbmcsYXg9dW0/dW0udG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBVQWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgVWNlPXVtP3VtLnRvU3RyaW5nVGFnOnZvaWQgMDtjb25zdCBieT1mdW5jdGlvbiAkQWUoYyl7cmV0dXJuIG51bGw9PWM/''@;'; put 'put ''dm9pZCAwPT09Yz8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6VWNlJiZVY2UgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIEJBZShjKXt2YXIgbD1OQWUuY2FsbChjLGF4KSxhPWNbYXhdO3RyeXtjW2F4XT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPVZBZS5jYWxsKGMp''@;'; put 'put ''O3JldHVybiBkJiYobD9jW2F4XT1hOmRlbGV0ZSBjW2F4XSksaH0oYyk6ZnVuY3Rpb24gWkFlKGMpe3JldHVybiBVQWUuY2FsbChjKX0oYyl9LG94PWZ1bmN0aW9uIEtBZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sWmNl''@;'; put 'put ''PWZ1bmN0aW9uIGVrZShjKXtpZighb3goYykpcmV0dXJuITE7dmFyIGw9YnkoYyk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09bHx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09bHx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBQcm94eV0iPT1sfSxBVz12''@;'; put 'put ''cFsiX19jb3JlLWpzX3NoYXJlZF9fIl07dmFyIFdjZT1mdW5jdGlvbigpe3ZhciBjPS9bXi5dKyQvLmV4ZWMoQVcmJkFXLmtleXMmJkFXLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gYz8iU3ltYm9sKHNyYylfMS4iK2M6IiJ9KCk7dmFyIGFrZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmc7Y29uc3QgdDc9ZnVuY3Rpb24gb2tlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gYWtlLmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgbGtlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGZrZT1SZWdFeHAoIl4iK0Z1bmN0aW9u''@;'; put 'put ''LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEu''@;'; put 'put ''Kj8iKSsiJCIpO2NvbnN0IGdrZT1mdW5jdGlvbiBwa2UoYyl7cmV0dXJuISghb3goYyl8fGZ1bmN0aW9uIG5rZShjKXtyZXR1cm4hIVdjZSYmV2NlIGluIGN9KGMpKSYmKFpjZShjKT9ma2U6bGtlKS50ZXN0KHQ3KGMpKX0sbjc9ZnVuY3Rpb24gYmtlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gbWtl''@;'; put 'put ''KGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gZ2tlKGEpP2E6dm9pZCAwfSxzeD1uNyh2cCwiTWFwIiksbHg9bjcoT2JqZWN0LCJjcmVhdGUiKTt2YXIgVGtlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIElrZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5O2Z1bmN0aW9uIHl5KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fXl5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB3a2UoKXt0aGlzLl9fZGF0YV9fPWx4P2x4KG51bGwp''@;'; put 'put ''Ont9LHRoaXMuc2l6ZT0wfSx5eS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFNrZShjKXt2YXIgbD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0seXkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBBa2UoYyl7dmFyIGw9dGhp''@;'; put 'put ''cy5fX2RhdGFfXztpZihseCl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiBUa2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSx5eS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJrZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3Jl''@;'; put 'put ''dHVybiBseD92b2lkIDAhPT1sW2NdOklrZS5jYWxsKGwsYyl9LHl5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gUGtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1seCYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRl''@;'; put 'put ''ZmluZWRfXyI6bCx0aGlzfTtjb25zdCBZY2U9eXksbkw9ZnVuY3Rpb24gamtlKGMsbCl7dmFyIGE9Yy5fX2RhdGFfXztyZXR1cm4gZnVuY3Rpb24gVmtlKGMpe3ZhciBsPXR5cGVvZiBjO3JldHVybiJzdHJpbmciPT1sfHwibnVtYmVyIj09bHx8InN5bWJvbCI9PWx8fCJib29sZWFuIj09bD8i''@;'; put 'put ''X19wcm90b19fIiE9PWM6bnVsbD09PWN9KGwpP2FbInN0cmluZyI9PXR5cGVvZiBsPyJzdHJpbmciOiJoYXNoIl06YS5tYXB9O2Z1bmN0aW9uIF95KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRb''@;'; put 'put ''MF0sZFsxXSl9fV95LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBIa2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBZY2UsbWFwOm5ldyhzeHx8dEwpLHN0cmluZzpuZXcgWWNlfX0sX3kucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB6a2UoYyl7dmFyIGw9bkwodGhp''@;'; put 'put ''cyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sX3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiBaa2UoYyl7cmV0dXJuIG5MKHRoaXMsYykuZ2V0KGMpfSxfeS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFlrZShjKXtyZXR1cm4gbkwodGhpcyxjKS5oYXMoYyl9LF95LnBy''@;'; put 'put ''b3RvdHlwZS5zZXQ9ZnVuY3Rpb24gJGtlKGMsbCl7dmFyIGE9bkwodGhpcyxjKSxkPWEuc2l6ZTtyZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3Qga1c9X3k7ZnVuY3Rpb24gd3koYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgdEwoYyk7dGhp''@;'; put 'put ''cy5zaXplPWwuc2l6ZX13eS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gRUFlKCl7dGhpcy5fX2RhdGFfXz1uZXcgdEwsdGhpcy5zaXplPTB9LHd5LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gQUFlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''aXplPWwuc2l6ZSxhfSx3eS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIERBZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoYyl9LHd5LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUkFlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sd3kucHJvdG90eXBlLnNldD1mdW5jdGlvbiBY''@;'; put 'put ''a2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiB0TCl7dmFyIGQ9YS5fX2RhdGFfXztpZighc3h8fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGtXKGQpfXJldHVybiBh''@;'; put 'put ''LnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgUWtlPXd5O3ZhciBuRGU9ZnVuY3Rpb24oKXt0cnl7dmFyIGM9bjcoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgR2NlPW5EZSwkY2U9ZnVuY3Rpb24gckRl''@;'; put 'put ''KGMsbCxhKXsiX19wcm90b19fIj09bCYmR2NlP0djZShjLGwse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmEsd3JpdGFibGU6ITB9KTpjW2xdPWF9O3ZhciBhRGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBLY2U9ZnVuY3Rpb24gb0RlKGMsbCxh''@;'; put 'put ''KXt2YXIgZD1jW2xdOyghYURlLmNhbGwoYyxsKXx8IUJjZShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiYkY2UoYyxsLGEpfSxyTD1mdW5jdGlvbiBzRGUoYyxsLGEsZCl7dmFyIGg9IWE7YXx8KGE9e30pO2Zvcih2YXIgZj0tMSx2PWwubGVuZ3RoOysrZjx2Oyl7dmFyIE09bFtmXSxE''@;'; put 'put ''PWQ/ZChhW01dLGNbTV0sTSxhLGMpOnZvaWQgMDt2b2lkIDA9PT1EJiYoRD1jW01dKSxoPyRjZShhLE0sRCk6S2NlKGEsTSxEKX1yZXR1cm4gYX0sQ3k9ZnVuY3Rpb24gdURlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LHFjZT1mdW5jdGlvbiBoRGUoYyl7cmV0dXJu''@;'; put 'put ''IEN5KGMpJiYiW29iamVjdCBBcmd1bWVudHNdIj09YnkoYyl9O3ZhciBYY2U9T2JqZWN0LnByb3RvdHlwZSxmRGU9WGNlLmhhc093blByb3BlcnR5LHBEZT1YY2UucHJvcGVydHlJc0VudW1lcmFibGUsZ0RlPXFjZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP3FjZTpmdW5jdGlv''@;'; put 'put ''bihjKXtyZXR1cm4gQ3koYykmJmZEZS5jYWxsKGMsImNhbGxlZSIpJiYhcERlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IG1EZT1nRGUsU3k9QXJyYXkuaXNBcnJheTt2YXIgSmNlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMs''@;'; put 'put ''UWNlPUpjZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGV1ZT1RY2UmJlFjZS5leHBvcnRzPT09SmNlP3ZwLkJ1ZmZlcjp2b2lkIDA7Y29uc3QgdHVlPShldWU/ZXVlLmlzQnVmZmVyOnZvaWQgMCl8fGZ1bmN0aW9uIGJEZSgpe3Jl''@;'; put 'put ''dHVybiExfTt2YXIgTURlPS9eKD86MHxbMS05XVxkKikkLztjb25zdCBFRGU9ZnVuY3Rpb24geERlKGMsbCl7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISEobD1sPz85MDA3MTk5MjU0NzQwOTkxKSYmKCJudW1iZXIiPT1hfHwic3ltYm9sIiE9YSYmTURlLnRlc3QoYykpJiZjPi0xJiZjJTE9PTAm''@;'; put 'put ''JmM8bH0sbnVlPWZ1bmN0aW9uIEFEZShjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMmJmM+LTEmJmMlMT09MCYmYzw9OTAwNzE5OTI1NDc0MDk5MX07dmFyIGJjPXt9O2JjWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1iY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09YmNbIltvYmplY3Qg''@;'; put 'put ''SW50OEFycmF5XSJdPWJjWyJbb2JqZWN0IEludDE2QXJyYXldIl09YmNbIltvYmplY3QgSW50MzJBcnJheV0iXT1iY1siW29iamVjdCBVaW50OEFycmF5XSJdPWJjWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWJjWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPWJjWyJbb2JqZWN0IFVp''@;'; put 'put ''bnQzMkFycmF5XSJdPSEwLGJjWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1iY1siW29iamVjdCBBcnJheV0iXT1iY1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1iY1siW29iamVjdCBCb29sZWFuXSJdPWJjWyJbb2JqZWN0IERhdGFWaWV3XSJdPWJjWyJbb2JqZWN0IERhdGVdIl09YmNbIltvYmpl''@;'; put 'put ''Y3QgRXJyb3JdIl09YmNbIltvYmplY3QgRnVuY3Rpb25dIl09YmNbIltvYmplY3QgTWFwXSJdPWJjWyJbb2JqZWN0IE51bWJlcl0iXT1iY1siW29iamVjdCBPYmplY3RdIl09YmNbIltvYmplY3QgUmVnRXhwXSJdPWJjWyJbb2JqZWN0IFNldF0iXT1iY1siW29iamVjdCBTdHJpbmddIl09YmNb''@;'; put 'put ''IltvYmplY3QgV2Vha01hcF0iXT0hMTtjb25zdCBEVz1mdW5jdGlvbiB0SWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpfX07dmFyIHJ1ZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGN4PXJ1ZSYmIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLElXPWN4JiZjeC5leHBvcnRzPT09cnVlJiZqY2UucHJvY2Vzcztjb25zdCBNeT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gY3gmJmN4LnJlcXVpcmUmJmN4LnJlcXVpcmUoInV0aWwiKS50eXBlc3x8SVcm''@;'; put 'put ''JklXLmJpbmRpbmcmJklXLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBpdWU9TXkmJk15LmlzVHlwZWRBcnJheTtjb25zdCBhSWU9aXVlP0RXKGl1ZSk6ZnVuY3Rpb24gUURlKGMpe3JldHVybiBDeShjKSYmbnVlKGMubGVuZ3RoKSYmISFiY1tieShjKV19O3ZhciBzSWU9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBhdWU9ZnVuY3Rpb24gbEllKGMsbCl7dmFyIGE9U3koYyksZD0hYSYmbURlKGMpLGg9IWEmJiFkJiZ0dWUoYyksZj0hYSYmIWQmJiFoJiZhSWUoYyksdj1hfHxkfHxofHxmLE09dj9mdW5jdGlvbiBsRGUoYyxsKXtmb3IodmFyIGE9LTEs''@;'; put 'put ''ZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLEQ9TS5sZW5ndGg7Zm9yKHZhciBaIGluIGMpKGx8fHNJZS5jYWxsKGMsWikpJiYoIXZ8fCEoImxlbmd0aCI9PVp8fGgmJigib2Zmc2V0Ij09Wnx8InBhcmVudCI9PVopfHxmJiYoImJ1ZmZl''@;'; put 'put ''ciI9PVp8fCJieXRlTGVuZ3RoIj09Wnx8ImJ5dGVPZmZzZXQiPT1aKXx8RURlKFosRCkpKSYmTS5wdXNoKFopO3JldHVybiBNfTt2YXIgY0llPU9iamVjdC5wcm90b3R5cGU7Y29uc3QgUlc9ZnVuY3Rpb24gdUllKGMpe3ZhciBsPWMmJmMuY29uc3RydWN0b3I7cmV0dXJuIGM9PT0oImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGwmJmwucHJvdG90eXBlfHxjSWUpfSxvdWU9ZnVuY3Rpb24gZEllKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwoYSkpfX0sZkllPW91ZShPYmplY3Qua2V5cyxPYmplY3QpO3ZhciBnSWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25z''@;'; put 'put ''dCBzdWU9ZnVuY3Rpb24gYkllKGMpe3JldHVybiBudWxsIT1jJiZudWUoYy5sZW5ndGgpJiYhWmNlKGMpfSxMVz1mdW5jdGlvbiB5SWUoYyl7cmV0dXJuIHN1ZShjKT9hdWUoYyk6ZnVuY3Rpb24gbUllKGMpe2lmKCFSVyhjKSlyZXR1cm4gZkllKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBP''@;'; put 'put ''YmplY3QoYykpZ0llLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHhJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IFRJZT1mdW5jdGlvbiBFSWUoYyl7aWYoIW94KGMpKXJldHVybiBmdW5jdGlvbiBDSWUoYyl7''@;'; put 'put ''dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9UlcoYyksYT1bXTtmb3IodmFyIGQgaW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXhJZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LE9XPWZ1bmN0''@;'; put 'put ''aW9uIEFJZShjKXtyZXR1cm4gc3VlKGMpP2F1ZShjLCEwKTpUSWUoYyl9O3ZhciBsdWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxjdWU9bHVlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5v''@;'; put 'put ''ZGVUeXBlJiZtb2R1bGUsdXVlPWN1ZSYmY3VlLmV4cG9ydHM9PT1sdWU/dnAuQnVmZmVyOnZvaWQgMCxkdWU9dXVlP3V1ZS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgaHVlPWZ1bmN0aW9uIE5JZSgpe3JldHVybltdfTt2YXIgQkllPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1l''@;'; put 'put ''cmFibGUsZnVlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsakllPWZ1ZT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gRkllKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIHY9''@;'; put 'put ''Y1thXTtsKHYsYSxjKSYmKGZbaCsrXT12KX1yZXR1cm4gZn0oZnVlKGMpLGZ1bmN0aW9uKGwpe3JldHVybiBCSWUuY2FsbChjLGwpfSkpfTpodWU7Y29uc3QgUFc9akllLHB1ZT1mdW5jdGlvbiBaSWUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2gr''@;'; put 'put ''YV09bFthXTtyZXR1cm4gY30sZ3VlPW91ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt2YXIgR0llPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPVtdO2M7KXB1ZShsLFBXKGMpKSxjPWd1ZShjKTtyZXR1cm4gbH06aHVlO2NvbnN0IG11''@;'; put 'put ''ZT1HSWUsdnVlPWZ1bmN0aW9uIHFJZShjLGwsYSl7dmFyIGQ9bChjKTtyZXR1cm4gU3koYyk/ZDpwdWUoZCxhKGMpKX0sSkllPWZ1bmN0aW9uIFhJZShjKXtyZXR1cm4gdnVlKGMsTFcsUFcpfSxlUmU9ZnVuY3Rpb24gUUllKGMpe3JldHVybiB2dWUoYyxPVyxtdWUpfSxGVz1uNyh2cCwiRGF0''@;'; put 'put ''YVZpZXciKSxIVz1uNyh2cCwiUHJvbWlzZSIpLE5XPW43KHZwLCJTZXQiKSxWVz1uNyh2cCwiV2Vha01hcCIpO3ZhciBidWU9IltvYmplY3QgTWFwXSIseXVlPSJbb2JqZWN0IFByb21pc2VdIixfdWU9IltvYmplY3QgU2V0XSIsd3VlPSJbb2JqZWN0IFdlYWtNYXBdIixDdWU9IltvYmplY3Qg''@;'; put 'put ''RGF0YVZpZXddIixvUmU9dDcoRlcpLHNSZT10NyhzeCksbFJlPXQ3KEhXKSxjUmU9dDcoTlcpLHVSZT10NyhWVykscjc9Ynk7KEZXJiZyNyhuZXcgRlcobmV3IEFycmF5QnVmZmVyKDEpKSkhPUN1ZXx8c3gmJnI3KG5ldyBzeCkhPWJ1ZXx8SFcmJnI3KEhXLnJlc29sdmUoKSkhPXl1ZXx8Tlcm''@;'; put 'put ''JnI3KG5ldyBOVykhPV91ZXx8VlcmJnI3KG5ldyBWVykhPXd1ZSkmJihyNz1mdW5jdGlvbihjKXt2YXIgbD1ieShjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT90NyhhKToiIjtpZihkKXN3aXRjaChkKXtjYXNlIG9SZTpyZXR1cm4gQ3VlO2Nhc2Ug''@;'; put 'put ''c1JlOnJldHVybiBidWU7Y2FzZSBsUmU6cmV0dXJuIHl1ZTtjYXNlIGNSZTpyZXR1cm4gX3VlO2Nhc2UgdVJlOnJldHVybiB3dWV9cmV0dXJuIGx9KTtjb25zdCBCVz1yNzt2YXIgaFJlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgU3VlPXZwLlVpbnQ4QXJyYXksalc9''@;'; put 'put ''ZnVuY3Rpb24gbVJlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBTdWUobCkuc2V0KG5ldyBTdWUoYykpLGx9O3ZhciB5UmU9L1x3KiQvO3ZhciBNdWU9dW0/dW0ucHJvdG90eXBlOnZvaWQgMCx4dWU9TXVlP011ZS52YWx1ZU9mOnZvaWQgMDtj''@;'; put 'put ''b25zdCBZUmU9ZnVuY3Rpb24gV1JlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4galcoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgZCgrYyk7Y2FzZSJb''@;'; put 'put ''b2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIHZSZShjLGwpe3ZhciBhPWw/alcoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNl''@;'; put 'put ''IltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2Ui''@;'; put 'put ''W29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBNUmUoYyxsKXt2YXIgYT1sP2pXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5sZW5ndGgpfShjLGEpO2Nhc2Ui''@;'; put 'put ''W29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24gX1JlKGMpe3ZhciBsPW5ldyBjLmNv''@;'; put 'put ''bnN0cnVjdG9yKGMuc291cmNlLHlSZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBDUmUoYyl7cmV0dXJuIHh1ZT9PYmplY3QoeHVlLmNhbGwoYykpOnt9fShjKX19O3ZhciBFdWU9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZSxHUmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighb3gobCkpcmV0dXJue307aWYoRXVlKXJldHVybiBFdWUobCk7Yy5wcm90b3R5cGU9bDt2YXIgYT1uZXcgYztyZXR1cm4gYy5wcm90b3R5cGU9dm9pZCAwLGF9fSgpO2NvbnN0ICRS''@;'; put 'put ''ZT1HUmU7dmFyIFR1ZT1NeSYmTXkuaXNNYXA7Y29uc3QgdExlPVR1ZT9EVyhUdWUpOmZ1bmN0aW9uIEpSZShjKXtyZXR1cm4gQ3koYykmJiJbb2JqZWN0IE1hcF0iPT1CVyhjKX07dmFyIEF1ZT1NeSYmTXkuaXNTZXQ7Y29uc3Qgb0xlPUF1ZT9EVyhBdWUpOmZ1bmN0aW9uIHJMZShjKXtyZXR1''@;'; put 'put ''cm4gQ3koYykmJiJbb2JqZWN0IFNldF0iPT1CVyhjKX07dmFyIGt1ZT0iW29iamVjdCBBcmd1bWVudHNdIixEdWU9IltvYmplY3QgRnVuY3Rpb25dIixJdWU9IltvYmplY3QgT2JqZWN0XSIsb2M9e307b2Nba3VlXT1vY1siW29iamVjdCBBcnJheV0iXT1vY1siW29iamVjdCBBcnJheUJ1ZmZl''@;'; put 'put ''cl0iXT1vY1siW29iamVjdCBEYXRhVmlld10iXT1vY1siW29iamVjdCBCb29sZWFuXSJdPW9jWyJbb2JqZWN0IERhdGVdIl09b2NbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW9jWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vY1siW29iamVjdCBJbnQ4QXJyYXldIl09b2NbIltvYmplY3Qg''@;'; put 'put ''SW50MTZBcnJheV0iXT1vY1siW29iamVjdCBJbnQzMkFycmF5XSJdPW9jWyJbb2JqZWN0IE1hcF0iXT1vY1siW29iamVjdCBOdW1iZXJdIl09b2NbSXVlXT1vY1siW29iamVjdCBSZWdFeHBdIl09b2NbIltvYmplY3QgU2V0XSJdPW9jWyJbb2JqZWN0IFN0cmluZ10iXT1vY1siW29iamVjdCBT''@;'; put 'put ''eW1ib2xdIl09b2NbIltvYmplY3QgVWludDhBcnJheV0iXT1vY1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1vY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1vY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvY1siW29iamVjdCBFcnJvcl0iXT1vY1tEdWVdPW9jWyJbb2JqZWN0''@;'; put 'put ''IFdlYWtNYXBdIl09ITE7Y29uc3QgTExlPWZ1bmN0aW9uIGlMKGMsbCxhLGQsaCxmKXt2YXIgdixNPTEmbCxEPTImbCxaPTQmbDtpZihhJiYodj1oP2EoYyxkLGgsZik6YShjKSksdm9pZCAwIT09dilyZXR1cm4gdjtpZighb3goYykpcmV0dXJuIGM7dmFyIHJlPVN5KGMpO2lmKHJlKXtpZih2''@;'; put 'put ''PWZ1bmN0aW9uIGZSZShjKXt2YXIgbD1jLmxlbmd0aCxhPW5ldyBjLmNvbnN0cnVjdG9yKGwpO3JldHVybiBsJiYic3RyaW5nIj09dHlwZW9mIGNbMF0mJmhSZS5jYWxsKGMsImluZGV4IikmJihhLmluZGV4PWMuaW5kZXgsYS5pbnB1dD1jLmlucHV0KSxhfShjKSwhTSlyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gT0llKGMsbCl7dmFyIGE9LTEsZD1jLmxlbmd0aDtmb3IobHx8KGw9QXJyYXkoZCkpOysrYTxkOylsW2FdPWNbYV07cmV0dXJuIGx9KGMsdil9ZWxzZXt2YXIgY2U9QlcoYyksYmU9Y2U9PUR1ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09Y2U7aWYodHVlKGMpKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBSSWUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1kdWU/ZHVlKGEpOm5ldyBjLmNvbnN0cnVjdG9yKGEpO3JldHVybiBjLmNvcHkoZCksZH0oYyxNKTtpZihjZT09SXVlfHxjZT09a3VlfHxiZSYmIWgpe2lmKHY9RHx8YmU/e306ZnVuY3Rpb24g''@;'; put 'put ''S1JlKGMpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBjLmNvbnN0cnVjdG9yfHxSVyhjKT97fTokUmUoZ3VlKGMpKX0oYyksIU0pcmV0dXJuIEQ/ZnVuY3Rpb24gJEllKGMsbCl7cmV0dXJuIHJMKGMsbXVlKGMpLGwpfShjLGZ1bmN0aW9uIGtJZShjLGwpe3JldHVybiBjJiZyTChsLE9XKGwp''@;'; put 'put ''LGMpfSh2LGMpKTpmdW5jdGlvbiB6SWUoYyxsKXtyZXR1cm4gckwoYyxQVyhjKSxsKX0oYyxmdW5jdGlvbiBfSWUoYyxsKXtyZXR1cm4gYyYmckwobCxMVyhsKSxjKX0odixjKSl9ZWxzZXtpZighb2NbY2VdKXJldHVybiBoP2M6e307dj1ZUmUoYyxjZSxNKX19Znx8KGY9bmV3IFFrZSk7dmFy''@;'; put 'put ''IEVlPWYuZ2V0KGMpO2lmKEVlKXJldHVybiBFZTtmLnNldChjLHYpLG9MZShjKT9jLmZvckVhY2goZnVuY3Rpb24ocnQpe3YuYWRkKGlMKHJ0LGwsYSxydCxjLGYpKX0pOnRMZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHJ0LHB0KXt2LnNldChwdCxpTChydCxsLGEscHQsYyxmKSl9KTt2YXIg''@;'; put 'put ''cWU9cmU/dm9pZCAwOihaP0Q/ZVJlOkpJZTpEP09XOkxXKShjKTtyZXR1cm4gZnVuY3Rpb24gZURlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoOysrYTxkJiYhMSE9PWwoY1thXSxhLGMpOyk7fShxZXx8YyxmdW5jdGlvbihydCxwdCl7cWUmJihydD1jW3B0PXJ0XSks''@;'; put 'put ''S2NlKHYscHQsaUwocnQsbCxhLHB0LGMsZikpfSksdn0sYUw9ZnVuY3Rpb24gRkxlKGMpe3JldHVybiBMTGUoYyw1KX07dmFyIEhMZT15KDc4ODU1KTtsZXQgR3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUw''@;'; put 'put ''LHRoaXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERh''@;'; put 'put ''dGU/YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IEQ9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nh''@;'; put 'put ''c2UiZGF5cyI6e2xldCBaPUQvODY0ZTU7cmV0dXJuIFo9TWF0aC5hYnMoWiksWj1NYXRoLmZsb29yKFopLFp9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gRC8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNl''@;'; put 'put ''RmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBNPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gTSs9NjAqbmV3IERhdGUoTSkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoTSl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXtsZXQg''@;'; put 'put ''aD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSx2PWQuc3BsaXQoIi4iKVsxXSxNPWYrIkFsbCI7YVtmXSYmKGFbTV18fChhW01dPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbTV0pLGgubGVuZ3RoPjAmJihhW2Zd''@;'; put 'put ''PWFbZl0uZmlsdGVyKHY/RD0+RFt2XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6RD0+RC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57ZltoXS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3BsYXlM''@;'; put 'put ''aWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2grKylh''@;'; put 'put ''W2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9yRWFj''@;'; put 'put ''aChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRlIGQu''@;'; put 'put ''aW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29udmVy''@;'; put 'put ''dE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0aDwy''@;'; put 'put ''PyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgdiBvZiBkKWRlbGV0ZSBmW3ZdO3JldHVybiBITGUoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0IGg9''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9uZSIs''@;'; put 'put ''ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2FzZSJz''@;'; put 'put ''dHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiBhTChhKX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSx1MT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''LGYsdixNKXt0aGlzLmxvZ2dlclNlcnZpY2U9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb249ITEsdGhpcy5saWNlbnNl''@;'; put 'put ''S2V5RGF0YT1udWxsLHRoaXMuX2xpY2VuY2VTdGF0ZT15Vyx0aGlzLmFsbEZlYXR1cmVzT249e3ZpZXdlcl9yb3dzX2FsbG93ZWQ6MS8wLGVkaXRvcl9yb3dzX2FsbG93ZWQ6MS8wLHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MS8wLHN1Ym1pdF9yb3dzX2xp''@;'; put 'put ''bWl0OjEvMCx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDoxLzAsdmlld2JveF9saW1pdDoxLzAsbGluZWFnZV9kYWlseV9saW1pdDoxLzAsdmlld2JveDohMCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfSx0aGlzLmZyZWVUaWVyTGljZW5jZURhdGE9e2RlbW86ITAs''@;'; put 'put ''aG90X2xpY2Vuc2Vfa2V5OnRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXksdXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZHx8MSx2YWxpZF91bnRpbDpPbygpLmFkZCgxLCJ5ZWFyIikuZm9ybWF0KCJZ''@;'; put 'put ''WVlZLU1NLUREIiksc2l0ZV9pZDoiIixzaXRlX2lkX211bHRpcGxlOltdfSx0aGlzLmlzQXBwQWN0aXZhdGVkPW5ldyBlaShudWxsKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5PW5ldyBlaSghMSksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyPW5ldyBlaSghMSksdGhpcy5hcHBMb2NrZWQ9''@;'; put 'put ''bmV3IGVpKCExKSx0aGlzLmxpY2Vuc2VFeHBpcmVzSW5EYXlzPW5ldyBlaShudWxsKSx0aGlzLmlzQXBwRnJlZVRpZXI9bmV3IGVpKCExKSx0aGlzLmxpY2VuY2VQcm9ibGVtPW5ldyBlaShudWxsKSx0aGlzLmhvdF9saWNlbnNlX2tleT1uZXcgZWkodm9pZCAwKSx0aGlzLmxpY2VuY2VTdGF0''@;'; put 'put ''ZT1uZXcgZWkodGhpcy5fbGljZW5jZVN0YXRlKSx0aGlzLnNhc1NlcnZpY2UuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoRD0+e2lmKG51bGwhPT10aGlzLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhdGhpcy5pc0FwcEZyZWVUaWVyLnZhbHVlKXtjb25zdCBaPWAvbGljZW5zaW5n''@;'; put 'put ''L2tleT9lcnJvcj1taXNzbWF0Y2gmbWlzc21hdGNoSWQ9JHtEfSZmb3JjZT10cnVlYDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoWiksdGhpcy5kZWFjdGl2YXRlQXBwKFopfX0pfWFjdGl2YXRpb24oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5mcmVlVGllckxpY2Vu''@;'; put 'put ''Y2VEYXRhLmhvdF9saWNlbnNlX2tleT1kLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHlpZWxkIGQuc2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhhKSx5aWVsZCBkLmxpY2Vuc2luZyhhLmdsb2J2YXJzLGEuU1lTU0lURSl9KSgpfXNldFN0YXJ0''@;'; put 'put ''dXBzZXJ2aWNlUnVsZXMoYSl7dGhpcy5fbGljZW5jZVN0YXRlLmVkaXRSZWNvcmQ9IllFUyIhPT1hLmdsb2J2YXJzWzBdLkRDX1JFU1RSSUNUX0VESVRSRUNPUkR9bGljZW5zaW5nKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoIWF8fCFhWzBdKXtjb25zdCB2PSdF''@;'; put 'put ''cnJvciBnZXR0aW5nICJHbG9idmFycyIgZnJvbSBzdGFydHVwc2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKHYpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRl''@;'; put 'put ''dGFpbHM9JHtidG9hKHYpfWApfWxldCBmPWFbMF07cmV0dXJuIHZvaWQgMD09PWYuTElDRU5DRV9LRVl8fHZvaWQgMD09PWYuQUNUSVZBVElPTl9LRVl8fG51bGw9PWYuUkVHSVNURVJDT1VOVHx8bnVsbD09Zi5JU1JFR0lTVEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMg''@;'; put 'put ''YXJlIG5vdCBwcmVzZW50IiksaC5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZSIpKTpmLkxJQ0VOQ0VfS0VZJiZm''@;'; put 'put ''LkFDVElWQVRJT05fS0VZPyhoLmxpY2VuY2VLZXk9Zi5MSUNFTkNFX0tFWSxoLmFjdGl2YXRpb25LZXk9Zi5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGguZGVjcnlwdExpY2Vuc2VLZXkoZi5MSUNFTkNFX0tFWSxmLkFDVElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9ZWUo''@;'; put 'put ''ZnVuY3Rpb24qKE0pe3lpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKE0sZixkKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0pe2NvbnN0IEQ9YEVycm9yIGRlY3J5cHRpbmcg''@;'; put 'put ''bGljZW5zZSBrZXkuICR7TX1gO2NvbnNvbGUuZXJyb3IoRCk7Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShEKX0mZm9yY2U9dHJ1ZWA7aC5saWNlbmNlUHJvYmxlbS5uZXh0KFopLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoWiksc2V0VGltZW91''@;'; put 'put ''dCgoKT0+aC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCwhMCkpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSk6eWllbGQgaC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2Vu''@;'; put 'put ''Y2VEYXRhLGYsZCl9KSgpfWFwcGxpY2F0aW9uQWN0aXZhdGlvbihhLGQsaCxmKXtmfHwoZj0hMSksdGhpcy5zZXRTaXRlSWQoYSksIWEuZGVtbyYmZCYmaCYmdGhpcy5oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZik7bGV0IHY9dm9pZCAwIT09YS5ob3RfbGljZW5zZV9rZXk/YS5ob3Rf''@;'; put 'put ''bGljZW5zZV9rZXk6dGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWU7dnx8KHY9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSksdGhpcy5ob3RfbGljZW5zZV9rZXkubmV4dCh2KSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJnRoaXMu''@;'; put 'put ''aGFuZGxlVXNlcnNBbGxvd2VkKGEpLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhKSx3aW5kb3cuYXBwaW5mbygpO2NvbnN0e2V4cGlyeV9kYXRlOk0sZGF5c1RvRXhwaXJ5OkR9PXRoaXMuY2FsY3VsYXRlRXhwaXJ5KGEpO2lmKHdpbmRvdy5saWNl''@;'; put 'put ''bnNlRXhwaXJlc0luPUQsdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cy5uZXh0KEQpLEQ8PTApcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxpY2Vuc2Uga2V5IGhhcyBleHBpcmVkIiksdm9pZChkJiZoJiZ0aGlzLmhhbmRsZUV4cGlyeShNLGQsaCxmKSk7dGhpcy5pc0FwcEZyZWVUaWVyLm5leHQo''@;'; put 'put ''ISFhLmRlbW8pLGQmJnRoaXMuaGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsZiksdGhpcy5kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSksdGhpcy5saWNlbmNlU3RhdGUubmV4dCh0aGlzLl9saWNlbmNlU3RhdGUpfWRlY29kZUxpY2VuY2VGZWF0dXJlcyhhKXtpZighYS5mZWF0dXJlcyl7aWYo''@;'; put 'put ''YS5kZW1vKXJldHVybjtyZXR1cm4gdm9pZCh0aGlzLl9saWNlbmNlU3RhdGU9dGhpcy5hbGxGZWF0dXJlc09uKX1jb25zdCBkPWEuZmVhdHVyZXMuc3BsaXQoIiwiKTt0aGlzLl9saWNlbmNlU3RhdGU9ey4uLnRoaXMuX2xpY2VuY2VTdGF0ZSx2aWV3ZXJfcm93c19hbGxvd2VkOnRoaXMucGFy''@;'; put 'put ''c2VGZWF0dXJlVmFsdWUoZFtnaC52aWV3ZXJfcm93c19hbGxvd2VkXSksZWRpdG9yX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2guZWRpdG9yX3Jvd3NfYWxsb3dlZF0pLHN0YWdlX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2guc3RhZ2Vf''@;'; put 'put ''cm93c19hbGxvd2VkXSksaGlzdG9yeV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLmhpc3Rvcnlfcm93c19hbGxvd2VkXSksc3VibWl0X3Jvd3NfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnN1Ym1pdF9yb3dzX2xpbWl0XSksdGFibGVzX2luX2xp''@;'; put 'put ''YnJhcnlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0XSksdmlld2JveF9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2gudmlld2JveF9saW1pdF0pLGxpbmVhZ2VfZGFpbHlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1''@;'; put 'put ''ZShkW2doLmxpbmVhZ2VfZGFpbHlfbGltaXRdKSx2aWV3Ym94OnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2gudmlld2JveF0pLGZpbGVVcGxvYWQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5maWxlVXBsb2FkXSksZWRpdFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShk''@;'; put 'put ''W2doLmVkaXRSZWNvcmRdKSxhZGRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5hZGRSZWNvcmRdKX0sdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiTGljZW5jZSBzdGF0ZToiLHRoaXMuX2xpY2VuY2VTdGF0ZSl9cGFyc2VGZWF0dXJlVmFsdWUoYSl7cmV0dXJuIi0iPT09YT8x''@;'; put 'put ''LzA6cGFyc2VJbnQoYSl9cGFyc2VGZWF0dXJlVG9nZ2xlKGEpe3JldHVybiEhcGFyc2VJbnQoYSl9ZGVjcnlwdExpY2Vuc2VLZXkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9uKih2LE0pe2lmKCF3aW5kb3cuY3J5cHRvfHwh''@;'; put 'put ''d2luZG93LmNyeXB0by5zdWJ0bGUpdHJ5e2xldCBiZT1hdG9iKGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7dihKU09OLnBhcnNlKGJlKSl9Y2F0Y2goYmUpe00oIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNlIGtleSBkYXRhLiAiK2JlKX1sZXQgWixEPXlpZWxkIGguYmFzZTY0''@;'; put 'put ''VG9BcnJheUJ1ZmZlcihhKS5jYXRjaChiZT0+e00oYmUpfSk7Y29uc3QgcmU9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGQpLmNhdGNoKGJlPT57TShiZSl9KTtpZighcmUpcmV0dXJuIHZvaWQgTSgiTWlzc2luZyBhY3RpdmF0aW9uIGtleSIpO2xldCBjZTtaPXJlO3RyeXtjZT15aWVs''@;'; put 'put ''ZCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixaLHtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLTI1NiJ9LCEwLFsiZGVjcnlwdCJdKX1jYXRjaChiZSl7TSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleTogIitiZSl9aWYoY2UpaWYoRCl0cnl7d2luZG93''@;'; put 'put ''LmNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZToiUlNBLU9BRVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sY2UsRCkudGhlbihiZT0+e2xldCBFZT0obmV3IFJUZS5UZXh0RGVjb2RlcikuZGVjb2RlKGJlKTt0cnl7dihKU09OLnBhcnNlKEVlKSl9Y2F0Y2goQmUpe00oIkVycm9yIHBhcnNp''@;'; put 'put ''bmcgbGljZW5zZSBrZXkgZGF0YS4gIitCZSl9fSxiZT0+e00oYmUpfSl9Y2F0Y2goYmUpe00oYmUpfWVsc2UgTSgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgTSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJu''@;'; put 'put ''IGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Z2V0SG90TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlEYXRhfWRlYWN0aXZhdGVBcHAoYSl7dGhpcy5fbGljZW5jZVN0YXRl''@;'; put 'put ''PXlXLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSksYSYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1jaGVja0xpbmVhZ2VMaW1pdChhKXtpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0PT09MS8wKXJl''@;'; put 'put ''dHVybiExO2NvbnN0IGQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIpLGg9T28oKS52YWx1ZU9mKCk7aWYoIWQpcmV0dXJuIGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExO2NvbnN0IGY9cGFyc2VJbnQoZC5zcGxpdCgiLCIpWzBdKSx2PXBhcnNlSW50KGQu''@;'; put 'put ''c3BsaXQoIiwiKVsxXSk7cmV0dXJuIE9vKGYpLmlzU2FtZShPbygpLCJkYXkiKT92Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0fHwoYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsdisxKSwhMSk6KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCEx''@;'; put 'put ''KX1zZXRMaW5lYWdlUmVuZGVyKGEsZCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIsYCR7YX0sJHtkfWApfWJhc2U2NFRvQXJyYXlCdWZmZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aChnY2UuRChhKSl9''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoZ2NlLmwoYSkpfSl9c2V0U2l0ZUlkKGEpe2Euc2l0ZV9pZF9tdWx0aXBsZT90aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWRfbXVsdGlwbGUpOmEuc2l0ZV9pZCYmdGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkKX1oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZil7bGV0IHY9ITEsTT0hMTtpZigoIWEuc2l0ZV9pZHx8YS5zaXRl''@;'; put 'put ''X2lkIT09aCkmJih2PSEwKSwoIWEuc2l0ZV9pZF9tdWx0aXBsZXx8IWEuc2l0ZV9pZF9tdWx0aXBsZS5pbmNsdWRlcyhoKSkmJihNPSEwKSx2JiZNKXJldHVybiBjb25zb2xlLmVycm9yKCJUaGUga2V5IHByb3ZpZGVkIGlzIGZvciBkaWZmZXJlbnQgb3JnYW5pemF0aW9uLiIpLHZvaWQgc2V0''@;'; put 'put ''VGltZW91dCgoKT0+e2NvbnN0IEQ9Ii9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZmb3JjZT10cnVlIjt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoRCksdGhpcy5fbGljZW5jZVN0YXRlPXlXLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0''@;'; put 'put ''YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoRCl9KX1jYWxjdWxhdGVFeHBpcnkoYSl7bGV0IGQ9T28oYS52YWxpZF91bnRpbCwiWVlZWS1NTS1ERCIpLnN0YXJ0T2YoImRheSIpLGg9T28oKS5zdGFydE9mKCJkYXkiKSxmPWQuZGlmZihoLCJkYXlzIik7cmV0dXJue2V4''@;'; put 'put ''cGlyeV9kYXRlOmQsZGF5c1RvRXhwaXJ5OmZ9fWhhbmRsZUV4cGlyeShhLGQsaCxmKXtzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1gL2xpY2Vuc2luZy9rZXk/Zm9yY2U9dHJ1ZSZlcnJvcj1leHBpcmVkJmRldGFpbHM9JHtidG9hKCJFeHBpcnkgZGF0ZTogIithLmZvcm1hdCgiREQvTU0vWVlZ''@;'; put 'put ''WSIpKX1gO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dCh2KSx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHYpfSl9aGFuZGxlVXNlcnNBbGxvd2VkKGEpe2EuZGVtbyYmdm9pZCAw''@;'; put 'put ''IT09dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQmJihhLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkPjA/YS51c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkKSx0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2Fs''@;'; put 'put ''bG93ZWR9aGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsaCl7aWYodGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiYoZC5SRUdJU1RFUkNPVU5UPmEudXNlcnNfYWxsb3dlZD8oY29uc29sZS53YXJuKCJBcHAgaGFzIG1vcmUgdXNlcnMgcmVnaXN0ZXJlZCB0aGVuIGxpY2Vuc2VkLiIpLHRoaXMu''@;'; put 'put ''aXNBcHBPdmVyQ2FwYWNpdHkubmV4dCghMCkpOmQuUkVHSVNURVJDT1VOVD09PWEudXNlcnNfYWxsb3dlZCYmY29uc29sZS53YXJuKCJBcHAgaGFzIGhpdCBsaW1pdCBvZiB1c2VycyByZWdpc3RlcmVkLiIpKSwxIT09ZC5JU1JFR0lTVEVSRUQpcmV0dXJuIGQuUkVHSVNURVJDT1VOVDxhLnVz''@;'; put 'put ''ZXJzX2FsbG93ZWR8fCF0aGlzLnVzZXJDb3VudExpbWl0YXRpb24/KGNvbnNvbGUubG9nKCJVc2VyIGNhbiByZWdpc3RlciIpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCEwKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL2xpY2Vuc2luZy9yZWdpc3RlciIpKSk6KHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCExKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9saW1pdCIpKSk7dGhpcy5pc0Fw''@;'; put 'put ''cEFjdGl2YXRlZC5uZXh0KCEwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTZCkseHIoSjgpLHhyKHZjKSx4cih0bCkseHIoR3UpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksb0w9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmxvZ2dlclNlcnZpY2U9Zix0''@;'; put 'put ''aGlzLmFwcFNldHRpbmdzU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5hcHBTdG9yZVNlcnZpY2U9RCx0aGlzLnN5c3NpdGU9bmV3IGVpKG51bGwpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXt9LHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShyZT0+e3Jl''@;'; put 'put ''IGluc3RhbmNlb2YgcHAmJiIvZGVwbG95Ij09PXJlLnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pO2NvbnN0IFo9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWU7Wi5wZXJzaXN0U2VsZWN0ZWRUaGVtZSYmdGhpcy5ldmVudFNlcnZpY2Uu''@;'; put 'put ''dG9nZ2xlRGFya01vZGUoWi5zZWxlY3RlZFRoZW1lIT09Z3kubGlnaHQmJlouc2VsZWN0ZWRUaGVtZT09PWd5LmRhcmspfXNhc1NlcnZpY2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2Vydmlj''@;'; put 'put ''ZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudElu''@;'; put 'put ''Zm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEpLHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBh''@;'; put 'put ''LnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFXSk7bGV0IHY9W107aWYoKCFmLmFkYXB0ZXJSZXNwb25zZS5n''@;'; put 'put ''bG9idmFyc3x8Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnMmJiFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXSkmJnYucHVzaCgiR2xvYnZhcnMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNkYXRhc2V0c3x8di5wdXNoKCJTYXNkYXRhc2V0cyIpLGYuYWRhcHRlclJlc3BvbnNlLnNhc2xp''@;'; put 'put ''YnN8fHYucHVzaCgiU2FzbGlicyIpLGYuYWRhcHRlclJlc3BvbnNlLnhsbWFwc3x8di5wdXNoKCJYTE1hcHMiKSx2Lmxlbmd0aD4wKXJldHVybiBkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHt2LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUg''@;'; put 'put ''c3RhcnR1cHNlcnZpY2VgKSx2b2lkIGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgTT1hLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO2EuZW52aXJvbm1lbnRJbmZvPXtTWVNTSVRFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEUs''@;'; put 'put ''U1lTU0NQTDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1TSVpFOmYuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJPQ0VT''@;'; put 'put ''U01PREU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTUFJPQ0VTU01PREUsU1lTSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmYuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NUSU5GT0xPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElORk9M''@;'; put 'put ''T05HLFNZU0VOQ09ESU5HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmYuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLElTQURNSU46Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uSVNBRE1JTixEQ19BRE1JTl9HUk9VUDpmLmFkYXB0ZXJSZXNwb25zZS5nbG9i''@;'; put 'put ''dmFyc1swXS5EQ19BRE1JTl9HUk9VUCxBUFBfTE9DOk0/LmFwcExvY307bGV0IHJlLGNlLEQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHMsWj17fTtmb3IobGV0IHFlIG9mIEQpWltxZS5MSUJSRUZdfHwoWltxZS5MSUJSRUZdPVtdKSxaW3FlLkxJQlJFRl0ucHVzaChxZS5EU04pO2xl''@;'; put 'put ''dCBiZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFopKSxFZT1bXTtmb3IobGV0IHFlIG9mIE9iamVjdC5rZXlzKGJlKSlFZS5wdXNoKHtMSUJSQVJZUkVGOnFlLHRhYmxlczpiZVtxZV19KTtsZXQgQmU9RWU7cmU9WixjZT1PYmplY3Qua2V5cyhaKSx2b2lkIDAhPT1yZSYmKEtuLmVkaXRv''@;'; put 'put ''ci5saWJzQW5kVGFibGVzPXJlKSxLbi54bG1hcHM9Zi5hZGFwdGVyUmVzcG9uc2UueGxtYXBzLm1hcChxZT0+KHtpZDpxZVswXSxkZXNjcmlwdGlvbjpxZVsxXSx0YXJnZXREUzpxZVsyXX0pKSxLbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9QmUsS24uZWRpdG9yLmxpYnJhcmllcz1jZSxL''@;'; put 'put ''bi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxLbi5kY0xpYj1mLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oZi5hZGFwdGVyUmVzcG9uc2UpfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX19KCkpLmNhdGNoKGg9PntkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCBzdGFydHVwc2VydmljZSByZXNwb25zZSIpLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSl9KSxhLmxvZ2dl''@;'; put 'put ''clNlcnZpY2UubG9nKCJBY3RpdmF0ZWQ6IixhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKSxkfHwoYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlP2Eucm91dGVyLnVybC5pbmNsdWRlcygi''@;'; put 'put ''bGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIik6IWEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFhLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNz''@;'; put 'put ''aW5nJmZvcmNlPXRydWUiKSl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHUxKSx4cih2YykseHIodGwpLHhyKFNkKSx4cigkUikseHIoTHMpLHhyKEo4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCksUnVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdlPWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMu''@;'; put 'put ''X3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3Bl''@;'; put 'put ''cnR5KCJkaXNhYmxlZCIsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRW8pLEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSl9fXJldHVybiBjfSkoKSxpNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUnVle3N0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBicD1uZXcgU3QoIiIp''@;'; put 'put ''LFZMZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+TWQpLG11bHRpOiEwfTtsZXQgTWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGk3e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3gi''@;'; put 'put ''LCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbZGEoW1ZMZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQkxlPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5nOkNzKCgpPT5xbCksbXVsdGk6ITB9LHpMZT1uZXcgU3QoIiIpO2xldCBxbD0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgUnVle2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQpLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1oLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uIGpMZSgpe2NvbnN0IGM9dG0oKT90''@;'; put 'put ''bSgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KGMudG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1faGFuZGxlSW5wdXQoYSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2Nv''@;'; put 'put ''bXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoYSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGEpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2Uo''@;'; put 'put ''YSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRW8pLEdlKEppKSxHZSh6TGUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJj''@;'; put 'put ''aGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxb''@;'; put 'put ''InRleHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZhdWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2hhbmRsZUlucHV0KHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBoLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2NvbXBvc2l0aW9uRW5kKHYudGFyZ2V0LnZhbHVlKX0pfSxmZWF0dXJl''@;'; put 'put ''czpbZGEoW0JMZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgaDA9bmV3IFN0KCIiKSxobT1uZXcgU3QoIiIpO2Z1bmN0aW9uIEZ1ZShjKXtyZXR1cm4gZnVuY3Rpb24gZG0oYyl7cmV0dXJuIG51bGw9PWN8fCgic3RyaW5nIj09dHlwZW9mIGN8fEFycmF5LmlzQXJyYXkoYykpJiYwPT09''@;'; put 'put ''Yy5sZW5ndGh9KGMudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBIdWUoYyl7cmV0dXJuITA9PT1jLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBzTChjKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6dWUoYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gVXVlKGMp''@;'; put 'put ''e3JldHVybiBfTShjKT9XdShjKTpjfWZ1bmN0aW9uIFp1ZShjKXtsZXQgbD17fTtyZXR1cm4gYy5mb3JFYWNoKGE9PntsPW51bGwhPWE/ey4uLmwsLi4uYX06bH0pLDA9PT1PYmplY3Qua2V5cyhsKS5sZW5ndGg/bnVsbDpsfWZ1bmN0aW9uIFd1ZShjLGwpe3JldHVybiBsLm1hcChhPT5hKGMp''@;'; put 'put ''KX1mdW5jdGlvbiBZdWUoYyl7cmV0dXJuIGMubWFwKGw9PmZ1bmN0aW9uIFpMZShjKXtyZXR1cm4hYy52YWxpZGF0ZX0obCk/bDphPT5sLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBVVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiBHdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1j''@;'; put 'put ''LmZpbHRlcih6dWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBadWUoV3VlKGEsbCkpfX0oWXVlKGMpKTpudWxsfWZ1bmN0aW9uIFpXKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uICR1ZShjKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVy''@;'; put 'put ''KHp1ZSk7cmV0dXJuIDA9PWwubGVuZ3RoP251bGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uIE5MZSguLi5jKXtjb25zdCBsPXVsZShjKSx7YXJnczphLGtleXM6ZH09ZGxlKGMpLGg9bmV3IFh0KGY9Pntjb25zdHtsZW5ndGg6dn09YTtpZighdilyZXR1cm4gdm9pZCBmLmNvbXBsZXRl''@;'; put 'put ''KCk7Y29uc3QgTT1uZXcgQXJyYXkodik7bGV0IEQ9dixaPXY7Zm9yKGxldCByZT0wO3JlPHY7cmUrKyl7bGV0IGNlPSExO2wxKGFbcmVdKS5zdWJzY3JpYmUoTmkoZixiZT0+e2NlfHwoY2U9ITAsWi0tKSxNW3JlXT1iZX0sKCk9PkQtLSx2b2lkIDAsKCk9PnsoIUR8fCFjZSkmJihafHxmLm5l''@;'; put 'put ''eHQoZD9obGUoZCxNKTpNKSxmLmNvbXBsZXRlKCkpfSkpfX0pO3JldHVybiBsP2gucGlwZSh6WihsKSk6aH0oV3VlKGEsbCkubWFwKFV1ZSkpLnBpcGUoTHIoWnVlKSl9fShZdWUoYykpOm51bGx9ZnVuY3Rpb24gS3VlKGMsbCl7cmV0dXJuIG51bGw9PT1jP1tsXTpBcnJheS5pc0FycmF5KGMp''@;'; put 'put ''P1suLi5jLGxdOltjLGxdfWZ1bmN0aW9uIFdXKGMpe3JldHVybiBjP0FycmF5LmlzQXJyYXkoYyk/YzpbY106W119ZnVuY3Rpb24gbEwoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLmluY2x1ZGVzKGwpOmM9PT1sfWZ1bmN0aW9uIEp1ZShjLGwpe2NvbnN0IGE9V1cobCk7cmV0dXJu''@;'; put 'put ''IFdXKGMpLmZvckVhY2goaD0+e2xMKGEsaCl8fGEucHVzaChoKX0pLGF9ZnVuY3Rpb24gUXVlKGMsbCl7cmV0dXJuIFdXKGwpLmZpbHRlcihhPT4hbEwoYyxhKSl9Y2xhc3MgZTBle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9''@;'; put 'put ''W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBl''@;'; put 'put ''bmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlz''@;'; put 'put ''dGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5j''@;'; put 'put ''b250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVD''@;'; put 'put ''aGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPWx8fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49VVcodGhpcy5fcmF3''@;'; put 'put ''VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVpXKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZh''@;'; put 'put ''bGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKGwpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0''@;'; put 'put ''aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldChsPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQobCl9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250''@;'; put 'put ''cm9sLmhhc0Vycm9yKGwsYSl9Z2V0RXJyb3IobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcihsLGEpOm51bGx9fWNsYXNzIEIxIGV4dGVuZHMgZTBle2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19Y2xh''@;'; put 'put ''c3MgZDEgZXh0ZW5kcyBlMGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyB0MGV7Y29uc3RydWN0b3IobCl7dGhpcy5fY2Q9bH1nZXQgaXNUb3VjaGVkKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhp''@;'; put 'put ''cy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBl''@;'; put 'put ''bmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX1sZXQgbmw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHQwZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShk''@;'; put 'put ''MSwyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIo''@;'; put 'put ''Im5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5n''@;'; put 'put ''IixoLmlzUGVuZGluZyl9LGZlYXR1cmVzOlt3YV19KX19cmV0dXJuIGN9KSgpLGE3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0MGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQjEsMTApKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdG''@;'; put 'put ''b3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJu''@;'; put 'put ''Zy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsaC5pc1N1Ym1pdHRlZCl9LGZlYXR1cmVzOlt3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHV4PSJWQUxJRCIsdUw9IklOVkFMSUQiLHh5''@;'; put 'put ''PSJQRU5ESU5HIixkeD0iRElTQUJMRUQiO2Z1bmN0aW9uICRXKGMpe3JldHVybihkTChjKT9jLnZhbGlkYXRvcnM6Yyl8fG51bGx9ZnVuY3Rpb24gS1coYyxsKXtyZXR1cm4oZEwobCk/bC5hc3luY1ZhbGlkYXRvcnM6Yyl8fG51bGx9ZnVuY3Rpb24gZEwoYyl7cmV0dXJuIG51bGwhPWMmJiFB''@;'; put 'put ''cnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGN9Y2xhc3MgcVd7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNo''@;'; put 'put ''YW5nZT0oKT0+e30sdGhpcy5fcGFyZW50PW51bGwsdGhpcy5wcmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpLHRoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhhKX1nZXQgdmFsaWRhdG9yKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcihsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49bH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1Zh''@;'; put 'put ''bGlkYXRvcihsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWx9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dXh9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dGF0dXM9PT11TH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09eHl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09ZHh9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1keH1nZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50''@;'; put 'put ''b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwp''@;'; put 'put ''fXNldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl9YWRkVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRvcnMoSnVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhK''@;'; put 'put ''dWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhRdWUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKFF1ZShsLHRoaXMuX3Jhd0Fz''@;'; put 'put ''eW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcihsKXtyZXR1cm4gbEwodGhpcy5fcmF3VmFsaWRhdG9ycyxsKX1oYXNBc3luY1ZhbGlkYXRvcihsKXtyZXR1cm4gbEwodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLGwpfWNsZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xl''@;'; put 'put ''YXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1RvdWNoZWQobCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFy''@;'; put 'put ''a0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQobD0+bC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1Vu''@;'; put 'put ''dG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1tYXJrQXNEaXJ0eShsPXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNE''@;'; put 'put ''aXJ0eShsKX1tYXJrQXNQcmlzdGluZShsPXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQu''@;'; put 'put ''X3VwZGF0ZVByaXN0aW5lKGwpfW1hcmtBc1BlbmRpbmcobD17fSl7dGhpcy5zdGF0dXM9eHksITEhPT1sLmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKGwp''@;'; put 'put ''fWRpc2FibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1keCx0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5kaXNhYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgp''@;'; put 'put ''LCExIT09bC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdl''@;'; put 'put ''LmZvckVhY2goZD0+ZCghMCkpfWVuYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPXV4LHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5lbmFibGUoey4uLmwsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRW''@;'; put 'put ''YWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+ZCghMSkpfV91cGRhdGVBbmNlc3RvcnMobCl7dGhpcy5fcGFy''@;'; put 'put ''ZW50JiYhbC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpLGwuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KGwpe3RoaXMuX3BhcmVu''@;'; put 'put ''dD1sfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsPXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMu''@;'; put 'put ''ZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PXV4fHx0aGlzLnN0YXR1cz09PXh5KSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IobC5lbWl0RXZlbnQpKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52''@;'; put 'put ''YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpfV91cGRhdGVUcmVlVmFsaWRpdHkobD17ZW1pdEV2ZW50''@;'; put 'put ''OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGE9PmEuX3VwZGF0ZVRyZWVWYWxpZGl0eShsKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRy''@;'; put 'put ''b2xzRGlzYWJsZWQoKT9keDp1eH1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKGwpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPXh5LHRoaXMuX2hhc093blBlbmRpbmdB''@;'; put 'put ''c3luY1ZhbGlkYXRvcj0hMDtjb25zdCBhPVV1ZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0''@;'; put 'put ''RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9''@;'; put 'put ''c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQobCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEu''@;'; put 'put ''cmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJuIGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xl''@;'; put 'put ''dCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlz''@;'; put 'put ''Ll9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgS3IsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBLcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9keDp0aGlz''@;'; put 'put ''LmVycm9ycz91TDp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyh4eSk/eHk6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHVMKT91TDp1eH1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250''@;'; put 'put ''cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhp''@;'; put 'put ''cy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3Bh''@;'; put 'put ''cmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe2RMKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBk''@;'; put 'put ''YXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7''@;'; put 'put ''dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rpb24gJExlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VXKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1Zh''@;'; put 'put ''bGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uIEtMZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9aVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3lu''@;'; put 'put ''Y1ZhbGlkYXRvcnMpfX1jbGFzcyBoTCBleHRlbmRzIHFXe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkVyhhKSxLVyhkLGEpKSx0aGlzLmNvbnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRo''@;'; put 'put ''aXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVyQ29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVu''@;'; put 'put ''dCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxhLGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9''@;'; put 'put ''KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5k''@;'; put 'put ''VmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30pe3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMu''@;'; put 'put ''Y29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpkLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3Bl''@;'; put 'put ''cnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gaTBlKGMsbCxhKXtjLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntpZih2b2lkIDA9PT1hW2hdKXRocm93IG5ldyBRbigxMDAyLCIiKX0pfSkodGhpcywwLGwpLE9iamVjdC5rZXlzKGwpLmZv''@;'; put 'put ''ckVhY2goZD0+eyhmdW5jdGlvbiByMGUoYyxsLGEpe2NvbnN0IGQ9Yy5jb250cm9scztpZighKGw/T2JqZWN0LmtleXMoZCk6ZCkubGVuZ3RoKXRocm93IG5ldyBRbigxZTMsIiIpO2lmKCFkW2FdKXRocm93IG5ldyBRbigxMDAxLCIiKX0pKHRoaXMsITAsZCksdGhpcy5jb250cm9sc1tkXS5z''@;'; put 'put ''ZXRWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7bnVsbCE9bCYmKE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5jb250cm9sc1tkXTto''@;'; put 'put ''JiZoLnBhdGNoVmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSkpfXJlc2V0KGw9e30sYT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKChkLGgpPT57ZC5yZXNldChsP2xbaF06bnVsbCx7b25seVNlbGY6''@;'; put 'put ''ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtk''@;'; put 'put ''XT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3luY1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0p''@;'; put 'put ''LGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChkLGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVy''@;'; put 'put ''T25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5j''@;'; put 'put ''b250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9''@;'; put 'put ''bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVj''@;'; put 'put ''dC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3Qgbzc9bmV3IFN0KCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVk''@;'; put 'put ''SW46InJvb3QiLGZhY3Rvcnk6KCk9Pmh4fSksaHg9ImFsd2F5cyI7ZnVuY3Rpb24gZngoYyxsLGE9aHgpe1hXKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRl''@;'; put 'put ''Py4oYy5kaXNhYmxlZCksZnVuY3Rpb24gSkxlKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMuX3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmYTBlKGMsbCl9KX0oYyxs''@;'; put 'put ''KSxmdW5jdGlvbiBlT2UoYyxsKXtjb25zdCBhPShkLGgpPT57bC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoZCksaCYmbC52aWV3VG9Nb2RlbFVwZGF0ZShkKX07Yy5yZWdpc3Rlck9uQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uQ2hhbmdlKGEp''@;'; put 'put ''fSl9KGMsbCksZnVuY3Rpb24gUUxlKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57Yy5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09Yy51cGRhdGVPbiYmYy5fcGVuZGluZ0NoYW5nZSYmYTBlKGMsbCksInN1Ym1pdCIhPT1jLnVwZGF0ZU9uJiZjLm1hcmtB''@;'; put 'put ''c1RvdWNoZWQoKX0pfShjLGwpLGZ1bmN0aW9uIFhMZShjLGwpe2lmKGwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBhPWQ9PntsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShkKX07Yy5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSksbC5fcmVnaXN0ZXJP''@;'; put 'put ''bkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShhKX0pfX0oYyxsKX1mdW5jdGlvbiBnTChjLGwpe2MuZm9yRWFjaChhPT57YS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZhLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UobCl9KX1mdW5jdGlvbiBYVyhjLGwp''@;'; put 'put ''e2NvbnN0IGE9ZnVuY3Rpb24gcXVlKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKEt1ZShhLGwudmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmMuc2V0VmFsaWRhdG9ycyhbYV0pO2NvbnN0IGQ9ZnVuY3Rp''@;'; put 'put ''b24gWHVlKGMpe3JldHVybiBjLl9yYXdBc3luY1ZhbGlkYXRvcnN9KGMpO251bGwhPT1sLmFzeW5jVmFsaWRhdG9yP2Muc2V0QXN5bmNWYWxpZGF0b3JzKEt1ZShkLGwuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25z''@;'; put 'put ''dCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtnTChsLl9yYXdWYWxpZGF0b3JzLGgpLGdMKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBhMGUoYyxsKXtjLl9wZW5kaW5nRGlydHkmJmMubWFya0FzRGlydHkoKSxjLnNldFZhbHVlKGMuX3BlbmRpbmdWYWx1ZSx7''@;'; put 'put ''ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksbC52aWV3VG9Nb2RlbFVwZGF0ZShjLl9wZW5kaW5nVmFsdWUpLGMuX3BlbmRpbmdDaGFuZ2U9ITF9Y29uc3QgYU9lPXtwcm92aWRlOkIxLHVzZUV4aXN0aW5nOkNzKCgpPT55cCl9LHB4PVByb21pc2UucmVzb2x2ZSgpO2xldCB5cD0oKCk9Pntj''@;'; put 'put ''bGFzcyBjIGV4dGVuZHMgQjF7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1oLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBLcix0aGlzLmZvcm09bmV3IGhMKHt9LFVXKGEpLFpX''@;'; put 'put ''KGQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5j''@;'; put 'put ''b250cm9sc31hZGRDb250cm9sKGEpe3B4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTthLmNvbnRyb2w9ZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGEuY29udHJvbCksZngoYS5jb250cm9sLGEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksYS5jb250''@;'; put 'put ''cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGEpfSl9Z2V0Q29udHJvbChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXJlbW92ZUNvbnRyb2woYSl7cHgudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRh''@;'; put 'put ''aW5lcihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGEpfSl9YWRkRm9ybUdyb3VwKGEpe3B4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKSxoPW5ldyBoTCh7fSk7KGZ1bmN0aW9uIG8wZShjLGwp''@;'; put 'put ''e1hXKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGEpe3B4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92''@;'; put 'put ''ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7cHgudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShh''@;'; put 'put ''KX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gczBlKGMsbCl7Yy5fc3luY1BlbmRpbmdDb250cm9scygpLGwuZm9yRWFjaChhPT57Y29uc3QgZD1hLmNvbnRyb2w7InN1Ym1pdCI9PT1kLnVwZGF0ZU9uJiZkLl9wZW5kaW5nQ2hhbmdlJiYoYS52aWV3VG9N''@;'; put 'put ''b2RlbFVwZGF0ZShkLl9wZW5kaW5nVmFsdWUpLGQuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoYSksImRpYWxvZyI9PT1hPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZv''@;'; put 'put ''cm0oYT12b2lkIDApe3RoaXMuZm9ybS5yZXNldChhKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENv''@;'; put 'put ''bnRhaW5lcihhKXtyZXR1cm4gYS5wb3AoKSxhLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGEpOnRoaXMuZm9ybX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShoMCwxMCksR2UoaG0sMTApLEdlKG83LDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGly''@;'; put 'put ''PUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJmb3JtR3JvdXAiLCIiXSxbIm5nLWZvcm0iXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJzdWJtaXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uU3Vi''@;'; put 'put ''bWl0KHYpfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBoLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6W05uLk5vbmUsIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W2Rh''@;'; put 'put ''KFthT2VdKSx3YV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGwwZShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gYzBlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMmJjI9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGgm''@;'; put 'put ''JiJ2YWx1ZSJpbiBjJiYiZGlzYWJsZWQiaW4gY31jb25zdCB0WT1jbGFzcyBleHRlbmRzIHFXe2NvbnN0cnVjdG9yKGw9bnVsbCxhLGQpe3N1cGVyKCRXKGEpLEtXKGQsYSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0''@;'; put 'put ''aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShhKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxkTChhKSYmKGEubm9uTnVs''@;'; put 'put ''bGFibGV8fGEuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPWMwZShsKT9sLnZhbHVlOmwpfXNldFZhbHVlKGwsYT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09YS5lbWl0TW9kZWxUb1ZpZXdD''@;'; put 'put ''aGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZD0+ZCh0aGlzLnZhbHVlLCExIT09YS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe3RoaXMuc2V0VmFsdWUobCxhKX1yZXNldChsPXRoaXMuZGVmYXVs''@;'; put 'put ''dFZhbHVlLGE9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMubWFya0FzUHJpc3RpbmUoYSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoYSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGEpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyhs''@;'; put 'put ''KXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UobCl7dGhpcy5fb25DaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGwpe2wwZSh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFu''@;'; put 'put ''Z2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXtsMGUodGhpcy5fb25EaXNhYmxlZENoYW5nZSxsKX1fZm9yRWFjaENoaWxkKGwpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVw''@;'; put 'put ''ZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0''@;'; put 'put ''TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKGwpe2MwZShsKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bC52YWx1ZSxsLmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxm''@;'; put 'put ''OiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sfX0sbE9lPXtwcm92aWRlOmQxLHVzZUV4aXN0aW5nOkNzKCgpPT5Hcyl9LGQwZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgR3M9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGQxe2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''LGYsdixNKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXYsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1NLHRoaXMuY29udHJvbD1uZXcgdFksdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLm5hbWU9IiIsdGhpcy51cGRhdGU9bmV3IEtyLHRoaXMuX3BhcmVudD1hLHRoaXMuX3Nl''@;'; put 'put ''dFZhbGlkYXRvcnMoZCksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGgpLHRoaXMudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbiBlWShjLGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBhLGQsaDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSxsLmZvckVhY2goZj0+e2YuY29uc3RydWN0b3I9PT1xbD9h''@;'; put 'put ''PWY6ZnVuY3Rpb24gck9lKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5jb25zdHJ1Y3Rvcik9PT1pN30oZik/ZD1mOmg9Zn0pLGh8fGR8fGF8fG51bGx9KDAsZil9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5h''@;'; put 'put ''bWUiaW4gYSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2NvbnN0IGQ9YS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe25hbWU6ZCxwYXRoOnRoaXMuX2dldFBhdGgoZCl9KX10''@;'; put 'put ''aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBhJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChhKSxmdW5jdGlvbiBRVyhjLGwpe2lmKCFjLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2NvbnN0IGE9Yy5tb2RlbDtyZXR1cm4hIWEuaXNGaXJzdENoYW5nZSgpfHwhT2Jq''@;'; put 'put ''ZWN0LmlzKGwsYS5jdXJyZW50VmFsdWUpfShhLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29u''@;'; put 'put ''dHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUoYSl7dGhpcy52aWV3TW9kZWw9YSx0''@;'; put 'put ''aGlzLnVwZGF0ZS5lbWl0KGEpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3Nl''@;'; put 'put ''dFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRo''@;'; put 'put ''aXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7ZngodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMu''@;'; put 'put ''X2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0''@;'; put 'put ''YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoYSl7ZDBlLnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X3VwZGF0ZURpc2FibGVkKGEpe2NvbnN0IGQ9YS5p''@;'; put 'put ''c0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxoPTAhPT1kJiZzMShkKTtkMGUudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0''@;'; put 'put ''ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBmTChjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''YykoR2UoQjEsOSksR2UoaDAsMTApLEdlKGhtLDEwKSxHZShicCwxMCksR2UoRXMsOCksR2UobzcsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJd''@;'; put 'put ''XSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6W05uLk5vbmUsImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOltObi5Ob25lLCJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOltObi5Ob25lLCJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W2RhKFtsT2VdKSx3YSx3bF19KX19cmV0dXJuIGN9KSgpLHM3PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGNPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzpDcygoKT0+dkwp''@;'; put 'put ''LG11bHRpOiEwfTtsZXQgdkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGk3e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2EoIiI9PWQ/bnVsbDpwYXJzZUZsb2F0KGQpKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIi''@;'; put 'put ''XSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoImlucHV0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdl''@;'; put 'put ''dC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbZGEoW2NPZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdU9lPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5nOkNzKCgpPT5iTCksbXVsdGk6ITB9O2xldCBkT2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoYSxkKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbYSxkXSl9cmVtb3ZlKGEpe2ZvcihsZXQgZD10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZD49MDstLWQpaWYodGhpcy5fYWNjZXNzb3JzW2RdWzFdPT09YSlyZXR1cm4g''@;'; put 'put ''dm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGQsMSl9c2VsZWN0KGEpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGQ9Pnt0aGlzLl9pc1NhbWVHcm91cChkLGEpJiZkWzFdIT09YSYmZFsxXS5maXJlVW5jaGVjayhhLnZhbHVlKX0pfV9pc1NhbWVHcm91cChhLGQpe3JldHVybiEhYVswXS5j''@;'; put 'put ''b250cm9sJiZhWzBdLl9wYXJlbnQ9PT1kLl9jb250cm9sLl9wYXJlbnQmJmFbMV0ubmFtZT09PWQubmFtZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxiTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgaTd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYSxkKSx0aGlzLl9yZWdpc3RyeT1oLHRoaXMuX2luamVjdG9yPWYsdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhp''@;'; put 'put ''cy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1maShvNyx7b3B0aW9uYWw6ITB9KT8/aHh9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChkMSksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRy''@;'; put 'put ''b2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShhKXt0aGlzLl9zdGF0ZT1hPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLl9mbj1hLHRo''@;'; put 'put ''aXMub25DaGFuZ2U9KCk9PnthKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShhKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGF8fCJ3aGVuRGlzYWJsZWRGb3JMZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3Rh''@;'; put 'put ''dGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soYSl7dGhpcy53cml0ZVZhbHVlKGEpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZv''@;'; put 'put ''cm1Db250cm9sTmFtZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRW8pLEdlKEppKSxHZShkT2UpLEdlKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIs''@;'; put 'put ''ImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''aC5vbkNoYW5nZSgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntuYW1lOiJuYW1lIixmb3JtQ29udHJvbE5hbWU6ImZvcm1Db250cm9sTmFtZSIsdmFsdWU6InZhbHVlIn0sZmVhdHVyZXM6W2RhKFt1T2VdKSx3YV19KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''O2NvbnN0IHJZPW5ldyBTdCgiIiksYk9lPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5nOkNzKCgpPT5UMiksbXVsdGk6ITB9O2Z1bmN0aW9uIG0wZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNl''@;'; put 'put ''KDAsNTApKX1sZXQgVDI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGk3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3Ro''@;'; put 'put ''aXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1tMGUodGhpcy5fZ2V0T3B0aW9uSWQoYSksYSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGgpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57dGhpcy52YWx1ZT10aGlzLl9n''@;'; put 'put ''ZXRPcHRpb25WYWx1ZShkKSxhKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhp''@;'; put 'put ''cy5fb3B0aW9uTWFwLmdldChkKSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiB5T2UoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChk''@;'; put 'put ''KTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwz''@;'; put 'put ''LCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBo''@;'; put 'put ''Lm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W2RhKFtiT2VdKSx3YV19KX19cmV0dXJuIGN9KSgpLEEyPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuX3NlbGVjdD1oLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxl''@;'; put 'put ''Y3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCxhKSx0aGlzLl9zZXRFbGVtZW50VmFsdWUobTBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0''@;'; put 'put ''aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9z''@;'; put 'put ''ZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVvKSxHZShUMiw5KSl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgX09lPXtwcm92aWRlOmJwLHVzZUV4aXN0aW5nOkNzKCgpPT5neCksbXVsdGk6ITB9O2Z1bmN0aW9u''@;'; put 'put ''IHYwZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgZ3g9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGk3e2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlz''@;'; put 'put ''LnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZix2KT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZih2LnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRp''@;'; put 'put ''b25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCB2PWY7Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKyspe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFs''@;'; put 'put ''dWUodltNXS52YWx1ZSk7aC5wdXNoKFopfX1lbHNle2NvbnN0IHY9ZC5vcHRpb25zO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBEPXZbTV07aWYoRC5zZWxlY3RlZCl7Y29uc3QgWj10aGlzLl9nZXRPcHRpb25WYWx1ZShELnZhbHVlKTtoLnB1c2goWil9fX10aGlzLnZhbHVl''@;'; put 'put ''PWgsYShoKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGQ9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGQsYSksZH1fZ2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9j''@;'; put 'put ''b21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiB3T2UoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/''@;'; put 'put ''dGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWU6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNl''@;'; put 'put ''bGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgiY2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltkYShbX09lXSksd2FdfSl9fXJldHVybiBjfSkoKSxrMj0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMu''@;'; put 'put ''X3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKHYwZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRW''@;'; put 'put ''YWx1ZSh2MGUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LCJ2YWx1ZSIsYSl9X3NldFNlbGVjdGVkKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQp''@;'; put 'put ''LHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFbyksR2UoZ3gsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpLGw3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9c0x9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gYSl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLm5vcm1hbGl6ZUlucHV0KGFbdGhpcy5pbnB1dE5hbWVdLmN1cnJlbnRWYWx1ZSk7dGhpcy5fZW5hYmxlZD10aGlzLmVuYWJsZWQoZCksdGhpcy5fdmFsaWRhdG9yPXRoaXMuX2VuYWJsZWQ/dGhpcy5jcmVhdGVWYWxpZGF0b3IoZCk6c0wsdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29u''@;'; put 'put ''Q2hhbmdlKCl9fXZhbGlkYXRlKGEpe3JldHVybiB0aGlzLl92YWxpZGF0b3IoYSl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShhKXt0aGlzLl9vbkNoYW5nZT1hfWVuYWJsZWQoYSl7cmV0dXJuIG51bGwhPWF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IE1PZT17cHJvdmlkZTpoMCx1c2VFeGlzdGluZzpDcygoKT0+YVkpLG11bHRpOiEwfSx4T2U9e3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6Q3MoKCk9Pm9ZKSxt''@;'; put 'put ''dWx0aTohMH07bGV0IGFZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBsN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PXMxLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWE9PkZ1ZX1lbmFibGVkKGEpe3Jl''@;'; put 'put ''dHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJv''@;'; put 'put ''bE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihkLGgpezImZCYmaHIoInJlcXVpcmVkIixoLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOltkYShbTU9lXSksd2FdfSl9fXJldHVybiBjfSkoKSxvWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYVl7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlciguLi5hcmd1bWVudHMpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWE9Pkh1ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1''@;'; put 'put ''aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmhyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0sZmVhdHVyZXM6W2RhKFt4T2VdKSx3YV19KX19cmV0dXJuIGN9KSgpLEUwZT0oKCk9PntjbGFzcyBje3N0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKSxSYz0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3Jl''@;'; put 'put ''dHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6bzcsdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/aHh9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltFMGVdfSl9fXJldHVybiBjfSkoKSxJT2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOnJZLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhG''@;'; put 'put ''b3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOm83LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2h4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbRTBlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRXk9WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEu''@;'; put 'put ''NywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSx2aD1bImV4Y2xhbWF0aW9uLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxOS44QzE4LjU1IDE5LjggMTkgMTkuMzUgMTkgMTguOFYxM0MxOSAxMi40NSAxOC41NSAxMiAxOCAxMkMxNy40NSAxMiAxNyAxMi40NSAxNyAxM1YxOC44''@;'; put 'put ''QzE3IDE5LjM1IDE3LjQ1IDE5LjggMTggMTkuOFpNMTguODUgMjEuOTVDMTguNzMgMjEuODQgMTguNiAyMS43NSAxOC40NiAyMS42OUMxOC4xNyAyMS41NyAxNy44MyAyMS41NyAxNy41NCAyMS42OUMxNy40IDIxLjc1IDE3LjI3IDIxLjg0IDE3LjE1IDIxLjk1QzE2LjkzIDIyLjE4IDE2Ljgg''@;'; put 'put ''MjIuNDggMTYuOCAyMi44QzE2LjggMjMuMTIgMTYuOTMgMjMuNDIgMTcuMTUgMjMuNjVDMTcuMjcgMjMuNzYgMTcuNCAyMy44NSAxNy41NCAyMy45MUMxNy42OSAyMy45NyAxNy44NCAyNCAxOCAyNEMxOC4xNiAyNCAxOC4zMSAyMy45NyAxOC40NiAyMy45MUMxOC42IDIzLjg1IDE4LjczIDIz''@;'; put 'put ''Ljc2IDE4Ljg1IDIzLjY1QzE5LjA3IDIzLjQyIDE5LjIgMjMuMTIgMTkuMiAyMi44QzE5LjIgMjIuNjQgMTkuMTcgMjIuNDkgMTkuMTEgMjIuMzRDMTkuMDUgMjIuMiAxOC45NiAyMi4wNiAxOC44NSAyMS45NVpNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4''@;'; put 'put ''IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGgg''@;'; put 'put ''ZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE2LjggMTIuNjVDMTYuOCAxMS45OSAxNy4zNCAxMS40NSAxOCAxMS40NUMxOC42NiAxMS40NSAxOS4yIDExLjk5''@;'; put 'put ''IDE5LjIgMTIuNjVWMTguNDVDMTkuMiAxOS4xMSAxOC42NiAxOS42NSAxOCAxOS42NUMxNy4zNCAxOS42NSAxNi44IDE5LjExIDE2LjggMTguNDVWMTIuNjVaTTE4Ljk4IDI0LjE1QzE4Ljg0IDI0LjI4IDE4LjY5IDI0LjM4IDE4LjUzIDI0LjQ1QzE4LjM1IDI0LjUyIDE4LjE4IDI0LjU2IDE4''@;'; put 'put ''IDI0LjU2QzE3LjgyIDI0LjU2IDE3LjY0IDI0LjUzIDE3LjQ2IDI0LjQ1QzE3LjMxIDI0LjM4IDE3LjE2IDI0LjI5IDE3IDI0LjE0QzE2Ljc0IDIzLjg3IDE2LjU5IDIzLjUyIDE2LjU5IDIzLjE1QzE2LjU5IDIyLjc4IDE2LjczIDIyLjQ0IDE3IDIyLjE1QzE3LjE0IDIyLjAyIDE3LjI5IDIx''@;'; put 'put ''LjkyIDE3LjQ1IDIxLjg1QzE3LjYyIDIxLjc4IDE3LjggMjEuNzQgMTcuOTkgMjEuNzRDMTguMTggMjEuNzQgMTguMzYgMjEuNzggMTguNTMgMjEuODVDMTguNjggMjEuOTIgMTguODMgMjIuMDIgMTguOTggMjIuMTVDMTkuMSAyMi4yNyAxOS4yMSAyMi40MyAxOS4yOCAyMi42MUMxOS4zNSAy''@;'; put 'put ''Mi43OSAxOS4zOSAyMi45NiAxOS4zOSAyMy4xNEMxOS4zOSAyMy41IDE5LjI1IDIzLjg1IDE4Ljk3IDI0LjE0TDE4Ljk4IDI0LjE1WiIvPid9XSxiaD1bImNoZWNrLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMi42MSAxNC4yMkwxNi4yNSAyMC41OEwxMi43MSAxNy4wNEMxMi4zMiAx''@;'; put 'put ''Ni42NSAxMS42OSAxNi42NSAxMS4zIDE3LjA0QzEwLjkxIDE3LjQzIDEwLjkxIDE4LjA2IDExLjMgMTguNDVMMTYuMjUgMjMuNEwyNC4wMyAxNS42MkMyNC40MiAxNS4yMyAyNC40MiAxNC42IDI0LjAzIDE0LjIxQzIzLjY0IDEzLjgyIDIzLjAxIDEzLjgyIDIyLjYyIDE0LjIxTDIyLjYxIDE0''@;'; put 'put ''LjIyWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40''@;'; put 'put ''OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMjQuMTYgMTUuNzhMMTYu''@;'; put 'put ''MjQgMjMuN0wxMS4xNSAxOC42MUMxMC42OCAxOC4xNCAxMC42OCAxNy4zOCAxMS4xNSAxNi45MUMxMS42MiAxNi40NCAxMi4zOCAxNi40NCAxMi44NSAxNi45MUwxNi4yNCAyMC4zTDIyLjQ2IDE0LjA4QzIyLjkzIDEzLjYxIDIzLjY5IDEzLjYxIDI0LjE2IDE0LjA4QzI0LjYzIDE0LjU1IDI0''@;'; put 'put ''LjYzIDE1LjMxIDI0LjE2IDE1Ljc4WiIvPid9XSxUMGU9WyJlbGxpcHNpcy1ob3Jpem9udGFsIix7b3V0bGluZTonPHBhdGggZD0iTTcuOCAxOC4xQzcuOCAxOS43NTY4IDYuNTAxNjMgMjEuMSA0LjkgMjEuMUMzLjI5ODM3IDIxLjEgMiAxOS43NTY4IDIgMTguMUMyIDE2LjQ0MzEgMy4yOTgz''@;'; put 'put ''NyAxNS4xIDQuOSAxNS4xQzYuNTAxNjMgMTUuMSA3LjggMTYuNDQzMSA3LjggMTguMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQz''@;'; put 'put ''MSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zMS4xIDIxLjFDMzIuNzAxNiAyMS4xIDM0IDE5Ljc1NjggMzQgMTguMUMzNCAxNi40NDMxIDMyLjcwMTYgMTUuMSAzMS4xIDE1LjFDMjkuNDk4NCAxNS4xIDI4LjIgMTYuNDQzMSAyOC4y''@;'; put 'put ''IDE4LjFDMjguMiAxOS43NTY4IDI5LjQ5ODQgMjEuMSAzMS4xIDIxLjFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNNC45IDIxLjFDNi41MDE2MyAyMS4xIDcuOCAxOS43NTY4IDcuOCAxOC4xQzcuOCAxNi40NDMxIDYuNTAxNjMgMTUuMSA0LjkgMTUuMUMzLjI5ODM3IDE1LjEgMiAx''@;'; put 'put ''Ni40NDMxIDIgMTguMUMyIDE5Ljc1NjggMy4yOTgzNyAyMS4xIDQuOSAyMS4xWiIvPjxwYXRoIGQ9Ik0xOCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1LjEgMTggMTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1''@;'; put 'put ''LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4IDIxLjFaIi8+PHBhdGggZD0iTTM0IDE4LjFDMzQgMTkuNzU2OCAzMi43MDE2IDIxLjEgMzEuMSAyMS4xQzI5LjQ5ODQgMjEuMSAyOC4yIDE5Ljc1NjggMjguMiAxOC4xQzI4LjIgMTYuNDQzMSAyOS40OTg0IDE1LjEgMzEuMSAx''@;'; put 'put ''NS4xQzMyLjcwMTYgMTUuMSAzNCAxNi40NDMxIDM0IDE4LjFaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+''@;'; put 'put ''J31dLG14PVsid2luZG93LWNsb3NlIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQxIDE4LjAwMDNMMjYuNyAxMC43MTAzQzI3LjAzOTggMTAuMzEzNSAyNy4wMTY5IDkuNzIyMDcgMjYuNjQ3NiA5LjM1MjdDMjYuMjc4MiA4Ljk4MzMzIDI1LjY4NjggOC45NjA0OSAyNS4yOSA5LjMwMDI2TDE4''@;'; put 'put ''IDE2LjU5MDNMMTAuNzEgOS4yOTAyNkMxMC4zMTMyIDguOTUwNDkgOS43MjE4MSA4Ljk3MzMzIDkuMzUyNDQgOS4zNDI3QzguOTgzMDcgOS43MTIwNyA4Ljk2MDIzIDEwLjMwMzUgOS4zMDAwMSAxMC43MDAzTDE2LjU5IDE4LjAwMDNMOS4yOTAwMSAyNS4yOTAzQzkuMDA0NjMgMjUuNTM0NyA4''@;'; put 'put ''Ljg4MDMyIDI1LjkxODQgOC45NjgxOSAyNi4yODM3QzkuMDU2MDcgMjYuNjQ5IDkuMzQxMjkgMjYuOTM0MiA5LjcwNjU5IDI3LjAyMjFDMTAuMDcxOSAyNy4xMDk5IDEwLjQ1NTYgMjYuOTg1NiAxMC43IDI2LjcwMDNMMTggMTkuNDEwM0wyNS4yOSAyNi43MDAzQzI1LjY4NjggMjcuMDQgMjYu''@;'; put 'put ''Mjc4MiAyNy4wMTcyIDI2LjY0NzYgMjYuNjQ3OEMyNy4wMTY5IDI2LjI3ODUgMjcuMDM5OCAyNS42ODcgMjYuNyAyNS4yOTAzTDE5LjQxIDE4LjAwMDNaIi8+J31dLFJPZT1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTIxIDIzSDE5VjE1SDE2QzE1LjQ1IDE1IDE1IDE1LjQ1''@;'; put 'put ''IDE1IDE2QzE1IDE2LjU1IDE1LjQ1IDE3IDE2IDE3SDE3VjIzSDE1QzE0LjQ1IDIzIDE0IDIzLjQ1IDE0IDI0QzE0IDI0LjU1IDE0LjQ1IDI1IDE1IDI1SDIxQzIxLjU1IDI1IDIyIDI0LjU1IDIyIDI0QzIyIDIzLjQ1IDIxLjU1IDIzIDIxIDIzWk0xNy45MyAxMy4zQzE4LjcgMTMuMyAxOS4z''@;'; put 'put ''MyAxMi42NyAxOS4zMyAxMS45QzE5LjMzIDExLjEzIDE4LjcgMTAuNSAxNy45MyAxMC41QzE3LjE2IDEwLjUgMTYuNTMgMTEuMTMgMTYuNTMgMTEuOUMxNi41MyAxMi42NyAxNy4xNiAxMy4zIDE3LjkzIDEzLjNaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAx''@;'; put 'put ''OCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNy45MyAxMC4zQzE4LjgxIDEwLjMgMTkuNTMgMTEuMDIgMTkuNTMgMTEuOUMxOS41MyAxMi43OCAxOC44MSAx''@;'; put 'put ''My41IDE3LjkzIDEzLjVDMTcuMDUgMTMuNSAxNi4zMyAxMi43OCAxNi4zMyAxMS45QzE2LjMzIDExLjAyIDE3LjA1IDEwLjMgMTcuOTMgMTAuM1pNMjEgMjUuMkgxNUMxNC4zNCAyNS4yIDEzLjggMjQuNjYgMTMuOCAyNEMxMy44IDIzLjM0IDE0LjM0IDIyLjggMTUgMjIuOEgxNi44VjE3LjJI''@;'; put 'put ''MTZDMTUuMzQgMTcuMiAxNC44IDE2LjY2IDE0LjggMTZDMTQuOCAxNS4zNCAxNS4zNCAxNC44IDE2IDE0LjhIMTkuMlYyMi44SDIxQzIxLjY2IDIyLjggMjIuMiAyMy4zNCAyMi4yIDI0QzIyLjIgMjQuNjYgMjEuNjYgMjUuMiAyMSAyNS4yWiIvPid9XSxBMGU9WyJ0aW1lcyIse291dGxpbmU6''@;'; put 'put ''JzxwYXRoIGQ9Ik0xOS40Njk2IDE3Ljk3MzJMMjcuNzU5NiA5LjcwNTQyQzI4LjA5OTQgOS4zMDk3MiAyOC4wNzY1IDguNzE5ODcgMjcuNzA3MSA4LjM1MTQ4QzI3LjMzNzggNy45ODMxIDI2Ljc0NjMgNy45NjAzMiAyNi4zNDk2IDguMjk5MTlMMTguMDU5NiAxNi41NjdMOS43Njk1OCA4LjI4''@;'; put 'put ''OTIyQzkuMzc3NDUgNy44OTgxNCA4Ljc0MTcgNy44OTgxNCA4LjM0OTU4IDguMjg5MjJDNy45NTc0NSA4LjY4MDI5IDcuOTU3NDUgOS4zMTQzNCA4LjM0OTU4IDkuNzA1NDJMMTYuNjQ5NiAxNy45NzMyTDguMzQ5NTggMjYuMjQxQzguMDY0MiAyNi40ODQ4IDcuOTM5ODkgMjYuODY3NSA4LjAy''@;'; put 'put ''Nzc3IDI3LjIzMThDOC4xMTU2NCAyNy41OTYxIDguNDAwODYgMjcuODgwNiA4Ljc2NjE2IDI3Ljk2ODJDOS4xMzE0NiAyOC4wNTU5IDkuNTE1MTkgMjcuOTMxOSA5Ljc1OTU4IDI3LjY0NzNMMTguMDU5NiAxOS4zNzk1TDI2LjM0OTYgMjcuNjQ3M0MyNi43NDYzIDI3Ljk4NjEgMjcuMzM3OCAy''@;'; put 'put ''Ny45NjM0IDI3LjcwNzEgMjcuNTk1QzI4LjA3NjUgMjcuMjI2NiAyOC4wOTk0IDI2LjYzNjcgMjcuNzU5NiAyNi4yNDFMMTkuNDY5NiAxNy45NzMyWiIvPid9XSxrMGU9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjguMzQ5MSAxNy44OTk2QzI4LjUzODQgMTguMDgzNyAy''@;'; put 'put ''OC43OTQ1IDE4LjE4NjMgMjkuMDYxIDE4LjE4NDhDMjkuNDY0IDE4LjE4MzEgMjkuODI2OCAxNy45NDUxIDI5Ljk4MjEgMTcuNTgwNUMzMC4xMzc0IDE3LjIxNTggMzAuMDU1IDE2Ljc5NTUgMjkuNzcyOSAxNi41MTMzTDE4LjAzMTggNUw2LjMwMDY3IDE2LjUxMzNDNS45NTk5OSAxNi45MDM0''@;'; put 'put ''IDUuOTgyODkgMTcuNDg0OSA2LjM1MzI1IDE3Ljg0ODFDNi43MjM2IDE4LjIxMTIgNy4zMTY2IDE4LjIzMzcgNy43MTQ0MiAxNy44OTk2TDE4LjAzMTggNy43ODI0NkwyOC4zNDkxIDE3Ljg5OTZaIi8+PHBhdGggZD0iTTI4LjM0OTEgMjguNzE0OUMyOC41Mzg0IDI4Ljg5ODkgMjguNzk0NSAy''@;'; put 'put ''OS4wMDE1IDI5LjA2MSAyOUMyOS40NjQgMjguOTk4NCAyOS44MjY4IDI4Ljc2MDMgMjkuOTgyMSAyOC4zOTU3QzMwLjEzNzQgMjguMDMxMSAzMC4wNTUgMjcuNjEwNyAyOS43NzI5IDI3LjMyODVMMTguMDMxOCAxNS44MTUyTDYuMzAwNjcgMjcuMzI4NUM1Ljk1OTk5IDI3LjcxODYgNS45ODI4''@;'; put 'put ''OSAyOC4zMDAxIDYuMzUzMjUgMjguNjYzM0M2LjcyMzYgMjkuMDI2NSA3LjMxNjYgMjkuMDQ4OSA3LjcxNDQyIDI4LjcxNDlMMTguMDMxOCAxOC41OTc3TDI4LjM0OTEgMjguNzE0OVoiLz4nfV0sTE9lPVsiZXZlbnQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTYuMTcgMjUuODZMMTAuODEgMjAu''@;'; put 'put ''NUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcg''@;'; put 'put ''MTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC44MSAxNC4zNkMyNS4wMDEzIDE0LjE5NjIgMjUuMjQ3NCAxNC4xMTA2IDI1LjQ5OTEgMTQuMTIwM0MyNS43NTA3IDE0LjEzIDI1Ljk4OTUgMTQuMjM0MyAyNi4xNjc2IDE0LjQxMjRDMjYuMzQ1NyAxNC41OTA1IDI2LjQ1IDE0LjgyOTMg''@;'; put 'put ''MjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjlWOEgzMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAz''@;'; put 'put ''LjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5''@;'; put 'put ''NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5''@;'; put 'put ''NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5''@;'; put 'put ''IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjky''@;'; put 'put ''ODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3''@;'; put 'put ''IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1Mzcg''@;'; put 'put ''OS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2''@;'; put 'put ''Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAy''@;'; put 'put ''NS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTIzIDZIMTNWOEgyM1Y2WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDEx''@;'; put 'put ''Ljk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAx''@;'; put 'put ''MS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjQgMTUuMDM4''@;'; put 'put ''OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMDQgMzAuNDIzOCAzMy45NjE5IDMwLjY1NiAzMy44NzYxIDMwLjg3MzVDMzMuNzkwMyAzMS4wOTEgMzMuNjYyNSAzMS4yODk0IDMzLjUgMzEuNDU3NUMzMy4zMzc0IDMxLjYyNTYgMzMuMTQzNCAzMS43NiAzMi45Mjg5IDMx''@;'; put 'put ''Ljg1MzFDMzIuNzE0NSAzMS45NDYyIDMyLjQ4MzggMzEuOTk2MSAzMi4yNSAzMkgzLjc1MDAxQzMuNTE2MjUgMzEuOTk2MSAzLjI4NTU1IDMxLjk0NjIgMy4wNzEwOCAzMS44NTMxQzIuODU2NjEgMzEuNzYgMi42NjI1OCAzMS42MjU2IDIuNTAwMDcgMzEuNDU3NUMyLjMzNzU3IDMxLjI4OTQg''@;'; put 'put ''Mi4yMDk3NiAzMS4wOTEgMi4xMjM5NiAzMC44NzM1QzIuMDM4MTYgMzAuNjU2IDEuOTk2MDQgMzAuNDIzOCAyLjAwMDAxIDMwLjE5VjcuODFDMS45OTYwNCA3LjU3NjI0IDIuMDM4MTYgNy4zNDM5OCAyLjEyMzk2IDcuMTI2NUMyLjIwOTc2IDYuOTA5MDIgMi4zMzc1NyA2LjcxMDU3IDIuNTAw''@;'; put 'put ''MDcgNi41NDI0OUMyLjY2MjU4IDYuMzc0NDEgMi44NTY2MSA2LjIzOTk5IDMuMDcxMDggNi4xNDY5MUMzLjI4NTU1IDYuMDUzODMgMy41MTYyNSA2LjAwMzkxIDMuNzUwMDEgNkg3LjAwMDAxVjhINC4wMDAwMVYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yNC4xMzMzIDE1LjAzNjdIMjYu''@;'; put 'put ''NDU3QzI2LjQ1ODMgMTUuMDUxNCAyNi40NTkyIDE1LjA2NjEgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEw''@;'; put 'put ''OUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC4xMzMzIDE1LjAzNjdaIi8+''@;'; put 'put ''PHBhdGggZD0iTTIxLjk1OTQgNkwyMC43NTk0IDhIMTNWNkgyMS45NTk0WiIvPjxwYXRoIGQ9Ik0xMC43MDcxIDkuNzA3MTFDMTAuNTE5NiA5Ljg5NDY0IDEwLjI2NTIgMTAgMTAgMTBDOS43MzQ4IDEwIDkuNDgwNDQgOS44OTQ2NCA5LjI5MjkxIDkuNzA3MTFDOS4xMDUzNyA5LjUxOTU3IDku''@;'; put 'put ''MDAwMDEgOS4yNjUyMiA5LjAwMDAxIDlWM0M5LjAwMDAxIDIuNzM0NzggOS4xMDUzNyAyLjQ4MDQzIDkuMjkyOTEgMi4yOTI4OUM5LjQ4MDQ0IDIuMTA1MzYgOS43MzQ4IDIgMTAgMkMxMC4yNjUyIDIgMTAuNTE5NiAyLjEwNTM2IDEwLjcwNzEgMi4yOTI4OUMxMC44OTQ3IDIuNDgwNDMgMTEg''@;'; put 'put ''Mi43MzQ3OCAxMSAzVjlDMTEgOS4yNjUyMiAxMC44OTQ3IDkuNTE5NTcgMTAuNzA3MSA5LjcwNzExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTEwLjgxIDIwLjVMMTYuMTcgMjUuODZMMjYuMjIgMTUuODFDMjYuMzgzOCAxNS42MTg3IDI2LjQ2OTQgMTUuMzcyNiAyNi40NTk3IDE1''@;'; put 'put ''LjEyMDlDMjYuNDUgMTQuODY5MyAyNi4zNDU3IDE0LjYzMDUgMjYuMTY3NiAxNC40NTI0QzI1Ljk4OTUgMTQuMjc0MyAyNS43NTA3IDE0LjE3IDI1LjQ5OTEgMTQuMTYwM0MyNS4yNDc0IDE0LjE1MDYgMjUuMDAxMyAxNC4yMzYyIDI0LjgxIDE0LjRMMTYuMTcgMjNMMTIuMjMgMTkuMDZDMTIu''@;'; put 'put ''MDM4NyAxOC44OTYyIDExLjc5MjYgMTguODEwNiAxMS41NDEgMTguODIwM0MxMS4yODkzIDE4LjgzIDExLjA1MDUgMTguOTM0MyAxMC44NzI0IDE5LjExMjRDMTAuNjk0NCAxOS4yOTA1IDEwLjU5IDE5LjUyOTMgMTAuNTgwMyAxOS43ODA5QzEwLjU3MDYgMjAuMDMyNiAxMC42NTYyIDIwLjI3''@;'; put 'put ''ODcgMTAuODIgMjAuNDdMMTAuODEgMjAuNVoiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlD''@;'; put 'put ''MTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5''@;'; put 'put ''LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0zMiAxMy4yMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAy''@;'; put 'put ''LjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5''@;'; put 'put ''NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45''@;'; put 'put ''NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMy4zODAyIDEy''@;'; put 'put ''LjczIDMyLjcwNjMgMTMuMDI2NiAzMiAxMy4yMloiLz48cGF0aCBkPSJNMjIuNSA2SDEzVjhIMjIuNzhDMjIuNTk2OCA3LjM0OTAzIDIyLjUwMjYgNi42NzYyNSAyMi41IDZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAx''@;'; put 'put ''IDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjND''@;'; put 'put ''MTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAw''@;'; put 'put ''MSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3''@;'; put 'put ''IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIy''@;'; put 'put ''IDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjguMjVWOUMyOC4yNSA5LjU4MzQ4IDI4LjAxODIgMTAuMTQzMSAyNy42MDU2IDEwLjU1NTZDMjcuMTkzMSAxMC45NjgyIDI2LjYzMzUg''@;'; put 'put ''MTEuMiAyNi4wNSAxMS4yQzI1LjQ2NjUgMTEuMiAyNC45MDcgMTAuOTY4MiAyNC40OTQ0IDEwLjU1NTZDMjQuMDgxOCAxMC4xNDMxIDIzLjg1IDkuNTgzNDggMjMuODUgOVY2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4MiAxMC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2''@;'; put 'put ''ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIwNCA1Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMy''@;'; put 'put ''NDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3MjA0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzgg''@;'; put 'put ''Mi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAz''@;'; put 'put ''MkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4w''@;'; put 'put ''MDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMz''@;'; put 'put ''Mi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4w''@;'; put 'put ''NzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAxNC42NkMyNC4xMjY3IDE0LjUzMzMgMjQuMjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42''@;'; put 'put ''MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAxNC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAxNC4zNjQyQzI1LjY1MjggMTQuNDMyNyAyNS44MDMzIDE0LjUzMzMgMjUuOTMgMTQuNjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3''@;'; put 'put ''MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjggMjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2''@;'; put 'put ''LjU4WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4''@;'; put 'put ''ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcu''@;'; put 'put ''NTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQg''@;'; put 'put ''MTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5''@;'; put 'put ''NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMy''@;'; put 'put ''LjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUg''@;'; put 'put ''MzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTUuMDI2M0MzMy44''@;'; put 'put ''ODg2IDE1LjAzNTQgMzMuNzc2NCAxNS4wMzg5IDMzLjY2MzcgMTUuMDM2N0gyNi4xOTY0QzI2LjIwNjggMTUuMDU4NCAyNi4yMTY2IDE1LjA4MDQgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2''@;'; put 'put ''LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkx''@;'; put 'put ''OCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjMuNjIzMyAxNS4wMzY3SDIyLjMzOTVDMjEuMTU3NyAxNS4wNjA0''@;'; put 'put ''IDIwLjAyMzMgMTQuNDQ4OSAxOS40MjA2IDEzLjM4OTNDMTguODIwNCAxMi4zMzQyIDE4Ljg3MDMgMTEuMDQyMyAxOS41MzYyIDEwLjAzODdMMjEuOTU5NCA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUx''@;'; put 'put ''OTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjcz''@;'; put 'put ''NDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEg''@;'; put 'put ''OS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1Mzcg''@;'; put 'put ''Mi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzAgMTMuNUMyOC4wMTA5IDEzLjUgMjYuMTAzMiAxMi43MDk4''@;'; put 'put ''IDI0LjY5NjcgMTEuMzAzM0MyMy4yOTAyIDkuODk2NzggMjIuNSA3Ljk4OTEyIDIyLjUgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEw''@;'; put 'put ''Ljk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0''@;'; put 'put ''NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAy''@;'; put 'put ''LjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5''@;'; put 'put ''IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzIuODA0MSAxMy4wOTkxIDMxLjQx''@;'; put 'put ''NjUgMTMuNTAxNSAzMCAxMy41Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUg''@;'; put 'put ''MTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTgg''@;'; put 'put ''MTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2''@;'; put 'put ''LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz48cGF0aCBkPSJNMzAg''@;'; put 'put ''MTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sT09lPVsiY2FsZW5kYXIiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIgMjBIMjBWMjJI''@;'; put 'put ''MjJWMjBaTTIwIDI2SDIyVjI0SDIwVjI2Wk0yOCAyNEgyNlYyNkgyOFYyNFpNMjggMjBIMjZWMjJIMjhWMjBaTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJa''@;'; put 'put ''TTIyIDE2SDIwVjE4SDIyVjE2Wk0yOCAxNkgyNlYxOEgyOFYxNlpNMjQgOEgxMlYxMEgyNFY4Wk0xMCAxNkg4VjE4SDEwVjE2Wk0xMCAyMEg4VjIySDEwVjIwWk0xMCAyNEg4VjI2SDEwVjI0Wk0zMy41IDguNTRDMzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgzMFYxMEgzMlYzMEg0VjEw''@;'; put 'put ''SDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgz''@;'; put 'put ''IDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTQgMjZIMTZWMjRIMTRWMjZaTTE2IDIwSDE0VjIySDE2VjIwWk0xNiAxNkgxNFYxOEgxNlYxNlpNOSAxMkM5LjU1IDEyIDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQg''@;'; put 'put ''OSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYg''@;'; put 'put ''MTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzEx''@;'; put 'put ''IDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1Yz''@;'; put 'put ''MC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIu''@;'; put 'put ''ODMgOC4yIDMuMjggOCAzLjc1IDhINlYxMEg0VjMwSDMyVjE1LjAzNjdaIi8+PHBhdGggZD0iTTIwLjc1OTQgOEwxOS41NTk0IDEwSDEyVjhIMjAuNzU5NFoiLz48cGF0aCBkPSJNMjAgMjBIMjJWMjJIMjBWMjBaIi8+PHBhdGggZD0iTTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''NiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJWMjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxwYXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgyNloiLz48cGF0aCBkPSJNOCAxNkgxMFYxOEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhW''@;'; put 'put ''MjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0xNCAxNkgxNlYxOEgxNFYxNloiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEy''@;'; put 'put ''QzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAy''@;'; put 'put ''NSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGQ9Ik0yMy4yODk5IDhDMjMuNDU5NCA4LjU2OTYzIDIzLjY5OTUgOS4xMDg4NyAyNCA5LjYwNzU5VjEwSDEyVjhIMjMuMjg5OVoiLz48cGF0aCBkPSJNMzQgMTEuNzQ1M0MzMy4zOTYgMTIuMTY2NiAz''@;'; put 'put ''Mi43MjI0IDEyLjQ5NTEgMzIgMTIuNzEwMVYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIu''@;'; put 'put ''NzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+''@;'; put 'put ''PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0''@;'; put 'put ''SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAx''@;'; put 'put ''MVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcg''@;'; put 'put ''MTJaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAzMi4yNSA4SDI5LjJWMTFDMjkuMiAxMi4yMSAyOC4yMSAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAx''@;'; put 'put ''Mi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMx''@;'; put 'put ''LjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTAuMSAyNi4xSDcuOVYyMy45SDEwLjFWMjYuMVpNMTAuMSAyMi4xSDcuOVYxOS45SDEwLjFWMjIuMVpNMTAuMSAxOC4xSDcuOVYxNS45SDEwLjFWMTguMVpNMTYu''@;'; put 'put ''MSAyNi4xSDEzLjlWMjMuOUgxNi4xVjI2LjFaTTE2LjEgMjIuMUgxMy45VjE5LjlIMTYuMVYyMi4xWk0xNi4xIDE4LjFIMTMuOVYxNS45SDE2LjFWMTguMVpNMjIuMSAyNi4xSDE5LjlWMjMuOUgyMi4xVjI2LjFaTTIyLjEgMjIuMUgxOS45VjE5LjlIMjIuMVYyMi4xWk0yMi4xIDE4LjFIMTku''@;'; put 'put ''OVYxNS45SDIyLjFWMTguMVpNMjguMSAyNi4xSDI1LjlWMjMuOUgyOC4xVjI2LjFaTTI4LjEgMjIuMUgyNS45VjE5LjlIMjguMVYyMi4xWk0yOC4xIDE4LjFIMjUuOVYxNS45SDI4LjFWMTguMVpNOSAxMkM5LjU1IDEyIDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUg''@;'; put 'put ''NCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44''@;'; put 'put ''MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4''@;'; put 'put ''LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC43NTk0IDhMMTkuNTM2MiAxMC4wMzg3QzE4Ljg3MDMg''@;'; put 'put ''MTEuMDQyMyAxOC44MjA0IDEyLjMzNDIgMTkuNDIwNiAxMy4zODkzQzIwLjAyMzMgMTQuNDQ4OSAyMS4xNTc3IDE1LjA2MDQgMjIuMzM5NSAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMx''@;'; put 'put ''LjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAzMi4yNSAzMkgzLjc1QzMuMjggMzEuOTkgMi44MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDguODggMi41IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2LjhW''@;'; put 'put ''MTFDNi44IDEyLjIxIDcuNzkgMTMuMiA5IDEzLjJDMTAuMjEgMTMuMiAxMS4yIDEyLjIxIDExLjIgMTFWOEgyMC43NTk0Wk03LjkgMjMuOVYyNi4xSDEwLjFWMjMuOUg3LjlaTTcuOSAxOS45VjIyLjFIMTAuMVYxOS45SDcuOVpNNy45IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2''@;'; put 'put ''LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYuMVpNMTkuOSAyMi4xSDIyLjFWMTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1''@;'; put 'put ''LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIzLjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4xSDI4LjFWMTUuOUgyNS45WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDgg''@;'; put 'put ''MTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43''@;'; put 'put ''NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzQgMTEuNzQ1M0MzMi44NjYyIDEyLjUzNjIgMzEuNDg3MiAxMyAzMCAxM0MyOS40MDYzIDEzIDI4LjgyOTkgMTIuOTI2MSAyOC4yNzk0IDEyLjc4N0MyNy45''@;'; put 'put ''MTgzIDEzLjA0NjcgMjcuNDc2MiAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWMTAuNjg2MkMyNC4xMTI2IDkuOTIzOTMgMjMuNTkwNCA5LjAwOTcgMjMuMjg5OSA4SDExLjJWMTFDMTEuMiAxMi4yMSAxMC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEy''@;'; put 'put ''LjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEu''@;'; put 'put ''NDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWMTEuNzQ1M1pNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEz''@;'; put 'put ''LjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2''@;'; put 'put ''LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41''@;'; put 'put ''NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nfV0sUE9lPVsiZm9sZGVyLW9wZW4iLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuMjYgMTNDMzMuODQgMTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDggMTQuNjkgMzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43''@;'; put 'put ''MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEuMDIgMy4wMyAzMC40NCAzIDI5LjY5VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyOS4zOUMzMC40OSA5IDMxLjM5IDkuOSAzMS4zOSAxMUgxNC45MUMxNC41OSAx''@;'; put 'put ''MSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2QzcuOTIgMTQuNjYgNy45MiAxNC41NyA3LjkyIDE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNlpNNS45IDI5SDI4Ljk0TDMyLjg4IDE0Ljk1SDEwLjE2QzEwLjAxIDE0Ljk4IDku''@;'; put 'put ''ODcgMTUuMDcgOS43OCAxNS4xOUw1LjkgMjlaIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwyMi4yMjI0IDExLjExNTlDMjEuOTUyOSAxMS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4xNTkxIDEyLjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4w''@;'; put 'put ''NTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAxMy4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMzNi4wNzUgMTEuOTk0OSAzNi4wNTA2IDExLjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5MyAxLjY0NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3''@;'; put 'put ''MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjguMTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBkPSJNMjAuMTA1OCAxMUgxNC45MTAyQzE0LjU5MDIgMTEgMTQuMjkwMiAxMC44NSAxNC4xMDAyIDEwLjU5TDExLjQ5MDIgN0g1LjAwMDI0VjI1TDcuOTIwMjQg''@;'; put 'put ''MTQuNjZWMTQuNTJDOC4zMjAyNCAxMy42MyA5LjE5MDI0IDEzLjA0IDEwLjE3MDIgMTNIMjAuMjMyN0MyMC4yODYxIDEzLjEzMjYgMjAuMzQ4OCAxMy4yNjI3IDIwLjQyMDggMTMuMzg5M0MyMC44ODE1IDE0LjE5OTEgMjEuNjUyNyAxNC43NDcyIDIyLjUxODMgMTQuOTVIMTAuMTYwMkMxMC4w''@;'; put 'put ''MTAyIDE0Ljk4IDkuODcwMjQgMTUuMDcgOS43ODAyNCAxNS4xOUw1LjkwMDI0IDI5SDI4Ljk0MDJMMzIuODU1OSAxNS4wMzY3SDM0LjY2MzlDMzQuNzYzNiAxNS4wMzg3IDM0Ljg2MyAxNS4wMzYyIDM0Ljk2MTcgMTUuMDI5MkMzNC45NTAzIDE1LjA3OTggMzQuOTM2NSAxNS4xMzAxIDM0Ljky''@;'; put 'put ''MDIgMTUuMThMMzAuNzMwMiAzMC4yOEMzMC42MDAyIDMwLjcyIDMwLjE5MDIgMzEuMDIgMjkuNzMwMiAzMUg0LjQxMDI0QzMuNjYwMjQgMzEuMDIgMy4wMzAyNCAzMC40NCAzLjAwMDI0IDI5LjY5VjdDMy4wMDAyNCA1LjkgMy45MDAyNCA1IDUuMDAwMjQgNUgxMS40OTAyQzEyLjEzMDIgNSAx''@;'; put 'put ''Mi43MzAyIDUuMyAxMy4xMTAyIDUuODJMMTUuNDIwMiA5SDIxLjE1OTdMMjAuNTM2NCAxMC4wMzg3QzIwLjMzNzggMTAuMzM4MSAyMC4xOTM5IDEwLjY2MzIgMjAuMTA1OCAxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMz''@;'; put 'put ''NiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjYuMTAxIDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEw''@;'; put 'put ''Ljg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQuNjZWMTQuNTJDOC4zMiAxMy42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2QzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMw''@;'; put 'put ''LjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjQuNjczNkMyNS4wMjk3IDkuNzQ5NiAyNS41MTUxIDEwLjQyNTkg''@;'; put 'put ''MjYuMTAxIDExWk0yOC45NCAyOUg1LjlMOS43OCAxNS4xOUM5Ljg3IDE1LjA3IDEwLjAxIDE0Ljk4IDEwLjE2IDE0Ljk1SDMyLjg4TDI4Ljk0IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zNC43MDU4IDEzLjc0QzM0LjM3NDQgMTMuMjY0MyAzMy44MjIzIDEyLjk4NiAzMy4yMzc5IDEzSDEw''@;'; put 'put ''LjI1ODNDOS4yNjk1MiAxMy4wNDE0IDguMzg4NTggMTMuNjI5MyA3Ljk4MDYgMTQuNTJDNy45NzcyOSAxNC41NjY2IDcuOTc3MjkgMTQuNjEzNCA3Ljk4MDYgMTQuNjZMNS4wMjQ2MyAyNVY3LjAwMDAxSDExLjU5NDZMMTQuMjM2NyAxMC41OUMxNC40Mjc5IDEwLjg0ODQgMTQuNzMyNyAxMS4w''@;'; put 'put ''MDA4IDE1LjA1NjcgMTFIMzEuMzQ0OUMzMS4zNDQ5IDkuODk1NDQgMzAuNDM4NCA5LjAwMDAxIDI5LjMyMDMgOS4wMDAwMUgxNS41NzNMMTMuMjM0NSA1LjgyMDAxQzEyLjg1MjIgNS4zMDMxOCAxMi4yNDI2IDQuOTk4MzUgMTEuNTk0NiA1LjAwMDAxSDUuMDI0NjNDMy45MDY0NiA1LjAwMDAx''@;'; put 'put ''IDMgNS44OTU0NCAzIDcuMDAwMDFWMjkuNjlDMy4wMzI4OSAzMC40Mzg5IDMuNjY4OTEgMzEuMDIyNiA0LjQyNzM3IDMxSDI5LjY2NDRDMzAuMTI5MyAzMS4wMTgzIDMwLjU0NjkgMzAuNzIxMyAzMC42NzY4IDMwLjI4TDM0LjkxODQgMTUuMThDMzUuMDc4OCAxNC42OTM1IDM1LjAwMDEgMTQu''@;'; put 'put ''MTYxIDM0LjcwNTggMTMuNzRaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUg''@;'; put 'put ''MTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcg''@;'; put 'put ''MS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjIzMjUgMTNDMjAuMjg1OCAxMy4xMzI2IDIwLjM0ODUgMTMuMjYyNyAyMC40MjA2IDEzLjM4OTNDMjEuMDIzMyAxNC40NDg5IDIyLjE1NzcgMTUuMDYwNCAyMy4zMzk1''@;'; put 'put ''IDE1LjAzNjdIMzQuNjYzN0MzNC43NjI5IDE1LjAzODcgMzQuODYxOCAxNS4wMzYyIDM0Ljk2MDEgMTUuMDI5M0MzNC45NDg3IDE1LjA3OTkgMzQuOTM0OCAxNS4xMzAyIDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQg''@;'; put 'put ''MzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5''@;'; put 'put ''LjAwMDAxSDIxLjE1OTRMMjAuNTM2MiAxMC4wMzg3QzIwLjMzNzUgMTAuMzM4MSAyMC4xOTM3IDEwLjY2MzIgMjAuMTA1NiAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQu''@;'; put 'put ''NjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDIwLjIzMjVaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTMxIDExQzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMu''@;'; put 'put ''MjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMuMjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4LjIzODYgMTEgMzEgMTFaIi8+PHBhdGggZD0iTTI0LjY3MzYgOS4wMDAwMUMyNS4wMjk3IDkuNzQ5NjEgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMUgxNS4wNTY3QzE0LjczMjcgMTEu''@;'; put 'put ''MDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDMz''@;'; put 'put ''LjIzNzlDMzMuODIyMyAxMi45ODYgMzQuMzc0NCAxMy4yNjQzIDM0LjcwNTggMTMuNzRDMzUuMDAwMSAxNC4xNjEgMzUuMDc4OCAxNC42OTM1IDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2''@;'; put 'put ''ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDI0LjY3MzZa''@;'; put 'put ''Ii8+J31dLEZPZT1bIm1pbnVzIix7b3V0bGluZTonPHBhdGggZD0iTTI2IDE3SDEwQzkuNDQ3NzIgMTcgOSAxNy40NDc3IDkgMThDOSAxOC41NTIzIDkuNDQ3NzIgMTkgMTAgMTlIMjZDMjYuNTUyMyAxOSAyNyAxOC41NTIzIDI3IDE4QzI3IDE3LjQ0NzcgMjYuNTUyMyAxNyAyNiAxN1oiLz4n''@;'; put 'put ''fV0sSE9lPVsicGx1cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS45OTk5IDE3SDE4Ljk5OTlWNkMxOC45OTk5IDUuNDQ3NzIgMTguNTUyMiA1IDE3Ljk5OTkgNUMxNy40NDc2IDUgMTYuOTk5OSA1LjQ0NzcyIDE2Ljk5OTkgNlYxN0g1Ljk5OTkyQzUuNDQ3NjQgMTcgNC45OTk5MiAxNy40NDc3''@;'; put 'put ''IDQuOTk5OTIgMThDNC45ODk5NCAxOC4yNjMgNS4wOTQyNyAxOC41MTc0IDUuMjg2IDE4LjY5NzZDNS40Nzc3MyAxOC44Nzc4IDUuNzM4MDkgMTguOTY2MiA1Ljk5OTkyIDE4Ljk0SDE2Ljk5OTlWMzBDMTYuOTk5OSAzMC41NTIzIDE3LjQ0NzYgMzEgMTcuOTk5OSAzMUMxOC41NTIyIDMxIDE4''@;'; put 'put ''Ljk5OTkgMzAuNTUyMyAxOC45OTk5IDMwVjE5SDI5Ljk5OTlDMzAuNTUyMiAxOSAzMC45OTk5IDE4LjU1MjMgMzAuOTk5OSAxOEMzMC45OTk5IDE3LjQ0NzcgMzAuNTUyMiAxNyAyOS45OTk5IDE3WiIvPid9XSxOT2U9WyJleWUtaGlkZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNC41NDk1IDIw''@;'; put 'put ''LjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQwMUwxNy4yMDI5IDEzLjA4MDFD''@;'; put 'put ''MTcuNDYyOCAxMy4wNDAxIDE3LjcyMjcgMTMuMDAwMSAxNy45OTI2IDEzLjAwMDFDMjAuNzUxMyAxMy4wMDAxIDIyLjk5MDIgMTUuMjQwMSAyMi45OTAyIDE4LjAwMDFDMjIuOTkwMiAxOC4yNzAxIDIyLjk1MDIgMTguNTMwMSAyMi45MTAzIDE4Ljc5MDFMMjQuNTQ5NSAyMC40MzAxWk0xNy45''@;'; put 'put ''OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTgu''@;'; put 'put ''MzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1''@;'; put 'put ''LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZM''@;'; put 'put ''OC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0''@;'; put 'put ''MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMy''@;'; put 'put ''MDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTMuODM0NSAxNS4yNTAxTDIwLjc0MTMgMjIuMTYwMUMxOS45NTE2IDIyLjY4MDEgMTkuMDEyMSAyMy4wMDAxIDE3Ljk5MjYgMjMuMDAwMUMxNS4yMzM5IDIzLjAwMDEgMTIuOTk0OSAyMC43NjAxIDEy''@;'; put 'put ''Ljk5NDkgMTguMDAwMUMxMi45OTQ5IDE2Ljk4MDEgMTMuMzA0OCAxNi4wNDAxIDEzLjgzNDUgMTUuMjUwMVpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYz''@;'; put 'put ''NCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMu''@;'; put 'put ''NTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjkuMzk3MiAxMi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5NjUgMjAu''@;'; put 'put ''MTkwMSAyOS40MjcyIDIyLjA2MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIwLjk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44NjAxIDMzLjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2MDEgMjQu''@;'; put 'put ''OTM5MyA3LjAwMDA2IDE4LjAwMjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwxMy43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAxOC4wMDI2IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAyLjI5MDA2''@;'; put 'put ''QzMuMzE5NDQgMS45MDAwNiAyLjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAxIDMuNDQ5MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFDMS45NzAw''@;'; put 'put ''NyAxNy44NjAxIDEuOTcwMDcgMTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4OSAyNy4xNTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4IDMzLjkx''@;'; put 'put ''MDEgMzIuNzI1NyAzNC4wMDAxIDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMuNzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMwMDFMMy43MDkyNiAyLjI5MDA2Wk0xNy45OTI2IDI3LjAwMDFDMTEu''@;'; put 'put ''OTk1NCAyNy4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAxMC45OTU4IDE2LjQzMDEgMTAuOTk1OCAxOC4wMDAxQzEwLjk5NTgg''@;'; put 'put ''MjEuODYwMSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkxNSAyNy4wMDAxIDE3Ljk5MjYgMjcuMDAwMVpNMTUuNTYzNyAxMS40''@;'; put 'put ''NDAxTDI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEuMDAwMSAxNi4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAxWiIv''@;'; put 'put ''Pid9XSxWT2U9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQu''@;'; put 'put ''MTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTE3Ljk5NzYgMjNDMTUuMjM4IDIzIDEyLjk5ODMgMjAuNzYgMTIuOTk4MyAxOEMxMi45OTgzIDE1LjI0IDE1LjIzOCAxMyAxNy45OTc2IDEzQzIwLjc1NzEgMTMgMjIuOTk2OCAxNS4yNCAyMi45OTY4IDE4QzIyLjk5NjggMjAuNzYgMjAuNzU3MSAy''@;'; put 'put ''MyAxNy45OTc2IDIzWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4xNCAyLjA4MDA1IDE4LjM5QzQuODA5NjIgMjQuODQgMTEuMDU4NiAy''@;'; put 'put ''OSAxNy45OTc2IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQuMDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAyMy40OCA0LjA4OTczIDE4QzYuNTg5MzQgMTIuNTIgMTEuOTk4NSA5''@;'; put 'put ''IDE3Ljk5NzYgOUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAyNyAxNy45OTc2IDI3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEgMTAuOTk4NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5ODcgMjEuODYg''@;'; put 'put ''MTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcg''@;'; put 'put ''Mi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1''@;'; put 'put ''MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4n''@;'; put 'put ''fV0sQk9lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIg''@;'; put 'put ''MTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4x''@;'; put 'put ''IDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4x''@;'; put 'put ''MDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0yMS4xMDAxIDQuOUMyMS4xMDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAxOC4xMDAx''@;'; put 'put ''IDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAzLjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEuMTAwMSAx''@;'; put 'put ''OS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEgMTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAuOSAxOC4xMDAxIDIwLjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMzRD''@;'; put 'put ''MTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4xMDAxIDMyLjcwMTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0WiIvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxqT2U9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBm''@;'; put 'put ''aWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMxIDVINUMzLjg5NTQzIDUgMyA1Ljg5NTQzIDMgN1YyOUMzIDMwLjEwNDYgMy44OTU0MyAzMSA1IDMxSDMxQzMyLjEwNDYgMzEgMzMgMzAuMTA0NiAzMyAyOVY3QzMzIDUuODk1NDMgMzIuMTA0NiA1IDMxIDVaTTEz''@;'; put 'put ''IDI5SDVWN0gxM1YyOVpNMTUgMjlIMjNWN0gxNVYyOVoiLz4nfV0sek9lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjUwNCAxNS42MzQxTDE3Ljk5NTEgNkw4LjMzOTgxIDE1LjYzNDFDOC4wMjg2OSAxNS44NzE3IDcuODg0MzIgMTYuMjY5NSA3Ljk3MDMgMTYuNjUyMUM4LjA1''@;'; put 'put ''NjI5IDE3LjAzNDcgOC4zNTY4NSAxNy4zMzE5IDguNzM5NTIgMTcuNDEyN0M5LjEyMjE5IDE3LjQ5MzUgOS41MTY2NyAxNy4zNDMgOS43NDkxMiAxNy4wMjc2TDE2Ljk5NTYgOS44MTk1NVYyOC45OTc1QzE2Ljk5NTYgMjkuNTUxMiAxNy40NDMxIDMwIDE3Ljk5NTEgMzBDMTguNTQ3MSAzMCAx''@;'; put 'put ''OC45OTQ2IDI5LjU1MTIgMTguOTk0NiAyOC45OTc1VjkuODE5NTVMMjYuMjQxMSAxNy4wMjc2QzI2LjYzMyAxNy40MTc5IDI3LjI2NjIgMTcuNDE1NyAyNy42NTU0IDE3LjAyMjZDMjguMDQ0NSAxNi42Mjk1IDI4LjA0MjMgMTUuOTk0MyAyNy42NTA0IDE1LjYwNFYxNS42MzQxWiIvPid9XSxV''@;'; put 'put ''T2U9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4ODkzIDYuNTIwMDNDNi45MjY0MyA2LjY3NjQ1IDYuNzk3MzQgNi44NjMxNSA2LjcwOTIxIDcuMDY5MjFDNi42MjEwOCA3LjI3NTI2IDYuNTc1NjggNy40OTY1MiA2LjU3NTY4IDcuNzIwMDNDNi41NzU2OCA3Ljk0''@;'; put 'put ''MzUzIDYuNjIxMDggOC4xNjQ3OSA2LjcwOTIxIDguMzcwODVDNi43OTczNCA4LjU3NjkgNi45MjY0MyA4Ljc2MzYxIDcuMDg4OTMgOC45MjAwM0wxNi42ODcyIDE4TDcuMTI5NjQgMjcuMDhDNi44Mjk3NyAyNy4zOTkxIDYuNjY1NTQgMjcuODE4OCA2LjY3MDY1IDI4LjI1M0M2LjY3NTc2IDI4''@;'; put 'put ''LjY4NzIgNi44NDk4MiAyOS4xMDMxIDcuMTU3MTIgMjkuNDE1MkM3LjQ2NDQyIDI5LjcyNzQgNy44ODE2NiAyOS45MTIxIDguMzIzMjMgMjkuOTMxNkM4Ljc2NDggMjkuOTUxMSA5LjE5NzIxIDI5LjgwMzggOS41MzE3NiAyOS41MkwyMS42NjQ1IDE4TDkuNTMxNzYgNi40NzAwM0M5LjM2ODUx''@;'; put 'put ''IDYuMzE0ODIgOS4xNzU1OSA2LjE5MjkzIDguOTY0MTMgNi4xMTEzN0M4Ljc1MjY3IDYuMDI5ODIgOC41MjY4NiA1Ljk5MDIyIDguMjk5NzQgNS45OTQ4N0M4LjA3MjYyIDUuOTk5NTIgNy44NDg2OSA2LjA0ODMyIDcuNjQwODcgNi4xMzg0NkM3LjQzMzA1IDYuMjI4NTkgNy4yNDU0NiA2LjM1''@;'; put 'put ''ODI4IDcuMDg4OTMgNi41MjAwM1oiLz48cGF0aCBkPSJNMjYuODQ1MyA1QzI2LjM4NjQgNSAyNS45NDYzIDUuMTc5MTEgMjUuNjIxOCA1LjQ5NzkyQzI1LjI5NzMgNS44MTY3MyAyNS4xMTUgNi4yNDkxMyAyNS4xMTUgNi43VjI5LjNDMjUuMTE1IDI5Ljc1MDkgMjUuMjk3MyAzMC4xODMzIDI1''@;'; put 'put ''LjYyMTggMzAuNTAyMUMyNS45NDYzIDMwLjgyMDkgMjYuMzg2NCAzMSAyNi44NDUzIDMxQzI3LjMwNDMgMzEgMjcuNzQ0NCAzMC44MjA5IDI4LjA2ODkgMzAuNTAyMUMyOC4zOTM0IDMwLjE4MzMgMjguNTc1NyAyOS43NTA5IDI4LjU3NTcgMjkuM1Y2LjdDMjguNTc1NyA2LjI0OTEzIDI4LjM5''@;'; put 'put ''MzQgNS44MTY3MyAyOC4wNjg5IDUuNDk3OTJDMjcuNzQ0NCA1LjE3OTExIDI3LjMwNDMgNSAyNi44NDUzIDVaIi8+J31dLFpPZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2''@;'; put 'put ''MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAz''@;'; put 'put ''MiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNMTcgMjYuODZMMTUgMjUuODZWMjAuNjhMOC40MiAx''@;'; put 'put ''NEM4LjE1Njc5IDEzLjczMyA4LjAwNjQgMTMuMzc0OSA4IDEzVjEyQzggMTEuNDQ3NyA4LjQ0NzcyIDExIDkgMTFIMjdDMjcuNTUyMyAxMSAyOCAxMS40NDc3IDI4IDEyVjEzQzI3Ljk5MzYgMTMuMzc0OSAyNy44NDMyIDEzLjczMyAyNy41OCAxNEwyMSAyMC42OFYyOUwxOSAyOEwxOS4wMyAy''@;'; put 'put ''MC4yN0MxOS4wMzExIDIwLjAwNzcgMTkuMTM1MyAxOS43NTYzIDE5LjMyIDE5LjU3TDI1Ljc5IDEzSDEwLjIzTDE2LjcxIDE5LjU3QzE2Ljg5NDcgMTkuNzU2MyAxNi45OTg5IDIwLjAwNzcgMTcgMjAuMjdWMjYuODZaIi8+Jyxzb2xpZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlw''@;'; put 'put ''LXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAy''@;'; put 'put ''Mi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk04''@;'; put 'put ''IDEyLjEyVjExSDI3Ljk4VjEyLjE0QzI3Ljk3ODEgMTIuMjcxOSAyNy45MjQyIDEyLjM5NzcgMjcuODMgMTIuNDlMMjAuNzEgMTkuNzRDMjAuNjA4MSAxOS44Mjk5IDIwLjU0MzggMTkuOTU0OCAyMC41MyAyMC4wOVYyOC40OEMyMC41MzAzIDI4LjY1MjggMjAuNDQxNSAyOC44MTM0IDIwLjI5''@;'; put 'put ''NSAyOC45MDVDMjAuMTQ4NSAyOC45OTY2IDE5Ljk2NTEgMjkuMDA2IDE5LjgxIDI4LjkzTDE1Ljg2IDI3LjUyQzE1LjY4ODMgMjcuNDM1OSAxNS41Nzk2IDI3LjI2MTIgMTUuNTggMjcuMDdWMjAuMThDMTUuNTc4MSAyMC4wNDgxIDE1LjUyNDIgMTkuOTIyMyAxNS40MyAxOS44M0w4LjE1IDEy''@;'; put 'put ''LjQ3QzguMDU1NzkgMTIuMzc3NyA4LjAwMTg4IDEyLjI1MTkgOCAxMi4xMloiLz4nfV0sV09lPVsiZmlsdGVyLWdyaWQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTUgMjMuODZMMTcgMjQuODZWMTguMjdDMTYuOTk4OSAxOC4wMDc3IDE2Ljg5NDcgMTcuNzU2MyAxNi43MSAxNy41N0wxMC4yMyAx''@;'; put 'put ''MUgyNS43OUwxOS4zMiAxNy41N0MxOS4xMzUzIDE3Ljc1NjMgMTkuMDMxMSAxOC4wMDc3IDE5LjAzIDE4LjI3TDE5IDI2TDIxIDI3VjE4LjY4TDI3LjU4IDEyQzI3Ljg0MzIgMTEuNzMzIDI3Ljk5MzYgMTEuMzc0OSAyOCAxMVYxMEMyOCA5LjQ0NzcyIDI3LjU1MjMgOSAyNyA5SDlDOC40NDc3''@;'; put 'put ''MiA5IDggOS40NDc3MiA4IDEwVjExQzguMDA2NCAxMS4zNzQ5IDguMTU2NzkgMTEuNzMzIDguNDIgMTJMMTUgMTguNjhWMjMuODZaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTggOVYxMC4xMjEyQzguMDAxODggMTAuMjUzMiA4LjA1NTg1IDEwLjM3OTEgOC4xNTAxNSAxMC40NzE2TDE1LjQzNzQg''@;'; put 'put ''MTcuODM5M0MxNS41MzE3IDE3LjkzMTcgMTUuNTg1NyAxOC4wNTc3IDE1LjU4NzYgMTguMTg5N1YyNS4wODdDMTUuNTg3MiAyNS4yNzg0IDE1LjY5NiAyNS40NTMyIDE1Ljg2NzkgMjUuNTM3NUwxOS44MjE4IDI2Ljk0ODlDMTkuOTc3MSAyNy4wMjUgMjAuMTYwNyAyNy4wMTU2IDIwLjMwNzMg''@;'; put 'put ''MjYuOTIzOUMyMC40NTM5IDI2LjgzMjMgMjAuNTQyOSAyNi42NzE0IDIwLjU0MjUgMjYuNDk4NVYxOC4wOTk2QzIwLjU1NjQgMTcuOTY0MyAyMC42MjA3IDE3LjgzOTIgMjAuNzIyNyAxNy43NDkyTDI3Ljg0OTggMTAuNDkxNkMyNy45NDQyIDEwLjM5OTIgMjcuOTk4MSAxMC4yNzMyIDI4IDEw''@;'; put 'put ''LjE0MTJWOUg4WiIvPid9XSxzWT1bImVycm9yLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDIyLjYxQzE3LjQ0NzcgMjIuNjEgMTcgMjIuMTYyMyAxNyAyMS42MVY5LjYxQzE3IDkuMDU3NzIgMTcuNDQ3NyA4LjYxIDE4IDguNjFDMTguNTUyMyA4LjYxIDE5IDkuMDU3NzIgMTkg''@;'; put 'put ''OS42MVYyMS42MUMxOSAyMi4xNjIzIDE4LjU1MjMgMjIuNjEgMTggMjIuNjFaIi8+PHBhdGggZD0iTTE5LjMzIDI2LjA2QzE5LjMzIDI2Ljc5NDUgMTguNzM0NSAyNy4zOSAxOCAyNy4zOUMxNy4yNjU1IDI3LjM5IDE2LjY3IDI2Ljc5NDUgMTYuNjcgMjYuMDZDMTYuNjcgMjUuMzI1NSAxNy4y''@;'; put 'put ''NjU1IDI0LjczIDE4IDI0LjczQzE4LjczNDUgMjQuNzMgMTkuMzMgMjUuMzI1NSAxOS4zMyAyNi4wNloiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjIuMjQzNSAzNCAyNi4zMTMxIDMy''@;'; put 'put ''LjMxNDMgMjkuMzEzNyAyOS4zMTM3QzMyLjMxNDMgMjYuMzEzMSAzNCAyMi4yNDM1IDM0IDE4QzM0IDkuMTYzNDQgMjYuODM2NiAyIDE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4Wk00IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDI1''@;'; put 'put ''LjczMiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4y''@;'; put 'put ''NCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcgOS42MUMxNyA5LjA2IDE3LjQ1IDguNjEgMTggOC42MUMxOC41NSA4LjYxIDE5IDkuMDYgMTkgOS42MVYyMS42MUMxOSAyMi4xNiAxOC41NSAyMi42MSAxOCAyMi42MUMxNy40NSAyMi42MSAxNyAyMi4xNiAxNyAyMS42MVY5LjYxWk0x''@;'; put 'put ''OCAyNy4yNkMxNy4zNCAyNy4yNiAxNi44IDI2LjcyIDE2LjggMjYuMDZDMTYuOCAyNS40IDE3LjM0IDI0Ljg2IDE4IDI0Ljg2QzE4LjY2IDI0Ljg2IDE5LjIgMjUuNCAxOS4yIDI2LjA2QzE5LjIgMjYuNzIgMTguNjYgMjcuMjYgMTggMjcuMjZaIi8+J31dLFlPZT1bImhlbHAiLHtvdXRsaW5l''@;'; put 'put ''Oic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiA5LjE2MzQ0IDkuMTYzNDQgMiAxOCAyQzIyLjI0MzUgMiAyNi4zMTMxIDMuNjg1NzEgMjkuMzEzNyA2LjY4NjI5QzMyLjMxNDMgOS42ODY4NyAzNCAxMy43NTY1IDM0IDE4QzM0IDI2Ljgz''@;'; put 'put ''NjYgMjYuODM2NiAzNCAxOCAzNEM5LjE2MzQ0IDM0IDIgMjYuODM2NiAyIDE4Wk00IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyMS43MTMgMzIgMjUuMjc0IDMwLjUyNSAyNy44OTk1IDI3Ljg5OTVDMzAuNTI1IDI1LjI3NCAzMiAyMS43MTMgMzIgMThDMzIgMTAuMjY4IDI1LjczMiA0''@;'; put 'put ''IDE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOFpNMTguMjkgOC45MkMxNi4wOTYxIDguODgzNzQgMTMuOTk5OCA5LjgyNTYgMTIuNTcgMTEuNDlDMTIuMzcxOCAxMS42NzM3IDEyLjI1NjMgMTEuOTI5OCAxMi4yNSAxMi4yQzEyLjI0OTkgMTIuNDQ5MyAxMi4zNTA5IDEyLjY4OCAxMi41MyAx''@;'; put 'put ''Mi44NjE0QzEyLjcwOTEgMTMuMDM0OCAxMi45NTA4IDEzLjEyODEgMTMuMiAxMy4xMkMxMy40NjQyIDEzLjExMzUgMTMuNzE2OCAxMy4wMTAzIDEzLjkxIDEyLjgzQzE0Ljk5MTYgMTEuNTYyNSAxNi41NzM3IDEwLjgzMTcgMTguMjQgMTAuODNDMjAuNiAxMC44MyAyMi4wNyAxMi4zNSAyMi4w''@;'; put 'put ''NyAxNC4yNFYxNC4yOUMyMi4wNyAxNi41IDIwLjMxIDE3LjczIDE3LjUzIDE3Ljk0QzE3LjMwMjMgMTcuOTQ4OCAxNy4wODkyIDE4LjA1NDIgMTYuOTQ0MSAxOC4yMjk5QzE2Ljc5OSAxOC40MDU2IDE2LjczNTcgMTguNjM0OCAxNi43NyAxOC44NlYyMS42MUMxNi44MjE1IDIyLjEyMjkgMTcu''@;'; put 'put ''MjU0NSAyMi41MTI2IDE3Ljc3IDIyLjUxSDE3Ljg4QzE4LjM5MjkgMjIuNDU4NSAxOC43ODI2IDIyLjAyNTUgMTguNzggMjEuNTFWMTkuNDVDMjEuNzggMTkuMDMgMjQuMjEgMTcuNDUgMjQuMjEgMTQuMTdWMTQuMTJDMjQuMTggMTEuMTIgMjEuODQgOC45MiAxOC4yOSA4LjkyWk0xOS4wMyAy''@;'; put 'put ''Ni4yQzE5LjAzIDI2Ljg5MDQgMTguNDcwNCAyNy40NSAxNy43OCAyNy40NUMxNy4wODk2IDI3LjQ1IDE2LjUzIDI2Ljg5MDQgMTYuNTMgMjYuMkMxNi41MyAyNS41MDk2IDE3LjA4OTYgMjQuOTUgMTcuNzggMjQuOTVDMTguNDcwNCAyNC45NSAxOS4wMyAyNS41MDk2IDE5LjAzIDI2LjJaIi8+''@;'; put 'put ''JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzMuMDAxMyAxMi43Njg5QzMyLjM5NTkgMTMuMDQ2MiAzMS43NTU5IDEzLjI0MDYgMzEuMDk4NiAxMy4zNDY3QzMzLjI2MzYgMTkuNTEwOCAzMC44NzYzIDI2LjM1MjggMjUuMzQ2NSAyOS44MzJDMTkuODE2NyAzMy4zMTEyIDEyLjYxNTQgMzIu''@;'; put 'put ''NTAyIDcuOTk1NjkgMjcuODgyMkMzLjM3NTk3IDIzLjI2MjUgMi41NjY3NCAxNi4wNjEzIDYuMDQ1OTIgMTAuNTMxNUM5LjUyNTA5IDUuMDAxNjIgMTYuMzY3MSAyLjYxNDI5IDIyLjUzMTIgNC43NzkzOEMyMi42Mzc1IDQuMTIyMDUgMjIuODMxOCAzLjQ4MjA0IDIzLjEwOSAyLjg3NjYzQzE2''@;'; put 'put ''LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAzNS41MTM1IDI2LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3''@;'; put 'put ''IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5WiIvPjxwYXRoIGQ9Ik0xNy43MTk2IDI3LjM1MzNDMTguNDA3MyAyNy4zNTMzIDE4Ljk2NDggMjYuNzk1OCAxOC45NjQ4IDI2LjEwODFDMTguOTY0OCAyNS40MjAzIDE4LjQwNzMgMjQuODYyOCAxNy43MTk2IDI0Ljg2MjhDMTcuMDMxOCAyNC44NjI4''@;'; put 'put ''IDE2LjQ3NDMgMjUuNDIwMyAxNi40NzQzIDI2LjEwODFDMTYuNDc0MyAyNi43OTU4IDE3LjAzMTggMjcuMzUzMyAxNy43MTk2IDI3LjM1MzNaIi8+PHBhdGggZD0iTTI0LjA5NTMgMTQuMDczOVYxNC4xMjM4QzI0LjA5NTMgMTcuMzkxMyAyMS42NzQ1IDE4LjkzNTQgMTguNzI1NyAxOS4zODM3''@;'; put 'put ''VjIxLjQzNTlDMTguNzI4MyAyMS45NDk0IDE4LjM0MDEgMjIuMzgwNyAxNy44MjkxIDIyLjQzMjFIMTcuNzE5NkMxNy4yMDYgMjIuNDM0NyAxNi43NzQ3IDIyLjA0NjUgMTYuNzIzMyAyMS41MzU1VjE4Ljc5NTlDMTYuNjg5MSAxOC41NzE2IDE2Ljc1MjIgMTguMzQzMiAxNi44OTY4IDE4LjE2''@;'; put 'put ''ODJDMTcuMDQxMyAxNy45OTMyIDE3LjI1MzcgMTcuODg4MiAxNy40ODA1IDE3Ljg3OTRDMjAuMjQ5OSAxNy42NzAyIDIyLjAwMzIgMTYuNDQ0OSAyMi4wMDMyIDE0LjI0MzNWMTQuMTkzNUMyMi4wMDMyIDEyLjMxMDcgMjAuNTM4OCAxMC43OTY0IDE4LjE4NzggMTAuNzk2NEMxNi41Mjc4IDEw''@;'; put 'put ''Ljc5ODIgMTQuOTUxNyAxMS41MjYxIDEzLjg3NDIgMTIuNzg4OEMxMy42ODE3IDEyLjk2ODQgMTMuNDMwMSAxMy4wNzEyIDEzLjE2NjkgMTMuMDc3N0MxMi45MTg3IDEzLjA4NTggMTIuNjc3OCAxMi45OTI5IDEyLjQ5OTQgMTIuODIwMUMxMi4zMjEgMTIuNjQ3MyAxMi4yMjA0IDEyLjQwOTYg''@;'; put 'put ''MTIuMjIwNSAxMi4xNjEyQzEyLjIyNjggMTEuODkyMSAxMi4zNDE4IDExLjYzNjkgMTIuNTM5MyAxMS40NTM5QzEzLjk2MzcgOS43OTU4NSAxNi4wNTIgOC44NTc1NyAxOC4yMzc2IDguODkzNjlDMjEuNzY0MSA4Ljg5MzY5IDI0LjA5NTMgMTEuMDg1MyAyNC4wOTUzIDE0LjA3MzlaIi8+PHBh''@;'; put 'put ''dGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1''@;'; put 'put ''bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4y''@;'; put 'put ''NDM1IDIgMTggMlpNMTcuNzggMjcuODVDMTcuMTEyNiAyNy44NSAxNi41MTEgMjcuNDQ4IDE2LjI1NTYgMjYuODMxNEMxNi4wMDAyIDI2LjIxNDkgMTYuMTQxNCAyNS41MDUyIDE2LjYxMzMgMjUuMDMzM0MxNy4wODUyIDI0LjU2MTQgMTcuNzk0OSAyNC40MjAyIDE4LjQxMTQgMjQuNjc1NkMx''@;'; put 'put ''OS4wMjggMjQuOTMxIDE5LjQzIDI1LjUzMjYgMTkuNDMgMjYuMkMxOS40MyAyNy4xMTEzIDE4LjY5MTMgMjcuODUgMTcuNzggMjcuODVaTTE5LjE1IDIxLjUxVjE5Ljc5QzIyLjYxIDE5LjIgMjQuNTggMTcuMTYgMjQuNTggMTQuMTFDMjQuNTggMTAuODEgMjIgOC41MSAxOC4zIDguNTFDMTYu''@;'; put 'put ''MDAwNSA4LjQ3NDUyIDEzLjgwMzMgOS40NTk1NiAxMi4zIDExLjJDMTIuMDMwNCAxMS40NjM2IDExLjg3NTkgMTEuODIzIDExLjg3IDEyLjJDMTEuODgzIDEyLjc1MTYgMTIuMjI4IDEzLjI0MDYgMTIuNzQzMiAxMy40MzhDMTMuMjU4NSAxMy42MzUzIDEzLjg0MTkgMTMuNTAxOCAxNC4yMiAx''@;'; put 'put ''My4xQzE1LjIwOTIgMTEuOTA2OSAxNi42NzA0IDExLjIwNTYgMTguMjIgMTEuMThDMjAuMjQgMTEuMTggMjEuNjUgMTIuNDIgMjEuNjUgMTQuMjVDMjEuNjUgMTYuOCAxOS4wNCAxNy4zOCAxNy40NyAxNy41QzE3LjE0NDggMTcuNTE3NSAxNi44NDA5IDE3LjY2NzQgMTYuNjI5MyAxNy45MTVD''@;'; put 'put ''MTYuNDE3NiAxOC4xNjI1IDE2LjMxNjcgMTguNDg2IDE2LjM1IDE4LjgxVjIxLjU3QzE2LjM2MDQgMjEuOTI3MiAxNi41MTMxIDIyLjI2NTUgMTYuNzc0MSAyMi41MDk2QzE3LjAzNTEgMjIuNzUzNyAxNy4zODI5IDIyLjg4MzUgMTcuNzQgMjIuODdIMTcuODVDMTguNTc1MyAyMi44MzI5IDE5''@;'; put 'put ''LjE0NTYgMjIuMjM2MiAxOS4xNSAyMS41MVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjAwMTMgMTIuNzY4OUMzMC4xNjU5IDE0LjA2ODggMjYuODIxMiAxMy40Njc5IDI0LjYxNTYgMTEuMjYyM0MyMi40MTAx''@;'; put 'put ''IDkuMDU2NzQgMjEuODA5MSA1LjcxMiAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEz''@;'; put 'put ''NSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVpNMTcuNzE5NiAyNy43MTJDMTcuMDU0NyAyNy43MTIgMTYuNDU1NCAyNy4zMTE1IDE2LjIwMDkgMjYuNjk3M0MxNS45NDY1IDI2LjA4MyAxNi4wODcyIDI1LjM3NiAxNi41NTcz''@;'; put 'put ''IDI0LjkwNTlDMTcuMDI3NCAyNC40MzU4IDE3LjczNDQgMjQuMjk1MiAxOC4zNDg2IDI0LjU0OTZDMTguOTYyOCAyNC44MDQgMTkuMzYzMyAyNS40MDM0IDE5LjM2MzMgMjYuMDY4MkMxOS4zNzQgMjYuNTExIDE5LjIwNTYgMjYuOTM5NCAxOC44OTYyIDI3LjI1NjRDMTguNTg2NyAyNy41NzMz''@;'; put 'put ''IDE4LjE2MjUgMjcuNzUxOSAxNy43MTk2IDI3Ljc1MThWMjcuNzEyWk0xOS4wODQ0IDIxLjM5NlYxOS43MjI0QzIyLjUzMTIgMTkuMTM0NyAyNC40OTM3IDE3LjEwMjQgMjQuNDkzNyAxNC4wMjQxQzI0LjQ5MzcgMTAuNzM2NyAyMS45MjM1IDguNDQ1NCAxOC4yMzc2IDguNDQ1NEMxNS45NDY4''@;'; put 'put ''IDguNDEwMDYgMTMuNzU4IDkuMzkxMzYgMTIuMjYwNCAxMS4xMjUyQzExLjk5MTggMTEuMzg3OCAxMS44Mzc5IDExLjc0NTggMTEuODMyIDEyLjEyMTRDMTEuODQ1IDEyLjY3MDkgMTIuMTg4NiAxMy4xNTgxIDEyLjcwMTkgMTMuMzU0N0MxMy4yMTUyIDEzLjU1MTIgMTMuNzk2NCAxMy40MTgy''@;'; put 'put ''IDE0LjE3MzEgMTMuMDE4QzE1LjE1ODYgMTEuODI5NCAxNi42MTQxIDExLjEzMDcgMTguMTU3OSAxMS4xMDUzQzIwLjE3MDIgMTEuMTA1MyAyMS41NzQ5IDEyLjM0MDYgMjEuNTc0OSAxNC4xNjM2QzIxLjU3NDkgMTYuNzAzOSAxOC45NzQ4IDE3LjI4MTcgMTcuNDEwNyAxNy40MDEzQzE3LjA4''@;'; put 'put ''NjcgMTcuNDE4NiAxNi43ODQgMTcuNTY4MSAxNi41NzMyIDE3LjgxNDdDMTYuMzYyMyAxOC4wNjEzIDE2LjI2MTggMTguMzgzNSAxNi4yOTUgMTguNzA2M1YyMS40NTU4QzE2LjMwNTQgMjEuODExNyAxNi40NTc1IDIyLjE0ODcgMTYuNzE3NSAyMi4zOTE5QzE2Ljk3NzUgMjIuNjM1MSAxNy4z''@;'; put 'put ''MjM5IDIyLjc2NDMgMTcuNjc5NyAyMi43NTA5SDE3Ljc4OTNDMTguNTExOCAyMi43MTM5IDE5LjA4IDIyLjExOTUgMTkuMDg0NCAyMS4zOTZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1''@;'; put 'put ''IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLEdPZT1bImluZm8tc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQg''@;'; put 'put ''MjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4Wk00IDE4QzQgMTAuMjcgMTAuMjcgNCAxOCA0QzI1LjczIDQgMzIgMTAuMjcgMzIgMThDMzIgMjUuNzMgMjUuNzMgMzIgMTggMzJDMTAuMjcgMzIgNCAyNS43MyA0IDE4Wk0yMSAyNUgxOVYxNEgxNkMx''@;'; put 'put ''NS40NSAxNCAxNSAxNC40NSAxNSAxNUMxNSAxNS41NSAxNS40NSAxNiAxNiAxNkgxN1YyNUgxNUMxNC40NSAyNSAxNCAyNS40NSAxNCAyNkMxNCAyNi41NSAxNC40NSAyNyAxNSAyN0gyMUMyMS41NSAyNyAyMiAyNi41NSAyMiAyNkMyMiAyNS40NSAyMS41NSAyNSAyMSAyNVpNMTkuMzcgMTAu''@;'; put 'put ''NDVDMTkuMzcgMTEuMjIgMTguNzQgMTEuODUgMTcuOTcgMTEuODVDMTcuMiAxMS44NSAxNi41NyAxMS4yMiAxNi41NyAxMC40NUMxNi41NyA5LjY4IDE3LjIgOS4wNSAxNy45NyA5LjA1QzE4Ljc0IDkuMDUgMTkuMzcgOS42OCAxOS4zNyAxMC40NVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgg''@;'; put 'put ''MkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNy45NyA4Ljg1QzE4Ljg1IDguODUgMTkuNTcgOS41NyAxOS41NyAx''@;'; put 'put ''MC40NUMxOS41NyAxMS4zMyAxOC44NSAxMi4wNSAxNy45NyAxMi4wNUMxNy4wOSAxMi4wNSAxNi4zNyAxMS4zMyAxNi4zNyAxMC40NUMxNi4zNyA5LjU3IDE3LjA5IDguODUgMTcuOTcgOC44NVpNMjEgMjcuMkgxNUMxNC4zNCAyNy4yIDEzLjggMjYuNjYgMTMuOCAyNkMxMy44IDI1LjM0IDE0''@;'; put 'put ''LjM0IDI0LjggMTUgMjQuOEgxNi44VjE2LjJIMTZDMTUuMzQgMTYuMiAxNC44IDE1LjY2IDE0LjggMTVDMTQuOCAxNC4zNCAxNS4zNCAxMy44IDE2IDEzLjhIMTkuMlYyNC44SDIxQzIxLjY2IDI0LjggMjIuMiAyNS4zNCAyMi4yIDI2QzIyLjIgMjYuNjYgMjEuNjYgMjcuMiAyMSAyNy4yWiIv''@;'; put 'put ''Pid9XSwkT2U9WyJub3RlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LDMwSDZWOEgxOS4yMmwyLTJINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNWwtMiwyWiIvPjxwYXRoIGQ9Ik0zMy41Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCww''@;'; put 'put ''LTIuMjgsMEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4LjgxLDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYu''@;'; put 'put ''ODdsMi44MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIi8+J31dLGxZPVsic3VjY2Vzcy1zdGFuZGFyZCIse291dGxp''@;'; put 'put ''bmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3''@;'; put 'put ''IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5''@;'; put 'put ''NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNMjYuNTkgMTIuMUMyNi45OCAxMS43MTIzIDI3LjYxIDExLjcxMjMgMjggMTIuMUMyOC4xODkzIDEyLjI4NzggMjguMjk1OCAxMi41NDM0IDI4LjI5NTggMTIuODFDMjguMjk1OCAxMy4wNzY2IDI4LjE4OTMgMTMuMzMyMiAyOCAxMy41''@;'; put 'put ''MkwxNS40OSAyNkw4IDE4LjUzQzcuNjE4OTIgMTguMTE4NSA3LjY0MzU1IDE3LjQ3NjEgOC4wNTUgMTcuMDk1QzguNDY2NDUgMTYuNzEzOSA5LjEwODkyIDE2LjczODUgOS40OSAxNy4xNUwxNS40OSAyMy4xNUwyNi41OSAxMi4xWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yOS4zMSA2LjY5QzI2''@;'; put 'put ''LjMxIDMuNjkgMjIuMjQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjYuODQgMzQgMzQgMjYuODQgMzQgMThDMzQgMTMuNzYgMzIuMzEgOS42OSAyOS4zMSA2LjY5Wk0yOC4xNCAxMy42NEwxNS42MyAyNi4xMkwxNS40OSAyNi4yNkwxNS4zNSAyNi4x''@;'; put 'put ''Mkw3Ljg1IDE4LjY0QzcuMzkgMTguMTUgNy40MiAxNy4zOCA3LjkyIDE2LjkyQzguMTUgMTYuNzEgOC40NCAxNi42IDguNzUgMTYuNkM5LjA5IDE2LjYgOS40MSAxNi43NCA5LjY0IDE2Ljk4TDE1LjUgMjIuODRMMjYuNDYgMTEuOTNDMjYuNjkgMTEuNyAyNi45OSAxMS41OCAyNy4zMSAxMS41''@;'; put 'put ''OEMyNy42MyAxMS41OCAyNy45MyAxMS43IDI4LjE2IDExLjkzQzI4LjM5IDEyLjE1IDI4LjUxIDEyLjQ2IDI4LjUxIDEyLjc4QzI4LjUxIDEzLjEgMjguMzggMTMuNDEgMjguMTYgMTMuNjNMMjguMTQgMTMuNjRaIi8+J31dLEtPZT1bIndhcm5pbmctc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0''@;'; put 'put ''aCBkPSJNMTguMDAwMSAyMi45OTMyQzE4LjU1MDEgMjIuOTkzMiAxOS4wMDAxIDIyLjU0MzQgMTkuMDAwMSAyMS45OTM2VjEwLjk5NzVDMTkuMDAwMSAxMC40NDc3IDE4LjU1MDEgOS45OTc4NiAxOC4wMDAxIDkuOTk3ODZDMTcuNDUwMSA5Ljk5Nzg2IDE3LjAwMDEgMTAuNDQ3NyAxNy4wMDAx''@;'; put 'put ''IDEwLjk5NzVWMjEuOTkzNkMxNy4wMDAxIDIyLjU0MzQgMTcuNDUwMSAyMi45OTMyIDE4LjAwMDEgMjIuOTkzMlpNMzMuNTYwMSAyNy4yMTE3TDIwLjc4MDEgNS41Nzk0NEMyMC4yMDAxIDQuNTg5NzkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU4OTc5IDE1LjIy''@;'; put 'put ''MDEgNS41Nzk0NEwyLjQ0MDEgMjcuMjExN0MxLjg1MDEgMjguMjExNCAxLjg1MDEgMjkuNDAwOSAyLjQzMDEgMzAuNDAwNkMzLjAxMDEgMzEuNDAwMiA0LjA2MDEgMzIgNS4yMjAxIDMySDMwLjc3MDFDMzEuOTQwMSAzMiAzMi45ODAxIDMxLjQwMDIgMzMuNTYwMSAzMC40MDA2QzM0LjE0MDEg''@;'; put 'put ''MjkuNDAwOSAzNC4xNDAxIDI4LjIxMTQgMzMuNTUwMSAyNy4yMTE3SDMzLjU2MDFaTTMxLjgxMDEgMjkuNDAwOUMzMS43MTAxIDI5LjU4MDkgMzEuNDAwMSAyOS45OTA3IDMwLjc4MDEgMjkuOTkwN0g1LjIzMDFDNC42MTAxIDI5Ljk5MDcgNC4zMDAxIDI5LjU4MDkgNC4yMDAxIDI5LjQwMDlD''@;'; put 'put ''NC4xMDAxIDI5LjIyMSAzLjg5MDEgMjguNzUxMiA0LjIwMDEgMjguMjMxM0wxNi45ODAxIDYuNTg5MDhDMTcuMjkwMSA2LjA2OTI2IDE3LjgwMDEgNi4wMDkyOCAxOC4wMDAxIDYuMDA5MjhDMTguMjAwMSA2LjAwOTI4IDE4LjcxMDEgNi4wNjkyNiAxOS4wMjAxIDYuNTg5MDhMMzEuNzkwMSAy''@;'; put 'put ''OC4yMjEzQzMyLjEwMDEgMjguNzUxMiAzMS45MDAxIDI5LjIyMSAzMS43OTAxIDI5LjM5MDlMMzEuODEwMSAyOS40MDA5Wk0xOC4wMTAxIDI1LjAwMjVDMTcuMjgwMSAyNS4wMDI1IDE2LjY4MDEgMjUuNjAyMyAxNi42ODAxIDI2LjMzMkMxNi42ODAxIDI3LjA2MTggMTcuMjgwMSAyNy42NjE1''@;'; put 'put ''IDE4LjAxMDEgMjcuNjYxNUMxOC43NDAxIDI3LjY2MTUgMTkuMzQwMSAyNy4wNjE4IDE5LjM0MDEgMjYuMzMyQzE5LjM0MDEgMjUuNjAyMyAxOC43NDAxIDI1LjAwMjUgMTguMDEwMSAyNS4wMDI1WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy41NjAxIDI3LjIyTDIwLjc4MDEgNS41OEMyMC4y''@;'; put 'put ''MDAxIDQuNTkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU5IDE1LjIyMDEgNS41OEwyLjQ0MDA2IDI3LjIyQzEuODUwMDYgMjguMjIgMS44NTAwNiAyOS40MSAyLjQ0MDA2IDMwLjQxQzMuMDIwMDYgMzEuNDEgNC4wNzAwNiAzMi4wMSA1LjIzMDA2IDMyLjAxSDMw''@;'; put 'put ''Ljc4MDFDMzEuOTUwMSAzMi4wMSAzMi45OTAxIDMxLjQxIDMzLjU3MDEgMzAuNDFDMzQuMTUwMSAyOS40MSAzNC4xNTAxIDI4LjIyIDMzLjU2MDEgMjcuMjJaTTE2LjkwMDEgMTFDMTYuOTAwMSAxMC4zOSAxNy4zOTAxIDkuOSAxOC4wMDAxIDkuOUMxOC42MTAxIDkuOSAxOS4xMDAxIDEwLjM5''@;'; put 'put ''IDE5LjEwMDEgMTFWMjJDMTkuMTAwMSAyMi42MSAxOC42MTAxIDIzLjEgMTguMDAwMSAyMy4xQzE3LjM5MDEgMjMuMSAxNi45MDAxIDIyLjYxIDE2LjkwMDEgMjJWMTFaTTE4LjAwMDEgMjcuNzZDMTcuMjEwMSAyNy43NiAxNi41NzAxIDI3LjEyIDE2LjU3MDEgMjYuMzNDMTYuNTcwMSAyNS41''@;'; put 'put ''NCAxNy4yMTAxIDI0LjkgMTguMDAwMSAyNC45QzE4Ljc5MDEgMjQuOSAxOS40MzAxIDI1LjU0IDE5LjQzMDEgMjYuMzNDMTkuNDMwMSAyNy4xMiAxOC43OTAxIDI3Ljc2IDE4LjAwMDEgMjcuNzZaIi8+J31dLHFPZT1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9k''@;'; put 'put ''ZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4Wk02IDE4QzYgMjQuNjI3NCAxMS4zNzI2IDMwIDE4IDMwQzIx''@;'; put 'put ''LjE4MjYgMzAgMjQuMjM0OCAyOC43MzU3IDI2LjQ4NTMgMjYuNDg1M0MyOC43MzU3IDI0LjIzNDggMzAgMjEuMTgyNiAzMCAxOEMzMCAxMS4zNzI2IDI0LjYyNzQgNiAxOCA2QzExLjM3MjYgNiA2IDExLjM3MjYgNiAxOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNEMxMC4yNjggNCA0IDEw''@;'; put 'put ''LjI2OCA0IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyNS43MzIgMzIgMzIgMjUuNzMyIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0WiIvPid9XSxYT2U9WyJkb3QtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDExQzE5LjM4NDUgMTEgMjAuNzM3OSAxMS40MTA1IDIx''@;'; put 'put ''Ljg4OSAxMi4xNzk3QzIzLjA0MDEgMTIuOTQ4OSAyMy45Mzc0IDE0LjA0MjEgMjQuNDY3MiAxNS4zMjEyQzI0Ljk5NyAxNi42MDAzIDI1LjEzNTYgMTguMDA3OCAyNC44NjU1IDE5LjM2NTZDMjQuNTk1NCAyMC43MjM1IDIzLjkyODcgMjEuOTcwOCAyMi45NDk4IDIyLjk0OThDMjEuOTcwOCAy''@;'; put 'put ''My45Mjg3IDIwLjcyMzUgMjQuNTk1NCAxOS4zNjU2IDI0Ljg2NTVDMTguMDA3OCAyNS4xMzU2IDE2LjYwMDMgMjQuOTk3IDE1LjMyMTIgMjQuNDY3MkMxNC4wNDIxIDIzLjkzNzQgMTIuOTQ4OSAyMy4wNDAxIDEyLjE3OTcgMjEuODg5QzExLjQxMDUgMjAuNzM3OSAxMSAxOS4zODQ1IDExIDE4''@;'; put 'put ''QzExIDE2LjE0MzUgMTEuNzM3NSAxNC4zNjMgMTMuMDUwMyAxMy4wNTAzQzE0LjM2MyAxMS43Mzc1IDE2LjE0MzUgMTEgMTggMTFaIi8+PHBhdGggZD0iTTE4IDM0QzE0LjgzNTUgMzQgMTEuNzQyMSAzMy4wNjE2IDkuMTEwODggMzEuMzAzNUM2LjQ3OTcgMjkuNTQ1NCA0LjQyODk0IDI3LjA0''@;'; put 'put ''NjYgMy4yMTc5MyAyNC4xMjI5QzIuMDA2OTMgMjEuMTk5MyAxLjY5MDA4IDE3Ljk4MjMgMi4zMDc0NCAxNC44Nzg2QzIuOTI0ODEgMTEuNzc0OSA0LjQ0ODY2IDguOTIzOTQgNi42ODYzIDYuNjg2M0M4LjkyMzk0IDQuNDQ4NjYgMTEuNzc0OSAyLjkyNDgxIDE0Ljg3ODYgMi4zMDc0NEMxNy45''@;'; put 'put ''ODIzIDEuNjkwMDggMjEuMTk5MyAyLjAwNjkzIDI0LjEyMjkgMy4yMTc5M0MyNy4wNDY2IDQuNDI4OTQgMjkuNTQ1NCA2LjQ3OTcgMzEuMzAzNSA5LjExMDg4QzMzLjA2MTYgMTEuNzQyMSAzNCAxNC44MzU1IDM0IDE4QzM0IDIyLjI0MzUgMzIuMzE0MyAyNi4zMTMxIDI5LjMxMzcgMjkuMzEz''@;'; put 'put ''N0MyNi4zMTMxIDMyLjMxNDMgMjIuMjQzNSAzNCAxOCAzNFpNMTggNC4wMDAwMUMxNS4yMzExIDQuMDAwMDEgMTIuNTI0MyA0LjgyMTA5IDEwLjIyMiA2LjM1OTQzQzcuOTE5NzQgNy44OTc3NyA2LjEyNTMyIDEwLjA4NDMgNS4wNjU2OSAxMi42NDI0QzQuMDA2MDcgMTUuMjAwNiAzLjcyODgy''@;'; put 'put ''IDE4LjAxNTUgNC4yNjkwMSAyMC43MzEzQzQuODA5MjEgMjMuNDQ3IDYuMTQyNTggMjUuOTQxNiA4LjEwMDUxIDI3Ljg5OTVDMTAuMDU4NCAyOS44NTc0IDEyLjU1MyAzMS4xOTA4IDE1LjI2ODcgMzEuNzMxQzE3Ljk4NDUgMzIuMjcxMiAyMC43OTk0IDMxLjk5MzkgMjMuMzU3NiAzMC45MzQz''@;'; put 'put ''QzI1LjkxNTcgMjkuODc0NyAyOC4xMDIyIDI4LjA4MDMgMjkuNjQwNiAyNS43NzhDMzEuMTc4OSAyMy40NzU3IDMyIDIwLjc2ODkgMzIgMThDMzIgMTQuMjg3IDMwLjUyNSAxMC43MjYgMjcuODk5NSA4LjEwMDUxQzI1LjI3NCA1LjQ3NSAyMS43MTMgNC4wMDAwMSAxOCA0LjAwMDAxWiIvPid9''@;'; put 'put ''XTtmdW5jdGlvbiBKT2UoYyxsKXtyZXR1cm4gYz09PWx9Y2xhc3MgZVBlIGV4dGVuZHMgcXR7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpfXNjaGVkdWxlKGwsYT0wKXtyZXR1cm4gdGhpc319Y29uc3Qgd0w9e3NldEludGVydmFsKGMsbCwuLi5hKXtjb25zdHtkZWxlZ2F0ZTpkfT13TDtyZXR1''@;'; put 'put ''cm4gZD8uc2V0SW50ZXJ2YWw/ZC5zZXRJbnRlcnZhbChjLGwsLi4uYSk6c2V0SW50ZXJ2YWwoYyxsLC4uLmEpfSxjbGVhckludGVydmFsKGMpe2NvbnN0e2RlbGVnYXRlOmx9PXdMO3JldHVybihsPy5jbGVhckludGVydmFsfHxjbGVhckludGVydmFsKShjKX0sZGVsZWdhdGU6dm9pZCAwfTtj''@;'; put 'put ''bGFzcyB1WSBleHRlbmRzIGVQZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUobCxhPTApe3ZhciBkO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9bDtjb25zdCBoPXRo''@;'; put 'put ''aXMuaWQsZj10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9aCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChmLGgsYSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWEsdGhpcy5pZD1udWxsIT09KGQ9dGhpcy5pZCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLnJlcXVlc3RBc3luY0lk''@;'; put 'put ''KGYsdGhpcy5pZCxhKSx0aGlzfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiB3TC5zZXRJbnRlcnZhbChsLmZsdXNoLmJpbmQobCx0aGlzKSxkKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXtpZihudWxsIT1kJiZ0aGlzLmRlbGF5PT09ZCYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJu''@;'; put 'put ''IGE7bnVsbCE9YSYmd0wuY2xlYXJJbnRlcnZhbChhKX1leGVjdXRlKGwsYSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtjb25zdCBkPXRoaXMuX2V4ZWN1dGUobCxhKTtpZihkKXJldHVybiBk''@;'; put 'put ''OyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfV9leGVjdXRlKGwsYSl7bGV0IGgsZD0hMTt0cnl7dGhpcy53b3JrKGwpfWNhdGNoKGYpe2Q9ITAsaD1mfHxuZXcgRXJyb3Io''@;'; put 'put ''IlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihkKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksaH11bnN1YnNjcmliZSgpe2lmKCF0aGlzLmNsb3NlZCl7Y29uc3R7aWQ6bCxzY2hlZHVsZXI6YX09dGhpcyx7YWN0aW9uczpkfT1hO3RoaXMud29yaz10aGlzLnN0YXRl''@;'; put 'put ''PXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLHV0KGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGwsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgZFk9e25vdzooKT0+KGRZLmRlbGVnYXRl''@;'; put 'put ''fHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHZ4e2NvbnN0cnVjdG9yKGwsYT12eC5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1sLHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5z''@;'; put 'put ''Y2hlZHVsZShkLGEpfX12eC5ub3c9ZFkubm93O2NsYXNzIGhZIGV4dGVuZHMgdnh7Y29uc3RydWN0b3IobCxhPXZ4Lm5vdyl7c3VwZXIobCxhKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0''@;'; put 'put ''dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9''@;'; put 'put ''fX1jb25zdCBDTD1uZXcgaFkodVkpLHRQZT1DTDtmdW5jdGlvbiBmbShjLGw9Q0wpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLHY9bnVsbDtjb25zdCBNPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBaPWY7Zj1udWxsLGQubmV4dChaKX19O2Z1''@;'; put 'put ''bmN0aW9uIEQoKXtjb25zdCBaPXYrYyxyZT1sLm5vdygpO2lmKHJlPFopcmV0dXJuIGg9dGhpcy5zY2hlZHVsZSh2b2lkIDAsWi1yZSksdm9pZCBkLmFkZChoKTtNKCl9YS5zdWJzY3JpYmUoTmkoZCxaPT57Zj1aLHY9bC5ub3coKSxofHwoaD1sLnNjaGVkdWxlKEQsYyksZC5hZGQoaCkpfSwo''@;'; put 'put ''KT0+e00oKSxkLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e2Y9aD1udWxsfSkpfSl9Y29uc3QgblBlPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLHJQZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0saVBlPVsib24iLCJvZmYiXTtmdW5jdGlvbiB4''@;'; put 'put ''ZChjLGwsYSxkKXtpZigkZShhKSYmKGQ9YSxhPXZvaWQgMCksZClyZXR1cm4geGQoYyxsLGEpLnBpcGUoelooZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gc1BlKGMpe3JldHVybiAkZShjLmFkZEV2ZW50TGlzdGVuZXIpJiYkZShjLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShjKT9yUGUubWFwKHY9''@;'; put 'put ''Pk09PmNbdl0obCxNLGEpKTpmdW5jdGlvbiBhUGUoYyl7cmV0dXJuICRlKGMuYWRkTGlzdGVuZXIpJiYkZShjLnJlbW92ZUxpc3RlbmVyKX0oYyk/blBlLm1hcChEMGUoYyxsKSk6ZnVuY3Rpb24gb1BlKGMpe3JldHVybiAkZShjLm9uKSYmJGUoYy5vZmYpfShjKT9pUGUubWFwKEQwZShjLGwp''@;'; put 'put ''KTpbXTtpZighaCYmQlooYykpcmV0dXJuIE4wKHY9PnhkKHYsbCxhKSkobDEoYykpO2lmKCFoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBYdCh2PT57Y29uc3QgTT0oLi4uRCk9PnYubmV4dCgxPEQubGVuZ3RoP0Q6RFswXSk7cmV0dXJu''@;'; put 'put ''IGgoTSksKCk9PmYoTSl9KX1mdW5jdGlvbiBEMGUoYyxsKXtyZXR1cm4gYT0+ZD0+Y1thXShsLGQpfWNsYXNzIGJ4IGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1kWSl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVz''@;'; put 'put ''dGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29u''@;'; put 'put ''c3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxfdGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTp2fT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK3YpKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2Ny''@;'; put 'put ''aWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoJiYhbC5jbG9zZWQ7''@;'; put 'put ''dis9ZD8xOjIpbC5uZXh0KGZbdl0pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIp''@;'; put 'put ''Kmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiksIWgpe2NvbnN0IHY9YS5ub3coKTtsZXQgTT0wO2ZvcihsZXQgRD0xO0Q8ZC5sZW5ndGgmJmRbRF08PXY7RCs9MilNPUQ7TSYmZC5zcGxpY2UoMCxNKzEpfX19ZnVuY3Rpb24gZlkoYyxsLC4uLmEpe2lmKCEw''@;'; put 'put ''PT09bClyZXR1cm4gdm9pZCBjKCk7aWYoITE9PT1sKXJldHVybjtjb25zdCBkPW5ldyBodCh7bmV4dDooKT0+e2QudW5zdWJzY3JpYmUoKSxjKCl9fSk7cmV0dXJuIGwxKGwoLi4uYSkpLnN1YnNjcmliZShkKX1mdW5jdGlvbiBJMGUoYyxsLGEpe2xldCBkLGg9ITE7cmV0dXJuIGMmJiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgYz8oe2J1ZmZlclNpemU6ZD0xLzAsd2luZG93VGltZTpsPTEvMCxyZWZDb3VudDpoPSExLHNjaGVkdWxlcjphfT1jKTpkPWM/PzEvMCxmdW5jdGlvbiBsUGUoYz17fSl7Y29uc3R7Y29ubmVjdG9yOmw9KCgpPT5uZXcgV24pLHJlc2V0T25FcnJvcjphPSEwLHJlc2V0T25D''@;'; put 'put ''b21wbGV0ZTpkPSEwLHJlc2V0T25SZWZDb3VudFplcm86aD0hMH09YztyZXR1cm4gZj0+e2xldCB2LE0sRCxaPTAscmU9ITEsY2U9ITE7Y29uc3QgYmU9KCk9PntNPy51bnN1YnNjcmliZSgpLE09dm9pZCAwfSxFZT0oKT0+e2JlKCksdj1EPXZvaWQgMCxyZT1jZT0hMX0sQmU9KCk9Pntjb25z''@;'; put 'put ''dCBxZT12O0VlKCkscWU/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBWaSgocWUscnQpPT57WisrLCFjZSYmIXJlJiZiZSgpO2NvbnN0IHB0PUQ9RD8/bCgpO3J0LmFkZCgoKT0+e1otLSwwPT09WiYmIWNlJiYhcmUmJihNPWZZKEJlLGgpKX0pLHB0LnN1YnNjcmliZShydCksIXYmJlo+MCYmKHY9''@;'; put 'put ''bmV3IGh0KHtuZXh0OmR0PT5wdC5uZXh0KGR0KSxlcnJvcjpkdD0+e2NlPSEwLGJlKCksTT1mWShFZSxhLGR0KSxwdC5lcnJvcihkdCl9LGNvbXBsZXRlOigpPT57cmU9ITAsYmUoKSxNPWZZKEVlLGQpLHB0LmNvbXBsZXRlKCl9fSksbDEocWUpLnN1YnNjcmliZSh2KSl9KShmKX19KHtjb25u''@;'; put 'put ''ZWN0b3I6KCk9Pm5ldyBieChkLGwsYSkscmVzZXRPbkVycm9yOiEwLHJlc2V0T25Db21wbGV0ZTohMSxyZXNldE9uUmVmQ291bnRaZXJvOmh9KX1mdW5jdGlvbiB5eCguLi5jKXtjb25zdCBsPWpNKGMpLGE9ZnVuY3Rpb24gWE1lKGMsbCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBqWihjKT9j''@;'; put 'put ''LnBvcCgpOmx9KGMsMS8wKSxkPWM7cmV0dXJuIGQubGVuZ3RoPzE9PT1kLmxlbmd0aD9sMShkWzBdKTpRYihhKShXdShkLGwpKTpNMn12YXIgQW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TdGF0ZT0wXT0iU3RhdGUiLGNbYy5UcmFuc2l0aW9uPTFdPSJUcmFuc2l0aW9uIixjW2MuU2VxdWVu''@;'; put 'put ''Y2U9Ml09IlNlcXVlbmNlIixjW2MuR3JvdXA9M109Ikdyb3VwIixjW2MuQW5pbWF0ZT00XT0iQW5pbWF0ZSIsY1tjLktleWZyYW1lcz01XT0iS2V5ZnJhbWVzIixjW2MuU3R5bGU9Nl09IlN0eWxlIixjW2MuVHJpZ2dlcj03XT0iVHJpZ2dlciIsY1tjLlJlZmVyZW5jZT04XT0iUmVmZXJlbmNl''@;'; put 'put ''IixjW2MuQW5pbWF0ZUNoaWxkPTldPSJBbmltYXRlQ2hpbGQiLGNbYy5BbmltYXRlUmVmPTEwXT0iQW5pbWF0ZVJlZiIsY1tjLlF1ZXJ5PTExXT0iUXVlcnkiLGNbYy5TdGFnZ2VyPTEyXT0iU3RhZ2dlciIsY30oQW98fHt9KTtjb25zdCBhNT0iKiI7ZnVuY3Rpb24geWgoYyxsKXtyZXR1cm57''@;'; put 'put ''dHlwZTpBby5UcmlnZ2VyLG5hbWU6YyxkZWZpbml0aW9uczpsLG9wdGlvbnM6e319fWZ1bmN0aW9uIE0wKGMsbD1udWxsKXtyZXR1cm57dHlwZTpBby5BbmltYXRlLHN0eWxlczpsLHRpbWluZ3M6Y319ZnVuY3Rpb24gdXMoYyl7cmV0dXJue3R5cGU6QW8uU3R5bGUsc3R5bGVzOmMsb2Zmc2V0''@;'; put 'put ''Om51bGx9fWZ1bmN0aW9uIFNMKGMsbCxhKXtyZXR1cm57dHlwZTpBby5TdGF0ZSxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiB1UGUoYyl7cmV0dXJue3R5cGU6QW8uS2V5ZnJhbWVzLHN0ZXBzOmN9fWZ1bmN0aW9uIGl1KGMsbCxhPW51bGwpe3JldHVybnt0eXBlOkFvLlRy''@;'; put 'put ''YW5zaXRpb24sZXhwcjpjLGFuaW1hdGlvbjpsLG9wdGlvbnM6YX19Y2xhc3MgX3h7Y29uc3RydWN0b3IobD0wLGE9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29y''@;'; put 'put ''aWdpbmFsT25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9wb3NpdGlvbj0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9bCthfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhp''@;'; put 'put ''cy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZucy5wdXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmlnaW5hbE9uRG9u''@;'; put 'put ''ZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9aW5pdCgpe31wbGF5KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhp''@;'; put 'put ''cy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9dHJpZ2dlck1pY3JvdGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fb25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2Uo''@;'; put 'put ''KXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9''@;'; put 'put ''PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfXNldFBvc2l0aW9u''@;'; put 'put ''KGwpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP2wqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5f''@;'; put 'put ''b25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgUjBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVz''@;'; put 'put ''dHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZp''@;'; put 'put ''bmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaCh2PT57di5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSx2Lm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSx2Lm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhp''@;'; put 'put ''cy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgodixNKT0+TWF0aC5tYXgodixNLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9''@;'; put 'put ''aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9v''@;'; put 'put ''blN0YXJ0Rm5zPVtdKX1vbkRvbmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMu''@;'; put 'put ''X29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlz''@;'; put 'put ''LnBsYXllcnMuZm9yRWFjaChsPT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0''@;'; put 'put ''aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9u''@;'; put 'put ''KGwpe2NvbnN0IGE9bCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChh''@;'; put 'put ''LGQpPT5udWxsPT09YXx8ZC50b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdn''@;'; put 'put ''ZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IGdZO3RyeXtnWT10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe2dZPSExfWxldCBD''@;'; put 'put ''eCx3eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtSWQ9YSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP2VsKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93''@;'; put 'put ''c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIWdZKSYm''@;'; put 'put ''dHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMu''@;'; put 'put ''aXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFO''@;'; put 'put ''RFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKGlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQXkoYyl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IGdQZSgpe2lmKG51bGw9PUN4JiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5DeD0hMH0pKX1maW5hbGx5e0N4PUN4fHwhMX1yZXR1cm4gQ3h9KCk/Yzoh''@;'; put 'put ''IWMuY2FwdHVyZX12YXIgX3A9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT1JNQUw9MF09Ik5PUk1BTCIsY1tjLk5FR0FURUQ9MV09Ik5FR0FURUQiLGNbYy5JTlZFUlRFRD0yXT0iSU5WRVJURUQiLGN9KF9wfHx7fSk7bGV0IE1MLGM3LG1ZO2Z1bmN0aW9uIFN4KCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiBfcC5OT1JNQUw7aWYobnVsbD09TUwpe2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksbD1jLnN0eWxlO2MuZGlyPSJydGwiLGwud2lkdGg9IjFweCIsbC5vdmVyZmxvdz0iYXV0byIsbC52aXNpYmlsaXR5PSJoaWRk''@;'; put 'put ''ZW4iLGwucG9pbnRlckV2ZW50cz0ibm9uZSIsbC5wb3NpdGlvbj0iYWJzb2x1dGUiO2NvbnN0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1hLnN0eWxlO2Qud2lkdGg9IjJweCIsZC5oZWlnaHQ9IjFweCIsYy5hcHBlbmRDaGlsZChhKSxkb2N1bWVudC5ib2R5LmFwcGVuZENo''@;'; put 'put ''aWxkKGMpLE1MPV9wLk5PUk1BTCwwPT09Yy5zY3JvbGxMZWZ0JiYoYy5zY3JvbGxMZWZ0PTEsTUw9MD09PWMuc2Nyb2xsTGVmdD9fcC5ORUdBVEVEOl9wLklOVkVSVEVEKSxjLnJlbW92ZSgpfXJldHVybiBNTH1mdW5jdGlvbiBPMGUoYyl7aWYoZnVuY3Rpb24gdlBlKCl7aWYobnVsbD09bVkp''@;'; put 'put ''e2NvbnN0IGM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7bVk9ISghY3x8IWMuY3JlYXRlU2hhZG93Um9vdCYmIWMuYXR0YWNoU2hhZG93KX1yZXR1cm4gbVl9KCkpe2NvbnN0IGw9Yy5nZXRSb290Tm9kZT9jLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hh''@;'; put 'put ''ZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJmwgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIHhMKGMpe3JldHVybiBjLmNvbXBvc2VkUGF0aD9jLmNvbXBvc2VkUGF0aCgpWzBdOmMudGFyZ2V0fWxldCBqUGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybT1hfWlzRGlzYWJsZWQoYSl7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShhKXtyZXR1cm4gZnVuY3Rpb24gVVBlKGMpe3JldHVybiEhKGMub2Zmc2V0V2lkdGh8fGMub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYy5nZXRDbGllbnRSZWN0cyYmYy5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KGEpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHl9aXNUYWJiYWJsZShhKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO2NvbnN0IGQ9ZnVuY3Rpb24g''@;'; put 'put ''elBlKGMpe3RyeXtyZXR1cm4gYy5mcmFtZUVsZW1lbnR9Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBYUGUoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGEpKTtpZihkJiYoLTE9PT1OMGUoZCl8fCF0aGlzLmlzVmlz''@;'; put 'put ''aWJsZShkKSkpcmV0dXJuITE7bGV0IGg9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGY9TjBlKGEpO3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1mOiEoImlmcmFtZSI9PT1ofHwib2JqZWN0Ij09PWh8fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5f''@;'; put 'put ''cGxhdGZvcm0uSU9TJiYhZnVuY3Rpb24gS1BlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJpbnB1dCI9PT1sJiZjLnR5cGU7cmV0dXJuInRleHQiPT09YXx8InBhc3N3b3JkIj09PWF8fCJzZWxlY3QiPT09bHx8InRleHRhcmVhIj09PWx9KGEpKSYmKCJhdWRpbyI9PT1o''@;'; put 'put ''PyEhYS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09ZjoidmlkZW8iPT09aD8tMSE9PWYmJihudWxsIT09Znx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8YS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmEudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGEsZCl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIHFQZShjKXtyZXR1cm4hZnVuY3Rpb24gV1BlKGMpe3JldHVybiBmdW5jdGlvbiBHUGUoYyl7cmV0dXJuImlucHV0Ij09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmImhpZGRlbiI9PWMudHlwZX0oYykmJihmdW5jdGlvbiBaUGUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpO3JldHVybiJpbnB1dCI9PT1sfHwic2VsZWN0Ij09PWx8fCJidXR0b24iPT09bHx8InRleHRhcmVhIj09PWx9KGMpfHxmdW5jdGlvbiBZUGUoYyl7cmV0dXJuIGZ1bmN0aW9uICRQZShjKXtyZXR1cm4iYSI9PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJmMuaGFzQXR0cmli''@;'; put 'put ''dXRlKCJocmVmIil9KGMpfHxjLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fEgwZShjKSl9KGEpJiYhdGhpcy5pc0Rpc2FibGVkKGEpJiYoZD8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoYSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKHhyKHd4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSDBlKGMpe2lmKCFjLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAw''@;'; put 'put ''PT09Yy50YWJJbmRleClyZXR1cm4hMTtsZXQgbD1jLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4hKCFsfHxpc05hTihwYXJzZUludChsLDEwKSkpfWZ1bmN0aW9uIE4wZShjKXtpZighSDBlKGMpKXJldHVybiBudWxsO2NvbnN0IGw9cGFyc2VJbnQoYy5nZXRBdHRyaWJ1dGUoInRh''@;'; put 'put ''YmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4obCk/LTE6bH1jbGFzcyBWMGV7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChsKXt0aGlzLl9lbmFibGVkPWwsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFu''@;'; put 'put ''Y2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmPSExKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3Vt''@;'; put 'put ''ZW50PWgsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAs''@;'; put 'put ''Znx8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fc3RhcnRBbmNob3IsYT10aGlzLl9lbmRBbmNob3I7bCYmKGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksbC5yZW1vdmUoKSksYSYmKGEucmVtb3ZlRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGEucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5f''@;'; put 'put ''bmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5f''@;'; put 'put ''ZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnRO''@;'; put 'put ''b2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0''@;'; put 'put ''YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KGwpKSl9KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVy''@;'; put 'put ''biBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxl''@;'; put 'put ''KCgpPT5hKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtjZGstZm9jdXMtcmVnaW9uLSR7bH1dLCBbY2RrRm9jdXNSZWdpb24ke2x9XSwgW2Nkay1mb2N1cy0k''@;'; put 'put ''e2x9XWApO3JldHVybiJzdGFydCI9PWw/YS5sZW5ndGg/YVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTphLmxlbmd0aD9hW2EubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9Zm9jdXNJbml0aWFsRWxl''@;'; put 'put ''bWVudChsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihhKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShhKSl7Y29uc3QgZD10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChh''@;'; put 'put ''KTtyZXR1cm4gZD8uZm9jdXMobCksISFkfXJldHVybiBhLmZvY3VzKGwpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiBh''@;'; put 'put ''JiZhLmZvY3VzKGwpLCEhYX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxl''@;'; put 'put ''RWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVu''@;'; put 'put ''dC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYVtkXSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJs''@;'; put 'put ''ZShsKSlyZXR1cm4gbDtjb25zdCBhPWwuY2hpbGRyZW47Zm9yKGxldCBkPWEubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9YVtkXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1''@;'; put 'put ''cm4gaH1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7Y29uc3QgbD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCxsKSxsLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4i''@;'; put 'put ''KSxsLmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLGwuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxsfV90b2dnbGVBbmNob3JUYWJJbmRleChsLGEpe2w/YS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpOmEucmVtb3ZlQXR0cmlidXRlKCJ0YWJp''@;'; put 'put ''bmRleCIpfXRvZ2dsZUFuY2hvcnMobCl7dGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVP''@;'; put 'put ''blN0YWJsZShsKXt0aGlzLl9uZ1pvbmUuaXNTdGFibGU/bCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFlmKDEpKS5zdWJzY3JpYmUobCl9fWxldCB2WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9jaGVja2VyPWEsdGhpcy5fbmdab25lPWQsdGhpcy5fZG9j''@;'; put 'put ''dW1lbnQ9aH1jcmVhdGUoYSxkPSExKXtyZXR1cm4gbmV3IFYwZShhLHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKGpQZSkseHIoV2EpLHhyKHZzKSl9fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksQjBlPSgoKT0+e2NsYXNzIGN7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c1RyYXA/LmVuYWJsZWR8fCExfXNldCBlbmFibGVkKGEp''@;'; put 'put ''e3RoaXMuZm9jdXNUcmFwJiYodGhpcy5mb2N1c1RyYXAuZW5hYmxlZD1hKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZCx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCxmaSh3eCkuaXNCcm93c2VyJiYodGhp''@;'; put 'put ''cy5mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCEwKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvY3VzVHJhcD8uZGVzdHJveSgpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCYmKHRoaXMuX3ByZXZpb3Vz''@;'; put 'put ''bHlGb2N1c2VkRWxlbWVudC5mb2N1cygpLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzVHJhcD8uYXR0YWNoQW5jaG9ycygpLHRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuX2NhcHR1cmVGb2N1cygpfW5nRG9DaGVjaygp''@;'; put 'put ''e3RoaXMuZm9jdXNUcmFwJiYhdGhpcy5mb2N1c1RyYXAuaGFzQXR0YWNoZWQoKSYmdGhpcy5mb2N1c1RyYXAuYXR0YWNoQW5jaG9ycygpfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGQ9YS5hdXRvQ2FwdHVyZTtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5mb2N1c1Ry''@;'; put 'put ''YXA/Lmhhc0F0dGFjaGVkKCkmJnRoaXMuX2NhcHR1cmVGb2N1cygpfV9jYXB0dXJlRm9jdXMoKXt0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9ZnVuY3Rpb24gYlBlKCl7bGV0IGM9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQ/ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDpudWxs''@;'; put 'put ''O2Zvcig7YyYmYy5zaGFkb3dSb290Oyl7Y29uc3QgbD1jLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZihsPT09YylicmVhaztjPWx9cmV0dXJuIGN9KCksdGhpcy5mb2N1c1RyYXA/LmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UodlkpLEdlKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2Rr''@;'; put 'put ''VHJhcEZvY3VzIiwiZW5hYmxlZCIsczFdLGF1dG9DYXB0dXJlOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSIsczFdfSxleHBvcnRBczpbImNka1RyYXBGb2N1cyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W1ds''@;'; put 'put ''LHdsXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdTcoYyxsPTApe3JldHVybiBmdW5jdGlvbiByRmUoYyl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYykpJiYhaXNOYU4oTnVtYmVyKGMpKX0oYyk/TnVtYmVyKGMpOmx9ZnVuY3Rpb24gRWQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9j''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQ6Y31jb25zdCBNeD17c2NoZWR1bGUoYyl7bGV0IGw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdhdGU6ZH09TXg7ZCYmKGw9ZC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1kLmNhbmNlbEFuaW1hdGlvbkZyYW1l''@;'; put 'put ''KTtjb25zdCBoPWwoZj0+e2E9dm9pZCAwLGMoZil9KTtyZXR1cm4gbmV3IHF0KCgpPT5hPy4oaCkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09TXg7cmV0dXJuKGw/LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSgu''@;'; put 'put ''Li5jKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09TXg7cmV0dXJuKGw/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4uYyl9LGRlbGVnYXRlOnZvaWQgMH0sajBlPW5ldyBjbGFzcyBvRmUgZXh0ZW5kcyBoWXtmbHVz''@;'; put 'put ''aChsKXtsZXQgYTt0aGlzLl9hY3RpdmU9ITAsbD9hPWwuaWQ6KGE9dGhpcy5fc2NoZWR1bGVkLHRoaXMuX3NjaGVkdWxlZD12b2lkIDApO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdo''@;'; put 'put ''aWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgYUZlIGV4dGVuZHMgdVl7Y29uc3RydWN0b3IobCxhKXtzdXBlcihs''@;'; put 'put ''LGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9TXgucmVxdWVz''@;'; put 'put ''dEFuaW1hdGlvbkZyYW1lKCgpPT5sLmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJmE9PT1s''@;'; put 'put ''Ll9zY2hlZHVsZWQmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKE14LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpLGwuX3NjaGVkdWxlZD12b2lkIDApfX0pO2xldCBiWSxzRmU9MTtjb25zdCBFTD17fTtmdW5jdGlvbiB6MGUoYyl7cmV0''@;'; put 'put ''dXJuIGMgaW4gRUwmJihkZWxldGUgRUxbY10sITApfWNvbnN0IGxGZT17c2V0SW1tZWRpYXRlKGMpe2NvbnN0IGw9c0ZlKys7cmV0dXJuIEVMW2xdPSEwLGJZfHwoYlk9UHJvbWlzZS5yZXNvbHZlKCkpLGJZLnRoZW4oKCk9PnowZShsKSYmYygpKSxsfSxjbGVhckltbWVkaWF0ZShjKXt6MGUo''@;'; put 'put ''Yyl9fSx7c2V0SW1tZWRpYXRlOmNGZSxjbGVhckltbWVkaWF0ZTp1RmV9PWxGZSxUTD17c2V0SW1tZWRpYXRlKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PVRMO3JldHVybihsPy5zZXRJbW1lZGlhdGV8fGNGZSkoLi4uYyl9LGNsZWFySW1tZWRpYXRlKGMpe2NvbnN0e2RlbGVnYXRlOmx9PVRM''@;'; put 'put ''O3JldHVybihsPy5jbGVhckltbWVkaWF0ZXx8dUZlKShjKX0sZGVsZWdhdGU6dm9pZCAwfSxmRmU9bmV3IGNsYXNzIGhGZSBleHRlbmRzIGhZe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlv''@;'; put 'put ''bnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQo''@;'; put 'put ''KTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgZEZlIGV4dGVuZHMgdVl7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVz''@;'; put 'put ''dEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9VEwuc2V0SW1tZWRpYXRlKGwuZmx1c2guYmluZChsLHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4w''@;'; put 'put ''KXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKFRMLmNsZWFySW1tZWRpYXRlKGEpLGwuX3NjaGVkdWxlZD09PWEmJihsLl9z''@;'; put 'put ''Y2hlZHVsZWQ9dm9pZCAwKSl9fSk7ZnVuY3Rpb24gVTBlKGM9MCxsLGE9dFBlKXtsZXQgZD0tMTtyZXR1cm4gbnVsbCE9bCYmKGNsZShsKT9hPWw6ZD1sKSxuZXcgWHQoaD0+e2xldCBmPWZ1bmN0aW9uIGdGZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2Mt''@;'; put 'put ''YS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IHY9MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KHYrKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRlKCkpfSxmKX0pfWZ1bmN0aW9uIHlZKGMsbD1DTCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IHBGZShjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZD0hMSxoPW51bGwsZj1udWxsLHY9ITE7Y29uc3QgTT0oKT0+e2lmKGY/LnVuc3Vic2NyaWJlKCksZj1udWxsLGQpe2Q9ITE7Y29uc3QgWj1oO2g9bnVsbCxhLm5leHQoWil9diYmYS5jb21wbGV0ZSgpfSxEPSgpPT57Zj1udWxsLHYmJmEu''@;'; put 'put ''Y29tcGxldGUoKX07bC5zdWJzY3JpYmUoTmkoYSxaPT57ZD0hMCxoPVosZnx8bDEoYyhaKSkuc3Vic2NyaWJlKGY9TmkoYSxNLEQpKX0sKCk9Pnt2PSEwLCghZHx8IWZ8fGYuY2xvc2VkKSYmYS5jb21wbGV0ZSgpfSkpfSl9KCgpPT5VMGUoYyxsKSl9Y29uc3QgdkZlPW5ldyBTdCgiY2RrLWRp''@;'; put 'put ''ci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIGJGZSgpe3JldHVybiBmaSh2cyl9fSkseUZlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxD''@;'; put 'put ''eXJsKSgkfC18XykpKCR8LXxfKS9pO2xldCBwbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IEtyLGEmJih0aGlzLnZhbHVlPWZ1bmN0aW9uIF9GZShjKXtjb25zdCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRv''@;'; put 'put ''Ij09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP3lGZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIifSgoYS5ib2R5P2EuYm9keS5kaXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3Vt''@;'; put 'put ''ZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZGZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMs''@;'; put 'put ''ZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3Mgd0Zle31jbGFzcyBTRmUgZXh0ZW5kcyB3RmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl9kYXRhPWx9Y29ubmVjdCgpe3JldHVybiBCTSh0aGlzLl9kYXRhKT90aGlzLl9kYXRh''@;'; put 'put ''OmZvKHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fXZhciBnbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJFUExBQ0VEPTBdPSJSRVBMQUNFRCIsY1tjLklOU0VSVEVEPTFdPSJJTlNFUlRFRCIsY1tjLk1PVkVEPTJdPSJNT1ZFRCIsY1tjLlJFTU9WRUQ9M109IlJFTU9WRUQiLGN9KGdtfHx7''@;'; put 'put ''fSk7Y29uc3QgX1k9bmV3IFN0KCJfVmlld1JlcGVhdGVyIik7Y2xhc3MgWjBle2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXMobCxhLGQsaCxmKXtsLmZvckVhY2hPcGVyYXRpb24oKHYsTSxEKT0+e2xldCBaLHJlO251''@;'; put 'put ''bGw9PXYucHJldmlvdXNJbmRleD8oWj10aGlzLl9pbnNlcnRWaWV3KCgpPT5kKHYsTSxEKSxELGEsaCh2KSkscmU9Wj9nbS5JTlNFUlRFRDpnbS5SRVBMQUNFRCk6bnVsbD09RD8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KE0sYSkscmU9Z20uUkVNT1ZFRCk6KFo9dGhpcy5fbW92ZVZpZXco''@;'; put 'put ''TSxELGEsaCh2KSkscmU9Z20uTU9WRUQpLGYmJmYoe2NvbnRleHQ6Wj8uY29udGV4dCxvcGVyYXRpb246cmUscmVjb3JkOnZ9KX0pfWRldGFjaCgpe2Zvcihjb25zdCBsIG9mIHRoaXMuX3ZpZXdDYWNoZSlsLmRlc3Ryb3koKTt0aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcobCxhLGQs''@;'; put 'put ''aCl7Y29uc3QgZj10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGEsZCk7aWYoZilyZXR1cm4gdm9pZChmLmNvbnRleHQuJGltcGxpY2l0PWgpO2NvbnN0IHY9bCgpO3JldHVybiBkLmNyZWF0ZUVtYmVkZGVkVmlldyh2LnRlbXBsYXRlUmVmLHYuY29udGV4dCx2LmluZGV4KX1fZGV0YWNoQW5k''@;'; put 'put ''Q2FjaGVWaWV3KGwsYSl7Y29uc3QgZD1hLmRldGFjaChsKTt0aGlzLl9tYXliZUNhY2hlVmlldyhkLGEpfV9tb3ZlVmlldyhsLGEsZCxoKXtjb25zdCBmPWQuZ2V0KGwpO3JldHVybiBkLm1vdmUoZixhKSxmLmNvbnRleHQuJGltcGxpY2l0PWgsZn1fbWF5YmVDYWNoZVZpZXcobCxhKXtpZih0''@;'; put 'put ''aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaChsKTtlbHNle2NvbnN0IGQ9YS5pbmRleE9mKGwpOy0xPT09ZD9sLmRlc3Ryb3koKTphLnJlbW92ZShkKX19X2luc2VydFZpZXdGcm9tQ2FjaGUobCxhKXtjb25zdCBkPXRoaXMuX3Zp''@;'; put 'put ''ZXdDYWNoZS5wb3AoKTtyZXR1cm4gZCYmYS5pbnNlcnQoZCxsKSxkfHxudWxsfX1jb25zdCBNRmU9WyJjb250ZW50V3JhcHBlciJdLHhGZT1bIioiXSxXMGU9bmV3IFN0KCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2NsYXNzIEVGZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fc2Nyb2xs''@;'; put 'put ''ZWRJbmRleENoYW5nZT1uZXcgV24sdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShmdW5jdGlvbiBjWShjLGw9Y24pe3JldHVybiBjPWM/P0pPZSxWaSgoYSxkKT0+e2xldCBoLGY9ITA7YS5zdWJzY3JpYmUoTmkoZCx2PT57Y29uc3QgTT1s''@;'; put 'put ''KHYpOyhmfHwhYyhoLE0pKSYmKGY9ITEsaD1NLGQubmV4dCh2KSl9KSl9KX0oKSksdGhpcy5fdmlld3BvcnQ9bnVsbCx0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZH1hdHRhY2gobCl7dGhpcy5fdmlld3BvcnQ9bCx0aGlzLl91cGRhdGVU''@;'; put 'put ''b3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfWRldGFjaCgpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydD1udWxsfXVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKGwsYSxkKXt0aGlzLl9pdGVtU2l6ZT1sLHRoaXMu''@;'; put 'put ''X21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFNjcm9sbGVkKCl7dGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uRGF0YUxlbmd0aENoYW5nZWQoKXt0''@;'; put 'put ''aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFJlbmRlcmVkKCl7fW9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl7fXNjcm9sbFRvSW5kZXgobCxhKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9P''@;'; put 'put ''ZmZzZXQobCp0aGlzLl9pdGVtU2l6ZSxhKX1fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVk''@;'; put 'put ''UmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2NvbnN0IGw9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGE9e3N0YXJ0Omwuc3RhcnQsZW5kOmwuZW5kfSxkPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLGg9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxl''@;'; put 'put ''bmd0aCgpO2xldCBmPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSx2PXRoaXMuX2l0ZW1TaXplPjA/Zi90aGlzLl9pdGVtU2l6ZTowO2lmKGEuZW5kPmgpe2NvbnN0IEQ9TWF0aC5jZWlsKGQvdGhpcy5faXRlbVNpemUpLFo9TWF0aC5tYXgoMCxNYXRoLm1pbih2LGgtRCkp''@;'; put 'put ''O3YhPVomJih2PVosZj1aKnRoaXMuX2l0ZW1TaXplLGEuc3RhcnQ9TWF0aC5mbG9vcih2KSksYS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihoLGEuc3RhcnQrRCkpfWNvbnN0IE09Zi1hLnN0YXJ0KnRoaXMuX2l0ZW1TaXplO2lmKE08dGhpcy5fbWluQnVmZmVyUHgmJjAhPWEuc3RhcnQpe2Nv''@;'; put 'put ''bnN0IEQ9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1NKS90aGlzLl9pdGVtU2l6ZSk7YS5zdGFydD1NYXRoLm1heCgwLGEuc3RhcnQtRCksYS5lbmQ9TWF0aC5taW4oaCxNYXRoLmNlaWwodisoZCt0aGlzLl9taW5CdWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2NvbnN0IEQ9''@;'; put 'put ''YS5lbmQqdGhpcy5faXRlbVNpemUtKGYrZCk7aWYoRDx0aGlzLl9taW5CdWZmZXJQeCYmYS5lbmQhPWgpe2NvbnN0IFo9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1EKS90aGlzLl9pdGVtU2l6ZSk7Wj4wJiYoYS5lbmQ9TWF0aC5taW4oaCxhLmVuZCtaKSxhLnN0YXJ0PU1hdGgubWF4''@;'; put 'put ''KDAsTWF0aC5mbG9vcih2LXRoaXMuX21pbkJ1ZmZlclB4L3RoaXMuX2l0ZW1TaXplKSkpfX10aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZFJhbmdlKGEpLHRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9pdGVtU2l6ZSphLnN0YXJ0KSx0aGlzLl9zY3JvbGxl''@;'; put 'put ''ZEluZGV4Q2hhbmdlLm5leHQoTWF0aC5mbG9vcih2KSl9fWxldCBreT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9wbGF0Zm9ybT1kLHRoaXMuX3Njcm9sbGVkPW5ldyBXbix0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9z''@;'; put 'put ''Y3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9aH1yZWdpc3RlcihhKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGEpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGEsYS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9''@;'; put 'put ''PnRoaXMuX3Njcm9sbGVkLm5leHQoYSkpKX1kZXJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldChhKTtkJiYoZC51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUoYSkpfXNjcm9sbGVkKGE9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9y''@;'; put 'put ''bS5pc0Jyb3dzZXI/bmV3IFh0KGQ9Pnt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb258fHRoaXMuX2FkZEdsb2JhbExpc3RlbmVyKCk7Y29uc3QgaD1hPjA/dGhpcy5fc2Nyb2xsZWQucGlwZSh5WShhKSkuc3Vic2NyaWJlKGQpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShkKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aC51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOmZvKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRo''@;'; put 'put ''aXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChhLGQpPT50aGlzLmRlcmVnaXN0ZXIoZCkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSk7cmV0dXJuIHRoaXMuc2Nyb2xs''@;'; put 'put ''ZWQoZCkucGlwZSgkbChmPT4hZnx8aC5pbmRleE9mKGYpPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpe2NvbnN0IGQ9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChoLGYpPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChmLGEpJiZk''@;'; put 'put ''LnB1c2goZil9KSxkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBoPUVkKGQpLGY9YS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEw''@;'; put 'put ''fXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1fYWRkR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT54ZCh0aGlzLl9nZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoV2EpLHhyKHd4KSx4cih2cyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksWTBlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5zY3JvbGxEaXNwYXRjaGVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLmRpcj1mLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5fZWxlbWVudFNjcm9sbGVkPW5ldyBYdCh2PT50aGlzLm5nWm9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+eGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsInNjcm9sbCIpLnBpcGUoVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHYpKSl9bmdPbkluaXQoKXt0aGlzLnNjcm9sbERpc3BhdGNoZXIucmVnaXN0ZXIodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnNjcm9sbERpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWVsZW1lbnRTY3JvbGxlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50U2Nyb2xsZWR9Z2V0RWxlbWVudFJlZigpe3JldHVybiB0aGlzLmVsZW1l''@;'; put 'put ''bnRSZWZ9c2Nyb2xsVG8oYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09YS5sZWZ0JiYoYS5sZWZ0PWg/YS5lbmQ6YS5zdGFydCksbnVsbD09YS5yaWdodCYmKGEucmlnaHQ9aD9hLnN0YXJ0OmEu''@;'; put 'put ''ZW5kKSxudWxsIT1hLmJvdHRvbSYmKGEudG9wPWQuc2Nyb2xsSGVpZ2h0LWQuY2xpZW50SGVpZ2h0LWEuYm90dG9tKSxoJiZTeCgpIT1fcC5OT1JNQUw/KG51bGwhPWEubGVmdCYmKGEucmlnaHQ9ZC5zY3JvbGxXaWR0aC1kLmNsaWVudFdpZHRoLWEubGVmdCksU3goKT09X3AuSU5WRVJURUQ/''@;'; put 'put ''YS5sZWZ0PWEucmlnaHQ6U3goKT09X3AuTkVHQVRFRCYmKGEubGVmdD1hLnJpZ2h0Py1hLnJpZ2h0OmEucmlnaHQpKTpudWxsIT1hLnJpZ2h0JiYoYS5sZWZ0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhhKX1fYXBwbHlT''@;'; put 'put ''Y3JvbGxUb09wdGlvbnMoYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDshZnVuY3Rpb24gbVBlKCl7aWYobnVsbD09Yzcpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJl''@;'; put 'put ''dHVybiBjNz0hMSxjNztpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKWM3PSEwO2Vsc2V7Y29uc3QgYz1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbztjNz0hIWMmJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChjLnRvU3RyaW5n''@;'; put 'put ''KCkpfX1yZXR1cm4gYzd9KCk/KG51bGwhPWEudG9wJiYoZC5zY3JvbGxUb3A9YS50b3ApLG51bGwhPWEubGVmdCYmKGQuc2Nyb2xsTGVmdD1hLmxlZnQpKTpkLnNjcm9sbFRvKGEpfW1lYXN1cmVTY3JvbGxPZmZzZXQoYSl7Y29uc3QgZD0ibGVmdCIsaD0icmlnaHQiLGY9dGhpcy5lbGVtZW50''@;'; put 'put ''UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWEpcmV0dXJuIGYuc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1hKXJldHVybiBmLnNjcm9sbEhlaWdodC1mLmNsaWVudEhlaWdodC1mLnNjcm9sbFRvcDtjb25zdCB2PXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0''@;'; put 'put ''Ij09YT9hPXY/aDpkOiJlbmQiPT1hJiYoYT12P2Q6aCksdiYmU3goKT09X3AuSU5WRVJURUQ/YT09ZD9mLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGgtZi5zY3JvbGxMZWZ0OmYuc2Nyb2xsTGVmdDp2JiZTeCgpPT1fcC5ORUdBVEVEP2E9PWQ/Zi5zY3JvbGxMZWZ0K2Yuc2Nyb2xsV2lkdGgt''@;'; put 'put ''Zi5jbGllbnRXaWR0aDotZi5zY3JvbGxMZWZ0OmE9PWQ/Zi5zY3JvbGxMZWZ0OmYuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aC1mLnNjcm9sbExlZnR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKGt5KSxHZShXYSksR2UocG0s''@;'; put 'put ''OCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrLXNjcm9sbGFibGUiLCIiXSxbIiIsImNka1Njcm9sbGFibGUiLCIiXV0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksQUw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7''@;'; put 'put ''dGhpcy5fcGxhdGZvcm09YSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuX2NoYW5nZUxpc3RlbmVyPWY9Pnt0aGlzLl9jaGFuZ2UubmV4dChmKX0sdGhpcy5fZG9jdW1lbnQ9aCxkLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoYS5pc0Jyb3dzZXIpe2NvbnN0IGY9dGhpcy5fZ2V0V2luZG93''@;'; put 'put ''KCk7Zi5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxmLmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxs''@;'; put 'put ''KX0pfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5n''@;'; put 'put ''ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgYT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlz''@;'; put 'put ''Ll92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGF9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgYT10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6ZCxoZWlnaHQ6aH09dGhp''@;'; put 'put ''cy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLnRvcCtoLHJpZ2h0OmEubGVmdCtkLGhlaWdodDpoLHdpZHRoOmR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6''@;'; put 'put ''MCxsZWZ0OjB9O2NvbnN0IGE9dGhpcy5fZG9jdW1lbnQsZD10aGlzLl9nZXRXaW5kb3coKSxoPWEuZG9jdW1lbnRFbGVtZW50LGY9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1mLnRvcHx8YS5ib2R5LnNjcm9sbFRvcHx8ZC5zY3JvbGxZfHxoLnNjcm9sbFRvcHx8MCxs''@;'; put 'put ''ZWZ0Oi1mLmxlZnR8fGEuYm9keS5zY3JvbGxMZWZ0fHxkLnNjcm9sbFh8fGguc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKGE9MjApe3JldHVybiBhPjA/dGhpcy5fY2hhbmdlLnBpcGUoeVkoYSkpOnRoaXMuX2NoYW5nZX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRW''@;'; put 'put ''aWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6YS5pbm5lcldpZHRoLGhlaWdodDphLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIod3gpLHhyKFdhKSx4cih2cyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgRzBlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExBQkxFIik7bGV0ICQwZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWTBle2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpfW1lYXN1cmVWaWV3cG9ydFNpemUoYSl7Y29uc3QgZD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxl''@;'; put 'put ''bWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT1hP2QuY2xpZW50V2lkdGg6ZC5jbGllbnRIZWlnaHR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKGt5KSxHZShXYSksR2UocG0sOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIo''@;'; put 'put ''e3R5cGU6YyxmZWF0dXJlczpbd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBERmU9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/ajBlOmZGZTtsZXQgRHk9KCgpPT57Y2xhc3MgYyBleHRlbmRzICQwZXtnZXQgb3JpZW50YXRpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb259''@;'; put 'put ''c2V0IG9yaWVudGF0aW9uKGEpe3RoaXMuX29yaWVudGF0aW9uIT09YSYmKHRoaXMuX29yaWVudGF0aW9uPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpKX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFope3N1cGVyKGEsTSxoLHYpLHRoaXMuZWxlbWVudFJlZj1hLHRoaXMuX2NoYW5n''@;'; put 'put ''ZURldGVjdG9yUmVmPWQsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9Zix0aGlzLnNjcm9sbGFibGU9Wix0aGlzLl9wbGF0Zm9ybT1maSh3eCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBXbix0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgV24sdGhpcy5fb3JpZW50YXRpb249InZlcnRp''@;'; put 'put ''Y2FsIix0aGlzLmFwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBYdChyZT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoY2U9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMubmdab25lLnJ1bigoKT0+cmUu''@;'; put 'put ''bmV4dChjZSkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9''@;'; put 'put ''e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRo''@;'; put 'put ''aXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1xdC5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9RC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1l''@;'; put 'put ''bnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5zY3JvbGxhYmxlPT09dGhpcyYmc3VwZXIubmdPbkluaXQoKSx0aGlz''@;'; put 'put ''Lm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcyksdGhpcy5zY3JvbGxhYmxlLmVsZW1lbnRTY3JvbGxlZCgpLnBpcGUoeDIobnVs''@;'; put 'put ''bCkseVkoMCxERmUpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50U2Nyb2xsZWQoKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Ny''@;'; put 'put ''b2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaChhKXt0aGlzLm5n''@;'; put 'put ''Wm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Zvck9mPWEsdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKFYwKHRoaXMuX2RldGFjaGVkU3ViamVjdCkpLnN1YnNjcmliZShkPT57Y29uc3QgaD1kLmxlbmd0aDtoIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5n''@;'; put 'put ''dGg9aCx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2Rh''@;'; put 'put ''dGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoYSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVu''@;'; put 'put ''dFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbYV19c2V0VG90YWxDb250ZW50U2l6ZShhKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09YSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9YSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0No''@;'; put 'put ''YW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGEpeyhmdW5jdGlvbiBrRmUoYyxsKXtyZXR1cm4gYy5zdGFydD09bC5zdGFydCYmYy5lbmQ9PWwuZW5kfSkodGhpcy5fcmVuZGVyZWRSYW5nZSxhKXx8KHRoaXMuYXBwZW5kT25seSYmKGE9e3N0YXJ0OjAsZW5kOk1hdGgu''@;'; put 'put ''bWF4KHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kLGEuZW5kKX0pLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0Lm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZT1hKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJl''@;'; put 'put ''ZCgpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KGEsZD0idG8tc3RhcnQiKXthPXRo''@;'; put 'put ''aXMuYXBwZW5kT25seSYmInRvLXN0YXJ0Ij09PWQ/MDphO2NvbnN0IGY9Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHY9Zj8iWCI6IlkiO2xldCBEPWB0cmFuc2xhdGUke3Z9KCR7TnVtYmVyKChmJiZ0aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlPy0xOjEpKmEpfXB4KWA7''@;'; put 'put ''dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PWEsInRvLWVuZCI9PT1kJiYoRCs9YCB0cmFuc2xhdGUke3Z9KC0xMDAlKWAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSEwKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0hPUQmJih0aGlzLl9yZW5kZXJl''@;'; put 'put ''ZENvbnRlbnRUcmFuc2Zvcm09RCx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQtPXRoaXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlz''@;'; put 'put ''Ll9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJlZE9mZnNldENoYW5nZWQoKX0pKX1zY3JvbGxUb09mZnNldChh''@;'; put 'put ''LGQ9ImF1dG8iKXtjb25zdCBoPXtiZWhhdmlvcjpkfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2guc3RhcnQ9YTpoLnRvcD1hLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhoKX1zY3JvbGxUb0luZGV4KGEsZD0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRv''@;'; put 'put ''SW5kZXgoYSxkKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2xldCBkO3JldHVybiBkPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9oPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KGgpOmg9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KGgpLE1hdGgubWF4KDAsZChhPz8oImhv''@;'; put 'put ''cml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGEpe2xldCBkO2NvbnN0IGg9ImxlZnQiLGY9InJpZ2h0Iix2PSJydGwiPT10aGlzLmRpcj8udmFsdWU7ZD0ic3RhcnQi''@;'; put 'put ''PT1hP3Y/ZjpoOiJlbmQiPT1hP3Y/aDpmOmF8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7Y29uc3QgTT10aGlzLnNjcm9sbGFibGUubWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZCk7cmV0dXJuIHRoaXMuZWxlbWVudFJl''@;'; put 'put ''Zi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RdLU19bWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKXtjb25zdCBhPXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9hLm9mZnNldFdp''@;'; put 'put ''ZHRoOmEub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUoYSl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUoYSx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Nj''@;'; put 'put ''cm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLnNjcm9sbGFibGUubWVhc3VyZVZpZXdwb3J0U2l6ZSh0aGlzLm9yaWVudGF0aW9uKX1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZChhKXthJiZ0''@;'; put 'put ''aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKGEpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+''@;'; put 'put ''e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpfV9kb0NoYW5nZURldGVjdGlvbigpe3RoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zv''@;'; put 'put ''cm0sdGhpcy5uZ1pvbmUucnVuKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7Y29uc3QgYT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IoY29uc3QgZCBvZiBhKWQoKX1fY2FsY3VsYXRl''@;'; put 'put ''U3BhY2VyU2l6ZSgpe3RoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyIiOmAke3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YCR7dGhp''@;'; put 'put ''cy5fdG90YWxDb250ZW50U2l6ZX1weGA6IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVzKSxHZShXYSksR2UoVzBlLDgpLEdlKHBtLDgpLEdlKGt5KSxHZShBTCksR2UoRzBlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21w''@;'; put 'put ''PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKE1GZSw3KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLl9jb250ZW50V3JhcHBlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbMSwi''@;'; put 'put ''Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCIsImhvcml6b250YWwiPT09aC5vcmllbnRhdGlvbikoImNkay12aXJ0dWFsLXNj''@;'; put 'put ''cm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCIsImhvcml6b250YWwiIT09aC5vcmllbnRhdGlvbil9LGlucHV0czp7b3JpZW50YXRpb246Im9yaWVudGF0aW9uIixhcHBlbmRPbmx5OltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiYXBwZW5kT25seSIsImFwcGVuZE9ubHkiLHMxXX0s''@;'; put 'put ''b3V0cHV0czp7c2Nyb2xsZWRJbmRleENoYW5nZToic2Nyb2xsZWRJbmRleENoYW5nZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpZMGUsdXNlRmFjdG9yeTooYSxkKT0+YXx8ZCxkZXBzOltbbmV3IEkxLG5ldyBjZyhHMGUpXSxjXX1dKSxXbCx3YSxLSV0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOnhGZSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1siY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYo''@;'; put 'put ''c2EoKSxkZSgwLCJkaXYiLDEsMCksWXIoMiksaGUoKSxHdCgzLCJkaXYiLDIpKSwyJmQmJihmZSgzKSxfZCgid2lkdGgiLGguX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixoLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91''@;'; put 'put ''Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNj''@;'; put 'put ''cm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90''@;'; put 'put ''KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAu''@;'; put 'put ''Y2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7''@;'; put 'put ''cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1''@;'; put 'put ''YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3Jp''@;'; put 'put ''ZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3Qo''@;'; put 'put ''W2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNj''@;'; put 'put ''cm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBLMGUoYyxsLGEpe2lmKCFhLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtjb25zdCBoPWEuZ2V0Qm91bmRp''@;'; put 'put ''bmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09Yz8ic3RhcnQiPT09bD9oLmxlZnQ6aC5yaWdodDoic3RhcnQiPT09bD9oLnRvcDpoLmJvdHRvbX1sZXQga0w9KCgpPT57Y2xhc3MgY3tnZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1z''@;'; put 'put ''ZXQgY2RrVmlydHVhbEZvck9mKGEpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1hLGZ1bmN0aW9uIENGZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMuY29ubmVjdCYmIShjIGluc3RhbmNlb2YgV1opfShhKT90aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KGEpOnRoaXMuX2Rh''@;'; put 'put ''dGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IFNGZShCTShhKT9hOkFycmF5LmZyb20oYXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShhKXt0aGlzLl9uZWVkc1VwZGF0ZT0h''@;'; put 'put ''MCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hPyhkLGgpPT5hKGQrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxoKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShhKXthJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVt''@;'; put 'put ''cGxhdGU9YSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPXU3KGEpfWNv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5fdGVtcGxhdGU9ZCx0aGlzLl9kaWZmZXJzPWgsdGhpcy5fdmlld1JlcGVhdGVyPWYsdGhpcy5fdmlld3BvcnQ9dix0aGlzLnZpZXdDaGFuZ2U9bmV3IFduLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2Vz''@;'; put 'put ''PW5ldyBXbix0aGlzLmRhdGFTdHJlYW09dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMucGlwZSh4MihudWxsKSxmdW5jdGlvbiBtRmUoKXtyZXR1cm4gVmkoKGMsbCk9PntsZXQgYSxkPSExO2Muc3Vic2NyaWJlKE5pKGwsaD0+e2NvbnN0IGY9YTthPWgsZCYmbC5uZXh0KFtmLGhdKSxkPSEwfSkp''@;'; put 'put ''fSl9KCksVjEoKFtELFpdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShELFopKSxJMGUoMSkpLHRoaXMuX2RpZmZlcj1udWxsLHRoaXMuX25lZWRzVXBkYXRlPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5kYXRhU3RyZWFtLnN1YnNjcmliZShEPT57dGhpcy5fZGF0YT1ELHRoaXMu''@;'; put 'put ''X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnBpcGUoVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKEQ9Pnt0aGlzLl9yZW5kZXJlZFJhbmdlPUQsdGhpcy52aWV3Q2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJk0ucnVuKCgp''@;'; put 'put ''PT50aGlzLnZpZXdDaGFuZ2UubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlKSksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LmF0dGFjaCh0aGlzKX1tZWFzdXJlUmFuZ2VTaXplKGEsZCl7aWYoYS5zdGFydD49YS5lbmQpcmV0dXJuIDA7Y29uc3QgaD1hLnN0''@;'; put 'put ''YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsZj1hLmVuZC1hLnN0YXJ0O2xldCB2LE07Zm9yKGxldCBEPTA7RDxmO0QrKyl7Y29uc3QgWj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gpO2lmKFomJloucm9vdE5vZGVzLmxlbmd0aCl7dj1NPVoucm9vdE5vZGVzWzBdO2JyZWFr''@;'; put 'put ''fX1mb3IobGV0IEQ9Zi0xO0Q+LTE7RC0tKXtjb25zdCBaPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KEQraCk7aWYoWiYmWi5yb290Tm9kZXMubGVuZ3RoKXtNPVoucm9vdE5vZGVzW1oucm9vdE5vZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIHYmJk0/SzBlKGQsImVuZCIsTSktSzBl''@;'; put 'put ''KGQsInN0YXJ0Iix2KTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7YT90aGlzLl9hcHBseUNoYW5nZXMoYSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25l''@;'; put 'put ''ZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3ll''@;'; put 'put ''ZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpe3RoaXMuX3JlbmRlcmVkUmFuZ2UmJih0aGlzLl9yZW5kZXJlZEl0ZW1zPXRoaXMuX2RhdGEuc2xpY2UodGhpcy5fcmVuZGVyZWRSYW5n''@;'; put 'put ''ZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKGEsZCk9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tC''@;'; put 'put ''eShhLGQpOmQpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UoYSxkKXtyZXR1cm4gYSYmYS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLGQ/ZC5jb25uZWN0KHRoaXMpOmZvKCl9X3VwZGF0ZUNvbnRleHQoKXtjb25zdCBhPXRoaXMuX2RhdGEu''@;'; put 'put ''bGVuZ3RoO2xldCBkPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ZC0tOyl7Y29uc3QgaD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChkKTtoLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtkLGguY29udGV4dC5jb3VudD1hLHRoaXMuX3VwZGF0''@;'; put 'put ''ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoaC5jb250ZXh0KSxoLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhhKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGEsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwoZix2LE0pPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdz''@;'; put 'put ''KGYsTSksZj0+Zi5pdGVtKSxhLmZvckVhY2hJZGVudGl0eUNoYW5nZShmPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoZi5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PWYuaXRlbX0pO2NvbnN0IGQ9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IGg9dGhpcy5fdmlld0NvbnRhaW5l''@;'; put 'put ''clJlZi5sZW5ndGg7Zm9yKDtoLS07KXtjb25zdCBmPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGgpO2YuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2gsZi5jb250ZXh0LmNvdW50PWQsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhmLmNv''@;'; put 'put ''bnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhhKXthLmZpcnN0PTA9PT1hLmluZGV4LGEubGFzdD1hLmluZGV4PT09YS5jb3VudC0xLGEuZXZlbj1hLmluZGV4JTI9PTAsYS5vZGQ9IWEuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyhhLGQpe3JldHVybnt0ZW1wbGF0''@;'; put 'put ''ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6YS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6ZH19c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRG8pLEdlKFNsKSxHZShlbSksR2UoX1kpLEdlKER5LDQpLEdlKFdhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1d''@;'; put 'put ''LGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToi''@;'; put 'put ''Y2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRlOl9ZLHVzZUNsYXNzOlowZX1dKV19KX19cmV0dXJuIGN9KSgpLElGZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB3WShjLGwsYSl7Zm9yKGxldCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO2g/Yy5z''@;'; put 'put ''ZXRQcm9wZXJ0eShkLGgsYT8uaGFzKGQpPyJpbXBvcnRhbnQiOiIiKTpjLnJlbW92ZVByb3BlcnR5KGQpfXJldHVybiBjfWZ1bmN0aW9uIEl5KGMsbCl7Y29uc3QgYT1sPyIiOiJub25lIjt3WShjLnN0eWxlLHsidG91Y2gtYWN0aW9uIjpsPyIiOiJub25lIiwiLXdlYmtpdC11c2VyLWRyYWci''@;'; put 'put ''Omw/IiI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmw/IiI6InRyYW5zcGFyZW50IiwidXNlci1zZWxlY3QiOmEsIi1tcy11c2VyLXNlbGVjdCI6YSwiLXdlYmtpdC11c2VyLXNlbGVjdCI6YSwiLW1vei11c2VyLXNlbGVjdCI6YX0pfWZ1bmN0aW9uIHEwZShjLGwsYSl7''@;'; put 'put ''d1koYy5zdHlsZSx7cG9zaXRpb246bD8iIjoiZml4ZWQiLHRvcDpsPyIiOiIwIixvcGFjaXR5Omw/IiI6IjAiLGxlZnQ6bD8iIjoiLTk5OWVtIn0sYSl9ZnVuY3Rpb24gREwoYyxsKXtyZXR1cm4gbCYmIm5vbmUiIT1sP2MrIiAiK2w6Y31mdW5jdGlvbiBYMGUoYyxsKXtjLnN0eWxlLndpZHRo''@;'; put 'put ''PWAke2wud2lkdGh9cHhgLGMuc3R5bGUuaGVpZ2h0PWAke2wuaGVpZ2h0fXB4YCxjLnN0eWxlLnRyYW5zZm9ybT1JTChsLmxlZnQsbC50b3ApfWZ1bmN0aW9uIElMKGMsbCl7cmV0dXJuYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChjKX1weCwgJHtNYXRoLnJvdW5kKGwpfXB4LCAwKWB9ZnVu''@;'; put 'put ''Y3Rpb24gQ1koYyl7Y29uc3QgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6bC50b3AscmlnaHQ6bC5yaWdodCxib3R0b206bC5ib3R0b20sbGVmdDpsLmxlZnQsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHQseDpsLngseTpsLnl9fWZ1bmN0aW9uIFNZKGMsbCxh''@;'; put 'put ''KXtjb25zdHt0b3A6ZCxib3R0b206aCxsZWZ0OmYscmlnaHQ6dn09YztyZXR1cm4gYT49ZCYmYTw9aCYmbD49ZiYmbDw9dn1mdW5jdGlvbiB4eChjLGwsYSl7Yy50b3ArPWwsYy5ib3R0b209Yy50b3ArYy5oZWlnaHQsYy5sZWZ0Kz1hLGMucmlnaHQ9Yy5sZWZ0K2Mud2lkdGh9ZnVuY3Rpb24g''@;'; put 'put ''SjBlKGMsbCxhLGQpe2NvbnN0e3RvcDpoLHJpZ2h0OmYsYm90dG9tOnYsbGVmdDpNLHdpZHRoOkQsaGVpZ2h0Olp9PWMscmU9RCpsLGNlPVoqbDtyZXR1cm4gZD5oLWNlJiZkPHYrY2UmJmE+TS1yZSYmYTxmK3JlfWNsYXNzIFEwZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2N1bWVudD1sLHRo''@;'; put 'put ''aXMucG9zaXRpb25zPW5ldyBNYXB9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JF''@;'; put 'put ''YWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpDWShhKX0pfSl9aGFuZGxlU2Nyb2xsKGwpe2NvbnN0IGE9eEwobCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0''@;'; put 'put ''dXJuIG51bGw7Y29uc3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLHY7aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCBaPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO2Y9Wi50b3Asdj1aLmxlZnR9ZWxzZSBmPWEuc2Nyb2xsVG9wLHY9YS5zY3JvbGxMZWZ0O2NvbnN0IE09''@;'; put 'put ''aC50b3AtZixEPWgubGVmdC12O3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChaLHJlKT0+e1ouY2xpZW50UmVjdCYmYSE9PXJlJiZhLmNvbnRhaW5zKHJlKSYmeHgoWi5jbGllbnRSZWN0LE0sRCl9KSxoLnRvcD1mLGgubGVmdD12LHt0b3A6TSxsZWZ0OkR9fWdldFZpZXdwb3J0U2Ny''@;'; put 'put ''b2xsUG9zaXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiBlMWUoYyl7Y29uc3QgbD1jLmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZSgiaWQiKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWQ/cjFlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8fCJ0ZXh0YXJlYSI9PT1kKSYmbjFlKGMsbCksdDFlKCJjYW52YXMi''@;'; put 'put ''LGMsbCxyMWUpLHQxZSgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxuMWUpLGx9ZnVuY3Rpb24gdDFlKGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVyeVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEucXVlcnlTZWxlY3RvckFsbChjKTtmb3IobGV0IHY9MDt2PGgubGVu''@;'; put 'put ''Z3RoO3YrKylkKGhbdl0sZlt2XSl9fWxldCBMRmU9MDtmdW5jdGlvbiBuMWUoYyxsKXsiZmlsZSIhPT1sLnR5cGUmJihsLnZhbHVlPWMudmFsdWUpLCJyYWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNsb25lLSR7bC5uYW1lfS0ke0xGZSsrfWApfWZ1bmN0aW9uIHIxZShj''@;'; put 'put ''LGwpe2NvbnN0IGE9bC5nZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRjaHt9fWZ1bmN0aW9uIGkxZShjLGwpe2NvbnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09PWEubGVuZ3RoJiZhWzBdLm5vZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07''@;'; put 'put ''Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBhMWUoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4tMT8xOjFlMztyZXR1cm4gcGFyc2VGbG9hdChjKSpsfWZ1bmN0aW9u''@;'; put 'put ''IE1ZKGMsbCl7cmV0dXJuIGMuZ2V0UHJvcGVydHlWYWx1ZShsKS5zcGxpdCgiLCIpLm1hcChkPT5kLnRyaW0oKSl9Y29uc3QgUEZlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBGRmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxELFope3RoaXMuX2RvY3VtZW50PWwsdGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnQ9YSx0aGlzLl9kaXJlY3Rpb249ZCx0aGlzLl9pbml0aWFsRG9tUmVjdD1oLHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1mLHRoaXMuX3ByZXZpZXdDbGFzcz12LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPU0sdGhpcy5faW5pdGlhbFRyYW5zZm9ybT1ELHRoaXMuX3pJbmRleD1a''@;'; put 'put ''fWF0dGFjaChsKXt0aGlzLl9wcmV2aWV3PXRoaXMuX2NyZWF0ZVByZXZpZXcoKSxsLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZpZXcpLCJzaG93UG9wb3ZlciJpbiB0aGlzLl9wcmV2aWV3JiZ0aGlzLl9wcmV2aWV3LnNob3dQb3BvdmVyKCl9ZGVzdHJveSgpe3RoaXMuX3ByZXZpZXcucmVtb3Zl''@;'; put 'put ''KCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9dGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz1udWxsfXNldFRyYW5zZm9ybShsKXt0aGlzLl9wcmV2aWV3LnN0eWxlLnRyYW5zZm9ybT1sfWdldEJvdW5kaW5nQ2xpZW50UmVjdCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWFkZENsYXNzKGwpe3RoaXMuX3ByZXZpZXcuY2xhc3NMaXN0LmFkZChsKX1nZXRUcmFuc2l0aW9uRHVyYXRpb24oKXtyZXR1cm4gZnVuY3Rpb24gT0ZlKGMpe2NvbnN0IGw9Z2V0Q29tcHV0ZWRTdHlsZShjKSxhPU1ZKGwsInRy''@;'; put 'put ''YW5zaXRpb24tcHJvcGVydHkiKSxkPWEuZmluZChNPT4idHJhbnNmb3JtIj09PU18fCJhbGwiPT09TSk7aWYoIWQpcmV0dXJuIDA7Y29uc3QgaD1hLmluZGV4T2YoZCksZj1NWShsLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksdj1NWShsLCJ0cmFuc2l0aW9uLWRlbGF5Iik7cmV0dXJuIGExZShm''@;'; put 'put ''W2hdKSthMWUodltoXSl9KHRoaXMuX3ByZXZpZXcpfWFkZEV2ZW50TGlzdGVuZXIobCxhKXt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIobCxhKX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmlldy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSl9X2NyZWF0ZVByZXZp''@;'; put 'put ''ZXcoKXtjb25zdCBsPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSxhPXRoaXMuX3ByZXZpZXdDbGFzcyxkPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBoO2lmKGQmJmwpe2NvbnN0IGY9bC5tYXRjaFNpemU/dGhpcy5faW5pdGlhbERvbVJlY3Q6bnVsbCx2PWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJl''@;'; put 'put ''ZGRlZFZpZXcoZCxsLmNvbnRleHQpO3YuZGV0ZWN0Q2hhbmdlcygpLGg9aTFlKHYsdGhpcy5fZG9jdW1lbnQpLHRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc9dixsLm1hdGNoU2l6ZT9YMGUoaCxmKTpoLnN0eWxlLnRyYW5zZm9ybT1JTCh0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LHRo''@;'; put 'put ''aXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpfWVsc2UgaD1lMWUodGhpcy5fcm9vdEVsZW1lbnQpLFgwZShoLHRoaXMuX2luaXRpYWxEb21SZWN0KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYoaC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSk7cmV0dXJuIHdZKGgu''@;'; put 'put ''c3R5bGUseyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLG1hcmdpbjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4Ijp0aGlzLl96SW5kZXgrIiJ9LFBGZSksSXkoaCwhMSksaC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaC5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoInBvcG92ZXIiLCJtYW51YWwiKSxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLl9kaXJlY3Rpb24pLGEmJihBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmPT5oLmNsYXNzTGlzdC5hZGQoZikpOmguY2xhc3NMaXN0LmFkZChhKSksaH19Y29uc3QgbzFlPUF5KHtwYXNzaXZlOiEwfSks''@;'; put 'put ''Ukw9QXkoe3Bhc3NpdmU6ITF9KSxzMWU9QXkoe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLGwxZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgTkZle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8ISghdGhpcy5fZHJvcENvbnRhaW5lcnx8IXRoaXMuX2Ryb3BDb250''@;'; put 'put ''YWluZXIuZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXtsIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1sLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goYT0+SXkoYSxsKSkpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2''@;'; put 'put ''KXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PXYsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlz''@;'; put 'put ''Ll9oYXNTdGFydGVkRHJhZ2dpbmc9ITEsdGhpcy5fbW92ZUV2ZW50cz1uZXcgV24sdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9y''@;'; put 'put ''ZXNpemVTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fYm91bmRhcnlFbGVtZW50PW51bGwsdGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD0hMCx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1uZXcgU2V0LHRoaXMuX2RpcmVjdGlvbj0ibHRyIix0aGlzLmRy''@;'; put 'put ''YWdTdGFydERlbGF5PTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBXbix0aGlzLnN0YXJ0ZWQ9bmV3IFduLHRoaXMucmVsZWFzZWQ9bmV3IFduLHRoaXMuZW5kZWQ9bmV3IFduLHRoaXMuZW50ZXJlZD1uZXcgV24sdGhpcy5leGl0ZWQ9bmV3IFduLHRoaXMuZHJv''@;'; put 'put ''cHBlZD1uZXcgV24sdGhpcy5tb3ZlZD10aGlzLl9tb3ZlRXZlbnRzLHRoaXMuX3BvaW50ZXJEb3duPU09PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBEPXRoaXMuX2dldFRhcmdldEhhbmRsZShNKTtEJiYhdGhpcy5fZGlzYWJsZWRI''@;'; put 'put ''YW5kbGVzLmhhcyhEKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoRCxNKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UodGhpcy5fcm9vdEVsZW1lbnQsTSl9LHRoaXMuX3BvaW50ZXJNb3ZlPU09Pntjb25zdCBE''@;'; put 'put ''PXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShNKTtpZighdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKXtpZihNYXRoLmFicyhELngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0aC5hYnMoRC55LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlzLl9jb25m''@;'; put 'put ''aWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBFZT1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KE0pLEJlPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoIUVlKXJldHVybiB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZShNKTsoIUJlfHwh''@;'; put 'put ''QmUuaXNEcmFnZ2luZygpJiYhQmUuaXNSZWNlaXZpbmcoKSkmJihNLmNhbmNlbGFibGUmJk0ucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITAsdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fc3RhcnREcmFnU2VxdWVuY2UoTSkpKX1yZXR1cm59TS5jYW5jZWxh''@;'; put 'put ''YmxlJiZNLnByZXZlbnREZWZhdWx0KCk7Y29uc3QgWj10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihEKTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249RCx0aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEoWiksdGhp''@;'; put 'put ''cy5fZHJvcENvbnRhaW5lcil0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKFosRCk7ZWxzZXtjb25zdCByZT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2luaXRpYWxEb21SZWN0OnRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLGNlPXRoaXMuX2FjdGl2ZVRyYW5zZm9ybTtj''@;'; put 'put ''ZS54PVoueC1yZS54K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueCxjZS55PVoueS1yZS55K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGNlLngsY2UueSl9dGhpcy5fbW92ZUV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pv''@;'; put 'put ''bmUucnVuKCgpPT57dGhpcy5fbW92ZUV2ZW50cy5uZXh0KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246WixldmVudDpNLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShaKSxkZWx0YTp0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGF9KX0pfSx0aGlzLl9wb2ludGVyVXA9TT0+''@;'; put 'put ''e3RoaXMuX2VuZERyYWdTZXF1ZW5jZShNKX0sdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0PU09PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7RCYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoRCkmJiF0aGlzLmRpc2FibGVkJiZNLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxNLnByZXZlbnREZWZhdWx0KCl9LHRoaXMud2l0aFJvb3RFbGVtZW50KGwpLndpdGhQYXJlbnQoYS5wYXJlbnREcmFnUmVmfHxudWxsKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IFEwZShkKSx2LnJlZ2lzdGVyRHJhZ0l0ZW0o''@;'; put 'put ''dGhpcyl9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50fWdldFZpc2libGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaXNEcmFnZ2luZygpP3RoaXMuZ2V0UGxhY2Vob2xkZXJFbGVt''@;'; put 'put ''ZW50KCk6dGhpcy5nZXRSb290RWxlbWVudCgpfXdpdGhIYW5kbGVzKGwpe3RoaXMuX2hhbmRsZXM9bC5tYXAoZD0+RWQoZCkpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChkPT5JeShkLHRoaXMuZGlzYWJsZWQpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT1u''@;'; put 'put ''ZXcgU2V0O3JldHVybiB0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZm9yRWFjaChkPT57dGhpcy5faGFuZGxlcy5pbmRleE9mKGQpPi0xJiZhLmFkZChkKX0pLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1hLHRoaXN9d2l0aFByZXZpZXdUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcHJldmlld1RlbXBs''@;'; put 'put ''YXRlPWwsdGhpc313aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1sLHRoaXN9d2l0aFJvb3RFbGVtZW50KGwpe2NvbnN0IGE9RWQobCk7cmV0dXJuIGEhPT10aGlzLl9yb290RWxlbWVudCYmKHRoaXMuX3Jvb3RFbGVtZW50JiZ0aGlz''@;'; put 'put ''Ll9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLFJMKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3Rh''@;'; put 'put ''cnQiLHRoaXMuX3BvaW50ZXJEb3duLG8xZSksYS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxSTCl9KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9yb290RWxlbWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMu''@;'; put 'put ''X3Jvb3RFbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5vd25lclNWR0VsZW1lbnQpLHRoaXN9d2l0aEJvdW5kYXJ5RWxlbWVudChsKXtyZXR1cm4gdGhpcy5fYm91bmRhcnlFbGVtZW50PWw/RWQobCk6bnVsbCx0''@;'; put 'put ''aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEwKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJl''@;'; put 'put ''bnQobCl7cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJl''@;'; put 'put ''bW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0''@;'; put 'put ''ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMu''@;'; put 'put ''X2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMu''@;'; put 'put ''X3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5n''@;'; put 'put ''JiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybXx8IiIsdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3Jt''@;'; put 'put ''PXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGwpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YobCk+LTEmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuYWRkKGwpLEl5KGwsITApKX1lbmFibGVIYW5kbGUobCl7dGhpcy5fZGlzYWJsZWRIYW5kbGVz''@;'; put 'put ''LmhhcyhsKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUobCksSXkobCx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWwsdGhpc31fd2l0aERyb3BDb250YWluZXIobCl7dGhpcy5fZHJvcENvbnRhaW5lcj1sfWdldEZyZWVEcmFn''@;'; put 'put ''UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4OmwueCx5OmwueX19c2V0RnJlZURyYWdQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0''@;'; put 'put ''aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9bC54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1sLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLngsbC55KSx0aGlzfXdpdGhQcmV2aWV3Q29udGFpbmVyKGwpe3JldHVybiB0aGlzLl9wcmV2''@;'; put 'put ''aWV3Q29udGFpbmVyPWwsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247bCYmdGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5l''@;'; put 'put ''ZFBvaW50ZXJQb3NpdGlvbihsKSxsKX1fcmVtb3ZlTGlzdGVuZXJzKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo''@;'; put 'put ''KSx0aGlzLl9nZXRTaGFkb3dSb290KCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix1MWUsczFlKX1fZGVzdHJveVByZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz1udWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9wbGFjZWhv''@;'; put 'put ''bGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9lbmREcmFnU2VxdWVuY2UobCl7aWYodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVt''@;'; put 'put ''b3ZlTGlzdGVuZXJzKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5zdHlsZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj10aGlzLl9y''@;'; put 'put ''b290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250YWluZXIuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9hbmltYXRl''@;'; put 'put ''UHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX0pO2Vsc2V7dGhpcy5fcGFzc2l2ZVRyYW5zZm9y''@;'; put 'put ''bS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6''@;'; put 'put ''dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX19X3N0YXJ0RHJhZ1NlcXVlbmNlKGwpe0V4KGwp''@;'; put 'put ''JiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPXRoaXMuX2dldFNoYWRvd1Jvb3QoKSxkPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoYSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsdTFlLHMxZSl9KSxkKXtjb25zdCBoPXRoaXMuX3Jvb3RFbGVtZW50LGY9aC5wYXJlbnROb2RlLHY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCksTT10aGlzLl9hbmNob3I9dGhp''@;'; put 'put ''cy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKTtmLmluc2VydEJlZm9yZShNLGgpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC5zdHlsZS50cmFuc2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9bmV3IEZGZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9yb290RWxlbWVudCx0''@;'; put 'put ''aGlzLl9kaXJlY3Rpb24sdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcHJldmlld1RlbXBsYXRlfHxudWxsLHRoaXMucHJldmlld0NsYXNzfHxudWxsLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0sdGhpcy5fY29uZmlnLnpJbmRleHx8MWUzKSx0''@;'; put 'put ''aGlzLl9wcmV2aWV3LmF0dGFjaCh0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoZixhKSkscTBlKGgsITEsbDFlKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYucmVwbGFjZUNoaWxkKHYsaCkpLHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSks''@;'; put 'put ''ZC5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9ZCx0aGlzLl9pbml0aWFsSW5kZXg9ZC5nZXRJdGVtSW5kZXgodGhpcyl9ZWxzZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2luaXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZv''@;'; put 'put ''aWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoZD9kLmdldFNjcm9sbGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKGwsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBkPXRoaXMuaXNEcmFnZ2luZygpLGg9RXgo''@;'; put 'put ''YSksZj0haCYmMCE9PWEuYnV0dG9uLHY9dGhpcy5fcm9vdEVsZW1lbnQsTT14TChhKSxEPSFoJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxaPWg/ZnVuY3Rpb24gUVBlKGMpe2NvbnN0IGw9Yy50b3VjaGVzJiZjLnRv''@;'; put 'put ''dWNoZXNbMF18fGMuY2hhbmdlZFRvdWNoZXMmJmMuY2hhbmdlZFRvdWNoZXNbMF07cmV0dXJuISghbHx8LTEhPT1sLmlkZW50aWZpZXJ8fG51bGwhPWwucmFkaXVzWCYmMSE9PWwucmFkaXVzWHx8bnVsbCE9bC5yYWRpdXNZJiYxIT09bC5yYWRpdXNZKX0oYSk6ZnVuY3Rpb24gSlBlKGMpe3Jl''@;'; put 'put ''dHVybiAwPT09Yy5idXR0b25zfHwwPT09Yy5kZXRhaWx9KGEpO2lmKE0mJk0uZHJhZ2dhYmxlJiYibW91c2Vkb3duIj09PWEudHlwZSYmYS5wcmV2ZW50RGVmYXVsdCgpLGR8fGZ8fER8fFopcmV0dXJuO2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBiZT12LnN0eWxlO3RoaXMuX3Jv''@;'; put 'put ''b3RFbGVtZW50VGFwSGlnaGxpZ2h0PWJlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yfHwiIixiZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz10aGlzLl9oYXNNb3ZlZD0hMSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlz''@;'; put 'put ''Ll9pbml0aWFsRG9tUmVjdD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJNb3ZlLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyTW92ZSksdGhpcy5fcG9pbnRl''@;'; put 'put ''clVwU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlclVwLnN1YnNjcmliZSh0aGlzLl9wb2ludGVyVXApLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJl''@;'; put 'put ''KGJlPT50aGlzLl91cGRhdGVPblNjcm9sbChiZSkpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmKHRoaXMuX2JvdW5kYXJ5UmVjdD1DWSh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpKTtjb25zdCByZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU7dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ9cmUm''@;'; put 'put ''JnJlLnRlbXBsYXRlJiYhcmUubWF0Y2hTaXplP3t4OjAseTowfTp0aGlzLl9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQodGhpcy5faW5pdGlhbERvbVJlY3QsbCxhKTtjb25zdCBjZT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249''@;'; put 'put ''dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGEpO3RoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YT17eDowLHk6MH0sdGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlPXt4OmNlLngseTpjZS55fSx0aGlzLl9kcmFnU3RhcnRUaW1lPURhdGUubm93KCksdGhp''@;'; put 'put ''cy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdGFydERyYWdnaW5nKHRoaXMsYSl9X2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpe3EwZSh0aGlzLl9yb290RWxlbWVudCwhMCxsMWUpLHRoaXMuX2FuY2hvci5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLl9yb290RWxlbWVudCx0aGlzLl9hbmNob3Ip''@;'; put 'put ''LHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX25nWm9uZS5ydW4oKCk9Pntjb25z''@;'; put 'put ''dCBhPXRoaXMuX2Ryb3BDb250YWluZXIsZD1hLmdldEl0ZW1JbmRleCh0aGlzKSxoPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKSxmPXRoaXMuX2dldERyYWdEaXN0YW5jZShoKSx2PWEuX2lzT3ZlckNvbnRhaW5lcihoLngsaC55KTt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0''@;'; put 'put ''aGlzLGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOnRoaXMsY3VycmVudEluZGV4OmQscHJldmlvdXNJbmRleDp0aGlzLl9pbml0aWFsSW5kZXgsY29udGFpbmVyOmEscHJldmlvdXNDb250YWluZXI6dGhpcy5faW5pdGlhbENvbnRhaW5l''@;'; put 'put ''cixpc1BvaW50ZXJPdmVyQ29udGFpbmVyOnYsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksYS5kcm9wKHRoaXMsZCx0aGlzLl9pbml0aWFsSW5kZXgsdGhpcy5faW5pdGlhbENvbnRhaW5lcix2LGYsaCxsKSx0aGlzLl9kcm9wQ29udGFpbmVyPXRoaXMuX2luaXRpYWxDb250YWlu''@;'; put 'put ''ZXJ9KX1fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih7eDpsLHk6YX0se3g6ZCx5Omh9KXtsZXQgZj10aGlzLl9pbml0aWFsQ29udGFpbmVyLl9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKHRoaXMsbCxhKTshZiYmdGhpcy5fZHJvcENvbnRhaW5lciE9PXRoaXMuX2luaXRpYWxD''@;'; put 'put ''b250YWluZXImJnRoaXMuX2luaXRpYWxDb250YWluZXIuX2lzT3ZlckNvbnRhaW5lcihsLGEpJiYoZj10aGlzLl9pbml0aWFsQ29udGFpbmVyKSxmJiZmIT09dGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZXhpdGVkLm5leHQoe2l0ZW06dGhpcyxjb250''@;'; put 'put ''YWluZXI6dGhpcy5fZHJvcENvbnRhaW5lcn0pLHRoaXMuX2Ryb3BDb250YWluZXIuZXhpdCh0aGlzKSx0aGlzLl9kcm9wQ29udGFpbmVyPWYsdGhpcy5fZHJvcENvbnRhaW5lci5lbnRlcih0aGlzLGwsYSxmPT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmZi5zb3J0aW5nRGlzYWJsZWQ/dGhp''@;'; put 'put ''cy5faW5pdGlhbEluZGV4OnZvaWQgMCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6ZixjdXJyZW50SW5kZXg6Zi5nZXRJdGVtSW5kZXgodGhpcyl9KX0pLHRoaXMuaXNEcmFnZ2luZygpJiYodGhpcy5fZHJvcENvbnRhaW5lci5fc3RhcnRTY3JvbGxpbmdJZk5lY2Vz''@;'; put 'put ''c2FyeShkLGgpLHRoaXMuX2Ryb3BDb250YWluZXIuX3NvcnRJdGVtKHRoaXMsbCxhLHRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSksdGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obCxhKTp0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC10''@;'; put 'put ''aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54LGEtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueSkpfV9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKXtpZighdGhpcy5faGFzTW92ZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xk''@;'; put 'put ''ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5fcHJldmlldy5hZGRDbGFzcygiY2RrLWRyYWctYW5pbWF0aW5nIiksdGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwubGVmdCxsLnRvcCk7Y29uc3QgYT10aGlzLl9wcmV2aWV3LmdldFRyYW5zaXRpb25EdXJhdGlvbigpO3JldHVy''@;'; put 'put ''biAwPT09YT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPXY9PnsoIXZ8fHhMKHYpPT09dGhpcy5fcHJldmlldyYmInRyYW5zZm9ybSI9PT12LnByb3BlcnR5TmFtZSkmJih0aGlzLl9wcmV2aWV3Py5y''@;'; put 'put ''ZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKSxkKCksY2xlYXJUaW1lb3V0KGYpKX0sZj1zZXRUaW1lb3V0KGgsMS41KmEpO3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSxhPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBkO3JldHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEsbC5jb250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RD''@;'; put 'put ''aGFuZ2VzKCksZD1pMWUodGhpcy5fcGxhY2Vob2xkZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpkPWUxZSh0aGlzLl9yb290RWxlbWVudCksZC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixkLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXBsYWNlaG9sZGVyIiksZH1fZ2V0UG9pbnRlclBvc2l0''@;'; put 'put ''aW9uSW5FbGVtZW50KGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsZj1oP2guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bCx2PUV4KGQpP2QudGFyZ2V0VG91Y2hlc1swXTpkLE09dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmYu''@;'; put 'put ''bGVmdC1sLmxlZnQrKHYucGFnZVgtZi5sZWZ0LU0ubGVmdCkseTpmLnRvcC1sLnRvcCsodi5wYWdlWS1mLnRvcC1NLnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksZD1FeChsKT9sLnRvdWNoZXNbMF18''@;'; put 'put ''fGwuY2hhbmdlZFRvdWNoZXNbMF18fHtwYWdlWDowLHBhZ2VZOjB9OmwsaD1kLnBhZ2VYLWEubGVmdCxmPWQucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCB2PXRoaXMuX293bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKTtpZih2KXtjb25zdCBNPXRoaXMu''@;'; put 'put ''X293bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBNLng9aCxNLnk9ZixNLm1hdHJpeFRyYW5zZm9ybSh2LmludmVyc2UoKSl9fXJldHVybnt4OmgseTpmfX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3Ro''@;'; put 'put ''aXMuX2Ryb3BDb250YWluZXIubG9ja0F4aXM6bnVsbDtsZXR7eDpkLHk6aH09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGwsdGhpcyx0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCk6bDtpZigieCI9PT10aGlz''@;'; put 'put ''LmxvY2tBeGlzfHwieCI9PT1hP2g9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueS0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55OjApOigieSI9PT10aGlzLmxvY2tBeGlzfHwieSI9PT1hKSYmKGQ9dGhpcy5fcGlja3VwUG9zaXRpb25P''@;'; put 'put ''blBhZ2UueC0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54OjApKSx0aGlzLl9ib3VuZGFyeVJlY3Qpe2NvbnN0e3g6Zix5OnZ9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/e3g6MCx5OjB9OnRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50''@;'; put 'put ''LE09dGhpcy5fYm91bmRhcnlSZWN0LHt3aWR0aDpELGhlaWdodDpafT10aGlzLl9nZXRQcmV2aWV3UmVjdCgpLHJlPU0udG9wK3YsY2U9TS5ib3R0b20tKFotdik7ZD1jMWUoZCxNLmxlZnQrZixNLnJpZ2h0LShELWYpKSxoPWMxZShoLHJlLGNlKX1yZXR1cm57eDpkLHk6aH19X3VwZGF0ZVBv''@;'; put 'put ''aW50ZXJEaXJlY3Rpb25EZWx0YShsKXtjb25zdHt4OmEseTpkfT1sLGg9dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhLGY9dGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlLHY9TWF0aC5hYnMoYS1mLngpLE09TWF0aC5hYnMoZC1mLnkpO3JldHVybiB2PnRoaXMu''@;'; put 'put ''X2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC54PWE+Zi54PzE6LTEsZi54PWEpLE0+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLnk9ZD5mLnk/MTotMSxmLnk9ZCksaH1fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9u''@;'; put 'put ''cygpe2lmKCF0aGlzLl9yb290RWxlbWVudHx8IXRoaXMuX2hhbmRsZXMpcmV0dXJuO2NvbnN0IGw9dGhpcy5faGFuZGxlcy5sZW5ndGg+MHx8IXRoaXMuaXNEcmFnZ2luZygpO2whPT10aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkJiYodGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5h''@;'; put 'put ''YmxlZD1sLEl5KHRoaXMuX3Jvb3RFbGVtZW50LGwpKX1fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMobCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLFJMKSxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50''@;'; put 'put ''ZXJEb3duLG8xZSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxSTCl9X2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obCxhKXtjb25zdCBkPUlMKGwsYSksaD10aGlzLl9yb290RWxlbWVudC5zdHlsZTtudWxsPT10aGlzLl9pbml0aWFs''@;'; put 'put ''VHJhbnNmb3JtJiYodGhpcy5faW5pdGlhbFRyYW5zZm9ybT1oLnRyYW5zZm9ybSYmIm5vbmUiIT1oLnRyYW5zZm9ybT9oLnRyYW5zZm9ybToiIiksaC50cmFuc2Zvcm09REwoZCx0aGlzLl9pbml0aWFsVHJhbnNmb3JtKX1fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD10aGlz''@;'; put 'put ''Ll9wcmV2aWV3VGVtcGxhdGU/LnRlbXBsYXRlP3ZvaWQgMDp0aGlzLl9pbml0aWFsVHJhbnNmb3JtLGg9SUwobCxhKTt0aGlzLl9wcmV2aWV3LnNldFRyYW5zZm9ybShETChoLGQpKX1fZ2V0RHJhZ0Rpc3RhbmNlKGwpe2NvbnN0IGE9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U7cmV0dXJu''@;'; put 'put ''IGE/e3g6bC54LWEueCx5OmwueS1hLnl9Ont4OjAseTowfX1fY2xlYW51cENhY2hlZERpbWVuc2lvbnMoKXt0aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dm9pZCAwLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6''@;'; put 'put ''ZSgpe2xldHt4OmwseTphfT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtO2lmKDA9PT1sJiYwPT09YXx8dGhpcy5pc0RyYWdnaW5nKCl8fCF0aGlzLl9ib3VuZGFyeUVsZW1lbnQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD10aGlzLl9i''@;'; put 'put ''b3VuZGFyeUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PWgud2lkdGgmJjA9PT1oLmhlaWdodHx8MD09PWQud2lkdGgmJjA9PT1kLmhlaWdodClyZXR1cm47Y29uc3QgZj1oLmxlZnQtZC5sZWZ0LHY9ZC5yaWdodC1oLnJpZ2h0LE09aC50b3AtZC50b3AsRD1kLmJvdHRv''@;'; put 'put ''bS1oLmJvdHRvbTtoLndpZHRoPmQud2lkdGg/KGY+MCYmKGwrPWYpLHY+MCYmKGwtPXYpKTpsPTAsaC5oZWlnaHQ+ZC5oZWlnaHQ/KE0+MCYmKGErPU0pLEQ+MCYmKGEtPUQpKTphPTAsKGwhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnh8fGEhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnkp''@;'; put 'put ''JiZ0aGlzLnNldEZyZWVEcmFnUG9zaXRpb24oe3k6YSx4Omx9KX1fZ2V0RHJhZ1N0YXJ0RGVsYXkobCl7Y29uc3QgYT10aGlzLmRyYWdTdGFydERlbGF5O3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOkV4KGwpP2EudG91Y2g6YT9hLm1vdXNlOjB9X3VwZGF0ZU9uU2Nyb2xsKGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTtpZihhKXtjb25zdCBkPXhMKGwpO3RoaXMuX2JvdW5kYXJ5UmVjdCYmZCE9PXRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmZC5jb250YWlucyh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpJiZ4eCh0aGlzLl9ib3VuZGFyeVJlY3Qs''@;'; put 'put ''YS50b3AsYS5sZWZ0KSx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54Kz1hLmxlZnQsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSs9YS50b3AsdGhpcy5fZHJvcENvbnRhaW5lcnx8KHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LT1hLmxlZnQsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkt''@;'; put 'put ''PWEudG9wLHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0odGhpcy5fYWN0aXZlVHJhbnNmb3JtLngsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkpKX19X2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQodGhp''@;'; put 'put ''cy5fZG9jdW1lbnQpPy5zY3JvbGxQb3NpdGlvbnx8dGhpcy5fcGFyZW50UG9zaXRpb25zLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX1fZ2V0U2hhZG93Um9vdCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9jYWNoZWRTaGFkb3dSb290JiYodGhpcy5fY2FjaGVkU2hhZG93Um9vdD1PMGUo''@;'; put 'put ''dGhpcy5fcm9vdEVsZW1lbnQpKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQobCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiO2lmKCJwYXJlbnQiPT09ZClyZXR1cm4gbDtpZigiZ2xvYmFsIj09PWQpe2NvbnN0IGg9''@;'; put 'put ''dGhpcy5fZG9jdW1lbnQ7cmV0dXJuIGF8fGguZnVsbHNjcmVlbkVsZW1lbnR8fGgud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGgubW96RnVsbFNjcmVlbkVsZW1lbnR8fGgubXNGdWxsc2NyZWVuRWxlbWVudHx8aC5ib2R5fXJldHVybiBFZChkKX1fZ2V0UHJldmlld1JlY3QoKXtyZXR1cm4o''@;'; put 'put ''IXRoaXMuX3ByZXZpZXdSZWN0fHwhdGhpcy5fcHJldmlld1JlY3Qud2lkdGgmJiF0aGlzLl9wcmV2aWV3UmVjdC5oZWlnaHQpJiYodGhpcy5fcHJldmlld1JlY3Q9dGhpcy5fcHJldmlldz90aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnRoaXMuX2luaXRpYWxEb21SZWN0''@;'; put 'put ''KSx0aGlzLl9wcmV2aWV3UmVjdH1fZ2V0VGFyZ2V0SGFuZGxlKGwpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQoYT0+bC50YXJnZXQmJihsLnRhcmdldD09PWF8fGEuY29udGFpbnMobC50YXJnZXQpKSl9fWZ1bmN0aW9uIGMxZShjLGwsYSl7cmV0dXJuIE1hdGgubWF4KGwsTWF0aC5taW4o''@;'; put 'put ''YSxjKSl9ZnVuY3Rpb24gRXgoYyl7cmV0dXJuInQiPT09Yy50eXBlWzBdfWZ1bmN0aW9uIHUxZShjKXtjLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gZDFlKGMsbCxhKXtjb25zdCBkPVR4KGwsYy5sZW5ndGgtMSksaD1UeChhLGMubGVuZ3RoLTEpO2lmKGQ9PT1oKXJldHVybjtjb25zdCBm''@;'; put 'put ''PWNbZF0sdj1oPGQ/LTE6MTtmb3IobGV0IE09ZDtNIT09aDtNKz12KWNbTV09Y1tNK3ZdO2NbaF09Zn1mdW5jdGlvbiBUeChjLGwpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGwsYykpfWNsYXNzIEJGZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9kcmFnRHJv''@;'; put 'put ''cFJlZ2lzdHJ5PWEsdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVybGFwczohMX19c3RhcnQobCl7dGhpcy53aXRoSXRlbXMobCl9c29ydChsLGEsZCxoKXtjb25zdCBmPXRo''@;'; put 'put ''aXMuX2l0ZW1Qb3NpdGlvbnMsdj10aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpO2lmKC0xPT09diYmZi5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25zdCBNPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sRD1mLmZpbmRJbmRleChydD0+cnQuZHJh''@;'; put 'put ''Zz09PWwpLFo9Zlt2XSxjZT1aLmNsaWVudFJlY3QsYmU9RD52PzE6LTEsRWU9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbRF0uY2xpZW50UmVjdCxjZSxiZSksQmU9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KEQsZixiZSkscWU9Zi5zbGljZSgpO3JldHVybiBkMWUoZixELHYpLGYuZm9yRWFj''@;'; put 'put ''aCgocnQscHQpPT57aWYocWVbcHRdPT09cnQpcmV0dXJuO2NvbnN0IGR0PXJ0LmRyYWc9PT1sLEp0PWR0P0VlOkJlLHZuPWR0P2wuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6cnQuZHJhZy5nZXRSb290RWxlbWVudCgpO3J0Lm9mZnNldCs9SnQsTT8odm4uc3R5bGUudHJhbnNmb3JtPURMKGB0''@;'; put 'put ''cmFuc2xhdGUzZCgke01hdGgucm91bmQocnQub2Zmc2V0KX1weCwgMCwgMClgLHJ0LmluaXRpYWxUcmFuc2Zvcm0pLHh4KHJ0LmNsaWVudFJlY3QsMCxKdCkpOih2bi5zdHlsZS50cmFuc2Zvcm09REwoYHRyYW5zbGF0ZTNkKDAsICR7TWF0aC5yb3VuZChydC5vZmZzZXQpfXB4LCAwKWAscnQu''@;'; put 'put ''aW5pdGlhbFRyYW5zZm9ybSkseHgocnQuY2xpZW50UmVjdCxKdCwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9U1koY2UsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1aLmRyYWcsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPU0/aC54OmgueSx7cHJldmlvdXNJbmRleDpE''@;'; put 'put ''LGN1cnJlbnRJbmRleDp2fX1lbnRlcihsLGEsZCxoKXtjb25zdCBmPW51bGw9PWh8fGg8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkKTpoLHY9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcyxNPXYuaW5kZXhPZihsKSxEPWwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50''@;'; put 'put ''KCk7bGV0IFo9dltmXTtpZihaPT09bCYmKFo9dltmKzFdKSwhWiYmKG51bGw9PWZ8fC0xPT09Znx8Zjx2Lmxlbmd0aC0xKSYmdGhpcy5fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQoYSxkKSYmKFo9dlswXSksTT4tMSYmdi5zcGxpY2UoTSwxKSxaJiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5p''@;'; put 'put ''c0RyYWdnaW5nKFopKXtjb25zdCByZT1aLmdldFJvb3RFbGVtZW50KCk7cmUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoRCxyZSksdi5zcGxpY2UoZiwwLGwpfWVsc2UgRWQodGhpcy5fZWxlbWVudCkuYXBwZW5kQ2hpbGQoRCksdi5wdXNoKGwpO0Quc3R5bGUudHJhbnNmb3JtPSIiLHRo''@;'; put 'put ''aXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwuc2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9zb3J0UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFn''@;'; put 'put ''Z2FibGVzLmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxlbWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUudHJhbnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9''@;'; put 'put ''W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1udWxsLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdn''@;'; put 'put ''YWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYicnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhpcy5faXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQuZHJhZz09''@;'; put 'put ''PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpkfSk9Pnt4eChkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhkKSYmZC5f''@;'; put 'put ''c29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX1fY2FjaGVJdGVtUG9zaXRpb25zKCl7Y29uc3QgbD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO3RoaXMuX2l0ZW1Qb3NpdGlvbnM9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5tYXAoYT0+e2NvbnN0IGQ9YS5nZXRWaXNpYmxl''@;'; put 'put ''RWxlbWVudCgpO3JldHVybntkcmFnOmEsb2Zmc2V0OjAsaW5pdGlhbFRyYW5zZm9ybTpkLnN0eWxlLnRyYW5zZm9ybXx8IiIsY2xpZW50UmVjdDpDWShkKX19KS5zb3J0KChhLGQpPT5sP2EuY2xpZW50UmVjdC5sZWZ0LWQuY2xpZW50UmVjdC5sZWZ0OmEuY2xpZW50UmVjdC50b3AtZC5jbGll''@;'; put 'put ''bnRSZWN0LnRvcCl9X2dldEl0ZW1PZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2xldCBmPWg/YS5sZWZ0LWwubGVmdDphLnRvcC1sLnRvcDtyZXR1cm4tMT09PWQmJihmKz1oP2Eud2lkdGgtbC53aWR0aDphLmhlaWdodC1sLmhlaWdodCks''@;'; put 'put ''Zn1fZ2V0U2libGluZ09mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sZj1hW2xdLmNsaWVudFJlY3Qsdj1hW2wrLTEqZF07bGV0IE09ZltoPyJ3aWR0aCI6ImhlaWdodCJdKmQ7aWYodil7Y29uc3QgRD1oPyJsZWZ0IjoidG9wIixaPWg/InJp''@;'; put 'put ''Z2h0IjoiYm90dG9tIjstMT09PWQ/TS09di5jbGllbnRSZWN0W0RdLWZbWl06TSs9ZltEXS12LmNsaWVudFJlY3RbWl19cmV0dXJuIE19X3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGwsYSl7aWYoIXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubGVuZ3RoKXJldHVybiExO2NvbnN0IGQ9dGhpcy5f''@;'; put 'put ''aXRlbVBvc2l0aW9ucyxoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247aWYoZFswXS5kcmFnIT09dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc1swXSl7Y29uc3Qgdj1kW2QubGVuZ3RoLTFdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bD49di5yaWdodDphPj12LmJvdHRvbX17Y29uc3Qgdj1k''@;'; put 'put ''WzBdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bDw9di5sZWZ0OmE8PXYudG9wfX1fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKXtjb25zdCBmPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sdj10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmRJbmRleCgoe2RyYWc6''@;'; put 'put ''TSxjbGllbnRSZWN0OkR9KT0+TSE9PWwmJigoIWh8fE0hPT10aGlzLl9wcmV2aW91c1N3YXAuZHJhZ3x8IXRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwc3x8KGY/aC54OmgueSkhPT10aGlzLl9wcmV2aW91c1N3YXAuZGVsdGEpJiYoZj9hPj1NYXRoLmZsb29yKEQubGVmdCkmJmE8TWF0aC5m''@;'; put 'put ''bG9vcihELnJpZ2h0KTpkPj1NYXRoLmZsb29yKEQudG9wKSYmZDxNYXRoLmZsb29yKEQuYm90dG9tKSkpKTtyZXR1cm4tMSE9PXYmJnRoaXMuX3NvcnRQcmVkaWNhdGUodixsKT92Oi0xfX12YXIgRDI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuVVA9MV09IlVQ''@;'; put 'put ''IixjW2MuRE9XTj0yXT0iRE9XTiIsY30oRDJ8fHt9KSxqMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjfShqMXx8e30pO2NsYXNzIGpGZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuX2Ry''@;'; put 'put ''YWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxTdGVwPTIsdGhpcy5lbnRlclByZWRpY2F0ZT0o''@;'; put 'put ''KT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IFduLHRoaXMuZW50ZXJlZD1uZXcgV24sdGhpcy5leGl0ZWQ9bmV3IFduLHRoaXMuZHJvcHBlZD1uZXcgV24sdGhpcy5zb3J0ZWQ9bmV3IFduLHRoaXMucmVjZWl2aW5nU3RhcnRlZD1uZXcgV24s''@;'; put 'put ''dGhpcy5yZWNlaXZpbmdTdG9wcGVkPW5ldyBXbix0aGlzLl9pc0RyYWdnaW5nPSExLHRoaXMuX2RyYWdnYWJsZXM9W10sdGhpcy5fc2libGluZ3M9W10sdGhpcy5fYWN0aXZlU2libGluZ3M9bmV3IFNldCx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl92''@;'; put 'put ''ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj1EMi5OT05FLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249ajEuTk9ORSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzPW5ldyBXbix0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGwsdGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3RoaXMu''@;'; put 'put ''X3N0b3BTY3JvbGxpbmcoKSxmdW5jdGlvbiBSRmUoYz0wLGw9Q0wpe3JldHVybiBjPDAmJihjPTApLFUwZShjLGMsbCl9KDAsajBlKS5waXBlKFYwKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntjb25zdCB2PXRoaXMuX3Njcm9sbE5vZGUsTT10aGlzLmF1dG9TY3Jv''@;'; put 'put ''bGxTdGVwO3RoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPT09RDIuVVA/di5zY3JvbGxCeSgwLC1NKTp0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PUQyLkRPV04mJnYuc2Nyb2xsQnkoMCxNKSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09ajEuTEVGVD92LnNj''@;'; put 'put ''cm9sbEJ5KC1NLDApOnRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1qMS5SSUdIVCYmdi5zY3JvbGxCeShNLDApfSl9LHRoaXMuZWxlbWVudD1FZChsKSx0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aFNjcm9sbGFibGVQYXJlbnRzKFt0aGlzLmVsZW1lbnRdKSxhLnJlZ2lzdGVy''@;'; put 'put ''RHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IFEwZShkKSx0aGlzLl9zb3J0U3RyYXRlZ3k9bmV3IEJGZSh0aGlzLmVsZW1lbnQsYSksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGljYXRlKCh2LE0pPT50aGlzLnNvcnRQcmVkaWNhdGUodixNLHRo''@;'; put 'put ''aXMpKX1kaXNwb3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21w''@;'; put 'put ''bGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5j''@;'; put 'put ''bGVhcigpLHRoaXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dp''@;'; put 'put ''bmdTdGFydGVkKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3ku''@;'; put 'put ''ZW50ZXIobCxhLGQsaCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlz''@;'; put 'put ''Ll9yZXNldCgpLHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxhLGQsaCxmLHYsTSxEPXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudEluZGV4OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHBy''@;'; put 'put ''ZXZpb3VzQ29udGFpbmVyOmgsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOnYsZHJvcFBvaW50Ok0sZXZlbnQ6RH0pfXdpdGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BD''@;'; put 'put ''b250YWluZXIodGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5nKCkpLmV2ZXJ5KGg9Pi0xPT09bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERp''@;'; put 'put ''cmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sLHRoaXN9Y29ubmVjdGVkVG8obCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lm9yaWVudGF0aW9uPWws''@;'; put 'put ''dGhpc313aXRoU2Nyb2xsYWJsZVBhcmVudHMobCl7Y29uc3QgYT1FZCh0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRoaXN9Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2Nyb2xsYWJsZUVsZW1lbnRzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0SXRlbUluZGV4KGwpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKX1pc1JlY2VpdmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5z''@;'; put 'put ''aXplPjB9X3NvcnRJdGVtKGwsYSxkLGgpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fZG9tUmVjdHx8IUowZSh0aGlzLl9kb21SZWN0LC4wNSxhLGQpKXJldHVybjtjb25zdCBmPXRoaXMuX3NvcnRTdHJhdGVneS5zb3J0KGwsYSxkLGgpO2YmJnRoaXMuc29ydGVkLm5leHQoe3By''@;'; put 'put ''ZXZpb3VzSW5kZXg6Zi5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmx9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShsLGEpe2lmKHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKXJldHVybjtsZXQgZCxoPUQyLk5PTkUsZj1q''@;'; put 'put ''MS5OT05FO2lmKHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgodixNKT0+e009PT10aGlzLl9kb2N1bWVudHx8IXYuY2xpZW50UmVjdHx8ZHx8SjBlKHYuY2xpZW50UmVjdCwuMDUsbCxhKSYmKFtoLGZdPWZ1bmN0aW9uIHpGZShjLGwsYSxkLGgpe2NvbnN0IGY9cDFl''@;'; put 'put ''KGwsaCksdj1nMWUobCxkKTtsZXQgTT1EMi5OT05FLEQ9ajEuTk9ORTtpZihmKXtjb25zdCBaPWMuc2Nyb2xsVG9wO2Y9PT1EMi5VUD9aPjAmJihNPUQyLlVQKTpjLnNjcm9sbEhlaWdodC1aPmMuY2xpZW50SGVpZ2h0JiYoTT1EMi5ET1dOKX1pZih2KXtjb25zdCBaPWMuc2Nyb2xsTGVmdDsi''@;'; put 'put ''cnRsIj09PWE/dj09PWoxLlJJR0hUP1o8MCYmKEQ9ajEuUklHSFQpOmMuc2Nyb2xsV2lkdGgrWj5jLmNsaWVudFdpZHRoJiYoRD1qMS5MRUZUKTp2PT09ajEuTEVGVD9aPjAmJihEPWoxLkxFRlQpOmMuc2Nyb2xsV2lkdGgtWj5jLmNsaWVudFdpZHRoJiYoRD1qMS5SSUdIVCl9cmV0dXJuW00s''@;'; put 'put ''RF19KE0sdi5jbGllbnRSZWN0LHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb24sbCxhKSwoaHx8ZikmJihkPU0pKX0pLCFoJiYhZil7Y29uc3R7d2lkdGg6dixoZWlnaHQ6TX09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxEPXt3aWR0aDp2LGhlaWdodDpNLHRvcDow''@;'; put 'put ''LHJpZ2h0OnYsYm90dG9tOk0sbGVmdDowfTtoPXAxZShELGEpLGY9ZzFlKEQsbCksZD13aW5kb3d9ZCYmKGghPT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbnx8ZiE9PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb258fGQhPT10aGlzLl9zY3JvbGxOb2RlKSYmKHRoaXMuX3Zl''@;'; put 'put ''cnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWgsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj1mLHRoaXMuX3Njcm9sbE5vZGU9ZCwoaHx8ZikmJmQ/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWwpOnRoaXMuX3N0b3BTY3JvbGxpbmco''@;'; put 'put ''KSl9X3N0b3BTY3JvbGxpbmcoKXt0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLm5leHQoKX1fZHJhZ2dpbmdTdGFydGVkKCl7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpLnN0eWxlO3RoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhpcy5faXNEcmFnZ2luZz0hMCx0aGlzLl9pbml0aWFsU2Nyb2xs''@;'; put 'put ''U25hcD1sLm1zU2Nyb2xsU25hcFR5cGV8fGwuc2Nyb2xsU25hcFR5cGV8fCIiLGwuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPSJub25lIix0aGlzLl9zb3J0U3RyYXRlZ3kuc3RhcnQodGhpcy5fZHJhZ2dhYmxlcyksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlz''@;'; put 'put ''Ll92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl9X2NhY2hlUGFyZW50UG9zaXRpb25zKCl7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZSh0aGlzLl9zY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudHMpLHRoaXMuX2RvbVJlY3Q9dGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQobCkuY2xpZW50UmVjdH1fcmVzZXQoKXt0aGlzLl9pc0RyYWdnaW5nPSExO2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KS5zdHlsZTtsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFw''@;'; put 'put ''VHlwZT10aGlzLl9pbml0aWFsU2Nyb2xsU25hcCx0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0b3BSZWNlaXZpbmcodGhpcykpLHRoaXMuX3NvcnRTdHJhdGVneS5yZXNldCgpLHRoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1''@;'; put 'put ''YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9pc092ZXJDb250YWluZXIobCxhKXtyZXR1cm4gbnVsbCE9dGhpcy5fZG9tUmVjdCYmU1kodGhpcy5fZG9tUmVjdCxsLGEpfV9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKGwsYSxkKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2libGluZ3MuZmluZChoPT5oLl9jYW5SZWNlaXZlKGwsYSxkKSl9X2NhblJlY2VpdmUobCxhLGQpe2lmKCF0aGlzLl9kb21SZWN0fHwhU1kodGhpcy5fZG9tUmVjdCxhLGQpfHwhdGhpcy5lbnRlclByZWRpY2F0ZShsLHRoaXMpKXJldHVybiExO2NvbnN0IGg9dGhpcy5fZ2V0U2hhZG93Um9v''@;'; put 'put ''dCgpLmVsZW1lbnRGcm9tUG9pbnQoYSxkKTtpZighaClyZXR1cm4hMTtjb25zdCBmPUVkKHRoaXMuZWxlbWVudCk7cmV0dXJuIGg9PT1mfHxmLmNvbnRhaW5zKGgpfV9zdGFydFJlY2VpdmluZyhsLGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlU2libGluZ3M7IWQuaGFzKGwpJiZhLmV2ZXJ5KGg9''@;'; put 'put ''PnRoaXMuZW50ZXJQcmVkaWNhdGUoaCx0aGlzKXx8dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGgpPi0xKSYmKGQuYWRkKGwpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQubmV4dCh7aW5pdGlh''@;'; put 'put ''dG9yOmwscmVjZWl2ZXI6dGhpcyxpdGVtczphfSkpfV9zdG9wUmVjZWl2aW5nKGwpe3RoaXMuX2FjdGl2ZVNpYmxpbmdzLmRlbGV0ZShsKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5uZXh0KHtpbml0aWF0b3I6''@;'; put 'put ''bCxyZWNlaXZlcjp0aGlzfSl9X2xpc3RlblRvU2Nyb2xsRXZlbnRzKCl7dGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShsPT57aWYodGhpcy5pc0RyYWdnaW5nKCkp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChsKTthJiZ0aGlzLl9zb3J0U3RyYXRlZ3kudXBkYXRlT25TY3JvbGwoYS50b3AsYS5sZWZ0KX1lbHNlIHRoaXMuaXNSZWNlaXZpbmcoKSYmdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKX0pfV9nZXRTaGFkb3dS''@;'; put 'put ''b290KCl7aWYoIXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Qpe2NvbnN0IGw9TzBlKEVkKHRoaXMuZWxlbWVudCkpO3RoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bHx8dGhpcy5fZG9jdW1lbnR9cmV0dXJuIHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpLmZpbHRlcihhPT5hLmlzRHJhZ2dpbmcoKSk7dGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdGFydFJlY2VpdmluZyh0aGlzLGwpKX19ZnVuY3Rpb24gcDFlKGMsbCl7Y29uc3R7dG9wOmEsYm90dG9t''@;'; put 'put ''OmQsaGVpZ2h0Omh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/RDIuVVA6bD49ZC1mJiZsPD1kK2Y/RDIuRE9XTjpEMi5OT05FfWZ1bmN0aW9uIGcxZShjLGwpe2NvbnN0e2xlZnQ6YSxyaWdodDpkLHdpZHRoOmh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/ajEu''@;'; put 'put ''TEVGVDpsPj1kLWYmJmw8PWQrZj9qMS5SSUdIVDpqMS5OT05FfWNvbnN0IExMPUF5KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxPTD1uZXcgU2V0O2xldCBVRmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WyJjZGstZHJhZy1yZXNldHMtY29udGFpbmVyIiwiIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbS0ldLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''fSxzdHlsZXM6WyJAbGF5ZXIgY2RrLXJlc2V0c3suY2RrLWRyYWctcHJldmlld3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2NvbG9yOmluaGVyaXR9fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfX1yZXR1cm4gY30pKCksWkZlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hcHBSZWY9ZmkocTQpLHRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3I9ZmkoaGMpLHRoaXMuX2Ryb3BJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9kcmFnSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fYWN0aXZlRHJhZ0lu''@;'; put 'put ''c3RhbmNlcz1bXSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZT1oPT5oLmlzRHJhZ2dpbmcoKSx0aGlzLnBvaW50ZXJNb3ZlPW5ldyBXbix0aGlzLnBvaW50ZXJVcD1uZXcgV24sdGhpcy5zY3JvbGw9bmV3IFduLHRoaXMuX3ByZXZlbnREZWZh''@;'; put 'put ''dWx0V2hpbGVEcmFnZ2luZz1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmaC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVE''@;'; put 'put ''cmFnSW5zdGFuY2VzLnNvbWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZoLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGgpKX0sdGhpcy5fZG9jdW1lbnQ9ZH1yZWdpc3RlckRyb3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoYSl8fHRoaXMu''@;'; put 'put ''X2Ryb3BJbnN0YW5jZXMuYWRkKGEpfXJlZ2lzdGVyRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5hZGQoYSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsTEwpfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BE''@;'; put 'put ''cmFnZ2luZyhhKSwwPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixMTCl9c3RhcnREcmFnZ2luZyhhLGQpe2lmKCEodGhpcy5fYWN0aXZlRHJh''@;'; put 'put ''Z0luc3RhbmNlcy5pbmRleE9mKGEpPi0xKSYmKHRoaXMuX2xvYWRSZXNldHMoKSx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnB1c2goYSksMT09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoKSl7Y29uc3QgaD1kLnR5cGUuc3RhcnRzV2l0aCgidG91Y2giKTt0aGlzLl9nbG9i''@;'; put 'put ''YWxMaXN0ZW5lcnMuc2V0KGg/InRvdWNoZW5kIjoibW91c2V1cCIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyVXAubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzY3JvbGwiLHtoYW5kbGVyOmY9PnRoaXMuc2Nyb2xsLm5leHQoZiksb3B0aW9uczohMH0pLnNldCgic2VsZWN0c3RhcnQiLHto''@;'; put 'put ''YW5kbGVyOnRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZyxvcHRpb25zOkxMfSksaHx8dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNldCgibW91c2Vtb3ZlIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJNb3ZlLm5leHQoZiksb3B0aW9uczpMTH0pLHRoaXMuX25nWm9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+e3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChmLHYpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2LGYuaGFuZGxlcixmLm9wdGlvbnMpfSl9KX19c3RvcERyYWdnaW5nKGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5p''@;'; put 'put ''bmRleE9mKGEpO2Q+LTEmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNwbGljZShkLDEpLDA9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSl9aXNEcmFnZ2luZyhhKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ0luc3Rh''@;'; put 'put ''bmNlcy5pbmRleE9mKGEpPi0xfXNjcm9sbGVkKGEpe2NvbnN0IGQ9W3RoaXMuc2Nyb2xsXTtyZXR1cm4gYSYmYSE9PXRoaXMuX2RvY3VtZW50JiZkLnB1c2gobmV3IFh0KGg9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9TT0+e3RoaXMuX2FjdGl2ZURyYWdJ''@;'; put 'put ''bnN0YW5jZXMubGVuZ3RoJiZoLm5leHQoTSl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdiwhMCksKCk9PnthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdiwhMCl9fSkpKSx5eCguLi5kKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFj''@;'; put 'put ''aChhPT50aGlzLnJlbW92ZURyYWdJdGVtKGEpKSx0aGlzLl9kcm9wSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcm9wQ29udGFpbmVyKGEpKSx0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpLHRoaXMucG9pbnRlck1vdmUuY29tcGxldGUoKSx0aGlzLnBvaW50ZXJVcC5jb21w''@;'; put 'put ''bGV0ZSgpfV9jbGVhckdsb2JhbExpc3RlbmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGEuaGFuZGxlcixhLm9wdGlvbnMpfSksdGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmNsZWFyKCl9X2xvYWRS''@;'; put 'put ''ZXNldHMoKXtpZighT0wuaGFzKHRoaXMuX2FwcFJlZikpe09MLmFkZCh0aGlzLl9hcHBSZWYpO2NvbnN0IGE9ZnVuY3Rpb24gZF9lKGMsbCl7Y29uc3QgYT1WbyhjKSxkPWwuZWxlbWVudEluamVjdG9yfHxIMygpO3JldHVybiBuZXcgazgoYSkuY3JlYXRlKGQsbC5wcm9qZWN0YWJsZU5vZGVz''@;'; put 'put ''LGwuaG9zdEVsZW1lbnQsbC5lbnZpcm9ubWVudEluamVjdG9yKX0oVUZlLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3J9KTt0aGlzLl9hcHBSZWYub25EZXN0cm95KCgpPT57T0wuZGVsZXRlKHRoaXMuX2FwcFJlZiksMD09PU9MLnNpemUmJmEuZGVzdHJv''@;'; put 'put ''eSgpfSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFdhKSx4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Nv''@;'; put 'put ''bnN0IFdGZT17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1fTtsZXQgUEw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlz''@;'; put 'put ''Ll9kcmFnRHJvcFJlZ2lzdHJ5PWZ9Y3JlYXRlRHJhZyhhLGQ9V0ZlKXtyZXR1cm4gbmV3IE5GZShhLGQsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSl9Y3JlYXRlRHJvcExpc3QoYSl7cmV0dXJuIG5ldyBqRmUo''@;'; put 'put ''YSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoV2EpLHhyKEFMKSx4cihaRmUpKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBBeD1uZXcgU3QoIkNES19EUkFHX1BBUkVOVCIpLG0xZT1uZXcgU3QoIkNka0RyYWdIYW5kbGUiKTtsZXQgdjFlPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fcGFyZW50RHJhZz1kLHRoaXMuX3N0YXRlQ2hh''@;'; put 'put ''bmdlcz1uZXcgV24sdGhpcy5fZGlzYWJsZWQ9ITEsZD8uX2FkZEhhbmRsZSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3BhcmVudERyYWc/Ll9yZW1vdmVIYW5kbGUodGhpcyksdGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEF4LDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnSGFuZGxlIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRyYWctaGFuZGxlIl0saW5wdXRzOntkaXNhYmxlZDpbTm4uSGFzRGVj''@;'; put 'put ''b3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0RyYWdIYW5kbGVEaXNhYmxlZCIsImRpc2FibGVkIixzMV19LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTptMWUsdXNlRXhpc3Rpbmc6Y31dKSxXbF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHhZPW5ldyBTdCgiQ0RLX0RSQUdf''@;'; put 'put ''Q09ORklHIiksRVk9bmV3IFN0KCJDZGtEcm9wTGlzdCIpO2xldCBUWT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9kcmFnSW5zdGFuY2VzPVtdfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIuZGlz''@;'; put 'put ''YWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWEsdGhpcy5fZHJhZ1JlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZH1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2UsYmUpe3RoaXMuZWxlbWVudD1hLHRoaXMuZHJvcENvbnRhaW5lcj1kLHRoaXMuX25nWm9uZT1m''@;'; put 'put ''LHRoaXMuX3ZpZXdDb250YWluZXJSZWY9dix0aGlzLl9kaXI9RCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yZSx0aGlzLl9zZWxmSGFuZGxlPWNlLHRoaXMuX3BhcmVudERyYWc9YmUsdGhpcy5fZGVzdHJveWVkPW5ldyBXbix0aGlzLl9oYW5kbGVzPW5ldyBlaShbXSksdGhpcy5zdGFydGVk''@;'; put 'put ''PW5ldyBLcix0aGlzLnJlbGVhc2VkPW5ldyBLcix0aGlzLmVuZGVkPW5ldyBLcix0aGlzLmVudGVyZWQ9bmV3IEtyLHRoaXMuZXhpdGVkPW5ldyBLcix0aGlzLmRyb3BwZWQ9bmV3IEtyLHRoaXMubW92ZWQ9bmV3IFh0KEVlPT57Y29uc3QgQmU9dGhpcy5fZHJhZ1JlZi5tb3ZlZC5waXBlKExy''@;'; put 'put ''KHFlPT4oe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpxZS5wb2ludGVyUG9zaXRpb24sZXZlbnQ6cWUuZXZlbnQsZGVsdGE6cWUuZGVsdGEsZGlzdGFuY2U6cWUuZGlzdGFuY2V9KSkpLnN1YnNjcmliZShFZSk7cmV0dXJuKCk9PntCZS51bnN1YnNjcmliZSgpfX0pLHRoaXMuX2RyYWdS''@;'; put 'put ''ZWY9Wi5jcmVhdGVEcmFnKGEse2RyYWdTdGFydFRocmVzaG9sZDpNJiZudWxsIT1NLmRyYWdTdGFydFRocmVzaG9sZD9NLmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6TSYmbnVsbCE9TS5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xk''@;'; put 'put ''P00ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1LHpJbmRleDpNPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyxjLl9kcmFnSW5zdGFuY2VzLnB1c2godGhpcyksTSYmdGhpcy5fYXNzaWduRGVmYXVsdHMoTSksZCYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9wQ29u''@;'; put 'put ''dGFpbmVyKGQuX2Ryb3BMaXN0UmVmKSxkLmFkZEl0ZW0odGhpcykpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVy''@;'; put 'put ''RWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZy''@;'; put 'put ''ZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFlmKDEpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1''@;'; put 'put ''YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhpcy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfSl9KX1uZ09uQ2hhbmdlcyhh''@;'; put 'put ''KXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3RvcixoPWEuZnJlZURyYWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSxoJiYhaC5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFn''@;'; put 'put ''UG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1uZ09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyk7Y29uc3QgYT1jLl9kcmFnSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJhZ0luc3RhbmNlcy5z''@;'; put 'put ''cGxpY2UoYSwxKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9oYW5kbGVzLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV9hZGRIYW5kbGUoYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCk7ZC5wdXNoKGEpLHRoaXMuX2hhbmRsZXMubmV4dChkKX1fcmVtb3ZlSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpLGg9ZC5pbmRleE9mKGEpO2g+LTEmJihkLnNwbGljZShoLDEpLHRoaXMuX2hhbmRsZXMubmV4''@;'; put 'put ''dChkKSl9X3NldFByZXZpZXdUZW1wbGF0ZShhKXt0aGlzLl9wcmV2aWV3VGVtcGxhdGU9YX1fcmVzZXRQcmV2aWV3VGVtcGxhdGUoYSl7YT09PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSYmKHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1udWxsKX1fc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXt0aGlz''@;'; put 'put ''Ll9wbGFjZWhvbGRlclRlbXBsYXRlPWF9X3Jlc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXthPT09dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSYmKHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bnVsbCl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZl''@;'; put 'put ''RWxlbWVudDtsZXQgZD1hO3RoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmKGQ9dm9pZCAwIT09YS5jbG9zZXN0P2EuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOmEucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVm''@;'; put 'put ''LndpdGhSb290RWxlbWVudChkfHxhKX1fZ2V0Qm91bmRhcnlFbGVtZW50KCl7Y29uc3QgYT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdChhKTpFZChhKTpudWxsfV9zeW5jSW5wdXRzKGEp''@;'; put 'put ''e2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZighYS5pc0RyYWdnaW5nKCkpe2NvbnN0IGQ9dGhpcy5fZGlyLGg9dGhpcy5kcmFnU3RhcnREZWxheSxmPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVS''@;'; put 'put ''ZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLHY9dGhpcy5fcHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlz''@;'; put 'put ''Ll9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhpcy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGw7YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLmRyYWdT''@;'; put 'put ''dGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9oOnU3KGgpLGEuY29uc3RyYWluUG9zaXRpb249dGhpcy5jb25zdHJhaW5Qb3NpdGlvbixhLnByZXZpZXdDbGFzcz10aGlzLnByZXZpZXdDbGFzcyxhLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5fZ2V0Qm91bmRhcnlFbGVtZW50KCkp''@;'; put 'put ''LndpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGYpLndpdGhQcmV2aWV3VGVtcGxhdGUodikud2l0aFByZXZpZXdDb250YWluZXIodGhpcy5wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIiksZCYmYS53aXRoRGlyZWN0aW9uKGQudmFsdWUpfX0pLGEuYmVmb3JlU3RhcnRlZC5waXBlKFlmKDEpKS5z''@;'; put 'put ''dWJzY3JpYmUoKCk9PntpZih0aGlzLl9wYXJlbnREcmFnKXJldHVybiB2b2lkIGEud2l0aFBhcmVudCh0aGlzLl9wYXJlbnREcmFnLl9kcmFnUmVmKTtsZXQgZD10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7ZDspe2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5z''@;'; put 'put ''KCJjZGstZHJhZyIpKXthLndpdGhQYXJlbnQoYy5fZHJhZ0luc3RhbmNlcy5maW5kKGg9PmguZWxlbWVudC5uYXRpdmVFbGVtZW50PT09ZCk/Ll9kcmFnUmVmfHxudWxsKTticmVha31kPWQucGFyZW50RWxlbWVudH19KX1faGFuZGxlRXZlbnRzKGEpe2Euc3RhcnRlZC5zdWJzY3JpYmUoZD0+''@;'; put 'put ''e3RoaXMuc3RhcnRlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnJlbGVhc2VkLnN1YnNjcmliZShkPT57dGhpcy5yZWxlYXNlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSl9KSxh''@;'; put 'put ''LmVuZGVkLnN1YnNjcmliZShkPT57dGhpcy5lbmRlZC5lbWl0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2Ny''@;'; put 'put ''aWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxp''@;'; put 'put ''dGVtOnRoaXN9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5l''@;'; put 'put ''cjpkLmNvbnRhaW5lci5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGl0ZW06dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSl9KX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9j''@;'; put 'put ''a0F4aXM6ZCxkcmFnU3RhcnREZWxheTpoLGNvbnN0cmFpblBvc2l0aW9uOmYscHJldmlld0NsYXNzOnYsYm91bmRhcnlFbGVtZW50Ok0sZHJhZ2dpbmdEaXNhYmxlZDpELHJvb3RFbGVtZW50U2VsZWN0b3I6WixwcmV2aWV3Q29udGFpbmVyOnJlfT1hO3RoaXMuZGlzYWJsZWQ9RD8/ITEsdGhp''@;'; put 'put ''cy5kcmFnU3RhcnREZWxheT1ofHwwLGQmJih0aGlzLmxvY2tBeGlzPWQpLGYmJih0aGlzLmNvbnN0cmFpblBvc2l0aW9uPWYpLHYmJih0aGlzLnByZXZpZXdDbGFzcz12KSxNJiYodGhpcy5ib3VuZGFyeUVsZW1lbnQ9TSksWiYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1aKSxyZSYmKHRo''@;'; put 'put ''aXMucHJldmlld0NvbnRhaW5lcj1yZSl9X3NldHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhpcy5faGFuZGxlcy5waXBlKFl1KGE9Pntjb25zdCBkPWEubWFwKGg9PmguZWxlbWVudCk7dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiZkLnB1c2godGhpcy5lbGVtZW50''@;'; put 'put ''KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVzKGQpfSksVjEoYT0+eXgoLi4uYS5tYXAoZD0+ZC5fc3RhdGVDaGFuZ2VzLnBpcGUoeDIoZCkpKSkpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShhPT57Y29uc3QgZD10aGlzLl9kcmFnUmVmLGg9YS5lbGVtZW50Lm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQ7YS5kaXNhYmxlZD9kLmRpc2FibGVIYW5kbGUoaCk6ZC5lbmFibGVIYW5kbGUoaCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRVksMTIpLEdlKHZzKSxHZShXYSksR2UoRG8pLEdlKHhZLDgpLEdlKHBtLDgpLEdlKFBM''@;'; put 'put ''KSxHZShFcyksR2UobTFlLDEwKSxHZShBeCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRy''@;'; put 'put ''KCJjZGstZHJhZy1kaXNhYmxlZCIsaC5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixoLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7ZGF0YTpbTm4uTm9uZSwiY2RrRHJhZ0RhdGEiLCJkYXRhIl0sbG9ja0F4aXM6W05uLk5vbmUsImNka0RyYWdMb2NrQXhpcyIsImxvY2tB''@;'; put 'put ''eGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbTm4uTm9uZSwiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbTm4uTm9uZSwiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91bmRhcnlFbGVtZW50Il0sZHJhZ1N0YXJ0RGVsYXk6W05uLk5vbmUs''@;'; put 'put ''ImNka0RyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOltObi5Ob25lLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9zaXRpb24iXSxkaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0RyYWdEaXNhYmxl''@;'; put 'put ''ZCIsImRpc2FibGVkIixzMV0sY29uc3RyYWluUG9zaXRpb246W05uLk5vbmUsImNka0RyYWdDb25zdHJhaW5Qb3NpdGlvbiIsImNvbnN0cmFpblBvc2l0aW9uIl0scHJldmlld0NsYXNzOltObi5Ob25lLCJjZGtEcmFnUHJldmlld0NsYXNzIiwicHJldmlld0NsYXNzIl0scHJldmlld0NvbnRh''@;'; put 'put ''aW5lcjpbTm4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDb250YWluZXIiLCJwcmV2aWV3Q29udGFpbmVyIl19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0RyYWdTdGFydGVkIixyZWxlYXNlZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRlZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJl''@;'; put 'put ''ZCIsZXhpdGVkOiJjZGtEcmFnRXhpdGVkIixkcm9wcGVkOiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsiY2RrRHJhZyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpBeCx1c2VFeGlzdGluZzpjfV0pLFdsLHdsXX0pfX1yZXR1''@;'; put 'put ''cm4gY30pKCk7Y29uc3QgQVk9bmV3IFN0KCJDZGtEcm9wTGlzdEdyb3VwIik7bGV0IGIxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbXM9bmV3IFNldCx0aGlzLmRpc2FibGVkPSExfW5nT25EZXN0cm95KCl7dGhpcy5faXRlbXMuY2xlYXIoKX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0R3JvdXAiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ry''@;'; put 'put ''b3BMaXN0R3JvdXBEaXNhYmxlZCIsImRpc2FibGVkIixzMV19LGV4cG9ydEFzOlsiY2RrRHJvcExpc3RHcm91cCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpBWSx1c2VFeGlzdGluZzpjfV0pLFdsXX0pfX1yZXR1cm4gY30pKCksR0ZlPTAseTFlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7c3RhdGlje3RoaXMuX2Ryb3BMaXN0cz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kcm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD1hfWNv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWgsdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1mLHRoaXMuX2Rpcj12LHRoaXMuX2dyb3VwPU0sdGhpcy5fZGVzdHJveWVkPW5ldyBXbix0aGlzLmNvbm5lY3RlZFRvPVtdLHRoaXMu''@;'; put 'put ''aWQ9ImNkay1kcm9wLWxpc3QtIitHRmUrKyx0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuZHJvcHBlZD1uZXcgS3IsdGhpcy5lbnRlcmVkPW5ldyBLcix0aGlzLmV4aXRlZD1uZXcgS3IsdGhpcy5zb3J0ZWQ9bmV3IEtyLHRoaXMuX3Vu''@;'; put 'put ''c29ydGVkSXRlbXM9bmV3IFNldCx0aGlzLl9kcm9wTGlzdFJlZj1kLmNyZWF0ZURyb3BMaXN0KGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxEJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhEKSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclByZWRpY2F0ZT0oWixyZSk9PnRoaXMuZW50ZXJQ''@;'; put 'put ''cmVkaWNhdGUoWi5kYXRhLHJlLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KFoscmUsY2UpPT50aGlzLnNvcnRQcmVkaWNhdGUoWixyZS5kYXRhLGNlLmRhdGEpLHRoaXMuX3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKHRoaXMuX2Ryb3BMaXN0UmVmKSx0aGlzLl9o''@;'; put 'put ''YW5kbGVFdmVudHModGhpcy5fZHJvcExpc3RSZWYpLGMuX2Ryb3BMaXN0cy5wdXNoKHRoaXMpLE0mJk0uX2l0ZW1zLmFkZCh0aGlzKX1hZGRJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuYWRkKGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0''@;'; put 'put ''aFJlZigpfXJlbW92ZUl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5kZWxldGUoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9Z2V0U29ydGVkSXRlbXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5z''@;'; put 'put ''b3J0KChhLGQpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9Yy5fZHJv''@;'; put 'put ''cExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZGVsZXRlKHRoaXMpLHRoaXMuX3Vuc29ydGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJv''@;'; put 'put ''eWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoeDIodGhpcy5fZGlyLnZhbHVlKSxWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+YS53aXRoRGly''@;'; put 'put ''ZWN0aW9uKGQpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBpRmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/YzpbY119KHRoaXMuY29ubmVjdGVkVG8pLm1hcChoPT4ic3RyaW5nIj09dHlwZW9mIGg/Yy5fZHJvcExpc3RzLmZpbmQodj0+di5p''@;'; put 'put ''ZD09PWgpOmgpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9yRWFjaChoPT57LTE9PT1kLmluZGV4T2YoaCkmJmQucHVzaChoKX0pLCF0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkKXtjb25zdCBoPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JT''@;'; put 'put ''Y3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGY9PmYuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhTY3JvbGxhYmxlUGFyZW50cyhoKSx0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkPSEwfWEuZGlzYWJsZWQ9dGhpcy5k''@;'; put 'put ''aXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zb3J0aW5nRGlzYWJsZWQ9dGhpcy5zb3J0aW5nRGlzYWJsZWQsYS5hdXRvU2Nyb2xsRGlzYWJsZWQ9dGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQsYS5hdXRvU2Nyb2xsU3RlcD11Nyh0aGlzLmF1dG9TY3JvbGxTdGVwLDIpLGEuY29u''@;'; put 'put ''bmVjdGVkVG8oZC5maWx0ZXIoaD0+aCYmaCE9PXRoaXMpLm1hcChoPT5oLl9kcm9wTGlzdFJlZikpLndpdGhPcmllbnRhdGlvbih0aGlzLm9yaWVudGF0aW9uKX0pfV9oYW5kbGVFdmVudHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNJdGVtc1dpdGhSZWYo''@;'; put 'put ''KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2Ny''@;'; put 'put ''aWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnNvcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91''@;'; put 'put ''c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVu''@;'; put 'put ''dEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOmQuaXRlbS5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJv''@;'; put 'put ''cFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHl4KGEucmVjZWl2aW5nU3RhcnRlZCxhLnJlY2VpdmluZ1N0b3BwZWQpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNo''@;'; put 'put ''ZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdnaW5nRGlzYWJsZWQ6aCxzb3J0aW5nRGlzYWJsZWQ6ZixsaXN0QXV0b1Njcm9sbERpc2FibGVkOnYsbGlzdE9yaWVudGF0aW9uOk19PWE7dGhpcy5kaXNhYmxlZD1oPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxl''@;'; put 'put ''ZD1mPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD12Pz8hMSx0aGlzLm9yaWVudGF0aW9uPU18fCJ2ZXJ0aWNhbCIsZCYmKHRoaXMubG9ja0F4aXM9ZCl9X3N5bmNJdGVtc1dpdGhSZWYoKXt0aGlzLl9kcm9wTGlzdFJlZi53aXRoSXRlbXModGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChh''@;'; put 'put ''PT5hLl9kcmFnUmVmKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKFBMKSxHZShFcyksR2Uoa3kpLEdlKHBtLDgpLEdlKEFZLDEyKSxHZSh4WSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyIiLCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmKGhyKCJpZCIsaC5pZCksVHIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGguZGlz''@;'; put 'put ''YWJsZWQpKCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixoLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsaC5fZHJvcExpc3RSZWYuaXNSZWNlaXZpbmcoKSkpfSxpbnB1dHM6e2Nvbm5lY3RlZFRvOltObi5Ob25lLCJjZGtEcm9wTGlzdENvbm5l''@;'; put 'put ''Y3RlZFRvIiwiY29ubmVjdGVkVG8iXSxkYXRhOltObi5Ob25lLCJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246W05uLk5vbmUsImNka0Ryb3BMaXN0T3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiJdLGlkOiJpZCIsbG9ja0F4aXM6W05uLk5vbmUsImNka0Ryb3BMaXN0TG9j''@;'; put 'put ''a0F4aXMiLCJsb2NrQXhpcyJdLGRpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIixzMV0sc29ydGluZ0Rpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RTb3J0aW5nRGlz''@;'; put 'put ''YWJsZWQiLCJzb3J0aW5nRGlzYWJsZWQiLHMxXSxlbnRlclByZWRpY2F0ZTpbTm4uTm9uZSwiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29ydFByZWRpY2F0ZTpbTm4uTm9uZSwiY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0ZSJd''@;'; put 'put ''LGF1dG9TY3JvbGxEaXNhYmxlZDpbTm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0QXV0b1Njcm9sbERpc2FibGVkIiwiYXV0b1Njcm9sbERpc2FibGVkIixzMV0sYXV0b1Njcm9sbFN0ZXA6W05uLk5vbmUsImNka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXAiLCJhdXRv''@;'; put 'put ''U2Nyb2xsU3RlcCJdfSxvdXRwdXRzOntkcm9wcGVkOiJjZGtEcm9wTGlzdERyb3BwZWQiLGVudGVyZWQ6ImNka0Ryb3BMaXN0RW50ZXJlZCIsZXhpdGVkOiJjZGtEcm9wTGlzdEV4aXRlZCIsc29ydGVkOiJjZGtEcm9wTGlzdFNvcnRlZCJ9LGV4cG9ydEFzOlsiY2RrRHJvcExpc3QiXSxzdGFu''@;'; put 'put ''ZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QVksdXNlVmFsdWU6dm9pZCAwfSx7cHJvdmlkZTpFWSx1c2VFeGlzdGluZzpjfV0pLFdsXX0pfX1yZXR1cm4gY30pKCksXzFlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W1BMXSxpbXBvcnRzOltJRmVdfSl9fXJldHVybiBjfSkoKTtjb25zdCB5bz1bIioiXSxYRmU9W1tbImNsci1hY2NvcmRpb24tdGl0bGUiXSxbImNsci1z''@;'; put 'put ''dGVwLXRpdGxlIl1dLFtbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9uIl1dLCIqIl0sSkZlPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1kZXNjcmlwdGlv''@;'; put 'put ''biIsIioiXTtmdW5jdGlvbiBRRmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkpLEh0KCJAdG9nZ2xlLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGgp''@;'; put 'put ''KX0pLGRlKDEsImRpdiIsMTApLFlyKDIsMiksaGUoKSgpfTImYyYmeGUoIkB0b2dnbGUiLHZvaWQgMCl9ZnVuY3Rpb24gZUhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2IiwyKSgyLCJkaXYiLDMpKDMsImJ1dHRvbiIsNCwwKSxRcyg1LCJhc3luYyIpLEh0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50b2dnbGVQYW5lbCgpKX0pLGRlKDYsInNwYW4iLDUpLEd0KDcsImNkcy1pY29uIiw2KSxoZSgpLFlyKDgpLFlyKDksMSksaGUoKSgpLGRlKDEwLCJkaXYiLDcpLG10KDExLFFGZSwzLDEsImRpdiIsOCksaGUoKSgpLHVpKCl9''@;'; put 'put ''aWYoMiZjKXtsZXQgYTtjb25zdCBkPWwuJGltcGxpY2l0LGg9TGUoKTtmZSgpLHhlKCJuZ0NsYXNzIixoLmdldFBhbmVsU3RhdGVDbGFzc2VzKGQpKSxmZSgpLGhyKCJyb2xlIixoLmhlYWRpbmdFbmFibGVkfHxoLmV4cGxpY2l0SGVhZGluZ0xldmVsPyJoZWFkaW5nIjpudWxsKSgiYXJpYS1s''@;'; put 'put ''ZXZlbCIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD9oLmhlYWRpbmdMZXZlbDpudWxsKSxmZSgpLFRyKCJjbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24iLChudWxsPT0oYT1EYyg1LDE0LGguYWNjb3JkaW9uRGVzY3JpcHRpb24uY2hhbmdlcykp''@;'; put 'put ''P251bGw6YS5sZW5ndGgpfHxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmxlbmd0aCkseGUoImlkIixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksaHIoImFyaWEtY29udHJvbHMiLCFkLmRpc2FibGVkJiZkLm9wZW4/aC5nZXRBY2Nv''@;'; put 'put ''cmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKTpudWxsKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuKSxmZSg3KSx4ZSgiQHNraXBJbml0aWFsUmVuZGVyIix2b2lkIDApKCJpZCIsaC5nZXRBY2NvcmRpb25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKSksaHIoImFyaWEtaGlkZGVuIiwhZC5vcGVu''@;'; put 'put ''KSgiYXJpYS1sYWJlbGxlZGJ5IixoLmdldEFjY29yZGlvbkhlYWRlcklkKGQudGVtcGxhdGVJZCkpLGZlKCkseGUoIm5nSWYiLGQub3Blbil9fWNvbnN0IENIZT1bImNsckxvYWRpbmciLCIiXTtmdW5jdGlvbiBTSGUoYyxsKXsxJmMmJihjaSgwKSxHdCgxLCJzcGFuIiwzKSx1aSgpKSwyJmMm''@;'; put 'put ''JihmZSgpLHhlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gTUhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwic3BhbiIsNCksSHQoIkB2YWxpZGF0ZWQuZG9uZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGgubG9hZGluZ1N0YXRl''@;'; put 'put ''Q2hhbmdlKGguYnV0dG9uU3RhdGUuREVGQVVMVCkpfSksaGUoKSx1aSgpfTImYyYmKGZlKCkseGUoIkB2YWxpZGF0ZWQiLHZvaWQgMCkpfWZ1bmN0aW9uIHhIZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDUpLFlyKDEpLGhlKCkpLDImYyYmeGUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1''@;'; put 'put ''bmN0aW9uIEVIZShjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImJ1dHRvbiIsMSksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxocigiYXJpYS1sYWJlbCIsYS5zaWducG9zdFRyaWdnZXJBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LnNpZ25wb3N0VG9nZ2xlKSxmZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuaW5mbyl9fWNvbnN0IFRIZT1bW1siY2xyLXNpZ25wb3N0LXRpdGxlIl1dLCIqIl0sQUhlPVsiY2xyLXNpZ25wb3N0LXRpdGxlIiwiKiJdLGtIZT1bW1siIiwiY2xyQ2hlY2tib3giLCIiXSxbIiIs''@;'; put 'put ''ImNsclRvZ2dsZSIsIiJdXSxbWyJsYWJlbCJdXV0sREhlPVsiW2NsckNoZWNrYm94XSxbY2xyVG9nZ2xlXSIsImxhYmVsIl07ZnVuY3Rpb24gSUhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNvbnN0IFJIZT1bW1sibGFiZWwiXV0sW1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10''@;'; put 'put ''b2dnbGUtd3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sTEhlPVsibGFiZWwiLCJjbHItY2hlY2tib3gtd3JhcHBlcixjbHItdG9nZ2xlLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxw''@;'; put 'put ''ZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBPSGUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gUEhlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxZcigxLDIpLGhlKCkpfWZ1bmN0aW9uIEZIZShjLGwpezEmYyYmR3QoMCwi''@;'; put 'put ''Y2RzLWljb24iLDYpfWZ1bmN0aW9uIEhIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIE5IZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBWSGUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1''@;'; put 'put ''bmN0aW9uIEJIZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksbXQoMSxGSGUsMSwwLCJjZHMtaWNvbiIsNCkoMixISGUsMSwwLCJjZHMtaWNvbiIsNSkoMyxOSGUsMSwwLCJuZy1jb250ZW50IiwwKSg0LFZIZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgp''@;'; put 'put ''O2ZlKCkseGUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IGpIZT1bImNscktleUZvY3VzIiwiIl0sWUhlPVtbWyJsYWJlbCJdXSxb''@;'; put 'put ''WyIiLCJjbHJJbnB1dFByZWZpeCIsIiJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyIiLCJjbHJJbnB1dFN1ZmZpeCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sR0hlPVsibGFiZWwiLCJb''@;'; put 'put ''Y2xySW5wdXRQcmVmaXhdIiwiW2NscklucHV0XSIsIltjbHJJbnB1dFN1ZmZpeF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiAkSGUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gS0hlKGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gcUhlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gWEhlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSkhlKGMsbCl7MSZjJiZZcigwLDUsWyIqbmdJZiIsInNo''@;'; put 'put ''b3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFFIZShjLGwpezEmYyYmWXIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gbE5lKGMsbCl7MSZjJiZZcigwKX1jb25zdCBjTmU9WyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIl07ZnVuY3Rpb24gdU5lKGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''c2VjdGlvbiIsMSksWXIoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7VHIoImFjdGl2ZSIsYS5hY3RpdmUpLHhlKCJpZCIsYS50YWJDb250ZW50SWQpKCJoaWRkZW4iLCFhLmFjdGl2ZSksaHIoImFyaWEtbGFiZWxsZWRieSIsYS5hcmlhTGFiZWxsZWRCeSkoImFyaWEtaGlkZGVuIiwhYS5h''@;'; put 'put ''Y3RpdmUpfX1jb25zdCBkTmU9WyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciJdLGhOZT1bW1siY2xyLXRhYnMtYWN0aW9ucyJdXV0sZk5lPVsiY2xyLXRhYnMtYWN0aW9ucyJdO2Z1bmN0aW9uIHBOZShjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImxpIiw1KSxGbCgyLDYpLGhlKCksdWkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX19ZnVuY3Rpb24gZ05lKGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxwTmUsMywxLCJuZy1jb250YWluZXIiLDQpLHVpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIG1OZShjLGwpezEmYyYmRmwoMCw2KSwyJmMmJnhlKCJuZ1RlbXBsYXRlT3V0bGV0IixMZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNv''@;'; put 'put ''bnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rpb24gdk5lKGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxtTmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgzKTtmZSgpLHhlKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiZhLmluT3Zl''@;'; put 'put ''cmZsb3cpfX1mdW5jdGlvbiBiTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDEyKSxIdCgia2V5ZG93bi5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNsb3NlT25Fc2NhcGVLZXkoKSl9LDAsJDMpKCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oaCl7d3QoYSksTGUoKTtjb25zdCBmPWhhKDQpO3JldHVybiBDdChMZSgpLmNsb3NlT25PdXRzaWRlQ2xpY2soaCxmKSl9LCExLCQzKSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5jbG9zZU9uRm9jdXNPdXQoaCkpfSksbXQoMSx2''@;'; put 'put ''TmUsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nRm9yT2YiLGEudGFiTGlua0RpcmVjdGl2ZXMpfX1mdW5jdGlvbiB5TmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDcpKDIsImxpIiw4KSgzLCJi''@;'; put 'put ''dXR0b24iLDksMSksSHQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5fbW91c2Vkb3duPSEwKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vcGVuT3ZlcmZsb3dPbkZvY3VzKCkpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChMZSgpLnRvZ2dsZU92ZXJmbG93T25DbGljaygpKX0pLEd0KDUsImNkcy1pY29uIiwxMCksaGUoKSgpLG10KDYsYk5lLDIsMSwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMSksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksVHIoIm9wZW4iLGEudG9n''@;'; put 'put ''Z2xlU2VydmljZS5vcGVuKSxmZSgyKSxUcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksaHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKDIpLGhyKCJzdGF0dXMiLGEudG9nZ2xlU2VydmljZS5vcGVuPyJpbmZvIjpudWxsKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUpLGZlKCkseGUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gX05lKGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxHdCgxLCJjZHMtaWNvbiIsNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtUcigib24tY29sbGFwc2UiLGEu''@;'; put 'put ''Y29sbGFwc2VkKSxocigiYXJpYS1jb250cm9scyIsYS5jb250ZW50SWQpKCJhcmlhLWV4cGFuZGVkIixhLmFyaWFFeHBhbmRlZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKSxmZSgpLGhyKCJkaXJlY3Rpb24iLGEu''@;'; put 'put ''Y29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKX19ZnVuY3Rpb24gd05lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY29sbGFwc2VkPSExKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxl''@;'; put 'put ''KCk7aHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1sYWJlbCIsYS50b2dnbGVMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUpfX1jb25zdCBNTmU9WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXSx4TmU9W1tbIiIsImNsclZlcnRpY2FsTmF2''@;'; put 'put ''SWNvbiIsIiJdXSwiKiJdLEVOZT1bIltjbHJWZXJ0aWNhbE5hdkljb25dIiwiKiJdO2Z1bmN0aW9uIFROZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSgxLCJzcGFuIiksT2UoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxocigiYXJpYS1sYWJlbCIsYS5kYXkp''@;'; put 'put ''LGZlKCksQ3IoYS5uYXJyb3cpfX1mdW5jdGlvbiBBTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJ0ZCIsNykoMSwiY2xyLWRheSIsOCksSHQoInNlbGVjdERheSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnNldFNlbGVjdGVkRGF5KGgpKX0pLGhlKCkoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgiY2xyRGF5VmlldyIsYSl9fWZ1bmN0aW9uIGtOZShjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw1KSxtdCgxLEFOZSwyLDEsInRkIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdGb3JPZiIsYSl9''@;'; put 'put ''fWZ1bmN0aW9uIEROZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChMZSgpLmNoYW5nZU1vbnRoKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9''@;'; put 'put ''d3QoYSkuaW5kZXg7cmV0dXJuIEN0KExlKCkub25Ib3ZlcihoKSl9KSxPZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgpO1RyKCJpcy1zZWxlY3RlZCIsaC5pc1NlbGVjdGVkKGQpKSgiaXMtc3RhcnQtcmFuZ2UiLGguZ2V0SXNSYW5nZVN0YXJ0''@;'; put 'put ''TW9udGgoZCkpKCJpcy1lbmQtcmFuZ2UiLGguZ2V0SXNSYW5nZUVuZE1vbnRoKGQpKSgiaW4tcmFuZ2UiLGguaXNJblJhbmdlKGQpKSgiaXMtdG9kYXkiLGguY2FsZW5kYXJZZWFyPT09aC5jdXJyZW50Q2FsZW5kYXJZZWFyJiZkPT09aC5jdXJyZW50Q2FsZW5kYXJNb250aCksaHIoInRhYmlu''@;'; put 'put ''ZGV4IixoLmdldFRhYkluZGV4KGQpKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIElOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5jaGFu''@;'; put 'put ''Z2VZZWFyKGgpKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLm9uSG92ZXIoaCkpfSksT2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgpO1RyKCJpcy1zZWxlY3RlZCIsYT09PWQuc2VsZWN0''@;'; put 'put ''ZWRTdGFydFllYXJ8fGE9PT1kLnNlbGVjdGVkRW5kWWVhcikoImlzLXN0YXJ0LXJhbmdlIixkLmdldElzUmFuZ2VTdGFydFllYXIoYSkpKCJpcy1lbmQtcmFuZ2UiLGQuZ2V0SXNSYW5nZUVuZFllYXIoYSkpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoYSkpKCJpcy10b2RheSIsZC5pc0N1cnJl''@;'; put 'put ''bnRDYWxlbmRhclllYXIoYSkpLGhyKCJ0YWJpbmRleCIsZC5nZXRUYWJJbmRleChhKSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBSTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJhIiw2KSxIdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13''@;'; put 'put ''dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaCkpfSkoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pLE9lKDIpLGhlKCksdWkoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxocigiYXJpYS1sYWJlbCIsbnVsbD09YT9udWxsOmEubGFiZWwpLGZlKCksSXIoIiAiLGEubGFiZWwsIiAiKX19ZnVuY3Rpb24gTE5lKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBPTmUoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJjbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IiwyKSxtdCgyLFJOZSwzLDIsIm5nLWNvbnRhaW5lciIsMyksaGUoKSxkZSgzLCJkaXYiLDQpLG10KDQsTE5lLDEsMCwibmctY29udGFpbmVyIiw1KSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpLGQ9aGEoMik7ZmUoMikseGUoIm5nRm9yT2YiLGEuZGF0ZVJhbmdlT3B0''@;'; put 'put ''aW9ucyksZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBQTmUoYyxsKXsxJmMmJkd0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIEZOZShjLGwpezEmYyYmR3QoMCwiY2xyLXllYXJwaWNrZXIiKX1mdW5jdGlvbiBITmUoYyxsKXsxJmMmJkd0KDAsImNsci1k''@;'; put 'put ''YXlwaWNrZXIiKX1mdW5jdGlvbiBOTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiKX1mdW5jdGlvbiBWTmUoYyxsKXtpZigxJmMmJm10KDAsUE5lLDEsMCwiY2xyLW1vbnRocGlja2VyIiw3KSgxLEZOZSwxLDAsImNsci15ZWFycGlja2VyIiw3KSgyLEhOZSwxLDAs''@;'; put 'put ''ImNsci1kYXlwaWNrZXIiLDcpKDMsTk5lLDEsMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIsNyksMiZjKXtjb25zdCBhPUxlKCk7eGUoIm5nSWYiLGEuaXNNb250aFZpZXcpLGZlKCkseGUoIm5nSWYiLGEuaXNZZWFyVmlldyksZmUoKSx4ZSgibmdJZiIsYS5pc0RheVZpZXcpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGEuaGFzQWN0aW9uQnV0dG9ucyl9fWNvbnN0IEJOZT1bImFjdGlvbkJ1dHRvbiJdLGpOZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0sW1siIiwiY2xyRW5kRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0s''@;'; put 'put ''W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sek5lPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJbY2xyU3RhcnREYXRlXSIsIltjbHJFbmREYXRlXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3Vj''@;'; put 'put ''Y2VzcyJdO2Z1bmN0aW9uIFVOZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBaTmUoYyxsKXsxJmMmJihjaSgwKSxZcigxLDIpLGRlKDIsInNwYW4iLDkpLE9lKDMsIi0iKSxoZSgpLFlyKDQsMyksdWkoKSl9ZnVuY3Rpb24gV05lKGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwx''@;'; put 'put ''MCwwKSxHdCgyLCJjZHMtaWNvbiIsMTEpLGhlKCkpLDImYyYmeGUoImRpc2FibGVkIixMZSgpLmlzSW5wdXREYXRlRGlzYWJsZWQpfWZ1bmN0aW9uIFlOZShjLGwpezEmYyYmR3QoMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiwxMil9ZnVuY3Rpb24gR05lKGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uICROZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDE0KX1mdW5jdGlvbiBLTmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBxTmUoYyxsKXsxJmMmJllyKDAsNSxbIipuZ0lmIiwic2hvd0ludmFsaWQi''@;'; put 'put ''XSl9ZnVuY3Rpb24gWE5lKGMsbCl7MSZjJiZZcigwLDYsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCB0VmU9W1tbImxhYmVsIl1dLFtbIiIsImNsck51bWJlcklucHV0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29u''@;'; put 'put ''dHJvbC1zdWNjZXNzIl1dXSxuVmU9WyJsYWJlbCIsIltjbHJOdW1iZXJJbnB1dF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiByVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gaVZlKGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTEpfWZ1bmN0aW9uIGFWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEyKX1mdW5jdGlvbiBvVmUoYyxsKXsxJmMmJllyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBzVmUoYyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwi''@;'; put 'put ''c2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gbFZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBjVmU9W1tbIiIsImNsclJhZGlvIiwiIl1dLFtbImxhYmVsIl1dXSx1VmU9WyJbY2xyUmFkaW9dIiwibGFiZWwiXTtmdW5jdGlvbiBkVmUoYyxsKXsxJmMmJkd0''@;'; put 'put ''KDAsImxhYmVsIil9Y29uc3QgaFZlPVtbWyJsYWJlbCJdXSxbWyJjbHItcmFkaW8td3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sZlZlPVsibGFiZWwiLCJjbHItcmFkaW8td3JhcHBl''@;'; put 'put ''ciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIHBWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBnVmUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24g''@;'; put 'put ''bVZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gdlZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gYlZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIHlWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5n''@;'; put 'put ''SWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gX1ZlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzKSxtdCgxLG1WZSwxLDAsImNkcy1pY29uIiw0KSgyLHZWZSwxLDAsImNkcy1pY29uIiw1KSgzLGJWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDQseVZlLDEsMCwibmctY29udGVudCIsMCksaGUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93VmFsaWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd1ZhbGlkKX19Y29uc3Qgd1ZlPVtbWyJsYWJlbCJdXSxbWyIi''@;'; put 'put ''LCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLENWZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNs''@;'; put 'put ''ci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBTVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gTVZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24geFZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gRVZlKGMsbCl7MSZjJiZZ''@;'; put 'put ''cigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gVFZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEFWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qga1ZlPVtbWyJsYWJlbCJdXSxbWyIi''@;'; put 'put ''LCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sRFZlPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3Ii''@;'; put 'put ''LCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gSVZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFJWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIExWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIE9WZShjLGwpezEm''@;'; put 'put ''YyYmWXIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIFBWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBGVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IEhWZT1bImFuY2hvciJdO2Z1''@;'; put 'put ''bmN0aW9uIE5WZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJidXR0b24iLDYpLEd0KDMsImNkcy1pY29uIiw3KSxoZSgpKCksWXIoNCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7eGUoImlkIixhLnBvcG92ZXJJZCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsKSxmZSgzKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19Y29uc3QgVlZlPVsiaW5wdXRfbG93Il0sQlZlPVsiaW5wdXQiXSxqVmU9WyJjb2x1bW5Qb3J0YWwiXTtmdW5jdGlvbiB6VmUoYyxs''@;'; put 'put ''KXsxJmMmJllyKDApfWNvbnN0IFVWZT1bInJlc2l6ZVRyYWNrZXIiXSxaVmU9WyJjb2x1bW5IYW5kbGUiXSxXVmU9W1tbImNsci1kZy1maWx0ZXIiXSxbImNsci1kZy1zdHJpbmctZmlsdGVyIl0sWyJjbHItZGctbnVtZXJpYy1maWx0ZXIiXV0sIioiXSxZVmU9WyJjbHItZGctZmlsdGVyLCBj''@;'; put 'put ''bHItZGctc3RyaW5nLWZpbHRlciwgY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwiKiJdO2Z1bmN0aW9uIEdWZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gJFZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmaHIoImRpcmVjdGlvbiIsTGUoMikuc29ydERpcmVjdGlvbil9ZnVu''@;'; put 'put ''Y3Rpb24gS1ZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc29ydCgpKX0pLG10KDEsR1ZlLDEsMCwibmctY29udGFpbmVyIiw4KSgyLCRWZSwxLDEsImNkcy1pY29uIiw5KSxoZSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9aGEoNik7ZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoKSx4ZSgibmdJZiIsYS5zb3J0RGlyZWN0aW9uKX19ZnVuY3Rpb24gcVZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDExKSxn''@;'; put 'put ''aSgiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3hlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5m''@;'; put 'put ''aWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpLHBpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIFhWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIp''@;'; put 'put ''LGdpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmZpbHRlclZhbHVlLGgpfHwoZi5maWx0ZXJWYWx1ZT1oKSxDdChoKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7eGUoImNsckZpbHRlck1heFBsYWNlaG9sZGVy''@;'; put 'put ''IixhLmZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyKSgiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIpKCJjbHJEZ051bWVyaWNGaWx0ZXIiLGEucmVnaXN0ZXJlZCkscGkoImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZhbHVlKX19ZnVuY3Rp''@;'; put 'put ''b24gSlZlKGMsbCl7MSZjJiZZcigwLDEpfWZ1bmN0aW9uIFFWZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gZUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTMpLG10KDEsUVZlLDEsMCwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe0xlKCk7Y29uc3QgYT1oYSg2KTtmZSgpLHhl''@;'; put 'put ''KCJuZ1RlbXBsYXRlT3V0bGV0IixhKX19ZnVuY3Rpb24gdEJlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIpfWZ1bmN0aW9uIG5CZShjLGwpezEmYyYmR3QoMCwiZGl2Iiw0KX1mdW5jdGlvbiByQmUoYyxsKXsxJmMmJllyKDAsMCxbIipuZ0lmIiwiZW1wdHlEYXRh''@;'; put 'put ''Z3JpZCJdKX1jb25zdCBpQmU9WyJjZWxsUG9ydGFsIl07ZnVuY3Rpb24gYUJlKGMsbCl7MSZjJiZZcigwKX1jb25zdCBvQmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBzQmUoYyxsKXsxJmMmJllyKDApfWNvbnN0IGxCZT1bImRldGFpbEJ1dHRvbiJdLGNCZT1bInN0aWNreUNlbGxzIl0sdUJl''@;'; put 'put ''PVsic2Nyb2xsYWJsZUNlbGxzIl0sZEJlPVsiY2FsY3VsYXRlZENlbGxzIl0saEJlPVtbWyJjbHItZGctcm93LWRldGFpbCJdXSxbWyJjbHItZGctY2VsbCJdXSxbWyJjbHItZGctYWN0aW9uLW92ZXJmbG93Il1dXSxmQmU9WyJjbHItZGctcm93LWRldGFpbCIsImNsci1kZy1jZWxsIiwiY2xy''@;'; put 'put ''LWRnLWFjdGlvbi1vdmVyZmxvdyJdLHBCZT1jPT4oeyJpcy1yZXBsYWNlZCI6Y30pLHcxZT1jPT4oeyJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIjpjfSk7ZnVuY3Rpb24gZ0JlKGMsbCl7fWZ1bmN0aW9uIG1CZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlv''@;'; put 'put ''biIsMTApLG10KDEsZ0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMiksZD1oYSg2KTt4ZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gdkJlKGMs''@;'; put 'put ''bCl7fWZ1bmN0aW9uIGJCZShjLGwpezEmYyYmbXQoMCx2QmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKExlKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixoYSg2KSkpfWZ1bmN0aW9uIHlCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsOSksSHQoIm1vdXNlZG93''@;'; put 'put ''biIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY2xlYXJSYW5nZXMoaCkpfSkoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIEN0KGYuc2VsZWN0Um93KCFmLnNlbGVjdGVkLGgpKX0pLG10KDEsbUJlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5p''@;'; put 'put ''bWF0aW9uIiw3KSgyLGJCZSwxLDEsbnVsbCw4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpLGZlKCkseGUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gX0JlKGMsbCl7fWZ1bmN0aW9uIHdCZShjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMTApLG10KDEsX0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKSxkPWhhKDYpO3hlKCJjbHJFeHBhbmRUcmlnZ2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGZlKCkseGUo''@;'; put 'put ''Im5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBDQmUoYyxsKXt9ZnVuY3Rpb24gU0JlKGMsbCl7MSZjJiZtdCgwLENCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoTGUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNikpKX1mdW5jdGlvbiBNQmUoYyxsKXsxJmMmJllyKDAp''@;'; put 'put ''fWZ1bmN0aW9uIHhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsImlucHV0IiwyMyksSHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS50b2dnbGUoaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIs''@;'; put 'put ''MjQpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLGRlKDQsInNwYW4iLDI1KSxPZSg1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTt4ZSgibmdDbGFzcyIsc3AoNyx3MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSks''@;'; put 'put ''ZmUoMikseGUoIm5nTW9kZWwiLGEuc2VsZWN0ZWQpKCJpZCIsYS5jaGVja2JveElkKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSx4ZSgiZm9yIixhLmNoZWNrYm94SWQpLGZlKDIp''@;'; put 'put ''LENyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gRUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyMSkoMSwiY2xyLXJhZGlvLXdyYXBwZXIiKSgyLCJpbnB1dCIsMjYpLGdpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBtaShmLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlLGgpfHwoZi5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1oKSxDdChoKX0pLGhlKCksZGUoMywibGFiZWwiLDI3KSg0LCJzcGFuIiwyNSksT2UoNSksaGUoKSgpKCko''@;'; put 'put ''KX1pZigyJmMpe2NvbnN0IGE9TGUoMik7eGUoIm5nQ2xhc3MiLHNwKDEwLHcxZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxmZSgyKSx4ZSgiaWQiLGEucmFkaW9JZCkoIm5hbWUiLGEuc2VsZWN0aW9uLmlkKyItcmFkaW8iKSgidmFsdWUiLGEuaXRlbSkscGkoIm5nTW9kZWwiLGEuc2VsZWN0aW9u''@;'; put 'put ''LmN1cnJlbnRTaW5nbGUpLHhlKCJjaGVja2VkIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPT09YS5pdGVtKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksZmUoKSx4ZSgiZm9yIixhLnJh''@;'; put 'put ''ZGlvSWQpLGZlKDIpLENyKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gVEJlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksWXIoMSwyKSxoZSgpKX1mdW5jdGlvbiBBQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJidXR0b24iLDMyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLnRvZ2dsZUV4cGFuZCgpKX0pLEd0KDEsImNkcy1pY29uIiwzMyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoNCk7aHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgi''@;'; put 'put ''YXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kLmhhc0V4cGFuZFRlbXBsYXRlJiYhYS5leHBhbmQuZXhwYW5kZWQ/bnVsbDphLmV4cGFuZGFibGVJZCksZmUo''@;'; put 'put ''KSxocigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTphLmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiBrQmUoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJjbHItc3Bpbm5lciIsMzQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgpLENyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcpfX1mdW5jdGlvbiBEQmUoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLEFCZSwyLDUsImJ1dHRvbiIsMzApKDIsa0JlLDIsMSwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDMxKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGEuZXhwYW5kLmxvYWRpbmcpfX1mdW5jdGlvbiBJQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI5KSxtdCgxLERCZSwzLDIsIm5n''@;'; put 'put ''LWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5jdGlvbiBSQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDM3LDUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtj''@;'; put 'put ''b25zdCBoPWhhKDEpLGY9TGUoMyk7cmV0dXJuIEN0KGYuZGV0YWlsU2VydmljZS50b2dnbGUoZi5pdGVtLGgpKX0pLEd0KDIsImNkcy1pY29uIiwzOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7VHIoImlzLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSkseGUo''@;'; put 'put ''ImRpc2FibGVkIixhLmRldGFpbERpc2FibGVkKSxocigiYXJpYS1sYWJlbCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixhLmRldGFpbFNlcnZpY2UuaXNSb3dP''@;'; put 'put ''cGVuKGEuaXRlbSkpKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLGZlKDIpLGhyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRpdGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIExCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzUpLG10KDEsUkJlLDMsOCwiYnV0dG9uIiwzNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLCFhLmRl''@;'; put 'put ''dGFpbEhpZGRlbil9fWZ1bmN0aW9uIE9CZShjLGwpe31mdW5jdGlvbiBQQmUoYyxsKXsxJmMmJm10KDAsT0JlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihMZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNCkpKX1mdW5jdGlvbiBGQmUoYyxsKXt9ZnVuY3Rpb24gSEJlKGMsbCl7''@;'; put 'put ''MSZjJiZtdCgwLEZCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoTGUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGhhKDQpKSl9ZnVuY3Rpb24gTkJlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY2VsbCIsMzkpfWZ1bmN0aW9uIFZCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTIp''@;'; put 'put ''KDEsImRpdiIsMTMpLGNpKDIsbnVsbCwzKSxtdCg0LHhCZSw2LDksImRpdiIsMTQpKDUsRUJlLDYsMTIsImRpdiIsMTQpKDYsVEJlLDIsMCwiZGl2IiwxNSkoNyxJQmUsMiwxLCJkaXYiLDE2KSg4LExCZSwyLDEsImRpdiIsMTcpLHVpKCksaGUoKSxkZSg5LCJkaXYiLDE4KSgxMCwiZGl2Iiwx''@;'; put 'put ''OSksWXIoMTEsMSksRmwoMTIsbnVsbCw0KSxoZSgpLG10KDE0LFBCZSwxLDEsbnVsbCw4KSgxNSxIQmUsMSwxLG51bGwsOCksaGUoKSxtdCgxNixOQmUsMSwwLCJjbHItZGctY2VsbCIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO1RyKCJkYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW4iLGEu''@;'; put 'put ''ZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSkseGUoImlkIixhLmlkKSxmZSg0KSx4ZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLGZlKCkseGUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVD''@;'; put 'put ''VElPTl9UWVBFLlNpbmdsZSksZmUoKSx4ZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGZlKCkseGUoIm5nSWYiLGEuZ2xvYmFsRXhwYW5kYWJsZS5oYXNFeHBhbmRhYmxlUm93KSxmZSgpLHhlKCJuZ0lmIixhLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUo''@;'; put 'put ''KSx4ZSgibmdDbGFzcyIsc3AoMTIscEJlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxmZSg1KSx4ZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFhLnJlcGxhY2VkJiYhYS5leHBhbmQubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsYS5za2Vs''@;'; put 'put ''ZXRvbkxvYWRpbmcpfX1jb25zdCBCQmU9WyJkYXRhZ3JpZCJdLGpCZT1bImRhdGFncmlkVGFibGUiXSx6QmU9WyJzY3JvbGxhYmxlQ29sdW1ucyJdLFVCZT1bInByb2plY3RlZERpc3BsYXlDb2x1bW5zIl0sWkJlPVsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIl0sV0JlPVsiZGlzcGxh''@;'; put 'put ''eWVkUm93cyJdLFlCZT1bImNhbGN1bGF0aW9uUm93cyJdLEdCZT1bInNlbGVjdEFsbENoZWNrYm94Il0sJEJlPVtbWyJjbHItZGctYWN0aW9uLWJhciJdXSxbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0sW1siY2xyLWRnLWZvb3RlciJdXSxbWyIiLCJjbHJJZkRldGFpbCIsIiJdLFsiY2xyLWRn''@;'; put 'put ''LWRldGFpbCJdXV0sS0JlPVsiY2xyLWRnLWFjdGlvbi1iYXIiLCJjbHItZGctcGxhY2Vob2xkZXIiLCJjbHItZGctZm9vdGVyIiwiW2NscklmRGV0YWlsXSxjbHItZGctZGV0YWlsIl07ZnVuY3Rpb24gcUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzMCkoMSwiaW5w''@;'; put 'put ''dXQiLDMxLDYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBtaShmLmFsbFNlbGVjdGVkLGgpfHwoZi5hbGxTZWxlY3RlZD1oKSxDdChoKX0pLGhlKCksZGUoMywibGFiZWwiLDMyKSg0LCJzcGFuIiwzMyksT2UoNSksaGUoKSgpKCl9''@;'; put 'put ''aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoImlkIixhLnNlbGVjdEFsbElkKSxwaSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksZmUoMikseGUoImZvciIsYS5zZWxlY3RBbGxJZCksZmUoMiksQ3Io''@;'; put 'put ''YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNyksSHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLnRvZ2dsZUFsbFNlbGVjdGVkKGgpKX0pLG10''@;'; put 'put ''KDEscUJlLDYsNSwiZGl2IiwyOCksR3QoMiwiZGl2IiwyOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS52aXJ0dWFsU2Nyb2xsfHxhLmN1c3RvbVNlbGVjdEFsbEVuYWJsZWQpfX1mdW5jdGlvbiBKQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSgx''@;'; put 'put ''LCJkaXYiLDMzKSxPZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLENyKGEuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwpfX1mdW5jdGlvbiBRQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSgxLCJkaXYiLDMzKSxPZSgyKSxo''@;'; put 'put ''ZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLENyKGEuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsKX19ZnVuY3Rpb24gZWplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNikoMSwiZGl2IiwzMyksT2UoMiksaGUoKSxHdCgzLCJkaXYiLDI5''@;'; put 'put ''KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSxDcihhLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfX1mdW5jdGlvbiB0amUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNykoMSwiY2xyLWRnLWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzgpLGRlKDMsInNw''@;'; put 'put ''YW4iKSxPZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNCksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIG5qZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM3KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwz''@;'; put 'put ''OCksZGUoMywic3BhbiIpLE9lKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSxDcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gcmplKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiBpamUoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJkaXYiLDM5KSgxLCJjbHItc3Bpbm5lciIsMzgpLE9lKDIsIkxvYWRpbmciKSxoZSgpKCkpfWNvbnN0IG9qZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gc2plKGMsbCl7fWZ1bmN0aW9uIGxqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImxpIikoMSwiY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXIiKSgyLCJpbnB1dCIsMTMpLEh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikudG9nZ2xlQ29sdW1uU3RhdGUoZiwhaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIpLG10KDQsc2plLDAsMCwibmctdGVt''@;'; put 'put ''cGxhdGUiLDE0KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKTtmZSgyKSx4ZSgiZGlzYWJsZWQiLGQuaGFzT25seU9uZVZpc2libGVDb2x1bW4mJiFhLmhpZGRlbikoIm5nTW9kZWwiLCFhLmhpZGRlbiksZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEu''@;'; put 'put ''dGl0bGVUZW1wbGF0ZVJlZil9fWZ1bmN0aW9uIGNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMykoMSwiZGl2Iiw0KSgyLCJkaXYiLDUsMCksT2UoNCksaGUoKSxkZSg1LCJoMiIpLE9lKDYpLGhlKCksZGUoNywiYnV0dG9uIiw2KSxHdCg4LCJjZHMtaWNvbiIsNyks''@;'; put 'put ''ZGUoOSwic3BhbiIsOCksT2UoMTApLGhlKCkoKSgpLGRlKDExLCJ1bCIsOSksbXQoMTIsbGplLDUsMywibGkiLDEwKSxoZSgpLGRlKDEzLCJkaXYiLDExKSgxNCwiY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIiwxMiksSHQoImNsckFsbFNlbGVjdGVkIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChMZSgpLmFsbENvbHVtbnNTZWxlY3RlZCgpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3hlKCJpZCIsYS5wb3BvdmVySWQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiksZmUoNCksQ3IoYS5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxmZSgyKSxDcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyksZmUoKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKCksaHIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5jbG9zZSksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWNvbnN0IEMxZT1bInRpdGxlIl0sZGplPVtbWyJjbHItZGctcGFnaW5hdGlvbiJd''@;'; put 'put ''XSwiKiJdLGhqZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiKiJdO2Z1bmN0aW9uIGZqZShjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLEd0KDMsImlucHV0IiwzKSxkZSg0LCJsYWJlbCIpLE9lKDUpLGhlKCksZGUoNiwic3BhbiIs''@;'; put 'put ''NCksT2UoNyksaGUoKSgpKCksdWkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNSksQ3IoYS5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGgpLGZlKDIpLENyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIHBqZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVt''@;'; put 'put ''bi10b2dnbGUiKX1mdW5jdGlvbiBnamUoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLHBqZSwxLDAsImNsci1kZy1jb2x1bW4tdG9nZ2xlIiwwKSxkZSgyLCJkaXYiLDUpLFlyKDMsMSksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29s''@;'; put 'put ''dW1ucyl9fWZ1bmN0aW9uIG1qZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJuZ1ZhbHVlIixhKSxmZSgpLENyKGEpfX1jb25zdCB2amU9WyJjdXJyZW50UGFnZUlucHV0Il0sYmplPVsiKiIsW1siY2xyLWRn''@;'; put 'put ''LXBhZ2Utc2l6ZSJdXV0seWplPVsiKiIsImNsci1kZy1wYWdlLXNpemUiXTtmdW5jdGlvbiBfamUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYpLFlyKDEsMSksaGUoKSl9ZnVuY3Rpb24gd2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiaW5wdXQiLDE4LDEpLEh0KCJrZXlkb3du''@;'; put 'put ''LmVudGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykudXBkYXRlQ3VycmVudFBhZ2UoaCkpfSkoImJsdXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgzKS52ZXJpZnlDdXJyZW50UGFnZShoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTt4ZSgic2l6''@;'; put 'put ''ZSIsYS5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsYS5wYWdlLmN1cnJlbnQpLGhyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jdXJyZW50UGFnZSl9fWZ1bmN0aW9uIENqZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9TGUoMyk7ZmUoKSxDcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIFNqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNykoMSwiYnV0dG9uIiw4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnBhZ2UuY3VycmVudD0x''@;'; put 'put ''KX0pLGRlKDIsInNwYW4iLDkpLE9lKDMpLGhlKCksR3QoNCwiY2RzLWljb24iLDEwKSxoZSgpLGRlKDUsImJ1dHRvbiIsMTEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRlKDYs''@;'; put 'put ''InNwYW4iLDkpLE9lKDcpLGhlKCksR3QoOCwiY2RzLWljb24iLDEyKSxoZSgpLG10KDksd2plLDIsMywiaW5wdXQiLDEzKSgxMCxDamUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSxPZSgxMiwiIFx4YTAvXHhhMCIpLGRlKDEzLCJzcGFuIiksT2UoMTQpLGhlKCksZGUoMTUsImJ1dHRv''@;'; put 'put ''biIsMTQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudCsxKX0pLGRlKDE2LCJzcGFuIiw5KSxPZSgxNyksaGUoKSxHdCgxOCwiY2RzLWljb24iLDE1KSxoZSgpLGRlKDE5LCJidXR0b24iLDE2''@;'; put 'put ''KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmxhc3QpfSksZGUoMjAsInNwYW4iLDkpLE9lKDIxKSxoZSgpLEd0KDIyLCJjZHMtaWNvbiIsMTcpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMTEpLGQ9''@;'; put 'put ''TGUoMik7ZmUoKSx4ZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGZlKDIpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJl''@;'; put 'put ''bnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLENyKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMikseGUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFnZUlucHV0KSgibmdJZkVsc2UiLGEpLGZlKDQp''@;'; put 'put ''LGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxmZSgpLENyKGQucGFnZS5sYXN0KSxmZSgpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2Up''@;'; put 'put ''LGZlKDIpLENyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50Pj1kLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKSxmZSgyKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5sYXN0UGFnZSl9fWZ1bmN0aW9uIE1qZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsX2plLDIsMCwiZGl2IiwzKSxkZSgyLCJkaXYiLDQpLFlyKDMpLGhlKCksbXQoNCxTamUsMjMsMTYsImRpdiIsNSksdWkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5fcGFnZVNp''@;'; put 'put ''emVDb21wb25lbnQpLGZlKDMpLHhlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2IiwxOSksT2UoMiksaGUoKSxkZSgzLCJkaXYiLDcpKDQsImJ1dHRvbiIsMTEpLEh0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNSwic3BhbiIsOSksT2UoNiksaGUoKSxHdCg3LCJjZHMtaWNvbiIsMTIpLGhlKCksZGUoOCwic3BhbiIpLE9lKDkpLGhlKCksZGUoMTAsImJ1dHRvbiIsMTQpLEh0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksZGUoMTEsInNwYW4iLDkpLE9lKDEyKSxoZSgpLEd0KDEzLCJjZHMtaWNvbiIsMTUpLGhlKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2Zl''@;'; put 'put ''KDIpLFZmKCIgIixhLnBhZ2UuZmlyc3RJdGVtKzEsIi0iLGEucGFnZS5sYXN0SXRlbSsxLCIgLyAiLGEucGFnZS50b3RhbEl0ZW1zLCIgIiksZmUoMikseGUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3Vz''@;'; put 'put ''UGFnZSksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgzKSxDcihhLnBhZ2UuY3VycmVudCksZmUoKSx4ZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQ''@;'; put 'put ''YWdlKSxmZSgyKSxDcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IGtqZT1bW1siY2xyLXN0YWNrLWxhYmVsIl1dLCIqIixbWyJjbHItc3RhY2stYmxvY2siXV1dLERqZT1bImNsci1zdGFjay1sYWJlbCIsIioiLCJjbHItc3RhY2stYmxvY2siXTtmdW5jdGlvbiBJamUo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KSwyJmMmJmhyKCJkaXJlY3Rpb24iLExlKCkuY2FyZXREaXJlY3Rpb24pfWZ1bmN0aW9uIFJqZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksQ3IoYS5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uIExqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSksWXIoMSwyKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtfZCgiaGVpZ2h0IixhLmV4cGFuZGVkPyJhdXRvIjowKSxocigiaWQiLGEuZ2V0U3RhY2tDaGlsZHJlbklkKCkpKCJh''@;'; put 'put ''cmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeUlkKX19Y29uc3QgT2plPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0sUGplPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBOamUoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIFZqZShjLGwpe2lmKDEmYyYmKGNpKDApLG10''@;'; put 'put ''KDEsTmplLDEsMCwibmctY29udGFpbmVyIiwyKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24udGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZC5nZXRD''@;'; put 'put ''b250ZXh0KGEpKX19ZnVuY3Rpb24gQmplKGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxWamUsMiwyLCJuZy1jb250YWluZXIiLDEpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nRm9yT2YiLChudWxsPT1hLnBhcmVudD9udWxsOmEucGFyZW50LmNoaWxkcmVuKXx8YS5jaGls''@;'; put 'put ''ZHJlbil9fWNvbnN0IGpqZT1bImNvbnRlbnRDb250YWluZXIiXSx6amU9W1tbImNsci10cmVlLW5vZGUiXV0sW1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSwiKiJdLFVqZT1bImNsci10cmVlLW5vZGUiLCJbY2xySWZFeHBhbmRlZF0iLCIqIl07ZnVuY3Rpb24gWmplKGMsbCl7aWYoMSZjKXtj''@;'; put 'put ''b25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZXhwYW5kU2VydmljZS50b2dnbGUoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZm9jdXNUcmVlTm9kZSgpKX0pLEd0KDEsImNk''@;'; put 'put ''cy1pY29uIiwxMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTt4ZSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gV2plKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMSks''@;'; put 'put ''R3QoMSwic3BhbiIsMTIpLGhlKCkpfWZ1bmN0aW9uIFlqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCksSHQoImNoYW5nZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlv''@;'; put 'put ''bihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxoZSgpLGRlKDIsImxhYmVsIiwxNSksRmwoMywxNiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9aGEoNyk7ZmUoKSx4ZSgi''@;'; put 'put ''aWQiLGEubm9kZUlkKyItY2hlY2siKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpKCJjaGVja2VkIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLlNFTEVDVEVEKSgiaW5kZXRlcm1pbmF0ZSIsYS5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5JTkRFVEVSTUlOQVRF''@;'; put 'put ''KSxmZSgpLHhlKCJmb3IiLGEubm9kZUlkKyItY2hlY2siKSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gR2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNyksSHQoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCku''@;'; put 'put ''Zm9jdXNUcmVlTm9kZSgpKX0pLEZsKDEsMTYpLGhlKCl9aWYoMiZjKXtMZSgpO2NvbnN0IGE9aGEoNyk7ZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uICRqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpKDEsInNwYW4iKSxPZSgyKSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSgyKTtmZSgyKSxJcigiICIsYS5hcmlhU2VsZWN0ZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRUcmVlTm9kZTphLmNvbW1vblN0cmluZ3Mua2V5cy51bnNlbGVjdGVkVHJlZU5vZGUsIiIpfX1mdW5jdGlvbiBLamUoYyxsKXtpZigxJmMmJihZcigwLDIpLG10KDEsJGpl''@;'; put 'put ''LDMsMSwiZGl2IiwxOCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV8fGEuYXJpYVNlbGVjdGVkKX19ZnVuY3Rpb24gcWplKGMsbCl7MSZjJiZHdCgwLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwxKSwyJmMmJnhlKCJjaGls''@;'; put 'put ''ZHJlbiIsTGUoKS5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnJvb3QpfWZ1bmN0aW9uIFhqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1p''@;'; put 'put ''Y29uIiw1KSxoZSgpfTImYyYmaHIoImFyaWEtbGFiZWwiLExlKDIpLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsKX1mdW5jdGlvbiBKamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksWXIoMiksaGUoKSxtdCgzLFhqZSwyLDEsImJ1dHRvbiIsMyksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKCk7VHIoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsYS5pc0xpZ2h0d2VpZ2h0KSgiYWxlcnQtYXBwLWxldmVsIixhLmlzQXBwTGV2ZWwpLHhlKCJuZ0NsYXNzIixhLmFsZXJ0Q2xhc3MpLGZlKDMpLHhlKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVu''@;'; put 'put ''Y3Rpb24gUWplKGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24gZXplKGMsbCl7aWYoMSZjJiZHdCgwLCJjZHMtaWNvbiIsNCksMiZjKXtjb25zdCBhPUxlKCk7aHIoInNoYXBlIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsYS5pY29u''@;'; put 'put ''U2VydmljZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IHR6ZT1bW1siY2xyLWFsZXJ0Il1dXSxuemU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiByemUoYyxsKXsxJmMmJkd0KDAsImNsci1hbGVydHMtcGFnZXIiLDIpLDImYyYmeGUoImNsckN1cnJlbnRBbGVydEluZGV4IixMZSgpLmN1cnJlbnRB''@;'; put 'put ''bGVydEluZGV4KX1jb25zdCBpemU9WyJjbHJJbnRlcm5hbE1vZGFsQ29udGVudFRlbXBsYXRlIl0sUzFlPVsiYm9keSJdLGF6ZT1bW1siIiw4LCJsZWFkaW5nLWJ1dHRvbiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3Rl''@;'; put 'put ''ciJdXV0sb3plPVsiLmxlYWRpbmctYnV0dG9uIiwiLm1vZGFsLXRpdGxlIiwiLm1vZGFsLWJvZHkiLCIubW9kYWwtZm9vdGVyIl07ZnVuY3Rpb24gc3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxNCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChMZSgzKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7aHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gbHplKGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw4KSgxLCJkaXYiLDkpKDIsImRpdiIsMTApLFlyKDMpLGRlKDQsImRpdiIsMTEsMCksWXIoNiwxKSxoZSgpLG10KDcsc3plLDIsMSwiYnV0dG9uIiwxMiksaGUoKSxkZSg4LCJkaXYiLDEzLDEpLFlyKDEwLDIpLGhlKCksWXIoMTEsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''TGUoMik7ZmUoNCkseGUoImlkIixhLm1vZGFsSWQpLGZlKDMpLHhlKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gY3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLEh0KCJAZmFkZU1vdmUuZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KExlKCkuZmFkZURvbmUoaCkpfSksZGUoMiwiZGl2Iiw2KSxPZSgzKSxoZSgpLG10KDQsbHplLDEyLDIsImRpdiIsNyksZGUoNSwiZGl2Iiw2KSxPZSg2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtUcigibW9kYWwtZnVsbC1zY3JlZW4iLCJmdWxsLXNjcmVlbiI9PWEu''@;'; put 'put ''c2l6ZSksZmUoKSxUcigibW9kYWwtc20iLCJzbSI9PWEuc2l6ZSkoIm1vZGFsLWxnIiwibGciPT1hLnNpemUpKCJtb2RhbC14bCIsInhsIj09YS5zaXplKSx4ZSgiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCEwKSgiQGZhZGVNb3ZlIixhLmZhZGVNb3ZlKSxocigiYXJpYS1oaWRkZW4iLCFh''@;'; put 'put ''Ll9vcGVuKSgiYXJpYS1sYWJlbGxlZGJ5IixhLmxhYmVsbGVkQnl8fGEubW9kYWxJZCksZmUoMiksQ3IoYS5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLGZlKCkseGUoIm5nSWYiLCFhLm1vZGFsQ29udGVudFRlbXBsYXRlKSgibmdJZkVsc2UiLGEubW9kYWxDb250ZW50''@;'; put 'put ''VGVtcGxhdGUpLGZlKDIpLENyKGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCl9fWZ1bmN0aW9uIHV6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5iYWNrZHJvcENs''@;'; put 'put ''aWNrKCkpfSksaGUoKX0yJmMmJnhlKCJAZmFkZSIsdm9pZCAwKX1sZXQgSGw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pY29uIl1dfSksY30pKCks''@;'; put 'put ''cnM9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNkcy1pY29uIl1dfSksY30pKCksQXM9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7Y2xhc3Mga3h7fXZhciB6MT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRFRkFVTFQ9MF09IkRFRkFVTFQiLGNbYy5MT0FESU5HPTFdPSJM''@;'; put 'put ''T0FESU5HIixjW2MuU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsY1tjLkVSUk9SPTNdPSJFUlJPUiIsY30oejF8fHt9KTtsZXQgajA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxpc3RlbmVyPWEsdGhpcy5fbG9hZGluZ1N0YXRlPXoxLkRFRkFVTFR9Z2V0IGxvYWRpbmdTdGF0ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZShhKXshMD09PWE/YT16MS5MT0FESU5HOmF8fChhPXoxLkRFRkFVTFQpLGEhPT10aGlzLl9sb2FkaW5nU3RhdGUmJih0aGlzLl9sb2FkaW5nU3RhdGU9YSx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVyLmxvYWRp''@;'; put 'put ''bmdTdGF0ZUNoYW5nZShhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT16MS5ERUZBVUxUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShreCw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckxv''@;'; put 'put ''YWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6W05uLk5vbmUsImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX19KSxjfSkoKSxVMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRhYmxlPTAsdGhpcy5oYXNFeHBhbmRUZW1wbGF0ZT0hMSx0aGlzLl9sb2Fk''@;'; put 'put ''aW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgV259Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10''@;'; put 'put ''b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7dGhpcy5sb2FkaW5nPWE9PT16MS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCemU9MDtmdW5jdGlvbiBTdSgpe3JldHVybiJjbHItaWQtIitCemUrK31sZXQgTTFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlv''@;'; put 'put ''LGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpO2NvbnN0ICRmPSIwLjJzIGVhc2UtaW4tb3V0IixqemU9W3loKCJza2lwSW5pdGlhbFJlbmRlciIsW2l1KCI6ZW50''@;'; put 'put ''ZXIiLFtdKV0pLHloKCJ0b2dnbGUiLFtpdSgidm9pZCA9PiAqIixbdXMoe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLE0wKCRmLHVzKHtoZWlnaHQ6IioifSkpXSldKV0sa1k9KHloKCJza2lwSW5pdGlhbFJlbmRlciIsW2l1KCI6ZW50ZXIiLFtdKV0pLHloKCJ0b2dnbGUiLFtpdSgidm9p''@;'; put 'put ''ZCA9PiAqIixbdXMoe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLE0wKCRmLHVzKHtoZWlnaHQ6IioifSkpXSksaXUoIiogPT4gdm9pZCIsW3VzKHtkaXNwbGF5OiJibG9jayJ9KSxNMCgkZix1cyh7aGVpZ2h0OjAsZGlzcGxheToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToi''@;'; put 'put ''Q2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGFwcGx5OiJBcHBseSIsY2FuY2VsOiJDYW5jZWwiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQcmV2aW91''@;'; put 'put ''cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixuZXV0cmFsOiJOZXV0cmFsIix1bmtub3duOiJVbmtub3duIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0''@;'; put 'put ''aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6''@;'; put 'put ''IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJDdXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5n''@;'; put 'put ''IG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVudEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNpZGVQYW5lbFBpbjoiUGluIFNpZGUgUGFuZWwiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFs''@;'; put 'put ''bCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9zdENsb3NlOiJDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxz''@;'; put 'put ''IixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVyIixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3Jp''@;'; put 'put ''ZEZpbHRlckFyaWFMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIiLGRhdGFncmlkRmlsdGVyRGlhbG9nQXJpYUxhYmVsOiJGaWx0ZXIgZGlhbG9nIixjb2x1bW5TZXBhcmF0b3JBcmlhTGFiZWw6IkNvbHVtbiByZXNpemUgaGFuZGxl''@;'; put 'put ''Iixjb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbjoiVXNlIGxlZnQgb3IgcmlnaHQga2V5IHRvIHJlc2l6ZSB0aGUgY29sdW1uIixmcm9tTGFiZWw6IkZyb20iLHRvTGFiZWw6IlRvIixhbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBhbGVydCIsYWxlcnROZXh0QWxlcnRBcmlhTGFi''@;'; put 'put ''ZWw6Ik5leHQgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbDoiUHJldmlvdXMgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGRhdGVwaWNrZXJEaWFsb2dMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNr''@;'; put 'put ''ZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFuZ2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6''@;'; put 'put ''IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToiUHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2Fk''@;'; put 'put ''ZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJfTU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBp''@;'; put 'put ''Y2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQuIixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZUb2dnbGVDbG9zZToiQ2xvc2UgbmF2aWdhdGlv''@;'; put 'put ''biBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dPcGVuOiJPcGVuIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZp''@;'; put 'put ''Z2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3RhcnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dy''@;'; put 'put ''ZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9wdGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9i''@;'; put 'put ''b3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3BlbjoiU2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBh''@;'; put 'put ''bmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVSb3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2Ug''@;'; put 'put ''bW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhpcyBidXR0b24iLHdpemFyZFN0ZXA6IlN0ZXAiLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IldpemFyZCBzdGVwcyIscGFzc3dv''@;'; put 'put ''cmRIaWRlOiJIaWRlIHBhc3N3b3JkIGZvciB7TEFCRUx9IixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQgZm9yIHtMQUJFTH0iLHNlbGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyIsc3RlcENvbXBsZXRlOiJTdGVwIHtTVEVQfSBjb21wbGV0ZSIsc3RlcEVycm9yOiJFcnJvciBpbiBzdGVw''@;'; put 'put ''IHtTVEVQfSIsYnJvd3NlOiJCcm93c2UiLGZpbGVDb3VudDoie0NPVU5UfSBmaWxlcyIsY2xlYXJGaWxlOiJDbGVhciB7RklMRX0iLGNsZWFyRmlsZXM6IkNsZWFyIHtDT1VOVH0gZmlsZXMiLHNlbGVjdGVkVHJlZU5vZGU6InNlbGVjdGVkIix1bnNlbGVjdGVkVHJlZU5vZGU6InVuc2VsZWN0''@;'; put 'put ''ZWQiLGJyZWFkY3J1bWJzTGFiZWw6ImJyZWFkY3J1bWJzIixleHBhbmRCcmVhZGNydW1ic0xhYmVsOiJFeHBhbmQgYnJlYWRjcnVtYnMifSk7bGV0IGlzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdzPWtZfWdldCBrZXlzKCl7cmV0dXJuIHRoaXMuX3N0cmluZ3N9''@;'; put 'put ''bG9jYWxpemUoYSl7dGhpcy5fc3RyaW5ncz17Li4udGhpcy5fc3RyaW5ncywuLi5hfX1wYXJzZShhLGQ9e30pe2NvbnN0IGg9T2JqZWN0LmtleXMoZCk7bGV0IGY9YTtyZXR1cm4gaC5sZW5ndGgmJmguZm9yRWFjaCh2PT57Zj1mLnJlcGxhY2UoYHske3Z9fWAsZFt2XSl9KSxmfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTt2YXIgS2Y9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSW5hY3RpdmU9ImluYWN0aXZlIixjLkVy''@;'; put 'put ''cm9yPSJlcnJvciIsYy5Db21wbGV0ZT0iY29tcGxldGUiLGN9KEtmfHx7fSksRHg9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRGVmYXVsdD0iZGVmYXVsdCIsYy5NdWx0aT0ibXVsdGkiLGN9KER4fHx7fSk7bGV0IFV6ZT0wO2NsYXNzIFp6ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlz''@;'; put 'put ''LmFjY29yZGlvbklkPWEsdGhpcy5zdGF0dXM9S2YuSW5hY3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5vcGVuPSExLHRoaXMudGVtcGxhdGVJZD1gJHt0aGlzLmlkfS0ke3RoaXMuYWNjb3JkaW9uSWR9YH19Y2xhc3MgeDFle2NvbnN0cnVjdG9yKCl7dGhpcy5z''@;'; put 'put ''dHJhdGVneT1EeC5EZWZhdWx0LHRoaXMuYWNjb3JkaW9uQ291bnQ9VXplKyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcGFuZWxzKS5tYXAobD0+dGhpcy5fcGFuZWxzW2xdKX1zZXRTdHJhdGVneShsKXt0aGlzLnN0cmF0ZWd5PWx9dXBk''@;'; put 'put ''YXRlUGFuZWxPcmRlcihsKXtsLmZvckVhY2goKGEsZCk9PnRoaXMuX3BhbmVsc1thXS5pbmRleD1kKSx0aGlzLnJlbW92ZU9sZFBhbmVscyhsKX1hZGRQYW5lbChsLGE9ITEpe3RoaXMuX3BhbmVsc1tsXT1uZXcgWnplKGwsdGhpcy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW2xdLm9w''@;'; put 'put ''ZW49YX10b2dnbGVQYW5lbChsLGEpe2NvbnN0IGg9dm9pZCAwIT09YT9hOiF0aGlzLl9wYW5lbHNbbF0ub3BlbjtoJiZ0aGlzLnN0cmF0ZWd5PT09RHguRGVmYXVsdCYmdGhpcy5jbG9zZUFsbFBhbmVscygpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWh9ZGlzYWJsZVBhbmVsKGwsYSl7dGhpcy5f''@;'; put 'put ''cGFuZWxzW2xdLmRpc2FibGVkPWF9Y2xvc2VBbGxQYW5lbHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKGw9PnRoaXMuX3BhbmVsc1tsLmlkXS5vcGVuPSExKX1yZW1vdmVPbGRQYW5lbHMobCl7dGhpcy5wYW5lbHMuZmlsdGVyKGE9PnZvaWQgMD09PWwuZmluZChkPT5kPT09YS5pZCkpLmZvckVh''@;'; put 'put ''Y2goYT0+ZGVsZXRlIHRoaXMuX3BhbmVsc1thLmlkXSl9fWxldCBJeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY2NvcmRpb249bmV3IHgxZSx0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBlaSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyhhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKExyKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBh''@;'; put 'put ''bmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBh''@;'; put 'put ''bmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5hY2NvcmRp''@;'; put 'put ''b25TZXJ2aWNlPWgsdGhpcy5pZkV4cGFuZFNlcnZpY2U9Zix0aGlzLmNkcj12LHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW49ITEsdGhpcy5oZWFkaW5nRW5hYmxlZD0hMSx0aGlzLnBhbmVsT3BlbkNoYW5nZT1uZXcgS3IsdGhpcy5faWQ9U3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWF9Z2V0IHBhbmVsTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhbmVsSW5kZXgrMX1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw/dGhpcy5leHBsaWNpdEhlYWRpbmdMZXZlbDp0aGlzLnBhcmVudD80OjN9''@;'; put 'put ''bmdPbkluaXQoKXt0aGlzLnBhbmVsPXRoaXMuYWNjb3JkaW9uU2VydmljZS5nZXRQYW5lbENoYW5nZXModGhpcy5pZCkucGlwZShZdShhPT50aGlzLmVtaXRQYW5lbENoYW5nZShhKSkpLHRoaXMuYWNjb3JkaW9uU2VydmljZS5hZGRQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlz''@;'; put 'put ''LmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLHRoaXMuZGlzYWJsZWQpfW5nT25DaGFuZ2VzKGEpe3RoaXMucGFuZWwmJmEucGFuZWxPcGVuJiZhLnBhbmVsT3Blbi5j''@;'; put 'put ''dXJyZW50VmFsdWUhPT1hLnBhbmVsT3Blbi5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCxhLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUpLHRoaXMucGFuZWwmJmEuZGlzYWJsZWQmJmEuZGlzYWJsZWQuY3VycmVudFZhbHVlIT09YS5kaXNh''@;'; put 'put ''YmxlZC5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUpfXRvZ2dsZVBhbmVsKCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQpfWNvbGxhcHNlUGFuZWxPbkFuaW1h''@;'; put 'put ''dGlvbkRvbmUoYSl7YS5vcGVufHwodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITEpfWdldFBhbmVsU3RhdGVDbGFzc2VzKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLXBhbmVsLSR7YS5zdGF0dXN9ICR7YS5vcGVuPyJjbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4iOiIifWB9Z2V0QWNj''@;'; put 'put ''b3JkaW9uQ29udGVudElkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWNvbnRlbnQtJHthfSdgfWdldEFjY29yZGlvbkhlYWRlcklkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWhlYWRlci0ke2F9YH1zdGVwQ29tcGxldGVUZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2Uo''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcENvbXBsZXRlLHtTVEVQOmEudG9TdHJpbmcoKX0pfXN0ZXBFcnJvclRleHQoYSl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdGVwRXJyb3Ise1NURVA6YS50b1N0cmluZygpfSl9ZW1p''@;'; put 'put ''dFBhbmVsQ2hhbmdlKGEpe2EuaW5kZXghPT10aGlzLl9wYW5lbEluZGV4JiYodGhpcy5fcGFuZWxJbmRleD1hLmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSksYS5vcGVuIT09dGhpcy5wYW5lbE9wZW4mJih0aGlzLnBhbmVsT3BlbkNoYW5nZS5lbWl0KGEub3BlbiksdGhpcy5wYW5l''@;'; put 'put ''bE9wZW49YS5vcGVuKSxhLm9wZW4mJih0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKGlzKSxHZShJeCksR2UoVTEpLEdlKEVzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxNMWUsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5hY2NvcmRpb25EZXNjcmlwdGlvbj1mKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFjY29yZGlvbi1wYW5lbCIsITApKCJjbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIixkLmRpc2FibGVkKX0saW5wdXRzOntkaXNhYmxlZDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxP''@;'; put 'put ''cGVuOltObi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXSxoZWFkaW5nRW5hYmxlZDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nRW5hYmxlZCIsImhlYWRpbmdFbmFibGVkIl0sZXhwbGljaXRIZWFkaW5nTGV2ZWw6W05uLk5vbmUsImNsckFjY29y''@;'; put 'put ''ZGlvblBhbmVsSGVhZGluZ0xldmVsIiwiZXhwbGljaXRIZWFkaW5nTGV2ZWwiXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbZGEoW1UxXSksd2xdLG5nQ29udGVudFNlbGVjdG9yczpKRmUsZGVjbHM6Mix2YXJzOjMs''@;'; put 'put ''Y29uc3RzOltbImhlYWRlckJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIsMywiY2xpY2siLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1h''@;'; put 'put ''Y2NvcmRpb24tc3RhdHVzIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiLDEsImNsci1hY2NvcmRpb24tYW5nbGUiXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29u''@;'; put 'put ''dGVudCIsNCwibmdJZiJdLFsxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoWEZlKSxtdCgwLGVIZSwxMiwxNiwibmctY29udGFpbmVyIiwxKSxRcygxLCJhc3luYyIpKSwy''@;'; put 'put ''JmEmJnhlKCJuZ0lmIixEYygxLDEsZC5wYW5lbCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLEVNXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOmp6ZX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxFMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFjY29y''@;'; put 'put ''ZGlvblNlcnZpY2U9YSx0aGlzLm11bHRpUGFuZWw9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nT25Jbml0KCl7dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nT25DaGFuZ2VzKGEpe2EubXVsdGlQYW5lbC5jdXJyZW50VmFsdWUhPT1hLm11bHRpUGFuZWwucHJldmlvdXNWYWx1ZSYm''@;'; put 'put ''dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRE9NQ2hhbmdlcygpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0QWNj''@;'; put 'put ''b3JkaW9uU3RyYXRlZ3koKXt0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0U3RyYXRlZ3kodGhpcy5tdWx0aVBhbmVsP0R4Lk11bHRpOkR4LkRlZmF1bHQpfWxpc3RlbkZvckRPTUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5wYW5lbHMuY2hhbmdlcy5waXBlKHgyKHRoaXMucGFuZWxzKSkuc3Vic2Ny''@;'; put 'put ''aWJlKGE9PnRoaXMuYWNjb3JkaW9uU2VydmljZS51cGRhdGVQYW5lbE9yZGVyKGEudG9BcnJheSgpLm1hcChkPT5kLmlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShJeCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItYWNjb3JkaW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsRkwsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5wYW5lbHM9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRp''@;'; put 'put ''b24iLCEwKX0saW5wdXRzOnttdWx0aVBhbmVsOltObi5Ob25lLCJjbHJBY2NvcmRpb25NdWx0aVBhbmVsIiwibXVsdGlQYW5lbCJdfSxmZWF0dXJlczpbZGEoW0l4XSksd2xdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm''@;'; put 'put ''KHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxUMWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1h''@;'; put 'put ''Y2NvcmRpb24tY29udGVudCJdLFsiY2xyLXN0ZXAtY29udGVudCJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksQTFl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5n''@;'; put 'put ''czpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tdGl0bGUiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0p''@;'; put 'put ''LGN9KSgpLFJ5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IFdufWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgp''@;'; put 'put ''e3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLEx5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''KXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNv''@;'; put 'put ''bnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoUnkpKX0sYy5cdTAyNzVk''@;'; put 'put ''aXI9RXIoe3R5cGU6Y30pLGN9KSgpLERZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9V3MoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci1hY2NvcmRpb24iXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGsxZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTHl7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBj''@;'; put 'put ''bHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxHZShEWSw4KSxHZShVMSkpfSxjLlx1MDI3NWRp''@;'; put 'put ''cj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxEMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEV5LHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXNdfSksY30pKCksS3plPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLEQxZSxEMWVdfSksY30pKCk7dmFyIGdhPWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93TGVmdD0iQXJyb3dMZWZ0IixjLkFycm93VXA9IkFycm93VXAiLGMuQXJyb3dSaWdodD0iQXJyb3dSaWdodCIsYy5BcnJvd0Rvd249IkFycm93''@;'; put 'put ''RG93biIsYy5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsYy5UYWI9IlRhYiIsYy5FbnRlcj0iRW50ZXIiLGMuRXNjYXBlPSJFc2NhcGUiLGMuU3BhY2U9IlNwYWNlIixjLlNwYWNlYmFyPSIgIixjLkhvbWU9IkhvbWUiLGMuRW5kPSJFbmQiLGMuUGFnZURvd249IlBhZ2VEb3duIixjLlBhZ2VVcD0i''@;'; put 'put ''UGFnZVVwIixjfShnYXx8e30pLGQ3PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJvd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShkN3x8e30pO2Z1bmN0''@;'; put 'put ''aW9uIEkyKGMpe3JldHVybiBjPT09Z2EuQXJyb3dVcHx8Yz09PWQ3LkFycm93VXA/Z2EuQXJyb3dVcDpjPT09Z2EuQXJyb3dEb3dufHxjPT09ZDcuQXJyb3dEb3duP2dhLkFycm93RG93bjpjPT09Z2EuQXJyb3dSaWdodHx8Yz09PWQ3LkFycm93UmlnaHQ/Z2EuQXJyb3dSaWdodDpjPT09Z2Eu''@;'; put 'put ''QXJyb3dMZWZ0fHxjPT09ZDcuQXJyb3dMZWZ0P2dhLkFycm93TGVmdDpjPT09Z2EuU3BhY2V8fGM9PT1kNy5TcGFjZT9nYS5TcGFjZTpjPT09Z2EuRXNjYXBlfHxjPT09ZDcuRXNjYXBlP2dhLkVzY2FwZTpjfWZ1bmN0aW9uIFJZKGMpe2NvbnN0IGw9STIoYy5rZXkpOyhsPT09Z2EuQXJyb3dV''@;'; put 'put ''cHx8bD09PWdhLkFycm93RG93bnx8bD09PWdhLkFycm93TGVmdHx8bD09PWdhLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0IHNjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IFduLHRoaXMuX29wZW5FdmVu''@;'; put 'put ''dENoYW5nZT1uZXcgV24sdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IFduLHRoaXMuX3BvcG92ZXJWaXNpYmxlPW5ldyBXbn1nZXQgb3BlbkNoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBwb3BvdmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLl9wb3Bv''@;'; put 'put ''dmVyVmlzaWJsZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMuX29wZW5FdmVudD1hLHRoaXMuX29wZW5FdmVudENoYW5nZS5uZXh0KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9w''@;'; put 'put ''ZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5uZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9Z2V0IHBvcG92ZXJBbGlnbmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2Jz''@;'; put 'put ''ZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQoYSl7UlkoYSksdGhpcy5vcGVuRXZlbnQ9YSx0aGlzLm9wZW49IXRoaXMub3Blbn1wb3BvdmVyVmlzaWJsZUVtaXQoYSl7dGhpcy5fcG9w''@;'; put 'put ''b3ZlclZpc2libGUubmV4dChhKX1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWduZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj''@;'; put 'put ''fSksY30pKCksTHg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuc21hcnRPcGVuU2VydmljZT1kLHRoaXMuZG9jdW1lbnQ9aCx0aGlzLm91dHNpZGVDbGlja0Nsb3NlPSEwLHRoaXMuc2Nyb2xsVG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Zj8odGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRkQ2xpY2tMaXN0ZW5lcigpLHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKSk6dGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygp''@;'; put 'put ''fSksZC5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShmPT57dGhpcy5pZ25vcmVkRXZlbnQ9Zn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWFkZFNjcm9sbExpc3Rl''@;'; put 'put ''bmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPXhkKHRoaXMuZG9jdW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLmRvY3VtZW50U2Nyb2xsZXIucGlwZSgkbCh0aGlzLnRlc3RGb3JTbWFydFBvcG92''@;'; put 'put ''ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJlbW92ZVNjcm9sbExpc3RlbmVyKCl7dGhpcy5kb2N1bWVudFNjcm9sbGVyJiYodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5z''@;'; put 'put ''dWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRo''@;'; put 'put ''aXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9cmVtb3ZlQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQs''@;'; put 'put ''dGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikpfWFkZEVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3Vt''@;'; put 'put ''ZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXImJih0aGlzLmVzY2FwZUxpc3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBl''@;'; put 'put ''TGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX10ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihh''@;'; put 'put ''KXtsZXQgZD1hLnRhcmdldDtmb3IoO2QuY2xhc3NMaXN0JiYiYm9keSIhPT1kLnBhcmVudEVsZW1lbnQubG9jYWxOYW1lOylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4hIWQuY2xhc3NMaXN0JiYhZC5jbGFzc0xpc3QuY29udGFpbnMoImNsci1wb3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxF''@;'; put 'put ''dmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3RlbmVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEVvKSx4cihzYykseHIo''@;'; put 'put ''dnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxPeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7YS5hbmNob3JCdXR0b25SZWY9ZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo''@;'; put 'put ''THgpLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYW5jaG9yIiwhMCl9fSksY30pKCksTDFlPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgS3IsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNo''@;'; put 'put ''YW5nZS5waXBlKCRsKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0''@;'; put 'put ''ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxlbWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJl''@;'; put 'put ''KCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoTHgpLEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5n''@;'; put 'put ''czpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2''@;'; put 'put ''YXIgaDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfShoMXx8e30pLE9zPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2Mu''@;'; put 'put ''RU5EPTFdPSJFTkQiLGN9KE9zfHx7fSksUHg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oUHh8fHt9KTtjb25zdCBtbT1jPT4oey4uLmMsc2lkZTotMSpj''@;'; put 'put ''LnNpZGV9KSxvNT0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gT3koYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gX2goYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3''@;'; put 'put ''aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9TzFlKGMsbCxhKSxoLT1hLmhlaWdodDticmVhaztjYXNlIDE6ZCs9TzFlKGMsbCxhKSxoKz1sLmhlaWdodDticmVhaztjYXNlIDA6ZC09YS53aWR0aCxoKz1QMWUoYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPVAxZShjLGws''@;'; put 'put ''YSl9cmV0dXJue3hPZmZzZXQ6ZCx5T2Zmc2V0Omh9fWZ1bmN0aW9uIE8xZShjLGwsYSl7bGV0IGQ9MDtzd2l0Y2goYy5hbmNob3Ipe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZCs9bC53aWR0aC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQrPWwud2lkdGh9c3dpdGNoKGMuY29u''@;'; put 'put ''dGVudCl7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkLT1hLndpZHRoLzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZC09YS53aWR0aH1yZXR1cm4gZH1mdW5jdGlvbiBQMWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3Mu''@;'; put 'put ''Q0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBGMWU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5wbGF0Zm9ybUlkPWQsdGhpcy5fc2hvdWxkUmVhbGlnbj1uZXcgV24sdGhpcy5zaG91bGRSZWFsaWduPXRoaXMuX3Nob3VsZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMu''@;'; put 'put ''X3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWduQ29udGVudChhKXtpZighZWwodGhpcy5wbGF0Zm9ybUlkKSlyZXR1cm57eE9mZnNldDowLHlPZmZzZXQ6MH07dGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRTZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50Lmdl''@;'; put 'put ''dEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2Nv''@;'; put 'put ''bnN0IGQ9ZnVuY3Rpb24gWHplKGMsbCl7Y29uc3QgYT1bXSxkX2JvdHRvbT1jLnlPZmZzZXQrbC5oZWlnaHQsZF9sZWZ0PWMueE9mZnNldCxkX3JpZ2h0PWMueE9mZnNldCtsLndpZHRoO3JldHVybiBjLnlPZmZzZXQ+PTB8fGEucHVzaChQeC5UT1ApLGRfbGVmdD49MHx8YS5wdXNoKFB4LkxF''@;'; put 'put ''RlQpLGRfYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8YS5wdXNoKFB4LkJPVFRPTSksZF9yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHxhLnB1''@;'; put 'put ''c2goUHguUklHSFQpLGF9KHRoaXMuY29udGVudE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksaD1kLnJlZHVjZSgoZix2KT0+Zit2LDApO3JldHVybiAxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlz''@;'; put 'put ''T25lVmlvbGF0aW9uKGgpOjE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09aDEuSE9SSVpPTlRBTD90aGlzLmhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9uKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09aDEuVkVSVElDQUw/dGhpcy5oYW5kbGVW''@;'; put 'put ''ZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09aDEuSE9SSVpPTlRBTCYmdGhpcy5oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoaCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVu''@;'; put 'put ''dE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnModGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLnk8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRl''@;'; put 'put ''bnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKG1tKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1''@;'; put 'put ''cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz1faCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVu''@;'; put 'put ''dE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9X2gobzUodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEp''@;'; put 'put ''e3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9T3kobW0sbzUsITApO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPU95KG1tLG81LCEx''@;'; put 'put ''KTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3QgZD1PeShtbSxvNSwhMCk7dGhpcy5jb250ZW50T2Zm''@;'; put 'put ''c2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9T3kobW0sbzUsITEpO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRB''@;'; put 'put ''bmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKG1tKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hv''@;'; put 'put ''ckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz1faChvNSh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29u''@;'; put 'put ''dGVudE9mZnNldHM9X2gobzUodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9T3kobW0sbzUs''@;'; put 'put ''ITEpO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3QgZD1PeShtbSxvNSwhMCk7dGhpcy5j''@;'; put 'put ''b250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihMeCkseHIoaW8pKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFy''@;'; put 'put ''dFBvc2l0aW9uU2VydmljZT12LHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPU0sdGhpcy5zbWFydE9wZW5TZXJ2aWNlPUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMucHJldmlvdXNDb250ZW50''@;'; put 'put ''SGVpZ2h0PW51bGwsdGhpcy5jaGVja0NvbGxlY3Rvcj1uZXcgS3J9c2V0IG9wZW4oYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ISFhfXNldCBjb250ZW50QXQoYSl7dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5wb3NpdGlvbj1hfXNldCBvdXRzaWRlQ2xpY2tDbG9zZShhKXt0aGlz''@;'; put 'put ''LnNtYXJ0RXZlbnRzU2VydmljZS5vdXRzaWRlQ2xpY2tDbG9zZT0hIWF9c2V0IHNjcm9sbFRvQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2Nyb2xsVG9DbG9zZT0hIWF9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7aWYodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW4mJnRoaXMu''@;'; put 'put ''dmlldyl7Y29uc3QgYT10aGlzLnZpZXcucm9vdE5vZGVzWzBdLm9mZnNldEhlaWdodDsodGhpcy5zaG91bGRSZWFsaWdufHxudWxsIT09dGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQmJnRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0IT09YSkmJih0aGlzLnByZXZpb3VzQ29udGVudEhlaWdo''@;'; put 'put ''dD1hLHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1pdCgpKX19bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSks''@;'; put 'put ''dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmbSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249''@;'; put 'put ''ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIpLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITApKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7Y29uc3RbYV09dGhpcy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2Vydmlj''@;'; put 'put ''ZS5jb250ZW50UmVmPWEsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhhLCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEs''@;'; put 'put ''Im9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLGQ9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbkV2ZW50PWR9KSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2goZD0+e3RoaXMucmVuZGVyZXIuYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGQpfSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZpZXcmJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49''@;'; put 'put ''bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGE9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGEpKSx0aGlzLmNvbnRhaW5lci5jbGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcsdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1p''@;'; put 'put ''dCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0aGlzLnZpZXcpcmV0dXJuO2NvbnN0IGE9dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNvbnRlbnQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3Ai''@;'; put 'put ''LGAke2EueU9mZnNldH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7YS54T2Zmc2V0fXB4YCksdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodnMpLEdlKERvKSxHZShTbCksR2UoRW8pLEdlKEYxZSksR2UoTHgpLEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3Bl''@;'; put 'put ''bjpbTm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnQiLCJvcGVuIl0sY29udGVudEF0OltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY29udGVudEF0Il0sb3V0c2lkZUNsaWNrQ2xvc2U6W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNp''@;'; put 'put ''ZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbTm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Nyb2xsVG9DbG9zZSJdfX0pLGN9KSgpLEh4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlPWEsdGhpcy5vcGVuQ2xv''@;'; put 'put ''c2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVX''@;'; put 'put ''aXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZUcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0s''@;'; put 'put ''b3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSxOeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5q''@;'; put 'put ''PUFyKHt9KSxjfSkoKTt2YXIgd2g9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVGVD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KHdofHx7fSk7bGV0IHdwPWNsYXNze2NvbnN0cnVjdG9yKGwpe3RoaXMucmVuZGVyZXI9bCx0aGlzLl91bmxpc3RlbkZ1''@;'; put 'put ''bmNzPVtdfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9cmVzZXQobCl7dGhpcy5fY3VycmVudD1sfWxpc3RlblRvQXJyb3dLZXlzKGwpe3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93dXAiLCgpPT4hdGhpcy5t''@;'; put 'put ''b3ZlKHdoLlVQKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93ZG93biIsKCk9PiF0aGlzLm1vdmUod2guRE9XTikpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5h''@;'; put 'put ''cnJvd2xlZnQiLCgpPT4hdGhpcy5tb3ZlKHdoLkxFRlQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dyaWdodCIsKCk9PiF0aGlzLm1vdmUod2guUklHSFQpKSl9cmVnaXN0ZXJDb250YWluZXIobCxhPSIwIil7dGhpcy5y''@;'; put 'put ''ZW5kZXJlci5zZXRBdHRyaWJ1dGUobCwidGFiaW5kZXgiLGEpLHRoaXMubGlzdGVuVG9BcnJvd0tleXMobCksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uc3BhY2UiLCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpLHRoaXMuX3Vu''@;'; put 'put ''bGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmVudGVyIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKX1tb3ZlVG8obCl7dm9pZCAwIT09bCYmKHRoaXMuY3VycmVudCYmdGhpcy5jdXJyZW50LmJsdXIoKSxsLmZvY3VzKCksdGhpcy5fY3VycmVu''@;'; put 'put ''dD1sKX1tb3ZlKGwpe2xldCBhPSExO2lmKHRoaXMuY3VycmVudCl7Y29uc3QgZD10aGlzLmN1cnJlbnRbbF07ZCYmKEJNKGQpP2Q6Zm8oZCkpLnN1YnNjcmliZShmPT57ZiYmKHRoaXMubW92ZVRvKGYpLGE9ITApfSl9cmV0dXJuIGF9YWN0aXZhdGVDdXJyZW50KCl7cmV0dXJuISghdGhpcy5j''@;'; put 'put ''dXJyZW50fHwhdGhpcy5jdXJyZW50LmFjdGl2YXRlfHwodGhpcy5jdXJyZW50LmFjdGl2YXRlKCksMCkpfWRldGFjaExpc3RlbmVycygpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChsPT5sKCkpfX07d3AuXHUwMjc1ZmFjPWZ1bmN0aW9uKGwpe3JldHVybiBuZXcobHx8d3ApKHhyKEVv''@;'; put 'put ''KSl9LHdwLlx1MDI3NXByb3Y9YW4oe3Rva2VuOndwLGZhY3Rvcnk6d3AuXHUwMjc1ZmFjfSk7Y29uc3QgVjFlPXtwcm92aWRlOndwLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSnplKGMsbCl7cmV0dXJuIGN8fG5ldyB3cChsKX0sZGVwczpbW25ldyBJMSxuZXcgbGQsd3BdLEVvXX07dmFyIFIyPWZ1''@;'; put 'put ''bmN0aW9uKGMpe3JldHVybiBjW2MuQkVGT1JFPS0xXT0iQkVGT1JFIixjW2MuQUZURVI9MV09IkFGVEVSIixjfShSMnx8e30pO2NsYXNzIFRke31UZFsidG9wLXJpZ2h0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sVGRb''@;'; put 'put ''InRvcC1sZWZ0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LFRkWyJib3R0b20tcmlnaHQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LFRkWyJi''@;'; put 'put ''b3R0b20tbGVmdCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LFRkWyJyaWdodC10b3AiXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sVGRb''@;'; put 'put ''InJpZ2h0LWJvdHRvbSJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH0sVGRbImxlZnQtdG9wIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuQ0VOVEVSLGNvbnRlbnQ6T3MuRU5E''@;'; put 'put ''fSxUZFsibGVmdC1ib3R0b20iXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfTtjb25zdCBOTD1uZXcgU3QoIlBPUE9WRVJfSE9TVF9BTkNIT1IiKTtsZXQgUXplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RPcGVuQ2hhbmdlPWF9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfW9uRXNjYXBlS2V5KGEpe251bGwhPT10aGlzLmxhc3RPcGVuQ2hhbmdlJiYoITE9PT10aGlzLmxhc3RPcGVuQ2hhbmdlJiZhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgia2V5dXAuZXNjYXBlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVzY2FwZUtleShmKX0pfSxzdGFuZGFsb25lOiEwfSksY30p''@;'; put 'put ''KCksczU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3NjLEx4LEYxZSx7cHJvdmlkZTpOTCx1c2VFeGlzdGluZzpKaX1dKSx2ZChb''@;'; put 'put ''UXplXSldfSksY30pKCk7Y2xhc3MgT1l7c3RhdGljIGxpbmtQYXJlbnQobCxhLGQpe2wuZm9yRWFjaChoPT5oW2RdPWEpfXN0YXRpYyBsaW5rVmVydGljYWwobCxhPSEwKXtsLmZvckVhY2goKGQsaCk9PntoPjAmJihkLnVwPWxbaC0xXSksaDxsLmxlbmd0aC0xJiYoZC5kb3duPWxbaCsxXSl9''@;'; put 'put ''KSxhJiZsLmxlbmd0aD4xJiYobFswXS51cD1sW2wubGVuZ3RoLTFdLGxbbC5sZW5ndGgtMV0uZG93bj1sWzBdKX19bGV0IHZtPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtjb25zdCBkPWEuY2xvbmVOb2RlKCEwKTtkLmlkJiYoZC5pZD1kLmlkKyItY2xvbmUiKSxkLmNsYXNz''@;'; put 'put ''TGlzdC5hZGQoImRhdGFncmlkLWNlbGwtd2lkdGgtemVybyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgaD10aGlzLmNsaWVudFJlY3QoZCkud2lkdGg7cmV0dXJuIGQucmVtb3ZlKCksaH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVu''@;'; put 'put ''dFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGQ9YS5nZXRCb3VuZGlu''@;'; put 'put ''Z0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGQudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZC5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZC5sZWZ0LDEwKSxyaWdodDpwYXJzZUludChkLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChkLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJ''@;'; put 'put ''bnQoZC5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lkdGgiKSwxMCl9Zm9jdXMoYSl7YS5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxWTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbHJFeHBhbmRUcmlnZ2VyPSEx''@;'; put 'put ''LHRoaXMuc3RhcnRIZWlnaHQ9MH1nZXQgZXhwYW5kQW5pbWF0aW9uKCl7cmV0dXJue3ZhbHVlOnRoaXMuY2xyRXhwYW5kVHJpZ2dlcixwYXJhbXM6e3N0YXJ0SGVpZ2h0OnRoaXMuc3RhcnRIZWlnaHR9fX1hbmltYXRpb25TdGFydChhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmdGhpcy5yZW5k''@;'; put 'put ''ZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKX1hbmltYXRpb25Eb25lKGEpeyJ2b2lkIiE9PWEuZnJvbVN0YXRlJiYodGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ci''@;'; put 'put ''KSx0aGlzLnVwZGF0ZVN0YXJ0SGVpZ2h0KCkpfXVwZGF0ZVN0YXJ0SGVpZ2h0KCl7dGhpcy5zdGFydEhlaWdodD10aGlzLmRvbUFkYXB0ZXIuY29tcHV0ZWRIZWlnaHQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfHwwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKShHZShKaSksR2Uodm0pLEdlKEVvKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmZFUoIkBleHBhbmRBbmltYXRpb24uc3Rh''@;'; put 'put ''cnQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvblN0YXJ0KGYpfSkoIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYW5pbWF0aW9uRG9uZShmKX0pLDImYSYmbFUoIkBleHBhbmRBbmltYXRpb24iLGQuZXhwYW5kQW5pbWF0aW9uKX0saW5wdXRzOntj''@;'; put 'put ''bHJFeHBhbmRUcmlnZ2VyOiJjbHJFeHBhbmRUcmlnZ2VyIn0sZmVhdHVyZXM6W2RhKFt2bV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlv''@;'; put 'put ''bjpbeWgoImV4cGFuZEFuaW1hdGlvbiIsW2l1KCJ0cnVlIDw9PiBmYWxzZSIsW3VzKHtoZWlnaHQ6Int7c3RhcnRIZWlnaHR9fXB4In0pLE0wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7aGVpZ2h0OiIqIn0pKV0pXSldfX0pLGN9KSgpLFBZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLGVVZT0wO2NvbnN0IEZ5PW5ldyBTdCgiSUZfQUNUSVZFX0lEIiksblVlPXtwcm92aWRlOkZ5LHVzZUZhY3Rvcnk6ZnVu''@;'; put 'put ''Y3Rpb24gdFVlKCl7cmV0dXJuKytlVWV9fTtsZXQgaDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRDaGFuZ2U9bmV3IFdufWdldCBjdXJyZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jdXJyZW50Q2hhbmdlLm5leHQoYSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFu''@;'; put 'put ''KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLmNvbnRhaW5lcj1mLHRoaXMuYWN0aXZlQ2hhbmdlPW5ldyBL''@;'; put 'put ''cighMSksdGhpcy53YXNBY3RpdmU9ITEsdGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcoYS5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj1hLmN1cnJlbnRDaGFuZ2Uuc3Vic2NyaWJlKHY9Pnt0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyh2KX0pfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFj''@;'; put 'put ''dGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9c2V0IGFjdGl2ZShhKXthJiYodGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNy''@;'; put 'put ''ZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfWNoZWNrQW5kVXBkYXRlVmlldyhhKXtjb25zdCBkPWE9PT10aGlzLmlkO2QhPT10aGlzLndhc0FjdGl2ZSYmKHRoaXMudXBkYXRlVmlldyhkKSx0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGQpLHRo''@;'; put 'put ''aXMud2FzQWN0aXZlPWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoNyksR2UoRnkpLEdlKFNsKSxHZShEbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkFjdGl2ZSIsIiJdXSxpbnB1dHM6e2FjdGl2''@;'; put 'put ''ZTpbTm4uTm9uZSwiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksTDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMu''@;'; put 'put ''Y29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5zdWJzY3JpcHRpb249YS5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57dGhpcy51cGRhdGVWaWV3KGYpLHRoaXMub3BlbkNoYW5nZS5lbWl0KGYpfSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''Lm9wZW59c2V0IG9wZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRh''@;'; put 'put ''aW5lci5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYyksR2UoU2wpLEdlKERvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46W05uLk5vbmUsImNs''@;'; put 'put ''cklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSxCMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYs''@;'; put 'put ''dGhpcy5leHBhbmQ9dix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godi5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5l''@;'; put 'put ''eHBhbmRlZENoYW5nZS5lbWl0KHYuZXhwYW5kZWQpfSkpLHYuaGFzRXhwYW5kVGVtcGxhdGU9ISFhfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2YgYSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhw''@;'; put 'put ''YW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lm''@;'; put 'put ''KCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2Ug''@;'; put 'put ''dHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wsOCksR2UoRG8p''@;'; put 'put ''LEdlKEppKSxHZShFbyksR2UoVTEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOltObi5Ob25lLCJjbHJJZkV4cGFuZGVkIiwiZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNs''@;'; put 'put ''cklmRXhwYW5kZWRDaGFuZ2UifX0pLGN9KSgpLE8yPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO2NvbnN0IHJV''@;'; put 'put ''ZT17cHJvdmlkZTpuZXcgU3QoIkZPQ1VTX09OX1ZJRVdfSU5JVCIpLHVzZVZhbHVlOiEwfTtsZXQgQkw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7''@;'; put 'put ''cHJvdmlkZXJzOltyVWVdLGltcG9ydHM6W1JhXX0pLGN9KSgpLGFVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxOeF19''@;'; put 'put ''KSxjfSkoKSxQMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmJ1dHRvblN0YXRlPXoxLHRoaXMuc3RhdGU9ejEuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7''@;'; put 'put ''aWYoYSE9PXRoaXMuc3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSB6MS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0''@;'; put 'put ''cmFuc2Zvcm0iKSx0aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSB6MS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUo''@;'; put 'put ''dGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgejEuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgo''@;'; put 'put ''KTticmVhaztjYXNlIHoxLkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKHoxLkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0''@;'; put 'put ''Qm91bmRpbmdDbGllbnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm''@;'; put 'put ''JmhyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpreCx1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpDSGUs''@;'; put 'put ''bmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjbHItbG9hZGluZy1idG4tY29udGVudCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsx''@;'; put 'put ''LCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJzcGlubmVyLWNoZWNrIl0sWzEsImNsci1sb2FkaW5nLWJ0bi1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJzcGFuIiwwKSxtdCgxLFNIZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMixNSGUsMiwx''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDEpKDMseEhlLDIsMSwic3BhbiIsMiksaGUoKSksMiZhJiYoeGUoIkBwYXJlbnQiLHZvaWQgMCkoIm5nU3dpdGNoIixkLnN0YXRlKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuTE9BRElORyksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixkLmJ1''@;'; put 'put ''dHRvblN0YXRlLlNVQ0NFU1MpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9LGRlcGVuZGVuY2llczpbUzIsY3BdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3loKCJwYXJlbnQiLFtpdSgiOmVudGVyIixbXSldKSx5aCgiZGVmYXVsdEJ1''@;'; put 'put ''dHRvbiIsW2l1KCI6ZW50ZXIiLFt1cyh7b3BhY2l0eTowfSksTTAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLHVzKHtvcGFjaXR5OjF9KSldKSxpdSgiOmxlYXZlIixbdXMoe29wYWNpdHk6MH0pXSldKSx5aCgic3Bpbm5lciIsW2l1KCI6ZW50ZXIiLFt1cyh7b3BhY2l0eTowfSksTTAoIjIwMG1z''@;'; put 'put ''IDEwMG1zIGVhc2UtaW4iLHVzKHtvcGFjaXR5OjF9KSldKSxpdSgiOmxlYXZlIixbdXMoe29wYWNpdHk6MX0pLE0wKCIxMDBtcyBlYXNlLW91dCIsdXMoe29wYWNpdHk6MH0pKV0pXSkseWgoInZhbGlkYXRlZCIsW2l1KCI6ZW50ZXIiLFtNMCgiNjAwbXMiLHVQZShbdXMoe3RyYW5zZm9ybToi''@;'; put 'put ''c2NhbGUoMCwwKSIsb2Zmc2V0OjB9KSx1cyh7b3BhY2l0eToxLG9mZnNldDouMn0pLHVzKHt0cmFuc2Zvcm06InNjYWxlKDEuMiwxLjIpIixvZmZzZXQ6LjR9KSx1cyh7dHJhbnNmb3JtOiJzY2FsZSguOSwuOSkiLG9mZnNldDouNn0pLHVzKHt0cmFuc2Zvcm06InNjYWxlKDEsMSkiLG9mZnNl''@;'; put 'put ''dDoxfSldKSldKSxpdSgiOmxlYXZlIixbdXMoe29wYWNpdHk6MX0pLE0wKCIxMDBtcyBlYXNlLW91dCIsdXMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHNVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxsVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKFQwZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v''@;'; put 'put ''ZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3NVZSxhVWVdfSksY30pKCksY1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1j''@;'; put 'put ''b21wb25lbnQiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFZ4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLHVVZT0wLENoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udHJvbC0iKyArK3VVZSx0aGlzLl9pZENoYW5nZT1uZXcgZWkodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQo''@;'; put 'put ''YSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZFVlPTAsZjc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250YWluZXItIisgKytkVWUsdGhpcy5faWRDaGFuZ2U9bmV3IGVpKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlk''@;'; put 'put ''KGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMs''@;'; put 'put ''ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2xldCBGWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRhaW5lcklkU2VydmljZT9gJHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9gJHt0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShmNyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxoVWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJ''@;'; put 'put ''ZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJlcnJvciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKGY3LDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJjbHItc3VidGV4dCIsITApKCJlcnJvciIsITApKX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2''@;'; put 'put ''YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksakw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5l''@;'; put 'put ''cklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShmNyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWhlbHBl''@;'; put 'put ''ciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm''@;'; put 'put ''KHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxmMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPVtdLHRoaXMuX2NvbnRyb2xDaGFuZ2VzPW5ldyBXbix0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzPW5ldyBXbix0''@;'; put 'put ''aGlzLl9oZWxwZXJzPW5ldyBXbn1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLl9jb250cm9sfWdldCBjb250cm9sQ2hhbmdlcygpe3JldHVybiB0aGlzLl9jb250cm9sQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgYWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9u''@;'; put 'put ''YWxDb250cm9sc31nZXQgYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4hIXRoaXMuX2FkZGl0aW9uYWxDb250cm9scz8ubGVuZ3Ro''@;'; put 'put ''fWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sPWEsdGhpcy5fY29udHJvbENoYW5nZXMubmV4dChhKX1hZGRBZGRpdGlvbmFsQ29udHJvbChhKXt0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMu''@;'; put 'put ''cHVzaChhKSx0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLm5leHQodGhpcy5fYWRkaXRpb25hbENvbnRyb2xzKX1zZXRIZWxwZXJzKGEpe3RoaXMuX2hlbHBlcnMubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIEFkPWZ1bmN0aW9uKGMpe3JldHVybiBjLk5PTkU9Ik5PTkUiLGMuVkFMSUQ9IlZBTElEIixjLklOVkFMSUQ9IklOVkFMSUQiLGN9KEFkfHx7fSk7bGV0IGtkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdD1uZXcgV24sdGhpcy5zdGF0dXNDaGFuZ2VzPXRoaXMuZ2V0U3RhdHVzQ2hhbmdlcyhhKS5waXBlKEkwZSgxKSl9dHJpZ2dlclN0YXR1c0NoYW5nZSgpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QubmV4dCgpfWdldFN0''@;'; put 'put ''YXR1c0NoYW5nZXMoYSl7cmV0dXJuIHE4KFthLmNvbnRyb2xDaGFuZ2VzLGEuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5waXBlKHgyKFtdKSldKS5waXBlKFYxKChbZCxoXSk9PntpZihkKXtjb25zdCBmPVtkLC4uLmhdO3JldHVybiB5eChxOChmLm1hcCh2PT52LnN0YXR1c0NoYW5nZXMp''@;'; put 'put ''KSx0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0LnBpcGUoTHIoKCk9PmYubWFwKHY9PnYuc3RhdHVzKSkpKX1yZXR1cm4gTTJ9KSxMcihkPT5kLmluY2x1ZGVzKEFkLklOVkFMSUQpP0FkLklOVkFMSUQ6ZC5pbmNsdWRlcyhBZC5WQUxJRCk/QWQuVkFMSUQ6QWQuTk9ORSkseDIoQWQu''@;'; put 'put ''Tk9ORSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihmMSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIHpMe31mdW5jdGlvbiBaMWUoYyl7cmV0dXJuW2Mse3Byb3ZpZGU6ekws''@;'; put 'put ''dXNlRXhpc3Rpbmc6Y31dfWZ1bmN0aW9uIFcxZShjLGwsYSl7cmV0dXJuIFh0LmNyZWF0ZShkPT57bChkKTtjb25zdCBoPWMuc3Vic2NyaWJlKGQpO3JldHVybigpPT57aC51bnN1YnNjcmliZSgpLGEmJmEoZCl9fSl9bGV0IFVMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2''@;'; put 'put ''KXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5wYXJlbnQ9ZCx0aGlzLnRvZ2dsZVNlcnZpY2U9aCx0aGlzLmZvY3VzU2VydmljZT1mLHRoaXMucGxhdGZvcm1JZD12LHRoaXMuaWQ9U3UoKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0''@;'; put 'put ''aGlzLnJlc2V0Q2hpbGRyZW4oKSx0aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksZHx8dGhpcy5oYW5kbGVSb290Rm9jdXMoKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLnBhcmVudD90aGlzLl91bmxp''@;'; put 'put ''c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSk6KHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93''@;'; put 'put ''dXAiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd2Rvd24iLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLmZv''@;'; put 'put ''Y3VzU2VydmljZS5saXN0ZW5Ub0Fycm93S2V5cyhhKSl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9c2V0IGNvbnRhaW5lcihhKXt0aGlzLl9jb250YWluZXI9YSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi50''@;'; put 'put ''YWIiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHdoLkxFRlQpLGQuc3Rv''@;'; put 'put ''cFByb3BhZ2F0aW9uKCl9KSk6KHRoaXMuZm9jdXNTZXJ2aWNlLnJlZ2lzdGVyQ29udGFpbmVyKGEpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkp''@;'; put 'put ''LHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5jaGlsZHJlbi5waXBlKFlmKDEpKS5zdWJzY3JpYmUoZj0+Zi5mb3JFYWNoKHY9PnYuYmx1cigpKSk7Y29uc3QgaD1kLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVs''@;'; put 'put ''ZW1lbnQ7aCYmZWwodGhpcy5wbGF0Zm9ybUlkKSYmKGEuY29udGFpbnMoaCl8fGg9PT10aGlzLnRyaWdnZXIpfHwodGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1''@;'; put 'put ''bmNzLmZvckVhY2goYT0+YSgpKSx0aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxF''@;'; put 'put ''dmVudCYmc2V0VGltZW91dCgoKT0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P3doLlJJR0hUOndoLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9v''@;'; put 'put ''dEZvY3VzKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQmJnRoaXMuZm9jdXMoKSksdGhpcy5mb2N1c0JhY2tPblRyaWdn''@;'; put 'put ''ZXJXaGVuQ2xvc2VkPWR9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9Zm9jdXMoKXt0aGlzLnRyaWdnZXImJmVsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5mb2N1cygpfWJsdXIoKXt0aGlzLnRyaWdnZXImJmVsKHRoaXMucGxhdGZvcm1J''@;'; put 'put ''ZCkmJnRoaXMudHJpZ2dlci5ibHVyKCl9YWN0aXZhdGUoKXtlbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuY2xpY2soKX1yZXNldENoaWxkcmVuKCl7dGhpcy5jaGlsZHJlbj1uZXcgYngoMSksdGhpcy5wYXJlbnQ/dGhpcy5yaWdodD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigp''@;'; put 'put ''LnBpcGUoTHIoYT0+YVswXSkpOih0aGlzLmRvd249dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFbMF0pKSx0aGlzLnVwPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5hW2EubGVuZ3RoLTFdKSkpfWFkZENoaWxkcmVuKGEpe09ZLmxpbmtWZXJ0aWNh''@;'; put 'put ''bChhKSx0aGlzLnBhcmVudCYmT1kubGlua1BhcmVudChhLHRoaXMuY2xvc2VBbmRHZXRUaGlzKCksd2guTEVGVCksdGhpcy5jaGlsZHJlbi5uZXh0KGEpfW9wZW5BbmRHZXRDaGlsZHJlbigpe3JldHVybiBXMWUodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITAp''@;'; put 'put ''fWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBXMWUoZm8odGhpcyksKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoRW8pLHhyKGMsMTIpLHhyKHNjKSx4cih3cCkseHIoaW8pKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBmVWU9WjFlKFVMKTtsZXQgQng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZXM9bmV3IFdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZh''@;'; put 'put ''YmxlKCl9Y2xvc2VNZW51cygpe3RoaXMuX2NoYW5nZXMubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGdVZT17cHJvdmlkZTpC''@;'; put 'put ''eCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHBVZShjKXtyZXR1cm4gY3x8bmV3IEJ4fSxkZXBzOltbbmV3IEkxLG5ldyBsZCxCeF1dfTtsZXQgbDU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5mb2N1c0hh''@;'; put 'put ''bmRsZXI9aCx0aGlzLmlzTWVudUNsb3NhYmxlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh2LmNoYW5nZXMuc3Vic2NyaWJlKE09PmQub3Blbj1NKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+Zi5t''@;'; put 'put ''YXJrRm9yQ2hlY2soKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2Uoc2MpLEdlKFVMKSxHZShFcyksR2UoQngpKX0s''@;'; put 'put ''Yy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZHJvcGRvd24iLCEwKSgib3BlbiIsZC50b2dnbGVTZXJ2aWNlLm9wZW4pfSxpbnB1dHM6e2lzTWVudUNsb3NhYmxl''@;'; put 'put ''OltObi5Ob25lLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsImlzTWVudUNsb3NhYmxlIl19LGZlYXR1cmVzOltkYShbZ1VlLFYxZSxmVWVdKSx2ZChbczVdKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZ''@;'; put 'put ''cigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3ZhciBBaT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJJR0hUX0NFTlRFUj0wXT0iUklHSFRfQ0VOVEVSIixjW2MuUklHSFRfVE9QPTFdPSJSSUdIVF9UT1AiLGNbYy5SSUdIVF9CT1RUT009Ml09IlJJR0hUX0JPVFRPTSIsY1tjLlRPUF9D''@;'; put 'put ''RU5URVI9M109IlRPUF9DRU5URVIiLGNbYy5UT1BfUklHSFQ9NF09IlRPUF9SSUdIVCIsY1tjLlRPUF9MRUZUPTVdPSJUT1BfTEVGVCIsY1tjLkJPVFRPTV9DRU5URVI9Nl09IkJPVFRPTV9DRU5URVIiLGNbYy5CT1RUT01fUklHSFQ9N109IkJPVFRPTV9SSUdIVCIsY1tjLkJPVFRPTV9MRUZU''@;'; put 'put ''PThdPSJCT1RUT01fTEVGVCIsY1tjLkxFRlRfQ0VOVEVSPTldPSJMRUZUX0NFTlRFUiIsY1tjLkxFRlRfVE9QPTEwXT0iTEVGVF9UT1AiLGNbYy5MRUZUX0JPVFRPTT0xMV09IkxFRlRfQk9UVE9NIixjfShBaXx8e30pO2NsYXNzIGJVZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0''@;'; put 'put ''aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0wLGwuc3R5bGUuYm90dG9tPSJhdXRvIixsLnN0eWxlLmxlZnQ9MCxs''@;'; put 'put ''LnN0eWxlLnJpZ2h0PSJhdXRvIn1hbmNob3IobCxhLGQse29mZnNldFg6aD0wLG9mZnNldFk6Zj0wLHVzZUFuY2hvclBhcmVudDp2PSExfT17fSl7dGhpcy5hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKSx2JiYobD1sLnBhcmVudE5vZGUpLGwuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Y29u''@;'; put 'put ''c3QgTT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBaPU0ubGVmdC1ELmxlZnQraCxyZT1NLnRvcC1ELnRvcCtmO3N3aXRjaChhKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBB''@;'; put 'put ''aS5UT1BfQ0VOVEVSOlorPU0ud2lkdGgvMjticmVhaztjYXNlIEFpLlRPUF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RPUDpaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpyZSs9TS5oZWlnaHQ7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVS''@;'; put 'put ''OnJlKz1NLmhlaWdodCxaKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006cmUrPU0uaGVpZ2h0LForPU0ud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpyZSs9TS5oZWlnaHQvMjticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRF''@;'; put 'put ''UjpyZSs9TS5oZWlnaHQvMixaKz1NLndpZHRofXN3aXRjaChkKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOlotPUQud2lkdGgvMjticmVhaztjYXNlIEFpLlRPUF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RPUDpaLT1ELndpZHRoO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpyZS09RC5oZWlnaHQ7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOnJlLT1ELmhlaWdodCxaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006cmUtPUQu''@;'; put 'put ''aGVpZ2h0LFotPUQud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpyZS09RC5oZWlnaHQvMjticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpyZS09RC5oZWlnaHQvMixaLT1ELndpZHRofWNvbnN0IGNlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxiZT1wYXJzZUludChj''@;'; put 'put ''ZS5tYXJnaW5MZWZ0LDEwKSxFZT1wYXJzZUludChjZS5tYXJnaW5SaWdodCwxMCksQmU9cGFyc2VJbnQoY2UubWFyZ2luVG9wLDEwKSxxZT1wYXJzZUludChjZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6Y2FzZSBBaS5UT1Bf''@;'; put 'put ''UklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6KGQ9PT1BaS5CT1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00pJiYocmUtPXFlLFotPUVlKSwoZD09PUFpLkJPVFRPTV9MRUZUfHxkPT09QWkuTEVGVF9CT1RUT00pJiYocmUtPUJlLForPWJlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWku''@;'; put 'put ''TEVGVF9UT1ApJiYocmUrPUJlLForPWJlKSwoZD09PUFpLlRPUF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihyZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpjYXNlIEFpLkJPVFRPTV9SSUdIVDpjYXNlIEFpLlJJR0hUX0JPVFRP''@;'; put 'put ''TTooZD09PUFpLkJPVFRPTV9MRUZUfHxkPT09QWkuTEVGVF9CT1RUT00pJiYocmUtPXFlLForPWJlKSwoZD09PUFpLkJPVFRPTV9SSUdIVHx8ZD09PUFpLlJJR0hUX0JPVFRPTSkmJihyZS09cWUsWi09RWUpLChkPT09QWkuVE9QX0xFRlR8fGQ9PT1BaS5MRUZUX1RPUCkmJihyZSs9QmUsWis9''@;'; put 'put ''YmUpLChkPT09QWkuVE9QX1JJR0hUfHxkPT09QWkuUklHSFRfVE9QKSYmKHJlKz1CZSxaLT1FZSk7YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOnJlLT1xZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkJPVFRPTV9DRU5URVI6cmUrPUJlLForPWJlLFotPUVlO2JyZWFrO2Nhc2UgQWkuTEVG''@;'; put 'put ''VF9DRU5URVI6cmUrPUJlLHJlLT1xZSxaLT1FZTticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpyZSs9QmUscmUtPXFlLForPWJlfXJldHVybiB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7TWF0aC5yb3VuZChaKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91''@;'; put 'put ''bmQocmUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0''@;'; put 'put ''aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHwiYWJzb2x1dGUiPT09YXx8ImZpeGVkIj09PWF9ZW1pdFNjcm9sbEV2ZW50KCl7dGhpcy5fc2Nyb2xsLm5leHQoKX1hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKXt0aGlzLl9zY3JvbGw9bmV3IFduO2NvbnN0IGE9bDtsZXQgZD1sO2Zvcig7ZCYm''@;'; put 'put ''ZCE9PWRvY3VtZW50JiYodGhpcy5zY3JvbGxzKGQpJiYoZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5wdXNoKGQpKSxkPT09YXx8IXRoaXMuaXNQb3NpdGlvbmVkKGQpKTspZD1kLnBhcmVudE5v''@;'; put 'put ''ZGV9cmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKXtmb3IoY29uc3QgbCBvZiB0aGlzLnNjcm9sbGFibGVFbGVtZW50cylsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLmxlbmd0aD0wLHRo''@;'; put 'put ''aXMuX3Njcm9sbCYmKHRoaXMuX3Njcm9sbC5jb21wbGV0ZSgpLGRlbGV0ZSB0aGlzLl9zY3JvbGwpfXNjcm9sbHMobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpO3JldHVybiJzY3JvbGwiPT09YS5vdmVyZmxvd1h8fCJhdXRvIj09PWEub3ZlcmZsb3dYfHwic2Nyb2xsIj09PWEub3Zl''@;'; put 'put ''cmZsb3dZfHwiYXV0byI9PT1hLm92ZXJmbG93WX19Y29uc3QgSzFlPSJpcy1vZmYtc2NyZWVuIjtsZXQgSFk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50SG9zdD1kLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMSx0aGlzLnBvcG92ZXJPcHRpb25zPXt9LHRo''@;'; put 'put ''aXMudXBkYXRlQW5jaG9yPSExLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrPWg9Pnt0aGlzLmFuY2hvckVsZW0uY29udGFpbnMoaC50YXJnZXQpfHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSx0aGlzLmVsPWEuZ2V0''@;'; put 'put ''KEppKSx0aGlzLnRvZ2dsZVNlcnZpY2U9YS5nZXQoc2MpLHRoaXMucmVuZGVyZXI9YS5nZXQoRW8pLHRoaXMubmdab25lPWEuZ2V0KFdhKSx0aGlzLnJlZj1hLmdldChFcyksdGhpcy5hbmNob3JFbGVtPWQubmF0aXZlRWxlbWVudCx0aGlzLnBvcG92ZXJJbnN0YW5jZT1uZXcgYlVlKHRoaXMu''@;'; put 'put ''ZWwubmF0aXZlRWxlbWVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZSh4Mih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbikpLnN1YnNjcmliZShoPT57aD8odGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5k''@;'; put 'put ''ZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSzFlKSk6KHRoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLMWUpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYo''@;'; put 'put ''dGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMudXBkYXRlQW5jaG9yJiYodGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5wb3BvdmVySW5zdGFuY2UuYW5jaG9yKHRoaXMuYW5jaG9yRWxlbSx0aGlzLmFuY2hvclBvaW50LHRo''@;'; put 'put ''aXMucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMpLnN1YnNjcmliZSgoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfSksdGhpcy5hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpKX1uZ09uRGVzdHJveSgpe3RoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVu''@;'; put 'put ''ZXIoKSx0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWFuY2hvcigpe3RoaXMudXBkYXRlQW5jaG9yPSEwfXJlbGVhc2UoKXt0aGlzLmRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCksdGhpcy5wb3BvdmVySW5zdGFuY2UucmVsZWFzZSgpfWF0dGFjaEVTQ0xpc3RlbmVyKCl7dGhp''@;'; put 'put ''cy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcnx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwia2V5ZG93biIsYT0+e2EmJmEua2V5JiZJMihhLmtl''@;'; put 'put ''eSk9PT1nYS5Fc2NhcGUmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMucmVmLm1hcmtGb3JDaGVjaygpfSl9KX0pfWRldGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVy''@;'; put 'put ''KCksdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwpfWF0dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmZG9jdW1lbnQmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJmRvY3VtZW50LmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9ZGV0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2smJmRvY3VtZW50JiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyJiZkb2N1bWVudC5yZW1v''@;'; put 'put ''dmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoSmksNCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCkscDc9KCgp''@;'; put 'put ''PT57Y2xhc3MgYyBleHRlbmRzIEhZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRyb3Bkb3duLW1lbnUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZHJvcGRvd24iKTtzdXBlcihhLGQpLGg/KHRoaXMuYW5jaG9yUG9pbnQ9QWku''@;'; put 'put ''UklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QKToodGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCksdGhpcy5wb3BvdmVyT3B0aW9ucy5hbGxvd011bHRpcGxlT3Blbj0hMCx0aGlzLnBvcG92ZXJPcHRpb25z''@;'; put 'put ''Lmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyPSEwLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLmZvY3VzSGFuZGxlcj1mfXNldCBwb3NpdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX1JJR0hULHRoaXMucG9wb3ZlclBvaW50''@;'; put 'put ''PUFpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9MRUZULHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9SSUdIVCx0aGlzLnBv''@;'; put 'put ''cG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6ZGVmYXVsdDp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UicmlnaHQtdG9wIjp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hU''@;'; put 'put ''X1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJsZWZ0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1B''@;'; put 'put ''aS5MRUZUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX0JPVFRPTSx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT019fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNI''@;'; put 'put ''YW5kbGVyLmNvbnRhaW5lcj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5mb2N1c0hhbmRsZXIuYWRkQ2hpbGRyZW4odGhpcy5pdGVtcy50b0FycmF5KCkpKSx0aGlzLml0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLmZvY3VzSGFuZGxlci5yZXNldENoaWxkcmVuKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShOTCw4KSxHZShjLDEyKSxHZShVTCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItZHJvcGRvd24tbWVudSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLHpMLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuaXRlbXM9Zil9fSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhy''@;'; put 'put ''KCJyb2xlIiwibWVudSIpLFRyKCJkcm9wZG93bi1tZW51IiwhMCkpfSxpbnB1dHM6e3Bvc2l0aW9uOltObi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGc3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMCxhLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9''@;'; put 'put ''ITEpLGYudHJpZ2dlcj1oLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGw1KSxHZShzYyksR2UoSmkpLEdlKFVMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRp''@;'; put 'put ''bmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgiYXJpYS1leHBhbmRlZCIsZC5hY3RpdmUpLFRyKCJkcm9wZG93bi10b2dnbGUiLGQu''@;'; put 'put ''aXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixkLmFjdGl2ZSkpfX0pLGN9KSgpO2NvbnN0IHlVZT1be3Byb3ZpZGU6ekwsdXNlQ2xhc3M6KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnBsYXRmb3JtSWQ9aCx0aGlzLmlkPVN1KCksdGhpcy5kaXNhYmxlZD0hMSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQsImlkIix0aGlzLmlkKSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsInRhYmluZGV4IiwiLTEiKX1mb2N1cygpe2VsKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiMCIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZWwubmF0aXZlRWxl''@;'; put 'put ''bWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KSl9Ymx1cigpe2VsKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iiwi''@;'; put 'put ''LTEiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYmx1cigpKX1hY3RpdmF0ZSgpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihKaSkseHIoRW8pLHhyKGlv''@;'; put 'put ''KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCl9XTtsZXQgVnk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kcm9wZG93bj1hLHRoaXMuX2Ryb3Bkb3duU2VydmljZT1kLHRoaXMuZm9jdXNhYmxlSXRlbT1ofWdldCBk''@;'; put 'put ''aXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YX1nZXQgZHJvcGRvd25JdGVtSWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmlkfXNldCBkcm9wZG93bkl0''@;'; put 'put ''ZW1JZChhKXt0aGlzLmZvY3VzYWJsZUl0ZW0uaWQ9YX1vbkRyb3Bkb3duSXRlbUNsaWNrKCl7aWYodGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuZHJvcGRvd24udG9nZ2xlU2VydmljZS5vcGVuKXtjb25zdCBhPXRoaXMuZmluZFJvb3REcm9wZG93''@;'; put 'put ''bigpO2EuZm9jdXNIYW5kbGVyLmZvY3VzKCksYS5mb2N1c0hhbmRsZXIuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMX1zZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1l''@;'; put 'put ''bnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQo''@;'; put 'put ''YSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX1maW5kUm9vdERyb3Bkb3duKCl7bGV0IGE9dGhpcy5kcm9wZG93bjtmb3IoO2EucGFyZW50OylhPWEucGFyZW50O3JldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShsNSksR2UoQngpLEdlKHpMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duSXRlbSIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBkLm9uRHJvcGRvd25JdGVtQ2xpY2soKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNwYWNlS2V5ZG93bihmKX0pKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVudGVyS2V5ZG93bihmKX0pLDImYSYmKGhy''@;'; put 'put ''KCJyb2xlIiwibWVudWl0ZW0iKSgiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImlkIixkLmRyb3Bkb3duSXRlbUlkKSxUcigiZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkcm9wZG93bi1pdGVtIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOltObi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2Fi''@;'; put 'put ''bGVkIl0sZHJvcGRvd25JdGVtSWQ6W05uLk5vbmUsImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W2RhKFt5VWVdKV19KSxjfSkoKSxOWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2ko''@;'; put 'put ''e3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxPMixBc119KSxjfSkoKSxWWT0oKCk9PntjbGFzcyBje3NldCB0cmlnZ2VyRWwoYSl7dGhpcy5fdHJpZ2dlckVsPWF9Zm9jdXNUcmlnZ2VyKCl7dGhpcy5fdHJpZ2dlckVsJiZ0aGlzLl90cmlnZ2VyRWwuZm9jdXMoKX19cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBXbn1nZXQgaWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faWQuYXNPYnNlcnZhYmxlKCl9c2V0SWQoYSl7dGhpcy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWkw9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5lbD1kLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPWYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zPVtdLHRoaXMuZG9jdW1lbnQ9dn1uZ09uSW5pdCgpe3RoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIudHJpZ2dlckVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMu''@;'; put 'put ''YXJpYUV4cGFuZGVkPWE7Y29uc3QgZD10aGlzLmlzT3Blbjt0aGlzLmlzT3Blbj1hLCF0aGlzLmlzT3BlbiYmZCYmdGhpcy5mb2N1c09uQ2xvc2UoKX0pLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGE9PnRoaXMuYXJpYUNvbnRyb2w9YSkpfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9Zm9jdXNPbkNsb3NlKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmIXRoaXMuaXNPcGVuJiZ0aGlzLmRv''@;'; put 'put ''Y3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmRvY3VtZW50LmJvZHkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSxHZShKaSksR2UoQlkpLEdlKFZZKSxHZSh2''@;'; put 'put ''cyksR2UoaW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxUcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLFdMPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEpe3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlz''@;'; put 'put ''KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFpMLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJz''@;'; put 'put ''OjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigic2lnbnBvc3QiLCEwKX0saW5wdXRzOntzaWducG9zdFRyaWdnZXJBcmlhTGFiZWw6W05uLk5vbmUsImNsclNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCIsInNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCJdfSxmZWF0dXJlczpb''@;'; put 'put ''ZGEoW1ZZLEJZXSksdmQoW3M1XSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzaWducG9zdC1hY3Rpb24iLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIs''@;'; put 'put ''ImJ0bi1saW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxtdCgwLEVIZSwzLDIsIm5nLWNvbnRhaW5lciIsMCksWXIoMSkpLDImYSYmeGUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W2JhLHJz''@;'; put 'put ''LFpMXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBfVWU9eyJ0b3AtbGVmdCI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9SSUdIVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NF''@;'; put 'put ''TlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX0NFTlRFUixvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtcmlnaHQiOnthbmNob3JQb2ludDpBaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fTEVGVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJyaWdodC10b3AiOnthbmNo''@;'; put 'put ''b3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDox''@;'; put 'put ''Nn0sInJpZ2h0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJib3R0b20tcmlnaHQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfTEVGVCxv''@;'; put 'put ''ZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfQ0VOVEVSLG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLWxlZnQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92''@;'; put 'put ''ZXJQb2ludDpBaS5UT1BfUklHSFQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJsZWZ0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5M''@;'; put 'put ''RUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LGRlZmF1bHQ6e2Fu''@;'; put 'put ''Y2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9fSx3VWU9WyJ0b3AtbGVmdCIsInRvcC1taWRkbGUiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJyaWdodC1taWRkbGUiLCJyaWdodC1ib3R0b20iLCJib3R0''@;'; put 'put ''b20tcmlnaHQiLCJib3R0b20tbWlkZGxlIiwiYm90dG9tLWxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtbWlkZGxlIiwibGVmdC10b3AiXTtsZXQgcTFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIWXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9u''@;'; put 'put ''U3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXI9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLnNpZ25wb3N0Q29udGVudElkPVN1KCksIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItc2lnbnBvc3QtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1zaWdu''@;'; put 'put ''cG9zdCIpO3RoaXMucG9zaXRpb249InJpZ2h0LW1pZGRsZSIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSEwLGYuc2V0SWQodGhpcy5zaWducG9zdENvbnRlbnRJZCksdGhpcy5kb2N1bWVudD1EfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7''@;'; put 'put ''dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbiksdGhpcy5fcG9zaXRpb249YSYmd1VlLmluZGV4T2YoYSk+LTE/YToicmlnaHQtbWlkZGxlIix0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlz''@;'; put 'put ''LnBvc2l0aW9uKTtjb25zdCBkPV9VZVt0aGlzLnBvc2l0aW9uXTt0aGlzLmFuY2hvclBvaW50PWQuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQ9ZC5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRZPWQub2Zmc2V0WSx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNl''@;'; put 'put ''dFg9ZC5vZmZzZXRYfWNsb3NlKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLGVsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0''@;'; put 'put ''aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoTkwsOCksR2UoaXMpLEdlKEJZKSxHZShWWSksR2UoaW8pLEdlKHZzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1zaWducG9zdC1jb250ZW50Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYob3AoImlkIixkLnNpZ25wb3N0Q29udGVudElkKSxUcigic2lnbnBvc3QtY29udGVudCIsITApKX0saW5wdXRzOntzaWducG9zdENsb3NlQXJpYUxh''@;'; put 'put ''YmVsOltObi5Ob25lLCJjbHJTaWducG9zdENsb3NlQXJpYUxhYmVsIiwic2lnbnBvc3RDbG9zZUFyaWFMYWJlbCJdLHBvc2l0aW9uOltObi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOkFIZSxkZWNsczo4LHZhcnM6Myxj''@;'; put 'put ''b25zdHM6W1sxLCJzaWducG9zdC13cmFwIl0sWzEsInBvcG92ZXItcG9pbnRlciJdLFsxLCJzaWducG9zdC1jb250ZW50LWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsidGFi''@;'; put 'put ''aW5kZXgiLCIwIiwxLCJzaWducG9zdC1jb250ZW50LWJvZHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShUSGUpLGRlKDAsImRpdiIsMCksR3QoMSwiZGl2IiwxKSxkZSgyLCJkaXYiLDIpLFlyKDMpLGRlKDQsImJ1dHRvbiIsMyksSHQoImNsaWNrIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBkLmNsb3NlKCl9KSxHdCg1LCJjZHMtaWNvbiIsNCksaGUoKSgpLGRlKDYsImRpdiIsNSksWXIoNywxKSxoZSgpKCkpLDImYSYmKGZlKDQpLGhyKCJhcmlhLWxhYmVsIixkLnNpZ25wb3N0Q2xvc2VBcmlhTGFiZWx8fGQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2UpKCJh''@;'; put 'put ''cmlhLWNvbnRyb2xzIixkLnNpZ25wb3N0Q29udGVudElkKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpKX0sZGVwZW5kZW5jaWVzOltyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQ1VlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29u''@;'; put 'put ''cyhteCxST2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxCTCxPMl19KSxjfSkoKSxqWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5faWQ9bmV3IFdufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWN9KSxjfSkoKSx6WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl''@;'; put 'put ''cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo''@;'; put 'put ''KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''eHIoc2MpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxtNz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOltkYShbalkselldKSx2ZChbczVdKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IE1VZT1bImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImxlZnQiXSx4VWU9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCB2Nz0oKCk9Pntj''@;'; put 'put ''bGFzcyBjIGV4dGVuZHMgSFl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoc3VwZXIoYSxkKSx0aGlzLnRvb2x0aXBJZFNlcnZpY2U9aCx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9ZiwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBp''@;'; put 'put ''bnNpZGUgb2YgYSBjbHItdG9vbHRpcCIpO3RoaXMuaWQ9U3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe2NvbnN0IGQ9YXx8IiI7dGhpcy5faWQ9ZCx0aGlzLnRvb2x0aXBJZFNlcnZpY2UudXBkYXRlSWQoZCl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0''@;'; put 'put ''aW9ufXNldCBwb3NpdGlvbihhKXtjb25zdCBkPXRoaXMuX3Bvc2l0aW9uLGg9TVVlLmluY2x1ZGVzKGEpP2E6InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0p''@;'; put 'put ''LGgpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX0JP''@;'; put 'put ''VFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQ''@;'; put 'put ''b2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50''@;'; put 'put ''PUFpLlJJR0hUX1RPUDticmVhaztkZWZhdWx0OiFmdW5jdGlvbiBTVWUoYyl7dGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdmFsdWU6ICR7Y31gKX0oaCl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplLGg9eFVlLmluY2x1ZGVz''@;'; put 'put ''KGEpP2E6InNtIjt0aGlzLl9zaXplPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KX1uZ09uSW5pdCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwicmln''@;'; put 'put ''aHQifW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQoKX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YSxuZXdDbGFzczpk''@;'; put 'put ''fSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShOTCw4''@;'; put 'put ''KSxHZShqWSksR2UoelkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVu''@;'; put 'put ''dGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKG9wKCJpZCIsZC5pZCksaHIoInJvbGUiLCJ0b29sdGlwIiksX2QoIm9wYWNpdHkiLDEpLFRyKCJ0b29sdGlwLWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3NpdGlv''@;'; put 'put ''bjpbTm4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdLHNpemU6W05uLk5vbmUsImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVu''@;'; put 'put ''Y2Fwc3VsYXRpb246Mn0pLGN9KSgpLGI3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChkLmlkLnN1YnNjcmliZShmPT50aGlzLmFyaWFEZXNj''@;'; put 'put ''cmliZWRCeT1mKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNob3dUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9aGlkZVRvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1vbk1vdXNlRW50ZXIoKXt0aGlz''@;'; put 'put ''LnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyVHJpZ2dlcigpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSxHZShq''@;'; put 'put ''WSksR2UoelkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkh0KCJmb2N1cyIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5zaG93VG9vbHRpcCgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaGlkZVRvb2x0aXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZl''@;'; put 'put ''KCl9KSwyJmEmJihocigiYXJpYS1kZXNjcmliZWRieSIsZC5hcmlhRGVzY3JpYmVkQnkpKCJyb2xlIiwiYnV0dG9uIiksVHIoInRvb2x0aXAtdHJpZ2dlciIsITApKX19KSxjfSkoKSxFVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsTzIsQXNdfSksY30pKCksVFVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpj''@;'; put 'put ''fSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W05ZLENVZSxFVWVdfSksY30pKCk7dmFyIHk3PWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLkNPTVBBQ1Q9ImNvbXBhY3QiLGN9KHk3fHx7fSk7bGV0IENwPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm1pbkxhYmVsU2l6ZT0xLHRoaXMubWF4TGFiZWxTaXplPTEyLHRoaXMubGF5b3V0PXk3LkhPUklaT05UQUwsdGhpcy5sYXlvdXRWYWx1ZXM9T2JqZWN0LmtleXMoeTcpLm1hcChhPT55N1thXSksdGhpcy5fbGFiZWxTaXplPTJ9Z2V0IGxhYmVs''@;'; put 'put ''U2l6ZSgpe3JldHVybiB0aGlzLl9sYWJlbFNpemV9c2V0IGxhYmVsU2l6ZShhKXt0aGlzLmxhYmVsU2l6ZUlzVmFsaWQoYSkmJih0aGlzLl9sYWJlbFNpemU9YSl9Z2V0IGxheW91dENsYXNzKCl7cmV0dXJuYGNsci1mb3JtLSR7dGhpcy5sYXlvdXR9YH1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGF5b3V0PT09eTcuVkVSVElDQUx9aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09eTcuSE9SSVpPTlRBTH1pc0NvbXBhY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT15Ny5DT01QQUNUfWlzVmFsaWQoYSl7cmV0dXJuIHRoaXMubGF5b3V0VmFsdWVzLmluZGV4T2YoYSk+''@;'; put 'put ''LTF9bGFiZWxTaXplSXNWYWxpZChhKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihhKSYmYT49dGhpcy5taW5MYWJlbFNpemUmJmE8PXRoaXMubWF4TGFiZWxTaXplfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxkcz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9''@;'; put 'put ''dix0aGlzLmVuYWJsZUdyaWQ9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBsYWJlbFRleHQoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnR9bmdPbkluaXQoKXt0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXQsKHRoaXMu''@;'; put 'put ''Y29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlKSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2Uu''@;'; put 'put ''aXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''YWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRD''@;'; put 'put ''aGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvckF0dHI9YSx0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXR8fGAke2F9LWxhYmVsYH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9ZGlzYWJsZUdyaWQoKXt0aGlzLmVuYWJsZUdy''@;'; put 'put ''aWQ9ITF9b25DbGljayhhKXt0aGlzLnByZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldChhKX1wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl7dGhpcy5zaWducG9zdCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQuY29u''@;'; put 'put ''dGFpbnMoYS50YXJnZXQpJiZhLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKENwLDgpLEdlKGYxLDgpLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJs''@;'; put 'put ''YWJlbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFdMLDUsSmkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuc2lnbnBvc3Q9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYpfSksMiZhJiZocigiaWQiLGQuaWRBdHRyKSgiZm9yIixkLmZvckF0dHIpfSxpbnB1dHM6e2lkSW5wdXQ6W05uLk5vbmUsImlkIiwiaWRJbnB1dCJdLGZvckF0dHI6W05uLk5vbmUsImZvciIsImZvckF0dHIiXX19KSxjfSkoKSxBVWU9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIEZZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoR2UoQ2gsOCksR2UoZjcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQi''@;'; put 'put ''LCEwKSgic3VjY2VzcyIsITApKX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNsYXNzTmFtZT0iIn1jb250cm9sQ2xhc3MoYT1BZC5OT05FLGQ9ITEsaD0iIil7Y29uc3QgZj1bdGhpcy5jbGFzc05hbWUsaF07c3dpdGNoKGEpe2Nhc2UgQWQuVkFMSUQ6Zi5wdXNoKCJjbHItc3VjY2VzcyIpO2JyZWFrO2Nhc2UgQWQu''@;'; put 'put ''SU5WQUxJRDpmLnB1c2goImNsci1lcnJvciIpfXJldHVybiBkJiZ0aGlzLmxheW91dFNlcnZpY2UmJi0xPT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpJiZmLnB1c2goYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNlcnZpY2UubWF4TGFiZWxTaXplLXRoaXMubGF5b3V0U2Vy''@;'; put 'put ''dmljZS5sYWJlbFNpemV9IGNsci1jb2wtMTJgKSxmLmpvaW4oIiAiKS50cmltKCl9aW5pdENvbnRyb2xDbGFzcyhhLGQpe2QmJmQuY2xhc3NOYW1lJiYodGhpcy5jbGFzc05hbWU9ZC5jbGFzc05hbWUsZC5jbGFzc05hbWUuc3BsaXQoIiAiKS5mb3JFYWNoKGY9PntmLnN0YXJ0c1dpdGgoImNs''@;'; put 'put ''ci1jb2wiKSYmYS5yZW1vdmVDbGFzcyhkLGYpfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihDcCw4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksXzc9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLHRoaXMubmdDb250cm9sU2VydmljZT1mLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChh''@;'; put 'put ''LnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLnN0YXRlPXYsc2V0VGltZW91dCgoKT0+e3RoaXMudXBkYXRlSGVscGVycygpfSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuY29udHJvbD12fSksZi5hZGRpdGlv''@;'; put 'put ''bmFsQ29udHJvbHNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5hZGRpdGlvbmFsQ29udHJvbHM9dn0pKX1nZXQgc2hvd0hlbHBlcigpe3JldHVybiEhdGhpcy5jb250cm9sSGVscGVyQ29tcG9uZW50fWdldCBzaG93VmFsaWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09''@;'; put 'put ''QWQuVkFMSUQmJnRoaXMuc3VjY2Vzc01lc3NhZ2VQcmVzZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BZC5JTlZBTElEJiZ0aGlzLmVycm9yTWVzc2FnZVByZXNlbnR9Z2V0IHN1Y2Nlc3NNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhp''@;'; put 'put ''cy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudH1nZXQgZXJyb3JNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sRXJyb3JDb21wb25lbnR9Z2V0IHRvdWNoZWQoKXtyZXR1cm4hKCF0aGlzLmNvbnRyb2w/LnRvdWNoZWQmJiF0aGlzLmFkZGl0aW9uYWxDb250cm9scz8uc29tZShh''@;'; put 'put ''PT5hLnRvdWNoZWQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5j''@;'; put 'put ''b250cm9sQ2xhc3MoIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BZC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BZC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRT''@;'; put 'put ''ZXJ2aWNlLmlzVmVydGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMu''@;'; put 'put ''c2hvd0ludmFsaWQsc2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGtkKSxHZShDcCw4KSxHZShEZCksR2UoZjEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5''@;'; put 'put ''cGU6Yyxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxkcyw1KSxhbyhoLEFVZSw1KSxhbyhoLGhVZSw1KSxhbyhoLGpMLDUpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmxhYmVsPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29t''@;'; put 'put ''cG9uZW50PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBZTHtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9y''@;'; put 'put ''PWEuaW5qZWN0b3IsIXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoV2cpLGY9dGhpcy5pbmplY3Rvci5nZXQoSmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY1VlKSk7Y29uc3Qgdj1oLnJlc29sdmVDb21w''@;'; put 'put ''b25lbnRGYWN0b3J5KGwpLE09W107TVtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBEPWEuY3JlYXRlQ29tcG9uZW50KHYsdm9pZCAwLHZvaWQgMCxNKTthLnJlbW92ZSgwKSx0aGlzLmluamVjdG9yPUQuaW5qZWN0b3J9fWdldChsLGEpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChsLGEp''@;'; put 'put ''fX1sZXQgVVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNoZWQ9bmV3IFdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWQuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMuX3RvdWNoZWQubmV4dCgpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgWlk9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRk9STT0iZm9ybSIsYy5NT0RFTD0ibW9kZWwiLGN9KFpZfHx7fSk7bGV0IHc3PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudmNyPWEsdGhpcy53cmFwcGVyVHlwZT1kLHRoaXMuX25nQ29udHJvbD1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmVsPU0sdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmFkZGl0aW9uYWxEaWZm''@;'; put 'put ''ZXI9bmV3IE1hcCxoJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWguZ2V0KGYxLG51bGwpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGtkLG51bGwpLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLmdldChEZCxudWxsKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1oLmdldChV''@;'; put 'put ''WSxudWxsKSx0aGlzLmRpZmZlcnM9aC5nZXQod00sbnVsbCkpLHRoaXMuY29udHJvbENsYXNzU2VydmljZSYmdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmluaXRDb250cm9sQ2xhc3ModixNLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMucHVzaCh0aGlzLm1hcmtDb250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMubWFya0FzVG91Y2hlZCgpfSkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhlbHBlcnNDaGFu''@;'; put 'put ''Z2Uuc3Vic2NyaWJlKEQ9Pnt0aGlzLnNldEFyaWFEZXNjcmliZWRCeShEKX0pKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYodGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPWEpfWdldCBoYXNBZGRpdGlvbmFsQ29u''@;'; put 'put ''dHJvbHMoKXtyZXR1cm4gdGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNpemU+MH1uZ09uSW5pdCgpe3RoaXMuX2NvbnRhaW5lckluamVjdG9yPW5ldyBZTCh0aGlzLndyYXBwZXJUeXBlLHRoaXMudmNyLHRoaXMuaW5kZXgpLHRoaXMuY29udHJvbElkU2VydmljZT10aGlzLl9jb250YWluZXJJbmpl''@;'; put 'put ''Y3Rvci5nZXQoQ2gpLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChmNyxudWxsKSx0aGlzLl9pZD90aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQ9dGhpcy5faWQ6dGhpcy5faWQ9dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkLHRoaXMubmdDb250cm9s''@;'; put 'put ''U2VydmljZSYmdGhpcy5fbmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2w/KHRoaXMubmdDb250cm9sPXRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sLHRoaXMubmdDb250cm9sU2VydmljZS5hZGRBZGRpdGlvbmFsQ29udHJvbCh0aGlzLl9uZ0NvbnRyb2wpLHRo''@;'; put 'put ''aXMuYWRkaXRpb25hbERpZmZlci5zZXQodGhpcy5fbmdDb250cm9sLHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKToodGhpcy5uZ0NvbnRyb2w9dGhpcy5fbmdDb250cm9sLHRoaXMubmdDb250cm9sU2VydmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9s''@;'; put 'put ''KSx0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSl9bmdEb0NoZWNrKCl7aWYodGhpcy50cmlnZ2VyRG9DaGVjayh0aGlzLmRpZmZlcix0aGlzLm5nQ29udHJvbCksdGhpcy5oYXNBZGRpdGlvbmFsQ29udHJvbHMpZm9yKGNvbnN0W2EsZF1v''@;'; put 'put ''ZiB0aGlzLmFkZGl0aW9uYWxEaWZmZXIpdGhpcy50cmlnZ2VyRG9DaGVjayhkLGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YT8udW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5p''@;'; put 'put ''ZkNvbnRyb2xTdGF0ZVNlcnZpY2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fXRyaWdnZXJEb0NoZWNrKGEsZCl7aWYoYSl7Y29uc3Qg''@;'; put 'put ''aD1hLmRpZmYoZCk7aCYmaC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZj0+eyhmLmtleT09PVpZLkZPUk18fGYua2V5PT09WlkuTU9ERUwpJiZmLmN1cnJlbnRWYWx1ZSE9PWYucHJldmlvdXNWYWx1ZSYmdGhpcy50cmlnZ2VyVmFsaWRhdGlvbigpfSl9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29u''@;'; put 'put ''dHJvbCYmKHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5oYXNBZGRpdGlvbmFsQ29udHJvbHMmJnRo''@;'; put 'put ''aXMubmdDb250cm9sU2VydmljZS5hZGRpdGlvbmFsQ29udHJvbHM/LmZvckVhY2goYT0+e2EuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfXNldEFyaWFEZXNjcmliZWRCeShhKXtpZihhLnNob3cpe2NvbnN0IGQ9dGhpcy5nZXRB''@;'; put 'put ''cmlhRGVzY3JpYmVkQnlJZChhKTtpZihudWxsIT09ZClyZXR1cm4gdm9pZCB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiLGQpfXRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVu''@;'; put 'put ''dCwiYXJpYS1kZXNjcmliZWRieSIpfWdldEFyaWFEZXNjcmliZWRCeUlkKGEpe2NvbnN0IGQ9dGhpcy5jb250YWluZXJJZFNlcnZpY2U/LmlkfHx0aGlzLmNvbnRyb2xJZFNlcnZpY2U/LmlkO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9W2Ake2R9LWhlbHBlcmBdO3JldHVybiBhLnNob3dJ''@;'; put 'put ''bnZhbGlkP2gucHVzaChgJHtkfS1lcnJvcmApOmEuc2hvd1ZhbGlkJiZoLnB1c2goYCR7ZH0tc3VjY2Vzc2ApLGguam9pbigiICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoajYpLEdlKERzKSxHZShkMSksR2UoRW8pLEdlKEpp''@;'; put 'put ''KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkh0KCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJm9wKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn19KSxjfSko''@;'; put 'put ''KSxRMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1T''@;'; put 'put ''dWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJrQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCksR2UoVVkpKX0sYy5cdTAyNzVkaXI9RXIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGRzLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsx''@;'; put 'put ''JmEmJkh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwyJmEmJlRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2Uu''@;'; put 'put ''aXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbTm4uTm9uZSwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LGZlYXR1cmVzOltkYShbQ3AsVVldKV19KSxjfSkoKSxhdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBc119KSxjfSkoKTtjb25zdCBXWT1uZXcgU3QoIklTX1RPR0dMRSIpLFJVZT17cHJvdmlkZTpXWSx1c2VGYWN0b3J5OmZ1bmN0aW9u''@;'; put 'put ''IElVZSgpe3JldHVybiBuZXcgZWkoITEpfX07bGV0IFNoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLnRvZ2dsZT1kfSkpfW5nT25Jbml0''@;'; put 'put ''KCl7dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoV1kpKX0sYy5cdTAy''@;'; put 'put ''NzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxkcyw3KSxhbyhoLElkLDcpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihk''@;'; put 'put ''LmxhYmVsPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNoZWNrYm94PWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItY2hlY2tib3gtd3JhcHBlciIsIWQudG9nZ2xlKSgiY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQiLG51''@;'; put 'put ''bGw9PWQuY2hlY2tib3g/bnVsbDpkLmNoZWNrYm94LmNvbnRyb2xEaXNhYmxlZCkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbZGEoW0NoLFJVZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6REhlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShrSGUpLFlyKDApLFlyKDEsMSksbXQoMixJSGUsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLHhlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W2JhLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxJZD0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEsU2gsZCxoLGYsdiksdGhpcy5jb250cm9sPWgsdGhpcy50b2dnbGU9TX1nZXQgY29udHJvbERpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWR9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5p''@;'; put 'put ''dCgpO2NvbnN0IGE9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoV1ksbnVsbCk7YSYmbnVsbCE9PXRoaXMudG9nZ2xlJiZhLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyks''@;'; put 'put ''R2UoSmkpLElmKCJjbHJUb2dnbGUiKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJyb2xlIixudWxsIT09ZC50''@;'; put 'put ''b2dnbGU/InN3aXRjaCI6bnVsbCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxCeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgXzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0Nv''@;'; put 'put ''bnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlubGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1nZXQgYWxs''@;'; put 'put ''Q2hlY2tib3hlc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQmJighdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFsQ29udHJvbHMuZXZlcnkoYT0+YS5kaXNhYmxlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJp''@;'; put 'put ''YVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCw4KSxHZShEZCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsSWQsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jaGVja2JveGVzPWYpfX0s''@;'; put 'put ''aG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsZC5yb2xlKSxUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmFsbENoZWNrYm94ZXNEaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9''@;'; put 'put ''LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbZGEoW2tkLGYxLERkLGY3XSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpMSGUsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNs''@;'; put 'put ''YXNzIiwiY2xyLXN1YnRleHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRk''@;'; put 'put ''ZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFJIZSksWXIoMCks''@;'; put 'put ''bXQoMSxPSGUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSxZcigzLDEpLG10KDQsUEhlLDIsMCwiZGl2IiwyKSg1LEJIZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUi''@;'; put 'put ''LGQuY2xySW5saW5lKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMikseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZHx8ZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSks''@;'; put 'put ''Y30pKCksTFVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLGF1''@;'; put 'put ''LFZ4LGF1XX0pLGN9KSgpO2Z1bmN0aW9uIHFmKGMpe3JldHVybiBudWxsIT09YyYmKCJzdHJpbmciPT10eXBlb2YgYz9jLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBjJiZjKX1sZXQgUmQ9KCgpPT57Y2xhc3MgY3tnZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNs''@;'; put 'put ''YXNzKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuX2lubGluZT1xZihhKX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9c2V0IGNsckludmVyc2UoYSl7dGhpcy5faW52ZXJzZT1xZihhKX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0''@;'; put 'put ''aGlzLl9zbWFsbH1zZXQgY2xyU21hbGwoYSl7dGhpcy5fc21hbGw9cWYoYSl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNsck1lZGl1bShhKXt0aGlzLl9tZWRpdW09cWYoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1idXN5IiwhMCksVHIoInNwaW5uZXIiLGQuc3Bpbm5lckNsYXNzKSgic3Bp''@;'; put 'put ''bm5lci1pbmxpbmUiLGQuaW5saW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLGQuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsZC5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIsZC5tZWRpdW1DbGFzcykpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJ''@;'; put 'put ''bnZlcnNlIixjbHJTbWFsbDoiY2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGp5PSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO3ZhciBibT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwi''@;'; put 'put ''LGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfShibXx8e30pO2xldCBlZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMucGxhdGZvcm1JZD1kfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVu''@;'; put 'put ''dFJlZi5uYXRpdmVFbGVtZW50fWZvY3VzKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKGlvKSl9LGMuXHUwMjc1ZGlyPUVy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzSXRlbSIsIiJdXX0pLGN9KSgpLHp5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5kaXJlY3Rpb249Ym0uVkVSVElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnM9W10sdGhpcy5mb2N1c0NoYW5nZT1uZXcgS3IsdGhpcy5fY3VycmVudD0wfWdldCBmb2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLl9mb2N1c2FibGVJdGVtczp0aGlzLmNscktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRv''@;'; put 'put ''QXJyYXkoKTpbXX1zZXQgZm9jdXNhYmxlSXRlbXMoYSl7QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1hLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCkpfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50''@;'; put 'put ''fWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEpfWdldCBjdXJyZW50SXRlbSgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVs''@;'; put 'put ''ZW1lbnQoKXtyZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJdGVtfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMo''@;'; put 'put ''KSksdGhpcy5pbml0aWFsaXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlS2V5Ym9hcmRFdmVudChhKXtpZih0aGlzLmN1cnJlbnRJdGVtRWxlbWVudCE9PWEudGFyZ2V0KXtjb25zdCBkPXRoaXMuZ2V0''@;'; put 'put ''SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShkKSYmKHRoaXMuY3VycmVudD1kKX10aGlzLnByZXZLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVBy''@;'; put 'put ''ZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudCsxKTphLmNvZGU9PT1nYS5Ib21lP3RoaXMubW92ZVRvKDApOmEuY29kZT09PWdhLkVuZCYmdGhpcy5tb3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksUlko''@;'; put 'put ''YSl9c2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGEpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO2Q+LTEmJnRoaXMubW92ZVRvKGQpfWZvY3VzQ3VycmVudCgpe3RoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9''@;'; put 'put ''bW92ZVRvKGEpe3RoaXMucG9zaXRpb25JblJhbmdlKGEpJiYodGhpcy5jdXJyZW50PWEsdGhpcy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGEpe3JldHVybiBhPj0wJiZhPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2N1cnJlbnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1pbml0aWFsaXplRm9jdXMoKXt0aGlzLmZvY3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0''@;'; put 'put ''aCYmKHRoaXMuX2N1cnJlbnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSx0aGlzLmZvY3VzT25Mb2FkJiYodGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4''@;'; put 'put ''dEtleVByZXNzZWQoYSl7Y29uc3QgZD1JMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGJtLlZFUlRJQ0FMOnJldHVybiBkPT09Z2EuQXJyb3dEb3duO2Nhc2UgYm0uSE9SSVpPTlRBTDpyZXR1cm4gZD09PWdhLkFycm93UmlnaHQ7Y2FzZSBibS5CT1RIOnJldHVybiBkPT09''@;'; put 'put ''Z2EuQXJyb3dEb3dufHxkPT09Z2EuQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2S2V5UHJlc3NlZChhKXtjb25zdCBkPUkyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgYm0uVkVSVElDQUw6cmV0dXJuIGQ9PT1nYS5BcnJvd1VwO2Nhc2UgYm0uSE9SSVpPTlRB''@;'; put 'put ''TDpyZXR1cm4gZD09PWdhLkFycm93TGVmdDtjYXNlIGJtLkJPVEg6cmV0dXJuIGQ9PT1nYS5BcnJvd1VwfHxkPT09Z2EuQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0dXJuITF9fWdldEl0ZW1Qb3NpdGlvbihhKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5p''@;'; put 'put ''bmRleE9mKGEpOnRoaXMuZm9jdXNhYmxlSXRlbXMubWFwKGQ9PmQubmF0aXZlRWxlbWVudCkuaW5kZXhPZihhKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3JldHVybiB0aGlzLmNscktleUZvY3VzSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZWRlLDUp''@;'; put 'put ''LDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuY2xyS2V5Rm9jdXNJdGVtcz1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUtleWJvYXJkRXZlbnQoZil9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVy''@;'; put 'put ''biBkLnNldENsaWNrZWRJdGVtQ3VycmVudChmKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbTm4uTm9uZSwiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6W05uLk5vbmUsImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbTm4uTm9uZSwi''@;'; put 'put ''Y2xyS2V5Rm9jdXMiLCJmb2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxhdHRyczpqSGUsbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLGN9KSgpLFlZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIE9VZXtjb250YWlu''@;'; put 'put ''c0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwpfWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgp''@;'; put 'put ''e2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVs''@;'; put 'put ''W2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hbbF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFp''@;'; put 'put ''bnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhp''@;'; put 'put ''cy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBQVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVuc2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5''@;'; put 'put ''KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlzLm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBG''@;'; put 'put ''VWUgZXh0ZW5kcyBQVWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2ZvY3VzQ2hhbmdlZD1uZXcgZWkobnVsbCl9Z2V0IGZvY3VzQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZWQuYXNPYnNlcnZhYmxlKCl9c2VsZWN0KGwpe3RoaXMubW9kZWwhPT1s''@;'; put 'put ''JiYodGhpcy5tb2RlbD1sLHRoaXMuX2ZvY3VzQ2hhbmdlZC5uZXh0KGwpKX19bGV0IEhVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0FsbE9wdGlvbnM9ITAsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcg''@;'; put 'put ''ZWkoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IGJ4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYm''@;'; put 'put ''IXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxl''@;'; put 'put ''KCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgT1VlfXNlbGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVj''@;'; put 'put ''dGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3Nl''@;'; put 'put ''bGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhp''@;'; put 'put ''cy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVj''@;'; put 'put ''dGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO1oxZSgoKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuc2VsZWN0aW9uU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMucHNldWRvRm9jdXM9bmV3IEZVZSx0aGlzLm9wdGlvbkRhdGE9W10sdGhpcy5oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpLHRoaXMucmVuZGVy''@;'; put 'put ''ZXI9YS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgbGlzdGJveCgpe3JldHVybiB0aGlzLl9saXN0Ym94fXNl''@;'; put 'put ''dCBsaXN0Ym94KGEpe3RoaXMuX2xpc3Rib3g9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IHRleHRJbnB1dCgpe3JldHVybiB0aGlzLl90ZXh0SW5wdXR9c2V0IHRleHRJbnB1dChhKXt0aGlzLl90ZXh0SW5wdXQ9YSx0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3du''@;'; put 'put ''IixkPT4hdGhpcy5oYW5kbGVUZXh0SW5wdXQoZCkpLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1mb2N1c0lucHV0KCl7dGhpcy50ZXh0SW5wdXQmJmVsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudGV4dElucHV0LmZvY3VzKCl9Zm9jdXNGaXJzdEFjdGl2ZSgpe2lmKHRoaXMub3B0''@;'; put 'put ''aW9uRGF0YS5sZW5ndGg+MClpZih0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpKXRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVswXSk7ZWxzZXtsZXQgYTthPXRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhp''@;'; put 'put ''cy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsWzBdOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbDtjb25zdCBkPXRoaXMub3B0aW9uRGF0YS5maW5kKGg9PmgudmFsdWU9PT1hKTt0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdChkfHx0aGlzLm9w''@;'; put 'put ''dGlvbkRhdGFbMF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoImF1dG8iKX19YWRkT3B0aW9uVmFsdWVzKGEpe3RoaXMub3B0aW9uRGF0YT1hfWhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthfHwodGhp''@;'; put 'put ''cy5wc2V1ZG9Gb2N1cy5tb2RlbD1udWxsKX0pfW1vdmVGb2N1c1RvKGEpe2xldCBkPXRoaXMub3B0aW9uRGF0YS5maW5kSW5kZXgoaD0+aC5lcXVhbHModGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCkpO2E9PT13aC5VUD8tMT09PWR8fDA9PT1kP2Q9dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xOmQt''@;'; put 'put ''LTphPT09d2guRE9XTiYmKC0xPT09ZHx8ZD09PXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMT9kPTA6ZCsrKSx0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbZF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoKX1vcGVuQW5kTW92ZVRvKGEpe3RoaXMudG9nZ2xl''@;'; put 'put ''U2VydmljZS5vcGVuP3RoaXMubW92ZUZvY3VzVG8oYSk6KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoWWYoMSkpLnN1YnNjcmliZShkPT57ZCYmdGhpcy5tb3ZlRm9jdXNUbyhhKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1oYW5kbGVUZXh0SW5wdXQoYSl7bGV0''@;'; put 'put ''IGQ9ITE7Y29uc3QgaD1JMihhLmtleSk7aWYoYSlzd2l0Y2goaCl7Y2FzZSBnYS5FbnRlcjp0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnRv''@;'; put 'put ''Z2dsZSh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpLGQ9ITApO2JyZWFrO2Nhc2UgZ2EuU3BhY2U6dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW58fCh0aGlzLnRvZ2dsZVNlcnZpY2Uu''@;'; put 'put ''b3Blbj0hMCxkPSEwKTticmVhaztjYXNlIGdhLkFycm93VXA6dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKHdoLlVQKSxkPSEwO2JyZWFrO2Nhc2UgZ2EuQXJyb3dEb3duOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3Bl''@;'; put 'put ''bkFuZE1vdmVUbyh3aC5ET1dOKSxkPSEwO2JyZWFrO2RlZmF1bHQ6YS5rZXkhPT1nYS5UYWImJighdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZXx8YS5rZXkhPT1nYS5CYWNrc3BhY2UpJiZhLmtleSE9PWdhLkVzY2FwZSYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYo''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfXJldHVybiBkfXNjcm9sbEludG9TZWxlY3RlZE1vZGVsKGE9InNtb290aCIpe3RoaXMucHNldWRvRm9jdXMubW9kZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwuc2Nyb2xsSW50b1ZpZXco''@;'; put 'put ''e2JlaGF2aW9yOmEsYmxvY2s6ImNlbnRlciIsaW5saW5lOiJuZWFyZXN0In0pfXByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpe2VsKHRoaXMucGxhdGZvcm1J''@;'; put 'put ''ZCkmJnRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmZvY3VzT3V0T2ZDb21wb25lbnQoZCkmJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLmNvbXBvbmVudENkUmVmJiZ0aGlzLmNvbXBvbmVudENkUmVmLmRldGVjdENoYW5nZXMoKSl9KX1mb2N1c091dE9m''@;'; put 'put ''Q29tcG9uZW50KGEpe2NvbnN0IGQ9YS5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiEodGhpcy50ZXh0SW5wdXQuY29udGFpbnMoZCl8fHRoaXMudHJpZ2dlci5jb250YWlucyhkKXx8dGhpcy5saXN0Ym94LmNvbnRhaW5zKGQpKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoeDgpLHhyKHNjKSx4cihIVWUpLHhyKGlvKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkpO2xldCBOVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25z''@;'; put 'put ''KHZoLGJoLEV5LG14KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsWVksYXUsTzIsTngsanksYXUsTzJdfSksY30pKCksR0w9KCgpPT57Y2xh''@;'; put 'put ''c3MgYyBleHRlbmRzIF83e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWlucHV0LWNvbnRhaW5lciJdXSxob3N0VmFy''@;'; put 'put ''czo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpb''@;'; put 'put ''ZGEoW2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczpHSGUsZGVjbHM6MTMsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJd''@;'; put 'put ''LFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0''@;'; put 'put ''dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3Rh''@;'; put 'put ''dHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShZSGUpLFlyKDApLG10KDEsJEhlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFly''@;'; put 'put ''KDUsMSksWXIoNiwyKSxZcig3LDMpLGhlKCksbXQoOCxLSGUsMSwwLCJjZHMtaWNvbiIsNCkoOSxxSGUsMSwwLCJjZHMtaWNvbiIsNSksaGUoKSxtdCgxMCxYSGUsMSwwLCJuZy1jb250ZW50IiwwKSgxMSxKSGUsMSwwLCJuZy1jb250ZW50IiwwKSgxMixRSGUsMSwwLCJuZy1jb250ZW50Iiww''@;'; put 'put ''KSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDYpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsZC5z''@;'; put 'put ''aG93SGVscGVyKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxaMT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''LGgsZix2KXtzdXBlcihhLEdMLGQsaCxmLHYpLHRoaXMuaW5kZXg9MSwibnVtYmVyIj09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmY29uc29sZS53YXJuKCdXYXJuaW5nOiBJbnB1dHMgb2YgdHlwZSAibnVtYmVyIiBzaG91bGQgdXRpbGl6ZSB0aGUgbnVt''@;'; put 'put ''YmVyLWlucHV0IGNvbXBvbmVudCBmb3IgcHJvcGVyIGhhbmRsaW5nLlxuXG4gIEV4YW1wbGUgdXNhZ2U6XG4gIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj5cbiAgICA8bGFiZWw+TnVtYmVyIElucHV0PC9sYWJlbD5cbiAgICA8aW5wdXQgY2xyTnVtYmVySW5wdXQgdHlwZT0ibnVtYmVy''@;'; put 'put ''Ii8+XG4gIDwvY2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgICAnKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbIiIsImNscklucHV0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSx0ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoKX19cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSksY30pKCksVXk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9''@;'; put 'put ''bmV3IGVpKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9''@;'; put 'put ''YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFZVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgsYmgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx0ZGUsQXNdfSksY30pKCksQlVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1Jh''@;'; put 'put ''LEFzLFZ4LHpjXX0pLGN9KSgpLGpVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBc119KSxjfSkoKSxHVWU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsTlldfSksY30pKCksaWRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShTbCw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRlbXBsYXRlPWguZmlyc3QpfX0s''@;'; put 'put ''bmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxtdCgwLGxOZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSwkVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCkseW09KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLEM3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBMeXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImNsclRhYkxpbmsgYW5kIGNsci10YWItY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10YWJzIik7c3VwZXIoYSxkKSx0aGlzLmlmQWN0aXZlPWYsdGhpcy5pZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZS5jdXJyZW50''@;'; put 'put ''PT09dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKHltLDgpLEdlKEZ5KSxHZShoNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwiIl0sWyJjbHItdGFiLWNvbnRlbnQi''@;'; put 'put ''XV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpO3ZhciBTNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsY30oUzd8fHt9KTtsZXQgang9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubGF5b3V0PVM3LkhPUkla''@;'; put 'put ''T05UQUwsdGhpcy5fY2hpbGRyZW49W119Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX2NoaWxkcmVufWdldCBhY3RpdmVUYWIoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKGE9PmEuYWN0aXZlKX1nZXQgb3ZlcmZsb3dUYWJzKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09UzcuVkVSVElD''@;'; put 'put ''QUw/W106dGhpcy5jaGlsZHJlbi5maWx0ZXIoYT0+ITA9PT1hLnRhYkxpbmsuaW5PdmVyZmxvdyl9cmVnaXN0ZXIoYSl7dGhpcy5fY2hpbGRyZW4ucHVzaChhKX11bnJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGEpO2Q+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNl''@;'; put 'put ''KGQsMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEtVZT0wLF9tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCx0aGlzLnRhYkNvbnRlbnRJZHx8KHRoaXMudGFiQ29udGVudElkPSJjbHItdGFiLWNvbnRlbnQtIitLVWUrKyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQg''@;'; put 'put ''YXJpYUxhYmVsbGVkQnkoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluay5pZD09PXRoaXMuaWQpPy50YWJMaW5rPy50YWJMaW5rSWR9c2V0IHRlbXBsYXRlUmVmKGEpe3RoaXMudmlld1JlZj10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3''@;'; put 'put ''Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZik7YT4tMSYmdGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5y''@;'; put 'put ''ZW1vdmUoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGg3KSxHZShGeSksR2UoangpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1jb250ZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEm''@;'; put 'put ''YSYmcWEoY05lLDcpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxpbnB1dHM6e3RhYkNvbnRlbnRJZDpbTm4uTm9uZSwiaWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJD''@;'; put 'put ''b250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksbXQoMCx1TmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246''@;'; put 'put ''Mn0pLGN9KSgpLHFVZT0wO2NvbnN0ICRZPW5ldyBTdCgiVEFCU19JRCIpLEpVZT17cHJvdmlkZTokWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFhVZSgpe3JldHVybiJjbHItdGFicy0iK3FVZSsrfX07bGV0IFFVZT0wLHdtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7''@;'; put 'put ''dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMudGFic1NlcnZpY2U9TSx0aGlzLnRhYnNJZD1ELHRoaXMudGFiTGlua0lkfHwodGhpcy50YWJMaW5rSWQ9ImNsci10YWItbGluay0iK1FVZSsrKTtjb25zdCBaPWYucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnko''@;'; put 'put ''aWRlKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXYuY3JlYXRlQ29tcG9uZW50KFosdm9pZCAwLHZvaWQgMCxbW2gubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PVM3''@;'; put 'put ''LlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRo''@;'; put 'put ''aXMpPy50YWJDb250ZW50Py50YWJDb250ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJl''@;'; put 'put ''bnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaDcpLEdlKEZ5KSxHZShKaSksR2UoV2cpLEdlKERvKSxHZShqeCksR2UoJFkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJd''@;'; put 'put ''XSxob3N0QXR0cnM6WyJyb2xlIiwidGFiIiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJihvcCgiaWQiLGQudGFiTGlua0lkKSxocigiYXJp''@;'; put 'put ''YS1jb250cm9scyIsZC5hcmlhQ29udHJvbHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxUcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZl''@;'; put 'put ''KSl9LGlucHV0czp7dGFiTGlua0lkOltObi5Ob25lLCJpZCIsInRhYkxpbmtJZCJdLGluT3ZlcmZsb3c6W05uLk5vbmUsImNsclRhYkxpbmtJbk92ZXJmbG93IiwiaW5PdmVyZmxvdyJdfX0pLGN9KSgpLENtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCxoLnJlZ2lzdGVyKHRoaXMpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9bmdPbkRlc3Ryb3koKXt0aGlzLnRhYnNTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGg3KSxHZShGeSksR2UoangpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCx3bSw3''@;'; put 'put ''KSxhbyhoLF9tLDcpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnRhYkxpbms9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQudGFiQ29udGVudD1mLmZpcnN0KX19LGZlYXR1cmVzOltkYShbblVlXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRh''@;'; put 'put ''YkFjdGlvbiIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXX0pLGN9KSgpLEtZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJm''@;'; put 'put ''bG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjJ9KSxjfSkoKSxNNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnRh''@;'; put 'put ''YkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyhTNykubWFwKGQ9''@;'; put 'put ''PlM3W2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2VydmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dU''@;'; put 'put ''YWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVUYWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9j''@;'; put 'put ''dXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdldCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09UzcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9w''@;'; put 'put ''ZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2Vy''@;'; put 'put ''dmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMo''@;'; put 'put ''KSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdLmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlz''@;'; put 'put ''LmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlvbiYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xp''@;'; put 'put ''Y2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlvbi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXsh''@;'; put 'put ''dGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25Gb2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2ds''@;'; put 'put ''ZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFiUG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9z''@;'; put 'put ''aXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxkKXtjb25zdCBoPXRoaXMudGFic0FjdGlvbnMuc29tZShmPT5mLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQp''@;'; put 'put ''KTthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHxofHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfXNldFRhYkxpbmtF''@;'; put 'put ''bGVtZW50cygpe3RoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVtZW50cz10aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5tYXAoYT0+YS5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYnNBY3Rp''@;'; put 'put ''b25zJiZ0aGlzLnRhYkxpbmtFbGVtZW50cy5wdXNoKC4uLnRoaXMudGFic0FjdGlvbnMubWFwKGE9PmEubmF0aXZlRWxlbWVudCkpfWxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoeDIodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSku''@;'; put 'put ''c3Vic2NyaWJlKCgpPT50aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX1saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50YWJzQWN0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGg3KSxHZShzYyksR2UoangpLEdlKCRZKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxhZGUsNSxK''@;'; put 'put ''aSksYW8oaCxDbSw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC50YWJzQWN0aW9ucz1mKSxDaShmPVNpKCkpJiYoZC50YWJzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoenksNykscWEoS1ksNSxKaSkscWEoZE5lLDcsRG8pKSwyJmEpe2xldCBoO0NpKGg9''@;'; put 'put ''U2koKSkmJihkLmtleUZvY3VzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLnRhYk92ZXJmbG93RWw9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQudGFiQ29udGVudFZpZXdDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInRh''@;'; put 'put ''YnMtdmVydGljYWwiLGQuaXNWZXJ0aWNhbCl9LGlucHV0czp7bGF5b3V0OltObi5Ob25lLCJjbHJMYXlvdXQiLCJsYXlvdXQiXX0sZmVhdHVyZXM6W2RhKFtoNyxqeCxKVWVdKSx2ZChbczVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmZOZSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sidGFiQ29u''@;'; put 'put ''dGVudFZpZXdDb250YWluZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNsckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQiLCJjbHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''NCwibmdJZiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9jdXMiLCJjbGljayJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBl''@;'; put 'put ''IiwiY2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO3NhKGhOZSksZGUoMCwidWwi''@;'; put 'put ''LDIpLEh0KCJjbHJGb2N1c0NoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKHYpKX0pKCJmb2N1c291dCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQucmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZSh2KSl9KSxtdCgx''@;'; put 'put ''LGdOZSwyLDEsIm5nLWNvbnRhaW5lciIsMykoMix5TmUsNywxMSwibmctY29udGFpbmVyIiw0KSxZcigzKSxoZSgpLEZsKDQsbnVsbCwwKX0yJmEmJih4ZSgiY2xyS2V5Rm9jdXMiLGQudGFiTGlua0VsZW1lbnRzKSxmZSgpLHhlKCJuZ0Zvck9mIixkLnRhYkxpbmtEaXJlY3RpdmVzKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xLHJzLHp5LEtZXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxlWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKFQwZSl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLE8yLEFzLCRVZSxZWSxPMl19KSxjfSkoKSxxWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENv''@;'; put 'put ''dW50PTB9cmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxYWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWNvbnM9MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5faWNvbnM+MH1yZWdpc3Rlckljb24oKXt0aGlzLl9pY29ucysrfXVucmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMt''@;'; put 'put ''LX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZD1uZXcg''@;'; put 'put ''V24sdGhpcy5fY29sbGFwc2VkQ2hhbmdlZD1uZXcgV24sdGhpcy5fY29sbGFwc2VkPSExLHRoaXMuX2NvbGxhcHNpYmxlPSExfWdldCBhbmltYXRlT25Db2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWRDaGFuZ2Vk''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXthPSEhYSx0aGlzLmNvbGxhcHNpYmxlJiZ0aGlzLl9jb2xsYXBzZWQhPT1hJiZ0aGlzLnVwZGF0ZUNvbGxh''@;'; put 'put ''cHNlQmVoYXZpb3IoYSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9jb2xsYXBzaWJsZSE9PShhPSEhYSkmJighYSYmdGhpcy5jb2xsYXBzZWQmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcighMSksdGhpcy5f''@;'; put 'put ''Y29sbGFwc2libGU9YSl9dXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQubmV4dChhKSx0aGlzLl9jb2xsYXBzZWQ9YSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFFZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fbmF2U2VydmljZT1hLHRoaXMuX25hdkljb25TZXJ2aWNlPWQsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRp''@;'; put 'put ''b25TZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5jb250ZW50SWQ9U3UoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBLcighMCksdGhpcy5fc3ViPWEuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUodj0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdCh2KX0pfWdl''@;'; put 'put ''dCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2Vk''@;'; put 'put ''KGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkPWF9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQg''@;'; put 'put ''YXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKWSksR2UoWFkpLEdlKHFZKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhv''@;'; put 'put ''c3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiaXMtY29sbGFwc2VkIixkLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixkLmhhc05hdkdyb3VwcykoImhhcy1pY29ucyIsZC5oYXNJY29ucyl9LGlucHV0czp7dG9nZ2xlTGFiZWw6W05uLk5vbmUsImNsclZl''@;'; put 'put ''cnRpY2FsTmF2VG9nZ2xlTGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOltObi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xsYXBzZWQ6W05uLk5vbmUsImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1''@;'; put 'put ''dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbSlksWFkscVldKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIs''@;'; put 'put ''Mywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCIsMywiaWQiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi1idG4iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwibmF2LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwibmF2LXRyaWdnZXItaWNvbiJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEsIm5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxtdCgwLF9OZSwyLDYsImJ1dHRvbiIsMCksZGUoMSwiZGl2IiwxKSxZcigyKSxtdCgzLHdOZSwxLDIsImJ1dHRvbiIsMiksaGUoKSksMiZhJiYoeGUoIm5nSWYiLGQuY29sbGFwc2libGUpLGZlKCkseGUoImlkIixkLmNvbnRlbnRJZCksZmUoMikseGUo''@;'; put 'put ''Im5nSWYiLGQuY29sbGFwc2libGUmJmQuY29sbGFwc2VkKSl9LGRlcGVuZGVuY2llczpbYmEscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IFdufWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZXhwYW5kQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWV4cGFuZCgpe3RoaXMuX2V4cGFuZENoYW5nZS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj''@;'; put 'put ''fSksY30pKCksdEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZXN0cm95JD1uZXcgV24saCYmeGQoYS5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e2guZXhwYW5kKCksZC5tYXJrRm9yQ2hlY2soKX0p''@;'; put 'put ''fW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFcyksR2UoZUcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWZXJ0aWNhbE5hdkxp''@;'; put 'put ''bmsiLCIiXV0saG9zdEF0dHJzOlsxLCJuYXYtbGluayJdLGF0dHJzOk1OZSxuZ0NvbnRlbnRTZWxlY3RvcnM6RU5lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoeE5lKSxZcigwKSxkZSgxLCJzcGFuIiwwKSxZ''@;'; put 'put ''cigyLDEpLGhlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEV5LGswZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSks''@;'; put 'put ''Yy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLE8yLEJMLE8yLEFzLEJMXX0pLGN9KSgpLGlaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltqVWUsR1VlLGVaZSxvZGUsQlVlXX0pLGN9KSgpLFp5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBCMGV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKHZZKSxHZSh2''@;'; put 'put ''cyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksS0w9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7Y29uc3Qgb1plPS9kKy4rbSsuK3krL2ksc1plPS9tKy4rZCsuK3krL2ksbFplPS9kK3xtK3x5Ky9pLGNaZT0vXGQrL2csdVplPS9Nb2JpL2ksZFplPS9cdTIwMGYvZyxuRz0iWVlZWSIscUw9e25hbWU6IkxJVFRMRV9FTkRJ''@;'; put 'put ''QU4iLGZvcm1hdDpbIkREIiwiTU0iLG5HXX0sYUc9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLG5HXX0saFplPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6W25HLCJNTSIsIkREIl19O2Z1bmN0aW9uIGxkZShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5n''@;'; put 'put ''ZXREYXRlKCl9Y2xhc3Mgdlple2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSx2PSExLE09ITEsRD0hMSl7dGhpcy5kYXlNb2RlbD1sLHRoaXMuaXNUb2RheXNEYXRlPWEsdGhpcy5pc0V4Y2x1ZGVkPWQsdGhpcy5pc0Rpc2FibGVkPWgsdGhpcy5pc1NlbGVjdGVkPWYsdGhpcy5p''@;'; put 'put ''c0ZvY3VzYWJsZT12LHRoaXMuaXNSYW5nZVN0YXJ0RGF5PU0sdGhpcy5pc1JhbmdlRW5kRGF5PUR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgTGR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9''@;'; put 'put ''ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2NvbnN0IGE9''@;'; put 'put ''bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IExkKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29u''@;'; put 'put ''U3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6Imxvbmci''@;'; put 'put ''LGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1pc0JlZm9yZShsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPD1sPy50b0RhdGUoKS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8bD8udG9EYXRlKCkuZ2V0VGltZSgpfWlzQWZ0ZXIobCxhPSEx''@;'; put 'put ''KXtyZXR1cm4gYT90aGlzLnRvRGF0ZSgpLmdldFRpbWUoKT49bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPmw/LnRvRGF0ZSgpLmdldFRpbWUoKX1wYWQobCl7cmV0dXJuIGw8MTA/YDAke2x9YDpgJHtsfWB9fWNsYXNzIGJaZXtjb25zdHJ1Y3RvcihsLGEs''@;'; put 'put ''ZCxoLGYsdixNKXt0aGlzLmNhbGVuZGFyPWwsdGhpcy5zZWxlY3RlZERheT1hLHRoaXMuc2VsZWN0ZWRFbmREYXk9ZCx0aGlzLmZvY3VzYWJsZURheT1oLHRoaXMudG9kYXk9Zix0aGlzLmZpcnN0RGF5T2ZXZWVrPXYsdGhpcy5leGNsdWRlZERhdGVzPU0sdGhpcy5jdXJyTW9udGhEYXlWaWV3''@;'; put 'put ''cz1bXSx0aGlzLmluaXRpYWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkobCl7dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZs''@;'; put 'put ''YWcobCwhMCksdGhpcy5mb2N1c2FibGVEYXk9bH11cGRhdGVTZWxlY3RlZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWREYXksITEpLHRoaXMuc2VsZWN0ZWREYXk9bCx0aGlzLnNldFNlbGVjdGVkRGF5KGwsITApfXVwZGF0ZVNlbGVjdGVkRW5kRGF5KGwpe3RoaXMu''@;'; put 'put ''c2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMSksdGhpcy5zZWxlY3RlZEVuZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFy''@;'; put 'put ''Lm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSx2PVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZp''@;'; put 'put ''ZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKHY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCks''@;'; put 'put ''ITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsdiksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHtt''@;'; put 'put ''aW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29tcGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSx2PWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuISh2Pj1oJiZ2PD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2Nv''@;'; put 'put ''bnN0IGg9bC5tYXAoZj0+bmV3IHZaZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRlZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJv''@;'; put 'put ''bVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gcFplKGMsbCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZX''@;'; put 'put ''ZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCB2PTA7djw2O3YrKylmW3ZdPWguc2xpY2UoNyp2LDcq''@;'; put 'put ''KHYrMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKX1pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl7dGhpcy5mb2N1c2FibGVE''@;'; put 'put ''YXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLmZvY3VzYWJsZURheSk/dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKTp0aGlzLnNlbGVjdGVkRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZERheSk/KHRoaXMuc2V0Rm9j''@;'; put 'put ''dXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRGF5LmNsb25lKCkpOnRoaXMuc2VsZWN0ZWRFbmREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRW5kRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFn''@;'; put 'put ''KHRoaXMuc2VsZWN0ZWRFbmREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWRFbmREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9''@;'; put 'put ''dGhpcy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IExkKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMu''@;'; put 'put ''Y3Vyck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfXNldFNlbGVjdGVkRGF5KGwsYSl7bCYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KGwpJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tsPy5kYXRlLTFdLmlzU2VsZWN0ZWQ9YSl9fWxldCBVeD0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEpe3RoaXMubG9jYWxlPWEsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7cmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2Fs''@;'; put 'put ''ZURheXN9Z2V0IGxvY2FsZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5tYXAoYT0+YS5uYXJyb3cpfWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9sb2NhbGVNb250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURhdGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0aGlzLmluaXRpYWxpemVGaXJzdERheU9mV2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQo''@;'; put 'put ''KSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlzKCl9aW5pdGlhbGl6ZUxvY2FsZURheXMoKXtjb25zdCBhPVtdLGQ9alUodGhpcy5sb2NhbGUsZDAuU3RhbmRh''@;'; put 'put ''bG9uZSxkbC5XaWRlKS5zbGljZSgpLGg9alUodGhpcy5sb2NhbGUsZDAuU3RhbmRhbG9uZSxkbC5OYXJyb3cpLnNsaWNlKCksZj10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQgdj0wO3Y8Nzt2KyspYS5wdXNoKHtkYXk6ZFt2XSxuYXJyb3c6aFt2XX0pO2lmKGY+MCl7Y29uc3Qgdj1hLnNw''@;'; put 'put ''bGljZSgwLGYpO2EucHVzaCguLi52KX10aGlzLl9sb2NhbGVEYXlzPWF9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQ9elUodGhpcy5sb2NhbGUsZDAuU3RhbmRhbG9uZSxkbC5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0''@;'; put 'put ''aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9elUodGhpcy5sb2NhbGUsZDAuU3RhbmRhbG9uZSxkbC5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVGaXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIHhfZShjKXtyZXR1cm4g''@;'; put 'put ''bzEoYylbZWMuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIE1NKGMsbCl7cmV0dXJuIEMyKG8xKGMpW2VjLkRhdGVGb3JtYXRdLGwpfSh0aGlzLmxvY2FsZSxDZC5TaG9ydCl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEJmKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgT2R7Y29uc3RydWN0b3IobCxhKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhp''@;'; put 'put ''cy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1pc0RheUluQ2FsZW5kYXIobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofXBy''@;'; put 'put ''ZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhci0xLDExKTpuZXcgT2QodGhpcy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0dXJuIDExPT09dGhpcy5tb250aD9uZXcgT2QodGhpcy55ZWFyKzEsMCk6bmV3IE9kKHRoaXMueWVhcix0''@;'; put 'put ''aGlzLm1vbnRoKzEpfXByZXZpb3VzWWVhcigpe3JldHVybiBuZXcgT2QodGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4dFllYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhcisxLHRoaXMubW9udGgpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IGw9bGRlKHRoaXMueWVhcix0''@;'; put 'put ''aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5tYXAoKGEsZCk9Pm5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IE1oPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25z''@;'; put 'put ''PSExLHRoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyBXbix0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZT1uZXcgV24sdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IFduLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1u''@;'; put 'put ''ZXcgV24sdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldz1uZXcgV24sdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgV259Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0''@;'; put 'put ''ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVjdGVkRW5kRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9mb2N1c2VkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoWXUoYT0+dGhpcy5mb2N1c2VkRGF5PWEpKX1nZXQgcmVmcmVzaENhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3LmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChh''@;'; put 'put ''LHtlbWl0RXZlbnQ6ZH09e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRlOmgsZW5kRGF0ZTpmfT1hO2gmJmY/KHRoaXMuc2V0U2VsZWN0ZWREYXkoaCxkKSx0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGYsZCkpOihudWxsIT09ZiYmdGhpcy5zZXRT''@;'; put 'put ''ZWxlY3RlZEVuZERheShmLGQpLG51bGwhPT1oJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCkpfWVsc2UgdGhpcy5zZXRTZWxlY3RlZERheShhLGQpO3RoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcubmV4dCgpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMu''@;'; put 'put ''aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBPZCh0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IE9kKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VN''@;'; put 'put ''b250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEpKX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0''@;'; put 'put ''TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVU''@;'; put 'put ''b05leHRZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVhcigpKX1tb3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3Zl''@;'; put 'put ''VG9DdXJyZW50TW9udGgoKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2Uu''@;'; put 'put ''bmV4dCgpfW1vdmVUb1NwZWNpZmljTW9udGgoYSl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIoYSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKGEueWVhcixhLm1vbnRoKSl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMu''@;'; put 'put ''Zm9jdXNlZERheT10aGlzLmZvY3VzZWREYXkuaW5jcmVtZW50QnkoYSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhpcy5fZm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxl''@;'; put 'put ''bmRhcihuZXcgT2QodGhpcy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVjdGVkRGF5KCl7dGhpcy5zZWxlY3RlZERheT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERh''@;'; put 'put ''eT10aGlzLnBlcnNpc3RlZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKGEpe3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9c2V0U2VsZWN0ZWREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRGF5PWEsZCYmdGhpcy5fc2VsZWN0ZWREYXlD''@;'; put 'put ''aGFuZ2UubmV4dChhKX1zZXRTZWxlY3RlZEVuZERheShhLGQpe3RoaXMuc2VsZWN0ZWRFbmREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5uZXh0KGEpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9k''@;'; put 'put ''aXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgTGQodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0''@;'; put 'put ''aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp''@;'; put 'put ''LFNtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2Nv''@;'; put 'put ''bnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoYW0o''@;'; put 'put ''KSwkbCgoKT0+ZWwodGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihXYSkseHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx1NT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgTGQoMCwwLDEpLG1heERhdGU6bmV3IExkKDk5OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PSJkZC9NTS95Iix0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9cUwsdGhpcy5kZWxpbWl0ZXJz''@;'; put 'put ''PVsiLyIsIi8iXSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PWEubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe2NvbnN0IGE9dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gYVsw''@;'; put 'put ''XSt0aGlzLmRlbGltaXRlcnNbMF0rYVsxXSt0aGlzLmRlbGltaXRlcnNbMV0rYVsyXX1zZXRNaW5EYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxz''@;'; put 'put ''ZSB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoMCwwLDEpfXNldE1heERhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3BsaXQoIi0iKS5tYXAodj0+cGFyc2VJbnQodiwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBMZChkLGgtMSxmKX1lbHNlIHRoaXMu''@;'; put 'put ''ZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBMZCg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnMoYSl7Y29uc3QgZD10aGlzLnZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKTt0aGlzLmRhdGVSYW5nZU9wdGlvbnM9ZHx8W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJh''@;'; put 'put ''bmdlT3B0aW9uc310b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSl7aWYoYSl7aWYoaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiIiO2NvbnN0IGQ9YS5nZXREYXRlKCksaD1hLmdldE1vbnRoKCkrMSxmPWQ+OT9kLnRvU3RyaW5nKCk6IjAiK2Qsdj1oPjk/aC50b1N0cmluZygpOiIwIito''@;'; put 'put ''O3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1xTD9mK3RoaXMuZGVsaW1pdGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09YUc/dit0aGlzLmRlbGltaXRlcnNbMF0rZit0aGlzLmRlbGltaXRlcnNb''@;'; put 'put ''MV0rYS5nZXRGdWxsWWVhcigpOmEuZ2V0RnVsbFllYXIoKSt0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNbMV0rZn1yZXR1cm4iIn1nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO2NvbnN0IGQ9YS5t''@;'; put 'put ''YXRjaChjWmUpO2lmKCFkfHwzIT09ZC5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3RbaCxmLHZdPWQ7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PXFMP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKHYsZixoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1hRz90aGlzLnZhbGlk''@;'; put 'put ''YXRlQW5kR2V0RGF0ZSh2LGgsZik6dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoaCxmLHYpfXZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKXtjb25zdCBkPVtdO3JldHVybiBhPy5mb3JFYWNoKGg9PnsyIT09aD8udmFsdWU/Lmxlbmd0aHx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzBdKXx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzFdKXx8ZC5wdXNoKGgpfSksZH1pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpe2NvbnN0IGE9dGhpcy5jbGRyTG9jYWxl''@;'; put 'put ''RGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD1vWmUudGVzdChhKT9xTDpzWmUudGVzdChhKT9hRzpoWmUsdGhpcy5leHRyYWN0RGVsaW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7''@;'; put 'put ''Y29uc3QgZD10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoZFplLCIiKS5zcGxpdChsWmUpO2QmJjQ9PT1kLmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W2RbMV0sZFsyXV06Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBl''@;'; put 'put ''eHRyYWN0ZWQ6ICIsZCl9fWlzVmFsaWRNb250aChhKXtyZXR1cm4gYT4tMSYmYTwxMn1pc1ZhbGlkRGF0ZShhLGQsaCl7cmV0dXJuIGg+MCYmaDw9bGRlKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLHY9K2QtMSxNPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aCh2''@;'; put 'put ''KXx8IXRoaXMuaXNWYWxpZERhdGUoZix2LE0pKXJldHVybiBudWxsO2NvbnN0IEQ9ZnVuY3Rpb24gZ1plKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAw''@;'; put 'put ''Kk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDApLGR9KGYpO3JldHVybi0xIT09RD9uZXcgRGF0ZShELHYsTSk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoVXgpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpj''@;'; put 'put ''LGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxZeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgV24sdGhpcy5fZGlydHlDaGFuZ2U9bmV3IFdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNl''@;'; put 'put ''cnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0''@;'; put 'put ''aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGNkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5vblNlbGVjdERheT1uZXcgS3J9Z2V0IGRheVZpZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQgZGF5VmlldyhhKXt0aGlzLl9kYXlWaWV3PWF9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcu''@;'; put 'put ''aXNTZWxlY3RlZD90aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVT''@;'; put 'put ''dHJpbmcoKX1nZXQgaXNSYW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh''@;'; put 'put ''eT8udG9Db21wYXJpc29uU3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2''@;'; put 'put ''aWNlLnNlbGVjdGVkRW5kRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3LmlzRGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9uU2VsZWN0RGF5LmVtaXQodGhpcy5kYXlWaWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2UuaG92ZXJlZERheSwhMCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNaCksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmSHQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaG92ZXJMaXN0ZW5lcigpfSksMiZhJiZUcigiZGF5IiwhMCl9LGlucHV0czp7ZGF5VmlldzpbTm4uTm9uZSwiY2xyRGF5VmlldyIsImRheVZpZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9''@;'; put 'put ''LGRlY2xzOjIsdmFyczoxOSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiZGF5LWJ0biIsMywiY2xpY2siLCJmb2N1cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbGVjdERheSgpfSko''@;'; put 'put ''ImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLm9uRGF5Vmlld0ZvY3VzKCl9KSxPZSgxKSxoZSgpKSwyJmEmJihUcigiaXMtdG9kYXkiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGUpKCJpcy1leGNsdWRlZCIsZC5kYXlWaWV3LmlzRXhjbHVkZWQpKCJpcy1kaXNhYmxlZCIsZC5kYXlWaWV3Lmlz''@;'; put 'put ''RGlzYWJsZWQpKCJpcy1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoKSkoImlzLXN0YXJ0LXJhbmdlIixkLmlzUmFuZ2VTdGFydERheSkoImlzLWVuZC1yYW5nZSIsZC5pc1JhbmdlRW5kRGF5KSxocigidGFiaW5kZXgiLGQuZGF5Vmlldy50''@;'; put 'put ''YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLGZlKCksSXIoIiAiLGQuZGF5Vmlldy5kYXlNb2RlbC5kYXRlLCIg''@;'; put 'put ''IikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx1ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRo''@;'; put 'put ''aXMuX2RhdGVJT1NlcnZpY2U9Zix0aGlzLl9lbFJlZj12LHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLl90b2dnbGVTZXJ2aWNlPUQsdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBs''@;'; put 'put ''b2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9Z2V0IHNlbGVjdGVkRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheX1nZXQgZm9jdXNlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheX1nZXQgdG9k''@;'; put 'put ''YXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJl''@;'; put 'put ''KCkpfW9uS2V5RG93bihhKXtpZihhJiZ0aGlzLmZvY3VzZWREYXkpc3dpdGNoKEkyKGEua2V5KSl7Y2FzZSBnYS5BcnJvd1VwOmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTcpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dEb3du''@;'; put 'put ''OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoNyk7YnJlYWs7Y2FzZSBnYS5BcnJvd0xlZnQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtMSk7YnJl''@;'; put 'put ''YWs7Y2FzZSBnYS5BcnJvd1JpZ2h0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoMSl9fXNldFNlbGVjdGVkRGF5KGEpe2NvbnN0IGQ9dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnMsaD10''@;'; put 'put ''aGlzLnVwZGF0ZUNhbGVuZGFyVmlld01vZGFsKGEpO3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoaCx7ZW1pdEV2ZW50OiFkfSksZHx8KHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSx0aGlzLnZhbGlkYXRlQW5k''@;'; put 'put ''Q2xvc2VEYXRlUGlja2VyKCkpfWluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl7dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl9KSksdGhpcy5f''@;'; put 'put ''c3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVGb2N1c2FibGVEYXkoYSl9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1''@;'; put 'put ''c09uQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVmcmVzaENhbGVuZGFyVmlldy5zdWJzY3JpYmUoKCk9''@;'; put 'put ''Pnt0aGlzLnJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpfSkpfXZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2VyKCl7KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheXx8IXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiYodGhpcy5fdG9nZ2xlU2VydmljZS5vcGVuPSExKX11cGRhdGVDYWxlbmRhclZpZXdN''@;'; put 'put ''b2RhbChhKXtjb25zdCBkPXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXl8fG51bGwsaD10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcjtsZXQgZj10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fHxudWxsO3JldHVybiBoPyFkfHxk''@;'; put 'put ''JiZmfHxkJiZhPy5pc0JlZm9yZShkKT8odGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxmJiYoZj12b2lkIDAsdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheShmKSkpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0''@;'; put 'put ''ZWRFbmREYXkoYSk6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxoP3tzdGFydERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheSxlbmREYXRlOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl9OnRoaXMuY2FsZW5kYXJW''@;'; put 'put ''aWV3TW9kZWwuc2VsZWN0ZWREYXl9cmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1Jhbmdl''@;'; put 'put ''UGlja2VyJiZ0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSl9Z2VuZXJhdGVDYWxlbmRhclZpZXcoKXt0aGlzLmNhbGVuZGFyVmlld01vZGVsPW5ldyBiWmUodGhpcy5jYWxlbmRhcix0''@;'; put 'put ''aGlzLnNlbGVjdGVkRGF5LHRoaXMuc2VsZWN0ZWRFbmREYXksdGhpcy5mb2N1c2VkRGF5LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShVeCksR2UoTWgpLEdlKFNtKSxHZSh1NSksR2UoSmkpLEdlKFl5KSxHZShzYykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2FsZW5kYXIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgia2V5''@;'; put 'put ''ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdl''@;'; put 'put ''ZWtkYXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIiwid2Vla2RheSJdLFsxLCJjYWxlbmRhci1yb3ciXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWzEsImNhbGVuZGFyLWNlbGwiXSxbMywic2VsZWN0RGF5IiwiY2xyRGF5VmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInRhYmxlIiwwKSgxLCJ0ciIsMSksbXQoMixUTmUsMywyLCJ0aCIsMiksaGUoKSxtdCgzLGtOZSwyLDEsInRyIiwzKSxoZSgpKSwyJmEm''@;'; put 'put ''JihmZSgyKSx4ZSgibmdGb3JPZiIsZC5sb2NhbGVEYXlzKSxmZSgpLHhlKCJuZ0Zvck9mIixkLmNhbGVuZGFyVmlld01vZGVsLmNhbGVuZGFyVmlldykpfSxkZXBlbmRlbmNpZXM6W25zLGNkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''KXt0aGlzLl9kb2N1bWVudD1hLHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPSExLGEmJih0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT11WmUudGVzdChhLmRlZmF1bHRWaWV3Lm5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuX2lubmVyV2lkdGg9YS5kZWZhdWx0Vmlldy5pbm5lcldpZHRoKX1nZXQg''@;'; put 'put ''aXNFbmFibGVkKCl7cmV0dXJuISh0aGlzLl9kb2N1bWVudCYmdGhpcy5faW5uZXJXaWR0aDw3NjgmJnRoaXMuX2lzVXNlckFnZW50TW9iaWxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpj''@;'; put 'put ''LGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxvRz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlKXtzdXBlcihhLFd4LGQsdixmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPXYsdGhp''@;'; put 'put ''cy5jb250YWluZXI9TSx0aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1aLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPXJlLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1jZSx0aGlzLnBsYXRmb3JtSWQ9YmUsdGhpcy5mb2N1c1NlcnZpY2U9''@;'; put 'put ''RWUsdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPUJlLHRoaXMuaW5kZXg9MX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2Fi''@;'; put 'put ''bGVkOm51bGx9c2V0IGRpc2FibGVkKGEpe3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKHFmKGEpKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0''@;'; put 'put ''aGlzLmRhdGVJT1NlcnZpY2UucGxhY2Vob2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXtyZXR1cm4gZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8iZGF0ZSI6InRleHQifW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2Vy''@;'; put 'put ''dmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxp''@;'; put 'put ''c3RlbkZvckRpcnR5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRGb2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9jdXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dl''@;'; put 'put ''clZhbGlkYXRpb24oKSx0aGlzLnNldEZvY3VzKCExKX1vblZhbHVlQ2hhbmdlKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpO2lmKHRoaXMudXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpJiZkKXRoaXMudXBkYXRlRGF0ZShk''@;'; put 'put ''LCEwKTtlbHNlIGlmKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2gsZix2XT1hLnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCtoLCtmLTEsK3YpLCEwKX1lbHNlIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1D''@;'; put 'put ''b250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9c2V0RGF0ZShhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyBEYXRlKGEpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9PWEmJnRoaXMudXBkYXRlRGF0ZShhKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5p''@;'; put 'put ''dGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJs''@;'; put 'put ''ZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250''@;'; put 'put ''YWluZXIodTUpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKE1oKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihYTCksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRo''@;'; put 'put ''aXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFl5KSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMoKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZh''@;'; put 'put ''bHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7aWYoZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdl''@;'; put 'put ''PWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Upe2NvbnN0IGY9aD9uZXcgTGQoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSk6bnVsbDt0aGlzLnVwZGF0ZURheU1vZGVsKGYpfXRoaXMudXBkYXRlSW5wdXQoaCl9dXBkYXRlSW5wdXQoYSl7aWYoYSl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGEuc2V0TWludXRlcyhhLmdldE1pbnV0ZXMoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5l''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFzRGF0ZSIsYSkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJmQhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUoZCk6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsInZhbHVlIixkKSx0aGlzLnZhbGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIG1aZShjLGwpe3JldHVybiBj''@;'; put 'put ''IGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYmYy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRl''@;'; put 'put ''Q2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVy''@;'; put 'put ''biB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSgkbCgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRh''@;'; put 'put ''dGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpOm51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLnVzZXJTZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKGE/LnRv''@;'; put 'put ''RGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoJGwoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9s''@;'; put 'put ''Lm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKCRsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29u''@;'; put 'put ''dHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZSgkbChhPT4hIWEmJiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpe2NvbnN0IGE9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5j''@;'; put 'put ''b250cm9sLGQ9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LCEwKSYmKGE/Lmhhc0Vycm9yKCJyYW5n''@;'; put 'put ''ZSIpfHxkPy5zb21lKGY9PmYuaGFzRXJyb3IoInJhbmdlIikpKSYmKGEuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZC5mb3JFYWNoKGY9PntmPy5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoSmkpLEdlKEVvKSxHZShkMSwxMCksR2UoQ3MoKCk9Pld4KSw4KSxHZSh1NSw4KSxHZShNaCw4KSxHZShYTCw4KSxHZShZeSw4KSxHZShpbyksR2UoVXksOCksR2UoU20pKX0sYy5cdTAy''@;'; put 'put ''NzVkaXI9RXIoe3R5cGU6Yyxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25WYWx1ZUNoYW5nZShmLnRhcmdldCl9KSwyJmEmJihvcCgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixkLmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFj''@;'; put 'put ''ZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLGRkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQg''@;'; put 'put ''ZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0''@;'; put 'put ''VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJv''@;'; put 'put ''cnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWRFbmREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJFbmREYXRlIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInNpemUiLGQuaW5wdXRTaXplKSxUcigiY2xyLWlucHV0''@;'; put 'put ''IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W05uLk5vbmUsImNsckVuZERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckVuZERhdGVDaGFuZ2UifSxmZWF0dXJlczpbZGEoW1NtXSksd2FdfSksY30pKCksSkw9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIG9He2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IEtyKCExKX1zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9c2V0IG1pbihhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWluRGF0ZShhKSx0aGlzLnRyaWdnZXJDb250cm9sVmFs''@;'; put 'put ''aWRhdGlvbigpfXNldCBtYXgoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdl''@;'; put 'put ''fXVwZGF0ZURheU1vZGVsKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk9YX10cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhp''@;'; put 'put ''cy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGlucHV0czp7ZGF0''@;'; put 'put ''ZTpbTm4uTm9uZSwiY2xyRGF0ZSIsImRhdGUiXSxtaW46Im1pbiIsbWF4OiJtYXgifSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLGhkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50''@;'; put 'put ''OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5''@;'; put 'put ''PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigic2l6ZSIsZC5pbnB1dFNpemUpLF9kKCJ0ZXh0LWFsaWduIiwicmlnaHQiKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W05uLk5vbmUsImNsclN0YXJ0RGF0ZSIsImRhdGUiXX0sb3V0''@;'; put 'put ''cHV0czp7ZGF0ZUNoYW5nZToiY2xyU3RhcnREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtTbV0pLHdhXX0pLGN9KSgpLEd5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aW9uPVRkWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQg''@;'; put 'put ''aXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VU''@;'; put 'put ''b01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9dix0aGlzLmNvbW1vblN0cmluZ3M9TSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1l''@;'; put 'put ''cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGh9Z2V0IGNhbGVuZGFyRW5kTW9udGhJbmRleCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWdldCB5ZWFyQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxF''@;'; put 'put ''TkRBUl9ZRUFSOnRoaXMuY2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWdldCBjdXJyZW50Q2FsZW5kYXJZZWFyKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRG''@;'; put 'put ''dWxsWWVhcigpfWdldCBjdXJyZW50Q2FsZW5kYXJNb250aCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKX1nZXRJc1JhbmdlU3RhcnRNb250aChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5f''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aH1nZXRJc1JhbmdlRW5kTW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0''@;'; put 'put ''aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2Vydmlj''@;'; put 'put ''ZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPUkyKGEua2V5KTtkPT09Z2EuQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5k''@;'; put 'put ''ZXg+MT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LT0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PWdhLkFycm93RG93biYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTA/KGEucHJldmVudERlZmF1''@;'; put 'put ''bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCs9Mix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1nYS5BcnJvd1JpZ2h0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRN''@;'; put 'put ''b250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09Z2EuQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4wJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0''@;'; put 'put ''ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyPT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu''@;'; put 'put ''c2VsZWN0ZWREYXk/Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuY2FsZW5kYXJFbmRNb250aEluZGV4fW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVy''@;'; put 'put ''ZWRNb250aD1hfWNoYW5nZU1vbnRoKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VNb250aChhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIGE9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRleD8wOi0x''@;'; put 'put ''fW5leHRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRZZWFyKCl9cHJldmlvdXNZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzWWVhcigpfWN1cnJlbnRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1v''@;'; put 'put ''dmVUb0N1cnJlbnRNb250aCgpfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmRE''@;'; put 'put ''YXk/dGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''LnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55''@;'; put 'put ''ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIh''@;'; put 'put ''PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXku''@;'; put 'put ''bW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcjx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2Uuc2VsZWN0ZWREYXl8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJih0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3Rl''@;'; put 'put ''ZERheS5tb250aCYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoKSl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFV4KSxHZShNaCksR2UoU20pLEdlKEppKSxHZShHeSksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUi''@;'; put 'put ''LCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZUcigibW9udGhwaWNrZXIiLCEwKX0sZGVjbHM6MTMsdmFyczoxMCxjb25zdHM6W1sxLCJj''@;'; put 'put ''YWxlbmRhci1oZWFkZXIiLCJpbi1tb250aHBpY2tlciJdLFsxLCJ5ZWFyLXZpZXctc3dpdGNoZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwibW9udGhzIl0sWyJ0eXBlIiwiYnV0dG9uIiwi''@;'; put 'put ''Y2xhc3MiLCJjYWxlbmRhci1idG4gbW9udGgiLDMsImlzLXNlbGVjdGVkIiwiaXMtc3RhcnQtcmFuZ2UiLCJpcy1lbmQtcmFuZ2UiLCJpbi1yYW5nZSIsImlzLXRvZGF5IiwiY2xpY2siLCJtb3VzZWVudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVu''@;'; put 'put ''ZGFyLWJ0biIsIm1vbnRoIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksT2Uo''@;'; put 'put ''MyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNZZWFyKCl9KSxHdCg2LCJjZHMtaWNvbiIsNSksaGUoKSxkZSg3LCJidXR0b24iLDQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50''@;'; put 'put ''WWVhcigpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dFllYXIoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksbXQoMTIsRE5lLDIsMTIsImJ1dHRvbiIsOSks''@;'; put 'put ''aGUoKSksMiZhJiYoZmUoMiksaHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclBy''@;'; put 'put ''ZXZpb3VzTW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgyKSx4''@;'; put 'put ''ZSgibmdGb3JPZiIsZC5tb250aE5hbWVzKSl9LGRlcGVuZGVuY2llczpbbnMscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIFp4e2NvbnN0cnVjdG9yKGwpe3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVh''@;'; put 'put ''cigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgWngodGhpcy55ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgWngodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7''@;'; put 'put ''cmV0dXJuIG5ldyBaeCgobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0''@;'; put 'put ''ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGdkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdmlld01h''@;'; put 'put ''bmFnZXJTZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy55ZWFyUmFuZ2VNb2RlbD1uZXcgWngodGhpcy5jYWxlbmRhclllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuY2FsZW5kYXJZZWFyfWdl''@;'; put 'put ''dCBzZWxlY3RlZFN0YXJ0WWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0IHNlbGVjdGVkRW5kWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXJ9Z2V0IGNhbGVuZGFy''@;'; put 'put ''WWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1pc0N1cnJlbnRDYWxlbmRhclllYXIoYSl7cmV0dXJuIGE9PT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0SXNSYW5nZVN0YXJ0WWVhcihhKXtyZXR1cm4gdGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0SXNSYW5nZUVuZFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5f''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1JMihhLmtleSk7ZD09PWdhLkFycm93VXA/''@;'; put 'put ''KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0yKSk6ZD09PWdhLkFycm93RG93bj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMikpOmQ9PT1nYS5BcnJvd1JpZ2h0PyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNy''@;'; put 'put ''ZW1lbnRGb2N1c1llYXJCeSgxKSk6ZD09PWdhLkFycm93TGVmdCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0xKSl9fWNoYW5nZVllYXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZVllYXIoYSksdGhpcy5fdmlld01hbmFnZXJT''@;'; put 'put ''ZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyPWF9cHJldmlvdXNEZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKX1jdXJyZW50RGVjYWRl''@;'; put 'put ''KCl7dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheS55ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5jdXJyZW50RGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXND''@;'; put 'put ''ZWxsKHRoaXMuX2VsUmVmKX1uZXh0RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMuX2ZvY3Vz''@;'; put 'put ''ZWRZZWFyPXRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLmNhbGVuZGFyWWVhcik/dGhpcy5jYWxlbmRhclllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuc2VsZWN0ZWRFbmRZZWFyKT90aGlzLnNlbGVjdGVkRW5kWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1p''@;'; put 'put ''ZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPT09YT8wOi0xfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZ0aGlzLnNlbGVjdGVkRW5k''@;'; put 'put ''WWVhcj9hPnRoaXMuc2VsZWN0ZWRTdGFydFllYXImJmE8dGhpcy5zZWxlY3RlZEVuZFllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfHx0aGlzLnNlbGVjdGVkRW5kWWVhcikmJmE+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYmYTx0aGlzLl9kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZFllYXIpfWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1pbmNyZW1lbnRGb2N1c1llYXJCeShhKXt0aGlzLl9mb2N1c2VkWWVhcj10aGlzLl9mb2N1c2VkWWVhcithLHRoaXMueWVhclJh''@;'; put 'put ''bmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPWE+MD90aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKTp0aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9j''@;'; put 'put ''dXNDZWxsKHRoaXMuX2VsUmVmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTWgpLEdlKEd5KSxHZShTbSksR2UoSmkpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci15ZWFycGlja2VyIl1dLGhvc3RB''@;'; put 'put ''dHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZUcigieWVhcnBpY2tlciIsITApfSxkZWNsczoxMyx2YXJzOjksY29u''@;'; put 'put ''c3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsInllYXItcmFuZ2UiLDMsImNsaWNrIl0sWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJj''@;'; put 'put ''bGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRh''@;'; put 'put ''ci1idG4iLCJ5ZWFyIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9EYXlWaWV3KCl9KSxPZSgzKSxo''@;'; put 'put ''ZSgpKCksZGUoNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERl''@;'; put 'put ''Y2FkZSgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2FkZSgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpKCkoKSxkZSgxMSwiZGl2Iiw4KSxtdCgxMixJTmUsMiwxMiwiYnV0dG9uIiw5''@;'; put 'put ''KSxoZSgpKSwyJmEmJihmZSgzKSx6dSgiICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UubGVuZ3RoLTFdLCIgIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUp''@;'; put 'put ''LGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5k''@;'; put 'put ''YXRlcGlja2VyTmV4dERlY2FkZSksZmUoMikseGUoIm5nRm9yT2YiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbbnMscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1kZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdN''@;'; put 'put ''YW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmlu''@;'; put 'put ''Z3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZ''@;'; put 'put ''ZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxh''@;'; put 'put ''eWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFu''@;'; put 'put ''Z2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3Zl''@;'; put 'put ''VG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShHeSksR2UoTWgpLEdlKFV4KSxHZShpcykpfSxjLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29u''@;'; put 'put ''c3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1i''@;'; put 'put ''dG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJl''@;'; put 'put ''dmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSxPZSgxKSxoZSgpLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksT2UoNSksaGUoKSxkZSg2LCJidXR0b24iLDQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxPZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLEh0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCksZGUoMTEsImJ1dHRvbiIsNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSksR3QoMTIsImNkcy1pY29uIiw4KSxoZSgpLGRlKDEzLCJidXR0b24iLDYp''@;'; put 'put ''LEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLEd0KDE0LCJjZHMtaWNvbiIsOSksaGUoKSgpKCksR3QoMTUsImNsci1jYWxlbmRhciIpLGRlKDE2LCJkaXYiLDApLE9lKDE3KSxoZSgpKSwyJmEmJihmZSgpLENyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFs''@;'; put 'put ''Q29udGVudFN0YXJ0KSxmZSgzKSxocigiYXJpYS1sYWJlbCIsZC5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZC5tb250aEF0dHJTdHJpbmcpLGZlKCksSXIoIiAiLGQuY2FsZW5kYXJNb250aCwiICIpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55''@;'; put 'put ''ZWFyQXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJl''@;'; put 'put ''dmlvdXNNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksaHIoImFyaWEtbGFiZWwiLGQuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgzKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltycyx1ZGVd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPWZ9''@;'; put 'put ''YXBwbHkoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/KHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlm''@;'; put 'put ''eVNlbGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSk6''@;'; put 'put ''IXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiYodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl''@;'; put 'put ''bGVjdGVkRGF5KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9Y2FuY2VsKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2Uoc2MpLEdlKE1oKSxHZShZeSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0ZXBpY2tlci1hY3Rpb25zIiwhMCl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihkZSgwLCJidXR0b24iLDApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jYW5jZWwoKX0pLE9lKDEpLGhlKCksZGUoMiwiYnV0dG9uIiwxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYXBwbHkoKX0pLE9lKDMpLGhlKCkpLDImYSYmKGZlKCksQ3IoZC5jb21tb25T''@;'; put 'put ''dHJpbmdzLmtleXMuY2FuY2VsKSxmZSgyKSxDcihkLmNvbW1vblN0cmluZ3Mua2V5cy5hcHBseSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxiZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnZpZXdNYW5hZ2VyU2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlSU9TZXJ2aWNlPWZ9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlz''@;'; put 'put ''WWVhclZpZXd9Z2V0IGlzRGF5Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9Z2V0IGhhc1JhbmdlT3B0aW9ucygpe3JldHVybiEhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U/LmlzUmFuZ2VQaWNrZXImJiEhdGhpcy5kYXRlUmFuZ2VPcHRpb25zPy5s''@;'; put 'put ''ZW5ndGh9Z2V0IGhhc0FjdGlvbkJ1dHRvbnMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9uc31nZXQgZGF0ZVJhbmdlT3B0aW9ucygpe3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0UmFuZ2VPcHRpb25zKCl9b25SYW5nZU9wdGlvblNlbGVj''@;'; put 'put ''dChhKXtjb25zdCBkPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChhPy52YWx1ZVswXSksaD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFsdWVbMV0pO3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''Lm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh7c3RhcnREYXRlOmQsZW5kRGF0ZTpofSx7ZW1pdEV2ZW50OiF0aGlzLmhhc0FjdGlvbkJ1dHRvbnN9KSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9TcGVjaWZpY01vbnRoKGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoR3kpLEdlKE1oKSxHZSh1NSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjgsaG9zdEJpbmRp''@;'; put 'put ''bmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxUcigiZGF0ZXBpY2tlciIsITApKCJoYXMtcmFuZ2Utb3B0aW9uIixkLmhhc1JhbmdlT3B0aW9ucykoImhhcy1h''@;'; put 'put ''Y3Rpb24tYnV0dG9ucyIsZC5oYXNBY3Rpb25CdXR0b25zKSl9LGZlYXR1cmVzOltkYShbU21dKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNhbGVuZGFyVmlldyIsIiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwiY2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbMSwiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwiaHJlZiIsImphdmFzY3JpcHQ6dm9pZCgwKSIsInRhYmluZGV4IiwiMCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lm''@;'; put 'put ''Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZtdCgwLE9OZSw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxWTmUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSwyJmEpe2NvbnN0IGg9aGEoMik7eGUoIm5nSWYiLGQuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGgpfX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltucyxiYSxOMSxRWSx0RyxmZGUsZ2RlLG1kZSx2ZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFd4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBfN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFoscmUsY2UsYmUsRWUsQmUscWUpe2lmKHN1cGVyKHFlLEVlLGJlLEJl''@;'; put 'put ''KSx0aGlzLnJlbmRlcmVyPWEsdGhpcy5lbGVtPWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Zix0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT12LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1NLHRoaXMuZGF0ZUlPU2VydmljZT1ELHRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncz1aLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWNlLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1iZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPUJlLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPXFlLHRoaXMuZm9jdXM9ITEs''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zLnB1c2gocmUuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKHJ0PT57dGhpcy5mb2N1cz1ydH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKCgpPT57TS5tYXJrQXNUb3VjaGVkKCl9KSksZil7Y29uc3QgcnQ9ZC5uYXRpdmVF''@;'; put 'put ''bGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtmLmhhc0FjdGlvbkJ1dHRvbnM9Zi5pc1JhbmdlUGlja2VyPSJjbHItZGF0ZS1yYW5nZS1jb250YWluZXIiPT09cnR9fXNldCBzaG93QWN0aW9uQnV0dG9ucyhhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYh''@;'; put 'put ''YT9jb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgcmFuZ2UgcGlja2VyIHJlcXVpcmVzIGFjdGlvbiBidXR0b25zLCBbc2hvd0FjdGlvbkJ1dHRvbnNdIGNhbm5vdCBiZSB0dXJuZWQgb2ZmLiIpOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnM9YX1zZXQg''@;'; put 'put ''Y2xyUG9zaXRpb24oYSl7YSYmVGRbYV0mJih0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbj1UZFthXSl9c2V0IHJhbmdlT3B0aW9ucyhhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0UmFuZ2VPcHRpb25zKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNS''@;'; put 'put ''YW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5l''@;'; put 'put ''cnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWluXSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtaW5gIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBtYXgoYSl7dGhpcy5kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZh''@;'; put 'put ''bGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWF4XSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtYXhgIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIp''@;'; put 'put ''fXNldCBhY3Rpb25CdXR0b24oYSl7dGhpcy50b2dnbGVCdXR0b249YX1nZXQgcG9wb3ZlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9ufWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufWdldCBpc0VuYWJsZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfWdldCBpc0lucHV0RGF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmRpc2FibGVkfHx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2Vy''@;'; put 'put ''dmljZS5kaXNhYmxlZH1nZXQgaXNSYW5nZVBpY2tlcigpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9n''@;'; put 'put ''Z2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmluaXRpYWxpemVDYWxlbmRhcigpOih0aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpKX0pKSx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRhdGVDaGFuZ2VzKCkpfWdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhLnRvRGF0ZSgpKTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdz''@;'; put 'put ''LnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWwse1NFTEVDVEVEX0RBVEU6ZH0pfXJldHVybiB0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsfWxpc3RlbkZvckRhdGVDaGFuZ2Vz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoeDIodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpKS5zdWJzY3JpYmUoYT0+e2lmKHRoaXMuaXNFbmFibGVkKXtjb25zdCBkPXRoaXMuZ2V0VG9nZ2xlQnV0dG9u''@;'; put 'put ''TGFiZWwoYSksaD10aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsImFyaWEtbGFiZWwiLGQpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsInRpdGxlIixkKX19KX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmRhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5pbml0aWFsaXplQ2FsZW5kYXIoKX1kYXRlUmFuZ2VTdHJ1Y3R1cmFsQ2hlY2tzKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuY2xyRGF0ZUlucHV0JiZjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29u''@;'; put 'put ''dGFpbmVyIG11c3QgY29udGFpbiBjbHJTdGFydERhdGUgYW5kIGNsckVuZERhdGUgaW5wdXRzIiksdGhpcy5jbHJTdGFydERhdGVJbnB1dHx8Y29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGlucHV0IiksdGhp''@;'; put 'put ''cy5jbHJFbmREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsckVuZERhdGUgaW5wdXQiKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVvKSxHZShKaSksR2Uo''@;'; put 'put ''c2MpLEdlKE1oKSxHZShYTCksR2UoWXkpLEdlKHU1KSxHZShpcyksR2UoVXkpLEdlKEd5KSxHZShEZCksR2UoQ3AsOCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdLFsiY2xyLWRhdGUtcmFuZ2UtY29udGFp''@;'; put 'put ''bmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLEpMLDUpLGFvKGgsaGRlLDUpLGFvKGgsZGRlLDUpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmNsckRhdGVJbnB1dD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jbHJTdGFydERhdGVJbnB1dD1m''@;'; put 'put ''LmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jbHJFbmREYXRlSW5wdXQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKEJOZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1dHM6e3Nob3dBY3Rpb25C''@;'; put 'put ''dXR0b25zOiJzaG93QWN0aW9uQnV0dG9ucyIsY2xyUG9zaXRpb246ImNsclBvc2l0aW9uIixyYW5nZU9wdGlvbnM6InJhbmdlT3B0aW9ucyIsbWluOiJtaW4iLG1heDoibWF4In0sZmVhdHVyZXM6W2RhKFtDaCxVeCxEZCxVeSxmMSx1NSxNaCxYTCxZeSxHeSxrZF0pLHZkKFtzNV0pLHdhXSxu''@;'; put 'put ''Z0NvbnRlbnRTZWxlY3RvcnM6ek5lLGRlY2xzOjE0LHZhcnM6MTUsY29uc3RzOltbImFjdGlvbkJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xyUG9wb3ZlckFuY2hvciIsIiIsMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxb''@;'; put 'put ''MSwiY2xyLWlucHV0LWdyb3VwIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsImNsYXNzIiwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsiY2RrVHJhcEZvY3VzIiwiIiw0LCJjbHJQb3BvdmVyQ29u''@;'; put 'put ''dGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1''@;'; put 'put ''cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsxLCJkYXRlLXJhbmdlLXNlcGFy''@;'; put 'put ''YXRvciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiXSxbInN0YXR1cyIsImluZm8iLCJzaGFwZSIsImNhbGVuZGFyIl0sWyJjZGtUcmFwRm9jdXMiLCIiXSxbInNoYXBl''@;'; put 'put ''IiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUt''@;'; put 'put ''aWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGpOZSksWXIoMCksbXQoMSxVTmUsMSwwLCJsYWJlbCIsMSksZGUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImRpdiIsNCksbXQoNSxaTmUsNSwwLCJuZy1jb250YWluZXIiLDEpLFlyKDYsMSksbXQoNyxXTmUsMywxLCJi''@;'; put 'put ''dXR0b24iLDUpKDgsWU5lLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw2KSxoZSgpLG10KDksR05lLDEsMCwiY2RzLWljb24iLDcpKDEwLCROZSwxLDAsImNkcy1pY29uIiw4KSxoZSgpLG10KDExLEtOZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEyLHFOZSwxLDAsIm5nLWNvbnRl''@;'; put 'put ''bnQiLDEpKDEzLFhOZSwxLDAsIm5nLWNvbnRlbnQiLDEpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksVHIoImNsci1mb2N1cyIsZC5mb2N1cyksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''ZC5pc1JhbmdlUGlja2VyKSxmZSgyKSx4ZSgibmdJZiIsZC5pc0VuYWJsZWQpLGZlKCkseGUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITAp''@;'; put 'put ''KCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLFp5LE94LEh4LEZ4LHJzLGRzLGJkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksc0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRhdGVJT1NlcnZpY2U9YX12YWxpZGF0ZShhKXtpZih0aGlzLmRhdGVJ''@;'; put 'put ''T1NlcnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpLGg9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSxmPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERh''@;'; put 'put ''dGUudG9EYXRlKCk7aWYoZCYmZDxoKXJldHVybnttaW46e21pbjpoLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX07aWYoZCYmZD5mKXJldHVybnttYXg6e21heDpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0''@;'; put 'put ''cmluZygpfX19cmV0dXJuIG51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHU1LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdLFsiIiwiY2xyU3RhcnREYXRlIiwiIl0sWyIiLCJjbHJF''@;'; put 'put ''bmREYXRlIiwiIl1dLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6aDAsdXNlRXhpc3Rpbmc6YyxtdWx0aTohMH1dKV19KSxjfSkoKSx5WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJoLEV5LExPZSxPT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxLTCxWeCxPMixOeCxBcyxhdSxvZGVdfSksY30pKCk7bmV3IFN0KCJDbHJGaWxlTWVzc2FnZXNUZW1wbGF0ZUNvbnRleHQiKTtsZXQgd1plPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhQT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxhdSxhdV19KSxjfSkoKSx5ZGU9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIF83e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIodixkLGEsaCksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9dix0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKE09PnRoaXMuZm9jdXM9TSkp''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEZCksR2UoQ3AsOCksR2UoZjEpLEdlKFV5KSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciJdXSxjb250ZW50UXVl''@;'; put 'put ''cmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLF9kZSw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmlucHV0PWYuZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkiLGQuaW5wdXQucmVhZG9ubHkpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltkYShbVXksa2QsZjEsQ2gsRGRdKSx3YV0sbmdD''@;'; put 'put ''b250ZW50U2VsZWN0b3JzOm5WZSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1udW1iZXItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbMSwiY2xyLWlucHV0LWdy''@;'; put 'put ''b3VwLWFjdGlvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCJzbSJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXNlcGFyYXRvciJdLFsic2hhcGUiLCJwbHVzIiwi''@;'; put 'put ''c2l6ZSIsInNtIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNp''@;'; put 'put ''cmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKHRWZSksWXIoMCksbXQoMSxyVmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQs''@;'; put 'put ''ImRpdiIsMyksWXIoNSwxKSxkZSg2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmlucHV0LnN0ZXBEb3duKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSxHdCg5LCJkaXYiLDcpLGRlKDEwLCJidXR0b24iLDUpLEh0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZC5pbnB1dC5zdGVwVXAoKX0pLEd0KDExLCJjZHMtaWNvbiIsOCksaGUoKSgpKCksbXQoMTIsaVZlLDEsMCwiY2RzLWljb24iLDkpKDEzLGFWZSwxLDAsImNkcy1pY29uIiwxMCksaGUoKSxtdCgxNCxvVmUsMSwwLCJuZy1jb250ZW50IiwwKSgxNSxzVmUsMSwwLCJu''@;'; put 'put ''Zy1jb250ZW50IiwwKSgxNixsVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKDMpLHhl''@;'; put 'put ''KCJkaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSxmZSgzKSx4ZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMikseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hv''@;'; put 'put ''d1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLF9kZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''IGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe2lmKHN1cGVyKGQseWRlLGgsZix2LE0pLHRoaXMuZm9jdXNTZXJ2aWNlPWEsdGhpcy5jb250cm9sPWYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MSwhYSl0aHJvdyBuZXcgRXJyb3IoImNsck51bWJlcklucHV0IHJlcXVpcmVzIGJl''@;'; put 'put ''aW5nIHdyYXBwZWQgaW4gPGNsci1udW1iZXItaW5wdXQtY29udGFpbmVyPiIpfWdldCByZWFkb25seSgpe3JldHVybiBudWxsIT09dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicmVhZG9ubHkiKX10cmlnZ2VyRm9jdXMoKXshdGhpcy5yZWFkb25seSYmdGhpcy5mb2N1c1Nl''@;'; put 'put ''cnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPSEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMucmVhZG9ubHl8fChzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMSkpfXN0ZXBVcCgpe3RoaXMu''@;'; put 'put ''ZWwubmF0aXZlRWxlbWVudC5zdGVwVXAoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX1zdGVwRG93bigpe3RoaXMu''@;'; put 'put ''ZWwubmF0aXZlRWxlbWVudC5zdGVwRG93bigpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShVeSw4KSxHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiY2xyTnVtYmVySW5wdXQiLCIiXV0s''@;'; put 'put ''aG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkh0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJlRyKCJjbHItaW5wdXQiLCEwKSgi''@;'; put 'put ''Y2xyLW51bWJlci1pbnB1dCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksQ1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCxGT2UsSE9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSksY30pKCk7bmV3IFN0KHZvaWQgMCk7bGV0IHhaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoTk9lLFZPZSx2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLGxHPSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGRzLDcpLDImYSl7bGV0''@;'; put 'put ''IGY7Q2koZj1TaSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOltkYShbQ2hdKV0sbmdDb250ZW50U2VsZWN0b3JzOnVWZSxkZWNsczozLHZhcnM6MSxj''@;'; put 'put ''b25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoY1ZlKSxZcigwKSxZcigxLDEpLG10KDIsZFZlLDEsMCwibGFiZWwiLDApKSwyJmEmJihmZSgyKSx4ZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltiYSxkc10sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''fSksY30pKCksY0c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxsRyxkLGgsZix2KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEpp''@;'; put 'put ''KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxFWmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIF83e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1h''@;'; put 'put ''LHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITEsdGhpcy5fZ2VuZXJhdGVkSWQ9U3UoKX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxp''@;'; put 'put ''bmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpLHRoaXMuc2V0QXJpYUxhYmVsbGVkQnkoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJy''@;'; put 'put ''YWRpb2dyb3VwIjpudWxsfXNldEFyaWFMYWJlbGxlZEJ5KCl7Y29uc3QgYT10aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpO2E/dGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/YTpudWxsOih0aGlzLmdyb3VwTGFiZWw/Lm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5fZ2VuZXJhdGVkSWQpLHRoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP3RoaXMuX2dlbmVyYXRlZElkOm51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCw4''@;'; put 'put ''KSxHZShEZCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsZHMsNyxKaSksYW8oaCxjRyw1KSksMiZhKXtsZXQgZjtDaShm''@;'; put 'put ''PVNpKCkpJiYoZC5ncm91cExhYmVsPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLnJhZGlvcz1mKX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInJvbGUiLGQucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsZC5hcmlhTGFiZWxsZWRCeSksVHIoImNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LGZlYXR1cmVzOltkYShbZjEsa2QsRGQs''@;'; put 'put ''ZjddKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOmZWZSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdy''@;'; put 'put ''YXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xl''@;'; put 'put ''Iiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNs''@;'; put 'put ''ZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoaFZlKSxZcigwKSxtdCgxLHBWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpLFlyKDMsMSksbXQoNCxnVmUs''@;'; put 'put ''MiwwLCJkaXYiLDIpKDUsX1ZlLDUsNCwiZGl2IiwyKSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksVHIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSx4ZSgi''@;'; put 'put ''bmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZHx8ZC5zaG93SW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLGRzLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLGJo''@;'; put 'put ''KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsYXUsVngsQXMsYXVdfSksY30pKCksQVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJ''@;'; put 'put ''Y29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LFZ4LEFzLGF1XX0pLGN9KSgpLCR5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBfN3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9PnthJiYodGhpcy5tdWx0aT1hLnZhbHVlQWNjZXNzb3IgaW5zdGFuY2VvZiBneCx0aGlzLmNvbnRyb2w9YSl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVs''@;'; put 'put ''dGk/ImNsci1tdWx0aXNlbGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13cmFwcGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItc2VsZWN0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGd4LDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubXVsdGlwbGU9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm''@;'; put 'put ''VHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZGEoW2tkLGYxLENoLERkXSksd2FdLG5nQ29udGVudFNlbGVj''@;'; put 'put ''dG9yczpDVmUsZGVjbHM6MTAsdmFyczo4LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIs''@;'; put 'put ''ImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eod1ZlKSxZcigwKSxtdCgxLFNWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksWXIoNCwxKSxtdCg1LE1WZSwxLDAsImNkcy1pY29uIiwzKSg2LHhWZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLG10KDcsRVZlLDEsMCwibmct''@;'; put 'put ''Y29udGVudCIsMCkoOCxUVmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LEFWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoKSx4ZSgibmdDbGFz''@;'; put 'put ''cyIsZC53cmFwcGVyQ2xhc3MoKSksZmUoMikseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlk''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHg3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsJHksZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2VsZWN0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigi''@;'; put 'put ''Y2xyLXNlbGVjdCIsITApfSxmZWF0dXJlczpbd2FdfSksY30pKCksa1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCxiaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSks''@;'; put 'put ''Yy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLGF1LGF1XX0pLGN9KSgpLHdkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgXzd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNv''@;'; put 'put ''bnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltkYShba2QsZjEsQ2gsRGRdKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOkRWZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250''@;'; put 'put ''YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJj''@;'; put 'put ''bHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNs''@;'; put 'put ''ci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoa1ZlKSxZcigwKSxtdCgxLElWZSwxLDAsImxh''@;'; put 'put ''YmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksWXIoNCwxKSxtdCg1LFJWZSwxLDAsImNkcy1pY29uIiwzKSg2LExWZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLG10KDcsT1ZlLDEsMCwibmctY29udGVudCIsMCkoOCxQVmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LEZWZSwxLDAsIm5n''@;'; put 'put ''LWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMykseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UsYmEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFFMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsd2RlLGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShkMSwxMCksR2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbIiIsImNsclRleHRhcmVhIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXRleHRhcmVhIiwhMCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxEWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25z''@;'; put 'put ''KHZoLGJoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSksY30pKCksQ2RlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGF1LExVZSxOVWUseVplLHdaZSx0ZGUseFplLFRaZSxrWmUsRFplLEFaZSxWVWUsQ1plXX0pLGN9KSgpLFNkZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKSxJWmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFRZe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixN''@;'; put 'put ''LEQsWixyZSl7c3VwZXIoYSxkLGgsZix2LE0sRCxaLHJlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVZLDgpLEdlKHZzLDgpLEdlKFdhKSxHZShEbyksR2UoeFksOCksR2UocG0pLEdlKFBMKSxHZShFcykpfSxjLlx1MDI3NWRp''@;'; put 'put ''cj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxSWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1Bcih7fSksY30pKCksTFplPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpO2NsYXNzIGVPe31sZXQgWXg9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhp''@;'; put 'put ''cy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE1tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IFdufWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9''@;'; put 'put ''c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhp''@;'; put 'put ''cy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3Rh''@;'; put 'put ''bEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2Jz''@;'; put 'put ''ZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJv''@;'; put 'put ''dW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09''@;'; put 'put ''dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50''@;'; put 'put ''LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihZeCkpfSxjLlx1MDI3''@;'; put 'put ''NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVy''@;'; put 'put ''OmR9b2YgdGhpcy5fYWxsKWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyB0TyhhLCgpPT57aWYo''@;'; put 'put ''aClyZXR1cm47ZC51bnN1YnNjcmliZSgpO2NvbnN0IHY9dGhpcy5fYWxsLmZpbmRJbmRleChNPT5NLmZpbHRlcj09PWEpO3Y+PTAmJnRoaXMuX2FsbC5zcGxpY2UodiwxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0''@;'; put 'put ''aGlzLl9hbGwucHVzaChmKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4h''@;'; put 'put ''MH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoTW0pLHhyKFl4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgdE97Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgbk89KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVy''@;'; put 'put ''KCksYSBpbnN0YW5jZW9mIHRPP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZDUpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpO2NsYXNzIE1kZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnV0aWxzPWx9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRD''@;'; put 'put ''ZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7YS55PWwueS0xO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KSYmIWQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PTA6''@;'; put 'put ''dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGQ/YS55PWEueS0xOmEueD1hLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZihsLnk+PSh0aGlzLnV0aWxzLnJvd3M/''@;'; put 'put ''dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjApKXJldHVybiBhO2NvbnN0IGg9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGEueT1sLnkrMSwhaCYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhw''@;'; put 'put ''YW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleUxlZnQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiAwPT09bC54fHwoYS54PWwueC0xKSxhfWtleVJpZ2h0KGwpe2NvbnN0IGE9dGhpcy51''@;'; put 'put ''dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz8ubGVuZ3RoLTE/dGhpcy51dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBhLng9bC54PGQ/YS54KzE6YS54LGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5l''@;'; put 'put ''eHRDZWxsQ29vcmRzKGwpLGg9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowO3JldHVybiBkLng9aD90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjAsYSYmKGQueT1oLHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGQueSkmJihkLng9dGhpcy51''@;'; put 'put ''dGlscy5nZXRDZWxsc0ZvclJvdyhkLnkpLmxlbmd0aC0xKSksZH1rZXlIb21lKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiBkLng9MCxhJiYoZC55PTApLGR9a2V5UGFnZVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2Vs''@;'; put 'put ''bENvb3JkcyhsKSxkPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55LWQ+MD9sLnktZCsxOjEsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9h''@;'; put 'put ''Lng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55''@;'; put 'put ''KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQ''@;'; put 'put ''ZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk9YS55LTE6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJv''@;'; put 'put ''dyhhLnkpP2EueD0wOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxLGEueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEu''@;'; put 'put ''eSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX19Y2xhc3MgeGRlIGV4dGVuZHMgTWRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lm''@;'; put 'put ''KGEueT1sLnktMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKSl0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiZhLnk+MCYmKGEueT1hLnktMSk7ZWxzZSBzd2l0Y2godGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkmJihhLnk9YS55LTEpLCEwKXtjYXNlIHRoaXMudXRpbHMuaXNE''@;'; put 'put ''ZXRhaWxzUm93KGEueSk6YS54PTA7YnJlYWs7Y2FzZSExPT09dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KTphLng9bC54O2JyZWFrO2RlZmF1bHQ6YS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSl9cmV0dXJuIGF9a2V5RG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3Jl''@;'; put 'put ''YXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIGwueT49ZHx8KGEueT1sLnkrMSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT9hLnk9YS55PGQ/YS55KzE6YS55Oih0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQo''@;'; put 'put ''YS55KSYmKGEueT1hLnkrMSksYS54PXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/MDp0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSksYX1rZXlMZWZ0KGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5pc0Rl''@;'; put 'put ''dGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KDAhPT1sLng/YS54PWwueC0xOnRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpfHwoYS55PWwueS0xLGEueD10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpLTEpLGEpOnN1cGVyLmtleUxlZnQobCl9a2V5''@;'; put 'put ''UmlnaHQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKCF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkpcmV0dXJuIHN1cGVyLmtleVJpZ2h0KGwpO2NvbnN0IGQ9dGhpcy51dGlscy5yb3dz''@;'; put 'put ''Py5sZW5ndGgtMT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGwueD49ZHx8KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpJiZsLng9PT10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLngpLTEmJnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChsLnkp''@;'; put 'put ''JiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KT8oYS55PWwueSsxLGEueD0wKTphLng9bC54KzEpLGF9a2V5RW5kKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGls''@;'; put 'put ''cy5pc1Jvd1JlcGxhY2VkKGwueSl8fGE/c3VwZXIua2V5RW5kKGwsYSk6KGQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoLTEsZCl9a2V5SG9tZShsLGEpe2NvbnN0IGQ9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtyZXR1cm4gdGhpcy51dGlscy5p''@;'; put 'put ''c0RldGFpbHNSb3cobC55KXx8dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSk/KGQueD0wLGQueT1sLnktMSxhJiYoZC55PTApLGQpOnN1cGVyLmtleUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGls''@;'; put 'put ''cy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1Jv''@;'; put 'put ''dyhhLnkpfHwoYS55PWEueSsxLGEueD0wKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJih0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKTp0aGlzLnV0aWxz''@;'; put 'put ''LmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PTApLGF9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJu''@;'; put 'put ''IGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP2EueTxkJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1h''@;'; put 'put ''LnkrMSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9MCksYX19Y2xhc3MgT1plIGV4dGVuZHMg''@;'; put 'put ''eGRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWtleVVwKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKTtpZigwPT09bC55KXJldHVybiBhO2lmKGEueT1sLnktMSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSkpcmV0dXJuIHN1cGVy''@;'; put 'put ''LmtleVVwKGwpO2NvbnN0IGQ9dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk7cmV0dXJuIGQmJnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS55PWEueS0xOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpPyhhLnk9YS55LTEsdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KXx8''@;'; put 'put ''KGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KTohZCYmdGhpcy51dGlscy5pc0RldGFp''@;'; put 'put ''bHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPWQ/dGhpcy51''@;'; put 'put ''dGlscy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowO3JldHVybiBsLnk+PWQ/YTooYS55PWwueSsxLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlEb3duKGwpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKXx8dGhpcy51dGlscy5pc1Jvd1Jl''@;'; put 'put ''cGxhY2VkKGEueSk/YS55PWEueTxkP2EueSsxOmEueS0xOmEueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGwueSkubGVuZ3RoPmg/bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSksYSkpfWtleUxlZnQobCl7''@;'; put 'put ''cmV0dXJuIHN1cGVyLmtleUxlZnQobCl9a2V5UmlnaHQobCl7cmV0dXJuIHN1cGVyLmtleVJpZ2h0KGwpfWtleUVuZChsLGEpe3JldHVybiBzdXBlci5rZXlFbmQobCxhKX1rZXlIb21lKGwsYSl7cmV0dXJuIHN1cGVyLmtleUhvbWUobCxhKX1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0''@;'; put 'put ''aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5UGFnZVVwKGwpOih0aGlzLnV0aWxzLmlzQWN0aW9uQ2Vs''@;'; put 'put ''bChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS55PWEueSsxLGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSk6dGhpcy51''@;'; put 'put ''dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkp''@;'; put 'put ''LGEpfWtleVBhZ2VEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCxoPXRoaXMudXRpbHMuaXRlbXNQZXJQYWdlO3JldHVybiBhLnk9bC55K2g+PWQ/ZDpsLnkraCx0aGlz''@;'; put 'put ''LnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/c3VwZXIua2V5UGFnZURvd24obCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYhdGhpcy51''@;'; put 'put ''dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk8ZCYmKGEueT1hLnkrMSxhLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD1sLngrdGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQoYS55KTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhKX19Y2xhc3MgUFple2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3N0PWwsdGhpcy5jb25maWc9YX1nZXQgZ3JpZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKX1nZXQgY2VsbHMoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRo''@;'; put 'put ''aXMuY29uZmlnLmtleUdyaWRDZWxscyl9Z2V0IGN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKXtjb25zdCBsPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGg9PiIwIj09PWguZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsLGE9bD9sLmNsb3Nlc3QodGhpcy5jb25m''@;'; put 'put ''aWcua2V5R3JpZFJvd3MpOm51bGw7cmV0dXJue3g6YSYmbD9BcnJheS5mcm9tKGEucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGwpOjAseTphJiZsJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoYSk6MH19Z2V0IGl0''@;'; put 'put ''ZW1zUGVyUGFnZSgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIikuY2xpZW50SGVpZ2h0L3RoaXMucm93c1swXS5jbGllbnRIZWlnaHQpLTF8fDB9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGwpe2NvbnN0IGE9dGhpcy5jdXJyZW50Q2VsbENv''@;'; put 'put ''b3JkaW5hdGVzLGQ9dGhpcy5nZXROYXZTdHJhdGVneShhKTtzd2l0Y2gobC5rZXkpe2Nhc2UgZ2EuQXJyb3dVcDpyZXR1cm4gZC5rZXlVcChhKTtjYXNlIGdhLkFycm93RG93bjpyZXR1cm4gZC5rZXlEb3duKGEpO2Nhc2UicnRsIj09PXRoaXMuaG9zdC5kaXI/Z2EuQXJyb3dSaWdodDpnYS5B''@;'; put 'put ''cnJvd0xlZnQ6cmV0dXJuIGQua2V5TGVmdChhKTtjYXNlInJ0bCI9PT10aGlzLmhvc3QuZGlyP2dhLkFycm93TGVmdDpnYS5BcnJvd1JpZ2h0OnJldHVybiBkLmtleVJpZ2h0KGEpO2Nhc2UgZ2EuSG9tZTpyZXR1cm4gZC5rZXlIb21lKGEsbC5jdHJsS2V5KTtjYXNlIGdhLkVuZDpyZXR1cm4g''@;'; put 'put ''ZC5rZXlFbmQoYSxsLmN0cmxLZXkpO2Nhc2UgZ2EuUGFnZVVwOnJldHVybiBkLmtleVBhZ2VVcChhKTtjYXNlIGdhLlBhZ2VEb3duOnJldHVybiBkLmtleVBhZ2VEb3duKGEpO2RlZmF1bHQ6cmV0dXJuIGF9fWdldENlbGxzRm9yUm93KGwpe3JldHVybiB0aGlzLnJvd3NbbF0ucXVlcnlTZWxl''@;'; put 'put ''Y3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfWlzRXhwYW5kZWRSb3cobCl7Y29uc3QgYT10aGlzLnJvd3NbbF0ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvdy1kZXRhaWwiKTtyZXR1cm4hIWEmJiJub25lIiE9PWEuc3R5bGUuZGlzcGxheX1pc0RldGFpbHNSb3cobCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucm93c1tsXS5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLXJvdy1kZXRhaWwiKX1pc1Jvd1JlcGxhY2VkKGwpe3JldHVybiEhdGhpcy5yb3dzW2xdLmNsb3Nlc3QoImNsci1kZy1yb3cuZGF0YWdyaWQtcm93LXJlcGxhY2VkIil9aXNTaW5nbGVDZWxsRXhwYW5kZWRSb3co''@;'; put 'put ''bCl7cmV0dXJuIDE9PT10aGlzLnJvd3NbbF0/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKS5sZW5ndGh9YWN0aW9uQ2VsbENvdW50KGwpe3JldHVybiB0aGlzLmFjdGlvbkNlbGxzQXNBcnJheShsKS5sZW5ndGh9YWN0aW9uQ2VsbHNBc0FycmF5KGwpe3JldHVy''@;'; put 'put ''biBBcnJheS5mcm9tKHRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yQWxsKCIuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbCwgLmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNvbHVtbiIpKX1pc0FjdGlvbkNlbGwobCl7cmV0dXJuISF0aGlzLmFjdGlvbkNlbGxzQXNB''@;'; put 'put ''cnJheShsLnkpW2wueF19Y3JlYXRlTmV4dENlbGxDb29yZHMobCl7cmV0dXJue3g6bC54LHk6bC55fX1nZXROYXZTdHJhdGVneShsKXtzd2l0Y2goITApe2Nhc2UgdGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhsLnkpOnJldHVybiBuZXcgeGRlKHRoaXMpO2Nhc2UgdGhpcy5pc0RldGFp''@;'; put 'put ''bHNSb3cobC55KTpjYXNlIHRoaXMuaXNFeHBhbmRlZFJvdyhsLnkpOnJldHVybiBuZXcgT1plKHRoaXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBNZGUodGhpcyl9fX1jb25zdCBFZGU9WyJhW2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rp''@;'; put 'put ''c2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCJbY29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXTtmdW5jdGlvbiBIWmUoYyl7Y29u''@;'; put 'put ''c3QgbD1FZGUuam9pbigiLCIpO3JldHVybiBjLm1hdGNoZXMobCl9bGV0IHJPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5za2lwSXRlbUZvY3VzPSExLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITEsdGhpcy5kZXN0cm95JD1uZXcgV24sdGhpcy5fYWN0aXZl''@;'; put 'put ''Q2VsbD1udWxsLHRoaXMuY29uZmlnPXtrZXlHcmlkUm93czonW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKTpub3QoW3N0eWxlKj0iZGlzcGxheTogbm9uZSJdKScsa2V5R3JpZENlbGxzOiJbcm9sZT1ncmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpu''@;'; put 'put ''b3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgLmRhdGFncmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0i''@;'; put 'put ''fX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1hZGRMaXN0ZW5lcnMoKXt0aGlzLmxpc3RlbmVyc0FkZGVkfHwodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57eGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJtb3VzZWRv''@;'; put 'put ''d24iKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKDE9PT1hLmJ1dHRvbnMmJiFhLmN0cmxLZXkpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoaD0+aD09PWEudGFyZ2V0fHxoPT09''@;'; put 'put ''YS50YXJnZXQuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKTpudWxsO2QmJnRoaXMuc2V0QWN0aXZlQ2VsbChkLHtrZWVwRm9jdXM6SFplKGEudGFyZ2V0KX0pfX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwid2hlZWwiKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJz''@;'; put 'put ''Y3JpYmUoKCk9Pnt0aGlzLnJlbW92ZUFjdGl2ZUNlbGwoKX0pLHhkKHRoaXMua2V5TmF2VXRpbHMuZ3JpZCwiZm9jdXNvdXQiKS5waXBlKGZtKDApLFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdlV0aWxzLmdyaWQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZl''@;'; put 'put ''RWxlbWVudCl8fHRoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSkseGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJrZXlkb3duIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigoIWEudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8YS5rZXkh''@;'; put 'put ''PT1nYS5BcnJvd0xlZnQmJmEua2V5IT09Z2EuQXJyb3dSaWdodCkmJihhLmtleT09PWdhLkFycm93VXB8fGEua2V5PT09Z2EuQXJyb3dEb3dufHxhLmtleT09PWdhLkFycm93TGVmdHx8YS5rZXk9PT1nYS5BcnJvd1JpZ2h0fHxhLmtleT09PWdhLkVuZHx8YS5rZXk9PT1nYS5Ib21lfHxhLmtl''@;'; put 'put ''eT09PWdhLlBhZ2VVcHx8YS5rZXk9PT1nYS5QYWdlRG93bikpe2NvbnN0IGQ9dGhpcy5rZXlOYXZVdGlscy5nZXROZXh0SXRlbUNvb3JkaW5hdGUoYSksaD10aGlzLmtleU5hdlV0aWxzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLmtleU5hdlV0aWxzLmdldENlbGxzRm9yUm93KGQueSkpW2QueF06''@;'; put 'put ''bnVsbDtoJiZ0aGlzLnNldEFjdGl2ZUNlbGwoaCksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhpcy5rZXlOYXZVdGlscz1uZXcgUFplKGEsdGhpcy5jb25maWcpLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5y''@;'; put 'put ''ZXNldEtleUdyaWQoKX1yZXNldEtleUdyaWQoKXt0aGlzLmtleU5hdlV0aWxzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmtleU5hdlV0aWxzLmNlbGxzP3RoaXMua2V5TmF2VXRpbHMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0''@;'; put 'put ''ZSgidGFiaW5kZXgiLCIwIil9cmVtb3ZlQWN0aXZlQ2VsbCgpe3RoaXMuX2FjdGl2ZUNlbGw9bnVsbH1nZXRBY3RpdmVDZWxsKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUNlbGx9c2V0QWN0aXZlQ2VsbChhLHtrZWVwRm9jdXM6ZH09e2tlZXBGb2N1czohMX0pe2NvbnN0IGg9dGhpcy5rZXlOYXZV''@;'; put 'put ''dGlscy5jZWxscz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuY2VsbHMpLmZpbmQoZj0+IjAiPT09Zi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7aWYoaCYmaC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhp''@;'; put 'put ''cy5fYWN0aXZlQ2VsbD1hLCF0aGlzLnNraXBJdGVtRm9jdXMmJiFkKXtsZXQgZjtpZigiY29sdW1uaGVhZGVyIj09PWEuZ2V0QXR0cmlidXRlKCJyb2xlIikpZj1hO2Vsc2V7Y29uc3Qgdj1mdW5jdGlvbiBGWmUoYyl7Y29uc3QgYT1bLi4uRWRlLCdbdGFiaW5kZXg9IjAiXTpub3QoW2Rpc2Fi''@;'; put 'put ''bGVkXSknXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGEpKX0oYSk7Zj12Lmxlbmd0aD92WzBdOmF9Zi5mb2N1cygpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoV2EpKX0sYy5cdTAyNzVwcm92PWFu''@;'; put 'put ''KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYs''@;'; put 'put ''dGhpcy5lbGVtZW50UmVmPXYsdGhpcy5rZXlOYXZpZ2F0aW9uPU0sdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9U3UoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6''@;'; put 'put ''T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKEQ9Pnt0aGlzLm9wZW49RCx0aGlzLmFyaWFFeHBhbmRlZD1EfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4o''@;'; put 'put ''YSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMua2V5TmF2aWdhdGlvbiYmKHRoaXMu''@;'; put 'put ''a2V5TmF2aWdhdGlvbi5za2lwSXRlbUZvY3VzPWEpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQo''@;'; put 'put ''KCk9Pnt0aGlzLnNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0''@;'; put 'put ''aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5w''@;'; put 'put ''YXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGQ1KSxHZShpcyksR2Uoc2MpLEdlKGlvKSxHZShKaSksR2Uock8sOCkpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoSFZlLDUsSmkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOltObi5Ob25lLCJj''@;'; put 'put ''bHJEZ0ZpbHRlck9wZW4iLCJvcGVuIl0sY3VzdG9tRmlsdGVyOltObi5Ob25lLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOmVPLHVzZUV4aXN0aW5nOmN9XSks''@;'; put 'put ''d2Esd2xdLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6MTMsY29uc3RzOltbImFuY2hvciIsIiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0s''@;'; put 'put ''WyJzb2xpZCIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1maWx0ZXIiLCJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1maWx0ZXIiLDMsImlkIl0sWzEsImRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckNsb3Nl''@;'; put 'put ''QnV0dG9uIiwiIiwxLCJjbG9zZSJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsImJ1dHRvbiIsMSwwKSxHdCgyLCJjZHMtaWNvbiIsMiksaGUoKSxtdCgzLE5WZSw1LDMsImRpdiIsMykpLDImYSYmKFRyKCJkYXRhZ3Jp''@;'; put 'put ''ZC1maWx0ZXItb3BlbiIsZC5vcGVuKSgiZGF0YWdyaWQtZmlsdGVyZWQiLGQuYWN0aXZlKSxocigiYXJpYS1sYWJlbCIsZC50b2dnbGVCdXR0b25BcmlhTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSxmZSgyKSxocigi''@;'; put 'put ''c3RhdHVzIixkLmFjdGl2ZT8iaW5mbyI6bnVsbCkoInNoYXBlIixkLmFjdGl2ZT8iZmlsdGVyLWdyaWQtY2lyY2xlIjoiZmlsdGVyLWdyaWQiKSxmZSgpLHhlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9w''@;'; put 'put ''b3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltaeSxycyxPeCxMMWUsSHgsRnhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIHVHe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJv''@;'; put 'put ''cD1sLGwuaW5kZXhPZigiLiIpPj0wJiYodGhpcy5zcGxpdFByb3A9bC5zcGxpdCgiLiIpKX1nZXRQcm9wVmFsdWUobCl7aWYodGhpcy5zcGxpdFByb3Ape2xldCBhPWw7Zm9yKGNvbnN0IGQgb2YgdGhpcy5zcGxpdFByb3Ape2lmKG51bGw9PT1hfHx0eXBlb2YgYT4idSJ8fHR5cGVvZiBhW2Rd''@;'; put 'put ''PiJ1IilyZXR1cm47YT1hW2RdfXJldHVybiBhfXJldHVybiBsW3RoaXMucHJvcF19fWNsYXNzIGlPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgdUcobCl9YWNjZXB0cyhsLGEsZCl7Y29uc3QgaD10aGlzLm5lc3RlZFBy''@;'; put 'put ''b3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodm9pZCAwPT09aHx8bnVsbCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg8YSl8fG51bGwhPT1kJiYoIm51bWJlciIhPXR5cGVvZiBofHxoPmQpKX19Y2xhc3MgRTd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5n''@;'; put 'put ''ZXM9bmV3IFduLHRoaXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLl9sb3csdGhpcy5faGlnaF19c2V0IHZhbHVlKGwpe2NvbnN0IGE9bFswXSxkPWxbMV07''@;'; put 'put ''KGEhPT10aGlzLl9sb3d8fGQhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz1hLHRoaXMuX2hpZ2g9ZCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBsb3coKXtyZXR1cm4gdGhpcy5fbG93fXNldCBsb3cobCl7bCE9PXRoaXMuX2xvdyYmKHRoaXMuX2xv''@;'; put 'put ''dz1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGlnaChsKXtsIT09dGhpcy5faGlnaCYmKHRoaXMuX2hpZ2g9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdl''@;'; put 'put ''dCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgaU8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5fbG93LGhpZ2g6dGhpcy5faGlnaH06dGhpc31pc0FjdGl2ZSgpe3JldHVybiBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFj''@;'; put 'put ''Y2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBFNyYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBpTz90aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgaU8mJmwuZmlsdGVyRm4ucHJv''@;'; put 'put ''cD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC5sb3c9PT10aGlzLl9sb3cmJmwuaGlnaD09PXRoaXMuX2hpZ2g6bD09PXRoaXMpfX1sZXQgVGRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBuT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncz1oLHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT12LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRl''@;'; put 'put ''ci5oaWdoXX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkoYSk/YSYmKGFbMF0hPT10aGlzLmZpbHRlci5sb3d8fGFbMV0hPT10aGlzLmZpbHRlci5oaWdoKSYmKHRoaXMuZmlsdGVyLmxvdz0ibnVtYmVyIj09dHlwZW9mIGFbMF0/YVswXTpudWxsLHRoaXMuZmlsdGVy''@;'; put 'put ''LmhpZ2g9Im51bWJlciI9PXR5cGVvZiBhWzFdP2FbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlcz1hfXNldCBjdXN0b21OdW1lcmljRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiB0Tz9hOm5ldyBFNyhhKSks''@;'; put 'put ''dGhpcy5pbml0RmlsdGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlcyl9Z2V0IG1heFBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''bWF4VmFsdWV9Z2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWV9Z2V0IGZyb21MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMuZnJvbUxhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5m''@;'; put 'put ''cm9tTGFiZWx9Z2V0IHRvTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLnRvTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnRvTGFiZWx9Z2V0IGxvdygpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIubG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmls''@;'; put 'put ''dGVyLmxvdzpudWxsfXNldCBsb3coYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''YSYmKHRoaXMuZmlsdGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhp''@;'; put 'put ''Z2gpP3RoaXMuZmlsdGVyLmhpZ2g6bnVsbH1zZXQgaGlnaChhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlzLmZpbHRlci5oaWdoPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToi''@;'; put 'put ''bnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dn''@;'; put 'put ''bGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShkNSksR2Uodm0pLEdlKGlzKSxHZShzYyksR2UoV2Ep''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKFZWZSw1KSxxYShHeCw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSxDaShoPVNp''@;'; put 'put ''KCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsIm1pblBsYWNlaG9sZGVyIl0sbWF4UGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4''@;'; put 'put ''UGxhY2Vob2xkZXIiXSxmcm9tTGFiZWw6W05uLk5vbmUsImNsckZpbHRlckZyb21MYWJlbCIsImZyb21MYWJlbCJdLHRvTGFiZWw6W05uLk5vbmUsImNsckZpbHRlclRvTGFiZWwiLCJ0b0xhYmVsIl0sdmFsdWU6W05uLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1l''@;'; put 'put ''cmljRmlsdGVyOltObi5Ob25lLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjdXN0b21OdW1lcmljRmlsdGVyIl19LG91dHB1dHM6e2ZpbHRlclZhbHVlQ2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6ZU8sdXNlRXhpc3Rpbmc6Y31dKSx3YV0sZGVj''@;'; put 'put ''bHM6MTIsdmFyczoxMCxjb25zdHM6W1siaW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWzEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWZvcm0iXSxbMSwiY2xyLWNvbnRy''@;'; put 'put ''b2wtbGFiZWwiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJsb3ciLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl0sWyJjbHJO''@;'; put 'put ''dW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXtpZigxJmEpe2NvbnN0IGg9TG4oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwyKSxnaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0''@;'; put 'put ''LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxPZSg0KSxoZSgpLGRlKDUsImlucHV0Iiw1LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC5sb3csdil8fChkLmxvdz12KSxDdCh2KX0pLGhlKCkoKSxkZSg3LCJjbHItbnVtYmVyLWlucHV0LWNvbnRh''@;'; put 'put ''aW5lciIpKDgsImxhYmVsIiw0KSxPZSg5KSxoZSgpLGRlKDEwLCJpbnB1dCIsNiwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQuaGlnaCx2KXx8KGQuaGlnaD12KSxDdCh2KX0pLGhlKCkoKSgpKCl9MiZhJiYoeGUoImNsckRnRmlsdGVyIixkLnJl''@;'; put 'put ''Z2lzdGVyZWQpLHBpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoNCksQ3IoZC5mcm9tTGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC5sb3cpLHhlKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxocigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZh''@;'; put 'put ''bHVlKSxmZSg0KSxDcihkLnRvTGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC5oaWdoKSx4ZSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W2RzLF9kZSx5ZGUscWws''@;'; put 'put ''dkwsbmwsR3MsR3hdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIGFPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgdUcobCl9YWNjZXB0cyhsLGEpe2NvbnN0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1''@;'; put 'put ''ZShsKTtyZXR1cm4hKHR5cGVvZiBkPiJ1IikmJih0aGlzLmV4YWN0PygiIitkKS50b0xvd2VyQ2FzZSgpPT09YTooIiIrZCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wKX19Y2xhc3MgVDd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IFduLHRo''@;'; put 'put ''aXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGxvd2VyQ2FzZVZhbHVlKCl7cmV0dXJuIHRoaXMuX2xvd2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZp''@;'; put 'put ''bHRlckZuIGluc3RhbmNlb2YgYU8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9yYXdWYWx1ZX1zZXQgdmFsdWUobCl7bHx8KGw9IiIpLGwhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVl''@;'; put 'put ''PWwsdGhpcy5fbG93ZXJDYXNlVmFsdWU9bC50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQobCkpfWlzQWN0aXZlKCl7cmV0dXJuISF0aGlzLnZhbHVlfWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMubG93ZXJDYXNlVmFsdWUpfWVx''@;'; put 'put ''dWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIFQ3JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIGFPP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBhTyYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLnZhbHVlPT09dGhpcy52YWx1ZTpsPT09dGhpcyl9fWxldCBkRz0o''@;'; put 'put ''KCk9PntjbGFzcyBjIGV4dGVuZHMgbk97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmNkcj1NLHRoaXMubmdab25l''@;'; put 'put ''PUQsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vcGVuPSExLHRoaXMubGFiZWxWYWx1ZT0iIix0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgdE8/YTpuZXcgVDcoYSkpLHRoaXMuaW5pdEZpbHRlclZh''@;'; put 'put ''bHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10''@;'; put 'put ''aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUo''@;'; put 'put ''KCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRGaWx0ZXJMYWJlbCgpLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVz''@;'; put 'put ''dHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0RmlsdGVyTGFiZWwoKXtpZih0aGlzLmxhYmVsKXJldHVybiB2b2lkKHRoaXMubGFiZWxWYWx1ZT10aGlzLmxhYmVsKTtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJj''@;'; put 'put ''bHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKTt0aGlzLmxhYmVsVmFsdWU9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyTGFiZWwse0NPTFVNTjpkPy50ZXh0Q29udGVudC50''@;'; put 'put ''cmltKCl8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGQ1KSxHZSh2bSksR2UoaXMpLEdlKHNjKSxHZShKaSksR2UoRXMpLEdlKFdhKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmls''@;'; put 'put ''dGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKEJWZSw1KSxxYShHeCw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOltO''@;'; put 'put ''bi5Ob25lLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIl0sbGFiZWw6W05uLk5vbmUsImNsckZpbHRlckxhYmVsIiwibGFiZWwiXSxjdXN0b21TdHJpbmdGaWx0ZXI6W05uLk5vbmUsImNsckRnU3RyaW5nRmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6W05u''@;'; put 'put ''Lk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTplTyx1c2VFeGlzdGluZzpjfV0pLHdhLHdsXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1siaW5wdXQi''@;'; put 'put ''LCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsInNlYXJjaCIsImNscklucHV0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNl''@;'; put 'put ''aG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMSksZ2koImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRl''@;'; put 'put ''KDEsImNsci1pbnB1dC1jb250YWluZXIiKSgyLCJsYWJlbCIpLE9lKDMpLGhlKCksZGUoNCwiaW5wdXQiLDIsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxtaShkLnZhbHVlLHYpfHwoZC52YWx1ZT12KSxDdCh2KX0pLGhlKCkoKSgpfTImYSYmKHhlKCJj''@;'; put 'put ''bHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxwaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDMpLENyKGQubGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC52YWx1ZSkseGUoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLnBsYWNl''@;'; put 'put ''aG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltkcyxaMSxHTCxxbCxubCxHcyxHeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkseG09KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwo''@;'; put 'put ''bD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxLeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQ9MH1nZXQgaGFzQWN0aW9uYWJs''@;'; put 'put ''ZVJvdygpe3JldHVybiB0aGlzLmFjdGlvbmFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQrK311bnJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0''@;'; put 'put ''YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMucm93QWN0aW9ucz1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5yb3dBY3Rpb25zLmhhc0FjdGlvbmFibGVSb3d9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxHZSh4bSw4KSxHZShLeSkpfSxj''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXSxbImNsci1kZy1yb3ciXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLEFkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtl''@;'; put 'put ''eVVwRXZlbnRMaXN0ZW5lcj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihhKXshMT09PXRoaXMubW9kYWxTdGFjay5pbmNsdWRlcyhhKSYmdGhpcy5tb2RhbFN0YWNrLnVuc2hpZnQoYSksZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExp''@;'; put 'put ''c3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShhKXtjb25zdCBkPXRoaXMubW9kYWxTdGFjay5pbmRleE9mKGEpO2Q+LTEmJnRoaXMubW9kYWxTdGFjay5zcGxpY2UoZCwxKSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmZWwodGhpcy5w''@;'; put 'put ''bGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfW9uS2V5VXAoYSl7dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmSTIoYS5rZXkpPT09Z2EuRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVy''@;'; put 'put ''KCksdGhpcy5tb2RhbFN0YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFhmPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1hLHRoaXMucHJldmVudFNjcm9sbD0hMSx0aGlzLnRvZ2dsZVN0YXRlPSExLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fc3RhdGU9bmV3IGVpKHRoaXMudG9nZ2xlU3RhdGUpfWdldCBlbmFibGVkKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQoYSl7dGhpcy5fZW5hYmxlZD1hfWdldCBwcmV2ZW50Rm9jdXNTY3JvbGwoKXtyZXR1cm4gdGhpcy5wcmV2ZW50U2Nyb2xsfXNldCBwcmV2ZW50Rm9jdXNTY3JvbGwoYSl7dGhpcy5wcmV2ZW50U2Nyb2xsPWF9Z2V0IHN0YXRlKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9b3BlbihhLGQpe3RoaXMuY2FjaGU9YSx0aGlzLmJ1dHRvbj1kLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhp''@;'; put 'put ''cy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpfWNsb3NlKCl7dGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLnJldHVybkZvY3VzKCksdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1v''@;'; put 'put ''ZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKX1yZXR1cm5Gb2N1cygpe3RoaXMuYnV0dG9uJiYodGhpcy5idXR0b24uZm9jdXMoe3ByZXZlbnRTY3JvbGw6dGhpcy5wcmV2ZW50Rm9jdXNTY3JvbGx9KSx0aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoYSxkKXt0aGlzLmlzUm93''@;'; put 'put ''T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGQpfWlzUm93T3BlbihhKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEFkZSkpfSxjLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHF5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZp''@;'; put 'put ''Y2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFhmKSl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksazc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEx5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBj''@;'; put 'put ''bHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRhYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2Uo''@;'; put 'put ''eG0sOCksR2UocXkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKTtjbGFzcyBvT3tjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCx0aGlzLm5lc3RlZFByb3A9bmV3IHVHKGwp''@;'; put 'put ''fWNvbXBhcmUobCxhKXtsZXQgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpLGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShhKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGQmJihkPWQudG9Mb3dlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpLHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQ/dHlwZW9mIGg+InUifHxudWxsPT09aD8wOjE6dHlwZW9mIGg+InUifHxudWxsPT09aHx8ZDxoPy0xOmQ+aD8xOjB9fXZhciB4aD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsY1tjLkFTQz0xXT0iQVND''@;'; put 'put ''IixjW2MuREVTQz0tMV09IkRFU0MiLGN9KHhofHx7fSk7Y29uc3QgWHk9ImRhdGFncmlkLWZpeGVkLXdpZHRoIiwkeD0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IGhHPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jb2x1bW5WaWV3PXRoaXMudGVtcGxhdGVSZWYu''@;'; put 'put ''Y3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5WaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY29s''@;'; put 'put ''dW1uIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoalZlLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNvbHVtblBvcnRhbCIsIiJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksbXQoMCx6VmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHNPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuX3JldmVyc2U9''@;'; put 'put ''ITEsdGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY29tcGFyYXRvcigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfXNldCBjb21wYXJhdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURl''@;'; put 'put ''Ym91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IHJldmVyc2UoKXtyZXR1cm4gdGhpcy5fcmV2ZXJzZX1zZXQgcmV2ZXJzZShhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fcmV2ZXJzZT1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdl''@;'; put 'put ''RG9uZSgpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZShhLGQpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLmNvbXBhcmF0b3I9PT1hP3RoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkfHwhdGhpcy5fcmV2ZXJz''@;'; put 'put ''ZToodGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkKSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1jbGVhcigpe3RoaXMuY29tcGFyYXRvcj1udWxsfWNvbXBhcmUoYSxkKXtyZXR1cm4odGhpcy5yZXZlcnNl''@;'; put 'put ''Py0xOjEpKnRoaXMuY29tcGFyYXRvci5jb21wYXJlKGEsZCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihZeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpj''@;'; put 'put ''Llx1MDI3NWZhY30pLGN9KSgpO3ZhciBKZj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkFMSUdOX0NPTFVNTlM9MF09IkFMSUdOX0NPTFVNTlMiLGNbYy5DQUxDVUxBVEVfTU9ERV9PTj0xXT0iQ0FMQ1VMQVRFX01PREVfT04iLGNbYy5DQUxDVUxBVEVfTU9ERV9PRkY9Ml09IkNBTENVTEFURV9N''@;'; put 'put ''T0RFX09GRiIsY1tjLkNMRUFSX1dJRFRIUz0zXT0iQ0xFQVJfV0lEVEhTIixjW2MuQ09NUFVURV9DT0xVTU5fV0lEVEhTPTRdPSJDT01QVVRFX0NPTFVNTl9XSURUSFMiLGN9KEpmfHx7fSk7bGV0IEQ3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9yZW5kZXJTdGVwPW5ldyBX''@;'; put 'put ''bix0aGlzLmFscmVhZHlTaXplZD0hMX1nZXQgcmVuZGVyU3RlcCgpe3JldHVybiB0aGlzLl9yZW5kZXJTdGVwLmFzT2JzZXJ2YWJsZSgpfWZpbHRlclJlbmRlclN0ZXBzKGEpe3JldHVybiB0aGlzLnJlbmRlclN0ZXAucGlwZSgkbChkPT5hPT09ZCkpfXJlc2l6ZSgpe3RoaXMuX3JlbmRlclN0''@;'; put 'put ''ZXAubmV4dChKZi5DQUxDVUxBVEVfTU9ERV9PTiksdGhpcy5hbHJlYWR5U2l6ZWQmJnRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DTEVBUl9XSURUSFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DT01QVVRFX0NPTFVNTl9XSURUSFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5BTElH''@;'; put 'put ''Tl9DT0xVTU5TKSx0aGlzLmFscmVhZHlTaXplZD0hMCx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ0FMQ1VMQVRFX01PREVfT0ZGKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUw''@;'; put 'put ''Mjc1ZmFjfSksY30pKCksZkc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5fcmVzaXplZEJ5PTB9Z2V0IHJlc2l6ZWRCeSgpe3JldHVybiB0aGlzLl9yZXNpemVkQnl9Z2V0IG1pbkNvbHVt''@;'; put 'put ''bldpZHRoKCl7cmV0dXJuIHRoaXMuZG9tQWRhcHRlci5taW5XaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfHw5Nn1nZXQgbWF4UmVzaXplUmFuZ2UoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZS10aGlzLm1pbkNvbHVtbldpZHRofWdldCB3aWR0aEFmdGVyUmVzaXplKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUrdGhpcy5fcmVzaXplZEJ5fXN0YXJ0UmVzaXplKCl7dGhpcy5fcmVzaXplZEJ5PTAsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwLHRoaXMud2lkdGhCZWZvcmVSZXNpemU9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5u''@;'; put 'put ''YXRpdmVFbGVtZW50KS53aWR0aH1lbmRSZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1jYWxjdWxhdGVSZXNpemUoYSl7YTwtdGhpcy5tYXhSZXNpemVSYW5nZT8odGhpcy5fcmVzaXplZEJ5PS10aGlzLm1heFJlc2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0h''@;'; put 'put ''MSk6KHRoaXMuX3Jlc2l6ZWRCeT1hLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEppKSx4cih2bSkseHIoRDcpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy''@;'; put 'put ''NzVmYWN9KSxjfSkoKSxwRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hfWdldCB0YWJsZVJlZigpe3JldHVybiB0aGlzLl90YWJsZVJlZn1zZXQgdGFibGVSZWYoYSl7dGhpcy5fdGFibGVSZWY9YX1zZXQgdGFibGUoYSl7ZWwodGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''KSYmYS5uYXRpdmVFbGVtZW50JiYodGhpcy50YWJsZVJlZj1hLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIikpfWdldENvbHVtbkRyYWdIZWlnaHQoKXtyZXR1cm4gdGhpcy50YWJsZVJlZj9gJHt0aGlzLnRhYmxlUmVmLmNsaWVudEhlaWdodH1weGA6bnVs''@;'; put 'put ''bH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxEZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5jb2x1''@;'; put 'put ''bW5SZXNpemVyU2VydmljZT1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLm5nWm9uZT1oLHRoaXMudGFibGVTaXplU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5nPXYsdGhpcy5kb2N1bWVudD1NLHRoaXMuY29sdW1uU2VwYXJhdG9ySWQ9U3UoKSx0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249''@;'; put 'put ''ITEsdGhpcy51bmxpc3RlbmVycz1bXX1nZXQgZGVzY3JpcHRpb25JZCgpe3JldHVybmAke3RoaXMuY29sdW1uU2VwYXJhdG9ySWR9LWFyaWEtZGVzY3JpYmVkYnlgfWdldCByZXNpemVUcmFja2VyRWwoKXtyZXR1cm4gdGhpcy5yZXNpemVUcmFja2VyUmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGNv''@;'; put 'put ''bHVtbkhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlUmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5I''@;'; put 'put ''YW5kbGVFbCwia2V5ZG93biIsYT0+e3RoaXMuc2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKSx0aGlzLm1vdmVUcmFja2VyT25LZXlEb3duKGEpfSkpLHRoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXl1cCIsYT0+e3Ro''@;'; put 'put ''aXMuaGlkZVRyYWNrZXJPbktleVVwKGEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnVubGlzdGVuZXJzLmZvckVhY2goYT0+YSgpKX1zaG93VHJhY2tlcigpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uuc3RhcnRSZXNpemUoKTtjb25zdCBhPXRoaXMudGFibGVTaXplU2VydmljZS5nZXRD''@;'; put 'put ''b2x1bW5EcmFnSGVpZ2h0KCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiaGVpZ2h0IixhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5IiwiYmxvY2siKX1tb3ZlVHJhY2tlcihhKXt0aGlzLmNvbHVtblJl''@;'; put 'put ''c2l6ZXJTZXJ2aWNlLmNhbGN1bGF0ZVJlc2l6ZShhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGVYKCR7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnl9cHgpYCksdGhpcy5yZW5kZXJlci5zZXRTdHls''@;'; put 'put ''ZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImNvbC1yZXNpemUiKSx0aGlzLnJlZEZsYWdUcmFja2VyKCl9aGlkZVRyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmVuZFJlc2l6ZSgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImRp''@;'; put 'put ''c3BsYXkiLCJub25lIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHVtbkhhbmRsZUVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCkiKSx0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiYXV0byIpfXNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSl7IXRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRL''@;'; put 'put ''ZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuc2hvd1RyYWNrZXIoKSl9bW92ZVRyYWNrZXJPbktleURvd24oYSl7dGhpcy5pc0Fy''@;'; put 'put ''cm93TGVmdEtleUV2ZW50KGEpPyhhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnktMTIpKTp0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpJiYoYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2Vy''@;'; put 'put ''KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5KzEyKSl9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6''@;'; put 'put ''ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dp''@;'; put 'put ''dGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4''@;'; put 'put ''UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJu''@;'; put 'put ''IEkyKGEua2V5KT09PWdhLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gSTIoYS5rZXkpPT09Z2EuQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZkcpLEdlKEVvKSxHZShXYSksR2UocEcpLEdlKGlz''@;'; put 'put ''KSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShVVmUsNSkscWEoWlZlLDUpKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnJlc2l6ZVRyYWNr''@;'; put 'put ''ZXJSZWY9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjb2x1''@;'; put 'put ''bW5IYW5kbGUiLCIiXSxbInJlc2l6ZVRyYWNrZXIiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjZGtEcmFnIiwiIiwiY2RrRHJhZ0xvY2tBeGlzIiwieCIsMSwiZGF0YWdyaWQtY29sdW1uLWhhbmRsZSIsMywiY2RrRHJhZ1N0YXJ0ZWQiLCJjZGtEcmFnTW92ZWQiLCJjZGtEcmFnRW5kZWQiXSxb''@;'; put 'put ''MSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiYnV0dG9uIiwyLDApLEh0KCJjZGtEcmFnU3RhcnRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3Qo''@;'; put 'put ''ZC5zaG93VHJhY2tlcigpKX0pKCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLm1vdmVUcmFja2VyKHYuZGlzdGFuY2UueCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGQuaGlkZVRyYWNrZXIoKSxDdCh2LnNvdXJjZS5fZHJh''@;'; put 'put ''Z1JlZi5yZXNldCgpKX0pLGhlKCksZGUoMiwic3BhbiIsMyksT2UoMyksaGUoKSxHdCg0LCJkaXYiLDQsMSl9MiZhJiYoaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5nLmtleXMuY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsZC5kZXNjcmlwdGlvbklk''@;'; put 'put ''KSxmZSgyKSxocigiaWQiLGQuZGVzY3JpcHRpb25JZCksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbiwiICIpKX0sZGVwZW5kZW5jaWVzOltJWmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEk3PSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyBuT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoaCksdGhpcy5lbD1hLHRoaXMuX3NvcnQ9ZCx0aGlzLnZjcj1mLHRoaXMuZGV0YWlsU2VydmljZT12LHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9TSx0aGlzLnNvcnRPcmRlckNoYW5nZT1uZXcgS3IsdGhpcy5maWx0ZXJWYWx1ZUNo''@;'; put 'put ''YW5nZT1uZXcgS3IsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9eGguVU5TT1JURUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3Nob3dTZXBhcmF0b3I9ITAsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5G''@;'; put 'put ''b3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBpc0hpZGRlbigpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCR4KX1nZXQgc2hvd1NlcGFyYXRvcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9zaG93U2VwYXJhdG9yfXNldCBzaG93U2VwYXJhdG9yKGEpe3RoaXMuX3Nob3dTZXBhcmF0b3I9YSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBjb2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5f''@;'; put 'put ''Y29sVHlwZT1hfWdldCBmaWVsZCgpe3JldHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmllbGQ9YSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0Qnk9bmV3IG9PKGEpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0''@;'; put 'put ''IHNvcnRCeShhKXsic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyBvTyhhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyBvTyh0aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29y''@;'; put 'put ''dE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtjYXNlIHhoLkFTQzp0aGlzLnNvcnQoITEpO2JyZWFrO2Nhc2UgeGguREVTQzp0aGlzLnNvcnQoITApO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc29ydC5jbGVhcigp''@;'; put 'put ''fX1zZXQgdXBkYXRlRmlsdGVyVmFsdWUoYSl7dGhpcy5maWx0ZXI/dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNz8oKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpJiYoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuZmlsdGVyIGluc3RhbmNl''@;'; put 'put ''b2YgRTcmJigoIWF8fCEoYSBpbnN0YW5jZW9mIEFycmF5KSkmJihhPVtudWxsLG51bGxdKSwyPT09YS5sZW5ndGgmJihhWzBdIT09dGhpcy5maWx0ZXIudmFsdWVbMF18fGFbMV0hPT10aGlzLmZpbHRlci52YWx1ZVsxXSkmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5pbml0RmlsdGVy''@;'; put 'put ''VmFsdWU9YX1zZXQgcHJvamVjdGVkRmlsdGVyKGEpe2EmJih0aGlzLmRlbGV0ZUZpbHRlcigpLHRoaXMuY3VzdG9tRmlsdGVyPSEwKX1nZXQgc29ydGFibGUoKXtyZXR1cm4hIXRoaXMuX3NvcnRCeX1nZXQgYXJpYVNvcnQoKXtzd2l0Y2godGhpcy5fc29ydE9yZGVyKXtjYXNlIHhoLkFTQzpy''@;'; put 'put ''ZXR1cm4iYXNjZW5kaW5nIjtjYXNlIHhoLkRFU0M6cmV0dXJuImRlc2NlbmRpbmciO2RlZmF1bHQ6cmV0dXJuIm5vbmUifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0YW5jZW9m''@;'; put 'put ''IFQ3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEU3P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFQ3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEU3KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlzLmZpbHRl''@;'; put 'put ''clZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGhHLHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFlMKGhHLHRoaXMudmNyKX1uZ09uQ2hh''@;'; put 'put ''bmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5zZXR1cERl''@;'; put 'put ''ZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBEZWZhdWx0''@;'; put 'put ''RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlzLl9zb3J0''@;'; put 'put ''QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT94aC5ERVNDOnhoLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PXhoLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpKX1saXN0ZW5G''@;'; put 'put ''b3JEZXRhaWxQYW5lQ2hhbmdlcygpe3JldHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNob3dTZXBhcmF0b3IhPT0hYSYmKHRoaXMuc2hvd1NlcGFyYXRvcj0hYSl9KX1saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9z''@;'; put 'put ''b3J0LmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zb3J0T3JkZXIhPT14aC5VTlNPUlRFRCYmYS5jb21wYXJhdG9yIT09dGhpcy5fc29ydEJ5JiYodGhpcy5fc29ydE9yZGVyPXhoLlVOU09SVEVELHRoaXMuc29ydE9yZGVy''@;'; put 'put ''Q2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZCl7Im51bWJlciI9PT1kP3RoaXMuc2V0RmlsdGVyKG5ldyBFNyhuZXcgaU8oYSkpKToic3RyaW5nIj09PWQmJnRoaXMuc2V0RmlsdGVyKG5ldyBUNyhu''@;'; put 'put ''ZXcgYU8oYSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpKEdlKEppKSxHZShzTyksR2UoZDUpLEdlKERvKSxHZShYZiksR2UoRXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGVPLDUpLDImYSl7bGV0IGY7Q2ko''@;'; put 'put ''Zj1TaSgpKSYmKGQucHJvamVjdGVkRmlsdGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsImNvbHVtbmhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtc29ydCIsZC5hcmlhU29ydCksVHIoImRhdGFncmlkLWNvbHVtbiIs''@;'; put 'put ''ITApKX0saW5wdXRzOntmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiLCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhv''@;'; put 'put ''bGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiXSxjb2xUeXBlOltObi5Ob25lLCJjbHJEZ0NvbFR5cGUi''@;'; put 'put ''LCJjb2xUeXBlIl0sZmllbGQ6W05uLk5vbmUsImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbTm4uTm9uZSwiY2xyRGdTb3J0QnkiLCJzb3J0QnkiXSxzb3J0T3JkZXI6W05uLk5vbmUsImNsckRnU29ydE9yZGVyIiwic29ydE9yZGVyIl0sdXBkYXRlRmlsdGVyVmFsdWU6W05uLk5vbmUs''@;'; put 'put ''ImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1NvcnRPcmRlckNoYW5nZSIsZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3ZkKFtzNV0pLHdhLHdsXSxuZ0NvbnRlbnRT''@;'; put 'put ''ZWxlY3RvcnM6WVZlLGRlY2xzOjksdmFyczo1LGNvbnN0czpbWyJjb2x1bW5UaXRsZSIsIiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tZmxleCJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLCJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJQ''@;'; put 'put ''bGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmls''@;'; put 'put ''dGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRl''@;'; put 'put ''T3V0bGV0Il0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsInNvcnQtaWNvbiJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRl''@;'; put 'put ''clBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1''@;'; put 'put ''ZSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShXVmUpLGRlKDAsImRpdiIsMSksbXQoMSxLVmUsMywyLCJidXR0b24iLDIpLFlyKDIpLG10KDMscVZlLDEsMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMpKDQsWFZlLDEsNCwi''@;'; put 'put ''Y2xyLWRnLW51bWVyaWMtZmlsdGVyIiw0KSg1LEpWZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKDcsZUJlLDIsMSwic3BhbiIsNSkoOCx0QmUsMSwwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIsNiksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsZC5zb3J0YWJsZSksZmUoMiks''@;'; put 'put ''eGUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksZmUoKSx4ZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYibnVtYmVyIj09ZC5jb2xUeXBlKSxmZSgzKSx4ZSgibmdJZiIsIWQuc29ydGFibGUpLGZlKCkseGUoIm5nSWYiLGQu''@;'; put 'put ''c2hvd1NlcGFyYXRvcikpfSxkZXBlbmRlbmNpZXM6W2JhLE4xLHJzLERkZSxUZGUsZEddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLGg1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5f''@;'; put 'put ''cGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9hbGxDaGFuZ2VzPW5ldyBXbix0aGlzLnRyYWNrQnk9Zj0+Zn1nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFuZ2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVk''@;'; put 'put ''fWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJz''@;'; put 'put ''U3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYmdGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuRG93bigpe3RoaXMuX3NtYXJ0PSExLHRoaXMuZGVzdHJveSgp''@;'; put 'put ''fXNtYXJ0ZW5VcCgpe3RoaXMuX3NtYXJ0PSEwLHRoaXMuX2ZpbHRlcnNTdWI9dGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9maWx0ZXJJdGVtcygpKSx0aGlzLl9zb3J0U3ViPXRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3NvcnQuY29tcGFy''@;'; put 'put ''YXRvcj90aGlzLl9zb3J0SXRlbXMoKTp0aGlzLl9maWx0ZXJJdGVtcygpfSksdGhpcy5fcGFnZVN1Yj10aGlzLl9wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZVBhZ2UoKSl9cmVmcmVzaCgpe3RoaXMuc21hcnQmJnRoaXMuX2ZpbHRlckl0ZW1zKCl9ZW1pdENoYW5nZSgp''@;'; put 'put ''e3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuZGlzcGxheWVkKX1lbWl0QWxsQ2hhbmdlcyhhKXt0aGlzLl9hbGxDaGFuZ2VzLm5leHQoYSl9X2ZpbHRlckl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fZmlsdGVyZWQ9dGhpcy5fZmlsdGVycy5oYXNBY3RpdmVGaWx0ZXJzKCk/dGhp''@;'; put 'put ''cy5fYWxsLmZpbHRlcihhPT50aGlzLl9maWx0ZXJzLmFjY2VwdHMoYSkpOnRoaXMuX2FsbC5zbGljZSgpLHRoaXMuX3BhZ2UudG90YWxJdGVtcz10aGlzLl9maWx0ZXJlZC5sZW5ndGgsdGhpcy5fc29ydEl0ZW1zKCkpfV9zb3J0SXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9z''@;'; put 'put ''b3J0LmNvbXBhcmF0b3ImJnRoaXMuX2ZpbHRlcmVkLnNvcnQoKGEsZCk9PnRoaXMuX3NvcnQuY29tcGFyZShhLGQpKSx0aGlzLl9jaGFuZ2VQYWdlKCkpfV9jaGFuZ2VQYWdlKCl7dGhpcy51bmluaXRpYWxpemVkfHx0aGlzLl9wYWdlLmFjdGl2YXRlZCYmMD09PXRoaXMuX3BhZ2Uuc2l6ZXx8''@;'; put 'put ''KHRoaXMuX2Rpc3BsYXllZD10aGlzLl9wYWdlLnNpemU+MD90aGlzLl9maWx0ZXJlZC5zbGljZSh0aGlzLl9wYWdlLmZpcnN0SXRlbSx0aGlzLl9wYWdlLmxhc3RJdGVtKzEpOnRoaXMuX2ZpbHRlcmVkLHRoaXMuZW1pdENoYW5nZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykoeHIoZDUpLHhyKHNPKSx4cihNbSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEp5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZGlmZmVycz1kLHRo''@;'; put 'put ''aXMuaXRlbXM9aCx0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgbnMoZixhLGQpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5pdGVyYWJsZVByb3h5Lm5n''@;'; put 'put ''Rm9yT2Y9dix0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnk9YX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3Jl''@;'; put 'put ''dHVybiEwfW5nRG9DaGVjaygpe3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fcmF3SXRlbXMpLmNyZWF0ZSh0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5KSksdGhpcy5kaWZmZXImJnRoaXMuZGlmZmVyLmRpZmYodGhpcy5fcmF3SXRlbXMp''@;'; put 'put ''JiYodGhpcy5pdGVtcy5hbGw9dGhpcy5fcmF3SXRlbXMpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wpLEdlKGVtKSxHZShoNSks''@;'; put 'put ''R2UoRG8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGdJdGVtcyIsIiIsImNsckRnSXRlbXNPZiIsIiJdXSxpbnB1dHM6e3Jhd0l0ZW1zOltObi5Ob25lLCJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6W05uLk5vbmUsImNsckRnSXRlbXNU''@;'; put 'put ''cmFja0J5IiwidHJhY2tCeSJdfX0pLGN9KSgpLGdHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pdGVtcz1hfWdldCBlbXB0eURhdGFncmlkKCl7cmV0dXJuISh0aGlzLml0ZW1zLmxvYWRpbmd8fHRoaXMuaXRlbXMuZGlzcGxheWVkJiYwIT09dGhpcy5pdGVtcy5kaXNwbGF5''@;'; put 'put ''ZWQubGVuZ3RoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaDUpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MiZhJiZUcigiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJd''@;'; put 'put ''LFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50Il0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsImRpdiIsMCksbXQoMSxuQmUsMSwwLCJkaXYiLDEpLGRlKDIsInNwYW4iLDIp''@;'; put 'put ''LG10KDMsckJlLDEsMCwibmctY29udGVudCIsMyksaGUoKSgpKSwyJmEmJihUcigiZGF0YWdyaWQtZW1wdHkiLGQuZW1wdHlEYXRhZ3JpZCksZmUoKSx4ZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxmZSgyKSx4ZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbYmFd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1HPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoaUJlLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVt''@;'; put 'put ''cGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNlbGxQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLG10KDAsYUJlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykpfSxlbmNhcHN1''@;'; put 'put ''bGF0aW9uOjJ9KSxjfSkoKSxRZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmNyPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChtRyx0aGlzLnZjcikuY2VsbFZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgWUwo''@;'; put 'put ''bUcsdGhpcy52Y3IpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyho''@;'; put 'put ''LFdMLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuc2lnbnBvc3Q9Zil9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWNlbGwiLCEwKSgiZGF0YWdyaWQtc2lnbnBvc3QtdHJp''@;'; put 'put ''Z2dlciIsZC5zaWducG9zdC5sZW5ndGg+MCl9LG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxJZGU9MCxLeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVTF7''@;'; put 'put ''Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuZXhwYW5kYWJsZUlkPSIiLHRoaXMuX3JlcGxhY2U9bmV3IGVpKCExKSx0aGlzLl9hbmltYXRlPW5ldyBXbixJZGUrKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIrSWRlfWdldCBleHBhbmRlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9hbmltYXRlLm5leHQoKSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IHJlcGxhY2UoKXtyZXR1cm4gdGhpcy5fcmVwbGFjZS5hc09ic2Vy''@;'; put 'put ''dmFibGUoKX1nZXQgYW5pbWF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRlLmFzT2JzZXJ2YWJsZSgpfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXtzdXBlci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSksYSE9PXoxLkxPQURJTkcmJnRoaXMuX2FuaW1hdGUubmV4dCgpfXNldFJlcGxhY2UoYSl7dGhpcy5f''@;'; put 'put ''cmVwbGFjZS5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgUXk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ESVNQTEFZPTBdPSJESVNQ''@;'; put 'put ''TEFZIixjW2MuQ0FMQ1VMQVRFPTFdPSJDQUxDVUxBVEUiLGN9KFF5fHx7fSkscGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuU2luZ2xlPTFdPSJTaW5nbGUiLGNbYy5NdWx0aT0yXT0iTXVsdGkiLGN9KHBsfHx7fSk7bGV0IHZHPSgoKT0+e2NsYXNzIGN7bmdB''@;'; put 'put ''ZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEob0JlLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6''@;'; put 'put ''Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksbXQoMCxzQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFZaZT0wLGVfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMucHJlc2VydmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5sb2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IFdu''@;'; put 'put ''LHRoaXMuX3NlbGVjdGlvblR5cGU9cGwuTm9uZSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIitWWmUrKyx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0''@;'; put 'put ''YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuYWxsQ2hhbmdlcy5zdWJzY3JpYmUoaD0+e2NvbnN0IGY9W107c3dpdGNoKHRoaXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSBwbC5Ob25lOmJyZWFrO2Nh''@;'; put 'put ''c2UgcGwuU2luZ2xlOntsZXQgdixNPSExO3RoaXMuY3VycmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj1hLnRyYWNrQnkodGhpcy5jdXJyZW50U2luZ2xlKSksaC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEudHJhY2tC''@;'; put 'put ''eShEKTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9PT1aJiYodj1ELE09ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKFopPi0xJiZmLnB1c2goWil9KSxhLnNtYXJ0JiYhdiYmKE09ITApLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50U2luZ2xlPXYpfSwwKTticmVha31j''@;'; put 'put ''YXNlIHBsLk11bHRpOntsZXQgdj10aGlzLmN1cnJlbnQuc2xpY2UoKSxNPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1cnJlbnQubGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9y''@;'; put 'put ''RWFjaChEPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKGEudHJhY2tCeShEKSl9KSksaC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEudHJhY2tCeShEKTt0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihaKT4tMSYmZi5wdXNoKFopfSksdi5sZW5ndGg+MCYmKGguZm9yRWFjaChEPT57Y29uc3Qg''@;'; put 'put ''Wj1hLnRyYWNrQnkoRCkscmU9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5pbmRleE9mKFopO3JlPi0xJiYodltyZV09RCxNPSEwKX0pLGEuc21hcnQmJih2PXYuZmlsdGVyKEQ9PmguaW5kZXhPZihEKT4tMSksdGhpcy5jdXJyZW50Lmxlbmd0aCE9PXYubGVuZ3RoJiYoTT0hMCkpLHNldFRpbWVv''@;'; put 'put ''dXQoKCk9PntNJiYodGhpcy5jdXJyZW50PXYpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1mfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlwZShmbSgwKSkuc3Vic2NyaWJlKCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25U''@;'; put 'put ''eXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUoYSl7YSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9YSxhPT09cGwuTm9uZT9kZWxldGUgdGhpcy5jdXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBj''@;'; put 'put ''dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy51cGRhdGVDdXJyZW50KGEsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRTaW5nbGV9c2V0IGN1cnJlbnRTaW5nbGUoYSl7YSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0''@;'; put 'put ''aGlzLl9jdXJyZW50U2luZ2xlPWEsYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlz''@;'; put 'put ''Ll9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNT''@;'; put 'put ''ZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3Vy''@;'; put 'put ''cmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBwbC5Ob25lOmNhc2UgcGwuU2luZ2xlOmJyZWFrO2Nhc2UgcGwuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9''@;'; put 'put ''fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09cGwuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwx''@;'; put 'put ''KSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhp''@;'; put 'put ''cy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dn''@;'; put 'put ''bGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEm''@;'; put 'put ''JiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShh''@;'; put 'put ''KXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShhKSl9ZGVzZWxlY3RJdGVtKGEpe2lmKHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQuc2xpY2UoMCxhKS5jb25jYXQodGhpcy5jdXJyZW50''@;'; put 'put ''LnNsaWNlKGErMSkpLGE8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoYSwxKTt0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRlcihoPT5oIT09ZFswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fc2VsZWN0aW9uVHlwZSE9PXBsLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2luZ2xlKTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRo''@;'; put 'put ''aXMuY3VycmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGg1KSx4cihkNSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhp''@;'; put 'put ''cy5fdmlldz1uZXcgZWkoUXkuRElTUExBWSksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ0FMQ1VMQVRFX01PREVfT04pLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFF5LkNBTENVTEFURSkpKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQoUXkuRElTUExBWSkpKX1nZXQgdmlldygpe3JldHVybiB0aGlzLl92aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoRDcpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx5Rz0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2VsZWN0aW9uPWF9b25TZWxlY3Rpb25DZWxsQ2xpY2soYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxBQkVMIiE9PWEudGFyZ2V0LnRhZ05hbWUmJiJJTlBVVCIhPT1hLnRhcmdldC50YWdOYW1lJiZhLnRhcmdldC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCJpbnB1dCIpPy5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJkh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxTcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuc3Vic2NyaXB0aW9ucz1b''@;'; put 'put ''XSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLnN0''@;'; put 'put ''YXRlU3Vic2NyaXB0aW9uJiZ0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVzZXRTdGF0ZShhKXt0aGlzLnNldFdpZHRoKGEpLHRoaXMuc2V0SGlkZGVuKGEpfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQsWHkpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4Iil9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVy''@;'; put 'put ''ZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCR4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwkeCl9Y2xlYXJXaWR0aCgpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KSx0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRW8pLEdlKEQ3KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1j''@;'; put 'put ''ZWxsIl1dfSksY30pKCksbE89MCxFbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlzLnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0''@;'; put 'put ''YWlsU2VydmljZT12LHRoaXMuZGlzcGxheU1vZGU9TSx0aGlzLnZjcj1ELHRoaXMuY29tbW9uU3RyaW5ncz1jZSx0aGlzLml0ZW1zPWJlLHRoaXMuZG9jdW1lbnQ9RWUsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEtyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5k''@;'; put 'put ''ZXRhaWxEaXNhYmxlZD0hMSx0aGlzLmRldGFpbEhpZGRlbj0hMSx0aGlzLnNrZWxldG9uTG9hZGluZz0hMSx0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9ITEsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbCx0aGlzLml0ZW1DaGFuZ2VzPW5ldyBieCgxKSx0''@;'; put 'put ''aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9kZXRhaWxPcGVuTGFiZWw9IiIsdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD0iIix0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxsTysrLHRoaXMuaWQ9ImNsci1kZy1yb3ciK2xP''@;'; put 'put ''LHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrbE8sdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitsTyx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChxOChmLnJlcGxhY2UsZi5leHBhbmRDaGFuZ2UpLnN1YnNjcmliZSgo''@;'; put 'put ''W0JlLHFlXSk9PntCZSYmcWU/KHRoaXMucmVwbGFjZWQ9ITAsWi5hZGRDbGFzcyhyZS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSk6KHRoaXMucmVwbGFjZWQ9ITEsWi5yZW1vdmVDbGFzcyhyZS5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9''@;'; put 'put ''KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xyRGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5p''@;'; put 'put ''c0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZhbHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5z''@;'; put 'put ''ZWxlY3Rpb25UeXBlPT09cGwuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LnNlbGVjdGlvblR5cGU9PT1wbC5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBl''@;'; put 'put ''eHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVs''@;'; put 'put ''KGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlzLl9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwo''@;'; put 'put ''YSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsP3RoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dTZWxlY3Rpb25M''@;'; put 'put ''YWJlbChhKXt0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD1hfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQodkcsdGhpcy52Y3IpLnJvd1ZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgWUwodkcsdGhpcy52Y3IpLHRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LmxvY2tJdGVtKHRoaXMuaXRlbSwhMT09PXRoaXMuY2xyRGdTZWxlY3RhYmxlKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRnQ2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRnQ2VsbHMuZm9yRWFjaChhPT57YS5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVD''@;'; put 'put ''ZWxscy5pbnNlcnQoYS5fdmlldyl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9zY3JvbGxhYmxlQ2VsbHMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fc2Nyb2xsYWJs''@;'; put 'put ''ZUNlbGxzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGVkQ2VsbHMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRlZENlbGxzLmRldGFjaCgpO2E9PT1ReS5DQUxDVUxBVEU/KHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3''@;'; put 'put ''LmRlc3Ryb3llZHx8dGhpcy5fY2FsY3VsYXRlZENlbGxzLmluc2VydChkLl92aWV3KX0pKToodGhpcy5kaXNwbGF5Q2VsbHM9ITAsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpfSksdGhp''@;'; put 'put ''cy5leHBhbmQuYW5pbWF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXI9IXRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dG9nZ2xlKGE9IXRo''@;'; put 'put ''aXMuc2VsZWN0ZWQpe2EhPT10aGlzLnNlbGVjdGVkJiYodGhpcy5zZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSkpfXRvZ2dsZUV4cGFuZCgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZEFuaW1hdGlvbi51cGRhdGVTdGFydEhlaWdodCgpLHRoaXMu''@;'; put 'put ''ZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpKX1jbGVhclJhbmdlcyhhKXthLnNoaWZ0S2V5JiYodGhpcy5kb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSwtMSE9PXdpbmRvdy5uYXZpZ2F0b3IudXNl''@;'; put 'put ''ckFnZW50LmluZGV4T2YoIkZpcmVmb3giKSYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZSghMCkpKX1zZWxlY3RSb3coYT0hdGhpcy5zZWxlY3RlZCxkKXsiTEFCRUwiIT09ZC50YXJnZXQudGFnTmFtZSYmKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT10aGlzLlNFTEVD''@;'; put 'put ''VElPTl9UWVBFLlNpbmdsZT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPXRoaXMuaXRlbTp0aGlzLnRvZ2dsZShhKSl9cmFuZ2VTZWxlY3QoKXtjb25zdCBhPXRoaXMuaXRlbXMuZGlzcGxheWVkO2lmKCFhKXJldHVybjtjb25zdCBkPWEuaW5kZXhPZih0aGlzLnNlbGVjdGlvbi5yYW5n''@;'; put 'put ''ZVN0YXJ0KTtpZih0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0JiZ0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmluY2x1ZGVzKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpJiZ0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQmJi0xIT09ZCl7Y29uc3QgaD1hLmluZGV4T2YodGhpcy5pdGVtKSxm''@;'; put 'put ''PW5ldyBTZXQodGhpcy5zZWxlY3Rpb24uY3VycmVudC5jb25jYXQoYS5zbGljZShNYXRoLm1pbihkLGgpLE1hdGgubWF4KGQsaCkrMSkpKTt0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQucHVzaCguLi5mKX1lbHNlIHRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LnJhbmdlU3RhcnQ9dGhpcy5pdGVtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXyksR2UoS3kpLEdlKHF5KSxHZShLeCksR2UoWGYpLEdlKGJHKSxHZShEbyksR2UoRW8pLEdlKEppKSxHZShpcyksR2UoaDUpLEdlKHZzKSl9LGMuXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxRZiw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmRnQ2VsbHM9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihx''@;'; put 'put ''YShWTCw1KSxxYShsQmUsNSkscWEoY0JlLDUsRG8pLHFhKHVCZSw1LERvKSxxYShkQmUsNSxEbykpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuZXhwYW5kQW5pbWF0aW9uPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmRldGFpbEJ1dHRvbj1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fc3Rp''@;'; put 'put ''Y2t5Q2VsbHM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3Njcm9sbGFibGVDZWxscz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fY2FsY3VsYXRlZENlbGxzPWguZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInJvd2dyb3VwIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsyJmEmJihocigiYXJpYS1vd25zIixkLmlkKSxUcigiZGF0YWdyaWQtcm93IiwhMCkoImRhdGFncmlkLXJvdy1za2VsZXRvbiIsZC5za2VsZXRvbkxvYWRpbmcpKCJkYXRhZ3JpZC1zZWxlY3RlZCIsZC5zZWxlY3RlZCkpfSxpbnB1dHM6e2RldGFpbERpc2FibGVkOltObi5Ob25lLCJj''@;'; put 'put ''bHJEZ0RldGFpbERpc2FibGVkIiwiZGV0YWlsRGlzYWJsZWQiXSxkZXRhaWxIaWRkZW46W05uLk5vbmUsImNsckRnRGV0YWlsSGlkZGVuIiwiZGV0YWlsSGlkZGVuIl0sc2tlbGV0b25Mb2FkaW5nOltObi5Ob25lLCJjbHJEZ1NrZWxldG9uTG9hZGluZyIsInNrZWxldG9uTG9hZGluZyJdLGl0''@;'; put 'put ''ZW06W05uLk5vbmUsImNsckRnSXRlbSIsIml0ZW0iXSxjbHJEZ1NlbGVjdGFibGU6ImNsckRnU2VsZWN0YWJsZSIsc2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOltObi5Ob25lLCJjbHJEZ0V4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJEZ0Rl''@;'; put 'put ''dGFpbE9wZW5MYWJlbDoiY2xyRGdEZXRhaWxPcGVuTGFiZWwiLGNsckRnRGV0YWlsQ2xvc2VMYWJlbDoiY2xyRGdEZXRhaWxDbG9zZUxhYmVsIixjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsOiJjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1Nl''@;'; put 'put ''bGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbS3gse3Byb3ZpZGU6VTEsdXNlRXhpc3Rpbmc6S3h9LHtwcm92aWRlOmt4LHVzZUV4aXN0aW5nOkt4fV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZkJlLGRlY2xzOjksdmFyczoz''@;'; put 'put ''LGNvbnN0czpbWyJkZXRhaWwiLCIiXSxbInJvd0NvbnRlbnQiLCIiXSxbImNhbGN1bGF0ZWRDZWxscyIsIiJdLFsic3RpY2t5Q2VsbHMiLCIiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsiZGV0YWlsQnV0dG9uIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1v''@;'; put 'put ''dXNlZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQi''@;'; put 'put ''XSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCIsMywiaWQiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwi''@;'; put 'put ''Z3JpZGNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBk''@;'; put 'put ''YXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''ZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJjbGFzcyIsInNrZWxldG9uLWxvYWRpbmciLDQsIm5nSWYiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29s''@;'; put 'put ''dW1uIiwiZGF0YWdyaWQtY2VsbCIsMywibmdDbGFzcyJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwi''@;'; put 'put ''Y2xyLWNvbC1udWxsIiwzLCJjbGljayIsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuYW1lIiwidmFsdWUiLCJuZ01vZGVsIiwiY2hlY2tlZCIsImRpc2FibGVkIl0s''@;'; put 'put ''WzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLWV4''@;'; put 'put ''cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJTbWFsbCIs''@;'; put 'put ''IiIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsi''@;'; put 'put ''cm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsImFyaWEtaGFz''@;'; put 'put ''cG9wdXAiLCJkaWFsb2ciLDMsImRpc2FibGVkIiwiaXMtb3BlbiIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiLCJkaWFsb2ciLDEsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJs''@;'; put 'put ''ZWQiXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbiJdLFsxLCJza2VsZXRvbi1sb2FkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoaEJlKSxtdCgwLHlCZSwzLDIsImRpdiIsNikoMSx3QmUsMiwyLCJjbHItZXhwYW5k''@;'; put 'put ''YWJsZS1hbmltYXRpb24iLDcpKDIsU0JlLDEsMSxudWxsLDgpKDMsTUJlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykoNSxWQmUsMTcsMTQsIm5nLXRlbXBsYXRlIixudWxsLDEsSWMpLEZsKDcsbnVsbCwyKSksMiZhJiYoeGUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1v''@;'; put 'put ''ZGUpLGZlKCkseGUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiZkLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLHhlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmIWQuZXhwYW5kLmV4cGFuZGFibGUpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxOMSxy''@;'; put 'put ''cyxkcyxjRyxsRyxxbCxNZCxiTCxubCxHcyxWTCxSZCxRZix5RyxTcF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIFcxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuV0lEVEg9MF09IldJRFRIIixjW2MuSElEREVOPTFdPSJISURERU4iLGNbYy5JTklUSUFMSVpFPTJdPSJJTklUSUFMSVpF''@;'; put 'put ''IixjfShXMXx8e30pO2NvbnN0IEJaZT1PYmplY3Qua2V5cyhXMSkubWFwKGM9PlcxW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50KGMsMTApJiZjIT09VzEuSU5JVElBTElaRSk7bGV0IGY1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbHVtbnM9W10sdGhpcy5jb2x1bW5z''@;'; put 'put ''U3RhdGVDaGFuZ2U9bmV3IGVpKG51bGwpLHRoaXMuX2NhY2hlPVtdfWdldCBjb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChhPT5hLnZhbHVlKX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT5hLmhpZGVhYmxl''@;'; put 'put ''KS5sZW5ndGg+MH1nZXQgdmlzaWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5TdGF0ZXMuZmlsdGVyKGE9PiFhLmhpZGRlbil9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxk''@;'; put 'put ''fSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hlLmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ey4uLmEsY2hhbmdlczpCWmV9O3RoaXMuY29sdW1uc1tkXS5uZXh0KGgpLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlLm5l''@;'; put 'put ''eHQoaCl9KSx0aGlzLl9jYWNoZT1bXX1lbWl0U3RhdGVDaGFuZ2VBdChhLGQpe3RoaXMuY29sdW1uc1thXSYmdGhpcy5lbWl0U3RhdGVDaGFuZ2UodGhpcy5jb2x1bW5zW2FdLGQpfWVtaXRTdGF0ZUNoYW5nZShhLGQpe2NvbnN0IGg9ey4uLmEudmFsdWUsLi4uZH07YS5uZXh0KGgpLHRoaXMu''@;'; put 'put ''Y29sdW1uc1N0YXRlQ2hhbmdlLm5leHQoaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGpaZT17aXRlbVNpemU6MzIsbWluQnVmZmVyUHg6''@;'; put 'put ''MjAwLG1heEJ1ZmZlclB4OjQwMH07bGV0IFJkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSl7dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1hLHRoaXMuaXRlcmFibGVEaWZmZXJzPWQsdGhpcy5pdGVtcz1oLHRoaXMubmdab25lPWYsdGhp''@;'; put 'put ''cy5yZW5kZXJlcjI9dix0aGlzLnRlbXBsYXRlUmVmPU0sdGhpcy52aWV3Q29udGFpbmVyUmVmPUQsdGhpcy5kaXJlY3Rpb25hbGl0eT1aLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1yZSx0aGlzLnZpZXdwb3J0UnVsZXI9Y2UsdGhpcy5kYXRhZ3JpZD1iZSx0aGlzLmNvbHVtbnNTZXJ2aWNlPUVl''@;'; put 'put ''LHRoaXMuaW5qZWN0b3I9QmUsdGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlPW5ldyBLcix0aGlzLnBlcnNpc3RJdGVtcz0hMCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzPXsuLi5qWmV9LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnRvcEluZGV4PTAsdGhpcy5tdXRh''@;'; put 'put ''dGlvbkNoYW5nZXM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocWU9PntxZS5mb3JFYWNoKHJ0PT57cnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtY29tcGFjdCIpJiZ0aGlzLml0ZW1TaXplPjI0JiYodGhpcy5pdGVtU2l6ZT0yNCl9KX0pLHRoaXMudmlld1JlcGVhdGVyPW5l''@;'; put 'put ''dyBaMGUsdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzPXtjZGtWaXJ0dWFsRm9yVHJhY2tCeTpxZT0+cWV9LGguc21hcnRlblVwKCksYmUuZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9jdXNTY3JvbGw9ITAsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWY9YmUuZWwsdGhpcy5jZGtWaXJ0dWFsRm9yVGVt''@;'; put 'put ''cGxhdGVDYWNoZVNpemU9MjAsdGhpcy5tdXRhdGlvbkNoYW5nZXMub2JzZXJ2ZSh0aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHthdHRyaWJ1dGVGaWx0ZXI6WyJjbGFzcyJdLGF0dHJpYnV0ZU9sZFZhbHVlOiEwfSksdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3k9bmV3''@;'; put 'put ''IEVGZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9Z2V0IGNka1ZpcnR1''@;'; put 'put ''YWxGb3JPZigpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZj1hLHRoaXMuaXRlbXMuYWxsPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9y''@;'; put 'put ''SW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5PWEs''@;'; put 'put ''dGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZSgpe3JldHVybiB0aGlzPy5jZGtWaXJ0dWFsRm9ySW5wdXRzPy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJ''@;'; put 'put ''bnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplfXNl''@;'; put 'put ''dCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT11NyhhKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5fY2RrRml4''@;'; put 'put ''ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZX1zZXQgaXRlbVNpemUoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZT11NyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWluQnVmZmVyUHgoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeD11NyhhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJ''@;'; put 'put ''bnB1dHMoKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeD11NyhhKSx0aGlzLnVw''@;'; put 'put ''ZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1zZXQgZGF0YVJhbmdlKGEpe2EmJih0aGlzLml0ZW1zLnNtYXJ0JiZ0aGlzLml0ZW1zLnNtYXJ0ZW5Eb3duKCksdGhpcy50b3RhbEl0ZW1zPWEudG90YWwsdGhpcy51cGRhdGVEYXRhUmFuZ2UoYS5za2lwLGEuZGF0YSkpfWdldCB0''@;'; put 'put ''b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5qZWN0b3IucnVuSW5Db250ZXh0KCgpPT57dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ9dGhpcy5jcmVhdGVWaXJ0''@;'; put 'put ''dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZCh0aGlzLmNoYW5nZURldGVjdG9yUmVmLHRoaXMubmdab25lLHRoaXMucmVuZGVyZXIyLHRoaXMuZGlyZWN0aW9uYWxpdHksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLHRoaXMudmlld3BvcnRSdWxlcix0aGlzLmRhdGFncmlkRWxlbWVudFJlZix0''@;'; put 'put ''aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSksdGhpcy5jZGtWaXJ0dWFsRm9yPWZ1bmN0aW9uIFVaZShjLGwsYSxkLGgsZil7aWYoK05pZS5tYWpvcjwxOSlyZXR1cm4gbmV3IGtMKGMsbCxhLGQsaCxmKTt7Y29uc3Qgdj1Ecy5jcmVhdGUoe3BhcmVudDpmaShoYykscHJvdmlkZXJzOlt7cHJv''@;'; put 'put ''dmlkZTpEeSx1c2VWYWx1ZTpofV19KTtyZXR1cm4gRHMuY3JlYXRlKHtwYXJlbnQ6dixwcm92aWRlcnM6W3twcm92aWRlOkRvLHVzZVZhbHVlOmN9LHtwcm92aWRlOlNsLHVzZVZhbHVlOmx9LHtwcm92aWRlOmVtLHVzZVZhbHVlOmF9LHtwcm92aWRlOl9ZLHVzZVZhbHVlOmR9LHtwcm92aWRl''@;'; put 'put ''OldhLHVzZVZhbHVlOmZ9LHtwcm92aWRlOmtMLHVzZUNsYXNzOmtMfV19KS5nZXQoa0wpfX0odGhpcy52aWV3Q29udGFpbmVyUmVmLHRoaXMudGVtcGxhdGVSZWYsdGhpcy5pdGVyYWJsZURpZmZlcnMsdGhpcy52aWV3UmVwZWF0ZXIsdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQsdGhpcy5u''@;'; put 'put ''Z1pvbmUpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Lm5nT25Jbml0KCl9KSx0aGlzLmdyaWRSb2xlRWxlbWVudD10aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJncmlkIl0nKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1''@;'; put 'put ''dHMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLml0ZW1zLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuaXRlbXMuc21hcnQmJih0aGlzLmNka1ZpcnR1YWxGb3IuY2RrVmlydHVhbEZvck9mPWEpfSksdGhpcy5jZGtWaXJ0dWFsRm9yLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0''@;'; put 'put ''aGlzLnVwZGF0ZUFyaWFSb3dDb3VudChhLmxlbmd0aCl9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy50b3BJbmRleD1hfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5zdWJz''@;'; put 'put ''Y3JpYmUoYT0+e3RoaXMucmVuZGVyZWRSYW5nZUNoYW5nZS5lbWl0KGEpfSksdGhpcy5kYXRhZ3JpZC5yZWZyZXNoLnN1YnNjcmliZShhPT57YS5maWx0ZXJzJiZ0aGlzLnNjcm9sbFRvSW5kZXgoMCl9KSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUo''@;'; put 'put ''KCk9Pnt0aGlzLnZpZXdSZXBlYXRlci5kZXRhY2goKX0pKX1uZ0RvQ2hlY2soKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nRG9DaGVjaygpLHRoaXMudXBkYXRlQXJpYVJvd0luZGV4ZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdPbkRlc3Ryb3koKSx0aGlzLnZpcnR1''@;'; put 'put ''YWxTY3JvbGxWaWV3cG9ydD8ubmdPbkRlc3Ryb3koKSx0aGlzLm11dGF0aW9uQ2hhbmdlcz8uZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2NyaWJlKCl9KX1zY3JvbGxVcChhLGQ9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJ''@;'; put 'put ''bmRleC1hLGQpfXNjcm9sbERvd24oYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgrYSxkKX1zY3JvbGxUb0luZGV4KGEsZD0iYXV0byIpe3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KGEsZCl9dXBkYXRlRGF0YVJhbmdlKGEsZCl7''@;'; put 'put ''bGV0IGg9dGhpcy5jZGtWaXJ0dWFsRm9yT2Y7KCF0aGlzLnBlcnNpc3RJdGVtc3x8IWh8fGg/Lmxlbmd0aCE9PXRoaXMudG90YWxJdGVtcykmJihoPUFycmF5KHRoaXMudG90YWxJdGVtcykpLGguc3BsaWNlKGEsZC5sZW5ndGgsLi4uZCksdGhpcy5jZGtWaXJ0dWFsRm9yT2Y9QXJyYXkuZnJv''@;'; put 'put ''bShoKX11cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl7aWYodGhpcy5jZGtWaXJ0dWFsRm9yKWZvcihjb25zdCBhIG9mIE9iamVjdC5rZXlzKHRoaXMuY2RrVmlydHVhbEZvcklucHV0cykpdGhpcy5jZGtWaXJ0dWFsRm9yW2FdIT09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdJiYodGhp''@;'; put 'put ''cy5jZGtWaXJ0dWFsRm9yW2FdPXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSl9dXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpe3RoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5JiZ0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0''@;'; put 'put ''aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9dXBkYXRlQXJpYVJvd0NvdW50''@;'; put 'put ''KGEpe3RoaXMuZ3JpZFJvbGVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiLGEudG9TdHJpbmcoKSl9dXBkYXRlQXJpYVJvd0luZGV4ZXMoKXtmb3IobGV0IGE9MDthPHRoaXMudmlld0NvbnRhaW5lclJlZi5sZW5ndGg7YSsrKXtjb25zdCBkPXRoaXMudmlld0NvbnRhaW5l''@;'; put 'put ''clJlZi5nZXQoYSk7ZC5yb290Tm9kZXMuZmluZChNPT4iQ0xSLURHLVJPVyI9PT1NLnRhZ05hbWUpPy5xdWVyeVNlbGVjdG9yKCdbcm9sZT0icm93Il0nKT8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IiwoZC5jb250ZXh0LmluZGV4KzEpLnRvU3RyaW5nKCkpfX1jcmVhdGVWaXJ0dWFs''@;'; put 'put ''U2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZChhLGQsaCxmLHYsTSxELFope2NvbnN0IHJlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKSxjZT1ELm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIiksYmU9RC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3dzIik7bGV0IEJlPTAscWU9MDtmdW5jdGlvbiBydCgpe2JlLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke0JlfXB4KWAsYmUuc3R5bGUuaGVpZ2h0PXFlLUJlKyJweCJ9Y29uc3QgcHQ9ZnVuY3Rpb24gelplKGMsbCxhLGQsaCxmLHYs''@;'; put 'put ''TSxEKXtyZXR1cm4rTmllLm1ham9yPDE5P25ldyBEeShjLGwsYSxoLGYsdixNLEQpOkRzLmNyZWF0ZSh7cGFyZW50OmZpKGhjKSxwcm92aWRlcnM6W3twcm92aWRlOkppLHVzZVZhbHVlOmN9LHtwcm92aWRlOkVzLHVzZVZhbHVlOmx9LHtwcm92aWRlOldhLHVzZVZhbHVlOmF9LHtwcm92aWRl''@;'; put 'put ''OkVvLHVzZVZhbHVlOmR9LHtwcm92aWRlOlcwZSx1c2VWYWx1ZTpofSx7cHJvdmlkZTpwbSx1c2VWYWx1ZTpmfSx7cHJvdmlkZTpreSx1c2VWYWx1ZTp2fSx7cHJvdmlkZTpBTCx1c2VWYWx1ZTpNfSx7cHJvdmlkZTokMGUsdXNlVmFsdWU6RH0se3Byb3ZpZGU6RHksdXNlQ2xhc3M6RHl9XX0p''@;'; put 'put ''LmdldChEeSl9KHtuYXRpdmVFbGVtZW50OnJlfSxhLGQsaCxaLGYsdixNLG51bGwpO3JldHVybiBwdC5fY29udGVudFdyYXBwZXI9e25hdGl2ZUVsZW1lbnQ6e3N0eWxlOntzZXQgdHJhbnNmb3JtKGR0KXtCZT12b2lkIDA9PT1kdD8wOisvdHJhbnNsYXRlWVwoKFswLTldKylweFwpLy5leGVj''@;'; put 'put ''KGR0KT8uWzFdLHJ0KCl9fX19LHB0LnNldFRvdGFsQ29udGVudFNpemU9ZHQ9PntxZT1kdCxjZS5zdHlsZS5oZWlnaHQ9YCR7cWV9cHhgLHJ0KCl9LHB0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoZW0pLEdlKGg1KSxHZShXYSks''@;'; put 'put ''R2UoRW8pLEdlKFNsKSxHZShEbyksR2UocG0pLEdlKGt5KSxHZShBTCksR2UoQ3MoKCk9PkFtKSksR2UoZjUpLEdlKGhjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclZpcnR1YWxTY3JvbGwiLCIiXSxbIiIsIkNsclZpcnR1YWxTY3JvbGwiLCIiXV0saW5w''@;'; put 'put ''dXRzOntwZXJzaXN0SXRlbXM6W05uLk5vbmUsImNsclZpcnR1YWxQZXJzaXN0SXRlbXMiLCJwZXJzaXN0SXRlbXMiXSxjZGtWaXJ0dWFsRm9yT2Y6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzT2YiLCJjZGtWaXJ0dWFsRm9yT2YiXSxjZGtWaXJ0dWFsRm9yVHJhY2tCeTpbTm4uTm9uZSwiY2xy''@;'; put 'put ''VmlydHVhbFJvd3NUcmFja0J5IiwiY2RrVmlydHVhbEZvclRyYWNrQnkiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzVGVtcGxhdGUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiXSxjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6W05uLk5vbmUs''@;'; put 'put ''ImNsclZpcnR1YWxSb3dzVGVtcGxhdGVDYWNoZVNpemUiLCJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUiXSxpdGVtU2l6ZTpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NJdGVtU2l6ZSIsIml0ZW1TaXplIl0sbWluQnVmZmVyUHg6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzTWluQnVm''@;'; put 'put ''ZmVyUHgiLCJtaW5CdWZmZXJQeCJdLG1heEJ1ZmZlclB4OltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c01heEJ1ZmZlclB4IiwibWF4QnVmZmVyUHgiXSxkYXRhUmFuZ2U6W05uLk5vbmUsImNsclZpcnR1YWxEYXRhUmFuZ2UiLCJkYXRhUmFuZ2UiXX0sb3V0cHV0czp7cmVuZGVyZWRSYW5nZUNo''@;'; put 'put ''YW5nZToicmVuZGVyZWRSYW5nZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbaDVdKV19KSxjfSkoKSxMZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRo''@;'; put 'put ''aXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKExyKCgpPT50aGlzLnN0YXRlKSl9Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3Vy''@;'; put 'put ''cmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9yJiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2Ygb08/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21w''@;'; put 'put ''YXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRoaXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihkNSkseHIoc08pLHhyKE1tKSx4cihZeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFRtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhp''@;'; put 'put ''cy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENlbGxzU3RhdGUoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRDZWxsc1N0YXRlKCl9KSl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldENlbGxzU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMu''@;'; put 'put ''Y29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmYS5yZXNldFN0YXRlKHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXS52YWx1ZSl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZjUpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siY2xyLWRnLXJvdyJdLFsiY2xyLWRnLXJvdy1kZXRhaWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsYyw1KSxhbyhoLFNwLDQpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmV4cGFuZGFibGVSb3c9Zi5maXJzdCksQ2koZj1TaSgp''@;'; put 'put ''KSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpLEFtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlLEVlLEJlLHFlLHJ0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFibGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlz''@;'; put 'put ''LnJvd0FjdGlvblNlcnZpY2U9dix0aGlzLnN0YXRlUHJvdmlkZXI9TSx0aGlzLmRpc3BsYXlNb2RlPUQsdGhpcy5yZW5kZXJlcj1aLHRoaXMuZGV0YWlsU2VydmljZT1yZSx0aGlzLmRvY3VtZW50PWNlLHRoaXMuZWw9YmUsdGhpcy5wYWdlPUVlLHRoaXMuY29tbW9uU3RyaW5ncz1CZSx0aGlz''@;'; put 'put ''LmtleU5hdmlnYXRpb249cWUsdGhpcy56b25lPXJ0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENo''@;'; put 'put ''YW5nZWQ9bmV3IEtyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMucmVmcmVzaD1uZXcgS3IoITEpLHRoaXMuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZD0hMSx0aGlzLmN1c3RvbVNlbGVjdEFsbD1uZXcgS3IsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbCx0aGlz''@;'; put 'put ''Ll9zdWJzY3JpcHRpb25zPVtdO2NvbnN0IHB0PVN1KCk7dGhpcy5zZWxlY3RBbGxJZD0iY2xyLWRnLXNlbGVjdC1hbGwtIitwdCxyZS5pZD1wdH1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLml0ZW1zLmxvYWRpbmd9c2V0IGxvYWRpbmcoYSl7dGhpcy5pdGVtcy5sb2FkaW5nPWF9c2V0IHNl''@;'; put 'put ''bGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9YT9wbC5NdWx0aTpwbC5Ob25lLHRoaXMuc2VsZWN0aW9uLnVwZGF0ZUN1cnJlbnQoYSwhMSl9c2V0IHNpbmdsZVNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9cGwuU2luZ2xlLGE/dGhpcy5zZWxl''@;'; put 'put ''Y3Rpb24uY3VycmVudFNpbmdsZT1hOnRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUmJih0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPW51bGwpfXNldCBjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0aW9uPWF9c2V0IHJvd1NlbGVj''@;'; put 'put ''dGlvbk1vZGUoYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZT1hfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMudHJhY2tCeT1hfWdldCBhbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkKCl9c2V0IGFsbFNlbGVjdGVkKGEpe3RoaXMuY3Vz''@;'; put 'put ''dG9tU2VsZWN0QWxsRW5hYmxlZD90aGlzLmN1c3RvbVNlbGVjdEFsbC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnRvZ2dsZUFsbCgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD10aGlzLnJvd3MubWFwKGQ9PmQuaXRlbSkpO2NvbnN0IGE9''@;'; put 'put ''dGhpcy5yb3dzLmNoYW5nZXMucGlwZShWMShkPT55eChmbyhkLm1hcChoPT5oLml0ZW0pKSxxOChkLm1hcChoPT5oLml0ZW1DaGFuZ2VzKSkucGlwZShmbSgwKSkpKSk7dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVt''@;'; put 'put ''cy5hbGw9ZCl9KSx0aGlzLnJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pntmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGgtMTtkPj0wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmdldChkKS5kZXN0cm95ZWQmJnRoaXMuX2Rpc3BsYXllZFJvd3MucmVtb3ZlKGQpO2lmKHRo''@;'; put 'put ''aXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pLHRoaXMudXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnZpcnR1YWxTY3JvbGwpe2NvbnN0IGQ9dGhpcy5rZXlOYXZpZ2F0aW9uLmdldEFjdGl2ZUNlbGwoKTtkJiZ0aGlzLnpvbmUucnVuT3V0''@;'; put 'put ''c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT50aGlzLmtleU5hdmlnYXRpb24uc2V0QWN0aXZlQ2VsbChkKSl9KX19KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5rZXlOYXZpZ2F0aW9uLmluaXRpYWxpemVLZXlHcmlkKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy51cGRhdGVE''@;'; put 'put ''ZXRhaWxTdGF0ZSgpLHRoaXMucmVmcmVzaC5lbWl0KHRoaXMuc3RhdGVQcm92aWRlci5zdGF0ZSksdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc3RhdGVQcm92aWRlci5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMucmVmcmVzaC5lbWl0KGEpKSx0aGlzLnNlbGVjdGlvbi5jaGFuZ2Uu''@;'; put 'put ''c3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuU2luZ2xlP3RoaXMuc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSk6dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk11bHRpJiZ0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpfSksdGhp''@;'; put 'put ''cy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCksdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXN8fHRoaXMuZGF0YWdyaWRUYWJsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KSx0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJl''@;'; put 'put ''KGE9Pntmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9w''@;'; put 'put ''cm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0aW9uUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGlvblJvd3MuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoO2Q+MDtkLS0pdGhpcy5f''@;'; put 'put ''ZGlzcGxheWVkUm93cy5kZXRhY2goKTthPT09UXkuRElTUExBWT8odGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1''@;'; put 'put ''bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0pKToodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1''@;'; put 'put ''bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmluc2VydChkLl92aWV3KX0pKX0pKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9''@;'; put 'put ''Pnt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goeGQodGhpcy5kb2N1bWVudC5ib2R5LCJrZXlkb3duIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITApfSkseGQodGhpcy5kb2N1bWVudC5ib2R5LCJrZXl1cCIpLnN1YnNjcmli''@;'; put 'put ''ZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSExKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dG9nZ2xlQWxsU2VsZWN0ZWQoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRo''@;'; put 'put ''aXMuc2VsZWN0QWxsQ2hlY2tib3g/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX11cGRhdGVEZXRhaWxTdGF0ZSgpe2lmKHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSYmdGhpcy5kZXRhaWxTZXJ2aWNlLmlzT3Blbil7Y29uc3QgYT10aGlz''@;'; put 'put ''LnJvd3MuZmluZChkPT50aGlzLml0ZW1zLnRyYWNrQnkoZC5pdGVtKT09PXRoaXMuaXRlbXMudHJhY2tCeSh0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUpKTthP3RoaXMuZGV0YWlsU2VydmljZS5vcGVuKGEuaXRlbSxhLmRldGFpbEJ1dHRvbi5uYXRpdmVFbGVtZW50KTp0aGlzLnZpcnR1YWxT''@;'; put 'put ''Y3JvbGx8fHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRldGFpbFNlcnZpY2UuY2xvc2UoKX0pfX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShENyksR2UoaDUpLEdlKHF5KSxHZShlXyks''@;'; put 'put ''R2UoS3kpLEdlKExkZSksR2UoYkcpLEdlKEVvKSxHZShYZiksR2UodnMpLEdlKEppKSxHZShNbSksR2UoaXMpLEdlKHJPKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lm''@;'; put 'put ''KDEmYSYmKGFvKGgsUmRlLDUpLGFvKGgsSnksNSksYW8oaCxnRyw1KSxhbyhoLEk3LDQpLGFvKGgsRW0sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQudmlydHVhbFNjcm9sbD1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5pdGVyYXRvcj1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5wbGFj''@;'; put 'put ''ZWhvbGRlcj1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jb2x1bW5zPWYpLENpKGY9U2koKSkmJihkLnJvd3M9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYShCQmUsNSxKaSkscWEoakJlLDUsSmkpLHFhKHpCZSw1LERvKSxxYShVQmUsNSxEbykscWEoWkJlLDUsRG8p''@;'; put 'put ''LHFhKFdCZSw1LERvKSxxYShZQmUsNSxEbykscWEoR0JlLDUpKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmRhdGFncmlkPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmRhdGFncmlkVGFibGU9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuc2Nyb2xsYWJsZUNvbHVtbnM9aC5maXJzdCksQ2ko''@;'; put 'put ''aD1TaSgpKSYmKGQuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX2Rpc3BsYXllZFJvd3M9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX2NhbGN1bGF0aW9u''@;'; put 'put ''Um93cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5zZWxlY3RBbGxDaGVja2JveD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtaG9zdCIsITApKCJkYXRhZ3JpZC1kZXRhaWwtb3BlbiIsZC5kZXRhaWxTZXJ2aWNlLmlz''@;'; put 'put ''T3Blbil9LGlucHV0czp7bG9hZGluZ01vcmVJdGVtczpbTm4uTm9uZSwiY2xyTG9hZGluZ01vcmVJdGVtcyIsImxvYWRpbmdNb3JlSXRlbXMiXSxjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xlQWN0aW9uYWJs''@;'; put 'put ''ZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsY3VzdG9tU2VsZWN0QWxs''@;'; put 'put ''RW5hYmxlZDpbTm4uTm9uZSwiY2xyRGdDdXN0b21TZWxlY3RBbGxFbmFibGVkIiwiY3VzdG9tU2VsZWN0QWxsRW5hYmxlZCJdLGxvYWRpbmc6W05uLk5vbmUsImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbTm4uTm9uZSwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sc2lu''@;'; put 'put ''Z2xlU2VsZWN0ZWQ6W05uLk5vbmUsImNsckRnU2luZ2xlU2VsZWN0ZWQiLCJzaW5nbGVTZWxlY3RlZCJdLGNsckRnUHJlc2VydmVTZWxlY3Rpb246ImNsckRnUHJlc2VydmVTZWxlY3Rpb24iLHJvd1NlbGVjdGlvbk1vZGU6W05uLk5vbmUsImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0''@;'; put 'put ''aW9uTW9kZSJdLHRyYWNrQnk6W05uLk5vbmUsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLHNpbmdsZVNlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTaW5nbGVTZWxlY3RlZENoYW5nZSIscmVmcmVzaDoi''@;'; put 'put ''Y2xyRGdSZWZyZXNoIixjdXN0b21TZWxlY3RBbGw6ImNsckRnQ3VzdG9tU2VsZWN0QWxsIn0sZmVhdHVyZXM6W2RhKFtlXyxzTyxkNSxNbSxoNSxENyxLeSxxeSxZeCxYZixMZGUscEcsZjUsYkcsck9dKV0sbmdDb250ZW50U2VsZWN0b3JzOktCZSxkZWNsczozNSx2YXJzOjksY29uc3RzOltb''@;'; put 'put ''ImRhdGFncmlkIiwiIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyIsIiJdLFsiZGlzcGxheWVkUm93cyIsIiJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwiIl0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInNlbGVjdEFsbENoZWNrYm94''@;'; put 'put ''IiwiIl0sWzEsImRhdGFncmlkLW91dGVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQtaW5uZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZCJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlkLXRhYmxlIl0sWyJyb2xl''@;'; put 'put ''Iiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ctc3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xh''@;'; put 'put ''c3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhl''@;'; put 'put ''ZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNv''@;'; put 'put ''bHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwiZGF0YWdyaWQtcm93cyJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctbG9hZGlu''@;'; put 'put ''ZyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXNwaW5uZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUiXSxbMSwiZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ciJdLFsidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJk''@;'; put 'put ''YXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1u''@;'; put 'put ''aGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWzEsImRhdGFncmlkLXJvdy1sb2FkaW5nIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKHNhKCRCZSksWXIoMCksZGUoMSwiZGl2Iiw3KSgyLCJkaXYiLDgpKDMsImRpdiIsOSwwKSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExLDEpKDgsImRpdiIsMTIpKDksImRpdiIsMTMpKDEwLCJkaXYiLDE0KSgxMSwiZGl2IiwxNSksbXQoMTIsWEJlLDMsMSwiZGl2IiwxNiko''@;'; put 'put ''MTMsSkJlLDQsMSwiZGl2IiwxNykoMTQsUUJlLDQsMSwiZGl2IiwxOCkoMTUsZWplLDQsMSwiZGl2IiwxOSksaGUoKSxkZSgxNiwiZGl2IiwyMCksRmwoMTcsbnVsbCwyKSxoZSgpKCkoKSgpLGRlKDE5LCJkaXYiLDIxKSxtdCgyMCx0amUsNSwxLCJjbHItZGctcm93IiwyMiksRmwoMjEsbnVs''@;'; put 'put ''bCwzKSxtdCgyMyxuamUsNSwxLCJjbHItZGctcm93IiwyMiksWXIoMjQsMSksbXQoMjUscmplLDEsMCwiY2xyLWRnLXBsYWNlaG9sZGVyIiwyMyksaGUoKSgpKCkoKSxZcigyNiwyKSxtdCgyNyxpamUsMywwLCJkaXYiLDI0KSxoZSgpLFlyKDI4LDMpLGhlKCksZGUoMjksImRpdiIsMjUpKDMw''@;'; put 'put ''LCJkaXYiLDI2KSxGbCgzMSxudWxsLDQpLGhlKCksRmwoMzMsbnVsbCw1KSxoZSgpKSwyJmEmJihmZSgzKSxocigiYXJpYS1oaWRkZW4iLCEhZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbnx8bnVsbCksZmUoOSkseGUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElP''@;'; put 'put ''Tl9UWVBFLk11bHRpKSxmZSgpLHhlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCkseGUoIm5nSWYiLGQucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxmZSgpLHhlKCJuZ0lmIixkLmV4cGFuZGFibGVSb3dz''@;'; put 'put ''Lmhhc0V4cGFuZGFibGVSb3d8fGQuZGV0YWlsU2VydmljZS5lbmFibGVkKSxmZSg1KSx4ZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgzKSx4ZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgyKSx4ZSgibmdJZiIsIWQucGxhY2Vob2xkZXIpLGZlKDIpLHhlKCJuZ0lmIixk''@;'; put 'put ''LmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltiYSxkcyxNZCxubCxHcyxSZCxRZixnRyxFbSx5RyxTcCxUbSxBNyxrN10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgR1plPWM9PmM7bGV0IE9kZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb21tb25TdHJpbmdz''@;'; put 'put ''PWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMuYWxsU2VsZWN0ZWQ9bmV3IEtyfWdldCBjbHJBbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLmFsbFNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxIaWRlYWJsZXNWaXNpYmxlKCl7cmV0dXJuIDA9PT10aGlzLmhpZGVhYmxlQ29sdW1u''@;'; put 'put ''cygpLmZpbHRlcihhPT5hLnZhbHVlLmhpZGRlbikubGVuZ3RofXNlbGVjdEFsbCgpe3RoaXMuaGlkZWFibGVDb2x1bW5zKCkuZm9yRWFjaChhPT50aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShhLHtoaWRkZW46ITEsY2hhbmdlczpbVzEuSElEREVOXX0pKSx0aGlzLmFsbFNl''@;'; put 'put ''bGVjdGVkLm5leHQoITApfWhpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGE9PmEudmFsdWUuaGlkZWFibGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShpcyksR2UoZjUpKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4tbGluayIsInN3aXRjaC1idXR0b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLE9lKDEpLGhlKCkpLDImYSYmKHhlKCJkaXNh''@;'; put 'put ''YmxlZCIsZC5hbGxIaWRlYWJsZXNWaXNpYmxlKSxmZSgpLElyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFBkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlz''@;'; put 'put ''LmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5wb3BvdmVySWQ9U3UoKSx0aGlzLm9wZW5TdGF0ZT0hMSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LHRoaXMudHJhY2tCeUZuPUdaZSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1n''@;'; put 'put ''ZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29s''@;'; put 'put ''dW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1u''@;'; put 'put ''U3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W1cxLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3Ro''@;'; put 'put ''aXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlzKSxHZShmNSksR2Uoc2Mp''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShvamUsNSxKaSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5hbGxTZWxlY3RlZEVsZW1lbnQ9aC5maXJzdCl9fSxo''@;'; put 'put ''b3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLGQub3BlblN0YXRlKX0sZmVhdHVyZXM6W3ZkKFtzNV0pXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1siYWxsU2VsZWN0ZWQiLCIiXSxbInJvbGUi''@;'; put 'put ''LCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNk''@;'; put 'put ''a1RyYXBGb2N1cyIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNka1RyYXBG''@;'; put 'put ''b2N1cyIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNoLWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9n''@;'; put 'put ''Z2xlLXN3aXRjaC1jbG9zZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxb''@;'; put 'put ''MSwic3dpdGNoLWZvb3RlciJdLFszLCJjbHJBbGxTZWxlY3RlZCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm''@;'; put 'put ''YSYmKGRlKDAsImJ1dHRvbiIsMSksT2UoMSksaGUoKSxtdCgyLGNqZSwxNSw5LCJkaXYiLDIpKSwyJmEmJihocigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW5TdGF0ZSkoImFyaWEtaGFzcG9wdXAiLCJtZW51IiksZmUoKSxJcigiICIsZC5jb21t''@;'; put 'put ''b25TdHJpbmdzLmtleXMucGlja0NvbHVtbnMsIiAiKSxmZSgpLHhlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3Zl''@;'; put 'put ''ckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W25zLE4xLFp5LHJzLGRzLElkLFNoLE1kLG5sLEdzLE94LEwxZSxIeCxGeCxPZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEhkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJv''@;'; put 'put ''d3NDb3VudD1hLGEmJmEucmVnaXN0ZXIoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnVucmVnaXN0ZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UocXksOCkpfSxj''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dfSksY30pKCksY089KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMuZGV0YWlsU2VydmljZT1kLHRoaXMuY29sdW1uc1NlcnZpY2U9aCx0''@;'; put 'put ''aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLlNFTEVDVElPTl9UWVBFPXBsfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5oYXNIaWRlYWJsZUNvbHVtbnN9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdl''@;'; put 'put ''KGVfKSxHZShYZiksR2UoZjUpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1mb290ZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1mb290ZXIiLCEwKX0sbmdDb250ZW50U2VsZWN0''@;'; put 'put ''b3JzOmhqZSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLXNlbGVjdCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiY2hlY2tlZCIsImRpc2Fi''@;'; put 'put ''bGVkIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGRqZSksbXQoMCxmamUsOCwyLCJuZy1jb250YWluZXIiLDApKDEsZ2plLDQsMSwibmctY29udGFpbmVyIiwwKSxZcigyKSks''@;'; put 'put ''MiZhJiYoeGUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpJiZkLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W2JhLGRzLElkLFNo''@;'; put 'put ''LFBkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgX0c9bmV3IFN0KCJDT0xVTU5fU1RBVEUiKSxYWmU9e3Byb3ZpZGU6X0csdXNlRmFjdG9yeTpmdW5jdGlvbiBxWmUoKXtyZXR1cm4gbmV3IGVpKHtjaGFuZ2VzOltdfSl9fTtsZXQgcXg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhKXt0aGlzLnBhZ2U9YSx0aGlzLnBhZ2VTaXplT3B0aW9uc0lkPVN1KCl9bmdPbkluaXQoKXsoIXRoaXMucGFnZVNpemVPcHRpb25zfHwwPT09dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoKSYmKHRoaXMucGFnZVNpemVPcHRpb25zPVt0aGlzLnBhZ2Uuc2l6ZV0pfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNbSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnZS1zaXplIl1dLGlucHV0czp7cGFnZVNpemVPcHRpb25zOltObi5Ob25lLCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6''@;'; put 'put ''ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbTm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zSWQiLCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eW8sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbMywiZm9yIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsz''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJsYWJlbCIsMCksWXIoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNlbGVj''@;'; put 'put ''dCIsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBtaShkLnBhZ2Uuc2l6ZSxmKXx8KGQucGFnZS5zaXplPWYpLGZ9KSxtdCg0LG1qZSwyLDIsIm9wdGlvbiIsMyksaGUoKSgpKSwyJmEmJih4ZSgiZm9yIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxmZSgzKSxUcigiY2xy''@;'; put 'put ''LXBhZ2Utc2l6ZS1zZWxlY3QiLCEwKSx4ZSgiaWQiLGQucGFnZVNpemVPcHRpb25zSWQpLHBpKCJuZ01vZGVsIixkLnBhZ2Uuc2l6ZSksZmUoKSx4ZSgibmdGb3JPZiIsZC5wYWdlU2l6ZU9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltucyxkcyxBMixrMixUMixubCxHc10sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyfSksY30pKCksdU89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5wYWdlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5kZXRhaWxTZXJ2aWNlPWgsdGhpcy5jdXJyZW50Q2hhbmdlZD1uZXcgS3IoITEpLGEuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnBhZ2Uuc2l6ZX1zZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5wYWdlLnRvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5w''@;'; put 'put ''YWdlLnRvdGFsSXRlbXM9YSl9Z2V0IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UubGFzdD1hKX1nZXQgY3VycmVudFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQ''@;'; put 'put ''YWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3RJdGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0''@;'; put 'put ''dXJuIHRoaXMucGFnZS5jdXJyZW50PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0xKSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMucGFnZS5sYXN0JiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5z''@;'; put 'put ''aXplfHwodGhpcy5wYWdlLnNpemU9MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0KGEpKX1uZ09uRGVzdHJveSgpe3RoaXMucGFnZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2Ny''@;'; put 'put ''aXB0aW9uJiZ0aGlzLl9wYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlvdXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX12ZXJpZnlDdXJyZW50UGFnZShhKXtwYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCkhPT10aGlzLnBhZ2UuY3Vy''@;'; put 'put ''cmVudCYmKGEudGFyZ2V0LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50KX11cGRhdGVDdXJyZW50UGFnZShhKXtjb25zdCBkPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05hTihkKXx8KHRoaXMucGFnZS5jdXJyZW50PWQ8MT8xOmQ+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6''@;'; put 'put ''ZCksdGhpcy5jdXJyZW50UGFnZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQudG9TdHJpbmcoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTW0pLEdlKGlzKSxHZShYZikpfSxjLlx1MDI3NWNtcD1Wcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnaW5hdGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLHF4LDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuX3BhZ2VTaXplQ29tcG9uZW50PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7aWYoMSZhJiZxYSh2amUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5jdXJyZW50UGFnZUlucHV0UmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJwYWdpbmF0aW9uIiwhMCl9LGlucHV0czp7ZGlzYWJsZUN1cnJl''@;'; put 'put ''bnRQYWdlSW5wdXQ6W05uLk5vbmUsImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOltObi5Ob25lLCJjbHJEZ1BhZ2VTaXplIiwicGFnZVNpemUiXSx0b3RhbEl0ZW1zOltObi5Ob25lLCJjbHJEZ1RvdGFsSXRlbXMiLCJ0b3RhbEl0''@;'; put 'put ''ZW1zIl0sbGFzdFBhZ2U6W05uLk5vbmUsImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOltObi5Ob25lLCJjbHJEZ1BhZ2UiLCJjdXJyZW50UGFnZSJdfSxvdXRwdXRzOntjdXJyZW50Q2hhbmdlZDoiY2xyRGdQYWdlQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOnlq''@;'; put 'put ''ZSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sicmVhZE9ubHkiLCIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxp''@;'; put 'put ''c3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRp''@;'; put 'put ''cmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1p''@;'; put 'put ''bnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1uZXh0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbGFzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsInVwIl0sWyJ0eXBlIiwidGV4dCIsMSwicGFnaW5hdGlvbi1jdXJyZW50IiwiY2xyLWlucHV0IiwzLCJrZXlkb3duLmVu''@;'; put 'put ''dGVyIiwiYmx1ciIsInNpemUiLCJ2YWx1ZSJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3QiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShiamUpLG10KDAsTWplLDUsMiwibmctY29udGFpbmVyIiwyKSgxLHhqZSwxNCwxMCwibmctY29udGFpbmVyIiwyKSks''@;'; put 'put ''MiZhJiYoeGUoIm5nSWYiLCFkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSxmZSgpLHhlKCJuZ0lmIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbYmEscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFI3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2''@;'; put 'put ''LE0sRCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPXYsdGhpcy5jb2x1bW5zU2VydmljZT1NLHRoaXMuY29sdW1uU3RhdGU9RCx0aGlzLnJlc2l6ZUVtaXR0ZXI9bmV3IEtyLHRoaXMud2lkdGhTZXQ9ITEsdGhp''@;'; put 'put ''cy5hdXRvU2V0PSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZv''@;'; put 'put ''ckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZp''@;'; put 'put ''Y2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxY''@;'; put 'put ''eSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsJHgpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCR4KX1jbGVhcldpZHRoKCl7dGhpcy53aWR0aFNldCYmIXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZl''@;'; put 'put ''RWxlbWVudCwid2lkdGgiLG51bGwpLHRoaXMuYXV0b1NldCYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpfWRldGVjdFN0cmljdFdpZHRoKCl7cmV0dXJuIHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5P3RoaXMuY29sdW1uUmVz''@;'; put 'put ''aXplclNlcnZpY2Uud2lkdGhBZnRlclJlc2l6ZTp0aGlzLmF1dG9TZXQ/MDp0aGlzLmRvbUFkYXB0ZXIudXNlckRlZmluZWRXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfWNvbXB1dGVXaWR0aChhKXtsZXQgZD1hO3JldHVybiBkfHwoZD10aGlzLmRvbUFkYXB0ZXIuc2Nyb2xsV2lkdGgo''@;'; put 'put ''dGhpcy5lbC5uYXRpdmVFbGVtZW50KSksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVvKSxHZShENyksR2Uodm0pLEdlKGZHKSxHZShmNSksR2UoX0cpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy''@;'; put 'put ''LWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOltkYShbZkcsWFplXSldfSksY30pKCksdFdlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gMH1z''@;'; put 'put ''Y3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IG5XZT1jPT5lbChjKT9uZXcgdm06bmV3IHRXZTtsZXQgdF89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYs''@;'; put 'put ''TSxELFoscmUsY2UsYmUsRWUpe3RoaXMuZGF0YWdyaWQ9YSx0aGlzLm9yZ2FuaXplcj1kLHRoaXMuaXRlbXM9aCx0aGlzLnBhZ2U9Zix0aGlzLmVsPXYsdGhpcy5yZW5kZXJlcj1NLHRoaXMudGFibGVTaXplU2VydmljZT1aLHRoaXMuY29sdW1uc1NlcnZpY2U9cmUsdGhpcy5uZ1pvbmU9Y2Us''@;'; put 'put ''dGhpcy5rZXlOYXZpZ2F0aW9uPWJlLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9RWUsdGhpcy5faGVpZ2h0U2V0PSExLHRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1udWxsLHRoaXMuY29sdW1uc1Np''@;'; put 'put ''emVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQuZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ09NUFVURV9DT0xVTU5fV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29tcHV0ZUhlYWRlcnNXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5zaXplQ2hhbmdlLnN1''@;'; put 'put ''YnNjcmliZSgoKT0+e3RoaXMuX2hlaWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goRC5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoQmU9PnRoaXMudG9nZ2xlRGV0YWlsUGFuZShCZSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCho''@;'; put 'put ''LmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCkpfW5nT25Jbml0KCl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY29sdW1uU3RhdGVDaGFuZ2VkKGEpKSxudWxsPT09dGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50Lm9mZnNldFBhcmVudCYmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbYV0pPT57KHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnR8fGEuaXNJbnRlcnNlY3RpbmcpJiZ0aGlzLmNvbHVtbnNTaXplc1N0YWJsZSYm''@;'; put 'put ''KHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCkpfSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkp''@;'; put 'put ''fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5oZWFkZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN0YWJpbGl6ZUNv''@;'; put 'put ''bHVtbnMoKX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnRhYmxlU2l6ZVNlcnZpY2UudGFibGU9dGhpcy5lbH1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnMmJnRoaXMuc3RhYmlsaXplQ29sdW1ucygpLHRoaXMuc2hvdWxkQ29tcHV0ZUhlaWdodCgp''@;'; put 'put ''JiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5pbnRlcnNlY3Rpb25P''@;'; put 'put ''YnNlcnZlcj8uZGlzY29ubmVjdCgpfXRvZ2dsZURldGFpbFBhbmUoYSl7dGhpcy5oZWFkZXJzJiYoYSYmIXRoaXMuY29sdW1uc1NlcnZpY2UuaGFzQ2FjaGUoKT8odGhpcy5jb2x1bW5zU2VydmljZS5jYWNoZSgpLHRoaXMuY29sdW1uc1NlcnZpY2UudmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgo''@;'; put 'put ''ZCxoKT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChkLmNvbHVtbkluZGV4LHtjaGFuZ2VzOltXMS5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVh''@;'; put 'put ''ZGVycy5mb3JFYWNoKChhLGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5mb3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0''@;'; put 'put ''U3RhdGVDaGFuZ2UoYSx7Y2hhbmdlczpbVzEuSU5JVElBTElaRV0sY29sdW1uSW5kZXg6ZH0pfSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRTZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXpl''@;'; put 'put ''fWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSksdGhpcy5faGVpZ2h0U2V0PSEwfXJl''@;'; put 'put ''c2V0RGF0YWdyaWRIZWlnaHQoKXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IiwiIiksdGhpcy5faGVpZ2h0U2V0PSExfWNvbXB1dGVIZWFkZXJzV2lkdGgoKXtjb25zdCBhPXRoaXMuaGVhZGVycy5sZW5ndGgsZD10aGlzLmhlYWRlcnMubWFw''@;'; put 'put ''KGY9PmYuZ2V0Q29sdW1uV2lkdGhTdGF0ZSgpKTtsZXQgaD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZix2KT0+e2NvbnN0IE09e2NoYW5nZXM6W1cxLldJRFRIXSwuLi5kW3ZdfTtNLnN0cmljdFdpZHRofHwoaD0hMSksYT09PXYrMSYmaCYmKE0uc3RyaWN0V2lkdGg9MCksdGhpcy5jb2x1''@;'; put 'put ''bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdCh2LE0pfSl9Y29sdW1uU3RhdGVDaGFuZ2VkKGEpe2lmKCF0aGlzLmhlYWRlcnN8fG51bGw9PWEuY29sdW1uSW5kZXgpcmV0dXJuO2NvbnN0IGQ9YS5jb2x1bW5JbmRleDthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5m''@;'; put 'put ''b3JFYWNoKGg9Pntzd2l0Y2goaCl7Y2FzZSBXMS5XSURUSDp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldFdpZHRoKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmPy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiYoZi5jZWxscy5nZXQoZCkuc2V0V2lk''@;'; put 'put ''dGgoYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldFdpZHRoKGEpKX0pO2JyZWFrO2Nhc2UgVzEuSElEREVOOnRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmLmNlbGxzJiZmLmNlbGxzLmxlbmd0aCYmKGYuY2VsbHMuZ2V0''@;'; put 'put ''KGQpLnNldEhpZGRlbihhKSxmLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChkKT8uc2V0SGlkZGVuKGEpKX0pLHRoaXMudXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKSx0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCk7YnJlYWs7Y2FzZSBXMS5JTklUSUFMSVpFOmEu''@;'; put 'put ''aGlkZWFibGUmJmEuaGlkZGVuJiYodGhpcy5oZWFkZXJzLmdldChkKS5zZXRIaWRkZW4oYSksdGhpcy5yb3dzLmZvckVhY2goZj0+e2Yuc2V0Q2VsbHNTdGF0ZSgpLGYuZXhwYW5kYWJsZVJvdz8uc2V0Q2VsbHNTdGF0ZSgpfSkpfX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLmNvbHVtbnNT''@;'; put 'put ''aXplc1N0YWJsZXx8dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoPjAmJih0aGlzLm9yZ2FuaXplci5yZXNpemUoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMCl9dXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKXtjb25zdCBhPXRoaXMuZGF0YWdyaWQuY29sdW1ucy5maWx0''@;'; put 'put ''ZXIoZD0+IWQuaXNIaWRkZW4pO2EuZm9yRWFjaCgoZCxoKT0+e2g9PT1hLmxlbmd0aC0xP2Quc2hvd1NlcGFyYXRvcj0hMTpkLnNob3dTZXBhcmF0b3J8fChkLnNob3dTZXBhcmF0b3I9ITApfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEFt''@;'; put 'put ''KSxHZShENyksR2UoaDUpLEdlKE1tKSxHZShKaSksR2UoRW8pLEdlKFhmKSxHZShwRyksR2UoZjUpLEdlKFdhKSxHZShyTyksR2UoRXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtp''@;'; put 'put ''ZigxJmEmJihhbyhoLFI3LDQpLGFvKGgsVG0sNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuaGVhZGVycz1mKSxDaShmPVNpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTp2bSx1c2VGYWN0b3J5Om5XZSxkZXBzOltpb119XSldfSksY30pKCkscldlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhCT2Usak9lLG14LHpPZSxBMGUsVU9lLGswZSxaT2UsV09lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1w''@;'; put 'put ''b3J0czpbUmEsUlplLEtMLEFzLENkZSxSYyxQWSxPMixMWmUsU2RlLGp5LE54LFlZXX0pLGN9KSgpLE5kZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy''@;'; put 'put ''LXN0YWNrLWNvbnRlbnQiXV19KSxjfSkoKSx3Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZ2VuZXJhdGVkSWQ9bnVsbCx0aGlzLl9pZD1udWxsfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9InN0cmluZyI9PXR5cGVvZiBhJiYiIiE9PWE/''@;'; put 'put ''YTp0aGlzLl9nZW5lcmF0ZWRJZCsiIn1uZ09uSW5pdCgpe3RoaXMuX2dlbmVyYXRlZElkPSJjbHItc3RhY2stbGFiZWwtIitTdSgpLHRoaXMuaWR8fCh0aGlzLl9pZD10aGlzLl9nZW5lcmF0ZWRJZCsiIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stbGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFy''@;'; put 'put ''czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhw''@;'; put 'put ''YW5kYWJsZT0hMSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9U3UoKSx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW49MCx0aGlzLl9mdWxseUluaXRpYWxpemVkPSExLHRoaXMuX2NoYW5nZWQ9ITEsYSYmYS5hZGRDaGlsZCgpfXNldCBz''@;'; put 'put ''ZXRDaGFuZ2VkVmFsdWUoYSl7dGhpcy5fY2hhbmdlZD1hLHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYoYT90aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuKys6dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2NoYW5nZWR8fHRoaXMuX2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlJiYhdGhpcy5leHBhbmRlZCYmdGhpcy5mb2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dGFja0Jsb2NrVGl0bGUuaWR9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVudD8iNCI6IjMifWdldCBjYXJldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25J''@;'; put 'put ''bml0KCl7dGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQoYSl7QmRlKGEpfHx0aGlzLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4''@;'; put 'put ''cGFuZGVkKSl9Z2V0U3RhY2tDaGlsZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9YDpudWxsfXByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGEpe0JkZShhKXx8YS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stYmxvY2siXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCx3Ryw1KSwyJmEp''@;'; put 'put ''e2xldCBmO0NpKGY9U2koKSkmJihkLnN0YWNrQmxvY2tUaXRsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIiwiaGVhZGluZyIpKCJhcmlhLWxldmVsIixkLmhlYWRpbmdMZXZlbCksVHIoInN0YWNrLWJsb2NrIiwhMCko''@;'; put 'put ''InN0YWNrLWJsb2NrLWV4cGFuZGVkIixkLmV4cGFuZGVkKSgic3RhY2stYmxvY2stZXhwYW5kYWJsZSIsZC5leHBhbmRhYmxlKSgic3RhY2stYmxvY2stY2hhbmdlZCIsZC5nZXRDaGFuZ2VkVmFsdWUpKCJvbi1mb2N1cyIsZC5vblN0YWNrTGFiZWxGb2N1cykpfSxpbnB1dHM6e2V4cGFuZGVk''@;'; put 'put ''OltObi5Ob25lLCJjbHJTYkV4cGFuZGVkIiwiZXhwYW5kZWQiXSxleHBhbmRhYmxlOltObi5Ob25lLCJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOltObi5Ob25lLCJjbHJTdGFja1ZpZXdMZXZlbCIsImFyaWFMZXZlbCJdLHNldENoYW5nZWRWYWx1ZTpbTm4uTm9u''@;'; put 'put ''ZSwiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RGplLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGlj''@;'; put 'put ''ayIsImtleXVwLmVudGVyIiwia2V5dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNr''@;'; put 'put ''LXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xy''@;'; put 'put ''LXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShramUpLGRlKDAsImRpdiIsMCksSHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBk''@;'; put 'put ''LnRvZ2dsZUV4cGFuZChmKX0pKCJrZXl1cC5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGYpfSkoImZvY3VzIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBkLmZvY3VzZWQ9ITB9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSExfSksbXQoMSxJamUsMSwxLCJjZHMtaWNvbiIsMSkoMixSamUsMiwxLCJzcGFuIiwyKSxkZSgzLCJkaXYiLDMpLFlyKDQpLGhlKCksZGUoNSwiZGl2Iiw0KSxZcig2LDEpLGhlKCkoKSxkZSg3''@;'; put 'put ''LCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDUpLG10KDgsTGplLDIsNCwiZGl2Iiw2KSxoZSgpKSwyJmEmJih4ZSgiaWQiLGQudW5pcXVlSWQpLGhyKCJyb2xlIixkLnJvbGUpKCJ0YWJpbmRleCIsZC50YWJJbmRleCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1j''@;'; put 'put ''b250cm9scyIsZC5nZXRTdGFja0NoaWxkcmVuSWQoKSksZmUoKSx4ZSgibmdJZiIsZC5leHBhbmRhYmxlKSxmZSgpLHhlKCJuZ0lmIixkLmdldENoYW5nZWRWYWx1ZSksZmUoNSkseGUoImNsckV4cGFuZFRyaWdnZXIiLGQuZXhwYW5kZWQpLGZlKCkseGUoIm5nSWYiLGQuZXhwYW5kZWQpKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltiYSxycyxWTF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7ZnVuY3Rpb24gQmRlKGMpe2NvbnN0IGw9Yz8udGFyZ2V0O3JldHVybiEhbD8udGFnTmFtZSYmWyJJTlBVVCIsIlRFWFRBUkVBIiwiQlVUVE9OIiwiQSIsIlNFTEVDVCIsIk9QVElPTiJdLmluY2x1ZGVzKGwu''@;'; put 'put ''dGFnTmFtZSl9bGV0IENHPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6UGplLGRlY2xzOjMs''@;'; put 'put ''dmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShPamUpLFlyKDApLGRlKDEsImRpdiIsMCksWXIoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksYVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5h''@;'; put 'put ''ZGRJY29ucyhFeSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLEFzLFNkZV19KSxjfSkoKSxMNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5zZWxlY3RhYmxlPSExLHRoaXMuZWFnZXI9ITAsdGhpcy5jaGlsZHJlbkZldGNoZWQ9bmV3IFdufX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtj''@;'; put 'put ''b25zdCBqZGU9e3Byb3ZpZGU6TDcsdXNlRmFjdG9yeTpmdW5jdGlvbiBvV2UoYyl7cmV0dXJuIGN8fG5ldyBMN30sZGVwczpbW25ldyBJMSxuZXcgbGQsTDddXX07bGV0IHpkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmV4cGFu''@;'; put 'put ''ZFNlcnZpY2U9ZCxkJiYodGhpcy5zdWJzY3JpcHRpb249ZC5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGg9PnshaCYmdGhpcy5wYXJlbnQmJiFhLmVhZ2VyJiZhLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJp''@;'; put 'put ''YVJvbGVzKCl9c2hvdWxkUmVuZGVyKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyfHwhdGhpcy5leHBhbmRTZXJ2aWNlfHx0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQpfWdldENvbnRleHQoYSl7cmV0dXJueyRp''@;'; put 'put ''bXBsaWNpdDphLm1vZGVsLGNsck1vZGVsOmF9fW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucGFyZW50PyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTDcpLEdlKFUxLDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLGQucm9s''@;'; put 'put ''ZSl9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihhLGQpezEmYSYmbXQoMCxCamUsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmeGUoIm5nSWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgJHU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNF''@;'; put 'put ''TEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRFUk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oJHV8fHt9KTtjbGFzcyBVZGV7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmckPW5ldyBlaSghMSksdGhpcy5zZWxlY3RlZD1uZXcg''@;'; put 'put ''ZWkoJHUuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKGwpe3RoaXMuX2xvYWRpbmc9bCx0aGlzLmxvYWRpbmckLm5leHQobCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuISghdGhpcy5fZGlzYWJsZWQmJiF0''@;'; put 'put ''aGlzLnBhcmVudD8uZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXt0aGlzLl9kaXNhYmxlZD1sfWRlc3Ryb3koKXt0aGlzLnNlbGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0ZWQobCxhLGQpe2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLGQmJmwhPT0k''@;'; put 'put ''dS5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaD0+e2guZGlzYWJsZWR8fGguc2V0U2VsZWN0ZWQobCwhMSwhMCl9KSxhJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxl''@;'; put 'put ''Y3Rpb24obCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09JHUuU0VMRUNURUQ/JHUuVU5TRUxFQ1RFRDokdS5TRUxFQ1RFRCwhMCxsKX1fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCl7Y29uc3QgbD10aGlzLmNvbXB1dGVTZWxlY3Rp''@;'; put 'put ''b25TdGF0ZUZyb21DaGlsZHJlbigpO2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfWNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xl''@;'; put 'put ''dCBsPSExLGE9ITE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jaGlsZHJlbilzd2l0Y2goZC5zZWxlY3RlZC52YWx1ZSl7Y2FzZSAkdS5JTkRFVEVSTUlOQVRFOmlmKGQuZGlzYWJsZWQpY29udGludWU7cmV0dXJuICR1LklOREVURVJNSU5BVEU7Y2FzZSAkdS5TRUxFQ1RFRDppZihsPSEwLGEpcmV0''@;'; put 'put ''dXJuICR1LklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwpcmV0dXJuICR1LklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT8kdS5VTlNFTEVDVEVEOiR1LlNFTEVDVEVEOiR1LlVOU0VMRUNURUR9fWNsYXNzIGRPIGV4dGVuZHMgVWRle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1''@;'; put 'put ''cGVyKCksdGhpcy5nZXRDaGlsZHJlbj1kLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITEsdGhpcy5fY2hpbGRyZW49W10sdGhpcy5tb2RlbD1sLHRoaXMucGFyZW50PWF9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZmV0Y2hDaGlsZHJlbigpLHRoaXMu''@;'; put 'put ''X2NoaWxkcmVufXNldCBjaGlsZHJlbihsKXt0aGlzLl9jaGlsZHJlbj1sfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxzdXBlci5kZXN0cm95KCl9Y2xlYXJDaGlsZHJlbigpe3RoaXMuX2NoaWxkcmVuLmZvckVhY2gobD0+bC5k''@;'; put 'put ''ZXN0cm95KCkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbix0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMX1mZXRjaENoaWxkcmVuKCl7aWYodGhpcy5jaGlsZHJlbkZldGNoZWQpcmV0dXJuO2NvbnN0IGw9dGhpcy5nZXRDaGlsZHJlbih0aGlzLm1vZGVsKTshZnVuY3Rpb24gc1dlKGMpe3JldHVybiBj''@;'; put 'put ''JiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufShsKT9CTShsKT8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc3Vic2NyaXB0aW9uPWwuc3Vic2NyaWJlKGE9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSk6dGhpcy5fY2hpbGRyZW49bD90aGlz''@;'; put 'put ''LndyYXBDaGlsZHJlbihsKTpbXToodGhpcy5sb2FkaW5nPSEwLGwudGhlbihhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSEwLHRoaXMuZmVhdHVyZXNTZXJ2aWNlJiZ0aGlzLmZlYXR1cmVzU2Vy''@;'; put 'put ''dmljZS5jaGlsZHJlbkZldGNoZWQubmV4dCgpfXdyYXBDaGlsZHJlbihsKXtyZXR1cm4gbC5tYXAoYT0+bmV3IGRPKGEsdGhpcyx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSl9fWxldCBaZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50ZW1w''@;'; put 'put ''bGF0ZT1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWQsdGhpcy5jZHI9aH1uZ09uQ2hhbmdlcygpe2xldCBhO2E9QXJyYXkuaXNBcnJheSh0aGlzLm5vZGVzKT90aGlzLm5vZGVzLm1hcChkPT5uZXcgZE8oZCxudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKTpbbmV3''@;'; put 'put ''IGRPKHRoaXMubm9kZXMsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKV0sdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9ufHwodGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uPXRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5waXBl''@;'; put 'put ''KGZtKDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPXt0ZW1wbGF0ZTp0aGlzLnRlbXBsYXRlLHJvb3Q6YX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24mJnRoaXMu''@;'; put 'put ''Y2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShTbCksR2UoTDcpLEdlKEVzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJlY3Vyc2l2ZUZv''@;'; put 'put ''ciIsIiIsImNsclJlY3Vyc2l2ZUZvck9mIiwiIl1dLGlucHV0czp7bm9kZXM6W05uLk5vbmUsImNsclJlY3Vyc2l2ZUZvck9mIiwibm9kZXMiXSxnZXRDaGlsZHJlbjpbTm4uTm9uZSwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbd2xdfSks''@;'; put 'put ''Y30pKCksU0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgV24sdGhpcy5fZm9jdXNDaGFuZ2U9bmV3IFdufWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5fZm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlz''@;'; put 'put ''Ll9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVudCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJs''@;'; put 'put ''ZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9''@;'; put 'put ''Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5O''@;'; put 'put ''b2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEp''@;'; put 'put ''cmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gaDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtj''@;'; put 'put ''b25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVudDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+''@;'; put 'put ''MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVT''@;'; put 'put ''dGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IHY9aC5pbmRleE9mKGQpKzE7djxoLmxlbmd0aDt2Kyspe2NvbnN0IEQ9dGhpcy5maW5kTm9kZVN0''@;'; put 'put ''YXJ0c1dpdGgoYSxoW3ZdKTtpZihEKXJldHVybiBEfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0''@;'; put 'put ''YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQpe3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3Rh''@;'; put 'put ''cnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVT''@;'; put 'put ''dGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgbFdl''@;'; put 'put ''IGV4dGVuZHMgVWRle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5wYXJlbnQ9bCxsJiZsLl9hZGRDaGlsZCh0aGlzKSx0aGlzLmNoaWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3JlbW92ZUNoaWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fYWRkQ2hp''@;'; put 'put ''bGQobCl7dGhpcy5jaGlsZHJlbi5wdXNoKGwpfV9yZW1vdmVDaGlsZChsKXtjb25zdCBhPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihsKTthPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShhLDEpfX1sZXQgcDU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsPWF9Z2V0IGFjdGl2''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0ZSgpe3RoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJjbHItdHJlZW5vZGUtbGluayJdXX0pLGN9KSgpLFBkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXt0''@;'; put 'put ''aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuZXhwYW5kU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMuZm9jdXNNYW5hZ2VyPU0sdGhpcy5lbGVtZW50UmVmPUQsdGhpcy5zZWxlY3RlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZXhwYW5kZWRD''@;'; put 'put ''aGFuZ2U9bmV3IEtyLHRoaXMuU1RBVEVTPSR1LHRoaXMuaXNNb2RlbExvYWRpbmc9ITEsdGhpcy5ub2RlSWQ9U3UoKSx0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD0tMSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExLHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIiLHRoaXMudHlwZUFoZWFk''@;'; put 'put ''S2V5RXZlbnQ9bmV3IFduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9tb2RlbD1oLnJlY3Vyc2lvbj9aLnZpZXc/Wi52aWV3LmNvbnRleHQuY2xyTW9kZWw6Wi5fbFZpZXdbOF0uY2xyTW9kZWw6bmV3IGxXZShkP2QuX21vZGVsOm51bGwpLHRoaXMuX21vZGVsLm5vZGVJZD10aGlzLm5v''@;'; put 'put ''ZGVJZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX21vZGVsLmRpc2FibGVkPWF9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlfXNldCBzZWxlY3RlZChhKXt0aGlzLmZlYXR1cmVz''@;'; put 'put ''U2VydmljZS5zZWxlY3RhYmxlPSEwLChudWxsPT09YXx8dHlwZW9mIGE+InUiKSYmKGE9JHUuVU5TRUxFQ1RFRCksImJvb2xlYW4iPT10eXBlb2YgYSYmKGE9YT8kdS5TRUxFQ1RFRDokdS5VTlNFTEVDVEVEKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSEwLHRoaXMuX21vZGVsLnNldFNlbGVjdGVk''@;'; put 'put ''KGEsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmRTZXJ2aWNl''@;'; put 'put ''LmV4cGFuZGVkPWF9c2V0IGNsckZvclR5cGVBaGVhZChhKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1XZGUoYXx8dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2Rl''@;'; put 'put ''bC5zZWxlY3RlZC52YWx1ZT09PSR1LlNFTEVDVEVEOiEhdGhpcy50cmVlTm9kZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVuZ3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuX21vZGVsLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fbW9k''@;'; put 'put ''ZWwuc2VsZWN0ZWQucGlwZSgkbCgoKT0+IXRoaXMuc2tpcEVtaXRDaGFuZ2UpKS5zdWJzY3JpYmUoYT0+e3RoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChhKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShhPT57dGhp''@;'; put 'put ''cy5leHBhbmRlZENoYW5nZS5lbWl0KGEpLHRoaXMuX21vZGVsLmV4cGFuZGVkPWF9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c01hbmFnZXIuZm9jdXNSZXF1ZXN0LnN1YnNjcmliZShhPT57dGhpcy5ub2RlSWQ9PT1hJiZ0aGlzLmZvY3VzVHJlZU5vZGUoKX0pLHRoaXMu''@;'; put 'put ''Zm9jdXNNYW5hZ2VyLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jaGVja1RhYkluZGV4KGEpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLmxvYWRpbmckLnBpcGUoZm0oMCkpLnN1YnNjcmliZShhPT50aGlzLmlzTW9kZWxMb2FkaW5nPWEpKX1uZ0FmdGVy''@;'; put 'put ''Q29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnR5cGVBaGVhZEtleUV2ZW50LnBpcGUoZm0oMjAwKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVTdGFydHNXaXRoKGEsdGhpcy5fbW9kZWwpLHRoaXMudHlwZUFoZWFkS2V5QnVmZmVy''@;'; put 'put ''PSIifSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX21vZGVsLnRleHRDb250ZW50fHwodGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9V2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxlOiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYklu''@;'; put 'put ''ZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5mb2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtz''@;'; put 'put ''d2l0Y2goUlkoYSksSTIoYS5rZXkpKXtjYXNlIGdhLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dEb3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNl''@;'; put 'put ''IGdhLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7Y2FzZSBnYS5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0''@;'; put 'put ''VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIGdhLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIGdhLkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2UgZ2EuU3Bh''@;'; put 'put ''Y2U6Y2FzZSBnYS5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50ZXh0Q29udGVudCYmZnVuY3Rpb24gcXplKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNh''@;'; put 'put ''c2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIi''@;'; put 'put ''fXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsYS50b1N0cmluZygpKX1jaGVja1RhYkluZGV4KGEpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMu''@;'; put 'put ''bm9kZUlkIT09YSYmLTEhPT10aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleCYmdGhpcy5zZXRUYWJJbmRleCgtMSl9dG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmlzRXhwYW5kYWJsZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4''@;'; put 'put ''cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpKX1leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuaXNQYXJlbnQmJnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJl''@;'; put 'put ''bG93KHRoaXMuX21vZGVsKTp0aGlzLmlzRXhwYW5kYWJsZSgpJiYodGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKSl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExOnRoaXMuZm9j''@;'; put 'put ''dXNNYW5hZ2VyLmZvY3VzUGFyZW50KHRoaXMuX21vZGVsKSl9dHJpZ2dlckRlZmF1bHRBY3Rpb24oKXt0aGlzLnRyZWVOb2RlTGluaz90aGlzLnRyZWVOb2RlTGluay5hY3RpdmF0ZSgpOnRoaXMuaXNTZWxlY3RhYmxlKCkmJnRoaXMuX21vZGVsLnRvZ2dsZVNlbGVjdGlvbih0aGlzLmZlYXR1''@;'; put 'put ''cmVzU2VydmljZS5lYWdlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlvKSxHZShjLDEyKSxHZShMNyksR2UoVTEpLEdlKGlzKSxHZShTRyksR2UoSmkpLEdlKERzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci10cmVlLW5vZGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxwNSw0KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnRyZWVOb2RlTGlua0xpc3Q9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKGpqZSw3LEppKSwyJmEpe2xl''@;'; put 'put ''dCBoO0NpKGg9U2koKSkmJihkLmNvbnRlbnRDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci10cmVlLW5vZGUiLCEwKSgiZGlzYWJsZWQiLGQuX21vZGVsLmRpc2FibGVkKX0saW5wdXRzOntleHBhbmRhYmxlOltO''@;'; put 'put ''bi5Ob25lLCJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGRpc2FibGVkOltObi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sc2VsZWN0ZWQ6W05uLk5vbmUsImNsclNlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbTm4uTm9uZSwiY2xyRXhwYW5kZWQiLCJleHBhbmRl''@;'; put 'put ''ZCJdLGNsckZvclR5cGVBaGVhZDoiY2xyRm9yVHlwZUFoZWFkIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2U6ImNsclNlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbZGEoW2pkZSxVMSx7cHJvdmlkZTpreCx1c2VFeGlzdGluZzpV''@;'; put 'put ''MX1dKV0sbmdDb250ZW50U2VsZWN0b3JzOlVqZSxkZWNsczoxMix2YXJzOjEyLGNvbnN0czpbWyJjb250ZW50Q29udGFpbmVyIiwiIl0sWyJ0cmVlbm9kZUNvbnRlbnQiLCIiXSxbInJvbGUiLCJ0cmVlaXRlbSIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlLW5vZGUtY29udGVudC1jb250''@;'; put 'put ''YWluZXIiLDMsImtleWRvd24iLCJmb2N1cyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLCJjbGFzcyIsImNsci10cmVlbm9kZS1jYXJldCIsMywiZGlzYWJsZWQiLCJjbGljayIsImZvY3VzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10''@;'; put 'put ''cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciBjbHItdHJlZW5vZGUtY2hlY2tib3giLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiLDQsIm5nSWYiXSxbMSwiY2xyLXRy''@;'; put 'put ''ZWVub2RlLWNoaWxkcmVuIl0sWzMsInBhcmVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlbm9kZS1jYXJldCIsMywiY2xpY2siLCJmb2N1cyIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJjbHItdHJl''@;'; put 'put ''ZW5vZGUtY2FyZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIiwiY2xyLXRyZWVub2RlLWNoZWNrYm94Il0sWyJhcmlhLWhpZGRlbiIsInRydWUi''@;'; put 'put ''LCJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImNoYW5nZSIsImZvY3VzIiwiaWQiLCJkaXNhYmxlZCIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMywibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dCJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJjbHItc3Itb25seSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO3NhKHpqZSksZGUoMCwiZGl2IiwyLDApLEh0''@;'; put 'put ''KCJrZXlkb3duIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5vbktleURvd24odikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChoKSxDdChkLmJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKSl9KSxtdCgyLFpqZSwyLDIsImJ1dHRvbiIsMykoMyxXamUsMiwwLCJkaXYi''@;'; put 'put ''LDQpKDQsWWplLDQsNiwiZGl2Iiw1KSg1LEdqZSwyLDEsImRpdiIsNikoNixLamUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLEljKSxoZSgpLGRlKDgsImRpdiIsNyksWXIoOSksWXIoMTAsMSksR3QoMTEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDgpLGhlKCl9MiZhJiYoVHIoImNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGhyKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxlY3RlZCksZmUoMikseGUoIm5nSWYiLGQu''@;'; put 'put ''aXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGQuZXhwYW5kU2VydmljZS5sb2FkaW5nfHxkLmlzTW9kZWxMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIiwhZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoMykseGUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQiKSxocigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNT''@;'; put 'put ''ZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLGZlKDMpLHhlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbYmEsTjEscnMsemRlXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt5aCgidG9nZ2xlQ2hpbGRyZW5BbmltIixbaXUoImNvbGxhcHNlZCA9PiBl''@;'; put 'put ''eHBhbmRlZCIsW3VzKHtoZWlnaHQ6MH0pLE0wKDIwMCx1cyh7aGVpZ2h0OiIqIn0pKV0pLGl1KCJleHBhbmRlZCA9PiBjb2xsYXBzZWQiLFt1cyh7aGVpZ2h0OiIqIn0pLE0wKDIwMCx1cyh7aGVpZ2h0OjB9KSldKSxTTCgiZXhwYW5kZWQiLHVzKHtoZWlnaHQ6IioiLCJvdmVyZmxvdy15Ijoi''@;'; put 'put ''dmlzaWJsZSJ9KSksU0woImNvbGxhcHNlZCIsdXMoe2hlaWdodDowfSkpXSldfX0pLGN9KSgpO2Z1bmN0aW9uIFdkZShjKXtyZXR1cm4gYy50b0xvY2FsZUxvd2VyQ2FzZSgpLnRyaW0oKX1sZXQgRWg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuZmVhdHVyZXNT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuZWw9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITE7Y29uc3QgTT12LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT54ZChmLm5hdGl2ZUVsZW1lbnQsImZv''@;'; put 'put ''Y3VzaW4iKS5zdWJzY3JpYmUoRD0+e0QudGFyZ2V0PT09Zi5uYXRpdmVFbGVtZW50JiYoZC5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKSxoLnJlbW92ZUF0dHJpYnV0ZShmLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IikpfSkpO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKE0pfXNldCBsYXp5KGEp''@;'; put 'put ''e3RoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyPSFhfWdldCBpc011bHRpU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9pc011bHRpU2VsZWN0YWJsZX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldFJvb3ROb2RlcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucm9vdE5vZGVz''@;'; put 'put ''LmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRNdWx0aVNlbGVjdGFibGUoKSx0aGlzLnNldFJvb3ROb2RlcygpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRNdWx0aVNlbGVjdGFibGUoKXt0aGlzLmZlYXR1''@;'; put 'put ''cmVzU2VydmljZS5zZWxlY3RhYmxlJiZ0aGlzLnJvb3ROb2Rlcy5sZW5ndGg+MD8odGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITAsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiKSk6KHRoaXMuX2lz''@;'; put 'put ''TXVsdGlTZWxlY3RhYmxlPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiKSl9c2V0Um9vdE5vZGVzKCl7dGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlLnJvb3ROb2RlTW9kZWxzPXRoaXMucm9vdE5vZGVz''@;'; put 'put ''Lm1hcChhPT5hLl9tb2RlbCkuZmlsdGVyKGE9PiFhLnBhcmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEw3KSxHZShTRyksR2UoRW8pLEdlKEppKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''dHJlZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFBkLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQucm9vdE5vZGVzPWYpfX0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsy''@;'; put 'put ''JmEmJmhyKCJyb2xlIiwidHJlZSIpfSxpbnB1dHM6e2xhenk6W05uLk5vbmUsImNsckxhenkiLCJsYXp5Il19LGZlYXR1cmVzOltkYShbamRlLFNHXSldLG5nQ29udGVudFNlbGVjdG9yczp5byxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFszLCJjaGls''@;'; put 'put ''ZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCksbXQoMSxxamUsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uKSl9LGRlcGVuZGVuY2llczpbYmEsemRlXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEV5KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1w''@;'; put 'put ''b3J0czpbUmEsQXMsUFldfSksY30pKCksaFdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3JXZSxhV2UsZFdlXX0pLGN9KSgpO2Nv''@;'; put 'put ''bnN0IGZXZT1bImluZm8iLCJ3YXJuaW5nIiwiZGFuZ2VyIiwic3VjY2VzcyIsIm5ldXRyYWwiLCJ1bmtub3duIiwibG9hZGluZyJdO2xldCBNRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuZGVmYXVsdEljb25TaGFwZT0iaW5mby1zdGFu''@;'; put 'put ''ZGFyZCIsdGhpcy5fYWxlcnRJY29uU2hhcGU9IiIsdGhpcy5fYWxlcnRUeXBlPSJpbmZvIn1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuX2FsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe2ZXZS5pbmRleE9mKGEpPi0xJiYodGhpcy5fYWxlcnRUeXBlPWEpfWdldCBhbGVydEljb25TaGFw''@;'; put 'put ''ZSgpe3JldHVybiIiPT09dGhpcy5fYWxlcnRJY29uU2hhcGU/dGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkuc2hhcGU6dGhpcy5fYWxlcnRJY29uU2hhcGV9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe2E/YSE9PXRoaXMuX2FsZXJ0SWNvblNoYXBlJiYodGhpcy5fYWxlcnRJ''@;'; put 'put ''Y29uU2hhcGU9YSk6dGhpcy5fYWxlcnRJY29uU2hhcGU9IiJ9Z2V0IGFsZXJ0SWNvblRpdGxlKCl7cmV0dXJuIHRoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVydFR5cGUpLnRpdGxlfWljb25JbmZvRnJvbVR5cGUoYSl7Y29uc3QgZD17c2hhcGU6IiIsY3NzQ2xhc3M6IiIsdGl0bGU6''@;'; put 'put ''IiJ9O3N3aXRjaChhKXtjYXNlIndhcm5pbmciOmQuc2hhcGU9Indhcm5pbmctc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0iZXJyb3Itc3RhbmRhcmQi''@;'; put 'put ''LGQuY3NzQ2xhc3M9ImFsZXJ0LWRhbmdlciIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYW5nZXI7YnJlYWs7Y2FzZSJzdWNjZXNzIjpkLnNoYXBlPSJzdWNjZXNzLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLnN1Y2Nlc3M7YnJlYWs7Y2FzZSJuZXV0cmFsIjpkLnNoYXBlPSJub3RlIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm5ldXRyYWw7YnJlYWs7Y2FzZSJ1bmtub3duIjpkLnNoYXBlPSJoZWxwIixkLmNzc0NsYXNzPSJh''@;'; put 'put ''bGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7Y2FzZSJsb2FkaW5nIjpkLnNoYXBlPSJsb2FkaW5nIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGlzKSl9''@;'; put 'put ''LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksaE89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgV259Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4h''@;'; put 'put ''YS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEsdGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5f''@;'; put 'put ''Y3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhpcy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1h''@;'; put 'put ''dGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09''@;'; put 'put ''dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxl''@;'; put 'put ''bmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0''@;'; put 'put ''aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxYeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmljb25TZXJ2aWNlPWEsdGhpcy5jZHI9ZCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5yZW5kZXJlcj12''@;'; put 'put ''LHRoaXMuaG9zdEVsZW1lbnQ9TSx0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENo''@;'; put 'put ''YW5nZWQ9bmV3IEtyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTGlnaHR3ZWlnaHQ9ITF9Z2V0IGlzTGlnaHR3ZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNMaWdodHdlaWdodH1zZXQgaXNMaWdodHdlaWdodChhKXt0aGlzLl9pc0xpZ2h0d2VpZ2h0''@;'; put 'put ''PWEsdGhpcy5jb25maWdBbGVydFR5cGUodGhpcy5fb3JpZ0FsZXJ0VHlwZSl9Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe3RoaXMuX29yaWdBbGVydFR5cGU9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZShhKX1zZXQgYWxl''@;'; put 'put ''cnRJY29uU2hhcGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydEljb25TaGFwZT1hfXNldCBjbG9zZWQoYSl7YSYmIXRoaXMuX2Nsb3NlZD90aGlzLmNsb3NlKCk6IWEmJnRoaXMuX2Nsb3NlZCYmdGhpcy5vcGVuKCl9Z2V0IGFsZXJ0Q2xhc3MoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5p''@;'; put 'put ''Y29uSW5mb0Zyb21UeXBlKHRoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlKS5jc3NDbGFzc31nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGEpe2EhPT10aGlzLl9oaWRkZW4mJih0aGlzLl9oaWRkZW49YSx0aGlzLl9oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRD''@;'; put 'put ''bGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpfW5nT25Jbml0KCl7dGhp''@;'; put 'put ''cy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaGlkZGVuPXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0IT09dGhpc30pKX1uZ09uRGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29uZmlnQWxlcnRUeXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlPWF9b3Blbigpe3RoaXMuX2Nsb3NlZD0hMSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm9w''@;'; put 'put ''ZW4oKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITEpfWNsb3NlKCl7aWYoIXRoaXMuY2xvc2FibGUpcmV0dXJuO2NvbnN0IGE9dGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uY3VycmVudEFsZXJ0PT09dGhpczt0aGlzLl9jbG9zZWQ9ITAsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uYWN0aXZl''@;'; put 'put ''QWxlcnRzJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1HKSxHZShFcyksR2UoaE8sOCksR2UoaXMpLEdlKEVvKSxHZShKaSkpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQiXV0saW5wdXRzOntpc1NtYWxsOltObi5Ob25lLCJjbHJBbGVydFNpemVTbWFsbCIsImlzU21hbGwiXSxjbG9zYWJsZTpbTm4uTm9uZSwiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpb''@;'; put 'put ''Tm4uTm9uZSwiY2xyQWxlcnRBcHBMZXZlbCIsImlzQXBwTGV2ZWwiXSxjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwiLGlzTGlnaHR3ZWlnaHQ6W05uLk5vbmUsImNsckFsZXJ0TGlnaHR3ZWlnaHQiLCJpc0xpZ2h0d2VpZ2h0Il0sYWxlcnRUeXBlOltO''@;'; put 'put ''bi5Ob25lLCJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbTm4uTm9uZSwiY2xyQWxlcnRJY29uIiwiYWxlcnRJY29uU2hhcGUiXSxjbG9zZWQ6W05uLk5vbmUsImNsckFsZXJ0Q2xvc2VkIiwiY2xvc2VkIl19LG91dHB1dHM6e19jbG9zZWRDaGFuZ2VkOiJjbHJB''@;'; put 'put ''bGVydENsb3NlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbTUddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlvLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsImFsZXJ0IiwzLCJuZ0NsYXNzIiwiYWxlcnQtc20iLCJhbGVydC1saWdodHdlaWdodCIsImFsZXJ0LWFwcC1sZXZlbCIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFzcyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxtdCgwLEpqZSw0LDgsImRpdiIsMCkpLDImYSYmeGUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLHJzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''KXt0aGlzLmljb25TZXJ2aWNlPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1HKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydC1pdGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLG5nQ29u''@;'; put 'put ''dGVudFNlbGVjdG9yczp5byxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbImNsYXNzIiwiYWxlcnQtc3Bpbm5lciIsImNscklubGluZSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydC1pY29uIiwicm9sZSIsImltZyIsNCwibmdJZiJdLFsiY2xy''@;'; put 'put ''SW5saW5lIiwiIiwxLCJhbGVydC1zcGlubmVyIl0sWyJyb2xlIiwiaW1nIiwxLCJhbGVydC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxkZSgwLCJkaXYiLDApLG10KDEsUWplLDEsMCwiY2xyLXNwaW5uZXIiLDEpKDIsZXplLDEsMiwiY2RzLWljb24iLDIpLGhl''@;'; put 'put ''KCksWXIoMykpLDImYSYmKGZlKCkseGUoIm5nSWYiLCJsb2FkaW5nIj09PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpLGZlKCkseGUoIm5nSWYiLCJsb2FkaW5nIiE9PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpKX0sZGVwZW5kZW5jaWVzOltiYSxycyxSZF0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSksY30pKCksSng9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwiYWxlcnQtdGV4dCJdXX0pLGN9KSgpLEdkZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBLcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3J9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11''@;'; put 'put ''bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50''@;'; put 'put ''QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgcHJldmlvdXNBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''YWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09YT90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50OmEtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1nZXQgbmV4dEFsZXJ0QXJpYUxhYmVsKCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooYT09PXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ/MTphKzEpLnRvU3Ry''@;'; put 'put ''aW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hh''@;'; put 'put ''bmdlLmVtaXQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmFjdGl2ZUFsZXJ0c1thXSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9cGFnZVVwKCl7dGhpcy5tdWx0aUFsZXJ0''@;'; put 'put ''U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnByZXZpb3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhPKSxHZShpcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''YWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiYWxlcnRzLXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0OltObi5Ob25lLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXSxjdXJyZW50QWxlcnRJbmRleDpb''@;'; put 'put ''Tm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRleCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6''@;'; put 'put ''OSx2YXJzOjYsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwiYWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0''@;'; put 'put ''cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGQucGFnZURvd24oKX0pLEd0KDMsImNkcy1pY29uIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxPZSg1KSxoZSgpLGRlKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUo''@;'; put 'put ''KSgpKCkpLDImYSYmKGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxlcnRBcmlhTGFiZWwpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91cyksZmUoMiksenUoIiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50KzEsIiAvICIsZC5tdWx0aUFs''@;'; put 'put ''ZXJ0U2VydmljZS5jb3VudCwiIiksZmUoMiksaHIoImFyaWEtbGFiZWwiLGQubmV4dEFsZXJ0QXJpYUxhYmVsKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dCkpfSxkZXBlbmRlbmNpZXM6W3JzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSwkZGU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWEsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBLcighMSksdGhpcy5zdWJzY3JpcHRpb25zPVtdfXNldCBhbGxBbGVydHMoYSl7dGhpcy5t''@;'; put 'put ''dWx0aUFsZXJ0U2VydmljZS5tYW5hZ2UoYSl9c2V0IF9pbnB1dEN1cnJlbnRJbmRleChhKXtOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWEpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2''@;'; put 'put ''aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0''@;'; put 'put ''aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+ITE9PT1hLmhpZGRlbil9Z2V0IGN1cnJlbnRBbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ/dGhpcy5tdWx0''@;'; put 'put ''aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQuYWxlcnRUeXBlOiIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UubmV4dChh''@;'; put 'put ''KSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5uZXh0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5kZXN0cm95KCl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGhPKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydHMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxYeCw0KSwyJmEpe2xl''@;'; put 'put ''dCBmO0NpKGY9U2koKSkmJihkLmFsbEFsZXJ0cz1mKX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImFsZXJ0cyIsITApKCJhbGVydC1kYW5nZXIiLCJkYW5nZXIiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1pbmZvIiwiaW5mbyI9PWQuY3Vy''@;'; put 'put ''cmVudEFsZXJ0VHlwZSkoImFsZXJ0LXN1Y2Nlc3MiLCJzdWNjZXNzIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtd2FybmluZyIsIndhcm5pbmciPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1uZXV0cmFsIiwibmV1dHJhbCI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7''@;'; put 'put ''X2lucHV0Q3VycmVudEluZGV4OltObi5Ob25lLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsIl9pbnB1dEN1cnJlbnRJbmRleCJdLGN1cnJlbnRBbGVydDpbTm4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3Vy''@;'; put 'put ''cmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxmZWF0dXJlczpbZGEoW2hPXSldLG5nQ29udGVudFNlbGVjdG9yczpuemUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbMSwiYWxlcnRzLXdyYXBwZXIiXSxbMywiY2xy''@;'; put 'put ''Q3VycmVudEFsZXJ0SW5kZXgiLDQsIm5nSWYiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh0emUpLGRlKDAsImRpdiIsMCksbXQoMSxyemUsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwxKSxZcigyKSxoZSgpKSwyJmEmJihmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PjEpKX0sZGVwZW5kZW5jaWVzOltiYSxHZGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGN9KSgpLEtkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoc1ksWU9l''@;'; put 'put ''LEdPZSwkT2UsbFksS09lLG14KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsTlksanldfSksY30pKCkscFdlPSgoKT0+e2NsYXNzIGN7fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0tkZV19KSxjfSkoKSxxZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hfXN0b3BTY3Jv''@;'; put 'put ''bGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoIm5vLXNjcm9sbGluZyIpfXJlc3VtZVNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJuby1zY3JvbGxpbmciKSYmdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVt''@;'; put 'put ''b3ZlKCJuby1zY3JvbGxpbmciKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxYZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3Ro''@;'; put 'put ''aXMuZmFkZU1vdmU9ImZhZGVEb3duIix0aGlzLmJhY2tkcm9wPSEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxvdT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlPWgsdGhpcy5jb25maWd1cmF0aW9uPWYsdGhpcy5tb2RhbElkPVN1KCksdGhpcy5fb3Blbj0hMSx0aGlzLl9v''@;'; put 'put ''cGVuQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnNpemU9Im1kIix0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0hMSx0aGlzLnN0b3BD''@;'; put 'put ''bG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBLcighMSksdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlPSExfWdldCBmYWRlTW92ZSgpe3JldHVybiB0aGlzLnNraXBBbmltYXRpb24/IiI6dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlfXNldCBmYWRlTW92ZShhKXt0aGlzLmNvbmZpZ3VyYXRp''@;'; put 'put ''b24uZmFkZU1vdmU9YX1nZXQgYmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmJhY2tkcm9wfW5nT25DaGFuZ2VzKGEpeyF0aGlzLmJ5cGFzc1Njcm9sbFNlcnZpY2UmJmEmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCJfb3BlbiIpJiYoYS5fb3Bl''@;'; put 'put ''bi5jdXJyZW50VmFsdWU/KHRoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Ny''@;'; put 'put ''b2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSl9YmFja2Ryb3BDbGljaygpe3RoaXMuc3RhdGlj''@;'; put 'put ''QmFja2Ryb3A/dGhpcy50aXRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dGhpcy5jbG9zZSgpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9vcGVuPSExKX1mYWRlRG9uZShhKXsidm9pZCI9''@;'; put 'put ''PT1hLnRvU3RhdGUmJih0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKSl9c2Nyb2xsVG9wKCl7dGhpcy5ib2R5RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKDAsMCl9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHFkZSksR2UoaXMpLEdlKEFkZSksR2UoWGRlKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGl6ZSw1KSwy''@;'; put 'put ''JmEpe2xldCBmO0NpKGY9U2koKSkmJihkLm1vZGFsQ29udGVudFRlbXBsYXRlPWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoQzFlLDUpLHFhKFMxZSw1KSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50aXRsZT1oLmZpcnN0KSxDaShoPVNpKCkpJiYo''@;'; put 'put ''ZC5ib2R5RWxlbWVudFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46W05uLk5vbmUsImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6W05uLk5vbmUsImNsck1vZGFs''@;'; put 'put ''Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOltObi5Ob25lLCJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOltObi5Ob25lLCJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6W05uLk5v''@;'; put 'put ''bmUsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246W05uLk5vbmUsImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxzdG9wQ2xvc2U6W05uLk5vbmUsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0s''@;'; put 'put ''bGFiZWxsZWRCeTpbTm4uTm9uZSwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il0sYnlwYXNzU2Nyb2xsU2VydmljZTpbTm4uTm9uZSwiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoi''@;'; put 'put ''Y2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOltkYShbXSxbcWRlXSksd2xdLG5nQ29udGVudFNlbGVjdG9yczpvemUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInRpdGxlIiwiIl0sWyJib2R5IiwiIl0sWyJjbGFzcyIsIm1v''@;'; put 'put ''ZGFsIiwzLCJtb2RhbC1mdWxsLXNjcmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLCJhcmlhLW1vZGFsIiwi''@;'; put 'put ''dHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwzLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdLFsxLCJjbHItc3Itb25seSJdLFsiY2xhc3MiLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsxLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiXSxbMSwibW9kYWwtY29u''@;'; put 'put ''dGVudCJdLFsxLCJtb2RhbC1oZWFkZXItLWFjY2Vzc2libGUiXSxbImNka0ZvY3VzSW5pdGlhbCIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''bW9kYWwtYm9keS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm''@;'; put 'put ''KHNhKGF6ZSksbXQoMCxjemUsNywxNiwiZGl2IiwyKSgxLHV6ZSwxLDEsImRpdiIsMykpLDImYSYmKHhlKCJuZ0lmIixkLl9vcGVuKSxmZSgpLHhlKCJuZ0lmIixkLmJhY2tkcm9wKSl9LGRlcGVuZGVuY2llczpbYmEsWnkscnNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3lo''@;'; put 'put ''KCJmYWRlTW92ZSIsW2l1KCIqID0+IGZhZGVEb3duIixbdXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIpXSksaXUoImZhZGVEb3duID0+ICoiLFtNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6MCx0cmFu''@;'; put 'put ''c2Zvcm06InRyYW5zbGF0ZSgwLCAtMjUlKSJ9KSldKSxpdSgiKiA9PiBmYWRlTGVmdCIsW3VzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIpXSksaXUoImZhZGVMZWZ0ID0+ICoiLFtNMCgiMC4ycyBlYXNlLWluLW91dCIs''@;'; put 'put ''dXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUsIDApIn0pKV0pXSkseWgoImZhZGUiLFtpdSgidm9pZCA9PiAqIixbdXMoe29wYWNpdHk6MH0pLE0wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0eTouODV9KSldKSxpdSgiKiA9PiB2b2lkIixbTTAoIjAuMnMgZWFz''@;'; put 'put ''ZS1pbi1vdXQiLHVzKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxLdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5ob3N0PWQsdGhpcy50YWJpbmRleD0iMCIsdGhpcy51bmxpc3RlbmVycz1bXSxoLnJ1bk91dHNpZGVBbmd1bGFyKCgp''@;'; put 'put ''PT57dGhpcy5vYnNlcnZlcj1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PnRoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpKSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZC5uYXRpdmVFbGVtZW50KSx0aGlzLnVubGlzdGVuZXJzLnB1c2goYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwo''@;'; put 'put ''KT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksYS5saXN0ZW4oZC5uYXRpdmVFbGVtZW50LCJtb3VzZWRvd24iLCgpPT57dGhpcy5yZW1vdmVUYWJJbmRleCgpfSkpfSl9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMudW5saXN0ZW5lcnMubGVuZ3RoOyl0aGlzLnVubGlzdGVuZXJzLnBv''@;'; put 'put ''cCgpKCk7dGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5vYnNlcnZlcj1udWxsfWFkZFRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iix0aGlzLnRhYmluZGV4KX1yZW1vdmVUYWJJbmRleCgpe3RoaXMu''@;'; put 'put ''cmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpfWFkZE9yUmVtb3ZlVGFiSW5kZXgoKXtjb25zdCBhPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7YSYmYS5jbGllbnRIZWlnaHQ8YS5zY3JvbGxIZWlnaHQ/dGhp''@;'; put 'put ''cy5hZGRUYWJJbmRleCgpOnRoaXMucmVtb3ZlVGFiSW5kZXgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRW8pLEdlKEppKSxHZShXYSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsIm1vZGFsLWJvZHkiXV19''@;'; put 'put ''KSxjfSkoKSxmTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMobXgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxLTCxBcyxB''@;'; put 'put ''c119KSxjfSkoKSxnV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsS0wsQXMsZk8sZk8sQXNdfSksY30pKCksbVdlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLGJXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMo''@;'; put 'put ''cU9lLFhPZSxzWSxsWSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLGp5LEFzLGp5XX0pLGN9KSgpLFNXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7VHMuYWRkSWNvbnMoc1ksbFkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxmTyxLZGVdfSksY30pKCksejA9KCgpPT57Y2xhc3MgY3t9cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbcFdlLGhXZSxBcyxmTyxQWSxPMixCTCxsVWUsQ2RlLGlaZSxUVWUsU1dlLGdXZSxLemUsanksbVdlLE54LGJXZV19KSxj''@;'; put 'put ''fSkoKSxNV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFz''@;'; put 'put ''czpudWxsfX1uZ09uSW5pdCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQg''@;'; put 'put ''aD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgp''@;'; put 'put ''e3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2Vy''@;'; put 'put ''bmFtZSBvciBwYXNzd29yZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZShTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIs''@;'; put 'put ''InNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2dpbi1sb2dvIl0sWzEsImxvZ2luIiwz''@;'; put 'put ''LCJuZ1N1Ym1pdCJdLFsxLCJ0aXRsZSJdLFsxLCJ3ZWxjb21lIl0sWzEsImhpbnQiXSxbMSwibG9naW4tZ3JvdXAiXSxbImNscklucHV0IiwiIiwibmFtZSIsInVzZXIiLCJ0eXBlIiwidGV4dCIsInBsYWNlaG9sZGVyIiwiVXNlcm5hbWUiLDEsInVzZXJuYW1lIiwzLCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IiwibmdNb2RlbCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwicGFzcyIsInR5cGUiLCJwYXNzd29yZCIsInBsYWNlaG9sZGVyIiwiUGFzc3dvcmQiLDEsInBhc3N3b3JkIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlw''@;'; put 'put ''ZSIsImNsckFsZXJ0Q2xvc2VkIl0sWyJjbHItYWxlcnQtaXRlbSIsIiIsMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXV0s''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksR3QoMiwiaW1nIiwyKSxkZSgzLCJmb3JtIiwzKSxIdCgibmdTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguc3VibWl0KCl9KSxkZSg0LCJsYWJlbCIsNCkoNSwiaDMiLDUpLE9lKDYsIldlbGNv''@;'; put 'put ''bWUgdG8iKSxoZSgpLE9lKDcsIiBEYXRhIENvbnRyb2xsZXIgIiksZGUoOCwiaDQiLDYpLE9lKDksIkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiKSxoZSgpKCksZGUoMTAsImRpdiIsNykoMTEsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1p''@;'; put 'put ''KGguZGF0YS51c2VyLHYpfHwoaC5kYXRhLnVzZXI9diksdn0pLGhlKCksZGUoMTIsImlucHV0Iiw5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGF0YS5wYXNzLHYpfHwoaC5kYXRhLnBhc3M9diksdn0pLGhlKCksZGUoMTMsImNsci1hbGVydCIsMTApLGdp''@;'; put 'put ''KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguYWxlcnRDbG9zZWQsdil8fChoLmFsZXJ0Q2xvc2VkPXYpLHZ9KSxkZSgxNCwiZGl2IiwxMSkoMTUsInNwYW4iLDEyKSxPZSgxNiksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMTMpLE9lKDE4LCIgTG9nIGlu''@;'; put 'put ''ICIpLGhlKCkoKSgpKCksR3QoMTksImRpdiIsMTQpLGhlKCkpLDImZCYmKFRyKCJhY3RpdmUiLGguaXNBY3RpdmUpLGZlKDExKSxwaSgibmdNb2RlbCIsaC5kYXRhLnVzZXIpLGZlKCkscGkoIm5nTW9kZWwiLGguZGF0YS5wYXNzKSxmZSgpLHhlKCJjbHJBbGVydFR5cGUiLCJhbGVydC1kYW5n''@;'; put 'put ''ZXIiKSxwaSgiY2xyQWxlcnRDbG9zZWQiLGguYWxlcnRDbG9zZWQpLGZlKDMpLENyKGguZXJyb3JNc2cpLGZlKCkseGUoImNsckxvYWRpbmciLGgubG9hZGluZykoImRpc2FibGVkIixoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltzNyxxbCxubCxhNyxHcyx5cCxYeCxKeCxqMCxQMixkcyxa''@;'; put 'put ''MV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB4V2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMCksT2UoMSwibG9hZGluZyIpLGhlKCkpfWZ1bmN0aW9uIEVXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDExKSxPZSgxLCJsb2FkZWQiKSxoZSgpKX1mdW5jdGlv''@;'; put 'put ''biBUV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMiksT2UoMSwiZmFpbGVkIiksaGUoKSl9ZnVuY3Rpb24gQVdlKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpKDEsImNvZGUiKSxPZSgyKSxoZSgpLE9lKDMsIiBceGEwICIpLG10KDQseFdlLDIsMCwic3BhbiIsNykoNSxFV2UsMiwwLCJzcGFu''@;'; put 'put ''Iiw4KSg2LFRXZSwyLDAsInNwYW4iLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxDcihhLnByb2dyYW0pLGZlKDIpLHhlKCJuZ0lmIixhLnJ1bm5pbmcpLGZlKCkseGUoIm5nSWYiLCFhLnJ1bm5pbmcmJmEuc3VjY2Vzc2Z1bCksZmUoKSx4ZSgibmdJZiIsIWEucnVu''@;'; put 'put ''bmluZyYmIWEuc3VjY2Vzc2Z1bCl9fWZ1bmN0aW9uIGtXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zaWducG9zdC1jb250ZW50Iiw1KSxtdCgxLEFXZSw3LDQsInAiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO3hlKCJjbHJQb3NpdGlvbiIsImJvdHRvbS1taWRkbGUiKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IERXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgcXR9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGlu''@;'; put 'put ''Zy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2UiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJp''@;'; put 'put ''Z2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4iXSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3Vj''@;'; put 'put ''Y2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxHdCgyLCJzcGFuIiwxKSgzLCJjbHIt''@;'; put 'put ''aWNvbiIsMikoNCwiY2xyLWljb24iLDMpLG10KDUsa1dlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLGhlKCkoKSksMiZkJiYoZmUoMiksX2QoImRpc3BsYXkiLGgubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLGZlKCksX2QoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVx''@;'; put 'put ''dWVzdHMubGVuZ3RoPjAmJmgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpLGZlKCksX2QoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJiFoLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbbnMsYmEsSGwsTDIsV0wscTFlLFpMXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIElXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNkcy1pY29uIiwxMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChMZSgpLnRvZ2dsZURhcmtNb2RlKCEwKSl9KSxoZSgpfX1mdW5jdGlvbiBSV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjZHMtaWNvbiIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50b2dnbGVEYXJrTW9kZSghMSkpfSksaGUoKX19''@;'; put 'put ''ZnVuY3Rpb24gTFdlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImltZyIsMTQpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksZk0oInNyYyIsYS5nZXRQaWN0dXJlVXJsKCksWkMpfX1mdW5jdGlvbiBPV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNSksT2UoMSks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPUxlKCk7VHIoImhpZGRlbiIsMD09PWEuZmFpbGVkUmVxcy5sZW5ndGgpLGZlKCksQ3IoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIFBXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtU''@;'; put 'put ''cigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSxmZSgpLENyKGEuZGVidWdMb2dzLmxlbmd0aCl9fWZ1bmN0aW9uIEZXZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDE3KX1mdW5jdGlvbiBIV2UoYyxsKXsxJmMmJihjaSgwKSxkZSgxLCJhIiwyOCkoMiwic3BhbiIsMjkpLE9l''@;'; put 'put ''KDMsIkRvY3VtZW50YXRpb24iKSxoZSgpKCksdWkoKSl9ZnVuY3Rpb24gTldlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDE4KSgxLCJkaXYiLDE5LDApKDMsImNsci10b2dnbGUtY29udGFpbmVyIiwyMCksSHQoImNsaWNrIixmdW5jdGlvbiho''@;'; put 'put ''KXt3dChhKTtjb25zdCBmPWhhKDIpO3JldHVybiBDdChMZSgpLm9uRGVidWdSb3dDbGljayhoLGYpKX0pLGRlKDQsImNsci10b2dnbGUtd3JhcHBlciIpKDUsImlucHV0IiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5z''@;'; put 'put ''YXNqc0NvbmZpZy5kZWJ1ZyxoKXx8KGYuc2FzanNDb25maWcuZGVidWc9aCksQ3QoaCl9KSxIdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkRlYnVnTW9kZUNoYW5nZSgpKX0pLGhlKCksZGUoNiwibGFiZWwiKSxPZSg3LCJEZWJ1ZyBNb2RlIiks''@;'; put 'put ''aGUoKSgpKCkoKSxkZSg4LCJhIiwyMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksZGUoOSwic3BhbiIpLE9lKDEwLCJTQVMgUmVxdWVzdHMiKSxoZSgpKCksbXQoMTEsSFdlLDQsMCwibmctY29udGFpbmVyIiw3KSxH''@;'; put 'put ''dCgxMiwiZGl2IiwyMyksZGUoMTMsImEiLDI0KSgxNCwic3BhbiIpLE9lKDE1LCJTeXN0ZW0iKSxoZSgpKCksZGUoMTYsImEiLDI1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLmxvZ291dChoKSl9KSxkZSgxNywic3BhbiIpLE9lKDE4LCJMb2cgT3V0Iiks''@;'; put 'put ''aGUoKSxHdCgxOSwiY2xyLWljb24iLDI2KSxoZSgpLGRlKDIwLCJkaXYiLDI3KSgyMSwic3BhbiIpLE9lKDIyKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg1KSxwaSgibmdNb2RlbCIsYS5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoNikseGUoIm5nSWYiLCFhLmlzRGVwbG95UGFn''@;'; put 'put ''ZSksZmUoMTEpLElyKCJ2IixhLmNvbW1pdFZlciwiIil9fWxldCBWV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnVzZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMudXNlck5hbWU9Ik5v''@;'; put 'put ''dCBsb2dnZWQgaW4iLHRoaXMucmVxU3ViPW5ldyBxdCx0aGlzLnVzZXJTdWI9bmV3IHF0LHRoaXMuYXBwTG9ncz1bXSx0aGlzLmRlYnVnTG9ncz1bXSx0aGlzLmZhaWxlZFJlcXM9W10sdGhpcy5zYXNFcnJvcnM9W10sdGhpcy5pc1ZpeWE9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FT''@;'; put 'put ''anNDb25maWcsdGhpcy5yZXF1ZXN0c0NvdW50PTAsdGhpcy5jb21taXRWZXI9IiIsdGhpcy5kYXJrTW9kZT10aGlzLmV2ZW50U2VydmljZS5kYXJrTW9kZX1uZ09uSW5pdCgpe3RoaXMudXNlclN1Yj10aGlzLnVzZXJTZXJ2aWNlLnVzZXJDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVzZXJO''@;'; put 'put ''YW1lPWEudXNlcm5hbWV9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKSx0aGlzLmNvbW1pdFZlcj0idjYuMTQuOCIucmVwbGFjZSgidiIsIiIp''@;'; put 'put ''KyIuZ2VjMTFhNzQifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShhKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxLbi51''@;'; put 'put ''c2VyRHJvcGRvd25Db25maWcuY2xvc2VPbkRlYnVnQ2xpY2smJnNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVV''@;'; put 'put ''cmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoX1cpLEdlKHRsKSxHZSh2YyksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItYWN0aW9ucyJdXSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRy''@;'; put 'put ''b3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFs''@;'; put 'put ''c2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVtZS10b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3Itd2hpdGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJi''@;'; put 'put ''YWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29s''@;'; put 'put ''aWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNpemUiLCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywi''@;'; put 'put ''Y2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsi''@;'; put 'put ''Y2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJjbGljayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJv''@;'; put 'put ''cGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5rIiwiL3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0Iiwx''@;'; put 'put ''LCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUo''@;'; put 'put ''MCwiZGl2IiwxKSgxLCJkaXYiLDIpLG10KDIsSVdlLDEsMCwiY2RzLWljb24iLDMpKDMsUldlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksR3QoNCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxPZSg4KSxoZSgp''@;'; put 'put ''LG10KDksTFdlLDIsMSwic3BhbiIsNykoMTAsT1dlLDIsMywic3BhbiIsOCkoMTEsUFdlLDIsMywic3BhbiIsOSkoMTIsRldlLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLG10KDEzLE5XZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMikseGUoIm5nSWYi''@;'; put 'put ''LCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLHhlKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUpLENyKGgudXNlck5hbWUpLGZlKCkseGUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNWaXlhKSxmZSgpLHhlKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1''@;'; put 'put ''ZyksZmUoKSx4ZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSx4ZSgibmdJZiIsIWguaXNWaXlhKSl9LGRlcGVuZGVuY2llczpbYmEsTWQsbmwsR3MsYzEsSGwscnMsTDIsZHMsSWQsQnksU2gsbDUscDcsZzcsVnksRFdlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''LGRoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hbGVydHM9bmV3IFdufXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0''@;'; put 'put ''dXJuIGN9KSgpO2Z1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1hbGVydCIsMiksZ2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5jbG9zZWQsaCl8fChmLmNsb3NlZD1o''@;'; put 'put ''KSxDdChoKX0pLEh0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25BbGVydENsb3NlKCkpfSksZGUoMSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxPZSgzKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoImNsckFs''@;'; put 'put ''ZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLHBpKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLGZlKDMpLElyKCIgIixhLm1lc3NhZ2UsIiAiKX19ZnVuY3Rpb24galdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFsZXJ0cyIpLG10KDEsQldlLDQsNCwiY2xyLWFs''@;'; put 'put ''ZXJ0IiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0Zvck9mIixhLmFsZXJ0cyl9fWxldCB6V2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9hbGVydHNTZXJ2aWNlPWEsdGhpcy5hbGVydHM9W10sdGhpcy5oYXNPcGVuQWxlcnQ9ITEsdGhpcy5hbGVy''@;'; put 'put ''dHNTdWI9bmV3IHF0fW5nT25Jbml0KCl7dGhpcy5hbGVydHNTdWI9dGhpcy5fYWxlcnRzU2VydmljZS5hbGVydHMuc3Vic2NyaWJlKGE9Pnt0aGlzLmFsZXJ0cy5wdXNoKGEpLHRoaXMuaGFzT3BlbkFsZXJ0PSEwLGEuZXJyJiZjb25zb2xlLmVycm9yKGEuZXJyKX0pfW9uQWxlcnRDbG9zZSgp''@;'; put 'put ''e3RoaXMuaGFzT3BlbkFsZXJ0PXRoaXMuYWxlcnRzLnNvbWUoYT0+IWEuY2xvc2VkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVy''@;'; put 'put ''dHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwi''@;'; put 'put ''Y2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmbXQoMCxqV2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmQmJnhlKCJuZ0lmIixoLmhhc09w''@;'; put 'put ''ZW5BbGVydCl9LGRlcGVuZGVuY2llczpbbnMsYmEsWHgsJGRlLEp4XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHBPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9IiJ9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJv''@;'; put 'put ''bGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhIiwwKSxPZSgxLCJzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksaGUoKSksMiZkJiYoVHIoInVuc2V0IiwiIiE9PWguY2xhc3NlcykseGUoIm5nQ2xhc3Mi''@;'; put 'put ''LGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W3d1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGhoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IFduLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgV259b3BlbihhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5hfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBXbix0aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxlKCl9Y2xvc2UoYSl7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0Q2hhbmdl''@;'; put 'put ''JC5uZXh0KHtwYXNzd29yZDphfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRl''@;'; put 'put ''ZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVVdlKGMsbCl7MSZjJiYoZGUoMCwicCIsMTMpLE9lKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWZ1bmN0aW9uIFpXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIs''@;'; put 'put ''MikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksT2UoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCksZGUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxPZSg2LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxkZSg3LCJpbnB1dCIsNywwKSxnaSgibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnBhc3N3b3JkSW5wdXQsaCl8fChmLnBhc3N3b3JkSW5wdXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoOSwiZGl2Iiw4KSgxMCwiZGl2IiksbXQoMTEsVVdlLDIsMCwicCIsOSksaGUoKSxkZSgxMiwiZGl2IiwxMCkoMTMs''@;'; put 'put ''ImJ1dHRvbiIsMTEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbG9zZSgpKX0pLE9lKDE0LCIgQ2FuY2VsICIpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWhhKDgpO3JldHVybiBDdChMZSgp''@;'; put 'put ''LmNsb3NlKGgudmFsdWUpKX0pLE9lKDE2LCIgVW5sb2NrICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ0lmLGQ9aGEoOCksaD1MZSgpO2ZlKCkseGUoImNsck1vZGFsT3BlbiIsYS5vcGVuKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZl''@;'; put 'put ''KDYpLHBpKCJuZ01vZGVsIixoLnBhc3N3b3JkSW5wdXQpLGZlKDQpLHhlKCJuZ0lmIixhLmVycm9yKSxmZSg0KSx4ZSgiZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpfX1sZXQgV1dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFzc3dvcmRJbnB1dD0iIn1jbG9zZShhKXt0aGlzLnBhc3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3JkTW9kYWxT''@;'; put 'put ''ZXJ2aWNlLmNsb3NlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGhoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLGRlY2xzOjIsdmFyczoz''@;'; put 'put ''LGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJuZ0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10''@;'; put 'put ''aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIs''@;'; put 'put ''ImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbMSwiYnV0''@;'; put 'put ''dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKG10KDAsWldlLDE3LDYsImRpdiIsMSksUXMoMSwiYXN5bmMiKSksMiZkJiZ4ZSgibmdJZiIsRGMoMSwxLGgub3B0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltiYSxxbCxubCxHcyxvdSxLdSxFTV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKSxlRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBLcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgS3J9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlz''@;'; put 'put ''LmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2Eu''@;'; put 'put ''cHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRh''@;'; put 'put ''VHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZl''@;'; put 'put ''IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbmRyb3Aodil9KSwyJmQmJlRyKCJmaWxlb3ZlciIsaC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJm''@;'; put 'put ''aWxlRHJhZ2dlZE92ZXIifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZmhlPSgpPT5bXTtmdW5jdGlvbiBZV2UoYyxsKXsxJmMmJihkZSgwLCJwIiw2KSxPZSgxLCJObyByZXF1ZXN0cyBtYWRlIiksaGUoKSl9ZnVuY3Rpb24gR1dlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1p''@;'; put 'put ''Y29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gJFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxNCksaGUoKSl9ZnVuY3Rpb24gS1dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPUxlKDMpLmluZGV4O3JldHVybiBDdChMZSgyKS5nb1RvTG9nTGluZShoLCJyZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJidXR0b24iLDIzKSxPZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixh''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIHFXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxHdCgxLCJjbHItaWNvbiIsMjApLE9lKDIpLG10KDMsS1dlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoMiksSXIoIiBF''@;'; put 'put ''cnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCkseGUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHxZcygyLGZoZSkpfX1mdW5jdGlvbiBYV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMiksSHQoImNsaWNrIixmdW5jdGlvbigpe2Nv''@;'; put 'put ''bnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9TGUoMykuaW5kZXg7cmV0dXJuIEN0KExlKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwiYnV0dG9uIiwyMyksT2UoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxJcigiICIs''@;'; put 'put ''YSwiICIpfX1mdW5jdGlvbiBKV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwiY2xyLWljb24iLDI0KSxPZSgyKSxtdCgzLFhXZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKDIpLElyKCIg''@;'; put 'put ''V2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSx4ZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5nc3x8WXMoMixmaGUpKX19ZnVuY3Rpb24gUVdlKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI1KSwyJmMmJnhlKCJpbm5lckhUTUwiLExlKDIpLiRpbXBsaWNpdC5sb2dGaWxl''@;'; put 'put ''LFY0KX1mdW5jdGlvbiBlWWUoYyxsKXsxJmMmJkd0KDAsImRpdiIsMjYpLDImYyYmeGUoInRleHRDb250ZW50IixMZSgyKS4kaW1wbGljaXQubG9nRmlsZSl9ZnVuY3Rpb24gdFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNyksSHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5kb3dubG9hZExvZyhoLmxvZ0ZpbGUpKX0pLE9lKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBuWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIp''@;'; put 'put ''LG10KDIscVdlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsSldlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCksbXQoNCxRV2UsMSwxLCJkaXYiLDE2KSg1LGVZZSwxLDEsImRpdiIsMTcpKDYsdFllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxp''@;'; put 'put ''Y2l0LGQ9TGUoMik7ZmUoMikseGUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLHhlKCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxmZSgpLHhlKCJuZ0lmIiwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUpLGZlKCkseGUoIm5nSWYiLCJTQVNWSVlBIj09PWQuc2VydmVyVHlwZSksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmlsZS5sZW5ndGgpPjApfX1mdW5jdGlvbiByWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0''@;'; put 'put ''KExlKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJjZUNvZGUpKX0pLE9lKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBpWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxPZSgyKSxoZSgpLG10KDMsclllLDIsMCwiYnV0dG9uIiwx''@;'; put 'put ''OCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLENyKGEuc291cmNlQ29kZSksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLE9lKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBvWWUo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI4KSxPZSgyKSxoZSgpLG10KDMsYVllLDIsMCwiYnV0dG9uIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHNZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1''@;'; put 'put ''cm4gQ3QoTGUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9aC5rZXkpfSksT2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoInNlbGVjdGVkIixMZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxmZSgpLElyKCIgIixhLmtleSwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBsWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLG10KDEsc1llLDIsMywiZGl2IiwzMyksUXMoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCkseGUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUkspKX19ZnVu''@;'; put 'put ''Y3Rpb24gY1llKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMzgpKDEsInN0cm9uZyIpLE9lKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpLiRpbXBsaWNpdDtmZSgyKSxJcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInRoIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIGRZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKS4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoKSxJcigiICIsZFthLmtleV0sIiAiKX19ZnVuY3Rpb24gaFllKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxtdCgxLGRZZSwyLDEsInRkIiw0MCksUXMoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nRm9yT2YiLERjKDIs''@;'; put 'put ''MSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBmWWUoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMzkpKDEsInRoZWFkIikoMiwidHIiKSxtdCgzLHVZZSwyLDEsInRoIiw0MCksUXMoNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJv''@;'; put 'put ''ZHkiKSxtdCg2LGhZZSwzLDMsInRyIiw0MCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMykuJGltcGxpY2l0O2ZlKDMpLHhlKCJuZ0Zvck9mIixEYyg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxmZSgzKSx4ZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Eu''@;'; put 'put ''c2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBwWWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSxtdCgxLGNZZSwzLDEsInAiLDM1KSxkZSgyLCJkaXYiLDM2KSxtdCgzLGZZZSw3LDQsInRhYmxlIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUo''@;'; put 'put ''MikuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksZmUoMikseGUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1bmN0aW9uIGdZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI5KSgyLCJidXR0b24i''@;'; put 'put ''LDMwKSxPZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEd0KDQsImNsci1pY29uIiwzMSksaGUoKSxtdCg1LGxZZSwzLDMsImNsci1kcm9wZG93bi1tZW51IiwzMiksaGUoKSxtdCg2LHBZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3''@;'; put 'put ''dChhKTtjb25zdCBmPUxlKDMpO3JldHVybiBtaShmLnRhYmxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKSxmZSg1KSxwaSgiY2xySWZBY3RpdmUiLGEu''@;'; put 'put ''dGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gbVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXN0YWNrLWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwiKSxPZSgyKSxkZSgzLCJzcGFuIiw5KSxtdCg0LEdXZSwyLDAsInNwYW4iLDUpKDUsJFdlLDIsMCwic3BhbiIsNSks''@;'; put 'put ''aGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50IiksT2UoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEwKSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJjbHItdGFicyIpKDExLCJjbHItdGFiIikoMTIsImJ1dHRvbiIsMTEpLE9lKDEzLCJTQVMgTG9nIiksaGUoKSxtdCgx''@;'; put 'put ''NCxuWWUsNyw1LCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKTtyZXR1cm4gbWkoZi5zYXNMb2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwi''@;'; put 'put ''YnV0dG9uIiwxMSksT2UoMTcsIlNBUyBTb3VyY2UgQ29kZSIpLGhlKCksbXQoMTgsaVllLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIG1pKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8''@;'; put 'put ''KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksT2UoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLGhlKCksbXQoMjIsb1llLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIG1pKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksbXQoMjMsZ1llLDcsMiwiY2xyLXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMik7eGUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIsMSksZmUoMiksSXIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxmZSgyKSx4ZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0''@;'; put 'put ''aCk+MCksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEubG9nRXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxmZSgyKSxDcihhLnBhcnNlZFRpbWVzdGFtcCksZmUoNykscGkoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksZmUoNCkscGkoImNscklmQWN0aXZlIixoLnNhc1Nv''@;'; put 'put ''dXJjZUNvZGVBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgpLHhlKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlvbiB2WWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3RhY2stdmlldyIpLG10KDEsbVllLDI0LDEwLCJjbHItc3Rh''@;'; put 'put ''Y2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBiWWU9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMu''@;'; put 'put ''bW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENo''@;'; put 'put ''YW5nZT1uZXcgS3IsdGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRo''@;'; put 'put ''aXMuc2FzanNSZXF1ZXN0cz1bXSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMu''@;'; put 'put ''Zm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0VGltZXN0YW1wKGEpe3JldHVybiBPbyhhKS5mb3JtYXQoKT9PbyhhKS5mb3JtYXQo''@;'; put 'put ''ImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBPbyhhKS5mb3JtYXQoKT9gICgke09vKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMu''@;'; put 'put ''b3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9j''@;'; put 'put ''KGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtjb25zdCBmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtpZihmKWlmKCJTQVNWSVlB''@;'; put 'put ''Ij09PXRoaXMuc2VydmVyVHlwZSl7Y29uc3QgTT0oZi50ZXh0Q29udGVudHx8IiIpLnNwbGl0KCJcbiIpO2xldCBEPS0xO2ZvcihsZXQgYmU9MDtiZTxNLmxlbmd0aDtiZSsrKWlmKE1bYmVdLmluY2x1ZGVzKGEpKXtEPWJlO2JyZWFrfWlmKC0xPT09RClyZXR1cm47Y29uc3QgWj1kb2N1bWVu''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtaLmNsYXNzTmFtZT0idGVtcC1saW5lLWhlaWdodC1jYWxjIixaLnRleHRDb250ZW50PSJYIixmLmFwcGVuZENoaWxkKFopO2NvbnN0IHJlPVouY2xpZW50SGVpZ2h0O2YucmVtb3ZlQ2hpbGQoWiksZi5zY3JvbGxUb3A9cmUqRDtjb25zdCBjZT1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjZS5jbGFzc05hbWU9ImxpbmUtaGlnaGxpZ2h0LW92ZXJsYXkgIisoImVycm9yIj09PWg/ImVycm9yLWhpZ2hsaWdodCI6Indhcm5pbmctaGlnaGxpZ2h0IiksY2UuY2xhc3NMaXN0LmFkZCgidGVtcC1oZWlnaHQtc2V0dGVyIiksZG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtaGVpZ2h0IixgJHtyZX1weGApLGNlLmNsYXNzTGlzdC5hZGQoImxpbmUtcG9zaXRpb24tc2V0dGVyIiksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCItLWxpbmUtdG9wIixyZSpEKyJw''@;'; put 'put ''eCIpLGYuYXBwZW5kQ2hpbGQoY2UpLHNldFRpbWVvdXQoKCk9PntmLmNvbnRhaW5zKGNlKSYmZi5yZW1vdmVDaGlsZChjZSl9LDNlMyl9ZWxzZXtjb25zdCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2cgZm9udGApO2ZvcihsZXQgTSBvZiBB''@;'; put 'put ''cnJheS5mcm9tKHYpKWlmKE0udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGEpKXtmLnNjcm9sbFRvcD1NLm9mZnNldFRvcC1mLm9mZnNldFRvcCxNLmNsYXNzTGlzdC5hZGQoImhpZ2hsaWdodGVkLWxpbmUiKSxzZXRUaW1lb3V0KCgpPT57TS5jbGFzc0xpc3QucmVtb3ZlKCJoaWdobGlnaHRlZC1s''@;'; put 'put ''aW5lIil9LDNlMyk7YnJlYWt9fX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2Fy''@;'; put 'put ''bmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sdj1hLmxvZ0ZpbGUuc3BsaXQoIlxuIiksTT1bLi4udl07Zm9yKGxldCBEPTA7RDx2Lmxlbmd0aDtEKyspe2lmKC88Lio+RVJST1IvZ20udGVzdCh2W0RdKSl7bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJFIiksdltEXS5sZW5n''@;'; put 'put ''dGgtMSk7aC5wdXNoKFopfWVsc2UvXkVSUk9SL2dtLnRlc3QodltEXSkmJihoLnB1c2godltEXSksIlNBU1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlJiYodltEXT0nPGZvbnQgY2xhc3M9ImVycm9yLWxpbmUiPicrdltEXSsiPC9mb250PiIpKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdCh2W0RdKSl7''@;'; put 'put ''bGV0IFo9dltEXS5zdWJzdHJpbmcodltEXS5pbmRleE9mKCJXIiksdltEXS5sZW5ndGgtMSk7Zi5wdXNoKFopfWVsc2UvXldBUk5JTkcvZ20udGVzdCh2W0RdKSYmKGYucHVzaCh2W0RdKSwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUmJih2W0RdPSc8Zm9udCBjbGFzcz0id2FybmluZy1saW5l''@;'; put 'put ''Ij4nK3ZbRF0rIjwvZm9udD4iKSl9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhmKSwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUmJihhLm9yaWdpbmFsTG9nRmlsZT1NLmpvaW4oIlxuIiksYS5sb2dGaWxlTGluZU1hcD17fSxoLmZvckVhY2goRD0+e2ZvcihsZXQgWj0wO1o8TS5sZW5ndGg7WisrKWlm''@;'; put 'put ''KE1bWl0uaW5jbHVkZXMoRCkpe2EubG9nRmlsZUxpbmVNYXAuZXJyb3JzfHwoYS5sb2dGaWxlTGluZU1hcC5lcnJvcnM9e30pLGEubG9nRmlsZUxpbmVNYXAuZXJyb3JzW0RdPVo7YnJlYWt9fSksZi5mb3JFYWNoKEQ9Pntmb3IobGV0IFo9MDtaPE0ubGVuZ3RoO1orKylpZihNW1pdLmluY2x1''@;'; put 'put ''ZGVzKEQpKXthLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzfHwoYS5sb2dGaWxlTGluZU1hcC53YXJuaW5ncz17fSksYS5sb2dGaWxlTGluZU1hcC53YXJuaW5nc1tEXT1aO2JyZWFrfX0pKSxhLmxvZ0ZpbGU9di5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1k''@;'; put 'put ''b3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2FkU291cmNlQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2Vydmlj''@;'; put 'put ''ZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZShTZCksR2UoR3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7''@;'; put 'put ''b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5s''@;'; put 'put ''aW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2''@;'; put 'put ''ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5nZSIsImNscklmQWN0aXZlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRy''@;'; put 'put ''aWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2ciLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2cgdml5YSIsMywidGV4dENvbnRlbnQi''@;'; put 'put ''LDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJd''@;'; put 'put ''LFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbMSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLCJ2aXlhIiwzLCJ0ZXh0''@;'; put 'put ''Q29udGVudCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dl''@;'; put 'put ''ciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRv''@;'; put 'put ''d24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksSHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgubW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLE9lKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiksT2UoNCksaGUoKSgp''@;'; put 'put ''LGRlKDUsImRpdiIsMyksbXQoNixZV2UsMiwwLCJwIiw0KSg3LHZZZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgpKCkpLDImZCYmKHhlKCJjbHJNb2RhbE9wZW4iLGgub3BlbmVkKSxmZSg0KSxJcigiQXBwIExvY2F0aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9jLCIiKSxmZSgyKSx4''@;'; put 'put ''ZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCkseGUoIm5nSWYiLGgub3BlbmVkJiYobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJh''@;'; put 'put ''LENHLFZkZSx3RyxOZGUsRWgsUGQscDUsSGwsb3UsS3UsSHksTDIsX20sQ20sTTcsd20seW0sQzcsbDUscDcsZzcsVnksX1JdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgeVlle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIi''@;'; put 'put ''LHRoaXMuZGV0YWlscz1uZXcgcGhlfX1jbGFzcyBwaGV7fWZ1bmN0aW9uIF9ZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDgpLE9lKDEsIiBTQVMgU2VydmljZTogIiksZGUoMiwic3Ryb25nIiksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxDcihhLmRhdGEuc2FzU2Vy''@;'; put 'put ''dmljZSl9fWZ1bmN0aW9uIHdZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLE9lKDMsIlNZU1dBUk5JTkdURVhUOiIpLGhlKCksT2UoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25nIiksT2UoNywiU1lTRVJST1JURVhUOiIpLGhlKCksT2UoOCksaGUo''@;'; put 'put ''KSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLE9lKDExLCJNQUM6IiksaGUoKSxPZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSxJcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZlKDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQs''@;'; put 'put ''IiIpLGZlKDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBDWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLE9l''@;'; put 'put ''KDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxPZSgxLCIgT3Bl''@;'; put 'put ''biByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBNWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZG93bmxvYWRMb2coKSl9KSxPZSgxLCIgRG93bmxvYWQgbG9nICIp''@;'; put 'put ''LGhlKCl9fWZ1bmN0aW9uIHhZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxPZSgxLCIgQ2xvc2UgIiksaGUoKX19ZnVuY3Rpb24gRVllKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnJlbG9hZCgpKX0pLE9lKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IFRZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3Ro''@;'; put 'put ''aXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEtyLHRoaXMuZGF0YT1uZXcgeVllLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhp''@;'; put 'put ''cy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgcGhlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRv''@;'; put 'put ''ckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9''@;'; put 'put ''b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0Rmls''@;'; put 'put ''ZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgp''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEd1KSxHZSh2YyksR2UodGwpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEi''@;'; put 'put ''LGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdl''@;'; put 'put ''IiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNlIG10LTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5''@;'; put 'put ''c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0''@;'; put 'put ''bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgubW9kYWxFbmFibGVkLHYpfHwoaC5tb2RhbEVuYWJsZWQ9diksdn0pLGRlKDEs''@;'; put 'put ''ImgzIiwxKSxPZSgyKSxtdCgzLF9ZZSw0LDEsInAiLDIpLGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLG10KDYsd1llLDEzLDMsImRpdiIsNSksaGUoKSxkZSg3LCJkaXYiLDYpLG10KDgsQ1llLDIsMCwiYnV0dG9uIiw3KSg5LFNZZSwyLDAsImJ1dHRvbiIsNykoMTAsTVllLDIs''@;'; put 'put ''MCwiYnV0dG9uIiw3KSgxMSx4WWUsMiwwLCJidXR0b24iLDcpKDEyLEVZZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwyJmQmJihwaSgiY2xyTW9kYWxPcGVuIixoLm1vZGFsRW5hYmxlZCkseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFoLmZvcmNlUmVsb2Fk''@;'; put 'put ''KSxmZSgyKSxJcigiICIsaC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxmZSgpLHhlKCJuZ0lmIixoLmRhdGEuc2FzU2VydmljZSYmaC5kYXRhLnNhc1NlcnZpY2UubGVuZ3RoPjApLGZlKDIpLHhlKCJpbm5lckhUTUwiLGguZGF0YS5tZXNzYWdlLFY0KSxmZSgpLHhlKCJuZ0lmIixudWxsIT09aC5k''@;'; put 'put ''YXRhLmRldGFpbHMpLGZlKDIpLHhlKCJuZ0lmIixoLnNob3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZpY2UpKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCkseGUoIm5nSWYiLChudWxsPT1oLmRhdGEuZGV0YWlscz9udWxsOmguZGF0YS5kZXRh''@;'; put 'put ''aWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRhLmRldGFpbHMuTE9HLnRyaW0oKS5sZW5ndGgpPjApLGZlKCkseGUoIm5nSWYiLCFoLmZvcmNlUmVsb2FkKSxmZSgpLHhlKCJuZ0lmIixoLmZvcmNlUmVsb2FkKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbYmEsb3UsS3UsZUVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQVllPSgpPT5bIi8iXSxnaGU9KCk9PlsiL3ZpZXciXSxtaGU9KCk9PlsiL2hvbWUiXSxFRz0oKT0+WyIvcmV2aWV3L3N1Ym1pdHRlZCJdLGtZZT0oKT0+WyIvcmV2aWV3L2FwcHJv''@;'; put 'put ''dmUiXSxEWWU9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07ZnVuY3Rpb24gSVllKGMsbCl7MSZjJiYoY2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLE9lKDYsIiBEYXRhIENvbnRyb2xsZXIg''@;'; put 'put ''KEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCksZGUoOCwiYSIsMjMpLE9lKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gUlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCks''@;'; put 'put ''ZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLE9lKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksSHQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLE9lKDgsIk1vcmUgZGV0YWlscyIpLGhlKCksdWkoKX19ZnVuY3Rpb24gTFllKGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''ZGl2IiwxNiksbXQoMSxJWWUsMTAsMCwibmctY29udGFpbmVyIiwxKSgyLFJZZSw5LDAsIm5nLWNvbnRhaW5lciIsMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5s''@;'; put 'put ''aWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIE9ZZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxPZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlvbiBQWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYi''@;'; put 'put ''LDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksT2UoNiksR3QoNywiY29udGFjdC1saW5rIiwyMiksT2UoOCksaGUoKSgpKCksbXQoOSxPWWUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDYpLHp1KCIgVGhpcyBsaWNlbnNlIGtleSB3''@;'; put 'put ''aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5nRGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8iZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3QgIiksZmUoMiksSXIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBz''@;'; put 'put ''aXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSx4ZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBGWWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksT2UoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gSFllKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLE9lKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5''@;'; put 'put ''b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLE9lKDgpLGhlKCkoKSgpLG10KDksRlllLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSg4KSxJcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFs''@;'; put 'put ''IGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLHhlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIE5ZZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsTFllLDMsMiwiZGl2IiwxNCko''@;'; put 'put ''MixQWWUsMTAsNCwiZGl2IiwxNSkoMyxIWWUsMTAsMiwiZGl2IiwxNSksdWkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5mcmVlVGllckJhbm5lciYmKCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEubGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''YS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksZmUoKSx4ZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBWWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KExlKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEsImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gQlllKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjkpLEd0KDEsImltZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDImYyYmeGUoInJvdXRlckxpbmsiLFlzKDEsQVllKSl9ZnVuY3Rpb24g''@;'; put 'put ''alllKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNwYW4iLDMyKSxoZSgpKX1mdW5jdGlvbiB6WWUoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDApKDEsImEiLDQxKSxPZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJhIiw0MSksT2UoNCwiTE9BRCIpLGhlKCksZGUoNSwi''@;'; put 'put ''YSIsNDEpLE9lKDYsIlJFVklFVyIpLGhlKCkoKSksMiZjJiYoZmUoKSx4ZSgicm91dGVyTGluayIsWXMoMyxnaGUpKSxmZSgyKSx4ZSgicm91dGVyTGluayIsWXMoNCxtaGUpKSxmZSgyKSx4ZSgicm91dGVyTGluayIsWXMoNSxFRykpKX1mdW5jdGlvbiBVWWUoYyxsKXtpZigxJmMmJihjaSgw''@;'; put 'put ''KSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24iKSgzLCJidXR0b24iLDM0KSxPZSg0LCIgTWVudSAiKSxoZSgpLG10KDUselllLDcsNiwiY2xyLWRyb3Bkb3duLW1lbnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2IiwzNikoNywiYSIsMzcpLE9lKDgsIlZJRVciKSxoZSgpLGRlKDksImEi''@;'; put 'put ''LDM4KSxPZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEiLDM5KSxPZSgxMiwiUkVWSUVXIiksaGUoKSgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDcpLHhlKCJyb3V0ZXJMaW5rIixZcyg3LGdoZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9y''@;'; put 'put ''Iil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLHhlKCJyb3V0ZXJMaW5rIixZcyg4LG1oZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVy''@;'; put 'put ''bC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSkseGUoInJvdXRlckxpbmsiLFlzKDksRUcpKX19ZnVuY3Rpb24gWlllKGMsbCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0MikoMSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxPZSg0LCJT''@;'; put 'put ''VUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJhIiwzNyksT2UoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJsaSIsNDQpKDksImEiLDM3KSxPZSgxMCwiSElTVE9SWSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLHhlKCJyb3V0ZXJMaW5rIixZcyg1LEVHKSks''@;'; put 'put ''ZmUoMyksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLHhlKCJyb3V0ZXJMaW5rIixZcyg2LGtZZSkpLGZlKDMpLHhlKCJyb3V0ZXJMaW5rIixZcyg3LERZZSkpfX1mdW5jdGlvbiBXWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBZ''@;'; put 'put ''WWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtaW5mby1tb2RhbCIsNDUpLEh0KCJvbkNvbmZpcm1Nb2RhbENsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNsb3NlQWJvcnRNb2RhbChoLmlkKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7eGUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQm''@;'; put 'put ''JjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0aW9uIEtZZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0KDEsImRpdiIsNTApKDIsImRpdiIsNTEpKDMsImRpdiIsNTIpLGhlKCkpfWZ1bmN0aW9uIHFZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIs''@;'; put 'put ''NDcpLG10KDIsS1llLDQsMCwiZGl2Iiw0OCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoIm5nSWYiLG51bGw9PT1hLmFwcEFjdGl2ZSl9fVRzLmFkZEljb25zKFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAz''@;'; put 'put ''IDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDND''@;'; put 'put ''MTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAz''@;'; put 'put ''QzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMgNiAxMi4yNDAzIDYgMTcuOTkwM0M2IDI0LjYxMDMgMTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAzQzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40''@;'; put 'put ''MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAyNC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTguMzMwMyAxMy43MSAxMi4yMDAzQzEzLjcxIDEwLjA3MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgwM1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMy''@;'; put 'put ''LjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUw''@;'; put 'put ''MyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgw''@;'; put 'put ''MyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaIi8+J31dLFsic3VuIix7b3V0bGluZTonPHBhdGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4w''@;'; put 'put ''MyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40''@;'; put 'put ''NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEw''@;'; put 'put ''LjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2''@;'; put 'put ''LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAx''@;'; put 'put ''MC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAz''@;'; put 'put ''MyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYgMTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEg''@;'; put 'put ''MjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUgMTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42''@;'; put 'put ''QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5''@;'; put 'put ''IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMx''@;'; put 'put ''TDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAx''@;'; put 'put ''OSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2''@;'; put 'put ''LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43''@;'; put 'put ''OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1''@;'; put 'put ''IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1''@;'; put 'put ''IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUx''@;'; put 'put ''IDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYg''@;'; put 'put ''MjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NDMgMjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIwLjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0''@;'; put 'put ''NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4zNSAxNy40NDQ1IDIwLjggMTcuOTk0MyAyMC44Wk0xOC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQgMTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41''@;'; put 'put ''NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcuMzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIuOTVDMTYuOTI0NyAyMy4xOCAxNi43OTQ4IDIzLjQ4IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEyIDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0''@;'; put 'put ''Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMxNy42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMxOC4xNTQyIDI1IDE4LjMwNDEgMjQuOTcgMTguNDU0MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIzOSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTku''@;'; put 'put ''MTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAyMy42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTkuMDQzOCAyMy4yIDE4Ljk1MzggMjMuMDYgMTguODQzOSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQz''@;'; put 'put ''IDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAz''@;'; put 'put ''MC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3QzI4Ljc1OTUgMjcuNjMgMjguNDc5NiAyOCAyNy45Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMx''@;'; put 'put ''IDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4NDMgOEMxOC4xNjQyIDggMTguNjM0IDguMDUgMTguOTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjkuMTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdI''@;'; put 'put ''MjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcu''@;'; put 'put ''NTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAx''@;'; put 'put ''Mi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41VjE5LjNDMTkuMTkzNyAxOS45NiAxOC42NTQgMjAuNSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3''@;'; put 'put ''MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMgMTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1LjQxIDE3Ljk5NDMgMjUuNDFDMTcuODE0MyAyNS40MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUuM0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAy''@;'; put 'put ''NC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcgMTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMuMjkgMTYuOTk0NyAyM0MxNy4xMzQ2IDIyLjg3IDE3LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5''@;'; put 'put ''QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAxOC45NzM4IDIzQzE5LjA5MzggMjMuMTIgMTkuMjAzNyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5''@;'; put 'put ''LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2MzggMjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMyAxOEMzMy41NSAxOCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAzMy41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAz''@;'; put 'put ''NCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIuNDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDNDMi40NSA2IDIgNi40NSAyIDdDMiA3LjU1IDIuNDUgOCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQgNyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAz''@;'; put 'put ''My41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAzMy41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAzNCAyNyAzNEMyNy41NSAzNCAyOCAzMy41NSAyOCAzM1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAzNCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pN''@;'; put 'put ''MTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYxNloiLz4nfV0sWyJ0cmFzaCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAyNy45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3''@;'; put 'put ''IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDguMzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcgMzEuMjUgNy45OSAzMVYxMS4wM0g1Ljk3VjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEy''@;'; put 'put ''QzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNIMjcuOThWMzFaTTEzIDEyLjk4VjI3Ljk4SDE1LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAx''@;'; put 'put ''MyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1Yx''@;'; put 'put ''Mi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgz''@;'; put 'put ''MC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAxMS4wM1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMz''@;'; put 'put ''LjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4LjgyVjE1SDIzLjIxVjI5SDIwLjc5VjI4LjgyWk0xMi44MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYyOC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTon''@;'; put 'put ''PHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAyNS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0MyMy41NSAyNS41MDAxIDI0IDI1LjA1MDEgMjQgMjQuNTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMuNTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEg''@;'; put 'put ''MTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAxSDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAxQzUuODEgMjIuMjAwMSA2LjE5IDIxLjcwMDEgNi4xMSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIwLjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2''@;'; put 'put ''IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZDMTYuNDkgOS40MDAwNiAxNi43NCA5LjQ5MDA2IDE3IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwx''@;'; put 'put ''Ny43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkgMy40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAxNS45MSA0LjgxMDA2IDE2LjMgNS4yMDAwNkwxNi42NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEyLjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEg''@;'; put 'put ''NC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIuMjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEgMjIuMjkwMSA1LjI2IDIyLjI5MDFWMjIuMjgwMVpNMjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAxIDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEg''@;'; put 'put ''MTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAyNi45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45OCAyNi4xMjAxQzEwLjA3IDI1LjU4MDEgOS43IDI1LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQuMzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjku''@;'; put 'put ''MTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUuNjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAxIDYuNjQgMjguOTMwMSA2LjczIDI4LjQ1MDFMNi44MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42''@;'; put 'put ''IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43NyAzMC4wMDAxIDI0LjE2IDI5LjgyMDEgMjMuNjggMzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4wOSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMy''@;'; put 'put ''IDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQxMDA2IDIyLjQ2IDYuNjQwMDYgMjIuMjQgNy4xNTAwNkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUwMDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0''@;'; put 'put ''LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAxIDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1LjMyMDFDMjcuOSAyNC43ODAxIDI3LjM5IDI0LjQwMDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5''@;'; put 'put ''LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAxIDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAyNy4xMjAxIDMwLjY0IDI2Ljc0MDEgMzAuMDkgMjYuODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IFhZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixN''@;'; put 'put ''LEQsWixyZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5jZHI9Wix0aGlzLmVsZW1lbnRSZWY9cmUs''@;'; put 'put ''dGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhpcy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0hMSx0aGlzLmFwcHJvdmVBY3RpdmU9ITEsdGhpcy5mcmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNl''@;'; put 'put ''UHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRoaXMuYXBwQWN0aXZlPW51bGwsdGhpcy5yZXF1ZXN0c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJhdGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMu''@;'; put 'put ''ZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVOYW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93''@;'; put 'put ''LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4xMS4zIiwiQXBwIHZlcnNpb24iOiJ2Ni4xNC44Ii5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6T28ocGFyc2VJbnQoIjE3NDg0NTYwMTQ2MTIiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBI''@;'; put 'put ''SDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjE0LjgiLnJlcGxhY2UoInYiLCIiKSsiLmdlYzExYTc0IixoLmV2ZW50cy5zdWJzY3JpYmUoY2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0''@;'; put 'put ''eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBiZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1iZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9''@;'; put 'put ''PT1iZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLEtuLnJvb3RQYXJhbT1iZX10eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3Ro''@;'; put 'put ''PjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9k''@;'; put 'put ''YWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVudCYmKHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdo''@;'; put 'put ''dDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQu''@;'; put 'put ''c2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFw''@;'; put 'put ''dGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGltZW91dCgoKT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBs''@;'; put 'put ''ZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBkPWY9PmEuZ2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZl''@;'; put 'put ''clVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZCgiYWRtaW5Hcm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVl''@;'; put 'put ''Ij09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGlu''@;'; put 'put ''Z3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFsU2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVu''@;'; put 'put ''OiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5lcj1hfSksdGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJz''@;'; put 'put ''Y3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3ZlckNhcGFjaXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNl''@;'; put 'put ''cnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vic2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhp''@;'; put 'put ''cy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVU''@;'; put 'put ''b1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xldCBkPXRoaXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNh''@;'; put 'put ''c2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhhKX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlV''@;'; put 'put ''cmwoIi9saWNlbnNpbmcvdXBkYXRlIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uob0wpLEdlKHUxKSxHZShMcyksR2UoQ3UpLEdlKGZoKSxHZSh2YyksR2UoSjgpLEdlKEVzKSxHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI2LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBk''@;'; put 'put ''LWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImhyZWYiLCIjIiwiY2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGlu''@;'; put 'put ''ayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkQ2hhbmdlIiwib3BlbmVkIl0sWzMsImRhdGEiLCJmb3JjZVJlbG9hZCIsIm9uQ29uZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlv''@;'; put 'put ''bi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxv''@;'; put 'put ''YWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8t''@;'; put 'put ''YmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVy''@;'; put 'put ''dC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwiYWxlcnQtaWNvbiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2VzIiwiY29sb3Itd2hpdGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUt''@;'; put 'put ''a2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIs''@;'; put 'put ''InRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RjLWxvZ28tc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9n''@;'; put 'put ''byB3aXRob3V0IHRleHQiLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRy''@;'; put 'put ''b2xsZXIgbG9nbyIsMSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsInRv''@;'; put 'put ''Z2dsZSBzZXR0aW5ncyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCJu''@;'; put 'put ''YXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0s''@;'; put 'put ''WyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiwiZGF0YSIsImZvcmNlUmVsb2FkIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vz''@;'; put 'put ''cy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsImxvYWRpbmctbG9nbyJdLFsiY2xhc3MiLCJzbGlkZXIiLDQsIm5nSWYiXSxbMSwic2xpZGVyIl0sWzEsImxpbmUi''@;'; put 'put ''XSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxtdCgxLE5ZZSw0LDMsIm5nLWNvbnRhaW5lciIsMSksZGUoMiwiaGVhZGVyIiwyKSxtdCgzLFZZZSwyLDAsImRpdiIsMyksZGUoNCwiZGl2''@;'; put 'put ''Iiw0KSxtdCg1LEJZZSwzLDIsImEiLDUpKDYsalllLDIsMCwiYSIsMSksaGUoKSxtdCg3LFVZZSwxMywxMCwibmctY29udGFpbmVyIiwxKSxHdCg4LCJhcHAtaGVhZGVyLWFjdGlvbnMiKSxoZSgpLG10KDksWlllLDExLDgsIm5hdiIsNikoMTAsV1llLDEsMCwiYXBwLWFsZXJ0cyIsMSksZGUo''@;'; put 'put ''MTEsImFwcC1yZXF1ZXN0cy1tb2RhbCIsNyksZ2koIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVxdWVzdHNNb2RhbCx2KXx8KGgucmVxdWVzdHNNb2RhbD12KSx2fSksaGUoKSxHdCgxMiwiYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIiksbXQoMTMsWVllLDEsMCwi''@;'; put 'put ''cm91dGVyLW91dGxldCIsMSksR3QoMTQsImFwcC1sb2dpbiIpLG10KDE1LEdZZSwxLDAsImFwcC1hbGVydHMiLDEpKDE2LCRZZSwxLDIsImFwcC1pbmZvLW1vZGFsIiw4KSxkZSgxNywiY2xyLW1vZGFsIiw5KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWko''@;'; put 'put ''aC5kZW1vTGltaXROb3RpY2Uub3Blbix2KXx8KGguZGVtb0xpbWl0Tm90aWNlLm9wZW49diksdn0pLGRlKDE4LCJoMyIsMTApLE9lKDE5KSxHdCgyMCwiY2xyLWljb24iLDExKSxoZSgpLGRlKDIxLCJkaXYiLDEyKSxPZSgyMiwiIENvbnRhY3QgIiksR3QoMjMsImNvbnRhY3QtbGluayIpLE9l''@;'; put 'put ''KDI0KSxoZSgpKCkoKSxtdCgyNSxxWWUsMywxLCJkaXYiLDEzKSksMiZkJiYoZmUoKSx4ZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3Iil8fGguaXNNYWluUm91dGUoImhvbWUiKSYmIWgucm91''@;'; put 'put ''dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLHhlKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSx4ZSgibmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSx4ZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRl''@;'; put 'put ''cygiZGVwbG95IikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSx4ZSgibmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9y''@;'; put 'put ''eSIpKSxmZSgpLHhlKCJuZ0lmIiwhaC5lcnJUb3ApLGZlKCkscGkoIm9wZW5lZCIsaC5yZXF1ZXN0c01vZGFsKSxmZSgyKSx4ZSgibmdJZiIsaC5zdGFydHVwRGF0YUxvYWRlZCksZmUoMikseGUoIm5nSWYiLGguZXJyVG9wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnNhc2pzQWJvcnRzKSxmZSgp''@;'; put 'put ''LHBpKCJjbHJNb2RhbE9wZW4iLGguZGVtb0xpbWl0Tm90aWNlLm9wZW4pLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMiksSXIoIiBMb2NrZWQgRmVhdHVyZSAoIixoLmRlbW9MaW1pdE5vdGljZS5mZWF0dXJlTmFtZSwiKSAiKSxmZSg1KSxJcigi''@;'; put 'put ''IHdpdGggeW91ciBzaXRlIGlkICgiLGguc3lzc2l0ZS52YWx1ZSwiKSB0byBhY3RpdmF0ZSEgIiksZmUoKSx4ZSgibmdJZiIsIWguc3RhcnR1cERhdGFMb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxyNSxjMSxweSxNV2UsVldlLHpXZSxwTyxXV2UsSngsSGwscnMsb3UsS3UsTDIsbDUs''@;'; put 'put ''cDcsZzcsVnksZUUsYlllLFRZZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2aGUoYyl7cmV0dXJuIG5ldyBRbigzZTMsITEpfWZ1bmN0aW9uIERtKGMpe3N3aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgX3g7Y2FzZSAxOnJldHVybiBjWzBdO2Rl''@;'; put 'put ''ZmF1bHQ6cmV0dXJuIG5ldyBSMGUoYyl9fWZ1bmN0aW9uIGJoZShjLGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCB2PS0xLE09bnVsbDtpZihsLmZvckVhY2goRD0+e2NvbnN0IFo9RC5nZXQoIm9mZnNldCIpLHJlPVo9PXYsY2U9cmUmJk18fG5ldyBNYXA7RC5m''@;'; put 'put ''b3JFYWNoKChiZSxFZSk9PntsZXQgQmU9RWUscWU9YmU7aWYoIm9mZnNldCIhPT1FZSlzd2l0Y2goQmU9Yy5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoQmUsaCkscWUpe2Nhc2UiISI6cWU9YS5nZXQoRWUpO2JyZWFrO2Nhc2UgYTU6cWU9ZC5nZXQoRWUpO2JyZWFrO2RlZmF1bHQ6cWU9Yy5ub3Jt''@;'; put 'put ''YWxpemVTdHlsZVZhbHVlKEVlLEJlLHFlLGgpfWNlLnNldChCZSxxZSl9KSxyZXx8Zi5wdXNoKGNlKSxNPWNlLHY9Wn0pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIF9HZShjKXtyZXR1cm4gbmV3IFFuKDM1MDIsITEpfSgpO3JldHVybiBmfWZ1bmN0aW9uIFRHKGMsbCxhLGQpe3N3aXRjaChs''@;'; put 'put ''KXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmQUcoYSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZBRyhhLCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5vbkRlc3Ryb3koKCk9PmQoYSYmQUcoYSwiZGVzdHJveSIsYykpKX19''@;'; put 'put ''ZnVuY3Rpb24gQUcoYyxsLGEpe2NvbnN0IGY9a0coYy5lbGVtZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJsZWQpLHY9Yy5fZGF0YTtyZXR1cm4gbnVsbCE9diYmKGYuX2RhdGE9''@;'; put 'put ''diksZn1mdW5jdGlvbiBrRyhjLGwsYSxkLGg9IiIsZj0wLHYpe3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISF2fX1mdW5jdGlvbiBUaChjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0''@;'; put 'put ''dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIHloZShjKXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgUkdlPXR5cGVvZiBkb2N1bWVudD4idSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rp''@;'; put 'put ''b24gREcoYyl7Y29uc3QgbD1jLnBhcmVudE5vZGV8fGMuaG9zdHx8bnVsbDtyZXR1cm4gbD09PVJHZT9udWxsOmx9bGV0IE83PW51bGwsX2hlPSExO2Z1bmN0aW9uIHdoZShjLGwpe2Zvcig7bDspe2lmKGw9PT1jKXJldHVybiEwO2w9REcobCl9cmV0dXJuITF9ZnVuY3Rpb24gQ2hlKGMsbCxh''@;'; put 'put ''KXtpZihhKXJldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChsKSk7Y29uc3QgZD1jLnF1ZXJ5U2VsZWN0b3IobCk7cmV0dXJuIGQ/W2RdOltdfWxldCBJRz0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gT0dlKGMpe083fHwo''@;'; put 'put ''Tzc9ZnVuY3Rpb24gUEdlKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSxfaGU9ISFPNy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gTzcuc3R5bGUpO2xldCBsPSEwO3JldHVybiBPNy5zdHlsZSYmIWZ1bmN0aW9uIExHZShjKXtyZXR1''@;'; put 'put ''cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYpfShjKSYmKGw9YyBpbiBPNy5zdHlsZSwhbCYmX2hlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlpbiBPNy5zdHlsZSkpLGx9KGEpfW1hdGNoZXNFbGVtZW50KGEsZCl7cmV0dXJuITF9Y29udGFpbnNF''@;'; put 'put ''bGVtZW50KGEsZCl7cmV0dXJuIHdoZShhLGQpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIERHKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gQ2hlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYsdixNPVtdLEQpe3JldHVybiBuZXcgX3go''@;'; put 'put ''aCxmKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyBSR3tzdGF0aWN7dGhpcy5OT09QPW5ldyBJR319Y2xh''@;'; put 'put ''c3MgTEd7fWNvbnN0IEhHZT0xZTMsT0c9Im5nLWVudGVyIixnTz0ibmctbGVhdmUiLG1PPSJuZy10cmlnZ2VyIix2Tz0iLm5nLXRyaWdnZXIiLE1oZT0ibmctYW5pbWF0aW5nIixQRz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gZzUoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBj''@;'; put 'put ''O2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hbHx8bC5sZW5ndGg8Mj8wOkZHKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVuY3Rpb24gRkcoYyxsKXtyZXR1cm4icyI9PT1sP2MqSEdlOmN9ZnVuY3Rpb24gYk8oYyxsLGEpe3JldHVybiBjLmhhc093blByb3Bl''@;'; put 'put ''cnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gVkdlKGMsbCxhKXtsZXQgaCxmPTAsdj0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IE09Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQv''@;'; put 'put ''aSk7aWYobnVsbD09PU0pcmV0dXJuIGwucHVzaCh2aGUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9RkcocGFyc2VGbG9hdChNWzFdKSxNWzJdKTtjb25zdCBEPU1bM107bnVsbCE9RCYmKGY9RkcocGFyc2VGbG9hdChEKSxNWzRdKSk7Y29uc3QgWj1NWzVdO1omJih2PVop''@;'; put 'put ''fWVsc2UgaD1jO2lmKCFhKXtsZXQgTT0hMSxEPWwubGVuZ3RoO2g8MCYmKGwucHVzaChmdW5jdGlvbiBKWWUoKXtyZXR1cm4gbmV3IFFuKDMxMDAsITEpfSgpKSxNPSEwKSxmPDAmJihsLnB1c2goZnVuY3Rpb24gUVllKCl7cmV0dXJuIG5ldyBRbigzMTAxLCExKX0oKSksTT0hMCksTSYmbC5z''@;'; put 'put ''cGxpY2UoRCwwLHZoZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpmLGVhc2luZzp2fX0oYyxsLGEpfWZ1bmN0aW9uIE1wKGMsbCxhKXtsLmZvckVhY2goKGQsaCk9Pntjb25zdCBmPU5HKGgpO2EmJiFhLmhhcyhoKSYmYS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5j''@;'; put 'put ''dGlvbiBQNyhjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9TkcoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIHRFKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpPzE9PWMubGVuZ3RoP2NbMF06ZnVuY3Rpb24gY1BlKGMsbD1udWxsKXtyZXR1cm57dHlwZTpBby5TZXF1ZW5jZSxz''@;'; put 'put ''dGVwczpjLG9wdGlvbnM6bH19KGMpOmN9Y29uc3QgSEc9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gRWhlKGMpe2xldCBsPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYyl7bGV0IGE7Zm9yKDthPUhHLmV4ZWMoYyk7KWwucHVzaChhWzFdKTtIRy5sYXN0SW5k''@;'; put 'put ''ZXg9MH1yZXR1cm4gbH1mdW5jdGlvbiBuRShjLGwsYSl7Y29uc3QgZD1gJHtjfWAsaD1kLnJlcGxhY2UoSEcsKGYsdik9PntsZXQgTT1sW3ZdO3JldHVybiBudWxsPT1NJiYoYS5wdXNoKGZ1bmN0aW9uIHRHZShjKXtyZXR1cm4gbmV3IFFuKDMwMDMsITEpfSgpKSxNPSIiKSxNLnRvU3RyaW5n''@;'; put 'put ''KCl9KTtyZXR1cm4gaD09ZD9jOmh9Y29uc3QgekdlPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBORyhjKXtyZXR1cm4gYy5yZXBsYWNlKHpHZSwoLi4ubCk9PmxbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gQWgoYyxsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgQW8uVHJpZ2dlcjpyZXR1''@;'; put 'put ''cm4gYy52aXNpdFRyaWdnZXIobCxhKTtjYXNlIEFvLlN0YXRlOnJldHVybiBjLnZpc2l0U3RhdGUobCxhKTtjYXNlIEFvLlRyYW5zaXRpb246cmV0dXJuIGMudmlzaXRUcmFuc2l0aW9uKGwsYSk7Y2FzZSBBby5TZXF1ZW5jZTpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7Y2FzZSBBby5H''@;'; put 'put ''cm91cDpyZXR1cm4gYy52aXNpdEdyb3VwKGwsYSk7Y2FzZSBBby5BbmltYXRlOnJldHVybiBjLnZpc2l0QW5pbWF0ZShsLGEpO2Nhc2UgQW8uS2V5ZnJhbWVzOnJldHVybiBjLnZpc2l0S2V5ZnJhbWVzKGwsYSk7Y2FzZSBBby5TdHlsZTpyZXR1cm4gYy52aXNpdFN0eWxlKGwsYSk7Y2FzZSBB''@;'; put 'put ''by5SZWZlcmVuY2U6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2UobCxhKTtjYXNlIEFvLkFuaW1hdGVDaGlsZDpyZXR1cm4gYy52aXNpdEFuaW1hdGVDaGlsZChsLGEpO2Nhc2UgQW8uQW5pbWF0ZVJlZjpyZXR1cm4gYy52aXNpdEFuaW1hdGVSZWYobCxhKTtjYXNlIEFvLlF1ZXJ5OnJldHVybiBj''@;'; put 'put ''LnZpc2l0UXVlcnkobCxhKTtjYXNlIEFvLlN0YWdnZXI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBmdW5jdGlvbiBuR2UoYyl7cmV0dXJuIG5ldyBRbigzMDA0LCExKX0oKX19ZnVuY3Rpb24gVkcoYyxsKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUo''@;'; put 'put ''YylbbF19Y29uc3QgV0dlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRk''@;'; put 'put ''aW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRX''@;'; put 'put ''aWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKTtjbGFzcyBUaGUgZXh0ZW5kcyBMR3tub3JtYWxpemVQcm9wZXJ0eU5hbWUobCxhKXtyZXR1cm4gTkcobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXts''@;'; put 'put ''ZXQgZj0iIjtjb25zdCB2PWQudG9TdHJpbmcoKS50cmltKCk7aWYoV0dlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYoIm51bWJlciI9PXR5cGVvZiBkKWY9InB4IjtlbHNle2NvbnN0IE09ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO00mJjA9PU1bMV0ubGVuZ3RoJiZoLnB1''@;'; put 'put ''c2goZnVuY3Rpb24gckdlKGMsbCl7cmV0dXJuIG5ldyBRbigzMDA1LCExKX0oKSl9cmV0dXJuIHYrZn19Y29uc3QgeU89IioiO2NvbnN0IF9PPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSx3Tz1uZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uIEFoZShjLGwpe2NvbnN0IGE9X08uaGFzKGMp''@;'; put 'put ''fHx3Ty5oYXMoYyksZD1fTy5oYXMobCl8fHdPLmhhcyhsKTtyZXR1cm4oaCxmKT0+e2xldCB2PWM9PXlPfHxjPT1oLE09bD09eU98fGw9PWY7cmV0dXJuIXYmJmEmJiJib29sZWFuIj09dHlwZW9mIGgmJih2PWg/X08uaGFzKGMpOndPLmhhcyhjKSksIU0mJmQmJiJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IGYmJihNPWY/X08uaGFzKGwpOndPLmhhcyhsKSksdiYmTX19Y29uc3QgS0dlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIEJHKGMsbCxhLGQpe3JldHVybiBuZXcgcUdlKGMpLmJ1aWxkKGwsYSxkKX1jbGFzcyBxR2V7Y29uc3RydWN0b3IobCl7dGhpcy5fZHJpdmVy''@;'; put 'put ''PWx9YnVpbGQobCxhLGQpe2NvbnN0IGg9bmV3IFFHZShhKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShoKSxBaCh0aGlzLHRFKGwpLGgpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGwpe2wuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsbC5jb2xsZWN0''@;'; put 'put ''ZWRTdHlsZXM9bmV3IE1hcCxsLmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksbC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcihsLGEpe2xldCBkPWEucXVlcnlDb3VudD0wLGg9YS5kZXBDb3VudD0wO2NvbnN0IGY9W10sdj1bXTtyZXR1cm4iQCI9PWwubmFtZS5jaGFyQXQoMCkm''@;'; put 'put ''JmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gaUdlKCl7cmV0dXJuIG5ldyBRbigzMDA2LCExKX0oKSksbC5kZWZpbml0aW9ucy5mb3JFYWNoKE09PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGEpLE0udHlwZT09QW8uU3RhdGUpe2NvbnN0IEQ9TSxaPUQubmFtZTtaLnRv''@;'; put 'put ''U3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKHJlPT57RC5uYW1lPXJlLGYucHVzaCh0aGlzLnZpc2l0U3RhdGUoRCxhKSl9KSxELm5hbWU9Wn1lbHNlIGlmKE0udHlwZT09QW8uVHJhbnNpdGlvbil7Y29uc3QgRD10aGlzLnZpc2l0VHJhbnNpdGlvbihNLGEpO2QrPUQucXVlcnlD''@;'; put 'put ''b3VudCxoKz1ELmRlcENvdW50LHYucHVzaChEKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gYUdlKCl7cmV0dXJuIG5ldyBRbigzMDA3LCExKX0oKSl9KSx7dHlwZTpBby5UcmlnZ2VyLG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOnYscXVlcnlDb3VudDpkLGRlcENvdW50''@;'; put 'put ''Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYoZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCx2PWh8fHt9O2Quc3R5bGVz''@;'; put 'put ''LmZvckVhY2goTT0+e00gaW5zdGFuY2VvZiBNYXAmJk0uZm9yRWFjaChEPT57RWhlKEQpLmZvckVhY2goWj0+e3YuaGFzT3duUHJvcGVydHkoWil8fGYuYWRkKFopfSl9KX0pLGYuc2l6ZSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBvR2UoYyxsKXtyZXR1cm4gbmV3IFFuKDMwMDgsITEpfSgw''@;'; put 'put ''LGYudmFsdWVzKCkpKX1yZXR1cm57dHlwZTpBby5TdGF0ZSxuYW1lOmwubmFtZSxzdHlsZTpkLG9wdGlvbnM6aD97cGFyYW1zOmh9Om51bGx9fXZpc2l0VHJhbnNpdGlvbihsLGEpe2EucXVlcnlDb3VudD0wLGEuZGVwQ291bnQ9MDtjb25zdCBkPUFoKHRoaXMsdEUobC5hbmltYXRpb24pLGEp''@;'; put 'put ''LGg9ZnVuY3Rpb24gWUdlKGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVuY3Rpb24gR0dlKGMsbCxhKXtpZigiOiI9PWNbMF0pe2NvbnN0IEQ9ZnVuY3Rpb24gJEdlKGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVu''@;'; put 'put ''dGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKT5wYXJzZUZsb2F0KGEpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9h''@;'; put 'put ''dChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVuY3Rpb24gbUdlKGMpe3JldHVybiBuZXcgUW4oMzAxNiwhMSl9KCkpLCIqID0+ICoifX0oYyxhKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgRClyZXR1cm4gdm9pZCBsLnB1c2goRCk7Yz1EfWNvbnN0IGQ9Yy5tYXRjaCgvXihcKnxbLVx3XSsp''@;'; put 'put ''XHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09ZHx8ZC5sZW5ndGg8NClyZXR1cm4gYS5wdXNoKGZ1bmN0aW9uIGdHZShjKXtyZXR1cm4gbmV3IFFuKDMwMTUsITEpfSgpKSxsO2NvbnN0IGg9ZFsxXSxmPWRbMl0sdj1kWzNdO2wucHVzaChBaGUoaCx2KSksIjwiPT1mWzBd''@;'; put 'put ''JiYoaCE9eU98fHYhPXlPKSYmbC5wdXNoKEFoZSh2LGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX0obC5leHByLGEuZXJyb3JzKTtyZXR1cm57dHlwZTpBby5UcmFuc2l0aW9uLG1hdGNoZXJzOmgsYW5pbWF0aW9uOmQscXVlcnlDb3VudDphLnF1ZXJ5Q291bnQsZGVwQ291bnQ6YS5kZXBDb3Vu''@;'; put 'put ''dCxvcHRpb25zOkY3KGwub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UobCxhKXtyZXR1cm57dHlwZTpBby5TZXF1ZW5jZSxzdGVwczpsLnN0ZXBzLm1hcChkPT5BaCh0aGlzLGQsYSkpLG9wdGlvbnM6RjcobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTts''@;'; put 'put ''ZXQgaD0wO2NvbnN0IGY9bC5zdGVwcy5tYXAodj0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBNPUFoKHRoaXMsdixhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRpbWUpLE19KTtyZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOkFvLkdyb3VwLHN0ZXBzOmYsb3B0aW9uczpGNyhs''@;'; put 'put ''Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIHQkZShjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIGM7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBqRyhiTyhjLGwpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IGE9YztpZihh''@;'; put 'put ''LnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPWpHKDAsMCwiIik7cmV0dXJuIGYuZHluYW1pYz0hMCxmLnN0clZhbHVlPWEsZn1jb25zdCBoPWJPKGEsbCk7cmV0dXJuIGpHKGguZHVyYXRpb24saC5kZWxheSxoLmVhc2lu''@;'; put 'put ''Zyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOnVzKHt9KTtpZihmLnR5cGU9PUFvLktleWZyYW1lcyloPXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCB2PWwuc3R5bGVzLE09ITE7aWYoIXYp''@;'; put 'put ''e009ITA7Y29uc3QgWj17fTtkLmVhc2luZyYmKFouZWFzaW5nPWQuZWFzaW5nKSx2PXVzKFopfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBEPXRoaXMudmlzaXRTdHlsZSh2LGEpO0QuaXNFbXB0eVN0ZXA9TSxoPUR9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1p''@;'; put 'put ''bmdzPW51bGwse3R5cGU6QW8uQW5pbWF0ZSx0aW1pbmdzOmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFzdChsLGEpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29u''@;'; put 'put ''c3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMpP2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBNIG9mIGgpInN0cmluZyI9PXR5cGVvZiBNP009PT1hNT9kLnB1c2goTSk6YS5lcnJvcnMucHVzaChuZXcgUW4oMzAwMiwhMSkpOmQucHVzaChuZXcgTWFwKE9iamVjdC5lbnRyaWVz''@;'; put 'put ''KE0pKSk7bGV0IGY9ITEsdj1udWxsO3JldHVybiBkLmZvckVhY2goTT0+e2lmKE0gaW5zdGFuY2VvZiBNYXAmJihNLmhhcygiZWFzaW5nIikmJih2PU0uZ2V0KCJlYXNpbmciKSxNLmRlbGV0ZSgiZWFzaW5nIikpLCFmKSlmb3IobGV0IEQgb2YgTS52YWx1ZXMoKSlpZihELnRvU3RyaW5nKCku''@;'; put 'put ''aW5kZXhPZigie3siKT49MCl7Zj0hMDticmVha319KSx7dHlwZTpBby5TdHlsZSxzdHlsZXM6ZCxlYXNpbmc6dixvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmYsb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0''@;'; put 'put ''ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5kdXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKHY9Pnsic3RyaW5nIiE9dHlwZW9mIHYmJnYuZm9yRWFjaCgoTSxEKT0+e2NvbnN0IFo9YS5jb2xsZWN0ZWRTdHlsZXMuZ2V0''@;'; put 'put ''KGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHJlPVouZ2V0KEQpO2xldCBjZT0hMDtyZSYmKGYhPWgmJmY+PXJlLnN0YXJ0VGltZSYmaDw9cmUuZW5kVGltZSYmKGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gbEdlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBRbigzMDEwLCExKX0oKSksY2U9ITEpLGY9''@;'; put 'put ''cmUuc3RhcnRUaW1lKSxjZSYmWi5zZXQoRCx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRpb25zJiZmdW5jdGlvbiBqR2UoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9RWhlKGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChm''@;'; put 'put ''dW5jdGlvbiBlR2UoYyl7cmV0dXJuIG5ldyBRbigzMDAxLCExKX0oKSl9KX0oTSxhLm9wdGlvbnMsYS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9e3R5cGU6QW8uS2V5ZnJhbWVzLHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFhLmN1cnJlbnRBbmltYXRlVGlt''@;'; put 'put ''aW5ncylyZXR1cm4gYS5lcnJvcnMucHVzaChmdW5jdGlvbiBjR2UoKXtyZXR1cm4gbmV3IFFuKDMwMTEsITEpfSgpKSxkO2xldCBmPTA7Y29uc3Qgdj1bXTtsZXQgTT0hMSxEPSExLFo9MDtjb25zdCByZT1sLnN0ZXBzLm1hcChwdD0+e2NvbnN0IGR0PXRoaXMuX21ha2VTdHlsZUFzdChwdCxh''@;'; put 'put ''KTtsZXQgSnQ9bnVsbCE9ZHQub2Zmc2V0P2R0Lm9mZnNldDpmdW5jdGlvbiBlJGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBudWxsO2xldCBsPW51bGw7aWYoQXJyYXkuaXNBcnJheShjKSljLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQi''@;'; put 'put ''KSl7Y29uc3QgZD1hO2w9cGFyc2VGbG9hdChkLmdldCgib2Zmc2V0IikpLGQuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXAmJmMuaGFzKCJvZmZzZXQiKSl7Y29uc3QgYT1jO2w9cGFyc2VGbG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQi''@;'; put 'put ''KX1yZXR1cm4gbH0oZHQuc3R5bGVzKSx2bj0wO3JldHVybiBudWxsIT1KdCYmKGYrKyx2bj1kdC5vZmZzZXQ9SnQpLEQ9RHx8dm48MHx8dm4+MSxNPU18fHZuPFosWj12bix2LnB1c2godm4pLGR0fSk7RCYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiB1R2UoKXtyZXR1cm4gbmV3IFFuKDMwMTIs''@;'; put 'put ''ITEpfSgpKSxNJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGRHZSgpe3JldHVybiBuZXcgUW4oMzIwMCwhMSl9KCkpO2NvbnN0IGNlPWwuc3RlcHMubGVuZ3RoO2xldCBiZT0wO2Y+MCYmZjxjZT9hLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGhHZSgpe3JldHVybiBuZXcgUW4oMzIwMiwhMSl9KCkp''@;'; put 'put ''OjA9PWYmJihiZT0xLyhjZS0xKSk7Y29uc3QgRWU9Y2UtMSxCZT1hLmN1cnJlbnRUaW1lLHFlPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLHJ0PXFlLmR1cmF0aW9uO3JldHVybiByZS5mb3JFYWNoKChwdCxkdCk9Pntjb25zdCBKdD1iZT4wP2R0PT1FZT8xOmJlKmR0OnZbZHRdLHZuPUp0KnJ0''@;'; put 'put ''O2EuY3VycmVudFRpbWU9QmUrcWUuZGVsYXkrdm4scWUuZHVyYXRpb249dm4sdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChwdCxhKSxwdC5vZmZzZXQ9SnQsZC5zdHlsZXMucHVzaChwdCl9KSxkfXZpc2l0UmVmZXJlbmNlKGwsYSl7cmV0dXJue3R5cGU6QW8uUmVmZXJlbmNlLGFuaW1hdGlvbjpB''@;'; put 'put ''aCh0aGlzLHRFKGwuYW5pbWF0aW9uKSxhKSxvcHRpb25zOkY3KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7cmV0dXJuIGEuZGVwQ291bnQrKyx7dHlwZTpBby5BbmltYXRlQ2hpbGQsb3B0aW9uczpGNyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57''@;'; put 'put ''dHlwZTpBby5BbmltYXRlUmVmLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGEpLG9wdGlvbnM6RjcobC5vcHRpb25zKX19dmlzaXRRdWVyeShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50UXVlcnlTZWxlY3RvcixoPWwub3B0aW9uc3x8e307YS5xdWVyeUNvdW50Kyss''@;'; put 'put ''YS5jdXJyZW50UXVlcnk9bDtjb25zdFtmLHZdPWZ1bmN0aW9uIFhHZShjKXtjb25zdCBsPSEhYy5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoYT0+IjpzZWxmIj09YSk7cmV0dXJuIGwmJihjPWMucmVwbGFjZShLR2UsIiIpKSxjPWMucmVwbGFjZSgvQFwqL2csdk8pLnJlcGxhY2UoL0BcdysvZyxh''@;'; put 'put ''PT52TysiLSIrYS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLFBHKSxbYyxsXX0obC5zZWxlY3Rvcik7YS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1kLmxlbmd0aD9kKyIgIitmOmYsVGgoYS5jb2xsZWN0ZWRTdHlsZXMsYS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtjb25z''@;'; put 'put ''dCBNPUFoKHRoaXMsdEUobC5hbmltYXRpb24pLGEpO3JldHVybiBhLmN1cnJlbnRRdWVyeT1udWxsLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZCx7dHlwZTpBby5RdWVyeSxzZWxlY3RvcjpmLGxpbWl0OmgubGltaXR8fDAsb3B0aW9uYWw6ISFoLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnYsYW5p''@;'; put 'put ''bWF0aW9uOk0sb3JpZ2luYWxTZWxlY3RvcjpsLnNlbGVjdG9yLG9wdGlvbnM6RjcobC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKGwsYSl7YS5jdXJyZW50UXVlcnl8fGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gZkdlKCl7cmV0dXJuIG5ldyBRbigzMDEzLCExKX0oKSk7Y29uc3QgZD0iZnVsbCI9''@;'; put 'put ''PT1sLnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpiTyhsLnRpbWluZ3MsYS5lcnJvcnMsITApO3JldHVybnt0eXBlOkFvLlN0YWdnZXIsYW5pbWF0aW9uOkFoKHRoaXMsdEUobC5hbmltYXRpb24pLGEpLHRpbWluZ3M6ZCxvcHRpb25zOm51bGx9fX1jbGFzcyBR''@;'; put 'put ''R2V7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1h''@;'; put 'put ''dGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX1mdW5jdGlvbiBGNyhjKXtyZXR1cm4gYz8oYz17Li4uY30pLnBhcmFt''@;'; put 'put ''cyYmKGMucGFyYW1zPWZ1bmN0aW9uIEpHZShjKXtyZXR1cm4gYz97Li4uY306bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gakcoYyxsLGEpe3JldHVybntkdXJhdGlvbjpjLGRlbGF5OmwsZWFzaW5nOmF9fWZ1bmN0aW9uIHpHKGMsbCxhLGQsaCxmLHY9bnVsbCxNPSExKXtyZXR1''@;'; put 'put ''cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1lOmgrZixlYXNpbmc6dixzdWJUaW1lbGluZTpNfX1jbGFzcyBDT3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdl''@;'; put 'put ''dChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhhcyhsKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1j''@;'; put 'put ''b25zdCBpJGU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLG8kZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gVUcoYyxsLGEsZCxoLGY9bmV3IE1hcCx2PW5ldyBNYXAsTSxELFo9W10pe3JldHVybihuZXcgcyRlKS5idWlsZEtleWZyYW1lcyhjLGwsYSxkLGgsZix2LE0sRCxa''@;'; put 'put ''KX1jbGFzcyBzJGV7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLHYsTSxELFoscmU9W10pe1o9Wnx8bmV3IENPO2NvbnN0IGNlPW5ldyBaRyhsLGEsWixoLGYscmUsW10pO2NlLm9wdGlvbnM9RDtjb25zdCBiZT1ELmRlbGF5P2c1KEQuZGVsYXkpOjA7Y2UuY3VycmVudFRpbWVsaW5lLmRlbGF5''@;'; put 'put ''TmV4dFN0ZXAoYmUpLGNlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3ZdLG51bGwsY2UuZXJyb3JzLEQpLEFoKHRoaXMsZCxjZSk7Y29uc3QgRWU9Y2UudGltZWxpbmVzLmZpbHRlcihCZT0+QmUuY29udGFpbnNBbmltYXRpb24oKSk7aWYoRWUubGVuZ3RoJiZNLnNpemUpe2xldCBCZTtm''@;'; put 'put ''b3IobGV0IHFlPUVlLmxlbmd0aC0xO3FlPj0wO3FlLS0pe2NvbnN0IHJ0PUVlW3FlXTtpZihydC5lbGVtZW50PT09YSl7QmU9cnQ7YnJlYWt9fUJlJiYhQmUuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmQmUuc2V0U3R5bGVzKFtNXSxudWxsLGNlLmVycm9ycyxEKX1yZXR1cm4gRWUubGVu''@;'; put 'put ''Z3RoP0VlLm1hcChCZT0+QmUuYnVpbGRLZXlmcmFtZXMoKSk6W3pHKGEsW10sW10sW10sMCxiZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJhbnNpdGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVj''@;'; put 'put ''dGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHY9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9diYmYS50cmFuc2Zvcm1JbnRvTmV3''@;'; put 'put ''VGltZWxpbmUodil9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1h''@;'; put 'put ''dGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3Io''@;'; put 'put ''Y29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IHY9Im51bWJlciI9PXR5cGVvZiBmP2Y6ZzUobkUoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5leHRTdGVwKHYpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRU''@;'; put 'put ''aW1lbGluZS5jdXJyZW50VGltZTtjb25zdCB2PW51bGwhPWQuZHVyYXRpb24/ZzUoZC5kdXJhdGlvbik6bnVsbCxNPW51bGwhPWQuZGVsYXk/ZzUoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXYmJmwuZm9yRWFjaChEPT57Y29uc3QgWj1hLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShE''@;'; put 'put ''LHYsTSk7Zj1NYXRoLm1heChmLFouZHVyYXRpb24rWi5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCksQWgodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3Vi''@;'; put 'put ''Q29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpe2gucHJldmlvdXNOb2RlLnR5cGU9PUFvLlN0eWxl''@;'; put 'put ''JiYoaC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9U08pO2NvbnN0IHY9ZzUoZi5kZWxheSk7aC5kZWxheU5leHRTdGVwKHYpfWwuc3RlcHMubGVuZ3RoJiYobC5zdGVwcy5mb3JFYWNoKHY9PkFoKHRoaXMsdixoKSksaC5jdXJyZW50VGlt''@;'; put 'put ''ZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25z''@;'; put 'put ''dCBmPWwub3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P2c1KGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2godj0+e2NvbnN0IE09YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZiYmTS5kZWxheU5leHRTdGVwKGYpLEFoKHRoaXMsdixNKSxoPU1hdGgubWF4KGgsTS5jdXJy''@;'; put 'put ''ZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChNLmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2godj0+YS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh2KSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1f''@;'; put 'put ''dmlzaXRUaW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gYk8oYS5wYXJhbXM/bkUoZCxhLnBhcmFtcyxhLmVycm9ycyk6ZCxhLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmwuZHVyYXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZp''@;'; put 'put ''c2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJyZW50VGltZWxpbmU7ZC5kZWxheSYmKGEuaW5jcmVtZW50VGltZShkLmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25z''@;'; put 'put ''dCBmPWwuc3R5bGU7Zi50eXBlPT1Bby5LZXlmcmFtZXM/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSksaC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxh''@;'; put 'put ''LnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZkLmZvcndhcmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5n''@;'; put 'put ''O2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGlu''@;'; put 'put ''ZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sTT1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7TS5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChEPT57TS5mb3J3YXJkVGltZSgoRC5vZmZzZXR8fDApKmYpLE0uc2V0U3R5bGVzKEQuc3R5bGVzLEQuZWFzaW5nLGEu''@;'; put 'put ''ZXJyb3JzLGEub3B0aW9ucyksTS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoTSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCtmKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25z''@;'; put 'put ''dCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/ZzUoaC5kZWxheSk6MDtmJiYoYS5wcmV2aW91c05vZGUudHlwZT09PUFvLlN0eWxlfHwwPT1kJiZhLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYo''@;'; put 'put ''YS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9U08pO2xldCB2PWQ7Y29uc3QgTT1hLmludm9rZVF1ZXJ5KGwuc2VsZWN0b3IsbC5vcmlnaW5hbFNlbGVjdG9yLGwubGltaXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMp''@;'; put 'put ''O2EuY3VycmVudFF1ZXJ5VG90YWw9TS5sZW5ndGg7bGV0IEQ9bnVsbDtNLmZvckVhY2goKFoscmUpPT57YS5jdXJyZW50UXVlcnlJbmRleD1yZTtjb25zdCBjZT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zLFopO2YmJmNlLmRlbGF5TmV4dFN0ZXAoZiksWj09PWEuZWxlbWVudCYmKEQ9''@;'; put 'put ''Y2UuY3VycmVudFRpbWVsaW5lKSxBaCh0aGlzLGwuYW5pbWF0aW9uLGNlKSxjZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdj1NYXRoLm1heCh2LGNlLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50''@;'; put 'put ''UXVlcnlUb3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpLEQmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKEQpLGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3Rh''@;'; put 'put ''Z2dlcihsLGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3Msdj1NYXRoLmFicyhmLmR1cmF0aW9uKSxNPXYqKGEuY3VycmVudFF1ZXJ5VG90YWwtMSk7bGV0IEQ9diphLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/''@;'; put 'put ''InJldmVyc2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOkQ9TS1EO2JyZWFrO2Nhc2UiZnVsbCI6RD1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCByZT1hLmN1cnJlbnRUaW1lbGluZTtEJiZyZS5kZWxheU5leHRTdGVwKEQpO2NvbnN0IGNlPXJlLmN1cnJlbnRUaW1lO0FoKHRoaXMsbC5h''@;'; put 'put ''bmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLWNlKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfX1jb25zdCBTTz17fTtjbGFzcyBaR3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3RoaXMu''@;'; put 'put ''X2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNzTmFtZT1mLHRoaXMuZXJyb3JzPXYsdGhpcy50aW1lbGluZXM9TSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmlt''@;'; put 'put ''YXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVNPLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRU''@;'; put 'put ''aW1lbGluZT1EfHxuZXcgTU8odGhpcy5fZHJpdmVyLGEsMCksTS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyhsLGEpe2lmKCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25z''@;'; put 'put ''O251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPWc1KGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1nNShkLmRlbGF5KSk7Y29uc3QgZj1kLnBhcmFtcztpZihmKXtsZXQgdj1oLnBhcmFtczt2fHwodj10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhm''@;'; put 'put ''KS5mb3JFYWNoKE09PnsoIWF8fCF2Lmhhc093blByb3BlcnR5KE0pKSYmKHZbTV09bkUoZltNXSx2LHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgbD17fTtpZih0aGlzLm9wdGlvbnMpe2NvbnN0IGE9dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFy''@;'; put 'put ''YW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0IGg9YXx8dGhpcy5lbGVtZW50LGY9bmV3IFpHKHRoaXMuX2RyaXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVy''@;'; put 'put ''Q2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHwwKSk7cmV0dXJuIGYucHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3Vy''@;'; put 'put ''cmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsZi5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29u''@;'; put 'put ''dGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPVNPLHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxp''@;'; put 'put ''bmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29uc3QgaD17ZHVyYXRpb246YT8/bC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkr''@;'; put 'put ''bC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IGwkZSh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHlsZVByb3BzLGgsbC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1l''@;'; put 'put ''bnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAobCl7bD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZix2KXtsZXQg''@;'; put 'put ''TT1bXTtpZihoJiZNLnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShpJGUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShvJGUsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgWj10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50''@;'; put 'put ''LGwsMSE9ZCk7MCE9PWQmJihaPWQ8MD9aLnNsaWNlKFoubGVuZ3RoK2QsWi5sZW5ndGgpOlouc2xpY2UoMCxkKSksTS5wdXNoKC4uLlopfXJldHVybiFmJiYwPT1NLmxlbmd0aCYmdi5wdXNoKGZ1bmN0aW9uIHBHZShjKXtyZXR1cm4gbmV3IFFuKDMwMTQsITEpfSgpKSxNfX1jbGFzcyBNT3tj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1oLHRoaXMuZHVyYXRpb249MCx0aGlzLmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1h''@;'; put 'put ''cCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBN''@;'; put 'put ''YXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGlu''@;'; put 'put ''ZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5''@;'; put 'put ''bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJl''@;'; put 'put ''bnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn1kZWxheU5leHRTdGVwKGwpe2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlz''@;'; put 'put ''Ll9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz1sfWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5''@;'; put 'put ''ZnJhbWUoKSxuZXcgTU8odGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlm''@;'; put 'put ''cmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRL''@;'; put 'put ''ZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPWwsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhp''@;'; put 'put ''cy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGwse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTphfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGwpO2ZvcihsZXRbYSxkXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxs''@;'; put 'put ''LnNldChhLGR8fGE1KSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsYTUpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKGwsYSxkLGgpe2EmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0''@;'; put 'put ''IGY9aCYmaC5wYXJhbXN8fHt9LHY9ZnVuY3Rpb24gYyRlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09PWgpe2Q/Pz1sLmtleXMoKTtmb3IobGV0IGYgb2YgZClhLnNldChmLGE1KX1lbHNlIGZvcihsZXRbZix2XW9mIGgpYS5zZXQoZix2''@;'; put 'put ''KX0pLGF9KGwsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbTSxEXW9mIHYpe2NvbnN0IFo9bkUoRCxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KE0sWiksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoTSl8fHRoaXMuX2JhY2tGaWxsLnNldChNLHRoaXMuX2ds''@;'; put 'put ''b2JhbFRpbWVsaW5lU3R5bGVzLmdldChNKT8/YTUpLHRoaXMuX3VwZGF0ZVN0eWxlKE0sWil9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFt''@;'; put 'put ''ZS5zZXQoYSxsKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGEpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSl9c25hcHNob3RDdXJyZW50U3R5''@;'; put 'put ''bGVzKCl7Zm9yKGxldFtsLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChsLGEpLHRoaXMuX3VwZGF0ZVN0eWxlKGwsYSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBw''@;'; put 'put ''cm9wZXJ0aWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWwucHVzaChhKTtyZXR1cm4gbH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpe2wuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl9zdHlsZVN1bW1h''@;'; put 'put ''cnkuZ2V0KGQpOyghaHx8YS50aW1lPmgudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGQsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7Y29uc3QgbD1uZXcgU2V0LGE9bmV3IFNldCxkPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09''@;'; put 'put ''PXRoaXMuZHVyYXRpb247bGV0IGg9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKE0sRCk9Pntjb25zdCBaPW5ldyBNYXAoWy4uLnRoaXMuX2JhY2tGaWxsLC4uLk1dKTtaLmZvckVhY2goKHJlLGNlKT0+eyIhIj09PXJlP2wuYWRkKGNlKTpyZT09PWE1JiZhLmFkZChjZSl9KSxkfHxaLnNl''@;'; put 'put ''dCgib2Zmc2V0IixEL3RoaXMuZHVyYXRpb24pLGgucHVzaChaKX0pO2NvbnN0IGY9Wy4uLmwudmFsdWVzKCldLHY9Wy4uLmEudmFsdWVzKCldO2lmKGQpe2NvbnN0IE09aFswXSxEPW5ldyBNYXAoTSk7TS5zZXQoIm9mZnNldCIsMCksRC5zZXQoIm9mZnNldCIsMSksaD1bTSxEXX1yZXR1cm4g''@;'; put 'put ''ekcodGhpcy5lbGVtZW50LGgsZix2LHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX1jbGFzcyBsJGUgZXh0ZW5kcyBNT3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNPSExKXtzdXBlcihsLGEsdi5kZWxheSksdGhpcy5rZXlmcmFtZXM9ZCx0aGlzLnByZVN0''@;'; put 'put ''eWxlUHJvcHM9aCx0aGlzLnBvc3RTdHlsZVByb3BzPWYsdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9TSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnYuZHVyYXRpb24sZGVsYXk6di5kZWxheSxlYXNpbmc6di5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5''@;'; put 'put ''ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IGw9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmEsZHVyYXRpb246ZCxlYXNpbmc6aH09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZhKXtjb25zdCBmPVtdLHY9ZCthLE09YS92LEQ9bmV3IE1h''@;'; put 'put ''cChsWzBdKTtELnNldCgib2Zmc2V0IiwwKSxmLnB1c2goRCk7Y29uc3QgWj1uZXcgTWFwKGxbMF0pO1ouc2V0KCJvZmZzZXQiLEloZShNKSksZi5wdXNoKFopO2NvbnN0IHJlPWwubGVuZ3RoLTE7Zm9yKGxldCBjZT0xO2NlPD1yZTtjZSsrKXtsZXQgYmU9bmV3IE1hcChsW2NlXSk7Y29uc3Qg''@;'; put 'put ''RWU9YmUuZ2V0KCJvZmZzZXQiKTtiZS5zZXQoIm9mZnNldCIsSWhlKChhK0VlKmQpL3YpKSxmLnB1c2goYmUpfWQ9dixhPTAsaD0iIixsPWZ9cmV0dXJuIHpHKHRoaXMuZWxlbWVudCxsLHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGQsYSxoLCEwKX19ZnVuY3Rpb24g''@;'; put 'put ''SWhlKGMsbD0zKXtjb25zdCBhPU1hdGgucG93KDEwLGwtMSk7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfWZ1bmN0aW9uIFJoZShjLGwsYSxkLGgsZix2LE0sRCxaLHJlLGNlLGJlKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxm''@;'; put 'put ''cm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOnYsdGltZWxpbmVzOk0scXVlcmllZEVsZW1lbnRzOkQscHJlU3R5bGVQcm9wczpaLHBvc3RTdHlsZVByb3BzOnJlLHRvdGFsVGltZTpjZSxlcnJvcnM6YmV9fWNvbnN0IFdHPXt9O2NsYXNzIExoZXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCl7dGhpcy5fdHJpZ2dlck5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX3N0YXRlU3R5bGVzPWR9bWF0Y2gobCxhLGQsaCl7cmV0dXJuIGZ1bmN0aW9uIHUkZShjLGwsYSxkLGgpe3JldHVybiBjLnNvbWUoZj0+ZihsLGEsZCxoKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLGwsYSxkLGgpfWJ1''@;'; put 'put ''aWxkU3R5bGVzKGwsYSxkKXtsZXQgaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09bCYmKGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KGw/LnRvU3RyaW5nKCkpfHxoKSxoP2guYnVpbGRTdHlsZXMoYSxkKTpuZXcgTWFwfWJ1aWxkKGwsYSxkLGgsZix2LE0sRCxa''@;'; put 'put ''LHJlKXtjb25zdCBjZT1bXSxiZT10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8V0csQmU9dGhpcy5idWlsZFN0eWxlcyhkLE0mJk0ucGFyYW1zfHxXRyxjZSkscWU9RCYmRC5wYXJhbXN8fFdHLHJ0PXRoaXMuYnVpbGRTdHlsZXMoaCxxZSxjZSkscHQ9bmV3IFNl''@;'; put 'put ''dCxkdD1uZXcgTWFwLEp0PW5ldyBNYXAsdm49InZvaWQiPT09aCxDbj17cGFyYW1zOk9oZShxZSxiZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LHRuPXJlP1tdOlVHKGwsYSx0aGlzLmFzdC5hbmltYXRpb24sZix2LEJlLHJ0LENuLFosY2UpO2xldCBNbj0wO3JldHVybiB0bi5m''@;'; put 'put ''b3JFYWNoKHdyPT57TW49TWF0aC5tYXgod3IuZHVyYXRpb24rd3IuZGVsYXksTW4pfSksY2UubGVuZ3RoP1JoZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCx2bixCZSxydCxbXSxbXSxkdCxKdCxNbixjZSk6KHRuLmZvckVhY2god3I9Pntjb25zdCBHcj13ci5lbGVtZW50LG1yPVRoKGR0LEdy''@;'; put 'put ''LG5ldyBTZXQpO3dyLnByZVN0eWxlUHJvcHMuZm9yRWFjaChhaT0+bXIuYWRkKGFpKSk7Y29uc3QgR249VGgoSnQsR3IsbmV3IFNldCk7d3IucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChhaT0+R24uYWRkKGFpKSksR3IhPT1hJiZwdC5hZGQoR3IpfSksUmhlKGEsdGhpcy5fdHJpZ2dlck5hbWUs''@;'; put 'put ''ZCxoLHZuLEJlLHJ0LHRuLFsuLi5wdC52YWx1ZXMoKV0sZHQsSnQsTW4pKX19ZnVuY3Rpb24gT2hlKGMsbCl7Y29uc3QgYT17Li4ubH07cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFtkLGhdKT0+e251bGwhPWgmJihhW2RdPWgpfSksYX1jbGFzcyBkJGV7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEsdGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1PaGUobCx0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiB0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmPT57InN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiBmJiZmLmZvckVhY2goKHYsTSk9Pnt2JiYodj1uRSh2LGgsYSkpO2NvbnN0IEQ9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLGEpO3Y9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoTSxELHYsYSksZC5zZXQoTSx2KX0pfSksZH19''@;'; put 'put ''Y2xhc3MgZiRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9bmV3IE1hcCxhLnN0YXRlcy5mb3JFYWNoKGg9Pnt0aGlzLnN0YXRlcy5zZXQoaC5uYW1lLG5l''@;'; put 'put ''dyBkJGUoaC5zdHlsZSxoLm9wdGlvbnMmJmgub3B0aW9ucy5wYXJhbXN8fHt9LGQpKX0pLFBoZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxQaGUodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGEudHJhbnNpdGlvbnMuZm9yRWFjaChoPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2go''@;'; put 'put ''bmV3IExoZShsLGgsdGhpcy5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIHAkZShjLGwsYSl7cmV0dXJuIG5ldyBMaGUoYyx7dHlwZTpBby5UcmFuc2l0aW9uLGFuaW1hdGlvbjp7dHlwZTpBby5TZXF1ZW5jZSxzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNo''@;'; put 'put ''ZXJzOlsodixNKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFu''@;'; put 'put ''c2l0aW9uRmFjdG9yaWVzLmZpbmQodj0+di5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyhsLGEsZCl9fWZ1bmN0aW9uIFBoZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEs''@;'; put 'put ''Yy5nZXQobCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBnJGU9bmV3IENPO2NsYXNzIG0kZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5f''@;'; put 'put ''cGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9QkcodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gd0dlKGMpe3JldHVybiBuZXcgUW4oMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5z''@;'; put 'put ''ZXQobCxmKX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9YmhlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxk''@;'; put 'put ''PXt9KXtjb25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IHY7Y29uc3QgTT1uZXcgTWFwO2lmKGY/KHY9VUcodGhpcy5fZHJpdmVyLGEsZixPRyxnTyxuZXcgTWFwLG5ldyBNYXAsZCxnJGUsaCksdi5mb3JFYWNoKHJlPT57Y29uc3QgY2U9VGgoTSxyZS5lbGVtZW50LG5l''@;'; put 'put ''dyBNYXApO3JlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goYmU9PmNlLnNldChiZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiBDR2UoKXtyZXR1cm4gbmV3IFFuKDMzMDAsITEpfSgpKSx2PVtdKSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBTR2UoYyl7cmV0dXJuIG5ldyBRbigzNTA0LCEx''@;'; put 'put ''KX0oKTtNLmZvckVhY2goKHJlLGNlKT0+e3JlLmZvckVhY2goKGJlLEVlKT0+e3JlLnNldChFZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGNlLEVlLGE1KSl9KX0pO2NvbnN0IFo9RG0odi5tYXAocmU9Pntjb25zdCBjZT1NLmdldChyZS5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQ''@;'; put 'put ''bGF5ZXIocmUsbmV3IE1hcCxjZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldChsLFopLFoub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNoKFopLFp9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0''@;'; put 'put ''aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBNR2UoYyl7''@;'; put 'put ''cmV0dXJuIG5ldyBRbigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1rRyhhLCIiLCIiLCIiKTtyZXR1cm4gVEcodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigicmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRo''@;'; put 'put ''aXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmYucGF1c2UoKTticmVhaztj''@;'; put 'put ''YXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2goKTticmVhaztjYXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBGaGU9Im5nLWFuaW1hdGUtcXVldWVkIixZRz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIsdyRlPVtdLEhoZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjoh''@;'; put 'put ''MSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sQyRlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxlMz0iX19uZ19yZW1vdmVkIjtjbGFzcyBHR3tnZXQgcGFyYW1zKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24gRSRlKGMpe3JldHVybiBjPz9udWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3R7''@;'; put 'put ''dmFsdWU6ZiwuLi52fT1sO3RoaXMub3B0aW9ucz12fWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMucGFyYW1z''@;'; put 'put ''O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCByRT0idm9pZCIsJEc9bmV3IEdHKHJFKTtjbGFzcyBTJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQsdGhpcy5w''@;'; put 'put ''bGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2wsRjIoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRoaXMuX3Ry''@;'; put 'put ''aWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiB4R2UoYyxsKXtyZXR1cm4gbmV3IFFuKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIEVHZShjKXtyZXR1cm4gbmV3IFFuKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBUJGUoYyl7cmV0dXJuInN0''@;'; put 'put ''YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiBUR2UoYyxsKXtyZXR1cm4gbmV3IFFuKDM0MDAsITEpfSgpO2NvbnN0IGY9VGgodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSx2PXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2godik7Y29uc3QgTT1UaCh0''@;'; put 'put ''aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIE0uaGFzKGEpfHwoRjIobCxtTyksRjIobCxtTysiLSIrYSksTS5zZXQoYSwkRykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBEPWYuaW5kZXhPZih2KTtEPj0wJiZmLnNwbGljZShE''@;'; put 'put ''LDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8TS5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwpO2lmKCFh''@;'; put 'put ''KXRocm93IGZ1bmN0aW9uIEFHZShjKXtyZXR1cm4gbmV3IFFuKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLHY9bmV3IEtHKHRoaXMuaWQsYSxsKTtsZXQgTT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50Lmdl''@;'; put 'put ''dChsKTtNfHwoRjIobCxtTyksRjIobCxtTysiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxNPW5ldyBNYXApKTtsZXQgRD1NLmdldChhKTtjb25zdCBaPW5ldyBHRyhkLHRoaXMuaWQpO2lmKCEoZCYmZC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJkQmJlouYWJz''@;'; put 'put ''b3JiT3B0aW9ucyhELm9wdGlvbnMpLE0uc2V0KGEsWiksRHx8KEQ9JEcpLFoudmFsdWUhPT1yRSYmRC52YWx1ZT09PVoudmFsdWUpe2lmKCFmdW5jdGlvbiBEJGUoYyxsKXtjb25zdCBhPU9iamVjdC5rZXlzKGMpLGQ9T2JqZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVy''@;'; put 'put ''biExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiExfXJldHVybiEwfShELnBhcmFtcyxaLnBhcmFtcykpe2NvbnN0IHFlPVtdLHJ0PWYubWF0Y2hTdHlsZXMoRC52YWx1ZSxELnBhcmFt''@;'; put 'put ''cyxxZSkscHQ9Zi5tYXRjaFN0eWxlcyhaLnZhbHVlLFoucGFyYW1zLHFlKTtxZS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHFlKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e1A3KGwscnQpLE1wKGwscHQpfSl9cmV0dXJufWNvbnN0IGJlPVRoKHRoaXMuX2VuZ2luZS5w''@;'; put 'put ''bGF5ZXJzQnlFbGVtZW50LGwsW10pO2JlLmZvckVhY2gocWU9PntxZS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmcWUudHJpZ2dlck5hbWU9PWEmJnFlLnF1ZXVlZCYmcWUuZGVzdHJveSgpfSk7bGV0IEVlPWYubWF0Y2hUcmFuc2l0aW9uKEQudmFsdWUsWi52YWx1ZSxsLFoucGFyYW1zKSxCZT0h''@;'; put 'put ''MTtpZighRWUpe2lmKCFoKXJldHVybjtFZT1mLmZhbGxiYWNrVHJhbnNpdGlvbixCZT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTphLHRyYW5zaXRpb246RWUsZnJvbVN0YXRlOkQsdG9T''@;'; put 'put ''dGF0ZTpaLHBsYXllcjp2LGlzRmFsbGJhY2tUcmFuc2l0aW9uOkJlfSksQmV8fChGMihsLEZoZSksdi5vblN0YXJ0KCgpPT57aV8obCxGaGUpfSkpLHYub25Eb25lKCgpPT57bGV0IHFlPXRoaXMucGxheWVycy5pbmRleE9mKHYpO3FlPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKHFlLDEpO2Nv''@;'; put 'put ''bnN0IHJ0PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihydCl7bGV0IHB0PXJ0LmluZGV4T2Yodik7cHQ+PTAmJnJ0LnNwbGljZShwdCwxKX19KSx0aGlzLnBsYXllcnMucHVzaCh2KSxiZS5wdXNoKHYpLHZ9ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxl''@;'; put 'put ''dGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChkLGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50''@;'; put 'put ''Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5n''@;'; put 'put ''aW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkobCx2TywhMCk7ZC5mb3JFYWNoKGg9PntpZihoW2UzXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0''@;'; put 'put ''Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZvckVhY2godj0+di50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50''@;'; put 'put ''aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCksdj1uZXcgTWFwO2lmKGYpe2NvbnN0IE09W107aWYoZi5mb3JFYWNoKChELFopPT57aWYodi5zZXQoWixELnZh''@;'; put 'put ''bHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoWikpe2NvbnN0IHJlPXRoaXMudHJpZ2dlcihsLFosckUsaCk7cmUmJk0ucHVzaChyZSl9fSksTS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSx2KSxkJiZEbShNKS5vbkRvbmUoKCk9''@;'; put 'put ''PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGEmJmQp''@;'; put 'put ''e2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5uYW1lO2lmKGguaGFzKHYpKXJldHVybjtoLmFkZCh2KTtjb25zdCBEPXRoaXMuX3RyaWdnZXJzLmdldCh2KS5mYWxsYmFja1RyYW5zaXRpb24sWj1kLmdldCh2KXx8JEcscmU9bmV3IEdHKHJFKSxjZT1uZXcgS0codGhp''@;'; put 'put ''cy5pZCx2LGwpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6dix0cmFuc2l0aW9uOkQsZnJvbVN0YXRlOlosdG9TdGF0ZTpyZSxwbGF5ZXI6Y2UsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1v''@;'; put 'put ''dmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYobC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKSx0aGlzLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihsLGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0''@;'; put 'put ''aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxzZXtsZXQgdj1sO2Zvcig7dj12LnBhcmVudE5vZGU7KWlmKGQuc3RhdGVzQnlFbGVtZW50LmdldCh2KSl7aD0hMDticmVha319fWlm''@;'; put 'put ''KHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25zdCBmPWxbZTNdOyghZnx8Zj09PUhoZSkmJihkLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVz''@;'; put 'put ''dHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxDb21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe0YyKGwsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25z''@;'; put 'put ''dCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtjb25zdCBmPWQuZWxlbWVudCx2PXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO3YmJnYuZm9yRWFjaChNPT57aWYoTS5uYW1lPT1kLnRyaWdnZXJOYW1lKXtjb25zdCBEPWtHKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0''@;'; put 'put ''ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO0QuX2RhdGE9bCxURyhkLnBsYXllcixNLnBoYXNlLEQsTS5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57aC5kZXN0cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNv''@;'; put 'put ''cnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsdj1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT12P2Ytdjp0aGlzLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJv''@;'; put 'put ''eShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxsKX19Y2xhc3MgTSRle19vblJlbW92YWxDb21wbGV0ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5zY2hlZHVsZXI9aCx0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBs''@;'; put 'put ''YXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMu''@;'; put 'put ''X25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25S''@;'; put 'put ''ZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9fWdldCBxdWV1ZWRQbGF5ZXJzKCl7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGE9PnthLnBsYXllcnMuZm9yRWFjaChkPT57ZC5xdWV1ZWQmJmwucHVzaChkKX0pfSksbH1jcmVhdGVOYW1lc3BhY2UobCxhKXtj''@;'; put 'put ''b25zdCBkPW5ldyBTJGUobCxhLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxhKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGEpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoYSxkKSx0aGlzLmNvbGxl''@;'; put 'put ''Y3RFbnRlckVsZW1lbnQoYSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXT1kfV9iYWxhbmNlTmFtZXNwYWNlTGlzdChsLGEpe2NvbnN0IGQ9dGhpcy5fbmFtZXNwYWNlTGlzdCxoPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ7aWYoZC5sZW5ndGgtMT49MCl7bGV0IHY9ITEsTT10aGlz''@;'; put 'put ''LmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpO2Zvcig7TTspe2NvbnN0IEQ9aC5nZXQoTSk7aWYoRCl7Y29uc3QgWj1kLmluZGV4T2YoRCk7ZC5zcGxpY2UoWisxLDAsbCksdj0hMDticmVha31NPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoTSl9dnx8ZC51bnNoaWZ0KGwpfWVsc2Ug''@;'; put 'put ''ZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3BhY2VMb29r''@;'; put 'put ''dXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3RoaXMubmFt''@;'; put 'put ''ZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19''@;'; put 'put ''KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlmKGgubmFt''@;'; put 'put ''ZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZih4TyhhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxkLGgpLCEw''@;'; put 'put ''fXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIXhPKGEpKXJldHVybjtjb25zdCBmPWFbZTNdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCB2PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGEp''@;'; put 'put ''O3Y+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UodiwxKX1pZihsKXtjb25zdCB2PXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3YmJnYuaW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwpe3RoaXMu''@;'; put 'put ''Y29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQobCksRjIobCxZRykpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRpc2FibGVk''@;'; put 'put ''Tm9kZXMuZGVsZXRlKGwpLGlfKGwsWUcpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZih4TyhhKSl7dGhpcy5zY2hlZHVsZXI/Lm5vdGlmeSgpO2NvbnN0IGg9bD90aGlzLl9mZXRjaE5hbWVzcGFjZShsKTpudWxsO2g/aC5yZW1vdmVOb2RlKGEsZCk6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZChs''@;'; put 'put ''LGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShhLGQpfW1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5jb2xsZWN0ZWRM''@;'; put 'put ''ZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtlM109e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6Zn19bGlzdGVuKGwsYSxkLGgsZil7cmV0dXJuIHhPKGEpP3RoaXMuX2ZldGNo''@;'; put 'put ''TmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLGwuZWxlbWVudCxsLmZyb21TdGF0ZS52YWx1ZSxsLnRvU3RhdGUudmFsdWUsZCxoLGwuZnJvbVN0YXRlLm9w''@;'; put 'put ''dGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsdk8sITApO2EuZm9yRWFjaChkPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChkKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVy''@;'; put 'put ''aWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLFBHLCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGQpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJz''@;'; put 'put ''QnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTth''@;'; put 'put ''JiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIERtKHRoaXMucGxheWVycykub25Eb25lKCgpPT5sKCkpO2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUobCl7Y29uc3Qg''@;'; put 'put ''YT1sW2UzXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbZTNdPUhoZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShhLm5hbWVzcGFjZUlkKTtkJiZkLmNsZWFyRWxlbWVudENhY2hlKGwpfXRoaXMu''@;'; put 'put ''X29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMoWUcpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLCExKSx0aGlzLmRyaXZlci5xdWVyeShsLCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZD0+e3RoaXMubWFy''@;'; put 'put ''a0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGQsaCk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3SG9zdEVsZW1l''@;'; put 'put ''bnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtkKyspRjIodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2RdLCJuZy1zdGFy''@;'; put 'put ''LWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2NvbnN0IGQ9W107dHJ5e2E9dGhpcy5fZmx1c2hBbmltYXRpb25zKGQsbCl9ZmluYWxseXtmb3IobGV0''@;'; put 'put ''IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2RdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVy''@;'; put 'put ''cz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChkPT5kKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9EbShhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9yRWFjaChoPT5oKCkpfX1yZXBvcnRFcnJvcihsKXt0aHJvdyBmdW5jdGlvbiBrR2UoYyl7cmV0dXJuIG5ldyBRbigzNDAyLCExKX0o''@;'; put 'put ''KX1fZmx1c2hBbmltYXRpb25zKGwsYSl7Y29uc3QgZD1uZXcgQ08saD1bXSxmPW5ldyBNYXAsdj1bXSxNPW5ldyBNYXAsRD1uZXcgTWFwLFo9bmV3IE1hcCxyZT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKEpuPT57cmUuYWRkKEpuKTtjb25zdCBEcj10aGlzLmRyaXZlci5x''@;'; put 'put ''dWVyeShKbiwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCAkcj0wOyRyPERyLmxlbmd0aDskcisrKXJlLmFkZChEclskcl0pfSk7Y29uc3QgY2U9dGhpcy5ib2R5Tm9kZSxiZT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksRWU9QmhlKGJlLHRoaXMuY29s''@;'; put 'put ''bGVjdGVkRW50ZXJFbGVtZW50cyksQmU9bmV3IE1hcDtsZXQgcWU9MDtFZS5mb3JFYWNoKChKbixEcik9Pntjb25zdCAkcj1PRytxZSsrO0JlLnNldChEciwkciksSm4uZm9yRWFjaCh3aT0+RjIod2ksJHIpKX0pO2NvbnN0IHJ0PVtdLHB0PW5ldyBTZXQsZHQ9bmV3IFNldDtmb3IobGV0IEpu''@;'; put 'put ''PTA7Sm48dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtKbisrKXtjb25zdCBEcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbSm5dLCRyPURyW2UzXTskciYmJHIuc2V0Rm9yUmVtb3ZhbCYmKHJ0LnB1c2goRHIpLHB0LmFkZChEciksJHIuaGFzQW5pbWF0aW9uP3RoaXMu''@;'; put 'put ''ZHJpdmVyLnF1ZXJ5KERyLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2god2k9PnB0LmFkZCh3aSkpOmR0LmFkZChEcikpfWNvbnN0IEp0PW5ldyBNYXAsdm49QmhlKGJlLEFycmF5LmZyb20ocHQpKTt2bi5mb3JFYWNoKChKbixEcik9Pntjb25zdCAkcj1nTytxZSsrO0p0LnNldChE''@;'; put 'put ''ciwkciksSm4uZm9yRWFjaCh3aT0+RjIod2ksJHIpKX0pLGwucHVzaCgoKT0+e0VlLmZvckVhY2goKEpuLERyKT0+e2NvbnN0ICRyPUJlLmdldChEcik7Sm4uZm9yRWFjaCh3aT0+aV8od2ksJHIpKX0pLHZuLmZvckVhY2goKEpuLERyKT0+e2NvbnN0ICRyPUp0LmdldChEcik7Sm4uZm9yRWFj''@;'; put 'put ''aCh3aT0+aV8od2ksJHIpKX0pLHJ0LmZvckVhY2goSm49Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoSm4pfSl9KTtjb25zdCBDbj1bXSx0bj1bXTtmb3IobGV0IEpuPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7Sm4+PTA7Sm4tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W0puXS5kcmFpblF1''@;'; put 'put ''ZXVlZFRyYW5zaXRpb25zKGEpLmZvckVhY2goJHI9Pntjb25zdCB3aT0kci5wbGF5ZXIsZWE9JHIuZWxlbWVudDtpZihDbi5wdXNoKHdpKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCBhcj1lYVtlM107aWYoYXImJmFyLnNldEZvck1vdmUpe2lmKGFyLnByZXZp''@;'; put 'put ''b3VzVHJpZ2dlcnNWYWx1ZXMmJmFyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKCRyLnRyaWdnZXJOYW1lKSl7Y29uc3QgSHI9YXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoJHIudHJpZ2dlck5hbWUpLHFyPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCgkci5lbGVtZW50KTtpZihx''@;'; put 'put ''ciYmcXIuaGFzKCRyLnRyaWdnZXJOYW1lKSl7Y29uc3Qgb249cXIuZ2V0KCRyLnRyaWdnZXJOYW1lKTtvbi52YWx1ZT1Icixxci5zZXQoJHIudHJpZ2dlck5hbWUsb24pfX1yZXR1cm4gdm9pZCB3aS5kZXN0cm95KCl9fWNvbnN0IGZhPSFjZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVu''@;'; put 'put ''dChjZSxlYSksdnQ9SnQuZ2V0KGVhKSxOdD1CZS5nZXQoZWEpLEZ0PXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oJHIsZCxOdCx2dCxmYSk7aWYoRnQuZXJyb3JzJiZGdC5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIHRuLnB1c2goRnQpO2lmKGZhKXJldHVybiB3aS5vblN0YXJ0KCgpPT5QNyhl''@;'; put 'put ''YSxGdC5mcm9tU3R5bGVzKSksd2kub25EZXN0cm95KCgpPT5NcChlYSxGdC50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHdpKTtpZigkci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gd2kub25TdGFydCgoKT0+UDcoZWEsRnQuZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+TXAoZWEs''@;'; put 'put ''RnQudG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7Y29uc3QgSG49W107RnQudGltZWxpbmVzLmZvckVhY2goYXI9Pnthci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGFyLmVsZW1lbnQpfHxIbi5wdXNoKGFyKX0pLEZ0LnRpbWVsaW5lcz1Ibixk''@;'; put 'put ''LmFwcGVuZChlYSxGdC50aW1lbGluZXMpLHYucHVzaCh7aW5zdHJ1Y3Rpb246RnQscGxheWVyOndpLGVsZW1lbnQ6ZWF9KSxGdC5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChhcj0+VGgoTSxhcixbXSkucHVzaCh3aSkpLEZ0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoYXIsSHIpPT57aWYoYXIu''@;'; put 'put ''c2l6ZSl7bGV0IHFyPUQuZ2V0KEhyKTtxcnx8RC5zZXQoSHIscXI9bmV3IFNldCksYXIuZm9yRWFjaCgob24seW4pPT5xci5hZGQoeW4pKX19KSxGdC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChhcixIcik9PntsZXQgcXI9Wi5nZXQoSHIpO3FyfHxaLnNldChIcixxcj1uZXcgU2V0KSxhci5m''@;'; put 'put ''b3JFYWNoKChvbix5bik9PnFyLmFkZCh5bikpfSl9KTtpZih0bi5sZW5ndGgpe2NvbnN0IEpuPVtdO3RuLmZvckVhY2goRHI9PntKbi5wdXNoKGZ1bmN0aW9uIERHZShjLGwpe3JldHVybiBuZXcgUW4oMzUwNSwhMSl9KCkpfSksQ24uZm9yRWFjaChEcj0+RHIuZGVzdHJveSgpKSx0aGlzLnJl''@;'; put 'put ''cG9ydEVycm9yKEpuKX1jb25zdCBNbj1uZXcgTWFwLHdyPW5ldyBNYXA7di5mb3JFYWNoKEpuPT57Y29uc3QgRHI9Sm4uZWxlbWVudDtkLmhhcyhEcikmJih3ci5zZXQoRHIsRHIpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKEpuLnBsYXllci5uYW1lc3BhY2VJZCxKbi5pbnN0cnVjdGlv''@;'; put 'put ''bixNbikpfSksaC5mb3JFYWNoKEpuPT57Y29uc3QgRHI9Sm4uZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoRHIsITEsSm4ubmFtZXNwYWNlSWQsSm4udHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCh3aT0+e1RoKE1uLERyLFtdKS5wdXNoKHdpKSx3aS5kZXN0cm95KCl9KX0pO2Nv''@;'; put 'put ''bnN0IEdyPXJ0LmZpbHRlcihKbj0+emhlKEpuLEQsWikpLG1yPW5ldyBNYXA7VmhlKG1yLHRoaXMuZHJpdmVyLGR0LFosYTUpLmZvckVhY2goSm49Pnt6aGUoSm4sRCxaKSYmR3IucHVzaChKbil9KTtjb25zdCBhaT1uZXcgTWFwO0VlLmZvckVhY2goKEpuLERyKT0+e1ZoZShhaSx0aGlzLmRy''@;'; put 'put ''aXZlcixuZXcgU2V0KEpuKSxELCIhIil9KSxHci5mb3JFYWNoKEpuPT57Y29uc3QgRHI9bXIuZ2V0KEpuKSwkcj1haS5nZXQoSm4pO21yLnNldChKbixuZXcgTWFwKFsuLi5Ecj8uZW50cmllcygpPz9bXSwuLi4kcj8uZW50cmllcygpPz9bXV0pKX0pO2NvbnN0IF9pPVtdLE9uPVtdLHpyPXt9''@;'; put 'put ''O3YuZm9yRWFjaChKbj0+e2NvbnN0e2VsZW1lbnQ6RHIscGxheWVyOiRyLGluc3RydWN0aW9uOndpfT1KbjtpZihkLmhhcyhEcikpe2lmKHJlLmhhcyhEcikpcmV0dXJuICRyLm9uRGVzdHJveSgoKT0+TXAoRHIsd2kudG9TdHlsZXMpKSwkci5kaXNhYmxlZD0hMCwkci5vdmVycmlkZVRvdGFs''@;'; put 'put ''VGltZSh3aS50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKCRyKTtsZXQgZWE9enI7aWYod3Iuc2l6ZT4xKXtsZXQgdnQ9RHI7Y29uc3QgTnQ9W107Zm9yKDt2dD12dC5wYXJlbnROb2RlOyl7Y29uc3QgRnQ9d3IuZ2V0KHZ0KTtpZihGdCl7ZWE9RnQ7YnJlYWt9TnQucHVzaCh2dCl9TnQuZm9yRWFj''@;'; put 'put ''aChGdD0+d3Iuc2V0KEZ0LGVhKSl9Y29uc3QgZmE9dGhpcy5fYnVpbGRBbmltYXRpb24oJHIubmFtZXNwYWNlSWQsd2ksTW4sZixhaSxtcik7aWYoJHIuc2V0UmVhbFBsYXllcihmYSksZWE9PT16cilfaS5wdXNoKCRyKTtlbHNle2NvbnN0IHZ0PXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQo''@;'; put 'put ''ZWEpO3Z0JiZ2dC5sZW5ndGgmJigkci5wYXJlbnRQbGF5ZXI9RG0odnQpKSxoLnB1c2goJHIpfX1lbHNlIFA3KERyLHdpLmZyb21TdHlsZXMpLCRyLm9uRGVzdHJveSgoKT0+TXAoRHIsd2kudG9TdHlsZXMpKSxPbi5wdXNoKCRyKSxyZS5oYXMoRHIpJiZoLnB1c2goJHIpfSksT24uZm9yRWFj''@;'; put 'put ''aChKbj0+e2NvbnN0IERyPWYuZ2V0KEpuLmVsZW1lbnQpO2lmKERyJiZEci5sZW5ndGgpe2NvbnN0ICRyPURtKERyKTtKbi5zZXRSZWFsUGxheWVyKCRyKX19KSxoLmZvckVhY2goSm49PntKbi5wYXJlbnRQbGF5ZXI/Sm4uc3luY1BsYXllckV2ZW50cyhKbi5wYXJlbnRQbGF5ZXIpOkpuLmRl''@;'; put 'put ''c3Ryb3koKX0pO2ZvcihsZXQgSm49MDtKbjxydC5sZW5ndGg7Sm4rKyl7Y29uc3QgRHI9cnRbSm5dLCRyPURyW2UzXTtpZihpXyhEcixnTyksJHImJiRyLmhhc0FuaW1hdGlvbiljb250aW51ZTtsZXQgd2k9W107aWYoTS5zaXplKXtsZXQgZmE9TS5nZXQoRHIpO2ZhJiZmYS5sZW5ndGgmJndp''@;'; put 'put ''LnB1c2goLi4uZmEpO2xldCB2dD10aGlzLmRyaXZlci5xdWVyeShEcixQRywhMCk7Zm9yKGxldCBOdD0wO050PHZ0Lmxlbmd0aDtOdCsrKXtsZXQgRnQ9TS5nZXQodnRbTnRdKTtGdCYmRnQubGVuZ3RoJiZ3aS5wdXNoKC4uLkZ0KX19Y29uc3QgZWE9d2kuZmlsdGVyKGZhPT4hZmEuZGVzdHJv''@;'; put 'put ''eWVkKTtlYS5sZW5ndGg/QSRlKHRoaXMsRHIsZWEpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShEcil9cmV0dXJuIHJ0Lmxlbmd0aD0wLF9pLmZvckVhY2goSm49Pnt0aGlzLnBsYXllcnMucHVzaChKbiksSm4ub25Eb25lKCgpPT57Sm4uZGVzdHJveSgpO2NvbnN0IERyPXRoaXMucGxheWVycy5p''@;'; put 'put ''bmRleE9mKEpuKTt0aGlzLnBsYXllcnMuc3BsaWNlKERyLDEpfSksSm4ucGxheSgpfSksX2l9YWZ0ZXJGbHVzaChsKXt0aGlzLl9mbHVzaEZucy5wdXNoKGwpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0UHJldmlvdXNQbGF5ZXJz''@;'; put 'put ''KGwsYSxkLGgsZil7bGV0IHY9W107aWYoYSl7Y29uc3QgTT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTtNJiYodj1NKX1lbHNle2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihNKXtjb25zdCBEPSFmfHxmPT1yRTtNLmZvckVhY2goWj0+e1oucXVl''@;'; put 'put ''dWVkfHwhRCYmWi50cmlnZ2VyTmFtZSE9aHx8di5wdXNoKFopfSl9fXJldHVybihkfHxoKSYmKHY9di5maWx0ZXIoTT0+IShkJiZkIT1NLm5hbWVzcGFjZUlkfHxoJiZoIT1NLnRyaWdnZXJOYW1lKSkpLHZ9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCx2''@;'; put 'put ''PWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6bCxNPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgRCBvZiBhLnRpbWVsaW5lcyl7Y29uc3QgWj1ELmVsZW1lbnQscmU9WiE9PWYsY2U9VGgoZCxaLFtdKTt0aGlzLl9nZXRQcmV2aW91c1Bs''@;'; put 'put ''YXllcnMoWixyZSx2LE0sYS50b1N0YXRlKS5mb3JFYWNoKEVlPT57Y29uc3QgQmU9RWUuZ2V0UmVhbFBsYXllcigpO0JlLmJlZm9yZURlc3Ryb3kmJkJlLmJlZm9yZURlc3Ryb3koKSxFZS5kZXN0cm95KCksY2UucHVzaChFZSl9KX1QNyhmLGEuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9u''@;'; put 'put ''KGwsYSxkLGgsZix2KXtjb25zdCBNPWEudHJpZ2dlck5hbWUsRD1hLmVsZW1lbnQsWj1bXSxyZT1uZXcgU2V0LGNlPW5ldyBTZXQsYmU9YS50aW1lbGluZXMubWFwKEJlPT57Y29uc3QgcWU9QmUuZWxlbWVudDtyZS5hZGQocWUpO2NvbnN0IHJ0PXFlW2UzXTtpZihydCYmcnQucmVtb3ZlZEJl''@;'; put 'put ''Zm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBfeChCZS5kdXJhdGlvbixCZS5kZWxheSk7Y29uc3QgcHQ9cWUhPT1ELGR0PWZ1bmN0aW9uIGskZShjKXtjb25zdCBsPVtdO3JldHVybiBqaGUoYyxsKSxsfSgoZC5nZXQocWUpfHx3JGUpLm1hcChNbj0+TW4uZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVy''@;'; put 'put ''KE1uPT4hIU1uLmVsZW1lbnQmJk1uLmVsZW1lbnQ9PT1xZSksSnQ9Zi5nZXQocWUpLHZuPXYuZ2V0KHFlKSxDbj1iaGUodGhpcy5fbm9ybWFsaXplcixCZS5rZXlmcmFtZXMsSnQsdm4pLHRuPXRoaXMuX2J1aWxkUGxheWVyKEJlLENuLGR0KTtpZihCZS5zdWJUaW1lbGluZSYmaCYmY2UuYWRk''@;'; put 'put ''KHFlKSxwdCl7Y29uc3QgTW49bmV3IEtHKGwsTSxxZSk7TW4uc2V0UmVhbFBsYXllcih0biksWi5wdXNoKE1uKX1yZXR1cm4gdG59KTtaLmZvckVhY2goQmU9PntUaCh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEJlLmVsZW1lbnQsW10pLnB1c2goQmUpLEJlLm9uRG9uZSgoKT0+ZnVu''@;'; put 'put ''Y3Rpb24geCRlKGMsbCxhKXtsZXQgZD1jLmdldChsKTtpZihkKXtpZihkLmxlbmd0aCl7Y29uc3QgaD1kLmluZGV4T2YoYSk7ZC5zcGxpY2UoaCwxKX0wPT1kLmxlbmd0aCYmYy5kZWxldGUobCl9cmV0dXJuIGR9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsQmUuZWxlbWVudCxCZSkp''@;'; put 'put ''fSkscmUuZm9yRWFjaChCZT0+RjIoQmUsTWhlKSk7Y29uc3QgRWU9RG0oYmUpO3JldHVybiBFZS5vbkRlc3Ryb3koKCk9PntyZS5mb3JFYWNoKEJlPT5pXyhCZSxNaGUpKSxNcChELGEudG9TdHlsZXMpfSksY2UuZm9yRWFjaChCZT0+e1RoKGgsQmUsW10pLnB1c2goRWUpfSksRWV9X2J1aWxk''@;'; put 'put ''UGxheWVyKGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKGwuZWxlbWVudCxhLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxkKTpuZXcgX3gobC5kdXJhdGlvbixsLmRlbGF5KX19Y2xhc3MgS0d7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZXNwYWNl''@;'; put 'put ''SWQ9bCx0aGlzLnRyaWdnZXJOYW1lPWEsdGhpcy5lbGVtZW50PWQsdGhpcy5fcGxheWVyPW5ldyBfeCx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1h''@;'; put 'put ''cmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIobCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPWwsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGEsZCk9Pnth''@;'; put 'put ''LmZvckVhY2goaD0+VEcobCxkLHZvaWQgMCxoKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZShsLnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGwpe3RoaXMudG90YWxUaW1lPWx9c3luY1BsYXllckV2ZW50cyhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmbC5vblN0YXJ0KCgpPT5hLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksbC5vbkRvbmUoKCk9''@;'; put 'put ''PnRoaXMuZmluaXNoKCkpLGwub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQobCxhKXtUaCh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsbCxbXSkucHVzaChhKX1vbkRvbmUobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLGwpLHRoaXMuX3BsYXll''@;'; put 'put ''ci5vbkRvbmUobCl9b25TdGFydChsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLGwpLHRoaXMuX3BsYXllci5vblN0YXJ0KGwpfW9uRGVzdHJveShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsbCksdGhpcy5fcGxheWVyLm9uRGVzdHJv''@;'; put 'put ''eShsKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXll''@;'; put 'put ''ci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlz''@;'; put 'put ''Ll9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihsKXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGwpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZhLnRyaWdnZXJDYWxsYmFjayhsKX19ZnVuY3Rpb24geE8oYyl7cmV0dXJuIGMmJjE9PT1jLm5vZGVUeXBlfWZ1bmN0aW9uIE5oZShjLGwpe2NvbnN0IGE9Yy5zdHlsZS5kaXNwbGF5O3JldHVybiBjLnN0eWxlLmRpc3BsYXk9bD8/Im5vbmUi''@;'; put 'put ''LGF9ZnVuY3Rpb24gVmhlKGMsbCxhLGQsaCl7Y29uc3QgZj1bXTthLmZvckVhY2goRD0+Zi5wdXNoKE5oZShEKSkpO2NvbnN0IHY9W107ZC5mb3JFYWNoKChELFopPT57Y29uc3QgcmU9bmV3IE1hcDtELmZvckVhY2goY2U9Pntjb25zdCBiZT1sLmNvbXB1dGVTdHlsZShaLGNlLGgpO3JlLnNl''@;'; put 'put ''dChjZSxiZSksKCFiZXx8MD09YmUubGVuZ3RoKSYmKFpbZTNdPUMkZSx2LnB1c2goWikpfSksYy5zZXQoWixyZSl9KTtsZXQgTT0wO3JldHVybiBhLmZvckVhY2goRD0+TmhlKEQsZltNKytdKSksdn1mdW5jdGlvbiBCaGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKE09PmEu''@;'; put 'put ''c2V0KE0sW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIHYoTSl7aWYoIU0pcmV0dXJuIDE7bGV0IEQ9Zi5nZXQoTSk7aWYoRClyZXR1cm4gRDtjb25zdCBaPU0ucGFyZW50Tm9kZTtyZXR1cm4gRD1hLmhhcyhaKT9aOmguaGFz''@;'; put 'put ''KFopPzE6dihaKSxmLnNldChNLEQpLER9cmV0dXJuIGwuZm9yRWFjaChNPT57Y29uc3QgRD12KE0pOzEhPT1EJiZhLmdldChEKS5wdXNoKE0pfSksYX1mdW5jdGlvbiBGMihjLGwpe2MuY2xhc3NMaXN0Py5hZGQobCl9ZnVuY3Rpb24gaV8oYyxsKXtjLmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1''@;'; put 'put ''bmN0aW9uIEEkZShjLGwsYSl7RG0oYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIGpoZShjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV07ZCBpbnN0YW5jZW9mIFIwZT9qaGUoZC5wbGF5ZXJzLGwpOmwucHVzaChkKX19ZnVu''@;'; put 'put ''Y3Rpb24gemhlKGMsbCxhKXtjb25zdCBkPWEuZ2V0KGMpO2lmKCFkKXJldHVybiExO2xldCBoPWwuZ2V0KGMpO3JldHVybiBoP2QuZm9yRWFjaChmPT5oLmFkZChmKSk6bC5zZXQoYyxkKSxhLmRlbGV0ZShjKSwhMH1jbGFzcyBpRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9''@;'; put 'put ''YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IE0kZShsLmJvZHksYSxkLGgpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBtJGUobC5ib2R5LGEsZCksdGhp''@;'; put 'put ''cy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShmLHYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IHY9bCsiLSIraDtsZXQgTT10aGlzLl90cmlnZ2VyQ2FjaGVbdl07aWYoIU0pe2NvbnN0IEQ9W10scmU9''@;'; put 'put ''QkcodGhpcy5fZHJpdmVyLGYsRCxbXSk7aWYoRC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24geUdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNDA0LCExKX0oKTtNPWZ1bmN0aW9uIGgkZShjLGwsYSl7cmV0dXJuIG5ldyBmJGUoYyxsLGEpfShoLHJlLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdn''@;'; put 'put ''ZXJDYWNoZVt2XT1NfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxNKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGwsYSl9b25JbnNl''@;'; put 'put ''cnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxl''@;'; put 'put ''bWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2Ysdl09eWhlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixhLHYsaCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQsaCl9bGlzdGVu''@;'; put 'put ''KGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbdixNXT15aGUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3Rlbih2LGEsTSxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0aGlzLl90cmFu''@;'; put 'put ''c2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5S''@;'; put 'put ''ZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1jbGFzcyBhRXtzdGF0aWN7dGhpcy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwfWNvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fc3RhcnRTdHlsZXM9YSx0aGlzLl9lbmRTdHlsZXM9ZCx0aGlzLl9zdGF0ZT0wO2xldCBoPWFFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGwpO2h8fGFFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGwsaD1uZXcgTWFwKSx0aGlzLl9p''@;'; put 'put ''bml0aWFsU3R5bGVzPWh9c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJk1wKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDIm''@;'; put 'put ''JihNcCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8''@;'; put 'put ''MyYmKGFFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoUDcodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKFA3KHRoaXMuX2VsZW1lbnQs''@;'; put 'put ''dGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksTXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19ZnVuY3Rpb24gcUcoYyl7bGV0IGw9bnVsbDtyZXR1cm4gYy5mb3JFYWNoKChhLGQpPT57KGZ1bmN0aW9uIFIkZShjKXtyZXR1''@;'; put 'put ''cm4iZGlzcGxheSI9PT1jfHwicG9zaXRpb24iPT09Y30pKGQpJiYobD1sfHxuZXcgTWFwLGwuc2V0KGQsYSkpfSksbH1jbGFzcyBVaGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5lbGVtZW50PWwsdGhpcy5rZXlmcmFtZXM9YSx0aGlzLm9wdGlvbnM9ZCx0aGlzLl9zcGVjaWFsU3R5bGVz''@;'; put 'put ''PWgsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtd''@;'; put 'put ''LHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBNYXAsdGhpcy5fZHVyYXRpb249ZC5kdXJhdGlvbix0aGlzLl9kZWxheT1kLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlv''@;'; put 'put ''bit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3Jl''@;'; put 'put ''U3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgbD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxsLHRoaXMub3B0aW9ucyks''@;'; put 'put ''dGhpcy5fZmluYWxLZXlmcmFtZT1sLmxlbmd0aD9sW2wubGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3QgYT0oKT0+dGhpcy5fb25GaW5pc2goKTt0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpLHRoaXMub25EZXN0cm95KCgpPT57dGhpcy5kb21QbGF5ZXIucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKX0pfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJu''@;'; put 'put ''IGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZu''@;'; put 'put ''cy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVy''@;'; put 'put ''KCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9''@;'; put 'put ''cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3Ro''@;'; put 'put ''aXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jl''@;'; put 'put ''c2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rl''@;'; put 'put ''c3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9''@;'; put 'put ''c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuKyh0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT8/MCkvdGhpcy50aW1lfWdldCB0b3RhbFRp''@;'; put 'put ''bWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2NvbnN0IGw9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChkLGgpPT57Im9mZnNldCIhPT1oJiZsLnNldChoLHRoaXMuX2ZpbmlzaGVkP2Q6''@;'; put 'put ''VkcodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgWmhle3ZhbGlkYXRl''@;'; put 'put ''U3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGwsYSl7cmV0dXJuIHdoZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIERH''@;'; put 'put ''KGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gQ2hlKGwsYSxkKX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiBWRyhsLGEpfWFuaW1hdGUobCxhLGQsaCxmLHY9W10pe2NvbnN0IEQ9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihELmVhc2luZz1m''@;'; put 'put ''KTtjb25zdCBaPW5ldyBNYXAscmU9di5maWx0ZXIoRWU9PkVlIGluc3RhbmNlb2YgVWhlKTsoZnVuY3Rpb24gVUdlKGMsbCl7cmV0dXJuIDA9PT1jfHwwPT09bH0pKGQsaCkmJnJlLmZvckVhY2goRWU9PntFZS5jdXJyZW50U25hcHNob3QuZm9yRWFjaCgoQmUscWUpPT5aLnNldChxZSxCZSkp''@;'; put 'put ''fSk7bGV0IGNlPWZ1bmN0aW9uIEJHZShjKXtyZXR1cm4gYy5sZW5ndGg/Y1swXWluc3RhbmNlb2YgTWFwP2M6Yy5tYXAobD0+bmV3IE1hcChPYmplY3QuZW50cmllcyhsKSkpOltdfShhKS5tYXAoRWU9Pm5ldyBNYXAoRWUpKTtjZT1mdW5jdGlvbiBaR2UoYyxsLGEpe2lmKGEuc2l6ZSYmbC5s''@;'; put 'put ''ZW5ndGgpe2xldCBkPWxbMF0saD1bXTtpZihhLmZvckVhY2goKGYsdik9PntkLmhhcyh2KXx8aC5wdXNoKHYpLGQuc2V0KHYsZil9KSxoLmxlbmd0aClmb3IobGV0IGY9MTtmPGwubGVuZ3RoO2YrKyl7bGV0IHY9bFtmXTtoLmZvckVhY2goTT0+di5zZXQoTSxWRyhjLE0pKSl9fXJldHVybiBs''@;'; put 'put ''fShsLGNlLFopO2NvbnN0IGJlPWZ1bmN0aW9uIEkkZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1xRyhsWzBdKSxsLmxlbmd0aD4xJiYoZD1xRyhsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPXFHKGwpKSxh''@;'; put 'put ''fHxkP25ldyBhRShjLGEsZCk6bnVsbH0obCxjZSk7cmV0dXJuIG5ldyBVaGUobCxjZSxELGJlKX19Y29uc3QgV2hlPSJALmRpc2FibGVkIjtjbGFzcyBZaGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMu''@;'; put 'put ''X29uRGVzdHJveT1oLHRoaXMuXHUwMjc1dHlwZT0wfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShsKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4obCl9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlz''@;'; put 'put ''LmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVh''@;'; put 'put ''dGVFbGVtZW50KGwsYSl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChsKX1hcHBlbmRDaGlsZChsLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobCxh''@;'; put 'put ''KSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCwhMSl9aW5zZXJ0QmVmb3JlKGwsYSxkLGg9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGwsYSxkKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCxoKX1yZW1vdmVDaGlsZChs''@;'; put 'put ''LGEsZCl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxhLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQobCxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBh''@;'; put 'put ''cmVudE5vZGUobCl9bmV4dFNpYmxpbmcobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobCl9c2V0QXR0cmlidXRlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGwsYSxkLGgpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVB''@;'; put 'put ''dHRyaWJ1dGUobCxhLGQpfWFkZENsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhsLGEpfXJlbW92ZUNsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyhsLGEpfXNldFN0eWxlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUobCxhLGQsaCl9cmVtb3ZlU3R5''@;'; put 'put ''bGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUobCxhLGQpfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApJiZhPT1XaGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLCEhZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9c2V0VmFsdWUobCxhKXt0''@;'; put 'put ''aGlzLmRlbGVnYXRlLnNldFZhbHVlKGwsYSl9bGlzdGVuKGwsYSxkKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnMobCxhKX19Y2xhc3MgTCRlIGV4dGVuZHMgWWhle2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSxkLGgsZil7c3VwZXIoYSxkLGgsZiksdGhpcy5mYWN0b3J5PWwsdGhpcy5uYW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApPyIuIj09YS5jaGFyQXQoMSkmJmE9PVdoZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGwsZD12b2lkIDA9PT1kfHwh''@;'; put 'put ''IWQpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCxsLGEuc2xpY2UoMSksZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9bGlzdGVuKGwsYSxkKXtpZigiQCI9PWEuY2hhckF0KDApKXtjb25zdCBoPWZ1bmN0aW9uIE8kZShjKXtzd2l0Y2goYyl7Y2FzZSJi''@;'; put 'put ''b2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gY319KGwpO2xldCBmPWEuc2xpY2UoMSksdj0iIjtyZXR1cm4iQCIhPWYuY2hhckF0KDApJiYoW2Ysdl09ZnVuY3Rp''@;'; put 'put ''b24gUCRlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCIuIik7cmV0dXJuW2Muc3Vic3RyaW5nKDAsbCksYy5zbGljZShsKzEpXX0oZikpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLGgsZix2LE09Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKE0uX2Rh''@;'; put 'put ''dGF8fC0xLGQsTSl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfX1jbGFzcyBGJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZGVsZWdhdGU9bCx0aGlzLmVuZ2luZT1hLHRoaXMuX3pvbmU9ZCx0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMu''@;'; put 'put ''X2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsYS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+e2NvbnN0IHY9Zj8ucGFyZW50Tm9kZShoKTt2JiZmLnJlbW92ZUNoaWxkKHYsaCl9fWNyZWF0ZVJlbmRl''@;'; put 'put ''cmVyKGwsYSl7Y29uc3QgaD10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGwsYSk7aWYoIWx8fCFhPy5kYXRhPy5hbmltYXRpb24pe2NvbnN0IFo9dGhpcy5fcmVuZGVyZXJDYWNoZTtsZXQgcmU9Wi5nZXQoaCk7cmV0dXJuIHJlfHwocmU9bmV3IFloZSgiIixoLHRoaXMuZW5naW5lLCgp''@;'; put 'put ''PT5aLmRlbGV0ZShoKSksWi5zZXQoaCxyZSkpLHJlfWNvbnN0IGY9YS5pZCx2PWEuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3Rlcih2LGwpO2NvbnN0IE09Wj0+e0FycmF5LmlzQXJyYXkoWik/Wi5mb3JFYWNoKE0pOnRoaXMuZW5n''@;'; put 'put ''aW5lLnJlZ2lzdGVyVHJpZ2dlcihmLHYsbCxaLm5hbWUsWil9O3JldHVybiBhLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goTSksbmV3IEwkZSh0aGlzLHYsaCx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRl''@;'; put 'put ''LmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGwsYSxkKXtpZihsPj0wJiZsPHRoaXMuX21pY3JvdGFza0lkKXJldHVybiB2b2lkIHRoaXMuX3pvbmUucnVuKCgpPT5h''@;'; put 'put ''KGQpKTtjb25zdCBoPXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcjswPT1oLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e2guZm9yRWFjaChmPT57Y29uc3RbdixNXT1mO3YoTSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119''@;'; put 'put ''KX0pLGgucHVzaChbYSxkXSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9''@;'; put 'put ''KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX1sZXQgSCRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBpRXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkLGgs''@;'; put 'put ''ZmkodmIse29wdGlvbmFsOiEwfSkpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSx4cihSRykseHIoTEcpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBHaGU9W3twcm92aWRlOkxHLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gTiRlKCl7cmV0dXJuIG5ldyBUaGV9fSx7cHJvdmlkZTppRSx1c2VDbGFzczpIJGV9LHtwcm92aWRlOng4LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gViRlKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4gbmV3IEYkZShjLGwsYSl9LGRlcHM6W2NaLGlFLFdhXX1dLFhHPVt7cHJvdmlkZTpSRyx1c2VGYWN0b3J5OigpPT5uZXcgWmhlfSx7cHJvdmlkZTpQayx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5HaGVdLCRoZT1be3Byb3ZpZGU6UkcsdXNlQ2xhc3M6SUd9LHtwcm92''@;'; put 'put ''aWRlOlBrLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLkdoZV07bGV0IEIkZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczphLmRpc2FibGVBbmltYXRpb25zPyRoZTpYR319c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6WEcsaW1wb3J0czpbVG9lXX0pfX1yZXR1cm4gY30pKCksaiRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9''@;'; put 'put ''bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNs''@;'; put 'put ''czozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsInAiKSxPZSgyLCI0MDQgLSBOb3QgRm91bmQiKSxoZSgpKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLEtoZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVC''@;'; put 'put ''bG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3YuaHJlZj0iZGF0YTp0ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLHYuZG93bmxvYWQ9YCR7ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSx2LmNsaWNr''@;'; put 'put ''KCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh2KX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0''@;'; put 'put ''KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXthLnRhcmdldC52YWx1ZT0iIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB6JGUoYyxsKXsxJmMmJihjaSgwKSxkZSgxLCJzcGFuIiwxOSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJwIiksT2UoNCwiRGVwbG95aW5nLi4uIiksaGUoKSx1aSgpKX1mdW5jdGlvbiBVJGUoYyxsKXsxJmMmJkd0KDAsImNs''@;'; put 'put ''ci1pY29uIiwzMCl9ZnVuY3Rpb24gWiRlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIFckZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjgpLG10KDEsVSRlLDEsMCwiY2xyLWljb24iLDI5KSgyLFokZSwxLDAsImNsci1pY29uIiwyNSksZGUoMywicCIpLE9lKDQs''@;'; put 'put ''IkRlcGxveSBTQVMgSm9icyIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLCEwPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLHhlKCJuZ0lmIiwhIWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayl9fWZ1bmN0''@;'; put 'put ''aW9uIFkkZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBHJGUoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gJCRlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOCksbXQoMSxZJGUsMSwwLCJjbHItaWNvbiIsMjkpKDIsRyRlLDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDI1KSxkZSgzLCJwIiksT2UoNCwiQ3JlYXRlIGRhdGFiYXNlIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxmZSgpLHhlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtl''@;'; put 'put ''RGF0YSl9fWZ1bmN0aW9uIEskZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBxJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJwIiwyMCksT2UoMiwiRG9uZSIpLGhlKCksR3QoMywiaHIiLDIxKSxtdCg0LFckZSw1LDIsImRpdiIsMjIpKDUs''@;'; put 'put ''JCRlLDUsMiwiZGl2IiwyMiksR3QoNiwiaHIiLDIxKSxkZSg3LCJkaXYiLDIzKSg4LCJidXR0b24iLDI0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksbXQoOSxLJGUsMSwwLCJjbHItaWNvbiIsMjUpLE9lKDEwLCIgTEFV''@;'; put 'put ''TkNIICIpLGhlKCksZGUoMTEsImJ1dHRvbiIsMjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxPZSgxMiwiIERvd25sb2Fk''@;'; put 'put ''IGxvZyAiKSxoZSgpKCksR3QoMTMsImhyIiwyMSksZGUoMTQsImRpdiIsMjMpKDE1LCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLEN0KGguYXV0b2RlcGxveURvbmU9ITEpfSksT2UoMTYsIiBD''@;'; put 'put ''bG9zZSAiKSxoZSgpLGRlKDE3LCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9wZW5TYXNSZXF1ZXN0c01vZGFsKCkpfSksT2UoMTgsIiBTQVMgUmVxdWVzdHMgIiksaGUoKSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDQp''@;'; put 'put ''LHhlKCJuZ0lmIixudWxsIT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxmZSg0KSx4ZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBh''@;'; put 'put ''Y2t8fCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gWCRlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNikoMSwiZGl2IiwxNyksbXQoMix6JGUsNSwwLCJuZy1jb250YWluZXIiLDE4KSgzLHEkZSwxOSwzLCJuZy1jb250YWluZXIiLDE4KSxoZSgpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHhlKCJuZ0lmIiwhYS5hdXRvZGVwbG95RG9uZSksZmUoKSx4ZSgibmdJZiIsYS5hdXRvZGVwbG95RG9uZSl9fWZ1bmN0aW9uIEokZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBs''@;'; put 'put ''aWNpdDt4ZSgidmFsdWUiLGEuaWQpLGZlKCksSXIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBRJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJzZWxlY3QiLDMyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShm''@;'; put 'put ''LnNlbGVjdGVkQWRtaW5Hcm91cCxoKXx8KGYuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpLEN0KGgpfSksbXQoMSxKJGUsMiwyLCJvcHRpb24iLDMzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3BpKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCksZmUoKSx4ZSgibmdGb3JPZiIsYS5h''@;'; put 'put ''ZG1pbkdyb3Vwcyl9fWZ1bmN0aW9uIGVLZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM1KX1sZXQgdEtlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuZGVwbG95U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRo''@;'; put 'put ''aXMuc2FzVml5YVNlcnZpY2U9Zix0aGlzLmxvZ2dlclNlcnZpY2U9dix0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRo''@;'; put 'put ''aXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSEx''@;'; put 'put ''LHRoaXMucmVjcmVhdGVEYXRhYmFzZT0hMCx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmFkbWluR3JvdXBzTG9hZGluZz0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuYXV0b0RlcGxveVN0YXR1cz17ZGVwbG95U2VydmljZVBhY2s6bnVsbCxydW5NYWtlRGF0YTpudWxs''@;'; put 'put ''fX1uZ09uSW5pdCgpe3RoaXMuZ2V0QWRtaW5Hcm91cHMoKX1nZXRBZG1pbkdyb3Vwcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuYWRtaW5Hcm91cHNMb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0QWRtaW5Hcm91cHMoKS5zdWJzY3JpYmUoZD0+e2EuYWRtaW5H''@;'; put 'put ''cm91cHNMb2FkaW5nPSExLGEuYWRtaW5Hcm91cHM9ZC5pdGVtcy5tYXAoaD0+KHtpZDpoLmlkLG5hbWU6aC5uYW1lfSkpfSl9KSgpfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRl''@;'; put 'put ''cGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAsITApLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMCxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMSxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246''@;'; put 'put ''IFxuICR7IiIhPT1oP2g6ZH1gKSxhLmF1dG9kZXBsb3lpbmc9ITEsdm9pZChhLmF1dG9kZXBsb3lEb25lPSExKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfXJ1bkF1dG9EZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooZD0hMSl7YS5hdXRvZGVwbG95aW5nPSEwLGQm''@;'; put 'put ''JmEuZXhlY3V0ZUpzb24oKSxhLnJlY3JlYXRlRGF0YWJhc2U/YS5jcmVhdGVEYXRhYmFzZSgpOmEuYXV0b2RlcGxveURvbmU9ITB9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y3JlYXRlRGF0YWJhc2UoKXt0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJv''@;'; put 'put ''bWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4''@;'; put 'put ''dCghMCl9KS50aGVuKGg9Pnt0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSEhKGgucmVzdWx0JiZoLnJl''@;'; put 'put ''c3VsdC5sZW5ndGg+MCksdHlwZW9mIGguc2FzanNBYm9ydDwidSImJnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsaC5zYXNqc0Fib3J0WzBdLk1TRyx7U1lTV0FSTklOR1RFWFQ6aC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6aC5TWVNFUlJPUlRFWFQs''@;'; put 'put ''TUFDOmguc2FzanNBYm9ydFswXS5NQUN9KX0pLmNhdGNoKGg9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgibWFrZWRhdGEiLEpTT04uc3RyaW5naWZ5KGgpKSx0aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7''@;'; put 'put ''dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofX0pfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10''@;'; put 'put ''aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9cmVjcmVhdGVEYXRhYmFzZUNsaWNrZWQoYSl7ITA9PT1hLnRhcmdldC5jaGVja2VkJiYodGhpcy5yZWNyZWF0ZURh''@;'; put 'put ''dGFiYXNlTW9kYWw9ITApfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b3BlblNhc1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmln''@;'; put 'put ''YXRlVG9Ib21lLmVtaXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh2YyksR2UoS2hlKSxHZSh0bCksR2UoVFcpLEdlKFNkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXV0b21hdGlj''@;'; put 'put ''LWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MiLGFwcExvYzoiYXBwTG9jIixkY1BhdGg6ImRjUGF0aCIsc2VsZWN0ZWRBZG1pbkdyb3VwOiJzZWxlY3RlZEFkbWluR3Jv''@;'; put 'put ''dXAifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6MzcsdmFyczo4LGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1j''@;'; put 'put ''b250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiLCJkYy1sb2MtaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJuYW1l''@;'; put 'put ''IiwiZGNsb2MiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsxLCJidG4t''@;'; put 'put ''YXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEs''@;'; put 'put ''Im1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImF1dG8tZGVwbG95Il0sWzEsInNwaW5uZXItYm94Il0sWzQsIm5nSWYiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24t''@;'; put 'put ''c2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsiY2xhc3MiLCJkZXBsb3ktZXJyb3IiLCJzaGFwZSIsInRpbWVz''@;'; put 'put ''LWNpcmNsZSIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwiYWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWzEsImRlcGxveS1zdGF0''@;'; put 'put ''dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJzaGFwZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl0sWyJj''@;'; put 'put ''bHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsiY2xySW5saW5lIiwiIiwxLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYo''@;'; put 'put ''bXQoMCxYJGUsNCwyLCJkaXYiLDApLGRlKDEsImg0IiwxKSxPZSgyLCJWaXlhIERlcGxveSIpLGhlKCksR3QoMywiaHIiKSxkZSg0LCJsYWJlbCIsMiksT2UoNSwiQXBwIExvYyIpLGhlKCksZGUoNiwiZGl2IiwzKSg3LCJkaXYiLDQpKDgsInAiLDUpLE9lKDkpLGhlKCkoKSgpLGRlKDEwLCJs''@;'; put 'put ''YWJlbCIsMiksT2UoMTEsIkRDIExvYyIpLGhlKCksZGUoMTIsImRpdiIsNikoMTMsImRpdiIsNCkoMTQsImlucHV0Iiw3KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGNQYXRoLHYpfHwoaC5kY1BhdGg9diksdn0pLGhlKCkoKSgpLGRlKDE1LCJsYWJlbCIs''@;'; put 'put ''MiksT2UoMTYsIlNBUyBBZG1pbiBncm91cCIpLGhlKCksZGUoMTcsImRpdiIsMykoMTgsImRpdiIsNCksbXQoMTksUSRlLDIsMiwic2VsZWN0Iiw4KSgyMCxlS2UsMSwwLCJjbHItc3Bpbm5lciIsOSksaGUoKSgpLEd0KDIxLCJociIpLGRlKDIyLCJidXR0b24iLDEwKSxIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGgucnVuQXV0b0RlcGxveSgpfSksT2UoMjMsIiBEZXBsb3lcbiIpLGhlKCksZGUoMjQsImNsci1tb2RhbCIsMTEpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCx2KXx8KGgucmVjcmVh''@;'; put 'put ''dGVEYXRhYmFzZU1vZGFsPXYpLHZ9KSxkZSgyNSwiaDMiLDEyKSxPZSgyNiwiV2FybmluZyIpLGhlKCksZGUoMjcsImRpdiIsMTMpLE9lKDI4LCIgVGhpcyBhY3Rpb24gd2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQs''@;'; put 'put ''IHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksZGUoMjksInN0cm9uZyIpLE9lKDMwKSxoZSgpLE9lKDMxLCIuICIpLGhlKCksZGUoMzIsImRpdiIsMTQpKDMzLCJidXR0b24iLDE1KSxI''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGgucmVjcmVhdGVEYXRhYmFzZT0hMX0pLE9lKDM0LCIgQ2FuY2VsICIpLGhlKCksZGUoMzUsImJ1dHRvbiIsMTUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWNyZWF0ZURhdGFi''@;'; put 'put ''YXNlTW9kYWw9ITEsaC5yZWNyZWF0ZURhdGFiYXNlPSEwfSksT2UoMzYsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoeGUoIm5nSWYiLGguYXV0b2RlcGxveWluZyksZmUoOSksQ3IoaC5hcHBMb2MpLGZlKDUpLHBpKCJuZ01vZGVsIixoLmRjUGF0aCksZmUoNSkseGUoIm5nSWYiLCFoLmFkbWlu''@;'; put 'put ''R3JvdXBzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5hZG1pbkdyb3Vwc0xvYWRpbmcpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsKSx4ZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLENyKGguZGNQYXRoKSl9LGRlcGVuZGVuY2llczpbbnMs''@;'; put 'put ''YmEsQTIsazIscWwsVDIsbmwsR3MsSGwsb3UsS3UsZHMsWjEseDcsUmRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSkc9KCk9Pih7c3RhbmRhbG9uZTohMH0pO2Z1bmN0aW9uIG5LZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNikoMSwicCIsNyksT2UoMiwiUGxlYXNl''@;'; put 'put ''IGxvZyBpbiBmaXJzdCIpLGhlKCksZGUoMywibGFiZWwiLDgpLE9lKDQsIlVzZXJuYW1lIiksaGUoKSxkZSg1LCJkaXYiLDkpKDYsImRpdiIsMTApLEd0KDcsImlucHV0IiwxMSksaGUoKSgpLGRlKDgsImxhYmVsIiwxMiksT2UoOSwiUGFzc3dvcmQiKSxoZSgpLGRlKDEwLCJkaXYiLDkpKDEx''@;'; put 'put ''LCJkaXYiLDEwKSxHdCgxMiwiaW5wdXQiLDEzKSxoZSgpKCksZGUoMTMsImJ1dHRvbiIsMTQpLE9lKDE0LCJMb2cgaW4iKSxoZSgpKCkpfWZ1bmN0aW9uIHJLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgi''@;'; put 'put ''dmFsdWUiLGEuaWQpLGZlKCksSXIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBpS2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCksSXIoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5j''@;'; put 'put ''dGlvbiBhS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxPZSgxKSxtdCgyLGlLZSwyLDEsInNwYW4iLDUpLFFzKDMsImpzb24iKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLm5hbWUpLGZlKCksSXIoIiAiLGEubmFtZSwiICIpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLCJ7fSIhPURjKDMsMyxhLmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gb0tlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLE9lKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLGhlKCkpfWZ1bmN0aW9uIHNLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRv''@;'; put 'put ''biIsMzcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLEd0KDEsImNsci1pY29uIiwzOCksaGUoKX19ZnVuY3Rpb24gbEtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwicCIsMzkpLE9l''@;'; put 'put ''KDIsIkZpbGUgZXhlY3V0ZSBjb21wbGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1s''@;'; put 'put ''b2ciLCJ0eHQiKSl9KSxPZSg2LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSx1aSgpfX1mdW5jdGlvbiBjS2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxJcigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0''@;'; put 'put ''aW9uIHVLZShjLGwpezEmYyYmKGNpKDApLGRlKDEsInNwYW4iLDI1KSxPZSgyLCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxkZSgzLCJzcGFuIiksT2UoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gZEtlKGMsbCl7MSZjJiYoY2koMCksR3Qo''@;'; put 'put ''MSwiY2xyLWljb24iLDQ2KSxkZSgyLCJzcGFuIiksT2UoMywiIFZhbGlkYXRpb24gZmFpbGVkICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gaEtlKGMsbCl7MSZjJiYoY2koMCksR3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJzcGFuIiksT2UoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLGhl''@;'; put 'put ''KCksdWkoKSl9ZnVuY3Rpb24gZktlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NSksbXQoMSx1S2UsNSwwLCJuZy1jb250YWluZXIiLDUpKDIsZEtlLDQsMCwibmctY29udGFpbmVyIiw1KSgzLGhLZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2Zl''@;'; put 'put ''KCkseGUoIm5nSWYiLGEuaXNWYWxpZGF0aW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksZmUoKSx4ZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIHBL''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsInAiLDM5KSxPZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLG10KDQsY0tlLDIsMSwiZGl2Iiw0MSksZGUoNSwiYnV0dG9uIiw0MiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChMZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLE9lKDYsIiBMZXQncyBnZXQgc3RhcnRlZCAiKSxoZSgpLGRlKDcsImJ1dHRvbiIsNDIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRh''@;'; put 'put ''UmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxPZSg4LCIgRG93bmxvYWQgbG9nICIpLGhlKCksZGUoOSwiYnV0dG9uIiw0MiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLE9lKDEwLCIgVmFsaWRh''@;'; put 'put ''dGUgIiksaGUoKSxtdCgxMSxmS2UsNCwzLCJkaXYiLDQzKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg0KSx4ZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxmZSg3KSx4ZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5n''@;'; put 'put ''KX19ZnVuY3Rpb24gZ0tlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZm9ybSIpKDIsImRpdiIsMTUpKDMsImxhYmVsIiwxNiksT2UoNCwiQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDUsImRpdiIsMTcpKDYsImRpdiIsMTgpKDcsInNlbGVjdCIsMTkpLGdpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxtdCg4LHJLZSwyLDIsIm9wdGlvbiIsMjApLGhlKCkoKSgpKCksZGUoOSwiZGl2IiwxNSkoMTAsImRp''@;'; put 'put ''diIpKDExLCJsYWJlbCIsMTYpLE9lKDEyLCJDb250ZXh0IiksaGUoKSxkZSgxMywiZGl2IiwxNykoMTQsImRpdiIsMTgpKDE1LCJzZWxlY3QiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQ29udGV4dCxo''@;'; put 'put ''KXx8KGYuc2VsZWN0ZWRDb250ZXh0PWgpLEN0KGgpfSksbXQoMTYsYUtlLDQsNSwib3B0aW9uIiwyMCksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5leGVjdXRhYmxlQ29udGV4dCgpKX0pLEd0KDE4LCJjbHIt''@;'; put 'put ''aWNvbiIsMjMpLGhlKCkoKSxkZSgxOSwiZGl2IiwyNCkoMjAsInNwYW4iLDI1KSxPZSgyMSwiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSxkZSgyMiwic3BhbiIpLE9lKDIzLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpKCksZGUoMjQsImxhYmVsIiwyNiksT2UoMjUsIkRDIExv''@;'; put 'put ''YyIpLGhlKCksZGUoMjYsImRpdiIsOSkoMjcsImRpdiIsMTApKDI4LCJpbnB1dCIsMjcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuZGNQYXRoLGgpfHwoZi5kY1BhdGg9aCksQ3QoaCl9KSxIdCgiZm9jdXNvdXQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2F2ZURjUGF0aCgpKX0pLGhlKCkoKSgpLGRlKDI5LCJwIiwyOCksT2UoMzAsIiBTZWxlY3QgSlNPTiBmaWxlIHRvIHVwbG9hZCAoanNvbiBidWlsZCBmaWxlIHByZWxvYWRlZCk6ICIpLGhlKCksZGUoMzEsImRpdiIsMjkpKDMyLCJpbnB1dCIs''@;'; put 'put ''MzApLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkpzb25GaWxlQ2hhbmdlKGgpKX0pLGhlKCkoKSxkZSgzMywiZGl2IiwzMSkoMzQsImJ1''@;'; put 'put ''dHRvbiIsMzIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5leGVjdXRlSnNvbigpKX0pLE9lKDM1LCIgU1VCTUlUIEpTT04gIiksaGUoKSxtdCgzNixvS2UsMiwwLCJzcGFuIiw1KSxoZSgpLGRlKDM3LCJwIiwyOCksT2UoMzgsIlNlbGVjdCBTQVMgZmlsZSB0''@;'; put 'put ''byB1cGxvYWQ6IiksaGUoKSxkZSgzOSwiZGl2IiwyOSkoNDAsImlucHV0IiwzMCksSHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZi5v''@;'; put 'put ''blNhc0ZpbGVDaGFuZ2UoaCksQ3QoZi5kb3dubG9hZEZpbGVCdG49ITApfSksaGUoKSxtdCg0MSxzS2UsMiwwLCJidXR0b24iLDMzKSxoZSgpLGRlKDQyLCJkaXYiLDMxKSg0MywiYnV0dG9uIiwzNCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmV4ZWN1dGVT''@;'; put 'put ''QVMoKSl9KSxPZSg0NCwiIFNVQk1JVCAiKSxoZSgpKCkoKSxtdCg0NSxsS2UsNywwLCJuZy1jb250YWluZXIiLDUpLGRlKDQ2LCJidXR0b24iLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY3JlYXRlRGF0YWJhc2UoKSl9KSxPZSg0NywiIENyZWF0ZSBE''@;'; put 'put ''YXRhYmFzZSAiKSxoZSgpLG10KDQ4LHBLZSwxMiwyLCJuZy1jb250YWluZXIiLDUpLGhlKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg3KSxwaSgibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLHhlKCJuZ01vZGVsT3B0aW9ucyIsWXMoMTksSkcpKSxmZSgpLHhlKCJuZ0Zv''@;'; put 'put ''ck9mIixhLmFkbWluR3JvdXBzKSxmZSgyKSxUcigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksZmUoNSkscGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb250ZXh0KSx4ZSgibmdNb2RlbE9wdGlvbnMiLFlzKDIwLEpHKSksZmUoKSx4ZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksZmUoMyks''@;'; put 'put ''VHIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSxmZSg5KSxwaSgibmdNb2RlbCIsYS5kY1BhdGgpLHhlKCJuZ01vZGVsT3B0aW9ucyIsWXMoMjEsSkcpKSxmZSg2KSx4ZSgiY2xyTG9hZGluZyIsYS5pc1N1Ym1pdHRpbmdKc29uKSxmZSgyKSx4ZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0''@;'; put 'put ''ZWQpLGZlKDUpLHhlKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksZmUoMikseGUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxmZSgyKSx4ZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLGZlKCkseGUoImNsckxvYWRpbmciLGEuY3JlYXRlRGF0YWJhc2VMb2FkaW5nKSxmZSgy''@;'; put 'put ''KSx4ZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKX19bGV0IG1LZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5kZXBsb3lTZXJ2aWNlPWYs''@;'; put 'put ''dGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLm5lZWRzTG9naW49ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmFsbENvbnRleHRzPVtdLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRBZG1pbkdyb3VwPSIiLHRoaXMuc2VsZWN0ZWRDb250ZXh0PSIiLHRoaXMuam9iTG9nPSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmxpbmVzT2ZDb2RlPVtdLHRoaXMuZmlsZU5hbWU9IiIsdGhpcy5wcmVsb2FkZWRGaWxlPSEwLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITEs''@;'; put 'put ''dGhpcy5jb250ZXh0c0xvYWRpbmc9ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5leGVjdXRpbmdTY3JpcHQ9ITEsdGhpcy5kb3dubG9hZEZpbGVCdG49ITEsdGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0h''@;'; put 'put ''MSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0ibm9uZSJ9bmdPbkluaXQoKXt9ZXhlY3V0YWJsZUNvbnRleHQoKXtyZXR1cm4gZWUoZnVuY3Rpb24qKCl7fSkoKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElu''@;'; put 'put ''cHV0KGEpfW9uU2FzRmlsZUNoYW5nZShhKXt0aGlzLnByZWxvYWRlZEZpbGU9ITE7bGV0IGQ9YS50YXJnZXQuZmlsZXNbMF07dGhpcy5maWxlTmFtZT1kLm5hbWU7bGV0IGg9bmV3IEZpbGVSZWFkZXI7aC5vbmxvYWQ9KCk9PntoLnJlc3VsdCYmKHRoaXMubGluZXNPZkNvZGU9aC5yZXN1bHQu''@;'; put 'put ''c3BsaXQoIlxuIiksdGhpcy5saW5lc09mQ29kZT10aGlzLmxpbmVzT2ZDb2RlLmZpbHRlcihmPT4iIiE9PWYmJm51bGwhPT1mKSx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSEwLHRoaXMuYWRkUHJlY29kZUxpbmVzKCkpfSxoLnJlYWRBc1RleHQoZCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIg''@;'; put 'put ''ZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9YWRkUHJlY29kZUxpbmVzKCl7dGhpcy5saW5lc09mQ29kZS51bnNoaWZ0KGAlbGV0IGNvbnRleHQ9JHt0aGlz''@;'; put 'put ''LnNlbGVjdGVkQ29udGV4dH07YCxgJWxldCBhcHBMb2M9JHt0aGlzLmFwcExvY307YCxgJWxldCBhZG1pbj0ke3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfTtgLGAlbGV0IGRjcGF0aD0ke3RoaXMuZGNQYXRofTtgKX1kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCl7bGV0IGE9dGhpcy5saW5lc09m''@;'; put 'put ''Q29kZS5qb2luKCJcbiIpLGQ9dGhpcy5maWxlTmFtZS5zcGxpdCgiLiIpWzBdO3RoaXMuZG93bmxvYWRGaWxlKGEsZCwic2FzIil9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1zYXZlRGNQYXRoKCl7bG9jYWxTdG9yYWdl''@;'; put 'put ''LnNldEl0ZW0oImRlcGxveV9kY19sb2MiLHRoaXMuZGNQYXRoKX1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVy''@;'; put 'put ''U2V0dGluZ3M/LmFwcExvY3x8IiIsdm9pZCAwLHZvaWQgMCwhMCksYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSx2b2lk''@;'; put 'put ''IGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9ZXhlY3V0ZVNBUygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZXhlY3V0aW5nU2NyaXB0''@;'; put 'put ''PSEwLGEuam9iTG9nPSIiLGEubWFrZURhdGFSZXNwb25zZT0iIjt0cnl7bGV0IGQ9eWllbGQgYS5zYXNKcy5leGVjdXRlU2NyaXB0KHtmaWxlTmFtZTphLmZpbGVOYW1lLGxpbmVzT2ZDb2RlOmEubGluZXNPZkNvZGUsY29udGV4dE5hbWU6YS5zZWxlY3RlZENvbnRleHR9KTthLmxvZ2dlclNl''@;'; put 'put ''cnZpY2UubG9nKGQpLCJzdHJpbmciPT10eXBlb2YgZC5sb2cmJihkLmxvZz1KU09OLnBhcnNlKGQubG9nKSksImVycm9yIj09PWQuam9iU3RhdHVzP2FsZXJ0KCJFcnJvciEiKTphLmpvYkxvZz1kLmxvZy5pdGVtcz9kLmxvZy5pdGVtcy5tYXAoaD0+aC5saW5lKS5qb2luKCJcbiIpOkpTT04u''@;'; put 'put ''c3RyaW5naWZ5KGQubG9nKSxhLmV4ZWN1dGluZ1NjcmlwdD0hMX1jYXRjaHthLmV4ZWN1dGluZ1NjcmlwdD0hMX19KSgpfWNyZWF0ZURhdGFiYXNlKGE9ITApe2lmKGEpe2xldCBmPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLnNlcnZlclVybCsiL1NBU0pvYkV4ZWN1dGlvbi8/''@;'; put 'put ''X3Byb2dyYW09Iit0aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIvYWRtaW4vbWFrZWRhdGEmQURNSU49Iit0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCsiJkRDUEFUSD0iK3RoaXMuZGNQYXRoKyImX2RlYnVnPTEzMSI7d2luZG93Lm9wZW4oZiwiX2JsYW5rIil9ZWxzZSB0aGlzLmNy''@;'; put 'put ''ZWF0ZURhdGFiYXNlTG9hZGluZz0hMCx0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6dGhp''@;'; put 'put ''cy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGY9Pnt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRo''@;'; put 'put ''aXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExfSkuY2F0Y2goZj0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9bmF2aWdhdGVUb0hvbWUoKXt0''@;'; put 'put ''aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZSksdGhpcy52YWxpZGF0aW9uU3RhdGU9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicz8ic3VjY2VzcyI6ImVycm9yIix0aGlzLmlzVmFsaWRhdGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iZXJyb3IifSl9ZGVsZXRlS2V5''@;'; put 'put ''cygpe2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJkZXBsb3lfZGNfbG9jIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodGwpLEdlKHZjKSxHZShTZCksR2UoS2hlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVj''@;'; put 'put ''dG9yczpbWyJhcHAtbWFudWFsLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVj''@;'; put 'put ''bHM6OSx2YXJzOjMsY29uc3RzOltbMSwiY2FyZC1oZWFkZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJkLWlubGluZS1ibG9jayIsIm1sLTEwIiwibWItMTAiLCJtdC0wIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiY2xlYXItbWVtb3J5LWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRl''@;'; put 'put ''IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIl0sWyJpZCIsImxvZ2luRm9ybSIsImNsYXNzIiwiZC1ub25lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImlkIiwibG9naW5Gb3JtIiwxLCJkLW5vbmUiXSxbMSwibWItMTAiXSxbImZvciIsInVzZXJuYW1lIiwxLCJjbHItY29udHJvbC1sYWJl''@;'; put 'put ''bCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsidHlwZSIsInRleHQiLCJpZCIsInVzZXJuYW1lIiwxLCJjbHItaW5wdXQiXSxbImZvciIsInBhc3N3b3JkIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsInBhc3N3''@;'; put 'put ''b3JkIiwiaWQiLCJwYXNzd29yZCIsMSwiY2xyLWlucHV0Il0sWyJpZCIsImxvZ2luQnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImQtbm9uZSJdLFsxLCJjbHItZm9ybS1jb250cm9sIl0sWyJmb3IiLCJzZWxlY3QtZnVsbCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRy''@;'; put 'put ''b2wtY29udGFpbmVyIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFsibmFtZSIsInNlbGVjdGVkQWRtaW5Hcm91cCIsImlkIiwiYWRtaW5Hcm91cHNTZWxlY3QiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbMywidmFsdWUi''@;'; put 'put ''LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibmFtZSIsInNlbGVjdGVkQ29udGV4dCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsImlkIiwiY29udGV4dHMtYnRuIiwxLCJidG4iLCJidG4taWNvbiIs''@;'; put 'put ''MywiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsxLCJkLWZsZXgiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwibXItMTAiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWyJuYW1lIiwiZGNQYXRoIiwidHlwZSIsInRleHQiLCJpZCIsImRj''@;'; put 'put ''bG9jIiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJmb2N1c291dCIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFsxLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsidHlwZSIsImZpbGUiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzEsIm10LTIwIiwiZC1m''@;'; put 'put ''bGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsIiIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJjbGFzcyIsImJ0biBidG4tc20gYnRuLWljb24gbWluLXctMCB3LTQwIiwzLCJjbGljayIsNCwibmdJZiJdLFsiaWQiLCJkZXBsb3kiLDEsIm10LTAiLDMsImNsaWNr''@;'; put 'put ''IiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMywidmFsdWUiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJtaW4tdy0wIiwidy00MCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwi''@;'; put 'put ''bWItMCIsIm10LTEwIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMCIsIm1yLTIwIiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWJhciIs''@;'; put 'put ''NCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciJdLFsxLCJ2YWxpZGF0aW9uLWJhciJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImlzLWVycm9yIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiaXMtc3VjY2VzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRl''@;'; put 'put ''KDAsImRpdiIsMCksT2UoMSwiIENvbmZpZ3VyYXRvciAiKSxkZSgyLCJwIiwxKSxPZSgzKSxoZSgpLGRlKDQsImJ1dHRvbiIsMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmRlbGV0ZUtleXMoKX0pLE9lKDUsIiBDbGVhciBtZW1vcnkgIiksaGUoKSgpLGRlKDYsImRpdiIsMyks''@;'; put 'put ''bXQoNyxuS2UsMTUsMCwiZGl2Iiw0KSg4LGdLZSw0OSwyMiwibmctY29udGFpbmVyIiw1KSxoZSgpKSwyJmQmJihmZSgzKSxJcigiQXBwIExvY2F0aW9uOiAiLGguYXBwTG9jLCIiKSxmZSg0KSx4ZSgibmdJZiIsaC5uZWVkc0xvZ2luKSxmZSgpLHhlKCJuZ0lmIiwhaC5uZWVkc0xvZ2luKSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbbnMsYmEsczcsQTIsazIscWwsVDIsbmwsYTcsR3MseXAsSGwsajAsUDIsZHMsZVpdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdktlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNSksR3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlv''@;'; put 'put ''biBiS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDE2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLkdST1VQTkFNRSksZmUoKSx6dSgiICIsYS5HUk9VUE5BTUUsIiAtICIsYS5HUk9VUERFU0MsIiAiKX19bGV0IHlLZT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLnNhc2pzU2VydmljZT1kLHRoaXMubG9jYXRpb249aCx0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMuZGNEaXJlY3Rvcnk9IiIsdGhp''@;'; put 'put ''cy5kY0FkbWluR3JvdXA9IkRDREVGQVVMVCIsdGhpcy5NRVRBUEVSU09OPSJuL2EiLHRoaXMuTUVUQVVTRVI9Im4vYSIsdGhpcy5TWVNVU0VSSUQ9Im4vYSIsdGhpcy5TWVNIT1NUTkFNRT0ibi9hIix0aGlzLlNZU1ZMT05HPSJuL2EiLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1bXSx0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITEsdGhpcy5zaG93TG9nb3V0PSExLHRoaXMudG1wRGlyZWN0b3JpZXM9e2xpbnV4OiIvdG1wL0RhdGFDb250cm9sbGVyIix3aW5kb3dzOiJDOlxcRGF0YUNvbnRyb2xsZXIifX1uZ09uSW5pdCgpe3RoaXMuZ2V0VXNlckdyb3VwcygpLHRoaXMuZ2V0U2VydmVySW5mbygpfWdldFNl''@;'; put 'put ''cnZlckluZm8oKXt0aGlzLnNhc2pzU2VydmljZS5nZXRTZXJ2ZXJJbmZvKCkuc3Vic2NyaWJlKGE9PnsiZGVza3RvcCIhPT1hLm1vZGUmJih0aGlzLnNob3dMb2dvdXQ9ITApfSl9Z2V0VXNlckdyb3Vwcygpe3RoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5h''@;'; put 'put ''di91c2VyZ3JvdXBzYnltZW1iZXIiLG51bGwpLnRoZW4oYT0+e3RoaXMuTUVUQVBFUlNPTj1hLmFkYXB0ZXJSZXNwb25zZS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuYWRhcHRlclJlc3BvbnNlLlNZU0hP''@;'; put 'put ''U1ROQU1FLHRoaXMuU1lTVkxPTkc9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuYWRhcHRlclJlc3BvbnNlLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6Indp''@;'; put 'put ''bmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMuZGNBZG1pbkdyb3VwPXRoaXMuZGNBZG1pbkdyb3VwTGlzdFswXS5HUk9VUE5BTUUsdGhpcy5sb2FkaW5nPSExfSxhPT57dGhpcy5sb2FkaW5nPSExfSl9bWFrZURhdGEoKXtsZXQgZD10''@;'; put 'put ''aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2NvbnN0IGg9dGhpcy5zYXNKc0NvbmZpZy5hcHBMb2M7bGV0IGY9dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLmRjRGlyZWN0b3J5O3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PUIwLlkuU2FzanM/dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLnNhc2pzTWFrZWRhdGFDaGVja2luZygpLnRoZW4oRD0+e0QmJih0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiLyIpLGxvY2F0aW9uLnJlbG9hZCgpKX0pOnRoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PUIwLlkuU2FzOSYmKGY9IiIsZD13aW5kb3cubG9jYXRpb24u''@;'; put 'put ''b3JpZ2luK2QrIi8iLHY9ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZGNEaXJlY3RvcnkpKSx3aW5kb3cub3BlbihgJHtmfHwiIn0ke2R9P19wcm9ncmFtPSR7aH0vc2VydmljZXMvYWRtaW4vbWFrZWRhdGEmYWRtaW49JHt0aGlzLmRjQWRtaW5Hcm91cH0mcGF0aD0ke3Z9IGAsIl9ibGFuayIp''@;'; put 'put ''fWxvZ291dCgpe3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh0bCksR2UoVmNlKSxHZShmaCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pz''@;'; put 'put ''LWNvbmZpZ3VyYXRvciJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDQsdmFyczox''@;'; put 'put ''MCxjb25zdHM6W1siY2xhc3MiLCJ0aGluUHJvZ3Jlc3MgcHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbMSwibGlnaHQiXSxbMSwibS0wIl0sWzEsIm0tMCIsIm10LTEwIl0sWzEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFi''@;'; put 'put ''ZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInBsYWNlaG9sZGVyIiwiVHlwZSBpbiBkaXJlY3RvcnkiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibWItMTAiLCJtdC0wIiwidy01''@;'; put 'put ''MHZ3Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWZsZXgiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJtdC0xNSIsInRleHQtY2VudGVyIiwzLCJjbGljayJdLFsxLCJjYXJkLXRl''@;'; put 'put ''eHQiLCJwYi0xMCJdLFsxLCJ0aGluUHJvZ3Jlc3MiLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYobXQoMCx2S2UsMiwwLCJkaXYiLDApLGRlKDEsImg0IiwxKSxPZSgyLCJTYXNqcyBEZXBsb3kiKSxo''@;'; put 'put ''ZSgpLEd0KDMsImhyIiwyKSxkZSg0LCJwIiwzKSxPZSg1LCIgVG8gY29uZmlndXJlIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOlxuIiksaGUoKSxkZSg2LCJwIiw0KSxPZSg3LCIgUGxlYXNlIHNwZWNpZnkgYSBwaHlz''@;'; put 'put ''aWNhbCBkaXJlY3RvcnkgKG9uIHRoZSAiKSxkZSg4LCJzdHJvbmciKSxPZSg5KSxoZSgpLE9lKDEwLCIgY29tcHV0ZSBzZXJ2ZXIpIGJlbG93LCB0byB3aGljaCB1c2VyICIpLGRlKDExLCJzdHJvbmciKSxPZSgxMiksaGUoKSxPZSgxMywiIGNhbiB3cml0ZSwgb24gYmVoYWxmIG9mIERhdGEg''@;'; put 'put ''Q29udHJvbGxlci5cbiIpLGhlKCksZGUoMTQsImxhYmVsIiw1KSxPZSgxNSwiREMgU3RhZ2luZyBEaXJlY3RvcnkiKSxoZSgpLGRlKDE2LCJkaXYiLDYpKDE3LCJkaXYiLDcpKDE4LCJpbnB1dCIsOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjRGlyZWN0''@;'; put 'put ''b3J5LHYpfHwoaC5kY0RpcmVjdG9yeT12KSx2fSksaGUoKSgpKCksZGUoMTksInAiLDQpLE9lKDIwLCIgQmVsb3cgYXJlIHRoZSBsaXN0IG9mIGdyb3VwcyB0byB3aGljaCB5b3UgYmVsb25nLiBUaGUgZ3JvdXAgeW91IHNlbGVjdCB3aWxsIGJlY29tZSB0aGUgRGF0YSBDb250cm9sbGVyIEFk''@;'; put 'put ''bWluIEdyb3VwLCBhbmQgZXZlcnlvbmUgaW4gaXQgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gRGF0YSBDb250cm9sbGVyLlxuIiksaGUoKSxkZSgyMSwibGFiZWwiLDUpLE9lKDIyLCJEYXRhIENvbnRyb2xsZXIgQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDIzLCJjbHItc2VsZWN0''@;'; put 'put ''LWNvbnRhaW5lciIsOSkoMjQsInNlbGVjdCIsMTApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kY0FkbWluR3JvdXAsdil8fChoLmRjQWRtaW5Hcm91cD12KSx2fSksbXQoMjUsYktlLDIsMywib3B0aW9uIiwxMSksaGUoKSgpLGRlKDI2LCJwIiw0KSxPZSgy''@;'; put 'put ''NywiIE5vdywgY3JlYXRlIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFuZCBkZXBsb3kgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2luZyB0aGUgYWRtaW4gZ3JvdXAgc2VsZWN0ZWQgYWJvdmU6XG4iKSxoZSgpLGRlKDI4LCJkaXYiLDEyKSgyOSwiYnV0dG9uIiwxMyksSHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBoLm1ha2VEYXRhKCl9KSxPZSgzMCwiIFNVQk1JVCAiKSxoZSgpKCksR3QoMzEsImhyIiwyKSxkZSgzMiwiZGl2IiwxNCkoMzMsInAiKSxPZSgzNCwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLGhlKCksZGUoMzUsInVsIiko''@;'; put 'put ''MzYsImxpIiksT2UoMzcpLGhlKCksZGUoMzgsImxpIiksT2UoMzkpLGhlKCksZGUoNDAsImxpIiksT2UoNDEpLGhlKCksZGUoNDIsImxpIiksT2UoNDMpLGhlKCkoKSgpKSwyJmQmJih4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSg5KSxJcigiICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMyksQ3Io''@;'; put 'put ''aC5TWVNVU0VSSUQpLGZlKDYpLHBpKCJuZ01vZGVsIixoLmRjRGlyZWN0b3J5KSxmZSg2KSxwaSgibmdNb2RlbCIsaC5kY0FkbWluR3JvdXApLGZlKCkseGUoIm5nRm9yT2YiLGguZGNBZG1pbkdyb3VwTGlzdCksZmUoMTIpLElyKCJNRVRBUEVSU09OOiAiLGguTUVUQVBFUlNPTiwiIiksZmUo''@;'; put 'put ''MiksSXIoIlNZU1VTRVJJRDogIixoLlNZU1VTRVJJRCwiIiksZmUoMiksSXIoIlNZU0hPU1ROQU1FOiAiLGguU1lTSE9TVE5BTUUsIiIpLGZlKDIpLElyKCJTWVNWTE9ORzogIixoLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsVDIsbmwsR3MsZHMseDcsJHld''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gX0tlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLE9lKDIsIlRlcm1zIGFuZCBDb25kaXRpb25zIiksaGUoKSxkZSgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwicCIsOCks''@;'; put 'put ''T2UoNiwiIFRoZSBEZW1vIHZlcnNpb24gb2YgRGF0YSBDb250cm9sbGVyIGlzIGZyZWUgZm9yIEVWQUxVQVRJT04gcHVycG9zZXMgb25seS4gQmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBwbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2Qs''@;'; put 'put ''IGFuZCBhZ3JlZWQgdG8gdGhlICIpLGRlKDcsImEiLDkpLE9lKDgsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGhlKCksT2UoOSwiLiAiKSxoZSgpKCksR3QoMTAsImhyIiwxMCksZGUoMTEsImNsci1jaGVja2JveC13cmFwcGVyIikoMTIsImlu''@;'; put 'put ''cHV0IiwxMSksSHQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50ZXJtc0FncmVlQ2hhbmdlKCkpfSksaGUoKSxkZSgxMywibGFiZWwiKSxPZSgxNCwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgIiksZGUoMTUsImEiLDkpLE9lKDE2''@;'; put 'put ''LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIHdLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTYpKDEsImFwcC1hdXRvbWF0aWMtZGVwbG95IiwxNyksSHQoIm9uTmF2aWdhdGVU''@;'; put 'put ''b0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIs''@;'; put 'put ''YS5kY0FkYXB0ZXJTZXR0aW5ncykoImFwcExvYyIsYS5hcHBMb2MpKCJkY1BhdGgiLGEuZGNQYXRoKSgic2VsZWN0ZWRBZG1pbkdyb3VwIixhLnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIENLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTgpKDEsImFwcC1t''@;'; put 'put ''YW51YWwtZGVwbG95IiwxOSksSHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEu''@;'; put 'put ''c2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIFNLZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsd0tlLDIsNiwiZGl2IiwxNCkoMixDS2UsMiwzLCJkaXYiLDE1KSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5hdXRvZGVwbG95KSxmZSgpLHhlKCJuZ0lmIiwhYS5hdXRvZGVwbG95KX19ZnVuY3Rpb24gTUtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2IiwxNikoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTkpLEh0KCJvbk5hdmlnYXRlVG9Ib21lIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLHhlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEu''@;'; put 'put ''ZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiB4S2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDE2KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOSksSHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIp''@;'; put 'put ''Lm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMikseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIEVL''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKGNpKDAsMTIpLG10KDEsU0tlLDMsMiwibmctY29udGFpbmVyIiwxMykoMixNS2UsMywzLCJuZy1jb250YWluZXIiLDEzKSgzLHhLZSwzLDMsIm5nLWNvbnRhaW5lciIsMTMpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpO3hlKCJuZ1N3aXRjaCIsITApLGZlKCkseGUo''@;'; put 'put ''Im5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnND''@;'; put 'put ''b25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IHFoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnN0''@;'; put 'put ''ZXA9MCx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY2xpZW50X2lkPSIiLHRoaXMuY2xpZW50X3NlY3JldD0iIix0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMu''@;'; put 'put ''c2FzSnNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuU2VydmVyVHlwZT1CMC5ZLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhp''@;'; put 'put ''cy5hdXRvZGVwbG95PSExKSx0aGlzLnNhc0pzPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0luc3RhbmNlKCksdGhpcy5zYXNKc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHRoaXMu''@;'; put 'put ''Y2xpZW50X2lkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfY2xpZW50X2lkIil8fCIiLHRoaXMuY2xpZW50X3NlY3JldD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X3NlY3JldF9rZXkiKXx8IiIsdGhpcy5kY1BhdGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9kY19s''@;'; put 'put ''b2MiKXx8IiJ9bmdPbkluaXQoKXt0aGlzLnNldERlcGxveURlZmF1bHRzKCl9c2V0RGVwbG95RGVmYXVsdHMoKXt0aGlzLmRjUGF0aD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5kY1BhdGh8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFkbWlu''@;'; put 'put ''R3JvdXB8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfHwodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIil9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYXV0b2RlcGxveXx8dGhpcy5nZXRBZG1pbkdyb3VwcygpLHRoaXMuc3RlcCsrfWdldEFkbWluR3JvdXBz''@;'; put 'put ''KCl7ZmV0Y2godGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD01MDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZDt0cnl7ZD1KU09OLnBh''@;'; put 'put ''cnNlKGEpfWNhdGNoKGgpe2NvbnNvbGUuZXJyb3IoaCl9ZCYmKHRoaXMuYWRtaW5Hcm91cHM9ZC5pdGVtcyx0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmFkbWluR3JvdXBzWzBdLmlkKX0pfW9uTmF2aWdhdGVUb0hvbWUoKXt3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLnNwbGl0KCIj''@;'; put 'put ''IilbMF0sIl9ibGFuayIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEo4KSxHZSh0bCksR2UoU2QpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRy''@;'; put 'put ''czpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRDUyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsi''@;'; put 'put ''aWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbMSwibXQtMCJdLFsiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9ldmFsdWF0aW9uLWxpY2VuY2UtYWdyZWVtZW50IiwidGFyZ2V0IiwiX2Js''@;'; put 'put ''YW5rIl0sWzEsImxpZ2h0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywiY2hhbmdlIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJhdXRvZGVwbG95LXNlY3Rpb24gY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJtYWluYm9keSIsImNs''@;'; put 'put ''YXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJhdXRvZGVwbG95LXNlY3Rpb24iLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxlY3RlZEFkbWluR3JvdXAiXSxbImlkIiwi''@;'; put 'put ''bWFpbmJvZHkiLDEsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxtdCgyLF9LZSwxNywwLCJkaXYiLDIpLGhl''@;'; put 'put ''KCksbXQoMyxFS2UsNCw0LCJuZy1jb250YWluZXIiLDMpLGhlKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwwPT09aC5zdGVwKSxmZSgpLHhlKCJuZ0lmIixoLnN0ZXA+MCkpfSxkZXBlbmRlbmNpZXM6W2JhLFMyLGNwLGRzLElkLFNoLHRLZSxtS2UseUtlXSxlbmNhcHN1bGF0aW9uOjJ9KX19''@;'; put 'put ''cmV0dXJuIGN9KSgpO2NvbnN0IFRLZT1be3BhdGg6IiIsY29tcG9uZW50OnFoZX0se3BhdGg6Im1hbnVhbGRlcGxveSIsY29tcG9uZW50OnFoZX1dO2xldCBBS2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKFRLZSksemNdfSl9fXJldHVybiBjfSkoKSxrS2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLHowLEFLZV19KX19cmV0dXJuIGN9KSgpO3koNDk1MzcpLHkoNzc1MjUpLHkoNTc3MikseSg2OTg3NSkseSgxNjA5MykseSg5NTYwOCkseSgxNjQ5''@;'; put 'put ''MykseSg2MTkzNCkseSgxMDEwMSkseSgyNjg4OSkseSg0MzI4NykseSg2NTc0NSkseSgyOTcwOCkseSg2NTExNykseSgxMDM2Myk7Y29uc3R7ZW50cmllczpYaGUsc2V0UHJvdG90eXBlT2Y6SmhlLGlzRnJvemVuOkRLZSxnZXRQcm90b3R5cGVPZjpJS2UsZ2V0T3duUHJvcGVydHlEZXNjcmlw''@;'; put 'put ''dG9yOlJLZX09T2JqZWN0O2xldHtmcmVlemU6WTEsc2VhbDpIMixjcmVhdGU6UWhlfT1PYmplY3Qse2FwcGx5OlFHLGNvbnN0cnVjdDplJH09dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0O1kxfHwoWTE9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSxIMnx8KEgyPWZ1bmN0aW9uKGwpe3JldHVy''@;'; put 'put ''biBsfSksUUd8fChRRz1mdW5jdGlvbihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX0pLGUkfHwoZSQ9ZnVuY3Rpb24obCxhKXtyZXR1cm4gbmV3IGwoLi4uYSl9KTtjb25zdCBUTz0kMShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksTEtlPSQxKEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhP''@;'; put 'put ''ZiksZTJlPSQxKEFycmF5LnByb3RvdHlwZS5wb3ApLG9FPSQxKEFycmF5LnByb3RvdHlwZS5wdXNoKSxPS2U9JDEoQXJyYXkucHJvdG90eXBlLnNwbGljZSksQU89JDEoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksdCQ9JDEoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksdDJlPSQx''@;'; put 'put ''KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLHNFPSQxKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksUEtlPSQxKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksRktlPSQxKFN0cmluZy5wcm90b3R5cGUudHJpbSksdDM9JDEoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksRzE9JDEo''@;'; put 'put ''UmVnRXhwLnByb3RvdHlwZS50ZXN0KSxsRT1mdW5jdGlvbiBIS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIGUkKGMsYSl9fShUeXBlRXJyb3IpO2Z1bmN0''@;'; put 'put ''aW9uICQxKGMpe3JldHVybiBmdW5jdGlvbihsKXtsIGluc3RhbmNlb2YgUmVnRXhwJiYobC5sYXN0SW5kZXg9MCk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3JldHVybiBRRyhjLGwsZCl9''@;'; put 'put ''fWZ1bmN0aW9uIGJzKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkFPO0poZSYmSmhlKGMsbnVsbCk7bGV0IGQ9bC5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgaD1sW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgaCl7Y29uc3Qg''@;'; put 'put ''Zj1hKGgpO2YhPT1oJiYoREtlKGwpfHwobFtkXT1mKSxoPWYpfWNbaF09ITB9cmV0dXJuIGN9ZnVuY3Rpb24gTktlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKXQzKGMsbCl8fChjW2xdPW51bGwpO3JldHVybiBjfWZ1bmN0aW9uIG01KGMpe2NvbnN0IGw9UWhlKG51bGwpO2Zvcihj''@;'; put 'put ''b25zdFthLGRdb2YgWGhlKGMpKXQzKGMsYSkmJihsW2FdPUFycmF5LmlzQXJyYXkoZCk/TktlKGQpOmQmJiJvYmplY3QiPT10eXBlb2YgZCYmZC5jb25zdHJ1Y3Rvcj09PU9iamVjdD9tNShkKTpkKTtyZXR1cm4gbH1mdW5jdGlvbiBjRShjLGwpe2Zvcig7bnVsbCE9PWM7KXtjb25zdCBkPVJL''@;'; put 'put ''ZShjLGwpO2lmKGQpe2lmKGQuZ2V0KXJldHVybiAkMShkLmdldCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQudmFsdWUpcmV0dXJuICQxKGQudmFsdWUpfWM9SUtlKGMpfXJldHVybiBmdW5jdGlvbiBhKCl7cmV0dXJuIG51bGx9fWNvbnN0IG4yZT1ZMShbImEiLCJhYmJyIiwiYWNyb255bSIs''@;'; put 'put ''ImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAi''@;'; put 'put ''LCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJm''@;'; put 'put ''b3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVu''@;'; put 'put ''dWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291''@;'; put 'put ''cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVs''@;'; put 'put ''IiwidmFyIiwidmlkZW8iLCJ3YnIiXSksbiQ9WTEoWyJzdmciLCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIs''@;'; put 'put ''ImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBoIiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJh''@;'; put 'put ''ZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIsInN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLHIkPVkxKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVy''@;'; put 'put ''IiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVEcm9wU2hhZG93IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNz''@;'; put 'put ''aWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJnZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLFZLZT1ZMShbImFuaW1hdGUiLCJj''@;'; put 'put ''b2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFk''@;'; put 'put ''aWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksaSQ9WTEoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVk''@;'; put 'put ''dHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVy''@;'; put 'put ''IiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLEJLZT1ZMShbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0''@;'; put 'put ''aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSkscjJlPVkxKFsiI3RleHQiXSksaTJlPVkxKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3Bs''@;'; put 'put ''YXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRz''@;'; put 'put ''IiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJm''@;'; put 'put ''YWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxl''@;'; put 'put ''bmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBv''@;'; put 'put ''cG92ZXIiLCJwb3BvdmVydGFyZ2V0IiwicG9wb3ZlcnRhcmdldGFjdGlvbiIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hl''@;'; put 'put ''Y2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWdu''@;'; put 'put ''IiwidmFsdWUiLCJ3aWR0aCIsIndyYXAiLCJ4bWxucyIsInNsb3QiXSksYSQ9WTEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYW1wbGl0dWRlIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJh''@;'; put 'put ''emltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlv''@;'; put 'put ''bi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJleHBvbmVudCIs''@;'; put 'put ''ImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250''@;'; put 'put ''LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJpbnRlcmNlcHQi''@;'; put 'put ''LCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9j''@;'; put 'put ''YWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5h''@;'; put 'put ''bWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJh''@;'; put 'put ''bnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1''@;'; put 'put ''bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzbG9wZSIsInNwZWN1bGFyY29uc3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJz''@;'; put 'put ''dG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2Vz''@;'; put 'put ''Y2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YWJsZXZhbHVlcyIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlw''@;'; put 'put ''ZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxz''@;'; put 'put ''ZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxhMmU9WTEoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxp''@;'; put 'put ''bmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxx''@;'; put 'put ''dW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dz''@;'; put 'put ''cGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0''@;'; put 'put ''cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksa089WTEoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxqS2U9SDIoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSx6S2U9SDIoLzwlW1x3XFddKnxbXHdcV10q''@;'; put 'put ''JT4vZ20pLFVLZT1IMigvXCRce1tcd1xXXSovZ20pLFpLZT1IMigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0rJC8pLFdLZT1IMigvXmFyaWEtW1wtXHddKyQvKSxvMmU9SDIoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwfG1hdHJpeCk6fFte''@;'; put 'put ''YS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLFlLZT1IMigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksR0tlPUgyKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLHMyZT1IMigvXmh0bWwkL2kpLCRLZT1IMigv''@;'; put 'put ''XlthLXpdWy5cd10qKC1bLlx3XSspKyQvaSk7dmFyIGwyZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBUklBX0FUVFI6V0tlLEFUVFJfV0hJVEVTUEFDRTpHS2UsQ1VTVE9NX0VMRU1FTlQ6JEtlLERBVEFfQVRUUjpaS2UsRE9DVFlQRV9OQU1FOnMyZSxFUkJfRVhQUjp6S2UsSVNf''@;'; put 'put ''QUxMT1dFRF9VUkk6bzJlLElTX1NDUklQVF9PUl9EQVRBOllLZSxNVVNUQUNIRV9FWFBSOmpLZSxUTVBMSVRfRVhQUjpVS2V9KTt2YXIgWEtlPWZ1bmN0aW9uIHUyZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0eXBlb2Yg''@;'; put 'put ''d2luZG93PiJ1Ij9udWxsOndpbmRvdztjb25zdCBsPWNvPT51MmUoY28pO2lmKGwudmVyc2lvbj0iMy4yLjYiLGwucmVtb3ZlZD1bXSwhY3x8IWMuZG9jdW1lbnR8fDkhPT1jLmRvY3VtZW50Lm5vZGVUeXBlfHwhYy5FbGVtZW50KXJldHVybiBsLmlzU3VwcG9ydGVkPSExLGw7bGV0e2RvY3Vt''@;'; put 'put ''ZW50OmF9PWM7Y29uc3QgZD1hLGg9ZC5jdXJyZW50U2NyaXB0LHtEb2N1bWVudEZyYWdtZW50OmYsSFRNTFRlbXBsYXRlRWxlbWVudDp2LE5vZGU6TSxFbGVtZW50OkQsTm9kZUZpbHRlcjpaLE5hbWVkTm9kZU1hcDpyZT1jLk5hbWVkTm9kZU1hcHx8Yy5Nb3pOYW1lZEF0dHJNYXAsSFRNTEZv''@;'; put 'put ''cm1FbGVtZW50OmNlLERPTVBhcnNlcjpiZSx0cnVzdGVkVHlwZXM6RWV9PWMsQmU9RC5wcm90b3R5cGUscWU9Y0UoQmUsImNsb25lTm9kZSIpLHJ0PWNFKEJlLCJyZW1vdmUiKSxwdD1jRShCZSwibmV4dFNpYmxpbmciKSxkdD1jRShCZSwiY2hpbGROb2RlcyIpLEp0PWNFKEJlLCJwYXJlbnRO''@;'; put 'put ''b2RlIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHYpe2NvbnN0IGNvPWEuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtjby5jb250ZW50JiZjby5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihhPWNvLmNvbnRlbnQub3duZXJEb2N1bWVudCl9bGV0IHZuLENuPSIiO2NvbnN0e2ltcGxlbWVudGF0''@;'; put 'put ''aW9uOnRuLGNyZWF0ZU5vZGVJdGVyYXRvcjpNbixjcmVhdGVEb2N1bWVudEZyYWdtZW50OndyLGdldEVsZW1lbnRzQnlUYWdOYW1lOkdyfT1hLHtpbXBvcnROb2RlOm1yfT1kO2xldCBHbj17YWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzOltdLGFmdGVy''@;'; put 'put ''U2FuaXRpemVTaGFkb3dET006W10sYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzOltdLGJlZm9yZVNhbml0aXplRWxlbWVudHM6W10sYmVmb3JlU2FuaXRpemVTaGFkb3dET006W10sdXBvblNhbml0aXplQXR0cmlidXRlOltdLHVwb25TYW5pdGl6ZUVsZW1lbnQ6W10sdXBvblNhbml0aXplU2hh''@;'; put 'put ''ZG93Tm9kZTpbXX07bC5pc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgWGhlJiYiZnVuY3Rpb24iPT10eXBlb2YgSnQmJnRuJiZ2b2lkIDAhPT10bi5jcmVhdGVIVE1MRG9jdW1lbnQ7Y29uc3R7TVVTVEFDSEVfRVhQUjphaSxFUkJfRVhQUjpfaSxUTVBMSVRfRVhQUjpPbixEQVRBX0FU''@;'; put 'put ''VFI6enIsQVJJQV9BVFRSOkpuLElTX1NDUklQVF9PUl9EQVRBOkRyLEFUVFJfV0hJVEVTUEFDRTokcixDVVNUT01fRUxFTUVOVDp3aX09bDJlO2xldHtJU19BTExPV0VEX1VSSTplYX09bDJlLGZhPW51bGw7Y29uc3QgdnQ9YnMoe30sWy4uLm4yZSwuLi5uJCwuLi5yJCwuLi5pJCwuLi5yMmVd''@;'; put 'put ''KTtsZXQgTnQ9bnVsbDtjb25zdCBGdD1icyh7fSxbLi4uaTJlLC4uLmEkLC4uLmEyZSwuLi5rT10pO2xldCBIbj1PYmplY3Quc2VhbChRaGUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVO''@;'; put 'put ''YW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLHRyPW51bGwsYXI9bnVs''@;'; put 'put ''bCxIcj0hMCxxcj0hMCxvbj0hMSx5bj0hMCxwbj0hMSxwcj0hMCwkbj0hMSxkcj0hMSxVcj0hMSxabj0hMSxzcj0hMSxOcj0hMSxNcj0hMCxacj0hMSxCYT0hMCxJbz0hMSxabz17fSxwcz1udWxsO2NvbnN0IE1vPWJzKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwi''@;'; put 'put ''ZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBsYWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxl''@;'; put 'put ''IiwidmlkZW8iLCJ4bXAiXSk7bGV0IGhzPW51bGw7Y29uc3QgbmM9YnMoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKTtsZXQgUW89bnVsbDtjb25zdCBNMz1icyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJw''@;'; put 'put ''YXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFyeSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLGFkPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIix6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLEpjPSJodHRwOi8vd3d3LnczLm9y''@;'; put 'put ''Zy8xOTk5L3hodG1sIjtsZXQgS3M9SmMsQmw9ITEsZXM9bnVsbDtjb25zdCBFMT1icyh7fSxbYWQsenMsSmNdLHQkKTtsZXQgeDM9YnMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLGVnPWJzKHt9LFsiYW5ub3RhdGlvbi14bWwiXSk7Y29uc3QgZDQ9YnMoe30sWyJ0aXRsZSIs''@;'; put 'put ''InN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7bGV0IGl2PW51bGw7Y29uc3QgTkE9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXTtsZXQgJGE9bnVsbCx4Nj1udWxsO2NvbnN0IFd0ZT1hLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxaTj1mdW5jdGlvbihncil7cmV0dXJu''@;'; put 'put ''IGdyIGluc3RhbmNlb2YgUmVnRXhwfHxnciBpbnN0YW5jZW9mIEZ1bmN0aW9ufSxWQT1mdW5jdGlvbigpe2xldCBncj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aWYoIXg2fHx4NiE9PWdyKXtpZigoIWdyfHwib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGdyKSYmKGdyPXt9KSxncj1tNShnciksaXY9LTE9PT1OQS5pbmRleE9mKGdyLlBBUlNFUl9NRURJQV9UWVBFKT8idGV4dC9odG1sIjpnci5QQVJTRVJfTUVESUFfVFlQRSwkYT0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWl2P3QkOkFPLGZhPXQzKGdyLCJBTExPV0VEX1RBR1MiKT9i''@;'; put 'put ''cyh7fSxnci5BTExPV0VEX1RBR1MsJGEpOnZ0LE50PXQzKGdyLCJBTExPV0VEX0FUVFIiKT9icyh7fSxnci5BTExPV0VEX0FUVFIsJGEpOkZ0LGVzPXQzKGdyLCJBTExPV0VEX05BTUVTUEFDRVMiKT9icyh7fSxnci5BTExPV0VEX05BTUVTUEFDRVMsdCQpOkUxLFFvPXQzKGdyLCJBRERfVVJJ''@;'; put 'put ''X1NBRkVfQVRUUiIpP2JzKG01KE0zKSxnci5BRERfVVJJX1NBRkVfQVRUUiwkYSk6TTMsaHM9dDMoZ3IsIkFERF9EQVRBX1VSSV9UQUdTIik/YnMobTUobmMpLGdyLkFERF9EQVRBX1VSSV9UQUdTLCRhKTpuYyxwcz10MyhnciwiRk9SQklEX0NPTlRFTlRTIik/YnMoe30sZ3IuRk9SQklEX0NP''@;'; put 'put ''TlRFTlRTLCRhKTpNbyx0cj10MyhnciwiRk9SQklEX1RBR1MiKT9icyh7fSxnci5GT1JCSURfVEFHUywkYSk6bTUoe30pLGFyPXQzKGdyLCJGT1JCSURfQVRUUiIpP2JzKHt9LGdyLkZPUkJJRF9BVFRSLCRhKTptNSh7fSksWm89ISF0MyhnciwiVVNFX1BST0ZJTEVTIikmJmdyLlVTRV9QUk9G''@;'; put 'put ''SUxFUyxIcj0hMSE9PWdyLkFMTE9XX0FSSUFfQVRUUixxcj0hMSE9PWdyLkFMTE9XX0RBVEFfQVRUUixvbj1nci5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEseW49ITEhPT1nci5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIscG49Z3IuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxwcj0hMSE9''@;'; put 'put ''PWdyLlNBRkVfRk9SX1hNTCwkbj1nci5XSE9MRV9ET0NVTUVOVHx8ITEsWm49Z3IuUkVUVVJOX0RPTXx8ITEsc3I9Z3IuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTnI9Z3IuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsVXI9Z3IuRk9SQ0VfQk9EWXx8ITEsTXI9ITEhPT1nci5TQU5JVElaRV9E''@;'; put 'put ''T00sWnI9Z3IuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLEJhPSExIT09Z3IuS0VFUF9DT05URU5ULElvPWdyLklOX1BMQUNFfHwhMSxlYT1nci5BTExPV0VEX1VSSV9SRUdFWFB8fG8yZSxLcz1nci5OQU1FU1BBQ0V8fEpjLHgzPWdyLk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU3x8''@;'; put 'put ''eDMsZWc9Z3IuSFRNTF9JTlRFR1JBVElPTl9QT0lOVFN8fGVnLEhuPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmWk4oZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKEhuLnRhZ05hbWVDaGVjaz1nci5D''@;'; put 'put ''VVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZaTihnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoSG4uYXR0cmlidXRlTmFtZUNoZWNrPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5H''@;'; put 'put ''LmF0dHJpYnV0ZU5hbWVDaGVjayksZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJib29sZWFuIj09dHlwZW9mIGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKEhuLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1nci5D''@;'; put 'put ''VVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHBuJiYocXI9ITEpLHNyJiYoWm49ITApLFpvJiYoZmE9YnMoe30scjJlKSxOdD1bXSwhMD09PVpvLmh0bWwmJihicyhmYSxuMmUpLGJzKE50LGkyZSkpLCEwPT09Wm8uc3ZnJiYoYnMoZmEsbiQp''@;'; put 'put ''LGJzKE50LGEkKSxicyhOdCxrTykpLCEwPT09Wm8uc3ZnRmlsdGVycyYmKGJzKGZhLHIkKSxicyhOdCxhJCksYnMoTnQsa08pKSwhMD09PVpvLm1hdGhNbCYmKGJzKGZhLGkkKSxicyhOdCxhMmUpLGJzKE50LGtPKSkpLGdyLkFERF9UQUdTJiYoZmE9PT12dCYmKGZhPW01KGZhKSksYnMoZmEs''@;'; put 'put ''Z3IuQUREX1RBR1MsJGEpKSxnci5BRERfQVRUUiYmKE50PT09RnQmJihOdD1tNShOdCkpLGJzKE50LGdyLkFERF9BVFRSLCRhKSksZ3IuQUREX1VSSV9TQUZFX0FUVFImJmJzKFFvLGdyLkFERF9VUklfU0FGRV9BVFRSLCRhKSxnci5GT1JCSURfQ09OVEVOVFMmJihwcz09PU1vJiYocHM9bTUo''@;'; put 'put ''cHMpKSxicyhwcyxnci5GT1JCSURfQ09OVEVOVFMsJGEpKSxCYSYmKGZhWyIjdGV4dCJdPSEwKSwkbiYmYnMoZmEsWyJodG1sIiwiaGVhZCIsImJvZHkiXSksZmEudGFibGUmJihicyhmYSxbInRib2R5Il0pLGRlbGV0ZSB0ci50Ym9keSksZ3IuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiIhPXR5cGVvZiBnci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1MKXRocm93IGxFKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZ3Iu''@;'; put 'put ''VFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKXRocm93IGxFKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO3ZuPWdyLlRSVVNURURfVFlQRVNfUE9MSUNZLENuPXZuLmNy''@;'; put 'put ''ZWF0ZUhUTUwoIiIpfWVsc2Ugdm9pZCAwPT09dm4mJih2bj1mdW5jdGlvbihsLGEpe2lmKCJvYmplY3QiIT10eXBlb2YgbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGwuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO2xldCBkPW51bGw7Y29uc3QgaD0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjthJiZh''@;'; put 'put ''Lmhhc0F0dHJpYnV0ZShoKSYmKGQ9YS5nZXRBdHRyaWJ1dGUoaCkpO2NvbnN0IGY9ImRvbXB1cmlmeSIrKGQ/IiMiK2Q6IiIpO3RyeXtyZXR1cm4gbC5jcmVhdGVQb2xpY3koZix7Y3JlYXRlSFRNTDp2PT52LGNyZWF0ZVNjcmlwdFVSTDp2PT52fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2Fy''@;'; put 'put ''bigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK2YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX0oRWUsaCkpLG51bGwhPT12biYmInN0cmluZyI9PXR5cGVvZiBDbiYmKENuPXZuLmNyZWF0ZUhUTUwoIiIpKTtZMSYmWTEoZ3IpLHg2PWdyfX0sV049YnMoe30sWy4uLm4kLC4uLnIkLC4u''@;'; put 'put ''LlZLZV0pLFlOPWJzKHt9LFsuLi5pJCwuLi5CS2VdKSxZdD1mdW5jdGlvbihncil7b0UobC5yZW1vdmVkLHtlbGVtZW50OmdyfSk7dHJ5e0p0KGdyKS5yZW1vdmVDaGlsZChncil9Y2F0Y2h7cnQoZ3IpfX0sdjA9ZnVuY3Rpb24oZ3IsUWkpe3RyeXtvRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpR''@;'; put 'put ''aS5nZXRBdHRyaWJ1dGVOb2RlKGdyKSxmcm9tOlFpfSl9Y2F0Y2h7b0UobC5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOlFpfSl9aWYoUWkucmVtb3ZlQXR0cmlidXRlKGdyKSwiaXMiPT09Z3IpaWYoWm58fHNyKXRyeXtZdChRaSl9Y2F0Y2h7fWVsc2UgdHJ5e1FpLnNldEF0dHJpYnV0''@;'; put 'put ''ZShnciwiIil9Y2F0Y2h7fX0sVXM9ZnVuY3Rpb24oZ3Ipe2xldCBRaT1udWxsLFhhPW51bGw7aWYoVXIpZ3I9IjxyZW1vdmU+PC9yZW1vdmU+IitncjtlbHNle2NvbnN0IEl1PXQyZShnciwvXltcclxuXHQgXSsvKTtYYT1JdSYmSXVbMF19ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1pdiYm''@;'; put 'put ''S3M9PT1KYyYmKGdyPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrZ3IrIjwvYm9keT48L2h0bWw+Iik7Y29uc3QgZGM9dm4/dm4uY3JlYXRlSFRNTChncik6Z3I7aWYoS3M9PT1KYyl0cnl7UWk9KG5ldyBiZSkucGFyc2VG''@;'; put 'put ''cm9tU3RyaW5nKGRjLGl2KX1jYXRjaHt9aWYoIVFpfHwhUWkuZG9jdW1lbnRFbGVtZW50KXtRaT10bi5jcmVhdGVEb2N1bWVudChLcywidGVtcGxhdGUiLG51bGwpO3RyeXtRaS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPUJsP0NuOmRjfWNhdGNoe319Y29uc3QgQTA9UWkuYm9keXx8UWku''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50O3JldHVybiBnciYmWGEmJkEwLmluc2VydEJlZm9yZShhLmNyZWF0ZVRleHROb2RlKFhhKSxBMC5jaGlsZE5vZGVzWzBdfHxudWxsKSxLcz09PUpjP0dyLmNhbGwoUWksJG4/Imh0bWwiOiJib2R5IilbMF06JG4/UWkuZG9jdW1lbnRFbGVtZW50OkEwfSxHTj1mdW5j''@;'; put 'put ''dGlvbihncil7cmV0dXJuIE1uLmNhbGwoZ3Iub3duZXJEb2N1bWVudHx8Z3IsZ3IsWi5TSE9XX0VMRU1FTlR8Wi5TSE9XX0NPTU1FTlR8Wi5TSE9XX1RFWFR8Wi5TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT058Wi5TSE9XX0NEQVRBX1NFQ1RJT04sbnVsbCl9LEU2PWZ1bmN0aW9uKGdyKXty''@;'; put 'put ''ZXR1cm4gZ3IgaW5zdGFuY2VvZiBjZSYmKCJzdHJpbmciIT10eXBlb2YgZ3Iubm9kZU5hbWV8fCJzdHJpbmciIT10eXBlb2YgZ3IudGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5yZW1vdmVDaGlsZHx8IShnci5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgcmUpfHwiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgZ3IucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3Iuc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mIGdyLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGdyLmhhc0NoaWxk''@;'; put 'put ''Tm9kZXMpfSx0Zz1mdW5jdGlvbihncil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE0mJmdyIGluc3RhbmNlb2YgTX07ZnVuY3Rpb24gRTMoY28sZ3IsUWkpe1RPKGNvLFhhPT57WGEuY2FsbChsLGdyLFFpLHg2KX0pfWNvbnN0ICROPWZ1bmN0aW9uKGdyKXtsZXQgUWk9bnVsbDtpZihFMyhH''@;'; put 'put ''bi5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLGdyLG51bGwpLEU2KGdyKSlyZXR1cm4gWXQoZ3IpLCEwO2NvbnN0IFhhPSRhKGdyLm5vZGVOYW1lKTtpZihFMyhHbi51cG9uU2FuaXRpemVFbGVtZW50LGdyLHt0YWdOYW1lOlhhLGFsbG93ZWRUYWdzOmZhfSkscHImJmdyLmhhc0NoaWxkTm9kZXMo''@;'; put 'put ''KSYmIXRnKGdyLmZpcnN0RWxlbWVudENoaWxkKSYmRzEoLzxbL1x3IV0vZyxnci5pbm5lckhUTUwpJiZHMSgvPFsvXHchXS9nLGdyLnRleHRDb250ZW50KXx8Nz09PWdyLm5vZGVUeXBlfHxwciYmOD09PWdyLm5vZGVUeXBlJiZHMSgvPFsvXHddL2csZ3IuZGF0YSkpcmV0dXJuIFl0KGdyKSwh''@;'; put 'put ''MDtpZighZmFbWGFdfHx0cltYYV0pe2lmKCF0cltYYV0mJnFOKFhhKSYmKEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRzEoSG4udGFnTmFtZUNoZWNrLFhhKXx8SG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkhuLnRhZ05hbWVDaGVjayhYYSkpKXJldHVy''@;'; put 'put ''biExO2lmKEJhJiYhcHNbWGFdKXtjb25zdCBkYz1KdChncil8fGdyLnBhcmVudE5vZGUsQTA9ZHQoZ3IpfHxnci5jaGlsZE5vZGVzO2lmKEEwJiZkYylmb3IobGV0IFQxPUEwLmxlbmd0aC0xO1QxPj0wOy0tVDEpe2NvbnN0IFpoPXFlKEEwW1QxXSwhMCk7WmguX19yZW1vdmFsQ291bnQ9KGdy''@;'; put 'put ''Ll9fcmVtb3ZhbENvdW50fHwwKSsxLGRjLmluc2VydEJlZm9yZShaaCxwdChncikpfX1yZXR1cm4gWXQoZ3IpLCEwfXJldHVybiBnciBpbnN0YW5jZW9mIEQmJiFmdW5jdGlvbihncil7bGV0IFFpPUp0KGdyKTsoIVFpfHwhUWkudGFnTmFtZSkmJihRaT17bmFtZXNwYWNlVVJJOktzLHRhZ05h''@;'; put 'put ''bWU6InRlbXBsYXRlIn0pO2NvbnN0IFhhPUFPKGdyLnRhZ05hbWUpLGRjPUFPKFFpLnRhZ05hbWUpO3JldHVybiEhZXNbZ3IubmFtZXNwYWNlVVJJXSYmKGdyLm5hbWVzcGFjZVVSST09PXpzP1FpLm5hbWVzcGFjZVVSST09PUpjPyJzdmciPT09WGE6UWkubmFtZXNwYWNlVVJJPT09YWQ/InN2''@;'; put 'put ''ZyI9PT1YYSYmKCJhbm5vdGF0aW9uLXhtbCI9PT1kY3x8eDNbZGNdKTohIVdOW1hhXTpnci5uYW1lc3BhY2VVUkk9PT1hZD9RaS5uYW1lc3BhY2VVUkk9PT1KYz8ibWF0aCI9PT1YYTpRaS5uYW1lc3BhY2VVUkk9PT16cz8ibWF0aCI9PT1YYSYmZWdbZGNdOiEhWU5bWGFdOmdyLm5hbWVzcGFj''@;'; put 'put ''ZVVSST09PUpjPyEoUWkubmFtZXNwYWNlVVJJPT09enMmJiFlZ1tkY118fFFpLm5hbWVzcGFjZVVSST09PWFkJiYheDNbZGNdKSYmIVlOW1hhXSYmKGQ0W1hhXXx8IVdOW1hhXSk6ISgiYXBwbGljYXRpb24veGh0bWwreG1sIiE9PWl2fHwhZXNbZ3IubmFtZXNwYWNlVVJJXSkpfShncil8fCgi''@;'; put 'put ''bm9zY3JpcHQiPT09WGF8fCJub2VtYmVkIj09PVhhfHwibm9mcmFtZXMiPT09WGEpJiZHMSgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxnci5pbm5lckhUTUwpPyhZdChnciksITApOihwbiYmMz09PWdyLm5vZGVUeXBlJiYoUWk9Z3IudGV4dENvbnRlbnQsVE8oW2FpLF9pLE9uXSxk''@;'; put 'put ''Yz0+e1FpPXNFKFFpLGRjLCIgIil9KSxnci50ZXh0Q29udGVudCE9PVFpJiYob0UobC5yZW1vdmVkLHtlbGVtZW50OmdyLmNsb25lTm9kZSgpfSksZ3IudGV4dENvbnRlbnQ9UWkpKSxFMyhHbi5hZnRlclNhbml0aXplRWxlbWVudHMsZ3IsbnVsbCksITEpfSxLTj1mdW5jdGlvbihncixRaSxY''@;'; put 'put ''YSl7aWYoTXImJigiaWQiPT09UWl8fCJuYW1lIj09PVFpKSYmKFhhIGluIGF8fFhhIGluIFd0ZSkpcmV0dXJuITE7aWYoKCFxcnx8YXJbUWldfHwhRzEoenIsUWkpKSYmKCFIcnx8IUcxKEpuLFFpKSkpaWYoIU50W1FpXXx8YXJbUWldKXtpZighKHFOKGdyKSYmKEhuLnRhZ05hbWVDaGVjayBp''@;'; put 'put ''bnN0YW5jZW9mIFJlZ0V4cCYmRzEoSG4udGFnTmFtZUNoZWNrLGdyKXx8SG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkhuLnRhZ05hbWVDaGVjayhncikpJiYoSG4uYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi5hdHRyaWJ1dGVOYW1lQ2hl''@;'; put 'put ''Y2ssUWkpfHxIbi5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4uYXR0cmlidXRlTmFtZUNoZWNrKFFpKSl8fCJpcyI9PT1RaSYmSG4uYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShI''@;'; put 'put ''bi50YWdOYW1lQ2hlY2ssWGEpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKFhhKSkpKXJldHVybiExfWVsc2UgaWYoIVFvW1FpXSYmIUcxKGVhLHNFKFhhLCRyLCIiKSkmJigic3JjIiE9PVFpJiYieGxpbms6aHJlZiIhPT1RaSYmImhyZWYi''@;'; put 'put ''IT09UWl8fCJzY3JpcHQiPT09Z3J8fDAhPT1QS2UoWGEsImRhdGE6Iil8fCFoc1tncl0pJiYoIW9ufHxHMShEcixzRShYYSwkciwiIikpKSYmWGEpcmV0dXJuITE7cmV0dXJuITB9LHFOPWZ1bmN0aW9uKGdyKXtyZXR1cm4iYW5ub3RhdGlvbi14bWwiIT09Z3ImJnQyZShncix3aSl9LFhOPWZ1''@;'; put 'put ''bmN0aW9uKGdyKXtFMyhHbi5iZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMsZ3IsbnVsbCk7Y29uc3R7YXR0cmlidXRlczpRaX09Z3I7aWYoIVFpfHxFNihncikpcmV0dXJuO2NvbnN0IFhhPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6TnQs''@;'; put 'put ''Zm9yY2VLZWVwQXR0cjp2b2lkIDB9O2xldCBkYz1RaS5sZW5ndGg7Zm9yKDtkYy0tOyl7Y29uc3QgQTA9UWlbZGNdLHtuYW1lOkl1LG5hbWVzcGFjZVVSSTpUMSx2YWx1ZTpaaH09QTAsb3Y9JGEoSXUpLGpBPVpoO2xldCBrMD0idmFsdWUiPT09SXU/akE6RktlKGpBKTtpZihYYS5hdHRyTmFt''@;'; put 'put ''ZT1vdixYYS5hdHRyVmFsdWU9azAsWGEua2VlcEF0dHI9ITAsWGEuZm9yY2VLZWVwQXR0cj12b2lkIDAsRTMoR24udXBvblNhbml0aXplQXR0cmlidXRlLGdyLFhhKSxrMD1YYS5hdHRyVmFsdWUsWnImJigiaWQiPT09b3Z8fCJuYW1lIj09PW92KSYmKHYwKEl1LGdyKSxrMD0idXNlci1jb250''@;'; put 'put ''ZW50LSIrazApLHByJiZHMSgvKCgtLSE/fF0pPil8PFwvKHN0eWxlfHRpdGxlKS9pLGswKSl7djAoSXUsZ3IpO2NvbnRpbnVlfWlmKFhhLmZvcmNlS2VlcEF0dHIpY29udGludWU7aWYoIVhhLmtlZXBBdHRyKXt2MChJdSxncik7Y29udGludWV9aWYoIXluJiZHMSgvXC8+L2ksazApKXt2MChJ''@;'; put 'put ''dSxncik7Y29udGludWV9cG4mJlRPKFthaSxfaSxPbl0sSk49PntrMD1zRShrMCxKTiwiICIpfSk7Y29uc3Qga3c9JGEoZ3Iubm9kZU5hbWUpO2lmKEtOKGt3LG92LGswKSl7aWYodm4mJiJvYmplY3QiPT10eXBlb2YgRWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBFZS5nZXRBdHRyaWJ1dGVUeXBl''@;'; put 'put ''JiYhVDEpc3dpdGNoKEVlLmdldEF0dHJpYnV0ZVR5cGUoa3csb3YpKXtjYXNlIlRydXN0ZWRIVE1MIjprMD12bi5jcmVhdGVIVE1MKGswKTticmVhaztjYXNlIlRydXN0ZWRTY3JpcHRVUkwiOmswPXZuLmNyZWF0ZVNjcmlwdFVSTChrMCl9aWYoazAhPT1qQSl0cnl7VDE/Z3Iuc2V0QXR0cmli''@;'; put 'put ''dXRlTlMoVDEsSXUsazApOmdyLnNldEF0dHJpYnV0ZShJdSxrMCksRTYoZ3IpP1l0KGdyKTplMmUobC5yZW1vdmVkKX1jYXRjaHt2MChJdSxncil9fWVsc2UgdjAoSXUsZ3IpfUUzKEduLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLGdyLG51bGwpfSxhdj1mdW5jdGlvbiBjbyhncil7bGV0IFFp''@;'; put 'put ''PW51bGw7Y29uc3QgWGE9R04oZ3IpO2ZvcihFMyhHbi5iZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSxncixudWxsKTtRaT1YYS5uZXh0Tm9kZSgpOylFMyhHbi51cG9uU2FuaXRpemVTaGFkb3dOb2RlLFFpLG51bGwpLCROKFFpKSxYTihRaSksUWkuY29udGVudCBpbnN0YW5jZW9mIGYmJmNvKFFp''@;'; put 'put ''LmNvbnRlbnQpO0UzKEduLmFmdGVyU2FuaXRpemVTaGFkb3dET00sZ3IsbnVsbCl9O3JldHVybiBsLnNhbml0aXplPWZ1bmN0aW9uKGNvKXtsZXQgZ3I9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LFFpPW51bGwsWGE9bnVsbCxkYz1u''@;'; put 'put ''dWxsLEEwPW51bGw7aWYoQmw9IWNvLEJsJiYoY289Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiBjbyYmIXRnKGNvKSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGNvLnRvU3RyaW5nKXRocm93IGxFKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJzdHJpbmciIT10eXBl''@;'; put 'put ''b2YoY289Y28udG9TdHJpbmcoKSkpdGhyb3cgbEUoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1pZighbC5pc1N1cHBvcnRlZClyZXR1cm4gY287aWYoZHJ8fFZBKGdyKSxsLnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiBjbyYmKElvPSExKSxJbyl7aWYoY28ubm9kZU5h''@;'; put 'put ''bWUpe2NvbnN0IFpoPSRhKGNvLm5vZGVOYW1lKTtpZighZmFbWmhdfHx0cltaaF0pdGhyb3cgbEUoInJvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UiKX19ZWxzZSBpZihjbyBpbnN0YW5jZW9mIE0pUWk9VXMoIlx4M2MhLS0tLVx4M2UiKSxY''@;'; put 'put ''YT1RaS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoY28sITApLDE9PT1YYS5ub2RlVHlwZSYmIkJPRFkiPT09WGEubm9kZU5hbWV8fCJIVE1MIj09PVhhLm5vZGVOYW1lP1FpPVhhOlFpLmFwcGVuZENoaWxkKFhhKTtlbHNle2lmKCFabiYmIXBuJiYhJG4mJi0xPT09Y28uaW5kZXhPZigiPCIp''@;'; put 'put ''KXJldHVybiB2biYmTnI/dm4uY3JlYXRlSFRNTChjbyk6Y287aWYoUWk9VXMoY28pLCFRaSlyZXR1cm4gWm4/bnVsbDpOcj9DbjoiIn1RaSYmVXImJll0KFFpLmZpcnN0Q2hpbGQpO2NvbnN0IEl1PUdOKElvP2NvOlFpKTtmb3IoO2RjPUl1Lm5leHROb2RlKCk7KSROKGRjKSxYTihkYyksZGMu''@;'; put 'put ''Y29udGVudCBpbnN0YW5jZW9mIGYmJmF2KGRjLmNvbnRlbnQpO2lmKElvKXJldHVybiBjbztpZihabil7aWYoc3IpZm9yKEEwPXdyLmNhbGwoUWkub3duZXJEb2N1bWVudCk7UWkuZmlyc3RDaGlsZDspQTAuYXBwZW5kQ2hpbGQoUWkuZmlyc3RDaGlsZCk7ZWxzZSBBMD1RaTtyZXR1cm4oTnQu''@;'; put 'put ''c2hhZG93cm9vdHx8TnQuc2hhZG93cm9vdG1vZGUpJiYoQTA9bXIuY2FsbChkLEEwLCEwKSksQTB9bGV0IFQxPSRuP1FpLm91dGVySFRNTDpRaS5pbm5lckhUTUw7cmV0dXJuICRuJiZmYVsiIWRvY3R5cGUiXSYmUWkub3duZXJEb2N1bWVudCYmUWkub3duZXJEb2N1bWVudC5kb2N0eXBlJiZR''@;'; put 'put ''aS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmRzEoczJlLFFpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKFQxPSI8IURPQ1RZUEUgIitRaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSsiPlxuIitUMSkscG4mJlRPKFthaSxfaSxPbl0sWmg9PntUMT1zRShUMSxaaCwiICIp''@;'; put 'put ''fSksdm4mJk5yP3ZuLmNyZWF0ZUhUTUwoVDEpOlQxfSxsLnNldENvbmZpZz1mdW5jdGlvbigpe1ZBKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSksZHI9ITB9LGwuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXt4Nj1udWxsLGRyPSExfSxs''@;'; put 'put ''LmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oY28sZ3IsUWkpe3g2fHxWQSh7fSk7Y29uc3QgWGE9JGEoY28pLGRjPSRhKGdyKTtyZXR1cm4gS04oWGEsZGMsUWkpfSxsLmFkZEhvb2s9ZnVuY3Rpb24oY28sZ3IpeyJmdW5jdGlvbiI9PXR5cGVvZiBnciYmb0UoR25bY29dLGdyKX0sbC5yZW1v''@;'; put 'put ''dmVIb29rPWZ1bmN0aW9uKGNvLGdyKXtpZih2b2lkIDAhPT1ncil7Y29uc3QgUWk9TEtlKEduW2NvXSxncik7cmV0dXJuLTE9PT1RaT92b2lkIDA6T0tlKEduW2NvXSxRaSwxKVswXX1yZXR1cm4gZTJlKEduW2NvXSl9LGwucmVtb3ZlSG9va3M9ZnVuY3Rpb24oY28pe0duW2NvXT1bXX0sbC5y''@;'; put 'put ''ZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe0duPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZv''@;'; put 'put ''cmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0sbH0oKTtmdW5jdGlvbiBkMmUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2Fd''@;'; put 'put ''XSxhKz0xfWZ1bmN0aW9uIG8kKGMsbCl7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9MX1mdW5jdGlvbiBkRShjKXtjb25zdCBsPVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1j''@;'; put 'put ''Lmxlbmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1bXSksbFtmXVtoXT1jW2hdW2ZdO3JldHVybiBsfWZ1bmN0aW9uIHF1KGMsbCxhLGQpe2xldCBoPS0xLGY9Yyx2PWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJy''@;'; put 'put ''YXkuZnJvbShjKSk7Y29uc3QgTT1mLmxlbmd0aDtmb3IoZCYmTSYmKGgrPTEsdj1mW2hdKSxoKz0xO2g8TTspdj1sKHYsZltoXSxoLGYpLGgrPTE7cmV0dXJuIHZ9ZnVuY3Rpb24gSW0oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBo''@;'; put 'put ''PWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXtjb25zdCBNPWRbYV07bChNLGEsZCkmJih2Kz0xLGZbdl09TSksYSs9MX1yZXR1cm4gZn1mdW5jdGlvbiB5cyhjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5n''@;'; put 'put ''dGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspdis9MSxmW3ZdPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gWW4oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFth''@;'; put 'put ''XSxhLGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIGgyZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIEpLZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBRS2UoYyl7cmV0dXJuIHF1KGMs''@;'; put 'put ''KGwsYSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gZXFlKGMpe3JldHVybiBjLmxlbmd0aD9oMmUoYykvYy5sZW5ndGg6MH1mdW5jdGlvbiBmMmUoYyl7cmV0dXJuIHF1KGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/ZjJlKGEpOmEp''@;'; put 'put ''LFtdKX1mdW5jdGlvbiBwMmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57LTE9PT1sLmluZGV4T2YoYSkmJmwucHVzaChhKX0pLGx9ZnVuY3Rpb24gcyQoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1th''@;'; put 'put ''XTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBZbihoLHY9PntmPWYuZmlsdGVyKE09PiF2LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gdHFlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNb''@;'; put 'put ''YV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gWW4oaCx2PT57Zj1mLmZpbHRlcihNPT52LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gbnFlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNb''@;'; put 'put ''YV07Y29uc3RbZCwuLi5oXT1bLi4ubF0sZj1uZXcgU2V0KGQpO3JldHVybiBZbihoLHY9PntZbih2LE09PntmLmhhcyhNKXx8Zi5hZGQoTSl9KX0pLEFycmF5LmZyb20oZil9ZnVuY3Rpb24gbCQoYyl7cmV0dXJuIGMuc3BsaXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0/YXJndW1lbnRzWzFdOiIgIil9ZnVuY3Rpb24gZ2woYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBxdShjLChmLHYsTSk9PmYrdi5yZXBsYWNlKC9ccj9cblxzKi9n''@;'; put 'put ''LCIiKSsoYVtNXT9hW01dOiIiKSwiIikudHJpbSgpfWZ1bmN0aW9uIGxjKGMpe2xldCBsO3N3aXRjaCh0eXBlb2YgYyl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpsPWAke2N9YDticmVhaztjYXNlIm9iamVjdCI6bD1udWxsPT09Yz8iIjpjLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJ1bmRl''@;'; put 'put ''ZmluZWQiOmw9IiI7YnJlYWs7ZGVmYXVsdDpsPWMudG9TdHJpbmcoKX1yZXR1cm4gbH1mdW5jdGlvbiBQYShjKXtyZXR1cm4gdHlwZW9mIGM8InUifWZ1bmN0aW9uIHljKGMpe3JldHVybiB0eXBlb2YgYz4idSJ9ZnVuY3Rpb24gVWMoYyl7cmV0dXJuIG51bGw9PT1jfHwiIj09PWN8fHljKGMp''@;'; put 'put ''fWZ1bmN0aW9uIGcyZShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1jb25zdCBoRT0ibGVuZ3RoIixmRT1jPT5wYXJzZUludChjLDE2KSxtMmU9Yz0+cGFyc2VJbnQoYywxMCksRE89KGMsbCxhKT0+Yy5zdWJzdHIobCxhKSxw''@;'; put 'put ''RT1jPT5jLmNvZGVQb2ludEF0KDApLTY1LGMkPWM9PmAke2N9YC5yZXBsYWNlKC9cLS9nLCIiKSxycWU9Yz0+ZkUoRE8oYyQoYyksZkUoIjEyIikscEUoIkYiKSkpLyhmRShETyhjJChjKSxwRSgiQiIpLH5+IVtdW2hFXSkpfHw5KSxpcWU9KCk9PnR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFth''@;'; put 'put ''LXowLTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0KTtsZXQgdjJlPSExO2NvbnN0IGIyZT17aW52YWxpZDooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhh''@;'; put 'put ''bmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGdsYAogICAgVGhlIGxp''@;'; put 'put ''Y2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVy''@;'; put 'put ''c2lvbiByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYH0sbWlzc2luZzooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBV''@;'; put 'put ''c2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdu''@;'; put 'put ''b24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0XHgyMAogICAgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifSx5MmU9e2ludmFsaWQ6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5''@;'; put 'put ''IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBvbiBob3cgdG9ceDIwCiAgICBpbnN0YWxsIGl0IHBy''@;'; put 'put ''b3Blcmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGdsYAogICAgVGhl''@;'; put 'put ''IGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJfYmxhbmsiPlJl''@;'; put 'put ''bmV3PC9hPiB5b3VyXHgyMAogICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnlceDIwCiAgICBoZWxwLCBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzYWxlc0BoYW5kc29udGFibGUuY29t''@;'; put 'put ''Ij5zYWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gfSxtaXNzaW5nOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVs''@;'; put 'put ''eSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJs''@;'; put 'put ''ZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBhYm91dCBpdCBpblx4MjAKICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+''@;'; put 'put ''c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn07ZnVuY3Rpb24gXzJlKGMsbCl7Y29uc3QgYT0hVWMoYyksZD0ic3RyaW5nIj09dHlwZW9mIGMmJiJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI9PT1jLnRvTG93ZXJDYXNlKCksaD0iMTUu''@;'; put 'put ''My4wIjtsZXQgZix2PSJpbnZhbGlkIixNPSJpbnZhbGlkIjtjb25zdCBEPWZ1bmN0aW9uIGFxZShjKXtsZXQgbD1bXVtoRV0sYT1sO2lmKGNbaEVdIT09cEUoIloiKSlyZXR1cm4hMTtmb3IobGV0IGQ9IiIsaD0iQjxINFArIi5zcGxpdCgiIiksZj1wRShoLnNoaWZ0KCkpO2Y7Zj1wRShoLnNo''@;'; put 'put ''aWZ0KCl8fCJBIikpLS1mPCIiW2hFXT9hfD0obTJlKGAke20yZShmRShkKSsoZkUoRE8oYyxNYXRoLmFicyhmKSwyKSkrW10pLnBhZFN0YXJ0KDIsIjAiKSl9YCklOTd8fDIpPj4xOmQ9RE8oYyxmLGY/MT09PWhbaEVdPzk6ODo2KTtyZXR1cm4gYT09PWx9KGM9YyQoY3x8IiIpKTtpZihhfHxk''@;'; put 'put ''fHxEKWlmKEQpe2NvbnN0IFo9T28oIjI5LzA0LzIwMjUiLCJERC9NTS9ZWVlZIikscmU9TWF0aC5mbG9vcihaLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksY2U9cnFlKGMpO2Y9T28oODY0ZTUqKGNlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIikscmU+Y2U/KHY9ImV4cGlyZWQi''@;'; put 'put ''LE09ImV4cGlyZWQiKToodj0idmFsaWQiLE09InZhbGlkIil9ZWxzZSBkPyh2PSJub25fY29tbWVyY2lhbCIsTT0idmFsaWQiKToodj0iaW52YWxpZCIsTT0iaW52YWxpZCIpO2Vsc2Ugdj0ibWlzc2luZyIsTT0ibWlzc2luZyI7aWYoaXFlKCkmJih2PSJ2YWxpZCIsTT0idmFsaWQiKSwhdjJl''@;'; put 'put ''JiYidmFsaWQiIT09diYmKGIyZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PXY/ImluZm8iOiJ3YXJuIl0oYjJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksdjJlPSEwKSwidmFsaWQiIT09TSYm''@;'; put 'put ''bC5wYXJlbnROb2RlJiZ5MmVbTV0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKXtjb25zdCByZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZS5jbGFzc05hbWU9ImhhbmRzb250YWJsZSBob3QtZGlzcGxheS1saWNlbnNlLWluZm8iLHJlLmlubmVySFRNTD15MmVb''@;'; put 'put ''TV0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pLGwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmUsbC5uZXh0U2libGluZyl9fWZ1bmN0aW9uIHAxKGMpe3JldHVybiBjWzBdLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSl9ZnVuY3Rpb24gb3FlKCl7Y29uc3QgYz1bXTtmb3Io''@;'; put 'put ''dmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtsZXQgaD1hLmxlbmd0aDtmb3IoO2g7KXtoLT0xO2NvbnN0IGY9bGMoYVtoXSkudG9Mb3dlckNhc2UoKTstMT09PWMuaW5kZXhPZihmKSYmYy5wdXNoKGYpfXJldHVybiAx''@;'; put 'put ''PT09Yy5sZW5ndGh9ZnVuY3Rpb24gdSQoKXtmdW5jdGlvbiBjKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9cmV0dXJuIGMoKStjKCkrYygpK2MoKX1mdW5jdGlvbiBkJChjKXtyZXR1cm4vXihbMC05XVswLTld''@;'; put 'put ''PyUkKXwoXjEwMCUkKS8udGVzdChjKX1mdW5jdGlvbiBoJChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuYCR7Y31gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywoYSxkKT0+IlxcIj09PWEuY2hh''@;'; put 'put ''ckF0KDApP2Euc3Vic3RyKDEsYS5sZW5ndGgtMSk6dm9pZCAwPT09bFtkXT8iIjpsW2RdKX1mdW5jdGlvbiBmJChjKXtyZXR1cm4gSU8oYCR7Y31gLHtBTExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiBJTyhjLGwpe3JldHVybiBYS2Uuc2FuaXRpemUoYyxsKX1jb25zdCBINz1jPT5bInRhYmlu''@;'; put 'put ''ZGV4IixjXSxtcWU9KCk9Plsicm9sZSIsImNoZWNrYm94Il0sZ0U9Yz0+WyJhcmlhLWxhYmVsIixjXSxONz0oKT0+WyJhcmlhLWhpZGRlbiIsInRydWUiXSxTMmU9Yz0+WyJhcmlhLWhhc3BvcHVwIixjXSxNMmU9Yz0+WyJhcmlhLXJvd2NvdW50IixjXSxSTz1jPT5bImFyaWEtY29sY291bnQi''@;'; put 'put ''LGNdLHgyZT1jPT5bImFyaWEtcm93aW5kZXgiLGNdLGckPWM9PlsiYXJpYS1jb2xpbmRleCIsY10sTjI9Yz0+WyJhcmlhLWV4cGFuZGVkIixjXSxFMmU9KCk9PlsiYXJpYS1yZWFkb25seSIsInRydWUiXSxUMmU9KCk9PlsiYXJpYS1pbnZhbGlkIiwidHJ1ZSJdLEEyZT1jPT5bImFyaWEtY2hl''@;'; put 'put ''Y2tlZCIsY10sTXFlPWM9PlsiYXJpYS1jb250cm9scyIsY10sRXFlPWM9PlsiYXJpYS1saXZlIixjXSxUcWU9Yz0+WyJhcmlhLXJlbGV2YW50IixjXSxBcWU9Yz0+WyJhcmlhLXNldHNpemUiLGNdLGtxZT1jPT5bImFyaWEtcG9zaW5zZXQiLGNdO2Z1bmN0aW9uIGsyZShjKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPS0xLGQ9bnVsbCxoPWM7Zm9yKDtudWxsIT09aDspe2lmKGE9PT1sKXtkPWg7YnJlYWt9aC5ob3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2g9aC5ob3N0Oihh''@;'; put 'put ''Kz0xLGg9aC5wYXJlbnROb2RlKX1yZXR1cm4gZH1mdW5jdGlvbiBtRShjLGwpe2NvbnN0IGE9Yy5jbG9zZXN0KCIuaGFuZHNvbnRhYmxlIik7cmV0dXJuISFhJiYoYS5wYXJlbnROb2RlPT09bHx8YT09PWwpfWZ1bmN0aW9uIEQyZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMu''@;'; put 'put ''cGFyZW50KSYmYy5mcmFtZUVsZW1lbnR9ZnVuY3Rpb24gVjcoYyl7cmV0dXJuIEQyZShjKSYmYy5wYXJlbnR9ZnVuY3Rpb24gRHFlKGMpe3JldHVybiEhT2JqZWN0LmdldFByb3RvdHlwZU9mKGMucGFyZW50KX1mdW5jdGlvbiBSbShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtjb25zdHtFTEVNRU5UX05PREU6ZCxET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmh9PU5vZGU7bGV0IGY9Yztmb3IoO251bGwhPWYmJmYhPT1hOyl7Y29uc3R7bm9k''@;'; put 'put ''ZVR5cGU6dixub2RlTmFtZTpNfT1mO2lmKHY9PT1kJiYobC5pbmNsdWRlcyhNKXx8bC5pbmNsdWRlcyhmKSkpcmV0dXJuIGY7Y29uc3R7aG9zdDpEfT1mO2Y9RCYmdj09PWg/RDpmLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdkUoYyxsLGEpe2NvbnN0IGQ9W107bGV0IGg9Yztm''@;'; put 'put ''b3IoO2gmJihoPVJtKGgsbCxhKSxoJiYoIWF8fGEuY29udGFpbnMoaCkpKTspZC5wdXNoKGgpLGg9aC5ob3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2guaG9zdDpoLnBhcmVudE5vZGU7Y29uc3QgZj1kLmxlbmd0aDtyZXR1cm4gZj9kW2YtMV06bnVsbH1m''@;'; put 'put ''dW5jdGlvbiBJMmUoYyxsKXtjb25zdCBhPXtlbGVtZW50OnZvaWQgMCxjbGFzc05hbWVzOltdfTtsZXQgZD1jO2Zvcig7bnVsbCE9PWQmJmQhPT1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhYS5lbGVtZW50Oyl7aWYoInN0cmluZyI9PXR5cGVvZiBsJiZkLmNsYXNzTGlzdC5j''@;'; put 'put ''b250YWlucyhsKSlhLmVsZW1lbnQ9ZCxhLmNsYXNzTmFtZXMucHVzaChsKTtlbHNlIGlmKGwgaW5zdGFuY2VvZiBSZWdFeHApe2NvbnN0IGg9QXJyYXkuZnJvbShkLmNsYXNzTGlzdCkuZmlsdGVyKGY9PmwudGVzdChmKSk7aC5sZW5ndGgmJihhLmVsZW1lbnQ9ZCxhLmNsYXNzTmFtZXMucHVz''@;'; put 'put ''aCguLi5oKSl9ZD1kLnBhcmVudEVsZW1lbnR9cmV0dXJuIGF9ZnVuY3Rpb24gTG0oYyxsKXtsZXQgYT1jLnBhcmVudE5vZGUsZD1bXTtmb3IoInN0cmluZyI9PXR5cGVvZiBsP2Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kZWZhdWx0Vmlldz9jLnF1ZXJ5U2VsZWN0b3JBbGwobCk6''@;'; put 'put ''Yy5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobCksMCk6ZC5wdXNoKGwpO251bGwhPT1hOyl7aWYoZC5pbmRleE9mKGEpPi0xKXJldHVybiEwO2E9YS5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIFIyZShjKXtsZXQgbD0wLGE9YztpZihhLnByZXZpb3VzU2libGluZylmb3Io''@;'; put 'put ''O2E9YS5wcmV2aW91c1NpYmxpbmc7KWwrPTE7cmV0dXJuIGx9ZnVuY3Rpb24gT20oYyxsLGEpe2NvbnN0IGQ9YS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke2N9YCk7cmV0dXJuIGQ/ZC5jb250YWlucyhsKTpudWxsfWZ1bmN0aW9uIEwyZShjKXtyZXR1cm4gYyYm''@;'; put 'put ''Yy5sZW5ndGg/Yy5maWx0ZXIobD0+ISFsKTpbXX1mdW5jdGlvbiBPMmUoYyxsKXtpZighY3x8IWMubGVuZ3RoKXJldHVybiBsP3tyZWdleEZyZWU6W10scmVnZXhlczpbXX06W107Y29uc3QgYT1bXSxkPVtdO3JldHVybiBkLnB1c2goLi4uYy5maWx0ZXIoaD0+e2NvbnN0IGY9aCBpbnN0YW5j''@;'; put 'put ''ZW9mIFJlZ0V4cDtyZXR1cm4gZiYmbCYmYS5wdXNoKGgpLCFmfSkpLGw/e3JlZ2V4RnJlZTpkLHJlZ2V4ZXM6YX06ZH1mdW5jdGlvbiBwbyhjLGwpe3JldHVybiB2b2lkIDAhPT1jLmNsYXNzTGlzdCYmInN0cmluZyI9PXR5cGVvZiBsJiYiIiE9PWwmJmMuY2xhc3NMaXN0LmNvbnRhaW5zKGwp''@;'; put 'put ''fWZ1bmN0aW9uIFRpKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPUwyZShsKSkubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LmFkZCguLi5sKX1mdW5jdGlvbiBsbyhjLGwpeyJzdHJpbmciPT10eXBlb2YgbD9sPWwuc3BsaXQoIiAiKTpsIGluc3RhbmNlb2YgUmVn''@;'; put 'put ''RXhwJiYobD1bbF0pO2xldHtyZWdleEZyZWU6YSxyZWdleGVzOmR9PU8yZShsLCEwKTthPUwyZShhKSxhLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5yZW1vdmUoLi4uYSksZC5mb3JFYWNoKGg9PntjLmNsYXNzTGlzdC5mb3JFYWNoKGY9PntoLnRlc3QoZikmJmMuY2xhc3NMaXN0LnJlbW92ZShm''@;'; put 'put ''KX0pfSl9ZnVuY3Rpb24gdm8oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7QXJyYXkuaXNBcnJheShsKXx8KGw9W1tsLGFdXSksbC5mb3JFYWNo''@;'; put 'put ''KGQ9PntBcnJheS5pc0FycmF5KGQpJiYiIiE9PWRbMF0mJmMuc2V0QXR0cmlidXRlKC4uLmQpfSl9ZnVuY3Rpb24gQjcoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdOyJzdHJpbmciPT10eXBlb2YgbD9sPWwuc3BsaXQo''@;'; put 'put ''IiAiKTpsIGluc3RhbmNlb2YgUmVnRXhwJiYobD1bbF0pO2NvbnN0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09TzJlKGwsITApO2EuZm9yRWFjaChoPT57IiIhPT1oJiZjLnJlbW92ZUF0dHJpYnV0ZShoKX0pLGQuZm9yRWFjaChoPT57Yy5nZXRBdHRyaWJ1dGVOYW1lcygpLmZvckVhY2goZj0+''@;'; put 'put ''e2gudGVzdChmKSYmYy5yZW1vdmVBdHRyaWJ1dGUoZil9KX0pfWZ1bmN0aW9uIHYkKGMpe2lmKDM9PT1jLm5vZGVUeXBlKWMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKTtlbHNlIGlmKFsiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUUiJdLmluZGV4T2YoYy5ub2RlTmFtZSk+''@;'; put 'put ''LTEpe2NvbnN0IGw9Yy5jaGlsZE5vZGVzO2ZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKXYkKGxbYV0pfX1mdW5jdGlvbiB4cChjKXtsZXQgbDtmb3IoO2w9Yy5sYXN0Q2hpbGQ7KWMucmVtb3ZlQ2hpbGQobCl9Y29uc3QgUDJlPS8oPCguKik+fCYoLiopOykvO2Z1bmN0aW9uIGo3KGMs''@;'; put 'put ''bCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtQMmUudGVzdChsKT9jLmlubmVySFRNTD1hP0lPKGwpOmw6UG0oYyxsKX1mdW5jdGlvbiBQbShjLGwpe2NvbnN0IGE9Yy5maXJzdENoaWxkO2EmJjM9PT1hLm5vZGVUeXBl''@;'; put 'put ''JiZudWxsPT09YS5uZXh0U2libGluZz9hLnRleHRDb250ZW50PWw6KHhwKGMpLGMuYXBwZW5kQ2hpbGQoYy5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGwpKSl9ZnVuY3Rpb24gejcoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9Yy5vd25lckRvY3Vt''@;'; put 'put ''ZW50LmRlZmF1bHRWaWV3O2xldCBkPWM7Zm9yKDtkIT09bDspe2lmKG51bGw9PT1kKXJldHVybiExO2lmKGQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKGQuaG9zdCl7aWYoZC5ob3N0LmltcGwpcmV0dXJuIHo3KGQuaG9zdC5pbXBsKTtpZihkLmhvc3QpcmV0''@;'; put 'put ''dXJuIHo3KGQuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYoIm5vbmUiPT09YS5nZXRDb21wdXRlZFN0eWxlKGQpLmRpc3BsYXkpcmV0dXJuITE7ZD1kLnBhcmVudE5vZGV9cmV0dXJuITB9ZnVuY3Rpb24gRjJlKGMpe2Nv''@;'; put 'put ''bnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2xldCBkPWM7Zm9yKDtkLnBhcmVudE5vZGU7KXtpZigiMHB4Ij09PWQuc3R5bGUuaGVpZ2h0fHwiMCI9PT1kLnN0eWxlLmhlaWdodClyZXR1cm4iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShkKS5vdmVyZmxvdztkPWQucGFy''@;'; put 'put ''ZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBVMChjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXcsZD1sLmRvY3VtZW50RWxlbWVudDtsZXQgZix2LE0saD1jO2ZvcihmPWgub2Zmc2V0TGVmdCx2PWgub2Zmc2V0VG9wLE09aDsoaD1oLm9mZnNldFBhcmVudCkmJmgh''@;'; put 'put ''PT1sLmJvZHkmJiJvZmZzZXRMZWZ0ImluIGg7KWYrPWgub2Zmc2V0TGVmdCx2Kz1oLm9mZnNldFRvcCxNPWg7cmV0dXJuIE0mJiJmaXhlZCI9PT1NLnN0eWxlLnBvc2l0aW9uJiYoZis9YS5wYWdlWE9mZnNldHx8ZC5zY3JvbGxMZWZ0LHYrPWEucGFnZVlPZmZzZXR8fGQuc2Nyb2xsVG9wKSx7''@;'; put 'put ''bGVmdDpmLHRvcDp2fX1mdW5jdGlvbiBiJCgpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxZfWZ1bmN0aW9uIExPKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFh9ZnVuY3Rpb24gT08oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/YiQobCk6Yy5zY3JvbGxUb3B9ZnVuY3Rpb24geSQoYyl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/TE8obCk6Yy5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGJFKGMpe2xldCBsPWMub3duZXJEb2N1bWVudCxhPWw/bC5kZWZhdWx0Vmlldzp2b2lkIDA7bHx8KGw9''@;'; put 'put ''Yy5kb2N1bWVudD9jLmRvY3VtZW50OmMsYT1sLmRlZmF1bHRWaWV3KTtjb25zdCBkPVsiYXV0byIsInNjcm9sbCJdO2xldCBoPWMucGFyZW50Tm9kZTtmb3IoO2gmJmguc3R5bGUmJmwuYm9keSE9PWg7KXtsZXR7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09aC5zdHlsZTtp''@;'; put 'put ''ZihbZix2LE1dLmluY2x1ZGVzKCJzY3JvbGwiKSlyZXR1cm4gaDtpZigoe292ZXJmbG93OmYsb3ZlcmZsb3dYOnYsb3ZlcmZsb3dZOk19PWEuZ2V0Q29tcHV0ZWRTdHlsZShoKSksZC5pbmNsdWRlcyhmKXx8ZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhNKXx8aC5jbGllbnRIZWlnaHQ8PWgu''@;'; put 'put ''c2Nyb2xsSGVpZ2h0KzEmJihkLmluY2x1ZGVzKE0pfHxkLmluY2x1ZGVzKGYpKXx8aC5jbGllbnRXaWR0aDw9aC5zY3JvbGxXaWR0aCsxJiYoZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhmKSkpcmV0dXJuIGg7aD1oLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24gSDJlKGMpe3JldHVy''@;'; put 'put ''biBjLnNjcm9sbEhlaWdodC1jLmNsaWVudEhlaWdodH1mdW5jdGlvbiBOMmUoYyl7cmV0dXJuIGMuc2Nyb2xsV2lkdGgtYy5jbGllbnRXaWR0aH1mdW5jdGlvbiBhXyhjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXc7bGV0IGQ9Yy5wYXJlbnROb2RlO2Zvcig7ZCYm''@;'; put 'put ''ZC5zdHlsZSYmbC5ib2R5IT09ZDspe2lmKCJ2aXNpYmxlIiE9PWQuc3R5bGUub3ZlcmZsb3cmJiIiIT09ZC5zdHlsZS5vdmVyZmxvdylyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShkKSxmPVsic2Nyb2xsIiwiaGlkZGVuIiwiYXV0byJdLHY9aC5nZXRQcm9wZXJ0eVZhbHVl''@;'; put 'put ''KCJvdmVyZmxvdyIpLE09aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy15IiksRD1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXgiKTtpZihmLmluY2x1ZGVzKHYpfHxmLmluY2x1ZGVzKE0pfHxmLmluY2x1ZGVzKEQpKXJldHVybiBkO2Q9ZC5wYXJlbnROb2RlfXJldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIHlFKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOndpbmRvdztpZighYylyZXR1cm47aWYoYz09PWEpcmV0dXJuIndpZHRoIj09PWw/YCR7YS5pbm5lcldpZHRofXB4YDoiaGVpZ2h0Ij09PWw/YCR7YS5pbm5l''@;'; put 'put ''ckhlaWdodH1weGA6dm9pZCAwO2NvbnN0IGQ9Yy5zdHlsZVtsXTtpZigiIiE9PWQmJnZvaWQgMCE9PWQpcmV0dXJuIGQ7Y29uc3QgaD1hLmdldENvbXB1dGVkU3R5bGUoYyk7cmV0dXJuIiIhPT1oW2xdJiZ2b2lkIDAhPT1oW2xdP2hbbF06dm9pZCAwfWZ1bmN0aW9uIElxZShjLGwpe2NvbnN0''@;'; put 'put ''e3NlbGVjdG9yVGV4dDphfT1sO2xldCBkPSExO3JldHVybiBsLnR5cGU9PT1DU1NSdWxlLlNUWUxFX1JVTEUmJmEmJihjLm1zTWF0Y2hlc1NlbGVjdG9yP2Q9Yy5tc01hdGNoZXNTZWxlY3RvcihhKTpjLm1hdGNoZXMmJihkPWMubWF0Y2hlcyhhKSkpLGR9ZnVuY3Rpb24gc3UoYyl7cmV0dXJu''@;'; put 'put ''IGMub2Zmc2V0V2lkdGh9ZnVuY3Rpb24gTXUoYyl7cmV0dXJuIGMub2Zmc2V0SGVpZ2h0fWZ1bmN0aW9uIG9fKGMpe3JldHVybiBjLmNsaWVudEhlaWdodHx8Yy5pbm5lckhlaWdodH1mdW5jdGlvbiBfJChjKXtyZXR1cm4gYy5jbGllbnRXaWR0aHx8Yy5pbm5lcldpZHRofWZ1bmN0aW9uIFJx''@;'; put 'put ''ZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gTHFlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiB3JChjKXtyZXR1cm4gYy5zZWxlY3Rpb25TdGFydD9jLnNlbGVjdGlvblN0YXJ0OjB9ZnVuY3Rpb24gVjJlKGMpe3JldHVy''@;'; put 'put ''biBjLnNlbGVjdGlvbkVuZD9jLnNlbGVjdGlvbkVuZDowfWZ1bmN0aW9uIE9xZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Y29uc3QgbD1jLmRvY3VtZW50O2xldCBhPSIiO3JldHVybiBjLmdldFNlbGVjdGlv''@;'; put 'put ''bj9hPWMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTpsLnNlbGVjdGlvbiYmIkNvbnRyb2wiIT09bC5zZWxlY3Rpb24udHlwZSYmKGE9bC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0KSxhfWZ1bmN0aW9uIEMkKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjLmdldFNlbGVjdGlvbiYmKGMuZ2V0U2VsZWN0aW9uKCkuZW1wdHk/Yy5nZXRTZWxlY3Rpb24oKS5lbXB0eSgpOmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzJiZjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpKX1m''@;'; put 'put ''dW5jdGlvbiBfRShjLGwsYSl7aWYodm9pZCAwPT09YSYmKGE9bCksYy5zZXRTZWxlY3Rpb25SYW5nZSl7Yy5mb2N1cygpO3RyeXtjLnNldFNlbGVjdGlvblJhbmdlKGwsYSl9Y2F0Y2h7Y29uc3QgaD1jLnBhcmVudE5vZGUsZj1oLnN0eWxlLmRpc3BsYXk7aC5zdHlsZS5kaXNwbGF5PSJibG9j''@;'; put 'put ''ayIsYy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpLGguc3R5bGUuZGlzcGxheT1mfX19bGV0IFMkLGxfO2Z1bmN0aW9uIGYwKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O3JldHVybiB2b2lkIDA9PT1TJCYmKFMk''@;'; put 'put ''PWZ1bmN0aW9uIFBxZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixsLnN0eWxlLndpZHRoPSIxMDAlIjtjb25z''@;'; put 'put ''dCBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5zdHlsZS5ib3hTaXppbmc9ImNvbnRlbnQtYm94IixhLnN0eWxlLmhlaWdodD0iMTUwcHgiLGEuc3R5bGUubGVmdD0iMHB4IixhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixhLnN0eWxlLnRv''@;'; put 'put ''cD0iMHB4IixhLnN0eWxlLndpZHRoPSIyMDBweCIsYS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGEuYXBwZW5kQ2hpbGQobCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKGEpO2NvbnN0IGQ9bC5vZmZzZXRXaWR0aDthLnN0eWxlLm92ZXJmbG93PSJzY3JvbGwi''@;'; put 'put ''O2xldCBoPWwub2Zmc2V0V2lkdGg7cmV0dXJuIGQ9PT1oJiYoaD1hLmNsaWVudFdpZHRoKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQoYSksZC1ofShjKSksUyR9ZnVuY3Rpb24gTSQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5''@;'; put 'put ''LnNjcm9sbEhlaWdodD5jLmlubmVySGVpZ2h0OmMub2Zmc2V0V2lkdGghPT1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIHgkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgV2luZG93P2MuZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aD5jLmlubmVyV2lkdGg6Yy5vZmZzZXRIZWlnaHQhPT1jLmNsaWVu''@;'; put 'put ''dEhlaWdodH1mdW5jdGlvbiBQTyhjLGwsYSl7Yy5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKCR7bH0sJHthfSwwKWB9ZnVuY3Rpb24gRnFlKGMpe2xldCBsO3JldHVybiBjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT0obD1jLnN0eWxlLnRyYW5zZm9ybSk/WyJ0cmFuc2Zvcm0iLGxdOi0x''@;'; put 'put ''fWZ1bmN0aW9uIHdFKGMpe2Muc3R5bGUudHJhbnNmb3JtJiYiIiE9PWMuc3R5bGUudHJhbnNmb3JtJiYoYy5zdHlsZS50cmFuc2Zvcm09IiIpfWZ1bmN0aW9uIENFKGMpe3JldHVybiBjJiYoWyJJTlBVVCIsIlNFTEVDVCIsIlRFWFRBUkVBIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMXx8InRy''@;'; put 'put ''dWUiPT09Yy5jb250ZW50RWRpdGFibGUpfWZ1bmN0aW9uIEZPKGMpe3JldHVybiBDRShjKSYmITE9PT1jLmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKX1mdW5jdGlvbiBIcWUoYyl7Rk8oYy5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxjLnNlbGVjdCgpfWZ1bmN0aW9uIEUk''@;'; put 'put ''KGMpe3JldHVybiFjLnBhcmVudE5vZGV9ZnVuY3Rpb24gQjJlKGMsbCl7bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChkLGgpPT57ZC5mb3JFYWNoKGY9PntmLmlzSW50ZXJzZWN0aW5nJiZudWxsIT09Yy5vZmZzZXRQYXJlbnQmJihsKCksaC51bm9ic2VydmUoYykpfSl9LHtyb290OmMub3du''@;'; put 'put ''ZXJEb2N1bWVudC5ib2R5fSkub2JzZXJ2ZShjKX1mdW5jdGlvbiBUJChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50''@;'; put 'put ''c1syXTtjb25zdCBkPWMub3duZXJEb2N1bWVudCxoPWQuY3JlYXRlUmFuZ2UoKSxmPWQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7dm8oYywiY29udGVudGVkaXRhYmxlIiwhMCksYSYmdm8oYywuLi5ONygpKSxsJiZUaShjLCJpbnZpc2libGVTZWxlY3Rpb24iKSxoLnNlbGVjdE5vZGVD''@;'; put 'put ''b250ZW50cyhjKSxmLnJlbW92ZUFsbFJhbmdlcygpLGYuYWRkUmFuZ2UoaCl9ZnVuY3Rpb24gQSQoYyl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRT''@;'; put 'put ''ZWxlY3Rpb24oKTtjLmhhc0F0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSYmYy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksYS5yZW1vdmVBbGxSYW5nZXMoKSxsJiZsbyhjLCJpbnZpc2libGVTZWxlY3Rpb24iKSxjLnJlbW92ZUF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil9ZnVu''@;'; put 'put ''Y3Rpb24gajJlKGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtUJChjLGEpLGwoKSxBJChjLGEpfWZ1bmN0aW9uIEVwKGMpe3ZhciBsO2NvbnN0IGE9bnVsbD09Y3x8bnVsbD09PShsPWMub3duZXJEb2N1bWVudCl8''@;'; put 'put ''fHZvaWQgMD09PWw/dm9pZCAwOmwuZGVmYXVsdFZpZXcuRWxlbWVudDtyZXR1cm4hIShhJiZudWxsIT09YSYmYyBpbnN0YW5jZW9mIGEpfWZ1bmN0aW9uIG1sKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIHoyZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9MDtjb25zdCBkPXtsYXN0Q2FsbFRocm90dGxlZDohMH07bGV0IGg9bnVsbDtyZXR1cm4gZnVuY3Rpb24gZigpe2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJn''@;'; put 'put ''dW1lbnRzW0RdO2NvbnN0IFo9RGF0ZS5ub3coKTtsZXQgcmU9ITE7ZC5sYXN0Q2FsbFRocm90dGxlZD0hMCxhfHwoYT1aLHJlPSEwKTtjb25zdCBjZT1sLShaLWEpO3JldHVybiByZT8oZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsTSkpOihoJiZjbGVhclRpbWVvdXQoaCks''@;'; put 'put ''aD1zZXRUaW1lb3V0KCgpPT57ZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsTSksYT0wLGg9dm9pZCAwfSxjZSkpLGR9fWZ1bmN0aW9uIE5xZShjKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTA7Y29uc3Qg''@;'; put 'put ''ZD16MmUoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwKTtsZXQgaD1hO2Z1bmN0aW9uIHYoKXtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNKSxaPTA7WjxNO1orKylEW1pdPWFyZ3VtZW50c1taXTtyZXR1''@;'; put 'put ''cm4gaD8oaC09MSxjLmFwcGx5KHRoaXMsRCkpOmQuYXBwbHkodGhpcyxEKX1yZXR1cm4gdi5jbGVhckhpdHM9ZnVuY3Rpb24gZigpe2g9YX0sdn1mdW5jdGlvbiBTRShjKXtsZXQgZCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAs''@;'; put 'put ''YT1udWxsO3JldHVybiBmdW5jdGlvbiBoKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGEmJmNsZWFyVGltZW91dChhKSxhPXNldFRpbWVvdXQoKCk9PntkPWMuYXBwbHkodGhpcyx2KX0sbCks''@;'; put 'put ''ZH19ZnVuY3Rpb24gVnFlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1sO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYp''@;'; put 'put ''LEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO3JldHVybiBxdShoLChaLHJlKT0+cmUoWiksZC5hcHBseSh0aGlzLE0pKX19ZnVuY3Rpb24gayQoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1l''@;'; put 'put ''bnRzW2RdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBjLmFwcGx5KHRoaXMsYS5jb25jYXQodikpfX1mdW5jdGlvbiBVMmUoYyl7Y29uc3QgbD1jLmxlbmd0aDty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBEPWQuY29uY2F0KHYpO2xldCBaO3JldHVybiBaPUQubGVuZ3RoPj1sP2MuYXBwbHko''@;'; put 'put ''dGhpcyxEKTphKEQpLFp9fShbXSl9ZnVuY3Rpb24gQnFlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07''@;'; put 'put ''Y29uc3QgRD1kLmNvbmNhdCh2LnJldmVyc2UoKSk7bGV0IFo7cmV0dXJuIFo9RC5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEQpOmEoRCksWn19KFtdKX1mdW5jdGlvbiBITyhjLGwsYSxkLGgsZix2LE0pe3JldHVybiBQYShNKT9jLmNhbGwobCxhLGQsaCxmLHYsTSk6UGEodik/Yy5jYWxsKGws''@;'; put 'put ''YSxkLGgsZix2KTpQYShmKT9jLmNhbGwobCxhLGQsaCxmKTpQYShoKT9jLmNhbGwobCxhLGQsaCk6UGEoZCk/Yy5jYWxsKGwsYSxkKTpQYShhKT9jLmNhbGwobCxhKTpjLmNhbGwobCl9ZnVuY3Rpb24gc18oYyl7bGV0IGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bD1jLmxlbmd0aD9uZXcg''@;'; put 'put ''QXJyYXkoYy5sZW5ndGgpLmZpbGwobnVsbCk6W106KGw9e30sWG8oYywoYSxkKT0+eyJfX2NoaWxkcmVuIiE9PWQmJihsW2RdPWEmJiJvYmplY3QiPT10eXBlb2YgYSYmIUFycmF5LmlzQXJyYXkoYSk/c18oYSk6QXJyYXkuaXNBcnJheShhKT9hLmxlbmd0aCYmIm9iamVjdCI9PXR5cGVvZiBh''@;'; put 'put ''WzBdJiYhQXJyYXkuaXNBcnJheShhWzBdKT9bc18oYVswXSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gWjJlKGMsbCl7cmV0dXJuIGwucHJvdG90eXBlLmNvbnN0cnVjdG9yPWwsYy5wcm90b3R5cGU9bmV3IGwsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjfWZ1bmN0aW9uIHh1KGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk7cmV0dXJuIFhvKGwsKGgsZik9PnsoITE9PT1kfHxhLmluY2x1ZGVzKGYpKSYmKGNbZl09aCl9KSxjfWZ1bmN0aW9uIE1FKGMsbCl7WG8obCwoYSxkKT0+e2xbZF0mJiJvYmplY3QiPT10eXBlb2YgbFtkXT8oY1tkXXx8KGNbZF09QXJyYXkuaXNB''@;'; put 'put ''cnJheShsW2RdKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobFtkXSk/bFtkXTp7fSksTUUoY1tkXSxsW2RdKSk6Y1tkXT1sW2RdfSl9ZnVuY3Rpb24gZzEoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjP0pTT04ucGFyc2UoSlNPTi5zdHJp''@;'; put 'put ''bmdpZnkoYykpOmN9ZnVuY3Rpb24gbjMoYyl7Y29uc3QgbD17fTtyZXR1cm4gWG8oYywoYSxkKT0+e2xbZF09YX0pLGx9ZnVuY3Rpb24gVGwoYyl7Yy5NSVhJTlN8fChjLk1JWElOUz1bXSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxs''@;'; put 'put ''O2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBZbihhLGg9PntjLk1JWElOUy5wdXNoKGguTUlYSU5fTkFNRSksWG8oaCwoZix2KT0+e2lmKHZvaWQgMCE9PWMucHJvdG90eXBlW3ZdKXRocm93IG5ldyBFcnJvcihgTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICcke3Z9JyBhbHJlYWR5''@;'; put 'put ''IGV4aXN0IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpYy5wcm90b3R5cGVbdl09ZjtlbHNle2NvbnN0IEQ9ZnVuY3Rpb24ocmUpe2NvbnN0IGNlPWBfJHtyZX1gO3JldHVybiBmdW5jdGlvbihiZSl7dGhpc1tjZV09YmV9fTtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoYy5wcm90b3R5cGUsdix7Z2V0OmZ1bmN0aW9uKHJlLGNlKXtjb25zdCBiZT1gXyR7cmV9YDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpc1tiZV0mJih0aGlzW2JlXT0oQmU9PntsZXQgcWU9QmU7cmV0dXJuKEFycmF5LmlzQXJyYXkocWUpfHxxbyhx''@;'; put 'put ''ZSkpJiYocWU9ZzEocWUpKSxxZX0pKGNlKSksdGhpc1tiZV19fSh2LGYpLHNldDpEKHYpLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSksY31mdW5jdGlvbiBOTyhjLGwpe3JldHVybiBKU09OLnN0cmluZ2lmeShjKT09PUpTT04uc3RyaW5naWZ5KGwpfWZ1bmN0aW9uIHFvKGMpe3JldHVybiJbb2Jq''@;'; put 'put ''ZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWZ1bmN0aW9uIFRwKGMsbCxhLGQpe2QudmFsdWU9YSxkLndyaXRhYmxlPSExIT09ZC53cml0YWJsZSxkLmVudW1lcmFibGU9ITEhPT1kLmVudW1lcmFibGUsZC5jb25maWd1cmFibGU9ITEhPT1kLmNvbmZp''@;'; put 'put ''Z3VyYWJsZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLGQpfWZ1bmN0aW9uIFhvKGMsbCl7Zm9yKGNvbnN0IGEgaW4gYylpZigoIWMuaGFzT3duUHJvcGVydHl8fGMuaGFzT3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpKSYmITE9PT1sKGNb''@;'; put 'put ''YV0sYSxjKSlicmVhaztyZXR1cm4gY31mdW5jdGlvbiBXMmUoYyxsKXtjb25zdCBhPWwuc3BsaXQoIi4iKTtsZXQgZD1jO3JldHVybiBYbyhhLGg9PntpZihkPWRbaF0sdm9pZCAwPT09ZClyZXR1cm4gZD12b2lkIDAsITF9KSxkfWZ1bmN0aW9uIFZPKGMsbCxhKXtpZigic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIGwpcmV0dXJuO2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xldCBoPWM7ZC5mb3JFYWNoKChmLHYpPT57Il9fcHJvdG9fXyI9PT1mfHwiY29uc3RydWN0b3IiPT09Znx8InByb3RvdHlwZSI9PT1mfHwodiE9PWQubGVuZ3RoLTE/KEV1KGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YSl9''@;'; put 'put ''KX1mdW5jdGlvbiBCTyhjKXtpZighcW8oYykpcmV0dXJuIDA7Y29uc3QgbD1mdW5jdGlvbihhKXtsZXQgZD0wO3JldHVybiBxbyhhKT9YbyhhLChoLGYpPT57Il9fY2hpbGRyZW4iIT09ZiYmKGQrPWwoaCkpfSk6ZCs9MSxkfTtyZXR1cm4gbChjKX1mdW5jdGlvbiBGZChjKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InZhbHVlIjtjb25zdCBhPWBfJHtsfWAsZD17X3RvdWNoZWQ6ITEsW2FdOmMsaXNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsbCx7''@;'; put 'put ''Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXt0aGlzLl90b3VjaGVkPSEwLHRoaXNbYV09aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkfWZ1bmN0aW9uIEV1KGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGwpfWZ1bmN0aW9u''@;'; put 'put ''IHhFKGMpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIEVFKGMpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBEJCgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gd2luZG93fWZ1bmN0aW9uIFkyZSgpe3JldHVybiB0eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1In1mdW5jdGlvbiBHMmUoYyl7cmV0dXJuIGxffHwobF89Im9iamVjdCI9PXR5cGVvZiBJbnRsP25ldyBJbnRsLkNvbGxhdG9yKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5jb21wYXJlOiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/KGEsZCk9PmAke2F9YC5sb2NhbGVDb21wYXJlKGQpOihhLGQpPT5hPT09ZD8wOmE+ZD8tMToxLGxfKX15KDk1NDkzKTtjb25zdCBWMj1jPT57Y29uc3QgbD17dmFsdWU6ITEsdGVzdDooYSxkKT0+e2wudmFsdWU9YyhhLGQpfX07''@;'; put 'put ''cmV0dXJuIGx9LGI1PXtjaHJvbWU6VjIoKGMsbCk9Pi9DaHJvbWUvLnRlc3QoYykmJi9Hb29nbGUvLnRlc3QobCkpLGNocm9tZVdlYktpdDpWMihjPT4vQ3JpT1MvLnRlc3QoYykpLGVkZ2U6VjIoYz0+L0VkZ2UvLnRlc3QoYykpLGVkZ2VXZWJLaXQ6VjIoYz0+L0VkZ2lPUy8udGVzdChjKSks''@;'; put 'put ''ZmlyZWZveDpWMihjPT4vRmlyZWZveC8udGVzdChjKSksZmlyZWZveFdlYktpdDpWMihjPT4vRnhpT1MvLnRlc3QoYykpLG1vYmlsZTpWMihjPT4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoYykpLHNhZmFyaTpW''@;'; put 'put ''MigoYyxsKT0+L1NhZmFyaS8udGVzdChjKSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KGwpKX0sY189e21hYzpWMihjPT4vXk1hYy8udGVzdChjKSksd2luOlYyKGM9Pi9eV2luLy50ZXN0KGMpKSxsaW51eDpWMihjPT4vXkxpbnV4Ly50ZXN0KGMpKSxpb3M6VjIoYz0+L2lQaG9uZXxpUGFkfGlQ''@;'; put 'put ''b2QvaS50ZXN0KGMpKX07ZnVuY3Rpb24gJDJlKCl7bGV0e3VzZXJBZ2VudDpjPW5hdmlnYXRvci51c2VyQWdlbnQsdmVuZG9yOmw9bmF2aWdhdG9yLnZlbmRvcn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O1hvKGI1LGE9PntsZXR7''@;'; put 'put ''dGVzdDpkfT1hO2QoYyxsKX0pfWZ1bmN0aW9uIEsyZSgpe2xldHtwbGF0Zm9ybTpjPW5hdmlnYXRvci5wbGF0Zm9ybX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O1hvKGNfLGw9PntsZXR7dGVzdDphfT1sO2EoYyl9KX1mdW5jdGlv''@;'; put 'put ''biBJJCgpe3JldHVybiBiNS5jaHJvbWUudmFsdWV9ZnVuY3Rpb24gcTJlKCl7cmV0dXJuIGI1LmNocm9tZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBqTygpe3JldHVybiBiNS5maXJlZm94LnZhbHVlfWZ1bmN0aW9uIFgyZSgpe3JldHVybiBiNS5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9u''@;'; put 'put ''IFRFKCl7cmV0dXJuIGI1LnNhZmFyaS52YWx1ZX1mdW5jdGlvbiBKMmUoKXtyZXR1cm4gYjUuZWRnZS52YWx1ZX1mdW5jdGlvbiBqcWUoKXtyZXR1cm4gYjUuZWRnZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBBcCgpe3JldHVybiBiNS5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gUiQoKXtyZXR1cm4g''@;'; put 'put ''Y18uaW9zLnZhbHVlfWZ1bmN0aW9uIEwkKCl7bGV0e21heFRvdWNoUG9pbnRzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3I7cmV0dXJuIGM+MiYmY18ubWFjLnZhbHVlfWZ1bmN0aW9uIE8kKCl7cmV0dXJuIGNfLndp''@;'; put 'put ''bi52YWx1ZX1mdW5jdGlvbiB6Tygpe3JldHVybiBjXy5tYWMudmFsdWV9ZnVuY3Rpb24genFlKCl7cmV0dXJuIGNfLmxpbnV4LnZhbHVlfVkyZSgpJiYoJDJlKCksSzJlKCkpO2NvbnN0IFlhPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9X''@;'; put 'put ''X1VQOjM4LEFVRElPX0RPV046ak8oKT8xODI6MTc0LEFVRElPX01VVEU6ak8oKT8xODE6MTczLEFVRElPX1VQOmpPKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQs''@;'; put 'put ''Q09OVFJPTDoxNyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3''@;'; put 'put ''LEYxNzoxMjgsRjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5TRVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVS''@;'; put 'put ''SU9EOjE5MCxTQ1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BBQ0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LFVxZT1bWWEuQUxULFlhLkFSUk9XX0RPV04sWWEuQVJST1dfTEVGVCxZYS5BUlJPV19SSUdIVCxZ''@;'; put 'put ''YS5BUlJPV19VUCxZYS5BVURJT19ET1dOLFlhLkFVRElPX01VVEUsWWEuQVVESU9fVVAsWWEuQkFDS1NQQUNFLFlhLkNBUFNfTE9DSyxZYS5ERUxFVEUsWWEuRU5ELFlhLkVOVEVSLFlhLkVTQ0FQRSxZYS5GMSxZYS5GMixZYS5GMyxZYS5GNCxZYS5GNSxZYS5GNixZYS5GNyxZYS5GOCxZYS5G''@;'; put 'put ''OSxZYS5GMTAsWWEuRjExLFlhLkYxMixZYS5GMTMsWWEuRjE0LFlhLkYxNSxZYS5GMTYsWWEuRjE3LFlhLkYxOCxZYS5GMTksWWEuSE9NRSxZYS5JTlNFUlQsWWEuTUVESUFfTkVYVCxZYS5NRURJQV9QTEFZX1BBVVNFLFlhLk1FRElBX1BSRVYsWWEuTUVESUFfU1RPUCxZYS5OVUxMLFlhLk5V''@;'; put 'put ''TV9MT0NLLFlhLlBBR0VfRE9XTixZYS5QQUdFX1VQLFlhLlBBVVNFLFlhLlNDUk9MTF9MT0NLLFlhLlNISUZULFlhLlRBQl07ZnVuY3Rpb24gUTJlKGMpe3JldHVybiAzMj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49OTYmJmM8PTExMXx8Yz49MTg2JiZjPD0xOTJ8fGM+PTIxOSYmYzw9MjIyfHxj''@;'; put 'put ''Pj0yMjZ8fGM+PTY1JiZjPD05MH1mdW5jdGlvbiBQJChjKXtyZXR1cm4gVXFlLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIFpxZShjKXtjb25zdCBsPVtdO3JldHVybiB6TygpP2wucHVzaChZYS5DT01NQU5EX0xFRlQsWWEuQ09NTUFORF9SSUdIVCxZYS5DT01NQU5EX0ZJUkVGT1gpOmwucHVzaChZ''@;'; put 'put ''YS5DT05UUk9MKSxsLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIGVmZShjKXtyZXR1cm5bWWEuQ09OVFJPTCxZYS5DT01NQU5EX0xFRlQsWWEuQ09NTUFORF9SSUdIVCxZYS5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIHVfKGMsbCl7Y29uc3QgYT1sLnNwbGl0KCJ8Iik7bGV0''@;'; put 'put ''IGQ9ITE7cmV0dXJuIFluKGEsaD0+e2lmKGM9PT1ZYVtoXSlyZXR1cm4gZD0hMCwhMX0pLGR9ZnVuY3Rpb24gQjIoYyl7Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxjLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBGbShjKXtyZXR1cm4hMT09PWMuaXNJbW1lZGlhdGVQcm9w''@;'; put 'put ''YWdhdGlvbkVuYWJsZWR9ZnVuY3Rpb24gSG0oYyl7cmV0dXJuIDI9PT1jLmJ1dHRvbn1mdW5jdGlvbiBVTyhjKXtyZXR1cm4gMD09PWMuYnV0dG9ufWZ1bmN0aW9uIHRmZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFRvdWNoRXZlbnR9ZnVuY3Rpb24gbmZlKGMsbCl7Y29uc3QgYT17eDpjLm9m''@;'; put 'put ''ZnNldFgseTpjLm9mZnNldFl9O2xldCBkPWMudGFyZ2V0O2lmKCFFcChsKXx8ZCE9PWwmJmQuY29udGFpbnMobCkpcmV0dXJuIGE7Zm9yKDtkIT09bDspYS54Kz1kLm9mZnNldExlZnQsYS55Kz1kLm9mZnNldFRvcCxkPWQub2Zmc2V0UGFyZW50O3JldHVybiBhfWZ1bmN0aW9uIGlsKCl7UGEo''@;'; put 'put ''Y29uc29sZSkmJmNvbnNvbGUud2FybiguLi5hcmd1bWVudHMpfWZ1bmN0aW9uIEYkKCl7UGEoY29uc29sZSkmJmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKX1jb25zdCBVNz1bImFmdGVyQ2VsbE1ldGFSZXNldCIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRp''@;'; put 'put ''b25zIiwiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsImFmdGVyQ29udGV4dE1lbnVIaWRlIiwiYmVmb3JlQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb250ZXh0TWVudVNob3ci''@;'; put 'put ''LCJhZnRlckNvcHlMaW1pdCIsImJlZm9yZUNyZWF0ZUNvbCIsImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLCJhZnRlckNyZWF0ZUNvbCIsImJlZm9yZUNyZWF0ZVJvdyIsImFmdGVyQ3JlYXRlUm93IiwiYWZ0ZXJEZXNlbGVjdCIsImFmdGVyRGVzdHJveSIsImFmdGVyRG9jdW1lbnRLZXlE''@;'; put 'put ''b3duIiwiYWZ0ZXJEcmF3U2VsZWN0aW9uIiwiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IiwiYWZ0ZXJHZXRDZWxsTWV0YSIsImFmdGVyR2V0Q29sSGVhZGVyIiwiYWZ0ZXJHZXRSb3dIZWFkZXIiLCJhZnRlckluaXQiLCJhZnRlckxvYWREYXRh''@;'; put 'put ''IiwiYWZ0ZXJVcGRhdGVEYXRhIiwiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsImFmdGVyT25DZWxsTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxNb3VzZVVwIiwiYWZ0ZXJPbkNlbGxDb250ZXh0TWVu''@;'; put 'put ''dSIsImFmdGVyT25DZWxsTW91c2VPdmVyIiwiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsImFmdGVyUmVtb3ZlQ29sIiwiYWZ0ZXJSZW1vdmVSb3ciLCJiZWZvcmVSZW5kZXJlciIsImFmdGVyUmVuZGVyZXIiLCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIiwiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0''@;'; put 'put ''aWNhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIsImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTY3JvbGwiLCJhZnRlclNlbGVjdGlvbiIsImFmdGVyU2VsZWN0aW9uQnlQ''@;'; put 'put ''cm9wIiwiYWZ0ZXJTZWxlY3Rpb25FbmQiLCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwiYWZ0ZXJTZWxlY3RDb2x1bW5zIiwiYmVmb3JlU2VsZWN0Um93cyIsImFmdGVyU2VsZWN0Um93cyIsImFmdGVyU2V0''@;'; put 'put ''Q2VsbE1ldGEiLCJhZnRlclJlbW92ZUNlbGxNZXRhIiwiYWZ0ZXJTZXREYXRhQXRDZWxsIiwiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIiwiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiwiYWZ0ZXJTZXRUaGVtZSIsImFmdGVyVXBkYXRlU2V0dGluZ3MiLCJhZnRlclZhbGlkYXRlIiwiYmVmb3Jl''@;'; put 'put ''TGFuZ3VhZ2VDaGFuZ2UiLCJhZnRlckxhbmd1YWdlQ2hhbmdlIiwiYmVmb3JlQXV0b2ZpbGwiLCJhZnRlckF1dG9maWxsIiwiYmVmb3JlQ2VsbEFsaWdubWVudCIsImJlZm9yZUNoYW5nZSIsImJlZm9yZUNoYW5nZVJlbmRlciIsImJlZm9yZURyYXdCb3JkZXJzIiwiYmVmb3JlR2V0Q2VsbE1l''@;'; put 'put ''dGEiLCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsImJlZm9yZUluaXQiLCJiZWZvcmVJbml0V2Fsa29udGFibGUiLCJiZWZvcmVMb2FkRGF0YSIsImJlZm9yZVVwZGF0ZURhdGEiLCJiZWZvcmVLZXlEb3duIiwiYmVmb3JlT25DZWxsTW91c2VEb3duIiwiYmVmb3JlT25DZWxsTW91c2VVcCIsImJl''@;'; put 'put ''Zm9yZU9uQ2VsbENvbnRleHRNZW51IiwiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwiYmVmb3JlT25DZWxsTW91c2VPdXQiLCJiZWZvcmVSZW1vdmVDb2wiLCJiZWZvcmVSZW1vdmVSb3ciLCJiZWZvcmVWaWV3UmVuZGVyIiwiYWZ0ZXJWaWV3UmVuZGVyIiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJS''@;'; put 'put ''ZW5kZXIiLCJiZWZvcmVSb3dXcmFwIiwiYmVmb3JlQ29sdW1uV3JhcCIsImJlZm9yZVNldENlbGxNZXRhIiwiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsImJlZm9yZVNldFJhbmdlU3RhcnQiLCJiZWZvcmVTZXRSYW5nZUVuZCIsImJlZm9yZVNl''@;'; put 'put ''bGVjdGlvbkhpZ2hsaWdodFNldCIsImJlZm9yZVRvdWNoU2Nyb2xsIiwiYmVmb3JlVmFsaWRhdGUiLCJiZWZvcmVWYWx1ZVJlbmRlciIsImNvbnN0cnVjdCIsImluaXQiLCJtb2RpZnlDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0aCIsIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIiwi''@;'; put 'put ''bW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLCJtb2RpZnlSb3dIZWFkZXIiLCJtb2RpZnlSb3dIZWlnaHQiLCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIiwibW9kaWZ5RGF0YSIsIm1vZGlmeVNvdXJjZURhdGEiLCJtb2RpZnlSb3dEYXRhIiwibW9kaWZ5R2V0Q2VsbENvb3JkcyIsIm1vZGlm''@;'; put 'put ''eUdldENvb3Jkc0VsZW1lbnQiLCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsInBlcnNpc3Rl''@;'; put 'put ''bnRTdGF0ZVNhdmUiLCJiZWZvcmVDb2x1bW5Tb3J0IiwiYWZ0ZXJDb2x1bW5Tb3J0IiwibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLCJiZWZvcmVDdXQiLCJhZnRlckN1dCIsImJlZm9yZUNvcHkiLCJhZnRlckNvcHkiLCJiZWZvcmVQYXN0ZSIsImFmdGVyUGFz''@;'; put 'put ''dGUiLCJiZWZvcmVDb2x1bW5GcmVlemUiLCJhZnRlckNvbHVtbkZyZWV6ZSIsImJlZm9yZUNvbHVtbk1vdmUiLCJhZnRlckNvbHVtbk1vdmUiLCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsImFmdGVyQ29sdW1uVW5mcmVlemUiLCJiZWZvcmVSb3dNb3ZlIiwiYWZ0ZXJSb3dNb3ZlIiwiYmVmb3Jl''@;'; put 'put ''Q29sdW1uUmVzaXplIiwiYWZ0ZXJDb2x1bW5SZXNpemUiLCJiZWZvcmVSb3dSZXNpemUiLCJhZnRlclJvd1Jlc2l6ZSIsImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIiwiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJiZWZv''@;'; put 'put ''cmVGaWx0ZXIiLCJhZnRlckZpbHRlciIsImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiwiYWZ0ZXJTaGVldEFkZGVkIiwiYWZ0ZXJTaGVldFJlbmFtZWQiLCJhZnRlclNoZWV0UmVtb3Zl''@;'; put 'put ''ZCIsIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiYmVmb3JlVW5kbyIsImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsImFmdGVyVW5kbyIsImFmdGVyVW5kb1N0YWNrQ2hhbmdlIiwiYmVmb3JlUmVkbyIsImJlZm9yZVJlZG9TdGFja0NoYW5nZSIs''@;'; put 'put ''ImFmdGVyUmVkbyIsImFmdGVyUmVkb1N0YWNrQ2hhbmdlIiwibW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwibW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsImFmdGVyTW9kaWZ5''@;'; put 'put ''VHJhbnNmb3JtU3RhcnQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJiZWZvcmVIaWRlUm93cyIsImFm''@;'; put 'put ''dGVySGlkZVJvd3MiLCJiZWZvcmVVbmhpZGVSb3dzIiwiYWZ0ZXJVbmhpZGVSb3dzIiwiYmVmb3JlSGlkZUNvbHVtbnMiLCJhZnRlckhpZGVDb2x1bW5zIiwiYmVmb3JlVW5oaWRlQ29sdW1ucyIsImFmdGVyVW5oaWRlQ29sdW1ucyIsImJlZm9yZVRyaW1Sb3ciLCJhZnRlclRyaW1Sb3ciLCJi''@;'; put 'put ''ZWZvcmVVbnRyaW1Sb3ciLCJhZnRlclVudHJpbVJvdyIsImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCJiZWZvcmVBZGRDaGlsZCIsImFmdGVyQWRkQ2hpbGQiLCJiZWZvcmVEZXRhY2hDaGlsZCIsImFmdGVy''@;'; put 'put ''RGV0YWNoQ2hpbGQiLCJiZWZvcmVCZWdpbkVkaXRpbmciLCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJhZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFm''@;'; put 'put ''dGVyUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0sSCQ9''@;'; put 'put ''bmV3IE1hcChbWyJtb2RpZnlSb3ciLCI4LjAuMCJdLFsibW9kaWZ5Q29sIiwiOC4wLjAiXSxbInVubW9kaWZ5Um93IiwiOC4wLjAiXSxbInVubW9kaWZ5Q29sIiwiOC4wLjAiXSxbInNraXBMZW5ndGhDYWNoZSIsIjguMC4wIl0sWyJoaWRkZW5Db2x1bW4iLCI4LjAuMCJdLFsiaGlkZGVuUm93''@;'; put 'put ''IiwiOC4wLjAiXV0pLE4kPW5ldyBNYXAoW1tdXSk7ZnVuY3Rpb24gViQoYyxsLGEpe3JmZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBpZmUoYyxsLGEpe3JldHVybiBjLnNldChaTyhjLGwpLGEpLGF9ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gYy5nZXQoWk8oYyxsKSl9ZnVuY3Rpb24gWk8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXkoMjMwMTIpLHkoODEyNjApO3ZhciBraD1uZXcgV2Vha01hcCxkXz1uZXcgV2Vha01hcCxCJD1uZXcgV2Vha01hcCxq''@;'; put 'put ''JD1uZXcgV2Vha1NldDtjbGFzcyBhZmV7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gV3FlKGMsbCl7cmZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGokKSxWJCh0aGlzLGtoLG5ldyBNYXApLFYkKHRoaXMsZF8sbmV3IE1hcCksViQodGhpcyxCJCxuZXcgU2V0KSxVNy5mb3JFYWNoKGw9PlpPKGok''@;'; put 'put ''LHRoaXMsb2ZlKS5jYWxsKHRoaXMsbCkpfWdldEhvb2tzKGwpe3ZhciBhO3JldHVybiBudWxsIT09KGE9WjAoa2gsdGhpcykuZ2V0KGwpKSYmdm9pZCAwIT09YT9hOltdfWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy''@;'; put 'put ''XTp7fTtaMChraCx0aGlzKS5oYXMobCl8fChaTyhqJCx0aGlzLG9mZSkuY2FsbCh0aGlzLGwpLFU3LnB1c2gobCkpO2NvbnN0IGg9WjAoa2gsdGhpcykuZ2V0KGwpO2lmKGguZmluZChaPT5aLmNhbGxiYWNrPT09YSkpcmV0dXJuO2NvbnN0IGY9TnVtYmVyLmlzSW50ZWdlcihkLm9yZGVySW5k''@;'; put 'put ''ZXgpP2Qub3JkZXJJbmRleDowLHY9ISFkLnJ1bk9uY2UsTT0hIWQuaW5pdGlhbEhvb2s7bGV0IEQ9ITE7aWYoTSl7Y29uc3QgWj1oLmZpbmQocmU9PnJlLmluaXRpYWxIb29rKTtaJiYoWi5jYWxsYmFjaz1hLEQ9ITApfWlmKCFEKXtoLnB1c2goe2NhbGxiYWNrOmEsb3JkZXJJbmRleDpmLHJ1''@;'; put 'put ''bk9uY2U6dixpbml0aWFsSG9vazpNLHNraXA6ITF9KTtsZXQgWj1aMChCJCx0aGlzKS5oYXMobCk7IVomJjAhPT1mJiYoWj0hMCxaMChCJCx0aGlzKS5hZGQobCkpLFomJmgubGVuZ3RoPjEmJlowKGtoLHRoaXMpLnNldChsLGgudG9Tb3J0ZWQoKHJlLGNlKT0+cmUub3JkZXJJbmRleC1jZS5v''@;'; put 'put ''cmRlckluZGV4KSl9fWhhcyhsKXtyZXR1cm4gWjAoa2gsdGhpcykuaGFzKGwpJiZaMChraCx0aGlzKS5nZXQobCkubGVuZ3RoPjB9cmVtb3ZlKGwsYSl7aWYoIVowKGtoLHRoaXMpLmhhcyhsKSlyZXR1cm4hMTtjb25zdCBkPVowKGtoLHRoaXMpLmdldChsKSxoPWQuZmluZChmPT5mLmNhbGxi''@;'; put 'put ''YWNrPT09YSk7aWYoaCl7bGV0IGY9WjAoZF8sdGhpcykuZ2V0KGwpO3JldHVybiBoLnNraXA9ITAsZis9MSxmPjEwMCYmKFowKGtoLHRoaXMpLnNldChsLGQuZmlsdGVyKHY9PiF2LnNraXApKSxmPTApLFowKGRfLHRoaXMpLnNldChsLGYpLCEwfXJldHVybiExfWRlc3Ryb3koKXtaMChraCx0''@;'; put 'put ''aGlzKS5jbGVhcigpLFowKGRfLHRoaXMpLmNsZWFyKCksaWZlKGtoLHRoaXMsbnVsbCksaWZlKGRfLHRoaXMsbnVsbCl9fWZ1bmN0aW9uIG9mZShjKXtaMChraCx0aGlzKS5zZXQoYyxbXSksWjAoZF8sdGhpcykuc2V0KGMsMCl9Y29uc3QgcXFlPWdsYFRoZSBwbHVnaW4gaG9vayAiW2hvb2tO''@;'; put 'put ''YW1lXSIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5ceDIwCiAgUGxlYXNlIGNvbnN1bHQgcmVsZWFzZSBub3RlcyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9yZWxlYXNlcy90YWcvW3JlbW92ZWRJblZlcnNpb25d''@;'; put 'put ''IHRvXHgyMAogIGxlYXJuIGFib3V0IHRoZSBtaWdyYXRpb24gcGF0aC5gO2NsYXNzIFNhe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIEdxZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJHFlKGMpe3ZhciBsPWZ1bmN0aW9uIEtxZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImdsb2JhbEJ1Y2tldCIsbmV3IGFmZSl9c3RhdGljIGdldFNpbmdsZXRvbigpe3JldHVybiBmdW5jdGlvbiBKcWUoKXtyZXR1cm4gWHFlfSgpfWdldEJ1Y2tldCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBsPyhsLnBsdWdpbkhvb2tCdWNrZXR8fChsLnBsdWdpbkhvb2tCdWNrZXQ9bmV3IGFmZSksbC5wbHVnaW5Ib29rQnVja2V0KTp0aGlzLmdsb2JhbEJ1Y2tldH1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiBBcnJheS5pc0FycmF5KGEpP1luKGEsZj0+dGhpcy5hZGQobCxmLGQpKTooSCQuaGFzKGwpJiZpbChoJChxcWUse2hvb2tOYW1lOmwscmVtb3Zl''@;'; put 'put ''ZEluVmVyc2lvbjpIJC5nZXQobCl9KSksTiQuaGFzKGwpJiZpbChOJC5nZXQobCkpLHRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse29yZGVySW5kZXg6aCxydW5PbmNlOiExfSkpLHRoaXN9b25jZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJd''@;'; put 'put ''P2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxmPT50aGlzLm9uY2UobCxmLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtvcmRlckluZGV4OmgscnVuT25jZTohMH0pLHRo''@;'; put 'put ''aXN9YWRkQXNGaXhlZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpP1luKGEsaD0+dGhpcy5hZGRBc0ZpeGVkKGwsaCxkKSk6dGhpcy5nZXRCdWNrZXQoZCkuYWRkKGws''@;'; put 'put ''YSx7aW5pdGlhbEhvb2s6ITB9KSx0aGlzfXJlbW92ZShsLGEpe3JldHVybiB0aGlzLmdldEJ1Y2tldChhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCkucmVtb3ZlKGwsYSl9aGFzKGwpe3JldHVybiB0aGlzLmdldEJ1Y2tldChhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCkuaGFzKGwpfXJ1bihsLGEsZCxoLGYsdixNLEQpe3tjb25zdCBaPXRoaXMuZ2V0QnVja2V0KCkuZ2V0SG9va3MoYSkscmU9Wj9aLmxlbmd0aDowO2xldCBjZT0wO2lmKHJlKWZvcig7Y2U8cmU7''@;'; put 'put ''KXtpZighWltjZV18fFpbY2VdLnNraXApe2NlKz0xO2NvbnRpbnVlfWNvbnN0IGJlPUhPKFpbY2VdLmNhbGxiYWNrLGwsZCxoLGYsdixNLEQpO3ZvaWQgMCE9PWJlJiYoZD1iZSksWltjZV0mJlpbY2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsWltjZV0uY2FsbGJhY2spLGNlKz0xfX17Y29u''@;'; put 'put ''c3QgWj10aGlzLmdldEJ1Y2tldChsKS5nZXRIb29rcyhhKSxyZT1aP1oubGVuZ3RoOjA7bGV0IGNlPTA7aWYocmUpZm9yKDtjZTxyZTspe2lmKCFaW2NlXXx8WltjZV0uc2tpcCl7Y2UrPTE7Y29udGludWV9Y29uc3QgYmU9SE8oWltjZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAw''@;'; put 'put ''IT09YmUmJihkPWJlKSxaW2NlXSYmWltjZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxaW2NlXS5jYWxsYmFjayxsKSxjZSs9MX19cmV0dXJuIGR9ZGVzdHJveSgpe3RoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpu''@;'; put 'put ''dWxsKS5kZXN0cm95KCl9cmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCl8fFU3LnB1c2gobCl9ZGVyZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKSYmVTcuc3BsaWNlKFU3LmluZGV4T2YobCksMSl9aXNEZXByZWNhdGVkKGwpe3JldHVybiBOJC5oYXMobCl8fEgkLmhhcyhs''@;'; put 'put ''KX1pc1JlZ2lzdGVyZWQobCl7cmV0dXJuIFU3LmluZGV4T2YobCk+PTB9Z2V0UmVnaXN0ZXJlZCgpe3JldHVybiBVN319Y29uc3QgWHFlPW5ldyBTYSx6JD1uZXcgTWFwO2Z1bmN0aW9uIHIzKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOiJjb21tb24iO3okLmhhcyhjKXx8eiQuc2V0KGMsbmV3IE1hcCk7Y29uc3QgbD16JC5nZXQoYyk7cmV0dXJue3JlZ2lzdGVyOmZ1bmN0aW9uIGEoTSxEKXtsLnNldChNLEQpfSxnZXRJdGVtOmZ1bmN0aW9uIGQoTSl7cmV0dXJuIGwuZ2V0KE0pfSxoYXNJdGVtOmZ1bmN0aW9uIGgo''@;'; put 'put ''TSl7cmV0dXJuIGwuaGFzKE0pfSxnZXROYW1lczpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmwua2V5cygpXX0sZ2V0VmFsdWVzOmZ1bmN0aW9uIHYoKXtyZXR1cm5bLi4ubC52YWx1ZXMoKV19fX1jb25zdCBVJD1uZXcgV2Vha01hcCx7cmVnaXN0ZXI6UXFlLGdldEl0ZW06c2ZlLGhhc0l0ZW06''@;'; put 'put ''bGZlLGdldE5hbWVzOmVYZX09cjMoImVkaXRvcnMiKTtmdW5jdGlvbiB0WGUoYyl7Y29uc3QgbD17fSxhPWM7dGhpcy5nZXRDb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBjfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKGQpe3JldHVybiBkLmd1aWQgaW4gbHx8KGxbZC5ndWlkXT1u''@;'; put 'put ''ZXcgYShkKSksbFtkLmd1aWRdfSxTYS5nZXRTaW5nbGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXtsW3RoaXMuZ3VpZF09bnVsbH0pfWZ1bmN0aW9uIGNmZShjLGwpe2xldCBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKVUkLmdldChjKXx8SGQobnVsbCxjKSxhPVUkLmdl''@;'; put 'put ''dChjKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgYyl0aHJvdyBFcnJvcignT25seSBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgY2FuIGJlIHBhc3NlZCBhcyAiZWRpdG9yIiBwYXJhbWV0ZXInKTthPXNmZShjKX1pZighYSl0aHJvdyBFcnJvcihgTm8gZWRpdG9yIHJlZ2lzdGVyZWQgdW5kZXIg''@;'; put 'put ''bmFtZSAiJHtjfSJgKTtyZXR1cm4gYS5nZXRJbnN0YW5jZShsKX1mdW5jdGlvbiBXTyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighbGZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIGVkaXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBz''@;'; put 'put ''ZmUoYykuZ2V0Q29uc3RydWN0b3IoKX1mdW5jdGlvbiBIZChjLGwpe2MmJiJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuRURJVE9SX1RZUEUpO2NvbnN0IGE9bmV3IHRYZShsKTsic3RyaW5nIj09dHlwZW9mIGMmJlFxZShjLGEpLFUkLnNldChsLGEpfWxldCBZTz0wO2NvbnN0IGoyPWNs''@;'; put 'put ''YXNzIGFYZXtjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsOyhmdW5jdGlvbiBuWGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHJYZShjKXt2YXIgbD1mdW5jdGlvbiBpWGUoYyxsKXtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl''@;'; put 'put ''IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywiY29udGV4dCIsdm9pZCAwKSx0aGlzLmNvbnRleHQ9bHx8dGhpcyx0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnM9W10pfWFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107ZnVuY3Rpb24gZih2KXtkLmNhbGwodGhpcyxmdW5jdGlvbiBvWGUoYyl7Y29uc3QgbD1jLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtyZXR1cm4gYy5z''@;'; put 'put ''dG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtsLmFwcGx5KHRoaXMpLEIyKHRoaXMpfSxjfSh2KSl9cmV0dXJuIHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVtZW50OmwsZXZlbnQ6YSxjYWxsYmFjazpkLGNhbGxiYWNrUHJveHk6ZixvcHRpb25zOmgsZXZl''@;'; put 'put ''bnRNYW5hZ2VyOnRoaXN9KSxsLmFkZEV2ZW50TGlzdGVuZXIoYSxmLGgpLFlPKz0xLCgpPT57dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKX19cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IHYsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYm''@;'; put 'put ''YXJndW1lbnRzWzNdLGY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2Y7KWlmKGYtPTEsdj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbZl0sdi5ldmVudD09PWEmJnYuZWxlbWVudD09PWwpe2lmKGQmJmQhPT12LmNhbGxiYWNrfHxoJiZ2LmV2ZW50TWFuYWdl''@;'; put 'put ''ciE9PXRoaXMpY29udGludWU7dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShmLDEpLHYuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHYuZXZlbnQsdi5jYWxsYmFja1Byb3h5LHYub3B0aW9ucyksWU8tPTF9fWNsZWFyRXZlbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5jb250ZXh0KXJldHVybjtsZXQgYT10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7YTspe2EtPTE7Y29uc3QgZD10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbYV07bCYmZC5l''@;'; put 'put ''dmVudE1hbmFnZXIhPT10aGlzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShhLDEpLGQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGQuZXZlbnQsZC5jYWxsYmFja1Byb3h5LGQub3B0aW9ucyksWU8tPTEpfX1jbGVhcigpe3RoaXMuY2xlYXJFdmVudHMoKX1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5jbGVhckV2ZW50cygpLHRoaXMuY29udGV4dD1udWxsfWRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpe3RoaXMuY2xlYXJFdmVudHMoITApLHRoaXMuY29udGV4dD1udWxsfWZpcmVFdmVudChsLGEpe2xldCBkPWwuZG9jdW1lbnQsaD1sO2R8fChkPWwub3duZXJEb2N1bWVu''@;'; put 'put ''dD9sLm93bmVyRG9jdW1lbnQ6bCxoPWQuZGVmYXVsdFZpZXcpO2NvbnN0IGY9e2J1YmJsZXM6ITAsY2FuY2VsYWJsZToibW91c2Vtb3ZlIiE9PWEsdmlldzpoLGRldGFpbDowLHNjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDoxLGNsaWVudFk6MSxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlm''@;'; put 'put ''dEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6dm9pZCAwfTtsZXQgdjtkLmNyZWF0ZUV2ZW50Pyh2PWQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIiksdi5pbml0TW91c2VFdmVudChhLGYuYnViYmxlcyxmLmNhbmNlbGFibGUsZi52aWV3LGYuZGV0YWlsLGYuc2Ny''@;'; put 'put ''ZWVuWCxmLnNjcmVlblksZi5jbGllbnRYLGYuY2xpZW50WSxmLmN0cmxLZXksZi5hbHRLZXksZi5zaGlmdEtleSxmLm1ldGFLZXksZi5idXR0b24sZi5yZWxhdGVkVGFyZ2V0fHxkLmJvZHkucGFyZW50Tm9kZSkpOnY9ZC5jcmVhdGVFdmVudE9iamVjdCgpLGwuZGlzcGF0Y2hFdmVudD9sLmRp''@;'; put 'put ''c3BhdGNoRXZlbnQodik6bC5maXJlRXZlbnQoYG9uJHthfWAsdil9fTtmdW5jdGlvbiBaNyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdVhlKGMpe3ZhciBsPWZ1bmN0aW9uIGRYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9''@;'; put 'put ''ZnVuY3Rpb24gWiQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBHTz1u''@;'; put 'put ''ZXcgV2Vha1NldDtjbGFzcyBXJHtjb25zdHJ1Y3RvcihsLGEsZCl7KGZ1bmN0aW9uIGxYZShjLGwpeyhmdW5jdGlvbiBjWGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu''@;'; put 'put ''IG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsR08pLFo3KHRoaXMsImhvdCIsdm9pZCAwKSxaNyh0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCksWjcodGhpcywic2VsZWN0aW9uIix2b2lkIDApLFo3KHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxaNyh0aGlzLCJkZXN0cm95ZWQi''@;'; put 'put ''LCExKSxaNyh0aGlzLCJhY3RpdmVFZGl0b3IiLHZvaWQgMCksWjcodGhpcywiY2VsbFByb3BlcnRpZXMiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLnRhYmxlTWV0YT1hLHRoaXMuc2VsZWN0aW9uPWQsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGoyKGwpLHRoaXMuaG90LmFkZEhvb2soImFmdGVy''@;'; put 'put ''RG9jdW1lbnRLZXlEb3duIixoPT5aJChHTyx0aGlzLHVmZSkuY2FsbCh0aGlzLGgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IixoPT5aJChHTyx0aGlzLHVmZSkuY2FsbCh0aGlzLGgpKSx0aGlzLmhvdC52aWV3Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNr''@;'; put 'put ''IiwoaCxmLHYpPT5aJChHTyx0aGlzLGhYZSkuY2FsbCh0aGlzLGgsZix2KSl9Z2V0QWN0aXZlRWRpdG9yKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yfXByZXBhcmVFZGl0b3IoKXt2YXIgbDtpZih0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpcmV0''@;'; put 'put ''dXJuIHZvaWQgdGhpcy5jbG9zZUVkaXRvcighMSwhMSxaPT57WiYmdGhpcy5wcmVwYXJlRWRpdG9yKCl9KTtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7aWYoIWF8fGEuaXNIZWFkZXIoKSly''@;'; put 'put ''ZXR1cm47Y29uc3R7cm93OmQsY29sOmh9PWEsZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZCxoLCExLCJtZXRhIik7bGV0IHY9ZCxNPWg7aWYoQXJyYXkuaXNBcnJheShmKSYmKFt2LE1dPWYpLHRoaXMuY2VsbFByb3BlcnRpZXM9dGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEodixNKSwhdGhpcy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBEPXRoaXMuaG90LmdldENlbGwoZCxoLCEwKTtpZihEKXtjb25zdCBaPXRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykscmU9dGhp''@;'; put 'put ''cy5ob3QuY29sVG9Qcm9wKE0pLGNlPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxNKTt0aGlzLmFjdGl2ZUVkaXRvcj1jZmUoWix0aGlzLmhvdCksdGhpcy5hY3RpdmVFZGl0b3IucHJlcGFyZShkLGgscmUsRCxjZSx0aGlzLmNlbGxQcm9w''@;'; put 'put ''ZXJ0aWVzKX19aXNFZGl0b3JPcGVuZWQoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzT3BlbmVkKCl9b3BlbkVkaXRvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYoIXRo''@;'; put 'put ''aXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2xldCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVCZWdpbkVkaXRpbmciLGguaGlnaGxpZ2h0LnJvdyxoLmhpZ2hs''@;'; put 'put ''aWdodC5jb2wsbCxhLGQpO2EgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYiYm9vbGVhbiIhPXR5cGVvZiBmJiYoZj0wPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc1NpbmdsZSgpKSwhMSE9PWY/KHRoaXMuYWN0aXZlRWRpdG9yfHwodGhpcy5ob3Quc2Nyb2xsVG9G''@;'; put 'put ''b2N1c2VkQ2VsbCgpLHRoaXMucHJlcGFyZUVkaXRvcigpKSx0aGlzLmFjdGl2ZUVkaXRvciYmKGQmJnRoaXMuYWN0aXZlRWRpdG9yLmVuYWJsZUZ1bGxFZGl0TW9kZSgpLHRoaXMuYWN0aXZlRWRpdG9yLmJlZ2luRWRpdGluZyhsLGEpKSk6dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3Nl''@;'; put 'put ''RWRpdG9yKGwsYSxkKXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2ZUVkaXRvci5maW5pc2hFZGl0aW5nKGwsYSxkKTpkJiZkKCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwpe3RoaXMuY2xvc2VFZGl0b3IoITEsbCl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1''@;'; put 'put ''ZShsKXt0aGlzLmNsb3NlRWRpdG9yKCEwLGwpfWNsZWFyQWN0aXZlRWRpdG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlzQ2VsbEVkaXRhYmxlKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3QuZ2V0''@;'; put 'put ''Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSx7cm93OmQsY29sOmh9PWwuaGlnaGxpZ2h0LHtyb3dJbmRleE1hcHBlcjpmLGNvbHVtbkluZGV4TWFwcGVyOnZ9PXRoaXMuaG90LE09Zi5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGQpKXx8di5pc0hpZGRlbih0aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGgpKTtyZXR1cm4hKHRoaXMuY2VsbFByb3BlcnRpZXMucmVhZE9ubHl8fCFhfHxNKX1tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKXtjb25zdCBhPXsuLi4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlcz90aGlzLnRhYmxlTWV0''@;'; put 'put ''YS5lbnRlck1vdmVzKGwpOnRoaXMudGFibGVNZXRhLmVudGVyTW92ZXN9O2wuc2hpZnRLZXkmJihhLnJvdz0tYS5yb3csYS5jb2w9LWEuY29sKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKGEucm93LGEuY29sKTp0aGlzLnNl''@;'; put 'put ''bGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLnJvdyxhLmNvbCwhMCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdWZlKGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighdGhpcy5ob3Qu''@;'; put 'put ''aXNMaXN0ZW5pbmcoKXx8IWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fEZtKGMpKXJldHVybjtjb25zdHtrZXlDb2RlOmF9PWMsZD0oYy5jdHJsS2V5fHxjLm1ldGFLZXkpJiYhYy5hbHRLZXk7KCF0aGlzLmFjdGl2ZUVkaXRvcnx8dGhpcy5hY3RpdmVFZGl0b3ImJiF0aGlzLmFjdGl2ZUVk''@;'; put 'put ''aXRvci5pc1dhaXRpbmcoKSkmJiFQJChhKSYmIWVmZShhKSYmIWQmJiF0aGlzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMub3BlbkVkaXRvcigiIixjKX1mdW5jdGlvbiBoWGUoYyxsKXtsLmlzQ2VsbCgpJiZ0aGlzLm9wZW5FZGl0b3IobnVsbCxjLCEwKX1jb25zdCBkZmU9bmV3IFdlYWtNYXA7''@;'; put 'put ''VyQuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPWRmZS5nZXQoYyk7cmV0dXJuIGR8fChkPW5ldyBXJChjLGwsYSksZGZlLnNldChjLGQpKSxkfTtjb25zdCBmWGU9VyQ7ZnVuY3Rpb24gQUUoYyxsLGEpe2hmZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gaGZlKGMsbCl7aWYo''@;'; put 'put ''bC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBjYyhjLGwpe3JldHVybiBjLmdldCh5NShjLGwpKX1mdW5jdGlvbiBrRShjLGwsYSl7cmV0dXJuIGMuc2V0''@;'; put 'put ''KHk1KGMsbCksYSksYX1mdW5jdGlvbiB5NShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2Jq''@;'; put 'put ''ZWN0Iil9Y29uc3QgaF89T2JqZWN0LmZyZWV6ZSh7Q0VMTDoiY2VsbCIsTUlYRUQ6Im1peGVkIn0pO3ZhciBYdT1uZXcgV2Vha01hcCwkTz1uZXcgV2Vha01hcCxLTz1uZXcgV2Vha01hcCxxTz1uZXcgV2Vha01hcCxYTz1uZXcgV2Vha01hcCxObT1uZXcgV2Vha1NldDtjbGFzcyBnWGV7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dmFyIGE9dGhpczsoZnVuY3Rpb24gcFhlKGMsbCl7aGZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLE5tKSxBRSh0aGlzLFh1LHZvaWQgMCksQUUodGhpcywkTyx2b2lkIDApLEFFKHRoaXMsS08sMSksQUUodGhpcyxxTyxudWxsKSxBRSh0aGlzLFhPLG5ldyBNYXApO2NvbnN0''@;'; put 'put ''IGQ9bC5nZXRTZXR0aW5ncygpO2tFKFh1LHRoaXMsbCksa0UoJE8sdGhpcyxkLmltZUZhc3RFZGl0P2hfLk1JWEVEOmhfLkNFTEwpLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJy''@;'; put 'put ''YXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHk1KE5tLGEsdlhlKS5jYWxsKGEsLi4uZil9KSxjYyhYdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7''@;'; put 'put ''djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geTUoTm0sYSxmZmUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8''@;'; put 'put ''aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHk1KE5tLGEsZmZlKS5jYWxsKGEsLi4uZil9KSxjYyhYdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylm''@;'; put 'put ''W3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4geTUoTm0sYSxtWGUpLmNhbGwoYSwuLi5mKX0pfWdldEZvY3VzTW9kZSgpe3JldHVybiBjYygkTyx0aGlzKX1zZXRGb2N1c01vZGUobCl7T2JqZWN0LnZhbHVlcyhoXykuaW5jbHVkZXMobCk/a0UoJE8sdGhpcyxsKTppbChgIiR7bH0iIGlzIG5vdCBh''@;'; put 'put ''IHZhbGlkIGZvY3VzIG1vZGUuYCl9Z2V0UmVmb2N1c0RlbGF5KCl7cmV0dXJuIGNjKEtPLHRoaXMpfXNldFJlZm9jdXNEZWxheShsKXtrRShLTyx0aGlzLGwpfXNldFJlZm9jdXNFbGVtZW50R2V0dGVyKGwpe2tFKHFPLHRoaXMsbCl9Z2V0UmVmb2N1c0VsZW1lbnQoKXt2YXIgbDtyZXR1cm4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgY2MocU8sdGhpcyk/Y2MocU8sdGhpcykuY2FsbCh0aGlzKTpudWxsPT09KGw9Y2MoWHUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLlRFWFRBUkVBfWZvY3VzT25IaWdobGlnaHRlZENlbGwobCl7Y29uc3QgYT1kPT57dmFy''@;'; put 'put ''IGgsZjtjb25zdCB2PW51bGw9PT0oaD1jYyhYdSx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQ7aWYoIXYpcmV0dXJuO2xldCBNPWNjKFh1LHRoaXMpLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsdi5yb3csdi5jb2ws''@;'; put 'put ''ZCk7RXAoTSl8fChNPWQpLE0mJihudWxsPT09KGY9Y2MoWHUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1mfHwhZi5pc09wZW5lZCgpKSYmTS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfTtsP2EobCk6eTUoTm0sdGhpcyxZJCkuY2FsbCh0aGlzLGQ9PmEoZCkpfXJlZm9j''@;'; put 'put ''dXNUb0VkaXRvclRleHRhcmVhKCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmNjKEtPLHRoaXMpO3ZhciBkLGg7IWNjKFh1LHRoaXMpLmdldFNldHRpbmdzKCkuaW1lRmFzdEVkaXR8fG51bGwhPT0obD1jYyhYdSx0''@;'; put 'put ''aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSkmJnZvaWQgMCE9PWwmJmwuaXNPcGVuZWQoKXx8KG51bGw9PT0oZD1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWR8fG51bGw9PT0oaD1kLnJlZnJlc2hWYWx1ZSl8fHZvaWQgMD09PWh8fGguY2FsbChkKSxjYyhYTyx0aGlz''@;'; put 'put ''KS5oYXMoYSl8fGNjKFhPLHRoaXMpLnNldChhLFNFKCgpPT57dmFyIGY7Y2MoWHUsdGhpcykuaXNEZXN0cm95ZWR8fG51bGw9PT0oZj10aGlzLmdldFJlZm9jdXNFbGVtZW50KCkpfHx2b2lkIDA9PT1mfHxmLnNlbGVjdCgpfSxhKSksY2MoWE8sdGhpcykuZ2V0KGEpKCkpfX1mdW5jdGlvbiBZ''@;'; put 'put ''JChjKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD1jYyhYdSx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7aWYoIWF8fCFjYyhYdSx0aGlzKS5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSlyZXR1cm4gdm9pZCBjKG51bGwpO2Nv''@;'; put 'put ''bnN0IGQ9Y2MoWHUsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCk7bnVsbD09PWQ/Y2MoWHUsdGhpcykuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIiwoKT0+e2MoY2MoWHUsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCkpfSk6YyhkKX1mdW5jdGlvbiBmZmUoKXt5NShObSx0aGlz''@;'; put 'put ''LFkkKS5jYWxsKHRoaXMsYz0+e2NvbnN0e2FjdGl2ZUVsZW1lbnQ6bH09Y2MoWHUsdGhpcykucm9vdERvY3VtZW50O2wmJkZPKGwpJiZsLmJsdXIoKSx0aGlzLmZvY3VzT25IaWdobGlnaHRlZENlbGwoYyl9KX1mdW5jdGlvbiBtWGUoKXt5NShObSx0aGlzLFkkKS5jYWxsKHRoaXMsYz0+e3Ro''@;'; put 'put ''aXMuZ2V0Rm9jdXNNb2RlKCk9PT1oXy5NSVhFRCYmIlREIj09PWM/Lm5vZGVOYW1lJiZ0aGlzLnJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCl9KX1mdW5jdGlvbiB2WGUoYyl7ImJvb2xlYW4iPT10eXBlb2YgYy5pbWVGYXN0RWRpdCYmdGhpcy5zZXRGb2N1c01vZGUoYy5pbWVGYXN0RWRpdD9o''@;'; put 'put ''Xy5NSVhFRDpoXy5DRUxMKX15KDE2MjI5KSx5KDQ0MjEzKTtjb25zdCBwZmU9eyImbmJzcDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LGJYZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKHBmZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rp''@;'; put 'put ''b24gRyQoYyl7Y29uc3QgbD1jLmhhc0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVycygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5jb3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCx2PWY+MD9oWzBdLmxlbmd0aDowLE09WyI8dGFibGU+''@;'; put 'put ''IiwiPC90YWJsZT4iXSxEPWw/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxaPVsiPHRib2R5PiIsIjwvdGJvZHk+Il0scmU9YT8xOjAsY2U9bD8xOjA7Zm9yKGxldCBiZT0wO2JlPGY7YmUrPTEpe2NvbnN0IEVlPWwmJjA9PT1iZSxCZT1bXTtmb3IobGV0IHJ0PTA7cnQ8djtydCs9MSl7Y29u''@;'; put 'put ''c3QgcHQ9IUVlJiZhJiYwPT09cnQ7bGV0IGR0PSIiO2lmKEVlKWR0PWA8dGg+JHtjLmdldENvbEhlYWRlcihydC1yZSl9PC90aD5gO2Vsc2UgaWYocHQpZHQ9YDx0aD4ke2MuZ2V0Um93SGVhZGVyKGJlLWNlKX08L3RoPmA7ZWxzZXtjb25zdCBKdD1oW2JlXVtydF0se2hpZGRlbjp2bixyb3dz''@;'; put 'put ''cGFuOkNuLGNvbHNwYW46dG59PWMuZ2V0Q2VsbE1ldGEoYmUtY2UscnQtcmUpO2lmKCF2bil7Y29uc3QgTW49W107aWYoQ24mJk1uLnB1c2goYHJvd3NwYW49IiR7Q259ImApLHRuJiZNbi5wdXNoKGBjb2xzcGFuPSIke3RufSJgKSxVYyhKdCkpZHQ9YDx0ZCAke01uLmpvaW4oIiAiKX0+PC90''@;'; put 'put ''ZD5gO2Vsc2V7Y29uc3Qgd3I9SnQudG9TdHJpbmcoKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxhY2Uo''@;'; put 'put ''L1x0L2dpLCImIzk7Iik7ZHQ9YDx0ZCAke01uLmpvaW4oIiAiKX0+JHt3cn08L3RkPmB9fX1CZS5wdXNoKGR0KX1jb25zdCBxZT1bIjx0cj4iLC4uLkJlLCI8L3RyPiJdLmpvaW4oIiIpO0VlP0Quc3BsaWNlKDEsMCxxZSk6Wi5zcGxpY2UoLTEsMCxxZSl9cmV0dXJuIE0uc3BsaWNlKDEsMCxE''@;'; put 'put ''LmpvaW4oIiIpLFouam9pbigiIikpLE0uam9pbigiIil9ZnVuY3Rpb24gJCQoYyl7Y29uc3QgbD1jLmxlbmd0aCxhPVsiPHRhYmxlPiJdO2ZvcihsZXQgZD0wO2Q8bDtkKz0xKXtjb25zdCBoPWNbZF0sZj1oLmxlbmd0aCx2PVtdOzA9PT1kJiZhLnB1c2goIjx0Ym9keT4iKTtmb3IobGV0IE09''@;'; put 'put ''MDtNPGY7TSs9MSl7Y29uc3QgRD1oW01dLFo9VWMoRCk/IiI6RC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJc''@;'; put 'put ''biIpLnJlcGxhY2UoL1x4MjB7Mix9L2dpLHJlPT5gPHNwYW4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4keyImbmJzcDsiLnJlcGVhdChyZS5sZW5ndGgtMSl9IDwvc3Bhbj5gKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO3YucHVzaChgPHRkPiR7Wn08L3RkPmApfWEucHVzaCgiPHRyPiIs''@;'; put 'put ''Li4udiwiPC90cj4iKSxkKzE9PT1sJiZhLnB1c2goIjwvdGJvZHk+Iil9cmV0dXJuIGEucHVzaCgiPC90YWJsZT4iKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGdmZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7''@;'; put 'put ''Y29uc3QgYT17fSxkPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKGgpO2xldCBmPWM7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtjb25zdCBKdD1mLnJlcGxhY2UoLzx0ZFxiW14+XSo/PihbXHNcU10qPyk8XC9ccyp0ZD4v''@;'; put 'put ''Zyx2bj0+e2NvbnN0IENuPXZuLm1hdGNoKC88dGRcYltePl0qPz4vZylbMF07cmV0dXJuYCR7Q259JHt2bi5zdWJzdHJpbmcoQ24ubGVuZ3RoLHZuLmxhc3RJbmRleE9mKCI8IikpLnRyaW0oKS5yZXBsYWNlQWxsKC9cblxzKy9nLCIgIikucmVwbGFjZUFsbCgvPHAuKj8+L2csIlxuIikucmVw''@;'; put 'put ''bGFjZSgiXG4iLCIiKS5yZXBsYWNlQWxsKC88XC8oLiopPlxzKyQvZ20sIjwvJDE+IikucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ksIiIpLnJlcGxhY2VBbGwoL14mbmJzcDskL2dtLCIiKX08L3RkPmB9KTtoLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYCR7SnR9YCks''@;'; put 'put ''Zj1oLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIil9aWYoIWZ8fCFmdW5jdGlvbiB5WGUoYyl7cmV0dXJuIlRBQkxFIj09PShjJiZjLm5vZGVOYW1lfHwiIil9KGYpKXJldHVybjtjb25zdCB2PWgucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0b3IiXScpLE09bnVsbCE9PWYucXVlcnlT''@;'; put 'put ''ZWxlY3RvcigidGJvZHkgdGgiKSxEPWYucXVlcnlTZWxlY3RvcigidHIiKSxaPUQ/QXJyYXkuZnJvbShELmNlbGxzKS5yZWR1Y2UoKEp0LHZuKT0+SnQrdm4uY29sU3BhbiwwKS0oTT8xOjApOjAscmU9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSxjZT1bXTtsZXQgYmU9''@;'; put 'put ''ITEsRWU9MCxCZT0wO2lmKGYudEhlYWQpe2NvbnN0IEp0PUFycmF5LmZyb20oZi50SGVhZC5yb3dzKS5maWx0ZXIodm49Pntjb25zdCBDbj1udWxsIT09dm4ucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gQ24mJmNlLnB1c2godm4pLCFDbn0pO0VlPUp0Lmxlbmd0aCxiZT1FZT4wLEVlPjE/''@;'; put 'put ''YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oSnQpLnJlZHVjZSgodm4sQ24pPT57Y29uc3QgdG49QXJyYXkuZnJvbShDbi5jZWxscykucmVkdWNlKChNbix3cixHcik9PntpZihNJiYwPT09R3IpcmV0dXJuIE1uO2NvbnN0e2NvbFNwYW46bXIsaW5uZXJIVE1MOkdufT13cjtyZXR1cm4gTW4u''@;'; put 'put ''cHVzaChtcj4xP3tsYWJlbDpHbixjb2xzcGFuOm1yfTpHbiksTW59LFtdKTtyZXR1cm4gdm4ucHVzaCh0biksdm59LFtdKTpiZSYmKGEuY29sSGVhZGVycz1BcnJheS5mcm9tKEp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKHZuLENuLHRuKT0+KE0mJjA9PT10bnx8dm4ucHVzaChDbi5pbm5lckhU''@;'; put 'put ''TUwpLHZuKSxbXSkpfWNlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPWNlLmxlbmd0aCkscmUubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209cmUubGVuZ3RoKTtjb25zdCBxZT1bLi4uY2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoSnQsdm4pPT4oSnQucHVzaCguLi5BcnJh''@;'; put 'put ''eS5mcm9tKHZuLnJvd3MpKSxKdCksW10pLC4uLnJlXTtCZT1xZS5sZW5ndGg7Y29uc3QgcnQ9bmV3IEFycmF5KEJlKTtmb3IobGV0IEp0PTA7SnQ8QmU7SnQrKylydFtKdF09bmV3IEFycmF5KFopO2NvbnN0IHB0PVtdLGR0PVtdO2ZvcihsZXQgSnQ9MDtKdDxCZTtKdCsrKXtjb25zdCBDbj1B''@;'; put 'put ''cnJheS5mcm9tKHFlW0p0XS5jZWxscyksdG49Q24ubGVuZ3RoO2ZvcihsZXQgTW49MDtNbjx0bjtNbisrKXtjb25zdCB3cj1DbltNbl0se25vZGVOYW1lOkdyLGlubmVySFRNTDptcixyb3dTcGFuOkduLGNvbFNwYW46YWl9PXdyLF9pPXJ0W0p0XS5maW5kSW5kZXgoT249PnZvaWQgMD09PU9u''@;'; put 'put ''KTtpZigiVEQiPT09R3Ipe2lmKEduPjF8fGFpPjEpe2ZvcihsZXQgRHI9SnQ7RHI8SnQrR247RHIrKylpZihEcjxCZSlmb3IobGV0ICRyPV9pOyRyPF9pK2FpOyRyKyspcnRbRHJdWyRyXT1udWxsO2NvbnN0IHpyPXdyLmdldEF0dHJpYnV0ZSgic3R5bGUiKTt6ciYmenIuaW5jbHVkZXMoIm1z''@;'; put 'put ''by1pZ25vcmU6Y29sc3BhbiIpfHxwdC5wdXNoKHtjb2w6X2kscm93Okp0LHJvd3NwYW46R24sY29sc3BhbjphaX0pfWxldCBPbj0iIjtPbj12JiYvZXhjZWwvZ2kudGVzdCh2LmNvbnRlbnQpP21yLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBsYWNlKC88YnIoXHMqfFwv''@;'; put 'put ''KT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6bXIucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dPy9naW0sIlxyXG4iKSxydFtKdF1bX2ldPU9uLnJlcGxhY2UoYlhlLHpyPT5wZmVbenJdKX1lbHNlIGR0LnB1c2gobXIpfX1yZXR1cm4gcHQubGVuZ3RoJiYoYS5tZXJnZUNlbGxz''@;'; put 'put ''PXB0KSxkdC5sZW5ndGgmJihhLnJvd0hlYWRlcnM9ZHQpLHJ0Lmxlbmd0aCYmKGEuZGF0YT1ydCksYX1mdW5jdGlvbiBtMShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT10eXBlb2YgYztpZigibnVtYmVy''@;'; put 'put ''Ij09PWEpcmV0dXJuIWlzTmFOKGMpJiZpc0Zpbml0ZShjKTtpZigic3RyaW5nIj09PWEpe2lmKDA9PT1jLmxlbmd0aClyZXR1cm4hMTtpZigxPT09Yy5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KGMpO2NvbnN0IGQ9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4ubF0pKS5tYXAoaD0+YFxcJHto''@;'; put 'put ''fWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsrLV0/KCgoJHtkfSk/XFxkKygoJHtkfSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChjLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1hJiYhKCFjfHwibnVtYmVyIiE9dHlwZW9mIGMudmFs''@;'; put 'put ''dWVPZigpfHxjIGluc3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24gbWZlKGMpe3JldHVybiBtMShjLFsiLCJdKX1mdW5jdGlvbiBHYShjLGwsYSl7bGV0IGQ9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhPWwsbD1jKTpkPWMtMTsrK2Q8PWwmJiExIT09YShkKTspO31mdW5jdGlvbiBLJChj''@;'; put 'put ''LGwsYSl7bGV0IGQ9YysxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGE9bCxsPTApOy0tZD49bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIHEkKGMsbCl7cmV0dXJuIGw9cGFyc2VJbnQobC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksbD1pc05hTihsKT8wOmwscGFyc2VJbnQo''@;'; put 'put ''YypsLzEwMCwxMCl9ZnVuY3Rpb24ga3MoYyxsLGEpe3JldHVybiBNYXRoLm1pbihjLGwpPT09Yz9sOk1hdGgubWF4KGMsYSk9PT1jP2E6Y31jb25zdCB2ZmU9bmV3IE1hcChbWyJhc2MiLFstMSwxXV0sWyJkZXNjIixbMSwtMV1dXSksd1hlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIGFs''@;'; put 'put ''cmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCxDWGU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsTVhlPWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBKTygpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rpb24gTSgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBEKFope3JldHVybiBsLmhhcyhaKX1yZXR1cm4gYz1tbChjKT9jOk1YZSx7YWRkSXRlbTpmdW5jdGlvbiBh''@;'; put 'put ''KFoscmUpe2lmKEQoWikpdGhyb3cgbmV3IEVycm9yKGMoWikpO2wuc2V0KFoscmUpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJZDpmdW5jdGlvbiBmKFope2NvbnN0W3JlXT1NKCkuZmluZChjZT0+e2xldFtiZSxFZV09Y2U7cmV0dXJuIFo9PT1FZSYmYmV9KXx8W251bGxd''@;'; put 'put ''O3JldHVybiByZX0sZ2V0SXRlbTpmdW5jdGlvbiB2KFope3JldHVybiBsLmdldChaKX0sZ2V0SXRlbXM6TSxoYXNJdGVtOkQscmVtb3ZlSXRlbTpmdW5jdGlvbiBkKFope3JldHVybiBsLmRlbGV0ZShaKX19fWNvbnN0IHhYZT1jPT5gJyR7Y30nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQg''@;'; put 'put ''aW4gYSB1bmlxdWUgc2V0LmAsSiQ9Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAiJHtjfSIgcGx1Z2luLmAsYmZlPWZ1bmN0aW9uIFNYZSgpe2xldHtlcnJvclByaW9yaXR5RXhpc3RzOmMsZXJyb3JQcmlvcml0eU5hTjpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgYT1uZXcgTWFwO3JldHVybiBjPW1sKGMpP2M6d1hlLGw9bWwobCk/bDpDWGUse2FkZEl0ZW06ZnVuY3Rpb24gZChmLHYpe2lmKCFtMShmKSl0aHJvdyBuZXcgRXJyb3IobChmKSk7aWYoYS5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMo''@;'; put 'put ''ZikpO2Euc2V0KGYsdil9LGdldEl0ZW1zOmZ1bmN0aW9uIGgoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImFzYyI7Y29uc3RbdixNXT12ZmUuZ2V0KGYpfHx2ZmUuZ2V0KCJhc2MiKTtyZXR1cm5bLi4uYV0uc29ydCgoRCxa''@;'; put 'put ''KT0+RFswXTxaWzBdP3Y6TSkubWFwKEQ9PkRbMV0pfX19KHtlcnJvclByaW9yaXR5RXhpc3RzOmM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgcGx1Z2luIG9uIHByaW9yaXR5ICIke2N9Ii5gLGVycm9yUHJpb3JpdHlOYU46Yz0+YFRoZSBwcmlvcml0eSAiJHtjfSIgaXMgbm90IGEg''@;'; put 'put ''bnVtYmVyLmB9KSx5ZmU9ZnVuY3Rpb24gRVhlKCl7bGV0e2Vycm9ySXRlbUV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgU2V0O3JldHVybiBjPW1sKGMpP2M6eFhlLHthZGRJdGVtOmZ1bmN0aW9u''@;'; put 'put ''IGEoZil7aWYobC5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2wuYWRkKGYpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJdGVtczpmdW5jdGlvbiBkKCl7cmV0dXJuWy4uLmxdfX19KHtlcnJvckl0ZW1FeGlzdHM6SiR9KSxRJD1KTyh7ZXJyb3JJZEV4aXN0czpKJH0p''@;'; put 'put ''O2Z1bmN0aW9uIGVLKCl7cmV0dXJuWy4uLmJmZS5nZXRJdGVtcygpLC4uLnlmZS5nZXRJdGVtcygpXX1mdW5jdGlvbiBERShjKXtjb25zdCBsPXAxKGMpO3JldHVybiBRJC5nZXRJdGVtKGwpfWZ1bmN0aW9uIFBzKGMsbCxhKXtbYyxsLGFdPWZ1bmN0aW9uIGtYZShjLGwsYSl7cmV0dXJuImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGMmJihjPShsPWMpLlBMVUdJTl9LRVksYT1sLlBMVUdJTl9QUklPUklUWSksW2MsbCxhXX0oYyxsLGEpLHZvaWQgMD09PURFKGMpJiZmdW5jdGlvbiBBWGUoYyxsLGEpe2NvbnN0IGQ9cDEoYyk7aWYoUSQuaGFzSXRlbShkKSl0aHJvdyBuZXcgRXJyb3IoSiQoZCkp''@;'; put 'put ''O3ZvaWQgMD09PWE/eWZlLmFkZEl0ZW0oZCk6YmZlLmFkZEl0ZW0oYSxkKSxRJC5hZGRJdGVtKGQsbCl9KGMsbCxhKX1jb25zdHtyZWdpc3RlcjpEWGUsZ2V0SXRlbTpJWGUsaGFzSXRlbTpfZmUsZ2V0TmFtZXM6UlhlfT1yMygicmVuZGVyZXJzIik7ZnVuY3Rpb24gUU8oYyl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIV9mZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCByZW5kZXJlciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBJWGUoYyl9ZnVuY3Rpb24gRGgoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlJFTkRFUkVS''@;'; put 'put ''X1RZUEUpLERYZShjLGwpfWNvbnN0e3JlZ2lzdGVyOkxYZSxnZXRJdGVtOk9YZSxoYXNJdGVtOndmZSxnZXROYW1lczpQWGV9PXIzKCJ2YWxpZGF0b3JzIik7ZnVuY3Rpb24gdEsoYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIXdmZShjKSl0aHJvdyBFcnJvcihgTm8g''@;'; put 'put ''cmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gT1hlKGMpfWZ1bmN0aW9uIFc3KGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5WQUxJREFUT1JfVFlQRSksTFhlKGMsbCl9ZnVuY3Rpb24ga3AoYyxsLGEpeyhmdW5jdGlvbiBGWGUo''@;'; put 'put ''YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFFhKGMsbCl7cmV0dXJuIGMuZ2V0KENmZShjLGwpKX1mdW5j''@;'; put 'put ''dGlvbiBWbShjLGwsYSl7cmV0dXJuIGMuc2V0KENmZShjLGwpLGEpLGF9ZnVuY3Rpb24gQ2ZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgejI9bmV3IFdlYWtNYXAsbks9bmV3IFdlYWtNYXAseDA9bmV3IFdlYWtNYXAsZl89bmV3IFdlYWtNYXAsZVA9bmV3IFdlYWtNYXAsaTM9bmV3IFdlYWtNYXAscks9bmV3IFdlYWtNYXAsSUU9bmV3IFdlYWtNYXAsWTc9bmV3''@;'; put 'put ''IFdlYWtNYXAsRHA9bmV3IFdlYWtNYXA7Y29uc3QgU2ZlPWNsYXNzIEhYZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7bGV0IE09YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGw7a3AodGhpcyx6Mix2b2lkIDApLGtwKHRoaXMsbkss''@;'; put 'put ''dm9pZCAwKSxrcCh0aGlzLHgwLHZvaWQgMCksa3AodGhpcyxmXyx2b2lkIDApLGtwKHRoaXMsZVAsdm9pZCAwKSxrcCh0aGlzLGkzLHZvaWQgMCksa3AodGhpcyxySyx2b2lkIDApLGtwKHRoaXMsSUUsdm9pZCAwKSxrcCh0aGlzLFk3LFtudWxsLG51bGxdKSxrcCh0aGlzLERwLFtudWxsLG51''@;'; put 'put ''bGxdKSxWbSh6Mix0aGlzLGQpLFZtKG5LLHRoaXMsYSksVm0oeDAsdGhpcyxmKSxWbShmXyx0aGlzLHYpLFZtKGVQLHRoaXMsTSksVm0oaTMsdGhpcyxoKSxWbShySyx0aGlzLGwpLHRoaXMucmVnaXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlz''@;'; put 'put ''dGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJjb250ZXh0bWVudSIsZD0+dGhpcy5vbkNvbnRleHRNZW51KGQpKSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLlRBQkxFLCJtb3VzZW92ZXIiLGQ9PnRoaXMub25Nb3VzZU92ZXIoZCkpLFFhKGkzLHRoaXMpLmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuVEFCTEUsIm1vdXNlb3V0IixkPT50aGlzLm9uTW91c2VPdXQoZCkpO2NvbnN0IGw9KCk9PntRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwidG91Y2hzdGFydCIsZD0+dGhpcy5vblRvdWNoU3RhcnQoZCkpLFFh''@;'; put 'put ''KGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJ0b3VjaGVuZCIsZD0+dGhpcy5vblRvdWNoRW5kKGQpKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nfHwodGhpcy5tb21lbnR1bVNjcm9sbGluZz17fSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4''@;'; put 'put ''MCx0aGlzKS5ob2xkZXIsInNjcm9sbCIsKCk9PntjbGVhclRpbWVvdXQodGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dCksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nfHxRYSh6Mix0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZVRvdWNoU2Nyb2xsIiksdGhpcy5tb21lbnR1''@;'; put 'put ''bVNjcm9sbGluZy5vbmdvaW5nPSEwLHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMudG91Y2hBcHBsaWVkfHwodGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSExLFFhKHoyLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJNb21lbnR1bVNj''@;'; put 'put ''cm9sbCIpKX0sMjAwKX0pfTtBcCgpP2woKTooRCQoKSYmbCgpLCgoKT0+e1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJtb3VzZXVwIixkPT50aGlzLm9uTW91c2VVcChkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5o''@;'; put 'put ''b2xkZXIsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGwpe2NvbnN0IGQ9dGhpcy5wYXJlbnRDZWxsKGwpLmNvb3JkcztpZihRYShJRSx0aGlzKSYmZCl7Y29uc3RbaCxmXT1bZC5yb3csUWEoSUUsdGhpcykuZnJvbS5yb3dd''@;'; put 'put ''LFt2LE1dPVtkLmNvbCxRYShJRSx0aGlzKS5mcm9tLmNvbF07cmV0dXJuIGg9PT1mJiZ2PT09TX1yZXR1cm4hMX1wYXJlbnRDZWxsKGwpe2NvbnN0IGE9e30saD12RShsLFsiVEQiLCJUSCJdLFFhKHgwLHRoaXMpLlRBQkxFKTtyZXR1cm4gaD8oYS5jb29yZHM9UWEoeDAsdGhpcykuZ2V0Q29v''@;'; put 'put ''cmRzKGgpLGEuVEQ9aCk6cG8obCwid3RCb3JkZXIiKSYmcG8obCwiY3VycmVudCIpPyhhLmNvb3Jkcz1RYShmXyx0aGlzKS5nZXRGb2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZS5oaWdobGlnaHQsYS5URD1RYSh4MCx0aGlzKS5nZXRDZWxsKGEuY29vcmRzKSk6cG8obCwid3RCb3JkZXIiKSYm''@;'; put 'put ''cG8obCwiYXJlYSIpJiZRYShmXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlJiYoYS5jb29yZHM9UWEoZl8sdGhpcykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZS50byxhLlREPVFhKHgwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKSxhfW9uTW91c2VEb3duKGwpe2Nv''@;'; put 'put ''bnN0IGE9UWEobkssdGhpcykucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsZD1rJChrMmUsbC50YXJnZXQpLGg9bC50YXJnZXQ7aWYoIVsiVEQiLCJUSCJdLmluY2x1ZGVzKGEubm9kZU5hbWUpJiYoaD09PWF8fGQoMCk9PT1hfHxkKDEpPT09YSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5wYXJl''@;'; put 'put ''bnRDZWxsKGgpO3BvKGgsImNvcm5lciIpP1FhKHoyLHRoaXMpLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsbCxoKTpmLlREJiZRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlRG93biIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VEb3duIixsLGYuY29vcmRz''@;'; put 'put ''LGYuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmZi5URCYmKFFhKERwLHRoaXMpWzBdPWYuVEQsY2xlYXJUaW1lb3V0KFFhKFk3LHRoaXMpWzBdKSxRYShZNyx0aGlzKVswXT1zZXRUaW1lb3V0KCgpPT57UWEoRHAsdGhpcylbMF09bnVsbH0sMWUzKSl9b25Db250ZXh0''@;'; put 'put ''TWVudShsKXtpZihRYSh6Mix0aGlzKS5oYXMoIm9uQ2VsbENvbnRleHRNZW51Iikpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29udGV4dE1lbnUiLGwsYS5jb29yZHMsYS5URCl9fW9uTW91c2VPdmVyKGwpe2lmKCFR''@;'; put 'put ''YSh6Mix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlT3ZlciIpKXJldHVybjtjb25zdCBhPVFhKHgwLHRoaXMpLlRBQkxFLGQ9dkUobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD1RYShlUCx0aGlzKXx8dGhpcztkJiZkIT09aC5sYXN0TW91c2VPdmVyJiZMbShkLGEpJiYoaC5sYXN0TW91c2VPdmVy''@;'; put 'put ''PWQsdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3ZlciIsbCxRYSh4MCx0aGlzKS5nZXRDb29yZHMoZCksZCkpfW9uTW91c2VPdXQobCl7aWYoIVFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VPdXQiKSlyZXR1cm47Y29uc3QgYT1RYSh4MCx0aGlzKS5UQUJMRSxkPXZFKGwudGFy''@;'; put 'put ''Z2V0LFsiVEQiLCJUSCJdLGEpLGg9dkUobC5yZWxhdGVkVGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGY9UWEoZVAsdGhpcyl8fHRoaXM7ZCYmZCE9PWgmJkxtKGQsYSkmJih0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdXQiLGwsUWEoeDAsdGhpcykuZ2V0Q29vcmRzKGQpLGQpLG51bGw9''@;'; put 'put ''PT1oJiYoZi5sYXN0TW91c2VPdmVyPW51bGwpKX1vbk1vdXNlVXAobCl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJlFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VVcCIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VVcCIsbCxhLmNvb3JkcyxhLlRE''@;'; put 'put ''KSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJihhLlREPT09UWEoRHAsdGhpcylbMF0mJmEuVEQ9PT1RYShEcCx0aGlzKVsxXT8ocG8obC50YXJnZXQsImNvcm5lciIpP3RoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb3JuZXJEYmxDbGljayIsbCxhLmNvb3JkcyxhLlREKTp0''@;'; put 'put ''aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsRGJsQ2xpY2siLGwsYS5jb29yZHMsYS5URCksUWEoRHAsdGhpcylbMF09bnVsbCxRYShEcCx0aGlzKVsxXT1udWxsKTphLlREPT09UWEoRHAsdGhpcylbMF0mJihRYShEcCx0aGlzKVsxXT1hLlRELGNsZWFyVGltZW91dChRYShZNyx0aGlzKVsxXSks''@;'; put 'put ''UWEoWTcsdGhpcylbMV09c2V0VGltZW91dCgoKT0+e1FhKERwLHRoaXMpWzFdPW51bGx9LDUwMCkpKX1vblRvdWNoU3RhcnQobCl7Vm0oSUUsdGhpcyxRYShmXyx0aGlzKS5nZXRGb2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZSksdGhpcy50b3VjaEFwcGxpZWQ9ITAsdGhpcy5vbk1vdXNlRG93''@;'; put 'put ''bihsKX1vblRvdWNoRW5kKGwpe3ZhciBhO2NvbnN0IGQ9bC50YXJnZXQsaD1udWxsPT09KGE9dGhpcy5wYXJlbnRDZWxsKGQpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb29yZHMsZj1QYShoKSYmaC5yb3c+PTAmJmguY29sPj0wO2lmKGwuY2FuY2VsYWJsZSYmZiYmUWEoejIsdGhpcykuZ2V0''@;'; put 'put ''U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikpe2NvbnN0IE09WyJBIiwiQlVUVE9OIiwiSU5QVVQiXTtSJCgpJiYocTJlKCl8fFgyZSgpKSYmdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpJiYhTS5pbmNsdWRlcyhkLnRhZ05hbWUpP2wucHJldmVudERlZmF1bHQoKTp0aGlzLnNl''@;'; put 'put ''bGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCl8fGwucHJldmVudERlZmF1bHQoKX10aGlzLm9uTW91c2VVcChsKSx0aGlzLnRvdWNoQXBwbGllZD0hMX1jYWxsTGlzdGVuZXIobCxhLGQsaCl7Y29uc3QgZj1RYSh6Mix0aGlzKS5nZXRTZXR0aW5nUHVyZShsKTtmJiZmKGEsZCxoLFFhKHJLLHRoaXMp''@;'; put 'put ''LmNhbGwodGhpcykpfWRlc3Ryb3koKXtjbGVhclRpbWVvdXQoUWEoWTcsdGhpcylbMF0pLGNsZWFyVGltZW91dChRYShZNyx0aGlzKVsxXSksUWEoaTMsdGhpcykuZGVzdHJveSgpfX07ZnVuY3Rpb24gaUsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE5YZShjKXt2YXIgbD1mdW5jdGlvbiBW''@;'; put 'put ''WGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGpYZT1jbGFzcyBCWGV7Y29uc3RydWN0b3IobCxhLGQpe2lLKHRoaXMsIm9mZnNldCIsdm9pZCAwKSxpSyh0aGlzLCJ0b3RhbCIsdm9pZCAwKSxpSyh0aGlzLCJjb3Vu''@;'; put 'put ''dFRIIix2b2lkIDApLHRoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNldHRl''@;'; put 'put ''ZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4o''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX07ZnVuY3Rpb24gYUsoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIHpYZShjKXt2YXIgbD1mdW5jdGlvbiBVWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFdYZT1jbGFzcyBaWGV7Y29uc3RydWN0b3IobCxhLGQpe2FLKHRoaXMsIm9mZnNldCIsdm9p''@;'; put 'put ''ZCAwKSxhSyh0aGlzLCJ0b3RhbCIsdm9pZCAwKSxhSyh0aGlzLCJjb3VudFRIIix2b2lkIDApLHRoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNl''@;'; put 'put ''dH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291''@;'; put 'put ''bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3cobCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVu''@;'; put 'put ''ZGVyZWQobCkpfX07ZnVuY3Rpb24gdFAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlYZShjKXt2YXIgbD1mdW5jdGlvbiBHWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1h''@;'; put 'put ''LmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0''@;'; put 'put ''cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzICRYZXtjb25zdHJ1Y3Rvcigpe3RQKHRo''@;'; put 'put ''aXMsImN1cnJlbnRTaXplIiwwKSx0UCh0aGlzLCJuZXh0U2l6ZSIsMCksdFAodGhpcywiY3VycmVudE9mZnNldCIsMCksdFAodGhpcywibmV4dE9mZnNldCIsMCl9c2V0U2l6ZShsKXt0aGlzLmN1cnJlbnRTaXplPXRoaXMubmV4dFNpemUsdGhpcy5uZXh0U2l6ZT1sfXNldE9mZnNldChsKXt0''@;'; put 'put ''aGlzLmN1cnJlbnRPZmZzZXQ9dGhpcy5uZXh0T2Zmc2V0LHRoaXMubmV4dE9mZnNldD1sfX1mdW5jdGlvbiBzSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcVhlKGMpe3ZhciBsPWZ1bmN0aW9uIFhYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT''@;'; put 'put ''eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0''@;'; put 'put ''dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw''@;'; put 'put ''fSk6Y1tsXT1hLGN9Y2xhc3MgSlhle2NvbnN0cnVjdG9yKCl7c0sodGhpcywic2l6ZSIsbmV3ICRYZSksc0sodGhpcywid29ya2luZ1NwYWNlIiwwKSxzSyh0aGlzLCJzaGFyZWRTaXplIixudWxsKX1zZXRTaXplKGwpe3RoaXMuc2l6ZS5zZXRTaXplKGwpfXNldE9mZnNldChsKXt0aGlzLnNp''@;'; put 'put ''emUuc2V0T2Zmc2V0KGwpfWdldFZpZXdTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZX1pc1NoYXJlZCgpe3JldHVybiBudWxsIT09dGhpcy5zaGFyZWRTaXplfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwud29y''@;'; put 'put ''a2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX1wcmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIsbC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX15KDI5NzYwKTtjbGFzcyB4ZmV7Y29uc3RydWN0b3IobCxhKXsoZnVu''@;'; put 'put ''Y3Rpb24gUVhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBlSmUoYyl7dmFyIGw9ZnVuY3Rpb24gdEplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsIm9yZGVyIixbXSksdGhpcy5vcmRlcj1bLi4uQXJyYXkoYSku''@;'; put 'put ''a2V5cygpXS5tYXAoZD0+bCtkKX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMub3JkZXIubGVuZ3RofWhhcyhsKXtyZXR1cm4gdGhpcy5vcmRlci5pbmRleE9mKGwpPi0xfWdldChsKXtyZXR1cm4gbDx0aGlzLm9yZGVyLmxlbmd0aD90aGlzLm9yZGVyW2xdOi0xfXJlbW92ZShsKXt0aGlzLm9y''@;'; put 'put ''ZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YobCksMSl9cHJlcGVuZChsKXtyZXR1cm4gdGhpcy5vcmRlci51bnNoaWZ0KGwpLHRoaXMub3JkZXIucG9wKCl9fWNsYXNzIGFKZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gbkplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBySmUoYyl7''@;'; put 'put ''dmFyIGw9ZnVuY3Rpb24gaUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInNpemVTZXQiLHZvaWQgMCksdGhpcy5zaXplU2V0PWx9ZGlmZigpe2NvbnN0e3NpemVTZXQ6bH09dGhpcyx7Y3VycmVudFNpemU6YSxu''@;'; put 'put ''ZXh0U2l6ZTpkfT1sLmdldFZpZXdTaXplKCk7bGV0IGg9TWF0aC5tYXgoZCxhKTtpZigwPT09aClyZXR1cm5bXTtjb25zdHtjdXJyZW50T2Zmc2V0OmYsbmV4dE9mZnNldDp2fT1sLmdldFZpZXdTaXplKCksTT1uZXcgeGZlKGYsYSksRD1uZXcgeGZlKHYsZCksWj1bXTtmb3IobGV0IHJlPTA7''@;'; put 'put ''cmU8aDtyZSsrKXtjb25zdCBjZT1NLmdldChyZSksYmU9RC5nZXQocmUpO2lmKC0xPT09YmUpWi5wdXNoKFsicmVtb3ZlIixjZV0pO2Vsc2UgaWYoLTE9PT1jZSkhbC5pc1NoYXJlZCgpfHxsLmlzU2hhcmVkKCkmJmwuaXNQbGFjZU9uKDIpP1oucHVzaChbImFwcGVuZCIsYmVdKTpaLnB1c2go''@;'; put 'put ''WyJwcmVwZW5kIixiZV0pO2Vsc2UgaWYoYmU+Y2UpTS5oYXMoYmUpJiYoTS5yZW1vdmUoYmUpLGQ8PU0ubGVuZ3RoJiYoaC09MSkpLFoucHVzaChbInJlcGxhY2UiLGJlLGNlXSk7ZWxzZSBpZihiZTxjZSl7Y29uc3QgRWU9TS5wcmVwZW5kKGJlKTtaLnB1c2goWyJpbnNlcnRfYmVmb3JlIixi''@;'; put 'put ''ZSxjZSxFZV0pfWVsc2UgWi5wdXNoKFsibm9uZSIsYmVdKX1yZXR1cm4gWn19ZnVuY3Rpb24gcF8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9KZShjKXt2YXIgbD1mdW5jdGlvbiBzSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNsYXNzIEVmZXtjb25zdHJ1Y3RvcihsLGEpe3BfKHRoaXMsInJvb3ROb2RlIix2b2lkIDApLHBfKHRoaXMsIm5vZGVzUG9vbCIsdm9pZCAwKSxwXyh0aGlzLCJzaXplU2V0IixuZXcgSlhlKSxwXyh0aGlzLCJjb2xsZWN0ZWROb2RlcyIsW10pLHBfKHRoaXMsInZpZXdEaWZmZXIiLG5l''@;'; put 'put ''dyBhSmUodGhpcy5zaXplU2V0KSkscF8odGhpcywibGVhZHMiLFtdKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5ub2Rlc1Bvb2w9YX1zZXRTaXplKGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0U2l6ZShsKSx0aGlzfXNldE9mZnNldChsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldE9mZnNldChs''@;'; put 'put ''KSx0aGlzfWlzU2hhcmVkVmlld1NldCgpe3JldHVybiB0aGlzLnNpemVTZXQuaXNTaGFyZWQoKX1nZXROb2RlKGwpe3JldHVybiBsPHRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoP3RoaXMuY29sbGVjdGVkTm9kZXNbbF06bnVsbH1nZXRDdXJyZW50Tm9kZSgpe2NvbnN0IGw9dGhpcy5jb2xs''@;'; put 'put ''ZWN0ZWROb2Rlcy5sZW5ndGg7cmV0dXJuIGw+MD90aGlzLmNvbGxlY3RlZE5vZGVzW2wtMV06bnVsbH1hcHBseUNvbW1hbmQobCl7Y29uc3R7cm9vdE5vZGU6YX09dGhpcyxbZCxoLGYsdl09bCxNPXRoaXMubm9kZXNQb29sKGgpO3N3aXRjaCh0aGlzLmNvbGxlY3RlZE5vZGVzLnB1c2goTSks''@;'; put 'put ''ZCl7Y2FzZSJwcmVwZW5kIjphLmluc2VydEJlZm9yZShNLGEuZmlyc3RDaGlsZCk7YnJlYWs7Y2FzZSJhcHBlbmQiOmEuYXBwZW5kQ2hpbGQoTSk7YnJlYWs7Y2FzZSJpbnNlcnRfYmVmb3JlIjphLmluc2VydEJlZm9yZShNLHRoaXMubm9kZXNQb29sKGYpKSxhLnJlbW92ZUNoaWxkKHRoaXMu''@;'; put 'put ''bm9kZXNQb29sKHYpKTticmVhaztjYXNlInJlcGxhY2UiOmEucmVwbGFjZUNoaWxkKE0sdGhpcy5ub2Rlc1Bvb2woZikpO2JyZWFrO2Nhc2UicmVtb3ZlIjphLnJlbW92ZUNoaWxkKE0pfX1zdGFydCgpe3RoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoPTAsdGhpcy5sZWFkcz10aGlzLnZpZXdE''@;'; put 'put ''aWZmZXIuZGlmZigpfXJlbmRlcigpe3RoaXMubGVhZHMubGVuZ3RoPjAmJnRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hpZnQoKSl9ZW5kKCl7Zm9yKDt0aGlzLmxlYWRzLmxlbmd0aD4wOyl0aGlzLmFwcGx5Q29tbWFuZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfX1jbGFzcyBUZmUgZXh0''@;'; put 'put ''ZW5kcyBFZmV7cHJlcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5wcmVwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LmFwcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9YXBwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LmFwcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5wcmVw''@;'; put 'put ''ZW5kKHRoaXMuc2l6ZVNldCksdGhpc319ZnVuY3Rpb24gQWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsSmUoYyl7dmFyIGw9ZnVuY3Rpb24gY0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB1SmV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7QWZlKHRoaXMsIm5vZGVUeXBlIix2b2lkIDApLEFmZSh0aGlzLCJwb29sIixuZXcgTWFwKSx0aGlzLm5vZGVUeXBlPWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4obCxhKXtjb25zdCBoPSJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgYT9gJHtsfXgke2F9YDpsLnRvU3RyaW5nKCk7aWYodGhpcy5wb29sLmhhcyhoKSlyZXR1cm4gdGhpcy5wb29sLmdldChoKTtjb25zdCBmPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlVHlwZSk7cmV0dXJuIHRoaXMucG9vbC5zZXQoaCxmKSxmfX1mdW5jdGlv''@;'; put 'put ''biBSRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZEplKGMpe3ZhciBsPWZ1bmN0aW9uIGhKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTEV7Y29uc3RydWN0b3IobCxhKXtSRSh0aGlzLCJub2Rlc1Bvb2wiLG51''@;'; put 'put ''bGwpLFJFKHRoaXMsIm5vZGVUeXBlIix2b2lkIDApLFJFKHRoaXMsInJvb3ROb2RlIix2b2lkIDApLFJFKHRoaXMsInRhYmxlIixudWxsKSxSRSh0aGlzLCJyZW5kZXJlZE5vZGVzIiwwKSx0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IHVKZShsKTpudWxsLHRoaXMubm9k''@;'; put 'put ''ZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWF9c2V0VGFibGUobCl7dGhpcy5ub2Rlc1Bvb2wmJnRoaXMubm9kZXNQb29sLnNldFJvb3REb2N1bWVudChsLnJvb3REb2N1bWVudCksdGhpcy50YWJsZT1sfWFkanVzdCgpe31yZW5kZXIoKXt9fWZ1bmN0aW9uIGtmZShjLGwsYSl7cmV0dXJuKGw9ZnVu''@;'; put 'put ''Y3Rpb24gZkplKGMpe3ZhciBsPWZ1bmN0aW9uIHBKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk''@;'; put 'put ''KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp''@;'; put 'put ''aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZ0plIGV4dGVuZHMgTEV7Y29uc3RydWN0b3IoKXtzdXBlcigiVEgiKSxrZmUodGhpcywib3JkZXJWaWV3cyIsbmV3''@;'; put 'put ''IFdlYWtNYXApLGtmZSh0aGlzLCJzb3VyY2VSb3dJbmRleCIsMCl9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgVGZlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291''@;'; put 'put ''cmNlUm93SW5kZXgsZCkpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dIZWFkZXJGdW5jdGlvbnM6YSxyb3dIZWFkZXJzQ291bnQ6ZCxyb3dzOmgsY2VsbHM6Zn09dGhpcy50YWJsZTtmb3IobGV0IHY9MDt2PGw7disrKXtjb25z''@;'; put 'put ''dCBNPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSh2KSxEPWguZ2V0UmVuZGVyZWROb2RlKHYpO3RoaXMuc291cmNlUm93SW5kZXg9TTtjb25zdCBaPXRoaXMub2J0YWluT3JkZXJWaWV3KEQpLHJlPWYub2J0YWluT3JkZXJWaWV3KEQpO1ouYXBwZW5kVmlldyhyZSkuc2V0U2l6ZShk''@;'; put 'put ''KS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IGNlPWQtMTtjZT49MDtjZS0tKXtaLnJlbmRlcigpO2NvbnN0IGJlPVouZ2V0Q3VycmVudE5vZGUoKTtiZS5jbGFzc05hbWU9IiIsYmUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLEI3KGJlLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxu''@;'; put 'put ''ZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oYmUsW1sicm9sZSIsInJvd2hlYWRlciJdLFsic2NvcGUiLCJyb3ciXSxnJChjZSsxKSxINygtMSldKSxhW2NlXShNLGJlLGNlKX1aLmVuZCgpfX19Y2xhc3MgbUplIGV4dGVuZHMgTEV7Y29uc3RydWN0''@;'; put 'put ''b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTtsZXQgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7aWYobCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmh9PXRoaXMudGFibGUsZj1oK2E7''@;'; put 'put ''Zm9yKGxldCBNPTAsRD1sO008RDtNKyspe2ZvcihkPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1tNXSxkfHwoZD10aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLHRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQoZCkpLHRoaXMucmVuZGVyZWROb2Rlcz1kLmNoaWxk''@;'; put 'put ''Tm9kZXMubGVuZ3RoO3RoaXMucmVuZGVyZWROb2RlczxmOylkLmFwcGVuZENoaWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5mOylkLnJlbW92ZUNoaWxkKGQubGFzdENo''@;'; put 'put ''aWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9Y29uc3Qgdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXMubGVuZ3RoO2lmKHY+bClmb3IobGV0IE09bDtNPHY7TSsrKXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpfWVsc2UgZCYmeHAoZCl9cmVuZGVy''@;'; put 'put ''KCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omx9PXRoaXMudGFibGU7dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29sdW1uSGVhZGVyRnVuY3Rpb25zOmQsY29s''@;'; put 'put ''dW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKHYsW1sicm9sZSIsInJvdyJdLHgyZShhKzEpXSk7Zm9yKGxldCBNPS0xKmY7TTxoO00rPTEpe2NvbnN0''@;'; put 'put ''IEQ9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKE0pLFo9di5jaGlsZE5vZGVzW00rZl07Wi5jbGFzc05hbWU9IiIsWi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksQjcoWixbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5p''@;'; put 'put ''c0FyaWFFbmFibGVkKCkmJnZvKFosW2ckKE0rMSt0aGlzLnRhYmxlLnJvd0hlYWRlcnNDb3VudCksSDcoLTEpLFsicm9sZSIsImNvbHVtbmhlYWRlciJdLC4uLk0+PTA/W1sic2NvcGUiLCJjb2wiXV06W1sicm9sZSIsInJvdyJdXV0pLGRbYV0oRCxaLGEpfX19fWxldCBEZmU9ITE7Y2xhc3Mg''@;'; put 'put ''dkplIGV4dGVuZHMgTEV7Y29uc3RydWN0b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZSxkPWwrYTtmb3IoO3RoaXMucmVuZGVyZWROb2RlczxkOyl0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxk''@;'; put 'put ''KHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM+ZDspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVz''@;'; put 'put ''LT0xfXJlbmRlcigpe3RoaXMuYWRqdXN0KCk7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGU7IURmZSYmbD4xZTMmJihEZmU9ITAsaWwoZ2xgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlz''@;'; put 'put ''aWJsZSBjb2x1bW5zLlx4MjAKICAgICAgICBDb25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIGNvbHVtbnMgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgd2lkdGggYW5kL29yXHgyMAogICAgICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsQ29sdW1ucyIgb3B0aW9u''@;'; put 'put ''LmApKTtmb3IobGV0IGg9MDtoPGE7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSx2PXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0SGVhZGVyV2lkdGgoZik7dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2hdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWZv''@;'; put 'put ''cihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaCthXS5zdHlsZS53aWR0aD1gJHt2fXB4YH1jb25zdCBkPXRoaXMu''@;'; put 'put ''cm9vdE5vZGUuZmlyc3RDaGlsZDtkJiZUaShkLCJyb3dIZWFkZXIiKX19bGV0IElmZT0hMTtjbGFzcyB3SmUgZXh0ZW5kcyBMRXtjb25zdHJ1Y3RvcihsKXtzdXBlcigiVFIiLGwpLGZ1bmN0aW9uIGJKZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geUplKGMpe3ZhciBsPWZ1bmN0aW9uIF9K''@;'; put 'put ''ZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm9yZGVyVmlldyIsdm9pZCAwKSx0aGlzLm9yZGVyVmlldz1uZXcgRWZlKGwsYT0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKGEpKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0''@;'; put 'put ''dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9aGFzU3RhbGVDb250ZW50KGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5oYXNTdGFsZUNvbnRlbnQobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IUlmZSYmbD4xZTMmJihJZmU9ITAsaWwoZ2xgUGVyZm9y''@;'; put 'put ''bWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLlx4MjAKICAgICAgICBDb25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vclx4MjAKICAg''@;'; put 'put ''ICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKSx0aGlzLm9yZGVyVmlldy5zZXRTaXplKGwpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJl''@;'; put 'put ''bmRlcmVkUm93VG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCBoPTA7aDxsO2grKyl7dGhpcy5vcmRlclZpZXcucmVuZGVyKCk7Y29uc3QgZj10aGlzLm9yZGVyVmlldy5nZXRDdXJyZW50Tm9kZSgpLHY9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKGgpO3ZhciBhLGQ7dGhpcy50''@;'; put 'put ''YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKGYsW1sicm9sZSIsInJvdyJdLHgyZSh2KyhudWxsIT09KGE9bnVsbD09PShkPXRoaXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT1kfHxudWxsPT09KGQ9ZC5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb2x1bW5IZWFk''@;'; put 'put ''ZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWE/YTowKSsxKV0pLCh2KzEpJTI9PTA/cG8oZiwiaHRfX3Jvd19ldmVuIil8fChsbyhmLCJodF9fcm93X29kZCIpLFRpKGYsImh0X19yb3dfZXZlbiIpKTpwbyhmLCJodF9fcm93X29kZCIpfHwobG8oZiwiaHRfX3Jvd19ldmVuIiksVGkoZiwiaHRfX3Jv''@;'; put 'put ''d19vZGQiKSl9dGhpcy5vcmRlclZpZXcuZW5kKCl9fWZ1bmN0aW9uIFJmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQ0plKGMpe3ZhciBsPWZ1bmN0aW9uIFNKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTUpl''@;'; put 'put ''IGV4dGVuZHMgTEV7Y29uc3RydWN0b3IoKXtzdXBlcigiVEQiKSxSZmUodGhpcywib3JkZXJWaWV3cyIsbmV3IFdlYWtNYXApLFJmZSh0aGlzLCJzb3VyY2VSb3dJbmRleCIsMCl9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5v''@;'; put 'put ''cmRlclZpZXdzLmdldChsKTooYT1uZXcgVGZlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLGNvbHVtbnNUb1JlbmRl''@;'; put 'put ''cjphLHJvd3M6ZCxyb3dIZWFkZXJzOmh9PXRoaXMudGFibGU7Zm9yKGxldCBNPTA7TTxsO00rKyl7Y29uc3QgRD10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoTSksWj1kLmdldFJlbmRlcmVkTm9kZShNKTt0aGlzLnNvdXJjZVJvd0luZGV4PUQ7Y29uc3QgcmU9dGhpcy5vYnRhaW5P''@;'; put 'put ''cmRlclZpZXcoWiksY2U9aC5vYnRhaW5PcmRlclZpZXcoWik7cmUucHJlcGVuZFZpZXcoY2UpLnNldFNpemUoYSkuc2V0T2Zmc2V0KDApLnN0YXJ0KCk7Zm9yKGxldCBiZT0wO2JlPGE7YmUrKyl7cmUucmVuZGVyKCk7Y29uc3QgRWU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNl''@;'; put 'put ''KGJlKSxCZT1yZS5nZXRDdXJyZW50Tm9kZSgpO3ZhciBmLHY7cG8oQmUsImhpZGUiKXx8KEJlLmNsYXNzTmFtZT0iIiksQmUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLEJlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIiksQjcoQmUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAo''@;'; put 'put ''InJvbGUiKV0pLHRoaXMudGFibGUuY2VsbFJlbmRlcmVyKEQsRWUsQmUpLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byhCZSxbLi4uQmUuaGFzQXR0cmlidXRlKCJyb2xlIik/W106W1sicm9sZSIsImdyaWRjZWxsIl1dLEg3KC0xKSxnJChFZSsobnVsbCE9PShmPW51bGw9PT0odj10''@;'; put 'put ''aGlzLnRhYmxlLnJvd1V0aWxzKXx8dm9pZCAwPT09dnx8bnVsbD09PSh2PXYuZGF0YUFjY2Vzc09iamVjdCl8fHZvaWQgMD09PXY/dm9pZCAwOnYucm93SGVhZGVycy5sZW5ndGgpJiZ2b2lkIDAhPT1mP2Y6MCkrMSldKX1yZS5lbmQoKX19fWZ1bmN0aW9uIEp1KGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiB4SmUoYyl7dmFyIGw9ZnVuY3Rpb24gRUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUSmV7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphLHN0eWxlc0hhbmRsZXI6ZH09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0p1KHRoaXMsInJvb3ROb2RlIix2b2lkIDApLEp1KHRoaXMsInJvb3REb2N1bWVudCIsdm9pZCAwKSxKdSh0aGlzLCJyb3dIZWFkZXJzIixudWxsKSxKdSh0aGlzLCJjb2x1bW5IZWFkZXJzIixudWxsKSxK''@;'; put 'put ''dSh0aGlzLCJjb2xHcm91cCIsbnVsbCksSnUodGhpcywicm93cyIsbnVsbCksSnUodGhpcywiY2VsbHMiLG51bGwpLEp1KHRoaXMsInJvd0ZpbHRlciIsbnVsbCksSnUodGhpcywiY29sdW1uRmlsdGVyIixudWxsKSxKdSh0aGlzLCJyb3dVdGlscyIsbnVsbCksSnUodGhpcywiY29sdW1uVXRp''@;'; put 'put ''bHMiLG51bGwpLEp1KHRoaXMsInJvd3NUb1JlbmRlciIsMCksSnUodGhpcywiY29sdW1uc1RvUmVuZGVyIiwwKSxKdSh0aGlzLCJyb3dIZWFkZXJGdW5jdGlvbnMiLFtdKSxKdSh0aGlzLCJyb3dIZWFkZXJzQ291bnQiLDApLEp1KHRoaXMsImNvbHVtbkhlYWRlckZ1bmN0aW9ucyIsW10pLEp1''@;'; put 'put ''KHRoaXMsImNvbHVtbkhlYWRlcnNDb3VudCIsMCksSnUodGhpcywiY2VsbFJlbmRlcmVyIix2b2lkIDApLEp1KHRoaXMsImFjdGl2ZU92ZXJsYXlOYW1lIix2b2lkIDApLEp1KHRoaXMsInN0eWxlc0hhbmRsZXIiLHZvaWQgMCksdGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRo''@;'; put 'put ''aXMucm9vdE5vZGUub3duZXJEb2N1bWVudCx0aGlzLmNlbGxSZW5kZXJlcj1hLHRoaXMuc3R5bGVzSGFuZGxlcj1kfXNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpe3RoaXMuYWN0aXZlT3ZlcmxheU5hbWU9bH1zZXRBeGlzVXRpbHMobCxhKXt0aGlzLnJvd1V0aWxzPWwsdGhpcy5jb2x1bW5VdGls''@;'; put 'put ''cz1hfXNldFZpZXdwb3J0U2l6ZShsLGEpe3RoaXMucm93c1RvUmVuZGVyPWwsdGhpcy5jb2x1bW5zVG9SZW5kZXI9YX1zZXRGaWx0ZXJzKGwsYSl7dGhpcy5yb3dGaWx0ZXI9bCx0aGlzLmNvbHVtbkZpbHRlcj1hfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXt0aGlzLnJvd0hlYWRl''@;'; put 'put ''ckZ1bmN0aW9ucz1sLHRoaXMucm93SGVhZGVyc0NvdW50PWwubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWEsdGhpcy5jb2x1bW5IZWFkZXJzQ291bnQ9YS5sZW5ndGh9c2V0UmVuZGVyZXJzKCl7bGV0e3Jvd0hlYWRlcnM6bCxjb2x1bW5IZWFkZXJzOmEsY29sR3JvdXA6ZCxy''@;'; put 'put ''b3dzOmgsY2VsbHM6Zn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2wuc2V0VGFibGUodGhpcyksYS5zZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksZi5zZXRUYWJsZSh0aGlzKSx0aGlzLnJv''@;'; put 'put ''d0hlYWRlcnM9bCx0aGlzLmNvbHVtbkhlYWRlcnM9YSx0aGlzLmNvbEdyb3VwPWQsdGhpcy5yb3dzPWgsdGhpcy5jZWxscz1mfXJlbmRlcmVkUm93VG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1pc0FyaWFFbmFibGVkKCl7cmV0dXJuIHRoaXMucm93VXRpbHMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpfXJlbmRlcigpe3RoaXMuY29sR3JvdXAuYWRqdXN0KCksdGhpcy5jb2x1bW5IZWFkZXJz''@;'; put 'put ''LmFkanVzdCgpLHRoaXMucm93cy5hZGp1c3QoKSx0aGlzLnJvd0hlYWRlcnMuYWRqdXN0KCksdGhpcy5jb2x1bW5IZWFkZXJzLnJlbmRlcigpLHRoaXMucm93cy5yZW5kZXIoKSx0aGlzLnJvd0hlYWRlcnMucmVuZGVyKCksdGhpcy5jZWxscy5yZW5kZXIoKSx0aGlzLmNvbHVtblV0aWxzLmNh''@;'; put 'put ''bGN1bGF0ZVdpZHRocygpLHRoaXMuY29sR3JvdXAucmVuZGVyKCk7Y29uc3R7cm93c1RvUmVuZGVyOmwscm93czphfT10aGlzO2ZvcihsZXQgZD0wO2Q8bDtkKyspe2NvbnN0IGg9YS5nZXRSZW5kZXJlZE5vZGUoZCksZj10aGlzLnJvd1V0aWxzO2lmKGguZmlyc3RDaGlsZCl7Y29uc3Qgdj10''@;'; put 'put ''aGlzLnJlbmRlcmVkUm93VG9Tb3VyY2UoZCksTT1mLmdldEhlaWdodEJ5T3ZlcmxheU5hbWUodix0aGlzLmFjdGl2ZU92ZXJsYXlOYW1lKSxaPXRoaXMuc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpPzA6MTtoLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PU0/TS1aKyJweCI6IiJ9''@;'; put 'put ''fX19Y2xhc3MgQUple2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93VXRpbHM6Zixjb2x1bW5VdGlsczp2LGNlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6RH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/''@;'; put 'put ''YXJndW1lbnRzWzBdOnt9O3RoaXMucmVuZGVyZXI9bmV3IFRKZShsLHtjZWxsUmVuZGVyZXI6TSxzdHlsZXNIYW5kbGVyOkR9KSx0aGlzLnJlbmRlcmVyLnNldFJlbmRlcmVycyh7cm93SGVhZGVyczpuZXcgZ0plLGNvbHVtbkhlYWRlcnM6bmV3IG1KZShhKSxjb2xHcm91cDpuZXcgdkplKGQp''@;'; put 'put ''LHJvd3M6bmV3IHdKZShoKSxjZWxsczpuZXcgTUplfSksdGhpcy5yZW5kZXJlci5zZXRBeGlzVXRpbHMoZix2KX1zZXRBY3RpdmVPdmVybGF5TmFtZShsKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRBY3RpdmVPdmVybGF5TmFtZShsKSx0aGlzfXNldEZpbHRlcnMobCxhKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yZW5kZXJlci5zZXRGaWx0ZXJzKGwsYSksdGhpc31zZXRWaWV3cG9ydFNpemUobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRWaWV3cG9ydFNpemUobCxhKSx0aGlzfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRIZWFkZXJDb250''@;'; put 'put ''ZW50UmVuZGVyZXJzKGwsYSksdGhpc31hZGp1c3QoKXt0aGlzLnJlbmRlcmVyLmFkanVzdCgpfXJlbmRlcigpe3RoaXMucmVuZGVyZXIucmVuZGVyKCl9fWZ1bmN0aW9uIGxLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrSmUoYyl7dmFyIGw9ZnVuY3Rpb24gREplKGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBJSmV7Y29uc3RydWN0b3IobCxhKXtsSyh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLGxLKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksbEsodGhpcywiaGVhZGVyV2lkdGhzIixuZXcg''@;'; put 'put ''TWFwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9YX1nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldEhl''@;'; put 'put ''YWRlckhlaWdodChsKXtsZXQgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYo''@;'; put 'put ''YT1hP01hdGgubWF4KGEsZCk6ZCksYX1nZXRIZWFkZXJXaWR0aChsKXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRp''@;'; put 'put ''bmdzOmx9PXRoaXM7bGV0IGE9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGE9bC5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixhKSxudWxsIT1hKXtjb25zdCBkPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxoPWwuZ2V0U2V0dGluZygiZGVm''@;'; put 'put ''YXVsdENvbHVtbldpZHRoIik7Zm9yKGxldCBmPTA7ZjxkO2YrKyl7bGV0IHY9QXJyYXkuaXNBcnJheShhKT9hW2ZdOmE7dj12Pz9oLHRoaXMuaGVhZGVyV2lkdGhzLnNldChmLHYpfX19fWZ1bmN0aW9uIExmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUkplKGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IExKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgT0ple2NvbnN0cnVjdG9yKGwsYSl7TGZlKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksTGZlKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5k''@;'; put 'put ''YXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0SGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHQiLGwpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09ZCYmKGE9dm9pZCAwPT09YT9kOk1hdGgubWF4KGEsZCkpLGF9Z2V0SGVpZ2h0QnlPdmVybGF5TmFtZShsLGEpe2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixsLGEpO2NvbnN0IGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0''@;'; put 'put ''Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9pZCAwIT09aCYmKGQ9dm9pZCAwPT09ZD9oOk1hdGgubWF4KGQsaCkpLGR9fWNvbnN0IEc3PSJ0b3AiLElwPSJib3R0b20iLCQ3PSJpbmxpbmVfc3RhcnQiLEs3PSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsQm09ImJvdHRvbV9p''@;'; put 'put ''bmxpbmVfc3RhcnRfY29ybmVyIixPZmU9W0c3LElwLCQ3LEs3LEJtXSxQSmU9bmV3IE1hcChbW0c3LGBodF9jbG9uZV8ke0c3fWBdLFtJcCxgaHRfY2xvbmVfJHtJcH1gXSxbJDcsYGh0X2Nsb25lXyR7JDd9IGh0X2Nsb25lX2xlZnRgXSxbSzcsYGh0X2Nsb25lXyR7Szd9IGh0X2Nsb25lX3Rv''@;'; put 'put ''cF9sZWZ0X2Nvcm5lcmBdLFtCbSxgaHRfY2xvbmVfJHtCbX0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlvbiBScChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRkplKGMpe3ZhciBsPWZ1bmN0aW9uIEhKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgbV89Y2xhc3MgTkple2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7UnAodGhpcywid3RTZXR0aW5ncyIsbnVsbCksUnAodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksUnAodGhpcywiVEJPRFkiLG51bGwpLFJwKHRoaXMsIlRIRUFEIixu''@;'; put 'put ''dWxsKSxScCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksUnAodGhpcywiaGFzVGFibGVIZWlnaHQiLCEwKSxScCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksUnAodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxScCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksUnAodGhpcywiaG9sZGVyT2Zmc2V0Iiww''@;'; put 'put ''KSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhp''@;'; put 'put ''cy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPWQucm9vdFRhYmxlLHYkKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5o''@;'; put 'put ''b2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJv''@;'; put 'put ''d0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3Qgdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50''@;'; put 'put ''aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aCh2KSksdGhpcy5yb3dVdGlscz1uZXcgT0plKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IElKZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxl''@;'; put 'put ''UmVuZGVyZXI9bmV3IEFKZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIiksc3R5bGVzSGFuZGxlcjp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlcn0pfWlzKGwpe3JldHVybiB0aGlzLm5hbWU9PT1sfWZpeFRhYmxlRG9tVHJlZSgpe2NvbnN0IGw9dGhpcy5kb21CaW5kaW5ncy5yb290''@;'; put 'put ''RG9jdW1lbnQ7dGhpcy5UQk9EWT10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRib2R5IiksdGhpcy5UQk9EWXx8KHRoaXMuVEJPRFk9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRoaXMuVEFCTEUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSkpLHRoaXMuVEhFQUQ9dGhpcy5UQUJMRS5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKCJ0aGVhZCIpLHRoaXMuVEhFQUR8fCh0aGlzLlRIRUFEPWwuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLlRIRUFELHRoaXMuVEJPRFkpKSx0aGlzLkNPTEdST1VQPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigiY29sZ3JvdXAi''@;'; put 'put ''KSx0aGlzLkNPTEdST1VQfHwodGhpcy5DT0xHUk9VUD1sLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5DT0xHUk9VUCx0aGlzLlRIRUFEKSl9Y3JlYXRlU3ByZWFkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFh''@;'; put 'put ''fHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFwbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0U3ByZWFkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5hcHBlbmRD''@;'; put 'put ''aGlsZChsKSksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9Y3JlYXRlSGlkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxh''@;'; put 'put ''Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFwbyhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0SGlkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5hcHBlbmRDaGlsZChs''@;'; put 'put ''KSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1jcmVhdGVIb2xkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFhfHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFw''@;'; put 'put ''byhhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGQuY2xhc3NOYW1lPSJ3dEhvbGRlciIsdm8oZCxbSDcoLTEpXSksYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSx0aGlz''@;'; put 'put ''LmlzTWFzdGVyJiYoZC5wYXJlbnROb2RlLmNsYXNzTmFtZSs9Imh0X21hc3RlciBoYW5kc29udGFibGUiLGQucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJydGxNb2RlIik/InJ0bCI6Imx0ciIpLHRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhkLnBhcmVudE5vZGUsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSkpLGQuYXBwZW5kQ2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9ZHJhdygp''@;'; put 'put ''e2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIp''@;'; put 'put ''LHY9YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxNPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLEQ9TS5sZW5ndGgsWj1hLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxyZT1aLmxlbmd0aDtsZXQgY2U9bDtpZih0aGlzLmlzTWFzdGVyJiYoZC5iZWZvcmVEcmF3KCksdGhpcy5o''@;'; put 'put ''b2xkZXJPZmZzZXQ9VTAodGhpcy5ob2xkZXIpLGNlPWguY3JlYXRlQ2FsY3VsYXRvcnMoY2UpLEQmJiFhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikpKXtjb25zdCBFZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLEJlPXRoaXMuY29ycmVjdEhlYWRl''@;'; put 'put ''cldpZHRoO3RoaXMuY29ycmVjdEhlYWRlcldpZHRoPTAhPT1FZSxCZSE9PXRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoY2U9ITEpfWlmKGNlKXRoaXMuaXNNYXN0ZXImJmQucmVmcmVzaCghMCk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRoaXMuaXNNYXN0ZXI/VTAodGhpcy5UQUJMRSk6dGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IEVlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpLDApLEJlPU1hdGgubWF4KHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLDApO3RoaXMucm93RmlsdGVyPW5ldyBXWGUoRWUsZixyZSksdGhp''@;'; put 'put ''cy5jb2x1bW5GaWx0ZXI9bmV3IGpYZShCZSx2LEQpO2xldCBxZT0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTtjb25zdCBydD17fTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYmVmb3JlRHJhdyIsITAscnQpLHFlPSEw''@;'; put 'put ''IT09cnQuc2tpcFJlbmRlcn1xZSYmKHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKE0sWiksKHRoaXMuaXMoSXApfHx0aGlzLmlzKEJtKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKE0sW10pLHRoaXMucmVzZXRPdmVy''@;'; put 'put ''c2l6ZWRSb3dzKCksdGhpcy50YWJsZVJlbmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKHRoaXMubmFtZSkuc2V0Vmlld3BvcnRTaXplKHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSx0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCkpLnNldEZpbHRlcnModGhpcy5yb3dGaWx0ZXIs''@;'; put 'put ''dGhpcy5jb2x1bW5GaWx0ZXIpLnJlbmRlcigpLHRoaXMuaXNNYXN0ZXImJnRoaXMubWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhJcCkpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCks''@;'; put 'put ''dGhpcy5pc01hc3Rlcj8odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpfHxoLmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLGQucmVmcmVzaCghMSksZC5hcHBseVRvRE9NKCksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uRHJhdyIsITAp''@;'; put 'put ''KTp0aGlzLmlzKElwKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCkpfWxldCBiZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKGJlPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJs''@;'; put 'put ''YXkuY2xvbmUmJihiZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fGJlKSxiZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8YmUsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5''@;'; put 'put ''LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLGJlPyhkLnJlZnJlc2hB''@;'; put 'put ''bGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc2VsZWN0aW9uTWFuYWdlci5zZXRBY3RpdmVPdmVybGF5KHRoaXMuZmFjYWRlR2V0dGVyKCkpLnJlbmRlcihjZSksdGhpcy5pc01hc3RlciYmZC5hZnRlckRyYXcoKSx0aGlzLmRhdGFBY2Nlc3NPYmpl''@;'; put 'put ''Y3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpO2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2NvbnN0IGg9dGhpcy5k''@;'; put 'put ''YXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBmLHYsTTtjb25zdCBEPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8W107Zm9yKDtkOylkLT0xLGY9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQo''@;'; put 'put ''ZCksdj10aGlzLmdldENvbHVtbkhlYWRlcihhLGQpLHYmJihNPW9fKHYpLCghZiYmaDxNfHxmPE0pJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1NKSxBcnJheS5pc0FycmF5KEQpP251bGwhPURbZF0mJih0aGlzLmRhdGFBY2Nl''@;'; put 'put ''c3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPURbZF0pOmlzTmFOKEQpfHwodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6''@;'; put 'put ''ZWRDb2x1bW5IZWFkZXJzW2RdPChEW2RdfHxEKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RFtkXXx8RCkpfWFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMsYT10aGlzLlRIRUFE''@;'; put 'put ''LmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO2ZvcihsZXQgZj0wLHY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2Y8djtmKyspaWYoZFtmXSl7aWYoIWFbZl18fDA9PT1hW2ZdLmNoaWxkTm9k''@;'; put 'put ''ZXMubGVuZ3RoKXJldHVybjthW2ZdLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PWAke2RbZl19cHhgfX1yZXNldE92ZXJzaXplZFJvd3MoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCh0aGlzLmlzTWFzdGVyfHx0''@;'; put 'put ''aGlzLmlzKElwKSkmJiFsLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXtjb25zdCBkPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoaCk7YS5vdmVyc2l6ZWRS''@;'; put 'put ''b3dzJiZhLm92ZXJzaXplZFJvd3NbZl0mJihhLm92ZXJzaXplZFJvd3NbZl09dm9pZCAwKX19fWdldENlbGwobCl7bGV0IGE9bC5yb3csZD1sLmNvbDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGEsZCwhdGhpcy5pc01hc3Rlciwi''@;'; put 'put ''cmVuZGVyIik7aWYoaCYmQXJyYXkuaXNBcnJheShoKSYmKFthLGRdPWgpLHRoaXMuaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTE7aWYodGhpcy5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGEpKXJldHVybi0yO2lmKHRoaXMuaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMo''@;'; put 'put ''ZCkpcmV0dXJuLTM7aWYodGhpcy5pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi00O2NvbnN0IGY9dGhpcy5nZXRSb3coYSk7aWYoIWYmJmE+PTApdGhyb3cgbmV3IEVycm9yKCJUUiB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIpO2NvbnN0IHY9''@;'; put 'put ''Zi5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihkKV07aWYoIXYmJmQ+PTApdGhyb3cgbmV3IEVycm9yKCJURCBvciBUSCB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIpO3JldHVybiB2fWdldFJv''@;'; put 'put ''dyhsKXtsZXQgYT1udWxsLGQ9bnVsbDt2YXIgaCxmO3JldHVybiBsPDA/KGE9bnVsbD09PShoPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCksZD10aGlzLlRIRUFEKTooYT1udWxsPT09KGY9dGhpcy5yb3dGaWx0''@;'; put 'put ''ZXIpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNvdXJjZVRvUmVuZGVyZWQobCksZD10aGlzLlRCT0RZKSx2b2lkIDAhPT1hJiZ2b2lkIDAhPT1kJiYhKGQuY2hpbGROb2Rlcy5sZW5ndGg8YSsxKSYmZC5jaGlsZE5vZGVzW2FdfWdldENvbHVtbkhlYWRlcihsKXtjb25zdCBkPXRoaXMuVEhFQUQu''@;'; put 'put ''Y2hpbGROb2Rlc1thcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MF07cmV0dXJuIGQ/LmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpXX1nZXRDb2x1bW5IZWFkZXJz''@;'; put 'put ''KGwpe2NvbnN0IGE9W10sZD10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCk7cmV0dXJuIHRoaXMuVEhFQUQuY2hpbGROb2Rlcy5mb3JFYWNoKGg9Pntjb25zdCBmPWguY2hpbGROb2Rlc1tkXTtmJiZhLnB1c2goZil9KSxhfWdldFJvd0hl''@;'; put 'put ''YWRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtpZihhPj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aClyZXR1cm47Y29uc3QgaD10aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1Jl''@;'; put 'put ''bmRlcmVkKGwpLGY9aDwwP3RoaXMucm93RmlsdGVyLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKTpoLE09KGg8MD90aGlzLlRIRUFEOnRoaXMuVEJPRFkpLmNoaWxkTm9kZXNbZl07cmV0dXJuIE0/LmNoaWxkTm9kZXNbYV19Z2V0Um93SGVhZGVycyhsKXtjb25zdCBhPVtdLGQ9''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV0sdj1mPy5jaGlsZE5vZGVzW2hdO3YmJmEucHVzaCh2''@;'; put 'put ''KX1yZXR1cm4gYX1nZXRDb29yZHMobCl7bGV0IGE9bDtpZigiVEQiIT09YS5ub2RlTmFtZSYmIlRIIiE9PWEubm9kZU5hbWUmJihhPVJtKGEsWyJURCIsIlRIIl0pKSxudWxsPT09YSlyZXR1cm4gbnVsbDtjb25zdCBkPWEucGFyZW50Tm9kZTtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPWQu''@;'; put 'put ''cGFyZW50Tm9kZTtsZXQgZj1SMmUoZCksdj1hLmNlbGxJbmRleDtPbShLNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKEc3LGEsdGhpcy53dFJvb3RFbGVtZW50KT8iVEhFQUQiPT09aC5ub2RlTmFtZSYmKGYtPWguY2hpbGROb2Rlcy5sZW5ndGgpOk9tKEJtLGEsdGhpcy53dFJvb3RFbGVt''@;'; put 'put ''ZW50KXx8T20oSXAsYSx0aGlzLnd0Um9vdEVsZW1lbnQpP2Y9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLWguY2hpbGROb2Rlcy5sZW5ndGgrZjpoPT09dGhpcy5USEVBRD9mPXRoaXMucm93RmlsdGVyLnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhmKTp0''@;'; put 'put ''aGlzLnJvd0ZpbHRlciYmKGY9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShmKSksT20oSzcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxPbSgkNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKEJtLGEsdGhpcy53dFJvb3RFbGVtZW50KT92PXRoaXMuY29sdW1uRmlsdGVyLm9mZnNl''@;'; put 'put ''dHRlZFRIKHYpOnRoaXMuY29sdW1uRmlsdGVyJiYodj10aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4odikpO2NvbnN0IE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZix2KTtyZXR1cm4g''@;'; put 'put ''TSYmQXJyYXkuaXNBcnJheShNKSYmKFtmLHZdPU0pLHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoZix2KX1tYXJrT3ZlcnNpemVkUm93cygpe2lmKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSlyZXR1cm47bGV0IGw9dGhpcy5UQk9EWS5jaGls''@;'; put 'put ''ZE5vZGVzLmxlbmd0aDtjb25zdCBhPWwqdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLGQ9b18odGhpcy5UQk9EWSktMSxoPXRoaXMud290LnN0eWxlc0hhbmRsZXIuYXJlQ2VsbHNCb3JkZXJCb3goKSxmPWg/TXU6b18sdj1oPzA6MSxN''@;'; put 'put ''PWg/MTowO2xldCBELFoscmUsY2UsYmU7aWYoYSE9PWR8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KXtsLT0xLHJlPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCksRD10aGlzLmdldFJvd0hlaWdodChyZSksY2U9dGhpcy5n''@;'; put 'put ''ZXRUckZvclJvdyhyZSksYmU9Y2UucXVlcnlTZWxlY3RvcigidGgiKTtjb25zdCBFZT0wPT09cmU/TTowO1o9YmU/ZihiZSk6ZihjZSktdiwoIUQmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTxaLUVlfHxEPFopJiYoaHx8KForPTEp''@;'; put 'put ''LHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbcmVdPVopfX1nZXRUckZvclJvdyhsKXtyZXR1cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldfWlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCl7aWYo''@;'; put 'put ''bD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0hlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu''@;'; put 'put ''ZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MobCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzUm93SGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzUm93''@;'; put 'put ''QWZ0ZXJSZW5kZXJlZFJvd3MobCl7cmV0dXJuIGw+dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNDb2x1bW5IZWFkZXJS''@;'; put 'put ''ZW5kZXJlZChsKTpsPGF9aXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1pc0NvbHVtbkFmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVDb2x1bW4oKX1pc1Jvd0FmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFZpc2libGVSb3coKX1pc0NvbHVtbkJlZm9yZVZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmdGhpcy5jb2x1bW5GaWx0ZXIuc291''@;'; put 'put ''cmNlVG9SZW5kZXJlZChsKTwwJiZsPj0wfWlzTGFzdFJvd0Z1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlUm93KCk9PT10aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzTGFzdENvbHVtbkZ1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlQ29s''@;'; put 'put ''dW1uKCk9PT10aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWFsbFJvd3NJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT09PXRoaXMuZ2V0VmlzaWJsZVJvd3NDb3VudCgpfWFsbENvbHVtbnNJblZpZXdwb3J0KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT09PXRoaXMuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpfWdldFJvd0hlaWdodChsKXtyZXR1cm4gdGhpcy5yb3dVdGlscy5nZXRIZWlnaHQobCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KGwpe3JldHVybiB0aGlzLmNvbHVt''@;'; put 'put ''blV0aWxzLmdldEhlYWRlckhlaWdodChsKX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRXaWR0aChsKX1oYXNEZWZpbmVkU2l6ZSgpe3JldHVybiB0aGlzLmhhc1RhYmxlSGVpZ2h0JiZ0aGlzLmhhc1RhYmxlV2lkdGh9Z2V0V2lkdGgoKXtyZXR1cm4gc3Uo''@;'; put 'put ''dGhpcy5UQUJMRSl9Z2V0SGVpZ2h0KCl7cmV0dXJuIE11KHRoaXMuVEFCTEUpfWdldFRvdGFsV2lkdGgoKXtjb25zdCBsPXN1KHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0V2lkdGgoKX1nZXRUb3RhbEhlaWdodCgpe2NvbnN0IGw9TXUodGhpcy5oaWRlcik7cmV0dXJuIDAh''@;'; put 'put ''PT1sP2w6dGhpcy5nZXRIZWlnaHQoKX1pc1Zpc2libGUoKXtyZXR1cm4gejcodGhpcy5UQUJMRSl9X21vZGlmeVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPW1sKGwpP2woKTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpPyhhPVsuLi5hXSxhW2EubGVuZ3RoLTFdPXRoaXMuX2NvcnJlY3RS''@;'; put 'put ''b3dIZWFkZXJXaWR0aChhW2EubGVuZ3RoLTFdKSk6YT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYSksYX1fY29ycmVjdFJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBsJiYoYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENv''@;'; put 'put ''bHVtbldpZHRoIikpLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoYSs9MSksYX19LFBmZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpPy0xOjB9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVu''@;'; put 'put ''ZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3Mi''@;'; put 'put ''KSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5I''@;'; put 'put ''ZWFkZXJzLmxlbmd0aH19O1RwKFBmZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NUb3AiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgRmZlPVBmZSxIZmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVt''@;'; put 'put ''blJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0''@;'; put 'put ''IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0x''@;'; put 'put ''OmN9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1''@;'; put 'put ''bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVhZGVycy5sZW5ndGh9fTtUcChIZmUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9''@;'; put 'put ''KTtjb25zdCBjSz1IZmU7Y2xhc3MgdUsgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLEc3KX19VGwodUssRmZlKSxUbCh1SyxjSyk7Y29uc3QgakplPXVLO2Z1bmN0aW9uIG5QKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs''@;'; put 'put ''KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgT0U9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gTmZlKGMpe2NvbnN0e3d0U2V0dGluZ3M6bCxpbmxpbmVTdGFy''@;'; put 'put ''dE92ZXJsYXk6YSx3dFRhYmxlOmQsd3RWaWV3cG9ydDpoLHRvdGFsQ29sdW1uczpmLHJvb3RXaW5kb3c6dn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT12KXtsZXQgRD1udWxsO2lmKGwuZ2V0U2V0dGluZygicnRsTW9kZSIpKXtjb25z''@;'; put 'put ''dCByZT1kLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9TWF0aC5hYnMocmUucmlnaHQtdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvb3RXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKX1lbHNlIEQ9VTAoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0''@;'; put 'put ''IFo9TWF0aC5hYnMoeSQodix2KSk7aWYoRD5aKXtjb25zdCByZT1fJCh2KTtsZXQgY2U9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgYmU9MTtiZTw9ZjtiZSsrKWlmKGNlKz1hLnN1bUNlbGxTaXplcyhiZS0xLGJlKSxEK2NlLVo+PXJlKXtjPWJlLTI7YnJlYWt9fX1yZXR1cm4gY31m''@;'; put 'put ''dW5jdGlvbiBWZmUoYyl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IHY9VTAoYS53dFJvb3RFbGVt''@;'; put 'put ''ZW50KSxNPU9PKGYsZik7aWYodi50b3A+TSl7Y29uc3QgRD1vXyhmKTtsZXQgWj1kLmdldENvbHVtbkhlYWRlckhlaWdodCgpO2ZvcihsZXQgcmU9MTtyZTw9aDtyZSsrKWlmKForPWwuc3VtQ2VsbFNpemVzKHJlLTEscmUpLHYudG9wK1otTT49RCl7Yz1yZS0yO2JyZWFrfX19cmV0dXJuIGN9''@;'; put 'put ''Y29uc3QgJEplPWNsYXNzIEdKZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gekplKGMsbCl7KGZ1bmN0aW9uIFVKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2Jq''@;'; put 'put ''ZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxPRSksZnVuY3Rpb24gWkplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXSmUoYyl7dmFyIGw9ZnVuY3Rpb24gWUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywi''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7aWYobC5jb2w8MHx8bC5yb3c8MClyZXR1cm4hMTtjb25zdCBoPXRoaXMuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobC5jb2wsYSksZj10aGlzLnNjcm9sbFZp''@;'; put 'put ''ZXdwb3J0VmVydGljYWxseShsLnJvdyxkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQsdG90YWxDb2x1bW5zOmh9''@;'; put 'put ''PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPUZkKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8''@;'; put 'put ''bDwwfHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2NvbnN0e2ZpeGVkQ29sdW1uc1N0YXJ0OnYsaW5saW5lU3RhcnRPdmVybGF5Ok19PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxEPSJhdXRvIj09PWE7aWYoRCYmbDx2KXJldHVybiExO2NvbnN0IFo9dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4o''@;'; put 'put ''KSxyZT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7bGV0IGNlPSExO3JldHVybihEJiYobDxafHxsPnJlKXx8IUQpJiYoY2U9TS5zY3JvbGxUbyhsLEQ/bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpOiJlbmQiPT09YSkpLGNlfXNjcm9sbFZpZXdwb3J0VmVydGlj''@;'; put 'put ''YWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQsdG90YWxSb3dzOmh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPUZkKGEpO2lmKGw9dGhpcy5k''@;'; put 'put ''YXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGwsZiksIU51bWJlci5pc0ludGVnZXIobCl8fGw8MHx8bD5oKXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZFJvd3NCb3R0b206dixmaXhlZFJvd3NUb3A6''@;'; put 'put ''TSx0b3BPdmVybGF5OkR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxaPSJhdXRvIj09PWE7aWYoWiYmKGw8TXx8bD5oLXYtMSkpcmV0dXJuITE7Y29uc3QgcmU9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxjZT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7bGV0IGJlPSExO3JldHVybihaJiYo''@;'; put 'put ''bDxyZXx8bD5jZSl8fCFaKSYmKGJlPUQuc2Nyb2xsVG8obCxaP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKToiYm90dG9tIj09PWEpKSxiZX1nZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxl''@;'; put 'put ''Um93KCl9Z2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gblAoT0UsdGhpcyxWZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2Jq''@;'; put 'put ''ZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gblAoT0UsdGhpcyxWZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1n''@;'; put 'put ''ZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gblAoT0UsdGhpcyxOZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RU''@;'; put 'put ''YWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXty''@;'; put 'put ''ZXR1cm4gblAoT0UsdGhpcyxOZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX19O2Z1bmN0aW9uIEJmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWEplKGMpe3ZhciBsPWZ1bmN0aW9uIEpKZShjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdl8oYyxsKXtyZXR1cm4gYy5nZXQoemZlKGMsbCkpfWZ1bmN0aW9uIGpmZShjLGwsYSl7cmV0dXJuIGMuc2V0KHpmZShjLGwpLGEpLGF9ZnVuY3Rpb24gemZlKGMsbCxhKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgXzU9bmV3IFdlYWtNYXA7Y2xhc3MgclB7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO0JmZSh0aGlzLCJyb3ciLG51bGwpLEJmZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIEtKZShjLGwsYSl7KGZ1bmN0aW9uIHFKZShjLGwpe2lmKGwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsXzUsITEpLGpmZShfNSx0aGlzLGQpLHR5cGVvZiBsPCJ1IiYmdHlwZW9mIGE8InUi''@;'; put 'put ''JiYodGhpcy5yb3c9bCx0aGlzLmNvbD1hKX1pc1ZhbGlkKGwpe2NvbnN0e2NvdW50Um93czphLGNvdW50Q29sczpkLGNvdW50Um93SGVhZGVyczpoLGNvdW50Q29sSGVhZGVyczpmfT17Y291bnRSb3dzOjAsY291bnRDb2xzOjAsY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOjAs''@;'; put 'put ''Li4ubH07cmV0dXJuISghTnVtYmVyLmlzSW50ZWdlcih0aGlzLnJvdyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29sKXx8dGhpcy5yb3c8LWZ8fHRoaXMuY29sPC1ofHx0aGlzLnJvdz49YXx8dGhpcy5jb2w+PWQpfWlzRXF1YWwobCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwu''@;'; put 'put ''cm93JiZ0aGlzLmNvbD09PWwuY29sfWlzSGVhZGVyKCl7cmV0dXJuIXRoaXMuaXNDZWxsKCl9aXNDZWxsKCl7cmV0dXJuIHRoaXMucm93Pj0wJiZ0aGlzLmNvbD49MH1pc1J0bCgpe3JldHVybiB2XyhfNSx0aGlzKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJih2''@;'; put 'put ''XyhfNSx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJih2XyhfNSx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc1NvdXRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49''@;'; put 'put ''bC5yb3cmJih2XyhfNSx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc05vcnRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJih2XyhfNSx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''b3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRoaXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1heCh0aGlzLmNvbCwwKSx0aGlzfWFzc2lnbihsKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsPy5yb3cpJiYodGhpcy5yb3c9bC5y''@;'; put 'put ''b3cpLE51bWJlci5pc0ludGVnZXIobD8uY29sKSYmKHRoaXMuY29sPWwuY29sKSxsIGluc3RhbmNlb2YgclAmJmpmZShfNSx0aGlzLGwuaXNSdGwoKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgclAodGhpcy5yb3csdGhpcy5jb2wsdl8oXzUsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue3Jv''@;'; put 'put ''dzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fX1jb25zdCBpUD1yUDtmdW5jdGlvbiBkSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdFFlKGMpe3ZhciBsPWZ1bmN0aW9uIG5RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVu''@;'; put 'put ''Y3Rpb24gVTIoYyxsKXtyZXR1cm4gYy5nZXQoVWZlKGMsbCkpfWZ1bmN0aW9uIFVmZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE5kPW5ldyBXZWFrTWFwO2NsYXNzIGhLe2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2RLKHRoaXMsImhpZ2hsaWdodCIsbnVsbCksZEsodGhpcywiZnJvbSIsbnVsbCksZEsodGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIFFK''@;'; put 'put ''ZShjLGwsYSl7KGZ1bmN0aW9uIGVRZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsTmQsITEpLHRoaXMuaGln''@;'; put 'put ''aGxpZ2h0PWwuY2xvbmUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89ZC5jbG9uZSgpLGZ1bmN0aW9uIHJRZShjLGwsYSl7Yy5zZXQoVWZlKGMsbCksYSl9KE5kLHRoaXMsaCl9c2V0SGlnaGxpZ2h0KGwpe3JldHVybiB0aGlzLmhpZ2hsaWdodD1sLmNsb25lKCksdGhpc31zZXRGcm9t''@;'; put 'put ''KGwpe3JldHVybiB0aGlzLmZyb209bC5jbG9uZSgpLHRoaXN9c2V0VG8obCl7cmV0dXJuIHRoaXMudG89bC5jbG9uZSgpLHRoaXN9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLHRoaXMuZnJvbS5ub3JtYWxpemUoKSx0aGlzLnRvLm5vcm1hbGl6ZSgpLHRo''@;'; put 'put ''aXN9aXNWYWxpZChsKXtyZXR1cm4gdGhpcy5mcm9tLmlzVmFsaWQobCkmJnRoaXMudG8uaXNWYWxpZChsKX1pc1NpbmdsZSgpe3JldHVybiB0aGlzLmlzU2luZ2xlQ2VsbCgpfHx0aGlzLmlzU2luZ2xlSGVhZGVyKCl9aXNTaW5nbGVDZWxsKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRo''@;'; put 'put ''aXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzU2luZ2xlSGVhZGVyKCl7cmV0dXJuKHRoaXMuZnJvbS5yb3c8MHx8dGhpcy5mcm9tLmNvbDwwKSYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlz''@;'; put 'put ''LmZyb20uY29sPT09dGhpcy50by5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hKCF0aGlzLmZyb20uaXNIZWFkZXIoKXx8IXRoaXMudG8uaXNIZWFkZXIoKSl8fHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MHx8dGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwfWNvbnRhaW5zSGVhZGVy''@;'; put 'put ''cygpe3JldHVybiB0aGlzLmZyb20uaXNIZWFkZXIoKXx8dGhpcy50by5pc0hlYWRlcigpfWdldE91dGVySGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0aCgp''@;'; put 'put ''e3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfWdldEhlaWdodCgpe2lmKHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5y''@;'; put 'put ''b3csMCksYT1NYXRoLm1heCh0aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0V2lkdGgoKXtpZih0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGE9TWF0aC5t''@;'; put 'put ''YXgodGhpcy50by5jb2wsMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldENlbGxzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRXaWR0aCgpKnRoaXMuZ2V0SGVpZ2h0KCl9aW5jbHVkZXMobCl7Y29uc3R7cm93OmEsY29sOmR9PWwsaD10aGlzLmdldE91dGVyVG9wU3Rh''@;'; put 'put ''cnRDb3JuZXIoKSxmPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yb3c8PWEmJmYucm93Pj1hJiZoLmNvbDw9ZCYmZi5jb2w+PWR9aW5jbHVkZXNSYW5nZShsKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5j''@;'; put 'put ''bHVkZXMobC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKGwpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgu''@;'; put 'put ''bWF4KGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpJiZNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpfW92''@;'; put 'put ''ZXJsYXBzKGwpe3JldHVybiBsLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmwuaXNOb3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIo''@;'; put 'put ''KS5pc1NvdXRoRWFzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0''@;'; put 'put ''Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w8PWwuZ2V0''@;'; put 'put ''T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2x8fHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2x9aXNPdmVybGFw''@;'; put 'put ''cGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJv''@;'; put 'put ''d3x8dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93Pj1sLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3d9ZXhwYW5kKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRl''@;'; put 'put ''clRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuKGwucm93PGEucm93fHxsLmNvbDxhLmNvbHx8bC5yb3c+ZC5yb3d8fGwuY29sPmQuY29sKSYmKHRoaXMuZnJvbT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKGEucm93LGwucm93''@;'; put 'put ''KSxNYXRoLm1pbihhLmNvbCxsLmNvbCkpLHRoaXMudG89dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChkLnJvdyxsLnJvdyksTWF0aC5tYXgoZC5jb2wsbC5jb2wpKSwhMCl9ZXhwYW5kQnlSYW5nZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdKXx8YXJndW1lbnRzWzFdO2lmKHRoaXMuaW5jbHVkZXNSYW5nZShsKXx8IXRoaXMub3ZlcmxhcHMobCkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxmPXRoaXMuZ2V0RGlyZWN0aW9u''@;'; put 'put ''KCksdj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxNPWwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxEPU1hdGgubWluKGQucm93LHYucm93KSxaPU1hdGgubWluKGQuY29sLHYuY29sKSxyZT1NYXRoLm1heChoLnJvdyxNLnJvdyksY2U9TWF0aC5tYXgoaC5jb2wsTS5jb2wpLGJlPXRo''@;'; put 'put ''aXMuX2NyZWF0ZUNlbGxDb29yZHMoRCxaKSxFZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKHJlLGNlKTtyZXR1cm4gdGhpcy5mcm9tPWJlLHRoaXMudG89RWUsdGhpcy5zZXREaXJlY3Rpb24oZiksYSYmKHRoaXMuaGlnaGxpZ2h0LnJvdz09PXRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5l''@;'; put 'put ''cigpLnJvdyYmIk4tUyI9PT10aGlzLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKSx0aGlzLmhpZ2hsaWdodC5jb2w9PT10aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2wmJiJXLUUiPT09dGhpcy5nZXRIb3Jpem9udGFsRGlyZWN0''@;'; put 'put ''aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRo''@;'; put 'put ''RWFzdE9mKHRoaXMudG8pPyJTRS1OVyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMu''@;'; put 'put ''Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMu''@;'; put 'put ''dG9dPVt0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5l''@;'; put 'put ''cigpXX19Z2V0VmVydGljYWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGly''@;'; put 'put ''ZWN0aW9uKCkpPi0xPyJXLUUiOiJFLVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0''@;'; put 'put ''RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3Ro''@;'; put 'put ''aXMuZ2V0VG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5j''@;'; put 'put ''b2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRo''@;'; put 'put ''Lm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVy''@;'; put 'put ''KCl9Z2V0Qm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3Jl''@;'; put 'put ''dHVybiBVMihOZCx0aGlzKT90aGlzLmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0''@;'; put 'put ''aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9t''@;'; put 'put ''U3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8u''@;'; put 'put ''Y29sKSl9Z2V0T3V0ZXJUb3BSaWdodENvcm5lcigpe3JldHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJC''@;'; put 'put ''b3R0b21TdGFydENvcm5lcigpfWlzQ29ybmVyKGwpe3JldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8''@;'; put 'put ''bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIGlQJiYobC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6bC5p''@;'; put 'put ''c0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJC''@;'; put 'put ''b3R0b21TdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dm9pZCAwKX1nZXRCb3JkZXJzU2hhcmVkV2l0aChsKXtpZighdGhpcy5pbmNsdWRlc1JhbmdlKGwpKXJldHVybltdO2NvbnN0IGFfdG9wPU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFf''@;'; put 'put ''Ym90dG9tPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfbGVmdD1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxhX3JpZ2h0PU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGRfdG9wPU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cp''@;'; put 'put ''LGRfYm90dG9tPU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpLGRfbGVmdD1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSxkX3JpZ2h0PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpLGg9W107cmV0dXJuIGFfdG9wPT09ZF90b3AmJmgucHVzaCgidG9wIiksYV9yaWdodD09''@;'; put 'put ''PWRfcmlnaHQmJmgucHVzaChVMihOZCx0aGlzKT8ibGVmdCI6InJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaChVMihOZCx0aGlzKT8icmlnaHQiOiJsZWZ0IiksaH1nZXRJbm5lcigpe2NvbnN0IGw9dGhpcy5nZXRP''@;'; put 'put ''dXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspKHRoaXMuZnJvbS5yb3chPT1ofHx0aGlzLmZyb20uY29sIT09ZikmJih0aGlzLnRv''@;'; put 'put ''LnJvdyE9PWh8fHRoaXMudG8uY29sIT09ZikmJmQucHVzaCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWdldEFsbCgpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0''@;'; put 'put ''IGg9bC5yb3c7aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspZC5wdXNoKGwucm93PT09aCYmbC5jb2w9PT1mP2w6YS5yb3c9PT1oJiZhLmNvbD09PWY/YTp0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWZvckFsbChsKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgaD1hLnJvdztoPD1kLnJvdztoKyspZm9yKGxldCBmPWEuY29sO2Y8PWQuY29sO2YrKylpZighMT09PWwoaCxmKSlyZXR1cm59Y2xvbmUoKXtyZXR1cm4gbmV3IGhLKHRoaXMu''@;'; put 'put ''aGlnaGxpZ2h0LHRoaXMuZnJvbSx0aGlzLnRvLFUyKE5kLHRoaXMpKX10b09iamVjdCgpe3JldHVybntmcm9tOnRoaXMuZnJvbS50b09iamVjdCgpLHRvOnRoaXMudG8udG9PYmplY3QoKX19X2NyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IGlQKGwsYSxVMihOZCx0aGlzKSl9fWNv''@;'; put 'put ''bnN0IGZLPWhLO2Z1bmN0aW9uIFoyKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBpUWUoYyl7dmFyIGw9ZnVuY3Rpb24gYVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBwS3tnZXQgZXZlbnRNYW5hZ2VyKCl7cmV0''@;'; put 'put ''dXJuIG5ldyBqMih0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe1oyKHRoaXMsInd0VGFibGUiLHZvaWQgMCksWjIodGhpcywid3RTY3JvbGwiLHZvaWQgMCksWjIodGhpcywid3RWaWV3cG9ydCIsdm9pZCAwKSxaMih0aGlzLCJ3dE92ZXJsYXlzIix2b2lkIDApLFoyKHRoaXMsInNlbGVjdGlvbk1h''@;'; put 'put ''bmFnZXIiLHZvaWQgMCksWjIodGhpcywid3RFdmVudCIsdm9pZCAwKSxaMih0aGlzLCJndWlkIixgd3RfJHt1JCgpfWApLFoyKHRoaXMsImRyYXdJbnRlcnJ1cHRlZCIsITEpLFoyKHRoaXMsImRyYXduIiwhMSksWjIodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLCJtYXN0ZXIiKSxaMih0aGlz''@;'; put 'put ''LCJkb21CaW5kaW5ncyIsdm9pZCAwKSxaMih0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5n''@;'; put 'put ''cz1hLHRoaXMud3RTY3JvbGw9bmV3ICRKZSh0aGlzLmNyZWF0ZVNjcm9sbERhbygpKX1maW5kT3JpZ2luYWxIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlcy5sZW5ndGgmJnRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9k''@;'; put 'put ''ZXMubGVuZ3RoKXtmb3IobGV0IGE9MCxkPXRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspbC5wdXNoKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbYV0uaW5uZXJIVE1MKTt0aGlzLnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgiY29sdW1uSGVhZGVycyIsW2Z1bmN0aW9uKGEsZCl7UG0oZCxsW2FdKX1dKX19Y3JlYXRlQ2VsbENvb3JkcyhsLGEpe3JldHVybiBuZXcgaVAobCxhLHRoaXMud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJydGxNb2RlIikpfWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIG5ldyBmSyhsLGEsZCx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50''@;'; put 'put ''c1swXTtyZXR1cm4gdGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITEsIXRoaXMud3RUYWJsZS5pc1Zpc2libGUoKXx8RjJlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpP3RoaXMuZHJhd0ludGVycnVwdGVkPSEwOnRoaXMud3RUYWJsZS5kcmF3KGwpLHRoaXN9Z2V0Q2VsbChs''@;'; put 'put ''KXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pKXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxoPXRoaXMud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKGwucm93PGgmJmwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50''@;'; put 'put ''b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGgpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLmNvbDx2JiZsLnJvdz49ZC1mKXtpZih0aGlzLnd0T3ZlcmxheXMu''@;'; put 'put ''Ym90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1l''@;'; put 'put ''bHNle2lmKGwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGQmJmwucm93Pj1kLWYmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnQobCxhLGQp''@;'; put 'put ''fXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxh''@;'; put 'put ''KX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1k''@;'; put 'put ''ZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BP''@;'; put 'put ''dmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVy''@;'; put 'put ''biBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENvbHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9t''@;'; put 'put ''Iil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVy''@;'; put 'put ''biBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBsLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwu''@;'; put 'put ''d3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiBsLnNlbGVjdGlvbk1hbmFnZXJ9LGdldCBzdHlsZXNIYW5kbGVyKCl7cmV0dXJuIGwuc3R5bGVzSGFuZGxlcn0sZ2V0IGRyYXduKCl7cmV0dXJuIGwu''@;'; put 'put ''ZHJhd259LHNldCBkcmF3bihhKXtsLmRyYXduPWF9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHN0YXJ0Q29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5WaXNp''@;'; put 'put ''YmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0s''@;'; put 'put ''Z2V0IGVuZENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5k''@;'; put 'put ''Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGNvdW50Q29sdW1uc1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5jb3Vu''@;'; put 'put ''dH0sZ2V0IGNvdW50Q29sdW1uc1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IHN0YXJ0Um93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRS''@;'; put 'put ''b3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1BhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IGVuZFJv''@;'; put 'put ''d1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVy''@;'; put 'put ''biBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGNvdW50Um93c1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Um93c1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdw''@;'; put 'put ''b3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvbHVtbkhlYWRlcnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKX0sZ2V0IHJvd0hlYWRlcnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKX19''@;'; put 'put ''fX1mdW5jdGlvbiBaZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9RZShjKXt2YXIgbD1mdW5jdGlvbiBzUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl''@;'; put 'put ''dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGxRZSBleHRlbmRzIHBLe2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''KXtzdXBlcihsLGEpLFpmZSh0aGlzLCJjbG9uZVNvdXJjZSIsdm9pZCAwKSxaZmUodGhpcywiY2xvbmVPdmVybGF5Iix2b2lkIDApO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy5jbG9uZVNvdXJjZT1kLnNvdXJjZSx0aGlzLmNsb25lT3Zl''@;'; put 'put ''cmxheT1kLm92ZXJsYXksdGhpcy5zdHlsZXNIYW5kbGVyPWQuc3R5bGVzSGFuZGxlcix0aGlzLnd0VGFibGU9dGhpcy5jbG9uZU92ZXJsYXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1k''@;'; put 'put ''LnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1kLnNlbGVjdGlvbk1hbmFnZXIsdGhpcy53dEV2ZW50PW5ldyBTZmUoaCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLGQuZXZl''@;'; put 'put ''bnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBQRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpeyhmdW5jdGlvbiBjUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHVRZShjKXt2YXIgbD1mdW5jdGlvbiBkUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywid3RTZXR0aW5ncyIsbnVsbCksVHAodGhpcywid290IixsLHt3cml0YWJsZTohMX0pLHRoaXMuZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oO2NvbnN0e1RBQkxFOnYsaGlkZXI6TSxzcHJl''@;'; put 'put ''YWRlcjpELGhvbGRlcjpaLHd0Um9vdEVsZW1lbnQ6cmV9PXRoaXMud290Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLnR5cGU9ZCx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT12LHRoaXMuaGlkZXI9TSx0aGlzLnNwcmVhZGVyPUQs''@;'; put 'put ''dGhpcy5ob2xkZXI9Wix0aGlzLnd0Um9vdEVsZW1lbnQ9cmUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj1hXyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNob3VsZEJlUmVuZGVyZWQoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25l''@;'; put 'put ''KCl9aGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl7cmV0dXJuIHRoaXMubmVlZEZ1bGxSZW5kZXIhPT10aGlzLnNob3VsZEJlUmVuZGVyZWQoKX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKGwpeyJiZWZvcmUiPT09bCYmdGhpcy5zaG91bGRCZVJlbmRlcmVkKCk/dGhpcy5uZWVkRnVsbFJlbmRl''@;'; put 'put ''cj0hMDoiYWZ0ZXIiPT09bCYmIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpJiYodGhpcy5uZWVkRnVsbFJlbmRlcj0hMSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0NvbnRhaW5lcj1hXyh0aGlzLmhpZGVyLnBhcmVu''@;'; put 'put ''dE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5''@;'; put 'put ''bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXI6YkUobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250''@;'; put 'put ''YWlucyhsKSlyZXR1cm4gdm9pZCBpbChgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBlfSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWE8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLE09YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5n''@;'; put 'put ''KCJmaXhlZFJvd3NCb3R0b20iKSxEPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixaPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihEKSx0b3A6RC5vZmZzZXRUb3B9LHJlPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKSx0b3A6bC5vZmZzZXRU''@;'; put 'put ''b3B9O2xldCBjZT1udWxsO3JldHVybiBjZT1oP3RoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3codixmLHJlLFopOnRoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIodixNLGYscmUsWiksY2V9Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zmc2V0V2lkdGg6bC5vZmZzZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVt''@;'; put 'put ''ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PTAsTT0wO2lmKGEpe2xldCBEPWYubGVmdDt0aGlzLmlzUnRsKCkmJihEPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtmMCgpKSksdj1EPD0wPy0xKkQ6MH1lbHNlIHY9aC5zdGFy''@;'; put 'put ''dDtyZXR1cm4gTT1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtZi50b3A6aC50b3Ase3N0YXJ0OmQuc3RhcnQrdix0b3A6ZC50b3ArTX19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCB2X2hv''@;'; put 'put ''cml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx2X3ZlcnRpY2FsPXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBNPTAsRD0wO2lmKGR8fChNPXZfaG9yaXpvbnRhbC1m''@;'; put 'put ''LnN0YXJ0KSxhKXtjb25zdCBaPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtEPS0xKnRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ArWi50b3B9ZWxzZSBsfHwoRD12X3ZlcnRpY2FsLWYudG9w''@;'; put 'put ''KTtyZXR1cm57c3RhcnQ6aC5zdGFydC1NLHRvcDpoLnRvcC1EfX1tYWtlQ2xvbmUoKXtpZigtMT09PU9mZS5pbmRleE9mKHRoaXMudHlwZSkpdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsLHd0U2V0''@;'; put 'put ''dGluZ3M6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyxmPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksTT1sLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtmLmNsYXNzTmFtZT1gJHtQSmUu''@;'; put 'put ''Z2V0KHRoaXMudHlwZSl9IGhhbmRzb250YWJsZWAsZi5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5pc1J0bCgpPyJydGwiOiJsdHIiKSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS50b3A9MCxmLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLmlzUnRsKCk/Zi5zdHls''@;'; put 'put ''ZS5yaWdodD0wOmYuc3R5bGUubGVmdD0wLGEuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZixbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSx2LmNsYXNzTmFtZT1sLlRBQkxFLmNsYXNzTmFtZSxsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZ2LnNldEF0dHJpYnV0ZSgicm9sZSIs''@;'; put 'put ''bC5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKSksZi5hcHBlbmRDaGlsZCh2KSxNLmFwcGVuZENoaWxkKGYpO2NvbnN0IFo9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09Wnx8''@;'; put 'put ''Imhvcml6b250YWwiPT09WiYmdGhpcy50eXBlPT09Rzd8fCJ2ZXJ0aWNhbCI9PT1aJiZ0aGlzLnR5cGU9PT0kNz9oOiJoaWRkZW4iPT09aC5nZXRDb21wdXRlZFN0eWxlKE0pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6YkUobC5UQUJMRSksbmV3IGxRZSh2LHRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50OnRoaXMud290Lnd0RXZlbnQsc2VsZWN0aW9uTWFuYWdlcjp0aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLHN0eWxlc0hhbmRsZXI6dGhpcy53b3Quc3R5bGVz''@;'; put 'put ''SGFuZGxlcn0pfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMubmVlZEZ1bGxSZW5kZXIpe2NvbnN0IGE9dGhpcy5jbG9uZS5jbG9uZVNvdXJjZTthLmFjdGl2ZU92ZXJsYXlOYW1lPXRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZS5uYW1lLHRoaXMuY2xvbmUuZHJhdyhsKSxhLmFjdGl2ZU92ZXJsYXlOYW1lPSJtYXN0ZXIifX1yZXNldCgpe2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlcjtbbC5zdHlsZSx0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUsbC5wYXJlbnROb2RlLnN0eWxl''@;'; put 'put ''XS5mb3JFYWNoKHY9Pnt2LndpZHRoPSIiLHYuaGVpZ2h0PSIifSl9aXNSdGwoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKX1kZXN0cm95KCl7dGhpcy5jbG9uZS5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1jb25zdCBnSz1jPT57Y29uc3QgbD1jLnN0eWxl''@;'; put 'put ''c0hhbmRsZXI7aWYobC5pc0NsYXNzaWNUaGVtZSgpKXJldHVybiBPYmplY3QuZnJlZXplKHt3aWR0aDo2LGhlaWdodDo2LGJvcmRlcldpZHRoOjEsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjoiI0ZGRiJ9KTtjb25zdCBhPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRv''@;'; put 'put ''ZmlsbC1zaXplIiksZD1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtYm9yZGVyLXdpZHRoIiksaD1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtYm9yZGVyLWNvbG9yIik7cmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOmEsaGVpZ2h0OmEsYm9yZGVy''@;'; put 'put ''V2lkdGg6ZCxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOmh9KX07Y2xhc3MgZ1FlIGV4dGVuZHMgUEV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLEc3LGQsaCksZnVuY3Rpb24gaFFlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBmUWUoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''cFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzVG9wIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfWNy''@;'; put 'put ''ZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBqSmUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxk''@;'; put 'put ''UmVuZGVyVG9wT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhv''@;'; put 'put ''bGRlci5wYXJlbnROb2RlLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGg9MCxmPSExO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxkJiYidmVydGljYWwiPT09ZCloPXRoaXMu''@;'; put 'put ''Z2V0U2Nyb2xsUG9zaXRpb24oKSx3RShsKTtlbHNle2NvbnN0e3d0VGFibGU6TX09dGhpcy53b3QsRD1NLmhpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Y9TWF0aC5jZWlsKEQuYm90dG9tKT09PWwub2Zmc2V0SGVpZ2h0LGg9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksUE8obCwiMHB4''@;'; put 'put ''IixgJHtofXB4YCl9Y29uc3Qgdj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihoLGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFi''@;'; put 'put ''bGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3JvbGxUbyhMTyhhKSxsKSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxUb3A7ZC5zY3JvbGxUb3A9''@;'; put 'put ''bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0''@;'; put 'put ''IGg9bCxmPTA7Zm9yKDtoPGE7KXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGgpO2YrPXZvaWQgMD09PXY/ZDp2LGgrPTF9cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXIm''@;'; put 'put ''Jih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJp''@;'; put 'put ''bmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgWj1hLmdldFdvcmtz''@;'; put 'put ''cGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoWi09ZjAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7Wn1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0''@;'; put 'put ''aDtsZXQgRD1NdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWlnaHQ9YCR7RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT1nSyh0aGlzLndvdCksZD10aGlzLndv''@;'; put 'put ''dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS5oZWlnaHQsMTApLzI6MDt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxs''@;'; put 'put ''LnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChsLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LDEwKStkfXB4YH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJv''@;'; put 'put ''d3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVl''@;'; put 'put ''IG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRo''@;'; put 'put ''aXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9y''@;'; put 'put ''dC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3dvdDpkLHd0U2V0dGluZ3M6aH09dGhpcyx2PShkLmNsb25lU291cmNlP2QuY2xvbmVTb3VyY2U6ZCkud3RUYWJsZS5ob2xkZXIsTT1oLmdldFNldHRpbmcoImNvbHVtbkhl''@;'; put 'put ''YWRlcnMiKSxaPTA9PT1oLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpJiZNLmxlbmd0aD4wJiYhcG8odi5wYXJlbnROb2RlLCJpbm5lckJvcmRlclRvcCIpPzE6MDtsZXQgcmU9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLGNlPTA7aWYoYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dI''@;'; put 'put ''ZWlnaHQobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpJiYoYT0hMSksYSYmdi5vZmZzZXRIZWlnaHQhPT12LmNsaWVudEhlaWdodCYmKGNlPWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYSl7Y29uc3QgYmU9aC5nZXRTZXR0aW5nKCJmaXhlZFJv''@;'; put 'put ''d3NCb3R0b20iKSxFZT1oLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JlKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSkscmUtPWQud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLXRoaXMuc3VtQ2VsbFNpemVzKEVlLWJlLEVlKSxyZSs9MSxyZSs9Wn1lbHNlIHJlKz10aGlzLnN1bUNl''@;'; put 'put ''bGxTaXplcyhoLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGwpO3JldHVybiByZSs9Y2UsSDJlKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQpPT09cmUtWiYmWj4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVyVmVydGljYWxseUJ5KFopLHRoaXMuc2V0U2Nyb2xs''@;'; put 'put ''UG9zaXRpb24ocmUpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1''@;'; put 'put ''cm4gT08odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJm''@;'; put 'put ''bG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO2Q9TWF0aC5tYXgodGhpcy5nZXRT''@;'; put 'put ''Y3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0''@;'; put 'put ''e3d0U2V0dGluZ3M6ZH09dGhpcyxoPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsZj1kLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHY9Imhvcml6b250YWwiPT09ZC5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtmP2xvKGgsImVtcHR5Q29sdW1ucyIpOlRpKGgs''@;'; put 'put ''ImVtcHR5Q29sdW1ucyIpO2xldCBNPSExO2lmKCFhJiYhdil7Y29uc3QgRD1kLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFo9dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AhPT1ELHJlPWQuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2lmKChafHwwPT09RCkmJnJlLmxlbmd0aD4wKXtj''@;'; put 'put ''b25zdCBjZT1wbyhoLCJpbm5lckJvcmRlclRvcCIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbHx8MD09PWQuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KFRpKGgsImlubmVyQm9yZGVyVG9wIiksTT0hY2UpOihsbyhoLCJpbm5lckJvcmRl''@;'; put 'put ''clRvcCIpLE09Y2UpfX1yZXR1cm4gTX19Y29uc3QgV2ZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7cmV0dXJuIDA9PT1jPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1jfSxnZXRGaXJzdFZpc2li''@;'; put 'put ''bGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50''@;'; put 'put ''KCk/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9''@;'; put 'put ''LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0''@;'; put 'put ''UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50OigpPT4wfTtUcChXZmUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzQm90dG9tIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFlmZT1XZmU7Y2xhc3MgbUsgZXh0ZW5kcyBtX3tjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEsZCxoKXtzdXBlcihsLGEsZCxoLElwKX19VGwobUssWWZlKSxUbChtSyxjSyk7Y29uc3QgdlFlPW1LO2NsYXNzIHdRZSBleHRlbmRzIFBFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxJcCxkLGgpLGZ1bmN0aW9uIGJRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geVFlKGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIF9RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c0JvdHRvbSIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZFJvd3NCb3R0b20iKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgdlFlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtj''@;'; put 'put ''b25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7YS5zdHlsZS50b3A9IiI7bGV0IGQ9MDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1taW5n''@;'; put 'put ''Q29udGFpbmVyIT09bHx8aCYmInZlcnRpY2FsIj09PWg/KGQ9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKSk6KGQ9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksYS5zdHlsZS5ib3R0b209YCR7ZH1weGApO2NvbnN0IGY9dGhpcy5hZGp1c3RIZWFkZXJC''@;'; put 'put ''b3JkZXJzUG9zaXRpb24oZCk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksZn1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJs''@;'; put 'put ''ZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9ZjAoZCkpLGguc3R5bGUu''@;'; put 'put ''Ym90dG9tPWAke2Z9cHhgfXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7bGV0IGg9ITE7aWYoZD09PWEmJmwhPT1hLnNjcm9sbFkpe2NvbnN0IGY9YS5zY3JvbGxZO2Euc2Ny''@;'; put 'put ''b2xsVG8oTE8oYSksdG9wKSxoPWYhPT1hLnNjcm9sbFl9ZWxzZSBpZihsIT09ZC5zY3JvbGxUb3Ape2NvbnN0IGY9ZC5zY3JvbGxUb3A7ZC5zY3JvbGxUb3A9bCxoPWYhPT1kLnNjcm9sbFRvcH1yZXR1cm4gaH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9s''@;'; put 'put ''bEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0e3d0VGFibGU6ZCxzdHlsZXNIYW5kbGVyOmh9PXRoaXMud290LGY9aC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IHY9bCxNPTA7Zm9yKDt2PGE7KXtjb25zdCBEPWQuZ2V0Um93SGVpZ2h0KHYpO00rPXZvaWQgMD09PUQ/''@;'; put 'put ''ZjpELHYrPTF9cmV0dXJuIE19YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxl''@;'; put 'put ''bWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgWj1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoWi09ZjAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQu''@;'; put 'put ''c2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7Wn1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0aDtsZXQgRD1NdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWlnaHQ9YCR7''@;'; put 'put ''RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgs''@;'; put 'put ''bC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0''@;'; put 'put ''YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2Fs''@;'; put 'put ''Y3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJs''@;'; put 'put ''ZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3Vs''@;'; put 'put ''YXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IHY9MDthJiZmLm9m''@;'; put 'put ''ZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYodj1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1DZWxsU2l6''@;'; put 'put ''ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPXYsdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5y''@;'; put 'put ''b290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE9PKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9v''@;'; put 'put ''dFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFibGUuZ2V0''@;'; put 'put ''VG90YWxIZWlnaHQoKSx2PWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksTT10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Ny''@;'; put 'put ''b2xsUG9zaXRpb24oKS1NK2gsMCksZD52JiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEsaD10aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjApe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxNPXBvKHYsImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRGaXhlZFJv''@;'; put 'put ''d3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KFRpKHYsImlubmVyQm9yZGVyQm90dG9tIiksZj0hTSk6KGxvKHYsImlubmVyQm9yZGVyQm90dG9tIiksZj1N''@;'; put 'put ''KX1yZXR1cm4gZn19Y29uc3QgR2ZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''c3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZFJvdygp''@;'; put 'put ''e2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0''@;'; put 'put ''aWFsbHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkfSxn''@;'; put 'put ''ZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07VHAoR2ZlLCJNSVhJTl9OQU1FIiwi''@;'; put 'put ''Y2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgJGZlPUdmZSxLZmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQo''@;'; put 'put ''KS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVy''@;'; put 'put ''biBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikpfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQo''@;'; put 'put ''KX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O1RwKEtmZSwiTUlYSU5fTkFNRSIsInN0aWNreUNvbHVtbnNTdGFydCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB2Sz1LZmU7Y2xhc3MgYksg''@;'; put 'put ''ZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLCQ3KX19VGwoYkssJGZlKSxUbChiSyx2Syk7Y29uc3QgTVFlPWJLO2NsYXNzIHhRZSBleHRlbmRzIFBFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSwkNyxkLGgpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZh''@;'; put 'put ''ciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBNUWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRP''@;'; put 'put ''dmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdDtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhbC5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9t''@;'; put 'put ''QmluZGluZ3MsZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGY9MDt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8aCYmImhvcml6b250YWwiPT09aD8oZj10aGlzLmdldFNj''@;'; put 'put ''cm9sbFBvc2l0aW9uKCksd0UoZCkpOihmPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSksUE8oZCxgJHtmfXB4YCwiMHB4IikpO2NvbnN0IHY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXpl''@;'; put 'put ''KCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7dGhpcy5pc1J0bCgpJiYobD0tbCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2lmKGg9PT1hJiZsIT09YS5zY3JvbGxYKXtjb25zdCBm''@;'; put 'put ''PWEuc2Nyb2xsWDthLnNjcm9sbFRvKGwsYiQoYSkpLGQ9ZiE9PWEuc2Nyb2xsWH1lbHNlIGlmKGwhPT1oLnNjcm9sbExlZnQpe2NvbnN0IGY9aC5zY3JvbGxMZWZ0O2guc2Nyb2xsTGVmdD1sLGQ9ZiE9PWguc2Nyb2xsTGVmdH1yZXR1cm4gZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJvblNjcm9sbFZlcnRpY2FsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspZis9dGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aCho''@;'; put 'put ''KXx8ZCxoKz0xO3JldHVybiBmfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVs''@;'; put 'put ''ZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8InZlcnRpY2FsIj09PU0pe2xldCBaPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7YS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihaLT1mMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVu''@;'; put 'put ''dC5zY3JvbGxIZWlnaHQpLHYuaGVpZ2h0PWAke1p9cHhgfWVsc2Ugdi5oZWlnaHQ9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS5oZWlnaHQ9di5oZWlnaHQ7Y29uc3QgRD1zdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3Yud2lkdGg9YCR7RH1weGB9YWRqdXN0Um9vdENo''@;'; put 'put ''aWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT1nSyh0aGlzLndvdCksZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS53aWR0aCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHls''@;'; put 'put ''ZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxsLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCwxMCkrZH1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGVbYV09''@;'; put 'put ''YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGVb''@;'; put 'put ''YV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXt0aGlzLmNsb25lLnd0VGFibGUuc3By''@;'; put 'put ''ZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxh''@;'; put 'put ''KXtjb25zdHt3dFNldHRpbmdzOmR9PXRoaXMsaD1kLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWQuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxNPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXIsRD0w''@;'; put 'put ''PT09ZiYmaC5sZW5ndGg+MCYmIXBvKE0ucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpPzE6MDtsZXQgWj10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCkscmU9MDtyZXR1cm4gYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChsKT50aGlzLndvdC53dFZpZXdw''@;'; put 'put ''b3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKGE9ITEpLGEmJk0ub2Zmc2V0V2lkdGghPT1NLmNsaWVudFdpZHRoJiYocmU9ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhaKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksWi09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3''@;'; put 'put ''cG9ydFdpZHRoKCksWis9RCk6Wis9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksbCksWis9cmUsTjJlKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQpPT09Wi1EJiZEPjAmJnRoaXMud290Lnd0T3ZlcmxheXMu''@;'; put 'put ''ZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShEKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFopfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7bGV0IGE9MDtyZXR1cm4hdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpJiZ0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09''@;'; put 'put ''dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93JiYoYT10aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0KSxhfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHkkKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2lu''@;'; put 'put ''ZG93KSl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO3JldHVybiB0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8YSYmImhvcml6b250''@;'; put 'put ''YWwiPT09YXx8KGQ9dGhpcy5pc1J0bCgpP01hdGguYWJzKE1hdGgubWluKHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksMCkpOk1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCks''@;'; put 'put ''ZD50aGlzLndvdC53dFRhYmxlLmdldFRvdGFsV2lkdGgoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpJiYoZD0wKSksZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFy''@;'; put 'put ''ZW50Tm9kZSxoPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPSJ2ZXJ0aWNhbCI9PT1hLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3Y/bG8oZCwiZW1wdHlSb3dz''@;'; put 'put ''Iik6VGkoZCwiZW1wdHlSb3dzIik7bGV0IEQ9ITE7aWYoIU0paWYoZiYmIWgubGVuZ3RoKVRpKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7ZWxzZSBpZighZiYmaC5sZW5ndGgpe2NvbnN0IFo9cG8oZCwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2w/KFRp''@;'; put 'put ''KGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD0hWik6KGxvKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD1aKX1yZXR1cm4gRH19Y2xhc3MgeUsgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEs''@;'; put 'put ''ZCxoLEs3KX19VGwoeUssRmZlKSxUbCh5Syx2Syk7Y29uc3QgRVFlPXlLO2Z1bmN0aW9uIHFmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVFFlKGMpe3ZhciBsPWZ1bmN0aW9uIEFRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9Y2xhc3Mga1FlIGV4dGVuZHMgUEV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxLNyxkLGgpLHFmZSh0aGlzLCJ0b3BPdmVybGF5Iix2b2lkIDApLHFmZSh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLHZvaWQgMCksdGhpcy50b3BPdmVybGF5PWYsdGhpcy5pbmxpbmVT''@;'; put 'put ''dGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgRVFlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhdGhpcy53b3Qud3RU''@;'; put 'put ''YWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTt0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P1BPKGwsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3Zl''@;'; put 'put ''cmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkrInB4IixgJHt0aGlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpfXB4YCk6d0UobCk7bGV0IGE9TXUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBkPXN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJu''@;'; put 'put ''IHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGE9MCksbC5zdHlsZS5oZWlnaHQ9YCR7YX1weGAsbC5zdHlsZS53aWR0aD1gJHtkfXB4YCwhMX19Y2xhc3MgX0sgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLEJtKX19VGwoX0ssWWZlKSxU''@;'; put 'put ''bChfSyx2Syk7Y29uc3QgRFFlPV9LO2NsYXNzIElRZSBleHRlbmRzIFBFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsLGEsQm0sZCxoKSx0aGlzLmJvdHRvbU92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBEUWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpJiZ0aGlzLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d290Omx9PXRoaXM7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCFsLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7aWYoYS5zdHlsZS50b3A9IiIsdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl7Y29uc3QgZj10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0''@;'; put 'put ''KCksdj10aGlzLmJvdHRvbU92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO2Euc3R5bGVbdGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtmfXB4YCxhLnN0eWxlLmJvdHRvbT1gJHt2fXB4YH1lbHNlIHdFKGEpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTtsZXQgZD1NdSh0aGlzLmNs''@;'; put 'put ''b25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGg9c3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoZD0wKSxhLnN0eWxlLmhlaWdodD1gJHtkfXB4YCxhLnN0eWxlLndpZHRoPWAke2h9cHhgLCExfXJlcG9zaXRpb25P''@;'; put 'put ''dmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jr''@;'; put 'put ''c3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1mMChkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9fWZ1bmN0aW9uIGFQKGMsbCxhKXsoZnVuY3Rpb24gUlFlKGMsbCl7aWYobC5oYXMo''@;'; put 'put ''YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3NShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTFFlKGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IE9RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gcTcoYyxsLGEpe3JldHVybiBjLnNldChYZmUoYyxsKSxhKSxhfWZ1bmN0aW9uIEM1KGMsbCl7cmV0dXJuIGMuZ2V0KFhmZShjLGwpKX1mdW5jdGlvbiBYZmUo''@;'; put 'put ''YyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBiXz1uZXcgV2Vha01hcCxv''@;'; put 'put ''UD1uZXcgV2Vha01hcCx5Xz1uZXcgV2Vha01hcCxzUD1uZXcgV2Vha01hcDtjb25zdCBGUWU9Y2xhc3MgUFFle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt3NSh0aGlzLCJ3b3QiLG51bGwpLGFQKHRoaXMsYl8sW10pLHc1KHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLHc1KHRoaXMsImJvdHRv''@;'; put 'put ''bU92ZXJsYXkiLG51bGwpLHc1KHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsbnVsbCksdzUodGhpcywidG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSx3NSh0aGlzLCJib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLHc1KHRoaXMsImJyb3dzZXJMaW5lSGVp''@;'; put 'put ''Z2h0Iix2b2lkIDApLHc1KHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLGFQKHRoaXMsb1AsITEpLGFQKHRoaXMseV8sMCksYVAodGhpcyxzUCxudWxsKSx3NSh0aGlzLCJyZXNpemVPYnNlcnZlciIsbmV3IFJlc2l6ZU9ic2VydmVyKHJlPT57eEUoKCk9PnshQXJyYXkuaXNBcnJheShyZSl8fCFy''@;'; put 'put ''ZS5sZW5ndGh8fChxNyh5Xyx0aGlzLEM1KHlfLHRoaXMpKzEpLDEwMD09PUM1KHlfLHRoaXMpJiYoaWwoIlRoZSBSZXNpemVPYnNlcnZlciBjYWxsYmFjayB3YXMgZmlyZWQgdG9vIG1hbnkgdGltZXMgaW4gZGlyZWN0IHN1Y2Nlc3Npb24uXG5UaGlzIG1heSBiZSBkdWUgdG8gYW4gaW5maW5p''@;'; put 'put ''dGUgbG9vcCBjYXVzZWQgYnkgc2V0dGluZyBhIGR5bmFtaWMgaGVpZ2h0L3dpZHRoIChmb3IgZXhhbXBsZSwgd2l0aCB0aGUgYGR2aGAgdW5pdHMpIHRvIGEgSGFuZHNvbnRhYmxlIGNvbnRhaW5lcidzIHBhcmVudC4gXG5UaGUgb2JzZXJ2ZXIgd2lsbCBiZSBkaXNjb25uZWN0ZWQuIiksdGhp''@;'; put 'put ''cy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCkpLG51bGwhPT1DNShzUCx0aGlzKSYmY2xlYXJUaW1lb3V0KEM1KHNQLHRoaXMpKSxxNyhzUCx0aGlzLHNldFRpbWVvdXQoKCk9PntxNyh5Xyx0aGlzLDApfSwxMDApKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWluZXJF''@;'; put 'put ''bGVtZW50UmVzaXplIikpfSl9KSksdGhpcy53b3Q9bCx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0VGFibGU9djtjb25zdHtyb290RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5pbnN0''@;'; put 'put ''YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1mLHRoaXMuc2Nyb2xsYmFyU2l6ZT1mMChNKTtjb25zdCBaPSJoaWRkZW4iPT09RC5nZXRDb21wdXRlZFN0eWxlKHYud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMuc2Nyb2xs''@;'; put 'put ''YWJsZUVsZW1lbnQ9Wj92LmhvbGRlcjpiRSh2LlRBQkxFKSx0aGlzLmluaXRPdmVybGF5cygpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEs''@;'; put 'put ''dGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9RC5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9RC5zY3JvbGxZfWdldE92ZXJsYXlzKCl7bGV0IGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPVsuLi5DNShiXyx0aGlzKV07cmV0dXJuIGwmJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVudDphfT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWlnaHQsMTApLGY9MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3NlckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlzLndvdCx0''@;'; put 'put ''aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5PW5ldyBnUWUoLi4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyB3UWUoLi4ubCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IHhRZSguLi5sKSx0aGlzLnRvcElubGlu''@;'; put 'put ''ZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcga1FlKC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgSVFlKC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''KSxxNyhiXyx0aGlzLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSl9YmVmb3JlRHJhdygpe3E3KG9QLHRo''@;'; put 'put ''aXMsQzUoYl8sdGhpcykucmVkdWNlKChsLGEpPT5hLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpfHxsLCExKSksQzUoYl8sdGhpcykuZm9yRWFjaChsPT5sLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImJlZm9yZSIpKX1hZnRlckRyYXcoKXt0aGlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCks''@;'; put 'put ''QzUoYl8sdGhpcykuZm9yRWFjaChsPT57Y29uc3QgYT1sLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpO2wudXBkYXRlU3RhdGVPZlJlbmRlcmluZygiYWZ0ZXIiKSxhJiYhbC5uZWVkRnVsbFJlbmRlciYmbC5yZXNldCgpfSl9cmVmcmVzaEFsbCgpe2lmKHRoaXMud290LmRyYXduKXtpZigh''@;'; put 'put ''dGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiB2b2lkIHRoaXMuZGVzdHJveSgpO3RoaXMud290LmRyYXcoITApLHRoaXMudmVydGljYWxTY3JvbGxpbmcmJnRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nJiZ0aGlz''@;'; put 'put ''LnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJsZVNjcm9s''@;'; put 'put ''bGFibGVFbGVtZW50OmR9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6aH09dGhpcy5pbmxpbmVTdGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsY2U9PnRoaXMub25LZXlE''@;'; put 'put ''b3duKGNlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5dXAiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+dGhpcy5vbktleVVwKCkp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwic2Nyb2xsIixjZT0+dGhpcy5vblRhYmxlU2Nyb2xsKGNlKSx7cGFzc2l2ZTohMH0pLGQhPT1oJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsInNjcm9sbCIsY2U9PnRoaXMub25UYWJsZVNjcm9sbChj''@;'; put 'put ''ZSkse3Bhc3NpdmU6ITB9KTtjb25zdCBmPWEuZGV2aWNlUGl4ZWxSYXRpbyYmYS5kZXZpY2VQaXhlbFJhdGlvPjEsdj10aGlzLnNjcm9sbGFibGVFbGVtZW50PT09YSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxEPXtwYXNzaXZlOnZ9O2xldCByZTsoTXx8''@;'; put 'put ''Znx8IUkkKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LCJ3aGVlbCIsY2U9PnRoaXMub25DbG9uZVdoZWVsKGNlLE0pLEQpLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRP''@;'; put 'put ''dmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XS5mb3JFYWNoKGNlPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihjZS5jbG9uZS53dFRhYmxlLmhvbGRlciwid2hlZWwiLGJlPT50aGlz''@;'; put 'put ''Lm9uQ2xvbmVXaGVlbChiZSxNKSxEKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwicmVzaXplIiwoKT0+e3hFKCgpPT57Y2xlYXJUaW1lb3V0KHJlKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25XaW5kb3dSZXNpemUiKSxyZT1zZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''cTcoeV8sdGhpcywwKX0sMjAwKX0pfSksdnx8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudEVsZW1lbnQpfW9uVGFibGVTY3JvbGwobCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZD10aGlzLmlubGluZVN0''@;'; put 'put ''YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxoPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPWwudGFyZ2V0O3RoaXMua2V5UHJlc3NlZCYmKGghPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGgpfHxkIT09YSYmZiE9PWEmJiFs''@;'; put 'put ''LnRhcmdldC5jb250YWlucyhkKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhsKX1vbkNsb25lV2hlZWwobCxhKXtjb25zdHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPXRoaXMu''@;'; put 'put ''dG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx2PWwudGFyZ2V0LE09ZiE9PWQmJnYhPT1kJiYhdi5jb250YWlucyhmKSxEPWghPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoaCk7aWYodGhpcy5rZXlQcmVzc2VkJiYoTXx8RCl8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1k''@;'; put 'put ''KXJldHVybjtjb25zdCBaPXRoaXMudHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpOyhhfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50IT09ZCYmWikmJmwucHJldmVudERlZmF1bHQoKX1vbktleURvd24obCl7dGhpcy5rZXlQcmVzc2VkPXVfKGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1df''@;'; put 'put ''UklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25LZXlVcCgpe3RoaXMua2V5UHJlc3NlZD0hMX10cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0xKmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVl''@;'; put 'put ''bERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUmJihkKz1kKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVydGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxm''@;'; put 'put ''fXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJl''@;'; put 'put ''dHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcixhPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyO2xldCBkPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Ny''@;'; put 'put ''b2xsVG9wO2lmKHRoaXMud290Lnd0Vmlld3BvcnQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKGQ9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxYKSx0aGlzLndvdC53dFZpZXdwb3J0LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoaD10aGlzLnNj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50LnNjcm9sbFkpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz10aGlzLmxhc3RTY3JvbGxYIT09ZCx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFkhPT1oLHRoaXMubGFzdFNjcm9sbFg9ZCx0aGlzLmxhc3RTY3JvbGxZPWgsdGhpcy5ob3Jpem9u''@;'; put 'put ''dGFsU2Nyb2xsaW5nKXtsLnNjcm9sbExlZnQ9ZDtjb25zdCBmPXRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlcj90aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI6bnVsbDtmJiYoZi5zY3JvbGxMZWZ0PWQpfXRoaXMudmVydGljYWxTY3JvbGxpbmcmJihhLnNj''@;'; put 'put ''cm9sbFRvcD1oKSx0aGlzLnJlZnJlc2hBbGwoKX1zeW5jU2Nyb2xsV2l0aE1hc3Rlcigpe2lmKCFDNShvUCx0aGlzKSlyZXR1cm47Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQse3Njcm9sbExlZnQ6YSxzY3JvbGxUb3A6ZH09bDt0aGlzLnRvcE92''@;'; put 'put ''ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdD1hKSx0''@;'; put 'put ''aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1kKSxxNyhvUCx0aGlzLCExKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xl''@;'; put 'put ''YXJFdmVudHMoITApLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRoaXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlzLnNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2Rl''@;'; put 'put ''KS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOmJFKGwuVEFCTEUpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKX1kZXN0cm95KCl7dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMudG9wT3ZlcmxheS5k''@;'; put 'put ''ZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXku''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVkPSEwfXJlZnJlc2goKXts''@;'; put 'put ''ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpJiZ0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LnJl''@;'; put 'put ''ZnJlc2gobCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmJvdHRvbUlubGlu''@;'; put 'put ''ZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCl9dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpe2NvbnN0IGw9dGhpcy53dFRhYmxlLnNwcmVhZGVy''@;'; put 'put ''LGE9bC5jbGllbnRXaWR0aCxkPWwuY2xpZW50SGVpZ2h0LGg9YSE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aHx8ZCE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ7cmV0dXJuIGgmJih0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGg9YSx0aGlzLnNwcmVhZGVyTGFzdFNpemUu''@;'; put 'put ''aGVpZ2h0PWQpLGh9YWRqdXN0RWxlbWVudHNTaXplKCl7Y29uc3R7d3RWaWV3cG9ydDpsfT10aGlzLndvdCx7d3RUYWJsZTphfT10aGlzLHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLnNjcm9sbGFibGVFbGVtZW50PT09ZCxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJ0b3RhbENvbHVtbnMiKSx2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPWwuZ2V0Um93SGVhZGVyV2lkdGgoKSxaPWwuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCkrdGhpcy50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpKzEscmU9TSt0aGlzLmlubGlu''@;'; put 'put ''ZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxmKSxiZT1hLmhpZGVyLnN0eWxlLHFlPSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPk1hdGgubWF4KDAsWi1hLmhvbGRlci5jbGllbnRIZWlnaHQpKSgpPzE6MCxydD0oKCk9PiFoJiZ0aGlzLnNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50LnNjcm9sbExlZnQ+TWF0aC5tYXgoMCxyZS1hLmhvbGRlci5jbGllbnRXaWR0aCkpKCk/MTowO2JlLndpZHRoPWAke3JlK3J0fXB4YCxiZS5oZWlnaHQ9YCR7WitxZX1weGAsdGhpcy50b3BPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5''@;'; put 'put ''LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKX1leHBhbmRIaWRlclZlcnRpY2FsbHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQoYS5oaWRlci5zdHlsZS5oZWlnaHQs''@;'; put 'put ''MTApK2x9cHhgfWV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkobCl7Y29uc3R7d3RUYWJsZTphfT10aGlzO2EuaGlkZXIuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQoYS5oaWRlci5zdHlsZS53aWR0aCwxMCkrbH1weGB9YXBwbHlUb0RPTSgpe3RoaXMud3RUYWJsZS5pc1Zpc2libGUoKSYmKHRo''@;'; put 'put ''aXMudG9wT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKSl9Z2V0UGFyZW50T3ZlcmxheShsKXtpZighbClyZXR1cm4gbnVsbDtsZXQg''@;'; put 'put ''ZD1udWxsO3JldHVybiBZbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0saD0+e2gmJmguY2xvbmUmJmgu''@;'; put 'put ''Y2xvbmUud3RUYWJsZS5UQUJMRS5jb250YWlucyhsKSYmKGQ9aC5jbG9uZSl9KSxkfXN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuVEFCTEU7WW4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJs''@;'; put 'put ''YXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGQ9PntkJiYoZC5jbG9uZS53dFRhYmxlLlRBQkxFLmNsYXNzTmFtZT1sLmNsYXNzTmFtZSl9KX19O2Z1bmN0aW9uIEpmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gSFFlKGMpe3ZhciBsPWZ1bmN0aW9uIE5RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVlFle2NvbnN0cnVjdG9yKGwpe0pmZSh0aGlzLCJzZXR0aW5ncyIse30pLEpmZSh0aGlzLCJkZWZhdWx0cyIsT2JqZWN0''@;'; put 'put ''LmZyZWV6ZSh0aGlzLmdldERlZmF1bHRzKCkpKSxYbyh0aGlzLmRlZmF1bHRzLChhLGQpPT57aWYodm9pZCAwIT09bFtkXSl0aGlzLnNldHRpbmdzW2RdPWxbZF07ZWxzZXtpZih2b2lkIDA9PT1hKXRocm93IG5ldyBFcnJvcihgQSByZXF1aXJlZCBzZXR0aW5nICIke2R9IiB3YXMgbm90IHBy''@;'; put 'put ''b3ZpZGVkYCk7dGhpcy5zZXR0aW5nc1tkXT1hfX0pfWdldERlZmF1bHRzKCl7cmV0dXJue2ZhY2FkZTp2b2lkIDAsdGFibGU6dm9pZCAwLGlzRGF0YVZpZXdJbnN0YW5jZTohMCxleHRlcm5hbFJvd0NhbGN1bGF0b3I6ITEsY3VycmVudFJvd0NsYXNzTmFtZTpudWxsLGN1cnJlbnRDb2x1bW5D''@;'; put 'put ''bGFzc05hbWU6bnVsbCxwcmV2ZW50T3ZlcmZsb3c6KCk9PiExLHByZXZlbnRXaGVlbDohMSxkYXRhOnZvaWQgMCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c1RvcDowLGZpeGVkUm93c0JvdHRvbTowLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPjB8fHRoaXMuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIik+MHx8dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVu''@;'; put 'put ''Z3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKT4wLG1pblNwYXJlUm93czowLHJvd0hlYWRlcnM6KCk9PltdLGNvbHVtbkhlYWRlcnM6KCk9PltdLHRvdGFsUm93czp2b2lkIDAsdG90YWxDb2x1bW5zOnZvaWQgMCxj''@;'; put 'put ''ZWxsUmVuZGVyZXI6KGwsYSxkKT0+e1BtKGQsdGhpcy5nZXRTZXR0aW5nKCJkYXRhIixsLGEpPz8iIil9LGNvbHVtbldpZHRoKCl7fSxyb3dIZWlnaHQoKXt9LHJvd0hlaWdodEJ5T3ZlcmxheU5hbWUoKXt9LGRlZmF1bHRDb2x1bW5XaWR0aDo1MCxzZWxlY3Rpb25zOm51bGwsaGlkZUJvcmRl''@;'; put 'put ''ck9uTW91c2VEb3duT3ZlcjohMSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDpudWxs''@;'; put 'put ''LG9uQ2VsbE1vdXNlRG93bjpudWxsLG9uQ2VsbENvbnRleHRNZW51Om51bGwsb25DZWxsTW91c2VPdmVyOm51bGwsb25DZWxsTW91c2VPdXQ6bnVsbCxvbkNlbGxNb3VzZVVwOm51bGwsb25DZWxsRGJsQ2xpY2s6bnVsbCxvbkNlbGxDb3JuZXJNb3VzZURvd246bnVsbCxvbkNlbGxDb3JuZXJE''@;'; put 'put ''YmxDbGljazpudWxsLGJlZm9yZURyYXc6bnVsbCxvbkRyYXc6bnVsbCxvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOm51bGwsb25BZnRlckRyYXdTZWxlY3Rpb246bnVsbCxvbkJlZm9yZURyYXdCb3JkZXJzOm51bGwsb25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseTpsPT5s''@;'; put 'put ''LG9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5Omw9Pmwsb25TY3JvbGxIb3Jpem9udGFsbHk6bnVsbCxvblNjcm9sbFZlcnRpY2FsbHk6bnVsbCxvbkJlZm9yZVRvdWNoU2Nyb2xsOm51bGwsb25BZnRlck1vbWVudHVtU2Nyb2xsOm51bGwsb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpu''@;'; put 'put ''dWxsLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczpudWxsLG9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudDpudWxsLG9uTW9kaWZ5R2V0Q29vcmRzOm51bGwsb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6bD0+bCxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjpsPT5sLG9uV2luZG93''@;'; put 'put ''UmVzaXplOm51bGwsb25Db250YWluZXJFbGVtZW50UmVzaXplOm51bGwscmVuZGVyQWxsQ29sdW1uczohMSxyZW5kZXJBbGxSb3dzOiExLGdyb3VwczohMSxyb3dIZWFkZXJXaWR0aDpudWxsLGNvbHVtbkhlYWRlckhlaWdodDpudWxsLGhlYWRlckNsYXNzTmFtZTpudWxsLHJ0bE1vZGU6ITEs''@;'; put 'put ''YXJpYVRhZ3M6ITB9fXVwZGF0ZShsLGEpe3JldHVybiB2b2lkIDA9PT1hP1hvKGwsKGQsaCk9Pnt0aGlzLnNldHRpbmdzW2hdPWR9KTp0aGlzLnNldHRpbmdzW2xdPWEsdGhpc31nZXRTZXR0aW5nKGwsYSxkLGgsZil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3NbbF0/''@;'; put 'put ''dGhpcy5zZXR0aW5nc1tsXShhLGQsaCxmKTp2b2lkIDAhPT1hJiZBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3NbbF0pP3RoaXMuc2V0dGluZ3NbbF1bYV06dGhpcy5zZXR0aW5nc1tsXX1nZXRTZXR0aW5nUHVyZShsKXtyZXR1cm4gdGhpcy5zZXR0aW5nc1tsXX1oYXMobCl7cmV0dXJuISF0''@;'; put 'put ''aGlzLnNldHRpbmdzW2xdfX1jbGFzcyB3SyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsIm1hc3RlciIpfWFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKXtjb25zdCBsPWFfKHRoaXMud3RSb290RWxlbWVudCkse3Jvb3RXaW5kb3c6YX09''@;'; put 'put ''dGhpcy5kb21CaW5kaW5ncztpZihsPT09YSl0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iil8fCh0aGlzLmhvbGRlci5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy53dFJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIik7ZWxzZXtjb25z''@;'; put 'put ''dCBkPWwucGFyZW50RWxlbWVudCxoPXlFKGwsImhlaWdodCIsYSksZj15RShsLCJvdmVyZmxvdyIsYSksdj10aGlzLmhvbGRlci5zdHlsZSx7c2Nyb2xsV2lkdGg6TSxzY3JvbGxIZWlnaHQ6RH09bDtsZXQgWj1sLm9mZnNldFdpZHRoLHJlPWwub2Zmc2V0SGVpZ2h0O2lmKGQmJlsiYXV0byIs''@;'; put 'put ''ImhpZGRlbiIsInNjcm9sbCJdLmluY2x1ZGVzKGYpKXtjb25zdCBiZT1sLmNsb25lTm9kZSghMSk7YmUuc3R5bGUub3ZlcmZsb3c9ImF1dG8iLGJlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5uZXh0RWxlbWVudFNpYmxpbmc/ZC5pbnNlcnRCZWZvcmUoYmUsbC5uZXh0RWxlbWVudFNp''@;'; put 'put ''YmxpbmcpOmQuYXBwZW5kQ2hpbGQoYmUpO2NvbnN0IEVlPXBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShiZSkuaGVpZ2h0LDEwKTtkLnJlbW92ZUNoaWxkKGJlKSwwPT09RWUmJihyZT0wKX1yZT1NYXRoLm1pbihyZSxEKSx2LmhlaWdodD0iYXV0byI9PT1oPyJhdXRvIjpgJHtyZX1weGAs''@;'; put 'put ''Wj1NYXRoLm1pbihaLE0pLHYud2lkdGg9YCR7Wn1weGAsdi5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PSJhdXRvIj09PXYuaGVpZ2h0fHxyZT4wLHRoaXMuaGFzVGFibGVXaWR0aD1aPjB9dGhpcy5pc1RhYmxlVmlzaWJsZT16Nyh0aGlzLlRBQkxFKX1tYXJrT3ZlcnNpemVkQ29s''@;'; put 'put ''dW1uSGVhZGVycygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZD0ibWFzdGVyIixmPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtpZihmJiYhYS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2Vk''@;'; put 'put ''W2RdKXtjb25zdCBNPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxEPXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IFo9MDtaPGY7WisrKWZvcihsZXQgcmU9LTEqTTtyZTxEO3JlKyspdGhpcy5tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIocmUpO2Eu''@;'; put 'put ''aGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXT0hMH19fVRsKHdLLCRmZSksVGwod0ssY0spO2NvbnN0IEJRZT13SztmdW5jdGlvbiBGRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24galFlKGMpe3ZhciBsPWZ1bmN0aW9uIHpRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVVFle2NvbnN0cnVjdG9yKCl7RkUodGhpcywiY291bnQiLDApLEZFKHRoaXMsInN0YXJ0Um93IiwwKSxGRSh0aGlzLCJlbmRSb3ciLDApLEZFKHRoaXMsInN0YXJ0UG9zaXRpb24iLDApLEZFKHRoaXMsImlzVmlzaWJsZUlu''@;'; put 'put ''VHJpbW1pbmdDb250YWluZXIiLCEwKX1pbml0aWFsaXplKGwpe2xldHt0b3RhbFJvd3M6YX09bDt0aGlzLmNvdW50PWEsdGhpcy5lbmRSb3c9dGhpcy5jb3VudC0xfXByb2Nlc3MoKXt9ZmluYWxpemUoKXt9fWZ1bmN0aW9uIEhFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaUWUoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gV1FlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY315KDM5MDkyKSx5KDE0MzYwKTtjbGFzcyBRZmV7Y29uc3RydWN0b3IoKXtIRSh0aGlzLCJjb3VudCIsMCksSEUodGhpcywic3RhcnRSb3ciLG51bGwpLEhF''@;'; put 'put ''KHRoaXMsImVuZFJvdyIsbnVsbCksSEUodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksSEUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZEhlaWdodDpkLHplcm9CYXNlZFNjcm9s''@;'; put 'put ''bE9mZnNldDpoLGlubmVyVmlld3BvcnRIZWlnaHQ6Zn09YTtkPD1oJiYodGhpcy5zdGFydFJvdz1sKSxkPj1oJiZkPD1mJiZudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9bCksdGhpcy5lbmRSb3c9bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2''@;'; put 'put ''aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkQscm93SGVpZ2h0Olp9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFy''@;'; put 'put ''dFJvdz4wOyl7Y29uc3QgY2U9RFt0aGlzLmVuZFJvd10rWi1EW3RoaXMuc3RhcnRSb3ctMV07aWYodGhpcy5zdGFydFJvdy09MSxjZT49aC1mKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9RFt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9PWE/YTpudWxsLHRoaXMuaXNWaXNp''@;'; put 'put ''YmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGQraC1mPDB8fGQ+RC5hdCgtMSkrWiksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIGUzZShjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gWVFlKGMpe3ZhciBsPWZ1bmN0aW9uIEdRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJFFlIGV4dGVuZHMgUWZle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxlM2Uo''@;'; put 'put ''dGhpcywicm93U3RhcnRPZmZzZXQiLDApLGUzZSh0aGlzLCJyb3dFbmRPZmZzZXQiLDApfWZpbmFsaXplKGwpe3ZhciBhO3N1cGVyLmZpbmFsaXplKGwpO2NvbnN0e292ZXJyaWRlRm46ZCx0b3RhbFJvd3M6aCxzdGFydFBvc2l0aW9uczpmfT1sO2lmKG51bGwhPT10aGlzLnN0YXJ0Um93JiYi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgZCl7Y29uc3Qgdj10aGlzLnN0YXJ0Um93LE09dGhpcy5lbmRSb3c7ZCh0aGlzKSx0aGlzLnJvd1N0YXJ0T2Zmc2V0PXYtdGhpcy5zdGFydFJvdyx0aGlzLnJvd0VuZE9mZnNldD10aGlzLmVuZFJvdy1NfXRoaXMuc3RhcnRSb3c8MCYmKHRoaXMuc3RhcnRSb3c9''@;'; put 'put ''MCksdGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1mW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsaDx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PWgtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9''@;'; put 'put ''fWZ1bmN0aW9uIE5FKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLUWUoYyl7dmFyIGw9ZnVuY3Rpb24gcVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBYUWV7Y29uc3RydWN0b3IoKXtORSh0aGlzLCJjb3VudCIs''@;'; put 'put ''MCksTkUodGhpcywic3RhcnRSb3ciLG51bGwpLE5FKHRoaXMsImVuZFJvdyIsbnVsbCksTkUodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksTkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2Fs''@;'; put 'put ''Y3VsYXRlZEhlaWdodDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLGlubmVyVmlld3BvcnRIZWlnaHQ6Zixyb3dIZWlnaHQ6dn09YTtkPj1oJiZkK3Y8PWYmJihudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9bCksdGhpcy5lbmRSb3c9bCl9ZmluYWxpemUobCl7dmFyIGE7''@;'; put 'put ''Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRIZWlnaHQ6aCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmYsdG90YWxSb3dzOnYsbmVlZFJldmVyc2U6TSxzdGFydFBvc2l0aW9uczpELHJvd0hlaWdodDpafT1sO2lmKHRoaXMuZW5kUm93PT09di0xJiZNKWZvcih0aGlzLnN0YXJ0Um93''@;'; put 'put ''PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IGJlPURbdGhpcy5lbmRSb3ddK1otRFt0aGlzLnN0YXJ0Um93LTFdO2lmKGJlPD1oLWYmJih0aGlzLnN0YXJ0Um93LT0xKSxiZT49aC1mKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9RFt0aGlzLnN0YXJ0Um93''@;'; put 'put ''XSkmJnZvaWQgMCE9PWE/YTpudWxsO2NvbnN0IHJlPWQraC1mLGNlPW51bGw9PT10aGlzLnN0YXJ0Um93PzA6bC5nZXRSb3dIZWlnaHQodGhpcy5zdGFydFJvdyk7dGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEocmU8Y2V8fGQ+RC5hdCgtMSkpLHY8dGhpcy5lbmRSb3cmJih0''@;'; put 'put ''aGlzLmVuZFJvdz12LTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiYodGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfX1mdW5jdGlvbiBWRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSlFlKGMpe3ZhciBsPWZ1bmN0aW9uIFFRZShjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZWV0e2NvbnN0cnVjdG9yKCl7VkUodGhpcywiY291bnQiLDApLFZFKHRoaXMsInN0YXJ0Q29sdW1uIiwwKSxWRSh0aGlzLCJlbmRDb2x1bW4iLDApLFZFKHRoaXMsInN0YXJ0UG9zaXRpb24iLDApLFZFKHRoaXMs''@;'; put 'put ''ImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCEwKX1pbml0aWFsaXplKGwpe2xldHt0b3RhbENvbHVtbnM6YX09bDt0aGlzLmNvdW50PWEsdGhpcy5lbmRDb2x1bW49dGhpcy5jb3VudC0xfXByb2Nlc3MoKXt9ZmluYWxpemUoKXt9fWZ1bmN0aW9uIEJFKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiB0ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gbmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB0M2V7Y29uc3RydWN0b3IoKXtCRSh0aGlzLCJjb3VudCIsMCksQkUodGhpcywic3RhcnRDb2x1bW4iLG51bGwp''@;'; put 'put ''LEJFKHRoaXMsImVuZENvbHVtbiIsbnVsbCksQkUodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksQkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOmQsemVyb0Jhc2Vk''@;'; put 'put ''U2Nyb2xsT2Zmc2V0Omgsdmlld3BvcnRXaWR0aDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Q29sdW1uPWwpLGQ+PWgmJmQ8PWgrKGg+MD9mKzE6ZikmJm51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWx9ZmluYWxpemUobCl7dmFyIGE7''@;'; put 'put ''Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRXaWR0aDpoLGlubGluZVN0YXJ0T2Zmc2V0OmYsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OnYsdG90YWxDb2x1bW5zOk0sbmVlZFJldmVyc2U6RCxzdGFydFBvc2l0aW9uczpaLGNvbHVtbldpZHRoOnJlfT1sO2lmKHRoaXMuZW5kQ29sdW1uPT09''@;'; put 'put ''TS0xJiZEKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IEVlPVpbdGhpcy5lbmRDb2x1bW5dK3JlLVpbdGhpcy5zdGFydENvbHVtbi0xXTtpZih0aGlzLnN0YXJ0Q29sdW1uLT0xLEVlPmgpYnJlYWt9dGhpcy5zdGFydFBvc2l0''@;'; put 'put ''aW9uPW51bGwhPT0oYT1aW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLSh2PjA/aCsxOmgpPC0xKmZ8fGQ+Wi5hdCgtMSkrcmV8fC0xKmQtaD4wKSxNPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRD''@;'; put 'put ''b2x1bW49TS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rpb24gbjNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiByZXQoYyl7dmFyIGw9ZnVuY3Rpb24gaWV0KGMsbCl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBhZXQgZXh0ZW5kcyB0M2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLG4zZSh0aGlzLCJjb2x1bW5TdGFydE9mZnNldCIsMCksbjNlKHRoaXMsImNvbHVtbkVuZE9mZnNldCIsMCl9Zmlu''@;'; put 'put ''YWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsQ29sdW1uczpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRDb2x1bW4sTT10''@;'; put 'put ''aGlzLmVuZENvbHVtbjtkKHRoaXMpLHRoaXMuY29sdW1uU3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Q29sdW1uLHRoaXMuY29sdW1uRW5kT2Zmc2V0PXRoaXMuZW5kQ29sdW1uLU19dGhpcy5zdGFydENvbHVtbjwwJiYodGhpcy5zdGFydENvbHVtbj0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVs''@;'; put 'put ''bCE9PShhPWZbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRDb2x1bW49aC0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rp''@;'; put 'put ''b24gakUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9ldChjKXt2YXIgbD1mdW5jdGlvbiBzZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs''@;'; put 'put ''dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGNldHtjb25zdHJ1Y3Rvcigpe2pFKHRoaXMsImNvdW50IiwwKSxqRSh0''@;'; put 'put ''aGlzLCJzdGFydENvbHVtbiIsbnVsbCksakUodGhpcywiZW5kQ29sdW1uIixudWxsKSxqRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxqRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxj''@;'; put 'put ''dWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmYsY29sdW1uV2lkdGg6dn09YTtkPj1oJiZkK3Y8PWgrKGg+MD9mKzE6ZikmJihudWxsPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5zdGFydENvbHVtbj1sKSx0aGlzLmVuZENvbHVtbj1sKX1maW5h''@;'; put 'put ''bGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlosY29sdW1uV2lkdGg6cmV9PWw7aWYodGhp''@;'; put 'put ''cy5lbmRDb2x1bW49PT1NLTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgQmU9Wlt0aGlzLmVuZENvbHVtbl0rcmUtWlt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKEJlPD1oJiYodGhpcy5zdGFydENvbHVtbi09MSksQmU+''@;'; put 'put ''PWgpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1aW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgYmU9ZCtoLSh2PjA/aCsxOmgpLEVlPW51bGw9PT10aGlzLnN0YXJ0Q29sdW1uPzA6bC5nZXRDb2x1bW5XaWR0aCh0aGlzLnN0YXJ0Q29sdW1u''@;'; put 'put ''KTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShiZTwtMSpmfHxkPlouYXQoLTEpfHwtMSpkLWg+LTEqRWUpLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10''@;'; put 'put ''aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiByM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHVldChjKXt2YXIgbD1mdW5jdGlvbiBkZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGkzZXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsKXtyM2UodGhpcywiY2FsY3VsYXRpb25UeXBlcyIsW10pLHIzZSh0aGlzLCJjYWxjdWxhdGlvblJlc3VsdHMiLG5ldyBNYXApLHRoaXMuY2FsY3VsYXRpb25UeXBlcz1sfV9pbml0aWFsaXplKGwpe3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGE9PntsZXRbZCxoXT1hO3RoaXMu''@;'; put 'put ''Y2FsY3VsYXRpb25SZXN1bHRzLnNldChkLGgpLGguaW5pdGlhbGl6ZShsKX0pfV9wcm9jZXNzKGwsYSl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goZD0+e2xldFssaF09ZDtyZXR1cm4gaC5wcm9jZXNzKGwsYSl9KX1fZmluYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZv''@;'; put 'put ''ckVhY2goYT0+e2xldFssZF09YTtyZXR1cm4gZC5maW5hbGl6ZShsKX0pfWdldFJlc3VsdHNGb3IobCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRpb25SZXN1bHRzLmdldChsKX19ZnVuY3Rpb24gVzIoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhldChjKXt2YXIgbD1mdW5jdGlvbiBmZXQoYyxs''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs''@;'; put 'put ''dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHBldCBleHRlbmRzIGkzZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2FsY3VsYXRpb25UeXBlczphLHZpZXdwb3J0SGVpZ2h0OmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxSb3dzOmYsZGVm''@;'; put 'put ''YXVsdFJvd0hlaWdodDp2LHJvd0hlaWdodEZuOk0sb3ZlcnJpZGVGbjpELGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Wn09bDtzdXBlcihhKSxXMih0aGlzLCJ2aWV3cG9ydEhlaWdodCIsMCksVzIodGhpcywic2Nyb2xsT2Zmc2V0IiwwKSxXMih0aGlzLCJ6ZXJvQmFzZWRTY3JvbGxPZmZz''@;'; put 'put ''ZXQiLDApLFcyKHRoaXMsInRvdGFsUm93cyIsMCksVzIodGhpcywicm93SGVpZ2h0Rm4iLG51bGwpLFcyKHRoaXMsInJvd0hlaWdodCIsMCksVzIodGhpcywib3ZlcnJpZGVGbiIsbnVsbCksVzIodGhpcywiaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCIsMCksVzIodGhpcywiaW5uZXJWaWV3''@;'; put 'put ''cG9ydEhlaWdodCIsMCksVzIodGhpcywidG90YWxDYWxjdWxhdGVkSGVpZ2h0IiwwKSxXMih0aGlzLCJzdGFydFBvc2l0aW9ucyIsW10pLFcyKHRoaXMsIm5lZWRSZXZlcnNlIiwhMCksdGhpcy5kZWZhdWx0SGVpZ2h0PXYsdGhpcy52aWV3cG9ydEhlaWdodD1kLHRoaXMuc2Nyb2xsT2Zmc2V0''@;'; put 'put ''PWgsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9TWF0aC5tYXgoaCwwKSx0aGlzLnRvdGFsUm93cz1mLHRoaXMucm93SGVpZ2h0Rm49TSx0aGlzLm92ZXJyaWRlRm49RCx0aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ9Wj8/MCx0aGlzLmlubmVyVmlld3BvcnRIZWlnaHQ9dGhpcy56''@;'; put 'put ''ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydEhlaWdodC10aGlzLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbFJvd3M7bCsrKWlmKHRoaXMu''@;'; put 'put ''cm93SGVpZ2h0PXRoaXMuZ2V0Um93SGVpZ2h0KGwpLHRoaXMuX3Byb2Nlc3MobCx0aGlzKSx0aGlzLnN0YXJ0UG9zaXRpb25zLnB1c2godGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQpLHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Kz10aGlzLnJvd0hlaWdodCx0aGlzLnRvdGFsQ2FsY3Vs''@;'; put 'put ''YXRlZEhlaWdodD49dGhpcy5pbm5lclZpZXdwb3J0SGVpZ2h0KXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMucm93SGVpZ2h0Rm4obCk7cmV0dXJuIGlzTmFOKGEpP3RoaXMuZGVmYXVsdEhlaWdodDph''@;'; put 'put ''fX1mdW5jdGlvbiBhMyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZ2V0KGMpe3ZhciBsPWZ1bmN0aW9uIG1ldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgX189NTA7Y2xhc3MgdmV0IGV4dGVuZHMgaTNle2NvbnN0''@;'; put 'put ''cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRXaWR0aDpkLHNjcm9sbE9mZnNldDpoLHRvdGFsQ29sdW1uczpmLGNvbHVtbldpZHRoRm46dixvdmVycmlkZUZuOk0saW5saW5lU3RhcnRPZmZzZXQ6RH09bDtzdXBlcihhKSxhMyh0aGlzLCJ2aWV3cG9ydFdpZHRoIiww''@;'; put 'put ''KSxhMyh0aGlzLCJzY3JvbGxPZmZzZXQiLDApLGEzKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksYTModGhpcywidG90YWxDb2x1bW5zIiwwKSxhMyh0aGlzLCJjb2x1bW5XaWR0aEZuIixudWxsKSxhMyh0aGlzLCJjb2x1bW5XaWR0aCIsMCksYTModGhpcywib3ZlcnJpZGVGbiIs''@;'; put 'put ''bnVsbCksYTModGhpcywiaW5saW5lU3RhcnRPZmZzZXQiLDApLGEzKHRoaXMsInRvdGFsQ2FsY3VsYXRlZFdpZHRoIiwwKSxhMyh0aGlzLCJzdGFydFBvc2l0aW9ucyIsW10pLGEzKHRoaXMsIm5lZWRSZXZlcnNlIiwhMCksdGhpcy52aWV3cG9ydFdpZHRoPWQsdGhpcy5zY3JvbGxPZmZzZXQ9''@;'; put 'put ''aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxDb2x1bW5zPWYsdGhpcy5jb2x1bW5XaWR0aEZuPXYsdGhpcy5vdmVycmlkZUZuPU0sdGhpcy5pbmxpbmVTdGFydE9mZnNldD1ELHRoaXMuY2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7dGhpcy5faW5p''@;'; put 'put ''dGlhbGl6ZSh0aGlzKTtmb3IobGV0IGw9MDtsPHRoaXMudG90YWxDb2x1bW5zO2wrKylpZih0aGlzLmNvbHVtbldpZHRoPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRo''@;'; put 'put ''KSx0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRoKz10aGlzLmNvbHVtbldpZHRoLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGg+PXRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0K3RoaXMudmlld3BvcnRXaWR0aCl7dGhpcy5uZWVkUmV2ZXJzZT0hMTticmVha310aGlzLl9maW5hbGl6ZSh0aGlz''@;'; put 'put ''KX1nZXRDb2x1bW5XaWR0aChsKXtjb25zdCBhPXRoaXMuY29sdW1uV2lkdGhGbihsKTtyZXR1cm4gaXNOYU4oYSk/X186YX19Y29uc3QgeWV0PWNsYXNzIGJldHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud290PWwud290LHRoaXMuaW5zdGFu''@;'; put 'put ''Y2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMud3RUYWJsZT1mLHRoaXMub3ZlcnNpemVkUm93cz1bXSx0aGlzLm92ZXJzaXplZENvbHVtbkhlYWRlcnM9W10sdGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkPXt9LHRoaXMuY2xp''@;'; put 'put ''ZW50SGVpZ2h0PTAsdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRp''@;'; put 'put ''bmdzLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKT9uZXcgVVFlOm5ldyAkUWVdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IFhRZV0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IFFmZV1dKSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXM9bmV3IE1hcChbWyJyZW5kZXJlZCIsKCk9''@;'; put 'put ''PnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIik/bmV3IGVldDpuZXcgYWV0XSxbImZ1bGx5VmlzaWJsZSIsKCk9Pm5ldyBjZXRdLFsicGFydGlhbGx5VmlzaWJsZSIsKCk9Pm5ldyB0M2VdXSksdGhpcy5ldmVudE1hbmFnZXI9aCx0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''ci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywicmVzaXplIiwoKT0+e3RoaXMuY2xpZW50SGVpZ2h0PXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9KX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtjb25zdCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVy''@;'; put 'put ''bGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGQ9MDtyZXR1cm4gZD1hPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ6TXUoYSk+MCYmYS5jbGllbnRIZWlnaHQ+MD9hLmNsaWVudEhl''@;'; put 'put ''aWdodDoxLzAsZH1nZXRWaWV3cG9ydEhlaWdodCgpe2xldCBsPXRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7cmV0dXJuIGE+MCYmKGwtPWEpLGx9Z2V0V29ya3NwYWNlV2lkdGgoKXtjb25z''@;'; put 'put ''dHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI7bGV0IGg7aWYoZD09PWEpe2NvbnN0IGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFs''@;'; put 'put ''Q29sdW1ucyIpO2g9dGhpcy53dFRhYmxlLmhvbGRlci5vZmZzZXRXaWR0aCx0aGlzLmdldFJvd0hlYWRlcldpZHRoKCkrdGhpcy5zdW1Db2x1bW5XaWR0aHMoMCxmKT5oJiYoaD1sLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl9ZWxzZSBoPWQuY2xpZW50V2lkdGg7cmV0dXJuIGh9Z2V0''@;'; put 'put ''Vmlld3BvcnRXaWR0aCgpe2NvbnN0IGw9dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7cmV0dXJuIGE+MD9sLWE6bH1oYXNWZXJ0aWNhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xs''@;'; put 'put ''YWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBmLnNjcm9sbEhlaWdodD5mLmNsaWVudEhlaWdodH1jb25zdHtob2xkZXI6bCxoaWRlcjphfT10aGlzLnd0VGFibGUsaD1hLm9mZnNldEhlaWdodDtyZXR1''@;'; put 'put ''cm4gbC5jbGllbnRIZWlnaHQ8aHx8aD50aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtpZih0aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBmPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVu''@;'; put 'put ''dDtyZXR1cm4gZi5zY3JvbGxXaWR0aD5mLmNsaWVudFdpZHRofWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0V2lkdGg7cmV0dXJuIGwuY2xpZW50V2lkdGg8aHx8aD50aGlzLmdldFdvcmtzcGFjZVdpZHRoKCl9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5''@;'; put 'put ''V2luZG93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGlu''@;'; put 'put ''ZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fXN1bUNvbHVtbldpZHRocyhsLGEpe2xldCBkPTAsaD1sO2Zvcig7aDxhOylkKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCksaCs9MTtyZXR1cm4gZH1nZXRXb3Jrc3BhY2VP''@;'; put 'put ''ZmZzZXQoKXtyZXR1cm4gVTAodGhpcy53dFRhYmxlLmhvbGRlcil9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1u''@;'; put 'put ''SGVhZGVySGVpZ2h0PU11KHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PTAsdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHR9Z2V0Um93SGVhZGVyV2lkdGgoKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpLGE9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKTtpZihsKXt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBkPTAsaD1hLmxlbmd0aDtkPGg7ZCsrKXRoaXMucm93SGVhZGVyV2lkdGgrPWxbZF18fGx9aWYoaXNOYU4odGhpcy5yb3dIZWFkZXJXaWR0aCkpaWYoYS5sZW5n''@;'; put 'put ''dGgpe2xldCBkPXRoaXMud3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yKCJUSCIpO3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGg9MCxmPWEubGVuZ3RoO2g8ZjtoKyspZD8odGhpcy5yb3dIZWFkZXJXaWR0aCs9c3UoZCksZD1kLm5leHRTaWJsaW5nKTp0aGlzLnJvd0hlYWRlcldp''@;'; put 'put ''ZHRoKz01MH1lbHNlIHRoaXMucm93SGVhZGVyV2lkdGg9MDtyZXR1cm4gdGhpcy5yb3dIZWFkZXJXaWR0aD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsdGhpcy5yb3dIZWFkZXJXaWR0aCl8fHRoaXMucm93SGVhZGVyV2lkdGgsdGhpcy5yb3dI''@;'; put 'put ''ZWFkZXJXaWR0aH1jcmVhdGVSb3dzQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRh''@;'; put 'put ''YmxlOmR9PXRoaXM7bGV0IGYsdixoPXRoaXMuZ2V0Vmlld3BvcnRIZWlnaHQoKTt0aGlzLnJvd0hlYWRlcldpZHRoPU5hTjtsZXQgTT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wU2Nyb2xsUG9zaXRpb24tdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFBhcmVudE9mZnNldDtjb25zdCBEPWEu''@;'; put 'put ''Z2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj1hLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHJlPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIEQmJk0+PTAmJih2PXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLEQpLE0rPXYs''@;'; put 'put ''aC09diksWiYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJih2PXRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyhyZS1aLHJlKSxoLT12KSxmPWQuaG9sZGVyLmNsaWVudEhlaWdodD09PWQuaG9sZGVyLm9mZnNldEhlaWdo''@;'; put 'put ''dD8wOmYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSxuZXcgcGV0KHtjYWxjdWxhdGlvblR5cGVzOmwubWFwKGNlPT5bY2UsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzLmdldChjZSkoKV0pLHZpZXdwb3J0SGVpZ2h0Omgsc2Nyb2xsT2Zmc2V0Ok0sdG90YWxSb3dzOmEuZ2V0U2V0''@;'; put 'put ''dGluZygidG90YWxSb3dzIiksZGVmYXVsdFJvd0hlaWdodDp0aGlzLmluc3RhbmNlLnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLHJvd0hlaWdodEZuOmNlPT5kLmdldFJvd0hlaWdodChjZSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1''@;'; put 'put ''bGF0b3JPdmVycmlkZSIpLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zn0pfWNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0''@;'; put 'put ''aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgaD10aGlzLmdldFZpZXdwb3J0V2lkdGgoKSxmPU1hdGguYWJzKHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKS10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5s''@;'; put 'put ''aW5lU3RhcnRQYXJlbnRPZmZzZXQ7dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9TmFOO2NvbnN0IHY9YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKHYmJmY+PTApe2NvbnN0IE09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMo''@;'; put 'put ''MCx2KTtmKz1NLGgtPU19cmV0dXJuIGQuaG9sZGVyLmNsaWVudFdpZHRoIT09ZC5ob2xkZXIub2Zmc2V0V2lkdGgmJihoLT1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLG5ldyB2ZXQoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAoTT0+W00sdGhpcy5jb2x1bW5zQ2FsY3VsYXRv''@;'; put 'put ''clR5cGVzLmdldChNKSgpXSksdmlld3BvcnRXaWR0aDpoLHNjcm9sbE9mZnNldDpmLHRvdGFsQ29sdW1uczphLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGNvbHVtbldpZHRoRm46TT0+ZC5nZXRDb2x1bW5XaWR0aChNKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0''@;'; put 'put ''Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiksaW5saW5lU3RhcnRPZmZzZXQ6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0fSl9Y3JlYXRlQ2FsY3VsYXRvcnMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJn''@;'; put 'put ''dW1lbnRzWzBdO2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoKSxoPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKTtpZihsJiYhYS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIikpe2NvbnN0IGY9ZC5nZXRSZXN1bHRzRm9yKCJmdWxs''@;'; put 'put ''eVZpc2libGUiKTtsPXRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChmKX1pZihsJiYhYS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIikpe2NvbnN0IGY9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKTtsPXRoaXMuYXJlQWxsUHJvcG9zZWRW''@;'; put 'put ''aXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChmKX1yZXR1cm4gbHx8KHRoaXMucm93c1JlbmRlckNhbGN1bGF0b3I9ZC5nZXRSZXN1bHRzRm9yKCJyZW5kZXJlZCIpLHRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJyZW5kZXJlZCIpKSx0aGlzLnJvd3NW''@;'; put 'put ''aXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9ZC5nZXRSZXN1bHRzRm9yKCJw''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIiksbH1jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKXtjb25zdCBsPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoWyJmdWxseVZp''@;'; put 'put ''c2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pLGE9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSk7dGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLmNvbHVt''@;'; put 'put ''bnNWaXNpYmxlQ2FsY3VsYXRvcj1hLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWwuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWEu''@;'; put 'put ''Z2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydFJvdzphLGVuZFJvdzpkfT1sO2lmKG51bGw9PT1hJiZudWxsPT09''@;'; put 'put ''ZCl7aWYoIWwuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcilyZXR1cm4hMDthPXRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93LGQ9dGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fWNvbnN0e3N0YXJ0Um93OmgsZW5kUm93OmYs''@;'; put 'put ''cm93U3RhcnRPZmZzZXQ6dixyb3dFbmRPZmZzZXQ6TX09dGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcixEPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xLFo9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkIik7''@;'; put 'put ''cmV0dXJuIE51bWJlci5pc0ludGVnZXIoWikmJlo+MD8oYT1NYXRoLm1heCgwLGEtTWF0aC5taW4odixaKSksZD1NYXRoLm1pbihELGQrTWF0aC5taW4oTSxaKSkpOiJhdXRvIj09PVomJihhPU1hdGgubWF4KDAsYS1NYXRoLmNlaWwodi8yKSksZD1NYXRoLm1pbihELGQrTWF0aC5jZWlsKE0v''@;'; put 'put ''MikpKSwhKGE8aHx8YT09PWgmJmE+MHx8ZD5mfHxkPT09ZiYmZDxEKX1hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcilyZXR1cm4hMTtsZXR7c3RhcnRDb2x1bW46YSxlbmRDb2x1bW46ZH09bDtp''@;'; put 'put ''ZihudWxsPT09YSYmbnVsbD09PWQpe2lmKCFsLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIpcmV0dXJuITA7YT10aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbixkPXRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZENv''@;'; put 'put ''bHVtbn1jb25zdHtzdGFydENvbHVtbjpoLGVuZENvbHVtbjpmLGNvbHVtblN0YXJ0T2Zmc2V0OnYsY29sdW1uRW5kT2Zmc2V0Ok19PXRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IsRD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSxaPXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKFopJiZaPjA/KGE9TWF0aC5tYXgoMCxhLU1hdGgubWluKHYsWikpLGQ9TWF0aC5taW4oRCxkK01hdGgubWluKE0sWikpKToiYXV0byI9PT1aJiYoYT1NYXRo''@;'; put 'put ''Lm1heCgwLGEtTWF0aC5jZWlsKHYvMikpLGQ9TWF0aC5taW4oRCxkK01hdGguY2VpbChNLzIpKSksIShhPGh8fGE9PT1oJiZhPjB8fGQ+Znx8ZD09PWYmJmQ8RCl9cmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl7WG8odGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJz''@;'; put 'put ''TWFya2VkLChsLGEsZCk9PntkW2FdPXZvaWQgMH0pfX07ZnVuY3Rpb24gYTNlKGMsbCxhKXtvM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG8zZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWmMoYyxsKXtyZXR1cm4gYy5nZXQoekUoYyxsKSl9ZnVuY3Rpb24gczNlKGMsbCxhKXtyZXR1cm4gYy5zZXQoekUoYyxsKSxhKSxhfWZ1bmN0aW9uIHpFKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs''@;'; put 'put ''KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15KDkzOTA5KTt2YXIgbzM9bmV3IFdlYWtNYXAsdjE9bmV3IFdlYWtNYXAsbFA9bmV3IFdlYWtTZXQ7Y2xhc3Mg''@;'; put 'put ''d2V0e2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIF9ldChjLGwpe28zZShjLGwpLGwuYWRkKGMpfSkodGhpcyxsUCksYTNlKHRoaXMsbzMsdm9pZCAwKSxhM2UodGhpcyx2MSx2b2lkIDApfXNldEFjdGl2ZU92ZXJsYXkobCl7cmV0dXJuIHMzZSh2MSx0aGlzLGwpLHRoaXN9c2V0QWN0aXZlU2Vs''@;'; put 'put ''ZWN0aW9uKGwpe3JldHVybiBzM2UobzMsdGhpcyxsKSx0aGlzfXNjYW4oKXtjb25zdCBsPVpjKG8zLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUsYT1uZXcgU2V0O3JldHVybiJhY3RpdmUtaGVhZGVyIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChk''@;'; put 'put ''KSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImFyZWEiPT09bD90aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKToiZm9jdXMiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFk''@;'; put 'put ''ZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKToiZmlsbCI9PT1sP3RoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJoZWFkZXIiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNj''@;'; put 'put ''YW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpKToicm93Ij09PWw/KHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJjb2x1bW4iPT09bCYmKHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRl''@;'; put 'put ''cnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuQ29sdW1uc0luQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpLGF9c2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShsKXtjb25zdFthLGQsaCxmXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6dn09WmModjEsdGhpcyksTT12Lmdl''@;'; put 'put ''dFJlbmRlcmVkQ29sdW1uc0NvdW50KCksRD12LmdldENvbHVtbkhlYWRlcnNDb3VudCgpO2xldCBaPTA7Zm9yKGxldCByZT0tdi5nZXRSb3dIZWFkZXJzQ291bnQoKTtyZTxNO3JlKyspe2NvbnN0IGNlPXYuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UocmUpO2lmKCEoY2U8ZHx8Y2U+''@;'; put 'put ''Zikpe2ZvcihsZXQgYmU9LUQ7YmU8MDtiZSsrKXtpZihiZTxhfHxiZT5oKWNvbnRpbnVlO2NvbnN0IEVlPWJlK0Q7bGV0IEJlPXYuZ2V0Q29sdW1uSGVhZGVyKGNlLEVlKTtjb25zdCBxZT1aYyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIs''@;'; put 'put ''Y2UsRWUse3NlbGVjdGlvblR5cGU6WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxjb2x1bW5DdXJzb3I6WixzZWxlY3Rpb25XaWR0aDpmLWQrMX0pO251bGwhPT1xZSYmKHFlIT09Y2UmJihCZT12LmdldENvbHVtbkhlYWRlcihxZSxFZSkpLGwoQmUpKX1aKz0xfX19c2NhblJv''@;'; put 'put ''d3NJbkhlYWRlcnNSYW5nZShsKXtjb25zdFthLGQsaCxmXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6dn09WmModjEsdGhpcyksTT12LmdldFJlbmRlcmVkUm93c0NvdW50KCksRD12LmdldFJvd0hlYWRlcnNDb3VudCgpO2xldCBaPTA7Zm9yKGxldCByZT0tdi5nZXRDb2x1''@;'; put 'put ''bW5IZWFkZXJzQ291bnQoKTtyZTxNO3JlKyspe2NvbnN0IGNlPXYucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UocmUpO2lmKCEoY2U8YXx8Y2U+aCkpe2ZvcihsZXQgYmU9LUQ7YmU8MDtiZSsrKXtpZihiZTxkfHxiZT5mKWNvbnRpbnVlO2NvbnN0IEVlPWJlK0Q7bGV0IEJlPXYuZ2V0Um93''@;'; put 'put ''SGVhZGVyKGNlLEVlKTtjb25zdCBxZT1aYyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsY2UsRWUse3NlbGVjdGlvblR5cGU6WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxyb3dDdXJzb3I6WixzZWxlY3Rpb25IZWlnaHQ6aC1h''@;'; put 'put ''KzF9KTtudWxsIT09cWUmJihxZSE9PWNlJiYoQmU9di5nZXRSb3dIZWFkZXIocWUsRWUpKSxsKEJlKSl9Wis9MX19fXNjYW5DZWxsc1JhbmdlKGwpe2NvbnN0e3d0VGFibGU6YX09WmModjEsdGhpcyk7ekUobFAsdGhpcyxDZXQpLmNhbGwodGhpcywoZCxoKT0+e2NvbnN0IGY9YS5nZXRDZWxs''@;'; put 'put ''KFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZCxoKSksdj1aYyh2MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsZCxoLFpjKG8zLHRoaXMpLnNldHRpbmdzLmxheWVyTGV2ZWwpOyJzdHJpbmciPT10eXBlb2YgdiYmVGkoZix2KSxsKGYpfSl9c2NhblJvd3NJ''@;'; put 'put ''bkNlbGxzUmFuZ2UobCl7Y29uc3RbYSwsZF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmh9PVpjKHYxLHRoaXMpO3pFKGxQLHRoaXMsbDNlKS5jYWxsKHRoaXMsKGYsdik9PntpZihmPj1hJiZmPD1kKXtjb25zdCBNPWguZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGYsdikpO2woTSl9fSl9c2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UobCl7Y29uc3RbLGEsLGRdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTpofT1aYyh2MSx0aGlzKTt6RShsUCx0aGlzLGwzZSkuY2FsbCh0aGlzLChmLHYpPT57aWYodj49YSYmdjw9ZCl7Y29uc3Qg''@;'; put 'put ''TT1oLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTtsKE0pfX0pfX1mdW5jdGlvbiBDZXQoYyl7bGV0W2wsYSxkLGhdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKTtpZihsPDAmJmQ8MHx8YTwwJiZoPDApcmV0dXJuO2NvbnN0e3d0VGFibGU6Zn09WmModjEsdGhp''@;'; put 'put ''cyksdj1sIT09ZHx8YSE9PWg7aWYoYT1NYXRoLm1heChhLDApLGg9TWF0aC5tYXgoaCwwKSxsPU1hdGgubWF4KGwsMCksZD1NYXRoLm1heChkLDApLHYpe2lmKGE9TWF0aC5tYXgoYSxmLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksaD1NYXRoLm1pbihoLGYuZ2V0TGFzdFJlbmRlcmVkQ29s''@;'; put 'put ''dW1uKCkpLGw9TWF0aC5tYXgobCxmLmdldEZpcnN0UmVuZGVyZWRSb3coKSksZD1NYXRoLm1pbihkLGYuZ2V0TGFzdFJlbmRlcmVkUm93KCkpLGg8YXx8ZDxsKXJldHVybn1lbHNlIGlmKCFFcChmLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpKSkpcmV0dXJuO2Zv''@;'; put 'put ''cihsZXQgTT1sO008PWQ7TSs9MSlmb3IobGV0IEQ9YTtEPD1oO0QrPTEpYyhNLEQpfWZ1bmN0aW9uIGwzZShjKXtjb25zdHt3dFRhYmxlOmx9PVpjKHYxLHRoaXMpLGE9bC5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLGQ9bC5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgaD0wO2g8''@;'; put 'put ''YTtoKz0xKXtjb25zdCBmPWwucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoaCk7Zm9yKGxldCB2PTA7djxkO3YrPTEpYyhmLGwuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UodikpfX1jb25zdCBjM2U9Y2xhc3MgTWV0e2NvbnN0cnVjdG9yKGwsYSl7YSYmKHRoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyPWwuZXZlbnRNYW5hZ2VyLHRoaXMuaW5zdGFuY2U9bCx0aGlzLndvdD1sLHRoaXMuc2V0dGluZ3M9YSx0aGlzLm1vdXNlRG93bj0hMSx0aGlzLm1haW49bnVsbCx0aGlzLnRvcD1udWxsLHRoaXMuYm90dG9tPW51bGwsdGhpcy5zdGFydD1udWxsLHRoaXMuZW5kPW51bGwsdGhpcy50b3BT''@;'; put 'put ''dHlsZT1udWxsLHRoaXMuYm90dG9tU3R5bGU9bnVsbCx0aGlzLnN0YXJ0U3R5bGU9bnVsbCx0aGlzLmVuZFN0eWxlPW51bGwsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGU9Z0sodGhpcy5pbnN0YW5jZSksdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldD0tTWF0aC5jZWlsKHBhcnNlSW50KHRo''@;'; put 'put ''aXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSx0aGlzLmNvcm5lcj1udWxsLHRoaXMuY29ybmVyU3R5bGU9bnVsbCx0aGlzLmNyZWF0ZUJvcmRlcnMoYSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcy53b3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmJvZHk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLCgpPT50aGlzLm9uTW91c2VEb3duKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpO2ZvcihsZXQgYT0w''@;'; put 'put ''LGQ9dGhpcy5tYWluLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm1haW4uY2hpbGROb2Rlc1thXSwibW91c2VlbnRlciIsZj0+dGhpcy5vbk1vdXNlRW50ZXIoZix0aGlzLm1haW4uY2hpbGROb2Rlc1thXSkpfW9uTW91''@;'; put 'put ''c2VEb3duKCl7dGhpcy5tb3VzZURvd249ITB9b25Nb3VzZVVwKCl7dGhpcy5tb3VzZURvd249ITF9b25Nb3VzZUVudGVyKGwsYSl7aWYoIXRoaXMubW91c2VEb3dufHwhdGhpcy53b3QuZ2V0U2V0dGluZygiaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlciIpKXJldHVybjtsLnByZXZlbnREZWZh''@;'; put 'put ''dWx0KCksQjIobCk7Y29uc3QgZD10aGlzLGg9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHksZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Euc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLGZ1bmN0aW9uIE0o''@;'; put 'put ''RCl7KGZ1bmN0aW9uIHYoRCl7aWYoRC5jbGllbnRZPE1hdGguZmxvb3IoZi50b3ApfHxELmNsaWVudFk+TWF0aC5jZWlsKGYudG9wK2YuaGVpZ2h0KXx8RC5jbGllbnRYPE1hdGguZmxvb3IoZi5sZWZ0KXx8RC5jbGllbnRYPk1hdGguY2VpbChmLmxlZnQrZi53aWR0aCkpcmV0dXJuITB9KShE''@;'; put 'put ''KSYmKGQuZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixNKSxhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9KX1jcmVhdGVCb3JkZXJzKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLndvdDt0aGlzLm1haW49YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtj''@;'; put 'put ''b25zdCBkPVsidG9wIiwic3RhcnQiLCJib3R0b20iLCJlbmQiLCJjb3JuZXIiXTtsZXQgaD10aGlzLm1haW4uc3R5bGU7aC5wb3NpdGlvbj0iYWJzb2x1dGUiLGgudG9wPTAsaC5sZWZ0PTA7Zm9yKGxldCBNPTA7TTw1O00rKyl7Y29uc3QgRD1kW01dLFo9YS5jcmVhdGVFbGVtZW50KCJkaXYi''@;'; put 'put ''KTtaLmNsYXNzTmFtZT1gd3RCb3JkZXIgJHt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZXx8IiJ9YCx0aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0RdLmhpZGUmJihaLmNsYXNzTmFtZSs9IiBoaWRkZW4iKSxoPVouc3R5bGUsaC5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5zZXR0aW5nc1tE''@;'; put 'put ''XSYmdGhpcy5zZXR0aW5nc1tEXS5jb2xvcj90aGlzLnNldHRpbmdzW0RdLmNvbG9yOmwuYm9yZGVyLmNvbG9yLGguaGVpZ2h0PXRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0ud2lkdGg/YCR7dGhpcy5zZXR0aW5nc1tEXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhg''@;'; put 'put ''LGgud2lkdGg9dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW0RdLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsdGhpcy5tYWluLmFwcGVuZENoaWxkKFopfXRoaXMudG9wPXRoaXMubWFpbi5jaGlsZE5vZGVzWzBdLHRoaXMu''@;'; put 'put ''c3RhcnQ9dGhpcy5tYWluLmNoaWxkTm9kZXNbMV0sdGhpcy5ib3R0b209dGhpcy5tYWluLmNoaWxkTm9kZXNbMl0sdGhpcy5lbmQ9dGhpcy5tYWluLmNoaWxkTm9kZXNbM10sdGhpcy50b3BTdHlsZT10aGlzLnRvcC5zdHlsZSx0aGlzLnN0YXJ0U3R5bGU9dGhpcy5zdGFydC5zdHlsZSx0aGlz''@;'; put 'put ''LmJvdHRvbVN0eWxlPXRoaXMuYm90dG9tLnN0eWxlLHRoaXMuZW5kU3R5bGU9dGhpcy5lbmQuc3R5bGUsdGhpcy5jb3JuZXI9dGhpcy5tYWluLmNoaWxkTm9kZXNbNF0sdGhpcy5jb3JuZXIuY2xhc3NOYW1lKz0iIGNvcm5lciIsdGhpcy5jb3JuZXJTdHlsZT10aGlzLmNvcm5lci5zdHlsZSx0''@;'; put 'put ''aGlzLmNvcm5lclN0eWxlLndpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmhlaWdodD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHR9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyPVtgJHt0aGlzLmNvcm5lckRlZmF1''@;'; put 'put ''bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyU3R5bGUsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyQ29sb3JdLmpvaW4oIiAiKSxBcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlz''@;'; put 'put ''LmNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCksdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3dFRhYmxlOmZ9PXRoaXMud290O2xldCB2PWYuYm9yZGVyc0hvbGRlcjt2fHwodj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHYuY2xhc3NOYW1lPSJodEJvcmRlcnMiLGYuYm9yZGVyc0hvbGRl''@;'; put 'put ''cj12LGYuc3ByZWFkZXIuYXBwZW5kQ2hpbGQodikpLHYuYXBwZW5kQ2hpbGQodGhpcy5tYWluKX1jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHN0eWxlc0hhbmRsZXI6YX09dGhpcy53b3QsZD1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwt''@;'; put 'put ''bW9iaWxlLWhhbmRsZS1zaXplIiksaD1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItcmFkaXVzIiksZj1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1iYWNrZ3JvdW5kLWNvbG9yIiksdj1hLmdldENTU1ZhcmlhYmxlVmFs''@;'; put 'put ''dWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItd2lkdGgiKSxNPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1jb2xvciIpO3RoaXMuc2VsZWN0aW9uSGFuZGxlcz17dG9wOmwuY3JlYXRlRWxlbWVudCgiRElWIiksdG9wSGl0QXJlYTpsLmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0''@;'; put 'put ''aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBi''@;'; put 'put ''b3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5''@;'; put 'put ''bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5k''@;'; put 'put ''bGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LFhvKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIsd2lkdGg6IjQwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUsMTApfXB4YH0sKGJlLEVlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9t''@;'; put 'put ''SGl0QXJlYVtFZV09YmUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhW0VlXT1iZX0pLFhvKGEuaXNDbGFzc2ljVGhlbWUoKT97cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjEwcHgiLHdpZHRoOiIxMHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoMTAv''@;'; put 'put ''MS41LDEwKX1weGAsYmFja2dyb3VuZDoiI0Y1RjVGRiIsYm9yZGVyOiIxcHggc29saWQgIzQyODVjOCJ9Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDpgJHtkfXB4YCx3aWR0aDpgJHtkfXB4YCwiYm9yZGVyLXJhZGl1cyI6YCR7aH1weGAsYmFja2dyb3VuZDpgJHtmfWAsYm9yZGVyOmAk''@;'; put 'put ''e3Z9cHggc29saWQgJHtNfWB9LChiZSxFZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbVtFZV09YmUsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BbRWVdPWJlfSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3ApLHRo''@;'; put 'put ''aXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEpLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYSl9''@;'; put 'put ''aXNQYXJ0UmFuZ2UobCxhKXtjb25zdCBkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVjdGlvbigpO3JldHVybiEoIWQuY2VsbFJhbmdlfHxsPT09ZC5jZWxsUmFuZ2UudG8ucm93JiZhPT09ZC5jZWxsUmFuZ2UudG8uY29sKX11cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZXNQb3NpdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgRD10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKT8icmlnaHQiOiJsZWZ0Iix7dG9wOlosdG9wSGl0QXJlYTpyZSxib3R0b206Y2UsYm90dG9tSGl0QXJlYTpiZX09dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0''@;'; put 'put ''eWxlcyxFZT1wYXJzZUludChaLmJvcmRlcldpZHRoLDEwKSxCZT1wYXJzZUludChaLndpZHRoLDEwKSxxZT1wYXJzZUludChyZS53aWR0aCwxMCkscnQ9dGhpcy53b3Qud3RUYWJsZS5nZXRXaWR0aCgpLHB0PXRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7Wi50b3A9YCR7cGFyc2VJbnQo''@;'; put 'put ''ZC1CZS0xLDEwKX1weGAsWltEXT1gJHtwYXJzZUludChoLUJlLTEsMTApfXB4YCxyZS50b3A9YCR7cGFyc2VJbnQoZC1xZS80KjMsMTApfXB4YCxyZVtEXT1gJHtwYXJzZUludChoLXFlLzQqMywxMCl9cHhgO2NvbnN0IGR0PU1hdGgubWluKHBhcnNlSW50KGgrZiwxMCkscnQtQmUtMipFZSks''@;'; put 'put ''SnQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLXFlLzQsMTApLHJ0LXFlLTIqRWUpO2NlW0RdPWAke2R0fXB4YCxiZVtEXT1gJHtKdH1weGA7Y29uc3Qgdm49TWF0aC5taW4ocGFyc2VJbnQoZCt2LDEwKSxwdC1CZS0yKkVlKSxDbj1NYXRoLm1pbihwYXJzZUludChkK3YtcWUvNCwxMCkscHQtcWUt''@;'; put 'put ''MipFZSk7Y2UudG9wPWAke3ZufXB4YCxiZS50b3A9YCR7Q259cHhgLHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUmJnRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUoKT8oWi5kaXNwbGF5PSJibG9jayIscmUuZGlzcGxheT0iYmxvY2siLHRoaXMuaXNQYXJ0UmFu''@;'; put 'put ''Z2UobCxhKT8oY2UuZGlzcGxheT0ibm9uZSIsYmUuZGlzcGxheT0ibm9uZSIpOihjZS5kaXNwbGF5PSJibG9jayIsYmUuZGlzcGxheT0iYmxvY2siKSk6KFouZGlzcGxheT0ibm9uZSIsY2UuZGlzcGxheT0ibm9uZSIscmUuZGlzcGxheT0ibm9uZSIsYmUuZGlzcGxheT0ibm9uZSIpLGw9PT10''@;'; put 'put ''aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxhPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhaLnpJbmRleD0iOTk5OSIscmUuekluZGV4PSI5OTk5Iik6KFouekluZGV4PSIiLHJlLnpJbmRleD0iIil9''@;'; put 'put ''YXBwZWFyKGwpe2lmKHRoaXMuZGlzYWJsZWQpcmV0dXJuO2xldFthLGQsaCxmXT1sO2lmKGE8MCYmaDwwfHxkPDAmJmY8MClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6dixyb290RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMud290LFo9YSE9PWh8fGQh''@;'; put 'put ''PT1mLHJlPXYuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpLGNlPXYuZ2V0TGFzdFJlbmRlcmVkUm93KCksYmU9di5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksRWU9di5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtpZihiZTwwJiZFZTwwfHxyZTwwJiZjZTwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBw''@;'; put 'put ''ZWFyKCk7bGV0IEJlO2lmKFope2lmKGQ9TWF0aC5tYXgoZCxiZSksZj1NYXRoLm1pbihmLEVlKSxhPU1hdGgubWF4KGEscmUpLGg9TWF0aC5taW4oaCxjZSksZjxkfHxoPGEpcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtCZT12LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyhhLGQpKX1lbHNlIGlmKEJlPXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpLCFFcChCZSkpcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtjb25zdCBxZT1aP3YuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGgsZikpOkJlLHJ0PVUwKEJlKSxw''@;'; put 'put ''dD1aP1UwKHFlKTpydCxkdD1VMCh2LlRBQkxFKSxKdD1ydC50b3Asdm49cnQubGVmdCxDbj10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKTtsZXQgdG49MCxNbj0wO2lmKENuKXtjb25zdCBEcj1zdSh2LlRBQkxFKSwkcj1zdShCZSk7TW49dm4rJHItcHQubGVmdCx0''@;'; put 'put ''bj1ELmlubmVyV2lkdGgtdm4tJHItKEQuaW5uZXJXaWR0aC1kdC5sZWZ0LURyKS0xfWVsc2UgTW49cHQubGVmdCtzdShxZSktdm4sdG49dm4tZHQubGVmdC0xO2lmKHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChhLGgpKXtjb25zdCAkcj10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVy''@;'; put 'put ''KCJjb2x1bW5zIixkLGYsYSxkdCk7bGV0IHdpPW51bGw7JHImJihbd2ksdG4sTW5dPSRyKSx3aSYmKEJlPXdpKX1sZXQgd3I9SnQtZHQudG9wLTEsR3I9cHQudG9wK011KHFlKS1KdDtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoZCxmKSl7Y29uc3QgJHI9dGhpcy5nZXREaW1lbnNpb25z''@;'; put 'put ''RnJvbUhlYWRlcigicm93cyIsYSxoLGQsZHQpO2xldCB3aT1udWxsOyRyJiYoW3dpLHdyLEdyXT0kciksd2kmJihCZT13aSl9Y29uc3QgbXI9RC5nZXRDb21wdXRlZFN0eWxlKEJlKTtwYXJzZUludChtci5ib3JkZXJUb3BXaWR0aCwxMCk+MCYmKHdyKz0xLEdyPUdyPjA/R3ItMTowKSxwYXJz''@;'; put 'put ''ZUludChtcltDbj8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCJdLDEwKT4wJiYodG4rPTEsTW49TW4+MD9Nbi0xOjApO2NvbnN0IEduPUNuPyJyaWdodCI6ImxlZnQiO3RoaXMudG9wU3R5bGUudG9wPWAke3dyfXB4YCx0aGlzLnRvcFN0eWxlW0duXT1gJHt0bn1weGAsdGhp''@;'; put 'put ''cy50b3BTdHlsZS53aWR0aD1gJHtNbn1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHt3cn1weGAsdGhpcy5zdGFydFN0eWxlW0duXT1gJHt0bn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHtHcn1weGAsdGhpcy5zdGFydFN0eWxl''@;'; put 'put ''LmRpc3BsYXk9ImJsb2NrIjtjb25zdCBhaT1NYXRoLmZsb29yKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMuYm90dG9tU3R5bGUudG9wPXdyK0dyLWFpKyJweCIsdGhpcy5ib3R0b21TdHlsZVtHbl09YCR7dG59cHhgLHRoaXMuYm90dG9tU3R5bGUud2lkdGg9YCR7TW59cHhg''@;'; put 'put ''LHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuZW5kU3R5bGUudG9wPWAke3dyfXB4YCx0aGlzLmVuZFN0eWxlW0duXT10bitNbi1haSsicHgiLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAke0dyKzF9cHhgLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0iYmxvY2siO2xldCBfaT10''@;'; put 'put ''aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlO19pPSJmdW5jdGlvbiI9PXR5cGVvZiBfaT9faSh0aGlzLnNldHRpbmdzLmxheWVyTGV2ZWwpOl9pO2NvbnN0IE9uPXRoaXMud290LmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsaCxmLCExLCJyZW5kZXIiKTtsZXRb''@;'; put 'put ''enIsSm5dPVtoLGZdO2lmKE9uJiZBcnJheS5pc0FycmF5KE9uKSYmKFssLHpyLEpuXT1PbiksQXAoKXx8IV9pfHx0aGlzLmlzUGFydFJhbmdlKHpyLEpuKSl0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dGhpcy5jb3JuZXJTdHlsZS50b3A9d3IrR3IrdGhpcy5jb3JuZXJD''@;'; put 'put ''ZW50ZXJQb2ludE9mZnNldC10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCsicHgiLHRoaXMuY29ybmVyU3R5bGVbR25dPXRuK01uK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5l''@;'; put 'put ''clN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyTGVmdFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRl''@;'; put 'put ''ckJvdHRvbVdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLndpZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7bGV0IERyPWFfKHYuVEFCTEUpO2NvbnN0''@;'; put 'put ''ICRyPURyPT09RDskciYmKERyPU0uZG9jdW1lbnRFbGVtZW50KTtjb25zdCB3aT1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCwxMCktMSxlYT1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIpLGZhPU1hdGgu''@;'; put 'put ''Y2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzIpO2lmKGY9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCB2dD0kcj9xZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OnFlLm9mZnNldExlZnQ7bGV0IE50PSEx''@;'; put 'put ''LEZ0PTA7Q24/KEZ0PXZ0LXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLE50PUZ0PDApOihGdD12dCtzdShxZSkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsTnQ9RnQ+PV8kKERyKSksTnQmJih0aGlzLmNvcm5lclN0eWxl''@;'; put 'put ''W0duXT1gJHtNYXRoLmZsb29yKHRuK01uK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtZWEtd2kpfXB4YCx0aGlzLmNvcm5lclN0eWxlW0NuPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCl9aWYoaD09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIp''@;'; put 'put ''LTEpe2NvbnN0IEZ0PSgkcj9xZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6cWUub2Zmc2V0VG9wKStNdShxZSkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1vXyhEciksSG49dGhpcy53b3Quc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgp''@;'; put 'put ''O2lmKEZ0KXtjb25zdCB0cj1NYXRoLmZsb29yKHdyK0dyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtZmEtd2kpO0huPyh0aGlzLmNvcm5lclN0eWxlLnRvcD1gJHt0cn1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD0wKTp0aGlzLmNvcm5lclN0eWxlLnRvcD10''@;'; put 'put ''ci0xKyJweCJ9fXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifUFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oaCxmLHdyLHRuLE1uLEdyKX1pc0VudGly''@;'; put 'put ''ZUNvbHVtblNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJs''@;'; put 'put ''ZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdldERpbWVuc2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTp2fT10aGlzLndvdCxNPXYud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xl''@;'; put 'put ''dCBEPW51bGwsWj1udWxsLHJlPW51bGwsY2U9bnVsbCxiZT1udWxsLEVlPW51bGwsQmU9bnVsbCxxZT1udWxsO3N3aXRjaChsKXtjYXNlInJvd3MiOkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0sWj1mdW5jdGlvbigpe3JldHVybiBNdSguLi5hcmd1''@;'; put 'put ''bWVudHMpfSxyZT0iaHRfX3NlbGVjdGlvbi0tcm93cyIsRWU9InRvcCI7YnJlYWs7Y2FzZSJjb2x1bW5zIjpEPWZ1bmN0aW9uKCl7cmV0dXJuIHYuZ2V0Q29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9LFo9ZnVuY3Rpb24oKXtyZXR1cm4gc3UoLi4uYXJndW1lbnRzKX0scmU9Imh0X19zZWxl''@;'; put 'put ''Y3Rpb24tLWNvbHVtbnMiLEVlPSJsZWZ0In1pZihNLmNsYXNzTGlzdC5jb250YWlucyhyZSkpe2NvbnN0IHJ0PXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoQmU9RChhLHJ0LWgpLHFlPUQoZCxydC1oKSwhQmV8fCFxZSlyZXR1cm4hMTtjb25zdCBwdD1V''@;'; put 'put ''MChCZSksZHQ9VTAocWUpO3JldHVybiBCZSYmcWUmJihjZT1wdFtFZV0tZltFZV0tMSxiZT1kdFtFZV0rWihxZSktcHRbRWVdKSxbQmUsY2UsYmVdfXJldHVybiExfWNoYW5nZUJvcmRlclN0eWxlKGwsYSl7Y29uc3QgZD10aGlzW2xdLnN0eWxlLGg9YVtsXTshaHx8aC5oaWRlP1RpKHRoaXNb''@;'; put 'put ''bF0sImhpZGRlbiIpOihwbyh0aGlzW2xdLCJoaWRkZW4iKSYmbG8odGhpc1tsXSwiaGlkZGVuIiksZC5iYWNrZ3JvdW5kQ29sb3I9aC5jb2xvciwoInRvcCI9PT1sfHwiYm90dG9tIj09PWwpJiYoZC5oZWlnaHQ9YCR7aC53aWR0aH1weGApLCgic3RhcnQiPT09bHx8ImVuZCI9PT1sKSYmKGQu''@;'; put 'put ''d2lkdGg9YCR7aC53aWR0aH1weGApKX1jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKXtjb25zdCBkPXRoaXNbbF0uc3R5bGU7ZC5iYWNrZ3JvdW5kQ29sb3I9IiMwMDAiLGQud2lkdGg9IjFweCIsZC5oZWlnaHQ9IjFweCJ9dG9nZ2xlSGlkZGVuQ2xhc3MobCxhKXt0aGlzLmNoYW5nZUJv''@;'; put 'put ''cmRlclRvRGVmYXVsdFN0eWxlKGwpLGE/VGkodGhpc1tsXSwiaGlkZGVuIik6bG8odGhpc1tsXSwiaGlkZGVuIil9ZGlzYXBwZWFyKCl7dGhpcy50b3BTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJu''@;'; put 'put ''b25lIix0aGlzLmVuZFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSIsQXAoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWEuZGlzcGxheT0ibm9u''@;'; put 'put ''ZSIpfWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95V2l0aE93bkV2ZW50c09ubHkoKSx0aGlzLm1haW4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm1haW4pfX07ZnVuY3Rpb24gd18oYyxsLGEpe3UzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdTNlKGMsbCl7aWYo''@;'; put 'put ''bC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBhcyhjLGwpe3JldHVybiBjLmdldChDSyhjLGwpKX1mdW5jdGlvbiBkM2UoYyxsLGEpe3JldHVybiBjLnNl''@;'; put 'put ''dChDSyhjLGwpLGEpLGF9ZnVuY3Rpb24gQ0soYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i''@;'; put 'put ''amVjdCIpfXZhciBiMT1uZXcgV2Vha01hcCxWZD1uZXcgV2Vha01hcCxTSz1uZXcgV2Vha01hcCxVRT1uZXcgV2Vha01hcCxNSz1uZXcgV2Vha01hcCxYNz1uZXcgV2Vha01hcCxoM2U9bmV3IFdlYWtTZXQ7Y2xhc3MgRWV0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB4ZXQoYyxsKXt1M2Uo''@;'; put 'put ''YyxsKSxsLmFkZChjKX0pKHRoaXMsaDNlKSx3Xyh0aGlzLGIxLHZvaWQgMCksd18odGhpcyxWZCx2b2lkIDApLHdfKHRoaXMsU0ssbmV3IHdldCksd18odGhpcyxVRSxuZXcgV2Vha01hcCksd18odGhpcyxNSyxuZXcgV2Vha1NldCksd18odGhpcyxYNyxuZXcgTWFwKSxkM2UoVmQsdGhpcyxs''@;'; put 'put ''KX1zZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiBkM2UoYjEsdGhpcyxsKSxhcyhTSyx0aGlzKS5zZXRBY3RpdmVPdmVybGF5KGFzKGIxLHRoaXMpKSxhcyhVRSx0aGlzKS5oYXMoYXMoYjEsdGhpcykpfHxhcyhVRSx0aGlzKS5zZXQoYXMoYjEsdGhpcyksbmV3IFNldCksdGhpc31nZXRGb2N1''@;'; put 'put ''c1NlbGVjdGlvbigpe3JldHVybiBudWxsIT09YXMoVmQsdGhpcyk/YXMoVmQsdGhpcykuZ2V0Rm9jdXMoKTpudWxsfWdldEFyZWFTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWFzKFZkLHRoaXMpP2FzKFZkLHRoaXMpLmNyZWF0ZUxheWVyZWRBcmVhKCk6bnVsbH1nZXRCb3JkZXJJbnN0YW5j''@;'; put 'put ''ZShsKXtpZighbC5zZXR0aW5ncy5ib3JkZXIpcmV0dXJuIG51bGw7aWYoYXMoWDcsdGhpcykuaGFzKGwpKXtjb25zdCBkPWFzKFg3LHRoaXMpLmdldChsKTtpZihkLmhhcyhhcyhiMSx0aGlzKSkpcmV0dXJuIGQuZ2V0KGFzKGIxLHRoaXMpKTtjb25zdCBoPW5ldyBjM2UoYXMoYjEsdGhpcyks''@;'; put 'put ''bC5zZXR0aW5ncyk7cmV0dXJuIGQuc2V0KGFzKGIxLHRoaXMpLGgpLGh9Y29uc3QgYT1uZXcgYzNlKGFzKGIxLHRoaXMpLGwuc2V0dGluZ3MpO3JldHVybiBhcyhYNyx0aGlzKS5zZXQobCxuZXcgTWFwKFtbYXMoYjEsdGhpcyksYV1dKSksYX1nZXRCb3JkZXJJbnN0YW5jZXMobCl7dmFyIGEs''@;'; put 'put ''ZDtyZXR1cm4gQXJyYXkuZnJvbShudWxsIT09KGE9bnVsbD09PShkPWFzKFg3LHRoaXMpLmdldChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQudmFsdWVzKCkpJiZ2b2lkIDAhPT1hP2E6W10pfWRlc3Ryb3lCb3JkZXJzKGwpe2FzKFg3LHRoaXMpLmdldChsKS5mb3JFYWNoKGE9PmEuZGVzdHJv''@;'; put 'put ''eSgpKSxhcyhYNyx0aGlzKS5kZWxldGUobCl9cmVuZGVyKGwpe2lmKG51bGw9PT1hcyhWZCx0aGlzKSlyZXR1cm47bCYmQ0soaDNlLHRoaXMsVGV0KS5jYWxsKHRoaXMpO2NvbnN0IGE9QXJyYXkuZnJvbShhcyhWZCx0aGlzKSksZD1uZXcgTWFwLGg9bmV3IE1hcDtmb3IobGV0IGY9MDtmPGEu''@;'; put 'put ''bGVuZ3RoO2YrKyl7Y29uc3Qgdj1hW2ZdLHtjbGFzc05hbWU6TSxoZWFkZXJBdHRyaWJ1dGVzOkQsY3JlYXRlTGF5ZXJzOlosc2VsZWN0aW9uVHlwZTpyZX09di5zZXR0aW5nczthcyhNSyx0aGlzKS5oYXModil8fChhcyhNSyx0aGlzKS5hZGQodiksdi5hZGRMb2NhbEhvb2soImRlc3Ryb3ki''@;'; put 'put ''LCgpPT50aGlzLmRlc3Ryb3lCb3JkZXJzKHYpKSk7Y29uc3QgY2U9dGhpcy5nZXRCb3JkZXJJbnN0YW5jZSh2KTtpZih2LmlzRW1wdHkoKSl7Y2U/LmRpc2FwcGVhcigpO2NvbnRpbnVlfU0mJmFzKFNLLHRoaXMpLnNldEFjdGl2ZVNlbGVjdGlvbih2KS5zY2FuKCkuZm9yRWFjaChCZT0+e2lm''@;'; put 'put ''KGQuaGFzKEJlKSl7Y29uc3QgcWU9ZC5nZXQoQmUpO3FlLmhhcyhNKSYmITA9PT1aP3FlLnNldChNLHFlLmdldChNKSsxKTpxZS5zZXQoTSwxKX1lbHNlIGQuc2V0KEJlLG5ldyBNYXAoW1tNLDFdXSkpO0QmJihoLmhhcyhCZSl8fGguc2V0KEJlLFtdKSwiVEgiPT09QmUubm9kZU5hbWUmJmgu''@;'; put 'put ''Z2V0KEJlKS5wdXNoKC4uLkQpKX0pO2NvbnN0IGJlPXYuZ2V0Q29ybmVycygpO2FzKGIxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlRHJhd0JvcmRlcnMiLGJlLHJlKSxjZT8uYXBwZWFyKGJlKX1kLmZvckVhY2goKGYsdik9Pnt2YXIgTTtjb25zdCBEPUFycmF5LmZyb20oZikubWFwKFo9''@;'; put 'put ''PntsZXRbcmUsY2VdPVo7cmV0dXJuIDE9PT1jZT9yZTpbcmUsLi4uQXJyYXkuZnJvbSh7bGVuZ3RoOmNlLTF9LChiZSxFZSk9PmAke3JlfS0ke0VlKzF9YCldfSkuZmxhdCgpO0QuZm9yRWFjaChaPT5hcyhVRSx0aGlzKS5nZXQoYXMoYjEsdGhpcykpLmFkZChaKSksVGkodixEKSwiVEQiPT09''@;'; put 'put ''di5ub2RlTmFtZSYmQXJyYXkuaXNBcnJheShudWxsPT09KE09YXMoVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PU0/dm9pZCAwOk0uY2VsbEF0dHJpYnV0ZXMpJiZ2byh2LGFzKFZkLHRoaXMpLm9wdGlvbnMuY2VsbEF0dHJpYnV0ZXMpfSksQXJyYXkuZnJvbShoLmtleXMoKSkuZm9yRWFj''@;'; put 'put ''aChmPT57dm8oZixbLi4uaC5nZXQoZildKX0pfX1mdW5jdGlvbiBUZXQoKXtjb25zdCBjPWFzKFVFLHRoaXMpLmdldChhcyhiMSx0aGlzKSksbD1hcyhiMSx0aGlzKS53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5''@;'; put 'put ''KGwpKWZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWMuYWRkKGxbYV0pO2MuZm9yRWFjaChhPT57dmFyIGQsaDtjb25zdCBmPWFzKGIxLHRoaXMpLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvckFsbChgLiR7YX1gKTtsZXQgdj1bXTtBcnJheS5pc0FycmF5KG51bGw9PT0oZD1hcyhWZCx0''@;'; put 'put ''aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jZWxsQXR0cmlidXRlcykmJih2PWFzKFZkLHRoaXMpLm9wdGlvbnMuY2VsbEF0dHJpYnV0ZXMubWFwKE09Pk1bMF0pKSxBcnJheS5pc0FycmF5KG51bGw9PT0oaD1hcyhWZCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09aD92b2lk''@;'; put 'put ''IDA6aC5oZWFkZXJBdHRyaWJ1dGVzKSYmKHY9Wy4uLnYsLi4uYXMoVmQsdGhpcykub3B0aW9ucy5oZWFkZXJBdHRyaWJ1dGVzLm1hcChNPT5NWzBdKV0pO2ZvcihsZXQgTT0wLEQ9Zi5sZW5ndGg7TTxEO00rKylsbyhmW01dLGEpLEI3KGZbTV0sdil9KSxjLmNsZWFyKCl9ZnVuY3Rpb24gSjco''@;'; put 'put ''YyxsLGEpe2YzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZjNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBfYyhjLGwpe3JldHVy''@;'; put 'put ''biBjLmdldChsMyhjLGwpKX1mdW5jdGlvbiBzMyhjLGwsYSl7cmV0dXJuIGMuc2V0KGwzKGMsbCksYSksYX1mdW5jdGlvbiBsMyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIExwPW5ldyBXZWFrTWFwLFM1PW5ldyBXZWFrTWFwLHhLPW5ldyBXZWFrTWFwLEVLPW5ldyBXZWFrTWFwLGptPW5ldyBXZWFrTWFwLFpFPW5ldyBXZWFrTWFwLFdFPW5ldyBXZWFrTWFwLE9w''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzIGtldHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gQWV0KGMsbCl7ZjNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLE9wKSxKNyh0aGlzLExwLHZvaWQgMCksSjcodGhpcyxTNSx2b2lkIDApLEo3KHRoaXMseEssdm9pZCAwKSxKNyh0aGlzLEVLLHZvaWQgMCksSjco''@;'; put 'put ''dGhpcyxqbSwhMCksSjcodGhpcyxaRSx7fSksSjcodGhpcyxXRSx7fSksczMoUzUsdGhpcyxsLnJvb3RUYWJsZS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLHMzKEVLLHRoaXMsbC5yb290RG9jdW1lbnQpfWlzQ2xhc3NpY1RoZW1lKCl7cmV0dXJuIF9jKGptLHRoaXMpfWdldENTU1Zh''@;'; put 'put ''cmlhYmxlVmFsdWUobCl7dmFyIGE7aWYoX2Moam0sdGhpcykpcmV0dXJuIG51bGw7aWYoX2MoWkUsdGhpcylbYC0taHQtJHtsfWBdKXJldHVybiBfYyhaRSx0aGlzKVtgLS1odC0ke2x9YF07Y29uc3QgZD1udWxsIT09KGE9bDMoT3AsdGhpcyxMZXQpLmNhbGwodGhpcyxgLS1odC0ke2x9YCkp''@;'; put 'put ''JiZ2b2lkIDAhPT1hP2E6bDMoT3AsdGhpcyxtM2UpLmNhbGwodGhpcyxgLS1odC0ke2x9YCk7cmV0dXJuIG51bGwhPT1kPyhfYyhaRSx0aGlzKVtgLS1odC0ke2x9YF09ZCxkKTp2b2lkIDB9Z2V0U3R5bGVGb3JURChsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPV9jKFdFLHRoaXMpKXx8dm9p''@;'; put 'put ''ZCAwPT09YT92b2lkIDA6YS50ZFtsXX1nZXREZWZhdWx0Um93SGVpZ2h0KCl7aWYoX2Moam0sdGhpcykpcmV0dXJuIDIzO2NvbnN0IGw9bDMoT3AsdGhpcyxEZXQpLmNhbGwodGhpcyk7cmV0dXJuIWwmJnBvKF9jKFM1LHRoaXMpLCJodC13cmFwcGVyIik/KGlsKGBUaGUgIiR7X2MoTHAsdGhp''@;'; put 'put ''cyl9IiB0aGVtZSBpcyBlbmFibGVkLCBidXQgaXRzIHN0eWxlc2hlZXRzIGFyZSBtaXNzaW5nIG9yIG5vdCBpbXBvcnRlZCBjb3JyZWN0bHkuIEltcG9ydCB0aGUgY29ycmVjdCBDU1MgZmlsZXMgaW4gb3JkZXIgdG8gdXNlIHRoYXQgdGhlbWUuYCksczMoam0sdGhpcywhMCksdGhpcy51c2VU''@;'; put 'put ''aGVtZSgpLDIzKTpsfWFyZUNlbGxzQm9yZGVyQm94KCl7cmV0dXJuImJvcmRlci1ib3giPT09dGhpcy5nZXRTdHlsZUZvclREKCJib3gtc2l6aW5nIil9dXNlVGhlbWUobCl7aWYoIWwpcmV0dXJuIGwzKE9wLHRoaXMsZzNlKS5jYWxsKHRoaXMpLHMzKGptLHRoaXMsITApLHZvaWQgczMoTHAs''@;'; put 'put ''dGhpcyxsfHx2b2lkIDApO2wmJmwhPT1fYyhMcCx0aGlzKSYmKF9jKExwLHRoaXMpJiZsMyhPcCx0aGlzLE9ldCkuY2FsbCh0aGlzKSxzMyhMcCx0aGlzLGwpLHMzKGptLHRoaXMsITEpLGwzKE9wLHRoaXMsSWV0KS5jYWxsKHRoaXMpLGwzKE9wLHRoaXMsZzNlKS5jYWxsKHRoaXMpKX1nZXRU''@;'; put 'put ''aGVtZU5hbWUoKXtyZXR1cm4gX2MoTHAsdGhpcyl9cmVtb3ZlQ2xhc3NOYW1lcygpe3BvKF9jKFM1LHRoaXMpLF9jKExwLHRoaXMpKSYmbG8oX2MoUzUsdGhpcyksX2MoTHAsdGhpcykpfX1mdW5jdGlvbiBEZXQoKXtjb25zdCBjPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgibGluZS1oZWln''@;'; put 'put ''aHQiKSxsPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC12ZXJ0aWNhbC1wYWRkaW5nIiksYT1NYXRoLmNlaWwocGFyc2VGbG9hdCh0aGlzLmdldFN0eWxlRm9yVEQoImJvcmRlci1ib3R0b20td2lkdGgiKSkpO3JldHVybiBudWxsPT09Y3x8bnVsbD09PWx8fGlzTmFOKGEpP251bGw6''@;'; put 'put ''YysyKmwrYX1mdW5jdGlvbiBJZXQoKXtsbyhfYyhTNSx0aGlzKSwvaHQtdGhlbWUtLiovZyksVGkoX2MoUzUsdGhpcyksX2MoTHAsdGhpcykpfWZ1bmN0aW9uIGczZSgpe3RoaXMuaXNDbGFzc2ljVGhlbWUoKXx8czMoeEssdGhpcyxnZXRDb21wdXRlZFN0eWxlKF9jKFM1LHRoaXMpKSk7Y29u''@;'; put 'put ''c3QgYz1sMyhPcCx0aGlzLFJldCkuY2FsbCh0aGlzLFsiYm94LXNpemluZyIsImJvcmRlci1ib3R0b20td2lkdGgiXSk7X2MoV0UsdGhpcykudGQ9ey4uLl9jKFdFLHRoaXMpLnRkLCJib3gtc2l6aW5nIjpjWyJib3gtc2l6aW5nIl0sImJvcmRlci1ib3R0b20td2lkdGgiOmNbImJvcmRlci1i''@;'; put 'put ''b3R0b20td2lkdGgiXX19ZnVuY3Rpb24gUmV0KGMpe2NvbnN0IGw9X2MoRUssdGhpcyksYT1fYyhTNSx0aGlzKSxkPWwuY3JlYXRlRWxlbWVudCgidGFibGUiKSxoPWwuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxmPWwuY3JlYXRlRWxlbWVudCgidHIiKSx2PWwuY3JlYXRlRWxlbWVudCgidHIi''@;'; put 'put ''KSxNPWwuY3JlYXRlRWxlbWVudCgidGQiKTt2LmFwcGVuZENoaWxkKE0pLGguYXBwZW5kQ2hpbGQoZiksaC5hcHBlbmRDaGlsZCh2KSxkLmFwcGVuZENoaWxkKGgpLGEuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgRD1nZXRDb21wdXRlZFN0eWxlKE0pLFo9e307cmV0dXJuIGMuZm9yRWFjaChyZT0+''@;'; put 'put ''e1pbcmVdPUQuZ2V0UHJvcGVydHlWYWx1ZShyZSl9KSxhLnJlbW92ZUNoaWxkKGQpLFp9ZnVuY3Rpb24gTGV0KGMpe2NvbnN0IGw9TWF0aC5jZWlsKHBhcnNlRmxvYXQobDMoT3AsdGhpcyxtM2UpLmNhbGwodGhpcyxjKSkpO3JldHVybiBOdW1iZXIuaXNOYU4obCk/bnVsbDpsfWZ1bmN0aW9u''@;'; put 'put ''IG0zZShjKXtjb25zdCBsPV9jKHhLLHRoaXMpLmdldFByb3BlcnR5VmFsdWUoYyk7cmV0dXJuIiI9PT1sP251bGw6bH1mdW5jdGlvbiBPZXQoKXtzMyhXRSx0aGlzLHt9KSxzMyhaRSx0aGlzLHt9KSxzMyhqbSx0aGlzLCEwKX1jbGFzcyBQZXQgZXh0ZW5kcyBwS3tjb25zdHJ1Y3RvcihsLGEp''@;'; put 'put ''e3N1cGVyKGwsbmV3IFZRZShhKSksdGhpcy5zdHlsZXNIYW5kbGVyPW5ldyBrZXQodGhpcy5kb21CaW5kaW5ncyk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLnd0VGFibGU9bmV3IEJRZSh0aGlzLmdldFRhYmxlRGFvKCksZCx0aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PW5ldyB5ZXQodGhpcy5nZXRWaWV3cG9ydERhbygpLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSksdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPW5ldyBF''@;'; put 'put ''ZXQodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNlbGVjdGlvbnMiKSksdGhpcy53dEV2ZW50PW5ldyBTZmUoZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyKSx0aGlzLnd0T3Zl''@;'; put 'put ''cmxheXM9bmV3IEZRZSh0aGlzLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9ZXhwb3J0U2V0dGluZ3NBc0Ns''@;'; put 'put ''YXNzTmFtZXMoKXtjb25zdCBhPVtdLGQ9W107WG8oe3Jvd0hlYWRlcnM6Imh0Um93SGVhZGVycyIsY29sdW1uSGVhZGVyczoiaHRDb2x1bW5IZWFkZXJzIn0sKGgsZik9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhmKS5sZW5ndGgmJmQucHVzaChoKSxhLnB1c2goaCl9KSxsbyh0aGlz''@;'; put 'put ''Lnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGEpLFRpKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsZCl9Z2V0T3ZlcmxheUJ5TmFtZShsKXt2YXIgYTtpZighT2ZlLmluY2x1ZGVzKGwpKXJldHVybiBudWxsO2NvbnN0IGQ9bC5yZXBsYWNlKC9fKFthLXpd''@;'; put 'put ''KS9nLGg9PmhbMV0udG9VcHBlckNhc2UoKSk7cmV0dXJuIG51bGwhPT0oYT10aGlzLnd0T3ZlcmxheXNbYCR7ZH1PdmVybGF5YF0pJiZ2b2lkIDAhPT1hP2E6bnVsbH1nZXRWaWV3cG9ydERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgdG9wT3Zlcmxh''@;'; put 'put ''eVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRh''@;'; put 'put ''aW5lcn0sZ2V0IHRvcFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCB0b3BQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IGlu''@;'; put 'put ''bGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBh''@;'; put 'put ''cmVudE9mZnNldCgpfSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgYm90dG9tT3ZlcmxheSgpe3JldHVybiBsLnd0T3Zlcmxh''@;'; put 'put ''eXMuYm90dG9tT3ZlcmxheX19fX1jbGFzcyBUS3tjb25zdHJ1Y3RvcihsKXtsIGluc3RhbmNlb2YgcEs/dGhpcy5fd290PWw6dGhpcy5faW5pdEZyb21TZXR0aW5ncyhsKX1faW5pdEZyb21TZXR0aW5ncyhsKXtsLmZhY2FkZT1hPT57Y29uc3QgZD1uZXcgVEsoYSk7cmV0dXJuKCk9PmR9LHRo''@;'; put 'put ''aXMuX3dvdD1uZXcgUGV0KGwudGFibGUsbCl9Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5fd290Lmd1aWR9Z2V0IHJvb3REb2N1bWVudCgpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50fWdldCByb290V2luZG93KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5n''@;'; put 'put ''cy5yb290V2luZG93fWdldCB3dFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzfWdldCBjbG9uZVNvdXJjZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2V9Z2V0IGNsb25lT3ZlcmxheSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5fWdldCBzZWxlY3Rp''@;'; put 'put ''b25NYW5hZ2VyKCl7cmV0dXJuIHRoaXMuX3dvdC5zZWxlY3Rpb25NYW5hZ2VyfWdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC53dFZpZXdwb3J0fWdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIHRoaXMuX3dvdC53dE92ZXJsYXlzfWdldCB3dFRhYmxlKCl7cmV0dXJuIHRoaXMuX3dv''@;'; put 'put ''dC53dFRhYmxlfWdldCB3dEV2ZW50KCl7cmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50fWdldCB3dFNjcm9sbCgpe3JldHVybiB0aGlzLl93b3Qud3RTY3JvbGx9Z2V0IGRyYXduKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3bn1zZXQgZHJhd24obCl7dGhpcy5fd290LmRyYXduPWx9Z2V0IGFjdGl2''@;'; put 'put ''ZU92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5hY3RpdmVPdmVybGF5TmFtZX1nZXQgZHJhd0ludGVycnVwdGVkKCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWR9c2V0IGRyYXdJbnRlcnJ1cHRlZChsKXt0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkPWx9Z2V0IGxhc3RN''@;'; put 'put ''b3VzZU92ZXIoKXtyZXR1cm4gdGhpcy5fd290Lmxhc3RNb3VzZU92ZXJ9c2V0IGxhc3RNb3VzZU92ZXIobCl7dGhpcy5fd290Lmxhc3RNb3VzZU92ZXI9bH1nZXQgbW9tZW50dW1TY3JvbGxpbmcoKXtyZXR1cm4gdGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nfXNldCBtb21lbnR1bVNjcm9s''@;'; put 'put ''bGluZyhsKXt0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmc9bH1nZXQgdG91Y2hBcHBsaWVkKCl7cmV0dXJuIHRoaXMuX3dvdC50b3VjaEFwcGxpZWR9c2V0IHRvdWNoQXBwbGllZChsKXt0aGlzLl93b3QudG91Y2hBcHBsaWVkPWx9Z2V0IGRvbUJpbmRpbmdzKCl7cmV0dXJuIHRoaXMuX3dv''@;'; put 'put ''dC5kb21CaW5kaW5nc31nZXQgZXZlbnRMaXN0ZW5lcnMoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TGlzdGVuZXJzfXNldCBldmVudExpc3RlbmVycyhsKXt0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnM9bH1nZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudE1hbmFnZXJ9''@;'; put 'put ''Z2V0IHN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gdGhpcy5fd290LnN0eWxlc0hhbmRsZXJ9Y3JlYXRlQ2VsbENvb3JkcyhsLGEpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbENvb3JkcyhsLGEpfWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsUmFu''@;'; put 'put ''Z2UobCxhLGQpfWRyYXcoKXtyZXR1cm4gdGhpcy5fd290LmRyYXcoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksdGhpc31nZXRDZWxsKGwpe3JldHVybiB0aGlzLl93b3QuZ2V0Q2VsbChsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFs''@;'; put 'put ''bHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpfWdldFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRWaWV3cG9ydCgpfWdldE92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5j''@;'; put 'put ''bG9uZU92ZXJsYXk/dGhpcy5fd290LmNsb25lT3ZlcmxheS50eXBlOiJtYXN0ZXIifWdldE92ZXJsYXlCeU5hbWUobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRPdmVybGF5QnlOYW1lKGwpfWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuX3dvdC5leHBvcnRTZXR0aW5n''@;'; put 'put ''c0FzQ2xhc3NOYW1lcygpfXVwZGF0ZShsLGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy51cGRhdGUobCxhKSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhsLGEsZCxoLGYpfWhhc1NldHRpbmcobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3dvdC53dFNldHRpbmdzLmhhc1NldHRpbmcobCl9ZGVzdHJveSgpe3RoaXMuX3dvdC5kZXN0cm95KCl9fWZ1bmN0aW9uIHYzZShjKXtsZXR7aXNTaGlmdEtleTpsLGlzTGVmdENsaWNrOmEsaXNSaWdodENsaWNrOmQsY29vcmRzOmgsc2VsZWN0aW9uOmYsY29udHJvbGxlcjp2LGNl''@;'; put 'put ''bGxDb29yZHNGYWN0b3J5Ok19PWM7Y29uc3QgRD1mLmlzU2VsZWN0ZWQoKT9mLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6bnVsbCxaPWYuaXNTZWxlY3RlZEJ5Q29ybmVyKCkscmU9Zi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihmLm1hcmtTb3VyY2UoIm1vdXNlIiksbCYmRClo''@;'; put 'put ''LnJvdz49MCYmaC5jb2w+PTAmJiF2LmNlbGw/Zi5zZXRSYW5nZUVuZChoKTooWnx8cmUpJiZoLnJvdz49MCYmaC5jb2w+PTAmJiF2LmNlbGw/Zi5zZXRSYW5nZUVuZChNKGgucm93LGguY29sKSk6WiYmaC5yb3c8MCYmIXYuY29sdW1uP2Yuc2V0UmFuZ2VFbmQoTShELnRvLnJvdyxoLmNvbCkp''@;'; put 'put ''OnJlJiZoLmNvbDwwJiYhdi5yb3c/Zi5zZXRSYW5nZUVuZChNKGgucm93LEQudG8uY29sKSk6KCFaJiYhcmUmJmguY29sPDB8fFomJmguY29sPDApJiYhdi5yb3c/Zi5zZWxlY3RSb3dzKE1hdGgubWF4KEQuZnJvbS5yb3csMCksaC5yb3csaC5jb2wpOighWiYmIXJlJiZoLnJvdzwwfHxyZSYm''@;'; put 'put ''aC5yb3c8MCkmJiF2LmNvbHVtbiYmZi5zZWxlY3RDb2x1bW5zKE1hdGgubWF4KEQuZnJvbS5jb2wsMCksaC5jb2wsaC5yb3cpO2Vsc2V7Y29uc3QgY2U9IWYuaW5JblNlbGVjdGlvbihoKSxiZT1hfHxkJiZjZTtoLnJvdzwwJiZoLmNvbD49MCYmIXYuY29sdW1uP2JlJiZmLnNlbGVjdENvbHVt''@;'; put 'put ''bnMoaC5jb2wsaC5jb2wsaC5yb3cpOmguY29sPDAmJmgucm93Pj0wJiYhdi5yb3c/YmUmJmYuc2VsZWN0Um93cyhoLnJvdyxoLnJvdyxoLmNvbCk6aC5jb2w+PTAmJmgucm93Pj0wJiYhdi5jZWxsP2JlJiZmLnNldFJhbmdlU3RhcnQoaCk6aC5jb2w8MCYmaC5yb3c8MCYmZi5zZWxlY3RBbGwo''@;'; put 'put ''ITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwLGZvY3VzUG9zaXRpb246e3JvdzowLGNvbDowfX0pfWYubWFya0VuZFNvdXJjZSgpfWNvbnN0IEhldD1uZXcgTWFwKFtbIm1vdXNlZG93biIsdjNlXSxbIm1vdXNlb3ZlciIsZnVuY3Rpb24gRmV0KGMpe2xldHtpc0xlZnRDbGljazps''@;'; put 'put ''LGNvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1jO2lmKCFsKXJldHVybjtjb25zdCB2PWQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT1kLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLEQ9ZC50YWJsZVByb3BzLmNvdW50Q29scygpLFo9''@;'; put 'put ''ZC50YWJsZVByb3BzLmNvdW50Um93cygpO2QubWFya1NvdXJjZSgibW91c2UiKSxNJiYhaC5jb2x1bW4/ZC5zZXRSYW5nZUVuZChmKFotMSxhLmNvbCkpOnYmJiFoLnJvdz9kLnNldFJhbmdlRW5kKGYoYS5yb3csRC0xKSk6aC5jZWxsfHxkLnNldFJhbmdlRW5kKGEpLGQubWFya0VuZFNvdXJj''@;'; put 'put ''ZSgpfV0sWyJ0b3VjaHN0YXJ0Iix2M2VdXSk7ZnVuY3Rpb24gYjNlKGMsbCl7bGV0e2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1sO0hldC5nZXQoYy50eXBlKSh7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29y''@;'; put 'put ''ZHNGYWN0b3J5OmYsaXNTaGlmdEtleTpjLnNoaWZ0S2V5LGlzTGVmdENsaWNrOlVPKGMpfHwidG91Y2hzdGFydCI9PT1jLnR5cGUsaXNSaWdodENsaWNrOkhtKGMpfSl9Y29uc3QgeTNlPW5ldyBXZWFrTWFwLEFLPVN5bWJvbCgicm9vdEluc3RhbmNlIik7ZnVuY3Rpb24gY1AoYyl7cmV0dXJu''@;'; put 'put ''IHkzZS5oYXMoYyl9ZnVuY3Rpb24gem0oYyxsLGEpe18zZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gXzNlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX1mdW5jdGlvbiBVbShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gamV0KGMpe3ZhciBsPWZ1bmN0aW9uIHpldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gVHUoYyxsKXtyZXR1cm4gYy5nZXQoQ18oYyxsKSl9''@;'; put 'put ''ZnVuY3Rpb24gQmQoYyxsLGEpe3JldHVybiBjLnNldChDXyhjLGwpLGEpLGF9ZnVuY3Rpb24gQ18oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxl''@;'; put 'put ''bWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBrSz1uZXcgV2Vha01hcCx1UD1uZXcgV2Vha01hcCxkUD1uZXcgV2Vha01hcCxNNT1uZXcgV2Vha01hcCxjMz1uZXcgV2Vha01hcCxESz1uZXcgV2Vha01hcCxJSz1uZXcgV2Vha01hcCxTXz1uZXcgV2Vha01hcCxZRT1u''@;'; put 'put ''ZXcgV2Vha1NldDtmdW5jdGlvbiB3M2UoKXtyZXR1cm4gcGFyc2VJbnQodGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKFJPKClbMF0pLDEwKX1mdW5jdGlvbiBaZXQoYyl7Y29uc3QgbD1DXyhZRSx0aGlzLHczZSkuY2FsbCh0aGlzKStjO3ZvKHRoaXMuaG90LnJvb3RFbGVtZW50''@;'; put 'put ''LC4uLlJPKGwpKX1mdW5jdGlvbiBXZXQoKXtjb25zdCBjPXRoaXMuaG90LnJvb3RFbGVtZW50O3RoaXMuaGFzVmVydGljYWxTY3JvbGwoKT9UaShjLCJodEhhc1Njcm9sbFkiKTpsbyhjLCJodEhhc1Njcm9sbFkiKSx0aGlzLmhhc0hvcml6b250YWxTY3JvbGwoKT9UaShjLCJodEhhc1Njcm9s''@;'; put 'put ''bFgiKTpsbyhjLCJodEhhc1Njcm9sbFgiKX1jb25zdCBZZXQ9Y2xhc3MgVWV0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBCZXQoYyxsKXtfM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsWUUpLFVtKHRoaXMsImhvdCIsdm9pZCAwKSxVbSh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksVW0o''@;'; put 'put ''dGhpcywic2V0dGluZ3MiLHZvaWQgMCksVW0odGhpcywiVEhFQUQiLHZvaWQgMCksVW0odGhpcywiVEJPRFkiLHZvaWQgMCksVW0odGhpcywiX3d0Iix2b2lkIDApLFVtKHRoaXMsImFjdGl2ZVd0Iix2b2lkIDApLHptKHRoaXMsa0ssMCksem0odGhpcyx1UCwwKSxVbSh0aGlzLCJwb3N0cG9u''@;'; put 'put ''ZWRBZGp1c3RFbGVtZW50c1NpemUiLCExKSx6bSh0aGlzLGRQLCExKSx6bSh0aGlzLE01LHZvaWQgMCksem0odGhpcyxjMyx2b2lkIDApLHptKHRoaXMsREssMCksem0odGhpcyxJSywwKSx6bSh0aGlzLFNfLG51bGwpLHRoaXMuaG90PWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGoyKHRoaXMu''@;'; put 'put ''aG90KSx0aGlzLnNldHRpbmdzPXRoaXMuaG90LmdldFNldHRpbmdzKCksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVXYWxrb250YWJsZSgpfXJlbmRlcigpe2lmKCF0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgpKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcjt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyIixsKSx0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSYmKHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSExLHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLHRoaXMu''@;'; put 'put ''X3d0LmRyYXcoIWwpLENfKFlFLHRoaXMsV2V0KS5jYWxsKHRoaXMpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbmRlciIsbCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSExfX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgpP3RoaXMucG9zdHBv''@;'; put 'put ''bmVkQWRqdXN0RWxlbWVudHNTaXplPSEwOnRoaXMuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCl9Z2V0Q2VsbEF0Q29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLl93dC5nZXRDZWxsKGwsYSk7cmV0dXJuIGQ8MD9udWxsOmR9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0''@;'; put 'put ''aGlzLl93dC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmll''@;'; put 'put ''d3BvcnRWZXJ0aWNhbGx5KGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWwuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2QmJmwuc2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsc3R5bGUiLGQpLFRpKGwsImhhbmRzb250''@;'; put 'put ''YWJsZSIpLEJkKGMzLHRoaXMsYS5jcmVhdGVFbGVtZW50KCJUQUJMRSIpKSxUaShUdShjMyx0aGlzKSwiaHRDb3JlIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSYmVGkoVHUoYzMsdGhpcyksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhp''@;'; put 'put ''cy5zZXR0aW5ncy5hcmlhVGFncyYmKHZvKFR1KGMzLHRoaXMpLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLHZvKGwsW1sicm9sZSIsInRyZWVncmlkIl0sTTJlKC0xKSxSTyh0aGlzLmhvdC5jb3VudENvbHMoKSksWyJhcmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiXV0pKSx0aGlzLlRI''@;'; put 'put ''RUFEPWEuY3JlYXRlRWxlbWVudCgiVEhFQUQiKSxUdShjMyx0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLlRIRUFEKSx0aGlzLlRCT0RZPWEuY3JlYXRlRWxlbWVudCgiVEJPRFkiKSxUdShjMyx0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSx0aGlzLmhvdC50YWJsZT1UdShjMyx0aGlzKSx0''@;'; put 'put ''aGlzLmhvdC5jb250YWluZXIuaW5zZXJ0QmVmb3JlKFR1KGMzLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5maXJzdENoaWxkKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmEsc2VsZWN0aW9uOmQscm9vdFdpbmRvdzpofT10aGlzLmhvdCxmPWEu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixNPT57QmQoZFAsdGhpcywhMCksdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFyZ2V0KXx8KEMkKGgpLE0ucHJldmVudERlZmF1bHQoKSxoLmZvY3VzKCkpfSksdGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+e0JkKGRQLHRoaXMsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLE09PntUdShkUCx0aGlzKSYmIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChNLnRh''@;'; put 'put ''cmdldCkmJih0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZDJChoKSxNLnByZXZlbnREZWZhdWx0KCkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJrZXl1cCIsTT0+e2QuaXNJblByb2dyZXNzKCkmJiFNLnNoaWZ0S2V5JiZkLmZpbmlzaCgpfSksdGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZXVwIixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmVU8oTSkmJmQuZmluaXNoKCksQmQoTTUsdGhpcywhMSk7Y29uc3QgRD1GTyhhLmFjdGl2ZUVsZW1lbnQpO0NFKGEuYWN0aXZlRWxlbWVudCkmJiFEfHwoRHx8IWQuaXNTZWxl''@;'; put 'put ''Y3RlZCgpJiYhZC5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSYmIWwuY29udGFpbnMoTS50YXJnZXQpJiYhSG0oTSkpJiZ0aGlzLmhvdC51bmxpc3RlbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJjb250ZXh0bWVudSIsTT0+e2QuaXNJblByb2dyZXNzKCkmJkht''@;'; put 'put ''KE0pJiYoZC5maW5pc2goKSxCZChNNSx0aGlzLCExKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsInRvdWNoZW5kIiwoKT0+e2QuaXNJblByb2dyZXNzKCkmJmQuZmluaXNoKCksQmQoTTUsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKGYsIm1vdXNlZG93biIsTT0+e2NvbnN0IEQ9TS50YXJnZXQsWj1NLnh8fE0uY2xpZW50WCxyZT1NLnl8fE0uY2xpZW50WTtsZXQgY2U9TS50YXJnZXQ7aWYoVHUoTTUsdGhpcyl8fCFsfHwhdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7aG9sZGVyOmJlfT10aGlzLl93dC53dFRhYmxl''@;'; put 'put ''O2lmKGNlPT09YmUpe2NvbnN0IEJlPWYwKGEpO2lmKGEuZWxlbWVudEZyb21Qb2ludChaK0JlLHJlKSE9PWJlfHxhLmVsZW1lbnRGcm9tUG9pbnQoWixyZStCZSkhPT1iZSlyZXR1cm59ZWxzZSBmb3IoO2NlIT09Zjspe2lmKG51bGw9PT1jZSl7aWYoTS5pc1RhcmdldFdlYkNvbXBvbmVudCli''@;'; put 'put ''cmVhaztyZXR1cm59aWYoY2U9PT1sKXJldHVybjtjZT1jZS5wYXJlbnROb2RlfSgiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM/dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMoRCk6dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xp''@;'; put 'put ''Y2tEZXNlbGVjdHMpP3RoaXMuaG90LmRlc2VsZWN0Q2VsbCgpOnRoaXMuaG90LmRlc3Ryb3lFZGl0b3IoITEsITEpfSk7bGV0IHY9VjcoaCk7Zm9yKDtudWxsIT09djspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih2LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY2xpY2si''@;'; put 'put ''LCgpPT57dGhpcy5ob3QudW5saXN0ZW4oKX0pLHY9Vjcodik7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihUdShjMyx0aGlzKSwic2VsZWN0c3RhcnQiLE09Pnt0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9ufHxDRShNLnRhcmdldCl8fE0ucHJldmVudERlZmF1bHQo''@;'; put 'put ''KX0pfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChhLGQpKX10cmFuc2xhdGVGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZVRvVmlzdWFsSW5kZXgobCxhKXtsZXQgZD1sPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCk6bCxoPWE+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphO3Jl''@;'; put 'put ''dHVybiBudWxsPT09ZCYmKGQ9bCksbnVsbD09PWgmJihoPWEpLFtkLGhdfWNvdW50UmVuZGVyYWJsZUluZGV4ZXMobCxhKXtjb25zdCBkPU1hdGgubWluKGwuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhKSxoPWwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQtMSwtMSk7cmV0dXJu''@;'; put 'put ''IG51bGw9PT1oPzA6bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpKzF9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhDb2xzKX1jb3VudFJl''@;'; put 'put ''bmRlcmFibGVSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEs''@;'; put 'put ''dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRl''@;'; put 'put ''cmFibGVDb2x1bW5zKCkpfWNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsZCxoKXtpZihpc05hTihsKXx8bDwwKXJldHVybiAwO2NvbnN0IGY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKSx2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZighTnVtYmVyLmlzSW50''@;'; put 'put ''ZWdlcih2KSlyZXR1cm4gMDtsZXQgTT0wO3JldHVybiBhPDA/TT12KzE6YT4wJiYoTT1oLXYpLE19Y291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1u''@;'; put 'put ''c1N0YXJ0LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1Rv''@;'; put 'put ''cCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpLGE9TWF0aC5tYXgobC1wYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRv''@;'; put 'put ''bSwxMCksMCk7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGEsMSl9Y291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobCxhKXtsZXQgZD0wO2ZvcihsZXQgaD1sO2g8PWE7aCsrKW51bGwhPT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJv''@;'; put 'put ''bVZpc3VhbEluZGV4KGgpJiYoZCs9MSk7cmV0dXJuIGR9Y291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UobCxhKXtsZXQgZD0wO2ZvcihsZXQgaD1sO2g8PWE7aCsrKW51bGwhPT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpJiYoZCs9MSk7''@;'; put 'put ''cmV0dXJuIGR9Z2V0U3R5bGVzSGFuZGxlcigpe3JldHVybiB0aGlzLl93dC5zdHlsZXNIYW5kbGVyfWdldERlZmF1bHRSb3dIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCl9YWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChsKXt2''@;'; put 'put ''YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmVGkoZCxsKX1yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1lbnQo''@;'; put 'put ''bCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5ob3Qucm9vdEVsZW1lbnQucGFyZW50Tm9kZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO2QmJmxvKGQsbCl9aXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92''@;'; put 'put ''ZXJsYXlzKCl7Y29uc3QgbD10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCkrdGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLGE9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCk7cmV0dXJuIHRoaXMuaG90LmNvdW50UmVuZGVyZWRSb3dzKCk+''@;'; put 'put ''bCYmdGhpcy5ob3QuY291bnRSZW5kZXJlZENvbHMoKT5hfWluaXRpYWxpemVXYWxrb250YWJsZSgpe2NvbnN0IGw9e2FyaWFUYWdzOnRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MscnRsTW9kZTp0aGlzLmhvdC5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmhvdC5nZXRQbHVnaW4o''@;'; put 'put ''ImF1dG9Sb3dTaXplIikmJnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKS5pc0VuYWJsZWQoKSx0YWJsZTpUdShjMyx0aGlzKSxpc0RhdGFWaWV3SW5zdGFuY2U6KCk9PmNQKHRoaXMuaG90KSxwcmV2ZW50T3ZlcmZsb3c6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudE92ZXJmbG93''@;'; put 'put ''LHByZXZlbnRXaGVlbDooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50V2hlZWwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6KCk9PnRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6KCk9PnRo''@;'; put 'put ''aXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQsZGF0YTooZix2KT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpKSx0b3RhbFJvd3M6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlUm93''@;'; put 'put ''cygpLHRvdGFsQ29sdW1uczooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksZml4ZWRDb2x1bW5zU3RhcnQ6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLGZpeGVkUm93c1RvcDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLGZp''@;'; put 'put ''eGVkUm93c0JvdHRvbTooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydD4wfHxsLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BP''@;'; put 'put ''dmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcD4wfHxsLmNvbHVtbkhlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT4wLG1pblNwYXJlUm93czooKT0+dGhpcy5zZXR0aW5ncy5taW5T''@;'; put 'put ''cGFyZVJvd3MscmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3MscmVuZGVyQWxsQ29sdW1uczp0aGlzLnNldHRpbmdzLnJlbmRlckFsbENvbHVtbnMscm93SGVhZGVyczooKT0+e2NvbnN0IGY9W107cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmZi5wdXNo''@;'; put 'put ''KCh2LE0pPT57Y29uc3QgRD12Pj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6djt0aGlzLmFwcGVuZFJvd0hlYWRlcihELE0pfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixmKSxCZCh1UCx0''@;'; put 'put ''aGlzLGYubGVuZ3RoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZDXyhZRSx0aGlzLHczZSkuY2FsbCh0aGlzKT09PXRoaXMuaG90LmNvdW50Q29scygpJiZDXyhZRSx0aGlzLFpldCkuY2FsbCh0aGlzLFR1KHVQLHRoaXMpKSxmfSxjb2x1bW5IZWFkZXJzOigpPT57Y29uc3Qg''@;'; put 'put ''Zj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBEPXY+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kQ29sSGVhZGVyKEQsTSl9KSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGYpLEJkKGtLLHRoaXMsZi5sZW5ndGgpLGZ9LGNvbHVtbldpZHRoOmY9Pntjb25zdCB2PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMuaG90''@;'; put 'put ''LmdldENvbFdpZHRoKG51bGw9PT12P2Y6dil9LHJvd0hlaWdodDpmPT57Y29uc3Qgdj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpO3JldHVybiB0aGlzLmhvdC5nZXRSb3dIZWlnaHQobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0QnlPdmVy''@;'; put 'put ''bGF5TmFtZTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxEPW51bGw9PT1NP2Y6TTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLHRoaXMuaG90LmdldFJv''@;'; put 'put ''d0hlaWdodChEKSxELHYpfSxjZWxsUmVuZGVyZXI6KGYsdixNKT0+e2NvbnN0W0QsWl09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSxyZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsRCxaLCExLCJtZXRhIik7bGV0IGNlPUQs''@;'; put 'put ''YmU9WjtBcnJheS5pc0FycmF5KHJlKSYmKFtjZSxiZV09cmUpO2NvbnN0IEVlPXRoaXMuaG90LmdldENlbGxNZXRhKGNlLGJlKSxCZT10aGlzLmhvdC5jb2xUb1Byb3AoYmUpO2xldCBxZT10aGlzLmhvdC5nZXREYXRhQXRSb3dQcm9wKGNlLEJlKTt0aGlzLmhvdC5oYXNIb29rKCJiZWZvcmVW''@;'; put 'put ''YWx1ZVJlbmRlciIpJiYocWU9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZhbHVlUmVuZGVyIixxZSxFZSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXJlciIsTSxELFosQmUscWUsRWUpLHRoaXMuaG90LmdldENlbGxSZW5kZXJlcihFZSkodGhpcy5ob3QsTSxELFosQmUscWUs''@;'; put 'put ''RWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbmRlcmVyIixNLEQsWixCZSxxZSxFZSl9LHNlbGVjdGlvbnM6dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOigpPT50aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uLG9uV2luZG93''@;'; put 'put ''UmVzaXplOigpPT57dGhpcy5ob3QmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0sb25Db250YWluZXJFbGVtZW50UmVzaXplOigpPT57dGhpcy5ob3QmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmejcodGhpcy5ob3Qucm9vdEVsZW1lbnQpJiZ0''@;'; put 'put ''aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNlbGxNb3VzZURvd246KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModikscmU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5ob3QubGlzdGVuKCksdGhpcy5h''@;'; put 'put ''Y3RpdmVXdD1ELEJkKE01LHRoaXMsITApLEJkKFNfLHRoaXMse3g6Zi5jbGllbnRYLHk6Zi5jbGllbnRZfSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZixaLE0scmUpLCFGbShmKSYmKGIzZShmLHtjb29yZHM6WixzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0''@;'; put 'put ''aW9uLGNvbnRyb2xsZXI6cmUsY2VsbENvb3Jkc0ZhY3Rvcnk6KGNlLGJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY2UsYmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VEb3duIixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvbnRl''@;'; put 'put ''eHRNZW51OihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCxCZChNNSx0aGlzLCExKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJnRoaXMuaG90LnNlbGVjdGlvbi5maW5pc2go''@;'; put 'put ''KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGYsWixNKSwhRm0oZikmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU91dDooZix2LE0sRCk9Pntj''@;'; put 'put ''b25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3V0IixmLFosTSksIUZtKGYpJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdXQi''@;'; put 'put ''LGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdmVyOihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpLHJlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuYWN0aXZlV3Q9RCx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmLFosTSxyZSksIUZtKGYpJiYoVHUoTTUsdGhpcykmJighVHUoU18sdGhpcyl8fFR1KFNfLHRoaXMpLnghPT1mLmNsaWVudFh8fFR1KFNfLHRoaXMpLnkhPT1mLmNsaWVudFkpJiZiM2UoZix7Y29vcmRzOlosc2VsZWN0aW9u''@;'; put 'put ''OnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOnJlLGNlbGxDb29yZHNGYWN0b3J5OihjZSxiZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGNlLGJlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5f''@;'; put 'put ''d3QsQmQoU18sdGhpcyxudWxsKSl9LG9uQ2VsbE1vdXNlVXA6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixmLFosTSks''@;'; put 'put ''IUZtKGYpJiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZVVwIixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjpmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsZil9LG9uQ2VsbENvcm5lckRibENsaWNrOmY9PntmLnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGYpfSxiZWZvcmVEcmF3OihmLHYpPT50aGlzLmJlZm9yZVJlbmRlcihm''@;'; put 'put ''LHYpLG9uRHJhdzpmPT50aGlzLmFmdGVyUmVuZGVyKGYpLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixEPWY8MDtsZXQgWj1mO3JldHVybiBEfHwoWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgo''@;'; put 'put ''ZiksbnVsbCE9PVopPyhaPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLFosdiksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiksRD9aOk0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaKSk6Zn0sb25CZWZvcmVW''@;'; put 'put ''aWV3cG9ydFNjcm9sbEhvcml6b250YWxseTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsRD1mPDA7bGV0IFo9ZjtyZXR1cm4gRHx8KFo9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLG51bGwhPT1aKT8oWj10aGlzLmhvdC5ydW5Ib29rcygiYmVm''@;'; put 'put ''b3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLFosdiksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiksRD9aOk0uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaKSk6Zn0sb25TY3JvbGxWZXJ0aWNhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyU2Nyb2xsVmVydGljYWxseSIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbCIpfSxvblNjcm9sbEhvcml6b250YWxseTooKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbCIpfSxvbkJl''@;'; put 'put ''Zm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKSxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjooZix2LE0pPT57Y29uc3QgRD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixaPWY8MDtsZXQgcmU9Zjta''@;'; put 'put ''fHwocmU9RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKTtjb25zdCBjZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixyZSx2LE0pO3JldHVybiBaP2NlOkQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChjZSwxKSl9LG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLFo9ZjwwO2xldCByZT1mO1p8fChyZT1ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IGNlPXRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLHJlLHYsTSk7cmV0dXJuIFo/Y2U6RC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpKX0sb25BZnRlckRyYXdTZWxlY3Rpb246KGYsdixNKT0+''@;'; put 'put ''e2xldCBEO2NvbnN0W1oscmVdPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdiksY2U9dGhpcy5ob3Quc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihjZS5zaXplKCk+MCl7Y29uc3QgRWU9Y2UucGVla0J5SW5kZXgoTT8/MCk7RD1bRWUuZnJvbS5y''@;'; put 'put ''b3csRWUuZnJvbS5jb2wsRWUudG8ucm93LEVlLnRvLmNvbF19cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyYXdTZWxlY3Rpb24iLFoscmUsRCxNKX0sb25CZWZvcmVEcmF3Qm9yZGVyczooZix2KT0+e2NvbnN0W00sRCxaLHJlXT1mLGNlPVt0aGlzLmhvdC5yb3dJbmRleE1hcHBl''@;'; put 'put ''ci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChaKSx0aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlKV07cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsY2Usdil9LG9uQmVmb3JlVG91Y2hTY3JvbGw6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVUb3VjaFNjcm9sbCIpLG9uQWZ0''@;'; put 'put ''ZXJNb21lbnR1bVNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTW9tZW50dW1TY3JvbGwiKSxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOmY9PnRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZiksb25Nb2RpZnlHZXRDZWxsQ29vcmRzOihmLHYsTSxEKT0+''@;'; put 'put ''e2NvbnN0IFo9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIscmU9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsY2U9dj49MD9yZS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnYsYmU9Zj49MD9aLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik6ZixFZT10aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsYmUsY2UsTSxEKTtpZihBcnJheS5pc0FycmF5KEVlKSl7Y29uc3RbQmUscWUscnQscHRdPUVlO3JldHVybltCZT49MD9aLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQmUsMSkpOkJl''@;'; put 'put ''LHFlPj0wP3JlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHFlLDEpKTpxZSxydD49MD9aLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocnQsLTEpKTpydCxwdD49MD9yZS5nZXRS''@;'; put 'put ''ZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChwdCwtMSkpOnB0XX19LG9uTW9kaWZ5R2V0Q29vcmRzRWxlbWVudDooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsRD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixaPXY+''@;'; put 'put ''PTA/RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnYscmU9Zj49MD9NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik6ZixjZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIscmUsWik7aWYoQXJyYXkuaXNBcnJheShjZSkpe2NvbnN0W2Jl''@;'; put 'put ''LEVlXT1jZTtyZXR1cm5bYmU+PTA/TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGJlLDEpKTpiZSxFZT49MD9ELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRWUsMSkpOkVlXX19''@;'; put 'put ''LHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOmY9PntsZXQgdj10aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PXYmJnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wJiYodj0xMCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291''@;'; put 'put ''bnRSZW5kZXJhYmxlUm93cygpLEQ9Zi5zdGFydFJvdyxaPWYuZW5kUm93O2lmKCJudW1iZXIiPT10eXBlb2YgdilmLnN0YXJ0Um93PU1hdGgubWF4KEQtdiwwKSxmLmVuZFJvdz1NYXRoLm1pbihaK3YsTS0xKTtlbHNlIGlmKCJhdXRvIj09PXYpe2NvbnN0IHJlPU1hdGgubWF4KDEsTWF0aC5j''@;'; put 'put ''ZWlsKFovTSoxMikpO2Yuc3RhcnRSb3c9TWF0aC5tYXgoRC1yZSwwKSxmLmVuZFJvdz1NYXRoLm1pbihaK3JlLE0tMSl9fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmKX0sdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+''@;'; put 'put ''e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCYmKHY9MTApLHY+MHx8ImF1dG8iPT09dil7Y29uc3QgTT10aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxEPWYu''@;'; put 'put ''c3RhcnRDb2x1bW4sWj1mLmVuZENvbHVtbjtpZigibnVtYmVyIj09dHlwZW9mIHYmJihmLnN0YXJ0Q29sdW1uPU1hdGgubWF4KEQtdiwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihaK3YsTS0xKSksImF1dG8iPT09dil7Y29uc3QgcmU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoWi9NKjYpKTtmLnN0''@;'; put 'put ''YXJ0Q29sdW1uPU1hdGgubWF4KEQtcmUsMCksZi5lbmRDb2x1bW49TWF0aC5taW4oWityZSxNLTEpfX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZil9LHJvd0hlYWRlcldpZHRoOigpPT50aGlzLnNldHRpbmdzLnJvd0hlYWRlcldp''@;'; put 'put ''ZHRoLGNvbHVtbkhlYWRlckhlaWdodDooKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIpO3JldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodHx8Zn19O3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVJbml0V2Fsa29udGFi''@;'; put 'put ''bGUiLGwpLHRoaXMuX3d0PW5ldyBUSyhsKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0O2NvbnN0IGE9dGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcix7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5zZXRMYXN0U2l6ZShk''@;'; put 'put ''LGgpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixmPT57Zi50YXJnZXQ9PT1hJiYzPT09Zi53aGljaCYmZi5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiY29udGV4dG1lbnUiLGY9PntmLnRh''@;'; put 'put ''cmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5''@;'; put 'put ''JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJnRoaXMuaG90LnJlbmRlcigpfSl9aXNUZXh0U2VsZWN0aW9uQWxsb3dlZChsKXtpZihDRShsKSlyZXR1cm4hMDtjb25zdCBhPUxtKGwsdGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlzLnNldHRpbmdzLmZyYWdt''@;'; put 'put ''ZW50U2VsZWN0aW9uJiZhfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpJiZhfHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5pc1NlbGVjdGVkT25seUNl''@;'; put 'put ''bGwoKSl9aXNNb3VzZURvd24oKXtyZXR1cm4gVHUoTTUsdGhpcyl9aXNTZWxlY3RlZE9ubHlDZWxsKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShsPW51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZUNlbGwoKSkm''@;'; put 'put ''JnZvaWQgMCE9PWwmJmx9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKTtyZXR1cm4gbCYmbC5pc09wZW5lZCgpfWJlZm9yZVJlbmRlcihsLGEpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxS''@;'; put 'put ''ZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1hcHBlbmRSb3dIZWFkZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFwbyhkLCJyZWxhdGl2''@;'; put 'put ''ZSIpKXJldHVybiB4cChhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3RvcigiLnJvd0hlYWRlciIpLGwsdGhpcy5ob3QuZ2V0Um93SGVhZGVyKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpo''@;'; put 'put ''fT10aGlzLmhvdCxmPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmNsYXNzTmFtZT0icmVsYXRpdmUiLHYuY2xhc3NOYW1lPSJyb3dIZWFkZXIiLHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LGwsaCksZi5hcHBlbmRDaGlsZCh2KSxhLmFwcGVuZENo''@;'; put 'put ''aWxkKGYpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5ob3QuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7Y29uc3QgZj0oKT0+e2NvbnN0IHY9bD49MD90aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGwpLmhlYWRlckNsYXNzTmFtZTpudWxsO3JldHVybiB2P3Yuc3BsaXQoIiAiKTpbXX07aWYoYS5maXJzdENoaWxkKXtj''@;'; put 'put ''b25zdCB2PWEuZmlyc3RDaGlsZDtwbyh2LCJyZWxhdGl2ZSIpPyh0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodi5xdWVyeVNlbGVjdG9yKCIuY29sSGVhZGVyIiksbCxkLGgpLHYuY2xhc3NOYW1lPSIiLFRpKHYsWyJyZWxhdGl2ZSIsLi4uZigpXSkpOih4cChhKSx0aGlzLmFwcGVuZENvbEhlYWRl''@;'; put 'put ''cihsLGEsZCxoKSl9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6dn09dGhpcy5ob3QsTT12LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEQ9di5jcmVhdGVFbGVtZW50KCJzcGFuIiksWj1mKCk7TS5jbGFzc0xpc3QuYWRkKCJyZWxhdGl2ZSIsLi4uWiksRC5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhp''@;'; put 'put ''cy5zZXR0aW5ncy5hcmlhVGFncyYmKHZvKE0sInJvbGUiLCJwcmVzZW50YXRpb24iKSx2byhELCJyb2xlIiwicHJlc2VudGF0aW9uIikpLHRoaXMudXBkYXRlQ2VsbEhlYWRlcihELGwsZCxoKSxNLmFwcGVuZENoaWxkKEQpLGEuYXBwZW5kQ2hpbGQoTSl9dGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRlcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IHY9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0''@;'; put 'put ''aGlzLl93dDtsLnBhcmVudE5vZGUmJihwbyhsLCJjb2xIZWFkZXIiKT9mPXYud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKTpwbyhsLCJyb3dIZWFkZXIiKSYmKGY9di53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9qNyhsLGQoYSxo''@;'; put 'put ''KSk6KFBtKGwsIlx4YTAiKSxUaShsLCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7''@;'; put 'put ''Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtCZChESyx0aGlzLGwpLEJkKElLLHRoaXMsYSl9Z2V0TGFzdFNpemUoKXtyZXR1cm57d2lkdGg6VHUoREssdGhpcyksaGVpZ2h0OlR1KElLLHRo''@;'; put 'put ''aXMpfX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qu''@;'; put 'put ''d3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBs''@;'; put 'put ''PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudFJvd3MoKS0xLC0xKX1nZXRG''@;'; put 'put ''aXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qu''@;'; put 'put ''d3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVs''@;'; put 'put ''bDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudENv''@;'; put 'put ''bHMoKS0xLC0xKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZVJvdygpKX1nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz''@;'; put 'put ''dWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0''@;'; put 'put ''Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJs''@;'; put 'put ''ZVJvdygpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5Vmlz''@;'; put 'put ''aWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiBUdShrSyx0aGlzKX1nZXRSb3dIZWFkZXJz''@;'; put 'put ''Q291bnQoKXtyZXR1cm4gVHUodVAsdGhpcyl9Z2V0Vmlld3BvcnRXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKX1nZXRXb3Jrc3BhY2VXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9Z2V0Vmll''@;'; put 'put ''d3BvcnRIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpfWdldFdvcmtzcGFjZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpfWdldEVsZW1lbnRPdmVybGF5TmFtZShsKXt2YXIgYTtyZXR1''@;'; put 'put ''cm4obnVsbCE9PShhPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKSkmJnZvaWQgMCE9PWE/YTp0aGlzLl93dCkud3RUYWJsZS5uYW1lfWdldE92ZXJsYXlCeU5hbWUobCl7cmV0dXJuIHRoaXMuX3d0LmdldE92ZXJsYXlCeU5hbWUobCl9Z2V0QWN0aXZlT3ZlcmxheU5h''@;'; put 'put ''bWUoKXtyZXR1cm4gdGhpcy5fd3QuYWN0aXZlT3ZlcmxheU5hbWV9aXNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCl9aGFzVmVydGljYWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpfWhhc0hvcml6b250''@;'; put 'put ''YWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNIb3Jpem9udGFsU2Nyb2xsKCl9Z2V0VGFibGVXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldFdpZHRoKCl9Z2V0VGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRIZWlnaHQoKX1n''@;'; put 'put ''ZXRUYWJsZU9mZnNldCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZU9mZnNldCgpfWdldFJvd0hlYWRlcldpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fd3Qud3RWaWV3cG9ydC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRv''@;'; put 'put ''dygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fTt5KDEzOTA4KTtjb25zdCBDM2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNU''@;'; put 'put ''VVZXWFlaIixSSz1DM2UubGVuZ3RoO2Z1bmN0aW9uIGhQKGMpe2xldCBkLGw9YysxLGE9IiI7Zm9yKDtsPjA7KWQ9KGwtMSklUkssYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2QpK2EsbD1wYXJzZUludCgobC1kKS9SSywxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gR2V0KGMpe2xldCBsPTA7aWYo''@;'; put 'put ''Yylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxjLmxlbmd0aDthKz0xLGQtPTEpbCs9UksqKmQqKEMzZS5pbmRleE9mKGNbYV0pKzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24gJGV0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChoUChoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVy''@;'; put 'put ''biBhfWZ1bmN0aW9uIEtldCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9y''@;'; put 'put ''KGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2ZvcihoPTA7aDxsO2grKylmW2Bwcm9wJHtofWBdPWhQKGgpKyhkKzEpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBxZXQoYyxsKXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2Yr''@;'; put 'put ''KylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4gYX1mdW5jdGlvbiBMSyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5''@;'; put 'put ''KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgsZik9PntBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaCgodixNKT0+e2QucHVzaChbZitsLE0sdl0pfSk6T2JqZWN0LmtleXMoaCkuZm9yRWFjaCh2PT57ZC5wdXNoKFtmK2wsdixoW3ZdXSl9KX0pLGR9ZnVuY3Rpb24gT0soYyl7bGV0IGw9''@;'; put 'put ''MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNbMF0mJkFycmF5LmlzQXJyYXkoY1swXSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZxbyhjWzBdKSYmKGw9Qk8oY1swXSkpKSxsfWZ1bmN0aW9uIFMzZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5B''@;'; put 'put ''cnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gTTNlKGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9ZnVuY3Rpb24gR0UoYyxsLGEpe3JldHVybihsPWZ1bmN0''@;'; put 'put ''aW9uIFhldChjKXt2YXIgbD1mdW5jdGlvbiBKZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly''@;'; put 'put ''ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWlu''@;'; put 'put ''IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGV0dD1jbGFzcyBRZXR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO0dFKHRoaXMsImhvdCIsdm9pZCAwKSxHRSh0aGlzLCJkYXRhIix2b2lkIDApLEdFKHRoaXMsImRhdGFUeXBlIiwiYXJyYXkiKSxHRSh0aGlzLCJjb2xUb1Byb3AiLCgpPT57fSksR0UodGhpcywicHJvcFRvQ29sIiwoKT0+e30pLHRoaXMuaG90PWws''@;'; put 'put ''dGhpcy5kYXRhPWF9bW9kaWZ5Um93RGF0YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIpJiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9''@;'; put 'put ''Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGwsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9''@;'; put 'put ''Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1bXTtyZXR1cm4gWW4odGhpcy5kYXRhLChkLGgpPT57Y29uc3QgZj10aGlzLmdldEF0Q2VsbChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRSb3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1''@;'; put 'put ''bWVudHNbM107Y29uc3QgZj12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtkYXRhRG90Tm90YXRpb246dn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsLEQ9bnVsbDtpZihNPXRoaXMubW9kaWZ5Um93RGF0YShsKSxBcnJheS5pc0FycmF5KE0pKUQ9W10sZj9NLmZvckVhY2goKFos''@;'; put 'put ''cmUpPT57RFtyZV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHJlLE0pfSk6R2EoYSxkLFo9PntEW1otYV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLFosTSl9KTtlbHNlIGlmKHFvKE0pfHxtbChNKSlpZihEPWg/W106e30sIWZ8fGgpe2NvbnN0IHJlPXRoaXMuY291bnRGaXJzdFJvd0tl''@;'; put 'put ''eXMoKS0xO0dhKDAscmUsY2U9Pntjb25zdCBiZT10aGlzLmNvbFRvUHJvcChjZSk7aWYoY2U+PShhfHwwKSYmY2U8PShkfHxyZSkmJiFOdW1iZXIuaXNJbnRlZ2VyKGJlKSl7Y29uc3QgRWU9dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLGJlLE0pO2g/RC5wdXNoKEVlKTp2P1ZPKEQsYmUsRWUp''@;'; put 'put ''OkRbYmVdPUVlfX0pfWVsc2UgWG8oTSwoWixyZSk9Pntjb25zdCBjZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwscmUsTSk7dj9WTyhELHJlLGNlKTpEW3JlXT1jZX0pO3JldHVybiBEfXNldEF0Q2VsbChsLGEsZCl7aWYoIShsPj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmly''@;'; put 'put ''c3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGg9RmQoZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hlZCgpJiYoZD1oLnZhbHVlKX1bIl9fcHJvdG9fXyIsImNvbnN0''@;'; put 'put ''cnVjdG9yIiwicHJvdG90eXBlIl0uaW5jbHVkZXMobCl8fChOdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXVthXT1kOlZPKHRoaXMuZGF0YVtsXSxhLGQpKX19Z2V0QXRQaHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZClpZigic3RyaW5nIj09dHlwZW9mIGEpe2NvbnN0''@;'; put 'put ''e2RhdGFEb3ROb3RhdGlvbjpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2g9Zj9XMmUoZCxhKTpkW2FdfWVsc2UgaD0iZnVuY3Rpb24iPT10eXBlb2YgYT9hKGQpOmRbYV07aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPUZkKGgpO3RoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9Zi52YWx1ZSl9cmV0dXJuIGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJv''@;'; put 'put ''cChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsdj1udWxsLE09bnVsbCxEPW51bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxNPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLHY9TWF0aC5taW4obC5j''@;'; put 'put ''b2wsYS5jb2wpLE09TWF0aC5tYXgobC5yb3csYS5yb3cpLEQ9TWF0aC5tYXgobC5jb2wsYS5jb2wpKTtjb25zdCBaPVtdO3JldHVybiBHYShmLE0scmU9PntaLnB1c2goaD90aGlzLmdldEF0Um93KHJlLHZvaWQgMCx2b2lkIDAsZCk6dGhpcy5nZXRBdFJvdyhyZSx2LEQsZCkpfSksWn1jb3Vu''@;'; put 'put ''dFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29uc3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0''@;'; put 'put ''Um93S2V5cygpe3JldHVybiBPSyh0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhvdD1udWxsfX07eSgyMDI5MSk7Y29uc3QgeDNlPXtfbG9jYWxIb29rczpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tz''@;'; put 'put ''W2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJ1bkxvY2FsSG9va3MoYyxsLGEsZCxoLGYsdil7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgTT10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IEQ9MDtE''@;'; put 'put ''PE07RCsrKUhPKHRoaXMuX2xvY2FsSG9va3NbY11bRF0sdGhpcyxsLGEsZCxoLGYsdil9fSxjbGVhckxvY2FsSG9va3MoKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07VHAoeDNlLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9''@;'; put 'put ''KTtjb25zdCB5MT14M2U7ZnVuY3Rpb24gRTNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBudHQoYyl7dmFyIGw9ZnVuY3Rpb24gcnR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRN3tjb25zdHJ1Y3Rvcigpe2xl''@;'; put 'put ''dCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO0UzZSh0aGlzLCJpbmRleGVkVmFsdWVzIixbXSksRTNlKHRoaXMsImluaXRWYWx1ZU9yRm4iLHZvaWQgMCksdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYobDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNl''@;'; put 'put ''dFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLG1sKHRoaXMu''@;'; put 'put ''aW5pdFZhbHVlT3JGbik/R2EobC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihhKSkpOkdhKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwp''@;'; put 'put ''e3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNlcnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2Nh''@;'; put 'put ''bEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIFBLKGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gJEUoYyxsKXtyZXR1cm4gSW0oYyxhPT4hMT09PWwuaW5jbHVk''@;'; put 'put ''ZXMoYSkpfWZ1bmN0aW9uIEZLKGMsbCl7cmV0dXJuIHlzKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVuY3Rpb24gSEsoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4geXMoYyxoPT5oPj1hP2grZDpoKX1UbChRNyx5MSk7Y2xhc3MgVDNlIGV4dGVuZHMgUTd7''@;'; put 'put ''Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPUhLKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9UEsoZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPSRFKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXM9RksoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIE5LKGMsbCxhLGQpe2NvbnN0IGg9YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZix2KT0+bWwoZCk/ZChmLHYpOmQpLC4uLnZvaWQgMD09PWg/W106Yy5z''@;'; put 'put ''bGljZShoKV19ZnVuY3Rpb24gVksoYyxsKXtyZXR1cm4gSW0oYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFzcyBabSBleHRlbmRzIFE3e2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1OSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3Vw''@;'; put 'put ''ZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1WSyh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIucmVtb3ZlKGwpfX1jbGFzcyBmUCBleHRlbmRzIFpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBxdSh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyBwUCBleHRlbmRzIFE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBpdHQoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIGF0dChjKXt2YXIgbD1mdW5jdGlvbiBvdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVy''@;'; put 'put ''T2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShsLmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRo''@;'; put 'put ''aXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9JEUodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLG1sKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4w''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1OSyh0aGlzLmluZGV4ZWRW''@;'; put 'put ''YWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1ISyh0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9VksodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4''@;'; put 'put ''ZXM9JEUodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPUZLKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCld''@;'; put 'put ''KX19Y2xhc3MgS0UgZXh0ZW5kcyBabXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIHF1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVz''@;'; put 'put ''aChkKSxsKSxbXSl9fWNvbnN0IEEzZT1uZXcgTWFwKFtbImhpZGluZyIsZlBdLFsiaW5kZXgiLFE3XSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlIixwUF0sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsWm1dLFsidHJpbW1pbmciLEtFXV0pO2xldCBCSz0wO2NsYXNzIGpLe2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7IWZ1bmN0aW9uIGx0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gY3R0KGMpe3ZhciBsPWZ1bmN0aW9uIHV0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNvbGxlY3Rpb24iLG5ldyBNYXApfXJlZ2lz''@;'; put 'put ''dGVyKGwsYSl7ITE9PT10aGlzLmNvbGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLEJLKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0''@;'; put 'put ''aW9uLmdldChsKTtQYShhKSYmKGEuZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLEJLLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhp''@;'; put 'put ''cy5jb2xsZWN0aW9uLmNsZWFyKCl9Z2V0KGwpe3JldHVybiB5YyhsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMu''@;'; put 'put ''Y29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fWZ1bmN0aW9uIHpL''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBodHQoYyl7dmFyIGw9ZnVuY3Rpb24gZnR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31UbChqSyx5MSk7Y2xhc3MgazNlIGV4dGVuZHMgakt7Y29uc3RydWN0b3IobCxhKXtzdXBl''@;'; put 'put ''cigpLHpLKHRoaXMsIm1lcmdlZFZhbHVlc0NhY2hlIixbXSkseksodGhpcywiYWdncmVnYXRpb25GdW5jdGlvbiIsdm9pZCAwKSx6Syh0aGlzLCJmYWxsYmFja1ZhbHVlIix2b2lkIDApLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZh''@;'; put 'put ''bHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9eXModGhpcy5nZXQoKSxmPT5m''@;'; put 'put ''LmdldFZhbHVlcygpKSxkPVtdLGg9UGEoYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCB2PVtdO2ZvcihsZXQgTT0wO008dGhpcy5nZXRMZW5ndGgoKTtNKz0xKXYucHVzaChhW01dW2ZdKTtkLnB1c2godil9cmV0dXJuIHlzKGQsdGhpcy5hZ2dyZWdh''@;'; put 'put ''dGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBQYShkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1''@;'; put 'put ''ZXMoITEpfX1mdW5jdGlvbiBEM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp''@;'; put 'put ''fXZhciBVSz1uZXcgV2Vha01hcDtjbGFzcyBJM2V7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gcHR0KGMsbCxhKXsoZnVuY3Rpb24gZ3R0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxVSyxbXSl9c3Vic2NyaWJlKGwpe3JldHVybiB0aGlzLmFkZExvY2FsSG9vaygiY2hhbmdlIixsKSx0aGlzLl93cml0ZShmdW5jdGlvbiB2dHQoYyxsKXtyZXR1cm4gYy5nZXQoRDNlKGMsbCkpfShVSyx0aGlzKSksdGhp''@;'; put 'put ''c311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVuc3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENo''@;'; put 'put ''YW5nZXMobCl7IWZ1bmN0aW9uIG10dChjLGwsYSl7Yy5zZXQoRDNlKGMsbCksYSl9KFVLLHRoaXMsbCl9fWZ1bmN0aW9uIFIzZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJl''@;'; put 'put ''cGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxuZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIs''@;'; put 'put ''aW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVlOnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIHFFKGMsbCxhKXsoZnVuY3Rpb24gYnR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZMihjLGwpe3JldHVybiBjLmdldChMM2UoYyxsKSl9ZnVuY3Rpb24gZ1AoYyxsLGEpe3JldHVybiBjLnNldChMM2UoYyxsKSxhKSxhfWZ1bmN0aW9uIEwzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwoSTNlLHkxKTt2YXIgbVA9bmV3IFdlYWtNYXAsWEU9bmV3IFdlYWtNYXAsdlA9''@;'; put 'put ''bmV3IFdlYWtNYXAsYlA9bmV3IFdlYWtNYXAseVA9bmV3IFdlYWtNYXA7Y2xhc3MgeXR0e2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtxRSh0aGlzLG1QLG5ldyBT''@;'; put 'put ''ZXQpLHFFKHRoaXMsWEUsW10pLHFFKHRoaXMsdlAsW10pLHFFKHRoaXMsYlAsITEpLHFFKHRoaXMseVAsITEpLGdQKHlQLHRoaXMsbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgSTNlO3JldHVybiBZMihtUCx0aGlzKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2Ny''@;'; put 'put ''aWJlIiwoKT0+e1kyKG1QLHRoaXMpLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoUjNlKFkyKFhFLHRoaXMpLFkyKHZQLHRoaXMpKSksbH1lbWl0KGwpe2xldCBhPVkyKHZQLHRoaXMpOyghWTIoYlAsdGhpcyl8fFkyKFhFLHRoaXMpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9''@;'; put 'put ''PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChZMih5UCx0aGlzKSk6Z1AoWEUsdGhpcyxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwoWTIoeVAsdGhpcykpKSxZMihiUCx0aGlzKXx8KGdQKGJQLHRoaXMsITApLGE9WTIoWEUsdGhpcykpKTtjb25zdCBkPVIzZShhLGwpO1ky''@;'; put 'put ''KG1QLHRoaXMpLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGdQKHZQLHRoaXMsbCl9fWZ1bmN0aW9uIEsxKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBfdHQoYyl7dmFyIGw9ZnVuY3Rpb24gd3R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJv''@;'; put 'put ''bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o''@;'; put 'put ''InN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY31jbGFzcyBaS3tjb25zdHJ1Y3Rvcigpe0sxKHRoaXMsImluZGV4ZXNTZXF1ZW5jZSIsbmV3IFQzZSksSzEodGhpcywidHJpbW1pbmdNYXBzQ29sbGVjdGlvbiIsbmV3IGszZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLEsxKHRoaXMsImhpZGluZ01hcHNDb2xsZWN0aW9uIixu''@;'; put 'put ''ZXcgazNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSksSzEodGhpcywidmFyaW91c01hcHNDb2xsZWN0aW9uIixuZXcgakspLEsxKHRoaXMsImhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlIixuZXcgeXR0KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pKSxLMSh0aGlzLCJub3RUcmltbWVkSW5kZXhl''@;'; put 'put ''c0NhY2hlIixbXSksSzEodGhpcywibm90SGlkZGVuSW5kZXhlc0NhY2hlIixbXSksSzEodGhpcywiaXNCYXRjaGVkIiwhMSksSzEodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCIsITEpLEsxKHRoaXMsImluZGV4ZXNDaGFuZ2VTb3VyY2UiLHZvaWQgMCksSzEodGhpcywidHJpbW1lZElu''@;'; put 'put ''ZGV4ZXNDaGFuZ2VkIiwhMSksSzEodGhpcywiaGlkZGVuSW5kZXhlc0NoYW5nZWQiLCExKSxLMSh0aGlzLCJyZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJmcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZSIsbmV3IE1hcCksSzEodGhpcywiZnJvbVZp''@;'; put 'put ''c3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZSIsbmV3IE1hcCksdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluZGV4ZXNT''@;'; put 'put ''ZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnRyaW1tZWRJ''@;'; put 'put ''bmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLmhpZGRlbkluZGV4''@;'; put 'put ''ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJj''@;'; put 'put ''aGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNPYnNlcnZlcihsKXtpZigiaGlk''@;'; put 'put ''aW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxkKXtyZXR1cm4gdGhpcy5yZWdp''@;'; put 'put ''c3Rlck1hcChsLGZ1bmN0aW9uIHN0dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighQTNlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAoIiR7Y30iKSBkb2VzIG5vdCBl''@;'; put 'put ''eGlzdC5gKTtyZXR1cm4gbmV3KEEzZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5nZXQobCkp''@;'; put 'put ''dGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgS0U/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIGZQP3RoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24u''@;'; put 'put ''cmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lz''@;'; put 'put ''dGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMuaGlkaW5nTWFwc0Nv''@;'; put 'put ''bGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gUGEoYSk/YTpudWxsfWdldFBoeXNp''@;'; put 'put ''Y2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBQYShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0Nh''@;'; put 'put ''Y2hlLmdldChsKTtyZXR1cm4gUGEoYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJlbmRlcmFibGVGcm9tVmlzdWFs''@;'; put 'put ''SW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBQYShhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFy''@;'; put 'put ''Z3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1Jl''@;'; put 'put ''bmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgdj0tMTtyZXR1cm4gdj1hPjA/Zi5maW5kSW5kZXgoTT0+TT5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoTT0+TTxsKSwtMT09PXY/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCExKTpudWxsOmZbdl19aW5pdFRv''@;'; put 'put ''TGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLm5vdEhpZGRlbklu''@;'; put 'put ''ZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1p''@;'; put 'put ''bmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJl''@;'; put 'put ''c3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwpLmtleXMoKV0ubWFwKGg9Pmgr''@;'; put 'put ''bCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09PXRoaXMuaW5kZXhlc0NoYW5n''@;'; put 'put ''ZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCl9Z2V0Tm90VHJpbW1lZElu''@;'; put 'put ''ZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzVHJpbW1lZChk''@;'; put 'put ''KSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1sw''@;'; put 'put ''XSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcygpLmxlbmd0aH1nZXRSZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5maWx0ZXIoZD0+ITE9''@;'; put 'put ''PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxlbmd0aH1tb3ZlSW5kZXhlcyhs''@;'; put 'put ''LGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPXlzKGwsWj0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChaKSksaD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksZj1sLmxlbmd0aCx2PSRFKHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZCks''@;'; put 'put ''TT12LmZpbHRlcihaPT4hMT09PXRoaXMuaXNUcmltbWVkKFopKTtsZXQgRD12LmluZGV4T2YoTVtNLmxlbmd0aC0xXSkrMTthK2Y8aCYmKEQ9di5pbmRleE9mKE1bYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKFBLKHYsRCxkKSks''@;'; put 'put ''dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVB''@;'; put 'put ''dEluZGV4KGwpfWluc2VydEluZGV4ZXMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVtsXSxoPVBhKGQpP2Q6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxmPXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoZCk/dGhpcy5nZXRJbmRleGVzU2VxdWVu''@;'; put 'put ''Y2UoKS5pbmRleE9mKGQpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksdj15cyhuZXcgQXJyYXkoYSkuZmlsbChoKSwoTSxEKT0+TStEKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2Vy''@;'; put 'put ''dChmLHYpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRU''@;'; put 'put ''b0V2ZXJ5KGYsdiksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3Vy''@;'; put 'put ''Y2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0''@;'; put 'put ''aW9ucygpfXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFu''@;'; put 'put ''Z2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZElu''@;'; put 'put ''ZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5k''@;'; put 'put ''ZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXND''@;'; put 'put ''aGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRl''@;'; put 'put ''eGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQo''@;'; put 'put ''ZCxhKX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiBPM2UoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSkt''@;'; put 'put ''KFthLXpBLVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24gUDNlKGMpe1BhKGMpJiZGJChnbGBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVn''@;'; put 'put ''aXN0ZXIgcGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfVRsKFpLLHkxKTtjb25zdHtyZWdpc3Rl''@;'; put 'put ''cjpNdHQsZ2V0VmFsdWVzOnh0dH09cjMoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rpb24gRXR0KGMsbCl7TXR0KGMsbCl9KCJwbHVyYWxpemUiLGZ1bmN0aW9uIFN0dChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0IEYz''@;'; put 'put ''ZT0iQ29udGV4dE1lbnU6aXRlbXMiLFdLPWAke0YzZX0ubm9JdGVtc2AsWUs9YCR7RjNlfS5pbnNlcnRSb3dBYm92ZWAsR0s9YCR7RjNlfS5pbnNlcnRSb3dCZWxvd2AsJEs9YCR7RjNlfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLEtLPWAke0YzZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdodGAs''@;'; put 'put ''cUs9YCR7RjNlfS5yZW1vdmVSb3dgLFhLPWAke0YzZX0ucmVtb3ZlQ29sdW1uYCxKSz1gJHtGM2V9LnVuZG9gLFFLPWAke0YzZX0ucmVkb2AsX1A9YCR7RjNlfS5yZWFkT25seWAsZXE9YCR7RjNlfS5jbGVhckNvbHVtbmAsdHE9YCR7RjNlfS5jb3B5YCxucT1gJHtGM2V9LmNvcHlXaXRoSGVh''@;'; put 'put ''ZGVyc2AscnE9YCR7RjNlfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2AsaXE9YCR7RjNlfS5jb3B5SGVhZGVyc09ubHlgLGFxPWAke0YzZX0uY3V0YCxvcT1gJHtGM2V9LmZyZWV6ZUNvbHVtbmAsc3E9YCR7RjNlfS51bmZyZWV6ZUNvbHVtbmAsbHE9YCR7RjNlfS5tZXJnZUNlbGxzYCxjcT1gJHtG''@;'; put 'put ''M2V9LnVubWVyZ2VDZWxsc2AsdXE9YCR7RjNlfS5hZGRDb21tZW50YCxkcT1gJHtGM2V9LmVkaXRDb21tZW50YCxocT1gJHtGM2V9LnJlbW92ZUNvbW1lbnRgLGZxPWAke0YzZX0ucmVhZE9ubHlDb21tZW50YCxwcT1gJHtGM2V9LmFsaWduYCxncT1gJHtGM2V9LmFsaWduLmxlZnRgLG1xPWAk''@;'; put 'put ''e0YzZX0uYWxpZ24uY2VudGVyYCx2cT1gJHtGM2V9LmFsaWduLnJpZ2h0YCxicT1gJHtGM2V9LmFsaWduLmp1c3RpZnlgLHlxPWAke0YzZX0uYWxpZ24udG9wYCxfcT1gJHtGM2V9LmFsaWduLm1pZGRsZWAsd3E9YCR7RjNlfS5hbGlnbi5ib3R0b21gLENxPWAke0YzZX0uYm9yZGVyc2AsU3E9''@;'; put 'put ''YCR7RjNlfS5ib3JkZXJzLnRvcGAsTXE9YCR7RjNlfS5ib3JkZXJzLnJpZ2h0YCx4cT1gJHtGM2V9LmJvcmRlcnMuYm90dG9tYCxFcT1gJHtGM2V9LmJvcmRlcnMubGVmdGAsVHE9YCR7RjNlfS5ib3JkZXJzLnJlbW92ZWAsQXE9YCR7RjNlfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93''@;'; put 'put ''YCxrcT1gJHtGM2V9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsRHE9YCR7RjNlfS5oaWRlQ29sdW1uYCxJcT1gJHtGM2V9LnNob3dDb2x1bW5gLFJxPWAke0YzZX0uaGlkZVJvd2AsTHE9YCR7RjNlfS5zaG93Um93YCxxMT0iRmlsdGVyczoiLFdjPWAke3ExfWNvbmRpdGlvbnNg''@;'; put 'put ''LHdQPWAke1djfS5ub25lYCxPcT1gJHtXY30uaXNFbXB0eWAsUHE9YCR7V2N9LmlzTm90RW1wdHlgLEZxPWAke1djfS5pc0VxdWFsVG9gLEhxPWAke1djfS5pc05vdEVxdWFsVG9gLE5xPWAke1djfS5iZWdpbnNXaXRoYCxWcT1gJHtXY30uZW5kc1dpdGhgLEJxPWAke1djfS5jb250YWluc2As''@;'; put 'put ''anE9YCR7V2N9LmRvZXNOb3RDb250YWluYCxBdHQ9YCR7V2N9LmJ5VmFsdWVgLHpxPWAke1djfS5ncmVhdGVyVGhhbmAsVXE9YCR7V2N9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxacT1gJHtXY30ubGVzc1RoYW5gLFdxPWAke1djfS5sZXNzVGhhbk9yRXF1YWxUb2AsWXE9YCR7V2N9LmlzQmV0''@;'; put 'put ''d2VlbmAsR3E9YCR7V2N9LmlzTm90QmV0d2VlbmAsJHE9YCR7V2N9LmFmdGVyYCxLcT1gJHtXY30uYmVmb3JlYCxxcT1gJHtXY30udG9kYXlgLFhxPWAke1djfS50b21vcnJvd2AsSnE9YCR7V2N9Lnllc3RlcmRheWAsUXE9YCR7cTF9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxlWD1gJHtx''@;'; put 'put ''MX1sYWJlbHMuZmlsdGVyQnlWYWx1ZWAsdFg9YCR7cTF9bGFiZWxzLmNvbmp1bmN0aW9uYCxDUD1gJHtxMX1sYWJlbHMuZGlzanVuY3Rpb25gLFNQPWAke3ExfXZhbHVlcy5ibGFua0NlbGxzYCxuWD1gJHtxMX1idXR0b25zLnNlbGVjdEFsbGAsclg9YCR7cTF9YnV0dG9ucy5jbGVhcmAsaVg9''@;'; put 'put ''YCR7cTF9YnV0dG9ucy5va2AsYVg9YCR7cTF9YnV0dG9ucy5jYW5jZWxgLG9YPWAke3ExfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxzWD1gJHtxMX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCxsWD1gJHtxMX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxjWD0iQ2hl''@;'; put 'put ''Y2tib3hSZW5kZXJlcjoiLHVYPWAke2NYfWNoZWNrZWRgLGRYPWAke2NYfXVuY2hlY2tlZGAsSDNlPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbV0tdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsW1lLXToiSW5zZXJ0IHJvdyBhYm92ZSIsW0dLXToiSW5zZXJ0IHJvdyBiZWxvdyIsWyRLXToiSW5z''@;'; put 'put ''ZXJ0IGNvbHVtbiBsZWZ0IixbS0tdOiJJbnNlcnQgY29sdW1uIHJpZ2h0IixbcUtdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW1hLXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFtKS106IlVuZG8iLFtRS106IlJlZG8iLFtfUF06IlJlYWQgb25seSIsW2VxXToi''@;'; put 'put ''Q2xlYXIgY29sdW1uIixbcHFdOiJBbGlnbm1lbnQiLFtncV06IkxlZnQiLFttcV06IkNlbnRlciIsW3ZxXToiUmlnaHQiLFticV06Ikp1c3RpZnkiLFt5cV06IlRvcCIsW19xXToiTWlkZGxlIixbd3FdOiJCb3R0b20iLFtvcV06IkZyZWV6ZSBjb2x1bW4iLFtzcV06IlVuZnJlZXplIGNvbHVt''@;'; put 'put ''biIsW0NxXToiQm9yZGVycyIsW1NxXToiVG9wIixbTXFdOiJSaWdodCIsW3hxXToiQm90dG9tIixbRXFdOiJMZWZ0IixbVHFdOiJSZW1vdmUgYm9yZGVyKHMpIixbdXFdOiJBZGQgY29tbWVudCIsW2RxXToiRWRpdCBjb21tZW50IixbaHFdOiJEZWxldGUgY29tbWVudCIsW2ZxXToiUmVhZC1v''@;'; put 'put ''bmx5IGNvbW1lbnQiLFtscV06Ik1lcmdlIGNlbGxzIixbY3FdOiJVbm1lcmdlIGNlbGxzIixbdHFdOiJDb3B5IixbbnFdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW3JxXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVy''@;'; put 'put ''cyJdLFtpcV06WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFkZXJzIG9ubHkiXSxbYXFdOiJDdXQiLFtBcV06Ikluc2VydCBjaGlsZCByb3ciLFtrcV06IkRldGFjaCBmcm9tIHBhcmVudCIsW0RxXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW0lxXTpbIlNob3cgY29sdW1u''@;'; put 'put ''IiwiU2hvdyBjb2x1bW5zIl0sW1JxXTpbIkhpZGUgcm93IiwiSGlkZSByb3dzIl0sW0xxXTpbIlNob3cgcm93IiwiU2hvdyByb3dzIl0sW3dQXToiTm9uZSIsW09xXToiSXMgZW1wdHkiLFtQcV06IklzIG5vdCBlbXB0eSIsW0ZxXToiSXMgZXF1YWwgdG8iLFtIcV06IklzIG5vdCBlcXVhbCB0''@;'; put 'put ''byIsW05xXToiQmVnaW5zIHdpdGgiLFtWcV06IkVuZHMgd2l0aCIsW0JxXToiQ29udGFpbnMiLFtqcV06IkRvZXMgbm90IGNvbnRhaW4iLFt6cV06IkdyZWF0ZXIgdGhhbiIsW1VxXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbWnFdOiJMZXNzIHRoYW4iLFtXcV06Ikxlc3MgdGhhbiBv''@;'; put 'put ''ciBlcXVhbCB0byIsW1lxXToiSXMgYmV0d2VlbiIsW0dxXToiSXMgbm90IGJldHdlZW4iLFskcV06IkFmdGVyIixbS3FdOiJCZWZvcmUiLFtxcV06IlRvZGF5IixbWHFdOiJUb21vcnJvdyIsW0pxXToiWWVzdGVyZGF5IixbU1BdOiJCbGFuayBjZWxscyIsW1FxXToiRmlsdGVyIGJ5IGNvbmRp''@;'; put 'put ''dGlvbiIsW2VYXToiRmlsdGVyIGJ5IHZhbHVlIixbdFhdOiJBbmQiLFtDUF06Ik9yIixbblhdOiJTZWxlY3QgYWxsIixbclhdOiJDbGVhciIsW2lYXToiT0siLFthWF06IkNhbmNlbCIsW29YXToiU2VhcmNoIixbc1hdOiJWYWx1ZSIsW2xYXToiU2Vjb25kIHZhbHVlIixbdVhdOiJDaGVja2Vk''@;'; put 'put ''IixbZFhdOiJVbmNoZWNrZWQifSxrdHQ9VyxoWD1IM2UubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpEdHQsZ2V0SXRlbTpOM2UsaGFzSXRlbTpJdHQsZ2V0VmFsdWVzOlJ0dH09cjMoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIFYzZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiBx''@;'; put 'put ''byhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBMdHQoYyxsKXtjIT09aFgmJmZ1bmN0aW9uIEN0dChjLGwpe1hvKGwsKGEsZCk9Pnt5YyhjW2RdKSYmKGNbZF09YSl9KX0obCxOM2UoaFgpKX0oYSxkKSxEdHQoYSxnMShkKSksZzEoZCl9ZnVuY3Rpb24gQjNlKGMpe3JldHVy''@;'; put 'put ''biBmWChjKT9nMShOM2UoYykpOm51bGx9ZnVuY3Rpb24gZlgoYyl7cmV0dXJuIEl0dChjKX1mdW5jdGlvbiBqM2UoYyxsLGEpe2NvbnN0IGQ9QjNlKGMpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZih5YyhoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9uIFB0''@;'; put 'put ''dChjLGwpe2xldCBhPWM7cmV0dXJuIFluKGZ1bmN0aW9uIFR0dCgpe3JldHVybiB4dHQoKX0oKSxkPT57YT1kKGMsbCl9KSxhfShoLGEpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2ZbMF06Zn1WM2UoSDNlKTtjb25zdCB6M2U9ImFjdGl2ZS1oZWFkZXIiLHBYPSJoZWFkZXIiLGdYPSJhcmVh''@;'; put 'put ''IixKRT0iZm9jdXMiO2NsYXNzIFUzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2V0dGluZ3M9bCx0aGlzLmNlbGxSYW5nZT1hfHxudWxsfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJhbmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhp''@;'; put 'put ''cy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9cmVwbGFjZShsLGEpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJvbS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYodGhp''@;'; put 'put ''cy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89YSwhMH1yZXR1cm4hMX1jbGVhcigpe3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigp''@;'; put 'put ''LGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWRlc3Ryb3koKXt0aGlzLnJ1bkxvY2FsSG9va3MoImRlc3Ryb3kiKX19VGwoVTNlLHkxKTtjb25zdCBqdHQ9VTNlO2NvbnN0IHg1PWNsYXNzIFd0dCBleHRl''@;'; put 'put ''bmRzIGp0dHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24genR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVdHQoYyl7dmFyIGw9ZnVuY3Rpb24gWnR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1p''@;'; put 'put ''dGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9''@;'; put 'put ''PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30o''@;'; put 'put ''dGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29tbWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2Uo''@;'; put 'put ''bCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxDZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtyZXR1cm4gbnVsbD09PWh8fG51bGw9PT1mP251bGw6KChoLnJvdz5mLnJvd3x8aC5jb2w+Zi5jb2wpJiYoaD1hLGY9ZCksdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoaCxoLGYpKX1n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLGwucm93''@;'; put 'put ''LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcixsLmNvbCxkKTtyZXR1cm4gbnVsbD09PWY/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKX1n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhLGQpe3JldHVybiBhPDA/YTpsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VP''@;'; put 'put ''bmx5KHRoaXMudmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwudG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT1sLmZyb20uY2xvbmUoKS5ub3JtYWxpemUoKSxkPSJOLVMi''@;'; put 'put ''PT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsaD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsZj10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkcyh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpO2xldCB2PW51bGw7aWYoKG51''@;'; put 'put ''bGw9PT1mfHxudWxsPT09Zi5jb2x8fG51bGw9PT1mLnJvdykmJih2PXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhhLGQsaCkpLG51bGwhPT12JiZsLm92ZXJsYXBzKHYpKXtjb25zdCBNPWwuaGlnaGxpZ2h0LmNsb25lKCk7aWYoTS5yb3c+PTAmJihNLnJvdz12LnJvdyksTS5jb2w+''@;'; put 'put ''PTAmJihNLmNvbD12LmNvbCksbnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBEPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKE0pO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKEQpfWwuc2V0SGlnaGxpZ2h0KE0pfXJldHVybiJm''@;'; put 'put ''b2N1cyI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvblR5cGUmJm51bGwhPT1mJiZudWxsPT09diYmbC5zZXRIaWdobGlnaHQodGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KSx0aGlzfWdldENvcm5lcnMoKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2U7cmV0dXJuW01h''@;'; put 'put ''dGgubWluKGwucm93LGEucm93KSxNYXRoLm1pbihsLmNvbCxhLmNvbCksTWF0aC5tYXgobC5yb3csYS5yb3cpLE1hdGgubWF4KGwuY29sLGEuY29sKV19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFu''@;'; put 'put ''Z2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7''@;'; put 'put ''Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiBudWxsPT09ZC5yb3d8fG51bGw9PT1kLmNvbHx8bnVsbD09PWgucm93fHxudWxsPT09aC5jb2w/bnVsbDp0aGlz''@;'; put 'put ''LnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQsaCl9fTtmdW5jdGlvbiBtWChjKXtsZXR7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHg1KHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6ejNlfSl9ZnVuY3Rpb24gWXR0KGMpe2xldHthcmVhQ29y''@;'; put 'put ''bmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4NSh7Y2xhc3NOYW1lOiJhcmVhIixjcmVhdGVMYXllcnM6ITAsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpnWH0pfWZ1bmN0aW9uIEd0dChjKXtsZXR7Li4u''@;'; put 'put ''bH09YztyZXR1cm4gbmV3IHg1KHtjbGFzc05hbWU6ImhpZ2hsaWdodCIsLi4ubCxzZWxlY3Rpb25UeXBlOmdYfSl9ZnVuY3Rpb24gJHR0KGMpe2xldHtjb2x1bW5DbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeDUoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToiY29sdW1u''@;'; put 'put ''In0pfWZ1bmN0aW9uIFozZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHg1KHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6cFh9KX1mdW5jdGlvbiBKdHQoYyl7bGV0e3Jvd0NsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4NSh7Y2xhc3NO''@;'; put 'put ''YW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJyb3cifSl9ZnVuY3Rpb24gamQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHRudChjKXt2YXIgbD1mdW5jdGlvbiBubnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9u''@;'; put 'put ''IEU1KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUHA9bmV3IFdlYWtT''@;'; put 'put ''ZXQ7Y2xhc3Mgcm50e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBRdHQoYyxsKXsoZnVuY3Rpb24gZW50KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0p''@;'; put 'put ''KGMsbCksbC5hZGQoYyl9KSh0aGlzLFBwKSxqZCh0aGlzLCJvcHRpb25zIix2b2lkIDApLGpkKHRoaXMsImxheWVyTGV2ZWwiLDApLGpkKHRoaXMsImZvY3VzIix2b2lkIDApLGpkKHRoaXMsImZpbGwiLHZvaWQgMCksamQodGhpcywibGF5ZXJlZEFyZWFzIixuZXcgTWFwKSxqZCh0aGlzLCJh''@;'; put 'put ''cmVhcyIsbmV3IE1hcCksamQodGhpcywicm93SGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiY29sdW1uSGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0aXZlUm93SGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0aXZlQ29sdW1uSGVhZGVycyIsbmV3IE1hcCksamQodGhpcywiYWN0''@;'; put 'put ''aXZlQ29ybmVySGVhZGVycyIsbmV3IE1hcCksamQodGhpcywicm93SGlnaGxpZ2h0cyIsbmV3IE1hcCksamQodGhpcywiY29sdW1uSGlnaGxpZ2h0cyIsbmV3IE1hcCksamQodGhpcywiY3VzdG9tU2VsZWN0aW9ucyIsW10pLHRoaXMub3B0aW9ucz1sLHRoaXMuZm9jdXM9ZnVuY3Rpb24gS3R0''@;'; put 'put ''KGMpe2xldHtjZWxsQ29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB4NSh7Y2xhc3NOYW1lOiJjdXJyZW50IixoZWFkZXJBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLGJvcmRlcjp7d2lkdGg6Mixjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpsfSwu''@;'; put 'put ''Li5hLHNlbGVjdGlvblR5cGU6SkV9KX0obCksdGhpcy5maWxsPWZ1bmN0aW9uIFh0dChjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IHg1KHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2VsZWN0aW9uVHlwZToiZmlsbCJ9KX0obCl9aXNF''@;'; put 'put ''bmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09SkUmJihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWguaW5j''@;'; put 'put ''bHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRGb2N1cygpe3JldHVybiB0aGlzLmZvY3VzfWdldEZpbGwoKXtyZXR1cm4gdGhpcy5maWxs''@;'; put 'put ''fWNyZWF0ZUxheWVyZWRBcmVhKCl7cmV0dXJuIEU1KFBwLHRoaXMsVDUpLmNhbGwodGhpcyx0aGlzLmxheWVyZWRBcmVhcyxZdHQpfWdldExheWVyZWRBcmVhcygpe3JldHVyblsuLi50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKV19Y3JlYXRlQXJlYSgpe3JldHVybiBFNShQcCx0aGlzLFQ1''@;'; put 'put ''KS5jYWxsKHRoaXMsdGhpcy5hcmVhcyxHdHQpfWdldEFyZWFzKCl7cmV0dXJuWy4uLnRoaXMuYXJlYXMudmFsdWVzKCldfWNyZWF0ZVJvd0hlYWRlcigpe3JldHVybiBFNShQcCx0aGlzLFQ1KS5jYWxsKHRoaXMsdGhpcy5yb3dIZWFkZXJzLFozZSl9Z2V0Um93SGVhZGVycygpe3JldHVyblsu''@;'; put 'put ''Li50aGlzLnJvd0hlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhlYWRlcigpe3JldHVybiBFNShQcCx0aGlzLFQ1KS5jYWxsKHRoaXMsdGhpcy5jb2x1bW5IZWFkZXJzLFozZSl9Z2V0Q29sdW1uSGVhZGVycygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCldfWNy''@;'; put 'put ''ZWF0ZUFjdGl2ZVJvd0hlYWRlcigpe3JldHVybiBFNShQcCx0aGlzLFQ1KS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVSb3dIZWFkZXJzLG1YKX1nZXRBY3RpdmVSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29sdW1uSGVh''@;'; put 'put ''ZGVyKCl7cmV0dXJuIEU1KFBwLHRoaXMsVDUpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMsbVgpfWdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKXty''@;'; put 'put ''ZXR1cm4gRTUoUHAsdGhpcyxUNSkuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycyxtWCl9Z2V0QWN0aXZlQ29ybmVySGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZVJvd0hpZ2hsaWdodCgpe3JldHVybiBFNShQcCx0''@;'; put 'put ''aGlzLFQ1KS5jYWxsKHRoaXMsdGhpcy5yb3dIaWdobGlnaHRzLEp0dCl9Z2V0Um93SGlnaGxpZ2h0cygpe3JldHVyblsuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpe3JldHVybiBFNShQcCx0aGlzLFQ1KS5jYWxsKHRoaXMsdGhpcy5jb2x1''@;'; put 'put ''bW5IaWdobGlnaHRzLCR0dCl9Z2V0Q29sdW1uSGlnaGxpZ2h0cygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCldfWdldEN1c3RvbVNlbGVjdGlvbnMoKXtyZXR1cm5bLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpXX1hZGRDdXN0b21TZWxlY3Rpb24o''@;'; put 'put ''bCl7dGhpcy5jdXN0b21TZWxlY3Rpb25zLnB1c2goZnVuY3Rpb24gcXR0KGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6YSwuLi5kfT1jO3JldHVybiBuZXcgeDUoey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOiJjdXN0b20tc2VsZWN0aW9uIn0sYSl9KHsuLi50aGlzLm9wdGlvbnMs''@;'; put 'put ''Li4ubH0pKX1jbGVhcigpe3RoaXMuZm9jdXMuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxZbih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5yb3dIZWFkZXJzLnZhbHVlcygp''@;'; put 'put ''LGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9''@;'; put 'put ''KSxZbih0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KX1bU3ltYm9sLml0ZXJh''@;'; put 'put ''dG9yXSgpe3JldHVyblt0aGlzLmZvY3VzLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLC4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVSb3dI''@;'; put 'put ''ZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlzLmN1''@;'; put 'put ''c3RvbVNlbGVjdGlvbnNdW1N5bWJvbC5pdGVyYXRvcl0oKX19ZnVuY3Rpb24gVDUoYyxsKXtjb25zdCBhPXRoaXMubGF5ZXJMZXZlbDtpZihjLmhhcyhhKSlyZXR1cm4gYy5nZXQoYSk7Y29uc3QgZD1sKHtsYXllckxldmVsOmEsLi4udGhpcy5vcHRpb25zfSk7cmV0dXJuIGMuc2V0KGEsZCks''@;'; put 'put ''ZH1jb25zdCBpbnQ9cm50O2Z1bmN0aW9uIFczZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYW50KGMpe3ZhciBsPWZ1bmN0aW9uIG9udChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgc250e2NvbnN0cnVjdG9yKGwp''@;'; put 'put ''e1czZSh0aGlzLCJyYW5nZXMiLFtdKSxXM2UodGhpcywiY3JlYXRlQ2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY3JlYXRlQ2VsbFJhbmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNy''@;'; put 'put ''ZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgp''@;'; put 'put ''LTEpfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCktMil9aW5jbHVkZXMobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnNvbWUoYT0+YS5pbmNsdWRlcyhsKSl9Y2xlYXIoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoPTAsdGhpc31zaXplKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMucmFuZ2VzLmxlbmd0aH1wZWVrQnlJbmRleCgpe2xldCBhLGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIGw+PTAmJmw8dGhpcy5zaXplKCkmJihhPXRoaXMucmFuZ2VzW2xdKSxhfVtTeW1ib2wuaXRlcmF0b3JdKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19Y29uc3QgbG50PXNudDtmdW5jdGlvbiB2WChjLGwsYSl7WTNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEJzKGMsbCl7cmV0dXJuIGMuZ2V0KFF1KGMsbCkpfWZ1bmN0aW9uIE1QKGMsbCxhKXtyZXR1cm4gYy5zZXQoUXUoYyxsKSxhKSxhfWZ1bmN0aW9uIFF1KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgeFA9bmV3IFdlYWtNYXAsdWM9bmV3IFdlYWtNYXAsdTM9bmV3IFdlYWtN''@;'; put 'put ''YXAscDA9bmV3IFdlYWtTZXQ7Y2xhc3MgRzNle2NvbnN0cnVjdG9yKGwsYSl7KGZ1bmN0aW9uIGNudChjLGwpe1kzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxwMCksdlgodGhpcyx4UCx2b2lkIDApLHZYKHRoaXMsdWMsdm9pZCAwKSx2WCh0aGlzLHUzLHt4OjAseTowfSksTVAoeFAsdGhpcyxs''@;'; put 'put ''KSxNUCh1Yyx0aGlzLGEpfXRyYW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKTtsZXQgZj1Ccyh4UCx0aGlzKS5jdXJyZW50''@;'; put 'put ''KCkuaGlnaGxpZ2h0O2NvbnN0IHY9QnModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGYpO2xldCBNPTAsRD0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGgpLG51bGwhPT12LnJvdyYmbnVsbCE9PXYuY29sKXtjb25zdHt3aWR0aDpaLGhl''@;'; put 'put ''aWdodDpyZX09UXUocDAsdGhpcyxLM2UpLmNhbGwodGhpcykse3JvdzpjZSxjb2w6YmV9PVF1KHAwLHRoaXMscTNlKS5jYWxsKHRoaXMsZiksRWU9QnModWMsdGhpcykuZml4ZWRSb3dzQm90dG9tKCksQmU9QnModWMsdGhpcykubWluU3BhcmVSb3dzKCkscWU9QnModWMsdGhpcykubWluU3Bh''@;'; put 'put ''cmVDb2xzKCkscnQ9QnModWMsdGhpcykuYXV0b1dyYXBSb3coKSxwdD1Ccyh1Yyx0aGlzKS5hdXRvV3JhcENvbCgpLGR0PUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoY2UraC5yb3csYmUraC5jb2wpO2lmKGR0LnJvdz49cmUpe2NvbnN0IENuPUZkKGQmJkJlPjAmJjA9PT1FZSksdG49''@;'; put 'put ''ZHQuY29sKzEsTW49QnModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhkdC5yb3ctcmUsdG4+PVo/dG4tWjp0bik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLHRuPj1aKSxDbi52YWx1ZT90aGlzLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoImluc2VydFJvd1JlcXVpcmUiLEJzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZVJvd3MoKSk6cHQmJmR0LmFzc2lnbihNbil9ZWxzZSBpZihkdC5yb3c8MCl7Y29uc3QgQ249RmQocHQpLHRuPWR0LmNvbC0xLE1uPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMocmUrZHQucm93''@;'; put 'put ''LHRuPDA/Wit0bjp0bik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixDbixRdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLHRuPDApLHB0JiZkdC5hc3NpZ24oTW4pfWlmKGR0LmNvbD49Wil7Y29uc3QgQ249RmQoZCYmcWU+MCksdG49ZHQucm93KzEsTW49QnModWMs''@;'; put 'put ''dGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0bj49cmU/dG4tcmU6dG4sZHQuY29sLVopO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsQ24sUXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bj49cmUpLENuLnZhbHVlP3RoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVx''@;'; put 'put ''dWlyZSIsQnModWMsdGhpcykuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKTpydCYmZHQuYXNzaWduKE1uKX1lbHNlIGlmKGR0LmNvbDwwKXtjb25zdCBDbj1GZChydCksdG49ZHQucm93LTEsTW49QnModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0bjwwP3JlK3RuOnRuLForZHQuY29sKTt0''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG48MCkscnQmJmR0LmFzc2lnbihNbil9Y29uc3R7cm93RGlyOkp0LGNvbERpcjp2bn09UXUocDAsdGhpcywkM2UpLmNhbGwodGhpcyxkdCk7TT1KdCxEPXZuLGY9UXUocDAs''@;'; put 'put ''dGhpcyxNXykuY2FsbCh0aGlzLGR0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmLE0sRCksZn10cmFuc2Zvcm1FbmQobCxhKXtjb25zdCBkPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSxoPUJzKHhQLHRoaXMpLmN1cnJlbnQoKSxm''@;'; put 'put ''PUJzKHVjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCksdj1RdShwMCx0aGlzLGJYKS5jYWxsKHRoaXMsaC50by5yb3csaC5mcm9tLnJvdyksTT1RdShwMCx0aGlzLHlYKS5jYWxsKHRoaXMsaC50by5jb2wsaC5mcm9tLmNvbCksRD1oLnRvLmNsb25lKCk7bGV0''@;'; put 'put ''IFo9MCxyZT0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtRW5kIixkKSxudWxsIT09Zi5yb3cmJm51bGwhPT1mLmNvbCYmbnVsbCE9PXYmJm51bGwhPT1NKXtjb25zdHtyb3c6Y2UsY29sOmJlfT1RdShwMCx0aGlzLHEzZSkuY2FsbCh0aGlzLGguaGlnaGxpZ2h0KSxF''@;'; put 'put ''ZT1Ccyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHYrZC5yb3csTStkLmNvbCksQmU9aC5nZXRUb3BTdGFydENvcm5lcigpLHFlPWguZ2V0VG9wRW5kQ29ybmVyKCkscnQ9aC5nZXRCb3R0b21FbmRDb3JuZXIoKTtpZihkLmNvbDwwJiZNPj1iZSYmRWUuY29sPGJlKXtjb25zdCB2bj1FZS5j''@;'; put 'put ''b2wtYmU7RWUuY29sPVF1KHAwLHRoaXMseVgpLmNhbGwodGhpcyxCZS5jb2wscWUuY29sKSt2bn1lbHNlIGlmKGQuY29sPjAmJk08PWJlJiZFZS5jb2w+YmUpe2NvbnN0IHZuPVF1KHAwLHRoaXMseVgpLmNhbGwodGhpcyxxZS5jb2wsQmUuY29sKSxDbj1NYXRoLm1heChFZS5jb2wtdm4sMSk7''@;'; put 'put ''RWUuY29sPXZuK0NufWlmKGQucm93PDAmJnY+PWNlJiZFZS5yb3c8Y2Upe2NvbnN0IHZuPUVlLnJvdy1jZTtFZS5yb3c9UXUocDAsdGhpcyxiWCkuY2FsbCh0aGlzLEJlLnJvdyxydC5yb3cpK3ZufWVsc2UgaWYoZC5yb3c+MCYmdjw9Y2UmJkVlLnJvdz5jZSl7Y29uc3Qgdm49UXUocDAsdGhp''@;'; put 'put ''cyxiWCkuY2FsbCh0aGlzLHJ0LnJvdyxCZS5yb3cpLENuPU1hdGgubWF4KEVlLnJvdy12biwxKTtFZS5yb3c9dm4rQ259Y29uc3R7cm93RGlyOnB0LGNvbERpcjpkdH09UXUocDAsdGhpcywkM2UpLmNhbGwodGhpcyxFZSk7Wj1wdCxyZT1kdDtjb25zdCBKdD1RdShwMCx0aGlzLE1fKS5jYWxs''@;'; put 'put ''KHRoaXMsRWUpOzA9PT1kLnJvdyYmMCE9PWQuY29sP0QuY29sPUp0LmNvbDowIT09ZC5yb3cmJjA9PT1kLmNvbD9ELnJvdz1KdC5yb3c6KEQucm93PUp0LnJvdyxELmNvbD1KdC5jb2wpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixELFoscmUpLER9c2V0''@;'; put 'put ''T2Zmc2V0U2l6ZShsKXtsZXR7eDphLHk6ZH09bDtNUCh1Myx0aGlzLHt4OmEseTpkfSl9cmVzZXRPZmZzZXRTaXplKCl7TVAodTMsdGhpcyx7eDowLHk6MH0pfX1mdW5jdGlvbiAkM2UoYyl7Y29uc3R7d2lkdGg6bCxoZWlnaHQ6YX09UXUocDAsdGhpcyxLM2UpLmNhbGwodGhpcyk7bGV0IGQ9''@;'; put 'put ''MCxoPTA7cmV0dXJuIGMucm93PDA/KGQ9LTEsYy5yb3c9MCk6Yy5yb3c+MCYmYy5yb3c+PWEmJihkPTEsYy5yb3c9YS0xKSxjLmNvbDwwPyhoPS0xLGMuY29sPTApOmMuY29sPjAmJmMuY29sPj1sJiYoaD0xLGMuY29sPWwtMSkse3Jvd0RpcjpkLGNvbERpcjpofX1mdW5jdGlvbiBLM2UoKXty''@;'; put 'put ''ZXR1cm57d2lkdGg6QnModTMsdGhpcykueCtCcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksaGVpZ2h0OkJzKHUzLHRoaXMpLnkrQnModWMsdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpfX1mdW5jdGlvbiBiWChjLGwpe2NvbnN0IGE9QnModWMsdGhpcykuZmluZEZpcnN0''@;'; put 'put ''Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyhjLGwpO3JldHVybiBudWxsPT09YT9udWxsOkJzKHUzLHRoaXMpLnkrYX1mdW5jdGlvbiB5WChjLGwpe2NvbnN0IGE9QnModWMsdGhpcykuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbihjLGwpO3JldHVybiBudWxsPT09YT9udWxsOkJz''@;'; put 'put ''KHUzLHRoaXMpLngrYX1mdW5jdGlvbiBxM2UoYyl7Y29uc3R7cm93OmwsY29sOmF9PUJzKHVjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhjKTtpZihudWxsPT09bHx8bnVsbD09PWEpdGhyb3cgbmV3IEVycm9yKCJSZW5kZXJhYmxlIGNvb3JkcyBhcmUgbm90IHZpc2libGUuIik7''@;'; put 'put ''cmV0dXJuIEJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoQnModTMsdGhpcykueStsLEJzKHUzLHRoaXMpLngrYSl9ZnVuY3Rpb24gTV8oYyl7Y29uc3QgbD1jLmNsb25lKCk7cmV0dXJuIGwuY29sPWMuY29sLUJzKHUzLHRoaXMpLngsbC5yb3c9Yy5yb3ctQnModTMsdGhpcykueSxCcyh1''@;'; put 'put ''Yyx0aGlzKS5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl9VGwoRzNlLHkxKTtjb25zdCBYM2U9RzNlLHVudD1bMywyXSxkbnQ9W1sibnVtYmVyIl0sWyJudW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLHdY''@;'; put 'put ''PVN5bWJvbCgicm9vdCIpLFEzZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24geF8oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndYO2lmKGwhPT13WCYmbCE9PVEzZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJn''@;'; put 'put ''dW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4iKTtjb25zdCBhPUFycmF5LmlzQXJyYXkoYyksZD1sPT09d1g7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgZks/aD0zOmQmJkFy''@;'; put 'put ''cmF5LmlzQXJyYXkoZik/aD14XyhmLFEzZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYhYy5zb21lKChNLEQpPT4hZG50W0RdLmluY2x1ZGVzKHR5cGVvZiBNKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIFFFKGMpe2xldHtjcmVhdGVDZWxsQ29vcmRzOmwsY3JlYXRlQ2VsbFJhbmdl''@;'; put 'put ''OmEsa2VlcERpcmVjdGlvbjpkPSExLHByb3BUb0NvbDpofT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXVudC5pbmNsdWRlcyhjKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNlbGVjdGlvbiByYW5nZXMgc2NoZW1h''@;'; put 'put ''IHR5cGUgd2FzIHByb3ZpZGVkLiIpO3JldHVybiBmdW5jdGlvbihmKXtjb25zdCB2PTM9PT1jO2xldCBNPXY/Zi5mcm9tLnJvdzpmWzBdLEQ9dj9mLmZyb20uY29sOmZbMV0sWj12P2YudG8ucm93OmZbMl0scmU9dj9mLnRvLmNvbDpmWzNdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBEJiYoRD1oKEQpKSwic3RyaW5nIj09dHlwZW9mIHJlJiYocmU9aChyZSkpKSx5YyhaKSYmKFo9TSkseWMocmUpJiYocmU9RCksIWQpe2NvbnN0IEVlPU0sQmU9RCxxZT1aLHJ0PXJlO009TWF0aC5taW4oRWUscWUpLEQ9TWF0aC5taW4oQmUscnQpLFo9TWF0aC5tYXgo''@;'; put 'put ''RWUscWUpLHJlPU1hdGgubWF4KEJlLHJ0KX1jb25zdCBjZT1sKE0sRCksYmU9bChaLHJlKTtyZXR1cm4gYShjZSxjZSxiZSl9fWZ1bmN0aW9uIEVfKGMsbCxhKXsoZnVuY3Rpb24gcG50KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBlOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZ250KGMpe3ZhciBsPWZ1bmN0aW9uIG1udChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7''@;'; put 'put ''dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFs''@;'; put 'put ''dWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdy''@;'; put 'put ''aXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gd2MoYyxsKXtyZXR1cm4gYy5nZXQoZXBlKGMsbCkpfWZ1bmN0aW9uIEZwKGMsbCxhKXtyZXR1cm4gYy5zZXQoZXBlKGMsbCksYSksYX1mdW5jdGlvbiBlcGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBfMT1uZXcgV2Vha01hcCx0OT1uZXcgV2Vha01hcCxBUD1uZXcgV2Vha01hcCxlVD1uZXcgV2Vha01hcCxr''@;'; put 'put ''UD1uZXcgV2Vha01hcCx0VD1uZXcgV2Vha01hcDtjbGFzcyB0cGV7Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO2U5KHRoaXMsInNldHRpbmdzIix2b2lkIDApLGU5KHRoaXMsInRhYmxlUHJvcHMiLHZvaWQgMCksZTkodGhpcywiaW5Qcm9ncmVzcyIsITEpLGU5KHRoaXMsInNlbGVjdGVk''@;'; put 'put ''UmFuZ2UiLG5ldyBsbnQoKGgsZix2KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsdikpKSxlOSh0aGlzLCJoaWdobGlnaHQiLHZvaWQgMCksRV8odGhpcyxfMSx2b2lkIDApLEVfKHRoaXMsdDksdm9pZCAwKSxlOSh0aGlzLCJzZWxlY3RlZEJ5Um93SGVhZGVyIixuZXcg''@;'; put 'put ''U2V0KSxlOSh0aGlzLCJzZWxlY3RlZEJ5Q29sdW1uSGVhZGVyIixuZXcgU2V0KSxFXyh0aGlzLEFQLCExKSxFXyh0aGlzLGVULCExKSxFXyh0aGlzLGtQLCJ1bmtub3duIiksRV8odGhpcyx0VCwtMSksdGhpcy5zZXR0aW5ncz1sLHRoaXMudGFibGVQcm9wcz1hLHRoaXMuaGlnaGxpZ2h0PW5l''@;'; put 'put ''dyBpbnQoe2hlYWRlckNsYXNzTmFtZTpsLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLHJvd0NsYXNzTmFtZTpsLmN1cnJlbnRSb3dDbGFzc05hbWUsY29sdW1uQ2xhc3NOYW1lOmwuY3VycmVudENvbENsYXNzTmFt''@;'; put 'put ''ZSxjZWxsQXR0cmlidXRlczpbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSxyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjoo''@;'; put 'put ''aCxmKT0+dGhpcy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNB''@;'; put 'put ''cmVhQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3Vh''@;'; put 'put ''bENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KX0pLEZwKF8xLHRoaXMsbmV3IFgzZSh0aGlzLnNl''@;'; put 'put ''bGVjdGVkUmFuZ2Use3Jvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsY291bnRSZW5kZXJhYmxlUm93czooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZVJvd3MoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3Vh''@;'; put 'put ''bENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKX0s''@;'; put 'put ''ZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNwYXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1''@;'; put 'put ''dG9XcmFwQ29sfSkpLEZwKHQ5LHRoaXMsbmV3IFgzZSh0aGlzLnNlbGVjdGVkUmFuZ2Use3Jvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsY291bnRSZW5kZXJhYmxl''@;'; put 'put ''Um93czooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtyZXR1cm4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsaC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLnJvdyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9Pntjb25z''@;'; put 'put ''dCBoPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7cmV0dXJuIHRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGguZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5jb2wpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5m''@;'; put 'put ''aW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KC4uLmFyZ3VtZW50cyl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJndW1lbnRzKX0sY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PjAsbWluU3BhcmVSb3dzOigpPT4wLG1pblNwYXJlQ29sczooKT0+MCxhdXRvV3JhcFJvdzooKT0+ITAsYXV0b1dyYXBDb2w6KCk9PiEwfSkpLHdjKF8x''@;'; put 'put ''LHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJh''@;'; put 'put ''bnNmb3JtU3RhcnQiLC4uLmYpfSksd2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSksd2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1''@;'; put 'put ''bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHdjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCks''@;'; put 'put ''dj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksd2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSksd2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLC4uLmYpfSksd2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLC4uLmYpfSksd2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVDb2x1bW5XcmFwIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLC4uLmYpfSksd2ModDksdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFu''@;'; put 'put ''c2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KSx3Yyh0OSx0aGlz''@;'; put 'put ''KS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1G''@;'; put 'put ''b2N1cyIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX1tYXJrU291cmNlKGwpe0ZwKGtQLHRoaXMsbCl9bWFya0VuZFNvdXJjZSgpe0ZwKGtQLHRoaXMsInVua25vd24iKX1nZXRTZWxlY3Rpb25Tb3VyY2UoKXtyZXR1cm4gd2Moa1AsdGhpcyl9''@;'; put 'put ''c2V0RXhwZWN0ZWRMYXllcnMobCl7RnAodFQsdGhpcyxsKX1iZWdpbigpe3RoaXMuaW5Qcm9ncmVzcz0hMH1maW5pc2goKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSEx''@;'; put 'put ''LEZwKHRULHRoaXMsLTEpfWlzSW5Qcm9ncmVzcygpe3JldHVybiB0aGlzLmluUHJvZ3Jlc3N9c2V0UmFuZ2VTdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bDtjb25zdCBmPSJtdWx0aXBsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUsdj15YyhhKT90aGlzLnRhYmxlUHJvcHMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpOmEsTT1sLmNsb25lKCk7RnAoQVAsdGhpcywh''@;'; put 'put ''MSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IisoZD8iT25seSI6IiIpLE0pLCghZnx8ZiYmIXYmJnljKGEpKSYmdGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChNKS5jdXJyZW50KCkuc2V0SGlnaGxpZ2h0KGguY2xvbmUo''@;'; put 'put ''KSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLGR8fHRoaXMuc2V0UmFuZ2VFbmQobCl9c2V0UmFuZ2VTdGFydE9ubHkobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQo''@;'; put 'put ''bCxhLCEwLGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsKX1zZXRSYW5nZUVuZChsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPWwuY2xvbmUoKSxkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3Mo''@;'; put 'put ''KSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxmPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuY2xvbmUoKS5zZXRUbyhsKS5pc1NpbmdsZUhlYWRlcigpO2lmKChkPjB8fGg+MCkmJigwPT09ZCYmYS5jb2w8MCYmIWZ8fDA9PT1oJiZhLnJvdzwwJiYhZikpcmV0dXJuO3RoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4oKTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzfHx2LmhpZ2hsaWdodC5ub3JtYWxpemUoKSwic2luZ2xlIj09PXRoaXMuc2V0''@;'; put 'put ''dGluZ3Muc2VsZWN0aW9uTW9kZSl2LnNldEZyb20odi5oaWdobGlnaHQpLHYuc2V0VG8odi5oaWdobGlnaHQpO2Vsc2V7Y29uc3QgRD12LmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxaPXYuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxyZT10aGlzLmlzTXVsdGlwbGUoKTt2LnNldFRvKGEpLHJl''@;'; put 'put ''JiYoRCE9PXYuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpfHwxPT09di5nZXRXaWR0aCgpJiYhdi5pbmNsdWRlcyh2LmhpZ2hsaWdodCkpJiZ2LmZyb20uYXNzaWduKHtjb2w6di5oaWdobGlnaHQuY29sfSkscmUmJihaIT09di5nZXRWZXJ0aWNhbERpcmVjdGlvbigpfHwxPT09di5nZXRIZWln''@;'; put 'put ''aHQoKSYmIXYuaW5jbHVkZXModi5oaWdobGlnaHQpKSYmdi5mcm9tLmFzc2lnbih7cm93OnYuaGlnaGxpZ2h0LnJvd30pfWQ+MCYmaD4wJiYoIXRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzJiYhdi5pc1NpbmdsZUhlYWRlcigp''@;'; put 'put ''KSYmdi50by5ub3JtYWxpemUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuc2V0UmFuZ2VGb2N1cyh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCksdGhpcy5hcHBseUFuZENvbW1pdCgpO2NvbnN0IE09LTE9PT13Yyh0VCx0aGlz''@;'; put 'put ''KXx8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKT09PXdjKHRULHRoaXMpO3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRSYW5nZUVuZCIsbCxNKX1hcHBseUFuZENvbW1pdCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0''@;'; put 'put ''aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50''@;'; put 'put ''Q29scygpO2E8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKFluKHRoaXMuaGlnaGxpZ2h0LmdldEFyZWFzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0TGF5ZXJlZEFyZWFzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Um93SGVh''@;'; put 'put ''ZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldENvbHVtbkhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVSb3dIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZl''@;'; put 'put ''Q29sdW1uSGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIaWdobGlnaHRzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGln''@;'; put 'put ''aHQuZ2V0Q29sdW1uSGlnaGxpZ2h0cygpLEJlPT57QmUuY2xlYXIoKX0pKSx0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpO2NvbnN0IGY9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxNPXRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LmNyZWF0ZVJvd0hlYWRlcigpLEQ9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCksWj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxyZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxjZT10aGlzLmhpZ2hsaWdodC5jcmVh''@;'; put 'put ''dGVBY3RpdmVDb3JuZXJIZWFkZXIoKSxiZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIaWdobGlnaHQoKSxFZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IaWdobGlnaHQoKTtpZihmLmNsZWFyKCksdi5jbGVhcigpLE0uY2xlYXIoKSxELmNsZWFyKCksWi5jbGVhcigpLHJlLmNsZWFy''@;'; put 'put ''KCksY2UuY2xlYXIoKSxiZS5jbGVhcigpLEVlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKGdYLGwuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxhPj0xKSYmKGYuYWRkKGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLHYuYWRkKGwuZnJvbSkuYWRkKGwudG8p''@;'; put 'put ''LmNvbW1pdCgpLDE9PT1hKSl7Y29uc3QgQmU9dGhpcy5zZWxlY3RlZFJhbmdlLnByZXZpb3VzKCk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhLTEpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKS5hZGQoQmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoQmUpLHRoaXMuaGlnaGxp''@;'; put 'put ''Z2h0LmNyZWF0ZUxheWVyZWRBcmVhKCkuYWRkKEJlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEJlKSx0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpfWlmKHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihwWCxsLmhpZ2hsaWdodCkpe2lmKCFsLmlzU2luZ2xlSGVhZGVyKCkpe2Nv''@;'; put 'put ''bnN0IHJ0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwuZnJvbS5yb3csMCksLTEpLHB0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwudG8ucm93LC0xKSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChs''@;'; put 'put ''LmZyb20uY29sLDApKSxKdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxsLnRvLmNvbCk7InNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KE0uYWRkKHJ0KS5jb21taXQoKSxELmFkZChkdCkuY29tbWl0KCksYmUuYWRkKHJ0KS5jb21taXQoKSxFZS5h''@;'; put 'put ''ZGQoZHQpLmNvbW1pdCgpKTooTS5hZGQocnQpLmFkZChwdCkuY29tbWl0KCksRC5hZGQoZHQpLmFkZChKdCkuY29tbWl0KCksYmUuYWRkKHJ0KS5hZGQocHQpLmNvbW1pdCgpLEVlLmFkZChkdCkuYWRkKEp0KS5jb21taXQoKSl9Y29uc3QgQmU9IXdjKGVULHRoaXMpJiZ0aGlzLmlzRW50aXJl''@;'; put 'put ''Um93U2VsZWN0ZWQoKSYmKGg+MCYmaD09PWwuZ2V0V2lkdGgoKXx8MD09PWgmJnRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpLHFlPSF3YyhlVCx0aGlzKSYmdGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCkmJihkPjAmJmQ9PT1sLmdldEhlaWdodCgpfHwwPT09ZCYmdGhpcy5pc1Nl''@;'; put 'put ''bGVjdGVkQnlDb2x1bW5IZWFkZXIoKSk7QmUmJlouYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwuZnJvbS5yb3csMCksTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSwtMSkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoTWF0aC5tYXgobC50by5yb3csMCksLTEpKS5jb21taXQoKSxxZSYmcmUuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLTEpLE1hdGgubWF4KGwuZnJvbS5jb2wsMCkpKS5h''@;'; put 'put ''ZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobC50by5jb2wsMCkpKS5jb21taXQoKSxCZSYmcWUmJmNlLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC10aGlzLnRhYmxl''@;'; put 'put ''UHJvcHMuY291bnRSb3dIZWFkZXJzKCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsLTEpKS5jb21taXQoKX19c2V0UmFuZ2VGb2N1cyhsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPXRoaXMuc2VsZWN0ZWRSYW5nZS5j''@;'; put 'put ''dXJyZW50KCk7dGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldEZvY3VzIixsKTtjb25zdCBkPXRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCk7ZC5jbGVhcigpLGEuc2V0SGlnaGxpZ2h0KGwpLHRoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJi''@;'; put 'put ''ZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoSkUsYS5oaWdobGlnaHQpJiZkLmFkZChhLmhpZ2hsaWdodCkuY29tbWl0KCkuc3luY1dpdGgoYSksdGhpcy5pblByb2dyZXNzfHwoRnAoQVAsdGhpcywhMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNl''@;'; put 'put ''dEZvY3VzIixhLmhpZ2hsaWdodCkpfXRyYW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/d2MoXzEsdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDp0''@;'; put 'put ''aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkseTp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCl9KTp3YyhfMSx0aGlzKS5yZXNldE9mZnNldFNpemUoKSx0aGlzLnNldFJhbmdlU3RhcnQod2MoXzEsdGhpcykudHJhbnNmb3JtU3RhcnQobCxhLGQpKX10cmFuc2Zvcm1F''@;'; put 'put ''bmQobCxhKXt0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/d2MoXzEsdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkseTp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCl9KTp3YyhfMSx0aGlzKS5yZXNldE9mZnNldFNp''@;'; put 'put ''emUoKSx0aGlzLnNldFJhbmdlRW5kKHdjKF8xLHRoaXMpLnRyYW5zZm9ybUVuZChsLGEpKX10cmFuc2Zvcm1Gb2N1cyhsLGEpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSx7cm93OmgsY29sOmZ9PWQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVBy''@;'; put 'put ''b3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsZi0xKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGgtMSk7ZC5oaWdobGlnaHQuaXNIZWFkZXIoKT93Yyh0OSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OmY8MD9NYXRoLmFicyhmKTotdix5''@;'; put 'put ''Omg8MD9NYXRoLmFicyhoKTotTX0pOndjKHQ5LHRoaXMpLnNldE9mZnNldFNpemUoe3g6ZjwwPzA6LXYseTpoPDA/MDotTX0pO2NvbnN0IEQ9d2ModDksdGhpcykudHJhbnNmb3JtU3RhcnQobCxhKTt0aGlzLnNldFJhbmdlRm9jdXMoRC5ub3JtYWxpemUoKSl9c2hpZnRSb3dzKGwsYSl7aWYo''@;'; put 'put ''IXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3Rl''@;'; put 'put ''ZEJ5Q29sdW1uSGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLnJvdz49bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFo9dGhpcy5pc1NlbGVjdGVk''@;'; put 'put ''QnlDb2x1bW5IZWFkZXIoKSxyZT1aPy0xOjAsY2U9Wj8wOmE7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgYmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoa3MoaC5yb3crY2UscmUsTS0xKSxoLmNvbCksRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoa3MoZi5yb3crYSxyZSxNLTEpLGYuY29sKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0Iiksdi5yb3c+PWw/dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhrcyh2LnJvdythLDAsTS0xKSx2LmNvbCkpOnRoaXMuc2V0UmFu''@;'; put 'put ''Z2VTdGFydE9ubHkoYmUsITApLEQmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFomJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoRWUpLHRoaXMubWFya0VuZFNv''@;'; put 'put ''dXJjZSgpfX1zaGlmdENvbHVtbnMobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdo''@;'; put 'put ''dDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPj1sKXtjb25zdHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZCxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxEPXRoaXMuaXNTZWxlY3RlZEJ5Um93''@;'; put 'put ''SGVhZGVyKCksWj10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHJlPUQ/LTE6MCxjZT1EPzA6YTt0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKTtjb25zdCBiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxrcyhoLmNvbCtjZSxyZSxNLTEpKSxFZT10''@;'; put 'put ''aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxrcyhmLmNvbCthLHJlLE0tMSkpO3RoaXMubWFya1NvdXJjZSgic2hpZnQiKSx2LmNvbD49bD90aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwLHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHYucm93LGtzKHYu''@;'; put 'put ''Y29sK2EsMCxNLTEpKSk6dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCksRCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWiYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRS''@;'; put 'put ''YW5nZUVuZChFZSksdGhpcy5tYXJrRW5kU291cmNlKCl9fWdldExheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xfWlzU2VsZWN0ZWQoKXtyZXR1cm4hdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKX1pc011bHRpcGxlKCl7aWYoIXRoaXMuaXNTZWxlY3Rl''@;'; put 'put ''ZCgpKXJldHVybiExO2NvbnN0IGw9RmQoIXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaXNTaW5nbGUoKSk7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixsKSxsLnZhbHVlfWlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNTZWxlY3RlZCgpJiZ3YyhBUCx0aGlzKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVy''@;'; put 'put ''KGwpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyhsKSl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlz''@;'; put 'put ''LmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtjb2w6Zn09aC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0''@;'; put 'put ''V2lkdGgoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCBs''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0''@;'; put 'put ''ZWRCeUNvbHVtbkhlYWRlci5oYXMobCkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7cm93OmZ9PWguZ2V0T3V0''@;'; put 'put ''ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldEhlaWdodCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsKTtyZXR1cm4hIWQmJmEoZCl9aXNTZWxlY3RlZEJ5QW55SGVhZGVyKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlD''@;'; put 'put ''b2x1bW5IZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpfWlzU2VsZWN0ZWRCeUNvcm5lcigpe3JldHVybiB0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyh0aGlzLmdldExh''@;'; put 'put ''eWVyTGV2ZWwoKSl9aW5JblNlbGVjdGlvbihsKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLmluY2x1ZGVzKGwpfWlzQ2VsbENvcm5lclZpc2libGUoKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJiF0aGlzLmlz''@;'; put 'put ''TXVsdGlwbGUoKX1pc0NlbGxWaXNpYmxlKGwpe2NvbnN0IGE9dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKTtyZXR1cm4gbnVsbCE9PWEucm93JiZudWxsIT09YS5jb2x9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8''@;'; put 'put ''fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9''@;'; put 'put ''ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''JiZhcmd1bWVudHNbMF0sZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOntmb2N1c1Bvc2l0aW9uOiExLGRpc2FibGVIZWFkZXJzSGln''@;'; put 'put ''aGxpZ2h0OiExfTtjb25zdCBmPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxEPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxaPWQ/LUQ6MCxyZT1hPy1N''@;'; put 'put ''OjA7aWYoMD09PVomJjA9PT1yZSYmKDA9PT1mfHwwPT09dikpcmV0dXJuO2xldCBjZT1udWxsPT09KGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7Y29uc3R7Zm9jdXNQb3NpdGlvbjpiZSxkaXNhYmxlSGVhZGVyc0hp''@;'; put 'put ''Z2hsaWdodDpFZX09aDtGcChlVCx0aGlzLEVlKSxiZSYmTnVtYmVyLmlzSW50ZWdlcihiZT8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihiZT8uY29sKSYmKGNlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtzKGJlLnJvdyxaLGYtMSksa3MoYmUuY29sLHJlLHYtMSkpKTtjb25z''@;'; put 'put ''dCBCZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhaLHJlKSxxZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhmLTEsdi0xKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShCZSx2b2lkIDAsY2UpLHJlPDAmJnRoaXMuc2VsZWN0ZWRCeVJvd0hl''@;'; put 'put ''YWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFo8MCYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChxZSksdGhpcy5maW5pc2goKSxGcChlVCx0aGlzLCExKX1zZWxlY3RDZWxscyhsKXt2YXIgYT10aGlz''@;'; put 'put ''O2NvbnN0IGQ9eF8obCk7aWYoMT09PWQpcmV0dXJuITE7aWYoMD09PWQpdGhyb3cgbmV3IEVycm9yKGdsYFVuc3VwcG9ydGVkIGZvcm1hdCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlcyB3YXMgcGFzc2VkLiBUbyBzZWxlY3QgY2VsbHMgcGFzc1x4MjAKICAgICAgICB0aGUgY29vcmRpbmF0ZXMg''@;'; put 'put ''YXMgYW4gYXJyYXkgb2YgYXJyYXlzIChbW3Jvd1N0YXJ0LCBjb2x1bW5TdGFydC9jb2x1bW5Qcm9wU3RhcnQsIHJvd0VuZCxceDIwCiAgICAgICAgY29sdW1uRW5kL2NvbHVtblByb3BFbmRdXSkgb3IgYXMgYW4gYXJyYXkgb2YgQ2VsbFJhbmdlIG9iamVjdHMuYCk7Y29uc3QgaD1RRShkLHtj''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC4uLmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxSYW5nZTpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKC4uLmFyZ3VtZW50cyl9LHByb3BUb0Nv''@;'; put 'put ''bDpEPT50aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKEQpLGtlZXBEaXJlY3Rpb246ITB9KSxmPXRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyx2PXtjb3VudFJvd3M6dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGNvdW50Q29sczp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCks''@;'; put 'put ''Y291bnRSb3dIZWFkZXJzOmY/dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpOjAsY291bnRDb2xIZWFkZXJzOmY/dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpOjB9LE09IWwuc29tZShEPT57Y29uc3QgWj1oKEQpLHJlPVouaXNWYWxpZCh2KTtyZXR1cm4hKHJlJiYh''@;'; put 'put ''Wi5jb250YWluc0hlYWRlcnMoKXx8cmUmJlouY29udGFpbnNIZWFkZXJzKCkmJlouaXNTaW5nbGVIZWFkZXIoKSl9KTtyZXR1cm4gTSYmKHRoaXMuY2xlYXIoKSx0aGlzLnNldEV4cGVjdGVkTGF5ZXJzKGwubGVuZ3RoKSxZbihsLEQ9Pntjb25zdHtmcm9tOlosdG86cmV9PWgoRCk7dGhpcy5z''@;'; put 'put ''ZXRSYW5nZVN0YXJ0T25seShaLmNsb25lKCksITEpLHRoaXMuc2V0UmFuZ2VFbmQocmUuY2xvbmUoKSl9KSx0aGlzLmZpbmlzaCgpKSxNfXNlbGVjdENvbHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtjb25zdCBoPSJzdHJpbmciPT10eXBlb2YgbD90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGwpOmwsZj0ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChhKTphLHY9''@;'; put 'put ''dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLEQ9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLFo9MD09PUQ/MDotRCxyZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhaLGgpLGNlPXRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5jcmVhdGVDZWxsQ29vcmRzKHYtMSxmKSxiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKHJlLHJlLGNlKS5pc1ZhbGlkKHtjb3VudFJvd3M6dixjb3VudENvbHM6TSxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6RH0pO2lmKGJlKXtsZXQgRWU9MCxCZT0wO051''@;'; put 'put ''bWJlci5pc0ludGVnZXIoZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihkPy5jb2wpPyhFZT1rcyhkLnJvdyxaLHYtMSksQmU9a3MoZC5jb2wsTWF0aC5taW4oaCxmKSxNYXRoLm1heChoLGYpKSk6KEVlPWtzKGQsWix2LTEpLEJlPWgpO2NvbnN0IHFlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKEVlLEJlKSxydD0wPT09RD8wOmtzKHFlLnJvdyxaLC0xKSxwdD12LTEsZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMocnQsaCksSnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMocHQsZik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxl''@;'; put 'put ''Y3RDb2x1bW5zIixkdCxKdCxxZSksZHQucm93PXJ0LEp0LnJvdz1wdCx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGR0LHZvaWQgMCxxZSksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChKdCksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMiLGR0LEp0LHFlKSx0aGlzLmZpbmlzaCgpfXJldHVybiBiZX1zZWxlY3RSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3QgaD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT0wPT09dj8wOi12LEQ9dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LmNyZWF0ZUNlbGxDb29yZHMobCxNKSxaPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSxyZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKEQsRCxaKS5pc1ZhbGlkKHtjb3VudFJvd3M6aCxjb3VudENvbHM6Zixjb3VudFJvd0hlYWRlcnM6dixjb3VudENv''@;'; put 'put ''bEhlYWRlcnM6MH0pO2lmKHJlKXtsZXQgY2U9MCxiZT0wO051bWJlci5pc0ludGVnZXIoZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihkPy5jb2wpPyhjZT1rcyhkLnJvdyxNYXRoLm1pbihsLGEpLE1hdGgubWF4KGwsYSkpLGJlPWtzKGQuY29sLE0sZi0xKSk6KGNlPWwsYmU9a3MoZCxNLGYt''@;'; put 'put ''MSkpO2NvbnN0IEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGNlLGJlKSxCZT0wPT09dj8wOmtzKEVlLmNvbCxNLC0xKSxxZT1mLTEscnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxCZSkscHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''YSxxZSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RSb3dzIixydCxwdCxFZSkscnQuY29sPUJlLHB0LmNvbD1xZSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHJ0LHZvaWQgMCxFZSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhp''@;'; put 'put ''cy5zZXRSYW5nZUVuZChwdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLHJ0LHB0LEVlKSx0aGlzLmZpbmlzaCgpfXJldHVybiByZX1yZWZyZXNoKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBsPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxh''@;'; put 'put ''PXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZigwPT09bHx8MD09PWEpcmV0dXJuIHZvaWQgdGhpcy5kZXNlbGVjdCgpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMSkse2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2''@;'; put 'put ''fT1kO3RoaXMuY2xlYXIoKSx2LmFzc2lnbih7cm93OmtzKHYucm93LC0xLzAsbC0xKSxjb2w6a3Modi5jb2wsLTEvMCxhLTEpfSksaC5hc3NpZ24oe3JvdzprcyhoLnJvdywtMS8wLGwtMSksY29sOmtzKGguY29sLC0xLzAsYS0xKX0pLGYuYXNzaWduKHtyb3c6a3MoZi5yb3csMCxsLTEpLGNv''@;'; put 'put ''bDprcyhmLmNvbCwwLGEtMSl9KSx0aGlzLnNlbGVjdGVkUmFuZ2UucmFuZ2VzLnB1c2goZCksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEpFLHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5hZGQodikuY29tbWl0''@;'; put 'put ''KCkuc3luY1dpdGgoZCksdGhpcy5hcHBseUFuZENvbW1pdChkKX1jb21taXQoKXtpZih0aGlzLmhpZ2hsaWdodC5nZXRDdXN0b21TZWxlY3Rpb25zKCkuZm9yRWFjaChoPT57aC5jb21taXQoKX0pLCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldExheWVyTGV2ZWwo''@;'; put 'put ''KSxkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7dGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEpFLGQuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5jb21taXQoKS5zeW5jV2l0aChkKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7''@;'; put 'put ''aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNy''@;'; put 'put ''ZWF0ZUNvbHVtbkhlYWRlcigpLFo9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCkscmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksYmU9dGhpcy5oaWdobGln''@;'; put 'put ''aHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksRWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7Zi5jb21taXQoKSx2LmNvbW1pdCgpLE0uY29tbWl0KCksRC5jb21taXQoKSxaLmNvbW1pdCgpLHJlLmNvbW1pdCgpLGNlLmNvbW1pdCgpLGJlLmNvbW1pdCgpLEVlLmNvbW1p''@;'; put 'put ''dCgpfXRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9fVRsKHRwZSx5MSk7Y29uc3Qgdm50PXRwZSx7cmVnaXN0ZXI6Ym50LGdldEl0ZW06eW50LGhhc0l0ZW06bnBlLGdldE5hbWVzOl9udH09cjMoImNlbGxUeXBlcyIpO2Z1bmN0aW9uIENYKGMpe2lmKCFucGUoYykpdGhyb3cgRXJy''@;'; put 'put ''b3IoYFlvdSBkZWNsYXJlZCBjZWxsIHR5cGUgIiR7Y30iIGFzIGEgc3RyaW5nIHRoYXQgaXMgbm90IG1hcHBlZCB0byBhIGtub3duIG9iamVjdC5cbiAgICAgICAgICAgICAgICAgQ2VsbCB0eXBlIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nIG1hcHBlZCB0byBhbiBvYmplY3QgcmVn''@;'; put 'put ''aXN0ZXJlZCBieVxuICAgICAgICAgICAgICAgICAiSGFuZHNvbnRhYmxlLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlIiBtZXRob2RgKTtyZXR1cm4geW50KGMpfWZ1bmN0aW9uIEcyKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5DRUxMX1RZUEUpO2NvbnN0e2VkaXRvcjph''@;'; put 'put ''LHJlbmRlcmVyOmQsdmFsaWRhdG9yOmh9PWw7YSYmSGQoYyxhKSxkJiZEaChjLGQpLGgmJlc3KGMsaCksYm50KGMsbCl9ZnVuY3Rpb24gRFAoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Yztjb25zdCBkPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgbC50eXBlP0NYKGwudHlwZSk6bC50eXBlO2lmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmWG8obCwoZix2KT0+e2MuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUodil9KSwhcW8oZCkpcmV0dXJuO2E9PT1jJiYhYy5fYXV0b21hdGlj''@;'; put 'put ''YWxseUFzc2lnbmVkTWV0YVByb3BzJiYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGg9e307WG8oZCwoZix2KT0+e3ZhciBNOyhmdW5jdGlvbiB3bnQoYyxsKXt2YXIgYTtyZXR1cm4iQ0VMTF9UWVBFIiE9PWMmJigobnVsbD09PShhPWwuX2F1dG9t''@;'; put 'put ''YXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzKGMpKXx8IUV1KGwsYykpfSkodixhKSYmKGhbdl09ZixudWxsPT09KE09Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09TXx8TS5hZGQodikpfSkseHUoYyxoKX1mdW5j''@;'; put 'put ''dGlvbiBJUChjKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjKSYmYz49MH1mdW5jdGlvbiBSUChjLGwpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiAke2x9YCl9ZnVuY3Rpb24gTFAoYyl7cmV0dXJuIG51bGw9PWN9Y29uc3QgcnBlPSgpPT4oe19hdXRvbWF0''@;'; put 'put ''aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRfX2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1Jl''@;'; put 'put ''bW92ZUNvbHVtbjohMCxhbGxvd1JlbW92ZVJvdzohMCxhcmlhVGFnczohMCxhdXRvQ29sdW1uU2l6ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNo''@;'; put 'put ''ZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1lOnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29sbGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNv''@;'; put 'put ''bFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29tbWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFk''@;'; put 'put ''ZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1c3RvbUJvcmRlcnM6ITEsZGF0YTp2b2lkIDAsZGF0YURvdE5vdGF0aW9uOiEwLGRhdGFTY2hlbWE6dm9pZCAwLGRhdGVGb3JtYXQ6IkREL01NL1lZWVkiLHRpbWVGb3JtYXQ6Img6bW06c3Mg''@;'; put 'put ''YSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ITEsZHJhZ1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxlbnRlckJlZ2luc0VkaXRpbmc6ITAsZW50ZXJNb3Zlczp7Y29sOjAscm93''@;'; put 'put ''OjF9LGZpbGxIYW5kbGU6e2F1dG9JbnNlcnRSb3c6ITF9LGZpbHRlcjohMCxmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiExLGZpbHRlcnM6dm9pZCAwLGZpeGVkQ29sdW1uc0xlZnQ6MCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c0JvdHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFz''@;'; put 'put ''OnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoZWFkZXJDbGFzc05hbWU6dm9pZCAwLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsaW1lRmFzdEVkaXQ6ITEsaXNFbXB0eUNvbChj''@;'; put 'put ''KXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09VWMoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wr''@;'; put 'put ''KylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09VWMoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksTk8odGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIs''@;'; put 'put ''bGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFudWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93''@;'; put 'put ''UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuYXZpZ2FibGVIZWFkZXJzOiExLHRhYk5hdmlnYXRpb246ITAs''@;'; put 'put ''bmVzdGVkSGVhZGVyczp2b2lkIDAsbmVzdGVkUm93czp2b2lkIDAsbm9Xb3JkV3JhcENsYXNzTmFtZToiaHROb1dyYXAiLG51bWVyaWNGb3JtYXQ6dm9pZCAwLG9ic2VydmVET01WaXNpYmlsaXR5OiEwLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMCxwZXJzaXN0ZW50U3RhdGU6dm9pZCAwLHBs''@;'; put 'put ''YWNlaG9sZGVyOnZvaWQgMCxwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6Imh0UGxhY2Vob2xkZXIiLHByZXZlbnRPdmVyZmxvdzohMSxwcmV2ZW50V2hlZWw6ITEscmVhZE9ubHk6ITEscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJodERpbW1lZCIscmVuZGVyQWxsUm93czohMSxyZW5kZXJBbGxD''@;'; put 'put ''b2x1bW5zOiExLHJlbmRlcmVyOnZvaWQgMCxyb3dIZWFkZXJzOnZvaWQgMCxyb3dIZWFkZXJXaWR0aDp2b2lkIDAscm93SGVpZ2h0czp2b2lkIDAsc2VhcmNoOiExLHNlbGVjdGlvbk1vZGU6Im11bHRpcGxlIixzZWxlY3RPcHRpb25zOnZvaWQgMCxza2lwQ29sdW1uT25QYXN0ZTohMSxza2lw''@;'; put 'put ''Um93T25QYXN0ZTohMSxzb3J0QnlSZWxldmFuY2U6ITAsc291cmNlOnZvaWQgMCxzdGFydENvbHM6NSxzdGFydFJvd3M6NSxzdHJldGNoSDoibm9uZSIsc3RyaWN0OnZvaWQgMCx0YWJsZUNsYXNzTmFtZTp2b2lkIDAsdGhlbWVOYW1lOnZvaWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRp''@;'; put 'put ''dGxlOnZvaWQgMCx0cmltRHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOiEwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdw''@;'; put 'put ''b3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDowLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOjAsdmlzaWJsZVJvd3M6MTAsd2lkdGg6dm9pZCAwLHdvcmRXcmFwOiEwfSk7ZnVuY3Rpb24gaXBlKGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBTbnQoYyl7dmFyIGw9ZnVuY3Rpb24gTW50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBFbnR7Y29uc3RydWN0b3IobCl7aXBlKHRoaXMsIm1ldGFDdG9yIixjbGFzc3t9KSxpcGUodGhpcywibWV0''@;'; put 'put ''YSIsdm9pZCAwKSx0aGlzLm1ldGE9dGhpcy5tZXRhQ3Rvci5wcm90b3R5cGUseHUodGhpcy5tZXRhLHJwZSgpKSx0aGlzLm1ldGEuaW5zdGFuY2U9bH1nZXRNZXRhQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5tZXRhQ3Rvcn1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRh''@;'; put 'put ''KGwpe3ZhciBhO3h1KHRoaXMubWV0YSxsKSxEUCh0aGlzLm1ldGEsey4uLmwsdHlwZTpudWxsIT09KGE9bC50eXBlKSYmdm9pZCAwIT09YT9hOnRoaXMubWV0YS50eXBlfSxsKX19Y2xhc3MgRG50e2NvbnN0cnVjdG9yKGwpeyFmdW5jdGlvbiBUbnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9u''@;'; put 'put ''IEFudChjKXt2YXIgbD1mdW5jdGlvbiBrbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1''@;'; put 'put ''cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJtZXRhIix2b2lkIDApO2NvbnN0IGE9bC5nZXRNZXRhQ29uc3RydWN0b3IoKTt0aGlzLm1ldGE9bmV3IGF9Z2V0TWV0YSgp''@;'; put 'put ''e3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXt4dSh0aGlzLm1ldGEsbCksRFAodGhpcy5tZXRhLGwsbCl9fWZ1bmN0aW9uIE9QKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJbnQoYyl7dmFyIGw9ZnVuY3Rpb24gUm50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1''@;'; put 'put ''cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2''@;'; put 'put ''ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6''@;'; put 'put ''ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBQUHtjb25zdHJ1Y3RvcihsKXtPUCh0aGlzLCJ2YWx1ZUZhY3RvcnkiLHZvaWQgMCksT1AodGhpcywiZGF0YSIsW10pLE9QKHRoaXMsImluZGV4IixbXSksT1AodGhpcywiaG9sZXMiLG5ldyBTZXQpLHRoaXMudmFsdWVGYWN0b3J5PWx9''@;'; put 'put ''b2J0YWluKGwpe1JQKCgpPT5JUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPXRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0sdm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5k''@;'; put 'put ''YXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVzLnNpemU+MCl7Y29uc3QgaD10aGlzLmhvbGVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRh''@;'; put 'put ''dGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4gZH1pbnNlcnQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7UlAoKCk9PklQKGwpfHxMUChsKSwiRXhwZWN0aW5nIGFuIHVuc2ln''@;'; put 'put ''bmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtdLGg9dGhpcy5kYXRhLmxlbmd0aDtmb3IobGV0IHY9MDt2PGE7disrKWQucHVzaChoK3YpLHRoaXMuZGF0YS5wdXNoKHZvaWQgMCk7Y29uc3QgZj1MUChsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMu''@;'; put 'put ''aW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXguc2xpY2UoZildfXJlbW92ZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtSUCgoKT0+SVAobCl8fExQKGwpLCJFeHBlY3Rpbmcg''@;'; put 'put ''YW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9dGhpcy5pbmRleC5zcGxpY2UoTFAobCk/dGhpcy5pbmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBm''@;'; put 'put ''JiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMoKXtyZXR1cm4gdGhpcy5kYXRhLmZpbHRlcigobCxhKT0+dm9pZCAwIT09bCYmIXRoaXMuaG9sZXMuaGFzKGEpKVtTeW1ib2wuaXRlcmF0b3JdKCl9ZW50cmll''@;'; put 'put ''cygpe2NvbnN0IGw9W107Zm9yKGxldCBkPTA7ZDx0aGlzLmRhdGEubGVuZ3RoO2QrKyl7Y29uc3QgaD10aGlzLl9nZXRLZXlCeVN0b3JhZ2VJbmRleChkKTstMSE9PWgmJnZvaWQgMCE9PXRoaXMuZGF0YVtkXSYmbC5wdXNoKFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6''@;'; put 'put ''KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6ITB9fX19Y2xlYXIoKXt0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzLmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVy''@;'; put 'put ''biB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlzLmluZGV4LmluZGV4T2YobCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9fWZ1bmN0aW9uIGFwZShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gTG50KGMpe3ZhciBsPWZ1bmN0aW9uIE9udChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgUG50PVsiZGF0YSIsIndpZHRoIl07Y2xhc3MgRm50e2NvbnN0cnVjdG9yKGwpe2FwZSh0aGlzLCJnbG9iYWxN''@;'; put 'put ''ZXRhIix2b2lkIDApLGFwZSh0aGlzLCJtZXRhcyIsbmV3IFBQKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpKSx0aGlzLmdsb2JhbE1ldGE9bCx0aGlzLm1ldGFzPW5ldyBQUCgoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7eHUo''@;'; put 'put ''ZCxhKSxEUChkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gQ250KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtm''@;'; put 'put ''dW5jdGlvbiBhKCl7fVoyZShhLGMpO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWEucHJvdG90eXBlW2xbZF1dPXZvaWQgMDtyZXR1cm4gYX0odGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpLFBudCkucHJvdG90eXBlfX1mdW5jdGlvbiBvcGUoYyxsLGEpe3JldHVybihs''@;'; put 'put ''PWZ1bmN0aW9uIEhudChjKXt2YXIgbD1mdW5jdGlvbiBObnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9''@;'; put 'put ''KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFZudHtjb25zdHJ1Y3RvcihsKXtvcGUodGhpcywiY29sdW1uTWV0YSIsdm9pZCAwKSxvcGUodGhpcywibWV0''@;'; put 'put ''YXMiLG5ldyBQUCgoKT0+dGhpcy5fY3JlYXRlUm93KCkpKSx0aGlzLmNvbHVtbk1ldGE9bH11cGRhdGVNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0TWV0YShsLGEpO3h1KGgsZCksRFAoaCxkKX1jcmVhdGVSb3cobCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfWNyZWF0ZUNvbHVtbihs''@;'; put 'put ''LGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLmluc2VydChsLGEpfXJlbW92ZVJvdyhsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKysp''@;'; put 'put ''dGhpcy5tZXRhcy5vYnRhaW4oZCkucmVtb3ZlKGwsYSl9Z2V0TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7cmV0dXJuIHZvaWQgMD09PWQ/aDpoW2RdfXNldE1ldGEobCxhLGQsaCl7dmFyIGY7Y29uc3Qgdj10aGlzLm1ldGFzLm9idGFpbihsKS5v''@;'; put 'put ''YnRhaW4oYSk7bnVsbD09PShmPXYuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWZ8fGYuZGVsZXRlKGQpLHZbZF09aH1yZW1vdmVNZXRhKGwsYSxkKXtkZWxldGUgdGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpW2RdfWdldE1ldGFzKCl7Y29uc3QgbD1b''@;'; put 'put ''XSxhPUFycmF5LmZyb20odGhpcy5tZXRhcy52YWx1ZXMoKSk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspUGEoYVtkXSkmJmwucHVzaCguLi5hW2RdLnZhbHVlcygpKTtyZXR1cm4gbH1nZXRNZXRhc0F0Um93KGwpe1JQKCgpPT5JUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJl''@;'; put 'put ''ci4iKTtjb25zdCBhPW5ldyBNYXAodGhpcy5tZXRhcyk7cmV0dXJuIGEuaGFzKGwpP0FycmF5LmZyb20oYS5nZXQobCkudmFsdWVzKCkpOltdfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZVJvdygpe3JldHVybiBuZXcgUFAobD0+dGhpcy5fY3JlYXRlTWV0YShsKSl9''@;'; put 'put ''X2NyZWF0ZU1ldGEobCl7cmV0dXJuIG5ldyh0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKGwpKX19Y2xhc3Mgc3Ble2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxkPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTt0aGlzLmhvdD1sLHRoaXMuZ2xvYmFsTWV0YT1uZXcgRW50KGwpLHRoaXMudGFibGVNZXRhPW5ldyBEbnQodGhpcy5nbG9iYWxNZXRhKSx0aGlzLmNvbHVtbk1ldGE9bmV3IEZudCh0aGlzLmdsb2JhbE1l''@;'; put 'put ''dGEpLHRoaXMuY2VsbE1ldGE9bmV3IFZudCh0aGlzLmNvbHVtbk1ldGEpLGQuZm9yRWFjaChoPT5uZXcgaCh0aGlzKSksdGhpcy5nbG9iYWxNZXRhLnVwZGF0ZU1ldGEoYSl9Z2V0R2xvYmFsTWV0YSgpe3JldHVybiB0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YSgpfXVwZGF0ZUdsb2JhbE1ldGEo''@;'; put 'put ''bCl7dGhpcy5nbG9iYWxNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0VGFibGVNZXRhKCl7cmV0dXJuIHRoaXMudGFibGVNZXRhLmdldE1ldGEoKX11cGRhdGVUYWJsZU1ldGEobCl7dGhpcy50YWJsZU1ldGEudXBkYXRlTWV0YShsKX1nZXRDb2x1bW5NZXRhKGwpe3JldHVybiB0aGlzLmNvbHVtbk1l''@;'; put 'put ''dGEuZ2V0TWV0YShsKX11cGRhdGVDb2x1bW5NZXRhKGwsYSl7dGhpcy5jb2x1bW5NZXRhLnVwZGF0ZU1ldGEobCxhKX1nZXRDZWxsTWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhKTtyZXR1cm4gaC52aXN1YWxSb3c9ZC52aXN1YWxSb3csaC52aXN1YWxDb2w9''@;'; put 'put ''ZC52aXN1YWxDb2x1bW4saC5yb3c9bCxoLmNvbD1hLGQuc2tpcE1ldGFFeHRlbnNpb258fHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsaCksaH1nZXRDZWxsTWV0YUtleVZhbHVlKGwsYSxkKXtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgbmV3IEVycm9yKCJUaGUg''@;'; put 'put ''cGFzc2VkIGNlbGwgbWV0YSBvYmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZyIpO3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhLGQpfXNldENlbGxNZXRhKGwsYSxkLGgpe3RoaXMuY2VsbE1ldGEuc2V0TWV0YShsLGEsZCxoKX11cGRhdGVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxs''@;'; put 'put ''TWV0YS51cGRhdGVNZXRhKGwsYSxkKX1yZW1vdmVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVNZXRhKGwsYSxkKX1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpfWdldENlbGxzTWV0YUF0Um93KGwpe3JldHVybiB0aGlzLmNlbGxNZXRh''@;'; put 'put ''LmdldE1ldGFzQXRSb3cobCl9Y3JlYXRlUm93KGwpe3RoaXMuY2VsbE1ldGEuY3JlYXRlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfXJlbW92ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLnJlbW92ZVJvdyhsLGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1jcmVhdGVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5jcmVhdGVDb2x1bW4obCxhKSx0aGlzLmNv''@;'; put 'put ''bHVtbk1ldGEuY3JlYXRlQ29sdW1uKGwsYSl9cmVtb3ZlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLnJlbW92ZUNvbHVt''@;'; put 'put ''bihsLGEpfWNsZWFyQ2VsbHNDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfX1mdW5jdGlvbiBscGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEJudChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBqbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfVRsKHNwZSx5MSk7Y2xhc3Mgem50e2NvbnN0cnVjdG9yKGwpe3ZhciBhPXRoaXM7bHBlKHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLGxwZSh0''@;'; put 'put ''aGlzLCJtZXRhU3luY01lbW8iLG5ldyBNYXApLHRoaXMubWV0YU1hbmFnZXI9bCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5leHRlbmRDZWxsTWV0YSguLi5hcmd1bWVudHMpfSksU2EuZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5k''@;'; put 'put ''ZXIiLGQ9PntkJiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5hZ2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEobCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgp''@;'; put 'put ''KXJldHVybjtjb25zdHt2aXN1YWxSb3c6Zix2aXN1YWxDb2w6dn09bCxNPXRoaXMubWV0YU1hbmFnZXIuaG90LEQ9TS5jb2xUb1Byb3Aodik7bC5wcm9wPUQsTS5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsdixsKTtjb25zdCBaPUV1KGwsInR5cGUiKT9sLnR5cGU6bnVsbDtsZXQg''@;'; put 'put ''cmU9bWwobC5jZWxscyk/bC5jZWxscyhkLGgsRCk6bnVsbDtpZihaKWlmKHJlKXt2YXIgY2U7cmUudHlwZT1udWxsIT09KGNlPXJlLnR5cGUpJiZ2b2lkIDAhPT1jZT9jZTpafWVsc2UgcmU9e3R5cGU6Wn07cmUmJnRoaXMubWV0YU1hbmFnZXIudXBkYXRlQ2VsbE1ldGEoZCxoLHJlKSxNLnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckdldENlbGxNZXRhIixmLHYsbCksdGhpcy5tZXRhU3luY01lbW8uaGFzKGQpfHx0aGlzLm1ldGFTeW5jTWVtby5zZXQoZCxuZXcgU2V0KSx0aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkuYWRkKGgpfX1mdW5jdGlvbiBTWChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gV250''@;'; put 'put ''KGMpe3ZhciBsPWZ1bmN0aW9uIFludChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9dmFyIGNwZT1uZXcgV2Vha01hcDtjbGFzcyBLbnR7Y29uc3RydWN0b3IobCl7U1godGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksU1godGhp''@;'; put 'put ''cywidXNhZ2VUcmFja2VyIixuZXcgU2V0KSxTWCh0aGlzLCJwcm9wRGVzY3JpcHRvcnMiLG5ldyBNYXAoW1siYXJpYVRhZ3MiLHtpbml0T25seTohMH1dLFsiZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFn''@;'; put 'put ''ZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tl''@;'; put 'put ''ci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBs''@;'; put 'put ''ZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtpbml0T25seTohMH1dLFsicmVuZGVyQWxsQ29sdW1ucyIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxSb3dzIix7aW5pdE9ubHk6ITB9XV0pKSxmdW5jdGlvbiBV''@;'; put 'put ''bnQoYyxsLGEpeyhmdW5jdGlvbiBabnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGNwZSwoYSxkLGgpPT57''@;'; put 'put ''aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfSksdGhpcy5tZXRhTWFuYWdlcj1sLHRoaXMuZXh0ZW5kTWV0YVByb3BzKCl9ZXh0ZW5kTWV0YVByb3BzKCl7''@;'; put 'put ''dGhpcy5wcm9wRGVzY3JpcHRvcnMuZm9yRWFjaCgobCxhKT0+e2NvbnN0e2luaXRPbmx5OmQsdGFyZ2V0Omgsb25DaGFuZ2U6Zn09bCx2PSJzdHJpbmciPT10eXBlb2YgaCxNPXY/aDphLEQ9YF8ke019YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtEXT10aGlzLm1ldGFNYW5h''@;'; put 'put ''Z2VyLmdsb2JhbE1ldGEubWV0YVtNXSxmPyh0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZiksdiYmdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoaCxELGYpKTpkJiYodGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxELGZ1bmN0aW9uIEdudChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiAk''@;'; put 'put ''bnQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0oY3BlLHRoaXMp''@;'; put 'put ''KSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5nc3x8KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzPVtdKSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncy5wdXNo''@;'; put 'put ''KGEpKX0pfWluc3RhbGxQcm9wV2F0Y2hlcihsLGEsZCl7Y29uc3QgaD10aGlzO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YSxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGYpe2NvbnN0IHY9IWgudXNhZ2VUcmFja2VyLmhhcyhsKTto''@;'; put 'put ''LnVzYWdlVHJhY2tlci5hZGQobCksZC5jYWxsKGgsbCxmLHYpLHRoaXNbYV09Zn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19Y29uc3QgdXBlPS9eKFxyXG58XG5ccnxccnxcbikvLHFudD0vXlteXHRcclxuXSsvLGRwZT0vXlx0LztmdW5jdGlvbiBuVChjKXtsZXQgbCxhLGQs''@;'; put 'put ''aCx2LGY9IiI7Zm9yKGw9MCxhPWMubGVuZ3RoO2w8YTtsKz0xKXtmb3IoaD1jW2xdLmxlbmd0aCxkPTA7ZDxoO2QrPTEpZD4wJiYoZis9Ilx0Iiksdj1jW2xdW2RdLCJzdHJpbmciPT10eXBlb2Ygdj92LmluZGV4T2YoIlxuIik+LTE/Zis9YCIke3YucmVwbGFjZSgvIi9nLCciIicpfSJgOmYr''@;'; put 'put ''PXY6Zis9bnVsbD09dj8iIjp2O2whPT1hLTEmJihmKz0iXG4iKX1yZXR1cm4gZn1mdW5jdGlvbiBuOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSm50KGMpe3ZhciBsPWZ1bmN0aW9uIFFudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9Y2xhc3MgVF97c3RhdGljIGdldCBERVNUSU5BVElPTl9SRU5ERVJFUigpe3JldHVybiAxfXN0YXRpYyBnZXQgREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUigpe3JldHVybiAyfWNvbnN0cnVjdG9yKGwsYSxkKXtuOSh0aGlzLCJob3QiLHZvaWQgMCksbjkodGhpcywibWV0''@;'; put 'put ''YU1hbmFnZXIiLHZvaWQgMCksbjkodGhpcywidGFibGVNZXRhIix2b2lkIDApLG45KHRoaXMsImRhdGFTb3VyY2UiLHZvaWQgMCksbjkodGhpcywiZHVja1NjaGVtYSIsdm9pZCAwKSxuOSh0aGlzLCJjb2xUb1Byb3BDYWNoZSIsdm9pZCAwKSxuOSh0aGlzLCJwcm9wVG9Db2xDYWNoZSIsdm9p''@;'; put 'put ''ZCAwKSx0aGlzLmhvdD1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtp''@;'; put 'put ''Zih0eXBlb2YgbD4idSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRv''@;'; put 'put ''UHJvcENhY2hlPVtdLHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCx2PSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBNPUJPKGwpO2g9TT4wP006dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLHY9ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVN''@;'; put 'put ''ZXRhLm1heENvbHMsYS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgTT12P2EoZCk6YVtkXTtpZihxbyhNKSl7aWYodHlwZW9mIE0uZGF0YTwidSIpe2NvbnN0IEQ9dj9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtEXT1NLmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoTS5kYXRh''@;'; put 'put ''LEQpfWYrPTF9fX1lbHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gT0sodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IHYsaD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIp''@;'; put 'put ''LCJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJlhvKGwsKE0sRCk9PntudWxsPT09TT8odj1mK0QsdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKHYpLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KHYsaCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKE0saCxg''@;'; put 'put ''JHtEfS5gKX0pLGh9Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1hP2w6dGhpcy5jb2xUb1Byb3BDYWNoZSYmUGEodGhpcy5jb2xUb1Byb3BDYWNoZVthXSk/''@;'; put 'put ''dGhpcy5jb2xUb1Byb3BDYWNoZVthXTphfXByb3BUb0NvbChsKXtjb25zdCBhPXRoaXMucHJvcFRvQ29sQ2FjaGUuZ2V0KGwpO2lmKFBhKGEpKXJldHVybiB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxsPT09''@;'; put 'put ''ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNlWzBd''@;'; put 'put ''P3NfKHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtz''@;'; put 'put ''b3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bGV0IHY9ZixNPTAsRD1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIER8fEQ+PWYpJiYo''@;'; put 'put ''RD1mKSxEPHRoaXMuaG90LmNvdW50Um93cygpJiYodj10aGlzLmhvdC50b1BoeXNpY2FsUm93KEQpKSwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLEQsYSxkKXx8bnVsbD09PXYpcmV0dXJue2RlbHRhOjB9O2NvbnN0IHJlPXRoaXMudGFibGVNZXRhLm1heFJvd3Ms''@;'; put 'put ''Y2U9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsYmU9W107Zm9yKDtNPGEmJmYrTTxyZTspe2xldCBCZT1udWxsOyJhcnJheSI9PT10aGlzLmhvdC5kYXRhVHlwZT90aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hP0JlPWcxKHRoaXMuZ2V0U2NoZW1hKCkpOihCZT1bXSxHYShjZS0xLCgpPT5CZS5w''@;'; put 'put ''dXNoKG51bGwpKSk6ImZ1bmN0aW9uIj09PXRoaXMuaG90LmRhdGFUeXBlP0JlPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoRCtNKTooQmU9e30sTUUoQmUsdGhpcy5nZXRTY2hlbWEoKSkpLGJlLnB1c2goQmUpLE0rPTF9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhE''@;'; put 'put ''LE0pLCJiZWxvdyI9PT1oJiYodj1NYXRoLm1pbih2KzEsZikpLHRoaXMuc3BsaWNlRGF0YSh2LDAsYmUpO2NvbnN0IEVlPXRoaXMuaG90LnRvVmlzdWFsUm93KHYpO3JldHVybiB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT09PWJlLmxlbmd0aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaG90LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxNPjAmJihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KG51bGwsTSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3codixhKSksdGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyQ3JlYXRlUm93IixFZSxNLGQpLHtkZWx0YTpNLHN0YXJ0UGh5c2ljYWxJbmRleDp2fX1jcmVhdGVDb2wobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYoIXRoaXMuaG90LmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBuZXcgY29sdW1uLiBXaGVuIGRhdGEgc291cmNlIGluIGFuIG9iamVjdCwg''@;'; put 'put ''eW91IGNhbiBvbmx5IGhhdmUgYXMgbXVjaCBjb2x1bW5zIGFzIGRlZmluZWQgaW4gZmlyc3QgZGF0YSByb3csIGRhdGEgc2NoZW1hIG9yIGluIHRoZSAnY29sdW1ucycgc2V0dGluZy5JZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGFkZCBuZXcgY29sdW1ucywgeW91IGhhdmUgdG8gdXNlIGFy''@;'; put 'put ''cmF5IGRhdGFzb3VyY2UuIik7Y29uc3QgZj10aGlzLmRhdGFTb3VyY2Usdj10aGlzLnRhYmxlTWV0YS5tYXhDb2xzLE09dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCk7bGV0IEQ9bDtpZigoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1NKSYmKEQ9TSksITE9PT10aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YmVmb3JlQ3JlYXRlQ29sIixELGEsZCkpcmV0dXJue2RlbHRhOjB9O2xldCByZT1NO0Q8dGhpcy5ob3QuY291bnRDb2xzKCkmJihyZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEQpKTtjb25zdCBjZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsZXQgYmU9dGhpcy5ob3QuY291bnRD''@;'; put 'put ''b2xzKCksRWU9MCxCZT1yZTsiZW5kIj09PWgmJihCZT1NYXRoLm1pbihCZSsxLE0pKTtjb25zdCBxZT1CZTtmb3IoO0VlPGEmJmJlPHY7KXtpZigibnVtYmVyIiE9dHlwZW9mIER8fEQ+PWJlKWlmKGNlPjApZm9yKGxldCBwdD0wO3B0PGNlO3B0Kz0xKXR5cGVvZiBmW3B0XT4idSImJihmW3B0''@;'; put 'put ''XT1bXSksZltwdF0ucHVzaChudWxsKTtlbHNlIGYucHVzaChbbnVsbF0pO2Vsc2UgZm9yKGxldCBwdD0wO3B0PGNlO3B0KyspZltwdF0uc3BsaWNlKEJlLDAsbnVsbCk7RWUrPTEsQmUrPTEsYmUrPTF9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhELEVlKSxFZT4w''@;'; put 'put ''JiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihudWxsLEVlKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihxZSxhKSk7Y29uc3QgcnQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4ocWUpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJDcmVhdGVDb2wiLHJ0LEVlLGQpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx7ZGVsdGE6RWUsc3RhcnRQaHlzaWNhbEluZGV4OnFlfX1yZW1vdmVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxoPU51bWJlci5pc0ludGVnZXIobCk/bDotYTtjb25zdCBmPXRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwoaCxhKSx2PXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2lmKGg9KHYraCkldiwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVSZW1vdmVSb3ciLGgsZi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBEPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShoLEQsZiksaDx0aGlzLmhvdC5jb3VudFJvd3MoKSl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKTtjb25zdCByZT1QYSh0aGlz''@;'; put 'put ''LnRhYmxlTWV0YS5jb2x1bW5zKXx8UGEodGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYSl8fHRoaXMudGFibGVNZXRhLmNvbEhlYWRlcnM7MD09PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJiFyZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KChyZSxjZSk9PmNlLXJlKS5mb3JFYWNoKHJlPT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3cocmUsMSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGgsRCxmLGQpLCEwfXJlbW92''@;'; put 'put ''ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5ob3QuZGF0YVR5cGV8fHRoaXMudGFibGVNZXRhLmNvbHVt''@;'; put 'put ''bnMpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgcmVtb3ZlIGNvbHVtbiB3aXRoIG9iamVjdCBkYXRhIHNvdXJjZSBvciBjb2x1bW5zIG9wdGlvbiBzcGVjaWZpZWQiKTtsZXQgaD0ibnVtYmVyIiE9dHlwZW9mIGw/LWE6bDtoPSh0aGlzLmhvdC5jb3VudENvbHMoKStoKSV0aGlzLmhvdC5jb3Vu''@;'; put 'put ''dENvbHMoKTtjb25zdCBmPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxhKSx2PWYuc2xpY2UoMCkuc29ydCgoY2UsYmUpPT5iZS1jZSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ29sIixoLGEsZixkKSlyZXR1cm4hMTtsZXQgRD0hMDtjb25zdCBaPXYu''@;'; put 'put ''bGVuZ3RoLHJlPXRoaXMuZGF0YVNvdXJjZTtmb3IobGV0IGNlPTA7Y2U8WjtjZSsrKUQmJmZbMF0hPT1mW2NlXS1jZSYmKEQ9ITEpO2lmKEQpZm9yKGxldCBjZT0wLGJlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2NlPGJlO2NlKyspcmVbY2VdLnNwbGljZShmWzBdLGEpLDA9PT1jZSYm''@;'; put 'put ''dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oZlswXSxhKTtlbHNlIGZvcihsZXQgY2U9MCxiZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtjZTxiZTtjZSsrKWZvcihsZXQgRWU9MDtFZTxaO0VlKyspcmVbY2VdLnNwbGljZSh2W0VlXSwxKSwwPT09Y2UmJnRoaXMubWV0YU1hbmFn''@;'; put 'put ''ZXIucmVtb3ZlQ29sdW1uKHZbRWVdLDEpO3JldHVybiBoPHRoaXMuaG90LmNvdW50Q29scygpJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwhdGhpcy50YWJsZU1ldGEucm93SGVhZGVycyYmMD09PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5v''@;'; put 'put ''dFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNvbCIsaCxhLGYsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLCEwfXNwbGljZUNvbChsLGEsZCl7Y29u''@;'; put 'put ''c3QgaD10aGlzLmhvdC5nZXREYXRhQXRDb2wobCksZj1oLnNsaWNlKGEsYStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNPjM/TS0zOjApLFo9MztaPE07WisrKURbWi0zXT1hcmd1bWVudHNbWl07byQoRCx2KTtsZXQgcmU9MDtmb3Io''@;'; put 'put ''O3JlPGQ7KUQucHVzaChudWxsKSxyZSs9MTtyZXR1cm4gZDJlKEQpLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGEsbCxELG51bGwsbnVsbCwic3BsaWNlQ29sIiksZn1zcGxpY2VSb3cobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Um93KGwpLGY9aC5zbGljZShh''@;'; put 'put ''LGErZCksdj1oLnNsaWNlKGErZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTT4zP00tMzowKSxaPTM7WjxNO1orKylEW1otM109YXJndW1lbnRzW1pdO28kKEQsdik7bGV0IHJlPTA7Zm9yKDtyZTxkOylELnB1c2gobnVsbCkscmUrPTE7cmV0dXJuIHRoaXMuaG90''@;'; put 'put ''LnBvcHVsYXRlRnJvbUFycmF5KGwsYSxbRF0sbnVsbCxudWxsLCJzcGxpY2VSb3ciKSxmfXNwbGljZURhdGEobCxhLGQpe2lmKCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURhdGFTcGxpY2UiLGwsYSxkKSl7Y29uc3QgZj1bLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKDAsbCksLi4u''@;'; put 'put ''ZCwuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UobCldO3RoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxmLmZvckVhY2godj0+dGhpcy5kYXRhU291cmNlLnB1c2godikpfX1maWx0ZXJEYXRhKGwsYSxkKXtsZXQgaD10aGlzLmhvdC5ydW5Ib29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJy''@;'; put 'put ''YXkuaXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZix2KT0+LTE9PT1kLmluZGV4T2YodikpKSx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbFJvdyhsKTtsZXQgaD10aGlzLmRhdGFTb3VyY2VbZF07Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsZCk7aD1pc05hTihmKT9mOmg7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOnZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IE09bnVsbDtpZiho''@;'; put 'put ''JiZoLmhhc093blByb3BlcnR5JiZFdShoLGEpKU09aFthXTtlbHNlIGlmKHYmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5pbmRleE9mKCIuIik+LTEpe2xldCBEPWg7aWYoIUQpcmV0dXJuIG51bGw7Y29uc3QgWj1hLnNwbGl0KCIuIik7Zm9yKGxldCByZT0wLGNlPVoubGVuZ3RoO3JlPGNlO3Jl''@;'; put 'put ''KyspaWYoRD1EW1pbcmVdXSx0eXBlb2YgRD4idSIpcmV0dXJuIG51bGw7TT1EfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYSYmKE09YSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoZCxkKzEpWzBdKSk7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBEPUZkKE0pO3RoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixkLHRoaXMucHJvcFRvQ29sKGEpLEQsImdldCIpLEQuaXNUb3VjaGVkKCkmJihNPUQudmFsdWUpfXJldHVybiBNfWdldENvcHlhYmxlKGwsYSl7cmV0dXJuIHRoaXMuaG90LmdldENlbGxNZXRhKGwsdGhpcy5wcm9wVG9Db2woYSkpLmNvcHlhYmxl''@;'; put 'put ''P3RoaXMuZ2V0KGwsYSk6IiJ9c2V0KGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7bGV0IGY9ZCx2PXRoaXMuZGF0YVNvdXJjZVtoXTtjb25zdCBNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixoKTtpZih2PWlzTmFOKE0pP006dix0aGlzLmhvdC5o''@;'; put 'put ''YXNIb29rKCJtb2RpZnlEYXRhIikpe2NvbnN0IFo9RmQoZik7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5wcm9wVG9Db2woYSksWiwic2V0IiksWi5pc1RvdWNoZWQoKSYmKGY9Wi52YWx1ZSl9Y29uc3R7ZGF0YURvdE5vdGF0aW9uOkR9PXRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKCk7aWYodiYmdi5oYXNPd25Qcm9wZXJ0eSYmRXUodixhKSl2W2FdPWY7ZWxzZSBpZihEJiYic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtsZXQgY2UsWj12LHJlPTA7Y29uc3QgYmU9YS5zcGxpdCgiLiIpO2ZvcihyZT0wLGNlPWJlLmxlbmd0aC0xO3JlPGNlO3Jl''@;'; put 'put ''Kyspe2lmKCJfX3Byb3RvX18iPT09YmVbcmVdfHwiY29uc3RydWN0b3IiPT09YmVbcmVdfHwicHJvdG90eXBlIj09PWJlW3JlXSlyZXR1cm47dHlwZW9mIFpbYmVbcmVdXT4idSImJihaW2JlW3JlXV09e30pLFo9WltiZVtyZV1dfVpbYmVbcmVdXT1mfWVsc2UgaWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGEpYSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoaCxoKzEpWzBdLGYpO2Vsc2V7aWYoIl9fcHJvdG9fXyI9PT1hfHwiY29uc3RydWN0b3IiPT09YXx8InByb3RvdHlwZSI9PT1hKXJldHVybjt2W2FdPWZ9fXZpc3VhbFJvd3NUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb3Vu''@;'; put 'put ''dFNvdXJjZVJvd3MoKSxoPVtdO2xldCBNLGY9KGQrbCklZCx2PWE7Zm9yKDtmPGQmJnY7KU09dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmKSxoLnB1c2goTSksdi09MSxmKz0xO3JldHVybiBofXZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KSxoPVtdO2xldCBmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2Oyl7Y29uc3QgTT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpO2gucHVzaChNKSx2LT0xLGYrPTF9cmV0dXJuIGh9Y2xlYXIoKXtmb3IobGV0IGw9MDtsPHRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2wrKylmb3IobGV0''@;'; put 'put ''IGE9MDthPHRoaXMuaG90LmNvdW50Q29scygpO2ErKyl0aGlzLnNldChsLHRoaXMuY29sVG9Qcm9wKGEpLCIiKX1nZXRMZW5ndGgoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGE7YT1sPDB8fDA9PT1sPzA6bHx8MS8wO2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4oZCxhKX1nZXRBbGwoKXtjb25zdCBsPXtyb3c6MCxjb2w6MH0sYT17cm93Ok1hdGgubWF4KHRoaXMuaG90LmNvdW50Um93cygpLTEsMCksY29sOk1hdGgubWF4KHRoaXMuaG90LmNvdW50Q29scygpLTEsMCl9''@;'; put 'put ''O3JldHVybiBsLnJvdy1hLnJvdyE9MHx8dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk/dGhpcy5nZXRSYW5nZShsLGEsVF8uREVTVElOQVRJT05fUkVOREVSRVIpOltdfWNvdW50Q2FjaGVkQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aH1nZXRSYW5nZShsLGEs''@;'; put 'put ''ZCl7Y29uc3QgaD1bXTtsZXQgZix2LE07Y29uc3QgRD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLFo9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09RHx8MD09PVopcmV0dXJuW107Y29uc3QgcmU9ZD09PVRfLkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1I/dGhpcy5nZXRDb3B5''@;'; put 'put ''YWJsZTp0aGlzLmdldCxjZT1NYXRoLm1pbihNYXRoLm1heChELTEsMCksTWF0aC5tYXgobC5yb3csYS5yb3cpKSxiZT1NYXRoLm1pbihNYXRoLm1heChaLTEsMCksTWF0aC5tYXgobC5jb2wsYS5jb2wpKTtmb3IoZj1NYXRoLm1pbihsLnJvdyxhLnJvdyk7Zjw9Y2U7ZisrKXtNPVtdO2NvbnN0''@;'; put 'put ''IEVlPWY+PTA/dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmKTpmO2Zvcih2PU1hdGgubWluKGwuY29sLGEuY29sKTt2PD1iZSYmbnVsbCE9PUVlO3YrKylNLnB1c2gocmUuY2FsbCh0aGlzLGYsdGhpcy5jb2xUb1Byb3AodikpKTtudWxsIT09RWUmJmgucHVzaChNKX1yZXR1cm4gaH1nZXRUZXh0''@;'; put 'put ''KGwsYSl7cmV0dXJuIG5UKHRoaXMuZ2V0UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX1JFTkRFUkVSKSl9Z2V0Q29weWFibGVUZXh0KGwsYSl7cmV0dXJuIG5UKHRoaXMuZ2V0UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IpKX1kZXN0cm95KCl7dGhpcy5ob3Q9''@;'; put 'put ''bnVsbCx0aGlzLm1ldGFNYW5hZ2VyPW51bGwsdGhpcy5kYXRhU291cmNlPW51bGwsdGhpcy5kdWNrU2NoZW1hPW51bGwsdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGg9MCx0aGlzLnByb3BUb0NvbENhY2hlLmNsZWFyKCksdGhpcy5wcm9wVG9Db2xDYWNoZT12b2lkIDB9fWNvbnN0IGVydD1U''@;'; put 'put ''XztmdW5jdGlvbiBocGUoYyxsLGEsZCl7Y29uc3R7aG90SW5zdGFuY2U6aCxkYXRhTWFwOmYsZGF0YVNvdXJjZTp2LGludGVybmFsU291cmNlOk0sc291cmNlOkQsbWV0YU1hbmFnZXI6WixmaXJzdFJ1bjpyZX09ZCxjZT1wMShNKSxiZT1oLmdldFNldHRpbmdzKCk7aC5kYXRhVHlwZT1BcnJh''@;'; put 'put ''eS5pc0FycmF5KGJlLmRhdGFTY2hlbWEpPyJhcnJheSI6bWwoYmUuZGF0YVNjaGVtYSk/ImZ1bmN0aW9uIjoib2JqZWN0IixmJiZmLmRlc3Ryb3koKSxjPWgucnVuSG9va3MoYGJlZm9yZSR7Y2V9YCxjLHJlLEQpO2NvbnN0IEVlPW5ldyBlcnQoaCxjLFopO2lmKGwoRWUpLCJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgYyYmbnVsbCE9PWMpYy5wdXNoJiZjLnNwbGljZXx8KGM9W2NdKTtlbHNle2lmKG51bGwhPT1jKXRocm93IG5ldyBFcnJvcihgJHtNfSBvbmx5IGFjY2VwdHMgYXJyYXkgb2Ygb2JqZWN0cyBvciBhcnJheSBvZiBhcnJheXMgKCR7dHlwZW9mIGN9IGdpdmVuKWApO3tjb25zdCBCZT1F''@;'; put 'put ''ZS5nZXRTY2hlbWEoKTtjPVtdO2xldCBxZSxydD0wLHB0PTA7Zm9yKHJ0PTAscHQ9YmUuc3RhcnRSb3dzO3J0PHB0O3J0KyspaWYoIm9iamVjdCIhPT1oLmRhdGFUeXBlJiYiZnVuY3Rpb24iIT09aC5kYXRhVHlwZXx8IWJlLmRhdGFTY2hlbWEpaWYoImFycmF5Ij09PWguZGF0YVR5cGUpcWU9''@;'; put 'put ''ZzEoQmVbMF0pLGMucHVzaChxZSk7ZWxzZXtxZT1bXTtmb3IobGV0IGR0PTAsSnQ9YmUuc3RhcnRDb2xzO2R0PEp0O2R0KyspcWUucHVzaChudWxsKTtjLnB1c2gocWUpfWVsc2UgcWU9ZzEoQmUpLGMucHVzaChxZSl9fUFycmF5LmlzQXJyYXkoY1swXSkmJihoLmRhdGFUeXBlPSJhcnJheSIp''@;'; put 'put ''LGJlLmRhdGE9YyxFZS5kYXRhU291cmNlPWMsdi5kYXRhPWMsdi5kYXRhVHlwZT1oLmRhdGFUeXBlLHYuY29sVG9Qcm9wPUVlLmNvbFRvUHJvcC5iaW5kKEVlKSx2LnByb3BUb0NvbD1FZS5wcm9wVG9Db2wuYmluZChFZSksdi5jb3VudENhY2hlZENvbHVtbnM9RWUuY291bnRDYWNoZWRDb2x1''@;'; put 'put ''bW5zLmJpbmQoRWUpLGEoRWUpLGgucnVuSG9va3MoYGFmdGVyJHtjZX1gLGMscmUsRCkscmV8fChoLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsbnVsbCxNKSxoLnJlbmRlcigpKSxoLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKGgucm9vdEVsZW1lbnQsW00yZSgtMSksUk8oaC5jb3VudENv''@;'; put 'put ''bHMoKSsoaC52aWV3P2guY291bnRSb3dIZWFkZXJzKCk6MCkpXSl9ZnVuY3Rpb24gQV8oYyl7RXAoYykmJmMuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSl9ZnVuY3Rpb24gRlAoYyl7Y29uc3R7c2VsZWN0aW9uOmwsdmlldzphfT1jLGQ9Yy5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlTGFzdCgpLGg9bC5nZXRTZWxlY3Rpb25Tb3VyY2UoKSxmPWEuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSx2PWEuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLE09ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxEPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29s''@;'; put 'put ''LFo9TTw9ZixyZT1EPj12LGNlPWEuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxiZT1hLmdldExhc3RGdWxseVZpc2libGVSb3coKSxFZT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LEJlPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LHFlPUVlPD1jZSxydD1CZT49YmU7cmV0dXJue2dl''@;'; put 'put ''dENvbXB1dGVkQ29sdW1uVGFyZ2V0OnB0PT4ibW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/cHQuY29sOlomJnJlP2QuaGlnaGxpZ2h0LmNvbDpaP006cmU/RDpwdC5jb2wsZ2V0Q29tcHV0ZWRSb3dUYXJnZXQ6cHQ9PiJtb3VzZSI9PT1ofHwia2V5Ym9hcmQiPT09aD9wdC5yb3c6cWUmJnJ0''@;'; put 'put ''P2QuaGlnaGxpZ2h0LnJvdzpxZT9FZTpydD9CZTpwdC5yb3d9fWNvbnN0IGZwZT0iZ3JpZERlZmF1bHQiLFdtPSJlZGl0b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yIjtmdW5jdGlvbiBwcGUoYyl7Y29uc3QgYT1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBh''@;'; put 'put ''LnR5cGU9InRleHQiLGEubmFtZT0iX19odEZvY3VzQ2F0Y2hlciIsYS5jbGFzc0xpc3QuYWRkKCJodEZvY3VzQ2F0Y2hlciIpLGMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oYSxbZ0UoIkZvY3VzIGNhdGNoZXIiKV0pLGF9ZnVuY3Rpb24gTVgoYyl7Y29uc3R7cm93SW5kZXhNYXBwZXI6''@;'; put 'put ''bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmR9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgaD1kJiZjLmNvdW50Q29sSGVhZGVycygpPjA/LWMuY291bnRDb2xIZWFkZXJzKCk6MCxmPWQmJmMuY291bnRSb3dIZWFkZXJzKCk+MD8tYy5jb3VudFJvd0hlYWRlcnMoKTow''@;'; put 'put ''O3JldHVybiAwPT09aCYmKGg9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpKSwwPT09ZiYmKGY9YS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKSxudWxsPT09aHx8bnVsbD09PWY/bnVsbDpjLl9jcmVhdGVDZWxsQ29vcmRzKGgsZil9ZnVuY3Rpb24geFgoYyl7dmFy''@;'; put 'put ''IGwsYTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PWMse25hdmlnYWJsZUhlYWRlcnM6Zn09Yy5nZXRTZXR0aW5ncygpO2xldCB2PWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xLE09aC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTE7aWYo''@;'; put 'put ''djwwKXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7dj0tMX1pZihNPDApe2lmKCFmfHwwPT09Yy5jb3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDtNPS0xfXJldHVybiBjLl9jcmVhdGVDZWxsQ29vcmRzKG51bGwhPT0obD1kLmdldFZpc3VhbEZyb21SZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXgodikpJiZ2b2lkIDAhPT1sP2w6dixudWxsIT09KGE9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE0pKSYmdm9pZCAwIT09YT9hOk0pfWNvbnN0IGdwZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIiLCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xs''@;'; put 'put ''bG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNrIiwibWVkaWF0cmFja25leHQiXSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1lZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRpb3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwi''@;'; put 'put ''YXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0aXBseSIsIioiXSxbImFkZCIsIisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRyYWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmlnaHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFy''@;'; put 'put ''cm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLEhQPWM9PmMubWFwKGw9Pntjb25zdCBhPWwudG9Mb3dlckNhc2UoKTtyZXR1cm4gZ3BlLmhhcyhhKT9ncGUuZ2V0KGEpOmF9KS5zb3J0KCkuam9pbigiKyIpLG1wZT1uZXcgTWFwKFtbOTYsIm51bXBhZDAiXSxbOTcsIm51bXBhZDEiXSxb''@;'; put 'put ''OTgsIm51bXBhZDIiXSxbOTksIm51bXBhZDMiXSxbMTAwLCJudW1wYWQ0Il0sWzEwMSwibnVtcGFkNSJdLFsxMDIsIm51bXBhZDYiXSxbMTAzLCJudW1wYWQ3Il0sWzEwNCwibnVtcGFkOCJdLFsxMDUsIm51bXBhZDkiXSxbMTA2LCJtdWx0aXBseSJdLFsxMDcsImFkZCJdLFsxMDgsImRlY2lt''@;'; put 'put ''YWwiXSxbMTA5LCJzdWJ0cmFjdCJdLFsxMTAsImRlY2ltYWwiXSxbMTExLCJkaXZpZGUiXSxbMTEyLCJmMSJdLFsxMTMsImYyIl0sWzExNCwiZjMiXSxbMTE1LCJmNCJdLFsxMTYsImY1Il0sWzExNywiZjYiXSxbMTE4LCJmNyJdLFsxMTksImY4Il0sWzEyMCwiZjkiXSxbMTIxLCJmMTAiXSxb''@;'; put 'put ''MTIyLCJmMTEiXSxbMTIzLCJmMTIiXSxbMTg2LCJzZW1pY29sb24iXSxbMTg3LCJlcXVhbCJdLFsxODgsImNvbW1hIl0sWzE4OSwibWludXMiXSxbMTkwLCJwZXJpb2QiXSxbMTkxLCJzbGFzaCJdLFsxOTIsImJhY2txdW90ZSJdLFsyMTksImJyYWNrZXRsZWZ0Il0sWzIyMCwiYmFja3NsYXNo''@;'; put 'put ''Il0sWzIyMSwiYnJhY2tldHJpZ2h0Il0sWzIyMiwicXVvdGUiXV0pLEVYPWM9PntsZXR7d2hpY2g6bCxrZXk6YX09YztpZihtcGUuaGFzKGwpKXJldHVybiBtcGUuZ2V0KGwpO2NvbnN0IGQ9U3RyaW5nLmZyb21DaGFyQ29kZShsKS50b0xvd2VyQ2FzZSgpO3JldHVybi9eW2EtejAtOV0kLy50''@;'; put 'put ''ZXN0KGQpP2Q6YS50b0xvd2VyQ2FzZSgpfSx2cGU9U3ltYm9sKCJzaG9ydGN1dC1jb250ZXh0Iik7ZnVuY3Rpb24gYnBlKGMpe3JldHVybiBxbyhjKSYmYy5fX2tpbmRPZj09PXZwZX1jb25zdCBncnQ9WyJtZXRhIiwiYWx0Iiwic2hpZnQiLCJjb250cm9sIl0sclQ9ZnVuY3Rpb24gcHJ0KCl7''@;'; put 'put ''Y29uc3QgYz1uZXcgU2V0O3JldHVybntwcmVzcyhsKXtjLmFkZChsKX0scmVsZWFzZShsKXtjLmRlbGV0ZShsKX0scmVsZWFzZUFsbCgpe2MuY2xlYXIoKX0saXNQcmVzc2VkOmw9PmMuaGFzKGwpfX0oKSxpVD1bXTtsZXQgTlA9MDtjb25zdCB2cnQ9Yz0+e2xldHtvd25lcldpbmRvdzpsLGhh''@;'; put 'put ''bmRsZUV2ZW50OmEsYmVmb3JlS2V5RG93bjpkLGFmdGVyS2V5RG93bjpofT1jO2NvbnN0IGY9Sk8oe2Vycm9ySWRFeGlzdHM6QmU9PmBUaGUgIiR7QmV9IiBjb250ZXh0IG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLmB9KTtsZXQgdj0iZ3JpZCI7Y29uc3QgRD0oKT0+dixaPUJlPT5mLmdl''@;'; put 'put ''dEl0ZW0oQmUpO2xldCBjZT0hMTtjb25zdCBiZT1mdW5jdGlvbihCZSxxZSl7bGV0IHJ0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpEKCk7Y29uc3QgcHQ9YnBlKHJ0KT9ydDpaKHJ0KTtsZXQgZHQ9ITE7aWYoIXB0Lmhhc1Nob3J0Y3V0''@;'; put 'put ''KHFlKSlyZXR1cm4gZHQ7Y29uc3QgSnQ9cHQuZ2V0U2hvcnRjdXRzKHFlKTtmb3IobGV0IHZuPTA7dm48SnQubGVuZ3RoO3ZuKyspe2NvbnN0e2NhbGxiYWNrOkNuLHJ1bk9ubHlJZjp0bixwcmV2ZW50RGVmYXVsdDpNbixzdG9wUHJvcGFnYXRpb246d3IsY2FwdHVyZUN0cmw6R3IsZm9yd2Fy''@;'; put 'put ''ZFRvQ29udGV4dDptcn09SnRbdm5dO2lmKCEwPT09dG4oQmUpKXtpZihjZT1HcixkdD0hMT09PUNuKEJlLHFlKSxjZT0hMSxNbiYmQmUucHJldmVudERlZmF1bHQoKSx3ciYmKEIyKEJlKSxCZS5zdG9wUHJvcGFnYXRpb24oKSksZHQpYnJlYWs7bXImJmJlKEJlLHFlLG1yKX19cmV0dXJuIGR0''@;'; put 'put ''fSxFZT1mdW5jdGlvbiBtcnQoYyxsLGEsZCxoKXtjb25zdCBmPUVlPT5ncnQuaW5jbHVkZXMoRWUpLHY9ZnVuY3Rpb24oRWUpe2xldCBCZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IHFlPVtdO3JldHVybiBFZS5hbHRLZXkm''@;'; put 'put ''JnFlLnB1c2goImFsdCIpLEJlJiYoRWUuY3RybEtleXx8RWUubWV0YUtleSk/cWUucHVzaCgiY29udHJvbC9tZXRhIik6KEVlLmN0cmxLZXkmJnFlLnB1c2goImNvbnRyb2wiKSxFZS5tZXRhS2V5JiZxZS5wdXNoKCJtZXRhIikpLEVlLnNoaWZ0S2V5JiZxZS5wdXNoKCJzaGlmdCIpLHFlfSxN''@;'; put 'put ''PUVlPT57aWYoITE9PT1sKEVlKXx8ITE9PT1hKEVlKXx8MjI5PT09RWUua2V5Q29kZXx8InN0cmluZyIhPXR5cGVvZiBFZS5rZXl8fEZtKEVlKSlyZXR1cm47Y29uc3QgcWU9RVgoRWUpO2xldCBydD1bXTtmKHFlKXx8KHJ0PXYoRWUpKTtjb25zdCBwdD1bcWVdLmNvbmNhdChydCk7IWgoRWUs''@;'; put 'put ''cHQpJiYoek8oKSYmcnQuaW5jbHVkZXMoIm1ldGEiKXx8IXpPKCkmJnJ0LmluY2x1ZGVzKCJjb250cm9sIikpJiZoKEVlLFtxZV0uY29uY2F0KHYoRWUsITApKSksZChFZSl9LEQ9RWU9PntpZigic3RyaW5nIj09dHlwZW9mIEVlLmtleSl7Y29uc3QgQmU9RVgoRWUpO2YoQmUpJiZyVC5wcmVz''@;'; put 'put ''cyhCZSl9fSxaPUVlPT57aWYoInN0cmluZyI9PXR5cGVvZiBFZS5rZXkpe2NvbnN0IEJlPUVYKEVlKTtmKEJlKSYmclQucmVsZWFzZShCZSl9fSxyZT0oKT0+e3JULnJlbGVhc2VBbGwoKX07cmV0dXJue21vdW50OigpPT57bGV0IEVlPWM7Zm9yKE5QKz0xO0VlOykxPT09TlAmJihFZS5kb2N1''@;'; put 'put ''bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRCksaVQucHVzaCh7ZXZlbnQ6ImtleWRvd24iLGxpc3RlbmVyOkR9KSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLFopLGlULnB1c2goe2V2ZW50OiJrZXl1''@;'; put 'put ''cCIsbGlzdGVuZXI6Wn0pKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHJlKSxFZT1WNyhFZSl9LHVubW91bnQ6KCk9PntsZXQgRWU9Yztm''@;'; put 'put ''b3IoTlAtPTE7RWU7KXtpZigwPT09TlApe2ZvcihsZXQgQmU9MDtCZTxpVC5sZW5ndGg7QmUrKyl7Y29uc3R7ZXZlbnQ6cWUsbGlzdGVuZXI6cnR9PWlUW0JlXTtFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihxZSxydCl9aVQubGVuZ3RoPTB9RWUuZG9j''@;'; put 'put ''dW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyZSksRWU9VjcoRWUpfX0saXNQcmVzc2VkOkVlPT5yVC5pc1ByZXNzZWQoRWUpLHJlbGVhc2VQ''@;'; put 'put ''cmVzc2VkS2V5czooKT0+clQucmVsZWFzZUFsbCgpfX0obCxhLGQsaCxiZSk7cmV0dXJuIEVlLm1vdW50KCkse2FkZENvbnRleHQ6QmU9Pntjb25zdCBxZT0oYz0+e2NvbnN0IGw9Sk8oe2Vycm9ySWRFeGlzdHM6RD0+YFRoZSAiJHtEfSIgc2hvcnRjdXQgaXMgYWxyZWFkeSByZWdpc3RlcmVk''@;'; put 'put ''IGluIHRoZSAiJHtjfSIgY29udGV4dC5gfSksYT1mdW5jdGlvbigpe2xldHtrZXlzOkQsY2FsbGJhY2s6Wixncm91cDpyZSxydW5Pbmx5SWY6Y2U9KCgpPT4hMCksY2FwdHVyZUN0cmw6YmU9ITEscHJldmVudERlZmF1bHQ6RWU9ITAsc3RvcFByb3BhZ2F0aW9uOkJlPSExLHJlbGF0aXZlVG9H''@;'; put 'put ''cm91cDpxZSxwb3NpdGlvbjpydCxmb3J3YXJkVG9Db250ZXh0OnB0fT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aWYoeWMocmUpKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIHRoZSBzaG9ydGN1dCdzIGdyb3Vw''@;'; put 'put ''LiIpO2lmKCExPT09bWwoWikpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2hvcnRjdXQncyBjYWxsYmFjayBuZWVkcyB0byBiZSBhIGZ1bmN0aW9uLiIpO2lmKCExPT09QXJyYXkuaXNBcnJheShEKSl0aHJvdyBuZXcgRXJyb3IoZ2xgUGFzcyB0aGUgc2hvcnRjdXRcJ3Mga2V5cyBhcyBhbiBhcnJh''@;'; put 'put ''eSBvZiBhcnJheXMsXHgyMAogICAgICB1c2luZyB0aGUgS2V5Ym9hcmRFdmVudC5rZXkgcHJvcGVydGllczpceDIwCiAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLmApO2NvbnN0IGR0PXtj''@;'; put 'put ''YWxsYmFjazpaLGdyb3VwOnJlLHJ1bk9ubHlJZjpjZSxjYXB0dXJlQ3RybDpiZSxwcmV2ZW50RGVmYXVsdDpFZSxzdG9wUHJvcGFnYXRpb246QmV9O1BhKHFlKSYmKGR0LnJlbGF0aXZlVG9Hcm91cD1xZSxkdC5wb3NpdGlvbj1ydCksYnBlKHB0KSYmKGR0LmZvcndhcmRUb0NvbnRleHQ9cHQp''@;'; put 'put ''LEQuZm9yRWFjaChKdD0+e2NvbnN0IHZuPUhQKEp0KTtpZihsLmhhc0l0ZW0odm4pKXtjb25zdCB0bj1sLmdldEl0ZW0odm4pO2xldCBNbj10bi5maW5kSW5kZXgod3I9PndyLmdyb3VwPT09cWUpOy0xIT09TW4/ImJlZm9yZSI9PT1ydD9Nbi09MTpNbis9MTpNbj10bi5sZW5ndGgsdG4uc3Bs''@;'; put 'put ''aWNlKE1uLDAsZHQpfWVsc2UgbC5hZGRJdGVtKHZuLFtkdF0pfSl9LGg9RD0+e2NvbnN0IFo9SFAoRCk7bC5yZW1vdmVJdGVtKFopfTtyZXR1cm57X19raW5kT2Y6dnBlLGFkZFNob3J0Y3V0OmEsYWRkU2hvcnRjdXRzOmZ1bmN0aW9uKEQpe2xldCBaPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtELmZvckVhY2gocmU9PntYbyhaLChjZSxiZSk9PnshMT09PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZSxiZSkmJihyZVtiZV09WltiZV0pfSksYShyZSl9KX0sZ2V0U2hvcnRjdXRzOkQ9Pntjb25zdCBa''@;'; put 'put ''PUhQKEQpLHJlPWwuZ2V0SXRlbShaKTtyZXR1cm4gUGEocmUpP3JlLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0OkQ9Pntjb25zdCBaPUhQKEQpO3JldHVybiBsLmhhc0l0ZW0oWil9LHJlbW92ZVNob3J0Y3V0c0J5S2V5czpoLHJlbW92ZVNob3J0Y3V0c0J5R3JvdXA6RD0+e2wuZ2V0SXRlbXMo''@;'; put 'put ''KS5mb3JFYWNoKHJlPT57bGV0W2NlLGJlXT1yZTtjb25zdCBFZT1iZS5maWx0ZXIoQmU9PkJlLmdyb3VwIT09RCk7MD09PUVlLmxlbmd0aD9oKChjPT5jLnNwbGl0KCIrIikpKGNlKSk6KGJlLmxlbmd0aD0wLGJlLnB1c2goLi4uRWUpKX0pfX19KShCZSk7cmV0dXJuIGYuYWRkSXRlbShCZSxx''@;'; put 'put ''ZSkscWV9LGdldEFjdGl2ZUNvbnRleHROYW1lOkQsZ2V0Q29udGV4dDpaLHNldEFjdGl2ZUNvbnRleHROYW1lOkJlPT57aWYoIWYuaGFzSXRlbShCZSkpdGhyb3cgbmV3IEVycm9yKGdsYFlvdSd2ZSB0cmllZCB0byBhY3RpdmF0ZSB0aGUgIiR7QmV9IiBzaG9ydGN1dCBjb250ZXh0XHgyMAog''@;'; put 'put ''ICAgICAgIHRoYXQgZG9lcyBub3QgZXhpc3QuIEJlZm9yZSBhY3RpdmF0aW9uLCByZWdpc3RlciB0aGUgY29udGV4dCB1c2luZyB0aGUgImFkZENvbnRleHQiIG1ldGhvZC5gKTt2PUJlfSxpc0N0cmxQcmVzc2VkOigpPT4hY2UmJihFZS5pc1ByZXNzZWQoImNvbnRyb2wiKXx8RWUuaXNQcmVz''@;'; put 'put ''c2VkKCJtZXRhIikpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+RWUucmVsZWFzZVByZXNzZWRLZXlzKCksZGVzdHJveTooKT0+RWUudW5tb3VudCgpfX0sYnJ0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmUiLGNhbGxiYWNrKGMpe2MuX2dldEVkaXRvck1hbmFnZXIoKS5jbG9zZUVkaXRvckFu''@;'; put 'put ''ZFNhdmVDaGFuZ2VzKCl9fSx5cGU9e19ob29rc1N0b3JhZ2U6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8KHRoaXMuX2hvb2tzU3RvcmFnZVtjXT1bXSksdGhpcy5ob3QuYWRkSG9vayhjLGwpLHRoaXMuX2hvb2tzU3RvcmFn''@;'; put 'put ''ZVtjXS5wdXNoKGwpLHRoaXN9LHJlbW92ZUhvb2tzQnlLZXkoYyl7WW4odGhpcy5faG9va3NTdG9yYWdlW2NdfHxbXSxsPT57dGhpcy5ob3QucmVtb3ZlSG9vayhjLGwpfSl9LGNsZWFySG9va3MoKXtYbyh0aGlzLl9ob29rc1N0b3JhZ2UsKGMsbCk9PnRoaXMucmVtb3ZlSG9va3NCeUtleShs''@;'; put 'put ''KSksdGhpcy5faG9va3NTdG9yYWdlPXt9fX07VHAoeXBlLCJNSVhJTl9OQU1FIiwiaG9va3NSZWZSZWdpc3RlcmVyIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IF9ydD15cGU7ZnVuY3Rpb24gZDMoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdydChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBDcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGx1PU9iamVjdC5mcmVlemUoe1ZJUkdJTjoiU1RBVEVfVklSR0lOIixFRElUSU5HOiJTVEFURV9FRElUSU5HIixXQUlUSU5HOiJTVEFURV9XQUlUSU5HIixG''@;'; put 'put ''SU5JU0hFRDoiU1RBVEVfRklOSVNIRUQifSk7Y2xhc3Mga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJiYXNlIn1jb25zdHJ1Y3RvcihsKXtkMyh0aGlzLCJob3QiLHZvaWQgMCksZDModGhpcywic3RhdGUiLGx1LlZJUkdJTiksZDModGhpcywiX29wZW5lZCIsITEpLGQzKHRo''@;'; put 'put ''aXMsIl9mdWxsRWRpdE1vZGUiLCExKSxkMyh0aGlzLCJfY2xvc2VDYWxsYmFjayIsbnVsbCksZDModGhpcywiVEQiLG51bGwpLGQzKHRoaXMsInJvdyIsbnVsbCksZDModGhpcywiY29sIixudWxsKSxkMyh0aGlzLCJwcm9wIixudWxsKSxkMyh0aGlzLCJvcmlnaW5hbFZhbHVlIixudWxsKSxk''@;'; put 'put ''Myh0aGlzLCJjZWxsUHJvcGVydGllcyIsbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmluaXQoKX1fZmlyZUNhbGxiYWNrcyhsKXt0aGlzLl9jbG9zZUNhbGxiYWNrJiYodGhpcy5fY2xvc2VDYWxsYmFjayhsKSx0aGlzLl9jbG9zZUNhbGxiYWNrPW51bGwpfWluaXQoKXt9Z2V0VmFsdWUoKXt0aHJv''@;'; put 'put ''dyBFcnJvcigiRWRpdG9yIGdldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1zZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3Igc2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfW9wZW4oKXt0aHJvdyBFcnJvcigiRWRpdG9yIG9wZW4oKSBtZXRob2QgdW5pbXBsZW1l''@;'; put 'put ''bnRlZCIpfWNsb3NlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBjbG9zZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9cHJlcGFyZShsLGEsZCxoLGYsdil7dGhpcy5URD1oLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnByb3A9ZCx0aGlzLm9yaWdpbmFsVmFsdWU9Zix0aGlzLmNlbGxQcm9w''@;'; put 'put ''ZXJ0aWVzPXYsdGhpcy5zdGF0ZT10aGlzLmlzT3BlbmVkKCk/dGhpcy5zdGF0ZTpsdS5WSVJHSU59ZXh0ZW5kKCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdGhpcy5jb25zdHJ1Y3Rvcnt9fXNhdmVWYWx1ZShsLGEpe2xldCBkLGgsZix2O2lmKGEpe2NvbnN0IEQ9dGhpcy5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRMYXN0KCk7ZD1NYXRoLm1heChNYXRoLm1pbihEWzBdLERbMl0pLDApLGg9TWF0aC5tYXgoTWF0aC5taW4oRFsxXSxEWzNdKSwwKSxmPU1hdGgubWF4KERbMF0sRFsyXSksdj1NYXRoLm1heChEWzFdLERbM10pfWVsc2VbZCxoLGYsdl09W3RoaXMucm93LHRoaXMuY29sLG51bGwsbnVsbF07''@;'; put 'put ''Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZCxoLCExLCJtZXRhIik7QXJyYXkuaXNBcnJheShNKSYmKFtkLGhdPU0pLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGQsaCxsLGYsdiwiZWRpdCIpfWJlZ2luRWRpdGluZyhsLGEpe2lmKHRoaXMuc3Rh''@;'; put 'put ''dGUhPT1sdS5WSVJHSU4pcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QsaD1kLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLGY9ZC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSx2PSgpPT57''@;'; put 'put ''aWYodGhpcy5zdGF0ZT1sdS5FRElUSU5HLHRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpKXtjb25zdCBEPSJzdHJpbmciPT10eXBlb2YgbD9sOmxjKHRoaXMub3JpZ2luYWxWYWx1ZSk7dGhpcy5zZXRWYWx1ZShEKX10aGlzLm9wZW4oYSksdGhpcy5fb3BlbmVkPSEwLHRoaXMuZm9jdXMoKSxkLnZp''@;'; put 'put ''ZXcucmVuZGVyKCksZC5ydW5Ib29rcygiYWZ0ZXJCZWdpbkVkaXRpbmciLHRoaXMucm93LHRoaXMuY29sKX07dGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIix2KSxkLnZpZXcuc2Nyb2xsVmlld3BvcnQoZC5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKXx8KHRoaXMuaG90LnJlbW92''@;'; put 'put ''ZUhvb2soImFmdGVyU2Nyb2xsIix2KSx2KCkpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2xldCBoO2lmKGQpe2NvbnN0IGY9dGhpcy5fY2xvc2VDYWxsYmFjazt0aGlzLl9jbG9zZUNhbGxiYWNrPXY9PntmJiZmKHYpLGQodiksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX19aWYoIXRoaXMuaXNXYWl0''@;'; put 'put ''aW5nKCkpe2lmKHRoaXMuc3RhdGU9PT1sdS5WSVJHSU4pcmV0dXJuIHZvaWQgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuX2ZpcmVDYWxsYmFja3MoITApfSk7aWYodGhpcy5zdGF0ZT09PWx1LkVESVRJTkcpe2lmKGwpcmV0dXJuIHRoaXMuY2FuY2VsQ2hhbmdlcygpLHZv''@;'; put 'put ''aWQgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMuZ2V0VmFsdWUoKTtoPXRoaXMuY2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2U/W1sic3RyaW5nIj09dHlwZW9mIGY/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoZnx8IiIpOmZdXTpbW2ZdXSx0aGlzLnN0YXRlPWx1''@;'; put 'put ''LldBSVRJTkcsdGhpcy5zYXZlVmFsdWUoaCxhKSx0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsdj0+e3RoaXMuc3RhdGU9bHUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKHYp''@;'; put 'put ''fSk6KHRoaXMuc3RhdGU9bHUuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCEwKSl9fX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5zdGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9PT1sdS5GSU5JU0hFRCYmKCExPT09bCYm''@;'; put 'put ''ITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVzLmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9bHUuRURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRoaXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9''@;'; put 'put ''ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuc3RhdGU9bHUuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxsRWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRp''@;'; put 'put ''dE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9kZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0aGlzLnN0YXRlPT09bHUuV0FJVElOR31nZXRFZGl0ZWRDZWxsUmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhp''@;'; put 'put ''cy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEpcmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyx2PVUwKGEpLE09c3UoYSksRD1VMCh0aGlzLmhvdC5yb290RWxlbWVudCksWj1zdSh0aGlzLmhvdC5yb290''@;'; put 'put ''RWxlbWVudCkscmU9ZC50b3BPdmVybGF5LmhvbGRlcixjZT1kLmlubGluZVN0YXJ0T3ZlcmxheS5ob2xkZXIsYmU9cmUhPT1mP3JlLnNjcm9sbFRvcDowLEVlPWNlIT09Zj9jZS5zY3JvbGxMZWZ0OjAsQmU9Zi5pbm5lcldpZHRoLUQubGVmdC1aLHt3dFRhYmxlOnFlfT1udWxsIT09KGw9ZC5n''@;'; put 'put ''ZXRQYXJlbnRPdmVybGF5KGEpKSYmdm9pZCAwIT09bD9sOnRoaXMuaG90LnZpZXcuX3d0LHJ0PXFlLm5hbWUscHQ9WyJtYXN0ZXIiLCJpbmxpbmVfc3RhcnQiXS5pbmNsdWRlcyhydCk/YmU6MCxkdD1bIm1hc3RlciIsInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKHJ0KT9FZTowO2xldCB2bj12''@;'; put 'put ''LnRvcC1ELnRvcC0odi50b3A9PT1ELnRvcD8wOjEpLXB0LENuPTA7Q249dGhpcy5ob3QuaXNSdGwoKT9mLmlubmVyV2lkdGgtdi5sZWZ0LU0tQmUtMStkdDp2LmxlZnQtRC5sZWZ0LTEtZHQsWyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHJ0KSYmKHZuKz1kLnRv''@;'; put 'put ''cE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMocnQpJiYoQ24rPU1hdGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSkpO2NvbnN0IHRuPXRoaXMuaG90Lmhhc0Nv''@;'; put 'put ''bEhlYWRlcnMoKSxNbj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSx3cj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSxtcj10aGlzLmhvdC5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpOyh0biYmTW48PTB8fE1uPT09bXIpJiYodm4rPTEpLHdyPD0wJiYoQ24rPTEpO2NvbnN0IEduPWgucm93c1JlbmRlckNhbGN1bGF0b3Iuc3Rh''@;'; put 'put ''cnRQb3NpdGlvbixhaT1oLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sX2k9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSksT249ZC50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksenI9ZjAodGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50KTtsZXQgSm49YS5vZmZzZXRUb3A7aWYoWyJpbmxpbmVfc3RhcnQiLCJtYXN0ZXIiXS5pbmNsdWRlcyhydCkmJihKbis9R24tT24pLFsiYm90dG9tIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkpe2NvbnN0e3d0Vmlld3BvcnQ6SHIsd3RUYWJsZTpx''@;'; put 'put ''cn09ZC5ib3R0b21PdmVybGF5LmNsb25lO0puKz1Ici5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1xci5nZXRIZWlnaHQoKS16cn1sZXQgRHI9YS5vZmZzZXRMZWZ0O3RoaXMuaG90LmlzUnRsKCk/KERyPURyPj0wP3FlLmdldFdpZHRoKCktYS5vZmZzZXRMZWZ0Ok1hdGguYWJzKERyKSxEcis9YWkt''@;'; put 'put ''X2ktTSk6WyJ0b3AiLCJtYXN0ZXIiLCJib3R0b20iXS5pbmNsdWRlcyhydCkmJihEcis9YWktX2kpO2NvbnN0ICRyPWYuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKSx3aT10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixlYT1wYXJzZUludCgk''@;'; put 'put ''clt3aV0sMTApPjA/MDoxLGZhPXBhcnNlSW50KCRyLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSx2dD1zdShhKStlYSxOdD1NdShhKStmYSxGdD1NJChyZSk/enI6MCxIbj14JChjZSk/enI6MCx0cj10aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKERyKS1GdCtlYTty''@;'; put 'put ''ZXR1cm57dG9wOnZuLHN0YXJ0OkNuLGhlaWdodDpOdCxtYXhIZWlnaHQ6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoSm4pLUhuK2ZhLHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKSx3aWR0aDp2dCxtYXhXaWR0aDp0cn19Z2V0''@;'; put 'put ''RWRpdGVkQ2VsbHNMYXllckNsYXNzKCl7c3dpdGNoKHRoaXMuY2hlY2tFZGl0b3JTZWN0aW9uKCkpe2Nhc2UiaW5saW5lLXN0YXJ0IjpyZXR1cm4iaHRfY2xvbmVfbGVmdCBodF9jbG9uZV9pbmxpbmVfc3RhcnQiO2Nhc2UiYm90dG9tIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tIjtjYXNlImJv''@;'; put 'put ''dHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyIGh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIjtjYXNlInRvcCI6cmV0dXJuImh0X2Nsb25lX3RvcCI7Y2FzZSJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJu''@;'; put 'put ''Imh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciBodF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI7ZGVmYXVsdDpyZXR1cm4iaHRfY2xvbmVfbWFzdGVyIn19Z2V0RWRpdGVkQ2VsbCgpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsKHRoaXMucm93LHRoaXMuY29sLCEwKX1jaGVja0VkaXRv''@;'; put 'put ''clNlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBhPSIiO3JldHVybiB0aGlzLnJvdzx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcD9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/InRvcC1pbmxpbmUt''@;'; put 'put ''c3RhcnQtY29ybmVyIjoidG9wIjp0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSYmdGhpcy5yb3c+PWwtdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20/YT10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJi''@;'; put 'put ''b3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6ImJvdHRvbSI6dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCYmKGE9ImlubGluZS1zdGFydCIpLGF9fVRsKGtfLF9ydCk7Y29uc3QgTXJ0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5''@;'; put 'put ''cyIsY2FsbGJhY2soYyxsLGEpe2NvbnN0IGQ9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLGg9ZC5nZXRBY3RpdmVFZGl0b3IoKTtoLmlzSW5GdWxsRWRpdE1vZGUoKSYmaC5zdGF0ZT09PWx1LkVESVRJTkd8fChkLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKSxjLmdldFNlbGVjdGVkKCkmJihh''@;'; put 'put ''LmluY2x1ZGVzKCJhcnJvd2Rvd24iKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApOmEuaW5jbHVkZXMoImFycm93dXAiKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKTphLmluY2x1ZGVzKCJhcnJvd2xlZnQiKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLC0x''@;'; put 'put ''KmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpOmEuaW5jbHVkZXMoImFycm93cmlnaHQiKSYmYy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSksbC5wcmV2ZW50RGVmYXVsdCgpKX19LHhydD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlciIs''@;'; put 'put ''Y2FsbGJhY2soYyxsKXtjb25zdCBhPWMuX2dldEVkaXRvck1hbmFnZXIoKTthLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMobC5jdHJsS2V5fHxsLm1ldGFLZXkpLGEubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl9fSxFcnQ9e25hbWU6ImVkaXRvckNsb3NlV2l0aG91dFNhdmluZyIsY2Fs''@;'; put 'put ''bGJhY2soYyl7Y29uc3QgbD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCk7bC5jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpKSxsLmFjdGl2ZUVkaXRvci5mb2N1cygpfX0sVHJ0PXtuYW1lOiJlZGl0b3JGYXN0T3Bl''@;'; put 'put ''biIsY2FsbGJhY2soYyxsKXtjb25zdHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2EuaXNIZWFkZXIoKXx8Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLm9wZW5FZGl0b3IobnVsbCxsLCEwKX19LEFydD17bmFtZToiZWRpdG9yT3BlbiIsY2FsbGJhY2soYyxsLGEpe2NvbnN0''@;'; put 'put ''IGQ9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdobGlnaHQ6Zn09aDtpZihjLnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MCl7Y29u''@;'; put 'put ''c3Qgdj1jLmdldFNldHRpbmdzKCksTT0iZnVuY3Rpb24iPT10eXBlb2Ygdi5lbnRlck1vdmVzP3YuZW50ZXJNb3ZlcyhsKTp2LmVudGVyTW92ZXM7YS5pbmNsdWRlcygic2hpZnQiKT9jLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cygtTS5yb3csLU0uY29sKTpjLnNlbGVjdGlvbi50cmFuc2Zv''@;'; put 'put ''cm1Gb2N1cyhNLnJvdyxNLmNvbCl9ZWxzZSBmLmlzSGVhZGVyKCl8fChjLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nP2QuY2VsbFByb3BlcnRpZXMucmVhZE9ubHk/ZC5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKTpkLm9wZW5FZGl0b3IobnVsbCxsLCEwKTpkLm1vdmVTZWxl''@;'; put 'put ''Y3Rpb25BZnRlckVudGVyKGwpLEIyKGwpKX19LERydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIo''@;'; put 'put ''KSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDEsMCksbC5tYXJrRW5kU291cmNlKCkpfX0sSXJ0PXtuYW1lOiJleHRl''@;'; put 'put ''bmRDZWxsc1NlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHt0bzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1NYXRoLm1pbihkLnJvdytjLmNvdW50VmlzaWJsZVJvd3MoKSxjLmNvdW50''@;'; put 'put ''Um93cygpLTEpLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwtMSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxEPU1hdGgubWluKHYucm93LU0sYy5jb3VudFJvd3MoKS0x''@;'; put 'put ''KTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZUVuZCh2KSxsLm1hcmtFbmRTb3VyY2UoKSxjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpELHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sUnJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlv''@;'; put 'put ''bkxlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1Nl''@;'; put 'put ''bGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSxMcnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQiLGNhbGxiYWNrKGMp''@;'; put 'put ''e2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSxPcnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246''@;'; put 'put ''bH09Yyx7aGlnaGxpZ2h0OmEsZnJvbTpkLHRvOmh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RDb2x1bW5zKGQuY29sLGguY29sLGEpLGwubWFya0Vu''@;'; put 'put ''ZFNvdXJjZSgpfX0sUHJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNI''@;'; put 'put ''ZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktMSwtMSksRD1oLmNsb25lKCk7RC5yb3c9ZC5yb3csbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFu''@;'; put 'put ''Z2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhNLGYuY29sKSksbC5tYXJrRW5kU291cmNlKCl9fX0sRnJ0PXtuYW1lOiJleHRlbmRDZWxs''@;'; put 'put ''c1NlbGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwu''@;'; put 'put ''aXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKSxNPWguY2xvbmUoKTtNLmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KE0sdm9pZCAwLCEx''@;'; put 'put ''LGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxIcnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbklu''@;'; put 'put ''ZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PXBhcnNlSW50KGMuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5maXhlZENvbHVtbnNTdGFydCwxMCksTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LDEpLEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSxsLnNldFJhbmdlRW5kKGMuX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LE5ydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86''@;'; put 'put ''Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1tjLmNvdW50Q29scygpLTEsLTFdOlswLDFd''@;'; put 'put ''KSxEPWguY2xvbmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxWcnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0UmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1j''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pLEQ9''@;'; put 'put ''aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LEJydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpLEQ9aC5jbG9uZSgpO0Qucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxs''@;'; put 'put ''LnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoTSxmLmNvbCkpLGwubWFya0VuZFNvdXJjZSgpfX19LGpydD17bmFtZToiZXh0''@;'; put 'put ''ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YSxmcm9tOmQsdG86aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP2wu''@;'; put 'put ''c2VsZWN0QWxsKCEwLCEwKTpjLnNlbGVjdFJvd3MoZC5yb3csaC5yb3csYSksbC5tYXJrRW5kU291cmNlKCl9fSx6cnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVXAiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpOyFsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoLTEsMCks''@;'; put 'put ''bC5tYXJrRW5kU291cmNlKCkpfX0sVXJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9TWF0aC5tYXgo''@;'; put 'put ''ZC5yb3ctYy5jb3VudFZpc2libGVSb3dzKCksMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLDEpO2lmKG51bGwhPT1mKXtjb25zdCB2PWMuX2NyZWF0ZUNlbGxDb29yZHMoZixkLmNvbCksTT1kLnJvdy1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksRD1NYXRoLm1heCh2LnJv''@;'; put 'put ''dy1NLDApO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OkQsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxXcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0''@;'; put 'put ''aW9uRG93biIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDEsMCksbC5tYXJrRW5kU291cmNlKCl9fSxZcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNr''@;'; put 'put ''KGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmF9PWMuZ2V0U2V0dGluZ3MoKSxkPWE/Yy5jb3VudENvbEhlYWRlcnMoKTowLHtyb3c6aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZj1jLmNvdW50VmlzaWJsZVJvd3MoKStkO2Y9MD09''@;'; put 'put ''PWY/MTpmLGg9PT1jLmNvdW50Um93cygpLTE/Zj0xOmgrZj5jLmNvdW50Um93cygpJiYoZj1jLmNvdW50Um93cygpLWgtMSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoZiwwKSxsLm1hcmtFbmRTb3VyY2UoKSxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGln''@;'; put 'put ''aGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSl9fSxHcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kIixjYWxsYmFjayhjLGwpe2NvbnN0e3NlbGVjdGlvbjphfT1jLGQ9Yy5nZXRTZXR0aW5ncygpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGQudGFiTW92ZXM/ZC50YWJNb3ZlcyhsKTpkLnRhYk1vdmVzO2EubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxhLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wP2EudHJh''@;'; put 'put ''bnNmb3JtRm9jdXMoLWYucm93LC1mLmNvbCk6YS50cmFuc2Zvcm1TdGFydCgtZi5yb3csLWYuY29sKSxhLm1hcmtFbmRTb3VyY2UoKX19LCRydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVTdGFydCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxlY3Rpb246YX09YyxkPWMuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBkLnRhYk1vdmVzP2QudGFiTW92ZXMobCk6ZC50YWJNb3ZlczthLm1hcmtTb3VyY2UoImtleWJvYXJkIiksYS5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENv''@;'; put 'put ''bHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKGYucm93LGYuY29sKTphLnRyYW5zZm9ybVN0YXJ0KGYucm93LGYuY29sKSxhLm1hcmtFbmRTb3VyY2UoKX19LEtydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtjb25zdHtz''@;'; put 'put ''ZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpfX0scXJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rp''@;'; put 'put ''b246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpfX0sWHJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9u''@;'; put 'put ''Omx9PWMse2NvbDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBkPWMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktMSwtMSk7bnVsbD09PWQmJihkPS0xKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhkLGEpKX19LEpydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhl''@;'; put 'put ''ZFJvd3NCb3R0b20sMTApLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS1oLTEsLTEpLHY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoZix2KSksbC5tYXJrRW5kU291cmNlKCl9fSxRcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNl''@;'; put 'put ''dFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxhLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpKSksbC5tYXJrRW5kU291cmNlKCl9fSxlaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0''@;'; put 'put ''aW9uVG9Nb3N0SW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMsZD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3cs''@;'; put 'put ''Zj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LHRpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxs''@;'; put 'put ''YmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1tjLmNvdW50Q29scygpLTEsLTFdOlswLDFdKTtu''@;'; put 'put ''dWxsPT09aCYmKGg9Yy5pc1J0bCgpPy0xOi1jLmNvdW50Um93SGVhZGVycygpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSksbC5tYXJrRW5kU291cmNlKCl9fSxuaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9N''@;'; put 'put ''b3N0UmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse3JvdzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBoPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bMCwxXTpbYy5jb3Vu''@;'; put 'put ''dENvbHMoKS0xLC0xXSk7bnVsbD09PWgmJihoPWMuaXNSdGwoKT8tYy5jb3VudFJvd0hlYWRlcnMoKTotMSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLGwubWFya0VuZFNvdXJjZSgpfX0scml0PXtuYW1lOiJtb3Zl''@;'; put 'put ''Q2VsbFNlbGVjdGlvblRvTW9zdFRvcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2NvbDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBkPWMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7bnVsbD09PWQmJihk''@;'; put 'put ''PS1jLmNvdW50Q29sSGVhZGVycygpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxhKSksbC5tYXJrRW5kU291cmNlKCl9fSxpaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQiLGNhbGxi''@;'; put 'put ''YWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsMTApLGY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSx2PWEuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSksTT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLDEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3Jkcyh2LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19LGFpdD17bmFtZToibW92ZUNl''@;'; put 'put ''bGxTZWxlY3Rpb25VcCIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KC0xLDApLGwubWFya0VuZFNvdXJjZSgpfX0sb2l0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0IixjYWxs''@;'; put 'put ''YmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7bmF2aWdhYmxlSGVhZGVyczphfT1jLmdldFNldHRpbmdzKCksZD1hP2MuY291bnRDb2xIZWFkZXJzKCk6MCx7cm93Omh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtm''@;'; put 'put ''PTA9PT1mPy0xOi1mLGg9PT0tZD9mPS0xOmgrZjxkJiYoZj0tKGgrZCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KGYsMCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9y''@;'; put 'put ''dFRvKHtyb3c6MH0pfX0sbGl0PXtuYW1lOiJlbXB0eVNlbGVjdGVkQ2VsbHMiLGNhbGxiYWNrKGMpe2MuZW1wdHlTZWxlY3RlZENlbGxzKCksYy5fZ2V0RWRpdG9yTWFuYWdlcigpLnByZXBhcmVFZGl0b3IoKX19LGNpdD17bmFtZToic2Nyb2xsVG9Gb2N1c2VkQ2VsbCIsY2FsbGJhY2soYyl7''@;'; put 'put ''Y29uc3R7aGlnaGxpZ2h0Omx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKS0xLGQ9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLTEsaD1jLmdldExhc3RGdWxseVZpc2libGVSb3coKSsxLGY9Yy5nZXRMYXN0RnVsbHlWaXNpYmxl''@;'; put 'put ''Q29sdW1uKCkrMSx2PWMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxNPWMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKTtpZighYy5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKS5pbmNsdWRlcyhsKSYmKGwucm93Pj0wfHxsLmNvbD49MCkpe2NvbnN0IFo9e307aWYobC5jb2w+PTApe2NvbnN0IHJlPU1h''@;'; put 'put ''dGguZmxvb3IoYy5jb3VudFZpc2libGVDb2xzKCkvMik7Wi5jb2w9TWF0aC5tYXgobC5jb2wtcmUsMCl9aWYobC5yb3c+PTApe2NvbnN0IHJlPU1hdGguZmxvb3IoYy5jb3VudFZpc2libGVSb3dzKCkvMik7Wi5yb3c9TWF0aC5tYXgobC5yb3ctcmUsMCl9Yy5zY3JvbGxWaWV3cG9ydFRvKHsu''@;'; put 'put ''Li5aLHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sdWl0PXtuYW1lOiJzZWxlY3RBbGxDZWxscyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRl''@;'; put 'put ''cnNIaWdobGlnaHQ6ITB9KSxsLm1hcmtFbmRTb3VyY2UoKX19LGRpdD17bmFtZToic2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hp''@;'; put 'put ''Z2hsaWdodDohMX0pLGwubWFya0VuZFNvdXJjZSgpfX0saGl0PXtuYW1lOiJwb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhIixjYWxsYmFjayhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHtyb3c6YSxjb2w6ZH09bFtsLmxlbmd0aC0xXS5oaWdobGlnaHQubm9ybWFsaXplKCksaD1j''@;'; put 'put ''LmdldERhdGFBdENlbGwoYSxkKSxmPW5ldyBNYXA7Zm9yKGxldCB2PTA7djxsLmxlbmd0aDt2KyspbFt2XS5mb3JBbGwoKE0sRCk9PntpZihNPj0wJiZEPj0wJiYoTSE9PWF8fEQhPT1kKSl7Y29uc3R7cmVhZE9ubHk6Wn09Yy5nZXRDZWxsTWV0YShNLEQpO1p8fGYuc2V0KGAke019eCR7RH1g''@;'; put 'put ''LFtNLEQsaF0pfX0pO2Muc2V0RGF0YUF0Q2VsbChBcnJheS5mcm9tKGYudmFsdWVzKCkpKX19LGZpdD1bLi4uZnVuY3Rpb24ga3J0KCl7cmV0dXJuW2JydCxNcnQseHJ0LEVydCxUcnQsQXJ0XX0oKSwuLi5mdW5jdGlvbiBacnQoKXtyZXR1cm5bRHJ0LElydCxScnQsTHJ0LE9ydCxQcnQsRnJ0''@;'; put 'put ''LEhydCxOcnQsVnJ0LEJydCxqcnQsenJ0LFVydF19KCksLi4uZnVuY3Rpb24gc2l0KCl7cmV0dXJuW1dydCxZcnQsR3J0LCRydCxLcnQscXJ0LFhydCxKcnQsUXJ0LGVpdCx0aXQsbml0LHJpdCxpaXQsYWl0LG9pdF19KCksbGl0LGNpdCx1aXQsZGl0LGhpdF07ZnVuY3Rpb24gX3BlKGMpe2Nv''@;'; put 'put ''bnN0IGw9e307cmV0dXJuIGZpdC5mb3JFYWNoKGE9PntsZXR7bmFtZTpkLGNhbGxiYWNrOmh9PWE7bFtkXT1mdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBoKGMsLi4udil9fSks''@;'; put 'put ''bH1mdW5jdGlvbiBwaXQoYyl7Y29uc3QgbD1jLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImVkaXRvciIpLGE9X3BlKGMpLGQ9e2dyb3VwOldtfTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGgsZik9PmEuZWRp''@;'; put 'put ''dG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJFbnRlciIsIkNvbnRyb2wvTWV0YSJdLFsiRW50ZXIiLCJDb250cm9sL01ldGEiLCJTaGlmdCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlz''@;'; put 'put ''OltbIlRhYiJdLFsiVGFiIiwiU2hpZnQiXSxbIlBhZ2VEb3duIl0sWyJQYWdlVXAiXV0sZm9yd2FyZFRvQ29udGV4dDpjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmUoaCxmKX0se2tleXM6W1siQXJy''@;'; put 'put ''b3dEb3duIl0sWyJBcnJvd1VwIl0sWyJBcnJvd0xlZnQiXSxbIkFycm93UmlnaHQiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMoaCxmKX0se2tleXM6W1siRXNjYXBlIl0sWyJFc2NhcGUiLCJDb250cm9sL01ldGEi''@;'; put 'put ''XV0sY2FsbGJhY2s6KCk9PmEuZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nKCl9XSxkKX1mdW5jdGlvbiBnaXQoYyl7Y29uc3QgbD1jLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImdyaWQiKSxhPV9wZShjKSxkPXtydW5Pbmx5SWY6KCk9Pntjb25zdHtuYXZpZ2FibGVIZWFkZXJz''@;'; put 'put ''Omh9PWMuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gUGEoYy5nZXRTZWxlY3RlZCgpKSYmKGh8fCFoJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmYy5jb3VudFJlbmRlcmVkQ29scygpPjApfSxncm91cDpmcGV9O2wuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJGMiJdXSxjYWxsYmFjazpoPT5hLmVk''@;'; put 'put ''aXRvckZhc3RPcGVuKGgpfSx7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JPcGVuKGgsZil9LHtrZXlzOltbIkJhY2tzcGFjZSJdLFsiRGVsZXRlIl1dLGNhbGxiYWNrOigpPT5hLmVtcHR5U2VsZWN0ZWRDZWxscygpfV0se2dyb3Vw''@;'; put 'put ''OldtLHJ1bk9ubHlJZjooKT0+UGEoYy5nZXRTZWxlY3RlZCgpKX0pLGwuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT5hLnNlbGVjdEFsbENlbGxzKCkscnVuT25seUlmOigpPT57dmFyIGg7cmV0dXJuIShudWxsIT09KGg9Yy5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpKSYmdm9pZCAwIT09aCYmaC5oaWdobGlnaHQuaXNIZWFkZXIoKSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT57fSxydW5Pbmx5SWY6KCk9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8''@;'; put 'put ''fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0LmlzSGVhZGVyKCl9LHByZXZlbnREZWZhdWx0OiEwfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIlNwYWNlIl1dLGNhbGxiYWNrOigpPT5hLnNlbGVjdEFsbENlbGxzQW5kSGVhZGVycygpfSx7a2V5czpbWyJDb250cm9sL01l''@;'; put 'put ''dGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+YS5wb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhKCkscnVuT25seUlmOigpPT57dmFyIGgsZjtyZXR1cm4hKG51bGwhPT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpJiZ2b2lkIDAhPT1oJiZoLmhpZ2hsaWdodC5pc0hlYWRlcigpKSYmKG51''@;'; put 'put ''bGw9PT0oZj1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmdldENlbGxzQ291bnQoKSk+MX19LHtrZXlzOltbIkNvbnRyb2wiLCJTcGFjZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucygp''@;'; put 'put ''fSx7a2V5czpbWyJTaGlmdCIsIlNwYWNlIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cygpfSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dV''@;'; put 'put ''cCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1Vw''@;'; put 'put ''IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RUb3AoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNv''@;'; put 'put ''bHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01v''@;'; put 'put ''c3RCb3R0b20oKX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVu''@;'; put 'put ''ZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2Vs''@;'; put 'put ''bFNlbGVjdGlvbkxlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRl''@;'; put 'put ''bmRDZWxsc1NlbGVjdGlvbkxlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25SaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVD''@;'; put 'put ''dHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0UmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJv''@;'; put 'put ''bC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0UmlnaHQoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tl''@;'; put 'put ''eXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0KCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkhvbWUiLCJTaGlmdCJd''@;'; put 'put ''XSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0KCl9LHtrZXlzOltbIkhvbWUiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCgpLHJ1bk9u''@;'; put 'put ''bHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5U''@;'; put 'put ''YWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQoKX0se2tleXM6W1siRW5kIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNr''@;'; put 'put ''OigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwQnlW''@;'; put 'put ''aWV3cG9ydEhpZ2h0KCl9LHtrZXlzOltbIlBhZ2VVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3Bv''@;'; put 'put ''cnRIZWlnaHQoKX0se2tleXM6W1siUGFnZURvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpoPT5hLm1vdmVDZWxsU2VsZWN0aW9u''@;'; put 'put ''SW5saW5lU3RhcnQoaCl9LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOmg9PmEubW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQoaCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkJhY2tzcGFjZSJdXSxjYWxsYmFjazooKT0+YS5zY3JvbGxUb0Zv''@;'; put 'put ''Y3VzZWRDZWxsKCl9XSxkKX1mdW5jdGlvbiB3cGUoYyl7Y29uc3R7Y2xhc3NOYW1lczpsfT1JMmUoYywvaHQtdGhlbWUtW2EtekEtWjAtOV8tXSsvKTtyZXR1cm4gbC5wb3AoKX1sZXQgVFg9bnVsbDtjb25zdCBBWD1uZXcgTWFwO2Z1bmN0aW9uIENwZShjLGwpe3ZhciBhLGQ9dGhpcztsZXQg''@;'; put 'put ''aD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGY9dGhpcztjb25zdCB2PW5ldyBqMihmKTtsZXQgTSxELFoscmUsY2UsYmUsRWU9ITA7KGZ1bmN0aW9uIFZldChjKXtyZXR1cm4gYz09PUFLfSkoaCkmJmZ1bmN0aW9uIE5ldChjKXt5M2Uu''@;'; put 'put ''c2V0KGMsITApfSh0aGlzKSx0aGlzLnJvb3RFbGVtZW50PWMsdGhpcy5yb290RG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMucm9vdFdpbmRvdz10aGlzLnJvb3REb2N1bWVudC5kZWZhdWx0Vmlldyx0aGlzLmlzRGVzdHJveWVkPSExLHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj0w''@;'; put 'put ''LHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj0wO2NvbnN0IEJlPW51bGwhPT0oYT1sPy5sYXlvdXREaXJlY3Rpb24pJiZ2b2lkIDAhPT1hP2E6ImluaGVyaXQiLHFlPVsicnRsIiwibHRyIl0uaW5jbHVkZXMoQmUpP0JlOnRoaXMucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRo''@;'; put 'put ''aXMucm9vdEVsZW1lbnQpLmRpcmVjdGlvbjt0aGlzLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGlyIixxZSksdGhpcy5pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09cWV9LHRoaXMuaXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVjdGlvbkZh''@;'; put 'put ''Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX0sbC5sYW5ndWFnZT1mdW5jdGlvbiBGdHQoYyl7bGV0IGw9TzNlKGMpO3JldHVybiBmWChsKXx8KGw9aFgsUDNlKGMpKSxsfShsLmxhbmd1YWdlKTtjb25zdCBydD1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMo''@;'; put 'put ''bCkuZmlsdGVyKHZ0PT57bGV0W050XT12dDtyZXR1cm4hKFNhLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZChOdCl8fFNhLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZChOdCkpfSkpLHB0PW5ldyBzcGUoZixydCxbem50LEtudF0pLGR0PXB0LmdldFRhYmxlTWV0YSgpLEp0PXB0Lmdl''@;'; put 'put ''dEdsb2JhbE1ldGEoKSx2bj1KTygpO3RoaXMuY29udGFpbmVyPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGMuaW5zZXJ0QmVmb3JlKHRoaXMuY29udGFpbmVyLGMuZmlyc3RDaGlsZCksY1AodGhpcykmJihfMmUobC5saWNlbnNlS2V5LGMpLFRpKGMsImh0LXdyYXBw''@;'; put 'put ''ZXIiKSksdGhpcy5ndWlkPWBodF8ke3UkKCl9YCxBWC5zZXQodGhpcy5ndWlkLHRoaXMpLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3IFpLLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IFpLLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFu''@;'; put 'put ''Z2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdnQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix2dCl9KSx2LmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIodGhpcy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0Iix2dD0+e2YucnVuSG9va3MoImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLHZ0KX0pLEQ9bmV3IGV0dChmKSwoIXRoaXMucm9vdEVsZW1lbnQuaWR8fCJodF8iPT09dGhpcy5yb290''@;'; put 'put ''RWxlbWVudC5pZC5zdWJzdHJpbmcoMCwzKSkmJih0aGlzLnJvb3RFbGVtZW50LmlkPXRoaXMuZ3VpZCk7bGV0IEdyPW5ldyB2bnQoZHQse3Jvd0luZGV4TWFwcGVyOmYucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6Zi5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6KCk9PmYu''@;'; put 'put ''Y291bnRDb2xzKCksY291bnRSb3dzOigpPT5mLmNvdW50Um93cygpLHByb3BUb0NvbDp2dD0+TS5wcm9wVG9Db2wodnQpLGlzRWRpdG9yT3BlbmVkOigpPT4hIWYuZ2V0QWN0aXZlRWRpdG9yKCkmJmYuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5z''@;'; put 'put ''OigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVSb3dzKCksY291bnRSb3dIZWFkZXJzOigpPT50aGlzLmNvdW50Um93SGVhZGVycygpLGNvdW50Q29sSGVhZGVyczooKT0+dGhpcy5j''@;'; put 'put ''b3VudENvbEhlYWRlcnMoKSxjb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBkLnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3''@;'; put 'put ''LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGdldFNob3J0Y3V0TWFuYWdlcjooKT0+Zi5nZXRTaG9ydGN1dE1hbmFnZXIoKSxjcmVhdGVDZWxsQ29vcmRzOih2dCxOdCk9PmYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGNyZWF0ZUNlbGxSYW5nZToodnQs''@;'; put 'put ''TnQsRnQpPT5mLl9jcmVhdGVDZWxsUmFuZ2UodnQsTnQsRnQpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkczp2dD0+e2NvbnN0e3JvdzpOdCxjb2w6RnR9PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE50Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChOdCk6TnQsRnQ+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEZ0KTpGdCl9LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp2dD0+e2NvbnN0e3JvdzpOdCxjb2w6RnR9PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE50Pj0wP2Yu''@;'; put 'put ''cm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChOdCk6TnQsRnQ+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEZ0KTpGdCl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6KHZ0LE50KT0+e2NvbnN0IEZ0''@;'; put 'put ''PU50PnZ0PzE6LTEsSG49TWF0aC5taW4odnQsTnQpLHRyPU1hdGgubWF4KHZ0LE50KSxhcj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCxGdCk7cmV0dXJuIG51bGw9PT1hcnx8MT09PUZ0JiZhcj50cnx8LTE9PT1GdCYmYXI8SG4/bnVsbDphcj49MD9mLnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYXIpOmFyfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOih2dCxOdCk9Pntjb25zdCBGdD1OdD52dD8xOi0xLEhuPU1hdGgubWluKHZ0LE50KSx0cj1NYXRoLm1heCh2dCxOdCksYXI9Zi5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsRnQpO3JldHVybiBudWxsPT09YXJ8fDE9PT1GdCYmYXI+dHJ8fC0xPT09RnQmJmFyPEhuP251bGw6YXI+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGFyKTphcn0saXNEaXNh''@;'; put 'put ''YmxlZENlbGxTZWxlY3Rpb246KHZ0LE50KT0+dnQ8MHx8TnQ8MD9mLmdldFNldHRpbmdzKCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjpmLmdldENlbGxNZXRhKHZ0LE50KS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9ufSk7dGhpcy5zZWxlY3Rpb249R3I7Y29uc3QgbXI9dnQ9PntsZXR7aGlkZGVu''@;'; put 'put ''SW5kZXhlc0NoYW5nZWQ6TnR9PXZ0O3RoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLE50JiZ0aGlzLnNlbGVjdGlvbi5jb21taXQoKX07ZnVuY3Rpb24gYWkodnQsTnQpe2NvbnN0IEZ0PSJjbGFzc05hbWUiPT09dnQ/Zi5yb290RWxlbWVudDpmLnRhYmxlO2lmKEVlKVRpKEZ0LE50KTtlbHNle2xl''@;'; put 'put ''dCBIbj1bXSx0cj1bXTtKdFt2dF0mJihIbj1BcnJheS5pc0FycmF5KEp0W3Z0XSk/SnRbdnRdOmwkKEp0W3Z0XSkpLE50JiYodHI9QXJyYXkuaXNBcnJheShOdCk/TnQ6bCQoTnQpKTtjb25zdCBhcj1zJChIbix0ciksSHI9cyQodHIsSG4pO2FyLmxlbmd0aCYmbG8oRnQsYXIpLEhyLmxlbmd0''@;'; put 'put ''aCYmVGkoRnQsSHIpfUp0W3Z0XT1OdH1mdW5jdGlvbiBfaSgpe2xldCB2dD0hMTtyZXR1cm57dmFsaWRhdG9yc0luUXVldWU6MCx2YWxpZDohMCxhZGRWYWxpZGF0b3JUb1F1ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSs9MSx2dD0hMX0scmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl7''@;'; put 'put ''dGhpcy52YWxpZGF0b3JzSW5RdWV1ZT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTE8MD8wOnRoaXMudmFsaWRhdG9yc0luUXVldWUtMSx0aGlzLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sb25RdWV1ZUVtcHR5KCl7fSxjaGVja0lmUXVldWVJc0VtcHR5KCl7MD09PXRoaXMudmFsaWRhdG9yc0lu''@;'; put 'put ''UXVldWUmJiExPT09dnQmJih2dD0hMCx0aGlzLm9uUXVldWVFbXB0eSh0aGlzLnZhbGlkKSl9fX1mdW5jdGlvbiBPbih2dCl7Y29uc3QgTnQ9dnQucmVwbGFjZSgiLCIsIi4iKTtyZXR1cm4hMT09PWlzTmFOKHBhcnNlRmxvYXQoTnQpKT9wYXJzZUZsb2F0KE50KTp2dH1mdW5jdGlvbiB6cih2''@;'; put 'put ''dCxOdCxGdCl7aWYoIXZ0Lmxlbmd0aClyZXR1cm4gdm9pZCBGdCgpO2NvbnN0IEhuPWYuZ2V0QWN0aXZlRWRpdG9yKCksdHI9bmV3IF9pO2xldCBhcj0hMDt0ci5vblF1ZXVlRW1wdHk9KCk9PntIbiYmYXImJkhuLmNhbmNlbENoYW5nZXMoKSxGdCgpfTtmb3IobGV0IEhyPXZ0Lmxlbmd0aC0x''@;'; put 'put ''O0hyPj0wO0hyLS0pe2NvbnN0W3FyLG9uXT12dFtIcl0seW49TS5wcm9wVG9Db2wob24pO2xldCBwbjtwbj1OdW1iZXIuaXNJbnRlZ2VyKHluKT9mLmdldENlbGxNZXRhKHFyLHluKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKGR0KSwuLi5kdH0sZi5nZXRDZWxsVmFsaWRhdG9yKHBuKSYm''@;'; put 'put ''KHRyLmFkZFZhbGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbCh2dFtIcl1bM10scG4sZnVuY3Rpb24ocHIsJG4pe3JldHVybiBmdW5jdGlvbihkcil7aWYoImJvb2xlYW4iIT10eXBlb2YgZHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJv''@;'; put 'put ''b2xlYW4iKTshMT09PWRyJiYhMT09PSRuLmFsbG93SW52YWxpZCYmKGFyPSExLHZ0LnNwbGljZShwciwxKSwkbi52YWxpZD0hMCksdHIucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9fShIcixwbiksTnQpKX10ci5jaGVja0lmUXVldWVJc0VtcHR5KCl9ZnVuY3Rpb24gSm4odnQsTnQpe2Zv''@;'; put 'put ''cihsZXQgSG49dnQubGVuZ3RoLTE7SG4+PTA7SG4tLSl7bGV0IHRyPSExO2lmKG51bGwhPT12dFtIbl0pe2lmKG51bGwhPXZ0W0huXVsyXXx8bnVsbCE9dnRbSG5dWzNdKXtpZihkdC5hbGxvd0luc2VydFJvdylmb3IoO3Z0W0huXVswXT5mLmNvdW50Um93cygpLTE7KXtjb25zdHtkZWx0YTph''@;'; put 'put ''cn09TS5jcmVhdGVSb3codm9pZCAwLHZvaWQgMCx7c291cmNlOiJhdXRvIn0pO2lmKDA9PT1hcil7dHI9ITA7YnJlYWt9fWlmKCJhcnJheSI9PT1mLmRhdGFUeXBlJiYoIWR0LmNvbHVtbnN8fDA9PT1kdC5jb2x1bW5zLmxlbmd0aCkmJmR0LmFsbG93SW5zZXJ0Q29sdW1uKWZvcig7TS5wcm9w''@;'; put 'put ''VG9Db2wodnRbSG5dWzFdKT5mLmNvdW50Q29scygpLTE7KXtjb25zdHtkZWx0YTphcn09TS5jcmVhdGVDb2wodm9pZCAwLHZvaWQgMCx7c291cmNlOiJhdXRvIn0pO2lmKDA9PT1hcil7dHI9ITA7YnJlYWt9fXRyfHxNLnNldCh2dFtIbl1bMF0sdnRbSG5dWzFdLHZ0W0huXVszXSl9fWVsc2Ug''@;'; put 'put ''dnQuc3BsaWNlKEhuLDEpfWlmKHZ0Lmxlbmd0aD4wKXtaLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIix2dCxOdCkscmUuY2xvc2VFZGl0b3IoKSxmLnJlbmRlcigpLHJlLnByZXBhcmVFZGl0b3IoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl''@;'; put 'put ''KCksZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHZ0LE50fHwiZWRpdCIpO2NvbnN0IEhuPWYuZ2V0QWN0aXZlRWRpdG9yKCk7SG4mJlBhKEhuLnJlZnJlc2hWYWx1ZSkmJkhuLnJlZnJlc2hWYWx1ZSgpfWVsc2UgZi5yZW5kZXIoKX1mdW5jdGlvbiBEcih2dCxOdCxGdCl7cmV0dXJuIEFycmF5''@;'; put 'put ''LmlzQXJyYXkodnQpP3Z0OltbdnQsTnQsRnRdXX1mdW5jdGlvbiAkcih2dCxOdCl7Y29uc3QgRnQ9Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlIix2dCxOdHx8ImVkaXQiKSxIbj12dC5maWx0ZXIoYXI9Pm51bGwhPT1hcik7dmFyIHRyO2lmKCExPT09RnR8fDA9PT1Ibi5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IG51bGw9PT0odHI9Zi5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PXRyfHx0ci5jYW5jZWxDaGFuZ2VzKCksW107Zm9yKGxldCBhcj1Ibi5sZW5ndGgtMTthcj49MDthci0tKXtjb25zdFtIcixxciwsb25dPUhuW2FyXSx5bj1NLnByb3BUb0NvbChxcik7bGV0IHBuO3BuPU51bWJlci5p''@;'; put 'put ''c0ludGVnZXIoeW4pP2YuZ2V0Q2VsbE1ldGEoSHIseW4pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZHQpLC4uLmR0fTtjb25zdHt0eXBlOnByLGNoZWNrZWRUZW1wbGF0ZTokbix1bmNoZWNrZWRUZW1wbGF0ZTpkcn09cG47aWYoIm51bWVyaWMiPT09cHImJiJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''b24mJm1mZShvbikmJihIblthcl1bM109T24ob24pKSwiY2hlY2tib3giPT09cHIpe2NvbnN0IFVyPWxjKG9uKSxabj1Vcj09PWxjKCRuKSxzcj1Vcj09PWxjKGRyKTsoWm58fHNyKSYmKEhuW2FyXVszXT1abj8kbjpkcil9fXJldHVybiBIbn10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExv''@;'; put 'put ''Y2FsSG9vaygiY2FjaGVVcGRhdGVkIixtciksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsbXIpLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRSYW5nZUVuZCIsKHZ0LE50KT0+e2NvbnN0IEZ0PUZkKCExKSxIbj10aGlzLnNlbGVj''@;'; put 'put ''dGlvbi5nZXRTZWxlY3RlZFJhbmdlKCkse2Zyb206dHIsdG86YXJ9PUhuLmN1cnJlbnQoKSxIcj1Ibi5zaXplKCktMTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbiIsdHIucm93LHRyLmNvbCxhci5yb3csYXIuY29sLEZ0LEhyKSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkJ5''@;'; put 'put ''UHJvcCIsdHIucm93LGYuY29sVG9Qcm9wKHRyLmNvbCksYXIucm93LGYuY29sVG9Qcm9wKGFyLmNvbCksRnQsSHIpLE50JiYoIUZ0LmlzVG91Y2hlZCgpfHxGdC5pc1RvdWNoZWQoKSYmIUZ0LnZhbHVlKSYmYmUuc2Nyb2xsVG8odnQpO2NvbnN0IHFyPUdyLmlzU2VsZWN0ZWRCeVJvd0hlYWRl''@;'; put 'put ''cigpLG9uPUdyLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3FyJiZvbj9UaSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSk6cXI/KGxvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSxU''@;'; put 'put ''aSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIikpOm9uPyhsbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIiksVGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpKTpsbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3Nl''@;'; put 'put ''bGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksInNoaWZ0IiE9PUdyLmdldFNlbGVjdGlvblNvdXJjZSgpJiZyZS5jbG9zZUVkaXRvcihudWxsKSxmLnZpZXcucmVuZGVyKCkscmUucHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJi''@;'; put 'put ''ZWZvcmVTZXRGb2N1cyIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0LmNvbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0Rm9jdXMiLHZ0PT57Y29uc3QgTnQ9RmQoITEpO3RoaXMucnVuSG9va3MoImFmdGVyU2Vs''@;'; put 'put ''ZWN0aW9uRm9jdXNTZXQiLHZ0LnJvdyx2dC5jb2wsTnQpLCghTnQuaXNUb3VjaGVkKCl8fE50LmlzVG91Y2hlZCgpJiYhTnQudmFsdWUpJiZiZS5zY3JvbGxUbyh2dCkscmUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCkscmUucHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix2dD0+e2NvbnN0IE50PXZ0Lmxlbmd0aC0xLHtmcm9tOkZ0LHRvOkhufT12dFtOdF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmQiLEZ0LnJvdyxGdC5jb2wsSG4ucm93LEhuLmNvbCxOdCksdGhpcy5ydW5Ib29r''@;'; put 'put ''cygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLEZ0LnJvdyxmLmNvbFRvUHJvcChGdC5jb2wpLEhuLnJvdyxmLmNvbFRvUHJvcChIbi5jb2wpLE50KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dD0+e2NvbnN0IE50PXRoaXMucnVu''@;'; put 'put ''SG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdnQudmFsdWUpO3Z0LnZhbHVlJiYodnQudmFsdWU9TnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e3JlLmNsb3NlRWRpdG9yKCksZi52aWV3LnJlbmRlcigpLGxvKHRoaXMucm9vdEVs''@;'; put 'put ''ZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUhpZ2hsaWdodFNldCIsKCk9PnRoaXMucnVuSG9va3MoImJlZm9yZVNl''@;'; put 'put ''bGVjdGlvbkhpZ2hsaWdodFNldCIpKS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksRnQ9MDtGdDx2dDtGdCsrKU50W0Z0XT1hcmd1bWVudHNbRnRdO3JldHVybiBkLnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7RnQrKylOdFtGdF09YXJndW1lbnRzW0Z0''@;'; put 'put ''XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksRnQ9MDtGdDx2dDtGdCsrKU50W0Z0''@;'; put 'put ''XT1hcmd1bWVudHNbRnRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7''@;'; put 'put ''RnQrKylOdFtGdF09YXJndW1lbnRzW0Z0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCks''@;'; put 'put ''RnQ9MDtGdDx2dDtGdCsrKU50W0Z0XT1hcmd1bWVudHNbRnRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2VsZWN0Um93cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFy''@;'; put 'put ''cmF5KHZ0KSxGdD0wO0Z0PHZ0O0Z0KyspTnRbRnRdPWFyZ3VtZW50c1tGdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNlbGVjdFJvd3MiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1u''@;'; put 'put ''ZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7RnQrKylOdFtGdF09YXJndW1lbnRzW0Z0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJTZWxlY3RSb3dzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7RnQrKylOdFtGdF09YXJndW1lbnRzW0Z0XTtyZXR1cm4gZC5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxGdD0wO0Z0PHZ0O0Z0KyspTnRbRnRdPWFyZ3VtZW50c1tGdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5''@;'; put 'put ''VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksRnQ9MDtGdDx2dDtGdCsrKU50W0Z0XT1hcmd1bWVudHNbRnRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uTnQpfSkuYWRkTG9j''@;'; put 'put ''YWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7RnQrKylOdFtGdF09YXJndW1lbnRzW0Z0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zv''@;'; put 'put ''cm1Gb2N1cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksRnQ9MDtGdDx2dDtGdCsrKU50W0Z0XT1hcmd1bWVudHNbRnRdO3JldHVybiBkLnJ1bkhv''@;'; put 'put ''b2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksRnQ9MDtGdDx2dDtGdCsrKU50W0Z0XT1hcmd1bWVudHNbRnRd''@;'; put 'put ''O3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7RnQrKylOdFtGdF09YXJn''@;'; put 'put ''dW1lbnRzW0Z0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlUm93V3JhcCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVDb2x1bW5XcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEZ0PTA7RnQ8dnQ7RnQrKylOdFtGdF09''@;'; put 'put ''YXJndW1lbnRzW0Z0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uV3JhcCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIix2dD0+dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdnQsMSwiYXV0byIpKS5hZGRMb2NhbEhvb2soImluc2VydENvbFJl''@;'; put 'put ''cXVpcmUiLHZ0PT50aGlzLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix2dCwxLCJhdXRvIikpLFo9e2FsdGVyKHZ0LE50KXtsZXQgRnQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEsSG49YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50''@;'; put 'put ''c1szXTp2b2lkIDAsdHI9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTp2b2lkIDA7Y29uc3QgYXI9SHI9PntpZigwPT09SHIubGVuZ3RoKXJldHVybltdO2NvbnN0IHFyPVsuLi5Icl07cmV0dXJuIHFyLnNvcnQoKHluLHBuKT0+e2xldFtwcl09eW4sWyRuXT1wbjtyZXR1cm4gcHI9''@;'; put 'put ''PT0kbj8wOnByPiRuPzE6LTF9KSxxdShxciwoeW4scG4pPT57bGV0W3ByLCRuXT1wbjtjb25zdCBkcj15blt5bi5sZW5ndGgtMV0sW1VyLFpuXT1kcixzcj1VcitabjtpZihwcjw9c3Ipe2NvbnN0IE5yPU1hdGgubWF4KCRuLShzci1wciksMCk7ZHJbMV0rPU5yfWVsc2UgeW4ucHVzaChbcHIs''@;'; put 'put ''JG5dKTtyZXR1cm4geW59LFtxclswXV0pfTtzd2l0Y2godnQpe2Nhc2UiaW5zZXJ0X3Jvd19iZWxvdyI6Y2FzZSJpbnNlcnRfcm93X2Fib3ZlIjpjb25zdCBIcj1mLmNvdW50U291cmNlUm93cygpO2lmKGR0Lm1heFJvd3M9PT1IcilyZXR1cm47Y29uc3QgcXI9Imluc2VydF9yb3dfYmVsb3ci''@;'; put 'put ''PT09dnQ/ImJlbG93IjoiYWJvdmUiO050PU50Pz8oImJlbG93Ij09PXFyP0hyOjApO2NvbnN0e2RlbHRhOm9uLHN0YXJ0UGh5c2ljYWxJbmRleDp5bn09TS5jcmVhdGVSb3coTnQsRnQse3NvdXJjZTpIbixtb2RlOnFyfSk7R3Iuc2hpZnRSb3dzKGYudG9WaXN1YWxSb3coeW4pLG9uKTticmVh''@;'; put 'put ''aztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2UiaW5zZXJ0X2NvbF9lbmQiOmNvbnN0IHBuPSJpbnNlcnRfY29sX2VuZCI9PT12dD8iZW5kIjoic3RhcnQiO050PU50Pz8oImVuZCI9PT1wbj9mLmNvdW50U291cmNlQ29scygpOjApO2NvbnN0e2RlbHRhOnByLHN0YXJ0UGh5c2ljYWxJbmRl''@;'; put 'put ''eDokbn09TS5jcmVhdGVDb2woTnQsRnQse3NvdXJjZTpIbixtb2RlOnBufSk7aWYocHIpe2lmKEFycmF5LmlzQXJyYXkoZHQuY29sSGVhZGVycykpe2NvbnN0IFpuPVtmLnRvVmlzdWFsQ29sdW1uKCRuKSwwXTtabi5sZW5ndGgrPXByLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoZHQu''@;'; put 'put ''Y29sSGVhZGVycyxabil9R3Iuc2hpZnRDb2x1bW5zKGYudG9WaXN1YWxDb2x1bW4oJG4pLHByKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IGRyPVpuPT57bGV0IHNyPTA7WW4oWm4sTnI9PntsZXRbTXIsWnJdPU5yO2NvbnN0IGFhPVVjKE1yKT9mLmNvdW50Um93cygpLTE6TWF0aC5t''@;'; put 'put ''YXgoTXItc3IsMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihNcikmJihNcj1NYXRoLm1heChNci1zciwwKSksIU0ucmVtb3ZlUm93KE1yLFpyLEhuKSlyZXR1cm47aWYoR3IuaXNTZWxlY3RlZCgpKXtjb25zdHtyb3c6TW99PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7TW8+PU1y''@;'; put 'put ''JiZNbzw9TXIrWnItMSYmcmUuY2xvc2VFZGl0b3IoITApfWNvbnN0IElvPWYuY291bnRSb3dzKCksWm89ZHQuZml4ZWRSb3dzVG9wO1pvPj1hYSsxJiYoZHQuZml4ZWRSb3dzVG9wLT1NYXRoLm1pbihacixaby1hYSkpO2NvbnN0IHBzPWR0LmZpeGVkUm93c0JvdHRvbTtwcyYmYWE+PUlvLXBz''@;'; put 'put ''JiYoZHQuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihacixwcykpLDA9PT1Jbz9Hci5kZXNlbGVjdCgpOiJDb250ZXh0TWVudS5yZW1vdmVSb3ciPT09SG4/R3IucmVmcmVzaCgpOkdyLnNoaWZ0Um93cyhNciwtWnIpLHNyKz1acn0pfTtBcnJheS5pc0FycmF5KE50KT9kcihhcihOdCkpOmRy''@;'; put 'put ''KFtbTnQsRnRdXSk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCBVcj1abj0+e2xldCBzcj0wO1luKFpuLE5yPT57bGV0W01yLFpyXT1Ocjtjb25zdCBhYT1VYyhNcik/Zi5jb3VudENvbHMoKS0xOk1hdGgubWF4KE1yLXNyLDApO2xldCBCYT1mLnRvUGh5c2ljYWxDb2x1bW4oYWEpO2lm''@;'; put 'put ''KE51bWJlci5pc0ludGVnZXIoTXIpJiYoTXI9TWF0aC5tYXgoTXItc3IsMCkpLCFNLnJlbW92ZUNvbChNcixacixIbikpcmV0dXJuO2lmKEdyLmlzU2VsZWN0ZWQoKSl7Y29uc3R7Y29sOk1vfT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O01vPj1NciYmTW88PU1yK1pyLTEm''@;'; put 'put ''JnJlLmNsb3NlRWRpdG9yKCEwKX0wPT09Zi5jb3VudENvbHMoKT9Hci5kZXNlbGVjdCgpOiJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iPT09SG4/R3IucmVmcmVzaCgpOkdyLnNoaWZ0Q29sdW1ucyhNciwtWnIpO2NvbnN0IHBzPWR0LmZpeGVkQ29sdW1uc1N0YXJ0O3BzPj1hYSsxJiYoZHQu''@;'; put 'put ''Zml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgubWluKFpyLHBzLWFhKSksQXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBCYT4idSImJihCYT0tMSksZHQuY29sSGVhZGVycy5zcGxpY2UoQmEsWnIpKSxzcis9WnJ9KX07QXJyYXkuaXNBcnJheShOdCk/VXIoYXIoTnQpKTpVcihb''@;'; put 'put ''W050LEZ0XV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBzdWNoIGFjdGlvbiAiJHt2dH0iYCl9dHJ8fFouYWRqdXN0Um93c0FuZENvbHMoKSxmLnZpZXcucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhZGp1c3RSb3dzQW5kQ29scygp''@;'; put 'put ''e2NvbnN0IHZ0PWR0Lm1pblJvd3MsTnQ9ZHQubWluU3BhcmVSb3dzLEZ0PWR0Lm1pbkNvbHMsSG49ZHQubWluU3BhcmVDb2xzO2lmKHZ0KXtjb25zdCB0cj1mLmNvdW50Um93cygpO3RyPHZ0JiZNLmNyZWF0ZVJvdyh0cix2dC10cix7c291cmNlOiJhdXRvIn0pfWlmKE50KXtjb25zdCB0cj1m''@;'; put 'put ''LmNvdW50RW1wdHlSb3dzKCEwKTtpZih0cjxOdCl7Y29uc3QgSHI9TWF0aC5taW4oTnQtdHIsZHQubWF4Um93cy1mLmNvdW50U291cmNlUm93cygpKTtNLmNyZWF0ZVJvdyhmLmNvdW50Um93cygpLEhyLHtzb3VyY2U6ImF1dG8ifSl9fXtsZXQgdHI7KEZ0fHxIbikmJih0cj1mLmNvdW50RW1w''@;'; put 'put ''dHlDb2xzKCEwKSk7bGV0IGFyPWYuY291bnRDb2xzKCk7aWYoRnQmJiFkdC5jb2x1bW5zJiZhcjxGdCl7Y29uc3QgSHI9RnQtYXI7dHIrPUhyLE0uY3JlYXRlQ29sKGFyLEhyLHtzb3VyY2U6ImF1dG8ifSl9aWYoSG4mJiFkdC5jb2x1bW5zJiYiYXJyYXkiPT09Zi5kYXRhVHlwZSYmdHI8SG4p''@;'; put 'put ''e2FyPWYuY291bnRDb2xzKCk7Y29uc3QgcXI9TWF0aC5taW4oSG4tdHIsZHQubWF4Q29scy1hcik7TS5jcmVhdGVDb2woYXIscXIse3NvdXJjZToiYXV0byJ9KX19fSxwb3B1bGF0ZUZyb21BcnJheSh2dCxOdCxGdCxIbix0cil7bGV0IGFyLEhyLHFyLG9uO2NvbnN0IHluPVtdLHBuPXt9LHBy''@;'; put 'put ''PVtdLCRuPXZ0LnJvdyxkcj12dC5jb2w7aWYoSHI9TnQubGVuZ3RoLDA9PT1IcilyZXR1cm4hMTtsZXQgVXI9MCxabj0wO3N3aXRjaChxbyhGdCkmJihVcj1GdC5jb2wtZHIrMSxabj1GdC5yb3ctJG4rMSksdHIpe2Nhc2Uic2hpZnRfZG93biI6Y29uc3Qgc3I9ZEUoTnQpLE5yPXNyLmxlbmd0''@;'; put 'put ''aCxNcj1NYXRoLm1heChOcixVciksWnI9Zi5nZXREYXRhKCkuc2xpY2UoJG4pLGFhPWRFKFpyKS5zbGljZShkcixkcitNcik7Zm9yKHFyPTA7cXI8TXI7cXIrPTEpaWYocXI8TnIpe2Zvcihhcj0wLEhyPXNyW3FyXS5sZW5ndGg7YXI8Wm4tSHI7YXIrPTEpc3JbcXJdLnB1c2goc3JbcXJdW2Fy''@;'; put 'put ''JUhyXSk7cHIucHVzaChzcltxcl0uY29uY2F0KHFyPGFhLmxlbmd0aD9hYVtxcl06bmV3IEFycmF5KFpyLmxlbmd0aCkuZmlsbChudWxsKSkpfWVsc2UgcHIucHVzaChzcltxciVOcl0uY29uY2F0KGFhW3FyXSkpO2YucG9wdWxhdGVGcm9tQXJyYXkoJG4sZHIsZEUocHIpKTticmVhaztjYXNl''@;'; put 'put ''InNoaWZ0X3JpZ2h0Ijpjb25zdCBCYT1OdC5sZW5ndGgsSW89TWF0aC5tYXgoQmEsWm4pLFpvPWYuZ2V0RGF0YSgpLnNsaWNlKCRuKS5tYXAoenM9PnpzLnNsaWNlKGRyKSk7Zm9yKGFyPTA7YXI8SW87YXIrPTEpaWYoYXI8QmEpe2Zvcihxcj0wLG9uPU50W2FyXS5sZW5ndGg7cXI8VXItb247''@;'; put 'put ''cXIrPTEpTnRbYXJdLnB1c2goTnRbYXJdW3FyJW9uXSk7aWYoYXI8Wm8ubGVuZ3RoKWZvcihsZXQgenM9MDt6czxab1thcl0ubGVuZ3RoO3pzKz0xKU50W2FyXS5wdXNoKFpvW2FyXVt6c10pO2Vsc2UgTnRbYXJdLnB1c2goLi4ubmV3IEFycmF5KFpvWzBdLmxlbmd0aCkuZmlsbChudWxsKSl9''@;'; put 'put ''ZWxzZSBOdC5wdXNoKE50W2FyJUhyXS5zbGljZSgwLElvKS5jb25jYXQoWm9bYXJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheSgkbixkcixOdCk7YnJlYWs7ZGVmYXVsdDpwbi5yb3c9dnQucm93LHBuLmNvbD12dC5jb2w7bGV0IG5jLHBzPTAsTW89MCxocz0hMDtjb25zdCBRbz1mdW5jdGlvbihK''@;'; put 'put ''Yyl7bGV0IEtzPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2NvbnN0IEJsPU50W0pjJU50Lmxlbmd0aF07cmV0dXJuIG51bGwhPT1Lcz9CbFtLcyVCbC5sZW5ndGhdOkJsfSxNMz1OdC5sZW5ndGgsYWQ9RnQ/RnQucm93LXZ0LnJv''@;'; put 'put ''dysxOjA7Zm9yKEhyPUZ0P2FkOk1hdGgubWF4KE0zLGFkKSxhcj0wO2FyPEhyJiYhKEZ0JiZwbi5yb3c+RnQucm93JiZhZD5NM3x8IWR0LmFsbG93SW5zZXJ0Um93JiZwbi5yb3c+Zi5jb3VudFJvd3MoKS0xfHxwbi5yb3c+PWR0Lm1heFJvd3MpO2FyKyspe2NvbnN0IHpzPWFyLXBzLEpjPVFv''@;'; put 'put ''KHpzKS5sZW5ndGgsS3M9RnQ/RnQuY29sLXZ0LmNvbCsxOjA7aWYob249RnQ/S3M6TWF0aC5tYXgoSmMsS3MpLHBuLmNvbD12dC5jb2wsbmM9Zi5nZXRDZWxsTWV0YShwbi5yb3cscG4uY29sKSwiQ29weVBhc3RlLnBhc3RlIiE9PUhuJiYiQXV0b2ZpbGwuZmlsbCIhPT1Ibnx8IW5jLnNraXBS''@;'; put 'put ''b3dPblBhc3RlKXtmb3IoTW89MCxxcj0wO3FyPG9uJiYhKEZ0JiZwbi5jb2w+RnQuY29sJiZLcz5KY3x8IWR0LmFsbG93SW5zZXJ0Q29sdW1uJiZwbi5jb2w+Zi5jb3VudENvbHMoKS0xfHxwbi5jb2w+PWR0Lm1heENvbHMpO3FyKyspe2lmKG5jPWYuZ2V0Q2VsbE1ldGEocG4ucm93LHBuLmNv''@;'; put 'put ''bCksKCJDb3B5UGFzdGUucGFzdGUiPT09SG58fCJBdXRvZmlsbC5maWxsIj09PUhuKSYmbmMuc2tpcENvbHVtbk9uUGFzdGUpe01vKz0xLHBuLmNvbCs9MSxvbis9MTtjb250aW51ZX1pZihuYy5yZWFkT25seSYmIlVuZG9SZWRvLnVuZG8iIT09SG4pe3BuLmNvbCs9MTtjb250aW51ZX1sZXQg''@;'; put 'put ''ZXM9UW8oenMscXItTW8pLEUxPWYuZ2V0RGF0YUF0Q2VsbChwbi5yb3cscG4uY29sKTtpZihudWxsIT09ZXMmJiJvYmplY3QiPT10eXBlb2YgZXMpaWYoQXJyYXkuaXNBcnJheShlcykmJm51bGw9PT1FMSYmKEUxPVtdKSxudWxsPT09RTF8fCJvYmplY3QiIT10eXBlb2YgRTEpaHM9ITE7ZWxz''@;'; put 'put ''ZXtjb25zdCB4Mz1zXyhBcnJheS5pc0FycmF5KEUxKT9FMTpFMVswXXx8RTEpLGVnPXNfKEFycmF5LmlzQXJyYXkoZXMpP2VzOmVzWzBdfHxlcyk7Tk8oeDMsZWcpfHxBcnJheS5pc0FycmF5KHgzKSYmQXJyYXkuaXNBcnJheShlZyk/ZXM9ZzEoZXMpOmhzPSExfWVsc2UgbnVsbCE9PUUxJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIEUxJiYoaHM9ITEpO2hzJiZ5bi5wdXNoKFtwbi5yb3cscG4uY29sLGVzXSksaHM9ITAscG4uY29sKz0xfXBuLnJvdys9MX1lbHNlIHBzKz0xLHBuLnJvdys9MSxIcis9MX1mLnNldERhdGFBdENlbGwoeW4sbnVsbCxudWxsLEhufHwicG9wdWxhdGVGcm9tQXJyYXki''@;'; put 'put ''KX19fSx0aGlzLmluaXQ9ZnVuY3Rpb24oKXtELnNldERhdGEoZHQuZGF0YSksZi5ydW5Ib29rcygiYmVmb3JlSW5pdCIpLChBcCgpfHxMJCgpKSYmVGkoZi5yb290RWxlbWVudCwibW9iaWxlIiksdGhpcy51cGRhdGVTZXR0aW5ncyhsLCEwKSx0aGlzLnZpZXc9bmV3IFlldCh0aGlzKTtjb25z''@;'; put 'put ''dCB2dD1kdC50aGVtZU5hbWV8fHdwZShmLnJvb3RFbGVtZW50KTtmLnVzZVRoZW1lKHZ0KSxmLnZpZXcuYWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChmLmdldEN1cnJlbnRUaGVtZU5hbWUoKSkscmU9ZlhlLmdldEluc3RhbmNlKGYsZHQsR3IpLGJlPWZ1bmN0aW9uIGxydChjKXtjb25z''@;'; put 'put ''dHtzZWxlY3Rpb246bH09YztsZXQgYT0hMSxkPSExO3JldHVybntyZXN1bWUoKXtkPSExfSxzdXNwZW5kKCl7ZD0hMH0sc2tpcE5leHRTY3JvbGxDeWNsZSgpe2E9ITB9LHNjcm9sbFRvKGgpe3ZhciBmO2lmKGF8fGQpcmV0dXJuIHZvaWQoYT0hMSk7bGV0IHY7bC5pc0ZvY3VzU2VsZWN0aW9u''@;'; put 'put ''Q2hhbmdlZCgpP3Y9ZnVuY3Rpb24gcnJ0KGMpe3JldHVybiBsPT57Yy5zY3JvbGxWaWV3cG9ydFRvKGwudG9PYmplY3QoKSwoKT0+e2NvbnN0e3JvdzphLGNvbDpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O0FfKGMuZ2V0Q2VsbChhLGQsITApKX0pfX0oYyk6bC5pc1Nl''@;'; put 'put ''bGVjdGVkQnlDb3JuZXIoKT92PSgpPT57fTpsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpP3Y9ZnVuY3Rpb24gb3J0KGMpe3JldHVybiBsPT57Y29uc3QgYT1GUChjKS5nZXRDb21wdXRlZFJvd1RhcmdldChsKTtjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzphfSwoKT0+e2NvbnN0IGQ9ISFjLmdl''@;'; put 'put ''dFNldHRpbmdzKCkucm93SGVhZGVycztBXyhjLmdldENlbGwoYSxkPy0xOjAsITApKX0pfX0oYyk6bC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT92PWZ1bmN0aW9uIHRydChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9RlAoYykuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCk7Yy5zY3JvbGxW''@;'; put 'put ''aWV3cG9ydFRvKHtjb2w6YX0sKCk9Pntjb25zdCBkPSEhYy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnM7QV8oYy5nZXRDZWxsKGQ/LTE6MCxhLCEwKSl9KX19KGMpOjE9PT1sLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCkmJmwuaXNNdWx0aXBsZSgpP3Y9ZnVuY3Rpb24gaXJ0KGMpe3JldHVy''@;'; put 'put ''biBsPT57Y29uc3QgYT1GUChjKSxkPXtyb3c6YS5nZXRDb21wdXRlZFJvd1RhcmdldChsKSxjb2w6YS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKX07Yy5zY3JvbGxWaWV3cG9ydFRvKGQsKCk9Pntjb25zdHtyb3c6aCxjb2w6Zn09ZDtBXyhjLmdldENlbGwoaCxmLCEwKSl9KX19KGMpOjEh''@;'; put 'put ''PT1sLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCl8fGwuaXNNdWx0aXBsZSgpP2wuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKT4xJiYodj1mdW5jdGlvbiBhcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLGQ9e3JvdzphLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpLGNvbDphLmdldENv''@;'; put 'put ''bXB1dGVkQ29sdW1uVGFyZ2V0KGwpfTtjLnNjcm9sbFZpZXdwb3J0VG8oZCwoKT0+e2NvbnN0e3JvdzpoLGNvbDpmfT1kO0FfKGMuZ2V0Q2VsbChoLGYsITApKX0pfX0oYykpOnY9ZnVuY3Rpb24gc3J0KGMpe3JldHVybiBsPT57Y29uc3QgYT1jLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Tb3Vy''@;'; put 'put ''Y2UoKSx7cm93OmQsY29sOmh9PWwsZj0oKT0+e0FfKGMuZ2V0Q2VsbChkLGgsITApKX07aWYoZDwwJiZoPj0wKWMuc2Nyb2xsVmlld3BvcnRUbyh7Y29sOmh9LGYpO2Vsc2UgaWYoaDwwJiZkPj0wKWMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OmR9LGYpO2Vsc2V7aWYoIm1vdXNlIj09PWEmJiho''@;'; put 'put ''PT09Yy52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl8fGQ9PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSkpcmV0dXJuO2Muc2Nyb2xsVmlld3BvcnRUbyh7cm93OmQsY29sOmh9LGYpfX19KGMpLG51bGw9PT0oZj12KXx8dm9pZCAwPT09Znx8ZihoKX19''@;'; put 'put ''fShmKSxjZT1uZXcgZ1hlKGYpLGNQKHRoaXMpJiZmdW5jdGlvbiB1cnQoYyl7Y29uc3QgbD1mdW5jdGlvbiBkcnQoYyl7cmV0dXJuIGw9PntpZighbClyZXR1cm4gbnVsbDtjb25zdCBhPU1YKGMpLGQ9eFgoYyk7cmV0dXJuIGwuY29sPGEuY29sJiYobC5jb2w9YS5jb2wpLGwuY29sPmQuY29s''@;'; put 'put ''JiYobC5jb2w9ZC5jb2wpLGwucm93PGEucm93JiYobC5yb3c9YS5yb3cpLGwucm93PmQucm93JiYobC5yb3c9ZC5yb3cpLGx9fShjKTtsZXQgYTtjb25zdHthY3RpdmF0ZTpkLGRlYWN0aXZhdGU6aH09ZnVuY3Rpb24gY3J0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBhPWMucm9vdEVsZW1lbnQsZD1wcGUoYyksaD1wcGUoYyk7cmV0dXJuIGQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5sPy5vbkZvY3VzRnJvbVRvcCgpKSxoLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+bD8ub25G''@;'; put 'put ''b2N1c0Zyb21Cb3R0b20oKSksYS5maXJzdENoaWxkLmJlZm9yZShkKSxhLmxhc3RDaGlsZC5hZnRlcihoKSx7YWN0aXZhdGUoKXtjLl9yZWdpc3RlclRpbWVvdXQoKCk9PntkLnRhYkluZGV4PTAsaC50YWJJbmRleD0wfSwxMCl9LGRlYWN0aXZhdGUoKXtjLl9yZWdpc3RlclRpbWVvdXQoKCk9''@;'; put 'put ''PntkLnRhYkluZGV4PS0xLGgudGFiSW5kZXg9LTF9LDEwKX19fShjLHtvbkZvY3VzRnJvbVRvcCgpe3ZhciBjZTtjb25zdCBiZT1udWxsIT09KGNlPWwoYSkpJiZ2b2lkIDAhPT1jZT9jZTpNWChjKTtiZSYmKGMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9h''@;'; put 'put ''Ym92ZSIsYmUpLGMuc2VsZWN0Q2VsbChiZS5yb3csYmUuY29sKSksYy5saXN0ZW4oKX0sb25Gb2N1c0Zyb21Cb3R0b20oKXt2YXIgY2U7Y29uc3QgYmU9bnVsbCE9PShjZT1sKGEpKSYmdm9pZCAwIT09Y2U/Y2U6eFgoYyk7YmUmJihjLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdh''@;'; put 'put ''dGlvbiIsImZyb21fYmVsb3ciLGJlKSxjLnNlbGVjdENlbGwoYmUucm93LGJlLmNvbCkpLGMubGlzdGVuKCl9fSksZj17d3JhcHBlZDohMSxmbGlwcGVkOiExfTtsZXQgdj0hMCxNPSExLEQ9ITE7Yy5hZGRIb29rKCJhZnRlckxpc3RlbiIsKCk9PmgoKSksYy5hZGRIb29rKCJhZnRlclVubGlz''@;'; put 'put ''dGVuIiwoKT0+ZCgpKSxjLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoY2UsYmUsRWUsQmUscWUpPT57dmFyIHJ0O00mJihmLndyYXBwZWQmJmYuZmxpcHBlZHx8RCkmJihEPSExLHFlLnZhbHVlPSEwKSx2JiYoYT1udWxsPT09KHJ0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQg''@;'; put 'put ''MD09PXJ0P3ZvaWQgMDpydC5oaWdobGlnaHQpfSksYy5hZGRIb29rKCJiZWZvcmVSb3dXcmFwIiwoY2UsYmUsRWUpPT57Zi53cmFwcGVkPSEwLGYuZmxpcHBlZD1FZX0pO2NvbnN0IHJlPXtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3Bh''@;'; put 'put ''Z2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDpmcGUsZ3JvdXA6ImZvY3VzQ2F0Y2hlciJ9O2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbey4uLnJlLGNhbGxiYWNrOigpPT57Y29uc3R7dGFiTmF2aWdhdGlvbjpjZX09Yy5nZXRTZXR0aW5n''@;'; put 'put ''cygpO009ITAsYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpJiYhY2UmJih2PSExKSxjZXx8KEQ9ITApfSxwb3NpdGlvbjoiYmVmb3JlIn0sey4uLnJlLGNhbGxiYWNrOmNlPT57Y29uc3R7dGFiTmF2aWdhdGlvbjpiZSxhdXRvV3JhcFJvdzpFZX09Yy5nZXRTZXR0aW5ncygpO2lmKE09ITEsdj0h''@;'; put 'put ''MCwhYmV8fCFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fEVlJiZmLndyYXBwZWQmJmYuZmxpcHBlZHx8IUVlJiZmLndyYXBwZWQpcmV0dXJuIEVlJiZmLndyYXBwZWQmJmYuZmxpcHBlZCYmKGE9Y2Uuc2hpZnRLZXk/TVgoYyk6eFgoYykpLGZ1bmN0aW9uIFooKXtmLndyYXBwZWQ9ITEsZi5m''@;'; put 'put ''bGlwcGVkPSExLGMuZGVzZWxlY3RDZWxsKCksYy51bmxpc3RlbigpfSgpLCExO2NlLnByZXZlbnREZWZhdWx0KCl9LHBvc2l0aW9uOiJhZnRlciJ9XSl9KGYpLGYucnVuSG9va3MoImluaXQiKSx0aGlzLnJlbmRlcigpLEVlJiZudWxsPT09Zi5yb290RWxlbWVudC5vZmZzZXRQYXJlbnQmJkIy''@;'; put 'put ''ZShmLnJvb3RFbGVtZW50LCgpPT57Zi52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSxmLnJlbmRlcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0pLCJvYmplY3QiPT10eXBlb2YgRWUmJihmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsRWVbMF0sRWVb''@;'; put 'put ''MV0pLEVlPSExKSxmLnJ1bkhvb2tzKCJhZnRlckluaXQiKX0sdGhpcy5fY3JlYXRlQ2VsbENvb3Jkcz1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIGYudmlldy5fd3QuY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCl9LHRoaXMuX2NyZWF0ZUNlbGxSYW5nZT1mdW5jdGlvbih2dCxOdCxGdCl7cmV0dXJu''@;'; put 'put ''IGYudmlldy5fd3QuY3JlYXRlQ2VsbFJhbmdlKHZ0LE50LEZ0KX0sdGhpcy52YWxpZGF0ZUNlbGw9ZnVuY3Rpb24odnQsTnQsRnQsSG4pe2xldCB0cj1mLmdldENlbGxWYWxpZGF0b3IoTnQpO2Z1bmN0aW9uIGFyKEhyKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1sxXSYmIWFyZ3VtZW50c1sxXXx8ITA9PT1OdC5oaWRkZW4pcmV0dXJuIHZvaWQgRnQoSHIpO2NvbnN0IG9uPU50LnZpc3VhbENvbCx5bj1OdC52aXN1YWxSb3cscG49Zi5nZXRDZWxsKHluLG9uLCEwKTtpZihwbiYmIlRIIiE9PXBuLm5vZGVOYW1lKXtjb25zdCBwcj1mLnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoeW4pLCRuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChvbik7Zi52aWV3Ll93dC5nZXRTZXR0aW5nKCJjZWxsUmVuZGVyZXIiLHByLCRuLHBuKX1GdChIcil9ZzJlKHRyKSYmKHRyPWZ1bmN0''@;'; put 'put ''aW9uKEhyKXtyZXR1cm4gZnVuY3Rpb24ocXIsb24pe29uKEhyLnRlc3QocXIpKX19KHRyKSksbWwodHIpPyh2dD1mLnJ1bkhvb2tzKCJiZWZvcmVWYWxpZGF0ZSIsdnQsTnQudmlzdWFsUm93LE50LnByb3AsSG4pLGYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57dHIuY2FsbChOdCx2dCxIcj0+''@;'; put 'put ''e2YmJihIcj1mLnJ1bkhvb2tzKCJhZnRlclZhbGlkYXRlIixIcix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxIbiksTnQudmFsaWQ9SHIsYXIoSHIpLGYucnVuSG9va3MoInBvc3RBZnRlclZhbGlkYXRlIixIcix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxIbikpfSl9KSk6Zi5fcmVnaXN0ZXJJ''@;'; put 'put ''bW1lZGlhdGUoKCk9PntOdC52YWxpZD0hMCxhcihOdC52YWxpZCwhMSl9KX0sdGhpcy5zZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50LEZ0LEhuKXtjb25zdCB0cj1Ecih2dCxOdCxGdCksYXI9W107bGV0IHFyLG9uLHluLEhyPUhuO2Zvcihxcj0wLG9uPXRyLmxlbmd0aDtxcjxvbjtxcisr''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIHRyW3FyXSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgbnVtYmVyIG9yIGNoYW5nZXMgYXJyYXkgb2YgYXJyYXlzIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIiKTtpZigibnVtYmVyIiE9dHlwZW9mIHRyW3Fy''@;'; put 'put ''XVsxXSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgYW5kIGNvbHVtbiBudW1iZXIgYXMgaXRzIHBhcmFtZXRlcnMuIElmIHlvdSB3YW50IHRvIHVzZSBvYmplY3QgcHJvcGVydHkgbmFtZSwgdXNlIG1ldGhvZCBgc2V0RGF0YUF0Um93UHJvcGAi''@;'; put 'put ''KTt5bj10cltxcl1bMV0+PXRoaXMuY291bnRDb2xzKCk/dHJbcXJdWzFdOk0uY29sVG9Qcm9wKHRyW3FyXVsxXSksYXIucHVzaChbdHJbcXJdWzBdLHluLEQuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyh0cltxcl1bMF0pLHRyW3FyXVsxXSksdHJbcXJdWzJdXSl9IUhyJiYib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIHZ0JiYoSHI9TnQpO2NvbnN0IHBuPSRyKGFyLEhyKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdENlbGwiLHBuLEhyKSx6cihwbixIciwoKT0+e0puKHBuLEhyKX0pfSx0aGlzLnNldERhdGFBdFJvd1Byb3A9ZnVuY3Rpb24odnQsTnQsRnQsSG4pe2NvbnN0IHRyPURyKHZ0''@;'; put 'put ''LE50LEZ0KSxhcj1bXTtsZXQgcXIsb24sSHI9SG47Zm9yKHFyPTAsb249dHIubGVuZ3RoO3FyPG9uO3FyKyspYXIucHVzaChbdHJbcXJdWzBdLHRyW3FyXVsxXSxELmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3codHJbcXJdWzBdKSx0cltxcl1bMV0pLHRyW3FyXVsyXV0pOyFIciYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiB2dCYmKEhyPU50KTtjb25zdCB5bj0kcihhcixIbik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIix5bixIciksenIoeW4sSHIsKCk9PntKbih5bixIcil9KX0sdGhpcy5saXN0ZW49ZnVuY3Rpb24oKXtmJiYhZi5pc0xpc3RlbmluZygpJiYoQVguZm9y''@;'; put 'put ''RWFjaCh2dD0+e2YhPT12dCYmdnQudW5saXN0ZW4oKX0pLFRYPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKFRYPW51bGwsZi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xp''@;'; put 'put ''c3RlbmluZz1mdW5jdGlvbigpe3JldHVybiBUWD09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7bGV0IE50PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07cmUuY2xvc2VFZGl0b3IoYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksZi52aWV3LnJlbmRlcigpLE50JiZHci5pc1NlbGVjdGVkKCkmJnJlLnByZXBhcmVFZGl0b3IoKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih2dCxOdCxGdCxIbix0cixhcixIcil7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBGdHx8Im9iamVjdCIhPXR5cGVvZiBGdFswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFtZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgcXI9Im51bWJlciI9PXR5cGVvZiBIbj9mLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KEhuLHRyKTpudWxsO3JldHVybiBaLnBvcHVsYXRlRnJvbUFycmF5KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLEZ0LHFyLGFyLEhyKX0sdGhpcy5zcGxpY2VDb2w9ZnVuY3Rpb24odnQsTnQsRnQpe2Zvcih2YXIgSG49YXJndW1lbnRzLmxlbmd0aCx0cj1uZXcgQXJyYXkoSG4+Mz9Ibi0z''@;'; put 'put ''OjApLGFyPTM7YXI8SG47YXIrKyl0clthci0zXT1hcmd1bWVudHNbYXJdO3JldHVybiBNLnNwbGljZUNvbCh2dCxOdCxGdCwuLi50cil9LHRoaXMuc3BsaWNlUm93PWZ1bmN0aW9uKHZ0LE50LEZ0KXtmb3IodmFyIEhuPWFyZ3VtZW50cy5sZW5ndGgsdHI9bmV3IEFycmF5KEhuPjM/SG4tMzow''@;'; put 'put ''KSxhcj0zO2FyPEhuO2FyKyspdHJbYXItM109YXJndW1lbnRzW2FyXTtyZXR1cm4gTS5zcGxpY2VSb3codnQsTnQsRnQsLi4udHIpfSx0aGlzLmdldFNlbGVjdGVkPWZ1bmN0aW9uKCl7aWYoR3IuaXNTZWxlY3RlZCgpKXJldHVybiB5cyhHci5nZXRTZWxlY3RlZFJhbmdlKCksdnQ9PntsZXR7''@;'; put 'put ''ZnJvbTpOdCx0bzpGdH09dnQ7cmV0dXJuW050LnJvdyxOdC5jb2wsRnQucm93LEZ0LmNvbF19KX0sdGhpcy5nZXRTZWxlY3RlZExhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkKCk7bGV0IE50O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihOdD12dFt2dC5sZW5ndGgt''@;'; put 'put ''MV0pLE50fSx0aGlzLmdldFNlbGVjdGVkUmFuZ2U9ZnVuY3Rpb24oKXtpZihHci5pc1NlbGVjdGVkKCkpcmV0dXJuIEFycmF5LmZyb20oR3IuZ2V0U2VsZWN0ZWRSYW5nZSgpKX0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZSgpO2xldCBOdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoTnQ9dnRbdnQubGVuZ3RoLTFdKSxOdH0sdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHM9ZnVuY3Rpb24odnQpe2lmKCFHci5pc1NlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSly''@;'; put 'put ''ZXR1cm47Y29uc3QgTnQ9W107WW4oR3IuZ2V0U2VsZWN0ZWRSYW5nZSgpLEZ0PT57aWYoRnQuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm47Y29uc3QgSG49RnQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx0cj1GdC5nZXRCb3R0b21FbmRDb3JuZXIoKTtHYShIbi5yb3csdHIucm93LGFyPT57R2EoSG4u''@;'; put 'put ''Y29sLHRyLmNvbCxIcj0+e3RoaXMuZ2V0Q2VsbE1ldGEoYXIsSHIpLnJlYWRPbmx5fHxOdC5wdXNoKFthcixIcixudWxsXSl9KX0pfSksTnQubGVuZ3RoPjAmJnRoaXMuc2V0RGF0YUF0Q2VsbChOdCx2dCl9LHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''ZW5kZXJTdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZFJlbmRlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcis9MX0sdGhpcy5yZXN1bWVSZW5kZXI9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXItMTt0aGlzLnJlbmRl''@;'; put 'put ''clN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgodnQsMCksIXRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKSYmdnQ9PT10aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXImJmYudmlldy5yZW5kZXIoKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLmZvcmNlRnVsbFJlbmRl''@;'; put 'put ''cj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fGYudmlldy5yZW5kZXIoKSl9LHRoaXMuYmF0Y2hSZW5kZXI9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpO2NvbnN0IE50PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lUmVuZGVyKCksTnR9LHRoaXMuaXNFeGVjdXRpb25TdXNw''@;'; put 'put ''ZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZEV4ZWN1dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25z''@;'; put 'put ''KCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpfSx0aGlzLnJlc3VtZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IE50PXRoaXMuZXhlY3V0aW9uU3Vz''@;'; put 'put ''cGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChOdCwwKSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmTnQ9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXJ8fHZ0KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1l''@;'; put 'put ''T3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhl''@;'; put 'put ''Y3V0aW9uKCk7Y29uc3QgRnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oTnQpLEZ0fSx0aGlzLmJhdGNoPWZ1bmN0aW9uKHZ0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKSx0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBOdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1''@;'; put 'put ''dGlvbigpLHRoaXMucmVzdW1lUmVuZGVyKCksTnR9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtpZighZi52aWV3KXJldHVybjtjb25zdCB2dD1mLnZpZXcse3dpZHRoOk50LGhlaWdodDpGdH09dnQuZ2V0TGFzdFNpemUoKSx7d2lkdGg6SG4saGVpZ2h0OnRyfT1mLnJvb3RF''@;'; put 'put ''bGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGFyPUhuIT09TnR8fHRyIT09RnQ7ITEhPT1mLnJ1bkhvb2tzKCJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOk50LGhlaWdodDpGdH0se3dpZHRoOkhuLGhlaWdodDp0cn0sYXIpJiYoKGFyfHx2dC5fd3Qud3RPdmVybGF5cy5z''@;'; put 'put ''Y3JvbGxhYmxlRWxlbWVudD09PWYucm9vdFdpbmRvdykmJih2dC5zZXRMYXN0U2l6ZShIbix0ciksZi5yZW5kZXIoKSx2dC5hZGp1c3RFbGVtZW50c1NpemUoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOk50LGhlaWdodDpGdH0se3dpZHRoOkhuLGhlaWdo''@;'; put 'put ''dDp0cn0sYXIpKX0sdGhpcy51cGRhdGVEYXRhPWZ1bmN0aW9uKHZ0LE50KXtocGUodnQsRnQ9PntNPUZ0fSxGdD0+e009RnQsZi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxmLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRo''@;'; put 'put ''aXMuY291bnRTb3VyY2VSb3dzKCkpLFouYWRqdXN0Um93c0FuZENvbHMoKSxHci5yZWZyZXNoKCl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6TSxkYXRhU291cmNlOkQsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpOdCxtZXRhTWFuYWdlcjpwdCxmaXJzdFJ1bjpFZX0pfSx0''@;'; put 'put ''aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHZ0LE50KXtocGUodnQsRnQ9PntNPUZ0fSwoKT0+e3B0LmNsZWFyQ2VsbHNDYWNoZSgpLGYuaW5pdEluZGV4TWFwcGVycygpLFouYWRqdXN0Um93c0FuZENvbHMoKSxHci5yZWZyZXNoKCksRWUmJihFZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0''@;'; put 'put ''YW5jZTpmLGRhdGFNYXA6TSxkYXRhU291cmNlOkQsaW50ZXJuYWxTb3VyY2U6ImxvYWREYXRhIixzb3VyY2U6TnQsbWV0YU1hbmFnZXI6cHQsZmlyc3RSdW46RWV9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCB2dD1kdC5jb2x1bW5zO2xldCBOdD0wO2lm''@;'; put 'put ''KEFycmF5LmlzQXJyYXkodnQpKU50PXZ0Lmxlbmd0aDtlbHNlIGlmKG1sKHZ0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29uc3QgRnQ9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEhuPTA7SG48RnQ7SG4rPTEpdnQoSG4pJiYoTnQrPTEpfWVsc2UoIm9iamVjdCI9PT1mLmRh''@;'; put 'put ''dGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihOdD1NLmNvbFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihQYShkdC5kYXRhU2NoZW1hKSl7Y29uc3QgRnQ9TS5nZXRTY2hlbWEoKTtOdD1BcnJheS5pc0FycmF5KEZ0KT9GdC5sZW5ndGg6Qk8oRnQpfWVsc2UgTnQ9dGhpcy5j''@;'; put 'put ''b3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gTnR9LHRoaXMuaW5pdEluZGV4TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMu''@;'; put 'put ''Y291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24odnQsTnQsRnQsSG4pe3JldHVybiB5Yyh2dCk/TS5nZXRBbGwoKTpNLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoRnQsSG4pLE0uREVTVElOQVRJT05fUkVOREVS''@;'; put 'put ''RVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbih2dCxOdCxGdCxIbil7cmV0dXJuIE0uZ2V0Q29weWFibGVUZXh0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoRnQsSG4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24odnQsTnQp''@;'; put 'put ''e3JldHVybiBNLmdldENvcHlhYmxlKHZ0LE0uY29sVG9Qcm9wKE50KSl9LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIE0uZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IEZ0PShFZT9mLmxvYWREYXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgdHIsYXIsSG49ITE7aWYoUGEodnQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8g''@;'; put 'put ''eW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7aWYoUGEodnQuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYo''@;'; put 'put ''UGEodnQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IodHIgaW4gdnQubGFuZ3VhZ2UmJmZ1bmN0aW9uIEduKHZ0KXtjb25zdCBOdD1PM2UodnQpO2ZYKE50KT8oZi5y''@;'; put 'put ''dW5Ib29rcygiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLE50KSxKdC5sYW5ndWFnZT1OdCxmLnJ1bkhvb2tzKCJhZnRlckxhbmd1YWdlQ2hhbmdlIixOdCkpOlAzZSh2dCl9KHZ0Lmxhbmd1YWdlKSx2dClpZigiZGF0YSIhPT10ciYmImxhbmd1YWdlIiE9PXRyKWlmKCJjbGFzc05hbWUiPT09dHIp''@;'; put 'put ''YWkoImNsYXNzTmFtZSIsdnQuY2xhc3NOYW1lKTtlbHNlIGlmKCJ0YWJsZUNsYXNzTmFtZSI9PT10ciYmZi50YWJsZSlhaSgidGFibGVDbGFzc05hbWUiLHZ0LnRhYmxlQ2xhc3NOYW1lKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKTtlbHNlIGlm''@;'; put 'put ''KFNhLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZCh0cil8fFNhLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZCh0cikpe2NvbnN0IHBuPXZ0W3RyXTttbChwbik/KFNhLmdldFNpbmdsZXRvbigpLmFkZEFzRml4ZWQodHIscG4sZiksZHRbdHJdPXBuKTpBcnJheS5pc0FycmF5KHBuKSYm''@;'; put 'put ''KFNhLmdldFNpbmdsZXRvbigpLmFkZCh0cixwbixmKSxkdFt0cl09cG4pfWVsc2UhTnQmJkV1KHZ0LHRyKSYmKEp0W3RyXT12dFt0cl0pO3ZvaWQgMD09PXZ0LmRhdGEmJnZvaWQgMD09PWR0LmRhdGE/RnQobnVsbCwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5kYXRhP0Z0KHZ0LmRh''@;'; put 'put ''dGEsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuY29sdW1ucyYmKE0uY3JlYXRlTWFwKCksZi5pbml0SW5kZXhNYXBwZXJzKCkpO2NvbnN0IEhyPWYuY291bnRDb2xzKCkscXI9ZHQuY29sdW1ucztpZihxciYmbWwocXIpJiYoSG49ITApLCh2b2lkIDAhPT12dC5jZWxsfHx2b2lkIDAh''@;'; put 'put ''PT12dC5jZWxsc3x8dm9pZCAwIT09dnQuY29sdW1ucykmJnB0LmNsZWFyQ2FjaGUoKSxIcj4wKWZvcih0cj0wLGFyPTA7dHI8SHI7dHIrKyl7aWYocXIpe2NvbnN0IHBuPUhuP3FyKHRyKTpxclthcl07cG4mJnB0LnVwZGF0ZUNvbHVtbk1ldGEoYXIscG4pfWFyKz0xfVBhKHZ0LmNlbGwpJiZY''@;'; put 'put ''byh2dC5jZWxsLHBuPT57Zi5zZXRDZWxsTWV0YU9iamVjdChwbi5yb3cscG4uY29sLHBuKX0pLGYucnVuSG9va3MoImFmdGVyQ2VsbE1ldGFSZXNldCIpO2xldCBvbj1mLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodDsiIiE9PW9uJiYob249cGFyc2VJbnQoZi5yb290RWxlbWVudC5zdHlsZS5o''@;'; put 'put ''ZWlnaHQsMTApKTtsZXQgeW49dnQuaGVpZ2h0O2lmKG1sKHluKSYmKHluPXluKCkpLE50JiZmLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgic3R5bGUiKSYmZi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIixmLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgi''@;'; put 'put ''c3R5bGUiKSksbnVsbD09PXluKXtjb25zdCBwbj1mLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiKTtwbiYmKHBuLmluZGV4T2YoImhlaWdodCIpPi0xfHxwbi5pbmRleE9mKCJvdmVyZmxvdyIpPi0xKT9mLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5''@;'; put 'put ''bGUiLHBuKTooZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9IiIsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iIil9ZWxzZSB2b2lkIDAhPT15biYmKGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PWlzTmFOKHluKT9gJHt5bn1gOmAke3lufXB4YCxmLnJvb3RFbGVtZW50LnN0eWxl''@;'; put 'put ''Lm92ZXJmbG93PSJoaWRkZW4iKTtpZih0eXBlb2YgdnQud2lkdGg8InUiKXtsZXQgcG49dnQud2lkdGg7bWwocG4pJiYocG49cG4oKSksZi5yb290RWxlbWVudC5zdHlsZS53aWR0aD1pc05hTihwbik/YCR7cG59YDpgJHtwbn1weGB9aWYoIU50KXtpZihmLnZpZXcpe2Yudmlldy5fd3Qud3RW''@;'; put 'put ''aWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKSxmLnZpZXcuX3d0LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCk7Y29uc3QgcG49Zi5nZXRDdXJyZW50VGhlbWVOYW1lKCkscHI9RXUodnQsInRoZW1lTmFtZSIpO3BuJiZwciYmcG4hPT12dC50aGVtZU5h''@;'; put 'put ''bWUmJihmLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLnJlbW92ZUNsYXNzTmFtZXMoKSxmLnZpZXcucmVtb3ZlQ2xhc3NOYW1lRnJvbUxpY2Vuc2VFbGVtZW50KHBuKSk7Y29uc3QgJG49cHImJnZ0LnRoZW1lTmFtZXx8d3BlKGYucm9vdEVsZW1lbnQpO2YudXNlVGhlbWUoJG4pLGYudmlldy5h''@;'; put 'put ''ZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGYuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKX1mLnJ1bkhvb2tzKCJhZnRlclVwZGF0ZVNldHRpbmdzIix2dCl9Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIUVlJiYoZi5yZW5kZXIoKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0''@;'; put 'put ''RWxlbWVudHNTaXplKCkpLCFOdCYmZi52aWV3JiYoIiI9PT1vbnx8IiI9PT15bnx8dm9pZCAwPT09eW4pJiZvbiE9PXluJiZmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9Zi5nZXRT''@;'; put 'put ''ZWxlY3RlZExhc3QoKTtpZihkdC5nZXRWYWx1ZSl7aWYobWwoZHQuZ2V0VmFsdWUpKXJldHVybiBkdC5nZXRWYWx1ZS5jYWxsKGYpO2lmKHZ0KXJldHVybiBmLmdldERhdGEoKVt2dFswXVswXV1bZHQuZ2V0VmFsdWVdfWVsc2UgaWYodnQpcmV0dXJuIGYuZ2V0RGF0YUF0Q2VsbCh2dFswXSx2''@;'; put 'put ''dFsxXSl9LHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZHR9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdEFsbCgpLHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzKCl9LHRoaXMuYWx0ZXI9ZnVuY3Rpb24odnQsTnQsRnQsSG4sdHIpe1ouYWx0ZXIodnQsTnQsRnQs''@;'; put 'put ''SG4sdHIpfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQsTnQpe2xldCBGdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLEhuPU50LHRyPXZ0O2lmKE50Pj0wKXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9Q''@;'; put 'put ''aHlzaWNhbENvbHVtbihOdCkpKXJldHVybiBudWxsO0huPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChOdCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51''@;'; put 'put ''bGw7dHI9dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PXRyfHxudWxsPT09SG58fHZvaWQgMD09PXRyfHx2b2lkIDA9PT1Ibj9udWxsOmYudmlldy5nZXRDZWxsQXRDb29yZHMoZi5fY3JlYXRlQ2VsbENvb3Jkcyh0cixI''@;'; put 'put ''biksRnQpfSx0aGlzLmdldENvb3Jkcz1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldENvb3Jkcyh2dCk7aWYobnVsbD09PU50KXJldHVybiBudWxsO2NvbnN0e3JvdzpGdCxjb2w6SG59PU50O2xldCB0cj1GdCxhcj1IbjtyZXR1cm4gRnQ+PTAmJih0cj10''@;'; put 'put ''aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRnQpKSxIbj49MCYmKGFyPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIbikpLGYuX2NyZWF0ZUNlbGxDb29yZHModHIsYXIpfSx0aGlzLmNvbFRvUHJvcD1m''@;'; put 'put ''dW5jdGlvbih2dCl7cmV0dXJuIE0uY29sVG9Qcm9wKHZ0KX0sdGhpcy5wcm9wVG9Db2w9ZnVuY3Rpb24odnQpe3JldHVybiBNLnByb3BUb0NvbCh2dCl9LHRoaXMudG9WaXN1YWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodnQpLHRoaXMu''@;'; put 'put ''dG9WaXN1YWxDb2x1bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsQ29s''@;'; put 'put ''dW1uPXZ0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLmdldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBNLmdldCh2dCxNLmNvbFRvUHJvcChOdCkpfSx0aGlzLmdldERhdGFBdFJvd1Byb3A9ZnVuY3Rpb24odnQs''@;'; put 'put ''TnQpe3JldHVybiBNLmdldCh2dCxOdCl9LHRoaXMuZ2V0RGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD1bXSxGdD1NLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCx2dCksZi5fY3JlYXRlQ2VsbENvb3JkcyhkdC5kYXRhLmxlbmd0aC0xLHZ0KSxNLkRFU1RJTkFUSU9OX1JF''@;'; put 'put ''TkRFUkVSKTtmb3IobGV0IEhuPTA7SG48RnQubGVuZ3RoO0huKz0xKWZvcihsZXQgdHI9MDt0cjxGdFtIbl0ubGVuZ3RoO3RyKz0xKU50LnB1c2goRnRbSG5dW3RyXSk7cmV0dXJuIE50fSx0aGlzLmdldERhdGFBdFByb3A9ZnVuY3Rpb24odnQpe2NvbnN0IE50PVtdLEZ0PU0uZ2V0UmFuZ2Uo''@;'; put 'put ''Zi5fY3JlYXRlQ2VsbENvb3JkcygwLE0ucHJvcFRvQ29sKHZ0KSksZi5fY3JlYXRlQ2VsbENvb3JkcyhkdC5kYXRhLmxlbmd0aC0xLE0ucHJvcFRvQ29sKHZ0KSksTS5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBIbj0wO0huPEZ0Lmxlbmd0aDtIbis9MSlmb3IobGV0IHRyPTA7dHI8''@;'; put 'put ''RnRbSG5dLmxlbmd0aDt0cis9MSlOdC5wdXNoKEZ0W0huXVt0cl0pO3JldHVybiBOdH0sdGhpcy5nZXRTb3VyY2VEYXRhPWZ1bmN0aW9uKHZ0LE50LEZ0LEhuKXtsZXQgdHI7cmV0dXJuIHRyPXZvaWQgMD09PXZ0P0QuZ2V0RGF0YSgpOkQuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEZ0LEhuKSksdHJ9LHRoaXMuZ2V0U291cmNlRGF0YUFycmF5PWZ1bmN0aW9uKHZ0LE50LEZ0LEhuKXtsZXQgdHI7cmV0dXJuIHRyPXZvaWQgMD09PXZ0P0QuZ2V0RGF0YSghMCk6RC5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQs''@;'; put 'put ''TnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoRnQsSG4pLCEwKSx0cn0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBELmdldEF0Q29sdW1uKHZ0KX0sdGhpcy5zZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50LEZ0LEhuKXtjb25zdCB0cj1Ecih2dCxO''@;'; put 'put ''dCxGdCksYXI9dGhpcy5oYXNIb29rKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiKSxIcj1bXTthciYmWW4odHIsb249PntsZXRbeW4scG4scHJdPW9uO0hyLnB1c2goW3luLHBuLEQuZ2V0QXRDZWxsKHluLHBuKSxwcl0pfSksWW4odHIsb249PntsZXRbeW4scG4scHJdPW9uO0Quc2V0QXRD''@;'; put 'put ''ZWxsKHluLHBuLHByKX0pLGFyJiZ0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLEhyLEhuKSx0aGlzLnJlbmRlcigpO2NvbnN0IHFyPWYuZ2V0QWN0aXZlRWRpdG9yKCk7cXImJlBhKHFyLnJlZnJlc2hWYWx1ZSkmJnFyLnJlZnJlc2hWYWx1ZSgpfSx0aGlzLmdldFNv''@;'; put 'put ''dXJjZURhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIEQuZ2V0QXRSb3codnQpfSx0aGlzLmdldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBELmdldEF0Q2VsbCh2dCxOdCl9LHRoaXMuZ2V0RGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5nZXRSYW5n''@;'; put 'put ''ZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LDApLGYuX2NyZWF0ZUNlbGxDb29yZHModnQsdGhpcy5jb3VudENvbHMoKS0xKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKVswXXx8W119LHRoaXMuZ2V0RGF0YVR5cGU9ZnVuY3Rpb24odnQsTnQsRnQsSG4pe2NvbnN0IHRyPXZvaWQgMD09PXZ0P1sw''@;'; put 'put ''LDAsdGhpcy5jb3VudFJvd3MoKSx0aGlzLmNvdW50Q29scygpXTpbdnQsTnQsRnQsSG5dLFthcixIcl09dHI7bGV0WywscXIsb25dPXRyLHluPW51bGwscG49bnVsbDt2b2lkIDA9PT1xciYmKHFyPWFyKSx2b2lkIDA9PT1vbiYmKG9uPUhyKTtsZXQgcHI9Im1peGVkIjtyZXR1cm4gR2EoTWF0''@;'; put 'put ''aC5tYXgoTWF0aC5taW4oYXIscXIpLDApLE1hdGgubWF4KGFyLHFyKSwkbj0+e2xldCBkcj0hMDtyZXR1cm4gR2EoTWF0aC5tYXgoTWF0aC5taW4oSHIsb24pLDApLE1hdGgubWF4KEhyLG9uKSxVcj0+KHBuPXRoaXMuZ2V0Q2VsbE1ldGEoJG4sVXIpLnR5cGUseW4/ZHI9eW49PT1wbjp5bj1w''@;'; put 'put ''bixkcikpLHByPWRyP3BuOiJtaXhlZCIsZHJ9KSxwcn0sdGhpcy5yZW1vdmVDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCxGdCl7Y29uc3RbSG4sdHJdPVt0aGlzLnRvUGh5c2ljYWxSb3codnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbihOdCldO2xldCBhcj1wdC5nZXRDZWxsTWV0YUtleVZhbHVl''@;'; put 'put ''KEhuLHRyLEZ0KTshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxNZXRhIix2dCxOdCxGdCxhcikmJihwdC5yZW1vdmVDZWxsTWV0YShIbix0cixGdCksZi5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsdnQsTnQsRnQsYXIpKSxhcj1udWxsfSx0aGlzLnNwbGljZUNlbGxz''@;'; put 'put ''TWV0YT1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2Zvcih2YXIgRnQ9YXJndW1lbnRzLmxlbmd0aCxIbj1uZXcgQXJyYXkoRnQ+Mj9GdC0yOjApLHRyPTI7dHI8RnQ7dHIrKylIblt0ci0yXT1hcmd1''@;'; put 'put ''bWVudHNbdHJdO2lmKEhuLmxlbmd0aD4wJiYhQXJyYXkuaXNBcnJheShIblswXSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgM3JkIGFyZ3VtZW50IChjZWxsTWV0YVJvd3MpIGhhcyB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgY2VsbCBtZXRhIG9iamVjdHMgYXJyYXkuIik7TnQ+MCYmcHQu''@;'; put 'put ''cmVtb3ZlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCksTnQpLEhuLmxlbmd0aD4wJiZZbihIbi5yZXZlcnNlKCksYXI9PntwdC5jcmVhdGVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSksWW4oYXIsKEhyLHFyKT0+dGhpcy5zZXRDZWxsTWV0YU9iamVjdCh2dCxxcixIcikpfSksZi5yZW5k''@;'; put 'put ''ZXIoKX0sdGhpcy5zZXRDZWxsTWV0YU9iamVjdD1mdW5jdGlvbih2dCxOdCxGdCl7Im9iamVjdCI9PXR5cGVvZiBGdCYmWG8oRnQsKEhuLHRyKT0+e3RoaXMuc2V0Q2VsbE1ldGEodnQsTnQsdHIsSG4pfSl9LHRoaXMuc2V0Q2VsbE1ldGE9ZnVuY3Rpb24odnQsTnQsRnQsSG4pe2lmKCExPT09''@;'; put 'put ''Zi5ydW5Ib29rcygiYmVmb3JlU2V0Q2VsbE1ldGEiLHZ0LE50LEZ0LEhuKSlyZXR1cm47bGV0IGFyPXZ0LEhyPU50O3Z0PHRoaXMuY291bnRSb3dzKCkmJihhcj10aGlzLnRvUGh5c2ljYWxSb3codnQpKSxOdDx0aGlzLmNvdW50Q29scygpJiYoSHI9dGhpcy50b1BoeXNpY2FsQ29sdW1uKE50''@;'; put 'put ''KSkscHQuc2V0Q2VsbE1ldGEoYXIsSHIsRnQsSG4pLGYucnVuSG9va3MoImFmdGVyU2V0Q2VsbE1ldGEiLHZ0LE50LEZ0LEhuKX0sdGhpcy5nZXRDZWxsc01ldGE9ZnVuY3Rpb24oKXtyZXR1cm4gcHQuZ2V0Q2VsbHNNZXRhKCl9LHRoaXMuZ2V0Q2VsbE1ldGE9ZnVuY3Rpb24odnQsTnQpe2xl''@;'; put 'put ''dCBGdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e3NraXBNZXRhRXh0ZW5zaW9uOiExfSxIbj10aGlzLnRvUGh5c2ljYWxSb3codnQpLHRyPXRoaXMudG9QaHlzaWNhbENvbHVtbihOdCk7cmV0dXJuIG51bGw9PT1IbiYmKEhuPXZ0KSxu''@;'; put 'put ''dWxsPT09dHImJih0cj1OdCkscHQuZ2V0Q2VsbE1ldGEoSG4sdHIse3Zpc3VhbFJvdzp2dCx2aXN1YWxDb2x1bW46TnQsLi4uRnR9KX0sdGhpcy5nZXRDb2x1bW5NZXRhPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcHQuZ2V0Q29sdW1uTWV0YSh0aGlzLnRvUGh5c2ljYWxDb2x1bW4odnQpKX0sdGhp''@;'; put 'put ''cy5nZXRDZWxsTWV0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcHQuZ2V0Q2VsbHNNZXRhQXRSb3codnQpfSx0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZD1mdW5jdGlvbigpe3JldHVybiEoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHxkdC5jb2x1bW5zKX0sdGhpcy5nZXRDZWxs''@;'; put 'put ''UmVuZGVyZXI9ZnVuY3Rpb24odnQsTnQpe2NvbnN0IEZ0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxOdCkucmVuZGVyZXI6dnQucmVuZGVyZXI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGdD9RTyhGdCk6eWMoRnQpP1FPKCJ0ZXh0Iik6RnR9LHRoaXMuZ2V0Q2VsbEVk''@;'; put 'put ''aXRvcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgRnQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS5lZGl0b3I6dnQuZWRpdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgRnQ/V08oRnQpOnljKEZ0KT9XTygidGV4dCIpOkZ0fSx0aGlzLmdldENlbGxWYWxpZGF0b3I9''@;'; put 'put ''ZnVuY3Rpb24odnQsTnQpe2NvbnN0IEZ0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxOdCkudmFsaWRhdG9yOnZ0LnZhbGlkYXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEZ0P3RLKEZ0KTpGdH0sdGhpcy52YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0KXt0aGlzLl92''@;'; put 'put ''YWxpZGF0ZUNlbGxzKHZ0KX0sdGhpcy52YWxpZGF0ZVJvd3M9ZnVuY3Rpb24odnQsTnQpe2lmKCFBcnJheS5pc0FycmF5KHZ0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlUm93cyBwYXJhbWV0ZXIgYHJvd3NgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKE50LHZ0''@;'; put 'put ''KX0sdGhpcy52YWxpZGF0ZUNvbHVtbnM9ZnVuY3Rpb24odnQsTnQpe2lmKCFBcnJheS5pc0FycmF5KHZ0KSl0aHJvdyBuZXcgRXJyb3IoInZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11c3QgYmUgYW4gYXJyYXkiKTt0aGlzLl92YWxpZGF0ZUNlbGxzKE50LHZvaWQgMCx2''@;'; put 'put ''dCl9LHRoaXMuX3ZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQsTnQsRnQpe2NvbnN0IEhuPW5ldyBfaTt2dCYmKEhuLm9uUXVldWVFbXB0eT12dCk7bGV0IHRyPWYuY291bnRSb3dzKCktMTtmb3IoO3RyPj0wOyl7aWYodm9pZCAwIT09TnQmJi0xPT09TnQuaW5kZXhPZih0cikpe3RyLT0xO2Nv''@;'; put 'put ''bnRpbnVlfWxldCBhcj1mLmNvdW50Q29scygpLTE7Zm9yKDthcj49MDspdm9pZCAwPT09RnR8fC0xIT09RnQuaW5kZXhPZihhcik/KEhuLmFkZFZhbGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbChmLmdldERhdGFBdENlbGwodHIsYXIpLGYuZ2V0Q2VsbE1ldGEodHIsYXIpLEhyPT57''@;'; put 'put ''aWYoImJvb2xlYW4iIT10eXBlb2YgSHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTshMT09PUhyJiYoSG4udmFsaWQ9ITEpLEhuLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfSwidmFsaWRhdGVDZWxscyIpLGFyLT0xKTphci09''@;'; put 'put ''MTt0ci09MX1Ibi5jaGVja0lmUXVldWVJc0VtcHR5KCl9LHRoaXMuZ2V0Um93SGVhZGVyPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9ZHQucm93SGVhZGVycyxGdD12dDtyZXR1cm4gdm9pZCAwIT09RnQmJihGdD1mLnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWFkZXIiLEZ0KSksdm9pZCAwPT09RnQ/KE50''@;'; put 'put ''PVtdLEdhKGYuY291bnRSb3dzKCktMSxIbj0+e050LnB1c2goZi5nZXRSb3dIZWFkZXIoSG4pKX0pKTpBcnJheS5pc0FycmF5KE50KSYmdm9pZCAwIT09TnRbRnRdP050PU50W0Z0XTptbChOdCk/TnQ9TnQoRnQpOk50JiYic3RyaW5nIiE9dHlwZW9mIE50JiYibnVtYmVyIiE9dHlwZW9mIE50''@;'; put 'put ''JiYoTnQ9RnQrMSksTnR9LHRoaXMuaGFzUm93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiEhZHQucm93SGVhZGVyc30sdGhpcy5oYXNDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7aWYobnVsbCE9ZHQuY29sSGVhZGVycylyZXR1cm4hIWR0LmNvbEhlYWRlcnM7Zm9yKGxldCB2dD0wLE50PWYuY291''@;'; put 'put ''bnRDb2xzKCk7dnQ8TnQ7dnQrKylpZihmLmdldENvbEhlYWRlcih2dCkpcmV0dXJuITA7cmV0dXJuITF9LHRoaXMuZ2V0Q29sSGVhZGVyPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi0xO2NvbnN0IEZ0''@;'; put 'put ''PWYucnVuSG9va3MoIm1vZGlmeUNvbEhlYWRlciIsdnQpO2lmKHZvaWQgMD09PUZ0KXtjb25zdCBxcj1bXSxvbj1mLmNvdW50Q29scygpO2ZvcihsZXQgeW49MDt5bjxvbjt5bisrKXFyLnB1c2goZi5nZXRDb2xIZWFkZXIoeW4pKTtyZXR1cm4gcXJ9bGV0IEhuPWR0LmNvbEhlYWRlcnM7Y29u''@;'; put 'put ''c3QgYXI9Zi50b1BoeXNpY2FsQ29sdW1uKEZ0KSxIcj1mdW5jdGlvbihxcil7Y29uc3Qgb249W10seW49Zi5jb3VudENvbHMoKTtsZXQgcG49MDtmb3IoO3BuPHluO3BuKyspbWwoZHQuY29sdW1ucykmJmR0LmNvbHVtbnMocG4pJiZvbi5wdXNoKHBuKTtyZXR1cm4gb25bcXJdfShhcik7cmV0''@;'; put 'put ''dXJuITE9PT1kdC5jb2xIZWFkZXJzP0huPW51bGw6ZHQuY29sdW1ucyYmbWwoZHQuY29sdW1ucykmJmR0LmNvbHVtbnMoSHIpJiZkdC5jb2x1bW5zKEhyKS50aXRsZT9Ibj1kdC5jb2x1bW5zKEhyKS50aXRsZTpkdC5jb2x1bW5zJiZkdC5jb2x1bW5zW2FyXSYmZHQuY29sdW1uc1thcl0udGl0''@;'; put 'put ''bGU/SG49ZHQuY29sdW1uc1thcl0udGl0bGU6QXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSYmdm9pZCAwIT09ZHQuY29sSGVhZGVyc1thcl0/SG49ZHQuY29sSGVhZGVyc1thcl06bWwoZHQuY29sSGVhZGVycyk/SG49ZHQuY29sSGVhZGVycyhhcik6ZHQuY29sSGVhZGVycyYmInN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiBkdC5jb2xIZWFkZXJzJiYibnVtYmVyIiE9dHlwZW9mIGR0LmNvbEhlYWRlcnMmJihIbj1oUChGdCkpLEhuPWYucnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixIbix2dCxOdCksSG59LHRoaXMuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0''@;'; put 'put ''KXtsZXQgTnQ7aWYodnQ+PTAmJihOdD1mLmdldENlbGxNZXRhKDAsdnQpLndpZHRoKSwodm9pZCAwPT09TnR8fE50PT09ZHQud2lkdGgpJiYoTnQ9ZHQuY29sV2lkdGhzKSxudWxsIT1OdCl7c3dpdGNoKHR5cGVvZiBOdCl7Y2FzZSJvYmplY3QiOk50PU50W3Z0XTticmVhaztjYXNlImZ1bmN0''@;'; put 'put ''aW9uIjpOdD1OdCh2dCl9InN0cmluZyI9PXR5cGVvZiBOdCYmKE50PXBhcnNlSW50KE50LDEwKSl9cmV0dXJuIE50fSx0aGlzLmdldENvbFdpZHRoPWZ1bmN0aW9uKHZ0LE50KXtsZXQgRnQ9Zi5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3ModnQpO3JldHVybiBGdD1mLnJ1bkhvb2tzKCJtb2Rp''@;'; put 'put ''ZnlDb2xXaWR0aCIsRnQsdnQsTnQpLHZvaWQgMD09PUZ0JiYoRnQ9X18pLEZ0fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2NvbnN0IE50PXRoaXMudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IEZ0PWR0LnJvd0hlaWdodHM7aWYobnVsbCE9RnQp''@;'; put 'put ''e3N3aXRjaCh0eXBlb2YgRnQpe2Nhc2Uib2JqZWN0IjpGdD1GdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6RnQ9RnQodnQpfSJzdHJpbmciPT10eXBlb2YgRnQmJihGdD1wYXJzZUludChGdCwxMCkpfXJldHVybiBudWxsIT1GdCYmRnQ8TnQ/TnQ6RnR9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1''@;'; put 'put ''bmN0aW9uKHZ0LE50KXtsZXQgRnQ9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gRnQ9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0IixGdCx2dCxOdCksRnR9LHRoaXMuY291bnRTb3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEQuY291bnRSb3dzKCl9LHRoaXMu''@;'; put 'put ''Y291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIEQuY291bnRGaXJzdFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gTS5nZXRMZW5ndGgoKX0sdGhpcy5jb3VudENvbHM9ZnVuY3Rpb24oKXtjb25zdCB2dD1kdC5tYXhDb2xzLE50PXRoaXMuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4odnQsTnQpfSx0aGlzLmNvdW50UmVuZGVyZWRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6''@;'; put 'put ''LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRSZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9m''@;'; put 'put ''LnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudFJv''@;'; put 'put ''d0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldFJvd0hlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50Q29sSGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRFbXB0eVJvd3M9ZnVuY3Rpb24oKXts''@;'; put 'put ''ZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxOdD0wO3JldHVybiBLJChmLmNvdW50Um93cygpLTEsRnQ9PntpZihmLmlzRW1wdHlSb3coRnQpKU50Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE50fSx0aGlzLmNvdW50''@;'; put 'put ''RW1wdHlDb2xzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sTnQ9MDtyZXR1cm4gSyQoZi5jb3VudENvbHMoKS0xLEZ0PT57aWYoZi5pc0VtcHR5Q29sKEZ0KSlOdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0''@;'; put 'put ''dXJuITF9KSxOdH0sdGhpcy5pc0VtcHR5Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gZHQuaXNFbXB0eVJvdy5jYWxsKGYsdnQpfSx0aGlzLmlzRW1wdHlDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBkdC5pc0VtcHR5Q29sLmNhbGwoZix2dCl9LHRoaXMuc2VsZWN0Q2VsbD1mdW5jdGlvbih2dCxO''@;'; put 'put ''dCxGdCxIbil7bGV0IHRyPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sYXI9IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtyZXR1cm4heWModnQpJiYheWMoTnQpJiZ0aGlz''@;'; put 'put ''LnNlbGVjdENlbGxzKFtbdnQsTnQsRnQsSG5dXSx0cixhcil9LHRoaXMuc2VsZWN0Q2VsbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0sRnQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTshMT09PSghKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKSYmYmUuc3VzcGVuZCgpO2NvbnN0IEhuPUdyLnNlbGVjdENlbGxzKHZ0KTtyZXR1cm4gSG4mJkZ0JiZmLmxpc3RlbigpLGJl''@;'; put 'put ''LnJlc3VtZSgpLEhufSx0aGlzLnNlbGVjdENvbHVtbnM9ZnVuY3Rpb24odnQpe3JldHVybiBHci5zZWxlY3RDb2x1bW5zKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZv''@;'; put 'put ''aWQgMCl9LHRoaXMuc2VsZWN0Um93cz1mdW5jdGlvbih2dCl7cmV0dXJuIEdyLnNlbGVjdFJvd3ModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sdGhpcy5k''@;'; put 'put ''ZXNlbGVjdENlbGw9ZnVuY3Rpb24oKXtHci5kZXNlbGVjdCgpfSx0aGlzLnNlbGVjdEFsbD1mdW5jdGlvbigpe2xldCB2dD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCxGdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtiZS5za2lwTmV4dFNjcm9sbEN5Y2xlKCksR3Iuc2VsZWN0QWxsKHZ0LE50LEZ0KX07Y29uc3Qgd2k9KHZ0LE50KT0+dnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE50''@;'; put 'put ''LDEsITApO3RoaXMuc2Nyb2xsVmlld3BvcnRUbz1mdW5jdGlvbih2dCxOdCl7dmFyIEZ0OyJudW1iZXIiPT10eXBlb2YgdnQmJih2dD17cm93OmFyZ3VtZW50c1swXSxjb2w6YXJndW1lbnRzWzFdLHZlcnRpY2FsU25hcDphcmd1bWVudHNbMl0/ImJvdHRvbSI6InRvcCIsaG9yaXpvbnRhbFNu''@;'; put 'put ''YXA6YXJndW1lbnRzWzNdPyJlbmQiOiJzdGFydCIsY29uc2lkZXJIaWRkZW5JbmRleGVzOm51bGw9PT0oRnQ9YXJndW1lbnRzWzRdKXx8dm9pZCAwPT09RnR8fEZ0fSk7Y29uc3R7cm93OkhuLGNvbDp0cixjb25zaWRlckhpZGRlbkluZGV4ZXM6YXJ9PXZ0Pz97fTtsZXQgSHI9SG4scXI9dHI7''@;'; put 'put ''aWYobWwoTnQpJiZ0aGlzLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsTnQpLHZvaWQgMD09PWFyfHxhcil7Y29uc3QgcHI9TnVtYmVyLmlzSW50ZWdlcihIbikmJkhuPj0wLCRuPU51bWJlci5pc0ludGVnZXIodHIpJiZ0cj49MCxkcj1wcj93aSh0aGlzLnJvd0luZGV4TWFwcGVyLEhuKTp2''@;'; put 'put ''b2lkIDAsVXI9JG4/d2kodGhpcy5jb2x1bW5JbmRleE1hcHBlcix0cik6dm9pZCAwO2lmKG51bGw9PT1kcnx8bnVsbD09PVVyKXJldHVybiExO0hyPXByP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkcik6SG4scXI9JG4/Zi5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFVyKTp0cn1jb25zdCBvbj1OdW1iZXIuaXNJbnRlZ2VyKEhyKSx5bj1OdW1iZXIuaXNJbnRlZ2VyKHFyKTtsZXQgcG49ITE7cmV0dXJuIG9uJiZIcj49MCYmeW4mJnFyPj0wP3BuPWYudmlldy5zY3JvbGxWaWV3cG9ydChmLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKEhyLHFyKSx2dC5ob3Jpem9udGFsU25hcCx2dC52ZXJ0aWNhbFNuYXApOm9uJiZIcj49MCYmKHluJiZxcjwwfHwheW4pP3BuPWYudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoSHIsdnQudmVydGljYWxTbmFwKTp5biYmcXI+PTAmJihvbiYmSHI8MHx8IW9uKSYmKHBu''@;'; put 'put ''PWYudmlldy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShxcix2dC5ob3Jpem9udGFsU25hcCkpLG1sKE50KSYmKHBuP3RoaXMudmlldy5yZW5kZXIoKToodGhpcy5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsTnQpLHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrKCgpPT5OdCgpKSkpLHBufSx0''@;'; put 'put ''aGlzLnNjcm9sbFRvRm9jdXNlZENlbGw9ZnVuY3Rpb24odnQpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpcmV0dXJuITE7bWwodnQpJiZ0aGlzLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsdnQpO2NvbnN0e2hpZ2hsaWdodDpOdH09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpLEZ0PXRoaXMuc2Nyb2xsVmlld3BvcnRUbyhOdC50b09iamVjdCgpKTtyZXR1cm4gRnQ/dGhpcy52aWV3LnJlbmRlcigpOm1sKHZ0KSYmKHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHZ0KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+dnQoKSkpLEZ0fSx0aGlzLmRlc3Ry''@;'; put 'put ''b3k9ZnVuY3Rpb24oKXtpZihmLl9jbGVhclRpbWVvdXRzKCksZi5fY2xlYXJJbW1lZGlhdGVzKCksZi52aWV3JiZmLnZpZXcuZGVzdHJveSgpLEQmJkQuZGVzdHJveSgpLEQ9bnVsbCx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcigpLmRlc3Ryb3koKSxwdC5jbGVhckNhY2hlKCksQVguZGVsZXRl''@;'; put 'put ''KHRoaXMuZ3VpZCksY1AoZikpe2NvbnN0IHZ0PXRoaXMucm9vdERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTt2dCYmdnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2dCl9eHAoZi5yb290RWxlbWVudCksdi5kZXN0cm95KCkscmUmJnJlLmRlc3Ry''@;'; put 'put ''b3koKSxmLmJhdGNoRXhlY3V0aW9uKCgpPT57Zi5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyQWxsKCksZi5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyQWxsKCksdm4uZ2V0SXRlbXMoKS5mb3JFYWNoKHZ0PT57bGV0WyxOdF09dnQ7TnQuZGVzdHJveSgpfSksdm4uY2xlYXIoKSxmLnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckRlc3Ryb3kiKX0sITApLFNhLmdldFNpbmdsZXRvbigpLmRlc3Ryb3koZiksWG8oZiwodnQsTnQsRnQpPT57bWwodnQpP0Z0W050XT1mdW5jdGlvbiBlYSh2dCl7cmV0dXJuKCk9Pnt0aHJvdyBuZXcgRXJyb3IoYFRoZSAiJHt2dH0iIG1ldGhvZCBjYW5ub3QgYmUgY2Fs''@;'; put 'put ''bGVkIGJlY2F1c2UgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkYCl9fShOdCk6Imd1aWQiIT09TnQmJihGdFtOdF09bnVsbCl9KSxmLmlzRGVzdHJveWVkPSEwLE0mJk0uZGVzdHJveSgpLE09bnVsbCxaPW51bGwsR3I9bnVsbCxyZT1udWxsLGY9bnVsbH0s''@;'; put 'put ''dGhpcy5nZXRBY3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gcmUuZ2V0QWN0aXZlRWRpdG9yKCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFJlbmRl''@;'; put 'put ''cmVkVmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlz''@;'; put 'put ''LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3co''@;'; put 'put ''KX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1u''@;'; put 'put ''KCl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlW''@;'; put 'put ''aXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRG''@;'; put 'put ''aXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24odnQpe3JldHVybiB2bi5nZXRJ''@;'; put 'put ''dGVtKHAxKHZ0KSl9LHRoaXMuZ2V0UGx1Z2luTmFtZT1mdW5jdGlvbih2dCl7cmV0dXJuIHZ0PT09dGhpcy51bmRvUmVkbz90aGlzLnVuZG9SZWRvLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVk6dm4uZ2V0SWQodnQpfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHRoaXMu''@;'; put 'put ''YWRkSG9vaz1mdW5jdGlvbih2dCxOdCxGdCl7U2EuZ2V0U2luZ2xldG9uKCkuYWRkKHZ0LE50LGYsRnQpfSx0aGlzLmhhc0hvb2s9ZnVuY3Rpb24odnQpe3JldHVybiBTYS5nZXRTaW5nbGV0b24oKS5oYXModnQsZil8fFNhLmdldFNpbmdsZXRvbigpLmhhcyh2dCl9LHRoaXMuYWRkSG9va09u''@;'; put 'put ''Y2U9ZnVuY3Rpb24odnQsTnQsRnQpe1NhLmdldFNpbmdsZXRvbigpLm9uY2UodnQsTnQsZixGdCl9LHRoaXMucmVtb3ZlSG9vaz1mdW5jdGlvbih2dCxOdCl7U2EuZ2V0U2luZ2xldG9uKCkucmVtb3ZlKHZ0LE50LGYpfSx0aGlzLnJ1bkhvb2tzPWZ1bmN0aW9uKHZ0LE50LEZ0LEhuLHRyLGFy''@;'; put 'put ''LEhyKXtyZXR1cm4gU2EuZ2V0U2luZ2xldG9uKCkucnVuKGYsdnQsTnQsRnQsSG4sdHIsYXIsSHIpfSx0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2U9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBqM2UoZHQubGFuZ3VhZ2UsdnQsTnQpfSx0aGlzLnRvSFRNTD0oKT0+RyQodGhpcyksdGhpcy50b1Rh''@;'; put 'put ''YmxlRWxlbWVudD0oKT0+e2NvbnN0IHZ0PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB2dC5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLEckKHRoaXMpKSx2dC5maXJzdEVsZW1lbnRDaGlsZH0sdGhpcy50aW1lb3V0cz1bXSx0aGlzLnVzZVRo''@;'; put 'put ''ZW1lPXZ0PT57dGhpcy52aWV3LmdldFN0eWxlc0hhbmRsZXIoKS51c2VUaGVtZSh2dCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRUaGVtZSIsdnQsISFFZSl9LHRoaXMuZ2V0Q3VycmVudFRoZW1lTmFtZT0oKT0+dGhpcy52aWV3LmdldFN0eWxlc0hhbmRsZXIoKS5nZXRUaGVtZU5hbWUoKSx0''@;'; put 'put ''aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24odnQpe2xldCBGdD12dDsiZnVuY3Rpb24iPT10eXBlb2YgRnQmJihGdD1zZXRUaW1lb3V0KEZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKSksdGhpcy50aW1lb3V0cy5wdXNoKEZ0''@;'; put 'put ''KX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe1luKHRoaXMudGltZW91dHMsdnQ9PntjbGVhclRpbWVvdXQodnQpfSl9LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9yZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbih2dCl7dGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRl''@;'; put 'put ''KHZ0KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe1luKHRoaXMuaW1tZWRpYXRlcyx2dD0+e2NsZWFySW1tZWRpYXRlKHZ0KX0pfSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaz1mdW5jdGlvbih2dCl7dGhpcy5yb290V2luZG93LnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5p''@;'; put 'put ''c0Rlc3Ryb3llZHx8dnQoKX0pfSx0aGlzLl9nZXRFZGl0b3JNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHJlfTtjb25zdCBmYT12cnQoe2hhbmRsZUV2ZW50OigpPT5mLmlzTGlzdGVuaW5nKCksYmVmb3JlS2V5RG93bjp2dD0+dGhpcy5ydW5Ib29rcygiYmVmb3JlS2V5RG93biIsdnQpLGFm''@;'; put 'put ''dGVyS2V5RG93bjp2dD0+e3RoaXMuaXNEZXN0cm95ZWR8fGYucnVuSG9va3MoImFmdGVyRG9jdW1lbnRLZXlEb3duIix2dCl9LG93bmVyV2luZG93OnRoaXMucm9vdFdpbmRvd30pO3RoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIix2dD0+eyExPT09dnQuY3RybEtleSYmITE9''@;'; put 'put ''PT12dC5tZXRhS2V5JiZmYS5yZWxlYXNlUHJlc3NlZEtleXMoKX0pLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIGZhfSx0aGlzLmdldEZvY3VzTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBjZX0sZUsoKS5mb3JFYWNoKHZ0PT57Y29uc3QgTnQ9REUodnQpO3Zu''@;'; put 'put ''LmFkZEl0ZW0odnQsbmV3IE50KHRoaXMpKX0pLGZ1bmN0aW9uIG1pdChjKXtbZ2l0LHBpdF0uZm9yRWFjaChsPT5sKGMpKX0oZiksZmEuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSxTYS5nZXRTaW5nbGV0b24oKS5ydW4oZiwiY29uc3RydWN0Iil9ZnVuY3Rpb24gU3BlKGMsbCxhKXtj''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBNcGUoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFZQKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjKX1mdW5jdGlvbiB4cGUoYyl7Y29u''@;'; put 'put ''c3QgYT17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDAsdGV4dENvbnRlbnQ6Y2U9PmNlLnZhbHVlLC4uLmFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fX0sZD1jLmJvZHksaD1jLmNyZWF0''@;'; put 'put ''ZVRleHROb2RlKCIiKSxmPWMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCB2O2Z1bmN0aW9uIE0oKXt2YXIgY2UsYmU7aC50ZXh0Q29udGVudD1hLnRleHRDb250ZW50KHYpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLmZvbnRTaXplPVZQKHYpLmZvbnRTaXplLGYuc3R5''@;'; put 'put ''bGUuZm9udEZhbWlseT1WUCh2KS5mb250RmFtaWx5LGYuc3R5bGUud2hpdGVTcGFjZT0icHJlIixkLmFwcGVuZENoaWxkKGYpO2NvbnN0IEVlPXBhcnNlSW50KChudWxsPT09KGNlPVZQKHYpKXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlLnBhZGRpbmdJbmxpbmVTdGFydCl8fDAsMTApLEJlPXBh''@;'; put 'put ''cnNlSW50KChudWxsPT09KGJlPVZQKHYpKXx8dm9pZCAwPT09YmU/dm9pZCAwOmJlLnBhZGRpbmdJbmxpbmVFbmQpfHwwLDEwKSxxZT1mLmNsaWVudFdpZHRoK0VlK0JlKzE7ZC5yZW1vdmVDaGlsZChmKTtjb25zdCBydD12LnN0eWxlO3J0LmhlaWdodD1gJHthLm1pbkhlaWdodH1weGAscnQu''@;'; put 'put ''d2lkdGg9YS5taW5XaWR0aD5xZT9gJHthLm1pbldpZHRofXB4YDpxZT5hLm1heFdpZHRoP2Ake2EubWF4V2lkdGh9cHhgOmAke3FlfXB4YDtjb25zdCBwdD12LnNjcm9sbEhlaWdodD92LnNjcm9sbEhlaWdodC0xOjA7YS5taW5IZWlnaHQ+cHQ/cnQuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4''@;'; put 'put ''YDphLm1heEhlaWdodDxwdD8ocnQuaGVpZ2h0PWAke2EubWF4SGVpZ2h0fXB4YCxydC5vdmVyZmxvd1k9InZpc2libGUiKTpydC5oZWlnaHQ9YCR7cHR9cHhgfWZ1bmN0aW9uIEQoKXtjLmRlZmF1bHRWaWV3LnNldFRpbWVvdXQoTSwwKX1yZXR1cm57aW5pdDpmdW5jdGlvbiByZShjZSxiZSl7''@;'; put 'put ''bGV0IEVlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07dj1jZSxmdW5jdGlvbiBaKGNlKXtpZihjZSYmY2UubWluSGVpZ2h0KWlmKCJpbmhlcml0Ij09PWNlLm1pbkhlaWdodClhLm1pbkhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2Nv''@;'; put 'put ''bnN0IGJlPXBhcnNlSW50KGNlLm1pbkhlaWdodCwxMCk7aXNOYU4oYmUpfHwoYS5taW5IZWlnaHQ9YmUpfWlmKGNlJiZjZS5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT09Y2UubWF4SGVpZ2h0KWEubWF4SGVpZ2h0PXYuY2xpZW50SGVpZ2h0O2Vsc2V7Y29uc3QgYmU9cGFyc2VJbnQoY2UubWF4''@;'; put 'put ''SGVpZ2h0LDEwKTtpc05hTihiZSl8fChhLm1heEhlaWdodD1iZSl9aWYoY2UmJmNlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09PWNlLm1pbldpZHRoKWEubWluV2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1pbldpZHRoLDEwKTtpc05hTihiZSl8fChhLm1p''@;'; put 'put ''bldpZHRoPWJlKX1pZihjZSYmY2UubWF4V2lkdGgpaWYoImluaGVyaXQiPT09Y2UubWF4V2lkdGgpYS5tYXhXaWR0aD12LmNsaWVudFdpZHRoO2Vsc2V7Y29uc3QgYmU9cGFyc2VJbnQoY2UubWF4V2lkdGgsMTApO2lzTmFOKGJlKXx8KGEubWF4V2lkdGg9YmUpfWYuZmlyc3RDaGlsZHx8KGYu''@;'; put 'put ''Y2xhc3NOYW1lPSJhdXRvUmVzaXplIixmLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsZi5hcHBlbmRDaGlsZChoKSl9KGJlKSwiVEVYVEFSRUEiPT09di5ub2RlTmFtZSYmKHYuc3R5bGUucmVzaXplPSJub25lIix2LnN0eWxlLmhlaWdodD1gJHthLm1pbkhlaWdodH1weGAsdi5zdHls''@;'; put 'put ''ZS5taW5XaWR0aD1gJHthLm1pbldpZHRofXB4YCx2LnN0eWxlLm1heFdpZHRoPWAke2EubWF4V2lkdGh9cHhgLHYuc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSxFZSYmKFNwZSh2LCJpbnB1dCIsTSksU3BlKHYsImtleWRvd24iLEQpKSxNKCl9LHJlc2l6ZTpNLHVuT2JzZXJ2ZSgpe01wZSh2''@;'; put 'put ''LCJpbnB1dCIsTSksTXBlKHYsImtleWRvd24iLEQpfX19ZnVuY3Rpb24gRXBlKGMsbCl7Y29uc3QgYT13JChsKSxkPWwudmFsdWUuc3BsaXQoIlxuIik7bGV0IGg9YSxmPTA7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2KyspezAhPT12JiYoZis9ZFt2LTFdLmxlbmd0aCsxKTtjb25zdCBEPWYr''@;'; put 'put ''ZFt2XS5sZW5ndGg7aWYoImhvbWUiPT09Yz9oPWY6ImVuZCI9PT1jJiYoaD1EKSxhPD1EKWJyZWFrfV9FKGwsaCl9ZnVuY3Rpb24gcjkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZpdChjKXt2YXIgbD1mdW5jdGlvbiBiaXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEJQPSJodF9lZGl0b3JfaGlkZGVuIixUcGU9InRleHRFZGl0b3IiO2NsYXNzIGk5IGV4dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0ZXh0In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxyOSh0aGlzLCJldmVu''@;'; put 'put ''dE1hbmFnZXIiLG5ldyBqMih0aGlzKSkscjkodGhpcywiYXV0b1Jlc2l6ZSIseHBlKHRoaXMuaG90LnJvb3REb2N1bWVudCkpLHI5KHRoaXMsIlRFWFRBUkVBIix2b2lkIDApLHI5KHRoaXMsInRleHRhcmVhU3R5bGUiLHZvaWQgMCkscjkodGhpcywiVEVYVEFSRUFfUEFSRU5UIix2b2lkIDAp''@;'; put 'put ''LHI5KHRoaXMsInRleHRhcmVhUGFyZW50U3R5bGUiLHZvaWQgMCkscjkodGhpcywibGF5ZXJDbGFzcyIsdm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgajIodGhpcyksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMuYmluZEV2ZW50cygpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRl''@;'; put 'put ''ckRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3koKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZX1zZXRWYWx1ZShsKXt0aGlzLlRFWFRBUkVBLnZhbHVlPWx9b3Blbigpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlz''@;'; put 'put ''LmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5hdXRvUmVzaXplLnVuT2JzZXJ2ZSgpLG1FKHRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCl9cHJlcGFyZShsLGEsZCxoLGYsdil7Y29uc3QgTT10aGlzLnN0YXRlO2lmKHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLCF2LnJlYWRP''@;'; put 'put ''bmx5KXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCEwKTtjb25zdHthbGxvd0ludmFsaWQ6RH09djtEJiYhdGhpcy5pc09wZW5lZCgpJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIiksTSE9PWx1LkZJTklTSEVEJiYhdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKX19''@;'; put 'put ''YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PWx1LlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIsc3VwZXIuYmVnaW5FZGl0aW5nKGwsYSkpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSxfRSh0aGlzLlRFWFRBUkVBLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3Ro''@;'; put 'put ''KX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRBUkVBPWwuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKSx2byh0aGlzLlRFWFRBUkVBLFtbImRhdGEtaG90LWlucHV0IiwiIl0sSDcoLTEpXSksVGkodGhpcy5URVhUQVJFQSwiaGFuZHNv''@;'; put 'put ''bnRhYmxlSW5wdXQiKSx0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHlsZSx0aGlzLnRleHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAsdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy5URVhUQVJFQV9QQVJF''@;'; put 'put ''TlQ9bC5jcmVhdGVFbGVtZW50KCJESVYiKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwiaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXIiKSxwbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpJiZsbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLFRpKHRo''@;'; put 'put ''aXMuVEVYVEFSRUFfUEFSRU5ULEJQKSx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGU9dGhpcy5URVhUQVJFQV9QQVJFTlQuc3R5bGUsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5URVhU''@;'; put 'put ''QVJFQV9QQVJFTlQpfWhpZGVFZGl0YWJsZUVsZW1lbnQoKXtKMmUoKSYmKHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSItOTk5OTlweCIpLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIwIix0aGlz''@;'; put 'put ''LnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIxcHgiLGxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsQlApfXNob3dFZGl0YWJsZUVsZW1lbnQoKXt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIiLHRoaXMu''@;'; put 'put ''dGV4dGFyZWFQYXJlbnRTdHlsZS5vdmVyZmxvdz0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUucG9zaXRpb249IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/ImxlZnQiOiJyaWdodCJdPSJhdXRvIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0''@;'; put 'put ''eT0iMSIsdGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9IiI7Y29uc3QgbD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5vZGVzO2xldCBhPSExO0dhKGwubGVuZ3RoLTEsZD0+e2lmKHBvKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSkscG8odGhpcy5U''@;'; put 'put ''RVhUQVJFQV9QQVJFTlQsQlApJiZsbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCksYT8odGhpcy5sYXllckNsYXNzPSJodF9lZGl0b3JfdmlzaWJsZSIsVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxz''@;'; put 'put ''TGF5ZXJDbGFzcygpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2lu''@;'; put 'put ''YWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09bHUuRURJVElORyYmIWwp''@;'; put 'put ''cmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQobHx8dGhpcy5jbG9zZSgpKTtjb25zdHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6dixtYXhIZWlnaHQ6TX09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3Ro''@;'; put 'put ''aXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IEQ9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21w''@;'; put 'put ''dXRlZFN0eWxlKHRoaXMuVEQpO3RoaXMuVEVYVEFSRUEuc3R5bGUuZm9udFNpemU9RC5mb250U2l6ZSx0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRGYW1pbHk9RC5mb250RmFtaWx5LHRoaXMuVEVYVEFSRUEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuVEQuc3R5bGUuYmFja2dyb3VuZENv''@;'; put 'put ''bG9yLHRoaXMuYXV0b1Jlc2l6ZS5pbml0KHRoaXMuVEVYVEFSRUEse21pbldpZHRoOk1hdGgubWluKGgsZiksbWluSGVpZ2h0Ok1hdGgubWluKHYsTSksbWF4V2lkdGg6ZixtYXhIZWlnaHQ6TX0sITApfWJpbmRFdmVudHMoKXtSJCgpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKHRoaXMuVEVYVEFSRUEsImZvY3Vzb3V0IiwoKT0+dGhpcy5maW5pc2hFZGl0aW5nKCExKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgp''@;'; put 'put ''PT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT57dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT1sdS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+''@;'; put 'put ''e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09bHUuRURJVElORyYmdGhpcy5mb2N1cygpfSl9YWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCl9cmVnaXN0ZXJTaG9ydGN1''@;'; put 'put ''dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGg9KCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCExLCJcbiIpfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbCIsIkVu''@;'; put 'put ''dGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6Zj0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFmLmFsdEtleX0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rp''@;'; put 'put ''b24uaXNNdWx0aXBsZSgpfSx7a2V5czpbWyJBbHQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSl9LHtrZXlzOltbIkhvbWUiXV0sY2FsbGJhY2s6KGYsdik9PntsZXRbTV09djtFcGUoTSx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkVuZCJdXSxjYWxsYmFjazooZix2KT0+e2xl''@;'; put 'put ''dFtNXT12O0VwZShNLHRoaXMuVEVYVEFSRUEpfX1dLHtydW5Pbmx5SWY6KCk9PlBhKHRoaXMuaG90LmdldFNlbGVjdGVkKCkpLGdyb3VwOlRwZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVT''@;'; put 'put ''aG9ydGN1dHNCeUdyb3VwKFRwZSl9fWZ1bmN0aW9uIGFUKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09di5hcmlhVGFncyxEPVtdLFo9W10scmU9W10sY2U9W107di5jbGFzc05hbWUmJlRpKGwsdi5jbGFzc05hbWUpLHYucmVhZE9ubHk/KEQucHVzaCh2LnJlYWRPbmx5Q2VsbENsYXNzTmFtZSks''@;'; put 'put ''TSYmY2UucHVzaChFMmUoKSkpOk0mJnJlLnB1c2goRTJlKClbMF0pLCExPT09di52YWxpZCYmdi5pbnZhbGlkQ2VsbENsYXNzTmFtZT8oRC5wdXNoKHYuaW52YWxpZENlbGxDbGFzc05hbWUpLE0mJmNlLnB1c2goVDJlKCkpKTooWi5wdXNoKHYuaW52YWxpZENlbGxDbGFzc05hbWUpLE0mJnJl''@;'; put 'put ''LnB1c2goVDJlKClbMF0pKSwhMT09PXYud29yZFdyYXAmJnYubm9Xb3JkV3JhcENsYXNzTmFtZSYmRC5wdXNoKHYubm9Xb3JkV3JhcENsYXNzTmFtZSksIWYmJnYucGxhY2Vob2xkZXImJkQucHVzaCh2LnBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSksbG8obCxaKSxUaShsLEQpLEI3KGwscmUp''@;'; put 'put ''LHZvKGwsY2UpfWZ1bmN0aW9uIEE1KGMsbCxhLGQsaCxmLHYpe2FULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtsZXQgTT1mOyFNJiZ2LnBsYWNlaG9sZGVyJiYoTT12LnBsYWNlaG9sZGVyKSxNPWxjKE0pLHYudHJpbVdoaXRlc3BhY2UmJihNPU0udHJpbSgpKSxQbShsLE0pfWFULlJF''@;'; put 'put ''TkRFUkVSX1RZUEU9ImJhc2UiLEE1LlJFTkRFUkVSX1RZUEU9InRleHQiO2NvbnN0IEFwZT17Q0VMTF9UWVBFOiJ0ZXh0IixlZGl0b3I6aTkscmVuZGVyZXI6QTV9O2Z1bmN0aW9uIGgzKGMsbCl7Y29uc3QgYT1uZXcgQ3BlKGMsbHx8e30sQUspO3JldHVybiBhLmluaXQoKSxhfUcyKEFwZSks''@;'; put 'put ''aDMuZWRpdG9ycz17QmFzZUVkaXRvcjprX30saDMuQ29yZT1mdW5jdGlvbihjKXtyZXR1cm4gbmV3IENwZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxBSyl9LGgzLkRlZmF1bHRTZXR0aW5ncz1ycGUoKSxoMy5ob29rcz1TYS5n''@;'; put 'put ''ZXRTaW5nbGV0b24oKSxoMy5DZWxsQ29vcmRzPWlQLGgzLkNlbGxSYW5nZT1mSyxoMy5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIixoMy5idWlsZERhdGU9IjI0LzA0LzIwMjUgMTA6NTk6MDAiLGgzLnZlcnNpb249IjE1LjMuMCIsaDMubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czprdHQs''@;'; put 'put ''Z2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OkIzZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJpZXM6ZnVuY3Rpb24gT3R0KCl7cmV0dXJuIFJ0dCgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTpWM2UsZ2V0VHJhbnNsYXRlZFBocmFzZTpqM2V9O2NvbnN0IG9zPWgzLFNpdD1bImNvbnRhaW5lciJd''@;'; put 'put ''LGtYPW5ldyBNYXAsa3BlPSJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiI7bGV0IFltPSgoKT0+e2NsYXNzIGN7Z2V0SW5zdGFuY2UoYSl7Y29uc3QgZD1rWC5nZXQoYSk7''@;'; put 'put ''cmV0dXJuIGQuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2FybihrcGUpLG51bGwpOmR9cmVnaXN0ZXJJbnN0YW5jZShhLGQpe3JldHVybiBrWC5zZXQoYSxkKX1yZW1vdmVJbnN0YW5jZShhKXtyZXR1cm4ga1guZGVsZXRlKGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBNaXQ9T2JqZWN0LmtleXMob3MuRGVmYXVsdFNldHRpbmdzKSxEcGU9b3MuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBJcGU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3ttZXJnZVNldHRpbmdzKGEpe2NvbnN0IGQ9InNldHRpbmdzImluIGEmJiJvYmplY3QiPT10eXBlb2YgYS5zZXR0aW5ncyxoPWQ/YS5zZXR0aW5nczp7fTtyZXR1cm4gRHBlLmNvbmNhdChNaXQpLmZvckVhY2godj0+e2NvbnN0IE09RHBlLmluZGV4T2Yodik+LTE7bGV0IEQ7ZCYmTSYmKEQ9''@;'; put 'put ''YS5zZXR0aW5nc1t2XSksdm9pZCAwIT09YVt2XSYmKEQ9YVt2XSksdm9pZCAwIT09RCYmKGhbdl09Im5nWm9uZSJpbiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgRCYmTT9mdW5jdGlvbiguLi5aKXtyZXR1cm4gYS5uZ1pvbmUucnVuKCgpPT5ELmFwcGx5KHRoaXMsWikpfTpEKX0pLGh9cHJlcGFy''@;'; put 'put ''ZUNoYW5nZXMoYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmPT57YS5oYXNPd25Qcm9wZXJ0eShmKSYmKGRbZl09YVtmXS5jdXJyZW50VmFsdWUpfSksZH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAy''@;'; put 'put ''NzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCksRF89KCgpPT57Y2xhc3MgY3tfaG90VGFibGVSZWdpc3RlcmVyO19ob3RTZXR0aW5nc1Jlc29sdmVyO25nWm9uZTtjb250YWluZXI7X19ob3RJbnN0YW5jZT1udWxsO2NvbHVtbnNDb21wb25lbnRz''@;'; put 'put ''PVtdO3NldHRpbmdzO2hvdElkPSIiO2FjdGl2ZUhlYWRlckNsYXNzTmFtZTthbGxvd0VtcHR5O2FsbG93SHRtbDthbGxvd0luc2VydENvbHVtbjthbGxvd0luc2VydFJvdzthbGxvd0ludmFsaWQ7YWxsb3dSZW1vdmVDb2x1bW47YWxsb3dSZW1vdmVSb3c7YXJpYVRhZ3M7YXV0b0NvbHVtblNp''@;'; put 'put ''emU7YXV0b1Jvd1NpemU7YXV0b1dyYXBDb2w7YXV0b1dyYXBSb3c7YmluZFJvd3NXaXRoSGVhZGVycztjZWxsO2NlbGxzO2NoZWNrZWRUZW1wbGF0ZTtjbGFzc05hbWU7Y29sSGVhZGVycztjb2xsYXBzaWJsZUNvbHVtbnM7Y29sdW1uSGVhZGVySGVpZ2h0O2NvbHVtbnM7Y29sdW1uU29ydGlu''@;'; put 'put ''Zztjb2x1bW5TdW1tYXJ5O2NvbFdpZHRocztjb21tZW50ZWRDZWxsQ2xhc3NOYW1lO2NvbW1lbnRzO2NvbnRleHRNZW51O2NvcHlhYmxlO2NvcHlQYXN0ZTtjb3JyZWN0Rm9ybWF0O2N1cnJlbnRDb2xDbGFzc05hbWU7Y3VycmVudEhlYWRlckNsYXNzTmFtZTtjdXJyZW50Um93Q2xhc3NOYW1l''@;'; put 'put ''O2N1c3RvbUJvcmRlcnM7ZGF0YTtkYXRhRG90Tm90YXRpb247ZGF0YVNjaGVtYTtkYXRlRm9ybWF0O2RhdGVQaWNrZXJDb25maWc7ZGVmYXVsdERhdGU7dGFiTmF2aWdhdGlvbjt0aGVtZU5hbWU7ZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjtkcmFnVG9TY3JvbGw7ZHJvcGRvd25NZW51O2VkaXRv''@;'; put 'put ''cjtlbnRlckJlZ2luc0VkaXRpbmc7ZW50ZXJNb3ZlcztmaWxsSGFuZGxlO2ZpbHRlcjtmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlO2ZpbHRlcnM7Zml4ZWRDb2x1bW5zTGVmdDtmaXhlZENvbHVtbnNTdGFydDtmaXhlZFJvd3NCb3R0b207Zml4ZWRSb3dzVG9wO2Zvcm11bGFzO2ZyYWdtZW50U2Vs''@;'; put 'put ''ZWN0aW9uO2hlYWRlckNsYXNzTmFtZTtoZWlnaHQ7aGlkZGVuQ29sdW1ucztoaWRkZW5Sb3dzO2ludmFsaWRDZWxsQ2xhc3NOYW1lO2ltZUZhc3RFZGl0O2xhYmVsO2xhbmd1YWdlO2xheW91dERpcmVjdGlvbjtsaWNlbnNlS2V5O2xvY2FsZTttYW51YWxDb2x1bW5GcmVlemU7bWFudWFsQ29s''@;'; put 'put ''dW1uTW92ZTttYW51YWxDb2x1bW5SZXNpemU7bWFudWFsUm93TW92ZTttYW51YWxSb3dSZXNpemU7bWF4Q29sczttYXhSb3dzO21lcmdlQ2VsbHM7bWluQ29sczttaW5Sb3dzO21pblNwYXJlQ29sczttaW5TcGFyZVJvd3M7bXVsdGlDb2x1bW5Tb3J0aW5nO25hdmlnYWJsZUhlYWRlcnM7bmVz''@;'; put 'put ''dGVkSGVhZGVycztuZXN0ZWRSb3dzO25vV29yZFdyYXBDbGFzc05hbWU7bnVtZXJpY0Zvcm1hdDtvYnNlcnZlRE9NVmlzaWJpbGl0eTtvdXRzaWRlQ2xpY2tEZXNlbGVjdHM7cGVyc2lzdGVudFN0YXRlO3BsYWNlaG9sZGVyO3BsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZTtwcmV2ZW50T3ZlcmZs''@;'; put 'put ''b3c7cHJldmVudFdoZWVsO3JlYWRPbmx5O3JlYWRPbmx5Q2VsbENsYXNzTmFtZTtyZW5kZXJBbGxDb2x1bW5zO3JlbmRlckFsbFJvd3M7cmVuZGVyZXI7cm93SGVhZGVycztyb3dIZWFkZXJXaWR0aDtyb3dIZWlnaHRzO3NlYXJjaDtzZWxlY3Rpb25Nb2RlO3NlbGVjdE9wdGlvbnM7c2tpcENv''@;'; put 'put ''bHVtbk9uUGFzdGU7c2tpcFJvd09uUGFzdGU7c29ydEJ5UmVsZXZhbmNlO3NvdXJjZTtzdGFydENvbHM7c3RhcnRSb3dzO3N0cmV0Y2hIO3N0cmljdDt0YWJsZUNsYXNzTmFtZTt0YWJNb3Zlczt0aXRsZTt0cmltRHJvcGRvd247dHJpbVJvd3M7dHJpbVdoaXRlc3BhY2U7dHlwZTt1bmNoZWNr''@;'; put 'put ''ZWRUZW1wbGF0ZTt1bmRvO3ZhbGlkYXRvcjt2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDt2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDt2aXNpYmxlUm93czt3aWR0aDt3b3JkV3JhcDthZnRlckFkZENoaWxkO2FmdGVyQXV0b2ZpbGw7YWZ0ZXJCZWdpbkVkaXRpbmc7YWZ0ZXJDZWxs''@;'; put 'put ''TWV0YVJlc2V0O2FmdGVyQ2hhbmdlO2FmdGVyQ2hhbmdlc09ic2VydmVkO2FmdGVyQ29sdW1uQ29sbGFwc2U7YWZ0ZXJDb2x1bW5FeHBhbmQ7YWZ0ZXJDb2x1bW5GcmVlemU7YWZ0ZXJDb2x1bW5Nb3ZlO2FmdGVyQ29sdW1uUmVzaXplO2FmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U7YWZ0ZXJD''@;'; put 'put ''b2x1bW5Tb3J0O2FmdGVyQ29sdW1uVW5mcmVlemU7YWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zO2FmdGVyQ29udGV4dE1lbnVIaWRlO2FmdGVyQ29udGV4dE1lbnVTaG93O2FmdGVyQ29weTthZnRlckNvcHlMaW1pdDthZnRlckNyZWF0ZUNvbDthZnRlckNyZWF0ZVJvdzthZnRlckN1''@;'; put 'put ''dDthZnRlckRlc2VsZWN0O2FmdGVyRGVzdHJveTthZnRlckRldGFjaENoaWxkO2FmdGVyRG9jdW1lbnRLZXlEb3duO2FmdGVyRHJhd1NlbGVjdGlvbjthZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zO2FmdGVyRHJvcGRvd25NZW51SGlkZTthZnRlckRyb3Bkb3duTWVudVNob3c7YWZ0''@;'; put 'put ''ZXJGaWx0ZXI7YWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZTthZnRlckdldENlbGxNZXRhO2FmdGVyR2V0Q29sSGVhZGVyO2FmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzO2FmdGVyR2V0Um93SGVhZGVyO2FmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzO2FmdGVySGlkZUNvbHVtbnM7YWZ0''@;'; put 'put ''ZXJIaWRlUm93czthZnRlckluaXQ7YWZ0ZXJMYW5ndWFnZUNoYW5nZTthZnRlckxpc3RlbjthZnRlckxvYWREYXRhO2FmdGVyTWVyZ2VDZWxsczthZnRlck1vZGlmeVRyYW5zZm9ybUVuZDthZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzO2FmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ7YWZ0ZXJN''@;'; put 'put ''b21lbnR1bVNjcm9sbDthZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkO2FmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDthZnRlck9uQ2VsbENvbnRleHRNZW51O2FmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2s7YWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd247YWZ0ZXJPbkNlbGxNb3VzZURvd247''@;'; put 'put ''YWZ0ZXJPbkNlbGxNb3VzZU91dDthZnRlck9uQ2VsbE1vdXNlT3ZlcjthZnRlck9uQ2VsbE1vdXNlVXA7YWZ0ZXJQYXN0ZTthZnRlclBsdWdpbnNJbml0aWFsaXplZDthZnRlclJlZG87YWZ0ZXJSZWRvU3RhY2tDaGFuZ2U7YWZ0ZXJSZWZyZXNoRGltZW5zaW9uczthZnRlclJlbW92ZUNlbGxN''@;'; put 'put ''ZXRhO2FmdGVyUmVtb3ZlQ29sO2FmdGVyUmVtb3ZlUm93O2FmdGVyUmVuZGVyO2FmdGVyUmVuZGVyZXI7YWZ0ZXJSb3dNb3ZlO2FmdGVyUm93UmVzaXplO2FmdGVyUm93U2VxdWVuY2VDaGFuZ2U7YWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk7YWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5O2FmdGVyU2Ny''@;'; put 'put ''b2xsO2FmdGVyU2VsZWN0Q29sdW1uczthZnRlclNlbGVjdGlvbjthZnRlclNlbGVjdGlvbkJ5UHJvcDthZnRlclNlbGVjdGlvbkVuZDthZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDthZnRlclNlbGVjdGlvbkZvY3VzU2V0O2FmdGVyU2VsZWN0Um93czthZnRlclNldENlbGxNZXRhO2FmdGVyU2V0''@;'; put 'put ''RGF0YUF0Q2VsbDthZnRlclNldERhdGFBdFJvd1Byb3A7YWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsO2FmdGVyU2V0VGhlbWU7YWZ0ZXJTaGVldEFkZGVkO2FmdGVyU2hlZXRSZW5hbWVkO2FmdGVyU2hlZXRSZW1vdmVkO2FmdGVyVHJpbVJvdzthZnRlclVuZG87YWZ0ZXJVbmRvU3RhY2tDaGFu''@;'; put 'put ''Z2U7YWZ0ZXJVbmhpZGVDb2x1bW5zO2FmdGVyVW5oaWRlUm93czthZnRlclVubGlzdGVuO2FmdGVyVW5tZXJnZUNlbGxzO2FmdGVyVW50cmltUm93O2FmdGVyVXBkYXRlRGF0YTthZnRlclVwZGF0ZVNldHRpbmdzO2FmdGVyVmFsaWRhdGU7YWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JP''@;'; put 'put ''dmVycmlkZTthZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlO2FmdGVyVmlld1JlbmRlcjtiZWZvcmVBZGRDaGlsZDtiZWZvcmVBdXRvZmlsbDtiZWZvcmVCZWdpbkVkaXRpbmc7YmVmb3JlQ2VsbEFsaWdubWVudDtiZWZvcmVDaGFuZ2U7YmVmb3JlQ2hhbmdlUmVuZGVyO2JlZm9y''@;'; put 'put ''ZUNvbHVtbkNvbGxhcHNlO2JlZm9yZUNvbHVtbkV4cGFuZDtiZWZvcmVDb2x1bW5GcmVlemU7YmVmb3JlQ29sdW1uTW92ZTtiZWZvcmVDb2x1bW5SZXNpemU7YmVmb3JlQ29sdW1uU29ydDtiZWZvcmVDb2x1bW5XcmFwO2JlZm9yZUNvbHVtblVuZnJlZXplO2JlZm9yZUNvbXBvc2l0aW9uU3Rh''@;'; put 'put ''cnQ7YmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcztiZWZvcmVDb250ZXh0TWVudVNob3c7YmVmb3JlQ29weTtiZWZvcmVDcmVhdGVDb2w7YmVmb3JlQ3JlYXRlUm93O2JlZm9yZUN1dDtiZWZvcmVEZXRhY2hDaGlsZDtiZWZvcmVEcmF3Qm9yZGVycztiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVt''@;'; put 'put ''cztiZWZvcmVEcm9wZG93bk1lbnVTaG93O2JlZm9yZUZpbHRlcjtiZWZvcmVHZXRDZWxsTWV0YTtiZWZvcmVIaWRlQ29sdW1ucztiZWZvcmVIaWRlUm93cztiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI7YmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyO2JlZm9yZUluaXQ7YmVmb3Jl''@;'; put 'put ''SW5pdFdhbGtvbnRhYmxlO2JlZm9yZUtleURvd247YmVmb3JlTGFuZ3VhZ2VDaGFuZ2U7YmVmb3JlTG9hZERhdGE7YmVmb3JlTWVyZ2VDZWxscztiZWZvcmVPbkNlbGxDb250ZXh0TWVudTtiZWZvcmVPbkNlbGxNb3VzZURvd247YmVmb3JlT25DZWxsTW91c2VPdXQ7YmVmb3JlT25DZWxsTW91''@;'; put 'put ''c2VPdmVyO2JlZm9yZU9uQ2VsbE1vdXNlVXA7YmVmb3JlUGFzdGU7YmVmb3JlUmVkbztiZWZvcmVSZWRvU3RhY2tDaGFuZ2U7YmVmb3JlUmVmcmVzaERpbWVuc2lvbnM7YmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM7YmVmb3JlUmVtb3ZlQ2VsbE1ldGE7YmVmb3JlUmVtb3ZlQ29sO2JlZm9y''@;'; put 'put ''ZVJlbW92ZVJvdztiZWZvcmVSZW5kZXI7YmVmb3JlUmVuZGVyZXI7YmVmb3JlUm93TW92ZTtiZWZvcmVSb3dSZXNpemU7YmVmb3JlUm93V3JhcDtiZWZvcmVTZWxlY3RDb2x1bW5zO2JlZm9yZVNlbGVjdGlvbkZvY3VzU2V0O2JlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldDtiZWZvcmVTZWxl''@;'; put 'put ''Y3RSb3dzO2JlZm9yZVNldENlbGxNZXRhO2JlZm9yZVNldFJhbmdlRW5kO2JlZm9yZVNldFJhbmdlU3RhcnQ7YmVmb3JlU2V0UmFuZ2VTdGFydE9ubHk7YmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoO2JlZm9yZVRvdWNoU2Nyb2xsO2JlZm9yZVRyaW1Sb3c7YmVmb3JlVW5kbztiZWZvcmVV''@;'; put 'put ''bmRvU3RhY2tDaGFuZ2U7YmVmb3JlVW5oaWRlQ29sdW1ucztiZWZvcmVVbmhpZGVSb3dzO2JlZm9yZVVubWVyZ2VDZWxscztiZWZvcmVVbnRyaW1Sb3c7YmVmb3JlVXBkYXRlRGF0YTtiZWZvcmVWYWxpZGF0ZTtiZWZvcmVWYWx1ZVJlbmRlcjtiZWZvcmVWaWV3cG9ydFNjcm9sbDtiZWZvcmVW''@;'; put 'put ''aWV3cG9ydFNjcm9sbEhvcml6b250YWxseTtiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk7YmVmb3JlVmlld1JlbmRlcjtjb25zdHJ1Y3Q7aW5pdDttb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ7bW9kaWZ5QXV0b2ZpbGxSYW5nZTttb2RpZnlDb2xIZWFkZXI7bW9kaWZ5Q29sdW1uSGVh''@;'; put 'put ''ZGVySGVpZ2h0O21vZGlmeUNvbHVtbkhlYWRlclZhbHVlO21vZGlmeUNvbFdpZHRoO21vZGlmeUNvcHlhYmxlUmFuZ2U7bW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWU7bW9kaWZ5Rm9jdXNlZEVsZW1lbnQ7bW9kaWZ5RGF0YTttb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbjttb2RpZnlH''@;'; put 'put ''ZXRDZWxsQ29vcmRzO21vZGlmeUdldENvb3Jkc0VsZW1lbnQ7bW9kaWZ5Um93RGF0YTttb2RpZnlSb3dIZWFkZXI7bW9kaWZ5Um93SGVhZGVyV2lkdGg7bW9kaWZ5Um93SGVpZ2h0O21vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWU7bW9kaWZ5U291cmNlRGF0YTttb2RpZnlUcmFuc2Zvcm1F''@;'; put 'put ''bmQ7bW9kaWZ5VHJhbnNmb3JtRm9jdXM7bW9kaWZ5VHJhbnNmb3JtU3RhcnQ7cGVyc2lzdGVudFN0YXRlTG9hZDtwZXJzaXN0ZW50U3RhdGVSZXNldDtwZXJzaXN0ZW50U3RhdGVTYXZlO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXI9YSx0aGlzLl9ob3RTZXR0''@;'; put 'put ''aW5nc1Jlc29sdmVyPWQsdGhpcy5uZ1pvbmU9aH1nZXQgaG90SW5zdGFuY2UoKXtyZXR1cm4hdGhpcy5fX2hvdEluc3RhbmNlfHx0aGlzLl9faG90SW5zdGFuY2UmJiF0aGlzLl9faG90SW5zdGFuY2UuaXNEZXN0cm95ZWQ/dGhpcy5fX2hvdEluc3RhbmNlOih0aGlzLl9ob3RUYWJsZVJlZ2lz''@;'; put 'put ''dGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCksY29uc29sZS53YXJuKGtwZSksbnVsbCl9c2V0IGhvdEluc3RhbmNlKGEpe3RoaXMuX19ob3RJbnN0YW5jZT1hfW5nQWZ0ZXJWaWV3SW5pdCgpe2NvbnN0IGE9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKHRo''@;'; put 'put ''aXMpO2lmKHRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGQ9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGg9PntkLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLGEuY29sdW1ucz1kfXRoaXMubmdab25lLnJ1''@;'; put 'put ''bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZT1uZXcgb3MuQ29yZSh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LGEpLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZWdpc3Rlckluc3RhbmNlKHRoaXMuaG90SWQsdGhpcy5ob3RJbnN0YW5jZSks''@;'; put 'put ''dGhpcy5ob3RJbnN0YW5jZS5pbml0KCl9KX1uZ09uQ2hhbmdlcyhhKXtpZihudWxsPT09dGhpcy5ob3RJbnN0YW5jZSlyZXR1cm47Y29uc3QgZD10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLnByZXBhcmVDaGFuZ2VzKGEpO3RoaXMudXBkYXRlSG90VGFibGUoZCl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UuZGVzdHJveSgpfSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpfXVwZGF0ZUhvdFRhYmxlKGEpe3Ro''@;'; put 'put ''aXMuaG90SW5zdGFuY2UmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyhhLCExKX0pfW9uQWZ0ZXJDb2x1bW5zQ2hhbmdlKCl7aWYodm9pZCAwIT09dGhpcy5jb2x1bW5zQ29tcG9uZW50cyYmdGhpcy5jb2x1bW5zQ29t''@;'; put 'put ''cG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgYT1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2EucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksdGhpcy51cGRhdGVIb3RUYWJsZSh7Y29sdW1uczphfSl9fW9uQWZ0ZXJDb2x1bW5z''@;'; put 'put ''TnVtYmVyQ2hhbmdlKCl7Y29uc3QgYT1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goZD0+e2EucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoZCkpfSksdGhpcy51cGRhdGVIb3RUYWJs''@;'; put 'put ''ZSh7Y29sdW1uczphfSl9YWRkQ29sdW1uKGEpe3RoaXMuY29sdW1uc0NvbXBvbmVudHMucHVzaChhKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9cmVtb3ZlQ29sdW1uKGEpe2NvbnN0IGQ9dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5pbmRleE9mKGEpO3RoaXMuY29sdW1uc0Nv''@;'; put 'put ''bXBvbmVudHMuc3BsaWNlKGQsMSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShZbSksR2UoSXBlKSxHZShXYSkpfTtzdGF0aWMgXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImhvdC10YWJsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKFNpdCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmNvbnRhaW5lcj1mLmZpcnN0KX19LGlucHV0czp7c2V0dGluZ3M6InNldHRpbmdzIixob3RJZDoiaG90SWQiLGFjdGl2ZUhlYWRlckNsYXNzTmFt''@;'; put 'put ''ZToiYWN0aXZlSGVhZGVyQ2xhc3NOYW1lIixhbGxvd0VtcHR5OiJhbGxvd0VtcHR5IixhbGxvd0h0bWw6ImFsbG93SHRtbCIsYWxsb3dJbnNlcnRDb2x1bW46ImFsbG93SW5zZXJ0Q29sdW1uIixhbGxvd0luc2VydFJvdzoiYWxsb3dJbnNlcnRSb3ciLGFsbG93SW52YWxpZDoiYWxsb3dJbnZh''@;'; put 'put ''bGlkIixhbGxvd1JlbW92ZUNvbHVtbjoiYWxsb3dSZW1vdmVDb2x1bW4iLGFsbG93UmVtb3ZlUm93OiJhbGxvd1JlbW92ZVJvdyIsYXJpYVRhZ3M6ImFyaWFUYWdzIixhdXRvQ29sdW1uU2l6ZToiYXV0b0NvbHVtblNpemUiLGF1dG9Sb3dTaXplOiJhdXRvUm93U2l6ZSIsYXV0b1dyYXBDb2w6''@;'; put 'put ''ImF1dG9XcmFwQ29sIixhdXRvV3JhcFJvdzoiYXV0b1dyYXBSb3ciLGJpbmRSb3dzV2l0aEhlYWRlcnM6ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGNlbGw6ImNlbGwiLGNlbGxzOiJjZWxscyIsY2hlY2tlZFRlbXBsYXRlOiJjaGVja2VkVGVtcGxhdGUiLGNsYXNzTmFtZToiY2xhc3NOYW1lIixj''@;'; put 'put ''b2xIZWFkZXJzOiJjb2xIZWFkZXJzIixjb2xsYXBzaWJsZUNvbHVtbnM6ImNvbGxhcHNpYmxlQ29sdW1ucyIsY29sdW1uSGVhZGVySGVpZ2h0OiJjb2x1bW5IZWFkZXJIZWlnaHQiLGNvbHVtbnM6ImNvbHVtbnMiLGNvbHVtblNvcnRpbmc6ImNvbHVtblNvcnRpbmciLGNvbHVtblN1bW1hcnk6''@;'; put 'put ''ImNvbHVtblN1bW1hcnkiLGNvbFdpZHRoczoiY29sV2lkdGhzIixjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJjb21tZW50ZWRDZWxsQ2xhc3NOYW1lIixjb21tZW50czoiY29tbWVudHMiLGNvbnRleHRNZW51OiJjb250ZXh0TWVudSIsY29weWFibGU6ImNvcHlhYmxlIixjb3B5UGFzdGU6ImNv''@;'; put 'put ''cHlQYXN0ZSIsY29ycmVjdEZvcm1hdDoiY29ycmVjdEZvcm1hdCIsY3VycmVudENvbENsYXNzTmFtZToiY3VycmVudENvbENsYXNzTmFtZSIsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VycmVudEhlYWRlckNsYXNzTmFtZSIsY3VycmVudFJvd0NsYXNzTmFtZToiY3VycmVudFJvd0NsYXNz''@;'; put 'put ''TmFtZSIsY3VzdG9tQm9yZGVyczoiY3VzdG9tQm9yZGVycyIsZGF0YToiZGF0YSIsZGF0YURvdE5vdGF0aW9uOiJkYXRhRG90Tm90YXRpb24iLGRhdGFTY2hlbWE6ImRhdGFTY2hlbWEiLGRhdGVGb3JtYXQ6ImRhdGVGb3JtYXQiLGRhdGVQaWNrZXJDb25maWc6ImRhdGVQaWNrZXJDb25maWci''@;'; put 'put ''LGRlZmF1bHREYXRlOiJkZWZhdWx0RGF0ZSIsdGFiTmF2aWdhdGlvbjoidGFiTmF2aWdhdGlvbiIsdGhlbWVOYW1lOiJ0aGVtZU5hbWUiLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImRpc2FibGVWaXN1YWxTZWxlY3Rpb24iLGRyYWdUb1Njcm9sbDoiZHJhZ1RvU2Nyb2xsIixkcm9wZG93bk1l''@;'; put 'put ''bnU6ImRyb3Bkb3duTWVudSIsZWRpdG9yOiJlZGl0b3IiLGVudGVyQmVnaW5zRWRpdGluZzoiZW50ZXJCZWdpbnNFZGl0aW5nIixlbnRlck1vdmVzOiJlbnRlck1vdmVzIixmaWxsSGFuZGxlOiJmaWxsSGFuZGxlIixmaWx0ZXI6ImZpbHRlciIsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZToiZmls''@;'; put 'put ''dGVyaW5nQ2FzZVNlbnNpdGl2ZSIsZmlsdGVyczoiZmlsdGVycyIsZml4ZWRDb2x1bW5zTGVmdDoiZml4ZWRDb2x1bW5zTGVmdCIsZml4ZWRDb2x1bW5zU3RhcnQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixmaXhlZFJvd3NCb3R0b206ImZpeGVkUm93c0JvdHRvbSIsZml4ZWRSb3dzVG9wOiJmaXhl''@;'; put 'put ''ZFJvd3NUb3AiLGZvcm11bGFzOiJmb3JtdWxhcyIsZnJhZ21lbnRTZWxlY3Rpb246ImZyYWdtZW50U2VsZWN0aW9uIixoZWFkZXJDbGFzc05hbWU6ImhlYWRlckNsYXNzTmFtZSIsaGVpZ2h0OiJoZWlnaHQiLGhpZGRlbkNvbHVtbnM6ImhpZGRlbkNvbHVtbnMiLGhpZGRlblJvd3M6ImhpZGRl''@;'; put 'put ''blJvd3MiLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJpbnZhbGlkQ2VsbENsYXNzTmFtZSIsaW1lRmFzdEVkaXQ6ImltZUZhc3RFZGl0IixsYWJlbDoibGFiZWwiLGxhbmd1YWdlOiJsYW5ndWFnZSIsbGF5b3V0RGlyZWN0aW9uOiJsYXlvdXREaXJlY3Rpb24iLGxpY2Vuc2VLZXk6ImxpY2Vuc2VL''@;'; put 'put ''ZXkiLGxvY2FsZToibG9jYWxlIixtYW51YWxDb2x1bW5GcmVlemU6Im1hbnVhbENvbHVtbkZyZWV6ZSIsbWFudWFsQ29sdW1uTW92ZToibWFudWFsQ29sdW1uTW92ZSIsbWFudWFsQ29sdW1uUmVzaXplOiJtYW51YWxDb2x1bW5SZXNpemUiLG1hbnVhbFJvd01vdmU6Im1hbnVhbFJvd01vdmUi''@;'; put 'put ''LG1hbnVhbFJvd1Jlc2l6ZToibWFudWFsUm93UmVzaXplIixtYXhDb2xzOiJtYXhDb2xzIixtYXhSb3dzOiJtYXhSb3dzIixtZXJnZUNlbGxzOiJtZXJnZUNlbGxzIixtaW5Db2xzOiJtaW5Db2xzIixtaW5Sb3dzOiJtaW5Sb3dzIixtaW5TcGFyZUNvbHM6Im1pblNwYXJlQ29scyIsbWluU3Bh''@;'; put 'put ''cmVSb3dzOiJtaW5TcGFyZVJvd3MiLG11bHRpQ29sdW1uU29ydGluZzoibXVsdGlDb2x1bW5Tb3J0aW5nIixuYXZpZ2FibGVIZWFkZXJzOiJuYXZpZ2FibGVIZWFkZXJzIixuZXN0ZWRIZWFkZXJzOiJuZXN0ZWRIZWFkZXJzIixuZXN0ZWRSb3dzOiJuZXN0ZWRSb3dzIixub1dvcmRXcmFwQ2xh''@;'; put 'put ''c3NOYW1lOiJub1dvcmRXcmFwQ2xhc3NOYW1lIixudW1lcmljRm9ybWF0OiJudW1lcmljRm9ybWF0IixvYnNlcnZlRE9NVmlzaWJpbGl0eToib2JzZXJ2ZURPTVZpc2liaWxpdHkiLG91dHNpZGVDbGlja0Rlc2VsZWN0czoib3V0c2lkZUNsaWNrRGVzZWxlY3RzIixwZXJzaXN0ZW50U3RhdGU6''@;'; put 'put ''InBlcnNpc3RlbnRTdGF0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6InBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSIscHJldmVudE92ZXJmbG93OiJwcmV2ZW50T3ZlcmZsb3ciLHByZXZlbnRXaGVlbDoicHJldmVudFdoZWVsIixyZWFkT25s''@;'; put 'put ''eToicmVhZE9ubHkiLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToicmVhZE9ubHlDZWxsQ2xhc3NOYW1lIixyZW5kZXJBbGxDb2x1bW5zOiJyZW5kZXJBbGxDb2x1bW5zIixyZW5kZXJBbGxSb3dzOiJyZW5kZXJBbGxSb3dzIixyZW5kZXJlcjoicmVuZGVyZXIiLHJvd0hlYWRlcnM6InJvd0hlYWRl''@;'; put 'put ''cnMiLHJvd0hlYWRlcldpZHRoOiJyb3dIZWFkZXJXaWR0aCIscm93SGVpZ2h0czoicm93SGVpZ2h0cyIsc2VhcmNoOiJzZWFyY2giLHNlbGVjdGlvbk1vZGU6InNlbGVjdGlvbk1vZGUiLHNlbGVjdE9wdGlvbnM6InNlbGVjdE9wdGlvbnMiLHNraXBDb2x1bW5PblBhc3RlOiJza2lwQ29sdW1u''@;'; put 'put ''T25QYXN0ZSIsc2tpcFJvd09uUGFzdGU6InNraXBSb3dPblBhc3RlIixzb3J0QnlSZWxldmFuY2U6InNvcnRCeVJlbGV2YW5jZSIsc291cmNlOiJzb3VyY2UiLHN0YXJ0Q29sczoic3RhcnRDb2xzIixzdGFydFJvd3M6InN0YXJ0Um93cyIsc3RyZXRjaEg6InN0cmV0Y2hIIixzdHJpY3Q6InN0''@;'; put 'put ''cmljdCIsdGFibGVDbGFzc05hbWU6InRhYmxlQ2xhc3NOYW1lIix0YWJNb3ZlczoidGFiTW92ZXMiLHRpdGxlOiJ0aXRsZSIsdHJpbURyb3Bkb3duOiJ0cmltRHJvcGRvd24iLHRyaW1Sb3dzOiJ0cmltUm93cyIsdHJpbVdoaXRlc3BhY2U6InRyaW1XaGl0ZXNwYWNlIix0eXBlOiJ0eXBlIix1''@;'; put 'put ''bmNoZWNrZWRUZW1wbGF0ZToidW5jaGVja2VkVGVtcGxhdGUiLHVuZG86InVuZG8iLHZhbGlkYXRvcjoidmFsaWRhdG9yIix2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoidmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQiLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJ2aWV3''@;'; put 'put ''cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsdmlzaWJsZVJvd3M6InZpc2libGVSb3dzIix3aWR0aDoid2lkdGgiLHdvcmRXcmFwOiJ3b3JkV3JhcCIsYWZ0ZXJBZGRDaGlsZDoiYWZ0ZXJBZGRDaGlsZCIsYWZ0ZXJBdXRvZmlsbDoiYWZ0ZXJBdXRvZmlsbCIsYWZ0ZXJCZWdpbkVkaXRpbmc6ImFm''@;'; put 'put ''dGVyQmVnaW5FZGl0aW5nIixhZnRlckNlbGxNZXRhUmVzZXQ6ImFmdGVyQ2VsbE1ldGFSZXNldCIsYWZ0ZXJDaGFuZ2U6ImFmdGVyQ2hhbmdlIixhZnRlckNoYW5nZXNPYnNlcnZlZDoiYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQiLGFmdGVyQ29sdW1uQ29sbGFwc2U6ImFmdGVyQ29sdW1uQ29sbGFw''@;'; put 'put ''c2UiLGFmdGVyQ29sdW1uRXhwYW5kOiJhZnRlckNvbHVtbkV4cGFuZCIsYWZ0ZXJDb2x1bW5GcmVlemU6ImFmdGVyQ29sdW1uRnJlZXplIixhZnRlckNvbHVtbk1vdmU6ImFmdGVyQ29sdW1uTW92ZSIsYWZ0ZXJDb2x1bW5SZXNpemU6ImFmdGVyQ29sdW1uUmVzaXplIixhZnRlckNvbHVtblNl''@;'; put 'put ''cXVlbmNlQ2hhbmdlOiJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIixhZnRlckNvbHVtblNvcnQ6ImFmdGVyQ29sdW1uU29ydCIsYWZ0ZXJDb2x1bW5VbmZyZWV6ZToiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zOiJhZnRlckNvbnRleHRNZW51''@;'; put 'put ''RGVmYXVsdE9wdGlvbnMiLGFmdGVyQ29udGV4dE1lbnVIaWRlOiJhZnRlckNvbnRleHRNZW51SGlkZSIsYWZ0ZXJDb250ZXh0TWVudVNob3c6ImFmdGVyQ29udGV4dE1lbnVTaG93IixhZnRlckNvcHk6ImFmdGVyQ29weSIsYWZ0ZXJDb3B5TGltaXQ6ImFmdGVyQ29weUxpbWl0IixhZnRlckNy''@;'; put 'put ''ZWF0ZUNvbDoiYWZ0ZXJDcmVhdGVDb2wiLGFmdGVyQ3JlYXRlUm93OiJhZnRlckNyZWF0ZVJvdyIsYWZ0ZXJDdXQ6ImFmdGVyQ3V0IixhZnRlckRlc2VsZWN0OiJhZnRlckRlc2VsZWN0IixhZnRlckRlc3Ryb3k6ImFmdGVyRGVzdHJveSIsYWZ0ZXJEZXRhY2hDaGlsZDoiYWZ0ZXJEZXRhY2hD''@;'; put 'put ''aGlsZCIsYWZ0ZXJEb2N1bWVudEtleURvd246ImFmdGVyRG9jdW1lbnRLZXlEb3duIixhZnRlckRyYXdTZWxlY3Rpb246ImFmdGVyRHJhd1NlbGVjdGlvbiIsYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJEcm9w''@;'; put 'put ''ZG93bk1lbnVIaWRlOiJhZnRlckRyb3Bkb3duTWVudUhpZGUiLGFmdGVyRHJvcGRvd25NZW51U2hvdzoiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IixhZnRlckZpbHRlcjoiYWZ0ZXJGaWx0ZXIiLGFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGU6ImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGFm''@;'; put 'put ''dGVyR2V0Q2VsbE1ldGE6ImFmdGVyR2V0Q2VsbE1ldGEiLGFmdGVyR2V0Q29sSGVhZGVyOiJhZnRlckdldENvbEhlYWRlciIsYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixhZnRlckdldFJvd0hlYWRlcjoiYWZ0ZXJHZXRSb3dI''@;'; put 'put ''ZWFkZXIiLGFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzOiJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsYWZ0ZXJIaWRlQ29sdW1uczoiYWZ0ZXJIaWRlQ29sdW1ucyIsYWZ0ZXJIaWRlUm93czoiYWZ0ZXJIaWRlUm93cyIsYWZ0ZXJJbml0OiJhZnRlckluaXQiLGFmdGVyTGFuZ3VhZ2VD''@;'; put 'put ''aGFuZ2U6ImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLGFmdGVyTGlzdGVuOiJhZnRlckxpc3RlbiIsYWZ0ZXJMb2FkRGF0YToiYWZ0ZXJMb2FkRGF0YSIsYWZ0ZXJNZXJnZUNlbGxzOiJhZnRlck1lcmdlQ2VsbHMiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kOiJhZnRlck1vZGlmeVRyYW5zZm9ybUVu''@;'; put 'put ''ZCIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1czoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsYWZ0ZXJNb21lbnR1bVNjcm9sbDoiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsYWZ0ZXJOYW1lZEV4''@;'; put 'put ''cHJlc3Npb25BZGRlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkOiJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGFmdGVyT25DZWxsQ29udGV4dE1lbnU6ImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGFmdGVyT25DZWxsQ29ybmVy''@;'; put 'put ''RGJsQ2xpY2s6ImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLGFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duOiJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZURvd246ImFmdGVyT25DZWxsTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlT3V0OiJhZnRlck9u''@;'; put 'put ''Q2VsbE1vdXNlT3V0IixhZnRlck9uQ2VsbE1vdXNlT3ZlcjoiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGFmdGVyT25DZWxsTW91c2VVcDoiYWZ0ZXJPbkNlbGxNb3VzZVVwIixhZnRlclBhc3RlOiJhZnRlclBhc3RlIixhZnRlclBsdWdpbnNJbml0aWFsaXplZDoiYWZ0ZXJQbHVnaW5zSW5pdGlh''@;'; put 'put ''bGl6ZWQiLGFmdGVyUmVkbzoiYWZ0ZXJSZWRvIixhZnRlclJlZG9TdGFja0NoYW5nZToiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGFmdGVyUmVmcmVzaERpbWVuc2lvbnM6ImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLGFmdGVyUmVtb3ZlQ2VsbE1ldGE6ImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLGFm''@;'; put 'put ''dGVyUmVtb3ZlQ29sOiJhZnRlclJlbW92ZUNvbCIsYWZ0ZXJSZW1vdmVSb3c6ImFmdGVyUmVtb3ZlUm93IixhZnRlclJlbmRlcjoiYWZ0ZXJSZW5kZXIiLGFmdGVyUmVuZGVyZXI6ImFmdGVyUmVuZGVyZXIiLGFmdGVyUm93TW92ZToiYWZ0ZXJSb3dNb3ZlIixhZnRlclJvd1Jlc2l6ZToiYWZ0''@;'; put 'put ''ZXJSb3dSZXNpemUiLGFmdGVyUm93U2VxdWVuY2VDaGFuZ2U6ImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLGFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5OiJhZnRlclNjcm9sbEhvcml6b250YWxseSIsYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5OiJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLGFmdGVyU2Ny''@;'; put 'put ''b2xsOiJhZnRlclNjcm9sbCIsYWZ0ZXJTZWxlY3RDb2x1bW5zOiJhZnRlclNlbGVjdENvbHVtbnMiLGFmdGVyU2VsZWN0aW9uOiJhZnRlclNlbGVjdGlvbiIsYWZ0ZXJTZWxlY3Rpb25CeVByb3A6ImFmdGVyU2VsZWN0aW9uQnlQcm9wIixhZnRlclNlbGVjdGlvbkVuZDoiYWZ0ZXJTZWxlY3Rp''@;'; put 'put ''b25FbmQiLGFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wOiJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldDoiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsYWZ0ZXJTZWxlY3RSb3dzOiJhZnRlclNlbGVjdFJvd3MiLGFmdGVyU2V0Q2VsbE1ldGE6ImFmdGVyU2V0''@;'; put 'put ''Q2VsbE1ldGEiLGFmdGVyU2V0RGF0YUF0Q2VsbDoiYWZ0ZXJTZXREYXRhQXRDZWxsIixhZnRlclNldERhdGFBdFJvd1Byb3A6ImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsOiJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGFmdGVyU2V0VGhlbWU6ImFm''@;'; put 'put ''dGVyU2V0VGhlbWUiLGFmdGVyU2hlZXRBZGRlZDoiYWZ0ZXJTaGVldEFkZGVkIixhZnRlclNoZWV0UmVuYW1lZDoiYWZ0ZXJTaGVldFJlbmFtZWQiLGFmdGVyU2hlZXRSZW1vdmVkOiJhZnRlclNoZWV0UmVtb3ZlZCIsYWZ0ZXJUcmltUm93OiJhZnRlclRyaW1Sb3ciLGFmdGVyVW5kbzoiYWZ0''@;'; put 'put ''ZXJVbmRvIixhZnRlclVuZG9TdGFja0NoYW5nZToiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGFmdGVyVW5oaWRlQ29sdW1uczoiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhZnRlclVuaGlkZVJvd3M6ImFmdGVyVW5oaWRlUm93cyIsYWZ0ZXJVbmxpc3RlbjoiYWZ0ZXJVbmxpc3RlbiIsYWZ0ZXJVbm1l''@;'; put 'put ''cmdlQ2VsbHM6ImFmdGVyVW5tZXJnZUNlbGxzIixhZnRlclVudHJpbVJvdzoiYWZ0ZXJVbnRyaW1Sb3ciLGFmdGVyVXBkYXRlRGF0YToiYWZ0ZXJVcGRhdGVEYXRhIixhZnRlclVwZGF0ZVNldHRpbmdzOiJhZnRlclVwZGF0ZVNldHRpbmdzIixhZnRlclZhbGlkYXRlOiJhZnRlclZhbGlkYXRl''@;'; put 'put ''IixhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdSZW5k''@;'; put 'put ''ZXI6ImFmdGVyVmlld1JlbmRlciIsYmVmb3JlQWRkQ2hpbGQ6ImJlZm9yZUFkZENoaWxkIixiZWZvcmVBdXRvZmlsbDoiYmVmb3JlQXV0b2ZpbGwiLGJlZm9yZUJlZ2luRWRpdGluZzoiYmVmb3JlQmVnaW5FZGl0aW5nIixiZWZvcmVDZWxsQWxpZ25tZW50OiJiZWZvcmVDZWxsQWxpZ25tZW50''@;'; put 'put ''IixiZWZvcmVDaGFuZ2U6ImJlZm9yZUNoYW5nZSIsYmVmb3JlQ2hhbmdlUmVuZGVyOiJiZWZvcmVDaGFuZ2VSZW5kZXIiLGJlZm9yZUNvbHVtbkNvbGxhcHNlOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYmVmb3JlQ29sdW1uRXhwYW5kOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGJlZm9yZUNvbHVt''@;'; put 'put ''bkZyZWV6ZToiYmVmb3JlQ29sdW1uRnJlZXplIixiZWZvcmVDb2x1bW5Nb3ZlOiJiZWZvcmVDb2x1bW5Nb3ZlIixiZWZvcmVDb2x1bW5SZXNpemU6ImJlZm9yZUNvbHVtblJlc2l6ZSIsYmVmb3JlQ29sdW1uU29ydDoiYmVmb3JlQ29sdW1uU29ydCIsYmVmb3JlQ29sdW1uV3JhcDoiYmVmb3Jl''@;'; put 'put ''Q29sdW1uV3JhcCIsYmVmb3JlQ29sdW1uVW5mcmVlemU6ImJlZm9yZUNvbHVtblVuZnJlZXplIixiZWZvcmVDb21wb3NpdGlvblN0YXJ0OiJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IixiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zOiJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixiZWZvcmVD''@;'; put 'put ''b250ZXh0TWVudVNob3c6ImJlZm9yZUNvbnRleHRNZW51U2hvdyIsYmVmb3JlQ29weToiYmVmb3JlQ29weSIsYmVmb3JlQ3JlYXRlQ29sOiJiZWZvcmVDcmVhdGVDb2wiLGJlZm9yZUNyZWF0ZVJvdzoiYmVmb3JlQ3JlYXRlUm93IixiZWZvcmVDdXQ6ImJlZm9yZUN1dCIsYmVmb3JlRGV0YWNo''@;'; put 'put ''Q2hpbGQ6ImJlZm9yZURldGFjaENoaWxkIixiZWZvcmVEcmF3Qm9yZGVyczoiYmVmb3JlRHJhd0JvcmRlcnMiLGJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zOiJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsYmVmb3JlRHJvcGRvd25NZW51U2hvdzoiYmVmb3JlRHJvcGRvd25NZW51U2hv''@;'; put 'put ''dyIsYmVmb3JlRmlsdGVyOiJiZWZvcmVGaWx0ZXIiLGJlZm9yZUdldENlbGxNZXRhOiJiZWZvcmVHZXRDZWxsTWV0YSIsYmVmb3JlSGlkZUNvbHVtbnM6ImJlZm9yZUhpZGVDb2x1bW5zIixiZWZvcmVIaWRlUm93czoiYmVmb3JlSGlkZVJvd3MiLGJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhl''@;'; put 'put ''YWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6ImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsYmVmb3JlSW5pdDoiYmVmb3JlSW5pdCIsYmVmb3JlSW5pdFdhbGtvbnRhYmxlOiJiZWZvcmVJbml0V2Fsa29udGFibGUi''@;'; put 'put ''LGJlZm9yZUtleURvd246ImJlZm9yZUtleURvd24iLGJlZm9yZUxhbmd1YWdlQ2hhbmdlOiJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsYmVmb3JlTG9hZERhdGE6ImJlZm9yZUxvYWREYXRhIixiZWZvcmVNZXJnZUNlbGxzOiJiZWZvcmVNZXJnZUNlbGxzIixiZWZvcmVPbkNlbGxDb250ZXh0TWVu''@;'; put 'put ''dToiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGJlZm9yZU9uQ2VsbE1vdXNlRG93bjoiYmVmb3JlT25DZWxsTW91c2VEb3duIixiZWZvcmVPbkNlbGxNb3VzZU91dDoiYmVmb3JlT25DZWxsTW91c2VPdXQiLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjoiYmVmb3JlT25DZWxsTW91c2VPdmVyIixi''@;'; put 'put ''ZWZvcmVPbkNlbGxNb3VzZVVwOiJiZWZvcmVPbkNlbGxNb3VzZVVwIixiZWZvcmVQYXN0ZToiYmVmb3JlUGFzdGUiLGJlZm9yZVJlZG86ImJlZm9yZVJlZG8iLGJlZm9yZVJlZG9TdGFja0NoYW5nZToiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixiZWZvcmVSZWZyZXNoRGltZW5zaW9uczoiYmVm''@;'; put 'put ''b3JlUmVmcmVzaERpbWVuc2lvbnMiLGJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOiJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsYmVmb3JlUmVtb3ZlQ2VsbE1ldGE6ImJlZm9yZVJlbW92ZUNlbGxNZXRhIixiZWZvcmVSZW1vdmVDb2w6ImJlZm9yZVJlbW92ZUNvbCIsYmVmb3JlUmVt''@;'; put 'put ''b3ZlUm93OiJiZWZvcmVSZW1vdmVSb3ciLGJlZm9yZVJlbmRlcjoiYmVmb3JlUmVuZGVyIixiZWZvcmVSZW5kZXJlcjoiYmVmb3JlUmVuZGVyZXIiLGJlZm9yZVJvd01vdmU6ImJlZm9yZVJvd01vdmUiLGJlZm9yZVJvd1Jlc2l6ZToiYmVmb3JlUm93UmVzaXplIixiZWZvcmVSb3dXcmFwOiJi''@;'; put 'put ''ZWZvcmVSb3dXcmFwIixiZWZvcmVTZWxlY3RDb2x1bW5zOiJiZWZvcmVTZWxlY3RDb2x1bW5zIixiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldDoiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLGJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldDoiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0Iixi''@;'; put 'put ''ZWZvcmVTZWxlY3RSb3dzOiJiZWZvcmVTZWxlY3RSb3dzIixiZWZvcmVTZXRDZWxsTWV0YToiYmVmb3JlU2V0Q2VsbE1ldGEiLGJlZm9yZVNldFJhbmdlRW5kOiJiZWZvcmVTZXRSYW5nZUVuZCIsYmVmb3JlU2V0UmFuZ2VTdGFydDoiYmVmb3JlU2V0UmFuZ2VTdGFydCIsYmVmb3JlU2V0UmFu''@;'; put 'put ''Z2VTdGFydE9ubHk6ImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6ImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYmVmb3JlVG91Y2hTY3JvbGw6ImJlZm9yZVRvdWNoU2Nyb2xsIixiZWZvcmVUcmltUm93OiJiZWZvcmVUcmltUm93Iixi''@;'; put 'put ''ZWZvcmVVbmRvOiJiZWZvcmVVbmRvIixiZWZvcmVVbmRvU3RhY2tDaGFuZ2U6ImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsYmVmb3JlVW5oaWRlQ29sdW1uczoiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYmVmb3JlVW5oaWRlUm93czoiYmVmb3JlVW5oaWRlUm93cyIsYmVmb3JlVW5tZXJnZUNlbGxz''@;'; put 'put ''OiJiZWZvcmVVbm1lcmdlQ2VsbHMiLGJlZm9yZVVudHJpbVJvdzoiYmVmb3JlVW50cmltUm93IixiZWZvcmVVcGRhdGVEYXRhOiJiZWZvcmVVcGRhdGVEYXRhIixiZWZvcmVWYWxpZGF0ZToiYmVmb3JlVmFsaWRhdGUiLGJlZm9yZVZhbHVlUmVuZGVyOiJiZWZvcmVWYWx1ZVJlbmRlciIsYmVm''@;'; put 'put ''b3JlVmlld3BvcnRTY3JvbGw6ImJlZm9yZVZpZXdwb3J0U2Nyb2xsIixiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseToiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseToiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0''@;'; put 'put ''aWNhbGx5IixiZWZvcmVWaWV3UmVuZGVyOiJiZWZvcmVWaWV3UmVuZGVyIixjb25zdHJ1Y3Q6ImNvbnN0cnVjdCIsaW5pdDoiaW5pdCIsbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkOiJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLG1vZGlmeUF1dG9maWxsUmFuZ2U6Im1vZGlmeUF1dG9maWxs''@;'; put 'put ''UmFuZ2UiLG1vZGlmeUNvbEhlYWRlcjoibW9kaWZ5Q29sSGVhZGVyIixtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ6Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU6Im1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixtb2RpZnlDb2xXaWR0aDoibW9kaWZ5''@;'; put 'put ''Q29sV2lkdGgiLG1vZGlmeUNvcHlhYmxlUmFuZ2U6Im1vZGlmeUNvcHlhYmxlUmFuZ2UiLG1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlOiJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsbW9kaWZ5Rm9jdXNlZEVsZW1lbnQ6Im1vZGlmeUZvY3VzZWRFbGVtZW50Iixtb2RpZnlE''@;'; put 'put ''YXRhOiJtb2RpZnlEYXRhIixtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbjoibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLG1vZGlmeUdldENlbGxDb29yZHM6Im1vZGlmeUdldENlbGxDb29yZHMiLG1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6Im1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLG1v''@;'; put 'put ''ZGlmeVJvd0RhdGE6Im1vZGlmeVJvd0RhdGEiLG1vZGlmeVJvd0hlYWRlcjoibW9kaWZ5Um93SGVhZGVyIixtb2RpZnlSb3dIZWFkZXJXaWR0aDoibW9kaWZ5Um93SGVhZGVyV2lkdGgiLG1vZGlmeVJvd0hlaWdodDoibW9kaWZ5Um93SGVpZ2h0Iixtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlO''@;'; put 'put ''YW1lOiJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixtb2RpZnlTb3VyY2VEYXRhOiJtb2RpZnlTb3VyY2VEYXRhIixtb2RpZnlUcmFuc2Zvcm1FbmQ6Im1vZGlmeVRyYW5zZm9ybUVuZCIsbW9kaWZ5VHJhbnNmb3JtRm9jdXM6Im1vZGlmeVRyYW5zZm9ybUZvY3VzIixtb2RpZnlUcmFu''@;'; put 'put ''c2Zvcm1TdGFydDoibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLHBlcnNpc3RlbnRTdGF0ZUxvYWQ6InBlcnNpc3RlbnRTdGF0ZUxvYWQiLHBlcnNpc3RlbnRTdGF0ZVJlc2V0OiJwZXJzaXN0ZW50U3RhdGVSZXNldCIscGVyc2lzdGVudFN0YXRlU2F2ZToicGVyc2lzdGVudFN0YXRlU2F2ZSJ9LGZl''@;'; put 'put ''YXR1cmVzOltkYShbWW0sSXBlXSksd2xdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJjb250YWluZXIiLCIiXSxbMywiaWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsImRpdiIsMSwwKSwyJmQmJnhlKCJpZCIsaC5ob3RJZCl9LGVuY2Fwc3VsYXRpb246Mn0pfXJldHVy''@;'; put 'put ''biBjfSkoKSxhOT0oKCk9PntjbGFzcyBje3N0YXRpYyB2ZXJzaW9uPSIxNS4zLjAiO3N0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOltZbV19fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1Bcih7fSl9cmV0dXJuIGN9KSgpO2NvbnN0IFJwZT0iaGFuZHNvbnRhYmxlRWRpdG9yIjtjbGFzcyBEWCBleHRlbmRzIGk5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaGFuZHNvbnRhYmxlIn1vcGVuKCl7c3VwZXIub3Blbigp''@;'; put 'put ''O2NvbnN0IGw9dGhpcy5odENvbnRhaW5lci5zdHlsZTt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5kZXN0cm95KCksbC53aWR0aD0iIixsLmhlaWdodD0iIixsLm92ZXJmbG93PSIiKSwibm9uZSI9PT1sLmRpc3BsYXkmJihsLmRpc3BsYXk9IiIpLHRoaXMuaHRFZGl0b3I9bmV3IHRo''@;'; put 'put ''aXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRDb250YWluZXIsdGhpcy5odE9wdGlvbnMpLHRoaXMuaHRFZGl0b3IuaW5pdCgpLHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIix0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD90aGlzLmh0RWRpdG9yLnNlbGVjdENl''@;'; put 'put ''bGwoMCwwKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpLF9FKHRoaXMuVEVYVEFSRUEsMCx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCksdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRXaWR0aCgpLGhlaWdodDp0aGlzLmdldEhlaWdodCgpfSksdGhp''@;'; put 'put ''cy5yZWZyZXNoRGltZW5zaW9ucygpfWNsb3NlKCl7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCl9cHJlcGFyZShsLGEsZCxoLGYs''@;'; put 'put ''dil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLEQ9e3N0YXJ0Um93czowLHN0YXJ0Q29sczowLG1pblJvd3M6MCxtaW5Db2xzOjAsY2xhc3NOYW1lOiJsaXN0Ym94Iixjb3B5UGFzdGU6ITEsYXV0b0NvbHVtblNpemU6ITEsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6''@;'; put 'put ''ITAsZmlsbEhhbmRsZTohMSxhdXRvV3JhcENvbDohMSxhdXRvV3JhcFJvdzohMSxhcmlhVGFnczohMSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGFmdGVyT25DZWxsTW91c2VEb3duKFoscmUpe2NvbnN0IGNlPXRoaXMuZ2V0U291cmNlRGF0YShyZS5yb3cscmUu''@;'; put 'put ''Y29sKTt2b2lkIDAhPT1jZSYmTS5zZXRWYWx1ZShjZSksTS5ob3QuZGVzdHJveUVkaXRvcigpfSxwcmV2ZW50V2hlZWw6ITAsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9O3RoaXMuY2VsbFByb3BlcnRpZXMuaGFuZHNvbnRhYmxlJiZ4dShELHYuaGFuZHNv''@;'; put 'put ''bnRhYmxlKSx0aGlzLmh0T3B0aW9ucz1EfWJlZ2luRWRpdGluZyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vbkJlZ2luRWRpdGluZztkJiYhMT09PWQoKXx8c3VwZXIuYmVnaW5FZGl0aW5nKGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygp''@;'; put 'put ''O2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2wuY2xhc3NOYW1lPSJoYW5kc29udGFibGVFZGl0b3IiLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKGwpLHRoaXMuaHRDb250YWluZXI9bCx0aGlzLmFzc2lnbkhvb2tzKCl9ZmluaXNo''@;'; put 'put ''RWRpdGluZyhsLGEsZCl7aWYodGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5pc0xpc3RlbmluZygpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkTGFzdCgpKXtjb25zdCBoPXRoaXMuaHRFZGl0b3IuZ2V0VmFsdWUoKTt2b2lk''@;'; put 'put ''IDAhPT1oJiZ0aGlzLnNldFZhbHVlKGgpfXN1cGVyLmZpbmlzaEVkaXRpbmcobCxhLGQpfWdldEhlaWdodCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVIZWlnaHQoKSsxfWdldFdpZHRoKCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZVdpZHRoKCl9YXNz''@;'; put 'put ''aWduSG9va3MoKXt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dmFyIGw7bnVsbD09PShsPXRoaXMuaHRFZGl0b3IpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChsLGEpPT57dmFyIGQ7YXx8bnVsbD09PShk''@;'; put 'put ''PXRoaXMuaHRFZGl0b3IpfHx2b2lkIDA9PT1kfHxkLnVzZVRoZW1lKGwpfSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCk7Y29uc3QgaD0oZix2KT0+''@;'; put 'put ''e2NvbnN0IE09dGhpcy5odEVkaXRvcjtpZih2b2lkIDAhPT1mJiYoZjwwfHxNLmZsaXBwZWQmJmY+TS5jb3VudFJvd3MoKS0xP00uZGVzZWxlY3RDZWxsKCk6TS5zZWxlY3RDZWxsKGYsMCksTS5nZXREYXRhKCkubGVuZ3RoKSlyZXR1cm4gdi5wcmV2ZW50RGVmYXVsdCgpLEIyKHYpLHRoaXMu''@;'; put 'put ''aG90Lmxpc3RlbigpLHRoaXMuVEVYVEFSRUEuZm9jdXMoKSwhMX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvcjtsZXQgTSxEO3JldHVybiF2LmdldFNlbGVjdGVkTGFzdCgpJiZ2LmZsaXBwZWQ/TT12LmNvdW50''@;'; put 'put ''Um93cygpLTE6di5nZXRTZWxlY3RlZExhc3QoKSYmKHYuZmxpcHBlZD8oRD12LmdldFNlbGVjdGVkTGFzdCgpWzBdLE09TWF0aC5tYXgoMCxELTEpKTooRD12LmdldFNlbGVjdGVkTGFzdCgpWzBdLE09RC0xKSksaChNLGYpfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3du''@;'; put 'put ''Il1dLGNhbGxiYWNrOmY9Pntjb25zdCB2PXRoaXMuaHRFZGl0b3I7bGV0IE0sRDtpZih2LmdldFNlbGVjdGVkTGFzdCgpfHx2LmZsaXBwZWQpe2lmKHYuZ2V0U2VsZWN0ZWRMYXN0KCkpaWYodi5mbGlwcGVkKU09di5nZXRTZWxlY3RlZExhc3QoKVswXSsxO2Vsc2UgaWYoIXYuZmxpcHBlZCl7''@;'; put 'put ''Y29uc3QgWj12LmNvdW50Um93cygpLTE7RD12LmdldFNlbGVjdGVkTGFzdCgpWzBdLE09TWF0aC5taW4oWixEKzEpfX1lbHNlIE09MDtyZXR1cm4gaChNLGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpScGUscmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5y''@;'; put 'put ''ZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFJwZSl9fWZ1bmN0aW9uIExwZShjLGwsYSl7T3BlKGMsbCksbC5zZXQoYyxh''@;'; put 'put ''KX1mdW5jdGlvbiBPcGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUaXQoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gQWl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBJWChjLGwpe3JldHVybiBjLmdldChSWChjLGwpKX1mdW5jdGlvbiBSWChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6''@;'; put 'put ''Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIExYPW5ldyBXZWFrTWFwLFBwZT1uZXcgV2Vha01hcCxPWD1uZXcgV2Vha1NldDtjbGFzcyBQ''@;'; put 'put ''WCBleHRlbmRzIERYe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBFaXQoYyxsKXtPcGUoYyxsKSxsLmFkZChjKX0odGhpcyxPWCksalAodGhpcywicXVlcnkiLG51bGwpLGpQKHRoaXMsInN0cmlwcGVkQ2hvaWNlcyIsW10pLGpQKHRoaXMsInJhd0Nob2ljZXMi''@;'; put 'put ''LFtdKSxMcGUodGhpcyxMWCx0aGlzLmhvdC5ndWlkLnNsaWNlKDAsOSkpLExwZSh0aGlzLFBwZSxTRSgoKT0+e3RoaXMuZm9jdXMoKX0sMTAwKSksalAodGhpcywic29ydEJ5UmVsZXZhbmNlIixmdW5jdGlvbihsLGEsZCl7Y29uc3QgaD1bXSxmPVtdLHY9bC5sZW5ndGg7bGV0IEQsWixyZSxj''@;'; put 'put ''ZSxNPWEubGVuZ3RoO2lmKDA9PT12KXtmb3IocmU9MDtyZTxNO3JlKyspZi5wdXNoKHJlKTtyZXR1cm4gZn1mb3IocmU9MDtyZTxNO3JlKyspe2lmKFo9ZiQobGMoYVtyZV0pKSxkKWNlPVouaW5kZXhPZihsKTtlbHNle2NvbnN0IGJlPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO2NlPVou''@;'; put 'put ''dG9Mb2NhbGVMb3dlckNhc2UoYmUpLmluZGV4T2YobC50b0xvY2FsZUxvd2VyQ2FzZShiZSkpfS0xIT09Y2UmJihEPVoubGVuZ3RoLWNlLXYsaC5wdXNoKHtiYXNlSW5kZXg6cmUsaW5kZXg6Y2UsY2hhcnNMZWZ0OkQsdmFsdWU6Wn0pKX1mb3IoaC5zb3J0KChiZSxFZSk9PntpZigtMT09PUVl''@;'; put 'put ''LmluZGV4KXJldHVybi0xO2lmKC0xPT09YmUuaW5kZXgpcmV0dXJuIDE7aWYoYmUuaW5kZXg8RWUuaW5kZXgpcmV0dXJuLTE7aWYoRWUuaW5kZXg8YmUuaW5kZXgpcmV0dXJuIDE7aWYoYmUuaW5kZXg9PT1FZS5pbmRleCl7aWYoYmUuY2hhcnNMZWZ0PEVlLmNoYXJzTGVmdClyZXR1cm4tMTtp''@;'; put 'put ''ZihiZS5jaGFyc0xlZnQ+RWUuY2hhcnNMZWZ0KXJldHVybiAxfXJldHVybiAwfSkscmU9MCxNPWgubGVuZ3RoO3JlPE07cmUrKylmLnB1c2goaFtyZV0uYmFzZUluZGV4KTtyZXR1cm4gZn0pfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYXV0b2NvbXBsZXRlIn1nZXRWYWx1ZSgp''@;'; put 'put ''e2NvbnN0IGw9dGhpcy5yYXdDaG9pY2VzLmZpbmQoYT0+dGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQoYSk9PT10aGlzLlRFWFRBUkVBLnZhbHVlKTtyZXR1cm4gUGEobCk/bDp0aGlzLlRFWFRBUkVBLnZhbHVlfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSxUaSh0aGlz''@;'; put 'put ''Lmh0Q29udGFpbmVyLCJhdXRvY29tcGxldGVFZGl0b3IiKSxUaSh0aGlzLmh0Q29udGFpbmVyLC0xPT09dGhpcy5ob3Qucm9vdFdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiTWFjIik/IiI6Imh0TWFjU2Nyb2xsIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYm''@;'; put 'put ''dm8odGhpcy5URVhUQVJFQSxbWyJ0eXBlIiwidGV4dCJdLFsicm9sZSIsImNvbWJvYm94Il0sUzJlKCJsaXN0Ym94IiksWyJhcmlhLWF1dG9jb21wbGV0ZSIsImxpc3QiXV0pfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKCkuYXJpYVRhZ3MmJnZvKHRoaXMuVEVYVEFSRUEsW04yKCJmYWxzZSIpLE1xZShgJHtJWChMWCx0aGlzKX0tbGlzdGJveC0ke2x9LSR7YX1gKV0pfW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bnx8dGhpcy5j''@;'; put 'put ''ZWxsUHJvcGVydGllcy50cmltRHJvcGRvd24sYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzLGQ9QXJyYXkuaXNBcnJheSh0aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZSk/dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U6bnVsbCxoPWQ/Lmxlbmd0aCx7cm93OmYsY29sOnZ9PXRo''@;'; put 'put ''aXM7dGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpLHRoaXMuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsTT0+dGhpcy5vbkJlZm9yZUtleURvd24oTSkpLHRoaXMuaHRFZGl0b3IuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLElYKFBwZSx0aGlzKSksdGhpcy5odEVkaXRvci51''@;'; put 'put ''cGRhdGVTZXR0aW5ncyh7Y29sV2lkdGhzOmw/W3N1KHRoaXMuVEVYVEFSRUEpLTJdOnZvaWQgMCxhdXRvQ29sdW1uU2l6ZTohMCxyZW5kZXJlcjooTSxELFoscmUsY2UsYmUsRWUpPT57QTUoTSxELFoscmUsY2UsYmUsRWUpO2NvbnN0e2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6QmUsYWxsb3dI''@;'; put 'put ''dG1sOnFlLGxvY2FsZTpydH09dGhpcy5jZWxsUHJvcGVydGllcyxwdD10aGlzLnF1ZXJ5O2xldCBKdCx2bixkdD1sYyhiZSk7ZHQmJiFxZSYmKEp0PSEwPT09QmU/ZHQuaW5kZXhPZihwdCk6ZHQudG9Mb2NhbGVMb3dlckNhc2UocnQpLmluZGV4T2YocHQudG9Mb2NhbGVMb3dlckNhc2UocnQp''@;'; put 'put ''KSwtMSE9PUp0JiYodm49ZHQuc3Vic3RyKEp0LHB0Lmxlbmd0aCksZHQ9ZHQucmVwbGFjZSh2bixgPHN0cm9uZz4ke3ZufTwvc3Ryb25nPmApKSksYSYmdm8oRCxbWyJyb2xlIiwib3B0aW9uIl0sLi4uZD9bQXFlKGgpXTpbXSwuLi5kP1trcWUoZC5pbmRleE9mKGJlKSsxKV06W10sWyJpZCIs''@;'; put 'put ''YCR7dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5pZH1fJHtafS0ke3JlfWBdXSksRC5pbm5lckhUTUw9ZHR9LGFmdGVyU2VsZWN0aW9uRW5kOihNLEQpPT57aWYoYSl7Y29uc3QgWj1jZT0+e3ZvKGNlLFtbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dKSx2byh0aGlzLlRFWFRBUkVBLC4uLihj''@;'; put 'put ''PT5bImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsY10pKGNlLmlkKSl9LHJlPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEQsITApO251bGwhPT1yZT9aKHJlKTp0aGlzLmh0RWRpdG9yLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT57Y29uc3QgY2U9dGhpcy5odEVkaXRv''@;'; put 'put ''ci5nZXRDZWxsKE0sRCwhMCk7WihjZSl9KX19fSksYSYmKHZvKHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RPdmVybGF5cy53dFRhYmxlLlRBQkxFLCJyb2xlIiwicHJlc2VudGF0aW9uIiksdm8odGhpcy5odEVkaXRvci5yb290RWxlbWVudCxbWyJyb2xlIiwibGlzdGJveCJdLEVxZSgicG9s''@;'; put 'put ''aXRlIiksVHFlKCJ0ZXh0IiksWyJpZCIsYCR7SVgoTFgsdGhpcyl9LWxpc3Rib3gtJHtmfS0ke3Z9YF1dKSx2byh0aGlzLlRFWFRBUkVBLC4uLk4yKCJ0cnVlIikpKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9''@;'; put 'put ''KX1jbG9zZSgpe3RoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5URVhUQVJFQSxbTjIoImZhbHNlIildKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRpc2NhcmRFZGl0b3Io''@;'; put 'put ''bCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2ljZXMobCl7Y29uc3QgYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTt0aGlzLnF1ZXJ5PWwsImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsbCxkPT57dGhpcy5yYXdDaG9pY2VzPWQsdGhp''@;'; put 'put ''cy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoZCkpfSk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5yYXdDaG9pY2VzPWEsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoYSkpKTp0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KFtd''@;'; put 'put ''KX11cGRhdGVDaG9pY2VzTGlzdChsKXtjb25zdCBhPXckKHRoaXMuVEVYVEFSRUEpLGQ9VjJlKHRoaXMuVEVYVEFSRUEpLGg9dGhpcy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2UsZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcjtsZXQgdj1udWxsLE09bnVsbCxEPWw7aCYmKHY9''@;'; put 'put ''dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxELHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSkpO2NvbnN0IFo9QXJyYXkuaXNBcnJheSh2KT92Lmxlbmd0aDowO2lmKCExPT09ZilaJiYoTT12WzBd''@;'; put 'put ''KTtlbHNle2NvbnN0IHJlPVtdO2ZvcihsZXQgY2U9MCxiZT1ELmxlbmd0aDtjZTxiZSYmIShoJiZaPD1jZSk7Y2UrKylyZS5wdXNoKFo/RFt2W2NlXV06RFtjZV0pO009MCxEPXJlfXRoaXMuc3RyaXBwZWRDaG9pY2VzPUQsdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5''@;'; put 'put ''PTA9PT1ELmxlbmd0aD8ibm9uZSI6IiIsdGhpcy5odEVkaXRvci5sb2FkRGF0YShkRShbRF0pKSxELmxlbmd0aD4wJiYodGhpcy51cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93bklmTmVlZGVkKCksITA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdCYmdGhp''@;'; put 'put ''cy5oaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UoTSkpLHRoaXMuaG90Lmxpc3RlbigpLF9FKHRoaXMuVEVYVEFSRUEsYSxhPT09ZD92b2lkIDA6ZCl9ZmxpcERyb3Bkb3duSWZOZWVkZWQoKXtjb25zdCBsPXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxhPWwuaGVpZ2h0O2xldCBkPWwudG9w''@;'; put 'put ''O2lmKHRoaXMuaG90LnZpZXcuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IE09dGhpcy5ob3Qudmlldy5nZXRUYWJsZU9mZnNldCgpLnRvcC10aGlzLmhvdC5yb290V2luZG93LnNjcm9sbFk7ZD1NYXRoLm1heChkK00sMCl9Y29uc3QgaD10aGlzLmdldEhlaWdodCgp''@;'; put 'put ''LGY9dGhpcy5ob3Qudmlldy5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1kLWEsdj1oPmYmJmQ+ZithO3JldHVybiB2P3RoaXMuZmxpcERyb3Bkb3duKGgpOnRoaXMudW5mbGlwRHJvcGRvd24oKSx0aGlzLmxpbWl0RHJvcGRvd25JZk5lZWRlZCh2P2Q6ZixoKSx2fWxpbWl0RHJvcGRvd25JZk5lZWRl''@;'; put 'put ''ZChsLGEpe2lmKGE+bCl7bGV0IGQ9MCxoPTAsZj0wLHY9bnVsbDtkb3tmPXRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KGgpfHx0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpLGQrPWYsaCs9MX13aGlsZShkPGwpO3Y9ZC1mLHRoaXMuaHRFZGl0b3IuZmxpcHBlZCYm''@;'; put 'put ''KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSthLXYrInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWYpfX1mbGlwRHJvcGRvd24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLnJv''@;'; put 'put ''b3RFbGVtZW50LnN0eWxlO2EucG9zaXRpb249ImFic29sdXRlIixhLnRvcD0tbCsicHgiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD0hMH11bmZsaXBEcm9wZG93bigpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIs''@;'; put 'put ''dGhpcy5odEVkaXRvci5mbGlwcGVkPXZvaWQgMH11cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKXt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0SGVpZ2h0KCl9KSxSWChPWCx0aGlzLEZwZSkuY2FsbCh0aGlzKSx0aGlz''@;'; put 'put ''Lmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bkb3duSGVpZ2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdodDpsfSksUlgoT1gsdGhpcyxGcGUpLmNhbGwodGhpcyksdGhpcy5odEVkaXRv''@;'; put 'put ''ci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKX1oaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UobCl7Im51bWJlciI9PXR5cGVvZiBsP3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbChsLDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsITEpOnRoaXMu''@;'; put 'put ''aHRFZGl0b3IuZGVzZWxlY3RDZWxsKCl9Z2V0SGVpZ2h0KCl7Y29uc3QgbD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5odENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLGE9cGFyc2VJbnQobC5ib3JkZXJUb3BXaWR0aCwxMCkrcGFyc2VJbnQo''@;'; put 'put ''bC5ib3JkZXJCb3R0b21XaWR0aCwxMCksZD1NYXRoLm1pbih0aGlzLmNlbGxQcm9wZXJ0aWVzLnZpc2libGVSb3dzLHRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0aCk7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpkfSwoZix2KT0+dikucmVkdWNlKChmLHYpPT5mKyh0aGlzLmh0RWRpdG9y''@;'; put 'put ''LmdldFJvd0hlaWdodCh2KXx8dGhpcy5odEVkaXRvci52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSksMCkrYSsxfWdldFdpZHRoKCl7Y29uc3QgbD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5odENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikp''@;'; put 'put ''LGE9cGFyc2VJbnQobC5ib3JkZXJJbmxpbmVTdGFydFdpZHRoLDEwKStwYXJzZUludChsLmJvcmRlcklubGluZUVuZFdpZHRoLDEwKTtyZXR1cm4gdGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKSthfXN0cmlwVmFsdWVJZk5lZWRlZChsKXtyZXR1cm4gdGhpcy5zdHJpcFZhbHVlc0lmTmVl''@;'; put 'put ''ZGVkKFtsXSlbMF19c3RyaXBWYWx1ZXNJZk5lZWRlZChsKXtjb25zdHthbGxvd0h0bWw6YX09dGhpcy5jZWxsUHJvcGVydGllcyxkPXlzKGwsZj0+bGMoZikpO3JldHVybiB5cyhkLGY9PmE/ZjpmJChmKSl9YWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRv''@;'; put 'put ''ci5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGRfcm93PWE/YS5mcm9tLnJvdzotMTtsZXQgaD0hMTtyZXR1cm4gbD09PVlhLkFSUk9XX0RPV04mJmRfcm93PjAmJmRfcm93PHRoaXMuaHRFZGl0b3IuY291bnRSb3dzKCktMSYmKGg9ITApLGw9PT1ZYS5BUlJPV19VUCYmZF9yb3c+LTEmJihoPSEw''@;'; put 'put ''KSxofW9uQmVmb3JlS2V5RG93bihsKXtpZihRMmUobC5rZXlDb2RlKXx8bC5rZXlDb2RlPT09WWEuQkFDS1NQQUNFfHxsLmtleUNvZGU9PT1ZYS5ERUxFVEV8fGwua2V5Q29kZT09PVlhLklOU0VSVCl7bGV0IGE9MTA7aWYobC5rZXlDb2RlPT09WWEuQyYmKGwuY3RybEtleXx8bC5tZXRhS2V5''@;'; put 'put ''KSlyZXR1cm47dGhpcy5pc09wZW5lZCgpfHwoYSs9MTApLHRoaXMuaHRFZGl0b3ImJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0sYSl9fX1mdW5jdGlvbiBGcGUoKXt0aGlzLmh0RWRpdG9yLnZpZXcuaGFzVmVy''@;'; put 'put ''dGljYWxTY3JvbGwoKSYmdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRXaWR0aCgpK2YwKHRoaXMuaG90LnJvb3REb2N1bWVudCl9KX1jbGFzcyBIcGUgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdpbkVk''@;'; put 'put ''aXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUmJiJURCI9PT1hLnRhcmdldC5ub2RlTmFtZSl7Y29uc3QgZD10aGlzLlRELnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTtwbyhkLCJodEJhZFZhbHVlIil8fGQuY2xpY2soKX19ZmluaXNoRWRpdGluZygp''@;'; put 'put ''e31pbml0KCl7fW9wZW4oKXt9Y2xvc2UoKXt9Z2V0VmFsdWUoKXt9c2V0VmFsdWUoKXt9Zm9jdXMoKXt9fWNvbnN0IEdtPSgpPT53aW5kb3csJDI9KCk9PndpbmRvdy5kb2N1bWVudCxGWD0oYyxsKT0+d2luZG93LnNldFRpbWVvdXQoYyxsKSxIcD1mdW5jdGlvbihjLGwsYSxkKXtjLmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIobCxhLCEhZCl9LGs1PWZ1bmN0aW9uKGMsbCxhLGQpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsISFkKX0sSWg9ZnVuY3Rpb24oYyxsKXtyZXR1cm4tMSE9PSgiICIrYy5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIitsKyIgIil9LEhYPWZ1bmN0aW9uKGMsbCl7SWgo''@;'; put 'put ''YyxsKXx8KGMuY2xhc3NOYW1lPSIiPT09Yy5jbGFzc05hbWU/bDpjLmNsYXNzTmFtZSsiICIrbCl9LE5YPWZ1bmN0aW9uKGMsbCl7Yy5jbGFzc05hbWU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMudHJpbT9jLnRyaW0oKTpjLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oKCIgIitjLmNsYXNzTmFt''@;'; put 'put ''ZSsiICIpLnJlcGxhY2UoIiAiK2wrIiAiLCIgIikpfSxWWD1mdW5jdGlvbihjKXtyZXR1cm4vQXJyYXkvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKX0sUmg9ZnVuY3Rpb24oYyl7cmV0dXJuL0RhdGUvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs''@;'; put 'put ''KGMpKSYmIWlzTmFOKGMuZ2V0VGltZSgpKX0sUml0PWZ1bmN0aW9uKGMpe2xldCBsPWMuZ2V0RGF5KCk7cmV0dXJuIDA9PT1sfHw2PT09bH0sTGl0PWZ1bmN0aW9uKGMpe3JldHVybiBjJTQ9PTAmJmMlMTAwIT0wfHxjJTQwMD09MH0sTnBlPWZ1bmN0aW9uKGMsbCl7cmV0dXJuWzMxLExpdChj''@;'; put 'put ''KT8yOToyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bbF19LHpQPWZ1bmN0aW9uKGMpe1JoKGMpJiZjLnNldEhvdXJzKDAsMCwwLDApfSxVUD1mdW5jdGlvbihjLGwpe3JldHVybiBjLmdldFRpbWUoKT09PWwuZ2V0VGltZSgpfSxaUD1mdW5jdGlvbihjLGwsYSl7bGV0IGQsaDtm''@;'; put 'put ''b3IoZCBpbiBsKWg9dm9pZCAwIT09Y1tkXSxoJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0mJm51bGwhPT1sW2RdJiZ2b2lkIDA9PT1sW2RdLm5vZGVOYW1lP1JoKGxbZF0pP2EmJihjW2RdPW5ldyBEYXRlKGxbZF0uZ2V0VGltZSgpKSk6VlgobFtkXSk/YSYmKGNbZF09bFtkXS5zbGljZSgwKSk6''@;'; put 'put ''Y1tkXT1aUCh7fSxsW2RdLGEpOihhfHwhaCkmJihjW2RdPWxbZF0pO3JldHVybiBjfSxWcGU9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPSQyKCkuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtkLmluaXRFdmVudChsLCEwLCExKSxkPVpQKGQsYSksYy5kaXNwYXRjaEV2ZW50KGQpfSxCcGU9ZnVu''@;'; put 'put ''Y3Rpb24oYyl7cmV0dXJuIGMubW9udGg8MCYmKGMueWVhci09TWF0aC5jZWlsKE1hdGguYWJzKGMubW9udGgpLzEyKSxjLm1vbnRoKz0xMiksYy5tb250aD4xMSYmKGMueWVhcis9TWF0aC5mbG9vcihNYXRoLmFicyhjLm1vbnRoKS8xMiksYy5tb250aC09MTIpLGN9LE5wPXtmaWVsZDpudWxs''@;'; put 'put ''LGJvdW5kOnZvaWQgMCxhcmlhTGFiZWw6IlVzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZSIscG9zaXRpb246ImJvdHRvbSBsZWZ0IixyZXBvc2l0aW9uOiEwLGZvcm1hdDoiWVlZWS1NTS1ERCIsdG9TdHJpbmc6bnVsbCxwYXJzZTpudWxsLGRlZmF1bHREYXRlOm51bGwsc2V0RGVm''@;'; put 'put ''YXVsdERhdGU6ITEsZmlyc3REYXk6MCxmaXJzdFdlZWtPZlllYXJNaW5EYXlzOjQsZm9ybWF0U3RyaWN0OiExLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwseWVhclJhbmdlOjEwLHNob3dXZWVrTnVtYmVyOiExLHBpY2tXaG9sZVdlZWs6ITEsbWluWWVhcjowLG1heFllYXI6OTk5OSxtaW5N''@;'; put 'put ''b250aDp2b2lkIDAsbWF4TW9udGg6dm9pZCAwLHN0YXJ0UmFuZ2U6bnVsbCxlbmRSYW5nZTpudWxsLGlzUlRMOiExLHllYXJTdWZmaXg6IiIsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ITEsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFu''@;'; put 'put ''ZFByZXZpb3VzTW9udGhzOiExLG51bWJlck9mTW9udGhzOjEsbWFpbkNhbGVuZGFyOiJsZWZ0Iixjb250YWluZXI6dm9pZCAwLGJsdXJGaWVsZE9uU2VsZWN0OiEwLGkxOG46e3ByZXZpb3VzTW9udGg6IlByZXZpb3VzIE1vbnRoIixuZXh0TW9udGg6Ik5leHQgTW9udGgiLG1vbnRoczpbIkph''@;'; put 'put ''bnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sd2Vla2RheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNk''@;'; put 'put ''YXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHdlZWtkYXlzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXX0sdGhlbWU6bnVsbCxldmVudHM6W10sb25TZWxlY3Q6bnVsbCxvbk9wZW46bnVsbCxvbkNsb3NlOm51bGwsb25EcmF3Om51bGwsa2V5Ym9hcmRJ''@;'; put 'put ''bnB1dDohMH0sanBlPWZ1bmN0aW9uKGMsbCxhKXtmb3IobCs9Yy5maXJzdERheTtsPj03OylsLT03O3JldHVybiBhP2MuaTE4bi53ZWVrZGF5c1Nob3J0W2xdOmMuaTE4bi53ZWVrZGF5c1tsXX0sT2l0PWZ1bmN0aW9uKGMpe2xldCBsPVtdLGE9ImZhbHNlIjtpZihjLmlzRW1wdHkpe2lmKCFj''@;'; put 'put ''LnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpcmV0dXJuJzx0ZCBjbGFzcz0iaXMtZW1wdHkiPjwvdGQ+JztsLnB1c2goImlzLW91dHNpZGUtY3VycmVudC1tb250aCIpLGMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfHxsLnB1c2goImlzLXNlbGVj''@;'; put 'put ''dGlvbi1kaXNhYmxlZCIpfXJldHVybiBjLmlzRGlzYWJsZWQmJmwucHVzaCgiaXMtZGlzYWJsZWQiKSxjLmlzVG9kYXkmJmwucHVzaCgiaXMtdG9kYXkiKSxjLmlzU2VsZWN0ZWQmJihsLnB1c2goImlzLXNlbGVjdGVkIiksYT0idHJ1ZSIpLGMuaGFzRXZlbnQmJmwucHVzaCgiaGFzLWV2ZW50''@;'; put 'put ''IiksYy5pc0luUmFuZ2UmJmwucHVzaCgiaXMtaW5yYW5nZSIpLGMuaXNTdGFydFJhbmdlJiZsLnB1c2goImlzLXN0YXJ0cmFuZ2UiKSxjLmlzRW5kUmFuZ2UmJmwucHVzaCgiaXMtZW5kcmFuZ2UiKSwnPHRkIGRhdGEtZGF5PSInK2MuZGF5KyciIGNsYXNzPSInK2wuam9pbigiICIpKyciIGFy''@;'; put 'put ''aWEtc2VsZWN0ZWQ9IicrYSsnIj48YnV0dG9uIGNsYXNzPSJwaWthLWJ1dHRvbiBwaWthLWRheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBpa2EteWVhcj0iJytjLnllYXIrJyIgZGF0YS1waWthLW1vbnRoPSInK2MubW9udGgrJyIgZGF0YS1waWthLWRheT0iJytjLmRheSsnIj4nK2MuZGF5KyI8''@;'; put 'put ''L2J1dHRvbj48L3RkPiJ9LEZpdD1mdW5jdGlvbihjLGwsYSxkLGgpe2xldCBmPW5ldyBEYXRlKGQsYSxsKTtyZXR1cm4nPHRkIGNsYXNzPSJwaWthLXdlZWsiPicrKGMuaGFzTW9tZW50P2MubW9tZW50KGYpLmlzb1dlZWsoKTpmdW5jdGlvbihjLGwpe2Muc2V0SG91cnMoMCwwLDAsMCk7bGV0''@;'; put 'put ''IGE9Yy5nZXREYXRlKCksZD1jLmdldERheSgpLGg9bCxmPWgtMSxNPWZ1bmN0aW9uKGJlKXtyZXR1cm4oYmUrNy0xKSU3fTtjLnNldERhdGUoYStmLU0oZCkpO2xldCBEPW5ldyBEYXRlKGMuZ2V0RnVsbFllYXIoKSwwLGgpLHJlPShjLmdldFRpbWUoKS1ELmdldFRpbWUoKSkvODY0ZTU7cmV0''@;'; put 'put ''dXJuIDErTWF0aC5yb3VuZCgocmUtZitNKEQuZ2V0RGF5KCkpKS83KX0oZixoKSkrIjwvdGQ+In0sSGl0PWZ1bmN0aW9uKGMsbCxhLGQpe3JldHVybic8dHIgY2xhc3M9InBpa2Etcm93JysoYT8iIHBpY2std2hvbGUtd2VlayI6IiIpKyhkPyIgaXMtc2VsZWN0ZWQiOiIiKSsnIj4nKyhsP2Mu''@;'; put 'put ''cmV2ZXJzZSgpOmMpLmpvaW4oIiIpKyI8L3RyPiJ9LEJpdD1mdW5jdGlvbihjLGwsYSxkLGgsZil7bGV0IHYsTSxELEVlLEJlLFo9Yy5fbyxyZT1hPT09Wi5taW5ZZWFyLGNlPWE9PT1aLm1heFllYXIsYmU9JzxkaXYgaWQ9IicrZisnIiBjbGFzcz0icGlrYS10aXRsZSIgcm9sZT0iaGVhZGlu''@;'; put 'put ''ZyIgYXJpYS1saXZlPSJwb2xpdGUiPicscWU9ITAscnQ9ITA7Zm9yKEQ9W10sdj0wO3Y8MTI7disrKUQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJysoYT09PWg/di1sOjEyK3YtbCkrJyInKyh2PT09ZD8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsocmUmJnY8Wi5taW5Nb250aHx8Y2UmJnY+''@;'; put 'put ''Wi5tYXhNb250aD8nIGRpc2FibGVkPSJkaXNhYmxlZCInOiIiKSsiPiIrWi5pMThuLm1vbnRoc1t2XSsiPC9vcHRpb24+Iik7Zm9yKEVlPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK1ouaTE4bi5tb250aHNbZF0rJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LW1v''@;'; put 'put ''bnRoIiB0YWJpbmRleD0iLTEiPicrRC5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixWWChaLnllYXJSYW5nZSk/KHY9Wi55ZWFyUmFuZ2VbMF0sTT1aLnllYXJSYW5nZVsxXSsxKToodj1hLVoueWVhclJhbmdlLE09MSthK1oueWVhclJhbmdlKSxEPVtdO3Y8TSYmdjw9Wi5tYXhZZWFyO3Yr''@;'; put 'put ''Kyl2Pj1aLm1pblllYXImJkQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJyt2KyciJysodj09PWE/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK3YrIjwvb3B0aW9uPiIpO3JldHVybiBCZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JythK1oueWVhclN1ZmZpeCsnPHNlbGVjdCBjbGFz''@;'; put 'put ''cz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhciIgdGFiaW5kZXg9Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsYmUrPVouc2hvd01vbnRoQWZ0ZXJZZWFyP0JlK0VlOkVlK0JlLHJlJiYoMD09PWR8fFoubWluTW9udGg+PWQpJiYocWU9ITEpLGNlJiYoMTE9PT1kfHxa''@;'; put 'put ''Lm1heE1vbnRoPD1kKSYmKHJ0PSExKSwwPT09bCYmKGJlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1wcmV2JysocWU/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytaLmkxOG4ucHJldmlvdXNNb250aCsiPC9idXR0b24+IiksbD09PWMuX28ubnVtYmVyT2ZNb250aHMtMSYm''@;'; put 'put ''KGJlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0JysocnQ/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytaLmkxOG4ubmV4dE1vbnRoKyI8L2J1dHRvbj4iKSxiZSsiPC9kaXY+In07ZnVuY3Rpb24gQlgoYyl7bGV0IGw9dGhpcyxhPWwuY29uZmlnKGMpO2wuX29uTW91''@;'; put 'put ''c2VEb3duPWZ1bmN0aW9uKGgpe2lmKCFsLl92KXJldHVybjtsZXQgZj0oaD1ofHxHbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudDtpZihmKWlmKEloKGYsImlzLWRpc2FibGVkIil8fCghSWgoZiwicGlrYS1idXR0b24iKXx8SWgoZiwiaXMtZW1wdHkiKXx8SWgoZi5wYXJlbnROb2Rl''@;'; put 'put ''LCJpcy1kaXNhYmxlZCIpP0loKGYsInBpa2EtcHJldiIpP2wucHJldk1vbnRoKCk6SWgoZiwicGlrYS1uZXh0IikmJmwubmV4dE1vbnRoKCk6KGwuc2V0RGF0ZShuZXcgRGF0ZShmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLXllYXIiKSxmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLW1vbnRo''@;'; put 'put ''IiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1kYXkiKSkpLGEuYm91bmQmJkZYKGZ1bmN0aW9uKCl7bC5oaWRlKCksYS5ibHVyRmllbGRPblNlbGVjdCYmYS5maWVsZCYmYS5maWVsZC5ibHVyKCl9LDEwMCkpKSxJaChmLCJwaWthLXNlbGVjdCIpKWwuX2M9ITA7ZWxzZXtpZighaC5wcmV2''@;'; put 'put ''ZW50RGVmYXVsdClyZXR1cm4gaC5yZXR1cm5WYWx1ZT0hMSwhMTtoLnByZXZlbnREZWZhdWx0KCl9fSxsLl9vbkNoYW5nZT1mdW5jdGlvbihoKXtsZXQgZj0oaD1ofHxHbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudDtmJiYoSWgoZiwicGlrYS1zZWxlY3QtbW9udGgiKT9sLmdvdG9N''@;'; put 'put ''b250aChmLnZhbHVlKTpJaChmLCJwaWthLXNlbGVjdC15ZWFyIikmJmwuZ290b1llYXIoZi52YWx1ZSkpfSxsLl9vbktleUNoYW5nZT1mdW5jdGlvbihoKXtpZihoPWh8fEdtKCkuZXZlbnQsbC5pc1Zpc2libGUoKSlzd2l0Y2goaC5rZXlDb2RlKXtjYXNlIDEzOmNhc2UgMjc6YS5maWVsZCYm''@;'; put 'put ''YS5maWVsZC5ibHVyKCk7YnJlYWs7Y2FzZSAzNzpsLmFkanVzdERhdGUoInN1YnRyYWN0IiwxKTticmVhaztjYXNlIDM4OmwuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpO2JyZWFrO2Nhc2UgMzk6bC5hZGp1c3REYXRlKCJhZGQiLDEpO2JyZWFrO2Nhc2UgNDA6bC5hZGp1c3REYXRlKCJhZGQi''@;'; put 'put ''LDcpO2JyZWFrO2Nhc2UgODpjYXNlIDQ2Omwuc2V0RGF0ZShudWxsKX19LGwuX3BhcnNlRmllbGRWYWx1ZT1mdW5jdGlvbigpe2lmKGEucGFyc2UpcmV0dXJuIGEucGFyc2UoYS5maWVsZC52YWx1ZSxhLmZvcm1hdCk7aWYodGhpcy5oYXNNb21lbnQpe2xldCBoPXRoaXMubW9tZW50KGEuZmll''@;'; put 'put ''bGQudmFsdWUsYS5mb3JtYXQsYS5mb3JtYXRTdHJpY3QpO3JldHVybiBoJiZoLmlzVmFsaWQoKT9oLnRvRGF0ZSgpOm51bGx9cmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UoYS5maWVsZC52YWx1ZSkpfSxsLl9vbklucHV0Q2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmO2guZmlyZWRCeSE9PWwm''@;'; put 'put ''JihmPWwuX3BhcnNlRmllbGRWYWx1ZSgpLFJoKGYpJiZsLnNldERhdGUoZiksbC5fdnx8bC5zaG93KCkpfSxsLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXtsLnNob3coKX0sbC5fb25JbnB1dENsaWNrPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5wdXRCbHVyPWZ1bmN0aW9uKCl7bGV0''@;'; put 'put ''IGg9JDIoKS5hY3RpdmVFbGVtZW50O2Rve2lmKEloKGgsInBpa2Etc2luZ2xlIikpcmV0dXJufXdoaWxlKGg9aC5wYXJlbnROb2RlKTtsLl9jfHwobC5fYj1GWChmdW5jdGlvbigpe2wuaGlkZSgpfSw1MCkpLGwuX2M9ITF9LGwuX29uQ2xpY2s9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8R20o''@;'; put 'put ''KS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQsdj1mO2lmKGYpeyFoYXNFdmVudExpc3RlbmVycyYmSWgoZiwicGlrYS1zZWxlY3QiKSYmKGYub25jaGFuZ2V8fChmLnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCJyZXR1cm47IiksSHAoZiwiY2hhbmdlIixsLl9vbkNoYW5nZSkpKTtkb3tp''@;'; put 'put ''ZihJaCh2LCJwaWthLXNpbmdsZSIpfHx2PT09YS50cmlnZ2VyKXJldHVybn13aGlsZSh2PXYucGFyZW50Tm9kZSk7bC5fdiYmZiE9PWEudHJpZ2dlciYmdiE9PWEudHJpZ2dlciYmbC5oaWRlKCl9fSxsLmVsPSQyKCkuY3JlYXRlRWxlbWVudCgiZGl2IiksbC5lbC5jbGFzc05hbWU9InBpa2Et''@;'; put 'put ''c2luZ2xlIisoYS5pc1JUTD8iIGlzLXJ0bCI6IiIpKyhhLnRoZW1lPyIgIithLnRoZW1lOiIiKSxIcChsLmVsLCJtb3VzZWRvd24iLGwuX29uTW91c2VEb3duLCEwKSxIcChsLmVsLCJ0b3VjaGVuZCIsbC5fb25Nb3VzZURvd24sITApLEhwKGwuZWwsImNoYW5nZSIsbC5fb25DaGFuZ2UpLGEu''@;'; put 'put ''a2V5Ym9hcmRJbnB1dCYmSHAoJDIoKSwia2V5ZG93biIsbC5fb25LZXlDaGFuZ2UpLGEuZmllbGQmJihhLmNvbnRhaW5lcj9hLmNvbnRhaW5lci5hcHBlbmRDaGlsZChsLmVsKTphLmJvdW5kPyQyKCkuYm9keS5hcHBlbmRDaGlsZChsLmVsKTphLmZpZWxkLnBhcmVudE5vZGUuaW5zZXJ0QmVm''@;'; put 'put ''b3JlKGwuZWwsYS5maWVsZC5uZXh0U2libGluZyksSHAoYS5maWVsZCwiY2hhbmdlIixsLl9vbklucHV0Q2hhbmdlKSxhLmRlZmF1bHREYXRlfHwoYS5kZWZhdWx0RGF0ZT1sLl9wYXJzZUZpZWxkVmFsdWUoKSxhLnNldERlZmF1bHREYXRlPSEwKSk7bGV0IGQ9YS5kZWZhdWx0RGF0ZTtSaChk''@;'; put 'put ''KT9hLnNldERlZmF1bHREYXRlP2wuc2V0RGF0ZShkLCEwKTpsLmdvdG9EYXRlKGQpOmwuZ290b0RhdGUobmV3IERhdGUpLGEuYm91bmQ/KHRoaXMuaGlkZSgpLGwuZWwuY2xhc3NOYW1lKz0iIGlzLWJvdW5kIixIcChhLnRyaWdnZXIsImNsaWNrIixsLl9vbklucHV0Q2xpY2spLEhwKGEudHJp''@;'; put 'put ''Z2dlciwiZm9jdXMiLGwuX29uSW5wdXRGb2N1cyksSHAoYS50cmlnZ2VyLCJibHVyIixsLl9vbklucHV0Qmx1cikpOnRoaXMuc2hvdygpfWZ1bmN0aW9uIHpwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWml0KGMpe3ZhciBsPWZ1bmN0aW9uIFdpdChjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24galgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUJYLnByb3RvdHlwZT17Y29uZmlnOmZ1bmN0aW9uKGMpe3RoaXMuX298fCh0aGlzLl9vPVpQKHt9LE5wLCEwKSk7bGV0IGw9WlAodGhpcy5fbyxjLCEwKTtsLmlzUlRMPSEhbC5pc1JUTCxsLmZpZWxkPWwuZmllbGQmJmwuZmllbGQubm9k''@;'; put 'put ''ZU5hbWU/bC5maWVsZDpudWxsLGwudGhlbWU9InN0cmluZyI9PXR5cGVvZiBsLnRoZW1lJiZsLnRoZW1lP2wudGhlbWU6bnVsbCxsLmJvdW5kPSEhKHZvaWQgMCE9PWwuYm91bmQ/bC5maWVsZCYmbC5ib3VuZDpsLmZpZWxkKSxsLnRyaWdnZXI9bC50cmlnZ2VyJiZsLnRyaWdnZXIubm9kZU5h''@;'; put 'put ''bWU/bC50cmlnZ2VyOmwuZmllbGQsbC5kaXNhYmxlV2Vla2VuZHM9ISFsLmRpc2FibGVXZWVrZW5kcyxsLmRpc2FibGVEYXlGbj0iZnVuY3Rpb24iPT10eXBlb2YgbC5kaXNhYmxlRGF5Rm4/bC5kaXNhYmxlRGF5Rm46bnVsbDtsZXQgYT1wYXJzZUludChsLm51bWJlck9mTW9udGhzLDEwKXx8''@;'; put 'put ''MTtpZihsLm51bWJlck9mTW9udGhzPWE+ND80OmEsUmgobC5taW5EYXRlKXx8KGwubWluRGF0ZT0hMSksUmgobC5tYXhEYXRlKXx8KGwubWF4RGF0ZT0hMSksbC5taW5EYXRlJiZsLm1heERhdGUmJmwubWF4RGF0ZTxsLm1pbkRhdGUmJihsLm1heERhdGU9bC5taW5EYXRlPSExKSxsLm1pbkRh''@;'; put 'put ''dGUmJnRoaXMuc2V0TWluRGF0ZShsLm1pbkRhdGUpLGwubWF4RGF0ZSYmdGhpcy5zZXRNYXhEYXRlKGwubWF4RGF0ZSksVlgobC55ZWFyUmFuZ2UpKXtsZXQgZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktMTA7bC55ZWFyUmFuZ2VbMF09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMF0sMTApfHxk''@;'; put 'put ''LGwueWVhclJhbmdlWzFdPXBhcnNlSW50KGwueWVhclJhbmdlWzFdLDEwKXx8ZH1lbHNlIGwueWVhclJhbmdlPU1hdGguYWJzKHBhcnNlSW50KGwueWVhclJhbmdlLDEwKSl8fE5wLnllYXJSYW5nZSxsLnllYXJSYW5nZT4xMDAmJihsLnllYXJSYW5nZT0xMDApO3JldHVybiBsfSx0b1N0cmlu''@;'; put 'put ''ZzpmdW5jdGlvbihjKXtyZXR1cm4gYz1jfHx0aGlzLl9vLmZvcm1hdCxSaCh0aGlzLl9kKT90aGlzLl9vLnRvU3RyaW5nP3RoaXMuX28udG9TdHJpbmcodGhpcy5fZCxjKTp0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKS5mb3JtYXQoYyk6dGhpcy5fZC50b0RhdGVTdHJpbmco''@;'; put 'put ''KToiIn0sZ2V0TW9tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpOm51bGx9LHNldE1vbWVudDpmdW5jdGlvbihjLGwpe3RoaXMuaGFzTW9tZW50JiZ0aGlzLm1vbWVudC5pc01vbWVudChjKSYmdGhpcy5zZXREYXRlKGMudG9EYXRlKCks''@;'; put 'put ''bCl9LHVzZU1vbWVudDpmdW5jdGlvbihjKXt0aGlzLmhhc01vbWVudD0hMCx0aGlzLm1vbWVudD1jfSxnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFJoKHRoaXMuX2QpP25ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKTpudWxsfSxzZXREYXRlOmZ1bmN0aW9uKGMsbCl7aWYoIWMpcmV0dXJu''@;'; put 'put ''IHRoaXMuX2Q9bnVsbCx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT0iIixWcGUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLHRoaXMuZHJhdygpO2lmKCJzdHJpbmciPT10eXBlb2YgYyYmKGM9bmV3IERhdGUoRGF0ZS5wYXJzZShjKSkpLCFSaChj''@;'; put 'put ''KSlyZXR1cm47bGV0IGE9dGhpcy5fby5taW5EYXRlLGQ9dGhpcy5fby5tYXhEYXRlO1JoKGEpJiZjPGE/Yz1hOlJoKGQpJiZjPmQmJihjPWQpLHRoaXMuX2Q9bmV3IERhdGUoYy5nZXRUaW1lKCkpLHpQKHRoaXMuX2QpLHRoaXMuZ290b0RhdGUodGhpcy5fZCksdGhpcy5fby5maWVsZCYmKHRo''@;'; put 'put ''aXMuX28uZmllbGQudmFsdWU9dGhpcy50b1N0cmluZygpLFZwZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksIWwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0JiZ0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcyx0aGlzLmdldERhdGUoKSl9LGNs''@;'; put 'put ''ZWFyOmZ1bmN0aW9uKCl7dGhpcy5zZXREYXRlKG51bGwpfSxnb3RvRGF0ZTpmdW5jdGlvbihjKXtsZXQgbD0hMDtpZihSaChjKSl7aWYodGhpcy5jYWxlbmRhcnMpe2xldCBhPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsMSksZD1uZXcg''@;'; put 'put ''RGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ueWVhcix0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsMSksaD1jLmdldFRpbWUoKTtkLnNldE1vbnRoKGQuZ2V0TW9udGgoKSsxKSxkLnNldERhdGUoZC5nZXREYXRlKCktMSks''@;'; put 'put ''bD1oPGEuZ2V0VGltZSgpfHxkLmdldFRpbWUoKTxofWwmJih0aGlzLmNhbGVuZGFycz1be21vbnRoOmMuZ2V0TW9udGgoKSx5ZWFyOmMuZ2V0RnVsbFllYXIoKX1dLCJyaWdodCI9PT10aGlzLl9vLm1haW5DYWxlbmRhciYmKHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKz0xLXRoaXMuX28ubnVt''@;'; put 'put ''YmVyT2ZNb250aHMpKSx0aGlzLmFkanVzdENhbGVuZGFycygpfX0sYWRqdXN0RGF0ZTpmdW5jdGlvbihjLGwpe2xldCBoLGE9dGhpcy5nZXREYXRlKCl8fG5ldyBEYXRlLGQ9MjQqcGFyc2VJbnQobCkqNjAqNjAqMWUzOyJhZGQiPT09Yz9oPW5ldyBEYXRlKGEudmFsdWVPZigpK2QpOiJzdWJ0''@;'; put 'put ''cmFjdCI9PT1jJiYoaD1uZXcgRGF0ZShhLnZhbHVlT2YoKS1kKSksdGhpcy5zZXREYXRlKGgpfSxhZGp1c3RDYWxlbmRhcnM6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT1CcGUodGhpcy5jYWxlbmRhcnNbMF0pO2ZvcihsZXQgYz0xO2M8dGhpcy5fby5udW1iZXJPZk1vbnRocztjKysp''@;'; put 'put ''dGhpcy5jYWxlbmRhcnNbY109QnBlKHttb250aDp0aGlzLmNhbGVuZGFyc1swXS5tb250aCtjLHllYXI6dGhpcy5jYWxlbmRhcnNbMF0ueWVhcn0pO3RoaXMuZHJhdygpfSxnb3RvVG9kYXk6ZnVuY3Rpb24oKXt0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKX0sZ290b01vbnRoOmZ1bmN0aW9uKGMp''@;'; put 'put ''e2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ubW9udGg9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LG5leHRNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKyssdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0scHJldk1vbnRoOmZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLSx0aGlzLmFkanVzdENhbGVuZGFycygpfSxnb3RvWWVhcjpmdW5jdGlvbihjKXtpc05hTihjKXx8KHRoaXMuY2FsZW5kYXJzWzBdLnllYXI9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LHNldE1pbkRhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYyl7YyBpbnN0YW5jZW9mIERhdGU/KHpQKGMpLHRoaXMuX28ubWluRGF0ZT1jLHRoaXMuX28ubWluWWVhcj1jLmdldEZ1bGxZZWFyKCksdGhpcy5fby5taW5Nb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1pbkRhdGU9TnAubWluRGF0ZSx0aGlzLl9vLm1pblllYXI9TnAubWluWWVh''@;'; put 'put ''cix0aGlzLl9vLm1pbk1vbnRoPU5wLm1pbk1vbnRoLHRoaXMuX28uc3RhcnRSYW5nZT1OcC5zdGFydFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oelAoYyksdGhpcy5fby5tYXhEYXRlPWMsdGhpcy5fby5tYXhZZWFyPWMuZ2V0''@;'; put 'put ''RnVsbFllYXIoKSx0aGlzLl9vLm1heE1vbnRoPWMuZ2V0TW9udGgoKSk6KHRoaXMuX28ubWF4RGF0ZT1OcC5tYXhEYXRlLHRoaXMuX28ubWF4WWVhcj1OcC5tYXhZZWFyLHRoaXMuX28ubWF4TW9udGg9TnAubWF4TW9udGgsdGhpcy5fby5lbmRSYW5nZT1OcC5lbmRSYW5nZSksdGhpcy5kcmF3''@;'; put 'put ''KCl9LHNldFN0YXJ0UmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5zdGFydFJhbmdlPWN9LHNldEVuZFJhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuX28uZW5kUmFuZ2U9Y30sZHJhdzpmdW5jdGlvbihjKXtpZighdGhpcy5fdiYmIWMpcmV0dXJuO2xldCBNLGw9dGhpcy5fbyxhPWwubWluWWVhcixk''@;'; put 'put ''PWwubWF4WWVhcixoPWwubWluTW9udGgsZj1sLm1heE1vbnRoLHY9IiI7dGhpcy5feTw9YSYmKHRoaXMuX3k9YSwhaXNOYU4oaCkmJnRoaXMuX208aCYmKHRoaXMuX209aCkpLHRoaXMuX3k+PWQmJih0aGlzLl95PWQsIWlzTmFOKGYpJiZ0aGlzLl9tPmYmJih0aGlzLl9tPWYpKTtmb3IobGV0''@;'; put 'put ''IEQ9MDtEPGwubnVtYmVyT2ZNb250aHM7RCsrKU09InBpa2EtdGl0bGUtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDIpLHYrPSc8ZGl2IGNsYXNzPSJwaWthLWxlbmRhciI+JytCaXQodGhpcyxELHRoaXMuY2FsZW5kYXJzW0Rd''@;'; put 'put ''LnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsdGhpcy5jYWxlbmRhcnNbMF0ueWVhcixNKSt0aGlzLnJlbmRlcih0aGlzLmNhbGVuZGFyc1tEXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0RdLm1vbnRoLE0pKyI8L2Rpdj4iO3RoaXMuZWwuaW5uZXJIVE1MPXYsbC5ib3VuZCYmImhpZGRlbiIh''@;'; put 'put ''PT1sLmZpZWxkLnR5cGUmJkZYKGZ1bmN0aW9uKCl7bC50cmlnZ2VyLmZvY3VzKCl9LDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uRHJhdyYmdGhpcy5fby5vbkRyYXcodGhpcyksbC5ib3VuZCYmbC5maWVsZC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGwuYXJpYUxhYmVsKX0s''@;'; put 'put ''YWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oKXtsZXQgYyxsLGEsZCxoLGYsdixNLEQsWixyZTt0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixjPXRoaXMuX28udHJpZ2dlcixsPXRoaXMuZWwub2Zmc2V0V2lkdGgsYT10aGlzLmVsLm9mZnNldEhl''@;'; put 'put ''aWdodCxkPUdtKCkuaW5uZXJXaWR0aHx8JDIoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsaD1HbSgpLmlubmVySGVpZ2h0fHwkMigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZj0kMigpLmJvZHkuc2Nyb2xsVG9wfHwkMigpLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3As''@;'; put 'put ''Wj0hMCxyZT0hMCxEPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1ELmxlZnQrR20oKS5wYWdlWE9mZnNldCxNPUQuYm90dG9tK0dtKCkucGFnZVlPZmZzZXQsKHRoaXMuX28ucmVwb3NpdGlvbiYmditsPmR8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKT4tMSYmdi1sK2Mu''@;'; put 'put ''b2Zmc2V0V2lkdGg+MCkmJih2PXYtbCtjLm9mZnNldFdpZHRoLFo9ITEpLCh0aGlzLl9vLnJlcG9zaXRpb24mJk0rYT5oK2Z8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigidG9wIik+LTEmJk0tYS1jLm9mZnNldEhlaWdodD4wKSYmKE09TS1hLWMub2Zmc2V0SGVpZ2h0LHJlPSExKSx2PDAm''@;'; put 'put ''Jih2PTApLE08MCYmKE09MCksdGhpcy5lbC5zdHlsZS5sZWZ0PXYrInB4Iix0aGlzLmVsLnN0eWxlLnRvcD1NKyJweCIsSFgodGhpcy5lbCxaPyJsZWZ0LWFsaWduZWQiOiJyaWdodC1hbGlnbmVkIiksSFgodGhpcy5lbCxyZT8iYm90dG9tLWFsaWduZWQiOiJ0b3AtYWxpZ25lZCIpLE5YKHRo''@;'; put 'put ''aXMuZWwsWj8icmlnaHQtYWxpZ25lZCI6ImxlZnQtYWxpZ25lZCIpLE5YKHRoaXMuZWwscmU/InRvcC1hbGlnbmVkIjoiYm90dG9tLWFsaWduZWQiKSl9LHJlbmRlcjpmdW5jdGlvbihjLGwsYSl7bGV0IGQ9dGhpcy5fbyxoPW5ldyBEYXRlLGY9TnBlKGMsbCksdj1uZXcgRGF0ZShjLGwsMSku''@;'; put 'put ''Z2V0RGF5KCksTT1bXSxEPVtdO3pQKGgpLGQuZmlyc3REYXk+MCYmKHYtPWQuZmlyc3REYXksdjwwJiYodis9NykpO2xldCBaPTA9PT1sPzExOmwtMSxyZT0xMT09PWw/MDpsKzEsY2U9MD09PWw/Yy0xOmMsYmU9MTE9PT1sP2MrMTpjLEVlPU5wZShjZSxaKSxCZT1mK3YscWU9QmU7Zm9yKDtx''@;'; put 'put ''ZT43OylxZS09NztCZSs9Ny1xZTtsZXQgcnQ9ITE7Zm9yKGxldCBwdD0wLGR0PTA7cHQ8QmU7cHQrKyl7bGV0IEp0PW5ldyBEYXRlKGMsbCxwdC12KzEpLHZuPSEhUmgodGhpcy5fZCkmJlVQKEp0LHRoaXMuX2QpLENuPVVQKEp0LGgpLHRuPS0xIT09ZC5ldmVudHMuaW5kZXhPZihKdC50b0Rh''@;'; put 'put ''dGVTdHJpbmcoKSksTW49cHQ8dnx8cHQ+PWYrdix3cj1wdC12KzEsR3I9bCxtcj1jLEduPWQuc3RhcnRSYW5nZSYmVVAoZC5zdGFydFJhbmdlLEp0KSxhaT1kLmVuZFJhbmdlJiZVUChkLmVuZFJhbmdlLEp0KSxfaT1kLnN0YXJ0UmFuZ2UmJmQuZW5kUmFuZ2UmJmQuc3RhcnRSYW5nZTxKdCYm''@;'; put 'put ''SnQ8ZC5lbmRSYW5nZSxPbj1kLm1pbkRhdGUmJkp0PGQubWluRGF0ZXx8ZC5tYXhEYXRlJiZKdD5kLm1heERhdGV8fGQuZGlzYWJsZVdlZWtlbmRzJiZSaXQoSnQpfHxkLmRpc2FibGVEYXlGbiYmZC5kaXNhYmxlRGF5Rm4oSnQpO01uJiYocHQ8dj8od3I9RWUrd3IsR3I9Wixtcj1jZSk6KHdy''@;'; put 'put ''LT1mLEdyPXJlLG1yPWJlKSksZC5waWNrV2hvbGVXZWVrJiZ2biYmKHJ0PSEwKSxELnB1c2goT2l0KHtkYXk6d3IsbW9udGg6R3IseWVhcjptcixoYXNFdmVudDp0bixpc1NlbGVjdGVkOnZuLGlzVG9kYXk6Q24saXNEaXNhYmxlZDpPbixpc0VtcHR5Ok1uLGlzU3RhcnRSYW5nZTpHbixpc0Vu''@;'; put 'put ''ZFJhbmdlOmFpLGlzSW5SYW5nZTpfaSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJl''@;'; put 'put ''dmlvdXNNb250aHN9KSksNz09KytkdCYmKGQuc2hvd1dlZWtOdW1iZXImJkQudW5zaGlmdChGaXQodGhpcyxwdC12LGwsYyxkLmZpcnN0V2Vla09mWWVhck1pbkRheXMpKSxNLnB1c2goSGl0KEQsZC5pc1JUTCxkLnBpY2tXaG9sZVdlZWsscnQpKSxEPVtdLGR0PTAscnQ9ITEpfXJldHVybiBm''@;'; put 'put ''dW5jdGlvbihjLGwsYSl7cmV0dXJuJzx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwaWthLXRhYmxlIiByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9IicrYSsnIj4nK2Z1bmN0aW9uKGMpe2xldCBsLGE9W107Zm9yKGMuc2hvd1dlZWtOdW1iZXImJmEu''@;'; put 'put ''cHVzaCgiPHRoPjwvdGg+IiksbD0wO2w8NztsKyspYS5wdXNoKCc8dGggc2NvcGU9ImNvbCI+PGFiYnIgdGl0bGU9IicranBlKGMsbCkrJyI+JytqcGUoYyxsLCEwKSsiPC9hYmJyPjwvdGg+Iik7cmV0dXJuIjx0aGVhZD48dHI+IisoYy5pc1JUTD9hLnJldmVyc2UoKTphKS5qb2luKCIiKSsi''@;'; put 'put ''PC90cj48L3RoZWFkPiJ9KGMpK2Z1bmN0aW9uKGMpe3JldHVybiI8dGJvZHk+IitjLmpvaW4oIiIpKyI8L3Rib2R5PiJ9KGwpKyI8L3RhYmxlPiJ9KGQsTSxhKX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Z9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLmlzVmlzaWJsZSgpfHwo''@;'; put 'put ''dGhpcy5fdj0hMCx0aGlzLmRyYXcoKSxOWCh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl9vLmJvdW5kJiYoSHAoJDIoKSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuYWRqdXN0UG9zaXRpb24oKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25PcGVuJiZ0aGlzLl9vLm9uT3Bl''@;'; put 'put ''bi5jYWxsKHRoaXMpKX0saGlkZTpmdW5jdGlvbigpe2xldCBjPXRoaXMuX3Y7ITEhPT1jJiYodGhpcy5fby5ib3VuZCYmazUoJDIoKSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIix0aGlzLmVsLnN0eWxl''@;'; put 'put ''LmxlZnQ9ImF1dG8iLHRoaXMuZWwuc3R5bGUudG9wPSJhdXRvIiksSFgodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fdj0hMSx2b2lkIDAhPT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkNsb3NlJiZ0aGlzLl9vLm9uQ2xvc2UuY2FsbCh0aGlzKSl9LGRlc3Ryb3k6ZnVuY3Rp''@;'; put 'put ''b24oKXtsZXQgYz10aGlzLl9vO3RoaXMuaGlkZSgpLGs1KHRoaXMuZWwsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sITApLGs1KHRoaXMuZWwsInRvdWNoZW5kIix0aGlzLl9vbk1vdXNlRG93biwhMCksazUodGhpcy5lbCwiY2hhbmdlIix0aGlzLl9vbkNoYW5nZSksYy5rZXlib2Fy''@;'; put 'put ''ZElucHV0JiZrNSgkMigpLCJrZXlkb3duIix0aGlzLl9vbktleUNoYW5nZSksYy5maWVsZCYmKGs1KGMuZmllbGQsImNoYW5nZSIsdGhpcy5fb25JbnB1dENoYW5nZSksYy5ib3VuZCYmKGs1KGMudHJpZ2dlciwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayksazUoYy50cmlnZ2VyLCJmb2N1''@;'; put 'put ''cyIsdGhpcy5fb25JbnB1dEZvY3VzKSxrNShjLnRyaWdnZXIsImJsdXIiLHRoaXMuX29uSW5wdXRCbHVyKSkpLHRoaXMuZWwucGFyZW50Tm9kZSYmdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfX07Y29uc3QgVXBlPSJkYXRlIixacGU9ImRhdGVFZGl0b3IiO3ZhciBX''@;'; put 'put ''UD1uZXcgV2Vha1NldDtjbGFzcyBXcGUgZXh0ZW5kcyBpOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24geml0KGMsbCl7KGZ1bmN0aW9uIFVpdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l''@;'; put 'put ''IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFdQKSx6cGUodGhpcywicGFyZW50RGVzdHJveWVkIiwhMSksenBlKHRoaXMsIiRkYXRlUGlja2VyIixudWxsKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIFVwZX1pbml0''@;'; put 'put ''KCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE9vKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBtb21lbnQuanMgdG8geW91ciBwcm9qZWN0LiIpO3N1cGVyLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9''@;'; put 'put ''ITAsdGhpcy5kZXN0cm95RWxlbWVudHMoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChsLGEpPT57YXx8KGxvKHRoaXMuZGF0ZVBpY2tlciwvaHQtdGhlbWUtLiovZyksVGkodGhpcy5kYXRlUGlja2VyLGwpKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxl''@;'; put 'put ''bWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tl''@;'; put 'put ''clN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLFRpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRl''@;'; put 'put ''cGlja2VySG9sZGVyIik7Y29uc3QgbD10aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCk7bG8odGhpcy5kYXRlUGlja2VyLC9odC10aGVtZS0uKi9nKSxUaSh0aGlzLmRhdGVQaWNrZXIsbCksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kYXRlUGlja2Vy''@;'; put 'put ''KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZGF0ZVBpY2tlciwibW91c2Vkb3duIixhPT57cG8oYS50YXJnZXQsInBpa2EtZGF5IikmJnRoaXMuaGlkZURhdGVwaWNrZXIoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9b3Blbigpe2xldCBs''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7dGhpcy5zaG93RGF0ZXBpY2tlcihsKSxzdXBlci5vcGVuKCksZC5hZGRTaG9y''@;'; put 'put ''dGN1dHMoW3trZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiwxKX19LHtr''@;'; put 'put ''ZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiw3KX19XSx7Z3JvdXA6WnBlfSl9''@;'; put 'put ''Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRlc3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pntjb25zdCBoPXRoaXMuaG90Ll9nZXRFZGl0''@;'; put 'put ''b3JNYW5hZ2VyKCk7aC5jbG9zZUVkaXRvcigpLHRoaXMuaG90LnZpZXcucmVuZGVyKCksaC5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFpwZSksc3VwZXIuY2xvc2UoKX1m''@;'; put 'put ''aW5pc2hFZGl0aW5nKCl7c3VwZXIuZmluaXNoRWRpdGluZyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfXNob3dEYXRlcGlja2VyKGwp''@;'; put 'put ''e2NvbnN0IGE9algoV1AsdGhpcyx6WCkuY2FsbCh0aGlzKSxkPXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSxoPSEhbCYmUCQobC5rZXlDb2RlKTtsZXQgZjt0aGlzLmRhdGVQaWNrZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuJGRhdGVQaWNrZXI9bmV3IEJYKHRoaXMuZ2V0RGF0''@;'; put 'put ''ZVBpY2tlckNvbmZpZygpKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQmJnRoaXMuJGRhdGVQaWNrZXIudXNlTW9tZW50KE9vKSx0aGlzLiRkYXRlUGlja2VyLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXt9LHRoaXMub3JpZ2luYWxWYWx1ZT8oZj10aGlz''@;'; put 'put ''Lm9yaWdpbmFsVmFsdWUsT28oZixhLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KE9vKGYsYSksITApLHRoaXMuZ2V0VmFsdWUoKSE9PXRoaXMub3JpZ2luYWxWYWx1ZSYmdGhpcy5zZXRWYWx1ZSh0aGlzLm9yaWdpbmFsVmFsdWUpLCFoJiYhZCYmdGhpcy5zZXRW''@;'; put 'put ''YWx1ZSgiIikpOnRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGU/KGY9dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZSxPbyhmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoT28oZixhKSwhMCksIWgmJiFkJiZ0aGlzLnNldFZhbHVlKCIiKSk6''@;'; put 'put ''dGhpcy4kZGF0ZVBpY2tlci5nb3RvVG9kYXkoKX1oaWRlRGF0ZXBpY2tlcigpe3RoaXMuZGF0ZVBpY2tlclN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGRhdGVQaWNrZXIuaGlkZSgpfWdldERhdGVQaWNrZXJDb25maWcoKXt2YXIgbDtjb25zdCBhPXRoaXMuVEVYVEFSRUEsZD17fTt0aGlz''@;'; put 'put ''LmNlbGxQcm9wZXJ0aWVzJiZ0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcmJk1FKGQsdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnKTtjb25zdCBoPWQub25TZWxlY3QsZj1kLm9uQ2xvc2U7cmV0dXJuIGQuZmllbGQ9YSxkLnRyaWdnZXI9YSxkLmNvbnRh''@;'; put 'put ''aW5lcj10aGlzLmRhdGVQaWNrZXIsZC5ib3VuZD0hMSxkLmtleWJvYXJkSW5wdXQ9ITEsZC5mb3JtYXQ9bnVsbCE9PShsPWQuZm9ybWF0KSYmdm9pZCAwIT09bD9sOmpYKFdQLHRoaXMselgpLmNhbGwodGhpcyksZC5yZXBvc2l0aW9uPWQucmVwb3NpdGlvbnx8ITEsZC5pc1JUTD0hMSxkLm9u''@;'; put 'put ''U2VsZWN0PXY9PntsZXQgTT12O2lzTmFOKE0uZ2V0VGltZSgpKXx8KE09T28oTSkuZm9ybWF0KGpYKFdQLHRoaXMselgpLmNhbGwodGhpcykpKSx0aGlzLnNldFZhbHVlKE0pLGgmJmgoKSxBcCgpJiZ0aGlzLmhpZGVEYXRlcGlja2VyKCl9LGQub25DbG9zZT0oKT0+e3RoaXMucGFyZW50RGVz''@;'; put 'put ''dHJveWVkfHx0aGlzLmZpbmlzaEVkaXRpbmcoITEpLGYmJmYoKX0sZH1yZWZyZXNoRGltZW5zaW9ucyhsKXt2YXIgYTtpZihzdXBlci5yZWZyZXNoRGltZW5zaW9ucyhsKSx0aGlzLnN0YXRlIT09bHUuRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhp''@;'; put 'put ''cy5URClyZXR1cm4gdm9pZCB0aGlzLmhpZGVEYXRlcGlja2VyKCk7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT10aGlzLmhvdCx7d3RPdmVybGF5czpmfT10aGlzLmhvdC52aWV3Ll93dCx7d3RUYWJsZTp2fT1udWxsIT09KGE9Zi5nZXRQYXJlbnRPdmVybGF5''@;'; put 'put ''KHRoaXMuVEQpKSYmdm9pZCAwIT09YT9hOnRoaXMuaG90LnZpZXcuX3d0LE09ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpLEQ9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2li''@;'; put 'put ''bGVSb3coKSksWj1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSkscmU9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSk7aWYodGhpcy5yb3c+PU0mJnRo''@;'; put 'put ''aXMucm93PD1EJiZ0aGlzLmNvbD49WiYmdGhpcy5jb2w8PXJlKXtjb25zdCBjZT10aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD1gJHt0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K2NlLnRvcCtNdSh0aGlzLlREKX1weGA7bGV0''@;'; put 'put ''IGJlPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7dGhpcy5ob3QuaXNSdGwoKT9iZSs9Y2UucmlnaHQtc3UodGhpcy5kYXRlUGlja2VyKTpiZSs9Y2UubGVmdCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PWAke2JlfXB4YH1lbHNlIHRoaXMuaGlkZURhdGVwaWNrZXIoKX19ZnVu''@;'; put 'put ''Y3Rpb24gelgoKXt2YXIgYztyZXR1cm4gbnVsbCE9PShjPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdCkmJnZvaWQgMCE9PWM/YzoiREQvTU0vWVlZWSJ9Y2xhc3MgWXBlIGV4dGVuZHMgUFh7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJkcm9wZG93biJ9cHJlcGFyZShs''@;'; put 'put ''LGEsZCxoLGYsdil7di5maWx0ZXI9ITEsdi5zdHJpY3Q9ITAsc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9fWNsYXNzIEdwZSBleHRlbmRzIGk5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ibnVtZXJpYyJ9fWNsYXNzICRwZSBleHRlbmRzIGk5e2NvbnN0cnVjdG9yKCl7c3Vw''@;'; put 'put ''ZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBLaXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFpdChjKXt2YXIgbD1mdW5jdGlvbiBYaXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2''@;'; put 'put ''YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9''@;'; put 'put ''KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJhdXRvUmVzaXplIix4cGUo''@;'; put 'put ''dGhpcy5ob3Qucm9vdERvY3VtZW50LHt0ZXh0Q29udGVudDpsPT4iXHUyMDIyIi5yZXBlYXQobC52YWx1ZS5sZW5ndGgpfSkpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4icGFzc3dvcmQifWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLlRFWFRB''@;'; put 'put ''UkVBPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJ0eXBlIiwicGFzc3dvcmQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVBLmNsYXNzTmFt''@;'; put 'put ''ZT0iaGFuZHNvbnRhYmxlSW5wdXQiLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCx4cCh0aGlzLlRFWFRBUkVBX1BBUkVOVCksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBw''@;'; put 'put ''ZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IFVYPSJodF9lZGl0b3JfdmlzaWJsZSIsS3BlPSJzZWxlY3RFZGl0b3IiO2NsYXNzIHFwZSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ic2VsZWN0In1pbml0KCl7dGhpcy5zZWxlY3RXcmFwcGVyPXRoaXMu''@;'; put 'put ''aG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsInRydWUiKSx0aGlzLnNlbGVjdFdyYXBwZXIu''@;'; put 'put ''c3R5bGUuZGlzcGxheT0ibm9uZSI7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2wuY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixhJiZsLnNldEF0dHJpYnV0ZSguLi5ONygp''@;'; put 'put ''KSxsLmFwcGVuZENoaWxkKHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLFRpKHRoaXMuc2VsZWN0V3JhcHBlciwiaHRTZWxlY3RFZGl0b3IiKSx0aGlzLnNlbGVjdFdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMuc2VsZWN0V3JhcHBl''@;'; put 'put ''ci5pbnNlcnRCZWZvcmUobCx0aGlzLnNlbGVjdFdyYXBwZXIuZmlyc3RDaGlsZCksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RXcmFwcGVyKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdC52YWx1ZX1zZXRWYWx1''@;'; put 'put ''ZShsKXt0aGlzLnNlbGVjdC52YWx1ZT1sfW9wZW4oKXt0aGlzLl9vcGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0''@;'; put 'put ''b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLl9vcGVuZWQ9ITEsdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHBvKHRoaXMuc2VsZWN0V3JhcHBlcixVWCkmJmxvKHRoaXMuc2VsZWN0V3JhcHBlcixVWCksdGhpcy51bnJlZ2lzdGVyU2hv''@;'; put 'put ''cnRjdXRzKCksdGhpcy5jbGVhckhvb2tzKCl9Zm9jdXMoKXt0aGlzLnNlbGVjdC5mb2N1cygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xs''@;'; put 'put ''VmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSl9''@;'; put 'put ''cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNlbGVjdE9wdGlvbnM7bGV0IEQ7RD10aGlzLnByZXBhcmVPcHRpb25zKCJmdW5jdGlvbiI9PXR5cGVvZiBNP00odGhpcy5yb3csdGhpcy5jb2wsdGhpcy5w''@;'; put 'put ''cm9wKTpNKSx4cCh0aGlzLnNlbGVjdCksWG8oRCwoWixyZSk9Pntjb25zdCBjZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7Y2UudmFsdWU9cmUsajcoY2UsWiksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoY2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0''@;'; put 'put ''IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlwZW9mIGwmJihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlz''@;'; put 'put ''LnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7aWYodGhpcy5zdGF0ZSE9PWx1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCks''@;'; put 'put ''IXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGY9dGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlO2YuaGVpZ2h0PWAke2h9cHhgLGYud2lkdGg9YCR7ZH1weGAsZi50b3A9''@;'; put 'put ''YCR7bH1weGAsZlt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHthfXB4YCxmLm1hcmdpbj0iMHB4IixUaSh0aGlzLnNlbGVjdFdyYXBwZXIsVVgpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJl''@;'; put 'put ''ZGl0b3IiKSxkPXtncm91cDpLcGV9O3RoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0h''@;'; put 'put ''MCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgrMTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChLcGUpfX1jbGFzcyBYcGUgZXh0ZW5kcyBpOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBh''@;'; put 'put ''cmUobCxhLGQsaCxmLHYpLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBaWChjLGwsYSxkLGgsZix2KXthVC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksajcobCxmPz8iIiwhMSl9ZnVuY3Rpb24gSV8oYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50Ok19PWMs''@;'; put 'put ''RD12LmFsbG93SHRtbD9aWDpBNSxaPU0uY3JlYXRlRWxlbWVudCgiRElWIikscmU9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFouY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixyZSYmWi5zZXRBdHRyaWJ1dGUoLi4uTjcoKSksWi5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHRO''@;'; put 'put ''b2RlKCJcdTI1YmMiKSksRC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIlx4YTAiKSksbC5pbnNlcnRCZWZvcmUoWixsLmZpcnN0Q2hpbGQpLFRpKGwsImh0QXV0b2NvbXBsZXRlIiksIWMuYWNBcnJvd0xp''@;'; put 'put ''c3RlbmVyKXtjb25zdCBjZT1uZXcgajIoYyk7Yy5hY0Fycm93TGlzdGVuZXI9ZnVuY3Rpb24oYmUpe3BvKGJlLnRhcmdldCwiaHRBdXRvY29tcGxldGVBcnJvdyIpJiZjLnZpZXcuX3d0LmdldFNldHRpbmcoIm9uQ2VsbERibENsaWNrIixudWxsLGMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxs''@;'; put 'put ''KX0sY2UuYWRkRXZlbnRMaXN0ZW5lcihjLnJvb3RFbGVtZW50LCJtb3VzZWRvd24iLGMuYWNBcnJvd0xpc3RlbmVyKSxjLmFkZEhvb2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT57Y2UuZGVzdHJveSgpfSl9fWZ1bmN0aW9uIFdYKGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxh''@;'; put 'put ''LGQsaCxmLHZdKX1aWC5SRU5ERVJFUl9UWVBFPSJodG1sIixJXy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiLFdYLlJFTkRFUkVSX1RZUEU9ImRyb3Bkb3duIjtjb25zdCBKcGU9bmV3IFdlYWtNYXAsUXBlPW5ldyBXZWFrTWFwLGFhdD0iaHRCYWRWYWx1ZSIsUl89ImRhdGEtcm93IixM''@;'; put 'put ''Xz0iZGF0YS1jb2wiLG9hdD0iY2hlY2tib3hSZW5kZXJlciI7ZnVuY3Rpb24gWVgoYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50Ok19PWMsRD1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7YVQuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGZ1bmN0aW9uIHNhdChjKXtsZXQg''@;'; put 'put ''bD1RcGUuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDphfT1jO2w9bmV3IGoyKGMpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjbGljayIsZD0+ZnVuY3Rpb24gZGF0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUdYKGEpfHwhYS5oYXNBdHRyaWJ1dGUoUl8pfHwhYS5oYXNBdHRy''@;'; put 'put ''aWJ1dGUoTF8pKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFJfKSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShMXyksMTApO2wuZ2V0Q2VsbE1ldGEoZCxoKS5yZWFkT25seSYmYy5wcmV2ZW50RGVmYXVsdCgpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''YSwibW91c2V1cCIsZD0+ZnVuY3Rpb24gdWF0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7R1goYSkmJighYS5oYXNBdHRyaWJ1dGUoUl8pfHwhYS5oYXNBdHRyaWJ1dGUoTF8pfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjaGFuZ2UiLGQ9''@;'; put 'put ''PmZ1bmN0aW9uIGhhdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFHWChhKXx8IWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShSXyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoTF8p''@;'; put 'put ''LDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25seSl7bGV0IHY9bnVsbDt2PWMudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNoZWNrZWRUZW1w''@;'; put 'put ''bGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLHYpfX0oZCxjKSksUXBlLnNldChjLGwpfX0oYyk7bGV0IFo9ZnVuY3Rpb24gbGF0KGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBsLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwudHlwZT0iY2hl''@;'; put 'put ''Y2tib3giLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShNKTtjb25zdCByZT12LmxhYmVsO2xldCBjZT0hMTtpZih0eXBlb2Ygdi5jaGVja2VkVGVtcGxhdGU+InUiJiYodi5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiB2LnVuY2hlY2tlZFRlbXBs''@;'; put 'put ''YXRlPiJ1IiYmKHYudW5jaGVja2VkVGVtcGxhdGU9ITEpLHhwKGwpLGY9PT12LmNoZWNrZWRUZW1wbGF0ZXx8bGMoZikudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpPT09bGModi5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9aLmNoZWNrZWQ9ITA6Zj09''@;'; put 'put ''PXYudW5jaGVja2VkVGVtcGxhdGV8fGxjKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PWxjKHYudW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9aLmNoZWNrZWQ9ITE6VWMoZik/VGkoWiwibm9WYWx1ZSIpOihaLnN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLFRpKFosYWF0KSxjZT0hMCksdm8oWixbW1JfLGFdLFtMXyxkXV0pLEQmJnZvKFosW2dFKGMuZ2V0VHJhbnNsYXRlZFBocmFzZShaLmNoZWNrZWQ/dVg6ZFgpKSxBMmUoWi5jaGVja2VkKSxtcWUoKV0pLCFjZSYmcmUpe2xldCBxZT0iIjtpZihyZS52YWx1ZSlxZT0iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgcmUudmFsdWU/cmUudmFsdWUuY2FsbCh0aGlzLGEsZCxoLGYpOnJlLnZhbHVlO2Vsc2UgaWYocmUucHJvcGVydHkpe2NvbnN0IHB0PWMuZ2V0RGF0YUF0Um93UHJvcChhLHJlLnByb3BlcnR5KTtxZT1udWxsIT09cHQ/cHQ6IiJ9Y29uc3QgcnQ9ZnVuY3Rpb24gY2F0KGMsbCxhKXtj''@;'; put 'put ''b25zdCBkPWMuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8iZnVsbFdpZHRoIjoiIik7Y29uc3QgaD1jLmNyZWF0ZVRleHROb2RlKGwpO2lmKGEpe2NvbnN0IGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5hcHBlbmRD''@;'; put 'put ''aGlsZChoKSxkLmFwcGVuZENoaWxkKGYpfWVsc2UgZC5hcHBlbmRDaGlsZChoKTtyZXR1cm4gZC5jbG9uZU5vZGUoITApfShNLHFlLCEwIT09cmUuc2VwYXJhdGVkKTsiYmVmb3JlIj09PXJlLnBvc2l0aW9uP3JlLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChydCksbC5hcHBlbmRDaGlsZCha''@;'; put 'put ''KSk6KHJ0LmFwcGVuZENoaWxkKFopLFo9cnQpOighcmUucG9zaXRpb258fCJhZnRlciI9PT1yZS5wb3NpdGlvbikmJihyZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQoWiksbC5hcHBlbmRDaGlsZChydCkpOihydC5pbnNlcnRCZWZvcmUoWixydC5maXJzdENoaWxkKSxaPXJ0KSl9ZnVuY3Rp''@;'; put 'put ''b24gRWUoKXtsZXQgcWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBydD1jLmdldFNlbGVjdGVkUmFuZ2UoKSxwdD1bXSxkdD1uZXcgTWFwO2xldCBKdD1bXSx2bj0wO2lmKHJ0KXtmb3IobGV0IENuPTA7Q248cnQubGVuZ3Ro''@;'; put 'put ''O0NuKyspe2NvbnN0e3Jvdzp0bixjb2w6TW59PXJ0W0NuXS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6d3IsY29sOkdyfT1ydFtDbl0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBtcj10bjttcjw9d3I7bXIrPTEpZm9yKGxldCBHbj1NbjtHbjw9R3I7R24rPTEpe2NvbnN0IGFpPWMu''@;'; put 'put ''Z2V0Q2VsbE1ldGEobXIsR24pO2lmKGFpLmhpZGRlbiljb250aW51ZTtjb25zdCBfaT17Y2hlY2tlZFRlbXBsYXRlOmFpLmNoZWNrZWRUZW1wbGF0ZSx1bmNoZWNrZWRUZW1wbGF0ZTphaS51bmNoZWNrZWRUZW1wbGF0ZX07aWYoImNoZWNrYm94IiE9PWFpLnR5cGUpeyEwPT09cWUmJiFhaS5y''@;'; put 'put ''ZWFkT25seSYmKGR0LmhhcyhwdC5sZW5ndGgpP2R0LnNldChwdC5sZW5ndGgsWy4uLmR0LmdldChwdC5sZW5ndGgpLFttcixHbixudWxsXV0pOmR0LnNldChwdC5sZW5ndGgsW1ttcixHbixudWxsXV0pKTtjb250aW51ZX1pZighMD09PWFpLnJlYWRPbmx5KWNvbnRpbnVlO3R5cGVvZiBhaS5j''@;'; put 'put ''aGVja2VkVGVtcGxhdGU+InUiJiYoYWkuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgYWkudW5jaGVja2VkVGVtcGxhdGU+InUiJiYoYWkudW5jaGVja2VkVGVtcGxhdGU9ITEpO2NvbnN0IE9uPWMuZ2V0RGF0YUF0Q2VsbChtcixHbik7ITE9PT1xZT9bYWkuY2hlY2tlZFRlbXBsYXRlLGFp''@;'; put 'put ''LmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhPbik/SnQucHVzaChbbXIsR24sYWkudW5jaGVja2VkVGVtcGxhdGUsX2ldKTpbYWkudW5jaGVja2VkVGVtcGxhdGUsYWkudW5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKSxudWxsLHZvaWQgMF0uaW5jbHVkZXMoT24pJiZK''@;'; put 'put ''dC5wdXNoKFttcixHbixhaS5jaGVja2VkVGVtcGxhdGUsX2ldKTpKdC5wdXNoKFttcixHbixhaS51bmNoZWNrZWRUZW1wbGF0ZSxfaV0pLHZuKz0xfXB0LnB1c2godm4pLHZuPTB9SnQ9SnQuZXZlcnkoQ249PntsZXRbLCx0bl09Q247cmV0dXJuIHRuPT09SnRbMF1bMl19KT9KdC5tYXAoQ249''@;'; put 'put ''PntsZXRbdG4sTW4sd3JdPUNuO3JldHVyblt0bixNbix3cl19KTpKdC5tYXAoQ249PntsZXRbdG4sTW4sLHdyXT1DbjtyZXR1cm5bdG4sTW4sd3IuY2hlY2tlZFRlbXBsYXRlXX0pLEp0Lmxlbmd0aD4wJiZwdC5mb3JFYWNoKChDbix0bik9PntsZXQgTW49SnQuc3BsaWNlKDAsQ24pO2R0LnNp''@;'; put 'put ''emUmJmR0Lmhhcyh0bikmJihNbj1bLi4uTW4sLi4uZHQuZ2V0KHRuKV0pLGMuc2V0RGF0YUF0Q2VsbChNbil9KX19ZnVuY3Rpb24gQmUoKXtjb25zdCBxZT1jLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihxZSl7Zm9yKGxldCBydD0wO3J0PHFlLmxlbmd0aDtydCsrKXtjb25zdCBwdD1xZVtydF0u''@;'; put 'put ''Z2V0VG9wU3RhcnRDb3JuZXIoKSxkdD1xZVtydF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBKdD1wdC5yb3c7SnQ8PWR0LnJvdztKdCsrKWZvcihsZXQgdm49cHQuY29sO3ZuPD1kdC5jb2w7dm4rKyl7aWYoYy5nZXRDZWxsTWV0YShKdCx2bikucmVhZE9ubHkpY29udGludWU7Y29u''@;'; put 'put ''c3QgdG49Yy5nZXRDZWxsKEp0LHZuKTtpZihFcCh0bikmJnRuLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9Y2hlY2tib3hdIikubGVuZ3RoPjApcmV0dXJuITB9fXJldHVybiExfX0oIXJlfHxyZSYmIXJlLnNlcGFyYXRlZCkmJmwuYXBwZW5kQ2hpbGQoWiksY2UmJmwuYXBwZW5kQ2hp''@;'; put 'put ''bGQoTS5jcmVhdGVUZXh0Tm9kZSgiI2JhZC12YWx1ZSMiKSksSnBlLmhhcyhjKXx8KEpwZS5zZXQoYywhMCksZnVuY3Rpb24gYmUoKXtjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbInNwYWNlIl1dLGNhbGxiYWNrOigpPT4o''@;'; put 'put ''RWUoKSwhQmUoKSkscnVuT25seUlmOigpPT57dmFyIGR0O3JldHVybiBudWxsPT09KGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdobGlnaHQuaXNDZWxsKCl9fSx7a2V5czpbWyJlbnRlciJdXSxjYWxsYmFjazooKT0+KEVlKCksIUJlKCkp''@;'; put 'put ''LHJ1bk9ubHlJZjooKT0+e2NvbnN0IGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4gYy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZyYmZHQ/LmhpZ2hsaWdodC5pc0NlbGwoKSYmIWMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX19LHtrZXlzOltbImRlbGV0ZSJdLFsi''@;'; put 'put ''YmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oRWUoITApLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgZHQ7cmV0dXJuIG51bGw9PT0oZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZHQ/dm9pZCAwOmR0LmhpZ2hsaWdodC5pc0NlbGwoKX19XSx7Z3JvdXA6b2F0LHJl''@;'; put 'put ''bGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfSgpKX1mdW5jdGlvbiBHWChjKXtyZXR1cm4iSU5QVVQiPT09Yy50YWdOYW1lJiYiY2hlY2tib3giPT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKX1mdW5jdGlvbiAkWChjLGwsYSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGws''@;'; put 'put ''YSxkLGgsZix2XSl9U2EuZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1bmN0aW9uKGMsbCxhKXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46dixwcm9wOk19PWw7aWYoImNoZWNrYm94Ij09PWgpe2lmKGQpe2NvbnN0e3ZhbHVlOkQscHJv''@;'; put 'put ''cGVydHk6Wn09ZDtsZXQgcmU9YTtpZihEKXJlPSJmdW5jdGlvbiI9PXR5cGVvZiBEP0QoZix2LE0sYSk6RDtlbHNlIGlmKFope2NvbnN0IGNlPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChmLFopO3JlPW51bGwhPT1jZT9jZTphfWM9cmV9cmV0dXJuIGN9fSksWVguUkVOREVSRVJfVFlQRT0iY2hl''@;'; put 'put ''Y2tib3giLCRYLlJFTkRFUkVSX1RZUEU9ImhhbmRzb250YWJsZSI7dmFyIEtYLHQ0ZSxxWCxuNGUsWFgsaTRlLHBhdD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnt9O2Z1bmN0aW9uIGdhdChjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYywiZGVmYXVsdCIpP2MuZGVmYXVsdDpjfWZ1bmN0aW9uIHI0ZSgpe2lmKG40ZSlyZXR1cm4gcVg7bjRlPTE7Y29uc3QgYz1be2tleToi''@;'; put 'put ''WmlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw3KX0se2tleToiWkIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNyl9LHtrZXk6IllpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsOCl9LHtrZXk6IllCIixmYWN0b3I6TWF0aC5wb3coMWUzLDgpfSx7a2V5OiJUaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0''@;'; put 'put ''LDQpfSx7a2V5OiJUQiIsZmFjdG9yOk1hdGgucG93KDFlMyw0KX0se2tleToiUGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw1KX0se2tleToiUEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNSl9LHtrZXk6Ik1pQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMil9LHtrZXk6Ik1CIixmYWN0b3I6TWF0''@;'; put 'put ''aC5wb3coMWUzLDIpfSx7a2V5OiJLaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDEpfSx7a2V5OiJLQiIsZmFjdG9yOk1hdGgucG93KDFlMywxKX0se2tleToiR2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwzKX0se2tleToiR0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMyl9LHtrZXk6IkVpQiIs''@;'; put 'put ''ZmFjdG9yOk1hdGgucG93KDEwMjQsNil9LHtrZXk6IkVCIixmYWN0b3I6TWF0aC5wb3coMWUzLDYpfSx7a2V5OiJCIixmYWN0b3I6MX1dO2Z1bmN0aW9uIGwoRCl7cmV0dXJuIEQucmVwbGFjZSgvWy0vXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIGEoRCxaLHJlLGNlLGJl''@;'; put 'put ''LEVlLEJlKXtpZighaXNOYU4oK0QpKXJldHVybitEO2xldCBxZT0iIixydD1ELnJlcGxhY2UoLyheW14oXSopXCgoLiopXCkoW14pXSokKS8sIiQxJDIkMyIpO2lmKHJ0IT09RClyZXR1cm4tMSphKHJ0LFoscmUsY2UsYmUsRWUpO2ZvcihsZXQgdG49MDt0bjxjLmxlbmd0aDt0bisrKXtsZXQg''@;'; put 'put ''TW49Y1t0bl07aWYocWU9RC5yZXBsYWNlKFJlZ0V4cChgKFswLTkgXSkoJHtNbi5rZXl9KSRgKSwiJDEiKSxxZSE9PUQpcmV0dXJuIGEocWUsWixyZSxjZSxiZSxFZSkqTW4uZmFjdG9yfWlmKHFlPUQucmVwbGFjZSgiJSIsIiIpLHFlIT09RClyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKS8x''@;'; put 'put ''MDA7bGV0IHB0PXBhcnNlRmxvYXQoRCk7aWYoaXNOYU4ocHQpKXJldHVybjtsZXQgZHQ9Y2UocHQpO2lmKGR0JiYiLiIhPT1kdCYmKHFlPUQucmVwbGFjZShuZXcgUmVnRXhwKGAke2woZHQpfSRgKSwiIikscWUhPT1EKSlyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKTtsZXQgSnQ9e307T2Jq''@;'; put 'put ''ZWN0LmtleXMoRWUpLmZvckVhY2godG49PntKdFtFZVt0bl1dPXRufSk7bGV0IHZuPU9iamVjdC5rZXlzKEp0KS5zb3J0KCkucmV2ZXJzZSgpLENuPXZuLmxlbmd0aDtmb3IobGV0IHRuPTA7dG48Q247dG4rKyl7bGV0IE1uPXZuW3RuXSx3cj1KdFtNbl07aWYocWU9RC5yZXBsYWNlKE1uLCIi''@;'; put 'put ''KSxxZSE9PUQpe2xldCBHcjtzd2l0Y2god3Ipe2Nhc2UidGhvdXNhbmQiOkdyPU1hdGgucG93KDEwLDMpO2JyZWFrO2Nhc2UibWlsbGlvbiI6R3I9TWF0aC5wb3coMTAsNik7YnJlYWs7Y2FzZSJiaWxsaW9uIjpHcj1NYXRoLnBvdygxMCw5KTticmVhaztjYXNlInRyaWxsaW9uIjpHcj1NYXRo''@;'; put 'put ''LnBvdygxMCwxMil9cmV0dXJuIGEocWUsWixyZSxjZSxiZSxFZSkqR3J9fX1mdW5jdGlvbiBoKEQsWixyZT0iIixjZSxiZSxFZSxCZSl7aWYoIiI9PT1EKXJldHVybjtpZihEPT09YmUpcmV0dXJuIDA7bGV0IHFlPWZ1bmN0aW9uIGQoRCxaLHJlKXtsZXQgY2U9RC5yZXBsYWNlKHJlLCIiKTty''@;'; put 'put ''ZXR1cm4gY2U9Y2UucmVwbGFjZShuZXcgUmVnRXhwKGAoWzAtOV0pJHtsKFoudGhvdXNhbmRzKX0oWzAtOV0pYCwiZyIpLCIkMSQyIiksY2U9Y2UucmVwbGFjZShaLmRlY2ltYWwsIi4iKSxjZX0oRCxaLHJlKTtyZXR1cm4gYShxZSxaLHJlLGNlLGJlLEVlKX1yZXR1cm4gcVg9e3VuZm9ybWF0''@;'; put 'put ''OmZ1bmN0aW9uIE0oRCxaKXtjb25zdCByZT10SigpO2xldCBydCxjZT1yZS5jdXJyZW50RGVsaW1pdGVycygpLGJlPXJlLmN1cnJlbnRDdXJyZW5jeSgpLnN5bWJvbCxFZT1yZS5jdXJyZW50T3JkaW5hbCgpLEJlPXJlLmdldFplcm9Gb3JtYXQoKSxxZT1yZS5jdXJyZW50QWJicmV2aWF0aW9u''@;'; put 'put ''cygpO2lmKCJzdHJpbmciPT10eXBlb2YgRClydD1mdW5jdGlvbiBmKEQsWil7aWYoIUQuaW5kZXhPZigiOiIpfHwiOiI9PT1aLnRob3VzYW5kcylyZXR1cm4hMTtsZXQgY2U9RC5zcGxpdCgiOiIpO2lmKDMhPT1jZS5sZW5ndGgpcmV0dXJuITE7bGV0IEVlPStjZVsxXSxCZT0rY2VbMl07cmV0''@;'; put 'put ''dXJuIWlzTmFOKCtjZVswXSkmJiFpc05hTihFZSkmJiFpc05hTihCZSl9KEQsY2UpP2Z1bmN0aW9uIHYoRCl7bGV0IFo9RC5zcGxpdCgiOiIpO3JldHVybitaWzJdKzYwKitaWzFdKzM2MDAqK1pbMF19KEQpOmgoRCxjZSxiZSxFZSxCZSxxZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIEQp''@;'; put 'put ''cmV0dXJuO3J0PUR9aWYodm9pZCAwIT09cnQpcmV0dXJuIHJ0fX19ZnVuY3Rpb24gSlgoKXtpZihpNGUpcmV0dXJuIFhYO2k0ZT0xO2xldCBjPXI0ZSgpO2NvbnN0IGw9L15bYS16XXsyLDN9KC1bYS16QS1aXXs0fSk/KC0oW0EtWl17Mn18WzAtOV17M30pKT8kLyxaPXtvdXRwdXQ6e3R5cGU6''@;'; put 'put ''InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJjdXJyZW5jeSIsInBlcmNlbnQiLCJieXRlIiwidGltZSIsIm9yZGluYWwiLCJudW1iZXIiXX0sYmFzZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImRlY2ltYWwiLCJiaW5hcnkiLCJnZW5lcmFsIl0scmVzdHJpY3Rpb246KHJ0LHB0KT0+ImJ5''@;'; put 'put ''dGUiPT09cHQub3V0cHV0LG1lc3NhZ2U6ImBiYXNlYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBieXRlYCIsbWFuZGF0b3J5OnJ0PT4iYnl0ZSI9PT1ydC5vdXRwdXR9LGNoYXJhY3RlcmlzdGljOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOnJ0PT5ydD49''@;'; put 'put ''MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0scHJlZml4OiJzdHJpbmciLHBvc3RmaXg6InN0cmluZyIsZm9yY2VBdmVyYWdlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsidHJpbGxpb24iLCJiaWxsaW9uIiwibWlsbGlvbiIsInRob3VzYW5kIl19LGF2ZXJhZ2U6ImJv''@;'; put 'put ''b2xlYW4iLGxvd1ByZWNpc2lvbjp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KHJ0LHB0KT0+ITA9PT1wdC5hdmVyYWdlLG1lc3NhZ2U6ImBsb3dQcmVjaXNpb25gIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvcHRpb24gYGF2ZXJhZ2VgIGlzIHNldCJ9LGN1cnJlbmN5UG9z''@;'; put 'put ''aXRpb246e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJwcmVmaXgiLCJpbmZpeCIsInBvc3RmaXgiXX0sY3VycmVuY3lTeW1ib2w6InN0cmluZyIsdG90YWxMZW5ndGg6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb25zOlt7cmVzdHJpY3Rpb246cnQ9PnJ0Pj0wLG1lc3NhZ2U6InZhbHVl''@;'; put 'put ''IG11c3QgYmUgcG9zaXRpdmUifSx7cmVzdHJpY3Rpb246KHJ0LHB0KT0+IXB0LmV4cG9uZW50aWFsLG1lc3NhZ2U6ImB0b3RhbExlbmd0aGAgaXMgaW5jb21wYXRpYmxlIHdpdGggYGV4cG9uZW50aWFsYCJ9XX0sbWFudGlzc2E6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246cnQ9PnJ0Pj0w''@;'; put 'put ''LG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxvcHRpb25hbE1hbnRpc3NhOiJib29sZWFuIix0cmltTWFudGlzc2E6ImJvb2xlYW4iLHJvdW5kaW5nRnVuY3Rpb246ImZ1bmN0aW9uIixvcHRpb25hbENoYXJhY3RlcmlzdGljOiJib29sZWFuIix0aG91c2FuZFNlcGFyYXRlZDoi''@;'; put 'put ''Ym9vbGVhbiIsc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiJib29sZWFuIixhYmJyZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDoic3RyaW5nIixtaWxs''@;'; put 'put ''aW9uOiJzdHJpbmciLGJpbGxpb246InN0cmluZyIsdHJpbGxpb246InN0cmluZyJ9fSxuZWdhdGl2ZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInNpZ24iLCJwYXJlbnRoZXNpcyJdfSxmb3JjZVNpZ246ImJvb2xlYW4iLGV4cG9uZW50aWFsOnt0eXBlOiJib29sZWFuIn0scHJlZml4''@;'; put 'put ''U3ltYm9sOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoocnQscHQpPT4icGVyY2VudCI9PT1wdC5vdXRwdXQsbWVzc2FnZToiYHByZWZpeFN5bWJvbGAgY2FuIGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBwZXJjZW50YCJ9fSxyZT17bGFuZ3VhZ2VUYWc6e3R5cGU6''@;'; put 'put ''InN0cmluZyIsbWFuZGF0b3J5OiEwLHJlc3RyaWN0aW9uOnJ0PT5ydC5tYXRjaChsKSxtZXNzYWdlOiJ0aGUgbGFuZ3VhZ2UgdGFnIG11c3QgZm9sbG93IHRoZSBCQ1AgNDcgc3BlY2lmaWNhdGlvbiAoc2VlIGh0dHBzOi8vdG9vbHMuaWVmdC5vcmcvaHRtbC9iY3A0NykifSxkZWxpbWl0ZXJz''@;'; put 'put ''Ont0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZHM6InN0cmluZyIsZGVjaW1hbDoic3RyaW5nIix0aG91c2FuZHNTaXplOiJudW1iZXIifSxtYW5kYXRvcnk6ITB9LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOiJzdHJpbmciLG1h''@;'; put 'put ''bmRhdG9yeTohMH0sbWlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LGJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9fSxtYW5kYXRvcnk6ITB9LHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixz''@;'; put 'put ''cGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixvcmRpbmFsOnt0eXBlOiJmdW5jdGlvbiIsbWFuZGF0b3J5OiEwfSxieXRlczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7YmluYXJ5U3VmZml4ZXM6Im9iamVjdCIsZGVjaW1hbFN1ZmZpeGVzOiJvYmplY3QifX0sY3VycmVuY3k6e3R5''@;'; put 'put ''cGU6Im9iamVjdCIsY2hpbGRyZW46e3N5bWJvbDoic3RyaW5nIixwb3NpdGlvbjoic3RyaW5nIixjb2RlOiJzdHJpbmcifSxtYW5kYXRvcnk6ITB9LGRlZmF1bHRzOiJmb3JtYXQiLG9yZGluYWxGb3JtYXQ6ImZvcm1hdCIsYnl0ZUZvcm1hdDoiZm9ybWF0IixwZXJjZW50YWdlRm9ybWF0OiJm''@;'; put 'put ''b3JtYXQiLGN1cnJlbmN5Rm9ybWF0OiJmb3JtYXQiLHRpbWVEZWZhdWx0czoiZm9ybWF0Iixmb3JtYXRzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntmb3VyRGlnaXRzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5k''@;'; put 'put ''YXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH19fX07ZnVuY3Rpb24gYmUocnQpe3JldHVybiB2b2lkIDAhPT1jLnVuZm9ybWF0KHJ0''@;'; put 'put ''KX1mdW5jdGlvbiBFZShydCxwdCxkdCxKdD0hMSl7bGV0IHZuPU9iamVjdC5rZXlzKHJ0KS5tYXAoQ249PntpZighcHRbQ25dKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSBJbnZhbGlkIGtleTogJHtDbn1gKSwhMTtsZXQgdG49cnRbQ25dLE1uPXB0W0NuXTtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIE1uJiYoTW49e3R5cGU6TW59KSwiZm9ybWF0Ij09PU1uLnR5cGUpe2lmKCFFZSh0bixaLGBbVmFsaWRhdGUgJHtDbn1dYCwhMCkpcmV0dXJuITF9ZWxzZSBpZih0eXBlb2YgdG4hPT1Nbi50eXBlKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSAke0NufSB0eXBlIG1pc21hdGNoZWQ6''@;'; put 'put ''ICIke01uLnR5cGV9IiBleHBlY3RlZCwgIiR7dHlwZW9mIHRufSIgcHJvdmlkZWRgKSwhMTtpZihNbi5yZXN0cmljdGlvbnMmJk1uLnJlc3RyaWN0aW9ucy5sZW5ndGgpe2xldCB3cj1Nbi5yZXN0cmljdGlvbnMubGVuZ3RoO2ZvcihsZXQgR3I9MDtHcjx3cjtHcisrKXtsZXR7cmVzdHJpY3Rp''@;'; put 'put ''b246bXIsbWVzc2FnZTpHbn09TW4ucmVzdHJpY3Rpb25zW0dyXTtpZighbXIodG4scnQpKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0fSAke0NufSBpbnZhbGlkIHZhbHVlOiAke0dufWApLCExfX1yZXR1cm4gTW4ucmVzdHJpY3Rpb24mJiFNbi5yZXN0cmljdGlvbih0bixydCk/KGNvbnNv''@;'; put 'put ''bGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6ICR7TW4ubWVzc2FnZX1gKSwhMSk6TW4udmFsaWRWYWx1ZXMmJi0xPT09TW4udmFsaWRWYWx1ZXMuaW5kZXhPZih0bik/KGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6IG11c3QgYmUgYW1vbmcgJHtK''@;'; put 'put ''U09OLnN0cmluZ2lmeShNbi52YWxpZFZhbHVlcyl9LCAiJHt0bn0iIHByb3ZpZGVkYCksITEpOiEoTW4uY2hpbGRyZW4mJiFFZSh0bixNbi5jaGlsZHJlbixgW1ZhbGlkYXRlICR7Q259XWApKX0pO3JldHVybiBKdHx8dm4ucHVzaCguLi5PYmplY3Qua2V5cyhwdCkubWFwKENuPT57bGV0IHRu''@;'; put 'put ''PXB0W0NuXTtpZigic3RyaW5nIj09dHlwZW9mIHRuJiYodG49e3R5cGU6dG59KSx0bi5tYW5kYXRvcnkpe2xldCBNbj10bi5tYW5kYXRvcnk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE1uJiYoTW49TW4ocnQpKSxNbiYmdm9pZCAwPT09cnRbQ25dKXJldHVybiBjb25zb2xlLmVycm9yKGAke2R0''@;'; put 'put ''fSBNaXNzaW5nIG1hbmRhdG9yeSBrZXkgIiR7Q259ImApLCExfXJldHVybiEwfSkpLHZuLnJlZHVjZSgoQ24sdG4pPT5DbiYmdG4sITApfWZ1bmN0aW9uIEJlKHJ0KXtyZXR1cm4gRWUocnQsWiwiW1ZhbGlkYXRlIGZvcm1hdF0iKX1yZXR1cm4gWFg9e3ZhbGlkYXRlOmZ1bmN0aW9uIGNlKHJ0''@;'; put 'put ''LHB0KXtsZXQgZHQ9YmUocnQpLEp0PUJlKHB0KTtyZXR1cm4gZHQmJkp0fSx2YWxpZGF0ZUZvcm1hdDpCZSx2YWxpZGF0ZUlucHV0OmJlLHZhbGlkYXRlTGFuZ3VhZ2U6ZnVuY3Rpb24gcWUocnQpe3JldHVybiBFZShydCxyZSwiW1ZhbGlkYXRlIGxhbmd1YWdlXSIpfX19dmFyIGVKLGE0ZSxR''@;'; put 'put ''WD17cGFyc2VGb3JtYXQ6ZnVuY3Rpb24gUmF0KGMsbD17fSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBjP2M6KGM9ZnVuY3Rpb24gdmF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvXnsoW159XSopfS8pO3JldHVybiBhPyhsLnByZWZpeD1hWzFdLGMuc2xpY2UoYVswXS5sZW5ndGgpKTpjfShjLGwp''@;'; put 'put ''LGM9ZnVuY3Rpb24gYmF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgveyhbXn1dKil9JC8pO3JldHVybiBhPyhsLnBvc3RmaXg9YVsxXSxjLnNsaWNlKDAsLWFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxmdW5jdGlvbiB5YXQoYyxsKXtpZigtMT09PWMuaW5kZXhPZigiJCIpKXtpZigtMT09PWMuaW5kZXhP''@;'; put 'put ''ZigiJSIpKXJldHVybi0xIT09Yy5pbmRleE9mKCJiZCIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImdlbmVyYWwiKSk6LTEhPT1jLmluZGV4T2YoImIiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJiaW5hcnkiKSk6LTEhPT1jLmluZGV4T2YoImQiKT8obC5vdXRwdXQ9''@;'; put 'put ''ImJ5dGUiLHZvaWQobC5iYXNlPSJkZWNpbWFsIikpOnZvaWQoLTE9PT1jLmluZGV4T2YoIjoiKT8tMSE9PWMuaW5kZXhPZigibyIpJiYobC5vdXRwdXQ9Im9yZGluYWwiKTpsLm91dHB1dD0idGltZSIpO2wub3V0cHV0PSJwZXJjZW50In1lbHNlIGwub3V0cHV0PSJjdXJyZW5jeSJ9KGMsbCks''@;'; put 'put ''ZnVuY3Rpb24gQ2F0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvWzEtOV0rWzAtOV0qLyk7YSYmKGwudG90YWxMZW5ndGg9K2FbMF0pfShjLGwpLGZ1bmN0aW9uIFNhdChjLGwpe2xldCBkPWMuc3BsaXQoIi4iKVswXS5tYXRjaCgvMCsvKTtkJiYobC5jaGFyYWN0ZXJpc3RpYz1kWzBdLmxlbmd0aCl9''@;'; put 'put ''KGMsbCksZnVuY3Rpb24ga2F0KGMsbCl7aWYoLTEhPT1jLmluZGV4T2YoIi4iKSl7bGV0IGE9Yy5zcGxpdCgiLiIpWzBdO2wub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYz0tMT09PWEuaW5kZXhPZigiMCIpfX0oYyxsKSxmdW5jdGlvbiBFYXQoYyxsKXstMSE9PWMuaW5kZXhPZigiYSIpJiYobC5h''@;'; put 'put ''dmVyYWdlPSEwKX0oYyxsKSxmdW5jdGlvbiBUYXQoYyxsKXstMSE9PWMuaW5kZXhPZigiSyIpP2wuZm9yY2VBdmVyYWdlPSJ0aG91c2FuZCI6LTEhPT1jLmluZGV4T2YoIk0iKT9sLmZvcmNlQXZlcmFnZT0ibWlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIkIiKT9sLmZvcmNlQXZlcmFnZT0iYmls''@;'; put 'put ''bGlvbiI6LTEhPT1jLmluZGV4T2YoIlQiKSYmKGwuZm9yY2VBdmVyYWdlPSJ0cmlsbGlvbiIpfShjLGwpLGZ1bmN0aW9uIE1hdChjLGwpe2xldCBhPWMuc3BsaXQoIi4iKVsxXTtpZihhKXtsZXQgZD1hLm1hdGNoKC8wKy8pO2QmJihsLm1hbnRpc3NhPWRbMF0ubGVuZ3RoKX19KGMsbCksZnVu''@;'; put 'put ''Y3Rpb24gQWF0KGMsbCl7Yy5tYXRjaCgvXFtcLl0vKT9sLm9wdGlvbmFsTWFudGlzc2E9ITA6Yy5tYXRjaCgvXC4vKSYmKGwub3B0aW9uYWxNYW50aXNzYT0hMSl9KGMsbCksZnVuY3Rpb24geGF0KGMsbCl7Y29uc3QgYT1jLnNwbGl0KCIuIilbMV07YSYmKGwudHJpbU1hbnRpc3NhPS0xIT09''@;'; put 'put ''YS5pbmRleE9mKCJbIikpfShjLGwpLGZ1bmN0aW9uIF9hdChjLGwpey0xIT09Yy5pbmRleE9mKCIsIikmJihsLnRob3VzYW5kU2VwYXJhdGVkPSEwKX0oYyxsKSxmdW5jdGlvbiB3YXQoYyxsKXstMSE9PWMuaW5kZXhPZigiICIpJiYobC5zcGFjZVNlcGFyYXRlZD0hMCxsLnNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQ3VycmVuY3k9ITAsKGwuYXZlcmFnZXx8bC5mb3JjZUF2ZXJhZ2UpJiYobC5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbj0hMCkpfShjLGwpLGZ1bmN0aW9uIERhdChjLGwpe2MubWF0Y2goL15cKz9cKFteKV0qXCkkLykmJihsLm5lZ2F0aXZlPSJwYXJlbnRoZXNpcyIpLGMubWF0Y2go''@;'; put 'put ''L15cKz8tLykmJihsLm5lZ2F0aXZlPSJzaWduIil9KGMsbCksZnVuY3Rpb24gSWF0KGMsbCl7Yy5tYXRjaCgvXlwrLykmJihsLmZvcmNlU2lnbj0hMCl9KGMsbCksbCl9fTtmdW5jdGlvbiB0Sigpe2lmKGE0ZSlyZXR1cm4gZUo7YTRlPTE7Y29uc3QgYz1mdW5jdGlvbiBtYXQoKXtyZXR1cm4g''@;'; put 'put ''dDRlfHwodDRlPTEsS1g9e2xhbmd1YWdlVGFnOiJlbi1VUyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sc3BhY2VTZXBhcmF0ZWQ6ITEsb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbihjKXtsZXQgbD1jJTEwO3JldHVybiAxPT1+fihjJTEwMC8xMCk/InRoIjoxPT09bD8ic3QiOjI9PT1sPyJuZCI6Mz09PWw/InJkIjoidGgifSxieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJCIiwiS2lCIiwiTWlCIiwiR2lCIiwiVGlCIiwiUGlCIiwiRWlCIiwiWmlCIiwiWWlC''@;'; put 'put ''Il0sZGVjaW1hbFN1ZmZpeGVzOlsiQiIsIktCIiwiTUIiLCJHQiIsIlRCIiwiUEIiLCJFQiIsIlpCIiwiWUIiXX0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3Ro''@;'; put 'put ''OjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFu''@;'; put 'put ''dGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSksS1h9KCksbD1KWCgpLGE9UVg7''@;'; put 'put ''bGV0IGgsZD17fSxmPXt9LHY9bnVsbCxNPXt9O2Z1bmN0aW9uIEQocmUpe2g9cmV9ZnVuY3Rpb24gWigpe3JldHVybiBmW2hdfXJldHVybiBkLmxhbmd1YWdlcz0oKT0+T2JqZWN0LmFzc2lnbih7fSxmKSxkLmN1cnJlbnRMYW5ndWFnZT0oKT0+aCxkLmN1cnJlbnRCeXRlcz0oKT0+WigpLmJ5''@;'; put 'put ''dGVzfHx7fSxkLmN1cnJlbnRDdXJyZW5jeT0oKT0+WigpLmN1cnJlbmN5LGQuY3VycmVudEFiYnJldmlhdGlvbnM9KCk9PlooKS5hYmJyZXZpYXRpb25zLGQuY3VycmVudERlbGltaXRlcnM9KCk9PlooKS5kZWxpbWl0ZXJzLGQuY3VycmVudE9yZGluYWw9KCk9PlooKS5vcmRpbmFsLGQuY3Vy''@;'; put 'put ''cmVudERlZmF1bHRzPSgpPT5PYmplY3QuYXNzaWduKHt9LFooKS5kZWZhdWx0cyxNKSxkLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5vcmRpbmFsRm9ybWF0KSxkLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1h''@;'; put 'put ''dD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5ieXRlRm9ybWF0KSxkLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5wZXJjZW50YWdlRm9ybWF0KSxkLmN1cnJlbnRD''@;'; put 'put ''dXJyZW5jeURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkuY3VycmVuY3lGb3JtYXQpLGQuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLnRpbWVGb3JtYXQp''@;'; put 'put ''LGQuc2V0RGVmYXVsdHM9cmU9PntyZT1hLnBhcnNlRm9ybWF0KHJlKSxsLnZhbGlkYXRlRm9ybWF0KHJlKSYmKE09cmUpfSxkLmdldFplcm9Gb3JtYXQ9KCk9PnYsZC5zZXRaZXJvRm9ybWF0PXJlPT52PSJzdHJpbmciPT10eXBlb2YgcmU/cmU6bnVsbCxkLmhhc1plcm9Gb3JtYXQ9KCk9Pm51''@;'; put 'put ''bGwhPT12LGQubGFuZ3VhZ2VEYXRhPXJlPT57aWYocmUpe2lmKGZbcmVdKXJldHVybiBmW3JlXTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdGFnICIke3JlfSJgKX1yZXR1cm4gWigpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2U9KHJlLGNlPSExKT0+e2lmKCFsLnZhbGlkYXRlTGFuZ3VhZ2UocmUp''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsYW5ndWFnZSBkYXRhIik7ZltyZS5sYW5ndWFnZVRhZ109cmUsY2UmJkQocmUubGFuZ3VhZ2VUYWcpfSxkLnNldExhbmd1YWdlPShyZSxjZT1jLmxhbmd1YWdlVGFnKT0+e2lmKCFmW3JlXSl7bGV0IGJlPXJlLnNwbGl0KCItIilbMF0sRWU9T2Jq''@;'; put 'put ''ZWN0LmtleXMoZikuZmluZChCZT0+QmUuc3BsaXQoIi0iKVswXT09PWJlKTtyZXR1cm4gZltFZV0/dm9pZCBEKEVlKTp2b2lkIEQoY2UpfUQocmUpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2UoYyksaD1jLmxhbmd1YWdlVGFnLGVKPWR9dmFyIG80ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGMpeyFm''@;'; put 'put ''dW5jdGlvbihsKXt2YXIgYSxkPS9eLT8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKSg/OmVbKy1dP1xkKyk/JC9pLGg9TWF0aC5jZWlsLGY9TWF0aC5mbG9vcix2PSJbQmlnTnVtYmVyIEVycm9yXSAiLE09disiTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRp''@;'; put 'put ''Z2l0czogIixEPTFlMTQsWj0xNCxyZT05MDA3MTk5MjU0NzQwOTkxLGNlPVsxLDEwLDEwMCwxZTMsMWU0LDFlNSwxZTYsMWU3LDFlOCwxZTksMWUxMCwxZTExLDFlMTIsMWUxM10sYmU9MWU3LEVlPTFlOTtmdW5jdGlvbiBxZSh0bil7dmFyIE1uPTB8dG47cmV0dXJuIHRuPjB8fHRuPT09TW4/''@;'; put 'put ''TW46TW4tMX1mdW5jdGlvbiBydCh0bil7Zm9yKHZhciBNbix3cixHcj0xLG1yPXRuLmxlbmd0aCxHbj10blswXSsiIjtHcjxtcjspe2ZvcihNbj10bltHcisrXSsiIix3cj1aLU1uLmxlbmd0aDt3ci0tO01uPSIwIitNbik7R24rPU1ufWZvcihtcj1Hbi5sZW5ndGg7NDg9PT1Hbi5jaGFyQ29k''@;'; put 'put ''ZUF0KC0tbXIpOyk7cmV0dXJuIEduLnNsaWNlKDAsbXIrMXx8MSl9ZnVuY3Rpb24gcHQodG4sTW4pe3ZhciB3cixHcixtcj10bi5jLEduPU1uLmMsYWk9dG4ucyxfaT1Nbi5zLE9uPXRuLmUsenI9TW4uZTtpZighYWl8fCFfaSlyZXR1cm4gbnVsbDtpZihHcj1HbiYmIUduWzBdLCh3cj1tciYm''@;'; put 'put ''IW1yWzBdKXx8R3IpcmV0dXJuIHdyP0dyPzA6LV9pOmFpO2lmKGFpIT1faSlyZXR1cm4gYWk7aWYod3I9YWk8MCxHcj1Pbj09enIsIW1yfHwhR24pcmV0dXJuIEdyPzA6IW1yXndyPzE6LTE7aWYoIUdyKXJldHVybiBPbj56cl53cj8xOi0xO2ZvcihfaT0oT249bXIubGVuZ3RoKTwoenI9R24u''@;'; put 'put ''bGVuZ3RoKT9Pbjp6cixhaT0wO2FpPF9pO2FpKyspaWYobXJbYWldIT1HblthaV0pcmV0dXJuIG1yW2FpXT5HblthaV1ed3I/MTotMTtyZXR1cm4gT249PXpyPzA6T24+enJed3I/MTotMX1mdW5jdGlvbiBkdCh0bixNbix3cixHcil7aWYodG48TW58fHRuPndyfHx0biE9PWYodG4pKXRocm93''@;'; put 'put ''IEVycm9yKHYrKEdyfHwiQXJndW1lbnQiKSsoIm51bWJlciI9PXR5cGVvZiB0bj90bjxNbnx8dG4+d3I/IiBvdXQgb2YgcmFuZ2U6ICI6IiBub3QgYW4gaW50ZWdlcjogIjoiIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICIpK1N0cmluZyh0bikpfWZ1bmN0aW9uIEp0KHRuKXt2YXIgTW49dG4u''@;'; put 'put ''Yy5sZW5ndGgtMTtyZXR1cm4gcWUodG4uZS9aKT09TW4mJnRuLmNbTW5dJTIhPTB9ZnVuY3Rpb24gdm4odG4sTW4pe3JldHVybih0bi5sZW5ndGg+MT90bi5jaGFyQXQoMCkrIi4iK3RuLnNsaWNlKDEpOnRuKSsoTW48MD8iZSI6ImUrIikrTW59ZnVuY3Rpb24gQ24odG4sTW4sd3Ipe3ZhciBH''@;'; put 'put ''cixtcjtpZihNbjwwKXtmb3IobXI9d3IrIi4iOysrTW47bXIrPXdyKTt0bj1tcit0bn1lbHNlIGlmKCsrTW4+KEdyPXRuLmxlbmd0aCkpe2Zvcihtcj13cixNbi09R3I7LS1Nbjttcis9d3IpO3RuKz1tcn1lbHNlIE1uPEdyJiYodG49dG4uc2xpY2UoMCxNbikrIi4iK3RuLnNsaWNlKE1uKSk7''@;'; put 'put ''cmV0dXJuIHRufWE9ZnVuY3Rpb24gQmUodG4pe3ZhciBNbix3cixHcixvbix5bixtcj1GdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZ0LHRvU3RyaW5nOm51bGwsdmFsdWVPZjpudWxsfSxHbj1uZXcgRnQoMSksYWk9MjAsX2k9NCxPbj0tNyx6cj0yMSxKbj0tMWU3LERyPTFlNywkcj0hMSx3''@;'; put 'put ''aT0xLGVhPTAsZmE9e3ByZWZpeDoiIixncm91cFNpemU6MyxzZWNvbmRhcnlHcm91cFNpemU6MCxncm91cFNlcGFyYXRvcjoiLCIsZGVjaW1hbFNlcGFyYXRvcjoiLiIsZnJhY3Rpb25Hcm91cFNpemU6MCxmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiJceGEwIixzdWZmaXg6IiJ9LHZ0PSIwMTIz''@;'; put 'put ''NDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLE50PSEwO2Z1bmN0aW9uIEZ0KG9uLHluKXt2YXIgcG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXI9dGhpcztpZighKE1yIGluc3RhbmNlb2YgRnQpKXJldHVybiBuZXcgRnQob24seW4pO2lmKG51bGw9PXluKXtpZihvbiYmITA9PT1v''@;'; put 'put ''bi5faXNCaWdOdW1iZXIpcmV0dXJuIE1yLnM9b24ucyx2b2lkKCFvbi5jfHxvbi5lPkRyP01yLmM9TXIuZT1udWxsOm9uLmU8Sm4/TXIuYz1bTXIuZT0wXTooTXIuZT1vbi5lLE1yLmM9b24uYy5zbGljZSgpKSk7aWYoKFpuPSJudW1iZXIiPT10eXBlb2Ygb24pJiYwKm9uPT0wKXtpZihNci5z''@;'; put 'put ''PTEvb248MD8ob249LW9uLC0xKToxLG9uPT09fn5vbil7Zm9yKGRyPTAsVXI9b247VXI+PTEwO1VyLz0xMCxkcisrKTtyZXR1cm4gdm9pZChkcj5Ecj9Nci5jPU1yLmU9bnVsbDooTXIuZT1kcixNci5jPVtvbl0pKX1Ocj1TdHJpbmcob24pfWVsc2V7aWYoIWQudGVzdChOcj1TdHJpbmcob24p''@;'; put 'put ''KSlyZXR1cm4gR3IoTXIsTnIsWm4pO01yLnM9NDU9PU5yLmNoYXJDb2RlQXQoMCk/KE5yPU5yLnNsaWNlKDEpLC0xKToxfShkcj1Oci5pbmRleE9mKCIuIikpPi0xJiYoTnI9TnIucmVwbGFjZSgiLiIsIiIpKSwoVXI9TnIuc2VhcmNoKC9lL2kpKT4wPyhkcjwwJiYoZHI9VXIpLGRyKz0rTnIu''@;'; put 'put ''c2xpY2UoVXIrMSksTnI9TnIuc3Vic3RyaW5nKDAsVXIpKTpkcjwwJiYoZHI9TnIubGVuZ3RoKX1lbHNle2lmKGR0KHluLDIsdnQubGVuZ3RoLCJCYXNlIiksMTA9PXluJiZOdClyZXR1cm4gSHIoTXI9bmV3IEZ0KG9uKSxhaStNci5lKzEsX2kpO2lmKE5yPVN0cmluZyhvbiksWm49Im51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBvbil7aWYoMCpvbiE9MClyZXR1cm4gR3IoTXIsTnIsWm4seW4pO2lmKE1yLnM9MS9vbjwwPyhOcj1Oci5zbGljZSgxKSwtMSk6MSxGdC5ERUJVRyYmTnIucmVwbGFjZSgvXjBcLjAqfFwuLywiIikubGVuZ3RoPjE1KXRocm93IEVycm9yKE0rb24pfWVsc2UgTXIucz00NT09''@;'; put 'put ''PU5yLmNoYXJDb2RlQXQoMCk/KE5yPU5yLnNsaWNlKDEpLC0xKToxO2Zvcihwbj12dC5zbGljZSgwLHluKSxkcj1Vcj0wLHNyPU5yLmxlbmd0aDtVcjxzcjtVcisrKWlmKHBuLmluZGV4T2YocHI9TnIuY2hhckF0KFVyKSk8MCl7aWYoIi4iPT1wcil7aWYoVXI+ZHIpe2RyPXNyO2NvbnRpbnVl''@;'; put 'put ''fX1lbHNlIGlmKCEkbiYmKE5yPT1Oci50b1VwcGVyQ2FzZSgpJiYoTnI9TnIudG9Mb3dlckNhc2UoKSl8fE5yPT1Oci50b0xvd2VyQ2FzZSgpJiYoTnI9TnIudG9VcHBlckNhc2UoKSkpKXskbj0hMCxVcj0tMSxkcj0wO2NvbnRpbnVlfXJldHVybiBHcihNcixTdHJpbmcob24pLFpuLHluKX1a''@;'; put 'put ''bj0hMSwoZHI9KE5yPXdyKE5yLHluLDEwLE1yLnMpKS5pbmRleE9mKCIuIikpPi0xP05yPU5yLnJlcGxhY2UoIi4iLCIiKTpkcj1Oci5sZW5ndGh9Zm9yKFVyPTA7NDg9PT1Oci5jaGFyQ29kZUF0KFVyKTtVcisrKTtmb3Ioc3I9TnIubGVuZ3RoOzQ4PT09TnIuY2hhckNvZGVBdCgtLXNyKTsp''@;'; put 'put ''O2lmKE5yPU5yLnNsaWNlKFVyLCsrc3IpKXtpZihzci09VXIsWm4mJkZ0LkRFQlVHJiZzcj4xNSYmKG9uPnJlfHxvbiE9PWYob24pKSl0aHJvdyBFcnJvcihNK01yLnMqb24pO2lmKChkcj1kci1Vci0xKT5EcilNci5jPU1yLmU9bnVsbDtlbHNlIGlmKGRyPEpuKU1yLmM9W01yLmU9MF07ZWxz''@;'; put 'put ''ZXtpZihNci5lPWRyLE1yLmM9W10sVXI9KGRyKzEpJVosZHI8MCYmKFVyKz1aKSxVcjxzcil7Zm9yKFVyJiZNci5jLnB1c2goK05yLnNsaWNlKDAsVXIpKSxzci09WjtVcjxzcjspTXIuYy5wdXNoKCtOci5zbGljZShVcixVcis9WikpO1VyPVotKE5yPU5yLnNsaWNlKFVyKSkubGVuZ3RofWVs''@;'; put 'put ''c2UgVXItPXNyO2Zvcig7VXItLTtOcis9IjAiKTtNci5jLnB1c2goK05yKX19ZWxzZSBNci5jPVtNci5lPTBdfWZ1bmN0aW9uIEhuKG9uLHluLHBuLHByKXt2YXIgJG4sZHIsVXIsWm4sc3I7aWYobnVsbD09cG4/cG49X2k6ZHQocG4sMCw4KSwhb24uYylyZXR1cm4gb24udG9TdHJpbmcoKTtp''@;'; put 'put ''Zigkbj1vbi5jWzBdLFVyPW9uLmUsbnVsbD09eW4pc3I9cnQob24uYyksc3I9MT09cHJ8fDI9PXByJiYoVXI8PU9ufHxVcj49enIpP3ZuKHNyLFVyKTpDbihzcixVciwiMCIpO2Vsc2UgaWYoZHI9KG9uPUhyKG5ldyBGdChvbikseW4scG4pKS5lLFpuPShzcj1ydChvbi5jKSkubGVuZ3RoLDE9''@;'; put 'put ''PXByfHwyPT1wciYmKHluPD1kcnx8ZHI8PU9uKSl7Zm9yKDtabjx5bjtzcis9IjAiLFpuKyspO3NyPXZuKHNyLGRyKX1lbHNlIGlmKHluLT1Vcixzcj1DbihzcixkciwiMCIpLGRyKzE+Wm4pe2lmKC0teW4+MClmb3Ioc3IrPSIuIjt5bi0tO3NyKz0iMCIpO31lbHNlIGlmKCh5bis9ZHItWm4p''@;'; put 'put ''PjApZm9yKGRyKzE9PVpuJiYoc3IrPSIuIik7eW4tLTtzcis9IjAiKTtyZXR1cm4gb24uczwwJiYkbj8iLSIrc3I6c3J9ZnVuY3Rpb24gdHIob24seW4pe2Zvcih2YXIgcG4scHIsJG49MSxkcj1uZXcgRnQob25bMF0pOyRuPG9uLmxlbmd0aDskbisrKSghKHByPW5ldyBGdChvblskbl0pKS5z''@;'; put 'put ''fHwocG49cHQoZHIscHIpKT09PXlufHwwPT09cG4mJmRyLnM9PT15bikmJihkcj1wcik7cmV0dXJuIGRyfWZ1bmN0aW9uIGFyKG9uLHluLHBuKXtmb3IodmFyIHByPTEsJG49eW4ubGVuZ3RoOyF5blstLSRuXTt5bi5wb3AoKSk7Zm9yKCRuPXluWzBdOyRuPj0xMDskbi89MTAscHIrKyk7cmV0''@;'; put 'put ''dXJuKHBuPXByK3BuKlotMSk+RHI/b24uYz1vbi5lPW51bGw6cG48Sm4/b24uYz1bb24uZT0wXToob24uZT1wbixvbi5jPXluKSxvbn1mdW5jdGlvbiBIcihvbix5bixwbixwcil7dmFyICRuLGRyLFVyLFpuLHNyLE5yLE1yLFpyPW9uLmMsYWE9Y2U7aWYoWnIpe2U6e2Zvcigkbj0xLFpuPVpy''@;'; put 'put ''WzBdO1puPj0xMDtabi89MTAsJG4rKyk7aWYoKGRyPXluLSRuKTwwKWRyKz1aLHNyPVpyW05yPTBdLE1yPWYoc3IvYWFbJG4tKFVyPXluKS0xXSUxMCk7ZWxzZSBpZigoTnI9aCgoZHIrMSkvWikpPj1aci5sZW5ndGgpe2lmKCFwcilicmVhayBlO2Zvcig7WnIubGVuZ3RoPD1Ocjtaci5wdXNo''@;'; put 'put ''KDApKTtzcj1Ncj0wLCRuPTEsVXI9KGRyJT1aKS1aKzF9ZWxzZXtmb3Ioc3I9Wm49WnJbTnJdLCRuPTE7Wm4+PTEwO1puLz0xMCwkbisrKTtNcj0oVXI9KGRyJT1aKS1aKyRuKTwwPzA6Zihzci9hYVskbi1Vci0xXSUxMCl9aWYocHI9cHJ8fHluPDB8fG51bGwhPVpyW05yKzFdfHwoVXI8MD9z''@;'; put 'put ''cjpzciVhYVskbi1Vci0xXSkscHI9cG48ND8oTXJ8fHByKSYmKDA9PXBufHxwbj09KG9uLnM8MD8zOjIpKTpNcj41fHw1PT1NciYmKDQ9PXBufHxwcnx8Nj09cG4mJihkcj4wP1VyPjA/c3IvYWFbJG4tVXJdOjA6WnJbTnItMV0pJTEwJjF8fHBuPT0ob24uczwwPzg6NykpLHluPDF8fCFaclsw''@;'; put 'put ''XSlyZXR1cm4gWnIubGVuZ3RoPTAscHI/KFpyWzBdPWFhWyhaLSh5bi09b24uZSsxKSVaKSVaXSxvbi5lPS15bnx8MCk6WnJbMF09b24uZT0wLG9uO2lmKDA9PWRyPyhaci5sZW5ndGg9TnIsWm49MSxOci0tKTooWnIubGVuZ3RoPU5yKzEsWm49YWFbWi1kcl0sWnJbTnJdPVVyPjA/Zihzci9h''@;'; put 'put ''YVskbi1Vcl0lYWFbVXJdKSpabjowKSxwcilmb3IoOzspe2lmKDA9PU5yKXtmb3IoZHI9MSxVcj1aclswXTtVcj49MTA7VXIvPTEwLGRyKyspO2ZvcihVcj1aclswXSs9Wm4sWm49MTtVcj49MTA7VXIvPTEwLFpuKyspO2RyIT1abiYmKG9uLmUrKyxaclswXT09RCYmKFpyWzBdPTEpKTticmVh''@;'; put 'put ''a31pZihacltOcl0rPVpuLFpyW05yXSE9RClicmVhaztacltOci0tXT0wLFpuPTF9Zm9yKGRyPVpyLmxlbmd0aDswPT09WnJbLS1kcl07WnIucG9wKCkpO31vbi5lPkRyP29uLmM9b24uZT1udWxsOm9uLmU8Sm4mJihvbi5jPVtvbi5lPTBdKX1yZXR1cm4gb259ZnVuY3Rpb24gcXIob24pe3Zh''@;'; put 'put ''ciB5bixwbj1vbi5lO3JldHVybiBudWxsPT09cG4/b24udG9TdHJpbmcoKTooeW49cnQob24uYykseW49cG48PU9ufHxwbj49enI/dm4oeW4scG4pOkNuKHluLHBuLCIwIiksb24uczwwPyItIit5bjp5bil9cmV0dXJuIEZ0LmNsb25lPUJlLEZ0LlJPVU5EX1VQPTAsRnQuUk9VTkRfRE9XTj0x''@;'; put 'put ''LEZ0LlJPVU5EX0NFSUw9MixGdC5ST1VORF9GTE9PUj0zLEZ0LlJPVU5EX0hBTEZfVVA9NCxGdC5ST1VORF9IQUxGX0RPV049NSxGdC5ST1VORF9IQUxGX0VWRU49NixGdC5ST1VORF9IQUxGX0NFSUw9NyxGdC5ST1VORF9IQUxGX0ZMT09SPTgsRnQuRVVDTElEPTksRnQuY29uZmlnPUZ0LnNl''@;'; put 'put ''dD1mdW5jdGlvbihvbil7dmFyIHluLHBuO2lmKG51bGwhPW9uKXtpZigib2JqZWN0IiE9dHlwZW9mIG9uKXRocm93IEVycm9yKHYrIk9iamVjdCBleHBlY3RlZDogIitvbik7aWYob24uaGFzT3duUHJvcGVydHkoeW49IkRFQ0lNQUxfUExBQ0VTIikmJihkdChwbj1vblt5bl0sMCxFZSx5biks''@;'; put 'put ''YWk9cG4pLG9uLmhhc093blByb3BlcnR5KHluPSJST1VORElOR19NT0RFIikmJihkdChwbj1vblt5bl0sMCw4LHluKSxfaT1wbiksb24uaGFzT3duUHJvcGVydHkoeW49IkVYUE9ORU5USUFMX0FUIikmJigocG49b25beW5dKSYmcG4ucG9wPyhkdChwblswXSwtRWUsMCx5biksZHQocG5bMV0s''@;'; put 'put ''MCxFZSx5biksT249cG5bMF0senI9cG5bMV0pOihkdChwbiwtRWUsRWUseW4pLE9uPS0oenI9cG48MD8tcG46cG4pKSksb24uaGFzT3duUHJvcGVydHkoeW49IlJBTkdFIikpaWYoKHBuPW9uW3luXSkmJnBuLnBvcClkdChwblswXSwtRWUsLTEseW4pLGR0KHBuWzFdLDEsRWUseW4pLEpuPXBu''@;'; put 'put ''WzBdLERyPXBuWzFdO2Vsc2V7aWYoZHQocG4sLUVlLEVlLHluKSwhcG4pdGhyb3cgRXJyb3Iodit5bisiIGNhbm5vdCBiZSB6ZXJvOiAiK3BuKTtKbj0tKERyPXBuPDA/LXBuOnBuKX1pZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iQ1JZUFRPIikpe2lmKChwbj1vblt5bl0pIT09ISFwbil0aHJv''@;'; put 'put ''dyBFcnJvcih2K3luKyIgbm90IHRydWUgb3IgZmFsc2U6ICIrcG4pO2lmKHBuKXtpZighKHR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8mJihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzfHxjcnlwdG8ucmFuZG9tQnl0ZXMpKSl0aHJvdyAkcj0hcG4sRXJyb3IodisiY3J5cHRvIHVuYXZhaWxhYmxl''@;'; put 'put ''Iik7JHI9cG59ZWxzZSAkcj1wbn1pZihvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iTU9EVUxPX01PREUiKSYmKGR0KHBuPW9uW3luXSwwLDkseW4pLHdpPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eSh5bj0iUE9XX1BSRUNJU0lPTiIpJiYoZHQocG49b25beW5dLDAsRWUseW4pLGVhPXBuKSxvbi5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eSh5bj0iRk9STUFUIikpe2lmKCJvYmplY3QiIT10eXBlb2YocG49b25beW5dKSl0aHJvdyBFcnJvcih2K3luKyIgbm90IGFuIG9iamVjdDogIitwbik7ZmE9cG59aWYob24uaGFzT3duUHJvcGVydHkoeW49IkFMUEhBQkVUIikpe2lmKCJzdHJpbmciIT10eXBlb2YocG49b25b''@;'; put 'put ''eW5dKXx8L14uPyR8WytcLS5cc118KC4pLipcMS8udGVzdChwbikpdGhyb3cgRXJyb3Iodit5bisiIGludmFsaWQ6ICIrcG4pO050PSIwMTIzNDU2Nzg5Ij09cG4uc2xpY2UoMCwxMCksdnQ9cG59fXJldHVybntERUNJTUFMX1BMQUNFUzphaSxST1VORElOR19NT0RFOl9pLEVYUE9ORU5USUFM''@;'; put 'put ''X0FUOltPbix6cl0sUkFOR0U6W0puLERyXSxDUllQVE86JHIsTU9EVUxPX01PREU6d2ksUE9XX1BSRUNJU0lPTjplYSxGT1JNQVQ6ZmEsQUxQSEFCRVQ6dnR9fSxGdC5pc0JpZ051bWJlcj1mdW5jdGlvbihvbil7aWYoIW9ufHwhMCE9PW9uLl9pc0JpZ051bWJlcilyZXR1cm4hMTtpZighRnQu''@;'; put 'put ''REVCVUcpcmV0dXJuITA7dmFyIHluLHBuLHByPW9uLmMsJG49b24uZSxkcj1vbi5zO2U6aWYoIltvYmplY3QgQXJyYXldIj09e30udG9TdHJpbmcuY2FsbChwcikpe2lmKCgxPT09ZHJ8fC0xPT09ZHIpJiYkbj49LUVlJiYkbjw9RWUmJiRuPT09Zigkbikpe2lmKDA9PT1wclswXSl7aWYoMD09''@;'; put 'put ''PSRuJiYxPT09cHIubGVuZ3RoKXJldHVybiEwO2JyZWFrIGV9aWYoKHluPSgkbisxKSVaKTwxJiYoeW4rPVopLFN0cmluZyhwclswXSkubGVuZ3RoPT15bil7Zm9yKHluPTA7eW48cHIubGVuZ3RoO3luKyspaWYoKHBuPXByW3luXSk8MHx8cG4+PUR8fHBuIT09ZihwbikpYnJlYWsgZTtpZigw''@;'; put 'put ''IT09cG4pcmV0dXJuITB9fX1lbHNlIGlmKG51bGw9PT1wciYmbnVsbD09PSRuJiYobnVsbD09PWRyfHwxPT09ZHJ8fC0xPT09ZHIpKXJldHVybiEwO3Rocm93IEVycm9yKHYrIkludmFsaWQgQmlnTnVtYmVyOiAiK29uKX0sRnQubWF4aW11bT1GdC5tYXg9ZnVuY3Rpb24oKXtyZXR1cm4gdHIo''@;'; put 'put ''YXJndW1lbnRzLC0xKX0sRnQubWluaW11bT1GdC5taW49ZnVuY3Rpb24oKXtyZXR1cm4gdHIoYXJndW1lbnRzLDEpfSxGdC5yYW5kb209KG9uPTkwMDcxOTkyNTQ3NDA5OTIseW49TWF0aC5yYW5kb20oKSpvbiYyMDk3MTUxP2Z1bmN0aW9uKCl7cmV0dXJuIGYoTWF0aC5yYW5kb20oKSpvbil9''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIDgzODg2MDgqKDEwNzM3NDE4MjQqTWF0aC5yYW5kb20oKXwwKSsoODM4ODYwOCpNYXRoLnJhbmRvbSgpfDApfSxmdW5jdGlvbihwbil7dmFyIHByLCRuLGRyLFVyLFpuLHNyPTAsTnI9W10sTXI9bmV3IEZ0KEduKTtpZihudWxsPT1wbj9wbj1haTpkdChwbiww''@;'; put 'put ''LEVlKSxVcj1oKHBuL1opLCRyKWlmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe2Zvcihwcj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShVcio9MikpO3NyPFVyOykoWm49MTMxMDcyKnByW3NyXSsocHJbc3IrMV0+Pj4xMSkpPj05ZTE1Pygkbj1jcnlwdG8uZ2V0UmFu''@;'; put 'put ''ZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSkscHJbc3JdPSRuWzBdLHByW3NyKzFdPSRuWzFdKTooTnIucHVzaChabiUxZTE0KSxzcis9Mik7c3I9VXIvMn1lbHNle2lmKCFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgJHI9ITEsRXJyb3IodisiY3J5cHRvIHVuYXZhaWxhYmxlIik7Zm9y''@;'; put 'put ''KHByPWNyeXB0by5yYW5kb21CeXRlcyhVcio9Nyk7c3I8VXI7KShabj0yODE0NzQ5NzY3MTA2NTYqKDMxJnByW3NyXSkrMTA5OTUxMTYyNzc3NipwcltzcisxXSs0Mjk0OTY3Mjk2KnByW3NyKzJdKzE2Nzc3MjE2KnByW3NyKzNdKyhwcltzcis0XTw8MTYpKyhwcltzcis1XTw8OCkrcHJbc3Ir''@;'; put 'put ''Nl0pPj05ZTE1P2NyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KHByLHNyKTooTnIucHVzaChabiUxZTE0KSxzcis9Nyk7c3I9VXIvN31pZighJHIpZm9yKDtzcjxVcjspKFpuPXluKCkpPDllMTUmJihOcltzcisrXT1abiUxZTE0KTtmb3IoVXI9TnJbLS1zcl0scG4lPVosVXImJnBuJiYoTnJb''@;'; put 'put ''c3JdPWYoVXIvKFpuPWNlW1otcG5dKSkqWm4pOzA9PT1Ocltzcl07TnIucG9wKCksc3ItLSk7aWYoc3I8MClOcj1bZHI9MF07ZWxzZXtmb3IoZHI9LTE7MD09PU5yWzBdO05yLnNwbGljZSgwLDEpLGRyLT1aKTtmb3Ioc3I9MSxabj1OclswXTtabj49MTA7Wm4vPTEwLHNyKyspO3NyPFomJihk''@;'; put 'put ''ci09Wi1zcil9cmV0dXJuIE1yLmU9ZHIsTXIuYz1OcixNcn0pLEZ0LnN1bT1mdW5jdGlvbigpe2Zvcih2YXIgb249MSx5bj1hcmd1bWVudHMscG49bmV3IEZ0KHluWzBdKTtvbjx5bi5sZW5ndGg7KXBuPXBuLnBsdXMoeW5bb24rK10pO3JldHVybiBwbn0sd3I9ZnVuY3Rpb24oKXt2YXIgb249''@;'; put 'put ''IjAxMjM0NTY3ODkiO2Z1bmN0aW9uIHluKHBuLHByLCRuLGRyKXtmb3IodmFyIFVyLHNyLFpuPVswXSxOcj0wLE1yPXBuLmxlbmd0aDtOcjxNcjspe2Zvcihzcj1abi5sZW5ndGg7c3ItLTtabltzcl0qPXByKTtmb3IoWm5bMF0rPWRyLmluZGV4T2YocG4uY2hhckF0KE5yKyspKSxVcj0wO1Vy''@;'; put 'put ''PFpuLmxlbmd0aDtVcisrKVpuW1VyXT4kbi0xJiYobnVsbD09Wm5bVXIrMV0mJihabltVcisxXT0wKSxabltVcisxXSs9Wm5bVXJdLyRufDAsWm5bVXJdJT0kbil9cmV0dXJuIFpuLnJldmVyc2UoKX1yZXR1cm4gZnVuY3Rpb24ocG4scHIsJG4sZHIsVXIpe3ZhciBabixzcixOcixNcixacixh''@;'; put 'put ''YSxCYSxJbyxabz1wbi5pbmRleE9mKCIuIikscHM9YWksTW89X2k7Zm9yKFpvPj0wJiYoTXI9ZWEsZWE9MCxwbj1wbi5yZXBsYWNlKCIuIiwiIiksYWE9KElvPW5ldyBGdChwcikpLnBvdyhwbi5sZW5ndGgtWm8pLGVhPU1yLElvLmM9eW4oQ24ocnQoYWEuYyksYWEuZSwiMCIpLDEwLCRuLG9u''@;'; put 'put ''KSxJby5lPUlvLmMubGVuZ3RoKSxOcj1Ncj0oQmE9eW4ocG4scHIsJG4sVXI/KFpuPXZ0LG9uKTooWm49b24sdnQpKSkubGVuZ3RoOzA9PUJhWy0tTXJdO0JhLnBvcCgpKTtpZighQmFbMF0pcmV0dXJuIFpuLmNoYXJBdCgwKTtpZihabzwwPy0tTnI6KGFhLmM9QmEsYWEuZT1OcixhYS5zPWRy''@;'; put 'put ''LEJhPShhYT1NbihhYSxJbyxwcyxNbywkbikpLmMsWnI9YWEucixOcj1hYS5lKSxabz1CYVtzcj1OcitwcysxXSxNcj0kbi8yLFpyPVpyfHxzcjwwfHxudWxsIT1CYVtzcisxXSxacj1Nbzw0PyhudWxsIT1ab3x8WnIpJiYoMD09TW98fE1vPT0oYWEuczwwPzM6MikpOlpvPk1yfHxabz09TXIm''@;'; put 'put ''Jig0PT1Nb3x8WnJ8fDY9PU1vJiYxJkJhW3NyLTFdfHxNbz09KGFhLnM8MD84OjcpKSxzcjwxfHwhQmFbMF0pcG49WnI/Q24oWm4uY2hhckF0KDEpLC1wcyxabi5jaGFyQXQoMCkpOlpuLmNoYXJBdCgwKTtlbHNle2lmKEJhLmxlbmd0aD1zcixacilmb3IoLS0kbjsrK0JhWy0tc3JdPiRuOylC''@;'; put 'put ''YVtzcl09MCxzcnx8KCsrTnIsQmE9WzFdLmNvbmNhdChCYSkpO2ZvcihNcj1CYS5sZW5ndGg7IUJhWy0tTXJdOyk7Zm9yKFpvPTAscG49IiI7Wm88PU1yO3BuKz1abi5jaGFyQXQoQmFbWm8rK10pKTtwbj1DbihwbixOcixabi5jaGFyQXQoMCkpfXJldHVybiBwbn19KCksTW49ZnVuY3Rpb24o''@;'; put 'put ''KXtmdW5jdGlvbiBvbihwciwkbixkcil7dmFyIFVyLFpuLHNyLE5yLE1yPTAsWnI9cHIubGVuZ3RoLGFhPSRuJWJlLEJhPSRuL2JlfDA7Zm9yKHByPXByLnNsaWNlKCk7WnItLTspTXI9KChabj1hYSooc3I9cHJbWnJdJWJlKSsoVXI9QmEqc3IrKE5yPXByW1pyXS9iZXwwKSphYSklYmUqYmUr''@;'; put 'put ''TXIpL2RyfDApKyhVci9iZXwwKStCYSpOcixwcltacl09Wm4lZHI7cmV0dXJuIE1yJiYocHI9W01yXS5jb25jYXQocHIpKSxwcn1mdW5jdGlvbiB5bihwciwkbixkcixVcil7dmFyIFpuLHNyO2lmKGRyIT1Vcilzcj1kcj5Vcj8xOi0xO2Vsc2UgZm9yKFpuPXNyPTA7Wm48ZHI7Wm4rKylpZihw''@;'; put 'put ''cltabl0hPSRuW1puXSl7c3I9cHJbWm5dPiRuW1puXT8xOi0xO2JyZWFrfXJldHVybiBzcn1mdW5jdGlvbiBwbihwciwkbixkcixVcil7Zm9yKHZhciBabj0wO2RyLS07KXByW2RyXS09Wm4scHJbZHJdPShabj1wcltkcl08JG5bZHJdPzE6MCkqVXIrcHJbZHJdLSRuW2RyXTtmb3IoOyFwclsw''@;'; put 'put ''XSYmcHIubGVuZ3RoPjE7cHIuc3BsaWNlKDAsMSkpO31yZXR1cm4gZnVuY3Rpb24ocHIsJG4sZHIsVXIsWm4pe3ZhciBzcixOcixNcixacixhYSxCYSxJbyxabyxwcyxNbyxocyxuYyxRbyxNMyxhZCx6cyxKYyxLcz1wci5zPT0kbi5zPzE6LTEsQmw9cHIuYyxlcz0kbi5jO2lmKCEoQmwmJkJs''@;'; put 'put ''WzBdJiZlcyYmZXNbMF0pKXJldHVybiBuZXcgRnQocHIucyYmJG4ucyYmKEJsPyFlc3x8QmxbMF0hPWVzWzBdOmVzKT9CbCYmMD09QmxbMF18fCFlcz8wKktzOktzLzA6TmFOKTtmb3IocHM9KFpvPW5ldyBGdChLcykpLmM9W10sS3M9ZHIrKE5yPXByLmUtJG4uZSkrMSxabnx8KFpuPUQsTnI9''@;'; put 'put ''cWUocHIuZS9aKS1xZSgkbi5lL1opLEtzPUtzL1p8MCksTXI9MDtlc1tNcl09PShCbFtNcl18fDApO01yKyspO2lmKGVzW01yXT4oQmxbTXJdfHwwKSYmTnItLSxLczwwKXBzLnB1c2goMSksWnI9ITA7ZWxzZXtmb3IoTTM9QmwubGVuZ3RoLHpzPWVzLmxlbmd0aCxNcj0wLEtzKz0yLChhYT1m''@;'; put 'put ''KFpuLyhlc1swXSsxKSkpPjEmJihlcz1vbihlcyxhYSxabiksQmw9b24oQmwsYWEsWm4pLHpzPWVzLmxlbmd0aCxNMz1CbC5sZW5ndGgpLFFvPXpzLGhzPShNbz1CbC5zbGljZSgwLHpzKSkubGVuZ3RoO2hzPHpzO01vW2hzKytdPTApO0pjPWVzLnNsaWNlKCksSmM9WzBdLmNvbmNhdChKYyks''@;'; put 'put ''YWQ9ZXNbMF0sZXNbMV0+PVpuLzImJmFkKys7ZG97aWYoYWE9MCwoc3I9eW4oZXMsTW8senMsaHMpKTwwKXtpZihuYz1Nb1swXSx6cyE9aHMmJihuYz1uYypabisoTW9bMV18fDApKSwoYWE9ZihuYy9hZCkpPjEpZm9yKGFhPj1abiYmKGFhPVpuLTEpLElvPShCYT1vbihlcyxhYSxabikpLmxl''@;'; put 'put ''bmd0aCxocz1Nby5sZW5ndGg7MT09eW4oQmEsTW8sSW8saHMpOylhYS0tLHBuKEJhLHpzPElvP0pjOmVzLElvLFpuKSxJbz1CYS5sZW5ndGgsc3I9MTtlbHNlIDA9PWFhJiYoc3I9YWE9MSksSW89KEJhPWVzLnNsaWNlKCkpLmxlbmd0aDtpZihJbzxocyYmKEJhPVswXS5jb25jYXQoQmEpKSxw''@;'; put 'put ''bihNbyxCYSxocyxabiksaHM9TW8ubGVuZ3RoLC0xPT1zcilmb3IoO3luKGVzLE1vLHpzLGhzKTwxOylhYSsrLHBuKE1vLHpzPGhzP0pjOmVzLGhzLFpuKSxocz1Nby5sZW5ndGh9ZWxzZSAwPT09c3ImJihhYSsrLE1vPVswXSk7cHNbTXIrK109YWEsTW9bMF0/TW9baHMrK109QmxbUW9dfHww''@;'; put 'put ''OihNbz1bQmxbUW9dXSxocz0xKX13aGlsZSgoUW8rKzxNM3x8bnVsbCE9TW9bMF0pJiZLcy0tKTtacj1udWxsIT1Nb1swXSxwc1swXXx8cHMuc3BsaWNlKDAsMSl9aWYoWm49PUQpe2ZvcihNcj0xLEtzPXBzWzBdO0tzPj0xMDtLcy89MTAsTXIrKyk7SHIoWm8sZHIrKFpvLmU9TXIrTnIqWi0x''@;'; put 'put ''KSsxLFVyLFpyKX1lbHNlIFpvLmU9TnIsWm8ucj0rWnI7cmV0dXJuIFpvfX0oKSxHcj1mdW5jdGlvbigpe3ZhciBvbj0vXigtPykwKFt4Ym9dKSg/PVx3W1x3Ll0qJCkvaSx5bj0vXihbXi5dKylcLiQvLHBuPS9eXC4oW14uXSspJC8scHI9L14tPyhJbmZpbml0eXxOYU4pJC8sJG49L15ccypc''@;'; put 'put ''Kyg/PVtcdy5dKXxeXHMrfFxzKyQvZztyZXR1cm4gZnVuY3Rpb24oZHIsVXIsWm4sc3Ipe3ZhciBOcixNcj1abj9VcjpVci5yZXBsYWNlKCRuLCIiKTtpZihwci50ZXN0KE1yKSlkci5zPWlzTmFOKE1yKT9udWxsOk1yPDA/LTE6MTtlbHNle2lmKCFabiYmKE1yPU1yLnJlcGxhY2Uob24sZnVu''@;'; put 'put ''Y3Rpb24oWnIsYWEsQmEpe3JldHVybiBOcj0ieCI9PShCYT1CYS50b0xvd2VyQ2FzZSgpKT8xNjoiYiI9PUJhPzI6OCxzciYmc3IhPU5yP1pyOmFhfSksc3ImJihOcj1zcixNcj1Nci5yZXBsYWNlKHluLCIkMSIpLnJlcGxhY2UocG4sIjAuJDEiKSksVXIhPU1yKSlyZXR1cm4gbmV3IEZ0KE1y''@;'; put 'put ''LE5yKTtpZihGdC5ERUJVRyl0aHJvdyBFcnJvcih2KyJOb3QgYSIrKHNyPyIgYmFzZSAiK3NyOiIiKSsiIG51bWJlcjogIitVcik7ZHIucz1udWxsfWRyLmM9ZHIuZT1udWxsfX0oKSxtci5hYnNvbHV0ZVZhbHVlPW1yLmFicz1mdW5jdGlvbigpe3ZhciBvbj1uZXcgRnQodGhpcyk7cmV0dXJu''@;'; put 'put ''IG9uLnM8MCYmKG9uLnM9MSksb259LG1yLmNvbXBhcmVkVG89ZnVuY3Rpb24ob24seW4pe3JldHVybiBwdCh0aGlzLG5ldyBGdChvbix5bikpfSxtci5kZWNpbWFsUGxhY2VzPW1yLmRwPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG47aWYobnVsbCE9b24pcmV0dXJuIGR0KG9uLDAsRWUp''@;'; put 'put ''LG51bGw9PXluP3luPV9pOmR0KHluLDAsOCksSHIobmV3IEZ0KHRoaXMpLG9uK3RoaXMuZSsxLHluKTtpZighKHBuPXRoaXMuYykpcmV0dXJuIG51bGw7aWYocHI9KCgkbj1wbi5sZW5ndGgtMSktcWUodGhpcy5lL1opKSpaLCRuPXBuWyRuXSlmb3IoOyRuJTEwPT0wOyRuLz0xMCxwci0tKTty''@;'; put 'put ''ZXR1cm4gcHI8MCYmKHByPTApLHByfSxtci5kaXZpZGVkQnk9bXIuZGl2PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gTW4odGhpcyxuZXcgRnQob24seW4pLGFpLF9pKX0sbXIuZGl2aWRlZFRvSW50ZWdlckJ5PW1yLmlkaXY9ZnVuY3Rpb24ob24seW4pe3JldHVybiBNbih0aGlzLG5ldyBGdChv''@;'; put 'put ''bix5biksMCwxKX0sbXIuZXhwb25lbnRpYXRlZEJ5PW1yLnBvdz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuLGRyLFpuLHNyLE5yLE1yLFpyPXRoaXM7aWYoKG9uPW5ldyBGdChvbikpLmMmJiFvbi5pc0ludGVnZXIoKSl0aHJvdyBFcnJvcih2KyJFeHBvbmVudCBub3QgYW4gaW50ZWdl''@;'; put 'put ''cjogIitxcihvbikpO2lmKG51bGwhPXluJiYoeW49bmV3IEZ0KHluKSksWm49b24uZT4xNCwhWnIuY3x8IVpyLmNbMF18fDE9PVpyLmNbMF0mJiFaci5lJiYxPT1aci5jLmxlbmd0aHx8IW9uLmN8fCFvbi5jWzBdKXJldHVybiBNcj1uZXcgRnQoTWF0aC5wb3coK3FyKFpyKSxabj9vbi5zKigy''@;'; put 'put ''LUp0KG9uKSk6K3FyKG9uKSkpLHluP01yLm1vZCh5bik6TXI7aWYoc3I9b24uczwwLHluKXtpZih5bi5jPyF5bi5jWzBdOiF5bi5zKXJldHVybiBuZXcgRnQoTmFOKTsocHI9IXNyJiZaci5pc0ludGVnZXIoKSYmeW4uaXNJbnRlZ2VyKCkpJiYoWnI9WnIubW9kKHluKSl9ZWxzZXtpZihvbi5l''@;'; put 'put ''PjkmJihaci5lPjB8fFpyLmU8LTF8fCgwPT1aci5lP1pyLmNbMF0+MXx8Wm4mJlpyLmNbMV0+PTI0ZTc6WnIuY1swXTw4ZTEzfHxabiYmWnIuY1swXTw9OTk5OTk3NWU3KSkpcmV0dXJuIGRyPVpyLnM8MCYmSnQob24pPy0wOjAsWnIuZT4tMSYmKGRyPTEvZHIpLG5ldyBGdChzcj8xL2RyOmRy''@;'; put 'put ''KTtlYSYmKGRyPWgoZWEvWisyKSl9Zm9yKFpuPyhwbj1uZXcgRnQoLjUpLHNyJiYob24ucz0xKSxOcj1KdChvbikpOk5yPSgkbj1NYXRoLmFicygrcXIob24pKSklMixNcj1uZXcgRnQoR24pOzspe2lmKE5yKXtpZighKE1yPU1yLnRpbWVzKFpyKSkuYylicmVhaztkcj9Nci5jLmxlbmd0aD5k''@;'; put 'put ''ciYmKE1yLmMubGVuZ3RoPWRyKTpwciYmKE1yPU1yLm1vZCh5bikpfWlmKCRuKXtpZigwPT09KCRuPWYoJG4vMikpKWJyZWFrO05yPSRuJTJ9ZWxzZSBpZihIcihvbj1vbi50aW1lcyhwbiksb24uZSsxLDEpLG9uLmU+MTQpTnI9SnQob24pO2Vsc2V7aWYoMD09KCRuPStxcihvbikpKWJyZWFr''@;'; put 'put ''O05yPSRuJTJ9WnI9WnIudGltZXMoWnIpLGRyP1pyLmMmJlpyLmMubGVuZ3RoPmRyJiYoWnIuYy5sZW5ndGg9ZHIpOnByJiYoWnI9WnIubW9kKHluKSl9cmV0dXJuIHByP01yOihzciYmKE1yPUduLmRpdihNcikpLHluP01yLm1vZCh5bik6ZHI/SHIoTXIsZWEsX2ksdm9pZCAwKTpNcil9LG1y''@;'; put 'put ''LmludGVnZXJWYWx1ZT1mdW5jdGlvbihvbil7dmFyIHluPW5ldyBGdCh0aGlzKTtyZXR1cm4gbnVsbD09b24/b249X2k6ZHQob24sMCw4KSxIcih5bix5bi5lKzEsb24pfSxtci5pc0VxdWFsVG89bXIuZXE9ZnVuY3Rpb24ob24seW4pe3JldHVybiAwPT09cHQodGhpcyxuZXcgRnQob24seW4p''@;'; put 'put ''KX0sbXIuaXNGaW5pdGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY30sbXIuaXNHcmVhdGVyVGhhbj1tci5ndD1mdW5jdGlvbihvbix5bil7cmV0dXJuIHB0KHRoaXMsbmV3IEZ0KG9uLHluKSk+MH0sbXIuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbz1tci5ndGU9ZnVuY3Rpb24ob24seW4pe3Jl''@;'; put 'put ''dHVybiAxPT09KHluPXB0KHRoaXMsbmV3IEZ0KG9uLHluKSkpfHwwPT09eW59LG1yLmlzSW50ZWdlcj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiZxZSh0aGlzLmUvWik+dGhpcy5jLmxlbmd0aC0yfSxtci5pc0xlc3NUaGFuPW1yLmx0PWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gcHQodGhp''@;'; put 'put ''cyxuZXcgRnQob24seW4pKTwwfSxtci5pc0xlc3NUaGFuT3JFcXVhbFRvPW1yLmx0ZT1mdW5jdGlvbihvbix5bil7cmV0dXJuLTE9PT0oeW49cHQodGhpcyxuZXcgRnQob24seW4pKSl8fDA9PT15bn0sbXIuaXNOYU49ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zfSxtci5pc05lZ2F0aXZlPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSxtci5pc1Bvc2l0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucz4wfSxtci5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmMD09dGhpcy5jWzBdfSxtci5taW51cz1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuLGRyLFVyPXRo''@;'; put 'put ''aXMsWm49VXIucztpZih5bj0ob249bmV3IEZ0KG9uLHluKSkucywhWm58fCF5bilyZXR1cm4gbmV3IEZ0KE5hTik7aWYoWm4hPXluKXJldHVybiBvbi5zPS15bixVci5wbHVzKG9uKTt2YXIgc3I9VXIuZS9aLE5yPW9uLmUvWixNcj1Vci5jLFpyPW9uLmM7aWYoIXNyfHwhTnIpe2lmKCFNcnx8''@;'; put 'put ''IVpyKXJldHVybiBNcj8ob24ucz0teW4sb24pOm5ldyBGdChacj9VcjpOYU4pO2lmKCFNclswXXx8IVpyWzBdKXJldHVybiBaclswXT8ob24ucz0teW4sb24pOm5ldyBGdChNclswXT9VcjozPT1faT8tMDowKX1pZihzcj1xZShzciksTnI9cWUoTnIpLE1yPU1yLnNsaWNlKCksWm49c3ItTnIp''@;'; put 'put ''e2ZvcigoZHI9Wm48MCk/KFpuPS1abiwkbj1Ncik6KE5yPXNyLCRuPVpyKSwkbi5yZXZlcnNlKCkseW49Wm47eW4tLTskbi5wdXNoKDApKTskbi5yZXZlcnNlKCl9ZWxzZSBmb3IocHI9KGRyPShabj1Nci5sZW5ndGgpPCh5bj1aci5sZW5ndGgpKT9abjp5bixabj15bj0wO3luPHByO3luKysp''@;'; put 'put ''aWYoTXJbeW5dIT1aclt5bl0pe2RyPU1yW3luXTxaclt5bl07YnJlYWt9aWYoZHImJigkbj1NcixNcj1acixacj0kbixvbi5zPS1vbi5zKSwoeW49KHByPVpyLmxlbmd0aCktKHBuPU1yLmxlbmd0aCkpPjApZm9yKDt5bi0tO01yW3BuKytdPTApO2Zvcih5bj1ELTE7cHI+Wm47KXtpZihNclst''@;'; put 'put ''LXByXTxacltwcl0pe2Zvcihwbj1wcjtwbiYmIU1yWy0tcG5dO01yW3BuXT15bik7LS1Ncltwbl0sTXJbcHJdKz1EfU1yW3ByXS09WnJbcHJdfWZvcig7MD09TXJbMF07TXIuc3BsaWNlKDAsMSksLS1Ocik7cmV0dXJuIE1yWzBdP2FyKG9uLE1yLE5yKToob24ucz0zPT1faT8tMToxLG9uLmM9''@;'; put 'put ''W29uLmU9MF0sb24pfSxtci5tb2R1bG89bXIubW9kPWZ1bmN0aW9uKG9uLHluKXt2YXIgcG4scHIsJG49dGhpcztyZXR1cm4gb249bmV3IEZ0KG9uLHluKSwhJG4uY3x8IW9uLnN8fG9uLmMmJiFvbi5jWzBdP25ldyBGdChOYU4pOiFvbi5jfHwkbi5jJiYhJG4uY1swXT9uZXcgRnQoJG4pOig5''@;'; put 'put ''PT13aT8ocHI9b24ucyxvbi5zPTEscG49TW4oJG4sb24sMCwzKSxvbi5zPXByLHBuLnMqPXByKTpwbj1NbigkbixvbiwwLHdpKSwhKG9uPSRuLm1pbnVzKHBuLnRpbWVzKG9uKSkpLmNbMF0mJjE9PXdpJiYob24ucz0kbi5zKSxvbil9LG1yLm11bHRpcGxpZWRCeT1tci50aW1lcz1mdW5jdGlv''@;'; put 'put ''bihvbix5bil7dmFyIHBuLHByLCRuLGRyLFVyLFpuLHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvLHBzLE1vPXRoaXMsaHM9TW8uYyxuYz0ob249bmV3IEZ0KG9uLHluKSkuYztpZighKGhzJiZuYyYmaHNbMF0mJm5jWzBdKSlyZXR1cm4hTW8uc3x8IW9uLnN8fGhzJiYhaHNbMF0mJiFuY3x8bmMm''@;'; put 'put ''JiFuY1swXSYmIWhzP29uLmM9b24uZT1vbi5zPW51bGw6KG9uLnMqPU1vLnMsaHMmJm5jPyhvbi5jPVswXSxvbi5lPTApOm9uLmM9b24uZT1udWxsKSxvbjtmb3IocHI9cWUoTW8uZS9aKStxZShvbi5lL1opLG9uLnMqPU1vLnMsKHNyPWhzLmxlbmd0aCk8KFpyPW5jLmxlbmd0aCkmJihJbz1o''@;'; put 'put ''cyxocz1uYyxuYz1Jbywkbj1zcixzcj1acixacj0kbiksJG49c3IrWnIsSW89W107JG4tLTtJby5wdXNoKDApKTtmb3IoWm89RCxwcz1iZSwkbj1acjstLSRuPj0wOyl7Zm9yKHBuPTAsYWE9bmNbJG5dJXBzLEJhPW5jWyRuXS9wc3wwLGRyPSRuKyhVcj1zcik7ZHI+JG47KXBuPSgoTnI9YWEq''@;'; put 'put ''KE5yPWhzWy0tVXJdJXBzKSsoWm49QmEqTnIrKE1yPWhzW1VyXS9wc3wwKSphYSklcHMqcHMrSW9bZHJdK3BuKS9ab3wwKSsoWm4vcHN8MCkrQmEqTXIsSW9bZHItLV09TnIlWm87SW9bZHJdPXBufXJldHVybiBwbj8rK3ByOklvLnNwbGljZSgwLDEpLGFyKG9uLElvLHByKX0sbXIubmVnYXRl''@;'; put 'put ''ZD1mdW5jdGlvbigpe3ZhciBvbj1uZXcgRnQodGhpcyk7cmV0dXJuIG9uLnM9LW9uLnN8fG51bGwsb259LG1yLnBsdXM9ZnVuY3Rpb24ob24seW4pe3ZhciBwbixwcj10aGlzLCRuPXByLnM7aWYoeW49KG9uPW5ldyBGdChvbix5bikpLnMsISRufHwheW4pcmV0dXJuIG5ldyBGdChOYU4pO2lm''@;'; put 'put ''KCRuIT15bilyZXR1cm4gb24ucz0teW4scHIubWludXMob24pO3ZhciBkcj1wci5lL1osVXI9b24uZS9aLFpuPXByLmMsc3I9b24uYztpZighZHJ8fCFVcil7aWYoIVpufHwhc3IpcmV0dXJuIG5ldyBGdCgkbi8wKTtpZighWm5bMF18fCFzclswXSlyZXR1cm4gc3JbMF0/b246bmV3IEZ0KFpu''@;'; put 'put ''WzBdP3ByOjAqJG4pfWlmKGRyPXFlKGRyKSxVcj1xZShVciksWm49Wm4uc2xpY2UoKSwkbj1kci1Vcil7Zm9yKCRuPjA/KFVyPWRyLHBuPXNyKTooJG49LSRuLHBuPVpuKSxwbi5yZXZlcnNlKCk7JG4tLTtwbi5wdXNoKDApKTtwbi5yZXZlcnNlKCl9Zm9yKCgkbj1abi5sZW5ndGgpLSh5bj1z''@;'; put 'put ''ci5sZW5ndGgpPDAmJihwbj1zcixzcj1abixabj1wbix5bj0kbiksJG49MDt5bjspJG49KFpuWy0teW5dPVpuW3luXStzclt5bl0rJG4pL0R8MCxablt5bl09RD09PVpuW3luXT8wOlpuW3luXSVEO3JldHVybiAkbiYmKFpuPVskbl0uY29uY2F0KFpuKSwrK1VyKSxhcihvbixabixVcil9LG1y''@;'; put 'put ''LnByZWNpc2lvbj1tci5zZD1mdW5jdGlvbihvbix5bil7dmFyIHBuLHByLCRuO2lmKG51bGwhPW9uJiZvbiE9PSEhb24pcmV0dXJuIGR0KG9uLDEsRWUpLG51bGw9PXluP3luPV9pOmR0KHluLDAsOCksSHIobmV3IEZ0KHRoaXMpLG9uLHluKTtpZighKHBuPXRoaXMuYykpcmV0dXJuIG51bGw7''@;'; put 'put ''aWYocHI9KCRuPXBuLmxlbmd0aC0xKSpaKzEsJG49cG5bJG5dKXtmb3IoOyRuJTEwPT0wOyRuLz0xMCxwci0tKTtmb3IoJG49cG5bMF07JG4+PTEwOyRuLz0xMCxwcisrKTt9cmV0dXJuIG9uJiZ0aGlzLmUrMT5wciYmKHByPXRoaXMuZSsxKSxwcn0sbXIuc2hpZnRlZEJ5PWZ1bmN0aW9uKG9u''@;'; put 'put ''KXtyZXR1cm4gZHQob24sLXJlLHJlKSx0aGlzLnRpbWVzKCIxZSIrb24pfSxtci5zcXVhcmVSb290PW1yLnNxcnQ9ZnVuY3Rpb24oKXt2YXIgb24seW4scG4scHIsJG4sZHI9dGhpcyxVcj1kci5jLFpuPWRyLnMsc3I9ZHIuZSxOcj1haSs0LE1yPW5ldyBGdCgiMC41Iik7aWYoMSE9PVpufHwh''@;'; put 'put ''VXJ8fCFVclswXSlyZXR1cm4gbmV3IEZ0KCFabnx8Wm48MCYmKCFVcnx8VXJbMF0pP05hTjpVcj9kcjoxLzApO2lmKDA9PShabj1NYXRoLnNxcnQoK3FyKGRyKSkpfHxabj09MS8wPygoKHluPXJ0KFVyKSkubGVuZ3RoK3NyKSUyPT0wJiYoeW4rPSIwIiksWm49TWF0aC5zcXJ0KCt5biksc3I9''@;'; put 'put ''cWUoKHNyKzEpLzIpLShzcjwwfHxzciUyKSxwbj1uZXcgRnQoeW49Wm49PTEvMD8iNWUiK3NyOih5bj1abi50b0V4cG9uZW50aWFsKCkpLnNsaWNlKDAseW4uaW5kZXhPZigiZSIpKzEpK3NyKSk6cG49bmV3IEZ0KFpuKyIiKSxwbi5jWzBdKWZvcigoWm49KHNyPXBuLmUpK05yKTwzJiYoWm49''@;'; put 'put ''MCk7OylpZihwbj1Nci50aW1lcygoJG49cG4pLnBsdXMoTW4oZHIsJG4sTnIsMSkpKSxydCgkbi5jKS5zbGljZSgwLFpuKT09PSh5bj1ydChwbi5jKSkuc2xpY2UoMCxabikpe2lmKHBuLmU8c3ImJi0tWm4sIjk5OTkiIT0oeW49eW4uc2xpY2UoWm4tMyxabisxKSkmJihwcnx8IjQ5OTkiIT15''@;'; put 'put ''bikpeyghK3lufHwhK3luLnNsaWNlKDEpJiYiNSI9PXluLmNoYXJBdCgwKSkmJihIcihwbixwbi5lK2FpKzIsMSksb249IXBuLnRpbWVzKHBuKS5lcShkcikpO2JyZWFrfWlmKCFwciYmKEhyKCRuLCRuLmUrYWkrMiwwKSwkbi50aW1lcygkbikuZXEoZHIpKSl7cG49JG47YnJlYWt9TnIrPTQs''@;'; put 'put ''Wm4rPTQscHI9MX1yZXR1cm4gSHIocG4scG4uZSthaSsxLF9pLG9uKX0sbXIudG9FeHBvbmVudGlhbD1mdW5jdGlvbihvbix5bil7cmV0dXJuIG51bGwhPW9uJiYoZHQob24sMCxFZSksb24rKyksSG4odGhpcyxvbix5biwxKX0sbXIudG9GaXhlZD1mdW5jdGlvbihvbix5bil7cmV0dXJuIG51''@;'; put 'put ''bGwhPW9uJiYoZHQob24sMCxFZSksb249b24rdGhpcy5lKzEpLEhuKHRoaXMsb24seW4pfSxtci50b0Zvcm1hdD1mdW5jdGlvbihvbix5bixwbil7dmFyIHByO2lmKG51bGw9PXBuKW51bGwhPW9uJiZ5biYmIm9iamVjdCI9PXR5cGVvZiB5bj8ocG49eW4seW49bnVsbCk6b24mJiJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2Ygb24/KHBuPW9uLG9uPXluPW51bGwpOnBuPWZhO2Vsc2UgaWYoIm9iamVjdCIhPXR5cGVvZiBwbil0aHJvdyBFcnJvcih2KyJBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAiK3BuKTtpZihwcj10aGlzLnRvRml4ZWQob24seW4pLHRoaXMuYyl7dmFyIGRyLFVyPXByLnNwbGl0KCIu''@;'; put 'put ''IiksWm49K3BuLmdyb3VwU2l6ZSxzcj0rcG4uc2Vjb25kYXJ5R3JvdXBTaXplLE5yPXBuLmdyb3VwU2VwYXJhdG9yfHwiIixNcj1VclswXSxacj1VclsxXSxhYT10aGlzLnM8MCxCYT1hYT9Nci5zbGljZSgxKTpNcixJbz1CYS5sZW5ndGg7aWYoc3ImJihkcj1abixabj1zcixzcj1kcixJby09''@;'; put 'put ''ZHIpLFpuPjAmJklvPjApe2ZvcihNcj1CYS5zdWJzdHIoMCxkcj1JbyVabnx8Wm4pO2RyPElvO2RyKz1abilNcis9TnIrQmEuc3Vic3RyKGRyLFpuKTtzcj4wJiYoTXIrPU5yK0JhLnNsaWNlKGRyKSksYWEmJihNcj0iLSIrTXIpfXByPVpyP01yKyhwbi5kZWNpbWFsU2VwYXJhdG9yfHwiIikr''@;'; put 'put ''KChzcj0rcG4uZnJhY3Rpb25Hcm91cFNpemUpP1pyLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxkeyIrc3IrIn1cXEIiLCJnIiksIiQmIisocG4uZnJhY3Rpb25Hcm91cFNlcGFyYXRvcnx8IiIpKTpacik6TXJ9cmV0dXJuKHBuLnByZWZpeHx8IiIpK3ByKyhwbi5zdWZmaXh8fCIiKX0sbXIudG9G''@;'; put 'put ''cmFjdGlvbj1mdW5jdGlvbihvbil7dmFyIHluLHBuLHByLCRuLGRyLFVyLFpuLHNyLE5yLE1yLFpyLGFhLEJhPXRoaXMsSW89QmEuYztpZihudWxsIT1vbiYmKCEoWm49bmV3IEZ0KG9uKSkuaXNJbnRlZ2VyKCkmJihabi5jfHwxIT09Wm4ucyl8fFpuLmx0KEduKSkpdGhyb3cgRXJyb3Iodisi''@;'; put 'put ''QXJndW1lbnQgIisoWm4uaXNJbnRlZ2VyKCk/Im91dCBvZiByYW5nZTogIjoibm90IGFuIGludGVnZXI6ICIpK3FyKFpuKSk7aWYoIUlvKXJldHVybiBuZXcgRnQoQmEpO2Zvcih5bj1uZXcgRnQoR24pLE5yPXBuPW5ldyBGdChHbikscHI9c3I9bmV3IEZ0KEduKSxhYT1ydChJbyksZHI9eW4u''@;'; put 'put ''ZT1hYS5sZW5ndGgtQmEuZS0xLHluLmNbMF09Y2VbKFVyPWRyJVopPDA/WitVcjpVcl0sb249IW9ufHxabi5jb21wYXJlZFRvKHluKT4wP2RyPjA/eW46TnI6Wm4sVXI9RHIsRHI9MS8wLFpuPW5ldyBGdChhYSksc3IuY1swXT0wO01yPU1uKFpuLHluLDAsMSksMSE9KCRuPXBuLnBsdXMoTXIu''@;'; put 'put ''dGltZXMocHIpKSkuY29tcGFyZWRUbyhvbik7KXBuPXByLHByPSRuLE5yPXNyLnBsdXMoTXIudGltZXMoJG49TnIpKSxzcj0kbix5bj1abi5taW51cyhNci50aW1lcygkbj15bikpLFpuPSRuO3JldHVybiAkbj1Nbihvbi5taW51cyhwbikscHIsMCwxKSxzcj1zci5wbHVzKCRuLnRpbWVzKE5y''@;'; put 'put ''KSkscG49cG4ucGx1cygkbi50aW1lcyhwcikpLHNyLnM9TnIucz1CYS5zLFpyPU1uKE5yLHByLGRyKj0yLF9pKS5taW51cyhCYSkuYWJzKCkuY29tcGFyZWRUbyhNbihzcixwbixkcixfaSkubWludXMoQmEpLmFicygpKTwxP1tOcixwcl06W3NyLHBuXSxEcj1Vcixacn0sbXIudG9OdW1iZXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4rcXIodGhpcyl9LG1yLnRvUHJlY2lzaW9uPWZ1bmN0aW9uKG9uLHluKXtyZXR1cm4gbnVsbCE9b24mJmR0KG9uLDEsRWUpLEhuKHRoaXMsb24seW4sMil9LG1yLnRvU3RyaW5nPWZ1bmN0aW9uKG9uKXt2YXIgeW4scG49dGhpcyxwcj1wbi5zLCRuPXBuLmU7cmV0''@;'; put 'put ''dXJuIG51bGw9PT0kbj9wcj8oeW49IkluZmluaXR5IixwcjwwJiYoeW49Ii0iK3luKSk6eW49Ik5hTiI6KG51bGw9PW9uP3luPSRuPD1Pbnx8JG4+PXpyP3ZuKHJ0KHBuLmMpLCRuKTpDbihydChwbi5jKSwkbiwiMCIpOjEwPT09b24mJk50P3luPUNuKHJ0KChwbj1IcihuZXcgRnQocG4pLGFp''@;'; put 'put ''KyRuKzEsX2kpKS5jKSxwbi5lLCIwIik6KGR0KG9uLDIsdnQubGVuZ3RoLCJCYXNlIikseW49d3IoQ24ocnQocG4uYyksJG4sIjAiKSwxMCxvbixwciwhMCkpLHByPDAmJnBuLmNbMF0mJih5bj0iLSIreW4pKSx5bn0sbXIudmFsdWVPZj1tci50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gcXIo''@;'; put 'put ''dGhpcyl9LG1yLl9pc0JpZ051bWJlcj0hMCxudWxsIT10biYmRnQuc2V0KHRuKSxGdH0oKSxhLmRlZmF1bHQ9YS5CaWdOdW1iZXI9YSxjLmV4cG9ydHM/Yy5leHBvcnRzPWE6KGx8fChsPXR5cGVvZiBzZWxmPCJ1IiYmc2VsZj9zZWxmOndpbmRvdyksbC5CaWdOdW1iZXI9YSl9KHBhdCl9KG80''@;'; put 'put ''ZSk7dmFyIHM0ZT1vNGUuZXhwb3J0cztjb25zdCBmMz10SigpLEZhdD1KWCgpLEhhdD1RWCxOYXQ9czRlLFcwPXt0cmlsbGlvbjpNYXRoLnBvdygxMCwxMiksYmlsbGlvbjpNYXRoLnBvdygxMCw5KSxtaWxsaW9uOk1hdGgucG93KDEwLDYpLHRob3VzYW5kOk1hdGgucG93KDEwLDMpfSxvVD17''@;'; put 'put ''dG90YWxMZW5ndGg6MCxjaGFyYWN0ZXJpc3RpYzowLGZvcmNlQXZlcmFnZTohMSxhdmVyYWdlOiExLG1hbnRpc3NhOi0xLG9wdGlvbmFsTWFudGlzc2E6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITEsc3BhY2VTZXBhcmF0ZWQ6ITEsbmVnYXRpdmU6InNpZ24iLGZvcmNlU2lnbjohMSxyb3VuZGlu''@;'; put 'put ''Z0Z1bmN0aW9uOk1hdGgucm91bmQsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ITF9LHtiaW5hcnlTdWZmaXhlczpsNGUsZGVjaW1hbFN1ZmZpeGVzOllQfT1mMy5jdXJyZW50Qnl0ZXMoKSxuSj17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpZUCxtYXJrZXI6ImJkIn0sYmluYXJ5''@;'; put 'put ''OntzY2FsZToxMDI0LHN1ZmZpeGVzOmw0ZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6WVAsbWFya2VyOiJkIn19O2Z1bmN0aW9uIEdQKGMsbCxhKXtsZXQgZD1sWzBdLGg9TWF0aC5hYnMoYyk7aWYoaD49YSl7Zm9yKGxldCBmPTE7ZjxsLmxlbmd0aDsrK2Ype2xl''@;'; put 'put ''dCB2PU1hdGgucG93KGEsZiksTT1NYXRoLnBvdyhhLGYrMSk7aWYoaD49diYmaDxNKXtkPWxbZl0sYy89djticmVha319ZD09PWxbMF0mJihjLz1NYXRoLnBvdyhhLGwubGVuZ3RoLTEpLGQ9bFtsLmxlbmd0aC0xXSl9cmV0dXJue3ZhbHVlOmMsc3VmZml4OmR9fWZ1bmN0aW9uICRQKGMpe2xl''@;'; put 'put ''dCBsPSIiO2ZvcihsZXQgYT0wO2E8YzthKyspbCs9IjAiO3JldHVybiBsfWZ1bmN0aW9uIHNUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YT1mMyxkZWNpbWFsU2VwYXJhdG9yOmQsZGVmYXVsdHM6aD1hLmN1cnJlbnREZWZhdWx0cygpfSl7bGV0IGY9Yy5fdmFsdWU7aWYo''@;'; put 'put ''MD09PWYmJmEuaGFzWmVyb0Zvcm1hdCgpKXJldHVybiBhLmdldFplcm9Gb3JtYXQoKTtpZighaXNGaW5pdGUoZikpcmV0dXJuIGYudG9TdHJpbmcoKTtsZXQgdj1PYmplY3QuYXNzaWduKHt9LG9ULGgsbCksTT12LnRvdGFsTGVuZ3RoLEQ9TT8wOnYuY2hhcmFjdGVyaXN0aWMsWj12Lm9wdGlv''@;'; put 'put ''bmFsQ2hhcmFjdGVyaXN0aWMscmU9di5mb3JjZUF2ZXJhZ2UsYmU9ISFNfHwhIXJlfHx2LmF2ZXJhZ2UsRWU9TT8tMTpiZSYmdm9pZCAwPT09bC5tYW50aXNzYT8wOnYubWFudGlzc2EsQmU9IU0mJih2b2lkIDA9PT1sLm9wdGlvbmFsTWFudGlzc2E/LTE9PT1FZTp2Lm9wdGlvbmFsTWFudGlz''@;'; put 'put ''c2EpLHFlPXYudHJpbU1hbnRpc3NhLHJ0PXYudGhvdXNhbmRTZXBhcmF0ZWQscHQ9di5zcGFjZVNlcGFyYXRlZCxkdD12Lm5lZ2F0aXZlLEp0PXYuZm9yY2VTaWduLHZuPXYuZXhwb25lbnRpYWwsQ249di5yb3VuZGluZ0Z1bmN0aW9uLHRuPSIiO2lmKGJlKXtsZXQgd3I9ZnVuY3Rpb24gS2F0''@;'; put 'put ''KHt2YWx1ZTpjLGZvcmNlQXZlcmFnZTpsLGxvd1ByZWNpc2lvbjphPSEwLGFiYnJldmlhdGlvbnM6ZCxzcGFjZVNlcGFyYXRlZDpoPSExLHRvdGFsTGVuZ3RoOmY9MCxyb3VuZGluZ0Z1bmN0aW9uOnY9TWF0aC5yb3VuZH0pe2xldCBNPSIiLEQ9TWF0aC5hYnMoYyksWj0tMTtpZihsJiZkW2xd''@;'; put 'put ''JiZXMFtsXT8oTT1kW2xdLGMvPVcwW2xdKTpEPj1XMC50cmlsbGlvbnx8YSYmMT09PXYoRC9XMC50cmlsbGlvbik/KE09ZC50cmlsbGlvbixjLz1XMC50cmlsbGlvbik6RDxXMC50cmlsbGlvbiYmRD49VzAuYmlsbGlvbnx8YSYmMT09PXYoRC9XMC5iaWxsaW9uKT8oTT1kLmJpbGxpb24sYy89''@;'; put 'put ''VzAuYmlsbGlvbik6RDxXMC5iaWxsaW9uJiZEPj1XMC5taWxsaW9ufHxhJiYxPT09dihEL1cwLm1pbGxpb24pPyhNPWQubWlsbGlvbixjLz1XMC5taWxsaW9uKTooRDxXMC5taWxsaW9uJiZEPj1XMC50aG91c2FuZHx8YSYmMT09PXYoRC9XMC50aG91c2FuZCkpJiYoTT1kLnRob3VzYW5kLGMv''@;'; put 'put ''PVcwLnRob3VzYW5kKSxNJiYoTT0oaD8iICI6IiIpK00pLGYpe2xldCBjZT1jPDAsYmU9Yy50b1N0cmluZygpLnNwbGl0KCIuIilbMF07Wj1NYXRoLm1heChmLShjZT9iZS5sZW5ndGgtMTpiZS5sZW5ndGgpLDApfXJldHVybnt2YWx1ZTpjLGFiYnJldmlhdGlvbjpNLG1hbnRpc3NhUHJlY2lz''@;'; put 'put ''aW9uOlp9fSh7dmFsdWU6Zixmb3JjZUF2ZXJhZ2U6cmUsbG93UHJlY2lzaW9uOnYubG93UHJlY2lzaW9uLGFiYnJldmlhdGlvbnM6YS5jdXJyZW50QWJicmV2aWF0aW9ucygpLHNwYWNlU2VwYXJhdGVkOnB0LHJvdW5kaW5nRnVuY3Rpb246Q24sdG90YWxMZW5ndGg6TX0pO2Y9d3IudmFsdWUs''@;'; put 'put ''dG4rPXdyLmFiYnJldmlhdGlvbixNJiYoRWU9d3IubWFudGlzc2FQcmVjaXNpb24pfWlmKHZuKXtsZXQgd3I9ZnVuY3Rpb24gcWF0KHt2YWx1ZTpjLGNoYXJhY3RlcmlzdGljUHJlY2lzaW9uOmx9KXtsZXRbYSxkXT1jLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZSIpLGg9K2E7cmV0dXJuIGw/''@;'; put 'put ''KDE8bCYmKGgqPU1hdGgucG93KDEwLGwtMSksZD0rZC0obC0xKSxkPWQ+PTA/YCske2R9YDpkKSx7dmFsdWU6aCxhYmJyZXZpYXRpb246YGUke2R9YH0pOnt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfX0oe3ZhbHVlOmYsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246RH0pO2Y9d3IudmFs''@;'; put 'put ''dWUsdG49d3IuYWJicmV2aWF0aW9uK3RufWxldCBNbj1mdW5jdGlvbiBRYXQoYyxsLGEsZCxoLGYpe2lmKC0xPT09ZClyZXR1cm4gYztsZXQgdj1mdW5jdGlvbiBKYXQoYyxsLGE9TWF0aC5yb3VuZCl7cmV0dXJuLTEhPT1jLnRvU3RyaW5nKCkuaW5kZXhPZigiZSIpP2Z1bmN0aW9uIFhhdChj''@;'; put 'put ''LGwpe2xldCBhPWMudG9TdHJpbmcoKSxbZCxoXT1hLnNwbGl0KCJlIiksW2Ysdj0iIl09ZC5zcGxpdCgiLiIpO2lmKCtoPjApYT1mK3YrJFAoaC12Lmxlbmd0aCk7ZWxzZXtsZXQgTT0iLiI7TT0rZjwwP2AtMCR7TX1gOmAwJHtNfWA7bGV0IEQ9KCRQKC1oLTEpK01hdGguYWJzKGYpK3YpLnN1''@;'; put 'put ''YnN0cigwLGwpO0QubGVuZ3RoPGwmJihEKz0kUChsLUQubGVuZ3RoKSksYT1NK0R9cmV0dXJuK2g+MCYmbD4wJiYoYSs9YC4keyRQKGwpfWApLGF9KGMsbCk6bmV3IE5hdChhKCtgJHtjfWUrJHtsfWApL01hdGgucG93KDEwLGwpKS50b0ZpeGVkKGwpfShsLGQsZiksW00sRD0iIl09di50b1N0''@;'; put 'put ''cmluZygpLnNwbGl0KCIuIik7aWYoRC5tYXRjaCgvXjArJC8pJiYoYXx8aCkpcmV0dXJuIE07bGV0IFo9RC5tYXRjaCgvMCskLyk7cmV0dXJuIGgmJlo/YCR7TX0uJHtELnRvU3RyaW5nKCkuc2xpY2UoMCxaLmluZGV4KX1gOnYudG9TdHJpbmcoKX0oZi50b1N0cmluZygpLGYsQmUsRWUscWUs''@;'; put 'put ''Q24pO3JldHVybiBNbj1mdW5jdGlvbiBlb3QoYyxsLGEsZCl7bGV0IGg9YyxbZix2XT1oLnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtpZihmLm1hdGNoKC9eLT8wJC8pJiZhKXJldHVybiB2P2Ake2YucmVwbGFjZSgiMCIsIiIpfS4ke3Z9YDpmLnJlcGxhY2UoIjAiLCIiKTtjb25zdCBNPWw8MCYm''@;'; put 'put ''MD09PWYuaW5kZXhPZigiLSIpO2lmKE0mJihmPWYuc2xpY2UoMSksaD1oLnNsaWNlKDEpKSxmLmxlbmd0aDxkKXtsZXQgRD1kLWYubGVuZ3RoO2ZvcihsZXQgWj0wO1o8RDtaKyspaD1gMCR7aH1gfXJldHVybiBNJiYoaD1gLSR7aH1gKSxoLnRvU3RyaW5nKCl9KE1uLGYsWixEKSxNbj1mdW5j''@;'; put 'put ''dGlvbiBub3QoYyxsLGEsZCxoKXtsZXQgZj1kLmN1cnJlbnREZWxpbWl0ZXJzKCksdj1mLnRob3VzYW5kcztoPWh8fGYuZGVjaW1hbDtsZXQgTT1mLnRob3VzYW5kc1NpemV8fDMsRD1jLnRvU3RyaW5nKCksWj1ELnNwbGl0KCIuIilbMF0scmU9RC5zcGxpdCgiLiIpWzFdO2NvbnN0IGNlPWw8''@;'; put 'put ''MCYmMD09PVouaW5kZXhPZigiLSIpO3JldHVybiBhJiYoY2UmJihaPVouc2xpY2UoMSkpLGZ1bmN0aW9uIHRvdChjLGwpe2xldCBhPVtdLGQ9MDtmb3IobGV0IGg9YztoPjA7aC0tKWQ9PT1sJiYoYS51bnNoaWZ0KGgpLGQ9MCksZCsrO3JldHVybiBhfShaLmxlbmd0aCxNKS5mb3JFYWNoKChF''@;'; put 'put ''ZSxCZSk9PntaPVouc2xpY2UoMCxFZStCZSkrditaLnNsaWNlKEVlK0JlKX0pLGNlJiYoWj1gLSR7Wn1gKSksRD1yZT9aK2grcmU6WixEfShNbixmLHJ0LGEsZCksKGJlfHx2bikmJihNbj1mdW5jdGlvbiByb3QoYyxsKXtyZXR1cm4gYytsfShNbix0bikpLChKdHx8ZjwwKSYmKE1uPWZ1bmN0''@;'; put 'put ''aW9uIGlvdChjLGwsYSl7cmV0dXJuIDA9PT1sP2M6MD09K2M/Yy5yZXBsYWNlKCItIiwiIik6bD4wP2ArJHtjfWA6InNpZ24iPT09YT9jOmAoJHtjLnJlcGxhY2UoIi0iLCIiKX0pYH0oTW4sZixkdCkpLE1ufWZ1bmN0aW9uIE9fKGMsbCl7aWYoIWMpcmV0dXJuIGw7bGV0IGE9T2JqZWN0Lmtl''@;'; put 'put ''eXMoYyk7cmV0dXJuIDE9PT1hLmxlbmd0aCYmIm91dHB1dCI9PT1hWzBdP2w6Y31jb25zdCBENT1zNGU7ZnVuY3Rpb24gYzRlKGMsbCxhKXtsZXQgZD1uZXcgRDUoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IEQ1KGgpLGMuX3ZhbHVlPWQu''@;'; put 'put ''bWludXMoaCkudG9OdW1iZXIoKSxjfWNvbnN0IFZwPXRKKCksZ290PUpYKCksbW90PShjPT4oe2xvYWRMYW5ndWFnZXNJbk5vZGU6bD0+ZnVuY3Rpb24gT2F0KGMsbCl7Yy5mb3JFYWNoKGE9PntsZXQgZDt0cnl7ZD1mdW5jdGlvbiBMYXQoYyl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3Qg''@;'; put 'put ''ZHluYW1pY2FsbHkgcmVxdWlyZSAiJytjKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhpcyByZXF1aXJl''@;'; put 'put ''IGNhbGwgdG8gd29yay4nKX0oYC4uL2xhbmd1YWdlcy8ke2F9YCl9Y2F0Y2h7Y29uc29sZS5lcnJvcihgVW5hYmxlIHRvIGxvYWQgIiR7YX0iLiBObyBtYXRjaGluZyBsYW5ndWFnZSBmaWxlIGZvdW5kLmApfWQmJmwucmVnaXN0ZXJMYW5ndWFnZShkKX0pfShsLGMpfSkpKGN1KSx2b3Q9cjRl''@;'; put 'put ''KCk7bGV0IG85PShjPT4oe2Zvcm1hdDooLi4ubCk9PmZ1bmN0aW9uIFZhdChjLGw9e30sYSl7aWYoInN0cmluZyI9PXR5cGVvZiBsJiYobD1IYXQucGFyc2VGb3JtYXQobCkpLCFGYXQudmFsaWRhdGVGb3JtYXQobCkpcmV0dXJuIkVSUk9SOiBpbnZhbGlkIGZvcm1hdCI7bGV0IGg9bC5wcmVm''@;'; put 'put ''aXh8fCIiLGY9bC5wb3N0Zml4fHwiIix2PWZ1bmN0aW9uIEJhdChjLGwsYSl7c3dpdGNoKGwub3V0cHV0KXtjYXNlImN1cnJlbmN5IjpyZXR1cm4gZnVuY3Rpb24gJGF0KGMsbCxhKXtjb25zdCBkPWEuY3VycmVudEN1cnJlbmN5KCk7bGV0IHYsaD1PYmplY3QuYXNzaWduKHt9LGwpLGY9T2Jq''@;'; put 'put ''ZWN0LmFzc2lnbih7fSxvVCxoKSxNPSIiLEQ9ISFmLnRvdGFsTGVuZ3RofHwhIWYuZm9yY2VBdmVyYWdlfHxmLmF2ZXJhZ2UsWj1oLmN1cnJlbmN5UG9zaXRpb258fGQucG9zaXRpb24scmU9aC5jdXJyZW5jeVN5bWJvbHx8ZC5zeW1ib2w7Y29uc3QgY2U9dm9pZCAwIT09Zi5zcGFjZVNlcGFy''@;'; put 'put ''YXRlZEN1cnJlbmN5P2Yuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTpmLnNwYWNlU2VwYXJhdGVkO3ZvaWQgMD09PWgubG93UHJlY2lzaW9uJiYoaC5sb3dQcmVjaXNpb249ITEpLGNlJiYoTT0iICIpLCJpbmZpeCI9PT1aJiYodj1NK3JlK00pO2xldCBiZT1zVCh7aW5zdGFuY2U6Yyxwcm92aWRl''@;'; put 'put ''ZEZvcm1hdDpoLHN0YXRlOmEsZGVjaW1hbFNlcGFyYXRvcjp2fSk7cmV0dXJuInByZWZpeCI9PT1aJiYoYmU9Yy5fdmFsdWU8MCYmInNpZ24iPT09Zi5uZWdhdGl2ZT9gLSR7TX0ke3JlfSR7YmUuc2xpY2UoMSl9YDpjLl92YWx1ZT4wJiZmLmZvcmNlU2lnbj9gKyR7TX0ke3JlfSR7YmUuc2xp''@;'; put 'put ''Y2UoMSl9YDpyZStNK2JlKSwoIVp8fCJwb3N0Zml4Ij09PVopJiYoTT0hZi5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbiYmRD8iIjpNLGJlPWJlK00rcmUpLGJlfShjLGw9T18obCxmMy5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0KCkpLGYzKTtjYXNlInBlcmNlbnQiOnJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBHYXQoYyxsLGEsZCl7bGV0IGg9bC5wcmVmaXhTeW1ib2wsZj1zVCh7aW5zdGFuY2U6ZCgxMDAqYy5fdmFsdWUpLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YX0pLHY9T2JqZWN0LmFzc2lnbih7fSxvVCxsKTtyZXR1cm4gaD9gJSR7di5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHtm''@;'; put 'put ''fWA6YCR7Zn0ke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSVgfShjLGw9T18obCxmMy5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQoKSksZjMsYSk7Y2FzZSJieXRlIjpyZXR1cm4gZnVuY3Rpb24gWmF0KGMsbCxhLGQpe2xldCBoPWwuYmFzZXx8ImJpbmFyeSIsZj1PYmplY3QuYXNz''@;'; put 'put ''aWduKHt9LG9ULGwpO2NvbnN0e2JpbmFyeVN1ZmZpeGVzOnYsZGVjaW1hbFN1ZmZpeGVzOk19PWEuY3VycmVudEJ5dGVzKCk7bGV0IFo9e2dlbmVyYWw6e3NjYWxlOjEwMjQsc3VmZml4ZXM6TXx8WVAsbWFya2VyOiJiZCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczp2fHxsNGUsbWFy''@;'; put 'put ''a2VyOiJiIn0sZGVjaW1hbDp7c2NhbGU6MWUzLHN1ZmZpeGVzOk18fFlQLG1hcmtlcjoiZCJ9fVtoXSx7dmFsdWU6cmUsc3VmZml4OmNlfT1HUChjLl92YWx1ZSxaLnN1ZmZpeGVzLFouc2NhbGUpO3JldHVybmAke3NUKHtpbnN0YW5jZTpkKHJlKSxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmEs''@;'; put 'put ''ZGVmYXVsdHM6YS5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKX0pfSR7Zi5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHtjZX1gfShjLGw9T18obCxmMy5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKSksZjMsYSk7Y2FzZSJ0aW1lIjpyZXR1cm4gbD1PXyhsLGYzLmN1cnJlbnRUaW1lRGVmYXVs''@;'; put 'put ''dEZvcm1hdCgpKSxmdW5jdGlvbiBZYXQoYyl7bGV0IGw9TWF0aC5mbG9vcihjLl92YWx1ZS82MC82MCksYT1NYXRoLmZsb29yKChjLl92YWx1ZS02MCpsKjYwKS82MCksZD1NYXRoLnJvdW5kKGMuX3ZhbHVlLTYwKmwqNjAtNjAqYSk7cmV0dXJuYCR7bH06JHthPDEwPyIwIjoiIn0ke2F9OiR7''@;'; put 'put ''ZDwxMD8iMCI6IiJ9JHtkfWB9KGMpO2Nhc2Uib3JkaW5hbCI6cmV0dXJuIGZ1bmN0aW9uIFdhdChjLGwsYSl7bGV0IGQ9YS5jdXJyZW50T3JkaW5hbCgpLGg9T2JqZWN0LmFzc2lnbih7fSxvVCxsKSxmPXNUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YX0pLHY9ZChjLl92''@;'; put 'put ''YWx1ZSk7cmV0dXJuYCR7Zn0ke2guc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7dn1gfShjLGw9T18obCxmMy5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQoKSksZjMpO2RlZmF1bHQ6cmV0dXJuIHNUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0OmwsbnVtYnJvOmF9KX19KGMsbCxhKTty''@;'; put 'put ''ZXR1cm4gdj1mdW5jdGlvbiBhb3QoYyxsKXtyZXR1cm4gbCtjfSh2LGgpLHY9ZnVuY3Rpb24gb290KGMsbCl7cmV0dXJuIGMrbH0odixmKSx2fSguLi5sLGMpLGdldEJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gVWF0KGMpe2xldCBsPW5KLmdlbmVyYWw7cmV0dXJuIEdQKGMuX3ZhbHVlLGwu''@;'; put 'put ''c3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldEJpbmFyeUJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gemF0KGMpe2xldCBsPW5KLmJpbmFyeTtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0RGVjaW1hbEJ5dGVVbml0''@;'; put 'put ''OiguLi5sKT0+ZnVuY3Rpb24gamF0KGMpe2xldCBsPW5KLmRlY2ltYWw7cmV0dXJuIEdQKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGZvcm1hdE9yRGVmYXVsdDpPX30pKShjdSksczk9KGM9Pih7YWRkOihsLGEpPT5mdW5jdGlvbiBsb3QoYyxsLGEpe2xl''@;'; put 'put ''dCBkPW5ldyBENShjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRDUoaCksYy5fdmFsdWU9ZC5wbHVzKGgpLnRvTnVtYmVyKCksY30obCxhLGMpLHN1YnRyYWN0OihsLGEpPT5jNGUobCxhLGMpLG11bHRpcGx5OihsLGEpPT5mdW5jdGlvbiBj''@;'; put 'put ''b3QoYyxsLGEpe2xldCBkPW5ldyBENShjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRDUoaCksYy5fdmFsdWU9ZC50aW1lcyhoKS50b051bWJlcigpLGN9KGwsYSxjKSxkaXZpZGU6KGwsYSk9PmZ1bmN0aW9uIHVvdChjLGwsYSl7bGV0IGQ9''@;'; put 'put ''bmV3IEQ1KGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBENShoKSxjLl92YWx1ZT1kLmRpdmlkZWRCeShoKS50b051bWJlcigpLGN9KGwsYSxjKSxzZXQ6KGwsYSk9PmZ1bmN0aW9uIGRvdChjLGwsYSl7bGV0IGQ9bDtyZXR1cm4gYS5pc051''@;'; put 'put ''bWJybyhsKSYmKGQ9bC5fdmFsdWUpLGMuX3ZhbHVlPWQsY30obCxhLGMpLGRpZmZlcmVuY2U6KGwsYSk9PmZ1bmN0aW9uIGhvdChjLGwsYSl7bGV0IGQ9YShjLl92YWx1ZSk7cmV0dXJuIGM0ZShkLGwsYSksTWF0aC5hYnMoZC5fdmFsdWUpfShsLGEsYyksQmlnTnVtYmVyOkQ1fSkpKGN1KTtj''@;'; put 'put ''b25zdCBib3Q9UVg7Y2xhc3MgdTRle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3ZhbHVlPWx9Y2xvbmUoKXtyZXR1cm4gY3UodGhpcy5fdmFsdWUpfWZvcm1hdChsPXt9KXtyZXR1cm4gbzkuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0Q3VycmVuY3kobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiYo''@;'; put 'put ''bD1ib3QucGFyc2VGb3JtYXQobCkpLChsPW85LmZvcm1hdE9yRGVmYXVsdChsLFZwLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSkpLm91dHB1dD0iY3VycmVuY3kiLG85LmZvcm1hdCh0aGlzLGwpfWZvcm1hdFRpbWUobD17fSl7cmV0dXJuIGwub3V0cHV0PSJ0aW1lIixvOS5mb3Jt''@;'; put 'put ''YXQodGhpcyxsKX1iaW5hcnlCeXRlVW5pdHMoKXtyZXR1cm4gbzkuZ2V0QmluYXJ5Qnl0ZVVuaXQodGhpcyl9ZGVjaW1hbEJ5dGVVbml0cygpe3JldHVybiBvOS5nZXREZWNpbWFsQnl0ZVVuaXQodGhpcyl9Ynl0ZVVuaXRzKCl7cmV0dXJuIG85LmdldEJ5dGVVbml0KHRoaXMpfWRpZmZlcmVu''@;'; put 'put ''Y2UobCl7cmV0dXJuIHM5LmRpZmZlcmVuY2UodGhpcyxsKX1hZGQobCl7cmV0dXJuIHM5LmFkZCh0aGlzLGwpfXN1YnRyYWN0KGwpe3JldHVybiBzOS5zdWJ0cmFjdCh0aGlzLGwpfW11bHRpcGx5KGwpe3JldHVybiBzOS5tdWx0aXBseSh0aGlzLGwpfWRpdmlkZShsKXtyZXR1cm4gczkuZGl2''@;'; put 'put ''aWRlKHRoaXMsbCl9c2V0KGwpe3JldHVybiBzOS5zZXQodGhpcyxkNGUobCkpfXZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXZhbHVlT2YoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIGQ0ZShjKXtsZXQgbD1jO3JldHVybiBjdS5pc051bWJybyhjKT9sPWMuX3ZhbHVlOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgYz9sPWN1LnVuZm9ybWF0KGMpOmlzTmFOKGMpJiYobD1OYU4pLGx9ZnVuY3Rpb24gY3UoYyl7cmV0dXJuIG5ldyB1NGUoZDRlKGMpKX1jdS52ZXJzaW9uPSIyLjUuMCIsY3UuaXNOdW1icm89ZnVuY3Rpb24oYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiB1NGV9LGN1Lmxhbmd1''@;'; put 'put ''YWdlPVZwLmN1cnJlbnRMYW5ndWFnZSxjdS5yZWdpc3Rlckxhbmd1YWdlPVZwLnJlZ2lzdGVyTGFuZ3VhZ2UsY3Uuc2V0TGFuZ3VhZ2U9VnAuc2V0TGFuZ3VhZ2UsY3UubGFuZ3VhZ2VzPVZwLmxhbmd1YWdlcyxjdS5sYW5ndWFnZURhdGE9VnAubGFuZ3VhZ2VEYXRhLGN1Lnplcm9Gb3JtYXQ9''@;'; put 'put ''VnAuc2V0WmVyb0Zvcm1hdCxjdS5kZWZhdWx0Rm9ybWF0PVZwLmN1cnJlbnREZWZhdWx0cyxjdS5zZXREZWZhdWx0cz1WcC5zZXREZWZhdWx0cyxjdS5kZWZhdWx0Q3VycmVuY3lGb3JtYXQ9VnAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCxjdS52YWxpZGF0ZT1nb3QudmFsaWRhdGUs''@;'; put 'put ''Y3UubG9hZExhbmd1YWdlc0luTm9kZT1tb3QubG9hZExhbmd1YWdlc0luTm9kZSxjdS51bmZvcm1hdD12b3QudW5mb3JtYXQsY3UuQmlnTnVtYmVyPXM5LkJpZ051bWJlcjt2YXIgJG09Z2F0KGN1KTtmdW5jdGlvbiBoNGUoYyxsKXtpZihtMShjKSl7Y29uc3QgYT1sLm51bWVyaWNGb3JtYXQs''@;'; put 'put ''ZD1hJiZhLmN1bHR1cmV8fCItIixoPWEmJmEucGF0dGVybjtpZih0eXBlb2YgZDwidSImJiEkbS5sYW5ndWFnZXMoKVtkXSl7Y29uc3QgZj1kLnJlcGxhY2UoIi0iLCIiKSx2PSRtLmFsbExhbmd1YWdlcz8kbS5hbGxMYW5ndWFnZXNbZF06JG1bZl07diYmJG0ucmVnaXN0ZXJMYW5ndWFnZSh2''@;'; put 'put ''KX0kbS5zZXRMYW5ndWFnZShkKSxjPSRtKGMpLmZvcm1hdChofHwiMCIpfXJldHVybiBjfWZ1bmN0aW9uIHJKKGMsbCxhLGQsaCxmLHYpe2xldCBNPWY7aWYobTEoTSkpe2xldCBaPVtdO2lmKEFycmF5LmlzQXJyYXkodi5jbGFzc05hbWUpKVo9di5jbGFzc05hbWU7ZWxzZXt2YXIgRDtjb25z''@;'; put 'put ''dCByZT1udWxsIT09KEQ9di5jbGFzc05hbWUpJiZ2b2lkIDAhPT1EP0Q6IiI7cmUubGVuZ3RoJiYoWj1yZS5zcGxpdCgiICIpKX1NPWg0ZShNLHYpLFouaW5kZXhPZigiaHRMZWZ0Iik8MCYmWi5pbmRleE9mKCJodENlbnRlciIpPDAmJlouaW5kZXhPZigiaHRSaWdodCIpPDAmJlouaW5kZXhP''@;'; put 'put ''ZigiaHRKdXN0aWZ5Iik8MCYmWi5wdXNoKCJodFJpZ2h0IiksWi5pbmRleE9mKCJodE51bWVyaWMiKTwwJiZaLnB1c2goImh0TnVtZXJpYyIpLHYuY2xhc3NOYW1lPVouam9pbigiICIpLGwuZGlyPSJsdHIifUE1KGMsbCxhLGQsaCxNLHYpfWZ1bmN0aW9uIGlKKGMsbCxhLGQsaCxmLHYpe0E1''@;'; put 'put ''LmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtjb25zdCBEPXYuaGFzaFN5bWJvbHx8IioiO2xldCBaPSIiO0dhKCh2Lmhhc2hMZW5ndGh8fGwuaW5uZXJIVE1MLmxlbmd0aCktMSwoKT0+e1orPUR9KSxqNyhsLFopfWZ1bmN0aW9uIGFKKGMsbCxhLGQsaCxmLHYpe0E1LmFwcGx5KHRoaXMs''@;'; put 'put ''W2MsbCxhLGQsaCxmLHZdKX1mdW5jdGlvbiBvSihjLGwsYSxkLGgsZix2KXtBNS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5kaXI9Imx0ciJ9ZnVuY3Rpb24gbFQoYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9sKCEwKTp0aGlzLnN0''@;'; put 'put ''cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsZjRlKGEsbCkpOmY0ZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiBmNGUoYyxsKXtjb25zdCBhPWM7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBoPSExO2ZvcihsZXQg''@;'; put 'put ''Zj0wLHY9ZC5sZW5ndGg7Zjx2O2YrKylpZihhPT09ZFtmXSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiBwNGUoYyl7Y29uc3QgbD1uZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6MDBgKS5nZXREYXRlKCkpP2w6bmV3IERhdGUobC5nZXRUaW1lKCkrNmU0Kmwu''@;'; put 'put ''Z2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWNmZShVcGUsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj1PbyhkLHRoaXMuZGF0ZUZvcm1hdHx8YS5kZWZhdWx0RGF0ZUZvcm1hdCwhMCkuaXNWYWxpZCgpLHY9T28o''@;'; put 'put ''bmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKHY9ITAsZj0hMCksdnx8KGg9ITEpLCF2JiZmJiYoaD0hMCksdiYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IE09ZnVuY3Rpb24gVG90KGMsbCl7Y29uc3QgYT1PbyhwNGUo''@;'; put 'put ''YykpLGQ9T28oYyxsKSxoPWMuc2VhcmNoKC9bQS1aYS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3JtYXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5mb3JtYXQobCl9KGQsdGhpcy5kYXRlRm9ybWF0KTt0aGlzLmluc3RhbmNl''@;'; put 'put ''LnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsTSwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBoPSExO2woaCl9ZnVuY3Rpb24gc0ooYyxsKXtsVC5hcHBseSh0aGlzLFtjLGxdKX1mdW5jdGlvbiBsSihjLGwpe2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLGwo''@;'; put 'put ''ISghdGhpcy5hbGxvd0VtcHR5fHwiIiE9PWEpfHwiIiE9PWEmJm0xKGMpKX1ySi5SRU5ERVJFUl9UWVBFPSJudW1lcmljIixpSi5SRU5ERVJFUl9UWVBFPSJwYXNzd29yZCIsYUouUkVOREVSRVJfVFlQRT0ic2VsZWN0IixvSi5SRU5ERVJFUl9UWVBFPSJ0aW1lIixsVC5WQUxJREFUT1JfVFlQ''@;'; put 'put ''RT0iYXV0b2NvbXBsZXRlIixLUC5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsc0ouVkFMSURBVE9SX1RZUEU9ImRyb3Bkb3duIixsSi5WQUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgRG90PVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBxUChjLGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy50aW1lRm9ybWF0fHwiaDptbTpzcyBhIjtsZXQgZD0hMCxoPWM7bnVsbD09PWgmJihoPSIiKSxoPS9eXGR7Myx9JC8udGVzdChoKT9wYXJzZUludChoLDEwKTpoO2NvbnN0IGY9L15cZHsxLDJ9JC8udGVzdChoKTtmJiYoaCs9IjowMCIpO2NvbnN0IHY9T28oaCxEb3QsITAp''@;'; put 'put ''LmlzVmFsaWQoKT9PbyhoKTpPbyhoLGEpO2xldCBNPXYuaXNWYWxpZCgpLEQ9T28oaCxhLCEwKS5pc1ZhbGlkKCkmJiFmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1oJiYoTT0hMCxEPSEwKSxNfHwoZD0hMSksIU0mJkQmJihkPSEwKSxNJiYhRClpZighMD09PXRoaXMuY29ycmVjdEZvcm1h''@;'; put 'put ''dCl7Y29uc3QgWj12LmZvcm1hdChhKTt0aGlzLmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsWiwidGltZVZhbGlkYXRvciIpLGQ9ITB9ZWxzZSBkPSExO2woZCl9cVAuVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IExvdD17Q0VMTF9UWVBF''@;'; put 'put ''OiJhdXRvY29tcGxldGUiLGVkaXRvcjpQWCxyZW5kZXJlcjpJXyx2YWxpZGF0b3I6bFR9LE9vdD17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOkhwZSxyZW5kZXJlcjpZWH07ZnVuY3Rpb24gZzRlKGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1nNGUu''@;'; put 'put ''UkVOREVSRVJfVFlQRT0iZGF0ZSI7Y29uc3QgRm90PXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjpXcGUscmVuZGVyZXI6ZzRlLHZhbGlkYXRvcjpLUH0sSG90PXtDRUxMX1RZUEU6ImRyb3Bkb3duIixlZGl0b3I6WXBlLHJlbmRlcmVyOldYLHZhbGlkYXRvcjpzSixmaWx0ZXI6ITEsc3RyaWN0''@;'; put 'put ''OiEwfSxOb3Q9e0NFTExfVFlQRToiaGFuZHNvbnRhYmxlIixlZGl0b3I6RFgscmVuZGVyZXI6JFh9LFZvdD17Q0VMTF9UWVBFOiJudW1lcmljIixlZGl0b3I6R3BlLHJlbmRlcmVyOnJKLHZhbGlkYXRvcjpsSixkYXRhVHlwZToibnVtYmVyIn0sQm90PXtDRUxMX1RZUEU6InBhc3N3b3JkIixl''@;'; put 'put ''ZGl0b3I6JHBlLHJlbmRlcmVyOmlKLGNvcHlhYmxlOiExfSxqb3Q9e0NFTExfVFlQRToic2VsZWN0IixlZGl0b3I6cXBlLHJlbmRlcmVyOmFKfSx6b3Q9e0NFTExfVFlQRToidGltZSIsZWRpdG9yOlhwZSxyZW5kZXJlcjpvSix2YWxpZGF0b3I6cVB9O2Z1bmN0aW9uIG00ZShjLGwpe2lmKGwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUF8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlvdChjKXt2YXIgbD1mdW5jdGlvbiBHb3QoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEZfKGMsbCl7cmV0dXJuIGMuZ2V0KHY0ZShjLGwpKX1mdW5jdGlvbiB2NGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGI0ZT1uZXcgTWFwKFtbInBsdWdpbiIsZnVuY3Rpb24gVFhlKGMpe3JldHVybiEhREUoYyl9XSxbImNlbGwtdHlwZSIsbnBlXSxb''@;'; put 'put ''ImVkaXRvciIsbGZlXSxbInJlbmRlcmVyIixfZmVdLFsidmFsaWRhdG9yIix3ZmVdXSkseTRlPVN5bWJvbCgibWFpblNldHRpbmciKSxYUD1bXTtsZXQgbDk9bnVsbDt2YXIgYzk9bmV3IFdlYWtNYXAsXzRlPW5ldyBXZWFrU2V0O2NsYXNzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3Jl''@;'; put 'put ''dHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt9fWNvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBab3QoYyxsKXttNGUoYyxsKSxsLmFkZChjKX0pKHRoaXMsXzRlKSxQ''@;'; put 'put ''Xyh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBqMih0aGlzKSksUF8odGhpcywicGx1Z2luTmFtZSIsbnVsbCksUF8odGhpcywicGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzIixbXSksUF8odGhpcywiaXNQbHVnaW5zUmVhZHkiLCExKSxQXyh0aGlzLCJlbmFibGVkIiwhMSksUF8odGhpcywi''@;'; put 'put ''aW5pdGlhbGl6ZWQiLCExKSxmdW5jdGlvbiBXb3QoYyxsLGEpe200ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsYzkse30pLFRwKHRoaXMsImhvdCIsbCx7d3JpdGFibGU6ITF9KSxsOT1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+dGhpcy5vbkFm''@;'; put 'put ''dGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9PnRoaXMub25VcGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRo''@;'; put 'put ''aXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGE9QXJyYXkuaXNBcnJheShsKT9sOltdO2lmKGEubGVuZ3RoPjApe2NvbnN0IGg9W107aWYoYS5mb3JFYWNoKGY9Pntjb25zdFt2LE1dPWYuc3BsaXQoIjoiKTtpZighYjRlLmhh''@;'; put 'put ''cyh2KSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHt2fSIgd2FzIGZvdW5kLmApO2I0ZS5nZXQodikoTSl8fGgucHVzaChgIC0gJHtNfSAoJHt2fSlgKX0pLGgubGVuZ3RoPjApe2NvbnN0IGY9W2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdp''@;'; put 'put ''biByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2guam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO1hQLnB1c2goZil9fWlmKGw5fHwobDk9ZUsoKSksbDkuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZsOS5zcGxpY2UobDkuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUp''@;'; put 'put ''LDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1sOS5sZW5ndGgpe2lmKFhQLmxlbmd0aD4wKXtjb25zdCBoPVtgJHtYUC5qb2luKCJc''@;'; put 'put ''biIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVhbGx5LiJdLmpvaW4oIiIpO3Rocm93IFhQLmxlbmd0aD0wLG5ldyBFcnJvcihoKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxpemVkPSEwfWVu''@;'; put 'put ''YWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuZXZlbnRNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1nZXRTZXR0aW5nKGwpe2NvbnN0IGE9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVt0aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVldO2lmKHZvaWQgMD09PWwpcmV0dXJuIGE7Y29uc3QgZD10aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfU0VUVElOR1M7dmFyIGgsZjtyZXR1cm4oQXJyYXkuaXNBcnJheShhKXx8cW8oYSkpJiZkW3k0ZV09PT1sP0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkoYSk/YTpudWxsIT09KGg9YVtsXSkmJnZvaWQgMCE9PWg/aDpkW2xdOnFvKGEpJiZudWxsIT09KGY9YVtsXSkmJnZvaWQgMCE9PWY/ZjpkW2xdfWFkZEhvb2sobCxhLGQpe0ZfKGM5LHRoaXMpW2xdPUZfKGM5LHRoaXMpW2xdfHxbXTtjb25zdCBoPUZfKGM5LHRoaXMpW2xd''@;'; put 'put ''O3RoaXMuaG90LmFkZEhvb2sobCxhLGQpLGgucHVzaChhKSxGXyhjOSx0aGlzKVtsXT1ofXJlbW92ZUhvb2tzKGwpe1luKEZfKGM5LHRoaXMpW2xdfHxbXSxhPT57dGhpcy5ob3QucmVtb3ZlSG9vayhsLGEpfSl9Y2xlYXJIb29rcygpe2NvbnN0IGw9Rl8oYzksdGhpcyk7WG8obCwoYSxkKT0+''@;'; put 'put ''dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9sKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCl7WW4odGhpcy5wbHVnaW5zSW5p''@;'; put 'put ''dGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT12NGUoXzRlLHRoaXMsS290KS5jYWxsKHRoaXMsbCk7dGhpcy5pc0VuYWJsZWQm''@;'; put 'put ''Jih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVnaW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYmdGhpcy51cGRhdGVQbHVnaW4obCkp''@;'; put 'put ''fXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuZXZlbnRNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCksWG8odGhpcywoYSxkKT0+eyJob3QiIT09ZCYmKHRoaXNbZF09bnVsbCl9KSxkZWxldGUgdGhpcy50LGRl''@;'; put 'put ''bGV0ZSB0aGlzLmhvdH19ZnVuY3Rpb24gS290KGMpe2lmKCFjKXJldHVybiExO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgbClyZXR1cm4gbDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1jW2xbYV1dKXJl''@;'; put 'put ''dHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHU5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxb3QoYyl7dmFyIGw9ZnVuY3Rpb24gWG90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBjSj1jbGFzcyBKb3R7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dTkodGhpcywiaG90IixudWxsKSx1OSh0aGlzLCJjb250YWluZXIiLG51bGwpLHU5KHRoaXMsImluamVjdGVkIiwhMSksdTkodGhpcywicm93cyIsW10pLHU5KHRoaXMsImNvbHVtbnMiLFtdKSx1OSh0aGlzLCJzYW1wbGVzIixudWxsKSx1OSh0aGlzLCJzZXR0aW5ncyIse3Vz''@;'; put 'put ''ZUhlYWRlcnM6ITB9KSx0aGlzLmhvdD1sfWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1ucy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVD''@;'; put 'put ''b250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17cm93Omx9O3RoaXMucm93cy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAu''@;'; put 'put ''YXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2wobCkpLHRoaXMudGFibGUudHIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVSb3cobCkpLDA9PT1sJiZUaSh0aGlzLnRhYmxlLnRhYmxlLCJodEdob3N0VGFibGVGaXJzdFJvdyIpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBl''@;'; put 'put ''bmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9YWRkQ29sdW1uSGVhZGVyc1JvdyhsKXtpZihudWxsIT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IGQ9e3JvdzotMX07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5jb250YWluZXI9dGhp''@;'; put 'put ''cy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSx0aGlzLnNhbXBsZXM9bCx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29s''@;'; put 'put ''R3JvdXBzQ29sKCkpLHRoaXMuYXBwZW5kQ29sdW1uSGVhZGVyc1JvdygpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9fWFkZENvbHVtbihsLGEpe2lmKHRoaXMucm93cy5sZW5ndGgpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLmNvbHVtbnMubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17Y29sOmx9O3Ro''@;'; put 'put ''aXMuY29sdW1ucy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpJiZudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwpJiZ0aGlzLmhvdC52aWV3''@;'; put 'put ''LmFwcGVuZENvbEhlYWRlcihsLHRoaXMudGFibGUudGgsdm9pZCAwLC0xKSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRh''@;'; put 'put ''YmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFluKHRoaXMucm93cyxhPT57Y29uc3R7aGVpZ2h0OmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLnJvdyxNYXRoLmNlaWwoZCkpfSl9Z2V0V2lkdGhzKGwpe3RoaXMu''@;'; put 'put ''aW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxZbih0aGlzLmNvbHVtbnMsYT0+e2NvbnN0e3dpZHRoOmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLmNvbCxNYXRoLmNlaWwoZCkpfSl9c2V0U2V0dGluZ3MobCl7dGhpcy5zZXR0aW5ncz1sfXNldFNldHRpbmcobCxh''@;'; put 'put ''KXt0aGlzLnNldHRpbmdzfHwodGhpcy5zZXR0aW5ncz17fSksdGhpcy5zZXR0aW5nc1tsXT1hfWdldFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N9Z2V0U2V0dGluZyhsKXtyZXR1cm4gdGhpcy5zZXR0aW5ncz90aGlzLnNldHRpbmdzW2xdOm51bGx9Y3JlYXRlQ29sR3JvdXBzQ29s''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZhLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSwtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGQ9PntZbihk''@;'; put 'put ''LnN0cmluZ3MsaD0+e2EuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KGguY29sLGwpKX0pfSksYX1jcmVhdGVSb3cobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0''@;'; put 'put ''dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmKHRoaXMuaG90LnZpZXcuYXBwZW5kUm93SGVhZGVyKGwsaCksZC5hcHBlbmRDaGlsZChoKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZj0+e1luKGYuc3RyaW5ncyx2PT57Y29uc3QgTT12LmNvbCxEPXRoaXMuaG90LmdldENlbGxNZXRhKGws''@;'; put 'put ''TSksWj10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoRCkscmU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpO3JlLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFoodGhpcy5ob3QscmUsbCxNLHRoaXMuaG90LmNvbFRvUHJvcChNKSx2LnZhbHVlLEQpLGQuYXBwZW5kQ2hpbGQocmUpfSl9KSxk''@;'; put 'put ''fWFwcGVuZENvbHVtbkhlYWRlcnNSb3coKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxkPVtdO2lmKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSl7Y29uc3QgaD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFstMSxoXSks''@;'; put 'put ''YS5hcHBlbmRDaGlsZChoKX10aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57WW4oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYuY29sLE09bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbdixNXSksYS5hcHBlbmRDaGlsZChNKX0pfSksdGhpcy50YWJsZS50SGVhZC5hcHBlbmRDaGlsZChhKSxZ''@;'; put 'put ''bihkLGg9Pntjb25zdFtmLHZdPWg7dGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIoZix2KX0pfWNyZWF0ZUNvbChsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e1lu''@;'; put 'put ''KGguc3RyaW5ncyxmPT57Y29uc3Qgdj1mLnJvdyxNPXRoaXMuaG90LmdldENlbGxNZXRhKHYsbCksRD10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoTSksWj1hLmNyZWF0ZUVsZW1lbnQoInRkIikscmU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO1ouc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIs''@;'; put 'put ''MSksRCh0aGlzLmhvdCxaLHYsbCx0aGlzLmhvdC5jb2xUb1Byb3AobCksZi52YWx1ZSxNKSxyZS5hcHBlbmRDaGlsZChaKSxkLmFwcGVuZENoaWxkKHJlKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0aGlzLmNvbHVtbnMubGVuZ3RoPTAs''@;'; put 'put ''dGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNhbXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5qZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8''@;'; put 'put ''fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYmKHRoaXMuY29udGFpbmVyLmNvbnRh''@;'; put 'put ''aW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIik7''@;'; put 'put ''bGV0IGg9MDthPj0wJiZsPj0wJiYoaD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwpLmNvbHNwYW4pO2xldCBmPXRoaXMuaG90LmdldENvbFdpZHRoKGwpO2lmKGg+MSlmb3IobGV0IHY9bCsxO3Y8bCtoO3YrKylmKz10aGlzLmhvdC5nZXRDb2xXaWR0aCh2KTtyZXR1cm4gZC5zdHlsZS53aWR0''@;'; put 'put ''aD1gJHtmfXB4YCxkfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHY9YS5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLE09YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLEQ9YS5jcmVhdGVFbGVtZW50KCJ0ciIpLFo9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGlj''@;'; put 'put ''YWwoKSYmaC5hcHBlbmRDaGlsZChNKSx0aGlzLmlzSG9yaXpvbnRhbCgpJiYoRC5hcHBlbmRDaGlsZChaKSxmLmFwcGVuZENoaWxkKEQpLGguc3R5bGUudGFibGVMYXlvdXQ9ImF1dG8iLGguc3R5bGUud2lkdGg9ImF1dG8iKSxoLmFwcGVuZENoaWxkKGYpLHRoaXMuaXNWZXJ0aWNhbCgpJiZ2''@;'; put 'put ''LmFwcGVuZENoaWxkKEQpLGguYXBwZW5kQ2hpbGQodiksVGkoaCxsKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLHRhYmxlOmgsdEhlYWQ6Zix0Qm9keTp2LGNvbEdyb3VwOk0sdHI6RCx0aDpafX1jcmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgp''@;'; put 'put ''fWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVyOmh9fWlzVmVydGljYWwoKXtyZXR1cm4hKCF0aGlzLnJvd3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVu''@;'; put 'put ''Z3RoKX19O2Z1bmN0aW9uIEpQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRb3QoYyl7dmFyIGw9ZnVuY3Rpb24gZXN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB1SntzdGF0aWMgZ2V0IFNBTVBMRV9DT1VOVCgp''@;'; put 'put ''e3JldHVybiAzfWNvbnN0cnVjdG9yKGwpe0pQKHRoaXMsInNhbXBsZXMiLG51bGwpLEpQKHRoaXMsImRhdGFGYWN0b3J5IixudWxsKSxKUCh0aGlzLCJjdXN0b21TYW1wbGVDb3VudCIsbnVsbCksSlAodGhpcywiYWxsb3dEdXBsaWNhdGVzIiwhMSksdGhpcy5kYXRhRmFjdG9yeT1sfWdldFNh''@;'; put 'put ''bXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/dGhpcy5jdXN0b21TYW1wbGVDb3VudDp1Si5TQU1QTEVfQ09VTlR9c2V0U2FtcGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRl''@;'; put 'put ''cz1sfWdlbmVyYXRlUm93U2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygicm93IixhLGwpfWdlbmVyYXRlQ29sdW1uU2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixhLGwpfWdlbmVyYXRlU2FtcGxlcyhsLGEsZCl7Y29uc3QgaD1u''@;'; put 'put ''ZXcgTWFwLHtmcm9tOmYsdG86dn09Im51bWJlciI9PXR5cGVvZiBkP3tmcm9tOmQsdG86ZH06ZDtyZXR1cm4gR2EoZix2LE09Pntjb25zdCBEPXRoaXMuZ2VuZXJhdGVTYW1wbGUobCxhLE0pO2guc2V0KE0sRCl9KSxofWdlbmVyYXRlU2FtcGxlKGwsYSxkKXtpZigicm93IiE9PWwmJiJjb2wi''@;'; put 'put ''IT09bCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNhbXBsZSB0eXBlIik7Y29uc3QgaD1uZXcgTWFwLGY9InJvdyI9PT1sPyJjb2wiOiJyb3ciLHY9W107cmV0dXJuIEdhKGEuZnJvbSxhLnRvLE09Pntjb25zdCBEPSJyb3ciPT09bD90aGlzLmRhdGFGYWN0b3J5KGQsTSk6dGhpcy5k''@;'; put 'put ''YXRhRmFjdG9yeShNLGQpO2lmKCExPT09RClyZXR1cm47Y29uc3R7dmFsdWU6WixidW5kbGVTZWVkOnJlfT1ELGNlPSJzdHJpbmciPT10eXBlb2YgcmUmJnJlLmxlbmd0aD4wO2xldCBiZTtiZT1jZT9yZTpxbyhaKT9gJHtPYmplY3Qua2V5cyhaKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFop''@;'; put 'put ''P2Ake1oubGVuZ3RofWA6YCR7bGMoWikubGVuZ3RofWAsaC5oYXMoYmUpfHxoLnNldChiZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgRWU9aC5nZXQoYmUpO0VlLm5lZWRlZCYmKCEodi5pbmRleE9mKFopPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0''@;'; put 'put ''ZXN8fGNlKSYmKEVlLnN0cmluZ3MucHVzaCh7dmFsdWU6WixbZl06TX0pLHYucHVzaChaKSxFZS5uZWVkZWQtPTEpfSksaH19Y29uc3QgdzRlPXVKO2Z1bmN0aW9uIGRKKGMsbCxhKXtDNGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEM0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY1QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5zdChjKXt2YXIgbD1mdW5jdGlvbiByc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEttKGMsbCl7cmV0dXJuIGMuZ2V0KHpkKGMsbCkpfWZ1bmN0aW9uIFFQKGMsbCxhKXtyZXR1cm4gYy5zZXQoemQoYyxsKSxhKSxhfWZ1bmN0aW9uIHpkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09''@;'; put 'put ''bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIik7''@;'; put 'put ''Y29uc3QgaEo9ImF1dG9Db2x1bW5TaXplIjt2YXIgZko9bmV3IFdlYWtNYXAsSF89bmV3IFdlYWtNYXAsTl89bmV3IFdlYWtNYXAsTGg9bmV3IFdlYWtTZXQ7Y2xhc3MgdVQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gaEp9c3RhdGljIGdldCBQTFVHSU5fUFJJ''@;'; put 'put ''T1JJVFkoKXtyZXR1cm4gMTB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57dXNlSGVhZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1wbGVEdXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENV''@;'; put 'put ''TEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHRzdChjLGwpe0M0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLExoKSxjVCh0aGlzLCJnaG9zdFRhYmxlIixuZXcg''@;'; put 'put ''Y0oodGhpcy5ob3QpKSxjVCh0aGlzLCJzYW1wbGVzR2VuZXJhdG9yIixuZXcgdzRlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhp''@;'; put 'put ''cy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZikpcmV0dXJuITE7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpO2xldCBNPSIiO3Yuc3Bhbm5lZHx8KE09dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpKTtsZXQgRD0iIjtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygi''@;'; put 'put ''bW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIikmJihEPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLEQsdixNKSkse3ZhbHVlOk0sYnVuZGxlU2VlZDpEfX0pKSxjVCh0aGlzLCJpblByb2dyZXNzIiwhMSksY1QodGhpcywibWVhc3VyZWRDb2x1bW5zIiwwKSxj''@;'; put 'put ''VCh0aGlzLCJjb2x1bW5XaWR0aHNNYXAiLG5ldyBabSksZEoodGhpcyxmSiwhMSksZEoodGhpcyxIXyxbXSksZEoodGhpcyxOXyxbXSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXplIix0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PnpkKExoLHRoaXMseDRlKS5jYWxsKHRoaXMsYSxkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClbaEpdJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9ZW5hYmxlUGx1Z2lu''@;'; put 'put ''KCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZ2hvc3RUYWJsZS5zZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIix0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSksdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmco''@;'; put 'put ''ImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2EmJiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpkKExoLGwsbHN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gemQoTGgsbCxjc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gemQoTGgsbCxkc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIiwoKT0+emQoTGgsdGhpcyxzc3QpLmNhbGwodGhpcykpLHRoaXMuYWRk''@;'; put 'put ''SG9vaygibW9kaWZ5Q29sV2lkdGgiLChkLGgpPT50aGlzLmdldENvbHVtbldpZHRoKGgsZCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnpkKExoLHRoaXMsdXN0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtRUChOXyx0aGlzLHRoaXMuZmluZENv''@;'; put 'put ''bHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGwsYSxkKT0+emQoTGgsdGhpcyx4NGUpLmNhbGwodGhpcyxsLGEsZCkp''@;'; put 'put ''fWNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKXtpZighdGhpcy5ob3QuY291bnRSb3dzKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxhPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTstMSE9PWwmJi0xIT09YSYmdGhpcy5jYWxjdWxhdGVDb2x1''@;'; put 'put ''bW5zV2lkdGgoe2Zyb206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3Vu''@;'; put 'put ''dENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25z''@;'; put 'put ''dCBoPSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO0dhKGguZnJvbSxoLnRvLHY9PntsZXQgTT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpO251bGw9PT1NJiYoTT12KSwoZHx8bnVsbD09PXRoaXMuY29s''@;'; put 'put ''dW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChNKSYmIXRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhNKSkmJnpkKExoLHRoaXMsUzRlKS5jYWxsKHRoaXMsdixmKX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKHpkKExoLHRoaXMsTTRlKS5jYWxsKHRoaXMp''@;'; put 'put ''LHRoaXMubWVhc3VyZWRDb2x1bW5zPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291''@;'; put 'put ''bnRSb3dzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9MDtjb25zdCBoPXRoaXMuaG90LmNvdW50Q29scygpLTE7bGV0IGY9bnVsbDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3Qgdj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1''@;'; put 'put ''cm4gRUUoZiksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmQsdG86TWF0aC5taW4oZCt1VC5DQUxDVUxBVElPTl9TVEVQLGgpfSxsLGEpLGQ9ZCt1VC5DQUxDVUxBVElPTl9TVEVQKzEsZDxoP2Y9eEUodik6KEVFKGYpLHRoaXMuaW5Q''@;'; put 'put ''cm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sTT10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7TT49MCYmKHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86TX0sbCxhKSxkPU0rMSksZDxoP3YoKTp0aGlzLmluUHJvZ3Jlc3M9''@;'; put 'put ''ITF9cmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKVtoSl07bGV0IGE9dVQuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7cmV0dXJuIHFvKGwpJiYoYT1sLnN5bmNMaW1pdCxkJChhKT9hPXEkKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Q29sdW1uV2lk''@;'; put 'put ''dGgobCxhKXtsZXQgZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLGg9YTtyZXR1cm4gdm9pZCAwPT09aCYmKGg9dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkp''@;'; put 'put ''LGQmJiJudW1iZXIiPT10eXBlb2YgaCYmKGg9TWF0aC5tYXgoaCxfXykpKSxofWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJs''@;'; put 'put ''ZUNvbHVtbigpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSYmdm9pZCAwIT09bD9sOi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaG90LmdldENvbEhlYWRlcigpLnJlZHVjZSgo''@;'; put 'put ''ZCxoLGYpPT57Y29uc3Qgdj1LbShIXyx0aGlzKS5sZW5ndGg7cmV0dXJuKHYtMTxmfHxLbShIXyx0aGlzKVtmXSE9PWgpJiZkLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZikpLHYtMTxmP0ttKEhfLHRoaXMpLnB1c2goaCk6S20oSF8sdGhpcylbZl09aCxkfSxbXSl9Y2xlYXJDYWNo''@;'; put 'put ''ZShsKXtBcnJheS5pc0FycmF5KGwpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6dGhpcy5jb2x1bW5XaWR0aHNNYXAuY2xlYXIoKX1pc05lZWRSZWNhbGN1bGF0ZSgp''@;'; put 'put ''e3JldHVybiEhdGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkQ29sdW1ucykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gb3N0KGMp''@;'; put 'put ''e2NvbnN0IGw9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfTtjLmZvckVhY2goYT0+e2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTtudWxsIT09ZCYmKHRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhkKXx8emQoTGgsdGhpcyxTNGUpLmNhbGwo''@;'; put 'put ''dGhpcyxhLGwpKX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKHpkKExoLHRoaXMsTTRlKS5jYWxsKHRoaXMpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBTNGUoYyxsKXt0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKGMsbCku''@;'; put 'put ''Zm9yRWFjaCgoZCxoKT0+dGhpcy5naG9zdFRhYmxlLmFkZENvbHVtbihoLGQpKX1mdW5jdGlvbiBNNGUoKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aHMoKGMsbCk9Pntjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhp''@;'; put 'put ''cy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbCl9KX0sITApfWZ1bmN0aW9uIHNzdCgpe3RoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpLHRoaXMuaW5Qcm9ncmVzc3x8KHpkKExoLHRoaXMsb3N0KS5jYWxsKHRoaXMsS20oTl8sdGhpcykpLFFQKE5fLHRoaXMs''@;'; put 'put ''W10pKX1mdW5jdGlvbiBsc3QoYyxsKXtsfHx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9ZnVuY3Rpb24gY3N0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbLGhdPWQ7Y29uc3QgZj10aGlzLmhvdC5wcm9wVG9Db2woaCk7cmV0dXJuIE51bWJlci5pc0ludGVnZXIo''@;'; put 'put ''ZikmJi0xPT09YS5pbmRleE9mKGYpJiZhLnB1c2goZiksYX0sW10pO0ttKE5fLHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24geDRlKGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgobCx2b2lkIDAsITApLGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChs''@;'; put 'put ''LHZvaWQgMCwhMSkpLGR9ZnVuY3Rpb24gdXN0KCl7UVAoSF8sdGhpcyx0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKSksdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpLFFQKGZKLHRoaXMsITApfWZ1bmN0aW9uIGRzdChjKXtpZighS20oZkosdGhpcykpcmV0dXJuO2NvbnN0IGw9Yy5y''@;'; put 'put ''ZWR1Y2UoKGEsZCk9Pnt2YXIgaDtjb25zdCBmPW51bGw9PT0oaD1kLmFkZHJlc3MpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNvbDtpZihOdW1iZXIuaXNJbnRlZ2VyKGYpKXtjb25zdCB2PXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpOy0xPT09YS5pbmRleE9mKHYpJiZhLnB1c2godil9cmV0''@;'; put 'put ''dXJuIGF9LFtdKTtLbShOXyx0aGlzKS5wdXNoKC4uLmwpfWNvbnN0IGQ5PXtob3Jpem9udGFsOiJob3Jpem9udGFsIix2ZXJ0aWNhbDoidmVydGljYWwifTtmdW5jdGlvbiBWXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbXN0KGMpe3ZhciBsPWZ1bmN0aW9uIHZzdChjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZFQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUg''@;'; put 'put ''ZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlBdXRvZmlsbFJhbmdlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUF1dG9maWxsIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFm''@;'; put 'put ''dGVyQXV0b2ZpbGwiKTtjb25zdCB5c3Q9WyJmaWxsSGFuZGxlIl07dmFyIEJfPW5ldyBXZWFrU2V0O2NsYXNzIENzdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBwc3QoYyxsKXsoZnVuY3Rpb24gZ3N0KGMsbCl7aWYobC5oYXMoYykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsQl8pLFZfKHRoaXMsImFkZGluZ1N0YXJ0ZWQiLCExKSxWXyh0aGlzLCJtb3VzZURvd25PbkNlbGxDb3Ju''@;'; put 'put ''ZXIiLCExKSxWXyh0aGlzLCJtb3VzZURyYWdPdXRzaWRlIiwhMSksVl8odGhpcywiaGFuZGxlRHJhZ2dlZENlbGxzIiwwKSxWXyh0aGlzLCJkaXJlY3Rpb25zIixbXSksVl8odGhpcywiYXV0b0luc2VydFJvdyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJhdXRvZmlsbCJ9''@;'; put 'put ''c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bImF1dG9maWxsIiwuLi55c3RdfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGV9ZW5hYmxlUGx1Z2luKCl7dGhpcy5l''@;'; put 'put ''bmFibGVkfHwodGhpcy5tYXBTZXR0aW5ncygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT5kVChCXyx0aGlzLE1zdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2si''@;'; put 'put ''LGw9PmRUKEJfLHRoaXMsU3N0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIiwobCxhKT0+ZFQoQl8sdGhpcyx4c3QpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''LHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJNYXBwZWRTZXR0aW5ncygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTZWxlY3Rpb25EYXRhKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''LHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixbe3N0YXJ0Um93OmEsc3RhcnRDb2w6ZCxlbmRSb3c6aCxlbmRDb2w6Zn1dKSxNPVtd''@;'; put 'put ''LEQ9W10sWj1bXTtyZXR1cm4gWW4odixyZT0+e2ZvcihsZXQgY2U9cmUuc3RhcnRSb3c7Y2U8PXJlLmVuZFJvdztjZSs9MSktMT09PU0uaW5kZXhPZihjZSkmJk0ucHVzaChjZSk7Zm9yKGxldCBjZT1yZS5zdGFydENvbDtjZTw9cmUuZW5kQ29sO2NlKz0xKS0xPT09RC5pbmRleE9mKGNlKSYm''@;'; put 'put ''RC5wdXNoKGNlKX0pLFluKE0scmU9Pntjb25zdCBjZT1bXTtZbihELGJlPT57Y2UucHVzaCh0aGlzLmhvdC5nZXRDb3B5YWJsZURhdGEocmUsYmUpKX0pLFoucHVzaChjZSl9KSxafWZpbGxJbigpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSly''@;'; put 'put ''ZXR1cm4hMTtjb25zdFtsLGEsZCxoXT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9Zi5nZXRUb3BTdGFydENvcm5lcigpLE09Zi5nZXRCb3R0b21FbmRDb3JuZXIoKTt0''@;'; put 'put ''aGlzLnJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpO2NvbnN0IEQ9W3Yucm93LHYuY29sLE0ucm93LE0uY29sXSxaPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixbTWF0aC5taW4odi5yb3csbCksTWF0aC5taW4odi5jb2wsYSksTWF0aC5tYXgoTS5yb3csZCks''@;'; put 'put ''TWF0aC5tYXgoTS5jb2wsaCldLEQpLHtkaXJlY3Rpb25PZkRyYWc6cmUsc3RhcnRPZkRyYWdDb29yZHM6Y2UsZW5kT2ZEcmFnQ29vcmRzOmJlfT1mdW5jdGlvbiBoc3QoYyxsLGEpe2xldCBkLGgsZjtyZXR1cm4gbFswXT09PWNbMF0mJmxbMV08Y1sxXT8oZj0ibGVmdCIsZD1hKGxbMF0sbFsx''@;'; put 'put ''XSksaD1hKGxbMl0sY1sxXS0xKSk6bFsyXT09PWNbMl0mJmxbMF09PT1jWzBdJiZsWzNdPmNbM10/KGY9InJpZ2h0IixkPWEobFswXSxjWzNdKzEpLGg9YShsWzJdLGxbM10pKTpsWzBdPGNbMF0mJmxbMV09PT1jWzFdPyhmPSJ1cCIsZD1hKGxbMF0sbFsxXSksaD1hKGNbMF0tMSxsWzNdKSk6''@;'; put 'put ''bFsyXT5jWzJdJiZsWzFdPT09Y1sxXSYmKGY9ImRvd24iLGQ9YShjWzJdKzEsbFsxXSksaD1hKGxbMl0sbFszXSkpLGQmJmQubm9ybWFsaXplKCksaCYmaC5ub3JtYWxpemUoKSx7ZGlyZWN0aW9uT2ZEcmFnOmYsc3RhcnRPZkRyYWdDb29yZHM6ZCxlbmRPZkRyYWdDb29yZHM6aH19KEQsWiwo''@;'; put 'put ''RWUsQmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhFZSxCZSkpO2lmKGNlJiZjZS5yb3c+LTEmJmNlLmNvbD4tMSl7Y29uc3QgRWU9dGhpcy5nZXRTZWxlY3Rpb25EYXRhKCksQmU9Zi5jbG9uZSgpLHFlPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoY2UsY2UsYmUpLHJ0PXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJiZWZvcmVBdXRvZmlsbCIsRWUsQmUscWUscmUpO2lmKCExPT09cnQpcmV0dXJuIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCksdGhpcy5ob3QucmVuZGVyKCksITE7bGV0IHB0PXJ0O2NvbnN0IGR0PXJ0O2lmKFsidXAiLCJsZWZ0''@;'; put 'put ''Il0uaW5kZXhPZihyZSk+LTEmJigxIT09ZHQubGVuZ3RofHwwIT09ZHRbMF0ubGVuZ3RoKSlpZihwdD1bXSwidXAiPT09cmUpe2NvbnN0IEp0PWJlLnJvdy1jZS5yb3crMSx2bj1KdCVkdC5sZW5ndGg7Zm9yKGxldCBDbj0wO0NuPEp0O0NuKyspcHQucHVzaChkdFsoQ24rKGR0Lmxlbmd0aC12''@;'; put 'put ''bikpJWR0Lmxlbmd0aF0pfWVsc2V7Y29uc3QgSnQ9YmUuY29sLWNlLmNvbCsxLHZuPUp0JWR0WzBdLmxlbmd0aDtmb3IobGV0IENuPTA7Q248ZHQubGVuZ3RoO0NuKyspe3B0LnB1c2goW10pO2ZvcihsZXQgdG49MDt0bjxKdDt0bisrKXB0W0NuXS5wdXNoKGR0W0NuXVsodG4rKGR0W0NuXS5s''@;'; put 'put ''ZW5ndGgtdm4pKSVkdFtDbl0ubGVuZ3RoXSl9fXRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGNlLnJvdyxjZS5jb2wscHQsYmUucm93LGJlLmNvbCxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgLG51bGwpLHRoaXMuc2V0U2VsZWN0aW9uKFopLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1''@;'; put 'put ''dG9maWxsIixwdCxCZSxxZSxyZSksdGhpcy5ob3QucmVuZGVyKCl9ZWxzZSB0aGlzLmhvdC52aWV3LnJlbmRlcigpO3JldHVybiEwfXJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChsKXtyZXR1cm4gbC5yb3c8MCYmKGwucm93PTApLGwuY29sPDAmJihsLmNvbD0wKSxsfWdldENvb3Jkc09m''@;'; put 'put ''RHJhZ0FuZERyb3BCb3JkZXJzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGg9bDtpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoZDkudmVydGljYWwpJiZ0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoZDku''@;'; put 'put ''aG9yaXpvbnRhbCkpe2NvbnN0IGY9YS5nZXRUb3BTdGFydENvcm5lcigpOyhkLmNvbDw9bC5jb2x8fGYuY29sPj1sLmNvbCkmJihoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKSksKGQucm93PGwucm93fHxmLnJvdz5sLnJvdykmJihoPXRoaXMuaG90Ll9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKGwucm93LGQuY29sKSl9ZWxzZSBpZih0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoZDkudmVydGljYWwpKWg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpO2Vsc2V7aWYoIXRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhkOS5ob3Jpem9udGFsKSlyZXR1''@;'; put 'put ''cm47aD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCl9cmV0dXJuIHRoaXMucmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGgpfXNob3dCb3JkZXIobCl7Y29uc3QgYT10aGlzLmdldENvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKGwpO2EmJnRoaXMucmVkcmF3Qm9y''@;'; put 'put ''ZGVycyhhKX1hZGRSb3coKXt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLHZvaWQgMCwxLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGApLHRoaXMuYWRkaW5nU3RhcnRlZD0hMX0sMjAwKX1hZGROZXdSb3dJZk5lZWRlZCgp''@;'; put 'put ''e2lmKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkmJiExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmF1dG9JbnNlcnRSb3cpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0''@;'; put 'put ''LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZD10aGlzLmhvdC5jb3VudFJvd3MoKTtsWzJdPGQtMSYmYVsyXT09PWQtMSYmKHRoaXMuYWRkaW5nU3RhcnRlZD0hMCx0aGlzLmFkZFJvdygpKX19Z2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpe2NvbnN0IGE9dGhpcy5o''@;'; put 'put ''b3QuZ2V0RGF0YSgpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGg7Zm9yKGxldCBmPWxbMl0rMTtmPGQ7ZisrKXtmb3IobGV0IEQ9bFsxXTtEPD1sWzNdO0QrKylpZighVWMoYVtmXVtEXSkpcmV0dXJuLTE7Y29uc3QgTT1hW2ZdW2xbM10rMV07KCFVYyhhW2ZdW2xbMV0tMV0pfHwhVWMo''@;'; put 'put ''TSkpJiYoaD1mKX1yZXR1cm4gaH1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSkuYWRkKHRo''@;'; put 'put ''aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsbFszXSkpLmNvbW1pdCgpfXNldFNlbGVjdGlvbihsKXt0aGlzLmhvdC5zZWxlY3RDZWxsKC4uLnlzKGwsYT0+TWF0aC5tYXgoYSwwKSksITEsITEpfXNlbGVjdEFkamFjZW50KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxh''@;'; put 'put ''PXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpO3JldHVybi0xIT09YSYmdm9pZCAwIT09YSYmKHRoaXMuYWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpLCEwKX1yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKXt0aGlzLmhh''@;'; put 'put ''bmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCl9cmVkcmF3Qm9yZGVycyhsKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''LmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRvKS5hZGQobCkuY29tbWl0KCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmF9PXRoaXMuaG90LnJvb3REb2N1bWVudCxk''@;'; put 'put ''PVUwKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXR8fGEuc2Nyb2xsVG9wKStNdSh0aGlzLmhvdC50YWJsZSksaD1VMCh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8YS5zY3JvbGxMZWZ0KStz''@;'; put 'put ''dSh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGwuY2xpZW50WT5kJiZsLmNsaWVudFg8PWh9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9''@;'; put 'put ''PmRUKEJfLHRoaXMsRXN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+ZFQoQl8sdGhpcyxUc3QpLmNhbGwodGhpcyxhKSl9Y2xlYXJNYXBwZWRTZXR0aW5ncygpe3RoaXMuZGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmF1''@;'; put 'put ''dG9JbnNlcnRSb3c9ITF9bWFwU2V0dGluZ3MoKXtjb25zdCBsPWZ1bmN0aW9uIGZzdChjKXtjb25zdCBsPXt9O3JldHVybiEwPT09Yz8obC5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKGQ5KSxsLmF1dG9JbnNlcnRSb3c9ITApOnFvKGMpPyhsLmF1dG9JbnNlcnRSb3c9ISFQYShjLmF1dG9JbnNl''@;'; put 'put ''cnRSb3cpJiZjLmRpcmVjdGlvbiE9PWQ5Lmhvcml6b250YWwmJmMuYXV0b0luc2VydFJvdyxsLmRpcmVjdGlvbnM9UGEoYy5kaXJlY3Rpb24pP1tjLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoZDkpKToic3RyaW5nIj09dHlwZW9mIGM/KGwuZGlyZWN0aW9ucz1bY10sbC5hdXRvSW5zZXJ0Um93''@;'; put 'put ''PSEwKToobC5kaXJlY3Rpb25zPVtdLGwuYXV0b0luc2VydFJvdz0hMSksbH0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlKTt0aGlzLmRpcmVjdGlvbnM9bC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1sLmF1dG9JbnNlcnRSb3d9ZGVzdHJveSgpe3N1cGVyLmRlc3Ry''@;'; put 'put ''b3koKX19ZnVuY3Rpb24gU3N0KCl7dGhpcy5zZWxlY3RBZGphY2VudCgpJiZ0aGlzLmZpbGxJbigpfWZ1bmN0aW9uIE1zdCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITB9ZnVuY3Rpb24geHN0KGMpe3RoaXMubW91c2VEb3duT25DZWxs''@;'; put 'put ''Q29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKz0xLHRoaXMuc2hvd0JvcmRlcihjKSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfWZ1bmN0aW9uIEVzdCgpe3RoaXMuaGFuZGxlRHJh''@;'; put 'put ''Z2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExKX1mdW5jdGlvbiBUc3QoYyl7Y29uc3QgbD10aGlzLmdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lk''@;'; put 'put ''ZShjKTshMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MCYmbD8odGhpcy5tb3VzZURyYWdPdXRzaWRlPSEwLHRoaXMuYWRkaW5nU3RhcnRlZD0hMCk6dGhpcy5tb3VzZURyYWdPdXRzaWRlPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZSYmdGhpcy5hdXRv''@;'; put 'put ''SW5zZXJ0Um93JiZ0aGlzLmFkZFJvdygpfWZ1bmN0aW9uIFQ0ZShjLGwsYSl7QTRlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBBNGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrc3QoYyl7dmFyIGw9ZnVuY3Rpb24gRHN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBrNGUoYyxsLGEpe3JldHVy''@;'; put 'put ''biBjLnNldChCcChjLGwpLGEpLGF9ZnVuY3Rpb24gZUYoYyxsKXtyZXR1cm4gYy5nZXQoQnAoYyxsKSl9ZnVuY3Rpb24gQnAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHBKPSJhdXRvUm93U2l6ZSI7dmFyIGhUPW5ldyBXZWFrTWFwLGdKPW5ldyBXZWFrTWFwLEk1PW5ldyBXZWFrU2V0O2NsYXNzIGZUIGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIHBKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2Ft''@;'; put 'put ''cGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gQXN0KGMsbCl7QTRlKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KHRoaXMsSTUpLGpfKHRoaXMsImhlYWRlckhlaWdodCIsbnVsbCksal8odGhpcywiZ2hvc3RUYWJsZSIsbmV3IGNKKHRoaXMuaG90KSksal8odGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IHc0ZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMuaG90''@;'; put 'put ''LnRvUGh5c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGYpfHxhPj0wJiZkPj0wJiZ0aGlzLmhvdC5nZXRDZWxsTWV0YShhLGQpLmhpZGRlbilyZXR1cm4hMTtsZXQgdjtyZXR1''@;'; put 'put ''cm4gYT49MD92PXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKTotMT09PWEmJih2PXRoaXMuaG90LmdldENvbEhlYWRlcihkKSkse3ZhbHVlOnZ9fSkpLGpfKHRoaXMsImluUHJvZ3Jlc3MiLCExKSxqXyh0aGlzLCJtZWFzdXJlZFJvd3MiLDApLGpfKHRoaXMsInJvd0hlaWdodHNNYXAiLG5l''@;'; put 'put ''dyBabSksVDRlKHRoaXMsaFQsW10pLFQ0ZSh0aGlzLGdKLCExKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b1Jvd1NpemUiLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChhLGQsaCk9PkJwKEk1LHRoaXMsRDRlKS5j''@;'; put 'put ''YWxsKHRoaXMsYSxkLGgpKX1pc0VuYWJsZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbcEpdO3JldHVybiEwPT09bHx8cW8obCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1''@;'; put 'put ''cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgYT10aGlzLmdldFNldHRpbmcoInNhbXBsaW5nUmF0aW8iKTthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChJNSxsLFBzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFu''@;'; put 'put ''Z2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKEk1LGwsRnN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKCk9''@;'; put 'put ''PnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''QnAoSTUsbCxOc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIiwoKT0+QnAoSTUsdGhpcyxPc3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoZCxoKT0+dGhpcy5nZXRSb3dIZWlnaHQoaCxkKSksdGhpcy5hZGRIb29rKCJp''@;'; put 'put ''bml0IiwoKT0+QnAoSTUsdGhpcyxIc3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwoKT0+dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGVhZGVySGVpZ2h0''@;'; put 'put ''PW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwobCxhLGQpPT5CcChJNSx0aGlzLEQ0ZSkuY2FsbCh0aGlzLGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZVJvd3NIZWlnaHQoKXtpZighdGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxhPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTstMSE9PWwmJi0xIT09YSYmdGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2FsY3VsYXRlUm93c0hlaWdo''@;'; put 'put ''dCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAs''@;'; put 'put ''dG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7''@;'; put 'put ''aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qgdj10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKC0xLGYpO3RoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KHYuZ2V0KC0xKSl9R2EoaC5mcm9tLGgudG8sdj0+e2xldCBNPXRo''@;'; put 'put ''aXMuaG90LnRvUGh5c2ljYWxSb3codik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChNKSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXModixmKS5mb3JFYWNoKChaLHJlKT0+dGhpcy5naG9zdFRh''@;'; put 'put ''YmxlLmFkZFJvdyhyZSxaKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKCh2LE0pPT57djwwP3RoaXMuaGVhZGVySGVpZ2h0PU06dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVl''@;'; put 'put ''QXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9n''@;'; put 'put ''cmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBFRShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmQsdG86TWF0aC5taW4oZCtmVC5DQUxDVUxBVElPTl9TVEVQLGgpfSxsLGEpLGQ9ZCtmVC5DQUxDVUxBVElP''@;'; put 'put ''Tl9TVEVQKzEsZDxoP2Y9eEUodik6KEVFKGYpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sTT10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7TT49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTowLHRvOk19LGws''@;'; put 'put ''YSksZD1NKzEpLGQ8aD92KCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoe2Zyb206MCx0''@;'; put 'put ''bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbcEpdO2xldCBhPWZULlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO3JldHVybiBxbyhs''@;'; put 'put ''KSYmKGE9bC5zeW5jTGltaXQsZCQoYSk/YT1xJChkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldFJvd0hlaWdodChsLGEpe2NvbnN0IGQ9bDwwP3RoaXMuaGVhZGVySGVpZ2h0OnRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSk7''@;'; put 'put ''bGV0IGg9YTtyZXR1cm4gbnVsbCE9PWQmJmQ+KGF8fDApJiYoaD1kKSxofWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLmhlYWRlckhlaWdodH1nZXRGaXJzdFZpc2libGVSb3coKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNp''@;'; put 'put ''YmxlUm93KCkpJiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVSb3coKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1jbGVhckNhY2hlKGwpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsQXJy''@;'; put 'put ''YXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaChhPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfSl9LCEwKTp0aGlzLnJvd0hlaWdodHNNYXAuY2xlYXIoKX1jbGVhckNhY2hlQnlSYW5nZShsKXtjb25zdHtmcm9t''@;'; put 'put ''OmEsdG86ZH09Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bDt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0dhKE1hdGgubWluKGEsZCksTWF0aC5tYXgoYSxkKSxoPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLG51bGwpfSl9LCEwKX1pc05lZWRS''@;'; put 'put ''ZWNhbGN1bGF0ZSgpe3JldHVybiEhdGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZFJvd3MpLmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9u''@;'; put 'put ''IExzdChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX07Yy5mb3JFYWNoKGE9Pnt0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKGEsbCkuZm9yRWFjaCgoaCxmKT0+dGhpcy5naG9zdFRhYmxlLmFkZFJvdyhmLGgpKX0pLHRoaXMuZ2hv''@;'; put 'put ''c3RUYWJsZS5yb3dzLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldEhlaWdodHMoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSk7dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChoLGQpfSl9LCEw''@;'; put 'put ''KSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9ZnVuY3Rpb24gT3N0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpLHRoaXMuaW5Qcm9ncmVzc3x8KEJwKEk1LHRoaXMsTHN0KS5jYWxsKHRoaXMsZUYoaFQsdGhpcykpLGs0ZShoVCx0aGlzLFtdKSl9ZnVuY3Rpb24gRDRlKGMs''@;'; put 'put ''bCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGwsdm9pZCAwLCEwKSxkPXRoaXMuZ2V0Um93SGVpZ2h0KGwpKSxkfWZ1bmN0aW9uIFBzdChjLGwpe2x8fHRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9ZnVuY3Rpb24gRnN0KGMpe2NvbnN0IGw9''@;'; put 'put ''Yy5yZWR1Y2UoKGEsZCk9PntsZXRbaF09ZDtyZXR1cm4tMT09PWEuaW5kZXhPZihoKSYmYS5wdXNoKGgpLGF9LFtdKTtlRihoVCx0aGlzKS5wdXNoKC4uLmwpfWZ1bmN0aW9uIEhzdCgpe3RoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCksazRlKGdKLHRoaXMsITApfWZ1bmN0aW9uIE5z''@;'; put 'put ''dChjKXtpZighZUYoZ0osdGhpcykpcmV0dXJuO2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9Pnt2YXIgaDtjb25zdCBmPW51bGw9PT0oaD1kLmFkZHJlc3MpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJvdztpZihOdW1iZXIuaXNJbnRlZ2VyKGYpKXtjb25zdCB2PXRoaXMuaG90LnRvVmlzdWFsUm93''@;'; put 'put ''KGYpOy0xPT09YS5pbmRleE9mKHYpJiZhLnB1c2godil9cmV0dXJuIGF9LFtdKTtlRihoVCx0aGlzKS5wdXNoKC4uLmwpfWNvbnN0IEk0ZT1uZXcgTWFwKFtbImluZGV4ZXNTZXF1ZW5jZSIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpQSyxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczokRX1d''@;'; put 'put ''LFsicGh5c2ljYWxseUluZGV4ZWQiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6TkssZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6Vkt9XV0pLFI0ZT1jPT57aWYoITE9PT1JNGUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgQWx0ZXIgc3RyYXRlZ3kgd2l0aCBJRCAnJHtjfScgZG9lcyBub3Qg''@;'; put 'put ''ZXhpc3QuYCk7cmV0dXJuIEk0ZS5nZXQoYyl9LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6VnN0LGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOkJzdH09UjRlKCJwaHlzaWNhbGx5SW5kZXhlZCIpLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6VXN0LGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1z''@;'; put 'put ''OlpzdH09UjRlKCJwaHlzaWNhbGx5SW5kZXhlZCIpO2NvbnN0IEw0ZT0iYmluZFJvd3NXaXRoSGVhZGVycyIsTzRlPW5ldyBNYXAoW1sibG9vc2UiLGNsYXNzIGpzdCBleHRlbmRzIFE3e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1ISyh0aGlzLmluZGV4''@;'; put 'put ''ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPVZzdChkLGwsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPUJzdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPUZLKGEsbCksc3VwZXIucmVtb3ZlKGwp''@;'; put 'put ''fX1dLFsic3RyaWN0IixjbGFzcyBXc3QgZXh0ZW5kcyBRN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1Vc3QodGhpcy5pbmRleGVkVmFsdWVzLGwsYSwoZCxoKT0+dGhpcy5nZXROZXh0VmFsdWUoaCkpLHN1cGVyLmluc2VydChsLGEp''@;'; put 'put ''fXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9WnN0KHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0TmV4dFZhbHVlKGwpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2x9fV1dKTt2YXIgUDRlPW5ldyBXZWFrU2V0O2NsYXNzIHRsdCBl''@;'; put 'put ''eHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBHc3QoYyxsKXsoZnVuY3Rpb24gJHN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsUDRlKSxmdW5jdGlvbiBLc3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFzdChjKXt2YXIgbD1mdW5jdGlvbiBYc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxj''@;'; put 'put ''fSh0aGlzLCJoZWFkZXJJbmRleGVzIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTDRlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIxMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbTDRlXX1lbmFibGVQbHVnaW4o''@;'; put 'put ''KXt2YXIgbDtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9bnVsbCE9PShsPU80ZS5nZXQodGhpcy5nZXRTZXR0aW5nKCkpKSYmdm9pZCAwIT09bD9sOk80ZS5nZXQoImxvb3NlIik7dGhpcy5oZWFkZXJJbmRleGVzPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJi''@;'; put 'put ''aW5kUm93c1dpdGhIZWFkZXJzIixuZXcgYSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXIiLGQ9PmZ1bmN0aW9uIEpzdChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KFA0ZSx0aGlzLG5sdCkuY2FsbCh0aGlzLGQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgiYmluZFJv''@;'; put 'put ''d3NXaXRoSGVhZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBubHQoYyl7cmV0dXJuIHRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhjKSl9ZnVuY3Rpb24gRjRlKGMs''@;'; put 'put ''bCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBINGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGFsdChjKXt2YXIgbD1mdW5jdGlvbiBvbHQo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIE40ZShjLGwpe3JldHVybiBjLmdldCh6XyhjLGwpKX1mdW5jdGlvbiBtSihjLGwsYSl7cmV0dXJuIGMuc2V0KHpfKGMsbCksYSksYX1mdW5jdGlvbiB6XyhjLGwsYSl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdEY9ImNvbGxhcHNpYmxlQ29sdW1u''@;'; put 'put ''cyIsbGx0PVsibmVzdGVkSGVhZGVycyJdLFVfPSJjb2xsYXBzaWJsZUluZGljYXRvciIsVjRlPXRGLEI0ZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlkZUNvbHVtbjohMCxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1d''@;'; put 'put ''LFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQifV1dKTt2YXIgWl89bmV3IFdlYWtNYXAscFQ9bmV3IFdlYWtTZXQ7Y2xhc3MgY2x0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHJsdChjLGwpe0Y0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHBUKSxINGUodGhpcywibmVzdGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksSDRlKHRoaXMsImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rpb24gaWx0KGMsbCxhKXtGNGUoYyxsKSxs''@;'; put 'put ''LnNldChjLGEpfSh0aGlzLFpfLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0Rn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3RlZEhlYWRlcnMiXX1zdGF0aWMgZ2V0''@;'; put 'put ''IFNFVFRJTkdfS0VZUygpe3JldHVyblt0RiwuLi5sbHRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0Rl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKTthfHxpbCgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksbUooWl8sdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4''@;'; put 'put ''TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJpbml0IiwoKT0+el8ocFQsdGhpcyxobHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''el8ocFQsbCxmbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpfKHBULGwsdWx0KS5j''@;'; put 'put ''YWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKGQsaCxmKT0+el8ocFQsdGhpcyxkbHQpLmNhbGwodGhpcyxkLGgsZikpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0''@;'; put 'put ''ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xlYW4iPT10eXBlb2YgbD90aGlzLmhlYWRl''@;'; put 'put ''clN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VT''@;'; put 'put ''dGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLG1KKFpfLHRoaXMsbnVsbCksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPW51bGwsdGhpcy51bnJl''@;'; put 'put ''Z2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckJ1dHRvbnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJh''@;'; put 'put ''Y2s6KCk9Pnt2YXIgbDtjb25zdHtyb3c6YSxjb2w6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQse2NvbGxhcHNpYmxlOmgsaXNDb2xsYXBzZWQ6Zixjb2x1bW5JbmRleDp2fT1udWxsIT09KGw9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyVHJl''@;'; put 'put ''ZU5vZGVEYXRhKGEsZCkpJiZ2b2lkIDAhPT1sP2w6e307aWYoaClyZXR1cm4gZj90aGlzLmV4cGFuZFNlY3Rpb24oe3JvdzphLGNvbDp2fSk6dGhpcy5jb2xsYXBzZVNlY3Rpb24oe3JvdzphLGNvbDp2fSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7cmV0dXJuKG51bGw9PT0obD10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc1NpbmdsZSgpKSYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oaWdobGlnaHQuaXNIZWFkZXIoKSl9LGdyb3VwOlY0ZSxyZWxh''@;'; put 'put ''dGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoVjRlKX1jbGVhckJ1dHRvbnMoKXtpZighdGhpcy5ob3Qudmll''@;'; put 'put ''dylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5USEVBRCxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFE''@;'; put 'put ''LGg9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsLGY9ZnVuY3Rpb24odil7diYmdi5wYXJl''@;'; put 'put ''bnROb2RlLnJlbW92ZUNoaWxkKHYpfTtHYSgwLGwtMSx2PT57Y29uc3QgTT1hLmNoaWxkTm9kZXNbdl0sRD1kLmNoaWxkTm9kZXNbdl0sWj1oP2guY2hpbGROb2Rlc1t2XTpudWxsO0dhKDAsTS5jaGlsZE5vZGVzLmxlbmd0aC0xLHJlPT57bGV0IGNlPU0uY2hpbGROb2Rlc1tyZV0ucXVlcnlT''@;'; put 'put ''ZWxlY3RvcihgLiR7VV99YCk7ZihjZSksRCYmRC5jaGlsZE5vZGVzW3JlXSYmKGNlPUQuY2hpbGROb2Rlc1tyZV0ucXVlcnlTZWxlY3RvcihgLiR7VV99YCksZihjZSkpLGgmJlomJlouY2hpbGROb2Rlc1tyZV0mJihjZT1aLmNoaWxkTm9kZXNbcmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWAp''@;'; put 'put ''LGYoY2UpKX0pfSl9ZXhwYW5kU2VjdGlvbihsKXt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImV4cGFuZCIpfWNvbGxhcHNlU2VjdGlvbihsKXt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImNvbGxhcHNlIil9dG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9u''@;'; put 'put ''cyhsKXtjb25zdCBhPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcE5vZGVzKGQ9Pntjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdDb2xzcGFuOmYsaGVhZGVyTGV2ZWw6dixjb2x1bW5JbmRleDpNLGlzQ29sbGFwc2VkOkR9PWQ7aWYoITA9PT1oJiZmPjEmJihEJiYiZXhwYW5kIj09PWx8fCFE''@;'; put 'put ''JiYiY29sbGFwc2UiPT09bCkpcmV0dXJue3Jvdzp0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5sZXZlbFRvUm93Q29vcmRzKHYpLGNvbDpNfX0pO3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGEsbCl9Y29sbGFwc2VBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMo''@;'; put 'put ''ImNvbGxhcHNlIil9ZXhwYW5kQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJleHBhbmQiKX10b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24obCxhKXtpZighQjRlLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGFjdGlvbiBpcyBwYXNzZWQgKCR7YX0p''@;'; put 'put ''LmApO2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybjtjb25zdCBkPUltKGwsRWU9PntsZXR7cm93OkJlfT1FZTtyZXR1cm4gQmU8MH0pO2xldCBoPWQubGVuZ3RoPjA7WW4oZCxFZT0+e3ZhciBCZTtsZXR7cm93OnFlLGNvbDpydH09RWU7Y29uc3R7Y29sbGFwc2libGU6cHQsaXNDb2xsYXBz''@;'; put 'put ''ZWQ6ZHR9PW51bGwhPT0oQmU9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MocWUscnQpKSYmdm9pZCAwIT09QmU/QmU6e307aWYoIXB0fHxkdCYmImNvbGxhcHNlIj09PWF8fCFkdCYmImV4cGFuZCI9PT1hKXJldHVybiBoPSExLCExfSk7Y29uc3QgZj1bXSx2PVtd''@;'; put 'put ''O2gmJlluKGQsRWU9PntsZXR7cm93OkJlLGNvbDpxZX09RWU7Y29uc3R7Y29sc3BhbkNvbXBlbnNhdGlvbjpydCxhZmZlY3RlZENvbHVtbnM6cHQscm9sbGJhY2tNb2RpZmljYXRpb246ZHR9PXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGEsQmUscWUp''@;'; put 'put ''O3J0PjAmJih2LnB1c2goLi4ucHQpLGYucHVzaChkdCkpfSk7Y29uc3QgTT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKTtsZXQgRD1bXTsiY29sbGFwc2UiPT09YT9EPXAyZShbLi4uTSwuLi52XSk6ImV4cGFuZCI9PT1hJiYoRD1JbShNLEVlPT4hdi5pbmNsdWRlcyhFZSkpKTtjb25zdCBa''@;'; put 'put ''PUI0ZS5nZXQoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcyhaLmJlZm9yZUhvb2ssTSxELGgpKXJldHVybiB2b2lkIFluKGYsRWU9PntFZSgpfSk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbih2LEVlPT57TjRlKFpfLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsQ29sdW1uKEVlKSxaLmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCBjZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1NLmxlbmd0aCxiZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCJjb2xsYXBzZSI9PT1hJiZjZSYmYmUpe2NvbnN0e3Jv''@;'; put 'put ''dzpFZSxjb2w6QmV9PWJlLmhpZ2hsaWdodDtpZigodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oRWUpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihCZSkpJiZ2LmluY2x1ZGVzKEJlKSl7Y29uc3QgcnQ9RWU+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEVlLDEsITApOkVlLHB0PUJlPj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChCZSwxLCEwKTpCZTtudWxsIT09cnQmJm51bGwhPT1wdCYmdGhpcy5ob3Quc2VsZWN0Q2VsbChydCxwdCl9fXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKFouYWZ0ZXJIb29rLE0sRCxoLGNlKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWdldENvbGxhcHNlZENvbHVtbnMoKXtyZXR1cm4gTjRlKFpfLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKX1kZXN0cm95KCl7bUooWl8s''@;'; put 'put ''dGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHVsdChjLGwsYSl7dmFyIGQ7Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGlzQ29sbGFwc2VkOnZ9PW51bGwhPT0oZD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhhLGMpKSYmdm9p''@;'; put 'put ''ZCAwIT09ZD9kOnt9LE09aCYmZj4xJiZjPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LEQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztsZXQgWj1sLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApO3ZhciByZTtCNyhsLFtOMigiIilbMF1dKSxNPyhafHwo''@;'; put 'put ''Wj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksVGkoWixVXyksbC5xdWVyeVNlbGVjdG9yKCJkaXY6Zmlyc3QtY2hpbGQiKS5hcHBlbmRDaGlsZChaKSksbG8oWixbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLHY/KFRpKFosImNvbGxhcHNlZCIpLFBtKFosIisi''@;'; put 'put ''KSxEJiZ2byhsLC4uLk4yKCExKSkpOihUaShaLCJleHBhbmRlZCIpLFBtKFosIi0iKSxEJiZ2byhsLC4uLk4yKCEwKSkpLEQmJnZvKFosLi4uTjcoKSkpOm51bGw9PT0ocmU9Wil8fHZvaWQgMD09PXJlfHxyZS5yZW1vdmUoKX1mdW5jdGlvbiBkbHQoYyxsKXtwbyhjLnRhcmdldCxVXykmJihw''@;'; put 'put ''byhjLnRhcmdldCwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpKTpwbyhjLnRhcmdldCwiY29sbGFwc2VkIikmJih0aGlzLmV2ZW50TWFuYWdlci5m''@;'; put 'put ''aXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImV4cGFuZCIpKSxCMihjKSl9ZnVuY3Rpb24gaGx0KCl7dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBmbHQoYyxsKXtsfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9u''@;'; put 'put ''IGg5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwbHQoYyl7dmFyIGw9ZnVuY3Rpb24gZ2x0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBtbHQ9WyJzb3J0RW1wdHlDZWxscyIsImluZGljYXRvciIsImhlYWRlckFj''@;'; put 'put ''dGlvbiIsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiXTtjbGFzcyBfbHR7Y29uc3RydWN0b3IobCxhKXtoOSh0aGlzLCJob3QiLHZvaWQgMCksaDkodGhpcywic29ydGluZ1N0YXRlcyIsbmV3IHBQKSxoOSh0aGlzLCJzb3J0RW1wdHlDZWxscyIsITEpLGg5KHRoaXMsImluZGljYXRvciIsITAp''@;'; put 'put ''LGg5KHRoaXMsImhlYWRlckFjdGlvbiIsITApLGg5KHRoaXMsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiLHZvaWQgMCksaDkodGhpcywibWFwTmFtZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubWFwTmFtZT1hLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGEsdGhp''@;'; put 'put ''cy5zb3J0aW5nU3RhdGVzKX11cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKXtxbyhsKSYmWG8obCwoYSxkKT0+e21sdC5pbmNsdWRlcyhkKSYmKHRoaXNbZF09YSl9KX1nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpe2NvbnN0IGw9e3NvcnRFbXB0eUNlbGxzOnRoaXMuc29ydEVtcHR5Q2Vs''@;'; put 'put ''bHMsaW5kaWNhdG9yOnRoaXMuaW5kaWNhdG9yLGhlYWRlckFjdGlvbjp0aGlzLmhlYWRlckFjdGlvbn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSYmKGwuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT10aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3Rv''@;'; put 'put ''cnkpLGx9Z2V0U29ydE9yZGVyT2ZDb2x1bW4obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zb3J0T3JkZXJ9Z2V0SW5kZXhPZkNvbHVt''@;'; put 'put ''bkluU29ydFF1ZXVlKGwpe3JldHVybiBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5maW5kSW5kZXgoYT0+e2xldFtkXT1hO3JldHVybiBkPT09bH0pfWdldE51bWJlck9mU29ydGVkQ29sdW1ucygpe3JldHVybiB0aGlzLnNv''@;'; put 'put ''cnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCl9aXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl9aXNDb2x1bW5Tb3J0ZWQobCl7cmV0dXJuIHFvKHRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5o''@;'; put 'put ''b3QudG9QaHlzaWNhbENvbHVtbihsKSkpfWdldFNvcnRTdGF0ZXMoKXtyZXR1cm4gbnVsbD09PXRoaXMuc29ydGluZ1N0YXRlcz9bXTp0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChhPT57bGV0W2QsaF09YTtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvVmlzdWFsQ29sdW1u''@;'; put 'put ''KGQpLC4uLmh9fSl9Z2V0Q29sdW1uU29ydFN0YXRlKGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihQYShhKSlyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOmF9fXNldFNvcnRTdGF0ZXMobCl7dGhpcy5zb3J0aW5nU3RhdGVzLmNsZWFyKCk7Zm9yKGxldCBhPTA7''@;'; put 'put ''YTxsLmxlbmd0aDthKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsW2FdLmNvbHVtbikse3NvcnRPcmRlcjpsW2FdLnNvcnRPcmRlcn0pfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVy''@;'; put 'put ''TWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fWZ1bmN0aW9uIGo0ZShjLGwsYSl7Y29uc3QgZD1sLmxvY2FsZTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtjb25zdHtzb3J0RW1wdHlDZWxsczp2fT1hO3JldHVybiJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvY2Fs''@;'; put 'put ''ZUxvd2VyQ2FzZShkKSksInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSxoPT09Zj9qcDpVYyhoKT9VYyhmKT9qcDp2JiYiYXNjIj09PWM/WWM6R2M6VWMoZik/diYmImFzYyI9PT1jP0djOlljOmlzTmFOKGgpJiYhaXNOYU4oZik/ImFzYyI9PT1jP0djOllj''@;'; put 'put ''OiFpc05hTihoKSYmaXNOYU4oZil8fChpc05hTihoKXx8aXNOYU4oZil8fChoPXBhcnNlRmxvYXQoaCksZj1wYXJzZUZsb2F0KGYpKSxoPGYpPyJhc2MiPT09Yz9ZYzpHYzpoPmY/ImFzYyI9PT1jP0djOlljOmpwfX1jb25zdHtyZWdpc3RlcjpnVCxnZXRJdGVtOlU0ZSxoYXNJdGVtOmtsdH09''@;'; put 'put ''cjMoInNvcnRpbmcuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIpLHtyZWdpc3RlcjpaNGUsZ2V0SXRlbTpEbHR9PXIzKCJzb3J0aW5nLm1haW5Tb3J0Q29tcGFyYXRvciIpO2Z1bmN0aW9uIFc0ZShjKXtyZXR1cm4ga2x0KGMpP1U0ZShjKTpVNGUoImRlZmF1bHQiKX1nVCgiY2hlY2tib3giLGZ1''@;'; put 'put ''bmN0aW9uIFNsdChjLGwsYSl7Y29uc3QgZD1sLmNoZWNrZWRUZW1wbGF0ZSxoPWwudW5jaGVja2VkVGVtcGxhdGUse3NvcnRFbXB0eUNlbGxzOmZ9PWE7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7Y29uc3QgRD1VYyh2KSxaPVVjKE0pLHJlPUQ/aDp2LGNlPVo/aDpNLGJlPXJlPT09aHx8cmU9PT1k''@;'; put 'put ''LEVlPWNlPT09aHx8Y2U9PT1kO2lmKCExPT09Zil7aWYoRCYmITE9PT1aKXJldHVybiBHYztpZighMT09PUQmJlopcmV0dXJuIFljfXJldHVybiExPT09YmUmJkVlPyJhc2MiPT09Yz9ZYzpHYzpiZSYmITE9PT1FZT8iYXNjIj09PWM/R2M6WWM6ITE9PT1iZSYmITE9PT1FZT9qNGUoYyxsLGEp''@;'; put 'put ''KHYsTSk6cmU9PT1oJiZjZT09PWQ/ImFzYyI9PT1jP1ljOkdjOnJlPT09ZCYmY2U9PT1oPyJhc2MiPT09Yz9HYzpZYzpqcH19KSxnVCgiZGF0ZSIsZnVuY3Rpb24geGx0KGMsbCxhKXtyZXR1cm4gcTRlKGMsbC5kYXRlRm9ybWF0LGEpfSksZ1QoImRlZmF1bHQiLGo0ZSksZ1QoIm51bWVyaWMi''@;'; put 'put ''LGZ1bmN0aW9uIHdsdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1wYXJzZUZsb2F0KGQpLHY9cGFyc2VGbG9hdChoKSx7c29ydEVtcHR5Q2VsbHM6TX09YTtpZihmPT09dnx8aXNOYU4oZikmJmlzTmFOKHYpKXJldHVybiBqcDtpZihNKXtpZihVYyhkKSlyZXR1cm4iYXNj''@;'; put 'put ''Ij09PWM/WWM6R2M7aWYoVWMoaCkpcmV0dXJuImFzYyI9PT1jP0djOlljfXJldHVybiBpc05hTihmKT9HYzppc05hTih2KT9ZYzpmPHY/ImFzYyI9PT1jP1ljOkdjOmY+dj8iYXNjIj09PWM/R2M6WWM6anB9fSksZ1QoInRpbWUiLGZ1bmN0aW9uIFRsdChjLGwsYSl7cmV0dXJuIHE0ZShjLGwu''@;'; put 'put ''dGltZUZvcm1hdCxhKX0pO2NvbnN0IGpwPTAsWWM9LTEsR2M9MSxuRj0iYXNjIixyRj0iZGVzYyIsWTRlPSJjb2xIZWFkZXIiO2Z1bmN0aW9uIEc0ZShjKXtpZihjIT09ckYpcmV0dXJuIGM9PT1uRj9yRjpuRn1mdW5jdGlvbiAkNGUoYyl7cmV0dXJuIGMucXVlcnlTZWxlY3RvcihgLiR7WTRl''@;'; put 'put ''fWApfWZ1bmN0aW9uIEs0ZShjLGwpe2lmKGM8MHx8IWwucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7cmV0dXJuIEFycmF5LmZyb20oYSkuaW5kZXhPZihsLnBhcmVudE5vZGUpLWEubGVuZ3RoPT0tMX1mdW5jdGlvbiB2Sihj''@;'; put 'put ''LGwsYSl7cmV0dXJuLTE9PT1jJiZsPj0wJiYhMT09PUhtKGEpfWZ1bmN0aW9uIHE0ZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4ganA7aWYoVWMoZCkpcmV0dXJuIFVjKGgpP2pwOmYmJiJhc2MiPT09Yz9ZYzpH''@;'; put 'put ''YztpZihVYyhoKSlyZXR1cm4gZiYmImFzYyI9PT1jP0djOlljO2NvbnN0IHY9T28oZCxsKSxNPU9vKGgsbCk7cmV0dXJuIHYuaXNWYWxpZCgpP00uaXNWYWxpZCgpP00uaXNBZnRlcih2KT8iYXNjIj09PWM/WWM6R2M6TS5pc0JlZm9yZSh2KT8iYXNjIj09PWM/R2M6WWM6anA6WWM6R2N9fWNv''@;'; put 'put ''bnN0IFg0ZT0iaW5kaWNhdG9yRGlzYWJsZWQiLEo0ZT0iY29sdW1uU29ydGluZyIsUTRlPSJzb3J0QWN0aW9uIixlNWU9bmV3IE1hcChbW25GLCJhc2NlbmRpbmciXSxbckYsImRlc2NlbmRpbmciXV0pO2Z1bmN0aW9uIGlGKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB6bHQoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gVWx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBXXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgYUY9ImNvbHVtblNvcnRpbmciLG9GPSJhcHBlbmQiLHQ1ZT1hRjtaNGUoYUYsZnVuY3Rpb24gVmx0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4u''@;'; put 'put ''LmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbihNKXtjb25zdCBEPWNbMF0sWj1sWzBdLHJlPWhbMF0sY2U9ZlswXSxiZT1aLmNvbHVtblNvcnRpbmc7cmV0dXJuKGJlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/YmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpXNGUoWi50eXBlKSkoRCxa''@;'; put 'put ''LGJlKShyZSxjZSl9KCl9fSksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblNvcnQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Tb3J0Iik7Y29uc3QgbVQ9bmV3IFdlYWtNYXA7dmFyIGY5PW5ldyBXZWFrU2V0O2NsYXNzIG41ZSBleHRl''@;'; put 'put ''bmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBCbHQoYyxsKXsoZnVuY3Rpb24gamx0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh''@;'; put 'put ''biBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZjkpLGlGKHRoaXMsImNvbHVtblN0YXRlc01hbmFnZXIiLG51bGwpLGlGKHRoaXMsImNvbHVtbk1ldGFDYWNoZSIsbnVsbCksaUYodGhpcywicGx1Z2luS2V5IixhRiksaUYodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2FjaGUiLG51bGwp''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBhRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYobVQu''@;'; put 'put ''aGFzKHRoaXMuaG90KSYmbVQuZ2V0KHRoaXMuaG90KSE9PXRoaXMucGx1Z2luS2V5KXJldHVybiB0aGlzLmhvdC51cGRhdGVTZXR0aW5ncyh7W3RoaXMucGx1Z2luS2V5XTohMX0pLHZvaWQgZnVuY3Rpb24gT2x0KGMsbCl7aWwoZ2xgUGx1Z2lucyBcYGNvbHVtblNvcnRpbmdcYCBhbmQgXGBt''@;'; put 'put ''dWx0aUNvbHVtblNvcnRpbmdcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXHgyMAogICAgT25seSBcYCR7Y31cYCB3aWxsIHdvcmsuIFRoZSBcYCR7bH1cYCBwbHVnaW4gd2lsbCByZW1haW4gZGlzYWJsZWQuYCl9KG1ULmdldCh0aGlzLmhvdCksdGhpcy5wbHVnaW5L''@;'; put 'put ''ZXkpO3RoaXMuZW5hYmxlZHx8KG1ULnNldCh0aGlzLmhvdCx0aGlzLnBsdWdpbktleSksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW5ldyBfbHQodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1uZXcgWm0oYT0+e2xldCBk''@;'; put 'put ''PXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSksdGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCx0aGlzLmNvbHVt''@;'; put 'put ''bk1ldGFDYWNoZSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PldfKGY5LHRoaXMsWWx0KS5jYWxsKHRoaXMsYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcg''@;'; put 'put ''QXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFdfKGY5LGwsJGx0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIiwoYSxkKT0+dGhpcy5vbkFmdGVyT25DZWxsTW91c2VEb3duKGEsZCkpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJJbml0IiwoKT0+V18oZjksdGhpcyxiSikuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBXXyhm''@;'; put 'put ''OSxsLEdsdCkuY2FsbChsLC4uLmQpfSksdGhpcy5ob3QudmlldyYmV18oZjksdGhpcyxiSikuY2FsbCh0aGlzKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtjb25zdCBsPShhLGQpPT57Y29uc3QgaD0kNGUoZCk7ITE9PT1L''@;'; put 'put ''NGUoYSxkKXx8bnVsbD09PWh8fHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhoKX07bVQuZGVsZXRlKHRoaXMuaG90KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1v''@;'; put 'put ''dmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUu''@;'; put 'put ''Z2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbCl9LCEwKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5j''@;'; put 'put ''b2x1bW5NZXRhYCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0''@;'; put 'put ''Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiB0aGlzLnNv''@;'; put 'put ''cnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwuY29sKSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShh''@;'; put 'put ''PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmLTE9PT1kLnJvdyYmZC5jb2w+PTB9LHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIixn''@;'; put 'put ''cm91cDp0NWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAodDVlKX1zb3J0KGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0Q29uZmlnKCksZD10aGlzLmdldE5vcm1hbGl6''@;'; put 'put ''ZWRTb3J0Q29uZmlncyhsKSxoPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhkKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Tb3J0IixhLGQsaCkmJigwPT09YS5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5pbmRleGVzU2VxdWVu''@;'; put 'put ''Y2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgVDNlKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZhbHVlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSkpLGgmJih0aGlzLmNvbHVt''@;'; put 'put ''blN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNvcnRCeVByZXNldFNvcnRTdGF0ZXMoZCksdGhpcy5zYXZlQWxsU29ydFNldHRpbmdzKGQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0IixhLGg/ZDphLGgpLGgmJnRoaXMuaG90LnJlbmRlcigpKX1jbGVh''@;'; put 'put ''clNvcnQoKXt0aGlzLnNvcnQoW10pfWlzU29ydGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIFBhKGwpP3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5n''@;'; put 'put ''ZXRDb2x1bW5Tb3J0U3RhdGUobCk6dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRTdGF0ZXMoKX1zZXRTb3J0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCk7dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGEpJiZ0aGlzLmNvbHVtblN0YXRl''@;'; put 'put ''c01hbmFnZXIuc2V0U29ydFN0YXRlcyhhKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgwLDEpOltsXX1hcmVWYWxp''@;'; put 'put ''ZFNvcnRDb25maWdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuIGZ1bmN0aW9uIExsdChjKXtpZihjLnNvbWUoYT0+ITE9PT1mdW5jdGlvbiBSbHQoYyl7aWYoITE9PT1xbyhjKSlyZXR1cm4hMTtjb25zdHtjb2x1bW46bCxzb3J0T3JkZXI6YX09YztyZXR1cm4gTnVt''@;'; put 'put ''YmVyLmlzSW50ZWdlcihsKSYmW25GLHJGXS5pbmNsdWRlcyhhKX0oYSkpKXJldHVybiExO2NvbnN0IGw9Yy5tYXAoYT0+e2xldHtjb2x1bW46ZH09YTtyZXR1cm4gZH0pO3JldHVybiBuZXcgU2V0KGwpLnNpemU9PT1sLmxlbmd0aH0obCkmJmwuZXZlcnkoZD0+e2xldHtjb2x1bW46aH09ZDty''@;'; put 'put ''ZXR1cm4gaDw9YSYmaD49MH0pfXNhdmVBbGxTb3J0U2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKTthLmluaXRpYWxDb25maWc9eXMobCxoPT57bGV0e2NvbHVtbjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlz''@;'; put 'put ''LmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpLC4uLnZ9fSksdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJjb2x1bW5Tb3J0aW5nIixhKX1nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpe2NvbnN0IGw9e307dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxv''@;'; put 'put ''YWQiLCJjb2x1bW5Tb3J0aW5nIixsKTtjb25zdCBhPWwudmFsdWU7cmV0dXJuIFBhKGEpJiZBcnJheS5pc0FycmF5KGEuaW5pdGlhbENvbmZpZykmJihhLmluaXRpYWxDb25maWc9eXMoYS5pbml0aWFsQ29uZmlnLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMu''@;'; put 'put ''aG90LnRvVmlzdWFsQ29sdW1uKGYpLC4uLnZ9fSkpLGF9Z2V0Q29sdW1uTmV4dENvbmZpZyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihQYShhKSl7Y29uc3QgaD1HNGUoYSk7cmV0dXJuIFBhKGgpP3tjb2x1bW46bCxzb3J0''@;'; put 'put ''T3JkZXI6aH06dm9pZCAwfWNvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmbD49MCYmbDxkKXJldHVybntjb2x1bW46bCxzb3J0T3JkZXI6RzRlKCl9fWdldE5leHRTb3J0Q29uZmlnKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpvRjtjb25zdCBkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCksaD0tMSE9PWQsZj10aGlzLmdldFNvcnRDb25maWcoKSx2PXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsKTtpZihoKXtp''@;'; put 'put ''Zih5Yyh2KSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKV07aWYoYT09PW9GKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpLHZdO2lmKCJyZXBsYWNlIj09PWEpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSx2LC4uLmYuc2xpY2UoZCsxKV19cmV0dXJu''@;'; put 'put ''IFBhKHYpP2YuY29uY2F0KHYpOmZ9Z2V0UGx1Z2luQ29sdW1uQ29uZmlnKGwpe2lmKHFvKGwpKXtjb25zdCBhPWxbdGhpcy5wbHVnaW5LZXldO2lmKHFvKGEpKXJldHVybiBhfXJldHVybnt9fWdldE1lcmdlZFBsdWdpblNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KVt0aGlzLnBsdWdpbktleV0sZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKSxoPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZi5jb2x1bW5zKT9PYmplY3Qu''@;'; put 'put ''YXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNvbHVtbnNbbF0pKTptbChmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1ucyhsKSkpOk9iamVjdC5hc3NpZ24oZCxhKX1nZXRGaXJzdENlbGxTZXR0aW5n''@;'; put 'put ''cyhsKXtjb25zdCBhPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCksZD1PYmplY3QuY3JlYXRlKGEpO3JldHVybiBkW3RoaXMucGx1Z2luS2V5XT10aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZH1nZXROdW1iZXJPZlJv''@;'; put 'put ''d3NUb1NvcnQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3JldHVybiBhLm1heFJvd3M8PWw/YS5tYXhSb3dzOmwtYS5taW5TcGFyZVJvd3N9c29ydEJ5UHJlc2V0U29ydFN0YXRlcyhsKXtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhp''@;'; put 'put ''cy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksMD09PWwubGVuZ3RoKXJldHVybjtjb25zdCBhPVtdLGQ9dGhpcy5ob3QuY291bnRSb3dzKCksaD1aPT55cyhsLHJlPT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKFoscmUuY29sdW1uKSk7Zm9yKGxldCBaPTA7Wjx0aGlzLmdldE51''@;'; put 'put ''bWJlck9mUm93c1RvU29ydChkKTtaKz0xKWEucHVzaChbdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhaKV0uY29uY2F0KGgoWikpKTtjb25zdCBmPXlzKGEsWj0+WlswXSk7IWZ1bmN0aW9uIElsdChjLGwpe2NvbnN0IGE9RGx0KGwpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy''@;'; put 'put ''cmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtjLnNvcnQoYSguLi5oKSl9KGEsdGhpcy5wbHVnaW5LZXkseXMobCxaPT5aLnNvcnRPcmRlcikseXMobCxaPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKFouY29sdW1uKSkpO2ZvcihsZXQgWj1hLmxlbmd0''@;'; put 'put ''aDtaPGQ7Wis9MSlhLnB1c2goW1pdLmNvbmNhdChoKFopKSk7Y29uc3Qgdj15cyhhLFo9PlpbMF0pLE09bmV3IE1hcCh5cyhmLChaLHJlKT0+W1osdltyZV1dKSksRD15cyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxaPT5NLmhhcyhaKT9NLmdldChaKTpa''@;'; put 'put ''KTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoRCl9c29ydEJ5U2V0dGluZ3MobCl7aWYocW8obCkpe3RoaXMuY29sdW1uU3RhdGVzTWFuYWdlci51cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKTtjb25zdCBhPWwuaW5pdGlhbENvbmZpZzsoQXJyYXkuaXNB''@;'; put 'put ''cnJheShhKXx8cW8oYSkpJiZ0aGlzLnNvcnQoYSl9ZWxzZSB0aGlzLmhvdC5yZW5kZXIoKX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2lmKGxvKGwsZnVuY3Rpb24gTmx0KCl7cmV0dXJuIEFycmF5LmZyb20oZTVlLnZhbHVlcygpKS5jb25jYXQoUTRlLFg0ZSxKNGUpfSgpKSwhMSE9PXRoaXMu''@;'; put 'put ''ZW5hYmxlZCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO1RpKGwsZnVuY3Rpb24gSGx0KGMsbCxhLGQpe2NvbnN0IGg9W0o0ZV07aWYoZCYmaC5wdXNoKFE0ZSksITE9PT1hKXJldHVybiBo''@;'; put 'put ''LnB1c2goWDRlKSxoO2NvbnN0IGY9Yy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtyZXR1cm4gUGEoZikmJmgucHVzaChlNWUuZ2V0KGYpKSxofSguLi5kKSl9fW9uVXBkYXRlU2V0dGluZ3MobCl7c3VwZXIub25VcGRhdGVTZXR0aW5ncyhsKSxudWxsIT09dGhpcy5jb2x1bW5NZXRhQ2FjaGUm''@;'; put 'put ''JnRoaXMuY29sdW1uTWV0YUNhY2hlLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLFBhKGxbdGhpcy5wbHVnaW5LZXldKSYmdGhpcy5zb3J0QnlTZXR0aW5ncyhsW3RoaXMucGx1Z2luS2V5XSl9d2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChs''@;'; put 'put ''LGEpe3JldHVybiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGEpW3RoaXMucGx1Z2luS2V5XS5oZWFkZXJBY3Rpb24mJnBvKGwudGFyZ2V0LFk0ZSl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpe2lmKCExIT09dkooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVy''@;'; put 'put ''Q2xpY2tlZChsLGEuY29sKSl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYodGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCkpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCksaD10aGlzLmdl''@;'; put 'put ''dENvbHVtbk5leHRDb25maWcoYS5jb2wpO251bGwhPWQmJmQuaXNPcGVuZWQoKSYmdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcihkLnJvdyxkLmNvbCk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIiwoKT0+e3RoaXMuc29ydChoKX0pOnRoaXMuc29ydChoKX19ZGVz''@;'; put 'put ''dHJveSgpe3ZhciBsO251bGw9PT0obD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGJKKCl7Y29uc3QgYz10aGlzLmdldEFsbFNhdmVkU29ydFNldHRpbmdzKCk7aWYocW8oYykpdGhpcy5zb3J0QnlT''@;'; put 'put ''ZXR0aW5ncyhjKTtlbHNle2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlTZXR0aW5ncyhsKX19ZnVuY3Rpb24gWWx0KGMsbCl7Y29uc3QgYT0kNGUobCk7aWYoITE9PT1LNGUoYyxsKXx8bnVsbD09PWEpcmV0dXJuO2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5nZXRGaXJzdENlbGxTZXR0aW5ncyhjKVt0aGlzLnBsdWdpbktleV07aWYodGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGEsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLGMsZC5pbmRpY2F0b3IsZC5oZWFkZXJBY3Rpb24pLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0''@;'; put 'put ''IHY9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKGMpO3ZvKGwsLi4uKGM9PlsiYXJpYS1zb3J0IixjXSkodj9gJHt2fWVuZGluZ2A6Im5vbmUiKSl9fWZ1bmN0aW9uIEdsdChjKXshMD09PWMmJnRoaXMuaG90LnZpZXcmJldfKGY5LHRoaXMsYkopLmNhbGwo''@;'; put 'put ''dGhpcyl9ZnVuY3Rpb24gJGx0KGMsbCxhLGQpeyExIT09dkoobC5yb3csbC5jb2wsYykmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChjLGwuY29sKSYmdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYoZC5jb2x1bW49ITApfWZ1bmN0aW9uIHA5''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLbHQoYyl7dmFyIGw9ZnVuY3Rpb24gcWx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBKbHQ9Y2xhc3MgWGx0e2NvbnN0cnVjdG9yKGwsYSl7cDkodGhpcywicGx1Z2lu''@;'; put 'put ''Iix2b2lkIDApLHA5KHRoaXMsImhvdCIsdm9pZCAwKSxwOSh0aGlzLCJlbmRwb2ludHMiLFtdKSxwOSh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxwOSh0aGlzLCJzZXR0aW5nc1R5cGUiLCJhcnJheSIpLHA5KHRoaXMsImN1cnJlbnRFbmRwb2ludCIsbnVsbCkscDkodGhpcywiY2VsbHNUb1Nl''@;'; put 'put ''dENhY2hlIixbXSksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD10aGlzLnBsdWdpbi5ob3QsdGhpcy5zZXR0aW5ncz1hfWluaXRFbmRwb2ludHMoKXt0aGlzLmVuZHBvaW50cz10aGlzLnBhcnNlU2V0dGluZ3MoKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1nZXRFbmRwb2ludChsKXtyZXR1''@;'; put 'put ''cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlzc2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKVtsXTp0aGlzLmVuZHBvaW50c1tsXX1nZXRBbGxFbmRwb2ludHMoKXtyZXR1cm4iZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGU/dGhpcy5maWxsTWlz''@;'; put 'put ''c2luZ0VuZHBvaW50RGF0YSh0aGlzLnNldHRpbmdzKTp0aGlzLmVuZHBvaW50c31maWxsTWlzc2luZ0VuZHBvaW50RGF0YShsKXtyZXR1cm4gdGhpcy5wYXJzZVNldHRpbmdzKGwuY2FsbCh0aGlzKSl9cGFyc2VTZXR0aW5ncyhsKXtjb25zdCBhPVtdO2xldCBkPWw7aWYoZHx8ImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIHRoaXMuc2V0dGluZ3MpcmV0dXJuIGR8fChkPXRoaXMuc2V0dGluZ3MpLFluKGQsaD0+e2NvbnN0IGY9e307dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmFuZ2VzIixbWzAsdGhpcy5ob3QuY291bnRSb3dzKCktMV1dKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZXZlcnNl''@;'; put 'put ''ZFJvd0Nvb3JkcyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uUm93IixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVy''@;'; put 'put ''bHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Db2x1bW4iLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5hdGlvbiBjb2x1bW4gZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBw''@;'; put 'put ''cm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJzb3VyY2VDb2x1bW4iLGguZGVzdGluYXRpb25Db2x1bW4pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInR5cGUiLCJzdW0iKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJmb3JjZU51bWVyaWMiLCExKSx0aGlzLmFz''@;'; put 'put ''c2lnblNldHRpbmcoaCxmLCJzdXBwcmVzc0RhdGFUeXBlRXJyb3JzIiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiY3VzdG9tRnVuY3Rpb24iLG51bGwpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJlYWRPbmx5IiwhMCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicm91bmRGbG9hdCIs''@;'; put 'put ''ITEpLGEucHVzaChmKX0pLGE7dGhpcy5zZXR0aW5nc1R5cGU9ImZ1bmN0aW9uIn1hc3NpZ25TZXR0aW5nKGwsYSxkLGgpe2lmKCJyYW5nZXMiIT09ZHx8dm9pZCAwIT09bFtkXSl7aWYoInJhbmdlcyIhPT1kfHwwIT09bFtkXS5sZW5ndGgpaWYodm9pZCAwPT09bFtkXSl7aWYoaCBpbnN0YW5j''@;'; put 'put ''ZW9mIEVycm9yKXRocm93IGg7YVtkXT1ofWVsc2UgYVtkXT0iZGVzdGluYXRpb25Sb3ciPT09ZCYmYS5yZXZlcnNlZFJvd0Nvb3Jkcz90aGlzLmhvdC5jb3VudFJvd3MoKS1sW2RdLTE6bFtkXX1lbHNlIGFbZF09aH1yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIiE9PXRoaXMuc2V0dGluZ3NUeXBlKXJldHVybjtjb25zdCBoPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsZj10aGlzLmdldEFsbEVuZHBvaW50cygpO1luKGYsdj0+eyJyb3ciPT09aCYmdi5kZXN0aW5hdGlvblJvdz49YSYmKCJpbnNlcnRfcm93Ij09PWw/''@;'; put 'put ''di5hbHRlclJvd09mZnNldD1kOiJyZW1vdmVfcm93Ij09PWwmJih2LmFsdGVyUm93T2Zmc2V0PS0xKmQpKSwiY29sIj09PWgmJnYuZGVzdGluYXRpb25Db2x1bW4+PWEmJigiaW5zZXJ0X2NvbCI9PT1sP3YuYWx0ZXJDb2x1bW5PZmZzZXQ9ZDoicmVtb3ZlX2NvbCI9PT1sJiYodi5hbHRlckNv''@;'; put 'put ''bHVtbk9mZnNldD0tMSpkKSl9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKGYsITEpfXJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQsaCxmKXtsZXQgdj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZSl7Y29uc3QgYmU9KCk9Pih0aGlzLmhvdC5yZW1vdmVIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixiZSksdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCkpO3JldHVybiB2b2lkIHRoaXMuaG90LmFkZEhvb2tPbmNlKCJiZWZvcmVWaWV3UmVuZGVy''@;'; put 'put ''IixiZSl9Y29uc3QgTT1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLEQ9bC5pbmRleE9mKCJyZW1vdmUiKT4tMT8tMToxLFo9dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxyZT0wPT09bC5pbmRleE9mKCJtb3ZlX3JvdyIpLGNlPWE7WW4oWixiZT0+eyJyb3ciPT09TSYmYmUuZGVzdGlu''@;'; put 'put ''YXRpb25Sb3c+PWNlJiYoYmUuYWx0ZXJSb3dPZmZzZXQ9RCpkKSwiY29sIj09PU0mJmJlLmRlc3RpbmF0aW9uQ29sdW1uPj1jZSYmKGJlLmFsdGVyQ29sdW1uT2Zmc2V0PUQqZCl9KSx0aGlzLnJlc2V0QWxsRW5kcG9pbnRzKFosIXJlKSxZbihaLHJlP2JlPT57dGhpcy5leHRlbmRFbmRwb2lu''@;'; put 'put ''dFJhbmdlcyhiZSxjZSxoWzBdLGgubGVuZ3RoKSx0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoYmUpLHRoaXMuY2xlYXJPZmZzZXRJbmZvcm1hdGlvbihiZSl9OmJlPT57dGhpcy5zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoYmUsY2UpfSksdiYmdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRz''@;'; put 'put ''KCl9Y2xlYXJPZmZzZXRJbmZvcm1hdGlvbihsKXtsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH1leHRlbmRFbmRwb2ludFJhbmdlcyhsLGEsZCxoKXtZbihsLnJhbmdlcyxmPT57ZlsxXSYmKGE+PWZbMF0mJmE8PWZbMV0/ZD5mWzFdP2ZbMV0rPWg6''@;'; put 'put ''ZDxmWzBdJiYoZlswXS09aCk6ZD49ZlswXSYmZDw9ZlsxXSYmKGZbMV0tPWgsYTw9ZlswXSYmKGZbMF0rPTEsZlsxXSs9MSkpKX0pfXJlY3JlYXRlUGh5c2ljYWxSYW5nZXMobCl7Y29uc3QgZD1bXSxoPVtdO1luKGwucmFuZ2VzLGY9Pntjb25zdCB2PVtdO2lmKGZbMV0pZm9yKGxldCBNPWZb''@;'; put 'put ''MF07TTw9ZlsxXTtNKyspdi5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coTSkpO2Vsc2Ugdi5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZlswXSkpO2gucHVzaCh2KX0pLFluKGgsZj0+e2xldCB2PVtdO1luKGYsKE0sRCk9PnswPT09RD92LnB1c2goTSk6ZltEXSE9PWZbRC0xXSsx''@;'; put 'put ''JiYodi5wdXNoKGZbRC0xXSksZC5wdXNoKHYpLHY9W10sdi5wdXNoKE0pKSxEPT09Zi5sZW5ndGgtMSYmKHYucHVzaChNKSxkLnB1c2godikpfSl9KSxsLnJhbmdlcz1kfXNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhsLGEpe2wuYWx0ZXJSb3dPZmZzZXQmJjAhPT1sLmFsdGVyUm93T2Zmc2V0''@;'; put 'put ''PyhsLmRlc3RpbmF0aW9uUm93Kz1sLmFsdGVyUm93T2Zmc2V0fHwwLFluKGwucmFuZ2VzLGQ9PntZbihkLChoLGYpPT57aD49YSYmKGRbZl0rPWwuYWx0ZXJSb3dPZmZzZXR8fDApfSl9KSk6bC5hbHRlckNvbHVtbk9mZnNldCYmMCE9PWwuYWx0ZXJDb2x1bW5PZmZzZXQmJihsLmRlc3RpbmF0''@;'; put 'put ''aW9uQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwLGwuc291cmNlQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwKX1yZXNldEFsbEVuZHBvaW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFs''@;'; put 'put ''bEVuZHBvaW50cygpLGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtsLnNvbWUoaD0+e2NvbnN0IHY9aC5hbHRlckNvbHVtbk9mZnNldHx8MDtyZXR1cm4gaC5kZXN0aW5hdGlvblJvdysoaC5hbHRlclJvd09mZnNldHx8MCk+PXRo''@;'; put 'put ''aXMuaG90LmNvdW50Um93cygpfHxoLmRlc3RpbmF0aW9uQ29sdW1uK3Y+PXRoaXMuaG90LmNvdW50Q29scygpfSl8fCh0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbihsLGg9Pnt0aGlzLnJlc2V0RW5kcG9pbnRWYWx1ZShoLGEpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxz''@;'; put 'put ''VG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdKX1yZWZyZXNoQWxsRW5kcG9pbnRzKCl7dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSxsPT57dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBs''@;'; put 'put ''dWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwsImluaXQiKX0pLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hl''@;'; put 'put ''PVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGwpe2NvbnN0IGE9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4obCwoZCxoLGYpPT57YCR7ZFsyXXx8IiJ9YCE9YCR7ZFszXX1gJiZZbih0aGlzLmdldEFsbEVuZHBvaW50cygpLCh2LE0pPT57dGhpcy5ob3QucHJvcFRvQ29sKGZbaF1b''@;'; put 'put ''MV0pPT09di5zb3VyY2VDb2x1bW4mJi0xPT09YS5pbmRleE9mKE0pJiZhLnB1c2goTSl9KX0pLFluKGEsZD0+e3RoaXMucmVmcmVzaEVuZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQoZCkpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFy''@;'; put 'put ''eS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDZWxsTWV0YXMoKXt0aGlzLmVuZHBvaW50cy5mb3JFYWNoKGw9Pntjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1hKXtjb25zdCBkPXRoaXMuaG90LmdldENlbGxN''@;'; put 'put ''ZXRhKGEsbC5kZXN0aW5hdGlvbkNvbHVtbik7ZC5yZWFkT25seT1sLnJlYWRPbmx5LGQuY2xhc3NOYW1lPSJjb2x1bW5TdW1tYXJ5UmVzdWx0In19KX1yZWZyZXNoRW5kcG9pbnQobCl7dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRw''@;'; put 'put ''b2ludFZhbHVlKGwpLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9cmVzZXRFbmRwb2ludFZhbHVlKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07Y29uc3QgaD1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3RoaXMuY2Vs''@;'; put 'put ''bHNUb1NldENhY2hlLnB1c2goW3RoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3crKGEmJmwuYWx0ZXJSb3dPZmZzZXR8fDApKSx0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsLmRlc3RpbmF0aW9uQ29sdW1uKyhhP2g6MCkpLCIiXSl9c2V0RW5kcG9pbnRWYWx1ZShsLGEpe2xl''@;'; put 'put ''dCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihsLmRlc3RpbmF0aW9uUm93Pj10aGlzLmhvdC5jb3VudFJvd3MoKXx8bC5kZXN0aW5hdGlvbkNv''@;'; put 'put ''bHVtbj49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuIHZvaWQgdGhpcy50aHJvd091dE9mQm91bmRzV2FybmluZygpO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWYpe2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixsLmRl''@;'; put 'put ''c3RpbmF0aW9uQ29sdW1uKTsoImluaXQiPT09YXx8di5yZWFkT25seSE9PWwucmVhZE9ubHkpJiYodi5yZWFkT25seT1sLnJlYWRPbmx5LHYuY2xhc3NOYW1lPSJjb2x1bW5TdW1tYXJ5UmVzdWx0Iil9aWYoKCEwPT09bC5yb3VuZEZsb2F0fHxOdW1iZXIuaXNJbnRlZ2VyKGwucm91bmRGbG9h''@;'; put 'put ''dCkpJiYhaXNOYU4obC5yZXN1bHQpKXtjb25zdCB2PWwucm91bmRGbG9hdDtsZXQgTT0wO051bWJlci5pc0ludGVnZXIodikmJihNPU1hdGgubWluKE1hdGgubWF4KDAsdiksMTAwKSksbC5yZXN1bHQ9bC5yZXN1bHQudG9GaXhlZChNKX1kP3RoaXMuaG90LnNldERhdGFBdENlbGwoaCxsLmRl''@;'; put 'put ''c3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0LCJDb2x1bW5TdW1tYXJ5LnNldCIpOnRoaXMuY2VsbHNUb1NldENhY2hlLnB1c2goW2gsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdF0pLGwuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfXRocm93T3V0''@;'; put 'put ''T2ZCb3VuZHNXYXJuaW5nKCl7aWwoIk9uZSBvZiB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2lucycgZGVzdGluYXRpb24gcG9pbnRzIHlvdSBwcm92aWRlZCBpcyBiZXlvbmQgdGhlIHRhYmxlIGJvdW5kYXJpZXMhIil9fTtmdW5jdGlvbiB5SihjKXtyZXR1cm4gbnVsbD09Y3x8aXNOYU4oYyl9''@;'; put 'put ''ZnVuY3Rpb24gc0YoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IF9K''@;'; put 'put ''PSJjb2x1bW5TdW1tYXJ5Ijt2YXIgdlQ9bmV3IFdlYWtTZXQ7Y2xhc3MgYWN0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFFsdChjLGwpeyhmdW5jdGlvbiBlY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyx2VCksZnVuY3Rpb24gdGN0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuY3QoYyl7dmFyIGw9ZnVuY3Rpb24gcmN0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZW5kcG9pbnRzIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gX0p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjIwfWlzRW5hYmxlZCgpe3JldHVybiEh''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfSl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldHRpbmdzPXRoaXMuaG90LmdldFNldHRpbmdzKClbX0pdLHRoaXMuZW5kcG9pbnRzPW5ldyBKbHQodGhpcyx0aGlzLnNldHRpbmdzKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YodlQsbCxvY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHNGKHZULGwsbGN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHNGKHZULGwsc2N0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJl''@;'; put 'put ''Zm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgp''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVy''@;'; put 'put ''YXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0''@;'; put 'put ''U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgp''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3Zl''@;'; put 'put ''Q29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBzRih2VCxsLGNjdCkuY2FsbChsLC4uLmQpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCkp''@;'; put 'put ''fWRpc2FibGVQbHVnaW4oKXt0aGlzLmVuZHBvaW50cz1udWxsLHRoaXMuc2V0dGluZ3M9bnVsbCx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMu''@;'; put 'put ''ZW5kcG9pbnRzLmluaXRFbmRwb2ludHMoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1jYWxjdWxhdGUobCl7c3dpdGNoKGwudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInN1bSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVTdW0obCk7YnJlYWs7Y2FzZSJtaW4iOmNhc2UibWF4IjpsLnJlc3VsdD10''@;'; put 'put ''aGlzLmNhbGN1bGF0ZU1pbk1heChsLGwudHlwZSk7YnJlYWs7Y2FzZSJjb3VudCI6bC5yZXN1bHQ9dGhpcy5jb3VudEVudHJpZXMobCk7YnJlYWs7Y2FzZSJhdmVyYWdlIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZUF2ZXJhZ2UobCk7YnJlYWs7Y2FzZSJjdXN0b20iOmwucmVzdWx0PWwuY3Vz''@;'; put 'put ''dG9tRnVuY3Rpb24uY2FsbCh0aGlzLGwpfX1jYWxjdWxhdGVTdW0obCl7bGV0IGE9MDtyZXR1cm4gWG8obC5yYW5nZXMsZD0+e2ErPXRoaXMuZ2V0UGFydGlhbFN1bShkLGwuc291cmNlQ29sdW1uKX0pLGF9Z2V0UGFydGlhbFN1bShsLGEpe2xldCBkPTAsaD1sWzFdfHxsWzBdLGY9bnVsbCx2''@;'; put 'put ''PTA7ZG97aWYoZj10aGlzLmdldENlbGxWYWx1ZShoLGEpLGY9eUooZik/bnVsbDpmLG51bGwhPT1mKXtjb25zdCBNPShgJHtmfWAuc3BsaXQoIi4iKVsxXXx8W10pLmxlbmd0aHx8MTtNPnYmJih2PU0pfWQrPWZ8fDAsaC09MX13aGlsZShoPj1sWzBdKTtyZXR1cm4gTWF0aC5yb3VuZChkKjEw''@;'; put 'put ''Kip2KS8xMCoqdn1jYWxjdWxhdGVNaW5NYXgobCxhKXtsZXQgZD1udWxsO3JldHVybiBYbyhsLnJhbmdlcyxoPT57Y29uc3QgZj10aGlzLmdldFBhcnRpYWxNaW5NYXgoaCxsLnNvdXJjZUNvbHVtbixhKTtpZihudWxsPT09ZCYmbnVsbCE9PWYmJihkPWYpLG51bGwhPT1mKXN3aXRjaChhKXtj''@;'; put 'put ''YXNlIm1pbiI6ZD1NYXRoLm1pbihkLGYpO2JyZWFrO2Nhc2UibWF4IjpkPU1hdGgubWF4KGQsZil9fSksbnVsbD09PWQ/Ik5vdCBlbm91Z2ggZGF0YSI6ZH1nZXRQYXJ0aWFsTWluTWF4KGwsYSxkKXtsZXQgdixoPW51bGwsZj1sWzFdfHxsWzBdO2Rve2lmKHY9dGhpcy5nZXRDZWxsVmFsdWUo''@;'; put 'put ''ZixhKSx2PXlKKHYpP251bGw6dixudWxsPT09aCloPXY7ZWxzZSBpZihudWxsIT09dilzd2l0Y2goZCl7Y2FzZSJtaW4iOmg9TWF0aC5taW4oaCx2KTticmVhaztjYXNlIm1heCI6aD1NYXRoLm1heChoLHYpfWYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbXB0eShsLGEpe2xl''@;'; put 'put ''dCBkLGg9MCxmPWxbMV18fGxbMF07ZG97ZD10aGlzLmdldENlbGxWYWx1ZShmLGEpLGQ9eUooZCk/bnVsbDpkLG51bGw9PT1kJiYoaCs9MSksZi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVudHJpZXMobCl7bGV0IGE9MDtyZXR1cm4gWG8obC5yYW5nZXMsaD0+e2NvbnN0IGY9''@;'; put 'put ''dm9pZCAwPT09aFsxXT8xOmhbMV0taFswXSsxLHY9dGhpcy5jb3VudEVtcHR5KGgsbC5zb3VyY2VDb2x1bW4pO2ErPWYsYS09dn0pLGF9Y2FsY3VsYXRlQXZlcmFnZShsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGVTdW0obCkvdGhpcy5jb3VudEVudHJpZXMobCl9Z2V0Q2VsbFZhbHVlKGwsYSl7''@;'; put 'put ''Y29uc3QgZD10aGlzLmhvdC50b1Zpc3VhbFJvdyhsKSxoPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO2xldCBmPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwobCxhKSx2PSIiO2lmKG51bGwhPT1kJiZudWxsIT09aCYmKHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05h''@;'; put 'put ''bWV8fCIiKSx2LmluZGV4T2YoImNvbHVtblN1bW1hcnlSZXN1bHQiKT4tMSlyZXR1cm4gbnVsbDtpZih0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuZm9yY2VOdW1lcmljJiYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mLnJlcGxhY2UoLywvLCIuIikpLGY9cGFyc2VGbG9hdChmKSks''@;'; put 'put ''aXNOYU4oZikmJiF0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuc3VwcHJlc3NEYXRhVHlwZUVycm9ycyl0aHJvdyBuZXcgRXJyb3IoZ2xgQ29sdW1uU3VtbWFyeSBwbHVnaW46IGNlbGwgYXQgKCR7bH0sICR7YX0pIGlzIG5vdCBpbiBhXHgyMAogICAgICAgICAgbnVtZXJpYyBmb3Jt''@;'; put 'put ''YXQuIENhbm5vdCBkbyB0aGUgY2FsY3VsYXRpb24uYCk7cmV0dXJuIGZ9fWZ1bmN0aW9uIG9jdCgpe3RoaXMuZW5kcG9pbnRzLmluaXRFbmRwb2ludHMoKX1mdW5jdGlvbiBzY3QoYyl7dm9pZCAwIT09Yy5jb2x1bW5zJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2VsbE1ldGFzKCl9ZnVuY3Rp''@;'; put 'put ''b24gbGN0KGMsbCl7YyYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09bCYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWwmJiJsb2FkRGF0YSIhPT1sJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyhjKX1mdW5jdGlvbiBjY3QoYyxsKXt0aGlzLmVuZHBvaW50cy5yZXNldFNl''@;'; put 'put ''dHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGNbMF0sYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpLHRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixsLGMubGVuZ3RoLGMsdGhpcy5wbHVnaW5OYW1lKX1m''@;'; put 'put ''dW5jdGlvbiB3SihjLGwsYSl7cjVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiByNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFlf''@;'; put 'put ''KGMsbCl7cmV0dXJuIGMuZ2V0KFNKKGMsbCkpfWZ1bmN0aW9uIENKKGMsbCxhKXtyZXR1cm4gYy5zZXQoU0ooYyxsKSxhKSxhfWZ1bmN0aW9uIFNKKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbEY9bmV3IFdlYWtNYXAsY0Y9bmV3IFdlYWtNYXAsdUY9bmV3IFdlYWtNYXAsaTVlPW5ldyBXZWFrU2V0O2NsYXNzIGE1ZXtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiB1''@;'; put 'put ''Y3QoYyxsKXtyNWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsaTVlKSx3Sih0aGlzLGxGLCEwKSx3Sih0aGlzLGNGLG51bGwpLHdKKHRoaXMsdUYsbmV3IFJlc2l6ZU9ic2VydmVyKGw9PlNKKGk1ZSx0aGlzLGRjdCkuY2FsbCh0aGlzLGwpKSl9c2V0T2JzZXJ2ZWRFbGVtZW50KGwpe0NKKGNGLHRo''@;'; put 'put ''aXMsbCl9dW5vYnNlcnZlKCl7WV8odUYsdGhpcykudW5vYnNlcnZlKFlfKGNGLHRoaXMpKX1vYnNlcnZlKCl7Q0oobEYsdGhpcywhMCksWV8odUYsdGhpcykub2JzZXJ2ZShZXyhjRix0aGlzKSl9ZGVzdHJveSgpe1lfKHVGLHRoaXMpLmRpc2Nvbm5lY3QoKX19ZnVuY3Rpb24gZGN0KGMpeyFZ''@;'; put 'put ''XyhsRix0aGlzKSYmQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGg/Yy5mb3JFYWNoKGw9PntsZXR7Ym9yZGVyQm94U2l6ZTphfT1sO2NvbnN0e2lubGluZVNpemU6ZCxibG9ja1NpemU6aH09YVswXTt0aGlzLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsZCxoKX0pOkNKKGxGLHRoaXMsITEpfWZ1''@;'; put 'put ''bmN0aW9uIGc5KGMsbCxhKXsoZnVuY3Rpb24gaGN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBObChj''@;'; put 'put ''LGwpe3JldHVybiBjLmdldChvNWUoYyxsKSl9ZnVuY3Rpb24gUjUoYyxsLGEpe3JldHVybiBjLnNldChvNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIG81ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwoYTVlLHkxKTt2YXIgbTk9bmV3IFdlYWtNYXAsTUo9bmV3IFdlYWtNYXAsTDU9bmV3IFdlYWtNYXAscW09bmV3IFdlYWtNYXAsWG09bmV3IFdlYWtNYXAsZEY9bmV3IFdl''@;'; put 'put ''YWtNYXAsR189bmV3IFdlYWtNYXA7Y2xhc3Mgdjl7c3RhdGljIGdldCBDTEFTU19FRElUT1JfQ09OVEFJTkVSKCl7cmV0dXJuImh0Q29tbWVudHNDb250YWluZXIifXN0YXRpYyBnZXQgQ0xBU1NfRURJVE9SKCl7cmV0dXJuImh0Q29tbWVudHMifXN0YXRpYyBnZXQgQ0xBU1NfSU5QVVQoKXty''@;'; put 'put ''ZXR1cm4iaHRDb21tZW50VGV4dEFyZWEifXN0YXRpYyBnZXQgQ0xBU1NfQ0VMTCgpe3JldHVybiJodENvbW1lbnRDZWxsIn1jb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7ZzkodGhpcyxtOSx2b2lkIDApLGc5KHRoaXMsTUosITEpLGc5KHRoaXMsTDUsbnVsbCksZzkodGhpcyxxbSx2b2lk''@;'; put 'put ''IDApLGc5KHRoaXMsWG0sdm9pZCAwKSxnOSh0aGlzLGRGLCEwKSxnOSh0aGlzLEdfLG5ldyBhNWUpLFI1KG05LHRoaXMsbCksUjUoTUosdGhpcyxhKSxSNShxbSx0aGlzLHRoaXMuY3JlYXRlRWRpdG9yKCkpLFI1KFhtLHRoaXMsTmwocW0sdGhpcykuc3R5bGUpLE5sKEdfLHRoaXMpLnNldE9i''@;'; put 'put ''c2VydmVkRWxlbWVudCh0aGlzLmdldElucHV0RWxlbWVudCgpKSxObChHXyx0aGlzKS5hZGRMb2NhbEhvb2soInJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJyZXNpemUiLC4uLmYpfSksdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXtObChYbSx0aGlzKS5sZWZ0PWAke2x9cHhgLE5sKFhtLHRoaXMpLnRvcD1gJHthfXB4YH1zZXRTaXplKGwsYSl7aWYobCYmYSl7Y29uc3QgZD10aGlzLmdldElucHV0RWxlbWVudCgpO2Qu''@;'; put 'put ''c3R5bGUud2lkdGg9YCR7bH1weGAsZC5zdHlsZS5oZWlnaHQ9YCR7YX1weGB9fWdldFNpemUoKXtyZXR1cm57d2lkdGg6c3UodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSksaGVpZ2h0Ok11KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpfX1vYnNlcnZlU2l6ZSgpe05sKEdfLHRoaXMpLm9ic2VydmUo''@;'; put 'put ''KX1yZXNldFNpemUoKXtjb25zdCBsPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7bC5zdHlsZS53aWR0aD0iIixsLnN0eWxlLmhlaWdodD0iIn1zZXRSZWFkT25seVN0YXRlKGwpe3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkucmVhZE9ubHk9bH1zaG93KCl7TmwoWG0sdGhpcykuZGlzcGxheT0iYmxv''@;'; put 'put ''Y2siLFI1KGRGLHRoaXMsITEpfWhpZGUoKXtObChHXyx0aGlzKS51bm9ic2VydmUoKSxObChkRix0aGlzKXx8KE5sKFhtLHRoaXMpLmRpc3BsYXk9Im5vbmUiKSxSNShkRix0aGlzLCEwKX1pc1Zpc2libGUoKXtyZXR1cm4iYmxvY2siPT09TmwoWG0sdGhpcykuZGlzcGxheX1zZXRWYWx1ZSgp''@;'; put 'put ''e2NvbnN0IGE9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIil8fCIiO3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWU9YX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlfWlzRm9jdXNlZCgpe3Jl''@;'; put 'put ''dHVybiBObChtOSx0aGlzKS5hY3RpdmVFbGVtZW50PT09dGhpcy5nZXRJbnB1dEVsZW1lbnQoKX1mb2N1cygpe3RoaXMuZ2V0SW5wdXRFbGVtZW50KCkuZm9jdXMoKX1jcmVhdGVFZGl0b3IoKXtjb25zdCBsPU5sKG05LHRoaXMpLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGE9TmwobTksdGhpcyku''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtyZXR1cm4gbC5zdHlsZS5kaXNwbGF5PSJub25lIixSNShMNSx0aGlzLE5sKG05LHRoaXMpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxObChMNSx0aGlzKS5zZXRBdHRyaWJ1dGUoImRpciIsTmwoTUosdGhpcyk/InJ0bCI6Imx0ciIpLFRpKE5sKEw1''@;'; put 'put ''LHRoaXMpLHY5LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLE5sKG05LHRoaXMpLmJvZHkuYXBwZW5kQ2hpbGQoTmwoTDUsdGhpcykpLFRpKGwsdjkuQ0xBU1NfRURJVE9SKSxUaShhLHY5LkNMQVNTX0lOUFVUKSxhLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSxsLmFwcGVuZENo''@;'; put 'put ''aWxkKGEpLE5sKEw1LHRoaXMpLmFwcGVuZENoaWxkKGwpLGx9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIE5sKHFtLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoYC4ke3Y5LkNMQVNTX0lOUFVUfWApfWdldEVkaXRvckVsZW1lbnQoKXtyZXR1cm4gTmwocW0sdGhpcyl9ZGVzdHJveSgpe2NvbnN0IGw9''@;'; put 'put ''TmwoTDUsdGhpcyk/TmwoTDUsdGhpcykucGFyZW50Tm9kZTpudWxsO05sKHFtLHRoaXMpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoTmwocW0sdGhpcykpLFI1KHFtLHRoaXMsbnVsbCksUjUoWG0sdGhpcyxudWxsKSxObChHXyx0aGlzKS5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZChObChM''@;'; put 'put ''NSx0aGlzKSl9fVRsKHY5LHkxKTtjb25zdCBmY3Q9djk7ZnVuY3Rpb24geEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHBjdChjKXt2YXIgbD1mdW5jdGlvbiBnY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHM1''@;'; put 'put ''ZXtjb25zdHJ1Y3RvcihsKXt4Sih0aGlzLCJ3YXNMYXN0QWN0aW9uU2hvdyIsITApLHhKKHRoaXMsInNob3dEZWJvdW5jZWQiLG51bGwpLHhKKHRoaXMsImhpZGluZ1RpbWVyIixudWxsKSx0aGlzLnVwZGF0ZURlbGF5KGwpfWhpZGUoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSExLHRoaXMu''@;'; put 'put ''aGlkaW5nVGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJoaWRlIil9LDI1MCl9c2hvdyhsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZChsKX1jYW5jZWxIaWRpbmcoKXt0aGlz''@;'; put 'put ''Lndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlzLmhpZGluZ1RpbWVyPW51bGx9dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9U0UoYT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygic2hvdyIs''@;'; put 'put ''YS5mcm9tLnJvdyxhLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fVRsKHM1ZSx5MSk7Y29uc3QgYmN0PXM1ZSxzcz0iLS0tLS0tLS0tIjtmdW5jdGlv''@;'; put 'put ''biBiOShjLGwpe2NvbnN0IGE9e307cmV0dXJuIFluKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18fChhW2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9KX0pLGF9ZnVuY3Rpb24gSm0oYyxsLGEsZCxoKXtZbihjLGY9PntmLmZvckFsbCgodixNKT0+e3Y+PTAmJk0+PTAm''@;'; put 'put ''JmZ1bmN0aW9uIE1jdChjLGwsYSxkLGgsZil7Y29uc3Qgdj1oKGMsbCk7bGV0IE09ZDt2LmNsYXNzTmFtZSYmKE09InZlcnRpY2FsIj09PWE/ZnVuY3Rpb24gQ2N0KGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRk''@;'; put 'put ''bGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKTpmdW5jdGlvbiBTY3QoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5y''@;'; put 'put ''ZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NOYW1lIixNKX0odixNLGwsYSxkLGgpfSl9KX1mdW5jdGlvbiBsNWUoYyl7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxl''@;'; put 'put ''Y3RlZCI+XHUyNzEzPC9zcGFuPiR7Y31gfWZ1bmN0aW9uIGhGKGMsbCl7bGV0IGE9ITE7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJlluKGMsZD0+KGQuZm9yQWxsKChoLGYpPT57aWYoaD49MCYmZj49MCYmbChoLGYpKXJldHVybiBhPSEwLCExfSksYSkpLGF9ZnVuY3Rpb24gZkYoYyxsKXtj''@;'; put 'put ''b25zdCBhPXt0b3A6MCxsZWZ0OjB9O2lmKGwhPT1jLm93bmVyRG9jdW1lbnQpe2NvbnN0e2ZyYW1lRWxlbWVudDpkfT1sLmRlZmF1bHRWaWV3LHt0b3A6aCxsZWZ0OmZ9PWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS50b3A9aCxhLmxlZnQ9Zn1yZXR1cm4gYX1mdW5jdGlvbiAkXyhjLGws''@;'; put 'put ''YSl7YzVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFFtKGMsbCxhKXtyZXR1cm4g''@;'; put 'put ''Yy5zZXQoVWQoYyxsKSxhKSxhfWZ1bmN0aW9uIEpvKGMsbCl7cmV0dXJuIGMuZ2V0KFVkKGMsbCkpfWZ1bmN0aW9uIFVkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBwRj0iY29tbWVudHMiLE81PSJjb21tZW50IixiVD0idmFsdWUiLGdGPSJyZWFkT25seSIseVQ9cEYsRUo9YHBsdWdpbjoke3BGfWA7dmFyIEFsPW5ldyBXZWFrTWFwLHpwPW5ldyBXZWFrTWFw''@;'; put 'put ''LG1GPW5ldyBXZWFrTWFwLHZGPW5ldyBXZWFrTWFwLFRKPW5ldyBXZWFrTWFwLGJGPW5ldyBXZWFrTWFwLE9oPW5ldyBXZWFrU2V0O2NsYXNzIEljdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBFY3QoYyxsKXtjNWUoYyxsKSxsLmFkZChj''@;'; put 'put ''KX0odGhpcyxPaCksZnVuY3Rpb24gVGN0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBBY3QoYyl7dmFyIGw9ZnVuY3Rpb24ga2N0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9''@;'; put 'put ''YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJz''@;'; put 'put ''dHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywicmFuZ2UiLHt9KSwkXyh0aGlzLEFs''@;'; put 'put ''LG51bGwpLCRfKHRoaXMsenAsbnVsbCksJF8odGhpcyxtRiwhMSksJF8odGhpcyx2RiwhMSksJF8odGhpcyxUSixudWxsKSwkXyh0aGlzLGJGLCIiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcEZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNjB9c3RhdGlj''@;'; put 'put ''IGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2Rpc3BsYXlEZWxheToyNTB9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwRl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChKbyhBbCx0aGlzKXx8KFFtKEFsLHRoaXMsbmV3''@;'; put 'put ''IGZjdCh0aGlzLmhvdC5yb290RG9jdW1lbnQsdGhpcy5ob3QuaXNSdGwoKSkpLEpvKEFsLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl''@;'; put 'put ''dHVybiBVZChPaCxsLFZjdCkuY2FsbChsLC4uLmQpfSkpLEpvKHpwLHRoaXMpfHxRbSh6cCx0aGlzLG5ldyBiY3QodGhpcy5nZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhPT50aGlzLmFkZFRvQ29udGV4''@;'; put 'put ''dE1lbnUoYSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGEsZCxoLGYsdixNKT0+VWQoT2gsdGhpcyxGY3QpLmNhbGwodGhpcyxhLE0pKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsIiwoKT0+VWQoT2gsdGhpcyxCY3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJC''@;'; put 'put ''ZWdpbkVkaXRpbmciLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsYT0+VWQoT2gsdGhpcyxkNWUpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IixhPT5VZChPaCx0aGlzLGQ1ZSkuY2FsbCh0aGlz''@;'; put 'put ''LGEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFVkKE9oLGwsamN0KS5jYWxsKGwsLi4uZCl9KSxKbyh6cCx0aGlzKS5h''@;'; put 'put ''ZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksSm8oenAsdGhpcykuYWRkTG9jYWxIb29rKCJzaG93IiwoYSxkKT0+dGhpcy5zaG93QXRDZWxsKGEsZCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2lu''@;'; put 'put ''KCkpfXVwZGF0ZVBsdWdpbigpe0pvKHpwLHRoaXMpLnVwZGF0ZURlbGF5KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5IikpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVn''@;'; put 'put ''aXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLGE9bC5nZXRDb250ZXh0KCJncmlkIiksZD1sLmFkZENvbnRleHQoRUopO2EuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIkFsdCIsIk0iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRo''@;'; put 'put ''aXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7UW0odkYsdGhpcywhMCksdGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgoKT0+e3RoaXMuc2V0UmFuZ2UoaCksdGhpcy5zaG93KCksdGhpcy5mb2N1c0VkaXRvcigpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoRUopLHRoaXMuaG90Ll9y''@;'; put 'put ''ZWdpc3RlclRpbWVvdXQoKCk9PntRbSh2Rix0aGlzLCExKX0pfSl9LHN0b3BQcm9wYWdhdGlvbjohMCxydW5Pbmx5SWY6KCk9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0Nl''@;'; put 'put ''bGwoKX0sZ3JvdXA6eVR9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e0pvKEFsLHRoaXMpLnNldFZhbHVlKEpvKGJGLHRoaXMpKSx0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+Sm8oQWwsdGhp''@;'; put 'put ''cykuaXNWaXNpYmxlKCkmJkpvKEFsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOnlUfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e3RoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25seUlm''@;'; put 'put ''OigpPT5KbyhBbCx0aGlzKS5pc1Zpc2libGUoKSYmSm8oQWwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6eVR9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiVGFiIl0sWyJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpsLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+e0pv''@;'; put 'put ''KEFsLHRoaXMpLnNldFZhbHVlKEpvKEFsLHRoaXMpLmdldFZhbHVlKCkpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0sZ3JvdXA6eVR9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3Jp''@;'; put 'put ''ZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoeVQpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9dGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsZD0+''@;'; put 'put ''VWQoT2gsdGhpcyxPY3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGQ9PlVkKE9oLHRoaXMsUmN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PlVk''@;'; put 'put ''KE9oLHRoaXMsUGN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImZvY3VzIiwoKT0+VWQoT2gsdGhpcyxOY3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiYmx1ciIsKCk9PlVkKE9oLHRoaXMsSGN0''@;'; put 'put ''KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCksIm1vdXNlZG93biIsZD0+VWQoT2gsdGhpcyxMY3QpLmNhbGwodGhpcyxkKSl9c2V0UmFuZ2UobCl7dGhpcy5yYW5nZT1sfWNsZWFyUmFuZ2UoKXt0aGlz''@;'; put 'put ''LnJhbmdlPXt9fXRhcmdldElzQ2VsbFdpdGhDb21tZW50KGwpe2NvbnN0IGE9Um0obC50YXJnZXQsIlREIiwiVEJPRFkiKTtyZXR1cm4hIShhJiZwbyhhLCJodENvbW1lbnRDZWxsIikmJlJtKGEsW3RoaXMuaG90LnJvb3RFbGVtZW50XSkpfXRhcmdldElzQ29tbWVudFRleHRBcmVhKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVu''@;'; put 'put ''dCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT1KbyhBbCx0aGlzKS5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwhPWEmJihkPWEpLHRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtbYlRdOmR9KSx0aGlzLmhv''@;'; put 'put ''dC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNldENvbW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO3RoaXMuaG90LnNldENlbGxN''@;'; put 'put ''ZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCxPNSksbCYmdGhpcy5ob3QucmVuZGVyKCksdGhpcy5oaWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2VsbChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVu''@;'; put 'put ''dHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5yZW1vdmVDb21tZW50KGQpfWdldENvbW1lbnQoKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wsYlQp''@;'; put 'put ''fWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEsYlQpfXNob3coKXt2YXIgbDtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBs''@;'; put 'put ''dWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7ZnJvbTp7cm93OmEsY29sOmR9fT10aGlzLnJhbmdlO2lmKGE8MHx8YT50aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxkPDB8fGQ+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBoPXRoaXMu''@;'; put 'put ''aG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCk7cmV0dXJuIEpvKHpwLHRoaXMpLmNhbmNlbEhpZGluZygpLEpvKEFsLHRoaXMpLnNldFZhbHVlKG51bGwhPT0obD1oW081XT9oW081XVtiVF06bnVsbCkmJnZvaWQgMCE9PWw/bDoiIiksSm8o''@;'; put 'put ''QWwsdGhpcykuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRlKCl7Sm8oQWwsdGhpcykuaGlkZSgpfXJlZnJlc2hF''@;'; put 'put ''ZGl0b3IoKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF18fHRoaXMucmFuZ2UuZnJvbSYmSm8oQWwsdGhpcykuaXNWaXNpYmxlKCkpKXJldHVybjtjb25zdHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PXRo''@;'; put 'put ''aXMuaG90LHtyb3c6aCxjb2w6Zn09dGhpcy5yYW5nZS5mcm9tO2xldCB2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtjb25zdCBEPW51bGw9PT12O0pvKEFsLHRoaXMpLnNldFBvc2l0aW9uKDAsMCksbnVsbD09''@;'; put 'put ''PXYmJih2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKSkpLG51bGw9PT1NJiYoTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwtMSkpKTtjb25zdCBaPW51bGw9''@;'; put 'put ''PT12LHJlPW51bGw9PT1NO3Y9dj8/MCxNPU0/PzA7Y29uc3R7cm9vdFdpbmRvdzpjZSx2aWV3Ontfd3Q6YmV9fT10aGlzLmhvdCx7d3RUYWJsZTpFZX09YmUsQmU9YmUuZ2V0Q2VsbCh7cm93OnYsY29sOk19LCEwKSxxZT10aGlzLmdldENvbW1lbnRNZXRhKGgsZiwic3R5bGUiKTtxZT9KbyhB''@;'; put 'put ''bCx0aGlzKS5zZXRTaXplKHFlLndpZHRoLHFlLmhlaWdodCk6Sm8oQWwsdGhpcykucmVzZXRTaXplKCk7Y29uc3QgcnQ9cmU/MDpFZS5nZXRDb2x1bW5XaWR0aChNKSxwdD1EJiYhWj9NdShCZSk6MCx7bGVmdDpkdCx0b3A6SnQsd2lkdGg6dm4saGVpZ2h0OkNufT1CZS5nZXRCb3VuZGluZ0Ns''@;'; put 'put ''aWVudFJlY3QoKSx7d2lkdGg6dG4saGVpZ2h0Ok1ufT1KbyhBbCx0aGlzKS5nZXRTaXplKCkse2lubmVyV2lkdGg6d3IsaW5uZXJIZWlnaHQ6R3J9PXRoaXMuaG90LnJvb3RXaW5kb3csbXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCxHbj1mMCh0aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnQpLGFpPU0kKHRoaXMuaG90LnJvb3RXaW5kb3cpP0duOjAsX2k9eCQodGhpcy5ob3Qucm9vdFdpbmRvdyk/R246MDtsZXQgT249ZHQrY2Uuc2Nyb2xsWCtydCx6cj1KdCtjZS5zY3JvbGxZK3B0O3RoaXMuaG90LmlzUnRsKCkmJihPbi09dG4rcnQpLHRoaXMuaG90LmlzTHRyKCkm''@;'; put 'put ''JmR0K3ZuK3RuPndyLWFpP09uPWR0K2NlLnNjcm9sbFgtdG4tMTp0aGlzLmhvdC5pc1J0bCgpJiZPbjwtKG1yLnNjcm9sbFdpZHRoLW1yLmNsaWVudFdpZHRoKSYmKE9uPWR0K2NlLnNjcm9sbFgrcnQrMSksSnQrTW4+R3ItX2kmJih6ci09TW4tQ24rMSksSm8oQWwsdGhpcykuc2V0UG9zaXRp''@;'; put 'put ''b24oT24senIpLEpvKEFsLHRoaXMpLnNldFJlYWRPbmx5U3RhdGUodGhpcy5nZXRDb21tZW50TWV0YShoLGYsZ0YpKSxKbyhBbCx0aGlzKS5vYnNlcnZlU2l6ZSgpfWZvY3VzRWRpdG9yKCl7Sm8oQWwsdGhpcykuZm9jdXMoKX11cGRhdGVDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlz''@;'; put 'put ''LmhvdC5nZXRDZWxsTWV0YShsLGEpW081XTtsZXQgZjtoPyhmPWcxKGgpLE1FKGYsZCkpOmY9ZCx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsTzUsZil9Z2V0Q29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtpZihoW081XSlyZXR1cm4gaFtPNV1b''@;'; put 'put ''ZF19YWRkVG9Db250ZXh0TWVudShsKXtsLml0ZW1zLnB1c2goe25hbWU6c3N9LGZ1bmN0aW9uIF9jdChjKXtyZXR1cm57a2V5OiJjb21tZW50c0FkZEVkaXQiLG5hbWUoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3Zv''@;'; put 'put ''aWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gbnVsbCE9YSYmYS5pc0NlbGwoKSYmYy5nZXRDb21tZW50QXRDZWxsKGEucm93LGEuY29sKT90aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZHEpOnRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh1cSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCk7Yy5zZXRSYW5nZShsKSxjLnNob3coKSxjLmZvY3VzRWRpdG9yKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJl''@;'; put 'put ''Um93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiB3Y3QoYyl7cmV0dXJue2tleToiY29tbWVudHNSZW1v''@;'; put 'put ''dmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGhxKX0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmYy5yZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLnJlbmRlcigpfSxkaXNh''@;'; put 'put ''YmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRo''@;'; put 'put ''aXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24geGN0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShmcSk7cmV0dXJuIGhGKHRo''@;'; put 'put ''aXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChkLGgpPT5jLmdldENvbW1lbnRNZXRhKGQsaCxnRikpP2w1ZShsKTpsfSxjYWxsYmFjaygpe3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhYy5nZXRDb21tZW50TWV0YShhLGQs''@;'; put 'put ''Z0YpO2MudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbZ0ZdOiFofSl9fSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fCFjLmdldENvbW1lbnRBdENlbGwobC5oaWdobGlnaHQucm93LGwu''@;'; put 'put ''aGlnaGxpZ2h0LmNvbCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSl9''@;'; put 'put ''Z2V0RWRpdG9ySW5wdXRFbGVtZW50KCl7cmV0dXJuIEpvKEFsLHRoaXMpLmdldElucHV0RWxlbWVudCgpfWRlc3Ryb3koKXt2YXIgbCxhO251bGw9PT0obD1KbyhBbCx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLG51bGw9PT0oYT1Kbyh6cCx0aGlzKSl8fHZvaWQgMD09PWF8fGEu''@;'; put 'put ''ZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gUmN0KGMpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0JiYhSm8obUYsdGhpcykmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGMpKXtjb25zdCBsPVJtKGMudGFyZ2V0LCJURCIsIlRCT0RZIik7bGV0''@;'; put 'put ''IGE9bnVsbDtsJiYoYT10aGlzLmhvdC5nZXRDb29yZHMobCkpLCghbHx8dGhpcy5yYW5nZS5mcm9tJiZhJiYodGhpcy5yYW5nZS5mcm9tLnJvdyE9PWEucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09YS5jb2wpKSYmdGhpcy5oaWRlKCl9fWZ1bmN0aW9uIExjdChjKXtjLnN0b3BQcm9wYWdh''@;'; put 'put ''dGlvbigpfWZ1bmN0aW9uIE9jdChjKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7aWYoIShKbyhtRix0aGlzKXx8Sm8oQWwsdGhpcykuaXNGb2N1c2VkKCl8fHBvKGMudGFyZ2V0LCJ3dEJvcmRlciIpfHxKbyhUSix0aGlzKT09PWMudGFyZ2V0KSYmSm8oQWwsdGhpcykpaWYoUW0o''@;'; put 'put ''VEosdGhpcyxsLmVsZW1lbnRGcm9tUG9pbnQoYy5jbGllbnRYLGMuY2xpZW50WSkpLHRoaXMudGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQoYykpe2NvbnN0IGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5nZXRDb29yZHMoYy50YXJnZXQpKTtKbyh6cCx0aGlzKS5zaG93KGEp''@;'; put 'put ''fWVsc2UgTG0oYy50YXJnZXQsbCkmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGMpJiZKbyh6cCx0aGlzKS5oaWRlKCl9ZnVuY3Rpb24gUGN0KCl7UW0obUYsdGhpcywhMSl9ZnVuY3Rpb24gRmN0KGMsbCl7bFtPNV0mJmxbTzVdW2JUXSYmVGkoYyxsLmNvbW1lbnRlZENlbGxDbGFz''@;'; put 'put ''c05hbWUpfWZ1bmN0aW9uIEhjdCgpe1FtKGJGLHRoaXMsIiIpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksdGhpcy5zZXRDb21tZW50KCl9ZnVuY3Rpb24gTmN0KCl7UW0oYkYsdGhpcyx0aGlzLmdldENvbW1lbnQoKSksdGhpcy5o''@;'; put 'put ''b3QubGlzdGVuKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoRUopfWZ1bmN0aW9uIFZjdChjLGwpe3RoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtzdHlsZTp7d2lkdGg6Yyxo''@;'; put 'put ''ZWlnaHQ6bH19KX1mdW5jdGlvbiBkNWUoYyl7Sm8oQWwsdGhpcykuaXNGb2N1c2VkKCkmJkIyKGMpfWZ1bmN0aW9uIEJjdCgpe0pvKHZGLHRoaXMpfHx0aGlzLmhpZGUoKX1mdW5jdGlvbiBqY3QoKXtjb25zdCBjPUpvKEFsLHRoaXMpLmdldEVkaXRvckVsZW1lbnQoKTtsbyhjLC9odC10aGVt''@;'; put 'put ''ZS0uKi9nKSxUaShjLHRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSl9ZnVuY3Rpb24gQUooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHpjdChjKXt2YXIgbD1mdW5jdGlvbiBVY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNsYXNzIGg1ZXtjb25zdHJ1Y3RvcihsKXtBSih0aGlzLCJob3QiLHZvaWQgMCksQUoodGhpcywiY29tbWFuZHMiLHt9KSxBSih0aGlzLCJjb21tb25DYWxsYmFjayIsbnVsbCksdGhpcy5ob3Q9bH1yZWdpc3RlckNvbW1hbmQobCxhKXt0aGlzLmNvbW1hbmRzW2xdPWF9c2V0Q29tbW9u''@;'; put 'put ''Q2FsbGJhY2sobCl7dGhpcy5jb21tb25DYWxsYmFjaz1sfWV4ZWN1dGUobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2NvbnN0IGY9bC5zcGxpdCgiOiIpLHY9ZlswXSxNPTI9PT1mLmxl''@;'; put 'put ''bmd0aD9mWzFdOm51bGw7bGV0IEQ9dGhpcy5jb21tYW5kc1t2XTtpZighRCl0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAnJHt2fScgbm90IGV4aXN0cy5gKTtpZihNJiZELnN1Ym1lbnUmJihEPWZ1bmN0aW9uIFpjdChjLGwpe2xldCBhO3JldHVybiBZbihsLGQ9Pntjb25zdCBoPWQu''@;'; put 'put ''a2V5P2Qua2V5LnNwbGl0KCI6Iik6bnVsbDtpZihBcnJheS5pc0FycmF5KGgpJiZoWzFdPT09YylyZXR1cm4gYT1kLCExfSksYX0oTSxELnN1Ym1lbnUuaXRlbXMpKSwhMD09PUQuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBELmRpc2FibGVkJiYhMD09PUQuZGlzYWJsZWQuY2FsbCh0''@;'; put 'put ''aGlzLmhvdCl8fEV1KEQsInN1Ym1lbnUiKSlyZXR1cm47Y29uc3QgWj1bXTsiZnVuY3Rpb24iPT10eXBlb2YgRC5jYWxsYmFjayYmWi5wdXNoKEQuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbW1vbkNhbGxiYWNrJiZaLnB1c2godGhpcy5jb21tb25DYWxsYmFjayksZC51''@;'; put 'put ''bnNoaWZ0KGYuam9pbigiOiIpKSxZbihaLHJlPT5yZS5hcHBseSh0aGlzLmhvdCxkKSl9fWNvbnN0IEsyPSJhbGlnbm1lbnQiLHlGPSJjbGVhcl9jb2x1bW4iLF9UPSJjb2xfbGVmdCIsd1Q9ImNvbF9yaWdodCIsQ1Q9Im1ha2VfcmVhZF9vbmx5IixfRj0icmVkbyIsU1Q9InJlbW92ZV9jb2wi''@;'; put 'put ''LHdGPSJyZW1vdmVfcm93IixDRj0icm93X2Fib3ZlIixTRj0icm93X2JlbG93IixNVD0ibm9faXRlbXMiLE1GPSJ1bmRvIixmNWU9W0NGLFNGLF9ULHdULHlGLHdGLFNULE1GLF9GLENULEsyLHNzLE1UXSxwNWU9e1tzc106ZnVuY3Rpb24geWN0KCl7cmV0dXJue25hbWU6c3N9fSxbTVRdOmZ1''@;'; put 'put ''bmN0aW9uIHR1dCgpe3JldHVybntrZXk6TVQsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoV0spfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbQ0ZdOmZ1bmN0aW9uIFFjdCgpe3JldHVybntrZXk6Q0YsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQ''@;'; put 'put ''aHJhc2UoWUspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJv''@;'; put 'put ''d3MpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudFJvd3MoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbU0ZdOmZ1bmN0aW9uIGV1dCgpe3JldHVybntrZXk6U0YsbmFtZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoR0spfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldEJvdHRvbVJpZ2h0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QmVsb3ciKX0s''@;'; put 'put ''ZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDB8fHRoaXMuY291bnRTb3VyY2VSb3dzKCk+''@;'; put 'put ''PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbX1RdOmZ1bmN0aW9uIEdjdCgpe3JldHVybntrZXk6X1QsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoJEspfSxjYWxs''@;'; put 'put ''YmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKSxsPXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9lbmQiOiJpbnNlcnRfY29sX3N0YXJ0Ijt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uTGVmdCIpfSxkaXNh''@;'; put 'put ''YmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZj''@;'; put 'put ''LmhpZ2hsaWdodC5jb2w8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHMpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudENvbHMoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5hbGxvd0luc2VydENvbHVtbn19fSxbd1RdOmZ1bmN0aW9uICRjdCgpe3JldHVybntrZXk6d1QsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoS0spfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcFJpZ2h0Q29ybmVy''@;'; put 'put ''KCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29u''@;'; put 'put ''c3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdz''@;'; put 'put ''KCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW3lGXTpmdW5jdGlvbiBZY3QoKXtyZXR1cm57a2V5OnlGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGVxKX0sY2FsbGJhY2soYyxsKXtjb25z''@;'; put 'put ''dCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQo''@;'; put 'put ''KXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MHx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKXJldHVybiEwO2xldCBsPSExO3JldHVybiBjLmZvckFsbCgoYSxk''@;'; put 'put ''KT0+e2lmKGE8MHx8ZDwwKXJldHVybiEwO2NvbnN0e3JlYWRPbmx5Omh9PXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKTtyZXR1cm4hIWh8fChsPSEwLCExKX0pLCFsfX19LFt3Rl06ZnVuY3Rpb24gSmN0KCl7cmV0dXJue2tleTp3RixuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0''@;'; put 'put ''IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocUssbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24gZm50KGMpe2NvbnN0IGw9eF8o''@;'; put 'put ''Yy5nZXRTZWxlY3RlZCgpKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT1RRShsLHtjcmVhdGVDZWxsQ29vcmRzOmMuX2NyZWF0ZUNlbGxDb29yZHMuYmluZChjKSxjcmVhdGVDZWxsUmFuZ2U6Yy5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQoYyl9KSxkPW5ldyBTZXQ7cmV0dXJuIFlu''@;'; put 'put ''KGMuZ2V0U2VsZWN0ZWQoKSx2PT57Y29uc3R7ZnJvbTpNLHRvOkR9PWEodiksWj1NYXRoLm1heChNLnJvdywwKTtZbihBcnJheS5mcm9tKG5ldyBBcnJheShELnJvdy1aKzEpLChjZSxiZSk9PlorYmUpLGNlPT57ZC5oYXMoY2UpfHxkLmFkZChjZSl9KX0pLHF1KEFycmF5LmZyb20oZCkuc29y''@;'; put 'put ''dCgodixNKT0+di1NKSwodixNLEQsWik9PigwIT09RCYmTT09PVpbRC0xXSsxP3Zbdi5sZW5ndGgtMV1bMV0rPTE6di5wdXNoKFtNLDFdKSx2KSxbXSl9KHRoaXMpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudFJvd3MoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1u''@;'; put 'put ''SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlUm93fX19LFtTVF06ZnVuY3Rpb24gWGN0KCl7cmV0dXJue2tleTpTVCxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEp''@;'; put 'put ''bD0xO2Vsc2V7Y29uc3RbLGEsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhLLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9jb2wiLGZ1bmN0aW9uIGhudChjKXtjb25zdCBsPXhfKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09''@;'; put 'put ''PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9UUUobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoYyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBZbihjLmdldFNlbGVjdGVkKCksdj0+e2Nv''@;'; put 'put ''bnN0e2Zyb206TSx0bzpEfT1hKHYpLFo9TWF0aC5tYXgoTS5jb2wsMCk7WW4oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5jb2wtWisxKSwoY2UsYmUpPT5aK2JlKSxjZT0+e2QuaGFzKGNlKXx8ZC5hZGQoY2UpfSl9KSxxdShBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxELFop''@;'; put 'put ''PT4oMCE9PUQmJk09PT1aW0QtMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSxudWxsLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtj''@;'; put 'put ''b25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRDb2xzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRo''@;'; put 'put ''aXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZUNvbHVtbn19fSxbTUZdOmZ1bmN0aW9uIG51dCgpe3JldHVybntrZXk6TUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UoSkspfSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnVuZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1''@;'; put 'put ''bmRvUmVkbyIpLmlzVW5kb0F2YWlsYWJsZSgpfX19LFtfRl06ZnVuY3Rpb24gcWN0KCl7cmV0dXJue2tleTpfRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShRSyl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikucmVkbygpfSxoaWRkZW4oKXtj''@;'; put 'put ''b25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNSZWRvQXZhaWxhYmxlKCl9fX0sW0NUXTpmdW5jdGlvbiBLY3QoKXtyZXR1cm57a2V5OkNULGNoZWNr''@;'; put 'put ''YWJsZTohMCxhcmlhQ2hlY2tlZCgpe3JldHVybiBoRih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwobCxhKT0+dGhpcy5nZXRDZWxsTWV0YShsLGEpLnJlYWRPbmx5KX0sYXJpYUxhYmVsKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfUCl9LG5hbWUoKXtsZXQgYz10aGlzLmdl''@;'; put 'put ''dFRyYW5zbGF0ZWRQaHJhc2UoX1ApO3JldHVybiBoRih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KSYmKGM9bDVlKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1oRihjLChhLGQp''@;'; put 'put ''PT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpO1luKGMsYT0+e2EuZm9yQWxsKChkLGgpPT57ZD49MCYmaD49MCYmdGhpcy5zZXRDZWxsTWV0YShkLGgsInJlYWRPbmx5IiwhbCl9KX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VMYXN0KCk7cmV0dXJuIShjJiYhYy5pc1NpbmdsZUhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjAhPT10aGlzLmNvdW50Um93cygpJiYwIT09dGhpcy5jb3VudENvbHMoKSYmdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJjAhPT10aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2UoKS5sZW5ndGgpfX19LFtLMl06ZnVuY3Rpb24gV2N0KCl7cmV0dXJue2tleTpLMixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShwcSl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEw''@;'; put 'put ''O2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHN1Ym1lbnU6e2l0ZW1zOlt7a2V5OmAke0syfTpsZWZ0''@;'; put 'put ''YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShncSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWI5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0TGVmdCI7dGhp''@;'; put 'put ''cy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpjZW50ZXJg''@;'; put 'put ''LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG1xKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9YjkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRDZW50ZXIiO3Ro''@;'; put 'put ''aXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06cmlnaHRg''@;'; put 'put ''LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHZxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9YjkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRSaWdodCI7dGhp''@;'; put 'put ''cy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpqdXN0aWZ5''@;'; put 'put ''YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShicSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWI5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0SnVzdGlmeSI7''@;'; put 'put ''dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7bmFtZTpzc30se2tleTpg''@;'; put 'put ''JHtLMn06dG9wYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh5cSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWI5KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodFRv''@;'; put 'put ''cCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpt''@;'; put 'put ''aWRkbGVgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9xKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9YjkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0TWlkZGxl''@;'; put 'put ''Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9OmJv''@;'; put 'put ''dHRvbWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uod3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1iOShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRCb3R0b20i''@;'; put 'put ''O3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX1dfX19fTtmdW5jdGlvbiBn''@;'; put 'put ''NWUoKXtjb25zdCBjPXt9O3JldHVybiBYbyhwNWUsKGwsYSk9PntjW2FdPWwoKX0pLGN9ZnVuY3Rpb24ga0ooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHJ1dChjKXt2YXIgbD1mdW5jdGlvbiBpdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWNsYXNzIG01ZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtrSih0aGlzLCJob3QiLHZvaWQgMCksa0oodGhpcywicHJlZGVmaW5lZEl0ZW1zIixnNWUoKSksa0oodGhpcywi''@;'; put 'put ''ZGVmYXVsdE9yZGVyUGF0dGVybiIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybj1hfXNldFByZWRlZmluZWRJdGVtcyhsKXtjb25zdCBhPXt9O3RoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5sZW5ndGg9MCxYbyhsLChkLGgpPT57bGV0IGY9IiI7ZC5uYW1lPT09''@;'; put 'put ''c3M/KGFbc3NdPWQsZj1zcyk6aXNOYU4ocGFyc2VJbnQoaCwxMCkpPyhkLmtleT12b2lkIDA9PT1kLmtleT9oOmQua2V5LGFbaF09ZCxmPWQua2V5KTooYVtkLmtleV09ZCxmPWQua2V5KSx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ucHVzaChmKX0pLHRoaXMucHJlZGVmaW5lZEl0ZW1zPWF9''@;'; put 'put ''Z2V0SXRlbXMoKXtyZXR1cm4gZnVuY3Rpb24gYXV0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGQ9''@;'; put 'put ''W107bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGgmJmguaXRlbXM/aD1oLml0ZW1zOkFycmF5LmlzQXJyYXkoaCl8fChoPWwpLHFvKGgpP1hvKGgsKGYsdik9PntsZXQgTT1hWyJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''Zj9mOnZdO018fChNPWYpLHFvKGYpP3h1KE0sZik6InN0cmluZyI9PXR5cGVvZiBNJiYoTT17bmFtZTpNfSksdm9pZCAwPT09TS5rZXkmJihNLmtleT12KSxkLnB1c2goTSl9KTpZbihoLChmLHYpPT57bGV0IE09YVtmXTshTSYmZjVlLmluZGV4T2YoZik+PTB8fChNfHwoTT17bmFtZTpmLGtl''@;'; put 'put ''eTpgJHt2fWB9KSxxbyhmKSYmeHUoTSxmKSx2b2lkIDA9PT1NLmtleSYmKE0ua2V5PXYpLGQucHVzaChNKSl9KSxkfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4sdGhpcy5wcmVkZWZp''@;'; put 'put ''bmVkSXRlbXMpfX1mdW5jdGlvbiBlNihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb3V0KGMpe3ZhciBsPWZ1bmN0aW9uIHN1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu''@;'; put 'put ''Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgbHV0e2NvbnN0cnVjdG9yKGwsYSl7ZTYo''@;'; put 'put ''dGhpcywidG9wIix2b2lkIDApLGU2KHRoaXMsInRvcFJlbGF0aXZlIix2b2lkIDApLGU2KHRoaXMsImxlZnQiLHZvaWQgMCksZTYodGhpcywibGVmdFJlbGF0aXZlIix2b2lkIDApLGU2KHRoaXMsInNjcm9sbFRvcCIsdm9pZCAwKSxlNih0aGlzLCJzY3JvbGxMZWZ0Iix2b2lkIDApLGU2KHRo''@;'; put 'put ''aXMsImNlbGxIZWlnaHQiLHZvaWQgMCksZTYodGhpcywiY2VsbFdpZHRoIix2b2lkIDApO2NvbnN0IGQ9YS5zY3JvbGxZLGg9YS5zY3JvbGxYO2xldCBmLHYsTSxELFoscmU7dGhpcy5yb290V2luZG93PWEsdGhpcy50eXBlPXRoaXMuZ2V0U291cmNlVHlwZShsKSwibGl0ZXJhbCI9PT10aGlz''@;'; put 'put ''LnR5cGU/KGY9cGFyc2VJbnQobC50b3AsMTApLE09cGFyc2VJbnQobC5sZWZ0LDEwKSxaPWwuaGVpZ2h0fHwwLHJlPWwud2lkdGh8fDAsdj1mLEQ9TSxmKz1kLE0rPWgpOiJldmVudCI9PT10aGlzLnR5cGUmJihmPXBhcnNlSW50KGwucGFnZVksMTApLE09cGFyc2VJbnQobC5wYWdlWCwxMCks''@;'; put 'put ''Wj1sLnRhcmdldC5jbGllbnRIZWlnaHQscmU9bC50YXJnZXQuY2xpZW50V2lkdGgsdj1mLWQsRD1NLWgpLHRoaXMudG9wPWYsdGhpcy50b3BSZWxhdGl2ZT12LHRoaXMubGVmdD1NLHRoaXMubGVmdFJlbGF0aXZlPUQsdGhpcy5zY3JvbGxUb3A9ZCx0aGlzLnNjcm9sbExlZnQ9aCx0aGlzLmNl''@;'; put 'put ''bGxIZWlnaHQ9Wix0aGlzLmNlbGxXaWR0aD1yZX1nZXRTb3VyY2VUeXBlKGwpe2xldCBhPSJsaXRlcmFsIjtyZXR1cm4gbCBpbnN0YW5jZW9mIEV2ZW50JiYoYT0iZXZlbnQiKSxhfWZpdHNBYm92ZShsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZT49bC5vZmZzZXRIZWlnaHR9Zml0c0JlbG93''@;'; put 'put ''KGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlK2wub2Zmc2V0SGVpZ2h0PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodCl9Zml0c09uUmlnaHQobCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0''@;'; put 'put ''aXZlK3RoaXMuY2VsbFdpZHRoK2wub2Zmc2V0V2lkdGg8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5yb290V2luZG93LmlubmVyV2lkdGgpfWZpdHNPbkxlZnQobCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlPj1sLm9mZnNl''@;'; put 'put ''dFdpZHRofX1mdW5jdGlvbiB4VChjLGwsYSl7KGZ1bmN0aW9uIGN1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVu''@;'; put 'put ''Y3Rpb24gVW8oYyxsKXtyZXR1cm4gYy5nZXQodjVlKGMsbCkpfWZ1bmN0aW9uIHhGKGMsbCxhKXtyZXR1cm4gYy5zZXQodjVlKGMsbCksYSksYX1mdW5jdGlvbiB2NWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBYMT1uZXcgV2Vha01hcCxaZD1uZXcgV2Vha01hcCxXZD1uZXcgV2Vha01hcCxESj1uZXcgV2Vha01hcCxLXz1uZXcgV2Vha01hcDtjbGFzcyB1dXR7''@;'; put 'put ''Y29uc3RydWN0b3IobCl7eFQodGhpcyxYMSx2b2lkIDApLHhUKHRoaXMsWmQsdm9pZCAwKSx4VCh0aGlzLFdkLHZvaWQgMCkseFQodGhpcyxESiwhMSkseFQodGhpcyxLXyx7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfSkseEYoREosdGhpcyxsKX1zZXRPZmZzZXQobCl7bGV0IGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIFVvKEtfLHRoaXMpW2xdPWEsdGhpc31zZXRFbGVtZW50KGwpe3JldHVybiB4RihYMSx0aGlzLGwpLHRoaXN9c2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4geEYoWmQsdGhpcyxs''@;'; put 'put ''KSx0aGlzfXVwZGF0ZVBvc2l0aW9uKGwpe3hGKFdkLHRoaXMsbmV3IGx1dChsLFVvKFgxLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpKSxVbyhESix0aGlzKT8oVW8oV2QsdGhpcykuZml0c0JlbG93KFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKTpV''@;'; put 'put ''byhXZCx0aGlzKS5maXRzQWJvdmUoVW8oWDEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpLHRoaXMudXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCkpOih0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnNl''@;'; put 'put ''dFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCkpfXVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpeyJydGwiPT09VW8oWDEsdGhpcykuZGlyP1VvKFdkLHRoaXMpLmZpdHNPbkxlZnQoVW8oWDEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25P''@;'; put 'put ''blJpZ2h0T2ZDdXJzb3IoKTpVbyhXZCx0aGlzKS5maXRzT25SaWdodChVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpOnRoaXMuc2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpfXNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKXtsZXQgbD1VbyhLXyx0aGlzKS5h''@;'; put 'put ''Ym92ZStVbyhXZCx0aGlzKS50b3AtVW8oWDEsdGhpcykub2Zmc2V0SGVpZ2h0O2lmKFVvKFpkLHRoaXMpKXtjb25zdCBkPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikp''@;'; put 'put ''LGg9TnVtYmVyLnBhcnNlSW50KGQucGFkZGluZ1RvcCwxMCksZj1OdW1iZXIucGFyc2VJbnQoZC5ib3JkZXJUb3AsMTApO2w9VW8oV2QsdGhpcykudG9wK1VvKFdkLHRoaXMpLmNlbGxIZWlnaHQtVW8oWDEsdGhpcykuc2Nyb2xsSGVpZ2h0K2grZn1VbyhYMSx0aGlzKS5zdHlsZS50b3A9YCR7''@;'; put 'put ''bH1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmJlbG93K1VvKFdkLHRoaXMpLnRvcCsxO2lmKFVvKFpkLHRoaXMpKXtjb25zdCBkPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCIuaHRfbWFzdGVyIikpLGg9TnVtYmVyLnBhcnNlSW50KGQucGFkZGluZ1RvcCwxMCksZj1OdW1iZXIucGFyc2VJbnQoZC5ib3JkZXJUb3AsMTApO2w9VW8oV2QsdGhpcykudG9wLWgtZi0xfVVvKFgxLHRoaXMpLnN0eWxlLnRvcD1gJHtsfXB4YH1zZXRQb3NpdGlvbk9u''@;'; put 'put ''UmlnaHRPZkN1cnNvcigpe2xldCBsPVVvKFdkLHRoaXMpLmxlZnQ7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGE9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyxkPU51bWJlci5wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoVW8oWmQsdGhpcykucXVlcnlTZWxlY3Rvcigi''@;'; put 'put ''Lmh0Q29yZSIpKS5ib3JkZXJSaWdodFdpZHRoLDEwKTtsKz1VbyhXZCx0aGlzKS5jZWxsV2lkdGgrZH1lbHNlIGwrPVVvKEtfLHRoaXMpLnJpZ2h0O1VvKFgxLHRoaXMpLnN0eWxlLmxlZnQ9YCR7bH1weGB9c2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmxl''@;'; put 'put ''ZnQrVW8oV2QsdGhpcykubGVmdC1VbyhYMSx0aGlzKS5vZmZzZXRXaWR0aDtpZihVbyhaZCx0aGlzKSl7Y29uc3QgYT1VbyhaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O2wtPU51bWJlci5wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoVW8oWmQsdGhpcykucXVlcnlTZWxl''@;'; put 'put ''Y3RvcigiLmh0Q29yZSIpKS5ib3JkZXJMZWZ0V2lkdGgsMTApfVVvKFgxLHRoaXMpLnN0eWxlLmxlZnQ9YCR7bH1weGB9fWZ1bmN0aW9uIGI1ZShjKXtsZXR7aW5pdGlhbFBhZ2U6bD0tMSxzaXplOmE9KCgpPT4wKSxvbkl0ZW1TZWxlY3Q6ZD0oKCk9Pnt9KSxvbkNsZWFyOmg9KCgpPT57fSl9''@;'; put 'put ''PWM7Y29uc3QgZj1uZXcgU2V0O2xldCB2PWtzKGwsLTEsQmUoKS0xKTtmdW5jdGlvbiBNKHJ0LHB0KXtjb25zdCBkdD1CZSgpLTE7cmV0dXJuIHJ0PDAmJihydD1kdCkscnQ+ZHQmJihydD0wKSxmLmhhcyhydCk/LTE6KGYuYWRkKHJ0KSwhMT09PWQocnQsITEpJiYocnQ9TSgxPT09cHQ/Kyty''@;'; put 'put ''dDotLXJ0LHB0KSkscnQpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuIE1hdGgubWF4KGEoKSwwKX1yZXR1cm57c2V0Q3VycmVudFBhZ2U6ZnVuY3Rpb24gRChydCl7cnQ+LTEmJnJ0PEJlKCkmJiExIT09ZChydCwhMCkmJih2PXJ0KX0sZ2V0Q3VycmVudFBhZ2U6ZnVuY3Rpb24gWigpe3JldHVybiB2''@;'; put 'put ''fSx0b0ZpcnN0SXRlbTpmdW5jdGlvbiByZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oMCwxKSl9LHRvTGFzdEl0ZW06ZnVuY3Rpb24gY2UoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKEJlKCktMSwtMSkpfSx0b05leHRJdGVtOmZ1bmN0aW9uIGJlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9''@;'; put 'put ''TSgrK3YsMSkpfSx0b1ByZXZpb3VzSXRlbTpmdW5jdGlvbiBFZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oLS12LC0xKSl9LGdldFNpemU6QmUsY2xlYXI6ZnVuY3Rpb24gcWUoKXtmLmNsZWFyKCksdj1sLGgoKX19fWZ1bmN0aW9uIElKKGMpe3JldHVybiBFdShjLCJzdWJtZW51Iil9ZnVu''@;'; put 'put ''Y3Rpb24gUkooYyl7cmV0dXJuIG5ldyBSZWdFeHAoc3MsImkiKS50ZXN0KGMubmFtZSl9ZnVuY3Rpb24gRUYoYyxsKXtyZXR1cm4hMD09PWMuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmRpc2FibGVkJiYhMD09PWMuZGlzYWJsZWQuY2FsbChsKX1mdW5jdGlvbiB5NWUoYyl7cmV0''@;'; put 'put ''dXJuIEV1KGMsImRpc2FibGVTZWxlY3Rpb24iKX1mdW5jdGlvbiBfNWUoYyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aCYmYVtkXS5uYW1lPT09bDspYS5zaGlmdCgpO3JldHVybiBhfWZ1bmN0aW9uIF91dChjKXtyZXR1cm4hMD09PWMuY2hlY2thYmxlfWZ1''@;'; put 'put ''bmN0aW9uIE11dChjKXtyZXR1cm4obCxhLGQsaCxmLHYpPT57Y29uc3QgTT1sLmdldFNvdXJjZURhdGFBdFJvdyhkKSxEPWMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9ImZ1bmN0aW9uIj09dHlwZW9mIHY/di5jYWxsKGMpOnYscmU9ImZ1bmN0aW9uIj09dHlwZW9mIE0u''@;'; put 'put ''YXJpYUxhYmVsP00uYXJpYUxhYmVsLmNhbGwoYyk6TS5hcmlhTGFiZWwsY2U9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUNoZWNrZWQ/TS5hcmlhQ2hlY2tlZC5jYWxsKGMpOk0uYXJpYUNoZWNrZWQ7aWYoeHAoYSksVGkoRCwiaHRJdGVtV3JhcHBlciIpLGMuZ2V0U2V0dGluZ3MoKS5hcmlh''@;'; put 'put ''VGFncyl7Y29uc3QgYmU9IUVGKE0sYykmJiF5NWUoTSkmJiFSSihNKTt2byhhLFsuLi5fdXQoTSk/W1sicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giXSxnRShyZSksQTJlKGNlKV06W1sicm9sZSIsIm1lbnVpdGVtIl0sZ0UoWildLC4uLmJlP1tINygtMSldOltdLC4uLkVGKE0sYyk/W1siYXJp''@;'; put 'put ''YS1kaXNhYmxlZCIsInRydWUiXV06W10sLi4uSUooTSk/W04yKCExKV06W11dKX1hLmNsYXNzTmFtZT0iIixhLmFwcGVuZENoaWxkKEQpLFJKKE0pP1RpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIE0ucmVuZGVyZXI/KFRpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiks''@;'; put 'put ''YS5hcHBlbmRDaGlsZChNLnJlbmRlcmVyKGwsRCxkLGgsZixaKSkpOmo3KEQsWiksRUYoTSxjKT9UaShhLCJodERpc2FibGVkIik6eTVlKE0pP1RpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKTpJSihNKSYmVGkoYSwiaHRTdWJtZW51Iil9fWZ1bmN0aW9uIExKKGMsbCxhKXsoZnVuY3Rpb24g''@;'; put 'put ''eHV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBVcChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRXV0''@;'; put 'put ''KGMpe3ZhciBsPWZ1bmN0aW9uIFR1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gT0ooYyxsLGEpe3JldHVybiBjLnNldChTNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHk5KGMsbCl7cmV0dXJuIGMuZ2V0KFM1ZShj''@;'; put 'put ''LGwpKX1mdW5jdGlvbiBTNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZh''@;'; put 'put ''ciBFVD1uZXcgV2Vha01hcCxURj1uZXcgV2Vha01hcCxBRj1uZXcgV2Vha01hcDtjbGFzcyBxX3tnZXQgdGFibGVCb3JkZXJXaWR0aCgpe3JldHVybiB2b2lkIDA9PT15OShBRix0aGlzKSYmdGhpcy5ob3RNZW51JiZPSihBRix0aGlzLHBhcnNlSW50KHRoaXMuaG90TWVudS5yb290V2luZG93''@;'; put 'put ''LmdldENvbXB1dGVkU3R5bGUodGhpcy5ob3RNZW51LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpLmJvcmRlcldpZHRoLDEwKSkseTkoQUYsdGhpcyl9Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO1VwKHRoaXMsImhvdCIsdm9pZCAwKSxVcCh0aGlzLCJvcHRpb25zIix2b2lkIDApLFVwKHRo''@;'; put 'put ''aXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxVcCh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksVXAodGhpcywicG9zaXRpb25lciIsdm9pZCAwKSxVcCh0aGlzLCJob3RNZW51IixudWxsKSxVcCh0aGlzLCJob3RTdWJNZW51cyIse30pLFVwKHRoaXMsInBhcmVudE1lbnUiLHZvaWQg''@;'; put 'put ''MCksVXAodGhpcywibWVudUl0ZW1zIixudWxsKSxVcCh0aGlzLCJvcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzIixudWxsKSxMSih0aGlzLEVULHZvaWQgMCksTEoodGhpcyxURix2b2lkIDApLExKKHRoaXMsQUYsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz1hfHx7cGFyZW50Om51''@;'; put 'put ''bGwsbmFtZTpudWxsLGNsYXNzTmFtZToiIixrZWVwSW5WaWV3cG9ydDohMCxzdGFuZGFsb25lOiExLG1pbldpZHRoOjIxNSxjb250YWluZXI6dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5vcHRp''@;'; put 'put ''b25zLm5hbWUpLHRoaXMucG9zaXRpb25lcj1uZXcgdXV0KHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3cG9ydCksdGhpcy5wYXJlbnRNZW51PXRoaXMub3B0aW9ucy5wYXJlbnR8fG51bGwsdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJh''@;'; put 'put ''ZnRlclNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIiwuLi5m''@;'; put 'put ''KX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChoLGYpPT57dmFyIHY7Znx8bnVsbD09PSh2PXRoaXMuaG90TWVudSl8fHZvaWQgMD09PXZ8fHYudXNlVGhlbWUoaCl9KX1yZWdpc3RlckV2ZW50cygpe2xldCBsPXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtsOyl0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsIm1vdXNlZG93biIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsInRvdWNoc3RhcnQiLGE9PnRoaXMub25Eb2N1bWVudE1vdXNl''@;'; put 'put ''RG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJjb250ZXh0bWVudSIsYT0+dGhpcy5vbkRvY3VtZW50Q29udGV4dE1lbnUoYSkpLGw9VjcobCl9c2V0TWVudUl0ZW1zKGwpe3RoaXMubWVudUl0ZW1zPWx9Z2V0TmF2aWdhdG9yKCl7cmV0dXJu''@;'; put 'put ''IHk5KEVULHRoaXMpfWdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpe3JldHVybiB5OShURix0aGlzKX1nZXRTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKT90aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExh''@;'; put 'put ''c3QoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkpfWlzU3ViTWVudSgpe3JldHVybiBudWxsIT09dGhpcy5wYXJlbnRNZW51fW9wZW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4i''@;'; put 'put ''KSx0aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGw9U0UoTT0+dGhpcy5vcGVuU3ViTWVudShNKSwzMDApLGE9dGhpcy5vcHRpb25zLm1pbldpZHRofHwyMTU7bGV0IGQ9ITEsaD1JbSh0aGlz''@;'; put 'put ''Lm1lbnVJdGVtcyxNPT4oTS5rZXk9PT1NVCYmKGQ9ITApLGZ1bmN0aW9uIG11dChjLGwpe3JldHVybiFjLmhpZGRlbnx8ISgiZnVuY3Rpb24iPT10eXBlb2YgYy5oaWRkZW4mJmMuaGlkZGVuLmNhbGwobCkpfShNLHRoaXMuaG90KSkpO2lmKGgubGVuZ3RoPDEmJiFkKWgucHVzaChnNWUoKVtN''@;'; put 'put ''VF0pO2Vsc2UgaWYoMD09PWgubGVuZ3RoKXJldHVybjtoPWZ1bmN0aW9uIHl1dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06c3MsYT1jLnNsaWNlKDApO3JldHVybiBhPV81ZShhLGwpLGE9ZnVuY3Rpb24gdnV0KGMsbCl7''@;'; put 'put ''bGV0IGE9Yy5zbGljZSgwKTtyZXR1cm4gYS5yZXZlcnNlKCksYT1fNWUoYSxsKSxhLnJldmVyc2UoKSxhfShhLGwpLGE9ZnVuY3Rpb24gYnV0KGMpe2NvbnN0IGw9W107cmV0dXJuIFluKGMsKGEsZCk9PntkPjA/bFtsLmxlbmd0aC0xXS5uYW1lIT09YS5uYW1lJiZsLnB1c2goYSk6bC5wdXNo''@;'; put 'put ''KGEpfSksbH0oYSksYX0oaCxzcyk7bGV0IGY9ITE7Y29uc3Qgdj17ZGF0YTpoLGNvbEhlYWRlcnM6ITEsYXV0b0NvbHVtblNpemU6ITAsYXV0b1dyYXBSb3c6ITEsbW9kaWZ5Q29sV2lkdGg6TT0+UGEoTSkmJk08YT9hOk0sYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9yOiExLGNv''@;'; put 'put ''cHlQYXN0ZTohMSxoaWRkZW5Sb3dzOiEwLG1heENvbHM6MSxjb2x1bW5zOlt7ZGF0YToibmFtZSIscmVuZGVyZXI6TXV0KHRoaXMuaG90KX1dLHJlbmRlckFsbFJvd3M6ITAsZnJhZ21lbnRTZWxlY3Rpb246ITEsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rp''@;'; put 'put ''b246ImFyZWEiLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiLGFyaWFUYWdzOiExLHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYmVmb3JlUmVmcmVzaERpbWVuc2lvbnM6KCk9PiExLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjooTSxE''@;'; put 'put ''KT0+e3k5KEVULHRoaXMpLnNldEN1cnJlbnRQYWdlKEQucm93KX0sYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6KE0sRCk9Pnt0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKT9sKEQucm93KTp0aGlzLm9wZW5TdWJNZW51KEQucm93KX0sYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpNPT57TS5wcmV2ZW50''@;'; put 'put ''RGVmYXVsdCgpLE8kKCkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuY2xvc2UoITApfSxhZnRlclNlbGVjdGlvbjooTSxELFoscmUsY2UpPT57dGhpcy5ob3RNZW51LnZpZXcuaXNNb3VzZURvd24oKSYmKGNlLnZhbHVlPSEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2Vs''@;'; put 'put ''ZWN0aW9uQ2hhbmdlIix0aGlzLmdldFNlbGVjdGVkSXRlbSgpKX0sYmVmb3JlT25DZWxsTW91c2VVcDpNPT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKGY9IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKE0pKX0sYWZ0''@;'; put 'put ''ZXJPbkNlbGxNb3VzZVVwOk09PnsoIU8kKCl8fCFIbShNKSkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihBcCgpfHxMJCgpP3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRo''@;'; put 'put ''aXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNPcGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3RlbigpfX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0''@;'; put 'put ''c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90TWVudT1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5jb250YWluZXIsdiksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmluaXQoKSxPSihFVCx0aGlz''@;'; put 'put ''LGZ1bmN0aW9uIHd1dChjKXtyZXR1cm4gYjVlKHtzaXplOigpPT5jLmNvdW50Um93cygpLG9uSXRlbVNlbGVjdChsLGEpe2NvbnN0IGQ9Yy5nZXRDZWxsKGwsMCk7aWYoIWR8fGZ1bmN0aW9uIGh1dChjKXtyZXR1cm4gcG8oYywiaHRTZXBhcmF0b3IiKX0oZCl8fGZ1bmN0aW9uIHB1dChjKXty''@;'; put 'put ''ZXR1cm4gcG8oYywiaHREaXNhYmxlZCIpfShkKXx8ZnVuY3Rpb24gZ3V0KGMpe3JldHVybiBwbyhjLCJodFNlbGVjdGlvbkRpc2FibGVkIil9KGQpKXJldHVybiExO2Muc2VsZWN0Q2VsbChsLDAsLi4uYT9bbCwwLCExLCExXTpbXSl9LG9uQ2xlYXIoKXtjLmRlc2VsZWN0Q2VsbCgpfX0pfSh0''@;'; put 'put ''aGlzLmhvdE1lbnUpKSxPSihURix0aGlzLGZ1bmN0aW9uIFN1dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT1bXTtmdW5jdGlvbiBkKFoscmUpe00ocmUpLmFkZFNob3J0Y3V0cyhaLHtncm91cDoibWVu''@;'; put 'put ''dSJ9KX1mdW5jdGlvbiBoKFoscmUpe2NvbnN0IGNlPU0ocmUpO1ouZm9yRWFjaChiZT0+e2xldHtrZXlzOkVlfT1iZTtFZS5mb3JFYWNoKEJlPT5jZS5yZW1vdmVTaG9ydGN1dHNCeUtleXMoQmUpKX0pLGEucHVzaCh7c2hvcnRjdXRzOlosY29udGV4dE5hbWU6cmV9KSxkKFoscmUpfWZ1bmN0''@;'; put 'put ''aW9uIHYoWil7cmV0dXJuIFo/YG1lbnU6JHtafWA6Im1lbnUifWZ1bmN0aW9uIE0oWil7dmFyIHJlO2NvbnN0IGNlPWMuaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIoKSxiZT12KFopO3JldHVybiBudWxsIT09KHJlPWNlLmdldENvbnRleHQoYmUpKSYmdm9pZCAwIT09cmU/cmU6Y2UuYWRk''@;'; put 'put ''Q29udGV4dChiZSl9cmV0dXJuIGQoZnVuY3Rpb24gQ3V0KGMpe2NvbnN0e2hvdDpsLGhvdE1lbnU6YX09YztyZXR1cm5be2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNr''@;'; put 'put ''OigpPT5jLmNsb3NlKCEwKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazooZCxoKT0+e2NvbnN0IGY9bC5nZXRTZXR0aW5ncygpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGYudGFiTW92ZXM/Zi50YWJNb3ZlcyhkKTpmLnRhYk1vdmVzO2guaW5jbHVkZXMoInNoaWZ0''@;'; put 'put ''Iik/bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXYucm93LC12LmNvbCk6bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodi5yb3csdi5jb2wpLGMuY2xvc2UoITApfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT5jLmNsb3NlKCl9LHtrZXlzOltbIkFycm93RG93biJdXSxj''@;'; put 'put ''YWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b05leHRJdGVtKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9QcmV2aW91c0l0ZW0oKX0se2tleXM6W1tsLmlzUnRsKCk/IkFycm93TGVmdCI6IkFycm93UmlnaHQiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9Pntjb25zdCBkPWEuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYoZCl7Y29uc3QgaD1jLm9wZW5TdWJNZW51KGRbMF0pO2gmJmguZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19fSx7a2V5czpbW2wuaXNSdGwoKT8iQXJyb3dSaWdodCI6IkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2Eu''@;'; put 'put ''Z2V0U2VsZWN0ZWRMYXN0KCkmJmMuaXNTdWJNZW51KCkmJihjLmNsb3NlKCksYy5pc1N1Yk1lbnUoKSYmYy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dVcCJdLFsiSG9tZSJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3Io''@;'; put 'put ''KS50b0ZpcnN0SXRlbSgpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd0Rvd24iXSxbIkVuZCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxjYWxsYmFjazpkPT57Y29uc3QgaD1hLmdldFNlbGVj''@;'; put 'put ''dGVkTGFzdCgpO2gmJihhLmdldFNvdXJjZURhdGFBdFJvdyhoWzBdKS5zdWJtZW51P2Mub3BlblN1Yk1lbnUoaFswXSkuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKTooYy5leGVjdXRlQ29tbWFuZChkKSxjLmNsb3NlKCEwKSkpfX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigp''@;'; put 'put ''PT57YS5nZXRTZWxlY3RlZExhc3QoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtYS5jb3VudFZpc2libGVSb3dzKCksMCk6Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpP2Eu''@;'; put 'put ''c2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEuY291bnRWaXNpYmxlUm93cygpLDApOmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpfX1dfShjKSksbC5mb3JFYWNoKFo9PntsZXR7c2hvcnRjdXRzOnJlLGNvbnRleHROYW1lOmNlfT1aO2gocmUsY2UpfSkse2FkZEN1c3RvbVNob3J0Y3V0''@;'; put 'put ''czpoLGdldEN1c3RvbVNob3J0Y3V0czpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmFdfSxnZXRDb250ZXh0Ok0sbGlzdGVuOmZ1bmN0aW9uIEQoWil7Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKHYoWikpfX19KHRoaXMpKSx5OShURix0aGlzKS5s''@;'; put 'put ''aXN0ZW4oKSx0aGlzLmZvY3VzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclN1Ym1lbnVPcGVuIix0aGlzKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck9wZW4iLHRoaXMp''@;'; put 'put ''fWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLmlzT3BlbmVkKCkpaWYobCYmdGhpcy5pc1N1Yk1lbnUoKSl0aGlzLnBhcmVudE1lbnUuY2xvc2UoKTtlbHNlIGlmKHk5KEVULHRoaXMpLmNsZWFyKCks''@;'; put 'put ''dGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3RNZW51LmRlc3Ryb3koKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLm9yaWdPdXRzaWRlQ2xp''@;'; put 'put ''Y2tEZXNlbGVjdHMsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIiksdGhpcy5pc1N1Yk1lbnUoKSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgYT10aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTthJiZ2byh0aGlzLnBhcmVu''@;'; put 'put ''dE1lbnUuaG90TWVudS5nZXRDZWxsKGFbMF0sMCksW04yKCExKV0pfXRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpfX1vcGVuU3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxs''@;'; put 'put ''U3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIGZ1dChjKXtyZXR1cm4gcG8oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBxXyh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1l''@;'; put 'put ''OnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkp''@;'; put 'put ''LHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oYSxbTjIoITApXSksaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGQ9dGhpcy5ob3RTdWJNZW51c1thLmtleV07aWYo''@;'; put 'put ''ZCl7ZC5kZXN0cm95KCksZGVsZXRlIHRoaXMuaG90U3ViTWVudXNbYS5rZXldO2NvbnN0IGg9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhoLFtOMighMSldKX19Y2xvc2VBbGxTdWJNZW51cygpe1luKHRoaXMuaG90TWVudS5n''@;'; put 'put ''ZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9Zm9jdXMoKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQuZm9jdXMo''@;'; put 'put ''e3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbigpLHRoaXMuaG90TWVudS5saXN0ZW4oKSl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0''@;'; put 'put ''aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5o''@;'; put 'put ''YXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1''@;'; put 'put ''bmN0aW9uIGR1dChjKXtyZXR1cm4geXMoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlz''@;'; put 'put ''LnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtyZXR1cm4hMT09PWwuaXNDb21tYW5kfHxSSihsKXx8RUYobCx0aGlzLmhvdCl8fElKKGwpfXNldE9mZnNldChsKXt0aGlzLnBvc2l0aW9uZXIuc2V0T2Zmc2V0''@;'; put 'put ''KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApfXNldFBvc2l0aW9uKGwpe3RoaXMuaXNTdWJNZW51KCkmJnRoaXMucG9zaXRpb25lci5zZXRQYXJlbnRFbGVtZW50KHRoaXMucGFyZW50TWVudS5jb250YWluZXIpLHRoaXMucG9zaXRp''@;'; put 'put ''b25lci5zZXRFbGVtZW50KHRoaXMuY29udGFpbmVyKS51cGRhdGVQb3NpdGlvbihsKX11cGRhdGVNZW51RGltZW5zaW9ucygpe2NvbnN0IGw9dGhpcy5ob3RNZW51LnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLHt3dFRhYmxlOmF9PXRoaXMuaG90TWVudS52aWV3Ll93dCxkPXRoaXMuaG90TWVu''@;'; put 'put ''dS5nZXRTZXR0aW5ncygpLmRhdGEsaD1hLmhpZGVyLnN0eWxlLGY9YS5ob2xkZXIuc3R5bGUsdj1wYXJzZUludChoLndpZHRoLDEwKSxNPXF1KGQsKEQsWixyZSk9Pntjb25zdCBiZT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChyZSwwKT9NdSh0aGlzLmhvdE1lbnUuZ2V0Q2VsbChyZSwwKSk6MDty''@;'; put 'put ''ZXR1cm4gRCsoWi5uYW1lPT09c3M/MTpiZSl9LDApO2wuaXNDbGFzc2ljVGhlbWUoKT8oZi53aWR0aD1gJHt2KzN9cHhgLGYuaGVpZ2h0PWAke00rM31weGApOihmLndpZHRoPWAke3Z9cHhgLGYuaGVpZ2h0PWAke019cHhgKSxoLmhlaWdodD1mLmhlaWdodH1jcmVhdGVDb250YWluZXIoKXtj''@;'; put 'put ''b25zdCBhPXRoaXMub3B0aW9ucy5jb250YWluZXIub3duZXJEb2N1bWVudDtsZXQgaCxkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBkJiYobWwoZCkmJihkPWQuY2FsbCh0aGlzLmhvdCksZD1udWxsPT09ZHx8eWMo''@;'; put 'put ''ZCk/IiI6ZC50b1N0cmluZygpKSxkPWQucmVwbGFjZSgvW15BLVphLXowLTldL2csIl8iKSxkPWAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9U3ViXyR7ZH1gLGg9YS5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfS4ke2R9YCkpLGh8fChoPWEuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiZGl2IiksVGkoaCxgaHRNZW51IGhhbmRzb250YWJsZSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmVGkoaCxkKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofW9uQWZ0ZXJJbml0KCl7dGhpcy51cGRhdGVNZW51RGltZW5zaW9ucygpLHRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZvKHRoaXMuaG90TWVudS5yb290RWxlbWVudCxbWyJyb2xlIiwibWVudSJdLEg3KC0xKV0pfW9uRG9jdW1lbnRNb3VzZURvd24obCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUmJnRoaXMuaG90TWVudSYmIUxtKGwu''@;'; put 'put ''dGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1Yk1lbnUoKSkmJiFMbShsLnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5jbG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRNZW51KGwpe3RoaXMuaXNPcGVuZWQoKSYm''@;'; put 'put ''cG8obC50YXJnZXQsImh0Q29yZSIpJiZMbShsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZsLnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIFBKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEdXQoYyl7dmFyIGw9ZnVuY3Rpb24gSXV0KGMsbCl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJl''@;'; put 'put ''dHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBrRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwocV8seTEpO2NvbnN0IFRUPSJjb250ZXh0TWVudSIseDVlPVRUO1NhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVm''@;'; put 'put ''b3JlQ29udGV4dE1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1l''@;'; put 'put ''bnVFeGVjdXRlIik7dmFyIEFUPW5ldyBXZWFrU2V0O2NsYXNzIERGIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEF1dChjLGwpeyhmdW5jdGlvbiBrdXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxBVCksUEoodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgaDVlKHRoaXMuaG90KSksUEoodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxQSih0aGlzLCJt''@;'; put 'put ''ZW51IixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVFR9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1T''@;'; put 'put ''KCl7cmV0dXJuW0NGLFNGLHNzLF9ULHdULHNzLHdGLFNULHNzLE1GLF9GLHNzLENULHNzLEsyXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbVFRdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKClbVFRdOyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IHFfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZp''@;'; put 'put ''ZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT5rRihBVCx0aGlzLE91dCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVu''@;'; put 'put ''IiwoKT0+a0YoQVQsdGhpcyxQdXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5rRihBVCx0aGlzLEZ1dCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGwuZXhlY3V0ZUNvbW1hbmQuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixkPT5rRihBVCx0aGlzLEx1dCkuY2FsbCh0aGlz''@;'; put 'put ''LGQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVu''@;'; put 'put ''dSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW51bGwpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9y''@;'; put 'put ''dGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIkJhY2tzbGFzaCJdLFsiU2hpZnQiLCJGMTAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCk7Y29u''@;'; put 'put ''c3QgYT10aGlzLmhvdC5nZXRDZWxsKGwucm93LGwuY29sLCEwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWZGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2QubGVmdCx0b3A6YS50b3ArZC50b3AtMSthLmhlaWdo''@;'; put 'put ''dH0se2xlZnQ6YS53aWR0aCxhYm92ZTotYS5oZWlnaHR9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0scnVuT25seUlmOigpPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAw''@;'; put 'put ''OmwuaGlnaGxpZ2h0O3JldHVybiBhJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxncm91cDp4NWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIp''@;'; put 'put ''LnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoeDVlKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtpZihudWxsIT09KGE9dGhpcy5tZW51KSYmdm9p''@;'; put 'put ''ZCAwIT09YSYmYS5pc09wZW5lZCgpKXJldHVybjt0aGlzLnByZXBhcmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpO2NvbnN0IGg9dGhpcy5tZW51LnRhYmxlQm9yZGVyV2lkdGg+MDtYbyhkLChmLHYpPT57Y29uc3QgTT1bImJlbG93IiwicmlnaHQiXS5pbmNsdWRlcyh2KT9mKzE6Zi0x''@;'; put 'put ''O3RoaXMubWVudS5zZXRPZmZzZXQodixoP2Y6TSl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCl9Y2xvc2UoKXt2YXIgbDtudWxsPT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGx9ZXhlY3V0ZUNvbW1hbmQobCl7bnVsbD09PXRo''@;'; put 'put ''aXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShsLC4uLmQpfXByZXBh''@;'; put 'put ''cmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgbTVlKHRoaXMuaG90LERGLkRFRkFVTFRfSVRFTVMpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtUVF0sYT17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCl9O3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''ckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGEpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhhLml0ZW1zKTtjb25zdCBkPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixkKSx0''@;'; put 'put ''aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGQpLFluKGQsaD0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGgua2V5LGgpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEx1dChj''@;'; put 'put ''KXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKCksYT1sLnJvd0hlYWRlcnMsZD1sLmNvbEhlYWRlcnMsZj1jLnRhcmdldDtpZih0aGlzLmNsb3NlKCkscG8oZiwiaGFuZHNvbnRhYmxlSW5wdXQiKXx8KGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLCEoYXx8ZHx8''@;'; put 'put ''ZnVuY3Rpb24gaChNKXtyZXR1cm4iVEQiPT09TS5ub2RlTmFtZXx8IlREIj09PU0ucGFyZW50Tm9kZS5ub2RlTmFtZX0oZil8fHBvKGYsImN1cnJlbnQiKSYmcG8oZiwid3RCb3JkZXIiKSkpKXJldHVybjtjb25zdCB2PWZGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3Vt''@;'; put 'put ''ZW50KTt0aGlzLm9wZW4oe3RvcDpjLmNsaWVudFkrdi50b3AsbGVmdDpjLmNsaWVudFgrdi5sZWZ0fSl9ZnVuY3Rpb24gT3V0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gUHV0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29u''@;'; put 'put ''dGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBGdXQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLHRoaXMpfURGLlNFUEFSQVRPUj17bmFtZTpzc307Y2xhc3MgenV0e2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERh''@;'; put 'put ''dGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgVXV0e2NvbnN0cnVjdG9yKCl7dGhpcy5jbGlwYm9hcmREYXRhPW5ldyB6dXR9cHJldmVudERlZmF1bHQoKXt9Y29tcG9zZWRQYXRoKCl7cmV0dXJuW119fWZ1bmN0aW9u''@;'; put 'put ''IFhfKGMsbCxhKXtFNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEU1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSjEoYyxsKXty''@;'; put 'put ''ZXR1cm4gYy5nZXQoUV8oYyxsKSl9ZnVuY3Rpb24gSl8oYyxsLGEpe3JldHVybiBjLnNldChRXyhjLGwpLGEpLGF9ZnVuY3Rpb24gUV8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB0Nj1uZXcgV2Vha01hcCxGSj1uZXcgV2Vha01hcCxrVD1uZXcgV2Vha01hcCxISj1uZXcgV2Vha01hcCxOSj1uZXcgV2Vha01hcCxEVD1uZXcgV2Vha01hcCxJVD1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBXdXR7Y29uc3RydWN0b3IobCl7bGV0e2NvdW50Um93czphLGNvdW50Q29sdW1uczpkLHJvd3NMaW1pdDpoLGNvbHVtbnNMaW1pdDpmLGNvdW50Q29sdW1uSGVhZGVyczp2fT1sOyhmdW5jdGlvbiBadXQoYyxsKXtFNWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsSVQpLFhfKHRoaXMs''@;'; put 'put ''dDYsdm9pZCAwKSxYXyh0aGlzLEZKLHZvaWQgMCksWF8odGhpcyxrVCx2b2lkIDApLFhfKHRoaXMsSEosdm9pZCAwKSxYXyh0aGlzLE5KLHZvaWQgMCksWF8odGhpcyxEVCx2b2lkIDApLEpfKEZKLHRoaXMsYSksSl8oa1QsdGhpcyxkKSxKXyhISix0aGlzLGgpLEpfKE5KLHRoaXMsZiksSl8o''@;'; put 'put ''RFQsdGhpcyx2KX1zZXRTZWxlY3RlZFJhbmdlKGwpe0pfKHQ2LHRoaXMsbCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT1KMShGSix0aGlzKS5jYWxsKHRoaXMpfHwwPT09SjEoa1QsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6YX09SjEodDYsdGhpcykuZ2V0''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PUoxKHQ2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGY9UV8oSVQsdGhpcyxZdXQpLmNhbGwodGhpcyxsLGQpLHY9UV8oSVQsdGhpcyxWSikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09dixz''@;'; put 'put ''dGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOnZ9fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09SjEoa1QsdGhpcykuY2FsbCh0aGlzKXx8MD09PUoxKERULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PUoxKHQ2LHRo''@;'; put 'put ''aXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1KMSh0Nix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPVFfKElULHRoaXMsVkopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6''@;'; put 'put ''ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PUoxKGtULHRoaXMpLmNhbGwodGhpcyl8fDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1KMSh0Nix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09SjEodDYsdGhpcyku''@;'; put 'put ''Z2V0Qm90dG9tRW5kQ29ybmVyKCksZD1RXyhJVCx0aGlzLFZKKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LUoxKERULHRoaXMpLmNhbGwodGhpcyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBWSihjLGwpe3Jl''@;'; put 'put ''dHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrSjEoTkosdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBZdXQoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK0oxKEhKLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gVDVlKGMpe2NvbnN0IGw9W10sYT1bXTty''@;'; put 'put ''ZXR1cm4gWW4oYyxkPT57R2EoTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksRD0+ey0xPT09bC5pbmRleE9mKEQpJiZsLnB1c2goRCl9KSxHYShNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29s''@;'; put 'put ''LGQuZW5kQ29sKSxEPT57LTE9PT1hLmluZGV4T2YoRCkmJmEucHVzaChEKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIG42KGMsbCxhKXtBNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEE1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUlQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uICR1dChjKXt2YXIgbD1mdW5jdGlvbiBLdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIGMuZ2V0KEdkKGMsbCkpfWZ1bmN0aW9uIHAzKGMsbCxhKXtyZXR1cm4gYy5zZXQoR2QoYyxsKSxhKSxhfWZ1bmN0aW9uIEdkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5TGltaXQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3Rlcigi''@;'; put 'put ''bW9kaWZ5Q29weWFibGVSYW5nZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDdXQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDdXQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUGFzdGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYWZ0ZXJQYXN0ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb3B5IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weSIpO2NvbnN0IEJKPSJjb3B5UGFzdGUiLFh1dD1bImZyYWdtZW50U2VsZWN0aW9uIl0sazVlPVsnPG1ldGEgbmFtZT0i''@;'; put 'put ''Z2VuZXJhdG9yIiBjb250ZW50PSJIYW5kc29udGFibGUiLz4nLCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnRke3doaXRlLXNwYWNlOm5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2FtZS1jZWxsfTwvc3R5bGU+J10uam9pbigiIik7dmFyIGpKPW5ldyBXZWFrTWFwLHpKPW5ldyBXZWFr''@;'; put 'put ''TWFwLFVKPW5ldyBXZWFrTWFwLGV3PW5ldyBXZWFrTWFwLElGPW5ldyBXZWFrTWFwLFJGPW5ldyBXZWFrTWFwLHR3PW5ldyBXZWFrTWFwLExGPW5ldyBXZWFrTWFwLFBoPW5ldyBXZWFrU2V0O2NsYXNzIEp1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxm''@;'; put 'put ''dW5jdGlvbiBHdXQoYyxsKXtBNWUoYyxsKSxsLmFkZChjKX0odGhpcyxQaCksUlQodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLFJUKHRoaXMsInJvd3NMaW1pdCIsMS8wKSxSVCh0aGlzLCJwYXN0ZU1vZGUiLCJvdmVyd3JpdGUiKSxSVCh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50LmJvZHkpLG42KHRoaXMsakosITEpLG42KHRoaXMsekosITEpLG42KHRoaXMsVUosITEpLG42KHRoaXMsZXcsImNlbGxzLW9ubHkiKSxuNih0aGlzLElGLCExKSxuNih0aGlzLFJGLCExKSxuNih0aGlzLHR3LG5ldyBXdXQoe2NvdW50Um93czooKT0+dGhpcy5ob3QuY291bnRS''@;'; put 'put ''b3dzKCksY291bnRDb2x1bW5zOigpPT50aGlzLmhvdC5jb3VudENvbHMoKSxyb3dzTGltaXQ6KCk9PnRoaXMucm93c0xpbWl0LGNvbHVtbnNMaW1pdDooKT0+dGhpcy5jb2x1bW5zTGltaXQsY291bnRDb2x1bW5IZWFkZXJzOigpPT50aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3Vu''@;'; put 'put ''dCgpfSkpLG42KHRoaXMsTEYsITEpLFJUKHRoaXMsImNvcHlhYmxlUmFuZ2VzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEJKfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW0JKLC4uLlh1dF19c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g''@;'; put 'put ''ODB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3Bhc3RlTW9kZToib3ZlcndyaXRlIixyb3dzTGltaXQ6MS8wLGNvbHVtbnNMaW1pdDoxLzAsY29weUNvbHVtbkhlYWRlcnM6ITEsY29weUNvbHVtbkdyb3VwSGVhZGVyczohMSxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITF9''@;'; put 'put ''fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtCSl19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYSxkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShsPXRoaXMuZ2V0U2V0dGluZygicGFzdGVNb2RlIikpJiZ2b2lkIDAhPT1sP2w6dGhp''@;'; put 'put ''cy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSk/dGhpcy5yb3dzTGltaXQ6dGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpKT90''@;'; put 'put ''aGlzLmNvbHVtbnNMaW1pdDp0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpLHAzKGpKLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVycyIpKSxwMyh6Six0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkdyb3VwSGVhZGVycyIpKSxwMyhVSix0aGlzLHRo''@;'; put 'put ''aXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnNPbmx5IikpLHRoaXMudWlDb250YWluZXI9bnVsbCE9PShhPXRoaXMuZ2V0U2V0dGluZygidWlDb250YWluZXIiKSkmJnZvaWQgMCE9PWE/YTp0aGlzLnVpQ29udGFpbmVyLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1''@;'; put 'put ''bHRPcHRpb25zIixoPT5HZChQaCx0aGlzLHQwdCkuY2FsbCh0aGlzLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBH''@;'; put 'put ''ZChQaCxkLG4wdCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PkdkKFBoLHRoaXMscjB0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY29weSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5vbkNvcHkoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DdXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJwYXN0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblBhc3RlKC4uLmFyZ3VtZW50cyl9KSxURSgpJiYodGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VlbnRlciIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gR2QoUGgsZCxpMHQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50LmJvZHksIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdkKFBoLGQsYTB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVy''@;'; put 'put ''U2VsZWN0aW9uIiwoKT0+R2QoUGgsdGhpcyxvMHQpLmNhbGwodGhpcykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfWNvcHkoKXtwMyhldyx0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY2VsbHMtb25seSIpLHAzKElGLHRoaXMsITApLEdkKFBoLHRoaXMsRDVlKS5jYWxsKHRoaXMsImNvcHkiKX1jb3B5Q2VsbHNPbmx5''@;'; put 'put ''KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVtbkhlYWRlcnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVycy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5I''@;'; put 'put ''ZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIil9Y3V0KCl7cDMoUkYsdGhpcywhMCksR2QoUGgsdGhpcyxENWUpLmNhbGwodGhpcywiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiBuVCh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdlZERh''@;'; put 'put ''dGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09VDVlKGwpO3JldHVybiBZbihkLGY9Pntjb25zdCB2PVtdO1luKGgsTT0+e3YucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKE0sZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsTSkpfSksYS5wdXNoKHYpfSksYX1w''@;'; put 'put ''YXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgVXV0O2wm''@;'; put 'put ''JmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLm9uUGFzdGUoZCl9c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJl''@;'; put 'put ''dHVybjtpZihsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuIHZvaWQodGhpcy5jb3B5YWJsZVJhbmdlcz1bXSk7WWQodHcsdGhpcykuc2V0U2VsZWN0ZWRSYW5nZShsKTtjb25zdCBhPW5ldyBNYXAoW1siaGVhZGVycyIsbnVsbF0sWyJjZWxscyIsbnVsbF1dKTsiY29sdW1uLWhlYWRlcnMtb25s''@;'; put 'put ''eSI9PT1ZZChldyx0aGlzKT9hLnNldCgiaGVhZGVycyIsWWQodHcsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKTooIndpdGgtY29sdW1uLWhlYWRlcnMiPT09WWQoZXcsdGhpcyk/YS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5I''@;'; put 'put ''ZWFkZXJzUmFuZ2UoKSk6IndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiPT09WWQoZXcsdGhpcykmJmEuc2V0KCJoZWFkZXJzIixZZCh0dyx0aGlzKS5nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKSksYS5zZXQoImNlbGxzIixZZCh0dyx0aGlzKS5nZXRDZWxsc1JhbmdlKCkpKSx0aGlzLmNv''@;'; put 'put ''cHlhYmxlUmFuZ2VzPUFycmF5LmZyb20oYS52YWx1ZXMoKSkuZmlsdGVyKGg9Pm51bGwhPT1oKS5tYXAoaD0+e2xldHtzdGFydFJvdzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkR9PWg7cmV0dXJue3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRDb2w6RH19KSx0aGlz''@;'; put 'put ''LmNvcHlhYmxlUmFuZ2VzPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIix0aGlzLmNvcHlhYmxlUmFuZ2VzKTtjb25zdCBkPWEuZ2V0KCJjZWxscyIpO2lmKG51bGwhPT1kJiZkLmlzUmFuZ2VUcmltbWVkKXtjb25zdHtzdGFydFJvdzpoLHN0YXJ0Q29sOmYsZW5kUm93''@;'; put 'put ''OnYsZW5kQ29sOk19PWQ7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weUxpbWl0Iix2LWgrMSxNLWYrMSx0aGlzLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdCl9fWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8''@;'; put 'put ''fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5sZW5ndGgpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6dixjb2w6TX09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6RCxjb2w6Wn09YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgcmU9dixjZT1NLGJlPXYsRWU9TTtmb3IoO2YubGVuZ3RoPGR8fHJlPD1EOyl7Y29uc3R7c2tp''@;'; put 'put ''cFJvd09uUGFzdGU6QmUsdmlzdWFsUm93OnFlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShyZSxNKTtpZihyZT1xZSsxLCEwPT09QmUpY29udGludWU7YmU9cWUsY2U9TTtjb25zdCBydD1bXSxwdD1mLmxlbmd0aCVkO2Zvcig7cnQubGVuZ3RoPGh8fGNlPD1aOyl7Y29uc3R7c2tpcENvbHVtbk9u''@;'; put 'put ''UGFzdGU6ZHQsdmlzdWFsQ29sOkp0fT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LGNlKTsoY2U9SnQrMSwhMCE9PWR0KSYmKEVlPUp0LHJ0LnB1c2gobFtwdF1bcnQubGVuZ3RoJWhdKSl9Zi5wdXNoKHJ0KX1yZXR1cm4gcDMoTEYsdGhpcywhMCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXko''@;'; put 'put ''dixNLGYsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW3YsTSxiZSxFZV19b25Db3B5KGwpe2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRy''@;'; put 'put ''aWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFZZChJRix0aGlzKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhbUUoYSx0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSxwMyhJRix0aGlzLCExKTtjb25zdCBmPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSx2PUdkKFBoLHRoaXMsUXV0KS5jYWxsKHRoaXMsdGhpcy5jb3B5YWJsZVJhbmdl''@;'; put 'put ''cyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyx2KSl7Y29uc3QgRD1uVChmKTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IFo9JCQoZik7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLEQpLGwuY2xpcGJvYXJk''@;'; put 'put ''RGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtrNWUsWl0uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLEQpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGYsdGhpcy5j''@;'; put 'put ''b3B5YWJsZVJhbmdlcyx2KX1wMyhldyx0aGlzLCJjZWxscy1vbmx5Iil9b25DdXQobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtp''@;'; put 'put ''ZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVlkKFJGLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fEVwKGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiFtRShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHAzKFJGLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDdXQiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IE09blQoZik7''@;'; put 'put ''aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBEPSQkKGYpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixNKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbazVlLERdLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRo''@;'; put 'put ''aXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixNKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDdXQiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9fW9uUGFzdGUobCl7Y29uc3Qg''@;'; put 'put ''YT1sLmNvbXBvc2VkUGF0aCgpWzBdLGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwhdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2VsZWN0ZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIW1FKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bGV0IGY7aWYobC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNsaXBib2FyZERhdGE8InUi''@;'; put 'put ''KXtjb25zdCByZT1JTyhsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9BVFRSOlsiY29udGVudCJdLEZPUkNFX0JPRFk6ITB9KTtmPXJlJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KHJlKT9nZmUocmUsdGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50KS5kYXRhOmwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1IiYmKGY9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRh''@;'; put 'put ''LmdldERhdGEoIlRleHQiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mdW5jdGlvbiBYbnQoYyl7Y29uc3QgbD1bWyIiXV07aWYoMD09PWMubGVuZ3RoKXJldHVybiBsO2xldCBoLGE9MCxkPTA7Zm9yKDtjLmxlbmd0aD4wJiZoIT09Yy5sZW5ndGg7KWlmKGg9Yy5sZW5ndGgsYy5tYXRj''@;'; put 'put ''aChkcGUpKWM9Yy5yZXBsYWNlKGRwZSwiIiksYSs9MSxsW2RdW2FdPSIiO2Vsc2UgaWYoYy5tYXRjaCh1cGUpKWM9Yy5yZXBsYWNlKHVwZSwiIiksYT0wLGQrPTEsbFtkXT1bIiJdO2Vsc2V7bGV0IGY9IiI7aWYoYy5zdGFydHNXaXRoKCciJykpe2xldCB2PTAsTT0hMDtmb3IoO007KXtjb25z''@;'; put 'put ''dCBEPWMuc2xpY2UoMCwxKTsnIic9PT1EJiYodis9MSksZis9RCwoMD09PShjPWMuc2xpY2UoMSkpLmxlbmd0aHx8Yy5tYXRjaCgvXltcdFxyXG5dLykmJnYlMj09MCkmJihNPSExKX1mPWYucmVwbGFjZSgvXiIvLCIiKS5yZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxEPT5uZXcg''@;'; put 'put ''QXJyYXkoTWF0aC5mbG9vcihELmxlbmd0aC8yKSkuZmlsbCgnIicpLmpvaW4oIiIpKX1lbHNle2NvbnN0IHY9Yy5tYXRjaChxbnQpO2Y9dj92WzBdOiIiLGM9Yy5zbGljZShmLmxlbmd0aCl9bFtkXVthXT1mfXJldHVybiBsfShmKSksdm9pZCAwPT09Znx8ZiYmMD09PWYubGVuZ3RofHwhMT09''@;'; put 'put ''PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYXN0ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSlyZXR1cm47Y29uc3RbdixNLEQsWl09dGhpcy5wb3B1bGF0ZVZhbHVlcyhmKTt0aGlzLmhvdC5zZWxlY3RDZWxsKHYsTSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudFJvd3MoKS0xLEQpLE1hdGgu''@;'; put 'put ''bWluKHRoaXMuaG90LmNvdW50Q29scygpLTEsWikpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhc3RlIixmLHRoaXMuY29weWFibGVSYW5nZXMpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEQ1ZShjKXtpZihURSgpKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VMYXN0KCk7aWYobCl7Y29uc3R7cm93OmEsY29sOmR9PWwuaGlnaGxpZ2h0LGg9dGhpcy5ob3QuZ2V0Q2VsbChhLGQsITApO2gmJmoyZShoLCgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfSl9fWVsc2UgdGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21t''@;'; put 'put ''YW5kKGMpfWZ1bmN0aW9uIFF1dChjKXtjb25zdHtyb3dzOmx9PVQ1ZShjKTtsZXQgYT0wO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGgmJiEobFtkXT49MCk7ZCsrKWErPTE7cmV0dXJue2NvbHVtbkhlYWRlcnNDb3VudDphfX1mdW5jdGlvbiBlMHQoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygp''@;'; put 'put ''KXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO2QmJlQkKGQpfX19ZnVuY3Rpb24gSTVlKCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3Qg''@;'; put 'put ''Yz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1jLmhpZ2hsaWdodCxkPXRoaXMuaG90LmdldENlbGwobCxhLCEwKTtudWxsIT1kJiZkLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikmJkEkKGQpfX19ZnVuY3Rpb24gdDB0KGMp''@;'; put 'put ''e2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gSHV0KGMpe3JldHVybntrZXk6ImNvcHkiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHRxKX0sY2FsbGJhY2soKXtjLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5j''@;'; put 'put ''b3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlk''@;'; put 'put ''ZGVuOiExfX0odGhpcykpLFlkKGpKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gQnV0KGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9rcyhsLmdldFdpZHRoKCktMSwwLDEp''@;'; put 'put ''OjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShucSxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigh''@;'; put 'put ''bHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoekosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBWdXQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2Nv''@;'; put 'put ''bHVtbl9ncm91cF9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJxLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFk''@;'; put 'put ''ZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBh''@;'; put 'put ''PXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFlkKFVKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gTnV0KGMpe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9rcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpcSxhKX0sY2FsbGJhY2soKXtjLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1''@;'; put 'put ''cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYy5pdGVtcy5wdXNoKGZ1bmN0aW9u''@;'; put 'put ''IGp1dChjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGFxKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRo''@;'; put 'put ''aXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gbjB0KGMsbCxhLGQsaCl7WWQoTEYsdGhpcykm''@;'; put 'put ''JihoLnZhbHVlPSEwKSxwMyhMRix0aGlzLCExKX1mdW5jdGlvbiByMHQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuc2V0Q29weWFibGVUZXh0KCl9ZnVuY3Rpb24gaTB0KCl7R2QoUGgsdGhpcyxJNWUpLmNh''@;'; put 'put ''bGwodGhpcyl9ZnVuY3Rpb24gYTB0KCl7R2QoUGgsdGhpcyxlMHQpLmNhbGwodGhpcyl9ZnVuY3Rpb24gbzB0KCl7R2QoUGgsdGhpcyxJNWUpLmNhbGwodGhpcyl9ZnVuY3Rpb24gUjVlKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gWkooYyl7dmFyIGwsYTty''@;'; put 'put ''ZXR1cm4oUGEoYy5zdGFydCl8fFBhKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5zdGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChQYShjLmVuZCl8fFBhKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5s''@;'; put 'put ''ZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gT1QoYyl7cmV0dXJuIFBhKGMuc3RhcnQpJiYoYy5sZWZ0PWMuc3RhcnQpLFBhKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gV0ooYyxsKXtyZXR1cm57aWQ6UjVlKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAw''@;'; put 'put ''Iixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7aGlkZTohMH0sc3RhcnQ6e2hpZGU6ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uIEY1KGMsbCl7bGV0IGE9ITE7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgo''@;'; put 'put ''aCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCB2PWMuZ2V0Q2VsbE1ldGEoaCxmKS5ib3JkZXJzO2lmKHYpe2lmKCFsKXJldHVybiBhPSEwLCExO2lmKCFFdSh2W2xdLCJoaWRlIil8fCExPT09dltsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiBPRihjKXtyZXR1''@;'; put 'put ''cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9Y29uc3QgZDB0PW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gZjB0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFu''@;'; put 'put ''c2xhdGVkUGhyYXNlKFNxKTtyZXR1cm4gRjUodGhpcywidG9wIikmJihsPU9GKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9RjUodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiBwMHQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6''@;'; put 'put ''ImVuZCI7cmV0dXJue2tleToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNcSk7cmV0dXJuIEY1KHRoaXMsbCkmJihhPU9GKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9RjUodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19''@;'; put 'put ''ZnVuY3Rpb24gZzB0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhxKTtyZXR1cm4gRjUodGhpcywiYm90dG9tIikmJihsPU9GKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9RjUodGhpcywiYm90dG9tIik7''@;'; put 'put ''Yy5wcmVwYXJlQm9yZGVyKGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiBtMHQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQiOiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEVxKTtyZXR1cm4gRjUodGhp''@;'; put 'put ''cyxsKSYmKGE9T0YoYSkpLGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1GNSh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiB2MHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShU''@;'; put 'put ''cSl9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiFGNSh0aGlzKX19fWZ1bmN0aW9uIEw1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9s''@;'; put 'put ''OmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgUEY9ImN1c3RvbUJvcmRlcnMiO3ZhciBZSj1uZXcgV2Vha1NldDtjbGFzcyBNMHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyksZnVuY3Rpb24gYjB0KGMsbCl7KGZ1bmN0aW9uIHkwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFlK''@;'; put 'put ''KSxmdW5jdGlvbiBfMHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHcwdChjKXt2YXIgbD1mdW5jdGlvbiBDMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl''@;'; put 'put ''dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9LRVkoKXtyZXR1cm4gUEZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1l''@;'; put 'put ''bnVEZWZhdWx0T3B0aW9ucyIsbD0+TDVlKFlKLHRoaXMseDB0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9Pkw1ZShZSix0aGlzLEUwdCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVCb3JkZXJzKCksc3Vw''@;'; put 'put ''ZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnMobCxhKXtsZXQgZD1bInRvcCIsImJvdHRvbSIsInN0''@;'; put 'put ''YXJ0IiwiZW5kIl0saD1udWxsO2EmJih0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbYV0pLGQ9T2JqZWN0LmtleXMoYSksaD1aSihhKSk7Y29uc3Qgdj1RRSh4XyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVD''@;'; put 'put ''ZWxsUmFuZ2U6dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pO1luKGwsTT0+e3YoTSkuZm9yQWxsKChELFopPT57WW4oZCxyZT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChELFosaCxmdW5jdGlvbiBoMHQoYyl7dmFyIGw7cmV0dXJuIG51bGwh''@;'; put 'put ''PT0obD1kMHQuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9KHJlKSl9KX0pfSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRCb3JkZXJzKGwpe2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybiB0aGlzLnNhdmVkQm9yZGVycztjb25zdCBkPVFFKHhfKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRo''@;'; put 'put ''aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpfSksaD1bXTtyZXR1cm4gWW4obCxmPT57ZChmKS5mb3JBbGwoKHYsTSk9PntZbih0aGlzLnNhdmVkQm9yZGVycyxEPT57''@;'; put 'put ''RC5yb3c9PT12JiZELmNvbD09PU0mJmgucHVzaChPVChEKSl9KX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRlcnMobCk6KFluKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVs''@;'; put 'put ''bENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsYSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMu''@;'; put 'put ''cHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9u''@;'; put 'put ''KHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuaG90LmNvdW50Q29scygpO2lmKGw+PWZ8fGE+PXYpcmV0dXJuO2xldCBNPVdKKGwsYSk7ZCYmKE09ZnVu''@;'; put 'put ''Y3Rpb24gbDB0KGMsbCl7cmV0dXJuIEV1KGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxFdShsLCJ0b3AiKSYmUGEobC50b3ApJiYobC50b3A/KHFvKGwudG9wKXx8KGwudG9wPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToobC50b3A9e2hp''@;'; put 'put ''ZGU6ITB9LGMudG9wPWwudG9wKSksRXUobCwiYm90dG9tIikmJlBhKGwuYm90dG9tKSYmKGwuYm90dG9tPyhxbyhsLmJvdHRvbSl8fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRvbT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRvbT1sLmJvdHRv''@;'; put 'put ''bSkpLEV1KGwsInN0YXJ0IikmJlBhKGwuc3RhcnQpJiYobC5zdGFydD8ocW8obC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hpZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLEV1KGwsImVuZCIpJiZQYShsLmVuZCkm''@;'; put 'put ''JihsLmVuZD8ocW8obC5lbmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlkZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShNLGQpLFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxEPT57aWYoTS5pZD09''@;'; put 'put ''PUQuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oRC5zZXR0aW5ncyxkKSxNLmlkPUQuc2V0dGluZ3MuaWQsTS50b3A9RC5zZXR0aW5ncy50b3AsTS5ib3R0b209RC5zZXR0aW5ncy5ib3R0b20sTS5zdGFydD1ELnNldHRpbmdzLnN0YXJ0LE0uZW5kPUQuc2V0dGluZ3MuZW5kLCEx''@;'; put 'put ''fSkpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsT1QoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0saCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5jb3VudFJvd3Mo''@;'; put 'put ''KS0xKSxoPU1hdGgubWluKGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO0dhKGwuZnJvbS5yb3csZCxmPT57R2EobC5mcm9tLmNvbCxoLHY9Pntjb25zdCBNPVdKKGYsdik7bGV0IEQ9MDtmPT09bC5mcm9tLnJvdyYmRXUoYSwidG9wIikmJihEKz0xLE0udG9wPWEudG9wKSxmPT09''@;'; put 'put ''bC50by5yb3cmJkV1KGEsImJvdHRvbSIpJiYoRCs9MSxNLmJvdHRvbT1hLmJvdHRvbSksdj09PWwuZnJvbS5jb2wmJkV1KGEsInN0YXJ0IikmJihEKz0xLE0uc3RhcnQ9YS5zdGFydCksdj09PWwudG8uY29sJiZFdShhLCJlbmQiKSYmKEQrPTEsTS5lbmQ9YS5lbmQpLEQ+MCYmKHRoaXMuaG90''@;'; put 'put ''LnNldENlbGxNZXRhKGYsdiwiYm9yZGVycyIsT1QoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0pKX0pfSl9cmVtb3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9UjVlKGwsYSk7dGhpcy5zcGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0''@;'; put 'put ''dGluZ3MoZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1zZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/WkooZik6V0oo''@;'; put 'put ''bCxhKSxoPyhmW2RdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Qu''@;'; put 'put ''c2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixPVChmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1l''@;'; put 'put ''dGEobCxhLCJib3JkZXJzIixPVChmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe1luKGwsaD0+e2xldHtzdGFydDpmLGVuZDp2fT1oO2lmKGYucm93PT09di5yb3cmJmYuY29sPT09di5jb2wpIm5vQm9yZGVycyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNvbCk6dGhpcy5z''@;'; put 'put ''ZXRCb3JkZXIoZi5yb3csZi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6R2EoZi5jb2wsdi5jb2wsTT0+e0dhKGYucm93LHYucm93LEQ9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMoRCxNKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOkdhKGYuY29sLHYuY29sLE09Pnt0aGlz''@;'; put 'put ''LnNldEJvcmRlcihmLnJvdyxNLGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6R2EoZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9yZGVyKHYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOkdhKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLGYuY29sLGEsZCl9KTticmVh''@;'; put 'put ''aztjYXNlImVuZCI6R2EoZi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sdi5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnMobCl7WW4obCxhPT57Y29uc3QgZD1aSihhKTthLnJhbmdlP3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2Us''@;'; put 'put ''ZCk6dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIHF1KFthLGQsaCxmXSwoTSxEKT0+e2xldCBaPU07cmV0dXJuIEQmJkQuaGlkZSYmKForPTEp''@;'; put 'put ''LFp9LDApfWNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPXlzKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdzLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQu''@;'; put 'put ''Y3VzdG9tU2VsZWN0aW9uc1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe1luKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5j''@;'; put 'put ''dXN0b21TZWxlY3Rpb25zW2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe1luKHRoaXMuc2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0''@;'; put 'put ''aW5ncyhsLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9eXModGhpcy5zYXZlZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQg''@;'; put 'put ''YT0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpZbih0aGlzLnNhdmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2Vs''@;'; put 'put ''ZWN0aW9uc0Zyb21Db250ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0dGluZ3MuaWQpcmV0dXJuIFluKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFn''@;'; put 'put ''ZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKGYpLE09PntNLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJlbW92ZUFsbEJvcmRl''@;'; put 'put ''cnMobC5yb3csbC5jb2wpLGY9ITApOlluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx2PT57aWYobC5pZD09PXYuc2V0dGluZ3MuaWQpcmV0dXJuIHYudmlzdWFsQ2VsbFJhbmdlPWEsdi5jb21taXQoKSxkJiZZbih0aGlzLmhvdC52aWV3Ll93dC5zZWxl''@;'; put 'put ''Y3Rpb25NYW5hZ2VyLmdldEJvcmRlckluc3RhbmNlcyh2KSxEPT57RC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0pLGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbUEZdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9''@;'; put 'put ''ZzEobCk7dGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0''@;'; put 'put ''dGluZ3NDb2hlc2lvbihsKXtjb25zdCBhPWZ1bmN0aW9uIGMwdChjKXtyZXR1cm4gYy5zb21lKGw9PlBhKGwubGVmdCl8fFBhKGwucmlnaHQpKX0obCksZD1mdW5jdGlvbiB1MHQoYyl7cmV0dXJuIGMuc29tZShsPT5QYShsLnN0YXJ0KXx8UGEobC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB4MHQoYyl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQRl0m''@;'; put 'put ''JmMuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0se2tleToiYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ3EpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEobCYmIWwuaXNTaW5nbGVIZWFk''@;'; put 'put ''ZXIoKSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbZjB0KHRoaXMpLHAwdCh0aGlzKSxnMHQodGhpcyksbTB0KHRoaXMpLHYwdCh0aGlzKV19fSl9ZnVuY3Rpb24gRTB0KCl7dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpfWZ1bmN0aW9u''@;'; put 'put ''IEdKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrMHQoYyl7dmFyIGw9ZnVuY3Rpb24gRDB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1s''@;'; put 'put ''OmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFA1ZT0iZHJhZ1RvU2Nyb2xsIjt2YXIgJEo9bmV3IFdlYWtTZXQ7Y2xhc3MgUjB0IGV4''@;'; put 'put ''dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFQwdChjLGwpeyhmdW5jdGlvbiBBMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcywkSiksR0oodGhpcywiYm91bmRhcmllcyIsbnVsbCksR0oodGhpcywiY2FsbGJhY2siLG51bGwpLEdKKHRoaXMsImxpc3RlbmluZyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBQNWV9c3RhdGljIGdldCBQTFVH''@;'; put 'put ''SU5fUFJJT1JJVFkoKXtyZXR1cm4gMTAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQNWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGw9Pk81ZSgkSix0aGlzLEY1ZSkuY2FsbCh0''@;'; put 'put ''aGlzLGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT5PNWUoJEosdGhpcyxGNWUpLmNhbGwodGhpcyxsKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0''@;'; put 'put ''aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcygpe3RoaXMuYm91bmRhcmllcz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1swXT9hcmd1bWVudHNbMF06e2xlZnQ6MCxyaWdodDp0aGlzLmhvdC5yb290V2luZG93LmlubmVyV2lkdGgsdG9wOjAsYm90dG9tOnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJIZWlnaHR9fXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAs''@;'; put 'put ''aD0wO2E8dGhpcy5ib3VuZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRoaXMuYm91bmRhcmllcy5ib3R0b20mJihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5k''@;'; put 'put ''YXJpZXMucmlnaHQmJihkPWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNrKGQsaCl9bGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50''@;'; put 'put ''cygpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''YS5kb2N1bWVudCwibW91c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9VjcoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyLmNsZWFyKCl9b25Nb3VzZU1vdmUobCl7dGhpcy5pc0xpc3RlbmluZygpJiZ0aGlzLmNoZWNrKGwuY2xpZW50WCxsLmNsaWVudFkpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEY1ZShjKXtpZihIbShjKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC53''@;'; put 'put ''dE92ZXJsYXlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7dGhpcy5zZXRCb3VuZGFyaWVzKGwhPT10aGlzLmhvdC5yb290V2luZG93P2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6dm9pZCAwKSx0aGlzLnNldENhbGxiYWNrKChhLGQpPT57dmFyIGgsZjtjb25zdCB2''@;'; put 'put ''PW51bGwhPT0oaD1sLnNjcm9sbExlZnQpJiZ2b2lkIDAhPT1oP2g6bC5zY3JvbGxYLE09bnVsbCE9PShmPWwuc2Nyb2xsVG9wKSYmdm9pZCAwIT09Zj9mOmwuc2Nyb2xsWTtsLnNjcm9sbCh2KzUwKk1hdGguc2lnbihhKSxNKzIwKk1hdGguc2lnbihkKSl9KSx0aGlzLmxpc3RlbigpfWZ1bmN0''@;'; put 'put ''aW9uIEg1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gS0ooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFAwdChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBGMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIE41ZShjLGwsYSl7cmV0dXJuIGMuc2V0KHEyKGMsbCksYSksYX1mdW5jdGlvbiBxMihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6''@;'; put 'put ''Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlv''@;'; put 'put ''bnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksU2Eu''@;'; put 'put ''Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IEZGPSJkcm9wZG93bk1lbnUiLFBUPSJjaGFuZ2VUeXBlIixxSj1GRjt2YXIgSEY9bmV3IFdlYWtNYXAsZzM9bmV3IFdlYWtTZXQ7Y2xhc3MgTkYgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9LRVkoKXtyZXR1cm4gRkZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltfVCx3VCxzcyxTVCxz''@;'; put 'put ''cyx5RixzcyxDVCxzcyxLMl19Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gTDB0KGMsbCl7SDVlKGMsbCksbC5hZGQoYyl9KHRoaXMsZzMpLEtKKHRoaXMsImNvbW1hbmRFeGVjdXRvciIsbmV3IGg1ZSh0aGlzLmhvdCkpLEtKKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksS0oo''@;'; put 'put ''dGhpcywibWVudSIsbnVsbCksZnVuY3Rpb24gTzB0KGMsbCxhKXtINWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLEhGLCExKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnEyKGczLHRoaXMsQjB0KS5jYWxsKHRoaXMsYSxkKSl9aXNFbmFibGVkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaG90LmdldFNldHRpbmdzKClbRkZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgbTVlKHRoaXMuaG90LE5GLkRFRkFVTFRfSVRFTVMpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3du''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBxMihnMyxsLFkwdCkuY2FsbChsLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxs''@;'; put 'put ''eSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gcTIoZzMsbCxXMHQpLmNhbGwobCwuLi5mKX0pO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGRl0sZD17aXRlbXM6''@;'; put 'put ''dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSl9O3RoaXMucmVnaXN0ZXJFdmVudHMoKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soYS5jYWxsYmFjayksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVy''@;'; put 'put ''LmVuYWJsZVBsdWdpbigpLHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGQpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhkLml0ZW1zKTtjb25zdCBoPXRoaXMuaXRlbXNG''@;'; put 'put ''YWN0b3J5LmdldEl0ZW1zKGEpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IHFfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3Vt''@;'; put 'put ''ZW50LmJvZHl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGgpLHRoaXMubWVudS5zZXRNZW51SXRlbXMoaCksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnEyKGczLHRoaXMsajB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUu''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT5xMihnMyx0aGlzLHowdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsZj0+cTIoZzMsdGhpcyxVMHQpLmNhbGwodGhpcyxmKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9z''@;'; put 'put ''ZSIsKCk9PnEyKGczLHRoaXMsWjB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4g''@;'; put 'put ''bC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4udil9KSxZbihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigp''@;'; put 'put ''fWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9KCk9Pntjb25zdHtoaWdobGlnaHQ6ZH09dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigoZC5pc0hlYWRlcigpJiYtMT09PWQucm93fHxkLmlzQ2VsbCgpKSYmZC5jb2w+PTApe3RoaXMuaG90LnNlbGVjdENvbHVtbnMoZC5jb2wsZC5jb2wsLTEpO2NvbnN0e2Zyb206aH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSxmPWZGKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSx2PXRoaXMuaG90LmdldENlbGwoLTEsaC5jb2wsITApLnF1ZXJ5U2VsZWN0b3IoYC4ke1BUfWApLE09di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6TS5sZWZ0K2YubGVmdCx0''@;'; put 'put ''b3A6TS50b3Ardi5vZmZzZXRIZWlnaHQrZi50b3B9LHtsZWZ0Ok0ud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19O3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRT''@;'; put 'put ''aG9ydGN1dHMoW3trZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1k''@;'; put 'put ''P3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNIZWFkZXIoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxjYXB0dXJlQ3RybDohMCxncm91cDpxSn0se2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXV0s''@;'; put 'put ''Y2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdobGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGgpJiZoLmlz''@;'; put 'put ''Q2VsbCgpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOnFKfV0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChxSil9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LCJjbGljayIsbD0+cTIoZzMsdGhpcyxWMHQpLmNhbGwodGhpcyxsKSl9b3BlbihsKXt2YXIgYTtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06''@;'; put 'put ''e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH07bnVsbCE9PShhPXRoaXMubWVudSkmJnZvaWQgMCE9PWEmJmEuaXNPcGVuZWQoKXx8KHRoaXMubWVudS5vcGVuKCksWG8oZCwoaCxmKT0+e3RoaXMubWVudS5zZXRPZmZzZXQoZixoKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKSl9''@;'; put 'put ''Y2xvc2UoKXt2YXIgbDtudWxsPT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNv''@;'; put 'put ''bW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4uZCl9c2V0TGlzdGVuaW5nKCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGw/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhp''@;'; put 'put ''cy5tZW51LmhvdE1lbnUudW5saXN0ZW4oKSl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBWNWUoYyl7Yy5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3tr''@;'; put 'put ''ZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pfWZ1bmN0aW9uIFYwdChjKXtpZihwbyhjLnRhcmdldCxQVCkpe2NvbnN0IGw9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLGE9Yy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCk7Yy5zdG9wUHJvcGFnYXRpb24oKSxONWUoSEYsdGhpcywhMSksdGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtsLmxlZnQsdG9wOmEudG9wK2MudGFyZ2V0Lm9mZnNldEhlaWdodCtsLnRvcH0se2xlZnQ6YS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pfX1mdW5jdGlvbiBCMHQo''@;'; put 'put ''YyxsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtpZighYSlyZXR1cm47Y29uc3QgZD1hLnBhcmVudE5vZGUuY2hpbGROb2RlcyxoPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZCxhKTtpZihjPDB8fGghPT1kLmxlbmd0aC0xKXJldHVybjtjb25zdCBmPWwucXVlcnlTZWxlY3RvcihgLiR7''@;'; put 'put ''UFR9YCk7aWYodGhpcy5lbmFibGVkJiZmKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKGYmJmYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKSk7Y29uc3Qgdj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7di5jbGFzc05hbWU9UFQsdi50''@;'; put 'put ''eXBlPSJidXR0b24iLHYudGFiSW5kZXg9LTEsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKHZvKHYsW043KCksZ0UoIiAiKV0pLHZvKGwsW1MyZSgibWVudSIpXSkpLHYub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxsLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKHYsbC5m''@;'; put 'put ''aXJzdENoaWxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGowdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiB6MHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKSxxMihnMyx0aGlzLFY1ZSku''@;'; put 'put ''Y2FsbCh0aGlzLHRoaXMubWVudSl9ZnVuY3Rpb24gVTB0KGMpe3EyKGczLHRoaXMsVjVlKS5jYWxsKHRoaXMsYyl9ZnVuY3Rpb24gWjB0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZnVuY3Rpb24gVzB0KGMpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBIMHQoYyxsKXtyZXR1cm4gYy5nZXQocTIoYyxsKSl9KEhGLHRoaXMpP251bGw6Y31mdW5jdGlvbiBZMHQoYyl7cG8oYy50YXJnZXQsUFQpJiZONWUoSEYsdGhpcywhMCl9ZnVuY3Rpb24gQjVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBHMHQoYyl7dmFyIGw9ZnVu''@;'; put 'put ''Y3Rpb24gJDB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31ORi5TRVBBUkFUT1I9e25hbWU6c3N9O2NvbnN0IHEwdD1jbGFzcyBLMHR7Y29uc3RydWN0b3IobCl7QjVlKHRoaXMsImhvdCIsdm9pZCAwKSxCNWUodGhpcywib3B0''@;'; put 'put ''aW9ucyIse30pLHRoaXMuaG90PWx9c2V0T3B0aW9ucyhsKXt0aGlzLm9wdGlvbnM9bH1nZXREYXRhKCl7Y29uc3R7c3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpkLGVuZENvbDpofT10aGlzLl9nZXREYXRhUmFuZ2UoKSxmPXRoaXMub3B0aW9ucyx2PVtdO3JldHVybiBHYShsLGQsTT0+''@;'; put 'put ''e2NvbnN0IEQ9W107IWYuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coTSl8fChHYShhLGgsWj0+eyFmLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKFopfHxELnB1c2godGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChNLFopKX0pLHYucHVzaChEKSl9''@;'; put 'put ''KSx2fWdldFJvd0hlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5yb3dIZWFkZXJzKXtjb25zdHtzdGFydFJvdzphLGVuZFJvdzpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldFJvd0hlYWRlcigpO0dhKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRI''@;'; put 'put ''aWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9Z2V0Q29sdW1uSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLmNvbHVtbkhlYWRlcnMpe2NvbnN0e3N0YXJ0Q29sOmEsZW5kQ29sOmR9PXRoaXMuX2dldERhdGFSYW5nZSgp''@;'; put 'put ''LGg9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCk7R2EoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1fZ2V0RGF0YVJhbmdlKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KS0xLGE9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXRbZD0wLGg9MCxmPWEsdj1sXT10aGlzLm9wdGlvbnMucmFuZ2U7cmV0dXJuIGQ9TWF0aC5tYXgoZCwwKSxoPU1hdGgubWF4KGgsMCksZj1NYXRoLm1pbihmLGEpLHY9TWF0aC5taW4odixsKSx7c3RhcnRSb3c6ZCxzdGFydENvbDpoLGVu''@;'; put 'put ''ZFJvdzpmLGVuZENvbDp2fX1faXNIaWRkZW5Sb3cobCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfV9pc0hpZGRlbkNvbHVtbihsKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhp''@;'; put 'put ''cy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9fTtmdW5jdGlvbiBqNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFgwdChjKXt2YXIgbD1mdW5jdGlvbiBKMHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFhKe3N0''@;'; put 'put ''YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFk''@;'; put 'put ''ZXJzOiExLGV4cG9ydEhpZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxhKXtqNWUodGhpcywiZGF0YVByb3ZpZGVyIix2b2lkIDApLGo1ZSh0aGlzLCJvcHRpb25zIix2b2lkIDApLHRoaXMuZGF0YVByb3ZpZGVyPWwsdGhpcy5vcHRp''@;'; put 'put ''b25zPXRoaXMuX21lcmdlT3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9X21lcmdlT3B0aW9ucyhsKXtsZXQgYT1uMyh0aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyk7Y29uc3QgZD1uZXcgRGF0ZTtyZXR1cm4gYT14dShuMyhYSi5E''@;'; put 'put ''RUZBVUxUX09QVElPTlMpLGEpLGE9eHUoYSxsKSxhLmZpbGVuYW1lPWgkKGEuZmlsZW5hbWUse1lZWVk6ZC5nZXRGdWxsWWVhcigpLE1NOmAke2QuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke2QuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksYX19Y29uc3QgUTB0''@;'; put 'put ''PVhKO2Z1bmN0aW9uIHo1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFy''@;'; put 'put ''IEpKPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIHUxdChjKXtyZXR1cm4gYy5zdGFydHNXaXRoKCI9Iil8fGMuc3RhcnRzV2l0aCgiKyIpfHxjLnN0YXJ0c1dpdGgoIi0iKXx8Yy5zdGFydHNXaXRoKCJAIil8fGMuc3RhcnRzV2l0aCgiXHQiKXx8Yy5zdGFydHNXaXRoKCJcciIpP2AnJHtjfWA6Y31m''@;'; put 'put ''dW5jdGlvbiBkMXQoYyxsKXtyZXR1cm4gbC50ZXN0KGMpP2AnJHtjfWA6Y31jb25zdCBRSj17Y3N2OmNsYXNzIGMxdCBleHRlbmRzIFEwdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZTF0KGMsbCl7KGZ1bmN0aW9uIHQxdChjLGwpe2lmKGwuaGFzKGMpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEpKKX1zdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9jc3Yi''@;'; put 'put ''LGZpbGVFeHRlbnNpb246ImNzdiIsYm9tOiEwLGNvbHVtbkRlbGltaXRlcjoiLCIscm93RGVsaW1pdGVyOiJcclxuIixzYW5pdGl6ZVZhbHVlczohMX19ZXhwb3J0KCl7Y29uc3QgbD10aGlzLm9wdGlvbnMsYT10aGlzLmRhdGFQcm92aWRlci5nZXREYXRhKCk7bGV0IGQ9dGhpcy5kYXRhUHJv''@;'; put 'put ''dmlkZXIuZ2V0Q29sdW1uSGVhZGVycygpO2NvbnN0IGg9ZC5sZW5ndGg+MCxmPXRoaXMuZGF0YVByb3ZpZGVyLmdldFJvd0hlYWRlcnMoKSx2PWYubGVuZ3RoPjA7bGV0IE09bC5ib20/Ilx1ZmVmZiI6IiI7cmV0dXJuIGgmJihkPXlzKGQsRD0+dGhpcy5fZXNjYXBlQ2VsbChELHtmb3JjZToh''@;'; put 'put ''MCxzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSksdiYmKE0rPWwuY29sdW1uRGVsaW1pdGVyKSxNKz1kLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIpLE0rPWwucm93RGVsaW1pdGVyKSxZbihhLChELFopPT57Wj4wJiYoTSs9bC5yb3dEZWxpbWl0ZXIpLHYmJihNKz10aGlzLl9lc2Nh''@;'; put 'put ''cGVDZWxsKGZbWl0se3Nhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pLE0rPWwuY29sdW1uRGVsaW1pdGVyKTtjb25zdCByZT1ELm1hcChjZT0+dGhpcy5fZXNjYXBlQ2VsbChjZSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSkpLmpvaW4obC5jb2x1bW5EZWxpbWl0ZXIp''@;'; put 'put ''O00rPXJlfSksTX1fZXNjYXBlQ2VsbChsKXtsZXR7Zm9yY2U6YT0hMSxzYW5pdGl6ZVZhbHVlOmQ9ITF9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxoPWxjKGwpO3JldHVybiIiPT09aHx8KGQmJihhPSEwKSxkIGluc3RhbmNlb2Yg''@;'; put 'put ''UmVnRXhwP2g9ejVlKEpKLHRoaXMsZDF0KS5jYWxsKHRoaXMsaCxkKToiZnVuY3Rpb24iPT10eXBlb2YgZD9oPWQoaCk6ZCYmKGg9ejVlKEpKLHRoaXMsdTF0KS5jYWxsKHRoaXMsaCkpLChhfHxoLmluZGV4T2YoIlxyIik+PTB8fGguaW5kZXhPZignIicpPj0wfHxoLmluZGV4T2YoIlxuIik+''@;'; put 'put ''PTB8fGguaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihoPWgucmVwbGFjZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLGg9YCIke2h9ImApKSxofX19O2NsYXNzIHYxdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJleHBvcnRG''@;'; put 'put ''aWxlIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNDB9aXNFbmFibGVkKCl7cmV0dXJuITB9ZXhwb3J0QXNTdHJpbmcobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06e30pLmV4cG9ydCgpfWV4cG9ydEFzQmxvYihsKXtyZXR1cm4gdGhpcy5fY3JlYXRlQmxvYih0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KSl9ZG93bmxvYWRGaWxlKGwp''@;'; put 'put ''e2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9dGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGEpLHY9dGhpcy5fY3JlYXRlQmxvYihmKSxN''@;'; put 'put ''PWguVVJMfHxoLndlYmtpdFVSTCxEPWQuY3JlYXRlRWxlbWVudCgiYSIpLFo9YCR7Zi5vcHRpb25zLmZpbGVuYW1lfS4ke2Yub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09RC5kb3dubG9hZCl7Y29uc3QgcmU9TS5jcmVhdGVPYmplY3RVUkwodik7RC5zdHlsZS5kaXNwbGF5''@;'; put 'put ''PSJub25lIixELnNldEF0dHJpYnV0ZSgiaHJlZiIscmUpLEQuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsWiksZC5ib2R5LmFwcGVuZENoaWxkKEQpLEQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKEQpLHNldFRpbWVvdXQoKCk9PntN''@;'; put 'put ''LnJldm9rZU9iamVjdFVSTChyZSl9LDEwMCl9ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IodixaKX1fY3JlYXRlVHlwZUZvcm1hdHRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06e307aWYoIVFKW2xdKXRocm93IG5ldyBFcnJvcihgRXhwb3J0IGZvcm1hdCB0eXBlICIke2x9IiBpcyBub3Qgc3VwcG9ydGVkLmApO3JldHVybiBmdW5jdGlvbiBwMXQoYyxsLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBRSltjXT9uZXcgUUpbY10obCxhKTpudWxs''@;'; put 'put ''fShsLG5ldyBxMHQodGhpcy5ob3QpLGEpfV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmKGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5taW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9''@;'; put 'put ''fWZ1bmN0aW9uIG53KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiMXQoYyl7dmFyIGw9ZnVuY3Rpb24geTF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBGVHtjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRl''@;'; put 'put ''bGVzczpoPSEwfT1hO253KHRoaXMsImhvdCIsdm9pZCAwKSxudyh0aGlzLCJpZCIsdm9pZCAwKSxudyh0aGlzLCJlbGVtZW50cyIsW10pLG53KHRoaXMsImhpZGRlbiIsITEpLG53KHRoaXMsInN0YXRlSWQiLCIiKSxudyh0aGlzLCJzdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuaWQ9''@;'; put 'put ''ZCx0aGlzLnN0YXRlSWQ9YEZpbHRlcnMuY29tcG9uZW50LiR7dGhpcy5pZH1gLHRoaXMuc3RhdGU9aD9udWxsOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCxuZXcgcFApfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHN9cmVzZXQo''@;'; put 'put ''KXtZbih0aGlzLmVsZW1lbnRzLGw9PmwucmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlkZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0hMX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRl''@;'; put 'put ''KHRoaXMuc3RhdGUuZ2V0VmFsdWVBdEluZGV4KGwpKX1zZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIHNldHRpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5n''@;'; put 'put ''ZXRTdGF0ZSgpKX1nZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpLHRoaXMuY2xlYXJMb2Nh''@;'; put 'put ''bEhvb2tzKCksWW4odGhpcy5lbGVtZW50cyxsPT5sLmRlc3Ryb3koKSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuZWxlbWVudHM9bnVsbCx0aGlzLmhvdD1udWxsfX1UbChGVCx5MSk7Y29uc3QgSFQ9e307ZnVuY3Rpb24gcjYoYyxsKXtpZighSFRbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25k''@;'; put 'put ''aXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0e2NvbmRpdGlvbjphLGRlc2NyaXB0b3I6ZH09SFRbY107bGV0IGg9bDtyZXR1cm4gZC5pbnB1dFZhbHVlc0RlY29yYXRvciYmKGg9ZC5pbnB1dFZhbHVlc0RlY29yYXRvcihoKSksZnVuY3Rpb24oZil7cmV0dXJuIGEuYXBwbHko''@;'; put 'put ''Zi5tZXRhLmluc3RhbmNlLFtdLmNvbmNhdChbZl0sW2hdKSl9fWZ1bmN0aW9uIF85KGMpe2lmKCFIVFtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIEhUW2NdLmRlc2NyaXB0b3J9ZnVuY3Rpb24gQXUoYyxsLGEpe2Eua2V5''@;'; put 'put ''PWMsSFRbY109e2NvbmRpdGlvbjpsLGRlc2NyaXB0b3I6YX19Y29uc3QgRTA9Im5vbmUiO0F1KEUwLGZ1bmN0aW9uIF8xdCgpe3JldHVybiEwfSx7bmFtZTp3UCxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBOVD0iZW1wdHkiO0F1KE5ULGZ1bmN0aW9uIHcxdChjKXty''@;'; put 'put ''ZXR1cm4gVWMoYy52YWx1ZSl9LHtuYW1lOk9xLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFZGPSJub3RfZW1wdHkiO0F1KFZGLGZ1bmN0aW9uIEMxdChjLGwpe3JldHVybiFyNihOVCxsKShjKX0se25hbWU6UHEsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEw''@;'; put 'put ''fSk7Y29uc3QgVlQ9ImVxIjtBdShWVCxmdW5jdGlvbiBTMXQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSk9PT1sYyhhKX0se25hbWU6RnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQkY9Im5l''@;'; put 'put ''cSI7QXUoQkYsZnVuY3Rpb24gTTF0KGMsbCl7cmV0dXJuIXI2KFZULGwpKGMpfSx7bmFtZTpIcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxBdSgiZ3QiLGZ1bmN0aW9uIHgxdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFy''@;'; put 'put ''c2VGbG9hdChkLDEwKSksYy52YWx1ZT5kfSx7bmFtZTp6cSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxBdSgiZ3RlIixmdW5jdGlvbiBFMXQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFs''@;'; put 'put ''dWU+PWR9LHtuYW1lOlVxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLEF1KCJsdCIsZnVuY3Rpb24gVDF0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPGR9LHtuYW1lOlpxLGlucHV0''@;'; put 'put ''c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLEF1KCJsdGUiLGZ1bmN0aW9uIEExdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTw9ZH0se25hbWU6V3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0''@;'; put 'put ''b3JzOiEwfSk7Y29uc3QgZVE9ImRhdGVfYWZ0ZXIiO0F1KGVRLGZ1bmN0aW9uIGsxdChjLGwpe2xldFthXT1sO2NvbnN0IGQ9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1PbyhhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYm''@;'; put 'put ''ZC5kaWZmKGgpPj0wfSx7bmFtZTokcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB0UT0iZGF0ZV9iZWZvcmUiO0F1KHRRLGZ1bmN0aW9uIEQxdChjLGwpe2xldFthXT1sO2NvbnN0IGQ9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1PbyhhLGMubWV0YS5k''@;'; put 'put ''YXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPD0wfSx7bmFtZTpLcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBqRj0iYmV0d2VlbiI7QXUoakYsZnVuY3Rpb24gSTF0KGMsbCl7bGV0W2EsZF09bCxoPWEsZj1k''@;'; put 'put ''O2lmKCJudW1lcmljIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXBhcnNlRmxvYXQoaCwxMCksTT1wYXJzZUZsb2F0KGYsMTApO2g9TWF0aC5taW4odixNKSxmPU1hdGgubWF4KHYsTSl9ZWxzZSBpZigiZGF0ZSI9PT1jLm1ldGEudHlwZSl7Y29uc3Qgdj1yNih0USxbZl0pLE09cjYoZVEsW2hd''@;'; put 'put ''KTtyZXR1cm4gdihjKSYmTShjKX1yZXR1cm4gYy52YWx1ZT49aCYmYy52YWx1ZTw9Zn0se25hbWU6WXEsaW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgJDVlPSJub3RfYmV0d2VlbiI7QXUoJDVlLGZ1bmN0aW9uIFIxdChjLGwpe3JldHVybiFyNihqRixsKShjKX0se25h''@;'; put 'put ''bWU6R3EsaW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgSzVlPSJiZWdpbnNfd2l0aCI7QXUoSzVlLGZ1bmN0aW9uIEwxdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5zdGFydHNXaXRoKGxjKGEp''@;'; put 'put ''KX0se25hbWU6TnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQXUoImVuZHNfd2l0aCIsZnVuY3Rpb24gTzF0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmVuZHNXaXRoKGxjKGEpKX0se25hbWU6VnEs''@;'; put 'put ''aW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgblE9ImNvbnRhaW5zIjtBdShuUSxmdW5jdGlvbiBQMXQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuaW5kZXhPZihsYyhhKSk+PTB9LHtuYW1lOkJx''@;'; put 'put ''LGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFg1ZT0ibm90X2NvbnRhaW5zIjtBdShYNWUsZnVuY3Rpb24gRjF0KGMsbCl7cmV0dXJuIXI2KG5RLGwpKGMpfSx7bmFtZTpqcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBKNWU9ImRhdGVfdG9t''@;'; put 'put ''b3Jyb3ciO0F1KEo1ZSxmdW5jdGlvbiBIMXQoYyl7Y29uc3QgbD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShPbygpLnN1YnRyYWN0KC0xLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6WHEsaW5wdXRzQ291bnQ6''@;'; put 'put ''MH0pO2NvbnN0IFE1ZT0iZGF0ZV90b2RheSI7QXUoUTVlLGZ1bmN0aW9uIE4xdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6cXEsaW5wdXRzQ291bnQ6''@;'; put 'put ''MH0pO2NvbnN0IGVnZT0iZGF0ZV95ZXN0ZXJkYXkiO0F1KGVnZSxmdW5jdGlvbiBWMXQoYyl7Y29uc3QgbD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShPbygpLnN1YnRyYWN0KDEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIp''@;'; put 'put ''fSx7bmFtZTpKcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgbmdlPXtudW1lcmljOltFMCxzcyxOVCxWRixzcyxWVCxCRixzcywiZ3QiLCJndGUiLCJsdCIsImx0ZSIsakYsJDVlXSx0ZXh0OltFMCxzcyxOVCxWRixzcyxWVCxCRixzcyxLNWUsImVuZHNfd2l0aCIsc3MsblEsWDVlXSxkYXRlOltF''@;'; put 'put ''MCxzcyxOVCxWRixzcyxWVCxCRixzcyx0USxlUSxqRixzcyxKNWUsUTVlLGVnZV19O2Z1bmN0aW9uIEJUKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVMXQoYyl7dmFyIGw9ZnVuY3Rpb24gWjF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJv''@;'; put 'put ''bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o''@;'; put 'put ''InN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY31jb25zdCByUT0iYnVpbHQiLGlRPSJidWlsZGluZyIscmdlPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgRmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7Y2xhc3NOYW1l''@;'; put 'put ''OiIiLHZhbHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXtCVCh0aGlzLCJob3QiLHZvaWQgMCksQlQodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLEJUKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksQlQodGhpcywiX2Vs''@;'; put 'put ''ZW1lbnQiLHZvaWQgMCksQlQodGhpcywiYnVpbGRTdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz14dShGaC5ERUZBVUxUUyxhKSx0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy53cmFwSXQ/ImRpdiI6dGhp''@;'; put 'put ''cy5vcHRpb25zLnRhZ05hbWUpfXNldFZhbHVlKGwpe3RoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PWlRP3RoaXMuX2VsZW1lbnQ6dGhpcy5i''@;'; put 'put ''dWlsZFN0YXRlPT09clE/KHRoaXMudXBkYXRlKCksdGhpcy5fZWxlbWVudCk6KHRoaXMuYnVpbGRTdGF0ZT1pUSx0aGlzLmJ1aWxkKCksdGhpcy5idWlsZFN0YXRlPXJRLHRoaXMuX2VsZW1lbnQpfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09clF9dHJhbnNsYXRlSWZQb3Nz''@;'; put 'put ''aWJsZShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJmwuc3RhcnRzV2l0aChxMSk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShsKTpsfWJ1aWxkKCl7Y29uc3QgbD0oYSxkKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGg9PnRoaXMucnVuTG9jYWxI''@;'; put 'put ''b29rcyhkLGgsdGhpcykpfTtpZih0aGlzLmJ1aWxkU3RhdGV8fCh0aGlzLmJ1aWxkU3RhdGU9aVEpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLHZvaWQgMCE9PXRoaXMub3B0aW9ucy50YWJJbmRleCYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''InRhYmluZGV4Iix0aGlzLm9wdGlvbnMudGFiSW5kZXgpLHZvaWQgMCE9PXRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsdGhpcy5vcHRpb25zLnJvbGUpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJlRpKHRoaXMuX2VsZW1lbnQsdGhpcy5vcHRp''@;'; put 'put ''b25zLmNsYXNzTmFtZSksdGhpcy5vcHRpb25zLmNoaWxkcmVuLmxlbmd0aClZbih0aGlzLm9wdGlvbnMuY2hpbGRyZW4sYT0+dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhLmVsZW1lbnQpKTtlbHNlIGlmKHRoaXMub3B0aW9ucy53cmFwSXQpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnRhZ05hbWUpO2Euc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLFhvKHRoaXMub3B0aW9ucywoZCxoKT0+e3ZvaWQgMCE9PWFbaF0mJiJjbGFzc05hbWUiIT09aCYmInRhZ05hbWUiIT09aCYmImNoaWxkcmVuIiE9PWgmJihh''@;'; put 'put ''W2hdPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShkKSl9KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLFluKHJnZSxkPT5sKGEsZCkpfWVsc2UgWW4ocmdlLGE9PmwodGhpcy5fZWxlbWVudCxhKSl9dXBkYXRlKCl7fXJlc2V0KCl7dGhpcy5vcHRpb25zLnZhbHVlPSIiLHRoaXMudXBk''@;'; put 'put ''YXRlKCl9c2hvdygpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifWhpZGUoKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9Zm9jdXMoKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMuaG90PW51''@;'; put 'put ''bGwsdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsfX1mdW5jdGlvbiBpZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHpGKGMsbCl7cmV0dXJuIGMuZ2V0KGFRKGMsbCkpfWZ1bmN0aW9uIGFRKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChGaCx5MSk7dmFyIHJ3PW5ldyBXZWFrTWFwLGFnZT1uZXcgV2Vha1NldDtjbGFzcyBpNiBleHRlbmRzIEZoe3N0YXRpYyBnZXQgREVGQVVM''@;'; put 'put ''VFMoKXtyZXR1cm4gbjMoe3BsYWNlaG9sZGVyOiIiLHR5cGU6InRleHQiLHRhZ05hbWU6ImlucHV0Iix0YWJJbmRleDotMX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx4dShpNi5ERUZBVUxUUyxhKSksZnVuY3Rpb24gVzF0KGMsbCl7aWdlKGMsbCksbC5hZGQoYyl9KHRoaXMsYWdlKSxm''@;'; put 'put ''dW5jdGlvbiBZMXQoYyxsLGEpe2lnZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMscncsdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImtleXVwIixsPT5hUShhZ2UsdGhpcywkMXQpLmNhbGwodGhpcyxsKSl9YnVpbGQoKXtzdXBl''@;'; put 'put ''ci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyhmdW5jdGlvbiBHMXQoYyxsLGEpe2Muc2V0KGFRKGMsbCksYSl9KShydyx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCksVGkodGhpcy5fZWxlbWVudCwiaHRVSUlucHV0Iiks''@;'; put 'put ''VGkobCwiaHRVSUlucHV0SWNvbiIpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKHpGKHJ3LHRoaXMpLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsekYocncsdGhpcykucGxhY2Vob2xkZXI9dGhpcy50cmFuc2xhdGVJ''@;'; put 'put ''ZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciksekYocncsdGhpcykudmFsdWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy52YWx1ZSkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnpGKHJ3LHRoaXMpLmZvY3VzKCl9fWZ1bmN0aW9uICQxdChjKXt0aGlz''@;'; put 'put ''Lm9wdGlvbnMudmFsdWU9Yy50YXJnZXQudmFsdWV9ZnVuY3Rpb24galQoYyxsLGEpe29nZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gb2dlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0''@;'; put 'put ''d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBpdyhjLGwsYSl7cmV0dXJuIGMuc2V0KHpUKGMsbCksYSksYX1mdW5jdGlvbiAkYyhjLGwpe3JldHVybiBjLmdldCh6VChjLGwpKX1mdW5jdGlvbiB6VChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0''@;'; put 'put ''dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGcwPW5ldyBXZWFrTWFwLFVGPW5ldyBXZWFrTWFwLFpGPW5ldyBXZWFrTWFwLG9RPW5ldyBXZWFrTWFwLFdGPW5l''@;'; put 'put ''dyBXZWFrTWFwLFlGPW5ldyBXZWFrU2V0O2NsYXNzIFVUIGV4dGVuZHMgRmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITEsdGFiSW5kZXg6LTF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwseHUoVVQuREVGQVVMVFMs''@;'; put 'put ''YSkpLGZ1bmN0aW9uIEsxdChjLGwpe29nZShjLGwpLGwuYWRkKGMpfSh0aGlzLFlGKSxqVCh0aGlzLGcwLG51bGwpLGpUKHRoaXMsVUYsW10pLGpUKHRoaXMsWkYsdm9pZCAwKSxqVCh0aGlzLG9RLHZvaWQgMCksalQodGhpcyxXRix2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldE1l''@;'; put 'put ''bnUoKXtyZXR1cm4gJGMoZzAsdGhpcyl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsKCk9PnpUKFlGLHRoaXMsSjF0KS5jYWxsKHRoaXMpKX1zZXRJdGVtcyhsKXtpdyhVRix0aGlzLHRoaXMudHJhbnNsYXRlTmFtZXMobCkpLCRjKGcwLHRoaXMpJiYkYyhnMCx0''@;'; put 'put ''aGlzKS5zZXRNZW51SXRlbXMoJGMoVUYsdGhpcykpfXRyYW5zbGF0ZU5hbWVzKGwpe3JldHVybiBZbihsLGE9PnthLm5hbWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGEubmFtZSl9KSxsfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxpdyhnMCx0aGlzLG5ldyBxXyh0aGlzLmhvdCx7Y2xhc3NO''@;'; put 'put ''YW1lOiJodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IixrZWVwSW5WaWV3cG9ydDohMSxzdGFuZGFsb25lOiEwLGNvbnRhaW5lcjp0aGlzLm9wdGlvbnMubWVudUNvbnRhaW5lcn0pKSwkYyhnMCx0aGlzKS5zZXRNZW51SXRlbXMoJGMoVUYsdGhpcykpO2NvbnN0IGw9bmV3IEZo''@;'; put 'put ''KHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3RDYXB0aW9uIn0pLGE9bmV3IEZoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3REcm9wZG93biJ9KTtpdyhaRix0aGlzLGwpLGl3KG9RLHRoaXMsbC5lbGVtZW50KSxpdyhXRix0aGlzLGEpLHRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KCkuYXJpYVRhZ3MmJih2byhhLmVsZW1lbnQsW043KCldKSx2byh0aGlzLl9lbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il1dKSksWW4oW2wsYV0sZD0+dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSwkYyhnMCx0aGlzKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsZD0+elQo''@;'; put 'put ''WUYsdGhpcyxxMXQpLmNhbGwodGhpcyxkKSksJGMoZzAsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+elQoWUYsdGhpcyxYMXQpLmNhbGwodGhpcykpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtsZXQgbDtsPXRoaXMub3B0aW9u''@;'; put 'put ''cy52YWx1ZT90aGlzLm9wdGlvbnMudmFsdWUubmFtZTokYyhnMCx0aGlzKS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh3UCksJGMob1EsdGhpcykudGV4dENvbnRlbnQ9bCxzdXBlci51cGRhdGUoKX1vcGVuT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50''@;'; put 'put ''UmVjdCgpOyRjKGcwLHRoaXMpJiYoJGMoZzAsdGhpcykub3BlbigpLCRjKGcwLHRoaXMpLnNldFBvc2l0aW9uKHtsZWZ0OnRoaXMuaG90LmlzTHRyKCk/bC5sZWZ0LTU6bC5sZWZ0LTMxLHRvcDpsLnRvcC0xLHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0fSksJGMoZzAsdGhpcykuZ2V0''@;'; put 'put ''TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKSwkYyhnMCx0aGlzKS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6YT0+e3RoaXMuY2xvc2VPcHRpb25zKCksdGhpcy5ydW5Mb2NhbEhv''@;'; put 'put ''b2tzKCJ0YWJLZXlkb3duIixhKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pKX1jbG9zZU9wdGlvbnMoKXskYyhnMCx0aGlzKSYmJGMoZzAsdGhpcykuY2xvc2UoKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKX1k''@;'; put 'put ''ZXN0cm95KCl7JGMoZzAsdGhpcykmJigkYyhnMCx0aGlzKS5kZXN0cm95KCksaXcoZzAsdGhpcyxudWxsKSksJGMoWkYsdGhpcykmJiRjKFpGLHRoaXMpLmRlc3Ryb3koKSwkYyhXRix0aGlzKSYmJGMoV0YsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcTF0KGMp''@;'; put 'put ''e2MubmFtZSE9PXNzJiYodGhpcy5vcHRpb25zLnZhbHVlPWMsdGhpcy51cGRhdGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsdGhpcy5vcHRpb25zLnZhbHVlKSl9ZnVuY3Rpb24gWDF0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIil9ZnVuY3Rpb24gSjF0KCl7dGhp''@;'; put 'put ''cy5vcGVuT3B0aW9ucygpfWZ1bmN0aW9uIHNnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdGR0KGMpe3ZhciBsPWZ1bmN0aW9uIG5kdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbGdlKGMsbCxhKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgc1E9bmV3IFdlYWtTZXQ7Y2xhc3MgbFEgZXh0''@;'; put 'put ''ZW5kcyBGVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gUTF0KGMsbCl7KGZ1bmN0aW9uIGVkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl''@;'; put 'put ''bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHNRKSxzZ2UodGhpcywibmFtZSIsIiIpLHNnZSh0aGlzLCJhZGRTZXBhcmF0b3IiLCExKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYWRkU2VwYXJhdG9yPWEuYWRkU2VwYXJhdG9yLHRoaXMuZWxlbWVudHMu''@;'; put 'put ''cHVzaChuZXcgVVQodGhpcy5ob3Qse21lbnVDb250YWluZXI6YS5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgaTYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOnNYfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgaTYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOmxYfSkpLHRo''@;'; put 'put ''aXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsbD0+bGdlKHNRLHRoaXMscmR0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMucnVuTG9jYWxIb29rcygi''@;'; put 'put ''YWZ0ZXJDbG9zZSIpKS5hZGRMb2NhbEhvb2soInRhYktleWRvd24iLGw9PnRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0VGFiS2V5ZG93biIsbCkpLFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGw9PntsLmFkZExvY2FsSG9vaygia2V5ZG93biIsYT0+bGdlKHNRLHRoaXMsaWR0KS5jYWxs''@;'; put 'put ''KHRoaXMsYSkpfSl9c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLCFsKXJldHVybjtjb25zdCBhPW4zKGwuY29tbWFuZCk7YS5uYW1lLnN0YXJ0c1dpdGgoV2MpJiYoYS5uYW1lPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoYS5uYW1lKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCku''@;'; put 'put ''c2V0VmFsdWUoYSksWW4obC5hcmdzLChkLGgpPT57aWYoaD5hLmlucHV0c0NvdW50LTEpcmV0dXJuITE7Y29uc3QgZj10aGlzLmdldElucHV0RWxlbWVudChoKTtmLnNldFZhbHVlKGQpLGZbYS5pbnB1dHNDb3VudD5oPyJzaG93IjoiaGlkZSJdKCksaHx8dGhpcy5ob3QuX3JlZ2lzdGVyVGlt''@;'; put 'put ''ZW91dCgoKT0+Zi5mb2N1cygpLDEwKX0pfWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5nZXRWYWx1ZSgpfHxfOShFMCksYT1bXTtyZXR1cm4gWW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksKGQsaCk9PntsLmlucHV0c0NvdW50PmgmJmEucHVzaChkLmdldFZh''@;'; put 'put ''bHVlKCkpfSkse2NvbW1hbmQ6bCxhcmdzOmF9fXVwZGF0ZVN0YXRlKGwsYSl7Y29uc3QgZD1fOShsP2wubmFtZTpFMCk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYSx7Y29tbWFuZDpkLGFyZ3M6bD9sLmFyZ3M6W119KSxsfHxZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxoPT5oLnNl''@;'; put 'put ''dFZhbHVlKG51bGwpKX1nZXRTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBVVClbMF19Z2V0SW5wdXRFbGVtZW50KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7''@;'; put 'put ''cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2xdfWdldElucHV0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIGk2KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21t''@;'; put 'put ''YW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2KT0+e1RpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLHRoaXMuYWRkU2VwYXJhdG9yJiZUaShhLnBhcmVudE5vZGUsImJvcmRlciIp''@;'; put 'put ''O2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxZ''@;'; put 'put ''bih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO2xldCBhPVtfOShFMCldO2lmKG51bGwhPT1sKXtjb25zdHt2aXN1YWxJbmRleDpkfT1s''@;'; put 'put ''O2E9ZnVuY3Rpb24gejF0KGMpe2NvbnN0IGw9W107bGV0IGE9YztyZXR1cm4gbmdlW2FdfHwoYT0idGV4dCIpLFluKG5nZVthXSxkPT57bGV0IGg7aD1kPT09c3M/e25hbWU6c3N9Om4zKF85KGQpKSxsLnB1c2goaCl9KSxsfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLGQsdGhpcy5ob3QuY291''@;'; put 'put ''bnRSb3dzKCksZCkpfVluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGQ9PmQuaGlkZSgpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhhKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGFbMF0pfX1mdW5jdGlvbiByZHQoYyl7WW4odGhp''@;'; put 'put ''cy5nZXRJbnB1dEVsZW1lbnRzKCksKGwsYSk9PntsW2MuaW5wdXRzQ291bnQ+YT8ic2hvdyI6ImhpZGUiXSgpLDA9PT1hJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5sLmZvY3VzKCksMTApfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGMpfWZ1bmN0aW9uIGlkdChjKXt1''@;'; put 'put ''XyhjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxCMihjKSl9Y29uc3QgWlQ9e307ZnVuY3Rpb24gb2R0KGMpe3JldHVybiBaVFtjXS5uYW1lfWZ1bmN0aW9uIGNRKGMsbCxhKXtaVFtjXT17bmFtZTpsLGZ1bmM6YX19Y29uc3QgYTY9ImNvbmp1bmN0''@;'; put 'put ''aW9uIjtjUShhNix0WCxmdW5jdGlvbiBsZHQoYyxsKXtyZXR1cm4gYy5ldmVyeShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgR0Y9ImRpc2p1bmN0aW9uIjtjUShHRixDUCxmdW5jdGlvbiB1ZHQoYyxsKXtyZXR1cm4gYy5zb21lKGE9PmEuZnVuYyhsKSl9KTtjb25zdCB1UT0iZGlzanVuY3Rpb25X''@;'; put 'put ''aXRoRXh0cmFDb25kaXRpb24iO2Z1bmN0aW9uIGNnZShjLGwsYSl7KGZ1bmN0aW9uIGZkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwu''@;'; put 'put ''c2V0KGMsYSl9ZnVuY3Rpb24gV1QoYyxsKXtyZXR1cm4gYy5nZXQoZGdlKGMsbCkpfWZ1bmN0aW9uIHVnZShjLGwsYSl7cmV0dXJuIGMuc2V0KGRnZShjLGwpLGEpLGF9ZnVuY3Rpb24gZGdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jUSh1USxDUCxmdW5jdGlvbiBoZHQoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3Jr''@;'; put 'put ''IG9uIGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1bmMobCkpJiZjW2MubGVuZ3RoLTFdLmZ1bmMobCl9KTt2YXIgYXc9bmV3IFdlYWtNYXAsZFE9bmV3IFdlYWtNYXA7Y2xhc3MgJEYgZXh0ZW5kcyBGaHtzdGF0''@;'; put 'put ''aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJhZGlvIixsYWJlbDp7fX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx4dSgkRi5ERUZBVUxUUyxhKSksY2dlKHRoaXMsYXcsdm9pZCAwKSxjZ2UodGhpcyxk''@;'; put 'put ''USx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2wudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCksbC5odG1sRm9y''@;'; put 'put ''PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvciksdWdlKGRRLHRoaXMsbCksdWdlKGF3LHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKSxXVChhdyx0aGlzKS5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLHRoaXMuX2VsZW1lbnQuYXBw''@;'; put 'put ''ZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKFdUKGRRLHRoaXMpLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpKX1pc0NoZWNrZWQoKXtyZXR1cm4hIXRoaXMuaXNCdWls''@;'; put 'put ''dCgpJiZXVChhdyx0aGlzKS5jaGVja2VkfXNldENoZWNrZWQoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO3RoaXMuaXNCdWlsdCgpJiYoV1QoYXcsdGhpcykuY2hlY2tlZD1sKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgp''@;'; put 'put ''JiZXVChhdyx0aGlzKS5mb2N1cygpfX12YXIgZmdlPW5ldyBXZWFrU2V0O2NsYXNzIF9kdCBleHRlbmRzIEZUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBwZHQoYyxsKXsoZnVuY3Rpb24gZ2R0KGMsbCl7aWYobC5oYXMoYykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZmdlKSxmdW5jdGlvbiBtZHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZkdChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBiZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntr''@;'; put 'put ''ZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KFRpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudU9wZXJhdG9ycyIpLFluKHRoaXMuZWxlbWVudHMsZD0+''@;'; put 'put ''YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YnVpbGRPcGVyYXRvcnNFbGVtZW50KCl7Y29uc3QgbD1bYTYsR0ZdO1luKGwsYT0+e2NvbnN0IGQ9bmV3ICRGKHRoaXMuaG90LHtuYW1lOiJvcGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6YSx0ZXh0Q29udGVudDpvZHQoYSl9LHZhbHVlOmEs''@;'; put 'put ''Y2hlY2tlZDphPT09bFswXSxpZDphfSk7ZC5hZGRMb2NhbEhvb2soImNoYW5nZSIsaD0+ZnVuY3Rpb24geWR0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2''@;'; put 'put ''YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oZmdlLHRoaXMsd2R0KS5jYWxsKHRoaXMsaCkpLHRoaXMuZWxlbWVudHMucHVzaChkKX0pfXNldENoZWNrZWQobCl7aWYodGhpcy5lbGVtZW50cy5sZW5ndGg8bCl0aHJvdyBFcnJvcihnbGBSYWRpbyBidXR0b24g''@;'; put 'put ''d2l0aCBpbmRleCAke2x9IGRvZXNuJ3QgZXhpc3QuYCk7WW4odGhpcy5lbGVtZW50cywoYSxkKT0+e2Euc2V0Q2hlY2tlZChkPT09bCl9KX1nZXRBY3RpdmVPcGVyYXRpb25JZCgpe2NvbnN0IGw9dGhpcy5lbGVtZW50cy5maW5kKGE9PmEgaW5zdGFuY2VvZiAkRiYmYS5pc0NoZWNrZWQoKSk7''@;'; put 'put ''cmV0dXJuIGw/bC5nZXRWYWx1ZSgpOmE2fWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKX1zZXRTdGF0ZShsKXt0aGlzLnJlc2V0KCksbCYmdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpIT09bCYmWW4odGhpcy5lbGVtZW50cyxhPT57YS5zZXRDaGVja2Vk''@;'; put 'put ''KGEuZ2V0VmFsdWUoKT09PWwpfSl9dXBkYXRlU3RhdGUoKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06YTY7ZD09PXVRJiYoZD1HRiksdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXTp2b2lkIDAsZCl9cmVzZXQoKXt0aGlzLnNldENoZWNrZWQoMCl9fWZ1bmN0aW9uIHdkdChjKXt0aGlzLnNldFN0YXRlKGMudGFyZ2V0LnZhbHVlKX1mdW5jdGlvbiBTZHQoYyxsKXtsZXQgYT1jO3JldHVybiIiPT09YSYmKGE9YCgke2x9KWApLGF9ZnVuY3Rpb24gWVQoYyl7Y29u''@;'; put 'put ''c3QgbD1uZXcgU2V0KGMpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5oYXMoYSl9fWZ1bmN0aW9uIGhRKGMpe3JldHVybiBjPz8iIn1mdW5jdGlvbiBmUShjKXtyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGMpKS5tYXAobD0+aFEobCkpLnNvcnQoKGwsYSk9PiJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgbCYmIm51bWJlciI9PXR5cGVvZiBhP2wtYTpsPT09YT8wOmw+YT8xOi0xKX1mdW5jdGlvbiBwZ2UoYyxsLGEsZCl7Y29uc3QgaD1bXSxmPWM9PT1sO2xldCB2O3JldHVybiBmfHwodj1ZVChsKSksYy5mb3JFYWNoKE09PntsZXQgRD0hMTsoZnx8dihNKSkmJihEPSEwKTtjb25zdCBaPXtj''@;'; put 'put ''aGVja2VkOkQsdmFsdWU6TSx2aXN1YWxWYWx1ZTpTZHQoTSxhKX07ZCYmZChaKSxoLnB1c2goWil9KSxofWZ1bmN0aW9uIHBRKGMsbCl7cmV0dXJuIGMuZ2V0KGdnZShjLGwpKX1mdW5jdGlvbiBnZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUcyZSgpO3ZhciBHVD1uZXcgV2Vha01hcDtjbGFzcyAkVCBleHRlbmRzIEZoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1''@;'; put 'put ''cm4gbjMoe2hyZWY6IiMiLHRhZ05hbWU6ImEiLHRhYkluZGV4Oi0xLHJvbGU6ImJ1dHRvbiJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwseHUoJFQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIE1kdChjLGwsYSl7KGZ1bmN0aW9uIHhkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsR1Qsdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCksZnVuY3Rpb24gRWR0KGMsbCxhKXtjLnNldChnZ2UoYyxsKSxh''@;'; put 'put ''KX0oR1QsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYocFEoR1QsdGhpcykudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCkpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnBR''@;'; put 'put ''KEdULHRoaXMpLmZvY3VzKCl9YWN0aXZhdGUoKXtwUShHVCx0aGlzKS5jbGljaygpfX1mdW5jdGlvbiBvdyhjLGwsYSl7bWdlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft''@;'; put 'put ''ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGpvKGMsbCl7cmV0dXJuIGMuZ2V0KHN3KGMsbCkpfWZ1bmN0aW9uIG0zKGMsbCxhKXtyZXR1cm4gYy5zZXQoc3coYyxsKSxhKSxhfWZ1bmN0aW9uIHN3KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB2Z2U9Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3giO3ZhciB2Mz1uZXcgV2Vh''@;'; put 'put ''a01hcCx1dT1uZXcgV2Vha01hcCxnUT1uZXcgV2Vha01hcCxINT1uZXcgV2Vha01hcCxvNj1uZXcgV2Vha01hcCxzNj1uZXcgV2Vha01hcCxLVD1uZXcgV2Vha1NldDtjbGFzcyBxVCBleHRlbmRzIEZoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe2NsYXNzTmFtZToiaHRVSU11''@;'; put 'put ''bHRpcGxlU2VsZWN0Iix2YWx1ZTpbXX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx4dShxVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gVGR0KGMsbCl7bWdlKGMsbCksbC5hZGQoYyl9KHRoaXMsS1QpLG93KHRoaXMsdjMsW10pLG93KHRoaXMsdXUsdm9pZCAwKSxvdyh0aGlzLGdRLHZvaWQg''@;'; put 'put ''MCksb3codGhpcyxINSx2b2lkIDApLG93KHRoaXMsbzYsdm9pZCAwKSxvdyh0aGlzLHM2LHZvaWQgMCksbTMoSDUsdGhpcyxuZXcgaTYodGhpcy5ob3Qse3BsYWNlaG9sZGVyOm9YLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIn0pKSxtMyhvNix0aGlzLG5ldyAkVCh0aGlz''@;'; put 'put ''LmhvdCx7dGV4dENvbnRlbnQ6blgsY2xhc3NOYW1lOiJodFVJU2VsZWN0QWxsIn0pKSxtMyhzNix0aGlzLG5ldyAkVCh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6clgsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldEl0ZW1zQm94KCl7cmV0dXJuIGpv''@;'; put 'put ''KHV1LHRoaXMpfXJlZ2lzdGVySG9va3MoKXtqbyhINSx0aGlzKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PnN3KEtULHRoaXMsa2R0KS5jYWxsKHRoaXMsbCkpLGpvKEg1LHRoaXMpLmFkZExvY2FsSG9vaygiaW5wdXQiLGw9PnN3KEtULHRoaXMsQWR0KS5jYWxsKHRoaXMsbCkpLGpvKG82''@;'; put 'put ''LHRoaXMpLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnN3KEtULHRoaXMsRGR0KS5jYWxsKHRoaXMsbCkpLGpvKHM2LHRoaXMpLmFkZExvY2FsSG9vaygiY2xpY2siLGw9PnN3KEtULHRoaXMsSWR0KS5jYWxsKHRoaXMsbCkpfXNldEl0ZW1zKGwpe3ZhciBhO20zKHYzLHRoaXMsbCksbnVsbD09''@;'; put 'put ''PShhPWpvKHV1LHRoaXMpKXx8dm9pZCAwPT09YXx8YS5sb2FkRGF0YShqbyh2Myx0aGlzKSl9c2V0TG9jYWxlKGwpe20zKGdRLHRoaXMsbCl9Z2V0TG9jYWxlKCl7cmV0dXJuIGpvKGdRLHRoaXMpfWdldEl0ZW1zKCl7cmV0dXJuWy4uLmpvKHYzLHRoaXMpXX1nZXRWYWx1ZSgpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBMZHQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gYy5mb3JFYWNoKGE9PnthLmNoZWNrZWQmJmwucHVzaChhLnZhbHVlKX0pLGx9KGpvKHYzLHRoaXMpKX1nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKXtyZXR1cm4gam8oSDUsdGhpcyl9Z2V0U2VsZWN0QWxsRWxlbWVudCgpe3JldHVybiBq''@;'; put 'put ''byhvNix0aGlzKX1nZXRDbGVhckFsbEVsZW1lbnQoKXtyZXR1cm4gam8oczYsdGhpcyl9aXNTZWxlY3RlZEFsbFZhbHVlcygpe3JldHVybiBqbyh2Myx0aGlzKS5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdHtyb290RG9jdW1lbnQ6''@;'; put 'put ''bH09dGhpcy5ob3QsYT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9bmV3IEZoKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3Rpb25Db250cm9scyIsY2hpbGRyZW46W2pvKG82LHRoaXMpLGpvKHM2LHRoaXMpXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoam8oSDUsdGhpcyku''@;'; put 'put ''ZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChkLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgaD1mPT57dmFyIHY7aWYoIXRoaXMuX2VsZW1lbnQpcmV0dXJuO251bGw9PT0odj1qbyh1dSx0aGlzKSl8fHZvaWQgMD09PXZ8fHYuZGVzdHJveSgp''@;'; put 'put ''LFRpKGYsImh0VUlNdWx0aXBsZVNlbGVjdEhvdCIpLG0zKHV1LHRoaXMsbmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKGYse2RhdGE6am8odjMsdGhpcyksY29sdW1uczpbe2RhdGE6ImNoZWNrZWQiLHR5cGU6ImNoZWNrYm94IixsYWJlbDp7cHJvcGVydHk6InZpc3VhbFZhbHVlIixwb3NpdGlv''@;'; put 'put ''bjoiYWZ0ZXIifX1dLGJlZm9yZVJlbmRlcmVyOihaLHJlLGNlLGJlLEVlLEJlKT0+e1oudGl0bGU9QmUuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChyZSxCZS5sYWJlbC5wcm9wZXJ0eSl9LGFmdGVyTGlzdGVuOigpPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJmb2N1cyIsdGhpcyl9LGJlZm9y''@;'; put 'put ''ZU9uQ2VsbE1vdXNlVXA6KCk9Pntqbyh1dSx0aGlzKS5saXN0ZW4oKX0sbW9kaWZ5Q29sV2lkdGg6Wj0+e2NvbnN0IHJlPWpvKHV1LHRoaXMpLmNvbnRhaW5lci5zY3JvbGxXaWR0aC1mMChsKTtyZXR1cm4gdm9pZCAwIT09WiYmWjxyZT9yZTpafSxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAs''@;'; put 'put ''aGVpZ2h0OjExMCxjb3B5UGFzdGU6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsZmlsbEhhbmRsZTohMSxmcmFnbWVudFNlbGVjdGlvbjoiY2VsbCIsdGFiTW92ZXM6e3JvdzoxLGNvbDowfSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGxheW91dERp''@;'; put 'put ''cmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifSkpLGpvKHV1LHRoaXMpLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoWixyZSk9PntyZXx8am8odXUsdGhpcykudXNlVGhlbWUoWil9KTtjb25zdCBEPWpvKHV1LHRoaXMpLmdldFNob3J0Y3V0TWFu''@;'; put 'put ''YWdlcigpLmdldENvbnRleHQoImdyaWQiKTtELnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlRhYiJdKSxELnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlNoaWZ0IiwiVGFiIl0pLEQuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOlo9Pnt0aGlzLnJ1bkxvY2FsSG9va3Mo''@;'; put 'put ''ImtleWRvd24iLFosdGhpcyl9LGdyb3VwOnZnZX0pLEQuYWRkU2hvcnRjdXQoe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpaPT57am8odXUsdGhpcykuZGVzZWxlY3RDZWxsKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixaLHRoaXMpLHRoaXMucnVuTG9j''@;'; put 'put ''YWxIb29rcygibGlzdFRhYktleWRvd24iLFosdGhpcyl9LGdyb3VwOnZnZX0pfTtoKGEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmgoYSksMTAwKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZqbyh1dSx0aGlzKS5saXN0ZW4oKX1yZXNldCgpe2pvKEg1LHRoaXMpLnJlc2V0KCks''@;'; put 'put ''am8obzYsdGhpcykucmVzZXQoKSxqbyhzNix0aGlzKS5yZXNldCgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoam8odXUsdGhpcykubG9hZERhdGEoZnVuY3Rpb24gUmR0KGMsbCl7Y29uc3QgYT1ZVChsKTtyZXR1cm4gYy5tYXAoZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX0oam8o''@;'; put 'put ''djMsdGhpcyksdGhpcy5vcHRpb25zLnZhbHVlKSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9am8odXUsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxqbyhINSx0aGlzKS5kZXN0cm95KCksam8oczYsdGhpcykuZGVzdHJveSgpLGpvKG82LHRoaXMp''@;'; put 'put ''LmRlc3Ryb3koKSxtMyhINSx0aGlzLG51bGwpLG0zKHM2LHRoaXMsbnVsbCksbTMobzYsdGhpcyxudWxsKSxtMyh1dSx0aGlzLG51bGwpLG0zKHYzLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBBZHQoYyl7Y29uc3QgbD1jLnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2Vy''@;'; put 'put ''Q2FzZSh0aGlzLmdldExvY2FsZSgpKTtsZXQgYTthPSIiPT09bD9bLi4uam8odjMsdGhpcyldOmpvKHYzLHRoaXMpLmZpbHRlcihkPT5gJHtkLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZihsKT49MCksam8odXUsdGhpcykubG9hZERhdGEoYSl9''@;'; put 'put ''ZnVuY3Rpb24ga2R0KGMpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsYyx0aGlzKSxrJCh1XyxjLmtleUNvZGUpKCJBUlJPV19ET1dOIikmJihjLnByZXZlbnREZWZhdWx0KCksQjIoYyksam8odXUsdGhpcykubGlzdGVuKCksam8odXUsdGhpcykuc2VsZWN0Q2VsbCgwLDApKX1mdW5j''@;'; put 'put ''dGlvbiBEZHQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksam8odXUsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEsZCk9PnthLmNoZWNrZWQ9ITAsbC5wdXNoKExLKGEsZClbMF0pfSksam8odXUsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChsKX1mdW5jdGlvbiBJ''@;'; put 'put ''ZHQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksam8odXUsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEsZCk9PnthLmNoZWNrZWQ9ITEsbC5wdXNoKExLKGEsZClbMF0pfSksam8odXUsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChsKX1jb25zdCB3OT0iYnlfdmFs''@;'; put 'put ''dWUiO2Z1bmN0aW9uIEtGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1BdSh3''@;'; put 'put ''OSxmdW5jdGlvbiBPZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVybltZVChsKV19LHNob3dPcGVyYXRvcnM6ITF9KTt2YXIgeWdlLFhUPW5ldyBXZWFr''@;'; put 'put ''U2V0O2NsYXNzIEJkdCBleHRlbmRzIEZUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBQZHQoYyxsKXsoZnVuY3Rpb24gRmR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsWFQpLGZ1bmN0aW9uIEhkdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTmR0KGMpe3ZhciBsPWZ1bmN0aW9uIFZkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp''@;'; put 'put ''cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgcVQodGhpcy5ob3QpKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1l''@;'; put 'put ''bnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PktGKFhULHRoaXMsamR0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLGw9PnRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLGwpKSx0aGlzLmhvdC5hZGRIb29rKCJtb2RpZnlGaWx0ZXJz''@;'; put 'put ''TXVsdGlTZWxlY3RWYWx1ZSIsKGwsYSk9PktGKFhULHRoaXMsemR0KS5jYWxsKHRoaXMsbCxhKSl9Z2V0RWxlbWVudHMoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7cmV0dXJuW2wuZ2V0U2VhcmNoSW5wdXRFbGVtZW50KCksbC5nZXRTZWxlY3RBbGxFbGVtZW50''@;'; put 'put ''KCksbC5nZXRDbGVhckFsbEVsZW1lbnQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpXX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksbCYmbC5jb21tYW5kLmtleT09PXc5KXtjb25zdCBhPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7YS5zZXRJdGVtcyhsLml0''@;'; put 'put ''ZW1zU25hcHNob3QpLGEuc2V0VmFsdWUobC5hcmdzWzBdKSxhLnNldExvY2FsZShsLmxvY2FsZSl9fWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLGE9bC5nZXRJdGVtcygpO3JldHVybntjb21tYW5kOntrZXk6bC5pc1NlbGVjdGVkQWxsVmFsdWVz''@;'; put 'put ''KCl8fCFhLmxlbmd0aD9FMDp3OX0sYXJnczpbbC5nZXRWYWx1ZSgpXSxpdGVtc1NuYXBzaG90OmF9fXVwZGF0ZVN0YXRlKGwpe2NvbnN0IGE9KGQsaCxmLHYsTSk9Pntjb25zdFtEXT1JbShoLGNlPT5jZS5uYW1lPT09dzkpLFo9e30scmU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShT''@;'; put 'put ''UCk7aWYoRCl7Y29uc3QgY2U9dihkLE0pLGJlPXlzKGNlLGR0PT5kdC52YWx1ZSksRWU9bmV3IE1hcChjZS5tYXAoZHQ9PltkdC52YWx1ZSx0aGlzLmhvdC5nZXRDZWxsTWV0YShkdC5tZXRhLnZpc3VhbFJvdyxkdC5tZXRhLnZpc3VhbENvbCldKSksQmU9ZlEoYmUpO2YmJihELmFyZ3NbMF09''@;'; put 'put ''Zik7Y29uc3QgcWU9W10scnQ9cGdlKEJlLEQuYXJnc1swXSxyZSxkdD0+e2R0LmNoZWNrZWQmJnFlLnB1c2goZHQudmFsdWUpLEtGKFhULHRoaXMsYmdlKS5jYWxsKHRoaXMsZHQsRWUpfSk7Wi5sb2NhbGU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNv''@;'; put 'put ''bHVtbikubG9jYWxlLFouYXJncz1bcWVdLFouY29tbWFuZD1fOSh3OSksWi5pdGVtc1NuYXBzaG90PXJ0fWVsc2UgWi5hcmdzPVtdLFouY29tbWFuZD1fOShFMCk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoZCxaKX07YShsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbixsLmVkaXRl''@;'; put 'put ''ZENvbmRpdGlvblN0YWNrLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSksbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3MubGVuZ3RoJiZhKGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbHVtbixsLmRlcGVuZGVudENvbmRpdGlv''@;'; put 'put ''blN0YWNrc1swXS5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnksbC5lZGl0ZWRDb25kaXRpb25TdGFjayl9Z2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBxVClb''@;'; put 'put ''MF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsdik9PntUaShhLnBhcmVudE5vZGUsImh0''@;'; put 'put ''RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxNLnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRl''@;'; put 'put ''KCJnaG9zdC10YWJsZSIpfHxZbih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFNQKSxhPXRoaXMuX2dldENvbHVtblZpc2libGVWYWx1ZXMoKSxkPWEubWFwKEQ9PkQudmFs''@;'; put 'put ''dWUpLGg9bmV3IE1hcChhLm1hcChEPT5bRC52YWx1ZSxELm1ldGFdKSksZj1mUShkKSx2PXBnZShmLGYsbCxEPT57S0YoWFQsdGhpcyxiZ2UpLmNhbGwodGhpcyxELGgpfSk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyh2KSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0''@;'; put 'put ''TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoZik7Y29uc3QgTT10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1NJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0''@;'; put 'put ''YSgwLE0udmlzdWFsSW5kZXgpLmxvY2FsZSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7cmV0dXJuIG51bGw9PT1sP1tdOnlzKHRoaXMuaG90LmdldERhdGFBdENvbChsLnZpc3VhbElu''@;'; put 'put ''ZGV4KSwoYSxkKT0+KHt2YWx1ZTpoUShhKSxtZXRhOnRoaXMuaG90LmdldENlbGxNZXRhKGQsbC52aXN1YWxJbmRleCl9KSl9fWZ1bmN0aW9uIGpkdChjKXt1XyhjLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxCMihjKSl9ZnVuY3Rpb24gYmdlKGMs''@;'; put 'put ''bCl7dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiKSYmKGMudmlzdWFsVmFsdWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixjLnZpc3VhbFZhbHVlLGwuZ2V0KGMudmFsdWUpKSl9ZnVuY3Rpb24gemR0KGMs''@;'; put 'put ''bCl7cmV0dXJuIm51bWVyaWMiPT09bC50eXBlP2g0ZShjLGwpOmN9dmFyIF9nZT1uZXcgV2Vha1NldDtjbGFzcyBKVCBleHRlbmRzIEZUe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4iY2FuY2VsIn1jb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiEwfSksZnVuY3Rpb24gVWR0KGMsbCl7KGZ1bmN0aW9uIFpkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLF9nZSksZnVuY3Rpb24gV2R0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZZHQoYyl7dmFyIGw9ZnVuY3Rpb24gR2R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhp''@;'; put 'put ''cywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTppWCxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbk9LIixpZGVudGlmaWVyOkpULkJVVFRPTl9PS30pKSx0aGlzLmVsZW1lbnRz''@;'; put 'put ''LnB1c2gobmV3IGk2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOmFYLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uQ2FuY2VsIixpZGVudGlmaWVyOkpULkJVVFRPTl9DQU5DRUx9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe1luKHRoaXMuZWxl''@;'; put 'put ''bWVudHMsbD0+e2wuYWRkTG9jYWxIb29rKCJjbGljayIsKGEsZCk9PmZ1bmN0aW9uICRkdChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KF9nZSx0aGlzLEtkdCkuY2FsbCh0aGlzLGEsZCkpfSl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjoo''@;'; put 'put ''KT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oVGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFyIiksWW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIp''@;'; put 'put ''fWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIil9fWZ1bmN0aW9uIEtkdChjLGwpe2wub3B0aW9ucy5pZGVudGlmaWVyPT09eWdlLkJVVFRPTl9PSz90aGlzLmFjY2VwdCgpOnRoaXMuY2FuY2VsKCl9ZnVuY3Rpb24gbVEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFkdChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBYZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfXlnZT1KVDtjb25zdCB3Z2U9IkNvbmRpdGlvbkNvbGxlY3Rpb24uZmlsdGVyaW5nU3RhdGVzIjtjbGFzcyBDZ2V7Y29uc3RydWN0b3IobCl7bGV0''@;'; put 'put ''IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTttUSh0aGlzLCJob3QiLHZvaWQgMCksbVEodGhpcywiaXNNYXBSZWdpc3RyYWJsZSIsdm9pZCAwKSxtUSh0aGlzLCJmaWx0ZXJpbmdTdGF0ZXMiLG5ldyBwUCksdGhpcy5ob3Q9bCx0''@;'; put 'put ''aGlzLmlzTWFwUmVnaXN0cmFibGU9YSwhMD09PXRoaXMuaXNNYXBSZWdpc3RyYWJsZT90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh3Z2UsdGhpcy5maWx0ZXJpbmdTdGF0ZXMpOnRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBw''@;'; put 'put ''ZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RofWlzTWF0Y2gobCxhKXt2YXIgZDtjb25zdCBoPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChhKSxmPW51bGwhPT0oZD1oPy5jb25k''@;'; put 'put ''aXRpb25zKSYmdm9pZCAwIT09ZD9kOltdLHY9aD8ub3BlcmF0aW9uO3JldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoZixsLHYpfWlzTWF0Y2hJbkNvbmRpdGlvbnMobCxhKXtyZXR1cm4hbC5sZW5ndGh8fGZ1bmN0aW9uIGFkdChjKXtpZighWlRbY10pdGhyb3cgRXJyb3IoYE9wZXJh''@;'; put 'put ''dGlvbiB3aXRoIGlkICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCBsPVpUW2NdLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGwoYSxkKX19KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphNikobCxhKX1hZGRDb25k''@;'; put 'put ''aXRpb24obCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YTYsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCkubG9jYWxlLHY9YS5hcmdz''@;'; put 'put ''Lm1hcChyZT0+InN0cmluZyI9PXR5cGVvZiByZT9yZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpyZSksTT1hLm5hbWV8fGEuY29tbWFuZC5rZXk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVBZGQiLGwpO2NvbnN0IEQ9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYoRCl7aWYoRCE9PWQpdGhyb3cg''@;'; put 'put ''RXJyb3IoZ2xgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke0R9XGBceDIwCiAgICAgICAgZmlsdGVyIG9wZXJhdGlvbi4gVXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5k''@;'; put 'put ''IHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMgKGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9y''@;'; put 'put ''IGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYoeWMoWlRbZF0pKXRocm93IG5ldyBFcnJvcihnbGBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1lZCBcYCR7ZH1cYC4gUG9zc2libGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFuZCBcYGNvbmp1bmN0aW9uXGAu''@;'; put 'put ''YCk7Y29uc3QgWj10aGlzLmdldENvbmRpdGlvbnMobCk7MD09PVoubGVuZ3RoP3RoaXMuZmlsdGVyaW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleChsLHtvcGVyYXRpb246ZCxjb25kaXRpb25zOlt7bmFtZTpNLGFyZ3M6dixmdW5jOnI2KE0sdil9XX0saCk6Wi5wdXNoKHtuYW1lOk0sYXJnczp2''@;'; put 'put ''LGZ1bmM6cjYoTSx2KX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0oZD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNv''@;'; put 'put ''bmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRpdGlvbnMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLnJlZHVjZSgobCxhKT0+e2xldFtkLHtvcGVyYXRpb246aCxjb25kaXRpb25zOmZ9XT1hO3JldHVybiBsLnB1c2goe2NvbHVtbjpkLG9wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zi5tYXAodj0+e2xldHtuYW1lOk0sYXJnczpEfT12O3JldHVy''@;'; put 'put ''bntuYW1lOk0sYXJnczpbLi4uRF19fSl9KSxsfSxbXSl9aW1wb3J0QWxsQ29uZGl0aW9ucyhsKXt0aGlzLmNsZWFuKCksbC5mb3JFYWNoKGE9PnthLmNvbmRpdGlvbnMuZm9yRWFjaChkPT50aGlzLmFkZENvbmRpdGlvbihhLmNvbHVtbixkKSl9KX1yZW1vdmVDb25kaXRpb25zKGwpe3RoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiYmVmb3JlUmVtb3ZlIixsKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhclZhbHVlKGwpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJSZW1vdmUiLGwpfWNsZWFuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDbGVhbiIpLHRoaXMuZmlsdGVyaW5nU3RhdGVz''@;'; put 'put ''LmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsZWFuIil9aGFzQ29uZGl0aW9ucyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXRDb25kaXRpb25zKGwpO3JldHVybiBhP2Quc29tZShoPT5oLm5hbWU9PT1hKTpkLmxlbmd0aD4wfWRlc3Ryb3koKXt0aGlzLmlzTWFwUmVnaXN0cmFibGUm''@;'; put 'put ''JnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAod2dlKSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1udWxsLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fVRsKENnZSx5MSk7Y29uc3QgU2dlPUNnZTtmdW5jdGlvbiBNZ2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEpkdChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBRZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHhnZT1jbGFzcyBlaHR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/''@;'; put 'put ''YXJndW1lbnRzWzFdOigpPT5bXTtNZ2UodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxNZ2UodGhpcywiY29sdW1uRGF0YUZhY3RvcnkiLHZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWwsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1hfWZpbHRlcigpe2xldCBsPVtd''@;'; put 'put ''O3JldHVybiBZbih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCksKGEsZCk9PntsZXQgaD10aGlzLmNvbHVtbkRhdGFGYWN0b3J5KGEpO2QmJihoPXRoaXMuX2dldEludGVyc2VjdERhdGEoaCxsKSksbD10aGlzLmZpbHRlckJ5Q29sdW1uKGEsaCl9KSxsfWZp''@;'; put 'put ''bHRlckJ5Q29sdW1uKGwpe2NvbnN0IGQ9W107cmV0dXJuIFluKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPT57dm9pZCAwIT09aCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzTWF0Y2goaCxsKSYmZC5wdXNoKGgpfSksZH1f''@;'; put 'put ''Z2V0SW50ZXJzZWN0RGF0YShsLGEpe2NvbnN0IGQ9W107cmV0dXJuIFluKGEsaD0+e2NvbnN0IGY9aC5tZXRhLnZpc3VhbFJvdzt2b2lkIDAhPT1sW2ZdJiYoZFtmXT1sW2ZdKX0pLGR9fTtmdW5jdGlvbiBDOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcmh0KGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IGlodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdlEoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBxRj1uZXcgV2Vha1NldDtjbGFzcyBFZ2V7Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06''@;'; put 'put ''KCk9PltdOyhmdW5jdGlvbiB0aHQoYyxsKXsoZnVuY3Rpb24gbmh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlz''@;'; put 'put ''LHFGKSxDOSh0aGlzLCJob3QiLHZvaWQgMCksQzkodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxDOSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSxDOSh0aGlzLCJjaGFuZ2VzIixbXSksQzkodGhpcywiZ3JvdXBpbmciLCExKSxDOSh0aGlzLCJsYXRlc3RFZGl0''@;'; put 'put ''ZWRDb2x1bW5Qb3NpdGlvbiIsLTEpLEM5KHRoaXMsImxhdGVzdE9yZGVyU3RhY2siLFtdKSx0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9ZCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1v''@;'; put 'put ''dmUiLGg9PnZRKHFGLHRoaXMsYWh0KS5jYWxsKHRoaXMsaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyUmVtb3ZlIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRl''@;'; put 'put ''ckFkZCIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlQ2xlYW4iLCgpPT52UShxRix0aGlzLG9odCkuY2FsbCh0aGlzKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0''@;'; put 'put ''ZXJDbGVhbiIsKCk9PnZRKHFGLHRoaXMsc2h0KS5jYWxsKHRoaXMpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxZbih0aGlzLmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KSx0aGlzLmNoYW5nZXMubGVu''@;'; put 'put ''Z3RoPTB9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxhKXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNoYW5nZXMuaW5kZXhPZihsKSYmdGhpcy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFs''@;'; put 'put ''bENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09PWYmJihmPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IHY9aC5zbGljZSgwLGYpLE09aC5zbGljZShmKTtNLmxlbmd0aCYmTVswXS5j''@;'; put 'put ''b2x1bW49PT1sJiZNLnNoaWZ0KCk7Y29uc3QgRD1VMmUoZnVuY3Rpb24ocmUsY2Upe2xldCBiZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107Y29uc3QgRWU9bmV3IFNnZShkLmhvdCwhMSksQmU9W10uY29uY2F0KHJlLGJlKTtFZS5p''@;'; put 'put ''bXBvcnRBbGxDb25kaXRpb25zKEJlKTtjb25zdCBxZT1kLmNvbHVtbkRhdGFGYWN0b3J5KGNlKTtsZXQgcnQ7cnQ9RWUuaXNFbXB0eSgpP3FlOm5ldyB4Z2UoRWUsZHQ9PmQuY29sdW1uRGF0YUZhY3RvcnkoZHQpKS5maWx0ZXIoKSxydD15cyhydCxkdD0+ZHQubWV0YS52aXN1YWxSb3cpO2Nv''@;'; put 'put ''bnN0IHB0PVlUKHJ0KTtyZXR1cm4gRWUuZGVzdHJveSgpLEltKHFlLGR0PT5wdChkdC5tZXRhLnZpc3VhbFJvdykpfSkodiksWj1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29u''@;'; put 'put ''ZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6Wn0sZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzOk0sZmlsdGVyZWRSb3dzRmFjdG9yeTpELGNvbmRpdGlvbkFyZ3NDaGFuZ2U6YX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLFhvKHRoaXMsKGwsYSk9Pnt0aGlzW2Fd''@;'; put 'put ''PW51bGx9KX19ZnVuY3Rpb24gYWh0KGMpe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oYyl9ZnVuY3Rpb24gb2h0KCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRoaXMuY29uZGl0aW9uQ29sbGVj''@;'; put 'put ''dGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKX1mdW5jdGlvbiBzaHQoKXtZbih0aGlzLmxhdGVzdE9yZGVyU3RhY2ssYz0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oYyl9KX1UbChFZ2UseTEpO2NvbnN0IGxodD1FZ2UsUVQ9ImZpbHRlcnMiO2Z1bmN0aW9uIGJRKGMsbCxhKXtUZ2UoYyxs''@;'; put 'put ''KSxsLnNldChjLGEpfWZ1bmN0aW9uIFRnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZUEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9u''@;'; put 'put ''IGhodChjKXt2YXIgbD1mdW5jdGlvbiBmaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1''@;'; put 'put ''cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFhGKGMsbCxhKXtyZXR1cm4gYy5zZXQoJGQoYyxsKSxhKSxhfWZ1bmN0aW9uIFgyKGMsbCl7cmV0dXJuIGMuZ2V0KCRk''@;'; put 'put ''KGMsbCkpfWZ1bmN0aW9uICRkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1j''@;'; put 'put ''b25zdCB5UT0iZmlsdGVycyIsQWdlPXlRO3ZhciBONT1uZXcgV2Vha01hcCxfUT1uZXcgV2Vha01hcCxTOT1uZXcgV2Vha01hcCxIaD1uZXcgV2Vha1NldDtjbGFzcyBnaHQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4geVF9c3RhdGljIGdldCBQTFVHSU5fUFJJ''@;'; put 'put ''T1JJVFkoKXtyZXR1cm4gMjUwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJwbHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpjaGVja2JveCJdfWNvbnN0cnVjdG9yKGwpe3ZhciBhO3N1cGVyKGwpLGE9dGhpcyxmdW5jdGlvbiBkaHQo''@;'; put 'put ''YyxsKXtUZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxIaCksZUEodGhpcywiZHJvcGRvd25NZW51UGx1Z2luIixudWxsKSxlQSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIixudWxsKSxlQSh0aGlzLCJjb25kaXRpb25VcGRhdGVPYnNlcnZlciIsbnVsbCksZUEodGhpcywiY29tcG9uZW50cyIs''@;'; put 'put ''bmV3IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0pKSxlQSh0aGlzLCJmaWx0ZXJz''@;'; put 'put ''Um93c01hcCIsbnVsbCksYlEodGhpcyxONSx2b2lkIDApLGJRKHRoaXMsX1EsbmV3IFdlYWtTZXQpLGJRKHRoaXMsUzksW10pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9''@;'; put 'put ''MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiAkZChIaCxhLENodCkuY2FsbChhLC4uLmgpfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3lRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5m''@;'; put 'put ''aWx0ZXJzUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IEtFKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5k''@;'; put 'put ''cm9wZG93bk1lbnUsZD1hJiZhLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSxoPU09PihNLmFkZExvY2FsSG9vaygiYWNjZXB0IiwoKT0+JGQoSGgsdGhpcyxrZ2UpLmNhbGwodGhpcywiYWNjZXB0IikpLE0uYWRkTG9jYWxIb29rKCJjYW5jZWwiLCgpPT4kZChIaCx0''@;'; put 'put ''aGlzLGtnZSkuY2FsbCh0aGlzLCJjYW5jZWwiKSksTS5hZGRMb2NhbEhvb2soImNoYW5nZSIsRD0+JGQoSGgsdGhpcyx3aHQpLmNhbGwodGhpcyxNLEQpKSxNKSxmPSgpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFFxKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmls''@;'; put 'put ''dGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBNPW5ldyBsUSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6ZixhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT4kZChIaCx0aGlzLERnZSkuY2FsbCh0''@;'; put 'put ''aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIsaChNKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcgX2R0KHRoaXMuaG90LHtpZDoiZmlsdGVy''@;'; put 'put ''X29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0pKSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSl7Y29uc3QgTT1uZXcgbFEodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5l''@;'; put 'put ''cjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT4kZChIaCx0aGlzLERnZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLGgoTSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGgobmV3IEJkdCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShlWCl9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9hY3Rpb25fYmFyIil8''@;'; put 'put ''fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25fYmFyIixoKG5ldyBKVCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9hY3Rpb25fYmFyIixuYW1lOiJBY3Rpb24gYmFyIn0pKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9ufHwodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW5ldyBTZ2Uo''@;'; put 'put ''dGhpcy5ob3QpKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyfHwodGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1uZXcgbGh0KHRoaXMuaG90LHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixNPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihNKSksdGhpcy5jb25kaXRpb25VcGRhdGVP''@;'; put 'put ''YnNlcnZlci5hZGRMb2NhbEhvb2soInVwZGF0ZSIsTT0+JGQoSGgsdGhpcyxTaHQpLmNhbGwodGhpcyxNKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKE09Pk0uc2hvdygpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTSksWj0wO1o8TTtaKyspRFtaXT1hcmd1bWVudHNbWl07cmV0dXJuICRkKEhoLGwsX2h0KS5jYWxsKGwsLi4uRCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCgpPT4kZChIaCx0aGlzLHlodCkuY2FsbCh0''@;'; put 'put ''aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCgpPT4kZChIaCx0aGlzLHZodCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCgpPT4kZChIaCx0aGlzLGJodCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNo''@;'; put 'put ''YW5nZSIsTT0+JGQoSGgsdGhpcyxtaHQpLmNhbGwodGhpcyxNKSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luJiYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZGlzYWJsZVBsdWdpbigpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2lu''@;'; put 'put ''LmVuYWJsZVBsdWdpbigpKSwhWDIoTjUsdGhpcykmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZWQpe2NvbnN0IE09W3tmb2N1czooKT0+e2NvbnN0IFo9WDIoTjUsdGhpcykuZ2V0TWVudSgpLHJlPVouZ2V0TmF2aWdhdG9yKCksY2U9WDIoTjUsdGhpcykuZ2V0TGFzdE1lbnVQYWdl''@;'; put 'put ''KCk7Wi5mb2N1cygpLGNlPjA/cmUuc2V0Q3VycmVudFBhZ2UoY2UpOnJlLnRvRmlyc3RJdGVtKCl9fSwuLi5BcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cykubWFwKFo9PntsZXRbLHJlXT1aO3JldHVybiByZS5nZXRFbGVtZW50cygpfSkuZmxhdCgpXTtYRihONSx0aGlzLGZ1bmN0aW9uIHVo''@;'; put 'put ''dChjLGwpe2xldCBkLGE9LTE7Y29uc3QgaD1mdW5jdGlvbiBjaHQoYyl7cmV0dXJuIGI1ZSh7aW5pdGlhbFBhZ2U6MCxzaXplOigpPT5jLmxlbmd0aCxvbkl0ZW1TZWxlY3Q6KGEsZCk9Pntjb25zdCBoPWNbYV07cmV0dXJuIGggaW5zdGFuY2VvZiBxVD9kOiEoaC5lbGVtZW50JiYhejcoaC5l''@;'; put 'put ''bGVtZW50KSkmJnZvaWQgaC5mb2N1cygpfX0pfShsKSxmPWNlPT4oKT0+e2QuaXNPcGVuZWQoKSYmZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4oUVQpLGguc2V0Q3VycmVudFBhZ2UobC5pbmRleE9mKGNlKSl9O2Z1bmN0aW9uIHYoY2Upe2NvbnN0IGJlPWQuZ2V0S2V5Ym9h''@;'; put 'put ''cmRTaG9ydGN1dHNDdHJsKCksRWU9Y2UuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCk7aC5jbGVhcigpLEVlLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmJlLmdldENvbnRleHQoUVQpLGNhbGxiYWNrOigpPT57''@;'; put 'put ''Y2UuaXNTdWJNZW51KCkmJmNlLmNsb3NlKCksYmUubGlzdGVuKFFUKX19XSksIWNlLmlzU3ViTWVudSgpJiZiZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6QmU9Pntjb25zdCBxZT1kLmdldE5hdmlnYXRvcigpO3FlLmdldEN1''@;'; put 'put ''cnJlbnRQYWdlKCk+LTEmJihhPXFlLmdldEN1cnJlbnRQYWdlKCkpLHFlLmNsZWFyKCksQmUuc2hpZnRLZXk/aC50b1ByZXZpb3VzSXRlbSgpOmgudG9OZXh0SXRlbSgpfX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57ZC5jbG9zZSgpfX0se2tleXM6W1siRW50ZXIiXSxbIlNw''@;'; put 'put ''YWNlIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOkJlPT57Y29uc3QgcWU9bFtoLmdldEN1cnJlbnRQYWdlKCldO3FlIGluc3RhbmNlb2YgVVQmJihxZS5vcGVuT3B0aW9ucygpLEJlLnByZXZlbnREZWZhdWx0KCkpLHFlIGluc3RhbmNlb2YgJFQmJihxZS5hY3RpdmF0ZSgpLEJlLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCkpLHFlIGluc3RhbmNlb2YgRmh8fEJlLnByZXZlbnREZWZhdWx0KCl9fV0sUVQpfWZ1bmN0aW9uIEQoY2Upe2NlLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGJlPT57YmUua2V5LnN0YXJ0c1dpdGgoImZpbHRlcl8iKXx8aC5jbGVhcigpfSksY2Uu''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIix2KSxjZS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsdiksZD1jZX1yZXR1cm4gbC5mb3JFYWNoKGNlPT57Y2UgaW5zdGFuY2VvZiBGaCYmKGNlLmFkZExvY2FsSG9vaygiY2xpY2siLGYoY2UpKSxjZS5hZGRMb2NhbEhvb2soImZvY3Vz''@;'; put 'put ''IixmKGNlKSksY2UuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixmKGNlKSkpfSksRChjKSx7Li4uaCxsaXN0ZW46ZnVuY3Rpb24gTSgpe2QuZm9jdXMoKSxkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihRVCl9LHNldE1lbnU6RCxnZXRNZW51OmZ1bmN0aW9uIFooKXtyZXR1''@;'; put 'put ''cm4gZH0sZ2V0TGFzdE1lbnVQYWdlOmZ1bmN0aW9uIHJlKCl7cmV0dXJuIGF9fX0odGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudSxNKSk7Y29uc3QgRD1aPT57WDIoTjUsdGhpcykubGlzdGVuKCksWi5wcmV2ZW50RGVmYXVsdCgpLHVfKFoua2V5Q29kZSwiVEFCIikmJihaLnNoaWZ0S2V5''@;'; put 'put ''P1gyKE41LHRoaXMpLnRvUHJldmlvdXNJdGVtKCk6WDIoTjUsdGhpcykudG9OZXh0SXRlbSgpKX07dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsRCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRp''@;'; put 'put ''dGlvbiIpLmFkZExvY2FsSG9vaygic2VsZWN0VGFiS2V5ZG93biIsRCl9dGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pJiZ2b2lk''@;'; put 'put ''IDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24u''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkFsdCIsIkEiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZCgpO3RoaXMuY2xlYXJDb25kaXRpb25z''@;'; put 'put ''KCksdGhpcy5maWx0ZXIoKSxsJiZ0aGlzLmhvdC5zZWxlY3RDZWxscyhsKX0sZ3JvdXA6QWdlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEFnZSl9YWRkQ29uZGl0''@;'; put 'put ''aW9uKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106YTY7Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZix7Y29tbWFuZDp7a2V5''@;'; put 'put ''OmF9LGFyZ3M6ZH0saCl9cmVtb3ZlQ29uZGl0aW9ucyhsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9Y2xlYXJDb25kaXRpb25zKGwpe2lmKHZvaWQgMD09PWwpdGhpcy5jb25kaXRpb25D''@;'; put 'put ''b2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9fWltcG9ydENvbmRpdGlvbnMobCl7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRp''@;'; put 'put ''dGlvbnMobCl9ZXhwb3J0Q29uZGl0aW9ucygpe3JldHVybiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpfWZpbHRlcigpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPXRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIo''@;'; put 'put ''KSxkPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgpO2xldCBoPVtdO2NvbnN0IGY9dGhpcy5leHBvcnRDb25kaXRpb25zKCksdj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixmLFgyKFM5LHRoaXMpKTtpZighMSE9PXYmJmQpe2NvbnN0IE09W107dGhpcy5ob3Qu''@;'; put 'put ''YmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksaD15cyhhLmZpbHRlcigpLFo9PloubWV0YS52aXN1YWxSb3cpO2NvbnN0IEQ9WVQoaCk7R2EodGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxaPT57RChaKXx8TS5wdXNoKFopfSksWW4oTSxaPT57dGhp''@;'; put 'put ''cy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoWiwhMCl9KX0sITApLCFsJiYhaC5sZW5ndGgmJnRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLFhGKFM5LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpfWVsc2UhMT09PXZ8fGQ/dGhpcy5pbXBvcnRDb25kaXRpb25zKFgyKFM5LHRo''@;'; put 'put ''aXMpKTooWEYoUzksdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSksdGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKGw/LTE6MCx0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhp''@;'; put 'put ''Z2hsaWdodC5jb2wpLCExIT09diYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZpbHRlciIsZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKSl9Z2V0U2VsZWN0ZWRDb2x1bW4oKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGE/e3Zpc3VhbEluZGV4OmEuY29sLHBoeXNpY2FsSW5kZXg6dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhLmNvbCl9Om51bGx9Z2V0RGF0YU1hcEF0Q29sdW1uKGwpe2NvbnN0IGE9''@;'; put 'put ''dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCksZD1bXTtyZXR1cm4gWW4odGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q29sKGEpLChoLGYpPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkQsdmlzdWFsQ29sOlosdmlzdWFsUm93OnJlLHR5cGU6Y2UsaW5zdGFuY2U6YmUsZGF0ZUZvcm1hdDpFZSxs''@;'; put 'put ''b2NhbGU6QmV9PXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSkscWU9bnVsbCE9PSh2PXRoaXMuaG90LmdldERhdGFBdENlbGwodGhpcy5ob3QudG9WaXN1YWxSb3coZiksYSkpJiZ2b2lkIDAhPT12P3Y6aDtkLnB1c2goe21ldGE6e3JvdzpNLGNvbDpELHZpc3VhbENvbDpaLHZpc3VhbFJvdzpy''@;'; put 'put ''ZSx0eXBlOmNlLGluc3RhbmNlOmJlLGRhdGVGb3JtYXQ6RWUsbG9jYWxlOkJlfSx2YWx1ZTpoUShxZSl9KX0pLGR9dXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24obCl7Y29uc3QgZD1mUSh0aGlzLmhvdC5nZXREYXRhQXRDb2wobCkpO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIu''@;'; put 'put ''dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxkKX1yZXN0b3JlQ29tcG9uZW50cyhsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBoeXNpY2FsSW5kZXg7bC5mb3JFYWNoKGg9PntoLmlzSGlkZGVuKCl8fGgucmVz''@;'; put 'put ''dG9yZVN0YXRlKGQpfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfWdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHMobCxhLGQsaCl7bGV0IGY9bDtyZXR1cm4gZj09PUdGJiZhLmNvbW1hbmQua2V5IT09RTAmJmQuY29tbWFuZC5rZXkhPT1FMCYmaC5jb21t''@;'; put 'put ''YW5kLmtleSE9PUUwP2Y9dVE6aC5jb21tYW5kLmtleSE9PUUwJiYoYS5jb21tYW5kLmtleT09PUUwfHxkLmNvbW1hbmQua2V5PT09RTApJiYoZj1hNiksZn1zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKXt0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4u''@;'; put 'put ''c2V0TGlzdGVuaW5nKCl9dXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSx7Y29tbWFuZDphfT1sLmdldFN0YXRlKCksZD1bdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2Nv''@;'; put 'put ''bmRpdGlvbjIiKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIildO2Euc2hvd09wZXJhdG9ycz90aGlzLnNob3dDb21wb25lbnRzKC4uLmQpOnRoaXMuaGlkZUNvbXBvbmVudHMoLi4uZCl9X2NyZWF0ZURhdGFGaWx0ZXIoKXtyZXR1cm4gbmV3IHhnZShhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLGE9PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKGEpKX1nZXRJbmRleGVzT2ZDb21wb25lbnRzKCl7Y29uc3QgbD1bXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4p''@;'; put 'put ''cmV0dXJuIGw7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBZbihoLHY9PntZbihhLm1lbnVJdGVtcywoTSxEKT0+e00ua2V5PT09''@;'; put 'put ''di5nZXRNZW51SXRlbURlc2NyaXB0b3IoKS5rZXkmJmwucHVzaChEKX0pfSksbH1jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1''@;'; put 'put ''Z2luKXJldHVybjtjb25zdCBkPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudSxoPWQuZ2V0UGx1Z2luKCJoaWRkZW5Sb3dzIik7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZj4xP2YtMTowKSxNPTE7TTxmO00rKyl2W00tMV09YXJndW1lbnRzW01d''@;'; put 'put ''O2NvbnN0IEQ9dGhpcy5nZXRJbmRleGVzT2ZDb21wb25lbnRzKC4uLnYpO2w/aC5zaG93Um93cyhEKTpoLmhpZGVSb3dzKEQpLGQucmVuZGVyKCl9aGlkZUNvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3Vt''@;'; put 'put ''ZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCExLC4uLmEpfXNob3dDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJp''@;'; put 'put ''bGl0eSghMCwuLi5hKX1kZXN0cm95KCl7dGhpcy5lbmFibGVkJiYodGhpcy5jb21wb25lbnRzLmZvckVhY2goKGwsYSk9PntudWxsIT09bCYmKGwuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoYSxudWxsKSl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMu''@;'; put 'put ''Y29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZGVzdHJveSgpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBtaHQoYyl7YyYmWW4oYyxsPT57Y29uc3RbLGFdPWwsZD10aGlzLmhvdC5wcm9wVG9D''@;'; put 'put ''b2woYSk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCkmJnRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24oZCl9KX1mdW5jdGlvbiB2aHQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy5yZXN0b3JlQ29tcG9uZW50cyhB''@;'; put 'put ''cnJheS5mcm9tKHRoaXMuY29tcG9uZW50cy52YWx1ZXMoKSkpLGMudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBiaHQoKXt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpLHRoaXMuY29tcG9u''@;'; put 'put ''ZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpfWZ1bmN0aW9uIHlodCgpe2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtYMihfUSx0aGlzKS5oYXMoYyl8fFgyKE41LHRoaXMpLnNldE1lbnUoYyksWDIo''@;'; put 'put ''X1EsdGhpcykuYWRkKGMpfWZ1bmN0aW9uIF9odChjKXtjLml0ZW1zLnB1c2goe25hbWU6c3N9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChsPT57Yy5pdGVtcy5wdXNoKGwuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9ZnVuY3Rpb24ga2dlKGMpe3ZhciBsO2lmKCJhY2NlcHQiPT09Yyl7''@;'; put 'put ''Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGE7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbD09PShhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8YS5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4Omh9PWQsZj10aGlzLmNvbXBvbmVudHMu''@;'; put 'put ''Z2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSx2PXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUoKSxNPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCksRD10aGlzLmdldE9wZXJhdGlv''@;'; put 'put ''bkJhc2VkT25Bcmd1bWVudHModGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLmdldEFjdGl2ZU9wZXJhdGlvbklkKCksZix2LE0pO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZ3JvdXBDaGFuZ2VzKCk7bGV0IFo9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdl''@;'; put 'put ''dENvbHVtblN0YWNrUG9zaXRpb24oaCk7LTE9PT1aJiYoWj12b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGgpLGYuY29tbWFuZC5rZXkhPT1FMCYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCxmLEQsWiksdi5jb21tYW5k''@;'; put 'put ''LmtleSE9PUUwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsdixELFopKSxNLmNvbW1hbmQua2V5IT09RTAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCxNLEQsWiksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5mbHVzaCgpLHRo''@;'; put 'put ''aXMuY29tcG9uZW50cy5mb3JFYWNoKHJlPT5yZS5zYXZlU3RhdGUoaCkpLHRoaXMuZmlsdGVyKCl9bnVsbD09PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWZ1bmN0aW9uIHdodChjLGwpe2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4u''@;'; put 'put ''bWVudTt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksYy5jb25zdHJ1Y3Rvcj09PWxRJiYhbC5pbnB1dHNDb3VudCYmdGhpcy5zZXRMaXN0ZW5pbmdEcm9wZG93bk1lbnUoKSxhLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rpb24gRGdlKCl7dGhpcy5zZXRM''@;'; put 'put ''aXN0ZW5pbmdEcm9wZG93bk1lbnUoKX1mdW5jdGlvbiBDaHQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjKTt0aGlzLmVuYWJsZWQmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZhPT09dGhpcy5ob3Qudmlldy5nZXRDb2x1bW5I''@;'; put 'put ''ZWFkZXJzQ291bnQoKS0xP1RpKGwsImh0RmlsdGVyc0FjdGl2ZSIpOmxvKGwsImh0RmlsdGVyc0FjdGl2ZSIpfWZ1bmN0aW9uIFNodChjKXt2YXIgbDtpZihudWxsPT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1sfHwhbC5lbmFibGVkKXJldHVybjtjb25zdHtlZGl0''@;'; put 'put ''ZWRDb25kaXRpb25TdGFjazp7Y29uZGl0aW9uczphLGNvbHVtbjpkfSxjb25kaXRpb25BcmdzQ2hhbmdlOmh9PWM7QXJyYXkuaXNBcnJheShoKSYmWEYoUzksdGhpcyxYMihTOSx0aGlzKS5tYXAoTT0+KE0uY29sdW1uPT09ZCYmYS5sZW5ndGg+MCYmTS5jb25kaXRpb25zLmZvckVhY2goRD0+''@;'; put 'put ''eyJieV92YWx1ZSI9PT1ELm5hbWUmJihELmFyZ3M9W1suLi5oXV0pfSksTSkpKTtjb25zdCBmPWEuZmlsdGVyKE09Pk0ubmFtZT09PXc5KSx2PWEuZmlsdGVyKE09Pk0ubmFtZSE9PXc5KTtpZihmLmxlbmd0aD49Mnx8di5sZW5ndGg+PTMpaWwoZ2xgVGhlIGZpbHRlciBjb25kaXRpb25zIGhh''@;'; put 'put ''dmUgYmVlbiBhcHBsaWVkIHByb3Blcmx5LCBidXQgY291bGRu4oCZdCBiZSBkaXNwbGF5ZWQgdmlzdWFsbHkuXHgyMAogICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gbWVudS5ceDIwCiAgICAgICAg''@;'; put 'put ''Rm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGRvY3VtZW50YXRpb24uYCk7ZWxzZXtjb25zdCBNPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRPcGVyYXRpb24oZCk7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLnVwZGF0ZVN0YXRlKHZbMF0sZCksdGhpcy5j''@;'; put 'put ''b21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS51cGRhdGVTdGF0ZSh2WzFdLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS51cGRhdGVTdGF0ZShNLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLnVwZGF0ZVN0YXRl''@;'; put 'put ''KGMpfX1jb25zdCBJZ2U9ImludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUiLHdRPXtsaWNlbnNlS2V5OklnZSx1c2VBcnJheUFyaXRobWV0aWM6ITAsdXNlQ29sdW1uSW5kZXg6ITEsdXNlU3RhdHM6ITEsZXZhbHVhdGVOdWxsVG9aZXJvOiEwLHByZWNpc2lvbkVwc2lsb246MWUtMTMscHJl''@;'; put 'put ''Y2lzaW9uUm91bmRpbmc6MTQsc21hcnRSb3VuZGluZzohMCxsZWFwWWVhcjE5MDA6ITEsbnVsbERhdGU6e3llYXI6MTg5OSxtb250aDoxMixkYXk6MzB9LG51bGxZZWFyOjMwLGRhdGVGb3JtYXRzOlsiREQvTU0vWVlZWSIsIkREL01NL1lZIl0sdGltZUZvcm1hdHM6WyJoaDptbSIsImhoOm1t''@;'; put 'put ''OnNzLnNzcyJdLG1hdGNoV2hvbGVDZWxsOiEwLHVzZVJlZ3VsYXJFeHByZXNzaW9uczohMSx1c2VXaWxkY2FyZHM6ITAsZnVuY3Rpb25BcmdTZXBhcmF0b3I6IiwiLHRob3VzYW5kU2VwYXJhdG9yOiIiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGxhbmd1YWdlOiJlbkdCIn07ZnVuY3Rpb24gUmdl''@;'; put 'put ''KGMpe3ZhciBsO3JldHVybnttYXhDb2x1bW5zOmMubWF4Q29sdW1ucyxtYXhSb3dzOmMubWF4Um93cyxsYW5ndWFnZTpudWxsPT09KGw9Y1t3MV0pfHx2b2lkIDA9PT1sfHxudWxsPT09KGw9bC5sYW5ndWFnZSl8fHZvaWQgMD09PWw/dm9pZCAwOmwubGFuZ0NvZGV9fWZ1bmN0aW9uIExnZShj''@;'; put 'put ''KXtyZXR1cm4gT2JqZWN0LmtleXMoYykucmVkdWNlKChsLGEpPT4oImh5cGVyZm9ybXVsYSIhPT1hJiYobFthXT1jW2FdKSxsKSx7fSl9ZnVuY3Rpb24gSkYoKXtjb25zdCBjPSJlbmdpbmVfcmVsYXRpb25zaGlwIixsPXIzKHcxKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMs''@;'; put 'put ''bmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIENRKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1yMyh3MSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBPZ2UoYyl7dmFyIGw7Y29uc3QgYT1KRigp''@;'; put 'put ''LGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5ldyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlvbiBQZ2UoYyxsKXtpZihjKXtjb25zdCBhPUpGKCks''@;'; put 'put ''ZD1hLmdldChjKSxoPUNRKCksZj1oLmdldChjKTtkJiZkLmluY2x1ZGVzKGwpJiYoZC5zcGxpY2UoZC5pbmRleE9mKGwpLDEpLDA9PT1kLmxlbmd0aCYmYS5kZWxldGUoYykpLGYmJmYuaW5jbHVkZXMobC5ndWlkKSYmKGYuc3BsaWNlKGYuaW5kZXhPZihsLmd1aWQpLDEpLDA9PT1mLmxlbmd0''@;'; put 'put ''aCYmKGguZGVsZXRlKGMpLGMuZGVzdHJveSgpKSl9fWNvbnN0IEZnZT0iREQvTU0vWVlZWSI7ZnVuY3Rpb24gU1EoYyxsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiJkYXRlIj09PWx9ZnVuY3Rpb24gSGdlKGMsbCl7cmV0dXJuIE9vKGMsbCwhMCkuaXNWYWxpZCgpfWZ1bmN0aW9uIE5n''@;'; put 'put ''ZShjLGwpe3JldHVybiBPbyhjLGwsITApLmZvcm1hdChGZ2UpfWZ1bmN0aW9uIEZodChjLGwpe3JldHVybiBPbyhjLEZnZSwhMCkuZm9ybWF0KGwpfWZ1bmN0aW9uIFZnZShjLGwpe2NvbnN0IGQ9bmV3IERhdGUoRGF0ZS5VVEMoMCwwLGMrLTEpKTtyZXR1cm4gT28oZCkuZm9ybWF0KGwpfWZ1''@;'; put 'put ''bmN0aW9uIE1RKGMsbCxhKXtjb25zdCBkPWZ1bmN0aW9uIE5odChjLGwpe2NvbnN0IGE9W107cmV0dXJuIGMuZm9yRWFjaChkPT57Y29uc3QgaD17ZnJvbTpkLHRvOmx9O2EuZm9yRWFjaChmPT57Zi5mcm9tPmguZnJvbSYmZi50bzw9aC5mcm9tJiZmLmZyb20+Zi50byYmKGguZnJvbSs9MSl9''@;'; put 'put ''KSxoLmZyb20+PWwmJihsKz0xKSxhLnB1c2goaCl9KSxhfShjLGZ1bmN0aW9uIEhodChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKEFycmF5KGEpLmtleXMoKSkuZmlsdGVyKGY9PiExPT09Yy5pbmNsdWRlcyhmKSk7dmFyIGg7cmV0dXJuIDA9PT1sP251bGwhPT0oaD1kW2xdKSYmdm9pZCAw''@;'; put 'put ''IT09aD9oOjA6ZFtsLTFdKzF9KGMsbCxhKSk7cmV0dXJuIGZ1bmN0aW9uIFZodChjKXtyZXR1cm4gYy5mb3JFYWNoKChsLGEpPT57Yy5zbGljZShhKzEpLmZvckVhY2goaD0+e2guZnJvbT5sLmZyb20mJmguZnJvbTxoLnRvJiYoaC5mcm9tLT0xKX0pfSksY30oZCl9ZnVuY3Rpb24gTTkoYyxs''@;'; put 'put ''LGEpeyhmdW5jdGlvbiBCaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIENjKGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Z2V0KEJnZShjLGwpKX1mdW5jdGlvbiBsNihjLGwsYSl7cmV0dXJuIGMuc2V0KEJnZShjLGwpLGEpLGF9ZnVuY3Rpb24gQmdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgdEE9bmV3IFdlYWtNYXAsYzY9bmV3IFdlYWtNYXAsTmg9bmV3IFdlYWtNYXAsUUY9bmV3IFdlYWtNYXAseFE9bmV3IFdlYWtNYXAsRVE9bmV3IFdlYWtNYXAsZUg9bmV3IFdlYWtNYXA7Y29u''@;'; put 'put ''c3QgamdlPWNsYXNzIGpodHtjb25zdHJ1Y3RvcihsLGEsZCl7TTkodGhpcyx0QSx2b2lkIDApLE05KHRoaXMsYzYsdm9pZCAwKSxNOSh0aGlzLE5oLHZvaWQgMCksTTkodGhpcyxRRixbXSksTTkodGhpcyx4USxbXSksTTkodGhpcyxFUSx2b2lkIDApLE05KHRoaXMsZUgsW10pLGw2KHRBLHRo''@;'; put 'put ''aXMsbCksbDYoYzYsdGhpcyxhKSxsNihOaCx0aGlzLGQpfXNldFJlbW92ZWRIZkluZGV4ZXMobCl7cmV0dXJuIGw2KGVILHRoaXMsbC5tYXAoYT0+e2NvbnN0IGQ9Q2MoYzYsdGhpcykuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoYSk7cmV0dXJuIHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1''@;'; put 'put ''YWxJbmRleChkKX0pKSxDYyhlSCx0aGlzKX1nZXRSZW1vdmVkSGZJbmRleGVzKCl7cmV0dXJuIENjKGVILHRoaXMpfWdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT1DYyhjNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSxkPUNjKGM2LHRoaXMpLmdldE5vdFRyaW1tZWRJ''@;'; put 'put ''bmRleGVzKCk7cmV0dXJuIGEuaW5kZXhPZihkW2xdLGwpfXN5bmNNb3ZlcyhsKXtjb25zdCBkPWBtb3ZlJHtwMShDYyh0QSx0aGlzKSl9c2A7Q2MoTmgsdGhpcykuZ2V0RW5naW5lKCkuYmF0Y2goKCk9PntsLmZvckVhY2goaD0+e2guZnJvbSE9PWgudG8mJmguZnJvbSsxIT09aC50byYmQ2Mo''@;'; put 'put ''TmgsdGhpcykuZ2V0RW5naW5lKClbZF0oQ2MoTmgsdGhpcykuZ2V0U2hlZXRJZCgpLGguZnJvbSwxLGgudG8pfSl9KX1zdG9yZU1vdmVzSW5mb3JtYXRpb24obCxhLGQpeyExIT09ZCYmKGw2KHhRLHRoaXMsbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpKSksbDYo''@;'; put 'put ''RVEsdGhpcyx0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1jYWxjdWxhdGVBbmRTeW5jTW92ZXMobCxhKXtpZihDYyhOaCx0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpfHwhMT09PWx8fCExPT09YSlyZXR1cm47Y29uc3QgZD1NUShDYyh4USx0aGlzKSxDYyhFUSx0aGlz''@;'; put 'put ''KSxDYyhjNix0aGlzKS5nZXROdW1iZXJPZkluZGV4ZXMoKSk7bnVsbD09PUNjKE5oLHRoaXMpLmdldFNoZWV0SWQoKT9DYyhOaCx0aGlzKS5nZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMoZCkpOnRoaXMuc3luY01vdmVzKGQpfWdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9k''@;'; put 'put ''KCl7Y29uc3QgbD1gc2V0JHtwMShDYyh0QSx0aGlzKSl9T3JkZXJgO3JldHVybiBhPT57aWYoQ2MoTmgsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSlyZXR1cm47Y29uc3QgZD1DYyhjNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRlIj09PWEmJmQubGVuZ3RoPjAp''@;'; put 'put ''e2NvbnN0IGg9Q2MoUUYsdGhpcykubWFwKEQ9PmQuaW5kZXhPZihEKSksZj1DYyhOaCx0aGlzKS5nZXRFbmdpbmUoKS5nZXRTaGVldERpbWVuc2lvbnMoQ2MoTmgsdGhpcykuZ2V0U2hlZXRJZCgpKTtsZXQgdjt2PSJyb3ciPT09Q2ModEEsdGhpcyk/Zi5oZWlnaHQ6Zi53aWR0aDtmb3IobGV0''@;'; put 'put ''IEQ9aC5sZW5ndGg7RDx2O0QrPTEpaC5wdXNoKEQpO0NjKE5oLHRoaXMpLmdldEVuZ2luZSgpW2xdKENjKE5oLHRoaXMpLmdldFNoZWV0SWQoKSxoKX1sNihRRix0aGlzLGQpfX1pbml0KCl7bDYoUUYsdGhpcyxDYyhjNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSl9fTtmdW5jdGlvbiB4''@;'; put 'put ''OShjLGwsYSl7KGZ1bmN0aW9uIHpodChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVjUoYyxsKXtyZXR1''@;'; put 'put ''cm4gYy5nZXQoemdlKGMsbCkpfWZ1bmN0aW9uIEU5KGMsbCxhKXtyZXR1cm4gYy5zZXQoemdlKGMsbCksYSksYX1mdW5jdGlvbiB6Z2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB0SD1uZXcgV2Vha01hcCxuSD1uZXcgV2Vha01hcCxUUT1uZXcgV2Vha01hcCxBUT1uZXcgV2Vha01hcCxrUT1uZXcgV2Vha01hcCxEUT1uZXcgV2Vha01hcCxJUT1uZXcgV2Vha01h''@;'; put 'put ''cDtjb25zdCBaaHQ9Y2xhc3MgVWh0e2NvbnN0cnVjdG9yKGwsYSxkKXt4OSh0aGlzLHRILHZvaWQgMCkseDkodGhpcyxuSCx2b2lkIDApLHg5KHRoaXMsVFEsdm9pZCAwKSx4OSh0aGlzLEFRLCExKSx4OSh0aGlzLGtRLCExKSx4OSh0aGlzLERRLG51bGwpLHg5KHRoaXMsSVEsbnVsbCksRTko''@;'; put 'put ''dEgsdGhpcyxuZXcgamdlKCJyb3ciLGwsdGhpcykpLEU5KG5ILHRoaXMsbmV3IGpnZSgiY29sdW1uIixhLHRoaXMpKSxFOShUUSx0aGlzLGQpfWdldEZvckF4aXMobCl7cmV0dXJuIFY1KCJyb3ciPT09bD90SDpuSCx0aGlzKX1zZXRQZXJmb3JtVW5kbyhsKXtFOShBUSx0aGlzLGwpfXNldFBl''@;'; put 'put ''cmZvcm1SZWRvKGwpe0U5KGtRLHRoaXMsbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8oKXtyZXR1cm4gVjUoQVEsdGhpcyl8fFY1KGtRLHRoaXMpfWdldFNoZWV0SWQoKXtyZXR1cm4gVjUoSVEsdGhpcyl9Z2V0RW5naW5lKCl7cmV0dXJuIFY1KERRLHRoaXMpfWdldFBvc3Rwb25lQWN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIFY1KFRRLHRoaXMpfXNldHVwU3luY0VuZHBvaW50KGwsYSl7RTkoRFEsdGhpcyxsKSxFOShJUSx0aGlzLGEpLFY1KHRILHRoaXMpLmluaXQoKSxWNShuSCx0aGlzKS5pbml0KCl9fTtmdW5jdGlvbiBUOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWWh0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIEdodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gUlEoYyxsLGEpe1VnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVWdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90''@;'; put 'put ''IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB1NihjLGwsYSl7cmV0dXJuIGMuc2V0KGpzKGMsbCksYSksYX1mdW5jdGlvbiBBOShjLGwpe3JldHVybiBjLmdldChqcyhjLGwpKX1mdW5jdGlvbiBqcyhjLGwsYSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdzE9ImZvcm11bGFzIiwkaHQ9WyJtYXhS''@;'; put 'put ''b3dzIiwibWF4Q29sdW1ucyIsImxhbmd1YWdlIl07U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVn''@;'; put 'put ''aXN0ZXIoImFmdGVyU2hlZXRBZGRlZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVtb3ZlZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVuYW1lZCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckZvcm11bGFzVmFs''@;'; put 'put ''dWVzVXBkYXRlIik7Y29uc3QgbHc9Yz0+IlVuZG9SZWRvLnVuZG8iPT09Y3x8IlVuZG9SZWRvLnJlZG8iPT09Y3x8ImF1dG8iPT09Yzt2YXIgQjU9bmV3IFdlYWtNYXAsckg9bmV3IFdlYWtNYXAsbkE9bmV3IFdlYWtNYXAsJHM9bmV3IFdlYWtTZXQ7Y2xhc3MgcWh0IGV4dGVuZHMgRnN7Y29u''@;'; put 'put ''c3RydWN0b3IoKXt2YXIgbDtzdXBlciguLi5hcmd1bWVudHMpLGw9dGhpcyxmdW5jdGlvbiBXaHQoYyxsKXtVZ2UoYyxsKSxsLmFkZChjKX0odGhpcywkcyksUlEodGhpcyxCNSwhMSksUlEodGhpcyxySCwhMSksUlEodGhpcyxuQSxbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqcygkcyxsLGgydCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk''@;'; put 'put ''PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ganMoJHMsbCxmMnQpLmNhbGwobCwuLi5kKX1dLFsibmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxh''@;'; put 'put ''O2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ganMoJHMsbCxwMnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ganMo''@;'; put 'put ''JHMsbCxnMnQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqcygkcyxsLG0ydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVl''@;'; put 'put ''dFJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGpzKCRzLGwsdjJ0KS5jYWxsKGwsLi4uZCl9XV0pLFQ5KHRoaXMsInN0YXRpY1JlZ2lzdGVyIixyMygiZm9ybXVs''@;'; put 'put ''YXMiKSksVDkodGhpcywiZW5naW5lIixudWxsKSxUOSh0aGlzLCJzaGVldElkIixudWxsKSxUOSh0aGlzLCJzaGVldE5hbWUiLG51bGwpLFQ5KHRoaXMsImluZGV4U3luY2VyIixudWxsKSxUOSh0aGlzLCJyb3dBeGlzU3luY2VyIixudWxsKSxUOSh0aGlzLCJjb2x1bW5BeGlzU3luY2VyIixu''@;'; put 'put ''dWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdzF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjYwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3cxLC4uLiRodF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''W3cxXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9bnVsbCE9PShsPWZ1bmN0aW9uIFRodChjKXtjb25zdCBsPWMuZ2V0U2V0dGluZ3MoKSxhPWxbdzFdLGQ9YT8uZW5naW5lO2lmKCEwPT09YXx8eWMoZCkpcmV0dXJuIG51bGw7''@;'; put 'put ''dmFyIGg7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQuaHlwZXJmb3JtdWxhfHwiZnVuY3Rpb24iPT10eXBlb2YgZClyZXR1cm4gZnVuY3Rpb24gQWh0KGMsbCxhKXtjb25zdCBkPWxbdzFdLGg9ZnVuY3Rpb24gTWh0KGMpe3ZhciBsO2NvbnN0IGE9Y1t3MV0sZD1MZ2UobnVsbCE9YSYmbnVsbCE9''@;'; put 'put ''PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLGg9UmdlKGMpO3JldHVybnsuLi53USwuLi5kLC4uLmh9fShsKSxmPUpGKCksdj1DUSgpOyhmdW5jdGlvbiBraHQoYyxsKXtsJiZsLmZvckVhY2goYT0+e2NvbnN0e25hbWU6ZCxwbHVnaW46aCx0''@;'; put 'put ''cmFuc2xhdGlvbnM6Zn09YTt0cnl7Yy5yZWdpc3RlckZ1bmN0aW9uKGQsaCxmKX1jYXRjaCh2KXtpbCh2Lm1lc3NhZ2UpfX0pfSkoYyxkLmZ1bmN0aW9ucyksZnVuY3Rpb24gRGh0KGMsbCl7aWYobCl7Y29uc3R7bGFuZ0NvZGU6YX09bDt0cnl7Yy5yZWdpc3Rlckxhbmd1YWdlKGEsbCl9Y2F0''@;'; put 'put ''Y2goZCl7aWwoZC5tZXNzYWdlKX19fShjLGQubGFuZ3VhZ2UpO2NvbnN0IE09Yy5idWlsZEVtcHR5KGgpO3JldHVybiBmLnNldChNLFthXSksdi5zZXQoTSxbYS5ndWlkXSksZnVuY3Rpb24gSWh0KGMsbCl7bCYmKGMuc3VzcGVuZEV2YWx1YXRpb24oKSxsLmZvckVhY2goYT0+e2NvbnN0e25h''@;'; put 'put ''bWU6ZCxleHByZXNzaW9uOmgsc2NvcGU6ZixvcHRpb25zOnZ9PWE7dHJ5e2MuYWRkTmFtZWRFeHByZXNzaW9uKGQsaCxmLHYpfWNhdGNoKE0pe2lsKE0ubWVzc2FnZSl9fSksYy5yZXN1bWVFdmFsdWF0aW9uKCkpfShNLGQubmFtZWRFeHByZXNzaW9ucyksTS5vbigic2hlZXRBZGRlZCIsKCk9''@;'; put 'put ''PntNLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksTS5vbigic2hlZXRSZW1vdmVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNfShudWxsIT09KGg9ZC5oeXBlcmZvcm11bGEpJiZ2b2lkIDAhPT1oP2g6ZCxsLGMpO2lmKCJvYmplY3QiPT10eXBlb2YgZCYmeWMoZC5oeXBl''@;'; put 'put ''cmZvcm11bGEpKXtjb25zdCBmPUpGKCksdj1DUSgpLmdldChkKTtyZXR1cm4gZi5oYXMoZCl8fGYuc2V0KGQsW10pLGYuZ2V0KGQpLnB1c2goYyksdiYmdi5wdXNoKGMuZ3VpZCksZC5nZXRDb25maWcoKS5saWNlbnNlS2V5fHxkLnVwZGF0ZUNvbmZpZyh7bGljZW5zZUtleTpJZ2V9KSwoZC5n''@;'; put 'put ''ZXRDb25maWcoKS5sZWFwWWVhcjE5MDAhPT13US5sZWFwWWVhcjE5MDB8fCExPT09Tk8oZC5nZXRDb25maWcoKS5udWxsRGF0ZSx3US5udWxsRGF0ZSkpJiZpbChnbGBJZiB5b3UgdXNlIEh5cGVyRm9ybXVsYSB3aXRoIEhhbmRzb250YWJsZSwga2VlcCB0aGUgZGVmYXVsdCBcYGxlYXBZZWFy''@;'; put 'put ''MTkwMFxgIGFuZCBcYG51bGxEYXRlXGAgCiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKSxkfXJldHVybiBudWxsfSh0aGlzLmhvdCkpJiZ2b2lkIDAhPT1sP2w6''@;'; put 'put ''dGhpcy5lbmdpbmUsIXRoaXMuZW5naW5lKXJldHVybiB2b2lkIGlsKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkgaW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQbGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3IgYW4gZW5naW5lIGluc3RhbmNl''@;'; put 'put ''LiIpO2lmKG51bGwhPT10aGlzLnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7Y29uc3QgZD10aGlzLmFkZFNoZWV0KHRoaXMuc2hlZXROYW1lLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTshMSE9PWQmJmpzKCRzLHRoaXMsckEp''@;'; put 'put ''LmNhbGwodGhpcyxkKX10aGlzLmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFpnZSkuY2FsbChhLC4uLmgpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFdnZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVV''@;'; put 'put ''cGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFpnZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsV2dlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsZTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1u''@;'; put 'put ''ZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsdDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtm''@;'; put 'put ''PGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFhodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKysp''@;'; put 'put ''aFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsbjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50''@;'; put 'put ''c1tmXTtyZXR1cm4ganMoJHMsYSxZZ2UpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVy''@;'; put 'put ''biBqcygkcyxhLFlnZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEscjJ0KS5j''@;'; put 'put ''YWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxpMnQpLmNhbGwoYSwuLi5oKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsczJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVy''@;'; put 'put ''Q3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLGwydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsYTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxvMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''aD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsYzJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9''@;'; put 'put ''MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLHUydCkuY2FsbChhLC4uLmgpfSksdGhpcy5pbmRleFN5bmNlcj1uZXcgWmh0KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGQ9Pnt0aGlzLmhvdC5hZGRIb29rT25jZSgi''@;'; put 'put ''aW5pdCIsKCk9PntkKCl9KX0pLHRoaXMucm93QXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoInJvdyIpLHRoaXMuY29sdW1uQXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoImNvbHVtbiIpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93U2VxdWVu''@;'; put 'put ''Y2VDaGFuZ2UiLHRoaXMucm93QXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3Qu''@;'; put 'put ''YWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCxmLHYpPT57dGhpcy5yb3dBeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zl''@;'; put 'put ''c0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93TW92ZSIsKGQsaCxmLHYsTSk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbk1vdmUiLChkLGgsZix2LE0pPT57''@;'; put 'put ''dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zlcyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KCkuZml4ZWRDb2x1bW5zU3RhcnQsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsKGQs''@;'; put 'put ''aCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblVuZnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5''@;'; put 'put ''bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDZWxsTWV0YVJlc2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxh''@;'; put 'put ''LFFodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITApLHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZv''@;'; put 'put ''cm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRvKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITEp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLGQydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxKaHQpLmNhbGwoYSwuLi5oKX0pLEE5KG5BLHRoaXMpLmZvckVhY2goZD0+e2xldFto''@;'; put 'put ''LGZdPWQ7cmV0dXJuIHRoaXMuZW5naW5lLm9uKGgsZil9KSxzdXBlci5lbmFibGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe0E5KG5BLHRoaXMpLmZvckVhY2gobD0+e2xldFthLGRdPWw7cmV0dXJuIHRoaXMuZW5naW5lLm9mZihhLGQpfSksUGdlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0''@;'; put 'put ''aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4obCl7Y29uc3QgYT1mdW5jdGlvbiB4aHQoYyl7dmFyIGw7Y29uc3QgYT1jW3cxXTtyZXR1cm57Li4uTGdlKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3Jt''@;'; put 'put ''dWxhP2EuZW5naW5lOnt9KSwuLi5SZ2UoYyl9fSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpKTsoZnVuY3Rpb24gRWh0KGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLnNvbWUoYT0+dm9pZCAwIT09bFthXSYmbFthXSE9PWNbYV0pfSkodGhpcy5lbmdpbmUuZ2V0Q29uZmlnKCksYSkmJnRoaXMu''@;'; put 'put ''ZW5naW5lLnVwZGF0ZUNvbmZpZyhhKTtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdO2lmKFBhKGQpJiZQYShkLnNoZWV0TmFtZSkmJmQuc2hlZXROYW1lIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQoZC5zaGVldE5hbWUpLCFsLmRhdGEmJm51bGw9PT10aGlz''@;'; put 'put ''LnNoZWV0TmFtZSl7Y29uc3QgaD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXS5zaGVldE5hbWU7aWYoaCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QoaCkpdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBmPXRoaXMuYWRkU2hlZXQoaD8/dm9pZCAwLHRo''@;'; put 'put ''aXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTtqcygkcyx0aGlzLHJBKS5jYWxsKHRoaXMsZil9fXN1cGVyLnVwZGF0ZVBsdWdpbihsKX1kZXN0cm95KCl7QTkobkEsdGhpcykuZm9yRWFjaChsPT57dmFyIGE7bGV0W2QsaF09bDtyZXR1cm4gbnVsbD09PShhPXRoaXMuZW5naW5lKXx8dm9p''@;'; put 'put ''ZCAwPT09YT92b2lkIDA6YS5vZmYoZCxoKX0pLHU2KG5BLHRoaXMsbnVsbCksUGdlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRlc3Ryb3koKX1hZGRTaGVldChsLGEpe2lmKFBhKGEpJiYhUzNlKGEpKXJldHVybiBpbCgiVGhlIHByb3ZpZGVkIGRhdGEg''@;'; put 'put ''c2hvdWxkIGJlIGFuIGFycmF5IG9mIGFycmF5cy4iKSwhMTtpZihudWxsIT1sJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gaWwoIlNoZWV0IHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIiksITE7dHJ5e2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRk''@;'; put 'put ''U2hlZXQobD8/dm9pZCAwKTtyZXR1cm4gYSYmdGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuZW5naW5lLmdldFNoZWV0SWQoZCksYSksZH1jYXRjaChkKXtyZXR1cm4gaWwoZC5tZXNzYWdlKSwhMX19c3dpdGNoU2hlZXQobCl7aWYoIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0''@;'; put 'put ''KGwpKXJldHVybiB2b2lkIEYkKGBUaGUgc2hlZXQgbmFtZWQgXGAke2x9XGAgZG9lcyBub3QgZXhpc3QsIHN3aXRjaCBhYm9ydGVkLmApO2pzKCRzLHRoaXMsckEpLmNhbGwodGhpcyxsKTtjb25zdCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0aGlzLnNoZWV0SWQpO2EubGVu''@;'; put 'put ''Z3RoPjAmJnRoaXMuaG90LmxvYWREYXRhKGEsYCR7cDEodzEpfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25zdCBoPXRoaXMuaG90LnRvUGh5''@;'; put 'put ''c2ljYWxSb3cobCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVsbCE9PWY/dGhpcy5lbmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNv''@;'; put 'put ''bHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxhQ2VsbFR5cGUobCxhKXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9ybXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/''@;'; put 'put ''YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpe2xldCBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1uZXcgU2V0O2wuZm9yRWFjaChoPT57dmFyIGY7Y29uc3Qgdj1udWxsPT1ofHxudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zaGVldDt2b2lkIDAh''@;'; put 'put ''PT12JiYoZC5oYXModil8fGQuYWRkKHYpKX0pLE9nZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3ZhciB2OyhhfHxmIT09dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigpLG51bGw9PT0odj1oLnZpZXcpfHx2b2lkIDA9PT12fHx2LmFkanVzdEVsZW1lbnRzU2l6ZSgp''@;'; put 'put ''KX0pfXZhbGlkYXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkQsc2hlZXQ6Wn09bnVsbCE9PSh2PWY/LmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307cmV0dXJuIFBhKFopP2Ake1p9OiR7TX14JHtEfWA6IiJ9LGg9bmV3IFNldCgoYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+ZChmKSkpO2wuZm9yRWFjaChmPT57dmFyIHYsTTtjb25zdHtyb3c6RCxjb2w6Wn09bnVsbCE9PSh2PWYuYWRkcmVzcykmJnZvaWQgMCE9PXY/djp7fTtpZighMT09PVBhKEQpfHwhMT09''@;'; put 'put ''PVBhKFopfHxEPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8Wj49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IHJlPW51bGw9PWZ8fG51bGw9PT0oTT1mLmFkZHJlc3MpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLnNoZWV0LGNlPWQoZik7aWYodm9pZCAwIT09cmUmJiFoLmhhcyhjZSkp''@;'; put 'put ''e2NvbnN0IGJlPU9nZSh0aGlzLmVuZ2luZSkuZ2V0KHJlKTtpZighYmUpcmV0dXJuO2JlLnZhbGlkYXRlQ2VsbChiZS5nZXREYXRhQXRDZWxsKEQsWiksYmUuZ2V0Q2VsbE1ldGEoRCxaKSwoKT0+e30pfX0pfXN5bmNDaGFuZ2VXaXRoRW5naW5lKGwsYSxkKXtjb25zdCBoPXtyb3c6dGhpcy5y''@;'; put 'put ''b3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07aWYoIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGgp''@;'; put 'put ''KXJldHVybiB2b2lkIGlsKGBOb3QgcG9zc2libGUgdG8gc2V0IGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGgpfWApO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtyZXR1cm4gU1EoZCxmLnR5cGUpJiYoSGdlKGQsZi5kYXRlRm9ybWF0KT9kPU5nZShkLGYuZGF0ZUZv''@;'; put 'put ''cm1hdCk6ITE9PT1mdW5jdGlvbiBQaHQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiZjLnN0YXJ0c1dpdGgoIj0iKX0oZCkmJihkPWAnJHtkfWApKSx0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoaCxkKX19ZnVuY3Rpb24gckEoYyl7dGhpcy5zaGVldE5hbWU9Yyx0aGlzLnNoZWV0''@;'; put 'put ''SWQ9dGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSl9ZnVuY3Rpb24gWGh0KGMsbCxhKXtjb25zdCBkPXRoaXMuaG90LnByb3BUb0NvbChhKTtpZih0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGwsZCkpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRl''@;'; put 'put ''eEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCksc2hlZXQ6dGhpcy5zaGVldElkfSxmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsZCk7bGV0IHY9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKGgpO3JldHVybiJk''@;'; put 'put ''YXRlIj09PWYudHlwZSYmbTEodikmJih2PVZnZSh2LGYuZGF0ZUZvcm1hdCkpLCJvYmplY3QiPT10eXBlb2YgdiYmbnVsbCE9PXY/di52YWx1ZTp2fXJldHVybiBjfWZ1bmN0aW9uIEpodChjLGwsYSl7Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmYsY29s''@;'; put 'put ''OnZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCkse3JvdzpNLGNvbDpEfT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpaLGNvbDpyZX09YS5nZXRCb3R0b21FbmRDb3JuZXIoKSxjZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxj''@;'; put 'put ''b2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5k''@;'; put 'put ''ZXhGcm9tVmlzdWFsSW5kZXgodiksc2hlZXQ6dGhpcy5zaGVldElkfX0sYmU9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoTSksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEQpLHNoZWV0''@;'; put 'put ''OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoWiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHJlKSxzaGVldDp0aGlzLnNoZWV0SWR9fTtpZighMT09PXRoaXMuZW5n''@;'; put 'put ''aW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGJlKSlyZXR1cm4hMTtjb25zdCBFZT10aGlzLmVuZ2luZS5nZXRGaWxsUmFuZ2VEYXRhKGNlLGJlKSx7cm93OkJlLGNvbDpxZX09Y2Uuc3RhcnQse3JvdzpydCxjb2w6cHR9PWNlLmVuZCxkdD1ydC1CZSsxLEp0PXB0LXFlKzE7Zm9y''@;'; put 'put ''KGxldCB2bj0wO3ZuPEVlLmxlbmd0aDt2bis9MSlmb3IobGV0IENuPTA7Q248RWVbdm5dLmxlbmd0aDtDbis9MSl7Y29uc3QgdG49RWVbdm5dW0NuXSxNbj1CZSt2biVkdCx3cj1xZStDbiVKdCxHcj10aGlzLmhvdC5nZXRDZWxsTWV0YShNbix3cik7U1EodG4sR3IudHlwZSkmJih0bi5zdGFy''@;'; put 'put ''dHNXaXRoKCInIik/RWVbdm5dW0NuXT10bi5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoTW4sd3IsdGhpcy5zaGVldElkKSYmKEVlW3ZuXVtDbl09Rmh0KHRuLEdyLmRhdGVGb3JtYXQpKSl9cmV0dXJuIEVlfWZ1bmN0aW9uIFpnZShjLGwpeyhhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiIpLmluY2x1ZGVzKHAxKHcxKSl8fHU2KHJILHRoaXMseWModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kYXRhKSl9ZnVuY3Rpb24gUWh0KCl7aWYoQTkockgsdGhpcykpcmV0dXJuIHZvaWQgdGhpcy5zd2l0Y2hTaGVldCh0''@;'; put 'put ''aGlzLnNoZWV0TmFtZSk7Y29uc3QgYz10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtjLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goKGgsZik9Pntjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsZix7c2tpcE1ldGFFeHRlbnNpb246ITB9KSxNPXYuZGF0ZUZvcm1hdDtTUSho''@;'; put 'put ''LHYudHlwZSkmJihIZ2UoaCxNKT9jW2RdW2ZdPU5nZShoLE0pOmguc3RhcnRzV2l0aCgiPSIpfHwoY1tkXVtmXT1gJyR7aH1gKSl9KX0pLHU2KEI1LHRoaXMsITApO2NvbnN0IGw9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxjKTt0aGlzLmluZGV4U3luY2VyLnNl''@;'; put 'put ''dHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMuc2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMobCksdTYoQjUsdGhpcywhMSl9ZnVuY3Rpb24gV2dlKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJd''@;'; put 'put ''OiIiO2lmKGEuaW5jbHVkZXMocDEodzEpKSlyZXR1cm47Y29uc3QgZD1mdW5jdGlvbiBSaHQoYyxsKXtyZXR1cm4oeWMobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV0uc2hlZXROYW1l''@;'; put 'put ''KTtpZihqcygkcyx0aGlzLHJBKS5jYWxsKHRoaXMsZCksInVwZGF0ZVNldHRpbmdzIiE9PWEpaWYoQTkockgsdGhpcykpdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7ZWxzZXtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2lmKHRoaXMuZW5naW5lLmlzSXRQ''@;'; put 'put ''b3NzaWJsZVRvUmVwbGFjZVNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCkpe3U2KEI1LHRoaXMsITApO2NvbnN0IGY9dGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKTt0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLHRoaXMu''@;'; put 'put ''c2hlZXRJZCksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiksdTYoQjUsdGhpcywhMSl9fX1mdW5jdGlvbiBlMnQoYyxsLGEsZCl7aWYoImdldCIhPT1kfHxBOShCNSx0aGlzKXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVl''@;'; put 'put ''dE5hbWUpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGMpO2lmKG51bGw9PT1ofHxudWxsPT09bClyZXR1cm47Y29uc3QgZj10aGlzLmdldENlbGxUeXBlKGgsbCk7aWYoIlZBTFVFIj09PWZ8fCJFTVBUWSI9PT1mKXJldHVybiB2b2lkKGEudmFsdWU9ZnVuY3Rpb24gT2h0''@;'; put 'put ''KGMpe3JldHVybiBmdW5jdGlvbiBMaHQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiJyI9PT1jLmNoYXJBdCgwKSYmIj0iPT09Yy5jaGFyQXQoMSl9KGMpP2Muc3Vic3RyKDEpOmN9KGEudmFsdWUpKTtjb25zdCB2PXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLHNoZWV0OnRoaXMuc2hlZXRJZH07bGV0IE09dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKHYpO2NvbnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoaCxsLHtza2lwTWV0''@;'; put 'put ''YUV4dGVuc2lvbjohMH0pOyJkYXRlIj09PUQudHlwZSYmbTEoTSkmJihNPVZnZShNLEQuZGF0ZUZvcm1hdCkpLGEudmFsdWU9Im9iamVjdCI9PXR5cGVvZiBNJiZudWxsIT09TT9NLnZhbHVlOk19ZnVuY3Rpb24gdDJ0KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8QTkoQjUsdGhpcyl8fG51bGw9''@;'; put 'put ''PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKSxmPXRoaXMuaG90LnByb3BUb0NvbChsKTtpZihudWxsPT09aHx8bnVsbD09PWYpcmV0dXJuO2NvbnN0IHY9dGhp''@;'; put 'put ''cy5nZXRDZWxsVHlwZShoLGYpO2lmKCJWQUxVRSI9PT12fHwiRU1QVFkiPT09dilyZXR1cm47Y29uc3QgTT10aGlzLmVuZ2luZS5nZXRTaGVldERpbWVuc2lvbnModGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSkpO2lmKDA9PT1NLndpZHRoJiYwPT09TS5oZWlnaHQpcmV0''@;'; put 'put ''dXJuO2NvbnN0IEQ9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksc2hlZXQ6dGhpcy5zaGVldElkfTthLnZhbHVlPXRoaXMuZW5naW5lLmdldENl''@;'; put 'put ''bGxTZXJpYWxpemVkKEQpfWZ1bmN0aW9uIFlnZShjLGwpe2lmKGx3KGwpKXJldHVybjtjb25zdCBhPVtdLGQ9W10saD10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2MuZm9yRWFjaChmPT57bGV0W3YsTSwsRF09Zjtjb25zdCBaPXRoaXMuaG90LnByb3BUb0NvbChNKSxyZT10aGlzLmhvdC50b1Bo''@;'; put 'put ''eXNpY2FsUm93KHYpLGNlPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oWiksYmU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2KSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoWiksc2hlZXQ6dGhp''@;'; put 'put ''cy5zaGVldElkfTtudWxsIT09cmUmJm51bGwhPT1jZT90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKHYsWixEKTphLnB1c2goW3YsWixEXSksZC5wdXNoKHthZGRyZXNzOmJlfSl9KX0pO2EubGVuZ3RoJiZ0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLCgpPT57Y29uc3QgZj10''@;'; put 'put ''aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2EuZm9yRWFjaCh2PT57bGV0W00sRCxaXT12O3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUoTSxELFopfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmLCEwKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGgpLHRoaXMudmFsaWRhdGVE''@;'; put 'put ''ZXBlbmRlbnRDZWxscyhoLGQpfWZ1bmN0aW9uIG4ydChjLGwpe2lmKGx3KGwpKXJldHVybjtjb25zdCBhPVtdLGQ9W107Yy5mb3JFYWNoKGg9PntsZXRbZix2LCxNXT1oO2NvbnN0IEQ9dGhpcy5ob3QucHJvcFRvQ29sKHYpO2lmKCFtMShEKSlyZXR1cm47Y29uc3QgWj17cm93OnRoaXMucm93''@;'; put 'put ''QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9O3RoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKFopPyhkLnB1''@;'; put 'put ''c2goe2FkZHJlc3M6Wn0pLGEucHVzaCguLi50aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoWixNKSkpOmlsKGBOb3QgcG9zc2libGUgdG8gc2V0IHNvdXJjZSBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShaKX1gKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGEpLHRoaXMu''@;'; put 'put ''dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhhLGQpfWZ1bmN0aW9uIHIydChjLGwpe2xldCBhPXRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50Um93cygpJiYoYT1jKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdp''@;'; put 'put ''bmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRSb3dzKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gaTJ0KGMsbCl7bGV0IGE9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFs''@;'; put 'put ''SW5kZXgoYyk7aWYoYz49dGhpcy5ob3QuY291bnRDb2xzKCkmJihhPWMpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZENvbHVtbnModGhpcy5zaGVldElkLFthLGxd''@;'; put 'put ''KSlyZXR1cm4hMX1mdW5jdGlvbiBhMnQoYyxsLGEpe3JldHVybiExIT09dGhpcy5yb3dBeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoYSkuZXZlcnkoZj0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbZiwxXSkpJiZ2b2lkIDB9ZnVuY3Rp''@;'; put 'put ''b24gbzJ0KGMsbCxhKXtyZXR1cm4hMSE9PXRoaXMuY29sdW1uQXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIHMydChjLGws''@;'; put 'put ''YSl7aWYobHcoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGxdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKX1mdW5jdGlvbiBsMnQoYyxsLGEpe2lm''@;'; put 'put ''KGx3KGEpKXJldHVybjtjb25zdCBkPXRoaXMuZW5naW5lLmFkZENvbHVtbnModGhpcy5zaGVldElkLFt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gYzJ0KGMsbCxhLGQp''@;'; put 'put ''e2lmKGx3KGQpKXJldHVybjtjb25zdCBoPXRoaXMucm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgodixNKT0+TS12KSxmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57aC5mb3JFYWNoKHY9Pnt0aGlzLmVuZ2luZS5yZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbdiwxXSl9''@;'; put 'put ''KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpfWZ1bmN0aW9uIHUydChjLGwsYSxkKXtpZihsdyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+''@;'; put 'put ''e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKX1mdW5jdGlvbiBkMnQoYyxsLGEpe3ZhciBkO3U2KEI1LHRoaXMsITApO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0''@;'; put 'put ''YUFycmF5KGEsMCxhKygobnVsbD09PShkPWwuX19jaGlsZHJlbil8fHZvaWQgMD09PWQ/dm9pZCAwOmQubGVuZ3RoKXx8MCksdGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO3U2KEI1LHRoaXMsITEpLGguZm9yRWFjaCgoZix2KT0+e2YuZm9yRWFjaCgoTSxEKT0+e3RoaXMuZW5naW5lLnNl''@;'; put 'put ''dENlbGxDb250ZW50cyh7Y29sOkQscm93OmErdixzaGVldDp0aGlzLnNoZWV0SWR9LFtbTV1dKX0pfSl9ZnVuY3Rpb24gaDJ0KGMpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixjKX1mdW5jdGlvbiBmMnQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsYyxsKX1mdW5jdGlvbiBwMnQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixjLGwpfWZ1bmN0aW9uIGcydChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldEFkZGVkIixjKX1mdW5jdGlvbiBt''@;'; put 'put ''MnQoYyxsKXtqcygkcyx0aGlzLHJBKS5jYWxsKHRoaXMsbCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixjLGwpfWZ1bmN0aW9uIHYydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVtb3ZlZCIsYyxsKX1mdW5jdGlvbiBHZ2UoYyxsKXtpZihsLmhh''@;'; put 'put ''cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGs5KGMsbCl7cmV0dXJuIGMuZ2V0KGQ2KGMsbCkpfWZ1bmN0aW9uICRnZShjLGwsYSl7cmV0dXJuIGMuc2V0KGQ2''@;'; put 'put ''KGMsbCksYSksYX1mdW5jdGlvbiBkNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0''@;'; put 'put ''Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVDb2x1bW5zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZUNvbHVtbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlQ29sdW1ucyIpLFNhLmdldFNpbmdsZXRvbigp''@;'; put 'put ''LnJlZ2lzdGVyKCJhZnRlclVuaGlkZUNvbHVtbnMiKTtjb25zdCBLZ2U9ImhpZGRlbkNvbHVtbnMiO3ZhciBacD1uZXcgV2Vha01hcCxEOT1uZXcgV2Vha1NldDtjbGFzcyBTMnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gXzJ0KGMsbCl7''@;'; put 'put ''R2dlKGMsbCksbC5hZGQoYyl9KHRoaXMsRDkpLGZ1bmN0aW9uIHcydChjLGwsYSl7R2dlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxacCxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gS2dlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMxMH1zdGF0aWMg''@;'; put 'put ''Z2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57Y29weVBhc3RlRW5hYmxlZDohMCxpbmRpY2F0b3JzOiExLGNvbHVtbnM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtLZ2VdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwo''@;'; put 'put ''JGdlKFpwLHRoaXMsbmV3IGZQKSxrOShacCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5kNihEOSx0aGlzLGsydCkuY2FsbCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLGs5KFpwLHRoaXMpKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZDYoRDksbCxBMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJHZXRDZWxsTWV0YSIsKGEsZCxoKT0+ZDYoRDksdGhpcyx4MnQpLmNhbGwodGhpcyxhLGQsaCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLChhLGQpPT5kNihEOSx0aGlzLE0ydCkuY2FsbCh0aGlzLGEsZCksMiksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZDYoRDksbCxUMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsYT0+ZDYoRDksdGhp''@;'; put 'put ''cyxFMnQpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPWs5KFpw''@;'; put 'put ''LHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihZbihsLm1hcChaPT50aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKFopKSxaPT57ZltaXT0hMX0pLGg9cXUoZiwoWixyZSxjZSk9PihyZSYmWi5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGNlKSksWiks''@;'; put 'put ''W10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVDb2x1bW5zIixhLGgsZCYmdikmJihkJiZ2JiZrOShacCx0aGlzKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5z''@;'; put 'put ''IixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXNob3dDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dDb2x1bW5zKGEpfWhpZGVDb2x1bW5zKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZUNvbHVtbnMiLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhl''@;'; put 'put ''Y3V0aW9uKCgpPT57WW4obCx2PT57azkoWnAsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odiksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1ucyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRlQ29sdW1u''@;'; put 'put ''KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlQ29sdW1ucyhhKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuIHlzKGs5KFpwLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhv''@;'; put 'put ''dC50b1Zpc3VhbENvbHVtbihsKSl9aXNIaWRkZW4obCl7cmV0dXJuIGs5KFpwLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiEhKEFycmF5Lmlz''@;'; put 'put ''QXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtZbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bC5za2lwQ29sdW1uT25QYXN0ZT0hMX0pfWRlc3Ryb3koKXskZ2UoWnAsdGhpcyxudWxs''@;'; put 'put ''KSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIE0ydChjLGwpe3JldHVybiB0aGlzLmlzSGlkZGVuKGwpPzA6dGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIikmJih0aGlzLmlzSGlkZGVuKGwrMSl8fHRoaXMuaXNIaWRkZW4obC0xKSkmJiJudW1iZXIiPT10eXBlb2YgYyYmdGhpcy5ob3Qu''@;'; put 'put ''aGFzQ29sSGVhZGVycygpP2MrMTU6dm9pZCAwfWZ1bmN0aW9uIHgydChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRlbihsKSYmKGEuc2tpcENvbHVtbk9uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4obC0xKSlhLmNsYXNzTmFt''@;'; put 'put ''ZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Db2x1bW4iKTtlbHNlIGlmKGEuY2xhc3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+''@;'; put 'put ''MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1bmN0aW9uIEUydChjKXtpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9''@;'; put 'put ''KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIFluKGMsZD0+e2xldCBoPSEwLGY9MDtHYShkLnN0YXJ0Q29sLGQuZW5kQ29sLHY9Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2''@;'; put 'put ''LTEpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRDb2wmJmEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIFQydChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRk''@;'; put 'put ''ZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlbkNvbHVtbiIpLGM8dGhpcy5ob3QuY291bnRDb2xzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlbkNvbHVtbiIpLFRpKGwsYSl9ZnVuY3Rpb24gQTJ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rp''@;'; put 'put ''b24gYjJ0KGMpe3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFssZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQ''@;'; put 'put ''aHJhc2UoRHEsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwuY29sLGEuY29sKSwwKSxoPU1hdGgubWF4KGwuY29sLGEuY29sKSxmPVtdO2ZvcihsZXQgRD1kO0Q8PWg7RCs9MSlmLnB1c2go''@;'; put 'put ''RCk7Yy5oaWRlQ29sdW1ucyhmKTtjb25zdCBNPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihNKSYmTT49MD90aGlzLnNlbGVjdENvbHVtbnMoTSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0''@;'; put 'put ''aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1''@;'; put 'put ''bmN0aW9uIHkydChjKXtjb25zdCBsPVtdO3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElxLGwubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2soKXt2YXIgYSxkO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bGV0IGg9''@;'; put 'put ''bFswXSxmPWxbbC5sZW5ndGgtMV07aD1udWxsIT09KGE9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaC0xLC0xKSkmJnZvaWQgMCE9PWE/YTowLGY9bnVsbCE9PShkPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KGYrMSwxKSkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmNvdW50Q29scygpLTEsYy5zaG93Q29sdW1ucyhsKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLWgrMT09PXRoaXMuY291bnRDb2xzKCl8fHRoaXMuc2VsZWN0Q29sdW1ucyhoLGYpfSxkaXNhYmxlZDoh''@;'; put 'put ''MSxoaWRkZW4oKXtjb25zdCBhPXlzKGMuZ2V0SGlkZGVuQ29sdW1ucygpLGNlPT50aGlzLnRvUGh5c2ljYWxDb2x1bW4oY2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5n''@;'; put 'put ''dGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHY9dGhpcy5jb2x1bW5JbmRleE1hcHBlcixNPXYuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChoKSxEPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKSxaPXYuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKSxyZT1bXTtpZihoIT09Zil7aWYoZi1oKzE+RC1NKzEpe2NvbnN0IEVlPVouc2xpY2UoaCxmKzEpO3JlLnB1c2goLi4uRWUuZmlsdGVyKEJlPT5hLmluY2x1''@;'; put 'put ''ZGVzKEJlKSkpfX1lbHNlIGlmKDA9PT1NJiZNPGgpcmUucHVzaCguLi5aLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PU0pcmUucHVzaCguLi5aLnNsaWNlKDAsdGhpcy5jb3VudENvbHMoKSkpO2Vsc2V7Y29uc3QgY2U9dGhpcy5jb3VudENvbHMoKS0xO0Q9PT12LmdldFJlbmRlcmFibGVG''@;'; put 'put ''cm9tVmlzdWFsSW5kZXgodi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsLTEpKSYmY2U+ZiYmcmUucHVzaCguLi5aLnNsaWNlKGYrMSkpfXJldHVybiBZbihyZSxjZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKGNlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfWZ1bmN0aW9u''@;'; put 'put ''IGsydCgpe2NvbnN0IGM9dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zIik7QXJyYXkuaXNBcnJheShjKSYmdGhpcy5oaWRlQ29sdW1ucyhjKX1mdW5jdGlvbiBxZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRl''@;'; put 'put ''IGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEk5KGMsbCl7cmV0dXJuIGMuZ2V0KGg2KGMsbCkpfWZ1bmN0aW9uIFhnZShjLGwsYSl7cmV0dXJuIGMuc2V0KGg2KGMsbCksYSksYX1mdW5jdGlvbiBoNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6''@;'; put 'put ''Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVSb3dzIiksU2EuZ2V0U2luZ2xl''@;'; put 'put ''dG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZVJvd3MiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlUm93cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZVJvd3MiKTtjb25zdCBKZ2U9ImhpZGRlblJvd3MiO3ZhciBXcD1uZXcgV2Vha01h''@;'; put 'put ''cCxSOT1uZXcgV2Vha1NldDtjbGFzcyBQMnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUjJ0KGMsbCl7cWdlKGMsbCksbC5hZGQoYyl9KHRoaXMsUjkpLGZ1bmN0aW9uIEwydChjLGwsYSl7cWdlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxX''@;'; put 'put ''cCxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSmdlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMyMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57Y29weVBhc3RlRW5hYmxlZDohMCxpbmRpY2F0b3JzOiExLHJvd3M6W119fWlz''@;'; put 'put ''RW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKZ2VdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoWGdlKFdwLHRoaXMsbmV3IGZQKSxJOShXcCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5oNihSOSx0aGlzLGoydCkuY2FsbCh0''@;'; put 'put ''aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLEk5KFdwLHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJh''@;'; put 'put ''eShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaDYoUjksbCxCMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGEsZCxoKT0+aDYoUjksdGhpcyxIMnQpLmNhbGwodGhpcyxhLGQsaCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5''@;'; put 'put ''Um93SGVpZ2h0IiwoYSxkKT0+aDYoUjksdGhpcyxGMnQpLmNhbGwodGhpcyxhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hd''@;'; put 'put ''O3JldHVybiBoNihSOSxsLFYydCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5oNihSOSx0aGlzLE4ydCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhp''@;'; put 'put ''cy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd1Jvd3MobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9STkoV3AsdGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwubWFwKFo9PnRoaXMuaG90LnRvUGh5c2ljYWxSb3coWikpLFo9Pntm''@;'; put 'put ''W1pdPSExfSksaD1xdShmLChaLHJlLGNlKT0+KHJlJiZaLnB1c2godGhpcy5ob3QudG9WaXN1YWxSb3coY2UpKSxaKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZVJvd3MiLGEsaCxkJiZ2KSYmKGQmJnYmJkk5KFdwLHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYWZ0ZXJVbmhpZGVSb3dzIixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXNob3dSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dSb3dzKGEpfWhpZGVS''@;'; put 'put ''b3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Sb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZVJvd3MiLGEsaCxkKSYmKGQmJnRoaXMu''@;'; put 'put ''aG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCx2PT57STkoV3AsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlUm93cyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX1oaWRl''@;'; put 'put ''Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlUm93cyhhKX1nZXRIaWRkZW5Sb3dzKCl7cmV0dXJuIHlzKEk5KFdwLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50''@;'; put 'put ''b1Zpc3VhbFJvdyhsKSl9aXNIaWRkZW4obCl7cmV0dXJuIEk5KFdwLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Um93cygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkm''@;'; put 'put ''JmwubGVuZ3RoPjApJiZsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtZbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bC5za2lwUm93T25QYXN0ZT0hMX0pfWRlc3Ryb3koKXtYZ2UoV3AsdGhpcyxudWxsKSxzdXBlci5kZXN0''@;'; put 'put ''cm95KCl9fWZ1bmN0aW9uIEYydChjLGwpe3JldHVybiB0aGlzLmlzSGlkZGVuKGwpPzA6Y31mdW5jdGlvbiBIMnQoYyxsLGEpe2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4oYykmJihhLnNraXBSb3dPblBhc3RlPSEwKSx0aGlzLmlz''@;'; put 'put ''SGlkZGVuKGMtMSkpYS5jbGFzc05hbWU9YS5jbGFzc05hbWV8fCIiLC0xPT09YS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuUm93Iik7ZWxzZSBpZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgi''@;'; put 'put ''ICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0IGg9ZC5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpO2g+LTEmJmQuc3BsaWNlKGgsMSksYS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiBOMnQoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7''@;'; put 'put ''Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+e2wucHVzaCh7c3RhcnRSb3c6ZCxlbmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2fSl9O3JldHVybiBZbihjLGQ9PntsZXQgaD0hMCxmPTA7R2EoZC5zdGFydFJvdyxkLmVuZFJvdyx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShmLHYtMSxkLnN0''@;'; put 'put ''YXJ0Q29sLGQuZW5kQ29sKSxoPSEwKTooaCYmKGY9diksdj09PWQuZW5kUm93JiZhKGYsdixkLnN0YXJ0Q29sLGQuZW5kQ29sKSxoPSExKX0pfSksbH1mdW5jdGlvbiBWMnQoYyxsKXtpZighdGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0x''@;'; put 'put ''JiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEucHVzaCgiYWZ0ZXJIaWRkZW5Sb3ciKSxjPHRoaXMuaG90LmNvdW50Um93cygpLTEmJnRoaXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Sb3ciKSxUaShsLGEpfWZ1bmN0aW9uIEIydChjKXtjLml0ZW1zLnB1c2goe25hbWU6c3N9''@;'; put 'put ''LGZ1bmN0aW9uIEQydChjKXtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UoUnEsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwucm93LGEucm93KSwwKSxoPU1hdGgubWF4KGwucm93LGEucm93KSxmPVtdO2ZvcihsZXQgRD1kO0Q8PWg7RCs9MSlmLnB1''@;'; put 'put ''c2goRCk7Yy5oaWRlUm93cyhmKTtjb25zdCBNPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihNKSYmTT49MD90aGlzLnNlbGVjdFJvd3MoTSk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJl''@;'; put 'put ''bmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7cmV0dXJuISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfX19KHRoaXMpLGZ1bmN0aW9uIEky''@;'; put 'put ''dChjKXtjb25zdCBsPVtdO3JldHVybntrZXk6ImhpZGRlbl9yb3dzX3Nob3ciLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExxLGwubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2soKXt2YXIgYSxkO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bGV0IGg9bFswXSxmPWxbbC5s''@;'; put 'put ''ZW5ndGgtMV07aD1udWxsIT09KGE9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaC0xLC0xKSkmJnZvaWQgMCE9PWE/YTowLGY9bnVsbCE9PShkPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYrMSwxKSkmJnZvaWQgMCE9''@;'; put 'put ''PWQ/ZDp0aGlzLmNvdW50Um93cygpLTEsYy5zaG93Um93cyhsKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLWgrMT09PXRoaXMuY291bnRSb3dzKCl8fHRoaXMuc2VsZWN0Um93cyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPXlzKGMu''@;'; put 'put ''Z2V0SGlkZGVuUm93cygpLGNlPT50aGlzLnRvUGh5c2ljYWxSb3coY2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGg9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxmPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LHY9dGhpcy5yb3dJbmRleE1hcHBlcixNPXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxEPXYuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChmKSxaPXYuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKSxyZT1bXTtpZihoIT09Zil7aWYoZi1oKzE+RC1NKzEpe2NvbnN0IEVlPVouc2xpY2UoaCxmKzEpO3JlLnB1c2goLi4uRWUuZmlsdGVyKEJlPT5hLmluY2x1ZGVzKEJlKSkpfX1lbHNlIGlmKDA9PT1NJiZNPGgpcmUucHVz''@;'; put 'put ''aCguLi5aLnNsaWNlKDAsaCkpO2Vsc2UgaWYobnVsbD09PU0pcmUucHVzaCguLi5aLnNsaWNlKDAsdGhpcy5jb3VudFJvd3MoKSkpO2Vsc2V7Y29uc3QgY2U9dGhpcy5jb3VudFJvd3MoKS0xO0Q9PT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodi5nZXROZWFyZXN0Tm90SGlkZGVu''@;'; put 'put ''SW5kZXgoY2UsLTEpKSYmY2U+ZiYmcmUucHVzaCguLi5aLnNsaWNlKGYrMSkpfXJldHVybiBZbihyZSxjZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsUm93KGNlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfWZ1bmN0aW9uIGoydCgpe2NvbnN0IGM9dGhpcy5nZXRTZXR0aW5nKCJyb3dzIik7''@;'; put 'put ''QXJyYXkuaXNBcnJheShjKSYmdGhpcy5oaWRlUm93cyhjKX1mdW5jdGlvbiBRZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIExRKGMs''@;'; put 'put ''bCl7cmV0dXJuIGMuZ2V0KGlIKGMsbCkpfWZ1bmN0aW9uIE9RKGMsbCxhKXtyZXR1cm4gYy5zZXQoaUgoYyxsKSxhKSxhfWZ1bmN0aW9uIGlIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uRnJlZXplIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uRnJlZXplIiksU2EuZ2V0''@;'; put 'put ''U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblVuZnJlZXplIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uVW5mcmVlemUiKTtjb25zdCBlbWU9Im1hbnVhbENvbHVtbkZyZWV6ZSI7dmFyIEw5PW5ldyBXZWFrTWFwLFBRPW5ldyBXZWFrU2V0O2NsYXNz''@;'; put 'put ''IEcydCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBaMnQoYyxsKXtRZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxQUSksZnVuY3Rpb24gVzJ0KGMsbCxhKXtRZ2UoYyxsKSxsLnNldChjLGEpfSh0aGlzLEw5LCExKX1zdGF0aWMgZ2V0IFBMVUdJ''@;'; put 'put ''Tl9LRVkoKXtyZXR1cm4gZW1lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDExMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZW1lXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1l''@;'; put 'put ''bnVEZWZhdWx0T3B0aW9ucyIsbD0+aUgoUFEsdGhpcywkMnQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwobCxhKT0+aUgoUFEsdGhpcyxLMnQpLmNhbGwodGhpcyxsLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe09RKEw5''@;'; put 'put ''LHRoaXMsITEpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0PHRoaXMuaG90LmNvdW50Q29scygpJiZsPmEuZml4ZWRDb2x1bW5zU3RhcnQtMTtMUShMOSx0aGlzKXx8T1EoTDksdGhpcywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJlZXplIixsLGQpJiYoZCYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLm1vdmVJbmRleGVzKGwsYS5maXhlZENvbHVtbnNTdGFydCksYS5fZml4ZWRDb2x1bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsbCxkKSl9dW5mcmVlemVDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGQ9YS5maXhl''@;'; put 'put ''ZENvbHVtbnNTdGFydD4wJiZsPD1hLmZpeGVkQ29sdW1uc1N0YXJ0LTE7TFEoTDksdGhpcyl8fE9RKEw5LHRoaXMsITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblVuZnJlZXplIixsLGQpJiYoZCYmKGEuX2ZpeGVkQ29sdW1uc1N0YXJ0LT0xLHRoaXMuaG90LmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYS5maXhlZENvbHVtbnNTdGFydCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblVuZnJlZXplIixsLGQpKX19ZnVuY3Rpb24gJDJ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gejJ0KGMpe3JldHVy''@;'; put 'put ''bntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9xKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl''@;'; put 'put ''KCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbDw9dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0''@;'; put 'put ''LTEpJiYoYT0hMCksYX19fSh0aGlzKSxmdW5jdGlvbiBVMnQoYyl7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzcSl9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MudW5mcmVlemVDb2x1''@;'; put 'put ''bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFsw''@;'; put 'put ''XS5mcm9tLmNvbD49dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KSYmKGE9ITApLGF9fX0odGhpcykpfWZ1bmN0aW9uIEsydChjLGwpe2lmKExRKEw5LHRoaXMpKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ7aWYobDxhfHxjLnNv''@;'; put 'put ''bWUoZD0+ZDxhKSlyZXR1cm4hMX19ZnVuY3Rpb24gYUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHEydChjKXt2YXIgbD1mdW5jdGlvbiBYMnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGN3PSJweCIscm1lPWNs''@;'; put 'put ''YXNzIEoydHtjb25zdHJ1Y3RvcihsKXthSCh0aGlzLCJob3QiLHZvaWQgMCksYUgodGhpcywiX2VsZW1lbnQiLG51bGwpLGFIKHRoaXMsInN0YXRlIiwwKSxhSCh0aGlzLCJpbmxpbmVQcm9wZXJ0eSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuaW5saW5lUHJvcGVydHk9bC5pc1J0bCgpPyJy''@;'; put 'put ''aWdodCI6ImxlZnQifWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPWwrY3cpLG0xKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVt0aGlzLmlubGluZVByb3BlcnR5XT1hK2N3KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHls''@;'; put 'put ''ZTtyZXR1cm57dG9wOmwudG9wP3BhcnNlSW50KGwudG9wLDEwKTowLHN0YXJ0OmxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0/cGFyc2VJbnQobFt0aGlzLmlubGluZVByb3BlcnR5XSwxMCk6MH19c2V0U2l6ZShsLGEpe20xKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK2N3KSxtMShh''@;'; put 'put ''KSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErY3cpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJz''@;'; put 'put ''ZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0KGwsYSl7bTEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK2N3KSxtMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbYG1hcmdpbiR7cDEodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YF09YStj''@;'; put 'put ''dyl9Z2V0T2Zmc2V0KCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlLGE9YG1hcmdpbiR7cDEodGhpcy5pbmxpbmVQcm9wZXJ0eSl9YDtyZXR1cm57dG9wOmwubWFyZ2luVG9wP3BhcnNlSW50KGwubWFyZ2luVG9wLDEwKTowLHN0YXJ0OmxbYV0/cGFyc2VJbnQobFthXSwxMCk6MH19fSx0''@;'; put 'put ''ZnQ9Y2xhc3MgZWZ0IGV4dGVuZHMgcm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0Iil9fSxpZnQ9Y2xhc3MgcmZ0IGV4dGVuZHMgcm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50''@;'; put 'put ''LCJodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBiMyhjLGwsYSl7aW1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBpbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVs''@;'; put 'put ''ZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtkKGMsbCxhKXtyZXR1cm4gYy5zZXQoZjYoYyxsKSxhKSxhfWZ1bmN0aW9uIHphKGMsbCl7cmV0dXJuIGMuZ2V0KGY2KGMsbCkpfWZ1bmN0aW9uIGY2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhh''@;'; put 'put ''cyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uTW92ZSIpLFNhLmdldFNpbmdsZXRv''@;'; put 'put ''bigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbk1vdmUiKTtjb25zdCBIUT0ibWFudWFsQ29sdW1uTW92ZSIsYW1lPSJodF9fbWFudWFsQ29sdW1uTW92ZSIsb0g9InNob3ctdWkiLE5RPSJvbi1tb3ZpbmctLWNvbHVtbnMiLFZRPSJhZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMiO3ZhciBRMT1uZXcg''@;'; put 'put ''V2Vha01hcCxwNj1uZXcgV2Vha01hcCxqNT1uZXcgV2Vha01hcCxzSD1uZXcgV2Vha01hcCxnNj1uZXcgV2Vha01hcCxlZD1uZXcgV2Vha01hcCxsSD1uZXcgV2Vha01hcCxKMj1uZXcgV2Vha01hcCx1dz1uZXcgV2Vha01hcCxjSD1uZXcgV2Vha01hcCxpQT1uZXcgV2Vha01hcCxPOT1uZXcg''@;'; put 'put ''V2Vha1NldDtjbGFzcyBzZnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWZ0KGMsbCl7aW1lKGMsbCksbC5hZGQoYyl9KHRoaXMsTzkpLGIzKHRoaXMsUTEsbmV3IHRmdCh0aGlzLmhvdCkpLGIzKHRoaXMscDYsbmV3IGlmdCh0aGlzLmhv''@;'; put 'put ''dCkpLGIzKHRoaXMsajUsW10pLGIzKHRoaXMsc0gsMCksYjModGhpcyxnNiwhMSksYjModGhpcyxlZCx7fSksYjModGhpcyxsSCx2b2lkIDApLGIzKHRoaXMsSjIsdm9pZCAwKSxiMyh0aGlzLHV3LHZvaWQgMCksYjModGhpcyxjSCx2b2lkIDApLGIzKHRoaXMsaUEsdm9pZCAwKX1zdGF0aWMg''@;'; put 'put ''Z2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSFF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtIUV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZjYoTzksbCxsZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3Jl''@;'; put 'put ''T25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmNihPOSxsLHVmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRp''@;'; put 'put ''Y2FsbHkiLCgpPT5mNihPOSx0aGlzLGhmdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBmNihPOSxs''@;'; put 'put ''LGZmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGFtZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1''@;'; put 'put ''Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtsbyh0aGlzLmhvdC5yb290RWxlbWVudCxhbWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLHphKFExLHRoaXMpLmRlc3Ryb3koKSx6YShwNix0aGlzKS5kZXN0cm95''@;'; put 'put ''KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbbF0sYSl9bW92ZUNvbHVtbnMobCxhKXtjb25zdCBkPXphKGxILHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNv''@;'; put 'put ''bHVtbk1vdmUiLGwsYSxkLGgpO2lmKEtkKGxILHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qgdj1oJiZ0aGlzLmlzQ29sdW1uT3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlckNvbHVtbk1vdmUiLGwsYSxkLGgsdiksdn1kcmFnQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMoW2xdLGEpfWRyYWdDb2x1bW5zKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBLZChsSCx0aGlzLGEpLHRoaXMubW92ZUNv''@;'; put 'put ''bHVtbnMobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShEPT5EPDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8''@;'; put 'put ''dnx8TSl9aXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPXF1KGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldENvbHVtbnNXaWR0aChsLGEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrPTEpe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2Y8MD9oKz10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl8fDA6bnVsbCE9PXYm''@;'; put 'put ''JihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldENvbHVtbldpZHRoKHYpfHwwKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtIUV07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVDb2x1bW5zKGwsMCk7ZWxz''@;'; put 'put ''ZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVDb2x1bW5zKGEsMCl9fWlzRml4ZWRDb2x1bW5zU3RhcnQobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydH1wZXJzaXN0''@;'; put 'put ''ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxDb2x1bW5Nb3ZlIix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsQ29sdW1uTW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcobCxhKXtjb25zdCBkPVtdO3JldHVybiBHYShsLGEsaD0+e2QucHVzaChoKX0pLGR9cmVmcmVzaFBvc2l0aW9u''@;'; put 'put ''cygpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpO3RoaXMuaXNGaXhlZENvbHVtbnNTdGFydCh6YShKMix0aGlzKSkmJmw+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7Y29sOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChsLTEsLTEpfSk7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudCxoPSJudW1iZXIiPT10eXBlb2YgZC5zY3JvbGxYP2Quc2Nyb2xsWDpkLnNjcm9sbExlZnQ7bGV0''@;'; put 'put ''IGY9dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRMZWZ0K3RoaXMuZ2V0Q29sdW1uc1dpZHRoKDAsemEoSjIsdGhpcyktMSk7Y29uc3Qgdj1hLmhpZGVyLm9mZnNldFdpZHRoLE09YS5UQk9EWS5vZmZzZXRMZWZ0LEQ9emEoUTEsdGhpcykuZ2V0T2Zmc2V0KCkuc3RhcnQsWj16YShRMSx0aGlz''@;'; put 'put ''KS5nZXRTaXplKCkud2lkdGg7bGV0IHJlPTAsY2U9MDtpZih0aGlzLmhvdC5pc1J0bCgpKXtjb25zdCBCZT10aGlzLmhvdC5yb290V2luZG93LHFlPXN1KHRoaXMuaG90LnJvb3RFbGVtZW50KSxydD1CZS5pbm5lcldpZHRoLXphKHV3LHRoaXMpLXFlO2NlPUJlLmlubmVyV2lkdGgtemEoZWQs''@;'; put 'put ''dGhpcykuZXZlbnRQYWdlWC1ydC0odm9pZCAwPT09ZC5zY3JvbGxYP2g6MCl9ZWxzZSBjZT16YShlZCx0aGlzKS5ldmVudFBhZ2VYLSh6YSh1dyx0aGlzKS0odm9pZCAwPT09ZC5zY3JvbGxYP2g6MCkpO2lmKHphKGNILHRoaXMpJiYocmU9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5p''@;'; put 'put ''bmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDb2x1bW5IZWFkZXIoLTEpLm9mZnNldFdpZHRoKSx0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQoemEoSjIsdGhpcykpJiYoZis9aCksZis9cmUsemEoSjIsdGhpcyk8MCl6YShpQSx0aGlzKT4wP3phKGVkLHRoaXMpLmNvbD0wOnph''@;'; put 'put ''KGVkLHRoaXMpLmNvbD1sPjA/bC0xOmw7ZWxzZSBpZih6YShlZCx0aGlzKS5URC5vZmZzZXRXaWR0aC8yK2Y8PWNlKXtjb25zdCBCZT16YShKMix0aGlzKT49emEoc0gsdGhpcyk/emEoc0gsdGhpcyktMTp6YShKMix0aGlzKTt6YShlZCx0aGlzKS5jb2w9QmUrMSxmKz16YShlZCx0aGlzKS5U''@;'; put 'put ''RC5vZmZzZXRXaWR0aH1lbHNlIHphKGVkLHRoaXMpLmNvbD16YShKMix0aGlzKTtsZXQgYmU9Y2UsRWU9ZjtjZStaK0Q+PXY/YmU9di1aLUQ6Y2UrRDxNK3JlJiYoYmU9TStyZStNYXRoLmFicyhEKSksZj49di0xP0VlPXYtMTowPT09RWU/RWU9MTp2b2lkIDAhPT1kLnNjcm9sbFgmJnphKEoy''@;'; put 'put ''LHRoaXMpPHphKGlBLHRoaXMpJiYoRWUtPXphKHV3LHRoaXMpPD1kLnNjcm9sbFg/emEodXcsdGhpcyk6MCksemEoUTEsdGhpcykuc2V0UG9zaXRpb24obnVsbCxiZSksemEocDYsdGhpcykuc2V0UG9zaXRpb24obnVsbCxFZSl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1l''@;'; put 'put ''bnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5mNihPOSx0aGlzLGNmdCkuY2FsbCh0aGlzLGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5mNihP''@;'; put 'put ''OSx0aGlzLGRmdCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQbHVnaW5VSSgpe3phKFExLHRoaXMpLmJ1aWxkKCksemEocDYsdGhpcykuYnVpbGQoKX1kZXN0cm95KCl7emEoUTEsdGhpcykuZGVzdHJveSgpLHphKHA2LHRo''@;'; put 'put ''aXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGxmdChjLGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksdj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpLE09cG8oYy50YXJnZXQsInNvcnRBY3Rpb24iKTtpZighdnx8IWZ8fHphKGc2LHRoaXMpfHwwIT09Yy5idXR0b258fE0pcmV0dXJuIEtkKGc2LHRoaXMsITEpLHphKGo1LHRoaXMpLmxlbmd0aD0wLHZvaWQgbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW05RLG9IXSk7Y29uc3QgRD16YShw''@;'; put 'put ''Nix0aGlzKS5pc0J1aWx0KCkmJiF6YShwNix0aGlzKS5pc0FwcGVuZGVkKCksWj16YShRMSx0aGlzKS5pc0J1aWx0KCkmJiF6YShRMSx0aGlzKS5pc0FwcGVuZGVkKCk7RCYmWiYmKHphKHA2LHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpLHphKFExLHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpKTtj''@;'; put 'put ''b25zdHtmcm9tOnJlLHRvOmNlfT12LGJlPU1hdGgubWluKHJlLmNvbCxjZS5jb2wpLEVlPU1hdGgubWF4KHJlLmNvbCxjZS5jb2wpO2lmKGwucm93PDAmJmwuY29sPj1iZSYmbC5jb2w8PUVlKXtkLmNvbHVtbj0hMCxLZChnNix0aGlzLCEwKTtjb25zdCBCZT1hLmZpcnN0Q2hpbGQ/bmZlKGMs''@;'; put 'put ''YS5maXJzdENoaWxkKS54OmMub2Zmc2V0WDt6YShlZCx0aGlzKS5ldmVudFBhZ2VYPWMucGFnZVgsS2QoSjIsdGhpcyxsLmNvbCksemEoZWQsdGhpcykuVEQ9YSx6YShlZCx0aGlzKS5jb2w9bC5jb2wsS2QoajUsdGhpcyx0aGlzLnByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcoYmUsRWUpKSxLZChj''@;'; put 'put ''SCx0aGlzLCEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKSxLZChzSCx0aGlzLHRoaXMuaG90LmNvdW50Q29scygpKSxLZChpQSx0aGlzLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpLEtkKHV3LHRoaXMsVTAodGhpcy5ob3Qucm9vdEVsZW1lbnQp''@;'; put 'put ''LmxlZnQpO2NvbnN0IHFlPXphKGNILHRoaXMpPy0xOjAscnQ9aC5ob2xkZXIuc2Nyb2xsVG9wK2guZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KDApKzEscHQ9bC5jb2w8emEoaUEsdGhpcyksZHQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3Zlcmxh''@;'; put 'put ''eU9mZnNldCgpLEp0PU1hdGguYWJzKEJlLSh0aGlzLmhvdC5pc1J0bCgpP2Eub2Zmc2V0V2lkdGg6MCkpLHZuPXRoaXMuZ2V0Q29sdW1uc1dpZHRoKGJlLGwuY29sLTEpK0p0LENuPXRoaXMuZ2V0Q29sdW1uc1dpZHRoKHFlLGJlLTEpKyhwdD9kdDowKSt2bjt6YShRMSx0aGlzKS5zZXRQb3Np''@;'; put 'put ''dGlvbihydCxDbiksemEoUTEsdGhpcykuc2V0U2l6ZSh0aGlzLmdldENvbHVtbnNXaWR0aChiZSxFZSksaC5oaWRlci5vZmZzZXRIZWlnaHQtcnQpLHphKFExLHRoaXMpLnNldE9mZnNldChudWxsLC12biksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsTlEpfWVsc2UgbG8odGhpcy5ob3Qucm9v''@;'; put 'put ''dEVsZW1lbnQsVlEpLEtkKGc2LHRoaXMsITEpLHphKGo1LHRoaXMpLmxlbmd0aD0wfWZ1bmN0aW9uIGNmdChjKXt6YShnNix0aGlzKSYmKHphKGVkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdlWCx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSl9ZnVuY3Rpb24gdWZ0KGMsbCxhLGQpeyF0aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpfHwhemEoZzYsdGhpcyl8fCh6YShqNSx0aGlzKS5pbmRleE9mKGwuY29sKT4tMT9sbyh0aGlzLmhvdC5yb290RWxlbWVudCxvSCk6VGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsb0gpLGQucm93PSEwLGQuY29sdW1uPSEwLGQuY2VsbD0hMCxLZChKMix0''@;'; put 'put ''aGlzLGwuY29sKSx6YShlZCx0aGlzKS5URD1hKX1mdW5jdGlvbiBkZnQoKXtjb25zdCBjPXphKGVkLHRoaXMpLmNvbCxsPXphKGo1LHRoaXMpLmxlbmd0aDtpZihLZChKMix0aGlzLHZvaWQgMCksS2QoZzYsdGhpcywhMSksbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW05RLG9ILFZRXSksdGhp''@;'; put 'put ''cy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiZUaSh0aGlzLmhvdC5yb290RWxlbWVudCxWUSksbDwxfHx2b2lkIDA9PT1jKXJldHVybjtjb25zdCBhPXphKGo1LHRoaXMpWzBdLGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSxoPXRoaXMuZHJhZ0NvbHVt''@;'; put 'put ''bnMoemEoajUsdGhpcyksYyk7aWYoemEoajUsdGhpcykubGVuZ3RoPTAsITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZCk7''@;'; put 'put ''dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhmLGYrbC0xKX19ZnVuY3Rpb24gaGZ0KCl7Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9Yy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMStjLmhvbGRlci5zY3JvbGxUb3A7emEoUTEsdGhpcykuc2V0UG9zaXRpb24oZCksemEoUTEs''@;'; put 'put ''dGhpcykuc2V0U2l6ZShudWxsLGMuaGlkZXIub2Zmc2V0SGVpZ2h0LWQpfWZ1bmN0aW9uIGZmdCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBDMShjLGwsYSl7b21lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBvbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGR1KGMsbCxhKXtyZXR1cm4gYy5zZXQoeTMoYyxsKSxhKSxhfWZ1bmN0aW9uIEVhKGMsbCl7cmV0dXJuIGMuZ2V0KHkzKGMsbCkpfWZ1bmN0''@;'; put 'put ''aW9uIHkzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB1SD0ibWFu''@;'; put 'put ''dWFsQ29sdW1uUmVzaXplIixzbWU9Im1hbnVhbENvbHVtbldpZHRocyI7dmFyIHo1PW5ldyBXZWFrTWFwLGRIPW5ldyBXZWFrTWFwLFZoPW5ldyBXZWFrTWFwLGhIPW5ldyBXZWFrTWFwLFlwPW5ldyBXZWFrTWFwLG1mdD1uZXcgV2Vha01hcCxkdz1uZXcgV2Vha01hcCxmSD1uZXcgV2Vha01h''@;'; put 'put ''cCxxZD1uZXcgV2Vha01hcCxVNT1uZXcgV2Vha01hcCxQOT1uZXcgV2Vha01hcCxwSD1uZXcgV2Vha01hcCxhQT1uZXcgV2Vha01hcCxvQT1uZXcgV2Vha01hcCxCaD1uZXcgV2Vha01hcCxzQT1uZXcgV2Vha01hcCxHcD1uZXcgV2Vha1NldDtjbGFzcyB2ZnQgZXh0ZW5kcyBGc3tzdGF0aWMg''@;'; put 'put ''Z2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdUh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHBmdChjLGwpe29tZShjLGwpLGwuYWRkKGMpfSh0aGlzLEdwKSxDMSh0aGlzLHo1LG51bGwpLEMxKHRoaXMsZEgs''@;'; put 'put ''bnVsbCksQzEodGhpcyxWaCxbXSksQzEodGhpcyxoSCxudWxsKSxDMSh0aGlzLFlwLG51bGwpLEMxKHRoaXMsbWZ0LG51bGwpLEMxKHRoaXMsZHcsbnVsbCksQzEodGhpcyxmSCxudWxsKSxDMSh0aGlzLHFkLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksQzEo''@;'; put 'put ''dGhpcyxVNSx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLEMxKHRoaXMsUDksbnVsbCksQzEodGhpcyxwSCwhMSksQzEodGhpcyxhQSwwKSxDMSh0aGlzLG9BLG51bGwpLEMxKHRoaXMsQmgsdm9pZCAwKSxDMSh0aGlzLHNBLHZvaWQgMCksVGkoRWEocWQsdGhp''@;'; put 'put ''cyksIm1hbnVhbENvbHVtblJlc2l6ZXIiKSxUaShFYShVNSx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''W3VIXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KGR1KEJoLHRoaXMsbmV3IFptKSxFYShCaCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT55MyhHcCx0aGlzLGJmdCkuY2FsbCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJN''@;'; put 'put ''YXAodGhpcy5wbHVnaW5OYW1lLEVhKEJoLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB5MyhHcCxsLE1mdCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4geTMoR3AsbCx4ZnQpLmNh''@;'; put 'put ''bGwobCwuLi5kKX0sMSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHkzKEdwLGwsRWZ0KS5jYWxsKGwsLi4uZCl9''@;'; put 'put ''KSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7ZHUoc0EsdGhpcyxFYShCaCx0aGlzKS5nZXRWYWx1''@;'; put 'put ''ZXMoKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHNtZSxFYShCaCx0aGlz''@;'; put 'put ''KS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbENvbHVtbldpZHRocygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIixzbWUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD1NYXRoLm1heChhLDIwKSxoPXRoaXMuaG90''@;'; put 'put ''LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIEVhKEJoLHRoaXMpLnNldFZhbHVlQXRJbmRleChoLGQpLGR9Y2xlYXJNYW51YWxTaXplKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtFYShCaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX1zZXR1cEhhbmRs''@;'; put 'put ''ZVBvc2l0aW9uKGwpe2lmKCFsLnBhcmVudE5vZGUpcmV0dXJuO2R1KHo1LHRoaXMsbCk7Y29uc3R7X3d0OmF9PXRoaXMuaG90LnZpZXcsZD1hLnd0VGFibGUuZ2V0Q29vcmRzKEVhKHo1LHRoaXMpKSxoPWQuY29sO2lmKGg8MClyZXR1cm47Y29uc3QgZj1NdShFYSh6NSx0aGlzKSksdj1FYSh6''@;'; put 'put ''NSx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgRDtoPGEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSYmKEQ9YS53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihFYSh6NSx0aGlzKSxkLnJvdyxkLmNv''@;'; put 'put ''bCkpLER8fChEPWEud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKEVhKHo1LHRoaXMpLGQucm93LGQuY29sKSksZHUoZEgsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpKSxkdShWaCx0aGlz''@;'; put 'put ''LFtdKTtjb25zdCBaPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJlomJlluKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2Uo''@;'; put 'put ''KSxjZT0+e0dhKGNlLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGNlLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxCZT0+e0VhKFZoLHRoaXMpLmluY2x1ZGVzKEJlKXx8RWEoVmgsdGhpcykucHVzaChCZSl9KX0pLEVhKFZoLHRoaXMpLmluY2x1ZGVzKEVhKGRILHRoaXMpKXx8ZHUoVmgsdGhp''@;'; put 'put ''cyxbRWEoZEgsdGhpcyldKSxkdShmSCx0aGlzLEQuc3RhcnQtNiksZHUoZHcsdGhpcyxwYXJzZUludCh2LndpZHRoLDEwKSksRWEocWQsdGhpcykuc3R5bGUudG9wPWAke0QudG9wfXB4YCxFYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7RWEoZkgsdGhpcykrRWEoZHcsdGhp''@;'; put 'put ''cyl9cHhgLEVhKHFkLHRoaXMpLnN0eWxlLmhlaWdodD1gJHtmfXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChFYShxZCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7RWEocWQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke0VhKGZILHRoaXMpK0VhKGhI''@;'; put 'put ''LHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KE11KEVhKHFkLHRoaXMpKSwxMCksYT1wYXJzZUludChFYShxZCx0aGlzKS5zdHlsZS50b3AsMTApK2wsZD10aGlzLmhvdC52aWV3LmdldFRhYmxlSGVpZ2h0KCk7VGkoRWEocWQsdGhpcyksImFjdGl2ZSIp''@;'; put 'put ''LFRpKEVhKFU1LHRoaXMpLCJhY3RpdmUiKSxFYShVNSx0aGlzKS5zdHlsZS50b3A9YCR7YX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLEVhKFU1LHRoaXMpLnN0eWxlLmhlaWdodD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChFYShVNSx0aGlzKSl9''@;'; put 'put ''cmVmcmVzaEd1aWRlUG9zaXRpb24oKXtFYShVNSx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09RWEocWQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe2xvKEVhKHFkLHRoaXMpLCJhY3RpdmUiKSxsbyhFYShVNSx0aGlzKSwiYWN0aXZlIil9Y2hl''@;'; put 'put ''Y2tJZkNvbHVtbkhlYWRlcihsKXtjb25zdCBhPVJtKGwsWyJUSEVBRCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7dG9wT3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpofT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEhF''@;'; put 'put ''QUQsaC5jbG9uZS53dFRhYmxlLlRIRUFEXS5pbmNsdWRlcyhhKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWFmdGVyTW91c2VEb3duVGlt''@;'; put 'put ''ZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxkLCEwKTt2b2lkIDAhPT1mJiZkdShZ''@;'; put 'put ''cCx0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLEVhKFlwLHRoaXMpKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLEVhKFlwLHRoaXMpLGQsITApLGgmJmwoKX07RWEoYUEsdGhpcyk+PTImJihFYShWaCx0aGlz''@;'; put 'put ''KS5sZW5ndGg+MT8oWW4oRWEoVmgsdGhpcyksaD0+e2EoaCl9KSxsKCkpOlluKEVhKFZoLHRoaXMpLGg9PnthKGgsITApfSkpLGR1KGFBLHRoaXMsMCksZHUob0EsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3RFbGVtZW50OmF9PXRoaXMuaG90O3RoaXMu''@;'; put 'put ''ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VvdmVyIixkPT55MyhHcCx0aGlzLHlmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZD0+eTMoR3AsdGhpcyxfZnQpLmNhbGwodGhpcyxkKSksdGhpcy5l''@;'; put 'put ''dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGQ9PnkzKEdwLHRoaXMsd2Z0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnkzKEdwLHRoaXMsQ2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEVhKHFkLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PnkzKEdwLHRoaXMsU2Z0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBiZnQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbdUhdLGw9dGhp''@;'; put 'put ''cy5sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCk7dHlwZW9mIGw8InUiP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKChhLGQpPT57RWEoQmgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApOkFycmF5LmlzQXJyYXkoYyk/KHRoaXMuaG90LmJhdGNoRXhlY3V0''@;'; put 'put ''aW9uKCgpPT57Yy5mb3JFYWNoKChhLGQpPT57RWEoQmgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApLGR1KHNBLHRoaXMsYykpOiEwPT09YyYmQXJyYXkuaXNBcnJheShFYShzQSx0aGlzKSkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RWEoc0EsdGhpcykuZm9yRWFj''@;'; put 'put ''aCgoYSxkKT0+e0VhKEJoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKX1mdW5jdGlvbiB5ZnQoYyl7aWYoIUUkKGMudGFyZ2V0KSYmITAhPT1FYShwSCx0aGlzKSYmdGhpcy5jaGVja0lmQ29sdW1uSGVhZGVyKGMudGFyZ2V0KSl7Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBh''@;'; put 'put ''cmVudChjLnRhcmdldCk7aWYoIWwpcmV0dXJuO2NvbnN0IGE9bC5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKTtsJiYobnVsbD09PWF8fCIxIj09PWEpJiYoRWEoUDksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsKSl9fWZ1bmN0aW9uIF9mdChjKXtjLnRhcmdldC5wYXJlbnROb2Rl''@;'; put 'put ''PT09dGhpcy5ob3Qucm9vdEVsZW1lbnQmJnBvKGMudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oRWEoejUsdGhpcykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksZHUoUDksdGhpcywhMCksbnVsbD09PUVhKG9BLHRoaXMpJiYoZHUo''@;'; put 'put ''b0EsdGhpcyxzZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoRWEob0EsdGhpcykpKSxkdShhQSx0aGlzLEVhKGFBLHRoaXMpKzEpLHRoaXMuc3RhcnRYPWMucGFnZVgsZHUoWXAsdGhpcyxFYShkdyx0aGlz''@;'; put 'put ''KSkpfWZ1bmN0aW9uIHdmdChjKXtpZihFYShQOSx0aGlzKSl7Y29uc3QgbD0oYy5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCk7ZHUoaEgsdGhpcyxFYShkdyx0aGlzKStsKSxZbihFYShWaCx0aGlzKSxhPT57ZHUoWXAsdGhpcyx0aGlzLnNldE1hbnVh''@;'; put 'put ''bFNpemUoYSxFYShoSCx0aGlzKSkpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCl9fWZ1bmN0aW9uIENmdCgpe2NvbnN0IGM9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxs''@;'; put 'put ''PShhLGQpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksYSwhMSksZCYmYygpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsRWEoWXAsdGhpcyksYSwhMSl9O0VhKFA5''@;'; put 'put ''LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxkdShQOSx0aGlzLCExKSxFYShZcCx0aGlzKSE9PUVhKGR3LHRoaXMpJiYoRWEoVmgsdGhpcykubGVuZ3RoPjE/KFluKEVhKFZoLHRoaXMpLGQ9PntsKGQpfSksYygpKTpZbihFYShWaCx0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlz''@;'; put 'put ''LnNldHVwSGFuZGxlUG9zaXRpb24oRWEoejUsdGhpcykpKX1mdW5jdGlvbiBTZnQoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKEVhKHFkLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChFYShVNSx0aGlz''@;'; put 'put ''KSksZHUoUDksdGhpcywhMSksZHUocEgsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57ZHUocEgsdGhpcywhMSl9KX1mdW5jdGlvbiBNZnQoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLGg9''@;'; put 'put ''RWEoQmgsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNldHRpbmdzKClbdUhdJiZoJiYoYT1oKX1yZXR1cm4gYX1mdW5jdGlvbiB4ZnQoYyxsKXtjb25zdCBhPUVhKEJoLHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKTtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpjfWZ1bmN0aW9uIEVmdCgpe3RoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl9ZnVuY3Rpb24gQlEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFRmdChjKXt2YXIgbD1mdW5jdGlv''@;'; put 'put ''biBBZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGh3PSJweCIsdW1lPWNsYXNzIGtmdHtjb25zdHJ1Y3RvcihsKXtCUSh0aGlzLCJob3QiLHZvaWQgMCksQlEodGhpcywiX2VsZW1lbnQiLG51bGwpLEJRKHRoaXMs''@;'; put 'put ''InN0YXRlIiwwKSx0aGlzLmhvdD1sfWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0''@;'; put 'put ''YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXt2b2lkIDAhPT1sJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtodyksdm9pZCAwIT09YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD1hK2h3KX1nZXRQb3NpdGlvbigpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVu''@;'; put 'put ''dC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9''@;'; put 'put ''bCtodyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWEraHcpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdo''@;'; put 'put ''dD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0KGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwraHcpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9YStodyl9Z2V0T2Zmc2V0KCl7cmV0dXJue3RvcDp0''@;'; put 'put ''aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsMTApOjB9fX0sUmZ0PWNs''@;'; put 'put ''YXNzIElmdCBleHRlbmRzIHVtZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodCIpfX0sUGZ0PWNsYXNzIE9mdCBleHRlbmRzIHVtZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21h''@;'; put 'put ''bnVhbFJvd01vdmUtLWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gZncoYyxsLGEpe2RtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBGOShjLGwsYSl7cmV0dXJuIGMuc2V0KG02KGMsbCksYSksYX1mdW5jdGlvbiBGbyhjLGwpe3JldHVybiBjLmdldChtNihjLGwpKX1mdW5jdGlvbiBtNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVJvd01vdmUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3Rlcigi''@;'; put 'put ''YWZ0ZXJSb3dNb3ZlIik7Y29uc3QgelE9Im1hbnVhbFJvd01vdmUiLGhtZT0iaHRfX21hbnVhbFJvd01vdmUiLGdIPSJzaG93LXVpIixVUT0ib24tbW92aW5nLS1yb3dzIixaUT0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIjt2YXIgdGQ9bmV3IFdlYWtNYXAsdjY9bmV3IFdlYWtNYXAsWjU9bmV3''@;'; put 'put ''IFdlYWtNYXAsYjY9bmV3IFdlYWtNYXAsWGQ9bmV3IFdlYWtNYXAsbUg9bmV3IFdlYWtNYXAsSDk9bmV3IFdlYWtTZXQ7Y2xhc3MgTmZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEZmdChjLGwpe2RtZShjLGwpLGwuYWRkKGMpfSh0aGlz''@;'; put 'put ''LEg5KSxmdyh0aGlzLHRkLG5ldyBSZnQodGhpcy5ob3QpKSxmdyh0aGlzLHY2LG5ldyBQZnQodGhpcy5ob3QpKSxmdyh0aGlzLFo1LFtdKSxmdyh0aGlzLGI2LHZvaWQgMCksZncodGhpcyxYZCx7fSksZncodGhpcyxtSCx2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB6''@;'; put 'put ''UX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3du''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtNihIOSxsLFZmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG02KEg5LGwsamZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+bTYoSDksdGhpcyxV''@;'; put 'put ''ZnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTYoSDksbCxaZnQpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxobWUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGlu''@;'; put 'put ''Z3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7bG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsaG1lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxGbyh0ZCx0aGlzKS5kZXN0cm95KCksRm8odjYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4o''@;'; put 'put ''KX1tb3ZlUm93KGwsYSl7cmV0dXJuIHRoaXMubW92ZVJvd3MoW2xdLGEpfW1vdmVSb3dzKGwsYSl7Y29uc3QgZD1GbyhtSCx0aGlzKSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dNb3ZlIixsLGEsZCxoKTtpZihGOShtSCx0aGlzLHZv''@;'; put 'put ''aWQgMCksITE9PT1mKXJldHVybjtoJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IHY9aCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLHYpLHZ9ZHJhZ1Jvdyhs''@;'; put 'put ''LGEpe3JldHVybiB0aGlzLmRyYWdSb3dzKFtsXSxhKX1kcmFnUm93cyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gRjkobUgsdGhpcyxhKSx0aGlzLm1vdmVSb3dzKGwsZCl9aXNNb3ZlUG9zc2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoRD0+RDwwKSxNPWwuc29tZShEPT5EPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fE0pfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9''@;'; put 'put ''Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1xdShsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRSb3dzSGVpZ2h0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7ZisrKXtjb25zdCB2PWQuZ2V0''@;'; put 'put ''UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KHYpfHx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKClbelFdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlUm93cyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhhLDApfX1pc0ZpeGVkUm93VG9wKGwp''@;'; put 'put ''e3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfWlzRml4ZWRSb3dCb3R0b20obCl7cmV0dXJuIGw+dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbX1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50''@;'; put 'put ''U3RhdGVMb2FkIiwibWFudWFsUm93TW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVSb3dzVG9Nb3ZpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1bXTtpZighbClyZXR1cm4gYTtjb25zdHtmcm9tOmQsdG86aH09bDtyZXR1cm4gR2EoTWF0''@;'; put 'put ''aC5taW4oZC5yb3csaC5yb3cpLE1hdGgubWF4KGQucm93LGgucm93KSxNPT57YS5wdXNoKE0pfSksYX1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1GbyhYZCx0aGlzKS5jb29yZHMsYT10aGlzLmhvdC5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLGQ9dGhpcy5ob3QuZ2V0TGFzdEZ1bGx5''@;'; put 'put ''VmlzaWJsZVJvdygpLGg9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5pc0ZpeGVkUm93VG9wKGwucm93KSYmYT4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLTEsLTEpKSx0aGlzLmlzRml4ZWRS''@;'; put 'put ''b3dCb3R0b20obC5yb3cpJiZkPGgmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQrMSwxKSx2b2lkIDAsITApO2NvbnN0IGY9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSx2PUZvKFhkLHRoaXMpLlRE''@;'; put 'put ''LE09dGhpcy5ob3Qucm9vdEVsZW1lbnQsRD1VMChNKSxaPWFfKE0pLHJlPWYuaG9sZGVyLnNjcm9sbFRvcCxiZT1ELnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdyE9PVo/Wi5zY3JvbGxUb3A6MCksRWU9Rm8oWGQsdGhpcykuZXZlbnRQYWdlWS1iZStyZSxCZT1mLmhpZGVyLm9mZnNldEhlaWdo''@;'; put 'put ''dCxxZT1mLlRCT0RZLm9mZnNldFRvcCxydD1Gbyh0ZCx0aGlzKS5nZXRPZmZzZXQoKS50b3AscHQ9Rm8odGQsdGhpcykuZ2V0U2l6ZSgpLmhlaWdodCxkdD12Lm9mZnNldEhlaWdodC8yLEp0PXYub2Zmc2V0SGVpZ2h0O2xldCB2bj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldEhlaWdodCt0''@;'; put 'put ''aGlzLmdldFJvd3NIZWlnaHQoMCxsLnJvdy0xKTtjb25zdCBDbj1FZT49dm4rZHQ7dGhpcy5pc0ZpeGVkUm93VG9wKGwucm93KSYmKHZuKz10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxsLnJvdzwwP0ZvKFhkLHRoaXMpLnJvdz1h''@;'; put 'put ''PjA/YS0xOmE6Q24/KEZvKFhkLHRoaXMpLnJvdz1sLnJvdysxLHZuKz0wPT09bC5yb3c/SnQtMTpKdCk6Rm8oWGQsdGhpcykucm93PWwucm93O2xldCB0bj1FZSxNbj12bjtFZStwdCtydD49QmU/dG49QmUtcHQtcnQ6RWUrcnQ8cWUmJih0bj1xZStNYXRoLmFicyhydCkpLHZuPj1CZS0xJiYo''@;'; put 'put ''TW49QmUtMSksRm8odGQsdGhpcykuc2V0UG9zaXRpb24odG4pLEZvKHY2LHRoaXMpLnNldFBvc2l0aW9uKE1uKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihs''@;'; put 'put ''LCJtb3VzZW1vdmUiLGE9Pm02KEg5LHRoaXMsQmZ0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9Pm02KEg5LHRoaXMsemZ0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xl''@;'; put 'put ''YXIoKX1idWlsZFBsdWdpblVJKCl7Rm8odGQsdGhpcykuYnVpbGQoKSxGbyh2Nix0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXtGbyh0ZCx0aGlzKS5kZXN0cm95KCksRm8odjYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVmZ0KGMsbCxhLGQpe2NvbnN0e3d0VGFi''@;'; put 'put ''bGU6aCx3dFZpZXdwb3J0OmZ9PXRoaXMuaG90LnZpZXcuX3d0LHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLE09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighTXx8IXZ8fEZvKGI2LHRoaXMpfHwwIT09Yy5idXR0b24pcmV0dXJuIEY5KGI2''@;'; put 'put ''LHRoaXMsITEpLEZvKFo1LHRoaXMpLmxlbmd0aD0wLHZvaWQgbG8odGhpcy5ob3Qucm9vdEVsZW1lbnQsW1VRLGdIXSk7Y29uc3QgRD1Gbyh2Nix0aGlzKS5pc0J1aWx0KCkmJiFGbyh2Nix0aGlzKS5pc0FwcGVuZGVkKCksWj1Gbyh0ZCx0aGlzKS5pc0J1aWx0KCkmJiFGbyh0ZCx0aGlzKS5p''@;'; put 'put ''c0FwcGVuZGVkKCk7RCYmWiYmKEZvKHY2LHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpLEZvKHRkLHRoaXMpLmFwcGVuZFRvKGguaGlkZXIpKTtjb25zdHtmcm9tOnJlLHRvOmNlfT1NLGJlPU1hdGgubWluKHJlLnJvdyxjZS5yb3cpLEVlPU1hdGgubWF4KHJlLnJvdyxjZS5yb3cpO2lmKGwuY29s''@;'; put 'put ''PDAmJmwucm93Pj1iZSYmbC5yb3c8PUVlKXtkLnJvdz0hMCxGOShiNix0aGlzLCEwKSxGbyhYZCx0aGlzKS5ldmVudFBhZ2VZPWMucGFnZVksRm8oWGQsdGhpcykuY29vcmRzPWwsRm8oWGQsdGhpcykuVEQ9YSxGOShaNSx0aGlzLHRoaXMucHJlcGFyZVJvd3NUb01vdmluZygpKTtjb25zdCBC''@;'; put 'put ''ZT1oLmhvbGRlci5zY3JvbGxMZWZ0K2YuZ2V0Um93SGVhZGVyV2lkdGgoKSxxZT10aGlzLmdldFJvd3NIZWlnaHQoYmUsbC5yb3ctMSkrKGMuY2xpZW50WS1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCk7Rm8odGQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxCZSksRm8odGQsdGhpcyku''@;'; put 'put ''c2V0U2l6ZShoLmhpZGVyLm9mZnNldFdpZHRoLUJlLHRoaXMuZ2V0Um93c0hlaWdodChiZSxFZSkpLEZvKHRkLHRoaXMpLnNldE9mZnNldCgtcWUsbnVsbCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsVVEpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfWVsc2UgbG8odGhpcy5ob3Qucm9vdEVs''@;'; put 'put ''ZW1lbnQsWlEpLEY5KGI2LHRoaXMsITEpLEZvKFo1LHRoaXMpLmxlbmd0aD0wfWZ1bmN0aW9uIEJmdChjKXtGbyhiNix0aGlzKSYmKEZvKFhkLHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSl9ZnVuY3Rpb24gamZ0KGMsbCxhLGQpeyF0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpfHwhRm8oYjYsdGhpcyl8fChGbyhaNSx0aGlzKS5pbmRleE9mKGwucm93KT4tMT9sbyh0aGlzLmhvdC5yb290RWxlbWVudCxnSCk6VGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsZ0gpLGQucm93PSEwLGQuY29sdW1uPSEwLGQuY2VsbD0hMCxGbyhYZCx0aGlz''@;'; put 'put ''KS5jb29yZHM9bCxGbyhYZCx0aGlzKS5URD1hKX1mdW5jdGlvbiB6ZnQoKXtjb25zdCBjPUZvKFhkLHRoaXMpLnJvdyxsPUZvKFo1LHRoaXMpLmxlbmd0aDtpZihGOShiNix0aGlzLCExKSxsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbVVEsZ0gsWlFdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNT''@;'; put 'put ''ZWxlY3RlZEJ5Um93SGVhZGVyKCkmJlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LFpRKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2NvbnN0IGE9Rm8oWjUsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGg9dGhpcy5kcmFnUm93cyhGbyhaNSx0aGlzKSxjKTtpZihGbyhaNSx0''@;'; put 'put ''aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhkKTt0aGlzLmhvdC5zZWxlY3RSb3dzKGYsZitsLTEpfX1m''@;'; put 'put ''dW5jdGlvbiBVZnQoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCkrYy5ob2xkZXIuc2Nyb2xsTGVmdDtGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGQpLEZvKHRkLHRoaXMpLnNl''@;'; put 'put ''dFNpemUoYy5oaWRlci5vZmZzZXRXaWR0aC1kKX1mdW5jdGlvbiBaZnQoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZnVuY3Rpb24gUzEoYyxsLGEpe2ZtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu''@;'; put 'put ''bm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLYyhjLGwsYSl7cmV0dXJuIGMuc2V0KFc1KGMsbCksYSksYX1mdW5jdGlvbiBNYShjLGwpe3JldHVybiBjLmdldChXNShjLGwpKX1mdW5jdGlvbiBXNShjLGwsYSl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3Qgdkg9Im1hbnVhbFJvd1Jlc2l6ZSIs''@;'; put 'put ''cG1lPSJtYW51YWxSb3dIZWlnaHRzIjt2YXIgJHA9bmV3IFdlYWtNYXAsYkg9bmV3IFdlYWtNYXAsamg9bmV3IFdlYWtNYXAsbEE9bmV3IFdlYWtNYXAseTY9bmV3IFdlYWtNYXAsV1E9bmV3IFdlYWtNYXAscHc9bmV3IFdlYWtNYXAseUg9bmV3IFdlYWtNYXAsbmQ9bmV3IFdlYWtNYXAsS3A9''@;'; put 'put ''bmV3IFdlYWtNYXAsTjk9bmV3IFdlYWtNYXAsX0g9bmV3IFdlYWtNYXAsY0E9bmV3IFdlYWtNYXAsdUE9bmV3IFdlYWtNYXAsXzM9bmV3IFdlYWtNYXAsZEE9bmV3IFdlYWtNYXAsXzY9bmV3IFdlYWtTZXQ7Y2xhc3MgR2Z0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0''@;'; put 'put ''dXJuIHZIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIFdmdChjLGwpe2ZtZShjLGwpLGwuYWRkKGMpfSh0aGlzLF82KSxTMSh0aGlzLCRwLG51bGwpLFMxKHRoaXMsYkgsbnVsbCksUzEodGhpcyxqaCxbXSks''@;'; put 'put ''UzEodGhpcyxsQSxudWxsKSxTMSh0aGlzLHk2LG51bGwpLFMxKHRoaXMsV1EsbnVsbCksUzEodGhpcyxwdyxudWxsKSxTMSh0aGlzLHlILG51bGwpLFMxKHRoaXMsbmQsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxTMSh0aGlzLEtwLHRoaXMuaG90LnJvb3RE''@;'; put 'put ''b2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksUzEodGhpcyxOOSwhMSksUzEodGhpcyxfSCwhMSksUzEodGhpcyxjQSwwKSxTMSh0aGlzLHVBLG51bGwpLFMxKHRoaXMsXzMsdm9pZCAwKSxTMSh0aGlzLGRBLHZvaWQgMCksVGkoTWEobmQsdGhpcyksIm1hbnVhbFJvd1Jlc2l6ZXIiKSxU''@;'; put 'put ''aShNYShLcCx0aGlzKSwibWFudWFsUm93UmVzaXplckd1aWRlIil9Z2V0IGlubGluZURpcigpe3JldHVybiB0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQifWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZIXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJs''@;'; put 'put ''ZWR8fChLYyhfMyx0aGlzLG5ldyBabSksTWEoXzMsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+VzUoXzYsdGhpcyxlM3QpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxNYShfMyx0aGlzKSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJtb2RpZnlSb3dIZWlnaHQiLChsLGEpPT5XNShfNix0aGlzLFFmdCkuY2FsbCh0aGlzLGwsYSkpLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0''@;'; put 'put ''ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtLYyhkQSx0aGlzLE1hKF8zLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxSb3dIZWlnaHRzKCl7dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHBtZSxNYShfMyx0aGlzKS5nZXRWYWx1ZXMoKSl9bG9hZE1hbnVhbFJvd0hlaWdodHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIscG1lLGwpLGwudmFsdWV9c2V0''@;'; put 'put ''TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hdGgubWF4KGEsdGhpcy5ob3Qudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpO3JldHVybiBNYShfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxoKSxofWdldExhc3REZXNpcmVkUm93SGVpZ2h0''@;'; put 'put ''KCl7cmV0dXJuIE1hKGxBLHRoaXMpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7S2MoJHAsdGhpcyxsKTtjb25zdHt2aWV3OmF9PXRoaXMuaG90LHtfd3Q6ZH09YSxoPWQud3RUYWJsZS5nZXRDb29yZHMoTWEoJHAsdGhpcykpLGY9aC5yb3c7aWYoZjwwKXJldHVybjtjb25zdCB2PXN1KE1hKCRw''@;'; put 'put ''LHRoaXMpKSxNPU1hKCRwLHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9ZjxkLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFo9Zj49YS5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoMCwxKS1kLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpO2xldCByZTtEP3JlPWQud3RP''@;'; put 'put ''dmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5yb3csaC5jb2wpOlomJihyZT1kLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKE1hKCRw''@;'; put 'put ''LHRoaXMpLGgucm93LGguY29sKSkscmV8fChyZT1kLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKE1hKCRwLHRoaXMpLGgucm93LGguY29sKSksS2MoYkgsdGhpcyx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVy''@;'; put 'put ''YWJsZUluZGV4KGYpKSxLYyhqaCx0aGlzLFtdKTtjb25zdCBjZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZjZSYmWW4odGhp''@;'; put 'put ''cy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLEVlPT57R2EoRWUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csRWUuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cscnQ9PntNYShqaCx0aGlzKS5pbmNsdWRlcyhydCl8fE1hKGpoLHRoaXMpLnB1c2gocnQpfSl9KSxNYShqaCx0aGlzKS5pbmNsdWRl''@;'; put 'put ''cyhNYShiSCx0aGlzKSl8fEtjKGpoLHRoaXMsW01hKGJILHRoaXMpXSksS2MoeUgsdGhpcyxyZS50b3AtNiksS2MocHcsdGhpcyxwYXJzZUludChNLmhlaWdodCwxMCkpLE1hKG5kLHRoaXMpLnN0eWxlLnRvcD1gJHtNYSh5SCx0aGlzKStNYShwdyx0aGlzKX1weGAsTWEobmQsdGhpcykuc3R5''@;'; put 'put ''bGVbdGhpcy5pbmxpbmVEaXJdPWAke3JlLnN0YXJ0fXB4YCxNYShuZCx0aGlzKS5zdHlsZS53aWR0aD1gJHt2fXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChNYShuZCx0aGlzKSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7TWEobmQsdGhpcykuc3R5bGUudG9wPWAke01h''@;'; put 'put ''KHlILHRoaXMpK01hKGxBLHRoaXMpfXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KHN1KE1hKG5kLHRoaXMpKSwxMCksYT1wYXJzZUludChNYShuZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl0sMTApK2wsZD10aGlzLmhvdC52aWV3LmdldFRhYmxlV2lkdGgo''@;'; put 'put ''KTtUaShNYShuZCx0aGlzKSwiYWN0aXZlIiksVGkoTWEoS3AsdGhpcyksImFjdGl2ZSIpLE1hKEtwLHRoaXMpLnN0eWxlLnRvcD1NYShuZCx0aGlzKS5zdHlsZS50b3AsTWEoS3AsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2F9cHhgLE1hKEtwLHRoaXMpLnN0eWxlLndpZHRoPWQt''@;'; put 'put ''bCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKE1hKEtwLHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe01hKEtwLHRoaXMpLnN0eWxlLnRvcD1NYShuZCx0aGlzKS5zdHlsZS50b3B9aGlkZUhhbmRsZUFuZEd1aWRlKCl7bG8oTWEobmQsdGhpcyksImFjdGl2ZSIp''@;'; put 'put ''LGxvKE1hKEtwLHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmUm93SGVhZGVyKGwpe2NvbnN0IGE9Um0obCxbIlRCT0RZIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpLHtpbmxpbmVTdGFydE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aCxib3R0b21JbmxpbmVTdGFydENvcm5l''@;'; put 'put ''ck92ZXJsYXk6Zn09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztyZXR1cm5bZC5jbG9uZS53dFRhYmxlLlRCT0RZLGguY2xvbmUud3RUYWJsZS5UQk9EWSxmLmNsb25lLnd0VGFibGUuVEJPRFldLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09''@;'; put 'put ''bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9Z2V0QWN0dWFsUm93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQobCk7cmV0dXJuIHZvaWQgMCE9PWEmJk1h''@;'; put 'put ''KHk2LHRoaXMpPGE/YTpNYSh5Nix0aGlzKX1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jl''@;'; put 'put ''c2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCk7dm9pZCAwIT09ZiYmS2MoeTYsdGhpcyxmKSx0aGlzLnNldE1hbnVhbFNpemUoZCxNYSh5Nix0aGlzKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEw''@;'; put 'put ''KSxoJiZsKCl9O01hKGNBLHRoaXMpPj0yJiYoTWEoamgsdGhpcykubGVuZ3RoPjE/KFluKE1hKGpoLHRoaXMpLGg9PnthKGgpfSksbCgpKTpZbihNYShqaCx0aGlzKSxoPT57YShoLCEwKX0pKSxLYyhjQSx0aGlzLDApLEtjKHVBLHRoaXMsbnVsbCl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RF''@;'; put 'put ''bGVtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsZD0+VzUoXzYsdGhpcywkZnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGQ9''@;'; put 'put ''Plc1KF82LHRoaXMsS2Z0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vtb3ZlIixkPT5XNShfNix0aGlzLHFmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLCgpPT5X''@;'; put 'put ''NShfNix0aGlzLFhmdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihNYShuZCx0aGlzKSwiY29udGV4dG1lbnUiLCgpPT5XNShfNix0aGlzLEpmdCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gJGZ0KGMpe2lm''@;'; put 'put ''KCFFJChjLnRhcmdldCkmJiEwIT09TWEoX0gsdGhpcykmJnRoaXMuY2hlY2tJZlJvd0hlYWRlcihjLnRhcmdldCkpe2NvbnN0IGw9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoYy50YXJnZXQpO2wmJihNYShOOSx0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24g''@;'; put 'put ''S2Z0KGMpe3BvKGMudGFyZ2V0LCJtYW51YWxSb3dSZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oTWEoJHAsdGhpcykpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksS2MoTjksdGhpcywhMCksbnVsbD09PU1hKHVBLHRoaXMpJiYoS2ModUEsdGhpcyxzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCkpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoTWEodUEsdGhpcykpKSxLYyhjQSx0aGlzLE1hKGNBLHRoaXMpKzEpLEtjKFdRLHRoaXMsYy5wYWdlWSksS2MoeTYsdGhpcyxNYShwdyx0aGlzKSkpfWZ1bmN0aW9uIHFmdChjKXtN''@;'; put 'put ''YShOOSx0aGlzKSYmKEtjKGxBLHRoaXMsTWEocHcsdGhpcykrKGMucGFnZVktTWEoV1EsdGhpcykpKSxZbihNYShqaCx0aGlzKSxsPT57S2MoeTYsdGhpcyx0aGlzLnNldE1hbnVhbFNpemUobCxNYShsQSx0aGlzKSkpfSksdGhpcy5yZWZyZXNoSGFuZGxlUG9zaXRpb24oKSx0aGlzLnJlZnJl''@;'; put 'put ''c2hHdWlkZVBvc2l0aW9uKCkpfWZ1bmN0aW9uIFhmdCgpe2NvbnN0IGM9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxsPShhLGQpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dI''@;'; put 'put ''ZWlnaHQoYSksYSwhMSksZCYmYygpLHRoaXMuc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGEpLGEsITEpfTtNYShOOSx0aGlzKSYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksS2MoTjks''@;'; put 'put ''dGhpcywhMSksTWEoeTYsdGhpcykhPT1NYShwdyx0aGlzKSYmKE1hKGpoLHRoaXMpLmxlbmd0aD4xPyhZbihNYShqaCx0aGlzKSxkPT57bChkKX0pLGMoKSk6WW4oTWEoamgsdGhpcyksZD0+e2woZCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKE1hKCRwLHRoaXMpKSl9ZnVuY3Rp''@;'; put 'put ''b24gSmZ0KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChNYShuZCx0aGlzKSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoTWEoS3AsdGhpcykpLEtjKE45LHRoaXMsITEpLEtjKF9ILHRoaXMsITApLHRoaXMuaG90''@;'; put 'put ''Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e0tjKF9ILHRoaXMsITEpfSl9ZnVuY3Rpb24gUWZ0KGMsbCl7bGV0IGE9YztpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPU1hKF8zLHRoaXMpLmdldFZhbHVlQXRJbmRleChkKTt0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpW3ZIXSYmaCYmKGE9aCl9cmV0dXJuIGF9ZnVuY3Rpb24gZTN0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZIXSxsPXRoaXMubG9hZE1hbnVhbFJvd0hlaWdodHMoKTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3R5cGVvZiBsPCJ1Ij9sLmZvckVhY2go''@;'; put 'put ''KGEsZCk9PntNYShfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pOkFycmF5LmlzQXJyYXkoYyk/KGMuZm9yRWFjaCgoYSxkKT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSksS2MoZEEsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KE1hKGRBLHRoaXMpKSYm''@;'; put 'put ''TWEoZEEsdGhpcykuZm9yRWFjaCgoYSxkKT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKX1mdW5jdGlvbiBWOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcjN0KGMpe3ZhciBsPWZ1bmN0aW9uIGkzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZ21lKGMsbCl7cmV0dXJuIGMuZ2V0KG1tZShjLGwpKX1mdW5jdGlvbiB3SChjLGwsYSl7cmV0dXJuIGMuc2V0KG1tZShjLGwpLGEpLGF9ZnVuY3Rpb24gbW1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15KDY4MTQ2KSx5KDc0OTkpO3ZhciBCOT1uZXcgV2Vha01hcDtjb25zdCBxcD1jbGFzcyBhM3R7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLHYpe1Y5KHRoaXMsInJvdyIsdm9pZCAwKSxWOSh0aGlzLCJjb2wiLHZvaWQgMCksVjkodGhpcywicm93c3BhbiIsdm9pZCAwKSxWOSh0aGlzLCJjb2xzcGFuIix2b2lkIDApLFY5KHRoaXMsInJlbW92ZWQiLCExKSxWOSh0aGlzLCJjZWxsQ29vcmRzRmFjdG9y''@;'; put 'put ''eSIsdm9pZCAwKSxWOSh0aGlzLCJjZWxsUmFuZ2VGYWN0b3J5Iix2b2lkIDApLGZ1bmN0aW9uIHQzdChjLGwsYSl7KGZ1bmN0aW9uIG4zdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsQjksbnVsbCksdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucm93c3Bhbj1kLHRoaXMuY29sc3Bhbj1oLHRoaXMuY2VsbENvb3Jkc0ZhY3Rvcnk9Zix0aGlzLmNlbGxSYW5nZUZhY3Rvcnk9dn1zdGF0aWMgTkVHQVRJ''@;'; put 'put ''VkVfVkFMVUVTX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCB3aXRoIHtyb3c6ICR7YX0sIGNvbDogJHtkfSxceDIwCiAgICAgIHJvd3NwYW46ICR7aH0sIGNvbHNwYW46ICR7Zn19IGNv''@;'; put 'put ''bnRhaW5zIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggaXNceDIwCiAgICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIElTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRo''@;'; put 'put ''ZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9uZWQgcGFydGlhbGx5KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBz''@;'; put 'put ''ZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTChsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzIGJvdGggInJvd3NwYW4iXHgyMAogICAgICBhbmQgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIxIiwgd2hp''@;'; put 'put ''Y2ggbWFrZXMgaXQgYSBzaW5nbGUgY2VsbC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIFpFUk9fU1BBTl9XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBo''@;'; put 'put ''YXMgInJvd3NwYW4iXHgyMAogICAgICBvciAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjAiLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKXtsZXR7cm93OmEsY29sOmQs''@;'; put 'put ''cm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gYTwwfHxkPDB8fGg8MHx8ZjwwfXN0YXRpYyBpc1NpbmdsZUNlbGwobCl7bGV0e3Jvd3NwYW46YSxjb2xzcGFuOmR9PWw7cmV0dXJuIDE9PT1kJiYxPT09YX1zdGF0aWMgY29udGFpbnNaZXJvU3BhbihsKXtsZXR7cm93c3BhbjphLGNvbHNw''@;'; put 'put ''YW46ZH09bDtyZXR1cm4gMD09PWR8fDA9PT1hfXN0YXRpYyBpc091dE9mQm91bmRzKGwsYSxkKXtyZXR1cm4gbC5yb3c8MHx8bC5jb2w8MHx8bC5yb3c+PWF8fGwucm93K2wucm93c3Bhbi0xPj1hfHxsLmNvbD49ZHx8bC5jb2wrbC5jb2xzcGFuLTE+PWR9bm9ybWFsaXplKGwpe2NvbnN0IGE9''@;'; put 'put ''bC5jb3VudFJvd3MoKSxkPWwuY291bnRDb2xzKCk7dGhpcy5yb3c8MD90aGlzLnJvdz0wOnRoaXMucm93PmEtMSYmKHRoaXMucm93PWEtMSksdGhpcy5jb2w8MD90aGlzLmNvbD0wOnRoaXMuY29sPmQtMSYmKHRoaXMuY29sPWQtMSksdGhpcy5yb3crdGhpcy5yb3dzcGFuPmEtMSYmKHRoaXMu''@;'; put 'put ''cm93c3Bhbj1hLXRoaXMucm93KSx0aGlzLmNvbCt0aGlzLmNvbHNwYW4+ZC0xJiYodGhpcy5jb2xzcGFuPWQtdGhpcy5jb2wpLHdIKEI5LHRoaXMsbnVsbCl9aW5jbHVkZXMobCxhKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMuY29sPD1hJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bCYm''@;'; put 'put ''dGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWF9aW5jbHVkZXNIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuY29sPD1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49bH1pbmNsdWRlc1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49''@;'; put 'put ''bH1zaGlmdChsLGEpe2NvbnN0IGQ9bFswXXx8bFsxXSxoPWErTWF0aC5hYnMobFswXXx8bFsxXSktMSxmPWxbMF0/ImNvbHNwYW4iOiJyb3dzcGFuIix2PWxbMF0/ImNvbCI6InJvdyIsTT1NYXRoLm1pbihhLGgpLEQ9TWF0aC5tYXgoYSxoKSxaPXRoaXNbdl0scmU9dGhpc1t2XSt0aGlzW2Zd''@;'; put 'put ''LTE7aWYoWj49YSYmKHRoaXNbdl0rPWQpLGQ+MClhPD1yZSYmYT5aJiYodGhpc1tmXSs9ZCk7ZWxzZSBpZihkPDApe2lmKE08PVomJkQ+PXJlKXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsd0goQjksdGhpcyxudWxsKSwhMTtpZihaPj1NJiZaPD1EKXtjb25zdCBjZT1ELVorMSxiZT1NYXRoLmFi''@;'; put 'put ''cyhkKS1jZTt0aGlzW3ZdLT1iZStkLHRoaXNbZl0tPWNlfWVsc2UgWjw9TSYmcmU+PUQ/dGhpc1tmXSs9ZDpaPD1NJiZyZT49TSYmcmU8RCYmKHRoaXNbZl0tPXJlLU0rMSl9cmV0dXJuIHdIKEI5LHRoaXMsbnVsbCksITB9aXNGYXJ0aGVyKGwsYSl7cmV0dXJuIWx8fCgiZG93biI9PT1hP2wu''@;'; put 'put ''cm93K2wucm93c3Bhbi0xPHRoaXMucm93K3RoaXMucm93c3Bhbi0xOiJ1cCI9PT1hP2wucm93PnRoaXMucm93OiJyaWdodCI9PT1hP2wuY29sK2wuY29sc3Bhbi0xPHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xOiJsZWZ0Ij09PWE/bC5jb2w+dGhpcy5jb2w6bnVsbCl9Z2V0TGFzdFJvdygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMX1nZXRMYXN0Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xfWdldFJhbmdlKCl7cmV0dXJuIGdtZShCOSx0aGlzKXx8d0goQjksdGhpcyx0aGlzLmNlbGxSYW5nZUZhY3RvcnkodGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0''@;'; put 'put ''aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLmdldExhc3RSb3coKSx0aGlzLmdldExhc3RDb2x1bW4oKSkpKSxnbWUoQjksdGhpcyl9fTtmdW5jdGlvbiBDSChjLGwsYSl7cmV0dXJu''@;'; put 'put ''KGw9ZnVuY3Rpb24gbDN0KGMpe3ZhciBsPWZ1bmN0aW9uIGMzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi''@;'; put 'put ''In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gajkoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB3Nj1uZXcgV2Vha1NldDtjbGFzcyBTSHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gbzN0KGMsbCl7KGZ1bmN0aW9uIHMz''@;'; put 'put ''dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyx3NiksQ0godGhpcywicGx1Z2luIix2b2lkIDApLENIKHRoaXMs''@;'; put 'put ''Im1lcmdlZENlbGxzIixbXSksQ0godGhpcywibWVyZ2VkQ2VsbHNNYXRyaXgiLG5ldyBNYXApLENIKHRoaXMsImhvdCIsdm9pZCAwKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90fXN0YXRpYyBJU19PVkVSTEFQUElOR19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4g''@;'; put 'put ''Z2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSwgb3ZlcmxhcHNceDIwCiAgICAgIHdpdGggdGhlIG90aGVyIGRlY2xhcmVkIG1lcmdlZCBjZWxsLiBUaGUgb3ZlcmxhcHBpbmcgbWVyZ2VkIGNlbGwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZVx4''@;'; put 'put ''MjAKICAgICAgZml4IHlvdXIgc2V0dXAuYH1nZXQobCxhKXt2YXIgZDtyZXR1cm4hKCF0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhsKXx8bnVsbD09PShkPXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmdldChhKSl8fHZvaWQgMD09PWQpJiZkfWdldEJ5UmFuZ2UobCl7Y29uc3R7''@;'; put 'put ''cm93OmEsY29sOmR9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj10aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtsZXQgTT0hMTtmb3IobGV0IEQ9MDtEPHY7RCsrKXtjb25zdCBaPXRoaXMubWVyZ2VkQ2VsbHNbRF0se3JvdzpyZSxj''@;'; put 'put ''b2w6Y2Uscm93c3BhbjpiZSxjb2xzcGFuOkVlfT1aO2lmKHJlPj1hJiZyZStiZS0xPD1oJiZjZT49ZCYmY2UrRWUtMTw9Zil7TT1aO2JyZWFrfX1yZXR1cm4gTX1maWx0ZXJPdmVybGFwcGluZ01lcmdlQ2VsbHMobCl7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLm1lcmdlZENlbGxzLmZv''@;'; put 'put ''ckVhY2goaD0+e2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWg7Zm9yKGxldCBaPWY7WjxmK0Q7WisrKWZvcihsZXQgcmU9djtyZTx2K007cmUrKylhLmFkZChgciR7Wn0sYyR7cmV9YCl9KSxsLmZpbHRlcihoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJv''@;'; put 'put ''d3NwYW46RH09aCxaPW5ldyBTZXQ7bGV0IHJlPSExO2ZvcihsZXQgY2U9ZjtjZTxmK0Q7Y2UrKyl7Zm9yKGxldCBiZT12O2JlPHYrTTtiZSsrKXtjb25zdCBFZT1gciR7Y2V9LGMke2JlfWA7aWYoYS5oYXMoRWUpKXtpbChTSC5JU19PVkVSTEFQUElOR19XQVJOSU5HKGgpKSxyZT0hMDticmVh''@;'; put 'put ''a31aLmFkZChFZSl9aWYocmUpYnJlYWt9cmV0dXJuIHJlfHxhLmFkZCguLi5aKSwhcmV9KX1nZXRXaXRoaW5SYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3JvdzpkLGNvbDpofT1sLmdldFRvcFN0YXJ0''@;'; put 'put ''Q29ybmVyKCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLE09W107Zm9yKGxldCBEPWQ7RDw9ZjtEKyspZm9yKGxldCBaPWg7Wjw9djtaKyspe2NvbnN0IHJlPXRoaXMuZ2V0KEQsWik7cmUmJihhfHwhYSYmcmUucm93PT09RCYmcmUuY29sPT09WikmJk0ucHVzaChyZSl9''@;'; put 'put ''cmV0dXJuIE19YWRkKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1sLnJvdyxoPWwuY29sLE09bmV3IHFwKGQsaCxsLnJvd3NwYW4sbC5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsUmFuZ2UpLEQ9dGhpcy5nZXQoZCxoKSxaPSFhJiZ0aGlzLmlzT3ZlcmxhcHBpbmcoTSk7cmV0dXJuIER8fFo/KFomJmlsKFNILklTX09WRVJMQVBQSU5HX1dBUk5JTkcoTSkpLCExKToodGhpcy5ob3QmJk0ubm9ybWFsaXplKHRoaXMuaG90KSx0aGlzLm1lcmdlZENl''@;'; put 'put ''bGxzLnB1c2goTSksajkodzYsdGhpcyx2bWUpLmNhbGwodGhpcyxNKSxNKX1yZW1vdmUobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSksaD1kP3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihkKTotMTtyZXR1cm4hKCFkfHwtMT09PWgpJiYodGhpcy5tZXJnZWRDZWxscy5zcGxpY2UoaCwxKSxq''@;'; put 'put ''OSh3Nix0aGlzLHUzdCkuY2FsbCh0aGlzLGQpLGQpfWNsZWFyKCl7WW4odGhpcy5tZXJnZWRDZWxscyxsPT57bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7R2EoYSxhK2gsdj0+e0dhKGQsZCtmLE09Pntjb25zdCBEPXRoaXMuaG90LmdldENlbGwodixNKTtEJiYoRC5y''@;'; put 'put ''ZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxELnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLEQuc3R5bGUuZGlzcGxheT0iIil9KX0pfSksdGhpcy5tZXJnZWRDZWxscy5sZW5ndGg9MCx0aGlzLm1lcmdlZENlbGxzTWF0cml4PW5ldyBNYXB9aXNPdmVybGFwcGluZyhsKXtjb25zdCBhPWwu''@;'; put 'put ''Z2V0UmFuZ2UoKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrKylpZih0aGlzLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCkub3ZlcmxhcHMoYSkpcmV0dXJuITA7cmV0dXJuITF9aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dChsLGEpO2lmKCFkKXJldHVybiExO2NvbnN0e3JvdzpoLGNvbDpmLHJvd3NwYW46dixjb2xzcGFuOk19PWQsRD10aGlzLmhvdC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksWj1bInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRCk/MDp0aGlzLmhvdC5nZXRG''@;'; put 'put ''aXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLHJlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEQpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxjZT1rcyhaLGgs''@;'; put 'put ''aCt2LTEpLGJlPWtzKHJlLGYsZitNLTEpO3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSk9PT1sJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSk9PT1hfWdldEZpcnN0UmVu''@;'; put 'put ''ZGVyYWJsZUNvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKTtjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChkLnJvdywxKSxmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLmNvbCwxKTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGEpe2NvbnN0IGQ9''@;'; put 'put ''ajkodzYsdGhpcyxNSCkuY2FsbCh0aGlzLGwsImNvbCIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXTw9YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEVuZE1vc3RDb2x1bW5JbmRleChsLGEpe2NvbnN0IGQ9ajkodzYsdGhpcyxNSCkuY2FsbCh0aGlz''@;'; put 'put ''LGwsImNvbCIsMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0VG9wTW9zdFJvd0luZGV4KGwsYSl7Y29uc3QgZD1qOSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwicm93IiwtMSk7bGV0IGg9YTtmb3IobGV0''@;'; put 'put ''IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0Qm90dG9tTW9zdFJvd0luZGV4KGwsYSl7Y29uc3QgZD1qOSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwicm93IiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRb''@;'; put 'put ''Zl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1zaGlmdENvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPVswLDBdO3N3aXRjaChsKXtjYXNlInJpZ2h0IjpoWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6aFswXS09ZDticmVhaztjYXNlImRvd24iOmhbMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6aFsx''@;'; put 'put ''XS09ZH1jb25zdCBmPVtdO3RoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57di5zaGlmdChoLGEpLHYucmVtb3ZlZCYmZi5wdXNoKHYpfSksZi5mb3JFYWNoKHY9Pnt0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YodiksMSl9KSx0aGlzLm1lcmdlZENl''@;'; put 'put ''bGxzTWF0cml4LmNsZWFyKCksdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKHY9PntqOSh3Nix0aGlzLHZtZSkuY2FsbCh0aGlzLHYpfSl9fWZ1bmN0aW9uIE1IKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7Y29uc3Qg''@;'; put 'put ''ZD1uZXcgTWFwLGg9MT09PWE/Yy5nZXRUb3BTdGFydENvcm5lcigpOmMuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj0xPT09YT9jLmdldEJvdHRvbUVuZENvcm5lcigpOmMuZ2V0VG9wU3RhcnRDb3JuZXIoKTtmb3IobGV0IHY9aC5yb3c7MT09PWE/djw9Zi5yb3c6dj49Zi5yb3c7dis9YSlmb3Io''@;'; put 'put ''bGV0IE09aC5jb2w7MT09PWE/TTw9Zi5jb2w6TT49Zi5jb2w7TSs9YSl7Y29uc3QgRD0icm93Ij09PWw/djpNLFo9dGhpcy5nZXQodixNKTtsZXQgcmU9RDtaJiYocmU9MT09PWE/WltsXStaW2Ake2x9c3BhbmBdLTE6WltsXSksZC5oYXMoRCl8fGQuc2V0KEQsbmV3IFNldCksZC5nZXQoRCku''@;'; put 'put ''YWRkKHJlKX1yZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KEFycmF5LmZyb20oZC5lbnRyaWVzKCkpLmZpbHRlcih2PT57bGV0WyxNXT12O3JldHVybiAxPT09TS5zaXplfSkuZmxhdE1hcCh2PT57bGV0WyxNXT12O3JldHVybiBBcnJheS5mcm9tKE0pfSkpKX1mdW5jdGlvbiB2bWUoYyl7Zm9y''@;'; put 'put ''KGxldCBsPWMucm93O2w8Yy5yb3crYy5yb3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsrKXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguaGFzKGwpfHx0aGlzLm1lcmdlZENlbGxzTWF0cml4LnNldChsLG5ldyBNYXApLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXgu''@;'; put 'put ''Z2V0KGwpLnNldChhLGMpfWZ1bmN0aW9uIHUzdChjKXtmb3IobGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsrKWZvcihsZXQgYT1jLmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuZGVsZXRlKGEpfWNvbnN0IGQzdD1TSDtmdW5j''@;'; put 'put ''dGlvbiBZUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaDN0KGMpe3ZhciBsPWZ1bmN0aW9uIGYzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZzN0PWNsYXNzIHAzdHtjb25zdHJ1Y3RvcihsKXtZUSh0aGlzLCJw''@;'; put 'put ''bHVnaW4iLHZvaWQgMCksWVEodGhpcywibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uIix2b2lkIDApLFlRKHRoaXMsImN1cnJlbnRGaWxsRGF0YSIsbnVsbCksdGhpcy5wbHVnaW49bCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb259Z2V0''@;'; put 'put ''RGlyZWN0aW9uKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hWzBdPT09bFswXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJkb3duIjphWzJdPT09bFsyXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJ1cCI6YVsxXT09PWxbMV0mJmFbMl09PT1sWzJdPyJyaWdodCI6ImxlZnQiLGR9''@;'; put 'put ''c25hcERyYWdBcmVhKGwsYSxkLGgpe2NvbnN0IGY9YS5zbGljZSgwKSx2PXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxbTSxELFoscmVdPWwsYmU9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xP1otTSsxOnJlLUQrMSxCZT12LU1hdGguZmxvb3Iodi9iZSkqYmUscWU9dGhpcy5nZXRG''@;'; put 'put ''YXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCk7aWYocWUpaWYoImRvd24iPT09ZCl7Y29uc3QgcnQ9cWUucm93K3FlLnJvd3NwYW4tTS1CZTtmWzJdK3J0Pj10aGlzLnBsdWdpbi5ob3QuY291bnRSb3dzKCk/ZlsyXS09QmU6ZlsyXSs9QmU/cnQ6MH1lbHNlIGlmKCJyaWdodCI9PT1kKXtjb25z''@;'; put 'put ''dCBydD1xZS5jb2wrcWUuY29sc3Bhbi1ELUJlO2ZbM10rcnQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudENvbHMoKT9mWzNdLT1CZTpmWzNdKz1CZT9ydDowfWVsc2UgaWYoInVwIj09PWQpe2NvbnN0IHJ0PVotQmUtcWUucm93KzE7ZlswXStydDwwP2ZbMF0rPUJlOmZbMF0tPUJlP3J0OjB9ZWxz''@;'; put 'put ''ZSBpZigibGVmdCI9PT1kKXtjb25zdCBydD1yZS1CZS1xZS5jb2wrMTtmWzFdK3J0PDA/ZlsxXSs9QmU6ZlsxXS09QmU/cnQ6MH1yZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTpsLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6''@;'; put 'put ''dixkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOmJlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3VycmVudEZpbGxEYXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLHh1KHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxm''@;'; put 'put ''LHYsTV09bCxbRCxaLHJlLGNlXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm4gaC1EO2Nhc2UiZG93biI6cmV0dXJuIHJlLXY7Y2FzZSJsZWZ0IjpyZXR1cm4gZi1aO2Nhc2UicmlnaHQiOnJldHVybiBjZS1NO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWdldERyYWdBcmVhKGwsYSxkKXtjb25z''@;'; put 'put ''dFtoLGYsdixNXT1sLFtELFoscmUsY2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybltELFosaC0xLE1dO2Nhc2UiZG93biI6e2NvbnN0IGJlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChyZSxNKTtyZXR1cm5bdisxLGYscmUrKGJlP2JlLnJvd3NwYW4tMTowKSxNXX1jYXNl''@;'; put 'put ''ImxlZnQiOnJldHVybltELFosdixmLTFdO2Nhc2UicmlnaHQiOntjb25zdCBiZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQocmUsTSk7cmV0dXJuW2gsTSsoYmU/YmUuY29sc3Bhbi0xOjApLHJlLGNlXX1kZWZhdWx0OnJldHVybiBudWxsfX1nZXRGYXJ0aGVzdENvbGxlY3Rpb24o''@;'; put 'put ''bCxhLGQsaCl7Y29uc3RbZix2LE0sRF09bCxaPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMSxyZT1aP006RCxjZT1aP2Y6dixiZT10aGlzLmdldEF1dG9maWxsU2l6ZShsLGEsZCksRWU9Wj9NLWYrMTpELXYrMSxxZT1iZS1NYXRoLmZsb29yKGJlL0VlKSpFZTtsZXQgcnQ9bnVsbCxwdD1u''@;'; put 'put ''dWxsLGR0PW51bGw7c3dpdGNoKGQpe2Nhc2UidXAiOnJ0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PXJlLXFlKzE7YnJlYWs7Y2FzZSJsZWZ0IjpydD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLGR0PXJlLXFlKzE7YnJlYWs7Y2FzZSJkb3duIjpydD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixkdD1j''@;'; put 'put ''ZStxZS0xO2JyZWFrO2Nhc2UicmlnaHQiOnJ0PSJpbmNsdWRlc0hvcml6b250YWxseSIsZHQ9Y2UrcWUtMX1yZXR1cm4gWW4oaCxKdD0+e0p0W3J0XShkdCkmJkp0LmlzRmFydGhlcihwdCxkKSYmKHB0PUp0KX0pLHB0fXJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKXtpZighdGhpcy5j''@;'; put 'put ''dXJyZW50RmlsbERhdGEpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRSYW5nZUZyb21DaGFuZ2VzKGwpLGQ9dGhpcy5jdXJyZW50RmlsbERhdGEuZm91bmRNZXJnZWRDZWxscyxoPXRoaXMuY3VycmVudEZpbGxEYXRhLmRyYWdEaXJlY3Rpb24sZj0oWixyZSk9Pntzd2l0Y2goaCl7Y2FzZSJ1cCI6''@;'; put 'put ''cmV0dXJuIFoucm93LXJlPj1hLmZyb20ucm93O2Nhc2UiZG93biI6cmV0dXJuIFoucm93K1oucm93c3Bhbi0xK3JlPD1hLnRvLnJvdztjYXNlImxlZnQiOnJldHVybiBaLmNvbC1yZT49YS5mcm9tLmNvbHVtbjtjYXNlInJpZ2h0IjpyZXR1cm4gWi5jb2wrWi5jb2xzcGFuLTErcmU8PWEudG8u''@;'; put 'put ''Y29sdW1uO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTtsZXQgdj0wLE09bnVsbCxEPTE7ZG97Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKz0xKXtpZihNPWRbWl0sdj1EKnRoaXMuY3VycmVudEZpbGxEYXRhLmN5Y2xlTGVuZ3RoLGYoTSx2KSlzd2l0Y2goaCl7Y2FzZSJ1cCI6dGhpcy5wbHVnaW4u''@;'; put 'put ''bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LXYscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJkb3duIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3crdixyb3dzcGFu''@;'; put 'put ''Ok0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImxlZnQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyxyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wtdixjb2xzcGFuOk0uY29sc3Bhbn0sITApO2Jy''@;'; put 'put ''ZWFrO2Nhc2UicmlnaHQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyxyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wrdixjb2xzcGFuOk0uY29sc3Bhbn0sITApfVo9PT1kLmxlbmd0aC0xJiYoRCs9MSl9fXdoaWxlKGYoTSx2KSk7dGhpcy5jdXJy''@;'; put 'put ''ZW50RmlsbERhdGE9bnVsbCx0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGwpe2NvbnN0IGE9e21pbjpudWxsLG1heDpudWxsfSxkPXttaW46bnVsbCxtYXg6bnVsbH07cmV0''@;'; put 'put ''dXJuIFluKGwsaD0+e2NvbnN0IGY9aFswXSx2PXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaFsxXSk7KG51bGw9PT1hLm1pbnx8ZjxhLm1pbikmJihhLm1pbj1mKSwobnVsbD09PWEubWF4fHxmPmEubWF4KSYmKGEubWF4PWYpLChudWxsPT09ZC5taW58fHY8ZC5taW4pJiYoZC5taW49diks''@;'; put 'put ''KG51bGw9PT1kLm1heHx8dj5kLm1heCkmJihkLm1heD12KX0pLHtmcm9tOntyb3c6YS5taW4sY29sdW1uOmQubWlufSx0bzp7cm93OmEubWF4LGNvbHVtbjpkLm1heH19fWRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmdldERyYWdBcmVhKGwsYSxkKSxb''@;'; put 'put ''Zix2LE0sRF09aCxaPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLHJlPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhNLEQpLGNlPXRoaXMucGx1Z2luLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKFosWixyZSk7aWYoMD09PXRoaXMubWVyZ2VkQ2VsbHNDb2xs''@;'; put 'put ''ZWN0aW9uLmdldFdpdGhpblJhbmdlKGNlLCEwKS5sZW5ndGgpcmV0dXJuITE7Y29uc3QgRWU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoY2UsITEpO3JldHVybiAwPT09RWUubGVuZ3RofHwoInVwIj09PWR8fCJkb3duIj09PWQ/IUVlLmV2ZXJ5KEJlPT57bGV0''@;'; put 'put ''e2NvbHNwYW46cWV9PUJlO3JldHVybiBxZT09PWNlLmdldFdpZHRoKCl9KTohRWUuZXZlcnkoQmU9PntsZXR7cm93c3BhbjpxZX09QmU7cmV0dXJuIHFlPT09Y2UuZ2V0SGVpZ2h0KCl9KSl9fTtmdW5jdGlvbiBHUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbTN0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIHYzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgeTN0PWNsYXNzIGIzdHtjb25zdHJ1Y3RvcihsKXtHUSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksR1EodGhpcywiaG90Iix2b2lkIDApLEdRKHRoaXMsImZ1bGx5''@;'; put 'put ''U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lIiwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwiKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90fWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBmPU1hdGgubWluKGRbMF0sZFsyXSksdj1NYXRoLm1pbihk''@;'; put 'put ''WzFdLGRbM10pLE09TWF0aC5tYXgoZFswXSxkWzJdKSxEPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKSlyZXR1cm47Y29uc3QgcmU9dGhpcy5wbHVnaW4u''@;'; put 'put ''bWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFyZSlyZXR1cm47Y29uc3QgY2U9cmUuZ2V0TGFzdFJvdygpLGJlPXJlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9cmUucm93JiZ2PD1yZS5jb2wmJk0+PWNlJiZEPj1iZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxs''@;'; put 'put ''Q2xhc3NOYW1lfS0ke2h9YDp0aGlzLmlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChyZSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlTZWxl''@;'; put 'put ''Y3RlZChsLGEpe2NvbnN0IGQ9W107aWYoIWF8fCFsKXJldHVybiExO2ZvcihsZXQgaD0wO2g8bC5yb3dzcGFuO2grPTEpZm9yKGxldCBmPTA7ZjxsLmNvbHNwYW47Zis9MSlkLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3craCxsLmNvbCtmKSk7Zm9yKGxldCBoPTA7aDxk''@;'; put 'put ''Lmxlbmd0aDtoKz0xKXtjb25zdCBmPVtdO2ZvcihsZXQgdj0wO3Y8YS5sZW5ndGg7dis9MSlmW3ZdPWFbdl0uaW5jbHVkZXMoZFtoXSk7aWYoIWYuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3QgbD1b''@;'; put 'put ''XTtmb3IobGV0IGE9MDthPD03O2ErPTEpbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7YX1gKTtyZXR1cm4gbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYCksbH19O2Z1bmN0aW9uIGhBKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3M3QoYyl7dmFyIGw9ZnVuY3Rpb24gQzN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBibWV7Y29uc3RydWN0b3IobCl7aEEodGhpcywiZGF0YSIsdm9pZCAwKSxoQSh0aGlz''@;'; put 'put ''LCJuZXh0IixudWxsKSxoQSh0aGlzLCJwcmV2IixudWxsKSx0aGlzLmRhdGE9bH19Y29uc3QgeEg9Y2xhc3MgUzN0e2NvbnN0cnVjdG9yKCl7aEEodGhpcywiZmlyc3QiLG51bGwpLGhBKHRoaXMsImxhc3QiLG51bGwpfXB1c2gobCl7Y29uc3QgYT1uZXcgYm1lKGwpO2lmKG51bGw9PT10aGlz''@;'; put 'put ''LmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5sYXN0O3RoaXMubGFzdD1hLGEucHJldj1kLGQubmV4dD1hfXJldHVybiBhfXVuc2hpZnQobCl7Y29uc3QgYT1uZXcgYm1lKGwpO2lmKG51bGw9PT10aGlzLmZpcnN0KXRoaXMuZmlyc3Q9YSx0aGlzLmxh''@;'; put 'put ''c3Q9YTtlbHNle2NvbnN0IGQ9dGhpcy5maXJzdDt0aGlzLmZpcnN0PWEsYS5uZXh0PWQsZC5wcmV2PWF9fWlub3JkZXIobCl7bGV0IGE9dGhpcy5maXJzdDtmb3IoO2E7KXtjb25zdCBkPWwoYSk7aWYoYT09PXRoaXMubGFzdHx8ITA9PT1kKWJyZWFrO2E9YS5uZXh0fX1yZW1vdmUobCl7aWYo''@;'; put 'put ''bnVsbD09PXRoaXMuZmlyc3QpcmV0dXJuITE7bGV0IGQsaCxhPXRoaXMuZmlyc3Q7Zm9yKDthOyl7aWYoYS5kYXRhPT09bClyZXR1cm4gZD1hLm5leHQsaD1hLnByZXYsZCYmKGQucHJldj1oKSxoJiYoaC5uZXh0PWQpLGE9PT10aGlzLmZpcnN0JiYodGhpcy5maXJzdD1kKSxhPT09dGhpcy5s''@;'; put 'put ''YXN0JiYodGhpcy5sYXN0PWgpLCEwO2E9YS5uZXh0fXJldHVybiExfWhhc0N5Y2xlKCl7bGV0IGw9dGhpcy5maXJzdCxhPXRoaXMuZmlyc3Q7Zm9yKDs7KXtpZihudWxsPT09bHx8KGw9bC5uZXh0LG51bGw9PT1sKSlyZXR1cm4hMTtpZihsPWwubmV4dCxhPWEubmV4dCxsPT09YSlyZXR1cm4h''@;'; put 'put ''MH19cG9wKCl7aWYobnVsbD09PXRoaXMubGFzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMubGFzdDtyZXR1cm4gdGhpcy5sYXN0PXRoaXMubGFzdC5wcmV2LGx9c2hpZnQoKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuZmlyc3Q7cmV0dXJuIHRoaXMu''@;'; put 'put ''Zmlyc3Q9dGhpcy5maXJzdC5uZXh0LGx9cmVjdXJzaXZlUmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0KXJldHVybjsoZnVuY3Rpb24gbChkLGgpe2gmJihsKGgsaC5uZXh0KSxoLm5leHQ9ZCl9KSh0aGlzLmZpcnN0LHRoaXMuZmlyc3QubmV4dCksdGhpcy5maXJzdC5uZXh0PW51bGw7Y29uc3Qg''@;'; put 'put ''YT10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9dGhpcy5sYXN0LHRoaXMubGFzdD1hfXJldmVyc2UoKXtpZighdGhpcy5maXJzdHx8IXRoaXMuZmlyc3QubmV4dClyZXR1cm47bGV0IGQsbD10aGlzLmZpcnN0Lm5leHQsYT10aGlzLmZpcnN0O2Zvcig7bDspZD1sLm5leHQsbC5uZXh0PWEsYS5wcmV2''@;'; put 'put ''PWwsYT1sLGw9ZDt0aGlzLmZpcnN0Lm5leHQ9bnVsbCx0aGlzLmxhc3QucHJldj1udWxsLGQ9dGhpcy5maXJzdCx0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWR9fTtmdW5jdGlvbiB6OShjLGwsYSl7eW1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB5bWUoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHZsKGMsbCl7cmV0dXJuIGMuZ2V0KEVIKGMsbCkpfWZ1bmN0aW9uIHpoKGMsbCxhKXtyZXR1cm4gYy5zZXQoRUgoYyxsKSxhKSxh''@;'; put 'put ''fWZ1bmN0aW9uIEVIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgWHA9''@;'; put 'put ''bmV3IFdlYWtNYXAsSnA9bmV3IFdlYWtNYXAsUXA9bmV3IFdlYWtNYXAsZTQ9bmV3IFdlYWtNYXAsJFE9bmV3IFdlYWtNYXAsVEg9bmV3IFdlYWtNYXAsQUg9bmV3IFdlYWtNYXAsS1E9bmV3IFdlYWtTZXQ7Y2xhc3MgeDN0e2NvbnN0cnVjdG9yKGwpe2xldHttZXJnZWRDZWxsc0dldHRlcjph''@;'; put 'put ''LHJvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09bDsoZnVuY3Rpb24gTTN0KGMsbCl7eW1lKGMsbCksbC5hZGQoYyl9KSh0aGlzLEtRKSx6OSh0aGlzLFhwLG5ldyB4SCksejkodGhpcyxKcCxuZXcgeEgpLHo5KHRoaXMsUXAsbnVsbCksejkodGhpcyxlNCxudWxsKSx6OSh0''@;'; put 'put ''aGlzLCRRLG51bGwpLHo5KHRoaXMsVEgsbnVsbCksejkodGhpcyxBSCxudWxsKSx6aCgkUSx0aGlzLGEpLHpoKFRILHRoaXMsZCksemgoQUgsdGhpcyxoKX1nZXRDdXJyZW50VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKGU0LHRoaXMpLmRhdGF9Z2V0Rmlyc3RWZXJ0aWNhbE5vZGUoKXtyZXR1''@;'; put 'put ''cm4gdmwoSnAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKGU0LHRoaXMpLm5leHQuZGF0YX1nZXRQcmV2VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKGU0LHRoaXMpLnByZXYuZGF0YX1nZXRDdXJyZW50SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwo''@;'; put 'put ''UXAsdGhpcykuZGF0YX1nZXRGaXJzdEhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFhwLHRoaXMpLmZpcnN0LmRhdGF9Z2V0TmV4dEhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFFwLHRoaXMpLm5leHQuZGF0YX1nZXRQcmV2SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoUXAsdGhpcyku''@;'; put 'put ''cHJldi5kYXRhfXNldFByZXZOb2RlQXNBY3RpdmUoKXt6aChlNCx0aGlzLHZsKGU0LHRoaXMpLnByZXYpLHpoKFFwLHRoaXMsdmwoUXAsdGhpcykucHJldil9c2V0TmV4dE5vZGVBc0FjdGl2ZSgpe3poKGU0LHRoaXMsdmwoZTQsdGhpcykubmV4dCksemgoUXAsdGhpcyx2bChRcCx0aGlzKS5u''@;'; put 'put ''ZXh0KX1idWlsZEZvY3VzT3JkZXIobCl7Y29uc3QgYT1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZD1sLmdldEJvdHRvbUVuZENvcm5lcigpLGg9bmV3IFdlYWtTZXQ7emgoWHAsdGhpcyxuZXcgeEgpO2ZvcihsZXQgdj1hLnJvdzt2PD1kLnJvdzt2KyspaWYoIXZsKFRILHRoaXMpLmlzSGlkZGVu''@;'; put 'put ''KHYpKWZvcihsZXQgTT1hLmNvbDtNPD1kLmNvbDtNKyspe2lmKHZsKEFILHRoaXMpLmlzSGlkZGVuKE0pKWNvbnRpbnVlO2NvbnN0IEQ9RUgoS1EsdGhpcyxfbWUpLmNhbGwodGhpcyxsLHZsKFhwLHRoaXMpLGgsdixNKTtEJiZ6aChRcCx0aGlzLEQpfXZsKFhwLHRoaXMpLmZpcnN0JiYodmwo''@;'; put 'put ''WHAsdGhpcykuZmlyc3QucHJldj12bChYcCx0aGlzKS5sYXN0LHZsKFhwLHRoaXMpLmxhc3QubmV4dD12bChYcCx0aGlzKS5maXJzdCk7Y29uc3QgZj1uZXcgV2Vha1NldDt6aChKcCx0aGlzLG5ldyB4SCk7Zm9yKGxldCB2PWEuY29sO3Y8PWQuY29sO3YrKylpZighdmwoQUgsdGhpcykuaXNI''@;'; put 'put ''aWRkZW4odikpZm9yKGxldCBNPWEucm93O008PWQucm93O00rKyl7aWYodmwoVEgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgRD1FSChLUSx0aGlzLF9tZSkuY2FsbCh0aGlzLGwsdmwoSnAsdGhpcyksZixNLHYpO0QmJnpoKGU0LHRoaXMsRCl9dmwoSnAsdGhpcykuZmlyc3Qm''@;'; put 'put ''Jih2bChKcCx0aGlzKS5maXJzdC5wcmV2PXZsKEpwLHRoaXMpLmxhc3QsdmwoSnAsdGhpcykubGFzdC5uZXh0PXZsKEpwLHRoaXMpLmZpcnN0KX1zZXRBY3RpdmVOb2RlKGwsYSl7cmV0dXJuIHZsKFhwLHRoaXMpLmlub3JkZXIoZD0+e2NvbnN0e3Jvd1N0YXJ0Omgscm93RW5kOmYsY29sU3Rh''@;'; put 'put ''cnQ6dixjb2xFbmQ6TX09ZC5kYXRhO2lmKGw+PWgmJmw8PWYmJmE+PXYmJmE8PU0pcmV0dXJuIHpoKFFwLHRoaXMsZCksITF9KSx2bChKcCx0aGlzKS5pbm9yZGVyKGQ9Pntjb25zdHtyb3dTdGFydDpoLHJvd0VuZDpmLGNvbFN0YXJ0OnYsY29sRW5kOk19PWQuZGF0YTtpZihsPj1oJiZsPD1m''@;'; put 'put ''JiZhPj12JiZhPD1NKXJldHVybiB6aChlNCx0aGlzLGQpLCExfSksdGhpc319ZnVuY3Rpb24gX21lKGMsbCxhLGQsaCl7Y29uc3QgZj1jLmdldFRvcFN0YXJ0Q29ybmVyKCksdj1jLmdldEJvdHRvbUVuZENvcm5lcigpLE09Yy5oaWdobGlnaHQuY2xvbmUoKS5ub3JtYWxpemUoKSxEPXZsKCRR''@;'; put 'put ''LHRoaXMpLmNhbGwodGhpcyxkLGgpO2lmKEQmJmEuaGFzKEQpKXJldHVybiBudWxsO2NvbnN0IFo9e2NvbFN0YXJ0OmgsY29sRW5kOmgscm93U3RhcnQ6ZCxyb3dFbmQ6ZH07aWYoRCl7aWYoYS5hZGQoRCksRC5yb3c8Zi5yb3d8fEQucm93K0Qucm93c3Bhbi0xPnYucm93fHxELmNvbDxmLmNv''@;'; put 'put ''bHx8RC5jb2wrRC5jb2xzcGFuLTE+di5jb2wpcmV0dXJuIG51bGw7Wi5jb2xTdGFydD1ELmNvbCxaLmNvbEVuZD1ELmNvbCtELmNvbHNwYW4tMSxaLnJvd1N0YXJ0PUQucm93LFoucm93RW5kPUQucm93K0Qucm93c3Bhbi0xfWNvbnN0IHJlPWwucHVzaChaKTtyZXR1cm4gZD09PU0ucm93JiZo''@;'; put 'put ''PT09TS5jb2x8fEQmJk0ucm93Pj1ELnJvdyYmTS5yb3c8PUQucm93K0Qucm93c3Bhbi0xJiZNLmNvbD49RC5jb2wmJk0uY29sPD1ELmNvbCtELmNvbHNwYW4tMT9yZTpudWxsfWZ1bmN0aW9uIHdtZShjLGwsYSl7Y29uc3R7dmlldzpkLHJvd0luZGV4TWFwcGVyOmh9PWMsZj1kLmdldFN0eWxl''@;'; put 'put ''c0hhbmRsZXIoKSx2PWQuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBNPTA7Zm9yKGxldCBaPWw7WjxsK2E7WisrKWlmKCFoLmlzSGlkZGVuKFopKXt2YXIgRDtNKz1udWxsIT09KEQ9Yy5nZXRSb3dIZWlnaHQoWikpJiZ2b2lkIDAhPT1EP0Q6diwwPT09WiYmIWYuaXNDbGFzc2ljVGhlbWUo''@;'; put 'put ''KSYmKE0rPTEpfXJldHVybiBNfWZ1bmN0aW9uIGtIKGMsbCxhKXtDbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIENtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9ZnVuY3Rpb24gcVEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEEzdChjKXt2YXIgbD1mdW5jdGlvbiBrM3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh''@;'; put 'put ''bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu''@;'; put 'put ''ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGZBKGMsbCxhKXtyZXR1cm4gYy5zZXQo''@;'; put 'put ''a2woYyxsKSxhKSxhfWZ1bmN0aW9uIHRjKGMsbCl7cmV0dXJuIGMuZ2V0KGtsKGMsbCkpfWZ1bmN0aW9uIGtsKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2''@;'; put 'put ''YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlTWVyZ2VDZWxscyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck1lcmdlQ2VsbHMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3Rlcigi''@;'; put 'put ''YmVmb3JlVW5tZXJnZUNlbGxzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5tZXJnZUNlbGxzIik7Y29uc3QgWFE9Im1lcmdlQ2VsbHMiLFNtZT1YUTt2YXIgUTI9bmV3IFdlYWtNYXAsZWY9bmV3IFdlYWtNYXAsdDQ9bmV3IFdlYWtNYXAsTW1lPW5ldyBXZWFrTWFwLFZs''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzIEkzdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBUM3QoYyxsKXtDbWUoYyxsKSxsLmFkZChjKX0odGhpcyxWbCkscVEodGhpcywibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uIixudWxsKSxxUSh0aGlzLCJhdXRv''@;'; put 'put ''ZmlsbENhbGN1bGF0aW9ucyIsbnVsbCkscVEodGhpcywic2VsZWN0aW9uQ2FsY3VsYXRpb25zIixudWxsKSxrSCh0aGlzLFEyLG51bGwpLGtIKHRoaXMsZWYse3JvdzowLGNvbDowfSksa0godGhpcyx0NCxuZXcgeDN0KHttZXJnZWRDZWxsc0dldHRlcjoobCxhKT0+dGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24uZ2V0KGwsYSkscm93SW5kZXhNYXBwZXI6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXJ9KSksa0godGhpcyxNbWUsZnVuY3Rpb24gRTN0KGMpe2NvbnN0e2hvdDpsfT1jLHtyb3dJbmRleE1hcHBl''@;'; put 'put ''cjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWwsaD1uZXcgTWFwO3JldHVybntiZWZvcmU6ZnVuY3Rpb24gZigpe30sYWZ0ZXI6ZnVuY3Rpb24gdihNLEQsWil7Y29uc3QgcmU9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KEQsWik7aWYoIXFvKHJlKSlyZXR1cm4gTS5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFRFKCkmJmguaGFzKEQpJiYhbC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMmJihNLnN0eWxlLmhlaWdodD1gJHtoLmdldChEKX1weGAsaC5kZWxldGUoRCkpLHZvaWQoTS5zdHlsZS5kaXNwbGF5PSIiKTtjb25zdHty''@;'; put 'put ''b3c6Y2UsY29sOmJlLGNvbHNwYW46RWUscm93c3BhbjpCZX09cmUsW3FlLHJ0XT1jLnRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUoY2UsQmUsYmUsRWUpLHB0PWMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKTtpZihURSgpJiYwPT09YmUmJiFsLmdldFNldHRpbmdzKCkucm93SGVh''@;'; put 'put ''ZGVycyl7Y29uc3QgbXI9d21lKGwsY2UsQmUpO2guc2V0KEQsbXIvQmUpfWNvbnN0IHZuPXFlLWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChEKSsxLENuPXJ0LWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaKSsxO2xldCB0bj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRl''@;'; put 'put ''eChjZSwxKSxNbj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChiZSwxKTtpZihwdCl7Y29uc3QgbXI9bC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCk7WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG1yKXx8KHRuPU1hdGgubWF4KHRuLGwuZ2V0Rmlyc3RS''@;'; put 'put ''ZW5kZXJlZFZpc2libGVSb3coKSkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG1yKXx8KE1uPU1hdGgubWF4KE1uLGwuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkpfWNvbnN0''@;'; put 'put ''IHdyPU1hdGgubWluKEJlLHZuKSxHcj1NYXRoLm1pbihFZSxDbik7dG49PT1EJiZNbj09PVo/KE0uc2V0QXR0cmlidXRlKCJyb3dzcGFuIix3ciksTS5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLEdyKSk6KE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUoImNv''@;'; put 'put ''bHNwYW4iKSxNLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fSh0aGlzKSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFhRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE1MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57W3k0ZV06ImNlbGxz''@;'; put 'put ''Iix2aXJ0dWFsaXplZDohMSxjZWxsczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1hRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPW5ldyBkM3QodGhpcyksdGhpcy5hdXRv''@;'; put 'put ''ZmlsbENhbGN1bGF0aW9ucz1uZXcgZzN0KHRoaXMpLHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zPW5ldyB5M3QodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto''@;'; put 'put ''XT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsUjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRz''@;'; put 'put ''W2hdO3JldHVybiBrbChWbCxsLE8zdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g''@;'; put 'put ''a2woVmwsbCxQM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLEYzdCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsSDN0KS5jYWxs''@;'; put 'put ''KGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsRW1lKS5jYWxsKGwsLi4uZCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLEVtZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxWM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJTZWxlY3Rpb25Gb2N1c1NldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxCM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rp''@;'; put 'put ''b25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsajN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUdldENlbGxDb29yZHMiLGZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwseG1lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwseG1lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxMM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gdGMoTW1lLGwpLmFmdGVyKC4uLmFy''@;'; put 'put ''Z3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxOM3QpLmNhbGwo''@;'; put 'put ''bCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCx6M3QpLmNhbGwobCwuLi5kKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxVM3QpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxaM3QpLmNhbGwobCwuLi5k''@;'; put 'put ''KX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxXM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsWTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3Zl''@;'; put 'put ''Q29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLEczdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCwkM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsSzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5''@;'; put 'put ''KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHEzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcmF3Qm9yZGVycyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxYM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l''@;'; put 'put ''bnRzW2hdO3JldHVybiBrbChWbCxsLEozdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1to''@;'; put 'put ''XTtyZXR1cm4ga2woVmwsbCxRM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQmVnaW5FZGl0aW5nIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChW''@;'; put 'put ''bCxsLGVwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxs''@;'; put 'put ''LHRwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLChhLGQpPT57aWYoIk1lcmdlQ2VsbHMiPT09ZClyZXR1cm4hMX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMu''@;'; put 'put ''Y2xlYXJDb2xsZWN0aW9ucygpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LnJlbmRlcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZ2VuZXJhdGVGcm9tU2V0dGlu''@;'; put 'put ''Z3MoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1pZkNocm9tZUZvcmNlUmVwYWludCgpe2lmKCFJJCgpKXJldHVybjtjb25zdCBsPVtdO2xldCBhPVtdO3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmZvckVhY2goZD0+e2NvbnN0e3JvdzpoLHJvd3NwYW46Zn09ZDtmb3Io''@;'; put 'put ''bGV0IHY9aCsxO3Y8aCtmO3YrKylhLnB1c2godil9KSxhPVsuLi5uZXcgU2V0KGEpXSxhLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkKTt0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJs''@;'; put 'put ''YXlzKCEwKS5tYXAoZj0+Im1hc3RlciI9PT1mPy5uYW1lP2Y6Zi5jbG9uZS53dFRhYmxlKS5mb3JFYWNoKGY9Pntjb25zdCB2PWYuZ2V0Um93KGgpO3YmJih2LnN0eWxlLmJhY2tncm91bmQ9eUUodiwiYmFja2dyb3VuZENvbG9yIikucmVwbGFjZSgiKSIsIiwgMC45OSkiKSxsLnB1c2godikp''@;'; put 'put ''fSl9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bC5mb3JFYWNoKGQ9Pnt2YXIgaDtkLnN0eWxlLmJhY2tncm91bmQ9bnVsbD09PShoPXlFKGQsImJhY2tncm91bmRDb2xvciIpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5yZXBsYWNlKCIsIDAuOTkpIiwiKSIpfSl9LDEpfXZhbGlk''@;'; put 'put ''YXRlU2V0dGluZyhsKXtyZXR1cm4hKCFsfHwocXAuY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8oaWwocXAuTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCkpLDEpOnFwLmlzT3V0T2ZCb3VuZHMobCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KGlsKHFwLklT''@;'; put 'put ''X09VVF9PRl9CT1VORFNfV0FSTklORyhsKSksMSk6cXAuaXNTaW5nbGVDZWxsKGwpPyhpbChxcC5JU19TSU5HTEVfQ0VMTChsKSksMSk6cXAuY29udGFpbnNaZXJvU3BhbihsKSYmKGlsKHFwLlpFUk9fU1BBTl9XQVJOSU5HKGwpKSwxKSkpfWdlbmVyYXRlRnJvbVNldHRpbmdzKCl7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmdldFNldHRpbmcoImNlbGxzIikuZmlsdGVyKGg9PnRoaXMudmFsaWRhdGVTZXR0aW5nKGgpKSxhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKSxkPVtdO2EuZm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYscm93c3Bh''@;'; put 'put ''bjpNLGNvbHNwYW46RH09aCxaPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdikscmU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZitNLTEsditELTEpLGNlPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoWixaLHJlKTt0aGlzLm1lcmdlUmFuZ2UoY2UsITAsITApO2ZvcihsZXQg''@;'; put 'put ''YmU9ZjtiZTxmK007YmUrKylmb3IobGV0IEVlPXY7RWU8ditEO0VlKyspKGJlIT09Znx8RWUhPT12KSYmZC5wdXNoKFtiZSxFZSxudWxsXSl9KSwwIT09ZC5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwoZCx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSl9Y2xlYXJDb2xsZWN0''@;'; put 'put ''aW9ucygpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcobCl9bWVyZ2VTZWxlY3Rpb24o''@;'; put 'put ''KXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zy''@;'; put 'put ''b206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMubWVyZ2VSYW5nZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFu''@;'; put 'put ''Z2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJv''@;'; put 'put ''dHRvbUVuZENvcm5lcigpLHY9e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNwYW46Zi5jb2wtaC5jb2wrMX0sTT1bXTtsZXQgRD1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJhbmdlKHYsYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VD''@;'; put 'put ''ZWxscyIsbCxhKSxHYSgwLHYucm93c3Bhbi0xLHJlPT57R2EoMCx2LmNvbHNwYW4tMSxjZT0+e2xldCBiZT1udWxsO01bcmVdfHwoTVtyZV09W10pLDA9PT1yZSYmMD09PWNlP2JlPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2LnJvdyksdGhp''@;'; put 'put ''cy5ob3QudG9QaHlzaWNhbENvbHVtbih2LmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKHYucm93K3JlLHYuY29sK2NlLCJoaWRkZW4iLCEwKSxNW3JlXVtjZV09YmV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKHYucm93LHYuY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHND''@;'; put 'put ''b2xsZWN0aW9uLmFkZCh2LGEpfHwoZD9EPVt2LnJvdyx2LmNvbCxNXTp0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2LnJvdyx2LmNvbCxNLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKSxhfHx0aGlzLmlmQ2hyb21lRm9yY2VSZXBhaW50KCksdGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyTWVyZ2VDZWxscyIsbCx2LGEpLEQpKX11bm1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGwpOzAhPT1kLmxl''@;'; put 'put ''bmd0aCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGwsYSksWW4oZCxoPT57dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ucmVtb3ZlKGgucm93LGguY29sKSxHYSgwLGgucm93c3Bhbi0xLGY9PntHYSgwLGguY29sc3Bhbi0xLHY9Pnt0aGlzLmhvdC5yZW1vdmVD''@;'; put 'put ''ZWxsTWV0YShoLnJvdytmLGguY29sK3YsImhpZGRlbiIpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrdiwiY29weWFibGUiKX0pfSksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3csaC5jb2wsInNwYW5uZWQiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVu''@;'; put 'put ''bWVyZ2VDZWxscyIsbCxhKSx0aGlzLmhvdC5yZW5kZXIoKSl9dG9nZ2xlTWVyZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PWwuY2xvbmUoKS5ub3JtYWxpemUoKSxoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aC5yb3c9PT1hLnJvdyYmaC5jb2w9PT1hLmNv''@;'; put 'put ''bCYmaC5yb3craC5yb3dzcGFuLTE9PT1kLnJvdyYmaC5jb2wraC5jb2xzcGFuLTE9PT1kLmNvbD90aGlzLnVubWVyZ2VSYW5nZShsKTp0aGlzLm1lcmdlU2VsZWN0aW9uKGwpfW1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLHYpKX11bm1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7''@;'; put 'put ''dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJtIl1dLGNhbGxiYWNr''@;'; put 'put ''OigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2QmJiFkLmlzU2luZ2xlSGVhZGVyKCkmJih0aGlzLnRvZ2dsZU1lcmdlKGQpLHRoaXMuaG90LnJlbmRlcigpKX0scnVuT25seUlmOmQ9PiFkLmFsdEtleSxncm91cDpTbWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRz''@;'; put 'put ''KCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU21lKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChsLnN0YXJ0Um93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZihxbyh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5y''@;'; put 'put ''b3csMSkpO2lmKE08bC5zdGFydFJvdylyZXR1cm4gbC5zdGFydFJvdz1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXgobC5lbmRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHFvKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJv''@;'; put 'put ''dyt2LnJvd3NwYW4tMSwtMSkpO2lmKEQ+bC5lbmRSb3cpcmV0dXJuIGwuZW5kUm93PUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0Vmlz''@;'; put 'put ''dWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZihxbyh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgodi5jb2wsMSkpO2lmKE08bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHFvKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCt2LmNvbHNwYW4tMSwtMSkpO2lmKEQ+bC5lbmRDb2x1bW4pcmV0dXJuIGwuZW5kQ29sdW1uPUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxl''@;'; put 'put ''KGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3Q7bGV0IE0sRDtyZXR1cm4gTT0wPT09YT9mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxEPTA9PT1oP3Yu''@;'; put 'put ''Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk6di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNKTpsLGQ+PTA/di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpOmRdfX1mdW5jdGlvbiBSM3Qo''@;'; put 'put ''KXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKCksdGhpcy5ob3QucmVuZGVyKCl9ZnVuY3Rpb24gTDN0KGMpe2lmKGMpe2NvbnN0IGw9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpLGg9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrPTEpaWYoZC5yb3c9PT1sW2ZdLnJvdyYmZC5jb2w9PT1sW2ZdLmNvbCYmaC5yb3c9PT1sW2ZdLnJvdytsW2ZdLnJvd3NwYW4tMSYmaC5jb2w9PT1sW2ZdLmNvbCtsW2ZdLmNvbHNwYW4t''@;'; put 'put ''MSlyZXR1cm4hMX1yZXR1cm4gY31mdW5jdGlvbiBPM3QoYyl7dGMoZWYsdGhpcykucm93PWMucm93LHRjKGVmLHRoaXMpLmNvbD1jLmNvbH1mdW5jdGlvbiBQM3QoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdobGlnaHQ6YX09bCx7Y29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10aGlzLmhvdDt0YyhRMix0aGlzKSYmKG51bGwhPT1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGMoUTIsdGhpcykucm93KSYmKGEucm93PXRjKFEyLHRoaXMpLnJvdyksbnVsbCE9PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl''@;'; put 'put ''eCh0YyhRMix0aGlzKS5jb2wpJiYoYS5jb2w9dGMoUTIsdGhpcykuY29sKSxmQShRMix0aGlzLG51bGwpKTtjb25zdCBmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5jb2wsTT1mLmNvbCtmLmNvbHNwYW4tMTtpZihj''@;'; put 'put ''LmNvbDwwKXtjb25zdCBjZT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLmNvbD49diYmYS5jb2w8PU0/di0xOk0sLTEpO2MuY29sPW51bGw9PT1jZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGEuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmll''@;'; put 'put ''dy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShjZSxhLmNvbCktMSwxKX1lbHNlIGlmKGMuY29sPjApe2NvbnN0IGNlPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT9NKzE6diwxKTtjLmNvbD1udWxsPT09Y2U/dGhpcy5ob3Qudmlldy5jb3VudFJl''@;'; put 'put ''bmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCxjZSktMSwxKX1jb25zdCBEPWYucm93LFo9Zi5yb3crZi5yb3dzcGFuLTE7aWYoYy5yb3c8MCl7''@;'; put 'put ''Y29uc3QgY2U9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1aP0QtMTpaLC0xKTtjLnJvdz1udWxsPT09Y2U/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxhLnJvdyk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5k''@;'; put 'put ''ZXJhYmxlUm93c0luUmFuZ2UoY2UsYS5yb3cpLTEsMSl9ZWxzZSBpZihjLnJvdz4wKXtjb25zdCBjZT1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49RCYmYS5yb3c8PVo/WisxOkQsMSk7Yy5yb3c9bnVsbD09PWNlP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0lu''@;'; put 'put ''UmFuZ2UoYS5yb3csdGhpcy5ob3QuY291bnRSb3dzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYS5yb3csY2UpLTEsMSl9fWZ1bmN0aW9uIEYzdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sLmNsb25l''@;'; put 'put ''KCkse3RvOmR9PWwse2NvbHVtbkluZGV4TWFwcGVyOmgscm93SW5kZXhNYXBwZXI6Zn09dGhpcy5ob3Qsdj0oTSxEKT0+e2EuZXhwYW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCkpO2ZvcihsZXQgWj0wO1o8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMu''@;'; put 'put ''bGVuZ3RoO1orPTEpYS5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW1pdLmdldFJhbmdlKCkpfTtpZihjLmNvbDwwKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGQuY29sKStjLmNv''@;'; put 'put ''bDt2KGQucm93LE0pLCJFLVciPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJiJFLVciPT09YS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJihNPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wpO2NvbnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKTtudWxsIT09RCYm''@;'; put 'put ''KGMuY29sPS1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKEQsZC5jb2wpLTEsMSkpfWVsc2UgaWYoYy5jb2w+MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0RW5kTW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3Yo''@;'; put 'put ''ZC5yb3csTSksIlctRSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIlctRSI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wpO2NvbnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihj''@;'; put 'put ''LmNvbD1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGQuY29sLEQpLTEsMSkpfWlmKGMucm93PDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFRvcE1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJT''@;'; put 'put ''LU4iPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiUy1OIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYoYy5yb3c9LU1hdGgubWF4KHRo''@;'; put 'put ''aXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoRCxkLnJvdyktMSwxKSl9ZWxzZSBpZihjLnJvdz4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxkLnJvdykrYy5yb3c7dihNLGQuY29sKSwiTi1TIj09PWwuZ2V0''@;'; put 'put ''VmVydGljYWxEaXJlY3Rpb24oKSYmIk4tUyI9PT1hLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJihNPWEuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cpO2NvbnN0IEQ9Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLnJvdz1NYXRoLm1heCh0aGlzLmhvdC52''@;'; put 'put ''aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGQucm93LEQpLTEsMSkpfX1mdW5jdGlvbiBIM3QoKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpsfT1jO2lmKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIo''@;'; put 'put ''KXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKXJldHVybiB2b2lkIGZBKFEyLHRoaXMsbC5jbG9uZSgpKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlz''@;'; put 'put ''Lm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJn''@;'; put 'put ''ZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7ZkEoUTIsdGhpcyxsLmNsb25lKCkpLGEmJmwuYXNzaWduKGEpfWZ1bmN0aW9uIHhtZShjLGwsYSxkKXtpZihjPDB8fGw8MClyZXR1cm47Y29uc3QgaD10''@;'; put 'put ''aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtpZighaClyZXR1cm47Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aCxaPWYscmU9dixjZT1mK0QtMSxiZT12K00tMTtpZigicmVuZGVyIj09PWQmJnRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSl7''@;'; put 'put ''Y29uc3QgRWU9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLEJlPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhFZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLHFlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGlu''@;'; put 'put ''ZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7cmV0dXJuW2tzKEJlLFosY2UpLGtzKHFlLHJlLGJlKSxrcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNp''@;'; put 'put ''YmxlUm93KCksWixjZSksa3ModGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLHJlLGJlKV19cmV0dXJuW1oscmUsY2UsYmVdfWZ1bmN0aW9uIE4zdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIF8zdChjKXtyZXR1cm57a2V5OiJtZXJn''@;'; put 'put ''ZUNlbGxzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2lmKGwpe2NvbnN0IGE9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGxbMF0sbFsxXSk7aWYoYS5yb3c9PT1sWzBdJiZhLmNvbD09PWxbMV0mJmEucm93K2Eucm93c3Bhbi0xPT09bFsyXSYmYS5jb2wrYS5j''@;'; put 'put ''b2xzcGFuLTE9PT1sWzNdKXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoY3EpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobHEpfSxjYWxsYmFjaygpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0''@;'; put 'put ''aGlzLmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDtjLnRvZ2dsZU1lcmdlKGwpLHRoaXMuc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFsfHxx''@;'; put 'put ''cC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNvbDpsWzFdLHJvd3NwYW46bFsyXS1sWzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfWZ1bmN0aW9uIEVtZSgpe2ZBKFEyLHRoaXMsbnVsbCl9''@;'; put 'put ''ZnVuY3Rpb24gVjN0KCl7aWYodGMoUTIsdGhpcykuaXNDZWxsKCkpcmV0dXJuO2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsPWMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxhPWMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLGQ9dGMoUTIsdGhpcykuY2xvbmUoKS5u''@;'; put 'put ''b3JtYWxpemUoKTt0Yyh0NCx0aGlzKS5zZXRBY3RpdmVOb2RlKGQucm93LGQuY29sKSx0YyhlZix0aGlzKS5yb3c+MHx8dGMoZWYsdGhpcykuY29sPjA/dGModDQsdGhpcykuc2V0UHJldk5vZGVBc0FjdGl2ZSgpOigiRS1XIj09PWEmJnRjKGVmLHRoaXMpLmNvbDwwfHwiUy1OIj09PWwmJnRj''@;'; put 'put ''KGVmLHRoaXMpLnJvdzwwKSYmdGModDQsdGhpcykuc2V0TmV4dE5vZGVBc0FjdGl2ZSgpfWZ1bmN0aW9uIEIzdChjLGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7Y29sdW1uSW5kZXhNYXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10aGlzLmhvdDtsZXQgZj1u''@;'; put 'put ''dWxsLHY9bnVsbDtpZih0YyhlZix0aGlzKS5jb2w8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkR9PXRjKHQ0LHRoaXMpLmdldFByZXZIb3Jpem9udGFsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwtMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKX1l''@;'; put 'put ''bHNlIGlmKHRjKGVmLHRoaXMpLmNvbD4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkR9PXRjKHQ0LHRoaXMpLmdldE5leHRIb3Jpem9udGFsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwxKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSl9ZWxzZSBp''@;'; put 'put ''Zih0YyhlZix0aGlzKS5yb3c8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkR9PXRjKHQ0LHRoaXMpLmdldFByZXZWZXJ0aWNhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsLTEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSl9ZWxzZSBpZih0YyhlZix0''@;'; put 'put ''aGlzKS5yb3c+MCl7Y29uc3R7cm93U3RhcnQ6TSxjb2xTdGFydDpEfT10Yyh0NCx0aGlzKS5nZXROZXh0VmVydGljYWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELDEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1pZihudWxsIT09Znx8bnVsbCE9PXYp''@;'; put 'put ''e2NvbnN0IE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxEPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChNLnJvdyxNLmNvbCksWj10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7Yz1NLnJvdyxsPU0uY29sLGEuaGlnaGxpZ2h0LmFzc2lnbihE''@;'; put 'put ''P3tyb3c6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQucm93LDEpLGNvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRC5jb2wsMSl9Ok0pLFouY2xlYXIoKSxaLmFkZChNKS5jb21taXQoKX10Yyh0''@;'; put 'put ''NCx0aGlzKS5zZXRBY3RpdmVOb2RlKGMsbCksZkEoZWYsdGhpcyx7cm93OjAsY29sOjB9KX1mdW5jdGlvbiBqM3QoKXt0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmlzSGVhZGVyKCl8fHRjKHQ0LHRoaXMpLmJ1aWxkRm9jdXNPcmRlcih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpKX1mdW5jdGlvbiB6M3QoYyxsLGEpe2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGMsbCk7ZCYmKGQucm93IT09Y3x8ZC5jb2whPT1sP2EuY29weWFibGU9ITE6KGEucm93c3Bhbj1kLnJvd3NwYW4sYS5jb2xzcGFuPWQuY29sc3BhbikpfWZ1bmN0aW9uIFUz''@;'; put 'put ''dChjKXtpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGMsbCksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChjLGwpfWZ1bmN0aW9uIFozdChjKXtpZih0aGlzLmdl''@;'; put 'put ''dFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGMsbCksdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChjLGwpfWZ1bmN0aW9uIFczdChjLGwpe2NvbnN0IGE9dGhpcy5hdXRv''@;'; put 'put ''ZmlsbENhbGN1bGF0aW9ucy5nZXREaXJlY3Rpb24obCxjKTtpZih0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhsLGMsYSkpcmV0dXJuIGw7Y29uc3QgZD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pLGg9dGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMobFsyXSxsWzNdKSxmPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpLHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoZik7cmV0dXJuIDA9PT12Lmxlbmd0aD9jOnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERy''@;'; put 'put ''YWdBcmVhKGwsYyxhLHYpfWZ1bmN0aW9uIFkzdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInJpZ2h0IixjLGwpfWZ1bmN0aW9uIEczdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImxlZnQiLGMsbCl9''@;'; put 'put ''ZnVuY3Rpb24gJDN0KGMsbCxhKXsiYXV0byIhPT1hJiZ0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJkb3duIixjLGwpfWZ1bmN0aW9uIEszdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixjLGwpfWZ1bmN0''@;'; put 'put ''aW9uIHEzdChjLGwpeyJBdXRvZmlsbC5maWxsIj09PWwmJnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMucmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGMpfWZ1bmN0aW9uIFgzdChjLGwpe2lmKGwmJiJhcmVhIj09PWwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KTtZbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShhKSxoPT57YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c9PT1oLmdldExhc3RSb3coKSYmYS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1oLmdldExhc3RDb2x1bW4oKSYmKGNbMl09aC5yb3csY1szXT1o''@;'; put 'put ''LmNvbCl9KX19ZnVuY3Rpb24gSjN0KGMsbCxhLGQpe2lmKGEpcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShjLGwsYSxkKX1mdW5jdGlvbiBRM3QoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKX1mdW5jdGlvbiBlcHQoYyxsLGEsZCl7aWYoIShkIGluc3RhbmNlb2YgTW91c2VFdmVudCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdl''@;'; put 'put ''dEJ5UmFuZ2UoaCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csZi5jb2wpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3crZi5yb3dzcGFuLTEsZi5jb2wrZi5jb2xzcGFuLTEpO3JldHVybiAwPT09dGhpcy5ob3Quc2VsZWN0''@;'; put 'put ''aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc0VxdWFsKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pKX1mdW5jdGlvbiB0cHQoYyxsLGEpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVyc3x8ImJvdHRvbSI9PT1hfHwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIi''@;'; put 'put ''PT09YSlyZXR1cm4gYztsZXQgZCxoO2lmKCJtYXN0ZXIiPT09YSlkPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksaD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7ZWxzZXtjb25zdCBiZT10aGlzLmhvdC52aWV3LmdldE92ZXJsYXlCeU5h''@;'; put 'put ''bWUoYSk7ZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGJlLmNsb25lLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgo''@;'; put 'put ''YmUuY2xvbmUud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSl9aWYoIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGQpKXJldHVybiBjO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxkKSxNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsaCks''@;'; put 'put ''RD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKSxaPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKEQsITApLHJlPVoucmVkdWNlKChiZSxFZSk9PntsZXR7cm93c3BhbjpCZX09RWU7cmV0dXJuIE1hdGgubWF4KGJlLEJlKX0sMSk7bGV0IGNlPTA7cmV0''@;'; put 'put ''dXJuIFoubGVuZ3RoPjEmJlpbMF0ucm93c3BhbjxyZSYmKGNlPXJlLVpbMF0ucm93c3BhbiksWi5mb3JFYWNoKGJlPT57bGV0e3Jvd3NwYW46RWV9PWJlLEJlPTA7QmU9InRvcCI9PT1hfHwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiPT09YT9NYXRoLm1pbihyZSx0aGlzLmhvdC52aWV3LmNv''@;'; put 'put ''dW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCktbCk6RWUtY2UsYz1NYXRoLm1heChjPz8wLHdtZSh0aGlzLmhvdCxsLEJlKSl9KSxjfWNvbnN0IERIPSJtdWx0aUNvbHVtblNvcnRpbmciLEFtZT1ESDtaNGUoREgsZnVuY3Rpb24gbnB0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3Rb''@;'; put 'put ''LC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbiB2KE0pe2NvbnN0IEQ9Y1tNXSxaPWxbTV0scmU9aFtNXSxjZT1mW01dLGJlPVoubXVsdGlDb2x1bW5Tb3J0aW5nLEJlPShiZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5P2JlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6VzRlKFoudHlw''@;'; put 'put ''ZSkpKEQsWixiZSkocmUsY2UpO2lmKEJlPT09anApe2NvbnN0IHFlPU0rMTtpZih0eXBlb2YgbFtxZV08InUiKXJldHVybiB2KHFlKX1yZXR1cm4gQmV9KDApfX0pO2NsYXNzIGNwdCBleHRlbmRzIG41ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYXB0KGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvcHQoYyl7dmFyIGw9ZnVuY3Rpb24gc3B0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywicGx1Z2luS2V5IixESCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIERI''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE3MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3N1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGln''@;'; put 'put ''aGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuLTE9PT1sLnJvdyYmbC5jb2w+PTAmJnRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGwuY29sLG9GKSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24u''@;'; put 'put ''aXNDZWxsVmlzaWJsZShkKSYmZC5pc0hlYWRlcigpfSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSIsZ3JvdXA6QW1lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRD''@;'; put 'put ''b250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBbWUpfXNvcnQobCl7c3VwZXIuc29ydChsKX1jbGVhclNvcnQoKXtzdXBlci5jbGVhclNvcnQoKX1pc1NvcnRlZCgpe3JldHVybiBzdXBlci5pc1NvcnRlZCgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIHN1cGVyLmdldFNv''@;'; put 'put ''cnRDb25maWcobCl9c2V0U29ydENvbmZpZyhsKXtzdXBlci5zZXRTb3J0Q29uZmlnKGwpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShs''@;'; put 'put ''KT9sOltsXX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtzdXBlci51cGRhdGVIZWFkZXJDbGFzc2VzKGwsLi4uZCksbG8obCxmdW5jdGlvbiBpcHQo''@;'; put 'put ''Yyl7Y29uc3QgbD1jLmNsYXNzTmFtZS5zcGxpdCgiICIpLGE9bmV3IFJlZ0V4cCgiXnNvcnQtWzAtOV17MSwyfSQiKTtyZXR1cm4gbC5maWx0ZXIoZD0+YS50ZXN0KGQpKX0obCkpLCExIT09dGhpcy5lbmFibGVkJiZUaShsLGZ1bmN0aW9uIHJwdChjLGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4h''@;'; put 'put ''MT09PWF8fGMuaXNDb2x1bW5Tb3J0ZWQobCkmJmMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCk+MSYmZC5wdXNoKGBzb3J0LSR7Yy5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCkrMX1gKSxkfSguLi5kKSl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09dkooYS5yb3cs''@;'; put 'put ''YS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT8odGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCksdGhpcy5zb3J0KHRo''@;'; put 'put ''aXMuZ2V0TmV4dFNvcnRDb25maWcoYS5jb2wsb0YpKSk6dGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkpKX19ZnVuY3Rpb24ga21lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB1cHQoYyl7dmFyIGw9ZnVuY3Rpb24gZHB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBwcHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksa21lKHRoaXMsImRyYWdnZWQiLFtdKSxrbWUodGhpcywibGFzdFNldENlbGwiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiJtdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE2MH1pc0VuYWJsZWQoKXtyZXR1cm4gQXAoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5h''@;'; put 'put ''YmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLHtyb290RWxlbWVudDphfT10aGlzLmhvdDtmdW5jdGlvbiBkKGgpe2lmKDE9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybiBsLmRyYWdnZWQuc3BsaWNlKDAsbC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgZj1s''@;'; put 'put ''LmRyYWdnZWQuaW5kZXhPZihoKTtpZigtMT09PWYpcmV0dXJuITE7MD09PWY/bC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgwLDEpOjE9PT1mJiYobC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgtMSkpfXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hzdGFydCIs''@;'; put 'put ''aD0+e2xldCBmO3JldHVybiBwbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhl''@;'; put 'put ''aWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOnBvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goImJvdHRvbSIpLGwudG91''@;'; put 'put ''Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaGVuZCIsaD0+''@;'; put 'put ''cG8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJ0b3AiKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTpwbyhoLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsImJv''@;'; put 'put ''dHRvbSIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaG1vdmUiLGg9Pntjb25zdHtyb290RG9jdW1lbnQ6Zn09dGhpcy5ob3Q7bGV0IHYsTSxELFoscmUsY2U7''@;'; put 'put ''aWYoMD09PWwuZHJhZ2dlZC5sZW5ndGgpcmV0dXJuO2NvbnN0IGJlPWYuZWxlbWVudEZyb21Qb2ludChoLnRvdWNoZXNbMF0uY2xpZW50WCxoLnRvdWNoZXNbMF0uY2xpZW50WSk7IWJlfHxiZT09PWwubGFzdFNldENlbGx8fCgoIlREIj09PWJlLm5vZGVOYW1lfHwiVEgiPT09YmUubm9kZU5h''@;'; put 'put ''bWUpJiYodj1sLmhvdC5nZXRDb29yZHMoYmUpLC0xPT09di5jb2wmJih2LmNvbD0wKSxNPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksRD1NLmdldFdpZHRoKCksWj1NLmdldEhlaWdodCgpLHJlPU0uZ2V0RGlyZWN0aW9uKCksMT09PUQmJjE9PT1aJiZsLmhvdC5zZWxlY3Rpb24uc2V0''@;'; put 'put ''UmFuZ2VFbmQodiksY2U9bC5nZXRDdXJyZW50UmFuZ2VDb29yZHMoTSx2LGwudG91Y2hTdGFydFJhbmdlLmRpcmVjdGlvbixyZSxsLmRyYWdnZWRbMF0pLG51bGwhPT1jZS5zdGFydCYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQoY2Uuc3RhcnQpLGwuaG90LnNlbGVjdGlvbi5zZXRS''@;'; put 'put ''YW5nZUVuZChjZS5lbmQpLGwubGFzdFNldENlbGw9YmUpLGgucHJldmVudERlZmF1bHQoKSl9KX1nZXRDdXJyZW50UmFuZ2VDb29yZHMobCxhLGQsaCxmKXtjb25zdCB2PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxNPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksRD1sLmdldEJvdHRvbVN0YXJ0Q29y''@;'; put 'put ''bmVyKCksWj1sLmdldFRvcEVuZENvcm5lcigpO2xldCByZT17c3RhcnQ6bnVsbCxlbmQ6bnVsbH07c3dpdGNoKGQpe2Nhc2UiTkUtU1ciOnN3aXRjaChoKXtjYXNlIk5FLVNXIjpjYXNlIk5XLVNFIjpyZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93''@;'; put 'put ''LGwuaGlnaGxpZ2h0LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEQucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKX07''@;'; put 'put ''YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mJiYocmU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0ucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfSl9YnJlYWs7Y2FzZSJOVy1TRSI6c3dpdGNoKGgpe2Nhc2UiTkUt''@;'; put 'put ''U1ciOiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6RH06cmUuZW5kPWE7YnJlYWs7Y2FzZSJOVy1TRSI6InRvcCI9PT1mP3JlPXtzdGFydDphLGVuZDpNfTpyZS5lbmQ9YTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/cmU9e3N0YXJ0OmEsZW5kOnZ9OnJlLmVuZD1hO2JyZWFrO2Nhc2Ui''@;'; put 'put ''U1ctTkUiOiJ0b3AiPT09Zj9yZT17c3RhcnQ6YSxlbmQ6Wn06cmUuZW5kPWF9YnJlYWs7Y2FzZSJTVy1ORSI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOnJlPSJib3R0b20iPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyhELnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX07YnJlYWs7Y2FzZSJTVy1ORSI6cmU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxNLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRz''@;'; put 'put ''KHYucm93LGEuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mP3JlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxaLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKX06InRvcCI9PT1mJiYocmU9e3N0YXJ0OkQs''@;'; put 'put ''ZW5kOmF9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2FzZSJTVy1ORSI6InRvcCI9PT1mJiYocmUuZW5kPWEpO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9yZS5lbmQ9YTpyZT17c3RhcnQ6YSxlbmQ6dn19fXJldHVybiByZX1pc0Ry''@;'; put 'put ''YWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiBKUSgpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBzaWJsZTpkPSExLGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46dj0h''@;'; put 'put ''MSxpc1Jvb3Q6TT0hMSxpc1BsYWNlaG9sZGVyOkQ9ITEsaGVhZGVyQ2xhc3NOYW1lczpaPVtdfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJue2xhYmVsOmMsY29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFwc2libGU6''@;'; put 'put ''ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOnYsaXNSb290Ok0saXNQbGFjZWhvbGRlcjpELGhlYWRlckNsYXNzTmFtZXM6Wn19ZnVuY3Rpb24gUVEoYyxsLGEpeyhmdW5jdGlvbiBtcHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHczKGMsbCl7cmV0dXJuIGMuZ2V0KEltZShjLGwpKX1mdW5jdGlvbiBwQShjLGwsYSl7cmV0dXJuIGMuc2V0KEltZShjLGwpLGEp''@;'; put 'put ''LGF9ZnVuY3Rpb24gSW1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25z''@;'; put 'put ''dCBSbWU9WyJsYWJlbCIsImNvbGxhcHNpYmxlIl07dmFyIFk1PW5ldyBXZWFrTWFwLFU5PW5ldyBXZWFrTWFwLGVlZT1uZXcgV2Vha01hcDtjbGFzcyB2cHR7Y29uc3RydWN0b3IoKXtRUSh0aGlzLFk1LFtdKSxRUSh0aGlzLFU5LDApLFFRKHRoaXMsZWVlLDEvMCl9c2V0Q29sdW1uc0xpbWl0''@;'; put 'put ''KGwpe3BBKGVlZSx0aGlzLGwpfXNldERhdGEoKXtwQShZNSx0aGlzLGZ1bmN0aW9uIGdwdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MS8wO2NvbnN0IGE9W107aWYoMD09PWwpcmV0dXJuIGE7WW4oYyxoPT57Y29uc3Qg''@;'; put 'put ''Zj1bXTtsZXQgdj0wO2EucHVzaChmKSxZbihoLE09Pntjb25zdCBEPUpRKCk7aWYocW8oTSkpe2NvbnN0e2xhYmVsOnJlLGNvbHNwYW46Y2UsaGVhZGVyQ2xhc3NOYW1lOmJlfT1NO0QubGFiZWw9bGMocmUpLCJudW1iZXIiPT10eXBlb2YgY2UmJmNlPjEmJihELmNvbHNwYW49Y2UsRC5vcmln''@;'; put 'put ''Q29sc3Bhbj1jZSksInN0cmluZyI9PXR5cGVvZiBiZSYmKEQuaGVhZGVyQ2xhc3NOYW1lcz1bLi4uYmUuc3BsaXQoIiAiKV0pfWVsc2UgRC5sYWJlbD1sYyhNKTt2Kz1ELm9yaWdDb2xzcGFuO2xldCBaPSExO2lmKHY+PWwmJihELmNvbHNwYW49RC5vcmlnQ29sc3Bhbi0odi1sKSxELm9yaWdD''@;'; put 'put ''b2xzcGFuPUQuY29sc3BhbixaPSEwKSxmLnB1c2goRCksRC5jb2xzcGFuPjEpZm9yKGxldCByZT0wO3JlPEQuY29sc3Bhbi0xO3JlKyspZi5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7cmV0dXJuIVp9KX0pO2NvbnN0IGQ9TWF0aC5tYXgoLi4ueXMoYSxoPT5oLmxlbmd0aCkp''@;'; put 'put ''O3JldHVybiBZbihhLGg9PntpZihoLmxlbmd0aDxkKXtjb25zdCBmPXlzKG5ldyBBcnJheShkLWgubGVuZ3RoKSwoKT0+SlEoKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwuLi5mKX19KSxhfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10s''@;'; put 'put ''dzMoZWVlLHRoaXMpKSkscEEoVTksdGhpcyx3MyhZNSx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdzMoWTUsdGhpcyl9bWVyZ2VXaXRoKGwpe1luKGwsYT0+e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251bGwhPT12''@;'; put 'put ''JiZ4dSh2LGYsUm1lKX0pfW1hcChsKXtZbih3MyhZNSx0aGlzKSxhPT57WW4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7cW8oaCkmJnh1KGQsaCxSbWUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lmKGw+PXczKFU5LHRoaXMpfHxsPDApcmV0dXJuIG51bGw7Y29uc3QgaD13''@;'; put 'put ''MyhZNSx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1sy''@;'; put 'put ''XT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PXczKFU5LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13MyhZNSx0aGlzKVtsXTtsZXQgdj0wO2ZvcihsZXQgTT1hO008Zi5sZW5ndGg7TSsrKXtjb25zdCBEPWZbTV07aWYoRC5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUQuY29sc3BhbixoLnB1c2goRCksRC5jb2xzcGFuPjEmJihNKz1ELmNvbHNwYW4tMSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5ldyBFcnJvcigiVGhl''@;'; put 'put ''IGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzMoVTksdGhpcyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHczKFU5LHRoaXMpPjA/dzMoWTUsdGhpcylbMF0ubGVu''@;'; put 'put ''Z3RoOjB9Y2xlYXIoKXtwQShZNSx0aGlzLFtdKSxwQShVOSx0aGlzLDApfX1mdW5jdGlvbiB0ZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGJwdChjKXt2YXIgbD1mdW5jdGlvbiB5cHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNvbnN0IExtZT0iREYtcHJlLW9yZGVyIixIbWU9bmV3IE1hcChbW0xtZSxmdW5jdGlvbiBPbWUoYyxsKXtsZXQgYT1jLmNhbGwobCx0aGlzKTtmb3IobGV0IGQ9MDtkPHRoaXMuY2hpbGRzLmxlbmd0aDtkKyspe2lmKCExPT09YSlyZXR1cm4hMTthPU9tZS5jYWxsKHRoaXMuY2hpbGRz''@;'; put 'put ''W2RdLGMsbCl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIFBtZShjLGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZighMT09PVBtZS5jYWxsKHRoaXMuY2hpbGRzW2FdLGMsbCkpcmV0dXJuITE7cmV0dXJuIGMuY2FsbChsLHRoaXMpfV0sWyJC''@;'; put 'put ''RiIsZnVuY3Rpb24gd3B0KGMsbCl7Y29uc3QgYT1bdGhpc107IWZ1bmN0aW9uIGQoKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9YS5zaGlmdCgpO2EucHVzaCguLi5oLmNoaWxkcyksITEhPT1jLmNhbGwobCxoKSYmZCgpfSgpfV1dKTtjbGFzcyBJSHtjb25zdHJ1Y3RvcihsKXt0''@;'; put 'put ''ZWUodGhpcywiZGF0YSIse30pLHRlZSh0aGlzLCJwYXJlbnQiLG51bGwpLHRlZSh0aGlzLCJjaGlsZHMiLFtdKSx0aGlzLmRhdGE9bH1hZGRDaGlsZChsKXtsLnBhcmVudD10aGlzLHRoaXMuY2hpbGRzLnB1c2gobCl9Y2xvbmVUcmVlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgYT1uZXcgSUgoey4uLmwuZGF0YX0pO2ZvcihsZXQgZD0wO2Q8bC5jaGlsZHMubGVuZ3RoO2QrKylhLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKGwuY2hpbGRzW2RdKSk7cmV0dXJuIGF9cmVwbGFjZVRyZWVXaXRoKGwp''@;'; put 'put ''e3RoaXMuZGF0YT17Li4ubC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGE9MDthPGwuY2hpbGRzLmxlbmd0aDthKyspdGhpcy5hZGRDaGlsZChsLmNoaWxkc1thXSl9d2Fsa0Rvd24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOiJCRiI7aWYoIUhtZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgIiR7YX0iIGRvZXMgbm90IGV4aXN0YCk7SG1lLmdldChhKS5jYWxsKHRoaXMsbCx0aGlzKX13YWxrVXAobCl7Y29uc3QgYT10aGlzLGQ9aD0+eyExIT09bC5jYWxsKGEsaCkmJm51''@;'; put 'put ''bGwhPT1oLnBhcmVudCYmZChoLnBhcmVudCl9O2QodGhpcyl9fWZ1bmN0aW9uIG5lZShjLGwsYSl7KGZ1bmN0aW9uIFNwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmQoYyxsKXtyZXR1cm4gYy5nZXQoTm1lKGMsbCkpfWZ1bmN0aW9uIE5tZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGd3PW5ldyBXZWFrTWFwLFo5PW5ldyBXZWFrTWFwLG13PW5ldyBXZWFrTWFwO2NsYXNzIHhwdHtjb25zdHJ1Y3RvcihsKXtuZWUodGhpcyxndyxuZXcgTWFwKSxuZWUodGhpcyxa''@;'; put 'put ''OSxuZXcgTWFwKSxuZWUodGhpcyxtdyxudWxsKSxmdW5jdGlvbiBNcHQoYyxsLGEpe2Muc2V0KE5tZShjLGwpLGEpfShtdyx0aGlzLGwpfWdldFJvb3RzKCl7cmV0dXJuIEFycmF5LmZyb20ocmQoZ3csdGhpcykudmFsdWVzKCkpfWdldFJvb3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1cm4gcmQo''@;'; put 'put ''WjksdGhpcykuaGFzKGwpJiYoYT1yZChndyx0aGlzKS5nZXQocmQoWjksdGhpcykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNvbHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLXJkKFo5LHRoaXMpLmdldChhKTtsZXQgdixmPTA7cmV0dXJuIGQu''@;'; put 'put ''d2Fsa0Rvd24oTT0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOkQsaGVhZGVyTGV2ZWw6Wn19PU07aWYobD09PVope2lmKGg+PWYmJmg8PWYrRC0xKXJldHVybiB2PU0sdi5kYXRhLmlzUm9vdD1hPT09di5kYXRhLmNvbHVtbkluZGV4LCExO2YrPUR9fSksdn1yZWJ1aWxkVHJlZUluZGV4KCl7''@;'; put 'put ''bGV0IGw9MDtyZChaOSx0aGlzKS5jbGVhcigpLFluKHJkKGd3LHRoaXMpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKyspcmQoWjksdGhpcykuc2V0KGgsbCk7bCs9ZH0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCBsPXJkKG13LHRo''@;'; put 'put ''aXMpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPXJkKG13LHRoaXMpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgSUg7cmQoZ3csdGhpcykuc2V0KGEsaCksdGhpcy5idWlsZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxhKz1kLm9yaWdDb2xz''@;'; put 'put ''cGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MTtjb25zdCBmPXJkKG13LHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEsaCk7ZCs9MSxZbihm''@;'; put 'put ''LHY9Pntjb25zdCBNPXsuLi52LGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgRDsxPT09ZD8obC5kYXRhPU0sRD1sKTooRD1uZXcgSUgoTSksbC5hZGRDaGlsZChEKSksZDxyZChtdyx0aGlzKS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKEQsYSxkLHYub3Jp''@;'; put 'put ''Z0NvbHNwYW4pLGErPXYub3JpZ0NvbHNwYW59KX1jbGVhcigpe3JkKGd3LHRoaXMpLmNsZWFyKCkscmQoWjksdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gVm1lKGMsbCl7Yy53YWxrRG93bihhPT57bGV0e2RhdGE6ZCxjaGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwoZC5jb2x1bW5JbmRl''@;'; put 'put ''eCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gUkgoYyxsKXtsZXR7Y2hpbGRzOmF9PWM7aWYoMCE9PWEubGVuZ3RoKXJldHVybiBhWzBdLmRhdGFbbF19ZnVuY3Rpb24gTEgoYyl7cmV0dXJuIFJIKGMsIm9y''@;'; put 'put ''aWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gcmVlKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5pc0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVk''@;'; put 'put ''Q29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKExIKGMpKXJldHVybiByZWUoYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSksZj1uZXcgU2V0O2xldCB2PTA7aWYoaC5sZW5ndGg+MClZbihoLE09PntNLnJlcGxhY2VUcmVlV2l0aChNLmRhdGEuY2xv''@;'; put 'put ''bmVkVHJlZSksTS5kYXRhLmNsb25lZFRyZWU9bnVsbCx2Kz1NLmRhdGEuY29sc3BhbixWbWUoTSxaPT57Zi5hZGQoWil9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpNLG9yaWdDb2xzcGFuOkQsY29sdW1uSW5kZXg6Wn09bDt2PUQtTTtmb3IobGV0IHJlPTE7cmU8RDtyZSsrKWYuYWRkKForcmUp''@;'; put 'put ''fXJldHVybiBjLndhbGtVcChNPT57Y29uc3R7ZGF0YTpEfT1NO0QuY29sc3Bhbis9dixELmNvbHNwYW4+PUQub3JpZ0NvbHNwYW4/KEQuY29sc3Bhbj1ELm9yaWdDb2xzcGFuLEQuaXNDb2xsYXBzZWQ9ITEpOkxIKE0pJiYoRC5pc0NvbGxhcHNlZD1SSChNLCJpc0NvbGxhcHNlZCIpKX0pLHty''@;'; put 'put ''b2xsYmFja01vZGlmaWNhdGlvbjooKT0+aWVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246dn19ZnVuY3Rpb24gaWVlKGMpe3ZhciBsO2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVufHxhLm9y''@;'; put 'put ''aWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTEgoYykpcmV0dXJuIGllZShkWzBdKTthLmlzQ29sbGFwc2VkPSEwO2NvbnN0IGY9ZC5zbGljZSgxKSx2PW5ldyBTZXQ7aWYo''@;'; put 'put ''Zi5sZW5ndGg+MClZbihmLEQ9PntWbWUoRCxaPT57di5hZGQoWil9KSxELmRhdGEuY2xvbmVkVHJlZT1ELmNsb25lVHJlZSgpLEQud2Fsa0Rvd24oWj0+e2xldHtkYXRhOnJlfT1aO3JlLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOkQsY29sdW1uSW5kZXg6Wn09YTtm''@;'; put 'put ''b3IobGV0IHJlPTE7cmU8RDtyZSsrKXYuYWRkKForcmUpfWNvbnN0IE09YS5jb2xzcGFuLShudWxsIT09KGw9UkgoYywiY29sc3BhbiIpKSYmdm9pZCAwIT09bD9sOjEpO3JldHVybiBjLndhbGtVcChEPT57Y29uc3R7ZGF0YTpafT1EO1ouY29sc3Bhbi09TSxaLmNvbHNwYW48PTE/KFouY29s''@;'; put 'put ''c3Bhbj0xLFouaXNDb2xsYXBzZWQ9ITApOkxIKEQpJiYoWi5pc0NvbGxhcHNlZD1SSChELCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+cmVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKHYpLGNvbHNwYW5Db21wZW5zYXRpb246TX19Y29uc3QgQm1l''@;'; put 'put ''PW5ldyBNYXAoW1siY29sbGFwc2UiLGllZV0sWyJleHBhbmQiLHJlZV0sWyJoaWRlLWNvbHVtbiIsZnVuY3Rpb24gRXB0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0''@;'; put 'put ''eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihnbGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBs''@;'; put 'put ''aWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2Rh''@;'; put 'put ''dGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5wdXNoKGwpLGYuY29sc3Bhbj4xP2YuY29sc3Bhbi09MTpmLmlzSGlkZGVuPSEwfSl9XSxbInNob3ctY29sdW1uIixmdW5jdGlvbiBUcHQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQg''@;'; put 'put ''Z3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGdsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRo''@;'; put 'put ''ZSBzaG93IGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZighYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0''@;'; put 'put ''dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoZi5jcm9zc0hpZGRlbkNvbHVtbnMuaW5kZXhPZihsKSwxKSwhZi5pc0hpZGRlbiYmZi5jb2xzcGFuPGYub3JpZ0NvbHNwYW4mJihmLmNvbHNwYW4rPTEpLGYu''@;'; put 'put ''aXNIaWRkZW49ITF9KX1dXSk7ZnVuY3Rpb24gT0goYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57YS53YWxrRG93bihkPT57Y29uc3QgaD1kLmRhdGEse29yaWdDb2xzcGFuOmYsY29sdW1uSW5kZXg6dixoZWFkZXJMZXZlbDpNLGNyb3NzSGlkZGVuQ29sdW1uczpEfT1oLFo9ZnVuY3Rp''@;'; put 'put ''b24gRHB0KGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxNKTtsZXQgcmU9ITE7Zm9yKGxldCBjZT12O2NlPHYrZjtjZSsrKWlmKEQuaW5jbHVkZXMoY2UpfHxyZSlaLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9''@;'; put 'put ''KTtlbHNle2NvbnN0IEVlPWtwdChoKTtFZS5pc1Jvb3Q9ITAsWi5wdXNoKEVlKSxyZT0hMH19KX0pLGx9ZnVuY3Rpb24ga3B0KGMpe2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczpsLC4uLmF9PUpRKGMpO3JldHVybiBhfWZ1bmN0aW9uIGFlZShjLGwsYSl7KGZ1bmN0aW9uIElwdChjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZ0EoYyxsLGEpe3JldHVybiBjLnNldChqbWUoYyxsKSxhKSxhfWZ1bmN0''@;'; put 'put ''aW9uIHFjKGMsbCl7cmV0dXJuIGMuZ2V0KGptZShjLGwpKX1mdW5jdGlvbiBqbWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBu''@;'; put 'put ''b3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBuND1uZXcgV2Vha01hcCxKZD1uZXcgV2Vha01hcCxXOT1uZXcgV2Vha01hcDtjbGFzcyBScHR7Y29uc3RydWN0b3IoKXthZWUodGhpcyxuNCxuZXcgdnB0KSxhZWUodGhpcyxKZCxuZXcgeHB0KHFjKG40LHRoaXMpKSksYWVlKHRoaXMs''@;'; put 'put ''VzksW1tdXSl9c2V0U3RhdGUobCl7cWMobjQsdGhpcykuc2V0RGF0YShsKTtsZXQgYT0hMTt0cnl7cWMoSmQsdGhpcykuYnVpbGRUcmVlKCl9Y2F0Y2h7cWMoSmQsdGhpcykuY2xlYXIoKSxxYyhuNCx0aGlzKS5jbGVhcigpLGE9ITB9cmV0dXJuIGdBKFc5LHRoaXMsT0gocWMoSmQsdGhpcyku''@;'; put 'put ''Z2V0Um9vdHMoKSkpLGF9c2V0Q29sdW1uc0xpbWl0KGwpe3FjKG40LHRoaXMpLnNldENvbHVtbnNMaW1pdChsKX1tZXJnZVN0YXRlV2l0aChsKXtjb25zdCBhPXlzKGwsZD0+e2xldHtyb3c6aCwuLi5mfT1kO3JldHVybntyb3c6aDwwP3RoaXMucm93Q29vcmRzVG9MZXZlbChoKTpoLC4uLmZ9''@;'; put 'put ''fSk7cWMobjQsdGhpcykubWVyZ2VXaXRoKGEpLHFjKEpkLHRoaXMpLmJ1aWxkVHJlZSgpLGdBKFc5LHRoaXMsT0gocWMoSmQsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcFN0YXRlKGwpe3FjKG40LHRoaXMpLm1hcChsKSxxYyhKZCx0aGlzKS5idWlsZFRyZWUoKSxnQShXOSx0aGlzLE9IKHFjKEpk''@;'; put 'put ''LHRoaXMpLmdldFJvb3RzKCkpKX1tYXBOb2RlcyhsKXtyZXR1cm4gcXUocWMoSmQsdGhpcykuZ2V0Um9vdHMoKSwoYSxkKT0+KGQud2Fsa0Rvd24oaD0+e2NvbnN0IGY9bChoLmRhdGEpO3ZvaWQgMCE9PWYmJmEucHVzaChmKX0pLGEpLFtdKX10cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLGEs''@;'; put 'put ''ZCl7YTwwJiYoYT10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoYSkpO2NvbnN0IGg9cWMoSmQsdGhpcykuZ2V0Tm9kZShhLGQpO2xldCBmO3JldHVybiBoJiYoZj1mdW5jdGlvbiBBcHQoYyxsLGEpe2lmKCFCbWUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgVGhlIG5vZGUgbW9kaWZpZXIgYWN0aW9u''@;'; put 'put ''ICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBCbWUuZ2V0KGMpKGwsYSl9KGwsaCxkKSxnQShXOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKSksZn10cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGwsYSl7cmV0dXJuIHRoaXMudHJpZ2dlck5vZGVNb2RpZmljYXRp''@;'; put 'put ''b24obCwtMSxhKX1yb3dDb29yZHNUb0xldmVsKGwpe2lmKGw+PTApcmV0dXJuIG51bGw7Y29uc3QgYT1sK01hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYTwwP251bGw6YX1sZXZlbFRvUm93Q29vcmRzKGwpe2lmKGw8MClyZXR1cm4gbnVsbDtjb25zdCBhPWwtTWF0''@;'; put 'put ''aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPj0wP251bGw6YX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkLGg7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6bnVs''@;'; put 'put ''bCE9PShkPW51bGw9PT0oaD1xYyhXOSx0aGlzKVtsXSl8fHZvaWQgMD09PWg/dm9pZCAwOmhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0SGVhZGVyVHJlZU5vZGUobCxhKTtyZXR1cm4gZD97Li4uZC5kYXRhfTpudWxs''@;'; put 'put ''fWdldEhlYWRlclRyZWVOb2RlKGwsYSl7cmV0dXJuIGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVsKGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpP251bGw6cWMoSmQsdGhpcykuZ2V0Tm9kZShsLGEpfHxudWxsfWZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwo''@;'; put 'put ''bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmw7Y29uc3QgZD1hLWwrMTtsZXQgaD0hMSxmPW51bGw7Zm9yKGxldCB2PWw7djw9YTt2Kyspe2NvbnN0IE09cWMoSmQsdGhpcykuZ2V0Um9vdEJ5Q29sdW1uKHYpO2lmKCFNKWJy''@;'; put 'put ''ZWFrO2g9ITAsTS53YWxrRG93bihEPT57Y29uc3R7Y29sdW1uSW5kZXg6WixoZWFkZXJMZXZlbDpyZSxvcmlnQ29sc3BhbjpjZSxpc0hpZGRlbjpiZX09RC5kYXRhO2JlfHxjZTw9ZCYmWj49bCYmWitjZS0xPD1hJiYobnVsbD09PWZ8fHJlPGYpJiYoZj1yZSl9LExtZSl9cmV0dXJuIGgmJm51''@;'; put 'put ''bGw9PT1mPy0xOnRoaXMubGV2ZWxUb1Jvd0Nvb3JkcyhmPz8wKX1maW5kTGVmdE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpofT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITB9O2lmKGgpcmV0dXJu''@;'; put 'put ''IGE7bGV0IGY9YS0xO2Zvcig7Zj49MDspe3ZhciB2O2NvbnN0e2lzUm9vdDpNfT1udWxsIT09KHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGYpKSYmdm9pZCAwIT09dj92Ontpc1Jvb3Q6ITB9O2lmKE0pYnJlYWs7Zi09MX1yZXR1cm4gZn1maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgobCxh''@;'; put 'put ''KXt2YXIgZDtjb25zdHtpc1Jvb3Q6aCxvcmlnQ29sc3BhbjpmfT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITAsb3JpZ0NvbHNwYW46MX07aWYoaClyZXR1cm4gYStmLTE7bGV0IHY9YSsxO2Zvcig7djx0aGlzLmdldENvbHVt''@;'; put 'put ''bnNDb3VudCgpOyl7dmFyIE07Y29uc3R7aXNSb290OkR9PW51bGwhPT0oTT10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsdikpJiZ2b2lkIDAhPT1NP006e2lzUm9vdDohMH07aWYoRClicmVhazt2Kz0xfXJldHVybiB2LTF9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gcWMobjQsdGhpcykuZ2V0''@;'; put 'put ''TGF5ZXJzQ291bnQoKX1nZXRDb2x1bW5zQ291bnQoKXtyZXR1cm4gcWMobjQsdGhpcykuZ2V0Q29sdW1uc0NvdW50KCl9Y2xlYXIoKXtnQShXOSx0aGlzLFtdKSxxYyhuNCx0aGlzKS5jbGVhcigpLHFjKEpkLHRoaXMpLmNsZWFyKCl9fWZ1bmN0aW9uIG1BKGMsbCxhKXtyZXR1cm4obD1mdW5j''@;'; put 'put ''dGlvbiBMcHQoYyl7dmFyIGw9ZnVuY3Rpb24gT3B0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp''@;'; put 'put ''biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBGcHQ9Y2xhc3MgUHB0e2NvbnN0cnVjdG9yKGwsYSl7bUEodGhpcywiaG90Iix2b2lkIDApLG1BKHRoaXMsIm5lc3Rl''@;'; put 'put ''ZEhlYWRlclNldHRpbmdzR2V0dGVyIix2b2lkIDApLG1BKHRoaXMsImxheWVyc0NvdW50IiwwKSxtQSh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksbUEodGhpcywid2lkdGhzTWFwIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcj1hLHRoaXMud2lk''@;'; put 'put ''dGhzTWFwPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoIm5lc3RlZEhlYWRlcnMud2lkdGhzTWFwIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKX1zZXRMYXllcnNDb3VudChsKXtyZXR1cm4gdGhpcy5sYXllcnNDb3VudD1sLHRoaXN9Z2V0V2lk''@;'; put 'put ''dGgobCl7cmV0dXJuIHRoaXMud2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX1idWlsZFdpZHRoc01hcCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO3RoaXMuY29udGFpbmVyPXRoaXMuaG90LnJvb3REb2N1bWVu''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoYW5kc29udGFibGUiLCJodEdob3N0VGFibGUiLCJodEF1dG9TaXplIiksbCYmdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChsKSx0aGlzLl9idWlsZEdob3N0VGFibGUodGhpcy5jb250YWlu''@;'; put 'put ''ZXIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtjb25zdCBhPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoInRyOmxhc3Qtb2YtdHlwZSB0aCIpLGQ9YS5sZW5ndGg7dGhpcy53aWR0aHNNYXAuY2xlYXIoKTtmb3IobGV0IGg9''@;'; put 'put ''MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCksdj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGYpO3RoaXMud2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleCh2LGFbaF0ub2Zmc2V0V2lkdGgpfXRoaXMu''@;'; put 'put ''Y29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGx9X2J1aWxkR2hvc3RUYWJsZShsKXtjb25zdHtyb290RG9jdW1lbnQ6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCxoPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVu''@;'; put 'put ''dCgpLGY9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLHY9ISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxNPWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtmb3IobGV0IEQ9MDtEPHRoaXMubGF5ZXJzQ291bnQ7RCsrKXtjb25zdCBaPWEuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''dHIiKTtmb3IobGV0IHJlPTA7cmU8TTtyZSsrKXtsZXQgY2U9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlKTtudWxsPT09Y2UmJihjZT1yZSk7Y29uc3QgYmU9YS5jcmVhdGVFbGVtZW50KCJ0aCIpLEVlPXRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIoRCxjZSk7aWYo''@;'; put 'put ''RWUmJighRWUuaXNQbGFjZWhvbGRlcnx8RWUuaXNIaWRkZW4pKXtsZXQgQmU9RWUubGFiZWw7diYmKEJlKz0nPGJ1dHRvbiBjbGFzcz0iY2hhbmdlVHlwZSI+PC9idXR0b24+JyksajcoYmUsQmUpLGJlLmNvbFNwYW49RWUuY29sc3BhbixaLmFwcGVuZENoaWxkKGJlKX19Zi5hcHBlbmRDaGls''@;'; put 'put ''ZChaKX1oLmFwcGVuZENoaWxkKGYpLGwuYXBwZW5kQ2hpbGQoaCl9Y2xlYXIoKXt0aGlzLndpZHRoc01hcC5jbGVhcigpLHRoaXMuY29udGFpbmVyPW51bGx9fTtmdW5jdGlvbiB6bWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE5wdChjKXt2YXIgbD1mdW5jdGlvbiBWcHQoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHZBKGMsbCxhKXtVbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRzUoYyxsLGEpe3JldHVybiBjLnNldChYYyhjLGwpLGEpLGF9ZnVuY3Rpb24gX3MoYyxsKXtyZXR1cm4gYy5nZXQoWGMoYyxsKSl9ZnVuY3Rpb24gWGMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFptZT0ibmVzdGVkSGVhZGVycyI7dmFyIERsPW5ldyBXZWFrTWFwLEM2''@;'; put 'put ''PW5ldyBXZWFrTWFwLGJBPW5ldyBXZWFrTWFwLFBIPW5ldyBXZWFrTWFwLEZIPW5ldyBXZWFrTWFwLGh1PW5ldyBXZWFrU2V0O2NsYXNzIGpwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBIcHQoYyxsKXtVbWUoYyxsKSxsLmFkZChjKX0o''@;'; put 'put ''dGhpcyxodSksdkEodGhpcyxEbCxuZXcgUnB0KSx2QSh0aGlzLEM2LG51bGwpLHZBKHRoaXMsYkEsbnVsbCksdkEodGhpcyxQSCwhMSksdkEodGhpcyxGSCxudWxsKSx6bWUodGhpcywiZ2hvc3RUYWJsZSIsbmV3IEZwdCh0aGlzLmhvdCwobCxhKT0+dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhs''@;'; put 'put ''LGEpKSksem1lKHRoaXMsImRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMiLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWm1lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''Wm1lXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyghQXJyYXkuaXNBcnJheShhKXx8IUFycmF5LmlzQXJyYXkoYVswXSkpJiZpbChnbGBZb3VyIE5lc3RlZCBIZWFk''@;'; put 'put ''ZXJzIHBsdWdpbiBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIFRoZSBzZXR0aW5ncyBoYXMgdG8gYmVceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBhcnJheXMgZS5xLiBbWydBMScsIHsgbGFiZWw6ICdBMicsIGNvbHNwYW46IDIgfV1dYCksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJpbml0IiwoKT0+WGMoaHUsdGhpcyxyNHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1''@;'; put 'put ''cm4gWGMoaHUsbCxpNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxs''@;'; put 'put ''LFdwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxZcHQpLmNhbGwo''@;'; put 'put ''bCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEdwdCkuY2FsbChsLC4uLmgpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLCRwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsS3B0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1v''@;'; put 'put ''ZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLHFwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlv''@;'; put 'put ''biIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsenB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixkPT5YYyhodSx0aGlzLEpw''@;'; put 'put ''dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLGU0dCkuY2FsbChsLC4uLmgpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCx0NHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFVwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRI''@;'; put 'put ''b29rKCJiZWZvcmVDb3B5IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFpwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3RDb2x1''@;'; put 'put ''bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFhwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRv''@;'; put 'put ''ck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLFFwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlGb2N1c2VkRWxlbWVudCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxuNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVV''@;'; put 'put ''cGRhdGVkIiwoKT0+WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7X3MoRGwsdGhpcykuc2V0Q29sdW1uc0xpbWl0KHRoaXMuaG90LmNvdW50Q29scygpKSxBcnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3Rl''@;'; put 'put ''ZE92ZXJsYXBwZWRIZWFkZXJzPV9zKERsLHRoaXMpLnNldFN0YXRlKGwpKSx0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJmlsKGdsYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5nIGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1''@;'; put 'put ''cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25z''@;'; put 'put ''dCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7X3MoRGwsdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIV9zKEM2LHRoaXMpJiZ0aGlzLmVuYWJsZWQmJkc1KEM2LHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09i''@;'; put 'put ''c2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29wOmgsaW5kZXg6ZixuZXdWYWx1ZTp2fT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IE09ITA9PT12PyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtfcyhEbCx0aGlzKS50cmlnZ2VyQ29sdW1uTW9k''@;'; put 'put ''aWZpY2F0aW9uKE0sZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVpbGRXaWR0aHNNYXAoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhp''@;'; put 'put ''cy5jbGVhckNvbHNwYW5zKCksX3MoRGwsdGhpcykuY2xlYXIoKSxfcyhDNix0aGlzKS51bnN1YnNjcmliZSgpLEc1KEM2LHRoaXMsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRlTWFuYWdlcigpe3JldHVybiBfcyhEbCx0aGlzKX1n''@;'; put 'put ''ZXRMYXllcnNDb3VudCgpe3JldHVybiBfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0dXJuIF9zKERsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtf''@;'; put 'put ''d3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxoPWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5''@;'; put 'put ''P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgdj0wO3Y8YTt2Kyspe2NvbnN0IE09ZC5jaGlsZE5vZGVzW3ZdO2lmKCFNKWJyZWFrO2NvbnN0IEQ9aC5jaGlsZE5vZGVzW3ZdLFo9Zj9mLmNoaWxkTm9kZXNb''@;'; put 'put ''dl06bnVsbDtmb3IobGV0IHJlPTAsY2U9TS5jaGlsZE5vZGVzLmxlbmd0aDtyZTxjZTtyZSsrKU0uY2hpbGROb2Rlc1tyZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oTS5jaGlsZE5vZGVzW3JlXSwiaGlkZGVuSGVhZGVyIiksRCYmRC5jaGlsZE5vZGVzW3JlXSYmKEQuY2hpbGRO''@;'; put 'put ''b2Rlc1tyZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8oRC5jaGlsZE5vZGVzW3JlXSwiaGlkZGVuSGVhZGVyIikpLGYmJlomJlouY2hpbGROb2Rlc1tyZV0mJihaLmNoaWxkTm9kZXNbcmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKFouY2hpbGROb2Rlc1tyZV0sImhp''@;'; put 'put ''ZGRlbkhlYWRlciIpKX19aGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpe3ZhciBhPXRoaXM7Y29uc3QgZD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO3JldHVybihoLGYpPT57dmFyIHY7Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6TSx2aWV3OkR9PXRo''@;'; put 'put ''aXMuaG90O2xldCBaPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxsPT09WiYmKFo9aCksZi5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhmLCJoaWRkZW5IZWFkZXIiKSxsbyhmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3R7Y29sc3BhbjpyZSxpc0hpZGRlbjpj''@;'; put 'put ''ZSxpc1BsYWNlaG9sZGVyOmJlLGhlYWRlckNsYXNzTmFtZXM6RWV9PW51bGwhPT0odj1fcyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLFopKSYmdm9pZCAwIT09dj92OntsYWJlbDoiIn07aWYoYmV8fGNlKVRpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYocmU+MSl7dmFyIEJlLHFl''@;'; put 'put ''LHJ0O2NvbnN0e3d0T3ZlcmxheXM6cHR9PUQuX3d0LGR0PW51bGw9PT0oQmU9cHQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8dm9pZCAwPT09QmU/dm9pZCAwOkJlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksSnQ9bnVsbD09PShxZT1wdC5pbmxpbmVTdGFydE92ZXJs''@;'; put 'put ''YXkpfHx2b2lkIDA9PT1xZT92b2lkIDA6cWUuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKTsobnVsbD09PShydD1wdC50b3BPdmVybGF5KXx8dm9pZCAwPT09cnQ/dm9pZCAwOnJ0LmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZikpJiZaPGQmJlRpKGYsImhpZGRlbkhlYWRl''@;'; put 'put ''clRleHQiKTtjb25zdCBDbj1kdHx8SnQ/TWF0aC5taW4ocmUsZC1oKTpyZTtDbj4xJiZmLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsQ24pfWlmKHRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKFosZixmdW5jdGlvbigpe3JldHVybiBhLmdldENvbHVtbkhlYWRlclZhbHVlKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyl9LGwpLCFiZSYmIWNlKXtjb25zdCBwdD1mLnF1ZXJ5U2VsZWN0b3IoImRpdi5yZWxhdGl2ZSIpO3B0JiZFZSYmRWUubGVuZ3RoPjAmJihsbyhwdCx0aGlzLmhvdC5nZXRDb2x1bW5NZXRhKFopLmhlYWRlckNsYXNzTmFtZSksVGkocHQsRWUpKX19fWdldENvbHVtbkhlYWRlclZhbHVl''@;'; put 'put ''KGwsYSl7dmFyIGQ7Y29uc3R7aXNIaWRkZW46aCxpc1BsYWNlaG9sZGVyOmZ9PW51bGwhPT0oZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhhLGwpKSYmdm9pZCAwIT09ZD9kOnt9O3JldHVybiBmfHxoPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihsLGEpfWRlc3Ryb3koKXtHNShE''@;'; put 'put ''bCx0aGlzLG51bGwpLG51bGwhPT1fcyhDNix0aGlzKSYmKF9zKEM2LHRoaXMpLnVuc3Vic2NyaWJlKCksRzUoQzYsdGhpcyxudWxsKSksc3VwZXIuZGVzdHJveSgpfV9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKXtpZighKGwucm93Pj0wfHxsLmNvbDwwKSlyZXR1cm4gX3MoRGws''@;'; put 'put ''dGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwucm93LGwuY29sKX19ZnVuY3Rpb24gSEgoKXt2YXIgYztjb25zdCBsPW51bGw9PT0oYz10aGlzLmhvdCl8fHZvaWQgMD09PWM/dm9pZCAwOmMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7aGlnaGxpZ2h0OmF9''@;'; put 'put ''PWw7aWYoYS5pc0hlYWRlcigpJiZhLmNvbD49MCl7Y29uc3QgaD1fcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCksZj10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7Zi52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0LmNvbD1oLGYu''@;'; put 'put ''dmlzdWFsQ2VsbFJhbmdlLmZyb20uY29sPWgsZi52aXN1YWxDZWxsUmFuZ2UudG8uY29sPWgsZi5jb21taXQoKX19ZnVuY3Rpb24genB0KGMsbCl7dmFyIGE7Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFkKXJldHVybiBjO2NvbnN0e2hpZ2hsaWdodDpofT1k''@;'; put 'put ''LHtuYXZpZ2FibGVIZWFkZXJzOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCksdj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksTT1mP2gucm93Om51bGw9PT0oYT1fcyhGSCx0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucm93LEQ9dj9jOmguY29sLFo9''@;'; put 'put ''TTwwJiZEPj0wO2lmKEc1KEZILHRoaXMsbnVsbCksIVopcmV0dXJuIGM7Y29uc3QgcmU9dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSxjZT10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCksYmU9Y2UtcmUrMSxFZT1fcyhEbCx0aGlzKS5maW5kTGVmdE1v''@;'; put 'put ''c3RDb2x1bW5JbmRleChNLEQpLEJlPV9zKERsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChNLEQpLHFlPUJlLUVlKzE7aWYoRWU8cmUmJkJlPmNlKXJldHVybiBFZTtpZih2KXtsZXQgcnQ9bnVsbDtyZXR1cm4gRWU+PXJlJiZCZT5jZT9xZT5iZT8obC52YWx1ZT0ic3RhcnQiLHJ0''@;'; put 'put ''PUVlKToobC52YWx1ZT0iZW5kIixydD1CZSk6RWU8cmUmJkJlPD1jZSYmKHFlPmJlPyhsLnZhbHVlPSJlbmQiLHJ0PUJlKToobC52YWx1ZT0ic3RhcnQiLHJ0PUVlKSkscnR9cmV0dXJuIEVlPD1yZT9FZTpCZX1mdW5jdGlvbiBVcHQoYyxsLGEpe2NvbnN0IGQ9X3MoRGwsdGhpcykuZ2V0SGVh''@;'; put 'put ''ZGVyVHJlZU5vZGVEYXRhKGwsYyk7aWYoIWQpcmV0dXJuIGM7Y29uc3R7Y29sdW1uQ3Vyc29yOmgsc2VsZWN0aW9uVHlwZTpmLHNlbGVjdGlvbldpZHRoOnZ9PWEse2lzUm9vdDpNLGNvbHNwYW46RH09X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxjKTtpZihmPT09cFgpe2lmKCFN''@;'; put 'put ''KXJldHVybiBkLmNvbHVtbkluZGV4fWVsc2UgaWYoZj09PXozZSYmKEQ+di1ofHwhTSkpcmV0dXJuIG51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gWnB0KGMsbCxhKXtsZXR7Y29sdW1uSGVhZGVyc0NvdW50OmR9PWE7aWYoMCE9PWQpZm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0e3N0''@;'; put 'put ''YXJ0Um93OnYsc3RhcnRDb2w6TSxlbmRSb3c6RCxlbmRDb2w6Wn09bFtmXSxyZT1ELXYrMTtpZih2Pj0wfHwxPT1NLVorMSlicmVhaztmb3IobGV0IGJlPU07YmU8PVo7YmUrKylmb3IobGV0IEVlPXY7RWU8PUQ7RWUrKyl7dmFyIGg7Y29uc3QgQmU9cmUrRWUscWU9YmUtTTswIT09cWUmJiEx''@;'; put 'put ''PT09KG51bGw9PT0oaD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoRWUsYmUpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pc1Jvb3QpJiYoY1tCZV1bcWVdPSIiKX19fWZ1bmN0aW9uIFdwdChjLGwsYSxkKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKSYm''@;'; put 'put ''KGQuY29sdW1uPSEwKX1mdW5jdGlvbiBZcHQoYyxsKXtjb25zdCBhPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFhKXJldHVybjtHNShiQSx0aGlzLGwuY2xvbmUoKSksRzUoUEgsdGhpcywhMCk7Y29uc3R7c2VsZWN0aW9uOmR9PXRoaXMuaG90LGg9ZC5pc1Nl''@;'; put 'put ''bGVjdGVkKCk/ZC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51bGwsZj1bXSx7Y29sdW1uSW5kZXg6dixvcmlnQ29sc3BhbjpNfT1hLEQ9IWQuaW5JblNlbGVjdGlvbihsKTtjLnNoaWZ0S2V5JiZoP2wuY29sPGguZnJvbS5jb2w/Zi5wdXNoKGguZ2V0VG9wRW5kQ29ybmVyKCkuY29s''@;'; put 'put ''LHYsbC5yb3cpOmYucHVzaChsLmNvbD5oLmZyb20uY29sP2guZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2w6dix2K00tMSxsLnJvdyk6KFVPKGMpfHxIbShjKSYmRHx8dGZlKGMpKSYmZi5wdXNoKHYsditNLTEsbC5yb3cpLGQuc2VsZWN0Q29sdW1ucyguLi5mKX1mdW5jdGlvbiBHcHQoYyxsLGEs''@;'; put 'put ''ZCl7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8ZC5jb2x1bW4pcmV0dXJuO2NvbnN0IGg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCk7aWYoIWgpcmV0dXJuO2NvbnN0e2NvbHVtbkluZGV4OmYsb3JpZ0NvbHNwYW46dn09aCxNPXRoaXMuaG90LmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCksRD1NLmdldFRvcFN0YXJ0Q29ybmVyKCksWj1NLmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOnJlfT1NO2QuY29sdW1uPSEwLGQuY2VsbD0hMDtjb25zdCBjZT1bXSxiZT1rcyhsLnJvdywtMS8wLC0xKTtsLmNvbDxyZS5jb2w/Y2UucHVzaChaLmNvbCxmLGJl''@;'; put 'put ''KTpjZS5wdXNoKGwuY29sPnJlLmNvbD9ELmNvbDpmLGYrdi0xLGJlKSx0aGlzLmhvdC5zZWxlY3Rpb24uc2VsZWN0Q29sdW1ucyguLi5jZSl9ZnVuY3Rpb24gJHB0KCl7RzUoUEgsdGhpcywhMSl9ZnVuY3Rpb24gS3B0KCl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpjfT10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpO2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fCFfcyhQSCx0aGlzKXx8IWMpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZD1sLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCx7''@;'; put 'put ''Y29sdW1uSW5kZXg6aCxvcmlnQ29sc3BhbjpmfT1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoX3MoYkEsdGhpcykucm93LF9zKGJBLHRoaXMpLmNvbCk7aWYobC5zZXRIaWdobGlnaHQoX3MoYkEsdGhpcykpLGY+bC5nZXRXaWR0aCgpfHxoPGF8fGgrZi0xPmQpe2NvbnN0IHY9''@;'; put 'put ''X3MoRGwsdGhpcykuZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChrcyhhLGgsaCtmLTEpLGtzKGQsaCxoK2YtMSkpO2wuaGlnaGxpZ2h0LnJvdz12LGwuaGlnaGxpZ2h0LmNvbD1sLmZyb20uY29sfX1mdW5jdGlvbiBxcHQoYyl7Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCksYT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytjLnJvdyxsLmNvbCtjLmNvbCk7aWYoIShhLmlzSGVhZGVyKCkmJmEuY29sPj0wKSlyZXR1cm47Y29uc3QgaD1fcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCks''@;'; put 'put ''Zj1fcyhEbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpO2lmKGMuY29sPDApe2NvbnN0IE09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwuY29sPj1oJiZsLmNvbDw9Zj9oLTE6ZiwtMSk7Yy5jb2w9bnVsbD09''@;'; put 'put ''PU0/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxsLmNvbCk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoTSxsLmNvbCktMSwxKX1lbHNlIGlmKGMuY29sPjApe2NvbnN0IE09dGhpcy5ob3QuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwuY29sPj1oJiZsLmNvbDw9Zj9mKzE6aCwxKTtjLmNvbD1udWxsPT09TT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlz''@;'; put 'put ''LmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwuY29sLE0pLTEsMSl9fWZ1bmN0aW9uIFhwdChjLGwsYSl7Y29uc3QgZD1jLnJvdyxoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKHtyb3c6ZCxjb2w6Yy5jb2x9KSxmPXRoaXMuX2dldEhlYWRlclRy''@;'; put 'put ''ZWVOb2RlRGF0YUJ5Q29vcmRzKHtyb3c6ZCxjb2w6bC5jb2x9KTtHNShGSCx0aGlzLGEuY2xvbmUoKSksbC5jb2w8Yy5jb2w/KGgmJihjLmNvbD1oLmNvbHVtbkluZGV4K2gub3JpZ0NvbHNwYW4tMSksZiYmKGwuY29sPWYuY29sdW1uSW5kZXgpKTpsLmNvbD49Yy5jb2wmJihoJiYoYy5jb2w9''@;'; put 'put ''aC5jb2x1bW5JbmRleCksZiYmKGwuY29sPWYuY29sdW1uSW5kZXgrZi5vcmlnQ29sc3Bhbi0xKSl9ZnVuY3Rpb24gSnB0KGMpe2lmKF9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCk+MCl7Yy5sZW5ndGg9MDtmb3IobGV0IGw9MDtsPF9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCk7bCsr''@;'; put 'put ''KWMucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShsKSl9fWZ1bmN0aW9uIFFwdChjKXtjb25zdCBsPV9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCk7bGV0IGE9Yy5zdGFydENvbHVtbixkPSEhbDtmb3IobGV0IGg9MDtoPGw7aCsrKXtjb25zdCBmPV9zKERsLHRoaXMpLmZpbmRM''@;'; put 'put ''ZWZ0TW9zdENvbHVtbkluZGV4KGgsYy5zdGFydENvbHVtbiksdj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKGY+PTAmJihkPSExKSxtMSh2KSYmdjxjLnN0YXJ0Q29sdW1uKXthPXY7YnJlYWt9fWMuc3RhcnRDb2x1bW49ZD9f''@;'; put 'put ''cyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoMCxhKS5jb2x1bW5JbmRleDphfWZ1bmN0aW9uIGU0dChjLGwpe2NvbnN0IGE9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKGwpO3JldHVybiBjPmE/YzphfWZ1bmN0aW9uIHQ0dChjLGwsYSl7dmFyIGQ7Y29uc3R7bGFiZWw6aH09bnVs''@;'; put 'put ''bCE9PShkPV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGwpKSYmdm9pZCAwIT09ZD9kOntsYWJlbDoiIn07cmV0dXJuIGh9ZnVuY3Rpb24gbjR0KGMsbCl7aWYoYzwwKXJldHVybiB0aGlzLmhvdC5nZXRDZWxsKGMsX3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5k''@;'; put 'put ''ZXgoYyxsKSwhMCl9ZnVuY3Rpb24gcjR0KCl7dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBpNHQoYyxsKXtsfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIHlBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBhNHQoYyl7dmFyIGw9ZnVuY3Rpb24gbzR0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBsNHQ9Y2xhc3MgczR0e2NvbnN0cnVjdG9yKGwsYSl7eUEodGhpcywiaG90Iix2b2lkIDApLHlBKHRoaXMsImRhdGEiLG51bGwpLHlBKHRoaXMsInBsdWdpbiIsdm9pZCAwKSx5QSh0aGlzLCJwYXJl''@;'; put 'put ''bnRSZWZlcmVuY2UiLG5ldyBXZWFrTWFwKSx5QSh0aGlzLCJjYWNoZSIse2xldmVsczpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH0pLHRoaXMuaG90PWEsdGhpcy5wbHVnaW49bH1zZXREYXRhKGwpe3RoaXMuZGF0YT1sfWdldERhdGEoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5kYXRhfWdldFJhd1NvdXJjZURhdGEoKXtsZXQgbD1udWxsO3JldHVybiB0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YSgpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsfXVwZGF0ZVdpdGhEYXRhKGwp''@;'; put 'put ''e3RoaXMuc2V0RGF0YShsKSx0aGlzLnJld3JpdGVDYWNoZSgpfXJld3JpdGVDYWNoZSgpe3RoaXMuY2FjaGU9e2xldmVsczpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH0sR2EoMCx0aGlzLmRhdGEubGVuZ3RoLTEsbD0+e3RoaXMuY2FjaGVOb2RlKHRoaXMu''@;'; put 'put ''ZGF0YVtsXSwwLG51bGwpfSl9Y2FjaGVOb2RlKGwsYSxkKXt0aGlzLmNhY2hlLmxldmVsc1thXXx8KHRoaXMuY2FjaGUubGV2ZWxzW2FdPVtdLHRoaXMuY2FjaGUubGV2ZWxDb3VudCs9MSksdGhpcy5jYWNoZS5sZXZlbHNbYV0ucHVzaChsKSx0aGlzLmNhY2hlLnJvd3MucHVzaChsKSx0aGlz''@;'; put 'put ''LmNhY2hlLm5vZGVJbmZvLnNldChsLHtwYXJlbnQ6ZCxyb3c6dGhpcy5jYWNoZS5yb3dzLmxlbmd0aC0xLGxldmVsOmF9KSx0aGlzLmhhc0NoaWxkcmVuKGwpJiZZbihsLl9fY2hpbGRyZW4saD0+e3RoaXMuY2FjaGVOb2RlKGgsYSsxLGwpfSl9Z2V0RGF0YU9iamVjdChsKXtyZXR1cm4gbnVs''@;'; put 'put ''bD09bD9udWxsOnRoaXMuY2FjaGUucm93c1tsXX1yZWFkVHJlZU5vZGVzKGwsYSxkLGgpe2xldCBmPSExLHY9YTtpZihpc05hTih2KSYmdi5lbmQpcmV0dXJuIHY7bGV0IE09bDtyZXR1cm4gTXx8KE09e19fY2hpbGRyZW46dGhpcy5kYXRhfSxmPSEwLHYtPTEpLG51bGwhPWQmJnY9PT1kP3ty''@;'; put 'put ''ZXN1bHQ6TSxlbmQ6ITB9Om51bGwhPWgmJk09PT1oP3tyZXN1bHQ6dixlbmQ6ITB9Oih2Kz0xLE0uX19jaGlsZHJlbiYmWW4oTS5fX2NoaWxkcmVuLEQ9PntpZih0aGlzLnBhcmVudFJlZmVyZW5jZS5zZXQoRCxmP251bGw6TSksdj10aGlzLnJlYWRUcmVlTm9kZXMoRCx2LGQsaCksaXNOYU4o''@;'; put 'put ''dikmJnYuZW5kKXJldHVybiExfSksdil9bW9ja1BhcmVudCgpe2NvbnN0IGw9dGhpcy5tb2NrTm9kZSgpO3JldHVybiBsLl9fY2hpbGRyZW49dGhpcy5kYXRhLGx9bW9ja05vZGUoKXtjb25zdCBsPXt9O3JldHVybiBYbyh0aGlzLmRhdGFbMF0sKGEsZCk9PntsW2RdPW51bGx9KSxsfWdldFJv''@;'; put 'put ''d0luZGV4KGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkucm93fWdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpe2xldCBhPW51bGw7YT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKTtjb25zdCBkPXRoaXMuZ2V0Um93UGFyZW50KGwpO3Jl''@;'; put 'put ''dHVybiBudWxsPT1kP3RoaXMuZGF0YS5pbmRleE9mKGEpOmQuX19jaGlsZHJlbi5pbmRleE9mKGEpfWNvdW50QWxsUm93cygpe3JldHVybiB0aGlzLmNvdW50Q2hpbGRyZW4oe19fY2hpbGRyZW46dGhpcy5kYXRhfSl9Y291bnRDaGlsZHJlbihsKXtsZXQgYT0wLGQ9bDtyZXR1cm4gaXNOYU4o''@;'; put 'put ''ZCl8fChkPXRoaXMuZ2V0RGF0YU9iamVjdChkKSksZCYmZC5fX2NoaWxkcmVuPyhZbihkLl9fY2hpbGRyZW4saD0+e2ErPTEsaC5fX2NoaWxkcmVuJiYoYSs9dGhpcy5jb3VudENoaWxkcmVuKGgpKX0pLGEpOjB9Z2V0Um93UGFyZW50KGwpe2xldCBhO3JldHVybiBhPWlzTmFOKGwpP2w6dGhp''@;'; put 'put ''cy5nZXREYXRhT2JqZWN0KGwpLHRoaXMuZ2V0Um93T2JqZWN0UGFyZW50KGEpfWdldFJvd09iamVjdFBhcmVudChsKXtyZXR1cm4gbCYmIm9iamVjdCI9PXR5cGVvZiBsP3RoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnBhcmVudDpudWxsfWdldFJvd0xldmVsKGwpe2xldCBhPW51bGw7cmV0''@;'; put 'put ''dXJuIGE9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksYT90aGlzLmdldFJvd09iamVjdExldmVsKGEpOm51bGx9Z2V0Um93T2JqZWN0TGV2ZWwobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5sZXZlbH1oYXNDaGlsZHJlbihsKXtsZXQg''@;'; put 'put ''YT1sO3JldHVybiBpc05hTihhKXx8KGE9dGhpcy5nZXREYXRhT2JqZWN0KGEpKSwhKCFhLl9fY2hpbGRyZW58fCFhLl9fY2hpbGRyZW4ubGVuZ3RoKX1pc0NoaWxkKGwpe3JldHVybiBudWxsIT09dGhpcy5nZXRSb3dQYXJlbnQobCl9Z2V0Q2hpbGQobCxhKXt2YXIgZDtyZXR1cm4obnVsbD09''@;'; put 'put ''PShkPWwuX19jaGlsZHJlbil8fHZvaWQgMD09PWQ/dm9pZCAwOmRbYV0pfHxudWxsfWlzUm93SGlnaGVzdExldmVsKGwpe3JldHVybiF0aGlzLmlzQ2hpbGQobCl9aXNQYXJlbnQobCl7dmFyIGE7bGV0IGQ9bDtyZXR1cm4gaXNOYU4oZCl8fChkPXRoaXMuZ2V0RGF0YU9iamVjdChkKSksZCYm''@;'; put 'put ''ISFkLl9fY2hpbGRyZW4mJjAhPT0obnVsbD09PShhPWQuX19jaGlsZHJlbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubGVuZ3RoKX1hZGRDaGlsZChsLGEpe2xldCBkPWE7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixsLGQpO2xldCBoPW51bGw7bCYmKGg9dGhpcy5nZXRSb3dJ''@;'; put 'put ''bmRleChsKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsaCt0aGlzLmNvdW50Q2hpbGRyZW4obCkrMSwxKTtsZXQgZj1sO2x8fChmPXRoaXMubW9ja1BhcmVudCgpKSxmLl9fY2hpbGRyZW58fChmLl9fY2hpbGRyZW49W10pLGR8fChkPXRoaXMubW9ja05vZGUoKSksZi5f''@;'; put 'put ''X2NoaWxkcmVuLnB1c2goZCksdGhpcy5yZXdyaXRlQ2FjaGUoKTtjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXgoZCk7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyh2LDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsdiwxKSx0aGlzLmhvdC5ydW5Ib29r''@;'; put 'put ''cygiYWZ0ZXJBZGRDaGlsZCIsbCxkKX1hZGRDaGlsZEF0SW5kZXgobCxhLGQpe2xldCBmLGg9ZDtpZihofHwoaD10aGlzLm1vY2tOb2RlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxoLGEpLGwpe2NvbnN0IE09dGhpcy5nZXRSb3dJbmRleChsKSthKzE7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsTSwxKSxsLl9fY2hpbGRyZW4uc3BsaWNlKGEsbnVsbCxoKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0lu''@;'; put 'put ''ZGV4V2l0aGluUGFyZW50KGwpLCJfX2NoaWxkcmVuIixsLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhNLDEpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLE0sMSksZj1NfWVsc2UgdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsYSwxLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMucGx1Z2luLmVuYWJsZUNv''@;'; put 'put ''cmVBUElNb2RpZmllcnMoKSxmPXRoaXMuZ2V0Um93SW5kZXgodGhpcy5kYXRhW2FdKTtoPXRoaXMuZ2V0RGF0YU9iamVjdChmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBZGRDaGlsZCIsbCxoLGEpfWFkZFNpYmxpbmcobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJiZWxvdyI7Y29uc3QgZD10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCksaD10aGlzLmdldFJvd1BhcmVudChkKSxmPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZCk7c3dpdGNoKGEpe2Nhc2UiYmVsb3ciOnRoaXMuYWRkQ2hpbGRBdElu''@;'; put 'put ''ZGV4KGgsZisxLG51bGwpO2JyZWFrO2Nhc2UiYWJvdmUiOnRoaXMuYWRkQ2hpbGRBdEluZGV4KGgsZixudWxsKX19ZGV0YWNoRnJvbVBhcmVudChsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9bnVsbDtjb25zdCBo''@;'; put 'put ''PVtdO0FycmF5LmlzQXJyYXkobCk/KEdhKGxbMF0sbFsyXSxiZT0+e2NvbnN0IEVlPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhiZSk7aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChFZSkpfSksR2EoMCxoLmxlbmd0aC0yLGJlPT57dGhpcy5kZXRhY2hGcm9tUGFyZW50KGhbYmVdLCExKX0p''@;'; put 'put ''LGQ9aFtoLmxlbmd0aC0xXSk6ZD1sO2NvbnN0IGY9dGhpcy5nZXRSb3dJbmRleChkKSx2PXRoaXMuY291bnRDaGlsZHJlbihkKSxNPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZCksRD10aGlzLmdldFJvd1BhcmVudChkKSxaPXRoaXMuZ2V0Um93UGFyZW50KEQpLHJlPXRoaXMuZ2V0''@;'; put 'put ''Um93SW5kZXgoWik7bGV0IGNlPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURldGFjaENoaWxkIixELGQpLG51bGwhPU0pe2NvbnN0IGJlPUFycmF5LmZyb20obmV3IEFycmF5KGYrdisxKS5rZXlzKCkpLnNwbGljZSgtMSoodisxKSk7aWYodGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZVJlbW92ZVJvdyIsZix2KzEsYmUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksRC5fX2NoaWxkcmVuLnNwbGljZShNLDEpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixmLHYrMSxiZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxaKXtj''@;'; put 'put ''ZT1yZSt0aGlzLmNvdW50Q2hpbGRyZW4oWik7Y29uc3QgRWU9dGhpcy5nZXRDaGlsZChaLHRoaXMuY291bnRDaGlsZHJlbihaKS0xKSxCZT10aGlzLmdldFJvd0luZGV4KEVlKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixCZSsxLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5O''@;'; put 'put ''YW1lKSxaLl9fY2hpbGRyZW4ucHVzaChkKX1lbHNlIGNlPXRoaXMuaG90LmNvdW50Um93cygpKzEsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsY2UtMix2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5kYXRhLnB1c2goZCl9dGhpcy5yZXdyaXRlQ2FjaGUoKSx0''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLGNlLTIsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRldGFjaENoaWxkIixELGQsdGhpcy5nZXRSb3dJbmRleChkKSksYSYmdGhpcy5ob3QucmVuZGVyKCl9ZmlsdGVyRGF0YShsLGEs''@;'; put 'put ''ZCl7Y29uc3QgaD1bXTtZbihkLGY9PntoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KGYpKX0pLFluKGgsZj0+e2NvbnN0IHY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChmKSxNPXRoaXMuZ2V0Um93UGFyZW50KGYpO251bGw9PT1NP3RoaXMuZGF0YS5zcGxpY2UodiwxKTpNLl9fY2hp''@;'; put 'put ''bGRyZW4uc3BsaWNlKHYsMSl9KSx0aGlzLnJld3JpdGVDYWNoZSgpfXNwbGljZURhdGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREYXRhT2JqZWN0KGwtMSk7bGV0IGY9bnVsbCx2PWw7aCYmaC5fX2NoaWxkcmVuJiYwPT09aC5fX2NoaWxkcmVuLmxlbmd0aD8oZj1oLHY9MCk6bDx0aGlzLmNv''@;'; put 'put ''dW50QWxsUm93cygpJiYoZj10aGlzLmdldFJvd1BhcmVudChsKSx2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCkpLGY/ZD9mLl9fY2hpbGRyZW4uc3BsaWNlKHYsYSwuLi5kKTpmLl9fY2hpbGRyZW4uc3BsaWNlKHYsYSk6ZD90aGlzLmRhdGEuc3BsaWNlKHYsYSwuLi5kKTp0aGlz''@;'; put 'put ''LmRhdGEuc3BsaWNlKHYsYSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zeW5jUm93V2l0aFJhd1NvdXJjZShsKXtsZXQgYT1sLGQ9YTtkb3tkPXRoaXMuZ2V0Um93UGFyZW50KGQpLG51bGwhPT1kJiYoYT1kKX13aGlsZShudWxsIT09ZCk7dGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmll''@;'; put 'put ''cnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksIl9fY2hpbGRyZW4iLGEuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5zeW5jUm93V2l0aFJhd1NvdXJjZSIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKX1t''@;'; put 'put ''b3ZlUm93KGwsYSxkLGgpe2NvbnN0IGY9YT09PXRoaXMuaG90LmNvdW50Um93cygpLHY9dGhpcy5nZXRSb3dQYXJlbnQobCksTT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpLEQ9di5fX2NoaWxkcmVuLnNsaWNlKE0sTSsxKSxaPWw+YTtsZXQgcmU9dGhpcy5nZXRSb3dQYXJlbnQo''@;'; put 'put ''Zj9hLTE6YSk7bnVsbD09cmUmJihyZT10aGlzLmdldFJvd1BhcmVudChhLTEpKSxudWxsPT1yZSYmKHJlPXRoaXMuZ2V0RGF0YU9iamVjdChhLTEpKSxyZT9yZS5fX2NoaWxkcmVufHwocmUuX19jaGlsZHJlbj1bXSk6KHJlPXRoaXMuZ2V0RGF0YU9iamVjdChhKSxyZS5fX2NoaWxkcmVuPVtd''@;'; put 'put ''KTtjb25zdCBjZT1mfHxkfHxoP3JlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksYmU9dj09PXJlO3JlLl9fY2hpbGRyZW4uc3BsaWNlKGNlLDAsRFswXSksdi5fX2NoaWxkcmVuLnNwbGljZShNKyhaJiZiZT8xOjApLDEpLHRoaXMuc3luY1Jvd1dp''@;'; put 'put ''dGhSYXdTb3VyY2UodiksYmV8fHRoaXMuc3luY1Jvd1dpdGhSYXdTb3VyY2UocmUpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfXVudHJhbnNsYXRl''@;'; put 'put ''VHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS51bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH19O2Z1bmN0aW9uIFdtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYzR0KGMpe3ZhciBsPWZ1bmN0aW9uIHU0dChj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qgb2VlPWNsYXNzIGQ0dHtjb25zdHJ1Y3RvcihsLGEpe1dtZSh0aGlzLCJob3QiLHZvaWQgMCksV21lKHRoaXMsInBsdWdpbiIsdm9pZCAwKSx0aGlzLmhvdD1hLHRoaXMucGx1''@;'; put 'put ''Z2luPWx9fTtjbGFzcyAkNSBleHRlbmRzIG9lZXtzdGF0aWMgZ2V0IENTU19DTEFTU0VTKCl7cmV0dXJue2luZGljYXRvckNvbnRhaW5lcjoiaHRfbmVzdGluZ0xldmVscyIscGFyZW50OiJodF9uZXN0aW5nUGFyZW50IixpbmRpY2F0b3I6Imh0X25lc3RpbmdMZXZlbCIsZW1wdHlJbmRpY2F0''@;'; put 'put ''b3I6Imh0X25lc3RpbmdMZXZlbF9lbXB0eSIsYnV0dG9uOiJodF9uZXN0aW5nQnV0dG9uIixleHBhbmRCdXR0b246Imh0X25lc3RpbmdFeHBhbmQiLGNvbGxhcHNlQnV0dG9uOiJodF9uZXN0aW5nQ29sbGFwc2UifX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5kYXRhTWFuYWdl''@;'; put 'put ''cj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST10aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPW51bGx9YXBwZW5kTGV2ZWxJbmRpY2F0b3JzKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9dGhp''@;'; put 'put ''cy5kYXRhTWFuYWdlci5nZXRSb3dMZXZlbChkKSxmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKSx2PWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkRJViIpWzBdLE09di5xdWVyeVNlbGVjdG9yKCJzcGFuLnJvd0hlYWRlciIpLEQ9di5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3Ne''@;'; put 'put ''PSJodF9uZXN0aW5nIl0nKSxaPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoWW4oRCxyZT0+e3JlJiZ2LnJlbW92ZUNoaWxkKHJlKX0pLFRpKGEsJDUuQ1NTX0NMQVNTRVMuaW5kaWNhdG9yQ29udGFpbmVyKSxoKXtjb25zdHtyb290RG9jdW1lbnQ6cmV9PXRoaXMuaG90LGNl''@;'; put 'put ''PU0uY2xvbmVOb2RlKCEwKTt2LmlubmVySFRNTD0iIixHYSgwLGgtMSwoKT0+e2NvbnN0IGJlPXJlLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtUaShiZSwkNS5DU1NfQ0xBU1NFUy5lbXB0eUluZGljYXRvciksdi5hcHBlbmRDaGlsZChiZSl9KSx2LmFwcGVuZENoaWxkKGNlKX1pZih0aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpKXtjb25zdCByZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7WiYmdm8ocmUsW043KCldKSxUaShhLCQ1LkNTU19DTEFTU0VTLnBhcmVudCksdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/''@;'; put 'put ''KFRpKHJlLGAkeyQ1LkNTU19DTEFTU0VTLmJ1dHRvbn0gJHskNS5DU1NfQ0xBU1NFUy5leHBhbmRCdXR0b259YCksWiYmdm8oYSxbTjIoITEpXSkpOihUaShyZSxgJHskNS5DU1NfQ0xBU1NFUy5idXR0b259ICR7JDUuQ1NTX0NMQVNTRVMuY29sbGFwc2VCdXR0b259YCksWiYmdm8oYSxbTjIo''@;'; put 'put ''ITApXSkpLHYuYXBwZW5kQ2hpbGQocmUpfX11cGRhdGVSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO2F8fChhPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3VudCk7Y29uc3QgZD10aGlzLmhvdC52aWV3LmdldFN0eWxlc0hhbmRsZXIoKTtsZXQgaD0xMTtkLmlzQ2xhc3NpY1RoZW1l''@;'; put 'put ''KCl8fChoPTIqZC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWhvcml6b250YWwtcGFkZGluZyIpKSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9TWF0aC5tYXgoNTAsaCsxMCphKzI1KSx0aGlzLmhvdC5yZW5kZXIoKX19Y29uc3QgWW1lPSQ1LGY0dD1jbGFzcyBoNHQgZXh0ZW5kcyBvZWV7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhKXt2YXIgZDtzdXBlcihsLGEpLGQ9dGhpcyx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2VkUm93cz1bXSx0aGlzLmNvbGxhcHNlZFJvd3NTdGFzaD17c3Rhc2g6ZnVuY3Rpb24oKXtsZXQgaD1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2QubGFzdENvbGxhcHNlZFJvd3M9ZC5jb2xsYXBzZWRSb3dzLnNsaWNlKDApLGQuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLGgpfSxzaGlmdFN0YXNoOmZ1bmN0aW9uKGgsZil7bGV0''@;'; put 'put ''IHY9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7bnVsbD09ZiYmKGY9MS8wKSxZbihkLmxhc3RDb2xsYXBzZWRSb3dzLChNLEQpPT57TT49aCYmTTxmJiYoZC5sYXN0Q29sbGFwc2VkUm93c1tEXT1NK3YpfSl9LGFwcGx5U3Rhc2g6ZnVu''@;'; put 'put ''Y3Rpb24oKXtkLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pLGQubGFzdENvbGxhcHNlZFJvd3M9dm9pZCAwfSx0cmltU3Rhc2g6KGgsZik9PntHYSho''@;'; put 'put ''LGgrZi0xLHY9Pntjb25zdCBNPXRoaXMubGFzdENvbGxhcHNlZFJvd3MuaW5kZXhPZih2KTtNPi0xJiZ0aGlzLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShNLDEpfSl9fX1jb2xsYXBzZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCx2PW51bGwsTT1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLHY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRl''@;'; put 'put ''eChmKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLHY9bCksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmWW4oZi5fX2NoaWxkcmVuLEQ9PntoLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChEKSl9KSxNPXRoaXMuY29sbGFwc2VSb3dzKGgs''@;'; put 'put ''ITAsITEpLGQmJnRoaXMudHJpbVJvd3MoTSksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSwtMT09PXRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpJiZ0aGlzLmNvbGxhcHNlZFJvd3MucHVzaCh2KSxNfWNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO1luKGwsZj0+e2gucHVzaCguLi50aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZiwhMSwh''@;'; put 'put ''MSkpfSksZCYmdGhpcy50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlUm93KGwpe3RoaXMuY29sbGFwc2VSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1jb2xsYXBzZVJvd3MobCl7''@;'; put 'put ''bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gWW4obCxmPT57aC5wdXNoKGYpLGEmJnRo''@;'; put 'put ''aXMuY29sbGFwc2VDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksaH1jb2xsYXBzZUNoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJlluKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLHY9Pntjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodik7YS5wdXNoKE0pLHRo''@;'; put 'put ''aXMuY29sbGFwc2VDaGlsZFJvd3MoTSxhKX0pLGgmJnRoaXMudHJpbVJvd3MoYSl9ZXhwYW5kUm93KGwpe3RoaXMuZXhwYW5kUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9ZXhwYW5kUm93cyhsKXtsZXQgYT0hKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBZbihsLGY9PntoLnB1c2goZiksYSYmdGhpcy5leHBhbmRD''@;'; put 'put ''aGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxofWV4cGFuZENoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1sz''@;'; put 'put ''XSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJlluKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLHY9PntpZighdGhpcy5pc0FueVBhcmVudENvbGxhcHNlZCh2KSl7Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJv''@;'; put 'put ''d0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmV4cGFuZENoaWxkUm93cyhNLGEpfX0pLGgmJnRoaXMudW50cmltUm93cyhhKX1leHBhbmRDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLE09bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0''@;'; put 'put ''RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuY29sbGFwc2VkUm93cy5zcGxpY2UodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YodiksMSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmWW4oZi5fX2NoaWxkcmVuLEQ9Pntjb25zdCBaPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5k''@;'; put 'put ''ZXgoRCk7aC5wdXNoKFopfSksTT10aGlzLmV4cGFuZFJvd3MoaCwhMCwhMSksZCYmdGhpcy51bnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksTX1leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107WW4obCxmPT57aC5wdXNoKC4uLnRoaXMuZXhwYW5kQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgp''@;'; put 'put ''LGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107WW4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4o''@;'; put 'put ''YSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107WW4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGEpLHRo''@;'; put 'put ''aXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCl9dW50cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlv''@;'; put 'put ''bigoKT0+e1luKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITEpfSl9LCEwKX1hcmVDaGlsZHJlbkNvbGxhcHNlZChsKXtsZXQgYT1pc05hTihsKT9sOnRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxkPSEwO3JldHVybiBudWxs''@;'; put 'put ''PT09YSYmKGE9e19fY2hpbGRyZW46dGhpcy5kYXRhTWFuYWdlci5kYXRhfSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihhKSYmWW4oYS5fX2NoaWxkcmVuLGg9Pntjb25zdCBmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaCk7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJv''@;'; put 'put ''d3NNYXAuZ2V0VmFsdWVBdEluZGV4KGYpKXJldHVybiBkPSExLCExfSksZH1pc0FueVBhcmVudENvbGxhcHNlZChsKXtsZXQgYT1sO2Zvcig7bnVsbCE9PWE7KXthPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEpO2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChh''@;'; put 'put ''KTtpZih0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihkKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX10b2dnbGVTdGF0ZShsLGEpe2lmKGEuY29sPj0wKXJldHVybjtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhhLnJvdyk7cG8obC50YXJnZXQsWW1lLkNTU19DTEFTU0VTLmJ1dHRv''@;'; put 'put ''bikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3RoaXMuZXhwYW5kQ2hpbGRyZW4oZCk6dGhpcy5jb2xsYXBzZUNoaWxkcmVuKGQpLEIyKGwpKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpfXVudHJhbnNsYXRlVHJpbW1lZFJv''@;'; put 'put ''dyhsKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cobCl9cmVuZGVyQW5kQWRqdXN0KCl7dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX19O3ZhciBHbWU9bmV3IFdlYWtNYXA7Y29uc3QgQzR0PWNsYXNzIHc0dCBleHRlbmRzIG9lZXtjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbTR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2NHQoYyl7dmFyIGw9ZnVuY3Rpb24gYjR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo''@;'; put 'put ''dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu''@;'; put 'put ''ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0''@;'; put 'put ''YU1hbmFnZXIiLHRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyKSxmdW5jdGlvbiBwNHQoYyxsLGEpeyhmdW5jdGlvbiBnNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i''@;'; put 'put ''amVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLEdtZSx7cm93X2Fib3ZlOihsLGEpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6KGwsYSk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoYVth''@;'; put 'put ''Lmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSl9YXBwZW5kT3B0aW9ucyhsKXtjb25zdCBhPVt7a2V5OiJhZGRfY2hpbGQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFxKX0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNs''@;'; put 'put ''YXRlVHJpbW1lZFJvdyh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKVswXSksaD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCk7dGhpcy5kYXRhTWFuYWdlci5hZGRDaGlsZChoKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO3JldHVy''@;'; put 'put ''biFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtrZXk6ImRldGFjaF9mcm9tX3BhcmVudCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRy''@;'; put 'put ''YW5zbGF0ZWRQaHJhc2Uoa3EpfSxjYWxsYmFjazooKT0+e3RoaXMuZGF0YU1hbmFnZXIuZGV0YWNoRnJvbVBhcmVudCh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSl9LGRpc2FibGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxoPXRoaXMuZGF0YU1hbmFnZXIu''@;'; put 'put ''dHJhbnNsYXRlVHJpbW1lZFJvdyhkWzBdKTtyZXR1cm4hdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoaCl8fCFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKCkubWF4Um93c319LHtuYW1lOiItLS0tLS0tLS0ifV07cmV0dXJuIEdhKDAsbC5pdGVtcy5sZW5ndGgtMSxkPT57aWYoMD09PWQpcmV0dXJuIFluKGEsKGgsZik9PntsLml0ZW1zLnNwbGljZShkK2YsMCxoKX0pLCExfSksdGhpcy5tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpfW1v''@;'; put 'put ''ZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl7cmV0dXJuIEdhKDAsbC5pdGVtcy5sZW5ndGgtMSxhPT57Y29uc3QgZD1mdW5jdGlvbiB5NHQoYyxsKXtyZXR1cm4gYy5nZXQoZnVuY3Rpb24gXzR0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oYyxsKSl9KEdtZSx0aGlzKVtsLml0ZW1zW2FdLmtleV07bnVsbCE9ZCYmKGwuaXRlbXNbYV0uY2FsbGJhY2s9ZCl9KSxsfX07''@;'; put 'put ''ZnVuY3Rpb24gTkgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFM0dChjKXt2YXIgbD1mdW5jdGlvbiBNNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHg0dHtjb25zdHJ1Y3RvcihsKXtOSCh0aGlzLCJwbHVnaW4i''@;'; put 'put ''LHZvaWQgMCksTkgodGhpcywiaG90Iix2b2lkIDApLE5IKHRoaXMsImRhdGFNYW5hZ2VyIix2b2lkIDApLE5IKHRoaXMsImNvbGxhcHNpbmdVSSIsdm9pZCAwKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZGF0YU1hbmFnZXI9bC5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNp''@;'; put 'put ''bmdVST1sLmNvbGxhcHNpbmdVSX1vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl7aWYodGhpcy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe3Jvd3M6bCxmaW5hbEluZGV4OmEsZHJvcEluZGV4OmQsbW92ZVBvc3NpYmxlOmh9KSlyZXR1cm4hMTt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9''@;'; put 'put ''ITE7Y29uc3Qgdj1kPT09dGhpcy5ob3QuY291bnRSb3dzKCksTT12P3RoaXMuaG90LmNvdW50U291cmNlUm93cygpOnRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkKTtsZXQgRD0hMDtjb25zdCBaPWwubWFwKEJlPT57aWYoIUQpcmV0dXJuITE7Y29uc3QgcWU9dGhpcy5k''@;'; put 'put ''YXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KEJlKTtyZXR1cm4gRD10aGlzLnNob3VsZEFsbG93TW92aW5nKHFlLE0pLHFlfSkscmU9LTE9PT1aLmluZGV4T2YoTSk7aWYoIUR8fCFyZSlyZXR1cm4hMTtjb25zdCBjZT10aGlzLmdldEJhc2VQYXJlbnQoWiksYmU9dGhpcy5nZXRUYXJn''@;'; put 'put ''ZXRQYXJlbnQodixNKSxFZT1jZT09PWJlO3JldHVybiB0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoYmUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBh''@;'; put 'put ''cmVudHNMb2NhdGlvbnMoWixNLEVlKSx0aGlzLm1vdmVSb3dzKFosTSxiZSksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEoWixNKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCxoJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMobCxkKSwhMX1kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcobCl7Y29uc3R7cm93czphLGZpbmFsSW5kZXg6ZCxk''@;'; put 'put ''cm9wSW5kZXg6aCxtb3ZlUG9zc2libGU6Zn09bDtsZXQgdj0hMTtyZXR1cm4geWMoaCkmJihpbChnbGBTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9kIGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgyMAogICAgICB3aGVuIHRo''@;'; put 'put ''ZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGEsZCxoLGYsITEpLHY9ITApLHZ9c2hvdWxkQWxsb3dNb3ZpbmcobCxhKXtyZXR1cm4hKHRoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIuaXNQYXJlbnQobCl8fHRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCl8fGw9PT1hfHwwPT09YSl9Z2V0QmFzZVBhcmVudChsKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobFswXSl9Z2V0VGFyZ2V0UGFyZW50KGwsYSl7bGV0IGQ9''@;'; put 'put ''dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobD9hLTE6YSk7cmV0dXJuIG51bGw9PWQmJihkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEtMSkpLGR9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMobCxhLGQpe2R8fChNYXRoLm1heCguLi5sKTw9YT90aGlzLmNv''@;'; put 'put ''bGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChsWzBdLGEsLTEqbC5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbFswXSxsLmxlbmd0aCkpfW1vdmVSb3dzKGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLmdldFJvd0luZGV4KGQpK3RoaXMuZGF0YU1hbmFnZXIuY291bnRDaGlsZHJlbihkKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57bC5mb3JFYWNoKGY9Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVSb3coZixhLHRoaXMubW92ZWRUb0NvbGxhcHNlZCxoKX0pfSl9bW92ZUNlbGxz''@;'; put 'put ''TWV0YShsLGEpe2NvbnN0IGQ9W10saD1NYXRoLm1heCguLi5sKTxhO2wuZm9yRWFjaChmPT57ZC5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3coZikpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGxbMF0sbC5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhLShoP2Qu''@;'; put 'put ''bGVuZ3RoOjApLDAsLi4uZCl9c2VsZWN0Q2VsbHMobCxhKXtjb25zdCBkPWwubGVuZ3RoO2xldCBoPTAsZj0wO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNlZCl7bGV0IHY9bnVsbDt2PXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhsW2QtMV08YT9hLWQ6YSk7Y29uc3QgTT10''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChudWxsPT09dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xOnYtMSksRD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KE0pO2g9dGhpcy5kYXRhTWFuYWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3coRCksZj1ofWVsc2UgbFtkLTFd''@;'; put 'put ''PGE/KGY9YS0xLGg9Zi1kKzEpOihoPWEsZj1oK2QtMSk7dGhpcy5ob3Quc2VsZWN0Q2VsbHMoW1toLDAsZix0aGlzLmhvdC5jb3VudENvbHMoKS0xXV0sITEpfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9fWZ1bmN0aW9uICRtZShjLGwsYSl7''@;'; put 'put ''S21lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBLbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHNlZShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gVDR0KGMpe3ZhciBsPWZ1bmN0aW9uIEE0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gVkgoYyxsKXtyZXR1cm4gYy5nZXQobTAoYyxsKSl9ZnVuY3Rpb24gQkgoYyxsLGEpe3JldHVybiBjLnNl''@;'; put 'put ''dChtMChjLGwpLGEpLGF9ZnVuY3Rpb24gbTAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i''@;'; put 'put ''amVjdCIpfWNvbnN0IGpIPSJuZXN0ZWRSb3dzIixxbWU9akg7dmFyIHpIPW5ldyBXZWFrTWFwLHZ3PW5ldyBXZWFrTWFwLFQwPW5ldyBXZWFrU2V0O2NsYXNzIEk0dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBFNHQoYyxsKXtLbWUoYyxs''@;'; put 'put ''KSxsLmFkZChjKX0odGhpcyxUMCksc2VlKHRoaXMsImRhdGFNYW5hZ2VyIixudWxsKSxzZWUodGhpcywiaGVhZGVyc1VJIixudWxsKSxzZWUodGhpcywiY29sbGFwc2VkUm93c01hcCIsbnVsbCksJG1lKHRoaXMsekgsITEpLCRtZSh0aGlzLHZ3LCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVko''@;'; put 'put ''KXtyZXR1cm4gakh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqSF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmNvbGxhcHNlZFJvd3NNYXA9dGhp''@;'; put 'put ''cy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiLG5ldyBLRSksdGhpcy5kYXRhTWFuYWdlcj1uZXcgbDR0KHRoaXMsdGhpcy5ob3QpLHRoaXMuY29sbGFwc2luZ1VJPW5ldyBmNHQodGhpcyx0aGlzLmhvdCksdGhpcy5oZWFkZXJzVUk9bmV3IFltZSh0aGlzLHRo''@;'; put 'put ''aXMuaG90KSx0aGlzLmNvbnRleHRNZW51VUk9bmV3IEM0dCh0aGlzLHRoaXMuaG90KSx0aGlzLnJvd01vdmVDb250cm9sbGVyPW5ldyB4NHQodGhpcyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSks''@;'; put 'put ''aD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsVzR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto''@;'; put 'put ''XT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsWTR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0RhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVNvdXJjZUxlbmd0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRGF0YVNwbGljZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJmaWx0ZXJE''@;'; put 'put ''YXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLE80dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlv''@;'; put 'put ''bnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsUDR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLEY0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsTDR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxWNHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSks''@;'; put 'put ''aD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsTjR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUFkZENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLEI0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckFkZENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy''@;'; put 'put ''biBtMChUMCxsLGo0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCx6NHQp''@;'; put 'put ''LmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxVNHQpLmNhbGwobCwuLi5kKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsSDR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLFo0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dNb3Zl''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLFI0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsYT0+bTAoVDAsdGhpcyxY''@;'; put 'put ''bWUpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixhPT5tMChUMCx0aGlzLFhtZSkuY2FsbCh0aGlzLGEpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1h''@;'; put 'put ''cHBlci51bnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIiksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpO2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQ''@;'; put 'put ''bHVnaW4oKSx0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGwpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNh''@;'; put 'put ''bGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT10aGlzLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwucm93KTtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoYSk/dGhpcy5j''@;'; put 'put ''b2xsYXBzaW5nVUkuZXhwYW5kQ2hpbGRyZW4oYSk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VDaGlsZHJlbihhKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6''@;'; put 'put ''bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiYtMT09PWQuY29sJiZkLnJvdz49MH0sZ3JvdXA6''@;'; put 'put ''cW1lLHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChxbWUpfWRpc2FibGVDb3JlQVBJTW9kaWZpZXJz''@;'; put 'put ''KCl7QkgodncsdGhpcywhMCl9ZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpe0JIKHZ3LHRoaXMsITEpfW9uTW9kaWZ5Um93RGF0YShsKXtpZighVkgodncsdGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKX1vbk1vZGlmeVNvdXJjZUxlbmd0aCgpe2lmKCFWSCh2''@;'; put 'put ''dyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5jb3VudEFsbFJvd3MoKX1vbkJlZm9yZURhdGFTcGxpY2UobCxhLGQpe3JldHVybiEoIVZIKHZ3LHRoaXMpJiYhdGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShs''@;'; put 'put ''LGEsZCksMSkpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFI0dChjLGwsYSxkKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJvd01vdmUoYyxsLGEsZCl9ZnVuY3Rpb24gTDR0KGMsbCxhKXt0aGlzLmNvbGxhcHNpbmdVSS50b2dnbGVTdGF0ZShj''@;'; put 'put ''LGwsYSl9ZnVuY3Rpb24gTzR0KGMsbCxhKXtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnRyaW1TdGFzaChhWzBdLGwpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NT''@;'; put 'put ''dGFzaC5zaGlmdFN0YXNoKGFbMF0sbnVsbCwtMSpsKSx0aGlzLmRhdGFNYW5hZ2VyLmZpbHRlckRhdGEoYyxsLGEpLEJIKHpILHRoaXMsITApLHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLnNsaWNlKCl9ZnVuY3Rpb24gUDR0KGMpe3JldHVybiB0aGlzLmNvbnRleHRNZW51VUkuYXBwZW5k''@;'; put 'put ''T3B0aW9ucyhjKX1mdW5jdGlvbiBGNHQoYyxsKXt0aGlzLmhlYWRlcnNVSS5hcHBlbmRMZXZlbEluZGljYXRvcnMoYyxsKX1mdW5jdGlvbiBINHQoYyl7cmV0dXJuIE1hdGgubWF4KHRoaXMuaGVhZGVyc1VJLnJvd0hlYWRlcldpZHRoQ2FjaGUsYyl9ZnVuY3Rpb24gTjR0KGMsbCxhLGQpe2Qh''@;'; put 'put ''PT10aGlzLnBsdWdpbk5hbWUmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntCSCh6SCx0aGlzLCExKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCl9KX1mdW5jdGlvbiBW''@;'; put 'put ''NHQoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuZnJvbShhLnJlZHVjZSgoaCxmKT0+e2lmKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQoZikpe2NvbnN0IHY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGYpLl9fY2hpbGRyZW47cmV0dXJuIGguYWRkKGYpLEFycmF5LmlzQXJyYXkodikm''@;'; put 'put ''JnYuZm9yRWFjaChNPT5oLmFkZCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KE0pKSksaH1yZXR1cm4gaC5hZGQoZil9LG5ldyBTZXQpKTthLmxlbmd0aD0wLGEucHVzaCguLi5kKX1mdW5jdGlvbiBCNHQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2go''@;'; put 'put ''KX1mdW5jdGlvbiBqNHQoYyxsKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGwpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJ''@;'; put 'put ''LnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24gejR0KCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9ZnVuY3Rpb24gVTR0KGMsbCxhKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLG51bGwsLTEpLHRo''@;'; put 'put ''aXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBaNHQoKXt0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfWZ1bmN0aW9uIFc0dCgpe3RoaXMuaGVhZGVyc1VJLnVw''@;'; put 'put ''ZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24gWTR0KGMsbCl7VkgoekgsdGhpcykmJihsLnNraXBSZW5kZXI9ITApfWZ1bmN0aW9uIFhtZShjKXtpZighTTNlKGMpKXJldHVybiBGJCgiVGhlIE5lc3RlZCBSb3dzIHBsdWdpbiByZXF1aXJlcyBhbiBBcnJheSBvZiBPYmplY3RzIGFzIGEg''@;'; put 'put ''ZGF0YXNldCB0byBiZSBwcm92aWRlZC4gVGhlIHBsdWdpbiBoYXMgYmVlbiBkaXNhYmxlZC4iKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pIXT0hMSx2b2lkIHRoaXMuZGlzYWJsZVBsdWdpbigpO3RoaXMuZGF0YU1hbmFnZXIuc2V0RGF0YShjKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVD''@;'; put 'put ''YWNoZSgpfWZ1bmN0aW9uIGxlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRzR0KGMpe3ZhciBsPWZ1bmN0aW9uICQ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgcTR0PWNsYXNzIEs0dHtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O2xlZSh0aGlzLCJyb290V2luZG93Iix2b2lkIDApLGxlZSh0aGlzLCJwcmVmaXgiLHZvaWQgMCksbGVlKHRoaXMsInNhdmVkS2V5cyIsW10pLHRoaXMucm9vdFdpbmRv''@;'; put 'put ''dz1hLHRoaXMucHJlZml4PWwsdGhpcy5sb2FkU2F2ZWRLZXlzKCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCxKU09OLnN0cmluZ2lmeShhKSksLTE9PT10aGlzLnNhdmVkS2V5cy5pbmRleE9mKGwpJiYo''@;'; put 'put ''dGhpcy5zYXZlZEtleXMucHVzaChsKSx0aGlzLnNhdmVTYXZlZEtleXMoKSl9bG9hZFZhbHVlKGwsYSl7Y29uc3QgaD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dHlwZW9mIGw+InUiP2E6bH1gKTtyZXR1cm4gbnVsbD09PWg/dm9pZCAw''@;'; put 'put ''OkpTT04ucGFyc2UoaCl9cmVzZXQobCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCl9cmVzZXRBbGwoKXtZbih0aGlzLnNhdmVkS2V5cywobCxhKT0+e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShg''@;'; put 'put ''JHt0aGlzLnByZWZpeH1fJHt0aGlzLnNhdmVkS2V5c1thXX1gKX0pLHRoaXMuY2xlYXJTYXZlZEtleXMoKX1sb2FkU2F2ZWRLZXlzKCl7Y29uc3QgbD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCksYT0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGw/SlNPTi5wYXJzZShsKTp2b2lkIDA7dGhpcy5zYXZlZEtleXM9YXx8W119c2F2ZVNhdmVkS2V5cygpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgLEpTT04uc3RyaW5naWZ5''@;'; put 'put ''KHRoaXMuc2F2ZWRLZXlzKSl9Y2xlYXJTYXZlZEtleXMoKXt0aGlzLnNhdmVkS2V5cy5sZW5ndGg9MCx0aGlzLnNhdmVTYXZlZEtleXMoKX19O1NhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNp''@;'; put 'put ''c3RlbnRTdGF0ZUxvYWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlUmVzZXQiKTtjb25zdCBKbWU9InBlcnNpc3RlbnRTdGF0ZSI7Y2xhc3MgdDV0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFg0dChj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSjR0KGMpe3ZhciBsPWZ1bmN0aW9uIFE0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInN0b3JhZ2UiLHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu''@;'; put 'put ''IEptZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKbWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuc3RvcmFnZXx8KHRoaXMuc3RvcmFnZT1uZXcgcTR0KHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50LmlkLHRoaXMuaG90LnJvb3RXaW5kb3cpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVNhdmUiLChsLGEpPT50aGlzLnNhdmVWYWx1ZShsLGEpKSx0aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZUxvYWQiLChsLGEpPT50aGlzLmxvYWRWYWx1ZShsLGEpKSx0''@;'; put 'put ''aGlzLmFkZEhvb2soInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwoKT0+dGhpcy5yZXNldFZhbHVlKCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5zdG9yYWdlPXZvaWQgMCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxl''@;'; put 'put ''UGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1sb2FkVmFsdWUobCxhKXthLnZhbHVlPXRoaXMuc3RvcmFnZS5sb2FkVmFsdWUobCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5zdG9yYWdlLnNhdmVWYWx1ZShsLGEpfXJlc2V0VmFsdWUobCl7dHlwZW9mIGw+''@;'; put 'put ''InUiP3RoaXMuc3RvcmFnZS5yZXNldEFsbCgpOnRoaXMuc3RvcmFnZS5yZXNldChsKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBjZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGk1dChjKXt2YXIgbD1mdW5jdGlvbiBhNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFFtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdWVlPSJzZWFyY2giLGw1dD1mdW5jdGlvbihjLGwsYSxkLGgpe2MuZ2V0Q2VsbE1ldGEobCxhKS5pc1NlYXJjaFJlc3VsdD1ofSxjNXQ9ZnVuY3Rpb24oYyxsLGEpe3JldHVybiEoeWMoYyl8fG51bGw9PT1jfHwhYy50b0xvY2Fs''@;'; put 'put ''ZUxvd2VyQ2FzZXx8MD09PWMubGVuZ3RofHx5YyhsKXx8bnVsbD09PWwpJiYtMSE9PWwudG9TdHJpbmcoKS50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkuaW5kZXhPZihjLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKSl9O3ZhciBkZWU9bmV3IFdlYWtTZXQ7Y2xhc3MgdTV0IGV4dGVu''@;'; put 'put ''ZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG41dChjLGwpeyhmdW5jdGlvbiByNXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu''@;'; put 'put ''IG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxkZWUpLGNlZSh0aGlzLCJjYWxsYmFjayIsbDV0KSxjZWUodGhpcywicXVlcnlNZXRob2QiLGM1dCksY2VlKHRoaXMsInNlYXJjaFJlc3VsdENsYXNzIiwiaHRTZWFyY2hSZXN1bHQiKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1''@;'; put 'put ''cm4gdWVlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE5MH1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1ZWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbdWVlXTt0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGEpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFFt''@;'; put 'put ''ZShkZWUsbCxlNmUpLmNhbGwobCwuLi5oKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbD10aGlzO2NvbnN0IGE9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tm''@;'; put 'put ''XTtyZXR1cm4gUW1lKGRlZSxsLGU2ZSkuY2FsbChsLC4uLmgpfTt0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsYSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJiZWZvcmVSZW5kZXJlciIsYSl9KSxzdXBl''@;'; put 'put ''ci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1xdWVyeShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06''@;'; put 'put ''dGhpcy5nZXRDYWxsYmFjaygpLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuZ2V0UXVlcnlNZXRob2QoKTtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLGY9dGhpcy5ob3QuY291bnRDb2xzKCksdj1bXSxNPXRoaXMuaG90''@;'; put 'put ''O3JldHVybiBHYSgwLGgtMSxEPT57R2EoMCxmLTEsWj0+e2NvbnN0IHJlPXRoaXMuaG90LmdldERhdGFBdENlbGwoRCxaKSxjZT10aGlzLmhvdC5nZXRDZWxsTWV0YShELFopLGJlPWNlLnNlYXJjaC5jYWxsYmFja3x8YSxCZT0oY2Uuc2VhcmNoLnF1ZXJ5TWV0aG9kfHxkKShsLHJlLGNlKTtC''@;'; put 'put ''ZSYmdi5wdXNoKHtyb3c6RCxjb2w6WixkYXRhOnJlfSksYmUmJmJlKE0sRCxaLHJlLEJlKX0pfSksdn1nZXRDYWxsYmFjaygpe3JldHVybiB0aGlzLmNhbGxiYWNrfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1nZXRRdWVyeU1ldGhvZCgpe3JldHVybiB0aGlzLnF1ZXJ5TWV0aG9k''@;'; put 'put ''fXNldFF1ZXJ5TWV0aG9kKGwpe3RoaXMucXVlcnlNZXRob2Q9bH1nZXRTZWFyY2hSZXN1bHRDbGFzcygpe3JldHVybiB0aGlzLnNlYXJjaFJlc3VsdENsYXNzfXNldFNlYXJjaFJlc3VsdENsYXNzKGwpe3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3M9bH11cGRhdGVQbHVnaW5TZXR0aW5ncyhsKXtx''@;'; put 'put ''byhsKSYmKGwuc2VhcmNoUmVzdWx0Q2xhc3MmJnRoaXMuc2V0U2VhcmNoUmVzdWx0Q2xhc3MobC5zZWFyY2hSZXN1bHRDbGFzcyksbC5xdWVyeU1ldGhvZCYmdGhpcy5zZXRRdWVyeU1ldGhvZChsLnF1ZXJ5TWV0aG9kKSxsLmNhbGxiYWNrJiZ0aGlzLnNldENhbGxiYWNrKGwuY2FsbGJhY2sp''@;'; put 'put ''KX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBlNmUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9Zi5jbGFzc05hbWV8fFtdO2xldCBNPVtdOyJzdHJpbmciPT10eXBlb2Ygdj9NPXYuc3BsaXQoIiAiKTpNLnB1c2goLi4udiksdGhpcy5pc0VuYWJsZWQoKSYmZi5pc1NlYXJjaFJl''@;'; put 'put ''c3VsdD9NLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpfHxNLnB1c2goYCR7dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTpNLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZNLnNwbGljZShNLmluZGV4T2YodGhpcy5zZWFyY2hSZXN1bHRDbGFzcyksMSksZi5jbGFz''@;'; put 'put ''c05hbWU9TS5qb2luKCIgIil9ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGQ1dChjKXt2YXIgbD1mdW5jdGlvbiBoNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2''@;'; put 'put ''YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9''@;'; put 'put ''KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHQ2ZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXtVSCh0aGlzLCJ2aWV3cG9ydFdpZHRoIix2b2lkIDApLFVIKHRoaXMsIm92ZXJ3cml0ZUNvbHVtbldpZHRoRm4iLHZvaWQgMCksVUgodGhpcywiYmFzZVdpZHRocyIsbmV3IE1hcCksVUgodGhpcywic3RyZXRjaGVkV2lkdGhzIixuZXcgTWFwKSx0aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRo''@;'; put 'put ''Rm49bH1wcmVwYXJlKGwpe2xldHt2aWV3cG9ydFdpZHRoOmF9PWw7dGhpcy52aWV3cG9ydFdpZHRoPWEsdGhpcy5iYXNlV2lkdGhzLmNsZWFyKCksdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKX1zZXRDb2x1bW5CYXNlV2lkdGgobCxhKXt0aGlzLmJhc2VXaWR0aHMuc2V0KGwsYSl9Y2Fs''@;'; put 'put ''Y3VsYXRlKCl7fWdldFdpZHRocygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuc3RyZXRjaGVkV2lkdGhzKX19Y2xhc3MgZjV0IGV4dGVuZHMgdDZle2NhbGN1bGF0ZSgpe2NvbnN0IGw9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgoY2UsYmUpPT57bGV0WyxFZV09YmU7cmV0''@;'; put 'put ''dXJuIGNlK0VlfSwwKTtpZih0aGlzLnZpZXdwb3J0V2lkdGgtbDwwKXJldHVybiB2b2lkIHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgZD10aGlzLnZpZXdwb3J0V2lkdGgvbCxoPVtdLGY9W107bGV0IHY9dGhpcy52aWV3cG9ydFdpZHRoLE09MDtpZih0aGlzLmJhc2VXaWR0''@;'; put 'put ''aHMuZm9yRWFjaCgoY2UsYmUpPT57Y29uc3QgRWU9TWF0aC5yb3VuZChjZSpkKSxCZT10aGlzLm92ZXJ3cml0ZUNvbHVtbldpZHRoRm4oRWUsYmUpO0VlPT09QmUmJkVlPj1fXz8oaC5wdXNoKFtiZSxCZV0pLE0rPUJlKTpFZSE9PUJlJiYoaC5wdXNoKFtiZSxCZV0pLGYucHVzaChiZSksdi09''@;'; put 'put ''QmUpfSksdjw9X18pcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBEPXYvTTtsZXQgWj0tMSxyZT0wO2guZm9yRWFjaCgoY2UsYmUpPT57bGV0W0VlLEJlXT1jZSxxZT1CZTtmLmluY2x1ZGVzKEVlKXx8KHFlPU1hdGgucm91bmQoQmUqRCkpLHRoaXMuc3Ry''@;'; put 'put ''ZXRjaGVkV2lkdGhzLnNldChFZSxxZSksWj1FZSxiZTxoLmxlbmd0aC0xJiYocmUrPXFlKX0pLHRoaXMuc3RyZXRjaGVkV2lkdGhzLnNpemU+MSYmdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KFosTWF0aC5yb3VuZCh0aGlzLnZpZXdwb3J0V2lkdGgtcmUpKX19ZnVuY3Rpb24gbjZlKGMsbCxh''@;'; put 'put ''KXsoZnVuY3Rpb24gcDV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBoZWUoYyxsKXtyZXR1cm4gYy5n''@;'; put 'put ''ZXQocjZlKGMsbCkpfWZ1bmN0aW9uIFpIKGMsbCxhKXtyZXR1cm4gYy5zZXQocjZlKGMsbCksYSksYX1mdW5jdGlvbiByNmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBXSD1uZXcgV2Vha01hcCxfQT1uZXcgV2Vha01hcDtjbGFzcyBnNXQgZXh0ZW5kcyB0NmV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLG42ZSh0aGlzLFdILDApLG42ZSh0aGlz''@;'; put 'put ''LF9BLC0xKX1wcmVwYXJlKGwpe3N1cGVyLnByZXBhcmUobCksWkgoV0gsdGhpcywwKSxaSChfQSx0aGlzLC0xKX1zZXRDb2x1bW5CYXNlV2lkdGgobCxhKXtzdXBlci5zZXRDb2x1bW5CYXNlV2lkdGgobCxhKSxaSChfQSx0aGlzLGwpLFpIKFdILHRoaXMsYSl9Y2FsY3VsYXRlKCl7aWYoLTE9''@;'; put 'put ''PT1oZWUoX0EsdGhpcykpcmV0dXJuO2NvbnN0IGw9QXJyYXkuZnJvbSh0aGlzLmJhc2VXaWR0aHMpLnJlZHVjZSgoZCxoKT0+e2xldFssZl09aDtyZXR1cm4gZCtmfSwwKSxhPU1hdGgubWF4KHRoaXMudmlld3BvcnRXaWR0aC1sK2hlZShXSCx0aGlzKSwwKTt0aGlzLnN0cmV0Y2hlZFdpZHRo''@;'; put 'put ''cy5zZXQoaGVlKF9BLHRoaXMpLGEpfX1mdW5jdGlvbiBZSChjLGwsYSl7aTZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBpNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9u''@;'; put 'put ''IGFuIG9iamVjdCIpfWZ1bmN0aW9uIGZ1KGMsbCl7cmV0dXJuIGMuZ2V0KGJ3KGMsbCkpfWZ1bmN0aW9uIGZlZShjLGwsYSl7cmV0dXJuIGMuc2V0KGJ3KGMsbCksYSksYX1mdW5jdGlvbiBidyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE0xPW5ldyBXZWFrTWFwLHl3PW5ldyBXZWFrTWFwLHBlZT1uZXcgV2Vha01hcCxHSD1uZXcgV2Vha01hcCx3QT1uZXcgV2Vh''@;'; put 'put ''a1NldDtjbGFzcyBiNXR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIG01dChjLGwpe2k2ZShjLGwpLGwuYWRkKGMpfSkodGhpcyx3QSksWUgodGhpcyxNMSx2b2lkIDApLFlIKHRoaXMseXcsdm9pZCAwKSxZSCh0aGlzLHBlZSxuZXcgTWFwKFtbImFsbCIsbmV3IGY1dChidyh3QSx0aGlzLGE2''@;'; put 'put ''ZSkuYmluZCh0aGlzKSldLFsibGFzdCIsbmV3IGc1dChidyh3QSx0aGlzLGE2ZSkuYmluZCh0aGlzKSldXSkpLFlIKHRoaXMsR0gsIm5vbmUiKSxmZWUoTTEsdGhpcyxsKSxmZWUoeXcsdGhpcyxmdShNMSx0aGlzKS5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFw''@;'; put 'put ''KCJzdHJldGNoQ29sdW1ucyIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIikpfXVzZVN0cmF0ZWd5KGwpe2ZlZShHSCx0aGlzLGZ1KHBlZSx0aGlzKS5oYXMobCk/bDoibm9uZSIpfXJlZnJlc2hTdHJldGNoaW5nKCl7Im5vbmUiIT09ZnUoR0gsdGhpcyk/ZnUoTTEsdGhpcykuYmF0Y2hFeGVjdXRp''@;'; put 'put ''b24oKCk9PntmdSh5dyx0aGlzKS5jbGVhcigpO2NvbnN0IGw9ZnUocGVlLHRoaXMpLmdldChmdShHSCx0aGlzKSk7bGV0IGQ9ZnUoTTEsdGhpcykudmlldy5nZXRWaWV3cG9ydFdpZHRoKCk7Yncod0EsdGhpcyx5NXQpLmNhbGwodGhpcykmJihkLT1mMChmdShNMSx0aGlzKS5yb290RG9jdW1l''@;'; put 'put ''bnQpKSxsLnByZXBhcmUoe3ZpZXdwb3J0V2lkdGg6ZH0pO2ZvcihsZXQgaD0wO2g8ZnUoTTEsdGhpcykuY291bnRDb2xzKCk7aCsrKWZ1KE0xLHRoaXMpLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGZ1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4oaCkpfHxsLnNldENvbHVtbkJhc2VX''@;'; put 'put ''aWR0aChoLGJ3KHdBLHRoaXMsXzV0KS5jYWxsKHRoaXMsaCkpO2wuY2FsY3VsYXRlKCksbC5nZXRXaWR0aHMoKS5mb3JFYWNoKGg9PntsZXRbZix2XT1oO2Z1KHl3LHRoaXMpLnNldFZhbHVlQXRJbmRleChmdShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGYpLHYpfSl9LCEwKTpmdSh5dyx0''@;'; put 'put ''aGlzKS5jbGVhcigpfWdldFN0cmV0Y2hlZFdpZHRoKGwpe3JldHVybiBmdSh5dyx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZnUoTTEsdGhpcykudG9QaHlzaWNhbENvbHVtbihsKSl9fWZ1bmN0aW9uIHk1dCgpe2NvbnN0e3ZpZXc6Y309ZnUoTTEsdGhpcyk7aWYoYy5pc1ZlcnRpY2FsbHlTY3Jv''@;'; put 'put ''bGxhYmxlQnlXaW5kb3coKSlyZXR1cm4hMTtjb25zdCBsPWMuZ2V0Vmlld3BvcnRIZWlnaHQoKSxhPWZ1KE0xLHRoaXMpLmNvdW50Um93cygpLGQ9Yy5nZXRTdHlsZXNIYW5kbGVyKCkuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBoPTAsZj0hMTtmb3IobGV0IE09MDtNPGE7TSsrKXt2YXIg''@;'; put 'put ''djtpZihoKz0obnVsbCE9PSh2PWZ1KE0xLHRoaXMpLmdldFJvd0hlaWdodChNKSkmJnZvaWQgMCE9PXY/djpkKSsoMD09PU0/MTowKSxoPmwpe2Y9ITA7YnJlYWt9fXJldHVybiBmfWZ1bmN0aW9uIF81dChjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWZ1KE0xLHRoaXMpLmdldENvbFdpZHRo''@;'; put 'put ''KGMsIlN0cmV0Y2hDb2x1bW5zIikpJiZ2b2lkIDAhPT1sP2w6X199ZnVuY3Rpb24gYTZlKGMsbCl7cmV0dXJuIGZ1KE0xLHRoaXMpLnJ1bkhvb2tzKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGMsbCl9ZnVuY3Rpb24gZ2VlKGMsbCxhKXtvNmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0''@;'; put 'put ''aW9uIG82ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gbWVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoJEgoYyxsKSxhKSxhfWZ1bmN0aW9u''@;'; put 'put ''IEs1KGMsbCl7cmV0dXJuIGMuZ2V0KCRIKGMsbCkpfWZ1bmN0aW9uICRIKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHBy''@;'; put 'put ''ZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgX3c9bmV3IFdlYWtNYXAsS0g9bmV3IFdlYWtNYXAsQ0E9bmV3IFdlYWtNYXAsdmVlPW5ldyBXZWFrU2V0O2NsYXNzIE01dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB3NXQoYyxsKXtvNmUo''@;'; put 'put ''YyxsKSxsLmFkZChjKX0odGhpcyx2ZWUpLGdlZSh0aGlzLF93LG5ldyBiNXQodGhpcy5ob3QpKSxnZWUodGhpcyxLSCxudWxsKSxnZWUodGhpcyxDQSxuZXcgUmVzaXplT2JzZXJ2ZXIobD0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3ZhciBhO251bGwhPT0oYT10aGlzLmhvdCkmJnZv''@;'; put 'put ''aWQgMCE9PWEmJmEudmlldy5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiZsLmZvckVhY2goZD0+e2xldHtjb250ZW50UmVjdDpofT1kO251bGwhPT1LNShLSCx0aGlzKSYmSzUoS0gsdGhpcykhPT1oLndpZHRoJiYodGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlz''@;'; put 'put ''LmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKSxtZWUoS0gsdGhpcyxoLndpZHRoKX0pfSl9KSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInN0cmV0Y2hDb2x1bW5zIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTV9c3RhdGljIGdldCBTRVRUSU5H''@;'; put 'put ''X0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm5bImFsbCIsImxhc3QiXS5pbmNsdWRlcyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KEs1KF93LHRoaXMpLnVzZVN0cmF0ZWd5KHRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpLEs1KENBLHRoaXMpLm9ic2VydmUodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiAkSCh2ZWUsbCxFNXQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0''@;'; put 'put ''dXJuICRIKHZlZSxsLHg1dCkuY2FsbChsLC4uLmQpfSwxMCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe0s1KF93LHRoaXMpLnVzZVN0cmF0ZWd5KHRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4o''@;'; put 'put ''KXtzdXBlci5kaXNhYmxlUGx1Z2luKCksSzUoQ0EsdGhpcykudW5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gSzUoX3csdGhpcykuZ2V0U3RyZXRjaGVkV2lkdGgobCl9ZGVzdHJveSgpe0s1KENBLHRoaXMpLmRpc2Nvbm5lY3QoKSxtZWUo''@;'; put 'put ''Q0EsdGhpcyxudWxsKSxtZWUoX3csdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHg1dChjLGwsYSl7aWYoYT09PXRoaXMucGx1Z2luTmFtZSlyZXR1cm47Y29uc3QgZD10aGlzLmdldENvbHVtbldpZHRoKGwpO3JldHVybiJudW1iZXIiPT10eXBlb2YgZD9kOmN9ZnVuY3Rp''@;'; put 'put ''b24gRTV0KGMpe2MmJks1KF93LHRoaXMpLnJlZnJlc2hTdHJldGNoaW5nKCl9ZnVuY3Rpb24gcUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGs1dChjKXt2YXIgbD1mdW5jdGlvbiBENXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWZ1bmN0aW9uIGJlZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFy''@;'; put 'put ''IFhIPW5ldyBXZWFrU2V0O2NsYXNzIEw1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBUNXQoYyxsKXsoZnVuY3Rpb24gQTV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNh''@;'; put 'put ''bWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsWEgpLHFIKHRoaXMsInNjcm9sbGJhcnMiLFtdKSxxSCh0aGlzLCJjbG9uZXMiLFtdKSxxSCh0aGlzLCJsb2NrZWRDb2xsZWN0aW9uIiwhMSkscUgodGhpcywiZnJlZXplT3Zlcmxh''@;'; put 'put ''eXMiLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idG91Y2hTY3JvbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVybiBEJCgpfWVuYWJsZVBsdWdpbigp''@;'; put 'put ''e3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+YmVlKFhILHRoaXMsTzV0KS5jYWxsKHRoaXMpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMSxz''@;'; put 'put ''dXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5hZGRIb29rKCJiZWZvcmVUb3VjaFNjcm9sbCIsKCk9PmJlZShYSCx0aGlzLFA1dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlck1vbWVu''@;'; put 'put ''dHVtU2Nyb2xsIiwoKT0+YmVlKFhILHRoaXMsRjV0KS5jYWxsKHRoaXMpKX19ZnVuY3Rpb24gTzV0KCl7aWYodGhpcy5sb2NrZWRDb2xsZWN0aW9uKXJldHVybjtjb25zdHt0b3BPdmVybGF5OmMsYm90dG9tT3ZlcmxheTpsLGlubGluZVN0YXJ0T3ZlcmxheTphLHRvcElubGluZVN0YXJ0Q29y''@;'; put 'put ''bmVyT3ZlcmxheTpkLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpofT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMCx0aGlzLnNjcm9sbGJhcnMubGVuZ3RoPTAsdGhpcy5zY3JvbGxiYXJzLnB1c2goYyksbC5jbG9uZSYmdGhpcy5z''@;'; put 'put ''Y3JvbGxiYXJzLnB1c2gobCksdGhpcy5zY3JvbGxiYXJzLnB1c2goYSksZCYmdGhpcy5zY3JvbGxiYXJzLnB1c2goZCksaCYmaC5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2goaCksdGhpcy5jbG9uZXM9W10sYy5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChjLmNsb25lLnd0''@;'; put 'put ''VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGwubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2gobC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxhLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGEuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSks''@;'; put 'put ''ZCYmdGhpcy5jbG9uZXMucHVzaChkLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGgmJmguY2xvbmUmJnRoaXMuY2xvbmVzLnB1c2goaC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKX1mdW5jdGlvbiBQNXQoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSEwLFluKHRoaXMu''@;'; put 'put ''Y2xvbmVzLGM9PntUaShjLCJoaWRlLXR3ZWVuIil9KX1mdW5jdGlvbiBGNXQoKXt0aGlzLmZyZWV6ZU92ZXJsYXlzPSExLFluKHRoaXMuY2xvbmVzLGM9PntsbyhjLCJoaWRlLXR3ZWVuIiksVGkoYywic2hvdy10d2VlbiIpfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e1luKHRo''@;'; put 'put ''aXMuY2xvbmVzLGM9PntsbyhjLCJzaG93LXR3ZWVuIil9KX0sNDAwKSxZbih0aGlzLnNjcm9sbGJhcnMsYz0+e2MucmVmcmVzaCgpLGMucmVzZXRGaXhlZFBvc2l0aW9uKCl9KSx0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCl9Y29uc3QgSkg9InRy''@;'; put 'put ''aW1Sb3dzIjt2YXIgczZlPW5ldyBXZWFrU2V0O2NsYXNzIFo1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBINXQoYyxsKXsoZnVuY3Rpb24gTjV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp''@;'; put 'put ''YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsczZlKSxmdW5jdGlvbiBWNXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEI1dChjKXt2YXIgbD1mdW5jdGlvbiBqNXQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJ0cmltbWVkUm93c01hcCIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEpIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMzMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKClbSkhdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMudHJpbW1lZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIixuZXcgS0UpLHRoaXMudHJpbW1lZFJvd3NNYXAuYWRkTG9jYWxIb29rKCJp''@;'; put 'put ''bml0IiwoKT0+ZnVuY3Rpb24gejV0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3Qi''@;'; put 'put ''KX0oczZlLHRoaXMsVzV0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0pIXTtBcnJheS5pc0FycmF5KGwpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMudHJpbW1lZFJvd3NN''@;'; put 'put ''YXAuY2xlYXIoKSxZbihsLGE9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIiksc3VwZXIuZGlz''@;'; put 'put ''YWJsZVBsdWdpbigpfWdldFRyaW1tZWRSb3dzKCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VHJpbW1lZEluZGV4ZXMoKX10cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZy''@;'; put 'put ''b20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVUcmltUm93IixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsdj0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KHYsITApfSl9LCEwKSx0''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJUcmltUm93IixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfXRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnRyaW1Sb3dzKGEpfXVudHJp''@;'; put 'put ''bVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwsRD0+e2ZbRF09ITF9KSxoPXF1KGYs''@;'; put 'put ''KEQsWixyZSk9PihaJiZELnB1c2gocmUpLEQpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW50cmltUm93IixhLGgsZCYmdikmJihkJiZ2JiZ0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlcyhmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbnRyaW1Sb3ciLGEsaCxk''@;'; put 'put ''JiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9dW50cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy51bnRyaW1Sb3dzKGEpfWlzVHJpbW1lZChsKXtyZXR1cm4gdGhpcy50cmltbWVkUm93''@;'; put 'put ''c01hcC5nZXRWYWx1ZUF0SW5kZXgobCl8fCExfXVudHJpbUFsbCgpe3RoaXMudW50cmltUm93cyh0aGlzLmdldFRyaW1tZWRSb3dzKCkpfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtyZXR1cm4gbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2Vy''@;'; put 'put ''KGQpJiZkPj0wJiZkPGEpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFc1dCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKSF07QXJyYXkuaXNBcnJheShjKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihjLGw9Pnt0aGlzLnRyaW1tZWRSb3dz''@;'; put 'put ''TWFwLnNldFZhbHVlQXRJbmRleChsLCEwKX0pfSwhMCl9Y2xhc3MgdGZ7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFk1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRzV0KGMpe3ZhciBsPWZ1bmN0aW9uICQ1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy''@;'; put 'put ''IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJhY3Rpb25UeXBlIiwiIiksdGhpcy5hY3Rpb25UeXBlPWx9dW5kbygpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9cmVkbygpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fWZ1bmN0aW9uIFFIKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiBLNXQoYyl7dmFyIGw9ZnVuY3Rpb24gcTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB5ZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7c3RhdGVCZWZvcmU6YSxyYW5nZTpk''@;'; put 'put ''LHR5cGU6aCxhbGlnbm1lbnQ6Zn09bDtzdXBlcigiY2VsbF9hbGlnbm1lbnQiKSxRSCh0aGlzLCJzdGF0ZUJlZm9yZSIsdm9pZCAwKSxRSCh0aGlzLCJyYW5nZSIsdm9pZCAwKSxRSCh0aGlzLCJ0eXBlIix2b2lkIDApLFFIKHRoaXMsImFsaWdubWVudCIsdm9pZCAwKSx0aGlzLnN0YXRlQmVm''@;'; put 'put ''b3JlPWEsdGhpcy5yYW5nZT1kLHRoaXMudHlwZT1oLHRoaXMuYWxpZ25tZW50PWZ9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNlbGxBbGlnbm1lbnQiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+bmV3IHllZSh7c3RhdGVCZWZvcmU6ZCxyYW5n''@;'; put 'put ''ZTpoLHR5cGU6ZixhbGlnbm1lbnQ6dn0pKX0pfXVuZG8obCxhKXtZbih0aGlzLnJhbmdlLGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAmJmY+PTAmJmwuc2V0Q2VsbE1ldGEoaCxmLCJjbGFzc05hbWUiLHRoaXMuc3RhdGVCZWZvcmVbaF1bZl18fCIgaHRMZWZ0Iil9KX0pLGwuYWRkSG9va09u''@;'; put 'put ''Y2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5yZW5kZXIoKX1yZWRvKGwsYSl7Sm0odGhpcy5yYW5nZSx0aGlzLnR5cGUsdGhpcy5hbGlnbm1lbnQsKGQsaCk9PmwuZ2V0Q2VsbE1ldGEoZCxoKSwoZCxoLGYsdik9Pmwuc2V0Q2VsbE1ldGEoZCxoLGYsdikpLGwuYWRkSG9va09uY2UoImFmdGVy''@;'; put 'put ''Vmlld1JlbmRlciIsYSksbC5yZW5kZXIoKX19ZnVuY3Rpb24gbDZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYNXQoYyl7dmFyIGw9ZnVuY3Rpb24gSjV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBfZWUgZXh0''@;'; put 'put ''ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y29sdW1uczphLGZpbmFsSW5kZXg6ZH09bDtzdXBlcigiY29sX21vdmUiKSxsNmUodGhpcywiY29sdW1ucyIsdm9pZCAwKSxsNmUodGhpcywiZmluYWxDb2x1bW5JbmRleCIsdm9pZCAwKSx0aGlzLmNvbHVtbnM9YS5zbGljZSgpLHRoaXMuZmlu''@;'; put 'put ''YWxDb2x1bW5JbmRleD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwoZCxoKT0+eyExIT09ZCYmYS5kb25lKCgpPT5uZXcgX2VlKHtjb2x1bW5zOmQsZmluYWxJbmRleDpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5n''@;'; put 'put ''ZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLE1RKHRoaXMuY29sdW1ucyx0aGlzLmZpbmFsQ29sdW1uSW5kZXgsbC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goZj0+''@;'; put 'put ''e2xldHtmcm9tOnYsdG86TX09Zjt2PE0mJihNLT0xKSxkLm1vdmVDb2x1bW4oTSx2KX0pLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zWzBdLHRoaXMuY29sdW1uc1swXSt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfXJlZG8obCxhKXtjb25z''@;'; put 'put ''dCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1vdmVDb2x1bW5zKHRoaXMuY29sdW1ucy5zbGljZSgpLHRoaXMuZmluYWxDb2x1bW5JbmRleCksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0''@;'; put 'put ''Q29sdW1ucyh0aGlzLmZpbmFsQ29sdW1uSW5kZXgsdGhpcy5maW5hbENvbHVtbkluZGV4K3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9fWZ1bmN0aW9uIGM2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUTV0KGMpe3ZhciBsPWZ1bmN0aW9uIGVndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''Y3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4g''@;'; put 'put ''YSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29u''@;'; put 'put ''ZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgd2VlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2N1cnJlbnRTb3J0U3RhdGU6YSxuZXdTb3J0U3RhdGU6ZH09bDtzdXBlcigiY29sX3NvcnQiKSxjNmUodGhpcywicHJldmlvdXNTb3J0U3RhdGUiLHZvaWQg''@;'; put 'put ''MCksYzZlKHRoaXMsIm5leHRTb3J0U3RhdGUiLHZvaWQgMCksdGhpcy5wcmV2aW91c1NvcnRTdGF0ZT1hLHRoaXMubmV4dFNvcnRTdGF0ZT1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Tb3J0IiwoZCxoLGYpPT57ZiYmYS5kb25l''@;'; put 'put ''KCgpPT5uZXcgd2VlKHtjdXJyZW50U29ydFN0YXRlOmQsbmV3U29ydFN0YXRlOmh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiY29sdW1uU29ydGluZyIpLGg9bC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGY9aC5pc0VuYWJsZWQoKT9oOmQ7dGhpcy5wcmV2''@;'; put 'put ''aW91c1NvcnRTdGF0ZS5sZW5ndGg/Zi5zb3J0KHRoaXMucHJldmlvdXNTb3J0U3RhdGUpOmYuY2xlYXJTb3J0KCksYSgpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIik7KGguaXNFbmFibGVk''@;'; put 'put ''KCk/aDpkKS5zb3J0KHRoaXMubmV4dFNvcnRTdGF0ZSksYSgpfX1mdW5jdGlvbiB1NmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHRndChjKXt2YXIgbD1mdW5jdGlvbiBuZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0''@;'; put 'put ''aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09''@;'; put 'put ''PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNs''@;'; put 'put ''YXNzIENlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3VudDpkfT1sO3N1cGVyKCJpbnNlcnRfY29sIiksdTZlKHRoaXMsImluZGV4Iix2b2lkIDApLHU2ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0''@;'; put 'put ''YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgQ2VlKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92''@;'; put 'put ''ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGEpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rp''@;'; put 'put ''b24gZDZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiByZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gaWd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBTZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6''@;'; put 'put ''YSxhbW91bnQ6ZH09bDtzdXBlcigiaW5zZXJ0X3JvdyIpLGQ2ZSh0aGlzLCJpbmRleCIsdm9pZCAwKSxkNmUodGhpcywiYW1vdW50Iix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmFtb3VudD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlckNy''@;'; put 'put ''ZWF0ZVJvdyIsKGQsaCxmKT0+e2EuZG9uZSgoKT0+bmV3IFNlZSh7aW5kZXg6ZCxhbW91bnQ6aH0pLGYpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5jb3VudFJvd3MoKSxoPWwuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49ZCYmdGhpcy5pbmRleC1oPGQmJih0aGlzLmlu''@;'; put 'put ''ZGV4LT1oKSxsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigicmVtb3ZlX3JvdyIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZVJvdyIsYSksbC5hbHRlcigiaW5zZXJ0X3Jv''@;'; put 'put ''d19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBlTihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYWd0KGMpe3ZhciBsPWZ1bmN0aW9uIG9ndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9Y2xhc3MgTWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2NoYW5nZXM6YSxzZWxlY3RlZDpkLGNvdW50Q29sczpoLGNvdW50Um93czpmfT1sO3N1cGVyKCJjaGFuZ2UiKSxlTih0aGlzLCJjaGFuZ2VzIix2b2lkIDApLGVOKHRoaXMsInNlbGVjdGVkIix2b2lkIDAp''@;'; put 'put ''LGVOKHRoaXMsImNvdW50Q29scyIsdm9pZCAwKSxlTih0aGlzLCJjb3VudFJvd3MiLHZvaWQgMCksdGhpcy5jaGFuZ2VzPWEsdGhpcy5zZWxlY3RlZD1kLHRoaXMuY291bnRDb2xzPWgsdGhpcy5jb3VudFJvd3M9Zn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9v''@;'; put 'put ''aygiYmVmb3JlQ2hhbmdlIixmdW5jdGlvbihkLGgpe2NvbnN0IGY9ZCYmZC5sZW5ndGg7ZiYmZC5maW5kKEQ9Pntjb25zdFssLFoscmVdPUQ7cmV0dXJuIFohPT1yZX0pJiZhLmRvbmUoKCk9Pntjb25zdCBEPWQucmVkdWNlKChyZSxjZSk9PihyZS5wdXNoKFsuLi5jZV0pLHJlKSxbXSk7RC5m''@;'; put 'put ''b3JFYWNoKHJlPT57cmVbMV09bC5wcm9wVG9Db2wocmVbMV0pfSk7Y29uc3QgWj1mPjE/dGhpcy5nZXRTZWxlY3RlZCgpOltbRFswXVswXSxEWzBdWzFdXV07cmV0dXJuIG5ldyBNZWUoe2NoYW5nZXM6RCxzZWxlY3RlZDpaLGNvdW50Q29sczpsLmNvdW50Q29scygpLGNvdW50Um93czpsLmNv''@;'; put 'put ''dW50Um93cygpfSl9LGgpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9ZzEodGhpcy5jaGFuZ2VzKTtmb3IobGV0IHY9MCxNPWQubGVuZ3RoO3Y8TTt2KyspZFt2XS5zcGxpY2UoMywxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsYSksbC5zZXREYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRv''@;'; put 'put ''UmVkby51bmRvIik7Y29uc3QgaD1sLmNvdW50Um93cygpLXRoaXMuY291bnRSb3dzO2g+MCYmbC5hbHRlcigicmVtb3ZlX3JvdyIsbnVsbCxoLCJVbmRvUmVkby51bmRvIik7Y29uc3QgZj1sLmNvdW50Q29scygpLXRoaXMuY291bnRDb2xzO2Y+MCYmbC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFs''@;'; put 'put ''bG93ZWQoKSYmbC5hbHRlcigicmVtb3ZlX2NvbCIsbnVsbCxmLCJVbmRvUmVkby51bmRvIiksbC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCksbC5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX1yZWRvKGwsYSl7Y29uc3QgZD1nMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgaD0wLGY9ZC5s''@;'; put 'put ''ZW5ndGg7aDxmO2grKylkW2hdLnNwbGljZSgyLDEpO2wuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIixhKSxsLnNldERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnJlZG8iKSx0aGlzLnNlbGVjdGVkJiZsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfX1mdW5jdGlv''@;'; put 'put ''biBoNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNndChjKXt2YXIgbD1mdW5jdGlvbiBsZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs''@;'; put 'put ''dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHhlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjb25kaXRp''@;'; put 'put ''b25zU3RhY2s6YSxwcmV2aW91c0NvbmRpdGlvbnNTdGFjazpkfT1sO3N1cGVyKCJmaWx0ZXIiKSxoNmUodGhpcywiY29uZGl0aW9uc1N0YWNrIix2b2lkIDApLGg2ZSh0aGlzLCJwcmV2aW91c0NvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbnNTdGFjaz1hLHRoaXMucHJl''@;'; put 'put ''dmlvdXNDb25kaXRpb25zU3RhY2s9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlRmlsdGVyIiwoZCxoKT0+e2EuZG9uZSgoKT0+bmV3IHhlZSh7Y29uZGl0aW9uc1N0YWNrOmQscHJldmlvdXNDb25kaXRpb25zU3RhY2s6aH0pKX0pfXVuZG8o''@;'; put 'put ''bCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmls''@;'; put 'put ''dGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5pbXBvcnRDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxkLmZpbHRlcigpfX1jbGFzcyBFZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7ZGF0YTphLGNlbGxSYW5nZTpkfT1sO3N1cGVyKCJt''@;'; put 'put ''ZXJnZV9jZWxscyIpLGZ1bmN0aW9uIGNndChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdWd0KGMpe3ZhciBsPWZ1bmN0aW9uIGRndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk''@;'; put 'put ''PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNlbGxSYW5nZSIsdm9pZCAwKSx0''@;'; put 'put ''aGlzLmNlbGxSYW5nZT1kLHRoaXMuZGF0YT1hfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVNZXJnZUNlbGxzIiwoZCxoKT0+e2lmKGgpcmV0dXJuO2NvbnN0IGY9ZC5nZXRUb3BTdGFydENvcm5lcigpLHY9ZC5nZXRCb3R0b21FbmRDb3JuZXIo''@;'; put 'put ''KSxNPWwuZ2V0RGF0YShmLnJvdyxmLmNvbCx2LnJvdyx2LmNvbCk7YS5kb25lKCgpPT5uZXcgRWVlKHtkYXRhOk0sY2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51''@;'; put 'put ''bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApO2NvbnN0IGg9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtsLnBvcHVsYXRlRnJvbUFycmF5KGgucm93LGguY29sLHRoaXMuZGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyhsLGEpe2NvbnN0IGQ9bC5n''@;'; put 'put ''ZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fWZ1bmN0aW9uIGY2ZShjLGwsYSxkLGgpe2NvbnN0IGY9WyJ2aXN1YWxSb3ciLCJ2aXN1YWxDb2wiLCJyb3ciLCJjb2wiLCJwcm9wIl0s''@;'; put 'put ''dj1mLmxlbmd0aCxNPVtdO3JldHVybiBHYShkLGgsRD0+e0dhKGwsYSxaPT57Y29uc3QgcmU9Yy5nZXRDZWxsTWV0YShaLEQpO2lmKE9iamVjdC5rZXlzKHJlKS5sZW5ndGghPT12KXtjb25zdCBjZT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocmUpLmZpbHRlcihiZT0+e2xl''@;'; put 'put ''dFtFZV09YmU7cmV0dXJuITE9PT1mLmluY2x1ZGVzKEVlKX0pKTtNLnB1c2goW3JlLnZpc3VhbFJvdyxyZS52aXN1YWxDb2wsY2VdKX19KX0pLE19ZnVuY3Rpb24gcTUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhndChjKXt2YXIgbD1mdW5jdGlvbiBmZ3QoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGluZGV4ZXM6ZCxkYXRhOmgsYW1vdW50OmYsaGVhZGVyczp2LGNvbHVtblBvc2l0aW9uczpNLHJvd1Bvc2l0aW9uczpELGZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0OloscmVtb3ZlZENlbGxNZXRhczpyZX09bDtzdXBlcigicmVtb3ZlX2NvbCIpLHE1KHRoaXMsImluZGV4Iix2b2lkIDApLHE1KHRoaXMsImluZGV4ZXMiLHZvaWQgMCkscTUodGhpcywiZGF0YSIsdm9pZCAwKSxxNSh0aGlzLCJhbW91bnQiLHZvaWQgMCkscTUodGhpcywi''@;'; put 'put ''aGVhZGVycyIsdm9pZCAwKSxxNSh0aGlzLCJjb2x1bW5Qb3NpdGlvbnMiLHZvaWQgMCkscTUodGhpcywicm93UG9zaXRpb25zIix2b2lkIDApLHE1KHRoaXMsImZpeGVkQ29sdW1uc1N0YXJ0Iix2b2lkIDApLHE1KHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCksdGhpcy5pbmRleD1h''@;'; put 'put ''LHRoaXMuaW5kZXhlcz1kLHRoaXMuZGF0YT1oLHRoaXMuYW1vdW50PWYsdGhpcy5oZWFkZXJzPXYsdGhpcy5jb2x1bW5Qb3NpdGlvbnM9TS5zbGljZSgwKSx0aGlzLnJvd1Bvc2l0aW9ucz1ELnNsaWNlKDApLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9Wix0aGlzLnJlbW92ZWRDZWxsTWV0YXM9''@;'; put 'put ''cmV9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLmdldFNvdXJjZURhdGFBcnJheSgpLFo9KGwuY291bnRDb2xzKCkrZCklbC5jb3VudENvbHMoKSxyZT1aK2gtMSxj''@;'; put 'put ''ZT1bXSxiZT1bXSxFZT1bXTtyZXR1cm4gR2EoRC5sZW5ndGgtMSxCZT0+e2NvbnN0IHFlPVtdLHJ0PURbQmVdO0dhKFoscmUscHQ9PntxZS5wdXNoKHJ0W2wudG9QaHlzaWNhbENvbHVtbihwdCldKX0pLGNlLnB1c2gocWUpfSksR2EoaC0xLEJlPT57RWUucHVzaChsLnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW4oWitCZSkpfSksQXJyYXkuaXNBcnJheShsLmdldFNldHRpbmdzKCkuY29sSGVhZGVycykmJkdhKGgtMSxCZT0+e2JlLnB1c2gobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbbC50b1BoeXNpY2FsQ29sdW1uKForQmUpXXx8bnVsbCl9KSxuZXcgVGVlKHtpbmRleDpaLGluZGV4ZXM6RWUs''@;'; put 'put ''ZGF0YTpjZSxhbW91bnQ6aCxoZWFkZXJzOmJlLGNvbHVtblBvc2l0aW9uczpsLmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJvd1Bvc2l0aW9uczpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGZpeGVkQ29sdW1uc1N0YXJ0OmwuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maXhlZENvbHVtbnNTdGFydCxyZW1vdmVkQ2VsbE1ldGFzOmY2ZShsLDAsbC5jb3VudFJvd3MoKSxaLHJlKX0pfSx2KX0pfXVuZG8obCxhKXtsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBoPXRoaXMuaW5kZXhlcy5z''@;'; put 'put ''bGljZSgwKS5zb3J0KCksZj0ocmUsY2UsYmUpPT5iZVt0aGlzLmluZGV4ZXMuaW5kZXhPZihoW2NlXSldLHY9dGhpcy5kYXRhLmxlbmd0aCxNPVtdO2ZvcihsZXQgcmU9MDtyZTx2O3JlKyspTS5wdXNoKHlzKHRoaXMuZGF0YVtyZV0sZikpO2NvbnN0IEQ9eXModGhpcy5oZWFkZXJzLGYpLFo9''@;'; put 'put ''W107bC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLGwudG9WaXN1YWxDb2x1bW4odGhpcy5pbmRleGVzWzBdKSx0aGlzLmluZGV4ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5i''@;'; put 'put ''YXRjaEV4ZWN1dGlvbigoKT0+e2wucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93UG9zaXRpb25zKSxsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxZbihsLmdldFNvdXJjZURhdGFBcnJheSgp''@;'; put 'put ''LChyZSxjZSk9PntZbihoLChiZSxFZSk9PntyZVtiZV09TVtjZV1bRWVdLFoucHVzaChbY2UsYmUscmVbYmVdXSl9KX0pLHR5cGVvZiB0aGlzLmhlYWRlcnM8InUiJiZZbihELChyZSxjZSk9PntsLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1toW2NlXV09cmV9KSx0aGlzLnJlbW92ZWRDZWxs''@;'; put 'put ''TWV0YXMuZm9yRWFjaChyZT0+e2xldFtjZSxiZSxFZV09cmU7bC5zZXRDZWxsTWV0YU9iamVjdChjZSxiZSxFZSl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChaLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXts''@;'; put 'put ''LmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiB3dyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcGd0KGMpe3ZhciBsPWZ1bmN0aW9uIGdndChjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsZGF0YTpkLGZpeGVkUm93c0JvdHRvbTpoLGZpeGVkUm93c1RvcDpmLHJvd0luZGV4ZXNTZXF1ZW5jZTp2LHJl''@;'; put 'put ''bW92ZWRDZWxsTWV0YXM6TX09bDtzdXBlcigicmVtb3ZlX3JvdyIpLHd3KHRoaXMsImluZGV4Iix2b2lkIDApLHd3KHRoaXMsImRhdGEiLHZvaWQgMCksd3codGhpcywiZml4ZWRSb3dzQm90dG9tIix2b2lkIDApLHd3KHRoaXMsImZpeGVkUm93c1RvcCIsdm9pZCAwKSx3dyh0aGlzLCJyb3dJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UiLHZvaWQgMCksd3codGhpcywicmVtb3ZlZENlbGxNZXRhcyIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5kYXRhPWQsdGhpcy5maXhlZFJvd3NCb3R0b209aCx0aGlzLmZpeGVkUm93c1RvcD1mLHRoaXMucm93SW5kZXhlc1NlcXVlbmNlPXYsdGhpcy5yZW1vdmVk''@;'; put 'put ''Q2VsbE1ldGFzPU19c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLnRvUGh5c2ljYWxSb3coZCksWj1EK2gtMSxyZT1nMShsLmdldFNvdXJjZURhdGEoRCwwLEQraC0x''@;'; put 'put ''LGwuY291bnRTb3VyY2VDb2xzKCktMSkpO3JldHVybiBuZXcgQWVlKHtpbmRleDpELGRhdGE6cmUsZml4ZWRSb3dzQm90dG9tOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZml4ZWRSb3dzVG9wOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3Ascm93SW5kZXhlc1NlcXVlbmNl''@;'; put 'put ''Omwucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscmVtb3ZlZENlbGxNZXRhczpmNmUobCxELFosMCxsLmNvdW50Q29scygpLTEpfSl9LHYpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRTZXR0aW5ncygpLGg9W107ZC5maXhlZFJvd3NCb3R0b209dGhpcy5maXhlZFJvd3NC''@;'; put 'put ''b3R0b20sZC5maXhlZFJvd3NUb3A9dGhpcy5maXhlZFJvd3NUb3AsdGhpcy5kYXRhLmZvckVhY2goKGYsdik9PntPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09Pntjb25zdCBEPXBhcnNlSW50KE0sMTApO2gucHVzaChbdGhpcy5pbmRleCt2LGlzTmFOKEQpP006RCxmW01dXSl9KX0pLGwucm93''@;'; put 'put ''SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixsLnRvVmlzdWFsUm93KHRoaXMuaW5kZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxsLnJvd0luZGV4TWFwcGVyLnNldElu''@;'; put 'put ''ZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2goZj0+e2xldFt2LE0sRF09ZjtsLnNldENlbGxNZXRhT2JqZWN0KHYsTSxEKX0pLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5zZXRTb3VyY2VEYXRh''@;'; put 'put ''QXRDZWxsKGgsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93IixsLnRvVmlzdWFsUm93KHRoaXMuaW5kZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnJlZG8iKX19ZnVu''@;'; put 'put ''Y3Rpb24gcDZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBtZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gdmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7cm93''@;'; put 'put ''czphLGZpbmFsSW5kZXg6ZH09bDtzdXBlcigicm93X21vdmUiKSxwNmUodGhpcywicm93cyIsdm9pZCAwKSxwNmUodGhpcywiZmluYWxSb3dJbmRleCIsdm9pZCAwKSx0aGlzLnJvd3M9YS5zbGljZSgpLHRoaXMuZmluYWxSb3dJbmRleD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRz''@;'; put 'put ''KGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoKT0+eyExIT09ZCYmYS5kb25lKCgpPT5uZXcga2VlKHtyb3dzOmQsZmluYWxJbmRleDpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdS''@;'; put 'put ''ZW5kZXIiLGEpLE1RKHRoaXMucm93cyx0aGlzLmZpbmFsUm93SW5kZXgsbC5yb3dJbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSkucmV2ZXJzZSgpLmZvckVhY2goZj0+e2xldHtmcm9tOnYsdG86TX09Zjt2PE0mJihNLT0xKSxkLm1vdmVSb3coTSx2KX0pLGwucmVuZGVyKCksbC5k''@;'; put 'put ''ZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5yb3dzWzBdLHRoaXMucm93c1swXSt0aGlzLnJvd3MubGVuZ3RoLTEpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1vdmVSb3dz''@;'; put 'put ''KHRoaXMucm93cy5zbGljZSgpLHRoaXMuZmluYWxSb3dJbmRleCksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLmZpbmFsUm93SW5kZXgsdGhpcy5maW5hbFJvd0luZGV4K3RoaXMucm93cy5sZW5ndGgtMSl9fWNsYXNzIERlZSBleHRlbmRzIHRme2NvbnN0''@;'; put 'put ''cnVjdG9yKGwpe2xldHtjZWxsUmFuZ2U6YX09bDtzdXBlcigidW5tZXJnZV9jZWxscyIpLGZ1bmN0aW9uIGJndChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geWd0KGMpe3ZhciBsPWZ1bmN0aW9uIF9ndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tT''@;'; put 'put ''eW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0''@;'; put 'put ''dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw''@;'; put 'put ''fSk6Y1tsXT1hLGN9KHRoaXMsImNlbGxSYW5nZSIsdm9pZCAwKSx0aGlzLmNlbGxSYW5nZT1hfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlclVubWVyZ2VDZWxscyIsKGQsaCk9PntofHxhLmRvbmUoKCk9Pm5ldyBEZWUoe2NlbGxSYW5nZTpkfSkp''@;'; put 'put ''fSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhv''@;'; put 'put ''b2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKSxsLnJlbmRlcigpfX1mdW5jdGlvbiBJZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE1ndChjKXt2YXIgbD1mdW5jdGlvbiB4Z3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFJlZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuZG8iKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVJlZG8iKSxTYS5nZXRTaW5nbGV0b24o''@;'; put 'put ''KS5yZWdpc3RlcigiYWZ0ZXJSZWRvIik7Y29uc3QgbTZlPW5ldyBTZXQ7dmFyIHROPW5ldyBXZWFrU2V0O2NsYXNzIEFndCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ1bmRvUmVkbyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMWUzfXN0''@;'; put 'put ''YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gQ2d0KGMsbCl7KGZ1bmN0aW9uIFNndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl''@;'; put 'put ''bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHROKSxJZWUodGhpcywiZG9uZUFjdGlvbnMiLFtdKSxJZWUodGhpcywidW5kb25lQWN0aW9ucyIsW10pLEllZSh0aGlzLCJpZ25vcmVOZXdBY3Rpb25zIiwhMSksZnVuY3Rpb24gd2d0KGMsbCl7W3llZSxf''@;'; put 'put ''ZWUsd2VlLENlZSxTZWUsTWVlLHhlZSxFZWUsVGVlLEFlZSxrZWUsRGVlXS5mb3JFYWNoKGE9PmEuc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhjLGwpKX0obCx0aGlzKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKCkudW5kb31lbmFibGVQbHVnaW4oKXt2YXIgbD10''@;'; put 'put ''aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFJlZSh0TixsLGtndCkuY2FsbChsLC4uLmQpfSks''@;'; put 'put ''dGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLFJlZSh0Tix0aGlzLERndCkuY2FsbCh0aGlzKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmNsZWFyKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksUmVlKHROLHRoaXMs''@;'; put 'put ''SWd0KS5jYWxsKHRoaXMpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMudW5kbygpfX0se2tleXM6W1si''@;'; put 'put ''Q29udHJvbC9NZXRhIiwieSJdLFsiQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy5yZWRvKCl9fV0se3J1bk9ubHlJZjpmPT4hZi5hbHRLZXksZ3JvdXA6InVuZG9SZWRvIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1h''@;'; put 'put ''bmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCgidW5kb1JlZG8iKX1kb25lKGwsYSl7aWYodGhpcy5pZ25vcmVOZXdBY3Rpb25zfHwiVW5kb1JlZG8udW5kbyI9PT1hfHwiVW5kb1JlZG8ucmVkbyI9PT1hfHwiYXV0byI9PT1hKXJldHVybjtjb25zdCBo''@;'; put 'put ''PXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGgsYSkpcmV0dXJuO2NvbnN0IHY9bCgpLE09dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5kb25lQWN0aW9ucy5wdXNoKHYpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsaCx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLE0pLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tD''@;'; put 'put ''aGFuZ2UiLE0sdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpfXVuZG8oKXtpZighdGhpcy5pc1VuZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsbCk7Y29uc3QgYT10''@;'; put 'put ''aGlzLmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5nZSIsbCx0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGQ9ZzEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kbyIsZCkpcmV0dXJuO3RoaXMuaWdub3Jl''@;'; put 'put ''TmV3QWN0aW9ucz0hMDtjb25zdCBmPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGYpLGEudW5kbyh0aGlzLmhvdCwoKT0+e3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMSx0aGlzLnVuZG9uZUFjdGlvbnMucHVzaChh''@;'; put 'put ''KX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsZix0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kbyIsZCl9cmVkbygpe2lmKCF0aGlzLmlzUmVkb0F2YWlsYWJsZSgpKXJldHVybjtjb25zdCBsPXRoaXMudW5k''@;'; put 'put ''b25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGwpO2NvbnN0IGE9dGhpcy51bmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsbCx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2Uo''@;'; put 'put ''KSk7Y29uc3QgZD1nMShhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZWRvIixkKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGY9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2Ui''@;'; put 'put ''LGYpLGEucmVkbyh0aGlzLmhvdCwoKT0+e3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMSx0aGlzLmRvbmVBY3Rpb25zLnB1c2goYSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGYsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJSZWRvIixkKX1pc1VuZG9BdmFpbGFibGUoKXtyZXR1cm4gdGhpcy5kb25lQWN0aW9ucy5sZW5ndGg+MH1pc1JlZG9BdmFpbGFibGUoKXtyZXR1cm4gdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD4wfWNsZWFyKCl7dGhpcy5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLnVuZG9uZUFj''@;'; put 'put ''dGlvbnMubGVuZ3RoPTB9ZGVzdHJveSgpe3RoaXMuY2xlYXIoKSx0aGlzLmRvbmVBY3Rpb25zPW51bGwsdGhpcy51bmRvbmVBY3Rpb25zPW51bGwsc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrZ3QoYyxsKXsibG9hZERhdGEiPT09bCYmdGhpcy5jbGVhcigpfWZ1bmN0aW9uIERndCgpe2Nv''@;'; put 'put ''bnN0IGM9bD0+e202ZS5oYXMobCl8fChpbChnbGBUaGUgIiR7bH0iIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCBpdCB3aWxsIGJlIHJlbW92ZWRceDIwCiAgICAgICAgICBmcm9tIHRoZSBDb3JlIEFQSSBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlIHRoZSBtZXRob2QgZnJvbSB0aGUgVW5k''@;'; put 'put ''b1JlZG8gcGx1Z2luXHgyMAogICAgICAgICAgKGUuZy4gXGBob3RJbnN0YW5jZS5nZXRQbHVnaW4oInVuZG9SZWRvIikuJHtsfSgpXGApLmApLG02ZS5hZGQobCkpfTt0aGlzLmhvdC51bmRvPSgpPT57YygidW5kbyIpLHRoaXMudW5kbygpfSx0aGlzLmhvdC5yZWRvPSgpPT57YygicmVkbyIp''@;'; put 'put ''LHRoaXMucmVkbygpfSx0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGU9KCk9PihjKCJpc1VuZG9BdmFpbGFibGUiKSx0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKSx0aGlzLmhvdC5pc1JlZG9BdmFpbGFibGU9KCk9PihjKCJpc1JlZG9BdmFpbGFibGUiKSx0aGlzLmlzUmVkb0F2YWlsYWJsZSgpKSx0''@;'; put 'put ''aGlzLmhvdC5jbGVhclVuZG89KCk9PntjKCJjbGVhciIpLHRoaXMuY2xlYXIoKX0sdGhpcy5ob3QudW5kb1JlZG89dGhpc31mdW5jdGlvbiBJZ3QoKXtkZWxldGUgdGhpcy5ob3QudW5kbyxkZWxldGUgdGhpcy5ob3QucmVkbyxkZWxldGUgdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlLGRlbGV0''@;'; put 'put ''ZSB0aGlzLmhvdC5pc1JlZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmNsZWFyVW5kbyxkZWxldGUgdGhpcy5ob3QudW5kb1JlZG99ZnVuY3Rpb24gbk4oKXsoZnVuY3Rpb24gdGF0KCl7SGQoa18pLEhkKFBYKSxIZChIcGUpLEhkKFdwZSksSGQoWXBlKSxIZChEWCksSGQoR3BlKSxIZCgk''@;'; put 'put ''cGUpLEhkKHFwZSksSGQoaTkpLEhkKFhwZSl9KSgpLGZ1bmN0aW9uIE1vdCgpe0RoKElfKSxEaChhVCksRGgoWVgpLERoKFdYKSxEaCgkWCksRGgoWlgpLERoKHJKKSxEaChpSiksRGgoYUopLERoKEE1KSxEaChvSil9KCksZnVuY3Rpb24gUm90KCl7VzcobFQpLFc3KHNKKSxXNyhLUCksVzco''@;'; put 'put ''bEopLFc3KHFQKX0oKSxmdW5jdGlvbiBVb3QoKXtHMihMb3QpLEcyKE9vdCksRzIoRm90KSxHMihIb3QpLEcyKE5vdCksRzIoVm90KSxHMihCb3QpLEcyKGpvdCksRzIoQXBlKSxHMih6b3QpfSgpLGZ1bmN0aW9uIFJndCgpe1BzKHVUKSxQcyhDc3QpLFBzKGZUKSxQcyh0bHQpLFBzKGNsdCks''@;'; put 'put ''UHMobjVlKSxQcyhhY3QpLFBzKEljdCksUHMoREYpLFBzKEp1dCksUHMoTTB0KSxQcyhSMHQpLFBzKE5GKSxQcyh2MXQpLFBzKGdodCksUHMocWh0KSxQcyhTMnQpLFBzKFAydCksUHMoRzJ0KSxQcyhzZnQpLFBzKHZmdCksUHMoTmZ0KSxQcyhHZnQpLFBzKEkzdCksUHMoY3B0KSxQcyhwcHQp''@;'; put 'put ''LFBzKGpwdCksUHMoSTR0KSxQcyh0NXQpLFBzKHU1dCksUHMoTTV0KSxQcyhMNXQpLFBzKFo1dCksUHMoQWd0KX0oKX1sZXQgbmY9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtp''@;'; put 'put ''KHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pfX1yZXR1cm4gY30pKCksQ3c9KCgpPT57Y2xhc3MgY3tuZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbX1csZGhlXSxpbXBvcnRzOltSYSxSYyx6Yyx6MCxuZl19KX19cmV0dXJuIGN9KSgpLFNBPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KX19cmV0dXJuIGN9KSgpLHY2ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''fX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsejAsUmEsUmNdfSl9fXJldHVybiBjfSkoKSxZOT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsejAsemMsQ3csU0EsbmYsdjZlXX0pfX1yZXR1cm4gY30pKCk7dmFyIE9lZSxQZWUsRmVlLEhlZSxOZWUsWDU9eSg1OTQ4KTtjbGFzcyBMZWV7Y29u''@;'; put 'put ''c3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdfWFkZFRvUXVldWUobCl7dGhpcy5xdWV1ZS5wdXNoKC4uLmwpfX1uTigpLGZ1bmN0aW9uIExndChjKXtjb25zdCBsPSEodHlwZW9mIHdpbmRvdz4idSIpJiZ3aW5kb3cualF1ZXJ5O2wmJihsLmZuLmhhbmRzb250YWJsZT1mdW5jdGlvbihhKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuZmlyc3QoKTtsZXQgZixoPWQuZGF0YSgiaGFuZHNvbnRhYmxlIik7aWYoInN0cmluZyIhPXR5cGVvZiBhKXtjb25zdCBaPWF8fHt9O3JldHVybiBoP2gudXBkYXRlU2V0dGluZ3MoWik6KGg9bmV3IGMuQ29yZShkWzBdLFopLGQuZGF0YSgiaGFuZHNvbnRhYmxlIixoKSxoLmlu''@;'; put 'put ''aXQoKSksZH1pZihoKXtpZighKHR5cGVvZiBoW2FdPCJ1IikpdGhyb3cgbmV3IEVycm9yKGBIYW5kc29udGFibGUgZG8gbm90IHByb3ZpZGUgYWN0aW9uOiAke2F9YCk7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodj4xP3YtMTowKSxEPTE7RDx2O0QrKylNW0QtMV09''@;'; put 'put ''YXJndW1lbnRzW0RdO2Y9aFthXS5jYWxsKGgsLi4uTSksImRlc3Ryb3kiPT09YSYmZC5yZW1vdmVEYXRhKCl9cmV0dXJuIGZ9KX0ob3MpLG9zLl9fR2hvc3RUYWJsZT1jSixvcy5fZ2V0TGlzdGVuZXJzQ291bnRlcj1mdW5jdGlvbiBzWGUoKXtyZXR1cm4gWU99LG9zLl9nZXRSZWdpc3RlcmVk''@;'; put 'put ''TWFwc0NvdW50ZXI9ZnVuY3Rpb24gZHR0KCl7cmV0dXJuIEJLfSxvcy5FdmVudE1hbmFnZXI9ajI7Y29uc3QgT2d0PVtJLE8sVSxZLEYsdyxfLEssUCxnLHosTF0sUGd0PVtCLE5dO29zLmhlbHBlcj17fSxvcy5kb209e30sWW4oT2d0LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l''@;'; put 'put ''cyhjKSxsPT57Il8iIT09bC5jaGFyQXQoMCkmJihvcy5oZWxwZXJbbF09Y1tsXSl9KX0pLFluKFBndCxjPT57WW4oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYob3MuZG9tW2xdPWNbbF0pfSl9KSxvcy5jZWxsVHlwZXM9bnVsbCE9PShPZWU9''@;'; put 'put ''b3MuY2VsbFR5cGVzKSYmdm9pZCAwIT09T2VlP09lZTp7fSxZbihfbnQoKSxjPT57b3MuY2VsbFR5cGVzW2NdPUNYKGMpfSksb3MuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGU9RzIsb3MuY2VsbFR5cGVzLmdldENlbGxUeXBlPUNYLG9zLmVkaXRvcnM9bnVsbCE9PShQZWU9b3MuZWRpdG9y''@;'; put 'put ''cykmJnZvaWQgMCE9PVBlZT9QZWU6e30sWW4oZVhlKCksYz0+e29zLmVkaXRvcnNbYCR7cDEoYyl9RWRpdG9yYF09V08oYyl9KSxvcy5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yPUhkLG9zLmVkaXRvcnMuZ2V0RWRpdG9yPVdPLG9zLnJlbmRlcmVycz1udWxsIT09KEZlZT1vcy5yZW5kZXJlcnMp''@;'; put 'put ''JiZ2b2lkIDAhPT1GZWU/RmVlOnt9LFluKFJYZSgpLGM9Pntjb25zdCBsPVFPKGMpOyJiYXNlIj09PWMmJihvcy5yZW5kZXJlcnMuY2VsbERlY29yYXRvcj1sKSxvcy5yZW5kZXJlcnNbYCR7cDEoYyl9UmVuZGVyZXJgXT1sfSksb3MucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXI9RGgsb3Mu''@;'; put 'put ''cmVuZGVyZXJzLmdldFJlbmRlcmVyPVFPLG9zLnZhbGlkYXRvcnM9bnVsbCE9PShIZWU9b3MudmFsaWRhdG9ycykmJnZvaWQgMCE9PUhlZT9IZWU6e30sWW4oUFhlKCksYz0+e29zLnZhbGlkYXRvcnNbYCR7cDEoYyl9VmFsaWRhdG9yYF09dEsoYyl9KSxvcy52YWxpZGF0b3JzLnJlZ2lzdGVy''@;'; put 'put ''VmFsaWRhdG9yPVc3LG9zLnZhbGlkYXRvcnMuZ2V0VmFsaWRhdG9yPXRLLG9zLnBsdWdpbnM9bnVsbCE9PShOZWU9b3MucGx1Z2lucykmJnZvaWQgMCE9PU5lZT9OZWU6e30sWW4oZUsoKSxjPT57b3MucGx1Z2luc1tjXT1ERShjKX0pLG9zLnBsdWdpbnNbYCR7cDEoRnMuUExVR0lOX0tFWSl9''@;'; put 'put ''UGx1Z2luYF09RnMsb3MucGx1Z2lucy5yZWdpc3RlclBsdWdpbj1Qcyxvcy5wbHVnaW5zLmdldFBsdWdpbj1ERTtjb25zdCBWZWU9b3MsQmVlPShjLGwsYSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQodj0+di5kYXRhPT09ZC5OQU1FKSxmPWEudmFyc1tkLk5BTUVdO2YmJihk''@;'; put 'put ''LlRZUEU9WyJEQVRFIiwiREFURVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYoaC5kZXNjPWQuREVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JVTEUmJihoLmNsc1J1bGU9ZC5D''@;'; put 'put ''TFNfUlVMRSl9cmV0dXJuIGx9O2Z1bmN0aW9uIGplZShjLGwpe2lmKG51bGw9PWN8fCFpc05hTihjKSYmaXNGaW5pdGUoYykpcmV0dXJuIGwmJmwoITApLCEwO2NvbnN0IGE9KDAsWDUuaXNTcGVjaWFsTWlzc2luZykoYyk7cmV0dXJuIGwmJmwoYSksYX1jb25zdCBiNmU9e0NBU0U6KGMsbCk9''@;'; put 'put ''Pntzd2l0Y2gobCl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRl''@;'; put 'put ''cyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0sTUlOVkFMOihjLGwpPT57Y29uc3QgYT1qZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybighYXx8IWlzTmFOKGQpKSYmZD49TnVtYmVyKGwudG9TdHJp''@;'; put 'put ''bmcoKSl9LE1BWFZBTDooYyxsKT0+e2NvbnN0IGE9amVlKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxkPD1OdW1iZXIobC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4wfTt2YXIgemVlPXkoNzgzNzUp''@;'; put 'put ''O2NsYXNzIEJndCBleHRlbmRzIFZlZS5lZGl0b3JzLkF1dG9jb21wbGV0ZUVkaXRvcntjb25zdHJ1Y3RvcihsKXtzdXBlcihsKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCl9b3BlbihsKXtzdXBlci5vcGVuKGwpLHRoaXMuaXNDZWxsTnVtZXJpYygpP3RoaXMuaHRD''@;'; put 'put ''b250YWluZXIuY2xhc3NMaXN0LmFkZCgibnVtZXJpY0xpc3Rib3giKTp0aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm51bWVyaWNMaXN0Ym94Iil9aXNDZWxsTnVtZXJpYygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5jbGFzc05hbWU/LmluY2x1ZGVzKCJodE51bWVy''@;'; put 'put ''aWMiKX19Y2xhc3MgeTZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt0aGlzLnJ1bGVzPVtdLHRoaXMuZHFydWxlcz1bXSx0aGlzLmRxZGF0YT1bXSx0aGlzLmhpZGRlbkNvbHVtbnM9W10sdGhpcy5wcmltYXJ5S2V5cz1bXSx0aGlzLmV4ZWN1dGVIb3RWYWxpZGF0b3I9KE0sRCxaKT0+e2Nv''@;'; put 'put ''bnN0IHJlPXsuLi5NLHZhbGlkYXRvcjp2b2lkIDAsY29ycmVjdEZvcm1hdDohMSxyb3c6MCxjb2w6MCxpbnN0YW5jZTpuZXcgVmVlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHt9KSx2aXN1YWxSb3c6MCx2aXN1YWxDb2w6MCxwcm9wOjB9O251bGw9PUQmJihEPSIiKSxNJiZNLnZh''@;'; put 'put ''bGlkYXRvciYmImZ1bmN0aW9uIj09dHlwZW9mIE0udmFsaWRhdG9yP00udmFsaWRhdG9yLmNhbGwocmUsRCxjZT0+e1omJlooY2UpfSk6WiYmWighMSl9LHRoaXMucmVnaXN0ZXJDdXN0b21FZGl0b3JzKCksdGhpcy5zYXNwYXJhbXM9bCx0aGlzLmhvdEluc3RhbmNlPXYsdGhpcy5ydWxlcz0o''@;'; put 'put ''Yz0+e3RyeXtyZXR1cm4gSlNPTi5wYXJzZShgWyR7Y31dYCl9Y2F0Y2h7cmV0dXJuW119fSkobC5DT0xUWVBFKSx0aGlzLnJ1bGVzPUJlZShkLHRoaXMucnVsZXMsYSksdGhpcy5ydWxlcz0oYz0+e2lmKCF6ZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pcmV0dXJuIGM7Zm9yKGxldCBh''@;'; put 'put ''IG9mIGMpIm51bWVyaWMiPT09YS50eXBlJiYoYS5udW1lcmljRm9ybWF0PXtwYXR0ZXJuOiIwLDAiLGN1bHR1cmU6d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZX0pO3JldHVybiBjfSkodGhpcy5ydWxlcyksdGhpcy5kcXJ1bGVzPWgsdGhpcy5kcWRhdGE9Zix0aGlzLnByaW1hcnlLZXlzPWwu''@;'; put 'put ''UEsuc3BsaXQoIiAiKSx0aGlzLnVwZGF0ZURxRGF0YSgpLHRoaXMuc2V0dXBWYWxpZGF0aW9ucygpfXJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpe1ZlZS5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yKCJhdXRvY29tcGxldGUuY3VzdG9tIixCZ3QpfWdldFJ1bGVzKCl7cmV0dXJuIHRoaXMucnVsZXN9''@;'; put 'put ''Z2V0UnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3JldHVybiB0aGlzLnJ1bGVzW2FdfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4gdGhpcy5oaWRkZW5Db2x1bW5zfXVwZGF0ZVJ1bGUobCxhKXtsZXQgZD10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzW2RdPXsu''@;'; put 'put ''Li50aGlzLnJ1bGVzW2RdLC4uLmF9fXJlbW92ZVJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzLnNwbGljZShhLDEpfWdldERxRGV0YWlscyhsKXtyZXR1cm4gbD90aGlzLmRxcnVsZXMuZmlsdGVyKGE9PmEuQkFTRV9DT0w9PT1sKTp0aGlzLmRxcnVsZXN9''@;'; put 'put ''aXNEcUNvbChsKXtyZXR1cm4hIXRoaXMuZHFydWxlcy5maW5kKGE9PmEuQkFTRV9DT0w9PT1sKX1oYXNEcVJ1bGVzKGwsYSxkPSExKXtyZXR1cm4gZD90aGlzLmRxcnVsZXMuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSkubGVuZ3RoPT09YS5sZW5n''@;'; put 'put ''dGg6ISF0aGlzLmRxcnVsZXMuZmluZChoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpfWdldERxRHJvcGRvd25Tb3VyY2UobCl7bGV0IGE9W107cmV0dXJuIHRoaXMuZHFydWxlcy5mb3JFYWNoKGQ9PntkLkJBU0VfQ09MLnRvU3RyaW5nKCk9PT1sLmRhdGEmJmwu''@;'; put 'put ''ZGF0YS50b1N0cmluZygpJiZbIkhBUkRTRUxFQ1QiLCJTT0ZUU0VMRUNUIiwiSEFSRFNFTEVDVF9IT09LIiwiU09GVFNFTEVDVF9IT09LIl0uaW5jbHVkZXMoZC5SVUxFX1RZUEUudG9TdHJpbmcoKSkmJnRoaXMuZHFkYXRhLmZpbHRlcihoPT5oLkJBU0VfQ09MPT09ZC5CQVNFX0NPTCkuZm9y''@;'; put 'put ''RWFjaChoPT57YS5wdXNoKGwudHlwZSYmIm51bWVyaWMiPT09bC50eXBlP051bWJlcihoLlJVTEVfREFUQSk6aC5SVUxFX0RBVEEpfSl9KSxhfXVwZGF0ZURxRGF0YSgpe3RoaXMuZHFkYXRhLmxlbmd0aD4wJiYoYz0+e2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZHFkYXRhLmZvckVhY2goYT0+''@;'; put 'put ''e2wuaW5jbHVkZXMoYS5CQVNFX0NPTCl8fGwucHVzaChhLkJBU0VfQ09MKX0pLGx9KSgpLmZvckVhY2goYT0+e2xldCBkPSExO3RoaXMuZHFydWxlcy5sZW5ndGg+MCYmdGhpcy5kcXJ1bGVzLmZvckVhY2goaD0+e2guQkFTRV9DT0w9PT1hJiYoIlNPRlRTRUxFQ1QiPT09aC5SVUxFX1RZUEV8''@;'; put 'put ''fCJIQVJEU0VMRUNUIj09PWguUlVMRV9UWVBFKSYmKGQ9ITApfSksZHx8dGhpcy5kcXJ1bGVzLnB1c2goe0JBU0VfQ09MOmEsUlVMRV9UWVBFOiJTT0ZUU0VMRUNUIixSVUxFX1ZBTFVFOmEsWDoxfSl9KX1zZXR1cFZhbGlkYXRpb25zKCl7Zm9yKGxldCBsPTA7bDx0aGlzLnJ1bGVzLmxlbmd0''@;'; put 'put ''aDtsKyspe2NvbnN0IGE9dGhpcy5ydWxlc1tsXS5kYXRhfHwiIjtpZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEpe2lmKHRoaXMuaXNEcUNvbChhKSl7bGV0IGg9dGhpcy5nZXREcURyb3Bkb3duU291cmNlKHRoaXMucnVsZXNbbF0pO2gubGVuZ3RoPjAmJih0aGlzLnJ1''@;'; put 'put ''bGVzW2xdLnNvdXJjZT1oLHRoaXMucnVsZXNbbF0udHlwZT0iYXV0b2NvbXBsZXRlIix0aGlzLnJ1bGVzW2xdLmVkaXRvcj0iYXV0b2NvbXBsZXRlLmN1c3RvbSIsdGhpcy5ydWxlc1tsXS5maWx0ZXI9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVCJdKSYmKHRoaXMucnVsZXNb''@;'; put 'put ''bF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJE''@;'; put 'put ''U0VMRUNUX0hPT0siXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMCksdGhpcy5oYXNEcVJ1bGVzKGEsWyJOT1ROVUxMIl0pJiYodGhpcy5ydWxlc1tsXS5hbGxvd0VtcHR5PSExKX0idHJ1ZSI9PT10aGlzLnJ1bGVzW2xdLmNvcnJlY3RGb3JtYXQmJih0aGlzLnJ1bGVzW2xdLmNvcnJlY3RG''@;'; put 'put ''b3JtYXQ9ITApLHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcih0aGlzLGwpLHRoaXMuc2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKX19dGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaCgwKX1zZXREZWZhdWx0VmFsaWRhdG9yKGwsYSl7dGhpcy5ydWxlc1th''@;'; put 'put ''XS52YWxpZGF0b3I9ZnVuY3Rpb24oZCxoKXtjb25zdCBmPWwucnVsZXNbYV0uZGF0YT8udG9TdHJpbmcoKSx2PWwucnVsZXNbYV0udHlwZXx8IiI7bGV0IE09bnVsbDtyZXR1cm4iYXV0b2NvbXBsZXRlIiE9PXRoaXMuZWRpdG9yJiYiYXV0b2NvbXBsZXRlLmN1c3RvbSIhPT10aGlzLmVkaXRv''@;'; put 'put ''cnx8KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKCJhdXRvY29tcGxldGUiKS5jYWxsKHRoaXMsZCxEPT57TT1EfSksTSk/KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKHYpLmNhbGwodGhpcyxkLEQ9PntNPUR9KSxNP2wubGVuZ3RoQ2hlY2soZCxsLnJ1bGVzW2FdLmxlbmd0aCx2KT9s''@;'; put 'put ''LmlzRHFDb2woZnx8IiIpJiYhKChjLGwpPT57Zm9yKGxldCBhIG9mIGMpaWYoYjZlW2EuUlVMRV9UWVBFXSYmIWI2ZVthLlJVTEVfVFlQRV0obCxhLlJVTEVfVkFMVUUpKXJldHVybiBjb25zb2xlLndhcm4oYERRIEludmFsaWQgUmVhc29uOiAke2EuUlVMRV9UWVBFfVxuVmFsdWU6ICR7bH0p''@;'; put 'put ''XG5SdWxlIFZhbHVlOiAke2EuUlVMRV9WQUxVRS5sZW5ndGg+MCYmIiAiIT09YS5SVUxFX1ZBTFVFP2EuUlVMRV9WQUxVRToiTm90IGRlZmluZWQifWApLCExO3JldHVybiEwfSkobC5nZXREcURldGFpbHMoZnx8IiIpLGQpPyhjb25zb2xlLndhcm4oYERRIFZhbGlkYXRpb24gLSBpbnZhbGlk''@;'; put 'put ''IChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTp2b2lkIGgoITApOihjb25zb2xlLndhcm4oYExlbmd0aCBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6''@;'; put 'put ''ICR7ZH0pYCksdm9pZCBoKCExKSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAoYXV0b2NvbXBsZXRlKSAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpfX1sZW5ndGhDaGVjayhsLGEsZCl7aWYoKDAsWDUuaXNTcGVjaWFsTWlzc2luZykobCl8fG51''@;'; put 'put ''bGw9PWx8fG51bGw9PWEpcmV0dXJuITA7aWYoIm51bWVyaWMiPT09ZCl7aWYoOD09PWEpcmV0dXJuITA7aWYoYTwzfHxhPjh8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXJldHVybiBjb25zb2xlLndhcm4oImludmFsaWQgbGVuZ3RoIGZyb20gU0FTLCBydWxlIGxlbmd0aCBjYW4gb25seSBiZSBh''@;'; put 'put ''biBpbnRlZ2VyIGJldHdlZW4gMy04IiksITE7Y29uc3QgaD1OdW1iZXIobCk9PT1sJiZsJTEhPTA7aWYoYTw4JiZoKXJldHVybiBjb25zb2xlLndhcm4oInJlZHVjZWQgbGVuZ3RoIG51bWVyaWNzIGNhbm5vdCBjb250YWluIGRlY2ltYWxzIGVsc2UgcHJlY2lzaW9uIHdpbGwgYmUgYWZmZWN0''@;'; put 'put ''ZWQiKSwhMTtzd2l0Y2goYSl7Y2FzZSAzOnJldHVybiBsPD04MTkyO2Nhc2UgNDpyZXR1cm4gbDw9MjA5NzE1MjtjYXNlIDU6cmV0dXJuIGw8PTUzNjg3MDkxMjtjYXNlIDY6cmV0dXJuIGw8PTEzNzQzODk1MzQ3MjtjYXNlIDc6cmV0dXJuIGw8PTM1MTg0MzcyMDg4ODMyfX1yZXR1cm4gbC50''@;'; put 'put ''b1N0cmluZygpLmxlbmd0aDw9YX1nZXRIYW5kc29udGFibGVWYWxpZGF0b3IobCl7c3dpdGNoKGwpe2Nhc2UiYXV0b2NvbXBsZXRlIjpyZXR1cm4gbFQ7Y2FzZSJudW1lcmljIjpyZXR1cm4gamVlO2Nhc2UiZGF0ZSI6cmV0dXJuIEtQO2Nhc2UidGltZSI6cmV0dXJuIHFQO2RlZmF1bHQ6cmV0''@;'; put 'put ''dXJuKGEsZCk9PmQ/ZCghMCk6bnVsbH19Z2V0UnVsZUluZGV4KGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sOnRoaXMucnVsZXMuZmluZEluZGV4KGE9PmEuZGF0YT09PWwpfXNldENvbHVtbkxldmVsU2VjdXJpdHkobCl7aWYoIXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRylyZXR1cm47''@;'; put 'put ''Y29uc3QgYT10aGlzLnJ1bGVzW2xdO2lmKHRoaXMucHJpbWFyeUtleXMuaW5jbHVkZXMoYS5kYXRhKSYmKGEuY2xzUnVsZT0iUkVBRCIpLCJISURFIj09PWEuY2xzUnVsZSYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2gobCksIlJFQUQiPT09YS5jbHNSdWxlJiYoYS5yZWFkT25seT0hMCksIkVE''@;'; put 'put ''SVQiPT09YS5jbHNSdWxlKXthLnJlYWRPbmx5PSExO2NvbnN0IGQ9dGhpcy5oaWRkZW5Db2x1bW5zLmluZGV4T2YobCk7dGhpcy5oaWRkZW5Db2x1bW5zLnNwbGljZShkLDEpfX19Y29uc3Qgck49e251bWVyaWM6IiIsZGVmYXVsdDoiIn0samd0PShjLGwpPT5jPyJhdXRvY29tcGxldGUiPT09''@;'; put 'put ''Yz9sJiZsLnNvdXJjZT9sLnNvdXJjZVswXTpbXTpyTi5oYXNPd25Qcm9wZXJ0eShjKT9yTltjXTpyTi5kZWZhdWx0OnJOLmRlZmF1bHQsVWVlPWM9Pm5ldyBEYXRlKE1hdGgucm91bmQoODY0MDAqKGMtMjU1NjkpKjFlMykpLFVndD0oYyxsLGEsZCxoLGYsdik9PihXZWUobCksbC5pbm5lckhU''@;'; put 'put ''TUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxjZHMtaWNvbiBzaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiIHN0YXR1cz0id2FybmluZyI+PC9jZHMtaWNvbj5gLGwpLFplZT0oYyxsLGEsZCxoLGYsdik9PihXZWUobCksbC5pbm5lckhUTUw9Znx8IiIsbCksWmd0PShjLGwsYSxkLGgsZix2''@;'; put 'put ''KT0+KFdlZShsKSxsLmlubmVySFRNTD1gJHtmP2YudG9TdHJpbmcoKToiIn0gPHNwYW4gY2xhc3M9InNwaW5uZXIgc3Bpbm5lci1zbSB2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiPjwvc3Bhbj5gLGwpLFdlZT1jPT57Yy5jbGFzc0xpc3QuY29udGFpbnMoImh0RGFyayIpfHxjLmNsYXNzTGlzdC5h''@;'; put 'put ''ZGQoImh0RGFyayIpfSxZZWU9ZnVuY3Rpb24gWWd0KGMpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgY3x8Q3koYykmJiJbb2JqZWN0IFN5bWJvbF0iPT1ieShjKX07dmFyIEdndD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLywkZ3Q9L15cdyokLztm''@;'; put 'put ''dW5jdGlvbiBHZWUoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgY3x8bnVsbCE9bCYmImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLGg9bD9sLmFwcGx5KHRoaXMs''@;'; put 'put ''ZCk6ZFswXSxmPWEuY2FjaGU7aWYoZi5oYXMoaCkpcmV0dXJuIGYuZ2V0KGgpO3ZhciB2PWMuYXBwbHkodGhpcyxkKTtyZXR1cm4gYS5jYWNoZT1mLnNldChoLHYpfHxmLHZ9O3JldHVybiBhLmNhY2hlPW5ldyhHZWUuQ2FjaGV8fGtXKSxhfUdlZS5DYWNoZT1rVztjb25zdCBKZ3Q9R2VlO3Zh''@;'; put 'put ''ciBubXQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2cscm10PS9cXChcXCk/L2csaW10PWZ1bmN0aW9uIGVtdChjKXt2YXIgbD1KZ3QoYyxmdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gNTAwPT09YS5zaXplJiZhLmNsZWFyKCksZH0pLGE9bC5jYWNoZTtyZXR1cm4gbH0oZnVuY3Rpb24oYyl7dmFyIGw9W107cmV0dXJuIDQ2PT09Yy5jaGFyQ29kZUF0KDApJiZsLnB1c2goIiIpLGMucmVwbGFjZShubXQsZnVuY3Rpb24oYSxkLGgsZil7bC5wdXNoKGg/Zi5yZXBsYWNl''@;'; put 'put ''KHJtdCwiJDEiKTpkfHxhKX0pLGx9KTtjb25zdCBhbXQ9aW10O3ZhciBfNmU9dW0/dW0ucHJvdG90eXBlOnZvaWQgMCx3NmU9XzZlP182ZS50b1N0cmluZzp2b2lkIDA7Y29uc3QgY210PWZ1bmN0aW9uIEM2ZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoU3koYykpcmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIG9tdChjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPUFycmF5KGQpOysrYTxkOyloW2FdPWwoY1thXSxhLGMpO3JldHVybiBofShjLEM2ZSkrIiI7aWYoWWVlKGMpKXJldHVybiB3NmU/dzZlLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4i''@;'; put 'put ''MCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LGZtdD1mdW5jdGlvbiBobXQoYyxsKXtyZXR1cm4gU3koYyk/YzpmdW5jdGlvbiBLZ3QoYyxsKXtpZihTeShjKSlyZXR1cm4hMTt2YXIgYT10eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxs''@;'; put 'put ''IT1jJiYhWWVlKGMpKXx8JGd0LnRlc3QoYyl8fCFHZ3QudGVzdChjKXx8bnVsbCE9bCYmYyBpbiBPYmplY3QobCl9KGMsbCk/W2NdOmFtdChmdW5jdGlvbiB1bXQoYyl7cmV0dXJuIG51bGw9PWM/IiI6Y210KGMpfShjKSl9LG1tdD1mdW5jdGlvbiBnbXQoYyl7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjfHxZZWUoYykpcmV0dXJuIGM7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LFNjPWZ1bmN0aW9uIHltdChjLGwsYSl7dmFyIGQ9bnVsbD09Yz92b2lkIDA6ZnVuY3Rpb24gdm10KGMsbCl7Zm9yKHZhciBhPTAsZD0obD1mbXQobCxjKSkubGVuZ3RoO251bGwh''@;'; put 'put ''PWMmJmE8ZDspYz1jW21tdChsW2ErK10pXTtyZXR1cm4gYSYmYT09ZD9jOnZvaWQgMH0oYyxsKTtyZXR1cm4gdm9pZCAwPT09ZD9hOmR9O2xldCBVaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLmxv''@;'; put 'put ''Z2dlclNlcnZpY2U9aCx0aGlzLnJlc3BvbnNlPW5ldyBXbix0aGlzLmNoYW5nZWRUYWJsZT1uZXcgV24sdGhpcy5kZXRhaWxzPW5ldyBXbix0aGlzLmRpZmZzPW5ldyBXbix0aGlzLmNvbHVtbnM9bmV3IFduLHRoaXMudmFsdWVzPW5ldyBXbix0aGlzLmZpbHRlcj1uZXcgV24sdGhpcy5xdWVy''@;'; put 'put ''eT1uZXcgV24sdGhpcy5zdWJtaXR0RGV0YWlsPW5ldyBXbix0aGlzLnJlbW92ZVF1ZXJ5PW5ldyBXbix0aGlzLnNldFN1Ym1pdD1uZXcgV24sdGhpcy5zZXRTdWJtaXRMaXN0PW5ldyBXbn1jYWxsU2VydmljZShhLGQsaCxmKXt2YXIgdj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dCBNPXt9O3JldHVybiBNW2RdPVthXSx7ZGF0YTooeWllbGQgdi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxNKSkuYWRhcHRlclJlc3BvbnNlLGxpYmRzOmZ9fSkoKX11cGRhdGVUYWJsZShhLGQsaCxmLHYsTSxEKXt2YXIgWj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgcmU9e2pzZGF0''@;'; put 'put ''YTpkfTtpZih2KXtsZXQgYmU9Wi5wYXJzZUZvcm1hdHModik7cmUuJGpzZGF0YT17Zm9ybWF0czpiZX19cmV0dXJuIHJlW2hdPVthXSx5aWVsZCBaLnNhc1NlcnZpY2UucmVxdWVzdChmLHJlLEQse3N1cHByZXNzRXJyb3JBYm9ydE1vZGFsOk0sc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDpN''@;'; put 'put ''fSl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNlbmREZXRhaWxzKGEsZCxoKXt2YXIgZj10''@;'; put 'put ''aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj1PYmplY3QuYXNzaWduKHtzdWI6ITB9LGEpO2Yuc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOmhbZF0sdmlld0RhdGE6dn0pfSkoKX1nZXRTdWJtaXR0cygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybih5aWVs''@;'; put 'put ''ZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRzIixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3TGlicygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJz''@;'; put 'put ''IixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWZyZXNoTGliSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtsaWIycmVmcmVzaDpbe2xpYnJlZjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hs''@;'; put 'put ''aWJpbmZvIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPXtTQVNDb250cm9sVGFibGU6W3tNUExJQjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJs''@;'; put 'put ''ZXMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe0xJQkRTOmEsRklMVEVSX1JLOmR9XX07cmV0dXJuKHlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMv''@;'; put 'put ''dmlld2RhdGEiLGYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRhU2VhcmNoKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKihoLGY9ITEsdixNKXtsZXQgWj17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTpoLmxlbmd0aD4wP2Y/Ik5VTSI6IkNIQVIiOiJOT05FIixT''@;'; put 'put ''RUFSQ0hWQUw6aCxMSUJEUzp2LEZJTFRFUl9SSzpNfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixaKSkuYWRhcHRlclJlc3BvbnNlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWdldFhMTWFwUnVsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4g''@;'; put 'put ''ZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD17Z2V0eGxtYXBzX2luOlt7WExNQVBfSUQ6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0eGxtYXBzIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zaG93RGlmZnMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJu''@;'; put 'put ''IGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWplY3RpbmcoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigp''@;'; put 'put ''e2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1hcHByb3ZlVGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3Jl''@;'; put 'put ''dHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRIaXN0b3J5KGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5y''@;'; put 'put ''ZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2V0UXVlcnlWYXJpYWJsZXMoYSxkKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczpkfSxsaWJkczphfSl9Z2V0Q2hhbmdlSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJv''@;'; put 'put ''bFRhYmxlOlt7VEFCTEU6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixmKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLHYpe3ZhciBNPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBE''@;'; put 'put ''PXtpd2FudDpbe2xpYmRzOmQsY29sOmEsLi4uZiYme1NUQVJUUk9XOmZ9LC4uLnYmJntST1dTOnZ9fV19O3JldHVybiBoLmxlbmd0aD4wJiYoRC5GSUxURVJRVUVSWT1oKSwoeWllbGQgTS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjb2x2YWxzIixEKS5jYXRjaChaPT57dGhyb3cg''@;'; put 'put ''Wn0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNhdmVRdWVyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtpd2FudDpbe2ZpbHRlcl90YWJsZTphfV0sZmlsdGVycXVlcnk6ZH07Y29uc3Qgdj15aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3Zh''@;'; put 'put ''bGlkYXRlZmlsdGVyIixmKTtyZXR1cm4gaC5maWx0ZXIubmV4dCh2KSx2LmFkYXB0ZXJSZXNwb25zZX0pKCl9b3BlblRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPXtpd2FudDpbe3RhYmxlX2lkOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5y''@;'; put 'put ''ZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1jaGVja09wZXJhdG9yKGEsZCxoKXtsZXQgZjtzd2l0Y2goYSl7Y2FzZSJCRVRXRUVOIjpkIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWRbMF0mJiIiIT09ZFsxXT9mPWRbMF0rIiBBTkQgIitk''@;'; put 'put ''WzFdOiIiIT09ZFswXSYmIiI9PT1kWzFdPyhkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKToiIj09PWRbMF0mJiIiIT09ZFsxXT8oZFswXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6KGRbMF09Ii4iLGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pKTticmVhaztjYXNlIklOIjpj''@;'; put 'put ''YXNlIk5PVCBJTiI6bGV0IE09W107aWYodHlwZW9mIGQ8InUiKWZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKSEwPT09ZFtEXS5jaGVja2VkJiYoImNoYXIiPT09aD8oInN0cmluZyI9PXR5cGVvZiBkW0RdLnZhbCYmKGRbRF0udmFsPWRbRF0udmFsLnJlcGxhY2UoIiciLCInJyIpKSxNLnB1''@;'; put 'put ''c2goIiciK2RbRF0udmFsKyInIikpOihudWxsPT09ZFtEXS52YWwmJihkW0RdLnZhbD0iLiIpLE0ucHVzaChkW0RdLnZhbCkpKTtkPSIoIitNKyIpIjticmVhaztjYXNlIkNPTlRBSU5TIjphPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6YT0ibmUifXJldHVybiJudW0iPT09aCYmbnVsbD09''@;'; put 'put ''PWQmJihkPSIuIiksIlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ZCYmKGQ9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGEpJiYibnVtIj09PWgmJiIiPT09ZCYmKGQ9Ii4iKSwiQkVUV0VFTiI9PT1hP3t2YWx1ZTpmLG9wZXJhdG9yOmF9Ont2YWx1ZTpkLG9w''@;'; put 'put ''ZXJhdG9yOmF9fXdoZXJlQ2xhdXNlQ3JlYXRvcihhLGQsaCl7bGV0IEQsY2UsZj0iIixaPSIiLHJlPVtdO2ZvcihsZXQgRWU9MDtFZTxhLnF1ZXJ5T2JqLmxlbmd0aDtFZSsrKXtsZXQgQmU9IiIscWU9YS5xdWVyeU9ialtFZV07Zm9yKGxldCBydD0wO3J0PHFlLmVsZW1lbnRzLmxlbmd0aDty''@;'; put 'put ''dCsrKXtsZXQgZHQscHQ9cWUuZWxlbWVudHNbcnRdO0Q9cnQ8cWUuZWxlbWVudHMubGVuZ3RoLTE/cWUuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCB3cj0wO3dyPHB0LnZhbHVlcy5sZW5ndGg7d3IrKyl7aWYoInN0cmluZyI9PXR5cGVvZiBwdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBwdC52''@;'; put 'put ''YWx1ZXNbd3JdLmZvcm1hdHRlZClwdC52YWx1ZT09PUpTT04uc3RyaW5naWZ5KHB0LnZhbHVlc1t3cl0uZm9ybWF0dGVkKSYmKGR0PXB0LnZhbHVlc1t3cl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IG1yPSJudW1iZXIiIT10eXBlb2YgcHQudmFsdWVzW3dyXS5mb3JtYXR0ZWQmJm51bGwhPT1w''@;'; put 'put ''dC52YWx1ZXNbd3JdLmZvcm1hdHRlZD9wdC52YWx1ZXNbd3JdLmZvcm1hdHRlZC50cmltKCk6cHQudmFsdWVzW3dyXS5mb3JtYXR0ZWQ7cHQudmFsdWU9PT1tciYmKGR0PXB0LnZhbHVlc1t3cl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PXB0LnZhbHVlJiYtMSE9PVsi''@;'; put 'put ''PSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihwdC5vcGVyYXRvcikmJihkdD0iIiksKCJDT05UQUlOUyI9PT1wdC5vcGVyYXRvcnx8IkxJS0UiPT09cHQub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1wdC5vcGVyYXRvcikmJihkdD1wdC52YWx1ZSl9aWYoZHR8fChkdD1wdC52''@;'; put 'put ''YWx1ZSkscHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdFRU4iPT09cHQub3BlcmF0b3Ipe2R0PVtdLGR0LnB1c2gocHQudmFsdWVbMF0pLGR0LnB1c2gocHQudmFsdWVbMV0pO2ZvcihsZXQgd3I9MDt3cjxwdC52YWx1ZXMubGVuZ3RoO3dyKyspZHRbMF09PT1wdC52YWx1ZXNbd3Jd''@;'; put 'put ''LmZvcm1hdHRlZCYmKGR0WzBdPXB0LnZhbHVlc1t3cl0udW5mb3JtYXR0ZWQpLGR0WzFdPT09cHQudmFsdWVzW3dyXS5mb3JtYXR0ZWQmJihkdFsxXT1wdC52YWx1ZXNbd3JdLnVuZm9ybWF0dGVkKX1pZihwdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PXB0Lm9wZXJhdG9yfHwi''@;'; put 'put ''Tk9UIElOIj09PXB0Lm9wZXJhdG9yKSl7ZHQ9W10sZHQ9cHQudmFsdWU7Zm9yKGxldCB3cj0wO3dyPHB0LnZhbHVlcy5sZW5ndGg7d3IrKylkdFt3cl0mJmR0W3dyXS52YWw9PT1wdC52YWx1ZXNbd3JdLmZvcm1hdHRlZCYmKGR0W3dyXS52YWw9cHQudmFsdWVzW3dyXS51bmZvcm1hdHRlZCl9''@;'; put 'put ''bGV0IEp0PXB0LnR5cGU7Y29uc3Qgdm49cHQudmFsdWVWYXJpYWJsZTtsZXQgTW4sQ249bnVsbD09PXB0LnZhcmlhYmxlPyIiOnB0LnZhcmlhYmxlLHRuPW51bGw9PT1wdC5vcGVyYXRvcj8iIjpwdC5vcGVyYXRvcjtNbj10aGlzLmNoZWNrT3BlcmF0b3IodG4sZHQsSnQpLnZhbHVlLCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgTW4mJiIoIiE9PU1uWzBdJiYoTW49TW4ucmVwbGFjZSgiJyIsIicnIikpLHRuPXRoaXMuY2hlY2tPcGVyYXRvcih0bixNbixKdCkub3BlcmF0b3IsImNoYXIiPT09SnQmJiJJTiIhPT10biYmIk5PVCBJTiIhPT10bj8odHlwZW9mIE1uPiJ1IiYmKE1uPSIiKSxNbj12bj8i''@;'; put 'put ''ICIrTW4rIiAiOiIgJyIrTW4rIicgIixCZT1CZSsiICIrQ24rIiAiK3RuK01uK0QpOigibnVtIj09PUp0JiZ0eXBlb2YgTW4+InUiJiYoTW49Ii4iKSxNbj10eXBlb2YgTW4+InUiPyIiOiIgIitNbisiICIsQmU9QmUrIiAiK0NuKyIgIit0bitNbitEKX1yZS5wdXNoKEJlKX1aPSIiO2Zvcihs''@;'; put 'put ''ZXQgRWU9MDtFZTxyZS5sZW5ndGg7RWUrKyljZT1FZTxyZS5sZW5ndGgtMT9kOiIiLFo9MT09PXJlLmxlbmd0aD9yZVswXTpaKyIgKCIrcmVbRWVdKyIpICIrY2U7cmV0dXJuIGY9Wi5zdWJzdHIoMSkuc2xpY2UoMCwtMSksWj0iV0hFUkUiK1orIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVD''@;'; put 'put ''bGF1c2U6WixzdHJpbmc6ZixvYmo6YSxsaWJkczpofSkse3doZXJlQ2xhdXNlOlosc3RyaW5nOmZ9fWNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYS5maWx0ZXJHcm91cHMuZm9yRWFjaCgoaCxmKT0+e2guZmlsdGVyQ2xhdXNlcy5mb3JFYWNoKHY9PntsZXQg''@;'; put 'put ''TT0iIjsiQkVUV0VFTiI9PT12Lm9wZXJhdG9yP009YCR7di52YWx1ZVswXX0gQU5EICR7di52YWx1ZVsxXX1gOiJJTiI9PT12Lm9wZXJhdG9yfHwiTk9UIElOIj09PXYub3BlcmF0b3I/KHYudmFsdWUuZm9yRWFjaChEPT57aWYoRC5jaGVja2VkKXtjb25zdCBaPUQudmFsOyJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgWnx8KDAsWDUuaXNTcGVjaWFsTWlzc2luZykoWikmJiJjaGFyIiE9PXYudHlwZT9NLmxlbmd0aD4wP00rPWAsJHtafWA6TT1gKCR7Wn1gOk0ubGVuZ3RoPjA/TSs9YCwnJHtaLnJlcGxhY2UoLycvZywiJyciKX0nYDpNPWAoJyR7Wi5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksTS5s''@;'; put 'put ''ZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09di52YWx1ZT9NPSJjaGFyIj09PXYudHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09di50eXBlJiYhdi52YWx1ZVZhcmlhYmxlJiYoTT1gJyR7di52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2lj''@;'; put 'put ''LFNVQkdST1VQX0xPR0lDOmguY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQX0lEOmYsVkFSSUFCTEVfTk06di52YXJpYWJsZSxPUEVSQVRPUl9OTTp2Lm9wZXJhdG9yLFJBV19WQUxVRTpNfHx2LnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0''@;'; put 'put ''IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6U2MoS24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTtTYyhLbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLFNjKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljPVNj''@;'; put 'put ''KEtuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQztsZXQgZj0iIix2PXtlbGVtZW50czpbXX0sTT0wO1NjKEtuLGEpLmZpbHRlci5xdWVyeS5mb3JFYWNoKEQ9Pntjb25zdCBaPXt9O2ZvcihsZXQgcmU9MDtyZTxkLmxlbmd0aDtyZSsrKWlmKGRbcmVdLk5BTUU9PT1ELlZBUklBQkxF''@;'; put 'put ''X05NKXtpZihmPUQuU1VCR1JPVVBfTE9HSUMsWi5kZHR5cGU9ZFtyZV0uRERUWVBFLFoudHlwZT1kW3JlXS5UWVBFLFoub3BlcmF0b3JzPSJudW0iPT09ZFtyZV0uVFlQRT9Lbi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOktuLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLFoubG9naWM9bnVsbCxa''@;'; put 'put ''Lm9wZXJhdG9yPUQuT1BFUkFUT1JfTk0sWi52YXJpYWJsZT1ELlZBUklBQkxFX05NLCJjaGFyIj09PWRbcmVdLlRZUEUpaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3QgY2U9W10sRWU9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQo''@;'; put 'put ''IicsJyIpOzE9PT1FZS5sZW5ndGg/Y2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6RWVbMF0uc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpfSk6RWUuZm9yRWFjaCgoQmUscWUpPT57Y2UucHVzaCgwPT09cWU/e2NoZWNrZWQ6ITAsdmFsOkJlLnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIici''@;'; put 'put ''KX06cWU9PT1FZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6QmUuc2xpY2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6QmUucmVwbGFjZSgvJycvZywiJyIpfSl9KSxaLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoY2UpfWVsc2UgWi52YWx1''@;'; put 'put ''ZT1ELlJBV19WQUxVRS5zbGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIik7ZWxzZSBpZigiSU4iPT09RC5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBjZT1bXTtELlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKEJlLHFlKT0+''@;'; put 'put ''e2NlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkJlfSl9KSxaLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoY2UpfWVsc2UgaWYoIkJFVFdFRU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3QgY2U9RC5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7Wi52YWx1ZT1jZX1lbHNlIFoudmFs''@;'; put 'put ''dWU9RC5SQVdfVkFMVUU7Wi52YWx1ZXM9W10sTT09PUQuU1VCR1JPVVBfSUR8fChTYyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodikpLFNjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2lj''@;'; put 'put ''PWYsU2MoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52YWxpZENsYXVzZT0hMSxNKyssdi5lbGVtZW50cz1bXSksdi5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpO2JyZWFrfX0pLHYuZWxlbWVudHMubGVuZ3RoPjAmJihTYyhLbixhKS5m''@;'; put 'put ''aWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodikpLFNjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2ljPWYsU2MoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52YWxpZENsYXVzZT0hMSks''@;'; put 'put ''U2MoS24sYSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBhLnJlbW92ZVF1ZXJ5Lm5leHQoITApLCEwfSkoKX1zcGVjQ29udmVyc2lvbihhKXtsZXQgZD17fSxoPVtdO2lmKGg9YS5tYXAoZnVuY3Rpb24oZil7''@;'; put 'put ''cmV0dXJuIGYuTkFNRS50b1VwcGVyQ2FzZSgpfSksYSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWRbaFtmXV09MT09PWFbZl0uVFlQRT97Y29sVHlwZToibnVtIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9Ontjb2xUeXBlOiJzdHJpbmciLGNvbExlbmd0aDph''@;'; put 'put ''W2ZdLkxFTkdUSH07cmV0dXJuIGR9c2V0U3VibWl0UmVhZHkoKXt0aGlzLnNldFN1Ym1pdC5uZXh0KCEwKX1wYXJzZUZvcm1hdHMoYSl7Y29uc3QgZD17fSxoPWEudmFycztmb3IobGV0IGYgb2YgT2JqZWN0LmtleXMoaCkpe2NvbnN0IHY9aFtmXS50eXBlLE09aFtmXS5sZW5ndGg7Im51bSI9''@;'; put 'put ''PT12P2RbZl09ImJlc3QuIjoiY2hhciI9PT12JiYoZFtmXT1gJGNoYXIke019LmApfXJldHVybiBkfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHRsKSx4cihHdSkseHIoU2QpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBTNmU9Yz0+e2xldCBsPSgiMCIrYy5nZXRVVENIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0VVRDU2Vjb25k''@;'; put 'put ''cygpKS5zbGljZSgtMiksbH0sJGVlPWM9PmMuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoYy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrYy5nZXREYXRlKCkpLnNsaWNlKC0yKSxLZWU9Yz0+ISEvXi17MCwxfVxkKyQvLnRlc3QoYyksTTZlPWM9PiEhL15cZCtcLlxkKyQvLnRl''@;'; put 'put ''c3QoYykscWVlPShjLGwpPT5uZXcgRmlsZShbY10sbCx7bGFzdE1vZGlmaWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSk7dmFyIGt1PXkoNjM1NzgpLHg2ZT15KDk0MjQ4KSxFNmU9eSg4MzgzOCk7Y2xhc3MgVDZle2NvbnN0cnVjdG9yKGwpe3RoaXMubGljZW5jZVN0YXRlPWwubGljZW5jZVN0''@;'; put 'put ''YXRlfXBhcnNlU3ByZWFkc2hlZXRGaWxlKGwsYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKCh2LE0pPT57Y29uc3QgRD1sLnVwbG9hZGVyfHxuZXcgTGVlO2lmKGwud29ya2Jvb2spdGhpcy5wYXJzZUV4Y2VsRmlsZShsLGwud29ya2Jvb2ssRCxoKS50aGVuKFo9Pnt2KFop''@;'; put 'put ''fSkuY2F0Y2goWj0+e00oWil9KTtlbHNle2NvbnN0IHJlPWwuZmlsZTtsLmVuY29kaW5nfHwobC5lbmNvZGluZz0iVVRGLTgiKSxkJiZkKGBMb2FkaW5nICR7cmUubmFtZX0gaW50byB0aGUgYnJvd3NlcmApO2xldCBjZT1yZS5uYW1lLnNsaWNlKHJlLm5hbWUubGFzdEluZGV4T2YoIi4iKSsx''@;'; put 'put ''LHJlLm5hbWUubGFzdEluZGV4T2YoIi4iKSs0KTtpZigieGxzIiE9PWNlLnRvTG93ZXJDYXNlKCkpe2lmKCJjc3YiPT09Y2UudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5wYXJzZUNzdkZpbGUobCxELGNlKS50aGVuKGJlPT52KGJlKSkuY2F0Y2goYmU9Pk0oYmUpKTt7bGV0IGJlPSdJbnZh''@;'; put 'put ''bGlkIGZpbGUgdHlwZSAiPGI+JytsLmZpbGUubmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgY3N2IG9yIGV4Y2VsIGZpbGUuJztyZXR1cm4gRC5xdWV1ZS5wb3AoKSxNKGJlKX19e2xldCBiZT1uZXcgRmlsZVJlYWRlcjtiZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgQmU9ZWUoZnVuY3Rpb24q''@;'; put 'put ''KHFlKXtjb25zdCBydD15aWVsZCBmLnhzbHhTdGFydFJlYWRpbmcocWUsYSxsLnBhc3N3b3JkKTtpZighcnQpcmV0dXJuIE0oIk5vIHdvcmtib29rIGZvdW5kLiIpO2YucGFyc2VFeGNlbEZpbGUobCxydCxELGgpLnRoZW4ocHQ9Pnt2KHB0KX0pLmNhdGNoKHB0PT57TShwdCl9KX0pO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihxZSl7cmV0dXJuIEJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksYmUucmVhZEFzQXJyYXlCdWZmZXIocmUpfX19KX1wYXJzZUV4Y2VsRmlsZShsLGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxEPVtdO2NvbnN0IFo9WyJfX19fX0RFTEVU''@;'; put 'put ''RV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmwuaGVhZGVyQXJyYXldLHJlPXRoaXMuc2VhcmNoRGF0YUluRXhjZWwoYSxsKTtsZXQgY2U9W107aWYocmUuZm91bmQ/KE09ITAsY2U9cmUuZm91bmQuYXJyYXlEYXRhLHJlLmZvdW5kLmhlYWRlcnMuaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlz''@;'; put 'put ''X19yZWNvcmRfX19fXyIpfHwoY2U9Y2UubWFwKEJlPT4oQmUudW5zaGlmdCh7djoiIn0pLEJlKSkpLGgmJmgoYFNoZWV0OiAke3JlLmZvdW5kLnNoZWV0TmFtZX1cblJhbmdlOiAke3JlLmZvdW5kLnN0YXJ0QWRkcmVzc306JHtyZS5mb3VuZC5lbmRBZGRyZXNzfWApKTpEPXJlLm1pc3Npbmd8''@;'; put 'put ''fFtdLEQubGVuZ3RoPjApe2xldCBCZT1ELm1hcChxZT0+YFNoZWV0OiAke3FlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7cWUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKTtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEJlKX1pZigwPT09Y2UubGVuZ3Ro''@;'; put 'put ''fHwwPT09Y2VbMF0ubGVuZ3RoKXtsZXQgQmU9Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEJlKX1pZigobC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjB8fGwuZGF0ZUhlYWRlcnMubGVuZ3RoPjB8fGwudGltZUhlYWRlcnMubGVuZ3Ro''@;'; put 'put ''PjApJiYoY2U9dGhpcy51cGRhdGVEYXRlVGltZUNvbHMoWixjZSxsKSksbC54bFJ1bGVzLmxlbmd0aD4wJiYoY2U9dGhpcy51cGRhdGVYTFJ1bGVDb2xzKFosY2UsbCkpLCFNKXtsZXQgQmU9IiI7cmV0dXJuIEJlPTA9PT1ELmxlbmd0aD8iTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxl''@;'; put 'put ''ICEiOkQubWFwKHFlPT5gU2hlZXQ6ICR7cWUuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtxZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpLGQucXVldWUucG9wKCksdihCZSl9e2wuaGVhZGVyU2hvdz1aLGNlPWNlLm1hcChKdD0+SnQubWFwKHZuPT4i''@;'; put 'put ''biI9PT12bi50fHx2bi53P3ZuLnY6InN0cmluZyI9PXR5cGVvZiB2bi52P3ZuLnYudHJpbSgpOnZuLnYpKSxjZT1jZS5tYXAoSnQ9Pkp0Lm1hcCgodm4sQ24pPT57IXZuJiYwIT09dm4mJih2bj0iIik7Y29uc3QgdG49bC5oZWFkZXJTaG93W0NuXTtyZXR1cm4ibnVtZXJpYyI9PT1sLmRjVmFs''@;'; put 'put ''aWRhdG9yPy5nZXRSdWxlKHRuKT8udHlwZSYmKDAsWDUuaXNTcGVjaWFsTWlzc2luZykodm4pJiYhdm4uaW5jbHVkZXMoIi4iKSYmKHZuPSIuIit2biksdm59KSk7Y29uc3QgQmU9Y2Uuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IHB0LHFl''@;'; put 'put ''PWt1LnV0aWxzLmpzb25fdG9fc2hlZXQoQmUse3NraXBIZWFkZXI6ITB9KSxydD1rdS51dGlscy5zaGVldF90b19jc3YocWUpO2lmKHJ0PVouam9pbigiLCIpKyJcbiIrcnQsIldMQVRJTjEiPT09bC5lbmNvZGluZyl7bGV0IEp0PXg2ZS5kZWNvZGUoRTZlLkJ1ZmZlci5mcm9tKHJ0KSwiQ1At''@;'; put 'put ''MTI1MiIpO3B0PW5ldyBCbG9iKFtKdF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1lbHNlIHB0PW5ldyBCbG9iKFtydF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtsZXQgZHQ9cWVlKHB0LGwuZmlsZS5uYW1lKyIuY3N2Iik7ZC5hZGRUb1F1ZXVlKFtkdF0pfWlmKDA9PT1jZS5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIHYoYFRhYmxlIGluIHRoZSBmaWxlIGlzIGVtcHR5LiBEYXRhIGZvdW5kIG9uIHNoZWV0OiAke3JlLmZvdW5kPy5zaGVldE5hbWV8fCIifWApO2lmKCFyZS5mb3VuZClyZXR1cm4gdigiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZC4gJ2ZvdW5kJyBvYmplY3QgaXMgZW1wdHksIHVu''@;'; put 'put ''ZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuIik7Y29uc3QgYmU9cmUuZm91bmQuc3RhcnRBZGRyZXNzfHwiIixFZT1yZS5mb3VuZC5lbmRBZGRyZXNzfHwiIjtyZXR1cm4gZih7dXBsb2FkZXI6ZCxkYXRhOmNlLHJhbmdlU2hlZXRSZXM6e2ZvdW5kOiEhcmUuZm91bmQsc2hlZXROYW1lOnJlLmZv''@;'; put 'put ''dW5kLnNoZWV0TmFtZSxyYW5nZVN0YXJ0QWRkcmVzczpiZSxyYW5nZUVuZEFkZHJlc3M6RWUscmFuZ2VBZGRyZXNzOmAke2JlfToke0VlfWAsbWlzc2luZ0hlYWRlcnM6RH0saGVhZGVyU2hvdzpsLmhlYWRlclNob3d9KX0pfXBhcnNlQ3N2RmlsZShsLGEsZCl7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KChoLGYpPT57aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzApcmV0dXJuIGEucXVldWUucG9wKCksZigiRXhjZWwgZmlsZXMgb25seS4gVG8gdW5sb2NrIENTViB1cGxvYWRzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlv''@;'; put 'put ''Iik7aWYoIldMQVRJTjEiIT09bC5lbmNvZGluZylyZXR1cm4gaCh7dXBsb2FkZXI6YX0pO3tsZXQgdj1uZXcgRmlsZVJlYWRlcjt2Lm9ubG9hZD1EPT57bGV0IFo9eDZlLmRlY29kZShFNmUuQnVmZmVyLmZyb20oRC50YXJnZXQucmVzdWx0KSwiQ1AtMTI1MiIpLHJlPW5ldyBCbG9iKFtaXSx7''@;'; put 'put ''dHlwZTpkfSksY2U9cWVlKHJlLGwuZmlsZS5uYW1lKTtyZXR1cm4gYS5xdWV1ZS5wb3AoKSxhLmFkZFRvUXVldWUoW2NlXSksaCh7dXBsb2FkZXI6YX0pfSx2LnJlYWRBc0FycmF5QnVmZmVyKGwuZmlsZSl9fSl9Ynl0ZXNUb01CKGwpe3JldHVybiBwYXJzZUZsb2F0KChsLzEwNDg1NzYpLnRv''@;'; put 'put ''Rml4ZWQoMikpfXhzbHhTdGFydFJlYWRpbmcobCxhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGY9ZWUoZnVuY3Rpb24qKHYsTSl7Y29uc3QgRD1oLnRvQnN0cihsLnRhcmdldC5yZXN1bHQpO2xldCBaLHJlPSExO2NvbnN0IGNlPXt0eXBlOiJiaW5h''@;'; put 'put ''cnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMSxwYXNzd29yZDpkfTt0cnl7Wj15aWVsZCBoLnhsc3hSZWFkKEQsey4uLmNlfSl9Y2F0Y2goYmUpe2lmKCFiZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBh''@;'; put 'put ''c3N3b3JkIikpcmV0dXJuIE0oIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7cmU9ITA7bGV0IEVlPSExO2Zvcig7cmU7KXtjb25zdCBCZT15aWVsZCBhKHtlcnJvcjpFZX0pO2lmKEJlKXRyeXtaPXlpZWxkIGgueGxzeFJlYWQoRCx7Li4uY2UscGFzc3dvcmQ6QmV9KSxyZT0hMSxFZT0hMX1j''@;'; put 'put ''YXRjaChxZSl7RWU9ITAscWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpfHwocmU9ITEpfWVsc2UgcmU9ITF9fX1yZXR1cm4gWj92KFopOk0oIkZhaWxlZCB0byBwYXJzZSBhIHdvcmtib29rIil9KTtyZXR1cm4gZnVuY3Rpb24odixNKXtyZXR1cm4gZi5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9fSgpKX14bHN4UmVhZChsLGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKGEmJmEucGFzc3dvcmQpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIGhhcyBwYXNzd29yZCIpLGQoa3UucmVhZChs''@;'; put 'put ''LGEpKTtpZih0eXBlb2YgV29ya2VyPiJ1IilyZXR1cm4gY29uc29sZS5pbmZvKCJOb3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gbm8gV29ya2VyIGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50IiksZChrdS5yZWFkKGwsYSkpO2NvbnNvbGUuaW5mbygiVXNpbmcgd29y''@;'; put 'put ''a2VyIHRvIHBhcnNlIHRoZSBYTFNYIik7Y29uc3QgZj1uZXcgV29ya2VyKHkudHUobmV3IFVSTCh5LnAreS51KDQxMSkseS5iKSkpO2Yub25tZXNzYWdlPSh7ZGF0YTp2fSk9PnsicmVhZGluZ19lbmQiPT09di5ldmVudD9kKHYud29ya2Jvb2spOnYuZXJyb3I/aCh2LmVycm9yKTooY29uc29s''@;'; put 'put ''ZS5pbmZvKCJXb3JrZXIgZmFpbGVkIHRvIHBhcnNlIHRoZSBYTFNYIC0gZmFsbGJhY2sgdG8gbm9uIHdvcmtlciBwYXJzaW5nIiksZChrdS5yZWFkKHYsYSkpKX0sZi5wb3N0TWVzc2FnZSh7ZGF0YTpsLG9wdHM6YX0pLHNldFRpbWVvdXQoKCk9PmQoa3UucmVhZChsLGEpKSw2ZTUpfSl9c2Vh''@;'; put 'put ''cmNoRGF0YUluRXhjZWwobCxhKXtsZXQgZCxoLGYsdixNPSIiLEQ9W10scmU9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmEuaGVhZGVyQXJyYXldLm1hcChiZT0+YmUudG9Mb3dlckNhc2UoKSksY2U9cmUucmVkdWNlKChiZSxFZSk9PihiZVtFZV09LTEsYmUpLHt9KTtm''@;'; put 'put ''b3IobGV0IGJlIG9mIGwuU2hlZXROYW1lcyl7ZD12b2lkIDAsaD12b2lkIDAsY2U9cmUucmVkdWNlKCh0bixNbik9Pih0bltNbl09LTEsdG4pLHt9KTtsZXQgRWU9W107TT1iZTtjb25zdCBCZT1sLlNoZWV0c1tNXTtpZihPYmplY3Qua2V5cyhCZSkuZm9yRWFjaCh0bj0+e2NvbnN0IE1uPUJl''@;'; put 'put ''W3RuXS52O2lmKE1uJiYic3RyaW5nIj09dHlwZW9mIE1uKXtjb25zdCB3cj1Nbi50b0xvd2VyQ2FzZSgpO3JlLmluZGV4T2Yod3IpPi0xJiYoY2Vbd3JdPXRuLGR8fChkPXRuKSxoPXRuKX19KSwtMT09PWNlLl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyYmZGVsZXRlIGNlLl9fX19f''@;'; put 'put ''ZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyxFZT1PYmplY3Qua2V5cyhjZSkuZmlsdGVyKHRuPT4tMT09PWNlW3RuXSksRWUubGVuZ3RoPjApe0QucHVzaCh7c2hlZXROYW1lOk0sbWlzc2luZ0hlYWRlcnM6RWUubWFwKHRuPT50bi50b1VwcGVyQ2FzZSgpKX0pO2NvbnRpbnVlfWNvbnN0IHFl''@;'; put 'put ''PU9iamVjdC5rZXlzKGNlKTtsZXQgZHQscnQ9W10scHQ9W107cWUuc29ydCgodG4sTW4pPT57Y29uc3Qgd3I9YS5oZWFkZXJQa3MuaW5jbHVkZXModG4pPzE6MDtyZXR1cm4oYS5oZWFkZXJQa3MuaW5jbHVkZXMoTW4pPzE6MCktd3J9KS5mb3JFYWNoKHRuPT57Y29uc3QgTW49Y2VbdG5dLHdy''@;'; put 'put ''PU1uLm1hdGNoKC9cRCsvKSxHcj1Nbi5tYXRjaCgvXGQrLyksbXI9KHdyP3dyWzBdOi0xKXx8LTEsYWk9cGFyc2VJbnQoKEdyP0dyWzBdOi0xKXx8LTEpKzE7bGV0IF9pPTA7aWYoZHQpZm9yKGxldCBPbj1haTtPbjw9ZHQ7T24rKyl7Y29uc3QgSm49QmVbYCR7bXJ9JHtPbn1gXTtpZihhLmhl''@;'; put 'put ''YWRlclBrcy5pbmNsdWRlcyh0bikmJih2b2lkIDA9PT1Kbnx8dm9pZCAwPT09Sm4udikpe2R0PU9uO2JyZWFrfXJ0W19pXXx8cnQucHVzaCh7fSksSm4mJihydFtfaV1bdG5dPSJzdHJpbmciPT10eXBlb2YgSm4udj9Kbi52LnRyaW0oKTpKbi52KSxwdFtfaV18fHB0LnB1c2goW10pLHB0W19p''@;'; put 'put ''XS5wdXNoKEpuPz97djoiIn0pLF9pKyt9ZWxzZXtsZXQgT249YWk7Zm9yKDt2b2lkIDA9PT1kdDspe2NvbnN0IHpyPWAke21yfSR7T259YCxKbj1CZVt6cl07aWYoIUpufHx2b2lkIDA9PT1Kbi52KXtkdD1Pbi0xO2JyZWFrfXJ0W19pXXx8cnQucHVzaCh7fSkscnRbX2ldW3RuXT0ibiI9PT1C''@;'; put 'put ''ZVt6cl0udD9CZVt6cl0udjpCZVt6cl0udz9CZVt6cl0udzoic3RyaW5nIj09dHlwZW9mIEJlW3pyXS52P0JlW3pyXS52LnRyaW0oKTpCZVt6cl0udixwdFtfaV18fHB0LnB1c2goW10pLHB0W19pXS5wdXNoKEpuPz97djoiIn0pLE9uKyssX2krK319aWYoZCYmaCl7Y29uc3QgT249aC5tYXRj''@;'; put 'put ''aCgvXEQrLyk7Zj1kLHY9YCR7T259JHtkdH1gfX0pO2NvbnN0IHZuPVtdO2xldCBDbjtyZXR1cm4gcnQuZm9yRWFjaCgodG4sTW4pPT57bGV0IHdyPSExO2EuaGVhZGVyUGtzLmZvckVhY2goR3I9Pnt2b2lkIDA9PT10bltHci50b0xvd2VyQ2FzZSgpXSYmKHdyPSEwKX0pLHdyJiYodm4ucHVz''@;'; put 'put ''aChNbiksQ258fChDbj1NbikpfSksQ24/KHJ0LnNwbGljZShDbiwxLzApLHB0LnNwbGljZShDbiwxLzApKTp2bi5zb3J0KCh0bixNbik9Pk1uLXRuKS5mb3JFYWNoKHRuPT57cnQuc3BsaWNlKHRuLDEpLHB0LnNwbGljZSh0biwxKX0pLHB0Lmxlbmd0aD97Zm91bmQ6e2RhdGE6cnQsYXJyYXlE''@;'; put 'put ''YXRhOnB0LHNoZWV0TmFtZTpNLHN0YXJ0QWRkcmVzczpmLGVuZEFkZHJlc3M6dixoZWFkZXJzOnFlfX06e319cmV0dXJue21pc3Npbmc6RH19dXBkYXRlRGF0ZVRpbWVDb2xzKGwsYSxkKXtpZihkLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtjb25zdCBoPVtdO2QuZGF0ZUhlYWRlcnMuZm9yRWFj''@;'; put 'put ''aChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KSl7Y29uc3QgRD1VZWUoTnVtYmVyKE0udikpO00udj1ELmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKEQuZ2V0TW9u''@;'; put 'put ''dGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK0QuZ2V0RGF0ZSgpKS5zbGljZSgtMil9ZWxzZSBpZihNJiZNLnYmJi0xPT09TS52LnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpKXtjb25zdCBEPW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9JGVl''@;'; put 'put ''KEQpKX1mW3ZdPU19KX0pfWlmKGQudGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO2QudGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihL''@;'; put 'put ''ZWUoTS52KXx8TTZlKE0udil8fE0udi5pbmNsdWRlcygiRS0iKSl7Y29uc3QgRD1VZWUoTnVtYmVyKE0udikpO00udj1TNmUoRCl9Zlt2XT1NfSl9KX1pZihkLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGg9W107ZC5kYXRlVGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmlu''@;'; put 'put ''ZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KXx8TTZlKE0udikpe2NvbnN0IEQ9VWVlKE51bWJlcihNLnYpKTtNLnY9JGVlKEQpKyIgIitTNmUoRCl9ZWxzZXtpZigtMT09PU0udi5pbmRl''@;'; put 'put ''eE9mKCIgIikmJi0xIT09TS52LmluZGV4T2YoIjoiKSl7bGV0IFo9TS52LnN1YnN0cmluZygwLE0udi5pbmRleE9mKCI6IikpO1o9WisiICIrTS52LnN1YnN0cmluZyhNLnYuaW5kZXhPZigiOiIpKzEpLE0udj1afWNvbnN0IEQ9bmV3IERhdGUoTS52KTsiSW52YWxpZCBEYXRlIiE9PUQudG9V''@;'; put 'put ''VENTdHJpbmcoKSYmKE0udj0kZWUoRCkrIiAiKyhjPT57bGV0IGw9KCIwIitjLmdldEhvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0TWludXRlcygpKS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSkoRCkpfWZbdl09''@;'; put 'put ''TX0pfSl9cmV0dXJuIGF9dXBkYXRlWExSdWxlQ29scyhsLGEsZCl7aWYoZC54bFJ1bGVzLmxlbmd0aD4wKXtjb25zdCBoPVtdO2QueGxSdWxlcy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmLlhMX0NPTFVNTikmJihmLmluZGV4PWwuaW5kZXhPZihmLlhMX0NPTFVNTiksaC5wdXNoKGYp''@;'; put 'put ''KX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdi5pbmRleF07IkZPUk1VTEEiPT09di5YTF9SVUxFJiYiZiJpbiBNJiYoIm4iPT09TS50P00udj0iPSIrTS5mOk0udz0iPSIrTS5mKSxmW3ZdPU19KX0pfXJldHVybiBhfXRvQnN0cihsKXtsZXQgYT1uZXcgVWludDhB''@;'; put 'put ''cnJheShsKSxkPSIiLGg9YS5ieXRlTGVuZ3RoO2ZvcihsZXQgZj0wO2Y8aDtmKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2ZdKTtyZXR1cm4gZH19bGV0IEE2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2U9YSx0aGlz''@;'; put 'put ''LmV2ZW50U2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQ9Zj0+bmV3IFByb21pc2UoKHYsTSk9Pnt0aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZp''@;'; put 'put ''Y2Uub3BlbihmKS5zdWJzY3JpYmUoRD0+e3YoRC5wYXNzd29yZCl9KX0pfXBhcnNlRXhjZWxGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFQ2ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSkucGFyc2VTcHJlYWRzaGVldEZpbGUoYSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQsZCxo''@;'; put 'put ''KX14bHN4UmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3QgZj1uZXcgVDZlKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KTtsZXQgdj1uZXcgRmlsZVJlYWRlcjt2Lm9ubG9hZD1NPT57Zi54c2x4U3RhcnRSZWFkaW5nKE0sdGhpcy5wcm9tcHRFeGNl''@;'; put 'put ''bFBhc3N3b3JkKS50aGVuKEQ9PntkKEQpfSkuY2F0Y2goRD0+e2goRCl9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihhKX0pfXBhcnNlRXhjZWxTaGVldE5hbWVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2NvbnN0IHY9bmV3''@;'; put 'put ''IEZpbGVSZWFkZXI7aWYoIWEpcmV0dXJuIGNvbnNvbGUud2FybigiZmlsZSBpcyBtaXNzaW5nIiksaCh7c2hlZXROYW1lczpbXX0pO3Yub25sb2FkPWZ1bmN0aW9uKCl7dmFyIE09ZWUoZnVuY3Rpb24qKEQpe2lmKCFEPy50YXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJGaWxlIHJl''@;'; put 'put ''YWRlciBldmVudC50YXJnZXQgaXMgbWlzc2luZyIpO2xldCBaLGNlLHJlPSExO2NvbnN0IGJlPUQudGFyZ2V0LnJlc3VsdDt0cnl7Wj1rdS5yZWFkKGJlLHtib29rU2hlZXRzOiEwLHR5cGU6ImJpbmFyeSJ9KX1jYXRjaChFZSl7aWYoIUVlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRl''@;'; put 'put ''cygicGFzc3dvcmQiKSlyZXR1cm4gZigiRXJyb3IgcmVhZGluZyB0aGUgZmlsZSIpO3tyZT0hMDtsZXQgQmU9ITE7Zm9yKDtyZTspe2lmKGNlPXlpZWxkIGQucHJvbXB0RXhjZWxQYXNzd29yZCh7ZXJyb3I6QmV9KSwhY2UpcmV0dXJuIHJlPSExLGYoIk5vIHBhc3N3b3JkIHByb3ZpZGVkIik7''@;'; put 'put ''dHJ5e1o9a3UucmVhZChiZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkiLHBhc3N3b3JkOmNlfSkscmU9ITEsQmU9ITF9Y2F0Y2gocWUpe0JlPSEwLHFlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KHJlPSExKX1pZighY2UpcmV0dXJuIGYoIkludmFs''@;'; put 'put ''aWQgcGFzc3dvcmQsIGZhaWxlZCB0byBkZWNyeXB0IHRoZSBmaWxlIil9fX1pZighWilyZXR1cm4gZigiRXJyb3IgcGFyc2luZyB0aGUgd29ya2Jvb2siKTt0cnl7cmV0dXJuIGgoe3NoZWV0TmFtZXM6Wi5TaGVldE5hbWVzLHBhc3N3b3JkOmNlfSl9Y2F0Y2goRWUpe2NvbnNvbGUuZXJyb3Io''@;'; put 'put ''RWUpfX0pO3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gTS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHYub25lcnJvcj1mdW5jdGlvbihNKXtjb25zb2xlLmxvZyhNKX0sdi5yZWFkQXNCaW5hcnlTdHJpbmcoYSl9KX0pKCl9Ynl0ZXNUb01CKGEpe3JldHVybiBwYXJzZUZsb2F0KChhLzEw''@;'; put 'put ''NDg1NzYpLnRvRml4ZWQoMikpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKGhoZSkseHIodmMpLHhyKHUxKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290''@;'; put 'put ''In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRzk9dm9pZCAwLFNtdD1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJwbSJdLEc5XSxbWyJhbSIsInBtIl0sRzksRzldLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNh''@;'; put 'put ''dCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLEc5LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwi''@;'; put 'put ''RCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2Jl''@;'; put 'put ''ciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sRzksW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQgTU1NIHkiLCJkIE1NTU0geSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1tOnNzIiwi''@;'; put 'put ''SEg6bW06c3MgeiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IixHOSwiezF9ICdhdCcgezB9IixHOV0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIs''@;'; put 'put ''IiNFMCJdLCJHQlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJVUyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIENtdChjKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8s''@;'; put 'put ''IiIpLmxlbmd0aDtyZXR1cm4gMT09PWEmJjA9PT1kPzE6NX1dLE1tdD1bImlucHV0Il0seG10PVsiKiJdLEVtdD0oYyxsKT0+KHsid2lkdGgucHgiOmMsIm1heC1oZWlnaHQucHgiOmx9KTtmdW5jdGlvbiBUbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDcpLE9lKDEpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1MZSgpO2ZlKCksSXIoIiAiLGEubG9hZGluZ01vcmU/IkxvYWRpbmcuLi4iOiJMT0FEIE1PUkUiLCIgIil9fWxldCBrNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNkcj1hLHRoaXMuaW5wdXRJZD0iIix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMudmFs''@;'; put 'put ''dWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuYXV0b2NvbXBsZXRlPSJvZmYiLHRoaXMudGFiaW5kZXg9IiIsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy5vbklucHV0S2V5ZG93bj1uZXcgS3IsdGhpcy5vbklu''@;'; put 'put ''cHV0Q2hhbmdlPW5ldyBLcix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9uTG9hZGluZ01vcmU9bmV3IEtyLHRoaXMuZGF0YWxpc3RPcGVuPSExLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5PTE1MCx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5p''@;'; put 'put ''bnB1dENsaWVudFJlY3Q9e30sdGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmxvYWRpbmdNb3JlPSExfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX0sNTAwKX1vbklucHV0RmlyZWQoYSxk''@;'; put 'put ''LGgpe3RoaXMub3BlbkRhdGFsaXN0KCJjbGljayIhPT1oKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMuZmlsdGVyT3B0aW9uc0xpc3QoKSwoIXRoaXMuZW1pdE9ubHlTZWxlY3RlZHx8ZCkmJih0aGlzLm9uSW5wdXRDaGFuZ2UuZW1pdCh7dGFyZ2V0Ont2YWx1ZTp0aGlzLnZhbHVl''@;'; put 'put ''fX0pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSl9b25JbnB1dENsaWNrKGEpe3RoaXMub3BlbkRhdGFsaXN0KCl9b3BlbkRhdGFsaXN0KGE9ITApe3RoaXMuZGF0YWxpc3RPcGVuPSEwLGEmJih0aGlzLmFmdGVyT3BlbkxvY2s9ITAsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlU''@;'; put 'put ''aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLmFmdGVyT3BlbkxvY2s9ITF9LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5KSl9Y2xvc2VEYXRhbGlzdCgpe2NsZWFyVGltZW91dCh0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQpLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmRhdGFs''@;'; put 'put ''aXN0T3Blbj0hMX1yZXNldERhdGFsaXN0RmlsdGVyKCl7dGhpcy5maWx0ZXJPcHRpb25zTGlzdCghMCl9b25JbnB1dEZvY3VzaW4oYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITB9b25JbnB1dEZvY3Vzb3V0KGEpe3RoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9''@;'; put 'put ''b25JbnB1dE1vdXNlZW50ZXIoYSl7dGhpcy5pbnB1dENsaWVudFJlY3Qud2lkdGh8fHRoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfWZpbHRlck9wdGlvbnNMaXN0KGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRp''@;'; put 'put ''b25gKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO2lmKDA9PT10aGlzLnZhbHVlLmxlbmd0aCl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1pZihhKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWNvbnN0IHY9Zi5p''@;'; put 'put ''bm5lclRleHR8fCIiLE09Zi52YWx1ZXx8IiI7KHYrTSk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52YWx1ZS50b0xvd2VyQ2FzZSgpKT9mLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmYuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fXNldFRvQ2xvc2VEYXRhbGlzdCgpe3RoaXMu''@;'; put 'put ''ZGF0YWxpc3RDbG9zZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2V8fHRoaXMuYWZ0ZXJPcGVuTG9ja3x8KHRoaXMuY2xvc2VEYXRhbGlzdCgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5yZXNldERhdGFsaXN0RmlsdGVyKCkpfSwxMDAp''@;'; put 'put ''fWNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKXtjb25zdCBkPXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Qud2lkdGg+MCYmZC5oZWlnaHQ+MCYmKHRoaXMuaW5wdXRDbGllbnRSZWN0PXt3aWR0aDpkLndpZHRoLGJvdHRvbTpkLmJvdHRv''@;'; put 'put ''bX0pLHRoaXMuaW5uZXJIZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0fW9uRGF0YUxpc3RNb3VzZUVudGVyKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITB9b25EYXRhTGlzdE1vdXNlTGVhdmUoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmlucHV0RWxlbWVudC5u''@;'; put 'put ''YXRpdmVFbGVtZW50LmZvY3VzKCl9b25EYXRhTGlzdFNjcm9sbChhKXt0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uRGF0YUxpc3RDbGljayhhKXtjb25zdCBkPWEudGFyZ2V0OyJsb2FkLW1vcmUiIT09ZC5kYXRhc2V0Py50eXBlPyJPUFRJT04iIT09ZC50YWdOYW1lfHx0aGlzLnNldE9w''@;'; put 'put ''dGlvblZhbHVlKGQuaW5uZXJUZXh0LGQudmFsdWUpOnRoaXMubG9hZE1vcmUoKX1sb2FkTW9yZSgpe3RoaXMub25Mb2FkaW5nTW9yZS5lbWl0KHtsb2FkTW9yZUZpbmlzaGVkOmE9Pnt0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9YX19KSx0aGlzLmxvYWRpbmdNb3Jl''@;'; put 'put ''PSEwfXNldE9wdGlvblZhbHVlKGEsZCl7KGF8fGQpJiYoZHx8KGQ9YSkpLGQmJih0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMudmFsdWU9ZCx0aGlzLm9uSW5wdXRGaXJlZChudWxsLCEwLCJjbGljayIpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCkpfW9uTWFpbktleWRvd24o''@;'; put 'put ''YSl7c3dpdGNoKGEua2V5KXtjYXNlIkFycm93VXAiOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygidXAiKTticmVhaztjYXNlIkFycm93RG93biI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJkb3duIik7YnJlYWs7Y2FzZSJFbnRlciI6dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCl9fW9u''@;'; put 'put ''SW5wdXRLZXl1cChhKXtyZXR1cm4hdGhpcy5kYXRhbGlzdE9wZW58fCgiRXNjYXBlIj09PWEua2V5PyhhLnN0b3BQcm9wYWdhdGlvbigpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSwhMSk6dm9pZCAwKX11bnNlbGVjdEFsbE9wdGlvbnMo''@;'; put 'put ''KXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIil9c2VsZWN0Rm9jdXNlZE9wdGlvbigpe2NvbnN0IGE9ZG9j''@;'; put 'put ''dW1lbnQucXVlcnlTZWxlY3RvcihgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb24uZm9jdXNlZGApO2EmJnRoaXMub25EYXRhTGlzdENsaWNrKHt0YXJnZXQ6YX0pLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9Z2V0T3B0aW9uc01vdmVGb2N1cyhhKXtjb25zdCBkPWRvY3VtZW50''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uOm5vdCguaGlkZGVuKWApO2xldCBoPTA7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IHY9ZFtmXTtpZih2LmNsYXNzTGlzdC5jb250YWlucygiZm9jdXNlZCIpKXtoPSJkb3duIj09PWE/''@;'; put 'put ''ZisxOmYtMSxoPDAmJihoPWQubGVuZ3RoLTEpLGg+ZC5sZW5ndGgtMSYmKGg9MCksdi5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIik7YnJlYWt9fWRbaF0uY2xhc3NMaXN0LmFkZCgiZm9jdXNlZCIpfW9uUmVzaXplKGEpe3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXV0b2NvbXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoTW10LDUpLDImZCl7''@;'; put 'put ''bGV0IGY7Q2koZj1TaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgicmVzaXplIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblJlc2l6ZSh2KX0sMCxxQyl9LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIscGxhY2Vob2xk''@;'; put 'put ''ZXI6InBsYWNlaG9sZGVyIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsYXV0b2NvbXBsZXRlOiJhdXRvY29tcGxldGUiLHRhYmluZGV4OiJ0YWJpbmRleCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVu''@;'; put 'put ''YWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7b25JbnB1dEtleWRvd246Im9uSW5wdXRLZXlkb3duIixvbklucHV0Q2hhbmdlOiJvbklucHV0Q2hhbmdlIix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uTG9hZGluZ01vcmU6Im9uTG9hZGluZ01vcmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6eG10''@;'; put 'put ''LGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1siaW5wdXQiLCIiXSxbIm9wdGlvbnMiLCIiXSxbMSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1''@;'; put 'put ''dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsImNsaWNrIiwibW91c2VlbnRlciIs''@;'; put 'put ''Im1vdXNlbGVhdmUiLCJzY3JvbGwiLCJuZ1N0eWxlIiwiaWQiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJuZ0lmIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7''@;'; put 'put ''Y29uc3QgZj1MbigpO3NhKCksZGUoMCwiZGl2IiwyKSxIdCgia2V5ZG93biIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25NYWluS2V5ZG93bihNKSl9KSxkZSgxLCJpbnB1dCIsMywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudmFs''@;'; put 'put ''dWUsTSl8fChoLnZhbHVlPU0pLEN0KE0pfSksSHQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Q2xpY2soTSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGaXJlZChNKSl9KSgibW91c2VlbnRlciIs''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dE1vdXNlZW50ZXIoTSkpfSkoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNpbihNKSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1''@;'; put 'put ''c291dChNKSl9KSgia2V5dXAiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRLZXl1cChNKSl9KSxoZSgpLEd0KDMsImRpdiIsNCksZGUoNCwiZGl2Iiw1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RDbGljayhNKSl9KSgi''@;'; put 'put ''bW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25EYXRhTGlzdE1vdXNlRW50ZXIoTSkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUxlYXZlKE0pKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biB3dChmKSxDdChoLm9uRGF0YUxpc3RTY3JvbGwoTSkpfSksZGUoNSwiZGl2IixudWxsLDEpLFlyKDcpLGhlKCksbXQoOCxUbXQsMiwxLCJvcHRpb24iLDYpLGhlKCkoKX1pZigyJmQpe2NvbnN0IGY9aGEoNik7ZmUoKSx4ZSgiaWQiLGguaW5wdXRJZCkoInBsYWNlaG9sZGVyIixoLnBsYWNl''@;'; put 'put ''aG9sZGVyKSxwaSgibmdNb2RlbCIsaC52YWx1ZSkseGUoImRpc2FibGVkIixoLmRpc2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSgyKSxUcigiaGlkZGVuIiwhaC5kYXRhbGlzdE9wZW4pLGZlKCksVHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSx4ZSgibmdT''@;'; put 'put ''dHlsZSIsbHAoMTIsRW10LGguaW5wdXRDbGllbnRSZWN0LndpZHRoLGguaW5uZXJIZWlnaHQmJmguaW5wdXRDbGllbnRSZWN0LmJvdHRvbT9oLmlubmVySGVpZ2h0LWguaW5wdXRDbGllbnRSZWN0LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoNCkseGUo''@;'; put 'put ''Im5nSWYiLGYuY2hpbGRyZW4ubGVuZ3RoPjAmJmguZW5hYmxlTG9hZE1vcmUpfX0sZGVwZW5kZW5jaWVzOltiYSxub2UsQTIsazIscWwsbmwsR3NdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksQW10PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRhdGUiOnJldHVybiBPbyhhLCJERE1NTVlZWVk6aGg6bW06c3MiKS5mb3JtYXQoIkREL01NL1lZWVkiKTtjYXNlInRpbWUiOntpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJz''@;'; put 'put ''aW5nIHRpbWUuIFZhbHVlIGlzIG5vdCBzdHJpbmcuIik7Y29uc3QgaD1wYXJzZUludChhLnNwbGl0KCI6IilbMF0pLGY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSx2PXBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSk7cmV0dXJuYCR7aDwxMD8iMCIraDpofToke2Y8MTA/IjAiK2Y6Zn06JHt2''@;'; put 'put ''PDEwPyIwIit2OnZ9YH19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2E6YS50b1N0cmluZygpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJkYXRlVGltZUZvcm1hdHRlciIsdHlwZTpj''@;'; put 'put ''LHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGttdD1bImlucHV0Il0sRG10PVsiKiJdO2Z1bmN0aW9uIEltdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLE9lKDEsIiAvICIpLGRlKDIsInNwYW4iLDUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3Qo''@;'; put 'put ''TGUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksT2UoMyksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxUcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsInNlY29uZCI9PT1hLmxhYmVsU2VsZWN0ZWQpLGZlKCksQ3IoYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIFJt''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImxhYmVsIiw0KSgxLCJzcGFuIiw1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25DaGFuZ2VMYWJlbCgiZmlyc3QiKSl9KSxPZSgyKSxoZSgpLG10KDMsSW10LDQsMywibmctY29udGFpbmVyIiw2''@;'; put 'put ''KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO1RyKCJzZWNvbmRMYWJlbEFjdGl2ZSIsYS5zZWNvbmRMYWJlbCYmYS5zZWNvbmRMYWJlbC5sZW5ndGg+MCksZmUoKSxUcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsImZpcnN0Ij09PWEubGFiZWxTZWxlY3RlZCksZmUoKSxDcihhLmxhYmVsKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIixhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gTG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiY2xyLWRhdGUtY29udGFpbmVyIikoMiwiaW5wdXQiLDcpLFFzKDMsImRhdGVUaW1lRm9ybWF0dGVyIiksSHQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRGF0ZUlucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuaW5wdXRGb2N1c2Vk''@;'; put 'put ''PSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KExlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksaGUoKSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoImlkIixhLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsejgoMyw1LGEudGVtcCwiZGF0ZSIpKSgiY2xyRGF0ZSIsYS52YWx1ZSkoImRpc2FibGVkIixhLmRp''@;'; put 'put ''c2FibGVkKSxocigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gT210KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiaW5wdXQiLDgpLEh0KCJpbnB1dCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25JbnB1dEZpcmVkKGgpKX0p''@;'; put 'put ''KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCku''@;'; put 'put ''b25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGhlKCksdWkoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJ2YWx1ZSIsYS52YWx1ZSkoImlkIixhLmlucHV0SWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIFBtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEs''@;'; put 'put ''ImFwcC1hdXRvY29tcGxldGUiLDksMCksSHQoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgib25Mb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuYXV0b2NvbXBsZXRlTG9hZGluZ01v''@;'; put 'put ''cmUoaCkpfSksWXIoMyksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoImlucHV0SWQiLGEuaW5wdXRJZCkoInZhbHVlIiwobnVsbD09YS52YWx1ZT9udWxsOmEudmFsdWUudG9TdHJpbmcoKSl8fCIiKSgiZW5hYmxlTG9hZE1vcmUiLGEuZW5hYmxlTG9hZE1vcmUpKCJl''@;'; put 'put ''bWl0T25seVNlbGVjdGVkIixhLmVtaXRPbmx5U2VsZWN0ZWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCl9fWxldCBENmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5wdXRJZD0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlz''@;'; put 'put ''LmRpc2FibGVTb2Z0c2VsZWN0PSExLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEtyLHRoaXMub25JbnB1dEV2ZW50PW5ldyBLcix0aGlzLmZvY3VzaW5JbnB1dD1uZXcgS3IsdGhpcy5vbkF1dG9jb21wbGV0ZUxv''@;'; put 'put ''YWRpbmdNb3JlPW5ldyBLcix0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2U9bmV3IEtyLHRoaXMudGVtcD0iIix0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmxhYmVsU2VsZWN0ZWQ9ImZpcnN0In1uZ09uQ2hhbmdlcyhhKXthLnZhbHVlJiZhLnZhbHVlLmN1cnJlbnRWYWx1ZSE9PWEudmFsdWUu''@;'; put 'put ''cHJldmlvdXNWYWx1ZSYmdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEudmFsdWUuY3VycmVudFZhbHVlKX1uZ09uSW5pdCgpe31hdXRvY29tcGxldGVMb2FkaW5nTW9yZShhKXt0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUuZW1pdChhKX1vbklucHV0RmlyZWQoYSl7Y29uc3QgZD1hLnRh''@;'; put 'put ''cmdldC52YWx1ZTt0aGlzLnRlbXA9ZCx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZCksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbkRhdGVJbnB1dEZpcmVkKGEpe3RoaXMudGVtcD1hLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChhKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uSW5wdXRN''@;'; put 'put ''b3VzZU91dCgpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnZhbHVlPXRoaXMudGVtcCx0aGlzLnRlbXA9IiIpfW9uSW5wdXRNb3VzZU92ZXIoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy50ZW1wPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIix0aGlzLnZhbHVlPSIiKX1v''@;'; put 'put ''bkZvY3VzaW5JbnB1dChhKXt0aGlzLmZvY3VzaW5JbnB1dC5lbWl0KGEpfW9uQ2hhbmdlTGFiZWwoYSl7dGhpcy5sYWJlbFNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlLmVtaXQoImZpcnN0Ij09PWE/dGhpcy5sYWJlbDp0aGlzLnNlY29uZExhYmVsKX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zb2Z0LXNlbGVjdCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKGttdCw1KSwyJmQpe2xldCBmO0NpKGY9U2ko''@;'; put 'put ''KSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIsbGFiZWw6ImxhYmVsIixzZWNvbmRMYWJlbDoic2Vjb25kTGFiZWwiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixkaXNhYmxlU29mdHNlbGVjdDoiZGlz''@;'; put 'put ''YWJsZVNvZnRzZWxlY3QiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25JbnB1dEV2ZW50OiJvbklucHV0RXZlbnQiLGZvY3VzaW5JbnB1dDoiZm9j''@;'; put 'put ''dXNpbklucHV0IixvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlOiJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixzZWxlY3RlZExhYmVsQ2hhbmdlOiJzZWxlY3RlZExhYmVsQ2hhbmdlIn0sZmVhdHVyZXM6W3dsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RG10LGRlY2xzOjUsdmFyczo1LGNvbnN0''@;'; put 'put ''czpbWyJpbnB1dCIsIiJdLFsiY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNsaWNrIl0sWzQsIm5nSWYiXSxbInR5cGUi''@;'; put 'put ''LCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1''@;'; put 'put ''dC12YWwiLDMsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLDEsImlucHV0LXZhbCIsMywib25J''@;'; put 'put ''bnB1dENoYW5nZSIsIm9uTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKHNhKCksbXQoMCxSbXQsNCw2LCJsYWJlbCIsMSksY2koMSwyKSxtdCgy''@;'; put 'put ''LExtdCw0LDgsIm5nLWNvbnRhaW5lciIsMykoMyxPbXQsMiw0LCJuZy1jb250YWluZXIiLDMpKDQsUG10LDQsNSwibmctY29udGFpbmVyIiwzKSx1aSgpKSwyJmQmJih4ZSgibmdJZiIsaC5sYWJlbCksZmUoKSx4ZSgibmdTd2l0Y2giLGgudHlwZSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwi''@;'; put 'put ''ZGF0ZSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJ0ZXh0IikpfSxkZXBlbmRlbmNpZXM6W2JhLFMyLGNwLGRzLFd4LEpMLHNHLGs2ZSxBbXRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksU3c9KCgpPT57Y2xhc3MgY3tz''@;'; put 'put ''ZXQgbmdWYXIoYSl7dGhpcy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1ZpZXd8fCh0aGlzLnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEwKX1jb25zdHJ1Y3RvcihhLGQp''@;'; put 'put ''e3RoaXMudGVtcGxhdGVSZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1ZhcjpudWxsfSx0aGlzLmhhc1ZpZXc9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU2wpLEdlKERvKSl9fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9fSl9fXJldHVybiBjfSkoKSxGbXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSxkPSJkYXlz''@;'; put 'put ''IixoPSExKXtpZih2b2lkIDA9PT1hJiYoYT0iIiksInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLDA9PT1hLmxlbmd0aCl7aWYoImRheXMiPT09ZClyZXR1cm4gbnVsbDtpZigic2Vjb25kcyI9PT1kKXJldHVybiBoPyIxMTowMDowMCI6bnVsbH1sZXQgZj10aGlzLmhlbHBl''@;'; put 'put ''clNlcnZpY2UuY29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQpO2lmKDQ9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBNPWEuc3BsaXQoIjoiKTtmPW5ldyBEYXRlKE1bMF0pLGYuc2V0SG91cnMocGFyc2VJbnQoTVsxXSkpLGYuc2V0TWludXRlcyhwYXJzZUludChNWzJdKSksZi5zZXRT''@;'; put 'put ''ZWNvbmRzKHBhcnNlSW50KE1bM10pKX1lbHNlIGlzTmFOKE51bWJlcihhKSkmJihmPW5ldyBEYXRlKGEpKTtsZXQgdj1gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRIb3VycygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVy''@;'; put 'put ''byhmLmdldE1pbnV0ZXMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSl9YDtyZXR1cm4gaD92OmZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3Us''@;'; put 'put ''MTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToic2FzVG9Kc0RhdGUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKSxIbXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSl7aWYobnVsbD09YXx8IiI9''@;'; put 'put ''PT1hKXJldHVybiIiO2xldCBkLGgsZjtpZigic3RyaW5nIj09dHlwZW9mIGEmJjM9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCB2PWEuc3BsaXQoIjoiKTtkPXZbMF0saD12WzFdLGY9dlsyXX1lbHNlIm51bWJlciIhPXR5cGVvZiBhJiYoYT1wYXJzZUludChhKSksZD1NYXRoLmZsb29y''@;'; put 'put ''KGEvMzYwMCksaD1NYXRoLmZsb29yKGElMzYwMC82MCksZj1NYXRoLmZsb29yKGElMzYwMCU2MCk7cmV0dXJuYCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGQpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhoKX06JHt0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''YWRkTGVhZGluZ1plcm8oZil9YH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShHdSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJzZWNvbmRzUGFyc2VyIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgTm10PShjLGwsYSk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YX0pLFZtdD0oYyxsLGEsZCk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxCbXQ9KGMsbCxhLGQpPT4oe3JhbmdlOiJzdGFydCIscXVlcnk6YyxxdWVy''@;'; put 'put ''eVZhbHVlSW5kZXg6MCxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxqbXQ9KGMsbCxhLGQpPT4oe3JhbmdlOiJlbmQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjEscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSk7ZnVuY3Rpb24gem10''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJzZWxlY3RlZCIsTGUoKS5sb2dpY09wZXJhdG9yc1swXSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBVbXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDIz''@;'; put 'put ''KSxPZSgxLCJcbiAgICAgICAgIiksR3QoMiwicHJvZ3Jlc3MiKSxPZSgzLCJcbiAgICAgICIpLGhlKCkpfWZ1bmN0aW9uIFptdChjLGwpezEmYyYmR3QoMCwiZGl2Iil9ZnVuY3Rpb24gV210KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PWwuJGltcGxpY2l0O3hlKCJzZWxlY3RlZCIsTGUoMikubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gWW10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChMZSgyKS5hZGRHcm91cENsYXVzZSgpKX0pLEd0KDEsImNsci1pY29uIiwzMyksZGUoMiwic3BhbiIpLE9lKDMsIkdyb3VwIiksaGUoKSgpfX1mdW5jdGlvbiBHbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3''@;'; put 'put ''dChhKTtjb25zdCBoPUxlKCkuaW5kZXg7cmV0dXJuIEN0KExlKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSksaGUoKX19ZnVuY3Rpb24gJG10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuTkFN''@;'; put 'put ''RSwiICIpfX1mdW5jdGlvbiBLbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxDcihhKX19ZnVuY3Rpb24gcW10KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBYbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o''@;'; put 'put ''KTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKS5pbmRleCxmPUxlKCkuaW5kZXgsdj1MZSgpO3JldHVybiB2LmN1cnJlbnRRdWVyeUluZGV4PWgsQ3Qodi5jdXJyZW50Q2xhdXNlSW5kZXg9Zil9KSxPZSgyLCIg''@;'; put 'put ''Q2hvb3NlIHZhbHVlcyAiKSxoZSgpLG10KDMscW10LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1MZSgpLmluZGV4O0xlKCk7Y29uc3Qgdj1oYSgzNyk7ZmUoMykseGUoIm5nVGVtcGxhdGVPdXRsZXQi''@;'; put 'put ''LHYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIscE0oMixObXQsZCxoLGYpKX19ZnVuY3Rpb24gSm10KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBRbXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU0KSxtdCgxLEptdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSgpLm5nVmFyLGQ9TGUoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCx2PUxlKCkuaW5kZXgsTT1MZSgpLEQ9aGEoMzEpLFo9aGEoMzMpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsWEkoMixW''@;'; put 'put ''bXQsaCxmLHYsYSkpfX1mdW5jdGlvbiBlNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIHQ2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gbjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NSkoMSwiZGl2Iiw1NiksbXQoMixlNnQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpLGRl''@;'; put 'put ''KDMsImRpdiIsNTcpLG10KDQsdDZ0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcixkPUxlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1MZSgpLmluZGV4LE09TGUoKSxEPWhhKDMxKSxaPWhhKDM1KTtmZSgyKSx4ZSgibmdUZW1wbGF0''@;'; put 'put ''ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6WikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixYSSg0LEJtdCxoLGYsdixhKSksZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsWEkoOSxqbXQsaCxmLHYs''@;'; put 'put ''YSkpfX1mdW5jdGlvbiByNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDU4KSgxLCJsYWJlbCIsNyksT2UoMiwiVmFsdWUiKSxoZSgpLGRlKDMsImlucHV0Iiw1OSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBtaShmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSxDdChoKX0pLEh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLmluZGV4LHY9TGUoKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLGYsdikpfSksaGUoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoMykscGkoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBpNnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxtdCgxLFhtdCw0LDYsImRpdiIsNDcpKDIsUW10LDIsNywiZGl2Iiw0OCkoMyxuNnQsNSwxNCwiZGl2Iiw0''@;'; put 'put ''OSkoNCxyNnQsNCwxLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVyYXRvciksZmUoKSx4ZSgibmdJZiIsIkJFVFdFRU4iIT09YS5vcGVyYXRvciYmIklOIiE9PWEub3Bl''@;'; put 'put ''cmF0b3ImJiJOT1QgSU4iIT09YS5vcGVyYXRvciYmIkxJS0UiIT09YS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWEub3BlcmF0b3ImJiJCRUdJTlNfV0lUSCIhPT1hLm9wZXJhdG9yKSxmZSgpLHhlKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9wZXJhdG9yKSxmZSgpLHhlKCJuZ0lmIiwiTElLRSI9''@;'; put 'put ''PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5vcGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3IpfX1mdW5jdGlvbiBhNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDM1KSgyLCJkaXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3Qi''@;'; put 'put ''LDM3KSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBtaShmLnZhcmlhYmxlLGgpfHwoZi52YXJpYWJsZT1oKSxDdChoKX0pLEh0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLiRpbXBsaWNpdCxN''@;'; put 'put ''PWYuaW5kZXgsRD1MZSgpLmluZGV4O3JldHVybiBDdChMZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2Uodi52YXJpYWJsZSxNLEQsaCkpfSksbXQoNCwkbXQsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxkZSg1LCJkaXYiLDM5KSg2LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDcsImxhYmVsIiks''@;'; put 'put ''T2UoOCwiT3BlcmF0b3IiKSxoZSgpLGRlKDksInNlbGVjdCIsNDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5vcGVyYXRvcixoKXx8KGYub3BlcmF0b3I9aCksQ3QoaCl9KSxIdCgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09TGUoKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZU9wZXJhdG9yKHYsZi5vcGVyYXRvcixNKSl9KSxtdCgxMCxLbXQsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxtdCgxMSxpNnQsNSw0LCJk''@;'; put 'put ''aXYiLDQxKSxkZSgxMiwiZGl2Iiw0MikoMTMsImJ1dHRvbiIsNDMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4LGY9TGUoKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS5yZW1vdmVDbGF1c2UoaCxmKSl9KSxHdCgxNCwiY2xyLWljb24iLDQ0KSgxNSwic3BhbiIpLGhl''@;'; put 'put ''KCksZGUoMTYsImJ1dHRvbiIsNDUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuaW5kZXg7cmV0dXJuIEN0KExlKCkuYWRkQ2xhdXNlKGgpKX0pLEd0KDE3LCJjbHItaWNvbiIsMzMpKDE4LCJzcGFuIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0LGQ9bC5pbmRleCxoPUxlKCkuaW5kZXgsZj1MZSgpO1RyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxmZSgzKSx4ZSgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK2QrIl8iK2gpKCJpbnB1dElkIiwidmFsc192YXJfaWQiK2QrIl8iK2gpKCJlbWl0T25seVNlbGVjdGVk''@;'; put 'put ''IiwhMCkscGkoInZhbHVlIixhLnZhcmlhYmxlKSxmZSgpLHhlKCJuZ0Zvck9mIixmLmNvbHMpLGZlKDUpLHBpKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxmZSgpLHhlKCJuZ0Zvck9mIixhLm9wZXJhdG9ycyksZmUoKSx4ZSgibmdWYXIiLCJEQVRFIj09PWEuZGR0eXBlfHwiREFURVRJTUUiPT09''@;'; put 'put ''YS5kZHR5cGV8fCJUSU1FIj09PWEuZGR0eXBlKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLDE9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHMubGVuZ3RoKX19ZnVuY3Rpb24gbzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNCkoMSwiZGl2IiwxMCkoMiwiZGl2''@;'; put 'put ''IiwyNSkoMywiZGl2IiwyNikoNCwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg1LCJsYWJlbCIpLE9lKDYsIkxvZ2ljIiksaGUoKSxkZSg3LCJzZWxlY3QiLDI3KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuY2xhdXNl''@;'; put 'put ''TG9naWMsaCl8fChmLmNsYXVzZUxvZ2ljPWgpLEN0KGgpfSksSHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2V0TG9naWMoKSl9KSxtdCg4LFdtdCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLEd0KDksImJyIiksbXQoMTAsWW10LDQsMCwiYnV0''@;'; put 'put ''dG9uIiwyOCksaGUoKSxkZSgxMSwiZGl2IiwyOSksbXQoMTIsR210LDEsMCwiY2xyLWljb24iLDMwKSgxMyxhNnQsMTksMTEsImRpdiIsMzEpLGhlKCkoKSxHdCgxNCwiYnIiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSxUcigiaW52YWxpZC1jbGF1c2Ui''@;'; put 'put ''LGEuaW52YWxpZENsYXVzZSksZmUoNikscGkoIm5nTW9kZWwiLGEuY2xhdXNlTG9naWMpLHhlKCJkaXNhYmxlZCIsYS5lbGVtZW50cy5sZW5ndGg8MiksZmUoKSx4ZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksZmUoMikseGUoIm5nSWYiLGQuaW5uZXJXaWR0aD43NjgpLGZlKDIpLHhl''@;'; put 'put ''KCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjEpLGZlKCkseGUoIm5nRm9yT2YiLGEuZWxlbWVudHMpfX1mdW5jdGlvbiBzNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYyKSxRcygyLCJzYXNUb0pzRGF0ZSIpLFFzKDMs''@;'; put 'put ''InNhc1RvSnNEYXRlIiksSHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgsWj1mLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLmRhdGVDaGFuZ2UoaCx2LEQsWixNKSl9KSxo''@;'; put 'put ''ZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCkseGUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9p''@;'; put 'put ''ZCAwIT09aD9EYygyLDMsZC52YWx1ZVtoXSk6RGMoMyw1LGQudmFsdWUpKX19ZnVuY3Rpb24gbDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MyksUXMoMiwic2FzVG9Kc0RhdGUiKSxRcygzLCJzYXNUb0pzRGF0ZSIpLEh0KCJ2YWx1''@;'; put 'put ''ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5nZXRRdWVyeURhdGVUaW1lKE0sdikuZGF0ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLGY9''@;'; put 'put ''aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LE09aC5xdWVyeUluZGV4LEQ9aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5kYXRlVGltZUNoYW5nZShmLE0sRCx2KSl9KSxoZSgpLGRlKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLFFzKDUsInNhc1RvSnNEYXRlIiksUXMoNiwic2FzVG9K''@;'; put 'put ''c0RhdGUiKSxIdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9TGUoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEQsdikpfSksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9YS5xdWVyeSxoPWEucXVl''@;'; put 'put ''cnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/ejgoMiw2LGQudmFsdWVbaF0sInNlY29uZHMiKTp6OCgzLDksZC52''@;'; put 'put ''YWx1ZSwic2Vjb25kcyIpKSxmZSgzKSx4ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP2JVKDUsMTIsZC52YWx1ZVtoXSwic2Vjb25kcyIsITApOmJVKDYsMTYsZC52YWx1ZSwic2Vjb25kcyIsITApKX19''@;'; put 'put ''ZnVuY3Rpb24gYzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSksUXMoMiwic2Vjb25kc1BhcnNlciIpLFFzKDMsInNlY29uZHNQYXJzZXIiKSxIdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCks''@;'; put 'put ''dj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgsWj1mLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLnRpbWVDaGFuZ2UoaCx2LEQsWixNKSl9KSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1h''@;'; put 'put ''LnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCkseGUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzXyIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP0RjKDIsMyxkLnZhbHVlW2hdKTpEYygzLDUsZC52YWx1ZSkpfX1mdW5jdGlvbiB1NnQoYyxsKXsxJmMm''@;'; put 'put ''JihjaSgwLDYwKSxtdCgxLHM2dCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpKDIsbDZ0LDcsMjAsIm5nLWNvbnRhaW5lciIsNjEpKDMsYzZ0LDQsNywibmctY29udGFpbmVyIiw2MSksdWkoKSksMiZjJiYoeGUoIm5nU3dpdGNoIixsLnF1ZXJ5LmRkdHlwZSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNl''@;'; put 'put ''IiwiREFURSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVUSU1FIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwiVElNRSIpKX1mdW5jdGlvbiBkNnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZh''@;'; put 'put ''bHVlIixhLnVuZm9ybWF0dGVkKSxmZSgpLElyKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVuY3Rpb24gaDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksbXQoMSxkNnQsMiwyLCJvcHRpb24iLDY3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5xdWVyeTtmZSgpLHhlKCJuZ0Zv''@;'; put 'put ''ck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIGY2dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuTkFNRSksZmUoKSxJcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIHA2dChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGNpKDApLG10KDEsZjZ0LDIsMiwib3B0aW9uIiw2OSksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoMikucXVlcnk7ZmUoKSx4ZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gZzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksbXQoMSxwNnQs''@;'; put 'put ''MiwxLCJuZy1jb250YWluZXIiLDM4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2xzKX19ZnVuY3Rpb24gbTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw2NiksSHQoInNlbGVjdGVkTGFiZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIEN0KExlKCkuc2VsZWN0ZWRMYWJlbENoYW5nZShoLGYpKX0pLGdpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5xdWVyeTtyZXR1cm4gbWkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9''@;'; put 'put ''KSxIdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLnRhcmdldC52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5j''@;'; put 'put ''dGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxEKSl9KSxtdCgxLGg2dCwyLDEsImRpdiIsMjApKDIsZzZ0LDIsMSwiZGl2Iiwy''@;'; put 'put ''MCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXg7eGUoInNlY29uZExhYmVsIiwiVmFyaWFibGUiKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS52YWx1ZVZhcmlhYmxlKSgiaW5wdXRJZCIsInZhbHNfIitkKyJfIitoKSxwaSgidmFsdWUi''@;'; put 'put ''LGEudmFsdWUpLHhlKCJlbmFibGVMb2FkTW9yZSIsYS5ub2JzPmEudmFsdWVzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZVZhcmlhYmxlKX19ZnVuY3Rpb24gdjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCks''@;'; put 'put ''T2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJ2YWx1ZSIsYS5mb3JtYXR0ZWQpLGZlKCksSXIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIGI2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNzApLGdpKCJ2YWx1''@;'; put 'put ''ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4gbWkodi52YWx1ZVtNXSxoKXx8KHYudmFsdWVbTV09aCksQ3QoaCl9KSxIdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLnF1ZXJ5''@;'; put 'put ''LHY9aC5xdWVyeUluZGV4LE09aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhmLnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeUluZGV4LEQ9Zi5j''@;'; put 'put ''bGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxNLEQpKX0pLG10KDEsdjZ0LDIsMiwib3B0aW9uIiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnksaD1sLnF1ZXJ5VmFsdWVJbmRleDt4ZSgiaW5w''@;'; put 'put ''dXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgpLHBpKCJ2YWx1ZSIsZC52YWx1ZVtoXSkseGUoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+ZC52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVsw''@;'; put 'put ''XSksZmUoKSx4ZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiB5NnQoYyxsKXsxJmMmJihkZSgwLCJoNSIsNzgpLE9lKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSxoZSgpKX1mdW5jdGlvbiBfNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItY2hlY2tib3gt''@;'; put 'put ''d3JhcHBlciIpKDEsImlucHV0Iiw4MCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuaW5kZXgsdj1MZSgyKS5xdWVyeTtyZXR1cm4gbWkodi52YWx1ZVtmXS5jaGVja2VkLGgpfHwodi52YWx1ZVtmXS5jaGVja2VkPWgpLEN0KGgpfSksSHQoIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMiksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsdixNKSl9KSxoZSgpLGRlKDIsImxhYmVsIiksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRp''@;'; put 'put ''bXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgyKS5xdWVyeTtmZSgpLHBpKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLGZlKDIpLElyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiB3NnQoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNv''@;'; put 'put ''bnRhaW5lciIpLG10KDIsXzZ0LDQsMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDM4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpLnF1ZXJ5O2ZlKDIpLHhlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIEM2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1tb2Rh''@;'; put 'put ''bCIsNzEpKDEsImgzIiw3MiksT2UoMiwiU2VsZWN0IHZhbHVlcyIpLGhlKCksZGUoMywiZGl2Iiw3MyksbXQoNCx5NnQsMiwwLCJoNSIsNzQpKDUsdzZ0LDMsMSwic2VjdGlvbiIsNzUpLGhlKCksZGUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gaC5jdXJyZW50UXVlcnlJbmRleD0tMSxDdChoLmN1cnJlbnRDbGF1c2VJbmRleD0tMSl9KSxPZSg4LCIgQXBwbHkgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4LGY9TGUoKTt4''@;'; put 'put ''ZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUluZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1oKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLHhlKCJuZ0lmIiwhZi5pc0FycihhLnZhbHVlKSksZmUoKSx4ZSgibmdJZiIsZi5pc0FycihhLnZhbHVlKSl9fSFmdW5j''@;'; put 'put ''dGlvbiByd2UoYyxsLGEpeyhmdW5jdGlvbiBSOWUoYyxsLGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNbZWMuTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSx6YltsXT1jLGEmJih6YltsXVtlYy5FeHRyYURhdGFdPWEpfSkoYyxsLGEpfShTbXQp''@;'; put 'put ''O2xldCBYZWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5p''@;'; put 'put ''bml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIs''@;'; put 'put ''Ik5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9n''@;'; put 'put ''aWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2JzOjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dLGNsYXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6''@;'; put 'put ''ITF9LHRoaXMuc2VsVmFyPXtpbmRleDpudWxsLGZvcm1hdDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2NoZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5EIix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxn''@;'; put 'put ''cm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy5sb2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0xLHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEsdGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0''@;'; put 'put ''aGlzLmlubmVyV2lkdGg9d2luZG93LnNjcmVlbi53aWR0aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0JvcmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1ZXJ5RGF0ZVRpbWUoYSxkKXtsZXQgaD10aGlzLnF1ZXJ5RGF0ZVRpbWUuZmluZChmPT5mLmNsYXVz''@;'; put 'put ''ZUluZGV4PT09YSYmZi5xdWVyeUluZGV4PT09ZCk7aWYoIWgpe2NvbnN0IGY9dGhpcy5xdWVyeURhdGVUaW1lLnB1c2goe2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkLGRhdGU6IiIsdGltZToiIn0pLTE7aD10aGlzLnF1ZXJ5RGF0ZVRpbWVbZl19cmV0dXJuIGh9dXNlUGlja2Vyc0NoYW5n''@;'; put 'put ''ZSgpe3RoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLnVzZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKGE9PnthLmVsZW1lbnRzLmZvckVhY2goZD0+e1siREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGQuZGR0eXBlKSYmZC52YWx1ZVZhcmlhYmxlJiYo''@;'; put 'put ''ZC52YWx1ZT0iIixkLnZhbHVlVmFyaWFibGU9ITEpfSl9KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6''@;'; put 'put ''bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRU''@;'; put 'put ''b0dsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6ImVkaXRvciI6InZpZXciPT09S24ucm9vdFBh''@;'; put 'put ''cmFtJiYoYT0idmlld2VyIiksU2MoS24sYSkuZmlsdGVyLmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJpbmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKFNjKEtuLGEpLmZpbHRlci53aGVyZUNsYXVzZT10aGlzLndoZXJlQ2xhdXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMu''@;'; put 'put ''bGliZHMmJihTYyhLbixhKS5maWx0ZXIubGliZHM9dGhpcy5saWJkcyksU2MoS24sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtu''@;'; put 'put ''LnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLFNjKEtuLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJp''@;'; put 'put ''bmdpZnkoU2MoS24sYSkuZmlsdGVyLmNvbHMpKSksU2MoS24sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShTYyhLbixhKS5maWx0ZXIudmFscykpKSwiIiE9PVNjKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91''@;'; put 'put ''cExvZ2ljPVNjKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9U2MoS24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9U2MoS24sYSkuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz1TYyhLbixhKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNl''@;'; put 'put ''Rm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShhLGQsaCxmLHYpe2xldCBNPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNE''@;'; put 'put ''YXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09TSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhNLGgsZil9ZGF0ZVRpbWVDaGFuZ2UoYSxkLGgsZil7Y29uc3Qgdj10''@;'; put 'put ''aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09PXYuZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjt2LmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IE09cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMF0pLEQ9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMV0p''@;'; put 'put ''LFo9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCByZT1uZXcgRGF0ZSh2LmRhdGUpLGNlPW5ldyBEYXRlKHJlLmdldEZ1bGxZZWFyKCkscmUuZ2V0TW9udGgoKSxyZS5nZXREYXRlKCksTSxELFopLGJlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNE''@;'; put 'put ''YXRlKGNlLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09YS5vcGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT1iZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhiZSxkLGgpfXRpbWVDaGFuZ2UoYSxkLGgsZix2KXthPWEudGFy''@;'; put 'put ''Z2V0LnZhbHVlO2xldCBiZT02MCpwYXJzZUludChhLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlP''@;'; put 'put ''YmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09YmUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoYmUsaCxmKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxl''@;'; put 'put ''bWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7Zjx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3IobGV0IHY9MDt2PHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5sZW5ndGg7disrKXtpZihmPT09YSYmdj09PWR8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhp''@;'; put 'put ''cy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5l''@;'; put 'put ''bGVtZW50c1t2XS52YWx1ZSkpY29udGludWU7bGV0IE09IiI7Y29uc3QgRD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IsWj10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFyaWFibGU7IkJFVFdFRU4iPT09RD9NPWAke3RoaXMuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlWzFdfWA6IklOIj09PUR8fCJOT1QgSU4iPT09RD8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlLmZvckVhY2gocmU9PntpZihyZS5jaGVj''@;'; put 'put ''a2VkKXtsZXQgY2U9cmUudmFsOyJzdHJpbmciIT10eXBlb2YgY2V8fCgwLFg1LmlzU3BlY2lhbE1pc3NpbmcpKGNlKT9NLmxlbmd0aD4wP00rPWAsJHtjZX1gOk09YCgke2NlfWA6TS5sZW5ndGg+MD9NKz1gLCcke2NlfSdgOk09YCgnJHtjZX0nYH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6''@;'; put 'put ''IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWU/TT0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGUmJihN''@;'; put 'put ''PWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9J''@;'; put 'put ''RDpmLFZBUklBQkxFX05NOlosT1BFUkFUT1JfTk06RCxSQVdfVkFMVUU6TXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3Qg''@;'; put 'put ''TT12LmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09di5jb2xzKXtmb3IobGV0IHFlPTA7cWU8di5jb2xzLmxlbmd0aDtxZSsrKXYuY29sc1txZV0uTkFNRT09PWQmJih2LnNlbFZhci5pbmRleD1xZSk7Y29uc3QgRD12LmNvbHNbdi5zZWxWYXIuaW5kZXhdLkREVFlQRSx7c3RhcnRyb3c6Wixy''@;'; put 'put ''b3dzOnJlfT12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0sY2U9di5yb3dzX2luY3JlbWVudCxiZT1aK3JlO2xldCBFZT1bXTt2LmR5bmFtaWNXaGVyZUNsYXVzZSYmKEVlPXYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgpKTtjb25zdCBCZT1bIkRBVEVUSU1FIiwiVElN''@;'; put 'put ''RSIsIkRBVEUiXS5pbmNsdWRlcyhEKTt2LnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLE0sRWUsYmUsY2UpLnRoZW4ocWU9Pntjb25zdCBydD1xZS52YWxzLHtTVEFSVFJPVzpwdCxST1dTOmR0LE5PQlM6SnR9PXFlLm1ldGFbMF07aWYodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVs''@;'; put 'put ''ZW1lbnRzW2hdLnN0YXJ0cm93PXB0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPWR0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPUp0LDE9PT1ydC5sZW5ndGgmJiIiPT09cnRbMF0uRk9STUFUVEVEJiYiIj09PXJ0WzBdLlVORk9STUFUVEVE''@;'; put 'put ''P2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi5ydC5tYXAodG49Pntjb25zdCBNbj0ibnVtIj09PXFlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgR3I9TW4mJigwLFg1LmlzU3BlY2lhbE1pc3Np''@;'; put 'put ''bmcpKHRuLlVORk9STUFUVEVEKT8iLiIrdG4uVU5GT1JNQVRURUQ6dG4uVU5GT1JNQVRURUQ7cmV0dXJuIE1uJiZudWxsPT09R3ImJihHcj0iLiIpLHtmb3JtYXR0ZWQ6QmU/dG4uRk9STUFUVEVELnNwbGl0KCIuIilbMF06dG4uRk9STUFUVEVELHVuZm9ybWF0dGVkOkdyfX0pKSxhLmxvYWRN''@;'; put 'put ''b3JlRmluaXNoZWQoSnQtdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLHYud2hlcmVDbGF1c2VGbigpLHYuc2V0VG9HbG9iYWxzKCksdi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PXYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1''@;'; put 'put ''c2VJbmRleDp2bixxdWVyeUluZGV4OkNufT12LnBlbmRpbmdJTlZhbHVlc1NldDt2LnNldElOVmFsdWVzKHZuLENuKSx2LnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfXYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKHFlPT57di53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goRCl7''@;'; put 'put ''di5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsRCl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Yud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xldCB2PSIiO3ZvaWQgMCE9PWYubGliZHMmJih2''@;'; put 'put ''PWYubGliZHMpLGYuY2xlYXJWYWx1ZXMoZCxoKSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPVtdLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT0iIixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I9Ij0iLGYu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1mLmNvbHMpe2ZvcihsZXQgcmU9MDtyZTxmLmNvbHMubGVuZ3RoO3JlKyspZi5jb2xzW3JlXS5OQU1FPT09YSYmKGYuc2VsVmFyLmluZGV4PXJlKTtjb25zdCBNPWYuY29sc1tmLnNlbFZh''@;'; put 'put ''ci5pbmRleF0uRERUWVBFO2YuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5kZHR5cGU9TSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLlRZUEUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJh''@;'; put 'put ''dG9ycz0ibnVtIj09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlP2YubnVtT3BlcmF0b3JzOmYuY2hhck9wZXJhdG9ycztsZXQgRD1bXTtmLmR5bmFtaWNXaGVyZUNsYXVzZSYmKEQ9Zi5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGgsZCkpO2NvbnN0IFo9WyJEQVRF''@;'; put 'put ''VElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoTSk7Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSx2LEQsMSxmLmluaXRpYWxfcm93cykudGhlbihyZT0+e2NvbnN0IGNlPXJlLnZhbHMse1NUQVJUUk9XOmJlLFJPV1M6RWUsTk9CUzpCZX09cmUubWV0YVswXTtpZihmLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uc3RhcnRyb3c9YmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9RWUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm5vYnM9QmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVl''@;'; put 'put ''cz1jZS5tYXAocWU9Pntjb25zdCBydD0ibnVtIj09PXJlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgZHQ9cnQmJigwLFg1LmlzU3BlY2lhbE1pc3NpbmcpKHFlLlVORk9STUFUVEVEKT8iLiIrcWUuVU5GT1JNQVRURUQ6cWUuVU5GT1JNQVRURUQ7cmV0dXJuIHJ0JiZudWxsPT09''@;'; put 'put ''ZHQmJihkdD0iLiIpLHtmb3JtYXR0ZWQ6Wj9xZS5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpxZS5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6ZHR9fSkuc2xpY2UoMCwyZTMpLGYud2hlcmVDbGF1c2VGbigpLGYuc2V0VG9HbG9iYWxzKCksZi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PWYu''@;'; put 'put ''cGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpxZSxxdWVyeUluZGV4OnJ0fT1mLnBlbmRpbmdJTlZhbHVlc1NldDtmLnNldElOVmFsdWVzKHFlLHJ0KSxmLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfWYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKHJlPT57Zi53aGVy''@;'; put 'put ''ZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goTSl7Zi5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsTSl9fSkoKX1nZXRsb2dpYyhhKXt0aGlzLmxvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCl9c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNl''@;'; put 'put ''Rm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWlzQXJyKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXkmJmEubGVuZ3RoPjAmJnR5cGVvZiBhWzBdLmNoZWNrZWQ8InUifXNlbGVjdGVkTGFiZWxDaGFuZ2UoYSxkKXtkLnZhbHVlVmFyaWFibGU9IlZhcmlhYmxlIj09PWEsZC52YWx1ZT0iIix0''@;'; put 'put ''aGlzLndoZXJlQ2xhdXNlRm4oKX12YXJpYWJsZUlucHV0Q2hhbmdlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzKGEsZCxoKX1zZXRWYXJpYWJsZVZhbHVlcyhhLGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yOyJCRVRXRUVOIiE9PWYmJiJJ''@;'; put 'put ''TiIhPT1mJiYiTk9UIElOIiE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9YS50b1N0cmluZygpKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldFZhcmlhYmxlT3BlcmF0b3IoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNl''@;'; put 'put ''cy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZTtmIGluc3RhbmNlb2YgQXJyYXkmJiJJTiIhPT1kJiYiTk9UIElOIiE9PWQmJihmPWYgaW5zdGFuY2VvZiBBcnJheSYmMj09PWYubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGZbMF0/ZlswXToiIiksdGhpcy5jbGVhclZhbHVlc09wZXJh''@;'; put 'put ''dG9yKGEsaCksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLm9wZXJhdG9yPWQsKCI9Ij09PWR8fCI+Ij09PWR8fCI8Ij09PWR8fCI8PSI9PT1kfHwiPj0iPT09ZHx8Ik5FIj09PWQpJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPWYpLCJC''@;'; put 'put ''RVRXRUVOIj09PWQmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9W10sdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goZiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goIiIpKSwo''@;'; put 'put ''IklOIj09PWR8fCJOT1QgSU4iPT09ZCkmJnRoaXMuc2V0SU5WYWx1ZXMoaCxhKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldElOVmFsdWVzKGEsZCl7Y29uc3QgaD1bXSxmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZXM7Zi5s''@;'; put 'put ''ZW5ndGg8MSYmKHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PXtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZH0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKWgucHVzaCh7Y2hlY2tlZDohMSx2YWw6Zlt2XS5mb3JtYXR0ZWR9KTt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNb''@;'; put 'put ''ZF0udmFsdWU9aH1jbGVhclZhbHVlcyhhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS52YWx1ZT0iIn1jbGVhclZhbHVlc09wZXJhdG9yKGEsZCl7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLm9wZXJhdG9yOygiQkVUV0VFTiI9PT1o''@;'; put 'put ''fHwiSU4iPT09aHx8Ik5PVCBJTiI9PT1ofHwiQ09OVEFJTlMiPT09aCkmJnRoaXMuY2xlYXJWYWx1ZXMoYSxkKX1oYXNJbnZhbGlkQ2x1YXNlKGEpe2ZvcihsZXQgZCBvZiBhKWlmKGQuaW52YWxpZENsYXVzZT0hMSwiIj09PWQudmFsdWUmJiJORSIhPT1kLm9wZXJhdG9yJiYiQ09OVEFJTlMi''@;'; put 'put ''IT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1ZSlyZXR1cm4gZC5pbnZhbGlkQ2xhdXNlPSEwLCEwO3JldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0''@;'; put 'put ''aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''althXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFkZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBh''@;'; put 'put ''ZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9w''@;'; put 'put ''ZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5E''@;'; put 'put ''Iix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3Ig''@;'; put 'put ''bW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0''@;'; put 'put ''aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxlY3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhp''@;'; put 'put ''cy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihhJiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0''@;'; put 'put ''aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhpcy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+''@;'; put 'put ''e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0u''@;'; put 'put ''ZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5z''@;'; put 'put ''U3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Lbi5yb290UGFyYW0mJiJlZGl0b3IiIT09S24ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEtuLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBh''@;'; put 'put ''cnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09S24ucm9vdFBhcmFtJiZLbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsS24udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRz''@;'; put 'put ''fHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtKSYmS24uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQu''@;'; put 'put ''dmFscyxLbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09S24ucm9vdFBhcmFtJiZLbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEtuLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNl''@;'; put 'put ''KEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1k''@;'; put 'put ''b2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgp''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFVoKSxHZSh2YyksR2UoR3UpLEdlKEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5n''@;'; put 'put ''Iix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6QmYsdXNlVmFsdWU6ImVuLUdCIn1dKV0sZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sicGlja2VyIiwiIl0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVja2JveFZhbHVl''@;'; put 'put ''cyIsIiJdLFsxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9sLWxhYmVs''@;'; put 'put ''Il0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29s''@;'; put 'put ''LW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWNvbC1tZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVtYmVycyIsImxhbmd1YWdlLW1h''@;'; put 'put ''cmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWluZXIiLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiY2xhdXNlLXJvdyIsNCwi''@;'; put 'put ''bmdGb3IiLCJuZ0Zvck9mIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5IiwiY2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsImNsYXNzIiwicmVt''@;'; put 'put ''b3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3ciLDMsImludmFsaWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCIsMywiY2xpY2siXSxbInNoYXBl''@;'; put 'put ''IiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3JhcHBlciJdLFsibGFiZWwiLCJWYXJp''@;'; put 'put ''YWJsZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJpZCIsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIiwidmFsdWUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9wZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsclNlbGVjdCIsIiIs''@;'; put 'put ''MywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xyLWNvbC1tZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNsci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsxLCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9j''@;'; put 'put ''ayIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJdLFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIs''@;'; put 'put ''MywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsInNpbmdsZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQt''@;'; put 'put ''dmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJW''@;'; put 'put ''YWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJ0eXBlIiwidGltZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQi''@;'; put 'put ''LCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0aW1lIiwzLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsMywic2VsZWN0ZWRMYWJlbENoYW5nZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50''@;'; put 'put ''Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsInNlY29uZExhYmVsIiwiZW1pdE9ubHlTZWxlY3RlZCIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nSWYiXSxb''@;'; put 'put ''ImxhYmVsIiwiVmFsdWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZGlzYWJsZWQiXSxbMSwiaW4tdmFsdWVzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJN''@;'; put 'put ''b2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0''@;'; put 'put ''bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEsImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAs''@;'; put 'put ''ImRpdiIsNCkoMSwiZGl2Iiw1KSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlucHV0Iiw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZHluYW1pY1doZXJlQ2xhdXNlLE0pfHwoaC5keW5hbWljV2hlcmVDbGF1c2U9TSksQ3QoTSl9KSxo''@;'; put 'put ''ZSgpLGRlKDQsImxhYmVsIiw3KSxPZSg1LCJEeW5hbWljIHdoZXJlIGNsYXVzZSIpLGhlKCkoKSgpLGRlKDYsImRpdiIsOCkoNywiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSg4LCJpbnB1dCIsOSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnVzZVBp''@;'; put 'put ''Y2tlcnMsTSl8fChoLnVzZVBpY2tlcnM9TSksQ3QoTSl9KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnVzZVBpY2tlcnNDaGFuZ2UoKSl9KSxoZSgpLGRlKDksImxhYmVsIiw3KSxPZSgxMCwiIFVzZSBwaWNrZXJzICIpLGhlKCkoKSgpKCksZGUoMTEsImRpdiIs''@;'; put 'put ''MTApKDEyLCJkaXYiLDExKSgxMywiY2xyLXNlbGVjdC1jb250YWluZXIiKSgxNCwibGFiZWwiKSxPZSgxNSwiR3JvdXAgbG9naWMiKSxoZSgpLGRlKDE2LCJzZWxlY3QiLDEyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZ3JvdXBMb2dpYyxNKXx8''@;'; put 'put ''KGguZ3JvdXBMb2dpYz1NKSxDdChNKX0pLEh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNldEdyb3VwTG9naWMoaC5ncm91cExvZ2ljKSl9KSxtdCgxNyx6bXQsMiwyLCJvcHRpb24iLDEzKSxoZSgpKCkoKSxkZSgxOCwiZGl2IiwxNCkoMTksInByZSIs''@;'; put 'put ''MTUpLE9lKDIwLCIgICAgICAiKSxtdCgyMSxVbXQsNCwwLCJkaXYiLDE2KSxPZSgyMiwiXG5cbiAgICAgICIpLGRlKDIzLCJjb2RlIiwxNyksT2UoMjQpLGhlKCksT2UoMjUsIlxuICAgICIpLGhlKCkoKSgpLGRlKDI2LCJkaXYiLDE4KSgyNywiZGl2IiwxOSksbXQoMjgsWm10LDEsMCwiZGl2''@;'; put 'put ''IiwyMCkoMjksbzZ0LDE1LDgsImRpdiIsMjEpLGhlKCkoKSxtdCgzMCx1NnQsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSgzMixtNnQsMyw3LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLEljKSgzNCxiNnQsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyLEljKSgzNixDNnQsOSw0LCJuZy10ZW1w''@;'; put 'put ''bGF0ZSIsbnVsbCwzLEljKX0yJmQmJihmZSgzKSxwaSgibmdNb2RlbCIsaC5keW5hbWljV2hlcmVDbGF1c2UpLGZlKDUpLHBpKCJuZ01vZGVsIixoLnVzZVBpY2tlcnMpLGZlKDgpLHhlKCJkaXNhYmxlZCIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6''@;'; put 'put ''aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk8MSkscGkoIm5nTW9kZWwiLGguZ3JvdXBMb2dpYyksZmUoKSx4ZSgibmdGb3JPZiIsaC5sb2dpY09wZXJhdG9ycyksZmUoNCkseGUoIm5nSWYiLGgud2hlcmVDbGF1c2VMb2FkaW5nKSxmZSgzKSxDcihoLndoZXJlQ2xhdXNlKSxmZSgzKSxUcigi''@;'; put 'put ''Y2xyLWNvbC1tZC0xMCIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWguY2xhdXNlc3x8bnVsbD09aC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6aC5jbGF1c2Vz''@;'; put 'put ''LnF1ZXJ5T2JqLmxlbmd0aCk+MSksZmUoKSx4ZSgibmdGb3JPZiIsaC5jbGF1c2VzLnF1ZXJ5T2JqKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsTjEsUzIsY3AsSGwsb3UsS3UsZHMsSWQsQnksU2gseDcsJHksQTIsazIscWwsTWQsVDIsbmwsR3MsRDZlLFN3LEZtdCxIbXRdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCkscjQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31vbkNsaWNrKGEpe2EudGFyZ2V0LmZvY3VzKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyIiLCJhcHBTdGVhbEZvY3VzIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoImNsaWNrIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNsaWNrKHYpfSl9fSl9fXJldHVybiBjfSkoKTtjb25zdCBTNnQ9WyJzZWFyY2hMaWJUcmVlSW5wdXQiXTtm''@;'; put 'put ''dW5jdGlvbiBNNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24geDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFy''@;'; put 'put ''Y2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBFNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtj''@;'; put 'put ''b25zdCBmPUxlKCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LE02dCwxLDAsImNsci1pY29u''@;'; put 'put ''Iiw5KSg1LHg2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCl9fWZ1bmN0aW9uIFQ2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBBNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgyKS4k''@;'; put 'put ''aW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBrNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgx''@;'; put 'put ''LCJkaXYiLDcpKDIsImlucHV0IiwxOCwyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgaD1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksbXQoNCxUNnQsMSwwLCJjbHItaWNvbiIsOSkoNSxBNnQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgy''@;'; put 'put ''KS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEQ2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlv''@;'; put 'put ''biBJNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gUjZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLE9lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkpfWZ1bmN0aW9uIEw2dChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxtdCgxLFI2dCwyLDAsInNwYW4iLDI1KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcjtmZSgpLHhlKCJuZ0lmIixhKX19ZnVuY3Rpb24gTzZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIFA2''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLExlKCk7Y29uc3QgaD1oYSgzKSxmPUxlKDMpLiRpbXBsaWNpdCx2PUxlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJl''@;'; put 'put ''ZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIEY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDI5LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChh''@;'; put 'put ''KTtjb25zdCBmPUxlKDMpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEh0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykudHJlZU9uRmlsdGVyKGgs''@;'; put 'put ''ImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCksbXQoNCxPNnQsMSwwLCJjbHItaWNvbiIsOSkoNSxQNnQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgzKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgy''@;'; put 'put ''KSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEg2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3QgaD13dChhKS4kaW1wbGljaXQsZj1MZSgzKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWljb24iLDMxKSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoNik7''@;'; put 'put ''ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxJcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIE42dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsRjZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixINnQsNCwzLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiw0KSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gVjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJi''@;'; put 'put ''dXR0b24iLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5uZ1ZhcixmPUxlKCkuJGltcGxpY2l0LHY9TGUoMikuJGltcGxpY2l0LE09TGUoKTtyZXR1cm4gQ3QoaD8iIjpNLnRhYmxlT25DbGljayhmLlRBQkxFVVJJLGYsdikpfSksY2koMiwyMSksbXQoMyxENnQsMSww''@;'; put 'put ''LCJjbHItaWNvbiIsMjIpKDQsSTZ0LDEsMCwiY2xyLWljb24iLDIzKSx1aSgpLE9lKDUpLGhlKCksbXQoNixMNnQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNCkoNyxONnQsMywyLCJuZy1jb250YWluZXIiLDI1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9TGUoKS4kaW1w''@;'; put 'put ''bGljaXQsaD1MZSgyKS4kaW1wbGljaXQsZj1MZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCkseGUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwh''@;'; put 'put ''MCksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxJcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLGZlKDIpLHhlKCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBCNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNCksSHQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50cmVlTm9kZUNsaWNrZWQoaCxmLHYudGFibGVzKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLG10KDEsVjZ0LDgsOSwiY2xyLXRvb2x0aXAiLDE5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgzKTtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxw''@;'; put 'put ''aSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSxmZSgpLHhlKCJuZ1ZhciIsZCsxPmgubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gajZ0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTQsMSksSHQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLGdpKCJjbHJFeHBhbmRl''@;'; put 'put ''ZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgyLCJwIiwxNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9aGEoMSksZj1MZSgpLiRpbXBs''@;'; put 'put ''aWNpdCx2PUxlKCk7cmV0dXJuIHYubGliPWYuTElCUkFSWUlELEN0KHYubGlicmFyeU9uQ2xpY2sodi5saWJ8fCIiLGYsaCkpfSksR3QoMywiY2xyLWljb24iLDE2KSxPZSg0KSxoZSgpLG10KDUsazZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoNixCNnQsMiw1LCJjbHItdHJlZS1ub2RlIiwx''@;'; put 'put ''NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDQpLElyKCIgIixhLkxJQlJBUllO''@;'; put 'put ''QU1FLCIgIiksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXMpLGZlKCkseGUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gejZ0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxqNnQsNyw3LCJjbHItdHJlZS1ub2RlIiwxMyksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCks''@;'; put 'put ''eGUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBVNnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMyKSgxLCJzcGFuIiwzMyksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1sZXQgWjZ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmhl''@;'; put 'put ''bHBlclNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IGZkLHRoaXMudGFibGVPbkNsaWNrRW1pdHRlcj1uZXcgS3IsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXI9bmV3IEtyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlzLnBhZ2luZz0h''@;'; put 'put ''MCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVv''@;'; put 'put ''dXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hhbmdlcyhhKXthLmxpYnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRoaXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMu''@;'; put 'put ''bGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJB''@;'; put 'put ''UllOQU1FIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7ZC5pbkZv''@;'; put 'put ''cmVncm91bmQ9ITA7Y29uc3QgZj0oKT0+c2V0VGltZW91dCgoKT0+aC5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCkpO2lmKGQudGFibGVzKWQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsdGhpcy5saWJyYXJ5''@;'; put 'put ''T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtkLmxvYWRpbmdUYWJsZXM9ITAsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiExfSk7Y29uc3Qgdj1zZXRJbnRl''@;'; put 'put ''cnZhbCgoKT0+e2QubG9hZGluZ1RhYmxlc3x8KGYoKSxjbGVhckludGVydmFsKHYpKX0sNTAwKX1kLmV4cGFuZGVkJiZmKCksdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlMaXN0LGQpfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q''@;'; put 'put ''KCl7Zi5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCg1MCwoKT0+e2YuaGFzQ29sdW1ucz8oZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpk''@;'; put 'put ''LGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiEwfSkpKTooZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiExfSkp''@;'; put 'put ''LGYuY29sbGFwc2VUcmVlSXRlbXMoaC50YWJsZXMsZCkpOmYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KX0pfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlz''@;'; put 'put ''LnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkl9bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xl''@;'; put 'put ''dCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5k''@;'; put 'put ''ZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1oYW5kbGVT''@;'; put 'put ''Y3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZCYmZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLmxvYWRNb3JlTGlicmFyaWVzKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3UpLEdlKHUxKSl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkYy10cmVlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoUzZ0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguc2VhcmNoTGliSW5wdXRMaXN0PWYpfX0saG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7MSZkJiZIdCgic2Nyb2xsIixmdW5jdGlvbih2KXtyZXR1cm4gaC5oYW5kbGVTY3JvbGwodil9KX0saW5wdXRzOntoYXNDb2x1bW5zOiJoYXNDb2x1bW5zIixwYWdpbmc6InBhZ2luZyIsbGlicmFyeUxpc3Q6ImxpYnJhcnlMaXN0In0sb3V0cHV0czp7dGFibGVPbkNsaWNr''@;'; put 'put ''RW1pdHRlcjoidGFibGVPbkNsaWNrRW1pdHRlciIsbGlicmFyeU9uQ2xpY2tFbWl0dGVyOiJsaWJyYXJ5T25DbGlja0VtaXR0ZXIifSxmZWF0dXJlczpbd2xdLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbImxpYlRyZWVOb2RlIiwiIl0sWyJzZWFy''@;'; put 'put ''Y2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFs''@;'; put 'put ''Rm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1l''@;'; put 'put ''cyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwi''@;'; put 'put ''Y2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xy''@;'; put 'put ''RXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwi''@;'; put 'put ''XSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsclBvc2l0''@;'; put 'put ''aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNs''@;'; put 'put ''cklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEs''@;'; put 'put ''InctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItdHJlZSIpLG10KDEsRTZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMix6NnQsMiwxLCJuZy1jb250YWluZXIiLDQpLGhlKCksbXQo''@;'; put 'put ''MyxVNnQsMywwLCJkaXYiLDUpKSwyJmQmJihmZSgpLHhlKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLHhlKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSxmZSgpLHhlKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLFMyLGNwLEVoLFBkLHA1LEhsLGow''@;'; put 'put ''LEwyLFoxLG03LGI3LHY3LHFsLG5sLEdzLFN3LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFc2dD1bInJlc2l6ZUJveCJdLFk2dD1bImRyYWdIYW5kbGVDb3JuZXIiXSxHNnQ9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6''@;'; put 'put ''bCxoZWFkZXJQa3M6YX0pLCQ2dD0oYyxsKT0+KHt4OmMseTpsfSk7ZnVuY3Rpb24gSzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMzcpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksenUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52''@;'; put 'put ''aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHE2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzgpLEd0KDEsImNs''@;'; put 'put ''ci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gWDZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDApLE9lKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxoZSgpKX1mdW5jdGlvbiBKNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkYy10cmVlIiw0MSksSHQoImxp''@;'; put 'put ''YnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLnRhYmxlT25DbGljayhoKSl9KSxoZSgpfTImYyYmeGUoImxp''@;'; put 'put ''YnJhcnlMaXN0IixMZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gUTZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDIpLE9lKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksaGUoKSl9ZnVuY3Rpb24gZTh0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsNTApfWZ1''@;'; put 'put ''bmN0aW9uIHQ4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2Lm1pbmltaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNs''@;'; put 'put ''ci1pY29uIiwyMCksZGUoMiwic3BhbiIsMTkpLE9lKDMsIk1pbmltaXplIHZpZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIG44dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQs''@;'; put 'put ''dj1MZSgpO3JldHVybiB2LnJlc3RvcmUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMSwiY2xyLWljb24iLDIxKSxkZSgyLCJzcGFuIiwxOSksT2UoMywiUmVzdG9yZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiByOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw''@;'; put 'put ''LCJkaXYiLDQzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuc2VsZWN0Vmlld2JveChoKSl9KSxkZSgxLCJkaXYiLDQ0KSxPZSgyKSxtdCgzLGU4dCwxLDAsImNsci1zcGlubmVyIiw0NSksaGUoKSxkZSg0LCJkaXYiKSg1LCJh''@;'; put 'put ''Iiw0NiksSHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDYsImNsci1pY29uIiw0NyksZGUoNywic3BhbiIsMTkpLE9lKDgsIlJlc2V0IHBvc2l0''@;'; put 'put ''aW9uIGFuZCBzaXplIiksaGUoKSgpLG10KDksdDh0LDQsMCwiYSIsNDgpKDEwLG44dCw0LDAsImEiLDQ4KSxkZSgxMSwiYSIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LmNsb3NlKGYpLEN0KHYuc3RvcFByb3BhZ2F0''@;'; put 'put ''aW9uKGgpKX0pLEd0KDEyLCJjbHItaWNvbiIsNDkpLGRlKDEzLCJzcGFuIiwxOSksT2UoMTQsIkNsb3NlIHZpZXdib3giKSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7VHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNl''@;'; put 'put ''bGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxmZSgyKSxWZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksZmUoNCkseGUoIm5nSWYiLCFhLm1p''@;'; put 'put ''bmltaXplZCksZmUoKSx4ZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlvbiBpOHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBhOHQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDUzKSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw1NCwwKSxIdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9aGEoMyksdj1MZSgpLm5nVmFyO3JldHVybiBDdChMZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCx2LmNvbEhl''@;'; put 'put ''YWRlcnNIaWRkZW4pKX0pLG10KDQsaTh0LDIsMSwib3B0aW9uIiw1NSksaGUoKSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoMikseGUoImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLGZlKDIpLHhlKCJuZ0Zvck9m''@;'; put 'put ''IixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiBvOHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gczh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgp''@;'; put 'put ''LiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykub25Db2xSZW1vdmUoaCkpfSksaGUoKX19ZnVuY3Rpb24gbDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLE9lKDIpLG10KDMsbzh0LDEsMCwiY2xyLWljb24iLDU5KSxoZSgpLG10KDQsczh0LDEsMCwiY2xyLWljb24i''@;'; put 'put ''LDYwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKS5uZ1ZhcixoPUxlKCk7ZHJlKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLFRyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZC5oZWFkZXJQ''@;'; put 'put ''a3MuaW5jbHVkZXMoYSkpLHhlKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKDIpLHp1KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxl''@;'; put 'put ''LmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLGZlKCkseGUoIm5nSWYiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgpLHhlKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5j''@;'; put 'put ''bHVkZXMoYSkpfX1mdW5jdGlvbiBjOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJwIiwxMCksT2UoMiwiQ29sdW1ucyBUbyBEaXNwbGF5IChkcmFnIGFuZCByZS1vcmRlcikiKSxoZSgpLGRlKDMsImRpdiIsNTYpLEh0KCJjZGtEcm9wTGlzdERyb3BwZWQiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5jb2x1bW5zRHJvcChoKSl9KSxtdCg0LGw4dCw1LDEzLCJkaXYiLDU3KSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoMykseGUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFkZXJzVmlzaWJsZSksZmUoKSx4ZSgi''@;'; put 'put ''bmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIHU4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTEpLG10KDEsYTh0LDUsMywibmctY29udGFpbmVyIiw1MikoMixjOHQsNSwyLCJuZy1jb250YWluZXIiLDUyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLGZlKCkseGUoIm5nSWYiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBkOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsODYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxl''@;'; put 'put ''KCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNvbGxhcHNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGg4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJu''@;'; put 'put ''IEN0KExlKCkuZXhwYW5kKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4OCksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIEN0KExlKCkuc2Vh''@;'; put 'put ''cmNoVGFibGUoZixoKSl9KSxoZSgpfX1mdW5jdGlvbiBwOHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw4OSksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gZzh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsOTApLE9lKDEsIkxvYWRpbmcuLi4iKSxoZSgpKX1mdW5jdGlvbiBt''@;'; put 'put ''OHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsOTEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9aGEoMTYpO3JldHVybiBMZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxDdChmLnZhbHVlPSIiKX0pLGhlKCl9fWZ1''@;'; put 'put ''bmN0aW9uIHY4dChjLGwpezEmYyYmKGRlKDAsImRpdiIsOTUpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gYjh0KGMsbCl7aWYoMSZjJiZHdCgwLCJob3QtdGFibGUiLDk2KSwyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0LGg9TGUoKTt4ZSgi''@;'; put 'put ''aG90SWQiLCJob3RJbnN0YW5jZV92aWV3Ym94XyIrZC5pZCkoInJlYWRPbmx5IiwhMCkoIm1vZGlmeUNvbFdpZHRoIixoLm1heFdpZHRoQ2hla2VyKSgiY29weVBhc3RlIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGgudmlld2JveFRhYmxl''@;'; put 'put ''c1thXS5ob3RUYWJsZS5jb250ZXh0TWVudSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJs''@;'; put 'put ''ZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRh''@;'; put 'put ''YmxlLmhlaWdodCkoImNlbGxzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJsaWNlbnNlS2V5IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFi''@;'; put 'put ''bGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIHk4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLG10KDEsdjh0LDIsMCwiZGl2Iiw5MykoMixiOHQsMSwxNywiaG90LXRhYmxlIiw5NCksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1MZSgpLiRpbXBsaWNpdDtfZCgiZGlzcGxheSIs''@;'; put 'put ''ZC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgpLHhlKCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLGZlKCkseGUoIm5nSWYiLGE+LTEpfX1mdW5jdGlvbiBfOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDYzLDEpLEh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9KSxkZSgyLCJkaXYiLDY0KSgzLCJz''@;'; put 'put ''cGFuIiw2NSksT2UoNCksaGUoKSxkZSg1LCJkaXYiLDY2KSxtdCg2LGQ4dCwxLDAsImNsci1pY29uIiw2NykoNyxoOHQsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChM''@;'; put 'put ''ZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwiY2xyLWljb24iLDcwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuY2xvc2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIpLEh0KCJjZGtEcmFnTW92ZWQiLGZ1''@;'; put 'put ''bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9aGEoMSksTT1oYSgxMSk7cmV0dXJuIEN0KExlKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIpKDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0Iiw3NSwzKSxIdCgia2V5dXAuZW50''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIEN0KExlKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLG10KDE3LGY4dCwxLDAsImNsci1pY29uIiw3NikoMTgscDh0LDIsMCwic3BhbiIsNzcpLGhlKCksZGUoMTksImNsci1jaGVja2JveC1j''@;'; put 'put ''b250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQiLDc4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0p''@;'; put 'put ''LGhlKCksZGUoMjIsImxhYmVsIiksT2UoMjMsIk51bWVyaWMiKSxoZSgpKCkoKSgpLGRlKDI0LCJkaXYiLDQ0KSxtdCgyNSxnOHQsMiwwLCJzcGFuIiw3OSkoMjYsbTh0LDEsMCwiY2xyLWljb24iLDgwKSxkZSgyNywiYSIsODEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEp''@;'; put 'put ''LiRpbXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gTGUoKS5vcGVuRmlsdGVyKGgpLEN0KGYudmFsdWU9IiIpfSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxPZSgzMCksaGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBo''@;'; put 'put ''PXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5vcGVuVGFibGVFZGl0KGgpKX0pLGhlKCkoKSgpLG10KDMyLHk4dCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtfZCgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lk''@;'; put 'put ''dGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLFRyKCJmb2N1c2VkIixhLmZvY3VzZWQpLHhlKCJjZGtEcmFnRnJlZURyYWdQb3Np''@;'; put 'put ''dGlvbiIsbHAoMzQsJDZ0LGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5pZCksZmUoNCksVmYoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSx4ZSgibmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLHhlKCJuZ0lmIixhLmNvbGxhcHNlZCksZmUoMykseGUo''@;'; put 'put ''ImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxmZSgyKSxfZCgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgzKSx4ZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMikseGUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCkseGUoIm5n''@;'; put 'put ''SWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMykscGkoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUoNCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxmZSgyKSxUcigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLGZl''@;'; put 'put ''KDIpLENyKGEuZmlsdGVyVGV4dCksZmUoKSxUcigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksZmUoKSx4ZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiB3OHQoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1xdWVyeSIsOTcsNCksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKCk7eGUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IEk2ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7''@;'; put 'put ''aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhp''@;'; put 'put ''cy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9n''@;'; put 'put ''Z2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2VydmljZT1ELHRoaXMucm91dGVyPVosdGhpcy5hY3RpdmF0ZWRSb3V0ZT1yZSx0aGlzLmNkZj1jZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IEtyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFy''@;'; put 'put ''aWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuaG90''@;'; put 'put ''VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJj''@;'; put 'put ''b3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiEx''@;'; put 'put ''LGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10''@;'; put 'put ''aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8Nix0aGlzLmhvdFRh''@;'; put 'put ''YmxlUmVnaXN0ZXJlcj1uZXcgWW19bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJp''@;'; put 'put ''ZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0''@;'; put 'put ''aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09dGhpcy5saWNlbmNl''@;'; put 'put ''U3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9''@;'; put 'put ''fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdldCB2aWV3Ym94TGlt''@;'; put 'put ''aXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhh''@;'; put 'put ''LmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6''@;'; put 'put ''YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91dCgoKT0+e2Quc2V0''@;'; put 'put ''QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBmPWAke2EubGlicmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNuYXBUb0dyaWQoKX0p''@;'; put 'put ''KCl9bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuTUVNTkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWYsZCYmKGQudGFi''@;'; put 'put ''bGVzPWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxkLmxvYWRpbmdUYWJsZXM9ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09aC52aWV3Ym94VGFibGVzLmZpbmQoRD0+RC52aWV3Ym94SWQ9PT1kLmlkKTtoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKEQ9PntNJiYoTS5ob3RUYWJsZS5kYXRh''@;'; put 'put ''PUQudmlld2RhdGEpLGYobnVsbCl9KS5jYXRjaCgoKT0+e3YoKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsRD1oLnZpZXdib3hUYWJsZXMuZmluZChaPT5aLnZpZXdib3hJ''@;'; put 'put ''ZD09PWQuaWQpO0QmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oWj0+e0Q/TT0hMDpEPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhv''@;'; put 'put ''dFRhYmxlOmFMKGguaG90VGFibGVEZWZhdWx0KX0sRC5ob3RUYWJsZS5kYXRhPVoudmlld2RhdGEsRC5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9Wi4kdmlld2RhdGEsRC5ob3RUYWJsZS5jb2xzPVouY29scyxCZWUoRC5ob3RUYWJsZS5jb2xzLFtdLFouJHZpZXdkYXRhKTtsZXQgcmU9W10sY2U9''@;'; put 'put ''W107Zm9yKGxldCBiZSBpbiBaLnZpZXdkYXRhWzBdKWJlJiZjZS5wdXNoKGJlKTtmb3IobGV0IGJlPTA7YmU8Y2UubGVuZ3RoO2JlKyspcmUucHVzaCh7ZGF0YTpjZVtiZV19KTtELmhvdFRhYmxlLmhlYWRlclBrcz1hTChaLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksRC5o''@;'; put 'put ''b3RUYWJsZS5hbGxDb2xIZWFkZXJzPWNlLmZpbHRlcihiZT0+IUQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPWFMKEQuaG90VGFibGUuYWxsQ29sSGVhZGVycyksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1jZS5maWx0''@;'; put 'put ''ZXIoYmU9PkQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzPWNlLEQuaG90VGFibGUuY29sdW1ucz1yZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oRC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVt''@;'; put 'put ''bnM/Lm1hcCgoYmUsRWUpPT57Y29uc3QgQmU9Y2VbYmVdLHFlPUQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKEJlKTtxZT4tMSYmKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UocWUsMSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVtFZV09QmUpfSkp''@;'; put 'put ''OkQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5ELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKGJlPT5iZSksTXx8aC52aWV3Ym94''@;'; put 'put ''VGFibGVzLnB1c2goRCksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFoucXVlcnkpLGQuZmlsdGVyVGV4dD1aLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10s''@;'; put 'put ''ZC5pZCk7Y29uc3QgYmU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7YmU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOkQuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooRWUsQmUpPT57Y29uc3QgcWU9YmU/LmNvbFRvUHJvcChFZSk7''@;'; put 'put ''cWUmJkQuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4T2YocWUpPi0xJiZCZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxCZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSksYmU/LnJlbmRlcigpLGguc2VsZWN0ZWRW''@;'; put 'put ''aWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQpfSksZigpfSkuY2F0Y2goWj0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihaKSx2KCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtkLnRhYmxlfWA7ZC5sb2FkaW5n''@;'; put 'put ''RGF0YT0hMCx0aGlzLmxvYWREYXRhKGgsZCkudGhlbigoKT0+e2QubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldFZpZXdib3hUYWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGg9Pmgudmll''@;'; put 'put ''d2JveElkPT09YS5pZCl9cmVzaXplKGEsZCl7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWgubGVmdC1mLmxlZnQraC53aWR0aCxNPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPXYrInB4Iixk''@;'; put 'put ''LnN0eWxlLmhlaWdodD1NKyJweCIsdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHt3aWR0aDp2''@;'; put 'put ''LGhlaWdodDpNfX1kcmFnTW92ZShhLGQsaCxmKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9dGhpcy5yZXNpemUoYSxkKTtoLndpZHRoPXYud2lkdGgsaC5oZWlnaHQ9di5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1''@;'; put 'put ''ZXJ5LmZvckVhY2goYT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZlRWxlbWVudC5pZH1gLGY9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgodixNKT0+di5uYXRpdmVFbGVtZW50LmlkPT09aCk7dGhp''@;'; put 'put ''cy5zZXRIYW5kbGVUcmFuc2Zvcm0oZj8ubmF0aXZlRWxlbWVudCxkLCJib3RoIil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj1kLndpZHRoLWYud2lkdGgsTT1kLmhlaWdodC1mLmhlaWdodDt2Kz01LE0rPTUsIngi''@;'; put 'put ''PT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt2fXB4LCAwKWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7TX1weClgKSwiYm90aCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsICR7TX1weClgKX1mb2N1''@;'; put 'put ''c1ZpZXdib3goYSl7dGhpcy52aWV3Ym94ZXMubWFwKGQ9PntkLmZvY3VzZWQ9ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQpe2xldCBmPWEuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYubGVmdCxkLnk9Zi50b3AsdGhp''@;'; put 'put ''cy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBhPXdpbmRvdy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LE09TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxEPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLGNlPShhLTUqKE0r''@;'; put 'put ''MSkpL00sYmU9KGEtNSooRCsxKSkvRDtsZXQgQmU9MCxydD0oZC0yNTAtNjApLzIscHQ9MCxkdD0wO2ZvcihsZXQgSnQ9MDtKdDx0aGlzLnZpZXdib3hlcy5sZW5ndGg7SnQrKyl7bGV0IHZuPXRoaXMudmlld2JveGVzW0p0XSxDbj0hKEp0Pk0tMSk7Y29uc3QgdG49Q24/Y2U6YmU7IUNuJiYw''@;'; put 'put ''PT09ZHQmJihwdD0wLGR0KyssQmU9MCksdm4ueD01K0JlK3B0Kih0bis1KSx2bi55PTI1MCtkdCoocnQrNSksdm4ud2lkdGg9dG4sdm4uaGVpZ2h0PXJ0LHB0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSl9bWlu''@;'; put 'put ''aW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NT''@;'; put 'put ''aXplKGEpe2EueD13aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdl''@;'; put 'put ''ZCgpfW1pbmltaXplKGEpe2EubWluaW1pemVkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jb2xsYXBzZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKGEpe2EuY29s''@;'; put 'put ''bGFwc2VkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jbG9zZShhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09YS5pZCksaD10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4tMSYmdGhpcy52aWV3Ym94ZXMu''@;'; put 'put ''c3BsaWNlKGQsMSksaD4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZShoLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoWiksdGhp''@;'; put 'put ''cy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3Ro''@;'; put 'put ''aXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/ZDFlKGEu''@;'; put 'put ''Y29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KTpmdW5jdGlvbiBWRmUoYyxsLGEsZCl7Y29uc3QgaD1UeChhLGMubGVuZ3RoLTEpLGY9VHgoZCxsLmxlbmd0aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEpWzBdKX0oYS5wcmV2aW91c0Nv''@;'; put 'put ''bnRhaW5lci5kYXRhLGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVycykmJnRo''@;'; put 'put ''aXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYS5pdGVtLmRhdGEsYS5jdXJyZW50SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEsZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEpLGEudmFsdWU9IiIsdGhpcy5z''@;'; put 'put ''ZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUmJih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goZCksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRk''@;'; put 'put ''ZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElk''@;'; put 'put ''KSl9b25Db2xSZW1vdmUoYSl7aWYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUu''@;'; put 'put ''Y29sSGVhZGVyc1Zpc2libGUuc3BsaWNlKGQsMSksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1c2goYSksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4s''@;'; put 'put ''dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9fXJl''@;'; put 'put ''c2V0U2VsZWN0ZWRWaWV3Ym94KGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PWEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hUYWJsZXMuZmluZChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5zZWxlY3RlZFZpZXdib3g9dm9p''@;'; put 'put ''ZCAwLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dm9pZCAwfXN0b3BQcm9wYWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgo''@;'; put 'put ''YSldO3RoaXMuZmlsdGVyTGliZHM9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5maWx0ZXJMaWJk''@;'; put 'put ''cyxkLmhvdFRhYmxlLmNvbHMpfW9wZW5UYWJsZUVkaXQoYSl7Y29uc3QgZD1hLmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJlZi5zbGljZSgwLGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2luZG93Lm9wZW4oaCwiX2JsYW5r''@;'; put 'put ''Iil9cmVzZXRGaWx0ZXIoKXt0aGlzLmZpbHRlcmluZ1ZpZXdib3gmJih0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJlbG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2JveENoYW5nZWQoKSxLbi52aWV3''@;'; put 'put ''Ym94ZXNbdGhpcy5maWx0ZXJpbmdWaWV3Ym94LmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1bXSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJs''@;'; put 'put ''ZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2NvbnN0IHY9aFtmXS5lbGVtZW50czthPXYuZmlsdGVyKGZ1bmN0aW9uKE0pe3JldHVybiBudWxsPT09TS52YXJpYWJsZX0pLGEu''@;'; put 'put ''bGVuZ3RoJiZkLnB1c2godil9fWlmKGQubGVuZ3RoKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dyb3VwTG9naWM6dGhpcy5jbGF1''@;'; put 'put ''c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaCh2PT57Y29uc3QgTT17ZmlsdGVyQ2xhdXNlczpbXX07di5lbGVtZW50cy5mb3JFYWNoKEQ9PntNLmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25l''@;'; put 'put ''KEQpKX0pLE0uY2xhdXNlTG9naWM9di5jbGF1c2VMb2dpYyxoLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTSkpfSk7Y29uc3QgZj10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3RoaXMuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGYpLnRoZW4odj0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9di5yZXN1bHRbMF0uRklMVEVSX1JLLHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZp''@;'; put 'put ''bHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaCh2PT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNhdGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGY9YS52YWx1ZSx2PWQubGlicmFyeSsiLiIrZC50YWJsZSxNPXBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpO2NvbnN0IEQ9aC52aWV3Ym94VGFibGVzLmZpbmQoWj0+Wi52aWV3Ym94SWQ9PT1kLmlkKTtEJiYoeWllbGQgaC5zYXNTdG9yZVNl''@;'; put 'put ''cnZpY2Uudmlld0RhdGFTZWFyY2goZixkLnNlYXJjaE51bWVyaWMsdixNKS50aGVuKFo9PntaLnNhc3BhcmFtc3x8Wi52aWV3RGF0YT9ELmhvdFRhYmxlLmRhdGE9Wi52aWV3ZGF0YTpkLnNlYXJjaExvYWRpbmc9ITB9KS5jYXRjaChaPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopfSksZC5z''@;'; put 'put ''ZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEs''@;'; put 'put ''ZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0''@;'; put 'put ''Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IHY9Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Lbi5l''@;'; put 'put ''ZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIo''@;'; put 'put ''YSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5z''@;'; put 'put ''ZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsTT1bXTtyZXR1cm4gaC5tYXAoKEQsWik9PntpZihaPHYpe2Nv''@;'; put 'put ''bnN0IHJlPWYuaW5kZXhPZihEKTtyZT4tMSYmTS5wdXNoKHJlKX19KSxNfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAodj0+aC5wcm9wVG9Db2wodikpO2gudXBkYXRlU2V0dGluZ3Mo''@;'; put 'put ''e2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxoLnJlbmRlcigpfX1nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSl7cmV0dXJuIGE/dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoYGhvdEluc3RhbmNlX3ZpZXdib3hfJHthfWApOnZvaWQgMH12aWV3Ym94Q2hhbmdlZCgpe2xl''@;'; put 'put ''dCBhO2NvbnN0IGQ9dGhpcy5lbmNvZGVVcmxEYXRhKHRoaXMudmlld2JveGVzKTtkLmxlbmd0aD4wJiYoYT17dmlld2JveGVzOmR9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOmF9KSx0aGlzLnByZXBhcmVGaWx0''@;'; put 'put ''ZXJDYWNoZSgpfXByZXBhcmVGaWx0ZXJDYWNoZSgpe2ZvcihsZXQgYSBvZiB0aGlzLnZpZXdib3hlcylpZihLbi52aWV3Ym94ZXNbYS5pZF18fChLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoWikpLGEucXVlcnkmJmEucXVlcnkubGVuZ3RoPjApe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKSxoPWB2aWV3Ym94ZXMuJHthLmlkfWA7S24udmlld2JveGVzW2EuaWRdLmZpbHRlci5xdWVyeT1hLnF1ZXJ5LEtuLnZpZXdib3hlc1thLmlkXS5maWx0ZXIubGliZHM9YS5saWJyYXJ5KyIuIithLnRh''@;'; put 'put ''YmxlLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoaCxkPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShhKXtsZXQgZD0iIjtyZXR1cm4gYS5tYXAoKGgsZik9PntkKz1gJHtoLmlkfS0ke2gubGlicmFyeX0tJHtoLnRhYmxlfS0ke2gud2lk''@;'; put 'put ''dGh9LSR7aC5oZWlnaHR9LSR7aC54fS0ke2gueX0tJHtoLmNvbGxhcHNlZD8xOjB9LSR7aC5taW5pbWl6ZWQ/MTowfS0ke2guZmlsdGVyX3BrfHwwfSR7aC5jb2x1bW5zJiZoLmNvbHVtbnMubGVuZ3RoPjA/Ii0iK2guY29sdW1ucz8uam9pbigiLCIpOiIifWAsZiE9PWEubGVuZ3RoLTEmJihk''@;'; put 'put ''Kz0iOyIpfSksZH1kZWNvZGVVcmxEYXRhKGEpe2xldCBoPVtdO3JldHVybiBhLnNwbGl0KCI7IikubWFwKHY9Pntjb25zdCBNPXYuc3BsaXQoIi0iKTtoLnB1c2goe2lkOnBhcnNlSW50KE1bMF0pLGxpYnJhcnk6TVsxXSx0YWJsZTpNWzJdLHdpZHRoOnBhcnNlSW50KE1bM10pLGhlaWdodDpw''@;'; put 'put ''YXJzZUludChNWzRdKSx4OnBhcnNlSW50KE1bNV0pLHk6cGFyc2VJbnQoTVs2XSksY29sbGFwc2VkOiEhcGFyc2VJbnQoTVs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQoTVs4XSksY29sdW1uczpNWzEwXT8uc3BsaXQoIiwiKS5tYXAoRD0+cGFyc2VJbnQoRCkpfHxbXSxmaWx0ZXJfcGs6TVs5''@;'; put 'put ''XX0pfSksaH1uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5Py51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFdhKSxHZSh1MSksR2UodGwpLEdlKHZjKSxHZShVaCksR2UoU2QpLEdlKEd1KSxHZShMcyksR2UoQ3UpLEdl''@;'; put 'put ''KEVzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKHFhKFc2dCw1KSxxYShZNnQsNSkpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGgucmVzaXplQm94UXVlcnk9''@;'; put 'put ''ZiksQ2koZj1TaSgpKSYmKGguZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5PWYpfX0saW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdib3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siaW5wdXQi''@;'; put 'put ''LCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9k''@;'; put 'put ''YWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxb''@;'; put 'put ''MSwibXQtMCJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm0tMCB2aWV3Ym94LWxpbWl0LW5vdGljZSIsNCwibmdJZiJdLFszLCJsaWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25D''@;'; put 'put ''bGlja0VtaXR0ZXIiLDQsIm5nSWYiXSxbMSwiY3VycmVudGx5LW9wZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90''@;'; put 'put ''dG9tLWxlZnQiLCJtbC0zIiwzLCJjbGljayJdLFsic2hhcGUiLCJncmlkLXZpZXciLCJzaXplIiwiMTkiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIsIjE5Il0sWyJzaGFwZSIsIndpbmRvdy1yZXN0b3JlIiwic2l6ZSIsIjE5Il0sWyJjbGFzcyIsInRl''@;'; put 'put ''eHQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcGVuLXZpZXdib3ggZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZC1mbGV4''@;'; put 'put ''IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsIm10LTEwIl0sWzEsIm0tMCJdLFsiY2xhc3MiLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIiw0LCJuZ1ZhciJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ2aWV3Ym94ZXMtY29udGFpbmVyIl0sWyJjbGFzcyIsInZpZXdib3giLCJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIs''@;'; put 'put ''IjAiLDMsImZvY3VzZWQiLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludGVyLWV2ZW50cyIsImJveC1zaGFkb3ciLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIiwibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZmlsdGVyLW1v''@;'; put 'put ''ZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzMsInZpZXdi''@;'; put 'put ''b3hJZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwibGljZW5jZS1u''@;'; put 'put ''b3RpY2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwibS0wIiwidmlld2JveC1saW1pdC1ub3RpY2UiXSxbMywibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsImxpYnJhcnlMaXN0Il0sWzEsInRleHQt''@;'; put 'put ''Y2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwib3Blbi12aWV3Ym94IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwi''@;'; put 'put ''LCIiLCJjbGFzcyIsIm1sLTMiLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiY3Vyc29yLW1vdmUiLCJzaXplIiwiMTMiXSxb''@;'; put 'put ''InJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLCJjbGFzcyIsInRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLWJvdHRvbS1sZWZ0IG1sLTMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjE5Il0sWyJjbHJTbWFsbCIsIiIsMSwibWwt''@;'; put 'put ''MyJdLFsiY2RrRHJvcExpc3RHcm91cCIsIiIsMSwiY29uZmlndXJhdGlvbi13cmFwcGVyIl0sWzQsIm5nSWYiXSxbMSwiY29scy1zZWFyY2giXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggY29sdW1ucyIs''@;'; put 'put ''InRhYmluZGV4IiwiMCIsMywidmFsdWVDaGFuZ2UiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xzLWxpc3QiLDMsImNka0Ryb3BMaXN0RHJvcHBlZCIsImNka0Ryb3BMaXN0RGF0YSJdLFsiY2RrRHJh''@;'; put 'put ''ZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJpbWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJhZyIsIiIsMywiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiXSxbInNo''@;'; put 'put ''YXBlIiwia2V5Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRyYXNoIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwia2V5Il0sWyJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNka0RyYWdCb3VuZGFyeSIs''@;'; put 'put ''Ii52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCJdLFsiY2RrRHJhZ0hhbmRsZSIsIiIsMSwiZHJhZy1oYW5kbGUiLCJkLWZs''@;'; put 'put ''ZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRhYmxlLXRpdGxlIl0sWzEsImFjdGlvbnMiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayIs''@;'; put 'put ''NCwibmdJZiJdLFsic2hhcGUiLCJtaW51cyIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWyJjZGtEcmFnIiwiIiwxLCJkcmFnSGFuZGxlIiwiY29ybmVyIiwzLCJjZGtEcmFnTW92ZWQiLCJpZCJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMt''@;'; put 'put ''Y2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWZsZXgtd3JhcCIsInRhYmxlLXNlYXJjaC13cmFwcGVyIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LXdyYXAiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJw''@;'; put 'put ''bGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2Jv''@;'; put 'put ''eCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1zbSIsNCwibmdJZiJdLFsic2hhcGUiLCJyZWZyZXNoIiwiY2xhc3MiLCJjbGljay1pY29uIiwzLCJjbGljayIsNCwi''@;'; put 'put ''bmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbGciLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtNSIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIiwxLCJjbGljay1pY29uIl0sWzEsInRvb2x0aXAtY29udGVu''@;'; put 'put ''dCIsInRvb2x0aXAtbG9uZyJdLFsic2hhcGUiLCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsiY2xhc3MiLCJjb250ZW50IiwzLCJkaXNwbGF5Iiw0LCJuZ1ZhciJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24i''@;'; put 'put ''LDMsImNsaWNrIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsImNsaWNrLWljb24iLDMsImNsaWNrIl0sWzEsImNvbnRlbnQiXSxbImNsYXNz''@;'; put 'put ''IiwiaG90LXNwaW5uZXIgbXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0''@;'; put 'put ''TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vu''@;'; put 'put ''c2VLZXkiLDQsIm5nSWYiXSxbMSwiaG90LXNwaW5uZXIiLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBh''@;'; put 'put ''c3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5S''@;'; put 'put ''ZXNpemUiLCJsaWNlbnNlS2V5Il0sWzMsInZpZXdib3hJZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsNSksSHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGguY2xyTW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMi''@;'; put 'put ''LDYpLE9lKDIsIiBWaWV3Ym94ZXMgIiksbXQoMyxLNnQsMiwyLCJzcGFuIiw3KSxoZSgpLGRlKDQsImRpdiIsOCkoNSwiZGl2Iiw5KSg2LCJwIiwxMCksT2UoNywiQWRkIG5ldyIpLGhlKCksR3QoOCwiaHIiLDExKSxtdCg5LHE2dCwyLDAsImRpdiIsMTIpKDEwLFg2dCwyLDAsInAiLDEzKSgx''@;'; put 'put ''MSxKNnQsMSwxLCJkYy10cmVlIiwxNCksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJwIiwxMCksT2UoMTUsIkN1cnJlbnRseSBvcGVuIiksaGUoKSxkZSgxNiwiZGl2IikoMTcsImEiLDE3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc25hcFRvR3JpZCgp''@;'; put 'put ''fSksR3QoMTgsImNsci1pY29uIiwxOCksZGUoMTksInNwYW4iLDE5KSxPZSgyMCwiU25hcCB2aWV3Ym94ZXMgdG8gZ3JpZCIpLGhlKCkoKSxkZSgyMSwiYSIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5taW5pbWl6ZUFsbCgpfSksR3QoMjIsImNsci1pY29uIiwyMCksZGUo''@;'; put 'put ''MjMsInNwYW4iLDE5KSxPZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSxkZSgyNSwiYSIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0b3JlQWxsKCl9KSxHdCgyNiwiY2xyLWljb24iLDIxKSxkZSgyNywic3BhbiIsMTkpLE9lKDI4LCJSZXN0b3Jl''@;'; put 'put ''IGFsbCB2aWV3Ym94ZXMiKSxoZSgpKCkoKSgpLEd0KDI5LCJociIpLG10KDMwLFE2dCwyLDAsInAiLDIyKSgzMSxyOHQsMTUsMTAsImRpdiIsMjMpLGRlKDMyLCJkaXYiLDI0KSgzMywicCIsMjUpLE9lKDM0KSxoZSgpKCksR3QoMzUsImhyIiksbXQoMzYsdTh0LDMsMiwiZGl2IiwyNiksaGUo''@;'; put 'put ''KSgpLGRlKDM3LCJkaXYiLDI3KSgzOCwiYnV0dG9uIiwyOCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnZpZXdib3hNb2RhbD0hMX0pLE9lKDM5LCIgT2sgIiksaGUoKSgpKCksZGUoNDAsImRpdiIsMjkpLG10KDQxLF84dCwzMywzNywiZGl2IiwzMCksaGUoKSxkZSg0MiwiY2xy''@;'; put 'put ''LW1vZGFsIiwzMSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZmlsdGVyLHYpfHwoaC5maWx0ZXI9diksdn0pLGRlKDQzLCJoMyIsMzIpLE9lKDQ0LCIgRmlsdGVyIGZvciB2aWV3Ym94IHRhYmxlOiAiKSxkZSg0NSwic3BhbiIpLE9lKDQ2KSxoZSgp''@;'; put 'put ''KCksZGUoNDcsImRpdiIsMzMpLG10KDQ4LHc4dCwyLDEsImFwcC1xdWVyeSIsMzQpLGhlKCksZGUoNDksImRpdiIsMjcpKDUwLCJidXR0b24iLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzZXRGaWx0ZXIoKX0pLE9lKDUxLCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUo''@;'; put 'put ''NTIsImJ1dHRvbiIsMjgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5maWx0ZXI9ITF9KSxPZSg1MywiIENhbmNlbCAiKSxoZSgpLGRlKDU0LCJidXR0b24iLDM2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc2VuZENsYXVzZSgpfSksT2UoNTUsIiBPayAiKSxoZSgp''@;'; put 'put ''KCkoKSksMiZkJiYoeGUoImNsck1vZGFsT3BlbiIsaC52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMykseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1oLkluZmluaXR5KSxmZSg2KSx4ZSgi''@;'; put 'put ''bmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLnZpZXdib3hMaW1pdFJlYWNoZWQpLGZlKCkseGUoIm5nSWYiLGgudmlld2JveE1vZGFsKSxmZSgxOSkseGUoIm5nSWYiLGgudmlld2JveGVzLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnZpZXdib3hlcyks''@;'; put 'put ''ZmUoMyksSXIoIiBDb25maWd1cmF0aW9uICgiLG51bGwhPWguc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQ/IiMiKyhudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3''@;'; put 'put ''Ym94SWQpKyIgIisobnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQpOiJzZWxlY3Qgdmlld2JveCBmcm9tIGFib3ZlIiwiKSAiKSxmZSgyKSx4ZSgibmdWYXIiLHBNKDE5LEc2dCxudWxsPT1oLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUu''@;'; put 'put ''aG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRh''@;'; put 'put ''YmxlLmhlYWRlclBrcykpLGZlKDUpLHhlKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLmZpbHRlcikseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSx6dSgiICMiLG51bGw9PWguZmlsdGVyaW5nVmlld2Jv''@;'; put 'put ''eD9udWxsOmguZmlsdGVyaW5nVmlld2JveC5pZCwiICIsaC5maWx0ZXJMaWJkcywiICIpLGZlKDIpLHhlKCJuZ0lmIixoLmZpbHRlciksZmUoNikseGUoImNsckxvYWRpbmciLGguZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEhsLG91LEt1LGowLFAyLGRzLFExZSxJZCxC''@;'; put 'put ''eSxTaCxaMSxSZCxzNyxBMixrMixNZCxubCxhNyxHcyx5cCxYZWUsRF8seTFlLGIxZSxUWSx2MWUsazZlLFo2dCxTdyxlRV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxSNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBLcix0aGlzLmZp''@;'; put 'put ''bGVEcm9wPW5ldyBLcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1''@;'; put 'put ''ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9w''@;'; put 'put ''RWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJkcm9wIixmdW5j''@;'; put 'put ''dGlvbih2KXtyZXR1cm4gaC5vbkRyb3Aodil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6''@;'; put 'put ''e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KX19cmV0dXJuIGN9KSgpLEw2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZVNlbGVjdGVkPW5ldyBLcix0aGlzLmVsZW1lbnQ9YX1pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMubXVsdGlwbGV9b25DaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoYSksdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChhKSx0aGlzLmlzRW1wdHlB''@;'; put 'put ''ZnRlclNlbGVjdGlvbigpJiYodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJh''@;'; put 'put ''cHBGaWxlU2VsZWN0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZVNlbGVjdGVkOiJmaWxlU2VsZWN0ZWQifX0p''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQzh0KGMsbCl7MSZjJiYoZGUoMCwicCIsOCksT2UoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSxoZSgpKX1mdW5jdGlvbiBTOHQoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJjbHItZGctY29sdW1uIiksT2UoMiksaGUoKSx1aSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5jb2xOYW1lfHxhLmNvbEtleSl9fWZ1bmN0aW9uIE04dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImNsci1kZy1jZWxsIiksT2UoMiksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgpLiRpbXBsaWNp''@;'; put 'put ''dDtmZSgyKSxDcihkW2EuY29sS2V5XSl9fWZ1bmN0aW9uIHg4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciLDEzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KGYub25S''@;'; put 'put ''b3dDbGljaz9mLm9uUm93Q2xpY2soaCk6IiIpfSksbXQoMSxNOHQsMywxLCJuZy1jb250YWluZXIiLDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpfX1mdW5jdGlvbiBFOHQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJjbHItdGFiLWNvbnRlbnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSxtdCgyLFM4dCwzLDEsIm5nLWNvbnRhaW5lciIsNSkoMyx4OHQsMiwxLCJjbHItZGctcm93IiwxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoMikseGUoIm5nRm9yT2YiLGEuY29sc1RvRGlz''@;'; put 'put ''cGxheSksZmUoKSx4ZSgibmdGb3JPZiIsYS5tZXRhKX19ZnVuY3Rpb24gVDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsOSksT2UoMiksaGUoKSxtdCgzLEU4dCw0LDIsImNsci10YWItY29udGVudCIsMTApLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dCxkPWwuaW5kZXg7ZmUoMiksQ3IoYS5uYW1lKSxmZSgpLHhlKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgTzZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLm9wZW5DaGFuZ2U9bmV3IEtyLHRo''@;'; put 'put ''aXMucm93Q2xpY2tlZD1uZXcgS3IsdGhpcy5kc21ldGFUYWJzPVtdLHRoaXMudmVyc2lvbnNUYWJzPVtdLHRoaXMudGFicz1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmKHRoaXMucGFyc2VEU01ldGEoKSx0aGlzLnBhcnNl''@;'; put 'put ''VmVyc2lvbnMoKSx0aGlzLnRhYnM9Wy4uLnRoaXMuZHNtZXRhVGFicywuLi50aGlzLnZlcnNpb25zVGFic10pfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFUYWJzPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21ldGFUYWJzLmZpbmRJbmRleChoPT5oLm5hbWU9''@;'; put 'put ''PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0YVRhYnMucHVzaCh7bmFtZTphLk9EU19UQUJMRSx0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJOQU1FIn0se2NvbEtleToiVkFMVUUifV0sbWV0YTpbXSxvblJvd0NsaWNrOmg9Pnt0aGlzLnJvd0Ns''@;'; put 'put ''aWNrZWQuZW1pdChoKX19KS0xKSx0aGlzLmRzbWV0YVRhYnNbZF0ubWV0YS5wdXNoKGEpfX1wYXJzZVZlcnNpb25zKCl7dGhpcy52ZXJzaW9uc1RhYnM9W3tuYW1lOiJWRVJTSU9OUyIsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTE9BRF9SRUYifSx7Y29s''@;'; put 'put ''S2V5OiJVU0VSX05NIn0se2NvbEtleToiVkVSU0lPTl9EVFRNIn0se2NvbEtleToiTkVXX1JFQ09SRFMiLGNvbE5hbWU6IkFERCJ9LHtjb2xLZXk6IkNIQU5HRURfUkVDT1JEUyIsY29sTmFtZToiTU9EIn0se2NvbEtleToiREVMRVRFRF9SRUNPUkRTIixjb2xOYW1lOiJERUwifSx7Y29sS2V5''@;'; put 'put ''OiJWRVJTSU9OX0RFU0MifV0sbWV0YTp0aGlzLnZlcnNpb25zLG9uUm93Q2xpY2s6YT0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGEpfX1dfW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9uT3BlbkNoYW5nZSgh''@;'; put 'put ''MSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGF0YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEiLHZlcnNpb25z''@;'; put 'put ''OiJ2ZXJzaW9ucyJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UiLHJvd0NsaWNrZWQ6InJvd0NsaWNrZWQifSxmZWF0dXJlczpbd2xdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJj''@;'; put 'put ''bHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFz''@;'; put 'put ''cyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNzIiwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siLDQs''@;'; put 'put ''Im5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUtcm93IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksSHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25PcGVuQ2hhbmdlKHYpfSksZGUo''@;'; put 'put ''MSwiaDMiLDEpLE9lKDIsIkRhdGFzZXQgTWV0YSIpLGhlKCksZGUoMywiZGl2IiwyKSxtdCg0LEM4dCwyLDAsInAiLDMpLGRlKDUsImNsci10YWJzIiw0KSxtdCg2LFQ4dCw0LDIsImNsci10YWIiLDUpLGhlKCkoKSxkZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIsNyksSHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBoLm9uQ2xvc2VDbGljaygpfSksT2UoOSwiIENsb3NlICIpLGhlKCkoKSgpKSwyJmQmJih4ZSgiY2xyTW9kYWxPcGVuIixoLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksZmUoNCkseGUoIm5nSWYiLGguZHNtZXRhVGFicy5s''@;'; put 'put ''ZW5ndGg8MSksZmUoMikseGUoIm5nRm9yT2YiLGgudGFicykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLEFtLFFmLEk3LEVtLFNwLFI3LHRfLFRtLEE3LHhtLGs3LG91LEt1LEh5LF9tLENtLE03LHdtLHltLEM3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEE4dD0oKT0+''@;'; put 'put ''WyJudW1lcmljIix2b2lkIDBdLFA2ZT0oKT0+WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUuY3VzdG9tIl0sSmVlPShjLGwpPT4oe2NvbDpjLGNvbEluZGV4Omx9KSxrOHQ9KCk9Plt2b2lkIDBdLEQ4dD0oKT0+WyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl07ZnVuY3Rpb24g''@;'; put 'put ''STh0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLENyKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gUjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxNiksSHQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSxPZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTt4ZSgiZGlzYWJsZWQiLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZyksZmUoKSxJcigiICIsYS5nZW5lcmF0ZWRSZWNv''@;'; put 'put ''cmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4uIjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gTDh0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxJOHQsMiwxLCJzcGFuIiwxMykoMixS''@;'; put 'put ''OHQsMiwyLCJidXR0b24iLDE0KSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLGZlKCkseGUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRS''@;'; put 'put ''ZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIE84dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTcpKDEsInNwYW4iLDE4KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIFA4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBGOHQoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJzcGFuIiwzMiksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gSDh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIE44dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pbnB1dC1jb250YWluZXIiLDM1KSgxLCJp''@;'; put 'put ''bnB1dCIsMzYpLEh0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpLmluZGV4O3JldHVybiBDdChMZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgp''@;'; put 'put ''KX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS4kaW1wbGljaXQsdj1MZSgyKTtyZXR1cm4gdi5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSxDdCh2LmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbiho''@;'; put 'put ''KXt3dChhKTtjb25zdCBmPUxlKDMpLiRpbXBsaWNpdCx2PUxlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMykuJGltcGxpY2l0LGQ9TGUoMik7VHIoImlu''@;'; put 'put ''dmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxmZSgpLHBpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gVjh0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBCOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYi''@;'; put 'put ''KSxtdCgxLFY4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtMZSgyKTtjb25zdCBmPWhhKDE2KTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIs''@;'; put 'put ''SmVlLGQsaCkpfX1mdW5jdGlvbiBqOHQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLE44dCwyLDMsImNsci1pbnB1dC1jb250YWluZXIiLDM0KSgyLEI4dCwyLDUsImRpdiIsNSksdWkoKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0LGY9TGUoMik7ZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsWXMoMixBOHQpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSx4ZSgibmdJZiIsWXMoMyxQNmUpLmluY2x1ZGVzKG51bGw9PWYuY3Vy''@;'; put 'put ''cmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIHo4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0''@;'; put 'put ''YXJlYSIsMzgsMSksSHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMykuaW5kZXg7cmV0dXJuIEN0KExlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDUpLnJlY29yZElucHV0UGFzdGUo''@;'; put 'put ''aCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMykuJGltcGxpY2l0LHY9''@;'; put 'put ''TGUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksT2UoMywiICAgICAgICAgICAgICAgICAgIiksaGUoKSxkZSg0LCJjbHItY29udHJvbC1oZWxwZXIiKSxPZSg1KSxoZSgpKCl9aWYoMiZjKXtsZXQgYSxk''@;'; put 'put ''LGg7Y29uc3QgZj1oYSgyKSx2PUxlKDMpLiRpbXBsaWNpdCxNPUxlKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsTS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXModi5rZXkpKSgibm90LWNoYXIiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5j''@;'; put 'put ''dXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmEudHlwZSkseGUoInJvd3MiLHYudmFsdWUubGVuZ3RoPjgwPzY6MSkscGkoIm5nTW9kZWwiLE0uY3VycmVudFJlY29yZFt2LmtleV0pLHhlKCJtYXhMZW5ndGgiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRv''@;'; put 'put ''cnx8bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmQubGVuZ3RoKSxmZSg0KSx6dSgiIixmLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPU0uY3VycmVudFJlY29yZFZhbGlkYXRv''@;'; put 'put ''ci5nZXRSdWxlKHYua2V5KSk/bnVsbDpoLmxlbmd0aCwiIil9fWZ1bmN0aW9uIFU4dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gWjh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksbXQoMSxVOHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyksZD1h''@;'; put 'put ''LiRpbXBsaWNpdCxoPWEuaW5kZXg7TGUoMik7Y29uc3QgZj1oYSgxNik7ZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCgyLEplZSxkLGgpKX19ZnVuY3Rpb24gVzh0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSx6OHQsNiw5LCJjbHIt''@;'; put 'put ''dGV4dGFyZWEtY29udGFpbmVyIiw1KSgyLFo4dCwyLDUsImRpdiIsNSksdWkoKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0LGY9TGUoMik7ZmUoKSx4ZSgibmdJZiIsWXMoMixrOHQpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09''@;'; put 'put ''KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSx4ZSgibmdJZiIsWXMoMyxQNmUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1''@;'; put 'put ''bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIFk4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM5KSgxLCJ0ZXh0YXJlYSIsNDApLEh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLnJl''@;'; put 'put ''Y29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUo''@;'; put 'put ''MikuJGltcGxpY2l0LHY9TGUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHItY29udHJvbC1oZWxwZXIiKSxPZSgzLCJISDptbTpzcyIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2Nv''@;'; put 'put ''bnN0IGQ9TGUoMikuJGltcGxpY2l0LGg9TGUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhkLmtleSkpKCJub3QtY2hhciIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRW''@;'; put 'put ''YWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS50eXBlKSx4ZSgicm93cyIsZC52YWx1ZS5sZW5ndGg+ODA/NjoxKSxwaSgibmdNb2RlbCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSl9fWZ1bmN0aW9uIEc4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzkpKDEs''@;'; put 'put ''InRleHRhcmVhIiw0MSksSHQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5yZWNvcmRJbnB1dENoYW5n''@;'; put 'put ''ZShoLGYua2V5KSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIs''@;'; put 'put ''ImNsci1kYXRlLWNvbnRhaW5lciIsNDIpKDMsImlucHV0Iiw0MyksSHQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGgsZi5rZXkpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSgyKS4kaW1wbGljaXQsZD1MZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSkscGkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiAkOHQoYyxsKXsxJmMmJkZsKDApfWZ1''@;'; put 'put ''bmN0aW9uIEs4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLG10KDEsJDh0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O0xlKDIpO2NvbnN0IGY9aGEoMTYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQi''@;'; put 'put ''LGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbHAoMixKZWUsZCxoKSl9fWZ1bmN0aW9uIHE4dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInAiLDIyKSxPZSg0KSxtdCg1LFA4dCwxLDAsImNsci1pY29uIiwyMyksaGUoKSxkZSg2LCJwIiwy''@;'; put 'put ''NCksT2UoNyksaGUoKSgpLGRlKDgsImRpdiIsMjUpLG10KDksRjh0LDIsMCwic3BhbiIsMjYpKDEwLEg4dCwxLDAsImNsci1pY29uIiwyNykoMTEsajh0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTIsVzh0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTMsWTh0LDQsNiwiY2xyLXRleHRhcmVh''@;'; put 'put ''LWNvbnRhaW5lciIsMjkpKDE0LEc4dCw0LDMsImRpdiIsMjkpKDE1LEs4dCwyLDUsImRpdiIsMjgpLGhlKCkoKSxHdCgxNiwiaHIiLDMwKSx1aSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1MZSgpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09TGUoMik7ZmUoNCksSXIoIiAiLGYua2V5LCIg''@;'; put 'put ''IiksZmUoKSx4ZSgibmdJZiIsTS5pc0NvbFBrKGYua2V5KSksZmUoMiksSXIoIiAiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmEuZGVzYywiICIpLGZlKCkseGUoIm5nU3dpdGNo''@;'; put 'put ''IixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYua2V5KSk/bnVsbDpkLnR5cGUpLGZlKCkseGUoIm5nSWYiLE0uY3VycmVudFJlY29yZExvYWRpbmdzLmluY2x1ZGVzKHYpKSxmZSgpLHhlKCJuZ0lmIixN''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXModikpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxmZSgp''@;'; put 'put ''LHhlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gWDh0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxxOHQsMTcsMTEsIm5nLWNvbnRhaW5lciIsNSksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCJBY3Rpb24iIT09YS5rZXkm''@;'; put 'put ''JiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5rZXkmJiJub0xpbmtPcHRpb24iIT09YS5rZXkpfX1mdW5jdGlvbiBKOHQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLFg4dCwyLDEsIm5nLWNvbnRhaW5lciIsMTkpLFFzKDIsImtleXZhbHVlIiksdWkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKCk7ZmUoKSx4ZSgibmdGb3JPZiIsejgoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIFE4dChjLGwpezEmYyYmKGRlKDAsImNsci1hbGVydCIsNDQpKDEsImNsci1hbGVydC1pdGVtIikoMiwi''@;'; put 'put ''c3BhbiIsNDUpLE9lKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSxoZSgpKCkoKSksMiZjJiYoX2QoInZpc2liaWxpdHkiLExlKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIikseGUoImNsckFsZXJ0Q2xv''@;'; put 'put ''c2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIGU3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNDYpKDEsImJ1dHRvbiIsNDcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vblByZXZpb3VzUmVjb3Jk''@;'; put 'put ''Q2xpY2soKSl9KSxHdCgyLCJjbHItaWNvbiIsNDgpLGhlKCksZGUoMywicCIpLE9lKDQsIiBDdXJyZW50IHJvdzogIiksZGUoNSwic3Ryb25nIiksT2UoNiksaGUoKSgpLGRlKDcsImJ1dHRvbiIsNDcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbk5leHRS''@;'; put 'put ''ZWNvcmRDbGljaygpKX0pLEd0KDgsImNsci1pY29uIiw0OSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksZmUoNSksSXIoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxmZSgp''@;'; put 'put ''LHhlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiB0N3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDUzKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoIm5nVmFsdWUiLGEpLGZlKCksSXIoIiAiLGEs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gbjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1MSksSHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS5jb2xJbmRleDtyZXR1cm4gQ3QoTGUoKS5vblJlY29yZElucHV0Rm9j''@;'; put 'put ''dXMoaCxmKSl9KSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS5jb2wsdj1MZSgpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLEh0KCJvbklucHV0RXZlbnQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLGY9aC5jb2wsdj1oLmNvbEluZGV4O3JldHVybiBDdChMZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoZi5rZXksdikpfSksbXQoMix0N3QsMiwyLCJvcHRpb24iLDUyKSxoZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPUxlKCkuY29sLGg9TGUo''@;'; put 'put ''KTtmZSgpLHBpKCJ2YWx1ZSIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSkseGUoImlucHV0SWQiLGQua2V5KSxmZSgpLHhlKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVs''@;'; put 'put ''bDphLnNvdXJjZSl9fWZ1bmN0aW9uIHI3dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gaTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwic2VsZWN0Iiw1NCksSHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS5jb2xJbmRleDtyZXR1cm4gQ3QoTGUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgp''@;'; put 'put ''LmNvbCx2PUxlKCk7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksbXQoMSxyN3QsMiwyLCJvcHRpb24iLDU1KSxoZSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1MZSgpLmNvbCxoPUxlKCk7cGkoIm5nTW9kZWwi''@;'; put 'put ''LGguY3VycmVudFJlY29yZFtkLmtleV0pLGZlKCkseGUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291cmNlKX19ZnVuY3Rpb24gYTd0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiZtdCgwLG43dCwzLDMsImRpdiIsNTApKDEsaTd0LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixJYyksMiZjKXtjb25zdCBhPWwuY29sLGQ9aGEoMiksaD1MZSgpO3hlKCJuZ0lmIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3Iu''@;'; put 'put ''aGFzRHFSdWxlcyhhLmtleSxZcygyLEQ4dCkpKSgibmdJZkVsc2UiLGQpfX1sZXQgbzd0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEs''@;'; put 'put ''dGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFu''@;'; put 'put ''Z2U9bmV3IEtyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IEtyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IEtyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IEtyLHRoaXMub25SZWNvcmRFZGl0Q29uZmlybT1uZXcgS3IsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IEty''@;'; put 'put ''LHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgS3IsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5l''@;'; put 'put ''d09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57''@;'; put 'put ''aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxNPT57ZihNKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksZj1oP2guZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJl''@;'; put 'put ''bnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09SW9lKCkoYSkuZm9ybWF0KGYpKX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJl''@;'; put 'put ''Y29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJlY29yZERyb3Bkb3duQ2hhbmdlKGEsZCl7dGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZC5lbWl0KHtjb2xOYW1lOmEsY29sOmR9KX1vblJlY29yZElucHV0Rm9jdXMoYSxkKXt0aGlzLm9uUmVjb3JkSW5wdXRG''@;'; put 'put ''b2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpkfSl9cmVjb3JkSW5wdXRQYXN0ZShhKXtzZXRUaW1lb3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJnZXQudmFsdWUucmVwbGFjZSgvXHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVl''@;'; put 'put ''KGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLHY9YS50YXJnZXQudmFsdWU7aC5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAsKCk9PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsdikudGhlbihNPT57Y29uc3QgRD1oLmN1cnJlbnRS''@;'; put 'put ''ZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO00/RD4tMSYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKEQsMSk6RDwwJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNoKGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0''@;'; put 'put ''KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlY29yZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxl''@;'; put 'put ''bWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5zdHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHlsZS5vcGFjaXR5PSIwIixoLnN0eWxlLnpJbmRleD0iNTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCks''@;'; put 'put ''ZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgpLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xp''@;'; put 'put ''cChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3QgZD1bXTthLmhlYWRlclBrcy5mb3JFYWNoKGg9PntsZXQgZj0iQyIsdj0iIjtmb3IobGV0IE09MDtNPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO00rKyl7Y29uc3QgRD1h''@;'; put 'put ''LmNlbGxWYWxpZGF0aW9uW01dO2lmKEQuZGF0YT09PWgpeygibnVtZXJpYyI9PT1ELnR5cGV8fCJkYXRlIj09PUQudHlwZXx8InRpbWUiPT09RC50eXBlKSYmKGY9Ik4iKTticmVha319dj0iQyI9PT1mP2AnJHthLmN1cnJlbnRSZWNvcmRbaF19J2A6YS5jdXJyZW50UmVjb3JkW2hdLnRvU3Ry''@;'; put 'put ''aW5nKCksZC5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmgsT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTp2fSl9KSxkLmxlbmd0aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1''@;'; put 'put ''ZXJ5KGEubGliZHMsZCkudGhlbihoPT57YS5xdWVyeUZpbHRlcj17aWQ6aC5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmgucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgTT1sb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZp''@;'; put 'put ''bHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAoTSksYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVyPSExfSkuY2F0Y2goaD0+e2Euc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtz''@;'; put 'put ''LmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoVWgpLEdlKEd1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNv''@;'; put 'put ''cmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQ''@;'; put 'put ''a3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNv''@;'; put 'put ''cmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5n''@;'; put 'put ''ZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3Vz''@;'; put 'put ''UmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siYXV0b2NvbXBsZXRlIiwiIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbIm90aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIiXSxbImlkIiwicmVjb3JkTW9kYWxSZWYiLDEsInJlY29yZC1lZGl0LW1vZGFsIiwicG9zaXRpb24tcmVsYXRp''@;'; put 'put ''dmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBweS0xMCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJwLTAiLCJjbHItZ2FwLTUiLCJjbHItZ2FwLW1kLTAiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbImNsYXNzIiwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJ2aXNpYmlsaXR5IiwiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFs''@;'; put 'put ''ZXJ0VHlwZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmV2LW5leHQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwibXItNWkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3Vz''@;'; put 'put ''YWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJwb3NpdGlvbi1hYnNvbHV0ZSBnZW5lcmF0ZS1yZWNvcmQtdXJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBidG4tbGluayBnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiBwb3NpdGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJs''@;'; put 'put ''ZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImdlbmVyYXRlLXJlY29yZC11cmwiXSxbMSwiYnRuIiwiYnRuLWxpbmsiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJ3LTEwMCIsInB5LTEwIl0sWzEsInNwaW5uZXIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNvbHVtbi1lbnRyeSIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4''@;'; put 'put ''LW1kLXJvdyJdLFsxLCJuYW1lLWlucHV0LXJvdyJdLFsxLCJmb250LXdlaWdodC1ib2xkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsxLCJjZWxsLWRlc2MiXSxbMSwiaW5wdXRzLXdyYXBwZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwic3Bpbm5l''@;'; put 'put ''ciBzcGlubmVyLWlubGluZSBmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLCJzaGFwZSIsImVycm9yLXN0YW5k''@;'; put 'put ''YXJkIiwic3RhdHVzIiwid2FybmluZyIsNCwibmdJZiJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZGF0ZS1maWVsZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm10LTEwIl0sWyJzaGFwZSIsImtleSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJmbGV4LXVuc2V0Iiwi''@;'; put 'put ''cG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDEsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJjbGFzcyIsIm51''@;'; put 'put ''bWVyaWMtaW5wdXQiLDMsImludmFsaWQtZGF0YSIsNCwibmdJZiJdLFsxLCJudW1lcmljLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJ0ZXh0IiwxLCJub3QtY2hhciIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFs0LCJuZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJyb3dzIiwibmdNb2RlbCIsIm1heExlbmd0aCJdLFsxLCJkYXRlLWZpZWxkIl0sWyJjbHJUZXh0YXJlYSIs''@;'; put 'put ''IiIsMywicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJyb3dzIiwibmdNb2RlbCJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiMSIsImNvbHMiLCJhdXRvIiwxLCJub3QtY2hhciIsMywicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImRhdGUt''@;'; put 'put ''cGlja2VyIl0sWyJ0eXBlIiwiZGF0ZSIsIm5hbWUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMSwiZC1ub25lIiwzLCJjbHJEYXRlQ2hhbmdlIl0sWzEsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSJdLFsxLCJhbGVydC10ZXh0Il0sWzEs''@;'; put 'put ''InByZXYtbmV4dCJdLFsidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUgbGVmdCIsInNpemUiLCIyMyJdLFsic2hhcGUiLCJhbmdsZSByaWdodCIsInNpemUi''@;'; put 'put ''LCIyMyJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMywiZm9jdXNpbiIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwidmFsdWUiLCJpbnB1dElkIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl0sWyJjbHJTZWxlY3QiLCIiLDMsImZvY3VzaW4i''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiY2xyLW1vZGFsIiwzKSgxLCJoMyIsNCksT2UoMiksbXQoMyxMOHQsMywy''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDUpLGhlKCksZGUoNCwiZGl2Iiw2KSxtdCg1LE84dCwzLDAsImRpdiIsNykoNixKOHQsMyw1LCJuZy1jb250YWluZXIiLDUpLGhlKCksZGUoNywiZGl2Iiw4KSxtdCg4LFE4dCw0LDQsImNsci1hbGVydCIsOSkoOSxlN3QsOSwzLCJkaXYiLDEwKSxkZSgxMCwiZGl2''@;'; put 'put ''IikoMTEsImJ1dHRvbiIsMTEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMSxDdChoLmNsb3NlUmVjb3JkRWRpdCgpKX0pLE9lKDEyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsMTIpLEh0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb25maXJtUmVjb3JkRWRpdCgpKX0pLE9lKDE0LCIgQ29uZmlybSAiKSxoZSgpKCkoKSxtdCgxNSxhN3QsMywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSxoZSgpfTImZCYmKHhlKCJjbHJNb2RhbE9wZW4iLCEwKSgiY2xyTW9kYWxDbG9z''@;'; put 'put ''YWJsZSIsITEpLGZlKDIpLFZmKCIgIiwiQUREIj09PWgucmVjb3JkQWN0aW9uPyJBZGQiOiJFZGl0IiwiIHJlY29yZCBpbiAiLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMF0sIi4iLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0sIiAiKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIiwiRURJVCI9PT1oLnJlY29yZEFjdGlvbiksZmUoMikseGUoIm5nSWYiLGguYWRkUmVjb3JkTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWguYWRkUmVjb3JkTG9hZGluZyksZmUoMikseGUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSksZmUoNCkseGUoImRpc2FibGVkIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W25zLGJhLE4xLFMyLGNwLEEyLGsyLHFsLFQyLG5sLEdzLFh4LFlkZSxK''@;'; put 'put ''eCxIbCxvdSxLdSxqTCxXeCxKTCxzRyxaMSxHTCx4NyxRTCx3ZGUsRDZlLF9SXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHM3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLElyKCIg''@;'; put 'put ''IixhLCIgIil9fWxldCBsN3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGVzTGlzdD1bXSx0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXSx0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdGhpcy5taW5EZWxheT0xZTN9bmdPbkluaXQoKXt9YXBwZW5kU3RhdGUoYSl7aWYoIntm''@;'; put 'put ''aW5pc2h9Ij09PWEpcmV0dXJuIHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx2b2lkIGNsZWFySW50ZXJ2YWwodGhpcy5zdGF0ZUludGVydmFsKTt0aGlzLnN0YXRlc0xpc3QucHVzaChhKSx0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKGEpfXJlcGxhY2VMYXN0U3RhdGUoYSl7dGhpcy5zdGF0''@;'; put 'put ''ZXNMaXN0Lmxlbmd0aD4wPyh0aGlzLnN0YXRlc0xpc3QucG9wKCksdGhpcy5zdGF0ZXNMaXN0LnB1c2goYSkpOnRoaXMucHJvY2Vzc2VkU3RhdGVzW3RoaXMucHJvY2Vzc2VkU3RhdGVzLmxlbmd0aC0xXT1hfWNsZWFyU3RhdGVzKCl7dGhpcy5wcm9jZXNzZWRTdGF0ZXM9W119c3RhcnRTdGF0''@;'; put 'put ''ZXIoKXt0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITAsdGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIiksdGhpcy5zdGF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zdGF0ZXNMaXN0Lmxl''@;'; put 'put ''bmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIil9LHRoaXMubWluRGVsYXkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0sZGVjbHM6NSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibS0wIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJ2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiXSxbMSwi''@;'; put 'put ''bS0wIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiksbXQoMSxzN3QsMiwxLCJwIiwwKSxoZSgpLGRlKDIsImRpdiIsMSkoMywic3BhbiIsMiksT2UoNCwiTG9hZGluZy4uLiIpLGhlKCkoKSksMiZkJiYoZmUoKSx4ZSgibmdGb3JPZiIsaC5wcm9jZXNzZWRTdGF0''@;'; put 'put ''ZXMpKX0sZGVwZW5kZW5jaWVzOltuc10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxjN3Q9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIGEucmVwbGFjZSgvXHwvZywiIHwgIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InBrU3BhY2VTZXBhcmF0ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLEY2ZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoYS50b1N0cmluZygpLGQpfWFkZFNl''@;'; put 'put ''cGFyYXRvcnMoYSxkPSIgIil7Y29uc3QgaD0oYSs9IiIpLnNwbGl0KCIuIik7bGV0IGY9aFswXTtjb25zdCB2PWgubGVuZ3RoPjE/Ii4iK2hbMV06IiIsTT0vKFxkKykoXGR7M30pLztmb3IoO00udGVzdChmKTspZj1mLnJlcGxhY2UoTSwiJDEiK2QrIiQyIik7cmV0dXJuIGYrdn1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToidGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCB1N3Q9WyJodCJdLGQ3dD1bInVwbG9hZFN0YXRlciJd''@;'; put 'put ''LGg3dD1bInF1ZXJ5RmlsdGVyIl0sZjd0PVsiaG90SW5zdGFuY2UiXSxwN3Q9WyJmaWxlVXBsb2FkSW5wdXQiXSxnN3Q9KGMsbCk9Pih7bGliTmFtZTpjLHRhYmxlTmFtZTpsfSksSDZlPSgpPT5bIiIsIiAiXSxtN3Q9Yz0+KHtoZWFkZXJCYXJGaWx0ZXI6Y30pLHY3dD0oKT0+WyIvaG9tZSJd''@;'; put 'put ''O2Z1bmN0aW9uIGI3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjQpKDEsInNwYW4iLDY1KSgyLCJsYWJlbCIsNjYpLE9lKDMsIiBCcm93c2UgIiksaGUoKSgpLGRlKDQsImlucHV0Iiw2NywzKSxIdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3Qo''@;'; put 'put ''TGUoKS5hdHRhY2hGaWxlKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSx4ZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlvbiB5N3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY4KSgxLCJidXR0b24iLDY5KSxIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudXBsb2FkUGFyc2VkRmlsZXMoKSl9KSxPZSgyLCIgVXBsb2FkICIpLGhlKCkoKX0yJmMmJihmZSgpLHhlKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBfN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcwKSxI''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE9lKDEsIiBDbG9zZSAiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3hlKCJkaXNhYmxlZCIsYS5leGNlbEZpbGVQYXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlv''@;'; put 'put ''biB3N3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE9lKDEsIiBTa2lwICIpLGhlKCl9fWZ1bmN0aW9uIEM3dChjLGwpezEmYyYmKGRlKDAs''@;'; put 'put ''ImRpdiIsNzIpLEd0KDEsImFwcC11cGxvYWQtc3RhdGVyIixudWxsLDQpLGhlKCkpfWZ1bmN0aW9uIFM3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1lZGl0LXJlY29yZCIsNzMpLEh0KCJvblJlY29yZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo''@;'; put 'put ''KS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0Rm9jdXNlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgpKX0pKCJvblJlY29yZEVkaXRDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbG9zZVJl''@;'; put 'put ''Y29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblByZXZpb3VzUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uUHJldmlvdXNSZWNvcmQoKSl9KSxoZSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1MZSgpO3hlKCJjdXJyZW50UmVjb3JkIixhLmN1cnJlbnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIixhLnJlY29yZEFjdGlvbikoImxpYmRzIixhLmxpYmRzKSgicXVlcnlGaWx0ZXIiLGEucXVlcnlGaWx0ZXIpKCJmaWx0ZXIiLGEuZmlsdGVyKSgic3VibWl0TG9hZGluZyIs''@;'; put 'put ''YS5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIixhLmhlYWRlclBrcykoImNlbGxWYWxpZGF0aW9uIixhLmNlbGxWYWxpZGF0aW9uKSgiY3VycmVudFJlY29yZEluZGV4IixhLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGEuY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIixhLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yKX19ZnVuY3Rpb24gTTd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NCksR3QoMSwicHJv''@;'; put 'put ''Z3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiB4N3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDc1KSgxLCJzcGFuIiw3NiksR3QoMiwiY2xyLWljb24iLDc3KSxkZSgzLCJzcGFuIiw3OCksT2UoNCwiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24iKSxoZSgpKCksZGUoNSwic3Bh''@;'; put 'put ''biIsNzkpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS52aWV3Ym94TWFuYWdlcigpKX0pLEd0KDYsImNsci1pY29uIiw4MCksZGUoNywic3BhbiIsNzgpLE9lKDgsIlZpZXdib3hlcyIpLGhlKCkoKSgpfTImYyYmKGZlKCkseGUoInJvdXRlckxpbmsiLFlzKDEs''@;'; put 'put ''djd0KSkpfWZ1bmN0aW9uIEU3dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDg2KX1mdW5jdGlvbiBUN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksSXIoIiAiLGEuZHNOb3RlLCIgIil9''@;'; put 'put ''fWZ1bmN0aW9uIEE3dChjLGwpezEmYyYmKGNpKDApLG10KDEsVDd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLHVpKCkpfWZ1bmN0aW9uIGs3dChjLGwpe2lmKDEmYyYmKGNpKDApLE9lKDEpLFFzKDIsInRob3VzYW5kU2VwYXJhdG9yIiksdWkoKSksMiZjKXtjb25zdCBhPUxlKDMp''@;'; put 'put ''O2ZlKCksJEkoIiAoIix6OCgyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixhLmNvbHMubGVuZ3RoLCIiLDE9PT1hLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBEN3QoYyxs''@;'; put 'put ''KXsxJmMmJihjaSgwKSxPZSgxLCIgKDAgcm93cykgIiksdWkoKSl9ZnVuY3Rpb24gSTd0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxrN3QsMyw3LCJuZy1jb250YWluZXIiLDM5KSgyLEQ3dCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIiwhYS56ZXJvRmlsdGVyUm93cyksZmUoKSx4ZSgibmdJZiIsYS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIFI3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImg0Iiw4MSkoMSwiY2xyLXRvb2x0aXAiKSgyLCJjbHItaWNvbiIsODIpLEh0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLG10KDMsRTd0LDEsMCwiY2xyLWljb24iLDgzKSxkZSg0LCJzcGFuIiw4NCksT2UoNSksZGUoNiwiYSIsODUpLE9lKDcpLGhlKCkoKSxtdCg4LEE3dCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCksbXQo''@;'; put 'put ''OSxJN3QsMywyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9TGUoKTtmZSgzKSx4ZSgibmdJZiIsYS50YWJsZU5hbWUuaW5jbHVkZXMoIi1GQyIpKSxmZSgyKSxJcigiICIsYS5saWJOYW1lLCIuIiksZmUoKSx4ZSgicm91dGVyTGluayIsIi92aWV3''@;'; put 'put ''L2RhdGEvIitkLmxpYmRzKSxmZSgpLENyKGEudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxmZSgpLHhlKCJuZ0lmIixkLmRzTm90ZSYmZC5kc05vdGUubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGQuZGF0YVNvdXJjZSl9fWZ1bmN0aW9uIEw3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImJ1dHRvbiIsOTUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykub25TaG93VXBsb2FkTW9kYWwoKSl9KSxHdCgxLCJjbHItaWNvbiIsOTYpLGRlKDIsInNwYW4iLDc4KSxPZSgzLCJVcGxvYWQiKSxoZSgpKCl9fWZ1bmN0aW9uIE83dChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImJ1dHRvbiIsOTApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub3BlblFiKCkpfSksR3QoMiwiY2xyLWljb24iLDkxKSxkZSgzLCJzcGFuIiw3OCksT2UoNCwiRmlsdGVyIiksaGUoKSgpLGRlKDUs''@;'; put 'put ''ImJ1dHRvbiIsOTIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZWRpdFRhYmxlKCkpfSksR3QoNiwiY2xyLWljb24iLDkzKSxkZSg3LCJzcGFuIiw3OCksT2UoOCwiRWRpdCIpLGhlKCkoKSxtdCg5LEw3dCw0LDAsImJ1dHRvbiIsOTQpLHVpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPUxlKDIpO2ZlKDkpLHhlKCJuZ0lmIiwhYS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIFA3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoKSx6dSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gRjd0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLG10KDEsUDd0LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLHhlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIEg3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2NpKDApLGRlKDEsImJ1dHRvbiIsOTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuY2FuY2VsRWRpdCgpKX0pLEd0KDIsImNsci1pY29uIiw5OCksZGUoMywic3BhbiIpLE9lKDQsIkNhbmNlbCIpLGhlKCkoKSxkZSg1LCJjbHItdG9vbHRpcCIpKDYs''@;'; put 'put ''ImJ1dHRvbiIsOTkpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJvdygpKX0pLEd0KDcsImNsci1pY29uIiwxMDApLE9lKDgsIkFkZCBSb3cgIiksaGUoKSxtdCg5LEY3dCwy''@;'; put 'put ''LDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxoZSgpLGRlKDEwLCJidXR0b24iLDQ0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNoZWNrU2F2ZSgpKX0pLEd0KDExLCJjbHItaWNvbiIsMTAxKSxPZSgxMiwiU3VibWl0ICIpLGhlKCksdWkoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoMik7ZmUoNiksVHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdykseGUoImNsckxvYWRpbmciLGEuYWRkaW5nTmV3Um93KX19ZnVuY3Rpb24gTjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwx''@;'; put 'put ''MDUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxHdCgxLCJjbHItaWNvbiIsOTMpLGRlKDIsInNwYW4iKSxPZSgzLCJFZGl0IiksaGUoKSgpfX1mdW5jdGlvbiBWN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o''@;'; put 'put ''KTtjaSgwKSxkZSgxLCJidXR0b24iLDEwMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kaXNjYXJkU291cmNlRmlsZT0hMCl9KSxHdCgyLCJjbHItaWNvbiIsOTgpLGRlKDMsInNwYW4iKSxPZSg0LCJEaXNjYXJkIGZpbGUiKSxoZSgpKCksbXQoNSxON3Qs''@;'; put 'put ''NCwwLCJidXR0b24iLDEwMyksZGUoNiwiYnV0dG9uIiwxMDQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuc3VibWl0RXhjZWwoKSl9KSxHdCg3LCJjbHItaWNvbiIsMTAxKSxPZSg4LCIgU3VibWl0ICIpLGhlKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9TGUo''@;'; put 'put ''Mik7ZmUoNSkseGUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkpLGZlKCkseGUoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIEI3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODkpLG10KDEsTzd0LDEwLDEsIm5nLWNvbnRhaW5lciIsMzkpKDIsSDd0LDEzLDMs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsMzkpKDMsVjd0LDksMiwibmctY29udGFpbmVyIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksZmUoKSx4ZSgibmdJZiIsIWEuaG90VGFibGUucmVhZE9ubHkmJiFh''@;'; put 'put ''LnVwbG9hZFByZXZpZXcpLGZlKCkseGUoIm5nSWYiLGEudXBsb2FkUHJldmlldyl9fWZ1bmN0aW9uIGo3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA2KSgxLCJzcGFuIiksT2UoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLE9lKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtm''@;'; put 'put ''ZSg0KSxDcihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIHo3dChjLGwpezEmYyYmKGNpKDApLGRlKDEsInNwYW4iLDEwOSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxPZSg1LCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpLHVpKCkpfWZ1bmN0aW9u''@;'; put 'put ''IFU3dChjLGwpezEmYyYmKGNpKDApLGRlKDEsInNwYW4iKSxHdCgyLCJjbHItaWNvbiIsMTEyKSxoZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLE9lKDUsIkxvYWRpbmcgdGFibGUgZXJyb3IiKSxoZSgpKCksdWkoKSl9ZnVuY3Rpb24gWjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2''@;'; put 'put ''IiwxMDcpKDEsImRpdiIsMTA4KSxtdCgyLHo3dCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpKDMsVTd0LDYsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSx4ZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLmdldGRhdGFF''@;'; put 'put ''cnJvcil9fWZ1bmN0aW9uIFc3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx6dSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gWTd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE1KSxtdCgxLFc3dCwyLDIsInNwYW4i''@;'; put 'put ''LDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBHN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTEzKSxIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1dHRvbkNsaWNrKCkpfSksR3QoMiwiY2xyLWljb24iLDEwMCksT2UoMywiIEFkZCBSZWNvcmQgIiksaGUoKSxtdCg0LFk3dCwyLDEsImNsci10''@;'; put 'put ''b29sdGlwLWNvbnRlbnQiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiAkN3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxMTYpLE9lKDEpLEd0KDIsImNvbnRh''@;'; put 'put ''Y3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksSXIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBLN3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFu''@;'; put 'put ''IiwxMjgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHp1KCJPbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD8icm93Ijoicm93cyIsIiB3aWxsIGJlIHN1''@;'; put 'put ''Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHE3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI5KSgxLCJkaXYiLDEzMCkoMiwibGFiZWwiLDEzMSksT2UoMywiTWVz''@;'; put 'put ''c2FnZSIpLGhlKCksZGUoNCwidGV4dGFyZWEiLDEzMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIG1pKGYubWVzc2FnZSxoKXx8KGYubWVzc2FnZT1oKSxDdChoKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg0''@;'; put 'put ''KSxwaSgibmdNb2RlbCIsYS5tZXNzYWdlKSx4ZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGEudmFsaWRhdGlvbkRvbmU/IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHZhbGlkYXRlICIrYS5jb2xzLmxlbmd0aCphLm1vZGlmZWRSb3dzSW5kZXhlcy5sZW5ndGgrIiBj''@;'; put 'put ''ZWxscy4iKX19ZnVuY3Rpb24gWDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMTcpKDEsImRpdiIsMTE4KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIxKSxHdCg1LCJjbHItaWNvbiIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxPZSg3KSxo''@;'; put 'put ''ZSgpKCksZGUoOCwiZGl2Iiw5KSxtdCg5LEs3dCwyLDIsInNwYW4iLDEyMykoMTAscTd0LDUsMywiZGl2IiwxMjQpLGhlKCksZGUoMTEsImRpdiIsMTI1KSgxMiwiYnV0dG9uIiwxMjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguc2F2ZVRh''@;'; put 'put ''YmxlKGguaG90VGFibGUuZGF0YSkpfSksT2UoMTMsIiBTdWJtaXQgIiksaGUoKSxkZSgxNCwiYnV0dG9uIiwxMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIGguY2FuY2VsU3VibWl0KCksaC5zdWJtaXQ9ITEsQ3QoaC52YWxpZGF0aW9uRG9uZT0w''@;'; put 'put ''KX0pLE9lKDE1LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg3KSxWZigiIFN1Ym1pdCBmb3IgQXBwcm92YWwgKCIsYS5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIixh''@;'; put 'put ''LnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksZmUoMikseGUoIm5nSWYiLGEudG90YWxSb3dzQ2hhbmdlZD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCYmYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1hLkluZmluaXR5''@;'; put 'put ''KSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVHJ1ZSksZmUoMikseGUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIEo3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzMyksT2UoMSksUXMoMiwicGtTcGFjZVNlcGFyYXRlIiksaGUoKSksMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0LGQ9TGUoKTtmZSgpLHp1KCIgT24gcm93ICIsYSsxLCI6ICIsRGMoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwiICIpfX1mdW5jdGlvbiBRN3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2Zl''@;'; put 'put ''KCksVmYoIiAiLGEuY29sLCIoIixhLmxlbiwiKSwgIixhLnZhbCwiICIpfX1mdW5jdGlvbiBlOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEzNCkoMSwiZGl2IiwxMzUpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLEd0KDUsImNsci1p''@;'; put 'put ''Y29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLE9lKDcsIkVycm9yIiksaGUoKSgpLGRlKDgsImRpdiIsOSkoOSwicCIpLE9lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDIzKSgxMiwiYnV0dG9uIiw0NCksSHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksT2UoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIHQ5dChjLGwpezEmYyYmR3QoMCwiYXBwLXF1ZXJ5IixudWxsLDUpfWZ1bmN0aW9uIG45dChjLGwpezEmYyYmKGRlKDAsInAiLDEzNiksT2Uo''@;'; put 'put ''MSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIiksaGUoKSl9bGV0IGlOPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuY250PTB9c3RhdGlje3RoaXMubm9uUGtDbnQ9MH1zdGF0aWN7dGhpcy5sYXN0Q2VsbD0wfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxj''@;'; put 'put ''ZSxiZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMucm91dGU9RCx0aGlzLnNhc1NlcnZpY2U9Wix0aGlzLmNk''@;'; put 'put ''Zj1yZSx0aGlzLmhvdFJlZ2lzdGVyZXI9Y2UsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9YmUsdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdD1uZXcgZmQsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBmZCx0aGlzLmhvdEluc3RhbmNlQ29tcExpc3Q9bmV3IGZkLHRoaXMuZmlsZVVwbG9h''@;'; put 'put ''ZElucHV0Q29tcExpc3Q9bmV3IGZkLHRoaXMubWVzc2FnZT0iIix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuY29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5kc05vdGU9IiIsdGhp''@;'; put 'put ''cy52aWV3Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhpZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWluU3BhcmVSb3dzOjEsbGljZW5zZUtleTp2b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5''@;'; put 'put ''Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3QgcWU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIXFlKXJldHVybiExO2NvbnN0IHJ0''@;'; put 'put ''PXFlWzBdO3JldHVybiBydC5mcm9tLnJvdyE9PXJ0LnRvLnJvd30sY2FsbGJhY2s6KEJlLHFlLHJ0KT0+e2NvbnN0IHB0PXFlWzBdO3B0LnN0YXJ0LnJvdz09PXB0LmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLHB0LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBS''@;'; put 'put ''b3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifSxyZW1vdmVfcm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhlYWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0s''@;'; put 'put ''Y29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1''@;'; put 'put ''Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhp''@;'; put 'put ''cy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVs''@;'; put 'put ''bD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRoaXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1b''@;'; put 'put ''XSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0hMSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IExlZSx0aGlzLnVwbG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlz''@;'; put 'put ''LmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5kYXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRoaXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVP''@;'; put 'put ''dmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFkZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9''@;'; put 'put ''W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgV24sdGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxv''@;'; put 'put ''YWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVkaXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVu''@;'; put 'put ''dEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVEcmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxl''@;'; put 'put ''TGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBFOjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxW''@;'; put 'put ''YWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19WQUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50''@;'; put 'put ''aW1lc0NsaWNrZWQ9MCx6ZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJiRtLnJlZ2lzdGVyTGFuZ3VhZ2UoemVlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0aGlzLmhvdFJlZ2lzdGVyZXI9bmV3IFltLHRoaXMucGFyc2VSZXN0cmljdGlvbnMoKSx0aGlzLnNldFJlc3RyaWN0''@;'; put 'put ''aW9ucygpfXBhcnNlUmVzdHJpY3Rpb25zKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFs''@;'; put 'put ''dWUuZWRpdFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkfXNldFJlc3RyaWN0aW9ucyhhKXthJiYodGhpcy5yZXN0cmljdGlvbnM9ey4uLnRoaXMucmVzdHJpY3Rpb25zLC4uLmF9KSx0aGlz''@;'; put 'put ''LnJlc3RyaWN0aW9ucy5yZW1vdmVFZGl0UmVjb3JkQnV0dG9uJiZkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5lZGl0X3Jvdyx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyYmKGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8u''@;'; put 'put ''Y29udGV4dE1lbnUpLml0ZW1zLnJvd19hYm92ZSxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYmVsb3csZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucmVtb3ZlX3Jvdyl9Y2hlY2tSb3dMaW1p''@;'; put 'put ''dCgpe3RoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWd8fHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT0xLzAmJih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz10aGlzLmRhdGFTb3VyY2U/Lmxlbmd0aD49dGhpcy5saWNlbmNlU3RhdGUudmFs''@;'; put 'put ''dWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxl''@;'; put 'put ''VXBsb2FkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRmlsZSBVcGxvYWQiKTp0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkluZm9ybWF0aW9uIiwiVXBsb2FkIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hp''@;'; put 'put ''bGUgQ29sdW1uIExldmVsIFNlY3VyaXR5IHJ1bGVzIGFyZSBhY3RpdmUiKTp0aGlzLnVwbG9hZFByZXZpZXd8fCh0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCl9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfWF0dGFjaEZpbGUoYSxkPSExKXt2YXIgaD10aGlzO2Nv''@;'; put 'put ''bnN0IGY9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iTG9hZGluZyIsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSEwLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy5maWxlbmFtZT1mLm5hbWUsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNl''@;'; put 'put ''bEZpbGUoe2ZpbGU6Zix1cGxvYWRlcjp0aGlzLnVwbG9hZGVyLGRjVmFsaWRhdG9yOnRoaXMuZGNWYWxpZGF0b3IsaGVhZGVyUGtzOnRoaXMuaGVhZGVyUGtzLGhlYWRlckFycmF5OnRoaXMuaGVhZGVyQXJyYXksaGVhZGVyU2hvdzp0aGlzLmhlYWRlclNob3csdGltZUhlYWRlcnM6dGhpcy50''@;'; put 'put ''aW1lSGVhZGVycyxkYXRlSGVhZGVyczp0aGlzLmRhdGVIZWFkZXJzLGRhdGVUaW1lSGVhZGVyczp0aGlzLmRhdGVUaW1lSGVhZGVycyx4bFJ1bGVzOnRoaXMueGxSdWxlcyxlbmNvZGluZzp0aGlzLmVuY29kaW5nfSx2PT57dGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSh2KX0sdj0+e3RoaXMuZXZl''@;'; put 'put ''bnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlRhYmxlIEZvdW5kIix2KX0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgdj1lZShmdW5jdGlvbiooTSl7TSYmKGguZXhjZWxGaWxlUmVhZHk9ITAsaC51cGxvYWRlcj1NLnVwbG9hZGVyLE0uZGF0YSYmTS5oZWFkZXJTaG93PyhoLmRhdGE9TS5kYXRhLGgu''@;'; put 'put ''aGVhZGVyU2hvdz1NLmhlYWRlclNob3csaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCkpOnlpZWxkIGgudXBsb2FkUGFyc2VkRmlsZXMoKSl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2godj0+e3RoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LnNob3dBYm9ydE1vZGFsKG51bGwsdixudWxsKSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsZW5hbWU9IiJ9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITF9KX1zdWJtaXRFeGNlbCgp''@;'; put 'put ''e3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMudXBsb2FkUGFyc2VkRmlsZXMoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXVwbG9hZFBhcnNlZEZpbGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5jaGVja0lu''@;'; put 'put ''dmFsaWQoKSlyZXR1cm4gdm9pZCBhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZhbHVlcyBhcmUgcHJlc2VudC4iKTtpZihhLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09YS5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiBhLnBrRHVwcz0hMCx2''@;'; put 'put ''b2lkKGEuc3VibWl0PSExKTthLnBrRHVwcz0hMSxhLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgZD1bXTtmb3IoY29uc3QgaCBvZiBhLnVwbG9hZGVyLnF1ZXVlKWQucHVzaCh7ZmlsZTpoLGZpbGVOYW1lOmgubmFtZX0pO3lpZWxkIGEuc2FzU2VydmljZS51cGxvYWRGaWxlKGEudXBsb2FkVXJs''@;'; put 'put ''LGQse3RhYmxlOmEubGliZHN9KS50aGVuKGg9PntpZih0eXBlb2YgaC5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydD4idSIpe2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXM+InUiKXJldHVybjt7YS51cGxvYWRMb2FkaW5nPSExO2NvbnN0IGY9aC5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2Uuc2FzcGFyYW1zWzBdO2Euc3VjY2Vzc0VuYWJsZT0hMCxhLnRhYmxlSWQ9Zi5EU0lELGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EudGFibGVJZCl9fWVsc2V7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZSx2PWYuc2FzanNBYm9ydFswXS5NU0csTT1mLnNhc2pzQWJvcnRb''@;'; put 'put ''MF0uTUFDO2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVuYW1lPSIiLGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJihhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLGEudXBsb2FkZXIucXVldWU9W10sYS5ldmVudFNlcnZpY2Uu''@;'; put 'put ''c2hvd0Fib3J0TW9kYWwoIiIsdix7U1lTV0FSTklOR1RFWFQ6Zi5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6Zi5TWVNFUlJPUlRFWFQsTUFDOk19KX19LGg9PnthLnVwbG9hZExvYWRpbmc9ITEsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0''@;'; put 'put ''Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixoLmFkYXB0ZXJSZXNwb25zZSl9KX0pKCl9Z2V0UGVuZGluZ0V4Y2VsUHJldmlldygpe3RoaXMucXVl''@;'; put 'put ''cnlUZXh0U2F2ZWQ9dGhpcy5xdWVyeVRleHQsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5leGNlbFVwbG9hZFN0YXRlPSJQYXJzaW5nIix0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKTtjb25zdCBhPVtdO3RoaXMuZGF0YS5tYXAoaD0+e2NvbnN0IGY9e307dGhpcy5oZWFk''@;'; put 'put ''ZXJTaG93Lm1hcCgodixNKT0+e2Zbdl09aFtNXX0pLGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwoZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIiksYS5wdXNoKGYpfSksdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVw''@;'; put 'put ''Q2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmhvdFRhYmxlLmRhdGE9YTtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJWYWxpZGF0aW5nLUhPVCIsZC51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2Us''@;'; put 'put ''bWF4Um93czoxLzB9LCExKSxkLnJlbmRlcigpLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoIlZhbGlkYXRpbmcgcm93cyIpLGQudmFsaWRhdGVDZWxscygoKT0+e3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhp''@;'; put 'put ''cy5leGNlbFVwbG9hZFN0YXRlPW51bGx9KX1kaXNjYXJkUGVuZGluZ0V4Y2VsKGEpe3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe21heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZH0pLGEmJnRoaXMuY2FuY2VsRWRpdCgpLHRoaXMuZmls''@;'; put 'put ''ZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkZXIucXVldWU9W10saXNOYU4ocGFy''@;'; put 'put ''c2VJbnQodGhpcy5yb3V0ZXIudXJsLnNwbGl0KCIvIikucG9wKCl8fCIiKSl8fHRoaXMucXVlcnlUZXh0U2F2ZWQubGVuZ3RoPjAmJih0aGlzLnF1ZXJ5VGV4dD10aGlzLnF1ZXJ5VGV4dFNhdmVkLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIpfXByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl7dGhp''@;'; put 'put ''cy5kaXNjYXJkUGVuZGluZ0V4Y2VsKCksdGhpcy5jb252ZXJ0VG9Db3JyZWN0VHlwZXModGhpcy5kYXRhU291cmNlKSx0aGlzLmVkaXRUYWJsZSghMCl9YXBwZW5kVXBsb2FkU3RhdGUoYSxkPSExKXt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5m''@;'; put 'put ''aXJzdCYmKGQ/dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5yZXBsYWNlTGFzdFN0YXRlKGEpOnRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QuYXBwZW5kU3RhdGUoYSkpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9aXNSZWFkb25s''@;'; put 'put ''eUNvbChhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKT8ucmVhZE9ubHl9aXNDb2xIZWFkZXIoYSl7cmV0dXJuIHRoaXMuaGVhZGVyQXJyYXkuaW5kZXhPZihhLnRvVXBwZXJDYXNlKCkpPi0xfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xh''@;'; put 'put ''dXNlKCl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXTtjb25zdCBoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEp''@;'; put 'put ''O3tjb25zdCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybigiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtKSYmKEtuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxLbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PVtd''@;'; put 'put ''LEtuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kyspe2NvbnN0IE09Zlt2XS5lbGVtZW50cztkPU0u''@;'; put 'put ''ZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBudWxsPT09RC52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goTSl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT1hLmNsYXVzZXMmJmEubGliZHMp''@;'; put 'put ''e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChNPT57Y29uc3QgRD17ZmlsdGVyQ2xhdXNlczpbXX07TS5lbGVtZW50cy5mb3JFYWNoKFo9PntELmZpbHRlckNsYXVzZXMucHVzaChhLmhl''@;'; put 'put ''bHBlclNlcnZpY2UuZGVlcENsb25lKFopKX0pLEQuY2xhdXNlTG9naWM9TS5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSk7Y29uc3Qgdj1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxk''@;'; put 'put ''IGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLHYpLnRoZW4oTT0+e2EucXVlcnlGaWx0ZXI9e2lkOk0ucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpNLnJlc3VsdFswXS5GSUxURVJfVEFCTEV9LGEucm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6''@;'; put 'put ''ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+YS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pKSxhLmZpbHRlcj0hMX0p''@;'; put 'put ''LmNhdGNoKE09PnthLnN1Ym1pdExvYWRpbmc9ITF9KX19Y2F0Y2goZil7YS5xdWVyeUVycj0hMCxhLnN1Ym1pdExvYWRpbmc9ITEsYS5xdWVyeUVyck1lc3NhZ2U9Zn19KSgpfW9wZW5RYigpe3RoaXMubGliZHMmJih0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhp''@;'; put 'put ''cy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliZHMsdGhpcy5jb2xzKSl9ZWRpdFRhYmxlKGEsZCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlLGY9aC5n''@;'; put 'put ''ZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLHY9Zi5nZXRTb3J0Q29uZmlnKCksTT1BcnJheS5pc0FycmF5KHYpP3Y6W3ZdO3NldFRpbWVvdXQoKCk9PnthfHwodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNl''@;'; put 'put ''KSxkJiZ0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQucG9wKCkpLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITEsdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSxoLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5fSwhMSksaC5yZW5kZXIoKTtm''@;'; put 'put ''b3IoY29uc3QgRCBvZiBNKWYuc29ydChEKTt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpZm9yKGNvbnN0IGggaW4gZCl7Y29uc3QgZj10aGlzLmNvbHMuZmluZCh2PT52Lk5BTUU9PT1oKTtmJiYi''@;'; put 'put ''IiE9PWRbaF0mJiJudW0iPT09Zi5UWVBFJiYhZi5ERFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikmJihkW2hdPXBhcnNlSW50KGRbaF0pKX19Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2Vs''@;'; put 'put ''bFZhbGlkYXRpb25Tb3VyY2U9W107Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLGQ9YS5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGg9ZC5nZXRTb3J0Q29uZmlnKCksZj1BcnJheS5pc0FycmF5KGgpP2g6W2hdO3RoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCYmKHRoaXMuZGF0YVNv''@;'; put 'put ''dXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMCxhLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJl''@;'; put 'put ''YWRPbmx5LGRhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpO2Zvcihjb25zdCB2IG9mIGYpZC5zb3J0KHYpO3RoaXMuY2hlY2tSb3dMaW1pdCgpfWhvdENsaWNrZWQoKXsxPT09dGhpcy50aW1lc0NsaWNrZWQmJnRoaXMuaG90''@;'; put 'put ''VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCksMD09PXRoaXMudGltZXNDbGlja2VkJiYodGhpcy50aW1lc0NsaWNrZWQrKyxzZXRUaW1lb3V0KCgpPT57dGhpcy50aW1lc0NsaWNrZWQ9MH0sMjAwKSl9Y2xlYW5FeGNlZWQoKXt0aGlzLmV4Y2VlZENlbGxzPVtdfWFwcHJvdmVyc1Rv''@;'; put 'put ''Z2dsZSgpe3RoaXMuc2hvd0FwcHJvdmVycz0hdGhpcy5zaG93QXBwcm92ZXJzfWFkZFJvdygpe3RoaXMuYWRkaW5nTmV3Um93PSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2EuYWx0ZXIoImluc2VydF9yb3dfYmVs''@;'; put 'put ''b3ciLGQsMSksYS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnNlbGVjdENlbGwodGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLDApLGEucmVuZGVyKCksdGhpcy5kYXRhU291cmNlW2RdJiYodGhpcy5kYXRhU291cmNlW2RdLm5vTGlua09wdGlvbj0hMCksdGhp''@;'; put 'put ''cy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9KX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1''@;'; put 'put ''Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24s''@;'; put 'put ''bW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAwOmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9''@;'; put 'put ''Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3RoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGE9MCxk''@;'; put 'put ''PTAsaD0wO3RoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2NvbnN0IHY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pO2lmKCJZZXMiPT09''@;'; put 'put ''di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSxkKys7ZWxzZXtjb25zdCBNPXRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKEQ9Pntmb3IoY29uc3QgWiBvZiB0aGlzLmhlYWRlclBrcylpZihEW1pdIT09dltaXSlyZXR1cm4hMTty''@;'; put 'put ''ZXR1cm4hMH0pO00/SlNPTi5zdHJpbmdpZnkodikhPT1KU09OLnN0cmluZ2lmeShNKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVz''@;'; put 'put ''LnB1c2goZiksaCsrKX19dGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRlZDpkLHJvd3NBZGRlZDpofX12YWxpZGF0ZVByaW1hcnlLZXlzKCl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLGQ9YS5nZXREYXRhKCk7dGhpcy5wa0ZpZWxkcz1bXTtmb3IobGV0IE09MDtN''@;'; put 'put ''PGQubGVuZ3RoO00rKyl7bGV0IEQ9IiI7Zm9yKGxldCBaPTE7Wjx0aGlzLnJlYWRPbmx5RmllbGRzKzE7WisrKUQ9RCsifCIrZFtNXVtaXTt0aGlzLnBrRmllbGRzLnB1c2goRCl9Y29uc3QgaD1bXSxmPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7Zm9yKGxldCBNPTA7TTx0aGlzLnBrRmllbGRz''@;'; put 'put ''Lmxlbmd0aDtNKyspZm9yKGxldCBEPTA7RDx0aGlzLnBrRmllbGRzLmxlbmd0aDtEKyspdGhpcy5wa0ZpZWxkc1tNXT09PXRoaXMucGtGaWVsZHNbRF0mJkQhPT1NJiZoLnB1c2goRCk7aWYodGhpcy5wa0ZpZWxkcy5sZW5ndGg+Zilmb3IobGV0IE09ZjtNPHRoaXMucGtGaWVsZHMubGVuZ3Ro''@;'; put 'put ''O00rKylmb3IobGV0IEQ9ZjtEPHRoaXMucGtGaWVsZHMubGVuZ3RoO0QrKylNPEQmJnRoaXMucGtGaWVsZHNbTV09PT10aGlzLnBrRmllbGRzW0RdJiZoLnB1c2goRCk7bGV0IHY7Zm9yKGxldCBNPTA7TTxoLmxlbmd0aDtNKyspZm9yKGxldCBEPTE7RDx0aGlzLnJlYWRPbmx5RmllbGRzKzE7''@;'; put 'put ''RCsrKXY9YS5nZXRDZWxsTWV0YShoW01dLEQpLHYudmFsaWQ9ITEsdi5kdXBLZXk9ITAsYS5yZW5kZXIoKTt0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bLi4ubmV3IFNldChoLnNvcnQoKSldfXJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoYT0hMSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFu''@;'; put 'put ''Y2U7Zm9yKGNvbnN0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3Qgdj1mLnZhbHVlcy5tYXAoTT0+TVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2guYmF0Y2goKCk9Pntjb25zdCBNPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLEQ9dGhpcy5k''@;'; put 'put ''Y1ZhbGlkYXRvcj8uZ2V0UnVsZShNLmRhdGF8fCIiKTtsZXQgWjtEJiYoWj10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKEQpKSxafHwoWj1bXSk7Y29uc3QgcmU9Wy4uLm5ldyBTZXQoWy4uLlosLi4udl0pXTt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51''@;'; put 'put ''cGRhdGVSdWxlKGYuY29sLHtzb3VyY2U6cmV9KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzb3VyY2UiLHJlKSxmLnZhbHVlcy5sZW5ndGg+MCYmKGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNv''@;'; put 'put ''bCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInN0cmljdCIsZi5zdHJpY3QpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5j''@;'; put 'put ''b2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmYuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhmLHZvaWQgMCxhLGQpLGgucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRl''@;'; put 'put ''ZENlbGxWYWxpZGF0aW9uVmFsdWVzKGEsZCxoPSExLGYpe2lmKGEpe2R8fChkPWEucm93KTtjb25zdCBNPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsTSxoLGYpfWVsc2UgZm9yKGNvbnN0IE0gb2YgdGhpcy5j''@;'; put 'put ''ZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgRD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoTSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoTSxNLnJvdyxELGgsZil9fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsaCxmPSExLHYpe2NvbnN0IE09dGhpcy5o''@;'; put 'put ''b3RJbnN0YW5jZSxEPVtdO2Zvcihjb25zdCBaIG9mIGgpRC5pbmRleE9mKFouRVhUUkFfQ09MX05BTUUpPDAmJkQucHVzaChaLkVYVFJBX0NPTF9OQU1FKTtmb3IoY29uc3QgWiBvZiBEKXtjb25zdCByZT1oLmZpbHRlcihkdD0+ZHQuRVhUUkFfQ09MX05BTUU9PT1aKTtsZXQgY2U9cmUubWFw''@;'; put 'put ''KGR0PT4iQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSk7Y29uc3QgYmU9TS5wcm9wVG9Db2woWik7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZHQ9PmR0LnJvdz09PWQmJmR0LmNvbD09PWJlKXx8''@;'; put 'put ''dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpkLGNvbDpiZSxhY3RpdmU6ITF9KSxNLnNldENlbGxNZXRhKGQsYmUsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksTS5zZXRDZWxsTWV0YShkLGJlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3Vz''@;'; put 'put ''dG9tIiksTS5zZXRDZWxsTWV0YShkLGJlLCJzdHJpY3QiLGEuc3RyaWN0KSxNLnNldENlbGxNZXRhKGQsYmUsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYmUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBs''@;'; put 'put ''ZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IEJlPU0uZ2V0Q2VsbE1ldGEoZCxiZSkscWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZS5kYXRhfHwiIik7bGV0IHJ0O3FlJiYocnQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShx''@;'; put 'put ''ZSkpLHJ0fHwocnQ9W10pLCJudW1lcmljIj09PXFlPy50eXBlPyhydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJudW1iZXIiKSxjZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJudW1iZXIiKSk6KHJ0PXRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsInN0cmluZyIpLGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsInN0cmluZyIpKTtjb25zdCBwdD1bLi4ubmV3IFNldChbLi4ucnQsLi4uY2VdKV07aWYoTS5zZXRDZWxsTWV0YShkLGJlLCJzb3VyY2UiLHB0KSx0''@;'; put 'put ''aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGJlLHtzb3VyY2U6cHR9KSxmKXtpZih2JiZ2IT09ZClyZXR1cm47Y29uc3QgZHQ9cmUuZmluZChKdD0+MT09PUp0LkZPUkNFX0ZMQUcpO2R0JiZzZXRUaW1lb3V0KCgpPT57TS5zZXREYXRhQXRDZWxsKGQsYmUsIkMi''@;'; put 'put ''PT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PWQmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVta''@;'; put 'put ''XT0iQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRoaXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksdj0oYS52YWx1ZXMu''@;'; put 'put ''ZmluZChyZT0+cmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLE09YS5leHRlbmRlZF92YWx1ZXM/LmZpbHRlcihyZT0+cmVbMF09PT12KSxEPXRoaXMuaGVscGVyU2VydmljZS5k''@;'; put 'put ''ZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxaPVtdO2Zvcihjb25zdCByZSBvZiBNfHxbXSl7Y29uc3QgY2U9e307Zm9yKGNvbnN0IGJlIG9mIE9iamVjdC5rZXlzKEQpKWNlW2JlXT1yZVtEW2JlXV07Wi5wdXNoKGNlKX1yZXR1cm4gWn1jaGVja1NhdmUoKXtp''@;'; put 'put ''Zih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5n''@;'; put 'put ''ZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgaD0wO2g8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtoKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtoXS5ub0xpbmtPcHRpb247YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlz''@;'; put 'put ''LmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGgsZil7cmV0dXJuIGg+NTAwPzUwMDpofX0sITEpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLGMuY250PTAsYy5ub25Qa0NudD0wO2NvbnN0IGQ9YS5nZXRE''@;'; put 'put ''YXRhKCk7aWYoZC5sZW5ndGg+MSYmYS5pc0VtcHR5Um93KGQubGVuZ3RoLTEpJiZhLmFsdGVyKCJyZW1vdmVfcm93IixkLmxlbmd0aC0xKSx0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx0''@;'; put 'put ''aGlzLnN1Ym1pdD0hMSx2b2lkIHRoaXMuY2FuY2VsU3VibWl0KCk7dGhpcy5wa0R1cHM9ITEsYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMsKCk9Pnt0aGlzLmNoZWNrSW52YWxpZCgpP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJy''@;'; put 'put ''b3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpOih0aGlzLnN1Ym1pdD0hMCx0aGlzLnZhbGlkYXRpb25Eb25lPTEsc2V0VGltZW91dCgoKT0+e2NvbnN0IGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvcm1GaWVsZHNfOCIpO2gmJmguZm9jdXMoKX0sMjAwKSl9KX1zYXZlVGFi''@;'; put 'put ''bGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoZC5ob3RJbnN0YW5jZS5nZXREYXRhKCksYT0oYT1hLmZpbHRlcih2PT4hIWQuZGF0YU1vZGlmaWVkLmZpbmQoRD0+e2Zvcihjb25zdCBaIG9mIGQuaGVhZGVyUGtzKWlmKERbWl0hPT12W1pdKXJldHVybiExO3JldHVy''@;'; put 'put ''biEwfSkpKS5tYXAodj0+e2NvbnN0IE09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSB2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyx2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1NLE9iamVjdC5rZXlzKHYpLm1hcChEPT57Im51''@;'; put 'put ''bWVyaWMiPT09ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShEKT8udHlwZSYmIi4iPT09dltEXSYmKHZbRF09bnVsbCl9KSx2fSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwo''@;'; put 'put ''IlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQuc2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09PWQuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aCYm''@;'; put 'put ''Yy5ub25Qa0NudDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtjb25zdCB2PXtBQ1RJT046IkxPQUQifTtpZihkLm1lc3NhZ2U9ZC5tZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIiksdi5NRVNTQUdFPWQubWVzc2FnZSx2LkxJQkRTPWQubGliZHMs''@;'; put 'put ''ZC5jb2xzKXtjb25zdCBNPWEuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7aWYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUodixNLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsZC4kZGF0YUZvcm1hdHMpLnRo''@;'; put 'put ''ZW4oWj0+e2lmKHR5cGVvZiBaLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXM8InUiKXJldHVybiBkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitaLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IHJlPSJTdWJtaXQgcmVxdWVzdCBmYWlsZWQiO1omJihy''@;'; put 'put ''ZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIFo/WjpKU09OLnN0cmluZ2lmeShaKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLHJlLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goWj0+e2NvbnNvbGUubG9nKCJlcnIiLFopLGMuY250PTAs''@;'; put 'put ''Yy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMCxkLnN1Ym1pdD0hMTtjb25zdCByZT0ic3RyaW5nIj09dHlwZW9mIFouYWRhcHRlclJlc3Buc2U/Wi5hZGFwdGVyUmVzcG5zZTpKU09OLnN0cmluZ2lmeShaLmFkYXB0ZXJSZXNwbnNlKTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fi''@;'; put 'put ''b3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke3JlfWAsbnVsbCwiU3VibWl0IGVycm9yIiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsYy5ub25Qa0NudD49MT8oZC5ub1BrTnVs''@;'; put 'put ''bD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSl9Y2hlY2tJbnZhbGlkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdC5maXJzdC5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaHRJbnZhbGlkIikubGVuZ3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29yZEVkaXQoYSl7''@;'; put 'put ''dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2Vydmlj''@;'; put 'put ''ZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVkaXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7YSYmKHRoaXMuY3Vy''@;'; put 'put ''cmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25zdCB2PXRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl0sTT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2ZdPy50eXBlLEQ9KDAsWDUuaXNTcGVjaWFsTWlzc2luZykodik7TSYmIWlzTmFO''@;'; put 'put ''KHYpJiYhRCYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSp2KX0pLHRoaXMuZGF0YVNvdXJjZVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2Rh''@;'; put 'put ''dGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRh''@;'; put 'put ''dGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVj''@;'; put 'put ''b3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNr''@;'; put 'put ''KCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Rl''@;'; put 'put ''bW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRh''@;'; put 'put ''YmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJl''@;'; put 'put ''dkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IoY29uc3QgdiBvZiBmKWlmKHYpe2NvbnN0IE09di5wcm9wPy50b1N0cmluZygpO2RlbGV0ZSB2LnByb3AsZGVs''@;'; put 'put ''ZXRlIHYuZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHYuY29sLHsuLi52LGRhdGE6TX0pfX10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9ZCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5k''@;'; put 'put ''YXRhU291cmNlW2RdKX19dG9nZ2xlSG90UGx1Z2luKGEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2guYmF0Y2goKCk9Pntjb25zdCBmPWguZ2V0UGx1Z2luKGEpO2Y/KHNldFRpbWVvdXQoKCk9PntkP2YuZW5hYmxlUGx1Z2luKCk6Zi5kaXNhYmxlUGx1Z2luKCl9LDEwMCksaC5yZW5k''@;'; put 'put ''ZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxs''@;'; put 'put ''VmFsaWRhdGlvbk1hcC5maW5kKGY9PmYucm93PT09YSYmZi5jb2w9PT1kJiYhZi5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGQpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2lmKGguZ2V0''@;'; put 'put ''Q2VsbE1ldGEoYSxkKS5yZWFkT25seSlyZXR1cm47Y29uc3Qgdj1oLmdldERhdGFBdENlbGwoYSxkKSxNPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2FdKSxEPU9iamVjdC5rZXlzKE0pW2RdLFo9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRI''@;'; put 'put ''YXNoKE0sW0QsIm5vTGlua09wdGlvbiJdLCExKSxyZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChjZT0+Y2UuaGFzaD09PVopO2lmKHJlPi0xKXtsZXQgY2U9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtyZV0udmFsdWVzLm1hcChCZT0+QmVbdGhpcy5jZWxsVmFsaWRh''@;'; put 'put ''dGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCBiZT0oaC5nZXRDZWxsTWV0YShhLGQpLnNvdXJjZXx8W10pLmxlbmd0aDwxLEVlPSIgIiE9PXY7aC5iYXRjaCgoKT0+e2NvbnN0IEJlPWguZ2V0Q2VsbE1ldGEoYSxkKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlLmRhdGF8fCIi''@;'; put 'put ''KTtsZXQgcnQ7cWUmJihydD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHFlKSkscnR8fChydD1bXSksIm51bWVyaWMiPT09cWU/LnR5cGU/KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsIm51bWJlciIpLGNlPXRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsIm51bWJlciIpKToocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwic3RyaW5nIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwic3RyaW5nIikpO2NvbnN0IHB0PVsuLi5uZXcg''@;'; put 'put ''U2V0KFsuLi5ydCwuLi5jZV0pXTtpZihoLnNldENlbGxNZXRhKGEsZCwic291cmNlIixwdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtzb3VyY2U6cHR9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXS52YWx1ZXMubGVuZ3RoPjApe2NvbnN0''@;'; put 'put ''IGR0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcmVdLnN0cmljdDtoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJzdHJpY3QiLGR0''@;'; put 'put ''KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpkdCxmaWx0ZXI6ITF9KX10aGlzLnJlU2V0''@;'; put 'put ''RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3JlXSxhLGJlJiZFZSksaC5yZW5kZXIoKX0pfWlmKHJlPDApe2NvbnN0IGNlPXtTQVNDb250cm9sVGFibGU6W3tsaWJkczp0aGlzLmxpYmRzLHZhcmlhYmxlX25tOkR9XSxzb3VyY2Vfcm93OltN''@;'; put 'put ''XX0sYmU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKEQpLmZpbmQoRWU9PiJTT0ZUU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRSk7YmUmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnB1c2goe3JvdzphLGNvbDpk''@;'; put 'put ''LHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PWJlLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDpaLGNvdW50OnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoKzF9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFpndCksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdz''@;'; put 'put ''LnB1c2goZCksaC5yZW5kZXIoKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFscyIsY2Usdm9pZCAwLHtzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihFZT0+e2lmKEVlLmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZS5keW5hbWljX3ZhbHVlcy5tYXAocWU9PnFlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHJ0PT5ydC5oYXNoPT09Wik7cWU+LTEmJih0aGlzLmNlbGxWYWxp''@;'; put 'put ''ZGF0aW9uU291cmNlW3FlXT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtxZV0scm93OmEsY29sOmQsdmFsdWVzOkVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcyxleHRlbmRlZF92YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfZXh0ZW5kZWRfdmFsdWVzfSks''@;'; put 'put ''aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixaZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLGguYmF0Y2goKCk9PntzZXRUaW1l''@;'; put 'put ''b3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGgucmVuZGVyKCksaC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsWmVlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMu''@;'; put 'put ''Y3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCBxZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnJl''@;'; put 'put ''ZHVjZSgocHQsZHQpPT5wdC5jb3VudDxkdC5jb3VudD9wdDpkdCkscnQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKHFlKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShydCwxKX19KS5jYXRjaChFZT0+e2NvbnN0IEJlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3Vy''@;'; put 'put ''Y2UuZmluZEluZGV4KHFlPT5xZS5oYXNoPT09Wik7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoQmUsMSksaC5iYXRjaCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsVWd0KSxoLnJlbmRlcigpfSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGlj''@;'; put 'put ''ZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsWmVlKSxoLnJlbmRlcigpLHRoaXMuY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRFcnJvcnMuc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLEVlKX0pKX19Y2hlY2tFbXB0''@;'; put 'put ''eVJvd1doZW5GaWx0ZXIoKXt0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0uaW5jbHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVhZGVyUGtzWzBdXSkmJih0aGlz''@;'; put 'put ''Lnplcm9GaWx0ZXJSb3dzPSEwKX1vblJlY29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9ZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhLGQsaCl7Y29uc3QgZj10''@;'; put 'put ''aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksdj10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQoTT0+TS5oYXNoPT09ZiYmZD09PU0uY29sKTtpZih2JiZ2LmV4dGVuZGVkX3ZhbHVlcyYmdi5leHRl''@;'; put 'put ''bmRlZF92YWx1ZXMubGVuZ3RoPjApe2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKHYsaCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHModixoLE0sITApfX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlz''@;'; put 'put ''LnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXZpZXdib3hNYW5hZ2VyKCl7dGhpcy52aWV3Ym94ZXM9ITB9Z2V0IHRvdGFsUm93c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVk''@;'; put 'put ''K3RoaXMucm93c0NoYW5nZWQucm93c0FkZGVkfXNldENlbGxGaWx0ZXIoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCksaD1kJiZkWzBdO2lmKGgpe2NvbnN0IGY9aFswXSxNPWhbMV07aWYoZj09PWhbMl0mJk09PT1oWzNdKXtjb25zdCBaPXRoaXMuaG90SW5zdGFu''@;'; put 'put ''Y2UuZ2V0Q2VsbE1ldGEoZixNKTtaJiZaLmZpbHRlcj09PSFhJiZ0aGlzLmhvdEluc3RhbmNlLnNldENlbGxNZXRhKGYsTSwiZmlsdGVyIixhKX19fW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vi''@;'; put 'put ''c2NyaWJlKGg9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aH0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndoZXJlU3RyaW5nPWguc3RyaW5nLGEuY2xhdXNlcz1oLm9iail9KTtjb25zdCBkPXt9O3R5cGVvZiBh''@;'; put 'put ''LnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiJiYoYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sYS5maWx0ZXJfcGs9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQsImVkaXQtcmVjb3JkIj09PWEucm91dGUuc25hcHNob3QudXJsWzBdLnBhdGgm''@;'; put 'put ''JihhLnJlY29yZEFjdGlvbj10eXBlb2YgYS5maWx0ZXJfcGs8InUiPyJFRElUIjoiQUREIiksZC5MSUJEUz1hLmxpYmRzLHR5cGVvZiBhLmZpbHRlcl9wazwidSImJihkLkZJTFRFUl9SSz1wYXJzZUludChhLmZpbHRlcl9waykpLGQuT1VUREVTVD0iV0VCIixhLmxpYmRzJiYoS24uZWRpdG9y''@;'; put 'put ''LmxpYnJhcnk9YS5saWJkcy5zcGxpdCgiLiIpWzBdLEtuLmVkaXRvci50YWJsZT1hLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhLmxpYmRzJiYoYS5nZXRkYXRhRXJyb3I9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2UoZCwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9n''@;'; put 'put ''ZXRkYXRhIixhLmxpYmRzKS50aGVuKGg9PnthLmluaXRTZXR1cChoKX0pLmNhdGNoKGg9PnthLmdldGRhdGFFcnJvcj0hMCxhLnRhYmxlVHJ1ZT0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fWluaXRTZXR1cChhKXtpZih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90UmVnaXN0ZXJlci5n''@;'; put 'put ''ZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmdldGRhdGFFcnJvcnx8IWF8fCFhLmRhdGEpcmV0dXJuO3RoaXMuY29scz1hLmRhdGEuY29scyx0aGlzLmRzbWV0YT1hLmRhdGEuZHNtZXRhLHRoaXMudmVyc2lvbnM9YS5kYXRhLnZlcnNpb25zfHxbXTtjb25zdCBkPXRoaXMuZHNtZXRh''@;'; put 'put ''LmZpbmQoWj0+Ik5PVEVTIj09PVouTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKFo9PiJERF9MT05HREVTQyI9PT1aLk5BTUUpLGY9dGhpcy5kc21ldGEuZmluZChaPT4iRERfU0hPUlRERVNDIj09PVouTkFNRSk7dGhpcy5kc05vdGU9ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5W''@;'; put 'put ''QUxVRTpmJiZmLlZBTFVFP2YuVkFMVUU6IiI7Y29uc3Qgdj10aGlzLmhvdEluc3RhbmNlLE09YS5kYXRhLmFwcHJvdmVyczt0aGlzLmNvbHMmJih0aGlzLmhlYWRlckFycmF5PShjPT57Y29uc3QgbD1bXTtmb3IobGV0IGEgb2YgYykiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9''@;'; put 'put ''PWEuTkFNRSYmbC5wdXNoKGEuTkFNRSk7cmV0dXJuIGx9KSh0aGlzLmNvbHMpKSxNLmZvckVhY2goWj0+e3RoaXMuYXBwcm92ZXJzLnB1c2goWi5QRVJTT05OQU1FKX0pLHRoaXMudGFibGVUcnVlPSEwLHRoaXMubGliZHM9YS5saWJkcyx0aGlzLmhvdFRhYmxlLmRhdGE9YS5kYXRhLnNhc2Rh''@;'; put 'put ''dGEsdGhpcy5oZWFkZXJDb2x1bW5zPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSEhYS5kYXRhLnNhc3BhcmFtc1swXS5D''@;'; put 'put ''TFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRpdFJlY29yZEJ1dHRvbjohMCxyZW1vdmVBZGRSZWNvcmRCdXR0b246ITB9KSx0aGlzLmNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCksLTEh''@;'; put 'put ''PT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLHRoaXMuaGVh''@;'; put 'put ''ZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJih0aGlz''@;'; put 'put ''LnRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksYS5kYXRhLnhsX3J1bGVz''@;'; put 'put ''Lmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRvcj1uZXcgeTZlKGEuZGF0YS5zYXNwYXJhbXNbMF0sYS5kYXRhLiRzYXNkYXRhLHRoaXMuY29scyxhLmRhdGEuZHFydWxlcyxhLmRhdGEu''@;'; put 'put ''ZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9YS5kYXRhLnNhc2RhdGEsdGhpcy4kZGF0YUZvcm1hdHM9YS5kYXRhLiRzYXNkYXRhO2ZvcihsZXQgWj0wO1o8dGhpcy5oZWFkZXJDb2x1bW5zLmxlbmd0aDtaKysp''@;'; put 'put ''dGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25bWl0uZGF0YV09amd0KHRoaXMuY2VsbFZhbGlkYXRpb25bWl0udHlwZSx0aGlzLmNlbGxWYWxpZGF0aW9uW1pdKTt0aGlzLmNoZWNrUm93TGltaXQoKSx2LnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxj''@;'; put 'put ''b2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGZvcm11bGFzOnRoaXMuaG90VGFibGUuZm9ybXVsYXMsc3RyZXRjaEg6ImFsbCIscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxo''@;'; put 'put ''aWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1bW5zKCl9LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKFoscmUpe3JldHVybiAwPT09cmU/NjA6Wj41MDA/NTAwOlp9LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0''@;'; put 'put ''ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxyb3dIZWFkZXJzOlo9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxy''@;'; put 'put ''b3dIZWlnaHRzOjI0LG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFs''@;'; put 'put ''aWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihaLHJlLGNlLGJlLEVlLEJlKT0+e2NvbnN0IHFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgcnQscHQ9Ik5vIGluZm8gZm91''@;'; put 'put ''bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IGR0PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sSnQ9ZHQ/ZHRbMF1bMV06LTEsdm49dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKEp0KTtydD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1t2bl0scnQmJihwdD1gTEFC''@;'; put 'put ''RUw6ICR7cnQ/LmxhYmVsfTxicj5UWVBFOiAke3J0Py50eXBlfTxicj5MRU5HVEg6ICR7cnQ/Lmxlbmd0aH08YnI+Rk9STUFUOiAke3J0Py5mb3JtYXR9YCl9cmV0dXJuIHFlLmlubmVySFRNTD1wdCxxZX19fX0sZGF0YVNjaGVtYTp0aGlzLmhvdERhdGFTY2hlbWEsY29udGV4dE1lbnU6dGhp''@;'; put 'put ''cy5ob3RUYWJsZS5zZXR0aW5ncy5jb250ZXh0TWVudSxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXN0b21IIixhZnRlckdldENvbEhlYWRlcjooWixyZSk9Pntjb25zdCBjZT10aGlzLmNvbHVtbkhlYWRlcltaXSxiZT1jZSYmdGhpcy5pc0NvbFBrKGNlKSxFZT1jZSYmdGhpcy5pc1JlYWRv''@;'; put 'put ''bmx5Q29sKGNlKTtiZSYmcmUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksRWUmJiFiZSYmcmUuY2xhc3NMaXN0LmFkZCgicmVhZG9ubHlDZWxsIiksMD09PVomJnJlLmNsYXNzTGlzdC5hZGQoImZpcnN0Q29sdW1uSGVhZGVyU3R5bGUiKSxyZS5jbGFzc0xpc3QuYWRk''@;'; put 'put ''KEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LGFmdGVyR2V0Q2VsbE1ldGE6KFoscmUsY2UpPT57cmUmJnRoaXMuaXNSZWFkb25seUNvbChyZSkmJihjZS5jbGFzc05hbWU9InJlYWRvbmx5Q2VsbCIpfX0sITEpLHRoaXMuaG90VGFibGUuaGlkZGVuPSExLHRoaXMudG9n''@;'; put 'put ''Z2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMucXVlcnlUZXh0PWEuZGF0YS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsdGhpcy5jb2x1bW5IZWFkZXI9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5jb2x1bW5IZWFkZXJbMF09IkRlbGV0''@;'; put 'put ''ZT8iLHRoaXMucmVhZE9ubHlGaWVsZHM9YS5kYXRhLnNhc3BhcmFtc1swXS5QS0NOVDtjb25zdCBEPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO0QmJkQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixaPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhvdENs''@;'; put 'put ''aWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgcmU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmRlYnVnLXN3aXRjaC1pdGVtIil8fHZvaWQgMDtyZSYmcmUuY2xpY2soKX0sMTAwKX0pLHYuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChaLHJlLGNlLGJlLEVlLEJlKT0+e1o9PT1jZSYm''@;'; put 'put ''cmU9PT1iZSYmITE9PT10aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbihaLHJlKX0pLHYuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT57dGhpcy5zZXRDZWxsRmlsdGVyKCExKX0pLHYuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsKCk9Pnt0''@;'; put 'put ''aGlzLnNldENlbGxGaWx0ZXIoITApfSksdi5hZGRIb29rKCJhZnRlckNoYW5nZSIsKFoscmUpPT57aWYoImVkaXQiPT09cmUpe2NvbnN0IGNlPXRoaXMuaG90SW5zdGFuY2UsYmU9WlswXVswXSxFZT1aWzBdWzFdLEJlPWNlLnByb3BUb0NvbChFZSkscWU9Y2UuZ2V0Q2VsbE1ldGEoYmUsQmUp''@;'; put 'put ''O3FlJiYhMT09PXFlLmZpbHRlciYmY2Uuc2V0Q2VsbE1ldGEoYmUsQmUsImZpbHRlciIsITApLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShFZSxCZSxiZSl9fSksdi5hZGRIb29rKCJhZnRlclJlbmRlciIsWj0+e3RoaXMuZXZlbnRTZXJ2aWNlLmRpc3Bh''@;'; put 'put ''dGNoRXZlbnQoInJlc2l6ZSIpfSksdi5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKFoscmUpPT57aWYoWj50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtjb25zdCBjZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57Y2UmJihjZS5zY3JvbGxUb3A9''@;'; put 'put ''Y2Uuc2Nyb2xsSGVpZ2h0KX0pfX0pLHYuYWRkSG9vaygiYmVmb3JlUGFzdGUiLChaLHJlKT0+e2NvbnN0IGNlPXJlWzBdLnN0YXJ0Q29sO1pbMF09WlswXS5tYXAoKGJlLEVlKT0+e2NvbnN0IEJlPXRoaXMuY29sdW1uSGVhZGVyW2NlK0VlXSxxZT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRz''@;'; put 'put ''Py52YXJzW0JlXT8udHlwZSxydD0oMCxYNS5pc1NwZWNpYWxNaXNzaW5nKShiZSk7cmV0dXJuIHFlJiYhaXNOYU4oYmUpJiYhcnQmJihiZSo9MSksYmV9KX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx2LmFkZEhvb2soImFmdGVyQ3Jl''@;'; put 'put ''YXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3Jk''@;'; put 'put ''KG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Lbi5yb290UGFyYW18fCJlZGl0b3IiPT09S24ucm9vdFBhcmFtKSYmMD09''@;'; put 'put ''PUtuLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihLbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxLbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNh''@;'; put 'put ''c1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLHYucmVuZGVyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKHZjKSxHZShTZCksR2UoVWgpLEdlKEd1KSxHZShM''@;'; put 'put ''cyksR2UoQ3UpLEdlKHRsKSxHZShFcyksR2UoWW0pLEdlKEE2ZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihxYSh1N3QsNykscWEoZDd0LDUpLHFhKGg3dCw1KSxx''@;'; put 'put ''YShmN3QsNSkscWEocDd0LDUpKSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmh0PWYuZmlyc3QpLENpKGY9U2koKSkmJihoLnVwbG9hZFN0YXRlckNvbXBMaXN0PWYpLENpKGY9U2koKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9ZiksQ2koZj1TaSgpKSYmKGguaG90SW5zdGFuY2VDb21w''@;'; put 'put ''TGlzdD1mKSxDaShmPVNpKCkpJiYoaC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1mKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNzcsdmFyczo3NCxjb25zdHM6W1siaHQiLCIiXSxbImhvdEluc3RhbmNlIiwiIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJd''@;'; put 'put ''LFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsImNvbnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwi''@;'; put 'put ''Y2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHIt''@;'; put 'put ''Y29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwiZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMCJdLFsidHlwZSIsInJhZGlv''@;'; put 'put ''IiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIs''@;'; put 'put ''MywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIi''@;'; put 'put ''XSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50''@;'; put 'put ''UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiY2xh''@;'; put 'put ''c3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImJvcmRlci0wIiwiYm94LXNoYWRvdy1ub25lLWkiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dy''@;'; put 'put ''b3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVyIiwiY2xyLXJvdyIsImJ1dHRvbkJhciIsImhlYWRlckJhciIsImNsci1mbGV4LW1kLXJvdyIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQi''@;'; put 'put ''XSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTMgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtNSIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFz''@;'; put 'put ''cyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQtNCBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1i''@;'; put 'put ''bG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91''@;'; put 'put ''bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsMSwiZWRpdC1ob3QiLDMsImxpY2Vuc2VLZXkiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkg''@;'; put 'put ''dy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiZHVwbGljYXRlLWtleXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsiY2xhc3MiLCJkLWJsb2NrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdGb3Ii''@;'; put 'put ''LCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJj''@;'; put 'put ''ZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIs''@;'; put 'put ''ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xy''@;'; put 'put ''TW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJkYXRhLWxwaWdu''@;'; put 'put ''b3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2VyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsImNs''@;'; put 'put ''ci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBl''@;'; put 'put ''IiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsImNoYW5nZSIsInVwbG9hZGVyIl0sWzEsImNsci1jb2wtbWQtMyIsImVkaXRCdG4iXSxbMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiLDMsImNsaWNrIiwiZGlzYWJs''@;'; put 'put ''ZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGljayJdLFsxLCJleGNlbC1wYXJzaW5nIiwiY2xyLWNvbC1tZC0xMiJd''@;'; put 'put ''LFszLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiwiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJt''@;'; put 'put ''aXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJs''@;'; put 'put ''b29wIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTMiLCJjbHItY29sLWxnLTQiLCJiYWNrQnRuIl0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0''@;'; put 'put ''Iiwic2l6ZSIsIjIwIl0sWzEsInRleHQiXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsInZpZXdib3gtb3BlbiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0''@;'; put 'put ''ZXh0LWNlbnRlciIsIm10LTAiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsImFyaWEtbGFiZWwiLCJWaWV3IGRhdGFzZXQgbWV0YSBpbmZvIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNo''@;'; put 'put ''YXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsxLCJtci0xMCIsInZpZXctdGFibGUiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRv''@;'; put 'put ''bS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtNCIsImNsci1jb2wtbGctNCIsImJ0bkN0cmwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZp''@;'; put 'put ''ZXciLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tYmxvY2siLCJidG4tZGltbWVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tcHJpbWFyeSIs''@;'; put 'put ''ImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwibm90ZSJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGljb24tY29sbGFwc2UgYnRuLXNtIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwi''@;'; put 'put ''aWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsMywiY2xpY2siXSxb''@;'; put 'put ''InNoYXBlIiwidGltZXMiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsIjE2Il0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIs''@;'; put 'put ''IjIwIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXByaW1hcnkgYnRuLXVwbG9hZC1w''@;'; put 'put ''cmV2aWV3IiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcmV2aWV3LXN1Ym1pdCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIs''@;'; put 'put ''ImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJz''@;'; put 'put ''cGlubmVyIl0sWzEsIm10LTEwIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLDEsImVycm9yLWljb24iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtdC01LWki''@;'; put 'put ''LDMsImNsaWNrIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsIm1vZGFsIl0sWyJyb2xl''@;'; put 'put ''IiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLCJtb2RhbC1sZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwi''@;'; put 'put ''dHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbImNsYXNzIiwiZC1ibG9jayB3LTEwMCB0ZXh0LWNlbnRlciBjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLW9mZnNldC1tZC0yIGNsci1jb2wtbWQtOCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJqdXN0aWZ5LWNvbnRlbnQt''@;'; put 'put ''Y2VudGVyLWkiXSxbImlkIiwic3VibWl0QnRuIiwidHlwZSIsInN1Ym1pdCIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsIm0tMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaWQiLCJjYW5jZWxTdWJtaXRCdG4iLCJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiZC1ibG9jayIsInctMTAwIiwidGV4dC1jZW50ZXIiLCJjb2xvci1yZWQiXSxbMSwiY2xyLW9mZnNldC1tZC0yIiwiY2xyLWNvbC1tZC04Il0sWzEsInRleHQtYXJlYS1mdWxsLXdp''@;'; put 'put ''ZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlz''@;'; put 'put ''YWJsZWQiLCJ2YWx1ZSJdLFsxLCJkLWJsb2NrIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYo''@;'; put 'put ''MSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2Iiw2KSgxLCJjbHItbW9kYWwiLDcpLEh0KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0pKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguYXR0YWNoRmlsZShN''@;'; put 'put ''LCEwKSl9KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93VXBsb2FkTW9kYWwsTSl8fChoLnNob3dVcGxvYWRNb2RhbD1NKSxDdChNKX0pLGRlKDIsImgzIiw4KSxPZSgzLCJVcGxvYWQgRmlsZSIpLGhlKCksZGUoNCwiZGl2Iiw5KSg1''@;'; put 'put ''LCJkaXYiLDEwKSg2LCJzcGFuIiksT2UoNywiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoOCwiZGl2IiwxMSkoOSwiZGl2IiwxMikoMTAsImRpdiIsMTMpKDExLCJkaXYiLDE0KSgxMiwiY2xyLXJhZGlvLWNvbnRhaW5lciIsMTUpKDEzLCJjbHItcmFkaW8td3Jh''@;'; put 'put ''cHBlciIpKDE0LCJpbnB1dCIsMTYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxoZSgpLGRlKDE1LCJsYWJlbCIpLE9lKDE2LCJVVEYtOCIpLGhlKCkoKSxkZSgxNywiY2xyLXJhZGlv''@;'; put 'put ''LXdyYXBwZXIiKSgxOCwiaW5wdXQiLDE3KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZW5jb2RpbmcsTSl8fChoLmVuY29kaW5nPU0pLEN0KE0pfSksaGUoKSxkZSgxOSwibGFiZWwiKSxPZSgyMCwiV0xBVElOMSIpLGhlKCkoKSgpKCkoKSxtdCgy''@;'; put 'put ''MSxiN3QsNiwxLCJkaXYiLDE4KSgyMix5N3QsMywxLCJkaXYiLDE5KSxkZSgyMywiZGl2IiwxMyksbXQoMjQsXzd0LDIsMSwiYnV0dG9uIiwyMCkoMjUsdzd0LDIsMCwiYnV0dG9uIiwyMSksaGUoKSxtdCgyNixDN3QsMywwLCJkaXYiLDIyKSxoZSgpKCkoKSxHdCgyNywiZGl2IiwyMyksaGUo''@;'; put 'put ''KSxtdCgyOCxTN3QsMSwxMiwiYXBwLWVkaXQtcmVjb3JkIiwyNCksZGUoMjksImRpdiIsMjUsMCksbXQoMzEsTTd0LDIsMCwiZGl2IiwyNiksZGUoMzIsImRpdiIsMjcpLEh0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgub25TaG93VXBsb2FkTW9kYWwo''@;'; put 'put ''KSl9KSxkZSgzMywiZGl2IiwyOCksbXQoMzQseDd0LDksMiwiZGl2IiwyOSksZGUoMzUsImRpdiIsMzApLG10KDM2LFI3dCwxMCw2LCJoNCIsMzEpLGhlKCksbXQoMzcsQjd0LDQsMywiZGl2IiwzMikoMzgsajd0LDUsMSwiZGl2IiwzMyksaGUoKSxkZSgzOSwiZGl2IiwzNCksbXQoNDAsWjd0''@;'; put 'put ''LDQsMiwiZGl2IiwzNSksZGUoNDEsImRpdiIsMzYpKDQyLCJkaXYiLDM3KSxHdCg0MywiaG90LXRhYmxlIiwzOCwxKSxoZSgpLGRlKDQ1LCJkaXYiKSxtdCg0NixHN3QsNSwyLCJjbHItdG9vbHRpcCIsMzkpKDQ3LCQ3dCwzLDEsInAiLDQwKSxoZSgpLG10KDQ4LFg3dCwxNiw2LCJkaXYiLDQx''@;'; put 'put ''KSxkZSg0OSwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0TGltaXROb3RpY2UsTSl8fChoLnN1Ym1pdExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoNTAsImgzIiw4KSxPZSg1MSwiTm90aWNlIiksaGUo''@;'; put 'put ''KSxkZSg1MiwiZGl2Iiw5KSg1MywicCIsNDMpLE9lKDU0KSxoZSgpKCksZGUoNTUsImRpdiIsMjMpKDU2LCJidXR0b24iLDQ0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksT2UoNTcsIiBDYW5jZWwgIiksaGUoKSxkZSg1''@;'; put 'put ''OCwiYnV0dG9uIiw0NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnVwbG9hZFBhcnNlZEZpbGVzKCksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxPZSg1OSwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSg2MCwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3Bl''@;'; put 'put ''bkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguYmFkRWRpdCxNKXx8KGguYmFkRWRpdD1NKSxDdChNKX0pLGRlKDYxLCJoMyIsOCksT2UoNjIpLGhlKCksZGUoNjMsImRpdiIsOSkoNjQsInAiKSxPZSg2NSksaGUoKSgpLGRlKDY2LCJkaXYiLDIzKSg2NywiYnV0dG9uIiw0''@;'; put 'put ''NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmJhZEVkaXQ9ITEpfSksT2UoNjgsIiBPayAiKSxoZSgpKCkoKSxkZSg2OSwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgucGtOdWxsLE0p''@;'; put 'put ''fHwoaC5wa051bGw9TSksQ3QoTSl9KSxkZSg3MCwiaDMiLDgpLE9lKDcxLCJFcnJvciIpLGhlKCksZGUoNzIsImRpdiIsOSkoNzMsInAiKSxPZSg3NCwiIE51bGwgdmFsdWVzIG9yIGluY29ycmVjdCBkYXRhIHR5cGVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVt''@;'; put 'put ''bnMgIiksaGUoKSgpLGRlKDc1LCJkaXYiLDIzKSg3NiwiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnBrTnVsbD0hMSxDdChoLmJhZEVkaXQ9ITEpfSksT2UoNzcsIiBPayAiKSxoZSgpKCkoKSxkZSg3OCwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1v''@;'; put 'put ''ZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgubm9Qa051bGwsTSl8fChoLm5vUGtOdWxsPU0pLEN0KE0pfSksZGUoNzksImgzIiw4KSxPZSg4MCwiRXJyb3IiKSxoZSgpLGRlKDgxLCJkaXYiLDkpKDgyLCJwIiksT2UoODMsIkluY29ycmVjdCBkYXRhIHR5cGVz''@;'; put 'put ''IGluIG5vbi1QcmltYXJ5IEtleSBjb2x1bW5zIiksaGUoKSgpLGRlKDg0LCJkaXYiLDIzKSg4NSwiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLm5vUGtOdWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxPZSg4NiwiIE9rICIpLGhlKCkoKSgpLGRlKDg3''@;'; put 'put ''LCJjbHItbW9kYWwiLDQ2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5wa0R1cHMsTSl8fChoLnBrRHVwcz1NKSxDdChNKX0pLGRlKDg4LCJoMyIsOCksT2UoODksIkVycm9yIiksaGUoKSxkZSg5MCwiZGl2Iiw5KSg5MSwicCIpLE9lKDky''@;'; put 'put ''LCIgRHVwbGljYXRlIHZhbHVlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGhlKCksZGUoOTMsInAiKSxPZSg5NCwiRHVwbGljYXRlcyBmb3VuZDoiKSxoZSgpLG10KDk1LEo3dCwzLDQsInNwYW4iLDQ3KSxoZSgpLGRlKDk2LCJkaXYiLDIzKSg5Nywi''@;'; put 'put ''YnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnBrRHVwcz0hMSl9KSxPZSg5OCwiIE9rICIpLGhlKCkoKSgpLGRlKDk5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC50''@;'; put 'put ''b29Mb25nLE0pfHwoaC50b29Mb25nPU0pLEN0KE0pfSksZGUoMTAwLCJoMyIsOCksT2UoMTAxLCJFcnJvciIpLGhlKCksZGUoMTAyLCJkaXYiLDkpKDEwMywicCIpLE9lKDEwNCwiIFRoZSBmb2xsb3dpbmcgY29sdW1ucyBoYXZlIHZhbHVlcyB0aGF0IGV4Y2VlZCBsZW5ndGggbGltaXRzOiAi''@;'; put 'put ''KSxoZSgpLG10KDEwNSxRN3QsMiwzLCJwIiw0OCksaGUoKSxkZSgxMDYsImRpdiIsMjMpKDEwNywiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnRvb0xvbmc9ITEsQ3QoaC5jbGVhbkV4Y2VlZCgpKX0pLE9lKDEwOCwiIE9rICIpLGhlKCkoKSgpKCko''@;'; put 'put ''KSgpKCkoKSxtdCgxMDksZTl0LDE0LDAsImRpdiIsNDkpLGRlKDExMCwiY2xyLW1vZGFsIiw1MCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguZmlsdGVyLE0pfHwoaC5maWx0ZXI9TSksQ3QoTSl9KSxkZSgxMTEsImgzIiw1MSksT2UoMTEy''@;'; put 'put ''LCIgRmlsdGVyIGZvciB0YWJsZTogIiksZGUoMTEzLCJzcGFuIiksT2UoMTE0KSxoZSgpKCksZGUoMTE1LCJkaXYiLDkpLG10KDExNix0OXQsMiwwLCJhcHAtcXVlcnkiLDM5KSxoZSgpLGRlKDExNywiZGl2IiwyMykoMTE4LCJidXR0b24iLDUyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGgucmVzZXRGaWx0ZXIoKSl9KSxPZSgxMTksIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSgxMjAsImJ1dHRvbiIsNTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5maWx0ZXI9ITEpfSksT2UoMTIxLCIgQ2FuY2VsICIpLGhlKCksZGUoMTIy''@;'; put 'put ''LCJidXR0b24iLDU0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2VuZENsYXVzZSgpKX0pLE9lKDEyMywiIE9rICIpLGhlKCkoKSgpLGRlKDEyNCwiY2xyLW1vZGFsIiw0MiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYp''@;'; put 'put ''LG1pKGgucXVlcnlFcnIsTSl8fChoLnF1ZXJ5RXJyPU0pLEN0KE0pfSksZGUoMTI1LCJoMyIsOCksT2UoMTI2LCJFcnJvciIpLGhlKCksZGUoMTI3LCJkaXYiLDkpKDEyOCwicCIpLE9lKDEyOSksaGUoKSgpLGRlKDEzMCwiZGl2IiwyMykoMTMxLCJidXR0b24iLDU1KSxIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksT2UoMTMyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTMzLCJidXR0b24iLDQ1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksT2UoMTM0LCIgT2sgIiksaGUoKSgpKCks''@;'; put 'put ''ZGUoMTM1LCJjbHItbW9kYWwiLDU2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kaXNjYXJkU291cmNlRmlsZSxNKXx8KGguZGlzY2FyZFNvdXJjZUZpbGU9TSksQ3QoTSl9KSxkZSgxMzYsImgzIiw1MSksT2UoMTM3LCJXYXJuaW5nIiks''@;'; put 'put ''aGUoKSxkZSgxMzgsImRpdiIsOSksT2UoMTM5LCIgVGhpcyBhY3Rpb24gd2lsbCBkaXNjYXJkIHRoZSBzb3VyY2UgZmlsZSBhbmQgaXQncyBsb2FkZWQgZGF0YSAiKSxkZSgxNDAsImIiKSxPZSgxNDEpLGhlKCksT2UoMTQyLCIgRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgx''@;'; put 'put ''NDMsImRpdiIsMjMpKDE0NCwiYnV0dG9uIiw1MyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmRpc2NhcmRTb3VyY2VGaWxlPSExKX0pLE9lKDE0NSwiIENhbmNlbCAiKSxoZSgpLGRlKDE0NiwiYnV0dG9uIiw1NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChmKSxoLmRpc2NhcmRTb3VyY2VGaWxlPSExLEN0KGguZGlzY2FyZFBlbmRpbmdFeGNlbCghMCkpfSksT2UoMTQ3LCIgT2sgIiksaGUoKSgpKCksZGUoMTQ4LCJjbHItbW9kYWwiLDU2KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5m''@;'; put 'put ''aWxlUGFzc3dvcmRNb2RhbCxNKXx8KGguZmlsZVBhc3N3b3JkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNDksImgzIiw1MSksT2UoMTUwLCIgUGFzc3dvcmQgUHJvdGVjdGVkIEZpbGUgIiksaGUoKSxkZSgxNTEsImRpdiIsNTgpKDE1MiwicCIsNDMpLE9lKDE1MywiUGxlYXNlIGVudGVyIHBhc3N3''@;'; put 'put ''b3JkOiIpLGhlKCksR3QoMTU0LCJpbnB1dCIsNTksMiksaGUoKSxkZSgxNTYsImRpdiIsMjMpLG10KDE1NyxuOXQsMiwwLCJwIiw2MCksZGUoMTU4LCJidXR0b24iLDUzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5maWxl''@;'; put 'put ''UGFzc3dvcmRTdWJqZWN0Lm5leHQodm9pZCAwKSl9KSxPZSgxNTksIiBDYW5jZWwgdXBsb2FkICIpLGhlKCksZGUoMTYwLCJidXR0b24iLDYxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT1oYSgxNTUpO3JldHVybiBoLmZpbGVQYXNzd29yZE1vZGFsPSExLEN0KGguZmls''@;'; put 'put ''ZVBhc3N3b3JkU3ViamVjdC5uZXh0KE0udmFsdWUpKX0pLE9lKDE2MSwiIFVubG9jayAiKSxoZSgpKCkoKSxkZSgxNjIsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLm1hbnVhbEZpbGVFZGl0TW9kYWwsTSl8fCho''@;'; put 'put ''Lm1hbnVhbEZpbGVFZGl0TW9kYWw9TSksQ3QoTSl9KSxkZSgxNjMsImgzIiw1MSksT2UoMTY0LCJXYXJuaW5nIiksaGUoKSxkZSgxNjUsImRpdiIsOSksT2UoMTY2LCIgTWFudWFsbHkgZWRpdGluZyB0aGlzIGRhdGEgd2lsbCBtZWFuIHRoZSBzb3VyY2UgZmlsZSAiKSxkZSgxNjcsImIiKSxP''@;'; put 'put ''ZSgxNjgpLGhlKCksT2UoMTY5LCIgd2lsbCBiZSBkaXNjYXJkZWQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGhlKCksZGUoMTcwLCJkaXYiLDIzKSgxNzEsImJ1dHRvbiIsNTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5tYW51YWxGaWxlRWRpdE1vZGFs''@;'; put 'put ''PSExKX0pLE9lKDE3MiwiIENhbmNlbCAiKSxoZSgpLGRlKDE3MywiYnV0dG9uIiw1NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsQ3QoaC5wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpKX0pLE9lKDE3NCwiIE9rICIpLGhlKCko''@;'; put 'put ''KSgpLGRlKDE3NSwiYXBwLWRhdGFzZXQtaW5mbyIsNjIpLGdpKCJvcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kYXRhc2V0SW5mbyxNKXx8KGguZGF0YXNldEluZm89TSksQ3QoTSl9KSxIdCgicm93Q2xpY2tlZCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0''@;'; put 'put ''KGguZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoTSkpfSksaGUoKSxkZSgxNzYsImFwcC12aWV3Ym94ZXMiLDYzKSxnaSgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC52aWV3Ym94ZXMsTSl8fChoLnZpZXdib3hlcz1NKSxDdChNKX0pLGhlKCl9''@;'; put 'put ''aWYoMiZkKXtjb25zdCBmPWhhKDE1NSk7ZmUoKSx4ZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSkscGko''@;'; put 'put ''ImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9kYWwpLGZlKDEzKSxwaSgibmdNb2RlbCIsaC5lbmNvZGluZykseGUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoNCkscGkoIm5nTW9kZWwiLGguZW5jb2RpbmcpLHhlKCJkaXNhYmxlZCIsIiIhPWguZmlsZW5hbWUpLGZlKDMpLHhl''@;'; put 'put ''KCJuZ0lmIiwhaC5leGNlbEZpbGVQYXJzaW5nJiYhaC51cGxvYWRMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhaC5leGNlbEZpbGVQYXJzaW5nJiYhaC51cGxvYWRMb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsIlZhbGlkYXRpbmciIT09aC5leGNlbFVwbG9hZFN0YXRlKSxmZSgpLHhlKCJuZ0lm''@;'; put 'put ''IiwiVmFsaWRhdGluZy1EUSI9PT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCkseGUoIm5nSWYiLGguZXhjZWxGaWxlUGFyc2luZyksZmUoMikseGUoIm5nSWYiLGguY3VycmVudEVkaXRSZWNvcmRJbmRleD4tMSksZmUoMykseGUoIm5nSWYiLCFoLnZhbGlkYXRpb25Eb25lJiZoLnN1Ym1pdCks''@;'; put 'put ''ZmUoMykseGUoIm5nSWYiLGgudGFibGVUcnVlKSxmZSgpLFRyKCJjbHItY29sLWxnLTEyIiwhaC50YWJsZVRydWUpLGZlKCkseGUoIm5nVmFyIixscCg2NyxnN3QsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVswXSxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxp''@;'; put 'put ''dCgiLiIpWzFdKSksZmUoKSx4ZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCkseGUoIm5nSWYiLCFZcyg3MCxINmUpLmluY2x1ZGVzKGgucXVlcnlUZXh0KSksZmUoKSx4ZSgibmdDbGFzcyIsc3AoNzIsbTd0LCFZcyg3MSxINmUpLmluY2x1ZGVzKGgucXVlcnlUZXh0KSkpLGZlKCkseGUoIm5n''@;'; put 'put ''SWYiLCFoLnRhYmxlVHJ1ZSksZmUoMyksVHIoImhpZGRlbiIsaC5ob3RUYWJsZS5oaWRkZW4pLHhlKCJsaWNlbnNlS2V5IixoLmhvdFRhYmxlLmxpY2Vuc2VLZXkpLGZlKDMpLHhlKCJuZ0lmIixoLnRhYmxlVHJ1ZSYmIWgucmVzdHJpY3Rpb25zLnJlbW92ZUFkZFJlY29yZEJ1dHRvbiksZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkmJmguZGF0YVNvdXJjZSYmaC5kYXRhU291cmNlLmxlbmd0aD5oLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSxmZSgpLHhlKCJuZ0lmIixoLnN1Ym1p''@;'; put 'put ''dCksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxJcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBU''@;'; put 'put ''byByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksZmUoNikscGkoImNsck1vZGFsT3BlbiIsaC5iYWRFZGl0KSxmZSgyKSxDcihoLmJhZEVkaXRUaXRsZXx8IkVycm9yIiksZmUoMyksQ3IoaC5iYWRFZGl0Q2F1c2UpLGZlKDQpLHBp''@;'; put 'put ''KCJjbHJNb2RhbE9wZW4iLGgucGtOdWxsKSxmZSg5KSxwaSgiY2xyTW9kYWxPcGVuIixoLm5vUGtOdWxsKSxmZSg5KSxwaSgiY2xyTW9kYWxPcGVuIixoLnBrRHVwcyksZmUoOCkseGUoIm5nRm9yT2YiLGguZHVwbGljYXRlUGtJbmRleGVzKSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnRv''@;'; put 'put ''b0xvbmcpLGZlKDYpLHhlKCJuZ0Zvck9mIixoLmV4Y2VlZENlbGxzKSxmZSg0KSx4ZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLElyKCIg''@;'; put 'put ''IixoLmxpYmRzLCIgIiksZmUoMikseGUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSx4ZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSxmZSg1KSxDcihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNikscGkoImNsck1vZGFsT3Bl''@;'; put 'put ''biIsaC5kaXNjYXJkU291cmNlRmlsZSkseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxDcihoLmZpbGVuYW1lKSxmZSg3KSxwaSgiY2xyTW9kYWxPcGVuIixoLmZpbGVQYXNzd29yZE1vZGFsKSx4ZSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xy''@;'; put 'put ''TW9kYWxDbG9zYWJsZSIsITEpLGZlKDkpLHhlKCJuZ0lmIixoLmZpbGVVbmxvY2tFcnJvciksZmUoMykseGUoImRpc2FibGVkIixmLnZhbHVlLmxlbmd0aDwxKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLm1hbnVhbEZpbGVFZGl0TW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJj''@;'; put 'put ''bHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksQ3IoaC5maWxlbmFtZSksZmUoNykscGkoIm9wZW4iLGguZGF0YXNldEluZm8pLHhlKCJkc21ldGEiLGguZHNtZXRhKSgidmVyc2lvbnMiLGgudmVyc2lvbnMpLGZlKCkscGkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94ZXMpfX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltJNmUsd3UsbnMsYmEscWwsYkwsbmwsR3MsYzEsSGwsb3UsS3UsajAsTDIsUDIsZHMsY0csRVplLGxHLFFMLG03LGI3LHY3LERfLFN3LGVFLFI2ZSxMNmUsTzZlLHBPLFhlZSxvN3QsbDd0LGM3dCxGNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgcjl0PVt7''@;'; put 'put ''cGF0aDoiOmxpYk1lbSIsY29tcG9uZW50OmlOfSx7cGF0aDoiOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDppTn0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDppTn0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6aU59XTts''@;'; put 'put ''ZXQgaTl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6Yy5mb3JDaGlsZChyOXQpLHpj''@;'; put 'put ''XX0pfX1yZXR1cm4gY30pKCksTUE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJh''@;'; put 'put ''LFJjLG5mXX0pfX1yZXR1cm4gY30pKCksUWVlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltS''@;'; put 'put ''YSx6MCxSYSxSYyxZOSxTQSxuZl19KX19cmV0dXJuIGN9KSgpLE42ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1B''@;'; put 'put ''cih7aW1wb3J0czpbUmEsejAsUmEsUmMsUWVlLGE5LF8xZSx2NmUsTUEsbmZdfSl9fXJldHVybiBjfSkoKTtuTigpO2xldCBhOXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtp''@;'; put 'put ''KHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W042ZSxSYSxSYyxpOXQsejAsYTkuZm9yUm9vdCgpLFk5LG5mLEN3LFNBLE1BLF8xZSxRZWVdfSl9fXJldHVybiBjfSkoKSxvOXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09u''@;'; put 'put ''RGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ob21lLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNs''@;'; put 'put ''czoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3I1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHM5dD1bInNpZGViYXJOYXYiXSxsOXQ9WyIqIl0sYzl0PSgpPT5bIi92aWV3L3Vz''@;'; put 'put ''ZXJuYXYvdXNlcnMiXSx1OXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXSxkOXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdO2Z1bmN0aW9uIGg5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KExlKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxPZSgxLCJEYXRhIiksaGUoKX19ZnVuY3Rpb24gZjl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMTkpLE9lKDEsIkFQSSBFeHBsb3JlciIpLGhlKCkpfWZ1bmN0aW9uIHA5dChjLGwpezEmYyYmKGRlKDAsImEiLDIwKSxPZSgxLCJMaW5lYWdl''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gZzl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjEpLE9lKDEsIk1ldGFkYXRhIiksaGUoKSl9ZnVuY3Rpb24gbTl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjIpLE9lKDEsIiBVc2VycyIpLGhlKCkpfWZ1bmN0aW9uIHY5dChjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxP''@;'; put 'put ''ZSgxLCJTdWJtaXR0ZWQiKSxoZSgpKX1mdW5jdGlvbiBiOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyNCksT2UoMSwiVG8gQXBwcm92ZSIpLGhlKCkpfWZ1bmN0aW9uIHk5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksbXQoMSxoOXQsMiwwLCJhIiwxMSkoMixmOXQs''@;'; put 'put ''MiwwLCJhIiwxMikoMyxwOXQsMiwwLCJhIiwxMykoNCxnOXQsMiwwLCJhIiwxNCkoNSxtOXQsMiwwLCJhIiwxNSkoNix2OXQsMiwwLCJhIiwxNikoNyxiOXQsMiwwLCJhIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSks''@;'; put 'put ''ZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJT''@;'; put 'put ''QVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSl9fWZ1bmN0aW9uIF85dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxPZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxtdCg1LHk5dCw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQ''@;'; put 'put ''YWdlKCksIiAiKX19ZnVuY3Rpb24gdzl0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBDOXQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIFM5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgy''@;'; put 'put ''LCJwIiwyNyksR3QoMywiY2xyLWljb24iLDMyKSxPZSg0LCIgUm9sZXMgIiksaGUoKSgpLG10KDUsQzl0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoInJvdXRlckxpbmsiLFlzKDIsZDl0KSksZmUoNCkseGUoImNscklmQWN0aXZl''@;'; put 'put ''IixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1mdW5jdGlvbiBNOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNyksR3QoNCwiY2xyLWljb24iLDI4KSxPZSg1LCIgVXNlcnMiKSxoZSgp''@;'; put 'put ''KCksR3QoNiwiY2xyLXRhYi1jb250ZW50IiksaGUoKSxkZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLEd0KDEwLCJjbHItaWNvbiIsMjkpLE9lKDExLCIgR3JvdXBzIiksaGUoKSgpLG10KDEyLHc5dCwxLDAsImNsci10YWItY29udGVudCIsMzApLGhlKCksbXQoMTMs''@;'; put 'put ''Uzl0LDYsMywiY2xyLXRhYiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHhlKCJyb3V0ZXJMaW5rIixZcyg0LGM5dCkpLGZlKDYpLHhlKCJyb3V0ZXJMaW5rIixZcyg1LHU5dCkpLGZlKDQpLHhlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9n''@;'; put 'put ''cm91cHMiKSksZmUoKSx4ZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24geDl0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksT2UoMiwiVGFibGVzIiksaGUoKSxkZSgzLCJhIiwzNCksT2UoNCwiRXhjZWwgTWFwcyIpLGhlKCks''@;'; put 'put ''ZGUoNSwiYSIsMzUpLE9lKDYsIk11bHRpIExvYWQiKSxoZSgpKCkpfWZ1bmN0aW9uIEU5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxPZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxtdCg1LHg5dCw3LDAsImNsci1kcm9w''@;'; put 'put ''ZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19bGV0IGk0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgS3IsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVu''@;'; put 'put ''PWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRv''@;'; put 'put ''Qm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIs''@;'; put 'put ''dGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5y''@;'; put 'put ''ZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h''@;'; put 'put ''bWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMu''@;'; put 'put ''cmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UodmMpLEdlKHRsKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKHM5dCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLnNpZGViYXJOYXY9Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsx''@;'; put 'put ''JmQmJkh0KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uTW91c2VNb3ZlKHYpfSwwLCQzKSgibW91c2V1cCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZVVwKHYpfSwhMSwkMyl9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0Nv''@;'; put 'put ''bnRlbnRTZWxlY3RvcnM6bDl0LGRlY2xzOjksdmFyczoxMyxjb25zdHM6W1sic2lkZWJhck5hdiIsIiJdLFsiaWQiLCJzaWRlYmFyTmF2Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHN1Yi1kcm9wZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsIm5hdi1kaXZpZGVyIl0sWzEsIm5hdi10cmVlIiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywibW91c2Vkb3duIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzdWItZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwi''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlIiwiYnRuIiwiYnRuLXByaW1hcnkiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5h''@;'; put 'put ''dkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3Rp''@;'; put 'put ''dmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91''@;'; put 'put ''dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJy''@;'; put 'put ''b3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIi''@;'; put 'put ''LCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2Fs''@;'; put 'put ''TmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3Rp''@;'; put 'put ''dmUiLCJhY3RpdmUiXSxbMSwicC0xMCJdLFsiY2xyVGFiTGluayIsIiIsMSwidXNlci1uYXYtYnRuIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInplcm8tbWFyZ2luIl0sWyJzaGFwZSIsInVzZXIiXSxbInNoYXBlIiwidXNlcnMiXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdJZiJdLFsic2hhcGUi''@;'; put 'put ''LCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvZXhjZWwtbWFwcyIsInJvdXRlckxp''@;'; put 'put ''bmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9tdWx0aS1sb2FkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO3NhKCksZGUoMCwiY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdiIsMSwwKSxtdCgyLF85dCw2LDEsImRpdiIsMikoMyxNOXQsMTQsNiwiY2xyLXRhYnMiLDMpKDQsRTl0LDYsMSwiZGl2IiwyKSxHdCg1LCJkaXYiLDQpLGRlKDYsImRpdiIsNSksSHQoInNjcm9sbCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25UcmVlU2Ny''@;'; put 'put ''b2xsKE0pKX0pLFlyKDcpLGhlKCksZGUoOCwic3BhbiIsNiksSHQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNpemVTdGFydCgpKX0pLGhlKCkoKX0yJmQmJihfZCgid2lkdGgiLGguc2lkZWJhcldpZHRoLCJweCIpKCJtYXgtd2lkdGgiLGguc2lkZWJhck1h''@;'; put 'put ''eFdpZHRoLCJweCIpLFRyKCJjbG9zZWQiLCFoLnNpZGViYXJPcGVuKSgicmVzaXppbmciLGgucmVzaXppbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCkseGUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXcvdXNlcm5hdiIpKSxmZSgpLHhlKCJuZ0lmIixo''@;'; put 'put ''LmlzTWFpblJvdXRlKCJob21lIikpLGZlKDQpLFRyKCJyZXNpemluZyIsaC5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W2JhLEhsLEh5LEwyLF9tLENtLE03LHdtLHltLEM3LFFZLHRHLGw1LHA3LGc3LGMxLHB5XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFQ5''@;'; put 'put ''dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiBBOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdCho''@;'; put 'put ''LmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIGs5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5wdXQiLDEwLDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxl''@;'; put 'put ''KCk7cmV0dXJuIG1pKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LFQ5dCwxLDAsImNsci1pY29uIiwxMSkoNSxB''@;'; put 'put ''OXQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1m''@;'; put 'put ''dW5jdGlvbiBEOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gSTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDE0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksTGUoKTtjb25zdCBoPWhhKDMpLGY9TGUoMikuJGltcGxpY2l0''@;'; put 'put ''LHY9TGUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSxoZSgpfX1mdW5jdGlvbiBSOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw4KSgxLCJkaXYiLDkpKDIsImlucHV0''@;'; put 'put ''IiwxOSwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgy''@;'; put 'put ''KS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksbXQoNCxEOXQsMSwwLCJjbHItaWNvbiIsMTEpKDUsSTl0LDEsMCwiY2xyLWljb24iLDEyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoMikuJGltcGxpY2l0O2ZlKDIp''@;'; put 'put ''LHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBMOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gTzl0KGMsbCl7MSZjJiZH''@;'; put 'put ''dCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIFA5dChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI5KSgxLCJzcGFuIiksT2UoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSgpKX1mdW5jdGlv''@;'; put 'put ''biBGOXQoYyxsKXsxJmMmJihjaSgwKSxtdCgxLFA5dCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSx1aSgpKX1mdW5jdGlvbiBIOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLm5nVmFyLGY9TGUoKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQsTT1MZSgpO3JldHVybiBDdChoPyIiOk0ub25UYWJsZUNsaWNrKGYsdikpfSksY2koMiwyMiksbXQoMyxMOXQsMSwwLCJjbHItaWNvbiIsMjMpKDQsTzl0LDEsMCwiY2xyLWljb24iLDI0KSx1aSgp''@;'; put 'put ''LE9lKDUpLGhlKCksbXQoNixGOXQsMiwwLCJuZy1jb250YWluZXIiLDI1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9TGUoKS4kaW1wbGljaXQsaD1MZSgyKS4kaW1wbGljaXQsZj1MZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFj''@;'; put 'put ''dGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCkseGUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxJcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLGZlKCkseGUoIm5nSWYi''@;'; put 'put ''LGEpfX1mdW5jdGlvbiBOOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksbXQoMSxIOXQsNyw5LCJjbHItdG9vbHRpcCIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9TGUoMyk7ZmUoKSx4ZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJs''@;'; put 'put ''ZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFY5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LnRyZWVOb2RlQ2xp''@;'; put 'put ''Y2tlZChoLGYpLEN0KHYubGliPWYuTElCUkFSWVJFRil9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMTcpLEh0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9TGUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLEN0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLEd0KDIsImNsci1pY29uIiwxOCksT2UoMyksaGUoKSxtdCg0LFI5dCw2LDMsImNs''@;'; put 'put ''ci10cmVlLW5vZGUiLDIpKDUsTjl0LDIsMSwiY2xyLXRyZWUtbm9kZSIsMyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5n''@;'; put 'put ''VGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLElyKCIgIixhLkxJQlJBUllSRUYsIiAiKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlcyksZmUoKSx4ZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBCOXQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLFY5dCw2LDcsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDE1KSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gajl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzMCkoMSwiZGl2IiwzMSkoMiwic3BhbiIsMzIpLE9lKDMsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSgpKX1mdW5jdGlv''@;'; put 'put ''biB6OXQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNiksT2UoMSwiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxoZSgpKX1mdW5jdGlvbiBVOXQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNiksT2UoMSwiIE5vIEVkaXRhYmxlIFRhYmxlcyBDb25maWd1cmVkICIpLGhlKCkpfWZ1bmN0aW9uIFo5dChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzMpLEd0KDEsImltZyIsMzQpLG10KDIsejl0LDIsMCwicCIsMzUpKDMsVTl0LDIsMCwicCIsMzUpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHhlKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVM''@;'; put 'put ''aWJyYXJpZXMubGVuZ3RoKT4wKSxmZSgpLHhlKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKTwxKX19bGV0IFc5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnJvdXRlPWEsdGhpcy5y''@;'; put 'put ''b3V0ZXI9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5oZWxwZXJTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLnRyZWVOb2RlTGlicmFyaWVzPW51bGwsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0i''@;'; put 'put ''Iix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllJRCE9PWQuTElCUkFSWUlEJiYoaC5leHBh''@;'; put 'put ''bmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXtkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQuZXhwYW5kZWQmJiF0aGlz''@;'; put 'put ''LnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkoYSwhMSxkKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfXNlbGVjdExpYnJhcnkoYSxkLGgpe2gubG9hZGluZ1RhYmxlcz0hMDtsZXQgZix2PVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYmKGY9dGhpcy5saWJz''@;'; put 'put ''QW5kVGFibGVzW2FdLHRoaXMudGFibGU9dm9pZCAwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YSkpe2xldCBNPWYuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybi0xPT09di5pbmRleE9mKEQpJiYodi5wdXNoKEQpLCEwKX0pO3RoaXMudGFibGVzPU0sS24uZWRpdG9yLmxpYnJhcmllcz10''@;'; put 'put ''aGlzLmxpYnJhcmllc31Lbi5lZGl0b3IubGlicmFyeT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9ITB9c2VsZWN0VGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmxpYlRhYj1oLmxpYisiLiIr''@;'; put 'put ''aC50YWJsZSxoLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxLbi5lZGl0b3IudGFibGU9YSxkfHxoLmNsZWFyR2xvYmFsc0ZpbHRlcigpfSkoKX1jbGVhckdsb2JhbHNGaWx0ZXIoKXtLbi5lZGl0b3IuZmlsdGVyLmxpYmRzPSIiLEtuLmVkaXRvci5maWx0ZXIud2hlcmVDbGF1c2U9IiIs''@;'; put 'put ''S24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiLEtuLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxLbi5lZGl0b3IuZmlsdGVyLnZhbHM9W10sS24uZWRpdG9yLmZpbHRlci5jb2xzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10''@;'; put 'put ''aGlzLmxpYiYmZD09PXRoaXMudGFibGV9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy50cmVlTm9kZUxpYnJhcmllcyx0aGlzLmxpYnJh''@;'; put 'put ''cmllc1NlYXJjaCwiTElCUkFSWVJFRiIpLEtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofW9uVGFibGVDbGljayhhLGQpe3RoaXMudGFibGU9YSx0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy5zZWxlY3RUYWJsZShhKSx0aGlzLmVkaXRUYWJsZSgpfWVk''@;'; put 'put ''aXRUYWJsZSgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliKyIuIit0aGlzLnRhYmxlKX1nZXRMaWJyYXJ5VGFibGVTdGF0ZSgpe2lmKG51bGwhPT1Lbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMmJih0aGlzLnRyZWVOb2RlTGlicmFyaWVzPUtuLmVkaXRv''@;'; put 'put ''ci50cmVlTm9kZUxpYnJhcmllcyksIiIhPT1Lbi5lZGl0b3IubGlicmFyeSl7dGhpcy5saWI9S24uZWRpdG9yLmxpYnJhcnk7bGV0IGE9bnVsbDt0aGlzLnRyZWVOb2RlTGlicmFyaWVzJiYoYT10aGlzLnRyZWVOb2RlTGlicmFyaWVzLmZpbmQoZD0+ZC5MSUJSQVJZUkVGPT09dGhpcy5saWIp''@;'; put 'put ''KSx0aGlzLnNlbGVjdExpYnJhcnkoS24uZWRpdG9yLmxpYnJhcnksITAsYSl9fWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUtuLmVkaXRvci5saWJzQW5kVGFibGVzLHRoaXMubGlicmFyaWVzPUtuLmVkaXRvci5saWJyYXJpZXMsdGhpcy5nZXRMaWJyYXJ5VGFibGVTdGF0''@;'; put 'put ''ZSgpLHRoaXMubG9hZGluZz0hMX1uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UoQ3UpLEdlKHUxKSxHZShHdSksR2UodmMpLEdlKHRsKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6''@;'; put 'put ''WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OCx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFy''@;'; put 'put ''ZWEiXSxbMSwiY2FyZC1ibG9jayJdLFsiY2xhc3MiLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIi''@;'; put 'put ''LCJhcHBTdGVhbEZvY3VzIiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwz''@;'; put 'put ''LCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJF''@;'; put 'put ''eHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFt''@;'; put 'put ''ZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJv''@;'; put 'put ''bHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsi''@;'; put 'put ''Y2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJP''@;'; put 'put ''R1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEwIiwiY2RzLXRleHQiLCJzZWN0''@;'; put 'put ''aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJjbHItdHJlZSIpLG10KDIsazl0LDYsMywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsMikoMyxCOXQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpKDUsImRpdiIsNSksbXQoNixqOXQsNCwwLCJkaXYiLDYpKDcsWjl0LDQsMiwiZGl2Iiw3KSxoZSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwobnVsbD09aC50cmVlTm9kZUxpYnJhcmllcz9u''@;'; put 'put ''dWxsOmgudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnRyZWVOb2RlTGlicmFyaWVzKSxmZSgzKSx4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbcWwsbmwsR3MsRWgsUGQscDUsSGws''@;'; put 'put ''ajAsTDIsWjEsbTcsYjcsdjcsaTQsbnMsYmEsUzIsY3AsU3cscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWTl0PWM9Pntmb3IoY29uc3QgbCBpbiBjKWlmKCJfX3Jvd051bV9fIiE9PWwpcmV0dXJuITE7cmV0dXJuITB9LGV0ZT1jPT57Y29uc3QgYT1jLm1hdGNo''@;'; put 'put ''KC9SXFsoXGQrKVxdQ1xbKFxkKylcXS8pO3JldHVybiBhP3tyb3c6cGFyc2VJbnQoYVsxXSwxMCksY29sdW1uOnBhcnNlSW50KGFbMl0sMTApfTpudWxsfSxWNmU9KGMsbCk9PntpZihjLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYoYz1jLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxjLnN0''@;'; put 'put ''YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBhPWV0ZShjKTtpZihhKXtjb25zdHtyb3c6ZCxjb2x1bW46aH09YTtjPWt1LnV0aWxzLmVuY29kZV9jZWxsKHtyOmQtMSxjOmgtMX0pfX1pZihjLnN0YXJ0c1dpdGgoIk1BVENIICIpKXtsZXQgYT0iIjtjb25zdCBkPWMubWF0Y2goL0NcW1xk''@;'; put 'put ''K1xdOiguKykvKTtkJiYoYT1kWzFdKTtjb25zdCBmPWMuc3BsaXQoIiAiKVsxXTtsZXQgdj0iIixNPS0xLEQ9IiI7aWYoaXNOYU4oTnVtYmVyKGYpKT92PWY6TT1wYXJzZUludChmKSwtMSE9PU0pe2NvbnN0IGNlPWxbTS0xXTtmb3IoY29uc3QgYmUgaW4gY2UpaWYoIl9fcm93TnVtX18iIT09''@;'; put 'put ''YmUmJmNlW2JlXT09PWEpe0Q9YmUrTTticmVha319ZWxzZSBmb3IobGV0IGNlPTA7Y2U8bC5sZW5ndGg7Y2UrKylpZihsW2NlXVt2XT09PWEpe0Q9disoY2UrMSk7YnJlYWt9Y29uc3QgWj1rdS51dGlscy5kZWNvZGVfY2VsbChEKSxyZT1ldGUoYyk7aWYocmUpe2NvbnN0e3JvdzpjZSxjb2x1''@;'; put 'put ''bW46YmV9PXJlO2M9a3UudXRpbHMuZW5jb2RlX2NlbGwoe3I6Wi5yK2NlLGM6Wi5jK2JlfSl9fXJldHVybiBjfSwkOXQ9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBLOXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDI4KSxHdCgxLCJjbHItc3Bpbm5lciIsMjkpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IHE5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBYOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIGguc2VhcmNoU3RyaW5nPSIiLEN0KGgu''@;'; put 'put ''eGxtYXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBKOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJjbHItdHJlZS1ub2RlIikoMiwiYnV0dG9uIiwzMiksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBD''@;'; put 'put ''dChMZSgpLnhsbWFwT25DbGljayhoKSl9KSxHdCgzLCJjbHItaWNvbiIsMzMpLE9lKDQpLGhlKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7ZmUoMiksVHIoImFjdGl2ZSIsZC5pc0FjdGl2ZVhMTWFwKGEuaWQpKSxmZSgyKSxJcigiICIsYS5pZCwiICIpfX1m''@;'; put 'put ''dW5jdGlvbiBROXQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNyksT2UoMSwiIFBsZWFzZSBzZWxlY3QgYSBtYXAgIiksaGUoKSl9ZnVuY3Rpb24gZXZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzcpLE9lKDEsIiBObyBleGNlbCBtYXAgaXMgZm91bmQgIiksaGUoKSl9ZnVuY3Rpb24gdHZ0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwiZGl2IiwzNCksR3QoMSwiaW1nIiwzNSksbXQoMixROXQsMiwwLCJwIiwzNikoMyxldnQsMiwwLCJwIiwzNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLnhsbWFwcy5sZW5n''@;'; put 'put ''dGg8MSl9fWZ1bmN0aW9uIG52dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzgpKDEsInNwYW4iLDM5KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIpKDQsImg0IiksT2UoNSksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDUpLENyKGEuaXNMb2FkaW5nRGVz''@;'; put 'put ''Yyl9fWZ1bmN0aW9uIHJ2dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gaXZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBhdnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIG92dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O2RlKDAsImRpdiIsNDApLEh0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25TaG93VXBsb2FkTW9kYWwoKSl9KSxkZSgxLCJjbHItdGFicyIpKDIsImNsci10YWIiKSgzLCJidXR0b24iLDQxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgaD1MZSgpO3JldHVybiBDdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uUnVsZXMpfSksT2UoNCwiUnVsZXMiKSxoZSgpLG10KDUscnZ0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksaGUoKSxkZSg2LCJjbHItdGFiIikoNywiYnV0dG9uIiw0MSksSHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLkRhdGEpfSksT2UoOCwiRGF0YSIpLGhlKCksbXQoOSxpdnQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDQyKSxoZSgpKCksbXQoMTAsYXZ0LDEsMCwibmctY29udGFpbmVyIiw0MyksZGUoMTEs''@;'; put 'put ''ImRpdiIsNDQpKDEyLCJoMyIsNDUpLE9lKDEzKSxoZSgpLGRlKDE0LCJpIiw0NSksT2UoMTUpLGhlKCksZGUoMTYsInAiLDQ1KSxPZSgxNywiIFJ1bGVzIFNvdXJjZTogIiksZGUoMTgsImEiLDQ2KSxPZSgxOSksaGUoKSgpLGRlKDIwLCJwIiw0NSksT2UoMjEsIiBUYXJnZXQgZGF0YXNldDog''@;'; put 'put ''IiksZGUoMjIsImEiLDQ2KSxPZSgyMyksaGUoKSgpKCksZGUoMjQsImRpdiIsNDcpLEd0KDI1LCJob3QtdGFibGUiLDQ4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1oYSg0MSk7ZmUoNSkseGUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcyks''@;'; put 'put ''ZmUoNCkseGUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5EYXRhKSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxmZSgzKSxJcigiICIsYS5zZWxlY3RlZFhMTWFwLmlkLCIgIiksZmUoMiksQ3IoYS5zZWxlY3RlZFhMTWFwLmRlc2NyaXB0aW9uKSxmZSgz''@;'; put 'put ''KSx4ZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnJ1bGVzU291cmNlKSxmZSgpLElyKCIgIixhLnJ1bGVzU291cmNlLCIgIiksZmUoMykseGUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTKSxmZSgpLElyKCIgIixhLnNlbGVjdGVkWExN''@;'; put 'put ''YXAudGFyZ2V0RFMsIiAiKSxmZSgyKSx4ZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoImNvbEhlYWRlcnMiLGEuc2Vs''@;'; put 'put ''ZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0hlYWRlcnM6YS54bFVwbG9hZEhlYWRlcikoImNvbHVtbnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0NvbHVtbnM6YS54bFVwbG9hZENvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImhl''@;'; put 'put ''aWdodCIsIjEwMCUiKSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWNrZXIpKCJjZWxscyIsYS5nZXRDZWxsQ29uZmlndXJhdGlvbikoIm1heFJvd3MiLGEuaG90VGFibGVNYXhSb3dzKSgibWFudWFsQ29sdW1u''@;'; put 'put ''UmVzaXplIiwhMCkoInJvd0hlYWRlcnMiLGEucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIiwxNSkoInJvd0hlaWdodHMiLDIwKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBzdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUx''@;'; put 'put ''KSgxLCJidXR0b24iLDUyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxkZSgzLCJzcGFuIiksT2UoNCwiVXBsb2FkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIGx2dChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuc3VibWl0RXhjZWwoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxPZSg0LCJTdWJtaXQiKSxoZSgpKCkoKX19''@;'; put 'put ''ZnVuY3Rpb24gY3Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLEd0KDIsImNsci1pY29uIiw1NSksZGUoMywi''@;'; put 'put ''c3BhbiIpLE9lKDQsIkRpc2NhcmQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gdXZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0OSksbXQoMSxzdnQsNSwwLCJkaXYiLDUwKSgyLGx2dCw1LDAsImRpdiIsNTApKDMsY3Z0LDUsMCwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZCksZmUoKSx4ZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksZmUoKSx4ZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciBy''@;'; put 'put ''Zj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9MF09Ik5vTWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixjW2MuUmVhZHlUb1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5n''@;'; put 'put ''RGF0YSIsY1tjLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLGNbYy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLGNbYy5TdWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfShyZnx8e30pLE13PWZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''W2MuUnVsZXM9MF09IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIsY30oTXd8fHt9KTtsZXQgQjZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhp''@;'; put 'put ''cy5yb3V0ZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9TSx0aGlzLnNhc1NlcnZpY2U9RCx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBmZCx0aGlzLlN0YXR1c0VudW09cmYsdGhpcy5UYWJzRW51bT1N''@;'; put 'put ''dyx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMucnVsZXNTb3VyY2U9S24uZGNMaWIrIi5NUEVfWExNQVBfUlVMRVMiLHRoaXMueGxtYXBzPVtdLHRoaXMuc2VsZWN0ZWRYTE1hcD12b2lkIDAsdGhpcy5zZWFyY2hTdHJpbmc9IiIsdGhpcy54bG1hcHNMb2FkaW5nPSEwLHRoaXMuaXNM''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1yZi5Ob01hcFNlbGVjdGVkLHRoaXMueGxtYXBSdWxlc0hlYWRlcnM9WyJYTE1BUF9TSEVFVCIsIlhMTUFQX1JBTkdFX0lEIiwiWExNQVBfU1RBUlQiLCJYTE1BUF9GSU5JU0giXSx0aGlzLnhsbWFwUnVsZXNDb2x1''@;'; put 'put ''bW5zPVt7ZGF0YToiWExNQVBfU0hFRVQifSx7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiWExNQVBfU1RBUlQifSx7ZGF0YToiWExNQVBfRklOSVNIIn1dLHRoaXMueGxtYXBSdWxlcz1bXSx0aGlzLnhsVXBsb2FkSGVhZGVyPVsiWExNQVBfUkFOR0VfSUQiLCJST1dfTk8iLCJDT0xf''@;'; put 'put ''Tk8iLCJWQUxVRV9UWFQiXSx0aGlzLnhsVXBsb2FkQ29sdW1ucz1be2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlJPV19OTyJ9LHtkYXRhOiJDT0xfTk8ifSx7ZGF0YToiVkFMVUVfVFhUIn1dLHRoaXMueGxEYXRhPVtdLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaGFzQmFz''@;'; put 'put ''ZURyb3Bab25lT3Zlcj0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy51cGxvYWRlcj1uZXcgTGVlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0''@;'; put 'put ''aGlzLmhvdFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzB9YWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKXtkLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX14bG1hcE9uQ2xpY2soYSl7YS5p''@;'; put 'put ''ZCE9PXRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQmJih0aGlzLnNlbGVjdGVkWExNYXA9YSx0aGlzLnhsRGF0YT1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29t''@;'; put 'put ''cExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy5zZWxlY3RlZFRhYj1Ndy5SdWxlcyx0aGlzLnZpZXdYTE1hcFJ1bGVzKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUvZXhjZWwtbWFwcy8iK2EuaWQpKX14bG1hcExpc3RPbkZpbHRlcigpe3RoaXMueGxt''@;'; put 'put ''YXBzPXRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aD4wP0tuLnhsbWFwcy5maWx0ZXIoZD0+ZC5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTpLbi54bG1hcHN9aXNBY3RpdmVYTE1hcChhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFhMTWFw''@;'; put 'put ''Py5pZD09PWF9bWF4V2lkdGhDaGVja2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldENlbGxDb25maWd1cmF0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7cmV0dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITB9ZmlsZU92''@;'; put 'put ''ZXJCYXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZighZilyZXR1cm47Y29uc3Qgdj1mLm5hbWU7aWYodGhpcy5maWxlbmFtZT12LCJ4bHMiPT09di5zbGljZSh2''@;'; put 'put ''Lmxhc3RJbmRleE9mKCIuIikrMSx2Lmxhc3RJbmRleE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPXJmLkV4dHJhY3RpbmdEYXRh''@;'; put 'put ''O2NvbnN0IEQ9bmV3IEZpbGVSZWFkZXI7RC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgWj1lZShmdW5jdGlvbioocmUpe2NvbnN0IGNlPShjPT57Y29uc3QgbD1uZXcgVWludDhBcnJheShjKTtsZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWErPVN0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUobFtoXSk7cmV0dXJuIGF9KShyZS50YXJnZXQucmVzdWx0KTtsZXQgYmU7Y29uc3QgRWU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7YmU9a3UucmVhZChjZSx7''@;'; put 'put ''Li4uRWV9KX1jYXRjaChCZSl7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxCZSx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFiZSlyZXR1cm4gaC5pc0xvYWRpbmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPXJmLlJlYWR5VG9VcGxvYWQsdm9pZCBo''@;'; put 'put ''LnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2guZXh0cmFjdERhdGEoYmUpfSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLEQucmVhZEFzQXJyYXlCdWZmZXIoZil9ZWxzZSB0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIs''@;'; put 'put ''dGhpcy5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4iLiBQ''@;'; put 'put ''bGVhc2UgdXBsb2FkIGV4Y2VsIGZpbGUuJyl9ZGlzY2FyZEV4dHJhY3RlZERhdGEoKXt0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx0aGlzLnhsRGF0YT1bXSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMu''@;'; put 'put ''ZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMuc3VibWl0KCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1zdWJtaXQoKXtpZighdGhpcy5zZWxlY3RlZFhMTWFwfHwhdGhpcy54bERhdGEubGVuZ3RoKXJldHVybjt0aGlzLnN0YXR1cz1yZi5TdWJtaXR0aW5nLHRoaXMuaXNMb2Fk''@;'; put 'put ''aW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iU3VibWl0dGluZyBleHRyYWN0ZWQgZGF0YSI7Y29uc3QgYT1bXTtmb3IoY29uc3QgTSBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7ZmlsZTpNLGZpbGVOYW1lOk0ubmFtZX0pO2NvbnN0IGQ9T2JqZWN0LmtleXModGhpcy54bERhdGFb''@;'; put 'put ''MF0pLmpvaW4oIiwiKSsiXG4iK3RoaXMueGxEYXRhLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpLm1hcChNPT5PYmplY3QudmFsdWVzKE0pLmpvaW4oIiwiKSkuam9pbigiXG4iKSxoPW5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vY3N2''@;'; put 'put ''In0pLGY9cWVlKGgsdGhpcy5maWxlbmFtZSsiLmNzdiIpO2EucHVzaCh7ZmlsZTpmLGZpbGVOYW1lOmYubmFtZX0pLHRoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixhLHt0YWJsZTp0aGlzLnNlbGVjdGVkWExNYXAudGFyZ2V0RFN9KS50aGVu''@;'; put 'put ''KE09PntpZihNLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0KXtjb25zdCBEPU0uYWRhcHRlclJlc3BvbnNlO3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLEQuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOkQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhU''@;'; put 'put ''OkQuU1lTRVJST1JURVhULE1BQzpELnNhc2pzQWJvcnRbMF0uTUFDfSl9ZWxzZSBNLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK00uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKX0pLmNhdGNoKE09Pnt0aGlz''@;'; put 'put ''LmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixNLnJlc3BvbnNlKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnN0YXR1cz1yZi5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIn0pfWV4dHJhY3REYXRhKGEpe2NvbnN0''@;'; put 'put ''IGQ9W107dGhpcy54bG1hcFJ1bGVzLmZvckVhY2goaD0+e2xldCBmPWguWExNQVBfU0hFRVQ7aWYoZi5zdGFydHNXaXRoKCIvIikpe2NvbnN0IEVlPWYuc3BsaXQoIi8iKVsxXSxCZT1wYXJzZUludChFZSktMTtmPWEuU2hlZXROYW1lc1tCZV19Y29uc3Qgdj1hLlNoZWV0c1tmXSxNPWt1LnV0''@;'; put 'put ''aWxzLnNoZWV0X3RvX2pzb24odix7cmF3OiEwLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSksRD1WNmUoaC5YTE1BUF9TVEFSVCxNKSxaPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBjO2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwi''@;'; put 'put ''IikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9ZXRlKGwpO2lmKGQpe2NvbnN0e3JvdzpoLGNvbHVtbjpmfT1kLHtyOnYsYzpNfT1rdS51dGlscy5kZWNvZGVfY2VsbChjKTtsPWt1LnV0aWxzLmVuY29kZV9jZWxsKHtyOnYraCxjOk0rZn0pfX1pZihsLnN0YXJ0c1dpdGgo''@;'; put 'put ''Ik1BVENIICIpJiYobD1WNmUobCxhKSksIkxBU1RET1dOIj09PWwpe2NvbnN0e3I6ZCxjOmh9PWt1LnV0aWxzLmRlY29kZV9jZWxsKGMpLGY9a3UudXRpbHMuZW5jb2RlX2NvbChoKTtsZXQgdj1kO2ZvcihsZXQgTT1kKzE7TTxhLmxlbmd0aCYmYVtNXVtmXTtNKyspdj1NO2w9ZisodisxKX1p''@;'; put 'put ''ZigiQkxBTktST1ciPT09bCl7Y29uc3R7cjpkfT1rdS51dGlscy5kZWNvZGVfY2VsbChjKTtsZXQgaD1kO2ZvcihsZXQgRD1kKzE7RDxhLmxlbmd0aCYmIVk5dChhW0RdKTtEKyspaD1EO2w9T2JqZWN0LmtleXMoYVtoXSkuZmlsdGVyKEQ9PiJfX3Jvd051bV9fIiE9PUQpLnJlZHVjZSgoRCxa''@;'; put 'put ''KT0+Wj5EP1o6RCwiIikrKGgrMSl9cmV0dXJuIGx9KShELGguWExNQVBfRklOSVNILE0pLHJlPWAke0R9OiR7Wn1gLGNlPWt1LnV0aWxzLmRlY29kZV9yYW5nZShyZSksYmU9a3UudXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAscmFuZ2U6cmUsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9''@;'; put 'put ''KTtmb3IobGV0IEVlPTA7RWU8YmUubGVuZ3RoO0VlKyspe2NvbnN0IEJlPWJlW0VlXTtmb3IobGV0IHFlPWNlLnMuYyxydD0wO3FlPD1jZS5lLmM7cWUrKyxydCsrKXtjb25zdCBwdD1rdS51dGlscy5lbmNvZGVfY29sKHFlKTtwdCBpbiBCZSYmZC5wdXNoKHtMT0FEX1JFRjoiMCIsWExNQVBf''@;'; put 'put ''SUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JBTkdFX0lELFJPV19OTzpFZSsxLENPTF9OTzpydCsxLFZBTFVFX1RYVDpCZVtwdF19KX19fSksdGhpcy5zdGF0dXM9cmYuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhp''@;'; put 'put ''cy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPU13LkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnNlbGVjdGVkWExNYXAmJihhLmlzTG9hZGluZz0hMCxhLmlzTG9hZGluZ0Rlc2M9IkxvYWRpbmcgZXhjZWwgcnVsZXMiLGEuc3RhdHVz''@;'; put 'put ''PXJmLkZldGNoaW5nUnVsZXMseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0WExNYXBSdWxlcyhhLnNlbGVjdGVkWExNYXAuaWQpLnRoZW4oZD0+e2EueGxtYXBSdWxlcz1kLnhsbWFwcnVsZXMsYS5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZH0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2Uu''@;'; put 'put ''ZXJyb3IoZCl9KSxhLmlzTG9hZGluZz0hMSxhLmlzTG9hZGluZ0Rlc2M9IiIpfSkoKX1sb2FkKCl7dGhpcy54bG1hcHM9S24ueGxtYXBzLHRoaXMueGxtYXBzTG9hZGluZz0hMTtjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO2lmKGEpe2NvbnN0IGQ9dGhpcy54bG1hcHMu''@;'; put 'put ''ZmluZChoPT5oLmlkPT09YSk7ZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1kLHRoaXMudmlld1hMTWFwUnVsZXMoKSl9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hfSl9bmdBZnRlclZp''@;'; put 'put ''ZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMubG9hZCgpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5sb2FkKCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7''@;'; put 'put ''cmV0dXJuIG5ldyhkfHxjKShHZSh2YyksR2UodTEpLEdlKFNkKSxHZShDdSksR2UoTHMpLEdlKFVoKSxHZSh0bCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoJDl0''@;'; put 'put ''LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoImNvbnRlbnQtY29udGFpbmVyIixoLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjQyLHZhcnM6''@;'; put 'put ''MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13''@;'; put 'put ''cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQs''@;'; put 'put ''Im5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFw''@;'; put 'put ''cERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIs''@;'; put 'put ''InVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHIt''@;'; put 'put ''cm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxp''@;'; put 'put ''bmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBsb2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0t''@;'; put 'put ''MCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGlt''@;'; put 'put ''ZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3Nl''@;'; put 'put ''bGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwi''@;'; put 'put ''IiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWyJj''@;'; put 'put ''ZHMtdGV4dCIsImxhYmVsTGluayIsMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90LXRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIs''@;'; put 'put ''InZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImhlaWdodCIsImFmdGVyR2V0Q29sSGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFkZXJz''@;'; put 'put ''Iiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJjbHItcm93IiwibS0wIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1jb2wtMTIgY2xyLWNvbC1sZy00Iiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUi''@;'; put 'put ''LCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwi''@;'; put 'put ''YXBwLXNpZGViYXIiKSxtdCgxLEs5dCwyLDAsImRpdiIsMyksZGUoMiwiY2xyLXRyZWUiKSgzLCJjbHItdHJlZS1ub2RlIiw0KSg0LCJkaXYiLDUpKDUsImlucHV0Iiw2LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zZWFyY2hTdHJpbmcsTSl8''@;'; put 'put ''fChoLnNlYXJjaFN0cmluZz1NKSxDdChNKX0pLEh0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCksbXQoNyxxOXQsMSwwLCJjbHItaWNvbiIsNykoOCxYOXQsMSwwLCJjbHItaWNvbiIsOCksaGUoKSgpLG10KDksSjl0LDUs''@;'; put 'put ''MywibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTAsImRpdiIsMTApLG10KDExLHR2dCw0LDIsImRpdiIsMTEpKDEyLG52dCw2LDEsImRpdiIsMTIpKDEzLG92dCwyNiwyNSwiZGl2IiwxMyksZGUoMTQsImNsci1tb2RhbCIsMTQpLEh0KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJu''@;'; put 'put ''IHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0pKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2MoTSwhMCkpfSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc2hvd1VwbG9hZE1vZGFsLE0p''@;'; put 'put ''fHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNSwiaDMiLDE1KSxPZSgxNiwiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDE3LCJkaXYiLDE2KSgxOCwiZGl2IiwxNykoMTksInNwYW4iKSxPZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoMjEs''@;'; put 'put ''ImRpdiIsMTgpKDIyLCJkaXYiLDE5KSgyMywiZGl2IiwyMCkoMjQsInNwYW4iLDIxKSgyNSwibGFiZWwiLDIyKSxPZSgyNiwiIEJyb3dzZSAiKSxoZSgpKCksZGUoMjcsImlucHV0IiwyMywxKSxIdCgiY2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhN''@;'; put 'put ''KSl9KSxoZSgpKCkoKSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwyNCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0TGltaXROb3RpY2UsTSl8fChoLnN1Ym1pdExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxNSks''@;'; put 'put ''T2UoMzEsIk5vdGljZSIpLGhlKCksZGUoMzIsImRpdiIsMTYpKDMzLCJwIiwyNSksT2UoMzQpLGhlKCkoKSxkZSgzNSwiZGl2IiwyNikoMzYsImJ1dHRvbiIsMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxPZSgzNywi''@;'; put 'put ''IENhbmNlbCAiKSxoZSgpLGRlKDM4LCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguc3VibWl0KCksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxPZSgzOSwiIFN1Ym1pdCAiKSxoZSgpKCkoKSgpLG10KDQwLHV2dCw0LDMsIm5nLXRlbXBsYXRl''@;'; put 'put ''IixudWxsLDIsSWMpfWlmKDImZCl7Y29uc3QgZj1oYSg2KTtmZSgpLHhlKCJuZ0lmIixoLnhsbWFwc0xvYWRpbmcpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGYudmFsdWUubGVuZ3Ro''@;'; put 'put ''PjApLGZlKCkseGUoIm5nRm9yT2YiLGgueGxtYXBzKSxmZSgyKSx4ZSgibmdJZiIsIWguc2VsZWN0ZWRYTE1hcCksZmUoKSx4ZSgibmdJZiIsaC5pc0xvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmlzTG9hZGluZyYmaC5zZWxlY3RlZFhMTWFwKSxmZSgpLHhlKCJ1cGxvYWRlciIsaC51cGxv''@;'; put 'put ''YWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMykseGUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSxmZSgyKSxwaSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxJcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3Ry''@;'; put 'put ''aWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRlbmNpZXM6W0RfLGMxLHFsLG5sLEdzLEVoLFBkLHA1LEhsLG91LEt1LEh5LGRzLFoxLF9tLENtLE03LHdtLHltLEM3LFJkLGk0LG5zLGJhLE4xLGVFLFI2ZSxMNmUscjRdLGVuY2Fwc3VsYXRpb246''@;'; put 'put ''Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZHZ0PVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOltyNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OkI2ZX0se3BhdGg6IjppZCIsY29tcG9uZW50OkI2ZX1dfV07bGV0IGh2dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQoZHZ0KSx6Y119KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IGZ2dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbYTksaHZ0LFJjLHowLFk5LFJhLE1BLG5mXX0pfX1yZXR1cm4gY30pKCkscHZ0PSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldC1yb3V0ZSJd''@;'; put 'put ''XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBndnQ9KGMs''@;'; put 'put ''bCxhKT0+e2wuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxtdnQ9WyJjb250ZW50QXJlYSJdLHZ2dD0oKT0+WyJodERhcmsiLCJodEN1c3RvbUhpZGRlbiJdO2Z1bmN0aW9uIGJ2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjQpLEd0KDEsImNs''@;'; put 'put ''ci1zcGlubmVyIiwyMiksaGUoKSl9ZnVuY3Rpb24geXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwyNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChoYSg0KS5jbGljaygpKX0pLE9lKDIsIiBCcm93c2UgZmlsZSAi''@;'; put 'put ''KSxoZSgpLGRlKDMsImlucHV0IiwyNywxKSxIdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkZpbGVDaGFuZ2UoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoImRpc2FibGVkIixudWxsIT09YS5zZWxlY3RlZEZpbGV8fGEuc3Vi''@;'; put 'put ''bWl0dGluZ0Nzdil9fWZ1bmN0aW9uIF92dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjUpKDEsImJ1dHRvbiIsMzApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25EaXNjYXJkKCkpfSksT2UoMiwiIERpc2NhcmQgIiksaGUoKSxk''@;'; put 'put ''ZSgzLCJidXR0b24iLDMxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uU3VibWl0QWxsKCkpfSksT2UoNCwiIFN1Ym1pdCBBbGwgIiksaGUoKSgpfX1mdW5jdGlvbiB3dnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24gQ3Z0KGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzcpfWZ1bmN0aW9uIFN2dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsd3Z0LDEsMCwiY2RzLWljb24iLDM0KSgyLEN2dCwxLDAsImNkcy1pY29uIiwzNSksdWkoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEu''@;'; put 'put ''c3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdC5zdWNjZXNzKX19ZnVuY3Rpb24gTXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0aW9uIHh2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBFdnQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihjaSgwKSxtdCgxLE12dCwxLDAsImNkcy1pY29uIiwzNCkoMix4dnQsMSwwLCJjZHMtaWNvbiIsMzgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIShhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KSksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5kYXRhc291cmNlLmxlbmd0aCYmYS5wYXJzZVJlc3VsdCl9fWZ1bmN0aW9uIFR2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBBdnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw0MSl9ZnVuY3Rpb24ga3Z0KGMsbCl7aWYoMSZjJiYoY2koMCks''@;'; put 'put ''bXQoMSxUdnQsMSwwLCJjZHMtaWNvbiIsMzgpKDIsQXZ0LDEsMCwiY2xyLXNwaW5uZXIiLDQwKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLnBhcnNpbmdUYWJsZSksZmUoKSx4ZSgibmdJZiIsYS5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBE''@;'; put 'put ''dnQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLEV2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMixrdnQsMywyLCJuZy1jb250YWluZXIiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIixhLmRhdGFzb3VyY2UpLGZlKCkseGUoIm5nSWYiLCFhLmRh''@;'; put 'put ''dGFzb3VyY2UpfX1mdW5jdGlvbiBJdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMiksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5vblBhcnNlZERhdGFzZXRD''@;'; put 'put ''bGljayhoKSl9KSxtdCgyLFN2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMyxEdnQsMywyLCJuZy1jb250YWluZXIiLDQpLGRlKDQsInNwYW4iLDMzKSxPZSg1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5zdWJtaXRSZXN1bHQpLGZlKCkseGUoIm5nSWYiLCFhLnN1Ym1pdFJlc3VsdCksZmUoMiksSXIoIiAiLGEubGliZHMsIiAiKX19ZnVuY3Rpb24gUnZ0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxfdnQsNSwwLCJkaXYiLDMpLGRlKDIsInAiLDI4KSxPZSgzLCJGb3VuZCB0YWJs''@;'; put 'put ''ZXM6IiksaGUoKSxkZSg0LCJjbHItdHJlZSIpLG10KDUsSXZ0LDYsNSwiY2xyLXRyZWUtbm9kZSIsMjkpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsIWEuZXhjZWxzU3VibWl0dGVkKSxmZSg0KSx4ZSgibmdGb3JPZiIsYS5wYXJzZWREYXRhc2V0cyl9fWZ1''@;'; put 'put ''bmN0aW9uIEx2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBPdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rpb24gUHZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDMpLEh0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikub25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2soaCkpfSksbXQoMixMdnQsMSwwLCJjZHMtaWNvbiIsMzQpKDMsT3Z0LDEsMCwiY2RzLWljb24iLDM1KSxHdCg0LCJjZHMtaWNvbiIsMzkpLE9l''@;'; put 'put ''KDUpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSx4ZSgibmdJZiIsYS5lcnJvciksZmUoKSx4ZSgibmdJZiIsYS5zdWNjZXNzKSxmZSgyKSxJcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBGdnQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihjaSgwKSxkZSgxLCJwIiw0MiksT2UoMiwiU3VibWl0dGVkIHRhYmxlczoiKSxoZSgpLGRlKDMsImNsci10cmVlIiksbXQoNCxQdnQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSx4ZSgibmdGb3JPZiIsYS5zdWJtaXR0ZWRD''@;'; put 'put ''c3ZEYXRhc2V0cyl9fWZ1bmN0aW9uIEh2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIsNDYpLE9lKDMsIiBQbGVhc2UgdXBsb2FkIGEgZmlsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIE52dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Np''@;'; put 'put ''KDApLGRlKDEsImRpdiIsNDcpKDIsImRpdiIsNDgpKDMsInAiLDQ5KSxPZSg0LCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoNSwic3Ryb25nIiksT2UoNiksaGUoKSxkZSg3LCJjbHItdG9vbHRpcCIpKDgsImNkcy1pY29uIiw1MCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChMZSgyKS5vbkRpc2NhcmRGaWxlKCkpfSksaGUoKSxkZSg5LCJjbHItdG9vbHRpcC1jb250ZW50IiksT2UoMTAsIiBEaXNjYXJkIHRoZSBmaWxlICIpLGhlKCkoKSgpLGRlKDExLCJwIiw1MSksT2UoMTIsIiBGaWxlIHNpemU6ICIpLGRlKDEzLCJzdHJvbmciKSxPZSgxNCksaGUoKSgpLGRl''@;'; put 'put ''KDE1LCJwIiw1MiksT2UoMTYsIiBQYXN0ZSBvciB0eXBlIHRoZSBsaXN0IG9mIGRhdGFzZXRzIHRvIHVwbG9hZDogIiksaGUoKSxkZSgxNywiY2xyLWNvbnRyb2wtaGVscGVyIiw1MyksT2UoMTgsIkVhY2ggcm93IGlzIG9uZSBkYXRhc2V0LiBXZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0''@;'; put 'put ''IHRhYmxlcyBieSB0aGUgc2hlZXRuYW1lIGFuZCBwb3B1bGF0ZSBpZiBhbnkuIiksaGUoKSxHdCgxOSwiaG90LXRhYmxlIiw1NCksZGUoMjAsImRpdiIsNTUpKDIxLCJidXR0b24iLDU2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uU3RhcnRQYXJzaW5n''@;'; put 'put ''RmlsZSgpKX0pLE9lKDIyLCIgQ29udGludWUgIiksaGUoKSgpKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg2KSxDcihhLnNlbGVjdGVkRmlsZS5uYW1lKSxmZSg4KSxJcigiIixhLnNlbGVjdGVkRmlsZS5zaXplTUIsIiBNQiIpLGZlKDUpLHhlKCJhZnRlckdldENvbEhlYWRl''@;'; put 'put ''ciIsYS5hZnRlckdldENvbEhlYWRlcikoInNldHRpbmdzIixhLmhvdFVzZXJEYXRhc2V0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KSxmZSgyKSx4ZSgiZGlzYWJsZWQiLCFhLm1hdGNoZWREYXRhc2V0cy5sZW5ndGgpKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcp''@;'; put 'put ''fX1mdW5jdGlvbiBWdnQoYyxsKXtpZigxJmMmJihjaSgwKSxHdCgxLCJjbHItaWNvbiIsNTcpLGRlKDIsInAiLDQ2KSxPZSgzKSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgzKSxJcigiICIsYS5maWxlTG9hZGluZ1N0YXRlLCIuLi4gIil9fWZ1bmN0aW9uIEJ2dChjLGwpezEm''@;'; put 'put ''YyYmKGNpKDApLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIGRhdGEgIiksaGUoKSx1aSgpKX1mdW5jdGlvbiBqdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxtdCgx''@;'; put 'put ''LFZ2dCw0LDEsIm5nLWNvbnRhaW5lciIsNCkoMixCdnQsNCwwLCJuZy1jb250YWluZXIiLDQpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLHhlKCJuZ0lmIixhLmZpbGVMb2FkaW5nU3RhdGUhPT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKSxmZSgpLHhlKCJuZ0lmIixhLmZpbGVM''@;'; put 'put ''b2FkaW5nU3RhdGU9PT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKX19ZnVuY3Rpb24genZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEsInN0cm9uZyIpLE9lKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0aW9uIFV2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJv''@;'; put 'put ''bmciKSxPZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gWnZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLE9lKDEsIiBFcnJvciBkZXRhaWxzOiAiKSxoZSgpKX1mdW5jdGlvbiBXdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDc3KSxIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSg1KTtyZXR1cm4gQ3QoaC5yZVN1Ym1pdFRhYmxlKGguYWN0aXZlUGFyc2VkRGF0YXNldCkpfSksT2UoMSwiIFJlc3VibWl0ICIpLGhlKCl9MiZjJiZ4ZSgiY2xyTG9hZGluZyIsTGUoNSkuc3VibWl0TG9hZGluZyl9ZnVuY3Rpb24gWXZ0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2OSkoMSwiZGl2IikoMiwicCIsNjIpLE9lKDMsIiBTdWJtaXQgU3RhdHVzOiAiKSxtdCg0LHp2dCwzLDAsInNwYW4iLDcwKSg1LFV2dCwzLDAsInNwYW4iLDcxKSxoZSgpLG10KDYsWnZ0LDIsMCwicCIsNzIpLGhlKCksZGUoNywiZGl2''@;'; put 'put ''IiksbXQoOCxXdnQsMiwxLCJidXR0b24iLDczKSxkZSg5LCJidXR0b24iLDc0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSg0KTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5sb2d8fGguYWN0aXZlUGFy''@;'; put 'put ''c2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuc3VjY2Vzc3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfSksT2UoMTAsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDQpO2ZlKDQpLHhlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBh''@;'; put 'put ''cnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzKSxmZSgpLHhlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJl''@;'; put 'put ''c3VsdC5lcnJvciksZmUoKSx4ZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKDIpLHhlKCJuZ0lmIiwhYS5zdWJtaXR0aW5nQ3N2JiYobnVsbD09YS5hY3RpdmVQ''@;'; put 'put ''YXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpKX19ZnVuY3Rpb24gR3Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksT2UoMiksUXMoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKDQpO2ZlKDIpLElyKCIgIixEYygzLDEsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLCIgIil9fWZ1bmN0aW9uICR2dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsInN0''@;'; put 'put ''cm9uZyIpLE9lKDIpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPUxlKDQpO2ZlKDIpLHp1KCciJyxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcz9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzLnNo''@;'; put 'put ''ZWV0TmFtZSwnIiEnLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMucmFuZ2VBZGRyZXNzLCIiKX19ZnVuY3Rpb24gS3Z0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwic3Ryb25nIiksT2UoMSwiTm8gZGF0YSBmb3VuZCIpLGhlKCkpfWZ1bmN0aW9uIHF2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDgxKSgxLCJzdHJvbmciKSxPZSgyLCJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhLi4uIiksaGUoKSxHdCgzLCJjbHItc3Bpbm5lciIsODIpLGhlKCkpfWZ1bmN0''@;'; put 'put ''aW9uIFh2dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsS3Z0LDIsMCwic3Ryb25nIiw0KSgyLHF2dCw0LDAsInNwYW4iLDgwKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoKSx4ZSgibmdJZiIsIWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpLGZlKCkseGUoIm5nSWYi''@;'; put 'put ''LGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBKdnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDgzKSxHdCgxLCJjbHItc3Bpbm5lciIsODQpLGhlKCkpfWZ1bmN0aW9uIFF2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLG10KDEsWXZ0LDExLDQs''@;'; put 'put ''ImRpdiIsNTkpKDIsR3Z0LDQsMywiZGl2Iiw2MCksZGUoMywiZGl2Iiw2MSkoNCwiZGl2IikoNSwicCIsNjIpLE9lKDYsIiBGb3VuZCBpbiByYW5nZTogIiksbXQoNywkdnQsMywyLCJuZy1jb250YWluZXIiLDQpKDgsWHZ0LDMsMiwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDksInAiLDYz''@;'; put 'put ''KSxPZSgxMCwiIERhdGFzZXQ6ICIpLGRlKDExLCJzdHJvbmciKSgxMiwiY2xyLXRvb2x0aXAiKSgxMywiYSIsNjQpLE9lKDE0KSxoZSgpLGRlKDE1LCJjbHItdG9vbHRpcC1jb250ZW50Iiw2NSksT2UoMTYsIiBDbGljayB0byBlZGl0IHRoZSB0YWJsZSAiKSxoZSgpKCkoKSgpKCksZGUoMTcs''@;'; put 'put ''ImRpdiIpKDE4LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgxOSwiaW5wdXQiLDY2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKTtyZXR1cm4gbWkoZi5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24saCl8fChmLmFjdGl2ZVBh''@;'; put 'put ''cnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbj1oKSxDdChoKX0pLGhlKCksZGUoMjAsImxhYmVsIiksT2UoMjEsIkluY2x1ZGUgaW4gc3VibWlzc2lvbiIpLGhlKCkoKSgpKCksbXQoMjIsSnZ0LDIsMCwiZGl2Iiw2NyksR3QoMjMsImhvdC10YWJsZSIsNjgpLHVpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQpLGZlKCkseGUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9y''@;'; put 'put ''KSxmZSg1KSx4ZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSg1KSx4ZSgicm91dGVyTGluayIsIi9lZGl0b3IvIithLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMp''@;'; put 'put ''LGZlKCksQ3IoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLHhlKCJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIpKCJjbHJTaXplIiwic20iKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24pLHhlKCJkaXNhYmxlZCIs''@;'; put 'put ''IShhLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZSYmYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSksZmUoMykseGUoIm5nSWYiLGEuaXNIb3RIaWRkZW4pLGZlKCkseGUoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgiY2xhc3NOYW1lIixZ''@;'; put 'put ''cygxOCx2dnQpKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImZpbHRlcnMiLCEwKX19ZnVuY3Rpb24gZWJ0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoY2koMCksbXQoMSxqdnQsMywyLCJkaXYiLDkpKDIsUXZ0LDI0LDE5LCJuZy1jb250YWluZXIiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0KSxmZSgpLHhlKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQp''@;'; put 'put ''fX1mdW5jdGlvbiB0YnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNTgpLGRlKDIsInAiLDQ2KSxPZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGRhdGFzZXQgb24gdGhlIGxlZnQgdG8gcmV2aWV3IHRoZSBzdWJtaXQgcmVzdWx0cyAiKSxoZSgpKCkpfWZ1bmN0aW9u''@;'; put 'put ''IG5idChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsdGJ0LDQsMCwiZGl2Iiw5KSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdJZiIsIWEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIHJidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc1KSgxLCJzdHJv''@;'; put 'put ''bmciKSxPZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBpYnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NikoMSwic3Ryb25nIiksT2UoMiwiRVJST1IiKSxoZSgpKCkpfWZ1bmN0aW9uIGFidChjLGwpezEmYyYmKGRlKDAsInAiLDYzKSxPZSgxLCIgRXJyb3IgZGV0YWlsczogIiks''@;'; put 'put ''aGUoKSl9ZnVuY3Rpb24gb2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksT2UoMiksUXMoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDIpLElyKCIgIixEYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIp''@;'; put 'put ''fX1mdW5jdGlvbiBzYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDg1KSgyLCJkaXYiKSgzLCJwIiw2MiksT2UoNCwiIE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY0KSxPZSg4KSxoZSgp''@;'; put 'put ''LGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxPZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTEsInAiLDYyKSxPZSgxMiwiIFN0YXR1czogIiksbXQoMTMscmJ0LDMsMCwic3BhbiIsNzApKDE0LGlidCwzLDAsInNwYW4iLDcxKSxoZSgpLG10''@;'; put 'put ''KDE1LGFidCwyLDAsInAiLDcyKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2''@;'; put 'put ''ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLE9lKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSgpLG10KDE5LG9idCw0LDMsImRpdiIsNjApLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDcpLHhlKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVk''@;'; put 'put ''Q3N2RGF0YXNldC5saWJkcyksZmUoKSxDcihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGZlKCkseGUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2Vzcyks''@;'; put 'put ''ZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKDQpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiBsYnQo''@;'; put 'put ''YyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLE52dCwyMyw3LCJuZy1jb250YWluZXIiLDQpKDIsZWJ0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLG5idCwyLDEsIm5nLWNvbnRhaW5lciIsNCkoNCxzYnQsMjAsOCwibmctY29udGFpbmVyIiw0KSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSksZmUoKSx4ZSgibmdJZiIsYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRh''@;'; put 'put ''c2V0cy5sZW5ndGgpLGZlKCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIGNidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDg2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25s''@;'; put 'put ''eSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciB4dz1mdW5jdGlvbihj''@;'; put 'put ''KXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUiLGMucGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30o''@;'; put 'put ''eHd8fHt9KTtjb25zdCB1YnQ9W3twYXRoOiIiLGNvbXBvbmVudDpwdnQsY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZT1oLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWYsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmNkcj1ELHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0''@;'; put 'put ''YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuZmlsZUxvYWRpbmdTdGF0ZT14dy5ub3RTZWxlY3RlZCx0aGlzLkZpbGVMb2FkaW5nU3RhdGU9eHcsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdl''@;'; put 'put ''cl9yb3dzX2FsbG93ZWR8fDEvMCx0aGlzLmNzdkZpbGVzPVtdLHRoaXMuY3N2U3VibWl0dGluZz0hMSx0aGlzLmF1dG9EZXRlY3RpbmdDb2x1bW5zPSExLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzPVtdLHRo''@;'; put 'put ''aXMuZGF0YXNldHNMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhpcy5zaGVldE5hbWVzPVtdLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5saWJzQW5kVGFibGVzPXt9LHRoaXMuc2hv''@;'; put 'put ''d1N1Ym1pdFJlYXNvbk1vZGFsPSExLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIix0aGlzLmhvdFVzZXJEYXRhc2V0cz17Y29sSGVhZGVyczpbIkxpYnJhcnkiLCJUYWJsZSJdLGRhdGE6W1siIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0s''@;'; put 'put ''WyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdXSxjb2x1bW5zOlt7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfSx7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfV0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMzA1cHgiLGNs''@;'; put 'put ''YXNzTmFtZTpbImh0RGFyayJdLGNvbnRleHRNZW51OntpdGVtczp7cm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In19fSxtYW51YWxSb3dNb3ZlOiEwLGNvbHVtblNvcnRpbmc6ITB9LHRoaXMuYWZ0ZXJHZXRDb2xI''@;'; put 'put ''ZWFkZXI9Z3Z0LHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgWW19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNl''@;'; put 'put ''dD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcztjb25z''@;'; put 'put ''dCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRhc2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1hKX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3Qg''@;'; put 'put ''aD1hPy50YXJnZXQ/LmZpbGVzfHxbXTtpZihoLmxlbmd0aDwxKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIGZpbGUgZm91bmQuIixudWxsLCJGaWxlIFVwbG9hZCIpO2xldCBmPSIiO2ZvcihsZXQgdiBvZiBoKXtjb25zdCBNPXYubmFtZS5zcGxp''@;'; put 'put ''dCgiLiIpLnBvcCgpO2lmKGZ8fChmPU0pLGYhPT1NKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVuc2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2VsZWN0IGZpbGVzIHdpdGggc2FtZSBleHRlbnNpb24uIik7Zj1NfWlmKFsieGxzeCIsInhsc20iLCJ4''@;'; put 'put ''bG0iXS5pbmNsdWRlcyhmKSlkLnNlbGVjdGVkRmlsZT1hLnRhcmdldC5maWxlc1swXSxkLnNlbGVjdGVkRmlsZSYmKGQuZmlsZUxvYWRpbmdTdGF0ZT14dy5yZWFkaW5nLGQuc2VsZWN0ZWRGaWxlLnNpemVNQj1kLnNwcmVhZHNoZWV0U2VydmljZS5ieXRlc1RvTUIoZC5zZWxlY3RlZEZpbGUu''@;'; put 'put ''c2l6ZSksZC5zcHJlYWRzaGVldFNlcnZpY2UueGxzeFJlYWRGaWxlKGQuc2VsZWN0ZWRGaWxlKS50aGVuKHY9PntkLmZpbGVMb2FkaW5nU3RhdGU9eHcucGFyc2luZyxkLnNlbGVjdGVkRmlsZS53b3JrYm9vaz12fSkpLGQuaW5pdFVzZXJJbnB1dEhvdCgpLGQub25BdXRvRGV0ZWN0Q29sdW1u''@;'; put 'put ''cygpO2Vsc2V7aWYoImNzdiIhPT1mKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk9ubHkgZXhjZWwgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKHhsc3gpIixudWxsLCJFeHRlbnNpb24gRXJyb3IiKTtkLm9uTXVsdGlDc3ZGaWxlcyhhLnRhcmdldC5m''@;'; put 'put ''aWxlcyl9YS50YXJnZXQudmFsdWU9IiJ9KSgpfW9uTXVsdGlDc3ZGaWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmb3IobGV0IGggb2YgYSl7Y29uc3QgZj1kLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGgubmFtZSk7ZC5pc1ZhbGlkRGF0YXNldEZvcm1hdChmKSYm''@;'; put 'put ''ZC5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShmKSYmZC5jc3ZGaWxlcy5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSl9ZC5jc3ZGaWxlcy5sZW5ndGg/KGQuY3N2U3VibWl0dGluZz0hMCx5aWVsZCBkLnN1Ym1pdENzdkZpbGVzKCksZC5jc3ZTdWJtaXR0aW5nPSExKTpkLmV2ZW50U2Vy''@;'; put 'put ''dmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1YWwgZGF0YXNldC4iKX0pKCl9b25EaXNjYXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0i''@;'; put 'put ''In1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgZD1bXTtsZXQgaD1bXTtmb3IobGV0IGYgb2YgYS5tYXRjaGVkRGF0YXNldHMpe2NvbnN0IHY9YS5mZXRjaERhdGFzZXQoZik7ZC5wdXNoKHYpfVBy''@;'; put 'put ''b21pc2UuYWxsU2V0dGxlZChkKS50aGVuKGY9PntmLmZvckVhY2goTT0+eyJmdWxmaWxsZWQiPT09TS5zdGF0dXMmJk0udmFsdWUmJmgucHVzaChNLnZhbHVlKX0pLGEudXBsb2FkTG9hZGluZz0hMSxhLmJ1aWxkRGF0YXNldHNPYmplY3RzKGgpLmZvckVhY2goTT0+e2EucGFyc2VkRGF0YXNl''@;'; put 'put ''dHMucHVzaCh7bGliZHM6TS5saWJkcyxpbmNsdWRlSW5TdWJtaXNzaW9uOiEwLGRhdGFzZXRJbmZvOk0scGFyc2luZ1RhYmxlOiEwfSl9KSxhLndvcmtib29rTG9hZGVkKCkudGhlbihNPT57Zm9yKGxldCBEIG9mIGEucGFyc2VkRGF0YXNldHMpYS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VF''@;'; put 'put ''eGNlbEZpbGUoe2ZpbGU6YS5zZWxlY3RlZEZpbGUsd29ya2Jvb2s6TSxwYXNzd29yZDphLnNlbGVjdGVkRmlsZS5wYXNzd29yZHx8dm9pZCAwLGRjVmFsaWRhdG9yOkQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3IsaGVhZGVyUGtzOkQuZGF0YXNldEluZm8uaGVhZGVyUGtzLGhlYWRlckFycmF5''@;'; put 'put ''OkQuZGF0YXNldEluZm8uaGVhZGVyQXJyYXksaGVhZGVyU2hvdzpbXSx0aW1lSGVhZGVyczpELmRhdGFzZXRJbmZvLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZVRpbWVIZWFkZXJzLHhs''@;'; put 'put ''UnVsZXM6RC5kYXRhc2V0SW5mby54bFJ1bGVzfSkudGhlbihaPT57aWYoYS5maWxlTG9hZGluZ1N0YXRlPXh3LnBhcnNlZCxaJiZaLmRhdGEpe2xldCByZT1bXTtaLmRhdGEubWFwKGNlPT57bGV0IGJlPXt9O1ouaGVhZGVyU2hvdy5tYXAoKEVlLEJlKT0+e2JlW0VlXT1jZVtCZV19KSxiZS5f''@;'; put 'put ''X19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIikscmUucHVzaChiZSl9KSxELmRhdGFzb3VyY2U9cmUsRC5wYXJzZVJlc3VsdD1aLEQucGFyc2luZ1RhYmxlPSExfX0pLmNhdGNoKFo9Pntjb25zb2xlLndhcm4oIlBh''@;'; put 'put ''cnNpbmcgZXhjZWwgZmlsZSBlcnJvci4iLFopLEQuZGF0YXNvdXJjZT1bXSxELmluY2x1ZGVJblN1Ym1pc3Npb249ITEsRC5wYXJzaW5nVGFibGU9ITF9KX0pfSl9KSgpfW9uU3VibWl0QWxsKCl7dGhpcy50YWJsZXNUb1N1Ym1pdC5sZW5ndGg/dGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9''@;'; put 'put ''ITA6dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm8gdGFibGVzIHRvIHN1Ym1pdCIsIlBsZWFzZSBpbmNsdWRlIGF0IGxlYXN0IG9uZSB0YWJsZSB0byBwcm9jZWVkLiIpfW9uRGlzY2FyZCgpe3RoaXMucGFyc2VkRGF0YXNldHM9W10sdGhpcy5tYXRjaGVkRGF0YXNldHM9W10s''@;'; put 'put ''dGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIiLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIn1pbml0SG90KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIp''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5jb250ZW50QXJlYVJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodC0xNjArInB4Ijt0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2V8''@;'; put 'put ''fFtdLGNvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0OmR8fCIzMDBweCIs''@;'; put 'put ''Y2xhc3NOYW1lOiJodERhcmsifSl9KX1pbml0VXNlcklucHV0SG90KCl7dmFyIGE9dGhpcztzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90UmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIpLHRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLChkLGgpPT57aWYoZClmb3IobGV0IGYgb2YgZClmJiZmWzNdJiYoZlszXT1mWzNdLnRvVXBwZXJDYXNlKCkpfSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2lmKGgpeyJlZGl0Ij09PWYmJih5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKSk7Zm9yKGxldCB2IG9mIGgpYS5tYXJrVW5tYXRjaGVkUm93cyh2WzBdKTthLmR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKSxhLmhvdEluc3RhbmNlVXNl''@;'; put 'put ''ckRhdGFzZXQucmVuZGVyKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYs''@;'; put 'put ''dixNKXt5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKTtmb3IobGV0IEQgb2YgdilhLm1hcmtVbm1hdGNoZWRSb3dzKEQpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZix2LE0pe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9u''@;'; put 'put ''cygpe3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFy''@;'; put 'put ''a1VubWF0Y2hlZFJvd3MoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtkWzFdfWAsZj10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtkJiZkWzBdJiZkWzFdP3RoaXMubWF0Y2hl''@;'; put 'put ''ZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwi''@;'; put 'put ''Y2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3Ro''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGguZm9yRWFjaChmPT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KHYpJiZ0aGlzLmlz''@;'; put 'put ''VmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaCh2KTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMu''@;'; put 'put ''Y2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTtpZih5aWVsZCBhLnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2''@;'; put 'put ''PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQgZmlsZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRj''@;'; put 'put ''aGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0IEQ9di50cmltKCk7YS5pc1ZhbGlkRGF0YXNldEZvcm1hdChEKSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShEKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEQp''@;'; put 'put ''OmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtEfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLGEudXNlcklucHV0RGF0YXNldHM9YS5tYXRjaGVkRGF0YXNldHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgi''@;'; put 'put ''LiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7Y29uc3Qgdj1mLWgubGVuZ3RoO2ZvcihsZXQgTT0wO008djtNKyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC51cGRhdGVEYXRhKGgp''@;'; put 'put ''LGEuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpfSkoKX1vblBhcnNlZERhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKSxhLmFjdGl2ZT0hMCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksdGhpcy5pbml0SG90KCl9b25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xp''@;'; put 'put ''Y2soYSl7dGhpcy5kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCksYS5hY3RpdmU9ITB9Z2V0IGFjdGl2ZVBhcnNlZERhdGFzZXQoKXtyZXR1cm4gdGhpcy5wYXJzZWREYXRhc2V0cy5maW5kKGE9PmEuYWN0aXZlKX1nZXQgYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCgpe3JldHVy''@;'; put 'put ''biB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBub3RGb3VuZERhdGFzZXRzKCl7cmV0dXJuIHRoaXMuZ2V0RGF0YXNldHNGcm9tSG90KCkuZmlsdGVyKGQ9PiF0aGlzLm1hdGNoZWREYXRhc2V0cy5pbmNsdWRlcyhkLnRyaW0oKSkpLmZpbHRlcihkPT5k''@;'; put 'put ''Lmxlbmd0aCl9Z2V0IGlzSG90SGlkZGVuKCl7aWYoIXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuITA7dHJ5e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZXR0aW5ncygpLmNsYXNzTmFtZTtyZXR1cm4hIWEmJmEuaW5jbHVkZXMoImh0Q3VzdG9tSGlkZGVuIil9Y2F0Y2h7cmV0dXJuITB9''@;'; put 'put ''fWdldCB0YWJsZXNUb1N1Ym1pdCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLmRhdGFzb3VyY2UmJmEucGFyc2VSZXN1bHQmJmEuaW5jbHVkZUluU3VibWlzc2lvbil9Z2V0IHN1Ym1pdHRpbmdDc3YoKXtyZXR1cm4gdGhpcy5jc3ZGaWxlcy5sZW5ndGg+MH1nZXQg''@;'; put 'put ''ZXhjZWxzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLnN1Ym1pdFJlc3VsdCkubGVuZ3RofWRvd25sb2FkRmlsZShhKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgc3RhZ2VkYXRhLSR7dGhpcy5hY3RpdmVTdWJtaXR0ZWRD''@;'; put 'put ''c3ZEYXRhc2V0Py5saWJkc30tbG9nYCxKU09OLnN0cmluZ2lmeShhKSl9c3VibWl0Q3N2RmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgYS5jc3ZGaWxlcyl7Y29uc3QgZj1hLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGguZmls''@;'; put 'put ''ZU5hbWUpO2xldCB2LE07eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLFtoXSx7dGFibGU6Zn0pLnRoZW4oRD0+e3R5cGVvZiBELmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PCJ1Ij92PUQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJv''@;'; put 'put ''cnQ6TT1ELmFkYXB0ZXJSZXNwb25zZX0sRD0+e2NvbnNvbGUuZXJyb3IoImVyciIsRCksdj1ELmFkYXB0ZXJSZXNwb25zZX0pLGQucHVzaCh7c3VjY2VzczpNLGVycm9yOnYsbGliZHM6Zn0pfWEuc3VibWl0dGVkQ3N2RGF0YXNldHM9ZH0pKCl9ZmV0Y2hEYXRhc2V0KGEpe3ZhciBkPXRoaXM7''@;'; put 'put ''cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEpcmV0dXJuIGQuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHtMSUJEUzphLE9VVERFU1Q6IldFQiJ9LCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEpLnRoZW4oZj0+ZikuY2F0Y2goZj0+e2NvbnNvbGUud2FybihgRXJy''@;'; put 'put ''b3IgZmV0Y2hpbmcgJHthfWAsZil9KX0pKCl9c3VibWl0VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnNvbGUuaW5mbygiU3VibWl0dGluZyBtdWx0aXBsZSB0YWJsZXMiLGQucGFyc2VkRGF0YXNldHMpLGQuc3VibWl0TG9hZGluZz0hMDtmb3IobGV0IGgg''@;'; put 'put ''b2YgZC5wYXJzZWREYXRhc2V0cyl7aWYoIWgucGFyc2VSZXN1bHR8fCFoLmRhdGFzb3VyY2V8fCFoLmluY2x1ZGVJblN1Ym1pc3Npb258fGEmJiFhLmluY2x1ZGVzKGgubGliZHMpKWNvbnRpbnVlO2xldCBmPXt9O2Quc3VibWl0UmVhc29uTWVzc2FnZT1kLnN1Ym1pdFJlYXNvbk1lc3NhZ2Uu''@;'; put 'put ''cmVwbGFjZSgvXG4vZywiLiAiKSxmLkFDVElPTj0iTE9BRCIsZi5NRVNTQUdFPWQuc3VibWl0UmVhc29uTWVzc2FnZSxmLkxJQkRTPWgubGliZHM7bGV0IHY9aC5kYXRhc291cmNlO2lmKHYpe3Y9di5tYXAoYmU9PntsZXQgRWU9YmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3Jl''@;'; put 'put ''dHVybiBkZWxldGUgYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1FZSxPYmplY3Qua2V5cyhiZSkubWFwKEJlPT57Im51bWVyaWMiPT09aC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZSk/LnR5cGUm''@;'; put 'put ''JiIuIj09PWJlW0JlXSYmKGJlW0JlXT1udWxsKX0pLGJlfSk7Y29uc3QgTT12LnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBELFoscmU7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoZixNLCJTQVNDb250cm9sVGFibGUiLCJl''@;'; put 'put ''ZGl0b3JzL3N0YWdlZGF0YSIsaC5kYXRhc2V0SW5mby5kYXRhLiRzYXNkYXRhLCEwLHtkZWJ1ZzohMH0pLnRoZW4oYmU9PntaPWJlLmFkYXB0ZXJSZXNwb25zZSxyZT1iZS5sb2d9KS5jYXRjaChiZT0+e2NvbnNvbGUuZXJyb3IoImVyciIsYmUpLEQ9YmUuYWRhcHRlclJlc3BvbnNlLHJlPWJl''@;'; put 'put ''LmxvZ30pLGguc3VibWl0UmVzdWx0PXtzdWNjZXNzOlosZXJyb3I6RCxsb2c6cmUscGFyc2VSZXN1bHQ6aC5wYXJzZVJlc3VsdCxsaWJkczpoLmxpYmRzfX19ZC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsZC5zdWJtaXRMb2FkaW5nPSExLGQuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygp''@;'; put 'put ''fSkoKX1yZVN1Ym1pdFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc3VibWl0VGFibGVzKFthLmxpYmRzXSk7Y29uc3QgaD1kLnBhcnNlZERhdGFzZXRzLmZpbmQoZj0+Zi5saWJkcz09PWEubGliZHMpO2gmJihoLmFjdGl2ZT0hMCl9KSgpfXdvcmti''@;'; put 'put ''b29rTG9hZGVkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5zZWxlY3RlZEZpbGV8fGQoIk5vIGZpbGUgc2VsZWN0ZWQiKSx0aGlzLndvcmtib29rSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnNlbGVjdGVkRmlsZS53b3JrYm9vayYmKGNsZWFySW50ZXJ2YWwodGhp''@;'; put 'put ''cy53b3JrYm9va0ludGVydmFsKSxhKHRoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rKSl9LDUwMCl9KX1wYXJzZURhdGFzZXRGcm9tQ3N2TmFtZShhKXtjb25zdCBkPWEuc3BsaXQoIi4iKTtyZXR1cm4gZC5wb3AoKSxkLmpvaW4oIi4iKX1nZXREYXRhc2V0c0Zyb21Ib3QoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0P3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZmlsdGVyKGQ9PmRbMF0/Lmxlbmd0aCYmZFsxXT8ubGVuZ3RoKS5tYXAoZD0+ZD9gJHtkWzBdfS4ke2RbMV19YDoiIik6W119cGFyc2VFeGNlbFNoZWV0TmFtZXMoKXt2YXIgYT10''@;'; put 'put ''aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZighYS5zZWxlY3RlZEZpbGUpcmV0dXJuIGQoW10pO2Euc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxTaGVldE5hbWVzKGEuc2VsZWN0ZWRGaWxlKS50aGVuKGY9PihmLnBhc3N3b3JkJiYo''@;'; put 'put ''YS5zZWxlY3RlZEZpbGUucGFzc3dvcmQ9Zi5wYXNzd29yZCksZChmLnNoZWV0TmFtZXMpKSkuY2F0Y2goZj0+aChmKSl9KX0pKCl9aXNWYWxpZERhdGFzZXRGb3JtYXQoYSl7cmV0dXJuL15cd3sxLDh9XC5cd3sxLDMyfSQvZ2ltLnRlc3QoYSl9aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoYSl7''@;'; put 'put ''Y29uc3QgZD1hLnNwbGl0KCIuIilbMF0saD1hLnNwbGl0KCIuIilbMV07cmV0dXJuISF0aGlzLmxpYnNBbmRUYWJsZXNbZF0/LmluY2x1ZGVzKGgpfWJ1aWxkRGF0YXNldHNPYmplY3RzKGEpe2lmKCFhKXJldHVybltdO2NvbnN0IGQ9W107Zm9yKGxldCBoIG9mIGEpaWYoaC5kYXRhKXtjb25z''@;'; put 'put ''dCBmPXsuLi5oLGhvdFRhYmxlOntkYXRhOmguZGF0YS5zYXNkYXRhLHNldHRpbmdzOnt9fSxjb2xzOltdLGhlYWRlckNvbHVtbnM6W10saGVhZGVyUGtzOltdLGhlYWRlckFycmF5OltdLGRhdGVIZWFkZXJzOltdLHRpbWVIZWFkZXJzOltdLGRhdGVUaW1lSGVhZGVyczpbXSx4bFJ1bGVzOltd''@;'; put 'put ''LGNvbHVtbkhlYWRlcjpbXX07Zi5jb2xzPWguZGF0YS5jb2xzLGYuaGVhZGVyQ29sdW1ucz1oLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxmLmhlYWRlclBrcz1oLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksLTEhPT1mLmhlYWRlckNvbHVtbnMuaW5k''@;'; put 'put ''ZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJihmLmhlYWRlckNvbHVtbnNbZi5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLGYuaGVhZGVyQXJyYXk9Zi5oZWFkZXJDb2x1bW5zLnNsaWNlKDEp''@;'; put 'put ''LCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJihmLmRhdGVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJihmLnRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNw''@;'; put 'put ''bGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKGYuZGF0ZVRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksaC5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYoZi54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVw''@;'; put 'put ''Q2xvbmUoaC5kYXRhLnhsX3J1bGVzKSksZi5kY1ZhbGlkYXRvcj1uZXcgeTZlKGguZGF0YS5zYXNwYXJhbXNbMF0saC5kYXRhLiRzYXNkYXRhLGguZGF0YS5jb2xzLGguZGF0YS5kcXJ1bGVzLGguZGF0YS5kcWRhdGEpLGYuY29sdW1uSGVhZGVyPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVB''@;'; put 'put ''REVSUy5zcGxpdCgiLCIpLGQucHVzaChmKX1yZXR1cm4gZH1kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMucGFyc2VkRGF0YXNldHMpYS5hY3RpdmU9ITF9ZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpe2ZvcihsZXQgYSBvZiB0aGlzLnN1Ym1p''@;'; put 'put ''dHRlZENzdkRhdGFzZXRzKWEuYWN0aXZlPSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoR3UpLEdlKFVoKSxHZShBNmUpLEdlKHRsKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShtdnQsNyksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5jb250ZW50QXJlYVJlZj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6MzcsdmFyczoxOCxjb25zdHM6W1siY29udGVudEFyZWEiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG1iLTEwIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQiLCJib2R5IiwiY2xhc3MiLCJsaWNlbmNlLWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdp''@;'; put 'put ''ZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJj''@;'; put 'put ''ZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0''@;'; put 'put ''bi1wcmltYXJ5IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIsInRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciIsIm1iLTEwIl0sWyJpZCIsImJyb3dzZS1maWxlIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsi''@;'; put 'put ''Y2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJj''@;'; put 'put ''bGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxb''@;'; put 'put ''InN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwi''@;'; put 'put ''bmdJZiJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiLCJtdC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIs''@;'; put 'put ''Im10LTEwIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVyIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJh''@;'; put 'put ''c2giLCJzdGF0dXMiLCJkYW5nZXIiLDEsIm1sLTUiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJob3RJZCIs''@;'; put 'put ''ImhvdEluc3RhbmNlVXNlckRhdGFzZXQiLCJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLCJzdHJldGNoSCIsImFsbCIsMSwibXQtMTUiLDMsImFmdGVyR2V0Q29sSGVhZGVyIiwic2V0dGluZ3MiLCJsaWNlbnNlS2V5Il0sWzEsImRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnMiLCJ0ZXh0LXJp''@;'; put 'put ''Z2h0IiwibXQtMTAiXSxbImlkIiwiY29udGludWUtYnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCIsImNsckxvYWRpbmciXSxbInNoYXBlIiwicHJvY2Vzcy1vbi12bSIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJd''@;'; put 'put ''LFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0xMCBtdC0xNSBzdWJtaXNzaW9uLXJlc3VsdHMiLDQsIm5nSWYiXSxbImNsYXNzIiwi''@;'; put 'put ''ZXJyb3ItZmllbGQgbXQtMTUiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Il0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciJdLFsi''@;'; put 'put ''Y2xyVG9vbHRpcFRyaWdnZXIiLCIiLDMsInJvdXRlckxpbmsiXSxbMywiY2xyUG9zaXRpb24iLCJjbHJTaXplIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJuYW1lIiwib3B0aW9ucyIsInJlcXVpcmVkIiwiIiwidmFsdWUiLCJvcHRpb24xIiwzLCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIiw0LCJuZ0lmIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjbGFzc05hbWUiLCJs''@;'; put 'put ''aWNlbnNlS2V5IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJmaWx0ZXJzIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVz''@;'; put 'put ''dWx0cyJdLFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xp''@;'; put 'put ''Y2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1yZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZp''@;'; put 'put ''ZWxkIiwibXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3''@;'; put 'put ''LTEwMCJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0IiwiYm9keSIsMSwibGljZW5jZS1saW1pdC1ub3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQp''@;'; put 'put ''e2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLG10KDEsYnZ0LDIsMCwiZGl2IiwyKSgyLHl2dCw1LDEsImRpdiIsMykoMyxSdnQsNiwyLCJuZy1jb250YWluZXIiLDQpKDQsRnZ0LDUsMSwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDUsImRpdiIsNSwwKSg3LCJkaXYiLDYpKDgs''@;'; put 'put ''ImRpdiIsNykoOSwicCIsOCksT2UoMTAsIk11bHRpIERhdGFzZXQgTG9hZCIpLGhlKCkoKSxtdCgxMSxIdnQsNCwwLCJkaXYiLDkpKDEyLGxidCw1LDQsIm5nLWNvbnRhaW5lciIsNCksaGUoKSgpLGRlKDEzLCJjbHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93U3VibWl0UmVhc29uTW9kYWwsTSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0pLGRlKDE0LCJoMyIsMTEpLE9lKDE1KSxoZSgpLGRlKDE2LCJkaXYiLDEyKSxtdCgxNyxjYnQsMiwxLCJwIiwxMyksZGUoMTgsImRpdiIsMTQp''@;'; put 'put ''KDE5LCJsYWJlbCIsMTUpLE9lKDIwLCJNZXNzYWdlIiksaGUoKSxkZSgyMSwidGV4dGFyZWEiLDE2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0p''@;'; put 'put ''LGhlKCkoKSxkZSgyMiwicCIsMTcpLE9lKDIzLCIgVGFibGVzIHdpbGwgYmUgc2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUgc3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMTgpKDI1LCJidXR0b24iLDE5KSxIdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExKX0pLE9lKDI2LCIgQ2FuY2VsICIpLGhlKCksZGUoMjcsImJ1dHRvbiIsMjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxP''@;'; put 'put ''ZSgyOCwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwxMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguY3N2U3VibWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTEpLE9l''@;'; put 'put ''KDMxKSxoZSgpLGRlKDMyLCJkaXYiLDEyKSgzMywiZGl2IiwyMSksR3QoMzQsImNsci1zcGlubmVyIiwyMiksaGUoKSxkZSgzNSwicCIsMjMpLE9lKDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSx4ZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRp''@;'; put 'put ''bmcpLGZlKCkseGUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZl''@;'; put 'put ''KDcpLHhlKCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFoLnN1Ym1pdHRpbmdDc3YpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1oLnNlbGVjdGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSx4ZSgiY2xy''@;'; put 'put ''TW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLHp1KCIgU3VibWl0ICIsaC50YWJsZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJsZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLHhlKCJkaXNhYmxlZCIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSx4ZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuIixoLmNzdlN1Ym1pdHRpbmcpLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksenUoIiBTdWJtaXR0aW5nICIsaC5jc3ZGaWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbRF8s''@;'; put 'put ''YzEscWwsTWQsbmwsb1ksR3MsRWgsUGQscDUsSGwscnMsb3UsS3UsajAsUDIsZHMsakwsSWQsU2gsUUwsbTcsYjcsdjcsUmQsaTQsbnMsYmEsZVpdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XX1dO2xldCBkYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKHVidCksemNdfSl9fXJldHVybiBjfSkoKTtuTigpO2xldCBoYnQ9KCgpPT57Y2xhc3MgY3tz''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2E5LGRidCxSYyx6MCxZOSxSYSxNQSxuZl19KX19cmV0dXJuIGN9KSgpO2Nv''@;'; put 'put ''bnN0IGZidD1be3BhdGg6IiIsY29tcG9uZW50Om85dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6Vzl0fSx7cGF0aDoiZXhjZWwtbWFwcyIsbG9hZENoaWxkcmVuOigpPT5mdnR9LHtwYXRo''@;'; put 'put ''OiJtdWx0aS1sb2FkIixsb2FkQ2hpbGRyZW46KCk9PmhidH1dfV07bGV0IHBidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQoZmJ0KSx6Y119KX19cmV0dXJuIGN9KSgpLGdidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbcGJ0LFJjLHowLFk5LFJhLE1BLG5mXX0pfX1yZXR1cm4gY30pKCksdHRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEh''@;'; put 'put ''KHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10''@;'; put 'put ''aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VT''@;'; put 'put ''ZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodTEpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7bGV0''@;'; put 'put ''IFM2PXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRl''@;'; put 'put ''cmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rpb24gajZlKGMpe1M2PWN9Y29uc3QgejZlPS9bJjw+IiddLyxtYnQ9bmV3IFJlZ0V4cCh6NmUuc291''@;'; put 'put ''cmNlLCJnIiksVTZlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyx2YnQ9bmV3IFJlZ0V4cChVNmUuc291cmNlLCJnIiksYmJ0PXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxaNmU9''@;'; put 'put ''Yz0+YmJ0W2NdO2Z1bmN0aW9uIHgxKGMsbCl7aWYobCl7aWYoejZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZShtYnQsWjZlKX1lbHNlIGlmKFU2ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UodmJ0LFo2ZSk7cmV0dXJuIGN9Y29uc3QgeWJ0PS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEt''@;'; put 'put ''Zl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIFc2ZShjKXtyZXR1cm4gYy5yZXBsYWNlKHlidCwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5z''@;'; put 'put ''dWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IF9idD0vKF58W15cW10pXF4vZztmdW5jdGlvbiBJbChjLGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4o''@;'; put 'put ''aD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZShfYnQsIiQxIiksYz1jLnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1jb25zdCB3YnQ9L1teXHc6XS9nLENidD0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIFk2ZShj''@;'; put 'put ''LGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KFc2ZShhKSkucmVwbGFjZSh3YnQsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1k''@;'; put 'put ''LmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIUNidC50ZXN0KGEpJiYoYT1mdW5jdGlvbiBFYnQoYyxsKXthTlsiICIrY118fChhTlsiICIrY109U2J0LnRlc3QoYyk/YysiLyI6c04oYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9YU5bIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0''@;'; put 'put ''dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShNYnQsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKHhidCwiJDEiKStsOmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9''@;'; put 'put ''cmV0dXJuIGF9Y29uc3QgYU49e30sU2J0PS9eW146XSs6XC8qW14vXSokLyxNYnQ9L14oW146XSs6KVtcc1xTXSokLyx4YnQ9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLG9OPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gRzZlKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2cs''@;'; put 'put ''KGYsdixNKT0+e2xldCBEPSExLFo9djtmb3IoOy0tWj49MCYmIlxcIj09PU1bWl07KUQ9IUQ7cmV0dXJuIEQ/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxk''@;'; put 'put ''Lmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBzTihjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09''@;'; put 'put ''ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uICQ2ZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0''@;'; put 'put ''bGU/eDEobC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGluaz0hMDtjb25zdCBNPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9r''@;'; put 'put ''ZW5zKHYpfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsTX1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6eDEodil9fWNsYXNzIGxOe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNn1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2su''@;'; put 'put ''bmV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlw''@;'; put 'put ''ZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOnNOKGQsIlxuIil9fX1mZW5jZXMobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9u''@;'; put 'put ''IGtidChjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgiXG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0''@;'; put 'put ''dXJuIHYubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4''@;'; put 'put ''dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVzdChkKSl7Y29uc3QgaD1zTihkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgu''@;'; put 'put ''dHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVsw''@;'; put 'put ''XX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhp''@;'; put 'put ''cy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsdixNLEQs''@;'; put 'put ''WixyZSxjZSxiZSxFZSxCZSxxZT1hWzFdLnRyaW0oKTtjb25zdCBydD1xZS5sZW5ndGg+MSxwdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6cnQsc3RhcnQ6cnQ/K3FlLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtxZT1ydD9gXFxkezEsOX1cXCR7cWUuc2xpY2UoLTEp''@;'; put 'put ''fWA6YFxcJHtxZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHFlPXJ0P3FlOiJbKistXSIpO2NvbnN0IGR0PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtxZX0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKEJlPSExLChhPWR0LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5i''@;'; put 'put ''bG9jay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQubGVuZ3RoKSxyZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sdm49PiIgIi5yZXBlYXQoMyp2bi5sZW5ndGgpKSxjZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGlj''@;'; put 'put ''Pyh2PTIsRWU9cmUudHJpbUxlZnQoKSk6KHY9YVsyXS5zZWFyY2goL1teIF0vKSx2PXY+ND8xOnYsRWU9cmUuc2xpY2Uodiksdis9YVsxXS5sZW5ndGgpLEQ9ITEsIXJlJiYvXiAqJC8udGVzdChjZSkmJihkKz1jZSsiXG4iLGw9bC5zdWJzdHJpbmcoY2UubGVuZ3RoKzEpLEJlPSEwKSwhQmUp''@;'; put 'put ''e2NvbnN0IHZuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksQ249bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/''@;'; put 'put ''OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLHRuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlxgXGBcYHx+fn4pYCksTW49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19I2ApO2Zvcig7bCYmKGJlPWwuc3BsaXQoIlxuIiwxKVswXSxjZT1iZSx0aGlz''@;'; put 'put ''Lm9wdGlvbnMucGVkYW50aWMmJihjZT1jZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCEodG4udGVzdChjZSl8fE1uLnRlc3QoY2UpfHx2bi50ZXN0KGNlKXx8Q24udGVzdChsKSkpOyl7aWYoY2Uuc2VhcmNoKC9bXiBdLyk+PXZ8fCFjZS50cmltKCkpRWUrPSJc''@;'; put 'put ''biIrY2Uuc2xpY2Uodik7ZWxzZXtpZihEfHxyZS5zZWFyY2goL1teIF0vKT49NHx8dG4udGVzdChyZSl8fE1uLnRlc3QocmUpfHxDbi50ZXN0KHJlKSlicmVhaztFZSs9IlxuIitjZX0hRCYmIWNlLnRyaW0oKSYmKEQ9ITApLGQrPWJlKyJcbiIsbD1sLnN1YnN0cmluZyhiZS5sZW5ndGgrMSks''@;'; put 'put ''cmU9Y2Uuc2xpY2Uodil9fXB0Lmxvb3NlfHwoWj9wdC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoWj0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJihoPS9eXFtbIHhYXVxdIC8uZXhlYyhFZSksaCYmKGY9IlsgXSAiIT09aFswXSxFZT1FZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIi''@;'; put 'put ''KSkpLHB0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6RWV9KSxwdC5yYXcrPWR9cHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLHB0Lml0ZW1zW3B0Lml0ZW1zLmxlbmd0aC0xXS50''@;'; put 'put ''ZXh0PUVlLnRyaW1SaWdodCgpLHB0LnJhdz1wdC5yYXcudHJpbVJpZ2h0KCk7Y29uc3QgSnQ9cHQuaXRlbXMubGVuZ3RoO2ZvcihNPTA7TTxKdDtNKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEscHQuaXRlbXNbTV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMocHQuaXRlbXNb''@;'; put 'put ''TV0udGV4dCxbXSksIXB0Lmxvb3NlKXtjb25zdCB2bj1wdC5pdGVtc1tNXS50b2tlbnMuZmlsdGVyKHRuPT4ic3BhY2UiPT09dG4udHlwZSksQ249dm4ubGVuZ3RoPjAmJnZuLnNvbWUodG49Pi9cbi4qXG4vLnRlc3QodG4ucmF3KSk7cHQubG9vc2U9Q259aWYocHQubG9vc2UpZm9yKE09MDtN''@;'; put 'put ''PEp0O00rKylwdC5pdGVtc1tNXS5sb29zZT0hMDtyZXR1cm4gcHR9fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJl''@;'; put 'put ''Ij09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTp4MShhWzBdKTtkLnR5cGU9InBhcmFncmFw''@;'; put 'put ''aCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBs''@;'; put 'put ''YWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRl''@;'; put 'put ''ZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOkc2ZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNl''@;'; put 'put ''KC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsdixNLEQsaD1k''@;'; put 'put ''LmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1k''@;'; put 'put ''LnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1HNmUoZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKFo9Pih7dGV4dDpafSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCx2PTA7djxoO3YrKylkLmhlYWRlclt2XS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJb''@;'; put 'put ''dl0udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCx2PTA7djxoO3YrKylmb3IoRD1kLnJvd3Nbdl0sTT0wO008RC5sZW5ndGg7TSsrKURbTV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKERbTV0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2su''@;'; put 'put ''bGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5w''@;'; put 'put ''YXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtp''@;'; put 'put ''ZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6eDEoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0''@;'; put 'put ''ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhp''@;'; put 'put ''cy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/''@;'; put 'put ''InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMu''@;'; put 'put ''c2FuaXRpemVyKGFbMF0pOngxKGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0''@;'; put 'put ''dXJuO2NvbnN0IHY9c04oZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5ndGgtdi5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3Qgdj1mdW5jdGlvbiBUYnQoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zv''@;'; put 'put ''cig7aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKHY+LTEpe2NvbnN0IEQ9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0u''@;'; put 'put ''bGVuZ3RoK3Y7YVsyXT1hWzJdLnN1YnN0cmluZygwLHYpLGFbMF09YVswXS5zdWJzdHJpbmcoMCxEKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3Qgdj0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7''@;'; put 'put ''diYmKGg9dlsxXSxmPXZbM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSwkNmUoYSx7aHJlZjpoJiZo''@;'; put 'put ''LnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5l''@;'; put 'put ''eGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4''@;'; put 'put ''dDpmfX1yZXR1cm4gJDZlKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8''@;'; put 'put ''fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25zdCB2PWhbMF0ubGVuZ3RoLTE7bGV0IE0sRCxaPXYscmU9MDtjb25zdCBjZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9u''@;'; put 'put ''Zy5yRGVsaW1VbmQ7Zm9yKGNlLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSpsLmxlbmd0aCt2KTtudWxsIT0oaD1jZS5leGVjKGEpKTspe2lmKE09aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhTSljb250aW51ZTtpZihEPU0ubGVuZ3RoLGhbM118fGhbNF0pe1orPUQ7Y29u''@;'; put 'put ''dGludWV9aWYoKGhbNV18fGhbNl0pJiZ2JTMmJiEoKHYrRCklMykpe3JlKz1EO2NvbnRpbnVlfWlmKFotPUQsWj4wKWNvbnRpbnVlO0Q9TWF0aC5taW4oRCxEK1orcmUpO2NvbnN0IGJlPWwuc2xpY2UoMCx2K2guaW5kZXgrRCsxKTtpZihNYXRoLm1pbih2LEQpJTIpe2NvbnN0IEJlPWJlLnNs''@;'; put 'put ''aWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmJlLHRleHQ6QmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEJlKX19Y29uc3QgRWU9YmUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OmJlLHRleHQ6RWUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9r''@;'; put 'put ''ZW5zKEVlKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihk''@;'; put 'put ''PWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9eDEoZCwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwp''@;'; put 'put ''O2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD14MSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9eDEoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6''@;'; put 'put ''aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IHY7ZG97dj1kWzBdLGRbMF09''@;'; put 'put ''dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdoaWxlKHYhPT1kWzBdKTtoPXgxKGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRl''@;'; put 'put ''eHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0''@;'; put 'put ''aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOngxKGRbMF0pOmRbMF06eDEodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCBtbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTov''@;'; put 'put ''XiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwz''@;'; put 'put ''fSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlz''@;'; put 'put ''dDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86''@;'; put 'put ''XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSko''@;'; put 'put ''W2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzoo''@;'; put 'put ''PzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6b04sbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxi''@;'; put 'put ''dWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypc''@;'; put 'put ''XSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307bW8uZGVmPUlsKG1vLmRlZikucmVwbGFjZSgibGFiZWwiLG1vLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLG1vLl90aXRsZSku''@;'; put 'put ''Z2V0UmVnZXgoKSxtby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sbW8ubGlzdEl0ZW1TdGFydD1JbCgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLG1vLmJ1bGxldCkuZ2V0UmVnZXgoKSxtby5saXN0PUlsKG1vLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQp''@;'; put 'put ''LnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrbW8uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksbW8uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRl''@;'; put 'put ''fGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxo''@;'; put 'put ''cnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIs''@;'; put 'put ''bW8uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLG1vLmh0bWw9SWwobW8uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLG1vLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86''@;'; put 'put ''ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksbW8ubGhlYWRpbmc9SWwobW8ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQpLmdldFJlZ2V4KCksbW8ucGFyYWdyYXBoPUlsKG1vLl9wYXJhZ3JhcGgpLnJlcGxh''@;'; put 'put ''Y2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15g''@;'; put 'put ''XFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8u''@;'; put 'put ''X3RhZykuZ2V0UmVnZXgoKSxtby5ibG9ja3F1b3RlPUlsKG1vLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsbW8ucGFyYWdyYXBoKS5nZXRSZWdleCgpLG1vLm5vcm1hbD17Li4ubW99LG1vLmdmbT17Li4ubW8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHsw''@;'; put 'put ''LDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sbW8uZ2ZtLnRhYmxlPUlsKG1vLmdmbS50YWJs''@;'; put 'put ''ZSkucmVwbGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxu''@;'; put 'put ''KXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdl''@;'; put 'put ''dFJlZ2V4KCksbW8uZ2ZtLnBhcmFncmFwaD1JbChtby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsbW8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLG1vLmdmbS50YWJsZSkucmVwbGFjZSgiYmxv''@;'; put 'put ''Y2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwv''@;'; put 'put ''Pz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4KCksbW8ucGVkYW50aWM9ey4uLm1vLm5vcm1hbCxodG1sOklsKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/''@;'; put 'put ''OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50Iixtby5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxx''@;'; put 'put ''fGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTog''@;'; put 'put ''Kjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6b04sbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6SWwobW8ubm9ybWFsLl9wYXJh''@;'; put 'put ''Z3JhcGgpLnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixtby5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3Qi''@;'; put 'put ''LCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IEFhPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOm9OLHRhZzoiXmNvbW1l''@;'; put 'put ''bnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVs''@;'; put 'put ''KVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKiso''@;'; put 'put ''PzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFc''@;'; put 'put ''KikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0q''@;'; put 'put ''P1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/''@;'; put 'put ''IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpvTix0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpf''@;'; put 'put ''XXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIERidChjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQv''@;'; put 'put ''KFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBLNmUoYyl7''@;'; put 'put ''bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsrKWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1BYS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsQWEu''@;'; put 'put ''cHVuY3R1YXRpb249SWwoQWEucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csQWEuYW55UHVuY3R1YXRpb249''@;'; put 'put ''L1xcW3B1bmN0XS9nLEFhLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEFhLl9jb21tZW50PUlsKG1vLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLmxEZWxpbT1JbChBYS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNl''@;'; put 'put ''KC9wdW5jdC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5lbVN0cm9uZy5yRGVsaW1Bc3Q9SWwoQWEuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLnJEZWxpbVVuZD1JbChBYS5l''@;'; put 'put ''bVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuYW55UHVuY3R1YXRpb249SWwoQWEuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX2Vz''@;'; put 'put ''Y2FwZXM9SWwoQWEuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sQWEuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpB''@;'; put 'put ''LVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sQWEuYXV0b2xpbms9SWwoQWEuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsQWEuX3NjaGVtZSkucmVwbGFj''@;'; put 'put ''ZSgiZW1haWwiLEFhLl9lbWFpbCkuZ2V0UmVnZXgoKSxBYS5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLEFhLnRhZz1JbChBYS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLEFhLl9j''@;'; put 'put ''b21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLEFhLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksQWEuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLEFhLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSov''@;'; put 'put ''LEFhLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEFhLmxpbms9SWwoQWEubGluaykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsQWEuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixBYS5f''@;'; put 'put ''dGl0bGUpLmdldFJlZ2V4KCksQWEucmVmbGluaz1JbChBYS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxBYS5ub2xpbms9SWwoQWEubm9saW5rKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgo''@;'; put 'put ''KSxBYS5yZWZsaW5rU2VhcmNoPUlsKEFhLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZsaW5rIixBYS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLEFhLm5vbGluaykuZ2V0UmVnZXgoKSxBYS5ub3JtYWw9ey4uLkFhfSxBYS5wZWRhbnRpYz17Li4uQWEubm9ybWFsLHN0cm9uZzp7''@;'; put 'put ''c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxT''@;'; put 'put ''KShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpJbCgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxp''@;'; put 'put ''bms6SWwoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkuZ2V0UmVnZXgoKX0sQWEuZ2ZtPXsuLi5BYS5ub3JtYWwsZXNjYXBlOklsKEFhLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1h''@;'; put 'put ''aWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86''@;'; put 'put ''W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2Et''@;'; put 'put ''ekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyor''@;'; put 'put ''XC89P19ge1x8fX4tXStAKSkpL30sQWEuZ2ZtLnVybD1JbChBYS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLEFhLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksQWEuYnJlYWtzPXsuLi5BYS5nZm0sYnI6SWwoQWEuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgo''@;'; put 'put ''KSx0ZXh0OklsKEFhLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3MgYTR7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxs''@;'; put 'put ''KSx0aGlzLm9wdGlvbnM9bHx8UzYsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgbE4sdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5s''@;'; put 'put ''ZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazptby5ub3JtYWwsaW5saW5lOkFhLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPW1vLnBlZGFudGljLGEuaW5s''@;'; put 'put ''aW5lPUFhLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1tby5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9BYS5icmVha3M6QWEuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6bW8saW5saW5lOkFh''@;'; put 'put ''fX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBhNChhKS5sZXgobCl9c3RhdGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcgYTQoYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhp''@;'; put 'put ''cy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLHY7Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQv''@;'; put 'put ''ZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXiggKikoXHQrKS9nbSwoTSxELFopPT5EKyIgICAgIi5yZXBlYXQoWi5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRp''@;'; put 'put ''b25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShNPT4hIShkPU0uY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCks''@;'; put 'put ''MT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgu''@;'; put 'put ''dHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwp''@;'; put 'put ''KXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3Ry''@;'; put 'put ''aW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5y''@;'; put 'put ''YXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1h''@;'; put 'put ''W2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJc''@;'; put 'put ''biIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tl''@;'; put 'put ''bml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgTT0xLzA7Y29uc3QgRD1sLnNsaWNlKDEpO2xl''@;'; put 'put ''dCBaO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihyZSl7Wj1yZS5jYWxsKHtsZXhlcjp0aGlzfSxEKSwibnVtYmVyIj09dHlwZW9mIFomJlo+PTAmJihNPU1hdGgubWluKE0sWikpfSksTTwxLzAmJk0+PTAmJihmPWwuc3Vic3RyaW5nKDAsTSsx''@;'; put 'put ''KSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSx2JiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5s''@;'; put 'put ''aW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpLHY9Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3''@;'; put 'put ''Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5w''@;'; put 'put ''dXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IE09IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihNKTticmVha310aHJvdyBuZXcgRXJyb3IoTSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxh''@;'; put 'put ''fWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsTSxELFosdj1sO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCByZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5r''@;'; put 'put ''cyk7aWYocmUubGVuZ3RoPjApZm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTspcmUuaW5jbHVkZXMoTVswXS5zbGljZShNWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJh''@;'; put 'put ''Ii5yZXBlYXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxN''@;'; put 'put ''LmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7''@;'; put 'put ''KXY9di5zbGljZSgwLE0uaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKER8fChaPSIiKSxEPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25z''@;'; put 'put ''LmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUocmU9PiEhKGQ9cmUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1''@;'; put 'put ''YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgu''@;'; put 'put ''dGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1''@;'; put 'put ''YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLHYsWikpe2w9bC5z''@;'; put 'put ''dWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQu''@;'; put 'put ''cmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxLNmUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxl''@;'; put 'put ''bmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsSzZlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9w''@;'; put 'put ''dGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHJlPTEvMDtjb25zdCBjZT1sLnNsaWNlKDEpO2xldCBiZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKEVlKXtiZT1FZS5jYWxsKHtsZXhlcjp0aGlzfSxjZSksIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBiZSYmYmU+PTAmJihyZT1NYXRoLm1pbihyZSxiZSkpfSkscmU8MS8wJiZyZT49MCYmKGY9bC5zdWJzdHJpbmcoMCxyZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsRGJ0KSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0x''@;'; put 'put ''KSYmKFo9ZC5yYXcuc2xpY2UoLTEpKSxEPSEwLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IHJlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0''@;'; put 'put ''KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IocmUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihyZSl9fXJldHVybiBhfX1jbGFzcyBjTntjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8UzZ9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyov''@;'; put 'put ''KVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMu''@;'; put 'put ''bGFuZ1ByZWZpeCt4MShoKSsnIj4nKyhkP2w6eDEobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDp4MShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGws''@;'; put 'put ''YSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5c''@;'; put 'put ''bmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0''@;'; put 'put ''dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjty''@;'; put 'put ''ZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwv''@;'; put 'put ''Y29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShsPVk2ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVy''@;'; put 'put ''biBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1ZNmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDts''@;'; put 'put ''ZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFzcyBydGV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVz''@;'; put 'put ''cGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBpdGV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319''@;'; put 'put ''c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCIt''@;'; put 'put ''Iil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlz''@;'; put 'put ''LnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlhbGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIG80e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNix0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5v''@;'; put 'put ''cHRpb25zLnJlbmRlcmVyfHxuZXcgY04sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgcnRlLHRoaXMuc2x1Z2dlcj1uZXcgaXRlfXN0YXRpYyBwYXJzZShsLGEpe3JldHVy''@;'; put 'put ''biBuZXcgbzQoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsdixNLEQsWixyZSxjZSxiZSxFZSxCZSxxZSxydCxwdCxkdCxKdCx2bixDbix0bixkPSIiO2NvbnN0IE1uPWwubGVu''@;'; put 'put ''Z3RoO2ZvcihoPTA7aDxNbjtoKyspaWYoRWU9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbRWUudHlwZV0mJih0bj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5y''@;'; put 'put ''ZW5kZXJlcnNbRWUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LEVlKSwhMSE9PXRufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhFZS50eXBlKSkpZCs9dG58fCIi''@;'; put 'put ''O2Vsc2Ugc3dpdGNoKEVlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucyksRWUuZGVwdGgsVzZlKHRo''@;'; put 'put ''aXMucGFyc2VJbmxpbmUoRWUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZShFZS50ZXh0LEVlLmxhbmcsRWUuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGNlPSIiLHJlPSIi''@;'; put 'put ''LE09RWUuaGVhZGVyLmxlbmd0aCxmPTA7ZjxNO2YrKylyZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShFZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOkVlLmFsaWduW2ZdfSk7Zm9yKGNlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHJlKSxi''@;'; put 'put ''ZT0iIixNPUVlLnJvd3MubGVuZ3RoLGY9MDtmPE07ZisrKXtmb3IoWj1FZS5yb3dzW2ZdLHJlPSIiLEQ9Wi5sZW5ndGgsdj0wO3Y8RDt2KyspcmUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoWlt2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246RWUuYWxpZ25b''@;'; put 'put ''dl19KTtiZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhyZSl9ZCs9dGhpcy5yZW5kZXJlci50YWJsZShjZSxiZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpiZT10aGlzLnBhcnNlKEVlLnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGJlKTtjb250aW51ZTtjYXNlImxp''@;'; put 'put ''c3QiOmZvcihCZT1FZS5vcmRlcmVkLHFlPUVlLnN0YXJ0LHJ0PUVlLmxvb3NlLE09RWUuaXRlbXMubGVuZ3RoLGJlPSIiLGY9MDtmPE07ZisrKWR0PUVlLml0ZW1zW2ZdLEp0PWR0LmNoZWNrZWQsdm49ZHQudGFzayxwdD0iIixkdC50YXNrJiYoQ249dGhpcy5yZW5kZXJlci5jaGVja2JveChK''@;'; put 'put ''dCkscnQ/ZHQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PWR0LnRva2Vuc1swXS50eXBlPyhkdC50b2tlbnNbMF0udGV4dD1DbisiICIrZHQudG9rZW5zWzBdLnRleHQsZHQudG9rZW5zWzBdLnRva2VucyYmZHQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09ZHQu''@;'; put 'put ''dG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoZHQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpkdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpDbn0pOnB0Kz1DbikscHQrPXRoaXMucGFyc2UoZHQudG9rZW5z''@;'; put 'put ''LHJ0KSxiZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShwdCx2bixKdCk7ZCs9dGhpcy5yZW5kZXJlci5saXN0KGJlLEJlLHFlKTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbChFZS50ZXh0LEVlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhp''@;'; put 'put ''cy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihiZT1FZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQ7aCsxPE1uJiYidGV4dCI9PT1sW2grMV0udHlwZTspRWU9bFsrK2hdLGJl''@;'; put 'put ''Kz0iXG4iKyhFZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoYmUpOmJlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IHdyPSdUb2tlbiB3aXRoICInK0VlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7''@;'; put 'put ''aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKHdyKTt0aHJvdyBuZXcgRXJyb3Iod3IpfX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjtsZXQgaCxmLHYsZD0iIjtjb25zdCBNPWwubGVuZ3RoO2ZvcihoPTA7aDxNO2gr''@;'; put 'put ''KylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJih2PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwo''@;'; put 'put ''e3BhcnNlcjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkpZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2Fz''@;'; put 'put ''ZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5o''@;'; put 'put ''cmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVz''@;'; put 'put ''cGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBEPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0''@;'; put 'put ''aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoRCk7dGhyb3cgbmV3IEVycm9yKEQpfX1yZXR1cm4gZH19Y2xhc3MgdU57Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNz''@;'; put 'put ''IiwicG9zdHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgJDk9bmV3IGNsYXNzIElidHtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczoh''@;'; put 'put ''MCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6''@;'; put 'put ''bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoYTQubGV4LG80LnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKGE0LmxleElubGluZSxvNC5wYXJzZUlubGluZSk7UGFyc2VyPW80O3BhcnNlcj1vNC5wYXJzZTtSZW5k''@;'; put 'put ''ZXJlcj1jTjtUZXh0UmVuZGVyZXI9cnRlO0xleGVyPWE0O2xleGVyPWE0LmxleDtUb2tlbml6ZXI9bE47U2x1Z2dlcj1pdGU7SG9va3M9dU47Y29uc3RydWN0b3IoLi4ubCl7dGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9''@;'; put 'put ''ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgdiBvZiBmKWQ9ZC5jb25jYXQodGhpcy53''@;'; put 'put ''YWxrVG9rZW5zKHYudG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVm''@;'; put 'put ''YXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rv''@;'; put 'put ''a2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFz''@;'; put 'put ''eW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3Qgdj1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJz''@;'; put 'put ''W2YubmFtZV09dj9mdW5jdGlvbiguLi5NKXtsZXQgRD1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsTSk7cmV0dXJuITE9PT1EJiYoRD12LmFwcGx5KHRoaXMsTSkpLER9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1m''@;'; put 'put ''LmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVs''@;'; put 'put ''P2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2Vu''@;'; put 'put ''cyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBjTih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnJlbmRlcmVyKXtjb25zdCBNPWZbdl07''@;'; put 'put ''Zlt2XT0oLi4uRCk9PntsZXQgWj1kLnJlbmRlcmVyW3ZdLmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9fWgucmVuZGVyZXI9Zn1pZihkLnRva2VuaXplcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGxOKHRoaXMuZGVmYXVsdHMpO2Zv''@;'; put 'put ''cihjb25zdCB2IGluIGQudG9rZW5pemVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgWj1kLnRva2VuaXplclt2XS5hcHBseShmLEQpO3JldHVybiExPT09WiYmKFo9TS5hcHBseShmLEQpKSxafX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0''@;'; put 'put ''cy5ob29rc3x8bmV3IHVOO2Zvcihjb25zdCB2IGluIGQuaG9va3Mpe2NvbnN0IE09Zlt2XTtmW3ZdPXVOLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYpP0Q9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsRCkpLnRoZW4ocmU9''@;'; put 'put ''Pk0uY2FsbChmLHJlKSk7Y29uc3QgWj1kLmhvb2tzW3ZdLmNhbGwoZixEKTtyZXR1cm4gTS5jYWxsKGYsWil9OiguLi5EKT0+e2xldCBaPWQuaG9va3Nbdl0uYXBwbHkoZixEKTtyZXR1cm4hMT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29u''@;'; put 'put ''c3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKHYpe2xldCBNPVtdO3JldHVybiBNLnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyx2KSksZiYmKE09TS5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxNfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRl''@;'; put 'put ''ZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50''@;'; put 'put ''aGlzLmRlZmF1bHRzLC4uLnZ9O2NvbnN0IE09dGhpcy4jdChoLnNpbGVudCxoLmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0dXJuIE0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gQWJ0KGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29u''@;'; put 'put ''c29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3By''@;'; put 'put ''byNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVt''@;'; put 'put ''b3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQg''@;'; put 'put ''YW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQt''@;'; put 'put ''aGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBj''@;'; put 'put ''bGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0''@;'; put 'put ''ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50''@;'; put 'put ''cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBt''@;'; put 'put ''anMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRo''@;'; put 'put ''ZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFi''@;'; put 'put ''bGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1o''@;'; put 'put ''ZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9wdGlvbnM9aCksZil7Y29uc3QgRD1oLmhpZ2hsaWdodDtsZXQgWjt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKSxaPWwo''@;'; put 'put ''ZCxoKX1jYXRjaChiZSl7cmV0dXJuIE0oYmUpfWNvbnN0IHJlPWJlPT57bGV0IEVlO2lmKCFiZSl0cnl7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoWixoLndhbGtUb2tlbnMpLEVlPWEoWixoKSxoLmhvb2tzJiYoRWU9aC5ob29rcy5wb3N0cHJvY2VzcyhFZSkpfWNhdGNoKEJlKXti''@;'; put 'put ''ZT1CZX1yZXR1cm4gaC5oaWdobGlnaHQ9RCxiZT9NKGJlKTpmKG51bGwsRWUpfTtpZighRHx8RC5sZW5ndGg8M3x8KGRlbGV0ZSBoLmhpZ2hsaWdodCwhWi5sZW5ndGgpKXJldHVybiByZSgpO2xldCBjZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoWixiZT0+eyJjb2RlIj09PWJlLnR5cGUm''@;'; put 'put ''JihjZSsrLHNldFRpbWVvdXQoKCk9PntEKGJlLnRleHQsYmUubGFuZywoRWUsQmUpPT57aWYoRWUpcmV0dXJuIHJlKEVlKTtudWxsIT1CZSYmQmUhPT1iZS50ZXh0JiYoYmUudGV4dD1CZSxiZS5lc2NhcGVkPSEwKSxjZS0tLDA9PT1jZSYmcmUoKX0pfSwwKSl9KSx2b2lkKDA9PT1jZSYmcmUo''@;'; put 'put ''KSl9aWYoaC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGguaG9va3M/aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oRD0+bChELGgpKS50aGVuKEQ9Pmgud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5EKTpE''@;'; put 'put ''KS50aGVuKEQ9PmEoRCxoKSkudGhlbihEPT5oLmhvb2tzP2guaG9va3MucG9zdHByb2Nlc3MoRCk6RCkuY2F0Y2goTSk7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSk7Y29uc3QgRD1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tl''@;'; put 'put ''bnMpO2xldCBaPWEoRCxoKTtyZXR1cm4gaC5ob29rcyYmKFo9aC5ob29rcy5wb3N0cHJvY2VzcyhaKSksWn1jYXRjaChEKXtyZXR1cm4gTShEKX19fSN0KGwsYSxkKXtyZXR1cm4gaD0+e2lmKGgubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9t''@;'; put 'put ''YXJrZWRqcy9tYXJrZWQuIixsKXtjb25zdCBmPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK3gxKGgubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGE/UHJvbWlzZS5yZXNvbHZlKGYpOmQ/dm9pZCBkKG51bGwsZik6Zn1pZihhKXJldHVybiBQcm9taXNlLnJlamVjdCho''@;'; put 'put ''KTtpZighZCl0aHJvdyBoO2QoaCl9fX0oUzYpO2Z1bmN0aW9uIFJsKGMsbCxhKXtyZXR1cm4gJDkucGFyc2UoYyxsLGEpfVJsLm9wdGlvbnM9Umwuc2V0T3B0aW9ucz1mdW5jdGlvbihjKXtyZXR1cm4gJDkuc2V0T3B0aW9ucyhjKSxqNmUoUmwuZGVmYXVsdHM9JDkuZGVmYXVsdHMpLFJsfSxS''@;'; put 'put ''bC5nZXREZWZhdWx0cz1mdW5jdGlvbiBudGUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFn''@;'; put 'put ''ZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxSbC5kZWZhdWx0cz1TNixSbC51c2U9ZnVuY3Rpb24o''@;'; put 'put ''Li4uYyl7cmV0dXJuICQ5LnVzZSguLi5jKSxqNmUoUmwuZGVmYXVsdHM9JDkuZGVmYXVsdHMpLFJsfSxSbC53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuICQ5LndhbGtUb2tlbnMoYyxsKX0sUmwucGFyc2VJbmxpbmU9JDkucGFyc2VJbmxpbmUsUmwuUGFyc2VyPW80LFJsLnBhcnNl''@;'; put 'put ''cj1vNC5wYXJzZSxSbC5SZW5kZXJlcj1jTixSbC5UZXh0UmVuZGVyZXI9cnRlLFJsLkxleGVyPWE0LFJsLmxleGVyPWE0LmxleCxSbC5Ub2tlbml6ZXI9bE4sUmwuU2x1Z2dlcj1pdGUsUmwuSG9va3M9dU4sUmwucGFyc2U9Umw7Y29uc3QgTGJ0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24g''@;'; put 'put ''T2J0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0IFBidD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxh''@;'; put 'put ''X21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBB''@;'; put 'put ''cHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJl''@;'; put 'put ''cjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9y''@;'; put 'put ''IGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBl''@;'; put 'put ''dmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0''@;'; put 'put ''byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Ut''@;'; put 'put ''bm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkg''@;'; put 'put ''Y2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVS''@;'; put 'put ''V0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJF''@;'; put 'put ''IExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMg''@;'; put 'put ''U09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9Umwuc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rv''@;'; put 'put ''d25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJl''@;'; put 'put ''cXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVy''@;'; put 'put ''blswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+ZCkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGEp''@;'; put 'put ''e2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7ZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNldEhlaWdodD49ZC5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyko''@;'; put 'put ''R2UodGwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKExidCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLm1hcmtkb3duQ2FyZD1mLmZpcnN0KX19LGRlY2xz''@;'; put 'put ''OjEzLHZhcnM6Nixjb25zdHM6W1sibWFya2Rvd25DYXJkIiwiIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywic2Nyb2xsIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYWNjZXB0LWNoZWNrYm94''@;'; put 'put ''Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xySW5saW5lIiwic21hbGwiLDQsIm5nSWYiXSxbImNscklubGluZSIsInNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLE9lKDIsIiBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAiKSxkZSgzLCJwIiksT2UoNCwiIFdlbGNvbWUgdG8gRGF0YSBDb250cm9sbGVyIGZvciBTQVMhIFBsZWFzZSByZXZpZXcgYW5kIGFjY2VwdCBhZ3Jl''@;'; put 'put ''ZW1lbnQgYmVsb3cgaW4gb3JkZXIgdG8gcHJvY2VlZC4gIiksaGUoKSgpLGRlKDUsImRpdiIsMywwKSxIdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkNhcmRCbG9ja1Njcm9sbChNKSl9KSxoZSgpLGRlKDcsImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIiLDUpKDksImlucHV0Iiw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguYWdyZWVDaGVja2VkLE0pfHwoaC5hZ3JlZUNoZWNrZWQ9TSksQ3QoTSl9KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnRlcm1zQWdyZWVD''@;'; put 'put ''aGFuZ2UoKSl9KSxoZSgpLGRlKDEwLCJsYWJlbCIpLE9lKDExLCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIpLGhlKCkoKSxtdCgxMixPYnQsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSgpfTImZCYmKGZlKDUpLHhlKCJpbm5lckhUTUwiLGguZXVsYV9t''@;'; put 'put ''YXJrZG93bixWNCksZmUoMyksVHIoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgpLHBpKCJuZ01vZGVsIixoLmFncmVlQ2hlY2tlZCkseGUoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgzKSx4ZSgibmdJZiIsaC5hZ3JlZUJveExvY2tlZCYmaC5hZ3JlZUNsaWNrZWQp''@;'; put 'put ''KX0sZGVwZW5kZW5jaWVzOltiYSxNZCxubCxHcyxkcyxJZCxTaCxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBGYnQoYyxsKXsxJmMmJihkZSgwLCJwIiwyOSksT2UoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1v''@;'; put 'put ''cmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLGhlKCkpfWZ1bmN0aW9uIEhidChjLGwpe2lmKDEmYyYmR3QoMCwicCIsMzApLDImYyl7Y29uc3QgYT1MZSgzKTt4ZSgiaW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0sVjQpfX1mdW5jdGlvbiBOYnQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJwIikoMSwic3Ryb25nIiksT2UoMiwiRGV0YWlsczoiKSxoZSgpLE9lKDMpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgzKSxJcigiICIsYS5lcnJvckRldGFpbHMsIiIpfX1mdW5jdGlvbiBWYnQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLEZidCwyLDAsInAiLDI3KSgy''@;'; put 'put ''LEhidCwxLDEsInAiLDI4KSgzLE5idCw0LDEsInAiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5rZXlFcnJvciksZmUoKSx4ZSgibmdJZiIsYS5rZXlFcnJvciksZmUoKSx4ZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBCYnQoYyxsKXsx''@;'; put 'put ''JmMmJihjaSgwKSxkZSgxLCJwIiwyOSksT2UoMiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIiksR3QoMywiY29udGFjdC1saW5rIiwzMSksT2UoNCwiIG9yIHlvdXIg''@;'; put 'put ''cmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gamJ0KGMsbCl7MSZjJiYoY2koMCksZGUoMSwicCIsMjkpLE9lKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGlj''@;'; put 'put ''ZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksaGUoKSx1aSgpKX1mdW5jdGlvbiB6YnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0LGQ9bC5pbmRleCxoPUxlKDIpO1RyKCJtaXNza2V5IixoLm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksZmUoKSx6dSgiICIsYSwiIixkPT09KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIFVidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMyKSgxLCJzdHJvbmciKSxPZSgyLCJBbGxvd2VkIHVzZXJzOiIpLGhlKCksT2UoMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDMpLElyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rp''@;'; put 'put ''b24gWmJ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzMpfWZ1bmN0aW9uIFdidChjLGwpezEmYyYmKGRlKDAsImRpdiIpLE9lKDEsIiBEcm9wIC8gQnJvd3NlIGxpY2VuY2UgZmlsZSAiKSxoZSgpKX1mdW5jdGlvbiBZYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxPZSgxLCIg''@;'; put 'put ''U2VsZWN0ZWQgZmlsZTogIiksZGUoMiwic3Ryb25nIiksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMyksQ3IoYS5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIEdidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsInN0cm9uZyIpLE9lKDIpLGhlKCkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPUxlKDMpO2ZlKDIpLENyKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uICRidChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsV2J0LDIsMCwiZGl2Iiw0KSgyLFlidCw0LDEsImRpdiIsNCkoMyxHYnQsMywxLCJkaXYiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgy''@;'; put 'put ''KTtmZSgpLHhlKCJuZ0lmIiwiIj09PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSx4ZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gS2J0KGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwz''@;'; put 'put ''NCksT2UoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLGhlKCkpfWZ1bmN0aW9uIHFidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSxPZSgyLCJMaWNlbmNpbmciKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiZGl2Iiw4KSxtdCg1LFZidCw0''@;'; put 'put ''LDMsIm5nLWNvbnRhaW5lciIsOSkoNixCYnQsNSwwLCJuZy1jb250YWluZXIiLDkpKDcsamJ0LDMsMCwibmctY29udGFpbmVyIiw5KSxkZSg4LCJwIikoOSwic3Ryb25nIiksT2UoMTAsIlNZU1NJVEU6IiksaGUoKSxtdCgxMSx6YnQsMiw0LCJzcGFuIiwxMCksZGUoMTIsImEiLDExKSxIdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxNCksZj1oYSgxNiksdj1MZSgpO3JldHVybiBDdCh2LmNvcHlTeXNzaXRlKGgsZix2LnN5c3NpdGUudmFsdWV8fFtdKSl9KSxHdCgxMywiY2xyLWljb24iLDEyLDApLGRlKDE1LCJzcGFuIiwxMywxKSxPZSgxNywiQ29weSB0byBj''@;'; put 'put ''bGlwYm9hcmQiKSxoZSgpKCkoKSxtdCgxOCxVYnQsNCwxLCJwIiwxNCksZGUoMTksImNsci10YWJzIikoMjAsImNsci10YWIiKSgyMSwiYnV0dG9uIiwxNSksT2UoMjIsIlVwbG9hZCBsaWNlbmNlIiksaGUoKSxkZSgyMywiY2xyLXRhYi1jb250ZW50IikoMjQsImlucHV0IiwxNiwyKSxIdCgi''@;'; put 'put ''Y2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLGhlKCksZGUoMjYsImRpdiIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoaGEoMjUpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoTGUoKS5vbkZpbGVDYXB0dXJlKGgsITApKX0pLG10KDI3LFpidCwxLDAsImNsci1zcGlubmVyIiwxOCkoMjgsJGJ0LDQsMywibmctY29udGFpbmVyIiw0KSxoZSgpKCkoKSxkZSgyOSwiY2xyLXRhYiIpKDMwLCJidXR0b24iLDE1KSxPZSgzMSwiUGFzdGUgbGljZW5jZSIp''@;'; put 'put ''LGhlKCksZGUoMzIsImNsci10YWItY29udGVudCIpKDMzLCJmb3JtIiwxOSkoMzQsInAiKSxPZSgzNSwiTGljZW5jZSBrZXk6IiksaGUoKSxkZSgzNiwiZGl2IiwyMCkoMzcsInRleHRhcmVhIiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTty''@;'; put 'put ''ZXR1cm4gbWkoZi5saWNlbmNlS2V5VmFsdWUsaCl8fChmLmxpY2VuY2VLZXlWYWx1ZT1oKSxDdChoKX0pLEh0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnRyaW1LZXlzKCkpfSksaGUoKSgpKCksZGUoMzgsImZvcm0iLDIyKSgzOSwicCIpLE9lKDQwLCJB''@;'; put 'put ''Y3RpdmF0aW9uIGtleToiKSxoZSgpLGRlKDQxLCJkaXYiLDIwKSg0MiwidGV4dGFyZWEiLDIzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmFjdGl2YXRpb25LZXlWYWx1ZSxoKXx8KGYuYWN0aXZhdGlvbktleVZhbHVlPWgp''@;'; put 'put ''LEN0KGgpfSksSHQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSgpKCkoKSgpLGRlKDQzLCJkaXYiLDI0KSg0NCwiYnV0dG9uIiwyNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmFw''@;'; put 'put ''cGx5S2V5cygpKX0pLE9lKDQ1LCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLGhlKCksbXQoNDYsS2J0LDIsMCwiYnV0dG9uIiwyNiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoMykseGUoIm5nU3dpdGNoIixhLmFjdGlvbiksZmUoMikseGUoIm5nU3dpdGNoQ2FzZSIsImtleSIp''@;'; put 'put ''LGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksZmUoNCkseGUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52YWx1ZSksZmUoNykseGUoIm5nSWYiLGEubGljZW5zZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksZmUoOSks''@;'; put 'put ''eGUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKDkpLHBpKCJuZ01vZGVsIixhLmxpY2VuY2VLZXlWYWx1ZSksZmUoNSkscGkoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxmZSgyKSx4ZSgiY2xyTG9h''@;'; put 'put ''ZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLGZlKDIpLHhlKCJuZ0lmIixhLmlzQXBwRnJlZVRpZXIudmFsdWUpfX1mdW5jdGlvbiBYYnQoYyxsKXsxJmMmJkd0KDAsImFwcC10ZXJtcyIpfXZhciBxNmU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMu''@;'; put 'put ''a2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocTZlfHx7fSk7Y29uc3QgSmJ0PVt7cGF0aDoiOmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRo''@;'; put 'put ''aXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIg''@;'; put 'put ''aHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3It''@;'; put 'put ''Z3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9''@;'; put 'put ''ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhl''@;'; put 'put ''IGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5j''@;'; put 'put ''ZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRB''@;'; put 'put ''Y3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24s''@;'; put 'put ''dGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0''@;'; put 'put ''aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVy''@;'; put 'put ''cm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHE2ZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2Vy''@;'; put 'put ''dmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3Qg''@;'; put 'put ''Zj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVn''@;'; put 'put ''aXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJT''@;'; put 'put ''VUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50''@;'; put 'put ''YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9dj0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBm''@;'; put 'put ''aWxlLiIsIXZ8fCF2LnRhcmdldHx8MiE9di50YXJnZXQucmVhZHlTdGF0ZXx8di50YXJnZXQuZXJyb3J8fCF2LnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgTT12LnRhcmdldC5yZXN1bHQu''@;'; put 'put ''dG9TdHJpbmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1NWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPU1bMF19LGYucmVhZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxp''@;'; put 'put ''Y2VuY2VLZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGljZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEN1KSxHZSh1MSksR2UodGwpLEdlKG9MKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjb3B5''@;'; put 'put ''SWNvbiIsIiJdLFsiY29weVRvb2x0aXAiLCIiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzEsImNhcmQtdGV4dCJdLFs0LCJu''@;'; put 'put ''Z1N3aXRjaENhc2UiXSxbMywibWlzc2tleSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10b3AtcmlnaHQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWzEsInRvb2x0aXAt''@;'; put 'put ''Y29udGVudCJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjaGFuZ2UiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxbImNsYXNzIiwic3Bpbm5lci1z''@;'; put 'put ''bSIsNCwibmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwibGljZW5zZS1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0aXZhdGlvbi1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYXBwbHkta2V5cyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbInJv''@;'; put 'put ''dXRlckxpbmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJp''@;'; put 'put ''bm5lckhUTUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZtdCgwLHFidCw0NywxMywiZGl2IiwzKSgx''@;'; put 'put ''LFhidCwxLDAsImFwcC10ZXJtcyIsNCksMiZkJiYoeGUoIm5nSWYiLCJyZWdpc3RlciIhPT1oLmFjdGlvbiksZmUoKSx4ZSgibmdJZiIsInJlZ2lzdGVyIj09PWguYWN0aW9uKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsUzIsY3AsczcscWwsbmwsYTcsR3MseXAsSGwsajAsUDIsX20sQ20sTTcs''@;'; put 'put ''d20seW0sQzcsUmQsYzEsUGJ0LHBPXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGNhbkFjdGl2YXRlOlt0dGVdLGNhbkRlYWN0aXZhdGU6W3R0ZV19XTtsZXQgUWJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChKYnQpLHpjXX0pfX1yZXR1cm4gY30pKCksZXl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyx6MCxRYnQsQ3ddfSl9fXJldHVybiBjfSkoKTtjb25zdCB0eXQ9KCk9Pih7c3RhbmRhbG9uZTohMH0pLFg2ZT0oYyxsLGEpPT4o''@;'; put 'put ''e2FkZGVkUm93OmMsZGVsZXRlZFJvdzpsLHVwZGF0ZWRSb3c6YX0pLEo2ZT1jPT4oeyJjaCB0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC10b3AtcmlnaHQiOmN9KTtmdW5jdGlvbiBueXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsMTkpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgp''@;'; put 'put ''LiRpbXBsaWNpdCxkPUxlKCk7eGUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIitkLmpzUGFyYW1zW2FdKSxmZSgpLElyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIHJ5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1w''@;'; put 'put ''bGljaXQsZD1MZSgpO2ZlKCksSXIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gaXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksT2UoMiksaGUoKSxtdCgzLG55dCwyLDIsInRkIiwxNykoNCxyeXQsMiwxLCJ0ZCIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1s''@;'; put 'put ''LiRpbXBsaWNpdDtmZSgyKSxDcihhKSxmZSgpLHhlKCJuZ0lmIixhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKSxmZSgpLHhlKCJuZ0lmIiwhYS5pbmNsdWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0aW9uIGF5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLE9lKDIpLGhlKCksZGUo''@;'; put 'put ''MywidGQiLDQpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoMyk7ZmUoMiksQ3IoYSksZmUoMiksQ3IoZC5zdWJtaXREZXRhaWxzW2FdKX19ZnVuY3Rpb24gb3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyMikoMiwi''@;'; put 'put ''dGFibGUiLDMpKDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksT2UoNiwiTmFtZSIpLGhlKCksZGUoNywidGgiLDQpLE9lKDgsIlZhbHVlIiksaGUoKSgpKCksZGUoOSwidGJvZHkiKSxtdCgxMCxheXQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDEw''@;'; put 'put ''KSx4ZSgibmdGb3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiBzeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxPZSgyKSxoZSgpLGRlKDMsInRkIiw0KSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDIpO2ZlKDIpLENyKGEpLGZlKDIp''@;'; put 'put ''LENyKGQuanNQYXJhbXNbYV0pfX1mdW5jdGlvbiBseXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDIwKSxPZSgzLCJTdWJtaXR0ZWQgVGFibGUgRGV0YWlscyIpLGhlKCksbXQoNCxveXQsMTEsMSwiY2xyLXRhYi1jb250ZW50IiwyMSks''@;'; put 'put ''aGUoKSxkZSg1LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksT2UoNywiQmFzZSBUYWJsZSBEZXRhaWxzIiksaGUoKSxkZSg4LCJjbHItdGFiLWNvbnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwidGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksT2UoMTQsIk5hbWUiKSxo''@;'; put 'put ''ZSgpLGRlKDE1LCJ0aCIsNCksT2UoMTYsIlZhbHVlIiksaGUoKSgpKCksZGUoMTcsInRib2R5IiksbXQoMTgsc3l0LDUsMiwidHIiLDUpLGhlKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSx4ZSgiY2xySWZBY3RpdmUiLCEwKSxmZSgxNCkseGUoIm5nRm9yT2YiLGEua2V5''@;'; put 'put ''c0FycmF5KX19ZnVuY3Rpb24gY3l0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIpLE9lKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWlscyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIHV5dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImRpdiIsNzMpKDIsInNwYW4iKSxPZSgzLCJUYWJsZSBJZDoi''@;'; put 'put ''KSxoZSgpLGRlKDQsInN0cm9uZyIsNzQpLE9lKDUpLGhlKCkoKSxkZSg2LCJkaXYiKSg3LCJzcGFuIiksT2UoOCwiU3VibWl0dGVyOiIpLGhlKCksZGUoOSwic3BhbiIsNzUpLE9lKDEwKSxoZSgpKCksZGUoMTEsImRpdiIpKDEyLCJzcGFuIiksT2UoMTMsIlN1Ym1pdHRlZCBvbjoiKSxoZSgp''@;'; put 'put ''LGRlKDE0LCJzcGFuIiw3NSksT2UoMTUpLGhlKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxPZSgxOCwiU3VibWl0dGVkIFJlYXNvbjoiKSxoZSgpLGRlKDE5LCJzcGFuIiw3NSksT2UoMjApLGhlKCkoKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCkseGUoInJvdXRlckxpbmsi''@;'; put 'put ''LCIvc3RhZ2UvIisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLGZlKCksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiAiKSxmZSg1KSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/''@;'; put 'put ''bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfQllfTk0sIiAiKSxmZSg1KSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGZlKDUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVE''@;'; put 'put ''ZXRhaWxzLlNVQk1JVFRFRF9SRUFTT05fVFhULCIgIil9fWZ1bmN0aW9uIGR5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxHdCgxLCJjbHItaWNvbiIsNzcpLE9lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiks''@;'; put 'put ''aGUoKSl9ZnVuY3Rpb24gaHl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSksbXQoMyxjeXQsMiwwLCJwIiw0NSkoNCx1eXQsMjEsNSwibmctY29udGFpbmVyIiw4KSxoZSgpLGRlKDUsImRpdiIsNTIpKDYsImRpdiIsNTMp''@;'; put 'put ''KDcsImRpdiIsNTQpKDgsImRpdiIsNTUpKDksImJ1dHRvbiIsNTYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDQpO3JldHVybiBDdChoLmdvVG9CYXNlKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxPZSgxMCwiIFZpZXcgYmFz''@;'; put 'put ''ZSB0YWJsZSAiKSxoZSgpLGRlKDExLCJidXR0b24iLDU3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSg0KTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnRhYmxlSWQpKX0pLE9lKDEyLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDU4KSxI''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSg0KTtyZXR1cm4gQ3QoaC5nb0JhY2sobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLE9lKDE0LCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTUsImRpdiIsNTkpKDE2LCJi''@;'; put 'put ''dXR0b24iLDYwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLmFwcHJvdmVUYWJsZSgpKX0pLE9lKDE3LCIgQUNDRVBUICIpLGhlKCksZGUoMTgsImJ1dHRvbiIsNjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkucmVqZWN0''@;'; put 'put ''T3Blbj0hMCl9KSxPZSgxOSwiIFJFSkVDVCAiKSxoZSgpLGRlKDIwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsNjIpKDIxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMiwiaW5wdXQiLDYzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSg0KTtyZXR1cm4g''@;'; put 'put ''bWkoZi5mb3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSksaGUoKSxkZSgyMywibGFiZWwiLDY0KSxPZSgyNCksaGUoKSgpKCkoKSxk''@;'; put 'put ''ZSgyNSwiZGl2Iiw2NSksbXQoMjYsZHl0LDMsMCwic3BhbiIsNjYpLGRlKDI3LCJkaXYiLDMxKSgyOCwiZGl2Iiw2NykoMjksInNwYW4iLDY4KSxPZSgzMCwiIENoYW5nZWQgUm93cyAiKSxkZSgzMSwic3BhbiIsNjkpLE9lKDMyKSxoZSgpKCksZGUoMzMsInNwYW4iLDcwKSxPZSgzNCwiIEFk''@;'; put 'put ''ZGVkIFJvd3MgIiksZGUoMzUsInNwYW4iLDY5KSxPZSgzNiksaGUoKSgpLGRlKDM3LCJzcGFuIiw3MSksT2UoMzgsIiBEZWxldGVkIFJvd3MgIiksZGUoMzksInNwYW4iLDY5KSxPZSg0MCksaGUoKSgpKCkoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSg0KTtmZSgzKSx4ZSgibmdJZiIs''@;'; put 'put ''IWEudGFibGVEZXRhaWxzKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlRGV0YWlscyksZmUoMTIpLHhlKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRpbmcpKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8''@;'; put 'put ''fGEubm9DaGFuZ2VzKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksZmUoNCkscGkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSxDcihhLmZv''@;'; put 'put ''cm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSx4ZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSxDcihhLmxlbnMudXBkYXRlZCksZmUoNCksQ3IoYS5sZW5zLm5ldyksZmUoNCksQ3IoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiBmeXQoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksT2UoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gcHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksbXQoMyxmeXQsMywwLCJkaXYiLDgwKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoMykseGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIGd5dChjLGwpezEmYyYmKGRlKDAsInAiLDcyKSxPZSgxLCIgVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiBteXQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJ0aCIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksQ3IoYSl9fWZ1bmN0aW9uIHZ5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDIpLmluZGV4LGg9TGUoNCk7ZmUo''@;'; put 'put ''KSxJcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBieXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsODQpLE9lKDEpLG10KDIsdnl0LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgs''@;'; put 'put ''aD1MZSgyKS5pbmRleCxmPUxlKDQpO3hlKCJuZ0NsYXNzIixzcCgzLEo2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLGZlKCksSXIoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLHhlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1b''@;'; put 'put ''ZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIHl5dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsYnl0LDMsNSwidGQiLDgzKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDQpO2ZlKCkseGUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIF95''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKS5pbmRleCxoPUxlKDQpO2ZlKCksSXIoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24gd3l0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQo''@;'; put 'put ''MSxfeXQsMiwxLCJ0ZCIsNDcpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpLmluZGV4LGQ9TGUoNCk7ZmUoKSx4ZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gQ3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxtdCgxLHl5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix3''@;'; put 'put ''eXQsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9TGUoNCk7eGUoIm5nQ2xhc3MiLHBNKDMsWDZlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCkseGUoIm5nSWYiLCJ1''@;'; put 'put ''cGRhdGVkIj09PWQuY2hBcnJbYV0pLGZlKCkseGUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBTeXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMyks''@;'; put 'put ''SHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5nb1RvQXBwcm92YWxzTGlzdCgpKX0pLEd0KDUsImNsci1pY29uIiwzNCksT2UoNiwiQmFjayB0byBhcHByb3ZhbHMgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxPZSg5KSxoZSgpKCks''@;'; put 'put ''ZGUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5nZXREZXRhaWxzKCkpfSksR3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCksZGUoMTMsInAiLDQwKSxPZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDQxKSxtdCgx''@;'; put 'put ''NixoeXQsNDEsMTEsImRpdiIsNDIpLGhlKCksbXQoMTcscHl0LDQsMSwiZGl2Iiw0MyksZGUoMTgsImRpdiIsNDQpLG10KDE5LGd5dCwyLDAsInAiLDQ1KSxkZSgyMCwidGFibGUiLDMpKDIxLCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLG10KDIzLG15dCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDI0''@;'; put 'put ''LCJ0Ym9keSIpLG10KDI1LEN5dCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoOSksSXIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX05NLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpz''@;'; put 'put ''UGFyYW1zLlRBQkxFX0RFU0MsIiAiKSxmZSgyKSx4ZSgibmdJZiIsYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksZmUoMikseGUoIm5nSWYiLGEubG9hZGluZ1RhYmxlJiZhLm5vQ2hhbmdlcyksZmUoNCkseGUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSx4''@;'; put 'put ''ZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gTXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNyksbXQoMSxTeXQsMjYsNywiZGl2IiwyOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24geHl0KGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwic3BhbiIsNzkpLE9lKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIEV5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiwiTG9hZGluZyBwcmV2aWV3IiksaGUoKSgpKX1mdW5jdGlvbiBUeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg3KSxtdCgx''@;'; put 'put ''LHh5dCwyLDAsInNwYW4iLDg4KSgyLEV5dCwzLDAsImRpdiIsOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gQXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMyksbXQoMSxN''@;'; put 'put ''eXQsMiwxLCJkaXYiLDI0KSxkZSgyLCJkaXYiLDI1KSxtdCgzLFR5dCwzLDIsImRpdiIsMjYpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5sb2FkZWQpLGZlKDIpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBreXQoYyxsKXsxJmMmJihkZSgwLCJz''@;'; put 'put ''cGFuIiw3NiksR3QoMSwiY2xyLWljb24iLDc3KSxPZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1bmN0aW9uIER5dChjLGwpezEmYyYmR3QoMCwiZGl2Iiw0OSl9ZnVuY3Rpb24gSXl0KGMsbCl7MSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLE9lKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIFJ5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA0KSgxLCJzcGFuIiw3OSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxtdCgzLEl5dCwzLDAsImRpdiIsODApLGhl''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgzKSx4ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gTHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLENyKGEpfX1mdW5jdGlvbiBPeXQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJzcGFuIiw4NiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuaW5kZXgsZD1MZSgyKS5pbmRleCxoPUxlKDQpO2ZlKCksSXIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gUHl0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwidGQiLDg0KSxPZSgxKSxtdCgyLE95dCwyLDEsInNwYW4iLDg1KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMikuaW5kZXgsZj1MZSg0KTt4ZSgibmdDbGFzcyIsc3AoMyxKNmUsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYu''@;'; put 'put ''Y2hBcnJbaF0pKSxmZSgpLElyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksZmUoKSx4ZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBGeXQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLFB5dCwzLDUsInRkIiw4''@;'; put 'put ''MyksdWkoKSksMiZjKXtjb25zdCBhPUxlKCkuaW5kZXgsZD1MZSg0KTtmZSgpLHhlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBIeXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoMikuaW5kZXgs''@;'; put 'put ''aD1MZSg0KTtmZSgpLElyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIE55dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsSHl0LDIsMSwidGQiLDQ3KSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDQpO2ZlKCkseGUoIm5nRm9yT2YiLGQucm93''@;'; put 'put ''S2V5c1thXSl9fWZ1bmN0aW9uIFZ5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4MiksbXQoMSxGeXQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsTnl0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPUxlKDQpO3hlKCJuZ0NsYXNzIixwTSgzLFg2''@;'; put 'put ''ZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxmZSgpLHhlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxmZSgpLHhlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gQnl0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5MykoMSwiZGl2Iiw5NCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsOTUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykuZ29Ub1N1Ym1pdExpc3QoKSl9KSxHdCg1LCJjZHMtaWNvbiIs''@;'; put 'put ''OTYpLE9lKDYsIkJhY2sgdG8gc3VibWl0dGVkIGxpc3QgIiksaGUoKSgpLGRlKDcsImRpdiIsOTcpKDgsImgzIiw5OCksT2UoOSksaGUoKSgpLGRlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykudGFibGVGbGFnPSEw''@;'; put 'put ''KX0pLEd0KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw5OSksT2UoMTQpLGhlKCkoKSxkZSgxNSwiZGl2Iiw1MCkoMTYsImRpdiIsNTEpKDE3LCJkaXYiLDczKSgxOCwic3BhbiIpLE9lKDE5LCJUYWJsZSBJZDoiKSxoZSgpLGRlKDIwLCJzdHJvbmciLDc0KSgyMSwic3Bh''@;'; put 'put ''biIpLE9lKDIyKSxoZSgpKCkoKSxkZSgyMywiZGl2IikoMjQsInNwYW4iKSxPZSgyNSwiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMjYsInNwYW4iLDc1KSxPZSgyNyksaGUoKSgpLGRlKDI4LCJkaXYiKSgyOSwic3BhbiIpLE9lKDMwLCJTdWJtaXQgTWVzc2FnZToiKSxoZSgpLGRlKDMxLCJz''@;'; put 'put ''cGFuIiksT2UoMzIpLGhlKCkoKSgpLGRlKDMzLCJkaXYiLDUyKSgzNCwiZGl2Iiw1MykoMzUsImRpdiIsNTQpKDM2LCJkaXYiLDU1KSgzNywiYnV0dG9uIiw1NiksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGguZ29Ub0Jhc2UoaC5zdWJPYmou''@;'; put 'put ''YmFzZSkpfSksT2UoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgzOSwiYnV0dG9uIiw1NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksT2UoNDAsIiBWaWV3IHN0YWdlZCBk''@;'; put 'put ''YXRhICIpLGhlKCksZGUoNDEsImJ1dHRvbiIsNTgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDMpO3JldHVybiBDdChoLmdvQmFjayhoLnN1Yk9iai5iYXNlKSl9KSxPZSg0MiwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpKCkoKSgpLGRlKDQzLCJkaXYiLDY1KSxt''@;'; put 'put ''dCg0NCxreXQsMywwLCJzcGFuIiw2NiksZGUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLE9lKDQ4LCIgQ2hhbmdlZCBSb3dzICIpLGRlKDQ5LCJzcGFuIiw2OSksT2UoNTApLGhlKCkoKSxkZSg1MSwic3BhbiIsNzApLE9lKDUyLCIgQWRkZWQgUm93cyAiKSxkZSg1''@;'; put 'put ''Mywic3BhbiIsNjkpLE9lKDU0KSxoZSgpKCksZGUoNTUsInNwYW4iLDcxKSxPZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxkZSg1Nywic3BhbiIsNjkpLE9lKDU4KSxoZSgpKCkoKSgpKCksZGUoNTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTAwKSg2MSwiY2xyLXRvZ2ds''@;'; put 'put ''ZS13cmFwcGVyIikoNjIsImlucHV0Iiw2MyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMyk7cmV0dXJuIG1pKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB3dChhKSxDdChMZSgzKS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUoNjMsImxhYmVsIiksT2UoNjQpLGhlKCkoKSgpKCkoKSgpLGRlKDY1LCJkaXYiLDEwMSksbXQoNjYsRHl0LDEsMCwiZGl2Iiw0MiksaGUoKSxtdCg2NyxSeXQsNCwxLCJkaXYiLDEwMiksZGUoNjgsImRp''@;'; put 'put ''diIsMTAzKSg2OSwidGFibGUiLDMpKDcwLCJ0aGVhZCIpKDcxLCJ0ciIsNDYpLG10KDcyLEx5dCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDczLCJ0Ym9keSIpLG10KDc0LFZ5dCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoOSksSXIoIiAiLGEuc3Vi''@;'; put 'put ''T2JqLmJhc2UsIiAiKSxmZSg1KSxJcigiICIsYS50YWJsZURlc2NyaXB0aW9uLCIgIiksZmUoNikseGUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIithLnN1Yk9iai50YWJsZUlkKSxmZSgyKSxJcigiICIsYS5zdWJPYmoudGFibGVJZCwiIiksZmUoNSksSXIoIiAiLGEuc3ViT2JqLnN1Ym1pdHRl''@;'; put 'put ''ZCwiICIpLGZlKDUpLElyKCIgIixhLnN1Yk9iai5zdWJtaXRSZWFzb24sIiAiKSxmZSgxMikseGUoIm5nSWYiLGEuZGlmZnNMaW1pdCksZmUoNiksQ3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQpLENyKGEubGVucy5uZXcpLGZlKDQpLENyKGEubGVucy5kZWxldGVkKSxmZSg0KSxwaSgibmdNb2Rl''@;'; put 'put ''bCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLENyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSg1KSx4ZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIp''@;'; put 'put ''LGZlKDIpLHhlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBqeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkxKSxtdCgxLEJ5dCw3NSwxNiwiZGl2Iiw5MiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24genl0KGMs''@;'; put 'put ''bCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gVXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDUpKDEsImRpdiIsMTA2KSgyLCJzcGFuIiw3OSksT2UoMywiIExvYWRpbmcuLi4gIiksaGUoKSxt''@;'; put 'put ''dCg0LHp5dCwzLDAsImRpdiIsOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFp5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLG10KDEsanl0LDIsMSwiZGl2Iiw4OSkoMixVeXQsNSwxLCJkaXYiLDkwKSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19bGV0IFE2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRl''@;'; put 'put ''cj1oLHRoaXMucm91dGU9Zix0aGlzLmRldGFpbHNPcGVuPSExLHRoaXMucmVqZWN0T3Blbj0hMSx0aGlzLmxlbnM9e25ldzowLHVwZGF0ZWQ6MCxkZWxldGVkOjB9LHRoaXMubG9hZGVkPSExLHRoaXMubG9hZGluZ1RhYmxlPSExLHRoaXMuc3VibWl0UmVhc29uPSIiLHRoaXMuaW5zdGFuY2U9''@;'; put 'put ''ImhvdEluc3RhbmNlIix0aGlzLmFjY2VwdExvYWRpbmc9ITEsdGhpcy5yZWplY3RMb2FkaW5nPSExLHRoaXMuc3VibWl0dGVkPSExLHRoaXMudGFibGVGbGFnPSExLHRoaXMucm93S2V5cz1bXSx0aGlzLmNoQXJyPVtdLHRoaXMuc2Vjb25kT3Blbj0hMSx0aGlzLmZvcm1hdHRlZFZhbHVlcz0h''@;'; put 'put ''MCx0aGlzLmNoYW5nZXNBcnI9W10sdGhpcy5kaWZmVGFibGU9e2RhdGE6W119LHRoaXMuZGlmZnNMaW1pdD0hMSx0aGlzLnJlY29yZHNMaW1pdD0xMDB9Z2V0IG5vQ2hhbmdlcygpe3JldHVybiAwPT09dGhpcy5sZW5zLm5ldyYmMD09PXRoaXMubGVucy51cGRhdGVkJiYwPT09dGhpcy5sZW5z''@;'; put 'put ''LmRlbGV0ZWR9Z29Ub0Jhc2UoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z29Ub0FwcHJvdmFsc0xpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZSIpfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgi''@;'; put 'put ''L3N0YWdlLyIrYSl9Z29CYWNrKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93RGV0YWlsc1NlbGVjdChhKXthLnByZXZlbnREZWZhdWx0KCksdGhpcy50YWJsZUZs''@;'; put 'put ''YWc9IXRoaXMudGFibGVGbGFnfWdldERldGFpbHMoKXt0aGlzLmRldGFpbHNPcGVuPSEwfW9uSG90U2VsZWN0aW9uKGEpe3RoaXMuaG90U2VsZWN0aW9uPWEuc2xpY2UoMCw0KX1vbkhvdERlc2VsZWN0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90U2VsZWN0aW9uPW51bGx9LDEwMCl9cmVq''@;'; put 'put ''ZWN0aW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5yZWplY3RMb2FkaW5nPSEwLGEuc3VibWl0UmVhc29uPWEuc3VibWl0UmVhc29uLnJlcGxhY2UoL1xuL2csIi4gIik7bGV0IGQ9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLFNUUF9S''@;'; put 'put ''RUFTT046YS5zdWJtaXRSZWFzb259O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2Nl''@;'; put 'put ''cHRMb2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0hMX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmFjY2VwdExvYWRpbmc9ITA7bGV0IGQ9e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOmEucGFy''@;'; put 'put ''YW1zPy5ESUZGVElNRSxMSUJEUzphLnBhcmFtcz8uTElCRFN9O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVUYWJsZShkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9''@;'; put 'put ''KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSl9KSgpfWdvVG9TdWJtaXRMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZCIpfWNhbGxDaGFuZ2VzSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXt5aWVsZCBkLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEpLnRoZW4oaD0+e2QudGFibGVEZXRhaWxzPWguanNwYXJhbXNbMF0sZC5qc1BhcmFtcz1oLmpzcGFyYW1zWzBdO2xldCBmPVtdO2Zvcihjb25zdCB2IGluIGQuanNQYXJhbXMpZC5qc1BhcmFtcy5oYXNPd25Qcm9wZXJ0eSh2KSYmZi5wdXNoKHYp''@;'; put 'put ''O2Qua2V5c0FycmF5PWZ9KS5jYXRjaChoPT57ZC5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2QubG9hZGVkPSEwfSl9KSgpfWZvcm1hdHRpbmdDaGFuZ2VkKCl7dGhpcy5jYWxjRGlmZigpfWNhbGNEaWZmKCl7aWYoIXRoaXMucmVzcG9uc2UpcmV0dXJuO2xldCBhPXRoaXMucmVz''@;'; put 'put ''cG9uc2UubmV3LGQ9dGhpcy5yZXNwb25zZS51cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5vcmlnaW5hbHM7dGhpcy5mb3JtYXR0ZWRWYWx1ZXMmJihhPXRoaXMucmVzcG9uc2UuZm10X25ldyxkPXRoaXMucmVzcG9uc2UuZm10X3VwZGF0ZXMsaD10aGlz''@;'; put 'put ''LnJlc3BvbnNlLmZtdF9kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5mbXRfb3JpZ2luYWxzKSx0aGlzLm9yaWdpbmFscz1mLHRoaXMucm93S2V5cz1bXTtmb3IobGV0IGR0PTA7ZHQ8ZC5sZW5ndGg7ZHQrKyl7bGV0IEp0PU9iamVjdC5rZXlzKGRbZHRdKTtmb3IobGV0IHZuPTA7dm48SnQubGVu''@;'; put 'put ''Z3RoO3ZuKyspZFtkdF1bSnRbdm5dXSE9PWZbZHRdW0p0W3ZuXV0mJnRoaXMuY2hhbmdlc0Fyci5wdXNoKHtpbmQ6ZHQsZmllbGQ6SnRbdm5dLHByb3A6ZFtkdF1bSnRbdm5dXSxvcmlnaW5hbDpmW2R0XVtKdFt2bl1dfSl9dGhpcy5sZW5zPXtuZXc6dGhpcy5wYXJhbXM/Lk5VTV9BRERFRHx8''@;'; put 'put ''MCx1cGRhdGVkOnRoaXMucGFyYW1zPy5OVU1fVVBEQVRFRHx8MCxkZWxldGVkOnRoaXMucGFyYW1zPy5OVU1fREVMRVRFRHx8MH07bGV0IFo9W10scmU9ZC5jb25jYXQoYSxoKTtmb3IobGV0IGR0PTA7ZHQ8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtkdCsrKVoucHVzaCh0aGlzLnJlc3Bv''@;'; put 'put ''bnNlLmNvbHNbZHRdLk5BTUUpO2xldCBjZT10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy5uZXcsYmU9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLnVwZGF0ZWQ7''@;'; put 'put ''dGhpcy5kaWZmc0xpbWl0PXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50PWNlO2xldCBCZT1bXSxxZT1bXTtmb3IobGV0IGR0''@;'; put 'put ''PTA7ZHQ8Wi5sZW5ndGg7ZHQrKylxZS5wdXNoKHtkYXRhOlpbZHRdLHJlYWRPbmx5OiEwfSk7dGhpcy5kaWZmVGFibGUuZGF0YT1yZTtmb3IobGV0IGR0PTA7ZHQ8cmUubGVuZ3RoO2R0Kyspe2xldCB2bj1PYmplY3Qua2V5cyhyZVtkdF0pO3RoaXMucm93S2V5cy5wdXNoKHZuKX1sZXQgcnQ9''@;'; put 'put ''W10scHQ9W107Zm9yKGxldCBkdD0wO2R0PHRoaXMuZGlmZlRhYmxlLmRhdGEubGVuZ3RoO2R0Kyspe2lmKGR0PGJlJiYwIT09YmUpe3J0LnB1c2goW10pLHB0LnB1c2goW10pLEJlLnB1c2goInVwZGF0ZWQiKTtsZXQgSnQ9T2JqZWN0LmtleXModGhpcy5kaWZmVGFibGUuZGF0YVtkdF0pO2Zv''@;'; put 'put ''cihsZXQgdm49MDt2bjxKdC5sZW5ndGg7dm4rKyl7bGV0IENuPUp0W3ZuXTtmW2R0XVtDbl0hPT1kW2R0XVtDbl0/KHJ0W2R0XS5wdXNoKCEwKSxwdFtkdF0ucHVzaChmW2R0XVtDbl0pKToocnRbZHRdLnB1c2goITEpLHB0W2R0XS5wdXNoKG51bGwpKX10aGlzLmFyckNoYW5nZWQ9cnQsdGhp''@;'; put 'put ''cy5hcnJPZkNoYW5nZXM9cHR9ZHQ+PWJlJiZkdDxiZStjZSYmQmUucHVzaCgiYWRkZWQiKSxkdD5jZStiZS0xJiZCZS5wdXNoKCJkZWxldGVkIil9dGhpcy5jaEFycj1CZSx0aGlzLnJvd0hlYWRlcj10aGlzLnJvd0tleXNbMF0sdGhpcy5kaWZmVGFibGUuZGF0YT1yZX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLl9kZXRhaWxzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnN1Ym1pdHREZXRhaWwuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYpe2Euc3ViT2JqPWYudmlld0RhdGEsYS50YWJsZUlkPWYudmll''@;'; put 'put ''d0RhdGEudGFibGVJZCxhLnN1Ym1pdHRlZD1mLnZpZXdEYXRhLnN1YixhLnN1Ym1pdERldGFpbHM9Zi5kYXRhLGEuc3VibWl0QXJyPVtdO2ZvcihsZXQgTSBpbiBhLnN1Ym1pdERldGFpbHMpInN1YiIhPT1NJiZhLnN1Ym1pdEFyci5wdXNoKE0pO2xldCB2PXtBQ1RJT046IlNIT1dfRElGRlMi''@;'; put 'put ''LFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyh2LCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oTT0+e2EucGFyYW1zPU0ucGFyYW1zWzBdLGEucmVzcG9uc2U9TSxh''@;'; put 'put ''LmNhbGNEaWZmKCksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pLmNhdGNoKE09Pk0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHR5cGVvZiBhLnJvdXRlci5zbmFw''@;'; put 'put ''c2hvdC5wYXJhbXMudGFibGVJZD4idSIpcmV0dXJuO2EudGFibGVJZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDtsZXQgZD17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2Vy''@;'; put 'put ''dmljZS5zaG93RGlmZnMoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnBhcmFtcz1oLnBhcmFtc1swXSxhLnJlc3BvbnNlPWgsYS5jYWxjRGlmZigpLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KS5jYXRjaChoPT57YS5hY2NlcHRMb2Fk''@;'; put 'put ''aW5nPSExfSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwLGEuc2V0Rm9jdXMoKX0pfSkoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RldGFpbHNTdWImJnRoaXMuX2RldGFpbHNTdWIudW5zdWJzY3JpYmUoKX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9j''@;'; put 'put ''dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjY2VwdEJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShVaCksR2UodmMpLEdlKEN1KSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NDIsdmFyczoxMixjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwt''@;'; put 'put ''Ym9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFs0LCJuZ0lmIl0sWzEsImZvcm0tYmxvY2siXSxbMSwiZm9y''@;'; put 'put ''bS1ncm91cCJdLFsiZm9yIiwiZm9ybUZpZWxkc184Il0sWyJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsImlubmVySFRNTCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91''@;'; put 'put ''dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCBsaW5rLWl0IiwzLCJyb3V0''@;'; put 'put ''ZXJMaW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMSwibGVmdCIsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbImNsclRhYkxpbmsiLCIiXSxbNCwiY2xySWZBY3RpdmUiXSxbMSwib3ZlcmZsb3ctYXV0byJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImNhcmQtaGVh''@;'; put 'put ''ZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsIm10LTAiLDQsIm5nSWYiXSxbMSwibXQtMCJdLFsxLCJjYXJkLWhlYWRlciIsInAtMCJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtbWQt''@;'; put 'put ''NCIsImFwcHJvdmFsQmFjayJdLFsxLCJidG4iLCJidG4tb3V0bGluZSIsIm0tMCIsMywiY2xpY2siXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImNsci1jb2wtbWQtNCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibXQtMCIs''@;'; put 'put ''ImZvbnQtd2VpZ2h0LTMwMCJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEluZm8iXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtc20iLCJ0b29sdGlwLXRvcC1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJpbmZvLXN0YW5kYXJkIiwic2l6ZSIsIjI4Il0sWzEsInRleHQtY2VudGVyIiwi''@;'; put 'put ''bXQtMTAiXSxbMSwiY2FyZC1ibG9jayIsInAtMCJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC0yNHZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQi''@;'; put 'put ''LCJtdC0wIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtc2l6ZS0xOCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiXSxbImNsYXNzIiwibGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImQtZmxleCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhcmQt''@;'; put 'put ''dGV4dCJdLFsxLCJjbHItcm93IiwiZm9udC1zaXplLTE1Il0sWzEsImNsci1jb2wtbWQtNSJdLFsxLCJjbHItY29sLW1kLTciXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10''@;'; put 'put ''LTAiXSxbMSwiY2xyLXJvdyIsImNsci1nYXAtNSIsImNsci1nYXAtc20tMCJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsIm1yLTVpIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1j''@;'; put 'put ''ZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgtY29s''@;'; put 'put ''dW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCJhY2NlcHRCdG4iLCJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm1yLTVpIiwzLCJjbGljayIsImNsckxv''@;'; put 'put ''YWRpbmciLCJkaXNhYmxlZCJdLFsiaWQiLCJyZWplY3RCdG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0biIsImJ0bi1kYW5nZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJtLTAiLCJtbC0yMGkiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsImNoZWNrZWQi''@;'; put 'put ''LCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlIl0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsInJvd3Mtbm90aWNlIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCJdLFsxLCJsYWJlbCIsImxhYmVsLXdhcm5pbmciXSxbMSwiYmFkZ2UiXSxbMSwibGFiZWwiLCJsYWJlbC1zdWNjZXNzIl0sWzEsImxhYmVsIiwi''@;'; put 'put ''bGFiZWwtZGFuZ2VyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC1zaXplLTE4Il0sWzEsIm10LTE1Il0sWzEsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbMSwibXQtMTAiXSxbMSwicm93cy1ub3RpY2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xv''@;'; put 'put ''ci1vcmFuZ2UiXSxbMSwiaC0yNHZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJkLWZs''@;'; put 'put ''ZXgiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwibGVmdCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImxlZnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwidG9vbHRpcC1jb250ZW50Iiw0LCJuZ0lmIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJoLTcwdmgiLCJkLWZs''@;'; put 'put ''ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJjYXJkLWJsb2NrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJjYXJkIG0tMCIsNCwibmdJZiJdLFsxLCJjYXJkIiwibS0wIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwz''@;'; put 'put ''LCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00Il0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtLTAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0s''@;'; put 'put ''WzEsIm0tMCIsIm1sLTIwLWkiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTI1dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxl''@;'; put 'put ''Q29udCJdLFsxLCJoLTI1dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJsb2FkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwi''@;'; put 'put ''LDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRldGFpbHNPcGVuLHYpfHwoaC5kZXRhaWxzT3Blbj12KSx2fSksZGUoMSwiaDMiLDEpLE9lKDIsIkFwcHJvdmFsIERldGFpbHMiKSxoZSgpLGRlKDMsImRpdiIsMikoNCwidGFibGUiLDMpKDUsInRo''@;'; put 'put ''ZWFkIikoNiwidHIiKSg3LCJ0aCIsNCksT2UoOCwiTmFtZSIpLGhlKCksZGUoOSwidGgiLDQpLE9lKDEwLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDExLCJ0Ym9keSIpLG10KDEyLGl5dCw1LDMsInRyIiw1KSxoZSgpKCkoKSxkZSgxMywiZGl2Iiw2KSgxNCwiYnV0dG9uIiw3KSxIdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIGguZGV0YWlsc09wZW49ITF9KSxPZSgxNSwiIE9rICIpLGhlKCkoKSgpLGRlKDE2LCJjbHItbW9kYWwiLDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnRhYmxlRmxhZyx2KXx8KGgudGFibGVGbGFnPXYpLHZ9KSxk''@;'; put 'put ''ZSgxNywiaDMiLDEpLE9lKDE4LCJBbGwgRGV0YWlscyIpLGhlKCksZGUoMTksImRpdiIsMiksbXQoMjAsbHl0LDE5LDIsImNsci10YWJzIiw4KSxoZSgpLGRlKDIxLCJkaXYiLDYpKDIyLCJidXR0b24iLDcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC50YWJsZUZsYWc9ITF9KSxP''@;'; put 'put ''ZSgyMywiIE9rICIpLGhlKCkoKSgpLGRlKDI0LCJjbHItbW9kYWwiLDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlamVjdE9wZW4sdil8fChoLnJlamVjdE9wZW49diksdn0pLGRlKDI1LCJoMyIsMSksT2UoMjYsIlJlYXNvbiBNZXNzYWdlIiks''@;'; put 'put ''aGUoKSxkZSgyNywiZGl2IiwyKSgyOCwiZm9ybSIpKDI5LCJzZWN0aW9uIiw5KSgzMCwiZGl2IiwxMCkoMzEsImxhYmVsIiwxMSksT2UoMzIsIlJlYXNvbiBmb3IgcmVqZWN0aW5nPyIpLGhlKCksZGUoMzMsInRleHRhcmVhIiwxMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3Jl''@;'; put 'put ''dHVybiBtaShoLnN1Ym1pdFJlYXNvbix2KXx8KGguc3VibWl0UmVhc29uPXYpLHZ9KSxoZSgpKCkoKSgpKCksZGUoMzQsImRpdiIsNikoMzUsImJ1dHRvbiIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWplY3RPcGVuPSExfSksT2UoMzYsIiBDYW5jZWwgIiksaGUoKSxk''@;'; put 'put ''ZSgzNywiYnV0dG9uIiwxNCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdGluZygpfSksT2UoMzgsIiBPSyAiKSxoZSgpKCkoKSxkZSgzOSwiZGl2IiwxNSksbXQoNDAsQXl0LDQsMiwiZGl2IiwxNikoNDEsWnl0LDMsMiwiZGl2Iiw4KSxoZSgpKSwyJmQmJihwaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuIixoLmRldGFpbHNPcGVuKSxmZSgxMikseGUoIm5nRm9yT2YiLGgua2V5c0FycmF5KSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnRhYmxlRmxhZyksZmUoNCkseGUoIm5nSWYiLGgudGFibGVGbGFnKSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnJlamVjdE9wZW4pLGZl''@;'; put 'put ''KDkpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbikseGUoIm5nTW9kZWxPcHRpb25zIixZcygxMSx0eXQpKSgiaW5uZXJIVE1MIixoLnN1Ym1pdFJlYXNvbixWNCksZmUoNCkseGUoImNsckxvYWRpbmciLGgucmVqZWN0TG9hZGluZyksZmUoMykseGUoIm5nSWYiLCFoLnN1Ym1pdHRlZCks''@;'; put 'put ''ZmUoKSx4ZSgibmdJZiIsaC5zdWJtaXR0ZWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxucyxiYSxzNyxxbCxNZCxubCxhNyxHcyx5cCxjMSxIbCxycyxvdSxLdSxqMCxIeSxQMixkcyxJZCxCeSxTaCxfbSxDbSxNNyx3bSx5bSxDN10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25z''@;'; put 'put ''dCBXeXQ9Yz0+KHtub0JvcmRlcjpjfSksWXl0PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiBHeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDExKSxHdCgyLCJjbHItaWNvbiIsMTIpLGRlKDMsImgzIiwxMyksT2UoNCwiVGhlcmUgYXJlIG5vIGFwcHJvdmFscyByZW1haW5p''@;'; put 'put ''bmciKSxoZSgpKCkoKSl9ZnVuY3Rpb24gJHl0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE0KSxPZSgxLCIgUkVWSUVXICIpLGhlKCkpfWZ1bmN0aW9uIEt5dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE1KSxPZSgxLCIgWW91IGhhdmUgIiksZGUoMiwic3BhbiIpLE9lKDMpLGhlKCksT2UoNCwi''@;'; put 'put ''YXBwcm92YWxzIHJlbWFpbmluZyAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxJcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIHF5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDE4KSxPZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBYeXQoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiKSgxLCJoMyIpLE9lKDIsIkxvYWRpbmcgYXBwcm92YWxzIGxpc3QiKSxoZSgpKCkpfWZ1bmN0aW9uIEp5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTYpLG10KDEscXl0LDIsMCwic3BhbiIsMTcpKDIsWHl0LDMsMCwiZGl2Iiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFF5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDM2KX1mdW5jdGlvbiBlX3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzNyksMiZjJiZ4ZSgiY2xyU21hbGwi''@;'; put 'put ''LCEwKX1mdW5jdGlvbiB0X3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxPZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksT2UoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLE9lKDYpLGhlKCksZGUoNywiY2xyLWRn''@;'; put 'put ''LWNlbGwiKSxPZSg4KSxoZSgpLGRlKDksImNsci1kZy1jZWxsIikoMTAsImRpdiIsMjQpKDExLCJhIiwyNSksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXg7cmV0dXJuIEN0KExlKDIpLmdldENsaWNrZWQoaCkpfSksR3QoMTIsImNsci1pY29uIiwyNiksZGUoMTMs''@;'; put 'put ''InNwYW4iLDI3KSxPZSgxNCwiR28gdG8gcmV2aWV3IHBhZ2Ugc2NyZWVuIiksaGUoKSgpLGRlKDE1LCJhIiwyOCksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLiRpbXBsaWNpdCx2PWguaW5kZXgsTT1MZSgyKTtyZXR1cm4gQ3QoZi5yZWplY3RMb2FkaW5nPyIiOk0u''@;'; put 'put ''cmVqZWN0aW5nKHYpKX0pLG10KDE2LFF5dCwxLDAsImNsci1pY29uIiwyOSkoMTcsZV90LDEsMSwiY2xyLXNwaW5uZXIiLDMwKSxkZSgxOCwic3BhbiIsMjcpLE9lKDE5LCJSZWplY3QiKSxoZSgpKCksZGUoMjAsImEiLDMxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4k''@;'; put 'put ''aW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLmdldFRhYmxlKGgudGFibGVJZCkpfSksR3QoMjEsImNsci1pY29uIiwzMiksZGUoMjIsInNwYW4iLDI3KSxPZSgyMywiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiksaGUoKSgpKCkoKSxkZSgyNCwiY2xyLWRnLWNlbGwiLDMzKSgyNSwiYnV0dG9u''@;'; put 'put ''IiwzNCksSHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gTGUoMikuZG93bmxvYWQoZi50YWJsZUlkKSxDdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEd0KDI2LCJjbHItaWNvbiIsMzUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgyKSxDcihhLnN1Ym1pdHRlciksZmUoMiksQ3IoYS5iYXNlVGFibGUpLGZlKDIpLENyKGEuc3VibWl0dGVkKSxmZSgyKSxDcihhLnN1Ym1pdFJlYXNvbiksZmUoOCkseGUoIm5nSWYiLCFhLnJlamVjdExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGEucmVqZWN0TG9hZGluZyksZmUo''@;'; put 'put ''OCkseGUoImlkIixhLnRhYmxlSWQpfX1mdW5jdGlvbiBuX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDE5KSgyLCJjbHItZGctY29sdW1uIiwyMCksT2UoMywiU1VCTUlUVEVSIiksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwyMCksT2UoNSwiQkFTRSBU''@;'; put 'put ''QUJMRSIpLGhlKCksZGUoNiwiY2xyLWRnLWNvbHVtbiIsMjApLE9lKDcsIlNVQk1JVFRFRCIpLGhlKCksZGUoOCwiY2xyLWRnLWNvbHVtbiIsMjApLE9lKDksIlNVQk1JVCBSRUFTT04iKSxoZSgpLGRlKDEwLCJjbHItZGctY29sdW1uIiksT2UoMTEsIkFDVElPTiIpLGhlKCksZGUoMTIsImNs''@;'; put 'put ''ci1kZy1jb2x1bW4iKSxPZSgxMywiRE9XTkxPQUQiKSxoZSgpLG10KDE0LHRfdCwyNyw3LCJjbHItZGctcm93IiwyMSksZGUoMTUsImNsci1kZy1mb290ZXIiKSgxNiwiY2xyLWRnLXBhZ2luYXRpb24iLDIyLDApKDE4LCJjbHItZGctcGFnZS1zaXplIiwyMyksT2UoMTksIkl0ZW1zIHBlciBw''@;'; put 'put ''YWdlIiksaGUoKSxPZSgyMCksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDE3KSxkPUxlKCk7ZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUo''@;'; put 'put ''MikseGUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxmZSg2KSx4ZSgiY2xyRGdJdGVtc09mIixkLmFwcHJvdmVMaXN0KSxmZSgyKSx4ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLHhlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLFlzKDEwLFl5dCkpLGZlKDIpLFZmKCIgIixhLmZpcnN0''@;'; put 'put ''SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgYXBwcm92YWxzICIpfX1sZXQgcl90PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRo''@;'; put 'put ''aXMuc2FzU2VydmljZT1mLHRoaXMuY2RyPXYsdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMH1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldENsaWNrZWQoYSl7dm9pZCAwIT09dGhpcy5hcHByb3ZlTGlzdCYmKHRoaXMudGFibGVJZD10''@;'; put 'put ''aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQsdGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCJyZXZpZXcvYXBwcm92ZURldC8iK3RoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCkpfXJlamVjdGluZyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXt2b2lkIDAhPT1kLmFwcHJv''@;'; put 'put ''dmVMaXN0JiYoZC50YWJsZUlkPWQuYXBwcm92ZUxpc3RbYV0udGFibGVJZCk7bGV0IGg9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6ZC50YWJsZUlkLFNUUF9SRUFTT046InF1aWNrIHJlamVjdGlvbiJ9O3RyeXsoZC5hcHByb3ZlTGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9''@;'; put 'put ''ITAsKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhoLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpKS5mcm9tc2FzWzBdLlJFU1BPTlNFLmluY2x1ZGVzKCJTVUNDRVNTIikmJigoZC5hcHByb3ZlTGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9ITEsZC5h''@;'; put 'put ''cHByb3ZlTGlzdD8uc3BsaWNlKGEsMSksZC5yZW1haW5lZC0tLGQuY2RyLmRldGVjdENoYW5nZXMoKSl9Y2F0Y2goZil7ZC5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvcmVqZWN0aW9uIixmKX19KSgpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUo''@;'; put 'put ''ZnVuY3Rpb24qKCl7YS5mZXRjaEFwcHJvdmFscygpfSkoKX1mZXRjaEFwcHJvdmFscygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuaXRlbXNOdW09MTA7bGV0IGQ9e1NUUF9BQ1RJT046Ik9QRU5fQVBQUk9WQUxTIn07dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2''@;'; put 'put ''aWNlLmdldEFwcHJvdmFscyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIpO2EucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aDtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKHYpe3JldHVybnt0YWJsZUlkOnYuVEFCTEVfSUQsc3VibWl0dGVyOnYuU1VCTUlU''@;'; put 'put ''VEVEX0JZX05NLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLGJhc2VUYWJsZTp2LkJBU0VfVEFCTEUsc3VibWl0UmVhc29uOnYuU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7YS5hcHByb3ZlTGlzdD1mLGEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9u''@;'; put 'put ''c2VFcnJvcigiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIsaCl9fSkoKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVu''@;'; put 'put ''KGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShVaCksR2UodmMpLEdlKExzKSxHZSh0bCksR2UoRXMpKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5LHZhcnM6OCxjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJk''@;'; put 'put ''LWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29s''@;'; put 'put ''b3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJs''@;'; put 'put ''b2NrIiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdy''@;'; put 'put ''aWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5k''@;'; put 'put ''Il0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNl''@;'; put 'put ''bnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLDQsIm5nSWYiXSxbMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxp''@;'; put 'put ''bmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93''@;'; put 'put ''bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiaWQiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIl0sWzMsImNsclNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgx''@;'; put 'put ''LCJkaXYiLDIpLG10KDIsR3l0LDUsMCwiZGl2IiwzKSxkZSgzLCJkaXYiLDQpLG10KDQsJHl0LDIsMCwiaDMiLDUpKDUsS3l0LDUsMSwicCIsNiksaGUoKSxtdCg2LEp5dCwzLDIsImRpdiIsNyksZGUoNywiZGl2Iiw4KSxtdCg4LG5fdCwyMSwxMSwiZGl2Iiw5KSxoZSgpKCkoKSksMiZkJiYo''@;'; put 'put ''ZmUoMikseGUoIm5nSWYiLDA9PT1oLnJlbWFpbmVkKSxmZSgpLHhlKCJuZ0NsYXNzIixzcCg2LFd5dCwhaC5sb2FkZWQpKSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLGZlKCkseGUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsIWgubG9hZGVkKSxmZSgyKSx4ZSgibmdJZiIsaC5hcHByb3ZlTGlzdCYmMCE9PWgucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxiYSxBbSxRZixJNyxjTyxKeSxxeCx1TyxFbSxTcCxSNyx0XyxUbSxBNyx4bSxrNyxIbCxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBpX3Q9Yz0+KHtub0JvcmRlcjpjfSksYV90PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiBvX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxHdCgyLCJjbHItaWNvbiIsMTUpLGRlKDMsImgzIiwxNiksT2UoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQg''@;'; put 'put ''YW55IHRhYmxlcyAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gc190KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE3KSxPZSgxLCIgU1VCTUlUIFFVRVVFICIpLGhlKCkpfWZ1bmN0aW9uIGxfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE4KSxPZSgxLCIgWW91IGhhdmUgIiksZGUoMiwic3BhbiIpLE9l''@;'; put 'put ''KDMpLGhlKCksT2UoNCwic3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMyksSXIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBjX3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMSksT2UoMSwiIExvYWRpbmcuLi4g''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gdV90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IiksaGUoKSgpKX1mdW5jdGlvbiBkX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSxtdCgxLGNfdCwyLDAsInNwYW4iLDIwKSgyLHVfdCwz''@;'; put 'put ''LDAsImRpdiIsMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gaF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMjgpLEh0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoNSkuZ29Ub0RldGFpbHMoaC50YWJsZUlkKSl9KSxkZSgxLCJjbHItZGctY2VsbCIpLE9lKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxPZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksT2UoNiksaGUo''@;'; put 'put ''KSxkZSg3LCJjbHItZGctY2VsbCIpKDgsImRpdiIsMjkpKDksImEiLDMwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDUpLmdvVG9TdGFnZShoLnRhYmxlSWQpKX0pLEd0KDEwLCJjbHItaWNvbiIsMzEpLGRlKDExLCJzcGFuIiwz''@;'; put 'put ''MiksT2UoMTIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMTMsImNsci1kZy1jZWxsIiwzMykoMTQsImJ1dHRvbiIsMzQpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIExlKDUpLmRvd25sb2FkKGYudGFibGVJ''@;'; put 'put ''ZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNSwiY2xyLWljb24iLDM1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5iYXNlKSxmZSgyKSxDcihhLnN1Ym1pdHRlZCksZmUoMiksQ3IoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBmX3Qo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIzKSgyLCJjbHItZGctY29sdW1uIiksT2UoMywiQkFTRSBUQUJMRSIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMjQpLE9lKDUsIlNVQk1JVFRFRCIpLGhlKCksZGUoNiwiY2xyLWRnLWNvbHVtbiIsMjQpLE9l''@;'; put 'put ''KDcsIlNVQk1JVCBSRUFTT04iKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDEzKSxPZSg5LCJBQ1RJT04iKSxoZSgpLGRlKDEwLCJjbHItZGctY29sdW1uIiwxMyksT2UoMTEsIkRPV05MT0FEIiksaGUoKSxtdCgxMixoX3QsMTYsMywiY2xyLWRnLXJvdyIsMjUpLGRlKDEzLCJjbHItZGct''@;'; put 'put ''Zm9vdGVyIikoMTQsImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgxNiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLE9lKDE3LCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksT2UoMTgpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1oYSgxNSksZD1MZSg0KTtmZSg0KSx4ZSgiY2xyRGdGaWVsZCIsInN1''@;'; put 'put ''Ym1pdHRlZCIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoNikseGUoImNsckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJMaXN0KSxmZSgyKSx4ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLHhlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLFlzKDgsYV90KSksZmUoMiks''@;'; put 'put ''VmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBzdWJtaXNzaW9ucyAiKX19ZnVuY3Rpb24gcF90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMiksbXQoMSxmX3QsMTksOSwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUo''@;'; put 'put ''Myk7ZmUoKSx4ZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWZ1bmN0aW9uIGdfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNiksbXQoMSxvX3QsNSwwLCJkaXYiLDcpLGRlKDIsImRpdiIsOCksbXQoMyxzX3QsMiwwLCJoMyIsOSkoNCxsX3QsNSwxLCJwIiwx''@;'; put 'put ''MCksaGUoKSxtdCg1LGRfdCwzLDIsImRpdiIsMTEpKDYscF90LDIsMSwiZGl2IiwxMiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksZmUoKSx4ZSgibmdDbGFzcyIsc3AoNixpX3QsIWEubG9hZGVkKSksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsMCE9PWEucmVtYWluZWQpLGZlKCkseGUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIG1fdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCksbXQoMSxnX3Qs''@;'; put 'put ''Nyw4LCJkaXYiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24gdl90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksR3QoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLGhlKCkpfWxldCBlOGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLnJlbWFpbmVkPTAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5zdWJSZWFkeT0hMSx0aGlzLmRldGFpbHNP''@;'; put 'put ''cGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVv''@;'; put 'put ''dXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBkPWEucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7YS5pdGVtc051bT0xMDt0''@;'; put 'put ''cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKTtpZihhLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGgsYS5yZW1haW5lZD4wKXthLnN1Ym1pdHRlcj1oLmZyb21zYXNbMF0uU1VCTUlUVEVEX0JZX05NO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24odil7''@;'; put 'put ''cmV0dXJue3RhYmxlSWQ6di5UQUJMRV9JRCxiYXNlOnYuQkFTRV9UQUJMRSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRUTSxzdWJtaXR0ZXI6di5TVUJNSVRURURfQllfTk0sc3VibWl0UmVhc29uOnYuU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7aWYoYS5zdWJtaXR0ZXJMaXN0PWYsYS5z''@;'; put 'put ''dWJtaXREYXRhPWguZnJvbXNhcyx0eXBlb2YgZDwidSIpe2NvbnN0IHY9YS5zdWJtaXR0ZXJMaXN0LmZpbmRJbmRleChNPT5NLnRhYmxlSWQ9PT1kKTt2Pi0xJiZhLmdldERldGFpbHMoYS5zdWJtaXR0ZXJMaXN0W3ZdLHYpfX1hLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5j''@;'; put 'put ''YXRjaFJlc3BvbnNlRXJyb3IoImVkaXRvcnMvZ2V0c3VibWl0cyIsaCl9fSkoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yZWFkeVN1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXQuc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PWF9KSx0aGlzLl9iYWNrVG9TdWI9dGhpcy5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0TGlzdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9IXRoaXMuc3ViUmVhZHksdGhpcy5kZXRhaWxzT3Blbj0hMX0pfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFw''@;'; put 'put ''cExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpKEdlKFVoKSxHZSh2YyksR2UoTHMpLEdlKEN1KSxHZSh0bCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN1Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInBh''@;'; put 'put ''Z2luYXRpb24iLCIiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRl''@;'; put 'put ''ciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5v''@;'; put 'put ''LXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1j''@;'; put 'put ''ZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwi''@;'; put 'put ''ZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsi''@;'; put 'put ''Y2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEt''@;'; put 'put ''bGFiZWwiLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxb''@;'; put 'put ''InNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUgZm9yIHRhYmxlIHJlY29yZCIsMSwiYnRuIiwiYnRuLXN1Y2Nl''@;'; put 'put ''c3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSxtdCgxLG1fdCwyLDEsImRpdiIsMikoMix2X3QsMiwwLCJkaXYiLDMpLGhlKCkpLDImZCYmKGZlKCkseGUoIm5nSWYiLCFoLnN1YlJlYWR5KSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixoLnN1YlJlYWR5KSl9LGRlcGVuZGVuY2llczpbd3UsYmEsQW0sUWYsSTcsY08sSnkscXgsdU8sRW0sU3AsUjcsdF8sVG0sQTcseG0sazcsSGwsUTZlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGJfdD0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2Vw''@;'; put 'put ''dGVkOmx9KTtmdW5jdGlvbiB5X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEyKSxHdCgxLCJjbHItaWNvbiIsMTMpLGRlKDIsImgzIiwxNCksT2UoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IiksaGUoKSgpKX1mdW5jdGlvbiBfX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1MZSgpO3JldHVybiBDdChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE9lKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtmZSgp''@;'; put 'put ''LENyKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiB3X3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgxLCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1MZSgpO3JldHVybiBDdChmLmdldEJhc2VUYWJs''@;'; put 'put ''ZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxPZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJzcGFuIiksT2UoNCwiIC8gIiksaGUoKSxkZSg1LCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1MZSgpO3JldHVybiBDdChmLmdldEVkaXRUYWJs''@;'; put 'put ''ZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxPZSg2LCJFRElUIiksaGUoKSgpfX1mdW5jdGlvbiBDX3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtmZSgpLENyKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlv''@;'; put 'put ''biBTX3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw2KSxPZSgyKSxoZSgpLGRlKDMsInRkIiw2KSxtdCg0LF9fdCwyLDEsImEiLDE1KSg1LHdfdCw3LDAsImRpdiIsMTYpKDYsQ190LDIsMSwic3BhbiIsMTYpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5p''@;'; put 'put ''bmRleDtmZSgyKSxDcihhKSxmZSgyKSx4ZSgibmdJZiIsZDwxKSxmZSgpLHhlKCJuZ0lmIixkPDImJmQ+PTEpLGZlKCkseGUoIm5nSWYiLGQ+PTIpfX1mdW5jdGlvbiBNX3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMCksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24geF90''@;'; put 'put ''KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIGhpc3RvcnkiKSxoZSgpKCkpfWZ1bmN0aW9uIEVfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTgpLG10KDEsTV90LDIsMCwic3BhbiIsMTkpKDIseF90LDMsMCwiZGl2IiwxNiksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBUX3QoYyxsKXsxJmMmJihkZSgwLCJoMyIsMjgpLE9lKDEsIkhJU1RPUlkiKSxoZSgpKX1mdW5jdGlvbiBBX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwyOSksT2Uo''@;'; put 'put ''MSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCksSXIoIiBUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQsIiByZWNvcmRzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fWZ1bmN0aW9uIGtfdChj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciLDMzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDMpLmdldEFwcHJJbmRleChoKSl9KSxkZSgxLCJjbHItZGctY2VsbCIsMzQpKDIsImEiLDM1KSxIdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDMpLmdldEJhc2VUYWJsZShoLmJhc2V0YWJsZSkpfSksT2UoMyksaGUoKSgpLGRlKDQsImNsci1kZy1jZWxsIiwzNiksT2UoNSksaGUoKSxkZSg2LCJjbHItZGctY2VsbCIsMzQpLE9lKDcpLGhl''@;'; put 'put ''KCksZGUoOCwiY2xyLWRnLWNlbGwiLDM0KSxPZSg5KSxoZSgpLGRlKDEwLCJjbHItZGctY2VsbCIsMzQpLE9lKDExKSxoZSgpLGRlKDEyLCJjbHItZGctY2VsbCIsMzQpLE9lKDEzKSxoZSgpLGRlKDE0LCJjbHItZGctY2VsbCIsMzcpKDE1LCJidXR0b24iLDM4KSxIdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBMZSgzKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMTYsImNsci1pY29uIiwzOSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDMpLENyKGEuYmFzZXRh''@;'; put 'put ''YmxlKSxmZSgpLHhlKCJuZ0NsYXNzIixscCg3LGJfdCwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksZmUoKSxDcihhLnN0YXR1cyksZmUoMiksQ3IoYS5zdWJtaXR0ZXIpLGZlKDIpLENyKGEuc3VibWl0dGVkUmVhc29uKSxmZSgyKSxDcihhLnN1Ym1pdHRl''@;'; put 'put ''ZCksZmUoMiksQ3IoYS5yZXZpZXdlZCl9fWZ1bmN0aW9uIERfdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kYXRhZ3JpZCIsMzApKDEsImNsci1kZy1jb2x1bW4iLDMxKSxPZSgyLCJCQVNFX1RBQkxFIiksaGUoKSxkZSgzLCJjbHItZGctY29sdW1uIiwzMSksT2UoNCwiU1RBVFVTIiksaGUo''@;'; put 'put ''KSxkZSg1LCJjbHItZGctY29sdW1uIiwzMSksT2UoNiwiU1VCTUlUVEVSIiksaGUoKSxkZSg3LCJjbHItZGctY29sdW1uIiwzMSksT2UoOCwiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoOSwiY2xyLWRnLWNvbHVtbiIsMzEpLE9lKDEwLCJTVUJNSVRURUQiKSxoZSgpLGRlKDExLCJjbHItZGct''@;'; put 'put ''Y29sdW1uIiwzMSksT2UoMTIsIkFQUFJPVkVEIC8gUkVKRUNURUQiKSxoZSgpLGRlKDEzLCJjbHItZGctY29sdW1uIiksT2UoMTQsIkRPV05MT0FEIiksaGUoKSxtdCgxNSxrX3QsMTcsMTAsImNsci1kZy1yb3ciLDMyKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgiY2xyRGdG''@;'; put 'put ''aWVsZCIsImJhc2V0YWJsZSIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3RhdHVzIiksZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZFJlYXNvbiIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUo''@;'; put 'put ''MikseGUoImNsckRnRmllbGQiLCJyZXZpZXdlZCIpLGZlKDQpLHhlKCJjbHJEZ0l0ZW1zT2YiLGEuaGlzdG9yeSl9fWZ1bmN0aW9uIElfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNDApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo''@;'; put 'put ''MikubG9hZERhdGEoKSl9KSxPZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTt4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nTW9yZSksZmUoKSxJcigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24gUl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiwy''@;'; put 'put ''MSkoMSwiZGl2IiwyMiksbXQoMixUX3QsMiwwLCJoMyIsMjMpKDMsQV90LDIsMSwicCIsMjQpLGhlKCksbXQoNCxEX3QsMTYsNywiY2xyLWRhdGFncmlkIiwyNSksZGUoNSwiZGl2IiwyNiksbXQoNixJX3QsMiwyLCJidXR0b24iLDI3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIp''@;'; put 'put ''LHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoMikseGUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93''@;'; put 'put ''c19hbGxvd2VkPT09YS5JbmZpbml0eSYmYS5yb3dzTGVmdFRvTG9hZD4wKX19Y29uc3QgTF90PVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50OnJfdH0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDpRNmV9LHtwYXRoOiJzdWJtaXR0ZWQiLGNvbXBvbmVudDplOGV9LHtw''@;'; put 'put ''YXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDplOGV9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''PWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0aGlzLm9wZW5Nb2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJv''@;'; put 'put ''dmVEYXRhPXt9LHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuaGlzdFBhcmFtcz17SElTVDowLFNUQVJUUk9XOjEsTk9CUzotMX0sdGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlz''@;'; put 'put ''LkluZmluaXR5PTEvMCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfWdldFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldEJhc2VUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9k''@;'; put 'put ''YXRhLyIrYSl9Z2V0RWRpdFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nZXRBcHBySW5kZXgoYSl7Y29uc3QgZD10aGlzLmhpc3RvcnlBcnIuZmluZEluZGV4KGg9PmguVEFCTEVfSUQ9PT1hLnRhYmxlSWQpO2Q+LTEmJih0aGlzLmFwcHJvdmVEYXRh''@;'; put 'put ''PXRoaXMuaGlzdG9yeUFycltkXSx0aGlzLm9wZW5Nb2RhbD0hMCl9Z2V0IHJvd3NMZWZ0VG9Mb2FkKCl7Y29uc3QgYT10aGlzLmhpc3RQYXJhbXMuTk9CUy10aGlzLmhpc3RvcnkubGVuZ3RoLGQ9dGhpcy5oaXN0UGFyYW1zLkhJU1Q7cmV0dXJuIGE8PTA/MDphPmQ/ZDphfWRvd25sb2FkKGEp''@;'; put 'put ''e2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0Zmls''@;'; put 'put ''ZSZ0YWJsZT0iK2ErIiZfY29udGV4dG5hbWU9Iit0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPXtTVEFSVFJPVzphLmhpc3RQYXJhbXMuSElTVCthLmhpc3RQYXJhbXMuU1RBUlRST1d9O2EubG9h''@;'; put 'put ''ZGluZ01vcmU9ITA7dHJ5e2xldCBmLGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0SGlzdG9yeShkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGhpc3RvcnkiKTthLmxvYWRpbmdNb3JlPSExLGEuaGlzdFBhcmFtcz1oLmhpc3RwYXJhbXNbMF07Y29uc3Qgdj1oLmZyb21zYXMu''@;'; put 'put ''c2xpY2UoMCxhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCk7aWYodi5sZW5ndGg+MCl7Y29uc3QgTT12O2EuaGlzdG9yeUFycj12LGY9T2JqZWN0LmtleXMoTVswXSksYS50YWJsZVRpdGxlcz1mO2xldCBEPXYubWFwKGZ1bmN0aW9uKFope3JldHVybnt0YWJsZUlk''@;'; put 'put ''OlouVEFCTEVfSUQsc3VibWl0dGVyOlouU1VCTUlUVEVSLHN1Ym1pdHRlZFJlYXNvbjpaLlNVQk1JVFRFRF9SRUFTT05fVFhULHN1Ym1pdHRlZDpaLlNVQk1JVFRFRCxzdGF0dXM6Wi5TVEFUVVMscmV2aWV3UmVhc29uOlouUkVWSUVXX1JFQVNPTl9UWFQscmV2aWV3ZXI6Wi5SRVZJRVdFUixy''@;'; put 'put ''ZXZpZXdlZDpaLlJFVklFV0VELG51bU9mQXBwcm92YWxzOlouTlVNX09GX0FQUFJPVkFMU19SRVFVSVJFRCxiYXNldGFibGU6Wi5CQVNFX1RBQkxFfX0pO2EuaGlzdG9yeS5wdXNoKC4uLkQpLGEubG9hZGVkPSEwfWVsc2UgYS5sb2FkZWQ9ITAsMD09PWEuaGlzdG9yeS5sZW5ndGgmJihhLm5v''@;'; put 'put ''RGF0YT0hMCl9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIsaCksYS5sb2FkaW5nTW9yZT0hMX19KSgpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5sb2FkRGF0YSgpfSkoKX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UoVWgpLEdlKHZjKSxHZShMcyksR2UodGwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oaXN0b3J5Il1dLGhvc3RBdHRyczpbMSwiY29udGVu''@;'; put 'put ''dC1jb250YWluZXIiXSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwiY2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQs''@;'; put 'put ''Im5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6''@;'; put 'put ''ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1saW5rIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNl''@;'; put 'put ''bnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJidG4gYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1k''@;'; put 'put ''LTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlzdG9yeSIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFszLCJjbGljayIsNCwiY2xyRGdJdGVtcyIs''@;'; put 'put ''ImNsckRnSXRlbXNPZiJdLFszLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJtLTAiLDMsImNsaWNrIl0sWzEsInZlckNlbnRlciIsMywibmdDbGFzcyJdLFsxLCJ2ZXJDZW50ZXIiLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQt''@;'; put 'put ''Y2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIsImNsckxvYWRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLG10KDEseV90LDQsMCwiZGl2IiwxKSxkZSgyLCJjbHItbW9kYWwiLDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLm9wZW5Nb2RhbCx2KXx8KGgub3Blbk1vZGFsPXYpLHZ9KSxkZSgzLCJoNCIsMyksT2Uo''@;'; put 'put ''NCwiQXBwcm92YWwgZGV0YWlscyIpLGhlKCksZGUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxPZSgxMCwiTmFtZSIpLGhlKCksZGUoMTEsInRoIiw2KSxPZSgxMiwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxMywidGJvZHkiKSxtdCgxNCxTX3Qs''@;'; put 'put ''Nyw0LCJ0ciIsNyksaGUoKSgpKCksZGUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9wZW5Nb2RhbD0hMX0pLE9lKDE3LCIgT0sgIiksaGUoKSgpKCksbXQoMTgsRV90LDMsMiwiZGl2IiwxMCkoMTksUl90LDcsNCwiZGl2IiwxMSks''@;'; put 'put ''aGUoKSksMiZkJiYoZmUoKSx4ZSgibmdJZiIsaC5ub0RhdGEpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5vcGVuTW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpLGZlKDEyKSx4ZSgibmdGb3JPZiIsaC50YWJsZVRpdGxlcyksZmUoNCkseGUoIm5nSWYiLCFoLmxvYWRlZCksZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsIWgubm9EYXRhJiZoLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLGJhLEFtLFFmLEk3LEp5LEVtLFNwLFI3LHRfLFRtLEE3LHhtLGs3LEhsLG91LEt1LGowLFAyXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpfV07bGV0IE9fdD0oKCk9PntjbGFzcyBje3N0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsemMuZm9yQ2hpbGQoTF90KSx6Y119KX19cmV0dXJuIGN9KSgpLFBfdD0o''@;'; put 'put ''KCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsT190LHowLGE5LmZvclJvb3QoKSxuZixD''@;'; put 'put ''d119KX19cmV0dXJuIGN9KSgpLEZfdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBw''@;'; put 'put ''LXJldmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBIX3Q9KGMsbCk9Pih7cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfSk7ZnVuY3Rpb24gTl90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNiksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gVl90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2Fk''@;'; put 'put ''aW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gQl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxtdCgxLE5fdCwyLDAsInNwYW4iLDUpKDIsVl90LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGpfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksT2UoMSwiIEFwcHJvdmUg''@;'; put 'put ''IiksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7eGUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxl''@;'; put 'put ''RGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpfX1mdW5jdGlvbiB6X3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMSkoMSwic3BhbiIpLE9lKDIsIiBSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hh''@;'; put 'put ''bmdlcyAiKSxoZSgpKCkpfWZ1bmN0aW9uIFVfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjkpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikucmV2ZXJ0Q2hhbmdlcygpKX0pLE9lKDEsIiBSRVZFUlQgIiksbXQoMix6X3QsMyww''@;'; put 'put ''LCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksaGUoKX0yJmMmJnhlKCJjbHJMb2FkaW5nIixMZSgyKS5yZXZlcnRpbmdDaGFuZ2VzKX1mdW5jdGlvbiBaX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLE9lKDQs''@;'; put 'put ''IlN0YWdlZCBEYXRhIiksaGUoKSgpKCksZGUoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwiZGl2Iiw4KSxPZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLGhlKCkoKSxkZSgxMCwiZGl2IikoMTEsInNwYW4iKSxPZSgxMiwiVGFibGUgSWQ6IiksaGUoKSxkZSgx''@;'; put 'put ''Mywic3Ryb25nIikoMTQsInNwYW4iKSxPZSgxNSksaGUoKSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksT2UoMTgsIkJhc2UgVGFibGU6IiksaGUoKSxkZSgxOSwiYSIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS52aWV3ZXJUYWJsZVNjcmVlbigp''@;'; put 'put ''KX0pLE9lKDIwKSxoZSgpKCksZGUoMjEsImRpdiIpKDIyLCJzcGFuIiksT2UoMjMsIlN1Ym1pdCBEYXRlOiIpLGhlKCksZGUoMjQsInNwYW4iLDE0KSxPZSgyNSksaGUoKSgpLGRlKDI2LCJkaXYiKSgyNywic3BhbiIpLE9lKDI4LCJSZXZpZXcgU3RhdHVzOiIpLGhlKCksZGUoMjksInNwYW4i''@;'; put 'put ''LDE1KSxPZSgzMCksaGUoKSgpKCksZGUoMzEsImRpdiIsMTYpKDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxPZSgzNCwiQWN0aW9ucyIpLGhlKCkoKSxkZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KExlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxPZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLG10KDM5LGpfdCwyLDIsImJ1dHRvbiIsMjApLGRlKDQwLCJidXR0b24iLDIxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZ29CYWNrKCkpfSks''@;'; put 'put ''T2UoNDEsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSxkZSg0MiwiYnV0dG9uIiwyMiksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9''@;'; put 'put ''KSxHdCg0MywiY2xyLWljb24iLDIzKSxoZSgpLGRlKDQ0LCJjbHItdG9vbHRpcCIpLG10KDQ1LFVfdCwzLDEsImJ1dHRvbiIsMjQpLGhlKCkoKSgpKCkoKSxkZSg0NiwiZGl2IiwyNSksR3QoNDcsImhvdC10YWJsZSIsMjYpLGhlKCksR3QoNDgsImRpdiIsMjcpLGhlKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKCk7ZmUoMTUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIiKSxmZSg1KSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksZmUoNSksSXIoIiAiLG51bGw9''@;'; put 'put ''PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg0KSx4ZSgibmdDbGFzcyIsbHAoMTcsSF90LCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQ''@;'; put 'put ''Uk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxmZSgpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQsIiAiKSxmZSg3KSx4ZSgiZGlzYWJsZWQi''@;'; put 'put ''LGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoMikseGUoIm5nSWYiLCJZRVMiIT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKCkseGUoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpLGZlKDUpLHhlKCJuZ0lmIiwiWUVTIj09''@;'; put 'put ''PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkFMTE9XX1JFU1RPUkUpKSxmZSgyKSx4ZSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgibWF4Um93''@;'; put 'put ''cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSkoImFmdGVyR2V0Q29sSGVhZGVyIixhLmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyKSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpfX1j''@;'; put 'put ''b25zdCBXX3Q9W3twYXRoOiI6dGFibGVJZCIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVy''@;'; put 'put ''PXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdo''@;'; put 'put ''dDo1MDAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWR8fDEvMCxhZnRlckdldENvbEhlYWRlcjooRCxaLHJlKT0+e1ouY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVh''@;'; put 'put ''ZGVyQ2xhc3MpfX19c3VibWl0dGVkVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMudGFibGVfaWQpfWFwcHJvdmVUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlRGV0LyIrdGhpcy50YWJsZV9p''@;'; put 'put ''ZCl9dmlld2VyVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1nb0JhY2soKXtLbi54bG1hcHMuZmluZChkPT5kLnRhcmdldERTPT09dGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSk/dGhp''@;'; put 'put ''cy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIrdGhpcy5ob3RUYWJsZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1u''@;'; put 'put ''Z09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShkPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWR9KSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ8InUiKXth''@;'; put 'put ''LnRhYmxlX2lkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO3RyeXtsZXQgZD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEudGFibGVfaWQpO2lmKCFkfHwhZC5qc3BhcmFtcyl0aHJvdyBuZXcgRXJyb3IoImpzcGFyYW1zIHByb3BlcnR5IGlzIG1pc3Np''@;'; put 'put ''bmcgZnJvbSByZXNwb25zZS4iKTthLnRhYmxlRGV0YWlscz1kLmpzcGFyYW1zWzBdfWNhdGNoKGQpe2xldCBoPXt9O2QuTUVTU0FHRT9oPWQ6aC5NRVNTQUdFPWQsYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsaCl9dHJ5e2xldCBkPXlp''@;'; put 'put ''ZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLm9wZW5UYWJsZShhLnRhYmxlX2lkKTtpZighZHx8IWQuc3RhZ2V0YWJsZSl0aHJvdyBuZXcgRXJyb3IoIlN0YWdldGFibGUgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2xldCBoPWQuc3RhZ2V0YWJsZVswXSxmPVtdLHY9W107Zm9y''@;'; put 'put ''KGxldCBEIGluIGgpaCYmZi5wdXNoKEQpO2ZvcihsZXQgRD0wO0Q8Zi5sZW5ndGg7RCsrKXYucHVzaCh7ZGF0YTpmW0RdfSk7bGV0IE09ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fTthLmhvdFRhYmxlLmRhdGE9ZC5zdGFnZXRhYmxlLGEuaG90VGFibGUuY29sSGVhZGVycz1mLGEu''@;'; put 'put ''aG90VGFibGUuY29sdW1ucz12LGEuaG90VGFibGUuY2VsbHM9TSxhLmxvYWRlZD0hMCxhLnNldEZvY3VzKCl9Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFfHwoaC5NRVNTQUdFPWQpLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIs''@;'; put 'put ''aCksYS5sb2FkZWQ9ITF9fX0pKCl9cmV2ZXJ0Q2hhbmdlcygpe3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9yZXN0b3JlIix7cmVzdG9yZV9pbjpbe2xvYWRfcmVmOnRoaXMudGFibGVfaWR9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJl''@;'; put 'put ''c3BvbnNlLnJlc3RvcmVfb3V0JiZ0aGlzLnJvdXRlLm5hdmlnYXRlKFsiL3N0YWdlIl0pLnRoZW4oKCk9Pnt0aGlzLnJvdXRlLm5hdmlnYXRlKFtgL3N0YWdlLyR7ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXRbMF0uTE9BRFJFRn1gXSl9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJldmVy''@;'; put 'put ''dGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KShHZSh1MSksR2UoVWgpLEdlKHZjKSxHZShMcyksR2UoQ3UpLEdlKHRsKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3RhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEs''@;'; put 'put ''ImNvbnRlbnQtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIiwiY2FyZCJdLFsiY2xhc3MiLCJoLTgwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiaC04MHZoIiwiZC1mbGV4Iiwi''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtdGl0bGUiLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciJdLFsxLCJtdC0wIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLXJvdyJdLFsxLCJjYXJkLWJsb2NrIiwiY2xyLWNvbC1tZC02Iiwibm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsInB5LTUiXSxbMSwiYmFzZVRhYmxlTGluayIsMywiY2xpY2siXSxbMSwibXQtMTAiXSxbMSwibXQt''@;'; put 'put ''MTAiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2FyZC1ibG9jayIsIm5vLWJvcmRlcnMiXSxbMSwibXQtMjAiXSxbMSwicm93Il0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaWQi''@;'; put 'put ''LCJhcHByb3ZhbC1idG4iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3Mtb3V0bGluZSB0ZXh0LWNlbnRlciBtci01aSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIs''@;'; put 'put ''MywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInRleHQtY2VudGVyIiwibXItNWkiLCJtaW4tdy0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImJ0biBidG4tc20gYnRu''@;'; put 'put ''LWRhbmdlciB0ZXh0LWNlbnRlciBtdC0yMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImRhdGEiLCJj''@;'; put 'put ''b2xIZWFkZXJzIiwiY29sdW1ucyIsIm1heFJvd3MiLCJoZWlnaHQiLCJsaWNlbnNlS2V5IiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjZWxscyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1kYW5nZXIiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayIsImNsckxv''@;'; put 'put ''YWRpbmciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2Iiwx''@;'; put 'put ''KSxtdCgyLEJfdCwzLDIsImRpdiIsMikoMyxaX3QsNDksMjAsImRpdiIsMyksaGUoKSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGJhLEhsLGowLEwyLFAyLG03LGI3LHY3LERfXSxlbmNhcHN1''@;'; put 'put ''bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpfV07bGV0IFlfdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1w''@;'; put 'put ''b3J0czpbUmEsejAsemMuZm9yQ2hpbGQoV190KSxhOS5mb3JSb290KCldfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBHX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIFZpZXdlciByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxPZSgzKSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSgpO2ZlKDMpLENyKGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiAkX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIEVkaXRvciByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxPZSgzKSxoZSgpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1MZSgpO2ZlKDMpLENyKGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBLX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIFN0YWdlIHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPUxlKCk7ZmUoMyksQ3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gcV90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLE9lKDEsIiBIaXN0b3J5IHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksQ3IoYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBYX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIFN1Ym1pdCByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxPZSgzKSxoZSgp''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLENyKGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KX19ZnVuY3Rpb24gSl90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLE9lKDEsIiBUYWJsZXMgaW4gbGlicmFyeSBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksT2Uo''@;'; put 'put ''MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxDcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgVmlld2JveGVzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3''@;'; put 'put ''KSxPZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLENyKGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQpfX1mdW5jdGlvbiBld3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIExpbmVhZ2UgZGFpbHkgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcp''@;'; put 'put ''LE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksQ3IoYS5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCl9fWZ1bmN0aW9uIHR3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTkpLE9lKDEsIiBSZWZyZXNoIERhdGEgTGluZWFn''@;'; put 'put ''ZSAiKSxkZSgyLCJidXR0b24iLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnJlZnJlc2hEYXRhTGluZWFnZSgpKX0pLE9lKDMsIiBSRUZSRVNIICIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMikseGUoImNsckxvYWRpbmciLGEucmVm''@;'; put 'put ''cmVzaGluZ0RhdGFMaW5lYWdlKX19ZnVuY3Rpb24gbnd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksbXQoMSx0d3QsNCwxLCJkaXYiLDE4KSxkZSgyLCJkaXYiLDE5KSxPZSgzLCIgUmVmcmVzaCBEYXRhIENhdGFsb2cgIiksZGUoNCwiYnV0dG9uIiwyMCksSHQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnJlZnJlc2hEYXRhQ2F0YWxvZygpKX0pLE9lKDUsIiBSRUZSRVNIICIpLGhlKCkoKSxkZSg2LCJkaXYiLDE5KSxPZSg3LCIgRG93bmxvYWQgQ29uZmlndXJhdGlvbiAiKSxkZSg4LCJidXR0b24iLDIxKSxIdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZG93bmxvYWRDb25maWd1cmF0aW9uKCkpfSksT2UoOSwiIERPV05MT0FEICIpLGhlKCkoKSxkZSgxMCwiZGl2IiwxOSksT2UoMTEsIiBVcGRhdGUgTGljZW5jZSBLZXkgIiksZGUoMTIsImJ1dHRvbiIsMjIpLE9lKDEzLCIgVVBEQVRFICIpLGhlKCko''@;'; put 'put ''KSx1aSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLCJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoMykseGUoImNsckxvYWRpbmciLGEucmVmcmVzaGluZ0RhdGFDYXRhbG9nKX19Y29uc3Qgcnd0PVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhLGQsaCxmKXt0aGlzLmFwcFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9Zix0aGlzLmFwcEluZm89e2FkYXB0ZXJWZXJzaW9uOiI0LjExLjMiLGFwcFZlcnNpb246InY2LjE0LjgiLnJlcGxhY2Uo''@;'; put 'put ''InYiLCIiKSxidWlsZFRpbWVzdGFtcDpJb2UoKShwYXJzZUludCgiMTc0ODQ1NjAxNDYxMiIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIil9LHRoaXMuaHR0cD0iaHR0cDoiPT09bG9jYXRpb24ucHJvdG9jb2wsdGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITEsdGhpcy5yZWZyZXNo''@;'; put 'put ''aW5nRGF0YUxpbmVhZ2U9ITEsdGhpcy5yZXNwb25zZT0iTm8gcmVzcG9uc2UiLHRoaXMucmVzcG9uc2VNb2RhbD0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLmxpY2VuY2VJbmZvPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKSx0aGlzLmVudmlyb25tZW50SW5mbz10aGlzLmFwcFNlcnZpY2UuZ2V0RW52aXJvbm1lbnRJbmZvKCksdGhpcy5zZXR0aW5ncz10aGlzLmFwcFNldHRpbmdz''@;'; put 'put ''U2VydmljZS5zZXR0aW5ncy52YWx1ZSx0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyYmKHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDPWRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQykpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRp''@;'; put 'put ''bmdzLnN1YnNjcmliZSh2PT57dGhpcy5zZXR0aW5ncz12fSl9bmdPbkluaXQoKXt9c2V0dGluZ0NoYW5nZShhKXt0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXRBcHBTZXR0aW5ncyh0aGlzLnNldHRpbmdzKX1kb3dubG9hZENvbmZpZ3VyYXRpb24oKXtsZXQgYT10aGlzLnNhc1NlcnZpY2Uu''@;'; put 'put ''Z2V0U2FzanNDb25maWcoKSxkPWEuc2VydmVyVXJsLGg9YS5hcHBMb2MsZj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGQrZisiLz9fcHJvZ3JhbT0iK2grIi9zZXJ2aWNlcy9hZG1pbi9leHBvcnRjb25maWciKX1yZWZyZXNoRGF0YUNhdGFsb2coKXt0''@;'; put 'put ''aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaGNhdGFsb2ciLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9''@;'; put 'put ''KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMX0pfXJlZnJlc2hEYXRhTGluZWFnZSgpe3RoaXMucmVmcmVz''@;'; put 'put ''aGluZ0RhdGFMaW5lYWdlPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNodGFibGVsaW5lYWdlIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0''@;'; put 'put ''Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKGEpe3JldHVybiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgYT9KU09OLnN0cmluZ2lmeShhKTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKG9MKSxHZSh0bCksR2UodTEpLEdlKCRSKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3lzdGVtIl1d''@;'; put 'put ''LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxMzgsdmFyczozNixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29u''@;'; put 'put ''dGVudC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbMSwidy0xMDAiLCJsaWdodCJdLFsxLCJjb250ZW50LWJveCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJzeXMtaW5mbyIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgt''@;'; put 'put ''Y29sdW1uIiwiY2xyLWZsZXgtbGctcm93Il0sWyJjZHMtdGV4dCIsInN1YnNlY3Rpb24iLDEsIm1iLTEwIl0sWzEsImRhcmsiXSxbImNkcy10ZXh0IiwibGFiZWwiLDEsIm0tMCJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciJdLFsiY2xhc3MiLCJtLTAiLDQs''@;'; put 'put ''Im5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJj''@;'; put 'put ''bGljayJdLFsxLCJtLTAiXSxbImNsYXNzIiwiYWRtaW4tYWN0aW9uIiw0LCJuZ0lmIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayJdLFsi''@;'; put 'put ''cm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoNCIsMiksT2UoMywiU3lzdGVtIGluZm9ybWF0aW9uIiksaGUoKSxHdCg0LCJo''@;'; put 'put ''ciIsMyksZGUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpKDcsImRpdiIpKDgsImg2Iiw2KSxPZSg5LCIgRW52aXJvbm1lbnQgRGV0YWlscyAiKSxHdCgxMCwic3BhbiIsNyksaGUoKSxkZSgxMSwicCIsOCksT2UoMTIsIiBTWVNTSVRFOiAiKSxkZSgxMywic3BhbiIsNyksT2UoMTQpLGhlKCkoKSxk''@;'; put 'put ''ZSgxNSwicCIsOCksT2UoMTYsIiBTWVNTQ1BMOiAiKSxkZSgxNywic3BhbiIsNyksT2UoMTgpLGhlKCkoKSxkZSgxOSwicCIsOCksT2UoMjAsIiBTWVNUQ1BJUEhPU1ROQU1FOiAiKSxkZSgyMSwic3BhbiIsNyksT2UoMjIpLGhlKCkoKSxkZSgyMywicCIsOCksT2UoMjQsIiBTWVNWTE9ORzog''@;'; put 'put ''IiksZGUoMjUsInNwYW4iLDcpLE9lKDI2KSxoZSgpKCksZGUoMjcsInAiLDgpLE9lKDI4LCIgTUVNU0laRTogIiksZGUoMjksInNwYW4iLDcpLE9lKDMwKSxoZSgpKCksZGUoMzEsInAiLDgpLE9lKDMyLCIgU1lTUFJPQ0VTU01PREU6ICIpLGRlKDMzLCJzcGFuIiw3KSxPZSgzNCksaGUoKSgp''@;'; put 'put ''LGRlKDM1LCJwIiw4KSxPZSgzNiwiIFNZU0hPU1ROQU1FOiAiKSxkZSgzNywic3BhbiIsNyksT2UoMzgpLGhlKCkoKSxkZSgzOSwicCIsOCksT2UoNDAsIiBTWVNVU0VSSUQ6ICIpLGRlKDQxLCJzcGFuIiw3KSxPZSg0MiksaGUoKSgpLGRlKDQzLCJwIiw4KSxPZSg0NCwiIFNZU0hPU1RJTkZP''@;'; put 'put ''TE9ORzogIiksZGUoNDUsInNwYW4iLDcpLE9lKDQ2KSxoZSgpKCksZGUoNDcsInAiLDgpLE9lKDQ4LCIgU1lTRU5DT0RJTkc6ICIpLGRlKDQ5LCJzcGFuIiw3KSxPZSg1MCksaGUoKSgpLGRlKDUxLCJwIiw4KSxPZSg1MiwiIEFVVE9FWEVDOiAiKSxkZSg1Mywic3BhbiIsNyksT2UoNTQpLGhl''@;'; put 'put ''KCkoKSgpLGRlKDU1LCJkaXYiLDkpKDU2LCJkaXYiKSg1NywiaDYiLDYpLE9lKDU4LCIgRGF0YSBDb250cm9sbGVyIERldGFpbHMgIiksR3QoNTksInNwYW4iLDcpLGhlKCksZGUoNjAsInAiLDgpLE9lKDYxLCIgQXBwbGljYXRpb24gdmVyc2lvbjogIiksZGUoNjIsInNwYW4iLDcpLE9lKDYz''@;'; put 'put ''KSxoZSgpKCksZGUoNjQsInAiLDgpLE9lKDY1LCIgQnVpbGQgdGltZXN0YW1wOiAiKSxkZSg2Niwic3BhbiIsNyksT2UoNjcpLGhlKCkoKSxkZSg2OCwicCIsOCksT2UoNjksIiBBZGFwdGVyIHZlcnNpb246ICIpLGRlKDcwLCJzcGFuIiw3KSxPZSg3MSksaGUoKSgpLGRlKDcyLCJwIiw4KSxP''@;'; put 'put ''ZSg3MywiIEhUVFA6ICIpLGRlKDc0LCJzcGFuIiw3KSxPZSg3NSksaGUoKSgpLGRlKDc2LCJwIiw4KSxPZSg3NywiIERDIEFkbWluIEdyb3VwOiAiKSxkZSg3OCwic3BhbiIsNyksT2UoNzkpLGhlKCkoKSxkZSg4MCwicCIsOCksT2UoODEsIiBBcHAgTG9jYXRpb246ICIpLGRlKDgyLCJzcGFu''@;'; put 'put ''Iiw3KSxPZSg4MyksaGUoKSgpKCkoKSxkZSg4NCwiZGl2IikoODUsImg2Iiw2KSxPZSg4NiwiIExpY2VuY2UgZGV0YWlscyAiKSxHdCg4Nywic3BhbiIsNyksaGUoKSxkZSg4OCwicCIsOCksT2UoODksIiBWYWxpZCB1bnRpbDogIiksZGUoOTAsInNwYW4iLDcpLE9lKDkxKSxoZSgpKCksZGUo''@;'; put 'put ''OTIsInAiLDgpLE9lKDkzLCIgVXNlcnMgYWxsb3dlZDogIiksZGUoOTQsInNwYW4iLDcpLE9lKDk1KSxoZSgpKCksZGUoOTYsInAiLDgpLE9lKDk3LCIgU2l0ZSBJRHM6ICIpLGRlKDk4LCJzcGFuIiw3KSxPZSg5OSksaGUoKSgpLGRlKDEwMCwicCIsOCksT2UoMTAxLCIgRnJlZSBUaWVyOiAi''@;'; put 'put ''KSxkZSgxMDIsInNwYW4iLDcpLE9lKDEwMyksaGUoKSgpLG10KDEwNCxHX3QsNCwxLCJwIiwxMCkoMTA1LCRfdCw0LDEsInAiLDEwKSgxMDYsS190LDQsMSwicCIsMTApKDEwNyxxX3QsNCwxLCJwIiwxMCkoMTA4LFhfdCw0LDEsInAiLDEwKSgxMDksSl90LDQsMSwicCIsMTApKDExMCxRX3Qs''@;'; put 'put ''NCwxLCJwIiwxMCkoMTExLGV3dCw0LDEsInAiLDEwKSxkZSgxMTIsInAiLDgpLE9lKDExMywiIFZpZXdib3hlczogIiksZGUoMTE0LCJzcGFuIiw3KSxPZSgxMTUpLGhlKCkoKSxkZSgxMTYsInAiLDgpLE9lKDExNywiIEZpbGUgVXBsb2FkOiAiKSxkZSgxMTgsInNwYW4iLDcpLE9lKDExOSks''@;'; put 'put ''aGUoKSgpLGRlKDEyMCwicCIsOCksT2UoMTIxLCIgRWRpdCByZWNvcmQ6ICIpLGRlKDEyMiwic3BhbiIsNyksT2UoMTIzKSxoZSgpKCksZGUoMTI0LCJwIiw4KSxPZSgxMjUsIiBBZGQgcmVjb3JkOiAiKSxkZSgxMjYsInNwYW4iLDcpLE9lKDEyNyksaGUoKSgpKCkoKSxHdCgxMjgsImhyIiwz''@;'; put 'put ''KSxtdCgxMjksbnd0LDE0LDIsIm5nLWNvbnRhaW5lciIsMTEpLGhlKCkoKSgpLGRlKDEzMCwiY2xyLW1vZGFsIiwxMiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmVzcG9uc2VNb2RhbCx2KXx8KGgucmVzcG9uc2VNb2RhbD12KSx2fSksZGUoMTMx''@;'; put 'put ''LCJoMyIsMTMpLE9lKDEzMiwiUmVzcG9uc2UiKSxoZSgpLGRlKDEzMywiZGl2IiwxNCksT2UoMTM0KSxoZSgpLGRlKDEzNSwiZGl2IiwxNSkoMTM2LCJidXR0b24iLDE2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzcG9uc2VNb2RhbD0hMX0pLE9lKDEzNywiIE9rICIpLGhl''@;'; put 'put ''KCkoKSgpKSwyJmQmJihmZSgxNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTSVRFKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1NDUEwpLGZlKDQpLENyKG51bGw9PWguZW52''@;'; put 'put ''aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVENQSVBIT1NUTkFNRSksZmUoNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNWTE9ORyksZmUoNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmly''@;'; put 'put ''b25tZW50SW5mby5NRU1TSVpFKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1BST0NFU1NNT0RFKSxmZSg0KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0hPU1ROQU1FKSxmZSg0''@;'; put 'put ''KSxDcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1VTRVJJRCksZmUoNCksQ3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUSU5GT0xPTkcpLGZlKDQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJ''@;'; put 'put ''bmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTRU5DT0RJTkcpLGZlKDQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpLGZlKDkpLENyKGguYXBwSW5mby5hcHBWZXJzaW9uKSxmZSg0KSxDcihoLmFwcEluZm8uYnVpbGRUaW1l''@;'; put 'put ''c3RhbXApLGZlKDQpLENyKGguYXBwSW5mby5hZGFwdGVyVmVyc2lvbiksZmUoNCksQ3IoaC5odHRwPyJZRVMiOiJOTyIpLGZlKDQpLENyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uRENfQURNSU5fR1JPVVApLGZlKDQpLENyKG51bGw9PWguZW52aXJv''@;'; put 'put ''bm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uQVBQX0xPQyksZmUoOCksQ3IobnVsbD09aC5saWNlbmNlSW5mbz9udWxsOmgubGljZW5jZUluZm8udmFsaWRfdW50aWwpLGZlKDQpLENyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnVzZXJzX2FsbG93ZWQp''@;'; put 'put ''LGZlKDQpLENyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnNpdGVfaWRfbXVsdGlwbGUpLGZlKDQpLENyKG51bGwhPWgubGljZW5jZUluZm8mJmgubGljZW5jZUluZm8uZGVtbz8iWUVTIjoiTk8iKSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52''@;'; put 'put ''aWV3ZXJfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCE9PWguSW5m''@;'; put 'put ''aW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2Rh''@;'; put 'put ''aWx5X2xpbWl0IT09aC5JbmZpbml0eSksZmUoNCksQ3IoaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8iWUVTIjoiTk8iKSxmZSg0KSxDcihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkPyJZRVMiOiJOTyIpLGZlKDQpLENyKGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNv''@;'; put 'put ''cmQ/IllFUyI6Ik5PIiksZmUoNCksQ3IoaC5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkPyJZRVMiOiJOTyIpLGZlKDIpLHhlKCJuZ0lmIiwxPT09KG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uSVNBRE1JTikpLGZlKCkscGkoImNsck1vZGFsT3Bl''@;'; put 'put ''biIsaC5yZXNwb25zZU1vZGFsKSxmZSg0KSxJcigiICIsaC5yZXNwb25zZSwiICIpKX0sZGVwZW5kZW5jaWVzOltiYSxjMSxvdSxLdSxqMCxQMl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKX1dO2xldCBpd3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKHJ3dCksemNdfSl9fXJldHVybiBjfSkoKSxhd3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGl3dCx6MCxSY119KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG93dChjLGwpezEmYyYmR3Qo''@;'; put 'put ''MCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBzd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmdyb3VwU2VhcmNoPSIiLEN0KGguZ3JvdXBMaXN0T25GaWx0ZXIo''@;'; put 'put ''KSl9KSxoZSgpfX1mdW5jdGlvbiBsd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuZ3Jv''@;'; put 'put ''dXBTZWFyY2gsaCl8fChmLmdyb3VwU2VhcmNoPWgpLEN0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LG93dCwxLDAsImNsci1pY29uIiwxMCkoNSxzd3QsMSwwLCJjbHItaWNvbiIsMTEpLGhl''@;'; put 'put ''KCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmdyb3VwU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGN3dChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5ncm91cE9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksT2UoMyksaGUoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdCxkPUxlKCk7VHIoImFjdGl2ZSIsYS5HUk9VUFVSST09PWQuZ3JvdXBVcmkpLGZlKDMpLElyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiB1d3QoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGN3dCw0LDMsImNsci10cmVlLW5v''@;'; put 'put ''ZGUiLDE0KSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gZHd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gaHd0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI0KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI1KSg2LCJwIiwyNikoNywiYiIpLE9lKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI1KSgxMSwiaSIpLE9lKDEyKSxoZSgpKCkoKSgpKCko''@;'; put 'put ''KSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoOCksQ3IoYS5ncm91cE5hbWUpLGZlKDQpLENyKGEuZ3JvdXBEZXNjfHwibm8gZGVzY3JpcHRpb24iKX19ZnVuY3Rpb24gZnd0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxPZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBw''@;'; put 'put ''d3QoYyxsKXsxJmMmJihjaSgwKSxkZSgxLCJ0ZCIsMzEpKDIsImIiKSxPZSgzLCJOQU1FIiksaGUoKSgpLGRlKDQsInRkIiwzMSkoNSwiYiIpLE9lKDYsIkVNQUlMIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLE9lKDksIkNSRUFURUQiKSxoZSgpKCksZGUoMTAsInRkIiwzMikoMTEs''@;'; put 'put ''ImIiKSxPZSgxMiwiVVBEQVRFRCIpLGhlKCkoKSx1aSgpKX1mdW5jdGlvbiBnd3QoYyxsKXsxJmMmJihjaSgwKSxkZSgxLCJ0ZCIsMzEpKDIsImIiKSxPZSgzLCJJRCIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxPZSg2LCJESVNQTEFZIE5BTUUiKSxoZSgpKCksZGUoNywidGQiLDMx''@;'; put 'put ''KSg4LCJiIiksT2UoOSwiVVNFUiBOQU1FIiksaGUoKSgpLHVpKCkpfWZ1bmN0aW9uIG13dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsInRkIiwzMiksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzIpLE9lKDQpLGhlKCksZGUoNSwidGQiLDMyKSxPZSg2KSxoZSgpLGRlKDcsInRkIiwzMiksT2Uo''@;'; put 'put ''OCksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoMiksQ3IoYS5NRU1CRVJOQU1FKSxmZSgyKSxDcihhLkVNQUlMKSxmZSgyKSxDcihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLENyKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIHZ3dChjLGwpe2lmKDEmYyYmKGNp''@;'; put 'put ''KDApLGRlKDEsInRkIiwzMiksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzIpLE9lKDQpLGhlKCksZGUoNSwidGQiLDMyKSxPZSg2KSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgyKSxDcihhLklEKSxmZSgyKSxDcihhLkRJU1BMQVlOQU1FKSxmZSgyKSxDcihhLlVT''@;'; put 'put ''RVJOQU1FKX19ZnVuY3Rpb24gYnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDMzKSxtdCgxLG13dCw5LDQsIm5nLWNvbnRhaW5lciIsNikoMix2d3QsNywzLCJuZy1jb250YWluZXIiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDQpO3hlKCJyb3V0ZXJMaW5rIiwi''@;'; put 'put ''L3ZpZXcvdXNlcm5hdi91c2Vycy8iKyhhLlVSSU1FTXx8YS5JRCkpLGZlKCkseGUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzanMpfX1mdW5jdGlvbiB5d3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSxtdCgzLHB3dCwxMywwLCJuZy1jb250YWluZXIiLDYpKDQsZ3d0LDEwLDAsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpLGRlKDUsInRib2R5IiksbXQoNixid3QsMywzLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPUxl''@;'; put 'put ''KDMpO2ZlKDMpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxmZSgyKSx4ZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiBfd3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiKSgxLCJoMyIpLE9lKDIpLGhlKCksbXQoMyxmd3QsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNyksbXQoNSx5d3QsNywzLCJ0YWJsZSIsMjgpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLElyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIp''@;'; put 'put ''LGZlKCkseGUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIHd3dChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gQ3d0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLE9lKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLGZlKDIpLENyKGEuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIFN3dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLE9lKDUpLGhlKCkoKSgpKCksZGUoNiwidGJvZHkiKSxtdCg3LEN3dCwzLDIsInRyIiwzMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoNSksSXIoIk1FTUJFUlMgKCIsYS5n''@;'; put 'put ''cm91cE1lbWJlckNvdW50LCIpIiksZmUoMikseGUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gTXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyKSxoZSgpLG10KDMsd3d0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLG10KDUsU3d0LDgsMiwi''@;'; put 'put ''dGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxDcihhLmdyb3VwTmFtZSksZmUoKSx4ZSgibmdJZiIsMD09YS5ncm91cE1lbWJlckNvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24geHd0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2IiksbXQoMSxod3QsMTMsMiwiZGl2IiwyMCksZGUoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikoNCwiZGl2IiwyMyksbXQoNSxfd3QsNiwzLCJkaXYiLDYpKDYsTXd0LDYsMywiZGl2Iiw2KSxHdCg3LCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSg0KSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19bGV0IHQ4ZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVS''@;'; put 'put ''ST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9QjAuWSx0aGlzLnNhc2pzQ29uZmlnPXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50''@;'; put 'put ''U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksS24udXNlcm5hdi5ncm91cExpc3QmJiF0''@;'; put 'put ''aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9S24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Lbi51c2VybmF2Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09S24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7R1JPVVBVUkk6Zi5p''@;'; put 'put ''ZCxHUk9VUE5BTUU6Zi5uYW1lLEdST1VQREVTQzpmLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1oLEtuLnVzZXJuYXYuZ3JvdXBMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVsbCkudGhlbihhPT57dGhpcy5s''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuZ3JvdXBzPWEuYWRhcHRlclJlc3BvbnNlLmdyb3VwcyxLbi51c2VybmF2Lmdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHN9KSk6KHRoaXMuZ3JvdXBzPUtuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9S24udXNlcm5hdi5ncm91cFNl''@;'; put 'put ''YXJjaCksdGhpcy5wYXJhbVByZXNlbnQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK3RoaXMucGFyYW1VUkkrIi9tZW1iZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFw''@;'; put 'put ''cGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPUpTT04ucGFyc2UoYSk7dGhpcy5sb2FkaW5nPSExO2xldCBoPWQuaXRlbXMubWFwKGY9Pih7TUVNQkVSTkFNRTpmLm5hbWUsTUVNQkVSSUQ6Zi5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1oLHRoaXMu''@;'; put 'put ''Z3JvdXBNZW1iZXJDb3VudD1oLmxlbmd0aCx0aGlzLmdyb3VwVXJpPXRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDp0aGlzLnBhcmFt''@;'; put 'put ''VVJJfV19KS50aGVuKGQ9Pnt0aGlzLmdyb3VwTWVtYmVycz1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx2b2lkIDAhPT1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdJiYo''@;'; put 'put ''dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9ZC5hZGFwdGVy''@;'; put 'put ''UmVzcG9uc2Uuc2FzbWVtYmVyc1swXS5HUk9VUERFU0MsdGhpcy5ncm91cE5hbWV8fCh0aGlzLmdyb3VwTmFtZT10aGlzLnBhcmFtVVJJKSl9KSkpfWdyb3VwTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmdyb3Vwcyx0aGlzLmdyb3VwU2Vh''@;'; put 'put ''cmNoLCJHUk9VUE5BTUUiKSxLbi51c2VybmF2Lmdyb3VwU2VhcmNoPXRoaXMuZ3JvdXBTZWFyY2h9Z3JvdXBPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgw''@;'; put 'put ''LGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLkdST1VQVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIithLkdST1VQVVJJKyIvbWVtYmVycz9s''@;'; put 'put ''aW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWEuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9YS5HUk9VUE5BTUUs''@;'; put 'put ''dGhpcy5ncm91cERlc2M9YS5HUk9VUERFU0M7bGV0IHY9Zi5pdGVtcy5tYXAoTT0+KHtNRU1CRVJOQU1FOk0ubmFtZSxNRU1CRVJJRDpNLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPXYsdGhpcy5ncm91cE1lbWJlckNvdW50PXYubGVuZ3RofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVz''@;'; put 'put ''ZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOmEuR1JPVVBVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWEuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9YS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9YS5HUk9VUERFU0MsdGhp''@;'; put 'put ''cy5ncm91cE1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGh9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh0bCksR2Uo''@;'; put 'put ''R3UpLEdlKExzKSxHZShmaCksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIs''@;'; put 'put ''IiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxb''@;'; put 'put ''MSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgR3JvdXBzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0s''@;'; put 'put ''WyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJj''@;'; put 'put ''dXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VycyJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsImdyb3VwLWRhdGEi''@;'; put 'put ''XSxbMSwidGFibGUiLCJncm91cC1pbmZvIl0sWzEsImxlZnQiXSxbMSwiZ3JvdXAtaW5mby10ZXh0Il0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMywicm91dGVyTGluayIs''@;'; put 'put ''NCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksbXQoMixsd3QsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLHV3dCwy''@;'; put 'put ''LDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksbXQoNSxkd3QsMywwLCJkaXYiLDUpKDYseHd0LDgsMywiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsaC5ncm91cHMpLGZlKCkseGUoIm5nRm9yT2YiLGguZ3JvdXBzKSxmZSgyKSx4ZSgibmdJZiIs''@;'; put 'put ''aC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLmdyb3VwTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMxLHFsLG5sLEdzLEVoLFBkLEhsLFoxLGk0LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEV3dCgpe31mdW5jdGlvbiBh''@;'; put 'put ''dGUoYyl7cmV0dXJuIG51bGw9PWM/RXd0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gbjhlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIEF3dCgpe3JldHVybltdfWZ1bmN0aW9u''@;'; put 'put ''IHI4ZShjKXtyZXR1cm4gbnVsbD09Yz9Bd3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiBpOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gYThlKGMpe3JldHVybiBmdW5jdGlvbihsKXty''@;'; put 'put ''ZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgSXd0PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIEx3dCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBQd3Q9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBGd3QoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNo''@;'; put 'put ''aWxkcmVuKX1mdW5jdGlvbiBvOGUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gZE4oYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9''@;'; put 'put ''Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gend0KGMsbCxhLGQsaCxmKXtmb3IodmFyIE0sdj0wLEQ9bC5sZW5ndGgsWj1mLmxlbmd0aDt2PFo7Kyt2KShNPWxbdl0pPyhNLl9fZGF0YV9fPWZbdl0sZFt2XT1NKTphW3ZdPW5ldyBkTihjLGZbdl0pO2Zvcig7djxEOysrdikoTT1sW3ZdKSYm''@;'; put 'put ''KGhbdl09TSl9ZnVuY3Rpb24gVXd0KGMsbCxhLGQsaCxmLHYpe3ZhciBNLEQsRWUsWj1uZXcgTWFwLHJlPWwubGVuZ3RoLGNlPWYubGVuZ3RoLGJlPW5ldyBBcnJheShyZSk7Zm9yKE09MDtNPHJlOysrTSkoRD1sW01dKSYmKGJlW01dPUVlPXYuY2FsbChELEQuX19kYXRhX18sTSxsKSsiIixa''@;'; put 'put ''LmhhcyhFZSk/aFtNXT1EOlouc2V0KEVlLEQpKTtmb3IoTT0wO008Y2U7KytNKUVlPXYuY2FsbChjLGZbTV0sTSxmKSsiIiwoRD1aLmdldChFZSkpPyhkW01dPUQsRC5fX2RhdGFfXz1mW01dLFouZGVsZXRlKEVlKSk6YVtNXT1uZXcgZE4oYyxmW01dKTtmb3IoTT0wO008cmU7KytNKShEPWxb''@;'; put 'put ''TV0pJiZaLmdldChiZVtNXSk9PT1EJiYoaFtNXT1EKX1mdW5jdGlvbiBad3QoYyl7cmV0dXJuIGMuX19kYXRhX199ZnVuY3Rpb24gWXd0KGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBKd3QoYyxsKXtyZXR1cm4gYzxs''@;'; put 'put ''Py0xOmM+bD8xOmM+PWw/MDpOYU59ZE4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkTixhcHBlbmRDaGlsZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gdGhpcy5fcGFy''@;'; put 'put ''ZW50Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fTt2YXIgb3Rl''@;'; put 'put ''PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBzOGU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOm90ZSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2Ui''@;'; put 'put ''LHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIGhOKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLHM4ZS5oYXNPd25Qcm9wZXJ0eShsKT97''@;'; put 'put ''c3BhY2U6czhlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gYUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBvQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlv''@;'; put 'put ''biBzQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBsQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gY0N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiB1Q3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMu''@;'; put 'put ''cmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gbDhlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZh''@;'; put 'put ''dWx0Vmlld31mdW5jdGlvbiBoQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gZkN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gcEN0KGMsbCxhKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIEV3KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8''@;'; put 'put ''bDhlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIG1DdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gdkN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBiQ3QoYyxs''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gYzhlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBzdGUoYyl7cmV0dXJuIGMuY2xhc3NMaXN0''@;'; put 'put ''fHxuZXcgdThlKGMpfWZ1bmN0aW9uIHU4ZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9YzhlKGMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gZDhlKGMsbCl7Zm9yKHZhciBhPXN0ZShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEuYWRkKGxbZF0pfWZ1bmN0aW9u''@;'; put 'put ''IGg4ZShjLGwpe2Zvcih2YXIgYT1zdGUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiBfQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZDhlKHRoaXMsYyl9fWZ1bmN0aW9uIHdDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtoOGUodGhpcyxjKX19ZnVuY3Rp''@;'; put 'put ''b24gQ0N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP2Q4ZTpoOGUpKHRoaXMsYyl9fWZ1bmN0aW9uIE1DdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geEN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVu''@;'; put 'put ''Y3Rpb24gRUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIEFDdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGtDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRN''@;'; put 'put ''TD1jfX1mdW5jdGlvbiBEQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIFJDdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlv''@;'; put 'put ''biBPQ3QoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBGQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3Bh''@;'; put 'put ''Y2VVUkk7cmV0dXJuIGE9PT1vdGUmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW90ZT9sLmNyZWF0ZUVsZW1lbnQoYyk6bC5jcmVhdGVFbGVtZW50TlMoYSxjKX19ZnVuY3Rpb24gSEN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudE5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIGY4ZShjKXt2YXIgbD1oTihjKTtyZXR1cm4obC5sb2NhbD9IQ3Q6RkN0KShsKX1mdW5jdGlvbiBWQ3QoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqQ3QoKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7YyYmYy5yZW1vdmVDaGls''@;'; put 'put ''ZCh0aGlzKX1mdW5jdGlvbiBVQ3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMSksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIFpDdCgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCEwKSxsPXRoaXMucGFyZW50''@;'; put 'put ''Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gS0N0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMuX19vbjtpZihsKXtmb3IodmFyIGYsYT0wLGQ9LTEsaD1sLmxlbmd0aDthPGg7KythKWY9bFthXSxjLnR5cGUmJmYudHlw''@;'; put 'put ''ZSE9PWMudHlwZXx8Zi5uYW1lIT09Yy5uYW1lP2xbKytkXT1mOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLnR5cGUsZi5saXN0ZW5lcixmLm9wdGlvbnMpOysrZD9sLmxlbmd0aD1kOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBxQ3QoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBoLGQ9dGhpcy5fX29uLGY9ZnVuY3Rpb24gR0N0KGMpe3JldHVybiBmdW5jdGlvbihsKXtjLmNhbGwodGhpcyxsLHRoaXMuX19kYXRhX18pfX0obCk7aWYoZClmb3IodmFyIHY9MCxNPWQubGVuZ3RoO3Y8TTsrK3YpaWYoKGg9ZFt2XSkudHlwZT09PWMudHlwZSYmaC5uYW1lPT09Yy5uYW1l''@;'; put 'put ''KXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXIsaC5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXI9ZixoLm9wdGlvbnM9YSksdm9pZChoLnZhbHVlPWwpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihjLnR5cGUsZixh''@;'; put 'put ''KSxoPXt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSx2YWx1ZTpsLGxpc3RlbmVyOmYsb3B0aW9uczphfSxkP2QucHVzaChoKTp0aGlzLl9fb249W2hdfX1mdW5jdGlvbiBwOGUoYyxsLGEpe3ZhciBkPWw4ZShjKSxoPWQuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGg/aD1uZXcgaChs''@;'; put 'put ''LGEpOihoPWQuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYT8oaC5pbml0RXZlbnQobCxhLmJ1YmJsZXMsYS5jYW5jZWxhYmxlKSxoLmRldGFpbD1hLmRldGFpbCk6aC5pbml0RXZlbnQobCwhMSwhMSkpLGMuZGlzcGF0Y2hFdmVudChoKX1mdW5jdGlvbiBKQ3QoYyxsKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gcDhlKHRoaXMsYyxsKX19ZnVuY3Rpb24gUUN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHA4ZSh0aGlzLGMsbC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX11OGUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYyl7dGhpcy5fbmFtZXMuaW5kZXhPZihj''@;'; put 'put ''KTwwJiYodGhpcy5fbmFtZXMucHVzaChjKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGw9dGhpcy5fbmFtZXMuaW5kZXhPZihjKTtsPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGwsMSksdGhp''@;'; put 'put ''cy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoYyk+PTB9fTt2YXIgbHRlPVtudWxsXTtmdW5jdGlvbiBpZChjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3Bh''@;'; put 'put ''cmVudHM9bH1mdW5jdGlvbiBnOGUoKXtyZXR1cm4gbmV3IGlkKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sbHRlKX1pZC5wcm90b3R5cGU9ZzhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aWQsc2VsZWN0OmZ1bmN0aW9uIFR3dChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9YXRl''@;'; put 'put ''KGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELFosZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPW5ldyBBcnJheSh2KSxyZT0wO3JlPHY7KytyZSkoRD1mW3JlXSkmJihaPWMuY2FsbChELEQuX19kYXRhX18s''@;'; put 'put ''cmUsZikpJiYoIl9fZGF0YV9fImluIEQmJihaLl9fZGF0YV9fPUQuX19kYXRhX18pLE1bcmVdPVopO3JldHVybiBuZXcgaWQoZCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIER3dChjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIGt3dChjKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbjhlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOnI4ZShjKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1bXSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgRCx2PWxbZl0sTT12Lmxlbmd0aCxaPTA7WjxNOysrWikoRD12W1pdKSYmKGQu''@;'; put 'put ''cHVzaChjLmNhbGwoRCxELl9fZGF0YV9fLFosdikpLGgucHVzaChEKSk7cmV0dXJuIG5ldyBpZChkLGgpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbiBPd3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PWM/THd0OmZ1bmN0aW9uIFJ3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSXd0''@;'; put 'put ''LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6YThlKGMpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uIE53dChjKXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09Yz9Gd3Q6ZnVuY3Rpb24gSHd0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBQ''@;'; put 'put ''d3QuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzphOGUoYykpKX0sZmlsdGVyOmZ1bmN0aW9uIFZ3dChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9aThlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSks''@;'; put 'put ''aD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxaPTA7Wjx2OysrWikoRD1mW1pdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxaLGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyBpZChkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIFd3dChjLGwpe2lm''@;'; put 'put ''KCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsWnd0KTt2YXIgYT1sP1V3dDp6d3QsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBqd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShj''@;'; put 'put ''KSk7Zm9yKHZhciBmPWgubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpLFo9MDtaPGY7KytaKXt2YXIgcmU9ZFtaXSxjZT1oW1pdLGJlPWNlLmxlbmd0aCxFZT1Zd3QoYy5jYWxsKHJlLHJlJiZyZS5fX2RhdGFfXyxaLGQpKSxCZT1FZS5sZW5ndGgs''@;'; put 'put ''cWU9TVtaXT1uZXcgQXJyYXkoQmUpLHJ0PXZbWl09bmV3IEFycmF5KEJlKTthKHJlLGNlLHFlLHJ0LERbWl09bmV3IEFycmF5KGJlKSxFZSxsKTtmb3IodmFyIHZuLENuLGR0PTAsSnQ9MDtkdDxCZTsrK2R0KWlmKHZuPXFlW2R0XSl7Zm9yKGR0Pj1KdCYmKEp0PWR0KzEpOyEoQ249cnRbSnRd''@;'; put 'put ''KSYmKytKdDxCZTspO3ZuLl9uZXh0PUNufHxudWxsfX1yZXR1cm4odj1uZXcgaWQodixkKSkuX2VudGVyPU0sdi5fZXhpdD1ELHZ9LGVudGVyOmZ1bmN0aW9uIEJ3dCgpe3JldHVybiBuZXcgaWQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobzhlKSx0aGlzLl9wYXJlbnRzKX0sZXhp''@;'; put 'put ''dDpmdW5jdGlvbiBHd3QoKXtyZXR1cm4gbmV3IGlkKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAobzhlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiAkd3QoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gS3d0KGMpe2Zv''@;'; put 'put ''cih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCx2PU1hdGgubWluKGgsZC5sZW5ndGgpLE09bmV3IEFycmF5KGgpLEQ9MDtEPHY7KytEKWZvcih2YXIgRWUsWj1hW0RdLHJlPWRbRF0sY2U9Wi5sZW5ndGgsYmU9''@;'; put 'put ''TVtEXT1uZXcgQXJyYXkoY2UpLEJlPTA7QmU8Y2U7KytCZSkoRWU9WltCZV18fHJlW0JlXSkmJihiZVtCZV09RWUpO2Zvcig7RDxoOysrRClNW0RdPWFbRF07cmV0dXJuIG5ldyBpZChNLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gblN0KCl7cmV0dXJuIHRoaXN9LG9yZGVy''@;'; put 'put ''OmZ1bmN0aW9uIHF3dCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIHYsZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykodj1kW2hdKSYmKGYmJjRedi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnROb2Rl''@;'; put 'put ''Lmluc2VydEJlZm9yZSh2LGYpLGY9dik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gWHd0KGMpe2Z1bmN0aW9uIGwoY2UsYmUpe3JldHVybiBjZSYmYmU/YyhjZS5fX2RhdGFfXyxiZS5fX2RhdGFfXyk6IWNlLSFiZX1jfHwoYz1Kd3QpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1hLmxl''@;'; put 'put ''bmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBaLHY9YVtmXSxNPXYubGVuZ3RoLEQ9aFtmXT1uZXcgQXJyYXkoTSkscmU9MDtyZTxNOysrcmUpKFo9dltyZV0pJiYoRFtyZV09Wik7RC5zb3J0KGwpfXJldHVybiBuZXcgaWQoaCx0aGlzLl9wYXJlbnRzKS5vcmRlcigp''@;'; put 'put ''fSxjYWxsOmZ1bmN0aW9uIFF3dCgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gZUN0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gdEN0KCl7Zm9y''@;'; put 'put ''KHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciB2PWRbaF07aWYodilyZXR1cm4gdn1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBuQ3QoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9mIHRo''@;'; put 'put ''aXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiByQ3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gaUN0KGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIE0saD1sW2FdLGY9MCx2PWgubGVuZ3RoO2Y8djsrK2Yp''@;'; put 'put ''KE09aFtmXSkmJmMuY2FsbChNLE0uX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBkQ3QoYyxsKXt2YXIgYT1oTihjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxh''@;'; put 'put ''LmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/b0N0OmFDdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP3VDdDpjQ3Q6YS5sb2NhbD9sQ3Q6c0N0KShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gZ0N0KGMsbCxhKXtyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9oQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/cEN0OmZDdCkoYyxsLGE/PyIiKSk6RXcodGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIHlDdChjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChu''@;'; put 'put ''dWxsPT1sP21DdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9iQ3Q6dkN0KShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBTQ3QoYyxsKXt2YXIgYT1jOGUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9c3RlKHRoaXMubm9kZSgpKSxoPS0xLGY9YS5s''@;'; put 'put ''ZW5ndGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP0NDdDpsP19DdDp3Q3QpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIFRDdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVh''@;'; put 'put ''Y2gobnVsbD09Yz9NQ3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0VDdDp4Q3QpKGMpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBJQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/QUN0OigiZnVuY3Rpb24iPT10eXBlb2YgYz9E''@;'; put 'put ''Q3Q6a0N0KShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBMQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKFJDdCl9LGxvd2VyOmZ1bmN0aW9uIFBDdCgpe3JldHVybiB0aGlzLmVhY2goT0N0KX0sYXBwZW5kOmZ1bmN0aW9uIE5DdChjKXt2YXIgbD0iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYz9jOmY4ZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uIEJDdChjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6ZjhlKGMpLGQ9bnVs''@;'; put 'put ''bD09bD9WQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDphdGUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rp''@;'; put 'put ''b24gekN0KCl7cmV0dXJuIHRoaXMuZWFjaChqQ3QpfSxjbG9uZTpmdW5jdGlvbiBXQ3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KGM/WkN0OlVDdCl9LGRhdHVtOmZ1bmN0aW9uIFlDdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsYyk6dGhpcy5u''@;'; put 'put ''b2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIFhDdChjLGwsYSl7dmFyIGgsdixkPWZ1bmN0aW9uICRDdChjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGwpe3ZhciBhPSIiLGQ9bC5pbmRleE9mKCIuIik7cmV0dXJuIGQ+PTAmJihhPWwuc2xpY2UoZCsx''@;'; put 'put ''KSxsPWwuc2xpY2UoMCxkKSkse3R5cGU6bCxuYW1lOmF9fSl9KGMrIiIpLGY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoTT1sP3FDdDpLQ3QsaD0wO2g8ZjsrK2gpdGhpcy5lYWNoKE0oZFtoXSxsLGEpKTtyZXR1cm4gdGhpc312YXIgTT10aGlzLm5vZGUoKS5fX29u''@;'; put 'put ''O2lmKE0pZm9yKHZhciByZSxEPTAsWj1NLmxlbmd0aDtEPFo7KytEKWZvcihoPTAscmU9TVtEXTtoPGY7KytoKWlmKCh2PWRbaF0pLnR5cGU9PT1yZS50eXBlJiZ2Lm5hbWU9PT1yZS5uYW1lKXJldHVybiByZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gZVN0KGMsbCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/UUN0OkpDdCkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKnRTdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIHYsZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpKHY9''@;'; put 'put ''ZFtoXSkmJih5aWVsZCB2KX19O2NvbnN0IEs5PWc4ZTtmdW5jdGlvbiBjdGUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBpZChbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBpZChbbjhlKGMpXSxsdGUpfWZ1bmN0''@;'; put 'put ''aW9uIHdzKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgaWQoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGMpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBpZChbW2NdXSxsdGUpfXZhciByU3Q9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gbThlKCl7Zm9yKHZhciBk''@;'; put 'put ''LGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IGZOKGEpfWZ1bmN0aW9uIGZOKGMpe3Ro''@;'; put 'put ''aXMuXz1jfWZ1bmN0aW9uIGFTdChjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIHY4ZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwpe2Nb''@;'; put 'put ''ZF09clN0LGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31mTi5wcm90b3R5cGU9bThlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRoaXMu''@;'; put 'put ''XyxkPWZ1bmN0aW9uIGlTdChjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsdj1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBj''@;'; put 'put ''YWxsYmFjazogIitsKTtmb3IoOysrZjx2OylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT12OGUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT12OGUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8djspaWYoKGg9KGM9ZFtmXSkudHlw''@;'; put 'put ''ZSkmJihoPWFTdChhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBmTihjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgtMik+''@;'; put 'put ''MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsrK2Qp''@;'; put 'put ''ZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1ZS5h''@;'; put 'put ''cHBseShsLGEpfX07Y29uc3QgdXRlPW04ZTt2YXIgcE4sVEEsVHc9MCx4QT0wLEVBPTAsYjhlPTFlMyxnTj0wLHE5PTAsbU49MCxBQT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx5OGU9Im9iamVjdCI9PXR5cGVvZiB3aW5k''@;'; put 'put ''b3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oYyl7c2V0VGltZW91dChjLDE3KX07ZnVuY3Rpb24gZHRlKCl7cmV0dXJuIHE5fHwoeThlKG9TdCkscTk9QUEubm93KCkrbU4pfWZ1bmN0aW9u''@;'; put 'put ''IG9TdCgpe3E5PTB9ZnVuY3Rpb24gdk4oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIF84ZShjLGwsYSl7dmFyIGQ9bmV3IHZOO3JldHVybiBkLnJlc3RhcnQoYyxsLGEpLGR9ZnVuY3Rpb24gdzhlKCl7cTk9KGdOPUFBLm5vdygpKSttTixUdz14QT0w''@;'; put 'put ''O3RyeXshZnVuY3Rpb24gc1N0KCl7ZHRlKCksKytUdztmb3IodmFyIGwsYz1wTjtjOykobD1xOS1jLl90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZvaWQgMCxsKSxjPWMuX25leHQ7LS1Ud30oKX1maW5hbGx5e1R3PTAsZnVuY3Rpb24gY1N0KCl7Zm9yKHZhciBjLGEsbD1wTixkPTEvMDtsOyls''@;'; put 'put ''Ll9jYWxsPyhkPmwuX3RpbWUmJihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQsbC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6cE49YSk7VEE9YyxodGUoZCl9KCkscTk9MH19ZnVuY3Rpb24gbFN0KCl7dmFyIGM9QUEubm93KCksbD1jLWdOO2w+YjhlJiYobU4tPWwsZ049''@;'; put 'put ''Yyl9ZnVuY3Rpb24gaHRlKGMpe1R3fHwoeEEmJih4QT1jbGVhclRpbWVvdXQoeEEpKSxjLXE5PjI0PyhjPDEvMCYmKHhBPXNldFRpbWVvdXQodzhlLGMtQUEubm93KCktbU4pKSxFQSYmKEVBPWNsZWFySW50ZXJ2YWwoRUEpKSk6KEVBfHwoZ049QUEubm93KCksRUE9c2V0SW50ZXJ2YWwobFN0''@;'; put 'put ''LGI4ZSkpLFR3PTEseThlKHc4ZSkpKX1mdW5jdGlvbiBiTihjLGwsYSl7dmFyIGQ9bmV3IHZOO3JldHVybiBkLnJlc3RhcnQoaD0+e2Quc3RvcCgpLGMoaCtsKX0sbD1udWxsPT1sPzA6K2wsYSksZH12Ti5wcm90b3R5cGU9XzhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dk4scmVzdGFydDpm''@;'; put 'put ''dW5jdGlvbihjLGwsYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTthPShudWxsPT1hP2R0ZSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmVEEhPT10aGlzJiYoVEE/VEEuX25leHQ9dGhp''@;'; put 'put ''czpwTj10aGlzLFRBPXRoaXMpLHRoaXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsaHRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGh0ZSgpKX19O3ZhciB1U3Q9dXRlKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVw''@;'; put 'put ''dCIpLGRTdD1bXSxDOGU9MCxwdGU9Mix5Tj0zLGd0ZT01LF9OPTY7ZnVuY3Rpb24gd04oYyxsLGEsZCxoLGYpe3ZhciB2PWMuX190cmFuc2l0aW9uO2lmKHYpe2lmKGEgaW4gdilyZXR1cm59ZWxzZSBjLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24gaFN0KGMsbCxhKXt2YXIgaCxkPWMuX190''@;'; put 'put ''cmFuc2l0aW9uO2Z1bmN0aW9uIHYoWil7dmFyIHJlLGNlLGJlLEVlO2lmKDEhPT1hLnN0YXRlKXJldHVybiBEKCk7Zm9yKHJlIGluIGQpaWYoKEVlPWRbcmVdKS5uYW1lPT09YS5uYW1lKXtpZihFZS5zdGF0ZT09PXlOKXJldHVybiBiTih2KTs0PT09RWUuc3RhdGU/KEVlLnN0YXRlPV9OLEVl''@;'; put 'put ''LnRpbWVyLnN0b3AoKSxFZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLGMsYy5fX2RhdGFfXyxFZS5pbmRleCxFZS5ncm91cCksZGVsZXRlIGRbcmVdKTorcmU8bCYmKEVlLnN0YXRlPV9OLEVlLnRpbWVyLnN0b3AoKSxFZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2RhdGFfXyxFZS5pbmRleCxFZS5n''@;'; put 'put ''cm91cCksZGVsZXRlIGRbcmVdKX1pZihiTihmdW5jdGlvbigpe2Euc3RhdGU9PT15TiYmKGEuc3RhdGU9NCxhLnRpbWVyLnJlc3RhcnQoTSxhLmRlbGF5LGEudGltZSksTShaKSl9KSxhLnN0YXRlPXB0ZSxhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxh''@;'; put 'put ''LnN0YXRlPT09cHRlKXtmb3IoYS5zdGF0ZT15TixoPW5ldyBBcnJheShiZT1hLnR3ZWVuLmxlbmd0aCkscmU9MCxjZT0tMTtyZTxiZTsrK3JlKShFZT1hLnR3ZWVuW3JlXS52YWx1ZS5jYWxsKGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApKSYmKGhbKytjZV09RWUpO2gubGVuZ3RoPWNl''@;'; put 'put ''KzF9fWZ1bmN0aW9uIE0oWil7Zm9yKHZhciByZT1aPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxaL2EuZHVyYXRpb24pOihhLnRpbWVyLnJlc3RhcnQoRCksYS5zdGF0ZT1ndGUsMSksY2U9LTEsYmU9aC5sZW5ndGg7KytjZTxiZTspaFtjZV0uY2FsbChjLHJlKTthLnN0YXRlPT09Z3Rl''@;'; put 'put ''JiYoYS5vbi5jYWxsKCJlbmQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLEQoKSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgWiBpbiBhLnN0YXRlPV9OLGEudGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlvbn1kW2xdPWEsYS50aW1lcj1f''@;'; put 'put ''OGUoZnVuY3Rpb24gZihaKXthLnN0YXRlPTEsYS50aW1lci5yZXN0YXJ0KHYsYS5kZWxheSxhLnRpbWUpLGEuZGVsYXk8PVomJnYoWi1hLmRlbGF5KX0sMCxhLnRpbWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246dVN0LHR3ZWVuOmRTdCx0aW1lOmYudGltZSxkZWxheTpmLmRl''@;'; put 'put ''bGF5LGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpDOGV9KX1mdW5jdGlvbiBtdGUoYyxsKXt2YXIgYT1DMyhjLGwpO2lmKGEuc3RhdGU+QzhlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIGF9ZnVu''@;'; put 'put ''Y3Rpb24gczQoYyxsKXt2YXIgYT1DMyhjLGwpO2lmKGEuc3RhdGU+eU4pdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGF9ZnVuY3Rpb24gQzMoYyxsKXt2YXIgYT1jLl9fdHJhbnNpdGlvbjtpZighYXx8IShhPWFbbF0pKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gYX1mdW5jdGlvbiBDTihjLGwpe3ZhciBkLGgsdixhPWMuX190cmFuc2l0aW9uLGY9ITA7aWYoYSl7Zm9yKHYgaW4gbD1udWxsPT1sP251bGw6bCsiIixhKShkPWFbdl0pLm5hbWU9PT1sPyhoPWQuc3RhdGU+cHRlJiZkLnN0YXRlPGd0''@;'; put 'put ''ZSxkLnN0YXRlPV9OLGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW3ZdKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gbDQoYyxsKXtyZXR1cm4gYz0rYyxs''@;'; put 'put ''PStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIFNOLE04ZT0xODAvTWF0aC5QSSx2dGU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24geDhlKGMsbCxhLGQsaCxmKXt2YXIgdixNLEQ7cmV0''@;'; put 'put ''dXJuKHY9TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPXYsbC89diksKEQ9YyphK2wqZCkmJihhLT1jKkQsZC09bCpEKSwoTT1NYXRoLnNxcnQoYSphK2QqZCkpJiYoYS89TSxkLz1NLEQvPU0pLGMqZDxsKmEmJihjPS1jLGw9LWwsRD0tRCx2PS12KSx7dHJhbnNsYXRlWDpoLHRyYW5zbGF0ZVk6''@;'; put 'put ''Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKk04ZSxza2V3WDpNYXRoLmF0YW4oRCkqTThlLHNjYWxlWDp2LHNjYWxlWTpNfX1mdW5jdGlvbiBFOGUoYyxsLGEsZCl7ZnVuY3Rpb24gaChaKXtyZXR1cm4gWi5sZW5ndGg/Wi5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKFoscmUpe3ZhciBj''@;'; put 'put ''ZT1bXSxiZT1bXTtyZXR1cm4gWj1jKFopLHJlPWMocmUpLGZ1bmN0aW9uIGYoWixyZSxjZSxiZSxFZSxCZSl7aWYoWiE9PWNlfHxyZSE9PWJlKXt2YXIgcWU9RWUucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxsLG51bGwsYSk7QmUucHVzaCh7aTpxZS00LHg6bDQoWixjZSl9LHtpOnFlLTIseDps''@;'; put 'put ''NChyZSxiZSl9KX1lbHNlKGNlfHxiZSkmJkVlLnB1c2goInRyYW5zbGF0ZSgiK2NlK2wrYmUrYSl9KFoudHJhbnNsYXRlWCxaLnRyYW5zbGF0ZVkscmUudHJhbnNsYXRlWCxyZS50cmFuc2xhdGVZLGNlLGJlKSxmdW5jdGlvbiB2KFoscmUsY2UsYmUpe1ohPT1yZT8oWi1yZT4xODA/cmUrPTM2''@;'; put 'put ''MDpyZS1aPjE4MCYmKForPTM2MCksYmUucHVzaCh7aTpjZS5wdXNoKGgoY2UpKyJyb3RhdGUoIixudWxsLGQpLTIseDpsNChaLHJlKX0pKTpyZSYmY2UucHVzaChoKGNlKSsicm90YXRlKCIrcmUrZCl9KFoucm90YXRlLHJlLnJvdGF0ZSxjZSxiZSksZnVuY3Rpb24gTShaLHJlLGNlLGJlKXta''@;'; put 'put ''IT09cmU/YmUucHVzaCh7aTpjZS5wdXNoKGgoY2UpKyJza2V3WCgiLG51bGwsZCktMix4Omw0KFoscmUpfSk6cmUmJmNlLnB1c2goaChjZSkrInNrZXdYKCIrcmUrZCl9KFouc2tld1gscmUuc2tld1gsY2UsYmUpLGZ1bmN0aW9uIEQoWixyZSxjZSxiZSxFZSxCZSl7aWYoWiE9PWNlfHxyZSE9''@;'; put 'put ''PWJlKXt2YXIgcWU9RWUucHVzaChoKEVlKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7QmUucHVzaCh7aTpxZS00LHg6bDQoWixjZSl9LHtpOnFlLTIseDpsNChyZSxiZSl9KX1lbHNlKDEhPT1jZXx8MSE9PWJlKSYmRWUucHVzaChoKEVlKSsic2NhbGUoIitjZSsiLCIrYmUrIikiKX0o''@;'; put 'put ''Wi5zY2FsZVgsWi5zY2FsZVkscmUuc2NhbGVYLHJlLnNjYWxlWSxjZSxiZSksWj1yZT1udWxsLGZ1bmN0aW9uKEVlKXtmb3IodmFyIHJ0LEJlPS0xLHFlPWJlLmxlbmd0aDsrK0JlPHFlOyljZVsocnQ9YmVbQmVdKS5pXT1ydC54KEVlKTtyZXR1cm4gY2Uuam9pbigiIil9fX12YXIgbVN0PUU4''@;'; put 'put ''ZShmdW5jdGlvbiBwU3QoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P3Z0ZTp4OGUobC5hLGwuYixsLmMsbC5kLGwuZSxsLmYpfSwicHgsICIsInB4KSIsImRlZyki''@;'; put 'put ''KSxUOGU9RThlKGZ1bmN0aW9uIGdTdChjKXtyZXR1cm4gbnVsbCE9YyYmKFNOfHwoU049ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksU04uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGMpLGM9U04udHJhbnNmb3JtLmJhc2VWYWwu''@;'; put 'put ''Y29uc29saWRhdGUoKSk/eDhlKChjPWMubWF0cml4KS5hLGMuYixjLmMsYy5kLGMuZSxjLmYpOnZ0ZX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiB2U3QoYyxsKXt2YXIgYSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPXM0KHRoaXMsYyksZj1oLnR3ZWVuO2lmKGYhPT1hKWZvcih2YXIgdj0w''@;'; put 'put ''LE09KGQ9YT1mKS5sZW5ndGg7djxNOysrdilpZihkW3ZdLm5hbWU9PT1sKXsoZD1kLnNsaWNlKCkpLnNwbGljZSh2LDEpO2JyZWFrfWgudHdlZW49ZH19ZnVuY3Rpb24gYlN0KGMsbCxhKXt2YXIgZCxoO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgZj1zNCh0aGlzLGMpLHY9Zi50d2VlbjtpZih2IT09ZCl7aD0oZD12KS5zbGljZSgpO2Zvcih2YXIgTT17bmFtZTpsLHZhbHVlOmF9LEQ9MCxaPWgubGVuZ3RoO0Q8WjsrK0QpaWYoaFtEXS5uYW1lPT09bCl7aFtEXT1NO2JyZWFrfUQ9PT1aJiZoLnB1c2goTSl9Zi50d2Vl''@;'; put 'put ''bj1ofX1mdW5jdGlvbiBidGUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1zNCh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIEMzKGgsZCkudmFsdWVb''@;'; put 'put ''bF19fWZ1bmN0aW9uIHl0ZShjLGwsYSl7Yy5wcm90b3R5cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0cnVjdG9yPWN9ZnVuY3Rpb24gQThlKGMsbCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtkXT1sW2RdO3JldHVybiBhfWZ1bmN0aW9uIGtBKCl7''@;'; put 'put ''fXZhciBNTj0xLy43LEF3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixJQT0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsYzQ9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixfU3Q9L14jKFswLTlhLWZd''@;'; put 'put ''ezMsOH0pJC8sd1N0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke0F3fSwke0F3fSwke0F3fVxcKSRgKSxDU3Q9bmV3IFJlZ0V4cChgXnJnYlxcKCR7YzR9LCR7YzR9LCR7YzR9XFwpJGApLFNTdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7QXd9LCR7QXd9LCR7QXd9LCR7SUF9XFwpJGApLE1TdD1uZXcg''@;'; put 'put ''UmVnRXhwKGBecmdiYVxcKCR7YzR9LCR7YzR9LCR7YzR9LCR7SUF9XFwpJGApLHhTdD1uZXcgUmVnRXhwKGBeaHNsXFwoJHtJQX0sJHtjNH0sJHtjNH1cXCkkYCksRVN0PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtJQX0sJHtjNH0sJHtjNH0sJHtJQX1cXCkkYCksazhlPXthbGljZWJsdWU6MTU3''@;'; put 'put ''OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixi''@;'; put 'put ''cm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lh''@;'; put 'put ''bjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46''@;'; put 'put ''NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMx''@;'; put 'put ''MDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2''@;'; put 'put ''Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3Jl''@;'; put 'put ''eTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5''@;'; put 'put ''NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4''@;'; put 'put ''MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHll''@;'; put 'put ''bGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6''@;'; put 'put ''OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4''@;'; put 'put ''NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMx''@;'; put 'put ''NTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06''@;'; put 'put ''MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2''@;'; put 'put ''MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdn''@;'; put 'put ''cmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjEx''@;'; put 'put ''OTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIEQ4ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEk4ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFg5KGMpe3ZhciBsLGE7cmV0dXJuIGM9''@;'; put 'put ''KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPV9TdC5leGVjKGMpKT8oYT1sWzFdLmxlbmd0aCxsPXBhcnNlSW50KGxbMV0sMTYpLDY9PT1hP1I4ZShsKTozPT09YT9uZXcgUWQobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgxNSZsKTw8NHwxNSZsLDEpOjg9PT1hP3hOKGw+''@;'; put 'put ''PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZsKS8yNTUpOjQ9PT1hP3hOKGw+PjEyJjE1fGw+PjgmMjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9d1N0LmV4ZWMoYykpP25ldyBRZChsWzFdLGxbMl0sbFszXSwx''@;'; put 'put ''KToobD1DU3QuZXhlYyhjKSk/bmV3IFFkKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLDEpOihsPVNTdC5leGVjKGMpKT94TihsWzFdLGxbMl0sbFszXSxsWzRdKToobD1NU3QuZXhlYyhjKSk/eE4oMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAs''@;'; put 'put ''bFs0XSk6KGw9eFN0LmV4ZWMoYykpP1A4ZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLDEpOihsPUVTdC5leGVjKGMpKT9QOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCxsWzRdKTprOGUuaGFzT3duUHJvcGVydHkoYyk/UjhlKGs4ZVtjXSk6InRyYW5zcGFyZW50Ij09PWM/bmV3IFFkKE5hTixO''@;'; put 'put ''YU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gUjhlKGMpe3JldHVybiBuZXcgUWQoYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLDEpfWZ1bmN0aW9uIHhOKGMsbCxhLGQpe3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgUWQoYyxsLGEsZCl9ZnVuY3Rpb24gRU4oYyxsLGEsZCl7cmV0dXJuIDE9''@;'; put 'put ''PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIGtTdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIGtBfHwoYz1YOShjKSksYz9uZXcgUWQoKGM9Yy5yZ2IoKSkucixjLmcsYy5iLGMub3BhY2l0eSk6bmV3IFFkfShjKTpuZXcgUWQoYyxsLGEsZD8/MSl9ZnVuY3Rpb24gUWQoYyxsLGEsZCl7dGhp''@;'; put 'put ''cy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIEw4ZSgpe3JldHVybmAjJHtROSh0aGlzLnIpfSR7UTkodGhpcy5nKX0ke1E5KHRoaXMuYil9YH1mdW5jdGlvbiBPOGUoKXtjb25zdCBjPVROKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/InJn''@;'; put 'put ''YigiOiJyZ2JhKCJ9JHtKOSh0aGlzLnIpfSwgJHtKOSh0aGlzLmcpfSwgJHtKOSh0aGlzLmIpfSR7MT09PWM/IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIFROKGMpe3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxjKSl9ZnVuY3Rpb24gSjkoYyl7cmV0dXJuIE1hdGgu''@;'; put 'put ''bWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8fDApKX1mdW5jdGlvbiBROShjKXtyZXR1cm4oKGM9SjkoYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygxNil9ZnVuY3Rpb24gUDhlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1hPU5hTjphPD0wfHxhPj0xP2M9bD1OYU46bDw9MCYm''@;'; put 'put ''KGM9TmFOKSxuZXcgUzMoYyxsLGEsZCl9ZnVuY3Rpb24gRjhlKGMpe2lmKGMgaW5zdGFuY2VvZiBTMylyZXR1cm4gbmV3IFMzKGMuaCxjLnMsYy5sLGMub3BhY2l0eSk7aWYoYyBpbnN0YW5jZW9mIGtBfHwoYz1YOShjKSksIWMpcmV0dXJuIG5ldyBTMztpZihjIGluc3RhbmNlb2YgUzMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1jLmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgubWluKGwsYSxkKSxmPU1hdGgubWF4KGwsYSxkKSx2PU5hTixNPWYtaCxEPShmK2gpLzI7cmV0dXJuIE0/KHY9bD09PWY/KGEtZCkvTSs2KihhPGQpOmE9PT1mPyhkLWwpL00rMjoobC1hKS9N''@;'; put 'put ''KzQsTS89RDwuNT9mK2g6Mi1mLWgsdio9NjApOk09RD4wJiZEPDE/MDp2LG5ldyBTMyh2LE0sRCxjLm9wYWNpdHkpfWZ1bmN0aW9uIFMzKGMsbCxhLGQpe3RoaXMuaD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBIOGUoYyl7cmV0dXJuKGM9KGN8fDAp''@;'; put 'put ''JTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIEFOKGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsY3x8MCkpfWZ1bmN0aW9uIF90ZShjLGwsYSl7cmV0dXJuIDI1NSooYzw2MD9sKyhhLWwpKmMvNjA6YzwxODA/YTpjPDI0MD9sKyhhLWwpKigyNDAtYykvNjA6bCl9ZnVuY3Rpb24gTjhl''@;'; put 'put ''KGMsbCxhLGQsaCl7dmFyIGY9YypjLHY9ZipjO3JldHVybigoMS0zKmMrMypmLXYpKmwrKDQtNipmKzMqdikqYSsoMSszKmMrMypmLTMqdikqZCt2KmgpLzZ9eXRlKGtBLFg5LHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3Bs''@;'; put 'put ''YXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkQ4ZSxmb3JtYXRIZXg6RDhlLGZvcm1hdEhleDg6ZnVuY3Rpb24gVFN0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gQVN0KCl7cmV0dXJuIEY4ZSh0aGlzKS5m''@;'; put 'put ''b3JtYXRIc2woKX0sZm9ybWF0UmdiOkk4ZSx0b1N0cmluZzpJOGV9KSx5dGUoUWQsRU4sQThlKGtBLHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP01OOk1hdGgucG93KE1OLGMpLG5ldyBRZCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7''@;'; put 'put ''cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgUWQodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBRZChKOSh0aGlzLnIpLEo5KHRoaXMuZyksSjkodGhpcy5iKSxUTih0aGlz''@;'; put 'put ''Lm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okw4ZSxmb3JtYXRIZXg6''@;'; put 'put ''TDhlLGZvcm1hdEhleDg6ZnVuY3Rpb24gRFN0KCl7cmV0dXJuYCMke1E5KHRoaXMucil9JHtROSh0aGlzLmcpfSR7UTkodGhpcy5iKX0ke1E5KDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpPOGUsdG9TdHJpbmc6TzhlfSkpLHl0ZShTMyxm''@;'; put 'put ''dW5jdGlvbiBJU3QoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0Y4ZShjKTpuZXcgUzMoYyxsLGEsZD8/MSl9LEE4ZShrQSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9NTjpNYXRoLnBvdyhNTixjKSxuZXcgUzModGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlz''@;'; put 'put ''Lm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgUzModGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgYz10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGw9aXNOYU4oYyl8fGlzTmFOKHRoaXMucyk/''@;'; put 'put ''MDp0aGlzLnMsYT10aGlzLmwsZD1hKyhhPC41P2E6MS1hKSpsLGg9MiphLWQ7cmV0dXJuIG5ldyBRZChfdGUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksX3RlKGMsaCxkKSxfdGUoYzwxMjA/YysyNDA6Yy0xMjAsaCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgUzMoSDhl''@;'; put 'put ''KHRoaXMuaCksQU4odGhpcy5zKSxBTih0aGlzLmwpLFROKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0s''@;'; put 'put ''Zm9ybWF0SHNsKCl7Y29uc3QgYz1UTih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJoc2woIjoiaHNsYSgifSR7SDhlKHRoaXMuaCl9LCAkezEwMCpBTih0aGlzLnMpfSUsICR7MTAwKkFOKHRoaXMubCl9JSR7MT09PWM/IikiOmAsICR7Y30pYH1gfX0pKTtjb25zdCB3dGU9Yz0+KCk9''@;'; put 'put ''PmM7ZnVuY3Rpb24gQjhlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIFY4ZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOnd0ZShpc05hTihjKT9sOmMpfWNvbnN0IGtOPWZ1bmN0aW9uIGMobCl7dmFyIGE9ZnVuY3Rpb24gUFN0KGMpe3JldHVy''@;'; put 'put ''biAxPT0oYz0rYyk/QjhlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9mdW5jdGlvbiBPU3QoYyxsLGEpe3JldHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBvdyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEpfX0obCxhLGMpOnd0ZShpc05hTihs''@;'; put 'put ''KT9hOmwpfX0obCk7ZnVuY3Rpb24gZChoLGYpe3ZhciB2PWEoKGg9RU4oaCkpLnIsKGY9RU4oZikpLnIpLE09YShoLmcsZi5nKSxEPWEoaC5iLGYuYiksWj1COGUoaC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXtyZXR1cm4gaC5yPXYocmUpLGguZz1NKHJlKSxoLmI9''@;'; put 'put ''RChyZSksaC5vcGFjaXR5PVoocmUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24gajhlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgdixNLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKHY9MDt2PGE7Kyt2''@;'; put 'put ''KU09RU4obFt2XSksZFt2XT1NLnJ8fDAsaFt2XT1NLmd8fDAsZlt2XT1NLmJ8fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1jKGYpLE0ub3BhY2l0eT0xLGZ1bmN0aW9uKEQpe3JldHVybiBNLnI9ZChEKSxNLmc9aChEKSxNLmI9ZihEKSxNKyIifX19ajhlKGZ1bmN0aW9uIFJTdChjKXt2YXIg''@;'; put 'put ''bD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBOOGUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSksajhlKGZ1''@;'; put 'put ''bmN0aW9uIExTdChjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBOOGUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgQ3RlPS9bLStd''@;'; put 'put ''Pyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxTdGU9bmV3IFJlZ0V4cChDdGUuc291cmNlLCJnIik7ZnVuY3Rpb24gejhlKGMsbCl7dmFyIGQsaCxmLGE9Q3RlLmxhc3RJbmRleD1TdGUubGFzdEluZGV4PTAsdj0tMSxNPVtdLEQ9W107Zm9yKGMrPSIiLGwrPSIiOyhk''@;'; put 'put ''PUN0ZS5leGVjKGMpKSYmKGg9U3RlLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYoZj1sLnNsaWNlKGEsZiksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSwoZD1kWzBdKT09PShoPWhbMF0pP01bdl0/TVt2XSs9aDpNWysrdl09aDooTVsrK3ZdPW51bGwsRC5wdXNoKHtpOnYseDpsNChkLGgpfSkp''@;'; put 'put ''LGE9U3RlLmxhc3RJbmRleDtyZXR1cm4gYTxsLmxlbmd0aCYmKGY9bC5zbGljZShhKSxNW3ZdP01bdl0rPWY6TVsrK3ZdPWYpLE0ubGVuZ3RoPDI/RFswXT9mdW5jdGlvbiBIU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpKyIifX0oRFswXS54KTpmdW5jdGlvbiBGU3QoYyl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShsKToobD1ELmxlbmd0aCxmdW5jdGlvbihaKXtmb3IodmFyIGNlLHJlPTA7cmU8bDsrK3JlKU1bKGNlPURbcmVdKS5pXT1jZS54KFopO3JldHVybiBNLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVThlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgbD9sNDpsIGluc3RhbmNlb2YgWDk/a046KGE9WDkobCkpPyhsPWEsa04pOno4ZSkoYyxsKX1mdW5jdGlvbiBOU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIFZTdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIEJTdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBqU3QoYyxs''@;'; put 'put ''LGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIHpTdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e3ZhciB2LEQsTT1hKHRoaXMpO3JldHVybiBudWxsPT1NP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6KHY9dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBVU3QoYyxsLGEpe3ZhciBkLGgs''@;'; put 'put ''ZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKToodj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09''@;'; put 'put ''PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBHU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBZU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRy''@;'; put 'put ''aWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uICRTdChjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1''@;'; put 'put ''bmN0aW9uIFdTdChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBxU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXttdGUodGhpcyxjKS5kZWxheT0rbC5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFhTdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7bXRlKHRoaXMsYykuZGVsYXk9bH19ZnVuY3Rpb24gUVN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7czQodGhpcyxjKS5kdXJhdGlvbj0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0''@;'; put 'put ''aW9uIGVNdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7czQodGhpcyxjKS5kdXJhdGlvbj1sfX12YXIgZ010PUs5LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBaOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19dmFyIExNdD0w''@;'; put 'put ''O2Z1bmN0aW9uIHU0KGMsbCxhLGQpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bCx0aGlzLl9uYW1lPWEsdGhpcy5faWQ9ZH1mdW5jdGlvbiBNdGUoYyl7cmV0dXJuIEs5KCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBXOGUoKXtyZXR1cm4rK0xNdH12YXIgSjU9SzkucHJvdG90eXBl''@;'; put 'put ''O3U0LnByb3RvdHlwZT1NdGUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1NCxzZWxlY3Q6ZnVuY3Rpb24gZk10KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9YXRlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1u''@;'; put 'put ''ZXcgQXJyYXkoaCksdj0wO3Y8aDsrK3YpZm9yKHZhciByZSxjZSxNPWRbdl0sRD1NLmxlbmd0aCxaPWZbdl09bmV3IEFycmF5KEQpLGJlPTA7YmU8RDsrK2JlKShyZT1NW2JlXSkmJihjZT1jLmNhbGwocmUscmUuX19kYXRhX18sYmUsTSkpJiYoIl9fZGF0YV9fImluIHJlJiYoY2UuX19kYXRh''@;'; put 'put ''X189cmUuX19kYXRhX18pLFpbYmVdPWNlLHdOKFpbYmVdLGwsYSxiZSxaLEMzKHJlLGEpKSk7cmV0dXJuIG5ldyB1NChmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHBNdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMm''@;'; put 'put ''JihjPXI4ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9W10sdj1bXSxNPTA7TTxoOysrTSlmb3IodmFyIHJlLEQ9ZFtNXSxaPUQubGVuZ3RoLGNlPTA7Y2U8WjsrK2NlKWlmKHJlPURbY2VdKXtmb3IodmFyIEVlLGJlPWMuY2FsbChyZSxyZS5fX2RhdGFfXyxjZSxE''@;'; put 'put ''KSxCZT1DMyhyZSxhKSxxZT0wLHJ0PWJlLmxlbmd0aDtxZTxydDsrK3FlKShFZT1iZVtxZV0pJiZ3TihFZSxsLGEscWUsYmUsQmUpO2YucHVzaChiZSksdi5wdXNoKHJlKX1yZXR1cm4gbmV3IHU0KGYsdixsLGEpfSxzZWxlY3RDaGlsZDpKNS5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpK''@;'; put 'put ''NS5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24gb010KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1pOGUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIEQsZj1sW2hdLHY9Zi5sZW5ndGgsTT1k''@;'; put 'put ''W2hdPVtdLFo9MDtaPHY7KytaKShEPWZbWl0pJiZjLmNhbGwoRCxELl9fZGF0YV9fLFosZikmJk0ucHVzaChEKTtyZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gc010KGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5sZW5ndGgpLHY9bmV3IEFycmF5KGQpLE09MDtNPGY7KytNKWZvcih2YXIgYmUsRD1sW01dLFo9YVtNXSxyZT1ELmxlbmd0aCxjZT12W01dPW5ldyBBcnJheShyZSks''@;'; put 'put ''RWU9MDtFZTxyZTsrK0VlKShiZT1EW0VlXXx8WltFZV0pJiYoY2VbRWVdPWJlKTtmb3IoO008ZDsrK00pdltNXT1sW01dO3JldHVybiBuZXcgdTQodix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gbU10KCl7cmV0dXJuIG5ldyBnTXQodGhp''@;'; put 'put ''cy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIElNdCgpe2Zvcih2YXIgYz10aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1XOGUoKSxkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxaPTA7WjxN''@;'; put 'put ''OysrWilpZihEPXZbWl0pe3ZhciByZT1DMyhELGwpO3dOKEQsYyxhLFosdix7dGltZTpyZS50aW1lK3JlLmRlbGF5K3JlLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cmUuZHVyYXRpb24sZWFzZTpyZS5lYXNlfSl9cmV0dXJuIG5ldyB1NChkLHRoaXMuX3BhcmVudHMsYyxhKX0sY2FsbDpK''@;'; put 'put ''NS5jYWxsLG5vZGVzOko1Lm5vZGVzLG5vZGU6SjUubm9kZSxzaXplOko1LnNpemUsZW1wdHk6SjUuZW1wdHksZWFjaDpKNS5lYWNoLG9uOmZ1bmN0aW9uIHVNdChjLGwpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/QzModGhpcy5ub2RlKCksYSkub24ub24oYyk6''@;'; put 'put ''dGhpcy5lYWNoKGZ1bmN0aW9uIGNNdChjLGwsYSl7dmFyIGQsaCxmPWZ1bmN0aW9uIGxNdChjKXtyZXR1cm4oYysiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGwpe3ZhciBhPWwuaW5kZXhPZigiLiIpO3JldHVybiBhPj0wJiYobD1sLnNsaWNlKDAsYSkpLCFsfHwi''@;'; put 'put ''c3RhcnQiPT09bH0pfShsKT9tdGU6czQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9Zih0aGlzLGMpLE09di5vbjtNIT09ZCYmKGg9KGQ9TSkuY29weSgpKS5vbihsLGEpLHYub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gWlN0KGMsbCl7dmFyIGE9aE4oYyksZD0idHJhbnNmb3JtIj09''@;'; put 'put ''PWE/VDhlOlU4ZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD9VU3Q6elN0KShhLGQsYnRlKHRoaXMsImF0dHIuIitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP1ZTdDpOU3QpKGEpOihhLmxvY2FsP2pTdDpCU3QpKGEsZCxsKSl9LGF0dHJUd2Vl''@;'; put 'put ''bjpmdW5jdGlvbiBLU3QoYyxsKXt2YXIgYT0iYXR0ci4iK2M7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yO3ZhciBkPWhOKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGQubG9jYWw/R1N0OiRTdCkoZCxsKSl9LHN0eWxlOmZ1bmN0aW9uIHdNdChjLGwsYSl7dmFyIGQ9InRyYW5zZm9ybSI9PShjKz0iIik/bVN0OlU4ZTtyZXR1cm4gbnVsbD09bD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiB2''@;'; put 'put ''TXQoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9RXcodGhpcyxjKSx2PSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLEV3KHRoaXMsYykpO3JldHVybiBmPT09dj9udWxsOmY9PT1hJiZ2PT09ZD9oOmg9bChhPWYsZD12KX19KGMsZCkpLm9uKCJlbmQuc3R5bGUu''@;'; put 'put ''IitjLFo4ZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24geU10KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9RXcodGhpcyxjKSxNPWEodGhpcyksRD1NKyIiO3JldHVybiBudWxsPT1NJiYodGhpcy5zdHlsZS5yZW1v''@;'; put 'put ''dmVQcm9wZXJ0eShjKSxEPU09RXcodGhpcyxjKSksdj09PUQ/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX0oYyxkLGJ0ZSh0aGlzLCJzdHlsZS4iK2MsbCkpKS5lYWNoKGZ1bmN0aW9uIF9NdChjLGwpe3ZhciBhLGQsaCxNLGY9InN0eWxlLiIrbCx2PSJlbmQuIitmO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3ZhciBEPXM0KHRoaXMsYyksWj1ELm9uLHJlPW51bGw9PUQudmFsdWVbZl0/TXx8KE09WjhlKGwpKTp2b2lkIDA7KFohPT1hfHxoIT09cmUpJiYoZD0oYT1aKS5jb3B5KCkpLm9uKHYsaD1yZSksRC5vbj1kfX0odGhpcy5faWQsYykpOnRoaXMuc3R5bGVUd2Vlbihj''@;'; put 'put ''LGZ1bmN0aW9uIGJNdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9RXcodGhpcyxjKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fShjLGQsbCksYSkub24oImVuZC5zdHlsZS4iK2MsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24g''@;'; put 'put ''TU10KGMsbCxhKXt2YXIgZD0ic3R5bGUuIisoYys9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZD10aGlzLnR3ZWVuKGQpKSYmZC5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihkLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cjtyZXR1cm4gdGhpcy50d2VlbihkLGZ1bmN0aW9uIFNNdChjLGwsYSl7dmFyIGQsaDtmdW5jdGlvbiBmKCl7dmFyIHY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1oJiYoZD0oaD12KSYmZnVuY3Rpb24gQ010KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHls''@;'; put 'put ''ZS5zZXRQcm9wZXJ0eShjLGwuY2FsbCh0aGlzLGQpLGEpfX0oYyx2LGEpKSxkfXJldHVybiBmLl92YWx1ZT1sLGZ9KGMsbCxhPz8iIikpfSx0ZXh0OmZ1bmN0aW9uIFRNdChjKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gRU10KGMpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3ZhciBsPWModGhpcyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19KGJ0ZSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24geE10KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rp''@;'; put 'put ''b24gRE10KGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRo''@;'; put 'put ''aXMudHdlZW4obCxmdW5jdGlvbiBrTXQoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gQU10KGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlz''@;'; put 'put ''LGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gaE10KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIGRNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190''@;'; put 'put ''cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIHlTdChjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciB2LGQ9QzModGhpcy5ub2RlKCksYSkudHdl''@;'; put 'put ''ZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigodj1kW2hdKS5uYW1lPT09YylyZXR1cm4gdi52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP3ZTdDpiU3QpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIEpTdChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP3FTdDpYU3QpKGwsYykpOkMzKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiB0TXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYz9RU3Q6ZU10KShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiByTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIG5NdChjLGwpe2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtzNCh0aGlzLGMpLmVhc2U9bH19KGwsYykpOkMzKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIGFNdChjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJu''@;'; put 'put ''IHRoaXMuZWFjaChmdW5jdGlvbiBpTXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7czQodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiBS''@;'; put 'put ''TXQoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsdil7dmFyIE09e3ZhbHVlOnZ9LEQ9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgWj1zNCh0aGlzLGQpLHJlPVoub247''@;'; put 'put ''cmUhPT1jJiYoKGw9KGM9cmUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChNKSxsLl8uaW50ZXJydXB0LnB1c2goTSksbC5fLmVuZC5wdXNoKEQpKSxaLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOko1W1N5bWJvbC5pdGVyYXRvcl19O3ZhciBQTXQ9e3RpbWU6bnVsbCxk''@;'; put 'put ''ZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIE9NdChjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIEZNdChjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfUs5LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gZlN0KGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtDTih0aGlzLGMpfSl9LEs5LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9u''@;'; put 'put ''IEhNdChjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiB1ND8obD1jLl9pZCxjPWMuX25hbWUpOihsPVc4ZSgpLChhPVBNdCkudGltZT1kdGUoKSxjPW51bGw9PWM/bnVsbDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBELHY9ZFtmXSxN''@;'; put 'put ''PXYubGVuZ3RoLFo9MDtaPE07KytaKShEPXZbWl0pJiZ3TihELGMsbCxaLHYsYXx8Rk10KEQsbCkpO3JldHVybiBuZXcgdTQoZCx0aGlzLl9wYXJlbnRzLGMsbCl9O3ZhciBOTXQ9W251bGxdO2NvbnN0IHh0ZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBFdGUoYyl7Yy5wcmV2''@;'; put 'put ''ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gWThlKGMpe3JldHVybigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0IFdNdD1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsdil7dmFyIHJ0LHB0LE09ZlswXSxEPWZbMV0sWj1mWzJdLGJl''@;'; put 'put ''PXZbMl0sRWU9dlswXS1NLEJlPXZbMV0tRCxxZT1FZSpFZStCZSpCZTtpZihxZTwxZS0xMilwdD1NYXRoLmxvZyhiZS9aKS9sLHJ0PWZ1bmN0aW9uKE1uKXtyZXR1cm5bTStNbipFZSxEK01uKkJlLFoqTWF0aC5leHAobCpNbipwdCldfTtlbHNle3ZhciBkdD1NYXRoLnNxcnQocWUpLEp0PShi''@;'; put 'put ''ZSpiZS1aKlorZCpxZSkvKDIqWiphKmR0KSx2bj0oYmUqYmUtWipaLWQqcWUpLygyKmJlKmEqZHQpLENuPU1hdGgubG9nKE1hdGguc3FydChKdCpKdCsxKS1KdCksdG49TWF0aC5sb2coTWF0aC5zcXJ0KHZuKnZuKzEpLXZuKTtwdD0odG4tQ24pL2wscnQ9ZnVuY3Rpb24oTW4pe3ZhciB3cj1N''@;'; put 'put ''bipwdCxHcj1ZOGUoQ24pLG1yPVovKGEqZHQpKihHcipmdW5jdGlvbiBaTXQoYyl7cmV0dXJuKChjPU1hdGguZXhwKDIqYykpLTEpLyhjKzEpfShsKndyK0NuKS1mdW5jdGlvbiBVTXQoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKS0xL2MpLzJ9KENuKSk7cmV0dXJuW00rbXIqRWUsRCttcipC''@;'; put 'put ''ZSxaKkdyL1k4ZShsKndyK0NuKV19fXJldHVybiBydC5kdXJhdGlvbj0xZTMqcHQqbC9NYXRoLlNRUlQyLHJ0fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgdj1NYXRoLm1heCguMDAxLCtmKSxNPXYqdjtyZXR1cm4gYyh2LE0sTSpNKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9u''@;'; put 'put ''IGV2KGMsbCl7aWYoYz1mdW5jdGlvbiBZTXQoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1h''@;'; put 'put ''LmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRS''@;'; put 'put ''ZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IEROPWM9PigpPT5jO2Z1bmN0aW9uIEdNdChjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpk''@;'; put 'put ''LGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gUTUoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfVE1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UTUsc2Nh''@;'; put 'put ''bGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IFE1KHRoaXMuaypjLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgUTUodGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBs''@;'; put 'put ''eTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMp''@;'; put 'put ''e3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3Jl''@;'; put 'put ''dHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykp''@;'; put 'put ''fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgSU49bmV3IFE1KDEsMCwwKTtmdW5jdGlvbiBSTihjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIElO''@;'; put 'put ''O3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiBUdGUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBSQShjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiAkTXQoYyl7cmV0dXJuIShjLmN0cmxLZXkmJiJ3aGVl''@;'; put 'put ''bCIhPT1jLnR5cGV8fGMuYnV0dG9uKX1mdW5jdGlvbiBLTXQoKXt2YXIgYz10aGlzO3JldHVybiBjIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZHRWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1soYz1jLnZpZXdCb3guYmFzZVZhbCkueCxjLnldLFtjLngr''@;'; put 'put ''Yy53aWR0aCxjLnkrYy5oZWlnaHRdXTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gRzhlKCl7cmV0dXJuIHRoaXMuX196b29tfHxJTn1mdW5jdGlvbiBx''@;'; put 'put ''TXQoYyl7cmV0dXJuLWMuZGVsdGFZKigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6LjAwMikqKGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiBYTXQoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gSk10KGMs''@;'; put 'put ''bCxhKXt2YXIgZD1jLmludmVydFgobFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBdKS1hWzFdWzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1bMV0sdj1jLmludmVydFkobFsxXVsxXSktYVsxXVsxXTtyZXR1cm4gYy50cmFuc2xhdGUoaD5kPyhkK2gpLzI6TWF0aC5taW4o''@;'; put 'put ''MCxkKXx8TWF0aC5tYXgoMCxoKSx2PmY/KGYrdikvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgwLHYpKX1mdW5jdGlvbiAkOGUoYyl7dmFyIGw9e30sYT1jLm5vZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1l''@;'; put 'put ''bnQ9Yy50ZXh0KCkpLGwuYXR0cmlidXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52YWx1ZX12YXIgcmUsRD1jLm5vZGUoKS50cmFuc2Zvcm07aWYoRCYmMCE9''@;'; put 'put ''RC5iYXNlVmFsLm51bWJlck9mSXRlbXMpe3ZhciBaPUQuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OlouZSx5OlouZn0sbC5zY2FsZT1aLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5''@;'; put 'put ''fSksInBvbHlnb24iPT1hKXt2YXIgY2U9KHJlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc3BsaXQoIiwiKVswXX0pLGJlPXJlLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBs''@;'; put 'put ''eShudWxsLGNlKSxCZT1NYXRoLm1heC5hcHBseShudWxsLGNlKSxxZT1NYXRoLm1pbi5hcHBseShudWxsLGJlKSxydD1NYXRoLm1heC5hcHBseShudWxsLGJlKTtsLmJib3g9e3g6RWUseTpxZSx3aWR0aDpCZS1FZSxoZWlnaHQ6cnQtcWV9LGwuY2VudGVyPXt4OihFZStCZSkvMix5OihxZSty''@;'; put 'put ''dCkvMn19InBhdGgiPT1hJiYoKHJlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSxjZT1yZS5tYXAoZnVuY3Rpb24oR24pe3JldHVybitHbi5zcGxpdCgiLCIpWzBdfSksYmU9cmUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQoIiwiKVsxXX0pLEVlPU1hdGgu''@;'; put 'put ''bWluLmFwcGx5KG51bGwsY2UpLEJlPU1hdGgubWF4LmFwcGx5KG51bGwsY2UpLHFlPU1hdGgubWluLmFwcGx5KG51bGwsYmUpLHJ0PU1hdGgubWF4LmFwcGx5KG51bGwsYmUpLGwuYmJveD17eDpFZSx5OnFlLHdpZHRoOkJlLUVlLGhlaWdodDpydC1xZX0sbC5jZW50ZXI9e3g6KEVlK0JlKS8y''@;'; put 'put ''LHk6KHFlK3J0KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50''@;'; put 'put ''PWMudGV4dCgpKSxsfWZ1bmN0aW9uIHR2KGMpe3ZhciBsPSQ4ZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxjdGUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbigpe3ZhciBkPXR2KHdzKHRoaXMpKTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVzaChkKX0pLGx9ZnVuY3Rpb24g''@;'; put 'put ''QXRlKGMpe3JldHVybiIjdGV4dCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKToiI2NvbW1lbnQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVDb21tZW50KGMuY29tbWVudCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYy50''@;'; put 'put ''YWcpfWZ1bmN0aW9uIGt0ZShjKXt2YXIgbD1BdGUoYyksYT13cyhsKSxkPWMuYXR0cmlidXRlcztmb3IodmFyIGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgsZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gSzhlKGMsbCl7dmFyIGE9d3MoYy5ub2RlKCkucGFyZW50Tm9kZSksZD1rdGUobCks''@;'; put 'put ''aD1hLmluc2VydChmdW5jdGlvbigpe3JldHVybiBkfSxmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKX0pO3JldHVybiBjLnJlbW92ZSgpLGh9ZnVuY3Rpb24gRHRlKGMsbCl7IWZ1bmN0aW9uIGV4dChjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9''@;'; put 'put ''KX0oYyxsKSxjdGUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe0R0ZSh3cyh0aGlzKSxsLmNoaWxkcmVuW2hdKX0pfWZ1bmN0aW9uIExBKGMsbD0wKXt2YXIgYT13cyh0aGlzKSxoPWMuYXR0cmlidXRlcyxmPWEubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZilmb3IodmFy''@;'; put 'put ''IHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIE09Zlt2XSxEPU0ubmFtZTtpZigieG1sbnMiIT1ELnNwbGl0KCI6IilbMF0mJk0ubmFtZXNwYWNlVVJJKXt2YXIgWj1NLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0Q9WltaLmxlbmd0aC0xXSsiOiIrRH1EIGluIGh8fChoW0RdPW51bGwpfWZvcih2''@;'; put 'put ''YXIgY2Ugb2YgT2JqZWN0LmtleXMoaCkpYS5hdHRyKGNlLGhbY2VdKTtjLnRleHQmJmEudGV4dChjLnRleHQpLGZ1bmN0aW9uIHR4dChjLGwpe3ZhciBhPWMuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpLmNoaWxkTm9kZXN9KSxkPShhPWEuZGF0YShmdW5jdGlvbih2KXty''@;'; put 'put ''ZXR1cm4gdi5jaGlsZHJlbn0sZnVuY3Rpb24odil7cmV0dXJuIHYudGFnKyItIitsfSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHYpe3JldHVybiBBdGUodil9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBN''@;'; put 'put ''PXYudGFnO251bGw9PWZbTV0mJihmW01dPTApO3ZhciBEPWZbTV0rKztMQS5jYWxsKHRoaXMsdixEKX0pfShhLGwpfWZ1bmN0aW9uIHE4ZShjLGwpe3ZhciB2LGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2Zv''@;'; put 'put ''cih2PTA7djxkOysrdiloW3ZdPUxOKGNbdl0sbFt2XSk7Zm9yKDt2PGE7Kyt2KWZbdl09bFt2XTtyZXR1cm4gZnVuY3Rpb24oTSl7Zm9yKHY9MDt2PGQ7Kyt2KWZbdl09aFt2XShNKTtyZXR1cm4gZn19ZnVuY3Rpb24gbnh0KGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxm''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiByeHQoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxs''@;'; put 'put ''KWggaW4gYz9hW2hdPUxOKGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gaXh0KGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xp''@;'; put 'put ''Y2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIExOKGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT93dGUobCk6KCJudW1iZXIiPT09YT9sNDoic3Ry''@;'; put 'put ''aW5nIj09PWE/KGQ9WDkobCkpPyhsPWQsa04pOno4ZTpsIGluc3RhbmNlb2YgWDk/a046bCBpbnN0YW5jZW9mIERhdGU/bnh0OmZ1bmN0aW9uIGF4dChjKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5zdGFuY2VvZiBEYXRhVmlldyl9KGwpP2l4dDpBcnJheS5pc0FycmF5''@;'; put 'put ''KGwpP3E4ZToiZnVuY3Rpb24iIT10eXBlb2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgbC50b1N0cmluZ3x8aXNOYU4obCk/cnh0Omw0KShjLGwpfWZ1bmN0aW9uIFg4ZSgpe3ZhciBjPXRoaXMsZD13cyh0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoInN2ZyIp''@;'; put 'put ''KTtpZigwPT1kLnNpemUoKSlyZXR1cm4gdGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9ZnVuY3Rpb24gUU10KCl7dmFyIHJlLGNlLGJlLGM9JE10LGw9S010LGE9Sk10LGQ9cU10LGg9WE10LGY9WzAsMS8wXSx2PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLE09MjUwLEQ9V010LFo9''@;'; put 'put ''dXRlKCJzdGFydCIsInpvb20iLCJlbmQiKSxFZT01MDAsQmU9MTUwLHFlPTAscnQ9MTA7ZnVuY3Rpb24gcHQoT24pe09uLnByb3BlcnR5KCJfX3pvb20iLEc4ZSkub24oIndoZWVsLnpvb20iLHdyLHtwYXNzaXZlOiExfSkub24oIm1vdXNlZG93bi56b29tIixHcikub24oImRibGNsaWNrLnpv''@;'; put 'put ''b20iLG1yKS5maWx0ZXIoaCkub24oInRvdWNoc3RhcnQuem9vbSIsR24pLm9uKCJ0b3VjaG1vdmUuem9vbSIsYWkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLF9pKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0''@;'; put 'put ''aW9uIGR0KE9uLHpyKXtyZXR1cm4oenI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLHpyKSkpPT09T24uaz9PbjpuZXcgUTUoenIsT24ueCxPbi55KX1mdW5jdGlvbiBKdChPbix6cixKbil7dmFyIERyPXpyWzBdLUpuWzBdKk9uLmssJHI9enJbMV0tSm5bMV0qT24uaztyZXR1cm4gRHI9''@;'; put 'put ''PT1Pbi54JiYkcj09PU9uLnk/T246bmV3IFE1KE9uLmssRHIsJHIpfWZ1bmN0aW9uIHZuKE9uKXtyZXR1cm5bKCtPblswXVswXSsgK09uWzFdWzBdKS8yLCgrT25bMF1bMV0rICtPblsxXVsxXSkvMl19ZnVuY3Rpb24gQ24oT24senIsSm4sRHIpe09uLm9uKCJzdGFydC56b29tIixmdW5jdGlv''@;'; put 'put ''bigpe3RuKHRoaXMsYXJndW1lbnRzKS5ldmVudChEcikuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoRHIpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyICRyPXRoaXMsd2k9YXJndW1l''@;'; put 'put ''bnRzLGVhPXRuKCRyLHdpKS5ldmVudChEciksZmE9bC5hcHBseSgkcix3aSksdnQ9bnVsbD09Sm4/dm4oZmEpOiJmdW5jdGlvbiI9PXR5cGVvZiBKbj9Kbi5hcHBseSgkcix3aSk6Sm4sTnQ9TWF0aC5tYXgoZmFbMV1bMF0tZmFbMF1bMF0sZmFbMV1bMV0tZmFbMF1bMV0pLEZ0PSRyLl9fem9v''@;'; put 'put ''bSxIbj0iZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkoJHIsd2kpOnpyLHRyPUQoRnQuaW52ZXJ0KHZ0KS5jb25jYXQoTnQvRnQuayksSG4uaW52ZXJ0KHZ0KS5jb25jYXQoTnQvSG4uaykpO3JldHVybiBmdW5jdGlvbihhcil7aWYoMT09PWFyKWFyPUhuO2Vsc2V7dmFyIEhyPXRyKGFy''@;'; put 'put ''KSxxcj1OdC9IclsyXTthcj1uZXcgUTUocXIsdnRbMF0tSHJbMF0qcXIsdnRbMV0tSHJbMV0qcXIpfWVhLnpvb20obnVsbCxhcil9fSl9ZnVuY3Rpb24gdG4oT24senIsSm4pe3JldHVybiFKbiYmT24uX196b29taW5nfHxuZXcgTW4oT24senIpfWZ1bmN0aW9uIE1uKE9uLHpyKXt0aGlzLnRo''@;'; put 'put ''YXQ9T24sdGhpcy5hcmdzPXpyLHRoaXMuYWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWwuYXBwbHkoT24senIpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIHdyKE9uLC4uLnpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPXRuKHRoaXMsenIpLmV2''@;'; put 'put ''ZW50KE9uKSxEcj10aGlzLl9fem9vbSwkcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sRHIuaypNYXRoLnBvdygyLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHdpPWV2KE9uKTtpZihKbi53aGVlbCkoSm4ubW91c2VbMF1bMF0hPT13aVswXXx8Sm4ubW91c2VbMF1bMV0hPT13aVsx''@;'; put 'put ''XSkmJihKbi5tb3VzZVsxXT1Eci5pbnZlcnQoSm4ubW91c2VbMF09d2kpKSxjbGVhclRpbWVvdXQoSm4ud2hlZWwpO2Vsc2V7aWYoRHIuaz09PSRyKXJldHVybjtKbi5tb3VzZT1bd2ksRHIuaW52ZXJ0KHdpKV0sQ04odGhpcyksSm4uc3RhcnQoKX1SQShPbiksSm4ud2hlZWw9c2V0VGltZW91''@;'; put 'put ''dChmdW5jdGlvbiBlYSgpe0puLndoZWVsPW51bGwsSm4uZW5kKCl9LEJlKSxKbi56b29tKCJtb3VzZSIsYShKdChkdChEciwkciksSm4ubW91c2VbMF0sSm4ubW91c2VbMV0pLEpuLmV4dGVudCx2KSl9fWZ1bmN0aW9uIEdyKE9uLC4uLnpyKXtpZighYmUmJmMuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpKXt2YXIgSm49T24uY3VycmVudFRhcmdldCxEcj10bih0aGlzLHpyLCEwKS5ldmVudChPbiksJHI9d3MoT24udmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbiB2dChGdCl7aWYoUkEoRnQpLCFEci5tb3ZlZCl7dmFyIEhuPUZ0LmNsaWVudFgtZWEsdHI9RnQuY2xpZW50WS1m''@;'; put 'put ''YTtEci5tb3ZlZD1IbipIbit0cip0cj5xZX1Eci5ldmVudChGdCkuem9vbSgibW91c2UiLGEoSnQoRHIudGhhdC5fX3pvb20sRHIubW91c2VbMF09ZXYoRnQsSm4pLERyLm1vdXNlWzFdKSxEci5leHRlbnQsdikpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24gTnQoRnQpeyRyLm9u''@;'; put 'put ''KCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLGZ1bmN0aW9uIGpNdChjLGwpe3ZhciBhPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGQ9d3MoYykub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtsJiYoZC5vbigiY2xpY2suZHJhZyIsRXRlLHh0ZSksc2V0VGltZW91dChm''@;'; put 'put ''dW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gYT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUgYS5fX25vc2VsZWN0KX0oRnQudmlldyxEci5tb3ZlZCks''@;'; put 'put ''UkEoRnQpLERyLmV2ZW50KEZ0KS5lbmQoKX0sITApLHdpPWV2KE9uLEpuKSxlYT1Pbi5jbGllbnRYLGZhPU9uLmNsaWVudFk7KGZ1bmN0aW9uIEJNdChjKXt2YXIgbD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsRXRlLHh0ZSk7Im9uc2Vs''@;'; put 'put ''ZWN0c3RhcnQiaW4gbD9hLm9uKCJzZWxlY3RzdGFydC5kcmFnIixFdGUseHRlKToobC5fX25vc2VsZWN0PWwuc3R5bGUuTW96VXNlclNlbGVjdCxsLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0pKE9uLnZpZXcpLFR0ZShPbiksRHIubW91c2U9W3dpLHRoaXMuX196b29tLmludmVydCh3''@;'; put 'put ''aSldLENOKHRoaXMpLERyLnN0YXJ0KCl9fWZ1bmN0aW9uIG1yKE9uLC4uLnpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPXRoaXMuX196b29tLERyPWV2KE9uLmNoYW5nZWRUb3VjaGVzP09uLmNoYW5nZWRUb3VjaGVzWzBdOk9uLHRoaXMpLCRyPUpuLmludmVydChEciks''@;'; put 'put ''ZWE9YShKdChkdChKbixKbi5rKihPbi5zaGlmdEtleT8uNToyKSksRHIsJHIpLGwuYXBwbHkodGhpcyx6ciksdik7UkEoT24pLE0+MD93cyh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTSkuY2FsbChDbixlYSxEcixPbik6d3ModGhpcykuY2FsbChwdC50cmFuc2Zvcm0sZWEsRHIsT24p''@;'; put 'put ''fX1mdW5jdGlvbiBHbihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB3aSxlYSxmYSx2dCxKbj1Pbi50b3VjaGVzLERyPUpuLmxlbmd0aCwkcj10bih0aGlzLHpyLE9uLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PURyKS5ldmVudChPbik7Zm9yKFR0ZShPbiksZWE9''@;'; put 'put ''MDtlYTxEcjsrK2VhKXZ0PVt2dD1ldihmYT1KbltlYV0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KHZ0KSxmYS5pZGVudGlmaWVyXSwkci50b3VjaDA/ISRyLnRvdWNoMSYmJHIudG91Y2gwWzJdIT09dnRbMl0mJigkci50b3VjaDE9dnQsJHIudGFwcz0wKTooJHIudG91Y2gwPXZ0LHdpPSEw''@;'; put 'put ''LCRyLnRhcHM9MSshIXJlKTtyZSYmKHJlPWNsZWFyVGltZW91dChyZSkpLHdpJiYoJHIudGFwczwyJiYoY2U9dnRbMF0scmU9c2V0VGltZW91dChmdW5jdGlvbigpe3JlPW51bGx9LEVlKSksQ04odGhpcyksJHIuc3RhcnQoKSl9fWZ1bmN0aW9uIGFpKE9uLC4uLnpyKXtpZih0aGlzLl9fem9v''@;'; put 'put ''bWluZyl7dmFyIHdpLGVhLGZhLHZ0LEpuPXRuKHRoaXMsenIpLmV2ZW50KE9uKSxEcj1Pbi5jaGFuZ2VkVG91Y2hlcywkcj1Eci5sZW5ndGg7Zm9yKFJBKE9uKSx3aT0wO3dpPCRyOysrd2kpZmE9ZXYoZWE9RHJbd2ldLHRoaXMpLEpuLnRvdWNoMCYmSm4udG91Y2gwWzJdPT09ZWEuaWRlbnRp''@;'; put 'put ''Zmllcj9Kbi50b3VjaDBbMF09ZmE6Sm4udG91Y2gxJiZKbi50b3VjaDFbMl09PT1lYS5pZGVudGlmaWVyJiYoSm4udG91Y2gxWzBdPWZhKTtpZihlYT1Kbi50aGF0Ll9fem9vbSxKbi50b3VjaDEpe3ZhciBOdD1Kbi50b3VjaDBbMF0sRnQ9Sm4udG91Y2gwWzFdLEhuPUpuLnRvdWNoMVswXSx0''@;'; put 'put ''cj1Kbi50b3VjaDFbMV0sYXI9KGFyPUhuWzBdLU50WzBdKSphcisoYXI9SG5bMV0tTnRbMV0pKmFyLEhyPShIcj10clswXS1GdFswXSkqSHIrKEhyPXRyWzFdLUZ0WzFdKSpIcjtlYT1kdChlYSxNYXRoLnNxcnQoYXIvSHIpKSxmYT1bKE50WzBdK0huWzBdKS8yLChOdFsxXStIblsxXSkvMl0s''@;'; put 'put ''dnQ9WyhGdFswXSt0clswXSkvMiwoRnRbMV0rdHJbMV0pLzJdfWVsc2V7aWYoIUpuLnRvdWNoMClyZXR1cm47ZmE9Sm4udG91Y2gwWzBdLHZ0PUpuLnRvdWNoMFsxXX1Kbi56b29tKCJ0b3VjaCIsYShKdChlYSxmYSx2dCksSm4uZXh0ZW50LHYpKX19ZnVuY3Rpb24gX2koT24sLi4uenIpe2lm''@;'; put 'put ''KHRoaXMuX196b29taW5nKXt2YXIgd2ksZWEsSm49dG4odGhpcyx6cikuZXZlbnQoT24pLERyPU9uLmNoYW5nZWRUb3VjaGVzLCRyPURyLmxlbmd0aDtmb3IoVHRlKE9uKSxiZSYmY2xlYXJUaW1lb3V0KGJlKSxiZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YmU9bnVsbH0sRWUpLHdpPTA7d2k8''@;'; put 'put ''JHI7Kyt3aSllYT1Eclt3aV0sSm4udG91Y2gwJiZKbi50b3VjaDBbMl09PT1lYS5pZGVudGlmaWVyP2RlbGV0ZSBKbi50b3VjaDA6Sm4udG91Y2gxJiZKbi50b3VjaDFbMl09PT1lYS5pZGVudGlmaWVyJiZkZWxldGUgSm4udG91Y2gxO2lmKEpuLnRvdWNoMSYmIUpuLnRvdWNoMCYmKEpuLnRv''@;'; put 'put ''dWNoMD1Kbi50b3VjaDEsZGVsZXRlIEpuLnRvdWNoMSksSm4udG91Y2gwKUpuLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoSm4udG91Y2gwWzBdKTtlbHNlIGlmKEpuLmVuZCgpLDI9PT1Kbi50YXBzJiYoZWE9ZXYoZWEsdGhpcyksTWF0aC5oeXBvdChjZVswXS1lYVswXSxjZVsxXS1l''@;'; put 'put ''YVsxXSk8cnQpKXt2YXIgZmE9d3ModGhpcykub24oImRibGNsaWNrLnpvb20iKTtmYSYmZmEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIHB0LnRyYW5zZm9ybT1mdW5jdGlvbihPbix6cixKbixEcil7dmFyICRyPU9uLnNlbGVjdGlvbj9Pbi5zZWxlY3Rpb24oKTpPbjskci5wcm9w''@;'; put 'put ''ZXJ0eSgiX196b29tIixHOGUpLE9uIT09JHI/Q24oT24senIsSm4sRHIpOiRyLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoRHIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50''@;'; put 'put ''cyk6enIpLmVuZCgpfSl9LHB0LnNjYWxlQnk9ZnVuY3Rpb24oT24senIsSm4sRHIpe3B0LnNjYWxlVG8oT24sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20uayooImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6cil9LEpuLERyKX0scHQuc2NhbGVU''@;'; put 'put ''bz1mdW5jdGlvbihPbix6cixKbixEcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7dmFyICRyPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdpPXRoaXMuX196b29tLGVhPW51bGw9PUpuP3ZuKCRyKToiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkodGhpcyxhcmd1bWVudHMpOkpu''@;'; put 'put ''LGZhPXdpLmludmVydChlYSksdnQ9ImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6cjtyZXR1cm4gYShKdChkdCh3aSx2dCksZWEsZmEpLCRyLHYpfSxKbixEcil9LHB0LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKE9uLHpyLEpuLERyKXtwdC50cmFuc2Zvcm0o''@;'; put 'put ''T24sZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6ciwiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkodGhpcyxhcmd1bWVudHMpOkpuKSxsLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKSx2KX0sbnVsbCxEcil9LHB0LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKE9uLHpyLEpuLERyLCRyKXtwdC50cmFuc2Zvcm0oT24sZnVuY3Rpb24oKXt2YXIgd2k9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZWE9dGhpcy5fX3pvb20sZmE9bnVsbD09RHI/dm4od2kpOiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBEcj9Eci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RHI7cmV0dXJuIGEoSU4udHJhbnNsYXRlKGZhWzBdLGZhWzFdKS5zY2FsZShlYS5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIHpyPy16ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXpyLCJmdW5jdGlvbiI9PXR5cGVvZiBK''@;'; put 'put ''bj8tSm4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1Kbiksd2ksdil9LERyLCRyKX0sTW4ucHJvdG90eXBlPXtldmVudDpmdW5jdGlvbihPbil7cmV0dXJuIE9uJiYodGhpcy5zb3VyY2VFdmVudD1PbiksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRo''@;'; put 'put ''aXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oT24senIpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09T24mJih0aGlzLm1vdXNlWzFdPXpyLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIh''@;'; put 'put ''PT1PbiYmKHRoaXMudG91Y2gwWzFdPXpyLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMVsxXT16ci5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPXpyLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVu''@;'; put 'put ''ZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihPbil7dmFyIHpyPXdzKHRoaXMudGhhdCkuZGF0dW0oKTtaLmNhbGwoT24sdGhpcy50aGF0LG5ldyBHTXQo''@;'; put 'put ''T24se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0OnB0LHR5cGU6T24sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6Wn0pLHpyKX19LHB0LndoZWVsRGVsdGE9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBPbj9PbjpETigrT24pLHB0KTpkfSxwdC5maWx0ZXI9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETighIU9uKSxwdCk6Y30scHQudG91Y2hhYmxlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oISFPbikscHQpOmh9LHB0LmV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOkROKFtbK09uWzBdWzBdLCtPblswXVsxXV0sWytPblsxXVswXSwrT25bMV1b''@;'; put 'put ''MV1dXSkscHQpOmx9LHB0LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZlswXT0rT25bMF0sZlsxXT0rT25bMV0scHQpOltmWzBdLGZbMV1dfSxwdC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2''@;'; put 'put ''WzBdWzBdPStPblswXVswXSx2WzFdWzBdPStPblsxXVswXSx2WzBdWzFdPStPblswXVsxXSx2WzFdWzFdPStPblsxXVsxXSxwdCk6W1t2WzBdWzBdLHZbMF1bMV1dLFt2WzFdWzBdLHZbMV1bMV1dXX0scHQuY29uc3RyYWluPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o''@;'; put 'put ''YT1PbixwdCk6YX0scHQuZHVyYXRpb249ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPStPbixwdCk6TX0scHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPU9uLHB0KTpEfSxwdC5vbj1mdW5jdGlvbigpe3ZhciBPbj1a''@;'; put 'put ''Lm9uLmFwcGx5KFosYXJndW1lbnRzKTtyZXR1cm4gT249PT1aP3B0Ok9ufSxwdC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocWU9KE9uPStPbikqT24scHQpOk1hdGguc3FydChxZSl9LHB0LnRhcERpc3RhbmNlPWZ1bmN0aW9uKE9uKXtyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aD8ocnQ9K09uLHB0KTpydH0scHR9KCkuc2NhbGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQpLnRyYW5zbGF0ZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQpLmludGVycG9sYXRlKExOKS5vbigiem9vbSIsZnVu''@;'; put 'put ''Y3Rpb24gbCh2KXt3cyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpLmF0dHIoInRyYW5zZm9ybSIsdi50cmFuc2Zvcm0pLGMuX2Rpc3BhdGNoLmNhbGwoInpvb20iLGMpfSk7dGhpcy5fem9vbUJlaGF2aW9yPWg7dmFyIGY9d3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKTtyZXR1''@;'; put 'put ''cm4gZC5jYWxsKGgpLHRoaXMuX2FjdGl2ZXx8UnRlLmNhbGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1STihkLm5vZGUoKSksdGhpc31mdW5jdGlvbiBJdGUoYyl7dmFyIGw9dGhpcy5fdHJhbnNsYXRpb24sYT10aGlzLl9zY2FsZSxkPWMuZGF0dW0oKS50cmFuc2xhdGlvbixo''@;'; put 'put ''PWMuZGF0dW0oKS5zY2FsZSxmPVJOKHRoaXMuX3pvb21TZWxlY3Rpb24ubm9kZSgpKTtyZXR1cm4gbCYmKGY9KGY9Zi5zY2FsZSgxL2EpKS50cmFuc2xhdGUoLWwueCwtbC55KSksKGY9Zi50cmFuc2xhdGUoZC54LGQueSkpLnNjYWxlKGgpfWZ1bmN0aW9uIFJ0ZShjKXt0aGlzLl96b29tQmVo''@;'; put 'put ''YXZpb3IudHJhbnNmb3JtKHRoaXMuX3pvb21TZWxlY3Rpb24sSXRlLmNhbGwodGhpcyxjKSksdGhpcy5fdHJhbnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1JTi50cmFuc2xhdGUoYy5kYXR1''@;'; put 'put ''bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gaHh0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gTE4oW2RbMF1bMF0sZFswXVsxXV0sW2RbMV1bMF0s''@;'; put 'put ''ZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgpe3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1mdW5jdGlvbiBKOGUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09Yy50YWcmJiJnIj09Yy5wYXJl''@;'; put 'put ''bnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIFE4ZShjKXtyZXR1cm4gYy5wYXJlbnQmJko4ZShjLnBhcmVudCl9ZnVuY3Rpb24gZTdlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWws''@;'; put 'put ''ZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLHY9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9bCxNPXRoaXMuX2F0dHJpYnV0ZXIsRD10aGlz''@;'; put 'put ''O3ZhciBjZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7dmFyIGJlPXRoaXMuX2pvYnM7aWYoRC5fYWN0aXZlKXJldHVybiBiZS5wdXNoKG51bGwpLHRoaXM7Y2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVuY3Rpb24oKXtELl9hY3RpdmU9''@;'; put 'put ''ITEsMCE9YmUubGVuZ3RoJiYoYmUuc2hpZnQoKSxELnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1sJiZjZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtELl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLEQpfSkub24oImVuZCIsZnVuY3Rpb24o''@;'; put 'put ''KXtELl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixEKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsRCksRC5fZGlzcGF0Y2guY2FsbCgiZW5kIixEKSxjJiZjLmNhbGwoRCl9KTt2YXIg''@;'; put 'put ''RWU9dGhpcy5fZGF0YSxCZT1jZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW0VlXSxmdW5jdGlvbihxZSl7cmV0dXJuIHFlLmtleX0pO3JldHVybiBCZT1CZS5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2UoQmUpLGZ1bmN0aW9uIHJlKHFlKXt2YXIgcnQ9d3ModGhpcyk7aWYoInN2ZyI9PXFl''@;'; put 'put ''LnRhZyl7dmFyIHB0PUQuX29wdGlvbnM7aWYobnVsbCE9cHQud2lkdGh8fG51bGwhPXB0LmhlaWdodCl7dmFyIGR0PXB0LndpZHRoLEp0PXB0LmhlaWdodDtudWxsPT1kdD9kdD00KnFlLmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOihydC5hdHRyKCJ3aWR0aCIsZHQpLHFl''@;'; put 'put ''LmF0dHJpYnV0ZXMud2lkdGg9ZHQpLG51bGw9PUp0P0p0PTQqcWUuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOihydC5hdHRyKCJoZWlnaHQiLEp0KSxxZS5hdHRyaWJ1dGVzLmhlaWdodD1KdCkscHQuZml0fHwocnQuYXR0cigidmlld0JveCIsYDAgMCAkezMqZHQvNC9w''@;'; put 'put ''dC5zY2FsZX0gJHszKkp0LzQvcHQuc2NhbGV9YCkscWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypKdC80L3B0LnNjYWxlfWApfTEhPXB0LnNjYWxlJiYocHQuZml0fHxudWxsPT1wdC53aWR0aCYmbnVsbD09cHQuaGVpZ2h0KSYmKGR0PXFlLmF0dHJp''@;'; put 'put ''YnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLEp0PXFlLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLHJ0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtkdC9wdC5zY2FsZX0gJHtKdC9wdC5zY2FsZX1gKSxxZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke2R0L3B0LnNjYWxlfSAk''@;'; put 'put ''e0p0L3B0LnNjYWxlfWApfU0mJnJ0LmVhY2goTSk7dmFyIHZuPXFlLnRhZyxDbj1xZS5hdHRyaWJ1dGVzLHRuPXJ0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKHRuKWZvcih2YXIgTW49MDtNbjx0bi5sZW5ndGg7TW4rKyl7dmFyIHdyPXRuW01uXSxHcj13ci5uYW1lO2lmKCJ4bWxucyIhPUdyLnNw''@;'; put 'put ''bGl0KCI6IilbMF0mJndyLm5hbWVzcGFjZVVSSSl7dmFyIG1yPXdyLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0dyPW1yW21yLmxlbmd0aC0xXSsiOiIrR3J9R3IgaW4gQ258fChDbltHcl09bnVsbCl9dmFyIGFpPSExLF9pPSExO2lmKGgmJmwpe2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5h''@;'; put 'put ''bWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJnFlLmFsdGVybmF0aXZlT2xkJiYoX2k9ITApLCgicG9seWdvbiI9PXZufHwiZWxsaXBzZSI9PXZuKSYmcWUuYWx0ZXJuYXRpdmVOZXcmJihhaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PXZuJiZxZS5hbHRl''@;'; put 'put ''cm5hdGl2ZU9sZCl7dmFyIE9uPSQ4ZShydCk7aWYoIWYpe3ZhciBKbj1Pbi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoRHI9cWUuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1KbiYmKGFpPSExLF9pPSExKX19aWYoX2kpe3ZhciBlYT1LOGUocnQs''@;'; put 'put ''cWUuYWx0ZXJuYXRpdmVPbGQpO2VhLmRhdGEoW3FlXSxmdW5jdGlvbigpe3JldHVybiBxZS5rZXl9KSxydD1lYX1haSYmKHZuPSJwYXRoIixDbj1xZS5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgdnQ9cnQ7aWYobCYmKHZ0PXZ0LnRyYW5zaXRpb24obCksYSYmdnQuZmlsdGVyKGZ1''@;'; put 'put ''bmN0aW9uKFpuKXtyZXR1cm4iIyI9PVpuLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksdnQuZmlsdGVyKGZ1bmN0aW9uKFpuKXtyZXR1cm4iIyI9PVpuLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihabil7d3ModGhpcykuYXR0cigic3R5bGUiLFpu''@;'; put 'put ''JiZabi5hdHRyaWJ1dGVzJiZabi5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSx2JiYicGF0aCI9PXZuJiZxZS5vZmZzZXQpe3ZhciBGdD1xZS50b3RhbExlbmd0aDtydC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixGdCsiICIrRnQpLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixGdCkuYXR0''@;'; put 'put ''cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcWUub2Zmc2V0LngrIiwiK3FlLm9mZnNldC55KyIpIiksQ25bInN0cm9rZS1kYXNob2Zmc2V0Il09MCxDbi50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIix2dC5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsQ25bInN0cm9rZS1kYXNob2Zmc2V0''@;'; put 'put ''Il0pLmF0dHIoInRyYW5zZm9ybSIsQ24udHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7d3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRh''@;'; put 'put ''c2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKHYmJiJwb2x5Z29uIj09dm4mJlE4ZShxZSkmJnFlLm9mZnNldCYmInBhdGgiPT1xZS5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgdHI9d3MocnQubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0''@;'; put 'put ''aCIpKSxhcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxIcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCkscXI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgtMSksb249MTgwKk1hdGguYXRhbjIoSHIueS1xci55LEhyLngt''@;'; put 'put ''cXIueCkvTWF0aC5QSSx5bj1hci54LUhyLngrcWUub2Zmc2V0LngscG49YXIueS1Ici55K3FlLm9mZnNldC55O3J0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3luKyIsIitwbisiKSIpLHZ0LmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiha''@;'; put 'put ''bil7dmFyIHNyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoKlpuKSxOcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCpabisxKSxNcj0xODAqTWF0aC5hdGFuMihOci55LXNyLnksTnIueC1zci54KS9NYXRoLlBJLW9uO3JldHVybiJ0''@;'; put 'put ''cmFuc2xhdGUoIisoeW49c3IueC1Ici54K3FlLm9mZnNldC54KigxLVpuKSkrIiwiKyhwbj1zci55LUhyLnkrcWUub2Zmc2V0LnkqKDEtWm4pKSsiKSByb3RhdGUoIitNcisiICIrSHIueCsiICIrSHIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe3dzKHRoaXMpLnN0eWxlKCJvcGFj''@;'; put 'put ''aXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBwcj1kJiZsJiYicGF0aCI9PXZuJiZudWxsIT1ydC5hdHRyKCJkIik7Zm9yKHZhciAkbiBvZiBPYmplY3Qua2V5cyhDbikpe3ZhciBkcj1Dblskbl07aWYocHImJiJk''@;'; put 'put ''Ij09JG4pe3ZhciBEcjsoRHI9KHFlLmFsdGVybmF0aXZlT2xkfHxxZSkucG9pbnRzKSYmdnQuYXR0clR3ZWVuKCJkIixoeHQoRHIsZHIpKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT0kbiYmcWUudHJhbnNsYXRpb24paWYobCl7dmFyIFVyPXZ0Lm9uKCJlbmQiKTt2dC5vbigic3RhcnQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7RC5fem9vbUJlaGF2aW9yJiZ2dC50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIFpuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHNyKXtabi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsVDhlKFJOKEQuX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygpLEl0''@;'; put 'put ''ZS5jYWxsKEQscnQpLnRvU3RyaW5nKCkpKHNyKSl9fSl9KS5vbigiZW5kIixmdW5jdGlvbigpe1VyLmNhbGwodGhpcyksRC5fem9vbUJlaGF2aW9yJiZSdGUuY2FsbChELHJ0KX0pfWVsc2UgRC5fem9vbUJlaGF2aW9yJiYoUnRlLmNhbGwoRCxydCksZHI9SXRlLmNhbGwoRCxydCkudG9TdHJp''@;'; put 'put ''bmcoKSk7dnQuYXR0cigkbixkcil9fWFpJiZ2dC5vbigiZW5kIixmdW5jdGlvbihabixzcixOcil7SzhlKGVhPXdzKHRoaXMpLFpuKS5kYXRhKFtabl0sZnVuY3Rpb24oKXtyZXR1cm4gWm4ua2V5fSl9KSxxZS50ZXh0JiZ2dC50ZXh0KHFlLnRleHQpLGZ1bmN0aW9uIFoocWUpe3ZhciBydD1x''@;'; put 'put ''ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gcWUubm9kZSgpLmNoaWxkTm9kZXN9KSxwdD0ocnQ9cnQuZGF0YShmdW5jdGlvbih2bil7cmV0dXJuIHZuLmNoaWxkcmVufSxmdW5jdGlvbih2bil7cmV0dXJuIHZuLmtleX0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbih2bil7dmFyIENu''@;'; put 'put ''PUF0ZSh2bik7cmV0dXJuIiN0ZXh0Ij09dm4udGFnJiZhJiYoQ24ubm9kZVZhbHVlPXZuLnRleHQpLENufSk7KGF8fHYmJko4ZShxZS5kYXR1bSgpKSkmJnB0LmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuIiMiPT12bi50YWdbMF0/bnVsbDp0aGlzfSkuZWFjaChmdW5jdGlvbih2bil7dmFy''@;'; put 'put ''IENuPXdzKHRoaXMpO2Zvcih2YXIgdG4gb2YgT2JqZWN0LmtleXModm4uYXR0cmlidXRlcykpQ24uYXR0cih0bix2bi5hdHRyaWJ1dGVzW3RuXSl9KS5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiJzdmciPT12bi50YWd8fCJnIj09dm4udGFnP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5''@;'; put 'put ''IiwwKTt2YXIgSnQ9cnQuZXhpdCgpO00mJkp0LmVhY2goTSksbCYmKEp0PUp0LnRyYW5zaXRpb24obCksYSYmSnQuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4iIyI9PXZuLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCkpLEp0PUp0LnJlbW92ZSgpLChydD1wdC5tZXJn''@;'; put 'put ''ZShydCkub3JkZXIoKSkuZWFjaChyZSl9KHJ0KX0uY2FsbChCZS5ub2RlKCksRWUpLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvciYmWDhlLmNhbGwodGhpcyksRC5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixEKSxudWxsPT1sJiYodGhpcy5fZGlzcGF0Y2guY2Fs''@;'; put 'put ''bCgiZW5kIix0aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9Uk4ucHJvdG90eXBlPVE1LnByb3RvdHlwZTt2YXIgSEEsRnRlLHl4dD1BcnJheUJ1ZmZlcixEdT1VaW50OEFycmF5LE9OPVVpbnQxNkFycmF5LF94dD1JbnQxNkFycmF5LFBOPUludDMyQXJyYXksTHRlPWZ1bmN0aW9uKGMsbCxh''@;'; put 'put ''KXtpZihEdS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIER1LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDwwKSYmKGw9MCksKG51bGw9PWF8fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IER1KGEtbCk7cmV0dXJuIGQuc2V0KGMuc3ViYXJyYXkobCxh''@;'; put 'put ''KSksZH0sT0E9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoRHUucHJvdG90eXBlLmZpbGwpcmV0dXJuIER1LnByb3RvdHlwZS5maWxsLmNhbGwoYyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KythKWNbYV09bDty''@;'; put 'put ''ZXR1cm4gY30sd3h0PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKER1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBEdS5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7''@;'; put 'put ''YTxkOyljW2wrK109Y1thKytdfSxDeHQ9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVk''@;'; put 'put ''IEVPRiJdLGUwPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8Q3h0W2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxlMCksIWEpdGhyb3cgZDtyZXR1cm4gZH0sdDdlPWZ1bmN0aW9uKGMsbCxhKXtmb3Io''@;'; put 'put ''dmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0sTXh0PWZ1bmN0aW9uKGMsbCl7dmFyIGE9Y1swXXxjWzFdPDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWEmJjI1Mz09Y1szXSl7dmFyIGQ9Y1s0XSxoPWQ+PjUmMSxmPWQ+PjImMSx2PTMmZCxNPWQ+PjY7OCZk''@;'; put 'put ''JiZlMCgwKTt2YXIgRD02LWgsWj0zPT12PzQ6dixyZT10N2UoYyxELFopLGNlPU0/MTw8TTpoLGJlPXQ3ZShjLEQrPVosY2UpKygxPT1NJiYyNTYpLEVlPWJlO2lmKCFoKXt2YXIgQmU9MTw8MTArKGNbNV0+PjMpO0VlPUJlKyhCZT4+MykqKDcmY1s1XSl9RWU+MjE0NTM4NjQ5NiYmZTAoMSk7''@;'; put 'put ''dmFyIHFlPW5ldyBEdSgoMT09bD9iZXx8RWU6bD8wOkVlKSsxMik7cmV0dXJuIHFlWzBdPTEscWVbNF09NCxxZVs4XT04LHtiOkQrY2UseTowLGw6MCxkOnJlLHc6bCYmMSE9bD9sOnFlLnN1YmFycmF5KDEyKSxlOkVlLG86bmV3IFBOKHFlLmJ1ZmZlciwwLDMpLHU6YmUsYzpmLG06TWF0aC5t''@;'; put 'put ''aW4oMTMxMDcyLEVlKX19aWYoMjU0ODE4OTM9PShhPj40fGNbM108PDIwKSlyZXR1cm4gZnVuY3Rpb24oYyxsKXtyZXR1cm4oY1s0XXxjWzVdPDw4fGNbNl08PDE2fGNbN108PDI0KT4+PjB9KGMpKzg7ZTAoMCl9LG52PWZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0wOzE8PGw8PWM7KytsKTtyZXR1''@;'; put 'put ''cm4gbC0xfSxQQT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NCsobDw8MyksaD01KygxNSZjW2xdKTtoPmEmJmUwKDMpO2Zvcih2YXIgZj0xPDxoLHY9ZixNPS0xLEQ9LTEsWj0tMSxyZT1mLGNlPW5ldyB5eHQoNTEyKyhmPDwyKSksYmU9bmV3IF94dChjZSwwLDI1NiksRWU9bmV3IE9OKGNlLDAs''@;'; put 'put ''MjU2KSxCZT1uZXcgT04oY2UsNTEyLGYpLHFlPTUxMisoZjw8MSkscnQ9bmV3IER1KGNlLHFlLGYpLHB0PW5ldyBEdShjZSxxZStmKTtNPDI1NSYmdj4wOyl7dmFyIGR0PW52KHYrMSksSnQ9ZD4+Myx2bj0oMTw8ZHQrMSktMSxDbj0oY1tKdF18Y1tKdCsxXTw8OHxjW0p0KzJdPDwxNik+Pig3''@;'; put 'put ''JmQpJnZuLHRuPSgxPDxkdCktMSxNbj12bi12LTEsd3I9Q24mdG47aWYod3I8TW4/KGQrPWR0LENuPXdyKTooZCs9ZHQrMSxDbj50biYmKENuLT1NbikpLGJlWysrTV09LS1DbiwtMT09Q24/KHYrPUNuLHJ0Wy0tcmVdPU0pOnYtPUNuLCFDbilkb3t2YXIgR3I9ZD4+MztEPShjW0dyXXxjW0dy''@;'; put 'put ''KzFdPDw4KT4+KDcmZCkmMyxkKz0yLE0rPUR9d2hpbGUoMz09RCl9KE0+MjU1fHx2KSYmZTAoMCk7Zm9yKHZhciBtcj0wLEduPShmPj4xKSsoZj4+MykrMyxhaT1mLTEsX2k9MDtfaTw9TTsrK19pKXt2YXIgT249YmVbX2ldO2lmKE9uPDEpRWVbX2ldPS1PbjtlbHNlIGZvcihaPTA7WjxPbjsr''@;'; put 'put ''K1ope3J0W21yXT1faTtkb3ttcj1tcitHbiZhaX13aGlsZShtcj49cmUpfX1mb3IobXImJmUwKDApLFo9MDtaPGY7KytaKXt2YXIgenI9RWVbcnRbWl1dKyssSm49cHRbWl09aC1udih6cik7QmVbWl09KHpyPDxKbiktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczpydCxuOnB0LHQ6QmV9XX0sRXh0''@;'; put 'put ''PVBBKG5ldyBEdShbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLFR4dD1QQShuZXcgRHUoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgs''@;'; put 'put ''NjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sQXh0PVBBKG5ldyBEdShbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1KVsxXSxuN2U9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgUE4oYSksaD0wO2g8YTsrK2gpZFtoXT1sLGwrPTE8''@;'; put 'put ''PGNbaF07cmV0dXJuIGR9LE90ZT1uZXcgRHUobmV3IFBOKFswLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDEzNDY3ODAyMCwyMDIwNTAwNTcsMjY5NDIyMDkzXSkuYnVmZmVyLDAsMzYpLGt4dD1uN2UoT3RlLDApLFB0ZT1uZXcgRHUobmV3IFBOKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDks''@;'; put 'put ''NTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksRHh0PW43ZShQdGUsMyksRkE9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPWMubGVuZ3RoLGg9bC5sZW5ndGgsZj1jW2QtMV0sdj0oMTw8YS5iKS0xLE09LWEuYjtmfHxlMCgwKTtmb3IodmFyIEQ9''@;'; put 'put ''MCxaPWEuYixyZT0oZDw8MyktOCtudihmKS1aLGNlPS0xO3JlPk0mJmNlPGg7KXt2YXIgYmU9cmU+PjM7bFsrK2NlXT1hLnNbRD0oRDw8WnwoY1tiZV18Y1tiZSsxXTw8OHxjW2JlKzJdPDwxNik+Pig3JnJlKSkmdl0scmUtPVo9YS5uW0RdfShyZSE9TXx8Y2UrMSE9aCkmJmUwKDApfSxJeHQ9''@;'; put 'put ''ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTYsZj1sLmxlbmd0aCszPj4yLHY9Zjw8MSxNPWYrdjtGQShjLnN1YmFycmF5KGQsZCs9Y1swXXxjWzFdPDw4KSxsLnN1YmFycmF5KDAsZiksYSksRkEoYy5zdWJhcnJheShkLGQrPWNbMl18Y1szXTw8OCksbC5zdWJhcnJheShmLHYpLGEpLEZBKGMuc3Vi''@;'; put 'put ''YXJyYXkoZCxkKz1jWzRdfGNbNV08PDgpLGwuc3ViYXJyYXkodixNKSxhKSxGQShjLnN1YmFycmF5KGQpLGwuc3ViYXJyYXkoTSksYSl9LFJ4dD1mdW5jdGlvbihjLGwsYSl7dmFyIGQsaD1sLmIsZj1jW2hdLHY9Zj4+MSYzO2wubD0xJmY7dmFyIE09Zj4+M3xjW2grMV08PDV8Y1toKzJdPDwx''@;'; put 'put ''MyxEPShoKz0zKStNO2lmKDE9PXYpcmV0dXJuIGg+PWMubGVuZ3RoP3ZvaWQgMDoobC5iPWgrMSxhPyhPQShhLGNbaF0sbC55LGwueSs9TSksYSk6T0EobmV3IER1KE0pLGNbaF0pKTtpZighKEQ+Yy5sZW5ndGgpKXtpZigwPT12KXJldHVybiBsLmI9RCxhPyhhLnNldChjLnN1YmFycmF5KGgs''@;'; put 'put ''RCksbC55KSxsLnkrPU0sYSk6THRlKGMsaCxEKTtpZigyPT12KXt2YXIgWj1jW2hdLHJlPTMmWixjZT1aPj4yJjMsYmU9Wj4+NCxFZT0wLEJlPTA7cmU8Mj8xJmNlP2JlfD1jWysraF08PDR8KDImY2UmJmNbKytoXTw8MTIpOmJlPVo+PjM6KEJlPWNlLGNlPDI/KGJlfD0oNjMmY1srK2hdKTw8''@;'; put 'put ''NCxFZT1jW2hdPj42fGNbKytoXTw8Mik6Mj09Y2U/KGJlfD1jWysraF08PDR8KDMmY1srK2hdKTw8MTIsRWU9Y1toXT4+MnxjWysraF08PDYpOihiZXw9Y1srK2hdPDw0fCg2MyZjWysraF0pPDwxMixFZT1jW2hdPj42fGNbKytoXTw8MnxjWysraF08PDEwKSksKytoO3ZhciBxZT1hP2Euc3Vi''@;'; put 'put ''YXJyYXkobC55LGwueStsLm0pOm5ldyBEdShsLm0pLHJ0PXFlLmxlbmd0aC1iZTtpZigwPT1yZSlxZS5zZXQoYy5zdWJhcnJheShoLGgrPWJlKSxydCk7ZWxzZSBpZigxPT1yZSlPQShxZSxjW2grK10scnQpO2Vsc2V7dmFyIHB0PWwuaDtpZigyPT1yZSl7dmFyIGR0PWZ1bmN0aW9uKGMsbCl7''@;'; put 'put ''dmFyIGE9MCxkPS0xLGg9bmV3IER1KDI5MiksZj1jW2xdLHY9aC5zdWJhcnJheSgwLDI1NiksTT1oLnN1YmFycmF5KDI1NiwyNjgpLEQ9bmV3IE9OKGguYnVmZmVyLDI2OCk7aWYoZjwxMjgpe3ZhciBaPVBBKGMsbCsxLDYpLGNlPVpbMV0sYmU9WlswXTw8MyxFZT1jW2wrPWZdO0VlfHxlMCgw''@;'; put 'put ''KTtmb3IodmFyIEJlPTAscWU9MCxydD1jZS5iLHB0PXJ0LGR0PSgrK2w8PDMpLTgrbnYoRWUpOyEoKGR0LT1ydCk8YmUpOyl7dmFyIEp0PWR0Pj4zO2lmKHZbKytkXT1jZS5zW0JlKz0oY1tKdF18Y1tKdCsxXTw8OCk+Pig3JmR0KSYoMTw8cnQpLTFdLChkdC09cHQpPGJlKWJyZWFrO3ZbKytk''@;'; put 'put ''XT1jZS5zW3FlKz0oY1tKdD1kdD4+M118Y1tKdCsxXTw8OCk+Pig3JmR0KSYoMTw8cHQpLTFdLHJ0PWNlLm5bQmVdLEJlPWNlLnRbQmVdLHB0PWNlLm5bcWVdLHFlPWNlLnRbcWVdfSsrZD4yNTUmJmUwKDApfWVsc2V7Zm9yKGQ9Zi0xMjc7YTxkO2ErPTIpe3ZhciB2bj1jWysrbF07dlthXT12''@;'; put 'put ''bj4+NCx2W2ErMV09MTUmdm59KytsfXZhciBDbj0wO2ZvcihhPTA7YTxkOysrYSkodG49dlthXSk+MTEmJmUwKDApLENuKz10biYmMTw8dG4tMTt2YXIgTW49bnYoQ24pKzEsd3I9MTw8TW4sR3I9d3ItQ247Zm9yKEdyJkdyLTEmJmUwKDApLHZbZCsrXT1udihHcikrMSxhPTA7YTxkOysrYSl7''@;'; put 'put ''dmFyIHRuOysrTVt2W2FdPSh0bj12W2FdKSYmTW4rMS10bl19dmFyIG1yPW5ldyBEdSh3cjw8MSksR249bXIuc3ViYXJyYXkoMCx3ciksYWk9bXIuc3ViYXJyYXkod3IpO2ZvcihEW01uXT0wLGE9TW47YT4wOy0tYSl7dmFyIF9pPURbYV07T0EoYWksYSxfaSxEW2EtMV09X2krTVthXSooMTw8''@;'; put 'put ''TW4tYSkpfWZvcihEWzBdIT13ciYmZTAoMCksYT0wO2E8ZDsrK2Epe3ZhciBPbj12W2FdO2lmKE9uKXt2YXIgenI9RFtPbl07T0EoR24sYSx6cixEW09uXT16cisoMTw8TW4tT24pKX19cmV0dXJuW2wse246YWksYjpNbixzOkdufV19KGMsaCk7RWUrPWgtKGg9ZHRbMF0pLGwuaD1wdD1kdFsx''@;'; put 'put ''XX1lbHNlIHB0fHxlMCgwKTsoQmU/SXh0OkZBKShjLnN1YmFycmF5KGgsaCs9RWUpLHFlLnN1YmFycmF5KHJ0KSxwdCl9dmFyIEp0PWNbaCsrXTtpZihKdCl7MjU1PT1KdD9KdD0zMjUxMisoY1toKytdfGNbaCsrXTw8OCk6SnQ+MTI3JiYoSnQ9SnQtMTI4PDw4fGNbaCsrXSk7dmFyIHZuPWNb''@;'; put 'put ''aCsrXTszJnZuJiZlMCgwKTtmb3IodmFyIENuPVtUeHQsQXh0LEV4dF0sdG49Mjt0bj4tMTstLXRuKXt2YXIgTW49dm4+PjIrKHRuPDwxKSYzO2lmKDE9PU1uKXt2YXIgd3I9bmV3IER1KFswLDAsY1toKytdXSk7Q25bdG5dPXtzOndyLnN1YmFycmF5KDIsMyksbjp3ci5zdWJhcnJheSgwLDEp''@;'; put 'put ''LHQ6bmV3IE9OKHdyLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT1Nbj8oaD0oZD1QQShjLGgsOS0oMSZ0bikpKVswXSxDblt0bl09ZFsxXSk6Mz09TW4mJihsLnR8fGUwKDApLENuW3RuXT1sLnRbdG5dKX12YXIgR3I9bC50PUNuLG1yPUdyWzBdLEduPUdyWzFdLGFpPUdyWzJdLF9pPWNbRC0x''@;'; put 'put ''XTtfaXx8ZTAoMCk7dmFyIE9uPShEPDwzKS04K252KF9pKS1haS5iLHpyPU9uPj4zLEpuPTAsRHI9KGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PGFpLmIpLTEsJHI9KGNbenI9KE9uLT1Hbi5iKT4+M118Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8R24uYiktMSx3aT0oY1t6cj0oT24t''@;'; put 'put ''PW1yLmIpPj4zXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxtci5iKS0xO2ZvcigrK0p0Oy0tSnQ7KXt2YXIgZWE9YWkuc1tEcl0sZmE9YWkubltEcl0sdnQ9bXIuc1t3aV0sTnQ9bXIublt3aV0sRnQ9R24uc1skcl0sSG49R24ublskcl0sdHI9MTw8RnQsYXI9dHIrKChjW3pyPShPbi09RnQp''@;'; put 'put ''Pj4zXXxjW3pyKzFdPDw4fGNbenIrMl08PDE2fGNbenIrM108PDI0KT4+Pig3Jk9uKSZ0ci0xKTt6cj0oT24tPVB0ZVt2dF0pPj4zO3ZhciBIcj1EeHRbdnRdKygoY1t6cl18Y1t6cisxXTw8OHxjW3pyKzJdPDwxNik+Pig3Jk9uKSYoMTw8UHRlW3Z0XSktMSk7enI9KE9uLT1PdGVbZWFdKT4+''@;'; put 'put ''Mzt2YXIgcXI9a3h0W2VhXSsoKGNbenJdfGNbenIrMV08PDh8Y1t6cisyXTw8MTYpPj4oNyZPbikmKDE8PE90ZVtlYV0pLTEpO2lmKHpyPShPbi09ZmEpPj4zLERyPWFpLnRbRHJdKygoY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8ZmEpLTEpLHpyPShPbi09TnQpPj4zLHdpPW1yLnRb''@;'; put 'put ''d2ldKygoY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8TnQpLTEpLHpyPShPbi09SG4pPj4zLCRyPUduLnRbJHJdKygoY1t6cl18Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8SG4pLTEpLGFyPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1swXT1hci09MztlbHNle3ZhciBv''@;'; put 'put ''bj1hci0oMCE9cXIpO29uPyhhcj0zPT1vbj9sLm9bMF0tMTpsLm9bb25dLG9uPjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT1hcik6YXI9bC5vWzBdfWZvcih0bj0wO3RuPHFyOysrdG4pcWVbSm4rdG5dPXFlW3J0K3RuXTtydCs9cXI7dmFyIHluPShKbis9cXIpLWFy''@;'; put 'put ''O2lmKHluPDApe3ZhciBwbj0teW4scHI9bC5lK3luO2Zvcihwbj5IciYmKHBuPUhyKSx0bj0wO3RuPHBuOysrdG4pcWVbSm4rdG5dPWwud1twcit0bl07Sm4rPXBuLEhyLT1wbix5bj0wfWZvcih0bj0wO3RuPEhyOysrdG4pcWVbSm4rdG5dPXFlW3luK3RuXTtKbis9SHJ9aWYoSm4hPXJ0KWZv''@;'; put 'put ''cig7cnQ8cWUubGVuZ3RoOylxZVtKbisrXT1xZVtydCsrXTtlbHNlIEpuPXFlLmxlbmd0aDthP2wueSs9Sm46cWU9THRlKHFlLDAsSm4pfWVsc2UgaWYoYSl7aWYobC55Kz1iZSxydClmb3IodG49MDt0bjxiZTsrK3RuKXFlW3RuXT1xZVtydCt0bl19ZWxzZSBydCYmKHFlPUx0ZShxZSxydCkp''@;'; put 'put ''O3JldHVybiBsLmI9RCxxZX1lMCgyKX19LEZ4dD0odHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQsZnVuY3Rpb24obD17fSl7dmFyIGgsZixCZSxkPWwsdj1uZXcgUHJvbWlzZSgoWmUsbHQpPT57aD1aZSxmPWx0fSksRD1PYmplY3QuYXNzaWduKHt9LGQpLHFlPWNvbnNvbGUubG9nLmJp''@;'; put 'put ''bmQoY29uc29sZSkscnQ9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxEKSxEPW51bGw7dmFyIGR0LHRuLE1uLHdyLG1yLEduLF9pLHB0PWQud2FzbUJpbmFyeSxKdD0hMTtmdW5jdGlvbiBDbihaZSxsdCl7WmV8fHFyKGx0KX1mdW5jdGlvbiBPbigpe3ZhciBa''@;'; put 'put ''ZT1kdC5idWZmZXI7ZC5IRUFQOD10bj1uZXcgSW50OEFycmF5KFplKSxkLkhFQVAxNj13cj1uZXcgSW50MTZBcnJheShaZSksZC5IRUFQVTg9TW49bmV3IFVpbnQ4QXJyYXkoWmUpLGQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoWmUpLGQuSEVBUDMyPW1yPW5ldyBJbnQzMkFycmF5KFplKSxk''@;'; put 'put ''LkhFQVBVMzI9R249bmV3IFVpbnQzMkFycmF5KFplKSxkLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShaZSksZC5IRUFQRjY0PV9pPW5ldyBGbG9hdDY0QXJyYXkoWmUpfXZhciB6cj1bXSxKbj1bXSxEcj1bXSxOdD0wLEZ0PW51bGwsSG49bnVsbDtmdW5jdGlvbiBhcihaZSl7TnQrK31mdW5j''@;'; put 'put ''dGlvbiBIcihaZSl7aWYoMD09LS1OdCYmKG51bGwhPT1GdCYmKGNsZWFySW50ZXJ2YWwoRnQpLEZ0PW51bGwpLEhuKSl7dmFyIGx0PUhuO0huPW51bGwsbHQoKX19ZnVuY3Rpb24gcXIoWmUpe3J0KFplPSJBYm9ydGVkKCIrWmUrIikiKSxKdD0hMCxaZSs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VS''@;'; put 'put ''VElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBsdD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKFplKTt0aHJvdyBmKGx0KSxsdH12YXIgJG4seW49WmU9PlplLnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKTtmdW5jdGlvbiBkcihaZSl7aWYo''@;'; put 'put ''WmU9PSRuJiZwdClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocHQpO2lmKEJlKXJldHVybiBCZShaZSk7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWZ1bmN0aW9uIFpuKFplLGx0LEx0KXtyZXR1cm4gZnVuY3Rpb24gVXIoWmUpe3JldHVybiBw''@;'; put 'put ''dD9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5kcihaZSkpOih2b2lkIDApKFplKS50aGVuKGx0PT5uZXcgVWludDhBcnJheShsdCksKCk9PmRyKFplKSl9KFplKS50aGVuKCR0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgkdCxsdCkpLnRoZW4oTHQsJHQ9PntydChgZmFpbGVkIHRvIGFz''@;'; put 'put ''eW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHskdH1gKSxxcigkdCl9KX12YXIgWnIsYWEsQmE9ezE3MzA2NDooWmUsbHQpPT57dmFyIEx0PXYwKFplKSwkdD12MChsdCk7WXQuY3JlYXRlUGF0aCgiLyIsUW8uZGlybmFtZShMdCkpLFl0LndyaXRlRmlsZShRby5qb2luKCIvIixMdCksJHQp''@;'; put 'put ''fX07Y2xhc3MgSW97bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IobHQpe3RoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2x0fSlgLHRoaXMuc3RhdHVzPWx0fX12YXIgWm89WmU9Pntmb3IoO1plLmxlbmd0aD4wOylaZS5zaGlmdCgpKGQpfTtjbGFzcyBw''@;'; put 'put ''c3tjb25zdHJ1Y3RvcihsdCl7dGhpcy5leGNQdHI9bHQsdGhpcy5wdHI9bHQtMjR9c2V0X3R5cGUobHQpe0duW3RoaXMucHRyKzQ+PjJdPWx0fWdldF90eXBlKCl7cmV0dXJuIEduW3RoaXMucHRyKzQ+PjJdfXNldF9kZXN0cnVjdG9yKGx0KXtHblt0aGlzLnB0cis4Pj4yXT1sdH1nZXRfZGVz''@;'; put 'put ''dHJ1Y3Rvcigpe3JldHVybiBHblt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KGx0KXt0blt0aGlzLnB0cisxMl09bHQ9bHQ/MTowfWdldF9jYXVnaHQoKXtyZXR1cm4gMCE9dG5bdGhpcy5wdHIrMTJdfXNldF9yZXRocm93bihsdCl7dG5bdGhpcy5wdHIrMTNdPWx0PWx0PzE6MH1nZXRfcmV0''@;'; put 'put ''aHJvd24oKXtyZXR1cm4gMCE9dG5bdGhpcy5wdHIrMTNdfWluaXQobHQsTHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGx0KSx0aGlzLnNldF9kZXN0cnVjdG9yKEx0KX1zZXRfYWRqdXN0ZWRfcHRyKGx0KXtHblt0aGlzLnB0cisxNj4+Ml09bHR9Z2V0X2FkanVz''@;'; put 'put ''dGVkX3B0cigpe3JldHVybiBHblt0aGlzLnB0cisxNj4+Ml19fXZhciBRbz17aXNBYnM6WmU9PiIvIj09PVplLmNoYXJBdCgwKSxzcGxpdFBhdGg6WmU9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKFplKS5zbGlj''@;'; put 'put ''ZSgxKSxub3JtYWxpemVBcnJheTooWmUsbHQpPT57Zm9yKHZhciBMdD0wLCR0PVplLmxlbmd0aC0xOyR0Pj0wOyR0LS0pe3ZhciBEbj1aZVskdF07Ii4iPT09RG4/WmUuc3BsaWNlKCR0LDEpOiIuLiI9PT1Ebj8oWmUuc3BsaWNlKCR0LDEpLEx0KyspOkx0JiYoWmUuc3BsaWNlKCR0LDEpLEx0''@;'; put 'put ''LS0pfWlmKGx0KWZvcig7THQ7THQtLSlaZS51bnNoaWZ0KCIuLiIpO3JldHVybiBaZX0sbm9ybWFsaXplOlplPT57dmFyIGx0PVFvLmlzQWJzKFplKSxMdD0iLyI9PT1aZS5zdWJzdHIoLTEpO3JldHVybiEoWmU9UW8ubm9ybWFsaXplQXJyYXkoWmUuc3BsaXQoIi8iKS5maWx0ZXIoJHQ9PiEh''@;'; put 'put ''JHQpLCFsdCkuam9pbigiLyIpKSYmIWx0JiYoWmU9Ii4iKSxaZSYmTHQmJihaZSs9Ii8iKSwobHQ/Ii8iOiIiKStaZX0sZGlybmFtZTpaZT0+e3ZhciBsdD1Rby5zcGxpdFBhdGgoWmUpLEx0PWx0WzBdLCR0PWx0WzFdO3JldHVybiBMdHx8JHQ/KCR0JiYoJHQ9JHQuc3Vic3RyKDAsJHQubGVu''@;'; put 'put ''Z3RoLTEpKSxMdCskdCk6Ii4ifSxiYXNlbmFtZTpaZT0+e2lmKCIvIj09PVplKXJldHVybiIvIjt2YXIgbHQ9KFplPShaZT1Rby5ub3JtYWxpemUoWmUpKS5yZXBsYWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWx0P1plOlplLnN1YnN0cihsdCsxKX0sam9pbjoo''@;'; put 'put ''Li4uWmUpPT5Rby5ub3JtYWxpemUoWmUuam9pbigiLyIpKSxqb2luMjooWmUsbHQpPT5Rby5ub3JtYWxpemUoWmUrIi8iK2x0KX0sYWQ9WmU9PihhZD0oKCk9PntpZigib2JqZWN0Ij09dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpcmV0''@;'; put 'put ''dXJuIFplPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFplKTtxcigiaW5pdFJhbmRvbURldmljZSIpfSkoKSkoWmUpLHpzPXtyZXNvbHZlOiguLi5aZSk9Pntmb3IodmFyIGx0PSIiLEx0PSExLCR0PVplLmxlbmd0aC0xOyR0Pj0tMSYmIUx0OyR0LS0pe3ZhciBEbj0kdD49MD9aZVskdF06WXQu''@;'; put 'put ''Y3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBEbil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCFEbilyZXR1cm4iIjtsdD1EbisiLyIrbHQsTHQ9UW8uaXNBYnMoRG4pfXJldHVybihMdD8iLyI6IiIpKyhsdD1Rby5u''@;'; put 'put ''b3JtYWxpemVBcnJheShsdC5zcGxpdCgiLyIpLmZpbHRlcihjcj0+ISFjciksIUx0KS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOihaZSxsdCk9PntmdW5jdGlvbiBMdChHbyl7Zm9yKHZhciBIcz0wO0hzPEdvLmxlbmd0aCYmIiI9PT1Hb1tIc107SHMrKyk7Zm9yKHZhciBhbD1Hby5sZW5n''@;'; put 'put ''dGgtMTthbD49MCYmIiI9PT1Hb1thbF07YWwtLSk7cmV0dXJuIEhzPmFsP1tdOkdvLnNsaWNlKEhzLGFsLUhzKzEpfVplPXpzLnJlc29sdmUoWmUpLnN1YnN0cigxKSxsdD16cy5yZXNvbHZlKGx0KS5zdWJzdHIoMSk7Zm9yKHZhciAkdD1MdChaZS5zcGxpdCgiLyIpKSxEbj1MdChsdC5zcGxp''@;'; put 'put ''dCgiLyIpKSxjcj1NYXRoLm1pbigkdC5sZW5ndGgsRG4ubGVuZ3RoKSxScj1jcixYcj0wO1hyPGNyO1hyKyspaWYoJHRbWHJdIT09RG5bWHJdKXtScj1YcjticmVha312YXIga2E9W107Zm9yKFhyPVJyO1hyPCR0Lmxlbmd0aDtYcisrKWthLnB1c2goIi4uIik7cmV0dXJuKGthPWthLmNvbmNh''@;'; put 'put ''dChEbi5zbGljZShScikpKS5qb2luKCIvIil9fSxKYz10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2Rlcjp2b2lkIDAsS3M9KFplLGx0PTAsTHQ9TmFOKT0+e2Zvcih2YXIgJHQ9bHQrTHQsRG49bHQ7WmVbRG5dJiYhKERuPj0kdCk7KSsrRG47aWYoRG4tbHQ+MTYmJlplLmJ1''@;'; put 'put ''ZmZlciYmSmMpcmV0dXJuIEpjLmRlY29kZShaZS5zdWJhcnJheShsdCxEbikpO2Zvcih2YXIgY3I9IiI7bHQ8RG47KXt2YXIgUnI9WmVbbHQrK107aWYoMTI4JlJyKXt2YXIgWHI9NjMmWmVbbHQrK107aWYoMTkyIT0oMjI0JlJyKSl7dmFyIGthPTYzJlplW2x0KytdO2lmKChScj0yMjQ9PSgy''@;'; put 'put ''NDAmUnIpPygxNSZScik8PDEyfFhyPDw2fGthOig3JlJyKTw8MTh8WHI8PDEyfGthPDw2fDYzJlplW2x0KytdKTw2NTUzNiljcis9U3RyaW5nLmZyb21DaGFyQ29kZShScik7ZWxzZXt2YXIgR289UnItNjU1MzY7Y3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8R28+PjEwLDU2MzIwfDEw''@;'; put 'put ''MjMmR28pfX1lbHNlIGNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZScik8PDZ8WHIpfWVsc2UgY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnIpfXJldHVybiBjcn0sQmw9W10sZXM9WmU9Pntmb3IodmFyIGx0PTAsTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl7dmFyICR0PVplLmNoYXJDb2Rl''@;'; put 'put ''QXQoTHQpOyR0PD0xMjc/bHQrKzokdDw9MjA0Nz9sdCs9MjokdD49NTUyOTYmJiR0PD01NzM0Mz8obHQrPTQsKytMdCk6bHQrPTN9cmV0dXJuIGx0fSxFMT0oWmUsbHQsTHQsJHQpPT57aWYoISgkdD4wKSlyZXR1cm4gMDtmb3IodmFyIERuPUx0LGNyPUx0KyR0LTEsUnI9MDtScjxaZS5sZW5n''@;'; put 'put ''dGg7KytScil7dmFyIFhyPVplLmNoYXJDb2RlQXQoUnIpO2lmKFhyPj01NTI5NiYmWHI8PTU3MzQzJiYoWHI9NjU1MzYrKCgxMDIzJlhyKTw8MTApfDEwMjMmWmUuY2hhckNvZGVBdCgrK1JyKSksWHI8PTEyNyl7aWYoTHQ+PWNyKWJyZWFrO2x0W0x0KytdPVhyfWVsc2UgaWYoWHI8PTIwNDcp''@;'; put 'put ''e2lmKEx0KzE+PWNyKWJyZWFrO2x0W0x0KytdPTE5MnxYcj4+NixsdFtMdCsrXT0xMjh8NjMmWHJ9ZWxzZSBpZihYcjw9NjU1MzUpe2lmKEx0KzI+PWNyKWJyZWFrO2x0W0x0KytdPTIyNHxYcj4+MTIsbHRbTHQrK109MTI4fFhyPj42JjYzLGx0W0x0KytdPTEyOHw2MyZYcn1lbHNle2lmKEx0''@;'; put 'put ''KzM+PWNyKWJyZWFrO2x0W0x0KytdPTI0MHxYcj4+MTgsbHRbTHQrK109MTI4fFhyPj4xMiY2MyxsdFtMdCsrXT0xMjh8WHI+PjYmNjMsbHRbTHQrK109MTI4fDYzJlhyfX1yZXR1cm4gbHRbTHRdPTAsTHQtRG59LGQ0PXt0dHlzOltdLGluaXQoKXt9LHNodXRkb3duKCl7fSxyZWdpc3Rlciha''@;'; put 'put ''ZSxsdCl7ZDQudHR5c1taZV09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6bHR9LFl0LnJlZ2lzdGVyRGV2aWNlKFplLGQ0LnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuKFplKXt2YXIgbHQ9ZDQudHR5c1taZS5ub2RlLnJkZXZdO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0''@;'; put 'put ''Myk7WmUudHR5PWx0LFplLnNlZWthYmxlPSExfSxjbG9zZShaZSl7WmUudHR5Lm9wcy5mc3luYyhaZS50dHkpfSxmc3luYyhaZSl7WmUudHR5Lm9wcy5mc3luYyhaZS50dHkpfSxyZWFkKFplLGx0LEx0LCR0LERuKXtpZighWmUudHR5fHwhWmUudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBuZXcg''@;'; put 'put ''WXQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBjcj0wLFJyPTA7UnI8JHQ7UnIrKyl7dmFyIFhyO3RyeXtYcj1aZS50dHkub3BzLmdldF9jaGFyKFplLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PVhyJiYwPT09Y3IpdGhyb3cgbmV3IFl0LkVycm5v''@;'; put 'put ''RXJyb3IoNik7aWYobnVsbD09WHIpYnJlYWs7Y3IrKyxsdFtMdCtScl09WHJ9cmV0dXJuIGNyJiYoWmUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksY3J9LHdyaXRlKFplLGx0LEx0LCR0LERuKXtpZighWmUudHR5fHwhWmUudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgWXQuRXJybm9F''@;'; put 'put ''cnJvcig2MCk7dHJ5e2Zvcih2YXIgY3I9MDtjcjwkdDtjcisrKVplLnR0eS5vcHMucHV0X2NoYXIoWmUudHR5LGx0W0x0K2NyXSl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfXJldHVybiAkdCYmKFplLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGNyfX0sZGVmYXVsdF90''@;'; put 'put ''dHlfb3BzOntnZXRfY2hhcjpaZT0+QmwubGVuZ3RoP0JsLnNoaWZ0KCk6bnVsbCxwdXRfY2hhcihaZSxsdCl7bnVsbD09PWx0fHwxMD09PWx0PyhxZShLcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWx0JiZaZS5vdXRwdXQucHVzaChsdCl9LGZzeW5jKFplKXtaZS5vdXRwdXQmJlpl''@;'; put 'put ''Lm91dHB1dC5sZW5ndGg+MCYmKHFlKEtzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0czpaZT0+KHtjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcsMTksMjYsMCwxOCwxNSwy''@;'; put 'put ''MywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX0pLGlvY3RsX3Rjc2V0czooWmUsbHQsTHQpPT4wLGlvY3RsX3Rpb2Nnd2luc3o6WmU9PlsyNCw4MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKFplLGx0KXtudWxsPT09bHR8fDEwPT09bHQ/KHJ0KEtzKFplLm91dHB1''@;'; put 'put ''dCkpLFplLm91dHB1dD1bXSk6MCE9bHQmJlplLm91dHB1dC5wdXNoKGx0KX0sZnN5bmMoWmUpe1plLm91dHB1dCYmWmUub3V0cHV0Lmxlbmd0aD4wJiYocnQoS3MoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKX19fSxOQT0oWmUsbHQpPT5NYXRoLmNlaWwoWmUvbHQpKmx0LFVOPVplPT57WmU9''@;'; put 'put ''TkEoWmUsNjU1MzYpO3ZhciBsdD1XN2UoNjU1MzYsWmUpO3JldHVybiBsdCYmKChaZSxsdCk9PntNbi5maWxsKDAsWmUsWmUrbHQpfSkobHQsWmUpLGx0fSwkYT17b3BzX3RhYmxlOm51bGwsbW91bnQ6WmU9PiRhLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCksY3JlYXRlTm9kZShaZSxs''@;'; put 'put ''dCxMdCwkdCl7aWYoWXQuaXNCbGtkZXYoTHQpfHxZdC5pc0ZJRk8oTHQpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTskYS5vcHNfdGFibGV8fD17ZGlyOntub2RlOntnZXRhdHRyOiRhLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjokYS5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDokYS5u''@;'; put 'put ''b2RlX29wcy5sb29rdXAsbWtub2Q6JGEubm9kZV9vcHMubWtub2QscmVuYW1lOiRhLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6JGEubm9kZV9vcHMudW5saW5rLHJtZGlyOiRhLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6JGEubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOiRhLm5vZGVfb3BzLnN5''@;'; put 'put ''bWxpbmt9LHN0cmVhbTp7bGxzZWVrOiRhLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6JGEuc3RyZWFtX29wcy5sbHNlZWsscmVhZDokYS5zdHJlYW1f''@;'; put 'put ''b3BzLnJlYWQsd3JpdGU6JGEuc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTokYS5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6JGEuc3RyZWFtX29wcy5tbWFwLG1zeW5jOiRhLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOiRhLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0''@;'; put 'put ''cjokYS5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOiRhLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOll0LmNocmRldl9zdHJlYW1fb3BzfX07''@;'; put 'put ''dmFyIERuPVl0LmNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpO3JldHVybiBZdC5pc0RpcihEbi5tb2RlKT8oRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmRpci5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmRpci5zdHJlYW0sRG4uY29udGVudHM9e30pOll0LmlzRmlsZShEbi5tb2Rl''@;'; put 'put ''KT8oRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmZpbGUubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5maWxlLnN0cmVhbSxEbi51c2VkQnl0ZXM9MCxEbi5jb250ZW50cz1udWxsKTpZdC5pc0xpbmsoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5saW5rLm5vZGUs''@;'; put 'put ''RG4uc3RyZWFtX29wcz0kYS5vcHNfdGFibGUubGluay5zdHJlYW0pOll0LmlzQ2hyZGV2KERuLm1vZGUpJiYoRG4ubm9kZV9vcHM9JGEub3BzX3RhYmxlLmNocmRldi5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLERuLnRpbWVzdGFtcD1EYXRlLm5vdygp''@;'; put 'put ''LFplJiYoWmUuY29udGVudHNbbHRdPURuLFplLnRpbWVzdGFtcD1Ebi50aW1lc3RhbXApLERufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTpaZT0+WmUuY29udGVudHM/WmUuY29udGVudHMuc3ViYXJyYXk/WmUuY29udGVudHMuc3ViYXJyYXkoMCxaZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFy''@;'; put 'put ''cmF5KFplLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKSxleHBhbmRGaWxlU3RvcmFnZShaZSxsdCl7dmFyIEx0PVplLmNvbnRlbnRzP1plLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEoTHQ+PWx0KSl7bHQ9TWF0aC5tYXgobHQsTHQqKEx0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT1MdCYm''@;'; put 'put ''KGx0PU1hdGgubWF4KGx0LDI1NikpO3ZhciBEbj1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksWmUudXNlZEJ5dGVzPjAmJlplLmNvbnRlbnRzLnNldChEbi5zdWJhcnJheSgwLFplLnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxlU3RvcmFnZShaZSxsdCl7aWYo''@;'; put 'put ''WmUudXNlZEJ5dGVzIT1sdClpZigwPT1sdClaZS5jb250ZW50cz1udWxsLFplLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIEx0PVplLmNvbnRlbnRzO1plLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGx0KSxMdCYmWmUuY29udGVudHMuc2V0KEx0LnN1YmFycmF5KDAsTWF0aC5taW4obHQsWmUudXNl''@;'; put 'put ''ZEJ5dGVzKSkpLFplLnVzZWRCeXRlcz1sdH19LG5vZGVfb3BzOntnZXRhdHRyKFplKXt2YXIgbHQ9e307cmV0dXJuIGx0LmRldj1ZdC5pc0NocmRldihaZS5tb2RlKT9aZS5pZDoxLGx0Lmlubz1aZS5pZCxsdC5tb2RlPVplLm1vZGUsbHQubmxpbms9MSxsdC51aWQ9MCxsdC5naWQ9MCxsdC5y''@;'; put 'put ''ZGV2PVplLnJkZXYsbHQuc2l6ZT1ZdC5pc0RpcihaZS5tb2RlKT80MDk2Oll0LmlzRmlsZShaZS5tb2RlKT9aZS51c2VkQnl0ZXM6WXQuaXNMaW5rKFplLm1vZGUpP1plLmxpbmsubGVuZ3RoOjAsbHQuYXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5tdGltZT1uZXcgRGF0ZShaZS50''@;'; put 'put ''aW1lc3RhbXApLGx0LmN0aW1lPW5ldyBEYXRlKFplLnRpbWVzdGFtcCksbHQuYmxrc2l6ZT00MDk2LGx0LmJsb2Nrcz1NYXRoLmNlaWwobHQuc2l6ZS9sdC5ibGtzaXplKSxsdH0sc2V0YXR0cihaZSxsdCl7dm9pZCAwIT09bHQubW9kZSYmKFplLm1vZGU9bHQubW9kZSksdm9pZCAwIT09bHQu''@;'; put 'put ''dGltZXN0YW1wJiYoWmUudGltZXN0YW1wPWx0LnRpbWVzdGFtcCksdm9pZCAwIT09bHQuc2l6ZSYmJGEucmVzaXplRmlsZVN0b3JhZ2UoWmUsbHQuc2l6ZSl9LGxvb2t1cChaZSxsdCl7dGhyb3cgJGEuZG9lc05vdEV4aXN0RXJyb3J9LG1rbm9kOihaZSxsdCxMdCwkdCk9PiRhLmNyZWF0ZU5v''@;'; put 'put ''ZGUoWmUsbHQsTHQsJHQpLHJlbmFtZShaZSxsdCxMdCl7aWYoWXQuaXNEaXIoWmUubW9kZSkpe3ZhciAkdDt0cnl7JHQ9WXQubG9va3VwTm9kZShsdCxMdCl9Y2F0Y2h7fWlmKCR0KWZvcih2YXIgRG4gaW4gJHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpfWRlbGV0ZSBa''@;'; put 'put ''ZS5wYXJlbnQuY29udGVudHNbWmUubmFtZV0sWmUucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLFplLm5hbWU9THQsbHQuY29udGVudHNbTHRdPVplLGx0LnRpbWVzdGFtcD1aZS5wYXJlbnQudGltZXN0YW1wfSx1bmxpbmsoWmUsbHQpe2RlbGV0ZSBaZS5jb250ZW50c1tsdF0sWmUudGlt''@;'; put 'put ''ZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKFplLGx0KXt2YXIgTHQ9WXQubG9va3VwTm9kZShaZSxsdCk7Zm9yKHZhciAkdCBpbiBMdC5jb250ZW50cyl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NSk7ZGVsZXRlIFplLmNvbnRlbnRzW2x0XSxaZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVh''@;'; put 'put ''ZGRpcihaZSl7dmFyIGx0PVsiLiIsIi4uIl07Zm9yKHZhciBMdCBvZiBPYmplY3Qua2V5cyhaZS5jb250ZW50cykpbHQucHVzaChMdCk7cmV0dXJuIGx0fSxzeW1saW5rKFplLGx0LEx0KXt2YXIgJHQ9JGEuY3JlYXRlTm9kZShaZSxsdCw0MTQ3MSwwKTtyZXR1cm4gJHQubGluaz1MdCwkdH0s''@;'; put 'put ''cmVhZGxpbmsoWmUpe2lmKCFZdC5pc0xpbmsoWmUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBaZS5saW5rfX0sc3RyZWFtX29wczp7cmVhZChaZSxsdCxMdCwkdCxEbil7dmFyIGNyPVplLm5vZGUuY29udGVudHM7aWYoRG4+PVplLm5vZGUudXNlZEJ5dGVzKXJl''@;'; put 'put ''dHVybiAwO3ZhciBScj1NYXRoLm1pbihaZS5ub2RlLnVzZWRCeXRlcy1EbiwkdCk7aWYoUnI+OCYmY3Iuc3ViYXJyYXkpbHQuc2V0KGNyLnN1YmFycmF5KERuLERuK1JyKSxMdCk7ZWxzZSBmb3IodmFyIFhyPTA7WHI8UnI7WHIrKylsdFtMdCtYcl09Y3JbRG4rWHJdO3JldHVybiBScn0sd3Jp''@;'; put 'put ''dGUoWmUsbHQsTHQsJHQsRG4sY3Ipe2lmKGx0LmJ1ZmZlcj09PXRuLmJ1ZmZlciYmKGNyPSExKSwhJHQpcmV0dXJuIDA7dmFyIFJyPVplLm5vZGU7aWYoUnIudGltZXN0YW1wPURhdGUubm93KCksbHQuc3ViYXJyYXkmJighUnIuY29udGVudHN8fFJyLmNvbnRlbnRzLnN1YmFycmF5KSl7aWYo''@;'; put 'put ''Y3IpcmV0dXJuIFJyLmNvbnRlbnRzPWx0LnN1YmFycmF5KEx0LEx0KyR0KSxSci51c2VkQnl0ZXM9JHQsJHQ7aWYoMD09PVJyLnVzZWRCeXRlcyYmMD09PURuKXJldHVybiBSci5jb250ZW50cz1sdC5zbGljZShMdCxMdCskdCksUnIudXNlZEJ5dGVzPSR0LCR0O2lmKERuKyR0PD1Sci51c2Vk''@;'; put 'put ''Qnl0ZXMpcmV0dXJuIFJyLmNvbnRlbnRzLnNldChsdC5zdWJhcnJheShMdCxMdCskdCksRG4pLCR0fWlmKCRhLmV4cGFuZEZpbGVTdG9yYWdlKFJyLERuKyR0KSxSci5jb250ZW50cy5zdWJhcnJheSYmbHQuc3ViYXJyYXkpUnIuY29udGVudHMuc2V0KGx0LnN1YmFycmF5KEx0LEx0KyR0KSxE''@;'; put 'put ''bik7ZWxzZSBmb3IodmFyIFhyPTA7WHI8JHQ7WHIrKylSci5jb250ZW50c1tEbitYcl09bHRbTHQrWHJdO3JldHVybiBSci51c2VkQnl0ZXM9TWF0aC5tYXgoUnIudXNlZEJ5dGVzLERuKyR0KSwkdH0sbGxzZWVrKFplLGx0LEx0KXt2YXIgJHQ9bHQ7aWYoMT09PUx0PyR0Kz1aZS5wb3NpdGlv''@;'; put 'put ''bjoyPT09THQmJll0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYoJHQrPVplLm5vZGUudXNlZEJ5dGVzKSwkdDwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gJHR9LGFsbG9jYXRlKFplLGx0LEx0KXskYS5leHBhbmRGaWxlU3RvcmFnZShaZS5ub2RlLGx0K0x0KSxaZS5ub2Rl''@;'; put 'put ''LnVzZWRCeXRlcz1NYXRoLm1heChaZS5ub2RlLnVzZWRCeXRlcyxsdCtMdCl9LG1tYXAoWmUsbHQsTHQsJHQsRG4pe2lmKCFZdC5pc0ZpbGUoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7dmFyIGNyLFJyLFhyPVplLm5vZGUuY29udGVudHM7aWYoMiZEbnx8IVhy''@;'; put 'put ''fHxYci5idWZmZXIhPT10bi5idWZmZXIpe2lmKFJyPSEwLCEoY3I9VU4obHQpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0OCk7WHImJigoTHQ+MHx8THQrbHQ8WHIubGVuZ3RoKSYmKFhyPVhyLnN1YmFycmF5P1hyLnN1YmFycmF5KEx0LEx0K2x0KTpBcnJheS5wcm90b3R5cGUuc2xpY2Uu''@;'; put 'put ''Y2FsbChYcixMdCxMdCtsdCkpLHRuLnNldChYcixjcikpfWVsc2UgUnI9ITEsY3I9WHIuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmNyLGFsbG9jYXRlZDpScn19LG1zeW5jOihaZSxsdCxMdCwkdCxEbik9PigkYS5zdHJlYW1fb3BzLndyaXRlKFplLGx0LDAsJHQsTHQsITEpLDApfX0sWk49W10s''@;'; put 'put ''QkE9KFplLGx0KT0+e3ZhciBMdD0wO3JldHVybiBaZSYmKEx0fD0zNjUpLGx0JiYoTHR8PTE0NiksTHR9LFl0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEs''@;'; put 'put ''aWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tuYW1lPSJFcnJub0Vycm9yIjtjb25zdHJ1Y3RvcihaZSl7dGhpcy5lcnJubz1aZX19LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxGU1N0cmVhbTpjbGFzc3tzaGFyZWQ9e307Z2V0IG9iamVjdCgpe3JldHVy''@;'; put 'put ''biB0aGlzLm5vZGV9c2V0IG9iamVjdChaZSl7dGhpcy5ub2RlPVplfWdldCBpc1JlYWQoKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9Z2V0IGlzV3JpdGUoKXtyZXR1cm4hISgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc0FwcGVuZCgpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9''@;'; put 'put ''Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhaZSl7dGhpcy5zaGFyZWQuZmxhZ3M9WmV9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihaZSl7dGhpcy5zaGFyZWQucG9zaXRpb249WmV9fSxGU05vZGU6''@;'; put 'put ''Y2xhc3N7bm9kZV9vcHM9e307c3RyZWFtX29wcz17fTtyZWFkTW9kZT0zNjU7d3JpdGVNb2RlPTE0Njttb3VudGVkPW51bGw7Y29uc3RydWN0b3IoWmUsbHQsTHQsJHQpe1plfHwoWmU9dGhpcyksdGhpcy5wYXJlbnQ9WmUsdGhpcy5tb3VudD1aZS5tb3VudCx0aGlzLmlkPVl0Lm5leHRJbm9k''@;'; put 'put ''ZSsrLHRoaXMubmFtZT1sdCx0aGlzLm1vZGU9THQsdGhpcy5yZGV2PSR0fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoWmUpe1plP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRN''@;'; put 'put ''b2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKFplKXtaZT90aGlzLm1vZGV8PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRlcigpe3JldHVybiBZdC5pc0Rp''@;'; put 'put ''cih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBZdC5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChaZSxsdD17fSl7aWYoIShaZT16cy5yZXNvbHZlKFplKSkpcmV0dXJue3BhdGg6IiIsbm9kZTpudWxsfTtpZigobHQ9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50''@;'; put 'put ''OiEwLHJlY3Vyc2VfY291bnQ6MH0sbHQpKS5yZWN1cnNlX2NvdW50PjgpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgJHQ9WmUuc3BsaXQoIi8iKS5maWx0ZXIoYWw9PiEhYWwpLERuPVl0LnJvb3QsY3I9Ii8iLFJyPTA7UnI8JHQubGVuZ3RoO1JyKyspe3ZhciBYcj1Scj09''@;'; put 'put ''PSR0Lmxlbmd0aC0xO2lmKFhyJiZsdC5wYXJlbnQpYnJlYWs7aWYoRG49WXQubG9va3VwTm9kZShEbiwkdFtScl0pLGNyPVFvLmpvaW4yKGNyLCR0W1JyXSksWXQuaXNNb3VudHBvaW50KERuKSYmKCFYcnx8WHImJmx0LmZvbGxvd19tb3VudCkmJihEbj1Ebi5tb3VudGVkLnJvb3QpLCFYcnx8''@;'; put 'put ''bHQuZm9sbG93KWZvcih2YXIga2E9MDtZdC5pc0xpbmsoRG4ubW9kZSk7KXt2YXIgR289WXQucmVhZGxpbmsoY3IpO2lmKGNyPXpzLnJlc29sdmUoUW8uZGlybmFtZShjciksR28pLERuPVl0Lmxvb2t1cFBhdGgoY3Ise3JlY3Vyc2VfY291bnQ6bHQucmVjdXJzZV9jb3VudCsxfSkubm9kZSxr''@;'; put 'put ''YSsrPjQwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMyKX19cmV0dXJue3BhdGg6Y3Isbm9kZTpEbn19LGdldFBhdGgoWmUpe2Zvcih2YXIgbHQ7Oyl7aWYoWXQuaXNSb290KFplKSl7dmFyIEx0PVplLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGx0PyIvIiE9PUx0W0x0Lmxlbmd0aC0xXT9g''@;'; put 'put ''JHtMdH0vJHtsdH1gOkx0K2x0Okx0fWx0PWx0P2Ake1plLm5hbWV9LyR7bHR9YDpaZS5uYW1lLFplPVplLnBhcmVudH19LGhhc2hOYW1lKFplLGx0KXtmb3IodmFyIEx0PTAsJHQ9MDskdDxsdC5sZW5ndGg7JHQrKylMdD0oTHQ8PDUpLUx0K2x0LmNoYXJDb2RlQXQoJHQpfDA7cmV0dXJuKFpl''@;'; put 'put ''K0x0Pj4+MCklWXQubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoWmUpe3ZhciBsdD1ZdC5oYXNoTmFtZShaZS5wYXJlbnQuaWQsWmUubmFtZSk7WmUubmFtZV9uZXh0PVl0Lm5hbWVUYWJsZVtsdF0sWXQubmFtZVRhYmxlW2x0XT1aZX0saGFzaFJlbW92ZU5vZGUoWmUpe3ZhciBsdD1Z''@;'; put 'put ''dC5oYXNoTmFtZShaZS5wYXJlbnQuaWQsWmUubmFtZSk7aWYoWXQubmFtZVRhYmxlW2x0XT09PVplKVl0Lm5hbWVUYWJsZVtsdF09WmUubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBMdD1ZdC5uYW1lVGFibGVbbHRdO0x0Oyl7aWYoTHQubmFtZV9uZXh0PT09WmUpe0x0Lm5hbWVfbmV4dD1aZS5u''@;'; put 'put ''YW1lX25leHQ7YnJlYWt9THQ9THQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShaZSxsdCl7dmFyIEx0PVl0Lm1heUxvb2t1cChaZSk7aWYoTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoTHQpO2Zvcih2YXIgJHQ9WXQuaGFzaE5hbWUoWmUuaWQsbHQpLERuPVl0Lm5hbWVUYWJsZVskdF07RG47''@;'; put 'put ''RG49RG4ubmFtZV9uZXh0KWlmKERuLnBhcmVudC5pZD09PVplLmlkJiZEbi5uYW1lPT09bHQpcmV0dXJuIERuO3JldHVybiBZdC5sb29rdXAoWmUsbHQpfSxjcmVhdGVOb2RlKFplLGx0LEx0LCR0KXt2YXIgRG49bmV3IFl0LkZTTm9kZShaZSxsdCxMdCwkdCk7cmV0dXJuIFl0Lmhhc2hBZGRO''@;'; put 'put ''b2RlKERuKSxEbn0sZGVzdHJveU5vZGUoWmUpe1l0Lmhhc2hSZW1vdmVOb2RlKFplKX0saXNSb290OlplPT5aZT09PVplLnBhcmVudCxpc01vdW50cG9pbnQ6WmU9PiEhWmUubW91bnRlZCxpc0ZpbGU6WmU9PjMyNzY4PT0oNjE0NDAmWmUpLGlzRGlyOlplPT4xNjM4ND09KDYxNDQwJlplKSxp''@;'; put 'put ''c0xpbms6WmU9PjQwOTYwPT0oNjE0NDAmWmUpLGlzQ2hyZGV2OlplPT44MTkyPT0oNjE0NDAmWmUpLGlzQmxrZGV2OlplPT4yNDU3Nj09KDYxNDQwJlplKSxpc0ZJRk86WmU9PjQwOTY9PSg2MTQ0MCZaZSksaXNTb2NrZXQ6WmU9PiEoNDkxNTImflplKSxmbGFnc1RvUGVybWlzc2lvblN0cmlu''@;'; put 'put ''ZyhaZSl7dmFyIGx0PVsiciIsInciLCJydyJdWzMmWmVdO3JldHVybiA1MTImWmUmJihsdCs9InciKSxsdH0sbm9kZVBlcm1pc3Npb25zOihaZSxsdCk9Pll0Lmlnbm9yZVBlcm1pc3Npb25zPzA6bHQuaW5jbHVkZXMoInIiKSYmISgyOTImWmUubW9kZSl8fGx0LmluY2x1ZGVzKCJ3IikmJiEo''@;'; put 'put ''MTQ2JlplLm1vZGUpfHxsdC5pbmNsdWRlcygieCIpJiYhKDczJlplLm1vZGUpPzI6MCxtYXlMb29rdXA6WmU9Pll0LmlzRGlyKFplLm1vZGUpP1l0Lm5vZGVQZXJtaXNzaW9ucyhaZSwieCIpfHwoWmUubm9kZV9vcHMubG9va3VwPzA6Mik6NTQsbWF5Q3JlYXRlKFplLGx0KXt0cnl7cmV0dXJu''@;'; put 'put ''IFl0Lmxvb2t1cE5vZGUoWmUsbHQpLDIwfWNhdGNoe31yZXR1cm4gWXQubm9kZVBlcm1pc3Npb25zKFplLCJ3eCIpfSxtYXlEZWxldGUoWmUsbHQsTHQpe3ZhciAkdDt0cnl7JHQ9WXQubG9va3VwTm9kZShaZSxsdCl9Y2F0Y2goY3Ipe3JldHVybiBjci5lcnJub312YXIgRG49WXQubm9kZVBl''@;'; put 'put ''cm1pc3Npb25zKFplLCJ3eCIpO2lmKERuKXJldHVybiBEbjtpZihMdCl7aWYoIVl0LmlzRGlyKCR0Lm1vZGUpKXJldHVybiA1NDtpZihZdC5pc1Jvb3QoJHQpfHxZdC5nZXRQYXRoKCR0KT09PVl0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKFl0LmlzRGlyKCR0Lm1vZGUpKXJldHVybiAzMTty''@;'; put 'put ''ZXR1cm4gMH0sbWF5T3BlbjooWmUsbHQpPT5aZT9ZdC5pc0xpbmsoWmUubW9kZSk/MzI6WXQuaXNEaXIoWmUubW9kZSkmJigiciIhPT1ZdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCl8fDUxMiZsdCk/MzE6WXQubm9kZVBlcm1pc3Npb25zKFplLFl0LmZsYWdzVG9QZXJtaXNzaW9uU3Ry''@;'; put 'put ''aW5nKGx0KSk6NDQsTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBaZT0wO1plPD1ZdC5NQVhfT1BFTl9GRFM7WmUrKylpZighWXQuc3RyZWFtc1taZV0pcmV0dXJuIFplO3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChaZSl7dmFyIGx0PVl0''@;'; put 'put ''LmdldFN0cmVhbShaZSk7aWYoIWx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO3JldHVybiBsdH0sZ2V0U3RyZWFtOlplPT5ZdC5zdHJlYW1zW1plXSxjcmVhdGVTdHJlYW06KFplLGx0PS0xKT0+KFplPU9iamVjdC5hc3NpZ24obmV3IFl0LkZTU3RyZWFtLFplKSwtMT09bHQmJihsdD1Z''@;'; put 'put ''dC5uZXh0ZmQoKSksWmUuZmQ9bHQsWXQuc3RyZWFtc1tsdF09WmUsWmUpLGNsb3NlU3RyZWFtKFplKXtZdC5zdHJlYW1zW1plXT1udWxsfSxkdXBTdHJlYW0oWmUsbHQ9LTEpe3ZhciBMdD1ZdC5jcmVhdGVTdHJlYW0oWmUsbHQpO3JldHVybiBMdC5zdHJlYW1fb3BzPy5kdXA/LihMdCksTHR9''@;'; put 'put ''LGNocmRldl9zdHJlYW1fb3BzOntvcGVuKFplKXt2YXIgbHQ9WXQuZ2V0RGV2aWNlKFplLm5vZGUucmRldik7WmUuc3RyZWFtX29wcz1sdC5zdHJlYW1fb3BzLFplLnN0cmVhbV9vcHMub3Blbj8uKFplKX0sbGxzZWVrKCl7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6WmU9''@;'; put 'put ''PlplPj44LG1pbm9yOlplPT4yNTUmWmUsbWFrZWRldjooWmUsbHQpPT5aZTw8OHxsdCxyZWdpc3RlckRldmljZShaZSxsdCl7WXQuZGV2aWNlc1taZV09e3N0cmVhbV9vcHM6bHR9fSxnZXREZXZpY2U6WmU9Pll0LmRldmljZXNbWmVdLGdldE1vdW50cyhaZSl7Zm9yKHZhciBsdD1bXSxMdD1b''@;'; put 'put ''WmVdO0x0Lmxlbmd0aDspe3ZhciAkdD1MdC5wb3AoKTtsdC5wdXNoKCR0KSxMdC5wdXNoKC4uLiR0Lm1vdW50cyl9cmV0dXJuIGx0fSxzeW5jZnMoWmUsbHQpeyJmdW5jdGlvbiI9PXR5cGVvZiBaZSYmKGx0PVplLFplPSExKSxZdC5zeW5jRlNSZXF1ZXN0cysrLFl0LnN5bmNGU1JlcXVlc3Rz''@;'; put 'put ''PjEmJnJ0KGB3YXJuaW5nOiAke1l0LnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrYCk7dmFyIEx0PVl0LmdldE1vdW50cyhZdC5yb290Lm1vdW50KSwkdD0wO2Z1bmN0aW9uIERuKFJy''@;'; put 'put ''KXtyZXR1cm4gWXQuc3luY0ZTUmVxdWVzdHMtLSxsdChScil9ZnVuY3Rpb24gY3IoUnIpe2lmKFJyKXJldHVybiBjci5lcnJvcmVkP3ZvaWQgMDooY3IuZXJyb3JlZD0hMCxEbihScikpOysrJHQ+PUx0Lmxlbmd0aCYmRG4obnVsbCl9THQuZm9yRWFjaChScj0+e2lmKCFSci50eXBlLnN5bmNm''@;'; put 'put ''cylyZXR1cm4gY3IobnVsbCk7UnIudHlwZS5zeW5jZnMoUnIsWmUsY3IpfSl9LG1vdW50KFplLGx0LEx0KXt2YXIgY3IsJHQ9Ii8iPT09THQsRG49IUx0O2lmKCR0JiZZdC5yb290KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtpZighJHQmJiFEbil7dmFyIFJyPVl0Lmxvb2t1cFBhdGgo''@;'; put 'put ''THQse2ZvbGxvd19tb3VudDohMX0pO2lmKEx0PVJyLnBhdGgsWXQuaXNNb3VudHBvaW50KGNyPVJyLm5vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtpZighWXQuaXNEaXIoY3IubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpfXZhciBYcj17dHlwZTpaZSxvcHRzOmx0''@;'; put 'put ''LG1vdW50cG9pbnQ6THQsbW91bnRzOltdfSxrYT1aZS5tb3VudChYcik7cmV0dXJuIGthLm1vdW50PVhyLFhyLnJvb3Q9a2EsJHQ/WXQucm9vdD1rYTpjciYmKGNyLm1vdW50ZWQ9WHIsY3IubW91bnQmJmNyLm1vdW50Lm1vdW50cy5wdXNoKFhyKSksa2F9LHVubW91bnQoWmUpe3ZhciBsdD1Z''@;'; put 'put ''dC5sb29rdXBQYXRoKFplLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighWXQuaXNNb3VudHBvaW50KGx0Lm5vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgTHQ9bHQubm9kZSwkdD1MdC5tb3VudGVkLERuPVl0LmdldE1vdW50cygkdCk7T2JqZWN0LmtleXMoWXQubmFtZVRhYmxl''@;'; put 'put ''KS5mb3JFYWNoKFJyPT57Zm9yKHZhciBYcj1ZdC5uYW1lVGFibGVbUnJdO1hyOyl7dmFyIGthPVhyLm5hbWVfbmV4dDtEbi5pbmNsdWRlcyhYci5tb3VudCkmJll0LmRlc3Ryb3lOb2RlKFhyKSxYcj1rYX19KSxMdC5tb3VudGVkPW51bGw7dmFyIGNyPUx0Lm1vdW50Lm1vdW50cy5pbmRleE9m''@;'; put 'put ''KCR0KTtMdC5tb3VudC5tb3VudHMuc3BsaWNlKGNyLDEpfSxsb29rdXA6KFplLGx0KT0+WmUubm9kZV9vcHMubG9va3VwKFplLGx0KSxta25vZChaZSxsdCxMdCl7dmFyIERuPVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGUsY3I9UW8uYmFzZW5hbWUoWmUpO2lmKCFjcnx8Ii4i''@;'; put 'put ''PT09Y3J8fCIuLiI9PT1jcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIFJyPVl0Lm1heUNyZWF0ZShEbixjcik7aWYoUnIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoUnIpO2lmKCFEbi5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIERu''@;'; put 'put ''Lm5vZGVfb3BzLm1rbm9kKERuLGNyLGx0LEx0KX0sc3RhdGZzKFplKXt2YXIgbHQ9e2JzaXplOjQwOTYsZnJzaXplOjQwOTYsYmxvY2tzOjFlNixiZnJlZTo1ZTUsYmF2YWlsOjVlNSxmaWxlczpZdC5uZXh0SW5vZGUsZmZyZWU6WXQubmV4dElub2RlLTEsZnNpZDo0MixmbGFnczoyLG5hbWVs''@;'; put 'put ''ZW46MjU1fSxMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO3JldHVybiBMdD8ubm9kZV9vcHMuc3RhdGZzJiZPYmplY3QuYXNzaWduKGx0LEx0Lm5vZGVfb3BzLnN0YXRmcyhMdC5tb3VudC5vcHRzLnJvb3QpKSxsdH0sY3JlYXRlOihaZSxsdD00MzgpPT4obHQmPTQwOTUs''@;'; put 'put ''WXQubWtub2QoWmUsbHR8PTMyNzY4LDApKSxta2RpcjooWmUsbHQ9NTExKT0+KGx0Jj0xMDIzLFl0Lm1rbm9kKFplLGx0fD0xNjM4NCwwKSksbWtkaXJUcmVlKFplLGx0KXtmb3IodmFyIEx0PVplLnNwbGl0KCIvIiksJHQ9IiIsRG49MDtEbjxMdC5sZW5ndGg7KytEbilpZihMdFtEbl0peyR0''@;'; put 'put ''Kz0iLyIrTHRbRG5dO3RyeXtZdC5ta2RpcigkdCxsdCl9Y2F0Y2goY3Ipe2lmKDIwIT1jci5lcnJubyl0aHJvdyBjcn19fSxta2RldjooWmUsbHQsTHQpPT4odHlwZW9mIEx0PiJ1IiYmKEx0PWx0LGx0PTQzOCksWXQubWtub2QoWmUsbHR8PTgxOTIsTHQpKSxzeW1saW5rKFplLGx0KXtpZigh''@;'; put 'put ''enMucmVzb2x2ZShaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdD1ZdC5sb29rdXBQYXRoKGx0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCEkdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyIERuPVFvLmJhc2VuYW1lKGx0KSxjcj1ZdC5tYXlDcmVhdGUoJHQsRG4p''@;'; put 'put ''O2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighJHQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuICR0Lm5vZGVfb3BzLnN5bWxpbmsoJHQsRG4sWmUpfSxyZW5hbWUoWmUsbHQpe3ZhciBYcixrYSxMdD1Rby5kaXJuYW1lKFpl''@;'; put 'put ''KSwkdD1Rby5kaXJuYW1lKGx0KSxEbj1Rby5iYXNlbmFtZShaZSksY3I9UW8uYmFzZW5hbWUobHQpO2lmKFhyPVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGUsa2E9WXQubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZSwhWHJ8fCFrYSl0aHJvdyBuZXcgWXQuRXJybm9F''@;'; put 'put ''cnJvcig0NCk7aWYoWHIubW91bnQhPT1rYS5tb3VudCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3NSk7dmFyIGFsLEdvPVl0Lmxvb2t1cE5vZGUoWHIsRG4pLEhzPXpzLnJlbGF0aXZlKFplLCR0KTtpZigiLiIhPT1Icy5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lm''@;'; put 'put ''KCIuIiE9PShIcz16cy5yZWxhdGl2ZShsdCxMdCkpLmNoYXJBdCgwKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NSk7dHJ5e2FsPVl0Lmxvb2t1cE5vZGUoa2EsY3IpfWNhdGNoe31pZihHbyE9PWFsKXt2YXIgZ3M9WXQuaXNEaXIoR28ubW9kZSkseG89WXQubWF5RGVsZXRlKFhyLERuLGdz''@;'; put 'put ''KTtpZih4byl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4byk7aWYoeG89YWw/WXQubWF5RGVsZXRlKGthLGNyLGdzKTpZdC5tYXlDcmVhdGUoa2EsY3IpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKHhvKTtpZighWHIubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYz''@;'; put 'put ''KTtpZihZdC5pc01vdW50cG9pbnQoR28pfHxhbCYmWXQuaXNNb3VudHBvaW50KGFsKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoa2EhPT1YciYmKHhvPVl0Lm5vZGVQZXJtaXNzaW9ucyhYciwidyIpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4byk7WXQuaGFzaFJlbW92ZU5v''@;'; put 'put ''ZGUoR28pO3RyeXtYci5ub2RlX29wcy5yZW5hbWUoR28sa2EsY3IpLEdvLnBhcmVudD1rYX1jYXRjaChxcyl7dGhyb3cgcXN9ZmluYWxseXtZdC5oYXNoQWRkTm9kZShHbyl9fX0scm1kaXIoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLCR0PVFvLmJhc2Vu''@;'; put 'put ''YW1lKFplKSxEbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxjcj1ZdC5tYXlEZWxldGUoTHQsJHQsITApO2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighTHQubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0LmlzTW91bnRwb2ludChEbikp''@;'; put 'put ''dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO0x0Lm5vZGVfb3BzLnJtZGlyKEx0LCR0KSxZdC5kZXN0cm95Tm9kZShEbil9LHJlYWRkaXIoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFMdC5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyBZdC5F''@;'; put 'put ''cnJub0Vycm9yKDU0KTtyZXR1cm4gTHQubm9kZV9vcHMucmVhZGRpcihMdCl9LHVubGluayhaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGU7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ9UW8uYmFzZW5hbWUoWmUpLERuPVl0Lmxv''@;'; put 'put ''b2t1cE5vZGUoTHQsJHQpLGNyPVl0Lm1heURlbGV0ZShMdCwkdCwhMSk7aWYoY3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoY3IpO2lmKCFMdC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0LmlzTW91bnRwb2ludChEbikpdGhyb3cgbmV3IFl0LkVy''@;'; put 'put ''cm5vRXJyb3IoMTApO0x0Lm5vZGVfb3BzLnVubGluayhMdCwkdCksWXQuZGVzdHJveU5vZGUoRG4pfSxyZWFkbGluayhaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUpLm5vZGU7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighTHQubm9kZV9vcHMucmVhZGxpbmspdGhy''@;'; put 'put ''b3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBMdC5ub2RlX29wcy5yZWFkbGluayhMdCl9LHN0YXQoWmUsbHQpe3ZhciAkdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IWx0fSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKCEkdC5ub2RlX29wcy5n''@;'; put 'put ''ZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gJHQubm9kZV9vcHMuZ2V0YXR0cigkdCl9LGxzdGF0OlplPT5ZdC5zdGF0KFplLCEwKSxjaG1vZChaZSxsdCxMdCl7dmFyICR0O2lmKCEoJHQ9InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtmb2xs''@;'; put 'put ''b3c6IUx0fSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7JHQubm9kZV9vcHMuc2V0YXR0cigkdCx7bW9kZTo0MDk1Jmx0fC00MDk2JiR0Lm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKFplLGx0KXtZdC5jaG1vZChaZSxs''@;'; put 'put ''dCwhMCl9LGZjaG1vZChaZSxsdCl7dmFyIEx0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO1l0LmNobW9kKEx0Lm5vZGUsbHQpfSxjaG93bihaZSxsdCxMdCwkdCl7dmFyIERuO2lmKCEoRG49InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ISR0fSkubm9kZTpa''@;'; put 'put ''ZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7RG4ubm9kZV9vcHMuc2V0YXR0cihEbix7dGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNob3duKFplLGx0LEx0KXtZdC5jaG93bihaZSxsdCxMdCwhMCl9LGZjaG93bihaZSxsdCxMdCl7dmFyICR0PVl0Lmdl''@;'; put 'put ''dFN0cmVhbUNoZWNrZWQoWmUpO1l0LmNob3duKCR0Lm5vZGUsbHQsTHQpfSx0cnVuY2F0ZShaZSxsdCl7aWYobHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEx0O2lmKCEoTHQ9InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2Rl''@;'; put 'put ''OlplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc0RpcihMdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMSk7aWYoIVl0LmlzRmlsZShMdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIERuPVl0Lm5vZGVQ''@;'; put 'put ''ZXJtaXNzaW9ucyhMdCwidyIpO2lmKERuKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKERuKTtMdC5ub2RlX29wcy5zZXRhdHRyKEx0LHtzaXplOmx0LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZShaZSxsdCl7dmFyIEx0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO2lmKCEoMjA5''@;'; put 'put ''NzE1NSZMdC5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO1l0LnRydW5jYXRlKEx0Lm5vZGUsbHQpfSx1dGltZShaZSxsdCxMdCl7dmFyIERuPVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pLm5vZGU7RG4ubm9kZV9vcHMuc2V0YXR0cihEbix7dGltZXN0YW1wOk1hdGgu''@;'; put 'put ''bWF4KGx0LEx0KX0pfSxvcGVuKFplLGx0LEx0PTQzOCl7aWYoIiI9PT1aZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyICR0O2lmKGx0PSJzdHJpbmciPT10eXBlb2YgbHQ/KFplPT57dmFyIEx0PXtyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9W1pl''@;'; put 'put ''XTtpZih0eXBlb2YgTHQ+InUiKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWxlIG9wZW4gbW9kZTogJHtaZX1gKTtyZXR1cm4gTHR9KShsdCk6bHQsTHQ9NjQmbHQ/NDA5NSZMdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2YgWmUpJHQ9WmU7ZWxzZXtaZT1Rby5ub3JtYWxpemUoWmUpO3Ry''@;'; put 'put ''eXskdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ISgxMzEwNzImbHQpfSkubm9kZX1jYXRjaHt9fXZhciBjcj0hMTtpZig2NCZsdClpZigkdCl7aWYoMTI4Jmx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIwKX1lbHNlICR0PVl0Lm1rbm9kKFplLEx0LDApLGNyPSEwO2lmKCEkdCl0aHJv''@;'; put 'put ''dyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoWXQuaXNDaHJkZXYoJHQubW9kZSkmJihsdCY9LTUxMyksNjU1MzYmbHQmJiFZdC5pc0RpcigkdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7aWYoIWNyKXt2YXIgUnI9WXQubWF5T3BlbigkdCxsdCk7aWYoUnIpdGhyb3cgbmV3''@;'; put 'put ''IFl0LkVycm5vRXJyb3IoUnIpfTUxMiZsdCYmIWNyJiZZdC50cnVuY2F0ZSgkdCwwKSxsdCY9LTEzMTcxMzt2YXIgWHI9WXQuY3JlYXRlU3RyZWFtKHtub2RlOiR0LHBhdGg6WXQuZ2V0UGF0aCgkdCksZmxhZ3M6bHQsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOiR0LnN0cmVh''@;'; put 'put ''bV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gWHIuc3RyZWFtX29wcy5vcGVuJiZYci5zdHJlYW1fb3BzLm9wZW4oWHIpLFhyfSxjbG9zZShaZSl7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO1plLmdldGRlbnRzJiYoWmUuZ2V0ZGVudHM9''@;'; put 'put ''bnVsbCk7dHJ5e1plLnN0cmVhbV9vcHMuY2xvc2UmJlplLnN0cmVhbV9vcHMuY2xvc2UoWmUpfWNhdGNoKGx0KXt0aHJvdyBsdH1maW5hbGx5e1l0LmNsb3NlU3RyZWFtKFplLmZkKX1aZS5mZD1udWxsfSxpc0Nsb3NlZDpaZT0+bnVsbD09PVplLmZkLGxsc2VlayhaZSxsdCxMdCl7aWYoWXQu''@;'; put 'put ''aXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKCFaZS5zZWVrYWJsZXx8IVplLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKTtpZigwIT1MdCYmMSE9THQmJjIhPUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4g''@;'; put 'put ''WmUucG9zaXRpb249WmUuc3RyZWFtX29wcy5sbHNlZWsoWmUsbHQsTHQpLFplLnVuZ290dGVuPVtdLFplLnBvc2l0aW9ufSxyZWFkKFplLGx0LEx0LCR0LERuKXtpZigkdDwwfHxEbjwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0''@;'; put 'put ''LkVycm5vRXJyb3IoOCk7aWYoMT09KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKFl0LmlzRGlyKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFaZS5zdHJlYW1fb3BzLnJlYWQpdGhyb3cgbmV3IFl0LkVycm5vRXJy''@;'; put 'put ''b3IoMjgpO3ZhciBjcj10eXBlb2YgRG48InUiO2lmKGNyKXtpZighWmUuc2Vla2FibGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49WmUucG9zaXRpb247dmFyIFJyPVplLnN0cmVhbV9vcHMucmVhZChaZSxsdCxMdCwkdCxEbik7cmV0dXJuIGNyfHwoWmUucG9zaXRpb24r''@;'; put 'put ''PVJyKSxScn0sd3JpdGUoWmUsbHQsTHQsJHQsRG4sY3Ipe2lmKCR0PDB8fERuPDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vy''@;'; put 'put ''cm9yKDgpO2lmKFl0LmlzRGlyKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFaZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtaZS5zZWVrYWJsZSYmMTAyNCZaZS5mbGFncyYmWXQubGxzZWVrKFplLDAsMik7dmFyIFJy''@;'; put 'put ''PXR5cGVvZiBEbjwidSI7aWYoUnIpe2lmKCFaZS5zZWVrYWJsZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9ZWxzZSBEbj1aZS5wb3NpdGlvbjt2YXIgWHI9WmUuc3RyZWFtX29wcy53cml0ZShaZSxsdCxMdCwkdCxEbixjcik7cmV0dXJuIFJyfHwoWmUucG9zaXRpb24rPVhyKSxYcn0s''@;'; put 'put ''YWxsb2NhdGUoWmUsbHQsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihsdDwwfHxMdDw9MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7aWYoISgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighWXQu''@;'; put 'put ''aXNGaWxlKFplLm5vZGUubW9kZSkmJiFZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighWmUuc3RyZWFtX29wcy5hbGxvY2F0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMzgpO1plLnN0cmVhbV9vcHMuYWxsb2NhdGUoWmUsbHQsTHQpfSxt''@;'; put 'put ''bWFwKFplLGx0LEx0LCR0LERuKXtpZigyJiR0JiYhKDImRG4pJiYyIT0oMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKCFaZS5zdHJlYW1fb3BzLm1tYXApdGhy''@;'; put 'put ''b3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnN0cmVhbV9vcHMubW1hcChaZSxsdCxMdCwkdCxEbil9LG1zeW5jOihaZSxsdCxMdCwkdCxEbik9PlplLnN0cmVhbV9vcHMubXN5bmM/WmUuc3RyZWFtX29wcy5tc3lu''@;'; put 'put ''YyhaZSxsdCxMdCwkdCxEbik6MCxpb2N0bChaZSxsdCxMdCl7aWYoIVplLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTkpO3JldHVybiBaZS5zdHJlYW1fb3BzLmlvY3RsKFplLGx0LEx0KX0scmVhZEZpbGUoWmUsbHQ9e30pe2lmKGx0LmZsYWdzPWx0LmZsYWdz''@;'; put 'put ''fHwwLGx0LmVuY29kaW5nPWx0LmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1sdC5lbmNvZGluZyYmImJpbmFyeSIhPT1sdC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtsdC5lbmNvZGluZ30iYCk7dmFyIEx0LCR0PVl0Lm9wZW4oWmUsbHQu''@;'; put 'put ''ZmxhZ3MpLGNyPVl0LnN0YXQoWmUpLnNpemUsUnI9bmV3IFVpbnQ4QXJyYXkoY3IpO3JldHVybiBZdC5yZWFkKCR0LFJyLDAsY3IsMCksInV0ZjgiPT09bHQuZW5jb2Rpbmc/THQ9S3MoUnIpOiJiaW5hcnkiPT09bHQuZW5jb2RpbmcmJihMdD1SciksWXQuY2xvc2UoJHQpLEx0fSx3cml0ZUZp''@;'; put 'put ''bGUoWmUsbHQsTHQ9e30pe0x0LmZsYWdzPUx0LmZsYWdzfHw1Nzc7dmFyICR0PVl0Lm9wZW4oWmUsTHQuZmxhZ3MsTHQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiBsdCl7dmFyIERuPW5ldyBVaW50OEFycmF5KGVzKGx0KSsxKSxjcj1FMShsdCxEbiwwLERuLmxlbmd0aCk7WXQud3JpdGUo''@;'; put 'put ''JHQsRG4sMCxjcix2b2lkIDAsTHQuY2FuT3duKX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcobHQpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7WXQud3JpdGUoJHQsbHQsMCxsdC5ieXRlTGVuZ3RoLHZvaWQgMCxMdC5jYW5Pd24pfVl0LmNsb3NlKCR0KX0s''@;'; put 'put ''Y3dkOigpPT5ZdC5jdXJyZW50UGF0aCxjaGRpcihaZSl7dmFyIGx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pO2lmKG51bGw9PT1sdC5ub2RlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighWXQuaXNEaXIobHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJv''@;'; put 'put ''cig1NCk7dmFyIEx0PVl0Lm5vZGVQZXJtaXNzaW9ucyhsdC5ub2RlLCJ4Iik7aWYoTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoTHQpO1l0LmN1cnJlbnRQYXRoPWx0LnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe1l0Lm1rZGlyKCIvdG1wIiksWXQubWtkaXIoIi9ob21lIiks''@;'; put 'put ''WXQubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7WXQubWtkaXIoIi9kZXYiKSxZdC5yZWdpc3RlckRldmljZShZdC5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KCR0LERuLGNyLFJyLFhyKT0+UnIsbGxzZWVrOigpPT4wfSksWXQubWtkZXYo''@;'; put 'put ''Ii9kZXYvbnVsbCIsWXQubWFrZWRldigxLDMpKSxkNC5yZWdpc3RlcihZdC5tYWtlZGV2KDUsMCksZDQuZGVmYXVsdF90dHlfb3BzKSxkNC5yZWdpc3RlcihZdC5tYWtlZGV2KDYsMCksZDQuZGVmYXVsdF90dHkxX29wcyksWXQubWtkZXYoIi9kZXYvdHR5IixZdC5tYWtlZGV2KDUsMCkpLFl0''@;'; put 'put ''Lm1rZGV2KCIvZGV2L3R0eTEiLFl0Lm1ha2VkZXYoNiwwKSk7dmFyIFplPW5ldyBVaW50OEFycmF5KDEwMjQpLGx0PTAsTHQ9KCk9PigwPT09bHQmJihsdD1hZChaZSkuYnl0ZUxlbmd0aCksWmVbLS1sdF0pO1l0LmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsTHQpLFl0LmNyZWF0ZURl''@;'; put 'put ''dmljZSgiL2RldiIsInVyYW5kb20iLEx0KSxZdC5ta2RpcigiL2Rldi9zaG0iKSxZdC5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rvcmllcygpe1l0Lm1rZGlyKCIvcHJvYyIpO3ZhciBaZT1ZdC5ta2RpcigiL3Byb2Mvc2VsZiIpO1l0Lm1rZGlyKCIvcHJvYy9z''@;'; put 'put ''ZWxmL2ZkIiksWXQubW91bnQoe21vdW50KCl7dmFyIGx0PVl0LmNyZWF0ZU5vZGUoWmUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIGx0Lm5vZGVfb3BzPXtsb29rdXAoTHQsJHQpe3ZhciBjcj1ZdC5nZXRTdHJlYW1DaGVja2VkKCskdCksUnI9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50''@;'; put 'put ''OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5jci5wYXRofX07cmV0dXJuIFJyLnBhcmVudD1ScixScn19LGx0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKFplLGx0LEx0KXtaZT9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsWmUpOll0''@;'; put 'put ''LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLGx0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxsdCk6WXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZG91dCIpLEx0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxMdCk6WXQuc3lt''@;'; put 'put ''bGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxZdC5vcGVuKCIvZGV2L3N0ZGluIiwwKSxZdC5vcGVuKCIvZGV2L3N0ZG91dCIsMSksWXQub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WXQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxZdC5tb3VudCgkYSx7fSwi''@;'; put 'put ''LyIpLFl0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLFl0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksWXQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksWXQuZmlsZXN5c3RlbXM9e01FTUZTOiRhfX0saW5pdChaZSxsdCxMdCl7WXQuaW5pdGlhbGl6ZWQ9ITAsWXQuY3JlYXRlU3RhbmRh''@;'; put 'put ''cmRTdHJlYW1zKFplLGx0LEx0KX0scXVpdCgpe1l0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgWmU9MDtaZTxZdC5zdHJlYW1zLmxlbmd0aDtaZSsrKXt2YXIgbHQ9WXQuc3RyZWFtc1taZV07bHQmJll0LmNsb3NlKGx0KX19LGZpbmRPYmplY3QoWmUsbHQpe3ZhciBMdD1ZdC5hbmFseXplUGF0''@;'; put 'put ''aChaZSxsdCk7cmV0dXJuIEx0LmV4aXN0cz9MdC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoWmUsbHQpe3RyeXtaZT0oTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pKS5wYXRofWNhdGNoe312YXIgJHQ9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJyb3I6MCxuYW1lOm51bGwscGF0''@;'; put 'put ''aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSk7JHQucGFyZW50RXhpc3RzPSEwLCR0LnBhcmVudFBhdGg9THQucGF0aCwkdC5wYXJlbnRPYmpl''@;'; put 'put ''Y3Q9THQubm9kZSwkdC5uYW1lPVFvLmJhc2VuYW1lKFplKSxMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IWx0fSksJHQuZXhpc3RzPSEwLCR0LnBhdGg9THQucGF0aCwkdC5vYmplY3Q9THQubm9kZSwkdC5uYW1lPUx0Lm5vZGUubmFtZSwkdC5pc1Jvb3Q9Ii8iPT09THQucGF0aH1jYXRj''@;'; put 'put ''aChEbil7JHQuZXJyb3I9RG4uZXJybm99cmV0dXJuICR0fSxjcmVhdGVQYXRoKFplLGx0LEx0LCR0KXtaZT0ic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpO2Zvcih2YXIgRG49bHQuc3BsaXQoIi8iKS5yZXZlcnNlKCk7RG4ubGVuZ3RoOyl7dmFyIGNyPURuLnBvcCgpO2lm''@;'; put 'put ''KGNyKXt2YXIgUnI9UW8uam9pbjIoWmUsY3IpO3RyeXtZdC5ta2RpcihScil9Y2F0Y2h7fVplPVJyfX1yZXR1cm4gUnJ9LGNyZWF0ZUZpbGUoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1Rby5qb2luMigic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpLGx0KSxScj1CQSgkdCxE''@;'; put 'put ''bik7cmV0dXJuIFl0LmNyZWF0ZShjcixScil9LGNyZWF0ZURhdGFGaWxlKFplLGx0LEx0LCR0LERuLGNyKXt2YXIgUnI9bHQ7WmUmJihaZT0ic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpLFJyPWx0P1FvLmpvaW4yKFplLGx0KTpaZSk7dmFyIFhyPUJBKCR0LERuKSxrYT1Z''@;'; put 'put ''dC5jcmVhdGUoUnIsWHIpO2lmKEx0KXtpZigic3RyaW5nIj09dHlwZW9mIEx0KXtmb3IodmFyIEdvPW5ldyBBcnJheShMdC5sZW5ndGgpLEhzPTAsYWw9THQubGVuZ3RoO0hzPGFsOysrSHMpR29bSHNdPUx0LmNoYXJDb2RlQXQoSHMpO0x0PUdvfVl0LmNobW9kKGthLDE0NnxYcik7dmFyIGdz''@;'; put 'put ''PVl0Lm9wZW4oa2EsNTc3KTtZdC53cml0ZShncyxMdCwwLEx0Lmxlbmd0aCwwLGNyKSxZdC5jbG9zZShncyksWXQuY2htb2Qoa2EsWHIpfX0sY3JlYXRlRGV2aWNlKFplLGx0LEx0LCR0KXt2YXIgRG49UW8uam9pbjIoInN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxsdCks''@;'; put 'put ''Y3I9QkEoISFMdCwhISR0KTtZdC5jcmVhdGVEZXZpY2UubWFqb3I/Pz02NDt2YXIgUnI9WXQubWFrZWRldihZdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gWXQucmVnaXN0ZXJEZXZpY2UoUnIse29wZW4oWHIpe1hyLnNlZWthYmxlPSExfSxjbG9zZShYcil7JHQ/LmJ1ZmZlcj8u''@;'; put 'put ''bGVuZ3RoJiYkdCgxMCl9LHJlYWQoWHIsa2EsR28sSHMsYWwpe2Zvcih2YXIgZ3M9MCx4bz0wO3hvPEhzO3hvKyspe3ZhciBxczt0cnl7cXM9THQoKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09cXMmJjA9PT1ncyl0aHJvdyBuZXcgWXQuRXJybm9FcnJv''@;'; put 'put ''cig2KTtpZihudWxsPT1xcylicmVhaztncysrLGthW0dvK3hvXT1xc31yZXR1cm4gZ3MmJihYci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxnc30sd3JpdGUoWHIsa2EsR28sSHMsYWwpe2Zvcih2YXIgZ3M9MDtnczxIcztncysrKXRyeXskdChrYVtHbytnc10pfWNhdGNoe3Rocm93IG5l''@;'; put 'put ''dyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gSHMmJihYci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxnc319KSxZdC5ta2RldihEbixjcixScil9LGZvcmNlTG9hZEZpbGUoWmUpe2lmKFplLmlzRGV2aWNlfHxaZS5pc0ZvbGRlcnx8WmUubGlua3x8WmUuY29udGVudHMpcmV0dXJuITA7''@;'; put 'put ''aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdl''@;'; put 'put ''YiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO3RyeXtaZS5jb250ZW50cz1CZShaZS51cmwpLFplLnVzZWRCeXRlcz1aZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3Io''@;'; put 'put ''MjkpfX0sY3JlYXRlTGF6eUZpbGUoWmUsbHQsTHQsJHQsRG4pe2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3Ig''@;'; put 'put ''LS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIFhyLGthPVl0LmNyZWF0ZUZpbGUoWmUsbHQsWHI9e2lzRGV2aWNlOiExLHVybDpMdH0sJHQsRG4pO1hyLmNvbnRlbnRzP2thLmNvbnRlbnRzPVhyLmNvbnRlbnRzOlhyLnVybCYmKGthLmNvbnRlbnRzPW51bGwsa2EudXJsPVhyLnVybCksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnRpZXMoa2Ese3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgR289e307ZnVuY3Rpb24gYWwoZ3MseG8scXMsQTEsVDMpe3ZhciBXaD1ncy5ub2RlLmNvbnRlbnRzO2lmKFQzPj1XaC5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIDA7dmFyIEEzPU1hdGgubWluKFdoLmxlbmd0aC1UMyxBMSk7aWYoV2guc2xpY2UpZm9yKHZhciBrMz0wO2szPEEzO2szKyspeG9bcXMrazNdPVdoW1QzK2szXTtlbHNlIGZvcihrMz0wO2szPEEzO2szKyspeG9bcXMrazNdPVdoLmdldChUMytrMyk7cmV0dXJuIEEzfXJldHVybiBPYmpl''@;'; put 'put ''Y3Qua2V5cyhrYS5zdHJlYW1fb3BzKS5mb3JFYWNoKGdzPT57dmFyIHhvPWthLnN0cmVhbV9vcHNbZ3NdO0dvW2dzXT0oLi4ucXMpPT4oWXQuZm9yY2VMb2FkRmlsZShrYSkseG8oLi4ucXMpKX0pLEdvLnJlYWQ9KGdzLHhvLHFzLEExLFQzKT0+KFl0LmZvcmNlTG9hZEZpbGUoa2EpLGFsKGdz''@;'; put 'put ''LHhvLHFzLEExLFQzKSksR28ubW1hcD0oZ3MseG8scXMsQTEsVDMpPT57WXQuZm9yY2VMb2FkRmlsZShrYSk7dmFyIFdoPVVOKHhvKTtpZighV2gpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDgpO3JldHVybiBhbChncyx0bixXaCx4byxxcykse3B0cjpXaCxhbGxvY2F0ZWQ6ITB9fSxrYS5z''@;'; put 'put ''dHJlYW1fb3BzPUdvLGthfX0sdjA9KFplLGx0KT0+WmU/S3MoTW4sWmUsbHQpOiIiLFVzPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoWmUsbHQsTHQpe2lmKFFvLmlzQWJzKGx0KSlyZXR1cm4gbHQ7dmFyICR0O2lmKCR0PS0xMDA9PT1aZT9ZdC5jd2QoKTpVcy5nZXRTdHJlYW1G''@;'; put 'put ''cm9tRkQoWmUpLnBhdGgsMD09bHQubGVuZ3RoKXtpZighTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3JldHVybiAkdH1yZXR1cm4gUW8uam9pbjIoJHQsbHQpfSxkb1N0YXQoWmUsbHQsTHQpe3ZhciAkdD1aZShsdCk7bXJbTHQ+PjJdPSR0LmRldixtcltMdCs0Pj4yXT0kdC5tb2Rl''@;'; put 'put ''LEduW0x0Kzg+PjJdPSR0Lm5saW5rLG1yW0x0KzEyPj4yXT0kdC51aWQsbXJbTHQrMTY+PjJdPSR0LmdpZCxtcltMdCsyMD4+Ml09JHQucmRldixhYT1bJHQuc2l6ZT4+PjAsKFpyPSR0LnNpemUsK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+''@;'; put 'put ''fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzI0Pj4yXT1hYVswXSxtcltMdCsyOD4+Ml09YWFbMV0sbXJbTHQrMzI+PjJdPTQwOTYsbXJbTHQrMzY+PjJdPSR0LmJsb2Nrczt2YXIgRG49JHQuYXRpbWUuZ2V0VGltZSgpLGNyPSR0Lm10aW1l''@;'; put 'put ''LmdldFRpbWUoKSxScj0kdC5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIGFhPVtNYXRoLmZsb29yKERuLzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKERuLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5a''@;'; put 'put ''cj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzQwPj4yXT1hYVswXSxtcltMdCs0ND4+Ml09YWFbMV0sR25bTHQrNDg+PjJdPURuJTFlMyoxZTMqMWUzLGFhPVtNYXRoLmZsb29yKGNyLzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKGNyLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4w''@;'; put 'put ''PytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzU2Pj4yXT1hYVswXSxtcltMdCs2MD4+Ml09YWFbMV0sR25bTHQrNjQ+PjJdPWNyJTFlMyoxZTMqMWUzLGFhPVtNYXRoLmZsb29yKFJy''@;'; put 'put ''LzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKFJyLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLG1yW0x0KzcyPj4yXT1hYVswXSxtcltMdCs3Nj4+''@;'; put 'put ''Ml09YWFbMV0sR25bTHQrODA+PjJdPVJyJTFlMyoxZTMqMWUzLGFhPVskdC5pbm8+Pj4wLChacj0kdC5pbm8sK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCld''@;'; put 'put ''LG1yW0x0Kzg4Pj4yXT1hYVswXSxtcltMdCs5Mj4+Ml09YWFbMV0sMH0sZG9Nc3luYyhaZSxsdCxMdCwkdCxEbil7aWYoIVl0LmlzRmlsZShsdC5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZigyJiR0KXJldHVybiAwO3ZhciBjcj1Nbi5zbGljZShaZSxaZStMdCk7''@;'; put 'put ''WXQubXN5bmMobHQsY3IsRG4sTHQsJHQpfSxnZXRTdHJlYW1Gcm9tRkQ6WmU9Pll0LmdldFN0cmVhbUNoZWNrZWQoWmUpLHZhcmFyZ3M6dm9pZCAwLGdldFN0cjpaZT0+djAoWmUpfSxFNj0oKT0+e3ZhciBaZT1tclsrVXMudmFyYXJncz4+Ml07cmV0dXJuIFVzLnZhcmFyZ3MrPTQsWmV9LHRn''@;'; put 'put ''PUU2LGF2PShaZSxsdCxMdCk9PkUxKFplLE1uLGx0LEx0KSxaaD0oWmUsbHQpPT5sdCsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhWmU/KFplPj4+MCkrNDI5NDk2NzI5NipsdDpOYU4sa3c9W10sekR0PVplPT57dmFyIEx0PShaZS1kdC5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzZ8MDt0''@;'; put 'put ''cnl7cmV0dXJuIGR0Lmdyb3coTHQpLE9uKCksMX1jYXRjaHt9fSxZdGU9e30sekE9KCk9PntpZighekEuc3RyaW5ncyl7dmFyIGx0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsXzoiLi90aGlzLnByb2dyYW0ifTtmb3IodmFyIEx0IGluIFl0ZSl2b2lkIDA9PT1ZdGVbTHRdP2RlbGV0ZSBsdFtMdF06''@;'; put 'put ''bHRbTHRdPVl0ZVtMdF07dmFyICR0PVtdO2Zvcih2YXIgTHQgaW4gbHQpJHQucHVzaChgJHtMdH09JHtsdFtMdF19YCk7ekEuc3RyaW5ncz0kdH1yZXR1cm4gekEuc3RyaW5nc307WXQuY3JlYXRlUHJlbG9hZGVkRmlsZT0oWmUsbHQsTHQsJHQsRG4sY3IsUnIsWHIsa2EsR28pPT57dmFyIEhz''@;'; put 'put ''PWx0P3pzLnJlc29sdmUoUW8uam9pbjIoWmUsbHQpKTpaZTtmdW5jdGlvbiBncyh4byl7ZnVuY3Rpb24gcXMoQTEpe0dvPy4oKSxYcnx8KChaZSxsdCxMdCwkdCxEbixjcik9PntZdC5jcmVhdGVEYXRhRmlsZShaZSxsdCxMdCwkdCxEbixjcil9KShaZSxsdCxBMSwkdCxEbixrYSksY3I/Ligp''@;'; put 'put ''LEhyKCl9KChaZSxsdCxMdCwkdCk9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBEbj0hMTtyZXR1cm4gWk4uZm9yRWFjaChjcj0+e0RufHxjci5jYW5IYW5kbGUobHQpJiYoY3IuaGFuZGxlKFplLGx0LEx0LCR0KSxEbj0hMCl9KSxEbn0pKHhvLEhzLHFzLCgpPT57''@;'; put 'put ''UnI/LigpLEhyKCl9KXx8cXMoeG8pfWFyKCksInN0cmluZyI9PXR5cGVvZiBMdD8oKFplLGx0LEx0LCR0KT0+e3ZhciBEbj1gYWwgJHtaZX1gOyh2b2lkIDApKFplKS50aGVuKGNyPT57bHQobmV3IFVpbnQ4QXJyYXkoY3IpKSxEbiYmSHIoKX0sY3I9PntpZighTHQpdGhyb3dgTG9hZGluZyBk''@;'; put 'put ''YXRhIGZpbGUgIiR7WmV9IiBmYWlsZWQuYDtMdCgpfSksRG4mJmFyKCl9KShMdCxncyxScik6Z3MoTHQpfSxZdC5zdGF0aWNJbml0KCksJGEuZG9lc05vdEV4aXN0RXJyb3I9bmV3IFl0LkVycm5vRXJyb3IoNDQpLCRhLmRvZXNOb3RFeGlzdEVycm9yLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwg''@;'; put 'put ''bm8gc3RhY2s+Ijt2YXIgUU4saUl0PXthOihaZSxsdCxMdCk9Pnt0aHJvdyBuZXcgcHMoWmUpLmluaXQobHQsTHQpLFplfSxpOmZ1bmN0aW9uIEdOKFplLGx0LEx0LCR0KXt0cnl7aWYobHQ9VXMuZ2V0U3RyKGx0KSxsdD1Vcy5jYWxjdWxhdGVBdChaZSxsdCksLTgmTHQpcmV0dXJuLTI4O3Zh''@;'; put 'put ''ciBjcj1ZdC5sb29rdXBQYXRoKGx0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFjcilyZXR1cm4tNDQ7dmFyIFJyPSIiO3JldHVybiA0Jkx0JiYoUnIrPSJyIiksMiZMdCYmKFJyKz0idyIpLDEmTHQmJihScis9IngiKSxSciYmWXQubm9kZVBlcm1pc3Npb25zKGNyLFJyKT8tMjowfWNhdGNoKFhy''@;'; put 'put ''KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybi1Yci5lcnJub319LGY6ZnVuY3Rpb24gRTMoWmUsbHQsTHQpe1VzLnZhcmFyZ3M9THQ7dHJ5e3ZhciAkdD1Vcy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3N3aXRjaChsdCl7Y2FzZSAwOmlmKChE''@;'; put 'put ''bj1FNigpKTwwKXJldHVybi0yODtmb3IoO1l0LnN0cmVhbXNbRG5dOylEbisrO3JldHVybiBZdC5kdXBTdHJlYW0oJHQsRG4pLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSAxMzpjYXNlIDE0OnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gJHQuZmxhZ3M7Y2FzZSA0OnZhciBEbj1FNigpO3JldHVybiAk''@;'; put 'put ''dC5mbGFnc3w9RG4sMDtjYXNlIDEyOnJldHVybiBEbj10ZygpLHdyW0RuKzA+PjFdPTIsMH1yZXR1cm4tMjh9Y2F0Y2goWHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVhyLm5hbWUpdGhyb3cgWHI7cmV0dXJuLVhyLmVycm5vfX0seDpmdW5jdGlvbiAkTihaZSxsdCl7dHJ5''@;'; put 'put ''e3ZhciBMdD1Vcy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiBVcy5kb1N0YXQoWXQuc3RhdCxMdC5wYXRoLGx0KX1jYXRjaCgkdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09JHQubmFtZSl0aHJvdyAkdDtyZXR1cm4tJHQuZXJybm99fSxrOmZ1bmN0aW9uIEtOKFplLGx0''@;'; put 'put ''LEx0KXtVcy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9VXMuZ2V0U3RyZWFtRnJvbUZEKFplKTtzd2l0Y2gobHQpe2Nhc2UgMjE1MDk6Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUyNDpjYXNlIDIxNTE1OnJldHVybiAkdC50dHk/MDotNTk7Y2FzZSAyMTUwNTppZigh''@;'; put 'put ''JHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIERuPSR0LnR0eS5vcHMuaW9jdGxfdGNnZXRzKCR0KSxjcj10ZygpO21yW2NyPj4yXT1Ebi5jX2lmbGFnfHwwLG1yW2NyKzQ+PjJdPURuLmNfb2ZsYWd8fDAsbXJbY3IrOD4+Ml09RG4uY19jZmxhZ3x8MCxt''@;'; put 'put ''cltjcisxMj4+Ml09RG4uY19sZmxhZ3x8MDtmb3IodmFyIFJyPTA7UnI8MzI7UnIrKyl0bltjcitScisxN109RG4uY19jY1tScl18fDA7cmV0dXJuIDB9cmV0dXJuIDA7Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1MDg6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5p''@;'; put 'put ''b2N0bF90Y3NldHMpe2NyPXRnKCk7dmFyIFhyPW1yW2NyPj4yXSxrYT1tcltjcis0Pj4yXSxHbz1tcltjcis4Pj4yXSxIcz1tcltjcisxMj4+Ml0sYWw9W107Zm9yKFJyPTA7UnI8MzI7UnIrKylhbC5wdXNoKHRuW2NyK1JyKzE3XSk7cmV0dXJuICR0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKCR0''@;'; put 'put ''LnR0eSxsdCx7Y19pZmxhZzpYcixjX29mbGFnOmthLGNfY2ZsYWc6R28sY19sZmxhZzpIcyxjX2NjOmFsfSl9cmV0dXJuIDA7Y2FzZSAyMTUxOTpyZXR1cm4gJHQudHR5Pyhjcj10ZygpLG1yW2NyPj4yXT0wLDApOi01OTtjYXNlIDIxNTIwOnJldHVybiAkdC50dHk/LTI4Oi01OTtjYXNlIDIx''@;'; put 'put ''NTMxOnJldHVybiBjcj10ZygpLFl0LmlvY3RsKCR0LGx0LGNyKTtjYXNlIDIxNTIzOmlmKCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIGdzPSR0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeigkdC50dHkpO2NyPXRnKCksd3JbY3I+PjFdPWdz''@;'; put 'put ''WzBdLHdyW2NyKzI+PjFdPWdzWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaCh4byl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09eG8ubmFtZSl0aHJvdyB4bztyZXR1cm4teG8uZXJybm99fSx2OmZ1bmN0aW9uIHFOKFplLGx0LEx0LCR0KXt0cnl7bHQ9VXMu''@;'; put 'put ''Z2V0U3RyKGx0KTt2YXIgRG49MjU2JiR0LGNyPTQwOTYmJHQ7cmV0dXJuICR0Jj0tNjQwMSxsdD1Vcy5jYWxjdWxhdGVBdChaZSxsdCxjciksVXMuZG9TdGF0KERuP1l0LmxzdGF0Oll0LnN0YXQsbHQsTHQpfWNhdGNoKFJyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Sci5u''@;'; put 'put ''YW1lKXRocm93IFJyO3JldHVybi1Sci5lcnJub319LGg6ZnVuY3Rpb24gWE4oWmUsbHQsTHQsJHQpe1VzLnZhcmFyZ3M9JHQ7dHJ5e2x0PVVzLmdldFN0cihsdCksbHQ9VXMuY2FsY3VsYXRlQXQoWmUsbHQpO3ZhciBEbj0kdD9FNigpOjA7cmV0dXJuIFl0Lm9wZW4obHQsTHQsRG4pLmZkfWNh''@;'; put 'put ''dGNoKGNyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1jci5uYW1lKXRocm93IGNyO3JldHVybi1jci5lcnJub319LHE6ZnVuY3Rpb24gY28oWmUsbHQsTHQsJHQpe3RyeXtpZihsdD1Vcy5nZXRTdHIobHQpLGx0PVVzLmNhbGN1bGF0ZUF0KFplLGx0KSwkdDw9MClyZXR1cm4t''@;'; put 'put ''Mjg7dmFyIERuPVl0LnJlYWRsaW5rKGx0KSxjcj1NYXRoLm1pbigkdCxlcyhEbikpLFJyPXRuW0x0K2NyXTtyZXR1cm4gYXYoRG4sTHQsJHQrMSksdG5bTHQrY3JdPVJyLGNyfWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVy''@;'; put 'put ''bi1Yci5lcnJub319LHI6ZnVuY3Rpb24gZ3IoWmUpe3RyeXtyZXR1cm4gWmU9VXMuZ2V0U3RyKFplKSxZdC5ybWRpcihaZSksMH1jYXRjaChsdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09bHQubmFtZSl0aHJvdyBsdDtyZXR1cm4tbHQuZXJybm99fSx3OmZ1bmN0aW9uIFFp''@;'; put 'put ''KFplLGx0KXt0cnl7cmV0dXJuIFplPVVzLmdldFN0cihaZSksVXMuZG9TdGF0KFl0LnN0YXQsWmUsbHQpfWNhdGNoKEx0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1MdC5uYW1lKXRocm93IEx0O3JldHVybi1MdC5lcnJub319LHM6ZnVuY3Rpb24gWGEoWmUsbHQsTHQpe3Ry''@;'; put 'put ''eXtyZXR1cm4gbHQ9VXMuZ2V0U3RyKGx0KSxsdD1Vcy5jYWxjdWxhdGVBdChaZSxsdCksMD09PUx0P1l0LnVubGluayhsdCk6NTEyPT09THQ/WXQucm1kaXIobHQpOnFyKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2goJHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJF''@;'; put 'put ''cnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhyb3cgJHQ7cmV0dXJuLSR0LmVycm5vfX0sajooKT0+cXIoIiIpLHk6KCk9PjEsejooWmUsbHQsTHQpPT5Nbi5jb3B5V2l0aGluKFplLGx0LGx0K0x0KSxsOmZ1bmN0aW9uIG92KFplLGx0LEx0LCR0LERuLGNyLFJyLFhyKXt2YXIga2E9WmgoRG4sY3Ip''@;'; put 'put ''O3RyeXtpZihpc05hTihrYSkpcmV0dXJuIDYxO3ZhciBHbz1Vcy5nZXRTdHJlYW1Gcm9tRkQoJHQpLEhzPVl0Lm1tYXAoR28sWmUsa2EsbHQsTHQpLGFsPUhzLnB0cjtyZXR1cm4gbXJbUnI+PjJdPUhzLmFsbG9jYXRlZCxHbltYcj4+Ml09YWwsMH1jYXRjaChncyl7aWYodHlwZW9mIFl0PiJ1''@;'; put 'put ''Inx8IkVycm5vRXJyb3IiIT09Z3MubmFtZSl0aHJvdyBncztyZXR1cm4tZ3MuZXJybm99fSxtOmZ1bmN0aW9uIGpBKFplLGx0LEx0LCR0LERuLGNyLFJyKXt2YXIgWHI9WmgoY3IsUnIpO3RyeXt2YXIga2E9VXMuZ2V0U3RyZWFtRnJvbUZEKERuKTsyJkx0JiZVcy5kb01zeW5jKFplLGthLGx0''@;'; put 'put ''LCR0LFhyKX1jYXRjaChHbyl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09R28ubmFtZSl0aHJvdyBHbztyZXR1cm4tR28uZXJybm99fSxvOihaZSxsdCxMdCwkdCk9Pnt2YXIgRG49KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGNyPW5ldyBEYXRlKERuLDAsMSksUnI9bmV3IERh''@;'; put 'put ''dGUoRG4sNiwxKSxYcj1jci5nZXRUaW1lem9uZU9mZnNldCgpLGthPVJyLmdldFRpbWV6b25lT2Zmc2V0KCksR289TWF0aC5tYXgoWHIsa2EpO0duW1plPj4yXT02MCpHbyxtcltsdD4+Ml09KyhYciE9a2EpO3ZhciBIcz14bz0+e3ZhciBxcz14bz49MD8iLSI6IisiLEExPU1hdGguYWJzKHhv''@;'; put 'put ''KTtyZXR1cm5gVVRDJHtxc30ke1N0cmluZyhNYXRoLmZsb29yKEExLzYwKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKEExJTYwKS5wYWRTdGFydCgyLCIwIil9YH0sYWw9SHMoWHIpLGdzPUhzKGthKTtrYTxYcj8oYXYoYWwsTHQsMTcpLGF2KGdzLCR0LDE3KSk6KGF2KGFsLCR0LDE3KSxh''@;'; put 'put ''dihncyxMdCwxNykpfSxBOihaZSxsdCxMdCk9PigoWmUsbHQsTHQpPT57dmFyICR0PSgoWmUsbHQpPT57a3cubGVuZ3RoPTA7Zm9yKHZhciBMdDtMdD1NbltaZSsrXTspe3ZhciAkdD0xMDUhPUx0O2x0Kz0oJHQmPTExMiE9THQpJiZsdCU4PzQ6MCxrdy5wdXNoKDExMj09THQ/R25bbHQ+PjJd''@;'; put 'put ''OjEwNT09THQ/bXJbbHQ+PjJdOl9pW2x0Pj4zXSksbHQrPSR0Pzg6NH1yZXR1cm4ga3d9KShsdCxMdCk7cmV0dXJuIEJhW1plXSguLi4kdCl9KShaZSxsdCxMdCksYzooKT0+RGF0ZS5ub3coKSxwOlplPT57dmFyIGx0PU1uLmxlbmd0aCxMdD0yMTQ3NDgzNjQ4O2lmKChaZT4+Pj0wKT5MdCly''@;'; put 'put ''ZXR1cm4hMTtmb3IodmFyICR0PTE7JHQ8PTQ7JHQqPTIpe3ZhciBEbj1sdCooMSsuMi8kdCk7RG49TWF0aC5taW4oRG4sWmUrMTAwNjYzMjk2KTt2YXIgY3I9TWF0aC5taW4oTHQsTkEoTWF0aC5tYXgoWmUsRG4pLDY1NTM2KSk7aWYoekR0KGNyKSlyZXR1cm4hMH1yZXR1cm4hMX0sdDooWmUs''@;'; put 'put ''bHQpPT57dmFyIEx0PTA7cmV0dXJuIHpBKCkuZm9yRWFjaCgoJHQsRG4pPT57dmFyIGNyPWx0K0x0O0duW1plKzQqRG4+PjJdPWNyLCgoWmUsbHQpPT57Zm9yKHZhciBMdD0wO0x0PFplLmxlbmd0aDsrK0x0KXRuW2x0KytdPVplLmNoYXJDb2RlQXQoTHQpO3RuW2x0XT0wfSkoJHQsY3IpLEx0''@;'; put 'put ''Kz0kdC5sZW5ndGgrMX0pLDB9LHU6KFplLGx0KT0+e3ZhciBMdD16QSgpO0duW1plPj4yXT1MdC5sZW5ndGg7dmFyICR0PTA7cmV0dXJuIEx0LmZvckVhY2goRG49PiR0Kz1Ebi5sZW5ndGgrMSksR25bbHQ+PjJdPSR0LDB9LGc6KFplLGx0KT0+eyhaZT0+eygoWmUsbHQpPT57dGhyb3cgbHR9''@;'; put 'put ''KSgwLG5ldyBJbyhaZSkpfSkoWmUpfSxiOmZ1bmN0aW9uIEpEdChaZSl7dHJ5e3ZhciBsdD1Vcy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiBZdC5jbG9zZShsdCksMH1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFtZSl0aHJvdyBMdDtyZXR1cm4g''@;'; put 'put ''THQuZXJybm99fSxlOmZ1bmN0aW9uIGVJdChaZSxsdCxMdCwkdCl7dHJ5e3ZhciBjcj0oKFplLGx0LEx0LCR0KT0+e2Zvcih2YXIgRG49MCxjcj0wO2NyPEx0O2NyKyspe3ZhciBScj1HbltsdD4+Ml0sWHI9R25bbHQrND4+Ml07bHQrPTg7dmFyIGthPVl0LnJlYWQoWmUsdG4sUnIsWHIsJHQp''@;'; put 'put ''O2lmKGthPDApcmV0dXJuLTE7aWYoRG4rPWthLGthPFhyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9a2EpfXJldHVybiBEbn0pKFVzLmdldFN0cmVhbUZyb21GRChaZSksbHQsTHQpO3JldHVybiBHblskdD4+Ml09Y3IsMH1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJy''@;'; put 'put ''b3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4gUnIuZXJybm99fSxuOmZ1bmN0aW9uIHRJdChaZSxsdCxMdCwkdCxEbil7dmFyIGNyPVpoKGx0LEx0KTt0cnl7aWYoaXNOYU4oY3IpKXJldHVybiA2MTt2YXIgUnI9VXMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWXQubGxzZWVrKFJy''@;'; put 'put ''LGNyLCR0KSxhYT1bUnIucG9zaXRpb24+Pj4wLChacj1Sci5wb3NpdGlvbiwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/K01hdGguZmxvb3IoWnIvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sbXJbRG4+PjJdPWFhWzBdLG1y''@;'; put 'put ''W0RuKzQ+PjJdPWFhWzFdLFJyLmdldGRlbnRzJiYwPT09Y3ImJjA9PT0kdCYmKFJyLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goWHIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVhyLm5hbWUpdGhyb3cgWHI7cmV0dXJuIFhyLmVycm5vfX0sZDpmdW5jdGlvbiBySXQoWmUsbHQs''@;'; put 'put ''THQsJHQpe3RyeXt2YXIgY3I9KChaZSxsdCxMdCwkdCk9Pntmb3IodmFyIERuPTAsY3I9MDtjcjxMdDtjcisrKXt2YXIgUnI9R25bbHQ+PjJdLFhyPUduW2x0KzQ+PjJdO2x0Kz04O3ZhciBrYT1ZdC53cml0ZShaZSx0bixScixYciwkdCk7aWYoa2E8MClyZXR1cm4tMTtpZihEbis9a2Esa2E8''@;'; put 'put ''WHIpYnJlYWs7dHlwZW9mICR0PCJ1IiYmKCR0Kz1rYSl9cmV0dXJuIERufSkoVXMuZ2V0U3RyZWFtRnJvbUZEKFplKSxsdCxMdCk7cmV0dXJuIEduWyR0Pj4yXT1jciwwfWNhdGNoKFJyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Sci5uYW1lKXRocm93IFJyO3JldHVybiBS''@;'; put 'put ''ci5lcnJub319fSxMbD1mdW5jdGlvbiBNcigpe2FyKCk7dmFyIEx0PWZ1bmN0aW9uIE5yKCl7cmV0dXJue2E6aUl0fX0oKTtyZXR1cm4gJG4/Pz1mdW5jdGlvbiBwcigpe3ZhciBaZT0iZ3JhcGh2aXpsaWIud2FzbSI7cmV0dXJuIHluKFplKT9aZTpmdW5jdGlvbiBiZShaZSl7cmV0dXJuIiIr''@;'; put 'put ''WmV9KFplKX0oKSxmdW5jdGlvbiBzcihaZSxsdCxMdCwkdCl7cmV0dXJuIFplfHwiZnVuY3Rpb24iIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fHluKGx0KXx8KFplPT5aZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKGx0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZl''@;'; put 'put ''dGNoP1puKGx0LEx0LCR0KTpmZXRjaChsdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oRG49PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKERuLEx0KS50aGVuKCR0LGZ1bmN0aW9uKFJyKXtyZXR1cm4gcnQoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVk''@;'; put 'put ''OiAke1JyfWApLHJ0KCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFpuKGx0LEx0LCR0KX0pKX0ocHQsJG4sTHQsZnVuY3Rpb24gbHQoJHQpeyFmdW5jdGlvbiBaZSgkdCxEbil7cmV0dXJuIGR0PShMbD0kdC5leHBvcnRzKS5CLE9uKCksZnVuY3Rpb24gdnQo''@;'; put 'put ''WmUpe0puLnVuc2hpZnQoWmUpfShMbC5DKSxIcigpLExsfSgkdC5pbnN0YW5jZSl9KS5jYXRjaChmKSx7fX0oKSx4N2U9KGQuX3dlYmlkbF9mcmVlPVplPT4oZC5fd2ViaWRsX2ZyZWU9TGwuRCkoWmUpLGQuX2ZyZWU9WmU9PihkLl9mcmVlPUxsLkUpKFplKSxkLl93ZWJpZGxfbWFsbG9jPVpl''@;'; put 'put ''PT4oZC5fd2ViaWRsX21hbGxvYz1MbC5GKShaZSksZC5fbWFsbG9jPVplPT4oZC5fbWFsbG9jPUxsLkcpKFplKSxkLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPVplPT4oeDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9TGwuSCkoWmUp''@;'; put 'put ''KSxFN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9KFplLGx0KT0+KEU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2aXpfMj1MbC5JKShaZSxsdCksVDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9KCk9PihUN2U9ZC5f''@;'; put 'put ''ZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD1MbC5KKSgpLEE3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9KCk9PihBN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPUxsLkspKCksazdlPWQuX2Vtc2NyaXB0ZW5fYmlu''@;'; put 'put ''ZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9KFplLGx0LEx0KT0+KGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPUxsLkwpKFplLGx0LEx0KSxEN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPShaZSxsdCxMdCwkdCk9PihEN2U9ZC5fZW1z''@;'; put 'put ''Y3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPUxsLk0pKFplLGx0LEx0LCR0KSxJN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2FjeWNsaWNfMz0oWmUsbHQsTHQsJHQpPT4oSTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9TGwuTikoWmUsbHQsTHQs''@;'; put 'put ''JHQpLFI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdHJlZF8zPShaZSxsdCxMdCwkdCk9PihSN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz1MbC5PKShaZSxsdCxMdCwkdCksTDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel91bmZsYXR0ZW5fND0oWmUs''@;'; put 'put ''bHQsTHQsJHQsRG4pPT4oTDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel91bmZsYXR0ZW5fND1MbC5QKShaZSxsdCxMdCwkdCxEbiksTzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfbGF5b3V0X3Jlc3VsdF8wPVplPT4oTzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFw''@;'; put 'put ''aHZpel9nZXRfbGF5b3V0X3Jlc3VsdF8wPUxsLlEpKFplKSxQN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9KFplLGx0KT0+KFA3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2xheW91dF9yZXN1bHRfMT1MbC5SKShaZSxsdCksRjdl''@;'; put 'put ''PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9WmU9PihGN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX291dEZpbGVfMD1MbC5TKShaZSksSDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19v''@;'; put 'put ''dXRGaWxlXzE9KFplLGx0KT0+KEg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPUxsLlQpKFplLGx0KSxON2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1aZT0+KE43ZT1kLl9lbXNjcmlwdGVuX2Jp''@;'; put 'put ''bmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfbnVtX3Jldl8wPUxsLlUpKFplKSxWN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX251bV9yZXZfMT0oWmUsbHQpPT4oVjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9TGwu''@;'; put 'put ''VikoWmUsbHQpLEI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9WmU9PihCN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX291dF8wPUxsLlcpKFplKSxqN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8x''@;'; put 'put ''PShaZSxsdCk9PihqN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPUxsLlgpKFplLGx0KSx6N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX2Vycl8wPVplPT4oejdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9l''@;'; put 'put ''cnJfMD1MbC5ZKShaZSksVTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9lcnJfMT0oWmUsbHQpPT4oVTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9lcnJfMT1MbC5aKShaZSxsdCksWjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9f''@;'; put 'put ''X2Rlc3Ryb3lfX18wPVplPT4oWjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPUxsLl8pKFplKSxXN2U9KFplLGx0KT0+KFc3ZT1MbC5hYSkoWmUsbHQpO2Z1bmN0aW9uIFk3ZSgpe050PjB8fChmdW5jdGlvbiB3aSgpe1pvKHpyKX0oKSxOdD4wKXx8ZnVuY3Rp''@;'; put 'put ''b24gWmUoKXtRTnx8KFFOPSEwLGQuY2FsbGVkUnVuPSEwLCFKdCYmKGZ1bmN0aW9uIGVhKCl7IWQubm9GU0luaXQmJiFZdC5pbml0aWFsaXplZCYmWXQuaW5pdCgpLFl0Lmlnbm9yZVBlcm1pc3Npb25zPSExLGQ0LmluaXQoKSxabyhKbil9KCksaChkKSxmdW5jdGlvbiBmYSgpe1pvKERyKX0o''@;'; put 'put ''KSkpfSgpfWZ1bmN0aW9uIHNmKCl7fWZ1bmN0aW9uIGVWKFplKXtyZXR1cm4oWmV8fHNmKS5fX2NhY2hlX199ZnVuY3Rpb24gR3RlKFplLGx0KXt2YXIgTHQ9ZVYobHQpLCR0PUx0W1plXTtyZXR1cm4gJHR8fCgoJHQ9T2JqZWN0LmNyZWF0ZSgobHR8fHNmKS5wcm90b3R5cGUpKS5wdHI9WmUs''@;'; put 'put ''THRbWmVdPSR0KX1kLlVURjhUb1N0cmluZz12MCxIbj1mdW5jdGlvbiBaZSgpe1FOfHxZN2UoKSxRTnx8KEhuPVplKX0sWTdlKCksKHNmLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNmLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXNmLHNmLnByb3RvdHlwZS5fX2NsYXNzX189c2Ysc2YuX19j''@;'; put 'put ''YWNoZV9fPXt9LGQuV3JhcHBlck9iamVjdD1zZixkLmdldENhY2hlPWVWLGQud3JhcFBvaW50ZXI9R3RlLGQuY2FzdE9iamVjdD1mdW5jdGlvbiB1SXQoWmUsbHQpe3JldHVybiBHdGUoWmUucHRyLGx0KX0sZC5OVUxMPUd0ZSgwKSxkLmRlc3Ryb3k9ZnVuY3Rpb24gZEl0KFplKXtpZighWmUu''@;'; put 'put ''X19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO1plLl9fZGVzdHJveV9fKCksZGVsZXRlIGVWKFplLl9fY2xhc3NfXylbWmUucHRyXX0sZC5jb21wYXJlPWZ1bmN0aW9uIGhJdChaZSxsdCl7cmV0dXJu''@;'; put 'put ''IFplLnB0cj09PWx0LnB0cn0sZC5nZXRQb2ludGVyPWZ1bmN0aW9uIGZJdChaZSl7cmV0dXJuIFplLnB0cn0sZC5nZXRDbGFzcz1mdW5jdGlvbiBwSXQoWmUpe3JldHVybiBaZS5fX2NsYXNzX199O3ZhciBacz17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBzOltdLG5lZWRlZDowLHByZXBh''@;'; put 'put ''cmUoKXtpZihacy5uZWVkZWQpe2Zvcih2YXIgWmU9MDtaZTxacy50ZW1wcy5sZW5ndGg7WmUrKylkLl93ZWJpZGxfZnJlZShacy50ZW1wc1taZV0pO1pzLnRlbXBzLmxlbmd0aD0wLGQuX3dlYmlkbF9mcmVlKFpzLmJ1ZmZlciksWnMuYnVmZmVyPTAsWnMuc2l6ZSs9WnMubmVlZGVkLFpzLm5l''@;'; put 'put ''ZWRlZD0wfVpzLmJ1ZmZlcnx8KFpzLnNpemUrPTEyOCxacy5idWZmZXI9ZC5fd2ViaWRsX21hbGxvYyhacy5zaXplKSxDbihacy5idWZmZXIpKSxacy5wb3M9MH0sYWxsb2MoWmUsbHQpe0NuKFpzLmJ1ZmZlcik7dmFyIERuLCR0PVplLmxlbmd0aCpsdC5CWVRFU19QRVJfRUxFTUVOVDtyZXR1''@;'; put 'put ''cm4gJHQ9TkEoJHQsOCksWnMucG9zKyR0Pj1acy5zaXplPyhDbigkdD4wKSxacy5uZWVkZWQrPSR0LERuPWQuX3dlYmlkbF9tYWxsb2MoJHQpLFpzLnRlbXBzLnB1c2goRG4pKTooRG49WnMuYnVmZmVyK1pzLnBvcyxacy5wb3MrPSR0KSxEbn0sY29weShaZSxsdCxMdCl7THQvPWx0LkJZVEVT''@;'; put 'put ''X1BFUl9FTEVNRU5UO2Zvcih2YXIgJHQ9MDskdDxaZS5sZW5ndGg7JHQrKylsdFtMdCskdF09WmVbJHRdfX07ZnVuY3Rpb24gbGYoWmUpe2lmKCJzdHJpbmciPT10eXBlb2YgWmUpe3ZhciBsdD1mdW5jdGlvbiB4MyhaZSxsdCxMdCl7dmFyICR0PUx0PjA/THQ6ZXMoWmUpKzEsRG49bmV3IEFy''@;'; put 'put ''cmF5KCR0KSxjcj1FMShaZSxEbiwwLERuLmxlbmd0aCk7cmV0dXJuIGx0JiYoRG4ubGVuZ3RoPWNyKSxEbn0oWmUpLEx0PVpzLmFsbG9jKGx0LHRuKTtyZXR1cm4gWnMuY29weShsdCx0bixMdCksTHR9cmV0dXJuIFplfWZ1bmN0aW9uIG5nKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFZv''@;'; put 'put ''aWRQdHIsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gcm8oWmUsbHQpe1plJiYib2JqZWN0Ij09dHlwZW9mIFplJiYoWmU9WmUucHRyKSxsdCYmIm9iamVjdCI9PXR5cGVvZiBsdCYmKGx0PWx0LnB0ciksdGhpcy5wdHI9RTdlKFplLGx0KSxlVihybylbdGhpcy5wdHJdPXRoaXN9''@;'; put 'put ''cmV0dXJuKG5nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNmLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW5nLG5nLnByb3RvdHlwZS5fX2NsYXNzX189bmcsbmcuX19jYWNoZV9fPXt9LGQuVm9pZFB0cj1uZyxuZy5wcm90b3R5cGUuX19kZXN0cm95X189bmcucHJvdG90eXBlLl9fZGVzdHJv''@;'; put 'put ''eV9fPWZ1bmN0aW9uKCl7eDdlKHRoaXMucHRyKX0sKHJvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNmLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXJvLHJvLnByb3RvdHlwZS5fX2NsYXNzX189cm8scm8uX19jYWNoZV9fPXt9LGQuR3JhcGh2aXo9cm8scm8ucHJvdG90eXBlLnZlcnNpb249''@;'; put 'put ''cm8ucHJvdG90eXBlLnZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gdjAoVDdlKCkpfSxyby5wcm90b3R5cGUubGFzdEVycm9yPXJvLnByb3RvdHlwZS5sYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoQTdlKCkpfSxyby5wcm90b3R5cGUuY3JlYXRlRmlsZT1yby5wcm90b3R5cGUuY3Jl''@;'; put 'put ''YXRlRmlsZT1mdW5jdGlvbihaZSxsdCl7dmFyIEx0PXRoaXMucHRyO1pzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0PWx0JiYib2JqZWN0Ij09dHlwZW9mIGx0P2x0LnB0cjpsZihsdCksazdlKEx0LFplLGx0KX0scm8ucHJvdG90eXBlLmxh''@;'; put 'put ''eW91dD1yby5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7cmV0dXJuIFpzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0PWx0JiYib2JqZWN0Ij09dHlwZW9mIGx0P2x0LnB0cjpsZihsdCksTHQ9''@;'; put 'put ''THQmJiJvYmplY3QiPT10eXBlb2YgTHQ/THQucHRyOmxmKEx0KSx2MChEN2UoJHQsWmUsbHQsTHQpKX0scm8ucHJvdG90eXBlLmFjeWNsaWM9cm8ucHJvdG90eXBlLmFjeWNsaWM9ZnVuY3Rpb24oWmUsbHQsTHQpe3ZhciAkdD10aGlzLnB0cjtyZXR1cm4gWnMucHJlcGFyZSgpLFplPVplJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSwhIUk3ZSgkdCxaZSxsdCxMdCl9LHJvLnByb3RvdHlwZS50cmVkPXJvLnByb3RvdHlwZS50cmVkPWZ1''@;'; put 'put ''bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7WnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSxSN2Uo''@;'; put 'put ''JHQsWmUsbHQsTHQpfSxyby5wcm90b3R5cGUudW5mbGF0dGVuPXJvLnByb3RvdHlwZS51bmZsYXR0ZW49ZnVuY3Rpb24oWmUsbHQsTHQsJHQpe3ZhciBEbj10aGlzLnB0cjtyZXR1cm4gWnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksbHQmJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSwkdCYmIm9iamVjdCI9PXR5cGVvZiAkdCYmKCR0PSR0LnB0ciksdjAoTDdlKERuLFplLGx0LEx0LCR0KSl9LHJvLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdD1yby5w''@;'; put 'put ''cm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoTzdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdD1yby5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9ZnVuY3Rpb24oWmUpe3ZhciBsdD10aGlzLnB0cjtacy5wcmVwYXJl''@;'; put 'put ''KCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxQN2UobHQsWmUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkocm8ucHJvdG90eXBlLCJsYXlvdXRfcmVzdWx0Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdCxzZXQ6cm8ucHJvdG90eXBlLnNldF9s''@;'; put 'put ''YXlvdXRfcmVzdWx0fSkscm8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGU9cm8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoRjdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlPXJvLnByb3RvdHlwZS5z''@;'; put 'put ''ZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7WnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksSDdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwiYWN5Y2xpY19vdXRGaWxl''@;'; put 'put ''Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlLHNldDpyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZX0pLHJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2PXJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIE43''@;'; put 'put ''ZSh0aGlzLnB0cil9LHJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2PXJvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2PWZ1bmN0aW9uKFplKXtaZSYmIm9iamVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksVjdlKHRoaXMucHRyLFplKX0sT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHJvLnByb3RvdHlwZSwiYWN5Y2xpY19udW1fcmV2Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2LHNldDpyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldn0pLHJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9cm8ucHJvdG90eXBlLmdldF90cmVkX291dD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB2MChCN2UodGhpcy5wdHIpKX0scm8ucHJvdG90eXBlLnNldF90cmVkX291dD1yby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7WnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjps''@;'; put 'put ''ZihaZSksajdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwidHJlZF9vdXQiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF90cmVkX291dCxzZXQ6cm8ucHJvdG90eXBlLnNldF90cmVkX291dH0pLHJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9cm8ucHJvdG90eXBl''@;'; put 'put ''LmdldF90cmVkX2Vycj1mdW5jdGlvbigpe3JldHVybiB2MCh6N2UodGhpcy5wdHIpKX0scm8ucHJvdG90eXBlLnNldF90cmVkX2Vycj1yby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyPWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7WnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIFplP1plLnB0cjpsZihaZSksVTdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwidHJlZF9lcnIiLHtnZXQ6cm8ucHJvdG90eXBlLmdldF90cmVkX2VycixzZXQ6cm8ucHJvdG90eXBlLnNldF90cmVkX2Vycn0pLHJvLnByb3RvdHlwZS5fX2Rlc3Ryb3lf''@;'; put 'put ''Xz1yby5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtaN2UodGhpcy5wdHIpfSx2fSk7ZnVuY3Rpb24gQnh0KCl7cmV0dXJuIEZ0ZXx8KEZ0ZT1mdW5jdGlvbiBPeHQoYyxsKXtmb3IodmFyIGE9W10sZD0rIWwsaD0wLGY9MDtjLmxlbmd0aDspe3ZhciB2PU14dChjLGR8fGwpO2lm''@;'; put 'put ''KCJvYmplY3QiPT10eXBlb2Ygdil7Zm9yKGQ/KGw9bnVsbCx2LncubGVuZ3RoPT12LnUmJihhLnB1c2gobD12LncpLGYrPXYudSkpOihhLnB1c2gobCksdi5lPTApOyF2Lmw7KXt2YXIgTT1SeHQoYyx2LGwpO018fGUwKDUpLGw/di5lPXYueTooYS5wdXNoKE0pLGYrPU0ubGVuZ3RoLHd4dCh2''@;'; put 'put ''LncsMCxNLmxlbmd0aCksdi53LnNldChNLHYudy5sZW5ndGgtTS5sZW5ndGgpKX1oPXYuYis0KnYuY31lbHNlIGg9djtjPWMuc3ViYXJyYXkoaCl9cmV0dXJuIGZ1bmN0aW9uKGMsbCl7aWYoMT09Yy5sZW5ndGgpcmV0dXJuIGNbMF07Zm9yKHZhciBhPW5ldyBEdShsKSxkPTAsaD0wO2Q8Yy5s''@;'; put 'put ''ZW5ndGg7KytkKXt2YXIgZj1jW2RdO2Euc2V0KGYsaCksaCs9Zi5sZW5ndGh9cmV0dXJuIGF9KGEsZil9KGZ1bmN0aW9uIE54dChjKXtsZXQgbD1jLmxlbmd0aCxhPVtdLGQ9MCxoPTAsZj0tMTtmb3IobGV0IHY9MDt2PGw7disrKXtsZXQgTT0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVph''@;'; put 'put ''YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihjW3ZdKTtpZigtMSE9PU0paWYoZjwwKWY9TTtlbHNle2YrPTkxKk0sZHw9Zjw8aCxoKz0oODE5MSZmKT44OD8xMzoxNDtkb3thLnB1c2goMjU1JmQpLGQ+Pj04''@;'; put 'put ''LGgtPTh9d2hpbGUoaD43KTtmPS0xfX1yZXR1cm4gZj4tMSYmYS5wdXNoKDI1NSYoZHxmPDxoKSksbmV3IFVpbnQ4QXJyYXkoYSl9KCd2NyNhU1hVbmBEQFE8LHozXlgma1UyaHR6OHsvcFlEbW4/eyRKanoycl8/SmxeKzZuRm89eEk8JkI5RkJWK3diO1hhfHFvUnpnYmVLc0JTXn5deHp2Pj18''@;'; put 'put ''LnE/KE08OEdENUdMI0t7c1tTNCFeQzRMeXJOYUxLb1JrRUprTExse2YwVjkwPDteUXB1Z3k1QSUpJilaOnNnOmgufWA4dXVUW1dCQSh5KXV5fEJVSCU4IUUqYGYxd0JfeFsmQDVxRzUlYiZ+amUmN0RiSiRMbHpVQz5XXi87Zmh7PHxHQnkiKX5sJXNfMWE4bT5kMFhQQXNUOUxiVyhpakJlTldX''@;'; put 'put ''W0BebSQoOnZ9b3tRay50aH49OygxYTheMW19TX57PDU/U1AoXilbMkxzYE1gdTkpeVp9Yi9KRH42Rkx0WnNtXkZsfGtIWCw0RlV6cSpPYXo9Ql82czcpU2Q0TF1MY3xseHp2aGg/NnREOCVOXUAmPzhpTzxVUHNbNUpxI1pSZ1p9azNEcUg9JTJRRHtEdGZ9b3dFSjZJZHJZRz5WdUUkTVZ3XSwm''@;'; put 'put ''fk8scUxpQiY1bT8hWUdnaSppVysiUVB5JD9VWmtjYT4wZ0RvITdHfH5nNWRLfFszL3s1fm8kMHYlSmwxODJBcX49emU4fkV6SGVfW1FEY1kxfShlLEtIdTFVOylYWFdAfTEmZ3QsfmAycC86fVhkWW4hTkhmXWk3Nl5YI1FxeW9ncD8lNyRYc3ksWiZ6XyMyZzslLCVuOV55ck5fdnkoKzFTcWBk''@;'; put 'put ''aH1dJmxha2hMfXImeDM1KmJzeltbd113fjd8UTVscitydmt5aTVUfD1aIUs5fUg8PXI2U19GOGpOUyl9PVJfU18vT2d+Oi9qPGY4RD9CX219IjQzdGgqZyFVJkpXMyRRZEA9dVsqbVhOY3B7O3VjJkpdT1BRITAkZlc4KWNKUTZlOms1QCIjJDRzNjxQNk5iMDBBcSRvY1tNJkNqSENfYjdzYWBb''@;'; put 'put ''aEYvJHc1V3ZHM3RIKC5iKEtlSFJ3WHcvKnU+PV1yI3BMVzw3X2xRVG4oMT5ob0FlemJ5dT58ej92MkpyPUUlYyJmQDguXU0qWVUiT0d+MWNiMEA4MypbMDE5dyU7XW1vdGk+dURzP3A9RSZjSFF3TzI/eSZxWSNkI2N+cW5EUndPQGE7XnlTdUIvX2o1SUhaeGEkaUVzKDBqbTxZc0VIbTBdaVd7''@;'; put 'put ''YzJyQS4oeSlzQE5fYzpnTmpdSmszJlopI19bI05eRVpiTyMiYEJ8N3hLZj5eNlR4THc3RC9eeWpyWVU3YmlnMnNUQExAQVttYUVzO00sYj9tNnZVMVJ3eG96Llp8QWErYH5xVF1ALztuXnkqZDIjcENLOTFnWE5HUG0ibllBViFqe0p5NWF8fHB2b19EajdRcDQwfCtOZlFWWjdEeH4/d2xRcCFD''@;'; put 'put ''VU5rbHBFO2FaOm9jQE0hJDsvP2FTKGgyb25ARTRjSFFKRDhzUVErQ3E1LE44OklmcntPbj42XiVKbjtVMzwvLjxtNCZYT1c9N09TWyxKVTU3UigvJmIwN11bMkFGWnhhSHAzNWF4O0llc1RARjJzU2lbaEcmOn57SXBzTFlFLno2VHxFNXhhP0Z7T1dRKjheRCUlMmRdaFhCNkUmbVU1fWlrTV8r''@;'; put 'put ''dmZqei52MHdXN35gcFdfbSRJUyJ8PVQjPi9aVn5COEZMPDZATlB9LmdXMStMPDYqY1hnU2JzY0VKVjd4b2xTRTYkYyN4KHA/JEhMTilCfG42YWg5UF9qKyolKiRvXTNYIXZFTF1dJFhfdzZkNklsIWRAUzYzSCZ7L2RGMzNlPzkqZHhJVzdoZFVEOF5eel10JjNKP2MwNiJiP21DKEMoNXNZVW4i''@;'; put 'put ''dn1ROjpufGEhdGxWPDNATlN7XSNCNHk+eTVeW34uXnlIajkqYHtDOEpMKyNybit2S30vZj9TPkAmPDRAMU9CV0hXbmcudH1PN3dwMFQ5TDU8UDE4d1sybTo9OF1fITsvK2wvdEVaaWg4IVZUMypAQzNIUFB+SGlaL3Fde3A0ZTtLbz9AdVo9M3kjZXpzPXBaTVNDNVtCfihgN14kakBuVGdlajM5''@;'; put 'put ''M2g+Q3ljJVYvUXklbkRKUWFCM3spMHZDMzsjS2tpLkE2bjhHP1cjKGwkfCI8YX5YfkpYbU82OXlMO3RfWXQ/V3dZWnhhOT1Ldzg5ImA0eUF7Oz1jJmcubUBUZXNHU25tImdkOlk1eDl8QjVCTWFZWDU1TGBIQUQuZlMyYGtjdiVscyNfa110TVF7c3NZJSJ+d1M6dHxbOFNOfkhOOFg1Nzl8cX44''@;'; put 'put ''ZWxsIlY9V3s7K2gsRC40YlZnQHtpVXIuWDlDaDtJbns6eztJXi5hWkdMU1o5cFRnU3wqVVN+RUtROSlfX0xeeStbQS9oOlJVUTVOTEV5cV4xY21kUlM6fVYvQzhGajEhdD5WS3t5fF5OXl1fTkcpd0l2SUNPbzs7bDlYKVsmZH5ucERGZj1PeS5DZjliKSI9PGc7bW45X2tDbk99WjlhWUlyNjl1''@;'; put 'put ''aDR1X1NUOmg3ZDduPk5tNTZAZi5CZCE+WVo8fWtLQDE8X2E8NUg4Yms3ZCNvSjNicCo5TGUvU10jbiQoVm5nMyZMW01xY1hWVHM3RFFHcFNQOEkkJTJSTD1QU1pSJEh6ZSV3PyxgRXx7fGwjOk8lfXtDc016QXBfeiNuansqc2JrSE1kS35rbThBTDg3SzkjaE1ecFoiK2B5VWFJezsvaEdFKFU7''@;'; put 'put ''ZVt1YURWbjp+cXsrZDhFVyRlWFVRNW8yNVhwRyF8SDJQcDM4IyxMZC50anBYTTw6fGMpMCwvcEdfZDZNQ1M6fShLOHtkWWN7eyk5VEhUO2RWKzhfakw2fmFJRChkO1dlaHJkO1dlcSQqQV06JEgibzxibDtzfWpnSC9kOF1leGlTVWNkeiN7QFZlaV9iZG9EZj55WmxaMWxjfjNWPjhhfmgpeyYm''@;'; put 'put ''VmZRbl1bdilLR3w0SSRHKWB6d0EkSGchby9PI1ZLWDZyZnRMRTA4XUV3bVQ2VnJdMiM1dDtHWU09YVg9LyRIYDclMlIhczlZfmYyKU1WZ15fPyYlQ2cqPG5SWmVKMiEvXUhVWnZJW3lvblFyLlVDPnxMQENUVUB8YEwqN0BidT9eKmN+ZzNSVVdqVFFyV0Y3KDMlc14+eCVjRmc+JkNnNzloNmVs''@;'; put 'put ''JWNpVEJlYUZxKlswQn5WK0RbM3JoLF92eWU1fnw/blpbR194JD5NJW5HV1RCMHs4Qy8sOnNJUks2KVJZfCFJQV1URmc/L21aWDRJbVo6dVNWLm9XMzA8Rkw9JGRCTF9MZXBXbUI6OnhleDVUTmVGOTk2dUQjKzhVNDV8THdbSXJJWj5UeSVVO11gdSUoSitlPGRbI2t5NWBEPlRIU3twdkxyeHJI''@;'; put 'put ''cHxJVjc7VEFuW0xLZnJFYTleZXlQZF1NOT5qOnEzLEhsNG03MjlJcWFCMFcuZDhfbXohW0sxPmQhKD1zZXY6YCp2eUd9K203PXpsYTh4NyUwNVQ9a10mSks2MjMiSnMvUmcyL1t2d3FZbjJqZn4+eWVseUpmLylEOFszW2VdZWI+U20rRnFVSTxkImI7RzhEOHh+WXdUdlFaRFlvNStJVnFLc1FW''@;'; put 'put ''fkhSfTpqbFNoX0xbYkw2SE05d2x5TkYlUnMscyYsNCtGKEFGRyV0fWpaT3AjdlFaX1hrNmRQYiVybSJ6aDMzakF4I1lKfXAsbDgqS3lmcWtWPXI5OUxXNyEjYSV9UFA9JWNubTM3VFQvZH44bCl3bzJdZV1Se2w1X0ptPCpQPldtKWEqJjdUfVl3JWx+b25ReTtqaF8yMkRPYj5HJTUiSTg1UzB5''@;'; put 'put ''PWVrcFUvPTZXXSZGRnlpPjl4cip5NnYvU1tdTV1jcEt6X11ITHRZJmhmJCtHeClnfipnOSY0clNtdVpIUHw8NDVmd1FAcSl9YHVNOXFZZHxDPnhVeyJnMz1sMFtQI34yTUp1T2ZKdTJIKlRGZ3lyPl1LXyt2WnUwOitsQldLNXVYYlgzU3xhfXtsXUNRJm8hTXd+UjNaYToqWyp6Zl9hODVBOVpz''@;'; put 'put ''IUNVQDJOfnh5LjVgZHppN1VbOk89aTtDcHJGU1pEQlJ6I104NixGTF0kRStEVzErPnR6O0ZZNzkubCRFcGQrNSU8KHBrRE1kTHNEUWQkUmZuX11tVH55Jkpvd3pSZnBUMldLMS8jLH0oblNqPlgkMlVEfU5QMTZWYCk0K2c2JTx5LjR1c2Q3b1chYSklSjglOFJOWSVeNGpNS2BiZEBAL1FvSF1R''@;'; put 'put ''REtxIWFAdEhaPFprXVl2YzRzNnFpXT86YyU6bXh8Q3twKUpkRlc9VUtJb3w8ck9pYXR9P2JKJDpjU2JmN1hLc2c3eyh+cz9KRHNjZjA7O0BxbHIlcy5afSQvKGhXQ0AuVFpZaWs7VX4oKyo4c0RRXWx5emw3JihKW1NlbShndG9eMStEMXd0cUZ4bEQ4cyh7OFZheHI1T2I3eGpSY2FsQUs7e3dv''@;'; put 'put ''SFBofS4jSzh0S205Zjl0Mz9ZUCpVVHBnXVt6fkkmYSllKHRLR15GX2AqajcyPj9PXTYqXi95Z1tlPFEhfHBXaiF4RiVWdXAlMXMjLD81bTdlK3lxe2lgU0Q5dXxgZj4zW1BVOkt+TWpEdFJfb3kzb1Z2QHB9UHY1VlhFPjF9YGsoS3sqVz15ckJ9XllCZDY1TmxsfWBrLmZNPUt4WVpKeXl3VyRy''@;'; put 'put ''bVFkJTosUDQ5WCU8KT9HS3tNIygidj1QWCYrYX59JF55JiZ5M0Eley4kSmdgR0pjMkVxZHJgK0lKYlo4MntaW1RBPjlfWitiOiouQzI8dn1aPF0md1orImEyfkUrX15adlJaak0xU3JCKDU3VFNfLmR+IUMxN14+NnBEM307Qn14RixEP2t4TWppY1pOZmQobnB1UUdjfWdfdm0/VHB6PT1zY3Fv''@;'; put 'put ''SioybWtYazFUMUwqPmxaaH1pIzpDeHkmM29INHZ4fDxKZSliL2QhOm1WM11yQH1OXjdCeChiRm84Vm08Z09LUTQ5eDNdM2opU345T0d0JntJSmMmPypWPWc+KWBjWC9BOSNROSVaUzkxfTElZWpDZV9iaFZmW25vdGlONUI6OWVbUFNaT2RuLj1qTGsiP1ZMNWNEXzZWOU9rMGBOZixJRlphZkck''@;'; put 'put ''cDxjQThQRTIlX1tRRHpWWF06PX1OWDdwNGBQamBYeXRZMD53bHk9Iz5VZj9TNk0+P1BnKk4xPilOcGFYWTokKFZGV0xkb1s1LF1oUi5jSCIlMEJSRTRMPG8maT0mNEw3cnNWfltyLmx9RGJVLDg9dGU2UWhpWmsqdCtZPUB5ODdiNHoqL3ZhZ11rVCRZZCQsXjoiKDAsL0VGSyNtIiYsNikpLEZn''@;'; put 'put ''UHZ+d3cmOSs4bjB5Znc+YXVZSmNfW1J3KmxdXjpjSCRmNzQ9NElJM2soc1YycVY9NlIveEFPZyxpVy4yVmtKaj1tTV5LfCVGJWhiQGtnSnF9bFpvQzZyRjltI3s0PTAwVDFWd1QuZDhFfW5KNTVEJDYvSGRUMD0jbi5He1s4XX5tJC86MkBoMkdMKCZ+JGZlQiY7VF1PcDJtP2YxfXspS0MobWlA''@;'; put 'put ''ZmdzYWY5Olo6SH4sR104JlZzaURJLDYheVQ5ckYjUyE6L21aeCYuaUBuZVYuYX4oS30+P2QxcjdsPF50JixuTUp5NWw3aF0hPSE+TyNoPChwPUUjY2pPLl5qWztUVF1ufnAsM2ViWjxUSFExLmI3eCUmeDplSnFbNVhwbi5MI203STVVPHVfP0dMKm1MWDkwSnBSbVNXZS5oIkFESTY2dTJbUWQi''@;'; put 'put ''W3dqZSJoQkI/RWI/e2U5KEZCaklxcXM4MihLQ31LRkJdUXl0aXhdUE9HfGVTdElEJC5Mdnw5MXRjRDo6Z1kvaH1BV0hpQ0JQMCkmd2FxIkF7SHVtcElZdEpFaSYiXTYoS0NXaWV1XTkydHdEZjdWeDcob0M7Ukd1IjtEaUVEOjpdNmBRNCJDRi9IM1A7I3ExY3RbRXojVmxWRTkodUMwb3UyXzkh''@;'; put 'put ''Im1GK3A1N2M8KXkqd2llPmkzISsrRk4iRDgmYzx6K0d1aFJwTlNqeXpYQz1ra0VhanQpakYmQGJmMStXdXdVJSpveCJRIihyQiJXaE5UamJNY0ZpS3xlLihXQyZNaWFdUW4ia0QlMX5sTnQjdCRQczxZOzp5I0MuKDtIN1IyTDBGMCJdYWJqZk08RnRmSVRUalhYU01+UjQhNkxeSUIuVkIzUl4o''@;'; put 'put ''O0M0enFDVGo7dDhGbDNyQ1RqZVh3U11nJipUamdYLE5WZGY8PXl3RHc7cE5Val90c0w/ai9JP3kreENlfGpVanFYeFBuLDNSKUxESWBuY2ZbeU5FYDwye1VqMFhiUnNvZjxdeWxFPyFicmVmXnl0RUU/VHZWajhYYFQ1N2Q8X3kqRXBAZjtWaiVYMVRLdTUhP0xGS2EuUG1FIXN1WnBJJD4xfHlX''@;'; put 'put ''RjlfN1BRdHZYdlZJb2Q8ZyJ2WC8zOHA6YzpWIig0ZERQO1YkP09Qb2k6VmJgfURHbzpWRCk5ZWhCNnJIQihKeXxeMzh8U0NILl1LRj91UEIsX0tHPz5QKjc6VnYpdXgwJXRbWnxxQ3ZAXUtJP2xLQClzRjxyNkB6UVt8X0tKPypLaEJfMmBUfF95RmNHezNjPyoqYFdWWmJ8Yiw2WG9ZOHJ1dSN3''@;'; put 'put ''cXkxX1hHKU8rSDVffkkyTF8zUD9FTilvP1ZeP1VOQTA/VmgpZ2x0ZDhyXXUmM3BGNF9NSGolckYzX21KOFpfM1U/L09AKT9WcilDZlMpSjdCPyFQNTU4ckJ2fiZwRjhfNUlZXTNSTXpDeGNVUzp2OGkhcHY6Uj1SdVBpaXhFai9MUEQhdHYjUyZpdVBqaS9FMz02XUQhdCo/SmwqKjBHaUdGXm9H''@;'; put 'put ''ZUNmKmlTRmBeP0RGIThDQ3I7I0NmaSV7IkFKdGVGeHFnWm97Ql81MWxSUUM/VFF1OldRQ2lvZ1IpS1JpPFJkeW4sQy8hOjoqYUspRVEoeHdeN0Z7Zzxpan0zO0ghSVBMSX4kc3VXMX4kd3VoZXtnYylCTTtEVDlPaW9wfXF8YFk8SVd7ITM7Zi9TKW9KeGo9Wkc8MTs/VCl6SyFdL1chQzxZIWoj''@;'; put 'put ''QiRJUUglQUlWdWBKPEUiKC5EfVBgZm0heVNwbigoXiIuQmlQfWdCZ05GRUcvLmB2SzJ1dVNQK2lMSTJnaSk/U1tuNDs2bmhFJmRPOHtxa3x2aS5GNipRUE86VDlTP2RIJHEzZTdubmEwSSJWJH1+NEl3Zk1AQyE/djtSWDQwP0xpR1ghXnZnTUpET1ppU0RnaUclemlxQ01Ld2VYWkosZXcyQVEj''@;'; put 'put ''eH5OWFhXUmB2YGkjSkwldGNgdm5YeEpIZUFJYHV6UE1mNjp0P0xSR0ZJW3UrfVgrTDt4TlJCeDFYJUpBanY7Ulg8SX0hPiZDOWlCTz94MSgqSlJ0RS9IM1BoaGZEeTE0dTBiYzlOKX53e0hmSWZYJUdXPGN7KF47N1JkS3dRTUlhdkhuZTYhc2MwaSlGRHVOZypDZD4sam1nN1h9MCxUfGZsNk4/''@;'; put 'put ''XUlDKWNQPSRBKyNTK2lrTmBuL0U0PTUqNTshbnMsX1Q3elU5dVImeF5vT2VuZzopdVM/PUpJJW5lRkZ7L2w0MTh1alBNaT1adGdoKSNTQlhLMTNuJEREODpdOiR7dUxnUDtsZ30/cUlUJUd4MTFRNkVaSnlRS2hVSy4rZX5YO0w2RXRsa2t+WFhHb3YzVDs3QXp9diMpQEpab3sySDBwcU9CTUxi''@;'; put 'put ''O3o6LkZZTlRGRHE6aTYqQUcidjxYK0sxO0AkUVY0Ij5CdWVWeD9oXXQpRC9IXk9YcltRWiI0RH5IWHJeOXEiOEQpOCJdNSh8QnFtIUdeUTR0X0RBU3pYXzkyIn5FKmwoSDxofiJMQyZpJmExKHxCbVFLXXw7UHQ3Q21IQ2UmcXNQW2gjQTtJcDlvb11ROCJPRlkkKiVeUVEpdEgxVmc3fUBSaklY''@;'; put 'put ''eko/P2U8LHkzQ0Y4XkQzUlJ6Mng0Y1R2PUldeXhFMCNoNTxWYWBKSSp1cUYwXy9JRFVeS2E/SVJNQHk4SilNS3ReSThMMWAkRXVjZGJwMCxyZ1MpOExOZFQ5fG5nLGZTalIzZTNuX0QjLkVFPiRYTklDbkBkeHM/dm5QQ21qeixedkFANkl9ITY6WSFFKnpMNENhVnRCIjQvRihZeUc7MSpbfSkk''@;'; put 'put ''TC9Ec2ZIXnQ/QEZNdmJxb2dyaSxXIkJsa2R4WiFsNHNZXmJ+SnIvaixCIWVDUlAuKzM7NG5NQmlFZWpFODNSd3R7QkouXnZpbE1vXVIkU3MpUiNLNV1gWXUkUUlpekFSOmthbF9uSz1OOiZTdShHIWFDZkt0QD10SmtuV0s/RmxoK2k4QmM1T3NUfENJTU5nSW07LD5HZmAxJTlpITp0THN2bVR8''@;'; put 'put ''e0V6WiU5bTxdKGZvOlM1cmZDVkMkUW0hZik7a0dlMTM2Tm1oSClSRGkjaj9OZ3NJe0VGQ3ckKClUKXYidkJZLF9PUSozNisueVV6MX0oQGJHe25ufmg3OVRkOm1FeVEzJWUiK2pLTTl9cEorfkt3fEM6fi5yVUEuOXc9ezxMYXUueUFlQjgiZz1jQW4hRXYyJGVBbilGZThYL3pdKWVqSj5jQVB5''@;'; put 'put ''Q044QSE9OnUkXmwzRDRpPWJxPyNBY1ImfGBJRTJMaVklbTdwNjNMQjxsbFpnKHFlUnROImEoN2VIOWk6VTxhYTFjSDF3Y0h+U0ImYmdmMncmJWsxYzRMIW1+YTtlSDdhX0VMflMuSGwlSXtzOiwzfGQmN2ZoMTYkO3dNMTZiOjJTfileYWpRKDtQXW5waywxajZOOmhjNmdnOWk+OldsMWNtcUNW''@;'; put 'put ''PTxSLlFoYzpjMiZJUGwuMiQ2ZCghO2dkdHtdYjE2NSNUJEFlPk4/MDlJZypLfHJkNGhoMm0+eXIsNDlOY1tJODVROFRiMjw6e0tpdXpfKSxKRkEyOm4lMnlGZn4pVVJ3QUQ7Knh3OUFOWHhyckByXy4lJXRNJS5jQTgpX2dnZWw5MDtBM1csY1E9JkVYfUVeJT0qfHo4YF11JGh1Ny9gVUoxKF1N''@;'; put 'put ''d0lAdUBQalVjJD8kNUdHTi9KO183UCE/RU5VIzt0JDsuUXJKOElQY1tBPiZbTTh5aGM3YG1zYS47cGpXQkg4R2owcFtOMkQvLGlbKko6XURtNENTOjFhUTVNRSlCOG9zNEs7PU5LaWI+djA8bDN3fHBoS0Ffd1YxdGAodz17JUFbXVV8JGlKQyRyWSwmLl5RR0FHeXs7JkYrOE5DVzVqRkIye3Be''@;'; put 'put ''IixnRVZaNSs0Pkl8RCV5fExTS3wwNC5CRSUiKHVfJlY9YlB8aT5MQDY5eiYoeWw8MSVrPEJCRzg9QHdtV15neCRpM0haPG9EWHV8Ll92RGckOWhsYyRobHV9JSVSS1FdMSlRaTY2Pjt5bm4+Qm1zW2poIiMsPnhGNkEkdyklPVdJUCNVXSMrTzZ5WnU6eXxXMHMyLjNte2p5fFVYV09TLndncFlF''@;'; put 'put ''P0pFK3dkRXpXM0NYKXFBT3VOQWJyW0t+JSpTRjRebVgkQ2UmKDI2Yj1JeU5FMjtYaTVtKmkoJVlKYEBXLy5MaURHQHkoYztNbSU1flhVcVh2QktsX0gsJkBpT1leR2AqP2VZZDhkRUtWRUo3NXkmS3xLR19mNiFfO0czaHNaWno+VlN6M1RAIlEhQE5mREZ6UmVQe145bytLcV1GIzZ1dj1USE1B''@;'; put 'put ''JjpwdWVhTUgqQixiVTBDXjNgWEVwS1NPQGk8RGFvUkhZLDJbPGEubzBSbkckOWtuW25TaClNTVUrXnpNekx4e1hreHheIVtufC5ye3lyQnRoe3xma0tsRi96aypRfGVfJWo9ZzBsMHBOcG5vZzl6dWhzSzNIRWQqO15ERjo0PTpzUy8vNVBaPjM0fmRfdFoqKmhEWFZ+NGFsYEYxJD16fUV8Kyx9''@;'; put 'put ''LiZWa3AqbC50IU9CQEk5VSFCblIiXk08fXwobHouQ3FVcSxVeUAqaSp0OXh8KXxGd0ZBUzNae0QlJm9UXyM2UksrO0tgTnJ5LCM5bnAxKUgxViN2UnN7IUNYfDQ3LEcidiJRdyZJUy9wXjt6TDVqXiRHNCEod1hge1Izcm9oK11FdTUxTH09I1V6Qz9SMFIuViV5O29ZJnsjLmdsdzpIWStZQkdg''@;'; put 'put ''SnJZVn04Z0JfS0YlZT1LfGUkLHA9Q0crYURndFAod3lnMUdAbnluYCwxIT00NW5eKG9uTGlWb1ReUzEhbHlfenpIaXVuXS9jIUt1R3pSSDQuJTVLU19hMXhxW3Q6amlxU0xTP19OM14vM2g9WHwhbClhdkczRFR0JEJHfCVZJU5wd2o9KSQ6d2g9V3Fsdmg9KFRCdWg9c0l1WGZHbUQ2a1RzeUtm''@;'; put 'put ''VCReM0NmYkNxNnRPdCRCPzx7KD50UWomQm1EZWdPdCRCJW1+PmAoWCE8WzA3V0toMENdOjZHcWxAe01MT3FsSjs7OlE4VktoMDI0YDd6LzRiMUNjcVRvPyJOdkRkYCs7Qk1iJE96YXxXOUVSY3MyWnBedDMlYGNMdklPZzNVYU1iXSJ3RzNuIzh7b1kyI0I6JE9DR1pDZiVXTHlRYWgyWyVMYU41''@;'; put 'put ''VFFEYUtOVTxvVU5kdFUiWy9CZkgvQiFONUcmV0RdXVpkRVI4Sk9rXjJOayleVzddXVNad3k1RWQ2OTxIaTR2RFBmSzVhOzRiX1pUJighLC8sK2x3PiRXS11be1N6XWRwZmJYPUVnTXlWN3NPemF7ZCghLm5MNlFiLDl5Rzt6ZHcyP2k8VWEhTjVHKjJOKnAwU289QWo2enRCJipGeEIzaXU/ZERF''@;'; put 'put ''dl9uZW4sXjQqNkZ5Z35xL3QuVSV+cV4yTG0qVnQ5YnRndWhlSm41UjZ3OT5TJi8+M2ZQLngmL3NxRCF6NkxUNnFvIyR9KE1BNkNMQjB0Xil4dDt4JT9deWooL1pUPDo5JG9MK0ZZRnl8NXx1X3lycztjXzxqb3dXcHtMc0wpYnE7aDF8TCQ1PF01WFtqdmBMY1U9JTpWK3cxRkQ7JUswcyRGJllg''@;'; put 'put ''figoSC8mVixLUi5TZjdofG1nLHFRODN3Yjl5ak1yfWgzPzUjdWIody5SZUwmMD15aF06OComeVlgPDtUfjBJUGwyPk8odXFLVGx8VmdASWx7PFN0PHJfSldZIjcrI1JRMX5SUldNKFdBMispMztqUExyNElVP0lvdV5TVyVeMEtYLC4wQ0ZQWWBpOm9rI0JQVHYxQDQ0bFpGaVY3RElbPk5mPjg+''@;'; put 'put ''WnUsMVJWUl1tYiJ7dzFRUlozdXY+KFRrYjF1NTZ2X0tAWnhkSFRpWVhdVWluIlZBVnBFRDx4dSpGL1hXZDEjUmB7XlpmKnRJRVc9XXdnNFZaPGEwNyU6L1JseTpSbWZVXl9IWE4iYVIxRHZLQm5NdXwsVzxBZ0BQfUp8Q3hKX1NSbW5KXWNEQjZ7Pk8oYkxYQ1FTNEM6UmxFL2F9WE5yIVNPNWlP''@;'; put 'put ''Tkgxd3xXTkgxJGhKfUske1E3JHFCK2ZTUiZYKXYuN0lCTElSSklOZVp2NT13KW1jaVZNRWA/ckAxKzciIWRLOjQ1Ii9nPlohfVZ5fTtmPDg6Ly9HNnlfbikrYF5ZQ3V5PFdNWW8yRUE9ZiJEUndoe0t8TmJ5dCF4fC43PUNTJGZHM0J0MlNJOTZsVm9FIlgkTCVqQltyNyImI3BqO1dXNzZOeENC''@;'; put 'put ''WEkzIzM2NHMyZUtRRSw6cT4jVGIzS1U8aFFwfCk2QmthWiJUe3B3P00mTjQ7eVI+bkBHOGV2Wj13SiNVT0pETVVKWGhQR2J5VmU1ek1scFFkOGxfYnlfe1tafFRwVDkmcE9vRWpUQEY5TW1nQEw5R3NZWkBMRnN3aHBMMDN0RyFORDQ0Si8lbS5KbyM4Lm4zUzkwXzFQPXVhR3NvbGgoSXJHYjk+''@;'; put 'put ''IV0lZXlvaH0zTkd+SnNFSGcsZ3ZWdT0uX3Y3JHFMJT40XVteTXRJJD8vZngoe3QmTmpjUS91K209IzN1WDlGWX52JTt6V3k1cWorbEpvb3cxcUBHW3hUREhoW3RbKFhxVDZTYzhNIy41JW5pVjdvTFVdM05TWihKVD1OXmxKT3BuKDxFYU5BalNTMnV3YEVVUS5UMVA9JEQ5bU81Y1ZMeU1LRmY2''@;'; put 'put ''XiIyckRrMlBjVHtxN2RVPjxJSjVxNTd3QzVkXS5ZekE+X3soTVB9aHxyRStec0tzYmprZUtjeGw2dnw3OU9pMDdrPzA3cHlOa2MpS2QsKUxkRF9faUUyMXc3ciNTYDJUe0NobF06enFUXXo7aDg5MFVFISk0OklXOCF8Nn1qaDp2c1pePG5eNE5bNDw8O1U5cVRYOiUjKzl0ZGMxeXxJcEw2U289''@;'; put 'put ''ODF8L2hEO2UrKTQpO1RqUipfYGsjdW48QGVWd306NHZ1YV96Knt2TjVkUl12RSZGMFU7MnZdanMuXTxWVERKfS89UC5BM2plUDwwLkQ3UCk6VmMrcVRZJVd+az1na29iLChQUUl7bndhWSpjPz1mOVp3KyZjW3Y7fUJUaWckcCUkKlYvPypea1g+QmV7dHQ0WnU0Lm5wRjg4c3NZdnpDOG0+JT55''@;'; put 'put ''cnEjd0dMRjtWdFssMVNALkdGKj5qNXR8LDBJTD0lOlc0Y1lJRDF2ZllPNVA5YU89LGFPKTJPSzlJKU56L3R8K3hIU35bKWxIeXNXelZfcGNbTCg5Lm0lS3w/M0N6TFs0cz8jOk5wOytRQDZnO2tmP00iOEE0byl+UUdfZD9ONStQRHQlWWVaIUwqS24uaGp9MkJiSFo8Wl9TMWlWZShiPGJzNkFF''@;'; put 'put ''KXVxbFNwS1AqYHYwdzc4YllYVTAwXWxNZDRUZEsrVzAwXVZicWQxKD9EWUA5OyFiMDJgUUk2VDVZYHlvOzVXRVtJaFQ7a3RuTW86U2AiY0ZoN3xCeE5uQiJCXihYXWA4Ik0+SzA3az9GRit7KnQzL0pvOztjNGdrTzcsbnEjcWVuP2FGVzdra1VwS1B1ZHB9VWVUI3w5L3gxTF03N3Y6bnFlYDBY''@;'; put 'put ''flh0azNjNlU4fS5YWWVCVjhPKyE6bGY/STBWODAoVnBlMXNjWmsqejYsTyxCVmY5Mzw0TWIhYi9IRiEjU2QjMUM2K1JmX1tnRFMwaSFASmJLaXUpNC5IU0pbZUs7ekwmdmlRZXBOJTNRdWlseyRIfG1NWFJyeDVSaj93SytdVng9NT5dJGVyIjJMdj8sT2c/TVU7QWUsZlMrV0BCbnIrRVhsclFm''@;'; put 'put ''NTJDc3wpQjgjOUIlKXloPilRPz9EcyFaZT0mZ1kqaCtzVTdDKTp+cSFScHI2L19Ua0JdOEV2Zkd9OjN5NiR0SC5tNTIrU2x+KCF5NGsrdTt2VlozbzZYV2x4UG1OZ0AjIkgyRi97Qn5qdmBkTjhnQ2habVdXK0g7OVo+PXo7LkcsKmR9MVJuUn1OWEB5OGFzWntrZ0kxNHdUaTlSfk0mTX1GPG1Z''@;'; put 'put ''aE9fbnZKayVTVWxRb3JMIUxmR2ZQNjlhJTxMUjQqWjA+MEpLSn5ZO3FnQE96QTQ5QytwU0B5OFdzWmVgX2BOUmBLWCNqSThAaHgzITEvO2p0Nz0pYEp8IldWKjc+U199Nnh6N0hoSihJJWxlU2NYcWJBMntjRlc0bXUlLFZ5ZmduT29vbDM0VXpUPDR6eTZdNEFoPC98JjxJUHBSU05LVndHSlVP''@;'; put 'put ''fXt5PVsyaklGVVJFLCQxJShVI194JiwlKEwkQ0tkPWUwMFh+JnpscDlIMHYjTWllI00jRXhsc0hBeG91Q05SdlQoRndzTkRiciMxdlZ2NmUwRyg3Y316Tm0kKG5TalBreiZiflI7cTJISmxhQi80VWB0aDo8fkRWWzddU1BTdjEzN2h8RH4ofT5oKCkrejloI2MzVjJ3dDRoLiUxX086TXMheGI+''@;'; put 'put ''PihvKHV6M2s1d28pIkMzdkddcCkiLEkwaT1HZFkmdXozdGJOaHlEVzA+cSV5LlsxXmMzcXM3VDw6X2JkWVgySCo5YkwwZUBXaHkoWF11eE5QM1RhK1VQM1RVblA5fVlWMEkldj51X1Q+MUArbV9LVjx1eSVuIXVKXmhjeXhBRFFzMDRreC9fWXVCbmQzZSFSKC99fktsYVMrXXxJdy5vbGBlTms+''@;'; put 'put ''cyh9PVhzMkRCPEtwIVlvX3wlTGpiREQlXm8qQnp9SEpCRzE1N3RSXk1qYkRAfSpVU08+eSNWKTc5NmA2KnJxXS53fFlPN200Qz5eIW01eno0PkcrQyxAS2djOS82cTM8aC5MX3tYXkdbYztKPm1oc29SOHVQWFRFT0Y0X2E1M0RrbkBwMTR7QT5FQSZxXUQsK31tViQ0biw3flRmU1E8NTd0QVd2''@;'; put 'put ''UXFlN1RzYztXU2RxQWcoMGRtc2xxNERmeU4sKClnZHFBcGtGIWE0d3gmdXlLPGRaYjF6R3NtOHBUVVhiT31oMHBfL3MwfDIhV1I/cEJ3On1rL2pKX2Z6UWNWWU12LCp8eldwaGJkL0gsZmYjYEhRTFJbJGglbndrcVMwX2JnOTteZTk0XkBicngsMTB3SjJHYUE/WX4oMmE5Zk90K1V8TzxNe2Vh''@;'; put 'put ''emplTXZqPU9FMC84azAoXkBidFlmVWEybCZaUzFAYCtnfUxrITEjP08+eWZwVDJXSTdBPEo6OmFEOVVJbGwxa2BKODBHPFpBPF17UTBYTHZ8LCtQT0ZwQ0skenVxVil3dEEsJDVWaHgsOD15OGR3SWRJPkY8T0pSb1pwWmQobVhxNEViQS98bjpMMWtaOmB7ZF9IZVR0OHFFeCh5I2k8K0c5Nmsy''@;'; put 'put ''JV0sO3UvdDdmK25pWyUlXT8ob0N4KHlmXyJKP0Zpaj9VJHlwMkVnKy9xMWgsXkNlP2pbcSlxMyxKeH1yYURTamVoWENZRFozdVVbL3NpQGZhc0VsZ19dXko9TVVaUTFvRFU+akAyJS86d0U5KmZqUW83TTpRUHImUTw/QS5eO0o8JHEmbHZTP0h6KzF9OEVrdjhAVGp8SWlAM0FROyJhXXA2akNu''@;'; put 'put ''ZFB2PCR5V1BwWiEkYF11az4uKEo9QEVvJkxBMVIzQ0t+PGl6LmwrQyQ7UG5jMCVGSXpXJDhiUmBoXUtLIVo8Rk4kcVJWbzkvQVlBd29PcDtHeyVGIkZuL3BaIjJDS3A7MllMbW1zUWo8TDVwZC8lanxDZUw6OUFZPj84TTNZQXd2Ly57ayl7ZEAsO1Q/eyQkd0gxfDpUZEJbJl84VXopTDJ0fUQk''@;'; put 'put ''O3Rse1syWlRmbntHJC5nTDlve0ckOXhZNVZyWmV8cHp1ODl0IXtALHI3IlVwIV4sSkFCPCVZJXwqaDdnJWZvJCNlPzM3YylDVy5MITokYCJHSzdIen4rOipiVTNYPHM3InIwallTN19sdWdfMzBvdXlhOG1NSj1xUU0pM1ViPUYuKVQyWUdsQHtfRnp5WXM5UnZGaXp1VjtoaCE/Kn5sVz16c3dS''@;'; put 'put ''X3l7byYlWGcjeHE5ZXxtUFZneHk1KytwPyF+X3o3N0I9RX0pI25ZSGNwT2c8Kl45Y00zO1N0MUgvcmdlLF48UnIlU2kxSDc2TEI1V256ZHhbbXp8SnNBVk9EI0paLD17c0lxTEgiPzNtRWo3O3leQSxeU1t7SF17aFVORV1WKEY/S0BsKF4uXzhoW0xlQVcmM1creVpkXWEhcld8VWNXcDokP1tj''@;'; put 'put ''RWx8bUZ6RGwyQG13eT98KDV9O0haaj5GJVNBc11jRWcycyszbjQhSVYzMS8vVD9UajtjRmFuQCs4filbVlV3dGE+cX4wS0tyPWM8aFZ0fW1UOVJkN3BKNFUuUV9IfGk0YylKNUNWYF9rQFQ5OjN5fXdbN3ZVM3FrXUYoOnk5fj4vanxXZk83MT55Mz0pRUlUdmZqfUZ5KDJYJik8NlUoW0MyTGl1''@;'; put 'put ''bHFgdjliOi89SDp9PWUuU1B7NFRRP35aQV5SZH1YKCVofE9JOUBVQGdIKVRSa31IeSUkaFhiTUZTYn4xUDNmOEw/Yyp2aT5hRUZQfkN5d2pqKyw9VW1EKEpvWWQmWkFLIURrNTNoXzkxZ0VTZEMmZGpMOT5LaX1GPWlAXVZ8LmQrIyNWRGp6Knd3Wm0qPDttQVp7KSElaSRHd0t5JD55OzxQYmRA''@;'; put 'put ''U0Y3YjpIfExSPF5GdiNoaDhNVWNbeEZ8eC4yRCtsLjNXN0p6fFZYbls/M3dwQi8zNVlaPEdDcEp5emhiKnlub2dUb18ze3k8TkJ+MlRRbyJ2e3s/Omt+fFU5e3BXeHJLI2Zob152JFpVbXNeMiM5fW5eRU9AN3BoUVhmYFtEVilgZ0RfYUc9ImNrJGdhZ3BhNjNgPUZMVUpvMXkxUGVzcHVTR0lF''@;'; put 'put ''LGYucGJHNkEuQzJfMkNIaWVeYzxbZypGRiU7ITwmTnYuYXZAe3RPL3k5aHdiOX4zOVc0VToycUR7JXNWd1dqVFtPZ2A/eWErO0l3ZX5bNT5Za0lsOThhWGFxXUNRKD5GPCZxLGQjbT5ReCEvfEJfRn4/MCs/XUQufDJydiFEQEJjfCNhaHhfSDF3U1k5d1tTN3VuI1RiNDZyLDJNYmY0RVBXcXk9''@;'; put 'put ''Nkx8N34yNW9WaTs2eyxUMl5GPzt7djEoVltpcSRrPi8ybmxZe0I0byRSXVtXV3A2JHlVLFU4N1VAYllLNXcmS3woJShVNXtJTj1HXTgpTCRKUThhYkU/UjpKYnZZTzVHc0B1VTtCZVN2VGVZbkRlUzVaMD01TmIzNk5ITEdXTUlsazt4dWUwK1ZxKVZbcSlRXzhuKylPRmxNQltCdFdpekhAQl98''@;'; put 'put ''K0FRWU8keVdVMGNla34jaDJJbDJyczFZP3o6KiJRSjJjXmQsS1svTyh1ZH4pOldNYSgrLiJpMVU9V1dzWndXU1BVRyVMJVNlans7LD89cFpCdEE+fVQxbTUlJUEqZ0o7YDR+KUooS2pEITM6djZYfH06USVTWWtIa14zdkltR3JdQSU2aF5MJEUrcVQxJkI9bVQiZm9aa1c+KUQmYihHSnkxKDE2''@;'; put 'put ''TDRWbWgme3xnOSZZKElTRGJwNSQ6Zzo6KmxKaWFtPUg7LF9Cdj1bPUJORTB1MiVWPUN6cHI1cE9kPjk/ejg9QmsuMD1sRnFEfkUzRU47XVFdNjZgYywuP21jZiE7YnA9Mk41KkhRWGRjMW07c3JsS1FRPn4kW29SU0gmMn5pOy5bKWw/MzRaWyl6by5mISllW0QleiklOn1vQjZQazE8eTdsIXI9''@;'; put 'put ''L0Q3aDksWGVZRmNaJSZOfDFtUl9uZVRfUXBGPj82Oy9MPVBSNTFVZV47IilQeT14ck1deylsSzdzdXlXPHJSWENvSktRRV1dME1zVStJe1srcVU7IjJxOnt5QExpR0NidFYwUTI0VmVPXnxGTmJRXX4xbmh2aWJFelolNmlGLDNsYEBiL0xzXlJAZHZ9fUd8TVhFTU4yVTFfenVbQVBAMTlXO3NA''@;'; put 'put ''Vk9fYzAoUlBGTUtvP0B3RWI4KjF0KyIqIitXdkxsRTRyPUx1I0trZX5VTGNVQDg6Vll4b3h1MX4rcyk5VExpfnEwfC9ASXBFenR3JGowTlBFOk4vQXY6NXVYOClOa1psYEdaajlsUWxvYHNxT2IlQndST3YrJTp8clMrfmx4a0kkaXRKOFZpTnsxYGoySDRAKHp2aXUrUkFnfms5PUtldUhhd1c6''@;'; put 'put ''cFpHI01Za1c0bjUzXTh0KWReVX1xMFFvSDZpfmNeVWpGamR7SCtCIzNtRTtVW0NNcztXW1UyOnd2WkcjRCMlSUI5cmN+OC93Qjg/Kl5fKil2VSNfaj88P1JCK1g1Xj5oUUgyPjdWMUw0LnVxTmpNIiJHLnc6Sip+ZD0mKDNaZCkqWlArZ3F0fkByfWVSV2FnQ1FBV215ZDBbIltNM3YyO19iTFAj''@;'; put 'put ''Rm5daEZlTCVMfDNXZTtYdm5GO2FLS0p0TVhdQGImNXdqITtTP1ltRzRuZSZ4fEArfUEjK15+IXZfaWk7JTcsV3laK2xGd3FkIlhjfm96dFRFJVUsVz5FTkgvZ2tPJU5ZSXR2W25zdUJOQzU4W3NqSXNPN0hIYFM3OWJ9eSZuTUAiRF8zP31bcHw4OGZ9YTxgbF0ldjw0IVIxKzJfS3p4V0UoX0Rl''@;'; put 'put ''UHleY1U/NzlALyorXWQ3Y2tKPVdpUGJyd3wrbWhLQE0kNzMsNipST1NAW0ohIVI8cSU/ejpJOWc+XiYyW2FQXkdMYi4zQi4zbjwkYn5VVV4mUHg9aEVIZ0tJP29pTnlDX144Uj1YVDlzaG5EO1h5NVs0czorMz9kLExVKE9KYF16VHQlLyk7bTJrM0w0a3B1JGM4clp4VC4qZUtiZjgxRXRnOXdP''@;'; put 'put ''OmZDdGI+Pno8MlgpOjEmXW9jPSxHRWpnVm8kOS9mOkxxbldWe3hnenJaWkZAMipVNSQlT304PW97YjJBXUlRX29SeyQ7W3c4Mi8/SXh4W1p1QHE4bk1VdTBzPUZGV2MpYjVla05aJVBSP0d8JWdPOVU0TCFkKmc5d3VLWDlQYC5TOS8xbGJKa0psWTFsXj9VQGk1O3FfXiJWbzs+Z15ZT3JdSSZn''@;'; put 'put ''T0wrSlU9X3J5Ll8jPV1gYjMlK1pKY1dsXkY2Z2RFUUBbVyNVcE82ISJnc0wyM1Q7cTh8cCRpUGgsTVg4a3khWiVga3cyb098TFBAMS5+NDxGczgvUl9pdU5eP1ROXioxMm99PEVXP20lVUFuLl19e1Izc1U8ZFJJYnowWzBzJTBhYjVfZjNUNzhka2UoUi9bVFp2QDVVRlNUYz8lN2hBRnk2RElA''@;'; put 'put ''MXJXV25DIzkzZFYsOHhUc2Jkcm4jcypUQyV5PXYkOFBxXU0rV3pqd1hRKmNbWTVdWjEvNz1CWVhLM3pndnlHaiRaTXw8b2FEZFspIU1ILml3P1ckfXNeSWBLRlteMT53L01LL1s0aHxSTCo1TSpDdjVgMkR1Tzo8VEN5aS5EcDdSJE1scC5WQTFCYnY/Oy9WRW5SJEgsXllOKH4jcjFGRyV3Zmc3''@;'; put 'put ''d0V8MnJ9YUtSLkpwXV55cl9jaF9LPDg9Mis0ek19InI4bjJjLlRUOjEjVyQiPjU1azFjPCZ4W0ZpQG5yWz9mdlFZOVRJJD1tVV5KVmI/NUBXOmh5Xnoqc3NqYm4obFlRbGxJYGZTZmYjKzBpeGY5RlsvS11FNUV6UXo3alosI2tUI1BoQ1MzNSkwWi9zXVVdWyp8en05fGUhNDNCTjdYRT5IWUhI''@;'; put 'put ''JWhZOio8Mj8rPnlUNERBcVtKSFlISCVSWWJDZXZbWyRXbl9eP3x5R0VWTE5JVE96VU9kb3AvRngmY2IrUms6THtqM1JTY302Vkl0VEcjWCttOzI5PDl4NFAoZkY5ZkFuTUMoPXskTzlbfDxgPVRRaEBNOmhHYVp+OEVyWkMmbHNsZlFUdFQxUSJGLlIvNCtafGBwVi9ZQzwyeXJFSy5MfjhQQTpZ''@;'; put 'put ''U3BWWixUTz9KfCNhMWFPaSZNO0QhVG57P3pbcEJMZU5+WUA3QXFobGsyVW4sVil5JEJebWNMWUY5NTIlVmdnbEBMZnAmLiE5MTZ0MlQuU2syTTBoQ0g1YSRZIypXTXFoV01TUFAlTUtqeSxkSFI+OVQub0NLb01eU1hYNWpKQ2VsOWg7KyMqcU41e3Q1RFRnSSVRU207RFtbPGlWNGdqZCokXlV5''@;'; put 'put ''VFZvVD4mdj8/enxRNk84XjQzOjdxKTBybHx2R3ZkPWo4K04rbXRRKWcwciJEKFhSazA8Ri5VbTFVWVc6V21NWEJhS1s5ITR3bmNdVWU8Qz1FNSEuZ1tTTEZSb1JmdmcwSkRMWjw3WCJMNWNXRDkuakN0RllLejBNYlgqUXRhfio3YWlmPigzaSFwKix2YyRzKW1hcXtKRFJ0XXhHQmB9XmlOUjpt''@;'; put 'put ''L008Q0hXOSxyQ0BdOk93SHZxOj18b0pAd1BVVyVaYDold313e2dWcE5tSTwyYS4pYi87cilvTVhQPE4qeHxOYmVeWWRvZWwwJjQxfHcvQW1ZYW5kMCx2SHg3I1pMNkxeT35LTGAweXg5aTtVMzwheExeMig7L1tHd2ZXZykkNFl1P2B4cWFxeHBgMlVuUkdTcFd2PFAySFdiPXRwMDV7b0cheH1D''@;'; put 'put ''c0tzRChXa1ZLPSFfMighMnR0Ln1LP25MbHIudUkrRkBMUFpXNjxUfiRFYGh8QSEzblReWThNOTxNOW9nQ1A7RHp4ZV03NyRwWi9PVmd6Z2JZdHF0UDlpJltlYSFTMGYzTDdUW0h5Ln1lU1JWYyk1UzguXiF4aHgjQj1ZWnZsPSNNW2R5XS9baWtgW1g5dyRpTX42ZD99d35udSpMOjc9Ni9mW2hp''@;'; put 'put ''OjUsSkVzZ3BpO01QbXN3cCpeSE1tcFhrV3BKXVZ3Nz8uN0FVbzI+WFVILyQlUzsvSEpwI197ZzJ1RSMrJjpvY35dVC45QD5uWlVAeyhLVjcuIX1FbDJdeEghLFo3NywzM1hONXRLT3NAKXJgQC9XRjcoVDlZOzw8VDU3KitNZzdhbVZSaWVKelpJbG5gTzNuWF01QCQvN04rXXw/fXxJM0QhLFFi''@;'; put 'put ''bTgmM0kxMnZxSWBbK1N6UTw0VH14bXxtZWc3PHZfQW1WJStnVjAyWURDVV95KSVsVl9PUzNqTSFXOXtXbXdDMEU0LkdIY2pyMHwkNDx8NHhYdWJPYHE5PCp5JjFwMTQvUk1vKjVCaGIvUHNlP3N3RExIcSxmJmx7Lk11U0NWMDQpX2o+U2R1eSYxWmkrfFJzazNeQi82UlR2T1JYa3NZKSFEMDgl''@;'; put 'put ''O3JsemZiV3A2LFhjc1tUaTUvdWNBVkV4ZDdwekNQQlo9bHcrQCx0XTE3NTphWmhSWDVMbVBpc1k6W25Ob2hzWS9bRlRNVkxHKj1zaz9mfnclVlJgTnw7Wy4yWDZVdV1TMSkyN0dKQUZyRmxdSHNORWl3S1lWS01OYlE5W1dSbkZgcXV7RH5IJks6NzNmPD0vaDE5diYzPDQ8YjVaTFJwMD9xJUIv''@;'; put 'put ''UGFTMGc5OU55W2RCSUk7OjdvcH15Z1kxZFYyUGNgT115fkxRbGtTK1EvNGRwU3kzWSMzeUw3MFJ1cUFpJG1UQnY6QCtoInp+ZUM0L2xsWlYlLmdRd3B5bVQwfUxXN3JoaUIyOD1xV2hdZCQ4Zy8pL3pWOS9bKWRuOnNJdTR9JVprZFVIUUBNdlMrZGclfkZIYDVjLk40W3c7QT4zbHtvcSRfMFZ+''@;'; put 'put ''RFdqeUM2SFpZOGMqbkpwZWRYY1c5LDQ7RnpXJHU2U3RjZ0VWXmF2b1JzJTpjJXokZzIsblZZQjZYcH1oQDxLRyZhMWBnUk4uOEBxdSFeJXlsRjY3LnBAb3FNa3BVPVlwW249U1JTMyM8PWUwOmUkaFA/OVh2LlVsOThmc0skIjo2YHYjYC9XJWQkZzJrP19da3ksZDRYKnZ9YCZhIShZRU9EWmVo''@;'; put 'put ''clpgMSpZY05Fd0g4cTtxdHhpSUBuI1Mid3k3dCZrUyRNa218ZiM6VGxeW1pWP3xtIytHRW1TWWMsUWZ+SXFYJUVOSGxEKmksPDZ+eX55fnl+eX55fnl+Yj5EYiV3NjVeTU9JQEIrNkldfD84cl9zIzdAVi4xJXFbYUNVXWFnIjxARmBQK1JSNEZjVnE/JD85WW5xUlJ3RmNWLjRkb05WKDcuT0hv''@;'; put 'put ''RCVaJlI3NkN3SC9lbDB4fCx9PW8ien5LUjtwNm15eTEwaj44Sn0hIzdmUXAoX0V0O15IVmRdc1ZiXi85ZkBTVWUlZDh9MGo/I05SakNEQG19MmJqbT4qdDlGV0xAcH5YMHJKS3ZFJVVBJnU6U09DNztASVNCL0JfOXY1WGI3Q0Q9USlbLDQ5YG9pPm8xVV5LbjErdkt2TXtHfH5JJlkodSx9Xntn''@;'; put 'put ''KCgzLGAxUnt8MFVZTCYsUkAsNEo2ZFBNMUI6VlBMST5FSl4wdzFVa0MwS0Y5dVY8VWh8b0lwVGFSN2IlcitDaGtgc2ZeOHY0cV8pZnViOUV9ZWBoKEJkIz5lI2Qsc31OW3AlX2d9W2VyfjJdPmApVj1AejRycF0pOHlZLkVBK2htO1A8O1BzaG03UGVWQGltTDVfSGpCS1t2bEZyL094cH0sMX1M''@;'; put 'put ''b2AieUhgeHxDci5dUFtaSS4xPE5sS0glKFJhXkZgMUoveFRsd0NrXUdkdmdtNywpPDshYDlqLnhbOHZ7TkZ6ITk8JlNMb2BpYEVhZlY/LnBySHt1Q3YpM3w+ZiUsbnMoYSkkUHg9TDs5VF0wNThvSFIzVzlxX0FVekY6OFc5cEhFeCR4cWVeOGclbCZZVSZ7PVtDOGF9OD1CO2dsNXJ0Xjh9VXph''@;'; put 'put ''cE5bYF4wLmI3aX0wPSkhZmJIKzxQTlRJbHFiUT51WCZgOXZsN1opWkZAT0ZgNC5keXUpa10yPCZDcDA0PVFWInd5N2Zrckk5M2svRV1pZHFGeHlaKyEjfUlyIW9OekV8JX1Bc1ZneSZDQ3V1blJRd1lkT1khd14ud2w8TUg7MzJVQFBGSEVMeHZSYF9ASG8mbiwxIkxlQmkobFZGTEdYMnFLQEhv''@;'; put 'put ''eHFDUylNLFkoUnd+UEp4cj9IezVAekh7LjEiMU4zdTZ+S29hcD9qNV5AXWpdVlEybz9zZixKQ1lZa3Y6bndwKWh6MCw0a2R0K25geF95fEhXNX4pZEpiVj44em1BUTxMSShTIWc5RTQsRn5dTl4zd1F7XmtbJF50R3g9cTxRM31dOHh6TlRhaDE8ZjNhMlV1dzJTcDYkRChMVCVQLjo+PVZmVWlB''@;'; put 'put ''eDJBXTdPM011fW1yLkxoLzUkPD96KUgxMl0weEVDPjJTJCNwWUZyLkVZNikmVU56SyUiTEFeOjNDajVPeUspaWNIUUh4MkFrbD5pUnpDcUgpaTdESStWaFJ7TEpzeCwkdWhvTUxrRmZlc1pzMmtlQyRHdE1eTzgpTDJeaDc5Ymg3fDJTaC5dPFcua303U3JSeCxOOV14UiZgaChDOnsrRFBsM2Vw''@;'; put 'put ''d3FpVk1TQEc5fXZiNF9iWS94RiUxRy9uSjVmXSldail9dEY2RyN4PFdmRTNQS34hKX1bX085KDtoS3VpIUlaVUh7c2p2W3UwbkVfJUN5ZHBkPzlUInxhIWojK0c6cDA7Z2xpOSQlKXVaVyZXU1dNOzlGOHxwWTttYG98On4mTlR5KWd4NUJePDpIY2ZrRWN0dFkrO3QkaSlSakB3QFdebzt5aisp''@;'; put 'put ''RVFpJlJvWTt5ezlNR3FZbkVhOUohKCMsVlNadV9LNV1dUjsoTSojZV5veSVKQCpsMj9rVzhzJSRFJnlRRHA7R3NNMFpkeSR3XSY/NTUkOT8xczJgZlRZejxyN3tQJileJUQlQktCIyZZJXFBa3F4OEdBLy84YkhsU040ZGUmaVtYUWUyUnZEO2Qufi8vJHpOR0M4TWVDZVYpfFdIcjUxSTMlZDNz''@;'; put 'put ''cWVKbHdILl43Li95R3d7NnRZOTZwezZhMjEvOntdRmUxRCxSSCpNaEkrZTY/ZHZoKVElcT04Uno2SWorK2Z1XXIoVmA0Z3Z9Ojpyamk+c2AoUlJuckVxSF01MzF4SUAxJUsqcUAxZzloa0BxS0QpOkwpd3NORGp6KFpJQVo/OFsvN2NMc1N9SGRZUDR+RiZOazQ9RSxYLExvN0VaOD82W2l6U2JU''@;'; put 'put ''OV1zK20kM2NxeVB9dUV+RkF3Z0ZbVl5zREI+Nk89aHZnOyxfO1olOS5AdmJRa2luRlNROmE2NklUR2QvRUssJmlBT0VdVVlTZ2RhOX1YRWt1NjBESk5UeSFob1QqKmssR0ZgfUA5PCUpVENkemBfP3JEJjxUbCZwL29EMCg0WDkqNExGdjRjKSRNRXxpQHpuR0s5UjZlc1l2IihvZT5QeDtxNTBL''@;'; put 'put ''L3pmVU9DTmslTSpaN1VmdHwvc3YxZDRJZ0csdDhLUiNtM1VTPzs2fVlMUSsyWDdWYTw8YGVGM3tpeSptZUk0bTlRL0ZZZWJPQWUpRFcpdEhxdVRfVHtxSCVLbCtwMnZnZFZlKFldRElYK0BYdStvZENXY3p3e25XPiEyYkBYbClQZHx3VjByMDBEbDZDUzYkVC9oXUVKfUd3fjNGRmo8M0grTypE''@;'; put 'put ''Kz9ONyghYUsva2xAMEkscklsI1RkJlc4W1R7QC48aE1GNHl7OEtVcl0rSyVJREpARzxzK3hZcm1fNmRmWTZqU2wsJV9bbHd3eUpTJUIlLk45ZmlSa0cyVThTYUlEWnchM3F4NEltT2BPaE1GTnghelE2TDBXQnlaPGJ1N3k4cC5ubldgR1BpX0NRZEorPWNrSzF7SCNZe0t9czFsI0JUWTMocnt5''@;'; put 'put ''aDMocmU2dkY5fGIxO0taeTNtV1ZnS0plez97JXsmPypNMU9mez9yeVZyQmRldWV5WmlBZTQ8UWwudUkoSWRSK0xfbSU6bCEoPm07RFdudTF4Yj5JbTt+QH0zOVRUYUAxZ1YiXkR4VnhgYXd5WzN9b0ArbS48TSk9K3VdPEIrfCpwYFdfcWh1PkZQdUw4QTs2WigzdilhVHtVYyg3M3dwaDcoa2dV''@;'; put 'put ''cFooYWJuZE1bI1g1PCRVUyozZT0qYTlLW2hmL29NVSFifTpQMkUoTlRGZDJ8YDxTYWYxSE9PV3Y8JXgiRzhVVTtWLnN6QT5Qb2g/dVtUMyEwMDxbTlFwRlt9K1F9QDBOc3hmdjFPdzMmQ10kMCUjbjBWfmZHbkZOOC5JVmpLQFI+PXZvOChzPk9KOjBFcH1Taj8sdCtYJmxLIjA8Xz9QO2xBK21h''@;'; put 'put ''c1l6ME5vZFcjZTx1USw2KVh7RikxTlQ/fSZTTCN5W0ldeTQ+RCw3bkRqcEZXfEZ8OXxwZmtxdCZ+c102Ly9qLCt0c2dbSFFHTDsoNUM1fFZUPkVsPDQwJkFlOWl7a3o2NGg/UHl9e3dbVnd6NF0uKXRZaiRqTkpgdSUzJWJZRyxkXT5YZVhoMDo+WFo6dEomPzA6T29HZlAoeXcrcG1HTX13PlM4''@;'; put 'put ''bUwoOixFUl45RWoxJS5Ke18mZD95QCI6UkNMQXhOO2UzLElAMm5PdmU5cHA9SU5iPE0/Ons7PVh5VlV+UWV2NUJMKkBNUDlJaHc5I2t7PCFgaklWdzVdKmV6Qjx5OnMyLCV8LjtoXXZOazpdW3k4TX1peSgse0NPaDAvTz0zWik4RWJScEx1NHNuOGtRcThYUlJ+KmJoLE9Nalk9VWZVNGk7Iz07''@;'; put 'put ''OVhnNlpVY1JMLExbMS9Jb3VUalRjSDhZOylnPE1LcTg3MXtYdDlCIVckdy9aRUg4Tm8vTCpuRnQqbzJCVzkyLDpUa0d4PTFPcTNJbEt+YGsyVmRGUURoQ287ezxHRSpGOlNUOUFINjFbSXk6Pj1QZDBGbCxkNyw4OzZWdXJiOzRaOTd2cjhGX0FjSz5XdmkrfG83e3FfZW59bz5pS0p9bWY4eD1t''@;'; put 'put ''c3Z9aFBoUyhedlBnTWd9YkgyITh+aDM4d35NPS9RN1ZmOWFXe3s2SGc0MmB2VChDK1BNSWEwSj5ycE0vJmFrQS9ffnJyajpqUTs0Uz98WzQpSlIoUntdYSYsTmw2cTQvVE5rPyN5NSVSezxwcihMSG9lalJBei9GZ3JWJVZYeilNJHNIYHVXcFZ+Lj5DQHNAcUg0Ims8XjNnbGB8eVlGPWJ7bW1W''@;'; put 'put ''a3BVKFU0NCo9LmReWF9tVzw0IzQkflU0M2c+UXp6V0BVQDhWKGc/SVQxN2s/YHhwMDQ1Q2F4bkVidVU4MEN2MnxkYmMwfTZjaGxlK3t9Yno4Vn4ufjQ0PH5JQEckcUEmSkpwMGdWO0BxK3RfLkBTZGksLFlFKlV2RkBxOTsudjcyQ3gwJStDUWBOSUouRFcsXXZlQDQpOShadkZAIkl9R1NVeUMv''@;'; put 'put ''QHZSTG8rVWdLWUZAT0koNjswLG0vfj4wLDlDPS5aMnsrfS5dMmZ8dC9dSVlEP0lbeVYiTC98NCIrVThMRF1UOV9kdVosS2Fjb2BucHgkZlVkS3kualosKEtyNCZ6S21vNVtAVSl2L1AwPi9DVTRAODN9R3lPbkc8SGk7RXNNO3QqZ1pWK2I5UFYjSm1dMXk+ISE4QFQiZEhZbFN5Ul17XWIjYnk1''@;'; put 'put ''SlNYfGtsWnhSaXFIVGhtTWh4I05oTHwlPE9JZGQ4Ump1Pi93VGldJVtNeyZNOWY+LjRtZSwuVlg0T2gvOXwyLm5DSUlvTVU3eCUzPnZyel95UmlPMl9oUlg1ZmQpdTV0IzZiXVR7T1MsRnR1UnhdUWE+NzZScX1QeHImZ1V2TXtwWzNwd0JKcCxUVVgiJDNgVlJ2bDYxNj0kOTEmbSg3NXxVPGBY''@;'; put 'put ''NVs4bkolK046eiFUR191SCQsdEJ+VEdAVVd8SFBAVVFaMSYlOnY7NktlPXNpVCsuR15AUDl4YXA6YjJEaE1LSEZmfVdIPHxUO1BzWTVhV09JT0hJK1hnJFlxaXRPWV8jNzxWWVokOno7ZiIwT3wzTTFFaFlVeX5OJSx5OXtYPk55RTNhJWxRP015Pk9VMD9zcXk2L1tHOGUwQ1dBTkZiQU4/OU1T''@;'; put 'put ''Y1J3V2A/eUJYN1Ywfj93TzsjWDkuNmFQL05PNWs/OCsmZjZiXVNYUWFILG5lPTlfRkBzVmJeaj9SLjFvNjsydmQmOzR3S2QmWSUzMVZrayRZJXY3SFdecjkrKzl9UihNIiZONDpqNndrU2h5TCpzTDBdSzQsbVNqalUjI1NkaTg6azxwOXwubFc6Z2E6JT5NOzx+THVUTEpyK1hBNUxWWzA0O29J''@;'; put 'put ''U3E2U0cwdm5+Qm48RTMpKkZgSFlCa2MhaE5YUTdkKURWclF3V1c/Ulc9Mmo6cHBgQ054bC91eGRwMGI5aUkydysjVVQrT1NLe1Z9R1ZeU2twYTk7Tn1ecmJqamghJStlRXR6VTlsIj02LmBVejBvZ1JJPEklW3p5djttO0ROWD8oaDJYYFMuRWd2YEVxIiwiaj0+aEcsU1E7aClWYTFIQEpeK1B5''@;'; put 'put ''eHZYOC8rZ317cmR6dmsuITRjdzlKWU0lcU1EO1YrYU54XUVOejZ3SzswQmNUZ2k/THIxbl1YQmJzcno7Ul03O2w6fmwwcnR6OitxXVIzRXptMGdNWl9mKXlkUlRUN3wrYV0lPiQwUm5CcSomOnAvVngvQT5sYzVTbnt3dmUzJitlRVB5R304RWBrMGIuXk1bOnJxLkZwdn5zU0RTUnNkJUxHN2ZV''@;'; put 'put ''UDYsRVV9MHI/O2dEVDxjUWhkSit2fE1bVn5bWSJAI0JHUlMyOGJuIVl3NmxwW0I7bVFDRnNZeWFjayo+dzxGeVBUVDNDJD53eFBHNk9KQVF7U2NjNlgxbz51TEFoNXV6SmdgYHpdJlBsSzxrXVtHUXplcndxMDNAfEZkZH0lc0tQflB4PTN5fERocSRvPTdeIyZhZHVbOHVNaG8jZmVBUlY6IXIw''@;'; put 'put ''PW51dHcwREcwdFAhbEt0NDVecVZYXVdwRXU0V0liWHJ3fj0lQW9oenJJM3k5ekJWXnZSekFxLCJNN0RJaVtJbW4vVDhabClFekVxfT13a25heVQuaCxiRnh6O0NzM11qLz1iS2l7QEB0NEU8PVBlOG1WT0NhKzBYQ3c0Nng/UTYrSFVpNm54PzRAQyQxJVhuKXkuUHBoTHtuVDE8VCtobzlsZ0Mr''@;'; put 'put ''XVFwVnVRX11PLFJmW018bUlUQXtLcismeV5bKWxmYTM1MjJxWlk+OXNEVyhmIlZWYj9KaVB3enQ7TyIhfEs8a3dAcHc2KWcyNWhDdEZ9XkB2Q05laDZGSCUhO0Z2XUZVaXBhXisrPiM6e2RFdChjRCI3O2cyPlJZQDlCSW9sejlIbX5JWWI/YUNGOEhaNl95TGkzZm09KlV6YW1reGBaTyRyMFJL''@;'; put 'put ''KmJ1PVpBQCQ/SCxeOEleJG89OiRkOGxMdVtjaFVYOkw+NyFdLEJ7cFVlbyhxJCV5L1dTfip9P2loQC9DOn12MCVLSUQhc0RvV2pdM2BVOH1YaDJfL1kyQ0leSyNPaU0pRWRCNiZMYHlvdlkuYD14RTNRN1Q3dURqT0BFWi41Pk8pRitjLjNEZzw8blpgdWlXS2xBS04uV0srIlF3czQjeDttRjRh''@;'; put 'put ''SkBmfSE5Rjo/YjFKK1pnWmg3RSlybGBwMkIsSHNybUFGNVR3cX1sTFdsVk5eM04uZiZyXlpxOzQmInd4NWt+ImRAIzFWV01nVm44elpIVks4Tm81JDVxcztffEF4NS91OzsvWHV3S3BAX3w+JFt0STZPZyVaa3BBdjE6KFBXdWNLPVtBcHlbI3RscilyZWpiRTt7X11zZiNIP2dtN01qUSs5Tns/''@;'; put 'put ''cyo/XyEwS2guO25xS2gmP1o6YVprTmcyO35WW1ZjMDUmZGxoV0ZpXzpSVTtuOj16fWR5Yz1uVTByPUY2NGVDZG9yJmwhL3R3P3dLR0lTViwlOE4hfm9SJk4hRTNjK05jdDAwdnlIbSg9NlFiP2R1NW5YQUhvSGwjdEhLYTM6IWI5O2xPaGM+XSZHc3BvIWVLS2p5PE48IndLJHpaS1hOTTxyYihC''@;'; put 'put ''KGxUMGMjI2t4SnZEeCJ0JVNgREA6eWdPU1BTV0dsV3R4VGwiZ3NMQ1RsXS5FTmZYOGBdfmhoITRlRU5nKTB3ZWVdMGI7KXZbY0NyYyljeFNiIiUzWmU5UDFJO1t3Y29dTTRVM3tkN3gzN2ohL1khLCg4ZjkqbSVjTWg9WHFCdHhCKSlaRjZ5fC9GWzB3NnckOjdpenUhfDxBanoqWTdlMSNaOSxW''@;'; put 'put ''UVYmbXlCVTtoayMhLFBZOXF3KEZLWGt7PiR9b1ZHWlJbeXczeUk1T3RpYk53M317KmJ5NUolUHduPEZzVF9USFElMSNucWh5Z3pPfEBPMWUvL2M/TVd+NjlJRT0iOnBjQS4sbnppW0hzUmdnVU59Xn1vXzkpN1NMWWJGbjpYJWI2eTZUVEdxfW53NyFWWT5oInhYTE9MVGFbUndMUyM4eS4zTm9a''@;'; put 'put ''ZVEoVGVDQ3l7W3FfLkU4Z2VuRmNsLCUqZHZbYUZXN0pgVCw+YzRTcitJXk93XjUsTys8VHl7TmVleH1SQGZbcHd3LyJZM2NQS2Awd09aOF8uTmwvQkRNaTVvTlI1Ji5oRjtfMzY2OEEuYG8hWVdnKFVkPCkrUVRnIUBOaHFUI2pAKTBmeHdDP1BjTz9bPzpKekdVZVlNbTIleUg4SyZfLCNkYDZq''@;'; put 'put ''W09FZFEoN3F5U0BhI1guOkBIWV5yKyRrOm1URyt4SjBtW2ojYkRYTk9pRitGVVRGQllQLFEufk9fNChOQS86OT9wcnQkPy5ZKDBiLm0ufk9uP2AwRlBNZG9kallrXVVlU1NwMEo8UHBrKm5lUyoxS0RsOTNFPmo+KDcxMyZmZyM4SyJKdH0kYDd2fEpmeU98UzBkZV9pRz8yNWVgX09DN3JdUSx0''@;'; put 'put ''UzZAYWA9KmNwTTZ4ZDh3PmQ/Ln0rWThpQyNjfVsmKE4zX2J0SSxSJEo4OWZwNTdodno3JDpKYnt4QkZRKVF0fTNAL0hYOVlVXXhsO0JYVjh0JlgsbHpaakF8NltELCJmPGlRc2skY1VYT2NyZHxLVC4xYFtvUU00O215WFVPezxZXlBaOThMKGZkV35gIn13L2hEUG4/bldOaFpQX014YlpvRnVl''@;'; put 'put ''MnhpYWpyKUB9O1dmRi59O11rTUhxZVRuR3NCWUd4L0ReeEhxd0M2K0V7YUdqIWtZU31wLG5HN2lNN2x0cmRHbmM0ezZ7Y343OTRvdVpve3kxbDN4TzlqU3l5RktYQDtKfDNWY0pwTCVPbmNVYHsrKn5XaHgyNVd8SkVeJC5TN2loczxWUHwxZ2BvMEBoaWNLNlpjbn41N1RUSEc8JVViYEElMUNy''@;'; put 'put ''PSt2OEMuLF1XWEh0bCkuLjB6cUlRc3IwcFQ6WW9JdUFPTiZLfHhYOyJScTdkUnwiUCM1WzZJPCtDeXZyM1BCJExwZHRlejtTeDRwenlXJFUxe3tAX2Z6UU41Y0FkPFNFS2dLQ1ltI2dkS0tfSGohY29dW3N2aVZoVX0kVCpMRDdhP2FXcF9pa107eTFdRlpybVpdUilUKToxZFRyZ1pHWCE4eUFx''@;'; put 'put ''QyJddk9waCtsSW5kWSptW1I3bFtZY2lGcXVsX1tEe09hfTIleDlCT3ZSZ3pkcVtAdWFlX2s5RzMuXzleRG91PEI9PDBBT3kwakZrVytVWXNkNDk4U1Zjd1hSczFBR3ZxVDQwbiVCWWM4NSVCcFpZem5jLmthV0dbZzhufHt4KHlzZERYfk0yRCg1N1RhT0Y/LnQ8KSpHZVhHdDNDRF43YnUkXSlk''@;'; put 'put ''NkclXiEpaipHbDIoR1orcVNaKTAuTCorOVFdbnFHNUR4JD5RazA/TFY7b1BiLFRde2Beb11sLjEseWYrcjd1TSM8diYjRzxuVT4kdXZLM3A0SiskOEFQa0opOCR4L3hLPDN2L01eN1AjSE8/YEpod0txSG8obFY+c1NkYiY5S1g8RUZxQH5vbVVHQFRsR0prQ2RGL2pAVGomS3YwQzZ4eyxBaEE0''@;'; put 'put ''c1V+cHk8dUpEJT5sLlNlV0JwKkVIVC5MeyhAcDtxRUBFbzMvNmBwYEcrSEAreC9ASGIzL1ZfVloyYksrVFdebExWWDE9Nnk5fVIuRUcrbSVBSyNmQ1p1Q0ZpQm0pRSZjSUhqSzd2TzckW2FjM1pSOz5aT1ZIYDErO28rMSM/I3NXWjJiPEAkZy49cm9OT1lWcyEsMV80MHF3cS4pSmomd3c9cj4/''@;'; put 'put ''KzFxeHxNX3RffWc7Ly9HVFVSMTpMMXIkVUZMOkwyQHRwbFZXX3phSFpWQD58TlgyKiI6Yi9ldDNROFtSTTxaaSphW0V8RnBvKSl6dW98d2FTKyN+Pm15R3w8ZixnPlVMOnRdPyNnOytZXVAycyQ+fFs/IyhLTUBRcH1xd1tFcWlTK21rVkk0dW5LaUtHP0k+ZShSXTZAem51aj96Ym9Bc3RjXXlL''@;'; put 'put ''NzRPdHh3LGIrTnRdYEEwTEBPPE4od0BtcjVqTTBjQyZeUyttMVllOG1dO3dBZSUwbkUqd0IsckB3PiZnR1duZyNNYG1pM2FLQG14SF1nSzo+KkV0ZDhNSGhYQ3M8cTFEMEpydEB6JHJAVDlfLj1tbj40K3EuZUFyRXhHc1RsQ1l5MWd3Uj8vMHs4aXN8PDYpNSRTN0E1aXM9KiI0IjhrIT0qWlMx''@;'; put 'put ''Yzg0eSYqdi89KzQ0S1p2bGhgfUZTaFpaQXkseCNAXUovbztuN09Lc14hczplaGtDVU9ISjJ5eTFMZ0h9UDE7MWRTamxEY2wobERleGY/OiwjdlM0LCY3eUxEakNwaXB+QlZfeyVYc2AmbV9tWT8jMGosJl9wfWdNZW9Ebkd+a2x9ZmomTV1STUlIRl9eXkldNkFhJmppYk8hYFE9MWVMUDI1RG1+''@;'; put 'put ''fnFFLkk3MGNDKFU7IjlxXmo1LDdLI35bQ1AxWDA+MXsoeih2NGVaTU44NE9qUz19V0ZIVzRtXz0oTTs6I251PVUuZlosPXx5eGdEeVBlbTZYTzkhYmVDPmIoJUI0d2suSDFXZmJdQEdtT24udERKZDtXTjA/OmUhUihGRVQxUiJrVGtZXiEraD54M2NTJWszUU9AMDlmPDY9TzNURDdvUmsiYDol''@;'; put 'put ''SXg/cCluWitYe3R0c18kNCVfJGwmbmt4Wnsldj4rTWZUSTNdYXtifFQ6MWZOMDMxbWBPJj5gV3IzLzJFWkhhMzx2ezNUO3U0YDJJeGM6dWg6NkhQb0Zxfih0IW0uIXU3ZC4vU1ZPamJET25kM3IkOVRJWE8wdzhifiwmYkd0NX0oMVpVfFZfY0gmaVlPUk17fT1uMDtVW3wqIyJsLjJIdFQvS2s1''@;'; put 'put ''N14qKjBjKE5XOlBvM1IzU2hYWjN8d25EUyo4dFV3PHFyME5XbTVVXSFZMFVScDNUNEh0VDV2dXMjY0ZOJSRtcFc/fWltVnpAMXdATWZUdSQlXkZ6LlQ6MXRUI3V7TTIlTzYvPT5DTzVnKShzW0xyY2w3X040bjs0MXY/TTcsXmxtdz15cCR2ViVOOUYjTl1DLFIkal87MW0uOkgrbmxeL3w3cGk8''@;'; put 'put ''NCU7VDcyRTciciRORCUlKlFXW01xYGFiKnNLbnFvKWB9dzZ5e3ljPT0saVlPUk0mMkVKIzVxR3tkKXc+XzdCXVQpPncrS29DYTM8dUIrPFR5TzwiVEwlZk4rPCRiQSFYXThIblojdVc7RTpMZ3BYRWNzWXV8TTU/UyZsWyg0Kz9WVCtFQSJOQl5UNzAvZ097aDZYMTRqRj5TT187QlFARihdQnQ8''@;'; put 'put ''JWwrS2xXMns3cCE2UCxjRm40UWZHcDdlU2kqMD4wRUYzKllMUHNLQFBdRWVrRTI3O1lPIWw8Uko1SkVnLEhTUHJtWEpKMntwTSkrKD5KPDU4d1dIaVBJNmNiY153a1RnU0ZFKkFoJk4ubjNwaHpOUTxYJVBMPEwxNF4+U0dsaGs/IzZkJC54JTZSSSRDaT84eFU9bTwhLjBJb11iTW4pM0hbel10''@;'; put 'put ''Yzw2bShdaSZsLyEiSytnQTMqMXd6XVNwV0lSaXouc2xFU3BTK35sTCIySmwzQFBXOngmRnIsTW02MFVRWClpcSFzWWAqJV5OKCtyQmBMUE07RkZ+NlhGS2RYWWldU1J7ZExKIls9LjpjYXJ5ekE2d2hML1ohI09XTXo2QUJlTkJiWDVpOFRbQC4sVCpjWzxOdnBzMUJhOU4hZCF4P2tnKUJRdjZs''@;'; put 'put ''cDtCYj8jT1FuOyNoPjg4N1JjTUxQWXUjPF8sS1JZXm9VO0FwezsyVmFzRSU2Y1FpUXI4JE5MODVTKGdzVVFvO0h+cGo+OF0vITQpV0p4N3B9OkBYXkpqYyJ5Mjd8Zjd7Nis+K1RHIjhmejcvaktEKSZvc1l+L1BSPTMhZi89KWlwQiNDbX5MVn5VZD8lSnghZkBYUksrLz06a2Y6Z0JeQF5RMFN9''@;'; put 'put ''RjtJI3VOamNFWUwkdFhMQnRvd3UrQDhRYiJDZU0rQUBRLFEyWT1GNT07a3o2X2JRZTxvNDxsYHBkaVF7Y28xQVt1IzsuP11ZSUpFQkdtQW5mWSxyQzpbOmtTcC4yVTY+U2NSNTtvZ0hVPjNWUFdQJj98P0hGVjF1VX1UY1AoUmdNbUU+bjg3KVk0I0toYzNvJF1TPDZjQlVFbkZiVmw3cG8zPDJ4''@;'; put 'put ''SXFSXU1PLDUyd3c+bT5OOmIqMCVQMCQudGlNIlJbZHlJTlc1UnBZc2ZYTk17PW4zQSpPYTBjbzAhXUUoLDowRHp1MnVhWVc4MyR5dV9Eb09hQ2M1VDU/V0lRbVY/Izc6MERXPSZsemc8a2Y6MD9pLm1bWz48OC88Vy5hJSx0YVc5YjcucFFERiFNRyY6PT9GV0UldWN6RmBWSlFfJnlGYEBJfEZ9''@;'; put 'put ''OHtkb0VPYl9YQzg7RFZXQzNdRnZXaiN1V0lBbkwmdEhGXnk+dlVSM1hBU2FMZEdmeDNJcUkuMUIufmBheVdeSkYwWn5WUCE3LGlZYjJ0RToydXgwYHxgbzc3QFF6LmluZ3QwITtmQDJnIXh0T1NFVHtZJVU7Pl5damxaKHZpKFJYbiNRXVhZdVViLEg/KFM9UDE6LD1fa0FfT216bl5Idy9kNTQ+''@;'; put 'put ''VEc9P3ZldXA4cVo/b2AyK0VYbVlqeyRXPkA3Yz5ZQ0JnKFQ7RUZsTnMjTGZ9RnN5dl9EKEREcHJQRlB2QU8vTUZ0Z09uSGwoJnkodmpHRDw3JjpAZWZsLDNhXnZiRzJRXTpJIWFySWxaY0hGSWJ4dTA7KzVGUz9QYjtCKWoxdDtxeTIodi8uU2ZGQFlXZD5lOnRVVnBOISVnenRaN3hsIT1Ue1tQ''@;'; put 'put ''U01gTmklYGQ0OTMxX1M2cDY5UiRabFFmbD5pYGRHNXk6aCY+U3c7dSJkcEQ+WWFzWjZLRSpRaW8yRG16ZGApLCpbTHQ7Y30hS1hEZElBRlZuTjdBUGdGS1JgPnVwcjRoaiNpbTd+KT9dTXFGWTY6KTtsTTN1dmdNVz5na2UlRW4zbns9Zj90VzhHdzFEZ2orQWwuPE01ZFdAL1p0QkE7MiNNOXVX''@;'; put 'put ''dm5BcW1nPWdPb2lyKVs4Uy9qOVIwTj9dTjFzdk5tfj9uR24pSTIuJXNaQjU/L3N6WnJXOU5bWXA2N3czKjhVMFJTRFdiZEhYP3lVei8jVCNYWjxaQVksUyh7cHEuN0chMDlZWjFwZDtwYXk1OCtyMnFqRkk5WUtwODlKWFE6OiJMMUpTcU8/Q2xRMyx0aTE6bDNBT3BKMkI2OkYvfltebWZtYj5w''@;'; put 'put ''WklDZUczRW1CY3BmOEdgNkU4TUZOK1Y2VCtEOmhtRm1jXzlxKWRWNDt4fC9ERWRHSl85fHRZY0xAdCZdVzU7MlZSfHk+VXpza0JkVGtyJWMsckZTW1E2RnJbYXJKZVZtJCIwVV03aSpaYkBqdjxmKzYzZFtTZGAhekF3VUpyUTFPcDtre1VEKDcxbGxFOn0rKldNJWZLT3JPW3ZDPWJLNmg8a2hA''@;'; put 'put ''YHNWNXxxNCI7VSY3cHl6YzxtY2ptI3QscTlMYDs9QWVyIiQjTXZJXypoT3lkbl5jZio3bSg2YXgoLHJDWnFyZ0gzO1NvTz0pQiUsUnAqQVEpRX5fcSU5WW94NCMjcm9pNzU8N1dXZVNbLytfaWlYTzYvOltIR09WeE49dE4wSlpqUmVqK217KkxYJXNzYGRge2Y3IzkqRUFkJSpVeXsvSHFKXSoh''@;'; put 'put ''NXNZLGNjbjUjNTlePU0hfDkleEcyTVBmb15Kai9gSCUpeGBHaXlXM3AlamNqZmB+PDIyQlFSVVg1fHlXUjJZTGtVI3s5RV89bDNUWSMwZ3RNWDUlO1pqUU1lWX5oSmI4RzNYa018ITghKzk2LjNfcDE9bDFUV1MpXVBiI2ZGOSViUW54bDtAV2RuSl1eSEVwMzNwRjo4U3l4UV9jbzY1ZGA/aURK''@;'; put 'put ''NjhdbTA3WUY2TCVuWUVPcG0rfXA/IVcsd00kLis6KyI6KksieD57THIyXXhESWtlPDYwJTdJTEchRH4kaklNenxFNllFKm46PD0+PGY1eiUySEJTWSFdbVMiOEdCP0UpSmVRQm1WZDQzVVIra3ZKanEwPyM+NzYqKmY5Vl1EIWU3bDxJYzJZYTBHbk07RGVVcWJiSkdxXzJbOHo9bTdfW345U3pV''@;'; put 'put ''YkFGPEMyYTBKZHUzMX4kKFdfey4vZ111Z3A2KFtLeXUwKFsrdSZsRGAmeHZSQCNZS05Yd0pOeUtORjtgS1lLSmVfMkt+VyVSeTZKa15KMTs/JiIpRllULn1AVHpWW05ZWWZMfTV+X1kwOSR3RDJAVT9xPSxpJngrTlNfcSNBeUBeZSVFWlo4dz5fM3d4Ik99OElyMmJ8NTVEbXlhWTN1Sy5hKik3''@;'; put 'put ''cEZ5VUNsJVNFWlkhMCtyaUxHfWxXOmtwMzR9e2UyI1oqS1krNCtDODo0SXAhY1lIdF0oVEZzZ2swTStzdXgwazlXLCU1OmNYXW1RXTE2YFE1bClydGMwLz46dGcld0U4TyVEOGU/dXtObCVyVTxRO2g4TjAjcFIjQE0rU0pMdjwlQV0qJC5kVSlwdG1VO1l+WTxKNElCT1pRP3h+Xl4oNWpBR29F''@;'; put 'put ''eVt1PXdJbHp5RSVdRTtsYGJXLDI6VCEpeUcmZDJ5YyVQWS9AMm5sWkRwdyxCfSgsbTclWyFFXllYa0ZeWUBROks8ZTJoRDJ+KjQjWEohSjBRYzJOTnQlYyUreSYoU2sodTJ1JD94Ki5XVDc7UzwwbU1VNjsvOnkoI0x9KXVbdTJ7cV4pd09wb0JAQ2NOcT4/MDYkfkVlNUd9RC9fVGxbfEo4WVgm''@;'; put 'put ''dHY3Y1VkZSspO1FMfC94elt8bltBcHlbIzxBYyEwUn5ZXyglPnV9b0wyN1hTW0d+b3N8T2ZscGVBL24jK3dNMm87az4zK0cuQyZgfCtZUnV5SHZDSm9uSUVeOm0lWjtJUWorKzZLTCNSSX59a2JhbXlZcH52TmFtMilzLiE0aE8zZSI6YW0kRyQ+VWxhbSI0fC5zZz5bYXg/ckI3OSJFa2RGZlhg''@;'; put 'put ''XSxYb1JwIUV5biwuMVswazkpYHxYN0Brc0AxfDpBTGVITEs4JTI2JTJxNlpRVVtxLioxQWJLNUVzWXdrc0RoaiFzaWRKNDNzWUJ0eFtpKF9OWExdfDoyIytoSnlwKl53eCE6JSpyXj1OVFYyT190NDNaRn4mREhaKSg4LEQ4bjo5ZyxjNzpsT3NHe2tCK0hvPHIxaG98ISxlbGo+Sk5UKGlkXklg''@;'; put 'put ''ZHlgKnpmOVBbRlklXzEvfnNmOGpaYjhbSSVbSVhfaFpBaTRAdXZ4NGNFWC9vKWlYe0JiNCRbKWx7cjhFOVomWjpIbiszZGMrNXBJTEMzXmZeZiRvIStXRSFWellAKVEySWBdMFdLMTpjV29pIjFJYEVrMC4hJVA3KzFWTV5JInNHeTtScXc8fD5dc28jdDRnQDFFa0FrTV9YUjF1cyl5QVY3VF9C''@;'; put 'put ''bGt8amxBa0h3cEljS2c3Kkk0VVFPQWluXktIaUQ+IyFbN1RNI0gyMDwpd2Z8SWIpOGZ8Jk9vSjF3Qi5ma2cvMmA3NFY8ZyNpIT88elNbPXpQQUNoZj42PmcvTVM8ZkooSS81b3hVSU4zIjJGck95M2hXWlFDckkxLlBWP1IoTGdsPmlnd3h9TjNmcSI0ZG9mZk9AcT9+fSV9QzY2SVs3JEQufU5U''@;'; put 'put ''OEFEJl4pPC5pUzFSVFN0M3U2ai4jbik7X0UkLndVXiwjeT4lRjplRn1qMXo0OjVIIy9oXmZ6dnFNTDtzc3QiJG9lZzUvdmsyNi45THhJMTJEM3hGKVskdFtqQD98RnAwKF8vQyIlYWtnL1RBV0I2dF06O1I0Q0YsS0x2Nz9eVkwpZCFLeDJXT3s3NVoqKHFXOTtaNC95RWI7QEkzX1RFbH5vZ19k''@;'; put 'put ''amQlPm5VNSNzK3IkaTNwZ180UFdNd0gha35VelY1diEhdDM5KDNkNzlfZWQpcEouZk95XkNZQyUuMHdqNyNaOllNO2AhQUksOl5jV2tLTDRdZylTMmRCTjUxd1RVLi4kTnx+OiwvOD8vUCtvQWpdfGY2JTQjMVU4YT1QWXt2SXdFWUhRSE16WSZTNHNZRWBDND1QVXlhYjU5XTBXazgxN1Ujd2Iu''@;'; put 'put ''WiY8cTpUPGQ1eTUkWDlwQm1UPzdMcCI9NntyRUtIQ2NgLixPciFRe3JJO2VreSFaM2JlRllHMFZrK0pERyhaVTEyKF9qJCJLYzFVREcocyEqcS5XK2F0SVlBYnZAelh1c0g5XSpLUC5jUi91dSZ9VXdnYEc6bmx8XWBwZzJhOkM9Li4xKiI1dE9hUHRMdCpCOWZNdktBaWlyanUyYjRaTGxMakUi''@;'; put 'put ''MjNpXj9mSzssaDt+QmA1JWNCIn1ST11JYFVSUjJWTHIvJGtQcDY0fEBxVlAxTlQzQGFWTGpiVDtkM0pheTl0NnlJaFJ2dSRnKzlGV28vWW87Lz1AR1F0eERyTlVMRHRwK3VgQHIjVGtuLz4wUmBxPFg6Sy9yPF8lZ3QrPVhqUVY5Q0Iodj9YMlN2QShrP2BgfFhYPVtDRCNaWFlBd0FjUmhBY0VJ''@;'; put 'put ''QUhyPyhxJGsrR15HcT9KYC5gcz9LYFdPLzh1TXFYJjMmSzZBKTh1TWlgWVs8LCVHT0NvQSZ0WTQvLmNBdT9BSjEzeGIpbW51eEIrT3xMUko7RShdNEM3NnpGcllyanhWcDFIVWxjQEZWYXJqRXNlP3k2JWMkWFg1NENBSGBZVmFTUk5UP3wsT31yc2pWRndOSjVTVldPYHxnRClOW3siYSRPc2pp''@;'; put 'put ''PjZnTjI9VC9JNGwlWFB+P3ImIyxJUm8rclIuOG5DZV1edTkzL1U4ST1mJW9mT3RRUCVmOmt1bGN6ZzYydHh8KUhLTCZRazE4UmVJd3FTWktLQXEkVn1dOi88VkNhVVJOZUtSUGZpclZzKipneSQ5OktSJj9Ve1IzI2VWcFBkbyIpZStWK155TCp0S29aQn1Ma2NFcXkpJUVSL1ZASUVFRzNBOVp9''@;'; put 'put ''d2Y/U215T2YjKSkraHY/bTc/b0hUUjAxSzlwXkV8d0A1b15KMjQ0Q0s5UiFqMVNyOGxSJD5AeUxPejVfb047SHU5MWkweFBTeC9lcDNlWCt3bGk5bnNBPjsse2h6QlB5THlFVWt0O2VnRjI0LG5meXQyKFJtX2s4LiVjVjNlbVNuZzt1SztbQ1ZGOm8oKzA7fnE6cTdhYWpJSHMmVHF7RyF2VkxK''@;'; put 'put ''bH03KF80WzgoMjMmbkVVanw4dlBkfS84NS5OW2JXQnFBT0pJfjo6T0I8UCpAUjJwaTcqcjYuMVFMNWNHcjUsPmpYeiZXcGgvUTtZcV1AYjl7QzpOeSh2P053T3lfNiE3UlhqOUVNeW9CdyE6a0FGL2pPSHEqLHZ1SEt1JldoTGIxKmQjRkcvLGRnSzZoWDVldV54fC5qdiFjazZYNiMqPj87VCll''@;'; put 'put ''SFptTGhMZ1dQJU0ySn1gO2Q7VkpQRnlncHV6O3ZPSC5pUChScHlAciMpfkByV34zOG4pcTRGc0Z+MkMhXiMmTjE5V1F+MmEmIiRBb1ZAYmhSe2phMHIoRV59YEouU3RtX3dULiwwM3RXOUtfKzx9dzYkeUYzfW9KTlRuIV92SmokZmFoY3BWfWNnRDdmc11TWWVCOEI7Qjh5WUJZJlksbFMlOSNB''@;'; put 'put ''dlMjNGRxM2kwNTRoYm14UltwZERfTkIuNERgbCVwPFM9S31SfCt1e2EhWj8qX2JWSlVhSmJLcFNddiYrbC9CYzN7PH5HSiJsfiEkbGdHRmwlaFhJQDlYZiNAR2l3KW01MlE4VlRgMGVfJEtdU3c+SmtILjdIIUxTbjxUenFLZiZ1JEUhcTYpS1theGlQLlNsZVdpS2BOfGdoZjdUXztUNG5BZU05''@;'; put 'put ''MEckeV5aNTI0UTJgL3lVejlvM3Rgc2ErYClzL21MXSxudThDYEp9QF4pdE9zfnt+aTowPDJTMSM6RWEmZXpiLkFzLixMN35PKk5RQEhvenxZVkJKQEdyP1RLUlZTK19AM0A3eX1WKH57UmBOQSJJNDhDJH00RiNAUkJLTytkWXp5T1FXY2NeMUAzS2VdY0JUXjhSejcxIjg8V2lNai9LfXs4biU0''@;'; put 'put ''PF4pJkdRMl9UY1c9P2tLYXpeImhsNVUrLjR1dyhCPFZKWHA7dnFlRWp3W0coO29aK1dFamRLW2drTFA7MUwlWn5aLyhHKkYlWXxYU1lFRyxHYD5rI3p+XU0wbC9VSlI5NS9mKyxBN2RyWWtwNXlZdV1RMm0zQjQ7dUl0JSNIQjkwUkB3Q3ArMiVuTT1rL2ZNKjlmInFXNTgxfGhbUiVOJm06eU9v''@;'; put 'put ''OSlLW3l9Ji9RcFE2bFQkazlTTiNwQTRkZFUrdVQoTFsxQjljaVROJjg9R2U7KWw8TjNiLmRMJXU9YnFfQW5bJHBMayRKI21DLHVqaj02TTUiWW9IbXp0NWxGJkpLMjMoJEwmUVtvcWU2dmZtJntoTUMlc00sM05yP3Q5XWo6KW59ZzNEM3UiWFVLNEgqLnZXTnZ8ZTs9S2VXQDNqSF1iXWsrKT03''@;'; put 'put ''UkJHPzlYcz1PdX1TNTRZUnhKWWN9KkklKkgmQ2UyNngxNDZPQyVkSGgoUHRoWFgkZVMhZ11oRjwlWj8hPyZJIUwzJjZvWHtBZUk6QFdsdDA1W2MuYnFKQTNEIUtyQFRVKkx9XlBmQj86UypPW0IyWjw8fUJTMjRJXkIyJlZ3MnImOUtMQCVbMVVRXn4uV1kiVXpxeT56YmQ1KGR9K1pKNiomKnY6''@;'; put 'put ''RlYiS0Bfc1YsXzE7JT1wWX5Wdk1AMU5fSVpea0FLMEl4Qnw/REZNViQkQUZFZGhdQWU+U00oXTBhW1o1V085LmRVIWNoXUFWaCZARyVUbG98MUN1VVFIWV93dzBmRFpPIllIa1JEZ2tdS0BOMWRuUyFMYjdAL3FTfUdTQHp9eU1iU1FAWV9RM0l4JCttKCtXNDEjfiV8Q1VvZGlrSThid2NTRERD''@;'; put 'put ''dWw0WllRSSJuSks5VVdVcVlIJj5jMD0ydGZdNWZPVW5mZHhlfE5iOmpWKGpzXSxBaEZqdVE4N0Zuajg6M2A7cyZOKCIscSgzMk9uRTwsb1dVMXxAU19tfCZAeT85RF0zWDBiTyNYWjxqU1IzblcvWGEiNCFQdDhmZnNyRHoqVix3aWNOZW1kI2JjamRkI2JmOmJVTjFkQSNyUD9wNkpAN3J+SFtU''@;'; put 'put ''NT93NmMpVEwrbUEjQHlhK0lBRHk3MXRdN0lWNnZYKktYWEBhZE0/TkpYLiZXfjhfaExQVzZweUw0VGdHNWJRdU5WQE5EY3YkMyE9fHNOUTJlR25ROSVUSTJxWWQzfFQ+LEduUCxefUN8RWY+e1s2KSMrXUw7VFtwKTVfdkxTaFR+OVFsO2xSOVFqUm9MSWZFVkM6fTtaIi5rUU9vKC9wRzVINztt''@;'; put 'put ''OHM5elV+SGlSOEIiZGxrNjIzIV9TQmVEODA2eHYpYCl1czZIU10mSzl4RVE3bXJWQVUkd0xJOV83VzgoKVZQUz9TREJjS3gkTTI7SkJnendOW156TDB6dFo6b35re2ZVUmA9fiQqMzQ1LiVCXyhWYCtQWFN7Zk5XTUJMIVpnRX5DW15EVysqfjgqej9iTEc2L1F5ezxwR25NO3N4NSl7czpLMVFv''@;'; put 'put ''Uk1xMD8jUl0zNkFMM2FIa088aiZbJklvKXc1ZWpoTT0wQzdbMFgrbWg4VDlLNmskUm5eKHtPL3JrWm9kW0M5YClYKCsiM1hGVHZGKiIzWV1AfmgpaHVzWSM/Tld5MnZDMD9vKldyY1lCVXlzMnxQQj80c1NHczdFcyNFPGtofFgmNjl5RFd2S1diQXovW2hGKk1vdkFIRW02WXclTzJDTmk5LGNN''@;'; put 'put ''PU4qSmsvdXxqeCRQOUxTYHYoalc1U3BMVHBHcTd1MyE1VH0vaz1GYGN8WTV4fTAjamZKPjhRYns9Nmo7bUtbQWhBVEhOKWdBZkdoPi9iRyxySlMubi9jTChnLjE2YjpsajZoe0ZmTWhpcEt1Wi45OVM4TWtJVixHJWJSUjhuaFNfRUN6cUJZTjwxfEIzdFFER2pFWkxOV0QyeH1gTGRzRnRATTVG''@;'; put 'put ''X15TX312fVpAXThXPkN2dU0jYUYrOT1kJW9mSGF4b3hQI2Z7cDAvbmBuTntETyZJNiEpU1BVdVp7ZGg3Lzl0N2ZEP0lVV0p6cHkxcWx6Rig4bmVZMVkoaWdrejtrdjN4Ikx6Jk9vJTdtcDU3bEV0dzZLRVBtelAmWzg0MzZJSjI9NjRxRFYoUm5Rc2o/PX1qZDFuZWN6e159Jl84Nyt9TyZPJHg0''@;'; put 'put ''Nlo+ZDJoJSQrXTJ0PTYvKjNUaHghV1I9aiYsPmMpbG87VlNBJndzckNzdlszUHs/NCRTJWN6P2tPUigqVUJjSiFIbWc2T2xmZDV1OWY1MixsUnIxJFZhJEgsYVJ1MFtTMG9sIkFrYkUvc09eQll2UzReeVVsYXdEKD5qbzdAI1tvIyV+cHEkVmhVaVY/dyViSHU0SWJoNjg+b1B7PWdgd0hzM19I''@;'; put 'put ''fmdhLn13YTAhajxUJjA7W3hFXzFDeUd3Ijk8azRldk1OOklkbXBYTTFtPEk5KmdARktrJEF2TWliVEcwPDY3KU9wdCV3RERjRjlBTUA5JXN2VE1JRGUreVU4c11kciZseUxybSNzPyMmaG8yM184bkNLVnFtTSlSekxJOWMsPFNjSzU+RHxlIWNTIm5xSCJpSVlIJjdlZGBsTFZHazAyRWNEU0ZV''@;'; put 'put ''RTVxM0NLQ1B8Q3NBXThSfjZtVHx0cD1ZX1RwV2chb1t7OU9KX0R+KTNVIiZva05TMEx0Jm9wT01vVnFDXTByJUQpeTJFNnFNVHU/aEY6blZpUl55WlohanRUKG5ZfDdXc0w3ITBYfjlEKzkvRUFETU8uTE5lIVYlMFNiYCRLOFhwaGVGak9sZHNPZn5PIkE0PVByezokaiRIUHkkZiRmSjFVKlNy''@;'; put 'put ''RWpkN0tNd0hBWCkySGpse24jN2Q0VUIpVnVyXVEkSlZmZG5lX0hPPjUlPDchZileJTVVeHlvIjR0XWVZJnVbfkwodFN+OC5WdU57TU4odVNybVVOPnBiWj56TDozNjFQaU90aXRKM3RSUll4Zm1nLkl8KmV+TyFvIkN6KVgiLE8/RF90I249XSpYSUR8KVlJZ1lLUi4sZ1RSVSwqdUxzJUVVXkRC''@;'; put 'put ''YCltQjd+d19rM1kxbF9tRH1qbmR1PzhNWDpkPDpZaXV1P0lQUEVVZWZlWmcxNWoucnVGWGt5Tn1ZODElVF5CcHdFcVNZO0ZMcUQ5d0VGR3FnPX1fWnhySGYkeUZTdmJIZ0pvPVAuXj1lOz00bExUL0c9RTxkbF0wMkFEKDVBd28sJWovdyMrdj5hUTVOfkQmTnR+bDh0JTU8NC93blhaKjt3W3RR''@;'; put 'put ''YU9dQ3pAW3EzLFtCPForIS9+eTJ9RyJVIToza1JfKT9zPyltQEZ0aWc0TXFILyRsb19hUEkiW0JAQUZ4Smc9SnxIPiRqSCJEXihgSG52cjkmUkd5MnNkKlYkOm9iPmw5NS9oQitqdzs4azsyITUmRF9LYmYhKkwlO0JAOihLMl9eXlR3fGIiIShmeTtYXkBKXXtWVT44eHc9W21DZVtbdmRzOUUu''@;'; put 'put ''LE1dbXoxQj9gJmZIMFdzU09bVyIueFhRNzd2JkYuOTNFSndgNHh+Inl3N1hvPDBvK15AMUxmQjVjbUMwe3VWQDFfKVF3QypuN0FMPGwhS2skdSoiYWZ1ZWFkTW5idWtVPytoIV5dSUxxLFFkeDRtaTl9e3VuWUl0XT9iQVskd3oxLk9na1g2Tzdpa2o/UDdqW24qM3ZpP2VGJVgiJUhaeGFLR2FT''@;'; put 'put ''UnM+N3diPjR0RFdSJE0kaFpQYG1IWTdaRnNqOWwib2Q5Pkk/bWZBTyYlK1NYNTlvVV9JO0NTYzNCb30sU3UlNGleWUEzW3lMTktgT01AYEwrcDxtUFVMcShCMzpzQHM2KFgyRiozT35tWVIycDdMJihkI2lBZUI4QWVCOClpYmBqI0psYVs5Tjs8Lnp6QH5QNV80P2JkZUI2YzdETkhOXSxWR1Y+''@;'; put 'put ''STIoQiReSGohT1ZXTUU1IzE/Y19HL3IpaSZmIzp1Y2A/IXc8PF4xVGFWKnI2YVZ1NDBEblJydSRTMkVDQTBXQkEzbkVNTENdRF5KOmtwYC5CTkplOHo3Q1dkMnVDNE8+aWNFVkVBQUFBQUFBQUMiZUc8IXlHLipeP0ZnUWVaVTZpcjcjbkFVPG9uR1l1TSMhJSxeYjk2T3pgXmtEKUg4WHV2NjNI''@;'; put 'put ''YDlIbnkqcU9SP2khZkl7bEN3Njl3alVKbnZ3V2xXdU9OTjRyYnAzfmY0bHZaTkZWYjxILnxATVtPfixxb3NYViRdbHRtNnxGWXwrQXVObzZxUklARn5lSHlSYnxKN286bEMzWlhnNytzYHFuNDxWPUphRnVUKTJzWEptajZbW0oiMTRTJCtEP2VWUCpacixqb01PNWtTX2taV3kyIzhVRzs3czlw''@;'; put 'put ''ZGJfZ2JCWmdIWXhPWWFFOkVpWUIyWDh5c0BpOypmViwjWVY7WkpWckxVTTluc0hwaGgzYG9ZPE9tZ3tDWU5XIyYuYEVOME9qYEFDKCN5Z3UjeS9KIiMhfl1YJGZ3VTtbQEw3RF1RdzlLL0lOLE9CPCxoSlFTPlhvRVtDUEppPSZGSSpJYH4vK0UzR0lbVUIsY21IWEY/IVF6Q0csbEljPio6eEZT''@;'; put 'put ''KH5DSzR5e1JOW0QhbXg5LF9Od1tJW1FIPjMpb2wseFNzX2FtaHVmNHNgRmJaM2UzYSUmWlM+UDt5fiQ0WldPT0lOekR1Qj9QbDhGZkYhYHh8aUd1dyMhJHltb081MFg8MSx4a04lPFI5Vm1RZjA9IzRQVVVpZUYzU1E0Wys2cWcuL2JZcCVfT1N3akVbSWIpODBJJjRZJU5Hbj5ORnloZVZSfDA8''@;'; put 'put ''IioqSTxrOyRuNW0kbH5vak9ab1tPMXpVVkVANVhvelpxUC5rVVtGanh2MUFIaW0rTn1bNUR3VSJFSjRWdT0ocEJvTFNBfnRnRnVRNU4/LzN4ZiV7eClqdXpKMD1sUmsrYUZhRXAkWD07M358PmBaaVJ2VnNrUTBVYDg6eFlwJV9QOkluIlFmY3JFMC9LeCxZciZKLzdNNFVeeSY/eF1kaS50blpo''@;'; put 'put ''eyp7T3NqXUpJfCVYczBfIU15eHJWR1dhOzhGWn0jX0ZNNmhleDU4R0tYSUhNOmIkWXdpNmtZZCooNVpOUy9GW015LCU5fUl4Ik1AW1BHOTV6bj8qPHs6OWR7eUpbJFAoW0JGMUZFVEV4R0wxaiY5SCJvUCFydyFFSl1bY3dVNV0rJTdgR0Q2WEhMMHpUI111bTQlYV0pRUh2Qis+V1RgeEkjJE49''@;'; put 'put ''KUA6czVxTGtSaFRSdjZTSTVQWCg8LE0zQDUwXXNTJX5eeFpoWEJMeV8ia1hFYVUwY0ZWeWFxQCM/JURXVFtPVGpMUkJFaEdkSk9NbU5Qbl1He3M/Y0x9cn0+PmA4MXxdbyplb257Q3JxeTxyenptLmtfPSNQdmJUfmYhVmQ6eGtDLjt3YmkxNlFqc1UlOWtnQFZ1T3k4SVsrKn4rPksuO2Z1bipM''@;'; put 'put ''JUBKd2AwcV9qeXRINFhhOU1aS1dwVF14YGhjVXR6UXsvRWc4XiV3MkU3c0BifC83VzoyI25mYSphTDhiQn4+d10mT1RFTHlfX1ZeXSpKXmV4WkV5VlhnVSJIOVdUakhLSU1IXl05L31pI1thbEMmMCglTjxNPEl7M0wzT3Z8UU0mSCtdMyM7bUlbe3ZJVnZjb25JamY/YE1Cc2J1MHJnRWdgKjdq''@;'; put 'put ''SzViJHdTLk96OmA0ZyQ0MCl8YnNiMHRWKE9Ya3oxOCwlTm9+LEIwaTshOipxMjs5eUUhOn1tLnZ5dTQ6Mk1LblFDMFNFQXQraEp2dT45PUMmVGJudSN9VyQ+eH5qQXc1LnRsfnBvUHRAdmdKbl9FcGBHQkA2JE5NP0QvKSlydDV4c0tbKSU6TSpue2hOblJ2d2VQQmxyZnczWnJKIWB5bnEiPnJs''@;'; put 'put ''ezI0NS9wd28iR0E8InNTMXwreWZgNSl1I0duaWMzTT1qZnE5Lyx1O3dHLFA3L2U+W31HWz1Xe10pUG98MT5aQS9VVUB3JU99LkYlYnpYYTNMJW13cG88RVIjakUxRHwhRV5Fb2smd0hqVWBfUnRLb0l5cFMxS3w9KkV4VFVZSnNSaD9maWd0WU45Uj1rTSJWfV9yTUtWe217Q24uZkZIbHZ7PW92''@;'; put 'put ''dEMhe3EheXVNcDNOUD9ldm8rU1dCM1RyfHkvcVN4RmBtY1RbW014ejZROTpyQ3lUKD1eOE1rbUB+VH1JL1BjOnd+YXJpXW9WXjlhImMiTFJOL1RkfUEiVVk1cD0/O3hUU0pdflBsNiJYIigiPllnPF8pSEo4dCosT2w+d0hEJjpAcXtGdj5LZF9qJCZUWUE7RFdXP2M/RGFQYjszRVZveEZeT1ZP''@;'; put 'put ''Q0ozTCg/RGZjZUR8bVNmQnEpJXROMENwWCheQEVRR1A9WWg9cEgxQVh5USwzeks9OF0/dlE+eSxlLGRvLyMyWkdkY1ZOQixNYHlpYiMpP01MTFdyI1V1LEo6eChdQEpKUHRjRClqPiMrblZVeDw+STchM2lhe10weytkbDMvYXdrWCVqJVQiOy8rN3xsYi9KYHhua2ZgL3x7NFc2cz9BYCV7OVI1''@;'; put 'put ''Kl1SJn5PMTQ6LDtid0dKR3NKWmdZPGEjPE1OPSg3XSI1aW1xTklebGt+JU9Pa3ZNXy55TE8uVnkoRXdAQThnR2EjPUtoczQ1LHcjQXBGdE5nKE91ZTcoZnZ5UmNtQ3l5L2J6algyRlA5UGooWFBoVD83JVhOMVVqdmBuTj1oMDRZP08rKkxsYyJSbkZySEdqQihERVhEMj0xZG86dF9PKlBAZila''@;'; put 'put ''N1lhbj1Ee1YhYU8vYXdkNSRlPDBXSCh0Xj50dVZhOG9NNkdiMjEiYHNqIjRlfnIwJjIhS1B2cGFUOmpgLy5xRS9HUUc+TF1JZGoqOChULz1SR2ZITTRCOHAqVE8zUSx9aXk6WitUZy86QCJ4cHN6U2B7fU9JW1l9VylMQk57UH5OIzI0NztxU0k8aFFjenpWKEFqNWUsT2VRI1N1fjlTY3JsP1ZT''@;'; put 'put ''d0x2I1slYUNjUnhpYFUsU0tvJCYlJGs6YDtgL2Q9PDU8MS5AWGMsajcrM0JLIWw6Oz9aR3krKkgmSk1fL2ZycntAcl87KkslajlOL3JgeG00fDZPcVAhJU0oc196MkcyI0dle0M3OENsciZnUSVnXWpVRlVYZ0I7YiJXJSVnODwsQCQqeHd3U3I4aC4sJjQ7KTpVLl06UGopTmMzbyJnZl9GI3cl''@;'; put 'put ''NCslfkEwbjVqMWtQbEdiVyprUWd4SjI+dkVmMkNKTjVZM3kzeFVrSTM4I0dQUTxvZUtzaURhNlshYV9lOjlzPTNIckRIM2NOanBINndyKmx0b19nRGZUeWx1LFYmIkFAKm1iNVtoOEgsazl2aWIlZ3lDVmlPcTg2Klh6K0FPWz9La2IwYkskVXhaY2xsQ2UheXx5MlF9VjQ2a3BQclc0OHhFO0pj''@;'; put 'put ''YnZiTz5vMVVUI1l3RzlCTCsucF9sPX5TcT5aOTVQX0BbdSs5NCM3NkI8YlJBWVgodTRlS3lAXXRDS0YlV25GS2BHRnpqMy5YR2U1fnopMEJHfFUlV1ZBLDlEQEh0KVBDPnleL0NIYz5jLmVIfDBPdHkxVHxYOFFUY0hZWFEsd3dUM3cxU1pVYjdHQ2VibldebHBqTWQhPSNTTE17di5ySGJ3bENE''@;'; put 'put ''TCl8VSNPT1Q6Oi9aQlVGdylUYDhRJDQ+bGp2KTtOZ11PVWN9cmYvNW1jW0xBcnxvYT1eNm56ZkQmbzlleDFrSV5wVjk3R11EdiNBKjVXKDQ7Yk5XWm1Hd0Ihd3FPZ0x9KmR2MlFgfUNkcSlaKjptWklOfEFDdzx1QzMoYWZCLkZEdWZobVhAYTdGK3NOL0xUY1NwZCs2YXBBUkNwaVdBPzlxTlpV''@;'; put 'put ''OmNHMnt7eEo0TTpjKEAuKV58a2hCK3h4M306YHg4XSpPUkM7S04oW1cxezRRRUkwR0MvOC5ATiJFK0dBNTh3KGtrV0VZUjZkZE9WOjFJIltmY3pkN1o0SmxFdE5TLyRTJGF6bU95fH1HdStKUHN+eWU+Vzt9O3NrbyVsKGBwbi4xTCw3T2U/YXJlWVU0LHFMNSUhcixIa2JnazxXI05we2A+Z2A8''@;'; put 'put ''dl9EIUp4ZyRsWEYzcyZbaCNAUUNiaFc+NkA1S1ZxeVVba3A3aXI7fkcjWG0mMmRvVWJTW0wzXU9XSS5WMHVdOV1kQSZ5KypQI1hHIShoOGIsZ2xIPjJjREJ9OUpdWUQ3I2xgRFEyV3dZPFY1Z3FLRFtrJTVKY3BHTWF6bjZOJElqIXtAZ1NiKTMwbCEjI0ZfNkc3bnUoV1A3ZEdsWD9dKW8xNmxj''@;'; put 'put ''ZEI5PXg6dkdXLH1pUiZxLnVzVTxMMF53VyEsPTZ1JHd9KiNjLitqWUE2SzR2NFk4JSpaMThSYG8jLEhqNG4mKnRBUlVzWXk6RjdTWzdtbHtvWXhIL3c3bDduXW9qezZxeX5uSF1rK0ZsVzNHKltMd0NlclNUSGNPcHZnfjhTbGhnSUsjbW1UWHdjaiVGW21hb3E6Zl9JM1JFSUZ9VFBqcSpOI3ch''@;'; put 'put ''d1tUbUt+OCleSHZoO1JhOWxkQUNEPy9Jb3pOVyRIUj9uUVFkOl55WX1QcUlPKGI1XWY3bXB3ITMmPUM9Wy8lfGZ5NWphWE0lfGJ9RUxocFs3Ik01OVEjQWBiN20+R19EZnU3aGEmWExUYzZRPFc8Ui8hZzpfWzhtVWo6LFVIbllAVypieW5tYltNUTlkUEcxTjp9PkZtZ0FDZk95L1IzSXo5cERk''@;'; put 'put ''aUxpYFFAZnBYMzhNViFaNFRJcnNgP2NEcSxQUnBUPik7IUV5MTEzPy9eNF0mSHtwU2FudzFCP0ZGK14/R1dIW2pMeTJWPFhjQWRxSHNLITBEO0l1M3xxbV13MUNULlNdOmVYdWl2NC90c3JvaV4zdkBxa1E5IWViOSZxNXZJW0c0TmJ6MUNPVF8pV1hkfU0iQENgU1QpTVJXU2QlXzk2d15HJFVF''@;'; put 'put ''aHk/VUtkPWYpdEFLbUleRl11XnIkST42TitARDxlcy8jKHZsKlNlfko/VkRocnUpS2dxPyxkciVtaztYd31nNzMwUk14SjM0biZHTFF9RXEmbU4oa0VJVyJVK1B0KnxWYWVDKzluJWFnOnZtPXtZKHw6M1FkZCF0R0UueT5PTjVXOFNLLm0yS3VwUEBkSTBObiNWIWxWZGlxXjkyWilhODo7cF5G''@;'; put 'put ''KH1SYH5HJiFtV1dYejpIVDJ8NUJgZ3ZKUWZ8KEgzRVMzajN7KVF1KGR9QTxxZ1dAcUFMKmxMbGlFayVsZT82TkhEayZxeE5QPXkxQm99cWZVX3VCY2VHNEJPSXV2fFgoO31sQnVlaU9YP0U1aiFQO2VKUSVqMlBAKWN+P2hCUF99O3FGNX1Ydm9VPS53IWtfPTk7MEt6TzJsKEhEMk5GfUtoan1o''@;'; put 'put ''QWcyaXY7OCM+M1R7RWBDSW1hMGxAN107ZXFlV3hrfSpzPEEqPldhI1FvMC8ua0AhZmV3Ji9gODlZanJifjh7ajw7TmB2fXU1fXlhWz8xJnhUM3tDUU9yUm48Vjp9fUJpaTtbS0UmMVtvRlI4UWtxSHc3fithOSx3Z2w4VUc7LkJnR1YvWm57OEZMR15yMjcxZUNfOEN0Yyp9Y20xVmV3RSEjZGp5''@;'; put 'put ''YDxJN25lLlNNKzFRPjA3QGs7ZV94XXtqTEU5a2Z2JEFefDAuTkczVGMqM2gpZ34iQHguJCZyam57Kl0kOXluOjguXkNLY0h0VmkxW1RFQGd5b1lYRyhaI24oVEpWfiRDdk5eSXlWe19RJCUzdD1OOUh8amkrLEdddz4rREx8P2ZFfFUmKi5IfGgvTTc1QGhwNm4sXUpoNCp2LD1dLC9HaUR6fmch''@;'; put 'put ''e0lQKTJSezJjSXFnS3R9WU4xKmw8MGI2TEdWIVBgJDRncmpMM2Z2VzVObF5AQ2dbNnlmc3tMMXtaRGhPWy9maEJucS9QIlJYcEs4P0dvey9GdDs5aiRKSXRiRig/PyRwZk1iVGF4YXhtZCtjRGFmNU1iL088RE5yLGNBaWFGWVFfY2puOFgkXj5GXjVCVXVAPz83K2R7T0hPcjp0KCk5cD4iP3Rh''@;'; put 'put ''Zl5kTWM0QjJwTV9NKnh7fkhzKj4kZDBxc1VTfmxlOzIzKEYlbFR3bExodEZ7VF4keH00JT4mO30/TVM7TSRLWlJzJERtOHVYdG0zRj9pfkRXRSM0WV54ZDppJndXbmx1XiNYblQ4bCE/NzM2WmIhSkZ3ZytrQHRzbERJOzR3ZzpsITREPE9neCwyR2hKN0lNcmY+PFlnYjg4fSxBMVJka2h8aDEi''@;'; put 'put ''STBgWmF1WCYscHt7Jmw9bllSbklraEBnLl54blQ/I2ZuYmN1ZCR8MlgocGM8I3thLm0ocWQoXSEuQihwOlddVDFdSW18fW5uIVt0KStBS2BwQl80QXxifSteTSIoYUgkVDh8NyYyaDZsK2M0MSQsMW1YLCRuY09zV3kqSjJjbT5uNi5hdWUmKzteTFA+WHhUfTUxWlZjRWdJdGp9dS9hbDA4QjND''@;'; put 'put ''PGVoM2cpfiwwcmBJWFMoJnZLJEtbbDBHRmV+YF5aWDI8LHNqMHNDJlRNLFFxb15eT3xrdSRLZUB9fiR3K1Z7JDg2X2hrcSY0OHBQO097YFBfdnBqWUh1XWF7JCNkUWdBLCRZLEtpTXp3I3FdRkRzdSRheXlJWlo8fS9MVTFpLDBALiNaVjpATj9EYEV1ZDR1TWZRTzZ2JD9ScyN7TF9rL0BHNn1j''@;'; put 'put ''ISZMK3l7KDxRSyNqNzFHIiJzIzBpQ1lUbjxoS05nTXFJTUUkRk4jJjJwcW9RdTpgYFNxdS9wPGpHdlNDJn1WIi9eeFZyb2okKmVLbTt2KWI3dSl6Zj9jNHZ+P0UiNy90bEdtNHRbaz86fldlWG1ZbzUpSzFgZ2QqM0VaMX5ORHdbPHlqVTNaW1hYOVo0KlIjM1p9LFYqa0hqIiM0L2JFUD49MDch''@;'; put 'put ''cWBmYDpNK0l9JW5NVGI+Wls1flpPb1A2eTlVVmghYjBWTk9sfUZ1M30xYUkqJVssalEyRlVteG4zbG80RlVxYEJUflc8O3wjKEguUzNaRjE3UysmaHNUdWZQK3taRTRHJU03dWYmNHxAaHZ6MjVNVHxMTHdGQk8vbi5GMWRDc10pJUxZVzpzYV1vdmc5LjR4TGBhX34lU0k0biwlISRkK25HcFg4''@;'; put 'put ''O1RLZjliTWp7QFs5Qjs3LzxkYVJWbSFVPDpVQzIkWzRAMkxRInwyMypXQ3hqbypgeGQ5REdSL1VLNzVnXjdUQDhec31UR1gyNkNhRH5BLkl0eEI1VWNSaH1PN0I0cEA7NGEoeiRIWyRHMF0jPkh9P2JRJUIwKDkrWllPREJRZUxnVWdKSDJ7aWwzKzV2S09OXyhOLjZHcmJ2OHYxcHYrL2ZxKTF9''@;'; put 'put ''aFdQXUx0WzcmY20xP19TL1I4I35SP0VTRn0rLiQ6eDIwcGsodV8sdUFrUGVhfGs2UXdkeClpJkJVXUBjQ1BVeHE+TEAmUVZrQzlFTDUoP0hZV0BQQHhAOCFxcDxNZVNve1lCeEU2V1pDYGtHS3sjO1tdWS9ifigvZW9pPTAqKmNre2pWdDJma09OUl4oa25JWVVnWTRiaHphdjtmUi9UUXM3JVA3''@;'; put 'put ''eV01WG16WFhHLnlpKl9POEh7ZmkxKVlLZjpmO2ImViYwL1lLRVlmeiRjZiFVZERfZHBXcXh0JXV+M3ZKZ141R3V1UGg2aXNKKHcuP2FrRzJobSsuflFkLzV3MkdAbyhyXnY+MCNUeDg2dEVuM2poV1Vyc15OJTtaXWB6cVJaPW5weGMhPSFUSmllMk1waXYhJmspNzJeJkJSJT5+S0xAO1FlWTF6''@;'; put 'put ''QHhbcko6bF84bWVvdmZGRFouUjo9VX0sNH4hJlJDKDdzQU5RUH4oJjZAVGl+UmErSz1eaj1aZT5FPjhwO3ohNG0ifEdmRUt1YkdeT31RZy5CRlsmQkFkYXhMTXQmUDt5PmJ4NlVoKlhNQjFBc2Q7dlJ8dHA7WTQ/THZdSzA6U31iKGM1dDMmbH4kdm45Oj45MCRKWEIkYDdpTDMsKnVDSTAlRjc2''@;'; put 'put ''VVpaU1h+eGEpKnxncyEsW2VgfXA8TStqZTlbNyZWfnpnTGEhXyk7RkdbXUVJRXxPcTBPajN7R1d2Q2l3e1Q+XXsxM3U1S3ZINSZzOn5CQEhPSkYhP18xRDFQczpmejZlWSo1WWhjfipUKVtaSmQjSGhkOjQhQTptNjhVTT1TXkpyUS48MnlrLnRZKz1sS0VleGFudXZqPWd8QHUmNWIpOS8rZGNq''@;'; put 'put ''UVZwQ05FME1YKTFXOzR8Lzd0UjZ1ImYqITA7ZGVMSWByO3svaEFpQzdlTlZ5Z0MpUzd5TE49L08kflNTd29DS1pRfDQ4dCRWbU9fNWZXNTFfNUtMVlteQHdLNmgkTVhfJn5dZ1NPQEMhb31aPEd5VyExdl1kWERtZkZvKFUpSyM5NCwlbnkwInVOOlYmYispRjElO2pGVk9bYmFxPzliOkpWTDh+''@;'; put 'put ''L11dVDYwIiM0ZT4yLjBrTlpjcVg8S2lCZ2UpQlkvYiE4PitYc3E7KFN7PiUzbkIua2c5NCJMY3JxMWMmTSouUW5hSHRRZWZnUXo4VjNsc1VUKSV2JTMrMEdkJUlibWw8aXEyITgodld1dldtQlJHN3YvdHFFWnIuOmFrVHAvZTd5Yn4/X3NNZ0VUL05VRlBZYTMzTDJWVksyVVJ6WzBiS0g8PipP''@;'; put 'put ''PW9wKEduJVlfTno/L3k5NVRvKkh0YV4xVlhGNHhwPjJpSzBYUnE5I018eXsme0hgaXF0PEZkaD4ybjJUeiJ9YGpMMFU5WjZQZmNmaHEiOXRkJHQxMUV2WDdYWyRYTDQ2PnkoV0NTLGllVWUwOUxQRllHbl93USZZPzhVNlgmSDBRdnx8aj8kK0g0Z01IXUJJXy49e1RfY05XJXYlfWNUSXNyKnwp''@;'; put 'put ''fHxGfVdrXSJ0VnJwO0ZkOXRNNTVWeCI8aDxXNEBtb2ExKXc+SWk0JkEqcFBRdXpDd0F7czJzLmpENGspfjpzdj9FN004NUJXTUp+RXpAaERGelAvbThiYng7OERZSnR8PmUlMkI8cHAkT2tuKCp6O0pRRUNSKTtFcWlBVGxOVGBsb3UjQ3pENiQoUWNtY2J2VSVMS1ZOckJPWiRwLjRMdTFMayZY''@;'; put 'put ''Yz1SZjNWdVRDdGgzSyR9Wyw1SUNCaWdMRzdlanYvXlJoMzZQZWVnYFosaEEoNVF5MTM2PzhjfEkvPkAuVyJocFZRP3tUZHswT31YIy9VNjxjSiFweToyX0lKV1ZzOl5yZT5QdGA2dFEqUy5oLlleT0whcWxkQ2dBIX1CK1Q2VGJuW1QhWlZuLklYWDtufms7JE4uXS54I0RlVyErXkYmQkY4LEBE''@;'; put 'put ''VE5ycTJXXzkvKlo/Kl1jaV5MZHBeKFVZemckejRSMCEucTM6ezpxb345ZGp6dnNNIW4uUWk2a1F6IzpFNz5wcEdzKXpleCZ9LjFndlNpJHZIUiNkK1QzQjBWLFtAKDZJWzQjZkM0WUtJVSpjX0IhN3EjYWVAUCN5Z0dMVT9PUilhXSQsfXZeK2ckej52MXh+UTkqNDp0WHR4Mk0hfUdAW1tGS2h1''@;'; put 'put ''RjgibDxHKUFaVS5OY3tKMWZTcXwjeVtCZVpbVU5fbl1VInB3REN+T2BHLyImJlsifm4lLjQkKGJNIzBJKGk8MSw1NiE9ImtSSkM3b2todzJPflYoLldKdzI2ZHguV0RtZldCTnZHfmApIzRiaGVpekkzS00lRigqdG82Vz1KZjdWIihWMzVkSzcqSTNWIk4+UHs8MUBsL2ojRlBTK35PKiM9Ojo1''@;'; put 'put ''XygzWyYkWXJiJnBecHxnVG86Uzw9TGFbY0BEVDJuQWk8YXU0QVI2OkkhK1RvKWBVczFmaTB+NX1NfGA0LFZqRVl7N3c0WENRX2whVmBPPUUwNzBeOWUhbCJYPUBgPlsubFhMdTVUbllqQk91InZ5OlZaVTh1KiJKJGttfjd9P0E4Y1JFZ1F5dmV3SCpicihHX3siO3FCMElRKjxpeV43VCh6TGtf''@;'; put 'put ''Uzx8YzE3cVRxXz9oKkNwYWlUWGU9fkdZek9GV1lvJTFFSlltXl4vUkxgNS8/ai52ekFScHIhVFY0dCRwYkU8OSR4fik+byZqPFRWUjByTUlUVSI7JGxBSnJJQVZbKz5IYHhwL1NxL3o7WipSMiYlU2spYiRXXih9RG8lbyQ1VixJIkRjVjNtUCE3LntHWyFXIUd4QHRdOHhxREBEcmNwZjBOOHh5''@;'; put 'put ''diZAZjhdMnVJQ2o5eHYyInVAR0dUfDgyQUtCaVFwVjkoaW1YJT5ML0ZvPWNudzd+JXdFdHU2VkxIUH54Vn5PfUppIkk7Pms9KU5DQzFgZmUvdy9XVUkoKW5MeHArR04rUyR2dVlgQWhZI1ByKyMiQGtBYnxLWTxaLE5oWWlqVE9JWChOZj9lLH4rMFhOe2lIeCIwVUhJMDxHO1p5dCh+Ui86XlB1''@;'; put 'put ''MlhZfWZdP1VYWmJIbltLfGRieUNSYSN5Nz5yJWN+SGltMl0xT19MSj0lQSNrOmtiZlV7cDc0ZnRZQWE3IztdQGxnZ29tRFk5KF5aP2tFQj1RTTc0ZGthdDJTNjlPRS4qTSNCWFMwbGlmWCZ+LGhwW19ZSEFQOEdHb3E/IVZpdVg9TCImWT5EbDQ2dDpCQXdXUmAuV3RNbHBdc0UvWCN2OnYifHJu''@;'; put 'put ''WjZGT0RJNXozYnZdWVIpUVo8TG1wWXZSNHNfLyxMWURAeW40P1ZnbzF4ZF8rcSh2ZmM0ekZQVkl3MUhpanFYe1owW0JLUCpmOioldkpuPTd6QnUwVGF4Mk5JWUd7OG9ZYDlgUTxTcE5KYXgoSTB6flo0XnBib1BiRFJgR208InY1fS5udFtPPGdXTCFaKlpFLHJYNWN8RG06YHhQM0JHR1JkOCNw''@;'; put 'put ''KktTOWZqQCtaXiFZKzQ9ez1VciVnJGpBN3F9ajp8N1UvUE5ofTtFLlNVSWF1P3pkMklGY1g4IzRRWFpSdX17aXRSZ0lAX1hUZzUxckB4XSFddG8jPkRyUFsrXUpbVXpyM1QqfSlaOC5ZNk1FLn5sUENwVkw7SjRBIm5sY31IT2M4UnA8PGxjVEl4SkhgOCYmZj1HNGo7JjcvSTRSI3w0dFQ9a3p0''@;'; put 'put ''WTY4cyQxcnRrbFdMOCxyTltdfnRjaChKSC9XKko5YzE7bT1xXnQ3UWdBUkZ+aTFUdUNDZl91WmNiUkp0dkhUQDQ3T2ZhISJrUVEzZ1kmfHFSMXIoW18iMThrOltWUlFbfEZ0Wn16XV50QzxjSz1aIz4mRkwzRDF7YjFibk9MMFZkI1VsTG1EIno6bj5ZOlZJWjU5Sj59VVU+PWhDaHNwOntEPFRD''@;'; put 'put ''Jj5HLD1vJXtsPk07cTdYYkxafDohfHxDO0NQNWQvOHxWUHEoeXJ9dW4kSy8pWW4kKEZEfnJZUjM4IzdzKnUsTGtSYjI6X11VKThZTnYwYTt9LmVqN21WJCVJekpYcXVybiYubnAqV1AhKzwuTGp7fG9RYyxiK3xJX2wqQHJOPHwjfl5Va1VvUXgwN0g9XjRsfn18R2JjUUBnb0ZvTEQsSGhLPH5y''@;'; put 'put ''bGY3RVo0UnVlTyt8VyY+Z1ZkJGYyYXdvVGZCWHF4KWtSQWpqeEErJlskfl5qbjx7Z00kYWF4Pj97dilqTlAiPlAlR1R9L2BAMERWOEpuT0JbQnFIMCZ7NzhyeyMsVX5XU0JJeT1OYTRtTi8kb3gmNl1uMCUzdXU3M0dGcXBYKUhkM0Vyc31FK3RBXzFPUDBLLl9dWVdnTGh6REB5U3xGL18jfkQ0''@;'; put 'put ''JVJ7LG9vbS5OInQmZ1dwQSJoTXtaUV46WU57fCNtLDx5JVZTIUhANCpTPk1LdHt7XXJfWnwiWCZyO3lsTE1+MmMpfDVZbmNpd0NgUiY5KUIqdXk3ZF5FYGkrR1RPKDtndkBQPU1hTUB4P2JRRU42eiFeJCZveGdhQmhCT1dOb2cldnAzLkltczY5YiovNzovYWQ9VWZ1IywlbFpiJnwvfGlkfDds''@;'; put 'put ''TjgpdExRcnNbR1A4QHR6YDBJT1c+V2M9SmAxbT5mYjZvRXgjOEc0LlouOC5+aDZwPHVGWCFqQTpOZz1qZ2E7ZzYjNXhgJHReVlhONnVnd3luV3NmT3s2bilqNXt4Zjo3JDpuSCRjKy8pSVlmWlB6ODJdJlIqbTFWRykpaTlWNUYxbn52NENxKkYxOm5mZT9CS2pzeTIrVTZHOjZDPkA+Q1FmKURW''@;'; put 'put ''dl1YMV0rK3Z9UVdBX0JhUGQ6Z1Q2PzBpLyUrPCJqOEYoMDIlRC57PFBtUiFHTjAhSUZAO3E7OUFJJGRtblNLJm80SkF9UDxec3NEa29GVTxSIWxHaXBJZGA0XnBveDlQPTJVMzd+RkprKHlVd3QlU2RNNSM3dEJwJm0rbzQldFtnM1swK3hYND5oNDc5fEJRNTZ9ZWFqPGg4bDo2fFJUWVZlRG9Q''@;'; put 'put ''ZC5WYiVeKHVtRCUkKWBUfFZjdGAoNER8IWFNdVsyRmc0SHIsYyNfZF14SXM6dUNOb2xVSWFQKFgrJlVFez9XPGZgfiN2a2YmRHAldDIuMyEub348c0s1XUgobTd3KEFNZ2NsQD1Pc28mOlI/O2ZFZnpUSF1vcldXVXh4UnU5bHVMbXYvSkd6SFJiKXgrRnspcndzSkt8cWV3OEp5ZV5PYnY8XnVX''@;'; put 'put ''I2tGa3Q5eUgqKkYvfkBkeTxzb1VFZDlrby8pWCtkTHZHSCI0R19obTA2PCRpbzB7T0xISjRZdyIkMVh9PD11Y2I6JGc/dmFJT34sSVV9PW09N01sKEtNdU9TWVtCJi5qY3glTHxvbXQiZ0chX1s9USozJHBYQ1cpfXA4KFphNERdfHl0RitOM0w6UXZCMCtlbT9re0l3SCl5MUZKSVQ+UTIrLEBE''@;'; put 'put ''MWhmJClRenpFcjVHOmZEdHxSRmB6ckkoSCRHX1Nqb0BPYGU9JTtZU3dASDM4dV8rYXM/JSM6Q2RDaS87Nm9xemRYQCh8Mz0rRSpgJk4/NDNYNz8/WVI9akRucDN3InFEXXVQPlZHZVg8bDFyNkFkT0JDa2ZXQTQ0YXB1eSRLI2UkI3VkRXtNeGtObGVzaTx+ZHJIPTRgQT51Xyoxc3VdQEJ+fFps''@;'; put 'put ''KC94cSxEZnZTO184V3FlQGg/VyMjZCNEQzA8Q0JzT2RkZz9LKjlfYWFebTZ0eT5EbmNPT1Z8fE4hWlojZiR1REJxREFKX0t6KCJ+RVFAT3VUT0dFRC92R0U8ZV5wa3o7aE5lI3t4fENtInhfLDNpbT92P0RFOGVfTHVBdHFVYGpeQlddeHNJeyN6Y2wsOk5XdmlyJmFaciJvbHN4PXQ1RTcoMVko''@;'; put 'put ''WjxyfjojcFZhS2V2fE0xeHs2RXJlImBQdCNRPzdAT0BgOjBDLn4rI2w4QWBHSz5Yc3gsejVGNVJIIV8qSE9lOyFKIz5HTjRASkhwYTIhS14oMCVPKVhaOi4vMmxAdWxCVEkxcjUjNXQ7PWpMM0RxMEVFRSFoPWNpaz5GXnhBLGQsaF5XNiF7WlQ4TjV3cnhGdV83QDtSMmEqSnMjSUlFWnRVdlh3''@;'; put 'put ''JENxImBuYHtadj9lZC9MWV0zNlg9ekQzMXhfLzV1YiJvRiVlPmlSUFV9PkJeLz9QMywieio/dkFYeEo8fSo7ND5sLGxeOm02KmZwWm5gQHEsZHFMckc1VFcpIUJlZGVTNEJ0PmZfVnssV1dSJEJiLGN4KXchK0wpcEN0antGY3Y9OmRvZV1PUjJRTzU1JUhMOEdvZlJadSxZZHtMMDF6JX0qO2Qy''@;'; put 'put ''JTc+Zjh+flBye0VDT05DclcxcTpIVkxpKUhya2h5LyEkb0xtLnVpUFM1XyYjfXZmX3lNbE17aSpfXXltPFpQNiE6XWgrWDBaQ008bFRtVTpLZD9lXkg0KiRuNHR3d3U8RDQlb3EpIls5fFldbk91fTFrKy9laCRoLDAwbDg+LHRJK356SX58InA8OTt6SFVka31PbjA6U0shQ15XVmNEYWA6YClT''@;'; put 'put ''RSxdW1s0ZExKWUVPNm92VGdLT00kU2h4JUJVOXB4Tkc0e14lLDVPOzxLNHBROTNaTXR0SzlNIyMqaCkscG4vfSZCQmMvSGZqYDZDOltWMSFVdzhmLE9uU0o7UWdgO0shZ0tVT1NffDZoN2dUaVRNQD54ekNBIzliWWleWkY/WTQxcE8lJjVgXmZdZWFlLFNmeXZmKGJ3VGBAI2pmRSZ7IlNXVzl7''@;'; put 'put ''Ll87Q2djVTdTaVR0byRyNmwzIXRpTCxjYEJdRFRDPEopdzpdZ3U/Nnw9M1Z9eHZNb1tLOWBhRjBMYEo6TXhHcyQoXltXNGooWzZWIWshJkg5LixrKTk0QywzVkZYIUcoMm4+Nj9iKmU5OllIcGlAOFc4QTtVYl4mKkM6XWdWMT1nbDVZR3ZTSHhqY1Z8KTtzI2BdXm89T04vTC57RChLeUlJM1c5''@;'; put 'put ''dVQ0QGthNkB5OGdYSjEqNDpDQDE9PU04b209TVQiQzdvKm55QElZVkVmPW5TMU01JTFfdlouNk1LMGxgTmhheEFROW1icW5xXiY6VlFwYENeNG4/KjpZbzVYXz9NXXxrTTA8LF09U2hOVHtTdlJ1VWIxY3JMbk4kR3BBb3VWb011RTBZT0QzSzw5QnB4XUxPWEdvWGsyaGNFOE1VbjhKeDRxO1tw''@;'; put 'put ''WEEoJkkjT3Y3LldEfDNTPnc4OW5UTHFKNiVBQDpgaE5GNUx2eVNncz1yck5IJnAsUShIUUYoeERSYG57Vy9jdSIsTyFDRzcpM0J3Mjw9Ji5vTnhxPTxlZzlbZzAyL3pKbTBaTihbT0A/RDAvK2RNWjl4NDgrRW4wbzg8VlteVDY5OkRsdTt1WDUjP2h2dl8wX2JSVS4qQTgpW0o0U2l8aFU4ZlQi''@;'; put 'put ''TkNKcEZJZyspeTk3NnUvbzJuZSIpVShmS1JuOjE4OT9Wc3U4NVpTc2lBbiFLbitQRFspMmRhKykmfjRMfSleW3RDKHRlSXc7cUlqUTdAK2NZOFA3X0NQN1EsOVgrb005TUVkP2hSXnZKN2pMYiMmZD1MOnVQOn0mdG9HNE1YWlIhL0QwRSg+WkBHOUZCa0RSLCMvaWo7W3FMKkRWfEhXIT5JK1Vz''@;'; put 'put ''W3JnWy9JWWM7bnU9JTVxTztlbDd1fXAkdjI0cSRnWDFvWFJufilaTjtjR1FsRT5tSHVhQGdDeFQvU29TdkAuKm4jfWpBMkw9MEpVcWEwQnAlUHI0cHBCSntscTZHYGg3ZWhJdW8zNjE7d3tAVkJyKVUhPV9XZUQrbTguLzBOVTdCeyV1M3Q0dUxgRXE+Uj0keHw0bXFldkkiRz5NSWEucTQoW2c3''@;'; put 'put ''SkhTfUUwajEkJCQlWzReXXRKaV58NWUjUiVbQVBrVGB0cm8sakB6X1coQHwiXVBdKW0mdyhWWVU9TllARD5UXXxCXkp3PzN0SEkhJThLWW10WSNHWVhTKkA6czhIXl9rXV5ETT05N1VIVmY2ZylZOlpXUTBiSFBucjt7SVYhWHFeU2VgfHNQd1EiJnVmeSsrRXByO0U1cTNqMD9ZJXVPPERrXV1m''@;'; put 'put ''dFU4dlhERH5MMyFEKWwvZzRpKmx0cipnNGpoPHx1OXBdSFB+ZDdOc1gvY1BYLiReZ2ZCdjorOF1qR0sqPypyWVZMXV9TTl5INnFBaTF7e3hWb0JhQEhMdStjT3ZpKmQ6UFhHPnVKZDVMeXI1KS43OW5vO3cyTUxRaE5Sc0VgTCxuR1hXT0g1ZGIyOyZ3b118QjxCIStXfXs3T1M1NihQazUkLyo8''@;'; put 'put ''PTlTeUFgTEdXaz13SjB8Lk12UE9uWiwhUDpxQWAiemEuNnNQcEVWNzNedjEkOGgyMk5KNmZVZmkrbVtHdHN8UD0lPnhHaGxvZV1ZUzw6amdseXtLWTNYZGguaW9Ma18wSyxYSktFcXc+a2F7N0hscnx+R3t1WFV+TkdoSzdgSlZzImxsIzkmaGpATCR1dWlxNilCNU1pKyxhJDQ4LnpJNEJEME1Q''@;'; put 'put ''dGttP3R9cjA5Zk8qZSpbJj1rSipzLy5GOHpLUF9ZKHA5OCxHTUJBK1BYVi8pSF53QmF3fS4vYjFlflo+fX06LCNbYkQ5bFJjYjtecy5jVEBbM2crdywkN3lUOHtZaFJKKjpAM24yWmtLIXsqWnxleE9pM3htZStbanplb1tFOjpVZ0E5alQufV0kbEpWLkNVdntOQGReaSFRWVtyWiMkKnRTTV5F''@;'; put 'put ''Ikg7UVI0W1BWKHQ5Zy5vVWQjR3RNL285OkFAfENUYFd9Mz5RPG1IZ1h7QEUoTGR5YVlrXT4rT2M0SHw7QjdNVlYpSjZdbCteKV5TIXMyRHNHZEdNK3o/RFcmW2BGRk4yWnFzQXdKYlR3ak5zKXV5cWR5REwpZGtsI25ifjU5dmlmM2V2LE5GczdTcDd8SXA3RlU+SW9LZ2dBZj1fUXUoQStfQVN+''@;'; put 'put ''OUNvU0FiUHssUlhDK2JbTUJHT1dYaTFvYUcwcWp4SnBZbFpUbkNlPjg7eDtaKixAJjolNUliOiQ/PCZtdEkyfCNGezt4Iy48PnEvIlg2NmdQajZzRCE9Vj5VPEpQQHYqXmxRVUM7ay48cF9tJCRrSC5WX1tkRjgwc2F+cCZPXjsiLjhXUDRyIVMvJlhfN19waWYkLih9K2c+TU9zSFskWSMuejUu''@;'; put 'put ''RTA9WWFWJFZMQnNEQltdRzk8PT8wZitYWW1WM0xtK3RfZzA/X24kL2s2eU43ZShEZ155WE9XQ1o3TmE7KSMxWGspLjJFSFBfUiFyaGRBfUdZI1gxQVYjcypKMiY9NDc+Q049WGZTaWtqKyhNe0diPV5UNlMxWTp7VSxWUDdkbjYyRmxxMCJES3ooQW44emwyM0BARlh7XVRqMEZ6NnhTVCZba0xF''@;'; put 'put ''OE13diJrTFU0ZlVhOD9fNmJTXTQvdW4vTkNFbGpUeElxOjphU0RmNkF8fEouTCUqdHovRiJieT4xWHsuJE5GcTJkUD0hYSx0dHMqNURoOnUiOE9pIVR3czxxZU0/MXd9Sj8vMXZ6RE51alVwI2w8NCNjcnBaJiF5PnxiLmQ3MSU4PWJEeTBLQnVwTCpOZ2Zpfi8wayIqKFdPe2tvcVJCLD92VSxY''@;'; put 'put ''NVJlPDx8bDQmNktvXjx0e01gKDpTWzxMT0EvOzJCKml4Z3ohYzAodHlQOzJMMmlSYmFCK3hFazwxdElCZ3J5cDJucV9xKWRFRixTU11xMyYyMFRieEpPQD0+SzRtPzE/b0hRK1N8W3hkLi41V0FHZihvPTQ6THRgcmNQbHhVUWE7bj5RXShsIlBleyYpImF9Rl5kdVQ1I0JgfChPVFt5Q2d9UUtX''@;'; put 'put ''bj00REFlLFQiN1toJFh3JjYhPStwZEVGU2J8dGhKa2JqfTZPfDBeQlIke3MqYE43fVNjX3p3SXFIWTw8diYibVtKXU5YdEBrX1AxYSpYISUzQVllOnEraz1hIXhKQCRMQT9Mcik6OFI6KEIuXX1rZz5YVHFMVzYqKnBPaE87Tz1mP0E9ejxiUmQ9KiN2P1AuQENwSTpdZColSnhXSTJMbjtNNjAu''@;'; put 'put ''PD0/XUhxdjIsYC5XK1hYVmpQWjl8WXdaQE9lVnh5eSxOOig7NjRCbko9WFN5PDBqeEc5LjVHd3VyR21JbS9ITikmKUVId1A5Mk1OV01mLnoxTmM0RHNDLldsM2gjYCtWIyE0dTE5VixwLjJ9TnZ9bmU/QS83ZjFHOHEpc2x9L3hNZXhMYTAxdGEkeiRfeyglPHx+PUVbPVdEKnI1dFBJYl9AeCVE''@;'; put 'put ''I1AiVkVZaitBPmh0TWxddD53PW1CeWR0OHgySTJLMWg8U144JkAuSmJ3UEs5NCFOK3x9Ln5aflRJfllMKTR7UT1rKjdlWVhUMCh+anxdNFFzeWAmTXhBK3YpdEUwLFRhPmxnfjVHTSN7JGFXOyNHSGEjeyI5UnJzOmN2UTxEQGRyYWk2YmQvc019K35mRiN9cV9xPmYzRjBAeEYqZSp1Lj4+XXF0''@;'; put 'put ''Ni89NW5sK2csYmZjMUMzSFlKQEQhcD4uT2Vday9VYVJVQEZUPn5rc3JkbW9mQnR5U2BnJXwqL1VPWHhWNFA+SGNITldJaTlNRGNjMD88PXUhaSppNTw6JG9Rcko2flFXZDRJK15+TGtNUSZ2a2U8QkU4cUl1U3BdeCVeZSQhJSIzVUsyOz54XiQ1PFA1UGBiRFRUcnUqXiohLnQhVTk1VU5BaFRg''@;'; put 'put ''cnwkcnlMInEzXzJfRy5LRnpUVTJHP0RiJSFLbE1qZ1gkVHNdWD8ufTNMU0RfTCRJV05FTFFjNmElIV9JMSJnYDhJSkZAfjhCYEY6TUwqXTdCJENqXzhkYyJRNjVCTjJlYElqQ1suK31jfSM+P3R7K0siLzpuWjhwJjtJNEU1REkoZkFORiJWWnlme0gsemsqVSVSMlkyMUlOflA/NUU+SD02Ijte''@;'; put 'put ''KmUjUVc7M08xWSVeTDIxYkpFRjB6dXBsVSJEYkVTL2crTF96M3ZMZ2dRYjBCTWg5cU5iaCxHIlRyVWQqXytTUFRPKkE1N2dgeVFYfl1kOlomKGo9JX5TTXM1IUcial9IfF9xRzNJJkk8JnJIc3w7S2cqL3Usc2JDQV5aU2tkWVt5byYldEhEWkZ7RCQpaUZmfV82b2gwM1AsXX5rJDIwT3p0QXhq''@;'; put 'put ''U2treDMyZ140WFRdfUBjd14raThFPUN6IXkrOG1EQy50ZHxWdF5XUzZ4dHs/eC5DaERXVUJOOC47cl9Xa157KFZZbTJWSyhOb1RGM15fZ1syZWZOX2pLMlQ6QDI4OEdeP3ZqUTUxeyMsMyxwKGxRXjdpOU5mREB5Mzs4eWM2UyNmQSYhIzEmd3pDTzxIYFptfW1iYD80SXxYQWliXmBaTW5KKjhN''@;'; put 'put ''Lzl8NVhyTWs2MzNnPT04Z0A0QG1lQnVGJWlSeVVPVXQvW0AkSWZiTFBabDJMPVIxelldJH5bY0hGQWFTaEF+N093aE1LW15kd28uI21dQj1aSjZzXUVNWislKXlpM35TJHU2QVArOlVRcFkmK1Y4el1DYll2ZXdIbi5nRHRuSTBeVzlTcHw+Rmt4L3NlZSgsYlQ8I1VJbSZhN0hvQDZfdylFJU5n''@;'; put 'put ''KkBiPjhyM3UsUm1FRDxrRiZlNTV+dSZ2KithVzdeRi50d1RHQDAkYEdIIlphRSZ6KVltLCNFOXVpPGk/KzpISksySWx9ZmdXJTdAPFlAJmlwMWhgSDBNR0Nde0I+XTRKWztRd3o0L04pYDN1Sz5yTyVVMGNHIzpjZDdjPXEwPEopNTY9bFszcGpdZTtCVF5lcy46N1U/eDNZJXBYKFFaYmk2Tj4z''@;'; put 'put ''e3QiSlQyP0R+VU5IZnx2fD0jVmAjal4uVShkMzZSQW4yR2kxN2B0ZGcoNlZlTStAcXM3eHglcUt9OUdoVjMscjBRamR4XmNaKDR+VXtjaTk+TFNxLy5rcSVfeG01c2pOT0RJVTNvYGxqd11RVEA7b304KlZsWV4oSl9mPD4uJH1JMDxgZHFuL3hAeEpDSVc/WkpiLld0ISN1YG5CRXQ/fnFkL2F0''@;'; put 'put ''Rnk2fn5CXlcwTlJjfUZfcEFTRmc/MWJUentANCR2JE01OzksI0Q3UWRjLyR7YyRhfUNTb0o0Tj9AOEB+ZDZLPyRIOXVlPSIvPFBzdUEvTF9OPiVgLHIxbHVTaiJpa0xAKkJrPlE8aGIrJUBrRWg5MG1EYmIyPT5YLF8zRnByY1VQRGN2IVZgVHpydXhUdXVMIV9pTEFhdH0mblRsSSkyNG9Nems3''@;'; put 'put ''bXQ4JVdaSCUwYkVLbEhze2gmYS8uSyJvVjgwR2xsO1pjeUBtTX12KHUyLCYoPU5LdiZYW1N1YSNELnouXmdrXWNJU0t+NksrfUtvaDVFZUFhWDw0TH1oRihLPj4vWmtAcXNEO2VNZlJ5U2JmZVRJbiFWbCxwT0hNN2grM2giVzBCa2wzJWpSUlhbZUdPb0VwZihCXkd5KGh6eD0xW08ybER9YT1s''@;'; put 'put ''TjZmQzVzJFhvSEowPHM4RHkrdFhMc0UqS2VgNkwoR3RjY1Z5W1NCcD5sSUl6YHA5WltSenRlfklzV0dEcihvRmtEai9CQzZ6KHhRanZjcS8kOGkhLEZVZz9CaiwsRnUraWg/U0hBQlluQyJtdWFRQlNffVkheTlhJU1hWzJaR0VTOUBhPVZDeFhXSWgxP2UufnolUUwmcC4sJDE9S1k6P1RAazRb''@;'; put 'put ''bmhpMFdXO2BJX1YkbCFsdVt4VDosdjBwZylOWzRUVSRXLzo1KEJPQ3RfRS56ai4uK3hIOjJdd3FqZ3tVWTR8WzVwfSFgRih8PU44X0ZgQ1VuRm1HaHhzeTRGbWR2PD92UFZzSklLMWU9a1okdl95fmRwXXZOQ2Z6bkpwNSEqWG9NV30ycUEoOVt9OCpQdkY8b2cjMTw7NXQlcUIwUzo3TVFfe31G''@;'; put 'put ''UHpzQ0whbyUoY3RMaXEodmQjK0xKK0h6VkFfJFVsNyk/OjRFUTl4SzF1e1VSR1tVajl9SWRiUSpaPFNiejFiXiokKWwlfHdafXtfRWxidyJ1RWh6QjskUVZuIkN3IkhKMGlmTEJSclhiemQvLE1LYDA9UXRgTlAzeFFLdWk6SGVmNkx4PGkpcjlSIUtaPTRuIyxvdGNHS3k7fHQwXXloS3d3dUlP''@;'; put 'put ''UUQ2aikyPWNhazhjQ0I7L0I1OXhnKTFzfWt2dXdJLFt8Wn1fRE8rWi5mUS8hMjtYOzZOVSh1WGlHMkFkbm1KZ3peLkI3VXlRZ0EkTjdpcz06TnlFRVdKdllxJEVJRUUoUkZYXWAhViQ/In05LiFDb2VBRE83UDsjP0lDfE53bkYmSnUpUDR3M3g9OHohY0lkRjBnI3BqbT9acH5tS0gmRz4uazpX''@;'; put 'put ''NUVlUT8xSChodER4OCI3blhEKCsvRHdkbntuVXFSUi4mWGU0WHlXYGRzZ19fWl8ua3FLKWxNWz5sajRIezhdfH0+Nz9zJU9uNEM3dzsxSDphUVVVaVpTPGMmTDZPZV1jWFF9ZXNbeVcvSkxKT2c7WWBaTmZqNmM9PzQjLDl2am5KSE1tWFRdbz9Way5LWThxMDdGOTUyJntgW3FRVnQpckY5cT5N''@;'; put 'put ''ekpRRHEscWVbZXpRRHtPW3hye0Vmekw6ZFomO15jaUlDPUNPRExRb1hUMnx2dyFYbThMeSRfK3U0ZEIoJEwqIU5ldEtLTjR2Q0lAP0p2OXFSQGVaXyMyTDdrfW0se0d9Mzs8NnM2dHw5allANytwQnlBLEp4MFBgUXt5bjg1P3tpOCRaOGNWRyZNRmg1WmtQOWxMbjA/KEVERjN3NiYwfGQ7a05G''@;'; put 'put ''L2NNKiZTN1RwUVBgMEZ4fj5ZRnd7MktZLyRPPGYzITRqUkduK2Q4Jj0lTnRZaDZsKXwqcWheLkJYRz5yQGVXMiMoP2dOaEwpPD8qQileZTJuPzZ0RnJHTVJ0aDxoMHxGNWBMdykzZVlKXlglNERtPlcqKFV6aiM9MHp2MEEzVDlNJHBhNGxXUF1IZSxTamo4SnNCQjpaOiUzRD1AVU1gdThzMjFy''@;'; put 'put ''LCI8Sz5Ad0whPVs0RU1Gc01RSVQvOzFBcjFEZzZWb1hnZHQ1Rk5uY2ouejgqQ0BsP09BbS9hOEIhLjxbbnZEKCs3cX5gZHRGX1Y2Tl1Paz5zb2E6XmY+SyFTSyNfZFsyfHh7WVlvSm4xKnRxZTB1aGROOnVTM0k+cUM2Sk9QfVZeR2doUGxOSWU7M09bSVE8WldyMC8hbjU1aUA+YDA+SWdxJiUl''@;'; put 'put ''LEx7PjEydTJ4MiZTZishaSY7Tmd6cmtzISEuNnV7LkQ3MTlVVS9YJFckLkUvcXZROiNBWT9xM3YyLGVOcVl1QmwxRF1qNXhZYVsiOlIkQ1ElPDV9WCpCWTBpMWkwVUFKUFhiQEFJKEhbbDhndlhCTGxKe2pYbEg6YyNmZHx5X0pJXzlXZGszUSM0LEBjTDMjKTQzZzw5VUUoTDVPJDopQS9rKWov''@;'; put 'put ''JExxOEl9eHQjZWRtfTVxJmpAI0tPWS5IaE1EUC9gPn1fK1o7dF16JiRPPD5XQ1EieH1hSE9LJSxlOEJxdWUuVVg0PilQPmZ7ayZPU1dRVDJHcTlWfHhiWTshUGpEOjJmUStmdTtaUXUoOiolbmd1U2N0Wnp0TilGSF8qWDZQSk1mZUY6Li4vbmo3L0FRZyZpNTMwT0J9eHxtUG19cUd9M3JKOnw4''@;'; put 'put ''aCRbR0YjdU0sISJLOlFmYWRpKyVWWT97UXE2UHZKen5CbT9uRWE0WTVEYk8pXXI9dnhlI2IpPlpCZFJCaVVCe0AsaXB3ZSwyZEhMZjtFN1l4PD9Dd3l1dHg0Xi9TYjc6MzZEfmBmP1E0c1hTIlpDTXgmcSE7UiNsfTgoXTA7eG1nZDZxaHBMI2k6JkYmJHN5MzdUSn5sKC5lN2U7T0M3Lzw6Izx6''@;'; put 'put ''b3wkbWl2JWc2blFgSl0hQEpYX358cVltIz9DcTt2PHZsZ14+V2I9UCxVbXV0L2QwfGlmdGtbb2MqUkVDMns2SXJVS3ckZygoSGFfWUlxXjE7cil0VFQ9KURgK29xWWF4Vjcua197XmtbKjNhd3I8aU5ZcGJWbkNDbWtAX0t4VjVJNz5jUkFtLl9DeiJsOiVORSI/OTpSQjx7ejF0eCpOY3dFVD5d''@;'; put 'put ''ZnMyTS9eUTM+bllZOS9fQ1s8Uk83VD5+dCksYm9AIyp4NyhiSTA3MSVYJGd6Q3RAIWlWSTQyJEdZMmJVc09RNTooWXgxT2NkZj5rVl53KFI6bnQqWlEsUzdea1NGUSljI359YSpifHldLGRwRlZ0Snk5M0I1JVA9I2JxRXJCSDBycCFQNGRFVUs9Izd0Z3Y4JSFxQChvaT9lOk5wTTB7e2JCLyhv''@;'; put 'put ''T1haIVI/OCNuRmQyVVArek97UjtsRl13bn59YmwuRVdIMGx6ZzgsdjlZX1tLVzxDdGhJPExIdTNENE5HYUFvJmtAL1dxOlt+c2BjOSk9cUVlOk5dXTwiaFhHbUUrJEU0T2NlcDM+dWdoVDxFciJ7LmJEVlEoOWpnYDs9Q0YhcDFXVkMla0pHWEVBIjFiImhwaG4hamlyZFlgTTc5eio7UUdBPm1K''@;'; put 'put ''ZlBZI1k+KEBwbjQoWDVTIUwid14xOl5BalcvO3ovWUlJSmQ/O1IjNX5XeW19Xm44aVgoWl0sbEVtMXl9OVZWUn1HbW56T0glPGYrempDL0RhT0hZOFhEJmMzNTkkLmA4YUxoT2w0X0JiKzUzUnF2Q0JVdkRTR2Jpaj49TWtBckY6ZD9YQ045ZWhWPEZ7PiVMMiVncGZXd319Sm80KTNwMjxWTGw/''@;'; put 'put ''eVBma2omUTtAfD5paWkkYmF0bGlCMzVzUStjQUpGPW8uU2VvOjB9ZTwhIzs8ZzBsUyl4JWJndjh0RSJZSXBLQSk1KmVVbGI1Z29ZfWpQNFFbOUd7VWYweVI+akVVYyQ+Qigjbj1uVHBZTCVSUiI7K1R7UklUS2p9aklgU0QxPz9ieC4vOkN+QTdZWFhzUnd0UDFWUXQpPzUrIzMidikkRypxNiV3''@;'; put 'put ''K20qN0pfTV94VXQjOjJEO0E2aC5aU1tZaVAvSypwJClqKFIobFZfLzJlTHg/KzxTNTs+LFdjelN8UnFCTip2P0laclAmfSlEZEUjOV1tP3x5JXZVTiRtT1R7OUJ2KG1OS09sOkpoQzF9UU51aWBHUnpdaHdLRl1TL1t2ZU9BNUQvO0ppfDpNPXZTQ1JtXytQQFskPikwbGNtfjw7WVomJHQmfVtU''@;'; put 'put ''NiI9WkgyOmQ4XzsjajZMSWtFZ0dpbGs2Y1s3XVVZfmN+JCNSTnAsYS58dEZ0WlZLK2x8KTAjU1prVTRjVFM8eVImRUFydEZ0clcjNjhBWnc8NkNLRXhGKColJEZATjUrPExnY0NqZiRgMmsjL2NrQXBEU2V5T3NeKnUjZXVkX3J0XW9aJWs/JGleak00XXBUc2MoIzMuclRKOmxHI10oLEdidHgk''@;'; put 'put ''ST1XLCJ9TFV7ezA/a2U+XlZxTSJAcT0ldylAIyVXV21aMy5sTFY9bjVYfDhfMUdlZ0JFYGo+Q2NQTlhxMUducEUiLHI7YWNSQWg5KGJ0a2dtb0w/VCZwK21JSjcwSFFeL2BZViVmZVUheUw+JnApUi90ZStrP091ISNdPX4oZnlIZXFzRjFZMjdDUClhWzE5USh3RGAzYEQiSXJZTSxhMFdrLzhN''@;'; put 'put ''e09GJVAoUT1LKX1CdnVXJExSKSNnZDV4eFJYM1QqLGVeZFFVO3hLTHhrQi5YdT5URS9RfnwqVzdVJV8lPkJiTHx8JEJFajghYDtxXytZKHo+a3pNXSMjKmJnXUlUNHdiLypJLD1OSTxAZ0llVTNOOy9gUmJULytqekEqJC92X2E1ak9yUVZUOEM7fWd9e29fMk1VO2B9OF1ObFhjIit9PD1pO2NX''@;'; put 'put ''RXZyLEVDZzg4KmVwdkxuQzBre1Y6JWovNXxJaS5EeVZHJGBnaStBSF9yVytFczdgP103NVdHfmshazArXkM1TXR4Nng3NVFwdSZDIShbNSp0L3c9ajVfJi8yRGNlQGhdJlYvVUcuInpiPzVpMFFEImAoYXZgYjlbcnVnd29KfmNJcj1PZj9lYGxVNXt3OG0sels8OzBOcH59OVA7b0N9VSJ2fGpo''@;'; put 'put ''VWl7YDdrdHBxZ3R2Mmd2XyF2amI+N3FlekZ+TXVqfC5HJTd7YkJFPW4qbHx1JSVnd3Jxb0suWiNqe2BVbnZRMTgiOFssaXVQT285W3w+WEdGIS4uVXQjMTxicDlkRCpiRFhqZm17V1J0d2libiIqQFM2VCRDJF9zaitCK19kQyYwb2c8b3tNMHFOQn0zOXA4MTRndDppYzt9OF5kdW1BRzBaTVJV''@;'; put 'put ''NyR7PFU4cl9PPltxTHd6d2A2LjUmNjNYJTcvK0syb1lvPn4yMVFdcDBLQj0rek1uRTp1TjZ5L2whbHkofV1OdWNHJn5yV2AlUGdEXkYkNVlORj8yVUVkUj9dNEhRPVYmV0BgN19MSCVGMzd1I2RZaztAQFUoMSU3RFkpdzUqaT1KQDQxMUJ0TXtuIkg5PSEjJlE0NTQ8cStmL2IhdG5tWm8pQCxR''@;'; put 'put ''TnEwJktRfUAyS3EmdmlKV25weiV4SjIrOlF9ZD9dZH19IWUzLDAmKlA4fnssOT9qUVF3PVhWR3QsWHAiLnJaQEFHcmY2X2pRRjFWSWV8QiEvYWZlXjZFOD9qbmhdX3p+KS8xQWYmJC4jYCZ9YSlATnJhUU4jRTtTXmNwdVJoRFd6RDJHXyVfTDVQbFV3ZFdzNlp0VVd4dHhRa2pxX0YjcFNHV0lF''@;'; put 'put ''XjxnYEZ6S3NYa3wsK3U3eyxDKm1ZOn1ROitsfHxNYXA6WCl2YFlvMm1bTiwoXkJoJnErdnt3WntKJUlyRFtHbnJ1WS5IZjlnZEMldWdJVHdaXnFdXXBqRHEvPn0hLlMlWClfLnBmKCMuMnFdR2k1LyNoMnwyJDhhdVQ2VXw1d0pDU2Vfd01wM2pPd3ZaLzRYRU4/aV5kPEQ1PytsOXRSMFpVTGB9''@;'; put 'put ''dWpZKWBGbSRRYzFBaX4mUT5bS1JqaDFQOC40OH1rTy5nZCl0bH1yRXpqaGkxTWFBZl9LUUkwKzgwKm42XStsZks3WG48MGhmX1Y6Q15pdHUwTnEpfltQKHV5PGo/JU9pcGZARWk8dVFhb34rQGIzbls4OUVtIj1rbm0uNXw0S34qZz1kPlowYVgxKWtzYSg5JE5AWjMlbTpJRnBGQlsjbk96WkUu''@;'; put 'put ''VSguLl4pInJjdktwQiVhTW58W3skNXxXJC57Rjp2Xj9zS34+MDMhVHpjVnxsTHkhTntFJF40WyFsejRsXltRblssMUFIe3V6JktdQzttOF1iPVA8YTFTdnpCejolU283LjdTTypBclB1OnFhbDBJMlsmV1ZpMVc8NGhNXWhIfU1SaHVlI31ZQnNvM35OZ15ybCFVeT5xO2dlWiZ0NnlTRjhSVksh''@;'; put 'put ''JClhfFRSXi9FPTMjQCszUFdeWWUrfkJEeFY1NmdmVENsdTohSUFMQH16bmluej03WDVmUiJLTyxlTThzNz9iJSJLJk9SaFBoWW1MQS5KOiR9QSJnKFIjYFZPKTBbYWpTJCRVIjw0VGFod2hSZVZKeWlMVGFwaHFEQiR0bkhLZWZ5KlQ2X0NwbDFjbXt7a3xMdCQpe0hfZDtOI0hCTjZbMi56YkR5''@;'; put 'put ''ZEhVT0RJc1B5KEUxdSpgfCh5b3h4Ki52cFlLXVRkQl0ia2BSM0EhcntNdnx7Ml9Bd19VRShpWV0lemckY2pncWo/InhtWkQ2PD5GMEBIKD9aNHc0dk5eKVZEdTNFZVZnMUM/amQxMEpMN0t2OHJIPH5obFp3dTQzUCFjYUl3QW1hTCJNPG9HT0M1TWJvb3xocjFjbytMcSxEQ2dFeUdER0ExWCl2''@;'; put 'put ''Y3QlW2JWWVhaRUM9Yy5UMHswJixHIzZUO1VdIV0lYig6ZFBVRlNwMFI3MEskZ2NncXJqLmsieUIqLFNHIywqSWxATVZOSUlJfXVKZ1NEV3p7fCtRaWA0SUFmcVhMVzdNKWxVbnV9a34wfE9eUXA3SW1vMlQ0Z2FrUThpPXdkIzxNSWYzdFYzbmwzMm5KL1R4amZUVixpenN1QldgKV9lNCEuKnpY''@;'; put 'put ''YWRzaGtteTlXWEFdc3RyOFVpYlpvazt4N2VoXm5jK0I+Oz8/MUwjS2dCUCZubmFgeTpObzQuJiFAdCQmZ15mVGM+Ki5FTmpEZF45X0lqYUZEWHNXYXp9K2gjMyo4NUAvdy9ndXhCKGt8SXZpWWE4WUIoTHlFSUxiKS4wLFlHSTJzPjJTdXtwcjB5Zn1wPWh6SCxUW2FTIXVuRkh4PX5sWkk0JHdn''@;'; put 'put ''ZyJrNVspOV5qKkojT0dHJD9Vbzd6cWx7I2FvJFE3Yj0pb0ppPnIoZ1RBUU00X3UuZDpbdTt8K1spVHtEWypvPFZSMWF9KVlCTGZzZG1CLn1xaWRvXzdjPldHJG12IkIiTjAsVT18UmpXZX1IZFN1VlFQNGEveWRvbU9iU1dzfT0vcTt+X0h8TjBCYE8yZEohZWFmN0hsaEJ1WVVLeSNEL3xzW2VP''@;'; put 'put ''ZUxwbmBdeDY5QHQ2MHg5TGBZfkRrQSo6X2tZUn1uPmN7ZGBSS3N6VlJ+KUVnWTw+SmhjbndsdzxRRFdMLnlOKnZHNWhWQixQP1heRldwKk8xUGRxa1g0KHNlLiR0OXc7OUVhTlFTOHZOSHFbaDVUYVl2Uk9qXz9NNGFSJGNMW0dHY25lQVVUWWEifX43eX04NSxmU3F4M1BacygkdltFdTZPRzEx''@;'; put 'put ''KnN4bHBBS1VjXTZyeV1pKFEyRmtfL1UhI35+bS9SdnNmWzxIN3AsfEZhZnNPMEpYLFZ7UGcvRE5LLyV8a2kiJixJIiIvLENDImI0ektBdHx+TF42OiJ4MmhmfWJOJUA2enNgTkVtSW8ze3cjXyVJIVEoN3Y2W21KezQrdStEeGJXLEJbfXFUYXU/KDdZekJZc2EqLnQ2Q0A/S0c7QFJUTW07fEUm''@;'; put 'put ''Wk45P2QjOmBCckdQfTZdLnZFJm5Oc34zUjB3NHl4RE93dGVJczdxbFF6Lz5VeGpYUTBBQlVMPEQ+L3NKLlBaZFVIUCo0PyYzNlJ5cFZ6WTpFRV8sciMmP0NrRzEsaClXU2Upcno1RjlfS1Q5b3JYa3A9Lm4zJmhKdDpGJC8jRT5ocVtQZkJySF4zT0ZYU3V4NUJteEBnRSJ8TVtnOihgQy9WOlBq''@;'; put 'put ''dFRENigkUSkwflA0a0AiU0x9MSwrUVR2c1JOVi4kfWUjZE9wezY1K0JPTys9TnQ7M30pdCo5UH5ZTHxBRXozW2FdZWQqQVVhLjIhL2BNcUI0TDc3QiV7a10xKTcvb0AjOlEoPldkTCVWLkgjNiM/UUArU1NWPWZaZkJ9fn0kVTZSKSI8eGtAfXF6OS92K3NALksqUlU9TDlKRzFTP1FKelJKRDc1''@;'; put 'put ''bmt6Rm11TiQkJWVdZV1xeSlBK1dvbi57XVR8aF5kPkxHa09LJEswL0RRQT9GZn1PQWRyMTBAPzx4bWtxST9MTzFrfVFlQyojYE5xZHhyPSl8XlhGa0VxOldWYlc9KiEsLjxSMDxqYnVJeFpxUn5GK1dlUSpTbzNnP0J+OnpJc1NUaVBKY0Z0U0B5TzUuNCFAWU4+NWE7RUtsbkZ3VnxwUHZ6MT1K''@;'; put 'put ''PlsrSnNkfGpVeHV8SnBAK3VnT1Vadl9aNEFKMTw8LGBacmhSU2gmcSVhImVaYDJwJjg1MDEsbGZeaUN5dWo+emJ1I0h8bFk1MyQyN0w+aXJPS05bVGhOX0lySkRjX2NVSEVRJltJfDU+I1Q/T2BdLGZRdChhclNQRkJoZk04Mnk1UmcvL1I9LDpOZVNzQ1VFIkVZPVpSeCVIX0lMTG8jIWpXY3Q7''@;'; put 'put ''SmAiWTtzTCtNI1cvSVJBSytJOmtqU3pjREx2cU1rRiwmK2kheCRlPkRsQ21kezFiVFp7XV1AK0I2SSVxck56Vyk6KHVdVXY4YThMcTNod24uIUFsOFhlOlksbjxgUFR2K3deeiErVzxdQ11INzZLN3oqOFhuYCI1cmwld2xVfWdrRkNsXS54ZiNIJkZ6Wkt0JnMsaXV6PW0hOzdzJmAoYiNRKGso''@;'; put 'put ''UWJmQzs5IyYpQl0hZW80ZnpMcj08Y3BhWiJQJC9HRXp4aXV3LmFfUi9zWHFRc1kkWEM6YDNeWls+OW8sZyozejxUNE17Vmk2X08mMXYhU0U6NHZ6dGppYEtAWllERTlMKUZPOiEqfH1CZlIpRXB7UGEpe2h0UFVzZ3w2ZT81Pz9QWS9lRi4uUl0kOnVXQT9UTXMzYzowVi5Xe0dPaVAqeTJ2bjF0''@;'; put 'put ''WWZQV2hPTktNJTFdYG87OlZUQ0pud1JWdzxLUlgrdXAvRmdEfjM/T2g2eFIzb3UweSx6SFVyTXwyZyJrL0cmS0RjTEZpdWxBJEIze2FtYFViS11HITRlSmpEKk83QzMkMSZ3JjIvcWspZ0kobkdPVCt1TWx3TlFrVEJuLHxoNnpjZ2hAKmgqZXMoNkF7VF9fMXlmaTVPXm47MjdnfGoqSzZZVyw8''@;'; put 'put ''PDFWMzN6VFRoZk1FTCsxQ31+cCFgd3t6Y1ZsXVRIIT1fT1slNkxRVGhoTDRRckRvKVJySEczdTwjKVcqXnxqVmNHRXB8PFEidk5DSjJ2SSE0a04zfGVFNyJkZ3p4R2kmeUYzOFUzSCYvIyRdV1lJTSJvVllCaCR+UWpGaU9fIT8zVFNEW3pKaVg1JU9PMGxscW04UypLMVh3aiUsRWA4IkBpbk0/''@;'; put 'put ''bDBUXSwpMVFGdE9sOVU9QCFjP3JubHdYIj5uTzpudCojLFlgL0Vsdjl8eFVxdShmSzdSPWBwO1Z5dk1OOHs0cV45RDNyXk0rZyhiakpneCI1bGc9QF1YR1BtbTUiWUIjeFBlaDlzdUlJSl8wW3lNYCNrTihAN3k6eXohR2x2Xn1CNEdwRCk4RChfUCJMZFRPODNzJjZUQjIlQWVGN1tkWVJDO2pu''@;'; put 'put ''bHJQQTF5UC4rYlpvRSJAY242SUtqayFGd0FYeFpndmVZKkUoKCZ0XnNVLzZPXyQhcUwzTG8kZk8uaGlyKnEkPFVmRChjNURLQG9lMlFZND1gV1pJKGxiW1JpayspcUZTOnRWLFhNQCthcnZOYHxmRllkXzhjcFR2RFMyanphYm8vQ1FCR1txZUs8Z2ZpaiM/W3gpM056NkkqUGhod0dRdXY0UkYo''@;'; put 'put ''PXZ9XXtvNyVlV2NDP0Ila11NeTNwTmJtdVA1Ym0zd1s+OW5WS2kqfTgheUI0Mzw+SFFAKH5tfmF6U2xeQn12Y3klMktVJHtCVDpgeS53NmptQHM8SD1yTmlwdUZgIUlzMFtqRCYuNkhmUT5zfkw/bCg9ZkFQY08xfTdSS0FJOT5FVDdmdmxTYVVncFZpZElrTExkV2grJVpPS3xSZ2E7az0+eXtt''@;'; put 'put ''UUcmNEp5R0hbbFN4OGRTIUspZio3Xn52eGZzYUYySGNgdnk6MTBHSmBSeHJ2Vzc2fDB9RkRibXdjPUpvMzleMWU4OHtfOldbcys2MSQ3YGslODBjaFZlO1I8dCo2Z0JNUD1KfjA6RSExbkhnaTplOT1TfEt3fSw2fDFfNzQ6VDIuQVhhciVRcXA4ZVdbeD1sTX0ySHM/cnVKJGEsMDZjI0JhZnQ6''@;'; put 'put ''WDdDNnhFKE0pNEdTfFFYe0dSMWp9e3o0YXJ9dzZIQ2hxUENCPFg2Y09NXyFYTTdJUWUuSSNHIUNYa3BxRi42O2AmfDVZTk9fVkU+Y25oOSg6aUBrL3xQUkssYnpWeyxJJk1hZyxZNGhbYE1FLjxOZU0lTEZIJWtmeytlUHpsZzgmcmsxfklhWGJyMUZLcE02bzc6OFdmKWcyMCtEdmBWMTlYa05e''@;'; put 'put ''NG18dDtDYSNBdTJwbUJXTnw0JDRjInJldWZWJUp7SUZ5LHtZVl5CPE12Y2ZsZVpKVHZHTS53RFA3Oj5CMTd5NSZLTlJOPl43P3ckfUpYOUI4Z0c1OTxZVWxNUGZRUHRvIkklPTw9OzRTakxvd35jW2k8aDZnYSVRRl86QXddbkdCXntnJmJAWzBXe3cySShpVis4b0ZfUFtoPW8jVW4oVEpHLGxl''@;'; put 'put ''Ik5sPmpMcUdgVyxrdTBlb0csaVZjWyVKbTwxSGRYZ0Z4aUF0WyNUM10reUlkYV5ib0tDSmJMYipVSl45ey9hUX04VV8vN1BtY1VjK1M0b08hUnRTbldVfFc2T1lrLEtjaWY0c19rWlJdeklnLGI5OVpzMm5UUyh6enB7Zk5NIUJDOyJ8YDE5d0VQcFlLTUZ9RWNuPzpgZkJaQGptPUZiKmcpeTN9''@;'; put 'put ''KXs9d1c1TXJmUERMZCtjYEd4aXk7b08ia2pgczZlaD5OWTFvSUJTdDYpVytSIV9TfW50dGhUNEZ9fHNoLy5kdno2Y3MyV201VG51PDM5TXVeenVgfDd8UE5bP358VFhNYzEpKWMlNEZqSXMrP1szMmpwRkVFMXE8Q3M2RnREZTlrQ2BNfEJ+cCVuaWY4MHZeSTwzbnNnNl9SQGNOVy9ZJFM3cktW''@;'; put 'put ''e3MoLzJCPU9+QCRCSzMvTW5nfHpSaTY9XmlWfTxvYT9sPSMleFJpTF8vcXloMGpWdE0zYEQjJCZSJmMkWjJ0UWhhT0VXX2pZdXRYfEtqTiZ5Z01tIXc+IUhDPilFLEZJZTw2KGJ7X1hpdndaPT9reVc7ejhONE86bTR7YXBbSTdoX1h1Ny5PUzRAOGllOFMuXiw/NisySF1EOUcidWdQSDNTalQ3''@;'; put 'put ''KXFtPGg+Z1M+MHQoSUpYNDRJRTZiWTQlR15gMX5EMDg7Py4sUUEmeXFmRTEzW2huJmhicGl8R3A6SytGSCslblZkYmxYT2ppYTxyRzYmcjglTnlBWjFqOFI+KUl9JGB+OW5vNCEzTWBvWzVDfVc0bCRsXXo2NWs/aj97OSRsI3d7ZHVMKE1COHAiVjJwZVptKXRFI0ZCMms3ZUp3MXs/e3RPeG9Y''@;'; put 'put ''cktYPltxKXE2Kj1qVmIiWEB6Ji9jSXcrOnc9K2dfJUcqXWRzLDBKYy95RiUpOjNmNXE/fUxWb243UFd0a2hDU2lIYFVPelQ/clB2QWl4R0lzYjxYamRxOGolU3g6fDF3K1B3PXx3TE8kLHJHISEkZGtEZm0rIVRleVsuJF5IPXR2YSFXdGU5NHYkXT5WZzlvKEZfKiI/R05Ge2BILjNfVHJScXJx''@;'; put 'put ''TmtxZVRZW2g9MXNLWXB3MD85TX1UZEVQT2J9O2smIVhOekkpW3YpPXwpXm4wYHJlJjEmQjw2Q1I0MkJaaUF2N2Bke3JNJn1wdnIkLldoZktWaWRMOXxxUFlqWHZSU2xUbitWTz1saUoqKWw1RGZ1LFI9bFh8cjksX15OQEZ3TUNjVjxeL2NyX1dSKyJIeG9IYyZNbypVOSp3OVBdUShYaEUjez08''@;'; put 'put ''fm1oeitOZCRzUX1AKkJaVT1WdE5bcXlnMGZIIXZFPVMpWUMqeVp1WGpSRV51R1EuaG4xbmVQbjI7JkMyUD1YU2BpeXs6P0R8Kit+QShOMEU1cWdjW19mO0Qze08vaD15N1p2RUQiNXY9PzQ7SGhlbCpXUWlOdClhbVZYSUZWZ09zLkhOZyE4WlczTXRMczd8ITEqQVM6PEksfEwqMX5TS2dIZk1Z''@;'; put 'put ''c3UmcXRQKXZFXnlkaD48JChNamttQ3ZlJjRtYH0sdDE3Unh8dl81d0k+VW1fS2lHJj12MDNZLG1WO2diOFBxU1thSSZKfnAvXzpgbk9tSSpuN0EoOk9gKm4wbyxaVWApVCtZJUJmI15iY1V7QTZELC9TWE4jZzwzUSxWentBJSFJRG42aDJ7MmlCPmRGNFg8WUd8RFV3TE9hT1hBVCxiSEN0cVZg''@;'; put 'put ''aUptdHs9QWlpJE9xTzNaeF1mWnBFbztZJEgxTkMhLCR5VTBvUUteJF9FQ141JkdqOStzVTUjYTFdP0VEVkNuSnppL0orST1AN0RUTDVgSzA2ZXZJNm5LPWJJYlJxS19kb3d9YWQlX2k2PE1DbFdqdW91d1UkV3FdWixJPTxKfjhie2tfcD1oa1o1Tng1OUZVeWoicz1uX1NBeEBUJWF3VS9rQ3Vj''@;'; put 'put ''TXRzbVRIWzFGUXpNfSp7QFldVj1KL1AxTSYmPXpkIVRGcFVnayFUdWkrOylsM0JBU2RwMyV5azAzUmNMOVpdNStoTkQ8bHxTSXpaPT1EIjg1KyhVUGNYSXV3d25DMW9ZKGFCWnw3YF5YWDBuMnIwYUNKdFpzUzhwLl5+T1F4KH06czxXIjF3ZFo9fGhrTHRxLnklbk9dRkJATmJfa1RWJiR6NWBC''@;'; put 'put ''diVnbmVENDJHYWxvST8mIWRzXX4yWHNubkxWclkjcT9qLlRDTmchPDp0OF8/I3BeQ2w2bE1CZ30zRHNnUncoQCN8NGdDfDFrYD12ODIuS19XaWJfO1Z5X1lTKmplZjozUDJMK1VyT2xZbX5NOXh0WTBeQkNlYlRhclQzMFFhOi9uMD9wZkNzWXZvdlRDUltkLzY5VW4pVSsuXlssYV8/TzI6MTNS''@;'; put 'put ''QUpbQDkyTXMwLHskX18uS0hwIUc0S199aEd7U2dsI0ZtQ2o6RFpmPjhNTmZfOXBSbkFRP2lOfV50WjA2S3o5NX5MZUMoakU4LipidW5uKU4qOHFJOnx5TlhTdUBmSmZsczM+Y2pKND5Wb0JaUXt7b2UwZkFQNnM4Mi5PMUR2UzdMI0xPVjsudzBASjhMcjwsLl4rPGUxXiFQT3FhPEE1YGpKcHEz''@;'; put 'put ''Z2JbWlJHeEpILzdDe246TXZ3NU5uKXMobEVYQ1l8Nmd6Uz9OLE1aZXluYWZyaFRrLD9WOmBaQC4wQFtvdTx0Lk0xK2FLdX43PjZoYU42NiVaZTpOZk42fGc+fTl1QE5kMUU1SVtRV0d3VHhia2o6YEhtd007OD96ckcsfix2KGZsWjsoPV1sSmQsUD9hTEJ7NFUvO3cvOy9dcnAiclZgQEJ4NDYz''@;'; put 'put ''YzdQKjtbKVFQT08hW1FGT2NLPFdJeys3JXdQUDd2by9PancoWix2VmxRRV0oPFIkJnJyKDs8YEYqX2ZpdkM4S0k+VCFzMXZIdl9yJGxvRVJBXVVyb0cpOjEocUgyejJOcT1eYVsscDRWaHJdMSMlRDZCPzZGInFfeU03MHs8UEAueHAvOV5PX0M/W2JvSGxLdGZ7ZkxKZClmdn5uQEcoe3NpQ0dM''@;'; put 'put ''RVZEQSJwNm43RCsyN2k7RHxjKD9tMTk9fkAkbyZlfjZgOTVdRU4jTzRiPnJZdiJgUVZadCFRYHZ6ZWVNTU9NIXBmQHE2KChKcUtGRTQrLGF2bnh0YV0mTEB2QSpMcyY5M1coRC55bXp3YTM7e3hvRkhCV0hiYCo1aV9NW0Z4XlV8a0xESDwrKilCfX52RzJWdjhKIztEJkppSCNOPFQuZi82Zmg/''@;'; put 'put ''YDpUZCo6LjQzJjVleTM0OEV4dUVxaF1mMVJRSE00N0V6bjE6UXJVbDMyYHokQUcmWGpMYyUjemxmbUAoTDxNYDRwTWAzYEQxZTxgb19mWyM9YT1CSEQkSVZgUy8vZGUuQl47LypANjdybkAvQVdIS19ROFRDYkVrdm1tbDNGMlEmVHFvVilTKlF2JCllMDgwUyM+O2RFeSJneERtZ2JhfHhtNzc/''@;'; put 'put ''L1pTK0ZdfCE3RCRzYFt9UHdzb2FhT3QhQUVFSkddN3M4UmxYcDg7NV5teU8zLlQ+dzwkfTYhRlkxQyRMJDMvdz1QdmswOGJrLG93WixHbFpwdHw3dzJPPCp1WSw+fUZfciYkZktUMClqTFthbzBWRVtWMUc0TH1gTU12bFd8M3REZE5IQTV8a3FLKE0zU2lCfkYuTDx6NDtPOmJROXZ5Ty9ibSkl''@;'; put 'put ''bEQhL3oxbnBIcyNgZEw/dilZcVt+RVZYOlIrMjV2LmBNXTB5Mnk4SWs8NW5TLHxuZGh4Sj1WbCx3RjlzajpfPWwrPUN4T1JfbFBGUVNxaG07eVgxeGBZWHpdakcjeTFXLEk1dWIoI2NCUChQakxZPEUmZV9+LlhXZDZOJGZDeCFjZit7XytRUCpPYmxWZyF0Yz0jYS9YITl4T2FhTmVhSE5WViV5''@;'; put 'put ''N3RDTDhkQnBxK2xGcSU8MzI5eGA+N0U6NUY5bU9wNmJmSn1jZGIhcGx4Kk1heDZaSXF9Ol12RnhVRiR3N0B9TVZTRmNIITBkNnNAKmM2eSkxW3AxLkE+S3B4IihJMkU9fTlfKnxuczVRakwpfjE+fip1WkpAJF57QW4pTClZX2Q+K3JVM3JTeXt2NS8kV1ApYH5IOGVsT3VHYmU+ayU5JltTJVda''@;'; put 'put ''WmUoWSohVT54OHNgV3hJZylMcmZleDRaKF82QVVrRDNCd3BrUE9VWy4xc0xrcitfWHpwOmpYcjhPX1M2TVlqbmlQSVQkWGRZREo0NFtIWUQxcUx5SWl9PF0vUzdjUVBFNDhqO2AxMzohKCJhelMqdyZKVUMuNXhiKDxlfjd8bWZRWz1bLz5jeT0/ZnVXWkVEPWN2UysuSFdgd11jJSE3Vld5eUcu''@;'; put 'put ''TkoiR0Y6Yz44UWkiSTZMblssdj5jbXF4KkVNemw0U0JwRGpFSFI7YnFRMD4wdUZlRTMyRkAhS1d4M1tKdlBnc1d6JiQ2czdWU1gsOihZVWE9d04jRCJ9LEBhMlo7PFA1T3peXz9sRygkeGJCLyVDXWlOcCZFdy9+RV9sIlFTflBHXygrdjZBPzh2YUF4Uj9uTDp2K1VNaFVnNGdTKH58UWV3NWQi''@;'; put 'put ''VWdCZWE3e0J3e0FxcWlHOEhsXkMicDxFNmFNbWslRHRJN1gpdEp0I0I6S354XkZla29kVjImOkZLWnsoN3wyMyVyc2ZlWkQiZVIiVUp+ODpGQFYvb0w8cTQydCQrM0lTPWg9Nl4kRUA6VV1DbER1diY8Q0JTMDdyUHI2XmBxSmA4LGZHVD8lKV9XeGZ7Ikk9V0xean44b2lAYnF9el5Gc0g3bj9a''@;'; put 'put ''TXkmOHVTJCRVNnRjYEhfMHFMR3pjTGh3MTw8UzNyXmJ4eHhhWWdSb3pTbWZ9Zzc1O2lzRS5wa3g4ME50X0d6IWhnKU1fI0Juc25yWWRIbS51ZGo0cE5oNHZIRjlTN2YsSj5EMlo/X0pMOkQ0PzNeP0VeUENNazl7QlgiKG0jXzkyKl1eRSRXcDU3T1IzZUAzMyEkIzArflpVP1cmTzFMazc9VTIr''@;'; put 'put ''O1dJLE1jb0c9XUlGUHEkWUJTbF01PWl8VEIzJU1XNyJGSmh+OloxLG8ia2NrMEwxW2lsejh2bjFmczFxekhYWjVWWTBbSzUmWmkyPzx7e1NpNnJtIk9kcUV1QzkhRy53SmVxMTBBQjw1Kkg5ZCNCLzwjUSFYNlduIXYpOzwoX3g5eCNfV1tLO3VJYjsyWGxPQ0g5NU1nc1M0Y3YlUFkpY3RWajk3''@;'; put 'put ''L3lWJnRKLDpvbiJMbTwldUI0NlMwRVBkRyxrNFAyazBaNTQrKjFiVms1VkNFei8lNT1fenE6NHVMPDQ0R3EzdGZTbFtJTWZUaS4+aiw+c1RaYTdIN2pycFRQdH06WjpvaHhARDtNNjJOOzQ/KF8qSWkkUHlqVEJ3Pjk/WCVtUlQxYDBuIkxMd3JmKT9nd0hNTTMybGtNbDIqNyN+XXlnOVFeSmBg''@;'; put 'put ''fnAxM3Jlb3A2UkZ6YFd7I15Yb35eTXdnWUN2Jl5pWXg+SCh4dlNbaW9+JUUjfD8/bHFpOltrPWgkU2YqWHo2Vj9tPVZ6fjJjSUspdSUldkw1OT46dVNFIy5BXThBMCE8K3EuN0V2MyRQNjhAOURYNXB6b14jdX5JPnhhL3I2S083USJifXJwMy91X3BVZDBTVztYd1dBV1heSVJ1V24wWzZ5NjFw''@;'; put 'put ''ZEx3XX5Ccn13Ol9JT0AiTyxDUFVLXSMhcFVhdEJJOURxPWU4djRGQnpnMUB1UTlgL1dqRTIrVUB3STVXUUV0RG42P049aGh5bk9CTCpbajoxJUpRQmxsdzZIaGElJFNmQEQuJjFINkZ8QWQxOz0kNU5QUDVFMGZuTmJffklqNXVeK1RaNG5HX1c8SWRQd1NaNjRrInZFbEV7eTZnbyFrPVlyTnQw''@;'; put 'put ''TCR0ckVrfj9Cd1M/bFBOVEpkcU52YmlCOV5HeXgjRl53fX5ufCxhVERrfCgkM3R6K3cyMnslfkJIdkZ6bzA/XU15JkRAU2NrU0l3S197ZWkjOFRlYnlWMXgmWlBUKjVwKkJqcEdQIXw3JER6e11rNkRTaV1AZD1yOGA1PnBEeW5YWT5YWDlSaUo/YFQkTWxXfjF3SG1BKyQ4fEZhKml0TkJ7PmEx''@;'; put 'put ''ZEZFYVhrOjBDJl9Xd3UkTThCSCNkYFRXMEJNV1Fmdk8/UHVfZUhlOTtxdl5QI3x9MzpiO1g4STpOc0RycHh0NmVOO29zdHhaX2hOKCwwTXs4PmpjdmZDYzVAZnskUUEwRmlnVWUzWmRgTlU9XkF7Q1Y1XTJgeDd6d1o9WzBNMl1nMVZNVmx4YDd8TjlhdnBGYn5pUy9CQmg8OT1RaGA9N35ebn4l''@;'; put 'put ''Nld6TDlyQyJfOTx9XnZhW29NWlFeQ19mV2lRX3xdJChmXUNoVl8oSzhHeGdiWHx8IzhLRSUvZn0rVFNkOyg/REFFVDl5cSZUIyNGLzJfN1UrYX0zbi5oMD09IiFRIkUqQikyTnFtbCVRaUNJdUhEUFYySW1qXnh5OH09ZSpXZ3ExOVcuPj8qSyNPQDAvMClDXjNLbj9gcndpfmpIUVBARUlpe3N7''@;'; put 'put ''MyU+bjZ8eUIoSk9SYX5qUEtpM3ZhX0FSJExpVSxbXXt6XltrK0hgeEtXVUw/MXBbPElLdDd+QjFbNTcwJlZ6VEQpfncodTdQJk97aFBRTG82fUklYSVAZmx4JG0zelFDIUxPeERCdHdnRH4zO2wvT0AuNDI9a0tnVlk5dkt8QlRfNDtOZG9yZjpxKTorPTZ6LHs/Y0dNWip6S3UxLi4yRCNzdjl2''@;'; put 'put ''UypaKXFqa1twJkd2fkBzIUZ2fmVNRkg/cTdmPHxQWXNaKjRGOn59ZCEmcl9EOX5oUnw0aG5VQCxUNiJvPiQzSnJ+RndVL08haSkwMCsyc1NnWHBheT9rVl0qNV1zTT9EKER4NWdeXk0qZ3BgOHdMKkY3elFVJlg0fHxAMGBrdDhvKkpFQGMpLzU0V3oxQVFwKCtZYkVFY2VPY2smdko8cXxONSso''@;'; put 'put ''bVArdjgqVSpoJj5dSCVTbEpKV3laOCN2L1pfRllseG45aCZyJXx9dSY8ckZzQnMqPUtSLnJ4VVU0d1YwXXRQcmFAVSN5MnRsR0tCMnhyKjBgb2kvMWxuQFRDU3t7aCV3JVpGey9ISURsYVozN3o0SXckSC5zdGBgbDw5MEViSWIyciQzRGdJdFhkQUZCdWRvPSM1e0U/Rkk/cGdwNilvU0JqNXtT''@;'; put 'put ''Y04lbi9gMihyNEI0W1lhRnArR35lOkEyXWw4Pi9KYGJmR3pqRng4aSkleWZVVGglO3N8MnllJXFwPShkazB9I0oxeHY8M3g3RyVrSlklJVdzcEk1TkJUcURNQWA7Mj8zc1dpI3NUay9uLHY7WT5nLHppQ1o6KVRDRUQ6ZEg9TldlSzBwd149dX1yMTdzVzEoMUJ4WEVpLjx3ImI2NktDfkxFKixh''@;'; put 'put ''MkRzY2UxTDNBJHkvIm9XLmUkW1ZhRWduYTQjO0tkImN3bVdwSkVpVTJLMkZwTCZ4cFNOQTNWNWVlQn4+RkteUyIuMmY1KVZuaVsrfSopTi9pb21AaXhNfnhOODpCSWZARX45OXcyVDM5bWhfRUlSS3ovMz10eHZ5cFJALGY0eUpQLyYhb0tBeHRbbH19cXViZkRDSFFAQyFvaXtgeko8el1mNFRd''@;'; put 'put ''KjVrYEJDQHRTfjt8fSx2NlIuJWh0VS81UE5MVTljVn0uaW4ua343KkJedz5lSzp2Rl13amtuRiw/Sz44Ol1OVWVtfDJBSz0+ZjNjTi8yIm9kbEFofFFbbXVnOll2a2swZGguSXtbSWJAMGtAUVZ6Z3V1V3wibV8pL1twJkMwRnk+US9TPjdLY2hefExoKjI5RiNkTF9EbXc/WkJXLkBVKlV+MWZd''@;'; put 'put ''V25VeUNZanpNWHZaOlNZW2ZFLDByU1F3bHZqQ0B5VShwI3JwMTBIP3B0Smtab3poakQoKjdvezNYaTllU0lHKW11IzM0R31od35RM2wwPXUxZ15LaEFXMiowL0Z3VHBNPEBtNGR8XWRWIj5JPHF6VTxrNXx2bVRWey4lYHt4c1dbPXxISCE/KT5QaT4lX21gPnozfUx7YkkzZytRIWBtdWkrMHMs''@;'; put 'put ''N1hDYHpXXmEjQVlDRih3LCwmYGJAVCtsLi9tJlQ6XWReIntOeXZFIWRzMkhTbzomdyZnJTMuamZ8SitZW3JCLFVtMEN3dE1xKC9PblE+V0lrPkdfYyw2ZGo0MEM4NmwmOmdjJlVIdUBBZTBqL0FieVhFYWBSSi5lPHxZIXh2QnR7R11hN2EvIjNqQy96fEhtJipJeD1xJWdzR0w6P1drdlJacmYv''@;'; put 'put ''VkNFOjJoKCxva2ZlcEN7X1RfZko/TmchdkdMZyUqK1JhOEMlZUdHOkB5Q0Ysa0QwaFZdamhqOXhJRX5RUnBWemErZkxxSjI/Q1I1K1dGVE5CLCtlcDBNdixxL1lWbShUW1RxeU57JTB4XjB7NFcoYFU5VDdtKmVpQTZyM1Quez9OLHNDRnVpMmUsdl0oRlouWEJGK1Z6dmEya3BhOHxqYDtTRE4v''@;'; put 'put ''bVF+JCZgbCt3cy5QfntfcTJuIzM6cjswNkNMT1VSMDIoYzd9fVpeY1BJJiMkMHMmfjskeTIpV3VxSTxFLEl0TXBPan0/a04wVzlXbEorUm5ZdXtbZWcpRWFsejJYVlBTR1RAPy5vTEQsNyRCZG4/LE4qImU1YEV3I0A2eF5PRD5pQ3RiaVQpSUo3QGAyZi5ebjtzWU9fbzYsQTw9bzpZNz9kcS42''@;'; put 'put ''dENRcyIqamZjOmVgLzg5OUlkfjJVTkNscmIuTFAodXEuazFSQUJwdEY3ITRCSVhBSFVPbSQ6KzFicTRHYihzQmNaTSh8bzI8JnE1ISI/LDBhbD1VR2tHSHA+JWp3TV9ZcCg7cUVpT3NwJSJNY0pjMXo+O0UxS30lJn1IcyR3YnlFQkkiWzoxRS49TitrVncvRzo/fGltZyZaYVpRRSI1TEE9Tj5Z''@;'; put 'put ''RH18WShUU0U1a014STlHK2VuYWoxJX1ySHNCQl1HQjsoTkkzRiRoPkkoayZ8OzljYUtUI3xBazdsVjJ1c1VrJGxKS0JQMWR+SmR0LGxldSkyeCg4fElhW0pnVTJjIThycXNbI0oxTFdSKntFTWhHeXpIXnZfdnI4Pi5FLkFzIkUuJlohZUpNeHFgeVFFKVYmMTlqUVJuX24jJUsodX1JMFgybEU+''@;'; put 'put ''X2AqdlVXWXthQnEwIztdbkgrKy4xa11fekJZLCo7YXIrQD9vZFg2ck5NZ35VbnZrK2AzSGc7MzldI0Ria1VNREUyQ2J6b3hgOHciUilWUXFQeWwucE9kdTVpQGkoQWpTKCZHa2s9clNmIVV9JUk3JkddXyJnZ0d9L35TQXt2S3lTX0JoNi5ZcipxQDUjNDJ5TWR8YUQweXpkKmh0ciswZ2g2PCor''@;'; put 'put ''LmpFQXxYJEBfa0Z0UHNbNzlJSSIxa2xpKztQJSpGcUQibG4pLkooQkR7Q25DLF4vYCN2NiYjV09UJX44KXVZYUYkcmdEUVFRdHdgKT9eV1U4T0o0aFI5KiIqQSNsV0J9Q3BQam5ENmRfVThBZkdkUCsrOEdJJVpZR0Y7Xm8iR3ZONllYRUx1SDZTdmx1dU9gVm9eIXNudUcqdSY5UDVmayR1YmNo''@;'; put 'put ''Kl0wWX5jeDx+VmszY2c6UilbOjcxJT5sOltuNztvSS5ZWV56cHZ6TEhKanx6OVssT2UufEF7cGNuJmNxcURZMCVqb3hWS35mW2tML3E0QH01OSwsQjRISn5kRjhXTGRoZElaX1JpUi5hS35OPiw5KzEhek5IM3Uha156RCI0MDZVKW5HbnJLZHRlZ2s2U20uJS9FYz8pbTE8VDFxKnN7REBAYkpH''@;'; put 'put ''XUMxQSMraU0rJj12VyY6czhxS0w4Ymg7N1ZaWGFjRXFsT0B5eCN0endWb3h3YDlgMEtVNjpCMW4vZ017byp9cT4hRD9CVXlbeXlLUEhsIW88ejkwc1pbXlQifnlzR2RVR3B+PTZyLEAlN2ZGLzkkeVV5cWE2ViF8QyxYfGhsPXlue29UWCE3YD4+S3NFVnVveisqUDIvQCF3IU9SaDpdS2V8bkRM''@;'; put 'put ''N2o3IWJTdi5iTC5eenhSOzZmdUwzM20rSlshU3VAUG8lQXlyPnh2b3NMLz1jbjojJj1FWW84cyRgLEYoc0wyJEc0ISIvTDxNUU0uYmUyL1hKN018ZGNAV3R4fWZRQTx9Iy5Weyg8Ulh3OFMiM3xhS3ExUnVScWh9ISlzSUxuSkxoVG1mUS95OWRpQEdTLnJyciJeZnk8cGZpSHlyKTshfXUmLDlQ''@;'; put 'put ''eS9LfS9QVXtQbiVDIi5KKFc4cCUma300WDpbUT5lfl96YC4iZVUyYSs1QHMsRUYwZFosKj54b3VfKS8ra3B7JnA8ODBCNz90cUtHTVNSeGp4LmxxMX15UD51OS8kPjohdihTXm4uNHl6LkI+RkFRRHIkbiReQCpyZ1p+UzglMEtuO3smcmlaby5BUjV5alY/fExJNkgpYV9bYGwkKXNTWGkvRjI0''@;'; put 'put ''KTBaUktMSzFFKHdWPXglNFpUOGYpXyx8b0l3TFVXVzQvc0BiZikwWS4qRkt7fWtxUyIwaTB5fU9lJnJkKXVDMlZPQ2hfaG5pJnQ+Sl0mITlmdywwXVc+K2s9eT5FWCViNHpTSlM2Ml9vfX4ySz4oaT1rS0ZiQzc3NFRUSCNiOXg3RDh9cnh5Zi8lRSFtP3wsOnUxKzh9ekJwLkx3VU4xYnFhbV0+''@;'; put 'put ''PFNVaTRbVGIpa3N1MDY4PyhKWTMqPnd+b1o0OiZXOTtCNi53ZDh2b3ltLjtRVjElZVRpdEM6dnAvNEEkWXFWRlR2JXlIMSYiQ05vKSIuJi5tWXlXXUUlVllyel9lN2puOkhHKV1nMXtpZW9JeVl8bWdMR2hnb19qbnY2W35OTlRVS11fOCN7ZnY1PzwuWSE0bH4qZW1Td201VF97ZkZCNithMWJN''@;'; put 'put ''LiNaOHR6YHxqd3JwV3wxMTxkP1ZQSzdRSnNLJFA1VlZDczRmfXZPaHxsZH5WeT1OM21CfH0pdFhIS3Jge2FOcjBdKipqSV16Skgpa3VgNkw1SHE3ckxQbXB3NzxIblZJeWFrWjNrfmsmIlRidHI8MEx1RVhgeHhrQnRvaywyKHFQI31IP1ZrVEIkLng7QngzKysxSG9TKyt8cD4mWko5REhJSnJB''@;'; put 'put ''dEU1SyRxS0E8XmVjLjIvRDIieDY7OX0sY01qUWxGM3MxbXhVSDx5azltbEJVcD9WNGwmeCZCNUEmLm18TXpINldqPy58KjlpWypRIzc3UFhpQjMyai5dcXE2czhbdWF0KDdbRWZhLyU+JTsyTD1BVUJuLHwqN35IOTR5V0xuVzhDPFAiTCRdbzNJSF9ZL2cxQldPUThARmFTfnU2ZkVlbHcjME43''@;'; put 'put ''O2BlUCNlS1h9bDxwT1hnLHVtaSYodEJsMHIhVF53TEVDUTsxPHxIaStCJXZvfV9RfmU5Q2o3R11BTlB2QmclWztCPldzT1VNL0pHdnplfUN7KnF2bmJ+OENvP1F2cTdCeG89W1lsO29IZl5sc2gsND9+emNhXzUmIVAxeShoYSkoVypFME48fl8pfTFNUmVKLDEiK2t4X2Z1fmcsLkZDYUhXS2gi''@;'; put 'put ''e0NRLHQxTDBsXk9fV0ZGQnk7a3R5aFVrYz1YPS8+RkVydWguPDtFITpqJUF6KH4rVDBmfH4lflFjVFgvPmlUPDJ7LDwoV0guNGlXIUdwPnFUI31BYkQlezNaXWlIXzsrck4zNj5gQHRWdnMwdjlPcC9jRWh5YFk5Q01wdS98RWhFc2EseHJ4anFtZFdQSkwjWSJPbzw7T0o8YXt+cSRxNTJCX1tp''@;'; put 'put ''O3VwcTFkKkxgY20hcDJHbkN2dy9tJk5SNkwoMUlxfG9ufmlmSnxxbk0hRm87MyJPLiJSPURmdSJbSiJ9N1U9YCNmOmhAKVNFc11OcTtvL3BeNjhiJTpDRSpdRUJ5am4jPnwqekRZJT5mLmdZQVRYajIrfTBjaigxVn16NDd1Ql4+IWdPXUxpfU4rbSw8MzIvejUqQmYjfTJXP18zWmE5JTsuOyZj''@;'; put 'put ''eEBiIUp3WDZaKTIzM2l0eip4PCRMIyJOPWUvQy4sdzBpTzZ0bUVrWUA5aG5TKUNZPFd4IVE5SlBFcEwzT2lxRz1XS3FmVHRReD0lKXpIb2MrLjVLTiFwc05aS0F4eXJ2MVVHSlVZNEFwdSg0Qz5ZaDZaUHYsU2B3RShzTTIxPE0rIVQmc0JRV2ZNTGZJP0FsJld8JWxbIzh1OkdWWDJ7SDFFVk1a''@;'; put 'put ''T1dCXmt8UT4/W3QmXW9kWWdlUCNlYUxDLndKbExiMk8kSVQjX28vISN8YVEuaCJ0ZjJgbk0/UTMoUHlgJmhBcyRxSGNdVj5nY1VaSV9KbDd9Tz8pZnY1KUxKdXdJPDcpPzNVSyU8dCZYSDdoNFpEfjhbNlJtMUQzQUx2PnBWRkFMUkNyQmdPPlR2aTNKJUQ1TGtDNStQNnckRT1OQjQ8dShrT2tD''@;'; put 'put ''Wk1vNEslRiJ5N0NTOHtjbDY6Kj9NRz1haW5qWjBuUWo7NlFoeTA7NFZwITtZM04pVjMrdngsTENNVGx+cnlnej1iYEZ2aE0ie3NoeyZMLDk5JjtzJUxqJmYmcHBHZysmJVVELnIjMXt6ZjI7YyZ8QVJsZTQrUzc9dmM8Q2NmaUpZQ2YzVl1COTVRPEVVUFosKlVhb0xDKC8lVCFwT3EsSlpsMi9a''@;'; put 'put ''ci5aLikhfTYkTV5ARjhHMUBpMTJ1UyhMKGdBYyhMclZ0UzdTc0JkM3ElcFFlel9APXw/eGBNbjJgMUgzPS5jd1ZAKC5KOEwsOVVYMHtgej5kemFxYzl7ajFxRyE9SEQwLl5DX0dkYjV9L21ULCUoVS4ldE8vL1cyOnVBNDc2Tio8LCs5QTZsPDg1ayVzPEosOyNSemZpKjAuRDtbUSVBNnRfWEBZ''@;'; put 'put ''SzF2bmZFYSlkempVI2osQ2EpZHhmcFBHXjR1d0lZMjZlNiZxQHpIU1JlSTh6OWwrKSZAbSFRJXp2cSw0SC4/K21bTGJAd3BGTTxGRWw+MGFlNmNnLCxIJiV9TW1KPnI2WUlmOz9ZIVlNQG0hbEF9Nm1bNFRiX1ZGU3chKzh2WF5mV1pRLndjSmpdQ3c4aSFSUmtveGdNR3NnTjEoQGkhWU19JD9i''@;'; put 'put ''WURLM2RZJE9pdEcheEcoPSlUTkN+dFN6bGY5cW9afHdGTllpW2h8SytOWkUpQHNWR05BfXkufFsjcTcoU1VhIk5WTUN8dEJ1KjR4VVdyOnBgIiwxSjcqVVRZJWwhWj5ScmxvVVEmYkYkTFgyXyIkOm1deV5bTW1KdVp7NWg0MDFwb11jVHRHeG1NI3hJSHswbyokS3pZdGUkdWs3XUY8alJtUG1r''@;'; put 'put ''KiF9MX1XKWQpfEtQS0B5XU1wSVZYMWZLY2hTV3I8ZV4xfmVkQikwOEdNdDJSVEQ/TWIyYkVEYjBTQnU9ZzRALiN3cH5Mak57QndwM1JDJCIoQGdiLjxNIVZDXjNCOVcpSHFrPVkhJj4kO2FqdCIxaGAjcnh6Z1IjKDxjY2lZKk5vWkV3WW1nNFhnT3dtZjQzRkxYOytacjlALGoiSmkxQipIUV5V''@;'; put 'put ''VjFpLjxRPFF1fXAzQllnbH0iayJGUmVaX1hPIUJAInJEL3ZJPTY6TGllYGcwTlVRTCxRajlAVk5yYC52Szx4WHxUO0AmVlZdZT9eakpmc3J9UjNLMjBTT3JZSGYran1GJWYlRiRgXmlJWDd1QmlzfVYzcVohOH1EZkNBTSYqIjslS2w/PWkkKkBgQXk6InBJeSJBRFczcDhuZUpHRzBUYlJPNCsx''@;'; put 'put ''IytHeTJpZks7UjE+RFUvZFlnVkVTfXBALGVhTSg4JkxuKGlKZFImN1ZMbik/OmZxVn5uVVl6cHoxdDx2fD5rcy9eaygwT0w+P2YkeVZ6IUJlUz5JOnN5SEpBWTdfJT1rMkBQaVA+bjM9JThALm4kLHxEa3lbQlAyWz9NVSlBNj1fWzIrSEBzZnpPZExgTEMzTE1haVU1OUZLUjF+cTVCN0x9fT9N''@;'; put 'put ''MTVKYXFNbl1XRF5bYjZ4SW11ZU8zWlRpdnMpd1tZWmhMWz9zPEBbbGdCZXxbPj12RDVEPl56YFQ6Q1IvflcsV1guU1UjOSZkVWFwOT5INGppeF4kZ3AzSChZP3xlW3Rmal5YMWc7LCNaXjlWeGIlYiNOJW0rMnA5bmA9RlRoLCUpMiViOyx4aSxRRktqWnJPam1KRFBzXWdXZkslcS4xWz5NJEld''@;'; put 'put ''cTJDTSUiP3FLIyoqaG5VclQ2eE1wU1c3KzBzdX10azxTIVU2RFIjMTFifmpXT2RDS0U0KFZ2MjZzRWJYa0Q8TVc0XjYpUzFeRnZybnlWXVI6Q1UzU0QvVXBKbmN4SjZHUlcsM210JlZQZX1Sdmp8ckAsak5rP2xVc0hTTnpbe1ZzZ3JbWy4sRDlEOlBfU3N4Mzt4L0g6MUtYJH1WfSxnK1suYE1w''@;'; put 'put ''Qk0lSDldOWA6KSklbksoO3lwJiUkYjFePjc/cl87PDJATGYzSXlEJUImIyMrXnFSaSQ/REp5QHhDdS4sMHNONCRKc0UuRnddJnxhbG1TTSE0fHVPQVpkcTgwJi58QGoyS0tJWU0sIXx9UmFuPnZIZU0jaUhkaj9gcTE6aj51LzRXY3BaTClbanZMWkZkbGhlNUJZRzdycEZ2MHZ8bUx1TF81clAp''@;'; put 'put ''M3kvb3g4RCl0ezJTQzpOUzJ7RypjUy99eVtPXVEjdnZ8PCkmS2Q/K2w9T0NlRlgwenpNX0QlKnJJezU/TiFEWmB1VzBFVUVPYzFCQFhJa2RFLHJ1S21PdyhWUmcrPUNWdDU7aUZ9fCw7ZkNmUHoiKEFrQ0tDVXw9TkRWaktMQzwxTis4Qn1MckpfP2FlTXxwd2NOLzBKR213KVdkQH40XWh5akox''@;'; put 'put ''R2NhM3FqTn4lakZKdTRNTlNyUSNAclAzYjE1LD1FKip+fSlvfFhjWHNzP2RCKkVwblU1UUJyQ2Rhd2hLMzYyXjBkJl4ia0YhaSpXb3pERmxFXn5YSiJATFQwWDNGV3MpWWltK2ooUTZOIVdfXTVOIV0kMnp5KU9AbyFnMUFVZSxdP0tpOGNwNH5EM0tLd1gxPGJJe10lRyZhLC5KQFdqSzYpN2o9''@;'; put 'put ''JFgkeT4qI2o4ZlFiZXAmNl48RDhvXS9NP2EwMCUwWiJCaF4lVXEjXXVSeUdXfihPektCMlhnKGZxOGtDQDxifGtoYi5UIT1xQW5ORiZzKnZLUzhCRzZoKWpWUWdYdnBVOjR3e1A6eWEqNUZbKF1ELElER3JoXygzSUAlQVchcGFWPjVxK2JiNzN0ejQ5alFeMjU9L2hCW30xdXtLYmByRyw6eWZy''@;'; put 'put ''XzZUNj87S2pHXjhXd0FUQDowKldWaCguWFEiYFcvJWtMYC5jZzN6L1d6bSNETXVkckRIKkZ9W1pwJVZmMTA6W2ssYkBfc1VCMStNZl1QQS9tWX1AJC4iWEVQPVJKQld4YjpXMnZbNmNOTWFBVipXeVhSZSt7fDkxQSpOR0JzZngkey8lWFIpOXxOKXpWOTBNKkdyOlVAYTIieThMQyMqdFtWNCss''@;'; put 'put ''WjB1d0V4PTMzT29nU31Oak1ifS9OQnsjTjNBKTtNQ3E7QjYpXz5GSUk5X0VNVkNCdVRqPmVBQWNCI2xJdVIwZXFdW2dKS189eFt4Zkx4VFdrMHVbeHZMeFRPWUB5PTl1eHxCek09Yk86ViovUDV7a0VOMk0jfHxZVS8pYGFReEY6OSRzKy8qdntjMSNzWURnN24qaT1FM10/cFpbOjJeQmlseVlK''@;'; put 'put ''X0NMaXZDPXBPPkEmcjx9ZiFYI1tnU0liIWMiSjsoMisxaUptO1FqMyVWdlQiMmw7V3hpIkAoNzVEeTZvRVNueG41Yj98Mi5IcT1vO3xOWHo/fCVSPFNxSnQkOiM3d18yb1BTSkx4WCVUeikrYUMzQixuTGh1KzMrY3dvZ2lJO01yc2N7ekNiRmpKUWBXMlVXITB1R1FQSDJ1T1doa3dEYl5iXUdI''@;'; put 'put ''Mj5PfWJZa2pWTWZ3Li94JSoqUiFISU0hfDtEPEdbL1RqTiQ/WSY3JlNrezMjUmVITXpMYGdSJlc4SEJgOGVPKjgvRHk5QCFrOGBUZE5Bb1ZaKmxFO2x2ck1iMj5yMDFTL25Te2txQCkzMDFPfFBaaHEzeEpCZGZxO3s8Y1tlJldnQzdQNT5ERllORm5bWUhiMWhQfXRRRVF4Mml8VHRmITt8cVQ6''@;'; put 'put ''ZHpzS14xJXdfQzRMcXUqSUdyPUtKaCg9PSQkPFUxVUBGdmMsJmsmfWYhN2tVJlEmNHtxR3wvM3w5aHhTek5yOiVJYiFyIyNJNDcqeCpSRmdoNXlZdF42e3xIPkZyaEEwTF5VfXpePXlNQFhXI2tTekc2T0t9ZVAqPXQ7cmFaNEsmX0EwLmovL1sqWWQrQkxPRiVYR21SIypgSkZ6cWhMMGU/SDFl''@;'; put 'put ''P0FANUlFM2kqPlpjeXcuRFRiJnNQcXdbeGlYSFc7M0xeTTx7WHZOUE5VQkNieiFlREgycE4xJFlqYXB2Z1gySDszSFJZJHV2S1pQdFM6JUN1PDE7MFdCXyZ3cU1ve1EpZnkuS3U8U3V0VWVmZU5aNixXMHpIUkt3OFBQT3dpZC4oUSZtIkd7OXgsQ0s7JWMzN2NQbUpoTEB1fGkjezcjXyV9PCV7''@;'; put 'put ''PEk6WXVaMC9KMj48Z2MpWilQens+NiIsOV5GOVVeNCwuJSYwRmovOiFjI2hfJEg2MzBTeiFiYmlCbGkuXkJJej9VQl8rNEswPHYlditWeEJEfXN8VEkjRjw0KjdVY0xZck4qPGEod0J0cTh8KUdRO0N7QDdCLGtXfkFGaV1FMnhpTypTL1ZmbGJ5QHB+eDZ5WV04RmdBMTNiX0IlJVp7RXJuUXpE''@;'; put 'put ''XmdQTVA1NGw9dU8/Kkw/aHYyPndAKGNKdyU8LnhCOmNtcCNbQ0hlVV8oNUV8aEdjKWc0VXVocn4uREs5UWt1Z3JQK093KjZ+YD1bUikpS2UzXmF2YzZddClIKWFqcGdKZX1MZGh6QXg8OF92fURhbX4zWEJXLHVMKmk6aVk+KUk8ZiFUSVdOW3c8JnE2WTAkXStmZ1l+ckI3IS5EOzopMk1BTzt+''@;'; put 'put ''e1NwdVBMPjtCJmJESCpRNiohfmdKcXVeQUs6RSlsZVB6PHIiMjhCMl4uQz17dTU9b3BNOUE5dFEuPUNaWjlfVllqNzFFXkRRLk5kTGc8Q2xkWDNMSDwzUWNObFU9dVZackdxUVVOUndrai9QPjYpcCNiIjlIbCRuc0ExfSlXZE5LMChafj4hb2RYIVJqO1pFTWJxeWcqV2lHMmpEJGl4L01XZEdS''@;'; put 'put ''X3MxSmZBPX40WCNFfVdjJW05aFM+d3FNOXNiJS48LCE+XixpO34yS0t0b0NHKyFbTzllImN+Yj8mIzBvb0MhTm9WMWpOSlMkTHI7PVsmKGp+W0QvTHxWdVJgZnMpVUpkRTIhPCgpOlBmLjlPSE0qYWlqS2VmVWZURm4wXTpQalphcGxxaWh4cFEjZXMpSHdYSCxPd0VgXT4wP2c3Qi8iQjRCI1gp''@;'; put 'put ''PnVrJkUlfiZuNXtNdyZgIURyNCtDJlRiQiZQd1pdfGpILzksUzcyfGVmWSZMeFhFK1khRT0yYDxKX08xIi99Vk55R3lwQ1BXZDYxak8sWS43dj4mZDZyKi9+TjV9V21RXVohODZsYDtZP2E/NW48LnpPdiouW1c5bzNhVl9iQmVmSiNPKF12MXtyX2BfJC8jSiVkeF06fDlSOHo3Uy9yVkRPSzhF''@;'; put 'put ''Xk5SfDhhKFJsTDBoZmFkZmEjUkYjbCQxSVYkc1lHZyZFNV94dGF6PDFHQklCeVguK1BkWiE4dmFPe3VfQndiXnFdUWpId3A5bWAydWVMcGteV05Sb0ErPigxP1AkPEYxc3x5YWprISQha3JQYXBtd3l6UkRYT1h+a1hULHAhMGRQX2YmSWh8LnA3LCpuS0p2RllRQ1FWRkx8QFgwdSIxPHhVdjF1''@;'; put 'put ''Pyt3YnpgRTJYVClDI2BPN1Bzcmxha2ozKlssbVE6MHAkKk0rWyp0MysuX1tEYlNFcSZBd3FjKVpCQGoveDAuZTI9XTB8U31jPykyPmRUPCx1aTh7PiQ0W2ZuUzgpJkw8QndQWzE/YzhBd3Ivbk0hTFB+fDlrYmNFdiJoRkdWRn04OSVnRy8hOzR5OzdxJSU4eVp6TmlrbFlzUzZOYTtIQl9HIzUk''@;'; put 'put ''Q2VzTEA2QFU3fU8vY1dLQU9Dd2V8LGNAM24uPCwhJS4lfmFeajVVfDxncXleI1hiMyUveksre3VoOmk+KypDJj5VITpUUVZBKU5MdHVjcXpman0hL1l1X3J6PjlVWFRoUCNiMUZ7d1hmRDxPQFUoMjAkQ2pePyZ0Sz9pI0hlYGVgZStBSmozOGNoKGV4fDpYclBqY19BOF1LP0dCMiJLJCZjRW46''@;'; put 'put ''SSombjl6I3U7XjcpeU9mQ1Z5bFJPWisqRU0meyR4NmVJfTI+TUMlK1BLcykxWlREWXgoI25FQk9BP1JTRFlaVmxFaXxTd3BjNUJhRzdyaE4/WGByZ0xxTGl1cD92XVplb0ROI1JPJlhhPDxqa2pEUCIrb3dHZCYkPkNoImtORkIqR2FEIS83ZDlMRX5bWzRZZlZjMmF5dUNiUipKbEUwQmkiMClr''@;'; put 'put ''KTIoT0JHdURIR29tYFpgbk4oXnwofE5tZ3JWKCg2PCZPKG9LMWRSZmp6OF5OY2k1X2g1eHZZQDtLVTZ6YiF2UVY9RXRCSU9INSwufj5QPnxHTE1hbk1IfkNFUEdkcWhEVV4oRlk0SyZfPkNlcUcibEIwQ3g/cEwjdnZIdzBHemIhLnlieVchWzc+Q0N6JkZ0TWF5eDdrOj59fHhdNjF6X3FlJTVR''@;'; put 'put ''UkY3XW1uZ2xGc2NVNClOekQrOXV4KzIzIXE+T09SU283KE5UfGJ1TS9KRXEhXzlvOll1QD0wQD1TZFBWVjFGS1g8bixjYCkjPGJyeFBYTHtCXmEzLCpARDo3MF85YDVCQFdQVmpUXUIxeVd2MkxrQFdtRjpuRVNkNFg3IWxsbE9sfmVWNGlkOzk+dnlYPDJAb3VnLmVGZzduLHIuLCtaYCY0OG1G''@;'; put 'put ''OiFQZXBISik2NHd0eF0jT29AWyZLLiQzRVp9d1QoSjkyKjNNQT42YHBVK3hGeTxJL2BMIk9dJUQveSNDPV5qRTg9ajsrPkl1LnFXfSRLRnl6InpuTSwkS0YwejB2dUBzVWBONnZTb3M1PSZIVEw6UCREbn1ALnJWKVdtLFhsQE5FaD5xVU9hXnhsUntfUT9RMFBTLjF8IV1RX05aLG94LFI3Klss''@;'; put 'put ''O19iMVM4KUBwPVdfajwsQjRKLEE+W3NMLll5SF1gPE5uWGZ5MTdgWCVZQmNITCtWQjc6WW1iQGQsMFsvfnFkTjYqQG9ZZywwWy81MjlDYVdwQGhRNEJuK01dc2xiLFZaZnRRfC8vRXo+Q2Rfc2xIKDU1cilxOXZmI0ZJPGR5RGF1NHphQHU7VHszWHUlLCs4MFFlKnBaVkUqdSFsalNvTHpOPU4z''@;'; put 'put ''aGp0TE9EMG14RGJeLEEuPHk0dHY2PmgqdDdLLzI4OEsqW19USD1OZGZBSklRfXl7a3c+VzImSSxOe3ckKFR4Z1U8ZTMlMU5PJEtYc3VLbFNMW3RwWmhyS1MpPHdwSnc2W09aPT9oPFlnJGgqeFM1ezl4Z3MuO3hSdWxaKUJ5VCQkXlElRzVMOVFAJlt1c1Eje1kuWGNtSVIoNC4/LyglOkwwQSZx''@;'; put 'put ''cEZoKFcrJC5UeyxVUiNLR093aUUxQj9WV0MhJGwuUEM8JGBoS3V4Pkxnezg5Y2V2TENVen5EM0ZRVW1hYC4rMTBfNnk1V2YrLj5pS2RGY3psPU1FJUd2MTRLSENlSCJTfGB7YkxJVGsiSlspa29OP355WzRraGo/eT8rT2tBVUk5OzdIU0Bub3clJWdtOTpeajg2KmcsXVtBK1lqa1B8Kk8xTVR8''@;'; put 'put ''YFphOHk1fjIpQXkiVCNSPE5JO3FycXByMmxvQVNvUHw/JkN7RTI4QEo3cSZGZkxMcUQ4NT02fmZ+b1VNMGpoWiJEVFZMb0tpbHFXMClBeU1UIlkiKGhtIW4lWz4zNXNUIXZzbiY/S3RfXz9YYkxJIlN1Z216flRdaFsqTy9oSy9pS3BSdjgxWzx+UGl6XkY7aT9MT15BJiNRcXVmRF84aUtYUWk7''@;'; put 'put ''dFIpakxTSVsqJEZtOyhkP1BFeSg/REtgPWVvLCFiVF9KRXhYOndPMU1UYi9GQyp4PGB2WWosVXlPZHpyQ0JbKkFebShMbn1FI0Y7JH1WT15yWGQ2aWlQIXVmVzR9Q3ZeMFk7KihGfmUyTX5ITEZ1ei8uViR8eSosLzpJbEN0N18sPDIjKzNxQj9ja0VobTtmO2lYPSh2fFBLb2xSc2RHNX4lbix4''@;'; put 'put ''NXdYdiVgJiM2NHZrTiM9cnVad0FZW2t9YGNmZlUkMG5mR3N3ZS5OMXpJd2UvYGlMUEBybk1XaEI6Kl9QfSZsWVMpbTRFPGd1dztpX1h0TG1CeUxPdDdmS0B2MW07IndkMSllZ3ArQFFVZzREJnpsOWpsJGFQNEtySUxoR0IuTlFofHUvL3R5dCVDOnkyey5CM0lwOHBVKk92OVY6akU8bW8yJEJv''@;'; put 'put ''U310RkY3PDEpNXV2UlVTMSEsKGRfMiJZbEBjQ0Q2dF9OIWYvWU4/JDlzQVE1Yitje0h6SGklclMjaikzfnE9I2lvdVs0VnpSUTo3IXw5TXpUbj0vVyhaREZDMnopZXpqbjJ+JTp3KF5XbnksXXBbQH5mNW8mQEYhZGpbSDA2IT1lPSh9X3A2Mm9KcFQsU0JUMUlZTG5tJTFMIXJmKmpXLDxHPiQ7''@;'; put 'put ''JX1UYixeSVcxdCxncDRXZDlSeW1NQnZkaiIkdCRrPWpgem84O3kvLms3ZWV2ZzpRRmEybC8lJDVrMG1NUj1lQjBZdm07JSlXbSlVLFV8LEdtMCM2SmYvRGppVDJCKH1HWihwJXt8PSlSLkdSdlQ7dWdePENaZVZIeTIkWFNhO0NGRjgvcjxqV0NmWlosSjUremRJM1d2T18xLmhsbE8qRnw2O2Uk''@;'; put 'put ''IU9sUnxiQTZMNjs8SlhgMXoybWBQYnFqdFJfJShPYjxNNCEmPyQicDJFPS80UzQmQzQldHhxaTlYWU1hbGM6KX02cE9peiRWPTNSPispME9McjlWNCRPYlN3XShSd0pafiVmdD8rUHpKKkZvU0BRXj07OCJjNigxOyxyfnshZjtLYzhSRHBkZnpXL0xnemExb35UQGAzVyZWSnlken0/ekpNUyo/''@;'; put 'put ''T2lQPFoqJCZEP089MWFle204KlIqYX1kW1p6OG04cExzaipLUFtocSs4XV5qOyFpQWNUKHFSZTUpRSlFNVdsX0JOd1hseyNWSWU0PDk3NTtROSFoJTF5YzklYDwzTTQ1KishYDpGOmBXR1cwcjdwMX5UOjJqXjBxMyMrSG5XekN9MjZLfUE3NkRzbkllQWM1YmdvMmQ2IVtPVDR6ZTRnNDUvWVB3''@;'; put 'put ''MHUzSX14QisrMEBVdzV1O09qek88X1U5P3RePUY7aThJZTlWO1FMJEs6dFUjN1IvMTc/PXBvI30jXWUyQk06YjUzLjxuQ15wXn5hYTV8ejsmXzglI1AsZCE8TVZwJFc7ZFlTUV5DImFraUFdOCV+NVt8XWguQ0MjMFtsPCllQmN9ZDRhQl0zVTxRb34pVTJwNXwkX3E5bkh+LyglVj5dWk57X3pT''@;'; put 'put ''NXUzITlkNmpAPmc6WD9PUzRGXT1Wa0tSdmxnO0IjJjwlJFBOIVIpVCNCJnF0PURbezZiYHtmcnNWOEZRbi4pRHZMS0VGc2B7JVVeR2UkIktkP2hGRj5wZSJiXkllZiwlTHw7N05JZXJiI3thKSZxRX5sWTxLNXApOCY7OkFSdihZI0shWSVIfnhxRT5ZOVZsNDE3SkQlTU5VOilsUkllRnRnRGs3''@;'; put 'put ''c3wvaGZYPi94WClbc2xXI0Z7d0pwLFtxM0M3NC5wKWdwenFNZ0VYdyJ8V2dUMFtbZmhqN2dvaSY2KihHRi5UITZEb0V1dko+M0ZFbUJtazt4WHtndEhUd2B5Z1gyXiVEJHsvNylufm1VQVk2QiZfWzRNZmhpeXphOyE2REEkOEksL31kKlJlLDAsIiEzL1BfI1JORVQxKiM4Y0pqcm82KENLaFc0''@;'; put 'put ''UTlsL0NFTnpvImx5TUNNWWRaUjssRkJfR15qLGJDeld6dyx3JFFofDJWSU5EcUtPUllFWFNoXihdX3lwPXRyQlkjYzY3ODkrbiJeZDk5cSQrKkhQPVcxbXAiX3dAaDhTVzxvPS8lZFJ5JDwle0dmLikmTGkiWU1qfXFXO1d+cixbPDJrUDsvXlFDcztXaF4+L2dAc2BaS2A8Uz9NbWA8LzwyLExn''@;'; put 'put ''Mm1ENVZqQUI6WXIkKVJJPGg4K05jQH58d3M/RS9AZC5zam8zMHtdS3ReZW8oWi85aF8/TSFuVGo6fl51Sm8lVzlCIkNdL3BMWz9VelhFdEImbjY0I3JzayZDIisxcSxfP1cuKjNTMHEsXzphWEdHLGIhZT4iSUhuND1aUHIjbV4vO2ojbV52W2IhKms6Zml+d29hRXx1SD0pbD0vKVpvTXAlYG5C''@;'; put 'put ''YSkrPHNXflE4VHZKXWt1dnpgcXQ9L3liQFc+fCV6O0pTQkNqOGZyWGI2UmNnZCgqemZ8SEc1XjgvSj95QlhIMC9VbDk4Mko8NklpcWh7UnVGRzQ1enFwPk9qMnxyRCQ3MiErSDwqKyE/ZjNCayFeQVR4SWg7Xkw5U05Adjg+cEZtUjZycGJyQ1ZCVyxqVl1FNmxxOGBXTlBFQ2NkaEA9cl5HaE8h''@;'; put 'put ''djBFOkZ7UjJuPWApXU83UT5LIn0yWCx7KkVgT3VbVkYmLDlualBbZnRRUFdqUHZaMDZrMUJ6fitMZDZbJkQ3QGNLT11xTEVHdjpYYD1GfDl5cWord0hbcHkrXmVgW1QkS1dzJGMsOFJORU9zcXkjUEB6Q1pOe21ONkZBSCoqRzN4K2NsNmZZZ0dKSno8MV1OeGl+RCZqJk1CbTs/RDMoQGxiQ2Ah''@;'; put 'put ''L3Ihez9UZkhTbksmY1NjTGBPdkc8aS9wWD9yMWlzZnVbK3F8emZZV0lmXiZUVE9BQFMySjcmOUtMOWYsZHIrZlY7U1hiOFs5U15Bdj5gTGlxeSg3K15hUEYpIlA8YFhzYEFFbV9xeURQTmlZM0heS3BGYldVayRLZz1yakwiU0phaFE5bFAhXm8zcEYqPyg/VkdFYEN9Ujw1aSVROD0/LkguSlto''@;'; put 'put ''Q1o0PHIwM1Y5RE16KjZhS3F9RVFQOFhlcncreDQ6UGIkIVo5Zl5TQ15EYjxwQVo8cSt+ZTArVl1pQ1gsOHEuNSF5JkYjdD5fYVZKWDJvL1ZCWndFMkt8Tk5DXks+JjEiT2EhY29NbGx6ZVRZbjEjaXdpcm9Zal9FKUlkPzNlS1lrXjlpTn5ELDR+UXZvWmxSJi4mdD1wQEUoSlEhbn5ja0dlQ3No''@;'; put 'put ''W152Wj0zLGdiJFJac1sqaFh+VkYsJGRobz1GUHo8bnxRTEMxeVI+X2dtPyliTyYyW18ze0VgXTVfPypDK3xWVUAyNnYzMkomQ2dyVEY+fCJLW2pyJFtRLEw3K3J5bnRzYmdqc0g9aCpzSkVaSEh3OFQ+akohbStUVDhAVmlodSpBKzBTV1VORjs8LF9NWix3aG1SUjdMZlJIdntabVVtPC98OXt0''@;'; put 'put ''ODtfIWozMDxKdXpJYig1PUl1On5pO2pkMDBHZHtkMXY0c2JjYGlbUDc2KndLTWprR3clM310dEp5Mz1bX3FzN1dDeFl7XSwhcTAzSyJaVmtkeiJqO2khJiJxTEB5XjFGRTl2SGJYan5zdXthc0lIRjExfE4pW2csZCFdM3VWMlp9KGlzbjFAQWl3akY7MTo7Kkx6I3F6OmlUIz9saXBYejdePWhL''@;'; put 'put ''SF9YZUQiX0BSTHptZSkmVGEpOn5ZZTgucUpbe2FiVjRWYEM8aEZVfiNANWlYPWZNTlZEP2dzVjQwX2B6K19dRiM1NV9gWVBkPnEsUHExLjkwSllyVlY9alZBRyJHdUBCYiE4eWx0bCFsKkR7a2RILCYmJU4qSTJoRT8wRCtha0V4Q183fWR9KlF1djoleHBmOnlhe0xPIztVV3dbPFI+SDRSPkkm''@;'; put 'put ''Ny80dGVXRi4iJkgmfV1kJHJzOCoiOF03Z3BZWCI7NXZKTkMjfntnWyxNK3Zld3BpTDVsIU8sWzBAWy5TYWd0JUtoe2A9clUoLiEiclUoYSJdWyN8d1BXW2pvTyp+QFpvL31MeDgxLk5FMngpQDBSTy5mNF5keio3VjJyJkkvbFt9JTw1I3dIe2lgIXJROFB0bEBtZkh8VFAqV0xidk00TUxiWF85''@;'; put 'put ''XXNdS1dBV0BqTkhQcjtSUXV1cUxLITk7QCVOcCw9dS9lLDI9XSQiVSNDaG9DU2BselpGeyhjYTNVTnV5VCE7eUpIbXk/dS9ZMmVVVnpaTVY+Xi9xK11UWXgyeCR7JDRaRllgfGhwPlRqXk9lU1ZYLHVRZyZTKVVaTVZYTUFNZTE/ezJFNEFISmEzMilLcDspMT1WZGhGaWYwdUA8a2EhZU5tUipe''@;'; put 'put ''fWNATCNSOz1AYytINSh8eSZYcTEicntNYlNCJCNXfj5VQm1sLFdMfTVNeE5OW2JTeks1a19pdUhbKiQqNUtJNzZYTTdQc3ttUT5YbmozQkRIIjtXWSFfRnh3akFWRmV4SllodV1MaF5WOFdfMytRfF4yRFA6ZFR4O1cleTssc3daVj05ZGVzM15hYzQ/LFN6PiVoImQ/UX5rJixuOFhrfVluYTY9''@;'; put 'put ''PWFaYUV8WCE2cXBHIi5MK1VTTTFpeDFzYEQ/YkQ3Qk44JkciVnM/SUFHalU6MUcjMj07UkFNKzB+NXFIRGl1JmlkI0oiRjEvbjw6OCErUTBzd2dGPVR2Lyh+Vm1TL0VFWD03ezd1SjdzfHk3IW8wYGIhfVhPL18hUm9NRXxLI09GVzU5KDBxZEtvWVhWK2FBeGhjJiJdcWVOfGtxZ2NTJUVlRE0h''@;'; put 'put ''UyN5WDUpblYuekhQVl1mIXQ2b0I8MFdHQWBPdSx1VXI0YXwwPTBbJUBaW20wdUwwcWtOISgpK3NfOzVFLDA6Vm4mNmNhJlRIK0pzUVljKGY1O2M/b3F+WiF6fHh4eyJlSiRCXUEwWGNIbCxXPFsxd0Y2VzJoYjZpOUxwdysodWNwNyRVeGdRYFIuIzhraW45JnpgSFlWPnAwTE1FcCUjNWh0a1VT''@;'; put 'put ''dGlLUi8ka091WDp3YTFPIiQhOFtFbXEiV0YwMUMzU3M0NTJxRW94QCN0O31tN2gpM0s4ZWEpe05YSilALGJsejJxRUF4NjNvb2Vhc2VeL2JyQSNzeHFFMCohTT0pNFE9XXttYjg1KVNpZXJaVnZ4YE5oIVdUYElOPW5ZOmY9XUp8M1hLO1c9QCVrTXN6c2U8Ok1+YlBZVHVaS3JmNUxifF0+dGkk''@;'; put 'put ''O1htc3ZNYiwxTFkpXm09Mz10YWl+JHZ9ZX0oO04oWXkrLCwjbn0uSG49YkZvQTN7PCQzS1t0LlhaJSMrNUdOISxmXkw1RTxibyE+UzIlNSkrLmI/dlNFSTlXa0hjUFlUJHg0Izk7fGsvSG1OWDJ6altbOCFTOG9xM0Q6NUhHeVo+WjU3VUhNaWtyWF01Jmp5cWxFbChQTStRZ15MUVBpW1FnISIx''@;'; put 'put ''LFcyTmxrODExTXJXSUR4KTVPNmRncUVLO2JGfChNV1hndiRxXl5sUCt6Z3dWOXI9PFR3bkcvTV82MFB9TD4vWFVzQ1suTXcsXzdnMkQsLFtEVlNaSlBIcyoifXdQeUR9e3h3S002WDtJV3d7UHlOb3VYamIyWkZLKklVa2EySzd5RVVlPCZbJSZjSlFuI2gqe3E4SGZ4U0lUM2xdalp9OjVTYE5S''@;'; put 'put ''OjVSSWdhXWooS3dQVyx7RUxCdmkmV10rVVl7TX0xRnopK2RhaWpLKCpHIUJZQDM/JllxOjZxTVNSXX4/WGZESUtNamZgcUghUjdrfTUrRWlSenovaD4jOGEqVmkoODZsP106M0FjYmk+azJUb2ZITyhQcmR4SV5FZzRbdUsudGNjKGJqamU9W04uW0V5OEw3U09eeVBue1JxR0VKRiUyW243MFU0''@;'; put 'put ''IVJQOmtMYn19Xi9SLzFQMlolV0phI0J2eEB2a21vJWA0amZ9aVRtWSZifD4jOXtWMERleGZCU19+QkkjMndKVDkqTExDaDBNRG1gfE94dnFNSUMqWj1jXWFHdlovfnFnO3pSRCF0eVpuUDNLS0w5NEg5c3NmI3ZkKFBVUko2PTdmT01GN2VQX2AoS28lV2xtSztsLmtkQzAxcSo7TDwwNl1LImpE''@;'; put 'put ''bUpfbUFZZ0NUMiJ5VXpYRzxTIXEwNmZMPFNfeCRFLE0jSFdsNFBnNDIrV1JSUT1LbHdgSzp1ajxaVEskaFdvakpGR25KQlRsSG5EYSJdZD1ROlpmV203c3QqXm5HOXQicEw4TGh+OUxlKl9bQCQkKTk/NmEqRCRwMi58VmxQdjtjZSUkR31YbDBKRWtHISF2NSl6K2RtOHUuTGFEe1JOdVZmXT9I''@;'; put 'put ''MyZkTix2NypQJEdZcDA7WURWdlZ0V1ZKSi5NUVs3SFliOzUyKjwxOHhgLyZVb0NsRzRCRE0uckBFOmkkIWQ4dC8jKXgrOj9oQDZNL0ZfNUB0Im58SyNXaD07Q30pfjB+KlJNUyJMXTp2UjBwR3BASVI8Q09aKHp3LjtQOzNndFlAZW59IVtQMUwoTlVfN0xnaU5hN1A7Q3pXQU9IVDJDV342TCFY''@;'; put 'put ''T1QvWjtGb1hgWTNOX3ZgVyo0IyEqKFNqPmVaUURmb1FRdTxReTA1dUx8Pj5OVjVYIilHIURvOV5kc3RJUzJaNTkjezxgdWlFZzddKkVsWjlSKTZiTHFzWyIjOjJpZjouamZLaFE6PS9MZnFpYVZAY2JGYCkrX3NicnZqUjJkPFg6On5XcytzKXoreWc9MExARyNLKSxCRU57K3JZKitbfkwsYE4w''@;'; put 'put ''I3ZJVkVPJjpzQTBAPVV7KTkoPU5ZPFtHXmEiPGhJbldlYktpWW9DRS5gPExQZiVgJk0yUUl0SWNLIVVJdl80UTgqUXFJJHpneEppUFNZJTx4OVZ4YmZsZmVnJTJQVD1BfXx8aWttMy9aIjspUjpkPyVjQElNaC9+VnV3QEVLdzpoMmcvdzlQZDZjIUlmZWUwK1BieldEWjgzN2psRXQpR1V5dyV4''@;'; put 'put ''MGNpWVphZW81LmU4UFAzVGIsPyFNJiJ3WmtaZyZnUytHekNKQERaPVBvNFpyJXwvc3kmME1OQilLWHh1fkJHO2NhSlZzOk1GJV9Ya2ZmfEZAczd6NClqcmZdIjQ4L3VAbyVEVXRqT3hjV0xaVTZfY2c+OWUwUT0zPTkkS05+NmVpYDRPSUlob0RXOlpAZHx4Qz9LbzNFOVgmOE1QTyheKCJhajli''@;'; put 'put ''X1AwQXshMSJHSGNxTyQlfjU5Vi58TFp6TTlpLFNeTn0ycHtxMTllIUAyT1pBYCp3NVdIST00YXdCQzUrK3kkUz1mQDBxZ0l6PGJscWV2OnU+VylDcF97eEJ9LiklPW4mYHgoRV5uY28sbXxAW1VdPkszUn4hNVZkdnQje1RYJT41ZllZKlZuMT50ekFlTiJGV0czWkEqI1VBZEJSOUAjTzgxYG1e''@;'; put 'put ''ZiVjaDNNNlhaWXB2NXgwcU1gT3tPPixycmtxJjR4Ni5hcykjOUtuNVteWWUlPH4yImE5YUI3an0xXns9cVokK09rPWs4PEMmQWhrP3RtIyFScC45RHF0VzQ1SVVLP2E8U3BfP1hgbXV2dV4qc0pfcCslIk9gO257MX01c0UlWH1HK3lYO3NUXlMyd1AmU2RjcTRELHJPXnR7TlFoZ0N9L0JXVkFF''@;'; put 'put ''MXpqP2VXVjQ8ZUBpXVZQVmJwanRyXk49V0VIPTU0d2NeWV5KSWJGSFlQb2g1cmUoNHN6ejJ7dWd4U2Y4fF95dl8kMVA6KT8hODdtVyNUMzZeckpObz5JSjBaN3cuUTg/cS9AaG80KkAwZm8pVTY9cGlrLCIzY2gqbkFHXjplWSp7elUqcSI8cSVJMlUjQyNHc0kyQFJnaVBTVGdfayhVb0cufC9R''@;'; put 'put ''VypKL2w1cn1+Ong4I1sjfDhieXZLPHBBPn1tLHRpdiEmalgsVDljP05mZ28vfk8iSWNpNFs2Zm1lNkxARXB5ZTR7OHhfKm5vUmdOdEdgYFB9eTVMMF81XUR5Un07c3BKe0R0VyJKP1EvJmNQI2pdKkRAWD9eQD9TcGZDYD5Idm4ia0lPMSwwLCN4IWpqJCopXSE/OXF5QT1rb3ZYLEd6dmguTGIp''@;'; put 'put ''eGM1S1VBJTNUdFMvKX19Xntwe1teeHlFYT59SjBZa1dyKi5eKFd9MC9nakdKTDAqcSpeI3RiZzZjMW5oJkZaUDtLKFBCKnw6UXZIWVEyXjlpVH4sZz1IV3ZyTykqd3p1U1lpNGNiUEBJeSxET0ZQUj5vPU01KStLNHB9alNUMTpnSkltP25QT2QyaCEmfVBUMW1FS0dJenYlaVJpKlJvRDdhdSoz''@;'; put 'put ''YUkjdmk7d35hbSpKQytVeHpQZmgpfTRlVXhiK0heUkJ4WWo7OUQwNWs9PFNPRSp7Qml0PkdGNSo3N1RINnU3Six7KjNESH5UTyRhKl15cD4vL2h2dnxfNFMsXjNPQ3x5Oy5OWSlhOC95KTYoRlVEaC8qb1FCNy5mQUVDYGxYRkMuTEBWQ31sOTk/Tm89OUohbiFafEdVUTJwb25eYDhxSTJ8WVFB''@;'; put 'put ''T1JpWSpxOEEsVD1pcnspWmFnZitvYENGMHxHYlRRY3FZRUlBSC5IQUhRdj4zS0N3XnppXUduMkIiRnIsY0A8fTVgOldMcl1WZkVeMGkwd05CWWttazZUXi4/Vn5JMiIvMTIjNm1iJE89MG1iJE89MG1iJE89MG1iJFRPSFtlYWpMQ0ZqVys1cns7aSJjXmFBdiRrTXtJWWc+bWl+VmdyfXRCLGVM''@;'; put 'put ''ZD8pI2g9Y1A1OVZ4Ulh1ajhpY1BBT0JiSl06W1JCXzpsbiZmcmdFfj43VzlGLkUlQ19SIWooeVhrSW1ZTXAlPCJydn5JMiJ3MXJBZV19bjo+bkh1NE86ayohfVt0NEB0Njlmcj1mI15aKlYhc2xVbnJscEl+Tz5SUzw8L3RPQlQuJVlyNDtTNmlYcFlVO3A4Ql0kRVosSjJ7WnY2ZFIjSGwyUDxE''@;'; put 'put ''VFliNUE9SXkpcCYzZnY4QmpMa0FtQCVOUywqfVQqT3J6QkB5Kz9PdS5ga1JhaUN+cEJsWWVjU1Y7In5ZMDZdW1NjYXJYSVt2bSx2Ty5aLyx8eTRAekhiQUp0Z0ElfW5WX1U4OXA1WCMqJmFWP3s/PFtDKC5RSUNIbEwxcmhUKn5MIyokSU8/InhSKTNoXmJGTH02SH1ZIWEzZWwjWTlQJjU9Rmp3''@;'; put 'put ''fnA/Q2t6dHVeSERQSUI/RkMkMW0sNTQpQE5Hd3JUaS9kdVt5flckdklednBhRXZ6WVIhS0JHMkl1TWxSSndobGNSe0BPe2tWcXUvRn0mOFlYaWNGfTs5XWZybkwiYT9nbGRHMDolX2MuT29QJTAqVWI8WlF5Z15sJWlAKGVJWFVOeFBgNTl0UVN3K3JxWVA8R1FtdnoyYUQrOSgsaHBCcGkqR0cl''@;'; put 'put ''XVYqMThfcWp1N143UEZjdjg9VVkkVHUzN1FaOHUmQCouQmNxJjVtQjZla0twKWJDNG9HYX5SY3k9eikveW9wJWEpQkhfUnwheGpaLl4zMUIsSl8jOSlSckMiPUNCNWVycjtpb0taVWkqKHp0RExMOUMuYmhmVE5RbkRXJGoxd1Q6U2gybVFNKjg7IzZGVzVtckJ5Wz9faytHXW8hQWRmUlo9KFo8''@;'; put 'put ''V31+WUlsRjtOOzE3ME1uS1k5a2x0JWxMRkwwVXl8SG50bVE3JXUuaDY6KypYZSg8TElBK3FJW0NmZ1RDK2B8a31wMD5hJi8lK117QS9vUHh7UlpgeHglIWpeXWBmcU5oXWdWJSRDM1smQGNJcV8+TEZdZChraklLWlVpYHdyRXBmIXdZQWNeTC8rRnFvVGJMUFIsLGJmO2JZPGpednVkXXIlUi5J''@;'; put 'put ''RjdhcHYqd3YhPSxKR3ZuZHd+L0RzJWE+TDV0dEA8VEAremNPcy57aVEvRUVbdXBAW1RrbUltak5obltGdVZVKUg1I0haTEBHdSUvfSw5Z3opLDpvSGJZO1orJEVwY1BWSmZ4aFRxWV0saFUyelJTZzViM1JReEhuTUcuU2pvKXQ1XzUwSVNSPyw9O0Y/TG5ZdmhRdERrIV03KmdkM2pedWR0c2Qx''@;'; put 'put ''a3VjeTMxbWBycWF4TzN0eGBLdk4pdysvPWhtXTNJPHBSYV8lbyNjKiN8IlVVeG4wRUY2NylbYSlTXUdldDwpVDJ3LihkYy5FJmNpNmtsP3AmJT9bUmRqZ1FOTUlOenFuTk9SSGo2UDMpWytAMHxBfmh4M1JTbzspTlQpcU5oQmo0blROJiVgOmpvW3BxS0M1bnIuZFBIT2RjUCUxNittMyFyak95''@;'; put 'put ''QGtaXV9AbUxKVWUrJC9OJlU0I2BtPWhbSU9kc3hBV25DKit9fGxOfSFNSSFjd1k1U2VwcHA0dCZgP3NvVG9VdG4jezRRTjEuYlczUnk8aWB0entsU1g9YkpaSn5GLnpRO2h8Sl85akM6NnpTaHkkbWpUUW1yeXZ5JHxmQEp3VVlpamdgbzQjQCR7e0JaLzpQM2l6LHNJSXVkcmtkJDEuZFUjd2Jn''@;'; put 'put ''e29ubWhVW2l1b202YVRjNitjPT9uNl03WnlBV3FbLCw1eGJ0eUZPZGhHTm97UTMoT3JtUlRCJl4/N2k4Tz5kMDZuNUsub25tOE59YU4vR05VOWlCeG5vUEFPPGs0ZSFmaF47JlBZeXJncn0xN294P2B4SD9JOld9Nyo2PnIpa1E5SXc2MTcpTTsvYHdaRCImZlpgKjdKeThiUEJxZEdjYXE2ME93''@;'; put 'put ''WjVVX3U4VyFPcmZHZS5vUi43aVhCSDchL29MTyluNjd3VWVEc3F3TEFPZCN2Y0RCTXx7ISZ3ciN5OVYzVCJWOk43Li9rTHMlPC9HU2ZNIS84TjNlT3VXXzJjalg+WFNqRCRBaixTP0UhZzA3NUIubVNSMl5bMXhwYF8yfHBoSi4wYFs9eWBwJDVUZTJNIlZTeFBTUFVoXkUoWT5eeWQzPnQ9YGE0''@;'; put 'put ''YypGcXZeJDBqWT17XVFmRmxCbmIsPTo2QnA/OGEqa3Q8SFNSMyRRSW1GTWFMJFBiKUphPWNCIndZPChDI0g4Jjh3WXI2KDZaOmAvJGI0KzM5PyZYLGo1UHx9amxjNjpFbk9tcnklIkZmdXV0RDwzUkIhNGk8e0hwc2lVRnxgKW1CZG1rbyZrclJ9N2Jma1RRKzNKX0k6VFskUzUqRmgubU14ZUls''@;'; put 'put ''Ujd2RiJPbiIxMTdYOUouYFYiP0IzelJHTyY4dkpSbmxrWD55WCl5JGgsYl0wVGp2V1hMJCRaNFtPUSIxNzZLKEw5RERPUFpiSDNSeitwbFJGOjRZdFpHJGxCTjReQzVdOX18a1FKbG9MaHBXbkRdME5HLkJteCgvWWVxekYkYlohdn18T0cvYlUhbktdcmxOfSZfL0tvdiNEeCFeVDQyZnxxNytU''@;'; put 'put ''T0VxREZaIzIxUHpibHNwSVd8MSZDNGJkbVI5SVVkP0c4Q0Q8Si54V3o/VXRPWDZ6LFVGSi5HTk1WeHlWRVN6QmxSYndKSkdoSjpVcDs8dVA0T3pUdEQlMS9UNSpfd3toLnk8fDw6Ty9oQUojJTNsaj9zJU9aLEgkZWEwJWU9KlV5fENqMTI/NiVgVEc2WXh9Z15lOnw6Ly5fJSo6K1R+Xmt1OT9d''@;'; put 'put ''REgreTVGb0tgOj5IKlV9QkxbW0EzWHoiOT4rPVNMUFN2W0o9cD5DOFpBJE5hRF1uTnRYdHk9RWdmQHd0L2pnUC98JnJZWzpNTXAlVSR0IUE0MG1XPXVGbWZxJVs1MD1GeCZCdEo0RlhqQnxoUWxBdHRBNGJwOVZCWGZocWcjSFVLdC52QmYwSjwpME5YcDFYQnhpUmQoQUVBdEVhUyYpR3x3cHt1''@;'; put 'put ''UVAvK0VTPmsqXlNqeE5tZypaezE3YSNlailSVkh1MCgqQXMvNGdTJSFQQnl1Ll8zKyxCb2JFN3hDRFlYQisxdDA3NkdxXnFSVGpba0JLVGI7WzwvRjgoUE52cVh2XkR7S3E7czlhPjdAJSF8KGUifDJxIzkpbjplTXV9Kz0oIXVjNn0iaHdHcSp6Ijw0b095RzFPNG40PnFJbnY0WWNKOm1pMHtM''@;'; put 'put ''cThVPEszJH41W15XVG1FKDBuY01qNHNkYzc7KSpLXl1QRHo4XXMzfWtBPGUyckkiaDxLZSF6ZC4rcEhkbGY8NzZ4Sj0pJSZSbCJsXUg+fGx4VVU7L0dXYFI+Jl5gViU+fF4/Qys8aEgqdEdrMCFvdUZ4MnMzV2NJVDl2cjZibXxuN1UuMVdeU3UjMl9ya3NhfW17UjN6Uj1VN2doJmdrPV11ZDdn''@;'; put 'put ''Ym1TOjFMLjxHdmZnKEh3QEJYX01tT1cmOmk9Rl9iVndkbjUmKi9OVGMxMUl1Lzx7PF1ndmk+Lz9MaSp6IXthez4zPHkpO2chfGF2SmUuekolRzdxN109LjdQfCVzOX41M2czTnREa3t1WmQ/VkloY2thdXFSWUd5Y3hqT3c3LEhGbn1tSndCQEYjdCYrdTdIPEJEPTFUfl04U1NQODtrN315e3BI''@;'; put 'put ''e0tOS143fWBASFl+cnU3VWkiVWppS3Z7blA0XWVYWDg4In1RZj5FY3g8MWoybXwrY0xZeTJBV2tqODE3U3ZrOGhVKzFjaGI6Nn5DdUg9dSlpXV80SHc6LnNHMTJvYTVTWUhSI3cie2NbSkVpLGlFSlVWWUpQV3ZBJDdMfFI9OXJMeVhLYCMzJDlNXV4yXz1wSzpQZz4wZ3VaOmhaSiRwTl5pdSlq''@;'; put 'put ''I012Rj9GTzBdezRMSEsuXnF3TD5zajpbbktpWURVentdTUtPfSNOOm8jMUtBK0NsXl9QWz5sZWJfWWshQSVSISUibX11Tnw9K2ojYlBkIzUxYStPNztyNXFWLF5sTEFINTlqRXoodHJGRl1wIV9Nb2hbXzlhajthdDExK3EmO0AiQ1VJd0w9ZFovPiheYDIvQTZyemVSfHFmZTkmflJyNmJIJEho''@;'; put 'put ''M2s4SXF+d30vbV5GPTIkVlFCNFo/Wk45UTtRTDMvLnArbElEQkE0NTxxe0hheD1ibSEmckB1TlI1Ozw4M0phJlUkSDlIOUhfQ3FyMWxVfC9wWDB8WHUjX1pUKXx9JCEvfThzPEt3bEhZKD89ejFUWiIuJGhZYF1LVT1ARWU5bkk4NTx9bSR7fWcscSk4QkA7I1socXMoTz0zN0Vaezl3dE5BeWll''@;'; put 'put ''VXZaajUlKSF0cE93VG02SW5EL2tRTjFQVjl+U043emQ3O3c0U2BXPSIvKCUqTSM9MG0vZW1vZithaTEjZGRRQ296NmpCQ0o9Ll1uOjR1PntQOy9wPVRfdSYjbk1nN1FMW1QhUlJicG8hTDh1PTA4dzM2VHZrODxleF59a11IfjlFWFUqYGpLS0I2YDRVVz0rbGo5Jl5EXmxFNyZqZC53R15gKjxe''@;'; put 'put ''cSZwISMsb1lSL3dVTFc5Kz0yaVgwK1VBNiZ0InBhPTkwX0MzPW5PQDEjJmRfcmJvVEI8ej5dJThJNyQ9YSFnUWFFMn1ZSm5LVzNPa1RWcylPVy5qXn5APFRZOkAoW2pAfUV2YDwxXlZGaz9+Yz8lYyRPPXReJDJ9YW4zZ0VjbHo8cSVTLm5QcFdzUjRwdk5dfGVmdDpYYlpKe0Y9M04kZ0Z5YjFO''@;'; put 'put ''MmpzTyhJXzJaTyZqfHIkaUZQOEAyaip6VFpBaCU7KHo6KDMrcVJQelV9SlFob1I2VnsiXSNJQENGVV5aLHdtSlFTJn14ZGNpMTIlK1NLeHModUlPKD88bFU6WS59JThPM0B3a0J8eEgkbitEL3tpMj9LSjZNNW8hN1V2fD0xQkRDYyhDRCRJOWg7eCh8Vn16KmZXcnlwdDhqNU41cnBMJFN7VE5Y''@;'; put 'put ''emo4azhYOWEkbndQSzhoNHMxKSh6JSllbzlORl4jYlkodjxTNTdtLD99aE9kUyFJPD9yLylJXmY/L05ae0F7UklYXTp1UW5QZEljYTNjYnQ8ZFk7XVh2P2dgRl1kZzA+bmI5Pk88SzhoKnRPPWMqOzt0KnQ5fnJUMVMkSiUsKlJkJHNMWFFEUUNDXUFwNCk/KlJkOWxPZFA8YFMqVEVLIjVRQ256''@;'; put 'put ''JmpXR0UqYCgxXm1sQmAqPHdbJnklWih4fjRaOWd0YFlXZG1hYTk4QlRAbU91ZDdFTE1HKHpZajByezlRQjc4L1hdIT9vNUxZNGNJJX5OMzdEUDgzeVcoeTB0Kj86V2g8ekkmOENAJWpTVEJ7aSs2PnJ4Rz16RFA6InZoVn5xeGt6fWEpImFfQG5tLGB4fS4za3U1ISFfYXxncjVtN254IXg3fU9I''@;'; put 'put ''OjsmKFlnP1ZJKHRFZUIyNTFmYzIzYCt0aHxrVFpyTnFvPGVELkloMTZXW1I1Q3MyaVRpaihKI1JTQ2VQdjtHLk5CeXRDX1NKPHA6OF9GMmkzOWp0SX5uPjZeV3tUNGlpXltufSFQVjg1KFFJPFpLR2kwZmx6NnA7M2JLWj85ZCwlfU8jfXdqejRVInx+dVsrWG1+LFA9K3BySiRjPm17aCxwfXc+''@;'; put 'put ''bXpecFt7SlBXfntAejRtK1BiWz5ENXVJblZPRTxsJnhAe1EubCZ+NUlkKDE2WnRKQFZkKDJ9O1RGRDE/OFRhPH5BamhEPjkwYiZPM1BlVHRsPUl2QmhFPGBJU25xPyV8KW00Sz0pMnlzIjA+T09fYjhPdj1oXk9oIT5fSXBeNSFOZSJ8LHxNRWpueGlIKnxZJTZsXjl5cHhweHB8NzssSyY0KiM4''@;'; put 'put ''NXsqN3EmS2RZRUFRVUVTM1drTSI6LzgzPVkyfnRPPWZrMGg7VE9RdGUjQkMkJmRpSz1Jdk1Hd0lzSlciSCNbfUtmbj1saD4iUTReND40T2M8VDRFWU1pZjojLkkoM1ZiNWFKd1JLb21GfUN8bSVSIjxFNyUwTHBGNUV3QnRrcktZOHNlaUgqJmRhaVh1SEIyKXYzMTs5TVZ4ZHA5aj9tUihmcmRJ''@;'; put 'put ''fllsIUJeNlIrYXpQM11mWl0ofFpOKihVbERSQjk4QV5wdys/VXw4UWFuPUtIR0htdixZLncyZixVaV5LTkMqeFd+M3x0b0kkIyJzSUV0S2EiQ0I0QEtaYnBqbVFUQ318Pl0kKlI4fiRgMSZrO3ssUE1hWUNCV14mdyliP3U4cihHL2x1LnpLV00kUzZTfGY6Q0MwKylye2VwQCJwOyUraTEqaTho''@;'; put 'put ''Rnh6cmdjaGpUe119XVloPEs3Yi8yUGJYUjVvcmB+KUl8cDpraDBATHM/STJyTUk5UW0/ZTl1W0JGdV5EOiRVInBdTzwkVEV+XUdTKTFxVXJofSkuYWhyMWhncn08R3ZxWCp1bEl4WVp2Kzk6WzBUMSRuLCYleWVmKGomM2g7RWVwZiVnYHx7cl12PSJ4O159eF0ufXxJRWZBTjo6eVZdSFpnZnBA''@;'; put 'put ''LDtTa2twTmx4NSF0Oz9mP3g1SH19PGI6Om4pcD8oVUtyP3NGa1oxZnMpckZ0VTYiQ11WRisvS0NOYmdCL29HISJVaD52STFtOiNwXSFWOzVIL3RhYmgpQm9XI2dWYktqbXVqMng0RU4oIkBnYVdjKE1seWh6RkpLYXVXSTM4dnBLRFtERl4wYjJQcTtDfSIzJWBEWnQ6eDNBTFA/OygiPEBwIVFk''@;'; put 'put ''JF11KCh7a0lmYTMiIyRVc2ZjTEhCe3Z6SVYvUmlXclpzRWgzVFpfcnBPZFlyLlZmKDt+cDM3UjtYUlA3KTBkO1g6fTw/XksoSEFhSWFyUjlQQnk+WG9jbnlXNEAlRjAwdnV9MmF9P21LTkNOUDk+UT49K1V1QWNeZi9JNCpGNnZZKVV1Xk0oVTs9LDcsRVZnbngvbXBEYyxwe21EJjJRTi4vOTVd''@;'; put 'put ''SWIpbWNYJFFCK3N4WkMjIXVJP00/ImshdlM6YElGIWxoQmhGVUxPfGJzUV8rXk5sI1E6TEVOaiJgPF07YTg5ZWtwMDUsI0hzWktueVpmbU1fSXtnSDVxOUBvTmF1JnNOckdme3F9RHxeViVOXTlCQEtEPTZGdSs/bk97bkJsQkR4OmQwRHEjO3d4fE1ATTtNUSl9W1NEI3I7amMkMTUyYUJ1QVBe''@;'; put 'put ''Q2IzaSZrLDlWSmpMaUkqYHxJNjNYZ09RbXlQOFQ5c0IwUCFMZVc+NEohSUV0XztaPCQ/R2UlLkx7PiFVSUJ5T3YmJSNqd2wiV080flZUM3s0JCVkLDpEYTUsbyVpWmd7clY9IUgoWSQ9T1ExeWI/MmwqJDUwRUQxNEJDeVlyVkBzdF4hbC4wLiRWSjIuN149Oytvfl1YMnk8QWNBTGY4eSYkRV41''@;'; put 'put ''WzljaGhhPG5yWkNJLzxFamRPQkVnM0dsaC5IbnpyXiZobFhJKzZaPCZqUGYvRVt1Y3JiRTIzXSF8YyRwNHdnP2BWe3V+Z2JEOmkiSzFZSks3Z2gmdU9lKjciMzdQTG08b1MheH12LFJCMFYxbnhNWmZPWGskd3VQa05VYS8saXElcWdyVV1LV3Y+YVdPb3Z7Lz9jN3pzeyopSVlOTT9IT3dRT0Jh''@;'; put 'put ''XlVpOXUyWn4rMXRRfGJed2V4VHlBa2s8QVFRZ1glZ2dmK1tfOGwqSHhDOFczLiteVklHP0hBUldQVTMuK0thYSlMKVFJMVk8dXl1JWlwLkhiRyhXRUlidjQoa3w6T1AjaS9JcnVgaV9mLiMobF57RW4vQGBuQWkodn0kUTBRZ151ci9JWnRlZTpGQjpQJiwzXXBQa3hLO2N5WT8yW15LWSIoYnkw''@;'; put 'put ''R2lOe31qXy4oOH1EMHYydEsxWCk4OTg4KytaMG9wR2p3cDJXM1AoOSZJbksyWWQ2X3F4MVg6YHFJNV5vb1F0X0U4Q0p6RWllaUY2NV0jLztZZ1RVUz58W3xfJGkrSUAwc2dPJnpsfUhRaF5RMzFRWkRrZyQ0RzBLJlg6W2BrSjk5WDF1WywjRmE4b0BTPEFEfSRINkkwQG9ZYTRsSW5hcEdubFlH''@;'; put 'put ''bltZL10ySWEwNzFNIz8/aCFOOTRuTjkmS2pOdDxBazIxNTA1OSY5eGwqQH1yTGVePmljRGlfNGx7JE1LRissdCxoPEdNaWUyUClbUFVONllOY0ZNUHV4X2BEIUZDQzYlNClSLnoiQm1VdVMpP15sNX5PYG99cUdxMSUmMzxCW19mQD1oOVt1KCpTcWBOR05ZXUthIXBvO1BrOTshOWIwaStxOCo5''@;'; put 'put ''bnZhL1QjKm1iMGA5Yk02PzFQOXtwTjxTQmBteUtNez81PGhxREooUDMrWGVGPCthfHhBJSo0RDk1NUYmfThLOkpMR3VWUTx4aTtWUClbS3pHSV1JdT1yZSo0PSMpdUlFRF1TNWs5X3EwOCg0RU5hanciXTB7akhhajhWZmJoQToidHgkbzhWZj5ZJixob2ppblBtK3wlXkxDPyhAKT1fXmZvcnxr''@;'; put 'put ''YDNnYTBrMCEqWyl0VSNSV1E9SGw+eGVgcGBzNUddUkZMT2cifTI5KD1HISk6PiF8dGQpQzosSFI+TSYkMndYZEVMUHMseWw5QHMmJi90VTN2dldKTiR8YFAkTFhaYVBQI1hELChHWEFSfDgzYmJOe3BMZU42RntBaVJSQTpvJSsjTVF8OClpN2FiOHd2R3gmMDl1bUZWcXxLdTl2bGJDI2x9SHQ9''@;'; put 'put ''UiYmL0g0UDJwMyokekcjbHM7LiRNO0xubDBRKHRJSjlRZkdJXUl7d1prMGZbWGE6fkhyek5sN3I1NEd+eXJdckxXdlgsemxmZk5gcSl9X0NPOyxbJWd+JV47YVFTKCUsMSN8dDBscnV1WF9EWk1pZXgxfnFZaSY9O3oyV34kb1EyXX16KStnT0YwUWlxdl8jUGgvdjgxWmluMjFfKVMmOGpYcGF1''@;'; put 'put ''eXReKD1kLEcwajswK0lKeVE2REJRQk5AVm14PmQrSnBJVl5OUndfJissVyxUNGZ0Izw5PVNtNyp7bS48LHtUU19sQmo1bXhJMzQ7O11LU1dJKmpUZUJrQVVUcTJmYlp9KlhQNylMeyxuRUo4ZC9MY2RnV2RrOHtwOUFZLitQYjpoL2JdRilQbVtTI09sKyM6PDUqLlRNP30pe3BCYCJWNm1WWzVC''@;'; put 'put ''VVh8Xis4Qm93JHxJV0JJKzYqQi8vLnQ6UDNdenRDek1Tb0lkJTlYQD1wV3UvNDE9XmIqPEFIdC5CI0hXVGA4OjtCNWZIXSRPSGx2ODN6NVY0YSw8NVBIbXwjQz1aNW5RPGFWSzpXaVBNZGI8LDxpRUZ7diF6c3IuPTNLIWUxemk/RyhRUDNkKDlUSV1CbXled3xacHdbNU1+I3sjZGszSj1UUiZ8''@;'; put 'put ''TippRmciYHFre3pPbGVjZXJCci5SKnhSIzJqZGNMc3hTaXEzNkhpZnkkZUtbKnNzc1hwOTwzP3JUdWREWyp3fEclNkEse1tAVlt2ZnIkVzl4UlQqI31gdl02YThXMilQb303NXJPYVhxP2V3STYhSSRNJi9pLix4JEFlRF8uO3FfOmUpQ2xMPyxeOG4hfDBzdXF7YEoqYSlvUExwJmUqeT9bSFhf''@;'; put 'put ''Km5JUEJWfTExS0A7ayVBbnVsPDl1c3dzOyhKZiFJZEQ7SmREYkYlUW9hL0R2JHk/VzwwcDB6KCkwRl1MWDlddzlfVyljV2dLNTt8bDh9aThSVHVpMD5RPWk/SWhqfiRwZV9eanxtQipzaipKXmlyKFZWR0p5MGRfI3BgRyZqOHBJVT8wSVVdTCVSQ2VNZSg1Y1BbR2kzIXF4dih5ZD9SWXFFeTk/''@;'; put 'put ''YyIpRlJ3YCsvcU4sNmRWaWV7TjliSjMrfEx8WCZbeGxSb3ZodzZgKy8hWkdUYiksKDY/YnhQbVsqWXpCeT5LfHpfel57Lm5aeGApVlV9Ky9MPmEoVU5rWnhXeEleSWBWXWkkKjR0ajpiYXJ7MlQwPDUsfTpiYVt2dTsxSzMudjtQWVoxLnxraEtIZUxsJUkxOklzNHVESzBzPiFPQ3pNRiwvKFlx''@;'; put 'put ''fTsmW0Zob0EhfEJIIl9PU2VHTV1DIUV5IXRlVkxmNyxmT3RwY0dIPFcrfSh4P1RKXykxLDdPdFBoTDs0P2hUOCE4MTVUOEd6RWBJaFt0c0UoS344W3RBby5hUUQqQlY1JmZtZmJTcEp4eihGbXRda1Arez5RYyVGQyJpTDtgWkZTaXVufUxJVFJCP1dxIyU/M09qRCEoI1lLQDJbbztnZWN3Pj5B''@;'; put 'put ''RDx0YFFdcT8jY3l4cSQ1WkJrWFB6XWtPWmZBOjQqSzBDMlZeZFQsRzgzS25rPyY0LEE/e2YuRFQ/fnE+U1BnZThucXN3alhjZi4rXnE/IzFIV0dmbyxHdHQqNCZmSnRyTF1qdEJvdV9MNVswSElSPzIxa3ZEYTJBbWl5UEZLU01Fd1Ixa0JReFp0K087SUclSU51UjsyOHNlfjg5QisoTUgwMzIv''@;'; put 'put ''VHxwVmBmaiJxVGlDZVhFRFQ5aXkiMGhOZHUvKHNJSi47W3pxcT1aKDI7VFZXdT0+VHF5SzZDQXddazhqY0x4TnBaWjJLQ2RCOi8mQTpYZix7ZGosImBBNDNLbz8oSyVJRHU1emxnOlo2SUVIJDM5dHM2cFtkcWhRRk46JGZyRlhgaDYsQ1o2ajtLNml2JVMmYjFmci5ZaCpsUyVQal58QzxAfGg0''@;'; put 'put ''dnVlblRqRCpJY3BpQFlRcTpwT21GKG9HRiR7SEpaOmFqfVRFcm04M1hSNikwQyoiMkl5JC5gOSIyNzNNdyxjT0N8O3tbJlB5ekJqXlpCUS9yZlB+RjkrT2AkUTxLVFo6MjFUO1VTVl4oVGxoUlo+WzwrSHNkOVZoUjIpTj1DRE1hbVFXMTlTbG9ESWZWZk5VVjVSI3E9MENeYUZyU2pxOFk+TSEo''@;'; put 'put ''YWl2cVE4I3xAYSJJUlkuQz40ZnNpdyZbcVZ0MXMlJj11czlgbyQlL2tgI09ZM3AmKHAmJUxxMmxrS2g7d3dDXyg0TjQsb01hc2ZYNV87eWhaJTcvcnBlbjZHWnheQ2J9JDRLXjV0Izo/MnNvI252KmgsQ2c0VnxHVmBjNntGcEAwKz8wfVlpb10xR3lAcEJaPzVyKTlCWm1eTmlgIU5BOkRPNFBj''@;'; put 'put ''Q1M3PUNydilydjJQZjJGOTk6enkxJmlxSEdWXVR0ZnxRRDU9cjh9YEB0czpuWlcyfXs1Vn4xMD0qdzNqflFKPTI4VUE1JjkwZFt7L3ZDdjxKbXJERW49IkJEbmB3IVtBYGp+dDMkeDcwWDJeP0FYYWRwPiI2JTM5QE0/QD08blBVK31BP141KCxuIShkdTp1cV5oYF57P0IpUlIpODVTYU1AWjs/''@;'; put 'put ''Vzw7KCFxMDxIdVJ9V1IyRCFzIVVpP0AxeCYmbkNXbjJ6fnNkcXRPakslWGV5ISldbUkySEsmTT47VmBqYEB8bn5oam5ncDhVK3wsY11nRl8oUlJ5TjxudSp3QDttNSltNmZhSFt5cHA7ekpfJE9gLmJ+QVR8RnBAKTMiPypqUmM8PEFoMVBfZ0skZnkkfGxRfUhMeiM7JCYpUmZJcksxRXRlbDAm''@;'; put 'put ''fnAuRz5GQkUzIip2TVEhXTdmfVN6b3A1JT5iRT01PTlGS3RALGdjdVkzezd9eXM/cjl9SGRKfFVVLkd8UVZpe0M1Pl5vW31Ta3JFNVZkOUAqYF9qT2hQcXFTLGpoI0hPQERlUFNXbEImMipoPWE5ak9pOChfeXMwaC52NzBVNm9yPFs+anJQIkpAeHJLeXB+MDk+XkBJfmg9RnxjNVZDe0BsOmE2''@;'; put 'put ''clMrYCU2QF9wb3xJQHdWX1gyQHEsTntfLCZfOigxMH4sOyJ6PTQuO1ZDTFp0e1R6MnReXSxzRHZTOTw9XkB8blN8cnVEJltPSmFAQEc1cWZVYkNOcT9RLmlPRjBxelpsblpST0B9Wk41V0R5LyF8JFFQM0JZV3tTYkpFaDh2SGlAYEVeMFpgOlNHOjsoX21uO0Q/blp+e2ohfmw3M0ZARj5ZIkpu''@;'; put 'put ''ZDhTQUA/aF8/eHRdbH1BLyhYP2A6VyVJOkxyNGdmVkRiO2RnKERrV0o6RT45OT5KbTdJRTkkRSp9KFFnVz5qcX4+Xmc7NX4yLCNeKCxTMzghRSs/X2lLW3xJdmREPW9BJXpiMDkibnFYeyoqVW10NWVZfSJmcDEuLEZ8YFZeP1tmUUUhaiI4Nk9xJTIwcjkmOz9dVV1VfTNmKTs/XW5wJiU+Z285''@;'; put 'put ''X2xvOWd+VCxOVyMuMj1dSCNNPzAlWXtZVl5QYDghXy5LWXtZdExwQEAwMDA6TGh6RGJEd0ZgWWszeHBOT1h1QCVSMytVZjQrXnldcXA+dy5CVmRmfSpddndFNkdNU0p3dy5YVH4uO15VdlBgP1Y5e2VbOTNFOG5eKE5EWnxecyUmPylSdTtpYU0iKXIvSCMzZE4kOHlGOixLbiFsS3VyKSIsKk0r''@;'; put 'put ''bz0uM31mLCIoUmJEO15WeCZmJS5lSzxwQS9+ZW9teTpsOW9nLG5qd215XWYsPn4odmNFKks+KltTJVBsL1lnWXpHbm1OSm5qPnQxaHtuX3s4dWxOOUMiYF9gUHVxa19nJklwdXFYODVuaT5UfXklb1R8IVZCYUR1VXx+IX4/ezoscnt9aVRCITJNMWhKeFMzVmFkI3MiTDU+dHxmNjoxR25kOU9K''@;'; put 'put ''RUpgfSIxbT8uYCYhTT59Ukp2fT00V1dONVEmQF55diZUdl9ye3VBLEpvI2dgWmFBfmVWc2pTQysqNUNRXXs9LixySiVxazIuPSlJP1NpJjIwUV17XWlzY291RilbPXhYJTF1SHpOXnMlVWNieXAsc2BZUSkvM0pebjNmN0w+KyVXM0NSSFBHMDYvTWBiPzNSMC92TCZJJDwiNDYvM3gkemwjVzkw''@;'; put 'put ''YzxLUTNWNWJpLj1te1M1Ni9sbSN7KnQke1JKLz4qcj4hXWkydSlaTG5ifkFIRGE9cmxTO2hSNFVjOWpYYXY6bSMlPCxrKkYoQ3BYbyY0UEdDdiE2REMjQXZyNE03XixEPFo7bHhUKmVbbEQ8dT5xbmNlWWZsNyoldFtRNzNGT1NJVTVeXztDWj4+Ojl0bXNPUz8mTGQmQHNwOXJOYVBFVG1veXdF''@;'; put 'put ''ZGQrW3NTeVM8ZyF2XSgsJSJKVHwqKyFQTGM3WmZWa3gzOzUjNXFNb1NjKFpSMVolJjxNKF8uN2k4MCs8IVAseyE7UDZDOkE2eWcrSytKTk1sSFU/WkleL3ZNKmRJYTlQKk9RezY6UDw/S1AxaFtZWHRQWnozYzBzUXtuLFs2I1Euflh5Z0VFZi48SzxkQT1NUnRCWH1YT0dkaTQocVZNdXl6eT52''@;'; put 'put ''QFEiTUR4N3FYY0okemA1VWRpR2VHQUF4MkFBTU97eSZpYkNZeDVLKVdRNER0X0NIOVloR2JSMEIrL0ZuUkFNZ0FBQUFBQUFuQiRBQ2ZhUn5dR2hXay5sOCEzR0BJfm88QmplT09IVDpVSzt4eGs+cGsqQFFrYD96fDtlVnxzWz4udEQ/YTF2K30pbEc1byF4ZCZ5SltzUiUqeHc6O3xmWVRRUzUl''@;'; put 'put ''OkV4bX4/Zik/bDg9YjN+Q0w0VklSfjkzdkk2dy5XODFVdllgdjVXZnR2MlpzJSEoPT86SCg+aU0lajN0byYvQUJTdHN1L1RZIUNVJX03e1BoOD16JX5GUm1VLjYmMDdTbHo1c0REPmQpTWcsNDRoKHNpIk5yZFJ8bG5zIV5zfDJ8ZnA0PEBbLFFeLFFXdjI0JGVHdWklWltqW095RlZYKVIudlBj''@;'; put 'put ''YCk9aSFsMD42I3MpXzpbNiJKUnRjNVB0U10uO0JPL2RXb0oqPVVGJmNMMXM8VThbckxbc08+TmdHVmtXOk44NmVaRzpRTWZ3TF1jS0o1ayIoXSFacntfIkNqZEFCX2w6ISxsKzBBR1QjUjFwTiFfMk5oNXB7cWJaXn4qaiU0X3pEQkloeDk9RUVPUmQ2dW0uNn5MKnxsfHBEI11qVFdLTnFKQipb''@;'; put 'put ''an5BbjtGSU1JZDouZzZRSU5jZVNtfWh6PVpxYCxNdHl6dkNSTS40QzJ6JUpBVkEpIV0rXy9malBpeTVwRCwmI2tpOiheUVlUX0VGQ1RXV2FlUGc4cDkvTUNnU3ZSN308dEFJezgmODQxaz51LFtMOH4+VCUuZlksfnFkUjY7X3ZyP057JWBDRDhAQzZLfXJUZmJJa3VLJTRKPFt4Kj0xejVQbmd5''@;'; put 'put ''YkhkZjdgam5zbkNNOmZiM2ZJaih2Kk5pRkAxO2wsa0ZaKDlIRD4zVno/ISROUy5oNFBHXzFBRVQ4UVN5c1ZVX3dfSUE6MTNXNnp5dkhlelRGb0skaW1jUFU6QEwxUXUvP0QwVG5TWy9HVnAjP0haaWB1VEV1NyhpVj16PX5AWWNCWU49Vm90Q1opM2EzbyYuQDhZSlkhPSY+SUlZVTI8OUtlSk5l''@;'; put 'put ''OFteZzEjPH0rbCRbZjs+UGlhREB+R1p7WmFOeXd0X1RDRWFgVVZQcyU7d2RYVnA8cWdtKVV9aWgyYyo6aGkxWDRRK09EO2wmPGElOiRXJTRZdzt1QD05fnlhMFkmO04sYil8eHErekAsakghfX0jVTk3IThdd3J3NSNTZ3xaK1BWcnVERVhXXnJRcyF6JjckaE51YiNNLzUycShmKzh+NGZlaW1r''@;'; put 'put ''YWwwbFtgMSlXMWZIQz5SfEdsR2BTeXgyfCM9d0paWVp0dEJLdlhHUEohI2dPaTosMiMqblhHcjI+Sm0sbSQiSGwrcWxvLzRnQmZ2fmI7elgyPk88YktFIVp7Y2lTOT1men48R2J5dDVVMWk/W2JhVEkiKTpIQlhiTXdoM3RVLFkmcDVlI2IuLFg3Z3ImazNCdXJxNShjW3MrKVtNTD9xR04iZmhK''@;'; put 'put ''NTEwbkF3Qy5YW294NUJVbW43SmJCaDRfejJaaT9DUyVFWTU1TUtbdjlZLjp1dSF5Mk1XczFCXi90ekp3UjJ4bDZ9R3VfRUZGUVE/PnxENHZUa3p6WH5HOVpKXU5pcSsrVDM2cVpvRmR1PHksfHN5aF9DJHglXXEqI18kenczWiF7OG9lc3AlQHFldmZxIjBTWVteV1NNO0tdT3N6ZVo0I1Rbelg6''@;'; put 'put ''SWBwMlBCYmRjV3ooM25EXXFMV0s2YTBrYDA1I31Kc0BPfltaYnAvbkUlWGV5YEBuSTtocGUuV1ppKm5HV0oidiIpYjppaX1FMDBmfHo6eCokWG11Llt3cmlQVyQ7Sj5CRE9NOzs2LEheYmh7OVhCPUw7IU1xZklhSCNhU2FbQEtiTDBMLG18Niw6Z29LTDU9VXVXKUJbWXdEd3UrRHdgZGBTSW43''@;'; put 'put ''S01kVzlDbiUhbGhGfTdLNFZAUyVKQmhRL0x9Xiw4ZkAxViZreTt2PkRhR1dibz1UWXx6O1F2Y1A7dDBGfj9XYzRdNiQzUlEmaHVBYSRCSD58YUJHRkA0TGMlcH1JazZ2ZT9bR240d2AuLCZpUGFUUWlUWzYjdSN9LitPbVc5SCY8bXZLVGQ/PUI+NythZix7Uy4qZnt4dmJbbzx6UCZ1T2RbMFkw''@;'; put 'put ''QWUjT3szU2FhcW5BQ18sNFcoWzZ1fVZBREhKIzJmR01hUztNRlYpaShwNiZDPHdMd01Cci9Ud0VIJS46Q0JuaXdAPGQ0R1EpJDhSKClNa1IyWkhsYiV0dnpzdDF1a3I/NzFMYEciO3FefFRvNkprMz5QXSp1L21wQyxaWnJaJT1EKGRyTmZXMUU5SS9JMD1Ue2lYTUk5bV9UdmxTd202ZS5gLGkz''@;'; put 'put ''IkBRP112N1BQL1VQWWs9Q1AhT0BSeyJGdGYpfF4qJmQhempfcFtkI2A9I3d+ZG8mUjpsMX49NVZebD9nKXJ+ZTo6YlovOWpdSG9XIVEpXkQ2fURUJHEzPzJ+ayJwTXVwZUdqOzhkfHxtY2FgXm8jRCx6aHg9enN8OEJ9ampNdzsiKDF+NnlQQltwISt5eTw6MnFyOH5DImVMVEtkPEEhU1ZAOFUy''@;'; put 'put ''bDs9XTwqNS8lRkJaKEtsRV9PI2dkYmBDVDRyP144S0BVRiFMby55JS9jP3hTSj5WantpWXg/VyUrKS4wQzxYPkFga09rdjZEM3w+ajRZMkQlZzd6M3RbOmk9N3tOa3AzaSYrbClbcmRXYkRsNHN2cmBiZ1FeSmZWRFRnR3J3KmtzUkRaOC47I2dMej5rIUVxXi88cUVTcFcoSlVIVCJxZFJmb3Q/''@;'; put 'put ''fkdHNHtoa247SSN1RV1kX2R9Z3kuNEB2eHZxY2E5X3RQKSQscT0jdnlfdDBSZHM4NGw1XVBQW00kYXEiXjteNzkqTVl7UWg/T0M2WUNfRW8jRyF5NSomcXY8VEEzP2cuQz14YVlxVlN6UH5jN0ZrSlIuZCk9IytHPSswWjM3YztyZkViWygrNn4yXWNaOzh5JDhrRjJLPGx3NjpvRVRLRjd9KEl1''@;'; put 'put ''UHVYajQiUGJ+IU1iN0NOdH4qSCRaVXZwdDN0XkouXUhCKkROPWwhYiExVFc2eX5kZXl4dE1hMV5vPmpHPiQqQl57eXRnQUMhd1V2Qkl6TW90Yil9IzI2OHtuVFpWRmovSEckNnpIIX4pOz9LNzArNU90UUFYVlRVLDVpVVQvLy8mdHQiRHt6Pi5TekRLTD86X21+enxJX3guMndGQ2xhPH13UUVP''@;'; put 'put ''KUYjbSRzKmpmcHsqQio3JW9PLyZbNVB4QW14YkJraCNxMnNIPn5FR3tZV2FGSTU7KWh7NF1AfEpyUCheUnFLIWpAfGN1b3psZDkqPDs3VWRRRSF4TXBsVWtzQ115eHtjb2dJPHlzSFowLD08dDdZcTVNPyIxb1kueGF1S191cHlQPGUyIno+T3RtfDhqdn11bUpRM3RuXTl7KjR3Qlg1KGpybkJ4''@;'; put 'put ''Qz5oM00kazB5Qz85aSIvY2UzaFVYW1pDTipwbiMrYj9Te15QRit6IkpkRUJEbnQjaUJkKDt2QyZeVDZNMU5jJVtpJEFtNGp+LFpSQzhvOlRGLzFLVU0lNDNWKmtoUng9QGN8RjsvcFN0RjQ9eGlVVHB9OnFlXSJqQGp+R09pRV5bVjheXjlhbyg9cipoRXxzLzl8eld3L2BoZipKN09vWFc1NWB2''@;'; put 'put ''L3dROHBfLnNzPF0yYS5Ad1EwOkwleWVNNE1pJW9seE41akZHfm40U25lSkd8VDFzZEhPP11HWmRTa1Y5Z3EsMk92IjdFTzM+T0IrKjJ6WTNdQ1dmUVlLQEI3YS59U25bbDJkIz87UDc3QHB4Vmc5JCUsVmF1PW5ofGw5eGVGbzxGZGBCZm44Q2hOYHFRWjp7OTtRZXxrRX10PyJBeiFQQENTPSpy''@;'; put 'put ''IWI0OGJuSEZqNW91XXR6ZFVlTEV7PXZlWyh6Vm1Wc3ttMFBsNEl5UHsiVHslTnY5Xys7KllgZGo4YTI3KzBIWHhvTEM7cUh+KzI5MzZBZyxCZEZyTC5TcTVgd1pLYUMhKl1LazI7NEw/K1h0eiRGS0lpbW9AKlkkRlNyMllrWGtiL2gub1Y3bW9JYjZZZl4yVl54VH53VTI6OHtjSyIwNCRnbTdk''@;'; put 'put ''fiFGLCU9N0JHIU1JfVZnbTQsVnh4Kyw5cnwyTylaO2BrOyYmQypqUUs/KywrZ0ZxcC5fNDBUV2BiWEArKnNSSSsyLFU/NHxKPStAVmtwXTAkU1thLz50YHojXjl0IW9uXXBSRVB6RE9nOjB6PGUhLmcsOExsc2BmbztPan4mbWJQQWJzTHNvRmFMZ0VEdTskN1FtfktQVXVBTFZPRFtHUTdUTkJJ''@;'; put 'put ''SGlpOEwiZ0IvS1YiWklvPXc7cj9SOGFqPl9HPF5AYStMezYyWjQoKi54U14mR1ZPeSZEQzp4KHkpVCZCUkdwPW5EcEQ9RH4+Rml6Q1IqJThYQyZnU1AqbzlHU3V6d2MmPUdpMmIjZjJIU3EqaDB1P1Z3MXVKK0EoYD9uJF1jbzArZG00ej18OCtTWTBSJDgubX1xLDxwM3RZZmt5TEBuS29rSkRp''@;'; put 'put ''WVpLIjJHXSg1JU5jQmN7KGZVKmFDXTt3cDJGI351fjwuWl52OylMUD9XVSo8dHxMUjkkVVhqWlZvKXdtZkgvUnN6JF8+eTxYRlNTMT1vWl43QkEkeV8oNGp2R15aW2pMZH5PLzU4PjYoUUdDITEqTH5YVkc3bXsyMTxiUVBzNG0zaFY/T3lNU2B8OFI6MS8qPzVAa2JWUCFbIkFnIj9aP2FlY3Fb''@;'; put 'put ''RCovbz87S3xUPmE3RTFpN0w0ZVsmVTUsRlQmcCI2PmhMIl1uUno6IXU/aW1SezZyKEAiXlZFS0QkbyxwR2xIW1NYVVJyR34zSUZCaEh9SSlnRDxNcEZWZyljNiRxLi85ZDglP3AqNkpeKGB2P1VoVGYkV1pGfmxtVGI/V2VJeHMkallBZko6PlB1Y1IiWUVaRH4pWF56W3hmJXpBSWlpWn0jW1N1''@;'; put 'put ''I1Jee1I1VmliPzF3cDF7dlttdmYjPUBiXV1zO3Nie1olM0ZDW0YhKEYvYnhtW1FQPElHSilMW1FscDltZ2chdWR8XW1AbWh7LE1jaSJUd2lhRHsrTGhQSChocV1hSnJxdyVhP3hGbVdKR1J1dE9iWyhGaSY7NENmLCoyYSMyUVM8MVdiXkRuI1dmZG0meTg2TUUvWWA1LGpeWH14OUJEMU9NMltA''@;'; put 'put ''ZDgqVk1WTWsrd2xeKCNDSXVxLEg1MVFAZG0vUWk0fTUjVjo8N1ExdC9LSz8kMkUmUFZLRUY8WUAxYS9IYzJKWX1LdXU2YGQsSVpjYXhBXUhVZio8RmIkdnhIPFpGUnZecHt6bGo9dmRRI29sST1SeT0yayY6cjheQnNTJmRCaVJnQmlkfWElWFo7U2dLUyhrd1hRL15qTWs+MHRCLmNfaVlYaXVm''@;'; put 'put ''bTA5aSt+SzomdXxRYyRtUyg5RyU/KHszOkhZPXkjQ315fDEkIT5fQ0kqITUhV3pYdD9lSGx6KGovSUxnO3g/YFFPcFRbeVZXPCVnYThEI2xfaWY4aGB0YSt4Oi5XRWFfVkFLfTdFTiRXeFtuYWxfW0FAPCZWWldTOCRfbHR6fDVxR25+U2p9OFpHZCZCWl1fZmVoMk4wKFVwSmUpTXMjRUBkaXNy''@;'; put 'put ''bV08QHlwYE5pRVhndUBec3wvbzhBaWUvY2xWPjN1T3xvVDk1JGJvYil6en1HQzZ7ZHRvPHxwO14xRGMkczJrdiR3aW1+NWBVQCk3TWcyXmVVRFIuTkk6fFcvUzxzZipKaEt2MDBoTmhrQ1hTQF1KfCNmMVJQdE5mRzw4ZnprMCIqPSxYT3F4cSpOSjU0SS9iPTE4KXBrUFksaH1yZV0pRHBiT3go''@;'; put 'put ''bGQjUG1JRH48TWVCdkhCM0J9NCttOi54ZEhCU1FCSmNeey90Rk5sYD94JjRyVDFXYytkYiJ3bGVAVkpPPWcpXyRmc3U3UlJnbF9jfn4paiYhZShReGc9YV1sSVBRO3kkfW4pNiFXIjgoVWJYdmxJTT5Gamgqc2RDMWVwJXZ2SmhQMEN7RXokO3JHK3NxcT0vZHhdbGVFVjMmQzhiO0VuIit3ajZM''@;'; put 'put ''MEJOdz5FIko1OlFFQUwwJUBse0wufjdLO1dOaik/MV13XWtZY28rKyM1ZGNXNitidy91e0BAMFdmdyEvZXA5TWsoMG51fGIjT256YzkhMVNAOD81LGFKPVplVyVxTX0pclEye2Y6PGxrdHBsZm9DKT5icnIwb2Q1V0RUbWV0aFZieU9kdTs4eHN2LFhnY1J5MG5maUdCeGltQkMmIkJwX2xaZVJe''@;'; put 'put ''TzFXfG1XQmJFVVp2U3pTSUtdaFNLYjFAOkl0TGYkfWVJMzQlVFM/VjZ6U1EsX2BULyNPfT8yV1ssUTc4IjE4XjAmYyUlalMsLj1sWDE8OWc2MTFreEpvVGJDaURlZkNQJVNOPz1IIVswfFRieSltYEM+S1U9Yktyd05Dbjk9Wlh5P2YmJF95QCUkO2FTPjxUblc1dWNFVk17ZztIY2EsNUw1VWpk''@;'; put 'put ''e2hhIkUueUdyL0ZHY0dmVkhdbTJ0JkE7WWdAenomZU0qVmwiLyE1OltCRCRRS3A3SHE2MTE2RSNoMUolczNAQWdvbkYhUW1XcHBPSjxpeD13dEA8RF1Hb04lLGc6M3FxOGdkPDltWzouRF5GLm10SWouLlIlWzZ8WkwpfnQiKEh6WH5aeUAxJDxdWHxYYFVURVYxLCE8X0prPUljdzZkbWdzRyxr''@;'; put 'put ''bzRGKlQiZyYpPmU2JU1ocG4hJndMU0F9aylNaldgajVfbl9RWWxHISp1VENGNW0+OEVpKFo7eyw2cjlqOWp3alpNSSlxL34jKlIvZmZkTz5QV2xAWEp8bjkkfWxGMDo2YTdIeUlzO2pmdyx0ZHB5dExETXszPUo/KyZsWDdbV3pjcHVzTkl5KGt7PX06fmQzKWpyYk97SG5oPyRkVCRqTCNwcVhk''@;'; put 'put ''ISFObC8qbkFjW31fKmFXXmp8ZS9CYE9sPUljVz8yan5sRDVfdmdzKD9MYm8xMFlXa3hjSnRfPFtAeklZSGUhSypnT0kuUiFhXm5ZXklCVXAxPEJIJEk8TWtsYEhHN2NiM0A+OU83dVAoSDZrZjcxdkl8cmdURWVCMntqbGQzcSs/bygsbTJUSy5dfl1DbU9PYzw5PiYvMD9oXjskOGd0IjlrMFEw''@;'; put 'put ''Xk4/eWE/QkNNTigvTV06bX0oPn1mZWVRVXRgMlhAI3NrP0o6TWJkdTshcGYrJjopJVN6XTUyN3FkT29zWDJwLjI7V0k5UGR8OGtaLE5EK0hWVixzZT44WjVqRi57JltyKz8qQHw9VDl0emQ1KlpUY05ZbG9WNm1vTmE0ZmQ7Qkc+IyxxInNWPVAiSFM5cFQ/QTEkZnxEJGx8fX5VLjQoZ1s/VWNl''@;'; put 'put ''QVhbUmRidlcrL2BfTm5DQFRVL3tlMnddXkt1e0BzLkFXX3Vmel1wRC5fUkE6biZKcSI4USlsN2BlVGYxQyxTIkVvL2Ewc0xSLzE2LDJFTndyXSkwak00TnQiQEcrJHwhOGpbYE9naT93W0I7bTYmQWldOjJ9cCVuak5ZXnZ6OnRPb0soV3M3Uk5MWnBaaDk8di9vTn1HLj5YUUttaXFuPVR6ezVN''@;'; put 'put ''VClkfmtJZW1kbUtwYDx3cTcjOVEmRURuJGA9WipZXyQqS0U8U3ZiVmgjKHVGNml2KmdJUVA3flg3QS9SYDVjfC4xa0wkXyovd2Q5MER6InpYMH1LVWs5IV9uPCpNaDU8d1JkVSN7UyVIbEE+IX53RENNcjdrT3J5ZjJXdHJuNDddYnQ9UmlaSWlbWHkqalM/em0jV0ZLLHojSjswfn5abUlRaGJK''@;'; put 'put ''MU9gYlU6KDZHJW10JCo2LCtWd3lgQSNbd2hVUksyX2A5XitIdD5pVXk2Typ4Y2pMZzopKl5kVHUxRHIoeXtyWHw4fTUkVW1BLmJ+a2Z2NmBiO1dxNkNodj5nWHMuLFRZIXM9QEpxcFlaJV8kM3ZQfk5GPlJLeXhQW1hBeWdkR2lCZkU9On56QEx8c184MiQmY05gOUo6aHxuQ2dHRn48PytJLFZl''@;'; put 'put ''UlN8YCkyYkRGbypZdzZIIiJleXJObFZRSVlPKEV6cC9iMV1JTU1UTU1DJHpzUHVsc31gOm8+Pj8kaiI5YCV4ZCN1JVE1KlBMI3xpbk1iS2tpaTlLYTJbXipJXzEoXVl6ODhWbXMhQz5FRjxiTilaXltva1FxLH11MmpNcmNUJW1zRiJndDc0UH19MmlHbWEvbUIpY0UzUEApZiE4XyFmVm9OdXVw''@;'; put 'put ''cjpZbTZYWUw+OHhaenY8VDJQND9kdXx+YzZCRnAqZilSX1hSYGJGRyJzRHVoPGZzMjN8RCxvOipPbE5GczBXZi5SXWZAPGlSJDh6NWVYZWtjKUBrWDptQFdqUXlPWSRLI0EyKnQyMkx1UFpReD16PGMxdyUqMmwkei52JSxTKWsofGZFSyFMYitLZTZMZntVcStUPDU9I0p7MG87PUA8KmFAcC40''@;'; put 'put ''TU9JSUk4UjM5TGQ1SGw6Wj1NQyVGPTIzIVE7KzYiRU9QP3B1VWxFSGFJVlBPbktld28wZ29EKjxVWmkoc25XVzEwc1N9LEwuK1NUaVBKdUIseStWZkBhcksmTUdPQmshLkk7QkIye3dmZGNseFY8MExPW2AqcTVDQ3UvKjlwJEkyW3VSIUZZLjs9NjViREEyLjs3NipYVS5hVCJUX19zVER+K2d5''@;'; put 'put ''NnNjRGRIQSp7UWZ0QUhEKWwyYU47czhyZlIlSWFXdXhgXjI9TEU/ai54V2lAInleRV12TThHKixOJG40ZUtyRT9PRktGa1NHQVVJdn4rVUZ4KzJUMzxCakglYjJVP0FUbFphUkRmfFohdjF2aG9OYkdiVVQpTktXWU1EazBrNT9qa20sTyhrYXRBeHYyQlhrZyFIPUh4eU4jbS89cEVCfT9JYzR7''@;'; put 'put ''RkBNWENxWTBge29DLzNFfHAlbiVhQGNTLEkkczJNenFTR31ZOEUqSGNWeTo1Sy9UeEYvdDYpel4kXTdgR2J9c0paMChoK1tVSlJDSSVWXiojX0FEKCJdQn1aNnRAOjJNbSJSVkxFTC5dc2VsMEFkMlB8X25dQUxXKnpANEVCKH58emAqOzJEdC5EeXYqc09aYTlUaEU1UX1HV3BUPjd9W0hrQz9q''@;'; put 'put ''ZDR6fmc/anZNKj9ndkdaPFJ8eS4zLkIsTmExcj81O1YvUXJRdCMpQV9EZHw+fG5gWXdVViZfU0wkZHhNOTN1RDs5I0JvX1FbcyM/JTdVI0VTfTBuTl1CWEVUMms8djhjdEY2QjApfTdEakxfM34yK0NzYHUhKSNTLHh9W3E/LmhgaUJHdTdzYkl0Yz1TakVgej9WOCEjWVR7VCw8Qy5MIzI1Nzhg''@;'; put 'put ''XVYrW28rL0B8Y216SWUqXkw5S2JLL1QwcjN8OktxdStJWFk/RzBMZkpgYHsra1RZbjtBVDBveEcyKEMqOiQ3KUl5enlENzVRN0NSK0A6USZpO2lFJGA2QjJ6WCxbUnVBKWxaL1Bwa1VVJiMqTTN+JHx6fG9lKl1CREpYPGZTIiE/YCxrQ0Yjeis4Z3ZZTHxKOCphVVV2a3p6I288S1JDVkFIWTpd''@;'; put 'put ''PzszIktbVnJDN0U2YmF+dipkLyYhU3w6Z0ZbUWVkNi9LfmNFUEJTYyp4eyh4bGdqJlI3QFc3OGkhRnhLZi82MXFOeVhLTkIqP1Y0YVVmMXpZdigzTjVQYHdkISxac2FjI1FUKH5DOikmIis5U2c2QFkkeGpHdFZuWVNFUHt7cEsvS2MxSD0uNyZvUi9sOGo1V2VLNE4xfC9+djRJM31tRzROOnw/''@;'; put 'put ''U25UT09pMFRnV24vfSoqS3N1Oj0zRCM+Ul1uRiZOTDEzYnBNTyFaRTdpcENkYWYiejBvWzVfYXo9RnlkUjZTOX4saCRsQlYhLHgldzNEO3UkNjh2eyN1YiIhYjhmfDdwI2V2M2ZVNCVsR2ZYdldTZ3d2IVl4YDxQSWVwJCJyUF8vWDpiOX4sfDhFJigmaFtbZUdSPiF8O35pP0AyKkxeYTZLJGl8''@;'; put 'put ''I3JNeEdUfFs+bkhdKW1vSlZCIVlOSXlmfV9GTE0/VU91JHQrayZzQm5BZntme21iZThSXW4qPikpYUcoXn1zVVh2VHohaytrVWR6PmRbdH5vVndXVl1MUXE4ZSl2dVc+ejVme31ZeGVEOT8jPDAyd25DOmVNMEg9eiJfRzNrR05FOldYZik1VEY5eHU6dFk3ZiU3eWErLFZvS31HaF90Zk9wYERd''@;'; put 'put ''dEchWG5KaGp5NDJjcj04cCUxSVh1fnJMUFY7P3NtMF5meHpJeW9FdGJHZ3praS98fFFYODZaaDVhNUNrTFRRUFdUPno7aVoqLlRCWClSSXYjb2Vbanx+W1IoR2BPSlJhZ186SyQ3TGNBZDBeOjMzKmM+QlN5MzpvMDdzQDhELyouVy8uLiQvTTpVIzkmeEtFQDhUIUUzNVhWSSU8YUQ7SkAmLFVu''@;'; put 'put ''cG1MO0YiU2VhLnFgUjAuQUlZJmBKQk8pJnVjQ30hNXglcEM7S3hqKCVddjNWcCU8KjtkcUdzbDx1cnYiSHRRRlRxKWBkNktKK18pbz09ezQ6NktKUi9edTlrcTFTfWckQTtuZXgiQTh1JG9eWjVGJk5+dipuVTxoKlhpVDVhSjBoQVZSMVdIdlZ3OUd+RSN9Ol91ZVtIKiJjI1JSUURWIUBLekdN''@;'; put 'put ''MGBpXSpxckNeL2VdQVpMYC5EK21BUjs8SF10WEdwTl5OOWhwTVpxYiRMc2g1P1Q7cjpIRVZYRTt4bGc6bj5HN3MhPS9LYillaTVybjxibG8pLjBfK3I+aWsrb0xyL3IvazBSLClWZlpfYEZ4UCEmU2ZVaH4jQ15mSzdKPV9pfkVKIj1hNGlwdj1HT2c3UUpDJShGPXFuRVN6Um0sVzU7S2thLmhA''@;'; put 'put ''SS57NCYjdEQ+MCM3XVBiKX1daV4/VV5BPUlUczVjRSR3SSl2YmtYT2xyZ3I8WHAufk1YXitgfFtQS3RDSStLRDs+ezsqKz89QjdUe0c+STRmWkUmU19oeW1+IjJtdnUyJiJgVGQ/Ty5HZzo7Q21AajZyaHQkRn5BbHxUX1l5ay5nWWAjfkpeVHtEKnt6ZjBmLDUzVTxgd3tgbmZeTlg8Z0gxfkBf''@;'; put 'put ''bUFMVHZ9IVIoYD04X3VCQ0F5T19DKWxQX2NlSiNYM2pfRSVMRElvX3RrJHJvT01OTjVRO0lAOlgwdGdGN3VUdnh+S08kbzhZWlZkUHJgKF5mWG1zeT08WmNNY1VZQ0NbPls4Rj52LGVIM15NO1pBKnU0KU1GN05xLilXfTJZZkohSlRvLCgzeitQdmlUKzdofkNUVVd7ISpEaV4xNlg9PkB0KD5g''@;'; put 'put ''bDIkWmxzcF8jWzlFSDw9SlZrO3BUP00kc2R8QHh1VVNPYE8ubn46LHdNc3w3UXcvJC8xb184KlZIIUUwUWE7KFJrLF9IOX09a0pJXiNkU2JnYUhmTkc5Zy9iRTA/M0xgV0kva0JfdVkkb2B2OXc8e2lLdVN1JCQ4UzptKUUzTzh+fXYmZEBwaX5KM08pfjRbIklNOWl0RWB0OHwhWzI1SyshNTwh''@;'; put 'put ''TVpden0/Jj47InQwNF0jd0shai5JMjB8fWBYa3ZHPzgxOWpwY2dTXzg6RCY+S0pTcCFgOjpdOS8qS31Oe0N2N3d0Vl0uQjJvMzhscnZaQSMzTSFMY1owWlFRclQ/dH1hOkd4dHhJfUcoe2R+TEw5KSE5O3ZTKCxTV1pzPnozbCliSDUyIkFwZTo2NCQjVk09X0pIbV83P2xoeCQoOT51YG1PdUAo''@;'; put 'put ''NDshMHNpQHV3b0VnVjFaTF5BTSRJX3xCVGRxbGdjQU84fl5ROWguMTJ+RSI1X0tDdHdgUmlPUj5iOF52RSpRdmV5aitpV0NKb2hRYms8WUNZcX5WY2p2PU0kIiZZUWBMeXU+I1kpUE8sP250Y05tWmZbRFhiUGhwPnFSUT84OU53SmtLaUFmMH5BOEl3Y0U9XmB9Lms3b0B7ZjtCP3MjJntUJl9f''@;'; put 'put ''W1lkRWZNWjNUPTl2SChsNkxXe1RgajgvWjt8VzlEP2FZK1ovMisjTkd5Z3R6TFQiZldsZV9jXV1QVFh2VVlvWDgpTEx6bWNmYDVCZT1rJTRGPG5Cc1sqXlM4WVRfKXxhTyF1dyZTaCMwaX5UO0okJkN5W2UwIi55MjQibkk9Vnk0Ykttd0lARzx5fF5jLEdFdUpRTHNpNTFPZCVYZGRobzVwbyhb''@;'; put 'put ''ZzBHMX0qRkJxP0wrMDV6Y2Nxe1J6dFt4NVAram42anUpa3NGbz1rUHwjL2x+dDg7T2dEbEA8eDtLXW09ZVhnNzFbT1BKI1A7JH5yQjBpM2BvJX5GbUJ+L0dDQzxrWlFbO31bajF6NHtVJltYcXkxVV5LVUNeTFowM1M3T0BHYFQoVyE6RU1ncyZZbH45LEIyXiw3dkpvI3VpNSRCP1ZyTEFKWEww''@;'; put 'put ''dHUoJldhISR7IjcpYHRNMTh2NzFxSU89S01adWddczw4IXV4I0FXIVJ2bl9JKEFvb31RVkBHRUxeVFFdJXdRcGBaOlckOlBKckFGTWF1WEZ0JCxHZiYiM3o5eDVFIlEyKnJGQWkydElXOl02eFoqRn44ImVEZzFnVV5ZL1s3QSNkKER4LEQ1aGNKNmY5dDQydW0xJVp3dSgvOGhJQjlDaG5sc3Y9''@;'; put 'put ''YiRMKkVBMFdNe3p1OklDZVYyYCw2SC87JksyfUNqVTRfSEpkRnRNdXU2JTRgaTdDb19FSj9fUiNEWWxKa3dZaXVlXlokc05dMDxtQUIuSm9CaFFbakRHQlpneWR4TX1KQ3xTaUcyUVMxIWFbaWBsZiM2YF19XiE8LitFZDF2RGo2TmArYzJRO0ciXS92X2B6OEdjKWAifDlRak5JcSYrblNyMEkh''@;'; put 'put ''cSNOcmQ2cHhvfV1jVTU1cUQxO2tYT11pdUQpQmJ8WmI4TlkjSi45N2k/PCxtWS5lNyopL0xiTFldYlhzMCoza0FaNE9rLnhlIld7K25CLCh2NmE9dEljU1MyNHJ9KFk3VGN3SCtAUWVyeW5eLCZxaUQkdGt3JEY3PllJOitXSWZ7ISM4NzJMNWgwUD15fXpIe1p6ZSxOeEtzT0BjQ3Y6QlErRWZ5''@;'; put 'put ''dUN9K2QpMFNjTV80amFmOVByX19fKWpseURZW14xO2FrQXwsXiZpOG5zaz1vMj9NLFsrWy9KYVBtRVBgRVdkJnU8Q3JyN31UZ2IzOmNxcXU5R0RVW3hgPHRjN3ReVSlDKlZwTnAiM1V8KjZeRWNZYCkxRDViLz5xX0tNTkJSNmdaVXlaRnldcTtkJDopfVBiMUMzbmBqJF9PT3dsP1I7dV5CTmIl''@;'; put 'put ''eSshO0ZAQ2N5fHZ3eXV6YFNZNWkvcSYhQVhLKGEmT3ImNVZnOytVRjFxRTA3e2I0dzx2JWdEb2dXc0RKQUVrdXhDX1dCfUUjV0chLnRDL0hHekFRSC9JP1U3SDIld3Y2X3BDU2lKXTVuS1hwfWBde15gdWshR20oSk5LYFphV0oxIy5dX3I0ZjRQayNSYzdwPlpVVEMoZj8lJUxPSWNKYUJTfEcs''@;'; put 'put ''PkYueS41YkNxTjo4IzsoaU9vO2t0Q15IZHZJXzh1THhOS3pheWx6a0dudVM7S3FdKGhFVzwpSjdyZklaZjJtNy4jMWZwYkBdbVlvI3tFfXljLyM/XiQxKVU0K15CYkR4TEBLKDJvcGI2L3BBZF1dQX5eciNyK0A2Y2x8bylsa2UhMmBWXz9mL0R0Z14+PC56YSxNRGEsJXNYOmUoSV1VZ1BmMzI9''@;'; put 'put ''VjA1W3Y5Plp7an1Yal9vSiZFYjBYNUQmUE4sTzxtS0RrJC9QQFsyXyZuVm9GOUo8R2RZUFchbCNXIXBWJU9pSUJ4NFpUT05OUnldUWJTVFMmb1ZxTi4uMXNebkZfT0orYSYyMTtoJGlyPiYhc3FoPkIsVW0zYyl2QkduOl9XMXxTJmJUc09zYlpoX2FDclQyaCkzSDt5Q3gwKiNZKTRGZDdadl9b''@;'; put 'put ''TVBEc2NXUV9yT3wkKUROKG1GQiIucWNmMT07eyhjQzR3dl9UXX4weyNWYTZGIyNSRn4mWEFASG5zPDIlcEw7R0YrJF9zTGpOZzl3UHVpX1hSJkhmfVs1cFQmPUtFOWMobkBVcXI2UmVsWD0pa0thXSMuUEQsaihCM2lNa1smbERdLmp9bU5bWyM9QDwxa106M2FiQHBbWVAyblF4VWlLRnI6NFBq''@;'; put 'put ''flZnUlU9dTNxKysqOyFFSCxtd0dlI2R3MmB7I3dCb3czckdWUiNySVtSPGhfTDIpdlRRKlJbUX1GYWxFczBlWjowSk9hK3R9ZDlTaFQrRnQ/V19sJDBvWD5MZX1lME0lPE8wR2FpMUpFKj46UDdKW0xxdV9NJTQyKixVWUl2bnI+dVZmSVJrX0k5UjBQMCNfWndYQGFETE1+UjVyQ29GZT4mOT5t''@;'; put 'put ''O0o1JWhdRmdPRHQ+cyMzdGNuZDZwKFlidXZLWyo7Ql0/MG1ENStSRSl3Y3xRbFJCXjhGKD8ib109VCVXeXh9KTt8eSxWVnsjRnw8RHshYzUyZkZXUGd1eVFGZEc+Xi9eP15weUQ1Wzl1MVtFI3dsPDtzeS8wNTIwfHR4aD10N1N0bFZ9KS8od01fXz9iJSZWVT0kJjdndXt9YmdnSDJdOl4oO0tA''@;'; put 'put ''IjdUa3lgaz0/flRHJDlOMj8rQn4pZD5GNHZXW2hUPUJMQzhEOERkWSUrLjhLfFcydEo8QzZvPEhbW3Vta2c1Pj9ub0NqKnBEXnFtfH1hVyZpemtiW2N+SDZGVndZVyk6MlRjNCZmQDwjWDpiandqRSl8SjhjbGtuIVB7OEB1U0p6PUl7ZVFWYlpZSzJSfiUsSVssb2xEOmhoKHdSNjtQYj89Z0U8''@;'; put 'put ''TXtUdT0mXV9efF5vaEhyRD5sMzUhYHJET2R3ZGsicFEqeUxpT2Q1aS8sKzhSN2N2SzVkIUVIfXZCJWNQOH1Jd1VJeUBAPFsufUtaWyNOcnshTyFPUXR3O0UxL306bnBUSCttYnlqVEQrR21bKDQrZ0UqMXh3QzpTQ1pmIjd0XitWPmNCPUd4TXJ1c0pdd3l3WyFqNT4/PVd1WTIiREx0bTsoW0xA''@;'; put 'put ''WjNjNVhaLEpVRXMzOitwREJQdGNqbU48RyRrVEBoV3JPM1crWHQmRVVOVTAyfWFgcjAwZGBbeFIrPSJMUHwid3trO0pFcl0iaUY0KD9MQFpvTlFKek9KQ2FPaS9eaz4xMCY5KTBxV1QuVio0aGU6JTRLZ0l3KFA4eV1DcEokR1VXJHl3MD55UGhCIXV5VHZhRWVEVlkrdT9YVzU1cW8uPXQvUzNl''@;'; put 'put ''UTdkNjYyemt1aVZpXTZqeHFubWArZlhJUyRAY1ZgdCw3NXVoWWZ9PWRuLiFpKm4qUUxpKj83Qns0RiU8RE05c21mUEtyRUBSTTBVcTBpNiEuQkI+QTE7OyJ6clQ1KGlnaXE6X1coMCMveSp+LHJTZSp2YkxSdkhTfilRP2RweThGNHJ2YHNfRUM9cz43M2dNSyhxLjQhSEpbWG41YnNOPG9PMkk3''@;'; put 'put ''QyQ5RTc9YiFzUDVjRExCPGtFX1pRYD94dFlwdjsobiYlWmdncjA2P3s+eEpGYjB2eGwpcFVUJmsqPVZVQCpZej5zd2c+P2B+U3RFWStILGVLK19NckcvMHI0ZiJMXVlabzhRNF0/VkJfcUohVjBPQV4/VWdlJmU6dnQ5WERlYF1kI0J2MEIsfH46ViJPXWxXaFU0eFNmSiJVbHNQYDs7Vk98dnhb''@;'; put 'put ''TXgmSVJwfmQyZCtHLiFvJndmcklCfTEqUVA3TWIyeTQ4TyNWUmdEXmVpJHlUUTg/U0RuOE4rfHJwPHdeRkRxSU1FTF9nRFspT1RjcFl3ZmhUdWAuL1Fefm9vWnM4OztpUCQvX2RFSWdBS1g7PXcuW1gzKFM0VVtmWmIoayRoRlBoaks2JU5bZz9Ca1teLzJGS35tTXZDLGphP01dNUAxX2N0OyxH''@;'; put 'put ''TyhkPFd6P1d1eToueHJBWD1XNjRpKjhpfmN6UGhYbzZmMkJpRVZzMk1IWjMlSTxicl8pOlddZHAkWjh8TnZDRit1b3x1MGFsUSZ+YWdJaW91WFtXLktAR1lqNGVvNCw6STp9KT1UNmN7RWxoPytnVkRaezUhc2ArOkp7cF1RZSw5S098fGV5QiZobmhPQitSKTVxJVlxb1R6Y1khbjVlR2g0ezpO''@;'; put 'put ''VVVtbm94WENrZSxDPiprOU1zSnh8fiJ+SjFFQSpsaDZeJUBRXTU3UDspNHpqcXB8X2osTSpgKXtHbTksMVR5PCJKYnE7PX18JU9IZGYhOFcuYTgrfHtTV34+UnFmWDp3XmAzZDpMb055P2AuOSx1blZJajI8SGBUe2s3RlBTRykwYjo/PChHclRkUlFiMVdWeys8YmV8JF5sfkh3JDVCMEpRSiJL''@;'; put 'put ''MD42V0BhX1VmR0dTfW0iSDFae1A/eFElSWRdL0xJV2NGd3ptYEhHVjtOZEpmRnR1aV4sT3FGQGNgbE0sKCZ7PyVZKTJHPTRGJiN0SkhfUFQudSFMSzozYjI2UnM5Nj0qezkvanFOT3ZJbFVqY3I4L1hDTyQ5Q0VISysmTCJMXlErRUBdeWk5ejAsb11OOlRDbiN2dUNRamxFNE9HQFVWP3wldC47''@;'; put 'put ''dngscy9KTF8iL0BDaTdxJDIxKnZ1e2IvcG4wWnMkcipKKUMxUlQ/ZnokNXM5PiU4K2dPI3Z4bUNkMUN5Lm1heylGckdELG07SkF2SHteblEvSj5kZ0NqdnQzPldXY2FIKmVUQGlUdDY8UHNaL04hTztlRFF1MHtleyw/W1opfXolVyspeTk/ZFJ+VUIjVUAiRCN+a3RvUTxJRkN0amZHaDFpRShK''@;'; put 'put ''ZE9PMjdGQzE/M2JQU0ReOmlEMH5GayxUJit1Vz9SbSZHUWpdVjJ1d05mcyopflBRImRCJHsobW1HTUBpbF4uME1pY0opfEFleysvOHxlSGp7eigjQHRdSUFrQEhZK1JnWF1iJnU1ajUjI19jMEckeUZYNmdYLF4wY10/YX4rdEYzQGQkLjtMSm5lNFNZdEN7dEVWOWllSUJnWS5ncTFoOkR6L2M1''@;'; put 'put ''V3V7YWFDbiJeflhZVSg/LmMzOkA0TjNWQC8lelU9LF19QlhGODF1ei5xZG8uXn53Q2Z+RUQ7QzE7QlYlZnhoM0UuS0NaI11RRjw2cSspTFAhIWZ1fjt9TnxRc3U8YkNYNCN6YGZ9SF98ZyMrT0BEfXpAKzVqaWdxcCM8K1RfOkIhayk4eTdbejQlKVhjd296ZiVRZVN9W1cpMmxhRzouYEJ0ez40''@;'; put 'put ''YEduXjNgMygheC88cjBKKTooTlMkZSVrO2EhMk5aJDZrWTt9JGorb3UkUGxYPyI6cn1XajZgeGN9ekFDKHRmUiFnLHgxZ3IzKGI8ZDxkVyRtIl9xTmNPcyRWLjY0cW5vISFMPkRKfl9yNTBnVmlKR3g0WE07X1MjZkovSCphdVQzRGwzPkM9NWRLSGFwa180cH0rYl4sYlZXYnFlPlYmUFtLLnxC''@;'; put 'put ''VGg9RFI7YlR2MUl5KVVjfSEoeDY7SEcvSUROIUpuOiluejVbcm1kRkAxWzdadD9sUEcqYz5tYSpKQGZDeX51d289MTQ/bl9IZ343KHlVb3BrUzY7bENWfUs4d2RxfjIycV1IMEthTWFCZF9xQk9uXi9rSSt2Tkw5ZkUxRHtSZlMrOysiMSExOTJBIU4qeC5WXVk3JHE/IXV9K1ImenszLGJ6cFRC''@;'; put 'put ''cmlXT2BrVF5DW0skYHNZNFpYZyFkM1VyQmU8b2tMNCVeTSQuYnh3aWA4RTJXYHBKUHNoQ1JxYD09R1p4W3R5fWFKUC9GQ0BFUHlnWHFJQ0RDczJaWkMzVy9LYVlpJDhvVDM1P2A3K3hrVUhQLk1dZXBVdmVDS2oqOz5KWW1ISDVqcF4pakpiLzxoYzRSVlB7SWpsaWlyUU5aPmtONG8qKDBbU1hW''@;'; put 'put ''UlI1JStReDQ5bjYzLF1eUUo9fXZgKC8oIUNOUkslZXpDOzRDfEAoNyJXRTQkdCJBS2FSZlU3X0pPeFdlO1Vua0g9a2I6X2xHNCZmQnk9SmZzezlAOWhwOn4+M1V+d2lhWGxZcUdwbTtEeWdAfWFpdEArL25WZi5Eb1Z+S1ZxUHtFN3skNT5XQDJgay5HLGhVWWl9ZXtRZzE8TjM9d11uVk1Ob0h8''@;'; put 'put ''aDhrIXF3Wjs2UDo9MjcoNW1YZXdeSW9XajRRJm1SfVRoZ0ZXPjhKRHU9bkV1KWNsMU1DbCUwaE1BWDlIR0ZHQ15GKWhUentpX2shQn0/MElQfmtpfkRlLygzQnhsLHhCSiJLY3g/RmRmL3R3YTV6QyhEZUlrZnMzPzE2N1JlZXFhXSN9ISJ2T1Uha3t8SC9xdyhHYkYlWWtEN20wemA4Mnh8PHwx''@;'; put 'put ''NH5NLlhgPVdfUltIZDx0M1I0T1k7JXc6X1FndyhQNVkve1dqOXhgXkE7Zk08RkVXJiM6S0xyXlI8TT8jMn1JREcoWkxGR2xBSS40NDBdJCxNams8P0VQdmhdWDp3UWBjaG8sQng4PyVHJi8oaiQhMX1jME45Mjg9P1dwajpSc0RhInZFO29jUk8+RGpQcWwhbDROezApYig8WG5zWjUubSE/ZGJF''@;'; put 'put ''b21SYjkucCMiVXdLc0czekNdLzJ3bCw9fTE0LGw+Tl95YiFQcF1LODMvdzlGQyNnOXd4PVhzYjMkSl5zRz1MMlRJVVVGYldZU2NlbVFDfkw4RGdFUUgzfls7PUZhV0xEKHxJdmV9LnI6PS9MZjh7TVIjYVVaWl84c1AvRjs6ej16ZltJb0pjSX54ZzBLPW9bQkE9K2FrLFZxVW0jKUI/d3pPajFo''@;'; put 'put ''TkEyeGVlcE1vRiFjbUg8UzVBelRjenxyXUtVcnk1Q1MvalBDWjJWNE9+X01kPj9tJChEd0lfJW0uMTA4YDhZdHJIPFhlNylreHssVTpLXllUSiZnWFNxPVorJTg1XktXdG8+NFZpX1RkNzpsR3hkeW1oRWxTVmxJKj5gY0V6NTFSK1pHXyg0JVdhIyxldGZ+Pz1QVkpbOX52dzpdODFpUWF1JDAr''@;'; put 'put ''MFg8VjVDODFIPk99NlhQRDM8P1VBRjBCVlskUHRkQylub0Q2WHddQHM5WiFHJWBVU3hsPl4wPDdleSg/NFVyYXFXbGFLbjhJR0dgRTprSVdfNHYyVkgjN2Z0SUR0VmlBPGB6UUEhczI8TnExdEx6aTVJXT5XIUMjbiNCQFUzVG9pdHRuPnVJZ2FCQ2d8eklNZnZ0KD82ayRDKSU9ckZiUHxCdTcs''@;'; put 'put ''Sj5GImFWW1UrelRtM2Q5dDhse0N3YlJpaUM6JjFlNGRNPUp4InVgb19dUWh+JGM1QlohVUQ/Wj5ZLCksRVVaTHxrOjomS0lMUyh2ai83UVkmczpDb1ZNZCtGcGUiKjFtI0J0cGZlVjNPJVVZTTgyRWVGK0AzM3IpNTBYayVHKDF8PzZXMUxLXWQ8d3NRcVgrLiI9RExGKW1mfEJKOEVaTGlzQVA6''@;'; put 'put ''Ql89ekVBKkViI009Nz5JZT1UUXleLk4va0pEUkR0VGp4Zjs2ezo4Qk8qKWdMMXA0RlJJRHIqeyF1ZnsoLGQ0SXZXQWksYVs6S155bUFWVG1FaUc1LFJFdWFefUZZNihlbSg7S3opQGx6S11jblNWV1cpOz8qeUNSI117T1MjeGlzQFokOltgIWFPaSszOz1DTHB0N25Fal1WaV5wXj51UXZbb1R+''@;'; put 'put ''REVqfmp3eU47ektSaVREJjtbTDkyMUZ0NzFXZVs+cSUmS3lhNzxUenBAUF1QcTcmZi99cHE+QzBbXSVgY296Qno+dl0sRW1WX1MpNCs7QFZhd2lHTj9EPDZ5XzdacWoqcTZ1PzIve25GP1AubH02Rj1yK3JqYHpBdns8aE9kRUw/JlowNGhUWGc4KF9wXXAia1UpR2p0Lys5Tjc/VWM4ZEhhUylu''@;'; put 'put ''ZWlAPWVGNm8yV1okY3tkKiIla2ghK2YhW2pVTV5XI09oZ0sqRCorVGRUM1VoYl87aHdSQ244O2wzImdgbms1MjxWQ1NNQHssN2tkL18jN3VSNztZZSNIZl4mT25+eHpYR2BtUVJlPlEydk5HNT8iUFZRc2tneWIpfkF2QkpjOy98Km0rWX16ZmFdVE93ODVVbF0rPC5zKDJgaWZwRCpTSXs/RUw8''@;'; put 'put ''QFVjRG5kV2FoWlRiJTprWGIhNVBBIVkpWzt7MDU2XSNCIUhxREM7XyYxN1dbdFBGLD96Q35aX1llPV8+UFU0PkA+YGhpeDNdeU86bkNPdDJhI2x9VXxYPjMpfVRZJFtgQ1gjKUFFcylPWCpNX2JXdDlKNU5uUjRbSV5iW3UwSWM/I0xiSmROJE9tSXdhNTJ4PTJTOTdJcVNSdGMrZjZXYClnZnI3''@;'; put 'put ''TkVxIl40Mls3dzhGYUJ+REtxOTk4bEIzOEZZIiJVeFd4fWlGaHRfOEYweihmUGcoZVlXSSQjOS9bITBNZlAsXTZmUmtxbFFRLyZiRkBIWWZsdD5TP0w7KFFkTkNqZ3JtQiYpPW9VaV9qKEsyOzYid0tkXzZ2NjBManU4ISR+fGYvYDdAJTFzI01GYSw9InAwQzhyKVZYRkt6UF45WnI1RH1FNz07''@;'; put 'put ''cSxrQyNKQm9WSWIjSltZIlJTWno3IlRCfShheVQpUDQkN11nLjdDPDNCQkFnZHYlNH5qMDZwdyFPRnwsT3o3akhkSyhOVGFoaTg4akRmNiU2clpSUFgjZTAra31gcFdPTk5wZyVROSZqSENyfHM1YSF0KjdufGU9eHQvUT40IXRjJTtffGB1VWhicEMpLEk8fSkzVVJ9e0hgek0+SXxNOCRRUTlu''@;'; put 'put ''bnt6cz0jPVp2Q1YjO0g3dWooKDRpUXR1Vmt5P1hWTDZvL2xkPHNeUXRBflJSXll5JEdiTHQ+VUV9KHZATS96ZTp+aF1uXj5+QXYjZzUzVStAel8yX3NNPDB4PDQuTzVYQDFGWiI0V0IjbmtSNHs9ZSE6OjVNJkdDKUhRZkxNKTRyVF1DPkR3cHRYIU9fJHlAZDpsbFN2cVZTbmp8TFl9OyVYRGVT''@;'; put 'put ''WDlgNUB3KFZfalp8K05maEUuJlRxLz1AfThYMC9EVGB1dD0pZ0JoVXd6P2smYzk2en4/TCpqIi9NbWI/MSQ0YHRgNU8iaW5QWFB4PGVsKVNoUT03UmR6P293cyMyRyZLdFN2JWVYR2VEPTw2aGEjfG1scilHP0BHSW9eOVJxellYeW5RdEZWbjppQCttIWt2dm5gYy4iNl5lejNua3pjajIrZSkh''@;'; put 'put ''T3FeSk82YVBVbjhoUGAiMD9HO1FQJDRVWG5XY2hrPVo+aih0SyxRSW5Hemt0aEIhZHFSeX4+PUc1fi5adHBsWmVYUlh4LzZQT3BiXVpeWD9qN1Bfcjh9NyxsYjY+R2E2cmt4amQwP3RuayFmWj5KazcsVj0+SzpeQy9Pb3xjdV1zIVQuZDhscj5ZRkNePzA3dlY5clt+Tz9pUlJNRXJ1I0pBaFZY''@;'; put 'put ''RzRQazFPcC84IzpOPiw0VH18RyJ7Kl9VS01nN2xIQnc0KCR6bU8zSEluPXUsejR+VEBNTWx1dVkhPXFsNiV6anF7LyZFKGlMe25sTls/P0Z1dmVCTn1mbH5WI3B2WyV7UmBNWn57diJmRT10ajRKWnR3PVh3eTtXSCohYUkmWnJSJnJQXVEvPGN4KjQsWlNjMC5DNFkwJVkydWxTa1lFe2QoSS4z''@;'; put 'put ''Rj4vdi4kIzNBKyIqNFNySHpOK19fYyVaNXJqXVgjcXdnTVFgQmNTV2s2NiRJcHpNe3ksbjw8fStsYUFxU295LkEhQXc9c35Jdz5XKEJ3N2dPez1AKCUkWjMqOWZyKTwlRUdKaHpnTk9wdzN8MV8jaUtQeH00SDlGfjlvbnFNWEg0Y101OUlqNjlDXXR7MXxVRmpdMVFNKDRwUnhQODxLYTFTIXQw''@;'; put 'put ''OixgOGdveHxPREN3Un5LJnJII0VuaWFgeHpIc0VOQWF0JlJBeE8mSHQhaG9TSyhHMiNKKntsbUJzSDBnd19CNjciQWU+eDI6Tyt+ZiNxN3RtSExwPWZyMWk4NnY/fDYzdW5fQTd0NDZ8UHZTKUoxQypWKlQqcV8kWzV+fVtyZXFFR3BBdndNW1NBYl1GZzp7eVNrIjg6SmJuUn5vbTJQMjYoKHw+''@;'; put 'put ''U0xoJDN8MD4mRkQ7Qkl6WzFTY28va1prQD5WdUgsSmZJM2ByaFIoK05TcFJSe0tLZ0M4K0gkUSZ0aWFadklubXw1cTNtPkZJMHp8R0VbQnshTVhwUUpIezZLIXpEUVVdYENbbW12YnZvNXQ9N1R8amtNWz17UGMrSnJiWWk8QDw4PXFwaGVmXSZffn06dm9mLk5KKTlIMzZ5REArWX5zP3gpezAy''@;'; put 'put ''Pmd2ZDI+MXxGa1pbSUk1OlsldFIqWj0iQCo1KEc+NlkkVD9ZYjEpdGY5WikkNDlwTDpZV2hCdGcuK0t1ZUxhO24zX0VUVE5fJlQhdGdNWDtWekUudip7TkREekt1eVp5UnJMQHk8c3xCVmBxR3BfK1RaLF1TbUZTTkN3KWpsNGhLX1NWKTsifCE4cER+XVZJNGdbKilWWmlZSjFlMW1NKXtGdm9K''@;'; put 'put ''fSw/M1ojYCYzVEFLIkF6XmlWdDJwU317JDk0MTU7SFVmaFJmI1ooeFpPLEYjOWZTI3shSCZ6RC8ueyZwcj1tenloanxGbCwrc3A1eT9zWS87K3lXMTlsJT5qZ3ZrJUM/NWdeJVNvKC9XVTh0X19+ZTNSRUB8dy4pOXA8a1REc1R2UkI9QCZleXw+bnQ5cXRkQ3BwSG5ISmJnLz83MVRiIUw8JF1P''@;'; put 'put ''MkN3em9MN2RBbyRhR0FNMyNZSnJ+eEVaS2FIOz9sSGUvOEJrIUBmSGNuYF08WylhQVZudFYhRy9PIlYwZixqeT5KVkZlSGR7PDVfanhdSV9eMX0qODJ0P2t7SEZuRHoodC8wKUhgakUia0wvVUkwX0spTExGYi5MZn4xfUZrLjFyVVtEb1FVPndwcWU9KGQxdC4wWWFSYSxAcTJqUn1wUkgvSShn''@;'; put 'put ''TFk8LkJyTyp8IzReeXIuQkNMMSxJLjpRbmcpZk9MYE4+L1lKKUIkIXAzPUdOVHZrdixiTjZuRGouJDgxNlZvMnI0VWJFOUk3dyN4NHc7Wj1vQlF+dkVDSV19bHAkZmVTSGErT0tqOkt5OD05Py5EKlUpMSlaZihfOGtrZW5wS0o5VSZ2aTBjdG5pPDZ8eWQ3OmN2Q2EkRVd2OzI1LGY/TlE0ZlQ0''@;'; put 'put ''SmpUL2BOey5zRyspU0JjMldufF5uXlhpWkJneCwvb0dVSllhZ0dVQDc8Tn12KGtkZXpmYFtBaCpebjN4MXRpdUJpKE5yR3hNKm9eIXVDPzpCOUElKkNjKjUvdmspWGdeWlo1KDIwQm4qNilJTTYqOl5DU2MmWCUveChOaW8rQGQmSHQofSZFdD1Xak97LFtRPz1+X2s2QCtaSVRWLyZdbGNtaG4y''@;'; put 'put ''JjhZdy57Kn07alVOYF09cWVlaC4jXTV2UHUlYiU4XXU8b0BeLltvNDk2TCt8XileWH5lVCQrWSRlTm1PfHxjLHYxKi9PJihoLC9NSTQpcVlXLCZqTj1nW2dFUVNCZXUvaz58cV02Mjw7e09SVFt6PHN8NjBNYUk+ZWxpcH5BbzdadHh3P0l8THklWHRwQyRnaEgrZEsoV0ZaS1BlNFZJdz1WV2NH''@;'; put 'put ''ZDdwd2tTOEw1a09rfD1TK2UjeFdxWG4qOnEuYiV+LCFiUDA8RE9DRFplQlA4SyQiV1V4dyJMM1Q9PD9WPnksKXg9STEmPl5TO1Iid2dWIkMmUWFdSk0+dkQ3aEd+dkhzNDt4ZCJQK3pZKVttIz11QzVQfSVTckg4ZmgqW188QyhiaStfWHtJXyV+RTt3fV9SKENbKV1XQ15aUTIvPmFFYCgjayEp''@;'; put 'put ''Qj5lYTxtM1NJfTs7XixUaCxXJHMlVHRSfTdZQEN1SXcvS2Q/MEMpVC83W2lvaHltVjc5LnpOb0Fze0wjdzo/bD5wZT1CRExAOjsyJUx2NzVUN2c1Ll8lcCUpS15nK1BAVHQ8NldoYUx4WE04Wy8qcko1ZHguWX4vdkJJPjJbMWIkVGpRU1oqRyxsWCgma3ZAXWR3MixUOzFdYTpwR0NRWU97YHYh''@;'; put 'put ''OXAsU1AxeXxXUGgvL2hLKiNEcE1SKWp2PFcvR3hVMipodEVIVEk4c2o0Tz46ZFglUnEmc2NsITlbKkBdPTtNM3kqQmshPTtsJk1tZnw8NG1kU2JJTE9EZjkiaFhfSFIyQXd8eHI0LG0+Xy5SLzBjWF9pcCNnKUBUTVVfR2J2Z19KQ3RkMSsvcGZkVD59akJ1U2RfQSgkPy89JmsoR1c0Okt1KnMo''@;'; put 'put ''K01LTilgW3chJihnKXlTeyF3WVBIJHhCSW9yLE8rNTdaNyI3TWpBUzBvRkRoP1lWNT52OXI2fDdybCwpWzpVeDxmIyspVFpdJTZ1ajhCRS4qVDltMClxdkNHb2ljX0hrKylKdEw+TW1XTDw4Uy8udjNiYiZwdEZJVG84ZHppLl45RCJsJS5gU1RWVk5FVFlyVVhxKHlgVENWcVQmRGpGWnc8X0I3''@;'; put 'put ''TVVHUC84X0BCRWQrUnwoQk1Manxie2tAXzMqejxqcHdKP0wvWGlnKTRTRjEwMHRAY049WWdwPndrdG80ZnosOERzJWZ8PGxgRDsqLmJDalZQNSEoaVg4OHleR3M0JkRMPHFxIl9xNmg9PHdYKWYzKixSfCJHT2xeQWFvRWNVJGoscl1HKF1bY1txLGBLMjpzO3hOXT97Ml9adFgsM2teTW1hanFh''@;'; put 'put ''ZkR5ZzZiOWdwaldTZ25pIiJBKy82b2ddMTlhanAqQyNzJSxWNT9LJGpOeDxfKGJ0ZWB8ZlJLUl1LIj5wVk5RTlAzczF5Wjplemhzdy5mcCQwMFtiWWFyO3d4ZDJiMU8uaE9qWW1rLHZoYl5gODJSX3RkNFI5WEJpbU1GfChwaGFQI3EzOF4qW0l4WTZ+YT8qZCFgUHskJDMrLCRkM3leXywrJXVa''@;'; put 'put ''VVlSMDtnRURZayRpK0h4fHpvczNjPSY/bWFpd0lWIVJLVSVRaCJzRmhUST0vMzJKJjR8W0UrUGpeYDg4LGx2NH5jZ0YsQGAle3slX2xkOmI9SUAqOyIhb3Faal49OyFYXXw9Q0cjRldfTTtsbnljLGAkfj1nTWkkJjU4dXFyTCtfcVRdI2cpdG1iRklnYkYhMX5PP14qSSg4MEwkVDI5WUwlPXku''@;'; put 'put ''fnl1eyhZcFs+Q09JdjdkPS83aXJMRFZpImcoKlVaOyNJRkhWLzxBcnZBeiF8SHkqWUlHT3BkfCp5ZW46KGlqR05sXX5pY3xyX3koVEQ0MStdNkR3OzZCUm9NSGVWcj95S1VVSHclejc7NExEX15GSERNVi5FSHMqZGopVFt6REJWaVRiajgmSlQ/Rj9hQyxFNDFkdlB0bS5VLEcoaWZKNk9UbHg8''@;'; put 'put ''Nk0xYWpOP3ZIaHApeWsrIVc0bkhWWHhbTjEye2JuNjFnWFJjNjVFVEorY2grX0poVDxncj1AMTBiTHlIPnRQOnR8OUdFRDkqUTgrey9BXWVbaiVbOTpdVjFTakpCUEAkckhEaSZnVC5UbnImK1o5cmd6fVRARjhiSHk2ZUxIYmReLGtnJSt6QGMvNkJrVG5lUktNcVJLXkBLXzRsdjdwOCZ3V1dP''@;'; put 'put ''U2c7MSspcmtUWCZfYDk2fmRSI1tGQl5vInhHR2BZNnBrJi4zVkV+RTQsTlFFW1l4ZXs0cF9tKmd4MntRVTR3UEhjO35uX2FobEM9cEl4cTsrLGp9Yy5saXs9Ik4kOnF4NT1GSUByWTdSaWR1V3FNLCsuO1ZdfE0ydTIjSEgxZ2dNd15VVjkhREd2YnFCV1cqe0RSe24mfFM6aWVpI11FVGhGXTdH''@;'; put 'put ''QkR0R1lRaWUrXnp5Pj19Xi4iQzN2PnZuamFdJFRNfkxaelFAZCRKcFRpNV5Ec0NFRX1aR3BoUSFTZVE/V35wMn01emFrQltMdWouQTErWD9fXSJzMnMvYWBPYCVPSEAsels4NjZYU1tVa2RHeF8wP1p4PEIjenEwVig2IltQVz53NTghUVs4dnReRCtTLiFYJGEqRUh7elQwdCEmNT5lS0pKZmVV''@;'; put 'put ''cDpCUDJmPVh5Wjg7SUZbKVMqeSo6Q05XfHMkNnxJSkZ5KH5gUGNnIWY1enAxR3ZlOCMrSE5FSGUlenYxcU0kQD1APDM0UChHaTtFV3Y1TCI8Yy9MUWQ0XjQ+OlgvcDlZfkhmc3JDW1ZsOXJzREkyfH0xYmNjPTdZNFluOmw9PGVwTz5majRFKkdsMlg1cEdtZEo4Q1pCe1N3bD55eXtuKzFhLnBz''@;'; put 'put ''LyJlNmdWamp2K3M0JWNxd0drMSpibjc8JFJ0d3FbNWldfmwxTEJoMHQ2cHVdfm1jRzBSeGl3WWUoT09ad1JRRVZiQGwkcn00JCgoPmhbRUszeUt7e0Jpd0ckNFZ8OihHPT9dLjw0cVYsYnY1fmk8JmljTjJVRFBRbk8me0N6cVtiJTs9aVNFMHdJP2E/LyFTQ09fVFg0QXdTTU05YSV6IipHXUJs''@;'; put 'put ''WmBFPjA1PjVwJFhrbmVpeHhMXnxRRD8xVTpuVTt+W096e0FtXmpHYEhsdjIvO3QlOm15UmlQczlmc3hfYXFMIWwkSHtkel1TNDBkcSQuQ2JKWUxVVFsqQjxZKCp8MShGSEZNaGxWY35EQDh6ezVsdFtEfChdKFY6ZTxRRnRtRnB7UGBxXyRJX2UrL2BISHVfakFDcWZOLmshWHdHVmk2KlRGKlR1''@;'; put 'put ''a0pHZi9IMyxhb0JPQl5QQTo3cCs+cUVkb1ZNJj9iIlg3QiFAKzx5KEhkbkc9NWtRITpvRzYkL3ZbQDE6R3lxPlA5TG4jTzJSVTkxJnt9K0VxfXxnelI/a3YxRzcsVlBkL0I/dHQjOCJzN3YxOCMyYVtfTWRMaHg8ezpfaFddSUszWjB5KyZhPzI8bkQsVzlAaElbPVBGb1k0WW0iL1U4V2FLVG5i''@;'; put 'put ''b34ra3ZxWTY4Mk8uVyl2TXNMV0JUTkNJaS89WDwudUtsZnk/JTcmbzpyPWRzfllhciQ5K0xhenpUTl9ycCNNb2ljaURVeVYjQDskd1R1MFh0WXtZVTRhWlV5bFt9LkhYPE5zaS5WZ0dMem5HREAuY1N6RVhGR05eIVR2Uz81UG5pdDtMOmcickkwUGl+QmosYj05bl1KTDZvPSMvbXlhMWlmVjpm''@;'; put 'put ''WjB5Nj9lTzd8WkNyaio4TyNOTV55PGtLXjNVYmREaTpXQkl3LkB5c2wkQkVeWW9hW0U6PDJCP1B6YHc2LFFOSTFiaXM0PmRzeX1JbjtYLyxre1A7dyl9JDVqfjJjZWFYfmhsV2d8IVNELFFAaXlVN3Q8dn4+X2A4L3E2XVo4PCFEYzxlPnV2TyQ5O09GT0xKNXNjKmxlRSVvYXo8MWkqcF17T0Y2''@;'; put 'put ''TUAlNlBmOFdzTD5FSU41eGd3cjM/W1lxWnFUN0oudTV8KFtxO1EsaFtMMmlmaXJwQGV2bV1UcllyeXd5Wk4yNzpLQkVRZTQ+cGY4UUJRS1NIaEJeXU9DM1I6Om9aPllBOiVvQ1E+MGF6eW4vXSJtNXx3Wk5QPmJpSGVIYFZKYm8/LDR9WlR0enp1P1EycFh5UVMocXx3fmB+MUw/RGJxRSIldygh''@;'; put 'put ''P3pyeXxJPndRJlU5NjkuP3xCUXgvWHArQ1lZITMwKzRaUjh+N0UwLEQ/aVspW2VmQVtucWY1XVEkKWUoU01PVX4mTD4zIjlLZFQvIWtRWU9wV1J4NmQ0XlRYLF9aZUhYcE9dKX4+TW87UEskMFFLeC9kNGhsUHF0R3FaS2piPC82OEQsK00kO0dQP3RGVXNjV3V2UjIwalJldlgmSlJYOFNpLndT''@;'; put 'put ''MWhvaWdbWi9dQXJvLzxzRl9aTjhOKz07RUZoc1QvQ084fkF3JShhISg5alc5KllyP211TlMqYGEmK0d4ZlprYERyWixaUSE1dyh7Q3s0R05JNV9IO3xRSVohdlVacV9aZ0RPVSU5TnQhSj57ZWZUJX1hMXBmMF98NURZaUtXfjsoTmA9U2VibSl9Y1A6KlJyaUVWYkxWRkRGN25YeDImYkApWnxV''@;'; put 'put ''L2FvYSx+fjhoN1siYld3S05jQEJvPkY8KndAUC4+UzVbOEUxOy48Pk4oMHphSShdNHg9TXpMeHYxYzVNImNUfTx3T01meEVHcS5heXlbbipsdTgpU193R2tDKHFhVkFFMnxKKCpGcjo7OHhdMXpARDphPGxZSmJyal9LYjg+fEhCb21kaWFzZzZkV286JDJmYTRySE0pK058QnRyWjZHI3M5NyZw''@;'; put 'put ''KE9fX3UiMi9mPnZDfGdTKll2bHVxcXRFWF0hdHF0KWxaVz0xS0tiWDYzUWEoL2cvPyglczBxVH1BVjtMb3d8PkdFK3MuWSZISWlnZD9tWkxfXXVVOlppPmZGNSg5enZNOTtbWjc1OUp9L0Qrd35lSiFBZzchPy40SVFQZ1ZrdER6ZVVVYGJNN2dXciI2P3FaMXg+RWVFPT1hZmVkInM+YWFsWDV3''@;'; put 'put ''MHxObHMiKzhhVmE3cDdjLn4qJHBbdU5FXl9dNS41L206XWk2fk9ycVN1Kz5NfSUiQzMoS15UPH58K2hKLGRLRG4oK2NxQVpvcHsmRTU0O2VIP35KdEUwe0ckJGNRM14+PkJ3Li4rRmN9VmFmMncwSVQvZk50U1hzNF1ROU1CbTgiSEYmc2p1ezNdVyFhLnEiUlVkS1ZzXVRnLjRTcDVNL0pqRVNd''@;'; put 'put ''Nno2ZkNjJSomMy9lNW9aOUJ+PCkvOEdkIm9iP0A5cHNSMjA1Oj93UUBJQXwjI3MuPX4iN3hiIV5VQyN9X053PUk8N34iVXdAZkxvfEd5W3JlM1RtZmZ8OkQxRVl9OmlLO19bTiJRMz4xMWppVj10dmMqVCF0aW0vRXc3ZiFEJSNOJUpnRkhkdDRsY2BZajpJPyRSWH4xenJ7NyhLOSlAdGJLQywl''@;'; put 'put ''YztdZ2owISZbPyNoMnhlfmNWUE1kNm8ze1JiV2BOd2p8PkdAeERne1VZUVVbMU9fOnwsaEVlbkY0eDVFJGlbRXdRRSM0NEdSV1BwQSxlVzA9NlFWaDlobWhJfV8xMkAlfGUrbDdfQHcqXUt7LiFRfTJPeVAjcktjI2RkUDIyWFNwWm4xdXFjRVMuY1FIUHRDWU9GI0Q2ZGEycngoMDZQYUlRVF9n''@;'; put 'put ''fk57WDt1TXZlVSYpVHA+PC92eUZfTEtFZnoqNEYlQkdBazolRUc1THRfeywzdysyJm5MX2YqLi59fU9JQHMhaHY1QWpRfXppYGAxWHJNLlU/fDI1YGN+SHlOSmpTbEg6cWVlTGk8SV1NaXVIaHZwbzEqR2I3UFJMM3Z3RTg3WWF1dGFofFhIWEFZOjtoaFN4PE5seHxDSzpENEk0RixAQ3lmPjFO''@;'; put 'put ''M2RXNltISC51QkZHbTIoNF57IzteJDlbaFNffHFdMSNHbjU0RkJGLlo3VztCa01ROjtfRkE8KyUhOjNxbE9pSGI8R1AuZyMpblZbJVlKYUl8JjtBUTElI0AobmZlO0NKeHJQJnU8OkJ+RlFsNz5YfGo7aUQoQXdGVklUdCtzV2lDMFBicDdTQEheejU8Oy92O1o0fkhrX31NIisoSTRtYF4kPSFC''@;'; put 'put ''bzUzLn1LJUpqWE48THtyJD1rVTxVcCMqMElgZmMoazc5IXZ3dVs6N2UxVlRoc0okRik7NVZ8UT0meWozWlY7c2hfOz83fXx3Y2lXezhsI0guRS56TnNJKjpvTkxuL2EiMSVhQmtuYUElL1J6PSxZPT84dDU9dFdSPT0oRFtyV21dOipYM3c1Kj9uWFV9Myl8YGEhRj0yKTdXNj9KdERQZnMxN2F4''@;'; put 'put ''RGhQJSgoOGRYPVNQWE9LeFNNSmlaL3pjckdeKDM3PjJ6Um8iPEA3Ll9jRW95IlpvQCZdSm8lYldPNWBYTk1IRmBbXndMZFFoNEhwY20zPCh1Vjk8ansse2l2NFRYVj9hQmB7PUZLUGZZUC8sVzF8a2Y2az5wIXIme2lRcD9EdXA9aD1FIVUyImk8Pjc1dzQ6OyRYSix0XWltLHBlWDZFeE1+K1E+''@;'; put 'put ''WWpfRGVqUWtaTFROLE1LX3tyUDB6aj0/em17eGd2NV9fQzo6dFhse2tHQU81SCs1SWp4UGRucl5KOjB7PmcuOi9WXWRFQFApM1JzZU5YV1Y1dTgkMk9VbX11NExISSEuRk0vNGhHISx3V0ZWL2xXPH14TGNGRFshdWA4KFEyfUpSQiZveUxqNiQ6PiJXaFNvKlFCcGYwcUdRP05APE91UFlZNTo3''@;'; put 'put ''PSVAbGg5PSVoM25YfjteazM5WipHM3NdOU8yW2MmcltvSDEsYVVQWmxlL0kiRHlWVyVAY0wyP0w5L0B0Oj5TfHYzQ35gIWkvODMjSEk8QVtZXzcqQmYuantuakpwYG0+Q3FUTSE/NWZkImNeM25OW1djalZWfUZwITg9LkdIKngyPlNuOWA9ZTd6Wi9qTVpVeX5AYkpdcDUmYnZjcEgkdTVbUT5d''@;'; put 'put ''V08+Ym1TeSgwPjNqWjA4QkU6XjViMyxkbylMPyF7fExRMnI0JSRIOyt1R2BIIU0lWzZ9YndQOUJ3aHJIPE4jI1RGRkFtQHJMMysuKytEcmVRNz9qdElvZDg+RzVkZU8odzJXdEl8UDwwM18/Vj5TUl5+N09lUWd+PVdYN0tlK19AfklyOGliKyVJMD1XWSQkWi5LKkAqOyVAMG1bUTV5c0BKZ2U7''@;'; put 'put ''OWlUdUl0aWJdISxoOlQubzI7UHBxPygzeUhkKCR+dXk3YzRuKjhfW294RW5yIXN8JWhdRkdNd3V2d0RrUTw9L2EiNWokajsyY2pmeDw4ZkhiVjQ6KFF9VHZZZEpDO1RLPkMhb1shRnw8cFJMNU1lak4oQGQyZVpmPXk7XlphLj0lOzcoNSlCbnN+akV4ZSlLfkdRZi52dzRKTD9bZjVvUk5tTC9O''@;'; put 'put ''YEZCQ2lvdnJVdnBUU3B6L2cxeHVdY11JNDF6dDBATSZ9LzB4RkskUmY0flF7bkxASm4pb1JKcC4mQXR8KjhJRVpwZktJSGd7XixJRCszWTh4eSFeYHZafWo+X1EhIVlJWSpPL3ZVa048ZzFdaSFORm5zLjUxM21rTUVTL2s8L0NHZDcjU3hrNmU1O0VrOz4/Mn4jTEQ+cTckXTFMY1EzT3tgQVp6''@;'; put 'put ''eEYpYyNpN1N2JVdKKEdDOCFAc0ZTQzAiWClZJVUmSHZhaWpQWjglYzwsaWt7JCh9Xiw8UDQ5QGIqJWJyfF8+V3RNTnlRKnZjI0lQUmI5SUwlIipbZk9tQm5wfEg2T0l6MUdZeTlGYWRXQ0paT2JGZlNudFgvJk0jb3g5PEhWMDJMPmc4O2VAeUJpO0NkU0RjaEE3Xig3JihlWTBPNkMxPSJKal9H''@;'; put 'put ''JnIqWFkqXm40KihKdmskREYwaTtSPnwhWkQmYmU1dUBRUjAwdVhXWlk4VVpPMTJdSEkmenNxanxvSisrQ2w5Pm04N0VLPnpmc2h5QmxSWCNheFB3Mn05RGBIR3piNUNiY1Y9KjJlOilHV35+N0lTSU1WYnBFeCFUWE1JNjM0Wn4rVyVAalVrQm0yOyRWRlc6b2okYH0hSEw7MHhPXV9YLjB7UTBE''@;'; put 'put ''N31FUTlhaWF8ZFNBZntndGd4e351X0hwU1UzSUgveGNWJWZlQVdDYGBwfTgiS0lTc1Zqem0wWWdOe1VDZCQ8Zy5mVzd+NGVVSltkNmR8UCJscXBoZzdwPzkhZl9YQXZwY3B5U1FWZStqXW8oO3RZeiFRMGN7Rks6YFJ1JEJzeXREbW55WUQ7Li5GeExuOGRXY19NYG92dDRZLGpfWW5JUDI8TFI+''@;'; put 'put ''aGlDN1o5PUlRYUQkOmRbLFdgbU84XWI9SDxoSTRMKmNiRncsKCpqIThPbTRAbX4pSGhOPzJeWG9WY0M6bzZfKDdXLlJyelM5ZC4/bXtge0ZMUi9DLyQ9THhNaGh2KkRpQFhfYl8kYVUzJlV7KC9YU1h1PChwMGVle1B0NlQ5Q1MiWjZtY3RlXjsvd1FLTU5odSYjKXxFYUpaT3ppZkQ0alhUZz8p''@;'; put 'put ''fn1KSGh1JV5idkZBUj9deE0sfF83Rj1kfkI5X31kVUFDNmtNR2ZNRmcuQ3ZgXm8uVHM3NDdYNXNQUyUwSnZyWG9FQSg0LDYxXnNuVUZ3bCMzWEVYZ1ZwSylSSGZAOzZRZFUjZTNnbGMmKyxKIVs2Z1VKJEVAZFU0JENpNzxQOC89SWl4PXsxV20vaFB7UVgvTUlYK15IcWtoVjN3fDVecWAyMFFt''@;'; put 'put ''IW9LVEI5VXdVK3gjeWpudXgwRztBc2JVdG9AR3hRcGFHPXp0ZHprWyh8UWo7IzBdL3YmaGZDP01YN2VdcTNvTyJ9L0JUOGJ7UmVOZCl9YmhqQXRBIiNVcHN+UkhdYGtGKkhiUns5WiU6RGUmKGtAfT9iMS9ZRHxMV30lTiNMXUdAcmZuaElyekBJeWY5cHpPRWlbTzxxcnl2amNneTpOSk48cXBI''@;'; put 'put ''SH01MzBRMiFrcWc0R2N9YnFxMHlwc1t+XkdnPSordk5tWCZZUn4jQFFzdnRzKDg7ay5JVjU0UFlLMjk4LD1rYCE/VnxWelc/WGE7MzR9QCxbM0NmU3pMMXFhay82eD0lQHxQI3pONy5yVUZUUT47TWsre0tjYD8sLE8zdn5mY2g9bXRvRkM+cjVfO1Y5SlZofVNZdiRMOV91VCZfW0o+Kntaek9t''@;'; put 'put ''ekl0KyU8VDZoXiRLTmYiayQiTWR0VnNkQy4iNjRqdT4oI3ldOXFGVkg7InYjeGE8ZFszZClANExaZTtLQ0M6fWE0Zz5zLC95PmlYS1pLL0NseCxDQG8lPzpZMHBecm5LKmsiZ0M1MVUrOHMhVEAkcU9wV3dRMShoUS40NzhSejxgYzxxRWkyeyhUcU5MeTk7fH4mVkt5cVcyRCUyRVp3PlozIWAs''@;'; put 'put ''WjhiT04hdjRBdit1RjpSQDFBNkxUOjB2MS5vYyRkI1dAayRYZkZQfUs5dWBmRl43Y2huVUArN1plNmd1RW8pL05iOTdkMUI4ITAwZihbSTNCVjFFZGwoO0Y8aTtXO0NXNl48Y25zSUdpJF9LYCZeS0hZak02YHNtZVNoXW0kMEthNEg9aHl+UHFEenk0YGdiZFMiWElYZkoiMj0+W3RhYCw9SUh6''@;'; put 'put ''SW9STj5GNG8/M0RCPF1oSUxRdy5tST9KTllCNXY9eFpnVzsiOzQ5Rl8+X1daaHlrVnh9VjpvPmlDeWpDd09zNUsrYDA+Q1okLkRaZEBEO3h5Yj1CYjFZcGorVVk/RmBSMH1NJSEzU1tRLHZWS1Jhb2J6fTEoJTQkPVZnME5EL0smZShzLng8SiRdQWBbYUE/SCIhRyFteyp1cTVGU0BGZEpLNkws''@;'; put 'put ''UGQ6SUw0R1dqL3VQJUQoOUZONFdYTixSZjY0UTYwej1DWkY2dGd+VER0ZGpyQHc8SHg6NHJ9NmJaWHNjU0dsNV4kVVQvUVF8amtjU0dAR0deajtYYShJMGdRe35QKzI0REI1QVpQKn5+Qy5mekdSbSNTKWY1Pj5XPi58e1pHcjcpSkxhdiNmSX1TNzFAP0NKQlNaTEpqOTE0JH4jRHYoNk86aztG''@;'; put 'put ''Mzh1R29SdGdJWStIZV9LT3VGKC4mVnNreX4wSV96ZEUwPmRVQDs9WWwuTlopelJjOkxVcl1XX1dTVFZDY1QhNE5VPzA4cEczYUREVHpqKGFhbDhkOlVaNkRrY0AoMig0VFQ/Nzw4LD1pM2Y/dD1HbExyaTNjSVdNbkdCY0F1aX5HQCEoKT9dYmxNUGVufUZdey5BX00xKjEiPDBMWmJSP146XzU8''@;'; put 'put ''VkF0elc5Sy57TGQ9JjN0bCRQcWRvLkJaVXZDWTFQWl97cHouRVN6Y1k4bXJURDYmclk9enR+alFlP0UmZH1vQHRxYzdmL2FkM28vV2VYOVZBLH1rWilpWVlsR29QXyE6OFtxdXdNP2hvJntgKEYhaXBXfV1KSDtqMT1aaC4xYCIhSCZGWV5aKSQ+XylVeWRWUD9UZm1UTW1qMXM3ImR3eSQyUE0+''@;'; put 'put ''In1UU04lYyU+UkRQd1BZXU94X2YwRT40QlNVVDxKaiUifmROdWo3ZDViQUlJbjNAIXk7YmxkKX1DKTF+Y1VfWHlEQFRNd19fcnhgPHMoeFBLcDNgOUA4dVc/R3JBOHY/SmE9QiQ3c0JtZ3JlKVspdSo0MT49cDMwSyYxNSU0eUtAdClILjRiPHlrOUx2fSZVKWJkWEdTX25IeVN+QkU9aUxIIj5w''@;'; put 'put ''N3w3InksWG1aaT4hPHosLnJxK2VFOnlUVmxGO291bX0+JF11RHtxJkBdaEVwUWtYNXc1UkpERnxlRj1HNUN4Tm0hJVJhIixiQ2hhRmcqYiZ5X1ZOeERIb2BuImp3LjU6eTtOOWpCenZCcV92YTRsXUcoKFF9Vn00d0sqNjpFe0gwT3hiQ08+SEQ7ZzE7enx5YT0wKiFYZlBJKUs+O2dFZjBFUXNo''@;'; put 'put ''R3ZRUm4jJm0jWl17X0ZWP15MX1ViI0chWUNKNGhpTW5SNFpHdWNyVTAjVjtAaEhDQExUO3sxJC88c0V1b2lyXnZnOSskayRDWipVTGB2T3tzYU1mV3ZQemM4fWVzRkp3fEQ9USM1RX5KXnlsVFR2QkRIQEFvT1t1Wnh3WVh2SmpffFpyR05PJE85eHd9SlNiRl0yYFckWG5MbCNeZnpmendHdEJX''@;'; put 'put ''RCE5P1RTVFZHVX40aV1EJW9FKXsuU256XSx7JEQoRn4lZzk5cWNhYyl7WygwNT4xN0ZJQmZ7aEA0KnFtT1YjcW1OcnorQ3xEdyJ4KHokNXpsNWFLJjVmZnZSJDw6SD1Nfm9lMjF0cGBhMHomcVhjPlB3NmMzbHE8InZ1Wmp1KH1vMUJ6PWZxNSpsRF9XTlYwYy5NdkhfP2FJVWR+ZTklezFFQiNE''@;'; put 'put ''N1hiQTFjamxuMF5EJktiMzlYeC9hNEd9Lk9IPnwyWlldTlg7XncmIT1FXyEqYipCIyIoMjFdQksqW0F1b3FlMTImJWFQQkBXTlZOMihqLEB6YVlAVlZuSWdaVHJ0XSZLW1lnQmQ8WV9aOThDdishWCwoUTxSYE0/PjJsez5rQ0BtbClMUEdsS2QySyk+YHZ5eTVPO2B8N0I5QnlPZFJqcyxvYEpF''@;'; put 'put ''d3BlNHBrKCtFOXlGWGJebissPyUrb24rW3FrVlJtU3olLm87eW1wTSpZJG82XnBMZEViN0E1Y3BUSVVeeXdhNUlETGoxd0R2Ljt6OkxWP3ZseEVaSDhRK09EUVhiJF5SYj5NUElObFcmOn4jRldBbV4/ZT9zL0hHenZKeEAqKCpOdHluTXkzTERkbHJYTz5RPiFnUXcrVkBmIXhLSHVrWWBRbVR6''@;'; put 'put ''b1olZWoqaH5ia1Zxcn0wcDhpcH1kODs1JHQlSGRtbUQ8JUZMeXp0TytheX5GL3l5YE96SEovUG1mOzdQTWJqMiNYKWhEPGNMITJscylMRl1dWT9IPkV3UE5Vfk9ufTlzQGlYNmM3fXxJZXs6bDZdaz5GUyJYMHNFN0k8QExUTzpbWFhFQlRQb1l2RXN4SXRWdyNwMjYpTSVbXW9+YTNZXWgwZ3g7''@;'; put 'put ''TXQuJWY/QF5zKHhJPCxvXjM9VV9qaSxyZno4YntKMUxyQj5CaUh1KXkiNWN2NUpmVWQjVl0pbUtRQW9kfFFLazs3WmpIQ2IwLCxUcHp+eCpLYCohbyR3aFlSWy9xPE9MN0EhISVsWml2MT5vd3wvdyt3QWVbYVJkJXIhWDRKSTNWTnNNcDJtJk0oUj4oRTZ5Jmw2TzpSPUFpd1ZyZlB0KGRZSmAv''@;'; put 'put ''fUc+I35xRzJsNWFbezApcXByRVpELmxJbFsrNy9NVn03KmN4OSk0RztPPGE5OzA4dDsxTVJNYFYwOz1pbTpsNUtoREElQnB1REZIVTIlSnBnSFVFJVZyd1grfTJhQ2R8ajdydTp1cT8yWUhERTBlTj5JRVNkN0A8Y2tHK2NvVzE5REwjKytDe0VLTVpxJTghbiFES112Omk1VVQ1emt5a0NXclB5''@;'; put 'put ''aGhGfj0lXXIrd2AleEpka2kjY1J7cGB+fWcpUl91TV5wMDlbKElELkxINXgkMnhGQ2RkQi5VWi5fM01xVSh8Kn0uTiZNZHx6ckJwfGFkRUxiXWRCOXVCTC4oOW18fT1bcnZtYGtXd3heYFZSbCM6Y1YucGA0U0U6cmx1NFN6L1EqaT8ibEM4XkpBVSNXUTMha1tZaC8+YUlAYCZDJFRDRVk2RG9X''@;'; put 'put ''RV0qbzFwLj9KZjlCcDlDbTgmaFVxSEVSNl9eSG96dGlHQUpAV2AhSVtiOjkmTlduPChUPVpvXjhgQWRoNHZWbz9FfEpOW25ockxbaCFsIWY1ZWxyM3prZ0BydGMiIjNBTWBScyI3NyRqeSFlQ3dORCU6fUhbdHRydFFgUHtuenAyd2A4YXc5XWkxY2pEMlRUbDQxQyU7KT5Qa3JGSyllWlszc3E1''@;'; put 'put ''LzIkREAvZn0mfn5CT0BsNVJsYltkQi9TL2JMMkgmSGJ2QktQSFohSy5rcGQkejswa0BCYzsiZV8vXmR7blE0ZUUmflhuTVArJG82STQlbjAxL3F3P152TXVodndAZ11AcG09WHxAQm0mIlV8OzRXP2VGPmw1dUIrbHhMXml1SjpWdFhtTihdS245Jil4TnNzUFVhPHZ9RVY7bF5jMTV0NE5ZOUU+''@;'; put 'put ''SGVVbW9dVlN9YHIlL2dNXyw9PXtud3BjNlhBRz59e1RDZ2kkX111ZSNNSSt8eUhReUxIaFtzXVI+SmFMWDtafSxMTlhMZC5bZVUlSGYzQjkpR3tgVnlHUHF9UFFwZXlKJlVoWmM8S2g9bSo8TCx0aFBTZ2A3OSI3d1ZVdXx2b2ZYK1Zwblpdd1BJVSRZezlHXWlqK0xwelFMek9QSyF7d0tdbTIs''@;'; put 'put ''KSxfPkQvRG9WKzxbNyhjRUhPbEBwOXhgX0lwcmxGVjF8dUx1KEEuTXw0RWJ1Q0xbcFNYeD1QS2MlZnh2I1NuVDYrYSRIWS8iQXVicVBrXUZSWlVVbEhERXEmRkg4VU9yY31Zflc/Smo5JHZCL1lkOihYMz4+JnVlN0ckP1o1KU11bn1WRU1iNiIrP2NXcjEyUXFsPjhaIzlZYkUrUG9KYzNNPC9F''@;'; put 'put ''KH5tcHolREdGNjQ6fjQ/ITZHbTozTDFlOnlYfSxAQE5xfm1vUFcjNChDckhrcTxJUVNQY2lZX1RIS2MrRjZVPU0uVjx5JVR7W3ovI153UiU5RGpSbnFCUmUzcExFazFxU25ZaEBdSWJrW1NrXzxFaVROd0VaUiZNPkIjKTVwUmplMDY8UUVzXy5tSFgkX2BgMWVSWHQkP3R6QE9KJlI6NGpvUnRF''@;'; put 'put ''Vyk/c1A6Y3B6JUh2flhhZ1RPSVpNaj8wZnJ8Zkp7eWpAO2x8XjckSk82S3ZxVks6bCU3XStVIVtlfTM0Z2IyRzlPOX4lJGF2YXdONyhndyNJd0wvKGQpMDFoeCZMfkBRTzYlIjRnUD9uSUl7Pj9pTFVbWDZ5T3tDZlAuSjp3Zi5rJFgrN31eOlspPWUoWGQ1SSxTZC88dFkuUlddKi9FWC5nKm5H''@;'; put 'put ''YDdDd2BXdkM6eHBGc1UyQkxMK0pQL3k3WFljLGd4UG1RKy90VU9JZGtuJTA+KHYvOzZCO1tSRzY0TSgyJXhXWyJnNm0sel5nKm1eaEdGPyF2fHZwZD1kTlY4QTNbQ2FOT1R2O2BDZ0VdcVtsLls1TDt2QlpUJEtMNDtpSGp7VzooazFseWYqY1lDXiY1TyJaR2lIODZaQDlrRW1lZ3pfd0suQCNq''@;'; put 'put ''dDBsfG52KjdaR0p7e0s3UyxtYSxJJXxHdTdYPD5hKmFPOCQ4bCQ4JTw2OSZpQ0drWSFUOV8pQmY9Ym0vW3xUfVNzKWRyLksjeG5be1pFZ01+Tn5iZGAmLilBZVpWITtQQDxTaXR8KHdlNWgjZGQ9RD1zUWxFW31YO1hlLHF0d2xkXiZvOjdMLyEoJjNFWGp6bDpIYzZGL0h+RllpQ205cVAqQC9u''@;'; put 'put ''W19PKCRLUiZUZTMyQkldPlJ4WzhNXSVeb0tXZyxYNDNgK3tRWiU4KmdKQUtoKU9VNjphJSFbel90KWd7SlpKMEowJHZLKWp6b0VxVlRSfiNybkJheWJCLERIP3VIL1p8W3Q7Y1V3NjckQmxKMXkiJExfPk1WZz5UdEdrNyRyUkR6QjFOIj53Y2xWakIhRD5ZWFIwIVVhSzNzK140SnxENUx0RXl+''@;'; put 'put ''JmpIJVRDSGRqXTJdRCJMfVJVSSkoSXZ8ZCIoMilpbipvYTBJbnglQW8lej8+cnlSIV9aN093e189UT85N0UvTWFKRGsqemZRW1c5OCwicXYmVDtPMChOcDxGPzFrdX5afWFhfEovNUlaUjcubEg4YDl8Rk9PclIjTEx8JjJEVUs3NElmbDllUHo2QmVOOSpFejp1R3ddNnFnQFhiJiovfENMLis3''@;'; put 'put ''RWojL1FgSCwyXm5wQ3FDIVZEUjJeX1YkYDV4TT50Vi97UndSRz9+PDppOGBfRlp9OTArb2chJl1oN2x8ImxfKER6e3AuMVlzW2kxT2pAcWxRd3B8OHwibjh5fEthbl8zP3l2eTQlO2BfLjdMY0xbUihEflVWYmVXQn4lXiR+VUJZTjE7ZFl2JDleanJkVjR0RDZUSkF0OVkyfHBLUF1DJiZLLnFC''@;'; put 'put ''bUZtRylwSGNOMCNFXiRMVXxnODQsLGV1TGMmVTQlcEhhZnZTQ3wkeyg6ZFFwN0pOYDxGYzJ8d3JRSD9PUFQrMjRpVmcrcTArJnE5dEZ2eSt9K0JHNjxXbmskZjR5ZiFIe2JfcDtVRVMpS0hZRGZtS3V2eDJVSGE0c1k3NjxLVDxFUWU5aEE6c2U1NTI8fEBJfnFGTFdSNik+TmJdLGk1SzxwcTI/''@;'; put 'put ''N1FmUm0pIX5ISDNqLmA2Qz8mTjQoP3UsVmZPKzlLe2g1RTdFTEFmeFM8ViNtPz4zWUZhUl4rWUZEMWVXcVNLJlp8YkpocDQ9LC5QU2Q4aEUuZTtHb1pTaix7cT5GOV9sT3tdfEs5SWshSzMuZlduYUBqZT0jcG51UC9DazMqL09mcjlfQi5yV3FYLy47PDh6b20qTGojLE5BbnJSN1s0aEV8S1dm''@;'; put 'put ''U2ZlN1dCZEVHUT5LZU9SWjtPK0t3NXxvOkElPDM6eld4RWBjTjFgeTloamdwNFg5el5UK0RAVkdSXSZGOF1GRWwuVE5SYXF3cCRKXWMmdFExQH4+aD8hVlI8fkltd0BHd1IzMSgkWShgK0YmM2BfJSQidSEvby5EWWtDYU1KYUJnPiJAPnI8dHtUNnohblpmNCRzfFlIXkJIYlAkTmdAQyt3ZGRt''@;'; put 'put ''OCNka14lMVosV3ldbn5rZmckQH0/emZrekBhJFtqXnNhZE5ddThIbHJ8e0Y6d2V0NjhjOFJWOzZbR3xsSXVPXS83NiJKZUxLRFolPT5NM0R5fUsybmt0MGxPM0BgPEArVVhOMzx5I3tbcj1TeTJlMTtOcmd7UThsK3RAfVZoST9NKm5xUShEKCJ5PVs9RCFdRWg9QVNCK0pQIWpVLHVuNDxFdigi''@;'; put 'put ''KTNKREpMSHNkbztDIitHZlBjQ3tTWS5lTT1ANE99bSZyVXdeU3pVS1IqOk8qKHImX31MOkZsfmh3Nm98ZnRUW05ed2BYZzV0NV03PHV7Q3R5bk4kaSxPfSlreCw9dHNoYEwwdHhNQEdGX3M0dzo9KXA3WHJMLnhgK0Q1UmJzMXZ7QCVbPXxqRStGVWMrdF95TnhNMGBIcipuKDlgdzIySjZQd3h2''@;'; put 'put ''KThCJHRPJm1pPFEiVH1LL359ZyE/R1FQS10uQit1WGNQcz9oNXU5dEJdMVBvKCRaV0BDfUNoPyldO0psMGEpVT9+VTJ5JnFYLzlzJmQ2OSs3Tn0kb09eTSMsNiNRNT58Imw2KypoXlR5Pys+OyZ+JGQhTllLU3lYS29xX31pcG8wR1ciUkRqKEt0YWkkQUdiUSRkI3BTX2k0UG5NYSFvS2JySEhr''@;'; put 'put ''SiNFVWc/aC5mZ3p3WX5vTDM7UWNPOks8KVtaXnE+RkRKdX5kfWdOMEw0dml2SVoqSm5FfmUyNzFpRU8sN25dcEksKiwvPmNKWmJvOEF1R0A9OSlaS3gjW3tEOiNjeFRvbyV8VEswbnQvPStrfFpwWlJIVWNsOUdIdlVlS0c/Om4kMDBIT0E8QV5LYy4+eHVEbWd0Vyk1KTQpXTRsJCQqIz9eOXdD''@;'; put 'put ''a3hwZjw/TFNBbWYoaUg4PVRic05AYkshOlcqVDxRK25ZamhuRT05dkojP3FoSzhFT1BydHJpM1MxVypKNkdIc2MyYDBtcWIselRYLz1uUC9mQm02NmNSRm1OZXR1KXMmY11bP01YeVRaUDlUNSEpaldnbURXMSR0ZC8pPH4sQEs0eGhZP1MsNThdXVRWJTY9MGE7PSgrQSIoWyU/dS5bdWU2fWpq''@;'; put 'put ''RUk7K1VhcURWK0dqOEFabEg4KyMiXkNedz1nZndYSGlMZGBYTlhSTG4mQ1pefngibXd2XWZLWzk6amMxfUBWI1R8MTpsUkVvRzklNTNUYXowSFR4QSRkeSQ7KFQ4MUd6JUZ8RXU1WzMqS2k1RkNUe2s7OVtTdyZNRSp1PnJnVz91YixGZkZsMXd0TkZpWCF9enZmaEM5ZD5rNmUvLzl4UWsrRl41''@;'; put 'put ''NlFtWTwpRzN5Ll80SXlGUlIudTBHMXw1QzZtMT1WOHQyWihscTZhZSomaisqYFteYSVsPHlta1QrSlJ3VnlVPVlfS3pYWWA9eSY/T2s8cXRxKCshUSZRJjd5cFowaHkzWXBgSiEra1ske15daklae2o0eUg0OH1tMUNhL20jbDJ1eyRfND54KnshM2JhbD17N3V3N3c4b3VzNllVe2FvZnVuQyNa''@;'; put 'put ''WD13flUjIkdxZlhlKj5YKWR7cVB6Mi9DdmImdmB9SChCZjJMPXAuPTF9WUM0T0l+aWhgejIyZmJmW2csUXYrT1tfJTFMRColSU5MKmxHK2JQdk08Wn4/aUQxQE4xOj1ROWE1eW8jP2ApYV5DIUlVUD1XbG5CNyUrWSZrQXdaTkMvRnJJOEkkRWY3QjR3YlRrJlE4czklMyF5RTtjWGFgeC5QNDsx''@;'; put 'put ''UnkqfHRUX3FweHQwdC4mSWVxZSEzXlh8SD86RSMuMGh5JEwpUClGb20sVH4uUXJuY3xNWlFHNW8/LjA7cFBpJlgmfShEflM3UTh1VzlfbkNBYyRzWXtNd35PbW4yOCR4OUpgJWhfNCsuWXk5ayhjRm07d2YrVF5ZTFZnP0BgbSslJT0ycjE1b1N3OnQlVTF4WGpBa3pCfC5KK0o6ODdtJEo7MkRH''@;'; put 'put ''OG0sTUlyKltRWmAjbHZTJjRUP3g+a3JfUk53SjpES0h7M1RUL2NIPk5ieS52X3RUV318eGhJWCM4T2Nyci5aYzQoIXZFbEUjajExcDlBNj9fYmc/PSFCRWJMPyNNNz5HT1l8MXhqO0g3ZUdvKSVvPnA2ZlNeSlE9KktxP0ZTU1lESzt7LjR0WHlRU0tNJHlzfCJbJHtIbnIkbm1eQGQuYCxmd0h3''@;'; put 'put ''cnowbjlPInJPOl56Nj81eUlyLkMldWRvIXhQbE58IUdvMWx5STEvPURVTGVARDVmblVeOjM5QThicURHMWdLUV5Aa1N1LnlhQEFmMWRPQntxWyEoZ0kxT1FPQlhEVEomRG8sZHh5KlI9dn5PbDYjR2YxcFtzeDJAUE1XYj13ZmdiR0hsRi9zXXVkeUdZSVkxLnlkNHNMWCM2WTxoPWhqLlBXSX5b''@;'; put 'put ''O2opWFBzanMkIV1WT3gjIWZJdmJZYkUxWSErRmxIWj17RjdvPCIvMVNWcSE5fDUyVzs+NS4lYURIKU0xTUw9KCJefTR9dXp0SV00Z0tnPzZTZlZXMT9gZThWQkg8KFl+UytMJl9afmA1RkwsUk00JV59YD1PcVVRaiV2cDQkKkNWXmBSPHxqcG4hTFB7IlltZGN1PjYuMDZsfjMvPXh2QC8wcTdE''@;'; put 'put ''Zi5sfGU9Okg9TzZtWXVEZUl5NV59ZmlbVVFbZDpJYXAiMUA8UkJYL2dCeSF3e1ErJU1yKzsoYWg2JVhlc29vKG9heHt2Tn1WfVA3Sz15P3ovMzxaLHshOzd+IW9oSlh5IlFySmosX045PCJhSXYxaEI0PHIiR0U1dSJEKnhDeyYraCt7XXhmX0xPZ00oaklANEslfWp0fSs4OEBVT1p4Q31jISVp''@;'; put 'put ''NWZeL2tdNU18PSZhWEsrWyY2WDwmPFpYT0dNe31ePWthUGxvXXBKY2pwV3lSe1p4I287UHp0SXowSWQzRDRBPDttNXtmOmo6IT1HfG9gdkZpWissIWopIkMuOFZ9TkIpZW8sd3NeXWBEUU9dWSk8JTxKPjtSXVJVdG8kM1c3djUiKGpZMkgheDdOOGtQRW1PS3BgVj5eZjpBcio9S3h+Lk1WOktn''@;'; put 'put ''YkBnLndXUWh0SV4hVWVpQXg6T0wudCRReEZSVyQvd2wkQEJoW0xSeXI+eWBBJiNIKFFbdSYxJFhbTWo5Vm9WVDUxWldjYE5iW1dZZDZzN2JZQEVMVXNJU2FDPnsvfikrK3ltRjxwaVtPXkJnJW0hIT0qRHAiTjlEUDEkIzhPQywqNXRsdy8wI1gpa2NyKC5mJWxpX19LZn4mXVYvT0p0YlJVRjh8''@;'; put 'put ''XTFLJltiM0s9d3hjTU0yL3okNyxIT0RJN2s8X3Z0UmlEfGQoeGtGLlFETE53O2JbWil8Ij9+e0YjT25UcXN8XzZmI1l9TEQqI1J0ME5MbWtnO2ZzQ1c7XiVrXWpXWCV6JFVQSURTaCQqMWQ/Z1Y9N3AvbiJ2TVRpdkx7PH1gd2ZRUF9WLltLSF1rX21uQCUwOTIwNGV7OSVyV2EweFBmPFMqTjY1''@;'; put 'put ''O1U0NkRsR2VqLHp+OV9uMDp1Uz9lLHhqLz1JZF4/cFhhPiwvdD41K2dPfU47UkNPeWgmUzZ0UElEIy9HTyx+dTtZQD8lLFNhZG0hOWkzYiUkRUAxYEoyS18saUVjOUVUbW48MTtTdWM2RWVLZEw6QiYsZVgzQi5JQUVLZWtSS2puKzU5THpSJC9uTFE9IyNpXyFiblJnPXZRZyt8alE4IzlMWjVv''@;'; put 'put ''TUYxOi5eN3JLQncuKTVTe0tJbTJGR3ckTXIqaFQ2Snc9MWRZRVtFJTN9PiZPZkoobmh3XW9QaTJQOkQrZWwoU3Qhfi4+QkVmM3tBTmxXJilWeHJNOFJgZis/KTRvYHw7Yn1WMENrfVFfK1NbNnVfVmMqK1UhV3pyMT5tSTZ0XzRZTlZaJW84NHBfN2EwKn0/d15JXy5sRHg1KmJOSW9xKHImPygy''@;'; put 'put ''KUswJXtBTHVtX0x2SlorJmtQUWQpTXROXz5WW0pWUF1yLE1qIVh5O0NSQ0h9Nz8ha3UjWXZNbzopM1NpUWVfSENpPl0ramdSZkUyUlpwVF1QJUN0bkRfQF5HL0cuKHIySSNubDUzJGQiOi44ODpDenpUbVZGQmBNU2g+PlA9RF0idGA6LlM8JV48TS9vJmI5eWp7Ky9FUkglMnFYYn1TdjBdanRg''@;'; put 'put ''LD89XjhCQnNlMFpPJVd9W2cwU0IuTyMma3tRbVRHTW45cE04VGNyMH4iIjU8NTBhRigjQyRMKCt3OzpXY0xYfTFhU2k6WlUoUDdtSjBAeElDeXQ1akNuLEBidyREU0x6IShwZVRWckdNLCFaN1tIYl9+fXNhZjhXUzdhIjAsJk8wenkyLyRSaHtpWCNqK2Y3djxQfloudCp5fl1oLEF6eVU3eDlM''@;'; put 'put ''bCQrNDhqRk5zYSFDTkwhX1dsKTxzKiNeTmFdK0E3Ulcjbmw8MnxmZiJPKzgwSUpkdHhmZGVWRUZDMFlreT4mPUpERXJGa3c0IXBNJEEyXWQwfUpJSHU8VVJXaUxVJmRWTjc8RU1lQGd7KzNUTF1mKWY2IlgqJDJXeDZWI3FnJEhDSCUmMGRmb0xlcWNBQFJ5QCZtdUZFIXxBdy5YR3skfHBPQXtH''@;'; put 'put ''PFk0clkpSGQiPEAuMjRCTjErRXo3JUFDW1ZeX1YhZnd2eTpyKGRpbzZPPDhkKiNPP2ZdUzwreD88VkRIN2VdT0IqQG9deHpXKzRmY1BHVjhEJUxLUVpSOX5CSl5je2JlPGkpWyRvUDAkelhId3pwKEZLWWZaYzVUdDdDYz44Qz1aPE1SVGFLQXlfYFpvQVtRfFJjXkJoWm56MkFySmdJXntBa0Zb''@;'; put 'put ''Uk90K0g6ZzhRQkA6I2syRzB4YWR9T35aUl9FQ01COVVWNylSTl4vImBqIUlBO2tyRzVrWmp6Vy92ck8oMjIweTBaV1I/aVZqMFh8Z1l3ITk7dTRhKEdSbnJaRzpCbTlzVyRScmU3e3hdcVUvYGk/XWcrYiF2MnMiQ3J6eGN0Qkp2Ri5MXn4rdCpgQko1SXNpNjsoUSw0c1JCTzpHZX4pVVcjaGdt''@;'; put 'put ''VXEsK2dwZ3hTcnh2NlpuVXd6UTJfNmZva3VpeF1xcGJ+SXNISDlJX1BKZlIkWztycU5iVWBYdUJ5eFdFeUQjWHRvLHdkaD8jT0lJKCkxYWJwZ3AvdzNZKEZ9TXY6YDFBVDA9QXZodDM9dUksRCJEfnRmIXNaMk1tKHJweiJ+JVVGd2E9TFU3JFIxSVUuQERCUkx5XzZUbChEJDJSdHxnISthJEEp''@;'; put 'put ''JFtgXTRgflZzV3c1WjBUMyh6aG43eD5iIi44OG5OX05hOHdSV24lV0lvTGorclg2OCZKWXhFLHVpVD9nOHR5IVRWeH5Zai9TeW0oQyYkZyQ2KEJvNDd1K1Y5P0hfOU1YJHFzK0V3fjd+RntvcXVpOlhyT3cvRnxjSlorcmw1RDNeVH5MaHdOZTxlKWkrYWFNc3xCUHFhTUQlaVFlandySEkiQWoy''@;'; put 'put ''JXg3R1t9JEx1MWY0SDEibnp2VyZ2VWxJM1M/ZE90U1s5dGZdKyZBSmJNNjNjMFdYSGA8JUlPSl9jfDohWmZwL2d+TXFocmJVYTwwcnlaaC8kLGQ/PlA1YTspPmU3WEg1TT4sYVBuVGpJQj1jWEVLLCFaSFQ3LCtoUEZBUDhfSHt3Ol1+fVk+V2VIfltdWXxBPUpmOVVGWCtqbkxifV5rTig/Vy9J''@;'; put 'put ''Vk11dlJeS0xoIXl9aUhoandqUHVOdGF6anVPPS5YYTh+dGJ0dk1YRVEhWV9QVSV4SE09KyF5LFB4RU51PGZuO0E0NzkuVUFyTi9CdzhDW19aMlYuc0t4UylDfWd2RVRENnRaZyVOIVlDZ2MxfmF1Wjg1VkJDeF0jczR1Q3pqKVV7MWpuMTdbXldeRnlMQSkuWG0pfGt6eSNgKX1mN2t2UXtfUTJZ''@;'; put 'put ''ZC51c19+cjppc1hQe15+NWg/SFF4RHlBWXpIcFFfSjpUMz1GSWM2b1ohRHNofiZXLjtiSCFJIypzLltdSnhJPik/NFs9TUMsVz1MR1dmbz9Lel5FWF85Vz1TZ2UxM2EvViwyTHxELiE9OmA8Zz1UVkI0PWhCQz02dEd9dEA/SGx1akFuYW8kSyVkJnteRSsqeGVBUTU8WnVIO0IlW09mZUledE9V''@;'; put 'put ''RjVaSUB0eGh1Y2Y/I3NDMT43MXc5L202S0ptZUg0dkszNU1RZCtRWyFeKlhgWkB6TUNvcj8kLDBwPSYlUShWeUZ1KzcrOTh5O3xvUTMoXnZ6OTtVdTNVJG1TIzM2WHBKcC9LMn1AQGxFcUJpWEZKOHxRQHdETipHSTFTOmgxSz1YeTlgMTMuenczIz14RSpsbGtQWGc/PC92WUpsdlpANkhQeylQ''@;'; put 'put ''KHV9WSY4In1UQWdjbDxGYjVuWCxhQl0yR1labzZQS2RwVXpnNSgkT2tZZEM0dzdwSVRddSN8ZWQ+P3pRYHhYdXl+b2Zqd2VrdW5fPkJuM2txR2FBPyxJNVp+dzFyc2R6UzpocF8rN3ZxPkdJPl4pPjR5UEZaPz11c0l4KTM5cFVwcUR1N0lPfmgwQDl5QnZZXzdCcnRPRUlTaT1uQHNRQ3EqQTUm''@;'; put 'put ''U18reUxtNl1jOmh6Nz5yNWVZXSVMIXI9XVNJKFRGUChOJSJWZVZRLFBAUTdZPF9XVXEmeGYpLz14ZzROTkdOLCVHIUU/LmU8L3g9emZnJlp6Y1RTemciOTF3OGFOZyoxR21Gc0x1bzw6SWVmciE/WVQyOUB7XTJfYWM3US55Km1hXy48PXZmL1l5O1lnWWxrZUxJZDVtZyhKTDc+YkB8RT5qQipm''@;'; put 'put ''O1FNZWZTZkwsQnd+PH1VRDZocUguPWlPVV83PX5FYnUhZUlzX30pbGYoSWh2WSUwPjJ+QipbbEVBLz1DWEJJeFMoSkdbIyxfZjpqIjgmTz9TeiU1SSZGNVQ7fXYlbFckQ0lgXSN5QEY2KHhkMl95Un0iSk5OZ1oiSFtpJDR0RXcrdVIpKTZKT2IoRS9YZTcpb2dvfXhVUVFyK114Kl9QeWlJcUhk''@;'; put 'put ''aT1wTX40WXZKIXcrRmJFUnt4Sjs7bXBMUFJgdzJ4VWlxYHJeOCxkTSs9U3hSVCs0WTpgNjQmISReI2tPTHtTd1Bhaih6YjFQMDM3VGldSH5pbn5CKyphQC8pI3M5a35jcmc1UmZyWlloWDtyeSYoIURiRygpbTkhQDdncWJ8c11qMjpdIys2Z1FkYlJ5fWpRW2VgaXlRd2dlYWF9XlpJREVdMy89''@;'; put 'put ''SiJtTSJKelVKTFFvQ11JVHUuKFEmS2FYZjd6dmFGLkB+eyRzd2o7dDBqfFNFPUMhYTFmfXFBYUpfenE/dU55aCs4OmRXaUokMD0/ZUNeRnpZR10qZUB0WG10I3FDSUQuJSRleTI7bjxyelNec1kyWyxFPCxTbEElbTI7dDUhLlB9SHpoc2lVLmQxJjlYOEw2azFQcjYyMXdtRjFRMHRINTNBT2BG''@;'; put 'put ''I1J8QGQmTmkyPztyfEhWPkh8LnRYOmthJTZ5Sl1zKUBXI3dmVktobGd6ImA6KkhNZ25sI1g1QUdYNjpSPiIxPD5JOWxlQUBrbHBNOGh3YCVmWmslKWFrXmR8UFtaOFtuUVN2R35kc3MpfG8yNUR2PVEqUUxxUTBLWzJmLikkVjlxbDd+ZVF0U1E7ckJjZl4+Ok1sUFY3UUJpbT08YTVwLDc0Xis0''@;'; put 'put ''WVlEeytzMyM+MFYseFg5SSt7RDNdZU5BRz5yTmouek9fZmh0eXUmRz59WjolZTM4OltKcE1IZSx8X05ufHw0UShKcjYhWiRrZFpAZEk+dGtaW0M1N10wb2hPQjQ5TSltVWB4N1ckM0BATChBaiskeyZoWmklJktuV1VGRSpybzAyVVFwTXJydGRROjg3TlJ2PHl4Qj14RWRNRmhsTjpwTitJVWYj''@;'; put 'put ''aWlLVHM5ckdmUGU/SW1NY1RPbTAzP3t9VkRIJGckRj82NnNgXzhbLjJnImtbWyUmUUxlOzw8Vk1wMyZBSUs3MjZQUTtWL2lyJSYyX2V1NFM1fCJ5QixZdTcuZE4iUmlaTC5udmZ0dSF6YX5WMFdlaTVia0NrZ1NpOTR0Xls7Y2crPGlmWXpkdH4zKVsmPC5UMkt1M05SdnQ2blFVcFkzNCRLIlkx''@;'; put 'put ''PWg8bl9rZTxLNXBsPl9vWEZjWHUkakw2QjcqXSZhTHIwUStmND9MdmAydS9RfGNMbitJeUZPXW9CbWxxWEhPYC47UFsicH47bkVAflpzfl9XWChGcipfPDtGdSl+S11xMis3JUtSSGkiIixOfn1fSWpEWWAwJiZ1LHx2XyZLOHo4dWM4WzZRU0BGdUAqKklaUy57YjZUNVh0WS89WFlYbnNfMDlf''@;'; put 'put ''YU1pQFUxbTA0WCs2dGJXNEF6VyxuWTtGa2AyYlRbKXV4NlhFTUA9MlkxWj9xeyhmLFgsPWZDQDpGTTBjTlF8PmtwREc3VkZxV3VZaDJuSSZyUWVKRnlmR0hFNzM3fSNURkluRzJ+fGs/PDUrV0JZOEFHRER8KEN7TDsod0VuPUN0Sl5aQzF4aURvPERCcy5qWWU7ekpzek5gLj9IOj9vLm1ZOj5o''@;'; put 'put ''aVt5KzYwXiE0XyZdTldDWklOS0ZJWmdfPCpGXWBnMSV0Z0NpKHZnbktJe3Uld112P1Z4eShgQmMqcGsjYWlEPDhlS0AxcmhbKnZXM2xSejkpYkZZM2M7QkMpK1c2P0hOV0NKUng0fCZFT1l1dWp+cjMiWWhAPWx1a1RIcnJhPlF4RDcvTHE2N15PXXBuLklibjImcnAuYiV6YzZfLzB+bzdAe0Y3''@;'; put 'put ''aD8oW1hbamcrbX1sJnsmTEVmQDFpWWNQbSFDdUMzNGFMP3M7I25kMVFXdmIlYjlWcDojK3NWUzt7VGBKS0cqR1ZRZmhNP0IrPE1GdThkQDQvWUlkcSVjYDZ5PVE1S2x9MkJ8NWR+QlVQdUFZSTo0OEk2VzFPbkdraFtvQE0pQ3R3XUUyKDVhfkZ3IkszajclfU1NPHFkPDUsIVYxYjZXLGBgSyg8''@;'; put 'put ''OTRbKE40aHp1cSh0S3VIZWB7Ril5LyhRQjtCL1t8JWdTPjVpeUExSWlzLFYmKCVJdCw4P10pTWVFbjxsbndGOy8uXyM5eitLInYpSiMoI3ZodC9uQi8kODlNR1VIcyxwNUVfNTR8KDlrTl0+TXUqcXY2b0MoUFtlfSNRSnpbOV1UJlcwcTVTMChzPl1ndFhfXlNANyFHc2NbeWAsL0poW2xEZmdP''@;'; put 'put ''eClMemJpcUpBIS9GSDIlZDB5R0dnUCI2LzJ0X0REbTtTVFk1KjE3TVoxPkZEX2RnQm4sY0JDU2VFQj94OklHTDg9RDJ7d3o2Iz17TXJzcGRsYDNjVio5WT5tYEBqNipOMUBfQ3o3Vj1WZHhGYktIP3w8bFdSRX12SEczZElOU00mPDtNXn1FUToyY1RreF9iWT0mdzQ/Jl1EPlkyMlU1aSZze1Eo''@;'; put 'put ''cnhISTsvLEs0JXg4Q15HOXF9N2lNIkcici9QdyI9fFtoRGVHNUBARjQxRWx6UjQsTngicjwibXNaWDAjIm0mYXp6Unohcl9TdjNkVXszWyExNVVNMjBZQkdvM1ljflVjeFBwXkY9QjN4WWxAQk1tcWJ8XlVNVXt4TFZJZDdhT0Nze311PShrUlEidG1yS2xlblt3TlUiV1tkQlRHMF0wQH08dj53''@;'; put 'put ''VyJDTjdXS25aX3o5OCRFdTswIVkwcFBDYWsqfmMsQ0dKY014emVrLlRZOXliJXU2WV5TT1NqSSg2ayN7QWpVN1YvblZyKUY4OVtJW0U0aFRbZHc2QnUwY0dCUFAvRCJxcS9UJjl6PlMsSiYlRkJwdHglI2x3QjY3JGcmcXtEbSg9NVZRKnFdfTdhbXRROiFvTTBJd30rPnRTPUcoVnk5aEpyU0hQ''@;'; put 'put ''XiFrbVpHZD8jIXsrTUVqeFhrcEVtMVVsdT4sWVtmKV9hazclZTV4YiVlTyhpQ2Q8R3RMJjhLUE1kQmU0aWR8anUuSkt7Zl5EI1diS2FRQShJXT4oXjpJeWloTHQ5KloyRChTJUR7L08mRCMlWjNfZ21iMDwvIzYkRExvWHcybmpNe3lYX04hYkhoMz00cCMqTXhCLCNySW02RldtazxkMXxlVGxo''@;'; put 'put ''Sn14cjd9InwyfiJ8XmtbU1ZYSkQ0TGJyL202PSxfTURqWmpyQUQ3Zm56dyJsZ1pZSUllRzJ2KjVAWF5OKmtkS2JWOCViLjV9anw0XX1ETFFtWGRLNGU3Mld8fE9PVH05RU04cDMlZ2ohOz15REQjYGRAZiUsKmBQRSshIXJkS1tFRDclVlVaZiN4SThKZSpaeSFTTU9nKnF4fWhzQig5L1c3QGJD''@;'; put 'put ''fXB+XzJmeCxyVlVsLDBNN0JjYHw8bDZNISV8PGFvX29sc2hXJXgxZyhQeCR1P0FJSGc1bF5yUUt0M20yfkB3PmV5ezdmVVAldlBZemk/JEVmZSF9OXA9KiZsMVkoPVRiIU1oZlsoTiV2WHt0KiV9dSpTVi86PF0/al5EIVk3aDBTNzI1fEohLypyN1kwYS5zKSZ7REV+fDpAOW9fTSt3LG11RGV8''@;'; put 'put ''PWNacjQ0UVE4SDZWWGIiTXh2ezk/PmhqRjVkZ2FCbSQrJXVVNXV5RnppZHJLPTBtYiRZUGoyQF5IRHt0OS45b0dUeUdaTjZWViVjJFNCcGJzVGtjVU0wQ0REdERvXTg2PVVFWzFefmsqZz9Za0JveHlGZDc/Z2UkclpGWls1dGRYVWoqMXVAVSFZNS5pOGleIi47Wk9QMl5oa1t0LzV5T1BEV00u''@;'; put 'put ''LHNpd01mU1AyS3kzYVpwYHR0YVRyK0Q4I0tLeXhRe2l9QmNZNlV0dko/aV1pQzlgYyk0Q1lsdFViN1IoRWpYO1UoREU4IkpuU2dPIyorbmApPXxgfVRWMjBBXT5bX2pYd29TZnh0PG9wOWNKLGU7MytTSiR6ZG1dd3pOMTFdUEdZV0J1I3FxOWkpMiNqJks1SE9hWF43MXwscip9Y3dpR2RMbjwl''@;'; put 'put ''KiEiajA3UkYrQklaSWBfYVJMUkxWLlZlKT9CXTp4bHQ+dHwpK2twTyguKUxxdXllcCFfZjBUYjI0OTQyJCkvcHo+OksvL3w9Qip5RUNwSnI/N0FzK3Z5e29zMXlIXio4Ikx6Rm08OEdWd15OLE5tSTNCQ1YwISVEfG0jfHpucj0+VGlON1RTTS5yWCNSTEJ8VksqLnJzSXNhK2VrNyQ0LFB+MHkh''@;'; put 'put ''K1hSZVUyNG4/VSRIWWxdKV9sZjN5YyhaSSQ+RnJJLzVqPXtSIW41OEpVZHdvJEJBa1NkXSJaLy5wJktAXkNpUTJZeC9GYUlUdy4sc0ZWRiN3alIyUUFAaDN6OFpUfXI1d1Z0JGpXKSRJY05TYUU/VWlyZT8+WSFEaTd1T0VEQUxzUEQiezN2Q0wqMShIPUtqR3gvMmlpQmg0WCNTMGdoI2VqYFt7''@;'; put 'put ''SFMpYlVXWXlwYzBdUV9TaVM0clssYjNaLm9Bdm1lO1VdPDM/dCxuOGZ6R15YJldVQHN8Qj04InRnNUplITRYNm4/KnZ5ITB5NyQ2dmRofV4pQ1VgT355YDxNKU1zLCt2OW14SXYoYUVyP1lsaGFicFE5O3JXU29pazVDWExpPEoqdk1sIntpTm1CRl0qMUdTNEdhcVk+N2s/djhENm44MHg5V1Jd''@;'; put 'put ''QHo8bzkqeXFvajYrQF93Q0N5VyFPbU84XTY7RSpmW15GTD9sOUdERmNkNiFvM3NaMFVkcShKPGdUUGJ7b2lbU1djfChuPVt3Ni9YSTwlY1ckYjg/bjxwcE03SltmMF0vVlMmYDBfXSMiSV4zYnNFLC8zQy4hdmx8bnxxZVNtWXJ9Tjh1RkNlSiwme15AKUM8STkpZ0V8Ml9hKH1KaExLKzh3Vz0o''@;'; put 'put ''I2c8KG5FQzhJWmdTR2xlZUNTUUMrI0ZHOTNgaDxrPC9XV1hbeEI3eFZ6T0Y9TnpdMktwclpuJFB5PmlpRThUOyl6MFNubWhBJiM/QStuKyg4di9AXlRBSzVpKiFQQDg6RnJGaiohdiQyfXdyXjgmcDkvc2UiM1hCb2xSSENMYTFeR1lqNUsvJG9oL3R7TmJyfnwkW2EveiZVfVA2IVNqYXhOSHw0''@;'; put 'put ''I29JdnZgaFJSaGk2QyxTeHhaUk92KzRpQmsjTC8wQ1tYUnZrL1NmVkRIP0RDbWg6RiIwMEVLTiJ2N2tWSk9SbisyRWFGLy5gVkFKX0NSWEBWan5RZWF6IjwrWF5DMUNBbUppPUIvSXQ7QGhdeFQhN1VkS1dKOHdhL2VhTlJqUHZuJSk/M2lWR3FQV1BKdkdxTy5ffC9kOWc4MjEwIT5pcWZdK1RR''@;'; put 'put ''aGllc2VTMlkxdUQ1JF9fYFRgW281eE15Q0skZkNMckhUcXBfWEo4TEJVdTFXOVheckc5ZDplbEYwd0tae0VwPX1MXk1FTWwvZHBAUl4ucSxVNzAocDFZMERkPGk2SVlxRltFKTxgSmolST1pUTAkKTR1ekssfHJIeUYsK043TFAxNCIvIiRWLiIyQyVkekFKSUIyNGxlcGtLKkxQJTB8WHlqWiVK''@;'; put 'put ''OEtpJXBuKjJ4SDV8T3xDc3RrY0BCcW88Uk5EIWRLPVZgI1J7UF9kczpYZG8mZEVmXTNpMGNmRXMiYS40cz1jfXcsTzplblJ4MVIueUoudVszeUQlazxMbi83OUdUXnY3L21lZyorYWgqQnJTc2JZaVo0ZFBtMWVTdC8kUz48TCp9czA3Z1c8Xlc+e3VwK11FZj8mQDI7KiZRTjtbZUJIYDcoOUZC''@;'; put 'put ''UmwqLlguKUMpL25XaztIJDo5X3dXNik4KSEjeH4wdUdIc1A5WzFHOUBmYmZVVUkxW01gUTJMdUBGNUpQd1FHQ1Aha09ITFVCXWBsK3dRcHRWJFlhUTVYbmVbIUkjYCQ7OSEvT3ZHVyE1dFtUMWt6V15EWipZJkxESEhbOHhjZ0dYRFJ0fXk2SztCWk0/I0p+UG1rIUwkd0dwempQQ0VnSE9pTFhe''@;'; put 'put ''dzlpQnZLWWFnZFtyJmoiVFhfLzlpRSElZUAzVEBNc15efTl4cUE1dWE2ZGVIOWNUZm56T3tDYURtTS5tO2JqSF5INWZPSXhiOjxCYlFeX0VJTkN3WDdsT3Y5aVVoTl5vPTdgfSRuan5nfV0uWi5GPWlOUmNFT3Z2aUFJS0RPdmc7UXcwXiE8WVojZjxeO04wT0gjVz5NJCpgazc6eXhYVSxQZGdI''@;'; put 'put ''WTM0VWlaQjYzakJddiZJSCU4VF57OkJHN28pNkQ5eWAqPXAwV1dLNjFRUjx1JW5OfnclbytBT2xDTX02MVE3IzVRaWtedVhGcX5RXj8hJXMjOyMmMVFTfU81IWQoZ2FKfjZ6bSUpPXhIejssVjBAW1VPY04mL3lzYTpObHYoXjkwIUdGRTpdWHdwWDo0YTRYRTIyUXtPMkV8MEs9cUleIyVYc1ZU''@;'; put 'put ''SSZqcno3eCo8XT9JZ2htQDBvKmFBJmFHbEYqU3RLSj8pJVU4UGtoc1ZgQHt1IlIldm5kbXlYK0NVI1NCOlJTajw6YXxGbWJydG0sNF5JdyNpNj9LTTlsYSF1MlhAXyRZeCY1UEBMeWQrTnk/fTYzLE57cFp+WUlyfUwrPDx4TGEuL11TdiFTKD16dj14OS9nJjEvNGlsO3JndXE0R2hNVnlkZ3Jl''@;'; put 'put ''RCh6dkFDMSgiL1tnWyM1PHd0OzNUNSFxekJ9Pi9OYkdWVUEwU2lGPyVaRVp4N0c6IS9mbWQ5QXBOPjdoPHAhS2dDM3Z1bCxPS2FZRn0jYTRZTjZVbEZvfWxFS2I/aU96UUdSKSZ3MTwqSUliYkkjPHFJdEo1SVRFeXtmcmwxSF5+d15ZYEddeipUKV5vbWFaQCVETUUraGVrYGFZcmorNTYuVzZM''@;'; put 'put ''M11sZCldWz9UR0wwenFhcndXbGIra2VEOCMxbXx4RkleYUZYKmReR2VrS2pvSEpsOj48czh3NjdVNGo+XzVmSz91MmQhbz1KKnVxc3heOURgOG1FIXhlcUJFfEJ7XTc5T0g0VlVZaG1WYEAjM1JKJVpCOyM3OVUkNzYufHVnTVpyWlokQC5fW1o+fD5Tb1puOnBtPUVCIXgvJWA9Pj44TCxlZTMq''@;'; put 'put ''ZWU4IX1PYiw8W25DZ0QzTUt6eEMlZk1hZGFpLzZmY3FebXttfGtpeThAPWFRRDB8NjxkaW8wUzUmL1ZzPSwoOzFMPjMvOCopOzoiOE1PPXYsMiM0OSEmUXM6YWV9emZZX0tUUn1uSnovYXdiPi9VMVY9LGVlYXZbNHBKUHlqSTwzbjAwLy45V3RAZTtPV0xuTzEvNDZzKWVsR1oscVB+LClaWjxC''@;'; put 'put ''bVg+a0JKISExV3wiKGYhZjd1OXp9amw3Tk03eVRhWWRXSDI9dEsvQ3NlPT5gZUY7XnkzYGYva0EofDFEa3F+S29idl0ieyw0OUdZeShGW0o5V15RZzB8ZXQ9eEFHbDxZLiQzN2VANkQ7KiMmO19qK2c0UWJsaUp1SChjSWE5VC9eS2sjLlpva1RhUWIpYnx2anM8Q1JsV1M9MioqJkEuQWt+I0te''@;'; put 'put ''a0crRUFVKjhfdyE0LEZySmNDQUtNRjQ7MEVMPEFqKXduUyF1PSRmQ3ZNOTRfYD1YNUw5NVJ9Si5RMW9vYT5LXzBDZk9fcWxPIVlddk0/LldIdSVXQ2Y3WDRxR2s3YSRQO1k1aCFsaForYUJuPzMhTzl4OmFuYEpJS29lVmlkekhMYFE4amIhd1pZU1tWZHovQS8iOVo1fWhUeTphU3lWR0N3SV5b''@;'; put 'put ''cnchLGt9Uz5vJEc8dXtNVGRSVG9vcDJBaX4wX3EiNE94dUYuZnRsdEddV2cpLjZ9RFpjIU81Y2JJZEtDUmsxX2o1IkBefV1zUV1DbyolMUNoWixAe2VLJlBgamcocElPKWlZLzl8TkM6Ji5nUm13Vz1kKmo7PHpxb0NiY1NeOGIkVz1nXX5uY1RyOXJ3ZWA1P18kOG5xZ190eFhIREZ1Rjx1S0hk''@;'; put 'put ''Y1lLIUA4b1BGTSspNVtpLzssY0l1OH5rVUZhJXx3dUw2IyFMJEdDd1A+MUpWJXsxRm9tJGEpI3p4dVVHaVdFLkx5WytONHxOImJ7PGglRXAuNEJRVGllUDshKiUsfDYuZGdjKj5JMz8+RytjeHgvLCY/JlI0Z2s/alNqPCIvRD5GW1c6S3BOM3glR2whWnQjOissUjxNdz0vXk4sNiMrcG5vN0pS''@;'; put 'put ''Oj5zTihge0B5RW9CPmZhRXZgLEJKXTUpcEImQTF5XkosIntdbXkxYTFWPUJbcyEuLCUxQi45SXNPWXhRekVvKTNGISsrY2k6aGA/TkhFd0Y8VW40Ozl4P319W0Z8LlEpTH16RGQrKV5uaHhCLipSKT16SjFSYlRebDVQKCQ+MkxYMysie1gpPG4lKVhjZDF0XXA3KSssK3M0cEs2MWpJK0IjcXR6''@;'; put 'put ''OyEzT2pZX1Y9TEwpfVlMbmVWaWRwSmByQDRnLlY9byQrL1Y9YzpCd2N8JE5GZmN2Yyk0MGA7eTUwY0dqdyM2fFRCdl43LkNMSld+PCM4bUx4d0E5Z2wiRkYjLkt8eXNtMWZPNTBHV20/fG5yZi49LCl6IzFoREd3WT5oOzw3TkVfSzMkV1FieF9HaHp7Pyteel9ITF08TkBieDozVEpDL3xHQ0c9''@;'; put 'put ''Yj46X2lFTWxsTk1uU3JVdCkqSE1hR04rZnZYSzUmUWd3JDdWamUyMUVwMHdsI1hlUjhhUGhSenZPVX1RdyhtPXIzYyhANVZrYVFILFNST0ZTYFlKUmI3aiJXeFE4V1kxdTlrdnU9YCU1Vk5iTFlZUzwqIj01RzpDWDEmdlcvXU4+bGpYMnt0fjM3Z1VHWiVTaXN1Qy5TITRJd01QcTR4a248Wn4y''@;'; put 'put ''eUsoZ2B4WVlZdWovJFVza3R1XWlaPz5HWiVEKyIxZk1LbnJuNXMuNTVaQyVheFBHUGBKemV5SSRkTXNRYmpOZltXRjwmYC9nKjF4XUFGZUd8eyVAYG1FJmc1WGZDZmd2UTwoejcvVypgUCVDOUZ5XVZYXUM3QEhmQjw0SXVGbDFvcCQxP3wie1BFbSx8K3pUX09tU2lZcDU4a2JZRn4lQGc1dVJS''@;'; put 'put ''STc4MTQ/Ln05QStgKk5IPWFEVD9fOTZGM3NTdVphLFpePjhIMGNJLmZre2xFVH10cEpzN3pDTG5SKl5HZjxTcz18UF1gaWYoQHo3ViFVQnM/bHByXj5mQGJ6UGNyMyE0KUEvOW9aVkxEZW53WGciVEhiaC9GPDkuJERQbkwoXzM4ZiRVQmFsWTF0aWEoeklaS3ZIR1NSSSUwTkY5RDw6JmB9K08i''@;'; put 'put ''RjwjLC55eSR2ZiR1IUhWNndQRj9fbXw+NFJYOmcySXhaUWByaFAmVl8kWVVoZklPazE8alhCVylqdTszMmRtaWVTJmB2ZURiTTJfUj9KbSpnd0grOm5DImpYdjFgUShsVj12eXhMU3A/T34qPytDP2A1YHZkS0Z6JlFNSylkSi4/KzxbRWJOW29AXm9nQCMoNFkmejsqe3tNOXt0d1VAYTh1Lm41''@;'; put 'put ''YU5TVzMoSCRPIjdXT2NeaGkmcExuVF5VakBgKW11YWtaI080UUM7e2VHW29AayNvWlJka1okRFNROGZQLlRgYUkxL0dpOmljUyQxVHQmNyhUMkJIeWsjd28mLz1jVkRsUF9QNmcjOntHMGI3UlUwVll9JSFKKi9zdkRNWXpxN14lRDpmLGswSnZOODJMYXh0P002SFtuWihZZ2R9eWxaMmA1MkdM''@;'; put 'put ''MTtkV2hkInQrT3RjJE8lbm08eEcxSFdYTzl8KEomeHJneTE4Qjdxd059W1hDI2k2OTl4TGVTJj99WTIoc0BGWlpLT3c6NkIrbWFdYyI0UlpkWHVTRUpCUCRZPXtWNTJ6KS8+L097WCYsaEI2NF5KRj1md14ibUJaZUBDeVg8SzZlYiVrTXVtRXJaOHYiYF52cUhTKWdEPWEpdS41Zyk2ZTF0MmUk''@;'; put 'put ''W1ZAMFhZYGxxN2VqVktlZnZ1WGU7RWkrNTJHcUs4bSQ/eTEudyp6NC8vK1ZAbj4+SU9hZVBQVENpQnI3VT1LWShZXlhaOGQ6ZXk9S3NgMUw7SDpmWHxxe0JBcEdbfFszTlA8SlF0Uy56YDBIeXkxZDFuKyVsYDZ6RnpQQHxebj4iPlNJUjkpPUk8I1dKP1pDakROfC87KHdvfWN7ZE1LIVB4byYh''@;'; put 'put ''P1A2NTpvT31tKjBEZT9pWlQvMDdTO1VuIkRFNkpfP0MiMG1UfHt2Y2xqVXhKQEhNU1EiM1dIKnxsL013MCxbU29OP2c3aE4hcmdbfFhoeDddKUs2UnNSSlcsL0RNYVhZMkJrV19iU1lJeFtqTTRUdj1NPz4xVEBkTFlHKzojSGtsRityejV2eDF0Vy9mVyVyV0clQjxUdThxJlold1FgQTpbLzl7''@;'; put 'put ''IVIzcW9aUiNCMEVZZnlCJiNqRWhqP0ZiZnFFbmxbeWssakgrdzoxZjIlZCFPWVFbMlh4bikvVUlkIW9HW0VqPVtiTCN1YUJ5TXIlOkdEUiVGI1Z3SWxJTXg9L0dtUHcpK0JQMmRwMCFDaX1BZFdKcFclNEckRTA+V3FpKXc6aGB3Vkd+S0tnQ0hBPEt8bXBLTnpPPSpjaXg8TVBeTGYvT1NjcXVC''@;'; put 'put ''WGJPQzlZYEQybXY2VS47NUReLCVHdiRmZ3RBLF9QRT9GZFpWaysuSXhSZ292blpqcmZhaTdEcUhCZktSVj9LISZ9NSEzVnRbfVIueGk3d3hKPGNVZ0ttUFkhL0dpXmwmWyhfL0Q+LHFNMmc7Y10/SnMhR2E8eGBxek9ZZj4uJmYuOXlRaVg1KiMsMy9sbCsxSzp9Pz1vQzcicHYjPTYuekNRQEZP''@;'; put 'put ''YX09biUsVWQzUys/KXwpSD9qZG8mPFd8PFYzKSsheDE7O1tGVSM5VGN7ODhbWHRJRi5HXWBqPFg9XXJbT3FKKTlNTCg7cENRM0IuYS9dXSk9XVMzPS5RfiwxQkZdclt1PXJfWW08QCE2RUB3Tz9CWS49K1gyMHkxU34vPUJZLnklO21YWkN6fjdySDg8VSU1NVg4Mi8+bUVGTlNHXkJ9IjtBb31g''@;'; put 'put ''RkcmZmpmKnhvaEhZVWtCSDFWImo8bSRTYD9AaykmIkUhU35fMkdJRX1uTlRJP3s/L3FrSn1ucCN7LEFrV1Z5d3M3emFZYT9sOGdLVXosLC97Uzg3YjdJWj1VbjViWW04e3AzbTBjeF1yI1U4dT9eZXtGVE9ybCtoNGhmLklsMkhoNChNRjE6QDBncmBSTXduOT1ReXAwMmpdPDNUSFkqJTJmU2lV''@;'; put 'put ''PXchPm1tdjdKMk00IVBXe3xQPEJgYU8jZEV3dHBtXWpkQTJ7RUZqamlTVT4xRzh3KD1TcWZ1Sj93WWRUKUcuc1hUKW9hMEpPM3dQQDBXdndydlAqfDJjPE48bD9AQ05dXk0oOko/ZlVaVzcqV2hGJWNOLjZ1KmUkRDU7QSp8YGUxd0tnfFEhT0o4fURTTC5yMjlfWigwNjArNkxoZ3ddOH4kPzFG''@;'; put 'put ''N0dNYyJ0OHopL3hNdiYpd0lHLi83dlp5TT9RJnJzY31NcTNqSHRvXkBnaG1kU0c4RmNmMF97ZFIvQn44UWFteSM4dEJ3aEl+O0d9R2ZII29bQ1YoZ1g8Xj80VE5dYW1YPng8TzxeXmE3SCRjSV5pRmB7Y15tezg8S0l8VyI+d3JASz1qJl9bJS5LL2pwY0h+KDBEejpZZ09IfHJZMHkhSzlUWHk6''@;'; put 'put ''OjU+TFluLjRCPEpaRGBAQ3JTdkUhak80ZFUzWSVrN1l4THlCbjc5M05aeEteP2AhRVI/c1tvXSpJQlghbyU4dmEpQV1NfnRhdTdyYTRfRTg3c2Akfm9wczM+KDFLMz5qOGpsSXBHdXA2NTxjLE1pSio4S1tCc0VxSGA5fDErPT9hPjpVdV9hQW9kcW5HKVlUN3lXPCtXQmhrWSFJOy4/SmguVGx3''@;'; put 'put ''eClSKkkwQ1B6eiw2Xj8yVGBNQTVNUDFPMUA7VGdmYCMsKXFvLmhdQEJHVyooRUJMUExYKTc6Pmh3OjJYdkddUWhjTXNfel45KmFKRlBEaUFRckxKUl40eCZpVSZCSFo4SHRGY1ExWVgobkF3R1JAQyRrQVJTRkQ2Uj5mWjBYMGxpTkBwYip4UiVxZUkkb3pJQT5PJG53OmBSbVpXRUcidHFKUGNE''@;'; put 'put ''TEwmRE1oYHxPVX1lR215VClUMUMqLERNNCRFQ2JDTyMpKmV+S0R3PUI5PGU/a0BvZGlQfjArLkBQcV4qdWt9aWY/VUR3LzxmaGJfUGJgTlIsXjJoRWMkeWZAL2lYalA0THhwJVk4SjdVNklhRXhlNF1sfnlMJi8xSGBybzdGRXhmbFtYSiFWYGtFI29dPm54TWJze3lLZjcwPnlMfXFuJmspZTQw''@;'; put 'put ''VWU1ZVNQPTBNTG1QSmJ4NSFMRjFGR3hdKm1NX3tzWTpJTSpqRiR2TC5hMikxfGlHR2Z0K2Zbamc8KGdbZnBXPlJ0KlhYKXFobzl4WkEpIS9tal9Ee30pRiVHKSFHOlkrcXw5aF9fbGt1T2BrLlQzXytpUUhXSV19MzZ6SEtCcHhmLzVrSys1a1BETWQ7KSlleDhJd3MxWTUlUHB7SWpkOEEpOGAz''@;'; put 'put ''TEF5JjslWWBWMlNvbSVHJEo5TnFUZERMKyxqN2olOF4ue2dEODdqLGZIYVRSenBwakB5bjZpOWc/Mzx4UVk3OHlGbH5PbVpMLmBZTERtIm12SyZWZFZkU298L1Q4cGo/MloleUQrWmxGSHkkbmJxWG49TDp7by5QVyRWRVEpITFLP297VDwzJmB6OndvRGZFNVUzR1VSSGdIQW9FISFIX2p8ezNG''@;'; put 'put ''ISFEb1gvMTJXQzBqQEM0THF1UllndyxDZ3xaTzg5JFl+OyF2bTVbUyUsR15WLHI2fGohb1MuYmMkRnlvYUt7SHc1XVZ4b2JFbW5ERlN2W3h+RmhPQ1cqZEd5TzZJYnhFcmpKbl1kK0J+OXNgK0JiaW9vZmRDO3dAM3FvLClTNiVMOXkxU0Y3b1EuSjNTams5Ok0zVUUrVWpqOWgmSipMRD5CJUR3''@;'; put 'put ''MCtON0xzN2VNWztOOFl3ZTBAd29NXip4bzFKZ2lDVFN1TWVsOm12KmpAfmIlZjJpN3BiJVVsLkNsdUgwaV88IltMRX5ibWppX1UodHp6YlppfVYsbmMkKUQrIypvcTNWTjFpcE8xQDFvby8sMS98Z3IuPFlZUjJlVEVRYj1lbU9bU1psKVpQS05+WEhJa1MsWFhuS1tZbkdbc1JnMjxLPVNlYmYm''@;'; put 'put ''I3dGW0VzVzk0VEY8WEgwaTpjM3ZwTSlqZ3hEZDpNa1JbfSJsXV5yey9xXXNpT2lPd0czTVlhO3JVWmF3WF1od3chZGVJXmp5TGFBTlVhKVVeYEQwPk97eHlULDZ6cFFhW2RUfU81QFsqU0t2RTZuRy5xbWxfVjA/dGIpOSIzT2k6O25QXUU8SzhWa217aTo7IXtgNWdeaHdnbVNwOSx9aiQ6TFlh''@;'; put 'put ''d2o+aCNqMjBbamBhWSpxWldEKnVwKFJsOm5QS05XZzRkPV1ETWJbI2gkJX16OGMsWEE7LDFwPC85cTtpYzlWV3c2VVhMMm5UMVpjWXdbNH5LQ0VSV044RTZ+S15db3s/Sjh8bDplen1dKVQ/QFdaO2dERW93T3Y9XXBEI1tHUH1xaiVmW3VZL1BbISRKXTQsMUNgdVUrS2A2S0svd0hfMGMyeSRh''@;'; put 'put ''MCo6cm9Efmt2TyQja2NuU0wuVnZZXkJgZHR1cHVlbXlyOiVXQVQ6UVp6RUZMSSIsalhFfDA0b2NILlh1VSt4L2JjSi41dU4pT2dQPmppLH03KkZbdzZZZUNWZ3lBU2w2dGI/JllffmdvOVRvOG9JMVI4OiJ8XWptIVVHNCVjKnNpYUIldkcwbF14VypubUMyJjE+fiRzKTZgMz1ZVj9LIWBDVl5p''@;'; put 'put ''ZEU4T3pYSnghPDpKeDxbcmRFLjtOOyVlJmReXXhfOmdFUTJGOXl7Tls6S0lIPlhPXlRhWnJOanZnTzxYMCZbPyw5OFpPeGJvTjc5N0VQeVgyRC5NM31TelQ9U2YuTiljezw0emtDXSFYMmBQPys8c2A5VnNPbnkySjxLNjdMMy5zemJPNHFvT3N7QCEha0lrSS8hPDpaK0J6RkhQPC5oIW0weyg3''@;'; put 'put ''Z1hANEVZPTp6eHhqZzxlUmpNKXdYcjAuRytUeF5kcjdpRXUqcnhNe1lwVHhdVnlvPDlCaVdnVlklMVZqeWc1cCUkRmt+fHVgdF4ucGdrQ1h0JSgvUDd4PkJ8YGBdRGg4ayF+cT1jOzlZMWNyQ3hNZ2d9LkhyX2xAKkRBPHFtcENNZTkoXkpDWzlFPUtaLDR7fU9kdXNLMXdIVFEuXiIpVSk9bkNz''@;'; put 'put ''ZkkoUWpIS1hiWH1ZLCNwfjdHRDdsPUZXJEJkLCVFdS5tciVAQUFGXitSYTlTU3B5VD4iWkZPWGxYZTp2VGclc25pKilUT2ImLkY2RDR0YF1wKXpwPlBtMXt7NW9pITc9dnZvey9Vb3Z6aVRvcEE8I1NRRHR3LDxRUC5VcTk5MCJnUWtAMUFic2dGMmhATnM6ciooQ1NmeSgyTjglalVYOmpjemhR''@;'; put 'put ''WC4iYit3VWRxVCM4TkQ1LHdgVkJKVSlrZGZYckB5aGFTOFhVaiE/TVk5eVQ2IWhMPn0vZzUscSxydCFdczdGPFk5VHMmWiNmTCtRZyUoQWoxVjZaSUc/YWJuUj5hek19OmdeZH5YWEsvK25UMnBASWghOktMW24sT3lxLElrPzpkIX58YHc9MzcrIXhjXkVEKXdKRjFYJEY0eGs3InkkSH45aktb''@;'; put 'put ''ZUZYbCpKRjkqYi9DUHBuRiNKO3Vsfl15TEdlRGVyJT8yT0sxajFOZ1Y4QWRmOGw/WzlaT09dSkh2T3VVSFFLZGwvejlLSWliIlRYc3ExTjU1OTFlMnRiYTVaSUdFJSNsP0N9IyEhKHhZWjMlJT5DSVZxIXRGNk5sJGVFeTtNLDgyRSQ/XV8rfjdSUyp9ZyFCR3ttMFFtRCEsaCk1PXNAdHgxWSRt''@;'; put 'put ''QiVEIUdOXiRpOC8/Ok00cGV1RDxncTVMeXVXPj5aYHR1e0RGMktQaDdaZVZFb084Z281UWojJGR9cCEmQFtYMGphWyM/VUsyMGlyeUdlaX1bPERxPVpNeUhpQXtrakQzTH06KVRRLmM7KERTIy9baWVAVnA/aHdHIzBnLEdnSyg+KmZpNEsyKTlqZVZlVjNMdjNRZyxoZTNra34+bHQ1Vld1JTBC''@;'; put 'put ''JUw7QEQvSk11MDplYSNFOzsoQWlMKUFBaVJvNjNxMTNyOXQ5QmglSHgodGg+aXVlbGlbRj0kUTM5an1UWlpeVHlYWHRKK3d4NHBROy5+MUprZSlpZWFbbEpCd1lHLjkqSlVjXlV1RDt9ZEk5bS4xWGVbY0VQQ2VPfVhSJigjIW5aOUJ2XzRgbUJPRCheNzJWUmBGN0ozTUIhKXU0L01kdT1lUCht''@;'; put 'put ''SmBiRCVxej9TRFZDbHJdRTdoTHRoPkthIihaUTBIKGl3a2BmWkwzXS53IigpIyFPMFAhT05Vbk5FRG5oeykxUE9zaFU+MksifEwpQyMhdEMqLnk1Vz54KGJHaE1RZXAifExmPUkoXUswXiEsOlooZkNhbkw+V1hwbV9MdDtIe15VVEBee2VXIWhUNWc/KFJFcCVqfTJNRixqRnRjQX5WcXRJaXJa''@;'; put 'put ''RWVKcmlaeHMqczB6dztjKTlUKyp+dHAxRTdVTiNnakBDc0xUbHk+YWNGdTpHKVlhTmApci9pYmhXcCF2SHEyWXckeGw3eTFJZVA4YiE8Li5BWjtsa3dEW3N4OXpIaEA0cDhXWUttO2drfGFEVC9IUkpibFchTTw5TUVAOTBCSDIqdyN1eThwYE5zdzhlPHlpaD5ZTjAsRyZLPl9obVhleDUkKDgz''@;'; put 'put ''WHo8Q2hESHA0PClGYH5kQjM+UzhUSnkufUlDQDwpcSNsZ2k5cWlVSzhuP2dvOTJQPWluLHhxa19NOUs/PypxOiMqfSQpSWgmbVJXKXxJWmJHYllmN2U4UE4yN05+QHRRKm0lZzAkciovQ0VbVT0lJE5OUVlWfFE7NlVmfDs8WFcjKEBqTSlzd3l6PWRJSyMzIzdXdEEvamRXaEB9MXRxYGJkdXhN''@;'; put 'put ''KTZvIlEpbEdrUUolemUhdzpqVmckWkpBdklBQmAkMVoxdkhbaHs+eylqZG5leV1vQXBHXUIjTEx0fWU8MHgsQ3xgaFRoVCVgd3sjSFlIb19bO25pLz8+clhHTVBLUEghUD99LzBrWlJ2TF0kbkpRVkdpaC9hQjFaPClGNX5yJTUsQSRvby9jIVFKWWU1X01aPEc1UDJyUWJJbD1pJlF3YykuWlpS''@;'; put 'put ''dGNURjRaZylkbjtZdn1JR11VW0NgQFpuNVUkSmgjVTJzb0l+OyUmO3U5N2koKVZWQmExVEJVdU9tbjA7PGhQZmd0Lk00WXBJOmhiN15kcCoqKG4rbC9zTkk0RytQRStWUTJYRWBxN3VFK3BjPTlsL2NOPDQhTGtLcUJqaTZDWnNVSyxzRWMsfCR1KlA+Qz11aD59QDosKiFDYDRMQUZ5TXk1fGJe''@;'; put 'put ''cGFCKUZBKVBGVT17QSUjdEE/PFM7KztSLDZ7ZHg7JUM8K2FoeCthUDtDOVo/eyxMe2pmLDk+TGc3T31+UmwjPDVfXiY/OUkkfXtobVVTZHJOWiwyKXhwRkxsKUhpQEdTak1JcU8hbVI2ZklWbW8za1RGMVc1QjAlMEN1OHNFaURSOTAxVEtYa1orLEt+IVN9UUtVMDE5UzZ7KztGbTckS3ckbnM2''@;'; put 'put ''WlpxLF4/Y2lUPX1dYEtocj01UnRwYUZTSn00RFclIyRKa2ZvN2UuWVNufG41KD5ae1ZqU0pGMWp9KTtEVyVhSH4hYWZ7Wndlez4/NF0pTV5XeVN8KEczOTtzTVU8OHtYP3loIyImXkIjL3hsPitHQjdrYUUlIzhlcVE/STpxUz0+K2Y1RXN8eW0qTFRXWipIZWNYN0xubXkjTDpDYEw7T2Y7WS8u''@;'; put 'put ''WTxWN1o6dXchWWVURH14c3lfI3VNRUg3OXJpYjddMTlZPGZ7WWFvR1JRWVZ9SWczen4jX2RDWFR0UjNpSzpPYk5TU2Q4I3NlUzp9cVdTcE9xQGNrTSVsbzF0JGpIUlpCdVgvPmtyJVJKXkZTWUJQVSlnJV12TVB1TFFEXkN0ciZBcmp9SENlVSN+UWglZjJWUmI9cXVMeXs2T1J4cmdaSFFJej5d''@;'; put 'put ''SyNTbGswKH49MTNkeWA8eig1Jj0vaDFuLllhMSsoQHpleEBqOVNGPXllTzdGcGpOd3Y9QzBFbWUuamgpalQkeiRCXXZLQk12Ll4hOVYia0U+QnViRW1tTmF8MlBXSDgpRDE0XjhLYEZgQn47YnZOTE8wPXJ7UHN0dzJFbEFZQilsR2p7dGlkQiI0eXNQRHM/MlE4VWNQVFhyO05tXkt7V2dMbWt1''@;'; put 'put ''VzY6ekY+KHhHVWJSQUdBXnZTfURLcEJ0Py5hU1NFdCpbOzBeRGgiN1NAaHRjUWhqRGxYblp5TjYpWEF0Y1FoSng6UHBvKUVAfTpDPGZEQmFxPFMhQ08ycUk1RjkjMFlCPzpvT0F1TC9hWUxOYGBYIkFAb0ZWMEtRQDAwSj1sXWJyN2NFJE5QOWZTOWVhb34xL2YxfFpYOHcsT0hjKEcpMWdUJl5O''@;'; put 'put ''Zix5WjJbRnddU2xaYlgkfE97U29CKkBMPSRkUDsrN3UiQTxlVXU8ajNjJE09Kk9Veml5dV85W1RoWy98MVpwaDJxUFU/W29PZXgjQjc6aDQ8VVMxNjxzKGEhODlmPSNOQmJIUUklPm5iQDBMRUIxL2xpaS9gUiN1NEE7dF0hcmA/N2U6dEhyUGhlM0t6Wyp2RTMiZzdHT1pvXTt+ZUBhPiNWTXt2''@;'; put 'put ''YiJMXlI5YHZiamVJVmpkNUskN1F+Nkk3dGwvbFVqWTNLUUNNOFpUKC9FNVFbXWlAQlEzPEhgcUhMPDQ6b1tvfV1YK2lddFpmdzR8S0Y9KVRpeHlPPCpBS0xkMjYqJnt1VzdARml0P01jamB5L21gSnokPHgkc085Z2NJVjZHTDIqOWxNO1pyJWBsMVs3bFlsTTBAdyUleXYvYmM7cVBmJCU4MFdX''@;'; put 'put ''NEBCKiVuWVAwRyxDNV8yP2JKZjhZMGZwdTdCNl8/JCouKlgqbVlmYGVwazpJSz9ZMEBpUDs1ZypQM1M7OENKJDY6Ujg6dlcrYmRPMypuYEhzIz9VUiQ3a0NYMXo2RVQ5K0NWOTorUjowQD9dUEVXKW09TkhhRTBpdnopMjFfazoiUWpyfjwyPXhoWG9RP3MqOS43KlB5ZSY2VSpSYnB3QFdJZFg+''@;'; put 'put ''YXRbOik4JFBNZFNubmlHQVE5az5RY016VCIpUnk/PHdIcjQlaVYkNjQoQ0JeSU06S0xNYTFMIWk0c3xrT2hwR2V6ND51eTUxZ2xlfW5HPFEoJjYhXTNId11BT2cqb14+KytyVTkud3cmZ0RoNnNSa0prST46Yjs5ODRQQStHeGBuZCE7L35AKnYjWEsuM0N8IU48VT8haVBxTkU8XXdSQ1k6KWl6''@;'; put 'put ''cElmbHFodDEjYl8wI3F9KHFZUXRoMk8hKDtGQiQva0YqRHIwTE8rLCxCQUt7dk1yXVEiQDIkV2VGWT9UPFdlM2BbfHRbaV13dUYmKW9SKyUvRnFIXzU9MChea3cjUHVKbk82aCUhdTFLUn5qQVJSc2JHZHNwYk5veEFFKixiTUsienY/WDJtZjJMYFRYa0t1NnN0QiNgWkA9fG1laGRgOmxzcGJa''@;'; put 'put ''OEczZ2Usd3ojdGhnY2xQeEloTVtWVjpPeV09PlZufDhjXkZCcmpkaCokZzw0JldFKWdSa0luOjthKzJwdEIrIiMqWCFPSD83aEc8KWk/JEI/O21aM0k0eVpRXXc4VjpjfGcqZkhVRDIzcW8wUVE5M1JVKEd1eFspQ35wYSF8Kj1aIipoPnYvOElqPjkwanV3YntRTC5ecTp0PG05OHFPPGM7eVNV''@;'; put 'put ''LHsiRj4lWmFUXjNdWEgxXUF3UDtFO0o7cl1RQy99PUlMWVkvUXZOdUBwJTJLPzp5MnglJW1LeX1QRzN2V3oydiw7RVh6Oih2V2h4Zzhjd1FSYnFjVVMyVVl4OlVAMCpJLnh8ajNZfk1bWGomLElteEdrZFdsejJaNHF3XzUoXyZUdDllNjlifGRwSyUiWjU9cFVBTStfUldyb35bV3dnW0FPJCxT''@;'; put 'put ''ejQvKzdaOkJPbmVPKmlrQjc0eUROJipePGB4dnVQPmloRCUqO3NlXihvXjVpVS5HSzA3KkR2QHJffC90aGIpKzlnSUdSZTd8Wz1eM11WRn5VNGQ7eVNfYGRjcCo1RVZ+fnkwV1c+dUcsaGxMPW9PamhGVlRmMkJVcFksTXdoNEsuOWdGSWduXTh9fEB1JWksRXguPkBJQmxsRlEpO2F3cmpeNERM''@;'; put 'put ''ZG0rQkoyWyNMRyxDJThfNFRNcSY/V2o2aT5EKCIhd198YyxKbVNmZ3JqOkAjcUZqVCV1enkmXTcjMUplQlR5LEIwZGxWTDJMIkYpLndGVkhkNWZ9KWsiM2RDJjB5R2hDYD0xcEsqVHZpU04xQVspdElqTDV0cVJjIlg8ND5yez9BbzJFZjZyWl5wZ2IsWFJKdCx5WDw0Mz09Ln07OGJ2YDIvInc3''@;'; put 'put ''WEZHfENVV11SemMqfSZaVyt9ajBlRFl6d2JdUkpNXXpjYFJHOVtmSCwxVTkxTXAvOlNbIUtYYVtKLlh9ZDcyQC9VZHptSmZ8MUE+ZzBMNWg3NFJTUnhhQ0JuR2BZe0ZeN2UuelN1bE8zdCMuYFBkKjJpeiR5Jmg2SHxVPUghRit6OyQsenouJml4UD8wRShtU0deNypHOHdsKy5hciMlJWhxc05i''@;'; put 'put ''ai4jT3g0biMjdmpOUGNHWlc3fTNVdmt4S3skaWBMaSZNPk1dVSVSPik6MCFxMCZtS2dVJSM6fWF0ZUxnfGR7PDhhViQ2dEc5PmszbUtnJXxXcGJVO1NHOTo6aC5UJmxdVyRMZH1wWUJBTmZEU3c9QEI9MG04PSQ6eHBLPEg5SX5+dFJVYlFGS0k0LzZuU2YlPj1rPD1hViU1YVZSL2EoR1B6e0BZ''@;'; put 'put ''M1pzPXZGcyowLylfL25XYmVeXSRUI2ljW205XnNWTWx4OGt0ezJXOlVBeTdaOis4ezhubjU6ckVfNn4/OihncGppKDo8WHdVcnhSdCM4ZHQ2Wyk9Xj1Ibmc5MEZdLjxhZCFIXW43ZS5ZMDR4QG8jYEkidCZSWG85TmxuVmhMMyZXKH56PG4oS0tAeHxuYCxLTGZyPzFNLjVyKipLTGQ9cipgNlJo''@;'; put 'put ''Rk9qezZoVD0+ST9pQFRHP0cyKlJ3akxNR2dRbSpNPE9mN0xQTElTTWtZcDluOW1RIihTLl5we0llTFFicUVZYT16a3pTSktwZChBb341bDIyLC5qKlNlYTt8VFtiJE0uWm9RLjYrJjlzb2o3K0pKW1pmYmpEZkRsTXV6OGlPLmpnRVBLJm5pa1BpNG49XmROMWxKMUsrezRidFZ5ImZubGAyRSQo''@;'; put 'put ''ajhbY2craTlVWTgpJW07W2s6azJJRl8wIz5NZnBARHF9aEJsLjg1amY3OlUvW2ZwP2JVQ01DVSFwRlZkM2VDLmN4WXlgT2IhJnxvZyY7QFphL3k7KVBZM1lwfFNeTktsUFg7dTEpW1ZfVXNZWU9NRm87XzpWVVkuVVdvUCp8YGo4NW9LW0FGSzc0LmUlUjxsSzlHa0pzaC47PEZhVjJDJG4vfmlL''@;'; put 'put ''I0IuO21hUUZuLlNCYnVtbG06TXM+XSRRbmtXSz16Inw3dXFiJUcmXykve1pRWDReU0tHRVdWZlF8bjJ4KjI4PXp2LGQubFsmTTFPWDFdbj41byF0WlBOUUMpdFZNWU5zR0tHbDRyNHJ8ZnlbcHJETClRTUVNQFZgVFFFMFlXay9CcFZEUVEkJHFXUVlzMUVwLFtsRzVhR29BXTtxRHQkZD5YRjpG''@;'; put 'put ''TUsuOFtCIUN0OCUzU2AhbExFdjViKz5OSyNZdjg0Q2Z5Q3Y4Mk92OHY1Q082SSE3UTd1b3s0YGlvN0lkfF1WQzBecDpNSC9eej1eTk8hRGt4YEoiYy51L3VbdT91SjZWTnJHKilDOUZ4R29PNUtZWllZd3RHbkBsIzV6WU9ZYDlZeG8ubmozVW9qOypLJmZrdSMqYXdqP0NVfDkhTzduKTYjZjBQ''@;'; put 'put ''LDUxM1V4ZWxAYSY4XzlZSjt7Yy8hRndjQC4qXno2PG0jWm5uQ0dzNFElaXd1SkRDInJyT1d4RGxaT2ZDKSxxM2JbIVNWb1lVSlk0YTJqN2F8Lkk7UU4lTCh8YUVJfnVveSNbUlAjZj01aEJ9eTYxcjBqQ1s2PnwzYHlXWjBUdyIpfjYmSltnUk8wLCpkPURgUk0oWzdoT3VvfU9iNWhGTE91TDU6''@;'; put 'put ''K0dBZVZJZ0FlQylTV2t1dFczclRPfT5iVF9pcHRUKHc7QkAoLFpjbS81U2k5M21RdUVPV0puVj9eTzIsKTE3SWpMSDp1Nm8lNCEzZzlvMlA4Q0ZsVzBzXjp4UVtbPS5yVVRQSkBUVTloeG54bipybnFOWUNIW2VCM0lbdGtjLkpHXzZaPiZgQ0YpUiwkVTFFUnskU348KlJfRXckL2pNPG09alRS''@;'; put 'put ''ejZHdyQvVkdqTSs7Mz5pPkd9JF93R0tCX3NHJkU2czMwRlB4Yjlhd2QlUnY/bGwjRypuZUVoYm9jLFM1OGR4SFpVUkxQZk9IIUhAVEtXXmR4elNhQnMrbls3R2JKXVVSN1MzR31jKm5xS1AwYEo7fjsjZmYleTNGNnpRQ3lKZ0IiemBKQDZrP0pSUEB5KHRZcC8vSilYTH0rZDlNNDVFW1VSPjE7''@;'; put 'put ''Yyt4JXdQYX1Fd0Y5fj1zVjVaJW0zY1ExQ0FXZGRHQUNCdDw+JlNGTDFsY3d8UCRBPUl0TT8jbDBGRUNQL31YJWBLRjE0QzJpKHN7ZnQqU1YrcklsW3tMX2dFIm9QXkN+cDhCeSZQZWMxTT0uaXhsYWtPYlgwZUtfX25mPGh6PFVlaDJNPyUsbmxkUiNeLzprdEFGRG1YYGxPN1ZgYVVOc2x1TCwl''@;'; put 'put ''R2EvJTN5UmBYI3gmbTo/ZEhZWzN6VTArbHJCMU1uVUFlZkxna2AycG5rYChoLzwzcnZoPC5sWl1ZVU9sW1AqVkJdRXx4OVU2PCM6LiJjWWx7QGBgI2lbLCtbXjh+cW40YntucmtPWlpAPDtFNzphSUVgaTlfXit1eyhIUDNwMVNpUiVddFY1NWc9M2RZNz9YMV9LcUZWMmNeLz0mSF9uPnxPWHFX''@;'; put 'put ''YV5LTTYpODk/OTFFOX1MIW9jZzVRZyx9LGxVZCRadU9nOFtabm8kRXAiVFZ5XX1mMm9jY1Y3dlFOPSlmMlJ5NmdCVXlvX0o4NztvSkZnbHNDODdaMCFmZ09LSC5aWmV3IXA6YWkzLn0vNm8uPF81cVtGS0pSUEtsd2Ylai9GIWtge054cEtRbiRIMFk5X0hdKnh4Z0NCbEFsUCtlKjlwbFZLZyVI''@;'; put 'put ''fnV0byJ6cTZoblNEe2pFL2ZLKz0jPX1fb29kNkVwRCg+OiFgQmRpfDU6UF9eXU9wTyR6bCR2IlZSVDQ1cDpoWWpkJGRpYm5aa2A3UzMxWXBNM3d4XW9SVkY7dCFAVlUkQCk2ZFlbcl1OVmVRb0ArVGU5dFAydnVUV0l9W19IIkxfQGBSUER2Ik5aJUU+KW57LDd5YCF4K0ZQKz0pS19wYDVQO2Nu''@;'; put 'put ''NComa0h0UUpFTi5lTFlUQlVvUiVVblB2RkppcnREPT5dbzgrR1Z7S31XKik0Z2gsZUJRVj05dHNhWzJAezE0aDc1PXAuOjl+fSJsYT08OHBSaVdINnQ1NDNiY11fNTVCMmgmPEAxUSVxcG9FYCw8bSNoTCUsUWhuYFEyaCZzczw0SmlkQ0FTWSU/LEFrPV5DMkIuYnYmc359RU1+PGN6cnR9Z006''@;'; put 'put ''YnZON0IuTCxqY0JiSDJxITlrPXlofDlMcGMjZ1IyZld3MV1walJaM1A7WkY4blEudDVOY0h5QSRaVEdpVC4hPXJvalsmU01UMUhRUE84REg+elRhPE9jLD14dk9tJTJPWHpIYWNPSShCRmBrPG4ibmpbbV0wbXYjI30/W0ZNYX4/a1NnX0wiWEhdPzd3dzhEM3I7Nz1zKiUmMilzSHRJXTJTW3JX''@;'; put 'put ''bFlgcmFMLlQhdyVTTSF3Y2xSbl5mNmhUSnRZYiRuOjNYKVo8cHliVj1sIiwlTUleTVFebGBGa3c6KjxCYStxYntyclhVYjZtTn4+b2NmJTRiNj5BTF8uWzV6USVxZFVuJjxAL3A3LGwoN1RDZSZlQyxCfG0vLls/LkZxKSZMWWQzd1RdVEY6T2Qkeyp8KlgiUF82WTI0XkthSl0qZ2YyQk8mcH1x''@;'; put 'put ''KHw9VUwuXztOTnxRPDxwb3lVYFJGWV45VnFWeDspN1Q4dGdqfGEyMVlCKmhIKlhuO1UzI2xydHlKNjEpUz1GOU1UdiQrcENYWXN9W2ghKStSLnUkb1R7OCEvZjImLio0bF0qbUpLfXx0c04ofk1ebGs+OmRzcFc9JlJ4c3hpMXZ8WyYlIVhjVDYjdGtEbE5idmlQQz5XNFcxRUkjTDJ5UyRNODRU''@;'; put 'put ''PiZ7dmMkTSpOZHYydWYjJmAlPzFVLislNCwxQCp+OXhVOz1YNnc6S1Ezd3c6aDc1U1JzfEd9SFF0cSU7RyYrMihwLy97ekt+OXMlNDpmMmM3e0pnbHwqaz80JCZQNHo0cXx7QG14MVI7IlR+PGQuQFFkK1g1MSlbX0Z3NXRqaTQ6MSwvSnZNLCk5PU84aW9MMzMxNSZOP3kkKmBpaXs4P3dQOmxR''@;'; put 'put ''JmRBM3ssWywvUzleJFB4MCExQntaaHA+IztfRkJ+PiwzVShTSnJBM1M7cmFTNXNVO3ptb3JGQnFyW2s5Jjs/XW5wVHBrKV4xVWl+UCRDfXt5ZD4sYl05OnlYTTVGM3l3T1MzbiJRM3c9IyY2cGBSTTBQTmsmVkdjZVkkViFFTmZwcGhlVDYmYjNVRSEyLCVpYlZvRypNPWY0bUR+TGhTX0FgQXwv''@;'; put 'put ''OnV8SnptOkwyV1dWLkdremFgdztHOUZySmwkNlYpYypuMCl3R1dCV24mYmEkdTV9b0wzSDZOdjVbYEEmXy9ZfFsoLjZneUhheU4rciZlPH03YEBOcGw3KWlsO0pHYiVabko4bk5CPWJbU11iNzxVL1pXL3dQWi5wb1hWckR2bGdpPV5la1FKZnZHSjokOkgzKDohfipOQStPOiFVZEk2Mig2QyFL''@;'; put 'put ''YSolKGw2cG9PZ09ifXBEZWpkZ3RwM0xkSG8ranYuSF9ucC5nUFZ3S3x9OXplYDVmSn1wI2t3WV1aVm5ULjZVQ3k1MWBLVE1bP0NLIUpUOix+Z0dlOTdlSy51cj1sZk41Il4sYjNpVDJDRGJSejR5Si9QNkhlOSlmZTkxOHZELzBie2lmY2w4Xj9SVjFiamx0all8aEBkInR9ZkRTZ2ZBQDw+U2Qp''@;'; put 'put ''P0RdOnhtL2QyITF7STpAd3NsWUQ7eUVHbEdlNzdiJE56JSZSRCpsPC9dJUJINnojcHBqY2t8Jl5PNW1EelRKT2BELyplQUx9P2ZWXWBkIWArJFB1W11AV1pwYmt5QnZhWGhGS3wkTDsvZnJTS0tJOXRxMWxbKDdUKXNyNTQ3R14zYl9qRn4lI1BDMT46c0x+PTZvdDlacSt0TFE6Kz8qKSNWWzNn''@;'; put 'put ''Z0tvdUVWUWtwI3gjZlZILmIzMnZZMmFkOVN0b2w5e3xlWzJzWm9zOUlyX3BaT1pvIzx0U31OdzAuVEROU281YFdzMzdJNkxFLEMwbGgmeWp8Onx5MntuZHo+TC9yPkVANH5OZ0JQYj5Cbk1qdXNgU1oscj5POmwpQWRTeWByWXdDKyw5eG5XfXo5KH1gQDg7c0x3Mj9dTmw4LFc7WCNpfUxqK3Nh''@;'; put 'put ''fWxDMDozMG19YlFuWWNzVHdNNEgoaU0sQDRsSDFMMzsvVzsvSiYlbno/ZX04OTs4e3RkJStqKnAvImJXJmg2NXY5Mi5pcSo7fFNPM1MlX1hKTj57OkYhdFVJRSZwJGQuaGdYaVg+cXR7bnF+e0EoIiosdyYlKWVPRj5yMihvXWh7Q14hWztsQTtOcDlvXyMsQCt8fHt4WGs5cytPPiVNcVM2N2Mp''@;'; put 'put ''VFVSTUhtITllSlM0YW92M3tFTUsxNkAqKzpGeGM5VFFtP3g/KDUhZFoqfVtUZDlNM2lFKGk3eGlVXXdNekEmJT54KFskLmdxNkNocWpCWns3K1BBR0ImUX5YYHZWeGJMfkptUmdBLFd6ZC81c2dbZEgqM1BOTVQzYUZhYVFtXkZPOCQiN1ZdTk1ZNmRqSDorSFIkeiJrV19mTD95IXhYODAsblBd''@;'; put 'put ''MW4vT0NLaXxKTGFeY1EzO1c7NnNIPUR2NmRsRVNFPV0qZjJCMmFsYk4+b107XTdRYk9iPm9tfUZqemA/TU9kSmdeT2skUyg5emp6bTpgOFo8YFhkPkU3NTYrZ1MxI3siIV1wN2FDfE0zKGxXV3A5Ui5RZFQpJSxfVlV5QyghPWFjey9zb3xAT1hKWVsjeXJMZzYramRHYilwMT5qS34lJnwmL2Q5''@;'; put 'put ''IU5PRTNCNzx6Nmt1YjJTdmt1KzFMM2VRP2BTXjxrcW0pUXFIQS9HT0ZqQTpqZCt8ckhlIWQ6JmJoYUd3Mm0qUH1kZ0ooVmwpPDpGITBgbC9rUip7LltEPHAiLCVELn0/PzQreEhwQTJkMEpYNlk3Sn5uJDpyJW12VyQ1b1VUMDwqeGFYU05naVlbaHAyN3VqP0AwLyohR3Ika2xtIjw1dyI5UzQr''@;'; put 'put ''UyJ3NiYreTI/ZmVBQEE9eyppaCU2Q05xflA9N1BgPVFRQmJJJGpibTUzZ0VFNz1QYHh4KDhnenBjQzB+YSpyJDAiM2BAMitHMkgoR19nOllJIV9QNSJOeF5ZSC8xPHBGQi9IaE9mRUR0QG5sZjUqa0J+TDxRPEQ1SD5YSmowJUxwbWQqajVhYHRRZyJeamhiTmJ4TkNNKmE4UnZlWD9rY0xnMHtT''@;'; put 'put ''R00sWGpoMHk6SS47MDl3YU9TRFpSZUxAUi51I2JXVSs0MlpWX1BLR3lsUTBnO1hKTDgrXzg2Wj1WXihiUC5AXjl3NyV8b1tycyVpQGF3U019WEolWFgsZz9ddE4jSmZUODF0TnZIbGYzeTlMN1M1LG0kYWV2MnVpL1oqLEdsXkdMdURDO31+Sk9DNExQdnpLdmw5SnldfjEwampqPH1ETHNUPDo7''@;'; put 'put ''NzRrZk5UV3pAQ1IzQnU7O19AKTlyPl4oJk1KaTVNWFhEa1RhP2xTQjJDWi90WHRMdV1CNjN5KmtAJEcpPlIsIWBdJDJ1QCZCdyk3dHxtPy9PSV5NdkNCVXlhNiNpVz0jPHUkZj1OX0hVYnwlb3FGRUt6R3tgcWxEWW4wLH53ajllPmZJXj9yT2UqbjllIlhEXiM8c0chcFMjMTxWTyomczpUWmxk''@;'; put 'put ''MG89OzhxYVVDdTF8bEhCYHVSVG1WNSlHZHdzaTV1NjZHa1VLcXJGNiFCKyR0dW89JTR9SHRGOnJuVypAWGAvcmJERnZwZHYrWzJaOylhM1ROMFJefkE+fGlkcVlYIy5AKXFDRTlLTUpCZkt4OmhHZWRoTTZHZXlsQTtdSmIhdWJ5aVp3Rm8+Y1dkPCx4UUleKjhTJSE2S0x8TSV2JCN+MF5AWlo4''@;'; put 'put ''I0N9NDxKMCYyamZBYXlYImdxYWJFbmErZlAlTWFHSy9tSUc3Ln5iP3JeUjIoMXZILFprZj0mNGtTfGgiaCQxIVdxQ1Nvc2NCSysrbUJeZUZYM3RgSnNzUXZEdWh1RGQ1RDxuSHJeUCVWd091NCFXQUB5MCwqeTBld1JpPVloT2dmTWEuVHA3XzlFI3paTV8wQ1VJYWB0YC4jTVEyaEdlblhzYjZV''@;'; put 'put ''fEw5MTE7b35+OztPQ0JHeFQ9QTZGMmFpZ2JtZXBGTENBMUQufiJoZDBJY0s4YFVVUzdAYTcudU0iclc6dypja2s/Img9WVozbjZGIWNqQVk1PmU8MFhwN30rbWkxdlg1NzFDXl80YmhuMVplbVtsNlhlXVBxISExZ34jayNIaCo7QFJVUk9nIWU4aGQmT1FVXkBWMX5rMnhkWHZjUm1KMCxNdGA3''@;'; put 'put ''fXEudGhLSH1HSDVeOUJMZGFRaE9AOSNkVmdFSHZycGpQXXV0I21ARWZ2eWRDaFJzWFhvcW9YPHR1eXpEOm5bKTR0VUA+cXwudWpgNklHPHxrQGlxcDo6IWFvL3F5Mj8rKV0hcDBeUGJFaypoKS9nUTFEcmNRS2RWTVE8czFjSzZiaW9bXlVRJixCcypgIjt3aV5Hbm9hSHJhUj5PTTE3Sk5LMTtA''@;'; put 'put ''JnxvWi5YcW9uaCRlKjQiTGY2MkR6e3hGc3RmTSV2NFVbL3hvJGEsXWZ5YyNiMUZmOTE9JnNIY2EwLiFgc1g3YXFvM1ZLMDhYc1hkY3AqfWhrM0xyZEJAVGtYY2M2ND1WSV5vNy4+SltGd3oha0RkeCVFdVtfL15DUTdXSjxfQVFkbHchTGhOPFBjMGloITxoKmRJOy5qezlLYXNVKWR1KmUiQHdm''@;'; put 'put ''RmcqcSloZCpuaDNpKmZbOz1gMFRYSzFgVUQ8WGZULz9FdUhKeVIlPV5IZU1Fb2lkejlUaylxezJ7TlA7RWpRWVgoRT9zIll0aFZYfFVZcFh1QyUmaWlKYnhjOilAIlNdb0x5W0JfYEY4fFlqIyklRkZWKDNTI29BP0ZeR2U6PzR0KV9vLnFlSWpGVy9YY2wmOUwzRkZeM2tFMk0iKHMmTzhyMyFP''@;'; put 'put ''Rjdjajxib1ladUlXMUg3LzF+Y2pBZkRqM0gpNFZ9dFNKel5vYDhmUyM/UDo9bytTaWQvNmU+azs3dy9fSU0uSntJMkZoMFlVT09eKHBwT2gwIXBAb2JiaSM4bEx1U1lecGsrfFlPRzhnO1c4QChbKH1JcE1EUEo/TjgseEouITtfLnZgZlNHK3A2fXU1LlY1JUl5Z25vWVdHZXJeaVl3bXVNLHhw''@;'; put 'put ''VCtodWxAMVJNb2I+JWpMUlJmLi9PN1pVT09SOTFjXSR2NTNNX1UmXkBHQFYiYHEiWztJQmYlY3ZfTS5KS3Y4UkR1dzpOQlAqNiNdYGB8UXIpUj99MGEqJE10SDI6P3E6UjkxfWJSWl4/alMyXll6SkttJWJ2fHFZZSR6eyt6KlVpOHI1PVYwQ1FGOHA8K2p9RncwKnV3SnFgdyFBLzY8aSRiLDY/''@;'; put 'put ''Oy45ZW1sOSNmU117RCsmaTZqN105PEAjc2w2aG9xZ0tnXS9ZPGdqfjFtXypgfV8uTW1FMSpJWH1GamVQYGhmOE5ScjVLJFtAQzg1T11yfHEiLkM5TTh1TTw0RFpOOHdjLkpSaDc4RUkmI0Q4K1dyLj5tPytvSXdNcC8xaEElMEUiUH5CKig0ZSU5XkhEOz9hU2lTNU9DVyNLIUw9bUVEKWBgSWVy''@;'; put 'put ''UnxnVXZkVFpaIVh2U1JPVStMYVpybSZhIV5jQFRJOkFmb3xLS2ZYSiFSNyk0TiEsNUdCSmxle307ITNMM3IzTDMxWlBjbVIjKnthZDB5IktNPmhnITAhI2lpQk1hbXk8eWZOekdhcHJQO3kuUTtackV3XThkezBLM3RQQWdDZWAkRFhmKl9ffl88N0d4U0doSDxgc29WPmI8Z0o+O2BILChHJmpp''@;'; put 'put ''Jmx9UHRlU2R2W3dgSitPeWJLMTZJWy89STZ4O1JoQS94O3QyRVtoS3xbI3xCNGZtJmRzWHxaMFR5VHlUMTZDSTZRM1NHOX1PPGZ1T29yKXxRbTF2dCVRaEFaUiQ/N3x8LE9lXU0zLlhUJWUuMnA1YnA3fnYlc2RFIltNLl1IVF12JlFNfW5bbV5sYTpObDg0dkJ+My9hX1ZJMX4mRzpLZDRsYVlJ''@;'; put 'put ''RDAuKylTNl5kbTYsQGlSPUAqOkZkY3g9VWA3MmYuZ0lnIktsOlNSNzdMM3R6Y2BxVU99RVRVK041K01+M3tyY1F6d0p6KWQrUjsxO0Awd3g3Rjdyc31TSmQiN04lSWsvNFUlJGshZHtgdTFEOGd6bjFteiN+MyVyPUlebzcsKlYqUWRRLHA2M09MMWZEPEIqLF1uKWZ9eVB1RFY6bU5hM09LSigs''@;'; put 'put ''fEQxSWRhTDFOcDJCa0VUI3FKbD1da1c9WWFMTCNYUEFpVkRHOURbaCZwazAzdndWKVdVfWw7eT9aaU5ZYExwOTB5RHNOVnhFMFYxM3N7Jjt6bnBUaClAaDtvWWFhIT8+eCp2cyZ0V2dQZW9FcFtscWxRQS9Pc0xsdSQ1PSEkZzVbe31AMCg9X35reCh6IVEuXShTIiE/Mk1nQWcqOUc+OjtFWzI1''@;'; put 'put ''WTF0TUZKP1pmVyFCMmtkOTo2dTBfYmA6X0BaUlVvM0hMRyZ3YiNHJHVWRyhVZjJIbFBRSnU+UyZbQHZnMkVbMUt2OFhEZX5HQyowfUxOQyIzdUY5L0JPOzshWy52R2VwSnJ1bX5NZUJPfkJ3NHIhVGAiMl5pRVJ2SCw+JEk9aWpqWmVbTD8hOiRpdHRYbmB3MWxSZCF1X15xUE4zOnldQCx1SHhE''@;'; put 'put ''SU5MQzpIVlBvb113OzFUWGdHMUhdQn1jRWlPdHU4ekhTTWtNPjQpZnExclJTdmsvTDYoW092SEt0YGx6d3lbdDhIcXdmPlI2ZlZOYTJJPUw+OnwycXd5eitwNEl9QDc+I0RbMEc6NzQsT1JVQUA9P1c4LnhuP0shbzxMW2g3Wntla2AhbFAsVFlLJHthcE07Ly57LFkqISMwXW15JHtnMjxZVjgk''@;'; put 'put ''I01bbXEjN3xFKTdlaFB3a2g6X3cxPjN4JkgsLHVKekoranhEakpdME85ZjpVIXp8VERhZmFhTyRhImZ8R2lJMXdLenkrNCwrdn5dZnBJX05bRTV8fCxPIm1FRVN4WTZPOV4uS004LF00UW5gVUYoakIpYHM/NlVATmxJK050RzF3cWY8Qnh5PDZhJjN3YDNGXTIwV1dFWWJHVlVRVWBHbyxjSF9d''@;'; put 'put ''NHVBI315aFpFI1MkMG1vK2s1SCgzMik2YG85RDgsczV9JVQ2PW1KZjtaOzxTITdifUd9ZGYlK2t9Mm91P1pCYCVNUj0zUDA0bGU9PmxXPyNZWmZVNXY/bTowYHFGNVNoOF5YNSFXOC9UO1QmUm9GOGNyej8kWl1AWCtUOHJJc0ROMFU5SmhMS1c8OTAwOikzdSsyLFp+ezZudVQhOjNAJCgxIUxb''@;'; put 'put ''Z0lJMyFTTWFPOiwyeGY6VWkxe01AS0xmWFtXM2suKT9GOFY1amo2PThmQzVJYmdCYyxyaUspNUBNVGVnUUNdKSR2eUYhOSEoTlpYWmVFJlMpRispM0QzclNEVjFIMC83NE1QYkd+VDl5KUdKfGw/QCRncSoxUHp6eDh7OUlQNW5CViEsQlFkaGE0eHU4eWxseGwqalNnU082RmduYjV2Xl1eTmRK''@;'; put 'put ''NVQ5TF14LCsiTEguUl9sN1ZZMSh5ZUJ1QSlvY3d5JjA7RiRlayNoYkBFPm1BTmo1WERaWVsuMDJbWXlqXjBpW2RhVkNAI3JSejhoSmxibXVIZzl9MTMmSihwbWM1djVlPC9WcGZgX0A/amIkO2RGRmo7QUd8I1s3YEBJb0hSazkyKF9QSTszdTFlTW49a0IzSFtxJjNdOml3MCRgcW84IjR+NjI1''@;'; put 'put ''TGlScl8kUWJUT2ksSnheV1Zxb3R7cnQxTWRyV3VYQFBqUTZoZnY/Qi48d2VmKilXMFBDbi8xUn0/JlssRzFhSGE6OTN6WldpQ1pMPjpbJlVvUnhRenNYY3I5dGhkP1RjYCJUKlpGeVBqfipKQ3RgXklRNUhmY0Ndd0JnN1h1LlQoNjttdiJUVUB1dkhQYnU6dWFlUn1WcVpFV0IwfH1SWCloMT1Y''@;'; put 'put ''IU8xNU5QUyJoZGAlMCFtM2pmKT82ODYjJCo3ZEoqVUlYeEZDUDh6NTouVmVtQlFmd0JeLCFqT2F8b2dJZntieTlrd31qclVJY3hHdGN2R015c3cveGQuV109cCkkaXc2ZXVqPVRbSm0rOV9JJjFHP3krUEokbTh5LGFARGJ2c3t1UCYjKF1PSkJEeCx9US53WWFbR3d1M2RrTmcva1hKWGNseygm''@;'; put 'put ''RlFqV05EKXNTLy4iY1ZVfmI8QXpfUWNackVNbEUzcz4rZ0ZRYUhWUE1nUz5xMGlaJjkxfC84KTY3eXtCVipZVmlWUEp6dTcrbHhIMTRJYnFTX3lydShGZktKQ2BxNXVrIVt2SilZK0VzSDZhJXFnYnZuKTRFPlQyZDhZMUsmdz1rYHR0cD09PTRCaXRoZWNPYXh7XV10RV85NXFJT3ZHW2NvMEJG''@;'; put 'put ''ZnF8MTJ1NUJkRDZHNU5BUWB0MXBQfCRbakducF1VbUVTMmVNSCpFM2ZbeGZrNGtIOUQ0NGJ5VVFNPEhFZTNtdlE1I2s2YWFOQ292JStZYmk3a19jWSg4Rygrb3BLTlA1Lk9xOD1gYUVRUm9NcDwzYTdSWCkpYjhpKWJ8IUliXTpKM0NJVENEbDgwUzVdb0RbM2FBXV9xMHh7di5pQ3spWXlMSSxi''@;'; put 'put ''SGpYPSxmbWlEPEJZL0hleyMlN0lPZj9hKmZERGt1cEh2Il18enhRR218R0dDNkpBMztOQSNoYjhbUCVzS2xrSUMoY253cTBFZDchaE1lT1tXTmByT310OSpJdzZSYCpKKlI7Y1A/YFhqWlc9KSxGcGY7I1gwTllzIXhxJjhteUkkYDx6RipqOFZ+eXxPaksjWV9JfUxCcnREQC91WExSNkJiJjE5''@;'; put 'put ''NC9pR1RJWWFuLDVDZCkuWmckITc6Skh8b3B6XTN2NCVXSjdtI3lSMnpRQ21wYixtIihvL0tXVVVDYnRvIzdTKG9sUVY5U1BFaDU9IUk5VWtIfH04YVllKDVyTyZTQTZVZ1dkZm9zeE93fC52eXtheUBUWSFTdlF3Okt4Pzh5alh4WG9GcUI2QixaRmc7aU1fOEJNTnokO1BwPVR6RHp2bnB6fnUz''@;'; put 'put ''NHh5Pk0vOS9kbnZtZzBxbGc0YztbaFU5Yz5gOWohPWFpIVt5W29sOWtwdXImLk4iYkRiUUljRVlmO29RMzhYO3M/OCVzeDlDMldtUjRVaDdtTTd3Mj54dEk4ZiEuXlVCQkhgSSI8UDdjQWM/a2BKOUJDaDREVCM+Ml1RenlmcHhxRGElSWc1VF58Y2g7dFNWZiVDJlQzK1YxY3JYZEJ4ISpDWH1x''@;'; put 'put ''QiZxcVNdfkY6JEJiVXJOTnlvdn0/Jjo2K3xFOGFybmhVK1goWXkwPF5wbzw3cDRmQCxpTnI4WGthcG4hTCxHTT46e2BHO2g9SWE8NXxYeG93JV5iRjV8PTA7NEhOdyphei9zJkQ7SERMLjBERWw0JVA4fnw0ZVJaOj9tU0ljOzRHMj8pVjBbTjM1Wml2JjR0SFBMKEx9SitlUjRFeXUpTkZ7ZWRE''@;'; put 'put ''QC4kO2ZoZTQ3aWRjYy4+RHBMdT9SZ1F0eCk1OFMjO05sZTI7LEB8I0g6bVNCbSRJbjteJkNjJEIjNmtQTjN2YHQ1VTxdRkEoJHYqQXt6TX1mVlM4VTxaIXh9Qz80RyEsL3tGMzh5VX5OOUxGa3hSJilIKTVqZ1YoTVpyamA6TVQ7dXRrbiFmWEdWVVo3VWBFTSRDP111UT5eeUBxVTAkdDhmOVB3''@;'; put 'put ''OzN2Inx0MSluRkdlL3Q0JWVrT1Zyb3RHU1ouMXY4PUh0Sk5JRCh3QW0oVjEveWlHPjpKSj1kMW5QVCVQJiRTUn5nO0JjWHJ9ZiFRYGhtYHtXKl1rRitMMjxZO0whJF12aCRlPDE3aH1uTlFeWSQuJUdRZDNTTyZfUko2fSJLYlZTWCFLMVk9Ny47JHosP29RM0RmIT0iWnh4bEhWalZFRU13RWRK''@;'; put 'put ''SjN4dTdscSNgeSpzVWN4KGR6MlJocT91JWZGeXtjTXBrcG1gVUFMTzx5XkJ+VjksW083fjVmWUxMblh8WnZROU1yJWUvQTomI0g1MzRbej03QXNkIUNmWiZ6KkZadXkwZjhMaHFPelY5WmVeX3hXfi42TXZQSywhIU4+TmhwKE9EMCxMOkdgU3A4N0ozJn50ZHtzJTUpd1tyaUY/JVI1TGR6dUxA''@;'; put 'put ''S2QvTSFnKE9hazM0bHp5bHs6fVFMdGhxJDRYY3UhckIyfUNBUSVMK0shcTVob3pIR0ZpdzwrIU5OR2R9aDlVMTdoKXB3Ui9aQHtgIyxrIWUxZ3FjRDVgazF7d2pILmlpZyh3JntrSURHbEt2Sno/bWVfW002VUc7TGkoMk9GVjhVeV02eFksWUMpJCsqI2BQZEU8YyVbdyFJeHp4fXdrP3FsKFlQ''@;'; put 'put ''eiwjaDhPOD9bYjJid3JndmJkKV4oNEFre0s2PER1bDJhJXppRUZrZ01BQSpoe0dCdFZFKE1lYyJ5cyk8diwsR3wqQklJVFBbT3p0S1UoRlB2cHhtUn5YQUFBQUFBQnQmRipoRGxxaTIreiNsdlRISkZBPSE4Q0tXOzNnUypwcnhDOElJKGQ1OFd2UHt5bjRUeGI5UkY3c2o1RStgTSkkIj9ieitf''@;'; put 'put ''OE9hNVskTSlHXTJCcm8zfHwxfGYiX3piVVZaQ0ohWDc8P0w/N307JVBMRHJtSk82ayhpRWw1cDsjMC82I0BVcz94eH1DNWNAazdiPkV5YmZqZWhteE5WVGxJOWNuV3FaTDl4UVUwbE5JIyYoJGh2OC9tJmEsczEpZShIT3RScm00U2F4YnE+JmA/diE2SHh3JmpzdlRObGdvKVBwVDFadU87aF80''@;'; put 'put ''LzN+aDV9bFtxYiFRQCljT2dwbGU0eDEqKlhXcGI8ZFl7MFtAalFAPDtAYyExeHtMWX1hXlhDQ2sjcDRWJHA8SlJYe1VZdVY0PnN5ZTJJYXx4ZXlIPUowXlhodzwuMlEqIWl2VUxnMiZ9JktxNjkoWShqYDMlbHldJjI7cjNybiVLSiZ1QkopTiYwXn4/UFhrMCU/QTtbI0UvfGIyYn0yLFc3XSEi''@;'; put 'put ''alIiTUd3TGIsd19FOCQ8I3lnczlwNjR+fWxJRWovR3ZmdmFFSGMyI3c/RVJJTiRJR1F3P0NPJmd+a15ONCg+Q3AkOmBle2hZZSwoZyFiaj40fCFzWW1POn4pOn5Daz0jQHMkdUhiak5mYUlZd0s3UVV4On1TSTMoaH1dLlgzL2grJClFW2JANk9mUjM/QXRNZzc2QCM6ZnoqT0xBc0pKMCJRXmIl''@;'; put 'put ''cGB3aVFAc25UK3VrYWssZ3IsUV1xWnl2bCZFNFE6QjtyXzB7LkpwZGdPeig3VDMhZEpsN1diamNyfD50KDFZOkchVzZSfn1uUk1BYCUyR0JyemQzWnxbe0FUPztVcjkvNUttRixKT211UjMiJihNaz0weEFuNzhgdjJOJXo9SEAqWykwaVBbXz1DX3Z1M0lZUmk9fD05eTlYYlI+NHoxKXkiVjZH''@;'; put 'put ''bEJ6ZWVbNUd+WkBVeCZFKiM2WkZZTTojWHEqWDs5WT1ffGV7TGIsQ3k4fVVxTDdnOyVraERhdypASTdxJHpOc25vYTd7LyhCPkY2XUg7cD14bE52OF8mVlMyeTl7czwlSl50X3dqU1RVfVBaPCwsbH4kUm0ubkxuSTApc051fiZmbmFjLzlkSUI4MVs9fE0rRVEwdXNWVT8+a0Jhbzs3KkhtfWVh''@;'; put 'put ''LnVrWXkyTkdLIzxbT0daITNQNFA1S25NUjFjaTFaSj11ImpYOkpLZlBoeygkN11nNGUyYm8lOnFIU2I8XVo8Z2NsMjMoaTg+T2Y0Qjdjam04OmpIJjJLJDR0VChqc2NKcFFQOz9BKlpTbmlRTGd3Ky96dSRiODZhOEJpTmFIdGUuSz4qWEgjL1tucT9bRGtfTHI9Ij5ZUlZWKSE7OmxHKlMzXz18''@;'; put 'put ''fENEQ09IJE0icF9FeV9uQGo+P311JHIxPXBFY11hJjI6fntKYmR3dCUwNSNTbShUaVFrJDUrYktMNDxdLGc4W0UzR0FOUXFuPV1Yb11VLipUdmAlbUpxe3dAVHMqdExlbiZEO1ZOaWYoO14vdn1bKnxfb2ZoSyQ5R3hqODh2bXJsKC4vU1k7W08vIXBOX1o/bD4vb1Q+NTomNixLO3NiW0l9OCto''@;'; put 'put ''bSRQSHtFei5zS3dOWywwbzIwVml2YnZzVy5MaTQpVjw3O2JTY1g3aXd+cVQuVkh1aUxdNX47eDQiRil1PExVcFI0Qz5bQEohdFYhMUwoN3Nxa0x+eDV2cDg3Wkp4eVJqe2QwKl5YOlNOKX5RN3suRys5dGljPiVbKDtWej97MU19TTxyUDxNWlJaQj4rTVslJmZJXz5Ac0RWKUUhZis5VXVAaTJh''@;'; put 'put ''RDJ2QFc+JHg2QGBoZCx0cUIsVkBgM1FqVzAveVU/L31DQCkyQ3tocV5KZFFCZSJHVE01QzJSLjhSOzVFSjl9Nm1rSndfV1hdJWB9dCszK205Q1RgIXgyKGAzIXZZfXtedmtwcCwsMWlCVUA9Ly9CKGNqeXVSUV4kI0g7ZVMpImNObzVCSUB6RCxyU3BZVjNYaSNoWlJjaGNAJVAwKmk3KEo0ZkxP''@;'; put 'put ''Wj8+biFZZzkyLHx4dVohfXlaYjppO05JeHRSeUdSZTIqW3d+dX5BVllyZnk3eExkTCVUdlJpPHZkWGklMUl2LkM1QFpjLCwxSjFAP1c4dERiMjVLd2x4WDZ+TmxsJTs7YUNaQUVLISh2anpWcWBvTSRZej0sWEArK1QqXypwVFkuMFM2ejFsMmd4YzM7PHhAN3FMe2pBNjA7fVd7eW8sVD0xYyxV''@;'; put 'put ''MklqUVAuZiVtMmM5cSEjW1pjWWNDZjl9LH5LaUd0cng6cGwjI3oqQWI3aThyKHkpe3t+XyFeMGV4Z0pvWF9Yd2I1KV1bUUBhc2RgUGk+Pmc5UDFmVGV7TDhdJEM6dFZvYHQjOFZ+SkU6QGxyTz9fak1mMWcjJitMRjwuVSI6e2VKWCs/Yi8sSC5eYVZdUVo7LCE0YHgqIlByNlZ9Pz5yJUYjO1R3''@;'; put 'put ''Um1HbXJ5QVkiN2h9b3xSUCRFIi56MXZFL0MuPXJfLFduPUROWyw+UGg7SjBBbnFLUjUjTW5POmMsNHoxMVheNyxMeXdCVGFRbDMxNTAobXdqOmJ8LD9KPEx9bXFWRFldb0VpTTlralJ6JldVfWlVeUE4VTMxPitOUzo1QlpjMnYvRnhEI2EsNjx5Pz9MJGddPHo8LiFQSDMkYn0heTc6RiZ7Vl12''@;'; put 'put ''U01aeDUrKj1zJkc4UlBdPW13SnU3IjFVbHwsKUV7LiV4WyklQEVGcmVyWDhjNDtYalJ2TkQkTlJjOnZzYzF1R2dqdVROdF4vfUdNJWxAflBCOl1HXnlgeGtqcWIoQWc8Z0V6fD57U0JDQUNAJldralFZUiVTUiFDS3I8Uj08LmRzJHJpbEZibkcwditZUSYxKHxeU1FyOEl9RFB9XnBOKmNjW0dP''@;'; put 'put ''P11Jdk9bLz5QKFhoQSRuaGRtc1NpVEdGXjcqWlY/LFBpP3xPLl5bR3g3Ni5eP1hEOkx0cmtRZCIvRVsqfHNLMStNYzhONnUsK0BFYCJ6Qj9jQmxSZkBiRypSY3FfbGNHSCE1LmJ0MFVxJW9GMjoyaDJINlFEVntTYHdmSFssTFskd0p2Z1oicDExK0g/QE9LeTd9eG1xTntzZFcie2pAfjdKT2Rh''@;'; put 'put ''LztKJWdncVsoOFhlcjI5PHZxODlHPStTb05tcEE5cS4sWj48QFtReHU5aio4alFDcXpwelcyQncwPWhRIVt9e1FIR0MmLzJzKWEjbFVkWVFVT0NRIzp6PEw/NzssRDAiYkFEXTV3NDtfYGo8en1uUzBMckxxeGkyc11VQSJvPnhoWFtZMiEoU0t2MVdHKEZ6amM7IjtQOV5DZG5rXXRsIzVDb081''@;'; put 'put ''O35TY3BrKUVzSmIxYClIWTNPZUlLIj5ZKHxuYFJKIml9WF9iNGdqcUhNMDxrPS9lKVRPcT10fSJnb3wrV3ZdQGZYNE1CLnV5UkNNNyNXKkMvTmRhVldBNGhVSm8wYW9UNmRDR3c5QWhGUnMlNGdVUjMxaDhdeSx2SFFnRF1CK0hwdGZPSVk/RUM7fFVkViJUSXB7PSUrV3RJYkZbPkNnSy5lL3t1''@;'; put 'put ''QGMrSyYpNW9hXzFzI0hSJj0kX2Bta3IqYF5ASUgjI0tLRyJhfW1tJEswdjBBQj5AfFV0bF4meWlxVCwkbmI9ZG5BIWJ8VWxwMz85dCQhUURCeHVeIzNEdUpvNiEqUyw+KTkzbXV0LDJGOVVRVEsobWNYWipSdFUvNmRwSSgzL0tCWUlORlclP01mOmgjSF0yeEZURCpUfUpaYnw2JnV3QzlYc0Bf''@;'; put 'put ''K0N6VlV1NmhSQmlSL2ZBYCo8NGFdOVlvWG8rRFFNX31tfTZ1UiQoO0ZPUHEwU1IvKWtrO0x5bVtUe2VmdypSNDFAZ21VSyZ6UjtdbTVdL3JVW0szKnUlKWtoc3Q2ZU9UUWxBVzApcn1pQigvc1hMV0RDbTNLR2VdaGYvVGBUbUBCJXhFd1R8Xl5lM1JyIjhiOHtITTVQa2dAJDZLQEQ2RUYpc2xl''@;'; put 'put ''L2p9TnMlcVFQRlV+S2dHVTJbNG4hUUpadU8leF81eTZsVzRqJUp8L2gsdCNFLm45Q2JBbTZkNSRAcysvfStQKnMray9aWnY2WXNfX1gpJHgpV3pnLlBMW09haVdBfTA1ZTpdVG5AJUk2UTxmO1N0RTJQWCt9fXcsb1FvJHpaRysoST1HMGNkbT9HWjMoSTIhfTV9dDRqODw+c3lbZlZwNChXIVlM''@;'; put 'put ''eVk/TW4pXj9NfmE7P1UwOldQLjhUOkpZZmMlRVBBTW0hPXYjOlo/UiU+IX0yfFEqeE53Y0tqVF1SXSxvXllwNzpjak5JRmVzI3h6Y1AqImxIVmpXUjpTPmNNT0RgIU88cih7Y0dZNTdMIUwrJnQ+YnYpMT01dChRfDtpXjVMaTdpbkxXUGk+U3gxP2BvSzpdOlFfK0tQZmgsUlVMSSFJZiVdQzhU''@;'; put 'put ''S3JwP2oybl5GaWRnYG81eTxDT1pxQ0JiX3N9dTFlMzQpWV93PW9HaGlpPU1hIklUbWgrTjRhbF8mXWsoIVBCVmUldzBTZFBmK15BPDApPiojTHpqb2c+MDF7RHl8Si83SCEpSnZZOH1BPHMuVVJpRHdGOz9hcCZpMlJVZlhMR3M9SyM/eG0rRjErLn0kIVY5N046Qmh5M08uI31bVWRdfXd7X3xG''@;'; put 'put ''eFdiR1pCdWNNU3ppfltqRUolKUBLdXlOTGF6fEhPMmZpVlFWNXshcFo0WTtVYEJpanMwODh9NXt8eGhmLEFYTFp4Kmp0O3BmMzRuK0JeWz9WPm1xTkN1MV9ULFNjWUdsbEtwRTtFR3cmOl1YVCEzTU5WMnYve0tnJX17d2U3UTVvRjV5MXBPX3JkdTkySzgvLG44ODREdyRKNCtVKEVibTBMWjYx''@;'; put 'put ''W0A9YHlUJTZRVS43I0RlLENrSkN7M3JgIU5+N2k2bzNgUHBrRlcqblkzcWt4OU9BWEwwRypmKT5tWUBwfl9JYVJRWnI9IjwmfT9HQ1gpdD5NIUpyPWAmdT8jPFNqSXQocWwjLndHRDpBQi5xclR1dUFEe2gze3NfZ159XklTITh8WGc4aTEjPkl1LG9qPyZkNjVfKjEiNyx9cTlfQEllMDlrPGUo''@;'; put 'put ''SGZXRlJVb0M5YGpde2hDMk9aTTg/NX07QFE1Vz0rVU9jJHJmV2V6VzNNZSQ7PGZLTXJaOUFoPHBhMlVEO314TzJnJnIjSyRSem8wYTRLLmRmbHAyQ092KXM4N1dFW1pCNzgpLilleEU8YjttTkIsbVl2PTVZPGBiQHgiP0Iwbzxlb3JqXz5RXnVrPSJyO3h1V2ROKGIlc3JYKn1aTkkufkNqdjxR''@;'; put 'put ''Ln1WWV19SStdaEssaWFUJXtaMEVxSCVGay9wJllKSXIiP1Y/PEd3fHh6b34iOzZKK100clBiOnZPcmxQOVl7bC9tMlMvUF5WUlE8eH1WbmtxfDlGZn09d1ViYzNdT1pTc1s2QV1vbExjcWRnbT9RSURXZDd8RnJral0ydy5FJSl0d0khJENRYG0sNWM3eF4heGpSYG5USDJlfmYoT0BiPFhpNC8o''@;'; put 'put ''TnJWVS57RlQ/QitAP3p7LE5uUFBhKFRgX0RNRyJscmtfPlBVUkpgdy9rUSJSI042bCYsS0RGNnhuayFfVEw2b11lR3lmP0ZVZ11uITIsd09WWSR+WztHbSMzd3VhKlQmKVNlY3dubUZJblA5Z0NxX3NPPkkmU2s1dCFAIlM7dHh3XlYvI186bCt0cTJUVk0kIXU0Y1ZwbyZIa1s+b0g9TnxqW0ZC''@;'; put 'put ''OHUwImlpd1ZXYGZHaVpTKncuO2ReYUJtK0h1KDJYVz1tYDJkPV9rOlBXU252S0EkVykvcGlkNFZ3UTBXZmwkJkYhMGV2OEd+PHo8YnNTRV1IOGMxa19PWVE9e0xZQHoiVj5xNkhwcTI6YzNGQT9hQ2k6NXQxdHJsbnhBOCZObyo2Ji9tczhaKlJDZCpvY109UDpMOWJvZlI2OFp9NEA0LmZ8fVJy''@;'; put 'put ''OmVVPyppTy5he3dzcWxQfGI/bFVVWHhSWWQoXjR+cyZUQ0VQZS9IWTt1fntxWGdhVU1ORWQiYVFtPF5qSUE8cEw5LixyaDNoUG5meHcmW0R+K2tCY28jUTkyRztkIykwdXZ+eGpjLFdfRTxoUj5IVXNBNkBmZ3RDWSslbjsraHQuNSlbQW9hRSRxdjlrbi81R1h8X3EuYkV3IV9le1dAPTpjXl1X''@;'; put 'put ''IzdwMGgmKHRYejsxIixve2VoSWZodF5mZzkqP1EjIjYsZjdKZCIyWTd4SyxqLEdGRkUsdEc0N24jIiImQkoudEQ1c2J0blc9P1s9a2dPXT47LFBITjp3P3JuYDs5MHFOUXI1NHhaKDV3aVMpVjomYW1ATllmWWMiN1Ysdn5TNnA5S3IuMz9jentuR0RXWmN8OEQyZmdaaDVaUTlbJHhBOU8mQkRz''@;'; put 'put ''aiFgakl3XU55JHkwcUsuY1dZWVUxdi9UYT45IzUoaE5gNz80WGJLdi5WPnxHT0MuPElMOl5aS1ZDIlh7JVo/ZD5RRl1lKktIJG5DUmYoWjRNcj9UeF43X3R4Oj87cj92MnhLRiZwP2kyJGclVDh4Zz1qVWE/e148LilhJEkmMF57UlVSSX59dVVfZUQ+Q188eDJWeCkiQXspdDwpfGkkIjlEcD55''@;'; put 'put ''YD5te3pYLD1hfHhbJSwrSkNQIWpSRkY0bF9jQmRCMyJdRVc9ezwuKFhNMlE6b3J+KXprSSwiRnV7SykkcjZMS3xzIjZHTEMoOVM5SW84VXYseTleVnUpfmNvVTMxOUlwIyJBU2t+dXw/KmM4VlVZaV47NzVxNURMfFB2eVhvI2VObH42e2x2L2AuJUR9fCNNRj5sKWteNzNOQmQ7UWN7bltdSERG''@;'; put 'put ''VWBUSV1ZcmlVaVJqbHFOdkk4JFRUSGMzfmAsZzIiNHQvPFNMNz9SeTRPI0JlayJgdWRzWCx2Z0FRNUI3VDlGL3JaPF03SDxma0QsU3RDZTdNSTlkcFh9Rk9EdWljKVVfZ2BPYF5tRV9rczAiXncxRz0hYSl3R1A9eXtdTGVfOit0VERaYFclLEBYRHtBbyhbSDN7XSkrdCY7R3V+Yiw8eFBWY3w5''@;'; put 'put ''PjdeJj1DP1E+alUjaTc0W0RXbSt5ciU6djVORFl9OGdkVCtaXy9XdmMuWEIkSkY8RGlmJGhdUFFjNEJeKjV4RHN5LyZEMGVPUV1laGtNQUIsXm1hKjhdR3xnYHlgWElgZlp6TCJ5L0RKKlc2fiRmTHZAQlp8T1tedFFYLGJtVFsrb149LHdEdXx7Zn5dQCNNMDYjYF5bIz8+fSIzSyg1VzlPZGRX''@;'; put 'put ''Z30zVkhFfXxFdXVRMz5CW1ciPz01NWlDeGdTdFtXZzlObEJqUDU9bDdSdlREOkE2Knx0WiZqMTtsU11jSkluUSxDRmdDQz4pTD1DPzN0dkhibEIiQDFvTnx4W113Q0hRXSN1cEVqeHpndmQwRHA4MSomcSFFN0ZIfiZsZThDTnM+NE9Ob2c/bG5Tck9SXktjIVF+KyVgT1hYZUldRT17W2NZKn0+''@;'; put 'put ''PUc5bV8pdXZ0THQhYWxVMihiTDRfSWM+Wjk8ay8vVDV6b3RmOFtGQzlJN1RhRk1tP25GTHt4IVYmPGcmeCNlJU1hfW9GXShTZ0c2Yj42Wk1SPEk6WXBRKl1pZ3NHKDpDZzFEZUolW0tsJko8QU97bDRPbDVHX0NDUX1ZZW9HW1B4MENHSF8jRyolNlkxKjF+U2svUFpxZU1nLz9KXTV6R2A1b2wo''@;'; put 'put ''elRKSSIzJlN8SF5CSDhPNGV7NWUqN1l4VSIja0c2Tm95REB3RTMxNlpELDBFRlVUPmxiek4kViFYN2BLQHRybTgiN1pRM3lwdTFGPkswLzY+ZDQuYSYyQzdjLmJ8YjNmbjBVOClULG9eXnsvRTk0P2sjUlZCSzI5bVN+W3hAYVYwVEQofktmU192WF8xdGkjVns3NntoMFV1Wj5ATCVbNSF9JHtC''@;'; put 'put ''IitGZCZxN3pGL1d7UWhNdUc9WG4icFt7YVl4JFJATzc6W257UUtQa3RLXmRzU35FXzU7XzZjfkdMQCNMaSJ2ZE9aXnd7dj0zSCNQdSw5KW4sciMyc3JXRHRFJjpucDokKVJnSFtgInJ6Mk1UNEh6byYmc0NhfXVnYU5jKUZUXiUrK2FFUWF3SSFeOjx6WldTdUJhRk5MbX5oem1PaHJMO1kyK057''@;'; put 'put ''VG0vJWIqeCpIWVdBPiM9KGxDNSVGTWhneExNPGZqVHxrUnkiJF9JL3VaYDRec1NoVUM+OnBUSVRgenNnK0A9LihdRiNxOUZFITJoSytKRk8yMWQ3U0ZNV3xNL1ZTMS98Vk17flhTRFgpaTFoKVRtMCRRcHU+dVIpYk52Rnw8aXZUSVlhYEA0TGFzciwwTmFeQFc8PUw0dFoxQmhXMGY6bFRFRU1j''@;'; put 'put ''akZtXzB0clUvP0FwbyF5Pjo2PE1OUmoxTSZPW3llZytHT0A/ZzVSamA9MG96QkVtY254eU0hbS5wVVsuSFRMP0NpIU0qRzRnRCY+MHxxY3Ajdk8sdXwxNSxnNVQ9Z3B1OkB5UWViIXVBOV0zZ1VGYSFEMFpVTmZddm4mWCZYIkVTY01GSXB0Wj9NSH1gcklCfUh3VzxmO3MvVzs0d1RONUBjfXt5''@;'; put 'put ''SE9YRGdyXzd5RyJgOihIb1J5KCtBPU8/UHQ7LCteUXd2UCN8Y3RRTFoiKUNrSjlKWCNscntAUSlae3peKjZHOS9JMyp7bXY5fHNHLGlDUzFgT0ZbJCNpYndzZTtXakIvQnlVfHUrPnlbWlNLcXhgW3o9N1RiMi5IQDxtWlBAXTtQQiF1UDBKaFJLSHMoQXBEbDlMXTIzNkdeVGE4b0c+OW5wcSYl''@;'; put 'put ''MzBgeGQ9bVZ+SHZLQHtXSCtGNjNhTWguLlh9MmFWIUZBVmV1aGRhJl0re0VATkZdRTw+YFJ2O0IlU2dLWjkyeUFPSDo1TDxONzxpLkxRRihWRW9JQjpRUUU1Y1NtNmkkMlVlSmdnLlNgS25tI1k9b29UPz5uIzhuWi5nZDhVM09DRlJyaVhZY1VTOiNefmx1OW5KOj5DL1E9YCRjX0x3Zm45LnVe''@;'; put 'put ''T2Q+RFlWZjcvXy9sS2xBSGpLK3NobzV7NUdNKmEial1tWlg/Xy9SO117MmhfaCFvOT5WUClGaXckZlVSLD0kd00iYlQ1S18jeDU/K3I1eXVrQ2xySyxZZSgpdDIvNzowfSZNRGp4fjU6WWRPJVFCQ1t0OXRMd01UTCtibS5YYClEJiUuY3d6TiVAXUg4L3RTUHtHJENheG4kKElKTEdYKkNzS2s5''@;'; put 'put ''YitTSz1OSEMkbEFGYzc2X3dSUVU2QFlAPWYhYjw+Jjk0Y3NLbDwrQShxODxxKVVkJGhzYlZVdWx1MXRXbHR6U2BqVnlIX1NGKT5JPDQ0aDFvOksuUFBoTW95c21NWkNWbltffHxDKEpIYEd5flBxMF9db1hBZ09QU2U+R0F6Zmw5WDpYSi9ZJkRhekk3PmZyelhlNVVBaF98XnhlOW5gfEhbQlVI''@;'; put 'put ''ZzJYcX1ZNGshdFhPdiY3L1FBQk5RNS4mJkxaNUlAJnBgIUpdKHRzZWMiTyJNcCt3Q31sJThEd2o7WEpbdU5IR3VnY3Y5JUB0KT0/RnArXnBQL2IjTSZ+UXttUHRnKkM8NmswYHldcX5xYEFyTyMjfDQse2gsTjJUJUtVMV4+L1p3YVFsdWVpSEdQQnh6RURkNWJvX2p2eyxXPzBtLjl+YjNtRT5Q''@;'; put 'put ''dHYrSXgkSkpqVHFRX0leW0JSKS89TXIrSyhwezhieyExOmgjd2lLRnJYcW40WWVDOUtKYTpALGk4JkxAK0E5azVHWE5jL2N1em04TVV1Si5FJnNgK1dAXnJ3cWw8ZXR9KXdydDsjS0khWX1MWThvTU1eWjolbE9dNG4oaGFYWWV5MHJ6Xi5GViFrXX58U0o+bXIxYiR1Xmo2MU1WPEFXRls8b3BS''@;'; put 'put ''PjBVaEszV1dVOXNIODVaclN5Zih7Z34wNXkwSWZ1W3t7byQofHU/NWBNaj9dQ2djSFk/SHQkIy9WS3Q1Q1J8VWluMjxgSmdqLkJkZFpCL2JvaWhdQTlMNW9oa3tpMUN8d1QxYHtzVEQrJkY+b1diRCx1N3t+e0JuUzp4cjgpPURFKUVRIyVoaTl4QkwrU1s2eUt2SXhvKS5MRHUxP21nQXkzb0E7''@;'; put 'put ''aDozNDUhPUZpRktHfWtOTFgyTSFXdiFjWEp2IT56bDd2ZFN4Iy5gP1UjQl5qUHF5VDhGZW8uIztXTVI1WFl2elAsdGpWZ3taZi5peHchdUUuMStrbW95bzMsKSl6VnEhNS5kSjRxcktoP3d3V2o1NGEzMHtVb0VINU85KXxoS1NmQz1SRUZ8eUc7aU8xSF9QTkt6fVkpKXpJS14mP0xwbEEmLEI0''@;'; put 'put ''e3drdF98NXJ5Tj1WSEB5RFlxNVtIfnNaUzU5LD5gKi9DeyV+dn1aIjlyeFMuOERxTCw9WitAMVJUSF5obnA2RG8hRSxeUG1XcDleSl9QKk9AQ2JoKiZUNW5XTjQsd3h3WnMjenRQejBYRGdmYXVsLDV4KzdfQzVNTVRyXiMjal1LTWh8SXBbQnJwWCNLIUx+ODZve0I8SjBiOHdIT2VeS3gmQyVl''@;'; put 'put ''R1VKck1bJCtJYGJ+QDAlYVhCT1tITT9gbmkvfkJheClER2A2VSttZ1Y5Omo5OyNKWzZ4NExIZW0lOj09WnlrISgkdFs6U0d4W0g6YD4hQ3dpTjl3WllGTTtRfnB7MnwiUVVObFEuSiomR2RFcG9kRSJseW1EWFRFYWwib3hrWypIYDFrLFZrbzgqUy95a3M3O1p7NkxGaUc5RkUhRSpfNGE8c1JR''@;'; put 'put ''R0doQUF3OH1tZG15fEN2bigvfTZPWkhqXmRQPDRrV0FydFI9VE1jYTZgRXp1PGM+OTwvLl9rXzNkQXhzTnAjQGhzWFk2OyNkfS5RRXlbOXhfWDlCRyJnOUp3VlpSQkp6SllUTW42V3A4KkxoOSVeNjIsRi9kP1lWZH5sQXo1TyMhX286OWQ4TXBuW3s0QkBwVHEqaUBycH08ZmVlZEVCXnNab15B''@;'; put 'put ''ekE0TmghJUxhYzFRQDd6NH0zRkJfYnFDWCVjdnI1bj5LRH0hdyYqSn01aVtNcHwmQz80RCEhQTVVd3V3cDNFfHNWR0JgS0FTV3Y2V1tXMEo5RzZ3Vk4vMCE+JjNGcG0yYEJMeVRTQmIlbEt6KGVQazMkQG96UjFyTGd+IzVneVcpP09QfF13I2JLXyEqVEdQPng5YCRhMn5zUHZiOjZSSF1HMDc6''@;'; put 'put ''S3R1eHcoMUBaR1JELnJpKkxKT28kelQsLEBfeiEkOlc0ZmJwYypUKkYsSyVoRDRPeT1KczRYRHlUQjZQJVtDPHVrNFtIXzxHM05hR2h0SixdIy8yOVUoYlNwSXA5U3k1QkBlSXJKRjlTVH1rMVIzLjo9blc6YHtwfWBjKW85YlhfTSQ7YUA+Rk44JVJIMWZadSJ3W1dRPndsc0lZRzdGPiMkemhx''@;'; put 'put ''Nml9Kk4yPy4wXlYka1NeVWl5XzgkN1ZXRzFnN1lBOXtJc1FuOmE6JExYJUpvbEk2KnpdU3Jpd35HJER+a0xicyM1cExgY1VGL0BTMyt2TzowcGoyTlEoM014X3BOJWVQZmVZW0pBOjdDKyNNXzZdXz47dkc4KT9dT1Ywb1tmcUlWbGAzJXRdbiowY0wxJHElVHhubW40R08scHg7aGAySixofmN2''@;'; put 'put ''MkM3MzxtOXspLjomYGl2RDFXWjljZVVVe080Y1JKYC9paCFLcjc+dVhMeSlEayhwfFd+RX1PYUlyb1hMMjU1ITU0ek4ofUAvNyo8fCQ1K2IydURZfVFmYVBhJHQlNnFdbDFtRGtPOVJja18wTHJJO2BYVUNrZ2BSb3VTdjMucEpCMSVmfSRnIS8qZDJAXylmNF1XZjBkSmBmQ0h7Xz5MYUN8U1Z2''@;'; put 'put ''SFZIRnE6KW8lfTl9S1t9PnB1OSlgV15yWWt3d19aamgjcDlGNXlWYzpzYEswTzhhfTUxOU8rfih0YjohV0BZTyU8Pm1DXzB9bzo2ZlNBengzaEBCbihzcCJpMGo7JC9aWnhtI0RKVEMhKmpkPnpbMCVrdS5eRWB5JDBqTFYsZzNrbmlqUFtSKWZhWWtjX0AhLiEjZXgrJjMqY0RLRVVeby97MUwk''@;'; put 'put ''cEszVjZBNnA6OnxqZDE0KDYmMVomXmpIQER2UnNfaUNEOGJWd3dVU3p6bERHcngxOGM1TDVuIXtaZ1ApJjY7QTo3VSk0NDFjRV5sTGB8MktUOT9xbU5DUTpoYjMrdDhRbD9iP01vYG9PcXw3eDRnciYiUCI6TT5qdiwvfjh1VE9OLCxmXiMqLGlOemw0clYvYzgoJjJHZEJuflM4SyI0a2d+ejdM''@;'; put 'put ''cTxreV4sOEo4IygrRldlSFIwMDg7RlFheysoWDZaTXBycEM8OXZDN2pYPDd6KFhHKkAyNUhsZmY7UFlUYmV4KF5yNkVjUXM/SDAqInxPIktBbWBLM2pdWH0ySWk6Xm9fUVYyOD5zPmxzbEpEaThtbWtLIUA5cDtTXkRyenpPLF1sJF1XK0djOj8oW3FJOzNdVkdeOEo0R3V8WEtRdz4vbDcsXTR8''@;'; put 'put ''dSsjJE5IIVFpMkIwXXA3YntfbSYmQ1k6e3JqMSVoSmVDSHoifV5nQ1J7SiljLiksWjFQKVVhJmIybERGQF5dfHE2fHtubSNlTjdJIl5TKHZkaFBibmBKLy52VWROVyt7Okg1Pi9KNUlFZHpeNkQ/YyM0XVRTbTNoc3IjflEsP0UiZDFpZHFaKzFlU3BZfHxXaG1xOFhSR3RIdDd2ZUR1RjNkcXUz''@;'; put 'put ''clcuZ3BMJWBIazhveXVnIyVAUjVMM0V3MG9TL0BYbl86ODI0bHF8fUN8NVB0dTtHN2cyYkI1bD9CNUp+X0szUlU6UXRQb2glIzQ7Zm94bk9baD12c2tjX2V0eGJNQ2plMnh6dEB+TGc6bjtjKD9KVyxnUngpUltBP0JdbihLak9ufkF4P15TMzdsVXZZOC9uZWlhTnRNIShUfHFFVzs+OzxjPl1b''@;'; put 'put ''UCw8ZSxGenkvZTV1R1pgM29ja357R295I1dwJVlbe2YzVCxWdk88VmNhWXxUa2E/MCtVcEAsW2graSw0SlY2fWUybGJeZlN9X1FNcGx+PD1WeFFoc3orTm5fel1va0RSRWEhQmNsUX5gNVgpVW16MkUmYzYmMTZMI3dwbTB9bnBGNWp1USMvJF45VG9QaVZ0eToxQztORHR+NjZ9RXJTQ1M/ISVK''@;'; put 'put ''JkYhaElueHwyX31tPDh6VjdzZ0VHWFo5V2NZR2FHMkhgb0J7Jjg+W3pVfmBdPH0uXkVafm8yUEtmTDEhVjdTaEZEMz59NEs2OG8yVk4hfi4lOC5ZI34rLiNLOCU+XUcvXVl2ekFnUUAhLk1KPn5dbSZXLyVVQEU+Vzc0QE4/SXg6VVArVkgpWENIel1ZIVA0RkkhNUhZfl1FWCp9SFc1Q0xgPUo6''@;'; put 'put ''JHtnfEpfR3hBT09RcU1zbmA7dmhNS0k7NTl9Xzs1UCldJVNmPUJmMilqdSEsdlElbV5nZTFzL2Y6Zn0zPD9AJCxgKXVPRzh1Jmo2JlU2d19YciRCeWEjdDlefC8yTnoiT0dfeUdqOSF6ODhlYS4sbitVPi8pYU5TYVIsTHB3WGddKCxKVmB4c3U8KytyO0YlND4sb0kpV2FfPSZzQjR5Q28/K3Nk''@;'; put 'put ''T2JXOWloKGt1S3FNJiIrdmE6eUhvOzVBc2tvL2N9XnxFMi5lTyhFX1BjdWdpREJQS1tpR2giODFHIT1FUjNdJWsxY3JOc3ROV19yWkEsQyoxfUl5JT9OP0RNOURyKVdQKiM8JlVWak9ZT0tsdXQsZilaZEAvQ0VgIVdnIX5VKGpLTTxjIVJVRE50OU43Okh5ZCMkMFdMKmhSJDJgeCxzZDhqTCou''@;'; put 'put ''Wl02TTl1XyV7L0h9KUUzLGpxMStFKGBfcHAkT2BAYTBMaVJNSWUsNC9ANXI/ZzAxTGBiLCZhUmpSRH19Vzwre1M7PnRmPXhacD9WeXs9VltGbExpYUxid2VNZEM/IzlBKXcxfXMkdyh0VFhqTTkmQzZWWH40XjM5cWpYSH0+JT9GbjdZK2lDXnN0VFlyWyZ5R3NidTROSmd0b0s6SXNbdz1lcH52''@;'; put 'put ''PWxxMW9QL0U2NDhkTDFwbTRgeHJ0IjhZXmhPR0MyemczLyNHN3A4RHRJRnUwWkNpbDBZQ1s4KSMjQjslJEk7T09pQTN1IlpqYTI0bSxYNW0pPV5ZbChvLD9BdUJLUW9Eb1YzVSxzN0RdJG5LekI1S284Z3Z4cVB8dysrVkIhS2c0OV9jY0hVUjZYdCw8XUQpeF43W0tkJTU4YnskKTdHd0pqSlcr''@;'; put 'put ''MDZfRnM3OjxFTV1RLj1LQypNUyVeTD5qVE8kUUJmZXgvRyppSV9mU045akIvWTQwYHMpcjN1WjNkfG1tUCljOm41KnV2eF1KdGBEcz5aUWkicGU6dzhkOXw1Z3R5aSFrOGRhNlVmdjdJMCFlI2pte35LUmk9SV4iZXROQV80SkkvJkpXLyprRDp9W1RoX1lqZ3ZPX3R+dGFxcF5tfTRdOH5FekEm''@;'; put 'put ''NTxdVCNvbDQsdzsrTkVrdGpmKTRMZnlXNC51XXIjJHAmfCZqPls1O0AoI0ZLQ1ZtWVduPz03XlQjRjh7NE0hNV4xPWE9Pyk8OmBDUyYqbDlDS0JCcDZMXiJlPUQrWzZbdkI7TVg4UE0yNUZic0gqUC47OXc5dipuI2krNXVtfHt3Mi9bLmBGazBfens3S25oNGMqQH5aa2RWdT05O297dEIoOHVf''@;'; put 'put ''KXpVOloxVjZXbEdnUk8+NjhOJU0jQGxWUWFkT25AQyUoNV0hWkYoP0lATFJMbEFdODUuSnFUT0NnbjU8YUo5XU9AQCwyKzd7cj9SQCRjfS97NE8kfHs8Uj9ec2dTI2NNaCRPbytCUFEhMl9Sb1V4WUtVIXlkcnZjTkVZSCNeQ0FRS34vWW9Ba3l3LjQoI2JjYz1xVCg+RnhgTE9lTlN+W10wVEBm''@;'; put 'put ''ImswOGlNT3tpekhRPHcjXUouU34ua31MWyw4WWJuUzhtJEVueT4rUVdoXl1qfl5gRkxlNHUzQCNVYyJ9SlkmYko+cS4/OldwOm94S2tZY1l5c21qa3NDLjYxUUJFSWFrPFt1ayJFJiopSkNzRjtOcW9Afnc5eSw8dUZkdVs8PE9xejQ9YmhAckQwQi5ZRztGSVFLR1NgUGpWUCEkTUhMWCxBRClR''@;'; put 'put ''QkJlb1VNOmdJbVUrU3xAOWlCciZZI3kiRnM3MDBDYV5gVmE9VjsrUCFWJXM+UztEUUB+KXIlIWEoLFsmPSt5ZEUxKiJSUTlJckZJUCg1WyQ5V0ttX3EuPEhVIkYwKTVnMGJQOXV6aGpaRTQ3LjNUbWZ3aGlWS0NfZiUhMDI+PncyTnIwZixkTD97Mi9zQ05aKnd9V0dtZntAWWhoPE1IPzQlZiFx''@;'; put 'put ''Y00wVEd0Nm19YCl+KXlWN2pWfFBva1luYiZSaWMvfTs7aCN8cy45QzB0aTBbM0Y6ZTM5NWdAQlY4Vz4sSCk6OyZFflEhYHhTRThyZmc6ciJoU09VUT1BYFF4WzVTN1lTdDpvbEdTRkRWZSl2KWErWUFDUXpuK3JOMCxETzMoUTYpXTIkaysvIipvWU5+KF5nPTpaYH5aeClxaDh0JToiRn55Ylsl''@;'; put 'put ''W3JaQD9mVCxDJkNIZylyN3JJOkB6Pnh2TVJ2XSxbW08qRFVpJUBZJWBsSTxuRy8oUT04MkFUMyxHNnJ0bVJrLzklT1NlX0RAaDsrXVNGS3tEeFRKVGp+dD9IZnYkQU02dSY+S2tVKGlFQiY/dmJ0RENdOElZZSZrezYhPVB2dlJ9Tmcpe1FbS1toJn4kbmkhZVssUDElcSJXL0dnLlQ6aFpBUCJe''@;'; put 'put ''RVpNa2RpNGQlc1BNPFg5SzdGSjgxWnJUakdkJWtILmR5YTZ6dnVvSXo6IVtuW2M2NGAmb0Frb20/OGxRQWF0PyxEXlBSSUt6QFh9KlpxIlducjRZT31MW0t7RHJERHNDeX0ybipLOEZAelAofWcqLC9dem48YTJMNENOPWMuZm10RFYkK2V1bkxhR3p4ZkwrW2dMYD83Lys9KWhMVFRPKGZyVj9g''@;'; put 'put ''K1pYfi5tenk5OkFgaztXbl5rJDhoLilVQ35HUUkjUkVgJm9CKnEzYT9lX195PWR7KUdMV21Da0ZAbG8hXiFtOXBQeGs5JWc8N3BnNHc+eDJZSHZPdXtTdGo+bSV9Y2kobDBWdzAiRTVBaFJHVylfPzdXUmZTOStXc0cyc2U4JV46Nj5aSzoxW0NbfHpqXmooTDRFR1ZsczJxT1RKTzM9KCViRnRk''@;'; put 'put ''XkRsS0wrMHFfLHFoZ2RfN2QoJD1gITw2ckoqbUEsMVhJZE5od2cjSFVQNGNnYTdCIjNxLk9xTFRkM0FeOEJALkQ3Ui8vUkhJdjs2K1NwYHUxO3Nid0wkVG9nJFNFWk5aNSgoblohciNLc1VwWFFlZjpxI2wvWkZrflpTMV9zI2ozb0hxUSFhPFpJY3djaTtsKF84QzdUYGJZNUNWKUlGJklCS3xB''@;'; put 'put ''SnBvTWpoVFRkfU5GL3A3fm1SfG9NU0RxL1ZIPjRoQTRnOnFlRWkxIlBraWtfVCkjaUZaIj9JfmlKPX4jNmMjKyh4X10kSWQpMkl6V1kyQnI4MzcmXUFFIWRXVm0yVGlPfSVVRGRgMFZdRTQsKFE1JlIuWGQwIk8/QjQja2V2K255JDFrJWZqUy50UmshOkZ9Y3RxRUBWPnZScFhsUVQ+MEMlbG8/''@;'; put 'put ''XWQoK2wmJFNlQVRtRSJxY0R9WSRjRl8+PVZvOWBFXWY+cD8jeVlXXTgwbCZiPDg+Q05OejQ1JjY6SjNPNF07PkpQZ151Y0l5PThWMDBmTDdOIW5HYTIsbVtyJHVNWywuUiI/WFEoc1kjXip5RGZeMlBEW0YkPGFka1d6cVBIZ0hbJDN6WUl7WCJvKn5qLzUpVm9mK0pddDosfUd+KCZpKzx5RkB0''@;'; put 'put ''TmhrVyFsSSxXUmJxKkNBMXhxKDZ2SWt6VitBd0Bjdj9ybyt2OWR+cFQvVyxUOkl6LClERlhseWIwOnk9RHJucTs7ZDFdPmBkWiF3bVZZcXZfJG54S1pGSVMyRSkoJHdVfntZfDlWZU9CYFF1XWtlbEBdT3h7NFRvSXNJaT8jVDlPbjtbSHl8ZjgpVSkjNTNKZVt3JmV4QFkmVTdZK1pSfipjRm4h''@;'; put 'put ''QGZDb3o7LnBDXUdVOkM1Ry5TWkYiZHY9JnheaXRFTD5bK0FYeV5KI2k3aGg1OkpdUk0uNHhXWFQyXTY2KFNAWThaKFc7dmtmd2pnP0BLfmFBMCp3aVRuOGZvN0RKKU5QLE41Uig7VDRBaS5pUCEoO01PPXNqLEx3cGpqZF4reCw9Xk9hI3lbMltnWGZpMDtOcX1lKTluSDRdMiN9d21BdV42VCZW''@;'; put 'put ''V1VoUHd2YTNzbDhOdCleS1N5UVJvdTVvW3hNQjkvYzM0Kzx5NndPSyw+bF5aWDRkZTgpfmVkTXJHeVdyKWAuSXx9PT1lWDBwLiNjcU9Kdyx1QFAxJFF2Nk42UFJBY2AxMDJlI3tvVlhlKjVFIWpnUWIkdHY3Z1Z0LztoeG5PQTZ4cjt7VyokQGJ0ZGo/JltIVTpCZz10TVd3R1skQGtkVlVeJmhx''@;'; put 'put ''NzIuNCFtWWVFS0E0cGBdZngxSDVOdDU8LjVJfEZsSFk3YElwMmB5SyhZcWszQ2JAMzpHJjZRYWYvSCFYfj9vfm5SO1FoKChjYipoLE9+OU4uXWAwSWEmRThwP2hhUl0xYkBNJWFzbGNYelF+KlN4WXhPWjgsNkE+RnxjYSg+ZDs9MHlsXyQ4ekwjZko4ZV9zOT9oTXAhSjQvS1pgYjZJXkBLNXsi''@;'; put 'put ''Y21dcCFrSjBwUStMUitaWjh2Li40R08zemUhJDdoaWJHU302ezdqTnNnKFltZzY/O3p4LnkpQUAyVmddTl10Q28vTHAzMWYwRkxkMSNYOSlqd3F0Ty9kKTs7S2slXmk1JEFHRUNUJHkjMSNXUz92I0YwcWo6U3dMfE4icihrI3o5PSo5Qyp5fldrPCtbW0c6UWJdeSFaQGxfdzZyTDRofmloWUEh''@;'; put 'put ''MnJVcDRGPzdOWndGYEM9Ql1bTVszPSxGKjZ7ZUY2PyVFVUtJMm8lW1Q9bVlDaWJhOXxHaG4wRj94LGBeSExCOi9DRnNJVjdudVJaTlpdLG89QW15JHJTYSE2Y3l6akw5V0B3QlMufTJ0eCRCYjIrTCtTI0YwVyZ0UnciIlM2eHcwa3pFd3ptKj8sJTt0ViI/KDo5YF5NNTtEeXojdzQ+Ln55bElZ''@;'; put 'put ''ZVlSYGsvVDFNLmV8ZjB5MFVPdVpnflEuMCRNQmlIcmxiRVhBSHkscExYKkx8YCV6RkpTPmhGTlZVZ0gqbkZuQnlKXnhSX0heWFA8eC9oL1JQYHBhYHV3PDIqWGVNY0VVa3A5Zm1KUGZxQkZCJEliZFd+RjEvZXxbfmp0WWdydnxiKlReRV1WWT4sdFRYfEYsZTVhdVhmeFZ+OXZ0M3deQVJwMGlj''@;'; put 'put ''KiRdKGQzT203dzw6QE1WQGlyaT1tezl9M30/RTR0Mz0rcUMvdV9TYCRwSDA/LyshOThjKiImJn1FXiIobXYsezJ8ODk+e2ZVbDB6JVh8KnlTYU9LaVM+K3A3aC88KDU/WX46IWpMXll0KHlVS3hbQDVeJDBTZlRVPCRQSnk4RU5rPDRBL1tldTVoRlV7algyY11RNEQsX15MYWk3ezpdSjBEMHRT''@;'; put 'put ''LFI9YltrVyV5OmNYWDxgJXZoKUs0XUBsNj56VSRNXTk7QVo4fE9kMDRXeTxvJGIwNUwuW1V4Qjt8TFMoXT1tNX10QjhVayNZTUtWd0toJGNyc3o3VDtvTk01Wl9lbC8ldHVYPks3RGxdcWp2cC5gPH5tdVZETyR3NERxbWpwKUBVP0xBbz9Od2slSWVgc2UzKSZifD55PWhOb3lUO19CJjkhbSlr''@;'; put 'put ''P0dEeigxPl0zTTRUMUNxclkyPCE6I3BdZjQ2fFdReW1OPXNYKXA0UGI+eCk9WUY2M293bmxsK1VGdyRGUDM3NTNPaUl+fDNMJV5NN2w6LCpmPy5VVVVRX0phSHE9L15wVGRkSkR5OmBETEcwImhuXkY9N1djU1s3YjFmYTZ8Mi9iMCk1dE4kOGRzVkshOWckP2lSdEI8P0YrJSshNjhpSHRDIW0m''@;'; put 'put ''JiQlZzc8ai5RbmpWcnM5RDNWSVhwNER6NW5YK3Q2Z2okfj9QX0NYaUw3OnBPS1c2fl5+K3pudmIwVn5tTj1HMy4+UndCUyhTUWdoX0ZgbFZ5cj0mP1krO2tvNCVCKzUvcmg9YXE4PGFQKXV9VUlraGxsVHIhcmtXL3Q4UWgkUkRiZDlOIyN1bEtCblIie0I0NXN3PVlAR0AieD1ddEd0MiJxUzdT''@;'; put 'put ''cTRVN3JpTEtER2JMQy9MS0x1dmE4SHFhc2huSGVrPCxmUE51eC4mOF1DODVnZlMzSnBARnl6T05yNHZLSzhfb2kyJE0qV3wrd2YwezMqZig6dFo6PGYoUyskPywyMDF7LGJeay8rKElZUm4xJkgyXUErN2VORDw9fU1bPDFOcmtpLDtAJXIlX3R+I0c4W3JYZj9OYERXdWQyVnpXMTtfUV45MHpk''@;'; put 'put ''aUclXnJ4UkRxVj4sLFlJckk2NWoyWVc6UmdqLHEiTit3YF4vZTNaW25UZHdZO0xSWUtQaFtuW00lYDcybzpVQCYxaTxoUnghLm8kUyZGQ2VQUzh6OzhfIURMfns9eiw0dVI2UkZTSHdpemxGelRwQ2tqMm0ydT4icENkK3Q5ZG4/dy4hZXVgeCsrRHQrZUNCVHc3NCkrQHReU0kqS0BhTSEqNCQo''@;'; put 'put ''eWpSSmZlUnIoKyVlaEJSXTNoNm9UQGQsd2pXTWlDKj9BdXpfQyRtZHtOKXBTVnRKXzQvbVZAfV4xeWBYen5CMklFeSlTNXN4PTIybUo8bjxLSnRJVGxyYCpBdXJ1XigrQD44S3svJiE1RWlpXWBYeFNAWVp2azlUYlE9YShxezJ3PytJZGpmQ29iP09Ec0MpaDoqYHIpdzRLTWZrdztJKXooZDt8''@;'; put 'put ''RkdyY3lAazJ1YltpK2pGeWciWjcpYnQ/VjBjOSQ/Lil5bTJ0KiV1KzRYWFYmclslRkEhak1FLmY6cl88IT1WJEF6cT1oREc4fnZXfk1LQmdXSkMkZE9NUSlydn0weVciNUtQPWdtcitDLDl0Nk1aTVImMik1UkE7XyUqLFtsflBVOlElOEd+N3UvblovLDl0e0RHKksjfF1MWXZrJlIvdV4+OkJu''@;'; put 'put ''UjA1Rl9geG9CI2R+Q11VWWZwNF5rZGBjJXIvOXJyc21nUXh5QkQmKVAwempoVFNic3xnPnxsejJXcXBGKDhKIil9RFg8JURgK3RvJi9JVSh1LmQ5NltoMFdgUCtDPm5NfUxMQ0l0Ozwvc1Z+OVBkPjxjVk1SX3NmQFdWMndAWD4vSVVhMkp6ezFGT1NlfFNeYC9ENXs3WyRCJClJNHExUXVeZWZF''@;'; put 'put ''c1NnNW1RdT8jaTk5S2R+OXVsVF5YN2ZYWnhsXklhWCZZLlRAL303OW5aSnBrS1E3fDdfKDxPTXl7NHApSE1JXT1eRkp1SV03NFlwREA5WEw+P3EiKCFPS3hWJVFpTzprYDFETC4sSzE4Q09DRzY3SnA9biZ2WSkmX2VxJXg+T3hEZDF0OHVhJXVtfmg2OlFpJjBdPm48IUlBKDtRXm1gY0hBenp9''@;'; put 'put ''ZTwhY0EsfC9vKCtzJiFaNCpmYXczSlpWakN0UD9LPEV6cDNWbnBRNUZINzZQKmdoSkt6cT0xXW9dbH02aCl3I31ZYzJHWzJnRmF2QTZ3KWNaTTBbVCNNIz98TlV0Vlo4UlAkQCh0TilXOVFsd1dTUXhwIXN2OUIoMjQ4ZltidSUyUT1KYjlHUmwjL05uZmJLKWMuO2hYX0EzZCV1QzdfJDN0KEth''@;'; put 'put ''T0UlQyxaQDIyZihRYFUuYmFIKTk/SThrdyJdO2ooZ1YzJmNWRGV3aDNxU0pvfUoueH1POk13LmdddzIhRSJ+c1NSUXBMIiNKe2NkVU5KaWFLRWZHTUxCenJ1MjFOcDd7eCYkeGVUKkJ5SkBaJTUkNShMZi9jLzopJjpoVSlaUmFGLF9mZXpyUl95R2kxSlk1TlJtNy4xP0s5NUxVRyQ/ZWJzfHpJ''@;'; put 'put ''aztsL3FbTFJLdEhHS2wmOl59Kyo+ZX1TIklWYnFlfERHMjlOX3c1PWg0fG01YFQ1d3YuUmgoSzhENFUvPEBDYSlZKyt7TGt6OyZEeF5LUFU6STZALFM3LzBlezRwQk8/ZnxVUWUvM150OC5+cm5eWmlFYFNgfXhWVGZ5WWksNGp7RUslOmdjWWVXNWZbXiJDNV9yKys1XT5vKm5qU0U9T04qYGs9''@;'; put 'put ''eW1pM08qUmpSY3RaKmdtck1yIUN+WEFmWzptOmY8aUZ1bmE6dEA0byhrRWI2SyI9dF5xYEBNXXt2bEwlJD5XRUlkYnE0JiZMUjFFanB9QCM1I3diNTImTSk5fFBgR3QoZE93PVc/dCM/YDJZNUM8Ylo3N2g9eDAva31qWnxxNmsxMnIxRE19IX1db0MyaVJhKHp3WTYrayRtLCFDZG9TP1soWG4q''@;'; put 'put ''dkJCPVlRSF0mXTlTJShJOm4ucSpvJGM7SEp6aXo8UFhlSURnRl4iOD5mdGQ+cSM1WmR3Tll9ZyZYMzBfQnBhWUZEVlhxV11FPUU9LiRqK2lGaEMqYWVDNFk9N3QweFRBR2htU25VPShtNDI+bX07UDZGcj5NKlh9aE10YVF7QDRLeSV6UVppSixfKjlFOm5hdHYkM0pMcCsrcX4iem16QTpNfmg8''@;'; put 'put ''UXBZKDZlUkhkO35GLjBJaUpCPkw2KSs/ckJTXmszbntKfkdNaSZjVnlhREcjYkx5ZHpGaSVITnJNcXZJITtFOmYhaCM9fUlhQlh4fmY9RC5SfE5rLGFANURhT1JnZ1EwIzRKWmNxWCssO1l4PCNQVXEjaWFmMG1ITiJLSDskP2E5dkh4RnVzUD94eX00UVkoNVgyYzZaTlFke2NkaVdCYiIxRSIz''@;'; put 'put ''K2A1ZTZaUWhgfSJiPEUsXS80JFhfdUpdenNDdVM4TlpdW35WNT9aazEmNSZVdHg2UjhsPERbdmgzOm4/IkEzWzw0VkZpTio5OTcmJSwlbj9XSzNXJmdBI25Sfn08aCpHNW9NLiwvV1dubk1USEBOL04mbXR0VXAzODZMXVopZC8uNXBnOEhmU0prXXVCd0hiOjI9QyEuYX5CTEZZI1IxPEN7YzND''@;'; put 'put ''SXx2P2giZCJMSjg8R31IWXIyaXd1NV8lWD1hPHRVI1BZQG9SdkcrW2gyPjp0WU1EcjVCYys6Pjsid0prOHc1aS8jUXk5VjhRXkJkLndVP35feXt7bTtVbU1+ITteM31dNF5eQWN2Qlg2InYkJl9iLlJDeEs9cE1VKz01fDJLVlBDaTpCXU9iQltCY3E0KXkwKW9TWEglaz5UYCEjQCskTl5RLk0z''@;'; put 'put ''LEYqT3A2TnNRaSF9KzM3QjRecyVYQGs2Snw+YXBeJEgoIipQNVFtR0t6SkRqNGEoNmt5OGFGIzFOVzh5WmpVfF13enFnLHc3aTN6Q1shZExiXXc8Tk4hbixOYDtFa1QiRCpKVTc/W3VsbW1HPGQ9KVpkN1BuQ0wzMD9iYnwvPkllYmI/SjlfZlQ/MF1zK30oZ0RPSU97JEtLWX0pay5HM15dZn0m''@;'; put 'put ''RjNhUDJvMGlgfnxIZywlLEVmWSQuUy4rMmoiPGE1cSRxTSxjPDsoRXw9VWlFTWNQRXMrMTlwMTgxZDNBYUJZOmJ1YHhQJik/V31meEpRejM3U1plejNvQz8kX09zc1RSOHFAWmBROD1QR0JdX3JKMigvKFB5RnJLcF47dHRYTEojTDdJJlIvLHEoUUhNeV9qWXR4Q0coQ15YT19xa1c/Q0spQ2Z0''@;'; put 'put ''PT5wSkE9e1M3UC9CVHpXZTByeGsiITtXYnEoYXw3PV8hXWxefHR0cWtYSm95RzFXLGIhWjU7cnFONkB+MHxAQm07bkx7LiE+fXBoWSksSX09MTFTSXAhOEk2WWE3V01lbz8rSj1PNFBQcTlRZkZod0NyWXp9cmd7PnpEQSFWcUFrQz0qRFBdclROemR3KGlpUCVBWjF7WXpkcFtvZy9EVnNxdi5U''@;'; put 'put ''fVV4STJ9MXtab1BwJlRGa2R+fjZSPFR5MitpRUQjVG07WHtfVVgzWjAxYFZqM1ZdLzxlMS88bVlPITskQ2JhaX5idT0qUVRrdH5US0BTdiQrKDYxKCRiRSJbVkhiODNZOTl7eG4sJiR4VTs2UFlDJHhDcW1PaiwqMllSYGk3ajZdOE9ESCo8RztNNCssflp8ciZqL1c9QVtIJkFBZSY4KElDdl5s''@;'; put 'put ''JEMjNzRTe289UDMuTXpGUTRBSV85eWdETnpIRitwZStUfUR4Si4mOVltfX1XdFc7d2dyLHxed1E3Z018YXdAdztZPHJaJXxndyV3eG8/UjdxLlpreit8YzRmYVM8YnM5VUJFdD8zWm1kNGM/dENvaWRZTEl1JUJKWiJMVms7YztHNlZQbioxSF1ROlZST0AvMCxxcW10K3xOVCR1SVoscERqaCtt''@;'; put 'put ''L3AiR3dyMD52RDhZd0xUPmNJVD91IlVoLyV+JjxmcVV5OlUiJDtWV3N5a3gubUw8JDxJVG5jVHZGWCkvVCNoJTVCdn03P21EOUE6V2UqZiZvQk10MTgrLzBuaWRuUHxZaWkkdF9taDkhN1dQaUxnWk4ibDkvSCl0fGc9TypdJWE3UkU5YDxuWE9PRV4hOjlre2hkdCxbRW9sI0Q+PDkkNUtXKlU+''@;'; put 'put ''c193UXl2Iks4Wj0qSnwqSiZ7TixJMCZiJHM3LF9ocGx2MStzQGB4dj5wZUY/TiJjeykuNEg/PV8xUSgpckd4N25bWl90a29efX1APUloenlEK0N4SzYlOX5YcFJ0SDl1LlpXKEhSUzdnfCR4eDNCVXdFdXt5a194SVVFaCUjZjA+ckNpOig3ZTNyMnM3YGl6eF5RbCo+clYxIiIzb1I+M18hTTJB''@;'; put 'put ''I2VdIU1XZj9XZjlQTF5gW0JySSxNKiRsKl03bktnen1tRzh2IzwoYyNmMDYkL3VUaTxie2RMaDFiRUB+TSFfLDdhOyFjbCVgV3gmZUwjXnBSd2x0VnY/RkUuUEdZdFBoJmRaSEEycFQ3SnB5RnlBKG8sRWpHZylJQU1MVEV1TH5tM1Y4ZlRWa29lWyV1IypMO2orcTBueSM8SElSbV9kMzY0PiRa''@;'; put 'put ''R25EQCJnSD9rbyJlLn1qcixbSWMjel44R3VjTE1WRzNRJEMrMVkreCkxSGJiQE1LMCFWQmJONSUsYC5aPk1LK2tnb0ImWHEsMz96Rilrcm8vUi8ucWZ5eyE3ejZKITo8YWx4T2wlLmZ4PjVfYzBoSi9uMnVPKC5JeDg8ZCZ4bXolWEMhSkovWDhLZ2IqbGhZRWk1aiJsRjZ9KmVMeWpZVj16KHFF''@;'; put 'put ''TDZEISpQJVBzZXBwKTlEa1cjUHVdX1RZZilpcWVEelRKXXFiRnk7fDt6fDhxKXF9Lzx4RncpTDhjLENBIUdkOGtYKnRCT0N5QyF3U0pRYUlVZVcrT25pI1BUbDNpJkN7YUI3X3B7fEdIUl5peTt8UjBPZ3R4aEdAanl3fH4hdUJYS2pBOm1neXtPNFpgbiNxUyJEOUgleDkqMm5zR1V9RFFVOG8y''@;'; put 'put ''JksoSiloJTMkY185LlJBcGlJdipAV1A3JlpMa1JMY286Qyp1QkJXJnY/aXp2Pz8mWnpQJD1yOTxuQlR9QylDalZPJj9XPyZGSiU2SVYkOGxsLDM6ekRXaVkoX1ouITRhKSZfN3V3N20lXzd6dzNJW0wmO0l3VjhFdCZBRzZ5SGExQUZ+MzckSERnVDUuSUs8cjxeaHF2VyRBTS4sL0ZwfTJWOmZV''@;'; put 'put ''ISI/YXUwNF0vbzV5flUyOjJXI09OOHhXRlhRezI/Mjl9RzhRY3oqMyl2PFZoOHUjTFEsIWs5aj84eWBGQ1d1ayRReWhJIXlULy55X0NlRGBhKTYiKFM/JU9RTldsOzpWYEBOLkgvRUtsbCFxdGIxM19eOSF7cXEsTkVVVDtmc2M6Xl5MMU1sdk9UTGJAPU5tU3ZUW3B2PC5VYjZCbkl7W01xKTF0''@;'; put 'put ''JXZkYyp7OF52a0lfQDQjJV11ckZHeCFaZFVwXyRMeipPUCprYVg5PltyJD02LnpMVW9rTiFvWSZTN2xSKDk8aXYobV4rM0BXRXBbM3VPN3hlYCM7azozTUYkJXBBJDdDLCoyTzxxSTZadFFge0I7dmx3W2skQHY1U0hxbml3X3lmWnFgTXY7QVN1QzlGbW96KHFWVmhhYnF6JkJhd0khdUBoWERv''@;'; put 'put ''Z25VeU1NaH07Q3RhWWtLSThmST89V0BuT3NdPnRyJChkJXdVREdvKGM/TztlPiRBeD5gI2N+MEkzN15WdmooZWhfQFNSY0lgTkI5Pl9tJHhhUXtAZDJCUSZrKnRNLGI6SSozOl8rWG9eMnVENHZqQkhgKHlEMlliM3hqPDg1fj13X35yOGVWVU8kSSU3eTVBNzM4Sms4eE8mUEh6UFRgU1dEOEgy''@;'; put 'put ''OEBYTmNWPVsxbiU9NzNgYH40an1EKzV+Pl99W2M+PT5GLHVkamRIM1VScDQhRzlnUm1yfVY6PGJ5RVBKTHZIMkF9QmQ/XnhpP054Iz5VekVAOzl6MSQuKCpraC4yP3glcCF3YGB0SUowXXxkdj5fJmZSRkY1a2NVd2lOeWZ0VXdOST9YYCk+NVtHeyg3cmdGOypNeFFWZnh6IkooTnxtQnpiLGxU''@;'; put 'put ''IVhZWFZmdHxuaVJyNT9eLmx5eWBEKzlHPWtQV3Msej1Xfl0zPEgpZj0yRkJQblRqa0pqT1NOOzBtail3PiZyVTpMP1FvMnRDQj9yZGR4Lj0qcHkwbn4qK147e0x6WEhyZ2pAMyIpXUUsJGV0P00yWkAxcHRSK2w0TypkQ2g9dzpJJks5Z0l8VDt3eWsyaWUjJn18Z2VkX34oYiU3bn5oO0dUbmtx''@;'; put 'put ''UjtVaz1SYTApY0s0NTBVXVBYIilSWVg7W2RXT0FATy9zUkx5Zz95ai9idElEKUc5LlNGY2pzeF4iLktTVmBYJSVCbyZETXJDXzs7USZHQSU1fT9vOEorVXtiWW5yLG9NKTZISlt2S31vJj5iIXIlLCZqY1lCNS5kVkxfaj9edWEhalVDZzxzV1k8YnFxaXV6QmJnP15hIVsxZGN5bE9ZUT9lMHty''@;'; put 'put ''LndqLFM6aiFmL2J6YCkxMmlgLyVuUCFAfTRYU0RobEJjWkZnTCRMQHhRekwiT2JhOnNddWJHeXdINlgrcEtrdylMdWE8aTM+QlZ6en57TWRBNT0lTiIwUiUxWjZmJC42JCMhZU0mInFLSEpxQi9iKihVPz1MTj58fTsqN35XZXQqKn1PTGJsUCVjTFI8P0A3e1VjWCIkRn1AYH05d1cpQW12cEtf''@;'; put 'put ''N2IqOz0reCMubD11bUxwbGM/S0Y3UW1FREsyVyJaaTsrU08yW35eXS8mS2skNDg8VmJ5I3VIOGw+dTIoX2xYIWV0LGU/TCoxMUdpNkNOcmAma1I8aFNBTj1eeiF+PittQjx9Mkh0UlVBdyYzbUNCVCFjNE1xM1NJbWNraG9QUkJoOFJtNHsjLn5Sfkg5YVIyWDBxIThTIlkwaktuL1J6VDQ9SD9J''@;'; put 'put ''LipxTEM5NXFXNiJ5fGsxNkF2XVJJXT8kOjxxTWQ5WT4rTnpwYno1MX1YfXsqcmhzT05PKnxRLyk2MlVndW5gK2NZdnNGc0orYml2Rkx3WkphKzJeKERBRilEUGVbWypeXWQlRG1pUl1fRGtUan4laEErNTxESFtQd1s0QTV+YnReaUBqdXxAIXE6YXtIRCYyWDJEZjYsKyNAZXFIZTUhcXBYZDI+''@;'; put 'put ''TCR0OlUydHxXOjNITkBwQFdOUDFNXnxSKiptTGRnMmBdc1BlMlR0eEZlYWlrJFhpZjVxT10yO2NZK3R0QTxPR0FCbEMiZyVAcmZGZTZlIXg3KnR+R0R7PkdNJWc5cmxYcCtYZUZsdE5jb1lKM05PVVFWKVNkTWVFYFgyR3BZYHk3Ykc9TVpCYz4oWT9qbE1CNjw0aTRdXS81PUZPfHR0QjpOWkYv''@;'; put 'put ''IU83bjp6SE0mWU01N0xKZjVra35xSjApSEkwTX4jQFJkPlhUZnRYJSFRPmR2KztKTXtZRGEyR3pITW1pdDMzLn16TUlqNSl2RTJvNzB0SyQ4RjhmcE9xMHBAUmVRTHQ2bDB0T28kN1RlInxaN0Y5JlhTfC91dzUsQmhbPGNUPE1wTWJpVShbKUs0Tzh5P2ksNDhPeGtDeV03NykhcnFWdFE8Ki52''@;'; put 'put ''QSIzdylILCx7Z2ghM2lANkJfblopM0Y2UygyITxMOUJiTDpiNFZwd0AqPXI4S1ViKm9MVShrVUt1Zng7XSZOZHd5TmJvbUMud01wWltgPlpTZE5YKmtjVWc0eyhVLCtofUYwOD51OSUmJXl7SHQhZil9UFslYCZ2R3htcSF0ISFuVldAYDV2cz1YJDY5OE1rOjsmNzckcHByIXptflF4LHUyVn1H''@;'; put 'put ''fmxIZzxWJFNGX24xJmQjZTw0elVIXXlQUjIqQmB+USNfLF8rKWJNOzQ1bDhYbXBiNFdDTUpWZ2ZhJGw9USYiQ3lQNF04YzZ5IT54fDQ3W29uJlV+VzhjKngwTjU+fkd8M1h2Wyg2NE5EY35sY25FTCgvekUsQG1bdUtDWmxBXkJdJHhITEc6TCI4SXRxQCVuYkosJSk8SmlGQUNFcV0qelh0Lz8q''@;'; put 'put ''P1V2Sk01a3FuQUVQZlQxQkkqaGt4WTRRTEREWkRyVT8iUlkxdTt7JHZMIj44ZSl6QGhmRT14dlRoYixySE9yQEFeLyk6WGQuW1d9O019Tn1PLCtiWVtVTyUjbyxFJTh5aF0iI2RXQWMpPi5jJF59SUZpMUFvLC4wK0lsUF4rUV1tc198JHEjPFQqIVQ1WkM/RCldYThmTnQ3KStmLzBIfk0sYGo4''@;'; put 'put ''KVltejI/VHhnZzFMJiJrZVBYLzpDV153UD1+VUJaeUxNP2UmRnUzTUp3bE08ZjU0Z0s4UXo7KG11bl1WTV40PkojWG5JaVJBMVE8ciRaajZ3My87c2YoKDRlZEtBVytqaCVWfix5W1txRWs4LyJAXy81alJVOEVAQk9oSzlHK000JXVjRCFRVFJvW2dnSz81Qn0uVlNbVDoxdyUkbGhuKFhMNEEs''@;'; put 'put ''LGdZPD4xd21gWGJrV0whe0BXZ2czWlp6QH4oK1cpNWpLcHxwfFRqZ2dgfj0ifDs8Ln5JJXNFKGAiTG9KMmZhaVokO2VKd0JnTjhacyp+VVVkVWhYe0ZpZ0QrKj9gTT9NeEl7cmxBaml8XW4lPCRuVV52UH5yNylmbSohZl98OE4xPV9jJVZbW0BpNVBxJUZ8UTNiWGBWOUtEZ1pEeHpOWDd9aSk9''@;'; put 'put ''YCx8VnJSSDRZRilKeD9NISQ+OG44MjFZL3ljOX0+WzcvbGBzbVAjXWwqOCR3I1ZpKTZtfGhoJCN9fSRIUkMpUHxlR2xDVl8zZ1d2JjxoUEA8YnBKVGZELj4jbH5RRzJLYjt8dFFuOHpLRys7OXUmdisxJW9KS2BPJEpsfF9VXiE0M3ReeUBCMXF6fVI7Wzd9Mns+el9qTE5oTyo7PThiVjRfTF14''@;'; put 'put ''IVBVYyJ9L2FdSlZFVypdfWt8SmExdXh+dEtQU1hMUz43KzJkakJPPmN8fF5qK2ZqKzd4WUNUIk1hd2ZpWl01R31HelYreXRvNSUsbl07T14veEZ9S1M7aVp1WXU1TTxfI1VuRjVjaG1qPjhKejtycWhzeGdMSjVpR3NgTGFtajRmQjhkWk5KVWhOImtpP1FIXUM8YVRUXUt9YD0ucnglPnQmbi44''@;'; put 'put ''R0hGS2VkTV8vSjp+bitKJThzeF4vdSYiNjFDRDA5VkAyI3ohVEhsK21NcnIqaDosMzYuWCp2LDgrTjhiZ2hqeFcoYStzKUF+KDhNM2BnJS91Xj5UIyZ6clh+KU1hS0xhQnZ0Y3I9d01fSjA4Xlg5SXopWiFtfmNuMUtUOHBOTjNifnUwWTdmKD46Pm5iU0U1I0I7bnNtaWpvXy9INndrJnBRP2ZS''@;'; put 'put ''JGNpdi9mO0tWbEx8djp2ZlM5SF17JHhWOmlbZT4wSj1LQ2NAUlIib1g+Q1BTOl1+UTdSU0E+RytDaGd2biF7Oj9rWH4sJUgsZ1MzbiwxN2JmPD43YjUzR18ldFdUV0dtNDphSCkueUMycUZsUTtYWz8yW21RYFVnYkc0OEdaNWUsU3NEZ1NRY2JDdiNifWZNcElvJj9SRnwjU0peQVUsT3Eha3B8''@;'; put 'put ''QjVUMWQwWWg/RFZdT1V2U2JKWixSXzhhUVVNKj97b0guSXgoc2lxIy81K357ZXR1dC5RTHxDezt5UHh2aUgwMW4rcW02Njl9LH1hZj88cFIzU2ZHOiRdL2ZLZEM3YTtoZl07VkNhJDJ5YS53NC8vOGxOVEsxcUcmN1Y8YyMrUWxnR1dAblRaa21eYlMhc3pkWyJmKH55T189WTYxJmkmPFZbOXVH''@;'; put 'put ''RmtdP1laOkxUZFtWb1JLWnZXS3BVfjIuIXVAPXVQZHw7Y1twM2lyRiRga3dUNVkwV1JreUtnTktnTDd1fUY7W3xAXVBTRyR+Ry5SXktSP0hYbWxONj5wOnY8Jkp4N1BdVyM8Wl5lTHQ6K0UoT3M5e0cmMn1aYFU0MXBZWSRsZDFoJEt0JXhZMyUvWjYpT20kUFtWTUMvRWpdUWppLGwjLGs1JjJH''@;'; put 'put ''NixkZUxnTXpSZCE8LkRudyZaPTNdQzZ2L2F1ejdFMVtfcTVHeyZGLlVJPSlIeWQ9K11hd21zOCU2O0JJSlMjKjlkcjssIyUvR0J4QzlrKEBiIWcvQ1Z9ZXA0SUJyRTI6WjQ5UypvcjJWMW9Ed31Ad3heLG4qP252Jih8MWJjQnEyPltDOUlpTmQrR1lbbWoiMGhiXkVRW1IlTUVBI25vRiR1dU9d''@;'; put 'put ''PEdHUFRNKnJFLG9kNlA0YzN7RnZoWj8uQFQ8T3IhNzphdl0jXiExVT4lbmtRVHw6QGt1fi4wP2hEeH5fan5VI3h5SEBUWnMlI3VTWDtrNnpUVkk+cn1jZ1c6Vnh8WjMqVEdwMlVXSDUzP340SyowUGdqQlZiMEIud04wKGxbd2tLZztuUl9YPz01MCQiaz5xNU1RI0NXO0I3bWI3YDI7OnlBKiVX''@;'; put 'put ''Z2ZeejdiWjd6fDVLbWpAV3x5NSNkVE91SUlwNUdsZU5DRDEwJnAvan0/RUJhKlZJLDZEXSs+UDhfUEkoY2c5T31PR2ttKCN9KFVeKDNJSFokc3AlVCZKWkA+YFhfJmtiXyIkTStneGZUJnskLisvW1tROEpsb0VAVUgjc3NpP3dFJSt5c01La0JRfmlXSj5pWHgpaDFJK2ohMGFIOkkqcVlvK1Ay''@;'; put 'put ''LkVkOjZobzA3az8jKWxObFpXLDUzfmklLnZzW2UyckYlXWZsRVtZOChePj1UN2lOQHE0NWdFSj1NWzB3LkN5W3F4QWklPG1gXnpGfFc0VVhDKCRtVCNeSmJQWjAyJWpFMHZyX25tZz1VeyopPENIVDRoU15SUF5Gdmt5KnopWDRWMnZnbTBwSUM5QyNnWihSI3t2WDxEUWpPcEVJZGYzbDAsYnF1''@;'; put 'put ''Tig6RzhtI2JTfGFINCx2bUovZ2BzPGxMQGR6KlBsdypedUAlOGxxcl0kLi9kaUB8dSFePUpAJnZRZyJCO0leaXB9eT97N05sRTt0XlI1d0VqcWhsNkk+NE4kREF0I0I+NmB8KUFtKmwvQDF3K2hgaCQrUn01XmBsSTIwOlphTWVzOW8lbWJuIlt5ei5GWTFFL1hraSQ8fTIreU17MCtBM0d6eXM6''@;'; put 'put ''eXNQaTpuRFVWclBkNGM9fWFxYkguVzVMfWBgaUBSIzo7Z3Y8Mnh0ZE9mLltgLFpqIlJFRWdabTI1TXBjOzQzKH4wNnpgTHldTjhnNyhJPnQhLHZzU3smWyZnO19NNEFhRlVULHFCfEtQKkt7blRRbkx1RkxLIzx8MkVVeTc7cUlDfTNRVythTCprNWNpQnB2O2k8e0RpOEs9SG80c0lGMGQlfDNI''@;'; put 'put ''d2hsdzdMJmpWWyh8bj1kMkB3L3ZbTjB4cl1HQWE8cWVNbyhzTTdCeHk7Km9HcS4/MDpSOUlVTS5MZDdnOXlmVFBbKVclJWZiazFOWzJiQ1YwTSYwemBCUiYuPC80PTl3dl5QfFozPztKYmNYRnEiLjNFPXgodD5SYSlAbzZodzA+bW8+a1ZlblpeYE8lKn49MDdCTVJtRDpRO3Z3fV04a1VNJTRl''@;'; put 'put ''eiFQeH0sKVBfXS8iVXRDKnBIOFBpVCJfNSx9Ii40I2s6eUk5a0R6P3BmdlRTR2ZlQGcyaFd0PmA5a10iSSEia0xdOjVXRXc4OXpBJHFoc1JGMlkoOEQzeE9LaEJZaExnVUFGV2k1cHE3Zkk0fXpeKFR0eFhLcGp6NEFGdjNYKnJiaF18eXROblkyX345NXNXQlFFV2YsbiNBWjVMPGNZJE5CNjxf''@;'; put 'put ''eEgyNyg9Z2VgMVB0ZzpYNXlETGtuU35AYm1we05ubDV3XXtxbUgvIz1SKGo1UG55JEtjTUsiIUxaV10mKmAjR1EzT1ZiRlYyOn5uKTJwJlVFLChPd2l2b05ZakgoZl18XjBrXk8mdE1tT2kyez1LbCU+Ol0xYXJFJUBTXmpWQ1M6KiQvRk1AOCpXRGZ2azltIXVoZ1JubVY2WD87cns6YURvWlJH''@;'; put 'put ''SGMrbDFFV3gxbkRdNUgqbUJDVSN0UmY0dntMR1ZaIzJ0aF9tM1VkV1UyaUcqK1hzPyhuMWYjIXEjSTlacFV1UGxaVUM6SipLL3w1YSVWdTZBfEw5IUwmdXlWRDE3PTtmXnpwVj9aeCV3MntkM0g9c1smPSg2VTh0S0xbY1dWZ0FlW1hTKngqfjpLXXNlbjI8YltpJjg9ZyRSc259KTJOaiNGXVZj''@;'; put 'put ''eXNmbFRuayNnQ0BTT2ZFWCZBWjZHeio5PzxidTVdPEh6W14kI0ckVGYxZ25nO0dSOUR5fSloK3R+TCwmJCxlfj0/TjBTVkZSTW5FNkl6L2M3bkdgJDB4YzlhYD05cDRCViIjaihSTmlGNWNXSExHPmdxTEFQMjhZcDJsZEpFN0FnKldFc1gjLH5UWVM4aDVWcSJ6OTIqTCExM3NNeUgqfF1VdXlF''@;'; put 'put ''Ny5bNXNBW0E+ZD9pUHdoUjw5RSspK0tyfnZEc1pyRCNRYixdIzlnJn01bHxiTG0yLGxgNld3TE0rditZKF45cD55fldSdjZBa3RDYkRObDlqWz98aWlqNEBaPj8xVz8yd0haXik8OUlrViMhblAzYVg0M0V2SkZIVXMoYj9rZ1t1SlIwSGg2QytSTmFPZUpKKVYraGJUN3RmaSEufUtNK2slP3d1''@;'; put 'put ''RDx3YV0sU1FxcF4qemxlJDJfVjIlQjVsVl1TcyFYcX00N1dQdXNxO2w5S0sxRWJnWF05UXYlVUJBSkRPcUEjNDBMfSFvPEg4WmVbYiJDJHo1fnp8O30xTEBvbVpWR0B6P05+PXU6OU4sVzMqeD9deEZWXTt+XncpU3BULFQ3K3cvMyFWJkxjez5mTENvcjc5OXk+UkZsP2t7RyhzMTlLcCoqPUtq''@;'; put 'put ''djJqNFk5bi49aD04a15lOD42OCVxYGp3VmtlSUJ4YUt9TSRdXWF1WlFEe04lNXpublJYSSF1Vk0mcElROFFwTihfKDNmSSZuNkxLbU1jejJjUEwqfG1Haip6fihKT143WjZSIV1QQiUsKklXaFk2NyUvYjd5OTZLR2JEQ255ImtTLjVqVHJTYnVkM2w2SSZdTF1mKSpQaz5HV1pqTV9OMkRWWkNv''@;'; put 'put ''b00xajxQRUd5JFNeKDZOXUMwM19OQl9iMiouKFA+IzgielNRLD5fKTVsQmJ0bmB8WzJ3JE5VRHpXXXd8PGRjMj1lUCx+OitNcEM3WmIpWmEweTJPcDkmYHldPFpFaWhUTzBTPDd7bHdGdXxMeD9PSl9wejx5OUJXOStxQSlRKGgmdGlUWlcpRFdgISFpTUlie2IxYHFIRD5xWjY5OC54ZWA9ayZi''@;'; put 'put ''NTkvMDovP2lwRy9eOnRiMXtEU1Niay88Q2xIQFgyITtJajpTczZTaGE5ZipHXndAKDkoO1FNLz9IOUsmKiw0TExSY20hLEo1W3J7OnYwO2pxTVE6bVpXJFVodyZMIyFPQm42PXIoSkRieDt4Uk09KzZsMkU/Kig/Qi51RmFWdVAlTnlEIjdQfWh1L3RaTVZdY29VKSVzNEwsVWtrQ0NbTW5PdHdv''@;'; put 'put ''dSg1eURDTCJ7KzVAOW9pe0MwSktwW2hpfl5EQVVRQCpmKGReZCUuJTRDS3thOXcrbkowSjdXWTQvQEhYcCpYKSg6TnBDQ1swWSpgYUp9Mmh4fWVjSnwrJiN9YEEmNXQ5VHVSZ3pAWVVmKzNfKyNfUSsqQCVxO2tHIV4+WnQjfHxgPUhFXjNJalgxNj1qWmtDNnVFfShyYC4veU9eLD4lOypXR3Rx''@;'; put 'put ''cldzMG9nent2KEcuTFhNaGAqV0VeUW0/elFxV2MscC4kOGpZMSMhfkVSYihyN31YfV82QnIzKihERXRYdlpbZWxWPyhZbS95aEpPJiJpYFo1ei95OiU0flBQbTUjUH5ORGF1OjFbUXFdeyM+K1FpZnIvR2ksVSZEOCk6O3xpXVJOIi5lan57ZXgiOTl7Jl48NjU5WGsveEg/W2MvZ09MLFUvWC4h''@;'; put 'put ''cGwqfXwvbFpjWXVEWn5vcTMrWz5ZQClTaUk0cDd6K3l8KXtPUEdFJUVOUV9YMjtiUV17R0hbLkNwLjIlKlVJeXI6MWt5fkh7ND1dSWpCdFZzUUw6IXRqZCgxXntZT115JlZLbThlXnVWPS9zMXpaWHMjNkJrNTsrQz93UCFRIUZrVV0zb2s+ejQsbWhsT01YMitGIkNYSykhL3pJTWFRbWNJTnQz''@;'; put 'put ''UDteUXZQXzM9WGU8KSt3Y1hvJCRYL3ZVMGM7c2h3WjEoemVsYnl+e1RaOG9AK1k7I009MVd7cCk+Wy5AWCtyL0A7IkYoYkArNV46cWc5aTx+bFJPLF9Gd2BzbmVBTkZgSDlGbHB1PVNCLkw0JkdMRTpOQjAkcTZgK2gmNEBWcD1bPWRbKC51VDh4SS56PT1sclhKKmRuNWU9aVI6e0NXNTBWPUI4''@;'; put 'put ''Xyp9PTFmP0J2UlJZZ1J6JntxWTNyNWd3I1BZODU4QCpmIW0vd1RpcWcwRnJePTFGSk90OTxLRD88JVsrUDZGUFJbITw/e0JoJHBDZGA+dyJJMk91PT1qXiJdISIrKi9UN3AsP3A4TkZLcHZweHZdeWc8bHdAaFJTNjJEKTBBUD9CXlhMJEpaTjVKZVI9SztqZT8sOSlKc2JRWHozMko1XXAhe1Jf''@;'; put 'put ''Pm9CdkY4L0BPXz45flRqb2hSLnhoOCQwOWEvS001P2QuOzdZa0w/UEZVRG1SfXpiSndWM35ROXR2PzhyQW5NQyk6d3RJImlacHE6LGUzeio5UFluLFNYTFpKRzhKdyV2MmhJV1NOQW8zOWUvVy59VXg/LkIoXWElXzBoZUlAPWdbZCQ0WDUmXVFNWlEmZGpkTEtVck9wfF5XP0Ela1l5KlZ5Z1Nm''@;'; put 'put ''USgwQmgxeWwhbFsyRWZWVC95LG4meDJDYzFmYnkhPGwvQiFESD0vLi86JFEpZ3AuWW1QaGZadlJLX308XkpSQCNBRXk7RyU1bjBgKUwvSWNXTDYuMmhNKXVqVC5KTTlGNG1UJC9lZ0N1JXZUc2shQVdWfmE2PVFdS35uMW8xYjBaY24vO3l0ey53aTplQ2EmO0srVXw/MkBVa21+M2cvNEAoTSFN''@;'; put 'put ''OXd6WEp8LEB2OjtLK01kclR4a2UuTUt1YSRjeyphb1tbR1VkbFNuNkZOfkYvYVEjTiVqTjFPQUBNLj9eaG9QRWZgaXkhdC4le3Vbcmg6KXVreG88TSlQLi9iRlg6YUU8Nkp7d1tRJkBiJUtYW0dAUkpqMTc0QmNSKSpbJDdELlJHWFhiI1EvVHxwOiwyWzcoSGEoNSp4SzkkRlRIXzVQRzlASC5q''@;'; put 'put ''S0A+Tng6TW0jcDJnQyF3Jm1nQ3AialkyOj5ITyM8b2gzSzZtWWJZLjFJS1poQGJLNGRyd09HMWtOQDpaZj5dfCxONjsqXyJmIV8yOn1OLkVvJS5oUEtDKTdmdSRXOEwrdFRQVCNvM2hdW2YjdU5kJDhWQkAldVA/aCNHN1k0d2lINmoxZSxzX1lLLjF5X0FodXNmOkQuLGh2cH09Yi5lQUY5R19t''@;'; put 'put ''anpxKkNJPm1dMDhedHU+b35lNVNBUjRnOyNoTEN2SUBRaSxpUkZCKTlVWGxPMzpFODZ1ST9ELjZAJH5LPkN4RF1TKUZ9SloxT1FEWmMmZ1RGPHRfcHg/QnNFNi4zals7MlVVSmkuTHo9UT9EV1BTZjZdJF5KJVNARD9rSD4jbmBqd0Y3VlVHWnYhVmM1KHRdaWpxNWJYNVJvTUk3QF8wPEsqQGx4''@;'; put 'put ''OVlZLF9IP1gsODRSMURvenxTM0d4bEsuUkZQdEV9NHh+OS8qVEkuUFZ4XSk6K2FkOWVOXmIlVGBtVGZSaStHKUJNVVMyZVRXfDU1O05wN1pYWkJPJTg8e0RpO1ZfU2JhLzE9JkpMQFtEQSE8VlBpOlt8RUZLT2I3Tl4mSWE4NyNqciwqJCs5aGc/UiNCYHtJZjVZLHUvRjhKTENsSCp6YStgO09p''@;'; put 'put ''a0BeUXpdSEZjfk0xN21NOj9IUi82eCspc0xvNHdNKnk2aUBMfElITWhSWDVBfkExNSwoITVxJWBMZW8hX0VqKm97YG5lLHN7fn50VHEzbGQ2M14hTWVqNEhPJH17ImE/X3tCUnwoOlIkWnNXcGg7UiR5UV5BZmBVU19BKX50WiRsS04sfUQ4fShueilTYj55V0hDM3ZBMVVXOSIyNGUhR1ErOT5D''@;'; put 'put ''ZXdwSlAwMyRXJTs0P1Nvbko8fkxzVlVqNUEmQV55SEVSQjU1KGYuMXpGXWtHZiYsdHM6Lk5nJDRQRiU8RCt2QkVLWlNTK091W1VhcFZBPC9uVSFBSHphOkRSOnxvdEp7ai93QWcsdnFJc0QoTm0vbUljKmZPPXR5TF4mazZwIlFfQSJWckIzdnNiSCEuNCoxIlZqPl0oWD1aZjdHO0pYRUo5QjZ1''@;'; put 'put ''dUxrSm1DIXJ0dVNtM2NneW5ebVJGKixILFhIbmU0XUEvcDhMMFdfLy5dYjc8cENrUXdBSkt1ZElTajUraTc2JWFpSkByMW1QJWhyP1FMIXZ5WVI4OkghbiFpLEAjYD5fTFZ+Tlt2O1VqT3R2QjFdZGcuVDxINHdyR2hCSV05IXFjaSM5ZCRiOGQ4X2AlUUNvPjpRSGppYnZtKlZnfWttWTs0M05R''@;'; put 'put ''MD1MKHhtVkBILFU1VGNwTjhuaCJ2Q1c5TndhK2A+WEFHQWdEQnZwZTgiZFJWQW1naj9SUWtwYUY9dFpudmxEVVlPJl9NbW49VWVZKjZKflA2Ii5UUkQhU0ljVT11enZJVmcpZWRuSn45flpWTitlTW41XiNDd2B7TjdCe3hNe0VSKzA1ZDlrKWtDKUNyWzI4flE2ZkMpeTtXTUNgRDxAMTcmYFJr''@;'; put 'put ''KHlwNV9tdWRsYFs2TypOPHV0PG8wOHhLZG0kPzNqfDdrISElWD8zdEh4YnF5eTojLnA4MTwjVVZ7TFNyJk9nTlJIZ2xpbz8pUWNbKmZtL1ZpTCFne1R2bWBaZkBBM11pUGolZjc4MmNdYU89cS5ZcithLHhLfjQ8QzUpKEwjSTdoZi5EMkdDISQ/Y18pKENWSVcpQTxjTlMsO0A6ZUpOZ3B5VyRt''@;'; put 'put ''Z1tHWV1qJWt1NyJHITMjTkhpU1IiZ0BsaF9QYyNGd1E0eTM9anlRYiNkeHMzVSMuZ00mWnRtPSJ1US5NQXVefj99YyZVaDk4SEI2eWZnWXlPSi8seEtieG1SPkVPTj1AZzJSLDZpOFEyY3Ricz0zYkN8P2N+MXYsTlFCSiFdSy9bRlJLU2BWZlRTMn5ddGkmRHpsX25kPTY8dWFDNzhnLzkjOC5b''@;'; put 'put ''UVQ+MVEmKTpXbHNvOmdSL3plSipscEs7MDRKZmFZOHR4M1FVdCYzK2lvV0VOWnUyfCFRajBXdHcvNE1uLjAwSyMkSWZDMl5yYVpWeCshRlddUlIlXXdAVT9qRSg0JDJWdiZjd3MkRWI8MUw3YTUiZz4rPXQ3VUMvLz4mUmQ1SGFgSUQiLjJMU1VUaH00ZGdkSzdnSmlVNFhSQFB5dT0hV1h5VDUz''@;'; put 'put ''U0ZiLzorWWpQYyx4P1hEVTQkYzU7V2Zjdn54VCwvfFMhTSQhQCFoeXloPT9wU3NOKmMlTlF7XnRETyxPb3BURVIvVjpKencqXWVSRCw7fj80P282RHZSK3VYKCYoZ15+T2hLcixOI28xdmwzSUloaVB0JkhGTFdaW2B4OEhNbV98TlEhOERDbE5GM0ArZ3RSMFUmXStbNT5aUSxRNHNWfUI2cVpl''@;'; put 'put ''OC43ZEM7VkxifTx4VGNKcTdCUnU2cSI5SGxtZn5TXygjdS5GJWU9ISo1Q1BZWF46dH5MJjFpIWdkJUA7Vkl6NFtmb15UOUleO1h5dT5zIl4hXmJbQlR8WVAyWSZKUDB4WD9VTmRoajRRU0E9d3wyIUlIUzVVd2w7TXdUKUkkQGkrYEpdOjxgQ0ZJWD0xQ3lzaFomdD55cEAyZDBdfGM6eGVnVGR7''@;'; put 'put ''Qy8+Pnx+MVdOL3crb15UbkwvfDEhP0B5Yno/ZTEkfG4vczl8S1JKIkJ1WyEjUF9McDRJaDtATDUwJF9lNkhCSWU0UVZ1WFMqZkVuLEVaNlUhWSZbNTRjWG5JUm9NWE0zOFJSK0pOdW9dK3FCeTFdWHI2Zlkoeys3MSJFTmZIPDR7IXJsMCJgQDNUeTRMVUN7Qy58JFRAaFgwb0FxJVAqdVhgXVVy''@;'; put 'put ''QkluLjojRXRyUiQ1UzxYan5WZik4MyNsZ0VJa0xzNyV7eT9udFB0Y3kufjt+S0M3PlIoJDFEclhTY01AOTVEIy8kLmV5YyUvS1htbCNwIm89a2U8Uil3NWpRRSEvTF9LXjkqdClue3glTEtVcVgsNHBCWyN8Z1hnOEVsIyQvIlViflp+Y05pbj12Mzd7aFZPPFl8MDtEX3M4TDl3MCk0ZThKX2lC''@;'; put 'put ''M31COikmYmFiPjVsQmVpfEUkUytEPCk5I2gydFt5Z1FHWHB3Njckeiw4R2ooKiFPXWVjSUV5YWJSWVpKQHdYQDQ+TXhfSl1uSmpVMSxFQHI+RUpUKiNSPWJuUm0jTlRSZ0tRalEoPylrVUl3ZXxEYTYvJm09VE9aYDtSVFhYM2c0a3ExaXF8SVRjPU8qeko9Kz8iRFRvXWB8JHRweCt7enYzSXR6''@;'; put 'put ''Qj4hMiJiQ0FpcWZ9dEMyOGkoIUYlJlV1c29tezklWXllN1NOaFtZMkxkRFh4aFcmRyREYW5LZmdoLERIZHBJNmNMXXhEQlM6MjA4e2xiYlQobUZzJTk4U1YlQDt5d0lRd0d1KytlRFppQEtqKVZoaHB9fG85fiNZLG5MdnM4UFJlNEZOSUQ8UGEkNml7d0B3QXA0TD5GUVRWXX1wKjFMYmpONUYi''@;'; put 'put ''bXc2Kkt5eSRyO0Q1TyNmbkMuPUV8dT0uZndhQ1ghUjp7VnJBbVk+YGU+dnZGM0Q2NkVFQmw2bys0UVpgU0VLI3Jad3Rdbj1dbV99VEJMRXB6ajckPUxqfkZpQU9nKF1Ye01MX0NIX0JJaGZpaXkzdCMqRSYoIXQ0Xj4+Uj5OUm9ieFRPMVdHK1s4eCozVHxie1ZLeVk2ZCVmRDleZ1R2ZFtiQXJg''@;'; put 'put ''O11hTVoqQTIicXc8S0B3MFsreWx9L3R7b1dPdCw5Sn00VGRqPC8pTGVoTmt7VWtZIyl9OyFpX0RQQWo8bUpMX2c4WU5UcGt1ZTpaREQ5OzhXSVAvanlfY2JVbXBgPm0pV04kbWBfZkZALDxTQkNmXjhrfnhZIW1HKDtkaSt2UmNgZmsuS3w6bSVib2VhUiljcEsrPHVMLEFzMjtiY2p3UUY9NTBT''@;'; put 'put ''K2YuJjRpcj56Sj5wUiVvNig1U2R8QHVMNEFJbkNRKEg8MGYlSi4/JUovSU5FYmQ7ekZJZU5kOW8pbzlRfEdmTCVsKyx3e0kyPlYraGFSbDJyMWBNNHEkYnFzYz5faEMwMEV7JDJOdyRVa3ZXXW40SXFaJFVDUG17bEZpOm02KSo/KF5lZ2RKQnZ3dXNkbjdjQ0oiKXBjaG44dUwjdVIuez4xX1VN''@;'; put 'put ''b1NfR3QrfXlNfF98dzNSSFR0KDtBRD55ZT9JYGlQVHRQYWU1d1FwYktYYFh0VmhsYDY8d1dYNVg9TSYlRD0sWnApX3RvNEtwIn0oIWR7aWNZXmx7KEZDITgyRVlhN11EJDlnSS9ATGQ0fTQmZ2dhLDVWZEwwUHhGeCQvN298V2dlMGpVSnNaJHouaTlIay91PVJ0dT5uW2tnZCQoVjBTcVV3bykw''@;'; put 'put ''dSo7fXNpeUp5KFckYz0sSyVQNk0sN21KJXxfW1h3Wltne3M9MFdFM1FZRVQ0JHh5MV9FcHU0NVhefCorYlA9IU1xOyFrMXwjQ2xEOjRPTnQ2c1kuXSZZQndbNjEjdT5Tb0tBO1IldENFVnZTI0Y9LjpUOHVsYyV9c318U3dFT0RfWiosaHVXfj9NOzg3NSxaRCs8WDNAMX1WWXxiTGtOJSxHMTF9''@;'; put 'put ''bH5NXjV3bThbInJIJWByfkptTmtBdSwqKFRNXkkpcWVDbncrQ1tIKGNFJlZyclgqeVhdVjZJUXo+TCQrYEYqM3lMOyw+JiE+eD5HSmU0fEtzOD9ZKTFzVGoqNVc8WWN2dCh6fDUiWFhFNlV1Vmw1RlBvXXMoLkhZfkxtaTxfSmU/KWsoOEZTalFoZzpSbWt7Yn1hPkZvOXA5NGxmJDFsPHZJOUdr''@;'; put 'put ''ImdWPDpuUT11eCxEOCwhcUFWajYjby82LEtVNjIqb0FDVEE1LEZhfEMkZkhyY2VscmcwZllHeiU6RmdvY2ErfSZdazRbIzlHV2RsZV8jWDNgbzdfclB0aVtLOGVgWjxJK188SHFaOzsxPlV8Xz5nRDNJP1JLQU9BZX4vPHttSzVFUXJYeTA4NlBbN3dZPy51azUlMTI7RDRSZSh6PTU4cj96dXhd''@;'; put 'put ''YHV1cihsZmJZTjR8UUUhU0Z8Nl5Oa0c7VWhWT2syLjwvT1t+PVRVdX1sKl0sPSk0Y0d6OHk6TVs0MSIxMnNMfkFsOnw5RWY0Vz14bVVYaGR3W3xpaGNGSnxIcFgzN3wwPFFYbjxEdXFHfk1JMj9LZ0JaNjZYPTAhUlYvMjtKajxBKV9qdjNaUyUsajBpR2cxNXpHKms2TTxhKjAsIyFITl4pUE9+''@;'; put 'put ''OTxWYzY9WCN1SlVVXXxaV3tyInU9VSxhNEN4Rn1aY0t5L2RAOylHbnpDWnBrR019bkwqJjVHJixqWzdKc1BiQEZsWG9saG1bdDthdklbLE4mWmYjQ0hSaXRFSEhEOT1MRVkrR0BRJSNDaTo1OSRMeHQ0IzZxMXhCRTthLl1obyRePyV1RGFgcWl6RCh3eiEwQ1c+SkRdPlhUOlddKm1YbVZSL3FD''@;'; put 'put ''TlBYTDpdWlZGKUgqKEtwOStSQjFaOlt4PDx7aV94TlsyXVtHUyRgVW5jalQ6TXVhckslYTRkJjB7bmFZVF1VdDhHcX0sIl9rcklkaF1mPVN9WiJYIjh2WHwyckNfUSIyNlNEKV0odUMiWVkqVnc5L2AkKjslejZ9dGx9M0VsSSFATUIkenN+JDB8cnJNLFdKeGJtallWbWpCV2phamYmaXd3PklM''@;'; put 'put ''aVBLPzpESyFmQmpIQVE3WiNnIWpnWkYsOHhhMz1kJnZJNjtQT0xVUGF4TVp+ZzY9dVJkcm04SHNLYHBkLmtpY1guZlYycy85IVF5bkJvX09yMWAmZ1R0O3k9P3klVXhlPUQ8Vll6bVRacHxNcll5WDpSaEFzUzMmfXA3WjI1Kjp5Q2NYOE1XJFdEdSNjYkMiKWFVW25mNjMsWClfI15SfVosOCZa''@;'; put 'put ''Z0dwLElkZzsrJCRAIlIoalk6UDp3ZHE4Wm5ScGl2OWMqYjI3QVVJLmdabjpFMEtOOD0/NFZGQCg0cjI7RkJ5cElPcWg/e1cwa0xXOXh7dHxPPU1gLExVMmxpQFRObltOanlAZTQ1K2BGJGh3I00+RDIoT1BFMyI6Vzp5N19eVj1pIjZWKz1KRXl3L0MiJEUzJSlrYCFUTSZDbDx8ZGg6cyRrPz50''@;'; put 'put ''flJxcSNdSj9KcCFGMntIRiNQWDY2T1tiaG03K2VJJGc/JnE/cEk0ZkNwM1gvcUNWaUpJWXtvaSRHQGA0Jn1uOERUbDV+Lm4yeXsleDgue2c+W3UiajNxa35RPEZXe250PWcxKG1bdEU3Skg5PGQ0PlEpSTV4MmVNblB+RncqSiIsXUdbdmlSLzdaUF0qRGN1TzxGPkgrQjRXeSF7TCIyQyY2YSwk''@;'; put 'put ''elBjYnd7dnxARyI3LloldyZxYjVDWSUmLz1OfXYuS28hbXtfOHdiVFFTd0h8dDA4YzY2Zytka29dZmAjMThoWkZdTSQ9ZXdqSnkyKz9ndixfNUVFL29WTVtueVFSfXk6aDFIbDpgPnwxPk1bNyxxUnxiXUVoMHJ0I0NbUW5zKD9QfU41RXxtY08qeEpjWVR2KHBdeX4uZ0EvLjJpZiliK0FnSF5j''@;'; put 'put ''TCRUanMiJHR1UEZxbn17fUlzV1NKPFYzcyQjKENMe2VWXWVzVyZFdX5gUDsjU18jTHRNImw5UXlJZkt8Sl16UEhXNHdgQ10xQEpjWnlUYGZheUl5WEU2TkRnK2ReKk97bkJsQGpxfVphTnJ6QWpmU3VQL11nNld1byhiUXduOUBPNiRrV3NMSXVHckxFMiVFTD5oRXg1PF5kdyZsWDQ3KExeWTVK''@;'; put 'put ''Vlo+IUlWVFlJKEZRJEAmSWVRNEJqY1NQIyZSSjpsazJgfColWklpPT9GSlE+Z2woaEVMMmE1dEF1U29yZnYsbjYpcF8rVGo0RjM2LC5OPGxdUHpXZSg7KzZWVyVYKkUoKUc0RGFNWjdYNnREZH1AP15hRHVAPXcjaTwvLG1jQDcxQ0NIdUtoWSp3OzVpKCsrOVJPbE09RnNJI1tiO2RlRzMoTF1n''@;'; put 'put ''PmRHIitvQEgpTUp8PEJuMDc8W1ZzP09TZllqQ1d0YGl0PmVhMS9KT3NpdTEvPipJPjZGNTQkY10sYjN4IiYuelJoWVcxTj5mQ2Fka1BFaDBmPm5zK007MSUkfElPQzpUSDhjVFE7T3JMNTE6MGooOzwlaU0oQF9kQDBSejp2QEdSfGAsPD9yZ2J6b0JCJUxZZyJPc2BEcnVkPjJmaj5HR0JDVW5W''@;'; put 'put ''ZyJrIWB3P0FRTzIrTHk7MXIvX245Qlg0KkkqQmJmIV8iRVU8XzFsdnUrPCZGaEk1RVtKRjY2Z2J4RlhsXyZNOCo4TCF+OyYvKWxBMXUrPk04NkBGIyN+Rnt4R3c+KCxpSGwvaWUyQio6PWNsTi9JPlpqT29QNjgqJDZ0fjxuIjMsSUdSJFBmVVlqUXdfK0F5MX42IlJAN25eTndDJSNNOVEvfHck''@;'; put 'put ''W21NTy9PYjYwc0dqL1MoYVRfOjN0RnEpVmdHfTV2clRdS0xrPHxLLnk9PmhJfXBNY0IyIzUlYCo7V018clI+d3tgYkxPOlRxRGZwL2FDNlhpUmlMPDs7V2R5Xz5QRjN+R1dSOFcpfS9Gfm1ZKE9QKTBNMz57MDd+eEhdY1pNKlp4VW51UWRlYEc6dlJ8ezYjUU5hXkIqWnIxb3I6O0YoMjgqVHou''@;'; put 'put ''Jmg5cyI6dHFvR1pjN2RqcnRsW3RHbTkrVHI1dUpDJERTOU0+JjEwRHlzQWczeWl+Z1RTSzFdeXBlLmg7JFVndCZpYEw6TU1tc0AlfUU/bWlTWTE4Wio9MDRvamhhU1JpZDw+ellDN2VEWEo2KThda2wwQWlhRDxScmh7T30/ciVtQlgpS1NDPWJDfX4lNGdRdVlfXz40YGg6Q0NpOz91fWkiJkw3''@;'; put 'put ''KjJwY01tWTcmemBdZVdvKUtHU2xtZSs5MihdTHlHVU55NCo1Y0U3TH59SllhJjl4MWtMUERAI1E9azhdL0N+QHlJJCtAVnxebSxxO3RfKnI2LmN7PWkhbWVZLDJgU3YpUChlLHA8VHkqRSUoQ2cuRloxZXtwdUB1Rkk4W21kbmF6TU9mKz89YkopcmRHMXY3T2NVZiZJZiM+QldXLytVfGchJTJk''@;'; put 'put ''RT9EQHZIYWk2JXcyY3hEak4yc2tqUyolKSh5KEVGV09gaD8/bSNPdilbdFJDQ34uX1I3VyZ8VnRUV054ZE5QMjkqNWZjOW5DO1JsKz1KWmdGNEhQTHsoN0Y6LlE2Ri99JEdxUlEpMkdFRXFHQHF2bj4xQnNQKTImJkReY0wqRlRGO1RCcV96REU6O31XXVciNiJ+MCE0S2k0anlAN318elt4KVld''@;'; put 'put ''IXs6TGlXRXJfQTwmU1ViWUA+SmFFe0EpTjdQRHZFOktXTHkzKj5QdnwmYXYsb01aWD9GKzMkMD9GV3pJPFJQUC9acFBDYDwsYl9bZS9SOE91Z0pdV2t9TU92cC4rRG9CWTk2SG46Q3wsJElBfE9gbSlHezhSNy8hQEFHYUl1OFZKTUJATUNoZzk8aFc6JU1ELn44fFlbZUIhZDlOe3BVdCl9TlRk''@;'; put 'put ''NzI9UXNASlpSV3JLJlp0eilFalFiX1FIe3dmITYwNjt3RS8+cCFSKmN6OV5oRT5saHx3aD4+XnkwZHo0YGswemoqQU5vZjo6OT9KeEpYTE0uJEg1cVNIImIkYGxrUSwmciZlOUBycGBMRDw2MihrfHQsYjd+XThTeGdga2ZZMzNyPmw2UGElSFpVQVlfXnUrY0l7fDl5UHgifC9nM19BRDledWoy''@;'; put 'put ''Kms5NWVbOF5tfmk7QU03SFhPYUtsUjF8YVZzLzorOHhtYSMhKkRLRlVHQHo2cjRaOGF9MUZFa25JMWtBUzJiN11tKUQlSk1faV49VUZxOHVWOy9tZHx5cHBeVXdGKG0kNSExYSksTl5ucnVPR2c4K1hDRix4bGZFS0lyZTRLR1lpQz54Qiw0N3Y3YlJyYytTTUZ1XjhlT1RdZnJgKllgTiVBZkt2''@;'; put 'put ''c2YpV29EUShuLjV5OUhaa04wbUlnQ0A9cF5TY3h4QSR9UjxqWiZCd3c7XnJdVnEqbHtSYTkob34+SVUld21oNSxgcXNLTDVsPDs1YHZbVHh2OFhMfUNvdy5zWlA6Tm9QNT1PRi9ZM1ZJdSV6bnddXjEmSFttWlFHd244N3I2OSsyTlQ7emp2bEU6Jjs/ejxZW0M3eVg1eXAyWEV4JDp0UnlpW01M''@;'; put 'put ''dFBEXzU/NTg3X1E1dz0zRFh5e1UxKDAke1hYMmguUFV+Kn4/IyxHRmo9NUshakxyOi4+Ln1QK35WOmg4emo8XnpAMkNpI219RFE6QnQ6LkVNYCYrJWA4ZTJEd2p9PkVFYWxHXiNxUmlXMVlmMGVVOV5YSHl1e1JeKjRNd1U1aiMse18mfFRATWJmMn5uUXsuQG9BN15FTCZKOXM2NnQsWk8wIVFP''@;'; put 'put ''MCY4aDlEdS8+O0BHX0wufnY5NztiSzB1V3Y7S2YjIj16WSEvYzZ7cF8sZl1NfX5XPjNCYkA6P2p7czx5WVB7fjBJcSZaQXxPXWFde1VxQmMpMkhXVGc/VkwpeUlYPkNNJHNKWmkuYGxTOG9jVzQ4Xm0rZVQjQlZIL343TkVVJk1IWnQxdSY0RntpY2BlMnI7YiUoS00zL3BIW0cpWHBleWY7OClm''@;'; put 'put ''W0I5ZUluSGJOI154fGxlKmA7NENUZm1TYDksPUtYbFpnNlF5XT02WUAxWm5GRHYyVVlObSY5cD40Kiw9cVo6KmB6KGgsMiEiTTxTOjspTSRzOzNTI19kKGJIYWRzQj8rLzFWRFg6Q19ZbiwxeUF1VXdqKD0/TUpzQnE9WnpqRDlpcWhGI11WSEJDWnJWJlRfM3N0OU10ITFZMVttI0dYQXh2VEhd''@;'; put 'put ''KVpAciJJI207RFVRTnFDbyswXyEzPWNjbztWLltVOVNWZ1l2bU1obEZkTWR5dilESVZIbmIhODx+cm9jJnU0UW48QyQwNWxAPFo3LiJWUzZDLjcyLFleK3lEdXR1YT10T2F4Pn1URGBHWkIwVE4jUDV8ZT9wKjEkcjRRcmVYfikjSm82UDE6JTYpRSZpUUA+RVQ7S2YkIkl5dD5iaHRYUmAyMF4o''@;'; put 'put ''WHFjWylEd10mNXU4ei8kbT40O1IpYCVebHZYVFAlPl9ePit2Wj0mX2BPKE9BcFlecz8+cCNPK0pkSkY5ITs2WTJbeE08IX5vUy45aXlhRX59PltoU0puRUM1YWVpT0lEb1JIPWt5NkZGSnx8aEBVekA/Y0xXVXpTNSZmVTVQZW5YMVsoVkklNG1wYiZaMCFPWTNbTihFSD59QG9iInBQe3h8NkJT''@;'; put 'put ''VkY9Uj83MmVyMVdfOCE6Lz10NG9VeVlpZXc+MiVXYVtsZmlFTmE/M1EhN1Z9Sjd7LDtJITZabWN3QGJofUdwPjg5Ji8rZTBYTyYkPzdNP0c8bl9lOUVZN1krKyM9Ty5sS35TJmNgRkttVjJwUzklWSFnM3tDcWVCcTYuQDojKG8+TkNPKnNwYjs7LmNhJiJwSylTe3Q/Kn5qS3AjW2t4bnx8PShe''@;'; put 'put ''OChXZ24pX2lwVj9DUVtzNmt4YUU5TEBUeHRfI2xKOj0rQlRZfnIhbGBnKn14cUpZPXRbczJMQn4hUTd7Q3QlWm9MbTkhSDBsSyFLcUxiK29jMlM/SFB5UER6UjdPSVJRQTVOPmp2SHBSaS43bjJoRS5QRHNiTkBdfUxZU01zfEIyMT04fWFGfHhHfHk3bXZ6V21Od21jLChddT5BSTNQfmBxSlR8''@;'; put 'put ''bGNtbl9MUVAlaXd3OXYpayJlakthS002KklbY0hGdTR4RDtoJnAhbV5kY0RmaEZsL0M1N1h8Q3RQdlZMLzM8QnEjT0c3P0xweTZ2cSRVIXghXT57ZjZsNExfJEghSEg1QCFOQVNnRV5sO1hZKGFtJVBhWnI1YFdNfW9tKUczbmp8d355WzxfUTBbbTtbTWtrKSlZZGZwJForVW94PEhvLHltdSN8''@;'; put 'put ''KV9CKEx4VUM1ImR6e0BSeXZKUGNxbiR9VWEpNXEuV2p9UmhvZEZQQTkzXUM/LzQ7NHYrVkhDQHNfYD1mfFdZQEc8bHV0OTpeYz9zc1RxMkBMKlNFP11nYTBHaD53fSVjNk4/ckJGciFWSDdvLnMmMjtGKCM5byQmbmssRmRySGczeS49VWRzMWhwQFhjJTQ0LndDZjpkX01jclZbaTd7LyU7R25N''@;'; put 'put ''flhdIUpUWl45LkR7I3IrRUJ5PWZhRVVZUEB7NHN0bFBFSWdwKDRMbyp9THUpIjNtdWN7NHxQUlN2a1JfVHA7X29TdltySThkZzpjS2lkT0x8cDpReFk1ZFhFMDs3T2koJixbT2s4bXR1IUpIailpSEJecmY8Tz5FV3gsIzRDO2dAeShlUWIvJUpCZT9IWk5BJE5sOlpkOilNa1EwL3hRc2YoYzhQ''@;'; put 'put ''RyVlfixlZEZGSTkxTS9tUUFNX0U4QXdrXzNHcHAyYlZNIXp0TF46XkpBbn19dmlRRWhwRzcqcHlLO21UbF0lVDwpMjd0dSxmWjE/fSxxI3MhXU1Ybl5QQm0oY11aZCF4I2YzIWs4O2Q7NGopcVg3TVFZUGU/O3RvXiVqdyk2dWdTY0RsfTRfW0hGdyIxQmhxeUx5VXdSKXQhNF5xViZJTyUqL0tC''@;'; put 'put ''S31mXl8vU1Y+OExgamZvTVtxe1QqNGVaZ0JGeCZ5fE86UW1dXiFNQHE2PiE9fSNlIXMiKCF2Tyt2QE9lcyksakdMeX1GeEEiIW97Qkh3ZVpDN0d8UlIuJV10bTJXblt5eUhhfVF3ayFKUnA/TF86T1BEKW88Pmp4b3RheiZbQkV5OWdJb3RJcXZOUWVJWXI3WGFlK1FDMDE5UlRrPj4uNzRdcXtZ''@;'; put 'put ''Nil0Km5VJCM8Im8+SWV3dmJoLFshck5FPT0qOWg5cnY1NVk6PmYqJENjMVF3eGI5SzdpcVRwOXJUXU05cDdHZmU1InNrYlpBOHA4K3lzL3JFJCkhV1s3e146SmUpI2lYR2E2XTh1Tig3YTJjIm9qclYvSWQkMU1he15KPWZ6TnpXW0REQlc6IUwrbCZpTSROTjFHTEF5RHhwLnV2Y11EfERnUTx2''@;'; put 'put ''dXtxYjdweEdjSWQvODQyakhqPD95NXFFem89IXBLO2JwfVIxL0BeMCJTV0JhL2VicShsW3dxVj06TWY+RkIwZWNgUiRUVCExemE+bzp9ZH4zaiNQWStAWz9SIWppNkgwT3RlNm9lVnh5T2hvcGw/WEt0VTIiTilXKSw0OFpJayhRZ1pDL2MwcTdaVlBwSi98JkpXTk47YVd8azUofntUT2g3U2ZG''@;'; put 'put ''RlJOOVsxQWx0YzxCaFsyRHwiNCwmakJWYnI9PWg2ZGxAfjRfWk45KDgmKipUNmRDc1ZFYzRsNyheRlVtJiU5OnhASUZbVHJvP3NIZT5UVSRka1ZeQ1ojWWhMbX5kN0AkYyZJIT5NJS9UUUt3bnZJcXRxMzlfbzJOMGBEbl09eVNqNX12VEF6YHc1dmE7QV8vQ299JUtwRGtsSCF5cjU2KkwyN3ku''@;'; put 'put ''SW5iPEheU3pfYyQuUi5wfkhoXXZWdlQ2WGBPbHZGV3M7QyxPP3YpJWM1d2VHdzJpZFMkRn5PNFYia0lFRT9WWWRZMltWWVs7MmxAN0tQdkkqPEJqb2p+XXpZOEkialVacE9GdnElNjIqPWpUMHIoT2tCJF09JEtGNz16QEIwe087c1ZsPH1dPXw8YUY7V2tXSFpJfVtHd1p5TjhFaihiZENuYEw8''@;'; put 'put ''d30+TnJAcSFdPDgrOTxuaW95ZX0/dCFnZC5sOVRdZ1dGIXghY0RhMExrYjQ/KSlIfndsKyxGOkUmTHR3Qjk3cGxbNmYwdSxkKUtZc0d7NV5HPFBvPk0rc2dtei5gZ2dST1BSZkc9TFYjKXhQfFhNXz4iPzZ6RCtYXTN0anxzOnd2TEIrKzwlLiROa1kjP11IJV05a3VVKiJWK2hNWCV+c1RDPEl1''@;'; put 'put ''QWloPDtYMW4xY19gQ0dDRSh5OV0pbXEyKnFJWltVWm5XUmhdVzAzfnBJUzU6SC5KfiNPTSk0fiEkS3xmbER5dj0jQzI5O1BUYlM/TkRlb05hWEM2InZGazRsbEw6fl94VDU6MlN9NF5PKkA5L095Zj5nUERIfEZhYyolfkNbU1ZIMypeKXV+M294KFhETX1hKnZgOVMwNzZPeTBzRH0xRFZwb31M''@;'; put 'put ''KSpBeXtbOlkxSWxFQUBsL1ZKVFZZW2VKK2loWm0oc107NH4sR2J2fHUiXmovbUZXbCNDOUZ0N3B4azdRPmhrTlBZSFFDKzlXUnIuVUU1PHw4bHNBQ002QCReZjYrdnB7Ynl1fixHQltfWWkqL0dFMiF3bz15elg2SGJRX3NjRWNHYG8odX1BMzFecXMibnh9JSZ0QGRpOFc5VGBWUmNXY3FBUnZE''@;'; put 'put ''VXo8flUxTWpzW2NaaUV+dlBsaytwYFUzNWpKRkBGNzFaK3VqNUx2LGo1KSo4UXpHWTUkJiFORUBAfXE9PnNAZVlvIWUuZF9TQG1XW2x7cixxc2x7JSVGLl1gWiZBXV51fF1aT3wra2dRcENgU10qSEsyZi5kSi5IK2RRUUVibDs1K3I7OWMlO0ZHIWNFZzJZVW4lMm9yajM9Lnw7OzFIMndESmgk''@;'; put 'put ''VCZkY2NDR212PlhZdnA7MyZ+R2s7LjpmLnxoVSx9LGorX0U2Yz89L10vNTpIRmB0NEUmUTk/Pl0/OldxQmkkQXlaJko5JVldZ3dtW1tGc2x+Xz0lITxzNC5XU1MzeENxX2hTKjY5dXFXTWhSLCIjSkVvSSl1PVVHYTBUQzhnSDZ1cjYiXWAkVGEpW1FyPUVeXn1ROzUidFowYG5iciZ9PzdFOVBI''@;'; put 'put ''XkNnVylaLzp4KU9RPylrRyg1JkY8ZHY+fkVvLkJyOFc5eyQyTHNZejtZcG4oKXcidTAqZnZdcD1xcjROVXF8cGNoOjk+MzYkQ0lzOH0sd1ZbZEYjdSxNSjpgUmM8WkI8WzEoXSopUCg4TkdRWmY7T1kzRU9vX18oOSg6bWNrV2JhaEo0fENsTG1MQkQqYyQ4fD0vY2dMaCJOY2YkNiwoa2s/MCZj''@;'; put 'put ''O0RnOGErOHU6c3p3ayFnckBkRiZoJX1yTT90OVFxdzdlcXsvYkBiRmxeNy90UWh+QT1iK1VLQDl5Oyt7JipiQXUoJD9ZNzROczY9fU9VVUxne3clKHhYXypoKWE/OW41LFlfbklNYVVKM15YLmEqREJnTllMbjRxX2RVc2poQiZBR3ByP15UQkc7KF1AcEs+NH5pJUxuZ0ptc2dzNnZDY24jd0Z5''@;'; put 'put ''WUQzdiZBbG8uLiY6Pyh+d0UkPXg2VEg0P2xxOTlRWn1dezg/bDdOLm1YXTA7SUlXMHEudTRdMiM2VCUyRjdfM0w5dHZeRHwoeH5sajxRbDt8aVNQV05WPH5GSmI6UCkpb2siWUdSLzxoQzNbWF86bXN3TyQsMkAxbU1hOV1KUjtxe1FqNXFkUS8rLC9fWTMzfFYsJmVJcVU1MHlPVmkoNmlWdkQx''@;'; put 'put ''LyNkYFJHN2d6Z3I4MGJqd2IwKjNUKWNrVChKQnB8ditWbHkkPWg+ZVRNa3AhazpqNUVidDAmMDt0JHxQW0xSJWdQZCxNUlk6PkpOdD1gKmE4dDEzem1IeX1jdnhXbEcuPl51JFRIIW0uLGJrLyNDKyl+b2JUSUE2S0hlMX5MUlUhLEM3VFNNTFBGVnp5NX5jfjJoYStNNnxnO3d3JTZpfm44TntQ''@;'; put 'put ''VXclLj5oeSgkQHQvZEJFUm5IKX1ZVmAuckRLa3lAL1FldTMoWH1UKnF+WGVJP2lmK2FESilybWlIfD5DcGE5ZHdvd2VMdFJ4eytZRltuPlFBKWpuM2NKSl5MUW5BK3VjfmkiaE5FQV0pX3Q4aH5jS0s2NWdSdCtzP184ZWchXjwrYEZVJWoiLHJvMlBBI0dKYHc9W3QpJiNEdjEmRFdWKmw7MS5L''@;'; put 'put ''UT9xVTlbWjBmVyRYPUJrYTQ+Nil2QSlEIS89XVBkYyhiNXhTNUMpQkhAZ2J+e19+PCM8dF5VJV5iLzd6JXhlZzBvIiIqdmMueUIoelRHU3UhJjZUeVJvO354VWFmPSQvZjlofHVCfitOaDM3fnNdOTZVby9rdEdSQ1VWVHlHJDZFMiYjP2d7KDQxIW8ydkZ0MilbcVI9Rz9Gak89bmVGTDY8azs7''@;'; put 'put ''NlksJjVySiFqLFk+NFZxb3RrcigpXTQyTW5VLyQ/MCtjZj05RUB8QF9GOEJZe2FnUHcyKHhvaD8qOkxTNnZsPDRnU203fVgsRyhvdFpRfWNXbk9gTFZtKEIjPWI0Mmoib19WN3siI21oeHhmckpzZTQwdTdsVXpYdWdoIWdhajg6TXtiPy9CVkMpeD8mNUhGWUR0ZjtMIkpRQ3dDJElKYlNBW3M3''@;'; put 'put ''N14vKTd1WEdiakZRTl9qIlZXPHcydUFdW2FbPEJfKX4jMzI5MXt5MWsudD9UMSk+a0NhRiYiRCJTV2pMfFdIKWQ9InlRO1NUIThrLHIxWn5VeHFZa0B5P0opTm9fSWhQdWNqbnReaG1OSW9lOndfSE5leTI3PTFbSEF1ZGh+ZixwZDZAVkVmfUMjYClyOllfa0xRRylHckYqNSlrcywvaiFHaGRp''@;'; put 'put ''bEttQVtTaUQpXn43PD53QSM2KjcqJFUyX1NiTHhDRTE7PWM0QHQrLChQSzlDbCZFJjp7O1glfHBodEcrYH5AbDR9eD42ZTp6ZCQxQCZYKTkkLjpsJWZkcjomSCJ3QlRPXX5JI1hmQGYzZUFKR005YTpHcFU6e29QNX1kPFV8Pk9bek87cF9OVkV8U1IhRktaTmw+Z3d1RX5+T0olKklaTFRnZmUl''@;'; put 'put ''U3I/R1BMTzppZEpIY0YufVk4bVZiXUZrRzFGfXtwKyQkJFEyeCJPUm5PYT5jQXIwL1Vkc1d+IVAhY3FLaCprXn4ifmBZaGJQYiRNLlVnJFc3V0JkS0Q5bDhjMWc/biZ1YVM4e14uO3lwNyJOVXB1MF8sRkNrUXBrL2RVUiZjMUk7cm8lUC9tNT9aZ2NbV1k/TkorQ0U9bTZFdkdfV3VLNiwqJkE+''@;'; put 'put ''bThFYURdaDVXJlEwVDBEZGRYfERuVXtUYXI9U3pualAvISJ1MVJZWzlGQXFgSUlaVik4VUNoTlhuRCtKbyw2eCZAUXFfSjg3JX4rTWp4Yl47VFJ6P2lRPChoWjZPI0MxPXZMaFowVVJ2TyJ2PFI2aFAjbmYkZypKMk83KS5acVc/ZGFLfld+OGxRVylrWk0/bGkwckdMQCEuZzQwaCZ3cSIqUkZt''@;'; put 'put ''MEBdTG1pIkdUSDQwY1sqNUtQT2R1aFY5JUImcC8zSDN7eWJpYkpafFRXI1tpOCpHSmBTIXZOPG53XTg4OEBTRG85Zix1VWtDbT09aXptMWpKM1RueDcvL014cGhFY2RHISF4UHBWXWdKSlR1Jlt8aEI8JlEwRHxmbWo6KXdPIWBrQmFOOXc5Sz4reCF9eUVHKF5ORChZQzx8RG19RkheKE1tMmQ/''@;'; put 'put ''NzBCaksrTEJnT0pHMmshaTdePjRaWWAufHNgNSteP3FKJlY+U1I/TUlidU1EN3dWZ3oyKDpMKER3RVI1JH1va2NASTcjNE9jbmArX3FML1g6V1ZFK3h1NEhId1ReL01NL0JtIl5KUlFFdylCdkdKdkFKOClKPHl3d31yc1IqWXEsSXsoVWpEPDRBWEg3dmo/IX5nQVlSVnFgSmlZSSZmR3hjVD1t''@;'; put 'put ''WygrWlddNFFlUH1SKlcrcSNMXlhXXTJkZ3MydWM4WUE0c0lfMDwsKXlYVyFYMVRIeDFEMjRYPGNMWngkKT1qY24pPUhgdG1MLHF0fixTLzY5LjB0Wm06b0J7MW1YNj59ckF7OV89MSUzPlFsIzJpWVlEfiRFRHVoMXp2UFlPe3cpS0xQOjFEcypoUVFIWGRpODQvTXV9I3tSJSgkdmttXThsLmIx''@;'; put 'put ''YDAvb3dtLHE9fXkyMTh8JWU6R3I9dyk8KGVoSipvWXkzNzpdP2dQXjEuczY7QEk1OE48cT9CYmtVOk1wTFdMKTpvRlJfSWhqKTAvWWRVbTVJOGJEbnhKLCI1N1F+b0JrfGJwbnlSREE6eW9gcWtVandnO2c0XT9KLkI5RjtlPyZAcSIzXT58WEtocHNVKiYzbGR0XSUuVCsyNjEjPVBEUUhhIVZC''@;'; put 'put ''fSlQP1J9LnFnb2prS2Y9Pkh6U2NOe2Vwd15ncFlbPV8haCo3N0BhdF0mYCk3P3VBI3IxVTI0ZzNATWdGOmwuYixiNHcmZUBGVSw2U1VdeCE/IU9Gb252YlEkTT54MCprVHVRMUNHPmFdZVk+M1d0UiV3PFAzOWx+PSg1LyUrPUQhIyF9WilKX0lxOVAuV0hUUDJkRnoxcS82XWVANXoqNnVKQFpz''@;'; put 'put ''ZTFzSlR8VXFJMzpiX080eyk6LiQsJmZmL0RrQ2NHcTNseWI+Mmx2WDFiZDF5SDpsUWQiOUIsQTw8WCJHeiFke1ROdXdgM3o5Yj9bTSkyNFZtbUx7dFFmU2xzc05TRU1NdXJIKDc7eXZgWXxNaXZCdE9xUyhHT21rMk9zdWVBRzFrRVFAenB4JDJ6VTVLQUNgTl0+TCFDWmdnRVpna0kiTWJ3bzx+''@;'; put 'put ''d0BMXjR1Sj59U0VZY3o9Skx9OFFFWWNueHF4KitwVmI0Rjwie3JrWkNvfXghTUJyMzxQKnhMemdSLiZxfCVCPjIqYnUmKFNbYnpUJGV1cnpwbFZuQ3B1azt3UiMlbCEySj4xIXArenBZK1NeOkw5azFGXyU+eXJWaHRwZE0wXXBIPn1UcnIsfShISncjZnxGXUgvPyFkbk1Ud2RlTUkkZ3FrdlpN''@;'; put 'put ''fjpGRyxaIURbS01kM1pqRDw2fWhMX3UkTmd9dnBMQXdbU1F2JCxUbkMhaFhhIUw2Kl9zOiQzc3FSNDZvdGpBMTRiRSEpVnczTSUyNT9pP3FhRXRxfSR5OD1xKGokcSRjdHpWOjBjJmVNMWFqYUVqLm9EMyskN3tJUjBzWSUwQ05EKGhbfFgkLD0jSkhIdUdha0BTNVlPbHNnfEowVChkQ213aUB+''@;'; put 'put ''NUBNLyYqJkB4Q05kVS5jOn1xTVo1YTZOcDZXNDswVEk3aWJYWyYucVJtcTY0SHpDdn00fWJXTzI6IjleNT4qUC5Cdix3ZypPYm9NQ3FSdWkrLGwqWkZ6S0hkRnVSd3V9Z0dHRW5RY000b19PWEM+KE95UVJkaGwkTit+U1Z7W1VsL3QsWmJWSXRsP0ZHTkhwSzhAaHYkV1hPc3VAJClCa1hdNElY''@;'; put 'put ''U0AjcnhXMC8xfSp0c1U/bXlTOz1GWXBKaU1qOHB1Vik/KiVjaCpIUE9wbWl9a0pbMjkyPSJJIncqKWU2ZjsoakxhdGsxVWZ3PTFUOzhQJkhiJkFfPmM+Q05oM2tSNStrIz9QOlkuL0VDYHtsVyFOWUFbPGpSd2l0JWlvanFtamI9TDxnT1BmM29lVGVub2IjSjA3USQ5OnsvYnB7bHY4XSlxKnha''@;'; put 'put ''Lyl+dF5iaD9peE10K3ttcy85JiNGQio9W3dUbHxrWGVJaHpHV193bjAmIn19Vi8mPWVPTzgwTkA/OTEzKz5vQChOSDVec3pJWXZGRE9+d0hDYXFJfCl2LG5QSF1GQTNHZzJHV0pvfF9dZVlOSzQrT1ooZFhWUXk1X3h6JUlZJEB4NCtCZnJrOHRuKyQ9QV5OTH1eZHc4KUR4W1lPPnBKTGUzPUAm''@;'; put 'put ''O0hfOkRPXUwuaUReUDEieyU7bW0lcSZTREZfaExgZUlFVHp1THRlITEmVkZuYnhnWHhWczkrY0omPnRBXUZLIyksMWlKbkJValR8UXokaiY0RypxMzBYIVpReldmRnpyMXQ8RmhYNEV1KW9aPzBwME9LR3pAUFtJQzwqNGJeVUYqZ0ZeRXR9e2VNOEAsVXArLFFuWXgrTHdIJks+JWpkNCJnblZo''@;'; put 'put ''PHQzN299dCIlJW1KKXVVfWptNVY4RW5KKWVVWmY9QCoraWsuVU9LJChDYEN5QUVqdzdwazhYWkQpeCx7IXB7c1tVfXl9WyN6cVhNbll4SyNgQ3xLTkk/RWlCXmE5YCM+U2lKandpQypWZz8hLktjNmFYLEcoTj0ySCI9MFdEMUlUXlVRZChZUT4qai9OU2swNkFKUzE+cWAhTmY+ZnVJdFk1IUJj''@;'; put 'put ''L1Ila10hNlFpYFI7Sl4wXUBpOF85azJPcU1uczk7UDN1O3FmcCZgTD9ZY1s8aV56dVdJV15VY1tIYV04I3E9MFV4MTNebVp2XzNte19Vcls6N3tkQjNseTVjVVY9ME5gOVBOMm0mKlpbQE9iN3hbWz4pLEpeTjVKVD1yK2c5ejhVelUsMmdqZG87SHEkRDhicyQ/fWdDM3RzVX05VHMuJWU7QSx1''@;'; put 'put ''eyk3NzVzUEApdDh2Iyt3dHVeNX41YW9JfHVbWlI+cVs2VDdtQV01aEw2b1F4cUVWXlRbazZtSU9SZnFjKCFvI0t7MSlkTDxde3Q7e21sI3s1ditfR2VAQzdwenBXL3csQCZUPXF2eS5xOSokdlAwQiZBME1AWm91aCwldTJCPWlLcFF+an1mIl5IJi5ZI0hINmlXe200aF1WLCVSaFIoQD9dIXVG''@;'; put 'put ''SGU9Z0xObntFIyt3UWxJcFpBWD1dZTo7SiNve0YvRlU3aUguem1+dnxRRU5yTlldM2RTYENPPmd7Vk9RL3heZFFtRW5ULloyQGdnT3hTe2N2OS9iVn07S1pKP1JyPDJFdC9sNTl6N2coakojQ14lRm06QWJqX0BHOz1QQ31wKT1ZfXMkX0lzNikmZCx1UGpHdyUwOkI+XXVOdWZ5fmBdM2cjeT13''@;'; put 'put ''PHQpMTNKczJwVzdhYjZPZ3ZCcixHbTk9PEg7XUkhTGpoKzRXLFprJm50P05JbmJSVjRjO2ddZ2dPX3BlayZdP1YqMFcvc3czJjpAIktCTzBkL31ySjgxJm5ONkQ5aEMoMmpgREI/RUZZLG0oK08zakBLaSJCQEQoRj1MUERaOz1YZE9kOiprYFVZYFA2QWN9JS9tJW9uezpaeStoX0UmRE8hVykq''@;'; put 'put ''LlRSQyhqXjMlIilyM0hOWGN1c0g3WDBtSHswRTouRSlMOVFeVSF8RHheKlI7N11OQHRzfDEzbU9rJH5UPzhRJlU4aFFKNUtvI0VZaSpULG0mL2lUa0VLOXk4VThTTnQpcT1xU0JON1d+SW81bm5fSzV2UUcyKFFqc0VDQjNfZVMwSGZ2b0xWQGpKbilZWCttfl8kZnFabmV2Y0w7REgsU1s1Xlkp''@;'; put 'put ''eGpKeFhANlFUNEVvayIrdl97OXh4KDtgbmVzYFI/QiorbXV1QFZKKCp7eTh5e1I0RW50ZHxQMihEUU0reUEwUjpPR0p2OFcvfWR2cXxQL1FJazUjIVo5OmY9QmkqTTNtUixEPjFlPClqOnVSUm9ufE9iKkw8MXw1RTxfLzsxSnlPTWBvSjU/MzpWSk1CJCErV1dqaFNrSypGYGJySD10NkF7OW9J''@;'; put 'put ''X3UsV31RTikhUnNJYV8yTmZML3g+RUh2UnpKaXpufkxMMFdbJnV1R2NPZ1s2az9XXSYvT1E8Xlh9QER0UF5YMU46MmQwfFNSYDY/K21oNztPP3xYekdpY350ZD9UcihEUU03QEZ2RDcmJF1ka3NjKV5DUGlYeVB+VHFrc0V4eEpfbURSTWBAeG5EPnA6YWg8QGdwMGF2R3praE0qQDNEaVdGYmde''@;'; put 'put ''SFFtRUU/VF1ZK2tSWWlPSng9TiY1YmZvIy48dnp2M1p2MFg0K1NfMTF3aEIzUV5sdmF0dlk1LCZ8fkVoWEpwYkl4Y3kkUF5UPW5eczdCVDpEX2coM2R2JkReTnxuNSkib1pWJkYoIk84Vil+aCVrMFNeKFQkIzpGQ1N1Y3c9eVpJPWRRTiIhfSUmI2x5PjY6KnF4eFtKajNReDZVck8yL31gZm81''@;'; put 'put ''eyVMYEJtXUNaWU97JElGY3sjUEVNa2NmIit0Yys2V2tsaFdPOml5dnZANUM/P3taVj5rY3BVXURvKUJSPDdkSnZEez5Sakk9b1h5Kz4kdUByQnpMfkM1dDdvR1FPTTtAPkxxQ18jLzNYP3FHWD87dV1uT299VXc7Pn0pVUZPVCFGIVErOnVPeiFOKmI3VUhTIjksVzFOW2duc1s9T3c3M3BTQ0s+''@;'; put 'put ''KS5damJIQjddXlsiSS5XcytqcVNKQkZdRjo3KjBZQFVKQkZUeSpUTG9JR3x2OzFsXmxqSiQuIXB1dXQ6Rk1hXUM0THl1fGJZeGk5dG54Z2Q0KzZfSzhvdFREQ0RmaDExbGlZcUNmWUV3Qnp7RWtlNUB1LndPVU1RdSZUQl0seUVYXUNXW1liU2VDY288fjVLWD5hSlBtZGkpWUkuVWI/cit3Nkw/''@;'; put 'put ''cXVvK0xvZD5sViw0fjs2Xzc7ZXxHeFhRZ09TbXhvWjlnZChqIm00MztrVWY3L0ArTih0cEJ0aXB1T1d1KDsiOyk+d0pgXlZsQl1oUU95SE8hdytVRFB5dyYodHUyQ0lMSTdiVnpLeGM+TW0wWER4Vz50Ml0uRTdTYWxXVzIuUUQhTDNJdD9wNHFrUDdWYytCc0RjdSQ/ZCJ5ckApYFc5TEdWaTlV''@;'; put 'put ''MzB1Q2pTcU1ZI2s1cm91UipXRkZPIkJYRGdYd3pXM35sWk4/eSkiW0I2UHt1U0w6XkRuQ2srfWRmaEhFPjF9IV1DWFIqKW5CbypmSElyQygrOHQ2XyxHWX41QTtBbWchI0pPVUJCPChDRjA8cTMmRCleP2NFMTlKbjNwPTRpKilMamJsaUM+MyNTKjldM3MoRlcpKF0lWEtdKVVUTHQiY0pBITM9''@;'; put 'put ''dnlgXWsvQCtYV1cjWXdZT3NWUHlZT3d6M1MqM2VraypJZHhjRE5ob0lhTVl+QDwsUTpzbGkwMWhJQktgZmZXOTJpPUlTRVFIPEZHYFU7Tl4pMUY8OT44XzYockBwOmBNWU18Vjs/RjcjIUVjcVM4WFk7QT5yOjJPQF5CYT5jXnQsb3JQMDNlJHZzOVBMaU1zfiVrYW8mQ2h7VmhmfiVbcjZ5ZTNE''@;'; put 'put ''SiQ/NTQ4PkQlTn1uMlUhSGA0U1VRSnVzdFJRUnhfSTdldEYlX2c6TW1ldkZFWU1vbEVVN3JeRm1EOkw+d1FDZ2JZMDJWVHg+NlohbG5sTCkuc0JAe1BffntkJnooNG99KHdSK3VwRzMqbiwwOSZrUSZjTDVmVnNOZGc6a0JBTXtHVjVvPShaR0c4cX0yKnN2VlFmekFnOmNgLEkmYVY1Q0EkJE5W''@;'; put 'put ''TU1jb0ohQkszRjBucEx7ImljbU95QFB5PnspbUROR14zMDNAJDlKby45LD96eEhPMmNYR0ohbGU8c3V1OTNqPUtMQT8vUFBXUnQ9VyVHOyxJImcre0daKVZZVGRhUzdCVnpRYyt1REdpNCRAWEZGTXw2c0g2QjRQPnBJJCx0czRhQUhDS1hRZllPRiolTS5iLGZ+T2F3NF9lI0JRVkZaWDVIa1pX''@;'; put 'put ''UmwzfHopWjNdNXF6TnBxdEJBRH1PR1hCNlpaP3o0NDJre0JHWUdPe0Vya0k8P3tyWm9POWVSSiVOdlAiKGMvTGg4dV1MLk5GNUdhUFYqLHRKNUFaRyRnVl1Qa0xIZD8yWCY1dkN7dXpATEpwdj1kaUdUSz1sX1oudXxEJk5FSGheR2x7Rj9wVHRzaTN1aEZgb2xYQ01lc09jbnpyRHEqa3RjdUA2''@;'; put 'put ''dEFpUUg2XTZgMHlNbW94YGZ8PltKTkFNUi8xL315MWh1YTR0SnwreWtBai5SRWUyU3RTNjdvOGM3Li5NKHh7I0JPJTV5TFlvWihVQjNiXiJIJjR4d3t1OSs1LkkyWGJ8Y0hEdT5GdHZmJCFXfV94R0hUdnY9ZGFHYUdQL2UzYXUxW1lfQjFCX0RCPS8wTXI3ME1laXFMIkNvREZzLFdqPGxNXjZn''@;'; put 'put ''KWREMm1hM3VwPmpgQ1VAYVIqRlBSMig+QyRNKXs+ayRmUXkwPz5rMUBQNmdmdV4pKzxGPSRFZi48a0Q9dklORXFdYEk5eDlpYi40L0c5RjpBRE8/MGQ2VVhJPE9sVVh3SUQwSmhUWFtDcmtjTWc4Nk9kcHg/aHRgcDk+bDpFZztvYF9xUS5nOlpwR0J2OUJ7WHpuZ1hwX3hHL05fZ3h7aF5TIX5H''@;'; put 'put ''IUxxZC5iRVguI1hSIyp3T2JreDBvanJzP25efmZyRTwmKlVmZXVrIWJ2MXVheF41bHFLMkBnM2Q9NiFkMyRoVjEye3UiYXMpNHBIMTlZLyglaU5lbVIoK0AvdlBVTDhydmY/MSNdcmtkejV4TFZKWmZPKnVTekI+ZHdHOUA6T0N0O3I+d2pzeFdWIkdzWXlFI0NuPDYvbnlpRjt7NDxtRihGRH42''@;'; put 'put ''WU1lImZGLG0jPjRbR05pR095cSVJSChudlVYcWVDR09RRmVgdislIyNVZm9lcilBTyFDVFNlMEM9PUsoTF0yM3REY3NkfFtqaEpWNClmd31hRiFveVJVclAlaDlEK1FyYjtvKUxKNStOd3FDKWFqOC5jRWw6QnxCJnM2az8yYFZddDlYSHZaNDlNV0NeISpeekJrbjUsJWBTaGV4ZS45P1NRcngp''@;'; put 'put ''fV08Rno5aUs4aW9AZzA3XzVsdCkkZEgocEo7WWBAenx1Rk9EKE5UalVvcHgiVjpzJGNgME4qcz8yTVRSInZ2SkZLJjM5PT89fDVCOEw6SFgoITRMfFgpaklzREtodXVxKktLTE1kOnhIQ1M1PFJ4SVZIczFdI1tpQ2FdeWFpeWlfRXNbdE9QP0ZucnNIMUt1JClYTnpnfW0pUkVkMlF8XXlwKWxP''@;'; put 'put ''MSoyYVF7fGRyVz47ZFIlJVtTTWhAIU56MCQleGUuXSU9OGJpfFdRO29WbVdifjAwbCxzQ3YkQWhHb2tSX3xldE51TTtvJktkLEEsYWcsTi5hMVF+JWMxPj1kVVlxbFB+e3JQdE51TXkzWHFBOmRVdE95cGJpPVttRnJ1N2F7WldqRCR2dzpsSnMsPSV4UU9va2RPeDEoMyNKbXJzUUwlaVVOWDxb''@;'; put 'put ''bWQ/M35bWndyVSM7e2E1XitdcjVWSzJhQFpDYkBMLC9nUGF4NkRlNSgrZ2tDWGUqUGFqSXdhQDswLmJhcWg7X1NvXnsuKCg8WldXfC9gUG5CIUxSZXE7aGYvaHVMV3BWPXFqYFRCS01aQ3FHe0UsX1IpKSl8YklHal47JTw7PkNCMiJaNHEpVSx4YGY6Wl1DPFBASWNmaGYiIiEue2t2e0pOV0pZ''@;'; put 'put ''fEdLVDkvL1JaXkM1ND9DXz9waHUyZTheO2Bpe2lMelRma1lQKmZrZDA6OyVwe2Z+dWNdTSw9Z2wkdlR3ZztaXi9FOE9CRjVSSm5xc0hpNGwpSyJuJnxObTVmNVMxYm5rI35HT10/Wm5aOEA/Wm5aSk4zOnNpWlg9QCp5JWNjTzZLbylFMT9XeWFeeVVAP1lyNmdMTWAlPjosQUJsK3B5cyw1JXli''@;'; put 'put ''LnJqMEdheCwraCZuWXZRdWRAUjV3LDhvOFVOWDcoT0xSdig7aXM5JS9oMFhxJm5fODJdelswdVohfD9QLlUrRmV1MHFOW0lDeSNJTTliQz5mVTk7RFtYJTUyfmc0TjkwfVNxeCs6Q2RNYUIpJFdQVS9MYCYhcSNnWVZ+VC5ML21uUitqKHA4IVZAQV4hTzUlU2ZZYGdmdXhfKVdJTlh1SyJxYHt5''@;'; put 'put ''dUo+KSwxPyQ+dD4wZCVebXEsMHZRaFtKaF84MF9tOD5GKGZ6IShMSTxyezpZITVVLCooV2c3IzAwYFV+NzYrNi52aURwakJ2TU9mR15VaWQuY01eYiFXOFhYaXhjVkdtc2lyKWF+LlN2Y31Yb3s5U1VKLCpuRGQ9UkJJT0dTTndZanFqS2BvMUBzJWwhbCFgTGY2PDVWSHEvOHdAYms2Y2MoNSxK''@;'; put 'put ''Vn0xKiRJMERFblBLTDl3SmI+SkQ+ZlRmIztDWj9tVT4xJiNBdyFTTE5OKXtQXz1rSkMpJmphLzZESjBfSWZISjpaMnFabHpvZHhuVzwuWmVQIz5LNn4yfH0zXmF6UnEsJWo/ITk5RlU/ZktfZ1loUkZUdlB+PHMlPDttcm1aK29VYSFyPmAwUHAoOlNhcV44RmE3c2V+aX5vP0twXjVpUW9bYDA6''@;'; put 'put ''V1V4O0RYUDx7RDk7ayhKOyxWVHk2OHg3L0NYKExgI01kX2RINilFWk0+cS5YPV9rU0Y+KEZ5W1B5N3BuYEd5ejssZStxcW5hM1ZXdk1sKEBfbTQsYWBYIWpUaGEwdiZ6P1N5JWhUeGB3Ni4lRytWTUo0PzwoK108U0VDYTtxJTppej9YKS8vTiV+LFJKWD88cHshVTRXbHd6L2orRlpjTF81Vi91''@;'; put 'put ''ZUc/OCshaTtwM0l3RTtsRk4xKiFqUjFvJmdmdTNIMCw9ZlskQXF2LEhndWZ+SWUqXkhGXlh7fClfPDMmMz4wOztsdyozdm1gbGpuNUpufWYqeElWcHBrbDUlQlFdTVlWU3NbRS9FR2N1NEYzZC9MeUJzaXldVFlfdjssZnZrbzkzLiklPU5ycG1wV3tpbFNHbTF1Ok11Rzk3Z181TjlqWG1RYVt8''@;'; put 'put ''I3YpdU1ETHtgKDElMDlYLzdLWyxbYWBgJCZfMT85OVcldUpXKW16c3FrYStdMnMuYkhTU3liQ2ZofCRPU0NWU1t4eGNgR3FPMzw2VmZ+SntgXVArVTxZbSUjO2ltZTRHWTBmNl9yZz8kL1ksNHd0XnoicXxDfVpYbm5CezhjI04/OT0yJjtVMXlZPmFwekJVXStqQFJyRF9dLywlTkdDQ1g2Nl0o''@;'; put 'put ''XkMwdDRddDlCdXIyTjZfVm05LHFyNTVHKDZsYC9XUkYkJUNDdjg1Yk1hdU9GTUpjU156cGk5X1BxZip4UX19bWJvXk9yMjBRd3RiQFUmOSwveCZvIzpgU0paL2JAYlNEbiVqYVRnK2ksaVA4LldNWT5NX0J6a1FyaXF5cjhJVl48U31qTFJSTWZeXnFHKiojLyY8aEFnYkVgPENLUSZWZzdQKGVw''@;'; put 'put ''LGV4QGNkWnYqIlFVVXYzOEcsUkAhdyRlcnIkNXZLL35mIm5RZlZQTDEqNiIyVW48VDA3dU5iflB4aFE7JT4xaDdidyEuN0JDbDR6Q3wzYVI7JiYsNCokN3tYIXxjcFkiKThmeGtuKXlhQmMpQ19ecztwYjwpM2ZFI3FCOypNSjpiSDFfcENmOSted09ASGklPitfVF84TnJHTUpzTlhdM1k+Szgs''@;'; put 'put ''Lio/Wl5gIkJSZmooezlkeDspNl9UJm09TDR8fXpqOy5xTzxLfH15aUFdd34+JlZXMWNBXU9YaFZfQz1WIn5rd2BpPihFeGtHYHttSzVvb2l3K3RWcnl0dVUpb19WNVN8bi95VWhpRSRGUkZSRlJVNVliRlJGTXghVDcqOTAkWkB3LnZHIUwoeU1wPmlpaXx9TSl0RDp0RDc7SWNGd1tBRnZrIyVj''@;'; put 'put ''TkQvZTYlKH1dN28vZiVQekl0RDp0RDc7SW1Ic1tDZmN9K3J3QDlzLl9HNFl6UEwkciQ3fEQpUSJHM0JGYzhSZ1NFNHVqR1dIJipDYX0vVj5qNktqdlI1OkAjOCQwMk9uVSszeXBxVihEKE5BJFZ9ZX50UWdRV35DY0NbSWUlQ1hFXkshUXdpVExSMHpfbDUxVnxRWjYoUmVVZXBxb1cmWUpuYXFU''@;'; put 'put ''KUdgfS92Zm9Mc2FxNU9AYGoxRW1DbEs6SiwzW2ArTUlZdD53Oi9dVWNbOT0ieC4hSDZZMEU6NipjdX48SDomSmVVZnw8XTZ4RUM1NHYsWCpuY2hJcDNDdTt7X2FDLEI8djZFfXVAeXIoOXZAZ3A/XnNdc1tmMyFZS0s6V2xaXnFGIXU1eXJXYngwSj1tcDk+Mi55KlBZW2tMOFtDcWxbQ0RfJilm''@;'; put 'put ''RilQR2dENjZvPiRSWl83e201Sk58UTNiQDM+KHpyZz0/Zl1ULCs6RWF2TzlxKE50RC5OPTplVVtnYW9kWE58az4xJmYmTH54SmlyeTk2c3M7TjZmWWoqRXtbYkxJeTl7dWdWel9Fc201Z0t0M1g5e1tYeS9CLFZkMlhUaC9nYlh3YWdXUXksUz4jaHtxUj40UCxbUXwrdHpTVVlIXjRPMmhlV3Vk''@;'; put 'put ''cmR1dStgN2RRNk5kLHdjJXlTcmR7MTs6NTcxdC9GVlhdQ01kLiZNfGpoLyY7NUlkUihMcV4mdzlQX25pKnYwelpOTXxoW1Uxd1FtUms0TTRPU1hFKUBDc0RaaGA8fXdNflBSXWY5eVBEUCpwRz1LVCVjZ2ZQXzpRUlVMWFcwRXBoX04hPTo1N05laGJmJVs5QWR5MEVbNWRpMEVbLGg/ZXdBYCZK''@;'; put 'put ''TExdWTNtTjh3RmVySmIpZXg/eCx0STZ4WmNgRGRAT1p9NTlodyRqOi81NjVzeFpiYERkOlFOWUFqaXkhZElnMkpOJFFxdGoxSSo3NSxkcVoqZjxMOXo4fFssdXNHbTx8Wn5DI10lZ15rJDhBcHMlSmZkWE8pZEhdLHNLOGBQbWUlZlVjWzhne3BQTldjdzldUl1ZZH19S3c7WylEVlcjcDUjVylw''@;'; put 'put ''eWZaeWo7YWlOUjFgYUk5RmZMJWREZFU2aH1CWWwlNkUwd0tKLDBCak9VRl4sWitaeCEsIS9aNHFibEZ0KWY8U1QxY2cxNUlyKjBHIUBkZzVoN2gxZWlQOmgqaGpve28/OWJmbDEuM29oOntaTWlHckc5ejZVfTk5ZlA/TVskc1tpPjJyRX51M2shYEk2RDxDT3ZET2N0VSlyZlBSdCxsaj4jdkgs''@;'; put 'put ''d3E5MFtdcSk8R2w+YjI2RE8ldT8vSFhUY3Q3UFdkaUNIO2JMakI6dnVYU2xNRnlIMWdPTU5rJm85U19ue1spcyFDX25RX2YpZS9ZTHExNkghR1lOVkQwRSRme0dZVj1ETUFEKC5feCZJU3NFcDc3JXcjMUU8YW9mJit4fHhrKCxZM0ZWXUhEb1pTMll6ST1rcDAzTm0iLC5bJTNmfE5OQz9kUTBp''@;'; put 'put ''b2BDRnYwcntxXjxAW2heUTI5QzQsQzFwLDJYe2BJQGhDK2Q+VUk9WTZSOjF3bD8zITV1UHJ1dj4jaG5WV0tlSywsZjF2fEklQSNPWjt+clUrUUQpbStlPV9hbWlRbnIqWkhNWjpjNDxBZkVHL2VnaENAeikmXnkvRCs9Njc3ND5PczhSQFJ3P0UoViN+NVkwWnJWXj9WVXZSWU0kV3VdU0BqM1Iv''@;'; put 'put ''UyRWM3d3cXV8aFFydTN1JnFPcXNvKD52PDImSzRIenAwTWtSJj5zM29CIUpjcyQ+Z01bP11fU2JrMWxUZV18aUwoZSNMdXFDQlY4KnQ3JiRpalAybjYmN1UrXXxXKyMxQGtTfVolSUReQ1A0ejVvIVklSS84RCZdZmZMZGY0Z34sMGJbXStjQ2IkMDdxQ3dCTzFyRTtBQEFTMVFINjBnZDBnVEJo''@;'; put 'put ''emkoUCUhW2ZNeWNAWGdZZ2llPytlKGRwSlIyQjE8YERhRGJvbHE/ZSFqbXNkL2RVPzBaRVlCMWo8MHx2MnpebXY5TyldQyM2X0Qicig6QnVwISJSLk4xVlJ9fCMyZmdvblZwWTdEQSRTcSt1XnAzMTlrckp+Ojg1STJZRW4iIXIhVzReUi44NTwmO1YsRkZUKkdPR1FjbiVlOXB1ZXh1JH0uQmx0''@;'; put 'put ''PUouOHFUN1kifFB7LEB2TH5fLD0sYW9nMUc8NGlxSl1wQmlxSDgscjx0KXpYdXJ7Q3NkUzYmT1U4QTM5P3s8PV90KWUpWHk8Q2BeJHFKeiZjJHFrKlE7bGAleFIhO0xyeHNtJHE/KiQsN08oaT0/PVIwXSJabzpmMmdba28jUn06ZTZzcDsuWWhdbGsyc1JqIW0kLHA7OzRNQiV7KWtEK2BhJWhV''@;'; put 'put ''TnckZT97IjYlU1JhYiZQMWBtIzVRKCgvWXdgPzN7JnhJYUgzUFcmL1l3QDpsSlc1bXJwTTk6Z09OIW95K2d1QFhobiRAOj8rNildNFZzMFZ3JVZnTTE3NClFOUAzZ3glIis5cTs9ITdgSns3eSVkY3xeXV1VKDNoJHF2Ol5SY3FLbDd0clBbRkVzPj10PD9TWTF+OnxXQiVwd1okWm9zMys5XU5B''@;'; put 'put ''PkRZeVVecFpoLzklJWFpJGNYMy49T3pQRThVTk9XOnp6e1tFa35GZjNqKGU/MGF5Qj9FYnh+LzJ4XWFgI0k8VDJaVkAqInpyTDY/aD81RXsxOyhoUz9SNjdCXXtiMjQ9ZGVeMi9UeGM6dEpaZWd7YW8+TWJ9SH5Ccmk4ODFjYDhxWUoyQmA2NkVlO09hM1RwNUZWT3YuKT5XTzAudX1jXWhSLGxv''@;'; put 'put ''QSEuaGxvYUhVaj99SHoqJWMxYXBWXktSeTxOOFdHXWdbdTZqLlkzKzBUNTB3dzxPVyMvOldVTDZ8cXwlSTxHVTVtPWhUXz5IIWQiVUdYVDdkXktkO3tELG5TdT9UfVQlUFN4NWhAPCwlfWUmfDpueSx+YHNBQ3F+ME5LKXcvOnsvKlJzSWljfFNofSUvXlIxMWYwJmdrezk0U1s3TjN1YWw6aFNm''@;'; put 'put ''Lnx1cHVjLGxvRWksb0g+ZGA4JU0mXWAiPmh4PFtvaX5OeWA6NipzWj0uRXlwSlk2NjwqVTohZSgmIlVzPEg+Uihbbmc/THpEbWA6SH47K0dyT0BtSGU5LnszKjZEQ2VOdXRqUzVVOm1mdF40SFM4ZHdidS8wZndMaTc7IixzanBoMVgzK05Nfjp8VjYmUHZQemowX0UkN0NFeStCY1QrIzp1WyM0''@;'; put 'put ''TUUhOyhfNlFDZyQwPTlpI01YS2lfOjBMTSRfSkE+aGNFbjh0aTF+JVQxKzI+LDJoaFM7QDFUa28vT3ROLEZbUDpIeyRdcDpEYVY2bTw3cV49I0NiVDVkPjdlPXd2VFltMU9fXWpHRW5OOyJnfCREbiRxZGdGO2J1SmxIPkN1Lm5eaCQmWHN7X3YmSzhySntiLFI6QExwZG5ENzM9R2A7PTZiIjZB''@;'; put 'put ''aTg0UGU3RSVIO2UvQEUrWWpuOGshbSZSNjAkfTpIS1VwR1IhLE5SXV51Nipma3UmcGcmSzBtTlAxU1ZGY3J3O08zVEZsdUBORVJrN3EockFraFNgKS8xOTljXlVyM1VoZlpwayo8Rnw4Tn5BcUQ+e2BtYEZjcX5gS08zNHdWRjNzZzZHKEVKbWBbOjhATG9oJl19U1A7WCF3JSZATGxXXUloZ3Jk''@;'; put 'put ''RTtOLl90WiVPTkZSYSVWYG1IR0lyUkB7IlhkYFsoVVRhbj8pcURPW302R1Q1eTw2L31XYTU/fjhJVWQ2Sk1dN3pQRi9yPTxeYSw7e2d1UW5RST9sbGFRYVRyZ0x7e0lVJT4xK0tkN3R6U3BOTyx5QmcraWM7Nm1ua016c306Q1k5OHNdZHY4ZTovOTVMOjp7ezZ3VnxuUTw+Q1hFRXgyIllAVFdy''@;'; put 'put ''THM7Ill7N1UzQFsyQFAxeitIJTp3THo/Z0M7cClTTVpqZzElUldnX1pBXTNidUdTQzlGdlp1VHMsejNPU2BCUkhsNW5oYmsuS2smUEBrTkh+aFM3RTE7T2dWcFBFb3szeG5wVTc0U1l5cSR8IX5fXmhiOVdwdDpgOl1YbDpxV2IlTG0kQTFFd3lwdWVaV05SMFhzPHRjQmJvXXpySTNxeTo1WEo0''@;'; put 'put ''P3lvUms1NzBOKHciIj1wUUw4WH5xZEJeVj84KUk0aGNdUnp5fEVKcnkqXzc/a3dJMDQ+bT04Zzh6emNneipuZGIjdCN2Rm44NFY/cCkld2huUTxBK1NuUzsjUnxEVnVDbldeSHs1XkBnZ2skdSNEciVsZGhKOEhhbE1NMEhOdVY6Z3dQWSVRJDwoIVdIcE11Qmd7PX43KVpEYjdod0dPdnk1NV5y''@;'; put 'put ''XWhZbi9ROEJqKi5wQXE5THRfQUx0UC80MUVmV3Q+dXBAMER4MW4hMD9FR2E/ei8yLnkqfXpYNmo8XipGaTldO2pebkkjXl1oLnZodyVbPXtHV3JOX3ouRV0oU0EsRGQ/KEh4aVFURzxnaWtoJj00KHpDKUt8fU1QYkNRbV1ed0NGc3o4OU1OcC9DeVFIZUB2W2poLnQ4KyxqXXQxfH5NI0g7emBN''@;'; put 'put ''ZFZ2ITVDaWljUmpVelNsVmo2OWhoaCQmKStlezc+eStdY3xVfjZoN0cofl5fdVIicWlpfCZuJWJyUjJhTGlDZTAxSHFoZSN2ZkBNP0UlSXk6YjY4Uj41VXxjd0lOPUw1dTFgIWEucndVPSZtSW15OTI8aF8rVm0mYmZWcXs/IT01XiQodSllPG0pTD95QGdTUDYuW3FWaC9YKVpLdzdfdz0pZ0NE''@;'; put 'put ''fk0xeVA2UW1gOlNpTmVwX18lZ21GZHs+SylqUX5dKnJ3MCNUJjgxP3dgcTZIO21OMzQ/OTlWVEloPUB5T1phMDlQUkFmQjwlanE1QkloLHJ+LkRnSTUzOlt4fTA6XmA0WTYkRTIuTSovTX40R2Qxejk8X208KnM+TmFrfV8zNXpZL3MsdkkwVz9nL10vcnRHIXdwU3piYEZSN2A1bmt5c2hBNnw2''@;'; put 'put ''bmksXXF1WUhaenhnd2pYPzA5dUc4TSxYaTdgQWB7UnJiVWBuWUcrdnFjU35JTDplVlpeelszK1dHez1pPHZpS0dARUg8V146cEo/Q0Bwd0k3KFcpRjlLXis9dCsrbm02VD4uQDk+RjJvT18/eHBWdWgvWzVjWT12eS9RbnRrI3ZaUDhJZkxmPFNySDU2RCNHVDl1RF5ObzA7L21GJTRfbFc7QW5E''@;'; put 'put ''ZEVNb3xGdmtGfHpHNFd0eHRKXUJ2Nl1NOGYpYEouWWJwZ00qJmMhMTVCJHFDLEtJLit5UmxHWGtxVytTTHx9OSVONE17PkN6ck1zekw6bVJ3Yno2S3kpPUtgfilRNiNEaU9XK1dALD01Vlc4VDt+cSFyc20+eT9bW3VGcnU4SExzW1BuTFt0MEwlWyh3UW9TZHdJXmxNKiEpaTBATytkXmx3Ljcl''@;'; put 'put ''IW9QcWlrL3ExOCtYS1dgPG9gWGxLKmpxPWZDYllUSGJ2X14oIm5tfX5CVj1DKHskMTxUPSszTXspQDc8cCVlbEU5X2A9VzA4VWRYTiNaPDlnW3BKSSxnVzM9bz5yI2FeWyNtWFdiRl0iQjwhMSxTXn1NVkNoTXIpUnYxKTNsNSkyPFUyXmcsfHVqeSw7X31hY318MHtQU2YidXBnbiVvJENQKUt+''@;'; put 'put ''XUhwRCYsaWJFQWVrUF9POllOSUE0WltbJHlpSVVOUVpdUyVqNEs+YlNLaGxyTSVdXkNGVHc3b2h8OWVMWFFZKS8lbzg3ZWtdOFozcnt7NkljdkV6PXgzSDE6cSRmbUltUGxgVDxzdCNzNyZoVHc6KmlIeCJ4fW9MbiU1SHtrOXsjXmExVHxRNDlVQ3R6KHdPJWlqQTFGc3BFJllfTyIwUV4/Uk8/''@;'; put 'put ''bkY3ajFSPF09MGJqZzFvZXw1NTRsPzsjOmk9PXo4M2JAUy4qRlp0UTosejIwcEEoMWBCcHB7InAmLz1peGIvak1hXU4mJV9xdzw6dThgXVYoQyZ8Kno0KTwlZT41JilKPj9oWTd+NyNZaFM/cXVCX0hWT2hdV3Y6NiRbP0NJaXh2Zz1xLzAjZmgjJEtleDxLR2xCMlI8TVBMbj55Z31KRURrOzxY''@;'; put 'put ''XS90d3cjKTxBbl9iY1NiVygweF9JdHgkKE06R1VWKD47KF1AZnwweXUmOEx6NmpgUmU4dm5QYHFyZ09OIU4rRmxIKVd9KEt+al9SLjdDL3AycTNLWHdAXzk3djsicit+UDlDYn1Vam87dSIkcG9fOkpdSTMqfk51aiFXJkZ4KDMqIlNeYnp7JVJfZlkyWSMzLCppVzBGe1lSLz1FZ2xhJFZdMHhz''@;'; put 'put ''bDxkLi9FN254JkgyfV5oe1FlLFo7cER+O0gzJmtEUTh1OU5NM3VRbEJWe2xENU4+RH5VYz1sczF9dDZ0Q2BqcVMvRzFsJEgzMU9kcCFXUGQpVU01OCxDYHhGb24jImRfUCNNN0AjelJAOHRqKyNVMTYjN1U6QHs+KktoUTwmdEtORHtrbT5YJEFKbUpkaFlhKTN3Y0JTLkthM2E7RCZiR1lqZUZS''@;'; put 'put ''VXJQJSFESTF2ejFVWDhhVVYyWDVmQjNUdiY9bSY7VDMmR0cpR2M/RFYjKnUmPyg8PSI7QGx6bGJWKXVgW25jJG5Na2xqblRTK2RPNExOUUFzYUtLUShbXl4xWWMzfVRHKFpfKFR+ZElFYTdhPERHWHtGRXo1X2BIPGI5JEc1SCJoTiElZVMxIS5Jem8sVE57TUM9UCMkeSZKPyJIJjQ1YjBUNUUq''@;'; put 'put ''P1pGWCgwZCF2WWNwdnhIN2tCRGZafSgvKi41dSxRR2A8ZENxK2NhMHd1O3FaX0c8JT9KOD4jLEtnNHU/aiFoLG96QG5MLlU2NHFrM0VHZGIiREdgK1Z+OD5gKXslai5sWV8pZmIkTmczWWx5IUA3Oi5VRn04XSo5LCFLMCtpP1JiMVRjY09zWnYjaiZhZlNmRGRQaEImSVNiZ2MmS2wiPnl7L1lw''@;'; put 'put ''LiVJfWZBU0tUdnV6IVdmODUmfHZyd2wiNT8hISQuJW4qKW5zNUEpQXFTIyo4VlEuOjhSOVFEQ1JjPFlWQ1tHY1JmPHF8QFc5cClhU050L3VnUHBlMT1TY0tifU0yN10raUNuOnc8QDBTWnZMMnkhX0lWXk8hO3c+KkU+R18lfF5RfDlGbmZXby5wRk1DZ2lBbUdoP0QlNVNIU219byFjSWZjUm0o''@;'; put 'put ''SGEzZ3sjOW1VKjZgXlNLZ3A1UGxwZVhuXllmJGhzYiR7Vkl1Y0dEWztGQUN1OXJgSUhseGpCTSwsd3M6OEY1W0w0JGdGbiY9Z3JrN1gyUHZgfD1IKTVFbm5AQ0xDfHVAMD8/aT4mPmdbJDIqInBvOz0xK11OelkoIyZxNjYsPmdOaHA5KGMvM1AhQn53IT1tS2YyJl9QQVpEXmVbLmo/Wm5sbUdR''@;'; put 'put ''Y2NFR3pqS2t3ayxUeUl0SHl2fDs3NzM1eStXdk9INihqNU9zYkh2Mnp7enJ5bDEkaHk6NXQ9N3xFMDFvRzBfZVcmUVsxSXZgMFF6MUREZCg7RV4zK3B7e00kVStmT1tGKF8saSZKd0lNLkdLRD1AWFM6WVtAQEBtIk5KWHF6IjFEPHs/ITd2bDV2SDxQIyM4OHNTOnczTn1hc2V+RDcpL3gsNURz''@;'; put 'put ''UDUsITo/WkFUSWh7OT1qVz1fZkJid2loKjJPJWF0fixLVDxDKGouaVspNnVgZlgzRV5eLmRZTWZPUy9mVHpEZE1FbGluLz1GRH4pRiI8PE9IeGVnIllPKE1FRTBudig+aDhpUyU7UDNpZlM0LCM0TiRmcnlfd0dxKUtOX3FwRTs/K0RaYm5LaWJtc2ZeaHYjU043Y3s6VF8rVmlJQUkvWVVybWwl''@;'; put 'put ''WkosLkpmam9Ydlp4YUp+MEQoKCR2YHlgIWhtUT9EQiZhXmhLb3A1RGx7aF4hUj4kR0tMK3RTWyF1e100fixGYG09Vmg3LmRaPWB0Ti58SXsjO1VRSU1IIU1gY0RdQ1R5QXgxY244dFoxenB2OUhmL3JQYHhbKUw7cCVEe3dMbkdaVHd2VDR2OlNnUyR+di86NCVvKmZMUytIe3xqSkQ5XXpxVXlQ''@;'; put 'put ''SW1GUFtIeDxrbFN6UyR8UltEPVNpXjp5S1koU19QViY1ImlHKHl8fGFZVkM2ci9YKmt9VGQhc3pwY0RfYU1hWz5sNXpHUjRLMCw0YjpAcyVwIXl0eHQqKzxZcz9dQ0xpdyVHZiZDMjwqbzVYSW1VNn5eZWlgQzZYUCUucGJgW0J1T0AiVileQ2NPPUQ2XiZ3Wy9+bn5Mfks+RyUuVCt4Wy8yMmY3''@;'; put 'put ''Lzw9YH0iJVpiVGg8R2dSKE9Cbz99NnQ5Z0JLeGF+STxuVkgqK3xeITIoLEFxSD4uRDIuIyx9KFI1VE9+P0gvbzU/MGQ6YXAjLl5DOWdEczs1bDVrKVA5Ylkwe250e3orfGpkLEw3dUVZWUZvVlA6fjgjd11UcywmT1s/ak9rWWAwVUh7MWN4cmV2ZVpsfjA8eUp8az5Ic0N7MVk7Q0RRTTRBODJy''@;'; put 'put ''fSNoOjsjMjhvRGlkfFZmXktNY2g7VTluQ2tXOWRWQFRiVXlZMj1MOW91KkAoXU1Udi57K2A2KT0vMmIjaC5rUk0+ZFUrcHtvbVVjW2k+InJzNTVvODBveyJqQSNKfmdNXnxie1NxPF0hPSo8YSx4ZnZ3cThmdVgxUF8pZjlyYipSR2VDbVZQcTs4R09ZQDBKc3c9ZF11ZXBWaC9ac216c25MUDc5''@;'; put 'put ''eVFeRXV5OWJgZzxIK0okTTReYm1RW24wLEdHYSkhbzxtJGM7PVNwJCVpYSpnTTxNKD1Je2B8ZXJFe0JCPzJNSyFaMSs9ImdySlgyWHc6ZXsvNnphTi9YQDcyenIsSzI6ZV9JMHZudE8hZWZ0VXJEPHVlamBkdlpgTSxNdlpXMyFxcXt5MlJXISV1ai5SWno5dF1xKmtuTFVjKlg7a1RXdzs6dzEp''@;'; put 'put ''eDk0VCFJP0tSQ24+OyN5LjNqMjlxZWU+PmVhOn1ifF5JQEohcD86UnU0QTViUztmNnxefXckRG5VJSw2UGV9Iys9eFBWUDs8dGd3JkJUKl5SRj99OikmYyJufXp+PHt1Oiw1OWRwIzovXmdPQF42cnBkPERDdl14SUIyUjNYXXkrdndMXnlYJEQoeU9dREhDOUx8QHNCL0w4WygjLGZiL1RTayQ2''@;'; put 'put ''WG5CVjdLN1FRPUJHdEhHTWBtTUs+Ii45Wj5fOGtGO0cqaixTJUxeIzFZYyFLPUM7NztvXjhYcGp1InJXMFM/QTQiIW5mdlBsSF5tb2xGOylsdUFpeVRmZGZZJXVjXWh+P2d8QmBmaCFNKEJrQVk8N0FBK0oqUkk+PlYmIipdPSttRzclbjk5WGdPOWk7WiEoVGRHWCYiKjZUcHI4YSEqeXNqKm9y''@;'; put 'put ''U0JgJU9RcjQlOzM5dig7PX59Jnw7NlshYDtHKDBJXkpMWHxYcCo8RWVnPGltVjVfYF9vS3tKVzd6VUd5QHAhLGlpcS44LExSfVRMdFFWdkdzYld7UldCazwidUx1Yl17STRpVUsmd11oNThQW10zNEtJLmw/SFZSZCFjZ0hCVTNQSHxLd0ZARXg4ODFHTDdjMkRfJXgoZUR4TlVFLDtNcTMuZFVj''@;'; put 'put ''W2lxZiZkQlFBV1QmcT4+OGJvRjlPQlMuJWtuWUJSaksrYlV9STh0WUFaS2E8M11qKEciUU1zQUFGUzQ+ZyxGaERnSF1daysrQCJBP09uJWEyVTw6e0B3IzJeQHI1byhAJDEmVExlQUFxOlFvP2JwfClxeE9BODhKei8jYy5lUyRYOD4vWXsqaUJeNXQ4YCZ7JTNmUlY5MC5uO2BxIXhsPD1HZUxy''@;'; put 'put ''Ri9JR3drTmUsI0NZaTNjJWpXIkNnOFgyRkJ6S1MyXnFdQktCaFlbR2NSYjQ1cWVjU2MzNEpDWjRdZiFXeUh1bCk5dTFFMmhuPHNqfFI1MUpja15XaHFCP2czaG9JeCk6REtyaWU5QFZ6K0Q5UlpNRlh9TEcjQD88OWQ5SGFESEs1ajtPMCgqfXcwSTFnO35ocDJfbUlISyQpajU/cUssLFhXRW5E''@;'; put 'put ''cylUXm5BVXckPzxIbXc8ezZ7a2dvLDJ1JDwoNERVP3hdYj5kLn5dX0xnX0lmOTN5ZjYjVWYsdUVhWVhUd1NHKzFucTldbFR7VH1fQCEybyUyNFU0SDIkbmpKaismP09odiZVeT9UfS5LdE0lWFVCLmZ2IWc5OyNyU1I+O3wkXWQlMXdIfW1gVl55VFFmQTxfUjopNStaRVd1bkBVV3U5d286XnVf''@;'; put 'put ''QVZGUl89UCh0OHg5bmBUaHN7cyQ5VGNHbGQiSj46Tl5ldHdBJEZsbWJhTSFWWyM3cDt3bVkvcmNMUC5VNyZ1WFc7bUBwcEZRK3p4b18mY1tJfHh4Yl1oZj9lMGBMW0xbe2xiMiZpITBCMmhLTWFUbH4hN3BOU1BXdClbXk9nfHd0XzlIb3s9KG1RZEpMcmFoPDtZfGZza2JNIWZILD4yK2t8cHM2''@;'; put 'put ''cnZCMUIlKC8iVXJjeColWEZHaWQ+dis8XW1rQElwMEs7S05NampJa3tLMD42Ijt1PTM0QG1rZn5ddSNXdD5Cb0E7PmMmdVFyTC5NM2BaTjBOQUV7VzQ0TUghVzRVMHZeQW51LE5UZVBTS2lzVWRRQDVKKiVXXXlUbDpdPi9tNXl9RVc8MTplS3xFSytCakAqe0ZVdEQzTD80KTplLjRAfk5AWSt6''@;'; put 'put ''fFJbYixeKkxGYUFbWURfKms8NStLYGJ0PGMqTnEvbCNlcX41XWpgMCFbQXNeemFvNWJdNDtrOzpBcC5RR3VfMER5OV86Jk44V1tzamxLcU9LUFRZNjh7XT1BKTlJQlZZMHgwZW5tWDkwZSgyJUs+ZH14Onp1fjUlQj5Cb3cqT0thSD5tKEZyeDVIQ2FRfi9VL0tqPFJbakpRSE1uQmx4Wj1HVVVG''@;'; put 'put ''eUhzXiF6ZTRUc3MrMTFQRGZCJmR7PmxXI1ouPShfXmlrblFXLFk8ITxMbFsrPFB8QCZwKjJwN0ZZe2tZMCJWJC8/XVdWOFlZPSlzIXRVO1RPYEl9emhiQEA1VE1uJi8wIl1na3AkOHF3RHdpR30jTm9vT0xhPFFqR1U7LFtXUVB4YkhdYGxQTl1zJnRqKiFqe0VnYS4/YngmdGpib1B+UFdCSU9X''@;'; put 'put ''KT9dXWdQQXUpO0ImbCo2dkl5cStfQkJ7Z1VOYFpiP2cvfVBoQmpxVW1EbyxEbnFmLE5xaXJ4Oyo0QVFASm5XIUwqSyNLLkVxNDd5MjoqWXkuQzNMcCgvQGZhW2BKa3Fabz9hRCEyQ0R7Q1o8XVFGdDZ5cT1AITx5TjlQR102cERKOXI8PWgxKTJTJThIQDZgTEcyam4iW09VaTdCeWUxTGx8bS55''@;'; put 'put ''ZjBNcS90ODsuIjhCeT0yL110OFZxaE8xO0xJOkcyPkFVVXNEPCxKXmhJSFpMT3JzfDdFOTBfZE13dEM4Sn1MQks+Yj9dPF5kUXhuKXdMVUNjeGxgYjhfVUhdbHMyR0R7LmRRSHQ2XWRHT1A0SVUpL1QyVCI2OD1OaGAhN2dffTMyMkJjQC9xPW5FR1B6WVs6PElNITJEVUdAMzs/M0p+XkQkWnJz''@;'; put 'put ''dmR1UGNle09FWU8iflZHcitpViU5KEtXKS56OzU4OD1KeiVVJTNFTVVuZXRBVH0lPUB3cSx5cUhZZG5ubUZ0O0EqbTZVSlExN2QjMllbTH5nWjApeGQoRCxuT0s+aHZxdEZSeWVEW1R9JjhZPDJERXo5L3FrN0J5WXJPUkUpLDhSPiZPMDgjWUF+eWMjWT5yJk0md0EzMV1gPXMpZyhhKSxYfFEw''@;'; put 'put ''MXdQcUkidH5VbW9eUHgqSE03cls5Kl1wOHA+bzoyMFl5cGBWMUV+QC4ySUFycWQweVgxZGlKaXA6MU0vVDNCeDVee2dUW0RMQGM/Jl8jO2pmamRuaFRSVEg0Jm4wcj19PHtWYFhrN31xWlMjPkApV2RdNGc1Y2hvcEVrSHxrX0Yicj5HRSxifUwkJGtHOXsjRDg+PWQhNkI8JnhsZzVvbFZKbGRg''@;'; put 'put ''OyQ0KzVvNE01SX5XYCQ6VnFaTjlCJSZKJDdQelB3dENvaCRgUSk2O3FoW2NVbl5DR0k7XWpveUJVc29EM0Q2KVo2Z11gTnB9eSg3QGBEIzJCMmFGZEZ8JSxDSlB3Q0o0eyJGN3pRPHM4LDgvdXFYPSZeNzcmSWlXM2xeK2MyaiQqdnJFU3FUK1JtU1tfQHBGeSMxVVFYUWsjOlkoWCQxVVQhODs8''@;'; put 'put ''MmNuJHxtOnd1JXZxSF98ZFF0NHk/UkU3czRUQWB4SFRnPk0rRjhmUUlUIkA+V2UjTFI5ek1ocmMoWmtoXjpSRkokNysybkZgT291fFlLcCw+eSw4NzFVJHZVMWddTTRhTVlCYCoydys9eTgyZio7Rn48YiR2SThLcz0lV2djUnQ7SEhfQ2t+YTwqVjpnNTBvMmVYX01tUnhdMUFycjkqUl5QYjdy''@;'; put 'put ''ezdCI24pN2dnIVREfHokfX0+flp+KlhGbnlKQWV2YmlqQUI9Wzx3VDlHSFUlKFl6IlM7bF8zMVAjSnJqJiZwT1EsNTtfOEk4NTJdNzxpZUF3XVIsNi8ibStTRGRzKz5YOjt7QyFJbnd3VDZfeWdwZDNOdWJPPm97fi56STpiKChwc3ZCKnY0N0lDRW49PTklPUUzJktBNTVeQGFhc09ncm17ZnR8''@;'; put 'put ''ZzhVNm56O2E/QEhbLHpqcng7KlMmRSwlZUBdJlk/KT1RMTttbnQ5ODVKXmhGb0YqSn5FKFcrPG9PLGkuKyRdRSVoLnc9YEYoKV5LZnJZOXV+b2NfIyksJCJrSmRBMDQ1ZytyWUJTQHVrXjwwYmAsR0NEaz0ueyVlQiIrPzhyJU5AfSNyP1Qlam5WczVjKEFzL3VuYDZvTy9GU3R8Xj9TI14+c3Bk''@;'; put 'put ''eTZVMUMqdl1yPk9lZ1ZiJT0/VVc/cE9PcX1+PXhgPlRAJEFBflV1aVRCUzorfSU/ZWVLcmh3K35STiVXZXFVdiQjYmpIPU06NVgyWCFyXSs8YkksKl1MaExwMzoqeiNKWiYhSns3ISNjSFR8RW19RVNPWXI0aVAqMmZzZWdxWUJFOWVWTVc9cmVZLlteaXhBYyVTWD07ZGhmaVdXUyFrXiV4Nzlq''@;'; put 'put ''JlUyVVo8O2FDZ3hlPiEvMEw2V1tDVUIqSSFJNCZnNTFfJHkrTkQ5KF9tJl8qVDtqMks4a0JuOmZ0VWZxUklxNWg2VHA5MDVJbk8+c2tJYUduXTY+JnUvbXFiOWM5PlJKWUc7R2F4WU5rZyNQblZlU1RlUDxiWGVOUGhhOz1CUXxrcWJCZWYsMy8oelg2cjt8Qkcja114aVslbSRkZVY5bXA8RztU''@;'; put 'put ''ODBeeCJqZk9peHZLMWgkMnB7OSheeHV8Iyh1aStDJGIkSmBtKy86ez4rdlkwYi9lb2doXk17PFlnfkxDZFlJaHMzVC45M3QsYl9WZyJuLDY5cVJicXJONmxWInV2WWI+cmVaMCxxNlFmUFlgMnR1OVZzNyYvNzQqPURdfXp7Rzw8UTxlSltiJVolMVRsO21DRUg6VE0yZVZCPmtVYURYZyg7OFM7''@;'; put 'put ''WyY9K0c5JWNOa2cpI2RwNWFEZlUrQT5GZzklY05xa0dAbzNHcF4hL20iYDcmMl1KZXVrNHhDMGczaSNgKUgyWXoqX2VsVzRqcF9nOEclbzQhMH1kfGZEU2hPL3tpVF1HZFZ9RlswJmhTWiJrc3BZdjM8Rz54fW5VJTFPX2hgISt2QV8jfFpaIVZSaV9FTnZFKy83W3UhKnZaSUwjIz5gfCpGfHhv''@;'; put 'put ''XjZxREFoNkVHSVlVR3JOJnkhLE18Vnw0TilseG9qIzFCa3hhN2o8ZjFQSFM8bmMlai53SDt8PF5vV1d1SHVfKEJvPHNVRTE2NVFFSX5xKEZlKSM4Sz40ZS5ZPTcoeDxPdVh9SH1QWiU7Y2FaWUAmPzIpZlYqM0gxSiFAYVhHOjdiSmRvNEBWWFZKTVFMcilEWThtQ1p4XU5BfUNeeWJ2I1FOKndz''@;'; put 'put ''NyNKSjZpMn1zRmxeTiRlNiVyeiJLJXwxS0RnPCRZeXVxdiwyRitRb1ZDTUZXTWA8XWZzVCxVN3lVODdYLEJAKjQsNV4xOmdge24kcU5EfTVEdiQ0eWNkW2w5KS83ZjcxI35kbjdLLylyb0NReVtJR19vLn5CbENiW00peUNwL05ofG04dEJvSWRPcCQ5Rix3K3EiJVA1e1djZX04UT1QODFvLDk9''@;'; put 'put ''fGF5bzUmRlhsUWs1VWFwMDlkUVg4bzNYUUU1X2ljMVlhOEQhRXl0WCtXOkdZRSE6QzJ8UHtkaDBkKWAlTzBAdTlZIzhbYmFsM3RFUFdUYTdkZ3xZYzhnLmhZUWZlTVZHVExWWyx9YER1Py9gMm9HQj8oW1hJLjlnL0N2bnNGLjcoKTdaNiFHKkMqPj4sSSFKVkVtZ24wKU42fSJMRkdCUnZKSEs5''@;'; put 'put ''fGRRRlJvZkFRYVJFc2R1UVVZWjUyQnV5c0V9PCNATGpwMzVvSEVdPGtTYFlvUEYqa0FBQUF3QUZBPldMQzlGKk1SZl5MV3A6JW40dihnWlBhRiR9T1NIVXd2Tz5pZ0VDdGxCQUFBQUFBQUF2KFpKdi5jMHN8QHBFRmI6OzlESlJDQnlNYzJTXUMha3wkW3J2TU4xcTx5eXV+PiYkbHd6O1Y+ImYy''@;'; put 'put ''dUJqYDN1XlUrITJocUJTL2M+JTkhUkJ0aXBrdUYlQChiVk4vKzdSJDRBQlRtZ3JNTCU4eUxQWyhXWjRmWFBsP2RsNSZdWVtDO2EiW3tdSShZd1szajYocEhKNTwxWi9uSEd6LjE0UHp6IX09dzNVJmlhXjVFMDZPXUkrczgvaXU6TmghKjt4akN8XzgqUS4kV1RpJUtgUExrNG9KUyNfSC4mJmw/''@;'; put 'put ''MiVuTlhSPWJPJGdJJCpKSCVWUl4xI2UkL1lNflI2dXNOUjBgMEZCTDlCV09PR09OSjJmW2I+VTMpTGtAI0wwbC53K1c5ez4yczxONHx6RyF0bnY+WDRVJGxIVDlIIWt6WkRKciw5bHRqKixxfi9pbSgvJVo1fEVmQmlwVm95JishLn5qL3AzV1RjUF8wWnJuP0ckblZFPEhDdEJZNFZNQUlFPHp1''@;'; put 'put ''aCxkfEd6L2MzWmQ6fitdZCg+cE5dKjtWKn19emZKNGY0Vm8rdXE+bH1xdjx8Nm5QUnZLaTMxJUs5WXovfndDeV57ITM/UWNbWm96TyIsMDA9VEViJUAqOF97Knp2a2lBRVRhXyhCQ2c3c3RyQEg5U011U3VOcXNvUXRRN3EuKHFCMGRbZWtrNHs7WSVLZ19ePTltTSFZMlNfYXcydy55OkV1WzNU''@;'; put 'put ''X0dxakA6Z3dlSzhBQzpCb25oIlR8S253KF50Lyl7Vmc0Nyp7dTBXTUM3M34mYCVRejQ0aVAuIU8zTz4sS2Rmfj5QVmVNSld2eWpIOUAoMyVqaTdndH5saHAxXlFRTzo7Lldgbl5wMHVoODw4USp2Y3MoR3BOLjYvWHFtLmYqV1FVSX5lKn5oSVp3Zj82bDQ0N3AyTSshNzRgQnlXT1Q/VG0kLjp7''@;'; put 'put ''VStzc3hYYEw+UUd3W2IsQl5fXlE9XXsvRksrVkt2KVA0JmxjKT4qOmJTJHdtX2NGVWwrdUx1MUN7bCwuRUhVRXZbW2wqUFBefFt+RFh9YCFkNSkya1tFZ282ZTBZVUNyLFJZeCNWXnBsK2NiR2tVaHElXlRqYFlIRF4uKC56OkgsPzZHWlJ4VGpDWUYsVEQrSnZDNXZVZi5TVGRsOiY6dkJOOTdQ''@;'; put 'put ''X0x2UkNTXmhVa186JGpoc10ldEJMV294UWJQNE5aMDB0eDw4OD8sQFNHTXNpPnUlaVB2bCFEdFUhVGB2NHViPkMyayRUeDptZXBeNlUzYF5YOGFOUkZjflpzVl9XJX4/aEJBMU1LMEwqb29qNDFUbU5FbnE1NlNheE5RbE8zeytRPFldKE18Ujw+WTByYlhJV0dTQT40RldYSitzbF1WVylEcmZ7''@;'; put 'put ''Ryw6LGxZd1UxcUBbREdKZWdDRyt5dV9KcWRldCw/TyZAc3RSQ0ZTLHYod256ekRjNGFDd2RHSkxCIitWOF09V3ZHYll5aSswekFnUWlZX0hOekE3K0lHcVs2T1RQfEgrTmg+KDg5OjR+QXY3TE11JG5XfUZJTHwuWCF+enFiW2prS3lFQVc3W2FTaiZBSUUrUVI0MSxIXzQ7KTxlMyxAQGI5aF97''@;'; put 'put ''Ly5OWHRlPGRJZXVDPio8I2x+Q3toM20ob0VyQGdqWSpaVGRSNXdXNy5ZR00+I0RReGFePjloZjRCcX1ddi9hbkJxUC41WXFwR0dNLk57LmUzX11wSUlbP3htOy4majRRPz8pe2lbImQhUk1dcnhyZ1l4ajsrbHNmLzZ2O1A1TG1lazk9OX1SXWpiaFBJVzNjVnpTXyl4JmJSUDE5RTBRVXs3bW9E''@;'; put 'put ''fn01TywmKlB9amg4L3EiUDQjaWNFR2k4LCNMW0c5WXhvfkBoI11SNjRibEpEZjZRISVwKCx8JSM5VH1CZ0JvLnteO1NhRnVqZyRraWJoMmtabkkxfSx6Vmk6WWkiZnI+UGpOOV4saiovOElnQ3Y/IWBsbSpvQjxtWU94IkVZNT9OdmlFb1RLalJ+LklPK3gmO0osejt6cWArTTsmeHZrVXlEdG91''@;'; put 'put ''MThteD1kO2lzdDhhI1hdOXAvejo+QlpodjAvMkdnO1ZXS3lta3ZmeSxFLDk6Z019NXtxWkZdfigxRi4yQGpUS2JYYEI3fSg/dT5QIUZiYHA7fj9+aUR4JWMmOWZ0WH4wbkQ1eiteaEFLdlFCdnopUGA4SngjTjJzZl4xWEtgLk8pL2ZdQHUwZDd1PiZbMUNRZzJgMV5vbGlZMlZLRHY3R0YqT0sv''@;'; put 'put ''SV8iWj86RUhEPz9qMFJTTm59JS95S01xZSNbNnwrJGMhcjg+bGt9cXFrQmomV1l2RWc8O3x2fVcuODVWRFhDOlpFWFRnY1h2IU0pO1syXlk9fV9bOTcuQFdPW0FAMHArUXowL1ZsJHI5QWRGJj40Z2U4b2ZRYilqSCJRPyQzSGhLOEIrWGx9KC87IUE6bmRVVWJnKVpNLGRbazdHOCNoRCpWW1pS''@;'; put 'put ''fjI7KiM/bCN0JV9Sc3MjcktGTlshbkcwKzJyP10iclM0Z2ZWXykmOEc3PTJmcy54eUVjbjBpMitUSUVpJEJ1M310dX1ZJlQ2bUh1UTR9bTlOJSpvYyJva1B3KFFXZTVOc00rbXQjcEg3YTkzZHJUOk1NdWpyQjleSmhkdzlKWEAsXig5QnAxLCldan54VGIqKGViaz4uRHpKaXZjX25CTFNPKXk+''@;'; put 'put ''KDZ4eG9zUVlYb1F9S08rQyR9KkgpZ0ZsKm46VH5YPGZyZD49KlpLNzBgbFQqYl82XmQ5WFNQYmApP3IsOzY4OCwwfTN4aV9Makc/YllxWFQ0REcvaHloeXwsIzN1OippLzwoe0VjJXN1bGshYmZENi8saVp+NDBaa0E3cTtYLnMsL3JaaVRLc3Z6VGMocl52PEZbITYlSChyd248ZkF9fXIqUkJ1''@;'; put 'put ''OCZkQlhwX0NIQlFTfUF+b0ZUX15tdUBVaX5BV0h6c1NlfFE5W2hYZ1JBLEJvLDttbGJmPUt0KC5gOiRsTiFUQStdNGo0JGpdNk1VUCFzNk1dVlIuU048PF9+KE1GK2djbzEuQXp5cjk9ZWhiaHxhM189RnA/Skt+dyJkJSk8KmtpfWdQbGBeRUZSRUwmeTBePDh2XkBmaW9FU2NSbXIzUyE3Qy9A''@;'; put 'put ''UHVqemtOazt9XjgzY3c9L3d3dFBDYXFyVixJNV9FQiUpNFtwbDtqT09XbihseFo5W2xHUjI8c0ZmKlVeWkpuKjtFSF5acDNPImc0PFZ5fCYuL3csTl1uJXlASnxwIzsrMTdabEZvYDllOWBqOTg8PGRkJC8sMUJuRWxdV2BUSnhSRiZIJjdvPzdeTWw9SlI7YCUrVDV9MSgoJEE7a35uPyhWblMw''@;'; put 'put ''MHQmXyg4KExkQkEhQVRDXSVnQnwoTEp9b2MvZiE2cShxWnBFLk1hLmxITiR8ZypvUm8ra3RASXE8SE99JURHZzs1QUBCYGQ/WkIjImFpeyJ5NzxLN2JXdDFiTyJVQG5uUlBCNzRoakxmV1IiT3FmaEVxKSt3SSF3RDkpXUQhfjYrTnJ4KGMuTyFZRDYxXVFLbCMvMT9mNDxKbkZRZ0JQUWIlSWM3''@;'; put 'put ''RCMkLjZEclUvJEQoeCpELihXYCYweGhMZmRWPVdHfSheczcpWVlUay42dTYsfm8hYUBjMyVoKV81QEglSjBvZER6Ui5bakdUSyZkK3B+M0ReTGxqJC9dPDFGLGE5MU1aMFJseih9WStnM30xaGFjVmgsVWEqOy96fjBHb0FoLn5ocipye3tVLnJVUlJnZ0FNalVgXSRYVWRrYzU9KzlQRWZpbkJl''@;'; put 'put ''e0leSlVfaWZmJmFPY0g8NS8kKk5xa0Y4RyNKd2NGTGkjK1V+XigxZF1OWzIjRW00U2tRPTBLXXkoOzYjPUhqfSVXazFRZl19IlhyW0lWIy54bmBlc2Jnay9CKktWTHczN3lDWC86ZGFMOD9AaW1PJVNVSl9yPFZiMk1gdDNVUVNCUTNwVHVLK0YuIWpfSyU0YzRySDh+Xl9QJiZFM0l1IUYzcyp9''@;'; put 'put ''PUtoQGUsUWdOOFNOOlcsPl1WLE1IamAje2hzQG1ZOWtOMXRDdGBYWWFyK3VSd3ZfaDYwYW5ERl11aE0oZjFyY0tSMHY6fiN3ZkhmZGJ7aDJNP1M6KWx9eHZQRm1kSyZHJDorSGxZbVFlQlA2T0tiSzo+bmBHPVsoZl5fSEs/ZilseXFRbltOMGxmTCwjYjR1Oj13Qyg3TEtiWFI1NVRnYUN1a1N0''@;'; put 'put ''fXpfXnkwSlY8RSJsTEp8enImQylYWH5oeDVFXm1YQzxba0FnLHdlPFtLVHQ3biNoVTZiNC4wOE9oIk1dUV1gdzBiMFJtP1orV3xiRntSXj1oZSFOP19tSTlATS9DdlBOViVESUxKKiZeX31IRl5yNDFVfTBWPWhudXBUNGhaIXhyT0grcU4uJik0bFkrZ2lqdTNXQmwpcVFMPj9QUW5+VntCNDpJ''@;'; put 'put ''Lip6ak5IYCtkeGwseDEoVEd2WT4/JSZoLGlZRks+UCNnL1NLbigkZCQrNylyMjI4fCtLZS9FZlMyWSN+Ui8la3tbbnFmYyROXWdPY2w9V04uLF49Nj5KVTtjXX5EZSQ3ZTFBd2ciM2dFcC8pKjFmUXJAYWVOUl9+Kih4JHlsN3hzYHgpXXc3RCZlLkxlemEuTDxYW0c1fkIlY1ZAMHddPiF9RzBt''@;'; put 'put ''Lz5dc1JofD40bXMpJmMlfk5hO2lSJjZYJld0U2cwbTd+JjIwSXdgL3BKRChRTEI6Mk5Ga254K1RXTkV3YkxdQ01sUztJVi86O3pMbihLJDp9KUVsPVdRTXJuNWpUVVtYWXkwdl1mKWlIJjw/JjtZQTZFdCxbJDldWCpCdSp6ZHZHT2l1JkB9YUBOSCp2Tn16ZUM0bnI7KHB0WTp5QUExXWY0UUZu''@;'; put 'put ''RWJsZEZ+cDtBSUR6eD1pcG5ZRTh7c3htfGlSRGlNZnBOallTZCxWKTxPfGhWJUcrYkA7USEwTytRTlFiPEtiTnk6KnxFOllAajkvSkB3VEVVaH1le3FlZEF1JSN8RUI9YEkoNG48QnI+T05DYWJYR2xdKkBbMm0sRWQ/dDFDfFVyYlBvcXQxZHtGe0Esc0NmQDNpPikvMyFQZ2p3ZnBleywhfjJU''@;'; put 'put ''Xz1BfkJBVyVuVT59NWhodSM9Vj4pOnkuMWN2cUZUPEpGVHsycn1QZy5xQWJDNUtlTEY0ZzxuJTRDfWxxYTN3QyM8e216OUR7JFFHW29XRFpHUEZrZ1t8ckJdcXs9QF9qTWV1TTRfJTwqRlUifW1LTyR0T2cmNDtxYmFNd29EUXJiXz1tcGRHMC5ZQDdvbDI2e2FSVmB+flQ4OFZyaCkzTjhfSmoy''@;'; put 'put ''cm1CYjBtXjFgLkRIfkpLdkRwaElAS2hXfXoiJVRtIklpQys1TCtseXN0SmgkSkxQNilwfDtSIXQob3o4OTsyTzRAZH1bfDFKa2l5Y1ozVTokSUhiRG0xNytUYWMlVUsmfFF2RHNpO2RsUzlJaDwheEh5PFV4MW5ZdVhrQkQhM05aXixbLEBUV3kjeFM8KzZ9aHBBYmEjdVRlQzhMLjQhNiZyRjsp''@;'; put 'put ''eU9xPUJeQilXVyNvQGhTdEppKTxWSzJmRXZ0Snx5XywwYlFhcGtlQD08Yj84NCp5WGFla0laREUlXXpLNUBsZmhWV0o+NT17X3spcCheVXh3ZkR7LEJXQDYqU30qXjRKPkIqKy8+Nk9FKSFwJW5qclJoQmxEP3BXRERfbz54MlMsdzxjci94M3hTPi4kXUZFJjhfJDZlK0N+QEssbVY1MHoiPUQ2''@;'; put 'put ''WzNbP3ojcUZzbFd9NXN0Vyg8MW8qOHQldVdvWVV8Pi56NVheImQ+K3ptSFZnXkUwe2wvXSJtQzNacmEoPUkoKEpLKVpqO21dfmxBR2RVbzZsI2EpdzU+a1UkQnJvSEUjOCNTYCJ0LFY+Ij5EIWolUnlvZzQ6Ij4pa0BrZjtHc2RkTTk7fmNBO3ZaLzZMRVAyTlg5RUpYTms3V1gsSjxrOjFURj1d''@;'; put 'put ''WDYkN2xwQldLQFs+b0UjVVp8cU50KT03dipwd3ZpQU8iLDxCUVBqMnBNMDs8eGtqfklPMHhVZCZDdkZ9LkFQTWdBeDE8VWx7TTFYUFFVKUxSTz9FNmN4c256XnJFOSU/T0o8UmIicENmPEpZJCNSU2FNWGAuY1QwJiFFO3ZYYXQxJTR8KUw/fl4zdm9WbUR1QmxnVXh2RDJBKzhNOV57RGVLdzpx''@;'; put 'put ''cjd6QzskbGg5Y35yM2E9cUsoIjJqY2oweXJ9M0dmblN+ZH1pZFpteyQqTWowdEojOVosd3JMUiZPXyJ4K1g3ajh3TUt4czVHSV1yW3xPNmF+Ki9IfE1VdlhrQGsza0klOmMyIT5DP0ByNEElLjVQXz83dXExREF0dnF6eFVleG5oNU87Si8rJE8pN35KL3EmXTwmNTBeQWcwL3FmLjdPX2g0Tm8j''@;'; put 'put ''fiM8SEsua3ZiYUwmSCkhdGs9JGFOMU8pd0VAWClPT2pwYjJTQFQ/aFQrbl1tVmc9MHpzfn5ie3doKnVDSjk9alBDXz00fV1OZ2Z6blFWMlFpYnZFJDJLTjlMRSRrWUl1dyI2RXd6cXk1Zkh9X0kqYlt2Kj0pJVY2SFpra35CJlduOSpLdm1IeCMhfU1mbyltRXVRaUtOY14rc15pLHlMTTpyQ0FW''@;'; put 'put ''cVNoaWNROyFxSThYcSteeEVEd1gxSWVtOn1QdU4sbyVfdzlMJmFUU2Z9YE44Z1UpQClrPEskO0c4QEZbMS5dSDBRQ0kqMHRyQFclM2orSnxkNjtaRyhJNl1weltofXE0VDFhLlRZKVJoOio3UmhGQ2RZLyloRWMrfSZvZngxSSN9UCJBfSsqNH1iWis5aCVIfSksR0FzR0tkcWlgZVlvS0FVMiFh''@;'; put 'put ''KiokVCJJc0BRSHFDQ3Elal4zJTg8QXFZK1FUPjZ+czR3TTphVWRSdX4zZTR3VUVHa0Isej86ZD5aVjAvLiVSREgmJXRvVS86bHl3VkAzb0NnaDhuMFN1YG1yYUJ4TVVCckpoQWciPXM2ZHdqdVoja1dbc2tFPG5qeSFae2VFYHJHIlE0fjFbKkZnNEs2cmRVY3UxNHZ4MmZIN3I2dSRTbFZ7RCt5''@;'; put 'put ''I29+azFGflEmYnJNJWcyTyFkSTkvfT4vVG1uYD9NdFU0LktfP0U6USQwW2giOkpnU3o9T1MpI0U+d1cvb04hTX5+UT9RI1c0ZmA0PVdfK2daMD1JKm1HUDErdjtvRTpzVTE3W0NdRzhnPjdqbmNwOD4ibj5kUk9lKnd+RSpaZFN0YktlfV0hMVg0XzlQe15fKlFpZ1RjX2sie359Yyt8Q15mMXZM''@;'; put 'put ''PHxJd1kjTGxMLz9WKktpbHUjS1lKdjp2cCpDPTY5UWJaJk0kVVhYPixTXTUpcVp+RzV6WzRuWDtkZ30vOzYlbHkwTSxvSjBnWU57VW1XP1F7NTR9NCxbWz5mdyRHTUAxa1dMWFhhKzlmK3IhZzNMTzxUM0VtbGNHT1FsRkwjYkMvYU5FMyFLeGxpPmI7Vlk0Yk0uaSg9SSU5SUFRLnZGcjBVfkg3''@;'; put 'put ''VTxPIm59JSU/fk1IV31haylQKTdkIktfQUxLVHArMXxiJTwwdmVsPE0vZnkwLGVmM0BoTXhNNSMiS0RrM2g8TnI9U2BySz9PUlJdc19qUVVQQk0sLjE4JHFMfmA4VSpePmVIZFFlZEVkL0dLRjkkPTBoeHQ0Jm9zbEZfKT5PNlpFOXJuSFtXT3JGfjlwKVFxaVEhfXU7T0xDdWYoY3psSFZ4X1lK''@;'; put 'put ''PEZfblosRnRfZk9ZIiVJUWMzcDxPaCgjbl5QSEVIYX1eTjpAckRCMEROfVsqKn5eL3ZRUjdJeixaPzEpLjR7ZyVndU52T0lxa09YYzJEQmJCL0I5cTh5PyoxJVt0Ln5nfSIkeiFKaCV6Tlt9NDo/clt5eDd3Vj07fHJsYz9EUlZtRykjdCMxfTdEJmxmPE5MdTE2RkxRcHY4RGR8LmUidktCcFND''@;'; put 'put ''VzAqSDxZM0tmeT1sXz9mNiIkNChaSXJqI1lbMzk2bXxaej41L19XSD1LOTJ+LE1zVHQ9Vm59JDcrc3Qyfmlfdz5EW145PmdkbGxbJVI+eTRLKnNtQTBnYmU4L3Q6b1oldHVGWFtPUEJUbzUxe1BQLk1JbTBZYT0pdXB1cXI8JTB6SU4qdGhUayJlfi99emVyKX5QPVByPUk2PDxbOnx6Q0YjIXxK''@;'; put 'put ''MTIxR2ZOOzdeMSgqdmtJQCxzQn11Rjx7bHtuMnVpR2gleHNge1g0QUk9eGlTWyxyTGZoXjBHTThKNC8mL0xeL2NGJE4jeCFxbk0hOyFFL0dFdlg4YDYvalYlUWcxfjpWbU1DaUtKSjV5UyZZXUNbKUtJczRGI2lyJX1bYTJHazZqTWtbbGZiMGhAcmJYOHc/fT9TP04vZzReN1R4ZHZSK0AocHZn''@;'; put 'put ''ImtXN1s8LE53QCZmSV8xb357OzkxM3V3QSUuNVk8alZASCw4a1ckVk4jeFdrK3RrXXVCOVNEVjlTI0FMXXooflZVa2I+cjtsT0lEIVFgQXo9NjYwOD55RldFOyJiQz5pUXRNP0w0am1jKHIpNl1CTkBSeHsjO08iLjtvV1opJVQ8Mk0wO0ZGRFYzNWgxNlJlO0JSXzM7NyNYdWk+X0RSQ3UhL0ZM''@;'; put 'put ''SHtrWCxgRUR3JWMlYzNTMzxlWVVrTCpuVk8rcmtUUC9TSEh9JnJ3dG1DNzBMT1tyZWlUeXFJMFpbOUdeeTtEZmUkUyJmcENSe01XR0J8Oj0zeng3VmtDY15rIkJJXVpSI1JgSkJkZ1kqWCpPTCJyRSVsOmhXO0oqLnd4e0NvIyZmNldvbFV7XSVmakV8NzpFTjNvI1Y2bm9jdGQqI3NQbmRUejQq''@;'; put 'put ''eysobGdNUnF8WnlYSW81PyNpVEwhS0JzQ19lZGIuP05hW0ViejJyR0U2cDRpZ2ZSZmQxeWlPKCkxM0w/RDdBc0cjR3VuQmlCTVVhJGkyMj95W2ZCYVtGVy4rYD47TzpUKVFtS1ZacklGVmNkPyZac2g9PiMjS0YhJFBle3h2Zz1+OSU3X31dMTB1MGJ5a1sofmg3cS52WEI8aExLNnBZVHpNbUJ9''@;'; put 'put ''WWJdVklabXxkV0A/JnFORDk1PmEweDcuandkXWA2OWtoQ2k5dURHW3Y0aHRFRkdQV2oqeyFaWVFkJmlBTF0vX3RCQjswN2xddyg3KGtVZihyKGw2ZmhzZjU6eWtGZWNIRmc7R1Yxfl81TGVRQDx9OHNBWi80YFI2MHlsXWdFckBtY250RyohZ3h8WFVfLlMxW0xkUkhHMC9AeWIqSTxdSl8rSXwm''@;'; put 'put ''amhXamB4Oz46TGxnLlVkRX1VNm1daGhMYD93bmR0TDxPZFczWlVhbjFkfTRNe09WU2U7PWtpOCJtI15jJVheMjM2JHRnS0N6LHB3LGFVMCZbRXc0eXYjQyQwI2UlXXA9UCM6QGR5IW9uen0/PyU0PGZLajM0VHZqXWUvQGhSZzNdRjY9ciNfXUw2PEBYYltHLD9XMyVzS2dlUXdwJVs6SHIoKG14''@;'; put 'put ''MGUlVWA0ejJlW1hZYjsvWU9je2xnSXFDXy5sbFM+SmAiTl5SQS9dYnpnO2EwcTNvcDFJMiN8azxNRz49KWkkJHk9L1Fxbkkmb18hJSZMSHhPQ09QWytZPWwobUVGel54ZyUzbyIlcD14eXYkeUkkSU1fZklNbXlXTzd6fFE/VGQlU2pAU2p7ZT18SGdzR1lebnlQN3t4ejpIaS8sfWZTQj5eUW9q''@;'; put 'put ''byw2WChgVE5xWUFFbzpVeGFLOnFRLzZYKl9RUD9PST85TkolZHNxbXVOJXFWRF8yTUApS2wjbFp4UWd9TjlfezxGRilhOiJhOVhPMTZJaVlaRmclcEczKzM7UC8hVy58VmF1fF8ySDo8SFFQWWd0NVpDeFNkWChEYnxddlhaUStdeUF9RWkjMkhNPkAySGNJWzBJX0AvfEVVZEAlekN8ekp+dy5Q''@;'; put 'put ''KSZdcXF3VDNkc09hc3AzQkBiJnZkKl9YfUdMJWYiMDp5KTdtK0Vub140cXFvOWpIRHtvXjt6eyxNXmUxKEEpI1t2QC4jTytYSG0yZU5Ha0xRLGUhJl9uUTowYU90PXV1RX5NNUdLd2c3Xko0XzhTSlJNaVNvUlc9Py54WSZifGtTbyVJUWIxSlheKm85Rz5CQVRqMEcmYSlMV3FxSTBIMzojPXNU''@;'; put 'put ''MWpEbz1AZ3YlY3BBa1JdXV9fNld1ZFklcm1qWDtwRnp7IWouKjhsbHV7PV5Aa29SRz8jWkE6PyZHV1V8RWdZW1F3NXpgUW18aVdua0BaPEJwIzxzWCE4NnQvI2UpTSFJVWlUMEhzd3JVZXNTcFM/fTtTLmxwXWl1QWhyekJWaUJ2WGZwMVJkWzglVnBLO2FdcjdALjFAK2QreFI9TCk2O2pte3BS''@;'; put 'put ''JmkpYCFhMH0ja15BV2FiVitJMlNSQ3Y5YjBWeU9PMjVsdDUoYDtlb0hMTV8zJCVpW0FjXTFGMkJ6Szs+RD9QW3hzbzdzbmpeeVFvP0kvV25FKiVzXWVsZFBtOERaUSFFS19jdFA0UHR0ayNoMSpaUG8yYEN4a0J+MD1aXkNIZUJ4bWQ8QCM1b0g0X0pebEJBRH1eYUdmXXcveVUmaDhuIk18XV4y''@;'; put 'put ''JEZgTilrbyFMTEdzKU5jUSk+fXpBKHdXSWE6V3czJTRaVDZFKG8yW0FiUnRReUF3OnVSZFNQLy9GTGZCe0w+akN2THJ0N01ZWmNuQ0FJc3xuKXBnXyMpZzc7WVJqVHtPb1BjbkMsc1J2L0ZzfmgpfFpWKWRnJC59KjNQaTo0QW05RVJRVSY0UDJjJWFgPz9XSGQ1WVoxc1pub2BleCRYY0NZT01f''@;'; put 'put ''PCRzc1J1N24yITJzc3xJfjR+YkNEJnhQXzA/aWRbSiJ0TTprT3RwTGE0Nix2VT9tMD9NI0lafGhTNWAyWmlTLFNIdURGUGEwNkNOMD4rJnNRLFtqJispb2lNI0xMYTZeUUFlOktGeDUiRWQxVDVdU20kTGI/T2xBdDRrPFEmK1JyR3tHVW9rRlo6eWcxNigwWnJsI0pnTHN6L0pxakBbR042TEd0''@;'; put 'put ''NDciS2lWTjh1I1J7MGojKj41O3cvWW55RCpAO1k6Iy9DTEB7WDIiRH5YYUhdUHopTFdrL1cldkk3QE4+T0kzUStfb3JnVWJlXUhDK3omMjBwd2hxe0E0RXEkNHNnMVpTMytHZmh3Tk1aT0gyXn5mMTFxfEtvPEVlIkd9IUhELE5ZdGtQQXlieWdffH5ALGJrMlgyeXFHTVhgNm5RblV6SjkwQG9p''@;'; put 'put ''NSIhSklwYXA+RHYyWi9pPkhFUndSe0JzOE58OGUqbmEzXS52PkZMLzU8SDopc3wrOWRFM1Q8clEsbl9pMEVGNWNoRFU/QHBPaUFQNVMyMDhIXiJTJndPfVsjSks2S08kUXlRWlVKQnI1PHk0cmVHVm84QiFdLC8mflFkJDM2T2tRTi9gYmVFTnY1cDpMQXx7Jk5SJEBZbDs3XT58eSNYYWtLfGE/''@;'; put 'put ''Vk14ZWQybjZCdCNgbVhiUD1LZXhwX29aOTJeSzZSPkZRbGJJX2lbbzNwKUMpazBBPUIvVHljZF04Q1E8fTU+X3wxKjY1RiE6eFNaQlhLK0RbIihzWzpIYUdIUSROQSZOfmJSMiRZQm1CQT1gNXFFOyYlVUFeYVFLeWdpQkBhYnFRMS9VdlFaIUJRRzdmMGNPVCs/cVB+SmZZQ1RpRX5VSWM+fDtR''@;'; put 'put ''MD5+OCpvRX1ISWwpN15dPmQ0Q09iIyF8bmtIbCNFZygyWiQmPEpTXTR6PTViWVI1dTB8Y1N5MGRGRC90fjliOm9GK20mKiIkcy99dD1fKTg4Sjt2VTVdK1B6RyFeK19dcltWZUVzeiZUQiY2TnwmaXpuT29mMllxLiYvVnNET0kuJlhVNDRFeUNWW09COi56JWN3LmJeJnZ5RV5FZkFYI3Eqcjdz''@;'; put 'put ''Q15gNURQTWNQJSswO0RZbHpUcVVpTms9PH1vN3JLQSFjSHtNMWBGX0pbeU5pNHI1WEAsaSphOC5nOjgoNCNtZF1uNUxaQGJASnR5W3FLamRjTE5MUm9jOlFhMGBZP3N2ejI7TnJIQk1VfWp3aXtiPz1oW0VaQE9FK0JhW0xaQ25tQiUueURIPyhTdzpFaDQqTTtBR0pVN1N4I3hhWXh2YkpIRWRZ''@;'; put 'put ''RV5HIndGTT50ajczdFkjZXYyUSp8STNmJStVaC9ddWpiTy5LKSVXZG5xZXlwTilCV0E4OSFyTDNTUz0yKWx2Pj4vV01KOUhJKDxwQSNOSCxvNCRtTkApdVlMVi4wRnNDLDl4UH1mcV5JMHs0c0Y4cEUwUWkwUDs+O3FafFpAbzdZIyR5YmtKPi9hbSxuVzN7JjBFTnlwRjRMXnpfLkJsPmwwNVte''@;'; put 'put ''VWBsNyJCZnshK3peLFAvZyV7RnpLMlVab2o/dHtGfHVAKGtTJnEwa1JJQik6dGVVSntsRng/WDJVeWpAXUs5SGolSktCZm0zLzApMjpIWUgma2QwP2d9SS9oUGBYSmcoZDIxamxedHJVTHJqUnc7aH1BJTBFI0heTyJ0cDd8aTN8RGNDcENpTChBN2c7Lkg+SkcmUChFQU9FUHkzZik2fGRafF1e''@;'; put 'put ''Lj5HUFElLit3KztAemhDY0RTWWluOyZlLzIkTVlvYlEldSs0OjFXVy9GXVF+SjkpY29LZiYhYEB3IlVlKyVoTzBWJCx6ZiYhYSldKCY2LyFmZndZfF5NajooQi9QPlQ1RD1MOylOdjhoQW4vQmokcms5bC9Obk1nSXB1OU1mS04oQzUqITtiMk97YmF5WltWMmszWFZHMD8zXXNkTXtdMEBlTWRN''@;'; put 'put ''JG06bi55WTpOfUghb3hiNTImOlVXIjRZKS93dXMyX2BNOEBKQEJeWWt1V0xKXmgrbT5vaHlyPGN7Y1VzT0RDKihhRi8rOEdRanYyK2J5KVExeF9OMD4lbm9wWi8oQG0hT3dvMWNDIXJ0Ui4zZmw/dS9TeVhkbG4/Qzg0aWAiRSQsdUJXVGVlRSE1Kz1MSTAlRzp7Mjt0KUtAOkV3PE5oQWZDXnoq''@;'; put 'put ''Lmx+ekQubV1MLkh5VGJYJSo+PSpfSWkkMCM9eHtlK2wkM2k/Xz5YYXdzZSZYV0h7Kn4+UVRPUyxMR204bGFgNVE7K2ltPyZidFp8ZzY0VS80SGBAanNGMW1ZS1ciaEQ1cDlTPEVYeko4STU3ZlJSc0xmPU4+cFo5biljb0dZZTlZVTZieDBaKEd0dylZJFV0XmksVnVfQTUvK2ZYaHcpTWFiOG5d''@;'; put 'put ''YzskSnhrWC59WEVzQnt0QSwrPVImQiFFPlhwW0hyWUxUWSM3cFt2X3kpT1B2ZkchX2FSSyxbY2M/ZlJgT31oPVM3OjY9NVdYTntEQnJlQjZLYHl4S0dsPkBAdW9oVz9DfEY1OiRxc2JLV104OHBtVSNfbmU7ZldIQCNONE9CXig9TXJOKl9zVSRKUTA4bUkzPCVFQHJgbm17bVBkaSImRkVzI2ht''@;'; put 'put ''Ll4yJmBrYXlaT1BNblN6fjtWIXJidDNrL2YxNjpIciJBYU9zO0UuTVpaL1JgIiZGPUI/ayNLTlNWWE1TSmZ7X3JaY2pkdiZJTndGLkUvYFFSR2VRNU1zPDVOaW0xKXloOUs3S2BjTCxYTkZlS2AwTEs/TSZnc3w0TmNCal9EPW0lXSE1P11UbStdXSpCfFM1REtzJHtdWVdpRkVAbEBqUnUuTERK''@;'; put 'put ''T0dCfEZBJiJdfiUjJWBgSEZmckQ6Jk8yP3VFTnVze0xEe3Q5aSh4WmVlKFcmeF89LDcjNl40THo2TThXQFZIJDckIUA+e2U2QCs+RFJOP3tyVSo1Q0oqPGI4e0NqbGwqfUAzQHcieiR4a2ZHemEvJns4c303VmNmWyEyY1I7OzdsQn07U1R+SUM3V0pSbm5xMDRIdzssJCRSOnZofXo8V1hAdUZG''@;'; put 'put ''IiQ4RS9OclJzTXlYfj8+NEhqbSZ0QnkycTtGZ2x2bzdDTylidEFVTH5lMDwjOVc8Kn5NdU1yUWkka2FmZFFoJmQoalRWKFN8VzZmfUI+NCpCcCgzRE9LN1ZHXVFQalgpdVV8RDBVVnZ0dVc3R18oNGJAezVZOGczXXVDOz1DWmRIVG1UPFEvIlltemRXWX5sNlsoVH1OO0h8VTMpT0NPKE0xV0R4''@;'; put 'put ''LEBIRXlgczRCMUVqYjAmV0ZweTMubDpeIV1AT047W1lsZkZkflliUiUyX0tiIUBdcixiU1dmWShFY09II2lZeGx9Y0hSNjBAb1k6ejJ7MTguVkkyKVN1b3AjaGsyTn5DU2Q5cEVXNlojMmQxZDl5QjFEe0I3SVNkZ1c7cnJaVzRtbnR3eFlrcX1TQXA8Z0BGbFBUaX13SDBaT2B+XT40MW5Acy4v''@;'; put 'put ''PUVgW34+RTdPNC9raH0/XW4uYFhGd09iZW46NFI7Rl95RVdwOjllK3tMK0tPQjkyaCpScitLQyoiTFleSzwkSiNIKT08PSlxeHVRdnVbKkFhNVliWE9dfkUzOkB+cEtnNT9WOTReO0FxKDw6fUd5LFJpJHBiSzI8MmYhfjApXygoQ1ojS2ZaTTR8RFtXNXIwOHhkUlkwO0REdXkjcExwTXcpOlNN''@;'; put 'put ''IlVmInAjbTguQldCQytyV2dALCJ1WVh7KH5MJUQ8ei4meWpde35pQjd+RkJlSFNGWyVZX3RHVmorSmpHNnUicU8jVUtBNCN3Lz1KY1Nybz5KMyhdKSRaPXlyb1lHSHJMQWFtIj0yb1pAQjhaLDpHZ3FLTjJ6JU9uc0EuJDJ9MmglKHNmLDVDamt1KnhCO2NMVzhbUVFWLCRpfCgyZCRUR1Q3OFl6''@;'; put 'put ''KmUqUko2MG5AKHNWQzFQOUV9TkAiSDE1Rnw8dlJBTUhIaTIvMW5LdkRQKV1vVmc4TlM5JWFCSnZUO1t2cUlQQmJzfTxoeHhOYF42ZE5vODo9UGI9aEM0RyFteXA8cU1bUWUjKzcjJVEjYUcpXmB8O0c0eDA5NTRLe3o8MVs6cVlAPj1eQzZUQ3tFLk1XbWlQYzgpRGs0KXk+ZDdkZGxIU0d+fHls''@;'; put 'put ''T3JdbSpoY3dUWSFuR0VrNHw0ZHs4ezp1M09rTDlTPSNOPGk0WDBQUTFTMkhCOjB5PWZ7cExdZnV8JGYsUyhpTm9kSGB7Kl5XamJNKVk4PWwyQmsseStbY1lEcnYmLFhENypORHJLQ0o/TTsxfnhYKntjJkVqJVc1Q1VEbUV6OiN5KEpIKyhoc0pbe3NPOUBEOnBnfDNZVnNlZVd1Q2pRYTtIPyxa''@;'; put 'put ''QztISio2Q3h9fDk+OnNqN1MiMFpRXVJxZUg2K11odVEjYVAiUS49cUNyaDJDV3t3On0iV3NZNyRtN3lpdUchRGROUzx7Xig3bzRiTU8yR15MVFJ0XUVQLjNJVTJqNE9HPDhJa2AmI0R6dG8pejM7QTNafmh9Nj41OVhvNFJnO1pjUGt8IXJHRF4lXU9NNHRkVlZRKkt4eUd4RCl7eywwQFs4MXo9''@;'; put 'put ''YnVRTkszfUxsWCVeXUZQJlF1Pl84WlE+VjplX3A+LmhrZ3BMQy5hV2xVS00qUT9lRUIoaExkc0lxOlFURXFqRCxOWDg9OH5HOmcmenVKQDc3bUdMN3hxZG8pQGlDfEdxMiw7VlZBfmRfRVVYRE15LGM1fFhyaF4rRn0lbHBKYH4+ZiJzYF9kZUM6JV9AZyh+VltLSC45UHVmN3I3QkQiUWlqN0w7''@;'; put 'put ''NFtYMEVJY3NYSDpoW1BQbkwkQD9COlAvdmN2O3dpRzZeSSomLFcqU2haTFUxLDMqbUJXYGJZfWJwPXE9R1hAQyl0N3lacz9YQnoqRG5ofEluQT4ka0FfUTh8aHgqRDE7S0l+Mi4xY0xqMD84NH50SWhbOENbRyMlfixhPSFEd1EqfWhRYzxKfF0wejU8O0tmYUIkalVRMVtRMT9UYGxJeHohRm5C''@;'; put 'put ''UGQwYC96RXRMVVkhOWE3aUkyeU5DNGZeSCFTVE1WQztCMnE/Kml5KGVCOm0sRHF2RFNZcy5ZZldWO1Z+PkNrZ014NUgrQkp4OWlDVjdaJFZ0RWAuJCYkdnFbK0ciN31IVnFkOmhWYil9VGJJfSguNWdLaks6YkRkJmErPX10ZG5pYWQlWFphfGp6LExncHhQfGw9KnlCLHlaemVpTytXdEh0M2l+''@;'; put 'put ''OlA6WHN3QE4kOXFmQ0BBaC4wSDhGJClvSVptXysjSGNTMCs2UkZ8LkUoRXMjImkzJlsjR05Vaj1IYF1HakxPOSxeYUc8bTRIP2hKcWQiRnRnOSR4fVRhaiZqblJ7N2F6Sl5fbltobkNsJUxkVWBWSlptN2lTOi5MVV9lMjY2dGFESzBiZiN2WjM9SXJud2AjRUZpI2Bab2d5X25VeVk/JTUvbkh1''@;'; put 'put ''XlE7YiNQLiQlM2srfT98LmRzW3thfjFnLj5kW1ZITnB2KGIvQ0tJKkZ2cWo2VXdQSiRLOW94PTFDMTRIe09OYSksdjhjKWJpT3tvUldqJEdqV3ZuRlsmdXZUOnFRMjw3eEs/YnohRGtwRyo6MjZYeUhGWEVpX0RlXjlbS2liRF9uU0JgJEQyWSwpe09OKi4qOigmXkEkLytDJlV9Wkx3bCl1Qkx+''@;'; put 'put ''WkohYUBKL0pkKkhiT3tCajY9QmRGSSxjbVR4dGRlPjZjY207enk9enVgR11TemE0eWUhPmJie2xBOmhjdWxGO19fL0ZQdnF4fjpoU0pNdFtbJTJlWGslYilvWWNbd1l8U3wmVjZtMnVfRSNGJWBeKn44bkIuVCI4UGFVNC92TT1FT3dEJjZ+PV8hTU9GLmtLQFBaYD10aVRlPissQHRCfFhhfHZv''@;'; put 'put ''JDtfQCpRbFFQeDZ7WEh7UF5jU3I9XlhpalMqRn5RSSRpWC5pMWcza21mbkJQK2FESV54aShCQWgoQ1NbMU9yVEtSKVUxaEpRRTwmKyEzNSVzMnF8UTZyJXEjaTQqUmtGW3tPMTRiV3AxY0A/YVAldk9adGZ5RjZ4ZCQxODxhPUpQTF5KQ1RDLCUlPmNLdDRfLGspXTZKZCRxOmllSShMVi4+UCYy''@;'; put 'put ''ZzdGcVFfKXRTbmJLalZtJCZ8XmNLdz5Qa2xCZDQmTythbyQlVSpsaSZDPC5hR3EyMS8wdkJ7PGtMSTN7JjIrUVU0RmhoT0NQTjQ4USUoen4kYHQkRHp+a2xMQHFoISI3ZyNxYFdDWHFwR14+O35IVlBfUCQ4SzFxTkxqMy8+KWQ3R19gQ2xsIy87fVBpOSswKlFCemJtUE0/dVE8NDpITiE+Snxw''@;'; put 'put ''bjJlY3hMQiR6XzlAPGwjaXZOSTlMIUIpI1NuRXg2RWBdRD9rPlgzODJ2RV5FMCRidz9hVGtYeSV7MHlhcGEqY0AsIS9vMWMzR0ZzOnV0Vlc2Nngpc1IjJGlObDkkWVNIKDtuKEMxaT5aJEw0eC96Z0NjblFXPmBbZ0xqJC4reVMsOVFRbVVCZ2F3PW5FKWI4fStAd1V+MWJTP3FaRnIpKGU7YnVr''@;'; put 'put ''TFVhPz9xeT8mJCtUcXxwW3ksXX5nPns9ZDZhSFV1KiVWRDpZV2FnbkNnXVJjQ1hIbmdLbFlnYlZodmU+em1aPVo6RVM1ej55bHtrPGN9JSIufDV5RGp4Nm09ZWgmM0F3fHBkNUx0W2o6QDEod05gRlldc2NPO286Ki5BaltUMT9LTW82S3dZWnpaJStMP0okb082N05VL2cjTUZBVSlYSGQofHkx''@;'; put 'put ''cUNCMCo6IzI4M0BTZlVfc0VhMmcrZSkkUStxK2EpUzUzLnc2fmh8XjoxVExMUHlAYEUsfkQpITtMaEtbTHxlay43WHV3XzljQ0t3I2ROKVA5JTZHS2hSN0VUJTtHfnVCX1FYd2EkaHheV0ROSUkmWEM4PHt4UV1wXjQ+UyN6JDo0M0NLKSJJJF9zJVdMN3tXZEZkaFBedG5QXU1Yfmt7blFBdmM8''@;'; put 'put ''QndKby5wWiQ1bTJNWTBAIiNUJDlCRDF1OGYqMlJJcSMzeislIysyakV9U3dkVilHXX57Rl5FaWI7NitIPmYuWE08OFo7cFlhb25afVBxITRhI0lsbV52O0o0P15jTyR0diUqWkBtZGRgTTI+N19pRF9EXiNFOSl7eXQ0eXE+Kjl6PGNwWixFZWRSSUBuKHJ0UCVnT1d8c0k+QU8wb3x1fXQyXT1L''@;'; put 'put ''fTpqXWNiKH1fTHk/PFUkYXdJYT81WzN7I0lqXkVGbnw/SnhRYyElLyM/dkB6UXcleC4hKFYmPXN6fGRORT88YGo9IXUxbVZ+QVt1MX5XXW9pXTtVfHM0ZVlfbmJocHdSfnw1RT0kTFdoNmBCMH4+SylmUT9qWHNOS25veFp+KnlBOV08PyMrM2kuRTVSR18oZnhme3xgITlneG1WZywrJWdiYWVe''@;'; put 'put ''MGhuWTd2ME8vZntvZ1FUJlcpTUl0O25jKk44KVRpTjRSVVEsMXhsTyouTjJuZFlOYEEqe3pGU0I0RiNTJlYoc3NDWjh0RUt7dzk1UHhLdXk7Wl9tW0l1VmQ9L1FPQl0rMXhYZzpwdSxkb0taISgpbFdDZn1VIkpDfVEhYilaZzg7N213ZkBpL3sme1c5JHFwdiJPRz5BQE1ifChNckBdc0ovaTZS''@;'; put 'put ''TS5VcDtLaztgQ0E/Nj9CUiVaR1JjWSt1cFZSX3pfRTR2WjJARVQqR1tmXzxYbCF0fkhJOyk1MHR1NFpLSnYsNHg0Vj5iZT9SUDVJNGhtQTJtOmc0OD9GWU03V180Zk5zKlFUT1M3LDVoVSNGOFpjMGViKk0wMCtWdFtWY3xAKllse3VnQWZCbih0R1g4MyUyazswJE5tflZXYXYkUHtqbUtIUjpx''@;'; put 'put ''PCE4ezhUO1YiaysqaChgLDRdUE5yKkspN0kydH1TOyRhI2A7SFMwXTkzJHBNYENCPXc0Lk1ATUAkLlMyLEc2TyJZPj8mRXYyLGBZIzAxYXFWUE5HNHQwPGVqdjRnQW9uRyE9c2tPeEc5Mm9eS3p9MiRDMSY5JTRvW3Z5OGMwX29dN0VEKHNuP29JMkd4c3M7dzUhPVZ1JEFrSExPVz91SE5xRS84''@;'; put 'put ''NG4qWTdbZ04pSEFIYnNINkloTDUuPjpzUT1CN3J8SGd5a2FhMCo3Xz40RW5fTlQoc2FWMmE0SS5XTDZPJDo+UDU5P090YXZ4Xk9jPCxdS09eaTNtVTR2Zj5UciVuNVIwVUVlVlt9TWR2bWs6cStMJHklYSN4RWkpK0dCQ3Z1cEA3LG5PNjg6ZUo3ZnozWXpENDdqY3Rrd19pS1N3YGM7aC5GclV1''@;'; put 'put ''IWhNZ044W1tPdnxkJGRjP1JdMTtjN31dcm5bXTw6eWNvZ0UoTkNPNVJAU2p2PGErfmxaOzBsTSkpZUtibE4rL3BYKEAmdCQhRk4mW1N+NGRrZW08UG19SyFVJCpwZnByNE50KWBDej5FMkc5O01AR3ZlRVttMlV+UkwpYD96R3Y/Vj1APH4yKDtZNyMzMzphXlokSCo5amk0Z3BgW2k1Zm1+aGtj''@;'; put 'put ''bmJATSNCOzN0ajwraz1kYytETCRTRntPaz1zcm1pVT1hZGo0WkZUfTtKQX0yQiI0aldsYjtCeEJlWzJFbUEjRUpFYSVhJD5FWmBDWlNSZD9fWCxtM04hKjI4cFM/VjcqSCMqbCtjVyp4QF9VbjI3fENfV1U5QDJoYzR3fE50Qm5gSXE5aj5PYUF2MnN7YCZJTGZrfHo7VVgiNV5JezFCKmNMaXo1''@;'; put 'put ''JTcqV0pOVUMkPzN+KVNgI2xtPDVbZVkoXk1ePjJVYy8wL2NgNUdYTGZyXURHSGB7LFoufGZ3JUFmWWUyK35HZyk0e3N9TD8yMH1ad1FFaEFESyJXa1ssb2VWfTQwO2BdTzhKQE5KbTtHMEpTRls8Ymw7cl9yNV4jVz4+UDNKans5cEZtXSo7c0ooaXddV0gvcjl4TVUoU09pKjROSC5YPGM0OGIr''@;'; put 'put ''Syk9T3NMenR6P2kkNUxxOW4zdmtrNlc0LjZwbH4qclo+eVJZMGZoREA1VXkjL1AuNTNVR2hYenF7NWFjKj06QD13aTpSXT58UiNbbyk8QGFhJUg+Iy8kbkIxNHpeajd2LF9DW3Vnay5qXW5ETjNkPHY5fng7c3BdIV50MkI1LCNwNnF5PXxgbWptdXUoaUo+Sj1RVHp0cF44fVV6fVorM2pQK1Y5''@;'; put 'put ''JlBdTXJROWpTM1BfaXVjLkBwIyxmWk0uOm00ekF3L0VrTSghN2BhMjtlXmA1TWBsV0RPMHsqa3VQP3JIVzRMS1lbVy9mRDxhYE98V0NIZmc0VEFLMG1odlJzOUJkOk5zWVJwRUsvcS95ci9XPGhlaypQeWJUZTtqekBPW3ozNF5YPytsKFp1aH5eWylBWFY2elZDOyZvTWAxYjBkZ3xNUE07dXww''@;'; put 'put ''I2wxb2dJQE4wTCF7U2N4RWYxUls4X3Z3VWYseSxmLkhqUCFvYmVXVSJyPms+d2E+UjtnYTMlTFYoWmhjP1cwSVRzRDMlZF55STJfQUxzTHZ8djpzcCwxdD9UYmJ9RjpeR2Q4YypTVV0hZS9FWktpW1VEOiFoJS9hfCo2bUQmcSwuNXNNQHBZJXd1QDtQX3N2L1hwSTM1Q1BJSFBWLFojKnEmXjRZ''@;'; put 'put ''e0kjM30pbElWQTlrZFRVU1RIfjtZdlhWLC9VYUlxJU5fWWx9QGg0Z1RVUmo1bjVgbmImRX4wZ2pVPTN6SkZdcjwwWyJ0OFFAfEBeMUhUWUVsVjw6bWk3a219KThsTn5UYGBXeHVtPiUiJDc8WHwmbj5pPERJO31QbD1fK0QyaFVxVSU7PDtMOyhLYyk8bV9uZFQ5STJlWlsvYzglXVRARUJLeUAs''@;'; put 'put ''NHYrUT10Rys5WD5WbTp2XStDK21tJF5tc21XREVdMXNgaFB5MlJUIVUpUWsuN3ZOX2t0NlspfSJld2JpUUtaU1o5fldwfXpedXl0MGx7MSJ7PFJ2KDdkKjdxWi8vcExiXUtEdD9Sc3VNcllsKCx8PGl4R0Y0VEtqWFkzJXRiSFchLkpbTGNHb0h9cX1WS3x1O0lpTGR0KF5CJF9xLmVGaVp1XjhB''@;'; put 'put ''KFJZWlAzOyM9Yi9xZFJKUmtIemp+O291aFBROyUldy44bi9mLj5IXUJGUUFBcylrUzI/bj9fWF89V10yOGpTUS81TilmPDlDbFV5Y0VjaSJ9MmZYUnkpJFo2eDtEJHNLQzY6YDVSdm1LN31WS25wRz1XS1I8Yzxda2ddMCwyfENTLkNvI2dbfncyU1Z4d04rYEJhdEpVOGomJDp8cW9ZU2MpNVIy''@;'; put 'put ''YW9PUTorWTJXYmQlU2RXQjZZdj8+M35xTEJeeEt3JUo/QFRuQWkhPVI5YGFwSSR6NUxQWyVYMlBsfShUWyZHemoqVTBGXXBFUCZeSFUkWjhlMGs1OF1tfWd2aHdpWHl8P11RTns0QC5eaVZXJiJlOm4wMnM+TTdpXVA3JVoqPChEQkZWJVIrZ213VTRFcVVYQnYpIVJpUkR2SkBqU2s5Rm1ZKkI3''@;'; put 'put ''cHI1JWEqQSlQKlBAemtBNCM4Yn5jVEkuc3tdPjNpdnUxSWN+YyV5L1pCeXd8SCUsVVc+KVhFfXJ0OzFYJjA2bGMve1k8YllGcWtEdVpWNHg1TioyV2hyNnYoUik+JmhycWR8eSRkfXhXTDxQYTBgYlUvT1FRPkhAUT80QVQjfHZHP3hULGsxY1RWLyFCa3pVJmhjO0V3cDBQJVFjMzBCWHxKeE9+''@;'; put 'put ''SUFOWGEvOTQxekVUSkw9MnAjVVRlWzFSQ0l3UzBzUkhsTXkqSjkjISpKQnkicXxHfFojeThXb3VJcDg1NjFBaGpRRFZUemVza3l1SUYmKVFOd2MvOkQoI35dZXwoVzNRXiEoRm97cnI6YE0weHpYV2FrWEd1XTRDL2h5WiVFW0JwJigkRlEzUS9zWTksKFZmQFI7ci5JY1N9Wkp3VlREa2dsRTdn''@;'; put 'put ''cWY1bCZVYDZzP0dIP0BXKWJnNDlZIk4qRmJeKFJOeEt6RWZ1Sk17QmFje1FyO3gsSz1hR1k4SW5DYHF5Plg3IkZaPjdiUEIhdUdURENkMTJCU3Y5NXhrPG1gVFR+VzpYMUxXOFI+ZTguT3l8RXZoImw2P1pZV0N8MD1WVXQ5ezk5dTpwaXVIS3JRZi5wSWZFb2JOSSY2e2E3dFhRfERnZUhaa2Ne''@;'; put 'put ''fDZiZ3h6NElSXzEsSmZ0PDhQZVgrMTxSXmhYNU0oQ1RlbTBtN3VydmpKIXo4LCJpdiZyWSYvfV5DKG51TjFjPzM9TytjTGJ5Xld5WClZKG9HR1RWdkQ8TWV4ViZuLHxDfUlZeklYRH5bKi5Cbl1JKS87cT11RGFUMEJBazwuUUZ5dDxiIl19eGIxLGt4USlDNDM4Tyx+Wn0wOktpM1QzeDZTY0Je''@;'; put 'put ''ZjNiblBAWV9aKVYjOjsoZ2d6TEpgOGA3cTpFLl9eODY7JFJCOlJWMjtkNVpZUntSZG9zWG5gZEsyJEdkVyN1MTN9UyF4b09UMjgjVXt8OGk4cVpadVdbYWgxP2BdUHcyQmdWSUBoQGJOPWxrL25uYCNGY0V4bDFWe1FzMzZscjp0emklTCNvRC9PKDRQSWRuXU5ubzVofWg/On4oZF4uIz5id34h''@;'; put 'put ''bH5tPUJDc2xqTnszX2QxYTFJWzdOV0A4aXpFYUJIZWVBPnhiaS5zcmN+ZVZvPiNwWDU8NEVFdmp+QE1dWmQ4ME96fWBtMmwxeiF6LEY6LlIpVD9oa3ViRjk5I3ozZiNEXnI9ej8jPStLYGJjKjwzRUU8RlopY2tdSzF8RmR5Z3EkYEEuYl83Ljw0XmAmSiQhbkRMbl14QWk6Ny5PYiZNaj9zJD1g''@;'; put 'put ''fEV5PihsKFluRzVeWT02PzpPXXtsY1EwV05iKEFYY1V2eCJ9fEouVnEoUy5lRHBLa0F9OkwrfWlSI1dsPGthXihlbiY8ajxqby90OCQpIW1LZ0ROOTt+UlQqU2FCazA6Nzs/OUV7cUI/JjFKdWZvOitDa3I+V09AIXZAWihUVDBpcWFYKitHPiZmWnNCe1FjTFlRcWd1RFVxNVFlT14oKjYxZy9E''@;'; put 'put ''TXlXIy59Xi9WQGU4TntwcV4ifUVubzZAZXorZm9IWmxWI0FvZV0vdEVDd0dbKDw3Q0V8JkQzaWx3KGJVZGxgOG58ZFA3VEFBKltzdktaeURhSGYkc3wzSTcsXUVYZTR6Z3IrWnsoeHxyWSlYQjBKQ3VdRiI/YU5mSy9XRD9HTEI3Yy5FPHZyP01QWmUlJHBJWGp0RG1MIzVxMXN3OUBGZFVHfFJb''@;'; put 'put ''T2xaai9aXV07LnM/SGlpRCI8YktJNS5+KTpzfVB4XWNGaD1maD1yWz1kcTc6Uk1BNShQOWFiJnRqWCMyO1AwYU1FPSlKKixCYHwuW1IzWkt1aUlYMVRdVGxtbGBoKyxsKn44OnpoKVhxUVNWQyNXXmIsKFEkPyh3RX4wdm5iXnBme0s/Mzd4PG8kIVo/X29MOEFTVjpiY1c2TllpN2YwbHEkQnQx''@;'; put 'put ''YWw1amAzXlQwfWlnQz9yaltpQzcvUmtyWFh2YXZtJHRTQ0IvJDw2R3JfI2ImSn59NmhiZj8kS2c3OT1MXShUYWFvZmV1ajxSRjltYkB0OVolVXMwYk9gQWdPPE9lXWVJRTtoOE4mfFFtQ3U7LDBYfD43YzMrN0YicD9JKEV8XlNWaiIyNW4/Yiw9Tzcjdi4rQixaanpJWT52UWRfPTZLU1hmS2tM''@;'; put 'put ''d2xnO0pIT1k6LEc4Q2Q9NWlSOlIsSShMTTNdWl1oRUU8NChDMGprKkhqXTlkbWdrQStOQTU4MXloQz9Hcz1Je3ZKMnExZXwmeDw2Ui8rRSJNelV3dmxGN2E2dn5yWDM1ZDlZd1pBa2twYFt6eUshV19wdlFNb0w0b1ZpI0N6RDVdVltxcFQ+VnE3V3s4WnQrTiQ1aCNPVFJyS04qajN5Rno6aVVe''@;'; put 'put ''W2Q7JjNfVHxqWj5NbHlZVVhUJio3bzVid1FzclhkS0s6a3ohX0k2XkN3OXFWU3JwdE03QkpqZG9AQ0tIInNec3l8dEM5UnpTVXpVaUcsb3A/JT1pLnFGQkojVWt8aHJ4VDI/MVgxYzI6dVVpdG44eXdVVEwqLF46cmNHTkg9LCleWSJRc3gwdChOM2shfXspPTBjMjMoemFEYzRfb1hpT1IpK3s6''@;'; put 'put ''JEZ4fCYpfTc3dUtwVTZnWm8qOjhDUlN9JjgmNSh4PEZJfT1UI1ZjKGtvb1dJc0E3YXVoe29kTU5WQ05rQ3hpNXA+LGVgeig0LF1RN2tmSCFiRns6fS47UUo8UVBuVHVIIWcqRXRkVWk+VUlOZkM6R3ohMyFNeERbVCpBPzx4aUVicVo6ZEFTSFhAZEIkPip6byt5fl9YZmM4KzZaSVYoLC8vUFBp''@;'; put 'put ''KEdgRnopSCllR15RUWtMJDJ0RiFMZU12Xm04QWZANU17Izs8InYxMlciRGBMcl5dZjYuNEh7JUUlfi91b0VGJk9icS9ETz41TUE6KWIzO0wvIntPTV5+dDY2aC5nZ0kleFMsTDp5aCJldkh6dFklPVgrYVFeUU1RU055ZDNUa0olaFNEM1IpTjUrY0leJF1fO2xnYkd0LmAhSzxKNk5qJC9hQmIr''@;'; put 'put ''JT1LZlN7bjFASWFfZ3d8XlFaR2t3KFd6aVNCSks2alYmckpuIjY8eFRRcDAqYmdxdXIxfD03OUAiP0tTPXlFb3VNNysuQDZJe2FAaXl5Qyt0X0puYTpgfipNNSR1ZXFgQ2U7WkVScEVVcSYyNUtwLk0yblQ2JnFQbG82fUgweWtzZnpxWWA+Y2dVNmU1UDtjaURqJVI2dCVNcis8T1MlYzRPeUlE''@;'; put 'put ''aW9VRXVfVD9MJX4+MkVUKkt6a0ledCFHZWl7RTtpfUNXR0shNX4uZ0QpQHNAb2VvWCojaCJ2d15hJis2U20hSko8RldFaGxCPF9bTC59MGAzfShrWUAvZUAmS2AycXBTZiQ/X2N0byQ1RyYrV3dwbnozTi9AeXBRR1o4TFZvMUUrQzd6KWk8MEgxND9VPSFaUURIcT5PXWQ1UXEvKSRSe3gsITNJ''@;'; put 'put ''TjdtQ2IvNlIhRkVEdjA9WSxfaVBOZHNkWElJQWl1OzNfNSZ1TSJBXkFSRzN0JikkSSR5aEJ6RyIuYE0sLjE+R1p2Ukk2elVtZF0ma1cufFV0eXg4ZGs0TnxTQGZaW3RqOCwhV3spVVl6Q1c0QiNkdllxX3hXbHk5O18yUiNnZjhqQyloWVp+KkdWSWk7bWV9fWw9XjQ+K0Z9IzNmUjYwZ3kyZzxi''@;'; put 'put ''L0U+NURiKWlBUSFReTg+OkhZdiI7fDlKTVA3YlhNVVg5fGp6VyFbR1tpLCFob0pnIS5PLGljfWo2eUc8Y2IjRm9ESjpQNlA3IUY8KixUeDNiaEYsdUdhdnV4WmNOPzUlcUpbOnBZKE1hNiY4fEB7bFpbYHdUbVlEWi9sKV4hKzFudy5aSzIzOTRaRm1BczM7OnA0bjJRJSsxPSg1Zj1DJDcqUFFd''@;'; put 'put ''ITFHUUxzb0Upbn5EQDZZJUBva3IsPFEkJVNhdHEmS2I6TGVgRn45XTJHZiVuZktHVXpiN10ycXAuW14/TU43SmZeK0slKzQwJkppYVsxSyJqaCg9aW5dfi4wc3Vwb09nL2UyKig0LDFfRD0jUlFYQ35gU1o3O0lveFBTQjswa0k4cEVfLHxFQGE7eHQrKTtiO2xrLkRwQW1WI0VESjE+bCw8MiQp''@;'; put 'put ''dWBObygzMTp9fXN5Qn03LmohMnlbeSk0TkhEQl4zSmQqTHB6Om9TJUA7VDpScWp4MHVVPiVvKyRsQE9heHluJDp0dyhuLipHXjQ6V3tSMCtFPEFSe1VgR2hkPHAqX0daIWxYU3ZfKSkoOCkpUEl5ZVAkYz9mciNYPGF2TmFJOls1cT1KT117dytrYGAhRzZpPDE6NjEpVkM1PX5HfEQ+ND8/ZlJL''@;'; put 'put ''KldWN2ddP2F5NE1gUnJzNkZ1RnYyS01GS1doYkBENEZFW0NUIS4pXl4/JEIxWDNAT25FI089SEE2QWwlSkxFVX5Xcj1SMXViJE9kaGpDZ2wrKHNoWjs6UE9+M1dVdSRDVDZnL2BQWyhYU2hOUiZxdWIpcmIsQHVnTGtkLEM6I0FgS2NmLD8jX2M5NzIqZ1godHw+JF5GSiw4IlVUey4sUGcsYTRj''@;'; put 'put ''dEYvNDRYJDlVUSgwRXsvS3gvTGdZanE6cV1xLmBbTCM1UjI9SFp8L3Z4VD9QMG9lKG0vTCUiSylRWEBIaFhbeH1uVm1nbH03RGFJa0JAJitCXUlCSDBaN018V1BtSm00X0BFP302KiNobj4sOjlLKmkzLChmWG5kP2JkIipjMldmVGpEdEQ8Tn1FWjcmSmw5QEZyaF18KDhkPC52M2h0aTtYTTFJ''@;'; put 'put ''aT8wbTg2ZW1lUngoXVNoIjZYfnExM35MVCVxOjdJMXxRbHVGWSZaL0I9SmQle3V5NUovJCFWW1Q9N1dhQFg5bEJEJSldcitXTUR+IzY8WTpOanV2SSt8Ul9SMntbbn5kQ25HJS53fChzIzcvVkhnIUV9djNqXWtSQDx8a0Nxal9LVjJ3VTYkRy4rSndRfkMybCtLZHpFa156anVjcXcxSko/PzdZ''@;'; put 'put ''eG54a1AzSkZfYVF7eWIzaSElR3ZAVzBXJi8sdT1IMH48Rlc8PldVWX5LdHpvLDB5S1MkNSF0PzlZSV8yIzUyIi9WL2dSJGtkV11jejlDciQqSyR+KTk3OEV0VW46cHMoQW8vRCU2clAlc3wpVEJXO2FzdUgpPCNrS3VNKUtfNio4aU96QGxieXlbNTE5al5rfklPdE8hUUVRN1k+YT8kPElmLD0m''@;'; put 'put ''TSUlfU5PNSMyOEJxZEJ2PFBFdEFGe11jdV1NQ1hvcDY6OmUrLjdUfnpCO0BVVWpKXl9UTzhseG46TyJGPnk1Qlc+d2pAejJXPU0uXkxqOGcrRCVkdGI7NmohKnVMbllxbTteOVlkaHB9UmxiVkMuRGV1PiR6fTtDdVlaa1tuKmNLPH1+R006az4vbHZkQGA5V2pAMHwiMlo4NmRlMWpaakUmQVlZ''@;'; put 'put ''Tl0wTUdRcSE8Lmp0U2I2NnpCQ1MzMV8ocT5UKFdeOG1yRTYlTjVTUVBpZyl3d1NIKjRUUWFyNjdaUVhtTXVpISYubyQ8YnUhTjFaVXFiZC4xXktYMmVgXVN7VGJRXV5XKCx8U29IfVVyOD0sQU1zOlpOVnBWOlQldFlyd2JbZ3NkPDptX2F7PHlYV1QlUm9gTkwlIWZKdDVrbTF6RWNPeCt1NF0r''@;'; put 'put ''dXpDc1d+U0thVCxKXmU0NWFlYzRMJXA8YnE+ZE5wcTp7UHVjZCJzY3t+fk41YmZDNkNrQlZ8bykkMjYyaTd4TSopdEF9bzYqR0x4WEhNKlN9L0J9U3QpLy5kcnF7cSglSWxUUnlVNkNfUUJOXjx6PkVdZ2U5fGNPRSkhYCgueURJXmslX0g3X2NVV258cWlpZ3BWIlIsNnkqQigjaVZ6fFRyPXpW''@;'; put 'put ''OExaZzB9T3JvaHEiZU8vdDs2cyJ1YGdwZH0hTUkuUU9wYktMcFcpYVFDWnl+UCExQVFbbGxpQmRfVnA4YzlfdiQlSEdgWHdHO3l3cS5lS0FFSUxhbVpRd2RfW1I0Z3VxITU2QDN1JT5GZ3IucEhFVXp4QEZDaDQheG5JUGloWWQ/TyJfNUI/TVkkJGZuO2luRTBBam8oK3E6WmJBRWFObG1NXlJw''@;'; put 'put ''fU1gVyI8T1RDXkNqL2J6ZV10Qm8pMFRYfXpzUW1VeH0hIi4zPmU2dm1aQT9uZWk1SSFEUCx7NS4uIis1N2VQIUM+ZTxhbk8hSns6MFE9Ji8wUXI4aVZ4P3x4T11yaDlefTNgbng+XisweDRKPDMhTklMdlVeN3VeOEQ/UGg+NHpRUXlDMyU5eFtCaGhTOFFCOlNHNUMiMnhCVkRwOWlDLjdKXW8s''@;'; put 'put ''cyFddT47IzpfNE1TO2w3XyxLQnZVNjdpZyUuejloTEA9TnpQd0Q2aHY5T0czSUxxY0pkXUpgM3szVkprYVF8ZEVVUWc+TjBOem96Uk5SIV1CMD51LHteYnNrbnx3MUgjKndzUUFBPG1vIn1jIWciM0cofD8hVWVbenpjT31qcG5jYWBkeT0yUEJUbGIhPEJRYnBQYS9XUHNFUUIyX3taZS9kOk0i''@;'; put 'put ''KV57V1VzNlpASjFAVT8uRTBmMEFEVVRSWi8kWmZsTyNKZ0FYdVYrdiNTS1dyZ11jQCxLZDg4cS4qeWBVLHNpS3dvaTM0Img7PldAMzxvfmV2XjVXXip0QU9ieG88RDdLZE1xXjpGczpPSkhmV290IlJycyI5NzpdcThAfjFaOitHbDcsW0hPfWxKVXMvJDhGQE9iQT82Snl9ZUZ2bFVxbEJFfW18''@;'; put 'put ''PD1PNzlhRn1FeHJLYWlOdWddSjoxdzNwPHttNDl0UHYkUkk4Qn1tYFRsKChkbDpXWXQ8UlAjPDxLO2FxLyR2NyRpPCFwNEl2UG5FVWlvVl4oYlQkWWI2PXdRIkNFS05kYzFENHw/W0FlMyMqS2FjU1UlWGhfYk5teGd3TnZfYVhFe2E2MUghNk94Xkd1bU8mdWpLdU0qZXdJYWE4TjdEPj5AP24p''@;'; put 'put ''UEZeaSE/bCZ0TTJDVCZIdXUyOT91ckksXytMLzF4TmEmTUYke3szeTYzL3NhTEFPYjRzS1pqMWRGVTxEbUNRVHBQdzxlUFJrQ043Zkx0K2xTW0pKcyx8UHhETWQ0cyYobjFie1Y8eGcmSzg4e0BkdHRZc1t5fEQxWUVSeUo2QnhvRENzT0hdWX0zVXh0R1IhOSQ/NkZSbyNeQ19UKVtPa3xfV21h''@;'; put 'put ''ZCE4TX15ezJvalhPTjUxQjVGXSRoMTl5QzlQdm9zdGorNWcsc3pJdEtJRCFeN3puN2dBOXMxNS80RzojKUVNT1E5ezdpR2dUNDooREJCe116JnIjO1gvV31yV0djMDBWOnhvcno1PVVARntYOjdRJXx2QC8idFp1Q1o7ZVckUG1eOkFxREVAOClnSklKUCooL2VCbmVZI1IrQHslXmojblkwS0Iz''@;'; put 'put ''YCs7dHE5QzVPQmJebG03KSZgcWtUKjpOL1R0SzlGRVFxZ0dQKXZGb0IlbW9fQV1zIVdAcXQ0L3lLJkJGbSk5Nk12U2xlek1IbFFIfGcyJiNHbnkwMFRVP05YdSVTbSw+eVtDZEo2e29ZWl8ybSt4L09ZXTF2XWZDb0szZjV4VGU9flcxdTd4XiNQQG5rVzp+MCx8fjc7OkZCQWJQPHhYPUtqaGAl''@;'; put 'put ''aTNRTkl4fTQ7JmMwUmopY2VtSnV3fjNMYlQoUCwvQzIhUWF5e0c+UV53QkpiIV4+PUwhSmtyKjkvV1Z4IkAiOm1dV1ByeFBKcEJiVCwsM1JtTUV6enB8WDtrb15ASTY/KXB5WS9VTGQjPn5ndlF9QnBAOy5MZjslcnN1Lk8vcWh9THpbKit4dGReTE5BNiteIlFmV0JtJDMlUUM9TjBbVWlVTTUm''@;'; put 'put ''cUZrOChnWShUOkp9QjZUSHYqZlNQZGhJMUt8RlJZbUpZK3FlIk87cHVKWiR5VWZVL3dNTks4Kzd6ImNJdjFWWnBJRyZ5MFI/dDJOZlpjJDRWTlsvQyFsdUJ3PjwhTT8icnBEaS9fTG9Pe05pOkQ0T3ZHanpuIzE4N0M7SVczYGlDaVkpZiJsX1M0ciZGcFlVbSZ5LntVTDksMUN0fkM+KH1nZyQp''@;'; put 'put ''fUd8cWN6ezwhOkBUODt5JCtaakVoI0FgXmI+XUFdNSJsUGU/W3F4ITAobX5jRTYubzkwMUtka2IjTjNNMTVXMHJmRHBrJFAkSDtXeW96U0E+JCleX0ZSUmU+PFEzWEB9TXRtNkNtU2JWdC5IJGojOyRsKm89XzlqPVdYa1MzTGhwOyw/U31kJVFldGxvaV9fbFE3RU1bQWUzPTt5P2Y0LEE6XVF1''@;'; put 'put ''RyxkLltgZyZ1fmtjPUQqYVFnNTNjTTIhY3dsWCFeUjhnbnpgUUNRdkljfWpZIUZILHZXVDgmV2A1MEVRSndDO0hyNTJHKiFzYzJefm40ezg6elNkZnlRNm1LRzElT3pgZixzbF1bTCYjQFcybVp5XiRtaHhLa3A4S35VJGZ8STlpLmhZcXEuVWk8Z1ssPkt+cDdUMFRJRytGdmJgaEAxRjwpPmde''@;'; put 'put ''UWk4ZjxuR3tiLjtPYjticTJ9VSxFSkNuTGk+MmFKe0MyLjNtWSZkXWlkR2hOfno2TDFldnZWS0dKIXpSTzdSIyI0b15xekNDQ3omNkhJV11JOThwNVMvN0RnIV1QXm47KD5Qeio0aHR5Oi9dYDBjLCtueSYxazFwfjFnTDtrfC8qZCM1VzV7czV6TENsanYqNXZaVl9TRVtiRENzLEA+ST56UT47''@;'; put 'put ''bVExSn5bWTU+fElSOUpHcnJYfE5VY1RWZWJfPmpwTWppPyVyX0ZEM0JTVSQ5R0RGMStVTF4oLkFPc0JAZ0xlIyYuJTdaNjVlNWozL1RwXTdjQ0Q0Iz4zdixuay9YVGRFRWF0PDBHZEA4e1RqfDgsenlNT08vcDtfSzlCOTNocysoYWNpRHZRMmg2SzJ2P34hWjlmTyl0Xkp4alovSW5HIVNaYzVZ''@;'; put 'put ''PSp8bVorc3UkcHsyZGhmWDR1Mnw1NUhOIXU5KGc7JjFFOldWTzhNRldKSTU2TjMvZHk2NV5NKHg2OktCZ0xqalJZL3A8VTVyNzZXKUlgRT9EZVFKfE5JdE8xcURtRz1oPHc2NTNOUT1pKy9oQkJwaSt+VFVpQVZsPTdMfjQ1dDlUPEIlZEBIX35OIUdQb0tzPjBoWWU0V2xEZVhTOyU8PGBDMGE5''@;'; put 'put ''OksuUWJrSzM5WXhXaEwuTWZ7ZDNPRis/dVNkdmpZNytiPF1hWz8mdCpBUHsrPHldNEZwX2NKM29FbjQ9IyhJe3Znfkk0RERKYCkmM3lxbUckR1J7a0pGbSUweGd5ckJAM2NKNiJabFJNMStpI2FKZmJUPkFCbih3SjooKHx0b3VpeXs/bjBhUl8+VktFK01CL2Q9YUF0NnIwUUpEeTVOfE5ULnJ9''@;'; put 'put ''Qz5KQ01WbSosQ31oLGxfI3M/PntfeFlVcUBbOko9XlohaGg8QlNjLG53Si9WeW5ITyNja2ZCQWtbUSszfSVmKj5PT2UrdzZVVkZPMCE7PyMyU0NufiU9PWNrTH5JXVk6V3t8PiYxJlpLQk13aXtXYHYiPUBga2FnTiImL09EXkc5STlwdWd6I2VLKDtZbGluSVNGdE8yezleZzNrNmkiI3RlaEVU''@;'; put 'put ''MFM4NDQueyRHJHV4XUFUSX5xfCVoMHxOOEljRmVSdnkwayNTMHc1LjgsaW4jNkAsUXx9a10kQSM2Nm4qV1pjJUJaPGVmcSI0dExMSTt6UylBN2F9M212SigwKVIsMn4wRT9ET3M6JT1oKTt5SVRlOjp9YzZRW1klRSk8QHxHdW4zVG9sKENnWVpLcSZpTCEyWzZiTDlqLmg+YzgpbktCI3pgIT5P''@;'; put 'put ''LDlOJWpCT34sNio/UTk/d2YsVyFyQ3N7W0wqWCpqY1FqYGJ+LjRkUGkmNVFwUks4ZS5gIkJ4RiEwKzRqJU5xa31yZ1oiMC9SdiEyU3ttQC92NTM6XUYjQj1fXTV4cjpQSitRcnBvaWJWUkQmMnE9P1FWcyZHcF0odFhdcVNSeGZePlRwZm0yXn01fmI/NnlKZy5kQEZkTSVra3RBSEBHPzhqWXV8''@;'; put 'put ''W1E3K3cmQkxxYTtKPkU/aXl8Nyw9P3AoIz9rbyhjTj8mRUQxNEhoVGtfO3I2Z2BkZUU4cns8dHAmeCVod1tTLzpmcXU/O1hyN0FkQ101NiVPUE9+fEE5bHRsZnFbWjAuJH0vSjxWSi9eaDZzPVY9MkJ3Jkg/Y0I+aGtuJnUsTXdOKnA/endVdGlhKVBUWllpLF9kLiwyd18xcWFDTShyMFQ3N2Mr''@;'; put 'put ''O0g+ajlpLmM8SUZBdDQoeDwsPFRlJiUxMkY3Yj1EN35EYFlOJjBURks2JGRxN3k0c1cjYF0vJkh6UzAmMzdjfmFxS2dleDpSa1NRJT42cVBta21AUl9BLzdWM2RCSVFZeHFuOSw3Vl4rN18qJGU4O2FZJTY3SnxnKEhaTTp2PnltNVEiVVMxbCFbIygzfk51Q3RwKVd9N35oIWx+UVpjQy9Zb0VL''@;'; put 'put ''TEUhQ0I3ejNVbzlTejYrQjJBRXw3IixRQGtMKyV5V1YvWy9Ea1AsRFkkanY6JCJmdXVBJjNmZlQhJiF1MkVNS3pgKjlue3t2QHhAIzduX0J8YVB7b2RKaCVBP0gpUCpXeGF2I1tCX3NXbCQ6diVITWNWe24xfGkuTUR9NWA9OHlETDtEb2kzejNEMSswRm1PW1dVOUBbWHA3Kk4oeWZJX3xOc2Q/''@;'; put 'put ''L3RWTU5UanI8ZG8uS1R5JDZNYl9YRzx1KWghdixDMCliWHk9Z3sxSUdjMXl+dXIzU0dgcHovZUYzd3VsZzRPM35vbEovbVMwUXl3XlF1Wz5aXjl9TiszeU4qbDRdUEQ9bCxzd0FYWC5DR0Urc2ZUWl9hOkMjL3VhRDZBW28iT0RjfWZzOkRPbjQ5WiRgeGVyNmt5Z19GIXw0UGAveGN0NC9vel8+''@;'; put 'put ''UnsuVUIhYzhPaHZnN1EvPkxKemcuaER1JmJ7eHpacGkuM2RwU0k3WXoscEEqNXg/ckRKTHVRY1BHW0w+PHI6aWMpPmhCPVQ3RkkvO0pBaXVpNXRbPXooOSRlMkp6XUYvdSpJenQsO3hkYndJYEV6UHtZSXssV2lAOHFidjp0KDlqR2ZQVlNrOE5iTk84Vis8eFRRXVQ4dz1sZTcyW1NUam8qQU5W''@;'; put 'put ''fUJZTSRfZHgxeUpVfWY8O1VNXjhyXUc9aXwhUkJibiokNUtMa0t4MDQoaHx6YzpjV2lxZVlvZHt8ZVpwOlYlRV9UImQwOkouMTd7ayhsQGYzNWpIOVt4OCYlMWhUT3gsTzBRWCshdXlOS0s/JF1HbTY6PVgwJWpYK3lgQFFuXmB1RDghOS40SFVue3hCI1trOGkye0hLWGg1e0plW1tjKTRxO059''@;'; put 'put ''W0VOeUJ0cVpPWFl1fjVCQUBgTyt7LHZOOkZUa2RARSxQKHEmKWA1MlViOVdVeH1DXiJDZFBGeUlmSkIqaWdCQ1clKVJaVWAwT1E2WWV4VGhxNyM2MTtCaWtwaWp+RWRONT1ZTl1qam8zUU1lQGxwW19tTUI6bixXYUJ+dHZuU1IoZjo2a1dDUT1IZER5fCM/OncpQSJKbCw1JWlJNTdwPzZfdEZ1''@;'; put 'put ''bEU0aDJmVH4zUzYva3QzL25kKyRQQEE3ajhjVGJVeiZkN3lFdjh4Y2pHTG47bSVFU0NyPE5YNWApZVQzfndRSjlzUWd7I1F3dWlbb1Z0JSFuOlovSkZQNnJsWWpHKFVdOkRLd19BfWxANCRqflJSdkhBcTcrPz5LX0xtR1h4KFRjO1B0YWUwRDpOLlsoWntVMkpid3Z2OjZZKSU7WTAxMWlnZkR6''@;'; put 'put ''fUtqY345LFMxUD5nfEdTJnxaQkRzLzRaPGRHbGxuTjZyfkwrSU16aHMuaypmR3R0JjRLayN8S2cofF0sVyhwbyhKUV1tJltURTJkbiQ7PnJ5N3BjQngyeWZ3VXZid3VtW2NbYGtMRiFaU3lqRCUmbmxIXm48MkxySWA8dnRlWFMhfkNDS2hxLld4VWBwJHVLTWAvSmN0Uilbb2tWOm4lWywid1lD''@;'; put 'put ''I3JGI2ZoKGk8JD0iTE0/c3c0MERbVCEoIyg8NElNXiliQz9vS150TTZ7NDheSjVRe0QpUyl3byo5KnFSNGpuaXhuTkFvVjNocG5rSGl9cV1FSnJWMjRYdiY7MHxrNVtSOUB8JSlsU3U5NHYuem07aTwsYi4ya3wyfnY4clA2MFAkUzNdYFosd3hUPFZiYmYyOEl1YCg7IkFjSTJPUyxLVzRrUkVv''@;'; put 'put ''L008YmcibHt4UVFzJmtHUEdGNy8vSHElISM5blB1ZyRdPSNMI1Z7MjF4a3ZtV3NgRk1JcWcveVhLbG5yOTE+NDVjOkpeVy5zMyQlbUBQI2tfSHN8e31bc200QGVORV9GMn1yUmBVXikoLiEyOlAmemZGdkFjQnw0MzxbX1hPODBYbloyX2Z5X0xVdHJBXSlRViZrKVZCOjNJfWZkL3ckSS8hN2VI''@;'; put 'put ''TUl3ViNJW3N2JXVAVioycktkI0lkK3YyR1lyY19uTTYrST08Ny9WVWBGUDhlaV9AIVIiPmBkQzY8ZndjfnprYV5beWcsLypRb1U1TGdNeiNmdCQ3clhCeGFpX0Y3KExvd2tHcTR4I2pwVmBYbCFIfiNpbC5UTmhjQGxbY2s1aHFdcnZ+ITc/Z2gmYiV0ZV4qK2V3PStdJDlwInhObzZYPEU2ZFNE''@;'; put 'put ''fCVWXiRZWm0qLH1GX1I7KnpGYmUxdUZzenJxaUtbZH5IcVljZUs9KH05Wk18c1FgVENUPS9YN1I/Zn4/W018SU0uTUM0MUReTlZfPTEkb3F6NUN0e191JkI4b2Z1T19+P257N3ovamNrSUo6SHB3clBvTUJjXiM3YT1KTHYkcmI2fjc3cTwkQm5fXyhydzUmfDRYV0M2MSYsUndBLEE7S2ROI2sw''@;'; put 'put ''S3lqVkosTikucSJgeFlYajAsIiI+fWdFXUVxX15DUC9QVU1vUS5ZUzw1c2JlL14mKHkhKjBRRFh9Sjt1US9wJGdCWWU4Zmg0T34zdHthVyRqSH5WTFRtaV9QW21HKDFdRGhMez5AbGo6IS5bXk1ndFtyW1Q1YVllOEtFXmQmYFsoOjJGQDtbfnoldnhQNmpYO11jeTArKD88dmdjcDFkO3FnX3E5''@;'; put 'put ''c2Bkb31KMXplNylQOnFuUWg/QHxOLHF5YS5NPUxSe10uayI/N1Z7VCU6eWQ7MWdAVVZpbStxOj97eCFZbi9iYl1pSyY5XWI0WFtRLGFHMERkMFk/Km4yU0ByPkhrIkF2eFVLKmloeHpEUCwoNl5hNGZ6SmlNSCkhb3B+JnVnSWZ1Wm9KTlhhcGo+LnlYMDVaNG9DYnpvaDRFdUJEfnNkeWxsMHdE''@;'; put 'put ''eHFCczgmRHo1N31sZGNNSHhbU0JFaSsmeWk9VW50YzhMXzUxRVYmb3ZGdHU5US8hM0Q1LnAmTkMrfEw1MSlSKix+LnpVanw/UjRfYFZwWmt7bDJWZV1PQkgwfD9HSz5ib3Y8S1kqZyosTTtoK01Xbi8xTm1gfH4se2VOLiIqV2liJXYka08kW2VYeV1AWj5DNixYfmd+b2xHIVtMUCg4Jng1MjM0''@;'; put 'put ''N2tlUDF9eGIhYXhndHsvO24yJVR+XUBGPCZxbXBbXnRwIl5VcFdGdXZKVXpTUjxWcFZ5KiZeJlZSLCo5Y35oeTEiaTt3dCozO0x9MXtgXks5OENIVEplTkJARDpCX31YQ1opdXZHW1YwLFUqe3hpX2BLKmooWEp5U2liXip4OnNpSm5KOXFgYHA6W21lSEt1aT0zQ2dXOmRiWFFLME0vXkZseWQh''@;'; put 'put ''SkpEWSYuSDdYKSJVO1AhYkExOmhZYFE1NzFmTXNbZEg1LE9HZVk4OGMjTzBkS1tPXTgiImxweSZhZSJvWl5SKyYyQ09ve1J2TXtmWXUhOCQpNWNFKEJEJjxuVjckKnpZZW9SKFkwMUtuUy5vMmhUYCNdbiYuRC5DcH5vSmZLUUJPWCNjMn52dHdKaXJlMlhUTDt5VGl6bH1tVk1VL3VwaGE8PFg8''@;'; put 'put ''R2IqVlQhM0lgMllgbTRxKGRSLEVZQzx0SFghO2VgQ3ZsMGx0RUEjbCxubFQ7L0wiTiNyQjslc0h7NSoxfkVSaj9ReyZGa1tkYU4rdUdoLzhiKU1nO24xaTh0aXNzRiYrJVgvOVt4P1RMMSwqW0ljOk5iUmxuOkwjWkxhXT88IWw7WkRVSEhne1FoTT4wN0oiZXB7KlI5ZD05dDJJZ11pZj5+WSEx''@;'; put 'put ''NXNeW0kmNj1wNGVMXipvPXwyfkAqYVBYLkowKUZsbiooWDFrTmw3ZT9XT2orcCwpMWk2Zmx9RUM/dEtSbVtNJk1xKlF1O2taJEUibnp7bEVmYHFgaX01LEFVSnVRSVQvQ099OmtPSlA8VSNIZiUqZjs2W29rcSZ8ZU4vUnIsPypnTF1te3BZOSgwcH14U05gWFVFSXBpfDgrVUR8YTpFPzk2aEBp''@;'; put 'put ''WGdfXjtCPnU5KlomKGQ2ckRxTSYiUF9RSkZ7YVI/ZUY/U1FnJnBkJGZlKjIpcV1uT1JhSjIwe0c2SWklYEomP3U9KmljVGljKzBYaFhURURQOnV3WyNRUTVoKD9OVXhtRSNMbDFQYHJlSTtfaVM+STNkL3cuJSh0TVVqYG5bUiQzZlVHMzAmaXFaWG8oRiojR3Fidi9BPDpzZWE0YjA9Y2V7SSJU''@;'; put 'put ''Wnx4Pi9xP35pL2god3RseCJwRy5fbSlvdkohUzEwNmpCXzkoc35vPjFPa0ltbER2NU5vfVEvdmJjNy4qVWxuaXVGKW9iPyFFIzlpdVhOIzkmUnNUbU5tLE0oTisqeTE4dF1NcUNnYiUpQ3FDdyslaHgqJWlFO0d6JEJzTDlyQDtzQC9LbkpgSnJBZn5AXmhqNSN1KWZIaXR5RHEwXjFvc1pkfWBy''@;'; put 'put ''YTglSW4uPTFlOjZHNUk8fko2ISh+TmcqSD0zdF5eeXRUPyMyaDJSdHhtflNhSVEqX1ZRal8wI0ghe24sQGBVNnQwQU50ZEQjTFtfQjklRUxOfVhzLzByYltuSkhjflZwSkVYSD1veyVnZkxjKz9VeGNCZ1RrTz4keGNmVGN2ZSZUYipRJHhIZ0BfOVJPcX0oaC44PlZAV0AvQnM8YDgkRVBLMipS''@;'; put 'put ''LkhwJG92XSw7MXx0Mz1+VXZ9Yk9BXT5RWz9gY0I3IXU1dCpkZmsmciZzWlYpTV9vQ0AzeENwT2NWRy5Kd083eW9zLE5GdV9sZS8kST1kKW5kIXk5NCptYWk1fUMpTEUxa2lzTmF+amkzfSVvP2Y3WWwlMypGdGQqM1BYcXJgJjA3Zj8pa0Q5fl9vSGA5UWM5ZTUiYnRhND55e1R0bk9FRUJkRz1y''@;'; put 'put ''WXBOIX4/R0lmKUQ/NyxdV2Vwbz0mRkJiSSI9Wz01OytPYFJFUkFZYyxXcUMkO2lGSXkqZ2BqO3AqKHZBKWtQSWxJYzhhczx7MS5JIkhIRTd2c1lrO2VqMXQqPSsyYWdIOyVTTzI7OyY7KyMkYTksWjksUyw4QU1GZS5kPl45fmUucyspOVVSUD5Wb0d+ZEV6UWw2QE1zfWpHcWlHMWk0fE8pYF59''@;'; put 'put ''fTk2PyZvUW87L193ZDIvT0kic2Q2cV0sS2IkOTh0QyFxbS5hcFpjfkslQiYzXm5TIVlhcShFK2dVYytGQS48VWdBPkkiTiJlVnQibl06U0V3biZuayo7R01IYnA9aDg4WiwmNmVHISV7SnxFMGp7TGVCdmlocD1ZaiVuPyFzJkc6Xn0hMkVBI2kwdDkuMSsxTCRtQGAjbzk5c1JIWW5lUyEiQ2Na''@;'; put 'put ''THd1aiEiOihVVFhEekFqfDg5bkk1fTooTzN0YEY3WDd8SkJdTCxad2Q1W1NQdVY6NUJFfmFTMW9CaHBsYzkyXn5vKlFZbHtiTS5tdXlyYXZIPVRJfTAlSEc/YGw0TXtFYUFuRE5LSFBuMTIrbi5tO1syeVM+b2phNjZSU2ZnTDo9JXNpP1hdajZ4UFdPVTVPVDF6JS9nRSNOKU4ie3V7U01gVEVI''@;'; put 'put ''Rl44SUs8OWQrPjJeKyt3amMoKDdLL3srISFTViE6eWo0MTh6WDNlS0VGQ3c/VXNbak1vVTY0VWBCQ0VtJH5DYS54MW9ZaXteWSVxUW5dZUVJPHxzZXJMSSFLW1VZQXVAI0RTZHs5XmVhSld9YCZaZHYxTEQxKnt3Vn1RaDdDbyEoLHBXb2BxTCx4PzxpWVlWem5aYXZZaE5qK15VbjpGO2lVR05D''@;'; put 'put ''Jk4oUmZIXm9ZMU9JR3xGYSJuaVFWd1ZFY11INm5hamteYFV3U1pvOG0mflomM0BnYHV3KzpWVFZXPFE1Q0pOUHxIV2EzV0QuYWpgPUVYMEohKGwzOlZ3KS9sVV4jKVsmSSUoKSVkRFdzKWBLdzchbVp5V1kqTk5NUkB3M29Maio+LjhVKXR+QGpfM1g1akVfcXMkc29CTz54dnJ0ZWlldFQkUjwv''@;'; put 'put ''clFWMXI0Vmc6PH51KFdmVWElTC4mfFoqTnA+SWchXyVMZ0pVamRlM0Y4YWJ1d1ZPTyVyUXMzek57VD1oel90KzBoJDdwRGhUIUhIelA8JEEzLEE7XlBtfGIkL0RyRStHP0QsRjtpfW1ieGBLcXldanAyLmp7bENaUzV5QX4/XmRxWyt6XVUwa1cvWEhIcWdpKTYqUVF3KDphfVo3RWByNERqVSUy''@;'; put 'put ''NV4udVF8Tj5pLklte0IyS1NgWGFAYl56ZVhLTj0jXVtVXyNOLy5QV15IaG9mfSVNO0Q1fGZqfXc0W3MmOVZUd197MnVdSUVgZy8qUGosKHNzdmNNSXBsSj5AYUZGYSxUS31ST35nZ210ekdEU0Q7I2NrbHgxbHopIzBedTBwTC9bZWFnYmJIKiFgLnZQIWh4XVRMRHxtJHA+VGUiODBDWmNldmI9''@;'; put 'put ''eyw1LztdbVp6PkdkXSl8WFpGUnc3c3tPayM4aXJ3d1BlY3ZiSWgwVH46fHUpYkBsZXptNCFJSC8oN2QoKXw6TyZXNlAlZG4/T01UN1svdGNyciUzS1s9IT4jRzIrRktjKnBCc2dXSURoN2hOKlZLRHJ0bENDeDY7KDtrL3tGKGFIM0FCUTY0MWtHVnghaFdEXVBLYjsueFgzI2YsTGsvU0BMK3ss''@;'; put 'put ''SHFZPDgrPDtxZFpHQShzdFJvP0gmVDJ8eURTZy9ZXXNmSGo2MU9kXmcyfmdZS3R7YXNVLzZ+eS5BPFVCYzpMMTNhPngkOmtwM2E2UUVSUkE0MTlTL25OXWFMKko1OEwkUjlOeXk3fHFZTmQhYVt0NCNsUCVUT2siNDlkNTtwWTFFciVdKnw3cEgxLGt+eFlCSy5LeFB0bnYqc3BiRUVJVDU7VEgy''@;'; put 'put ''XzdIIXZ3aDViMF1lR2lqSDEsIyM/MTdVQSgjTH1TXTU2dTB7YSRAaXE5InY0RyQsdGAyPUsxIU1lTEpwU05OPXtgOlpbeGhlcHtzK09ETXQ/KCFpSTthLFljMUF0Vm1ZeUhka3NCeVg2WE9GR0pWayp3O0pEVDNIJU1jTmZfVVhwZnJgXnklcDguJGY8QGtyamJTX1gkeEdKKjR1UWB0ZDNqVj1M''@;'; put 'put ''cUBtT1JkR3RoP19nSCpZSjpSNHIiMmYlbjExV1pneHxfNFQqZ1FaMEBfQntTdU5vNWpKXktSYigxcWMjcTd0Rnc6blhxUFdPfk1tRSZvYWp6MVg2a0suMHEsMSUlMzN7anl2OHkzUVopdC5HdGozK246NCJndEFobkQoMCxpUWNObDFBbCxZMTE+QCtkZSFwT0JufDFaOHQ2Km9YInohI2JUST4x''@;'; put 'put ''KWBAJT1afilJJVZiaVd7Yy5qSihXYjQwRWE4X2EsTigwKntGWXNqXzJTOEM+USZJfWNfXkBeTmJGXW5DTy4lTFg/NVNJUSl7eEw2OzAsaFl8bHBsQ29TNnE+JXNOLjlzKT17LmI8JXZIUmpKbGZCZ1N5K3xOcGZpMmk6R0d8ZCZHMSguKUkoazZeI2AuRElAPm43UEtrPGBlI0BDKDxJSlhUImdh''@;'; put 'put ''M19IKUBwOXprWlFMP3B8PXd3aGU1ayNUQjpRTFNocFkkY3JfLDgufFokdzZuY1tsIUs2cjpwZ2pPND90RzZSaSFiK21pLFB0SWJTeUsjWF9FeTd6QTBYcztwVldtQVdje35VPmhjM35WLmZTKEQ4RCZvTigmM2xlI2hIV3VUaGhnKjNXSTUqODA/e2BWa3A5SCpYdChtVCRCPTEwNj1hWkt8eEhi''@;'; put 'put ''Q1ludFZsfEp0NkJ8czw4ZEJzYm1KcFdFLld0Z3w0Mn5zOiZ4OWdeUVZnVHRATVJIX10ha04jTGMoTSw8OWd3UyRkOytScWMoZ11DOUZYLFdtbj9uODZnfiFeUHs/Q2gra0lVV0okKVE+RkpxdGJ0SExoSUQuSypAYT9jaThOWF5HNVNDWG9gSVAhNUI8Ym8mb2J6MGoxQzpbYlFoZXxNdCxFbl1L''@;'; put 'put ''RHZxLHIxTmZTeDBlaVJ5blpsUmJzNFI9bi4zblhgSk03IjRse2ppSz5ifUx3QClbaSpbXllIJlEqe0k5ZDtWUVl+YUt5SDp1anZjP0ouKXZFT34yPHdMZUZOMXFiXUBiP3FyRF5LM0smbXJhRT9kfVk3LFQsOzB+JEo6Xz1BX04qW3srMEQ+fEM1TFM5RzRDZSVUUihwRF1qRiFCa2I9MWZVJiFN''@;'; put 'put ''a3EyMStmK3t5b2YxaHx9XnNoPiZQZ3UpSDd4VGBXdHMxTG03X0VjVy9yI0lfYUZgdyI+aEF9dDhpLHczWzpybXp8N2ReLHEkaSlifXRJQm05KDo1e3YyfE5EQkNfPVNEbCt3fHZjSE1tYileI2xwPUEuRGA8V1BqI1JTVUY9MGJhYVt0SiYyKV80YDsyc0NqTix0ZHE6S3RFdE4kM1VvbUpGdXl2''@;'; put 'put ''PEZHclBJV340bCZtRz59M25VRz97N3gqPyZHIiR7TX5wMWRzdGhwZmwlRXNmTHgva1B5cihfdS4+MEojMFF5XSZ2e2RXOHJmQWFsSj07eXB+PWtSLj47JSU2enhtWHtpUyZCaWI7SU9jP2Y5clYsV1RVMG90RXozN2UoX24rcnpMYUxUO1tdbFckNDMwLysjKSRzMTN6dUYxV0Z6Q0dlIVoqOCNu''@;'; put 'put ''KSIwal9aUiFNYzBHPTdHYi4oViwkL2lnY3M+UUBGND1bQkZeeyQrSmU6Z0koSjdlWm9kT099KiUsb1t0fGNRRlRuUC9JQG9oTU42WlZsVzBOJSUydWAlJDYyZGVYRkQvUi5BVVo0aVNmY19+YkUlMUE9bCklNFBrbHdXSiI5TUJwL0smYl5CKm45a2ZtQHBzdytEU1NZNV5xTytxUTY8dlBFK1hO''@;'; put 'put ''KkU1RGZuVTwoOF0sXkZYRzd3eSN0Ukc0ISNCRS5zPE5OISYqTmdrTSYmYU4ocE81JkgqbyMvVGNsQkZOQlZYOXd7U2pEQXVETGw7WF18MGJyb0ovcnIrVD9SN3pvWFIkMiw0SShdZXk7Snt2anc3WkgrJl5BKyEwVHc1QW1gdVd3N1B2XVtMcH1QTEw9YnI6MyltIiVjc2d5Q0grK21DLjt1UGck''@;'; put 'put ''RH15WjB1aEtiOCYhYl9jUWQjVFZ0UXImVnlBOHMqXmR3Oyo2KiptZjQuMXYvZ2ApdGBDUTQsWFhFX2FRT2hTbC8xZnlUO10jZS9sRWtHJEMseSlJKns0NntxRm8oUEFuayI2ez48K05rblJeKDE+My9rVjFTZWk6WGtFcTFlKkM2TFBZdyhsREw4PXlifTRJOylmdDpoIkJtRzJPdkFtUk5EJnA6''@;'; put 'put ''RiltSURZM2hnKmgmP2Q/bjRoLmh0SWZ9RHJDSTc2WUJkInFgUUdHIktXcmtmXiR+IWdHQiZTUnhmUWFdbncvQTxWd2FRaSFXaXRZMGZPSzNKeCM4ZkNNdkVCOng3TVtLOFlmM2EkeHVKe3tbfkV2VmY3dHFBP0AkME5WYml2TVR+ckZdeng2PjBWezgoRC59dUByam5ybWJsT3R2cz5hbDQ1djJT''@;'; put 'put ''TkNqUW1SZGZhd2RkbmJ+PCpxJH4hLm1ucytZY3peUS9eP1VGeFcvPVZ2dU8/dG1pT0JoY0gsd2g9OEleYkJ2L3g/fHE9fj1PdHVgPmZOZ1k+PmFfdzNhYHd0YS54OEBkKT9XT3IoTFIqI18lRXxmQXptPSxXRF5MbkI4KT99M0x4X0x2WVVrMiJvfitXUUJeL3BGOi4kOjlMQzF8RU45THtRQiNe''@;'; put 'put ''bkdweExzYyEpTWlnNUJiUGdHNTR2LCx4RWh2VF9eaEg2ZkhRdjZ7NEU3cUVwTHVxWjdwWTZaMkhfKlVmQTVtTXM9MG99K0xTdDNbOkApUy4pdUVnPCR3YzsoUF9VbEZaeHYmX19fSHQ7U0gzXzNdNkNRKF5ScCQpJn06MHp0QXw/OnIkKl19RCEiSDpCKTVTNl4sInFQVX57ITFJdElvRzRTI1pR''@;'; put 'put ''eyg5MGlFfTNvQUZFKDUwOkJ7ZiVQVitWeF4uISgsSVYhV2RwP355Y0sqY2c+LkhqbX51SCEvMkRfciUoJHAjME8lfltWLnhJcl1nWDdlL2Y6XlpDfml2Zz1ZL1AmRkVod0NDKlA4a1VhO2g9MTV7eU1FcDFWRU5EUFRUSD8/PUN+VFdjelpQNXwoWHAoS14/NnhzVnxSSiZVaVB0W0REVy5NVztd''@;'; put 'put ''aX14fWJ6JS50UXFXVncjaVZLP0crSzdlP3ZLYjc3OGY9VzhLNGB8QDsxaU0qJE0oa1VpYHp+X0VYNS5oYVcuez8hLGJHOihNWHhlWyhPIl1EQ0IzZmMhaC9AQFdaTko3WVUyPFtaMi5BXUMvNnRAM2RhO3UrdEppNnxQZyZ2SHRaKyhrMEpNKFBhQy4xd105bzRoQSR3fiUwWSNkfVAlUWVwSjVf''@;'; put 'put ''cVJGT1BzIXBVK3haOTY+TjU7Imp6aG4zRGZCfX1fSF4yVWQ8X0RwSiJAb3cra3VdSXkzdyNHIyVEejwhYyEsdXpfZDRrJi8kMVs3RFV+Xmxqfn18JVlIeldvb1tlQ1h5ZUx1UnpdaVt9M2tTIWk6ZTMyeC5GOXAwO01CPFcufkFGe05xeEJlRUpxU2YhdzVXV2l5b0dxMiYqT0JQUCgmN3AjfU4z''@;'; put 'put ''NC9PS0hETXw5VV18aiFqcCZ7ITVwdUJdI257e3VNQXZFWy5pI0UucEJDMD9SaCtxW1VrbT1rTTk4Y1kzIVZsZ2BbamRaLlAhfEV9eV9VaEgqKFhPViJ2P3RfRWdvX0Iib2xZOStMe0NrXm99fXswSWddYSIyNkI2VSssJCk/IUc+Y3kwZXFEaVdNR1lHNDc4UXtsVUg7KSldNytpXXw8Imw/KEdd''@;'; put 'put ''VC80N0hXQHVLTWVgK3k4e3ByRjMkfCo6bzpbNDRaMDhsTUVwbEMubz54NmREMjlVby9uKWB9RzlTIyNma29zZkRKImc+TDQlTkI+PVZiUT16NjFsUzUiTWJ6RHVxVFMrdXtUWzkmXjpHYDFCPmh1fEp3PklLSnYhN1dwbUtWaEJYVCZGYCJUdWNJVXRAdlNtaFA9UitlXlt8cHJ7TzBHOWV3Sm5i''@;'; put 'put ''OHpQQHAiMTUycT5uM0csVn4yWW5oNlE5MmFXb1pIdCJ5d208ND0yNSE6M3gxckR8RE1saEpCeSVRUF42WiQ5X1ojP0suS3l9RFY+UXRNZmwyKFtIdk5xaCN6MnFYPD11MnlUfmtrfXl2fTx0XUl6TW05c2ZFMnpeYmBNSyhMdyFkJT0sNTFORlpOVkhQLkEhVyx4TiJ+WWdKJmBnfjMudW9Kc0h9''@;'; put 'put ''Kmk8P2hCTz9rKVMoRVhGKyk2M1dGUiZ9QVMqKGxBQHd+Ind+MmJRO1JHaCUicCVhQ250Pk9qVSNHP3xnU2tXaHw8UW9DeEsxMkdoNyRGU1pCXyh1LChnO05tPiJienlfWlUqP3wmOGp0LzRhUGRAK15GdXciQzhUMSlkJnNpKVsqd1Mld1BTLjRAKytMWEolRiheZyZ7U1U7UGpjPGteVXokVlRh''@;'; put 'put ''UG1PNEEheXw3M3Y2S3hjcXs+SEA+SU1FRkZHN0luNkZPOUJsKTkhV1gvcTtYWypRUDVxKUZfUzdQVyUoNjl4azhufUIsYiQzdllvUlooTGVZdEE2bz0/dUMoRUhYNkVOOnElYTp3S2siNDhmOSFMRF5NUSk9c09FaUhuJW98OTx0O2tOWWRVdk1efXNGLmF+Ryk0b0U/Kk9LXSV1OzRJNzhHcnM5''@;'; put 'put ''PEYmM053PjZIR1lrZGBIQ2JKNntvTXZMIUlCcW9nelZQWUVaUSIhflBkOC9AWVZQJjlabWcySn1dekR7ajZyVntULGNGdT1IR017ZV5ZTTlbcigpVFo9MTRyJFRyeiVsIVhLaUckRzcjIy55eCE+dHRZbTUyRiZXOFVddnt+KWV8e3peQ2g/PDxUcTEwciVHSlhfMG5KM0QrUDl7ams9IXhodVsi''@;'; put 'put ''SXNadHVGSmd7RXZ9fTFwL1dPelRSd1QoKVQlXUNOM2BKVEVaNENDRixpdXhEcjI/SHN3MSZbJll7aUR+I11fNmxBa0hjXiV+Wj0sfUheTEJxX2Y7cHpTLE1FTHMlJiMrS187fXQvNiMuZXJfZl5HPmVdNlVHQiZkZk97fXhKcjU8JHxBKTZMO11dI2FFVXEvWE1PL1ZFKnlwfm0hXnNfLEhfPWJU''@;'; put 'put ''RXJRZ3R2S20yNTdNcGpjWjdUaCZqSUZwcG5wWnJiKD9RIXA/YXJbbihXQnJPSy5AZXd4VDdiNmtzUHduRlohUTsjLGolfSJmU0ViTHMufk91I3E5I2lRMkFdQCwzIjc+Uy8ydVVKZ2NNOn1+T0dhWHsuQHg8Jkt3UE9KYGBafSRgJSZwZnlFNHdKNC4hN3ZiL0t4PCpVVnImRWRlL0hvKUckOyZE''@;'; put 'put ''Rl8yI2hUci9oI1NdUiQ4SV46Sm88PmcpcGomNlE1PE1AYUBlZTJ1SHtSVGkzI2UmZjsqZGh4Z0UlMy5dVXc+cTM+I2RrX11pVDRiK1lEUjJpXyx7O1k5TGxkYSFhMU03SF87ISM/VjQ1PG1fN1lYS3lOfkxGTFRbP2VXUURaKXh6SCVAR0NlJUYzOEZgKExnfTpbcGs3SDAqe09XIWVRaVlCSk1T''@;'; put 'put ''czRXWnlKTnFuenQxQH59dj53bkBTSi89ZjJ9JWA6fHYlXTV3K3BTQGZMRUt3MjpkelZGP30kRyM2ZmI8Q2F7YUJ+OHp8XT1AW2E1Xk05anZ2PUsxYWNKa0RER2pkPj0qKTx+U1F+N0J9anJWTkVbQkVFU3Epczs8WmBULllGKEAuNnI/WE9jSTwoaGgobnZSSi5AZU9PPVBJSHwoaHlrVnIqUzom''@;'; put 'put ''aUFHWmE7anNkI3BRPC5pKSxTbjNmWCxRdzdNKzBPRGdQIzM+R3wjNyh+VGZMYFlmWmlvRmRIYUJOciMqdDwjdFZdJT40aXxpQGJMeS9ScT4wSFlsOVFbQT1qOWkuJEBiZEF+RzVyXnRwUihCY203OHZJPDBaeV49WCNmVVBSPWk9ZiR6aXVlPFpteFMuKFpHMD47Z01FTnJuSjBBeUhbXix6SFA3''@;'; put 'put ''Jj5ySVslPSJrRndaa1JiZXI6WW19JURKfkFwIy96OyMia081U09acTs4IUcwVDJkNVJ5YUZuPX44UnsuMltgNXY0Lk1DRH1vUHQyWDNIW0hxbnRdOlY7YDAreHlBZnYlR2FoRVRjbEAhcEZ8VG1mPExHbCRuIX1eKmk5anlOR2I9VFp0b11GemBwbC4kNll1aXtwaSRWfVIvWltwcWJDZytWVmJ0''@;'; put 'put ''O28oQXo2NyI0UVQpPkwkZihSdzIwJDNUdHIpa2lGQGx7Y1lEV0U4RjZoQEJeUjV9Wk50PEYiODs4UkRLW2Y7YGpMTHo1Qy53R1pgYj5eVEdtbTdrcVd+dXh3YUR4Vyt5Q3xHJU0mZTxdcFUmQkRCaXx8Zj9GfHYqQDZkQ0B+TC4lem5QbC5UNVVbMWwlM1MqZHdmd1E5VXBITjdeL15ARSoxUmlK''@;'; put 'put ''PXAhaD49REkoTHVyNSJzIWlsYSJXZFo2ZmUrU0lkdSN2anBGQzFjemtlaXVrXnRKN2FVKUFuXU5kUzNiUCQ/YmR9TlFdeWNVYzZzTkQ0UVhEPD5yMSF7WTo5dyRweCVLYWZKPz1fbmguK1ZbKnRVcihmKylPNHtFPEFuMU5bVzl6cVJzYGpTTjVpNE4lY2QxKyQ6fmxwNCsiRFJ5WTRWKGc+dn01''@;'; put 'put ''TTZeNys4OjBjOStjSHArfHJ0e3smJl1VMixgLEE0aCVqbCJqKF1oX0BiTG11YzpMPHMvJnN2SGBROG4lRUQ1a2NnfS5YanhLYkpmJj1JRUJlakRFP300ez9SQkpldWs1Xk0wOmV9akkyVXgyWTcsVjFvIW1WI35gfigpYUNefll7V0IrQHxqdEVyZi9WOmI4MVV+WFNzc2s2KD1xUTppbnNrUUx3''@;'; put 'put ''ZDdWTCkqN2Y9I3pHIz50T2c6cn5zcjY4KG5gLjpVIlNZIz1JM1JpemcwNE57MGp2Kj41Rl1LME8+Rk15bm0uIV8hcyh6RCl3SVRgfj9CcFNPTHwzMnF0Xz4xTWM2bjdAQTdQemgoTEtVTEopXjdMVldjdENyW1NYIUhFMG4pbUlDW3UxVENGbV1wN31jI3F6KGxgdyxSWWNuW1NNIm09WGdTQHpa''@;'; put 'put ''TnNVWTBRckFJKj5JWFFoLnxKQ2ZwTiNMbCJLQlJfbmhwSjw7OWpAUSo9XTp8RU1fdWFRPCxtQllOLFAuQn1tYj44eklvSHVYM2whNXUoRlM/Uns8RXxjTi5TYEopVlhkOWBBJDxOK0pTQSVBeG9kcTUvVW8mZ1BLNn0pJk5NRXxmQmE2aE4wdmdVa0tiI15MVzlbME13VTlRP3tjKVE+UFNHLz0+''@;'; put 'put ''alpASkxwPTYicW8sPGFXZnFgJjBUNTF2Iz0kakVFYl1vRHxvMFNmNFdLb3dDUyxOQmsrUzBkNWtHW3V0W0s2OXkmKWNZfj9wQThFYmw1NFBVUTxeLCxbaGVHSktdSmxMcEh4XT5QZ315a1dqU3RoI1t4XVM7SHtRUlI/UGlHN20uKC5vRT8/STwyZy9LXlQ4PGw8PyZPeHQuQ2hQL2NuN0kjN31h''@;'; put 'put ''Tnt+Iy8yP0wwTF5ZUVUweC9Cb1BseEJKNXdhIllxSUh2NFpoIS5gclNdTS5fL3twYCwreHwufCsjdVF6TyQ3WXJfbX50P0l0dElUPT9NLltAOixsb0BecWBDeXhDfip3OGY4a35WO3QmZ0U5bClqJCljenpER2FgZ3pdIjwqQyF1KTN2RyFRJmtsQDhZPFdFd0R7TyRdPlJNXyRtdSFtOGk+fVJz''@;'; put 'put ''UChvbXZdbldwVnB4Y0hTcSNBbEVhcmB8PE1GOFB7bXtkVHw1QHVDSG9jbE1ocToqUkZyOClwRVUuJEFfPHBnXTEpP0csYzpUSW1AYVtsa2FGd0RQalhteyEpOiZgIyhUSGk3fUhWMD8hcE5FKHpLZiJnW1gvcmhuZUI8IUprMXRVSWIodWI9aEs1UVBAYDpnTEZ5ZkduZ0hUblZJXlpGZ0FfI3Yj''@;'; put 'put ''dkUjLzBhbyhiJWB3W0QwK2Vpc1czc3FQISZdY24hSzhUeT4uSjgmfF9XTTBXYztCcEEvYVZOKmVLcjAqa3tSTmhFVlFOIU1UNWt5aXpVUDM2OFdjL0I2a29JIyIjbm5zNEEqY2FudU4yKnR+VGw+Ri5GaSZteVp5Mzdva3VeQGUxMn5ldlVAdDYscjd8fDRxRFlLVGFvYmJmeUZTcjkmNlYwJnh9''@;'; put 'put ''L21BWDV4anp8IXFROlhDX1h2cWtaZV9YQmUqJCIpfnlQamMmU18vNjd+fTN2OFtOVE1pJSUhRyQ5L3x3JEsycTVhY2YoY1Mpc0ZKfChve2BJUzJWc152QWk9bnBOPUAvUV8+bmV9aGVkcjdMalBmb1JMYUViNnRHeURMTiltWXA0Z11keG9rRTZqOUJmQ2hDL1BfKGpVRmkuNl82dSldNSg3VHtY''@;'; put 'put ''flNTOlRuIWg5d01PY3hQM1ImTTUudktQS0A1IU1lMzlxdWlIQzc4V3VPeyMvT1RlLDNDWHkzUjAyfUJ7fT9FLGJQVWkhals1aCEzX200LislQG44KnRWSU0wRWxNXzhddjM0YVM3bl1yVGYwOksoayE3dDN9SjxLZ2pqaVMmZ2VZMmQheVlpfjxDJWpWQ2REMX0zWGlzSUEkNHV+eTk7WWZLVnpw''@;'; put 'put ''aV03SXclL3pvdTpPP0V0SVglPiwrP3cqK3ZCd0dgS3x3e2d+PGFCaXNXR0AlQj9wcFBHKG10KEdCUzRYTnh2SGtUaDooa3E2dGx6WiwzT3hOWldvVEZbPWBSLzpBdjVrMHQmZjR+NjEqeU1pcE1eRk1uMnZ4bjo7S0BpLllgXVQ1PGBqWnIjO2ksV2A0fU9mdy9sI25vWVB1M28zQ3t2U0Y+IV5W''@;'; put 'put ''dGR5Ujh9KnNrfEg1NltFMzxUUEh6ZjM+W04xI2x5cUhza05BLCZBKyJ6dEYqNGBBWnJAaF15emJvI21LaSVxVGZGKlcyT2REckRZQG51UEwsRWZjKkpbKDtYYztJbiw1XSp5djFBfGdtUDx9b3RBV01JbSM5KzYhPW1KY1Y/Qkl3OXYuYG5ScWohPD1haUFELDwkMltvVG16cEdNS319RUouPXo3''@;'; put 'put ''JTovOn56RGtSbmUkL08+LHFoPVYzdD9zO0YjWzxgQno6RTUrNyw9YV1XS2I8cjJJfmIvczJMdik0P0diMF9kLDczNG9mMDNEMF5IZ3tdXmoyQWMiaXpTRTo0WVE3IkdxcVg4SlVFQ2slUHBWX28pP1l+PntSIzNsOkppN0IwMUY2S2EsfSV3PGcrb1trRDs9MFRdPzE4JG07TTROTlFFc0BVPW0l''@;'; put 'put ''SGM2K284Il1GR3FNQWpQQkFJMlF6ISY/SkFoOmFgeCVEWzsqLHFwKThHZ1NVUmdRKkZ0eHQ0b0RpPkQrO3JkVT5ITFZIXSNdMXcyZG97Y0RId3JhLH40MGBMemNxKmp0Qi4weyIiKjY3KGMlKSIxWVpUT05AdnxRSjZmKCxOK3U1dWFIdkomRHthKkFqN3BbW2VGRC5FK1NOYjQ0W1dvVjQ/Ukpm''@;'; put 'put ''QGMsZ0JlXmF1LiYzRExeLEg4dipQY3FMYio2NGQ2XnFqVX1JS2Q/NGIyeWhzN249T0QuWy9VY1Q2UzVnYXUxTiJqPE0paC84Y11IeDZHMCl5Kl9ONHNQYytAMjFKVV0mbVVPczIxVX40T0wxUkxCOSF7dD1VamBxOShGSzRPYThATyp8SWkhKW5PalM3bGQ6fXUyNyQpTUMlaGJMNEhZaDkzPSwi''@;'; put 'put ''cGxwPmp0ZTxqeT5OfFFEQjFKLnldMUIvPX1QN3k6fXFscCRJT1F4cS8hZ3RoRUIiNkNYaWxGMnQ+O1EiW1NfSGQ5e2hFLG9gNi9gMFczYkBTZixjNEkmL2Jtc34+QGMhTll5N0YkU182SCIkUn55dVZgJmI2N2BTWVJCbl4iR21KS2chKXlITnVZSUthPUxEM0dzOlpjVj1Ibih8QGZ1Zn5QdyYl''@;'; put 'put ''MWhKSG9hMlFGdjI3Yy8lSCQsTDtmaEpNTDd5Tig4Y1dPLGxHUUVmREVySUNBW1YjelcxZCFHL2ooPnlve0FBMjYuKCNmKDcvX1RWXzF5WCNBNm0ubnFkTCo9JlE6UEZiXVldQDtydkU9KSUsSkdsKit9YXY1I2hsciI/QGBLU2RMeWsmZVJtKVVNW3V0eF9zOk8xZ0B6c0hefmpZITRpRjA/YUFd''@;'; put 'put ''Yjw8d0J7YW13WT5MTlQxTytZalp1Oy5TYV06Z1BNempFI3x8fG9MeXtEIm9mIlpTaiFfTjpsRTRpc3Yhd0pVRzBmYkNmPTFZKnBbZy5mMSJlSjpzejRSVDglZW8lT08vUjpZJm5sL09od3tjOyw2djAsX0s6VkpTP2JOMyJBRnlLbyl0IWBWQipjM2BXR3QxenN1eyk8clBIWWRLcDxNWyY8eVQq''@;'; put 'put ''Vm1XQSRvTDJ2X2d9Tnt7ezguSFhjfU9XeXY6e0x8LyhZP0ddTmQjNGNGMGRYXmouMGxIdCZhIy5kRndaVEp5PmhASTx+Qz1FfUAqdld8L194aH49eS9YfENqOFRXJXI4fl9NZF9RWyxYPlkybVBicG1BUk9UdGdhNk9NZXF4SkM2PGp5MWRwKE54V3U9bzZyXkVRRnhqPzsrTFYxJWkmYCxwUlQi''@;'; put 'put ''NllSXTpPUmFPdkpPalZ0RD1lXTFQU1k4TmFTQEp0IjxKbF5rY0hIa3s6dUFDYkU1PHtWJnN0TVVjaiRTSTkmOmNXeU9APnZWI1FBN3wiUFVDTVdjWyQ2S01acH5YZDU3R0Q2azAuJElXQFBJTS5ua2Ipbjc7X21wSElJcjZiWVh4M21GLF9SQHNWNGl0L31RTj9EbkxAa0QrUCEmYT5zfjcxaXA8''@;'; put 'put ''aWphL0RSKEhSUjpPRWRjRDkzKGM2WCZMTmcoZmJYPXYkNFo7KGlgLyFaW25gcVMyKmUrdSI7eV8jWlRXW1JjYFNtdVd1OjlDejNWOSFbVEw9aFdbT1YyVSpFcmBLQyJtVXRPcDNacVFjOGY/WXx9Xzc9QUY6WFRuMUJAUVdiYC9wUE09amA/dFk4Q1tzd0didXNaaWRCTWUzWkI5Z0pIJHY2fjw1''@;'; put 'put ''MWhvPyEwYW9UZDU4SGNpZTZQISZlNV9ucSxCRE1VRDR6UHNjQiQ0filHZG9Sa2dFPW0xTz9rWDtsV3sqdmEpWVVJN0wmOU5qPks5b0xabUEmdyN3d1tyYzlwYH10SGJtRWpdSlEvKyooZ0dSUXIud08qeHRmMilwOzNGTHJmd3ZlSipTITp4bTBMbnd5SV9BRmB5dXhgRE1+cHIjQj98eUYpWzVJ''@;'; put 'put ''Xy9uSl1CX1QodHR+SyUwdXoiYmheLHkjdmk/NGx+MiR8ZSQjaj55XmleYS9NbTRBa3IpcjZ1SGNxdTFlbUgxJk0hdVZXVU1PPTZxPlopXWh3cEEzO1hkMExnMFdlK21KTy9FRzBxXiFqfG5kPltUN1UoL1lEOlprTERCcjdla0pUKHAoP2UlKDVheXZkd18hPEI6JDV+cyQ4djNhQ21rW24qMVIq''@;'; put 'put ''fDZdOXY6cDBDZUNCJEJhLDNecV52OlYzNnJ2Iy4yfm9HfTY5IkdeRnxufTI3fkgwZz4kOTFvNTpDI0kmYm5xT1FMQ1Nnck0mLjpZcnAxWXIvLEdUUT92dDtpN2ByWVgxTXRKPTByfFk5VSRoLHxyJkxDbCRKJCxXJlcoakJ8KEt+MnR9RFYqKWJBYHE0dSE7MXg7LCxCS1siVUY6MEI2cF9VTUts''@;'; put 'put ''ZzVQZmArdjp0ZixfV2wxPmFRJmU3amY9JHBsS0VMTkkmZnJsb2hlen5ZJDlVSH4ud3JdO3w/aFJaX1B8JisyaS5SQlA5MnA9NihBPks0OnFuPGtSczh3dlNSTG5mX2M8SD07Mk9vZiY/SEdxKnpuKTZrd2w8b0w2cykxRCwhUylgT1pFfHRic1glZz51Vy4jQWB3VFQkMipNIzBSUWFgPG9+ZD5Z''@;'; put 'put ''ampmbmZ1ZWhJVzVRQ2RYWCNNKnVwLnZZYlc6MTVdOSQ8TUQrUlt9bTJ+e1ppc2VNdC9rS0FjPHQrZzIkZyNxNURre1UzRkd6a194OSJVWShleEQmN0pELE99KVRpX3RdKyZ0OSM6JEs1ejplPGE5SWJETVJyd0R6RmQ6OEd4InBHaHBpQV9pWGZJI05QYHQ4Tl9eR15vLEx+YWc7L2oxXjMvcEl7''@;'; put 'put ''ZV5ZfCpSbWo5Q2ZmfkIwM0VQNkNZZDhfXnhbMUtpPV4oe2N7NWF9aiNnaCRrQi9PWjwkOEVSIVhEbl0kaV8zfT5OO09Gb3Q3ckNvXiNWZyxoX3duTnBBdHZRJThRbTxxWEdtfDRtdURQYDU3PD1nNjchLyJWbWR5VGp0bDRqSj0+el81SFY/anZAJFhRJGpFJE83NCVnYG42Tk96Vjl1K3lVWmsv''@;'; put 'put ''V3BsKU1VWEQue18lNUhnNmc/R2UxeXRsQksoYk1ra2V8Lm91KF1fSHI/WSkxbDoldnRhdWxidUtlUGlUaUpuakYuaFY6MTpgTn1hfVcwYkR6UEBRdGFTZz1AbHUhM3w6UmJbYmZ3SkdZUCQlTCJRU2UjYzJHYEtGWE5YNkYkMEpINHheLFJudmJOcWZ2OG97YTJASXl+YEZEclBWQ3MzVUhGPitB''@;'; put 'put ''a0slbTE+dFpXSmx5I2dPfG5hYT1dODZyUjpDTUtqb2EkV1ZLL1t6VnY1fH5bTnAmZ11zM1VkIVlyfmNxNzcvT086YF5gSVt1dCJNTn1fdnZ3dVJMUVF4fXdDYylbbFUzeDVgUUZFLFR4fHlrbTpIL1JMeSNYfjw8dF1nPlI6fX07fT9kOVozTUVeWTBnMGUvJWRHfSZRJkolMj4yQmY3OC9bPCxV''@;'; put 'put ''e1guNDJVaCtOVTIuNSZMRUFPQltqZEBbIWdSdlsvZDMwa2MjeDtwU2MmU0V5Q2RQS1hiRkBiWiRfXmExS1NNUj5YWlh2ezRuKzl+Z0woX00yVjJiNTgoKl16a2dPMDYpPkpwcy4pS21BOzRLY21EU2tGNCQySm88JS9MSls1OjpxTVElKlJmInhjRzZtdzkpZnNsakBeWUspfT9fZE5OQlZnZEBS''@;'; put 'put ''bVZpN29HLkxLR1csQC9IbFNRYSpzclcvfitzTGRufHYwXyE1bnJLJk9WSj1HMi9SJT56dDVFbClfOiMral1xQDpUR2ZKWmQlYWB0TG9qVn5MKHUwNiM4NyRzZFBMQHUockwlMD1fcWFlIU1je0B1Ql5fIitNXmFqakdYa3hPJi8iXjdXTTllZmxEIkhAcX57bk5kQlh9Z315NmkrP25YODIuKiFn''@;'; put 'put ''JFhUVypqemwzVzEoc0lkTndLRmxKbk0oWnxoMipGcylzcShdaiI8YHZAXWE6TW47ZmFGaVFAWFdrRXhDbDw6Tmh2cHFqdVU9akM4QE9gPyQ3Um93emV3dytnWiJkb1FlUnM6bm1dTnZ1JS41L1hfT1EqRG0mb3UyW2QkXWgpTERsS2VEQ2o3PFlnM2BpKDV4Vlk4d199REB4T1ZqbEJITmcyX2s9''@;'; put 'put ''RkYjdCFnbGNNfEs7TTVtZ2BJTWsxezVPXz08QU5IZCErLDIoJDZkak0mcHsydmdYL1doQ2hPbWkoKFgoTXJYUUI5V2s0JCRVUCYyV0ZFa3hIImhESHZVPSxYT3c4Qlopdm9EazZvSEhjJCNYQ0BEelIiNTJ7MWQjPDU1OXRWTGlHM1RHQGFhbTdYOEhTRFIwTjlJLlhUYTciUlkkVUN9VFBnT3Fi''@;'; put 'put ''ZkpFSUY2fVc9eX1sWSI3YEo0NFBBTFJOcDJ1Q0hFNTFGPmhfZERLJmJbbHVpfTZ1eD8qJEJNX3dhKmk5Tm9zMCYpVWFzcVYzN3VYdncvZVRGK29PTUFgaSl9SyFxO292aHVPQDRrP256RzM0cU14eiQwKWZjbUkwfn1bVVszLkluLzNWSjwpakskYiUrOFFuKH5BKnxrdjUwXS9UbTFgdm17Zi8w''@;'; put 'put ''QW5EVD87PTw1U2hYbzw8NnFSTXFCVCo3OVhqcCNJXXVHJXh8ND9mRXBrREk8KGApU20oREdXOy9yRU87Jk1GMXI0RU49JUghQzY4Y1h6Tys9RzMqOFkzfWw1PHslISI6SSg8YFd8SSZiMCpoZ0I1NGpeZz01V3AvamZ1ODhzYnd9ND8jOHUsJGc1fncpRll6cGlpK1RNaGZpLm1qanNURTg+KS5M''@;'; put 'put ''cCk2cD5RRURiVDUwWHpEMmtEOHRVLGg6UFh6ZSJndUtgZW8ydWNValA7aCxoeD0mLiJuPUNibWEmQUI6cSsze2lzRkBMfTF6ITQxM3hQJUx7aCl1SjgoYyw0WmZJKkspbCt+XSNAI2YjWzA6eSwmMUA6TX5ML0Z9dDlodTY8QHo0JWhdVldUL0AwRVd4I2tQY3RrYTFUZlVVYnJvbzlScTNLfC81''@;'; put 'put ''VTZoRn5XY21QX3lSKnc5Uz42JS4qdFlyTGNofEh5aU8ydWpwZVA6NStYY202ZUtjcj8xSnVNKXUzKm94XU4zKWQpenZUcVkqR1JUVzJmOml+LHZaK3VKU08yX2o1RW1PLGQkMngxeXooel9GcHVyeSI9fXZWKWY7JE9SRkc0RyZ6ZVRRdkU3XzEiNXYiPUJrM2BlQCNXLFdwRkZpZUNJWGIyeXNM''@;'; put 'put ''U14/JGdWMGBDSz82cj5tUUkxbSsqUjhZSk4zSmVkREgmXSxaUmVSVTZsZHg3RmRMNmdveDcuMFJUOVQ9ZnNVNEJVZE8jQCZOI3BuRDYvaG56RUUxZip8VndaXU5meEk0Ojd4Vzp7UkhmeTEkc29MXys4LDk0R2A+Z3lrfFpGR0EkZTFxdip9MWA8REh3ZDgpLEAhVF51K14wTXNQcWxgT2lYfUFM''@;'; put 'put ''QCF8WnRWQm42R2Q3LipfeX1sOT1EIVRvX0wxVUpIeFBIVkBUa2M0Z1FjRTVNKUVZZnIkRT0lLzhkRCptbDlsYEImRkhiX191S2F7cnBLP3ZOXSV6eC93fnV+Jk4pYispYHBFcWFbKXN4bzJmVUtLT0csVCFuKmRaPCM5dj1QbjQzPWV7dmpTci9AMmp+OEBaXjVFXkVxfSNOYD0ifWwiOTxadUNJ''@;'; put 'put ''V21lU31bKm10MkV0RzZpIihYJn0uOHU0W3k7YyZYMVVYc2wpencvLEghcFRAQmtJbnlaU3o2QzAwNnFLVXd1KmN7ZFhPKjJEbUdwUiFoOjZYfS5GSiV0R0VvQkZhJnJXUXNnK3NYamBKQDN4M0YvUEduPW98MmNeU0kzP2xRaTw2fFpwXl8zZkc2aU9vSF9wdXVZQGc+TTZEfixQcEhmNSwrejFT''@;'; put 'put ''NlNOYT9ZJDZoZSFQUmMhI1tVWVB0KXxVZVsqWnJpJTM/YmQyNl9RW24/SkJ9SyxTeXQsVjYlXkZ3VHw2d3EmI2NpNmtpTHouSl4oOl1lMDczJiJrMyFAMGY6byQubGsja2swZj1RWnQ5UHpFV3ZhSTJgZ3gubXV5KixIKURXWCN+aFFeWXxIPFsoLlM2TVtNMGo9ISs6ITFmXnpxandSJDQoOHNA''@;'; put 'put ''Xllnay47P3JOVD9aZ2suQVE2REJQUDZgcGIrNyk6NDR3N1p1YzNgUmMwUHN2PHJHb1NyaF5lYVo4cWhWcyhQMyIpLCUmJCN+MGc5PiQ2JChAMUJqLHk7QFBUI18kSHZLdjF2MG1LZCJnMVBtPUB0aFY6TnBMdVE6TilLO15MNH1NXjw/cEZVaH1GfXxRNWMxNjUwU1tEflohbHVaZUJ1RlAlUHRJ''@;'; put 'put ''WE18XiJKQk8pZn1hZ3hLb35qNE9pMDs6YTMpT0xiKVZjb1pkaE1hRj4yMGl7eiElUHBlYzU3VDhbNTtAJXFlWGFnKTBuMTtAUl1HND86RyU4K0t9VUA7WHwuTXcyQ0hWOXZhSVd2W14uIWA9YjZNPlVHSkdzJGddKiY9PGJGejZ9RFQ+akxBJisxS0JSKG0qZ11Ea0tSNWVMT3k0WVAwZHY1MXpz''@;'; put 'put ''VnFjL0xZVnR0dHBPNUpAOyY+IURJYzVJczB5ZGUhaH4lNi42aUJtYkYwQE5IXXJLWHh1I1IsbE5rayROeUBHMi44U3s+IS9maV03WFNGKGFESHNoRkhzR3NyKiRJeWooa2EzUiwpIVIuRDtUKjBfQEMuRUMseW5NZnVhbFkiPjZ1eTtDZlR9NnU5Zy41eGF4ME5sejReL0RnaU9UJUthKTRfcmZn''@;'; put 'put ''VnVPOWJZXW9OT2Uhc2NJWEJoQXEvcV9vJDNHIUBXPnJeOFYvU3gyQi83O0VNVE1nRk1aYF5rYFF4Mj8jQ2NPLDcsQlhSNHAicGYrUmc0YVp7cE9pPEt1Oyg9Z2opajchPnl1MWE1Yil0THFaV00kSjtWJHx0Klk1ai4lbVomPHIiOT5DRikkWGZebi5tbTVXRTFaJG9mRmpZRjslIiVpZVBjfDJE''@;'; put 'put ''Q2pRUnldQ0g5UzBbakVGVG9MSzErOCtgJFkhWkArT2shRUUjSnZfPGJFPFomVTo6JE1pcGlpOUJnKGhEJVY/OiRhXTJBNEx5dVRhZ30vRlcpSVF1QF0rYnBUPkclXlsrflIpKkNWWCRJcD4oQFNZSH0jUXZbLCZLfC8/Pixreyxje3Y+cHJSMVZBfThAYVZxdT8hb3ptRiwyViRSc05OQWBBSmVD''@;'; put 'put ''XlMpMzMkX2JWPjxEWHMmZWJ6MT5Ffk14OnB1Rj93Zk5gU19RZTRsQEFqODw2MH1VaTQ3MypqOyZrO3N5fiVMUW1Cfl50VHhOYUguLHB8ZkwzaSZlPltObkNOdTl2WWR1IkgvKWdreTlJQkJYUiFzWG9NO307YkE+TkhLY31VMUo9aSJHdFE3UjVJRipRLk9iS2lBcHxROWg1KkxbbHErP2RlTntp''@;'; put 'put ''eGpKakVKSDIyT0whVWEpbltNbU9lPlR2JUdIcixhYEMuUlI6YVd2Sm9helB6dVImR2J5OSFqSWVPI0w8eEpgeyRgPWQjPlREKHRGfDUwYGZiImdYPUgpdkVpcjJrYi51R15faz5zTmJpRUtIJCF+eXFFR3dxRW8pR0NEU09YeU5XKT0wREphe3owPVJDYmkiLipCa0M0a19bdT5hInF9eHxLcGd8''@;'; put 'put ''Qn1uOmdYKTZYd1sudmQ3R09pSWp3QEY+eSMjKF17NTxDe1YqK0k+LGNpUlsqK358KD0/bTsmVTp2NXdASCkoSEZVd3lYamAyTDo1dnQ8aHhAXlFZRnVEL1Jqb092Pks0Z0VWTSImQzdvRFlNPShzTkk+STx2YndAUj9iJklNdHgwSSVQT3ZibV5eQXF2fTEyQVR8cHxJaHhyK2EuR3gsciVIVTVd''@;'; put 'put ''TGZHSVUiRCtBaiFCP11bPiNFXzhzXm9KTXkoQnVDdiVbR3YmdHNuTlkyMH4lKmolbi9DX1pkdUBnbnx9Pm5NRFk2P3Vjbk8je3ZVQjJAckxONTdtWWhiQnF1cmt6S0JCbjc3dyswL047d3szekNaJj05I31wP188dFhAZCt8XUE+YWVbKTdpKj1RVEZhQGxKVzxeIzBMOCNxcTo6S253NipmPHN8''@;'; put 'put ''QnZXal1fL3JZWWR6RmdRbWxTdGVPT35SfFVBIUxQZGt2IkRoR0hhOiM7VkIyU3p8WlUmKkolRSsyUkReQmdBRSpDQi5VNHduQGlSKmlhKi5hIS4hVWFsSj1pWHl7cjkpRTArTHI0TF44UTFMQCpiaGE3ayE9eEQ2MGAwQGlgQltyQi9YQDBGQ014OWp6ZFJYSUVFR3JoOj0xWnojdlpUdHYsXWpn''@;'; put 'put ''KV17fF1qVmVJPH13UzNlU3FGYFo/QmV+VW9Bd3F1bSZyRkE0ODpBay5HPk5PZiRgdHtwOnk5K1hQKmhHV2RpOGpuWylfOllBUmJpbltoK05PUVM3eEBjc09LO11eJEJ1PkgmSCF8OmA0e29KPGxEJW59QnhKVD9MQDZ4Qj9ZNkxJSGA6Y297Si5lVkh9blJPdCwlOmYuSWJed0NgRkg0OF9tPVE0''@;'; put 'put ''Wz5LJGpEJUluRStnay9ZNjFKfDVPai9qTz9ka312VikoUGYwRGROLFsxbGtNeHxuSEFaOGNCQT82MD1seVl+PmQ6aVZzdj9ydTQpW2gzJGUhWyxzeCUhXjhCZk11eV5XOVV3QGslRV8wMVQ9dXFtOiYlXUJheH0kYGw2YzdwXTBJTHsvcCpoUkooQ1hbS0lgUEV6LmIjWkNsNmRzRmE1NlpRMH1g''@;'; put 'put ''YDw/I0hKU29kLz1CJGVjSiNhU1pmNyhGdSJJazQkLFRFUEU/Zi5ZeGVtRGcxQ0VsQitiSWJJPD46KTxLMVQwXjRQZ2IkJmRFJig5dX5vLi5bOWVpV3Z0RjJJcHViN3VbN11tVGY1MGFpZ08icCxRRmpYeTNqO2QwZU9fXTdrMFMuK1UyeWdCaTJ7VTJDc1RzKHgwY24kMzZqall4Oyt6PWx7LGlP''@;'; put 'put ''ZlFlWk1bQ0JadGUrfG9HXlVxXzRlNXhAajQjTEBPOGJQRFteSmwrKHZFOE9TbV9RODBIOS5OaUtwJXdwJT1kanVvL3E3a3tNRnEvKkJbSWkuRm9pM0MmN3A7NDZ4Tj1dQ1ZWI0pifDFDemAoSjJUNS5eNzt4c25qVX1IdmdeM1spIVpFNV45PDJFWzY7dUlncE06biReUiJKRlFvQD9fOUoxWHEv''@;'; put 'put ''dzh0RT4uTig8MFg/fXNSMXZTRXlnOTtRSVhvZiM1VyVpK0A7TmksWnhUP093bSJ9bEZIbGAqVVQ/ND45KXNnT0A1OG5QREhLMUxAOEQpKXwkWHpsWGtoM0plQFNZZm1HdWB0M3RPbzFKI0xLSzBfPWg4V2VFR0h7KVZFa2UjfU5WPXYkSmkjKik6ek52Mikoezk7ezBfKkJALzRCeTFDcyg2JEA2''@;'; put 'put ''UVgobnUpQW9lZ3dPI2Q9cl5QZV4hOVFVI2RdZltIYnhAbl1GPlJTfXp7P0x2U29NWHlVbHldJDt4WzhEaztONTVtOSZDMntGKXVYaWRFdU1RWVgmVzYyOVUsYEgwK3NxPHxUfWdTIXxHZmtvTnJZNiFAJWNMWWAmMjAySE0qMjhtPFVtdGF2XXo3JXxdN1FoUjJZe2lOM2RYS0VRUUZCOyVpSWou''@;'; put 'put ''ZztKPHhjSyNQUUZUMV8qa0IiWS9VZDFoQ3VnM3Y1JXouZEc/VGohNCZFOCEpX2kuT1RJNkQ1KXEsX0k7bXU+VTkoY3E1MUg5ZShXbFIya3lUNWtsQmQvZzRbaCk0bWVWVHQlSGtSLzxPS0tUTGMjekN8KWNdang/IiZDWV9YX0w6aSh8cjpQY3lHVHd0RUNTbUJ1bSU3YyFHIzkkRTBLNi4pWDdz''@;'; put 'put ''KFJtXnRNfSVsPjtyMCwzd1Erbyw/dEJNSUpkUWAqNXBDL1lpL1kjbV8rLmRETngpKiQ8MzB3d1k8UW8hSiEyblp0b3VKIyNWOHlGXTNjfi9HJDtlWlIieFcsSn0od0ksdipCSWV4Z2QxamtdSExeeGlRMEp7cGhkJjshIShqNnc0Q1BldUV9XyEldlVYT0B6eEx3Nm80YTJELFJoQF5pYS5SOFAy''@;'; put 'put ''R3BmOmFxJUR+aVREQV9nQGw6JT1xSlNwZVZ4aGUqRkxUP0ptfW9NREpTT1ApcGY7LiExL0UiQH5YW3hnRllGTCZDOW1zek9INmt9IUd+aWcmUXNKU2pRXjFTQG49YWNKUkArPjw/IkEyVTVTcFFPUTBoJDFdTCU3dlViJWc8KUxbaGNBdlVqZW1hSkV2Lmw2d2V8TWdTI2w7YDxZNDEjOV5oZVZG''@;'; put 'put ''QUZzWXc8JH5lQCNGeVBINFJNTGReWTVWSWcoZWBocG1IfCthL0AsK09CdzxWQTEpRkE7ckhXTU1fQkpTdmE8NVVsQTU9az5GVXlnNjFrVXMuKkkpXyRpWGJfc3tEJG8lIlJAVSxeaUtIL1o0K2B6WUF1UD1BQyluLmlKd3o9ZDV7UGg0bllQWG5tWHpoZTlWe1V8Iip0R3RxJTl8Yl5JIWl2SDF0''@;'; put 'put ''RFtPK2RCN3o3cHhwWU1uYXdgLE9OWWhBT0o6bjoscUtscSpvJCo5Iks7RmtWOFk3SDt7Lkx5LihOYkRfOT4uSGZLMVVsKG5ecD1MMFh0ZCVsPShaQ1MvZVJLaDlDcnwkWCFpTnNBSkRUYD4idkIyOVlBdzUiSCRBfXJ3SzZ3V0tNYEx4NzVGR1BoKmgvR1NwdH52Q0Q7SiolfEJCKnZ1b0h3P3Ay''@;'; put 'put ''QGBHIVBNVEp1SmtWI2ZsWXxIeFFvJmY0UjFrZVVaIltoNDoiZUVkPGtCaiNJZiVCRFoqTWo5RkApP1IvMzlZQl1ZZ1tqI1QkLzBNJUN+Zzw1U2pxR3paRDF2U0RYL016W215bStfdUQpLG5MRnglPSQrcjU7R0ZxcmAlMzdlSXpVJntHPl8oPSJgUGE1O14zfWNweDJmQFpSUWokJX1wQldgeUkl''@;'; put 'put ''KkMvPyQuVDsmNVIvc1gqbVFJXW9eVlZ0M0JQZl06TSxkYFB7WUhNRHF+cj5QImAmQm9gZVtmeHFIeEkjfnxPMXc8TWYpN29GbGo5U1ZLUWFaW19XKnRndW9ZcTpuTElPUUp2YFJ7RU11Yz9td0NWIUokYGlSe0RLPzFINjUlcVhxWytORHVmYGFrSiJRY0xGNlhVYC4zM30rTkMqVlZHWmplUzRe''@;'; put 'put ''Zyhrb3wrfF1aUXN+MSxRSWFRVj4jcyNDLmguP1VIc0Bhc19jLHpOcTlMTmNbTmZ0OSJgKzByNlBHWj96dmssTSQiM1k+XXdwIyEsRD4paHFyUCh5aVQ2Im9HbCVGSHM0R3RoZndAa1BGbnJOYCpvWzEsODtSdDpxMUxgO2ZFKHZLQHhSIzVpK3V1SCo/XSNzL0AwYXJnSyVeTG97Pi9kY1Y9Kktr''@;'; put 'put ''MUw8UUZ3OH5XSChhIjBufVUrS2o4R14mO21OfnFwb0JNXmN2TnVDeEdzNGM8bHQoc1s8L1dJajN1MmMkTWZHQiomYExpQEIua1JVNlNtYHN3bDosbHIvSnpEd31CW2kidj0zNFtaJnhDV01bM0s3anFJRjI9Uy9EVUxFc1k5PVJjK25XSTFKKiUscV4zcD01ZHlTYD5Id2NLI0tgfnJdUjJ9OSVN''@;'; put 'put ''UHAjcmVva311ez52T0YuTHEkZkZKV2NkW0x3TGF4M0RTdE47Xi97bk1sQG1XT1kyU3doPHFnUXVtTEx8W0BGR3BJWE1TeEBHYl5gNHpbRD1VXUlNZ2tmKHlqIyl2NSQifm5VNmt7UnxQOWdkM0tSPmB8KjduX1g/SyYoMn0vJkJlNl5FL3guaCMmTXdBbEU8PjZPI3gmPk9qVGFlcyswIzo4R2Up''@;'; put 'put ''cFN9NlM9S3NLalMoIjtWcztOYjVtZ1Jyb2ZbZzl7U240Llo0I2o5QXdTbSMsISZKSiNeOy48MmdqWFY+amJbKywyMExAZXhiV3Y/Rm9dMHN9dEQ8QkdONV5wISJEeipNNitPc306KVBuL31WSzw/e2B8a3lVO1dpQlpffnZrfURrcj5LZHI+NmJeOCFATXcqdStCck5jbUtPbXx+T09Eck5ZNmJ7''@;'; put 'put ''VnZ4Z0pIKC8kSGopdVplan1ee2RIeCIvKjNMeUM2WTBYaE1xO0xaKTEpUm5SMENkSF0zY3pbQTtoIzdrPklMSVUibSsvdHEvYl1HeXRANUVFTCFNbSszckBBJDQxOjVteldDV0Y2b0dwR1UuWGlXP2dNSVVgekYyNmFXP0JrRm1QJlMqPj8+KVNrb2olUFhrPyFuZl0rfDM8UlA9ZTh2VGxxWkhb''@;'; put 'put ''MXFLKU1wVXIyeyRHPGpCTXFXYFBoYjRKR25PcFksI2pHQythckFyRyQrZ31aa0QsajNWVHRtdEUkUHxdM1g3XzNNUjd6Zj1uJGoxeXtXRUI8Tz1PfV4lW1BKSFN3d1lrKXRnZUlOR0dPUFFFR3EzfEBNQDMsYjBhUD5Xe0t7MGFqZWhBUXlEUHwwbXY/Z21rUkdsPz1yP2N3R3IkcnxUJSFDbVQ6''@;'; put 'put ''PGBQS2F4eixnd0h8b2JFLE5YMGdpdFBObyQzYWMjfWo6e1U6cyZeVTtebGdNT24uVVhpYj52VU4jJWM9ZXgzI1cqIldyKTAsd0BkcXpZP31DcEQ8eHlqOUw8WlFnamIjLnBBcn5Rfi9Dd0EwTV4kelRfPiVBTS9RRnxEI0t8VSE2SnEzNix5Qz4vUUxidHF9M145LyI6ImdERTkpXjIxdD9MYDNN''@;'; put 'put ''X1svQWslLHY6ajMoZmE7QGM7N0teQGM9YDhLIzhVWGw+YiIsVkM7MHIxLGdQVVh6KUx1RT5bbV1USkl5KVhvX0w/QVkvbG5oJGFUYT1eL104e2F3aUQzaUZ2blRRU2VyMiFFNUt0KztVMEl3KGReQWAwTVZ5Zj1AQzVNPCYvTUlFS3V8JEtdcGZ5dXtbNypiYiUkNUo9YEopJGdQZVFRU2JKOzAp''@;'; put 'put ''bmRBSlJIcnVFaTEoWHhlJDtQJUJOSFhlXXkybkA7WHYkK3k7eylCTiw7V0NuUWZjKyxNYyxqK1Blb0JrL0ZTRDJuVj5RXkMubzRrMS9xe2ZBSW19eTRbWz5AY1BFNkM/ImVXKVdHeXVYIU9XbCpRdWY1ajQxZ1RQdT5mbzUkTmduLlhGSFtnbik1bHQuIi5OVX1CZDcqZT1BLnczTWU4eiImRHYv''@;'; put 'put ''RmhEOz88ZCRlSE1FWlNQYylVc2ZHNF8sUldRaCEkKlVzXld4S01hTyFPL3QrK3VSL0JmUUBfRX19ZiFbaWR1TiM+PyVPRU8zTl4pXXheNkJNQHIiMVJUZ1pwZlp6fH1ZTDJiQm46MmVHKj1aKUxLIXE5VURAWCUsMVpgOyRbX0A/Nm5FSHlXdnQ1S2BINkshNTAqNVd0RGkvSiFvNEMhencwe2dM''@;'; put 'put ''cjJPfWZadn1BKCsoQ2IpQW5ZVylaODFTUXNlRnhxTCZTKk1wVEBMMGQ2WF1uVXE1Q3NxNnMvZjlvKC9YJD9VXXlILjdrOjVeaXtIS3soVEtAe1ZhcDBTb3B9TkxTSTJGYH15NnEvZX1qViteKStpV0F4W2Rgc3p2KSF1Xnw3P1g2Pkd9VH5QKzpidD05aGF5e2pINjFlfTVRZXE0fH1fZ1VEYnBb''@;'; put 'put ''TTBVI29pOER6ZiVVPVNzXmdSd0MoZT0qIW07NSVnRy89KzpnWEY4dmpJKVM0fGgkNi9eUWcvOHc9dj55VUEsJmtmPV83MTd5PE9EbTBSYmhuT0ApM3A8SkIuKEduKlQwVEpTW0Z2VENeZnB9cCJtTj4uO2ZhWHVoUSR4WVhmRyshW1B+IXM9bSgoNXV8eVV4YHIvU35ZOlEqdz53eCZrRyY5ZGdU''@;'; put 'put ''b0M/PU1FVGs2XS8yOFhednppXzY1S3FxWWtoUlk+IjtHcjl0YmFPTXQqTGxQIUFrYUNqPy5OMG5qLC9pSX1jRmpbey8qV3ZRMUBlSCF1aEh1YzprYF9kTCZ7WHglWiR7UFpuRnBsXyY+JipCZmhWVi5bSVNROmQ0My9CJj95YVdRJHdvUUpUeG1SOjAzXkB3ZSp6UEckWFpSJEVOdU0pNnZFc0Yv''@;'; put 'put ''biU1amI+TGJpd0c3WTpAQ24sTT9XYlZEL3tnO0MxZ0pQaFB2WiVaZlhUbmgvVjBMSmZ3ZThWL1NRezJjQnI9ZjlXXylbeXQiUVk3KmZ7ekg5IThkL3EyQ1VmeSRGflYscExJK1VsbnYpSDEqM347YWBpQTRAZk1+SyxnWURdPV5CaFouWnxWaW03d0taQUxMK1ZkO3pxXnR5bHlLRHJOSCF6dyF9''@;'; put 'put ''cihFXS49PVcrP1lSemFJIUVZTCpmb24jIzwvO0Z+ODkpSUVEQ0klZVI+TzhAZT8lQUZbYHM7XiFCZSpNPzZoUGdgfTtyIkU+ajQ5eFJgezpEcFFrRGl+JD4/V29tN3pZWkl6VEx2JHhydUJwOU9TI0Y2UnVbVSxpSEsyYmxXb2k1L3o1ZmpRYz1yWDBydEhDdURibyJCcz9tQyZZJl95N2F7Vkpn''@;'; put 'put ''R1lHKlJxRnNDa2tOYUphQVZSayVjYjlefjxNX0l0PDN3QlRBR24jZ1deW2kwRjJDXSxGUixkeSFPYntoUV5iUV5CbERdRSFxQmFSRzByP0dDcUJYRmNxa0JaOC41ayREV3QsM2VofGB6M240RV48a11WUHMvMVAmckZoZmVuSHFiMilyUlp2W2U9NEdPTWNJY0lFQ3VGTChGdz52fWdtP1lmTz9j''@;'; put 'put ''PmlubVZKMlRMdmQiSzFkeWQqI1NFZmEpb0h7YUZWKGd8UGswJFBvXzkoS2lUWE9KW2RHe0pvajRUXyZkX1E3MSgrQmdMKH1efldOJk9tOUpveWpCfHRYdi5JTCZqbUF2cHZPfGljT0Q1KyRZWW9xTzMpR1Zud1JtdGVvPlo/dXdhbFVzKXBsaTtIRk46ayk0N20qTjApOSN3SXN1IUl5QHN7Omsr''@;'; put 'put ''TFp8Pns9USEseG92enR6S0o1Kk16PWprIj5yd2RpZ10kXm8jSzJuSil1V1VzeENXYEUzeClYWylTWzEqYmNJc0ApVDVlS2pAKl97cS9NMlhPYl8udDNXQGsyNyVmS0FZdU98OjF7T1VzVDgkRko2an0kZFFPbGE6MTM7WylqJklxMXQqL0E+K0M0PyQqKjo3Y19aSClyem0oZzBJRT11Y2l2W2hA''@;'; put 'put ''QGtxOC5fN34sMWNzd1tELzx6cUJBIzMhMWshK3s+XncyZT9sY1glaFMkVWNETHd1TzxDeG1oTChzQixYWl4/VThJXVhUeTRmeSFOPiFJPHVOcVJPNSlCLzhocGAuXjB9MlJsZVBuMFguKEQ1RTd5el9rW007dGkjTU5nXiZMPi9qS15nUndAbXVqPERZamJYNW1TOHxwInsqUjxSXjREZktIPXcv''@;'; put 'put ''WDd2NDYpPUdKW1tMSndEJngyeHJxKGhHfUdFZ3ZNPyxWMlluV11RKDwuYVZoZElaODFDMW8qS0tLMX1kcEMxNCF+WVVzXmYubC5ARj4uaHA/IUJreF5tZkV8KDEuUG10aCN8R0dkYF40UlRFZkhNNFEiMF58aix6OFEzfjQpLndMYjliL1BdTG9Ib0w0cDBNc1ZMQjJHJUlGNG0keHBibk9qaEVB''@;'; put 'put ''MHIyXnlXJjVQKVtTPXV5PW4oRW9HbFB+LjZkL3wsJEwpXndCTkpqVWF4YXs2Jjcma3goLixFV2U8WXpoSCYhfEBnRD53NjV3dmswJSF1UH46eSRMKV5mSEkpczQkXnV2LzhHNFJQM355V09qPjQjRCxRTkdvfG5xbVMobU1jbj1BbCVKVHV5MFdTUTxWdHc4TCxPVjRwYTRMYHZjPktzMyE/SF56''@;'; put 'put ''MWVGWXM/d1AuPWUpLjxuTD5uZTM3ZGtRUHM8elgkK2c4enpBbjlbIjt4MjVGTDtKbCx0eU0jLF57VkxefHIvaj5rOypSRFk1WVFNa3k7LkI0O20qZ0pPR04kKW1NSk5DbUIxYmBrRyExNSl3Y1JVTktjY01IS04qZllqKTVbNiYyS2dWJS44IitAXTgyZVYxJGxSIlBAbzJUNVs+dHIjdWhvQ3FR''@;'; put 'put ''SCt9VilfQDJjODRJO0VsJDc8RD0iV3chcUguRTNXQX1fWWZtdCV5V3BvdjM0a1IybCY6W08mSDMya2NnK3F3d1dfSVs/Vj09RSt4NFdmdyVkaEwzdz09eE5HVk14JDx8R0dWOHNEYl8xWUppfFZVN0txNDhWJUdxPUxIbyQwXyIpXXtJUipMSjZrVSszSztnNGZuVDJDJlBFbjlKW1JdVkRQaDlB''@;'; put 'put ''eUk9RSpEJTlZaFRsYH0zMSlHNnwjY3hHTjFeT3AhVlNMQTFFSlcxe01VLjVIdiU8Q1ZPOCp0RlN6TUVNRDlVOEU5ajxyKzoiR1Z1ekw4IWBSLkBOYVhWbCVreExWU0QjbmkxekhRTzhPKipUZW9GP1ZQNzMhUSFERi43JV9sSXBsVUd8ckFgMFVrRS5vSmU9ckgpa3V3TEJuRDBDTE9MdHtLaisu''@;'; put 'put ''dXo4PEd8PDhgXkBLSG9XNngmPj0obUkhM0dnQnU+VzcyTkNONnVvZSJJOjQ0KVpLYTAvcmVBPitzWCssRXxnI1VzdFE4ay5pSWVNRnxyUlUuPkVIQmcwdT0wbD9abmR7JGUje3dWZ21HJmcqYl4xW2BeQXU/dzFXU09rNWl+d1dFWGRwL3d1bU1kfVVQcEJdPWAjMWtSUX51TERhPGlBbkpQTkM+''@;'; put 'put ''UlQ9V3hib0xlQVJaNjJIPSlCNWo8ITJpTyNfSiF8aHssSzM3eExnU1R6VlhNRHFzPTZzayRrQ35nT3UmY0EsLypxLE5eXl5TV0JzQzY1biNLOkZqTXpMS0smeDNIRWtVJE9sMzp+SzQ7ekxTXy54WSR5PFN3RlcwfSM0a3ZWLjF4RXg3dWVedWVfZVt7cl1qfnBZIiV0KjU6OkBrdnBaQSZoYEoh''@;'; put 'put ''JVdHcF11RVhnL3R4R0pPI0JSKyRSUTNjZSMwdlM0O2pFczklQyIkS2xpRkFWPWVyTGhFeUYwSEkvK2h1Rn5DcWQ0NX5ybEdodVJrKXcqPCIwbG5Qc2hBaGtvOS4peCxkdDRpZStpOyFNNXMrbDQkM1JsMnVZdVJ6KXgsQGQzYVtRT09TS1ddVTt0YmVPMU1aVCYsUDlHfW5FKEVOISlRdWQ/PXJK''@;'; put 'put ''YSJ1Vyw/bEhlRVBKSTw5SmRASSFrJTQ1MV0hU3dfUyVjak5vdTlOIzpGY343RVdIODQwZ150aUBqcFJNQTlweVBJcEpMQ3xGRVlvW2dKSD1EI1hgPUBLZlJSMWombGdPNiIjI2JeJW8kPE41NSFXIX5KWHpwL3U6Q1dKfXhjKSQxT0BfR3o4P3t+TVd0bERZX0A1dGMuc1VJSVlNN1RXZX1WJi9N''@;'; put 'put ''PlY2KWBiJkBsIWAzaXdtPEBoQDg0ZzFQSypqWWEweiF5b0k5MT1EJlVoNEl4eWxYIS95NCImbnRXX3JJWV9mZl98QTo2VzRYQ25qRGB0ZDoqY0B3UzdrUyM2ViQwMCh4e1N4RVQvPk1ELCpXQGxrRTA+aXhbSSVkS2kmWU4rQ2JNYHxrOjBrYSVabSR4KzhWYmtsXlEifFY6VXlNYlIpfFhWSj93''@;'; put 'put ''fHAjZj1tUntVaUsiTWF0a3tWeSpIcWU2NVRVIypvUTJ2bj0zUT1bJlEoSnJ6fUFoayEldDJyPFJCfjF+ZzosQXIsR1hTKzM3XV0/e2dUNF8pXSp9dGZhbWBBNX48eTUuekQ2ekMuJSQ3V287ODZPU15wZ2t6S1pqMk9laHJGSDRmKiZ0XSNLXWJDczFtIXJbQy8pWnVjWW12cV98UChuP3RgWl1a''@;'; put 'put ''cnNyP25qOUNMTzBjK0N4RmApYSpMXWtrKl8va28vKkI/Q1l8bF9oaXJ5cUtBYXltP3RoIi95NUt6MCFnbiYoU28sRTdOSGxZVTp9NyEhR3BSciZAP2Q6cHVdVTRNTzIiOyN8SGxYMm9PbFd6fkklMG9WbX5QN31nJERdUjNPJjVMMCw9JHYmUUcmclc2cWdobGdTI3FnUz1mPGYpc1VIPU15TFom''@;'; put 'put ''eiVzLFZULk5eeCYwZmplTE9ZeCtnN2I7KUVNamV0TV48ZCZhLzg9QVZAQmAkOSZrcnt0cWd0PT1UVzFNdzlwJT91SG4lYWJtM0Y8QzZIV296UFJvZlFTaTlEJmFJRGR3YF1RcSNCZVU8UT9QOCN8YVd7NV1lS1IuX3Q3PUVFUWxRSz1teVNfe3preHQ0VH1uITYvIXxFSnN8cmhBWE5ocGU0e2FX''@;'; put 'put ''NWkvKTpXU2gpekM7NjRlM3RJWSo3e09lWkV3MWU7L1FFM2Y8NjQwVk52bCFKKEp3UTQ+ITBJW2lEWF4yQEFkejU9S3UsZUo4JkVkZ1RVajhgP3Q5JTs0QDMjLiFnW1YoJDs4QEN+K2d8MGZ9eSV4UCI6TnBqMWMyPjYkO1JwXU87MElQMjJOOnY+VSI+OG06RGQ1YTFecTkscGFXRD5NZz1kMnNe''@;'; put 'put ''TzVhJF0pcXxgayEzTy5rfGk6YEw2dCxfI045aFtYNVNScUooO01nbCE/L14hJEA4ano3L0p4PDtSJkwsaTAwYmRaZXQlIzBmJjBedWUkIWxrY3ghZHFaM1hTUTk0OEx1OXtTV2A4SytndjxAMykhYj9tdEYjQDxIUC8kJDRbaFY7am1sKEVvbSF9V1MqIWp6Oj0zSHtWO01nS107NX4hPy8pYlFo''@;'; put 'put ''SjcoUy4mV3dkPWx3UURrU3dnbjdFUmI6bHd3NE90akJvI3IvVXpCRSYySz5vL0VRUz1EXTtzJWs+fC9PNCN6Xi5uL3Q3PDheJTJVVDcyNUdgLEEmTVVNbDNTIl4mJXFVQCszdktwRlpoQ25UMmZ7NGxpLC9UIWhYczJEVClHeyY9VjJmNVc7KFc2OF5nfkg+SUw6S3syJFBXaEwjb0ciX15tLDBv''@;'; put 'put ''QUNxWX1xZ3FoT2VmOkliP046e2heJnxZe2VOfUw6OWtlSEA8KENBTVopO1FqYCprLl4jVV0rI3k+QyFHKERpSm97N3tqT2MmQ2Rjb2RAM0VdViRAZTlvayNmd3N3I3ZCfDwmRiJre3tvOFYlREwlQC8ufHBTYCYrMEhZZUU9S1ZaSiNMJUhQSkhrKWJ9SGMrOVFJSHNhR1h9NilCS0dfJjwuX2F1''@;'; put 'put ''bGVqc0lXLDFxUXo+Znx3d19IfGlCVmlLYF01UDx6eS54XnIiPWxBNF9qfi5Gbjg/WDlreyQ6UHgxLEpgdGlCWnA+REtBd2tXaGRJNjVIQ3Jka1ghNmk6TipAUyVGYCU0W0grRV8mbllyaTMvbHd3RDVeLyZWYkw2VTxCX0E4W091MDNbK30uOj1Xe1h7VHFmZU5IWDMscWc7YHFwMTBbbi93KCtL''@;'; put 'put ''Tnt6KGNLJWwqPk07OD9QW1V1YG5DWjArL0d8OilkeVZMUHZlbDhOfWhyVlhdKSY5XzJ7M1RhNz1VNWlnUV1lV10kZ2d9dVB7ezlFLjk9JGprV3tTMGw3fGNbZWp4PFVXOUtYVTxYLkAse0t7NDJpKiNIMGsjanlsRn1XKG4iKUx7KlhQYnRMcXNyP2ZIazNhU2NOW083YXZMKi4hXWtdV19WMC5G''@;'; put 'put ''YEo+VVkwRXo7MjV9M2JdNj99Z3FientGXVoxY205TnlkUHk1Z3VVXTNiLDkpSTVvS3B3NiMwaGIzemtjPjBMT1d8OjE9XmM/ZXR7TDdtbWp0SEhZZHVFUiZqJXplZT98SD5VfDVMQihYXm08Kk1GREM+IXA1IzdWVEZ5RlhGWEZbbChXQlZeM0RXSyZuX0EpInZCK1B2V1crOklyZUtvR10weDF8''@;'; put 'put ''eUJ8eTp0eTxGImFsUTxbWk1IL0F3UiZbT3VEcDZAJWtTRTF9b0pxIjc5OjwrTXBDPloweGM7MkNWTWpeK1c6VmhEfnkybE5ITU0kdCVnQltiY3tvP3ZqeXZxSz5sP1QvZ3wpVmsuP0A6R1NxTl5rbFc6ZzczfTomdjpMU15QVWEzPWdaM3p4TTF4Yk8oVClbM3I2InZSdixWUjw8V2omVk9SOEY4''@;'; put 'put ''fnQpcTh4Rl9PZSIlcUh1KzZXI1NsZjRnNUA6X0dkV3B7JXB6dFttZVdJajhiemclYmQsSHRVZEtxMzpnIldJTy5rPERrIyhqJjs6Nk9YNyU8YCY9QiQxfkUwQV5rLGptVWAjez1VZHJHfHIsK3V3RnFKUjxedkZoZ3Y5KT1sOGNHcHE0KlJJdytDe1d4U1txRjpjJihKRyVGa0VyWVZzVXE/Zl5Y''@;'; put 'put ''UV5RTGEiY0NAYFpdMVo8P2UiN3wpPyshPGc6THJbMTJALGAyQFl7Nik7Q154PHhXeUhOazBuSjlfQEt7OSxCeERPQzZGaTQqJjFpfjQucm03Pj02UyF6MDsrMSZMXypgW1ZiL29YJD8hYndRWEE+ckBlT0NfaG5RbF4lZUY7aVQoJjcmU31qaiVtNHEjKVZ6NE5sa017Jno0bVIhWUclUGVudTZj''@;'; put 'put ''T1RkV2tNcVpQUXZ+K0l1ZXVaLzxrMTI3R3cidSN7ZyZZbTh3Tz5hOFpUKUc/RWBvPjZRblFsJTc+U35wQiY5QCtqUCFzUj0xaSJoP107eDVEQCR2SXl3RmFTZ0M+ZyEwKjtyP0QvUnhaQVJ+ME1PTSleS2pMM2JJJkgsXW06Q2JTfHZ7OXh1enw2ZHFrMj0rWFBdNi8/KzJMJiJrLy5wWHQ9VitQ''@;'; put 'put ''aSs1O3IkakZ0V3NbMWFjfDlPN0E/JG08PX4pRkV0KyovMjEuLGVocUlfbkY2LGp9YVdYdllYRjNiUUhIVE43RXdlem9fdGtKdzlIUCRgdVh8PytoQCFYU3djUyNgb0A8VWQpeER0VCMxSy9sVDQqJEkuJXpSbkV8X2o7cGYhRmQjXzM0fSJXQTxtdy5PX3NJSW5bUC9ack1Bb2pZIyNtQmkwSzxd''@;'; put 'put ''L0hoSkgmWkkmLlA+ZFhxYj8xOy5DYjlrWUV0TzFFYG5lWHFiSGxASXp1RkU6KiVXSFgqXmAkXTQzPkVuSVExRUJdKExhUVJ4U1JwcEBIVHZoPzlEbSVeVUE0USFrZz1qWlIyTHZOflpeO1I8UkRgLkZ6ZUdkVTR7Ojo6PzwhJV5pM19LVXJiNmgoI1ZUUnxGPkBPRSQ2S3ZLQGZtKFNFWjBnR1Ze''@;'; put 'put ''TzFUa2Y7ZG5ALCEjYnNCUSshcl4wMmc1MFI+N2BLZGZvMGZlb1NOMEskZ3skK2ksaUdQKkhiKFNmXzx+ZXJIfEJyLzo0PlduZywwb0hvJG9IIWVOfWZ0RlgmZDBwcEkoQGd4bVI7dDAsWyVKZ2hzTWF2T11wPFMzbS85SVlJeXc8PD4ja3tuZzR1NmtLWXZAOzdPL0VtJT9nZzU1R2B5Kl4mOzd2''@;'; put 'put ''NnoiPkM1cVN3YW1YXyRsKWE3WmBTTyguUWdmbT4lOmYwKWFpbDNjLjh+N1Z5b2FbOmEuV0dSVzQvT2hVYilEXXYmd3pRWjYlVn5uOl1QTD1wYXVqLnp8TmBFQSx+dj1TU0YrbDViLmAyQHF3dCRlXktlN2tJIS5FTzleWCNgbE9lM1pjOSxKWG01bHlIfGVHKk0+NkFXa2wzVl5bI15rOkE+TGoq''@;'; put 'put ''MjVdN2hNXXJsO1ArYFFgYX1DK2R9VCY3PCV9UU9LPSY7UzZNYGxFNUYwPXIselVfSyVlM3NXc1NTJHg5e217TUUvbWwqViQ1PlYsTW57cVMrMjc7e0I/KEl9OmduSWNYJFFZdCVEP0MvTkt+P2kxbntLcTM/Y3k+Km1maDpmYTc4O2wrdUomYkskaExrNSMlMC8qfiR5XVlWRnhPZEtxbldYVldE''@;'; put 'put ''RjBGXl1nMXFAdSxZcjdLXnxULF9BU3RHT0wxMU9DV2BxRnI/Q0ZzUjY7I018Vls7M1ElazVaak8zM3FxWUJiL2RlPDJaWVhraT52cjY3O2ZUQTt7R2QiNz50JnwiOlIhd3ExaCtNdWNWJjwjQk1lPnpRdT1gVlB8eHZ3eHc7fDNzUkojJCpyM2AxImsuKi84TTU4SWVjN15GZiFwYiM/b342VC9v''@;'; put 'put ''L31VVlJzKnBHeUZ9SE5LOmVsZFtfeDNrc058VllZQCtUUEhzfWN3SmgscGtSMlc7THJEMkBFRE92eWxCSy9SZH54Pzdmb0hpR1BnTWEpOD5CTypAe0toe1IwNnB7eDQ1L154c20xIzswc21aSGZtLC9hcEooYWNjIVZPUSFFPn4lWVNIcEcoSkpATT9hPSY4MV5qWysyaSl3OlQiWDAsQE5ieUw3''@;'; put 'put ''cF5BZWA0cHs3XTJPTzFZL3NSaltLTlNHXns0RHRuSU5HRU1xVGtUNUN1RSt0bzdUV1FOV1s7Lj1HPTErNWtbJHUzMDBPKDE5LEx5PnZPOV87UyJqfXoyfk82YFMvfVpbND53VXI5Ylh9SjAkdl1+UEpoJG42ViFrOUNvNTgwfXI3X21OcEspXk0xV1E6MnR5OU9Aa251bVJKLiQxK24qS2smdFQ4''@;'; put 'put ''eGNLdWdAVDE3bDdqRi57NDx3I2x7ZUAoRk9SSE9scTh7MldTKm5HYURaT1YvbWcmbVErU2lreDA8d3E8VGJSSE9bMnNUQlUwT1JxP1Q7ZzRTP1Q2YzJGP2RIcVoldmVVcnN2b35bRFtFJjtQMCVzaSozZG1Jdz45XnRJJjtXUHl+dCxGfUNjPmZgO18mKm9wUHFQWW5SMiw5KUlhW0QjYltXezhS''@;'; put 'put ''WnBLWSppSyUlUVYkWzNIN3Q6QW8yeHEvX3d7Ri45UkZfN1JGYFVuSzEjeTRaSk5PXUxdMEYsJSo/WWJHKlJYI0dPKWwpQUxoQiM5WEhFXWRUSE5McTNYZFJfWHtrPnRhbFomTFolbWU4azA+eG0ybDlXXl9QQ1BGKFFdOHJVNVtlfT1sPF9WRiNzeURBIy84TDgvIzhKODpnOjhsWVEyRHBrMmgk''@;'; put 'put ''OyozP1dUSU1AQjpAOjI4eE9TZjxnIXEvcCU/XWwkbXVaXmtwOW05NjBCbiJVfkdaUFksSUo3MGA/aDBkYTVfYV9NJFg6JWpOZnUuSWkqbWMhQThKZEUsZ305Vz1rMWU4Qmg7JkpASWNRQ309Jl55OzYqUitYUUoxLFAjOSVvKXAyfUlRY0k2VWFhVEkhRCxTVFVxSTdYI2FeRHpwSkxWKjJxS1hw''@;'; put 'put ''Lzw7IUR+SEspPTRsKXBKWjc3W09RVnVuaGAmZUt4UnJqQkErW01GbFE2aHxlVjF5XyljLDhWZkw9VF40Jl1VJm5zVV0xcy5XI245ey9XMyNydmdwb2pdUiVfTiVEKFVzbVpTLCEwK2NpLHklWzdiL1NmVmYmZTxnWUsoMlpmbD47NnVWR1l5QUpjTGMsfVpyWiZRP30hUDVSMWojRGdrajZCSmNP''@;'; put 'put ''ZldKdUkvW3paLC4+LHp0VCUmSWg7NjdOREBJKGVRYlM1RGwzYUxPKywpel04XnowUUtOS0RvfSFwIyF6KHZFX0dDNkpEO3ZZJkRpeCNVbHxvVi9lNH04UDUxYH0/aDt9ZyssInx1a2xUblZlamAqQ0RjYzU7PmJ0PSNnZlQ8V2hCRldFb2BLMnxSendQUU97V3h3dVkudT14P2tAWC9qNil7Xm56''@;'; put 'put ''KzhkNzYqS3x4O3xIIXooTDNXLkBLWTpZTzhhekJIR0g2T0R4PFVFQksxVC4qdn4lL2J+cEdwLlVnUUokMF5ZOk1neVRXI2hSPyEuNGxpKztBdzxJezxrIVVSJjxGP1l2RSVAUXJ6W0IzfnB1cEZIIlM9amNtSHh5ZkViaipGNnhoZX0pR3UoZ1k/VylHRy9qPExWXnYxW05eJDo1KGQ9ZmVOM3Zk''@;'; put 'put ''VUElSjRrb0IlYWQyZkl9RmZqYDc6RW81JTdUKGxiVEFlL2F6e0I4NUhFJlZyIWhYZDdvS1RaXU84aChBOktNfm8uOkIoamR7ZENoQSEpQ3hYNXpbRXwsP0V8LEwuWjIla0E+S1c8RTIxIW4ofltYKjFSfCxGbz1VNWdHUWFzaERvITY5SEw4Y3BicGl+MHY1JDlIflM3Sjs4P19vYHRxV3BGJHE/''@;'; put 'put ''ZDZocltPcWttOUV3WHJjOXRRdWpSLl9lSyt9NzhUdmg3Sj9TMzFzOkQ4elY0NnUwYV00Jj9iNHZ1VUk6dDIpUW45ZTdgfXM9cT1RZHYhTntTXnRaTGtVcm57PF1VXkJ+Y2IjRSY7LDxsKERyNGpVcjolKnM5QFN5PjkpSWFbczAwJH0wXTBOMyJycDBTY0tfeDc6fFlhNiVXN2Q2NTxBaSJkSDAu''@;'; put 'put ''clc7bWp8WFo0LndwPmp8LCUsd11uZDxON0tJNHkmRi5NZilvUHI2Q0c7NntKeXVaMiZFdkgkPzxdTEBba1RDV3c4bkVQNERgJHc9LzIrWlI3RHZrKDp3bVcmT0I5eHNoMXtZJj12U0RJeio8b3ZVRXcyPmhsYHxzS0BCNmBhJFpzYG9ONj1uLkZ6fXlPJGVQVE9FTXFTcjs/T28vV3QmPXgiPWgk''@;'; put 'put ''SEgvW18mcU9uJU9NYmVGZHt7Uz1uTzk/YEQ/L35APixIbnE5Rz15bWEkVmJ8fVFjcTRrVWV5OmM1XjsybjlLKmNNTW5OWXA3aUdMNjViUmI6PXM/STRxWiQ7NDBaYkQ0OnFraGw8ZS54MUg0IkdGYHosanVFdTQhKjpheSwkaDROYjtZWyE0dyh8amRuYn40fCRIWUtxdCVlIXUlZVkrTTs+fmg2''@;'; put 'put ''Syx9Ol1fVUhuUGBvIS89XUI/T2dtYjowdTF2PUZwclEwY2d0UVUrdi84PCEyZjtfYn5adiElMnI/JVtIS3E3blAxe0xyJGkxdUpeRyFTdWFDJllMZG8iRylrZXdwXkp4ekMyfll9RXAvQUsxI1BvRlZSOmcwRnhPXnpyUT9eRmRrLkowTS90KSwiUWY+L1g2akwoKTYxZFJhIjlIUDYsSlFEOGoq''@;'; put 'put ''eiphLCxpM11vS3ZoUSNlQ2p5ZWtxZDlHaSFdX0hjISUueyw6fWZjRCkrNjkxflZwbSomMGZNazFYOF8ocU9vS3NdPTNCWy5wWVEyckEyU1BVVy9iIUM/XkddVjZiTks6TiNCaFhrfncrayVlTzwodmRgVl5Zd2cmeTg7NV9pJWxIUFkpNTsqfXlKeSx5LjRzUCpBM3I+IkZlPDwsXTA3LCM+M0dq''@;'; put 'put ''IWhpT2QhaGdpaWpGfkNXbzBAKjU6JlAqUTVVWmRkWGFbdkdjM1FOQGVdbGooME42dXkuMUcvOEd3ITUwZXomRjBaQCNgMGRUMFMwSy8razBmUE4paSomTU5gdGl3MmY5Zk5PXiRFTi4hO21KNlklbE8xMFZ7XyhTLHFjSWFwKlRwRXo4JiRETGVnbU9CS0IoR2ZtOFVjLmQvODx+KjA5MHlMcFBU''@;'; put 'put ''WyJSe1QvJjxqcUsyWUByQmp+VCZZOUAmcTxTZClWb2pMOEtjaTxCOHpWb2o1YUJzQCt2ZDt7L2ohN2hyXVJFMWQvTlt5OGd0UV0mRm15fWBDZjlHPTNwWm9Gb0UvWERpeF1Vdj1sWmxiL2w0PnRYcnJzLHosQUxTdEZgKWQ4NHZKcmMmZ28iaD05WTx5Ll5aZGBPS1Q2UlhCLlQ1P15SR29TIU09''@;'; put 'put ''OU5GKCszY3p2VkhxRGY0cjRiZFNpJS9QJmUiLjlINmBwIVlZNX1bbDVfVmFJYEtVbW50XSlOSDJZUlE7elVZbUhxV0Z4SVVxOXY5JlFVI1pwYXwvVy4oSzcoZV9TTXV7NFNrX2sobjNgeUVZb2Njbk5WPW9WZm4yVXRkcT98V0EoVitHTFc3bnwpI1o0NWM8bndbJT1PJTc2TChCTX5MJTlUPjtU''@;'; put 'put ''I0JRfnE5ciJFPj49a0QkZyp9UWMwUDR3ImoqbkFmZG11VGlLfXJnPXM+IS9FMGBDV3NPakByNjZ8cmdNLyRSNk0leWdZSUN1eWd6UjxbYmdhMUN2e25ZVDVEX2dNN0tFX0BnIl5LUWpsSE94IUh0ST8icCIsOSU7fCMidix0WTAyX0FkMSp5eFBHXkB2aVZWQCs6KGNFc212VEMoKVtHSVBpJVo4''@;'; put 'put ''aVkwNkl5MTd4QDgvJWFafVUqODwkSl0zZUooS3pxL2Q0NFJ3fVNVNms1eURGZ3IyU2VNMHh4T0hEInkxIkNPeFI3Vj16JkVuLmIpbGV+X2BSe1E8eHhtLHw9MnB+TjFGMHVeUWhQZGc9ZXttaGB5YUZWeiVAKUhxbnFDe28mLGVrOTx5NjNRVXhmMTZ2ZENQW1JrI31aa2BAQyZicHU0U2hPXlY3''@;'; put 'put ''d0hUJmhpWylqOEpXaF1pfGN7RjtAYCVifCp+bm9oLiM+RSJUPm5oeSZiZU54NF08fT9zUlBQZEtCXypndXIzbVsqfiU/fXVWJisxeG45Jj8wMW4mWS9ve1tqOlhiTUkoPE1DSSxPPWduW2ReRnFpfkVeKz1ZfDBaZndAdkZOfE1GbGpSQ0YraWAwbUksPH5aKlE3TEl2fjwmP1Bke2AyW1BVbHpL''@;'; put 'put ''dVUybUkkOyZrJVU9UV8uU30kLFhdVSVUVWghaTE/ZnhwNEBfVkUlKUJQbS9eSyRifGN7WjxxeSQ/TyouNW90OkAxLE8xVztiMW1JeWI5LE8xW09xUGUxbUk7Tj45SWoiVSlRLGQwJjUlZF1URlN4U0o9ZyU5Kil9QnV2USEjIVE4cXJOIV8mT3JWd1BVXSh9Vm9JP2ZiQ3lDdjk1WkNOYEpQdl96''@;'; put 'put ''RVgzUVNmfVc/YzlKOk9Xa2RbSTN+cEVIKXVwbitLSWtVMzMjRkJmenFjbmJmVEV3bkJOQiFXOlhmLyNHdEFtdVRLa0U5SzZSM3IjaiM1OGM9b11va19CRjVCMC8pZy9aQ0c8aDpoVTlTS31hfnQ0MX1MSFA9UFd1QFEzZEp0cT1rVUJvZU1lQUdofCJjcTIzbkJuTz9ibjRGS3h0OXJnXnguekhO''@;'; put 'put ''Qmhsfm8+RVUze3kzZUcrTzBVTyowSEx8REBxIT82Wz1aUyFHdHpYKHQuTDxoWkl4ZCNNMEVpeTtXTFVbVz1Gcz8sTDtXV0EoQWZEVC9UQGFdQytFZk5NU0NkUnBCaHgiKH1YZFtDRC9OPmJQdjVQRlIiKU03b0lOWikzd0FxdTMxNEUyaj5abGMxSHMicWIvP04vVikzYkw1YkhqNHN1L0JQaXcx''@;'; put 'put ''eSkqZCZOb0N0QDB3aU85RWB5X0g3SVFqYSJ8UT92NjRHMy9uOEhsZ0lJcilgPjUheEZ6KEtPOm9SKndfNUZTZUd0I0dKTjFXamkxd3VHey9XM1MhdEpiSHFYeVg2enU0e1h2TEFeVDMsUFVYdz9eOVs+fGVdTChGKHRpQ11bLilURkhCZSJFS3s0PUNoRSVfWFslVC4pcGhqRDxjLGh7QVdIMG5E''@;'; put 'put ''Z0xIZzV4SWtVamlFLFlnVUhqdG9uSTdxQ2BgaCt1XXZ2ZTRZZVJGfT50bk56cFZidCNXOyQvTjpIIUdYZGdKTXc8QkUhYzRrSElFXVcvYVYqSDdxaVZCNytsVT1aPnV9eWJJamM/alQzTER8QzhBNkk/RDU0V3wjMX1BJChZND12XnpmTUNCPywuYn5GcSJUaHZHTDdXUjIoZTRrTjh0e1FQUHpE''@;'; put 'put ''a1I0Llg4K29JdX1ffDlzY3JERXBfTXgxX3EsYjBfOmlKRnJ6Uz9GQVJRLkE5MTRifFY4TWJ0SkJSdG0vTCZYOE0yU0NaWGx4JmFTYU8vI0c/aHxqUUNoImV1VGgiOEgvKUhrKW9zaUNdTE1GRzMwaz1CVEppQypCbiZ2bCxNQ0BCWlVBanFGLEJObXQzMV4jOmh6WGRjLklaQihrP01geV1lemkl''@;'; put 'put ''TVVNdFFiaHElI1omTV5rezMkPHdCO3s5JW8lLzhQcmMseSIoWjUsWHc9O31HW2hhTVQ/I11VTyVoUmhJc1IzbCp9JWZebChaRnI7b28/clc9eGw3Pjw8PXhfKkpUVjtKPGBCRz5LQXdgdEshS3k6RnB3MUYiY0tXRj4uMXZ2djlWNW17XiN6TW8uTXhRNDFAQnU1X2Y0Z2xYUypzKVF7VGlJczdY''@;'; put 'put ''LHVbPnYlYzwxLF9bKCpPQ1JRQVkjMCU4SDdZfnNxQiYiRmhxNy9hNSlWUGlRe1p+NVdESW1EO2tESVRFbCFnbVBtfEd8cH1PT1VSaF5GcHVCUSIpK3VGK2BmMHxJUjAoS11RQCFJfVU9dDpVcT45ZHMlcHtkWmBxPlh3bDxmakopbCxhMWs1eU9wYTpGJVBDOn55NSJJO1s0Kz5NXlpJKlIiPWxQ''@;'; put 'put ''YmA2ci89NFphQzZ4dCZGaGg2PDsiTkxSQHJsODAlfE1ATGoxRD9nK2RSYiNHaWt0IW5mWTJhVWVkYDRPWDFJNlciWCk1N3R9R3xkVWplUixmU0Q/IXo3bSxVNjR1XS9CREFHLHpvOF1qLylKZEBJVTxwMmkjOGJbXVRGfWlSSFpXWSwjSS5hbDYiWiI+PlpKVVJEVHUyQ3FjfkBxVF9lPnlKPCZj''@;'; put 'put ''biZyXSx4IWpUUUFVdm5bKlhKRTtFU11Va3ZQI1ojbDs2X2dKYldPdl9TdVNTT3R4eW1pYkFsTCRzIzEpMGVoJG5FNkRXdlVYbFpMMS9vNDNiSGZSIypfdU4ibipDKFFyXVUzSlFPeGUwWVtFdVg0VVokK00+VSI1eTNNZyI0fFtBbl8/MWIvW1BsSDAobHZPejJAb1VeR35BRFdrVTheQGU4XkBX''@;'; put 'put ''UTQxUWVgNFh2JClwdn1IO2J8OWRAfkBFYiIrZH58ejRyJFt+QCpJcTMubjMzT2FMYlNUJVJ9NXZMTzcuL3pPR1k2XXlrXS4oXis6a04/aSFTL1VxXlllbXksMkhXIlYqeXVNcjFWSWJiNltrLjk/VTFZKyRteVBKWHQzYmhHT2w+cSF4aDBrenphRHVCJkJ0RHB4fUV5R0BJOk57Yko/WTI/KiRn''@;'; put 'put ''ekcqL1UoVz87W1dJUmNpTkVJL1JHPkhvWm9KeCRESihBOHVBTGlXU1A3dmlYYyNrI21ZfHZ9UUpzNCRnWThuKDw0S3RMWHZdJV5fPm9wWXxkdlI/N2huL2tnJGlMNlVhdjpLZTJjUmJ5cmluS3tCOHIwbWlWMEBAMnVlXX1bU3lGUk5DNkI4NntYNGtTVE9NMjJqL0Z5bnRRXTFxQ2AlfFQ8WSor''@;'; put 'put ''Zmd1Om9qeWpibU44WVM1fVdFPyJLPjd1PVVFJVtXJmc4JFBKMGdienJ6Vm10Q2AxO2heKiwzTz93e0s9VXQvY1JAdTlXZX57Kkp1NlVTRyk4bkJoTTxiREZlI2VFeylsYyUofEwoYW5MTW1nX2p+T30qYTQseThLVEJ0T0Z0XT94ciZCaiNQLH5eQCZjQGBfKnM1fUNqc29oNiU3Si9hSkVHXlBV''@;'; put 'put ''bHpxNC5wPjw1aWEpfUlnXSs4YSI3SWhFbFJjZXR3WGJeM05KOlZ3O2gwcj9scG9oSy95SjosZG1SRlQ2NSopMm9RPEhtP3VUM3ZWWipSO3M4anpZKlJOKyslZmYxfnY6PypjQUA8WWBvS19pT2djQk1ja0ZhUj1ZVkxjdSVzNS5EcTBsJX5eOm8hZFthNlBveyMiciQpaS9EMmpYQl9mYSQ0TnF0''@;'; put 'put ''byZxNWUrbylGUTFzTj5PeEpYTkUuO3xuRF1FfCFpSk93LixIPl0+Ynl9VT9PJG9ERlpGejA3MCFKeER6SyQ7dUNZVnBkZ1lYY3A9RSFJPEYpV15ibWNMa0tWU1pjMS89PlkjTUM+QnpKI3F6JSpQYUdmJlZpeV9pTSs3IVN1RzF+SmJBPm9wSWdhNXU0aDlHJi5nWj50UDB5Umd1ayE2S31yNT5G''@;'; put 'put ''Ynp9T3xLXUZ8UHNLbEU2KnJWcWYyK11YQEgxJCkjTVFlVTUjPURfbClJRjk9PG5ocH02PHpPUzN7KyJgZGBgJDNSRjlBS2p2YVR4clo8QW58bXttXzglOi50RSxFU1Ffe2pyITJqXnU6eXwhbmZrZjBHJjhGZGsjeUc2cCxtP0k/fHh3UXpdY18uJWowal9mMihqUkhmYUVWQ2JpPVJIZmFFZTRs''@;'; put 'put ''RTZUOkZhJEojZ0RTeSx+flVWRDx9Kn1BcUImQj5CX0FxQiZ1Sl9TLCxBbjhla2AqVSIoT3tvTHR6Wyp1QiluaGpeR1IpXW5bd0c0JFgyLzl9Vlg/VDoiIz5ieShuW2ZVWGApKkV8TV9JIUo1ImBaKzBTdDwiWWIrMFN0KnQpcVFWNHVxSXBsZGxzY0IjaGVPT0x1SVMobV5IOFldQ1IhVk9RQG9J''@;'; put 'put ''NlciUjlxRno5KlBtdHgkLEB+Wz9ePiEwQ2QmWSxmJFU5PD90Wmk+TENtPjZ0IjtBT3Z9dm52MSlnaW9RZjE0ZzFQZlBuY0JfUD08VnxNMUZ9djFvekJpbGdYY1BpQjxaMXUvOCMhQD1WMDBEbnVvQHQ+eTdrQ31Ia1tfQFhFJTQ5Wj4+fmtzblRrbD5NPWkxVmckLGhnPzRkOChvSjFmZUxPMXFb''@;'; put 'put ''bUB7NzBgaG0udEJbdio6YEt4cVQqfiZ6b3tab0gpPiI/bFBkLnpOLDp3amw3I2tLXkgwZSUlOzJQbjl0ZVV1Jnc/XTJkK14oLjpfN29XcS91dGhZKlVGRz4xSnRLZUxWLmZDPyFuZlEqYjBTfVhuPmJmTl0kRX15TUd4eWhicDN7TkllW30mayRbMG17IUNqOm45VjM8Z3ZpLnptUXdTSWo7RmRY''@;'; put 'put ''MTFGalpecSNaPU5Ne1cpL3N5Q3EjenZAQl0ySUtHamhnUXhtQEI8fXJgOEFfL3NAQzIhJm4kW3lPZUdjX1pQc3kqTHtmaFcuWWhIMDZJOmU+eTpwLiNQI2hUVTFdYzRmM1pVKStjdzExdC5xVjJpdnk0ZC9YW002fVZqT2F+ayE0Wnx8ZnYiVGI6IzYraTlJcWs5SVd3YWw8PC4xL1VVbWI5ZHIw''@;'; put 'put ''RTtqInY0dEJKcXw6a11VSS9bR0R4IzN3dHRwXjhWPn4kZmY5O0duc2dpUUw2Q0lgIUAmNXEubSEoTWlRY1A4N1RLYmNDXyEldio7My5jRmAvK1hDXi49RmlmVlByaXkjRjBoJl1sRXQvekhBUF1OQlIvaTp3V297Wz06RSh+cnUmTTchRUEjQ3YvZzFtSVc9PTVUVFF3R0VMdCxad1A1Vzd+az1Z''@;'; put 'put ''RjReTC5kXTAwKkcwaEB2e0l0Y0J2XXl3UWBBc09POXFzUzUkRCMyISosIUFlaEdPUWRBMWtzdjdkNnwlS3tXT2djKTRLZS8wXVArSkg+a3x7W0s8dCN3PkMhNTRWMUQjdz9efCs8Wl11e3h+a19IKks7MTdje0QsekRuZX5vY3g6X11jL3poUF0xbTlDV3tWdFpoYXxNKk5hR0Qje0xiU1BzIi9L''@;'; put 'put ''TEpvYzRsNFRhYik6ejVCeGJSQF9VQSNKT0IjVyV7YyJXOUAyL0BCeVBuOSJoUiZ7Y0FQWFBNRXRQZDQyVk4lXWFxK34+VyE4XUNiWEhPYVchdypdQSNNcSVFR1pEQ0d8SDtmbCUxeEt1LiJXTTtvTEN9RDFab08oWVN3WnhEXmltMVpWeWssRCNgMT82c1BnJX5KUDRsM01nI1J+UE5JK0lDIV9j''@;'; put 'put ''ZUNhdjJ1ZW11MkBAbXVAIlsiPE8lUVR6MG5DdT90TEkiRzVOP1RDKW50enRAZldwaHJKQHk6WGJUMy9WYlNkI2lGR3lLOjllSlI1KE5wcXxaPWZ4RTVjTEtNTzVdJChuLnV2anpCODZBTlpEYmJoT19DODZ+TVo3QiFbJHJndTA9JjM6LyJgWjJaTm5rdHp0ZlkoTyI2TD1Yal12UUhUVDJrZXZJ''@;'; put 'put ''T2x6blJNPjFsX25NTDMqRzZaeCg9IlpuSnFCS0IkLz1OWil2alRuTENJOzJzYWFHamo7NSU+dlIvTnJyZ2FxXVV8R10oI24ya2V2dU1KUytybmN3QDgzdmpnTV48Q0ZPZENWZTFidltPNTclSCY/MUg/K0dXOXZBeV0hWFJWPCRXTDswZkxAQW48ciZiZW14YDhZNjJXWTAvXylZbjhFaEJSdzcl''@;'; put 'put ''a29UMUFPb29LQyl2cj8rdSt8Vix5WD45a00wbTc3c114RHBnYjM5RFNKbjpFeU02UG90MUlARHFXUUljJXZjaUhTRVpNTXY1Oz18aiIuYTpEMiNBNlt2WnRXdkRpLiZlWntDci8mPn1TMio7YjFSfkEpVWYpNXw1bTkkMSNqW2A7fXs8dkVYZDlYT1VjOVhwcSoufHNjKmB8b1k5aHIqcVZ9MF1Q''@;'; put 'put ''aHpzbF1bSz9dVSRIMEJJRjl1ZkBEfHIyVE9dTCZAT0t9fmM7WX5UO2JIVDt4U0p4bTRjbW1edzBLaU4sSk9IbmBCeGsrMCswIztTbGFbIW16QytsSnBqQEcqZ15rbSVWbkdbV2tkOzwzVSFucCs7YTt6XWMjfTdJL1dISSZNWkdrKTU4VCpSUk5dTDlRcS9Gdml6S3hXcVhhXTVOLGRTYVllLER1''@;'; put 'put ''Yn40RWw/fmIsTEpbSjhyNWVGSlMhS18sZ3pyR3sscEs0Y1pgcHUuPVBAY3U/flBqQ2YqRUpbYyE4Q0EjaVE/TjB6WitpW11gWnB6L0BPRzs0bFFmSXB9STNCWD56KVlWNlJVcy9wbThyZUpsXX0/K1szQnBRWGxjMDYxRipWOHooLjY5OGIvYXtsOiVjWSw9Qk1Qbig1LDE9WDpZIllTd2p6dGJn''@;'; put 'put ''QiNSIzV9Qi88VjsibkJiRGIwU2MyXThOT15PQVVBS0BPMSN4IzFXPVMjNW5WQk5bVyQrPENaTyowcCokaVQ3dGF8WFhzWk5VYU1eKz1PelU2NCR8WjQxVlAyMU1lckdCens0P316YVNRVTxER2dXSGl1NFM+aXV1PCk8OTcuZyVxZE92WiE3eHptdUhAMn5FX054Q35ZLE0rXSJDcXpEOyZUKVpH''@;'; put 'put ''XnU9bFgoe3w/YkZzNHkifFdVblR5Sko+ZX4qeVQzI2dpOVpkfnlWYmVbMFppdjlgSkhvWmg4VmFoOFI2dysqZmExWVNTVjFMQigwP3Y2TGVQImBbWl5faF03QCVbQkROIU9jYEBRYTRCaiRGK0F2eFNDXkFsYzt7VzYyMCp7Um1NaHp+RV9xeVckaUh0dkZ+W2w7bVtlM2F5VTc/eEldemc+ZF10''@;'; put 'put ''UVVmXTQvcm57QWNGdy9JQy5CdEJBQUE4X0VBRFhyQ31FKk1lY3kiMmkjXSlDQEFEdmIsRWE9TlJiU0AyT3F1aHg2RkFBQUFBQUFBRUE5PCEzRnBJcm5FJi5ZL247ZGR5WDJNdzNiPkk7KDU/bW1iWEFSX0FiSCVfbEZfWkYsbUVjWl87SWBIQ0dJQkhXKXwvUzxsVG55UENvIzZxVzwrVzYqX11W''@;'; put 'put ''SyUxdn5aMVJCSiJnT0J7b3I4SXlUMGkjTmIpZkdHLjEydkMiOks3fSwhSiFycGUuLDgkTz99ejtGUntqaCFiUlNPT3B8OSVWJX1JWHx3PyVYLnRwZWg4S0VwYyRIL2BxQDcmXS5zRkd3Iz95KVZIW01RJFtlZGlvbUhuKypnWFk+SjNXezE5ZVBhUj03Mz9rP0VISkQ+Z3d7O1dIWkVSLDtHWnB7''@;'; put 'put ''dWFUKmVWcGt8SmlCXU8iRUdXemlrKXc1aiFnfUtkLG14OFE2X2RZZjdTM3RUZHlmcno7SiR6MDg2RndwKzI8a1g7fDcqaGZnbXV6IVo0T09FV2J5Nn5yZiV+SUxuM1dWMy4zNzM2bnl+QjlbWTNAOEQ1fnNyQD0yc0YpYExPQD41LkIscVo4U0RGRzBeZiM6QkxjOmEkRjZdTFpAeXVOUENvdDtk''@;'; put 'put ''TyxaJVksUWE+ImhOUyk8Sm0uMyl4JXFoY2ZyQiZmOj5DXXQwQkQlXl5ONjJyc2BebylkNklYcWpYKipBRVVFYVM6MV1XWi9MfnV1cW8yKyw5fV5+MCkwbzlOe29EYmJrNFdjbFhnTFdfanpAYmQ8czorS2coPGxvN3IuWWk9M3tIdGMpJThnX0NOflRYW00wWUt4Mzl8JlF1XTBYW2ZzZkgqRGpF''@;'; put 'put ''R0NxKWNEOyR+R0pwRSRRKWc5RmshX15ad1AsYmhGPHs9RnZpSyJPcjdUc1JUfCpORWsqeTNSMGpKO0JnIi5xejd2aUheOkp6YDpQUGU3LzVkeiY2U3lTXTYzTm1jfFFzbywqbGE/MWt7YXwqXXA5N1A+ITwsPiomWSJLNkNoQDtEXkJKVnY8bkE+b0xTWztMXk1NZllzVC5qdWwqT21lQmo6eXFF''@;'; put 'put ''Y19uKCs0YkAmcTltb0ZELHkve0t0K109QE96SmNFYWxidWM3V0UwTGpeKTJQeHNCLnhbemNqfC4xOzl6XkRYXnkvKFkyN0VDK3s/W3w6eWJ3IjhRZD5qaD1yYl0kSFtFX2xVUGM8ImpUVWUxUnpgY25qO3tbfHs/a35IQGFybTN4PSMrR3t4Q1kzIjxeJSRVRUwuSUJoX1NoPTdMNykpeFJrZENp''@;'; put 'put ''OTpqRnxzfkQzQEw/aGF3MC92QnowR3UxVUAkcCsud1AuNU8uajNuTzB7STt4QSRVYk1zPS55cFN4LyY6YTIwfmQ3d0AqaFhPJVt+LjJjN1ZnbCR1XVhfQFpjKT1bb1c3JDZURF1dfD03OiFZQnw6MnpzdWovaGxtPSY3RWF0aW5DdSw6e1NKV2Q3aC5KLl0hLl0hfUFyQFpKPEZEYl1HN3c/X2gv''@;'; put 'put ''fjM8eTQkQDxhSXQ+e0JRQkJbMTUydW95b3tfUytCdF8mTEJUNigze2t5RjN1YjZzWy9pQWpqV0JaaD4hNyE1OjhXbEdiR3liZDVpbzFFKFh4ejxoSX03V10vZnlFUWh0VjIpIXo7c1c5PHpgViooLzhmOF9DZmZ4UzNgOztyKGtDOXRASylIXyttaTZkaFMoeWEwV11iaT0yUjE5K0JwNiFJeDc3''@;'; put 'put ''XytwUWJ+TCZPYzNiU3RucVZEPkV3cl1wN3h9VTJRZENCY3UwQHIkeVg8X29iaSF+TmU0dDlsNC4qYUVbOWZJQktIVVNaTCshKFRgYzs1VXJYKTp2UHQ5S0tlO3RPIU1LITRsdTVdQno2Z3IoX3s3Y2ciOntxKFVEWjd1dCopO3owLjdZTTQ4aiNxV2Z4QnUoVzt6WXFJdVZLMypIWSRda2JXZjFA''@;'; put 'put ''fTcidSlweClLdGJyRmlzV1dTUkVqUzd2UFlwYCR0Ij8rQmBwcEAmUjJvQ3phQGwxS3RHfCpTKzhYeS8sZVF+IlgmTChmZTI6KnJLRXMqLGhibCZzRnF7OU08T2ZYdVN8Xm5eQ1JJQSFtfnhiJTdFZDVUTTdWKFZmSHQ7ZWQ+LjE6U2pqTXkodCprO0FRQFJCTVVjYTtiL1UjKFQlUGFldGQpYVAl''@;'; put 'put ''al1OOkNReTo0IzorOUdyI01aYnw/SlBpSyM6YkdacTgmKD12ZXw4a1hedVJ9eHVTWmVXYzthOSojKTZgWy9jXyVVRT5bSEE+U0czWDkmOnVHNGxbdixMe2wwPCgyT2lDTmk5S11FT3FySTpUbWtmN2RJbDFabU1mMDlvcm9BeU8oTE9WcEhiR2FlbiZpeXcsOn0kKUpTRzM+W3M5cnBgNH1ydzF+''@;'; put 'put ''fkdSPSlIWDpiX1M/dWBuey9hcDpRQDZ0cEtHQVUpO2F4R2IzN0Q4S1F1ITxrSns1MismQTxkPWwzWXo9P3RCZyJsSz9KdTVbaH0mfGliO2lNQy9Ufn5oY3ouZ01mZl1VRmoqR25vY3hve2N9Om1NV0xXSD9CeExTdGJNU3gzWXRwNWV+dDA8MFZRZHQ9UWwuNEU4RGpJcHVXMng0PD5Dak5oZnk/''@;'; put 'put ''ZGYzWnx7QyU7TGkybEVzOzthI1ouUXclTnAuISooQyFzNj55JTB0KHRXWHlTMkhRY2lTYEA/RFBxNE8rdUshdk1bRCFKSkE8Qz1uRShJRXtNIShveHFHZEN+SFliKVhgIkxrIXc4YjA7Zz55XSF5anxGR0tEbkdKJHdLWWw6dSx1LDMhYHwlQTBOal49bTBOaU1lbSQ5UF5aeS5laXVUdG5hbFk/''@;'; put 'put ''JEJDZzBYN2hUKz9raGI/JVguNVowX1VWO0BvMDkuVTJIK2c6S20lUDg2O2c+Z29iVjRoZ2gvWVZqKE5HbT0lOD4rVT54MVFaSWt5OT5GZUwxTn1RbHYicmR6IzM6LjxkVkxMK1hHfUshSXlacnU2UGhnbDIqRn5mdTx9aCwjK2d3RT4kQDpFZDVycj5EKFBqckE5Rz8qRXowLzI0I2ZWWHJPTEMu''@;'; put 'put ''Y24hZl5MeD4lcyhPNTVmaVo1d259ciErcltJSyFDJDRPaEtdRGQ6PHQ3dHohIl9qKjkwWT4uOT1iXVVYMWN8PCtSPTR2U0U+eUpjTX51di9PImxmKXVKZ0tKOzUkX0hNcUdwbFUlS1AqQE1YT2BLbTFUPW1pRng7NVhWY3ZdXSlNfnFKPzN2bUBgJDw0TEN3SH0wLCUrRyI8fWVAYz9eWEgpelEp''@;'; put 'put ''aX0wUFUxISp6ODJkQ0k2Wzl+LiNqSmQwPlY/ZDU8RCNfR2JDNCw7MG19fEVERlo+KVA/MkpUPDdYMTU/PmgjX0VtODJ9aWx9UEZVUGBaKGBCQlBidFczeW1XVVZ3OnxRQk4vVSo2ZXsmR30zKTZTUEFMbVVnU3YyVWV6LG5feERoX3x4IWBwfiYjXkFbdFJmQio7PipNcTZRWFdIT3Usa1siRWNb''@;'; put 'put ''Y3Q3YE55Q1Jndzk2MDhiTXsuOWFeISRBVW5DMU8uKyRTSjVqYyU5PCMyfihHWCwweS8rXWdFQG84YV9QM3Y0fiEyQz4iNl85QzspSlZyU0k+dHlLe1s7W0ddS1l+I1kmcXZLXl1iWnVnWDYoRiVQNmtkZTFdTSRVWl1gWW8hcWY0ZihSMSYuSjNEZkc2YiF1bV1WKGZ2KC57ek0yajxDUjl8fiFF''@;'; put 'put ''X2NrNTZXUUxKW01FOSpFZ19hWFg8cllLUiRVK0czV0JCKHBJZVoqJXJvQ28kRXxAdn48NW1lPU4sendoT3dDNHxqXjI1Ql8qIzB6UXQzM1UyeixUW0kqKV1EIVBJSWxOKXt2JUksM0orYSV2PnhKOVR5S2F8OzEuQ11hUzR3fFVpdSZhMHp5RGJybm5qUndqQVopSVEwbWAmSmJ6VEUlfW5wQkkv''@;'; put 'put ''Q0N7PHAvc1EqVUR8I2E3fW1Ia1NMQHlpYHtddy9QanJYTWJQM0duWFl4PipCdC98X0VMQmlSfm4xdCkqJjlnQXw6OT0yemhPTyFeSntpW2ZHPz96WHRKdnU6SWVpUmo8eyJAOnI7Ui9VS3FkOm0rMWcpKD58fVJiaTxseW42YVNpU31TZmp8elkrR3BbTkphKT1aIWh+OnthVTtXO0BQLkNPc3lm''@;'; put 'put ''Om4hXj04azVtekYjSEY+SzIpa09UdGRydH1lJG8yZlp4UVVJPHpQQUVCMzlfe1ZMPmJwR3YpUFhCXitVZS5qeGE6TkpKMHM0bnFMUTY8OVdwL01WTk16aDoxVklES2x0elJ+P15JSFA8fGxHZ2g+W2dNUlgpfTFafEhye35EfXJhS287MkA7SiRGV0R7bCIjP2RgJT15MVo+Z1l3MWI9Zl99cG5t''@;'; put 'put ''JFdJaWZ4VmVtUmBsezsiQkh4bzw1MntbMSxEei5delchJWdvcjMoR0xMTmpUfHooRFZwLEczc2RLRXduL2VPJDR4fCteMDoiNVlHMXRDKzldN0cxZ01tK2ZNNXN5THlhU2hpITpZb2pmaFcyYUBsTzc1W0hwaDV6LkVfOjBvUGEoSXB7fmpIcSVnZk9QdC5HWjZgcWx2cHFpM0pvdEp1I0EoKHJ8''@;'; put 'put ''cVAkM0U3cXp9LjJGN3BUaiVOZTlbSTgjSGthIyFtRy9+T2Z9dzo2KVU/PS9QbysxQ2cueGI8aGg1Il9ObjpSdllYP3tLOTpDYltYYU4yTis5aGZmI2hiKEF8JVg/Q0w+VyYoWzwzKFFCfmQ4U041NjxRdFZPM19mODw+eV42S1VkYXokYXUzOmNlSmEocyFOamMoM25jU353UUFZSmxfSnJTe0ss''@;'; put 'put ''WzozcEtFRS5nTlBRPyh2QGVBXWw/ZWdYODYyYk5SXlJ0dGNwY3Q5KFFtYGlTUnlYME9KZEZmWzJ3Tzh4IkR1WzI0UE9bVDN8cjttKG0rM31EY1Nbel5tVGpPU1d1V0ZdLlA2TCwvd11DNiE5eVtIcktjb1BNQU1DJF86a0klJXxMX1F5MFpzQTNvMnZLT3lpcyE/b2Y4aWolXnIhcF1jU01kTHtL''@;'; put 'put ''QDROIjM0TzZWeE9WVXs5JDBFWmpSeXJ3N00obXJ0aTJMMmR0Ql0pRWJqcXUuNXpPP05+TDVdeD82WT5WTmpyJlVje3pYWHNHb29hXiJsMDc6UUs+PDd0NGlzPWdXUzEvJXkseT51LDxTKH49VHw9WCNZazZKMnlebzgmTGZvcGwjSnFJImFPdXheX1tuWnx8NWI1XldkXUAzR2g9JnIxVGw1dkJ6''@;'; put 'put ''TExXN0t2NnEvKXhKP0BwUG9tKDojYGIiYmNkcHMybS97XXdXe3hxZFBXUnJCcUUlZGUkYHIjfnRJWVY0RUNkODRJKHVEfXFtRWdsVVYodmQ2LkZZS3ltKSl7Kj9zSSVBYV5GeUp9bWwxbFI6Vi8/byNFJkYoNUR3eWY2Wjd+cis0b2ByUyxdeGBneCopS29HX1pmaVRxcCNScUQsak51a3ZXLjpg''@;'; put 'put ''WipeT0ovQV5QWXElcEIwIVZZOSRBT3EqX2l7X2M3WSZHMm4vLjphM1N2Uko9c2JzOFQ3Ql5Aa3koN088WmNUWzZCMCNHKTRaMVFOeE1RRyUhXytIPWZJW10sW2osYE9NOlssd0hAPXVQeyE3K0RhdDlfWCw5OTI5QDheWnBUXl9fbj82YUN2YkMhaWVfUjhEJiE9fGRpSjkybWlzKkNZVWRfNVtV''@;'; put 'put ''NVplVzpAZytSZzsiUGA6ZmhuVUtmZ2RKRUxaW2EqKihHInouP0MvektBSkdTPGFoMW5UXXQ+dTpFPjxLYVY6MV8iL2JNXnl6RjZXejQ/Vjgscn5VTGQwYElQNDMvaiN2S2NOUlROTHpkfXU5cTFCWlltY2l9Rz5acGkwOWFhVWhIcG56MCgqOnc8MEtYdD9TLko5YCxBQ29OSmZ8N35FSzI4aSUv''@;'; put 'put ''ODIxNFhyN2p0cywlbF13UWcjVHM2QU1pYTxEeEdZa1ZLKUp4OSF7Z211UyhCYF53LHV1bCldbUFyWFtsI10mdjB1aTNzZDImT181b1poQ3MyI3V1ImIpUkJiRlpzQzJQOnhTOExyVDt2cSVpWyE8IXVvVy50ZStgQFA+dVs/fEc1djUlPyY4TmwjdjVjejApS0Q+YnZ9QDh8NFhUbFF1I3hQQDxv''@;'; put 'put ''InE8RSVjPisudVNxfGliK0tXKGRERipucVteRE8sLHFLP19bY3hac0RFVC59IUE0STh8UEVVOGhiemheVS91dG5WdSVhVD9wM21aWSYzI3pFTEFUJjNlPHkrP0teXStDS3h7Ok56LGF+XyRsMng0ezNJYlNyfjNNMVdGcHVEZnIyKnNOSlV4Y1NEMXA/K2YkYjsvWS8/Nm96L2lrX0NCOmYqX1Y4''@;'; put 'put ''R2B6NFshKl0/bl5AQVEvOV4vMnJfdEJ6SyQwaj9yQ0tpfi5odXowLDpNej1Yb01vJDg+QyJMfjpSW183RUkwO2pCM3h+WVkvVy5EaC5dYTR8XjRGZWVJR01mYyojVlthekRpZXlSZEpxfGN3P2Mqe3pOMTFOOXBzQmBdIUBATFp6Lip7bkJ+dHwjanpPOjVeRSFqNzdGWHkyW04/bSphQWh8QjxB''@;'; put 'put ''Ind9WlZtTUFVa30/SWBIZGNyNy9IKVJaVDZLW2FfUDtUYU1zXi58LjgiUnRHT2pyaildOHR6MDlEQ1VbeFt3I21acSReJnZXXXA4enRzW3ZWLjQyaTNaLFBSNWxKQ2MoMmxdaVdzaVN5KEMvfEtMKjA7dG5HMUpKSVE3L0ZDOGd8UjFeLmZbcH5aenZTWiUqcUBjQUVyW1hMeVIzLlFIKWF6WDJq''@;'; put 'put ''cCVYTVNGQXFMcCNpVn0zKC8hTk5OfSIqcjpDU1NHeUguMHc8RWk2T2F5W0EwJGxaJC5gPFBnQWZndFpMKWppImhJYEQ9dUpyNiV9UiIrWjReczhScn4keUY0e0xTe0FlKTR6T1I+cGokU0dgKzVbJTpnfDlfaD5BQ0p2cTpgMC4saj5JXVZNdTRqXWR8KT45UlJJUGl4Kjwqfl09SXhDPzxVMEc0''@;'; put 'put ''fDFJT0JhLiskfVpsZVVIYFtwbnIjeUAkWH0ubE9IeSVlX1hsKnw2NmdqKlJpUSpDPSNoWjBEYkZFaXFyK3N1M0BmXzFoVjZgVT1IbDdXeUkhZkVkSSFNVjwzL3hGLGI4UERPUmhuUm59WzpsLDk9XS5bfFJ1OlI+PUVuMUF5PkY6NW04ajUySChDaDJlKkZqcG5kWkB7YmBFTXE9T2tfR0VQY3hM''@;'; put 'put ''dEBpcDREIV9gKkMsXW93KzZ8KjMpR2UqNlNtdE05QTRZV01RKlY6PEJJNncyPi94V3Q0I3d4bV55ZHVaMDh+YVJNSUcpdyp1bHdzMTZoKXg6czJ4fiMwNFViUk03d2BpXSNzejE0NGwuWFJedWUhMVd5VzFwU1NpL117cT50bigiSWFyPEtzO081Ji9WLHs2WGRGLklKU3k4PENmbm4lYntrfWgm''@;'; put 'put ''LlJheWxKe1c5RThzQmoxSERTOillfUQzZDVHaCs6QmsvQlI1W1poS1N2ckBETjwoP186RGt8Vjp2N19RdD5bU2U4akRBYmA4WEFdR344RF17aiQvYz9iMHV+QHhVbiFNYDI+JmlaJGtHcWtUajZSfSsuW11ZX1daZE9rJVZ9JUMhNHpSZ1hyV0JTKjZAaX0uKUp9XloidigzS1ZtIThUWzZERkF3''@;'; put 'put ''TX5Ia2JRWXRrPnQwO01sPzFMLD99Xi5+RWRLc3c1YWVLfDk6UXY4fTJrfnUiO3pPRjFfIkExTnJKPi4mImp4LiQ3Pm5BbnZIcXBAd1VsRW4zcFQkPntOS1IidH5odG8kUVBBLGc1OXFyfXVOXj9BS3NJIXtRYnpyXlFGIj58L3JZcyJRLzU3UUx4Nj8pUSVpTHBhU3dCIypQOzo1MXJaKSohaFFz''@;'; put 'put ''Z2FoWjMvLGRgT1tAQ0EmZU5PLCNOeDR8Syw6Jn1LbkJjc1ZJSXt+aCF1X0FwKFd8NSpLeiw1JnsmOShKUXhVQWBRbnlOTipsaXduezBeUzJAbyg2Nz1mSGNbJClkfj0yaElmaDlvZzdkcndFZVpMaG5oNXojZ2lhSD5aMVlaO3ZMeFFXdDAvcVp3JkxWWURpaCUxUiw2ZWJrXmlsYj5VZFgvNXF5''@;'; put 'put ''VVhvWStfND44YTFPPWd2RU9SdDsybSZNRipQRExQO2V3cTdybUw/KFpERXdbPGRlP1FXRUpgPF5JcjNjLGFAS0hma3FhbzdNeSolWlpER0x0MEJ+bFdETUBsP2MhaSJNd2J5PlFfeU5udHhAYUVhKnlReC5EP3RvKEwkKXw2OlVZbUxKPUwjTUxnJDxLIkJCQnlaO2IhbDhhVEJVKkMkJSN7aE9o''@;'; put 'put ''WU8/ITpIOUteX3lYRElKR2V2I2lZeGdpLyZ0LiNzfmAifSRZSTs+bm9FLktKJEN2USpeZyVjNCg2SkZvTlUpK2EqUlo3IXRNeE9zMSt1fV1TVXssbk5nK0xGWUszcSN5NUEyeWo9U3Ekem0zTiVtNDo3em5YOSNXOUwkUFFNTS9sMCZZUygvV359b2pgN3hDbS5uT2tPfCJDNzB9Qlo6fFdYeU9r''@;'; put 'put ''NnRUeFdLTCt6eUM0eys9bl1kMFFPPXAxOkVqJU9ZMTY/XVd6UF9VOXFOS1QyJGlpTjw4IlE7ISYrRnB4YHp6RGUxaHlnVG1bKVYjKnhvck5WPnJWYF1kVmNga0JbbC82MEh8W2JSTCZ5LHwrdSFyZVsmQW9odTM0X05hNj9ETjo5UCFeam1KSkdlckc7a2ouQ1g2aTo+RUkoSFFJWjFIKFoxJG9+''@;'; put 'put ''fnpHdWE+QXQqRkVmNVJwOEMlYEptIigrVFkyWjY+RXQkLHJUfFhUeVlhWmNlRipZdCR2Nk9iUzZPJGR6cHpicntlRT5HR0pXeUN5dThZR34xU3I5UipVNldaWF9ncV1vMkssej5vd301bSgiTF5TZWlQR3d6QFNrQ2clS2l9LmxPK3cxenpLL0EkWXgrSEMoaXNleFteS0QzO3x8MjhLKGIrbFpR''@;'; put 'put ''cDlgYUYoeCI6djksJkRTWG4/Jk5eeylfLHtDXXAoM3c4SjxdYFVdVm0rRmJWUmo5ejpyUUReZztHU3VXZHE/aDwvQ0FabmFbYV1pVk5KKj09YnQ4SCI0fSlBI1h6R1o0SnRuKm5YJkslcUMqaDlQXldtdTVdczlocEplfVRVN207OGcyTjwvbnh2T3VGJlFxYVN6aGUjR0NZTlhBKmFTQEQuR0V3''@;'; put 'put ''eWl0UiE/SjYlXytsQURLNmNdYkFUPyVPWClBdjxZN0tBX05eK3B1RjxeUXliRnt7akheNEshZ0t1JikyL2diUUlzeU56LElFZFFTPHN7c3V1SEYySEtsUEkiQmVXVT9LS2dzI3ZbaSVaWy5kYG5VaFR5d34xT3V0NVR2WmBmLEhfVC5GbXVuRXc7Mz53fnZAOkZ9YiNUfDhaM2xdcnpERXlbO31Q''@;'; put 'put ''YVguSjguYiw0TDRRbGVvfmtaK1t0Oz5UNWYleyo5WmUiRTNERUlJWS9NZWVbaCV5I3NsQnwhL3xgOzB8UF4kaGs5RkJSY0hvYmVMUlo3cWUxY2g9RU5nXyx1WDBKKjF5WzltRSs4Qlk6W0UxPi9IQFIme29IOEtAKXA6Uk0yVCw+TWxpPWZ6Z3I5anQuMWgvPCI4UlM7P3x9Zj9DcWEhVjdJZ2pj''@;'; put 'put ''QWRrWDg1KUZeO0hgMyhRTSo/JHhrWVdPdCo9SW9RSiUxSGksbG0oayw2ckA5Nz8zeGhOeW1hLnV4Lz0qXiFvR1d7Lz53SmZORio+RXhAPkQ/PU1Pel8kLE1OKno1RUtAdkx4VGMhUDA2PD9uOFFYRVRNKF1pNj95QmEwYHMrMDZ4KEZBPDVlI3k1PiNNfmU7JWxpNWpRWUh+RzxRTEF0UGE0NkJV''@;'; put 'put ''PF9dXUl2MEg4eTApKH51aTFJNHdANls+VG9GPW18Q0NYNFpnem5mSn5HO21WIVZXakgqPHxEWk93MUF8S3BqN3o0TXBGdGhPd104fX0lJVciYCNyVjxMfDt0L2dCMzVOYDR3bGFKQmJvbk5+JEBxWjsxezVZci5veiZbX0ZsbVlyeTZsOENDWkIpYk97WjNNenxLPmRocj5uUHVVcSFscHRCPios''@;'; put 'put ''Tl02fDltZ2F3e0kiKC5FLkxwfW8oL1RmS0tmUHpGaCZBQF41JTY/ezpBWismWlk4cEEjLmt8eD5PcTZWZk1LZFZIaVk3SDBObEVnOjl9ZXV6ZV4/by8vRkRxNFc+MSU1dXZeTVJdbWlVUUlzeklZX1NVcjwlXmhFQShgUChRJmFhQU1XIigxSXUzYywvQ1N3c3V1ZkVTUkRuI314Q0NVc0t+PExI''@;'; put 'put ''dVE6QSh2O1MwUmMqWXduWyliZGs0RWBHRCY0fFowaXldMCM8XkFOZEVpZS5ZbmRUe0BMe298X0wqQ1YyeCswTDhZPWI5QlMvVGVjenFQeXRHP1txWzhCSDI5PCFyanEpLmJAQzsidDo+aX1ZSSNoX3xsQ0NQamtVZiU4NnIoMUZzTEZZbl54b35VdiE5Lzp5OTJdNUloJF1BYnVLeE5UXlJ0fV1Z''@;'; put 'put ''Uz4mUlQpVXV6ZyluamMiTFp2dzIqdm1rdV04LnR+KVB0UGAvTVQ9S31LdkNCdS9pOzpDfWZZOkxUREp7fSJJVWJefXswPUU8fndmOF9dcXF0SCxEeltoKTI1cTFheH0hem9UciVMOW8sSFdqVCU3NlA3c2NybiFYTGBENjQjT2NpV3hGMXptL18iTHt+QzRuU2tqezI1fXlMIUsjOS9qPmFJYGhy''@;'; put 'put ''TThxcmhEIyNfenE3bUxfKGhNaDE+N3BzSmE8a1BLbFFQQjpdbi9hYlhqLDFYKjBJSDVZXy9qT1A5X3RVbjo7Lng4MX5xJj0paWk0YFtvbzd+cEVNNCkpJGcpMT05Sz5zYHpdZ3VeTWJoJitURlJOPyJZOzwifl4uWGZsUCJmJSVgWzhIfE9fPEErUU1nRVReLjZyJnZWPlgoWGRkbFdrJG5beFc8''@;'; put 'put ''KTVzLyQqKlo8biNJS2xAI3ZyNHtoTDMvMU5EfkJIeyJxSmo3Plk3SyRdQjJbZjIxKXx4dytbQkd9ZVoiUFdRRmZKP2ZqVG1gSGtEVH4pR3N4aGI6Xn1WUm5zSDA8ISNOUFs5JV5idXkuO0c9ISwvdDIqcGBHMTsydWdVdy4iZEp2YW9kMChLSXg0cUg0InZFQHZ0dGk3ZFhZKmQiYFA6cHAhUElJ''@;'; put 'put ''MHdxJENJQ0giRzZ5bG5aMSZrZnh7RWxyW2ByajMwZXwuR2N2V1NlWEpXLCxFN3YqKG1QMnIxX19pNFUwTFdAVClMeXkyeTdua1U+YXJlTmhVTmZoNFF7OFQzM0NTZjgoNUVPLkR1QDF+ZCZHclEmRlJwZyM8KD5Qfls8THQ2OmdQKkB+LEFQMyV4MXh5cClrfG03bjZGIW95KyxtSUZZRVZWQk0w''@;'; put 'put ''fVlFaEhfaGkhU3pdSWM/SjRLSkJ6WUNKRGB4Mnh4MjE5YWYxYVAvKkJLRjNOJldaejdUNnIlfj56S2E3RE1URlhNS3NrZXdne1RQKT56PXNXckl+eEw3VFhqQEY7N0BpL1MlRyVwQDpIVVhQKVJWR0ImcGVkOCJUfnVteDpGfEI2TXFiP241ajZ8dSVMa3xDMHpBYXh6dSFsQC9rWk9qdntwcmJq''@;'; put 'put ''c3dnUGZiZVpKJiRfIlVAMD5oUXU5a1l5KzlXfUxHWFhAWXoxMFQ8eFNDOF05Pz18fmtEfDhXO3BlXmckSktVajh2ZnlqSF93SUU9b0RqOTAkTWheamRgTjR0eVUhUzVYanNwKDsxL3I2aW1MdlczUHsjMWhON1p9UE0kVEIiZ0VMbityLCp2UnxYVk4mOT0jSlZYYDwuYHZ5PzZkdDI9T2IoaDB3''@;'; put 'put ''RW1Qb2x4ZUg7KDs4aG0yZi9pQjh1RnY+dXlRSW4mKW0/cVtraHhhSy5LSDNyfGUuYktKamJkfXUwOGl3ZHw1aDROPGAoTWleSGN7UTlfQCtqW3tIZVchRUBvPTIpPXl8JFIjRG0wNGZ+bGM1SD9YUXhWUl96dSwmcCJzSDtTam53W2QkV158IyVVSmQhSkwwMG5Pe15AQEZedWxKJlNiUF1wekBD''@;'; put 'put ''dU04UW1oRmhTPlE/X2x3Wjd0b1ZfbCxDLzxhRzBWWHUuVGdrdSo1OWVlX3B5ZDZWbT9ne11vMCE5MGZXO28oN0VJa3hXOWFmcWVAVThhRE5YWjlyM35RJk1nPEc2eUttTyooRnBJRWYuX1Z0P2YlIU97VX0yT0h7Yj58V3MvOUp7ZVB6I0BEZClmMyk5UFd8dWMhbHdRIWU2UkI9WipmfSVYYkZE''@;'; put 'put ''LHU9QFpxellJKFI+RlJ9amlOfmhgLFA9PmlKMiZ+N3RvWWovcDYlQWR9LlZ0KUlfSSZKWTcvZ30ydShUfm4jYWdzfHw9TlUhaW9IR3dgeyxfek5MQXZWck8sT3drL04uLnE0JGtJXm50dDFvTCNbOlQhUnB5aHdUWHIzfiJzLGhjS0tnMEVgPSxMUUpXTHJDZ0FRP3hPRkM0VHp9cmhmO2lTNHBU''@;'; put 'put ''eitZdWBEalo9N0BXMkV8ZW9uQEJdTVQjSE8lVU1DWHtUTnd1dzwrX2hSa2BdU2NGLj9odUxOMk54X2leUDAob2hpRlo3eHIuOSp1Rzt5QmdoITUvTm1qY1FVZWxVeW9aTk41dj1aKUE+bm01b1hIWChOViJfZUxoRzZTKFVIZnJXWEg+N0xUfV1UWTlGcE9DWz40XmxLbURqSC4/eWohbk1KLkRZ''@;'; put 'put ''dDYiYGwocmZQLD1IO3dLWT1hYGFXSDBIRURtVmBKTUkrZTNZL3hkQyYwJG5EcEYkQHQwfD5yK0t9YyxpSUpVbFJ+bD48RHQzW3s2b0pwMzJebCR8On5VQG01dUkjI0dMWWNoRCJkPCFrNEEjWU4jN2ddNCkzdykhUnF0TzlzYD5nd2FwMG1UNTxGZk5jVlpvREtQJVMkNmtHNDo1QnpBJll2ZDRI''@;'; put 'put ''aXIpWkVaeVZHPm85K1BdM2c/O15GVXtAekNlNGF1O1MoUFVvJjZuKT9TXTZFKUIkRUVqQ1AkX3pGZmdrX2dmOjpNTndGT0grJHRqY3wrXyRuLj0sL2o3QExhWng/PnsoeGNtYjR+OC5bL3hwQVlmcUo9L31PV3B+N20sJllYU3RCS2Baam41OWBtU2dyTkRmVF1gbVlWfWl5ejB6PS4iJmY7LGc+''@;'; put 'put ''SCUqN2hXN2xgTjdpa3FdOEpXKyFHSiJfZjgkMVB5PF0jPntVJF9QQ0MoXihTVFk8fFhiUjIkNVdSIjlCZVloMTwpdjYmJCQ0dCJkQlt6NmsvekM9RVovW2ZdUiQ4IikvaUJmcGYzNmpoQ3ZCfjsxLlhiem0rP3g2NXgvWTR2bUwyQj96ITNHfF9mO2ZWaj1IYkhicClAMzhWPiFaczBFbHFRMGtt''@;'; put 'put ''T0kqOTZMcDZbYiNTWUNtODZWJUR3cGZAZWYsP3V7IUNfJS5PQykyMF85LFpaKj8uUjlaWCwlJDVqQyszSzxMInVfUTxHa1ZjMUAmTyp+TERxMzd1OXRrbWxBJmFiTD1NVjpLNn1wRSorZjNQOHwxZzZYVkteL2xYcyhgc1JqIm1RMCt9RzNbTj1kbVNjSHt8WVlpN306ZDZOL0pfPXxAb0R6QURr''@;'; put 'put ''V2kzPHVlbCo9WGZvSCxbNDx1Uy46Zn4/NH0qb1dTcUolL2hpdVFBYW91UE1oV0A+Vyw5dzRzdVNVdThTP089P0A/bEVKZW1We2klc0lEI31+eGNKJVhmbE17L2xUIiIpdWFKd2tfaE5ZQ3A8VEBZPHdkNngySy5tcGNnTFdleDhpTVBUZC5DdiMrVz5jRnFNcDopUVZNaFUkMXMvR0g/V0ojK11+''@;'; put 'put ''KjNeSlcqYFhSRjxLQ1IqdlJMTm06ezY9KTE4IlN6P1o5TWIxQVcrTXNNYDFOa0N+akc0biM4KXh7ezNdIVExckdjakRWMVlTb0N9bGVLRHM3QnVId2AvKDc/Iz1mSCZZYG5xLGJbRnlOTSx2SmVLKjkjcEdONiVKSkoyQnV8U0dhNl10USRNWlFHW2dkVE1pfHtqbjJXPE1SVSFoM1ZrcXR0WlVV''@;'; put 'put ''fDp4diw/d2VHQGFyNWtdPyhhOllXPWcxIXQqfkdMbixMXVM6W00sQyN2UFJeeU1jTyV1I25rfmAkelEoaH5DdSgkL3VsP25EY3kvdTdWe3VwYFFUaHVZelZ9fVU1NUhiZH4qXlJ8Kn09VGQxe1FRQ05BP0J9cVErOl5lYGxLM1JhZnokISFIWFBLd35PcSZ9WlJ2IWtdR0FIJU1TM1hLbHlGMG1x''@;'; put 'put ''NDsyZHovRCg+V09VQHZ3c2FDJVJtLzRxdUBpbWldclV4JGM7Y3wiZzxuQ2pbXz5Rb0lISzljd25CWyR0KzhlLmxHfnF8NGkkU0QmanwoQHQ+JjZ2aF4uXlpFRT1EMDxGKHR9PXM1VXleMC9+KkwwQ0UjPH5kYnY8cXBWfHpBSXdGaHN1KjRlVDNqOU1xOzBLcWdaQUhxZHhZej9Ecl8qYmIsTUI6''@;'; put 'put ''RXhjclRecD9XQXclND9FYzVmWmt3RCgsYm8lcHYoXlJ8ejhJOU5dOCtBSDZQRi5dRCsuXShvYntocVp0ZngzeS4vOCF1QEZLaCJsb3B+ZmRTUzQkN11xO2E9Wkl8IXVrLDYsfTA2RCt7PG9EXz01TCtqS3dBVCVzJWE6bVJYSTVgKz83REpGUmB1eG95PCpoSGxtfHZAMSk9YlZWPWleZCYlSVA0''@;'; put 'put ''Xiw2fHhHUW1qcEA2JSRpaytHISxjPHR9JnhxT319RmpvMCNFazU7NDhmITlJWmhBYWI3VVZHTCE6TldJbCtEbS45Jjd9M19SZV5OXnpqZEE3RGtaQ1dTK1JlSTZOUEs5PF9wMk8/aSVzSmZ9RzVvaXgpOnJ2O0xxVG06O0kjWSl0W0J1OCNAQnpQZTAsOHZdJjouX3tCOX5Mck5CKElaKTw9R3xE''@;'; put 'put ''K0R4YCpGO2UpVFMwZX48ZCxxakV6d08lbFRVYD9HV1M4THV9fEQvNTdTeDR1Q1hIO0RKUD18VHtsWms1Lks3ekpWQHIzQmEoYElXeyNtTyFaV3VmPnVsRXs/N0JDaVgiJilmKEBrN0hQd2omIT9WWjVdeF9dODJkZTJAKHRnK0Z1PlMofSFfOG9GLG1aNENtYXxkJlgwSzdwP0NQeGNRKGNeR2JV''@;'; put 'put ''TllFWjJGX3o1RXdSXUZOeT9MWW0mNjI+PkZUMytfKCslNUdIaD5mcG1kVlBmTl1yaHR7PGZKaD5qZ3M8MiFSMUY7RTR4I15yUnduRk1gcUd+XkhtemN1VHtnYipIM1JIZDlJVzpOKyhBLDFDVDhdUHAhSFp7PT07NS9lPXdmV05DbFpvOHY3TVlIVzFAVnUpZixONHMsZzdKeixTUzlAUXw4XShi''@;'; put 'put ''d1Y/MkNmR2F9JCJaeFp9YC8rZC81XkguPzxWbW9FNyRAXjMyNmVMV1AwKFpQWjBmbntQUDtbeTtyZ0gkPSgsTUlrZFU1KSlSVGUve21oYDRzfnl7Wyolal4haEVpNHxYKT0zLnl9I2d7Ln5bb0o/SDQhWUJ0bkp4PypoaSYxbC42LGIjVkYleDlsTCFjfj5PM3ZNMUtITHtCOzNRJHVRRlQ+YltC''@;'; put 'put ''RywsVS5GNC9tPXM2TylTXz92JVkkZmk7RHtQbS9zcEBldkNwS1t3SDw8ZTFyV2M6Lz44ejomfkIuIX1pRFosUl88M1cyOz88bDB4Ui46e1g9PnhpMX5AdyRJKW5hLEZZV21sXSw1JTtMYD8obCsiZjBsXS46dzJqa2N3fj1+dkVIWmFOYnx6P0dbOiQ4P3c6NSowZUVBIXwkMk5EYmsxXlc3fHws''@;'; put 'put ''IjV7ZXF4L1VpcldATSh8NXBIIzlfPnBhXXB4OThzKUM0PWZELmVwSERaOnBteTNePUlHU1RSQmwyKnx0Vis4REdUbiYhYiljYjZldm16ZXp3YnRpVXBNV1JqNkdVPStPQUN7PXVmQmt8MmVPKHxYWjhfNj9leEUsRnp5QTNOUk1OTDtiYG4ucy5qSiFeVEd2VyNtLlUpb21HaFVAQ2xvND1RRyYl''@;'; put 'put ''PyMhbixrP3wqNT45ZlpCOFBBY0JCQi8rZFM8MUg1Ul1KejRmRFVMeGlRODp5PSQ2S2BbQDhkViFxWlhCZll4NXFLMj5EfEFzckghRk8wb1hFPzM9YV1ddk0vaVFEYH4oJkVndiMoa3FVRENycmI7SHFDUFciNmUmWTV0dVVecFE1T0EhUT89dHpFZVkmPC4zYkY3PiF0YyZ+SSZRJjlNMnBMSEJr''@;'; put 'put ''cyI1R3lbQ3RSYGElc1RKZEJnU1BiKFQ0KFprMzdjU1hyZWFSUEFUX3V8STQ1SEthMkREME5bN2w7RFI2c282PVltaWtlfU9lJDV2Ui4/akJZW1lFaiF9VUQ3fSNmVmRAbXxNVkw0KSxAYS80SG4vYWcmUlpac0pgPmwwcl1OcmZLQG0+NDQ3e0tnNlBKOno2K1NYQ0M0bDwqInJRWl00ZmRHak8u''@;'; put 'put ''Qmd7Izt0bzFdI0dsUz1UNWJTJEUlbXdgSE80L00hREN+ZDp1OnpVM001enxlWFZaWXdtdVEifjhRTExkKDtpXXFIMyIreWdrMFIrTWxPQHRlW2o1R1loYHNkUldKQEdDJlhCYVIrZWE9aDhJUU9LNU9tTWJgRWVpKFQ+c1k0QDVPbEhmU0pgNUY0dGQlS15mc31UI3ZyezBJckU6PTp0NF5GaVEq''@;'; put 'put ''Sz94ISRBZ3omMSR4cHJJOCkxRGQxVlBRZFMlKTVCYipNI0VrJWVnQ3xkZ0Z5VT8iPGFUdzwuX3NbYikhSlFMIjZkNXRda144TUpEVWojO01EPVNbNUJdaiFzaS5pOXIzKCsoXnNUaVh3WGNZKSh+JWhfKCY7ZyIqRX06WUt4ez52QCo6RXVvOGtqeHNpQD9UYjFJWTguWH5tZXYqVFdqZ0hNenZp''@;'; put 'put ''TSJaOklaSj5ocUQ6WSVxNWVTbkJzQ0w1YXxYP2MveDB0YVhkcFJlT29DJTxwMDVxI2NnPzxrX2M5VEdeZWpJTCV2R1F2MV9vNl82WGU6dml0dkRfOVskY1pCdVJsPyUxSUtSMkBEW0hTMlp0TWVKTXteSSUsRHleUiNsfj50U3w4MjsxKDhfazpdPXRQIiExaV9QdDB9MyxVKncwMyFXLHlnYWNx''@;'; put 'put ''TTF4Z25ZT0ZoJUJfNC5bemcrSFoxcndjfTFkWExdVDNSSlgqKUFGQjo3X1dOcHZXYFBNM0UhSXBGd3JHVG9EOkp1KVQre1dQcFRxaXF+QiYvRyshUkk+cjlkR1txO29tTno1WV8iV2xGWmhSVzpZSkJmISYwW15CNWZmQTo6KlIoMFhaSGI6VXxUIlUlY3BrYnAua1swd0tJNT9hbmZaJTV4MGZU''@;'; put 'put ''aW5uUV9sZnpDVXZOIj5pUi5QfjZ2RjsrOE8oPEhKelpVN2MpSG9FMyI/NFcqXzJDIjgpRkVCMz9UfXV1TUR8YDNnYC8zZzYvbl4mez0qKTwuI3dxS2x4PT1bUj1QUXMiNV9faHxyOkk1TSEkIntYT0JrRixwO0UwV2h2Lk45MWt7OzclbyYqVyolZDJkaDxsYzJkbTxsJD1JJHhjUCZMbUJSbTNV''@;'; put 'put ''X0VSWi95LH0uZjYzRlFEZy4+PGYzR1lFSk9gLk56K3ZiS2MpP3V6PHNbY2w/UztjdzRrZ0JPN0NSXmwoRm9dcXFAVDU7N2lAI3ZfVCNzMmVkVE96UHE8ZSgrZ2I1dnx0aE1fTipbfDN+KmQiNnVuNjhvbEBdTTxzMlVgek0hRjhEOnNtUSFTOm8ofXtzQ0dOd1RkcWQxKTQhWVk4Xm5wKEBeN2Rt''@;'; put 'put ''OyRXPDQ9XzVgMmdVZDpNS1hLI3NwWksveDlNaSU4WV1VMkhkUmkyVkEwTTo5KDxyaVA3IW1TbVBxaSFlKUY9V1ZHPWhnIWwpPU42QzBhQ3hiQ3xMJTpaR1Z7W1FRTm5EOnJke01aVXN9SnYmcTxwYG06cC5FfXNWczlmSnY9aj5WMmUlfUBtdkFvTX1fT2k5Mj1AK31KeTAzaEkuMk5YPUk7U3dV''@;'; put 'put ''Zn41a0Vjbl4zJiQpK10xPFgqO050Yl4hUz1Bai5TdXRKaChYSHdEWSFFN19+KXpoO3NhIkR9clVIKjwsJlt5Vl1eeyUjN3c3Y11HY3EpST4wfCNTSmxvTXtLQjZQJVhnJU9RKDsvX3d0W3VJfDlVQD1KVE8rcnl1MVR1PVBoQ3QqXX1fcl81Q0Y8OkpWOGpfX0NqLzdHNlZeTH09XmtrYytUaT4i''@;'; put 'put ''WDVkczEjWWNOe0MxPll7Y1I/PlprN1hZYlUpVmRhZGZgfjVRVSRzUlJjQyxKISZXfkwhZXlIWlN5eiJkflVafUxAS0tEaDAsJi9nVHJTNDVvSzojc1lRTU5KVkB8YyZQUWF2Yl5DWiRYLjJqJXZ4R3NqYy8qcmcxYUZEN3A3YV1KcFtbRVVUbkRJNj9FOW9FWkxBT1FMMzRIJHRvanoxdEBqO2N5''@;'; put 'put ''L3ZxZ3c3cHJOaHFBQmNuUl1iR3xrfWpNaUMpdixvO1ouVjA/JiZ1MGZPbnl5KXVUNlYuRylLKTVaWnJqeHM2YjEkT2lrQm9qbyx1V0BuVilMKT9eWEd6XjA3VjxGITFINV9fWUl7Y1R6OURSU1dRQ18rckB+aCE2Y2A5dyEvXypMWj4iZHNdKEJhTGY4Ln1NRk87dlZ6clp5IkgpQ2I5YDsoN2Y/''@;'; put 'put ''Nn1YaltTbSspfEVIN350K3N8WFZAPFVRbmZ0SGhhKmtyQ1lrdjxnYWksO3QkUjR0ZnE5O0Z2fGtdMTpFWTNHPENYTGZMdUIxVCh8SXdUTytEajN8OFY4NHZtU0hYYiw8Iyp6KHdfUkpya01uRkwqUFRiN1U8K016SVJzKz9RNWRiPHJFJSVlcXB4TktAMzlQZFdGRU5fZU1YU288SVlFRC9pOzhs''@;'; put 'put ''QmZ1Z0FDe15keHx4NSo+M0YlbksheGhkRHxLIVs1dXk4OHc/LnhLS19DN2dGKno5Mlp0RzphPnFJOGtSPylROUxlOnRLOlE6IV0mcUBOa0ZGPWYvVX1TTT8iNWJZM3A3P0k3O0Vme2dweEpzfnMjNitLP0xBfHt1aCU0YFhTKnl7KDR4akYhJndXJWk7fmdRMn5uU1tsMiVjP15nQzBnfmhvWVsp''@;'; put 'put ''Q304RSU5JmcqP3JjOlt8SHIqMnpAV0l5IWRQXUpxcFZoMHovRWxvVktLSChxdjhjMDsvT05pcU5HLkNGfihCJS4ieDUkX3tFcHhiZSU0SlFOdTNkNmVgKHckJE08cVRMLjBDbCZ3ayFTI2AySCMwSnBkekxAITkzK2svQDB1KFN6Pz5VK0xiTypSdEgqMUU7bEI3RFliV1I8RzZTQXJCSz9FIWVX''@;'; put 'put ''YG1neDkiUjJQMVNybURub0MrR21jU01wcHRDQ0pQYWNrcDloaU1BOVUhIVpCcS9xIWJHV0s0ejxBcVVHfjUoanJGUjx1TyxjN0RAeTQ8bWdFQytCK3AqO3dUTDRPYDspTE5HdTxIUFZmeyk3NSwjcW9BSzp9K2hMPUxCdy5uc0x9aFNUSWJYVVZRK2QvSjN+NylLLmc9PyZxRFA9X1Y3UFhqKVRE''@;'; put 'put ''cz5eYjlYJiYzcnY8QEw4bHhxPyFQci8mKTpxPXBmMEw4LHhESERuY3gzcGNbUG07Jk10YVhCdXQwWGVoZDkhP0RmVUs2TUJFdWd4bmlPQD5MYTw1fU1ESDE9WVMzKCgjZHZVVWh0U3M8dXlQemFPVlY2InEzcSw7YnMmIXN5Zi5QKnR6UUN8dlF3XUFXWExSMltveXlHdzUyWzB4PiUpTHE5X2hy''@;'; put 'put ''YHw/LyEqQ3F3Sk5selIxZSNofEt1YVhGPSxlJFplZDRLSzlWeHZ4eUpRQ25RK1lJMHdxPilmTkcsUSg/dl5KPTYxdHtTMGg6aClGYF1TXzYkVk8jQGYrOStaI0A4aHw1OmxNLDlFUEdwRm9jSXBbIylYXzE5fU49Kks9fHtnQ1FhOD5BJnV0WiRRSExOLCFnWDZ1JUxATikvTGFDKyRxPG4+MiVb''@;'; put 'put ''SUZWV0RGcmVnSzsyOEMqWWhJVm9AQTFUYmZASXxdOyQ6U2ZCP3dnR0d1YzlTZEk3MlRVVlZ4VTBKQD0rSDMjQnpjfl0oVSg2T2hzL29rRWxBaHBeSGB2O3oyU15tVX0hc2AuaTIjVFEiSHIhREJtVzEidW1SKEJ4RiJhfXRaMDNQMERwJEdFcXN3JGFbY15FYz93XndOdnFYJWJJTnxecC8jQ00m''@;'; put 'put ''KmgiJkVaN0lafkV+WCh4JTZaRztxc3dCVCJ7VF9pNXJgMV4vWyE/IVNHPlpsbjx4alU/NGsiYD9veXQkKm1ePG42RVo5ZS9oOT9jZV4oTF8rOj94N24ld15kRDV9OHg0VkQ3KV1XKWxdMGEibWFPN1hAcGR3PH1kPGxfenZNenJWaFs2Vks4K0VSPFtWJVdMKFhHPTxvRVlDaC8pYTgxNWxQQyh9''@;'; put 'put ''N3x+cmw1Oz58K0o0WkBFdCJueCkiUFBuPCtjOH47YUllfDB0M2VfKHA5I2tWMjhDdHN5MSs6RGRjaGJYbXA4KGhKKDtGaWNxWj1FSDJlc2ArTTk/fF4zej5FUjZAXlhkIXZuZllaVW8xd1clcjpRO0lyZGhBMkY+SWMuUDl5ITt3IzEwJigqSUcpKjpiPUx9QF1XaF0xU3w3Y14/dXI7PlZlUFgj''@;'; put 'put ''b3UoWDd4PkMoaWFGQHdJOy91P1MuJjF9UkpEUjU3KiZlXjlfP1ldPyR7dVpZRyNnLFgyZzE3eGt5MjtBYks7MTFwU0l2TkwoV0hYfmU7Nn18entYLi53NT57PjtNLk8+QjxXfjNDTGYscGsqPVMvJSpRQzNzaTd8PnEmYWdLdSIyQH1vM0E/Z01ue3kvSF9ieVo8SXVHQEMzSENeZm1GOz5xclpG''@;'; put 'put ''b19HTXN7Xyw3UVdUfEx2JHM7Y00yaE5idXVjVzdFLGRuYjc/L2k1THEkP1MxIkhvbGpiIXwkY0Y/O2s6LFZzeEB7YUhlLHh1aDlKcFs4ZzFuX0tYNCVVelY4LGlKbD8veG0+O0gpNWBfdXoybjUyQDFKMT1MXzNULDouSzlsYkZFJG55PTxtbEAyeigsK1Upb2o5UjttJEcrWjUuYyw+WUQlPURb''@;'; put 'put ''YnxFN31FLzl4VXF3Sk1rN1ZmJD5Qb2JkIUR5P0R7aVQxM316L3hjSUAxUiMlYn1ySG9TYDB1M3E+Vkgrfmd8I3J0O1I5KFR4STNwXyU+M0heQVkzV0FPe1tFeDdLa3BOMHBYZ1dUT3JmL1t9ckBhTjhzbW0qKmptbDc3O2NSQFU5YEFbeUZTSThDYEZLeHJ2c299Y1dqc3k2U3JKS2hyQ2VUP0F0''@;'; put 'put ''Zj4kPFlJXldRT0whKXJafmY5WDVgb0o4JExhYnoyUkhhdi9bWH1PJUJ8fERyMFRXWFlMYS9zYT1NJFBmNFpXaS8yZFVhKXlZL1E0OVpifTlnZCM+YGx4I2liRjFwQGVCRDk6UzxvTXlVSG5pbiMyeX1nXnVNWWFTVm15LkpdRz9hK091V3VZd2lpbXswWG5VLCtKPlZebWJUKUtWbnFXNVBbOiI3''@;'; put 'put ''S2MlJmBIOiJ4UGBVKlo5Wl0qZG93KUswMlQjcms+QGAxdXZkOWQkajpmVU9WbS5Bdyt+aik2JkgpOGpfbHpbZEw1QVh3ZXJLNClsWHx1JnpsZyluT1M+SntvQHN7R0V5THIkfCNBUiJ2eHB7KjdNPUZiY29jeHIrPThXPUkwalMwTFF6bjZyRCVsV28+SVAkUFgjODFOezthOEwkbUZbVzxMbzs5''@;'; put 'put ''Uj04VSpZSiMwTD8qQXApKklYZmFTaC48fjM7fGpOeDV4TVRoOCZdPSFETDUoPDJ3IjF7Sn4xRHBUNWxjSCx6IU1TMXdJUEcwREZbMENje3pjdE50REltMjF9MGslWlB+T3hEVi5CVDk6LCguKUpIQEkpZSVudyVmN151e1VuOiRPWXMuVHkyQkFGZ0EzJHRwd3xXNkdrVV5tQUF3UldPU25nTDR4''@;'; put 'put ''aVtYSjRHU0tVX1VmWEZgUUYlaT5VQkwhYGcsVnoscDNMRXEmT0hyNmoiXlUpUlRjJGAzPlNkc3drVj85S2pbPnhzbS55Wip+cW4wVzMwQEtbfDFqemFmNkYkRD88SERgXk5gSzl5R2IhIj1JQ3VjTk9qbCU6MWd4P2FufTlVIWEyeHBTJFpSYW5NSyFlbUFKKHx7WmdiMTJbMnRjO0ciPzR9eGlP''@;'; put 'put ''Q2dzenUsd1lHWD5pUStNP18oYEpEXjh3cD17Z3U+JCVAJUc5WFEhYDpYNXMhfHJGaEVRWV17W2MkZ1dPU21pPjdnJmRSY1A4ND5lZ0UyNWxtXiZKLiFlNl05MD9zVlAzU009XlE1QjYpJGVsXm45ZDNie2Mpb3JDeSE0VSl9QVQod0g0OXI3QzV5bmhneWhKW01qb218RzA0cGQxUWhGMmBZLnYx''@;'; put 'put ''LkZrMGEqdkVXfj9dYGJXYnVXcFQuNFFYcURxcT04U1pGaHx6Yyk8d218YGdje1c5WHhGcjdLaFpNM3BiSEZSdFJlVWUke3hKRXtbZWtaVVArM2Iid3tKeHNtSGJQIkE4WDU1azhPSihRSlpwT2BfRnAmRjRtS1pdJDU3WWw/LHh4ZyNzTVdfc3AxISp0dERwVFY3T0BKPShzPXZeVip6Y1pXYmFe''@;'; put 'put ''NGt7ci9aVG18MUxXVm4kJHluWmpANTdKT3g/UyU7e0ttc2tZbWAzYiV5T1toVSZnbEI4SzIuYDIrOzwvXjVzcnIyR01oZTlYbj1QX2pVK1FgR2BJWDZ3K1o2S3c9Y01uNGptLzBFX1JdKXo5cm9xPVgxOEw6S3o0azR4MlgkNmA8eH04QHY4YnZVImw3WC5KQGQpMEZ6R20mclJHKkpmdSY+YiV4''@;'; put 'put ''N1d1TF9wQzpoZ0lSUz0oYSs2Py9hdyV0LElINHNeInt+dzFgbE49VCVNZFE5XiR9RSFmUDBOKzJsZGFpIS5fPkM0QFgsYTxXPEt1K0lbMDEqPyhyPy47JmwsaitlSyozJl5nb0RCPmA7KHFkSyt1b19DQj9fL1AvRmdvZFM5enV4VEx8djZvbC4zWlslRSwxSjwkJEUlWmEhQmVVYmUuWmAkP3d5''@;'; put 'put ''Py5oSyNXKkREOUtpR3ddPD0qPFN2LmNjR2xQTykieWt5UG9VK3xCOXF2Pk98YXVVRllCeSkwVVFpOHooJEswL3AqKD8jSkN+I3FGOGNsUlNUZnBzcTReSjAuVEwiJns+T0NGOzxYfk9sZ3NIMTpzfG02e3dqUUd4Kz9MZipFczp7eHE9RkkvKUlyPXB7JVpoQ2MpZjJqUXlkaDZBb2IzTkRVTCFk''@;'; put 'put ''NThTRyNUZVssNENlTkhGJEhlQz1YYFV3QTgldThhPSYyczt+RHBscVFWIkhEaHh4TjIrT2BqJXM4WmcsRXRrLjVXYVE3TChIZVFTfWs1fl5aJEIxNlJ3W2ZTKl4xKjdIQnJ8IXBwQ2gvI2RaUigxUzFiYkY7Vm1rMHd7TWIvdXosTml+WjU2ejlALl92bkdzSFNpel0ld1Uwc2B8MCNdYHkiWTh5''@;'; put 'put ''eERmMVR6fmpFeCszLGs6IyoyLDtsPUdLfXhlaHhRP2FMI34+O1chJD1UZiJ6fnR6RU1jRE0vekgrUj52I0h4VFdhPCFXTXY2ajZkVyVFM3ckYm9fQ1AwdkRobEJVcTg4Q2JeWCtKJXwoXlh5dG5yUzhtcl1qPyJASU1neWp4YGFTT0MhfHdebEE3ZTdqMyxGUHxPZ1dYezY7eF5XM34hay9UYVAw''@;'; put 'put ''XlYmOEJ4ZW9sYWF6MT9OWXhEJjcubXA+SC5YPXhPVXZvfD5WQVBGbToiYjZSdlpBfW8+dDBiSUFaOlFhbj9JaU94Zn1EQToxLjdzP01gfllkLlhxbV9dQTg8Q2QmMCZySVBpKkBVQ1gjN2xmfjwsZHpedUh7NCRzNT97X35Cb1EjdEUxYCZ3L1V5VG1lTjB7UCZWYj44fnc/I2dRPkBIaTNFXU0r''@;'; put 'put ''fWIsRHpNOlpVbH0+bVNZRzlFRmZqenl0QWYhLH5vJEomVkMzMmxnR2FRVVtGWXdTTUxqPFIpNGJda2MkXVUqR1ZEWCpUKmwmRjo1WzZfODB9YTJXMV5xLlE1IilaIXNVaCNseEUoTDIhTm1MImdbN3ReXz8qMFMrcWpsTDlxU0gsJntIW1dieElfenhVYXZeem0+MH5hQFpxakRqOXghPm9JQFUr''@;'; put 'put ''bkltXk44Mkh2WGh6W14+LnBQLyIvaykwTi9FWntlVFdgRGRdclt9VkdCc009UiE7T0J5LkA5UVU+Rm1UamtvITRdVW5zPV9neCZRZ3UvQEN5VDdMdkokSHpCfERFX3VVVkc3PFVRW35qcilLS3xQcXU7TDhnfmR8byN7JVJ0ZlpRUj4icEV3NEZ1LEF3a3Vfc1lTcHVCKGdAMCY7MSVSKH09Ky59''@;'; put 'put ''U1JrP3NSIWVBR2EoV1BtMXZRZVpqQipbQXNocFhZMGpiLiQ1RHJoVD8uNTokYTQ+QWx9d31ULGUrIWR7O01nL2hWXz49YU9gRUt8X3UuKXNzMSM1UkBhYDFjNl9mTTpmSTQ2RFA2I2tTeltGdU9lUG5gSEswMmxVN3pGYzpHNiF0XT9JTyw1ZFJKTzg3diQ2eUlBInYsdjdLOEhraz8mQ19QdlRU''@;'; put 'put ''JmpmaXI4T04sQmRwdikiTHJ+VFlqLHVhOU54QXJJbWIlKWBza1lwZ3QhZFo7dSIiWWYqbWNMVC9YVmg9UGsvNkx0NiIyMjhuX1olJGNHc0M7eXFAeVFCOklvZiYqVnMqKkpxTCVlYUZsK3pbcWJvb2M2Xj94fk01KTpkUl9JdC5dRitJY1NuM0dhVyp3eEYsbFpaMSxXKHZJRC46SUFHKklXR2Fr''@;'; put 'put ''P0VAZV8/Nng0OXFufUY/S0FPQ1ghNlg3OS8lNiQlcSYmYjcuamJ7eE5kJGlsenwqSzszMldmJGUpU28/OSF7Pyl9d2NIJTNeYFgwZ1osNzdjRGZvQ0gzbWVPPDgqbTs/TT54L3MlfTYuXjFQWzxHN1ZQVHJxYD1CTyJlX0tNVzxbP3srdT1xWmBjM0A0WTt+fHAoSEo5bXt2NCJlNEpBdWc/N3I+''@;'; put 'put ''K0B1T30pRTFnLnAjM3dIMz5GSCtnPXtLKD9kSndMdyNDbX42UH47XVFwK1liMzY+OGY+NkJFM3FIc3IhZmYoYlFXTHZ5MH0qQ1MvOjlsZHN+PnkkUiZkOjdvIi4vIWo0QnZ2PT1Nd21AK15oRzdYNjF9UmlFJHwiNm1nemowUElNc3c8PVJ3QEAjJFVRVERkKlhySV8wYj9EWzA6I215dSIoWjZx''@;'; put 'put ''R0hpYWhoVVUxdDBsYzdNUypAb3cjZ045Rkk9MHhePyYiWmI3eTRJMUR6JVpQbCZ1ZzVqUjZ0UzR9VlZjLmZBOTZHZyRvWyRlSXNkOUIoKHZsaj5laWVUUH5KKW5LZ0lLMitfRl9BdkpMPW0wUmt+ZG5QdCo9dzVIMF10KTRhaUM3fSk/MUc6eEQkdERGV31mcXxLLjpaVVF3TG0vWFF2a35COHh4''@;'; put 'put ''clBkVFVFSmZdbWI/RHh+KDgoJD4pZiU1fnxucWg4VSkwWSQ2SXg3bkRedFBXXVlpUFUsajBRKG88YDFJWVNQVSE3VVB4VFUoWFdXWyRgXUZtMCNRPCFFfGV2O1IzU3x5aW5DbUh5Oyt0Q0hAKSFTfkJHM0o4SGwqOE97JVJvWlJZQSIhKDo6RSVnWFUmcCY1Jm5sZXooXX4rb0JtPSV5IjIyei97''@;'; put 'put ''b3JYY2pSfHgvJDkhVVkjKzBMMiZpZ1RoNm5aaTo6KGldeFIvVF8zcHlwZj06OVhrSUZySWB0MUZ+K3dfalokW2x2Z0tRSUskTSldVnhPVF18JHgyNmtRanMuKlksJVFfWGJZKEJ2OEJsJUpZIU45M2tmU1RTWUZMLFQsW1NQM2VLMF5FTjFZLiwhbCgzYTBLbXx3ejlOPGYvVD1rSjVEJkkiNEY4''@;'; put 'put ''VCp8VX4lTlpMRDdbRnhUPktsPU5pK0BIQj9MI29oRSpSMncsZXJfPmtGfm5WbipnSVJsL2kqUkQ+e0tER1huKiRAR2g1e2UiblZtYnBkSHlzY2JnWFVkSUp0S3NgMj1bKnooRiF+dTQvTmo7WVhHQyhVVSxOYU1mRy5rdzQzK0RCZUNUM2Y5KU9IU0NTKWQ+bV4sZFBXUHg0YF8wLDF4UDglM0Fg''@;'; put 'put ''WU1lX1kyPTwlOGY5YjN4OWQzK354WiRIfVhMYklHOSM/cmJ+XVFHPjc/PjRuNSZBWTZAXXomVzMjSH5eaTdLUndOMURCUEtUJEViRUZdJDFUJHNmMT0iZjd6W2RrbkpvTERbZTs/WW1IKSpzOkRWfFhyXkwrJm1IL3NEaWlHNTJeWC46LylUJS8lemhhJjppWzJRSFA4XiRYU3xlbkhVXn43Tlll''@;'; put 'put ''aXh6KWA0azFkcUNnUlFJMUhSbzg3XShCaW5tLjVBUlk5InM2JS9AXj46KFhqU3NKImg5Y3p8TVlrO0VzLEYxVEgySHh2NzU3cmM8eWk2Ii48Xy4sRT01e0lJVEdFNT9TZU1qelQ1VDxtXzBrUTZZR1JaJDtTblFLSUtiaDMhaHc+VUVZRXZ2PmxabDppIXlLc2FYaFkrWDc1ImpvTTFvNmU1Pm1f''@;'; put 'put ''UVcwU1dCbThHejlwclZZYztLXUR+SWRjfVJLPzdfQy9VaFlpU2IzUldbP2toMUhldUReekZiIjJ7LDV7YW9JQSlfI2xtYWc/UCp5b2JTOytleXQoLDxfakhoX15VUWEwKEpbSX5pdkBGPWg5ODllfG1rR30/O29OJUNwYHNKVFNoU0koX3VHdi8yTyFQdHRZb2tdMkJMX0ovRG5YKGNkXTo2cUhy''@;'; put 'put ''JGcuUWZmZl91JSF+OipKLDV4NElSUXpkalB1OTA0Y2lQZE9BZVgkRHdgTUhlYV1xWHU9PmlMXzh0THcxb291NGVqYFYmKmRGdipIJTFGRXdnbCUlQ0xwY3UwWy4pQlEhQnY8aDdNb1E5fklOWGlUalRGWF9zQEBpMjkpIW9GTENdSGRffG84PkpHWG9XMGR9d1ZxaWxDVGMmQ1V3RDd8Nk1tfFt2''@;'; put 'put ''S1o8e3FPYUVCR0JzPWpHSmtSUXJxVnRnNipSQ3dGVl9hKFp4UTVuR1Z7Wj9iV2hZbVtnUEU9SWxAUSx0SzAsWF4/QmVDWCZzPG8pZTJCdSlzKGAwZ1lCWXc1V1lCYyZKam4vYSpnV0UqQDRdZldpJEpONkQvdFJCS1h4Xlo5aGAyeX5WYTpPMCREfVg5ekBOTlh7VWlGNEF4M09seGRjKSxxWWFx''@;'; put 'put ''OiVSJVtJRjs2fUVXe2FYPEZOPkh5fWk5eT1VRjJrTEJ8W3gpTVdMMVRxWV06PHEvTCpTR3RLYi5oS1Q+Qk17VWYjJmtmJi9APGNhOm8zNzsjKnlDRHNlWmh3RlI4KjR9VCUvdEhTSmIvLlJicGs1OU5OW2d2aGk6RGRddTI9cT1lbWhaRDN5XXVHSENdSzgsW1goP3UuMDorOl1hcykoN0hSQDdI''@;'; put 'put ''fFFvfnFOcSgiSiNkdHY1RDI7djAwMllSaCYvaHhIeTJPbX5LWj1uOl9AWUZLI349NCNMO2NILH0sJiZibWRTIT5ILiVNOTV8NmlAWWJwU3ZJMFFqNTE2MUMwVlBVd1Q8WjBGRkVnIlg6ajovTUF5QyosIkNmSjVdM0wuPyIhWzVEIXVxX0lCKnhybT0jRmIvQFddTk8wajgjOjBDM0JeSjk9Pj8/''@;'; put 'put ''amM3UihddEpQd0Z2fUIjaF9TZWojPyZuTUdten5WYFlfeVl5OXZXTlFVbk9sPWs+ZF9fQzchN2NZKjR0b0EqeFhLaTg6ZnM2eXVlW2wzSF8/Q3B7NSZpaj8kKlNSLjdYWVVbWHI9cE9EUW00eHxTNzdGKUEmPmhMNHZQYisqOH50R0F+KVg4M2BtZXhOOVE9KzVOMClTbjBxVnYhcjAkfmBIN0ZM''@;'; put 'put ''bmcqcW8kMm12YDlKMCViJkBLQlpmSDZSN2hjTTxmPEdZS3BKVywpZDk+WExnXyY0bmZLWEJiWzpJXmkoT2gjQlc1ayRzZGtaYWFyNzJOUUxpbEwxRENUejBjNnk+LlFMQntRKHViNWYuKXh0SUlQU3NweHs6bzhZUnojTmB4T35gQjFLInIzKURaOlJqZ2o2PXQqWH0uL31TcWQsJUoieT1Jd3VN''@;'; put 'put ''KjMudmBmPnw8S1l1cmcoZHQwR3lPakZyQ0N4b0VdYXI1e1IiTE5OeXR0cEVzYDo6LDcrfDRCOGxWNEo9IVlkO2JVSFMxdTVWJTtFSzhFaGNATD1hWVEwOntxLzRMWW8xc2dkemJsb2o6ZEQjWWtNaS57Mkokemw5ZTxZcTwjKkwvdj4kQ1cvIzREeH44OT9DTk1eaWZJMypjKSwiR3A8JmBCfUJL''@;'; put 'put ''bXR+M2s4RFohaFJXPUUhTnt7YC82cll5W0phUlE5K2p1OlpsTkFhQH4iXXVPQExPPkpdcV9xQVgmcW1waWUvfGBMPV8sSjZNSE1vUWliJWtmdTVtWzNxSFF4Yj8xO3M7alJ+Zl1FZFRuJTl9V1RyM1QodjpwbFN7L15sSFhQdyp0KzIzX3RaMk9ye3FYdn5LIWdQT3dXOGh+RVdibW1qaW1NKGxZ''@;'; put 'put ''azlEJXh4TGZheTVjIk1jTEVaWVo1aHREMCllZSJIRFYyVDJ1SyxPbnJ7fjJbI3A4LEIlJGc9NjYqZCE0fTg8TUA4e0cuQio8OF9FNk8iZipkUkpPM3k6PmdeOVN1WmBNMEheQlVTUEQmMTx4RntWa3RRP0JPWVtYVVYwbmM/WHg2cXoobGZpfmE/W3VGZlBIJlt1XXgoVGxTY1JLPyh6KFs8Yz9v''@;'; put 'put ''eHp3RUdrKWpXYWA1dXZLZmswO3dDdCl1OFVVaVNpcExeejNQfV1aYC4vQk4xcX4mLD5aRzFPS3BRRTxJS1ZTIUZUYXdqTU5iWDxYanRYU1UySSQvRXQ+fH1ZZisjT0I/XVBrYT03YUNFLmMqP3JRSFd5NndAckhLenZCUT8hQUQxQG1IZ2YwNGY6Jn0qQVQ/OCpYd25jQEAoUSpWWCgmMkRxdTA6''@;'; put 'put ''Y2d4YWwjbzppWTh1Oko/TzU9PzA7MkowLHxJXnk3aHQxPDgmZ1kzVFVKVU1iTGdWT0lUNi8wSWNeXX07UiQ9VGZgOjFefGZBRE58YndwPnM6VEUpZi8mYE1tIW5ERUwyKjtrP1kkPCF9NW8uVUZbTi9EVT4jeDUxRTlrcCZwenswNGR+UCphdXc2Jl01ZUUwT3VMNnUzbChMN0RwREMmQkpXdHlM''@;'; put 'put ''Zjl3aFNdW0xXUmEwb3pVPVA4NWBQLlovOjVyTW55YiJRbis+Uz9lJExCdV55fCF7dVNEWEkuOSY9cUZvcEMlWWJUcXAmWyVUKzUqXSJyUmorSz9idFskSE80V0U6SjBRKUpaUjhWXWBVOiVFYWc3cStxXT4qWEtHWVJLLzFDYnw2L1ZkQCloK0dVLnBTU3c8fnBKVmg0alh+P3E4UVF4V29ZSHQ6''@;'; put 'put ''RCpRcE5XI1B0bGBiTV1NND1SZ2oifnIvLlhsJnFbbCh+KFtKYzIyOUcsQjdSM1pyeGYpZW4uKDIoc0l+OWZrTDpzUH1fe19bcV1ncFlDbS5PIWdhWVE7R2s3TUgoQ1E7KGYyUXlsSGUjb3NdP0A5Y0t2U2gxPy47YjFSaC5XImdaTkEldFJJQkY6e1hrWVZtekBHQWlzP19hcnFUYkhyUmA6QEEx''@;'; put 'put ''KC9kYUFabCVYSUZXcWNpKylwYksrT3g9L204JlorM01BckZRIzZ7O317akAiVnxdclkzOlkvd3pmMGBCIXFlayxeKGpMWCU2cnRQVWR7fGUkfVtULHd3RGNFW29CeUNlfVNodEM1JUFPfn5KO2JIaj9WPjg+fElkaTlDdlc0Li53dGJqLnV0Ym9MTH1lJCtgb3MuPk8zZ3hvSF54eGdTU0lWTEV8''@;'; put 'put ''dnRibipxan17OD99NXBWV1I1OGE0fD5OYm9bdm4wXmosKG92LEdnfE1ldS8+VUolUEkzTT4mbXZzbXY6PT8yIXIuNkpadCVyRFF0ZUxKWzZDZGksMipDZCwhWlNuU2ojRGFEND93MWIuTk5MNS58V0RNZlBNZ25ib2lFXjpkSVdBbj5fZixCQEUqMjk/NygpcnpoVlFjT0NBNj1lTEYmbXlOTkY9''@;'; put 'put ''SnxxciU3IXtjSH1Kb2pPYywqUjo+bCFqN0JkbHFzMG1PKXBUb1E1JHlGQl5Ib0pCeFVbKEZrdDlTSFQoOSNWQHo4SSFJeWw5MklvNkZHYFU1UGlWL1ArcSR9SF5oOTVCakc0NnI+M1kuV29OL2A6azhOfHZTS1ZLPiY+dE00OWMkJEkkM0w1Y0s/Pjd6Wzw8IlhGQG8vIT14TW99b0t3YTxFNVRS''@;'; put 'put ''QV8jdkZeMHlhNVdkd0FAfnJGfW9rTHh2SVBGfkxEZ1RKPzNrVmZzU1ZHRlokYy9JJiZKJUVsP3BtK1VeSmlyWFJQZHhZXXt6S2B6PWRpbGVzQmNXRWIxdHgmOzVoI2ExfjJNa045MiEqZTZsLiZGai5BKyxTakA/YCxYbXohZE5MJip8W3Y0ZElAe3djZz4oQXgybVBoUjhnIiNEZVo4UFZAbFIq''@;'; put 'put ''KUYiLjA2YVV3MX5DRSpTQjByUUplXXc0OU5vdnhybFdLYExqIkc1QT01fk1AWj52RyRKSEBzNWI+cFI7ejwlKV5EVm9Cc2preD1JVUcoeEVRVHd7d3RBPVNfXXFtJXdTVXViVUsweEB1c1o0XzN8dEZdc1J2JHVnXTs3eyNYQG13fmNhMkpuJCImIUVyTilhcmojR15sTGVURHl4Qywxc3I/MSZ0''@;'; put 'put ''aWZ4fGsoRlNjc2l4QklVdWVYbjldakEpe2pHWHY7Z2BsKXtVfmF9X3I5RixCMS4mQnJaVlAuU34/O19zRysxM3pbVkUkbmdIZXdhM34xXmQub19lZVAjJSVmV0t2eCVGJm96TjRtWW88NnBVR3VLdmMxWzhUQF8vdy9VaW90RUhDdS5wSWopan4oZXxoKU98IShDOU46I2dHRUUxNEokSjUjeiNV''@;'; put 'put ''dW45MGRMUlZ6RmgkeFF0L2koeVlvUUohO24yc0EsdXk/IjM/bjIqWjAkYy5ZfjpxIzRTLmBCPiowIWhgUjlZd2tebSFtRyliXzF7NU11PFMzfEUlajE5ZFNvVzVNJFpvUGtFZ2hbcTRedWRzRyE/cWE9Z1NdYl49cWUzTjdNIUhxajg0IUlMUyZoYWw4ZCNAeyQoKD80VUspJV9CYzRsRDhhNlVp''@;'; put 'put ''VkBse1kkR2wlSlcjZWxLcWMqTz0xfEdZPXwyI2NeS3FzY09FV2c8JGlAZj1DUV5bRDlxSXchMzBsRmYmNHFTUyQ8LDw9cU5HSkhPYil8fEFlVlMoTVg2fj43MT0zb1ZMPWtFIV8pMmJ1fEhiLCtLWkxjdj52WXRrQG0+NWpmXWN9L2VNdX1fdnMka3I3cGEhJHI7TDJNPzlsVHxqaH45TjZLUyEr''@;'; put 'put ''aH5MJHFNN3hfSHxBQUM5cVtaUS9iaWFSLlIjUCY/T1UrKDJ4VUVDcG98YDpuQ0dTWEpKSSpNcjt7UGFrNnE9TU9ld0BaZkw2cHpSWF5dLEAjTXg6ZihBKzIvMClaLyNZVS5jP0xwY2poR2tvZF9BS3IvZzVVQ1MoIWclTG41fVU6PCZUQnI9PSUoUSl7NyxFR3VrLFlNajA0KCFGYXVVZVsiP2gx''@;'; put 'put ''OjAsdS5PfHtiIWNxeVdOUXs5P2x9OTclKDFnel9jM15tSlgqS1trVywzIlcwKXRKPWhiZHROOiohPU5rKWZ9bnpWODNUTl4ydkN0IWJKN0J7MFh7ZVspfmdsLkNsYUdVcWVET1cpUmdqb3BwbjpHRVcjZy9RSXpgXj0kdjNDRXUuWSp0XiZdZnJSY1A7MF0kWDM7ODVPYCg2Z1NPVlopd309eHtZ''@;'; put 'put ''QT1ZQm85NiRFKDNzZnxWOD1sVipIQSU9MDAyaDFwXj8uX2ZgUWUiX0ZQVS9oSjchVSFPcElYciFeKnt1eC5wK18vPTF5KjpGITYzJD1GJiNnQFdCRmZfIk14OWgvejxnIStAPV09VjY6fGNzKml4ZWQ3XU0yRmIlYXtqTjNhJllDJDtLVH1We1JsX0Q0X2E+XjtLQ2JSYU5HZSI9Q3d4ZnE/SXQh''@;'; put 'put ''bWF+KldVcVhfPW94ajEzfHVfYk07RTRiNU8sRkdhXiZFbnYqYk5eLEVURjM0MyNlbG9Zb1MiRio4S2w5TXgoRywraiNvVXJFMzdMJW5PNkkpX2F+dXoiVWRnTSpWRDd5UG1iSGJfRHFCYSpucjpVR3R6NyVDQFZiSz8jQGd7MSpIQmkxRlQ/IXd0flomRkhuRUZCMjMoQFBMfE4vb0g0PEN7PyRE''@;'; put 'put ''QChxLEw+RDZKTSt5R2F0Qy8jczIwV0BzOSR4LzBXKT9uaFEkPi8iJk9OVyxPT0ckc1ZRKzVMLkIwSklNNDNMcGMvOVBLdSI2dHgpPmk/R2giP0BSd3Z3SSJQLmlDUnwvMWs6WVEpeCVwV0ZDfUk7bXNGXjliWmo1MUIsTndiJDFeIWI9SiV+QXMoXXZJald2IT5IY0xQeCtrRyppPTgobU86RDhR''@;'; put 'put ''UWtETCxOSHB8SksiUjRtUlZjYl5BLHl0IV9LV2RuOzVkJDsjJHlZM0hNSVl1I1psfj1jYThjIyN4dExGYjduKmcpOUNKRnE6UXR7U2ljNT1vX3w7SjlhRnhAO0dTd21pbShSLEVHLDQlOTN7Zzl7YnFYZXxZMjlpVSNILFVLOyZscl8hKFpVeTUzQ0V1ck56VS5zangvNHheWlAkUn5RfTYsZ3N+''@;'; put 'put ''Tm5MMlJESlYiInFScGhAQiYuaSVIfVg7TFU8ST0+PzkoYTh5Uyt5Rmx4RSJuaEVtWlJsIjVadylQU3poaVN6P35tPHQyV0IvfnYoeXtyby4rY2BbQV8rM1MqTSZXK1BYWjdjZUJIci9FbDkjPVBBfmUjSj0oIzoiK2soIiElVTVWMFlkYG8ybEB6VilgJUYrODZCZDFOIWtbczMpVUsvcWRRZXNb''@;'; put 'put ''S3BhW2QhSTpkV3pWcHpUYjRtTkdJPT05UDZvUitUeU5+Yl5oVkJIKkNBel5VUEF9LDh5aUx5Rn51TW83MXF9d1Awd1EjdmJqOyt5NytPYGptL3k7MEVZLkltWnpyYj1fVWVefC5KNmxAOGsjYll7cjtsQGp2I0ZnL2xSQCE/ZFQ7aVBvTXwhKDtyVnloO1p1bSFyLy80PWpMQk10dUAjY1NpdVlr''@;'; put 'put ''K3FKKk5XfTRLemddUF9INFg3ZF5TY0V4UXoiYWAxe19pKzpRRmR2cXxEbit9WC44PmZbd0lrPVBFU0BZZExPIVlmVkJVfVl8MF9Tb3JgcHdSWWZiWChrVENScGghamc1dX1FJUlbd0xwTzdoWVduMiVOZyxjLGcxM28qNTQ1W0NgOlZUREMpamN1NyQucUZzYF5RLG5UPF1yQHZwJWokR0JffEl4''@;'; put 'put ''VmJMO0w0KFBNOyFTQGk7IkxfOUJVWnptQmhlNjtUOUR0Jk1Zc2lNSGcqTUJZbz9pXXl0azl0W3FeYXdeP3VEcFRybTdZbXNDIngwcGFtcz9FL2ZqOjFnci4wXiQvJC5qS2koVTZ7cShTVE8jI1osejk9MntZZDg3Zj95MlM2enpzcDs2VVJlUHAyZVlmOCs9Sk1dWS4xbjpMaXhgO3pjOUE/Q2Ve''@;'; put 'put ''XVpPKTtPTmF4TH56dkZWMVdUVTlda0Z9fCMrflN+fHBidEN0WUdUWHowSXB7LmcvUDlWR2YyW3NVRE4lbywoVk5UeF41Y2d9PHM9LCRxPy9weSZvYjJjamFVJS9fbDckL3Q/bHtKa0dOY3tFRXkzaXNrTHd9KW96UEdEW3g6PDJFWElkNU1pVjxeT0VOPVhCOSgwJHpfV1opT1BEZVleKUowZWU5''@;'; put 'put ''TS53cltLalN4YFo2K2xROFkrUWpqMjJyZU89L3wsSlIvPCxjN3o0KkJ4JX5UKDRhX1QkITQrQHJURiYkRWxVWXh4cGw6YChhI10xKmZ+Lzk9MzV3TioidFtWa2RJdih4Rz5AKXB+b3lndlZTcVVxIzpySjNKP28iPS5oTVohSjl+L0pVR0FlUCo6QypaZ0xUfjh7L0o1TkZtNGttaVFpKUVuVCpb''@;'; put 'put ''PmY6YyU4UHlNQyV5YiYuSixmJS9gfVVKRXorRyx6Si5dekUodzJscX1uYmgqVHQ0RS5iS1VXc2B9PSV2dS46LjNLTUkjb2Q1LFJHPFZ8PFZOLiYlPiFyeyViQSU3PklLdW0+Wis/WVI4UllPaXtVNWdjTFRJaCtmQ2smdXlxWThUZHBMYX1sZ2JhMkpgMCl8JVJLbzZXdiZBPUQrOFM2RGx7Yi4k''@;'; put 'put ''ZyJARGJKUnB7OCk0Y0t5aD9YcjRfaC9gOl5aOyReM0FrdEtAMjhzRiV2XSNhY1RZKFheWXF1NUwjK2dLekN5X0shW01SIzNuJEJye1NjLjQzWyZ7MD8/OFRNZFk1MzV7eGVIQmRscFtVczpmd280SWFwalt0dD5jNzBqNWAsfmorVXN6MWM5PUoqIjciQD4wTDdZJi9FQW9uT2N6Zml6SkVkUiEk''@;'; put 'put ''NUVIdWJvNUQ9MC4xa3s/NUhealMxNTVGR0VJTDJAUj16WnNNQWJ5IzReYjZIWlssYEFZSzlqVWdjRF8mckM7YmRYZlM2ZTY9R2UwPSNVWURnSXZ3am06bUtpLlhUZlA7MVUzYCM4N2VRZkNZIXBwTEprVVFjWEM2a3tqR30hSGteOzh0Sk9ieXZ1cEdvLlJ3eVdOb3hIejtsNT14dSFBalROOC8+''@;'; put 'put ''Iz1qZCxrTUFyWVVRaDlnaSZxWVAmI2VjX1U9dSQiVHkwdGhCKTMqTkw6L3E4LnZFdFVuTl44bGJ0QSIscnFzTXFiZT5LWnA4RDxzJDdZbTtMOC59TXc5IyFtVjVWWUNJU0FiQ2NHZ2ZbRFRZVyFQLnBPZlNjSTB+R0NtInh9NV4kR2ZRSVUwayVmeFE0P2NSJDg5djdxIjEwfj0hLHVhJSNoaXND''@;'; put 'put ''IT5EI18rY1pHdm5vM3VFMkBFKDlGaHVPLGVnc31TWSZdYyshKHthO1pMQCVdVktPT3pMU2tKWVNdJXAhQV13MyZqQkBXbzhZKGQ1OyI1T3RUayU0Q2RtVEczM1dBdCIreGdbPzYpOFcwTl9xfHBXMGY2UHZzWWlvIzxRNjB6ZDYvdz1CL2lbcD1JO2xRX1NqNlRRMldCKm1EJV1Tbmg6bHxtSXFK''@;'; put 'put ''I0kuUnwvUCZdSi8zIVtnKH1bQyVXdSgweGQ0MiUoTUA1aThdYUFtfk89Vih6JXokKEwmWWpsSTNYSjhuK2c8TEVGRVdoV2NVdlFBJk0pdVIzbTA5OlNRPCR9a2s0L2siWDlbUXdbV2QuSV4kVW49dCwxR1NIR3F+bihfeFNyVUB+ZWN1SWIlIVA2NGRlYF1xTHcmRixUSmpOW2MvalJpVz1qPGYp''@;'; put 'put ''cGhzIWgyQUowRW9iZEooXkRUfktVUVYpbnAifklwU1YzfGZUT1J8PEI3LHB7WFRnXk9Ed35yKVRdK008WjlPcz1oSVB7RVNnRzwhMl9YSkR7elM4KVo6emImbXwqMXRxV3JaSnpPPztaTXdMYTRuLzVqSzRSN3RDdnMhNWRHKFZbZlhSQ1cjNSJPPyx2b3BpRGt0eTk4IilYeG9wLF8+SFNLdTxx''@;'; put 'put ''en5ZVjFUJjouY1V7WzBGVTokflh3LFphMS5ec0FqPGkqSkhxPzdjfUVWemJDXjd5UTNqRiVjITs5eG9sYCxyJjVlbjk0TUQzdWJEZzVYM1tGX3I+a0N8Wj1WWH1zPV1IcnYoT1FBPjRiXmEofCpbPGF+QU9bQV0hJjFMN3VQQyxmSTMsTylTLGdzNS51ZTcmNj1fUlZgZitKIltOYzFkMHtIOFRI''@;'; put 'put ''ZVNHcEhVVWMoUCI6WVlFZENeaUZwJDUqeVYwWlJeUTpjfHZ4Q1NZNklFSEt5JlFTN09+XVJPWFZpWFU9ZjFMMXdPcllOOU8lMHUvTX4/Ink1YmwpW11NPGpSaWFqWXQqKlkkWDZbcG1MSEN3L1NTb2g2Z0VuIkFjVXdxZ1h2N2JAbmNWcmVEYCllSFZganRMck9vKm1saldAUVdheDRsaiVVaVN5''@;'; put 'put ''d2hCOXg0SExLUnlzKWgwW1gyWkhkblt1bT9aR0BtcG47MlteLF1fJiokMT1rfkEjKjJAVGVFZm5jRmt2P0VTK3djRjFvQk4vQEslZChxY3dOQT9lZEpDfEVqbVZ0JFo8NzteUShoNlM6N2ZRYklebkB4ME1rNGN9PVtPZXxFKkpbUSFjK3Eja01jdE9KfW5PTiN7Z3pLVTdkVllzbzYkJCguNSw8''@;'; put 'put ''SCRBYDhDU3MvZHFOMTdDU2guWWlvRExnKmdlNUUwa3NIZGo3d3dYYkU6KS84dylBXjU8SmZDYGQxQ19+dnxLPHxhKVFkMUpnOTZ0Wjw/I3ZxNEJEVlJ9KVkyQl0jI29dYndecTksb2NYcGA3XnE+d25zOWxhU1JuOFdiPDQ7d3NtUGZhQTU7e0lyJDFBL0daK3Q7YHNVaD9aaWYrOUBOVEloKUhj''@;'; put 'put ''dD16YjE9OCxXdEJLZzJ5KCpyKT9YYHpEWGdBXVg2SkpmVT0/W2VxbTpHWUdXYmRFPVE4eUswbXhiQTc0JXxQTlVdfHxbZC5ufTFCPUs1eUVHITF+XXEqZzxEVEhpY3E+amkzUnZ9Ky4rQlNaNnJRRV48PDoyUjhvRHA+NkNAWm1nRX1+XnlubFl2KCpnQj9uPyEqK3hAbEBUTmN6KzAqMUopK000''@;'; put 'put ''ZEw9XTcsekVrbCxkWyxUMFZXQ1Y2X0IpI2x0QlokIVZxV0dQS19hWFpHSEdMeEx9cWxeJCQrMDA7KWR0KEpXd3NEZjVvXyQ8UlZ5cEhFY3U3QjRvcUJrZEMsRGJ3Wkt2NkRSZEtgKGgqPls0MEVhYXgwJmlVQzE3bUM3eFQ5QmliSlg+SyZ1QDFrK3g6NilRRztYYyp3NSg9dVA7WDooJj1uImAj''@;'; put 'put ''cFdiRkkkUj86PGxdUUFKTDhofDQjZExIOlhrVFBzKzFmTT0saS8kYD10UzROIXBoUmhGMEk9K1QrMEcoeEF4IlpsIzNlX3ozZUZJKz5DYWcxeCYvLnk4OHxxRnlTamBELiMvTDFoKmYoQWk7c040QS4hWyVpQyF7dyopUz5aP35DRHU0KWMxYCNlQUBNUk9mSVcmaFJYKGxrUz45RzBUPUtPK3Em''@;'; put 'put ''fFIwdmdNbVFzMjh3dmw4eXwzdXclaHdiLHNddCFAYnpPaGxnWn43VF8lSkQybzkjfGR4WGVxbmUlWllEeU46W1M8K0hWUVIrVFVOLH5LZiFIfEpCeWxgaXY9XjFqaTVHVFFHZD14InhWSEBhUFtXbylJVHVFZlV3ZTVSaktGdGVjSHBYN3MqQ3c/UlhBb1NkSitheGQ0e1tSYCRvQ3QoNU4+bClI''@;'; put 'put ''NFJHRTByV1pPKi5YIV0qclY1Omp2JmA9aGs2OCo6b3EvMF9CbDJfTiVURnJVaEgwKnZ6KVtZVD1bQnBYJk5uU35RU1p2PnZXPXluQlkxVUxfRyFzV3I/emZ+SSxqbkpSYyhrPzshZCF5QS43JVVrTHFwVVkzYiN5Ll4xTkRqcjZlYXFXTXpxPz5RaXhkaUwuYkl2QlopaThyQmtFfS5jR2dPaSZo''@;'; put 'put ''QW1oRFhrSGEvJU1fK3BJUUxUWHJFTC51XWB6ciUjRUN6dWNdJiszZEJOdlRPRSI8fk1zPFt1UiNDMT4+fUlYWGt7Q1oudEFzMEloREZlTip8RkBYSEl5LGV2UE9Za0picn4rJmwuZEE9eVs7TSRGLjBpImFeOlB7WG1ES0MpUkJkU2ZQQlEjcX1UQXVueCVtITB2bmhPOzsrMCFzZEpwP1lFc29T''@;'; put 'put ''YWQqWXMuRlBfME8vL3tZSk0lZ0R+KihXTmVeIWIwcW86O1FyI25GIiNdS3c0NixDd3ZCVytjWiMjXUltVzVGYzhXakFGenN6Jih3amxDY20rRkdIS18jZWN4eTFtWC4xdjtbQzJBRF1oKXFPJVBpciprfHwvYH4waGJTMHJBIj1PSkt4TzwxenYkWXRURmEpMnhmTHFsTjdKY0Zab3JjKzVGSnpA''@;'; put 'put ''RENGSH5hVChXWV57c0hzVSJOSWNafi9JU0d+eEUwbyRUKllMMDA6a0xbcWRuPCxWXncvKkJGb1l1RDQlNFhjVjUhYWNALndRcGQ+fnJeZzBFZ3xGU1V1YDosdU1kJFRGYEl2M3g8VGxTKU1FK00xK0hLbyhpM0tSfjtmXysqOFRdfXBsa25oOW5LbSN4bFJaRTcoaTd7JCk6KFpaKURHY0hpbSVm''@;'; put 'put ''aF82dUlWLDQ4bUMlbD1EdnpCYmsuc0VUY3RPNy8iZXFsJWUuMDI7QExGbHRbWWokVT1pVlhQdjh5QkxZdVI6V2wvRDQwKXFsSF07fVIxJGJYUmIpKUJBckQvMkNKcHlGLGUkIT97Z0F0KGZFfnRIIVcmR3RHOEg1fU06VUxMeiE1JHcpeW5ZNi9SVnd7MShKZXYzQnMwXVkxMSlraktyZW99bHlO''@;'; put 'put ''fUhoNGBQK3tORWw5Q1Y6YkNOSHhiMVt2TCtPUlQvVXh+a2BsJVFCY05ga3JbNXp+biF7IWxKSkxNTCV2ZFRRLHZrTnFZIyZkKGs3O3g8Y2UyMGBjNG1JPW5FIWp9aSNJfDhFYWwyJnZ6fl9KO0ooZDVWWEpRRkYieWVTckBVQjBkbTh+SXs6dEl1L0FZMW9HQFZHckRIckgiUW1mLEI8M3JKdyJy''@;'; put 'put ''JDVfU0VLTGVYWlIqJEtvam03d0Q7Rkx7aE83WmN9RGdKZFhheGA8dmRiUlJWOEQqWCVyUXB7KSE2N31GbmZCXlA7cylfKms0VTBqfG5jNn5WSFM4RT0kMihaNi5ANyQpYmRtcStFN3YlUjJ5anJ+NFBLQEMpQ2lSSTIzPzs5bzh8OEg4WTlZNDFrQXNVNjZYZ3guSCFOTWQ2PWAkMSJhQnkheXx3''@;'; put 'put ''flZXOjwmPXpOeG9Oeklsc1k7KHY1dHxYUylyZD0va2M/QkIhcGNxUi4rQVJgWyRbZlBZdmx5PyNQZCN1MmsiTkNbMlY5XlFefjFFKSwuY30hTip4QVspdk8/LDo/WGt+JERkQStiZnZ6VHcqK0ZOKEpxLyF2bz9pWD03MURNTiVZXl58MWgmY2R5M1leMiN5aDNFLEg9SXJBOmVWQyV9PXgjQCtt''@;'; put 'put ''Vkt0Sl5+PEFZSE9PJiV3O24uNmxIcDdJbU1vOnYiX01weEg0aiw6REZIZzI2ZFtZL1R1ZFpfNEF4aEI5NCEwImxgPzVESFRwLDJVbVJXLmovJVRNSkZEWjVGb3VlYiV9eiJNTzhJM310bTJhMy5LaXJIWW4qT2J1P1hbKyxnPD0hLFdpbkpxVS50QmkuI1s2RyhlYVpqfTJnVXU0NTU9SXYhKmly''@;'; put 'put ''PUgzT05gRTAqc0IsL240THtWNkt9e18kI29URDdvXzE/PlZvS2ZGYS5HL147L3N3OjZgIylybEhROjU/TXJaT0NOMDlGOFJiR0R4JW49Nn0jLjpEYXx6a3pSQD9jZERJaH51Z3cybzZUN1JxQilaVS9LUi9rbSVPIU84clR0S1o9WipiK1RtZEBnV3l3Yi88WUhtbDVON2diNSxTSixJc2xxKmhE''@;'; put 'put ''Y0RAOjUxdVVuLmRQYXk5cn1rNCpXbFB5bTYlPEo+eUNQK05edGFxJEVPcT1EIjM9e1lKUUU4c3ElYTFTNGJaWVJJSmpoNEgyJk1WT3hPRDYoSCkiJTgyR1lGbT1gTyxzU3o7VXsoQndWU3NoSSg/QXxzQUZDPjFiJkU/b0owKEVFel1UXWhoOy4oV2NORjYxVTV5WSE2PylmeEI9O0lUSHxWUCE5''@;'; put 'put ''V155b2MieTNMdWJnbSlOXyREVU9HPm9uOSZKL2hhaGsjbVg0aV0hRCszNH10TShYWkkvRGkuW1g4RzwuckZSc2tQJE5Ybj5OTW4vT3VkYktfK1piVmNSNCIhNT9OaTluOnNvVkouMiMlUkgzSkxRT3wkJSpgRXZsPFJTKmIqXiJFMntVQ3BkOyJBUGFsQU9uUFchVGkvc0tdZ2Epcz47UWBLJE1L''@;'; put 'put ''ZFVIYnJfZjR1KU9wJVlvVjpzNyREbU1lVCtwMzVEaS47YSlTc31USUMzWzI1b0l6L0pLVzl+KD1dfH1VKGY5U300NDA/WzUvNkozQFFbfEM3XyI3OGU6dEhDbTJvK2dPPSpiK0JkOSEhYj9uUXUwXkNrcnhobENWNFM2YmkqbGc+dltyaiRWIVBld1NAKmIzZkM8IlNYO05PQiFxTGhiVnxhWzlR''@;'; put 'put ''aVg0JWVreHpNO15qbXdabVFRWlRMWG81ZHlyPywwUnRrPFEpIzNlXVMyZVs7YCxLMWBCPHpuKF57SzNDZjloWjIwRj9hPmVSRXRpaytCeEdwcHwkc1RrXnVEb29GREFvIWVEYW5+bFtvY0w0OEBCcUJFWVEhbG1+TD13SGFUNHxsaUE8KWYzUiN3NGUvQCFsLGZJfCYwbnw5XiIvdnw9LEM7Qi5q''@;'; put 'put ''dl0oRlJYOm56JSE4ImgjPU12UDxaTmVwcCg1Wjc3QmRkO0BjNHxUUyhabUs8aTEpdDxVOHMwXjB1N05mX354MSk/Qn08NUZ8SUp9JV9eeVF+STh4PXJKOywmLytELitUO2xqLyRGalJyYlh2fmlbLmB2ZmZLaE13b2BSeF9bI0NVOW0seWlmbCQjRDE6UzdIel5pPm5bakVULnFNVzssLExVRXBY''@;'; put 'put ''ZURZOF59aXA7ZWpRSFdMK3JAQkY1fjd9WTAsfW9XZ3hVXk1re1daKk1qOW96JXBTPDw7RXtgNEV8TVVuI14pb1ZkVkd2Sj5+Uk5iUTZsUUJPfHlPQEBFPDk4K1peJVokenBCcz9DajJjUkFSZSNmVVhraTdgIUsxeU96Ul0vZ155UXtVSU8xa1FzUlt9T3QuIltpNyg1N1ovOEFFPXcoaklEPGFY''@;'; put 'put ''bEZRLElaR3hPLFNdIy4/RHdZZ2MxWmlmTC9mOyU4OjArNlZSN2MlYm5+PCtXbyZFPnY/LFV9Rm9TOTN4OCVGckl8PlpFM2N7bkhCRW8wcjIjP240MGA2WEcyNXIxalZsdV9YJWxSbip0KW8zdkU7d21yPSYjS09SYEsyPUY1TGMqa1I0eGcxQk43Yyl5VTx4X2s9RlcoPENoTjpHJFd7K0NmaUx3''@;'; put 'put ''b2NTS3MxRnFRT2NVKjE3WDlTfWhvVF5tOjd0I2BxL1k4Zys3VUBTMSpVYjlZbC5NJjRgQF5GbSpQUWdlelpsUyRNWj58b0ZfJXl+ZmRlVTFhTj9ocmU3K2xvXldTd1VPRj1vRXNSU0A5S0ArdSk/PnQhVEcmZmRhcCpvYTd4NklUJmR2UCJoPVo1eHl6LlpLOCx9UDB+X2F8YCE3LnI7KlE9Kmks''@;'; put 'put ''MXRdb0k2ZVIiPGtoemZpTn1NW1oqU2BGe24odUN5S0RifWwpckN2LmdESjtOQ3ZGa2kyISh2IShZRTZkWEhreWhHZSQ+KnBTWGp4SUpBKUxgeCVGRWJKMUNfdDRrZitLaTxvUnRGIj13OV1MUiZfanRrMkZ8V3d0R2B7ZnM2Q3EkXnkmQ21iXyw8VXNZU0BCZ11iQFdRXXZqM2ttbCtAMT1FPVVJ''@;'; put 'put ''ITZZVnBAT3B3WSxyI2pERlF7TSs3KE0rMGdzaiJNSCkySFsjal92SXY7UGJqX0pLcSR7JT46eWlmSjYhWC9IRXIvP3grYX59RUcmfE59OTQiOiImaylRdV9NX0ZaKXNIIVk5LkxVXjBxOlRYU0J4TD5WV3RtQjhnQipCIXg8ISQ4YWhhbWt6WWBKOyRoRWphUShKLzR2d3dnI2opSjo+XVhjXTI9''@;'; put 'put ''X1VxUH55VjFsVDFscD9RQlFtRnhZPHdpK1VVTFd5L2RaWTpiUUN5NEs2eEQ8bD06fTZuRH19UVM+SHM0Xyp3Tyk0fm4jblVaTm5Me3J+Qj8kMHMhaFYhc1JNUS5mLlJ7S2IjTVpvYFU+ODY5KjJVMyhCdDEvOWJJN0R1eEBaOFJdTlA6fX1gL1dnVS5MZCNPezNAcE0qRT0vRFdNQERTIjYhU1Qz''@;'; put 'put ''WjxUdUFYS1VUeWQ8K1hbYnFQfCY6bTU5TjMsVWdAUil2KzB5JF5XOTdwdVhWLltAeDF7eDQ6O0hhd1ZzbE5yW05HQzYocjB3cj0jNzVgQ08rT1lhUTBSbWI1MWh3ZXlafTo2XjRfNSF7YDM6ekxyMWNWNnN5fnd1eEIoXnYsJjcwP2AuY3pIMFc2fkUhaGdMcC9FLFk/cVcjQztHWkNmU2l0ZGwy''@;'; put 'put ''XmxRJk06ZkU2dkgkVUR6L0VYWCJSTyFaR093RHw9b0FBezl9VkczLH05bS9oLCUyXSlKM1VGJGZzWFVEL1k1MDFGX0N6eHBZYj10M1N8TTptaEdEW0FiJG4yM15zUUQzYiF8QDQybHd0c0NRK1NKVkI3KSx1ZnJSM2N5Ilp7emAwSylBPERUOzVdVlErdiRFT3JQcEYiT3V0MTdibUpYP0NsUlNH''@;'; put 'put ''VikxKCQ1IV0qTlA5JXk+Si8xQCg7UmxHK10/fS9ud1NXLDc0QVEwUmk7dzVUWEsmQVFTVlBbfUpLP2Vhd3JrYm9OLFYseW9qfCNIcTdaaFAyWE5oYXcwT1AyR0IxWH1mUSpLZHRYeGM8RS8kQy40KSxzVilCbXhvYHNWU1I3Wyt6WWpmTEcmbyN5YXU3eFoxaUE7WXIzYTRbRndeS2RGbkRqbjBC''@;'; put 'put ''eCZvVm9gfG1PUFZJKTluMzlxdXZ1STomW2p7aGxDSH4mcmFMTHJAOSs9X0A7UkAiM0VIcEx2eFZxeiV2b3UybSlrO1pWMTEzUEcuRSlDWkopJnlJTSomI280SW5wMjklc3ZdVyhJRWZoWWYwPnEjeXZVbCZseV5pJlBDS0B9Mio1SSxxTSJxMm9dZnkhLyRrdUVEU3Q9PSExVFVMZEJldzoweFhO''@;'; put 'put ''bCUlUHxGN355Vk5aMEd9TlQwZjF8Y1cyP0h8TXwjJTtBPWhPYERFXUNqb2JZRVZFTGkxUUF3QHFQKHl4W0c6UkQ5TTpySVAlJChiPissUHFwY0F9Y2A3L0pQeVQrZ3UjX1JgckcqP1YiTjlGYGBteCUvVz9GSChBaWQ8NX4xNyMxQEZ2dzY5cFsicjMqXUE/cCI2ZTlSYT5waThaJG9YVi83OEwz''@;'; put 'put ''S31lQDNQSioqUzwvW3dfWHteUXVlOjBYeT5fdX0/UFolKl1WUnFKVng4eERhXX49LEFNUDNoLDxwbXVPKV4jKn5JYEI+Tihmd1l9aHExOilwdCsuV1A3O21uTmMkKUY9ekg3O0Q4XWt7fi5sbG5KRD18eEdrXVM2OmRQeWJjYjpVS0hgfmVxOD5wMm8qejU+aiJwWUo0WlR8dTxgMTxtNC83WDg0''@;'; put 'put ''Py5ISCE5NGoiP3ZQRyVRK0BqakZKNWk8XzFuQjgyfVV3OVJxTGVTXkxPbzZfZGBeWVdkOyR6cn5XOnRnQjpvTU9OdU09V01CZlpsaFAhTzFjOyhWanZMamchVkpjQnR+PXg0P1h3TiVzR0BHYlVYNCNtI3FpSWZ5Oj9EVTtXKiVUWll8UyYxSkxDLEhPfEhIQH4zIipUInhAVCgmMmM1VFVYP3oj''@;'; put 'put ''KU8pJV4wbHFDM1VDMCNDMSxVI1kzaEhvL3owMiRZVDkoK2ZnZiR+TmFbRWJKKWM1RDJ8OT82OHBNaXMzOTlvSXVpMUdwZFYqaXtQV20xc1I7YkV7VjVDO2Fvc0dGRyhfIzx8IUJ0ODhEaGxMOkJ6YWZLazk9JWBdPHNXfVZPPyZAdT8sQHM1P1MxYWheaF94Ny8rM1c+U2c2XSZIT0puMkYzVTM0''@;'; put 'put ''dUosb0daYGx2XihELExGV0ZUek9BNjVrcWp5TnJhX2p+Wy5fOSIzZnsjNyxaUiVeY094eTtARz0kWighWFpERWBQKigvNm5DPzlNU1Z0ZDd7LD16N1NWbX5GbmJ5RH5XOURLPnZDaXFIcjMiTSg4MWddXilKd0MrZWdRaEpRYmh2WFpOaktkQipHQzJdKXRjRTJbM2V6P0hjUWo+K087YlV9P1RK''@;'; put 'put ''bnZfLG09NUlNRWpGXm4lWltJSVgwZWxQViFwajk6UEgwMEpZLix7QDx5UE5uMTdwPjhAUT84VEB8cnxpezBsYnVzPDgxRDNdW1tEUiZtXUkxQD1tPUNTc0VwKXh4TyM0YiFhV3JUPTc7dyZqJVdvPkVNSl13U2g8UFpFK0ZaKH1acnBxcjNyYDY1bG5+cjFJNDNtNEo+Q2U6blFZdWI6fGIrVHZX''@;'; put 'put ''T3w2Lj91Y2Eic3tuVGF3dFJ+PEZGKzZecVkmYTBCdUFBQ31jNHZ2KnVfIV03KW5Na0c7eGcuR0wzRkM9Pj9UVVYzayNwXjZleGVFP345WW0hPVJeUnEvWSVzbCVLZldQb0BORjojVUpOQEJ3ZTwkJj1bImouZjpAS1MqdWg5WVlPRjIkbiRvJG44MyV+RSQ9I14wQEN6bFlNMHVEND4jIkkxL2VD''@;'; put 'put ''b2pubEEmPE9uLklkc1tsRno+Y0huISpwR1k5fmFvdVA4cCtlMnhReFYzY3VaZkgxdTElL0ZqQzhIRFNdanZFOHxZd1M9KUVlP3tLU31lcm1TM0RKUTlAaDoleltAMWx+YFMse0hEfl5rfCY7LFlpR0tOT31WaXJhWiw4IzEuYStfQyskTjZKNyQ7UnM3LllmT0AjNnx8RTVoMmJiTTdmPCRTOHU1''@;'; put 'put ''cHFBPF0lSCkrSVdLUVRmUGRwQ05SOTdkZEdvLGYxIUIrbCFyVyVeOSlxYTZgLzg4YEVIWE1NLjJCbTNzN3EuQHgmc2l9JXJ5PC59Kj9qVk1iVUByKXMifk0mKlJ1PEZyOkJjI2trdmpVS1VQKkgqNT0xX2wifHB+eENnQE0sfW5VaWshbmVYcCRwfjU8bHxLImo2cF41dDo9dzVMQ1dWNjVPZ1dh''@;'; put 'put ''UEIkdEMjUH1Lej1JUF4pNHEsZiJlKiFnSjthZ1puUVVFVUtkNFc2MTBMSEshSDcucjpTWGZ9fEc1MW0kIXQ2dU1VdFA4KThaalJzS3Q7QT1dZyFgX3c3QTwkIVlPJE9AZkk6dnlrOyVZYUcvKV5GdD1wPHNnM3czUWg3YHRiWGRjYX0lKl80UH50K1V5PWciQlEjWlNTM0w5S3dzTTlDOWd0UDRu''@;'; put 'put ''W19qSTg2NCtjZE57YCl0WWF2NENjekpvJnMldVJZOEZrUGU/VktQRTBxVlpxXnMyLCVOdUglQ2VdUElQeXh+WDNJTkd0am5KaihGUi9Gb3s5cHpxUGo4WXIyKDt+MnpVMnNsejl7bl5UYHI8dWFBQ2kuIUZxK0ZEY0pQUj1ofk5nSyVWdi9RI2ZEIWJifVRnJGBOYTtYIXRRTTQpI01XOFZsZG1S''@;'; put 'put ''MjVNZGswU05hKzwyVDx6JGpKZk9aOi97OHY8YTwlVS5ZeU4zZDtgVyshY313IktXfEVTKXQkYUY4NWdrVWwqW0R2a0BgNCk5VkhPUSYjRz0zUk1WT0Vze0o9VThIJTdTU1oqVkRXISUpIkZ1VHl0Pi9XQj9JMUkmZns1T3ZZOlNuZXxyd0k2TWBpKnZkRkpmJTpJPVFHN1NjRn4pYnRPcS5nLkEv''@;'; put 'put ''Y0ooQWdNLH0/W3lRLkFycm0yK2xTbzMkXWNzOWxqLG1EaVVkYiYldnwwOVglZXNwK14xODhDd1JsN3A+az8oazAxa0FsWm48YE0xNV1UYyNuWm8mWHYrPjx8ZnV5VUFMSiQpWHoraiVWUz5kJSV4YFVFRVo9aTdgdVpuJVpYO3V+JWpUK0oiV31hJWgsTX5aLld3PEpqKVtfeV1YWlM6Y2FvKyU1''@;'; put 'put ''QXQue0VWVTJgV3Z6PzBhcHgyIXwmclAlfjRIQHNLcyxpWWN9N31dXkUqMnJDfEtXbHtIPjNMaiJXUDVEOWBeaD5NPm1US051RmtQd0cjTVg4YEs8QjEkTFhRWFBFMjZ1VXVWZUxNV1A3PEN5LlpsWyFwanJRemNmUSJPVkNWPDNlYVYzWEppXyNAeDZJW0ZvJDxUNmJvQmRoJUYhI3psbjQ0cj9J''@;'; put 'put ''Xl1SV2RRT0slJnxbeGdqQlh1S0I4eXxZWTRxPkRFR3dnRlgpfDldOU09U2shJnhTRHcrL2ZxbnhUJkxtRVY2JCwveCxXRVR9OW5hXWUqQls0RiwzPChJRCwzbUFIVClWP1NxQCRFNiN9VSh6dFFhbTx2dUtSZkZBYURZRzA1emA4SG9tfU1FfHU2W1Bkaj0kbyQxRjUpRzdJaFRTeXZKVmIofU9i''@;'; put 'put ''TGUvMnc7T3ZSb0MkMV1LJFU1P1hrPSQxPmh0eXY2YU8mPUA8JDEoUl5Dcmd8JWB5alBBS2hfM25KSFtRYVFycXdiMW0lYjtBaHt1ZzVKV3BQenlTJj1CP0J7ckleSEdzfHltdWI5amFEfF9iRCpOc3FzKjdYUX0xTGo3TWlDUnhrOm57SEZ1ZlpLRSIwazU7Lj5HfShocXlxWyQpSDIlR1VIenlx''@;'; put 'put ''TGFXLHhbOjBzN2diYHEqI3Z6eV5NXjJ5MENJdT09KzRxM0A2cCVjZ3l+cztvYUBSbyhOZ3h0M1k9I2FgaXA9TVhRJEZVUjBdblk2cCZCNTs4Pl9+TEdPNilkUEo3aWdiZC8yNyRVXklENE5IYHZvbjg/PkZuXVc9cVErdiFOM3s3bTt6YVg4YFl7PnFAcGQ1YmVxKTphejlqR2wjK01qWWIraXAy''@;'; put 'put ''YHdnLmt7a3xaT3FCVEY3XT5ZK2d3S1AjKn44cy9oRnE8b05teSk5RDg4K2NzTH1bdHEydHMuK1IvaHt3TTpKL3tvUmUsS1pxV3RgY11yQmRNVWg7bCs7WVc2P2t3bnRvJixqdjRnN0FzXXlyN0IvbE88WSQ6V3YpdUxQPkxFY146TUNATD1bak1pI31DL2lNb2BqPEIsNnxuYHRCa1R1dXBZPHdh''@;'; put 'put ''ekAyRjN6WzJxJFZISmAiYkl5dmJaNEc9ZDlIZyZHRk5zbUtkJiY+LH0uWWJ8PG8xOj1JMCYvcWAsYyFLLnBwMTNUa3FhNDI0MkI7Z3laO2BVZys7OyswamNPcUMoZ2B4KVs+IT1LVyJ0TUEwXmU8OEw2JFBqYTN2RV84L303VW48SCxDbVZOQGozdXxYMDNQYXA0YERjK1pdbCxEMGpYRHMybiVv''@;'; put 'put ''Z3RWRlhKX3NIZnxoRzhpeFIvfC96allHUFF2bVpCWiYqMk8lamU9S3MjfExlRXVOdytOZilGJiJsaF8qfCZJVnpNMjAxayRXTzReSF5xc19ge21oL3NmOiVWWz9YZG5PaEYyWF9sRlY2YGtZVzpqQltpRmA1R3s1Nk9Tbno+Kzx5dHFgN3l7MmByTnl4Xz0/IyZ+dWI3YEFsJD00XThsan5nJk8i''@;'; put 'put ''UjJOcH1bfFZtfjtjNSlPO2VwTW8lVV94Li9rIUl+YGtEbkdxQWI4OX5wV3JHeHxmLnFXMWR1eGpvNXZVSmxvRTBbKXdZaDUkNikzUTVWdEomdHBnUG9bMUU3ZU1oaGRUI1UvXndpaXRGYjU1TDgjK2dILGs/c2FPbiQwdVFhZXUhVT1QPj5KR2NhPm0hRVNzUFAoQDw+ZUtbfTNmOTh0ZiYzWy8x''@;'; put 'put ''a0M8SiFMRDdjU31qTXhBMlNyOjE/XVl6Vz03XTQqTCNvaE9fPC80UUc0L0ZdWE91WzBAUWlHK11ybWhrVm0ldz1VT2Rhay9aa1BLZmE5JV50c2NOZCZYPTF0UnxqWmZdMkBbN1d4UVZ+Ry85d0V4ZFdjS19bPDowXllOal4pNlZLPyYjOSlUImxQZnJiN2dZNys3WUVBfkxXRW98OzFheUZHSS9E''@;'; put 'put ''Xy97dnltUzp0XUQ2JClfQzZ3dEE3MiwhQWs4QD9PQ3J6Un5HSjU2Mm5tb2R7UiEpdmUrXj5HTHRSJkhkIlM0d1haIj87Kip5aXphUWJUY1RQUlN6ZClzdGwoaCpkWSNpb3pOd3k1QXFfXjJDYVMxZjx3bz0pKlR3b01jRC8oVzY/Uzw9TD02IUJgJCJkYzwqT0dMeSRwTGYmaEFqMHo7VnFWX3Y+''@;'; put 'put ''JFlbKjQydFFJKl9DazF3RmlXUEBiKUV2KS45IiNWJXwxPmchMmZOSyldZlVkVCIvN2FvMVIpc28vbU9qSDg+fGIpKz57cXpIRXkzUERXelhyRGRySV49LEQqPWF6ejsxVEA+cWM7biZBaCY1VFsjVzJzIyRSL10xdkZEK0t+PzFAOWxTfTZEPXg7fW91Li5PQ1FlKyM1MntHfDJFPj1gPUdpUF42''@;'; put 'put ''Yn4/I3xjNndNaVJGY3ROJit+OmA9ODthKXdVYjpTQTtuMClzcyY0aVRDQDdTcEp1VT89c2k9L0lQK3d2PTx2U2g/VzRoLlMmU2ZWYEp+KXh+Il40KjNMUHxyS09VOWEySyhCImp9K35gK3lGRH5OW2IsIUZraGE+RSprOlU7UFM5TzM+RHU3S01MYStKNDhfUitMTWJuWmBTUG1FU3ZmK04oX2xO''@;'; put 'put ''bChUZUJ2Xmp8M1MvNSRZIzJ+b3I1TGo6R1hTUkc1cUs/O0kyeDQ+LE9KfWFSWVYjbi9fQzFGenxYXWsxOGhrbjlnVUo+WTcqUnZseT99bCtsZTBLQSsiXkdOI2kuTCkuOiImP09XUHl7Ym4veCQ5LyxiT01keVJ9X0hYc1kqbHBkOX01MFpNX1lINkglckMuQkVreDQrI2kwPmJNfDt9Ln5RUV4j''@;'; put 'put ''Nn4mNX5QYykxeT14PkYvTH5dV05hSEhEaDBhO3N4eShAOklvSFlKPnc6cHJYb0A4ZmFBMjcpZX1NTnpRN308Qlg2R2FaUiZNQnJUMk8lTjxjWWY3WEpmOl84JkpQV19RK3NQbmdXZjlLenpHezdDdVZdZSFSZWhOKFpERFo2KjNuQkRRIU42P1RQfj5dXThZTypjKmtjOjtVIWBLeyRGSmA4KH5D''@;'; put 'put ''XiUhVT0mZFVSZV9LTSVNVj1zXlEmWiNiTW06NW5beG5zW2B1MkUsdEB1fWRCRyw/KGtJPWtqfm06K21gWmNLck9zLykzUkI+flQmKj43bi9GME5zUyV6ajssYXl9Mj11P3MqQ0RHTUg/SGRoJipeLCE8MzQwfTwybix9c1t4byRHQ0ZBdXwuPH16elhTV2dGN19RXiZmNyJwc2V4Rn4kTG8scEp6''@;'; put 'put ''QzIpajBvIVFYaWhoRkhnTTs2QUEuQz8mcDpnY3piQ2VvM01Bdj5KKFhPcElya1tOVy48Ly9rUFVEW0lUZ3dhSi9tZiYvJW57cDZxaUtGfm48MDdPJVIiVVJ6bllPTVEhKXomTnhQaXRxdD9EKmdxNi9DQklENVRMU11oQFRHYTBNWCI5PzdFe2JxRkpWZUFlMz9rfF1zOVFZX0pTPU9TaDNHbGI1''@;'; put 'put ''MXpOeyosQ3t0dltlISQvZC9PYD1WKVhfaWZtR215UF1CIyQlU0BKemswcXtzVi5EIVVKfWdYOyslKzlqLmQrZDMpfFU8SFdVcTBXNG89dTtGPzlZISNEcVFtK2Y/OTBRal5kPCRSe10vUStaVW0vTiJdUUtmVCQiRDN5aj1bWT4+d1JsaGY1JUxHcCwqRUddbEZLKXBgPHJKR0teJllOcjFMPy97''@;'; put 'put ''Lm03KFlWZEdlI100bC9RK0NJQjdCS0JuWntvPldHRW9bdiRYSzVidEtFYHlROT5AKG9FajlBNGhHMnlJVFc+dTZmKjptJVZ4bnB7VzE3VG1wYyltWDhofV55bU11K2xhMnwxJlpVTVhRVXhTN31qdnYhPGZqIV15PVZGd0xXdlBLK1phOjZgRlZHJERyPWdzWmJrUmtseHZLNUN2O2BHYWNwbl40''@;'; put 'put ''a3lERzV2O0owI35ZeSFrQXssdUBwVnhhISQ0K0IifnpqQSFnaXFeNzQ8ezhEbitrbDhjIj5FUiV9M0s9aDc8eHM5eCx2O1VVfCpTc25JcW5KcjlsVXcvT3Z5ZG1FInw1azMuKHVVX3kjN3wqNUptc0Z1fkBnIzVWX2RePnVYdXFsKCsxekQzXnZYdSwvc1ttTjk3KnZjRG91QCF6dHI+MH5pd34m''@;'; put 'put ''ZjV3eyNCW0I7elFdbU9lNVk8WFRCOy4qWTI6MGVycHxtMWdFKldOeCgmakFdRFAuQSo2eSk9cThEJHljPyU0TVhPLkJ8czVpSVV+V1lZemRFWmBxKmY/cEtTcy8+Z0VEcDZwfFVDXihFUVR7JHF2UUEyPG9PTlFre1A9OGBXdixIajJ3Jm4kfk9YT2dmNGQsRCNjRlk6ZHY4fmZmNyx4bTs5UkVB''@;'; put 'put ''JC41WSQkIVRVQTZbUX5TdU9EPGIwUi5BYVhpWmZ5LjFWU19DRmx7LD82K2xXNXpecyt6Oi5URiw3aWpfJFIoX0V9cVdDOCZUMjpTZnRiWU9LUSRVSjdZVS8rW3tVVkhbP3lBZnEhe0F8OWZYeGhePlJyY1s1Q0V1NSpLR1QjP2EkdHBXOzpnIU1PM11eQGEyVE5fTTRrM3ppSSo1Vjp7cCVzMGo6''@;'; put 'put ''Mk1KKl9GN2c2ZitMNzNUJEZqblpfaExpXigsS00jfjwrWS83NFV+U0AjcHxRR3dgLDQpQHVQXUs8X3hmdVAkPUxYZzdeInp3bitjXkNCRiR1bHxLRD5XUnwpaT5ON1RsbiYqbkRvKUNpR3FRS3Y1PWgyVnxOPjw7ZEUmazJfVCh6ZlVHK1ZkSWlnbUxGU00wJE0xMS4/UUxVZmdFT05yOWVKLkZS''@;'; put 'put ''LGQlU2B3VCJsR0omLnZeMWh4QmU4K1dqN09nP0JSd0VHKn1DamR5cE1MNyFidDZ8RWQzNT5STSJFIm58KT9CKyF5TjZzalAmYE12dzc9VFtEbD5CSSZhJmpBXiZDZjglQUp9PlI3ZzFRLFZCMCJHQTJybyFRLk9QRyl3QHBVdDU6aiJ5U2c7aWhrRzQsYF1IPiJ0ImI1eDt9IWFCcC9MODFKKyxg''@;'; put 'put ''djc1Olg6bThCIl5SMHZte1Q3YVUvKEReNjA3VD84VjooeG9Pc15SJT9jNDYqNzV3MUAwcUEheGhbW3JnIjReSSpzN281QlUxS21UJFMkWm9TYnczLkNtJkgiWkFFZW1sO1lHeUlfcyxnO1UjZCxmPm5xaTtFPmhufGI3clopfS86PTdMfXV0RGU0Y15GOVBKUHBHL2IzaUA8bSN5bTZhZDFlKEt0''@;'; put 'put ''emFzSWErTzNyXWpHTDFOLj1oWmpjMEwpU3N7ejEhWXE8cyw+WX07aj9KVmNaakZYN2dWfURQam86USExMCRSPFs1KDAjV0YqW0ZwaFd8NDNiPlsoaEt3LEF6b1JgLkAmQHFDP0g1NDpRYXZXKmF2cSZWVnh4cz5ZOUJyUFF8aGwxPFtVc19jeDdZTUk2cilXYF1QYD8+SS9CMXUhQTc0OD8vMCp8''@;'; put 'put ''eEc+fnVIen0odHdfM0NGWFcucHVzVWBRUlg8Un4xKFU+PSllMz8pQyQ6eiNDTW91cCRkXXYzdnI+cSV7OXdDNF9yOk9uNG13fT80PUxBWkFuc19NLjdgNWo9Ryw5SFNmWVR8KGp7NDU8ayF5NCxRJFhjQnI2YEFDSSM0KzlEeERRJDg4JmBFbUpNeTp9V3xTT2UlbmokcWQ7YHlOaERKdGldS1Ro''@;'; put 'put ''PS8meTk+NFlKS1RoeS9zUXdPUClLYFt9KXokPUxHKy9GRn0iaXUvW0B8TUMyX0tNQSY1U016VSVbejVEcyFxKFdTSToxPUdsdzNvYGcpaVU7ajROY0J4fEBEXi4yO1IyNVNwdXA+bj5bUWlhVFNYM0tZMCthNW1zUXcjeUNdeGUxcXliRF49SzNaTjBRSW4kZ20hVXg1RHdjfFlTIV8jMmlUPkJ2''@;'; put 'put ''TGc1YEtCT3Zqbm9aJERIYjh5fXJKRyZlMi5oUk45PzQ/QE46PkF6K0NHOmFES2EiakZzdntyWnIxSFlDLiZFWGtOP0JxLn0yeDVOVTU9KikqMCJ0MV9qLDVgQF9eSmBsT3lSVkZpPjhfSVVvYlEpc1VYVi5gKmFBJWQxdUApL2JbZDpCWV42aCZQOzMuSSw+R1VlX3xxRV5Zcj5Ta3t4ZjQhXkNk''@;'; put 'put ''PHlyOl5kQSROb1MpWHBndkcieHIpXWM2RzpFellSOEhuVyl5ZzpIamI+N2VMbXcyOV9OaSJNM2lkRkpbeXQ/Vz5mSTptSmYhfCQ7alNjeFp1em9JS3kpZz8/cGgybmxIY0djU3c7O3ltbW9AbVohTT4sNSFUUWFUQTNES0J9YFQ9cDB0VSU7W29LRTE3TzF5L29gVmEzaVIscjJGUU14bVhJJF1P''@;'; put 'put ''TnZ9enFEQzFXZi4pOUsqMTNYWkZKe2pvZkguWHB0JFlmKkdLWlZFW0RQJW5fQHN3cjpIZW4/WCg8LD4zPHtBUFJUW3diK2JqYEprKjR4WFNvPGF4XURbRDs2TDt1T1pUM0hMMEJEdFRAPHMjbl1NTmJFa2xCJGc+JnZXM0clbXk/YDw7M2FMTj53VSpXRHM4YjkzQjBhfCVKQUJQc3AxMDRdcDAv''@;'; put 'put ''TnxUVip7KFJOSGk0OTNocksiIzxgUGc4e0ZpcFNWPTNFKTpxTVpONzI8KHwlNCU7QnM5L0NiKTlSNVJebzxrMGg7W0x4fS9LaDddUlQ2NEJXVFtDWTViU0pLPS5ZfGs3Z0dXXj1DZnQpQkYzeUJHXlQzWkAuNTUoJHxGSSYydzs2XUtLKmlTL3NQUmFHXmJjSEd2YmF5bXAzSlA0YmtyTkAseldo''@;'; put 'put ''MmtabTxbWGhoND88YFJ4UC9vTD1IMGJgUXl9fElaI0MzSzt7answQ2JbYCV9aF0lamxbLkZyb3BvUWRpRkooWzplSHxrTVFlMm9sSksvW29dMG5FP0B7JElFaENKRyRhJiNnVHZMUCtAUFJXQmN7bzw2Lmk4YVs9MlUqdzdCZXx7emtuP2BsZDE3XXFRTmdtL2VDbWpfNCF1e155SG1jWkgoZEd9''@;'; put 'put ''TGFJa1UyMEkqRHUkd1o8WjBhVlQoZGI9OztZOE5VOVIudF5PUmBvMVB5L0o8JCxvUXgwQUo3QmA9SHBrU1IsRUQpOGhVTDtOWzF4e3ludjE1KSxbSG1OWU9XdjAsd29waEJvNXN6S3F9ayZAcWU9PmxZMUNUNF1YPX1qXVV2NTtHJjkmMW9VLnwpVW94eXohNChSLiV7bFFrYXJtVlZGMFp+UzpR''@;'; put 'put ''PX1ucHF4c1VHIUAvRE1RSGpLUm94VT9dOF9gU1o7L2dJKkpsPl1zOXs1T25VMVNXPjZSJE12dzllbEIpaUpzKU9MSFU1RDpIRyhHPHcvTUVZXTcicmRRW000R3MwMFNmb21rOWY6STt9PSJpfVklUEI3ImdlKFd+NWxtSVJ2PnA2bmtabj5QRF9OYVdJcm8/bXVLWHk0RW00OyhHT3tjXS9kJDg8''@;'; put 'put ''SXsiZywocCQleE91bVYzRW5XOHdCWX1GZFp5em1AS3NIcDBSTGhgekdkcEUoQ08jRVl9SlBmeHlbUDkoOTE3T3IpVSRkSCF5PE4uVCszZitlODszWFNVUVVvO2lGdEUlcSF6Vz9USnZFJjNWYkUrL2hlXVBvfnQiPTw3MldOeElHLFJNTjxaQz1Qb3koSFBpLj02RipeTkw4Kkh3Q2c2OUQ4XVJb''@;'; put 'put ''VWdWWTdJM0I3fGhVXUxJdigrMT5eS1hwZ3VmW2Rfejd7RCt3R2d4ekclUHdWcytULG1jV0R0TChgcXVNT0xLUyN2TWpEWjlOMWAuSkNKLERPUjlbMyFvRyM0ZXExZHVrOHBBaXReT3NhM3ZwXjo8YFNGV0xTRmVSQiE+STlbYmsvTC9LcFNqbztecjNhJX1SezVCOnRgUmB3LnkrMGpdWFNaJDR2''@;'; put 'put ''PWkzW14xTj52P1ViZCJ0Q1ZWXUpScjM5RCI3X3BaVG8hXiRzITZTNzt6SlUhbEpTcGhLcnZ9ZC9VI1VoeDViYGFPdjh3OD9sclhgPGJvODBeVz17bDIqTTpKb30jPER0OG84RSFbZmRhPkwlYE84ZzJIPGJdYlJPYXxsN2cwfHptUHZOejUhXiooM3FtJGshbEhCamozaUlJbjJOUkpVKV5peG5M''@;'; put 'put ''W3Eucjc2aEcxdDYrOiI4TENYNUxVaFZkJEVHQyMhRl5mbUd8TXFaVHtPYUsxdnhbZWw3bEJwKTtJUWtVUXV8YUpddlowdkROYUdGWiZ5dkNQZXhlbCE1bndnJTwyUWNRMDtMWWRhZWJkKkFnNG0jL0k6PHpNUmFsbUlLPUtFQEJZb0JFXWh3ZVdzWFRTd2I6JH03cCtNZGUhfCF3R0NmZUNzL2Fy''@;'; put 'put ''aDN4LzlGcDtTRypaPlRPZ3RtbWgwMExLJVVnYEc2QjVMN2suI1BNVmFgZmdEMGAlVXpxMVhaLFZAMGc8L0RZZ002WFg4fT4qWSFiT10zUWpUY1B0SForO0lvJjczJTgqenBOOG5iQHB3PGZHPnM2JUs6RGs5fHAkaWwkZU1LeXxhUVkrTSQrVlBoVnVaQlBlTklNVWhsKio9NlI2Q3NYUSU9eUtO''@;'; put 'put ''OUBORXYrdy5tZTNWQCxxW2FkTXpoIWJPSVBgTWF5a1l1JixaOztbXlFhK3pWYilZV1lQKyEzWSpiREMxZiF8OUluMiFJbl0vKz0jSS9Zbjx7Z0BJZkRfIy5FfEtDSipdayteZlNNTywxUk8+Sz0hbSpnNzpgRHhtfCpPOil6aVFeVipqajFLTXhlUGlzT0FueTdIblNpNjBrITVuOnE2WENzSF1x''@;'; put 'put ''RCVFXzFjK1NaM0UmYFQ/P2plUlsqQE4hUzdqOGElbyFMbSFoRHhTRT1LRS9NaytIcUZdSiMsUXErZVZYUG1gPnFJO2hYOmlHZDtZe11oWW8mPyR7V2Bycj0lOnN3W19QRilsaStjMT97UlckKTx3SS5tfFMyXnl5ZCNrfWNnN1UvQVlnL1RKO2QwU1UyNEQvYGxpeSlrOk1hZmZuL2J2Xkola2w1''@;'; put 'put ''NSk3LyZDSUQ4Si9GMFZWZGpMSmp9UEokW1NhPTUwMXw5WWwmPDs2aGh5TkZVPjx5anl5VDM6ST82c3ZRQktDISE4fCFpMF1hUSUxbSYmQm9xS0NrP1p1OWNocTM5KWRaYGFjP0tiJm51UXo9Q1tnQmNKWE5XOHlDMFQ6V2p6RkY+cS99YCUjKGtzZU9FJUZIWlJ9QUhNQSVGKmJ+MmQrdk1NYFQr''@;'; put 'put ''bSYpYXVhRkouaVd4NVQyPy5BbVg6NGxTUUtNQihLa3lMSHd+QXVFRXkoUExLam0xcjF0VV0iMWt0O25zQFtYZFpLb1B0Sm5AcUxSQkdVWFpWX3o4MWVGekBzXitVYCYiPDV4e08uVj5XPmJQQGg7R1okTjd6Py5hLlE8QypaSmArZT5zd1ByZm12VGwoeyV9Nzo/TEA9KWNZMERWMklSN1JuP316''@;'; put 'put ''KiluMEZWPEBudXZXPS41RC59MDxvXT1JVWUmMkklWmpJJTdkSSVrU21zMD1PdF1LajVaUUttc2NwczZKMys/WV1QdEVvb2cwWF9aXi5UQD08PE03SVJ+OUk0PnM0YF4meHszMX5lbld2T0pdImgrdjNiKVNZLjNrTTtIQjBlMCRXRXdZSkNkQmMufllRYT9PfHddNnJlJWRtRVlneC4hTzI3d04o''@;'; put 'put ''dVRPMjp3NFoqKjQpVCR5d0VfRzdbVXYrKThGQVF0UiY2YHhVSCpwWW89Sm1uKmYzTzZdQmc7XX5aIjRQVS5tY1ZxWDBEaFNNb2duKURBYENlTU5fSnRVX1o9VDpmM3ZwcDk0TFApLzwuMit1Yy5PdiYzKGdrcFcrUUk8JlAhTGQ3OGBPNHMuQmhzODx0Yix4NHcyNj5eNjZSX312VURtLmkrUm9R''@;'; put 'put ''dG1vRX1hbCwoamtSbCFXQE9saCYxKSFvZzFUMVchczl+cHluLEMjMTJuV0BHbTVkNy96JlJTb0V5PmlhfEkzPEQ3PDYkZ0M8UF8rQHU7Y3lHVD9wZFFtWTk2bSMqIm5XMX4/RH1+KUhqZEdfcjJiQDQ9R1dETDY4L2hhRmpLQj06VmxzWVYibHU7Okkid0xIKnBjYzRReEp8PzdneW11WUZhWUVA''@;'; put 'put ''ZzxbOSZEKnd7XSl3RCsvZDolbjIhYzwqU2IyOWJBbT9JS3UiV2woX0o3UEI5eC5iZlBeYWpbeXwyRChXckxYS0J5UzhFNl9CRVdeUltaYkMyIlYlZXVKbFBAXX5ydSs4SUpHfTBEJDtHNTxxMzIzTyFgXSZnL05qdipidFA+OSJOIjpjJSsiSF1FZkBtcVNUTT5nPFtLeC4hPF9IYXZPRUk9TGJU''@;'; put 'put ''dVB7bHJuSjduflRWOHJOVzZhIk5RP0ZDNDpxcz1mZEpCWHQiVWA1dG9mIjtUTipreExwaWM+WiEofD89X2R8Q2JqbXFNUS9JbDd3cWFNc0I3UkZWcDQ0KWN+Oi80RTtSZHsvIzk5cExJbWpjQ3NYUVttPlQ9WHZWay99eHI6Wz49UUc4Uk93NE91TWIvLCsldFFqaW8lVG9nbzVhSmZYOENoPzJG''@;'; put 'put ''cjYiQVFhUXsiPXkrIlYyL0QmdTlGMTU/dTBnTHZEZXg5X3RWQUordEo6RWZFX3U2SkJpaCRDaUl+aysjK0VGTzlDKX0icE5fPGVMRUMlT3MpQlA+R29fc01VcSovRiRaMS5rUzZLSUI1RHRkXT8pWjRLVE54OHZBYlFJWmBPQ05xZFJzKTdZQz1VdVAmanpVfTxFYDkoPUpVSlp1WGJeeD4hTiI7''@;'; put 'put ''cl1EX0d2bjJKfElqP3che0ppUVI1QzdeLzpnaVtAa3F5Plg4STB0UCJPPyp4L0E7b1tJNkVlVjNwXk1ZKS9+QkwmPi9BO2RPYU1jaGc4LG41Qi55OUQ5a24uRiElKz1LQm01cTN8c1VAdkVIUm8oYXVwcWkxODJgSzhBPEpmNCY6YFouJGJwLHs5RGwrKD8lNm0rKDZAPyVJZSNqaH0/MCw5WmFH''@;'; put 'put ''d0ppITlnVDUuWnBARG9gO08rc0BAPj56NjBWLjBoIWRiMS5ZJjdELy8rS1pLVSUrVjA0OlJDV2wrWHVlN1c+KVtCcShhQV5MPDQuYn1CbVd7b3YrKXwyP3QwO0E7PjNbREhkJEBOc1guajVpdTs0Ris/TWVeVHtyJEdJRU1dYCFYfC5BJHQreVIpeXozZEB5N3RKLGM1SnBlQVQxXmFCUiUxQypw''@;'; put 'put ''X25+bGwyVX0pO105bG83O3xvZiJQJitrSXB1Wj0jRlcpPFRKWXl+KWo+MCtAI31TbSs7IVgwSCVQZHltbGglcU4xbUdpSTc5LChSWEZKdlNDIU9bYzttZCFoRnVQNkZCMVl0TTZfOmhPITQrV08+VHoqTSF0MURyPk5+NE1wWjdHOEU4U2U7Tyo9WGcvWWchVzNdL0VMemlfWER6XWthKVN3a0dz''@;'; put 'put ''diI8W0AvWTR4bVlXUjF4WVZTISZnO0gvZE5ISXUoNHp6TDYpUFJwQjwoV2pdMFRdaCwpPCYqdThyOzh3ezdHOmNGZkZKU2F0Y01zVnpoMGV9d1FvSGt9S2VNcyEvdTI7ZndqUX46TmVhV3M5V1tOTU42YEcwW0spclN5QToyRmt7KD1qOFtwfW8iVHxbRihlTEApPkBHY3RqN1p+TltSOSYyY31V''@;'; put 'put ''Om8wS2h9b0cvJDwvbmFyaEJDPF1oKCFbKD1beX5oZ3RNXTNRYFVqUXBLdXc7e2gsXzMqJX0jSz99aH5nPFtMTS9ORC9YblR5VG4/YF1rITAsMUFPZzNCWkFPSChhIXNRQEIwMTVtRVBkVyVAeTBNTmtCKH5qLElQfDI4ME5LdmUqcj5SKzd7IUZsVWMuQlhpIWoiaFRZQyNoNVl9bS5uZHkleSh6''@;'; put 'put ''NF5OQmFeQ2NSV3lNZm5CWUh9OWJgcWU5JWdRWi53e2dEIl8uK2hTcylZPTd6QkdBITIhQFh0Uik0WWNTMWYofE9yRyk0VmRfKFZQZSNmO1VDTnovaSEwQmcvJX00WGVeSXNZZDsoLzEqaUBvKHFxPU1uMjxrLzc0SURCIyFiUiF1eExQRVhNL0dQY3AqPUZQY0UwbHd9TEBFVnNSTFVGe0h1emx3''@;'; put 'put ''XU5YKTlJWHhde3JMTm9ed11OQCJXKWlALEZITlo2JFEjSmp3e1QhOGV4LldneGVKTng8IWJSQHUxbjJkM09uMiUxI1ojeiRMZ2Y3SV8ic0k1STk/YWozaUhEOnljRVR3IThNLDIrXmRoeE56XVorSjB1M3FiNDlsXUE3WWJIS2RUdigrfDU6Q2xYP2A5bGJgM2s4UEtobnpUYmI5Jks0dzBnZVo8''@;'; put 'put ''U1U/VGRYJT9iM05zYldzPGclR184W2ZQKXhiM0J1UThXeHkpSHg5S15GJUB6UERCezlaUFV8ellSfXhhXSZhVTY+U2dmeklfdDNrM094ekF2W1F7KTYwUnhgKjs/YWpYaU54Lm5SXkksZ1E9I2I/QWY9TWVoQEksQlFDd3plbmNROk0iRCFmSUVNejkidkMrUzo0JThaRUo/IVJKIXJmeklVTS5S''@;'; put 'put ''QiRYSXRSa311Wk5YJissOzIyP0QwPXc9QyRPXjcqJE88KGpOUyN2Xk1OZ0I/MWl3K2xJXVs2SG15UClKV3ZveldSSiFsJjN6TjlTQnoka3MiMUtCampJaWRKZ2NKaThuVWo4ajdIP1g5fSM4JXFmRV9NOnYoMVtLRFNxRWQkJDFrdkh1eWhSNSpwQFJGVl9JZyJNM3MxJU07ZkchS1VETXdVWEcv''@;'; put 'put ''VTUufS5RYlIzY140a2Recy8uTGpgcy5EQ29Fe0w/UilvXkI4dkFrUz1rfEA4UDMhTzhqPCQsdXRoQ0A1SXJ1dmp7K09aZEZHMFZrOXtlbm1Fd2YpcClxIyl3VztfKWY5VWUlRTBuS1lTfFpRJVBFT2NReVdvdU0lXS5OOlU6MVF6cX1YR3VsO1h3b3g1dk01SyIxLHE9WDIxZTRlRW4+TTx9RkJi''@;'; put 'put ''WGspJGV0JlZrMUlmL2BvdCgxRX5kXiNgViojbT5ONT5PJlcub0QzUTksZ1s9PmB5TlcuTl0yYmllaWEiL0EwNT5BLGw6KG5sYkA7WD1iKDFOdXspazY9Q0NXS1V2dzcmMGhEMzQwLCkjZjlfUkVDR01XM0cme1JWYjtSLlY+XjFZUm45SnllQF9JNjg/R2MqWWlqT1d+XXk+cXk1OkxZVWNSKmY8''@;'; put 'put ''WGUuMmJSWyhYRlVKP0BiMHtlRVpXaSJuQDE1WVs4YkdZRCwrL214OHpPdnBTcFF1eSZXNzhuWzc7eHk4Rl5sVGZxSHQrPCojViY0SjszfUhzZFhbdGZweDU6TGpvQTZMOzhLPmNgckNrR09FWjhScXBNX01WdClzXzlackJnMjwyWCFDNjtiVjF7WWB9XXllcX15O1M3YDAzTHpGVV0oKzNxK3N2''@;'; put 'put ''d1ZkVUdNN1k4MyFYbyZwRlMmek0leXYyVUZ1ZUhGUWNXQHdEUytdSXVRQzNBRDdGZUdTfCpubWA6cFQ/P2p5PXBTeFl3SUZjfFFRWklgVylqSiYrOHpEJEU5Q3QrIURkNiZIKiJAYGtXR0U4JX4uaWBTfGhsdWp1W2cqcCZpTiF3bSssNjpJd1c9ezk6Uz5sRzxKZmRiaWNFKDpFbUY1SndDZHJP''@;'; put 'put ''VyFHNDVUTnJ9SV1XaXFQX1g7R0YuX11hPk0hO3N3T1AyfGRLODorRDdJOyNmOXZbO2xEYX1uMT1ZSClfNjUwWzsiX2xfY1R5KEdAI0opKjEzN0VvNXgzVSswS19WKjB7ZDo4ZmgoSUI8UFN1N0FmKEsqdSwqJmUrVFshZm4sbmFFez8vaz06Ri9+TiJtNCZfSmExOEJsdF9PWzlgVGt8fjlnb0Ew''@;'; put 'put ''QC9XNGJyI0hFSnVOeyV2cVI9P1VOcnlpL3NbNEJ7eGI4OzI/Zzo1bXlvRWJROkVwLClgdltHUEtbRzcqYykubFM2QmAiOWpQQUA6W35oSG8hWnQ5fGc3ejsoW25ZeHM5I1khfV0+ZmZZQ3R6Rl89cWpWMl99dkY6XjI8LjFpR1BATThmclBBRSZgWTNROlZ6UCFTYil1ak92O2YqN0pGZixTeVR1''@;'; put 'put ''Uz9EJkA/eWRLeEZZVH5icSxyOlM/c0xMUGFhV2F5ZEEpTmdXS3slU1kqMG0wJXNeamIoQyp2P0QrNjNNJUN2dyNzamQ7UV1xPjx2IitxJHxlQUlWbik2YkhtRH40M3clblhueGQ7Tk1lRGhTRHZGQGx4NCtITyk2M0B2bHUvaGw+YXt1fENmcXRafVckWUQsI1BfVGwrO181fnldMEY0dkE+b2Yi''@;'; put 'put ''Y1J7V2d6TWBmRUJQQkwoL2FqJCwoL1Z6SGx9ZVVtdFBDaEYlRC4hP250Jk5mSmBAfV1iaHorZCRSW0dlOCYmfHZQSU5TT3QuV0U6NTslaSolcT84YiRULiNDcGc7Yls3Z0crKHQ4PmNda1A/RURlW2I+TG4sVSVLNXYvLyROQzR7XztxLFc9QHkmTnBmeUgsRU1BYktzMDRgbDZ1PCRwVS58KHgr''@;'; put 'put ''PE5QJlBvWCRiOUh7ZXV+LGpUM2g7WnNFM2dUZjdrNm12KyFbVHhEOmdfU0I5aTw3MDpQZTZaL3pnaCRtJn5KQXpkdX1kVChzKmZ+VENBLFhJYjZRQmtGUTgycWc4YF9UTiUyQkokMmIxQmYyc31mOjVdLDcvLGYveEg2WTBFOjNEQFJVYSJGVSZyL1BfTCopKCtVLmFDbVpCfUwuL3ElSUorJS8w''@;'; put 'put ''MSlYUitmYnh1UEwkbyFjRUBWci5FZUlzWXM5MCpeYFNdWTwxbHJKPWxeVk1TSjopdlBuKGEwYk0qcTdMW1h6dXEuJFJCW1pnK1ZhbiNXTHBRQipRe1lHcipgTXt9fiRyeXtfP3h8PiZQd0QwKWAoJXA6dlQ0SCtvUjc+V2hGS0dqaG5HNUxfV31vbylnWEA2YFtDcSl5UnJ+QzlCe1hRZTNIUmhV''@;'; put 'put ''K2JJLiNkLGwqRSUxdktpOHYyJVNWditDJSFZfDhlbzkqN0ZgOiVWcCp5IS59RFQsPmIhdF93S0VNJDMwdWVYRypsb0d1WXVoKmIwP0QlUV8ofEImanZoXU9VYG9GLkIqPS5tVmdgY0lyJixaQWZOVytMOV56YSZdeytuIUw9KytlYFo5NnB1aSlEek0lYiV1ZVEmJUtyMToxekQreF97WVJpKVdj''@;'; put 'put ''U2o7S2wvQn11RkFhbENyWkVaYT90VT4qY0RDYl84JUVjcUVxKnwwLFdPWVpvKmlqRmI4azBkTX11PXcpMEs0ISZ7SGNBZzl6PVJuU0ZCIzBJWGEjKiZEZyVTbXNDYF5vL1R2ZzY7aEgkW1ZAQjEuLHRHbEJIXz9bLmJ9UV1VN2FlbVR3L1VGZz4pP21OcCRleW11PlU1S3J2WlBCKDthVDE1VHU9''@;'; put 'put ''SHtMWlQ1WGtAME09TVpUK3FLb3tdYzt9KCY7eDhQbyJzNiJ6eXNWIlo5NkI2S3JkVmgqN2wrNjBsTD58SlIuW2JyRHZxKmMyOX07MGNKZUFwYmBtNDpJUk0pTVh8YFgodE96KiZUM09XLDUwVGgqaVRKZChDOmY/V1kmKE9VQzdbcytxImF1M3ZAa1hAT08wamQ3a1IuZU9acHhxND1daj5qakdj''@;'; put 'put ''cFo0KWtHOz5tPCtbYWFXd1c8fUFHb2dIMkg7PlRgfW1VencvMTA1NWdnZH1oMjcxOVJJTSIvZSs2M2ldIyZBfVVdT2w1JlBgOTU5U0BLY1BxYmU8cD5RWHZHZ2RmP2pMfmpGRD0vaHxjfE1pMEtNMGomcV9HNlcvZD87XyM1XzM6XUdSaF5yeXMzQ0J+Z0RvPiVWbEFteHhiel83MjpdYSF8bjhA''@;'; put 'put ''YkksfSliTE9oPFhvbGZ4aixvUHx3blApb1AjIjsheHt7anZGRkhANnMwdn1OTX0hcUFFPip4P09aIVE9KCQiIk1WREtZMlpKM08xNj9MT1RQQ00hO3pdTzp1bDM9OzNaTitSJHE5S1kqRzVjQG9Ub1AsPWc0SVFESEZDTVk+WyVGampPUk1dU2I9IXBhWCpBckp2aWpsPGJWOzFpR1lqN1FATm5v''@;'; put 'put ''cnVyR1FvcCsqTFpZM1tvWisrUW01Ril1ZW9JYCVKPj9vVENoUTBfW0UwUl9FNm4sTG9OKTV9R3ltYixFJXQ8RjE9ezFob0g2Zkg3cVI+JVk9MCk1Ql5icWREZF5WMDlQVEVIPDFNaiFDPl8uN0k4ajUkKGI6bnMzWG9BPDxyVkRbVD0wMVhQRl0xbnpxaEFyJjxUR3ArKW9reSYlNG8+R1RVbDAz''@;'; put 'put ''KWoodHY0QCIrOjtRN3t5Nl5jb21ZflpyNmY3MTFHXmJpJixOUl1iYmppa3MzXXF8OCkuTEciUm90cz5RMEBJOjkpLl1uLjBORCtsUixZMGZPM0chRko3QElEcjlPWEt2YW5aNCRzJjEmZDlZOXNSaUAjZE5JfEtdK1RGTlNjT2lATEgkOHcvfHlfM2c/NnBYMT1JNj1DTFpxPTxHeElIb11ZWk1E''@;'; put 'put ''KzNye1NGUmQ0SFElUzE0d1tCXSNNXTlMK1tNN1NkcEJfMUNxLnU0OHMyQnR+PUF3MDouX3xtYU9ASVlAZHRTY0clNF46YX5IIzhaTXQkPzBWTT13YEx3PThXTGltWkNjVklucWhrbyxTfW53ZFdFNXdARFJKPkBAW2dNaSFFMml2fnY1djQuYW5lX3V5TEh+cGYyb2JmKXsobmcxSCx+Wn1aRXhT''@;'; put 'put ''YyZ2MjF6PUE6ZDRSeEJsPldNSEgzIktSKElNI3pBJS9PYEd+TGA8KjRKeEBJIWg4dDl9dWNlWUA+fW9vYVAwS1dAbV96VHpLYU87ej8qaF8xSjEvVkB6dEFqRmt6UixLdFR0WFBeJCMpcSk+XXkibmUsPVhqXlM+SD1QeEdzUGlEbUwiQChmK1JuR2hNInZgOXM3Y3lbMUNHaE03TXhqPC59T1tP''@;'; put 'put ''WE99Qkd7L25QL2c4fTtSNWNAOEorUm1rdVBuP2BoJSZTYk9Zb0RYTSN6ITlOQ0VnOUA1KC5tTzBWMCZiPjV5eiw9NkhSRVt4e3B5UG53VWF0VDJ+fnRORy43OEc2b3B0e11ud1JdXmQoMH01KktFaUA+VWozI2k6RnZ7RmlmUFZzLlpJa1dGOC5efFhdTHRiV2BWZzBINUwmSVY8Zm9jQl1mZ2Iz''@;'; put 'put ''JiNSclVRRl9uYFhycCtNNzI2M3RiV2BTSkBOaWFbcTA7ezJOdDQ2Myw4JmJ8OVl9ISwxOE16eUEqYm52OmV8MWdzZHthdmIhKSN2N0pSdWVGIzY6RFkqRzVNJDZ5Jih3IlpMN3x1Y3hCV1BFfW1zRFY3SDtUdEk1RGkvbFlCLnNHZmYqM2M+Tm5uOm1gZiZCNiI1PjVCQz9eeFRGaWFCNW9rOjsu''@;'; put 'put ''Mj5hMWliTXMxJnJAdHBsNEQxVD1SeVhyJV5dX0M1SCxTPmwkRDZDTnEzaixMVmp6ZUtRJWAqVDVCWzAlT1p4amYqVHZmN2Q0SV5mbzQ1TUA/aWghTSYwTiV4eWtZaENHRzVTMT4+czYuJTd0O1hheVY1ZG4xTSN4aWApTXBxTThbV05aIXFxWTtmXTBsTVdLUzojdSlUV0BMeUEkeGozQilmQ1hF''@;'; put 'put ''LExWIihWd0EyR15nemdFK0dJUi5ybzNlVl5gUjcuMkMwMiglNTwuMj1OZSE5anJoIUwoUk08QltCYk1BbV5MYU98O1ZQQlZjOEhLdEs7MSIxeUFjOTx5WnI9Q2Q8eDJpYmlbVWU2Ly41NXF4JTh0XzFoLGU4TzBYbS9APU16Ql03NyMmKVQ9VXFFJFprSzk7aH10YTV8ZVQhRXRbZn5nPVRBPHNH''@;'; put 'put ''cWZgTWV0V1BmY0dvSSUhXjFWWT89bGYlb1cqO2QqN18yJHpCZVpJRT1dLix1PUxXN0doZz5kcCJnSHgpIUtySz1TUD1vTHByZ2xTZ1B5dHp4cWxwMmxGKUs4ODBWUCJhKSleYV4lQHNWS0x7eWEoMHI1dlRwMCxjP2BfdTEvWzRHPjYwZDouSChHYWdJXiI+KF1fTC9WMns3P1t1UWlFR3RvbC5l''@;'; put 'put ''W0VHQ2ZBeUhGb1VTaFlVOGdoWEhGUy9gR3t1MkRoUyIrXUY5ZndAMklZTSJuUlYyQzArNDM3aUBRMjo/ZWpxemxsLj1xOzFmZ0UoRkFOWXFaUTI7UHd3fmhDZjNpcDd5bCtJVylEJlBNd2VXblo3Z0R9YCJwTXh9NEEjemBtez5HT1I5IXNNUFFFX3Z0SnA3NVlqOyx8eClJPj9ePilYMD0iP3BE''@;'; put 'put ''R1crWjA6TnwpUEVZKTVdNlRHfCNJZnteLn0lNzNoJVMiZWB+aSI/aFBvIlhFLEEzdmMrIV9UUEpqWW9NdjMlU3ZQYFNJb3U9biUmfHFbM2xLNFk4cEV+ZS8yUXFjKElVRFVsSTJ3IlgkVjBZI3s0SXxLJFB7Lig/MUtkaixRXlN4ZTJMRDhCRTx2PXJUZWAmXkJ2e1B4Im0icSpeYmxyUStZPEBl''@;'; put 'put ''fFgiR1tMc3sjRGkmLDc/dS9NfnlZR153XnlLO2ZdRnw5YXY6anl2JnwpMGBTcTI5RHB7YC4mRSZLMnNrLEppJiVxa0h3ZHlLM21oI3Q3e2Z8MDsmOyRxO2wjajJDcixOc2x5O3tQfCpTZ0hVbW9wSFl1bks1RVkyXWRiR3Z8bSteanw4eTBELFRQSEZWI2tLYFZnVTled1laZEdaP0xacjlLJjFn''@;'; put 'put ''OV5eZDYkSSp3dk1oKXtYaCI9IUl6NTtALD1PMHQuRkVQWm96Vz8oLyp5MW9NZ09SNE5odkFSWyRmbkVeLis7Pl51YkZxNWlySXh3bDZvQyksYzEyXiV4Z1BeKFRQS0sxJD1EbSZWSCV0LGQiVTg1bilKQk5FWlNtJGZncSNmQGcvbDJvOVQzcVM7KjB8Z3pZRURuZnsjbSwzNlRtdG0sMFJfIipL''@;'; put 'put ''PXVQN2YkJmxKMz8wOj07bER8Uyw0KFFyWCF8WVExcEs5TjA1QDVgXXV7XUMvezwsOlI8VTFmLEA+bCMlOHMuaCxnZXBYJWl9UE4kLCUwcWU1ZW8xZ0gzY0xAQmdaN2VdTnRLIzZheip5NWM7cVpsJD9kdGdnJTNfbi9xPmpKaDpFdFAhKiM2NVh9ITY1U34pbVRjQDt2XUg/ZkJ6SVZNYEc/SkA7''@;'; put 'put ''USU9KH1qVTssTzhffV5VYC9eaDhrYTZIcz5UYj8wL0A1KXJUOy8/aixDYkw1NVR5NDRtYHBoYlUkTyg7QmA3LE4/ZVh2XnVNNV0hImQsclFDd1VnYCFGNXBaWXp6KmJeeUBCUlZhWFtXalhAUUBzOU8kazVmWmtFOHZ5S2FrPjtRIyFnMz44RmZveW1QbkBdTHg5X3M8OEZnVkA7KV5sUFlFOTky''@;'; put 'put ''LDt8bkR+IVZ+akZue3Q/b3klIztWPDoydi9wI3ZlcUpFXzs3Z1goKXc/WXEsaVs0UnJbOjZwN1gyPjxaJjNfPHZuKGN+blR8dXIseDBLRyQsITNDZUYqPUdYQis5S3Q3eEBbI2p7MmNGW3Bmb2tfRVNfKXNxQEF0QjgvdEUxNlg6PmldanojSTxwT2FleFBMTkZpbm9TeCYvSVZVRVoxVks6JV5L''@;'; put 'put ''VTdma3RCZnZtSWcvZnl1SXlZPW91QFZoYGdjRTZeNyx0RjU8O0lLVSE9L05IT0lQMXs3NE0mPDFIKCpRVTpqKX5jQVc4YW9tclVvKFZgL2ooPjtnNz1uXSEzZU4/Oj5xLyU5enMkIUFYcmRraF1GU2hILG1YZkM8NCZXSzhxbDdfSlN4Zl8iWyxtc1UoVU1EWkUsWV91b0pJPCp+QjF5MCklKzB1''@;'; put 'put ''eTo8SiJtOkJhUD47SnVrXTVITU9VZ2NAajxdbkhFUFdELi4sNXxZfFE6P3pdV3MqP3B9PU1jb0xGOEhRVFlPdVVNbl1XUWVxeTZ1JEI9cU5yZHRdJm57UGN8OERwJl9gaGB7fWliXzx2KFIsRkhVOWVfR3VmRGZ6QmNPQkcqc3w4RERofCo9OTtKVnBJS2UybmVEMSt4Yi5HPFhtWWAlfD9LfCNY''@;'; put 'put ''K3lJYittKGIqNWdVdzBGRkFSa2wvQVhxSGQ2KkJNL214L1NRYyklT0lQYSw8eiRhdllGOSJxcn1RXl8rfXAlQ01JNilSIlJRI2Yxcn4hL3ohVmNXdnpBMWVGMTw3VGR4b2NGJUZUbnNNaD59S2JxcyNRI09YUmlgOSJLZCwsT3NCZXh9PSMzUE5XdXFvKj9ncmslfV1rRWVic2NmNj51dXhRRlki''@;'; put 'put ''bT8lWFJiRlhRdUtfaCUqJHNCX2RCbW5OKF1hO312emU3SnF9SW9pbFYuNHxzYiMmRlY8UEYyUlhvc1tvVCFdLyVjayRrZzhGMUlTdFR0RnphO3ZacEVEK1FJKmV4XkxzWjw4OlJrZV1DOiVaO2BmQCVJOl9GODliQF5PN2dmKVVveDhBTEx7L3BiejB8KkVhPVRJeFQhOjtAIWA3aUl5dStsfGF9''@;'; put 'put ''Jjt9UTZja1taUW1FTyhUdis7RzFzPDtyRGR7dz8hYDFZMG9qV3c2TC5LZWMwXllnTG9ubHwlOyh2ak5FYDBJLy96UT9zXnshdSZxRlJ7OXk+MT9FNlZwSz8rVUw+Ul5qZkNoLGw6IVtVdFdWWXlmdEtMSkw5ck9dMHxHVndSRWJ9QSksZDNzOHpySSJJdWRnPyZHb2JHclhYR0dXR11HVUNmQEY0''@;'; put 'put ''YnBVdWh4WHVMSWBCWnx2M3w4djsxYUdmaSt1L0R0S0xqcm9XekFkUylgal1kfFgpUFFVejhtKDh3NHp7RHJoTSEibTpeQEtHeEpWUF82QGxXQWlNR1ZUQzt7bCpxUWk0RUtpYTA4PElheW1sdElOaTA6NmVfdU0wNVFjPj8+bFBsQiZOT3xVNiQ1WVljZW5EV0JCKnZ8QVspbyYjSDR9Smg9NVcm''@;'; put 'put ''IitdLzl0fEN6XjghU1J3aThRTzd5VyZfT3Q9VltFUlZrcXdEUW16ZHdXbD9iQTB2QlY+dH54MzNnZypRXTtbPyw1WyZFOVkpbWBaMVcyUEQ+JFp8VUdpNXFgTTBAciZ6XWtmJUdqdFBfYHBhQk18elJqKTtGNVEuUmIqfjxvJF80KytbRTg6Y1I5X2ciW3dKVzlpaFt0RVVKZllqNlNWWiolZE9q''@;'; put 'put ''PkRHbih3I0hNSzVLJnNMRnpDR3M4WkZNKkF7YTpUR11NXU5EcSNCbitBYDdwI0JdYGBHPyZPc21iMnVMbnYzMFd6fVFgdlN2M29PeiskNDI/KklNSDRsO1UiL3k6YCYoeVNdZ3tRYCU4PGV2M3A3cHltfTJuVjBUJTBOT3RhcWZZciVaZXQ5SHg3LyMmZEdOemoxQnJoRmsjZk1RYE5ZU0hMOCh5''@;'; put 'put ''PVtOP2dISD5IRyEsWzZXSi9GKmImZE5pOlZVS2lYbzBfV2Y1dHVvZCxIOStJZGlOJiQmLjdwR1lkZSg9Q3lHK0BPU0hiUG1MfmpsYmMiQFg+ejw+XSZ0di5CO0Q2TVlNbHxdJi9EUkhiUEohYVZxJnJ5bzhIUmFWXm55OEBfL2ZNaVtGUkhiUCJoRUciUixjQnpuZ2J1c15bWkYiLytbNih5PXBU''@;'; put 'put ''JmgrMSlXWUIuVFFPeCI0S1IkKEkzflp4S18uNW5JT0NCc181V0YwJVRgUUV5TjlxPkRhYmF2SlhHWWZVelI5fFp4anM+VmdmZ3VaPSs6Z1R3ZGd6aXxbVCl9TChITXVkJmlKNSsyQk04Vlp1LytNb005Vys7V2x0JDVRS1QpJTNGTnBeS0liNjtDImFnRChGLF4oS04xdUsqKGNiKUVNbShWJG5N''@;'; put 'put ''Z2hqJEF8TE8wY3psTURrdHlRe1dyPzBtQVUkRUdIU20ieElrNHxBfDc6Qk8sWCFYK1tQN056SnVJSDh2TGBzISZNVkQmMFRMSkgrISJ2cDpjY0dfO0xYRi9bPSYrQlovK00+ZWJiOH5LPkMqTjV0PjVzWDMreCtCfn5EdDpYWThAJTtWbSo9JjxhVzhnIj9ZXUtlbHtBd1FTcTUmSWlLLEFyfikq''@;'; put 'put ''LGwlO0pEbSwjME5NUnk3b11tVm9ZSWdOREhLKChaZnJvOjw+bjQwZCpKMmtjdj98eWxoIlYiTUpsRncrQj5oLHdvVnRfbFF1S2RFaVohbTNxVSYhdjtfNVAoKDFoaDJ+Onk8RCo3QEc0YUVnPCsjcyRdNyVxe3c5cCVDdCEjYl5seDhiRjxodzEqVVZdVz9LNm9dVDpvfXhfQiRNNEolN2dFY3Aj''@;'; put 'put ''flV4RUh3UipmS2BbUjk3I3xvN2Y2NT5yKTJKOGNFIjxkYkhHZFQ/Tl89cyJbITd3KFNvPHc3dlJLVFZ2KVZ3Ln0heyFIJjUlfVR7OU9tTTNGKig0K1ZHaVtAVU9LP1NrP11lXT90dTFobyVAK15vNnZzS3BoOmwuRG0pJmEqU2x4b2NVTTwmfSV8dG5mSGpfbU5re3U1cEtlOTtQMDNJPiV8YzZC''@;'; put 'put ''YExGeU92JmZ7Y30qIU0wJjtRYCViTHMvYjdjRiFYfS54NHRNUFNWT31MeWo+KytRYDovVkxOdzxddltyVXlAYTR8fUx5WERGb3RfcU46cCZyPF8uKyJFPnZ0UllhejkuX285R2FuaHl0JEBXfTA4Rj1jPyVuc3glQCRRdX5pIWhGY1QlUCtkRW9qenU+P31sUE8od3lzUllhe0tRTmt8O19MUz00''@;'; put 'put ''fjY+Q3s1YndlLkVGY1RyJmN2dWo2LnY/Y2pzRlQhbnEjPChBTjhRK2lMR100OWloImhQIXJzQVBITUpQfE9Wd34/YC5KJDNRe0BoW29hLHYvYiJ5cHcmVjp4eEVYVXJCRmkmfnchUyRkNz1ZQ0ZrI3llcWhBUU4jIiNNXi5LOEAiZHJGX0M0ISFFYVJefSt1M0wzKXxibH57JV8sTk0vWH44PlRT''@;'; put 'put ''dl4jQzxvKyI7Ri8kYDJ7YVQlUSJdUj5LNE8heFc9KF8mSypeVkxoUWBSXW4uOmFPM1s2T1IoNHFsZz4mN0tyQmRwOShIX3t0SltLeT5xKk9PdUNGOFkmPmNoSFpPfmsmVy9MNkpuZlZ2YDsyUjVnW15aTn4vdHdMPjhFdDpbKSVEfGcmWn0yJGJPTCplJSxwckh+THlTaVZzfHRbKSg5RipMbE1x''@;'; put 'put ''KGBSLDRzb1Q7MCYyb1s0Sz9tbWZ8KzhpTSFnVT5YZjk6e05OXy9LcWp3bDptZi9nNF5rLGdgVSNWOV9ZIm1QZG50ZylmZlNRSz16WEtVN3ptdH1jQypfIjdQL0AhIjNoXWs5NU5vREdDcjchb3Mqe2t1Ml1hTEBubnBncnEhcmN5OGkoZHhAeGFVLzZvOjkmODBaK0BQfjZnSVhrNy9eQEh2JjBC''@;'; put 'put ''TzhVaS9WXWFUaGlZTUh3UmVoJlsqMC9Tai5fQVQye0tWPDBgMl1RWWp5cDR0UnJiaU9lQ2ZQZVdVLCh6fXcrLFJhZSJpTkoiKz1xLEp0cHU0InY0b3BgdlV+MGNWRV0sIXRKdXw1TiRFOV9OW31zJnNqM3NXMX5DXjozcjZiZjQpdWomMyNkSnJILiZEWStQa15DPDFoLDBNcHZiQnJYeHhFeWdY''@;'; put 'put ''fHkwejwvZzdqdDEpe2Nvckx+V3NXV0tsMEVzW2o8a0JfdyJ6JjUhIl9+aylFNEcuc2BHLyg3ITsrYDNYJEd0S2J1PU4mUFt3XSpkckZGNXpnSClJfU1xPzhRTHtTJG9eTWZBakJOWF9iJixZY1VTY2l3QjZbSyV9PVZ8Tm1Wa3JtaENQPyU1Iyw8MTYxKVdVKUhIc3NRI14jXz8pMG0/NDVXYExb''@;'; put 'put ''aDl6YiRdJVd5T0NrPk45KlVzLyVFJjc7YnpGR1ZUPWAudX1CcGE9eV5EUShJdnJyUXkzd3lOXytbV19XWyxFdUR1fUBhPylfZ2Q+XTNEVVttSWZrMSxsU3k3LyVFcXoiUSQ7ZmgoZTsue2lwdFswKEc5UEhzQF1HZjBMSj4zYW9mM3EvZVdQP0ZvZkM7PXpxaH0weTUwVUJ1MipJfk9MPClvPFYm''@;'; put 'put ''MG1CJXsxIVYvVUwrN11qLD5SUXhOKFNFYV5MXWE+MmRQPmN3cy87UCN9X1BwS0B7Ylo4VT4hI0x1JH0wJkksazw8Ii41I2ojJStFcSFuYG00XkBiMzhkZ0NmMV4vPCQsdyZvU1VdT2l0JHssSHApIT5kQnZ1VUVmZyplPTMmY3xtZEEpW21lUTM9OyhVfStkPiQ3YlM9YDtvP1J3bUpWK3g2KEg8''@;'; put 'put ''OXZzIz1NRiwrZF5VbE93YCNIJE9dX0szdlsvcXw8KmN0QyxTN2NoLCFTPClqIWN3Y1s1O0xEIUBbN0xmYSZQc3ZkQmhUVV47MGRVQkRWJihLNndEOnA6IyYuYCRzW1h7JUF6Vk54N3VjJDQzR3ZfUnhQJVUlJXFieWs4PWQ3flhQJUA4eD1aPHgyeihNUnhSJVQhTjZFJWByOCx2VWg4Pl0hRUIw''@;'; put 'put ''aWZNK2d9Xk9hdyFKSX5teU13Xj9mfFElMThUeFE4MnFSaF9wZGRWPX1qWGhiOGssMWdbbSs1dDpKZk49ZiFMdkFDQ2xLcmUlND5tPXwhZjJ3c3IqbT5tPyw8dmBJbFRZZXgwRF07M2lxYFlgQiR7LFBHOl5bbUhHTmF6NGRyVExLbS81bzwjd1J8O2ZkZiRANnwsdkI8PU9xLHVkVixnYDtZMXtn''@;'; put 'put ''JilRVDpEfWVjVSxBcjg4SFBuMGNvJlBgME1waGIuPSFDcyxIfXxoeC5JIVdlYWlgdEcrPGZkZit1KWBjMVorTTRsUn55WDFpUUBdblh7US5NSiFoJmwqaUdeSiJ3W2h+eSVIKkt7cHZ7TF02L1BPIzQoMHc6XilxfSlAWkRRWC4pQjxWVylPYitJTiQwWVpCPGooQEJ3W0BWUFU6TkU0Pn15UEdX''@;'; put 'put ''USU6ZlhiJTF4aCxaM25UfjpKUzhDbkdJZENSKVdrLH5AL2QpQHFMU1BTUFIwWThfPjAmSmo5NV9gelQhQXJbR2ppK180T2RMRzFkLzZiM1QoX0EzVl8+VUc5VEVhcm1qW0BPZywsSzh3akc7cXZxO2IlempiLDx3NSkubTZKIkpxRTUyVT9yT3VqfjpPUk1eVWBOVGE8SDljXWMzLitsLDhQNHBT''@;'; put 'put ''bWY2amx0VnxdYGdTdk1DQHh8PDxybSEkcUVIR0J1bGojRCFGMSpkJGhFfUtgV2tnbzM9d35aVF1zd1RHfXhiL2RwW1AjMnlAQj94Tnoqc0Q1fXRKMjd2TmBwaDR0P0IxQkozQSFQKEZKSytgJTFfSipjd0FHbCE4ITNuUD9EUkJ7bk1WRjlLW1l+Y0MsYX0zOERLLHRGSH1VTDsobFpFS0g2TzY9''@;'; put 'put ''Ul9uS3E0cl4xPT0kQ0Y9aGhheitLWSI2dS85Iy9eMj0zQ29vOTpwOGpJInYkYUskU21aISYlMz1TR3BtITQ0KiN1YCVBeiN8TW5+Z1FZd0VkZzNWP1R7fGs5Q3c7NHEsWENXa0xuSjRteV8lbzllXVhATkt6aFErRHdKYWI7JVZiUCY3LzMjeFIwIzlFKVU2eS5wZmR5eGldaFAlcilYcjYhWHc8''@;'; put 'put ''ZnZQdz45JlQ1UiUhM25KNEw8JW8jVD5vL0hIRXllR3ppRHhETiFNVlNQXlI8SnxyZlVVd3N2eWtAXnA7ST1YPnJqKk14ak8pMXlQUWU9WGQ2fThaYT5ZPTAyZ2R3M0k0fiJ9SyQjQHhpWTcqe1krLnZUWj9IO3JweTxMW3M5V0JMPCNMIWBCWit0SS8yLkR9XStLZSR+PFJzPylzOSE5KythcnYj''@;'; put 'put ''SlN+YElgYl1sLjZpRSVHV0Q9XndQWXc/L19Ta350bC5UckpTTiF2ZyRAZyYzaDF7Nik2fVJOPURAeVJVbUk/TjFhWiZvM0clST8pKXpnbThpTGAyazhSUnkjQTU3QHc9eElRVlZNTjl+T0o4PWJtNXpNaF8zL0s4Py8/YkNmbHpiXm92ezYmYX1lJTwyUTwlMV56bURMY08iPTkqen0vYlM8LDA2''@;'; put 'put ''SnxWY01QfTNENWlDR21rJVorfTVZT0BqQm9hZmVLeEY9c1psQ0h4Yl48V1FbUkVCLHBANC41WDB6dlR4QjBme10+O301MT1qVEBPYCtSMC5te19VKCJWa2kybzpxVF9EKT8/U246X0lgbEVQfGlNJTorYFh4bC5dJlJZN1RUa0VfZFA7Y3BaZCp+NVdIZmM5ZDxYYTM+Z2EzKH52JWI5Tm5bYTxf''@;'; put 'put ''JilgXys/YHEhW2EzbiVvOWxYWmFSaUBeWW5hYXAmN18mPj4mbFJXaCpIOUBNelAlaTMjWl9jWW5QZWdXdSkyME8zS1QxUDlib3JWQ1siXi9QbCRMKkdvYkQzfT82TUUrPnpRKzlYKmowUVNOJF01TTclZ1s4TXFvVTVIKGA3LGN4IVtVe3owVSx+MCxEdXd7aUZMRUQvQ2hjK2VbMVFOJXZ8VXpv''@;'; put 'put ''eCkqLmByMVZDQ2M/JCl9QlNtSUU0cSgyeTZiIUtpKClJd1tvRkQ4XT92W3pSOixCY2l8c0prPyR+YFUwezgsc2B1YnZJMFIjNzF7SXBDNjdAZWAzW3lGRkZAfioqXT9AfGFGZ0ZNL0IiNkNETHJxPlR3X0RrXUt3W1UodV5IU0tzbW9KSzk7OFIkOjUyNmJ5Vnw0TFZ3QDNoWHFTVklBdXt5RiEo''@;'; put 'put ''I3RkX1hTTTE+fiZDJnN6eVhTSF99O3c9S0xKSiRJd19SZXgwN2JLaEdfaitfaEZMYT5uXzxuQVNDPE5PZkg7eEcycWRwSURMaCYzOylVSnEsOUtGb113OVsyVmhDM0t5ZTUvWDpjUlB6S0RNQ2tLOENHQlN6RVM2REZ3RGtxPDhHMlRTdE1uR1lkQjZ+QlZOQTpfTkxTQjJtZWIsKXUlQlA3RmFr''@;'; put 'put ''Pytyayk4Y1drQVNHTEJpLlFXa0puRG1faitfejR2M2UjWWV8UmpxdExKcSVnRUdZRltOKFVqbUFiR05gREJbTUN4XjQxbjVvdl5qITRMe0NzU0xjZUwmRkpWXixmWysmMmc6en1yeWJRW3tPeG5zSDQ/fXQue3Vaa2g0bUkvSllmSUlGPmxuZHMuUXhYYTVGal1qMDtUSTR8YzU7bm80fDchXmBk''@;'; put 'put ''UkhHWmBvTVk6S0VhKVRVY1A/eXFJRF12fHZXdWk+XXA6OVtoOFUkUUxpM1M5Ym9zZkAlLi9INHF9ejFxa28xTTg7MGJXJk9qWlRaaVlrezcyYChMMEozW0M1Rj0vTGZ9bm1BSjgiLDBNUCxNPkhKVXghZS5pdkRiaWJRIVh2InRuaSQ7PkNlVj5SfHpUd0tgYVJwaGU7YiVJWD5AelEzaFBrLngj''@;'; put 'put ''R0RXeSkxK007emNdZ0ciP3ljb0lxaHpOSChkcTBnKmh6fmo3S3F9eEFGQllpV0BkeGJWY0lNXU8qYU01XTo0TXs9fW8wfSQhKlBiJHgqSXRLUDh2S3lSZmx6bDRFfU8/aSQqeGMiUElhJUk9aTBwSytOXjxrXSV7byJ7e2BTSVlhbE9MTjY1dXl3Pkx7UnJQdXt9QUUkSGpkY25XITgxRTM2TGVZ''@;'; put 'put ''SXpkUk1hSllQJTNLZjZFK3pRYEN9V0VAXlA4UGMhcnNePUBgWXdNc0MwWn1gVlhzIksoRSt2czI1MWh8YVE5W31bXSRHfV5XOEJEL1RrPCw4LFtDQ2MuW3FtQlg5Vml9a15HKGYjNCpLKzwyRXpaa1lqMXt+REd1QV89XVtyfDNFbkxmRGJ3RVc2NUxaPD0mSkshfHt8XXYma0dXSWBjMy5RLCpu''@;'; put 'put ''YDAhfE5lW29hX3dddmh8Q09EXjFxXy5Nc2dLfjJMXXw0R1dbVCwqLCxbel1Fd1tmeFE/QU9DQj0hMjBGV1U8cXgmMEAqcE13MHU/QG1NWkE5JEprJCtIcDpfM3l8aH5sLkBAUyklfHl8dj8yVEFKc3BKaVU8RC5dPiVYYSFRMXt6Uz1JcH4kQSlVSUAwYVpSXShKOzFfYjJNX0oxeTFoVntlOE4/''@;'; put 'put ''dl85YiJaUFlHWTtqNF9EZkluXVUzdCVMMjN9cXxvSkRbXXZIbzxmIWMkRjFxKS4lVTkoaTosPShjJixeLzovIjMzJnJNc3Z6UCklK1BxVlhmd3ppWUFhYShMdXk6SDh2P2pgSk9PbnszNWs8MjVoUmVvcXx+dnJ1b2lTaTU0JT9dJkp6NHFlVGohbEo4Y3hqIV9+MjdsQ2FOMCQ7PjJZT3ZzNkhY''@;'; put 'put ''OiYvLnQpZ0c6WmN4bFc1RjFEZCYpZS4qU15ZSXpwbHMzaF8kbm1+OG9scS9ST19DUTQxTmBaXyklZS5SaTRWUUt5UDRwSjBBenltZDVsZC5QTXh3aHZeKiUsXnt6Xnpde2J5eW11bzkrOkU3WmwkdFleWWk+dz9pR3VCejwiW2V4Um89VF0kalk9dS5fL0hZfWAleEhiK25TZ096QkU1djVacCRj''@;'; put 'put ''cFNKRD9reW1UejFUX1NETWx3Z0AldV9laUBgemRRd3RNaXBWeFAsMEwvYWp3fTBZWWFUWiVZe0d6TDlpKXdldW1FSDYxMSlWenlXai80S0dkfUAjSl15dzlNQT1ATHE1JFM2Sik5al1CX0xaInE1KWwsV3BTLkUkeyxTVG91RDQ+c3B5VFtCVT5UfFE6Rz58LmB4SiI/UHhjX3dUZ0twP1tbTHJd''@;'; put 'put ''OThJS0VqS0V2KD9VMyRlZjdrPC5kIik6NDxedGhRSi9TfExDO3xXVF4qW3JMbC54Z2wkSzxfXltJTT9NSU84KnEzNTxYWj1tWjgkejhaUVVvZik3UyxWP08mOUloTSF8dk9bNWZiJTE9Kk81IWV3UCJ+KUtvVnZYSTFFJnVRI184blFhZ1JCQjEoOUF4bSUqMFBod09Jbm0+Kl9DVC5OZDdxTDw7''@;'; put 'put ''YU04Jj0yeGNuIUcyc0UpJVhhP0JOODpPJl9NZlBoe1UjS0lzMXc0bWUzR2QubUg4LjgsUnNOazExXXM3NDA8NSRjXyZ3aSQxK3lfcmROZWxNQH5FT1ZdeH49XTFWVF9KUVVOLDcsMyZBbnsxLHMvS3NmM0BLcVZHXVAxQFBWd2RbeFUxTyFIV0Q9WSphNVtLfU5KKSM9PV5VdXI8N3VMLldKY0NS''@;'; put 'put ''LDImJDFtZlJwLFt0aWJBXklsTzciMC4lSWBVOSx4T3tlPilea1YzZiEyQzdTXUV5PGx5MSliZDcyPFUuMWEiTThkLjE1MzU0KHxebDhETSNGeVZNdz8hJEl9Wzw5YUp2bVArfSFoUnRiI09Uc3wqI29ZfXFPSDZZMERkKzw2dCw6YExZdSg1Zm4yaGo/M29IbXU/QGhfUnwjZ0gjMVRFeEtEP3p6''@;'; put 'put ''IT9FfWJrcSpSWTgkc2AsP1d5PSQ1e1Rka3BNT1YkS3JfPHtRR2Y4LHdhOFc3TDYwR3tlNz9Ee0xZdXFVJHZ6USQqUkJIKE16dG9pY2JpeSheJVtCKTFWMjBQcE1QVjt5dTdfSlYlbUxIbENmYnR2SktsLllXYHg+WEtDZkpbazM/aEdXU3lmMl1YND9JaVtzZyw5RFRoN3FqKWlJWjtCRkUycVVZ''@;'; put 'put ''fEhwKEYoVXZeL3p8KUNmRGIlSnk+dWw/a1ptO0xdM2NBZ217M1F6SHMhWSpiPC5QeVR1WCZDTjFzSmlmPmJpIlRXfFpScEcqMjZgW2poc29pUT05cHFEXmRIXkxvQml0QHxzOXZ7RGA7PjFlRmp1WXYpNTdvYHohL3l0JEJ1Nik4cWRCRio1WVFEdFI4SH1BeXYoPilVLnA9LnYoXlhSanFeQSQu''@;'; put 'put ''KzNxWXslTXw/RV5pZmI5YF5qZX5RR1ZuVjMhJVM2NDhlI2BPUiR2RzZKaDQyYEwqVz03bmpUNntWQihwPSFUTHJ6I3x3Q3RNdGk1VF5ramB6NjY7eD1FYEhONj9JTlpUN19kak5aWz1NU3NRPipKbHojbndGaWtNLk9PX1ZfQXY2fG9EdnoxTUpAQ1pLPFpoVXh6Q0Q2bCM/YWBmVE4jLk5nfWNe''@;'; put 'put ''MTdANGE/dkB3fVhJTGlPcztNXXlYbzcsbjlCfXlwXlhbejpie0x5b01VXlJ3Vyl+PSRVKlM9NHVKQ2BUNXxDK18iTlIkSkFMTVY+ZzpOJV9dLz8qSF5wTlJER1hYUVk8PlZFJGIoWTs1ZWR8VS9WT1pTXilYenByMkNARGluTXw5OEIxXUpbenZRbyNhWlQiOjxYS1VeejRePVNRQnZ9U18zRSha''@;'; put 'put ''KEViUTlFWlRfJEY2WyJ7JSRifjolIVM9QlFxWF1VYGYqJTAmantWQnZCcFM8M0M9b0ssSylRRXBnJj0zOCZiZUl4VFpFZjF7c3t8JC5aODtCciNhcjNBIXVJXWxaS3NXNztVOUF7UndvYEZuPkNOTlBZIkgoZ30hOSwwSS42NUMoS19fc2c7aHBmWj8sTG5kSjM3ZV1aTyE7YUBwZmM7MnpPfGY/''@;'; put 'put ''ZTdaeyUobnlZJiNOZDxGUCFAJFFNU3FAJFRgS0wpbkAoSUQ/Nmo3a19+UERkJCRRTSQkcHpoU19JZ2c0fDpGclg1bFdRMkxzMjQqbmNwTHMyXm9AT3wpJnBzMW5mQCRYXSZGYTNHfU9ERkVBXjZyZXhidX0zU2lvNCN2OXYxPiVDTUJQJFJSYXdtaiZpVk0oV1gxKDdwTUJEV3ZwRUdgKW5tRHgu''@;'; put 'put ''XTFNbH4rXXZodENIMktubjF1KTBweD4zUElhRVJPIlheTmBqQnV8ST80NC8pN0k2dGRWe2xMd2E/OndrOnNVczs2S18mXnZVXS94b1I6XTFxVWpuanU/eUQ/ZiZ9MUhvV3pARD9GLzlhZSpVbVJeQ0MycnhkN007TTovXjUwVl0iT3pWNHtMTyJEPSltRjAuSk9MbW5mIjBFNTk5bFBzX3BvMyVh''@;'; put 'put ''UkZPJXwvXT5sb3BuaSI2RkpyPV0lc21PISlMaFZsPUc9JmNzIl1sfXFoVkQkVSszMSgpTFJ6RU49eS95L0RHdF9zVU59Qzt5P0NeJDtNR0I0SUxAfSVea00qMmgzZndqQkNqfWdAXSZnVGAuKkZVdXNjLnR4MjFKY0NTMD5veElkVE8oZUxlPjUwMWxvcWBjcDNEKjI/KG1XViVtaWtANFMoLG5P''@;'; put 'put ''W2hUUiJUeG0icnxJcHY6SjV2VDp8K35YPVhxS2N8UHg6TGU9ZCljVG84RGpEaWBaUEcqcEJkNCl8a1VPNCtDTkcwbTBXOHg9byMjeG41OVBDezNwJiVDZXE4dSx9WG0/Zl9xPDViIj1CTzRzS1FwfS5tbEwrXiw9OyhoN15keWokaiZpfTEicndUNUI5OyksSmY8YWIpPzs4PyQ6NHZVKEdDV3Z6''@;'; put 'put ''e28hTjpNSDozKlBeQVNEI0xZSSJSLk5WRjJdSSw4dzJ8IkY1VilPIkZXV1txKHdqd2RjUDdrdGVWcmAzTjpCISJ8dFNZUyo4aHJzcVlUXl0mdF1qdnhYQnMsMlhfXiZwcWB2VDJbS3klVlpfTmxPSDYuZShtMEhqcTU3WzVGZDsqQ0U5V3VPeyk+ZXJdQ0RHXTwjWyVib1YqWS5eQzNRVHlzTXNV''@;'; put 'put ''UTVPZkksP0J0YEpgQUBaJG1sOS86Nj5nSGZaSHczWXZOO3gweSkpJWFJLGllaGplRyw1WHQ1JjtNNUBGKClrY1M8SiFWJSVEQV1YZSI8MT5ANShnVV9AZ0xKOnV0JmRNXTJZdSQsVXBvR1ZYcGRnKl4mbGQjbm9kK30pa2wmJHl8VEFNXTc4Sz5kV117Rj5kbj9pdC8vMktTejFacWM0RFliSFdD''@;'; put 'put ''KXIrVUdWdVMraXZqWjVPIzAmTCVLKiYzUiMzcEgwfDRIVCQzdWVjeFo1KGBXMihgV0oiUGJBeDFtbVBqRmRJVWQ1STVIVSp6d1k5ezMkTzxhSGcudVYzTTRtYnF1RW9Fbj9zPzZ7dUEkU0hNan0mZ2kuYzw2aXU8OXopVXB8SlldXWAveD46SlBaTS5vdDlEPnpuPlIhcSYlOlMxb3Qsb2E/OmxW''@;'; put 'put ''ayQ2YihpKVFQdz8sRWZ7R089fGNWUEpUdjE9aHM1LHVnZ3Q4aXFCYFdfLjFvZG93TUhyMVBtWj10XVo/dkpzaWY8cWhjLHBtSz5peWBQVUdzNTtjdWwkQ1sxR1k7Jj8kWCYkRDNyVSt1LiZTTSomdypeaUY1eU5eej8/alZtOHQoRis+VVVqbkQ/ZyI6cWldMjdPSGRqU3suKEwyRXxCW3M/QFpR''@;'; put 'put ''X3VgJm4kRGE0IT9rNG1MP2hlNSJAJkQvZUhEKik9ZEtDKnt5Q0Y/ezNNe0tXX3tHL2hfMFt4RlM+ODF8QFldV35ALGFCeF9pRmljI21BQUh0Pk0vbFtgX0AkdElqNVBYdmZBJEo7IlVMMWFASkh0bXBLYV9oVzRtR3Mpe3lseWA3W2ZCTVhGd0Q4Nj1WVVVGRiI9enZWZzRMQEtGaXFvVCMiWSYw''@;'; put 'put ''IygrQVp8SmEyfVhER3l+aXFgNCNfaCxMP2hnQlIrJFUxclplKH55ZE9Dd1tgM1drT2ljKyFOfFFDOy40JDlRZ1BINCFpWSo2SU9CNVJJXzo1aEB9eypVUlRmeHhsXiN9dTVpbnJzaiZ8UTRGeDZ5cj0zaFJvPX42QFYofHNnVnd9Oyp+b30kSjY9QU50cHUuSWhdP302QlNQLms1fTNwfUZ4NEd8''@;'; put 'put ''LiFye1E9SHZyJC9GfEJbe25NcjhlYnFSRj5Ncns0PShuTzVlfkx5cHRYZTBLMzFpTGBiTFNmMWQ4L29QOUsvSjk6YylLJW4mX2c+MzVYWFBiMmo0MVRzcGAoXz1KUDg7N0I/di47MyFycV9GclAuJl5ObXh4dWRMU1Q1ZXQyNXA+KEwvX2BqR2FfT3wqKX0vY0x1VnNHdWp1dC5AVVM+TDQpTnBJ''@;'; put 'put ''IUtMUzR+RzJ6PmdvNSt+YnQuOSpzKX4qeV1GL19oWzNzfCl9fC5faHZeTm1YaypueXhDTD9uUGB7bjQ1fkR6LnZzeHh0ZDR+Z281VS4qT0ZJekhSP34jczlMVlM1ajReYFIvbVQ6VnF1ISxVZDlRfF1Lb1YqVlo1IzVfSi5WKUlfKjMrJW44dkteT2hWTF1ESnEyN0NWNTBAJUxdcWU9Xj12bmx3''@;'; put 'put ''djReQkFHTHR9TU4pUmo9VG5AeSMvdWwmbn51MGciVGIuVlFaeTMsdF1xZVFxV1ZtOSZkImp3dmFIcXQ5Y04qNjFTLkI3Tm9OJDIqRkJMUmI/PEhGOlc4dTFUfWs+VFlyQ1k6I3NnU1RMS0teQG1BTEBvVnh9R2BUZV5OKjl4PW5TYjJYOWE8aXh4N0FQNEhUb0UzYUBlYGF3I2k5THc5SlAuUWVv''@;'; put 'put ''c3lafC4rJjMiJkJTJDZhM3ExTkNtSH5SMzEuKkh1NlB6TWVSbjlAXmAwNW96IUMjQjZybCJvME4kbUMkYjVAYDMvREpIMDI9enpBTV8hdVAvNXJTKW19blZUMSshTmBdRl4jIXQhUyZNWmJhOSxFIXI8fVVyNjkxLGEuJndwcChVSVskcUBAJFB3d0ReRnFLMCNqPD9BZTxzKWZQUWVbVFd3e3FF''@;'; put 'put ''RHFEVH1oOT9bV1lCLmcxVHJ3dCZbJiVNJUxoZURFL3U7NiR3dlVxOjMvVXJ4dUhkZ3F4NTZDd1FQZSphaXVTLzxtNURmX1lMKUJWdjs2M2NsfFE1VVhoMi8kLEAhSTlBd1t3IU8wRUtefn1bITNeMikhQStdbyVjLnN5JSMqNyNILl0jKkUocGVCb1pULzxUWmN3JD90ZzlZJnBxZ153ZTNAe2gs''@;'; put 'put ''ZiM7KTRQJTdxZEwoNTs0KExeN24kSEI6JmkyKXAqcTN5bXU+QX4lPmYwdkc8VlNbPzpjTiteSDpfZm5FfmdZQSZpcWpkSlFBYV4oUT06SCU4SG5PMT5VbCFvaT4/Z0FgMj00VjIpUXFZcjpINSZLfE5kVntrKVZyZiZLSEZeUnt+KGo+aFlJPFJEfVsoPWMpZ0tkeW9kJlFtdzc4Wl1oMHJiNU1l''@;'; put 'put ''d2NGSmp2O0pFJnJKIWU+XkdTPGQpX2daJEx5WzBMKGQ4Kzsib2lRcyVSakJ9WVpUc2MqQG5KKy9ZRHpMWjVWaVg3KGkwZSl+bEY8OzgjYStRSSgoeks9TmJiJERTT2glLkQqYDFEJVdGZGtgYStyKX1rKCxQRkMyakEhcnt8MXw3MiMhOUh8W25Ufk9oXSQ4LnJRdmdnMm1nIXpsTEMzdERSY3x6''@;'; put 'put ''N1E2L2xfeTJfZzdVNT17MGwmZzE0XTd5MEBtelB3JjJGTFRNb1VBdzhHanlDbUc3UShsalJpeWgrYyViMHo/RUZmeThgVih1KDZsZGRiQnBhZyJ0aWBGdmBxLkswclp3VG5kT3I6Pk5CYz5RNE40fmphfGZrMzsjXVNfNnZVdX1FZUEwNHp6UEdGJWpDc2YxLHMsJipHTDE0Tj0rVElLSVR4Wzxu''@;'; put 'put ''OEomLCFscntib2c9M1J0KUxxdUZsMSYwbURzcyRoMGR6QWFhT1g2cDBiSnhyfkxzTjdjblNGNkliY0hjfDN8cWhtYWpMTiFIXXZjTmFbK2AxMFlgISVDO3dTNkZDNndXaEksRHAiKjczX0o3NH4mbypSPG5lbzVLMzNLWSY0PF5nfis0bjVibzNNNDh3JkBHVmlrT1pBSmh6cUxAbEFsaTdIUCs7''@;'; put 'put ''WWdQYV1GPkZiYDlnbkhAMi9GeVFJRT9HSWZ4UyhGPilFdD19PUk4eTEqRzg8LCZZRW9JXjhZaXgzISQsPC8pVUBEaEtdT05seUgxJHIuTEdeRTxIRk9xKjZhOXpvTmhLd3BzYkhmKCpgWl0zam58ITRRN2NCYj5AaVI+SERTOk5qciI1V2lOUn5Kang8PHhtc15MNC85RGh8Nl81fT13eCNALl1b''@;'; put 'put ''eCIsPCwsZU9ob04uJXtbelt8eVJ2VyV9PHtbfU5eZ1pYTUc3WSopTHttZDgqXiFISndbOWE5KT5bYF17N30pWk1MZjUxKV56OWJpJExhMEYhVjcoOSNROmMsYEs4Sj5MJW1kRUw1TlVeP2RjKHdDIXxCMUc/bnMreDJMPTk4KlEhZjFLbThFTiV2YVR9ISVlXix+PVJgMXtsbS84bG0vY3w9WDFK''@;'; put 'put ''REkuW0w7YjVAKVBoSnhiRlFUMElkPWdhQF45YnoyPmNkI01qPHNdbkhgNUk9NmRSMnNCcGozKzsxY097bTN3QzE4ITZwIjcuKDkhNkMoO2xWI30vLiw2dHtlQkhFR3RdInxjZ0Z3TkYkKE1XK1lvKjshYXNUcykkcntZT2I8TFBUVjBtKT02SmNlSUw2OSw9e2sqSCJFbz0/X0F5PWg1PTt3YEM7''@;'; put 'put ''KSlxMCkmUWh7S1FeZjwza31ebEUhVFVHQHEqSnZBRDcrIV9efV4vPmJaS2dlRDFxcncsenthayNmYWlOUjBJPTtQI3s/c1VAODY1fSVZZndRIm1CKEcqZE4yJDAmPmcxPixadj4oMEVudVNELm0hb112W1cqOFV+a2xnZHBvIzppfj1MbnMkdV5tZGRISjFaNlkxRTEsTW1vY280dVI+WHhQQm1v''@;'; put 'put ''N2JMNz9ATmB2NWd3JE14Y0tfdFl8NXFONlFwNyJMMlFDM1BuSFAmNzdwT2hhdk1gTDFARUhhTmhsZCw0UXAxZVUlTmB4amhgTjBqeDJ7SkBuclN4akRzPXg+dzhZXllhQXF0eVZWd1UqMmlpT3hyRiM5eXZvJVQ5MGB4NH0pO087eVU8OX1DVSJoYVB4VXs0YEs5V2lgezQickpAUUR8R1tdMj9q''@;'; put 'put ''WFg1ZjpKZEdDOC9QJldPeSl2X3VjSHY8X05QWk1nZTBHYEg/OnE7YDVzQlUkcywuNUVmUysjTlRiRGJgRkdEPEQuIipAUDk5WFhNVVEodGYvc0w2WHZYWnZfdVRPPSh1Pj9MQ11uWFlNZlBsZE5Sai9GRERhXWhfW1VEdk9vZHh9KXhANylwQUxAezJnaEpTRGE+eSRpT0lNPXErUkNdIkNFNEJ5''@;'; put 'put ''MH1dL0xiXmZQPm08WndLX0V6NDEkcUhtKzBkT1VSWnMzX1EmbWRVS3pZV1pWXkUmJGpzcDRTbj14d1oocjZ4M0Iwe3JKIVkrWSt3JDFnVSEzPTcwZyFWPXFCPH07L1ZJQ0lkX1Eld1haTXkzbCQkW2JAajg8QDdKeyQwbTxJTU9wOiJNS3YwQEUqc3F2eltLQ0k7U1lZd0RXY21ld1h3eltLU0k7''@;'; put 'put ''UzJlb0ZITzpAemw2L0VpbV9OM2I7XlB6TmgpalZwI2Z9ZSxmeUJHdUhsTThmaS9zOl8rUXEsU1EkaW1gSyRiI3ciWy80SUBCV2chZSZYVHxGRGR1JC5LdmFrWWJRQTl6LExlaTlfSF47dTwhKXRJdSxqcl44ays7c1BxX3lTVzpaND5uSyt+SE9IJGxMPyp0UTBQRzZEcnoqQ1FvYVUrPFlqQ3hH''@;'; put 'put ''cUIhfCxuZTgpInk6Xi8ucSUrJU1xZFY9K3tVUnQ6MkxiKFdKWn1fb2AqQ2NZaiZhKzpCX1ZiLzwrZ2hiKXBDVSg9Ql9OPnUhLFlgT1p2ZDE3fm01RH1SViNIJVM1SFQ2OTNhUFUhXS9+aUBNWF89S3hofkpWfW9rLDMpM3JiVV1xa1p4TCp6VXhqUGhkb1hTXS5ifHJVYipyMH1VOGFzNU1FMF4i''@;'; put 'put ''V31YeVlqMjZjSVdoYil4MEtILEh3KS8iLlo+MGExZWU6aStiZjghKW9VKGo6RVpCNm1SZSkqSiFxfkpXWi5wTD03R0EpP3FhLG8lMWkqJG9Db0RWK3UuMzNBNkAlMlI9LER6dnoubUFdUkQwWFt0bkJJMFdWNWJvO0pbRTZuUVs7LiZMdjJWcHEkNXd+Qip6NHRPeHVUcmN3PT11KzJQJEA2OCI3''@;'; put 'put ''WCVmeyw8OVZnOnltKWk3PGZ5PiVoMz9FQF1YSno5dWlYJmpMZ0NuTk1fa25eOF9ILzNLMS8oOyZ+diExITlmRjN2ZTIyIylMYT4ibXxuOCgoUzRLRnchOFBHeXJxVT9PUCUudCYydj9jQEJnbFltUy54NUl1dV4lLlM+IztTa09pXkpkY0pBMGJeWj1BQH5vRVNEJH5yOEcyRkRmVFA/NDYrcHBA''@;'; put 'put ''Xyk8aGYxdltqKWU8SHpPXWtWKDRSSCQlN3FkbDFhVChxbGJEPH5QNlJEY2JFYyt4KXdYKFBHUiNIVXpDXjQsUSZ1Y3RuMHxEViJAS3hyVSVNc3Ewd3p0MWQjUEEwPm57dVMpQ0RndE9ZU0ZpOXgkbFAuNz5nWTBEZHVFTiY+Sik2eXhLRilIcH5UKzRefTJEOCZEc1pia1s7dDYyPEE4dF1eTGV3''@;'; put 'put ''aXksKmdxYFEhSzA0YEZXdW4mUTBwIXwwVDp7Wz5PPlpKWztpRSFYLHhFXmlQaS9IY28xV2ReQ1N0RlZaTnlEUT5YTHhdLyRRIypdXThhNTk3NH5wKjJAMWxHOD5bTnd7cHFBNUdQNURNfStbTj9yL300VitHSV5ZPXVDPVY4WlRUeVdsZmhpVE56O0F3Lzh8Lm1iQGZkekBAa34jKXNIOlNhKWki''@;'; put 'put ''T0R8NnNXYXlkcXRKVCspNGl0L1Iub355WVZ9N15rVHMpIUxsSC5wT189Zjo1TzVTKXMpLChZRChVXlU+a0Jte29HPCwhT35bWjcrK1R4TztqTHRWQDN2aHkqSkFhQ2dIWW1XWUc9SVMmSUw1LiVfZykzazZaQEUxXzxIWHN5RmNOTW0jNXcuQUAvTVQmZS9hRn5HVnVsaXFnSUh1T2JNPlk4Wk4q''@;'; put 'put ''P1tBaUh3MyJgIjY8SmwoM203LnNTc3h7LHtXPnlefXJtPyg2S2FARW8vXk9EW1pFVUZ8WjlyNDhafWEhdGJvPVkhXWNSUmQyVWFWPDNuJTN6UFdGJWp0VDV4YHdwS2RAPEVANUUzVGZSZz12Jm1yN1tFN2RUaVAvIl1LQCJKQFRGcX0ybkdINUQ8Vmk8OU50MHJ2UXtPJWB5UXZiVFdAMDl8clVX''@;'; put 'put ''Q1toYEpAVCZeOi8rJkpxSXp2XUJHIj81QDcpSzNWdlgkM1UmSj0zUE53T3J2IWI4Vjc3T0h3W3JVaEZ4OnxvSCwsRVhKMilBYVFecU5hMVBmcTo5eGQzM3h1MFc+YHEoWyx1V30wUUx4XVVOW1RSSTUoMHtxNjl8bWZAUHNHfWosKTZJPTJ8YmY1NUpyVFNURzArdFVlWTtJSkFAUWlEdigrdThG''@;'; put 'put ''UU9nY20hMTVHRXQ2UXREdGR8RlFpaiFaUjAqNj55bVJBTUNBQUFBQUFBQUEkQU5KIntKdGZyR2w1SH1OYGpCaTh7SmF+NDpgTCglJF9JZENJTlZEZGZfZWlULmFHWjIycH53T3NYODdmQ0NtV2NOa0dhOFIvOW5FWHJlND56dCYlbCQ2ZltiLlhLOWkuYDdneHZiSEtUXyZpVHlXV2BpU1s0bVNp''@;'; put 'put ''WUNtYW03YU55fXk/SE4wJj94NDtnV1Flfm9dc3xrSlZsbTdRaCpaaVpTPlM5K1ZwTXxQUFpLV2wkVzFjaiIsYVImJk9NKjJ7P2Q0YkBMeGA6W2ZJOEJte0QzfFUrMiFdTkpXalZhaEI2NmA5cWxjIU1VW2tIT1g5JjNZa0AkeiJbaUc4cVE+ZTtrOXJTWXIrRFlZPy8pMURaZFUyPj1SKWUjM3hU''@;'; put 'put ''Qzo8KCpkRUJoaUBKPltmP195a1ozJjhnVyplXXIxXyRPYmZLL0BCMkZtSGJrd2hNYng1X0AyI3NNK2hybUdwYGIjZmN+MVYyb2FxK3ZYcVdFUWZEXnVKU3Fxd2VSLHNXcjJMNmYoRXF0S3thKjoqd3gjIno5ZEFYInZ7fEBNb35laiJffT5HV29RK093dTRrNiVkMGNsJjNASihvfU9VeG97Wzh6''@;'; put 'put ''R3s+TmZjbCt2W2tZMm9Ve0BQV0p4VT9wL0cyWUJfNFhtTmZdUyJxPThRSkdtMDFZQW1oa2kjPyFMKSEiTXBMPEBbbTo4RzN7YjRSfVZjWTQ4K3MpI2EkU3RBOmcsaV4jX1tPUUs1VEZ7NHN8TltqaXpvdEEvTSFNQkRnXSpmZTpDbzd8PEJwUT48Xn10ckZxYDYqQCtwUTh9a0M7UTo8S3kucG9e''@;'; put 'put ''KUt5JXNKaiwiYVgxOVgxKV5Ad2owS3RTXSVXKVhmIWZRQGF5djl9Lzt1PmxfISpHWyRQSDVCVn0hTmZyREgsMGIvJEZTeElfLGA2RUtyU2FOK2ZGSnxGODVQbnIvZEJbKVkuYzRVd1ZyRFRrdSJCI25CX2J4ZUdEMFBIZW8mcF1zVX5TXit7ZEZGTSFHMjJqeCopYm94QmpaUERefGxLIl1MZkFY''@;'; put 'put ''WFgkX2tLTXxqbEAjaSorQTVCcH0+M049bSV6NXV2cmQpMXdUKm5ZaE9ZISUyaW4pVjdda3xXcldFLCFWSkhuM0lEPzppWHp6JF8wa0gzVW13cio2S0RkfiVbLilwRjVdWShHVSR1XX0uOk9jWWFsMnxNVitOVzA8XjIzOHpwUERYajpFJEt1JkwwQiUvbzU2QmFCLH0yQTBnYnFFPWN7QE0yS1o0''@;'; put 'put ''SkdsejxLI3ZEP1FDUEUrVms7WHMhP3B9InwlJEhoeCN5WWIsXnE+LmBJQiJUNiMwZi5qdWtpTzdEdlkwRWNsQGhtTnI4W1R+d1Z4I1dzd0M8ey9eX354azV7UGR5SjozRW81S1RlSWttQXtNNF88fWNMfTxudCl2WGs2WDJ3WVslaG40ZEZaUn1DJl9WQDRXQCpSU0lkUT56WzJbMEMzfGxIbkpb''@;'; put 'put ''dj1Fbj9yLGxLMUFrb1c8Q31zOCV7eD5nJH0pO0NoMl94MVhuQ1JoZXN2c0xHYlh0JksiL2JpLksheVovbnRnImtlNkMhMUJhaHtEIj1xIzFUe2p7WVZIYjgraTlRQHZ7OzZgYUldYlBDbnQvdlZENXxnK2E5RXs4MD5sQSoqVlZ2SXhfLFlbO3UrTFFbd1Z1Lyp3TVIwQF9gW0J2MEAmSG99UT9d''@;'; put 'put ''Q25gcWxrYjd4Tjg9Vyg0Y1FfIi92I1NxaShTUzokOSZKPzJQQzU/QFg9Pl1KQ2N6YnxvOzFLc2NYL1h5fiElI2h0eTQmP2IrQT9XR0l9IUg4bkZeLCMoY05mMHU3Um1KVilCR05qOTtwSSYjI1QxUncrZ0drfVlzdUt9REtIVDVAKFluTiVxKXNyamc/cGl9TylbUSJrXktDdU9rSWZBN0VHXlJh''@;'; put 'put ''P3hBWn5xMXlIPio0Vzt2aG1AY30/YVNBbU4lJlBtQmY0VnAmTSx+bT0oWzVsMWlNKlprdlImSCo4RDg3MnNpMXBtOUZIPC8sdVlmTmcjbjxWOVhyO1kjSnxQZ3FFazJ9KHNdQ005TFZLImxQT0lGbllSJSRINjMsVUlsfUouZSolLF1zInt7PmRnWi9oRSxhYHhhRikse0JrIV1NRVVmam08ezF4''@;'; put 'put ''al1fdEJMV0ZEPFA6cFgjdDUxS2Q3WzFffTVjdzByZUhrZjQ1WV5dQ2JeeExfNX1oNUZTM31mM3BTVyR6VHxyJU0+LzhJPEl0V2YxfGYuWC5oZjN5LnVpX1J0ensub2xFTy84X0JAYiZJYXhRLi9YXi5BSmh3RDdOKXRJZVNDYl0xWntSTUAqSllPWSY7fXA/cSQ8Wz80fWdtKWwyX3NUSUE8Tlhx''@;'; put 'put ''ajRMQ3lpImAheWErL2ZTbkwoUClockV8ci4pZ0pTKHhJd04jPXF4O1JhbVlQLmMuUF9sOTZ3OXx6aE5ob1g+NUY1P3hEIyN0U3ZmYXw4ZW1aRzM3YzgmMl8zP31afj9ANTN0c01zaH0+RnE1OnAsd1hNKiI7U15nR3s2RnIxbEE/TmA2amk+QXVaVGY0bj9oOixHP1QvNEdocXFNI0U+Q1tZR2Re''@;'; put 'put ''YTJhO0lzRSU2bzAoYD13byk4QE4oYzh2dnU9MUQ8PS9aNj9TdHc0JlFDWHAjSiJRd1d5dFQyYmElO0p6ciNAandbS2Q5XlojQCVaQnFefHNyOHx0RXAlWDpCYjZwT2kqP2hGO0E4Wnd+bFVPazx8ZWNEMz4+SU53IjolUWdAbWhQKStWY3xkUCthYCRyfXA2enROaWdqbHR2KHwvRDRvYSh0U0RG''@;'; put 'put ''TSxSeU1BNW1EQX1YXkhGOHZuZHhmRGArQE8vOGQ8O1VAWHwwdGBJZV05OVt+U2Ave1tQbiJBNGVUWTJdRyUvc2ozaTRSX1ZMaFdxRUdddyNQWyFmVFlHUyNyI2Jdem5BRzYhRGJ6Rio6c1YvVkpyQkpIfixIIkY3O34vems5c1RvPyxRPn5BI3ZHbUNQZl51RVYuLnw8clZrNmdXTSZGVT9mJnd8''@;'; put 'put ''Oyl5eEpEYG93fTNEZFBAI1JYSiRhJH4sbVokQjlOK05pfmpIcz9wIiw9U0tOaTQxTHdbYSEydipRYU9MOEVeVmxpWDtSJnw3eiYyWW1ERSEwcn5jfDB2KE5uaW8ocDdWeWc6MmRySW5wdFpFUU0+PnJEdyopRl0wbTdiZ24/TCU0JlVWcitBV0NVLEt3bGNHcSthb0EvLyM0cCNDTEhwfi9GcG9k''@;'; put 'put ''VEN7Wk48anI4RmVtU20pZGw4TVpZMChSIU8wNU8iQX46akNIK0lUNWY/Tjo7VjU7bE9fflpAVit6flEpT3cxUFZ2WUFWYCNtXyZRb3FyRC5dMnEvWyZAYHU9Mmt0bkZaJiU2UUJFUn5kPShtVjd+TWxsP01ySzpteVZdT1A/Qm5bMG1SPWFOSG1Aej4hOnozQy9+XzAmZnwydEFfQHJbLz56Y3oj''@;'; put 'put ''cV8+Y357SnBjWD5KIk1gaDxTTmFIQnZSJCEyVCoySGRLPGR0MWBOLGBZT0NfLGZKSWxeUD84MEgjWHk2RntkJWpFXUxRZ1BRTFNIYUViUypAWVEkRz5WSFNLZi5TWndMTE0odCswQjNvSHtrMW1zfis4VFQ8diNBLDFEbGNHODFbL1NQMypKMFcmNS9iRlMmSH5LamglX0BbInpSWTljNTdSREQr''@;'; put 'put ''SStTVSNQby9+fDBRTHFzdSJNTkhHVVMmWnhHXWpmXyN1O2t7YUpsSFUiRF8zdV1WQCsvIkc/c1JSLjYzbnx1YjU2Z1BaI3Q2MlR0byNkMCtvcS9mKFprWEQ0bzhHL1l2c2QvYGhSdVlsYiRDVz1kdWYqdD5sTyslSCZoaHhHXkpacEx4TGtzfCYxQSFwPXhbaXxhIWRBalI5P2V4SltfRWQ3NHRm''@;'; put 'put ''bm4/eUQpcktqNVouQlF3Om44R3psdXFHdClvPntmdz4ofSE0aCx9MUIhLnxQdmQ3RE48bS4pakdCZXZYcnJOXTppQXFgfnYvVS9nZjkhczNeVFhCdFc2SEh0aVBPYHMmJSQufGFaI31gT00qdWgsX2pdazFhLl9yTWx5MntYWjQ7Uy4jRjIoQDMrUkc2bkJXJmk+PjM2OSx3K0NOW0wuS0s8RzFk''@;'; put 'put ''V15fVDs9clY7ZXkzYWhsLyJSPyZFPjxDUE8hKnwkTiJxQl1WUCV4N0V8Y0lYSz06enlWdy5sOUlzJWslSW9YR2hwSEwweXhyeXY7U0ZAKks0SjtzNiNATk5wX3tzMTEiJWVQa1t6Tmg6RC9kL2VLMTdQVj9CVSZaUD9Qd0toZVMkW3wrLFZjNEN8X2RgVnZROCklYVNlK35LKXxYPXBCeiN3Z0Qk''@;'; put 'put ''QHkqcmhDbVpKOEpKIXZdUX1pfnJ1fmtlamMhXSRnNldjRUE2L300PX1jRCp9JCtLbz4vVitCa3xQfShMZEJtaTw+KFgqMCRPWXM1ZkJeUX0jWGgyPC5+cnBAZ3BhaF1BJEtrSmx9RiR7X30hR0UlXWEqTipxVVNlXTU0cHdAU3tWLF4kMjZEdy9naURgTjxtZGorN1J+bURGdW5ic0lkMWdKaVIi''@;'; put 'put ''R20yez5ib2U/SzcpaXA6akF6JjY+VGJgQWxoOFVZcj8oOnFlfXQpK3Jad1clSEcuXkZlQSg/QSNqT091Kl5tZ0JHUVJtKyFlODN5V1V5Vk9OaismM0Y1I0dWSmpkYXNmMElUVFdYal9hQmkza0IiZ3BseHchbVtjOCRFN0oielAvRlIpZz5HVE4sXjxYRXY4NkZ5SU9ZaDpOeChUfUNJak44JEpk''@;'; put 'put ''e3k1blZdY1pCXVpPQTUuPktZUy46YCtlWHoqeVFLdFVbWnhGVz5RNjRnT0Y1XilQNmNNbDNyUXR9Mk0ldHpXZzYoeixDaW0iTVRRIjx1b0guQmtGeXVabTJDP11NSnVtM3g+Q013MyJIL2lNJDUuL3hlVSleMzNpeXhmJkJHQDAoVSJ4ZStXOyFmeWdzUlokdiZVMVpIJGBUYTglc0tpY3hkd3k7''@;'; put 'put ''Zk53YVRwYC9NbGs1ZD17SGhYIWx3S2JScV4kK3YrX3tANWJ9V0JIV0NFYXJJUUM9fV5fdCNiaFE3STc6VHRBVHVKWjEqRyJLdikkcm0id3UoQFckVk1pZVQ4KTo8KGl8OnBoOCtkblFxTlVaZiZ2L29Fbmh7VlcpLEpMbyhNYiMqRyRnREBJKWw/dXIuOiwwNCZ4e0FkfnsoVHM2VT4oVSlVbkRw''@;'; put 'put ''bWtIJCsjfD9PKmN8SEklb0diPWU4OWFTfSxSelg+ZnZtU35EcS5QQlsmT2lDYVdFKzZOaT5HVnpeSDl6JjpiMXs9fkxOWj42VlZ7Sip0QUNvYCx1cSolWDdpPW45UEpYUjNXRClyYDopUV89WSgjRmpFbFFeX0FwPE8iX2ZHOyVuQnloSUVvV3hNVGptZDNEZSglKXtmJUg6NTc6VVVKYV1tR01L''@;'; put 'put ''NU9lcH0wUjkqaEtIZWNDQGpqP3JLYUxfS2F1UHMwbzxxPlpPMy5jfFl+R0wqN0pyPWYxRFUxcHZ9XzVrRE4sOFlgcm9ie0F2R19KcGtabkJpWG9DRD9hbE0jOSpPQHpUbkFUNjIuaEshW2VTTnxnTjJKdmhSL0wmMjhXPTBlZWl6aDdKIzBKPDF+amIqaG05OWJKQjY4KlhdSTY1Ojd8SU9RcWts''@;'; put 'put ''ZUBSb1FwcTx4ejVKUChzQiZ9Y2lNfWs1KFhjPFdmSCtHfFMwNzk0YWBzODteOWB1RkhMN0YhUFZiZjt1L2xXVzFER0NtRSJVUHxNPWQhdUttWG8uWD9OUkVeUHBLOEBkOSVTZkR2YTE6dilhfnJ2dnVweDJ8TWBaQUBobWc6I1JnOyZiQ1V1e2o+LCN5NmVjfCwrUSptX08odERrZClRSl5XKXUp''@;'; put 'put ''KWMveE5gWTB6QXNzRnNTMnJLNFY4fVQ3Il5UN053aXkkVT9yXl9XQUZ3Ri5AKXJvOz5GSl0icnhGZFtqcGtrMS4sUzw+RSR9JTNaekshNCRXPG5+b3RlNkBqc0VCMWN9KEFQa2I2SHU+YGQiLHJzXzxrckI/VjVoLmhDdy8/RWNSWiRoeGQzQEE1KiJXVlI4U2VaPU1QXWJbTlNFRU5TU1taMU1d''@;'; put 'put ''dGxwV1ltNCx9MEk8ZDcqWl9AS0QjRHFgT2BTS2pQIXpZVCEvQDYpYGU5cGh6MEJmM2lANjkxVXkuRCJhPGY5WFRIaFRBSX4iIjdUJHNWSzJ7IkBYXVs1PGBEUU9HYS5ZVzt8STJOezNJIV0qeV51R3gpJUxsXmNye00zdiN+ejIuUDBGOE9+SFBqJm8kVXAyY1QmQE1UVV9wVDlfIk8uZ0ZRTDok''@;'; put 'put ''YjRROXBOb1ROaVJzcl8+SXN6XXJdV30pcW93PT4hQ0Bhdk1oNlclJVokWDUwY0dbfmdHa1VYRVQ5dzVNZVcuSUQkOnUqKXF2cztNbTFPT09LLz1Rem9DbzlJUnF5Qy4rK3tqT2VMYVsrQS90TlRJKylXbUB5I24lW1M4T28mU2I0Z21SNyQiSH1vNyUwYGVqO3BubjVCWDlJbzYqLzh6U0N6emhP''@;'; put 'put ''aFNJM3BTUjZmd11+eDIuSjBfQX4jTShhK009XWE5YEtSMTQmNn0pNnBNdWV+UzJOSGQhQDVrMjdCOzxeX1FXPEYjRi9bd31RZnFffmBtMzgyRCJAfCRJNmx0ZEVjWlRRInE0PWdFT202WDFXVUZrSVgwdCpLejhGRUxHSkhrKXpyTj4jZWg6OVBsbmcjTCMmUztTIm90UkJXMk95SVg4WXZiKHlE''@;'; put 'put ''XzkkbTVUMU1rSy9oKys8ST1YSHxPYnRJR2lPOz4mWXAkWTtKbTcvSnlBRnJgW1E+eVN2IkdZXkRYRjBHY3R4UypZcj90KlJyYXlpSiZIT3o/Z1hhfjZXPDFFXW8xSCVhZiZRKW9PL3tQNCNPYEs+MDo4P0R1WGxfZzQ4b3A4OlNBPTdiWWhzNmJ4UyUkfDo8K0E+elNbMDgsOnt3N308elg0UkBK''@;'; put 'put ''NERtP3IpTSp8ZCgkaCtxWzt+cEMxWVVvJjprMjphJCF+QT0kNGNHKDF5ZTdqfWUlSEZBLGEpXWdwKysidW9dQUppWFpAU2d6djRCNjh2fXUhY0hTQXhuVUFbeU4jWy9lLio+PmBvaHAiRUYveUtyaEAmfT80b2RLWiMhKFA6dWJUJHQ0SVgwRiolIjtaY1g+NGxpQHNnLG08IW5ZYHV2NnhdIytS''@;'; put 'put ''SCVYQiQvcU1jY1NYZ1NLb3dsdFJgKy9MV3lOYkQ2dSF4d2hFN3dObj49W2U8fC4rJSJpYVooKT5PWUdFWFBZK0g5R2B1a1MqVUV7ciFzYStDZHlnQjc8VSM4U34meCVKRGc6VGtJandWL2xTLH5XcjM3Klo2LGZSNkFLYDQ3Pnt3TXVNZV5ud3hvYk5WSj5TampPYk06On5ycl1GS159KzFjPVI5''@;'; put 'put ''LHhDfEFtJERAPHpDPVI6TUAzTiVsYFIuZFtKPig1akpmezU7eXE/MHpobmBERj9feyF9IXFsU3tER2VGPm9tT3N6KnZXSkh6QCxpbik4fWg/VCxJRENSSXFzbDIuT21fOzAjdmYyO3goQD9xcWhfMEtGa0suNi9iUEZmN30+Ujd3b3d8ZXNVUmtMfnFadUo1W0d+Mn1EayhYNjgyVGxPfl9AeXV8''@;'; put 'put ''VVJHcjFzNz0wdzAjfGV0V2RQKEh5QzZmcVAsMG8rZFJjQVdiK11WKnFoQDokdlp5dF1CaWA9RkBTPX4zSndzRmE8KG1nfSZUfkVsP0VLbF4vYyxydjh0NlNvVnQzUFgiKXszSTh7NnRYdjlAb2tsaWowM1ZfJVtJR0U9d3R4P25TfHlHZi5KdSQ/Wls5X188b0Z0VU8ra3d6eVJUNGhRTXFjSzJk''@;'; put 'put ''RVVBbnRdbzVAYz55T3xlTElLLiVrW1IsMHAzeS5WLDVAYExXPVNuIVlPbnokZjBuJl5yaHNZOXp1Zn4qfT9Xb3c/Ym9kNUFzdzA7cnY5aG5tUFchaCJFOXJ2Sls7fTZ4Yn0/Z3EqPW1fZnwleVgyMT1iNDozQDJiVGNrT30xbyklV0x1YT0xbn4hfT57OWdZKzJpcSUlRC97UDg5ZkczQHRwa1tR''@;'; put 'put ''LCtESypAWEFNIUVOREl1SHt2TXBTfU01WjdwfS9NYD9nV0tfY09QQXpqXz80MG5gSV5sNW4qVTdPdjlnK092WGU6eDZ7cVY9VVJpL152SHRiTWx6L1gqM2okJWAwMEdWKVJPaH52OVMrNio2JVlOdUh5fkIkU1doKj05fXxWXWduZT40dUl4NE8iSjUoSUpYLztHaXQzN3h8e0s1TnA9KCpfWSJX''@;'; put 'put ''ZmBifUMqMis8JS9IKWh+LkppNm91M2lhIXtMYCl0XXIzZ0gsLGVGempRcHJMTUhbbDo4YU99NDhBZD10SFRKXW9DfnVZelVUPTYlYD4vT1cjKjJSU0YlYTlhIm8rNixALnh7MHcsTVYoU0hwd2c8NC4jJF81SlpZUkFLYEBqR1FnZX42SHFpfm59Z1l+OXkmPUcvX21IR3dFW35bJW9jSHNKakt5''@;'; put 'put ''RXxDIyNPUiMwdVc0JDV4ZnM7Wi4xPioyZXwjXjtOSWNTKlJ2M0xCMH0lPmE+JEgpcj0xdV0mdyIueCgzek5kTjx0UHVzMCJfVmlNKypocyF8d0UhZWo0cW53VnRaWnAmV19RJXAlSHU5cjdzaCwuLko8JGFeZTxyUlo+cFY6ZSMzPWM9PzxLKG8qL3o1e0BXI2Q6Wy4xOnBPTDprSFFNMjp6I3Qk''@;'; put 'put ''TF4jSk4kaDNfViZObls+cUIkYEd+Sj0wTDldblB0PlBsUEBkXlZza2p2Ol4iWjlzUV0sdHlgIUI6SCk8dn1MYSpSPy5GcCouTHJBdDl9NjZ+TUBzPkphVixEPkBXbXZgYVlGLmNXe0N9PG9HSiI9RGpseWYmSVo+YXpzfSQiXktVMTwweihLKn5sI0luXlR5SjxFQCJIY0Jzdy54SHhlZl1eZ25b''@;'; put 'put ''bERjRDdDW1cqRVZXL1BwY3x7dEEmTUA6PzRqV2VRZHhxYXlzRzNDbkRgPDpdOkNxTl1+cjk5NnRHRj5fZjBPTW9PIV5tTUEpNXZtPDtGPDNYdjlFJCtGPCJMIj95RnJAXSElLnBncik2anZva1pRLDU/fGR1YVpYPiRXT0NkdU1pSnIqX0t4Uj9ac2VVNzYlKS4rcyo+aX1aMz1dcz9BMVNCLjtf''@;'; put 'put ''JX0rJjBwOTBlaXZAUndROitWV0I7I19DOkUvfWs2TywrQ3ZvKDxdLD81Ryt9OzdodE9fREZ0JEQ5eTExPEBqOGE4M0ZBOFBoJThnQF4lKjBUWHwzZVJOYkVIKkk4Pz5bXn1HNXBiVSR6VDd8e21CflZyS2NqQGA7Tj9TfFpPe0Q7WV0zKWJnIlJOPioySE52TXRCSXEpZFdZMXQ0YmpVND1NQ0Zv''@;'; put 'put ''I1dGRXEhXW00MSt1P1ZqS0hIWHJWMFR7YC9gS3l4ZUZ2ZXRHdjtbN2NyVUU9TmwlNjxnL2MqaUJja2t0cHIjRnRVenVrfXVrR01IISVyd0BwQEMheSUuVUYwfmplNj00Ryw3ZG12YC4rIyw7eUwwNCJWTi8sX2lBb0MiW2h1IX4oZVUrOj5uPmBtbHF4X1szYkw/OUBqZU5tVXU7VWEpQF53fT0s''@;'; put 'put ''X3FRJGRrcDRJInQpbjR6d3FxLzJGPktGZUF7ZHo2YFByMVEuTyp0RTVyZlpEVC8mKkE/U2RBcVFdQDZSNDU4UENxLyxZWEpbZWFSXTNHZjV7XmFabHxofSh3e3U5bT9kaH5CVEdVWDFJL1QheTJFSn1mRlZZfio1JT16VWZHKzlJVyxAfHl4NE1QJE1wPzolX144P0NGUjkqZ0hRaDcjLGVAMGo1''@;'; put 'put ''bnspQmEjeXs0TXB0YioiWEY7KHtJX2BAWF4uLnBvVyZQenB7PFFYfjcoMChFXmV3NCUiVGx3XnZQQXcqdSJUMVU1LlBlNTlRWFhCMkA3Q3lwWV95Qlg8U0teMm80Y2VNdGdWdyxbYkh2UWF5NyQyKWgiaTRFdFBLSUMqcCpoSXl2RSheMVBSb2ddV0xHPz0udnRJJUpMTCsuekVkeForW3ZxMmNJ''@;'; put 'put ''Wy9YY1lNYEVaLiNnOUNwOzNtVzF3clYoKF5MJX5OS0NSITwvJjJLSXhyZTVIRjU6MEhIM3l6IkFaWDp2SGFgejY0MUslOSxSQnZfdFYsPyNbJF09TDJ6bmRST3g4eGpSfCxNMylCWGIzYDVMOWU0LmA6VThAZj9Gb092OHYpaTEuUSs/OkQ3XmtQW2lGX11CWTVSY0ZoPXttbkNYMG1bbFZQWzQq''@;'; put 'put ''aW9EWUtVdnZPSWhZQnVicG9aY2hsYncsZXR5RihQbUp6fEozLExVQTNNVHU9b3s2cSgvcz1Ie08mSHtWYCE3b0YwTzc7amRDLGVyQk8ma2gjI1R1RHZfeVVAOjJWeFU4IWNLUkU0M04lS0hGYEV6ZlJoZ1N2STojPzZ1d1RYa3dmN0FvL0FsKlh2LiFsamdxXkQyRCU+eDo0SlBdMyRdd2UhWD8u''@;'; put 'put ''UnMzXTFoSjh3WCRjUEtgUnx2UEk6aU8vazk6MHQrdlkjTFp0XlUjPGpqdVh0NTQlLyojTz5uMCZHNE4vTykpPmZtJndmSmpXJFJuS2VnQW06Q09vciZQTEJzKChBVD54W3VgJTUhJWIkZ0p4d0p7TVN8fSZjSEAvYX4hKzo/T3huY2dldCF0VD00TUg7LHhXLkd0dUxbcWVWTzgxSn5UZmdjZkF8''@;'; put 'put ''NCpuN2Y0WGtiXlRNV3Q6Jj9jTGwyQk07P3QmI09FblUsUlp6PXpgYCpFPkgod0U0Y3p8QCRQUEpvM15zX3xDeyRZND9IU2lHRV0jZVJbN1QsVF5yJnRNdXVUWjRLbypgREowSyU4JFhYKmB2W3pKX3hHIUZZZDlWO29GdltaWmFwI1RLY1lIejxTODFTIXQqXT1NfCMvcmA0OEMhPExERzJCRHAx''@;'; put 'put ''K3hSdF82PC43RVgmajZbbUsscmBWYUJpOj8zN1dbclFsKHNKS3IsODosYE1HOjEkaEthXyFJODhGUTVhWUN+XkwrRCt7JWNDYWJHUThHMGlfWW9eOUc8fSJUflBvOWVwKXR1bXx1LjBbVChtJUosZkx1b3RIV3RPaFJuPHpvQzIhYUhHc3wicVJjd0RwLzRaQls3bjFmOU1hdlR6TFl4SiIodT9m''@;'; put 'put ''NmBaUyNFbD45Mmh5VmhPI1giYjZRYUlaeV8zUk00QjxOTng0X0AofHA8PFk+d2s0KStGO3E4ans+b1lYLDtUWGFHIUNwIVUySjQmQTFMW2lEK0Z5fm9ReXBZP115RXJTLDV+UWBKWUkvJEFUKmw7N2FzIUo7TixQXm4yLltkezdvaGwoSVZQT3pGVyx+TyN8Z2YxP1tudG5YaV1lWFhMYVlqYEJR''@;'; put 'put ''bFhwRlBJdGVdVF5gfkwmXjxoeF5UfDtLfTZwVzwpa1JJPEVnZEU3WV5aaE9fPjNjSnA4MDtqLyNARDVgcHpUPz1WTTFhYUdPWylTOEorX3o7bnsmPUU9UEwmUigrN2IqcXZrVWYpQn4kd0IwS3kjQ1pTQFsrS0dVXWB0Wy8sdms/QC5fKmM4d1p1Ji91MWc+UlpvQE0hLGteQyg6TlEhYixkT01h''@;'; put 'put ''Zl5sNVF0djQqPz8uSjIpKHlxYiJiMSJ2UCRRKmRxT3F6alQ4SzUsZGs7LnxudCFlU0pUVVpOMD5iWXRvQ0BPWkVXJU86cCMkWj5EakpKZy5+ODdpUmo1VH5HRUZQV2s7TUVrJXV5Xy9TSmE8UV1HPHpJMHFgJlJfRiFASVNZIS9TNTVfIlRrQC9WUCFGVGkpRHouZUNqKkllI3pZNS81ez1LZVMu''@;'; put 'put ''RnE+MVtQMCJ2N0A4TS8iR3B8UnxDZHdAVEJhfEsvaUtHSy9URnhnXUV9NnxtVS90MVBeSld8I3kuXXMkRERyIypZPCt3bFRIXkg5YE0sJWd2NEBjK0FGZ0N9fm4xYiNwIk1oK01za1loOCt8L09LbkE6S3xdKVZ8eVV+OiY3RXJrKUQ2SE0+cXlYR1JkL01TdXI5TTp1VmQ4ZXFmbjshaHFKMDN+''@;'; put 'put ''Z19tUFhyemN8ZX0mOG1OP2ReNGRaaSpxeiovRCgvMS85NCw/fnY/ZW8meW09b1pWZFFpeitnX3xENm5IWj1+O0s8SSsuLHdpJUdNWHNAP3kwK2pgSyxuWDwvQEhiL2QjeCklcWc3Nkomb0x3cTh1LGA6dF8zKTB6MlBaIys5ZVgyKmR7MkVvTkYzMFBodChyb1F9Knw/MCtZLGM/Vj1pMV9GZ3Fa''@;'; put 'put ''RT1fU0hge1hSLkY7aHE8RjokTzteRT95Wy9kUHRLZyFaWTlIT0ZTOHNVPDlTODhaNSwyKmA3VnFqN2ZOVyFzeUp6RWdvX09OS0NnNi5iRUhaMj5Pe3VYe3d4bkkhPl5feTtuSXMyYUtIa11YJnY9ODFXcXxaUkA3OmAkVm45ck9BYzsjQVhocCQhW147eUFALy4oZXFuTDUqTmBxL1kvKDJ0WzFv''@;'; put 'put ''fSY2TCI9X1NZdGpBOT4sYU1DRGxJbHckSiJZd1hWTi9BUUo/a2BULE9maj5tMU5lU1k1OjhHN01mI34wQmp9UUdVPiM5KSx1eCJNfllQWlNObiF5bDp7OixAR2xFJV9JQEhsOUhkPjxEISRrcSkjPnFdWHsuViUjMkZLITRQYTdvdTtqfVJlai90TCF2R09iYGlfLkxpU2FCOm8yPVVYN3Rvcjtb''@;'; put 'put ''WGRRJjJkPmowJEUidiRlPHUuQVp9bHFiMTVXTHFBOkM/YHdTO0NYb0g3PyNbeUNZbU1Za115djplcileNiRMOHQsXywlOTl9KWcqRks6ekVzKGJMU3svXVJrZ1IvK0VBV35fbHR4d3B9VWNPKX1ybm4sVlgsNiNldlYxR24/fXFucWhlR1AlP0BKfis8IzdiaGpGe0FDdD9fRXozSzwmbD9NcDZv''@;'; put 'put ''RF9kQU9ocFQ4KU8+VVNfOXwoKWxSZEk7QlI9fkpyRio4THIwdTNsQlQ5SG06V01kbEZGXXw8fjJKJT1meGl6XnxbfWJDcGU1XytRQy9LWkx7W0tJdTEscHRvWF4vNnFBeiFOMGw7Q3JOO0B7ODpxUEJKLkAkTSs5MkwzcDtCPGRrYFJteE1jOX5yZzs9R0VYP2hicms6VFNVYW9mSVpRJktTXXZa''@;'; put 'put ''TVM2MXBbWWc2dkYhbXBGV0xpZVV4MEhlMHZrY1AlOmNBSE8rTmRROkZIQn5xXz5VJls0Wm9ePSROQ1hOUSF4Ri5QRTksa0MmT1ZYIyJvQSIlb3B8JiMsbmskK3xaQSthJX41cXEkUzdsWk0iMWJrPXo0OmxBMUA5a1B+bEMjVTsjbGokc1J3NWRoMzQqWTlPVlM5dDtWL1VdM3ZwPUN0KHpCa1Yl''@;'; put 'put ''SlZhPHsqXmB0Wy8uQ11sa0ZFcGI1ZX1KLDAyMmsudXp+VilQOylrSmpIJXJfM3FOXzU+W1ZnWmZPanppP2R3Y14jQGc7UnQ8c01XT2d8KEpqUWNyPCZGMHw3Ll4iLkdCRG9nY3FlbUcsV1R2YGs3MTUqZlg9VEo8I0QyYVpNLHRCM1ZzU35OY3kuYVVRUzdOS3lqIz46MVcmLyM7bWVMZzVLd0wv''@;'; put 'put ''Pl1aJVttPUxkaT9HMUZraDl0ZG8qeXk/clo7amhDMixHZGoxJEIqTmI2cXU5bnZpYjFtU2kvQk0lRi5RaDpYPGRbVzQwNzAqbFM5M0c0PEg0MU5tfk47fUd4OzM3NVp4WGRbNTIpaisoXXtOSz83RChBKnc3LkI7ZU9YN154a1l5YXZ4bFIrKFY+Wz0uaVgrYEpAPCQvVy4uYHJrTG4/NTpYcT59''@;'; put 'put ''Pi91RzFxcSJWQCFkKlswbDd1UjFLM1tJND0oJlY6JD5FJEByUjpyKkBqV0J+YnFKNylSfFo6aHU4XypTI1VBYER0PFRRdWs8InwwWmNzYVhNSDJkdWRMKEdycUkmRiosQ00pN11MZlBFaVgpPGl5UyRBPUliWzVjUTVJQ0JacEA7YyRIRCMvPlVLQGdgb2A2UkxjVXtTU3Q1N3leLnlTWzZmNkln''@;'; put 'put ''YXhaK3VeR1BIbjY7eWssQ0oudH5OSmVwTlZfKj84aWg7W1p4K2N+Rm9QWXVBZGooOzQrS0Z4ZHk9aDEhI3RJWDlLaWw3aTY8N3FMTDZuUUFZT309RjhiYnUwR0lwQF9QUDs/YmFzVHYiR1ZdejVnbz1qRyxqJWpVNDpURCViM0JNSFIqUGBgTEBqTyg+LlZdL10/fD03PXxUSEA5SGhrfTlFdl9C''@;'; put 'put ''RiZlSHlxJkhgMzYrfFQ7Kmw0TlgjPENMPSNxKXM9NC5FTDhLXiRpeDBZJmNhRXR0JH0lQSxSb0lrQSRSXlt5RF0pdUUpMm1ecWg3LGxhWl8lTndPOlVSeERXU2E8XVMiWiVfQXRYSDZuXmFwO21qZXI2YVZqL2x8PHNvWF1CLHlKJFAsUl17UiNGazZbUShGVFlXZ0ZUQnR0YkZrTCFsO2lXQlpL''@;'; put 'put ''fn5uL2A4OGYzU2FNfWJqOVghNzx4MlJ5K2NDOiVqe2REYVg+ZCp3dFBHIjwrfWFhOnFbJGY5c1k3QWwhNyUqKDEkPXg9ekF1Jl4iJEIuM1ZbYHZKLCMpX0YjQi9fIyJkW3lpYmw3SDZgNFc5VCFuPmBrVjQ8XTJEJHQoNmQsZ0JQPkE5SDxNZFNoOmdsW2ssQltwJkR3XyY4d3RVOCE6WiJlMiV7''@;'; put 'put ''V3oxQ01abGBUfFBuUE1gOEckXSZTOnQsTyo6MHpUTzcoTlBxcVdLUWpkTmpANm1jVShkSUB3TE1RPkQuL3w2Xk5yeHk2eShzXj49fm9LZXpjRjFdelpDaFFLJUEifXE8fmxgXVFnImhTN1JvTllIeVRYaXchfH1weXhxJShmdmwlMjslNz5aOGd4dXVvQmIiY1E3Y3hsIVAiZis/IX52ajx3XnNO''@;'; put 'put ''V2tlNnVXVkdAU0gsQ253aipdW0h4dnd1Pl50X1I4QU5Rd1E6IjM1eWRfRDhAZGApOzFXYUxmK0o0LCFvSDY0JXBYUUozKUZvNlM9ayxjdk4sI1p+bVVjKkUzX0tUUFBka21GZiU/Kys2dmJ0VFEvPCRzTkFhciFtLiZmeEw3W3NvMGdqRjBCU2x4QXI7akpmc3tlfShhekIpP0xwMkZSX2deP1Mm''@;'; put 'put ''NyE1ISxNIzFga3k4RVAlS0l7PTRMSk1ZITU7YHk8MSV0KC9wL2Y7REovRjZ+TChJLzMoM3d7W2Fjdzd7N2hIWzIqbT56eGxvJG00SCE8SiQlenFmMiMqWFRHRHddK3p3ISM3P3h7JFleMCo6OHZac0Fle1lhT3ZlJjV2Pzp9U0pVd0VWWjt3SUN5aCM2fEhIJixbKXR6LCRDOFkkLzdmSFt+eGR6''@;'; put 'put ''YldHZmVSM18kenpoc0k3KS4oZUtHcS9eRGZzbGVZW2ZPL1hHcVVKJWlNUSk+clopbXxNRmU5K0hvfXo+MkUieSxEPDlaZHw9XTNsM118X3Q+O0lQY1RVR1ZiJStMe25iRW5kTUMla3QmYV5SZW93R2N2elQzXzJCTVcyXntHSm1EUGwmRU8qSyJFL1RJVnIod0JgTHttZTAubl9IS2JRbjhgeEMx''@;'; put 'put ''dS97NWlLRSZuKVVNYCYmUHQ/QilGUHUmZiEsWXY0NUB9ak98WTdCL0U9V3hhLmE2a1ZtdjdGfl1KdlplTExWSy5kblVnfXpiZ2o6XkdCYTR6SmpzY1t7JWBJQFN5MzRzaF9LWjtVendQentdL1VbYUhPfXZUSVQ/ZDxdQVhpVWUsQ3tBQjs0ZnhWOWVGMndLZmU4S2s/dTghajV2I0lwenwsImVI''@;'; put 'put ''e0hvandgJDw6ZD9aOU9AWzJiY0tkd1hFanhiej9eV1Z6Wk8sWDswcFouWHBOIn1MKVcqbTBdZXB1Ulooc0A0PTFmQ3R9LGQ3YkdKfm9fUiROZUZhWyg9bmdTQiR3ZUx2eTNLZnJoYnpoTDghekgle0ZLP2hwdEwmSFI+LzxQV1p1SXomM0coNXA9bEA+Q2xVLE5ZMEJHUzlmVXpXQkxCaiQjdyF7''@;'; put 'put ''ZltwJmshJCtbVSY6dUhYNmxYUGpSS0pbdnx3SjQ8RG1LTU1yTWNoMTpJNyk/JG5WMDhUMVp0T1ZKVV9ndGk8WldvNDdPMERoaW5JMFs5Wi9pLkkrL3RnNy95NCxdMl9tXzJfe1cjc203N0xfNDNTfTosbFl1ZyRkb3I5VilpQnBgbTU4b05dcGoiNytXcUAuUVgqTGlfJm9iOyZOXW4vQkc8e3dt''@;'; put 'put ''K3tzJVNnS0FUTUtdPFZ9R31sS1BZVnwodW1fRkc5bGJEZmpXP0E3dSo9Z1ZGSz4iOzN0STJvb2dGPzsuJUNhWlJiMG44ZER9NC5FQzJOI29QbXtzJllBPDglMiY4TTYjIjJVZWlRfDI6S3kwL1YzXWlYdzY2Y3dHPG5xLHtmbnUoa2Y7Z21EdEF0X0dQPWFXfkZUMW5qXjtYUWZDL1l1UCxdOzBo''@;'; put 'put ''L1hQcHMicmdJOEciT3ZUdjcqJkdZcGcpNnx9KS5dMzNiRnh9PC5pZCNefVowV3RKbihbSWlubCE+dGlmWFpxdC9QKXVrWCxnZSNFZjY3MWh6Y1JDUEkjVDVXO2Z8Y2hUb25uYU9UWV10JTZxSDR9U28pRGsvQEJNS2hHel0xaFphKG9xQThtQXFWOFVRKG8+LG48dXYvMS48OmZUayk/NXEoQnd3''@;'; put 'put ''Tk47MTdrL3l6dkQhZk11MDp8OmhBR0Z9JHU3dSZoQnplVW5odTtaJDxpQkR5Sj5NV3YjUDZyJjkzd0xZU1tNRF8zVltVQiozelNSW2QmVTpdWHtweXtKa3syXjxWaGwkckJ2OjNBRz8vYFB9cHwhcD1PPj1kc3xoLj50TWw1PER2IzJPMV0kTHl7fHg+XjRQTUNAbV42Ij1VYy42e15vMlJHUnxX''@;'; put 'put ''KmJ3UT1VWFBHXlIwQUgxXTlWbXVQMUpzdWhafDU7QFVJIWkmUDA2Vj5UQk5FZmtJTSV6NnZ9bSU9RlgyKDI7M1IvLEtXXV17JiMsK0t4NVQrPmFNcyVhcXpMemhedHhBbThBMjVVJFZsa1p8bHlie3FIUSs7NzZEb251ZzM0L1tjPV9dIUMySVpnc1A/Izg6dSR1VmIhW2lhUXBsJi5rYUl+dGd5''@;'; put 'put ''NCVEayYyelZXfCZYW09iNHMzSCozOFowez5MKCxGWWBKcn0lemJkJVIiYXJWTVNhUn5ALjZgJXd7WjYoTmhIRjwkOS40fU8kQUUkbUZkNyk9K1tRcUx4JGZ6MTswfmAlOURkS0glUlJrVkNeIWdgSVRfVHNwVGAzKEBUL1R0SD9lI3c5QChVSSMxWnN4TWhHXWc2USp1YUdFbXB+XXwkcWh4KVV9''@;'; put 'put ''M1BuO2pJeXpIIlhjanlvem02T0B9REZfa3NCVkIxUU03NkF5JTxoUFV0U3svMHlDNEBJflhYMWRGNyl2bGk0bCNTUVZsYyxXfV5fWllFX3tEbG12Nz5DRjdIcVkwL2Yyd2heYGNETWxEdFk0SHxNM1EyK0NCfEUwNW1GV31+JnRRREtdcWBXbV9rYDo0PXIvZGBaK104N3UuKUBHWS9kPiZRUEhL''@;'; put 'put ''ZVhPLGoxRkxuTXZ4bVNIbVl+cSlQZ0lKXnR0WDM9Umh9TipCPUpqTmkkK3YoZ1s+MC86SV0lJlJkNHVQSyllY3J+djRZKktmQ09QI15mfkdlL05RZFA3T20jdE1FIURoRTVPb3BBRip5ST5Aaj0kSkBTJGZGRjIwcDF3PmtJOnFnSkc+Qm83aip5a14kXW1NQlB4ZzNXdF89dH5ZcXtCdzp1SH5B''@;'; put 'put ''bkUqJEp9bFhLbURydjNRPEYrciI3YUI6TCgwYkZCYDZyIkl8fkhhPSs4fWNISlB2YGFVQjI0RmUjTElhOEc4QixsWTN4WlpvOmVCOFBJdiZLOSVpLCRXY2I6Kks8R1osaWA2UWMvK11odkhZZzsvLzhYelEwcU9HenlvTl9bJmU8QF5vTmtGUCNtWipMa3tGeng4ZGU0XztBLz1jPDJ6SlJkJjlJ''@;'; put 'put ''cEVuTy5EWmBwQ2h3e11tdCVRfl9zJHU2O0hlQDBveiY1QFFNNFlhcXxCYCY7XzY+SypVcG9DcFoqL2RsM2EyOl93UWZPUz5oN2NPYiJzYmAvKDpdd15NQyZlMDpsSGBIT1FRKV92JmI9Y0k7LHRwW0JUMDlUdmp6eDlyMWVzT3opZGZNY2E2RituRlBgUCtlN3Vxezc0bVEvPEJeIkxbTnFPcHgo''@;'; put 'put ''a0xiTyNDSVlZTWhDJkQsTTlbdighZUZqdEdnODApdlBlWyVVdjxHKzVxKWEuWSQhW1BfQ3JRVk9pX0t4JkpNZCpSL2gyUCk7Y1ByUHFsXU5zPFtGb2JIRTFVej9gWSVPaCo7NXxaVGJ9cG1+SW9HVj5jUWxhfnQoPigpNy4mQjpScVlgPEFDTlMmL018ZnwuXmolPDNaTlg3Z3FDI2JCIzZaaTNr''@;'; put 'put ''MSljbjMsIzsjUFEmWCRGKVU3M0MubyE/UmNFKS90Zzo3V3BUTihQLHZHWyhPLlIudTRNRVVxTVYkZCx3OmQoOkcxZyM6QzJsYm0yYGJiI3ZpKldTcHEzezFpd2YxaiptUXw/XUhfIilBcXJeaExGaVhJYzxXZTpLd0A5PyphcSp4M2N5TldtU2x0UENkdHg7XmVfV1lUJiglZVsyXyZvW3MhYHlI''@;'; put 'put ''WHE4KUY3Q2hnSDZCUyZDTlhmW3BiOkM/bnddTyxDZjxmUl95UG8xJmw1UWJTW0VEbyFIQGhXKjZ2VTcqNl1UOFleOkRqKGxQMEZFIVtsZCtOVmA/Tkc3QD93WmY6aVZSWmx3YmNNdjU0aCNpWzAqaCslPUNWcE5SaGdsQ01DUjY4d3ZhMTJJTDczUChILzRYcTJsYSErdm04KXZ0aiRJI190O2dy''@;'; put 'put ''YFt4K195ez17JXx8WXkoOWBGSFR0VkRRbC9IO0FLUjd1Ym9+ejAzUzQjXz5kdGIlMUU6eyx+P11mT0pJLDEyR1AkMCVKeWslNDxKPltOfCNtYCtofHRNWnpMYSooI3BRNT9jKztgNTE7ZyNNMEdYaz40IztbVHp8KHgoW1FVIXZoYEFtXjppamR2aE57PXQjQG48THFafXxhRD0sMkZqVl0vPDF5''@;'; put 'put ''RytTfFB6YWo3RTFXYUdreGhWQWAyO21NSDFwOntfVCV+S0pfZCtUSWFwMltDT1Z+RGQ+eGBFKXZDek0pLGxSTldSNSEkZUEzdSN7OEBUYnUiQjxdRCpmVEgxcF0qaT1MbjZnVHJiNjVhQlQ3VmhCRnRAYmVPNnIwc0NMOUEmR1ZuL05iPiNSXz8yJS43a3xWJCNwfHkzV3hpO0pkW09zQVpxUihp''@;'; put 'put ''cGcwM2ByWXJDdCErcj91TENDOWkxTUI+ZUJIcTtwZllpOjg0SDdmI2Y0W30+LEZkTSpmc2BaUDQ8b3xHOV86P29ueGpgPzo5Yl9zPVtoc3YlMjV6V29kWXo/SiV7VzZibilqdERfKjN3MzxvbEg5YjY7dSZ3QFhZdC83Zkd3IiF1UHZxfW5JMnJ2PV56emtMJi57YFp9PE1VSVdXe3kjNDBJKyZ1''@;'; put 'put ''ZVhZaWErYHlnZzpCXUZbMC87Ulh7VCtbbGhueUNtNn58RmYuLktuMGV6aisrJSxbU3p4QnJCOD98R0ZqNHYpIUZMKCRtamcuL3FMOXhafVQrM1RbMEFrWDt2OGh9NVNGL0tiME93PmN+OXQ4K0lDVHlLTF0wZlF+fHZbV19kXXVMflVaKkJ6aD5JbUUwQVB+flg8VmJGMEdzR2xIRW47K2kqVUdE''@;'; put 'put ''YzlwKWBWWWR3TUZVTXoha3Z8aU9bSXtoYXt2MTBkfV1kVmgpUXZrTih0Ly9URl9vQFh9MDdbRX12JCI0cVheWUp3LGNfQSVYdjIqVHYvTUlDe0hgWUVBWT0uaDxxZWpLTkxCeiNkQkJASWFXTyh2TF4vLzdSUSYrSEoiRVUwLFA3KXU5aHVKeX42MnNobTIxQ0E3Z0IreEB7KFs+MFMsdEZsUklE''@;'; put 'put ''YjZJZU88fjgsNXVpY2d3eyI+XjFWW2N0d3R5T18wb2RtP0lncURiSHVnU2AzMlR3T0BicGhKcEE3YlVpVTx2My8wR2d4MmQoaVVkWkFfdWVtYGNpQ19rYDd1SGwrN1tELkxwa0JgW2Y2UFBWIUIuWEAqU1RGeGl8cTkrX1BDNkEzO1c/LExDYmtWZ3JZO3VOMH42VClCJDZqRFA9em5LS3pbLFQm''@;'; put 'put ''IVErV2sqJTliVEkxPVlNVyltIkBKZWRnNnwxTD9Ue29NVjYqVmlhSzN2XXJQY1RMTGtSYFp7KjtWWDhVSzV+RUhnOnVNYiRbcDRKRDJQSyosPn1BcEAyTTg+dFQueUZRb21iMTZYSEA3IXUpNCM4WEowWyM4RVpCUT9yNEBASGQsYjFLe2pLUm1qbUp5LGo2R0N7Li8pUVVgPmR+Kikud2htNG0p''@;'; put 'put ''Qzl8MUw0fmY5cmgzMVdqdldRKzVjVzdOaWlzJVNlRXRKPHAkd0FwWDRnVEdfdXBWVXBSbEg8VlUsSHNsKmBwejtPe25aTklRdCU/YFFMS3VKMGVmfHZYUDg4NCI0VVNIMEN1Z3VGciowZj5nezVtOTtxT2IuPFF6b1V3algrQEA0JT8odEsvczZhLCR5JGR7e1hMNm0iQ2chVU5bOS9EOD5bZ1hI''@;'; put 'put ''SHhROFQ0Mzc7Pn5VdF55QGxeWjZmIjEuanRHRlckN31gKFMhUkckJXB4cU9xKXhXTGIvWGhKLjVhI2V5VF93NSZkOltwI2FQeFl4STl2Y0cobmUsfCx1P0JRfnJ9KnZ0fUw6KzVkYkNsRU9mJjh7Jlc0eHpXfUhFYDksfjk4dD9UekJJeWt8diVVQyVZLHh5NDQ8KF49Ikx8Q2x8VnE+JCpGSXVY''@;'; put 'put ''emg1fElDRzMpandgVj87VDVUKVtGTTJZSyVHe0pIUThZMXc6RnQsbXVZbTE8JXJXTlFtO0tgbz5fNHkqTEwxVCE9VXE/ezgrdE8uY1BoZU9fVyRwM0VOcUxjKnFNcDBYR3ksO2RReXVIOWZDSEhqLiE7P3ZuZiFpXl9ZZSMjeShjNlQiOmREbnpld0toQThfVEhKPVVNK348fkc+T2RtUV96Rns7''@;'; put 'put ''Pn5FWHJ3KWlTJCVocFE+Y2FRTG1MZHE1RnY/MilNMTB7YHQlNEZAbiJ8XmxDZW9TUHYmTSZzcitwJUJOdXZZVSRCZEdvYURybEI7bi5wbl9eRDNnSUJxKDdFfDlYOl0rVCspL3QwNXxVYChbWGheMVRIe1Q8V0pgSSRvQytgPlBlcXBbPilpfWtIOjVUU2tTUUJqNiJOalNCWDZEXWQ8X3lQK3xv''@;'; put 'put ''a2NheClsLDYvOWdTSWZYSSVTJnBaMSZqMjxGQWR1dHs5MmM4UWtfMyhNdEIqXlNKV2xwMX1tWXtHPTkmPkkqdjN5VGI1XjYpSSlAWlIyRWFXS0tqfVQrWjo9P2BpWn1bZ0ZLKUp1Qmx2c3lbOWw9X3h8fDg2OndIL0Zjd0hPYmpRXnZdOU42TSZ0bEpGfjtsRVklIXBfajNaKmUlJV54TVIoVWlx''@;'; put 'put ''TSpWMSVaQXhZNmdXdWxUTmx8W0MmVVZUT10xRGphbnNgeiF7R2FHTTlpWVZXbTUuQ0csdUp8JWF0dFJ+XzgheFVEOiF9LEs1cmJRdjxvOHo2PyI8RT49NkNAM29zazRdNTBpeD5rSX1bPUZfdkRJM2tVP20rSTphVmhYektpQUx9R311QFFPdWRsYSxBK059OV98KUFVZ3hPOkspMDZQZ0xWK10k''@;'; put 'put ''R0JEcXZmLzRsc1pkMT5oIkt+fHxpX0kmcTQhVUIsXzt0NjUoMyljdmBjPD88MnxiR1g0fTh6IXglZSJ0PytteFQ+dn0wLGNYb1JZcjtxKHQxQGY3fVFIT0g5dy5ZKlBubjJncnQ9Vk9GUkhHWl5oKk56PUslOzQ0TiE8dzRrdzFrZnVxSSZ8U0YvZzZWSyFfPSVtNDt1NC4mcj11dzpsYl4rQyRE''@;'; put 'put ''XzpSXmVFPjMuUm85em10VjFwb043eilGQGxtOVl+dms6ayQkWzwuQDB5IkRqJVFFJUc6aDw6eWFSRSY1JlM4RTQkaGwlWmhXZT1AbG5TSjk8aUNrWzpCUU53Z1IhYHIrbWBOKyh8O0poVTkvOV0/P1dlYFhhdEVwOUY4VTxTS1ZodlAxS2kxI2Y0ZGo3SkVDa2BJQmNjL0t7P3NWaVJ+UFciPlBJ''@;'; put 'put ''Lztbd1NNKXNaeE8iTHZ7Rzhreio8VkVNImQwOGxDTm1Ydi5kN2VpQTcyeX5aW1FkRUdeYUtARzxbIUczfTZpdDZCbWpLYU9HNUtefGMzfH0/T15oe0RZYEwzQmt0WjYrPzpGYGdKWzZTWUVyST59aWczWXlGPDdGPGorYEtvd05MQDQkKXZNJjZCWGB7cXM4UGxUWCYoOX41TiNUKjVZa3ReZmY6''@;'; put 'put ''O0g6K19BUCgxeEpdQlU7QE16Qn5peGlNWSZnWXdrX1BvMVpCbEY9IWpJRnVPSjc9RUc4a0lgZkwvbV1KSUUkPFIvZz9YOSxJZWU7e2M8S1ooNzclOVRhUVQ2PkkicE4hNWAmVCRGTm0uJUIiYDNJM2d0az06KT52NF5KcC9QY1lpIXUoKjFZbHZPTDgiV1Irby45MUNaVWhMTClCe3BlSmc4NjJP''@;'; put 'put ''XjpqZmhoUHM3RiNCV0hGVnF8aTl8WnVCcC5KQWlVc1VofDluNmBXfkBUWTY2MXYmJkNaXSpGI3pyTUUuIyZwXXAwUDNzM3h6KWVFWFhKdWpLWWRhbmRiYTIvbHgmQXRMSVEpUUJZL0JvNEd5ZD8rSkxjdHhPJDtzUkU4NixWOXBFRnFuPH06dEdMSWVYUzw2eFltXmdSTUBKJmxaW1tqIzFiLElH''@;'; put 'put ''LjtCYGtaSlhqYz9DVEFXeWdSbHReJjsuaVJCQiJIcF5KN2haQWY2Uml5QGk8ZThHIiMzXkwjfDwrfTRkbyUuQzw6TSEzJXJ2N2Z8UytXT19LZWM1ITY9TkkhdkMwR1lCTjkpU1gwT19RKjQpWV5vZnI6S0ZKUV4uOEl3X3w+Zy5DSVpNUS4yIyZiTShPWzJzPW1aL1huO00sVm9XbHklMVAlL1s/''@;'; put 'put ''bWdUSUMzXXAhbXhYU3JSVzVYMCw2K007RGxWJUB9YDFCSyEqTVN+djxQR25PS19hVVByVGJuP1YqI0AxdzNlI1dDQE9tdCN1Z0k2R2B5UzZDUzVILHRePHhveDZ3SzNIZld9OiV9PnprL0dEclVqZV9RS1l0UkdVRkVfZHRWOTl0UX05OSQ/Zm5jeF5oQEpENT9EVWgufUpWM2kjRSt4TmQhaU1l''@;'; put 'put ''Mj58Rm1EKXx1c19RcDxONS5CaFlKJFAwcC9Mbiw2OHRKUF4vbUBXQ0RAUTc3RnY/PXp3cXl2NXdSKjFnejdLS1t1W350KStOciswdlV9UF0xWi5adiVLTyJdQ0RtdV5GeTUka1ZuclBHeDspQDEzJkZmRjRCMCkyajRGZm93ZWQlOjcxPHdkT3J8KixeJHBiPVA4UkZbVTBPey4vXWYmKUdPUCNK''@;'; put 'put ''dXFEJCEsNkB6KEUqTy8udVpaMjxjQkAxTixgaDs0fER7JXEydG0waT93TnJjQG4/QWx2UTRCcSh+Ni9TLlU+Ok1dJn5mVHBvKmNVayYkKlA2cGg7STd9UXcua1VXRXBDNH4kaU8zJVhGbEc4ayt3JE4pPVNpaU9DMDp0Q3k7S1p1QFJfcEZxVVY/czVRXTZEWVBPPCxLWkFwWUxReiVFX2FRQEZW''@;'; put 'put ''fU9MN1IsVHhgU1kpOyh2WVVtLj0sakwyMCUwTGhDdmhbdUpUUXVlYWBuIVN1Oj80OGxtJjIhcnh2Zm0vTnIhWGJ5JTN0SihYSiFmd35xIXouTmUsfXVCU0B9KVFVK1NCfmhSLkpJe1N4IXNkQXZyc3R+aylLYTV0JDpVcUAvLlJ0Myk7Vyg3RzJ5O29hJn05LG4iVXpEez8sN1Y4az5scHZaXTk9''@;'; put 'put ''bUp6LllIUEB2a3R8Nls4bUdGQkd6OW91Q284M1JeNk0hSDAldmt3UVsxY1FeOzRxSlNaU0YoYXQjeGt0O3FlYXJte2tPXmY0REhpaXNodG1nM2MyUD07ODQ4WiNFYSE4a1kwUkJyV2M5d3o6WXRbV2Rmfl9HfVpvZ15GIkNmXS9sUmJTWEkyfWsheGszc2FNZGV4KC51bHwhKSUqd0UkKTB7UDps''@;'; put 'put ''WmJFRz8xJVkvYlg6I2I1IlgrbCsuSUMhYXY/QnZDWEQiNj57SXdrfSpfMT1fQ1l6UmNyPnIxdXAxKSNySWZqSFRkUkBoTTd2UzJwQmN7bDopSk1PenBnOEZXL11JUVh1JnttNSU8bS8zTV1HcS9Hd1Z9RThnOyxgT1p2RTRWPlVgdGcsYzhMNHQ6UmAhQFsoMTJRS2RuYDZ9ZD9vO2o/IWJgQkhX''@;'; put 'put ''QHRvVE4xRmMuOTsqK1BYPCQ8MF9UKXk/aWQ8Q1svTG49MEwkfXhwTVtHZD0oQE5dRmAjUm59azA7ZVlyVSRRQFYxISxpIiZVTVVfa0NhRWRLbC91XXdmJS8zeExubyVyajhFWzAuNlpTPyxZLn07WSI7a2x8UVVlV3p8Rm96bDM3TTtuK05hX1dmRVQ4UWRaJW4mLGpiJEdNWDBMTyw6OmM3dShu''@;'; put 'put ''JFhzZ2ZDMjpjTFVkLDQueTgiNXZNWEJoUEZyK0M+el8ya3NJVjVoWVhgWXA8QHNjMTUwZU10Uz5qSTgpT2p+MFBKa3NpNVVxUUdYbnhQW2c0JGs7Y3dhYiF0JHheX2xnRm18ZElXWHxiSFBkPiQxX111ZipWQFBid2pyNnRGcSNEWD5sSUssIzFDZEE5WzRjJW1gRWFIVz47I0JOdDxEWEdnPmg4''@;'; put 'put ''OHl0N35RN3pOYHxFcE0kb0lEYWJdW2BWMTksYTlPJVVKQ1UiemQ9MUs+e1N3d01TS0Y1MFYpSyNXdE9VOU9qc2lmTTh5NUU0cFU/eFs8fHtgOndAMUhqZ0l7OG9MMUJFRXQ2Mlh7XkpKMG9jWjpCbjQwSklESys2JTMhfkFhXmdVPnF7ZkRhd3JPOWhveSFTRzl2JlNQXSs9fHVubVM9TUw+QkNt''@;'; put 'put ''d1QxSWpCUjB8UiNyZmpPTG1SPGRyJmFCQmIpZCxIQDIpSTMxdlh7Tk52bFUrQEUwbzJhPHdMfld8T2haeHpoTVBpIkY6e0IySio4ZVp6TmJWVCp7bUZ3bVdpRE1ZNmY6X3gwUSEpeG9XI2BOWXtSeS41Ml8yOSMxel5IJHxTZHxqayZvLGN1YnlDcSlxNT1JNUQqLHpoaE5rdCs+SyUlPWBGYDMo''@;'; put 'put ''PXtIPkN5bGpYZXBiZmw3ZyNVeSFiM35yMFtHSWRUVDVYQiQ+OkouYWR0XTx1MXF2Q3B1K059WWBdRHNMOEh0IiFKRzBefEE6dWpPeDN1d09jaGFPX0M7cCNVPGdXQmAhWlNLZFolU1R3P2hLe19CcVhIPSM+QjYlKjAwYjFTZWEzWENDOiQ2KzI3U0tPfkQrR11QYiZFQW1zaUguc1EhcEVLLmJa''@;'; put 'put ''RGZfLGxSKjJQeT45RzBOKTl1RSM4JnRSIkNCbV9rcmx3Km0pdnlZOFghcGhgZms7dEFwPW9ZXlI3XVVETjh3KTV1eXRrYigyUz9uI1QoMCo6fEE7PkxqVkByMndXVG1AZClrJFYhYzcjJkwxJSJaPVpRVVUldzU2LlpbNmAxX2M8JmF+aDRNPkNbZ2w4TWFRVUBdaEBAQnI6Xn1aaGhPOH5WYmBz''@;'; put 'put ''SGIsVjt0X3JUVzxbSENYNm1XSXo9VXV6YGwxV0BMWkJSIUpxSGt2XWtpMkJQPFI1O1I9QUtJWmpgTSZdTE12akIqYklTQ1F5aUNEfDBNV0loeFR2Rkg5X096M1pYYDxbaHp6LCZBXUFkJGN3aUdBW2pQL1FgP15mZXdDPThsZWBgNGNobnpgdWFfZzx0T1hOdkA3TzkjKCtJbWVfMjBJVn5AYmlX''@;'; put 'put ''XnwwTlhOS2oydEZ0MShhdX1LWSxNVnp1NDpoVjkje3FyMCxOWn1mKEA/QEYsflZPTW8vSGtuYXFfaENPXkRCfntwKC48YEdddiN4L0QpLzZWLCJmIkA6JlgpSjwkXkglRyIsPVpAfG5LRSx1eUVKenU+MzxrQ3dPZSR4XStVSXtAN2FzTW5TVnBPQVZjd0o4N3t2JEhZYE9ELygrLFgjTCNvX25B''@;'; put 'put ''My5TZ2kldE9UekNXMGUvMGk0QV1WOWdsRzxzPlNmNjM9MCpTUW5VRyt7PjRqfnxwRnw6QGhgPTk0MllzNHUvWC8sOWhZRUhrISVyZXtdWWRqJTpBcnpTU1FXPlY/SmhrMkQwRmw4fG1RVlF0QmZeYDNAUUE9VH0rb3Y8QVkhfFRqMGNiT3p5U3NtVzI/aX1nS0ZJWUBFOTFFKWBod1tiIWY5Klla''@;'; put 'put ''TFQ3NChxMXx9OnBYfXI2SnJfNXcqdzZUZ0IwND59Ykg9STVCTGJ2XiMoRTFXViJeV0VpQWI3QlNsNUYyKy90SWN8bC93WEdbWDN2W1IuQDJuLzVYK1krTyNhNG5AfjZvWk1aVkRze2tgMUFLWV80VkQvPypvL0QzRX1XdmV8OW9NNEp6Im4sQm5dYClTSHhbLFgzSWNFeEEqYSNZaGVtbWNCI2dK''@;'; put 'put ''Jj1YM1plQDs5JGcsWSwyIUB8PX1tbjNwP1o+XiQocT5wcXREY106ZUs2THdpW2RZVFVIKVR6cENuP3pdRzd9RzUsL1Y0QV45cl9uQXg+Y2VLMUc5Wy4uKWowMjBtOmNZMSFhKnJDU202O3YpM1V4ezt6QU55Ji9mc3Z2LEgxVEdzL1NCPT5+fXlSb0BbN0FJcHRhdntRPUAldFUyKT4vL2wsbWlD''@;'; put 'put ''P2ZPNltWIVRRK19LIilzJH5CI1RqdVlfW0d3LFNKP2N8YyVOQFt+LkQuTHZ+blQ2PChpM2JXO1hUdWgoO0ZvRSwhIW4/PXBodnNuVlk7ZGY9LiI3cHhtdFY7NmpWZH1AbzUjRU87alhiKG5uOUZLRGQzJnVJWSghanZ8NVRvcVZaVVtQRFsyKz0vaWtkKEd4TH1XZ107a0ZgU21NUDBAYCpbYCk5''@;'; put 'put ''SzFaM3VAUXUuWFt+YFRLfUx1Z05XcT4qdXZaLDM0OzpaKz53Tlooe2R0cSNteTpETGtgPF1OOH5QcVRbXTFjT146OztwTHI3KC81JXIsaXFSX3BMck9+bU48YkhyVHc2Xih8RDc1cWlTdiV8OVghQCs7K31ULCtDOFFKMyN9MTtQJkcsdHs1PUVSPip1WGVrb3VhYX4vJj82dSE3WyFbQlB3bGly''@;'; put 'put ''ZW1SLnsmTUY7aTBPQ0lHUngiK3VXJn5ieUJiT0hRdV5iIUNaLmxiQyJqVl4sXUJpPjtdcWEjcyNgJnNbR2RGSlYsaTtwTkJHNX1kSDgzOzhxYyluVCFBdW5vSElqflhoaXI2bF5MVEIsWjlzci93WG56QVNkNT43WzI3bTc2eDhYQlgpVEomOl9SJSguRSpaZkNabDYzMXsmbC9bVVdpIz9nOXJA''@;'; put 'put ''THVTNy9XOFFaPmM2W29OKEJQeFpqJH1bM2VxQlpELjV6TjR4SylCZ2NRbFt0bFVOXUlHdj4zcnY+ZVlZYClfSH1MbypqUHREZHtJP3Q7VUkkdGtEcnQmZ185fUhUUmFFYUJXKEREV3sucUJCN3shMkVDPUEwfj46Ojo7ajU3OkpGQnt2UyVmVihBX2d8d3NTL3JlQHxaUDFTYjA3YiUwSlNHaVUs''@;'; put 'put ''MmMhdWIzc059QGVuMSpTVkxlTERwRkd3TX1VLmBVbGZmfmVnXzM9T0NkLjhdTTVadjAwLHwyPTgqZ2dwfU52Yll+LDQzS1c6QWVtUGpkTjVOJiZxeUQrKXBiOzkzYEx2S2s2PzwsWCQ3Yix9I3lrPF8lfWciaE1iIiQvPWxYMm9NYzpHMVRwNUlAeDluVWZNWlsxLn5JJXROPmYyRzNXJTpkfUNL''@;'; put 'put ''KnBycnJPKXFSMSwpPnIzey5Xc04ye09OLCpWMlhQRGdgQytTeTBAbnJgez4pI3gjVmNaMnE8QiU2dHZWTzhFM0VHaW09OzBiL04kTmdlOXUlSF4uUiUxW08/QDh3LnUsMG5sc3tzeSNvSHk7Ql9Cclpid245eSt7Yn1vckVIUFs+M3lTaWU3YiwpLi51ZXdOZXA5XjQsezU5R0hAd3w+JHhiJHJQ''@;'; put 'put ''Z0pCKik2dF1pPnhyT0Z2eE4/NT1jWmd4SFZtemAxRUhgPHBaV11AR31uIWBWLDk0VEtneHtlYDpvX3U/dWZuOnJCPDVsfXlWWEUhejNEezZjJV9yRko7bT1tekVZM1tlRDpLK2F6Lix7UiNQMnd9c0AkJDRvJTV+OSF2NyVOPGI0O1RHen1FNjpgLERHYT52NHwuKiVfL2Y7KnpwdnZIY3ZhcGEh''@;'; put 'put ''R1Z4TV5ITHs4XllFdWomaUw6d3l+Tl5sWldnYEB3Y0hIKXh1bmsjPGNsM2MyIW1wNUNeeStIY1kjN2g8P1NGczBBJm9AOFFuLjFeMG06NVRPNC4rZVpAW19QNUtOdWFRWTp4SntlfV4xUH5LY285dSVNRmkxR1dZRnlDYzhNZj4oXSxUPnBuVmVzRjgwZypZUW0uUWxLQGRZd2IrT21MXjFkTHRP''@;'; put 'put ''P2FxIV5vQG8qd2U1fTRVelJyRnlOVTt3Y3llVUU8UTQrbz9NWV1yeC5BeGdUaj07THohWDZSQiZqKHtULD5RPVdEMHRRQyRQckYwfXlMRDFnQTA8Z2JBLyViQDJbMSgoUUsjXjo7Nls5JD5rRl90LkBoaChFSm5qXUtONy8qI1RjWl5SbmgvdCxzfSVqN0w7UU5JSG1feDMkTV9DQD5VLF12SHAs''@;'; put 'put ''K3l3bkZGcSx8THdQOHAjejNLRE9FWzs0cjlwYWEuTXZjRCt4fFc2UjlYSig7Z0RgeTNmbEdlPksibGgucl14WlZ+WDxfIjAoYVNSfks5UTU6bU1MMGVzNW1eJkRyKElFWj40Nis5JFtYIkc9RWApVytYR11TP1Jia3trQ0x3JHdfb3JqTihuMHVVRUM3b1t7cVBuVk10aTtwXmohWWldI3wxVHF5''@;'; put 'put ''NXwkaTJrRHx1V2g3NkwrQj1pXyhxWjw8NDpwXmE0P1tUI1Z2fks5UmI6I2xrRW9PMG0/d1olRjNjVSUhcyN3em9jfX1CL3JaQG8iMkxYInFBRFBAd01mWFEjc0pnQ3B9ZkNNZHkzPUNLWWJCZ2tTaH5rU0BpbC53UHF5OHZ0IXRrc0pWYHJSVis4dnF5Tk1jNlEvIm4sYEtbcmdTfCpCMTkiVyVi''@;'; put 'put ''TTFDKnE6ITdeWHA3TS93JCFJL2o8Sz4uTXdSVD5iak0iTUdqWyNybm4/dSMqViNaPWhHaFtOTDRwOlYsSCVVOCYmfT0le1g1MzpFdD09WDFGd3BWOkxNVHF1L2gqR15zWUs1fFJMbnhXSXc1V2JoZ3dlO2IuR3JPMGI7PVheL0R2Z3pbTUltb34mZDNJMnJORGNaK05la2tuY2Y1VnwjWX5yPGFl''@;'; put 'put ''XykzN29HOj9SPlE2RztFUyV2UDcqYjcvZkkqN1V7I2VIUlN3KDFPKzZaTjckbTN8fSE6OypXdik1YlEmX2BUZHEiWTFuWDUuRmFSUTNxPUs1ZTN1WjNlUFVzX09yN2s5fFFARyRPWk14KFl5PGVfMT0jWHp+LDxmIVQiZX1DMkomMl8pKSN+NDl2alZXRW80QntiLzh7a0pEN0R8ejpKfkdgODYi''@;'; put 'put ''YU8lWXRuaHlFaUs9QyxUV2t7YUU3ME4kS0ZSQipaPXBSXzFaOXIuZj92b0g/bV9UImxWcG9NPFo+WTdrYlthSDJJQFtAPFFndClIQEtdMnVbXjJjaSNxfiFTKit6ZU5bXSZMbjNzUiNWInxFaSh7akVrYSw5LjY9M1gqN20zQnQ7YzZrY0BPKnwqPmV+RihNS1p8NztiTHZSZHBpK0cxT1BCNyRb''@;'; put 'put ''cG1tbWpjYFZ+UE9Na0QwQW5zP3VVRXYqZjFSZEx1NygmT2RyUVIqUltmdzMzaG95RT5+ck1NKjtaU15HcDVmaixVUTJdOjk3fXVaUS4+eF11LlBDKz9wLzJqaH4uNXNXYkpjJmhrZngkZnU3WktKR0I7cHdKQTF1MkVGLFE8S3Z2JnhiZjA/YnB+WlV8RjQ2c1kzUz4/PyFBNGVFb1RkdUl9Yylm''@;'; put 'put ''TDU6fjV0dVNlakp5ZExnM1tZTG5KVmBJMW0zZiNAbzNMPFs/VFBTSiNkSG0zQSwhZTI6VlM2N0Z6WFZnV0dmO2FPVV8vUCJLOSxtVE5WRlskOT9ofFdka0VvcHRaKFU0TDh4LH5mOllpbVIrcD5ddEI1OVVTb19GSTRIeFAzVl0vKDVLfkk2fEZ4YiJqJFR4I1h1fUxAKCpKJjQwXXd1ZEd2dmtw''@;'; put 'put ''Qk5ySChHZGc1Vil7cyJQNTFCREdodGwvOGNHfGVnUCQ9Wjg2JHFVPSZ2N0IoLEROMTc/IWFpa3xJTVczYF9IOThkPW01NkJZclt3fVUuZFY7YTg5PWc6WG5ITmI3NntNK3ZPXnlIS1dSXiVyOkk7Km14d1IrXT81Q1t+bD4kZ2FNJTxHcS5+QGBZVk5TbD41Tj41aTR3KWI6TzRQayY7U319fUpD''@;'; put 'put ''OnFsVW1AaHM7P0llPCpjSkpHVmFvYXNIdCZiUDplWHhLd3Y8Q1JJWGhNZ0syeF88VnA3UGtWbjlfJktPWCxsTjE8X1hNXmErfSxwOE1wZHpNJFZyNE9TV0RZT1VZRkUrWFNTZVs1SkRGazFielROcHVUIyx8byxkVDU/eUxvMWAxNzlIdmJYLyF2V2tlM3ZoQ2NVJGhxekpeISR2NT5bJCFgcitU''@;'; put 'put ''KUVDMFJWSFchWjBhUnpLVygodGk2eWJPO2djbk1oOWQyellNRWsrQmhiRn48b0NhRVFXYFpuS2tGXzI8PitNPyg2dHc4WlEwTU0/T1AsbnE5cFU1I3NYWGRCekcmPFY/ZEdYUzBDK1NMYFRXYENUe2ZjSGIiYXYrI35gJD0re3hIPFEvMlo8fXpCdzElW1FaPlZxMWsuYy8hUE48TFJ1Y2VTKF5u''@;'; put 'put ''TGliP1Y9ZjRGMjMlUmA+dTpZSlplQFpRUUBdcEdeX0g1eGt+KG52ezc0WF88azI9PkBraTgrTTppai4rbFVZXTM8eFpXM0JKTy5LRmo6OHchPTEhcFRrRmZvcGtNIUJ2RG5oVylsKklhKCE3L0pSMngkPTZSblRRYnhSJGkuKVgma0hAdF4ha3QuMT9TI3IlcUk0clpsYyJoRDEvaUx4e2tHKiFR''@;'; put 'put ''ImRNPm5sW2hdJG46W1N9b1A1PiwiWldyOSMzVXFKdVU5N2RVJk00SEMuOGpOPEUrMjdFM2ZlPWBsKGJQQlUsezI5YUlLdyg4R1ovZGcrUUEmKyl1JSNkPjIqZk0jeSI3LzxvJWorNWYvemRqfCExLFRpK0N0WDRXK0Jlc3UwUkR4RUU+SW9TW0RkPEpZKCZtZEw/N1V1VU4mJDxlalg5WUM6fHlH''@;'; put 'put ''KGZgO0leLD9oJVoqczVkL0BpbjxQdClqYVJ0PkdQcVFGblUha0p1M0dTXXUqeGxeX2dZUnAke0JidCgyQSkjMmdnWShtSURhWiFMcVskdiEhPTN3Ml4xI2thbjdFdVckTz5jSTlYIzR9ZSI5bipLSn0xVEY8SzdtYXtxcHkvM11UKEhgfjFEcXs+YEIuJS48QFQ7fjMvbGkkR0wobS88cE9sVmU0''@;'; put 'put ''RUZkMClAfjQ6SjYhRWhkNVt8OyUrWjxEMkAjIzA3QXVhb0dIbXtEMz1BVVVFRH50VEYua1I4MzxGN29hKjBiO2c7PnE4NFMwa2YsMFAqJCl5Lz5pXk4jXjwkPlUrdSFIM196TCpTNWxyJGg8KWtZTjkiZFdybW5MVk4qe29NViNtV3QxQEhyWjlfVkcwZzFbMmJ5WUtJYmwjVHB2Q0c5P203VWVR''@;'; put 'put ''JDZJOix6WEp+RSNbZDx0RSRrUSp7JVFaaXcyLj9kd3U6L0xYQjBgeGckUSkvSlVtRFlXV3hZY2xrNHFdZHkzaTEmMVsjREpKaXxWR2Q7fCZqTjt1d0t9ZTdgbUU7VTw/IyNfPCQ5KGwjKiVeSXReeWwkLnd5PFBqXjxkbl5+SjtYYTg2LyhLKlN0R1hUX0VQekFPZlU7K0FqcSo0TSl0fDNNTUw6''@;'; put 'put ''fDl+OT4oYzN2MSF2Q187dH01SmY4NUZQOD8mam5eYkpVNyNrJXx0RSt2cjRIaTNzVkJYIzF4IjlMM3lRP3c3P0h8WihwWkwybTZGMTksX1ljP25jWF9QdihUSk52cVNaYE5HI2wifFNNJGpwN1drc19mUntIVTxCIjM6LHJVMzpiKihyeUxGLn1mWF5MQHE1c1g6cD5UPXNnWkdiV2ZqdmRvdnZY''@;'; put 'put ''WDFnVmlEUX5ZKnleank1NzptTElvflUkQ3lHdnQyQDNaQ0lwV2hZRTozNEB0XXhgKHAyO1c0flQ0VSlYLyozK2I9bjhZU0clfSp5JXQ1aS9UMVhhXztnLzNQVCZmZ0o1d0Q5aGoxRX0xTXBCJS9teTJYcD9DZy8jVnhtcGRIYiI0UjVqZCwwNXdWb20jX193PylBWzhBW1BNYSM9fUkuTzt9RHAv''@;'; put 'put ''cilgIywiflpSeCMwJSttXWV5SEN0IS8zP2p8ZWElN3MpSDFYRFVwK1ZfVlc+d1BFVFFKJDd5V05RQXV3WVMoRz1NNWZRTzZeZ2pJOXNTW3k4bXhpSWFfRT1VWEEqS25ROT1YKGMpXjNBeEdARGp1T3E+fFt9Z3MqQCJRbXA1YSg+SXFDcChtNi9+bWxhV0s8LlhqPWYmIiNSbExhdXdkdlNEfT5v''@;'; put 'put ''dGB5VlJmQzhJa3JDVXlaWSRwaHh7Mz8uaUdNYXpFfV9weVo4Om5LcihuRm9iW2tIJH47bCF8b2hZUnV3NHdaLDJOeD41fjBwfSt5Z28zMDRoNlhWTmB2d2I3ZjFuX21nWnE3UHcyaE5rQFVnakclVj8lTG1EelFbUVJIVDVwU3JSMyp7LnZrdTwmLDw7Nl01PntnfVQrXT9NWTl+Q1liT0VsV0A3''@;'; put 'put ''I1d3V1FKMyZpJTlaSTEhNX5SRXl0QzR6TjVOdjtsckE0YUpvZTtFSEJJQzxqMyF+YnFoWXI4P3xpYVIvcDJlcEdBTGZsSSNrYjJRR119VXlEdFg2cjVMOk9yQSJMUD4oOl5JZEQpW3E2aG91ITckaF58SzpxYWhtNXFzUWUvJihnJT42SDFfOmtFOTtrfVU1XztDeXR8XTAzRiMxbGhZS1dMd3dB''@;'; put 'put ''eG5afmxTSzQ4I3pmaCxadE4rdFFIO1YoYTxKIzpPSDN4SlRgTG5GVTJLVkEuQUhLcjo2cVl2JkNWejxbUUQpRHd0R3xqNFN8PWhgUyM9UiIla1M9TmExY1BpdHU6OFRoO3VjZywlITE5PiFpLlM8Rl1HdW1XP0M7fjw9U09ZXUNpc2kke11FNVcueSp6RFhiSS86IyFwJFU9Sm0vc31GazYlWVFy''@;'; put 'put ''fUZ0ZCY3K3lmaTJkKGlmeXllXltpXWwhIzxffD86YVR+Ykh6fEA2TkQzWF5ZVDRufno4aysxdDMjUlJ8ejd4aHlMOW1QTipMIzVZUzRsVldVUiJDNlMwK0dwb1NIQ1R2ZjVjLztrbFpramVpKmE/eGQpOU9vdSs2dWdeWDBTfHI/Sj5HJSZOQzBoRlNAbDh9andgcXw/OHIyWFtRZmdbbGB6NWEy''@;'; put 'put ''IjJIP3NiPFV2bCMxYHMzcjw+SlpNM1EiJisiP1VBamxAZztwL0k9TzQ7a1IzOnhNT0suTCx0KXF1Uk83fSNsKjZlbzFwVjRUVzIxRHdzWkFEciVtbilAbDhQfCtMRUVOUS9QZHA+LDlIOUJPZ10mVXZVMDBCSzxPbit1c2Ypc3tqdG9vPlVyI3t2eFc2XlhkTjpFeGdsez8jc0ojbS9ETkRIT2BH''@;'; put 'put ''YSQyKVp9JWQmeW4pPGE7TUhVfFJ+RCVXPT1PM2lWbiVeWGtRdDRIPXorYnc1O3xgSE00Vk99IjBJU0FZX19Kd1RzdTVpLzVkJUd9e35qIjNkTzJDPndVbnJ8JWtEQFtyP0oxOiM5S11RSTFGdjs+dDpYMjg3RlJfcn09b2dEJE4qSGYyWi4zYmM8NExLRFdIMEAkfl5NaWJVUUwzUzQqYm1NRU9I''@;'; put 'put ''ZmY4NyM3PCRNLy4sLml0MHBKYD89bV5rP0h0U1VTWTYqJmZQfCVfWGg5O0peRENATW9SeWdkRnhrY0ZXcW9SVHxeQ251ZH5hRykyNjNKfU1semdaRUhQIi9iZ1tERHB8WSl7Tnhtei8sPUNAQitMWnF9OlZLJnZWPlJla0xWdTJ3RUQ5VlhyeSZgMXFIPiNCXl09I29MRGIydG4rQjwoYVZASFQk''@;'; put 'put ''bVZjNEoqcWFXSGU2UmNLYzNqaUxMKWBWVTJmal48JD17UDAzbE1XMy8hLkFzTDpLeURoTzMuXlpoMjlDUDd6UFJHfX1PWnF1eHBOUGFQKjZldGlXIWgyQWRTcHdFOnN+S11OPVAvb0kuUTVZdDh+QX0/OVdFT3FAY0hJKUdOY2s1MiVTKEhlPnVoKDkyfUxOX24qWjsoaG52YUUzRip3TyFeazVP''@;'; put 'put ''UEp2L3R8R0p6S21JejQxTVhqJHhvd1tAcGUlL2N0aVEsb10sQmBPPVJIYzUjSXh5RWd3cllBTGxzdXEjcSpqKXRQUFZKNGhnSmhQSTByMExPfXEiMEglbSMhclJ9T0RaeVZ2UFV1djc+ajFtPXdLUFElZj1XM1s2aGQqRWZbKEdhalZESVpYZ0lhP0k8dVVaMHJmdkMjR3soVy9kT0xYZGYjMDBG''@;'; put 'put ''NGkkY15kNTl2JS9XZVlYcHFEYV1SSiptZk5be1d1ImZlWFc/IlpJamt9a1A1ZVpkcSNHP1lhMmZieE9nKWFXeEpxNk1wW1o/WytFMnJJMG5UbH1iOiouOllYOHYzaGJvUFgxWl1Obyl0LjVwNFJ3X3YpYCRoPHxHSjlaVnBRS2NNWClUcy5nPCYlVV5gZz13QzM+eHkqYlU+W3JjQ1ZpQGEqK3gh''@;'; put 'put ''SDoxcm13RyU5fTEmUSkrOCVOSClXcCRESFFwZExgKjY/MTlwIm5KcFBtdCJ8VFQlUSUoUTp1LlMudUFbQ1IzfkxTS301WmtBJGUzYTtgWDFle0A5JTE+M0RqRDJLSFg5PSJ3OERZMm10OjVjSCxoQE5lNCZWdGUzKWF1ZHtVfEcjImptQn5vdEd8LnUvLGFMbGddcnJqVCMkQiFoZFVMWl9LR1l0''@;'; put 'put ''MkVTWG8mdntILyUrWnJ1Tl5aRCZWOTM7PmpBaV9JfVtaIkAhIyVgIXs+Pk04flAsO05ENm10bTg5TVRTejFvMyg5SWRnTHtfPFRoMmBSNzB0YnJDU31wMHdwT1piTVd6Ui5aTG05LmhhaTkyfnEkWzZxOm9QV1MieSohQHJaQnRwalhqNzskWUxUb04pbUtlKXxtezpaL19bR2gvQy5XbSxTVm5r''@;'; put 'put ''UCxFLnUqQyliQUgpOi48MHlYNE1SNlhwWU5jPVUrNWEmWi52cCMuMiZ3TlZbPT0/PkNhLkFQVCRmMnArfUtmbDk6cD8pU1Z8PVBUSHwpaiU1VTcyP0RYZn4oWyI0ZGpmXWE/XS5GM3dacStnQm44YWFqSDh3SztJW28uW3JGKyJQSTtmU18yaiFGO1pFZlJpTnJHQTdLdTArTmJaTGs2KU04bSYy''@;'; put 'put ''KmpYPiFLPUhxI2UvTmRuSGZLfitYYkQhNyQsIXUrZzwlW2ZhSSp1fWtJRm0lI3JBZ0IuSTVYQG9oOFNtJGohY3w1ZHthNHxSP24/WWdFVC46eCtiajl5KlY4ZzM4Pj8uNmxCZ34xXWZTOTdoQSRZUTVUSWQpYi9NZ3R8Vyk3LkRZXyY4NitzKlpINyhheWRZQ0VuN0U5eUhCL0dxSlVmb3I+UFlO''@;'; put 'put ''cG5sKSFHJi5XLnNscGJLVi9HaC55OWwzKT4ybUljUSkqSTBSWDF7fVVBbTgjNXF6Wkhofj57YkR3RjBQTTMsdUZBMVgkT3U2Rlsxfjh5VFZuK0ptdS50aXBeTntSdXo0ODZYOiw7XiFrLHNodmhgI3JaNHlkQW1WQUp1YUh6fjdsK3hAUU90PXd6fiE7dXBKPFlecWp0VCMiWnBmTCMhbmxQPUlX''@;'; put 'put ''dEFHQSp3fHdmOnBsU29xfnk+VVBGJihZL1RnPnY1JlIlUmQzbV5XMiVpWVUoUUowV1B1bUNjO3ZeakNNfi9rOCNNIlkpKTtkfW0mWSY/JEhJSXA+RnZOdDAvfS8vV1FTQiVMSmNsZHtAQWd4cF95dEI9ZVcwRi55cnk0NGNwTHhfSTU+N2w4KnNzcTJaMHk3XjQrKTxkRmVaL189R2JpaE08RGhf''@;'; put 'put ''akFud1kzcWlvXShhJW9jSUo6fVQ2JXQ5eFpZT318TW4oUSp3eV9tZzZra1BkUGlOLl5PKGo3ZlAyQlBDTUlvQEtTMEBTdz5qTVVzfFk+N1tVSTs9cnIuT2ZbMitYX3czUU4/YUQvRWZnNkcyMnkjKjlJaEc4USZfWDtiZ3YrRk01ODNUSW1EX1RqLzkkTVQoeFdAYmFQbiRLQG9sXyFBYzV7KnJY''@;'; put 'put ''aEtkZWNaNnRiUUMqV00rW2hxdXRAMC80fU4wb3dqPk0jOmp6Q0c6MGczeng8ejowTn5YcW0wNFQhMFVmNTVyLFU+azpyIm53OyhmMjp5WHZ6ZDpjZC5dQG5oYmNWMyEiJTNiVkNERHtdKlhka2BsV1ZOMG1ZQ1hva0E9QUhKTj5Eck5AQD5OYWMqcU9sJWxleHhReFtMJSN1VmVNV2p6YWFZTjR1''@;'; put 'put ''NjQoVW50Z1Z3fHZFKyhnNEJnSlp4azRMSl1NVls2LCh5aTlWeV08RD1+S1pwPHFCaTUkO0RBcUNZI0hUPzBjPUJMVFg1UnJJOVZYV0V4cmp2ZWFIck1EMjBnPGxrKEsyN3EvIzNYWXg+IlpITFpDdC87IXpBIns/V2JxdnhPOlAoRE1hYVJCZiZ+NDpMVFVhNy84ISRHSGg/WFA7Uns/UCFBVF8m''@;'; put 'put ''Lkw+el9wKllOaXkrNFYlP2BROWE+dThvST44JCJsflgyTyFteCtIfjQjQkhmNlNFVjddOHhnM00lUzp5U0IpXV4uKG5CcXVlZU1LPUw/PjdfZyYlOzYkQFI9YkYpNjpac3BpS3IrMk5Hek5QZnMzfjZmb1ByQjFYVGRLTyphWDUxd1BQRClvfFlvQ1pmK30/PHNKZk55d3NOcnF5NWExZCk6Yn5v''@;'; put 'put ''XmxwXUVLUjU6b0JHZEV6KG9gc3BSdlQpYHw8YE9VVDI1OC5rOGA6a0JqXVBhcWtaZFB2YWwoL1RSTitSVDkzMnZ5eXxidnkoVXFYUiNUVEZORiJ0bX5FdGloJC80UypRMkpkVjd+L2B5ZippNmE/cklhREJNMiszPn55SSFQSzxHaFhCKz1JUDNFUylbW14reVMwIjBCSWA7NylRXSUiMlUifDQz''@;'; put 'put ''RSpaOnRVO2dXZndWWFlnVUpke11dQm9fTFVAZmx2YiVlSng9VEVVNHRNVzlyYiQudVQmfGMkYVkkWkdtOWdzVTtabl1ORywkc1UmNjtLdXE7N1lmeC52ejhJNl9KM0x7YSspIVVfPDxlWERhSjZ8SDFYT24qWFI+L2grSEheQTBMUiIlez5namFJdiQ+dFpkMk1FIU9wS017Qng4Vzk4RmBXKVk3''@;'; put 'put ''LzVlSX0uJipVb050RHdRdXZeQ0NdVyo8LipzZ2QjYVIpY2w2fThVUmpeN1RWM3tTd01PI2UwPWM4eUBNWHpEPGhfb2llaCFLPi4vNz5ha09AYWcwTE9nQG9pdUo0bH1LLjh0ZWkoYnh6NGMlfUY1O1lUKHREQzpnPjhmWiFYYWFyOk9xRyRPenFvcHlbd00xPyo9P1t5WlJCdzVfISs9JnZtd3xA''@;'; put 'put ''YSQmQDdbaHxnUlFNL0pnRH1GNEJIQS8sLHgvUkttJVR+PzF0a0lda2ssMy4jfTosK2JQVHNgeGpkPnRfWCN+X31mWiQlPFcmVys1XjtUMVR5Kz1eYCokPCohIVBWVnxqZTR1aG0wfC9OfEhpUUR4ZEl9Z1JNa1gmbEtneUxwJSh3UlZCcWZAeEZPNUV8dzIxTC5ZIU9UQSEvZUVzJlFGMkJbZm84''@;'; put 'put ''bndbLlhhNXJOZWNTRUVRO09ZdVFsRFA/UiQwMWspVyJeX0s5dXJuaGJLMiYqKlFSSSQreyZoanVuZFgibl1MYW83bz0reElNeG9FamZbWSNLQUBvSn1qM1J4eVhmPDJ0Qk5vMTA4Sz5iWVQwaFAqN14/TyxFe2M7U05SSU8mVGVFamZFIj5KTVJWLCZeSmZseEliZ3w/Q15pYFdEbWR3YWssPGVH''@;'; put 'put ''IlVrPGRHPDVKMCZJbWUhTWdqPz8rd2k9P1dXWDMwIldwellvbktzRU9rOC9uQnE6JFdXalc9MX1WRGQhcXo4Tjo/JjhtLEspLiNWV0YvPFU/ZCJpRTF+M3hGdTorVl9zJnBiMl17QzJ4X3p+a0l7eGxUL3oweTdTYC9RcUJ9OzZzPGdBO24hPkVSWUVRPDVTUG1SKEJsanI8QkNrPnkkMzpiYm52''@;'; put 'put ''cjd7YVoiUjpnNk4lOShXZW85a3UxPWlrUTI+Sk52X3R9K05fJjdQdEVhaCtwbEVpeWJlYXpDNF9nLEYuLHh8Ylp4enE6blczYiFLTGZ3RmFscjJGcUpEJS53dUspRmExXk8/SU18KXU8Pk5pWzpQOi5ucSokZWptbzAjLH0kdHU3X1AhIzsvfEc5YStxemBWXyYscVA7SmJeMDd2cTNSKFt5ImBC''@;'; put 'put ''KVEpaD9ncmRzfjZoKWZ1V14uXk9td2x0TXo+bV1hckEyR108PywuYmdsUU50QiZIUHBzb21UYyFifXc5REhZXSt2MFFVMy9ZMkh3L005fm5GaCVvWyo+c09fcHdyYT8/VTczdWRTLilUeTxHZjsxOjA8JVA5RjRoLEAoRCRZPkcyKWhaSmloLn5eZCtSYlsqLmY0JTh9RTNGeWJKJEJ9YXZYQT85''@;'; put 'put ''ZDxPbnhPYHt8fjdxTkF5L3pCOyxLWjZQMG9aVkVPQkRvKWhrX1lVeyRSXjBnJXFMbk0kVngzYUlYLkdxJSxGUHp9WWtsbzxuMF5mTDVsRTZobEVYQEArSTA3dV9hPDsxL2opWHR+fklsVE4+UC5CV2piMV04WE14Vl0wRGUwJXE6VmN2RlBIZDZYJHE0e096I1BAWzl2cDcrOzsjMj5mRDVucjBF''@;'; put 'put ''amYyZDxYKXY1ZE1NWXlwbm1SL1BkY0wmfTBvZiRFY3VeYypvSkBxWHowckpWKWkzIU9jQ293cCNXZ1IuJFM2aH1WZjshVWRMT19UQXBCUTtaU25dYCk7c3Q3PSNSZzhxIn0iXzJ9eDxSR0xWYjUwSCFKSSlDckMrdEZBVjliVF4kWSZOMn19bVBvV3lWUGIhbiVlRiNzL2A/US4xWmZZSzB1Xmt9''@;'; put 'put ''V19FJXVVfT8uQFRCeis6Ky9FTCJtJGt6UClkUmV9OVRESzIxSURwRFVjJkR8Ii9CTk05RVRCeXA1fV1gYCU1PSJ5fXxEbFQ8fSt+Llc/Q19mZHU7Km4xMFgiezg3eEw3YFJmZTJoY19KeSZiZ1YqVj51Q0NiKDlsNDVBfWFea11UK1dpNSgqLzJ5OCMhK19AMHdCdFoyZ1pHQHkvRSJTUTVQalJU''@;'; put 'put ''dT5uKDklazliR0lHdFt7NTJsYHkzXUAkXmxqdjZJayspb0BYYHJpbTdOZGowZDMzdHR2VFhCWUpdVlZ2ZihveG46MC4kVClxRFJ8aVF5bUcjNmFwZFkveD1TXlguX2UicXJaazRfNn4ldClQP1drX1M2TT17WWRROmRHSVglSUNSTDN2ak9mRGJiWSVqM29ZOnB0a0hzPz5oLz8wclM6dGlONEJg''@;'; put 'put ''bUt8N2ZGVUtJPk1NRSRiQkljJHwoRl9jXi8xWCROOzFQWD9nQz5vIXR2VVkrfFFiKntwQl5RfGlIcnlKWSRBRTljWWM2JjNZdVpEOGBYVmFHO1lzKEswdHxSU2JgKlAiaiZvez83ZXl6MD1QcV14NWIsMi5KZXtpOHNVWipZdnJ0aXN4fVpneXxSRWpAKVAvaiNJfm1DP1hTSi8hazN1MDRFUTp2''@;'; put 'put ''QkMsPCJEV300eS83cV5hUSJ5QnVwVHFobTJ9UnBUSUsubX1FWStxeS5mVTJHQkAqUUd8cWMyNCMwPUJVMlUoUnY5O1l3VVV3PVVwa2hbNk4xND5wSXYhaC5FTi5bKEpHfSMiUUtCblUlc01qbD5gMHpdZVZ4ekFiNSordE80Z0AzNnZbbl8sSEkqNzlmWyN6UEIjMk92P3ZZLiswIkcwZ25EZyFe''@;'; put 'put ''ISt6e08lS1pTb0UjZl1fUUIiY1BxLEp3PVlEazI0YW94KjEvcUhdQDhATkdHeDNRPGorVG4yTFhaa0k0Y1lyVFlLRXdJKl9UMylFQ3g0O2l7eG9rNVRGWXhAcEI5RWBuWUk0NW8rY0glKkdEVnZYcyNkaGpDOS9GdXpJS1lwYn5XLExzX0BtYUhsR2p6cVFrcUd6XzpFMHRjaiVTTVd8dSEmJjNY''@;'; put 'put ''a1JXKV00V2ssSj42InpGZCk6YGhhUz9bZmNmUF0yTGpkNnRKK0RxPTt6T3B8e0gqdEMuYjBEVTpzKCZSW05oeHYyZmdSJVQxeTVeZTtvWThfe31gK3VOeVp9ZVl7aUBnN1h9aSU5dD02QHxbT0s2PnQkWUJzJWw5XzNzJWxkQHgsXWcsOjxUV2pebVdHWCtMbXl7QUdVOGBYfDFRVD5ISE8yZzxu''@;'; put 'put ''PW0wdGxoWm51P3BOS0lrSEUvPClzQykuP0ZgSy97V2p2bDV3PTl1Rk9TeC5UaVpeblZHOkcmJElFNUBCX1o2dCNQL3gmRClSWmdEaT1RbzF1Ljd1fTdQaik5KyN2dGxqNSEwejY3SE1ONSl2NCk6LHlGZ1gxalJsQ2hMYFV2MGhJMG1NPGtaWUs5bjNrWjQiJUFacSpgMCo1LEMybX19Kn5Tby48''@;'; put 'put ''JHxndFVZVn1ZfHxlWjQ7Ny5rbklFSC4jNjZ7cXp4ayV0SnIjbVZLWiwqaiVCd0tra1VZfDRwUXw1ZmNHcGs2dmUyWkorUVFuYkdUSGlkYygiUEI3UkolYm9VMWF0S0U0K3g9dnZVekk/N0EiREI7IjllKSNIZGtrY1IqYkRFQS5eZDNFMHlFaDdrKjtXQm5SXjxAVDM2VTVmP29RNklwMCR0XjMs''@;'; put 'put ''NFtdZ08wMjRgKj1BXW9HYWpUKUwlK09BQmwoJSY4bX5eUldlVzdwI3ZkVFZdfGFiP1B4WHM+ZW8xM2UibjFwJWxoemRqTF59Yk8jblVKJS5HejVsOjdwKSY3UUZ0e0RwX3MqLiY3c2BfR05zaGBZa3Qzfnd+a21UKkpKa051b3wuQFFBcjBAOWdrZSRrPT1PSFojTU0+dyhQMVBMJGZmeEcqRHUs''@;'; put 'put ''bD9USz18OXkvOHMxPntocXZqYk1bWl02fC8we090alsxK2NAc2BrWnchOz82OFFYIyZjZHA1KX5LP2VRU1BIaWUoR3poJUA3byV0X0A7Qm82cTJLaXkiVFpML25ZSSIlYS9ZQDBWPSpfd0BPe0tMZWRwJiEhZnlyaDZZbUdDQk0hUVclaFpvYEg3QnwqfVJJPWo/JmVROWR4NEY1b2d2flRHZ3A/''@;'; put 'put ''W0cyJl90VzkmKDlZaDJfO3tVfHQ/SEtvN0FnKVgvck95Y1tiWUxhcnh0Pyp+c3UlPHg/YExYQGYyfj9bMjBCVXY6XmtYJGhGKUw+Pyl6ZipCQXUuTC8oby8hbmB6RWIoVSI6NGVicVBeU2xmJCIpaS5sPDFxW048aFowfFRNU2xDM2JFcFRPRHtXTV5aMHk0WEgubkhrSCFTRW1DWXRRV283e2BP''@;'; put 'put ''WDkqTz8qN19rQztpV3EiXmN8RHt0WlcoJTwiPXE6SSZMQGB2USlJJGUqPT5nOkpGJWYjMzVUfmgsMzk8JkdTeSlzNFlVRXEpMyFlZSZQam5LNlEzUGRXZ0s8Q2plNG9RQT8sQ2ZPcHRNL1daZk8iSChbY0JYUkNeTTolUz0mWHZeP2Y8ak4qZG5GKGN2SjQ6Mz9QO2l3a1MhL2Q6JUg4cjN3bHtM''@;'; put 'put ''a2VieEg9ZmNCbDxzUltPSlYxZixYPXoyYG1SezZ1Z3s8fF80dyx0Km0rZkwseDJvI1R9ODxdSiFZPkMhJDVmTkdRM1dxb3shdCZzMCg4SmlNZ2BwU2FBQndjPDZNdXo0SntYbi44WTNYQGdNSFdZcSJiVkhgeWk0YzEpIU91aEV3dlc1MktjdXVQYSNULjExb1EmXSVjdXF5dSluN2N1anNeOiM/''@;'; put 'put ''TWZUfV8wXXtaeykpRihzSD5TZilVQHk9TU1TTj5XR3NJWDtDTVNzenFJJnguLFpPTE55VV1TV0U3I3pFPGF0PERld3IsLDxydlpzLG59eX1INFVXI21VUlN1cm5MeXFtUWZlKSg4cVBLOVIuRCJMdiprdmJCaiUrfS5lXSZAXWtlVz89eHZsbmtBM0V+UH4+b1M1bHZXSHxVMHA8JlFNIWUyRiZD''@;'; put 'put ''QlJkIk4rU1d3MCYrZ0FkRC5LIn5PUnJEb1V6b058WjY4Jk5WNj1gIXElK18lcE57YyZPMEddMlI5Y2RmTEFCPzQwNjdEJk4sbUdmI2JyK0dqcH1uZkt6QThsSnhNN1F1LldqLHttSi4wSn52cVBne1VbKykkJj8kPmx+aHA+PHBoZTx7Z2J9Kix+N2BXeElgcUJpTWtCWSpJdFEjVV1qOklCU1Ru''@;'; put 'put ''fWxJQmozMF86Ki5aeGlnKDxyUjJNUF93eks6OStaPldpNkpMLm1JdUJLeXQhQENZM2VUS1pNLnJ8cUMvKHkpZ0UhK21yUnxBRDo1eERTKmdtSHw0WDxiMWs8VnpqakE6SGRhVCZMJUR5ITIoOjB4UGROPjxkPGVhYHFHUiRJTzhCOT5wckVnP20vM0lqV0h0ZTxJd2xDfT1jYXhCKHd+W3Izajo2''@;'; put 'put ''eUI+TCp0fF5pJTVsWTM/cj5qMCI0cl1tRyJ9QkU1enFPbTN4bXpNe1FqKjtlR3ZtU0hCIiRxcjZ9WG9CfFk7WTl5Il1RNUZFbDU/MXV3Xj0hQWRTXlo3UENgWGxQbmd8NjdPfVZifGMuKDA1KmUrPEVOT3NAN3ApKDxRMzs+KnVJfjpEPW9EWW1YZ1ltPEQxVTBiIWEkLj9YcW99QCZzRlFdckJv''@;'; put 'put ''Wnkjcz57VGs0eXIuMD9tQEx3ODsyUmopeGRBaiNfNi4jYzZCXzckOEQ1In1gZWZnSy9kJXU/bWNuRnJ2VXdURTFwbH5YRiFfcTY5cjR1PjFqRXApUlU6LlhSbjs0Uj85QDNyNzJedDBCa18+KW02UixIIyw5RDtGMy9gJmVWJj52RCxpbWpaU1QyKWVdMjtXR1BCT0x1clIjMiIuI1t8VTY3YDZ9''@;'; put 'put ''V0pVKkp2fVkqKmtoTFlxRkIhN3osSk8yWGVFSWIlTix8ZXRpRDx3IkwwIVt1ciIwMDV2ZXJsRyhCIUZNMXZeMXkxbzR8LGgyWDxgIzdycm9ydWA9OU13QkcrYjFtMFIkKDUqeHRfOVA/WGVQJHQ5XmtgZEU7RXJePkloSDtnUE9uUkRVN3JXYmQhZmcsQylGRTRZPmkyaF9aT0IyWXtNN1UuJUAq''@;'; put 'put ''dzI1KztWIy4+bDZFNFM1ZG9kaixOXzN9d3MkKGZ7STk9RSledklQQipFW3o2ayxAYXtFZXRqJjZpaFNgWHJHVS45RVtmNHBUQGBeRmxxTDgoZkgwPGQiQ3lnaT1VRm1gQzRSSTg3O3M+d25odUEydnFXKkRnSUl6d0F3Zz96JX50cyk3TDcyNlNIUUUofE9JfEZvRCs7XlBfak0oc2gkblZAKCgs''@;'; put 'put ''WEtSNzFMQld1QEdqbXBuRX1uOWZ8Pml9fDY3TG5iNEQ2I2M7bk9HVTs6VHlfOmpDYjw2NiorNX1iSWB4MVVrKl9JJkxyeXY3XkdFcyk6VDpsMTNqNSkpdFQzKVEzbWchVzYvZVNRdzUsfUo8KjlyIyM/b0hvK1hyK0BKW0tmbDI5P0VYWV8wRF0xLHJ+aDlzb044dEZ5NVVvXWhHOlN6bjB4dnhW''@;'; put 'put ''W3MqTiQhZjFDVGAyYypRKC40Unt1R3dqRDVxdSM4PHVqT1pAenMkWCxVKTBbMUEuWmZ8YmwqcENZXS5sLjxmZz18TFImdFE5KGBjUWQlX04lfTg5RFhaTXdAMyZ+KFMjcSx5bE9zdGg2ZzVLNjlCY3lUZDkqNH0vQFJfOWchSzhwOHkjZ3AzRWRuN2ppKyp+dWhfJDhgcU9aOD9qNndnLlAhbzdy''@;'; put 'put ''QmhUXix7eFJ+JUpuKXdBSy8rSlh7K2V5ZW8rQU5iblRPWFY9VVBXckNoNXc0OyRdLGVwcU1qQiJST0htRypCPE08Xi5dbjt7azhwfmY0WDM1RCJbbkRfTCFHNkNLW3F2ZTJBazYySzRiQC4+XXFwW24odCRfVStxNTRsZVdeflVFWmk/d2Y9VlkwJHNfe3M4MEtkSDksdSE1PDgjXXw9XSs1SUYm''@;'; put 'put ''OiZZOHtRfEJsQyttN206Qy8iX0RYVUlKV0tlMz1fTkY1RjliWDY6Zl9uWVpOXzomKGZ3Z2RXMk9yLyV0Oj5+UUovSl8kVEEpV2EsNGpkXjQmPzZ5bU1mWkpnI2xka2tqOnxjPW5VV31BQHpJXzh7SXBMejFUQ2U1PyFMY3Yye31Fd10ycmR6P356QCFQLmlpdjxKe2xCJGBANXpkbnM7RH17I3td''@;'; put 'put ''QzNrWUdmQzFyalM5ajElV0ouMWNFIlg5N294SmtTUExPYEB6PyVqQHIjZUYkaFVRPSIuTFQrdFllcj9KSClDMkEzPXBXIXdMNng2dHZ+cTBMN195IXR+VVtjNz5CSWZNPnBJW1FMIU19VitpNipNcGIrL3tpW0A7fC58UD4qZ0xOUGlFIktnQSUqR3Q1Qn1yMUUwbXExbFkyQzE8bXVnNWUqKFdF''@;'; put 'put ''YDB2OFJteilmTmNDYGhNQkBeJWNwJSgwPTZvUlZgUk9vSU11WygvMnEyd1VeUDJ8NnhjKXZIP2g6ejAsYVkzan1fLEJyYnBKTyJhL1d4fjV6SFR9ZE1pW3t5b3FAeHBnXTphfGVWdytFSn4xVlhLSyJhNT50czVjVVlUc1Ezdi8lMipkKXtPdixILElmbnYsb3tYbyRPVUV1X156PE1JVkA4Ik5Y''@;'; put 'put ''V0NzPS8wVTFiTDQ7PyNvJG5pO0E5eXk8NmZ4UTw6TmpJZGg9PFBrSixPJFhTa1hKWyJWJnthIztTOUxJVGoyOWB8KTU+R1B+PWBHY0FoTUw6O3A7PnlyOzckVSg1KTM7SUlaN0NCaTZncnpSYT49IztBeUVWQjVPVj5LTHV6aUJxVStWKldCfjFHUE5vOXo8NDJtVH1TO0NDYEAwTD46QHoleUc2''@;'; put 'put ''VzsuXS48TGROISl9aXVCVlc0aSRycGxnXXM5MjFxYDk/OCljRWZaXloyJk4pVkEidXtydTNjN0U2ciEvOiRZTlQ4Tjw+RU1FKXZGR0khPWYuNCE1JUx8eEEySXc1bHBOP1B5OV5Waz1rOW9ubT1sTFBAY0BHRUZyJFdOY08wdy9KeTppQ0tGUmtdIWFoKik5ISpTVltQOnhMUiIxZSNCSkFMdHQ2''@;'; put 'put ''O25bU007KWd2SjNuUzU/WShKYkhQLkIsTldte08jWzg4MStaKUU2dExZZEdoR1AvLHpVMT1HPkd2SXV5YDRdb08oezhKSzh0Szw0YUtgISwkPURARlJtQnw0K1hRQXwsMyo+bGA5YXRuOUM9aTh8M2woVSFMK2pDb0s4UXFddFRLTmNpQGFAPysvJGguPnhweGFzckZxfGNJUjEhUlM+IlAjWzwv''@;'; put 'put ''bW1wQmhNaipoV345MmFqQ0RjUk9KMTx0V0shdWBveDZzMigwTWlHMjJkSkhHY0AsOSV6T0xUVipmPG4oUnNuc0VdRlI0UGRvMTlpeiU9eE4/KWZzLC9kNlsmSDZle19TVChnREFye2h1KzpjSHB3Z09lK18rK3Z1YnNWRWNQTHlZfiZHVytGRX1Pd00uMHxoPmd9YGhvWXptc3UoclorbyEwdVE0''@;'; put 'put ''TiFOSVBYOlswW0o9Qy5FSXtZKW03aFF0WltCXmJ4MVheTkhWPT9vdnR1QyUhfjBNLFQrMn5+ay5ZfVl5XzgxVU58Q0A0R2ZReHxNM2JAWT83fmAyOWl2JSo0Pz9raEBqLE5HJmVxWWdhZiVbKT88PFFhZUUpP1t2dmdLWnJLUVUsYFExUHAka1BUPmBKanRSPl5meVppR1lFQXQsTjZ4TVsuOFB1''@;'; put 'put ''VWZnT1Q3VU5pQXlpPD4vJmxqdWhAd1thTkxjfnwmRWNuVntMXlFxTEBGfUUkeDA3diFBJFFIJkBmXVEkcTF6flEwcVloS15GUypqRXIyO0MyZS9VMik8akUhL2RyU3peTmJKNCxIcFVkeGgvPit2VF1qbl96YkE5TXc/V0RQZXRuVip1KFhVRF95eCszXXJbZFRXOGdlKWk5Z1EuNVA5YU0+I0pJ''@;'; put 'put ''N2FyYzRMQEF7InQuL3p9bjlCSjtqbGZCbCw2UUhYJV12XllLSlQ8O1B7ZH0jLzZNI2Q2X2FdSmtZb091UnhpSTdzZih2cz0iRmt5ODNdM0xpPEJwfVpJM2NKeHxWVkk2KlUvWzU2STl4d057ZV9jLkFZIlZIKVdRfEJdLH08SUJ4fjAxcHkiXX13JkJzaFhOeTRlMzdlUWhyQ2c2R0smRi5LZT98''@;'; put 'put ''NyVaKypwb0U8UHRvWUlOMlg8PTxCekpXYDFsL2JMVzQrdUFYPk1kSWY7P24wWldHWXZnXnUjdmA/d0w0aF5zLGF4KFZaOlhdU3dsJl15P0R9Q3FoLGRsdS5hLy9GYlp0KWlLdy4kSERee0lfLlA9MzVYbm9kVGhGKEsxM0opa1Q/V0hISzJrYWh+bUZ0ZHZWSTc9JH5JKDVRW350XVtHQCUyQ0ou''@;'; put 'put ''KjZgWj5kb2U5LF1jPl14en1tLG8+P3AzPytnJkx0VC4vfj09ViF3MntvckRqVGJLMHl+YkxVKkd9ZGJqRFp2NDVLTFVeYmFrQWUwZyJyQFY5ZFBHIytQSkQ1ZG9gKFtvPkQrcUs0d0tsVClhTUovZ2Y1RXNdV0ghI2RZeSYkYnspQTo4c1lFOjp0T34rWFllKD9PR1QoVVB8amV8Y1FRdyk1bl15''@;'; put 'put ''dU93IVRhfXgjTGdDUVM1IW1tQCRNMiJGck1xbyxUbSRrdFE7d2RzU1J1MF9qbF0hbHVSUmVHcEhSYzlyNWFfMyleNmQ9bm9pPVZ4UiR2Vjg9RmBrZD49ZnJbXWI0O0BEZSs8Pi8rcGRALnlXM1lfb2U8ODB8TEN9OWR3K1tCVHxtRHtCYz97e3NSSE1SLkJMSHAmbWZKbiZFLiZHeiRpdXJQc3R+''@;'; put 'put ''WyZ4WnR5dj1Zcy5aeG1qWG8rcWJMT3dzQ2Z1SWE8KHpqe2JaY2FOcC5KZzgmVmwiQ0E0Ozk2R1k1ZiQseHRmJVpjQCU6JFg4JiQ5Y3wlMlpPTWlTJWkrb1l4MyI0XlZiLytyNEh6fHNmZVF1ZW1YVUVrfWczZXdkaUMrS0JpK1d4bUhmUmhlIiZUN1Ndb3w0cFQhQjdXdTtDdj5XdmZ0dkA6UH1m''@;'; put 'put ''VGN5aCJUV0dGamBeKXk4VXlxblpKUF9lbyhReW43JDY7JCshP2Vybk55TVVgJV45OyRgL1MoN2tlOkx8P0MiUnQpIjM6YGh3PEVYOHpjc19lP0VpKGNwOWMlU1t6akVZeHl8MEx1IThwNT50cDMiY1pVWWVmMnBiMSpdNCpCKUU1c09SKUNfTElNSHI/d0hmbXp5fFNePnNeQFBfSWFtelo7NW0j''@;'; put 'put ''bnRfMSR1bFh1WnoodGYre0lJOHFfbzMuSlhbJkVXdWVNel9nb0c8QEVRNWplRixfaSNnWHkoNjUxdCNrK0JTNWtkI2o7W3ZuITBVQyZTMFJVNDU8OWBnTWxHdVpEcWMyKTQ5KFtRPTNXRmgrdGl0Zn53fltwP3dQa1M9N0hdX09CUldEdyFGWERhfW1ac1RdfU8xNnZjZiFULCwhZXwlMGhgWEkq''@;'; put 'put ''KXhiN01saFNFOHVGLDQjOEE6aU07YltXbEs9QHA2WXJ9XUpNW01iOThOMmVbdUJEQUhUPFZhaEp9Nyt6dFdQcCloZGguLFRta0ROS3JVIjp4JEpxYE1daXVAYFtPMnVMLHhERDFrJktMYyg9LkJEZFdVTFMuJW5UZng7WntwO31KeCFZbSI1TnBEKFk+P2h4T1hvOExSMTdOZzVrI2kicSF4fmpZ''@;'; put 'put ''b2YlN191ImNweUs+aXQ9USo1dT1pc2RvX3I7eUhBUj1Jc192S0cuem0hbnNueVFbN3A2I3ZHYER1M0FBRm5nM1JoUG1tU2FHdyxEUGxqKztsI2NOSVEvdClnd0E9UEAuMH1xamAkam8iM1cuYmR6MVAjKEI5PVF6b0IoZzkkLl5wNS5bVXUofHplb0BiSy59Kk8kZnE5KVFhJmR9eEQrIS4jM09n''@;'; put 'put ''WnpUOGkhVkpfSTUqdSV3OzJ6VHIsbGxGIypvZ1piYS5iNGk1S0MoLF96UX4jL15NRV9dVldoOmwjcj8rNS5BPl81Iip8WDAwTXVgNSV8OT5TWWp4TyRXdjFmSn1DLDN0UHdsPS98YzxDSHxAPCMwem1WK3lBVk8+UHNPSDYsQU9qM0hRVUI/ayJXM1tRYF8vUD0/eTJAQX5hOEFwWDhZPVE6SFVO''@;'; put 'put ''QDwiYjNqNHVxbzdMLi5RNERLfH5sRU1ZNndiNG0xOjs3IkVNe111VmttSGNNfVlJOkYmTH5DXl4sYSswSW14bThWbVdWeD0zcUYzbS4qJUFFcElbMylgTE1IWEhoMWlFP2NHfXVdXyFXJH1jb2AudiwxbEVpb25PT0NxNW4xfj4+YCV3UD1ndD9kbF5uZX5xcEtCTChCPyVmfj52UHE/OFl5aUdI''@;'; put 'put ''eWRHaEJMKTBUKTxFQUVleHU0dC40U2NSY3EkJGsjL3Y1RkJhSlQ2Vy5HO2lpVTl7NCovLGQhKyEkOXooYkN0OHh7YDlSaUZ3M2k4NDJvKVpIQ1F3STY9OjF4aE9vZGd0RF5gMkIlMChUeSNpQlAqbE9SLHRCJltEdFlQcmApVHQvMD4pWTc0OkxqLG4zWHsqTi5JLjlLPkZoNHxlXWttZWxHNGNw''@;'; put 'put ''TDxzTzpJR0VILnplWHVkU2oxNT42SSw0SXc4OkJUWztPSUUxQnk5NUBuaUNDTSZ8NlIzd0hNbzUwS1g+ZTFCRFk4PiImQ1lxQ0IjI0N9RlQ0b0A4TDN0JUFKPFRBVXYhbztILjRxViVqZSFtbkp3YH1GMTg5OTJUKVBPUTxhUmUhNyE/TnBaWCE0Wz51MEwydSVDSSV6JWZSQDkqQU5zV1ZBeiMw''@;'; put 'put ''akoxJUNAZiE6NSYoXVltaUoxaU57e0dWUFRPJX0pRD1eTEB8cHolZDMoOnZ5fVJTVEEmIVpzSH4kZWdiIXpPc1AhZXRAOU9GbExCWT5oLHhRWis8TT1afFgxSzRoZlpuO3R5OTNJfk9NYD9EPll8SmNZRSlYYlJ7YmppRElobWoobW9Fe09dWWtkbkJaMUs6eENMTHJQQEV0Nz5YdDZ5ak1BZUN0''@;'; put 'put ''eF1adyJQUENCW199OHd5alN3VX5hQlFjNUcjXWhTdG1HYlQ2Sn5SUDU3UU9GXXImO2lZYGdybzIwWmlUI3xjdCIxZlcpQS5LPXB0WjRIdktNIjxHTnsqVHNFanElKG5pbFNOdyQwbWQ+WGszPTFNY15FWG04VCRdMz5YQCZVTW51MXU0Uik6VCFHJkV3S2FFKSJPZkI3MHZBQExMSFZTbGxTJHBe''@;'; put 'put ''Ri5pLDxyMD1uaTJdMz5hbHgqaTVzPFo/MildKG5vTV1IWWtLYjQ6cyNpKldkUXgwaWtqbSEuZT9Ecj59RVV4Lnx+ezJ7TWIlZHNSPkdeKmdoJTY5NzYvbVUmITVyOFAhWk5aWG8uLG5eSVU9T0RjPGhPT0JWMV5NbTBAeUMsWHswWSRNJVsxQlNsXVUucDROcno1IXJGZm5+XlBLbkpKYDg4MVg1''@;'; put 'put ''LHtsUDkhMmszU15qPEZPZExkYGJnK0JjKyx1Ong9fXJ6KUhITEkuNyxHX3hoSjhmVTQkSmlYTkVfNnNOZ2pKPHJGJGNiJXkwUWR9KFYuMWVjWT40bGozRVI+NnxEWy40WTFhOUtdTVNURG0vWUNQInhpdU5yTzY+JSV+X05KVlNJR2VVe20oSmFdKnpgITtpPlkrVGExMj8/UV5lZWlINE0hdi5k''@;'; put 'put ''VTdpdDt5UTJLdl43dURNbEcuUyZUfEx6aFhOZTF4MytrIV5QezAwMXc4ez1hbWwlUnFpTGcqQzx5UmM+OFR0Ri41aGZBQ2p3MTJDM3d6NWNhcDt5PmFoc2lMfHBlUi4vNW5WWUBCRDdbM1duQUVXcCZFRX01NStkLFNAQjEuSSZYND5Rd1tpekduUkN+RzY1NklyfUFyJSlbTmMufi52ajgwOGIz''@;'; put 'put ''Qz9HaFYyfiFPdF5bRnZyYGdWYGU1cTMjWUY9NH0pQ2R8OixwbkJpNXZufihLUDdgbE95SWAiS3tNeG00dyw+ZUlVV0ZMTyk4PmBWXXB7Jm4hJVE0JnkkYHVASz5NN0dhfGtuI3VWX1kvOVZwW29LUVVPMEZbITs9OjRbPERIJU0zWy90NCQ3VlQhY081XSx8NHxjWkB9KnZOWEVBVSxGdi9sVlJr''@;'; put 'put ''Z3dYcUxISVNbdHNNaGAxTDEvNFQ5K3BrWDI2MDopZWchJUFZRSUmdHN+STImaysqLlBIQk47S35KPF98PlM3JE9XP21XPH1TNSU8SndMLkptJHJUZ1dtJEw7Vyg4X3Fbbm5mRGwsXXZyZkppdzVaKy5rbilMOlZZSHhEM1trdisuXzFYR2RGLExoaDUrZXVDYlkoWWNkeEptR107b3BAejgyJk14''@;'; put 'put ''ejQ0PiZ7PywmPiZYfjVCYEs/T3tEZmxAdjk/by9VY09Ha1ZEKnBJdnBUQEorXSFhRXpoSTRNNGBqbVQ0TDA2WF1HNiJuYmVoTnFQUCVqO1t1QjRqVShEYUtbbkZ3c3RxcEAsa2prJmUhIVk3RUlHRXFTRjhbXVRtRnRXOVtbISpuQDhzamg6NXNVVzJ2WVpwS0xxOyJAWnxSSE9UekcjdFhtXVE9''@;'; put 'put ''P31AZFY+W3F4WEV3cG0uKHxxazshV1c1NChSaX0rRT0jWXw2Ym1LOkpVJGViT0dWbEdOWGdCcFcmeTlISUtVMX18Y0dPP3IvX28yQjhSJSszKj9ufV4+ZXZHfnNyXnEySSxqZjFOR0lhTy8vTjRFcDhYP21JdyZ8NUZpJDFfK2xQPitkSVhMaGp5RkkpQkBZeCt8a1h3WGIuIzZHOyNHYn09WSo2''@;'; put 'put ''eWNPJXl4aHRqNDZ3SGhDL0R5SDJWMnNbe1N3YGsvRSkhe1lbQkkvT11bZGM1WixTPFlIQk0+IUBKMnklJVJMej4qOiZAUDJ2RitoVlhoRnRdJH5HK1lMM3dZQ2o1YUIsdiRkL2RydmkwaztWS1JTVS8mKk1wOE8qNVY3Uy5WK2ZyRnx9ITY6d3YzK2VCJEdKVDo3IkkiU08yWTlINzNkaGM5VzBk''@;'; put 'put ''ZXc9aC9ydF9IKzduMUhhWTpgP20/QnpFbigjbF1LdjY8TGVmJCZFPG1eVzBBJHppcFh3c1hEQ3VuY1l+TVFzZU8vOlhbW1tyRGR8fiN8THZKM0B8P1BSO2FeQng7NnFpXylXUUZmc31zVkpGbFZ2cllWcl8qdUpSWTwjN2RtLl4yNSYyQFFwW0RgSWcwZUhWWChQMDlNVSNuRW0yPXosTj47W3ZQ''@;'; put 'put ''M3U4dEdRNGltOlE+e2tYXUxrZkgmcEMoaGkpZ3tLLy5mJXIsckh7aj9BdT05KSsiM3Fleyt7ZHgrZF85WnVPVTIpQkB4UHY/YCh4V108Myl+KXtkZlZySmh4XlMsczMzajA3QHZ0d1pTbnJLVFtrZDx+RmBHXXNHVnpnPWksanxuZmk4OnoyY1F6dz5EaVcscDYrZk9kOnJnKX4xSmJWVGhPPCpa''@;'; put 'put ''TUBraVtHJH00dHZ4fipuYHUybj5OPU9jNT5Va35EUHMuMVpdM0VAI3wrQEsoPFVSJUdsWl1sc3g9SmlGYzsmIm5OOFkiXkh4b2N+UGhwNVdiOD1wOEIsOj4+QjdtPGh2en09RD1ULHd+aENpTW5teG9zSW5iP3N+bzk5eTttRXJBbXVIR3E6eEA5Ik5ZRiJaUzEpWT4lOCFTWkFLODBSaSphbnNl''@;'; put 'put ''LkkqQXIwQmoxP0xKLCxDNH5pMnZLLjFGbSpwcllyP2ZSOl5MMTZ3citxSGd9bz4sSCVBPmswKlYqUCRmTH1+b0RPW3ozJWAzZiQpOUw0V1FjMWhjTXpOall9Lk1mR0pTMjJIJlQ9Sz59Y3Uva100UzZhRXd2L1UrRWZdcSteNH5yI3NIZkhFQT1KVWdRQ1YoQSJ0VW1oP2lySz81XS8rXV13I2d3''@;'; put 'put ''LkZJN0FHTCwlaTQ+R29pJTNGTltzMUI+PyRdJmtbXygkLG9bWihQeDt0Mm52RDE5dV5SeSQofWJmW0pme3U6TXo2R0gwMTg2TlM7VTwudUNvUWwpRTQlYDdTOF8/M201Xy4rP0MmUTspODY6InIsZGVvN3AwfixZLmdLaSgzV24rLntpWHhuSGlCWFhOdXtlNCs6ZD1Je1dPcV9YdXs8TmRbc1Rp''@;'; put 'put ''fWtnQ11dI0IyOERPdUxpIkIqaCRhfU1fVDJGYkh4ODI7cm1AYVQjLG0lQDAuMiQ5ZFVBRzZpMk9AJH0ub1FIfkEmUWNNQkplSVsvPmRQXXhtUmU7XT45KEZ6I28udCZvb0pCL2dGPiNxXldlaURfVXtXJSFYP0ttL09wL04pPlRHfTA1VGEwYFErQFMkKEBReDsqd0JWKHNAZi8kdjJOTmxrUVR6''@;'; put 'put ''RiN3fEVGQ29xOzRUVjdOTXxlfG1HTFUle3BmdWIvKSpadDl1Y2o1YFVtZXEzbTlvSj9STnk3PjZvNCpaVDM6SjFaNXtyUntwfnhkZl5RdXJ3YSw3YEM2Tzs+PXwsPmAlR0U+amQsc0x+Wk4kMVlWVDlsR3lpKCE5TD02UkoxfDBGYnhgPmQ0NTF0PjJTV14xakN4NGV3WXYxODlaPi9+dCV9UDtj''@;'; put 'put ''MC4+MnNBVEtrZF88Q098WT4jYElILjEpKTl5dFJpMDtQWHAvSVs1MHQiTTdmdm1BN3oqMithfCxqUzdPYjcoXyZdZDZabT0rVnJHcFhId3tkSjxddU1pcWpPZkNYWUB+OVNjW2p+Syg1NDklSF8sUWx5JWJ8OkNkNU9fJilvNUFAbDFUXXZRZnY/W24wO3I3M2xZQXNpYy9NRCopbVV3eEpuQils''@;'; put 'put ''Oy5MP31+NzptIXk3O3wmTz1sP2BseFImZ0cwcCs/YlYpIl1wI0NiZjpuN19dJmw9fng+NHc9Q09ja29ocEJaUUp+NXI+OEZnfW0/MVBqQ0RAeUZIX0ZUKTlpJnliZ2lbLzI7eyhDZSlZWisxMlZCJlhnKXo5M19VVHZ4MkZhIykoMm5vVjwmeEJaSnpEdkNmdShMKT9saUJWYjcmMV4wMEp7eT1b''@;'; put 'put ''TXY6JCJsfiphaXs0fUN3VmVLKUZsQnskfHhTNCMpfHNiLjRrWSsjOSV5KFpHeFdydTA0dEVUZXBOZ3RDV3YoU3tpeigrTzcwRyxTXz07IWNQMVpFJWs3bmZKZ14wemhwZHRpI0RRfEBnV0JVSHlrRnpJOCNKdE9iYXdET01qYUYsWH0kOUozek40LyovUGM7VEJVYmIkSztFTj1OVyI6JGpHdHN0''@;'; put 'put ''eyhdNjdnM1lVSDw9dUFoQ0l3dm1jPT4hNTZvPGJ4XTNVSmUvW0toe0lmV2dKd1Zec05hISNWWnI6ZjRNV24sZUp2RkVYfnZ3d31XMmd2e116MTclKVl2KWZxV1oqUix5dEwlPCw4OCxVXXI0XzBfWCpeJDp7fDBeWm9+MTNta1dTUUJbajV3KD93Mk5rJGd5YmdFLHZuKU5ARTQpdFlKRUJBP1Q9''@;'; put 'put ''PiRGcy8/MU5bSyg7bz8pel9NRi8kVWhQOG05WCtfYy9lQDE2JENzWTBvXyZJQ2osaD9SdkRnUT8le0MlN051YXpYZ1h6UzVvYzM1RCFYZjs4fkYxME1gTyo6OiFWJTltLntGJGdWJkxHclsuUk47N3RUQmBzNlVXbkZdK1ZNLHtwX2FKPlMwbzw3e2F1ZWdsMjdDZW9CPkRabkBMTUJ9P3dQaz5E''@;'; put 'put ''OHYmViF9KWhKSD91UEFmdlFUaFlfMXYrOXxtSXN9R2tXLnozN09sJS8hPGReOjxYNSpzI0A0bGQlIXNELlpJbVkze1IkWldTcjZPUmcsal0iIVYlNVBXKWd0NV81QU86RlsrIXFQUiE9clM2Oi5taDZOJEl9Kyk4MWpHcld3WEh+WyMvSjlAK0FhL1NGfldXRE0zXVRGTihRIShiQHZJfFZTOy92''@;'; put 'put ''b1Zfflh6K2REPDVZdnZNZT5eKUYsJUxXPzU5NH0rLiNgSzdZYHlQW3xeNmYwMGgyNUxmTTJbd3VmMUhRaF1maWQkO1E4NT1gNWZmSjRbNEgxcWM0dG4+NDE1VW5gam59IWB4SU5JdUs3JEErI3RVOXZhNDFlTHR3LHtpTnArZHBILzNATy50YkMqM3RhUmxmXUR7fSUqL0EuOiMlXSI5U3RjKCoo''@;'; put 'put ''PDhwO3l8STFAZThJc0JVTkR3UW5IYHE3QHhIXi5dYFltKzlMJXVRX1MlOlhyQzpUOSVaNDcyKVNwVltlRy84VTw4PE13e04jSUksZWVQRDBleUJpcVR8K2Ile2JndS8hLF9lNUJ6Mj1GVmVIdk9Lfm5hOlQ1RCF8U1ZJKlJyMWNHPCE4OltBLzg5VyJ8Mzp2eUVxfiN6ezVgLkF3ZnYyRipUemNJ''@;'; put 'put ''anF8SltZdX1CWjxUaWsrLCVuZ3tsTWojOlBmQCE7ZVFmNC84IT9iMlZnQ3JYa3U+Ul1qPzZ4Jn0wZlVecFN4WnoscFZQQzs+cUw9OUN+Q3piJmBqZThLRGI9aDtFLl1kP1JmajF7UHdISGtWU1V6Rmcmaj8hb1dNc3c7e0JjZH01fSM2ZGsqQm1zNiFxQH1MbFBvJHZDdS4sM35AbClwOWlePjQ6''@;'; put 'put ''Y2Y8MDx6OnhCKmRWck9wZHljKTUyR3Q3fH05d3I/PWI8RXNZSFJYZTdEIXRZNGgmWlU7WFBoYDZ6O004emA5NEQmSjoxbD5rPCEzbW9ZUyFWMi48W0t5YDM5SHV2ZCV4PEIscno4Ii5Ye1s6VUIqbykmJDl6OCN8SnB6cnxDPFAoUiRjZk1wTDthR1U7VWI5K2YvWTN4Q3VJT0wyM1oza01ZWy5p''@;'; put 'put ''KyJ6PyxkeG9rWzMzWD1mQj5MWCExQzlaUUEpQSxscVZCfDguMHJxUmBHZzVoelFdQ0Fed1dfWV9gMzxCO3orYzJ9VjAqWWJLPXxiVUgrSD4lWiVXP1YybllpenJobkNaaiFrQXFddWZuK3UzcCl7IVlHUVV4S2xvYk9OZSx0bjR7eVlyZGMyNn1QZSZFIjdgQmZFJTBUPTBec0Z8Y1tIZkhEY099''@;'; put 'put ''MT14Nn1rYGpYZm5IZkVMOWQwWk9sOChdMm02cU5aZjp8SEM6cTlhOk5sI2csY2ZoIyYsNl8jUi4pbF9paDJXPDI2KlR2ZCx3bVklQ3xRTEBeNkBTWVZgTyxNaS4zezBNR2NPWEB8ZTNYWHdYMTVoKFRPPX03YjNtRWVEb2wmU28ufF4yVCpjJFIwMTtnPmcuQ1tPS2Y+KHozYFYkKW56bkc8fEMh''@;'; put 'put ''Mjg9aztUQlM9LjZ7PSY5OG84VDZub0s1Q3E+NHI4VGo4I0lRL1RzYEpsVERtInc4T1huYEcrPGgvXT16U2JiP1cpbiNpaXdNJTIybiVpcVVlJn4zSmRkOll+Qls1Qmd2dkA6TUlATEkzUFJsbVZwSDFTWz5ufm46KDxuMDw3V3xuO1RzYmY0Kml3TElSQlsrclRAOiUpcHRiUVR+TD9AMz0vW3Fb''@;'; put 'put ''UCVqUWBbKmU4LCZnfldHY0FWYlV1Z3tbNS9ybV84X0B1P1o7KTB2KF00MUUla2ZgWWhhP0gzKSEldzxUIW5oPyQpaSpbUCxaNlZ0WXFEM0hZOH5vc1RofT9YWXtPOm9sd0RBZmZWZXZHLiR2YD8mSjRXREQvUVpDQ0Q1K0d8TChyemBGQ1c+ZkNhRVs1RVRnb2smQH5WRXZpU253ZjJ8czE3KGYw''@;'; put 'put ''UF5fPXovSDIvIk1AYEdfQDEvOHlbQS95UDBbRXM3L2NSeTBZaHpVS3BVXWJwR2NZT18uTXQ6fHNAMFBTV25gOD0iWF9mdyZ5eFdPQCVOJWZsfCt6VDtyaUB0Y0xbNzohSncwfC8rbXB2OGJlaCwxQ2ZMRj12YjUjN1RvLikkZ0x7O1REbUIreyVnYikyQUsqMiFuX1pHQjJGd1tUZUhFKDJla1pQ''@;'; put 'put ''XjBAfGtSbzYldVcsVXNtPXtWO09HVVh4UT0yb0dkb3ZOXTsxcU1Wdlg0b3tJKCQyfmphP2ZWeGMhTW1HJUducD42UDFETS9NSStubH4xbE4jdlt8fjtlM0Q8OlR+a0lVSUVTPTN6eTBlSGllayM2bjRJWEcycXlXKU1XXX47XmxHezFjSWJFPmgueG9uUFgzZWBANVcqZ3o8XU5bbndRMjRKWDxf''@;'; put 'put ''WTs7KiVPIzhlV04wTC89MG0wcC5jKEk7LjglY25kcHhgI1dPWGhHRTxRO35gIXhFRHJ9UWtqWm5+SDFzfktmXyEjOzlmL301OTttRWVedElCJTpjIT1gO1VKeGtJJlhyeXlQT0M6OUZ9a1lid0VUTzFlZj4zTSwuWiwraTAuIUlOMjlibWtfOHtiJDo1XlVMPTZqPmhhKGd2dCtiVGhkczx0YlRn''@;'; put 'put ''TDRIblZyfSVLOzQ/WExMSHIxcVZtdSluaSg3VzclPkp4YCpQZjJJW2hjai4zXW1nUlspWkJwRDdXLnVsTWgvZVB4VGQ9fE5LcWJtNTQwRU1ieE0rL2lDIUtyK15PPEhQRlIuLEZUJTpNK3pNPUlyUj9kSipUI3V2akp7Lmhkcy8vSXQpOT1IdXhHL1VFRHIwQ2R1cW1WW0B5ZS58PDY0KllBVkIj''@;'; put 'put ''VHRJLlM1YW9tKU9JRzExfVFaQ2dnRUE3dkVrQ2lbKGdLci5RXlImTSIhP3t+OUpleWh7fDc1NS5iImgrUD06eUVKNkh7QWRBbzRDKTduZCk5fSkvaWBWRzdtJFouZU5nYFgrOGVwMG8jdWxySmVLSk00PHcyeU8zMXlpLnlyfF9Wdj00SjJLeG9HdF12SE1XJUpHczxxcjMxZzU7Tz5lPj5GZl91''@;'; put 'put ''Rz5aPCRVX3U5YFE+bmNARk4hfDlVZjtVPDJwdDJ0Ki5bb2pzbEh8cGhoJEQzdndua2JUXj1aL21jbGY4NEc3PUNNMS9+S24vLmMoSSZeZTNCSDlie1ZEKjtreW8vaVJoQyFWaFhUa1Iwb1NJUG1CJHBpOjtqMWVkaUduQ2NkPTp4KGM3LzxRSzA1UGwmXj4oW2o/NUkkTEJoPWthdVZMWF58T1gm''@;'; put 'put ''K2lPVWFsaThWT2pXQDI9c3EoL1p5NTJDcjNvNDFRPFVzQTdpS0FObDI5N21MZXchK2c7TU1UKHxAQ3ckMXJLOzF5ejZAeTZCRlhTYD9qWl5KPVt+P19DTXc0S3N6N0hhYDpBSipwSUZKflg7VWQyfm1VYztjKTlyNWBRPnB3c2VDaURwc3ElSS49ZyM2RCFvTyp7MGd0eypkKlc7VD4xPlpmJj83''@;'; put 'put ''QFZnKiU1OVJ0cn1dKz86L21LNWg6Sz5ee3tXOS5tKmZ6W3YmNTo1W11vKDwwdTZlIiFrK2VuY0FjMCZAP0MyR0pFMVZ0ezxxP2dRdTA3RzpvbDksPGxMOnQpV1Y5P1ArS3J4e2wkcGNSai5QLy49N10weD12ZURdND5EQHVPN1dQLil6c2FEZUZsKipnM3BuRVM3dioqazUzIXtxNVpZIiYzQlU+''@;'; put 'put ''OzMqb2BLfnJ9Z116aDZHayM9bigmcVhIbG9QZ2M8MGZYNSZyLyNHZn5NOC8zXzZuQmZzO0dzbiElaUd+KU5PYDJla3hPUlVQRTM2cDtxKGhEUURxbSpHZFBiVV0wU31+dVBNYjFGZUVJeE9HPSNoJSw3cSwzWjJfUnJXa1ZsUThxXjZxVV1bKiRLdkEhNjJjb2M3NTVAMnBvckBKSHU9SX1PXTV7''@;'; put 'put ''bEI2WSE3PUJDKCglKjl8bWNLNmFvQ1t6bntAWWJpbE0uXVAvPjk6P3ZkLG83bWFUSC9meSMobEYyX180dTs0SWNjRklBR2VqPVkqY25PVixkJGFhQC5JWkV7eUg4YFNTPzR+PVVhTyVncWorKVZrY3Joa1t6STFrTH1QU3s5cGxqM3N0MGJPKFppYUBFa2tAZklbYzhgUUpxRUw1T00wSHNYXUNW''@;'; put 'put ''TVUzdnIzXyxdYDBwZX1daksmYF0qdSNLOFVydHpHJVA7Q3tbQEpwPzojOTcrXlQ5LkpkKHFnYWN8RzZUXjYwbFI/VjtUUmd8MC8yVlFkPy5KWVYqK2lxUT4mTHd+MHc5XVt5MlZfNHo4LjhLa3BMMyQ2TG9beXA8P3lpfURWWE1FVGhvOTBgUW04OThJYUV+dUkvN1tPbjZRZXwxeHBATEJnKWRV''@;'; put 'put ''ZXJxa1kwV1U7OlY3YyJ0JTRLN1JCUG1uNmhzWk07MjhqJVY7R3x3MTRHSkVKWl9zYjBVJVdTZDlfX0ppKnxBJW4kM0k7RV5RMklqayt0QkBvSm8xfDw/ISE6L3dsUmp+bkdJYH5mdVBYbExeeGhuYGIxImZCbSVobjFrMS82O1VOOjM8ZyZbbCwuKCh7VVJoNEk3MXFgU3VnJVo+QTZwUkg9MW0q''@;'; put 'put ''M2lIez9oREd9bDpAZSZzXiFgYHdRM2Z0Jl1SRXZqOlkqOXE7LkkzfSExKmp4aktuPmI5bW1iVkpjdyxebHtEOV08U2ptXXc8NTY6Rno8ZzcvPH5VU1QlVldCfXE2ZTw3eDsvITpbP0xjQVdWZmRiI3x4eEwwMUhKSjY2aUg3R2E7VF9SMWptcyZuWiZneCNmZS5tMUBiaFosZCssaihyVjthJHIx''@;'; put 'put ''L3tDfTpSMzFnaGksell3KWFQaGB6Ujh4Vkl0dUtuYk5RXSJtI1IoWSl9R140UnB+O0V1MUlwU0pRdlZqV3k4NlcrSF5sMH15O0c0M3R0RypSSyRoM3piR35HN3dGNT9ddSN8NGkobUlnPTBARH08fVhyQmdQc2tLNXtuPGFqYEw+IzNZcjs0QTlEZiYiVjkrbilNKy9ZcDxIbGokSHRbKlFCI0Bu''@;'; put 'put ''UStZMClGfCVRTzg+Ol4qOF52QjFkKCZEQk9Tanxwdy4/fUBSX35oLE5+ZzQ2RioqIjY9Im5uUldrJCpNI3l1fDY9fFIrI1U2VkQ8Jk99S0dXOXRHTk0vbSplKSRyQygiUGVWOHhOUUpdXUlyQ2VkdSpoZGJiOUkmdzFneCM4M2xYcFZoL29KV2MiKSFXKnwqMGovMzwueV5gcFp5SH0jWkh7ZTUu''@;'; put 'put ''fjd0Ll1fUUd4RURWP3AqQUdYOFsrNyg2ZXVpYyYrKjYjI3p4PFlhZGExUkRYR0EyXnphOGhvLGlxZDMvYHRsLDB6JURUfnJiUyMlTkosfWBpa2ImU3lUdVc1ImZHV0VnTSFmLFRPMVVfeSE9dUc6YDdbKldfWTlxIjE7alEsP0whPUo2SmMqKiRYLDoyRVpQP215IV46JG1aRz1lVFQmYFp5N05J''@;'; put 'put ''Rlh1enhtVCllejw0IVdgSXd9V2htfmUoI2x1cC5VUD9nd3JrIUAjdDsweXkmdH1RZjAkIztlYHlQTXFfRyZ8Vll0TnttPiU9bmgmaDg1ems4ZUVyU1c4KXdENj8zQmQ1VkN8fX1KPmVpdUVqfUhHd1pzU3ZbfVR6VSZfSz5YVjE3bVlbNT46aFchMS9CWVtQVyN8P2E+cUg2WncqOSVLIjJ6ODU8''@;'; put 'put ''IVY0W1AlKTJ2dW8lLCsiRCt2JDBBTn10KmlWd2FdKywqMz5wXTtPQFRSYzcoITxwZ2xTXn5neCM8SEphQmc2IThWImxiVjA5Ym17Y3h6Ii4kLE8lYmYlT0dsZmh8SVBHI3giPCluclA7QiEhO2xNQkxsTGVDOyo1TWxmfXlRLz9XOSRYSENrTSNXd3hJQXs1WzY8SStRMFtGSXIsP3h0cVRUIVkp''@;'; put 'put ''Njs/X219QCojU3s/VnRvY0hfLHwxe1p6VSREfkAsVioock57QCM2eSs7OlMsTG85VGV3aDJOU3xxISoqc3Mxej8wLzMseUxQRlFuLj89IVslclFubHk3d1pORixId2t4TW8rW1JBQFJ6Uz0mP349NHoiVGtfX112KFN4TF19XUVdWmE8PT5lfis9dDpKMCF9SnNkbiNIQUJhIk02QkJ0L2l3VWcw''@;'; put 'put ''NnhCK0c5WSRePEU7NGFte2Asdl1XUUZxMD9AJiRKfV83LDssMT55YjFicnhbJDFoTTE/O3BdeTRwJixSMiloWXRFQ1QxZENHUix9ITx3I31oeUxSJnFxV1QhbW0zW2IhV3lnaT14SUVkaTZHOjFmb0ZWY1k7akhLWDpub0EsXiM4QHBmPFhxWGEpMChoZV5dcz1BNykuWiEiYmtQU3gxPW5mbWYs''@;'; put 'put ''SlkqVGkocDlCUWAjfCJKWEVVbXFWXTIlKTRSQE9NczpNYjtPOnF9dVFVb2pfUiU+In5sIzNyNilpcHxwNUFfK1I7aH1baHYpRFN8dSYlczhkY186aUFQPUB+bU14dG0+YWRWflomKX43NWJhZ0Vlaj5OI0k4MGkhaEVlJV9RaD0jPGpqOWl4NHJHZnpoVmJtUnRtfXVzKVE6MnF8I1ZjfCpZaS5S''@;'; put 'put ''SENHW2dtPUhvcjlrLlIqOH0jc0lDPCooclJwOiFEVzVibFIlZlU3OmNUV31feTdMPSFqXkdlSnp0WDwrdXNLWT86PERgZ1MlKiNkTi8oY20ha3lnNlJRa3c4PDBxO3doQV9+YDYlPCprZV1uc3FJYz9baX5+OyMqTCx3OV4/fV89RW9IRVBeOH5eK1JMOXVdL1AzaFhGTjYrSD9WKU49UVthIlpO''@;'; put 'put ''ZXo4Uj4kSCpeMzpXSUNlI301O0M9U1IsbGQ6amFFJj9AMXZxeHxAUz1lYzVZIjI4STYsLHUpfUolMWQwdFJxLlErSX42aV8/Z1ZibVJ6fktJRCpbUiI4R2NPYWVGOnB9W0xXKGVQP24mfCNgQ2VEMWdySnk5NE9gakFoPGlvOC9XT3hAOTh2KzRKRihyTGhTKE96QV03STQrSUglfHM9JCpqcnQ9''@;'; put 'put ''LipheFUxfS9kKThVeHRNQkFwRHVgK2BKMSFWQnlNX3JxZC9mO1NBcXBgNV9eXzZRbk5lSCJNRzt5JFk8cTRMJiRKNV1NPkU3Z3EuTjxmN0poUjU8NF8zfFREO2JkZVQoYUshcThieis3YyZmY21vK2U8aC9HNnxvb2B0ZyhaL1EjLDc7cG9gTUFZQUY/SF1CPzRiYnxtQHB5MVtgMT09ejhPMmYj''@;'; put 'put ''UiEqfSRPPVtQWnBsXTo7QD43ZXNybT07Zi83LEBKelVPUjs1dWxdVTc5NCZ3KjlUQjtPMl9wVEM6PVEjd1lNUTNJXVMkS1dvNkU+SUg8cTduTD4wbTxkUGU+N1dIfDdFTlBlSmFFcT1KcHpiTUchNkBHRG5uYXlXay9gZDNJel5ZUzZuUSFLR10xd0ZufiojNm9vaXV0dGwkb3I0TVYraVpHJSRt''@;'; put 'put ''fC4rJEFONF5ZLlolZEMlKyQ9VVoyQkR9YDheOF44OHhlM1Z0KzI9P0pZTkYpSzJYMEshKk1vKVpYSnMpN0BvM2wkeSQiQFtncVQlY1sjJiUmVWpGVFBzTVFhUGgmOX1DK3dRXWBQYFlEOjxhbmh5fTx1N214ZDc/XjJtX1dRdkhpeEpJUDguJC4lJDkkWkdENjprSDh5TTEpZ0xoJilKejhHcCR7''@;'; put 'put ''dTczM3wqSmgwS1ZIZH5sU0t0aS9hV2l8eUBLTDQxR3RWcEhoNUZsVjkwTFNIVWQxVXNVUzF3dFVEPTZXS0B5Izk8fTQwJStAL1Q5eGxYXVl+PT0rVVQqWF5TdGohaFBzdFk1eSUqUitJeFt6JFNaKTsmfSJOPjE9VlorKzZFXkdSTm19em1lekZ1SHcjfDYmT3MmL1dqMzF7IypMeS5ybmYlUEFL''@;'; put 'put ''Qnl1dnQpKV1Ec2NbayVdVDdlfiUyMCU4QUBBb3RWRXtZUSVmX25Pb3tIWGcoYlBlOzNYeUspakBxekZIdWhOLl9UemlRYVZDL2NeLnMpKitxa2lLXnpGTCpNeU9uZE52bUVANVJZRmI4YmlANE4vUTRaWixdO1AzMkhYMlo5IUpjS0t6QysoLkRNYiYjMl0mNjI/P0RebzgzMWtzdlJ5ZzZUR1FJ''@;'; put 'put ''PGZpZT4yXklyejFHVSMqcixDeTZlMExEeVpNME4xMC5WaXhReno5bD9zSzBNTSgsMFI2LDB1cnAkImdrTW1SODFdcHUlLFVhRWBTdjVBczlsPWksWGpHSzh9WnAmY0RHO09KNF5nJDIyW3w7Tj9ySm5CPnQzU18lSHouRTpmKXs4c1VFZmU7K2FRK0pvMWxCJk5VS3cyeE1RRXxDcWA1Jkh+Pmpy''@;'; put 'put ''aDYzZH0zOUhxa0dqJmY5Y343bVlZMHYlYlBSTlVUeT40PTljOllNOigmRHBwKUpdcThVKmZHPitncSxoUER8dnooIlV8e2ZdeGx6R3AsQ3JSJmwsbGdzUDtEWFBxZWYkMDFBcnAkPGhHSWJ1OG9OUklUOShBJmt5L1VTUiM4fnRvajlhbz08PHV3Vi4zR15gNFV4dEFCU0o4JWZHKnIqaWBBSVBd''@;'; put 'put ''OSh8LDVGe0dtOE5pUTR7aEg8OSJbQWcoNDhPSnZQMy8sMyZqZkIoNEIzemI/QGhqbzglRUhPcUJdJWpKNihAKj1oMEdlWDNPJiU1aCt6fXBUalgiZ25DdV95VUAwaWt2IXJaTXg7PWhveVo2LCw8Q19TJUFzUXhnOEtnVChhS1E/Xm1ZWSZKNXxTZWJPZ2JAeFlSOWJHZn5FTXdocGNOemVOIUox''@;'; put 'put ''OTVeeiJjZUwkcXtwN2F6IzF5RXAzPThXaGA2LmIxLDV3JWtSJk1ZT2JKQnIqVEVXLzJdLEM7T2A7MDdkUUUxVSJxSXE9eSI4JC52SWRlSTpfPTBLQ0B3SG57Zl1QRGtbeC9MTjlON2FRWWRiIWMiWl91M1pec3x7cjdWOU0wKismI0h2ZVpee1dsKntgLGNQelc8XWI9YGZeLk5pJntUYWFAJi43''@;'; put 'put ''WmVIR24uLy9mKlIsKS95cyxCfHhjKlJCWn1TcDwmYj5ueURQMGAudTV5P1lpd1MibHVfUmBUK0FxQiZIY21LXTlnPT94VDZRYFpqfjtfPjU8K0dfLytnRTUxKUN6YmBRRyNaeWd5YVBOMzJtQD9Da1AoJVVpej1dXVV2VWB8P2lBOCM6MTVkT00pJVQvMHR0TUtKKFA4dHZyQXMpTUFfaTt4Kjx5''@;'; put 'put ''OFZpZkNNQjJwMEpUMTJrVjojS2VJL0k5LElGOj4vKS8lMX4mJEgzWmVIeX0+YHI6KlszZChmVzJLRVt1TmJPdnl+OmIqb1MpPVNCOXtjNyEkRlJvTHhXdW84citYYWlZflhyMXZ2fC9mK3MkKzhiezdmVS4zcCFaL1g1L1N6YjFIMyJKZmghI1JfRjRKV194c1VXUDlEKkpHZWJiSGQuWUhOVHol''@;'; put 'put ''MU9RME1+SCVpP31IITUxQ3RUOmtZfTU0P19FKjF7T01FWWU/JTFkMDMlazU2WSMiL1FBQ3c3dFtKWDd8RWR4RmszNVhWIVl3aFYmUWB9bVhgcis6blJqT09KbFVFOyQlPEY9K2dadHpLTGx9aCxrfj5YdFQ1bWw/NkN+MywxIz5naT4kMkJXOFlzKzhjNl0oMyN1WXI+QkNYRUAjMmZfSUBMJSMy''@;'; put 'put ''VVY1K3FvIls1di9VIXEzJEFfJEAjcXtweVBGbDReV3c/KyJjSXFVflpSaTx3JT1ROSohXVFecVM7SG1rOz1JVVcjaTJeby5bTEtEUykzSklDWDxAUG5tWFgkc3p2JE89MG1VVlY5JjtIOkVML3RZNXZvUEs6OHNQSTx+e2J6SV54OHJhUSN3LiJNZn1LbzopOig/Pl4+ZmZXQyhpaysmfERtL0p0''@;'; put 'put ''SkNuJUsiP0I+WHkjOl9gZyR5KzJ+RnZ8eU1kS3VuJXcuLGxHI3YuSGJxQ0tKTyE1X0hXenAmYjsoPkptZTtqTm1NaXJIOVU3ZE4jQkRlQjc0MTNZQyw5PnRaKS4sVH5YPnRPam44SVd8a1BiaVpPNzFQPFpWXzhMITwlfGtPeTh7VFkze0FYOTZhTmlZT2gpM0hWVmlTdi9pXjdLZzc7PjZ1PDVA''@;'; put 'put ''Yml0NEsqTStnSSEjang8S2J9YGZma1FmcVBlcXBhaUtRe1J7TyFtTXM6fFs/TWRYZVV2OVpGazVxUkpbNztYOS4zcGY3QkpNYXgmR0NWTFRnZzNoNkciTjNHemJ+QF9PbSRoeEIlOyRvaDArdnVJUEd1TTB2USZZRSx1Mm1oWF17NWBYPH17SWw+IlBUNUhmLix7VytVSyY8JndzMV1UPjNFIS4+''@;'; put 'put ''VUdAYSVwcEM4U2xWO0gqaSYxMm4uNTRdbCYwbWxPdTFvU1Z0bTZjd1NYLj1Bd1NrOEpHSDBJN0dpSUoxdHRjVks3OHdQKSNEbGlbLmt5KnI9U1hTLn11RGVnMDswK1RfRG9scSZHXllSWTpyaFNbJWNhcHdKKmxsOm84XX1SUF19RlREMnghOzdUWVR5dEt1bHMyMkQuUFRhfDpXOFJtfCZLLnlg''@;'; put 'put ''VG1VZXpnaFNmLnV6MGlnbEVlPTRrUi9IIT8mcGF5dW1oeENbbDo/IS9ZIjBnXUpGMGIwYHdbdy5NW0A2VihTbEFxUXVtKlBxdlhwYG9QQytMK0FQL2FpXmJuRWUqfHBzYUA/PXFYQXxVcEtFUEM6TDQqQXpva1tYbzlFVjQvJXsjemBYX2FBPUJJUEdVYCNZRlNbNzpCLkEqM3ImOkVieU9NZjFO''@;'; put 'put ''NmJsWDdHNyh4ZnVCa2I6c3VTa1FaMTZiOmdvQ2wxYSglJikkU2hkL2U7eFFJUihOTWsvZkxnL3RoZSZZaSthNVpDc0EhWWpIL3psKTl3TVVRLHhLVTA2bFlGOVtqQHh1MDdwR0B8OFNNIW1VPW5QIU9ORU1MdT9FYHZVdT84dEEqU3hodztdLHAsU1A5cV9kLyNIIWFpcyJ3fj9fX3lJaSxxJSVj''@;'; put 'put ''dEc/S11yITFSQzNAOCxWej48RlFQMW8jMj8uOjxFQTAoJSlhTGIoVj47SXtLM2cyfnBFQyJfPyEmaHBIYjQ4IUdAWk5CVD0jViJTO2JxR1RQLnklc1FFIX1vWWFNPGgvK2kpPTM5fDBteTFveCxsW1MrOmJ1fVROYEdqcWdpK1t4MnB4ZlJESnwpaV8/bTpTNipxeH0kRmxBNzs7UWIzRS4jZzQj''@;'; put 'put ''V3ovQjJyMFZ5aSZneltZNDZ2U2NZPEBKSzB6U2MrYSZLbXdHLnQ2SCg2O197a1QmdkliUV43WEl+UUVSNEcsKnc3ZDI8bnl3IT5FNF9HJTUzcitQMEluJn5VaiJhVlNqfF0laiFNNH1WcCZTfXcpTC9zQkU3TTpXaUNSXTB0ZUtZUzMmZ1lUe2AjSSI3WVI4bUJNc3xLQiIjZVJraytmOV48O2BL''@;'; put 'put ''Tj9CSUFCME1RK2JJRWo7OzNZazc2filLQS88bTg7c3l9MltEJEMzcywlfkVMaCtzJiVTeUFIZ1p3Yy4jbCVlTEZsR2BQIyYiRmAlYGBmQG4sQHlOez10YUFzdmJtW245VC96b2tMMFUvI0QqRkA/JWAxZ3AjS0B4Y0l2LyorSyFiYn4oV21NT3puVzhrXnVtbHMzWH55P1VsJi8zO2xRMyk3aDgx''@;'; put 'put ''Yk4zKTZ8fD1fJD5kKiM9IkVgNkFAcmZBYmImVCtIO35TWnxHV0hnQDp+eEo0eyxTNVNsMWg+YUJ0S0JPdnJvc3wiKntMN1JiPz9VJUAvOXJHWzlsKkR0bjx9OltsXno6MWpZLm9pdWwlQWowcyslW2h+cihoOjlyLClsKWVudzQ3fGUiO2N0YlNgbnJlc3w9K1tSdGBBUkpQczE2OT54e3gqMGk5''@;'; put 'put ''I0puSjR0X3Q2KiM3NVAjN2RFSFVkQnY9fDlhTyltYzlSMVFQek0kLmBmKWxsfW9gZS41O0p5aFUsXT9rRWVka0hXOHAiVipxcGZKWUlxNFNufS4ySUdtfGssLyNgWHJtLzh3NV5VKm8zVnRRQHw1LGliVHs7O2J9Nz04bDtpQXtXVV98Y3V+dHR1e3d2VGs0ZFU/NSVDYEtxVVhoRzpsWCFAPW1z''@;'; put 'put ''K0d7OFBbRW1MaWRxdHtyYmAkanUqd0M7R0N+cn19cT4rb3ssXjBNVihjKyVqUFB+RHw/dlFkOFs4eXNsN2RTWSp3bzpUbmFxYmU1MUUla2V3RjouUzxeK31yciRxez1OWytxcHpZcWJPMG8/NkM7dWhjRCQzeEtEOHd8KVNzfmU5OXxjJWU5ZFhiVFI2Ij1uYCZBPkFFTWVOMDl9KTBgXyRgQ3VL''@;'; put 'put ''bEp2OyoxUGh6b2UjcFRsKTddQjlscGgrTCZmMX58enpEeTk4aD4oenAjSyhBZSFeLGR2JFZyITlBPSR3aWBefll1PVY4TEpgVnI8QDJ9blFWU0lkWHNCcFZKM2h9LHhUJHZ3Y2hdJiN+Jj8lPD13dyNGRWp9eGxITVowXn5lPXd2UzRJMnxdbDBaQkJtUntfSzd+bXxpKj1qQlhuX3BZfjVWWT1E''@;'; put 'put ''QGBiZUxwJlZMTWcuRkkmbF5vcWw9PHYhO295SGFSanVrNXdpZDgjaGIqeUxaPiE5bGJiOmt6eDBKeCNoN0w2Z0dtUkZ8Ryt5OE15NjUxWyJUSmZNcklmb0h3STx2UXp3KnBSX3tMKDJWYFIpSl1KNEkyfF5sTVptUj48M2RTPjElbSR9eTZAO0w1S34/UndhIU44ZW17Pkl9K2kwakx0M1hva35a''@;'; put 'put ''Ql5IRUgjfFdVJmtVYipMenk5aWo3YXRMSnRZclVkQCtrOj0xZkxJWXdFKG4xa2t4UEdwZ0VfPnY4cDkhMCFxcGsqSEdpViEqSXdYISszfTlwMiYzdWZwLDxxJSVPVmp6OFs7LjVlclQ1RUJZdk92JjIofmUwcF9yVSlUXyphL2k2UTFgOjM9X2NgY0huPjFLWkYmUTI9Pm1bcCNLWkY4QS95ez1I''@;'; put 'put ''aWFbfHRBenMuQUl+dWwwOUQoQyZHN1pNOFF8YVQpJSpuUix9LkRLUno/K0BzVHpafE06R2NZUH1HPzgrQGdyRmBiO2owSFVaalt7LCRdel45Ql9+NXw7RFZJR00zS0cwRmd1fGFtUmxbUWpRMGwiIXdibzFKY2phcCFVLjRoJj8lfUlVZSRtVFhwT2pwVlk5OHtjb3kzUTUzUWhpSWNGIXdCeDNh''@;'; put 'put ''LkRzKS9YckJDL3ZtOmh3Yixza1ImZ1FgRyhNeW09Unk8d0RNZkh1WjI9Oy5bK2Y4KS5VN0YhV1NmdSJWUig4eVlWc2FQcjJLISopKTdCPlY7eGM/MlE5Y0s/YiE9USQ9Qlh2QC5TL3N2bTtDO284RVN2e3FWL3gvbFo1ZFRqYjJHViMwN3A6ajIjaG9ePG0laD5xfVNnLl1JNz8iUjM+Z3kqKSw/''@;'; put 'put ''X1gsRy54UGZpPGE4TkIzNSw6SlVtJVdoUCpQOmtvWm9bOVYmXjEjKEYrXktnNyZyZU4udDhMX2EyIjtJRm5rJUJ0TEhaP1h4eWFLLnZnJHdjNkJoUEFeYUk+TTImQU52dm0rV09RXm9QX3wxNSZNTkk+TTQmK0xkWCtJOUQwR0IvR18kRiVHeX1QQm1SdS86JDdTM1FjN1NlNFhDOlgxfjpofTlL''@;'; put 'put ''Y3JhPG9SXXMrIkpoTnM1QCQjTHQwJH55NlpTQDhpZ1p5ZXI9SX14ZyQjY1dtbyMhInI0QGRHcFdwdFBUZC8zNHU9JVFROl03U2c5Imx+Ln1RREBjPXZNTG45VH1ARHpQT24yYFZubDFxO2A3Ijt+Xnk/a2BrTFVuMjVqQlRCSkxjPjJEej87UTEkUHdQZyI/YkhgTWBkTC89aWJgZTAxPTlRZ3Iw''@;'; put 'put ''Ljs2YjV2dkA6MUsqWHNbcCZnP3NjL31xe3RbW3BIb3QvRjhlcDImKDA1UHhbd01ReSlvcX0iPCM2bEh6TGpWQTY9cCNBMjBmOXYpSTJ2O116cF1TLndQWSRXYD8zQCUyI1FocF5bWHhySSQqTTYyUS9PWjtLaDlsb2c9bXU7KkB9JFcuc2BdUzlGSlUoKCFmOm5JYTYvNmpvNzlMKDptYDlzZT5S''@;'; put 'put ''X2BJIUoqWTxpPnd5OXpUSDxIWkAuN2w9W0RGZzleYiQvc095VTFqJF82JjZlVVUoLGxLOml2On52WyVFS15maU5pR107aVFSUzw7aSNzdj1fNykzK0pdKnFxcjMue00kfSUsVDx7eGs3ZWxabmI9aEZMKzY6SjpKX086YXg0SkMkYzdaMCQ1OWJoT2dUYjoxZD9uVDJUb0wqTkJEOUZmTGZIQURo''@;'; put 'put ''LnVuMzhHWklBVD9DbThrUU1SfSRDUk0sPC9XJm8xeSRyVVRQM3gmYz4/Z1ZdQXwmcTpDMHIqTilwSmBUfnhGUFVhTjxFMDhzfnt1dk8hNjVbVWImfTxpKmJaTTxEaTNwR1JGIyJdZ0I+NzlpaHo8SjpuezkwcCNXckphfUM0V1B+MHlaV1RObEV+JiltKXQ3Rk0rUkh6biQ9SX1gRX1Aaz97Xjpa''@;'; put 'put ''WHJtUjJiYSwkWEl9QV5RWmIrQy89Q0NjRiVNMl9Ra0lzYDMjIiVLci84V1dXO1ZnUWZAYG45andRI2smeDhLO21kITZoYSg8VyhWSyE5VT09ZzshUjZ5XkcoVzNGNCFiV2cyc1EjP1hKP315c15YaCZJY0ZWYi9NSn0+e14sWSgkK1c8WmNbaWsxdnRnL2U9InN6ZUkoVFVuSzZhN1tjXnVVPUYz''@;'; put 'put ''M1AhPCVwRT5ITDkoM21aI1cvXi5QbTVTI30kWyNnKHpiLzNnQWFjJStzOmVoPmdAU0lLIy8wXmIxeXs6VGNiMlk+QDZufC8mLjpeYUlAX25weClUaURgUzo3Q055dzFYVkZwUSl+VDxiUytKYWEsPTpJOjk6bCQ0UkQ5bVFTLHUuWypqZFYmM2ptKjRSXyYkJjZeVCZXOHhbXWYuXUNRQGRQKiVl''@;'; put 'put ''XU9BWVhUVnRDQ3lZNXV8dVFXM1BfJGN4SUgodnx1U1FbJjhJL0VIOGdHS3lPSC5BSVkuTDBhe1Q/W1NNXyFlMUM7QVJOZyhyeDUlMVZtVFVHOUhqX1tSc2RVeG9lQ2pVY2BUMX5tPj1xPClNNzU3cihqZnRnYj9na098OkJaZWZOYXw4QjNNXnwlYkkiMiRJPWloeE81QXhnMiFlRl4qJFpZRiwy''@;'; put 'put ''QFpPKDt5TTpRcWcvYmtbOXc5UjtxdG94JlRVNHBdMWlCNWdbaWdvakRqdGZzbUwhV2h0JiImImwlYlREXT02Xlo8UDpkeDcvWyt0YjFCY3YlVDs3ZSpmK1paMDxNWSpBUWllRC8mTHM8TDklQ2ElRHZYNUFvQi5AZ0FxOUJ1UWtRRDh7eUpRKE91KSlnRWVbNntUVjB4WEclL0xXQzhdbHhFPT40''@;'; put 'put ''LDxdOCFtRTVsXW1jMls5QHVoMVEhKChMZ3Q1SVF6cEwkKi82ZTVWcEpPR01WeXAjLjkzMGwoQGZUdltkWjQ3QmRYT1kpcjwiX1BCemNYVih2RS9WZ1B8VmcwVEw1cHFKdzJAPUQqJTdhKEI5SHNBSThuZms3e3xINWliQGgycltmYyNnN2pXOiY4ZTNMKiwrIXF3SChZQX06IT9AcnZ0Ml1jJHVg''@;'; put 'put ''KjhoeFBGKXA2b09TPCZRc1VSPFVfe0VVcXxEe0AmXUpRPiY+Y35Jei9TelhPQElAOD86PT8ufE41Z3tKO05QOGomXSJNQypHdmRKZF4/KG19IygzWVo8YzhwVCwhK2FWKE9QOUgqKWsuLzdCJHhHVUAwb3x6O0RXI0VgdXBxR1N5JGk2dSlaUDM+QSFKKyhTL3dXZ0l2diI+ZUwyIU4pYUBTQ29r''@;'; put 'put ''c29pRyouaWkyMEtrIm0kWDdpSHMiJTolajJuPE9uME1wOzQ6U2BeJm9wLzdCJGJNQzpSai4xPSZPbXZpMz9iLlhlU3tETjF7MnRGYlgvP2hbUWtzJVJkbUUhOklDME03TG8va2lqZl5uYyZMOlssWV47bFI0ZDh3OHtBOyRTblp7VVM3d2NgUEJ3W0wuYjFfUVMjOnpxTkV+ImU9W2RtZURObHo9''@;'; put 'put ''aW5vTUledDgkX3Y2SWxzeUxwU0IkZGl6T1Yyb29ZUXIxW21oVkNXU2ZXUFF7NC5LOlk5UlF3fWZtclZAWD96RF4xPEFVVjFsdSl4OUZEeWRbbXlSU2A7cyQ+bC9PI354ZDJFQEJIWTNsO2E5OjFFL09leEFMMUt5ZDtPd2JHLjhhciwiPCRgfW1uQ1V+anZxZm9HVWRKaD1WfFIwLj09Q281QiFS''@;'; put 'put ''bjlhQ2IjO0c6KXZhOiZPQUU5YE1QIVBPZ3pJOGhaOjRFS1JEMEcoK09OMVVHY35iLHhsMDIhalQvVzchPk1hOSlFclkwYjZASmkuIURCRSRKODZ1KVdxXzk9UikxPXtsIiRGeDgwITdfa1hHSnhAQDxZZU8hYGg4PSlNVS80WSN1YXs4UyxId3BbODE5ayw2Z3tVJm97R2YjNHR1cWhaOnBTakZl''@;'; put 'put ''NyYuKHpUJF1WIy9HXmozVTl5aU46UXt5KiZZT0I6JjgyZ30ue0hOajMyKS9SdT9PQV9OaXhNLDtWKWo8cmQ+UVk+aV5mUVl2YEZgWDNUX1hmKzExOlB9KGooYygqfHp5dXVSIlUjKn5eYDEjXXQsezxdfjx3fj19bUU8UGFUaVNNYjIvVXJ1XVZ+KSksLiJzMV9Sbz9mISRtUGI8KDpVXkwieCE3''@;'; put 'put ''MTwzbmR4WlZFb28+eSRZLyRndj8/ai9NcTZAVH1nbF8rZUlNRHFETmdbcCtUXTh7Rmt6ay9bUz1RdF58SCxgTGc0SkZIaHFCM1tzRip+JFVKLixNdlolSldzOiF7OU80THNhdm5gJGNfJGVaKn5pdTBGWn1oWEZXTEZkS2VWI3ZHYSgmJWcvazN+UGx1U2gvQkQwTChMeT4oQ0ladXk8aXtXfmFO''@;'; put 'put ''fmY4dy88L29ZJmdzJHs5YDZQRzAqKSxHIShJUiMoSEVPNmRzSmV9MkpFalNQWmE1MCFlP2VwVnFoIU4sWC85eWV1figmTjBSNzpgP15LNUFfbEJRY3V1eTVXRXpXOFV2T3A7a0dZajZsXiR7P0RVL1goK19rM185Ym9MZ3NyPUxzQHFNbkBCXnxGKzV9MEh4MT8+e29bfDArPXxhQ3Z6M3ciMU9N''@;'; put 'put ''cExKPiswPUdlOyM0R2FYJX1AMHEyZj1KSFlMMksoYnQrO290V2o+M3x1OHZNd2Qua05qVWlVUUd1OzAvT2BeN1BzNCIsb3hKWj5WOiNJKCRZRHR+O0M8NShDJDByaVZ2PkIzTzFpITk5enZ0QjBPK1BteVEhUjhZPk17YjlaU3NzPyZ+Tj8/RlhQYS9Ob09WKHIiWXByVEk7TTRafV0sV0lNcmZF''@;'; put 'put ''V3lOeXU3WylhbWErKC4mdXdOej9nfmRNbTQleCFCQ1NWSCxOJXV3W0wpcD9GVylBT1s1dERkb3hndiEqSXdYYVpMInVZQ0VTMn1yJiRQR00ick09WCFiPWBDeSRwZCEoOWk6USlXQGkzNFJbbG4vajFvLCVqQkBuZixLQH1TNHcxP2k2W11UYk88I1Jje3pUWCZIUGApdXNFX3E8RipVdS8/TTxi''@;'; put 'put ''PFg8Um56ZSY7YDpOXXFbVGUvWClrdHl7flZtJWkpS3RGYEYxZmNQZTVWTk9ee09sbkhDNSY9S3wpdWx4dkdSKzpMKXFNOXNOLnpLfHBCZUBVKT5BMkU9ZElLaSpvZGNoOGdne19TNztTZVR3NzdHSzsxN3U1NmlkeHA8P2NzIjx0MVFdPExYMExEOEBxOmtPdDBvdF9yLEt8RyQuLyZrWkg2XzRu''@;'; put 'put ''YT8vaT9Xdmt4aSoiLH11PWc0NldpOlduPGAoY3clKVNWVUIrdjVZNUFCNHt1dV4iVztQU288ZSgrbVVqfTUoKGA+VVAjY218T2I9cVZhVC4kcjpvJkU5Sy9bSGlVSFJAJn51SzVgS01CfEZWWDtNSTAxSTU0KTUoQE9pbiYxaWFON11kTmk9QUdWWCQubn5YcDYsPH4rKTBCeyU+JW5Nakp3UkI7''@;'; put 'put ''RXEoYjpeMWI0V2YjXUZBNkVaPCZzfUFwVWxYJGYidVVTJW9+b0p9MSYiV1R6MmRdLn1KLCo9eV9YM2wkfCk8Y0hobkNdbyxYMWZsTDp9bltLfmFnPmNWfVhiOjR6Kz07cll4NnRVdGlZcn1lITFrczhYaWozdll7RX1IWGlqQVh7UXt1YiRBTl89dUcrTFFCKnQlX052RUxIaCxBTyg/c1JUQzFq''@;'; put 'put ''biNrUm0+aD9xNmZOSjJbcmIlajduWz5uXmIxT3YqaWxTZ3lJeT87c00jOGVsMFNJdzNrJDlfVGxCMD9wVjJ8fWVPISZoZlldQ283ImhvYHBXLHUrZSVnaC96TUN3IU05ND9DfEI8QzpPdk92Jjp1THpAWmphLF5xWChXYkB6SWJnIXU8JC9oODUqMGtFMEJHa0dtUFZ4VFZAR2pZKkN0aWw4ciYk''@;'; put 'put ''MCh1JDdPZXByVEVJN05+TjVfODNRKSo0Kk96UWgkUFRNTD0iInB0MkN7fHAwcEImPDlYbG10WjBNXkpeT1Q+U2JpSCFgOUJfeHkxKTpTcHxgJXR1Img2bD1EdEAoQ2FfMF9pKV1CR2QqRCJfVF9+PDpJNURvbTRpaTJNYio6Wz9AaHhpbUV2QThASz9AaEI2MVJxQ210N3V0OCVoTGZSbTtVVCho''@;'; put 'put ''XTgjJjAlRDVIdl47KF5+IkEiXmZkKTMjZXtlOXVuWD9kYmJiKUVhPWRkTkgqLy9oSTh5bm8vQ18qTDR2IXRKVTdSc3RWV3xEPHtIXTViYnghbn1ZTUEmUVJ7dzhPelJIPEpLZzVaYyg0fCxCIylQc05INlkwMm5EWUw/fGVPP0B2PSk7TEAqR0RIVTJTa0B6MSg1YGtfKWcpXlZFYSxZJl9dIlVf''@;'; put 'put ''Um9TXVZsaFptV11DTz82L0MhJmowbiVuRmF9NkI9YG5iNSZkR2twZVVtIypbSWVybHlxcT0uWCRscX40Um9BfGF9S0NOenhRYDY6SmQ/SF9jTTlfRE9+Kzd2WXVuY3lJQk5sV110JnQ6fmgsKFdzMFBKO0J4WWYwaj19ZUs3VF9UXykzTHw5bFFaZ2tRVEhhKUY9YWRSWyp1bHdQdD8/Q2QhUXYh''@;'; put 'put ''dlBmcykvbWV7PHp0cSRVZiN1PnY7fkBJSEJtNnUqQUBPXWRKbiE/NDAuZk5rJVBhXnkxPU9rQkNtYFdxa3BsS0o/ZnEwbWo6c1EuJCwrL2YqUyxDK3soST5vdW5RVFBkPy5LUDxCXjFKQ1QpbjxoKX5oW2EmOE9kS3d1ZnwzUV9FU010e24jWjl6dyxyaWp1TURkIX5vfCY7P104ekk+bzZgWF5E''@;'; put 'put ''P0VCekBJZGUqRlpvJj5vSnRCVD9JVT9wa2Q3bFhIYzpNaVRMMX18VExSVT5LfmtiTj1CUWc1ZTZmOlJ4On4qTVdiNzRjXUdDfTsiZXl7Qk9bSEAiIz9bWTU1cV8kKVV5PXpNQUlBcVNKU1lWUnRmTGVLWUl3OF9+dVc2eTJRLFEraF8qXmFeNSlwbnVPRl5zLl1pfURLNDNjcGNDYHxhRXc4TyRg''@;'; put 'put ''bTBbWVNuQ3V8U21lLE5lOFdFW10la0BxPCM3LFFtYVdNUTNyeCs8fmdTL1s8KSFWSGc4cjNnWjcqaipgOXM9b1tQZWp1M3VtbjA1QDM7b1JfSlFxWyojTC5LOHo1N11IOzR5PiRENDx8NHBrVFJIfS9yakViOTp3MXVFY1BgMys+em8zRkNSOn1VVyo0O3J+YlhsIU44YEc8THw6RyhJRWpZRnMl''@;'; put 'put ''PG4oNVVvTzo+N1lzZV1DQ0hIWVpoeDxRT0tfTFpDUFhoZnEwPGBgdyNienBReDsyQWlSdDI6cjpYZTUyYGQ3PjNMaXV2TGBET3Z5cCVdXll3O1MjaXIzKXooYF40KT4ie3JZemY0MXwkWDdtLy98Rzl7IlNAUDdZM0JVVSRpI0hzSzZsL0NlfGF8OEdbQkI9L0Y3KlV5TGtLK0kma0g0d1hQdmhP''@;'; put 'put ''IV9IfXBLK05eQWFveFlUSFplTFlGN0VpSGZNV1ttVGZ0JlY4QHMvPE0vOzhyK0xKPnQxdkwhSVp4T0daWDtLOnxSVmB5PVoyZUxQcm9nI04/bEZlSGw0JjVfIUhMVVMyL1tbMyt0NjBCTF59a3FMMCtVcFgsN1I0ejExT0JMenhRYEZfaz18dXVrd09UPGhteHRLOFArRGBKeGtIVz9CTGJeTFFR''@;'; put 'put ''X0UhPVhta3NmalBEb29yKiYzYnZHMC5iMEY9MzlsSl16ODQ5PDxwXSVdJiV4fDUvVVNRRThPeVJIZjMpJlNaSjd4Mik9WixGLFVydTlfS0BdPVF9P19MOV5VWCZ7S1V+TDpxbWdZeE93X3tGPXVnckxmRD16OWEmckU3UUo8O3k5XzgjP0c2SWxQZCRaWSEvOE9VZ3Q8biRbXzVDJH19eFp9Qm5o''@;'; put 'put ''UHVgSDdBPGVWMTtOZTEwZTBqanpTRlBPNjNmYUk0W1d5NHAmfnI2PmoidD41Im00ZiNSQiZ5KC8lZ0tPSTtURXk1e1hoNyI3ZWhvX3QpUH19OW8lcC8vYS5eOSp8MXcueWYhZmV5OE9HSFhgdU8hXWtuWDBUM3E6fUc6ezdNUWx7NVoyNDhxUmdfcExLLEEvSE5EcTgyXzBTY29rTW1SfigwbSos''@;'; put 'put ''fSg4TFJ1QTpAWl8jfFYvUFVTPERrMFloO08sQTFOcEBWbTs6VHA5MXhpRH5bPipkJnFPU0JFNENSJS5WTklCI3E2bW8/fU5YITdodVE6Z3J1SWlQfWZ4NndbJnxCYmcxKGY3YVRfOjsrNnZybm9AeG4xQSMvbUUvSkhdZmxHfSNHZFNKUEddV2F9YCFlMmxeUWZjN3IxVUdoRiRwJFgrYFRJJVg6''@;'; put 'put ''JWohOCZWfSQwVEYhWy8vVzU/PCI+QllmUGFlKnJ4ezcsWU0/b0xAcj4lZT1AXjZySi9VeWRAOz9dQjtDQGlRdUZMIWFxcz9aJHNIN1k2QkIhYHZKYFU+Qy58ZWtnVCJHQDYxSS9IR0V1KCx4TSgsZ15mRnZWMX5eMzE9NDRuZGFwKT0wbVpgcCl0T3tSRWZHOzVKPjYxJUBxamx9O0JicnUwSW1R''@;'; put 'put ''STpLWVYpTyVrWEZjcEdeVnQwRVp3WSJxcCUvMGsrSVplSmhxPGZib0ZheGIxSUM8cEZXJCkhY2goPGMqZX1NV0BYJStWT1R9c1RdOXZ5TVJhbi9NdDhXfH1lW2suUUJtc0VzaXFaWGksISJYcGc+aCVQd192TEM8Y2NIc3xvalMkN35lSmJRQChETTh8NURBZztCdXMpPCUjIjhwWiJQYW9KOzVZ''@;'; put 'put ''UVNBK1hZUnU3XiN5O196W1cyNHRGTW47PlFSWj5ZZjB8OE8pfGhKSjY2IS4lcTRvKlVMKXxiNzdeWT5ITmFpTTo5NiRNXSksK2kweXlJXlF4fUAyXS5LSFo1bFRDbS8raFsuP2piSHMjYGx8LHV6SmlMOXNsMkZzTyVMYkE4ZUhya0YrIVQrNS9yP1QiVis0cWRQNlBZIUdtOEMubS9uQWxaT2Q3''@;'; put 'put ''emFMM0t1aEY1QDJAR2shSkZ2Pig5aSZOZjpOOWBDUTswfFVMM1QuSDdiVVNeMDNab11ARDg4VloiNilAfkh8TWp9IlMmNDEjYWRUdk8rYGNnMGhtdnhSVHBzJHNxLno2clY6TDRvOTNCS3JWOjs8YGdKZWRGdU1zKlFPT2tkPTp7TEFhd058WiJHTSU+aSw6PGdXNUVyS2Y8LiNZTSV9TV5aMn1g''@;'; put 'put ''aDMyUEJdNUVyLlhFW2M7aU5JSXlSWUZ1US9RIk42ZGBALGFIZn50TC9SXyN7TUtXL183UGBxVyE3Nit6JCE3fDV0YE1gTUAoNC5rWj5aLjMuQVdzaGQsblR5d2BgcXh9IjZVSl4pKko1VzM2JkR6Tmg+eXp2czhXU09HZW9rdHV5fDFMYjY7dXpSdHp6RkohYlNRMUhGbCxuWDkxdWZ5cy5te2ZM''@;'; put 'put ''WmoqOXYzdGRQWig5SU5kQSl5KEFhKW8pOndfQDtdRnY9Z2wsaXZvc0N5SXshS0IwTjVuZ0EuaVViLlRTWzl4MTlvdyslTW56MWRrKlFpZ2MkJVcqJVlVV1NTfjhZI1hOWEw0YyFVO3IlPWx2ZCN2dDJRdUVdd2AoYEI6a0JeMUhmaXNYIyptXkFNPG0qWilJclJeb2h2VTMqKkVaMGk+TzVMOSpo''@;'; put 'put ''bUU3Y20hJXFwI2hpeyElZWgxaTMyPjhfVnsjaHxLZ0s7IjtxeCVTVHp7KHJ+bEUuWE1HTlJoZT9sR3I5JmxEZiY0OE5ZfGpleEg2MiZ8QjhoJEp0SFN2VGViOHJoZE9MPjMxfHFKSHdSOEtTeTRrb3Z2Wz90djJJa25jQ1BkN31tTUBGRC9NTT5VOjFaJE1eaEVHPUJIKCVdUndOXzxoOFkvNVFj''@;'; put 'put ''Il02VFlRXk5NSWFgXksiV1swMXclPHQxRzB0e2cmcTw+dFghdFthM3pYQWx9aFtIeT9ieVciSjBDJHhVd3tVKDRjVFk6aHFwYnlkXlMpNj9MfWxdUGIwKDwmODlYYng5UGswcC9OMjFbZyxEe3VEc1dNVH1JSk91YkRQclpgOm92LEBLa31GdiRmI311K2FzI1VEUyVwe0x4cSJ5b1luL3w5dSJV''@;'; put 'put ''WDY2cjtrRHJieDlQdX1DQDBldE1ZcywlajtYVltZMD8vI0dibDVJMTRUKWNZR3ZnRldQLDB6WTJyRW0kWTk3ek91MGFyJmdQISJtP3she20vSXFzJnh7JDp8W1g9PHNATWZ+S0ZnfiowQXAxbjN3ODVAUEEpU1I5RH05aHtNfHUlLlBUTC87fCklYjtWPDdjOHtUUEtVU2lYUU5sfDZjaTs1R1k+''@;'; put 'put ''bF1nezRjTlJqcT9LLHt6clhJIm8vTSl5bmZPIWx5YXNuYG1pbzlVSXJfSFM2NEAlU341NSJgcTRfa28ybXwvam8sPGdDfnljKDVPJiU1THdYPjhbO2BVMSRQZ3BzO1UxWzAmJTdqblFuPG0md2UwbCVlb0V1SF1dfXtjJDttUVswbSp6TjhqZGUyaUcrNXw8e1tud3hea1o2YVh+bW01UWJ5PGle''@;'; put 'put ''UFsuM3lGbEZqITdmT2MpMlF+SipNezx8SEZ6S0s1dz8oWSZpRyVNelp9Q3xvfCk+YDMwdiNzZ1FZU35GeTdPUzNyWV1XYE9YbkFVK2Q9XyFHWURKYkJ8QD8mZU8kQlkyPGpiXiEiMHhja3tmJW01WSpUaSlSdkZAWE07IzpucVg+Lld5V2NQTEhPKF9iTSlrZChZUDFqVndxPnFTWlkzVTc+QEE/''@;'; put 'put ''PjAiXiRldUhfMndlTmVnJntuJVBNIXt1VShoZCRQR2RsYSs8aG1aZ09deGx3IUhwK1NZZnhVW2ZdP25mJiVoMz13dUZ0KktpXnNZXWhIQ2NCTHQzaWtrP11NKVV8PCIlNmNIZigrRTptOCwlNTkhUSVdIWNyOVZRSl1tSXkjXzBbbix0NS8/Wk0hLy9TX3MpNyEvKmUmK0A8THc8SWUhal09fHdR''@;'; put 'put ''byVnWHBzZWlxMDhdO1RwWnUwX0h8UjglNSVvbD4oViNVSm1nRSQjaGBWKyhAQDZ1MTA/bT9nMDsrR3s5ODpnIW9vOW09OnBzOzJWUSN+Ml5JQlBKaW5jdS9rQDBZWTd+QWBAOnpYMnQyfi9kVTl3XTR9I0FlJkhbXSVgI0skMHRyfFBDOHBQaHwpWDg8bX1DNGdCQHt3I0ZXK29lbiQ9bHFkSzND''@;'; put 'put ''SVAhOShfcSZsJWt7JDYlMXo4NUAhcGlyQ3BDOHRlWH02dWtPPy9yLzg5Oy5ePER4UyM0Ry84U3NzZCtlSVBEfDBlJWMoP1VUJDBsXlB3K2VgJDI0WTVzJChvViI6cFlYZE9eLlFuLGhSKW0/VjsrNS9XQiRHX0xlIUhyMTlRLypzZT4mbDtLI3EjUyhyeyNdemQkIW52K2NiLyEvakxBQXYoS09D''@;'; put 'put ''IndEX0p0Wkh6R3VmK1BQOD08Qj1KIitATzxMcWA9WjcxbFglKl15PHZJQUFBQUFsQkBRWjB2Kn04YnA/XV5pIV01fikwTFdPQFRNPXxiOSltcVB7ZEFZQXhSZk1BRWdfN0RSTjhneHtGb1ViMn01fSVHbyM4eUleN35LNUgmaHNGM3EuQ2lZUVs4b0ljYiVmLE9CXzA7KlVsQHtOZzVjZVZITFcw''@;'; put 'put ''ayx6RkhXTHZtST10c25nT0VSNmk/UFAxSmVucE8uNyEuIihaU0tSbzIhZm4uWFFlelAkYXw5OnFQZ1JDQTArNXshTEFENGgrd2JoSENTP0UobXZ0K3YxVld0VDI6KHhqTCNEfWlRdD1JW0x5ZGdCcypJJGFuYjJeP1hWPURudSZMNnVRPE5tOUlQXjUkemJ9RSIzY1tIfXY3WltmeHhnSHJJNVVj''@;'; put 'put ''MnJqQ24pfn19MkxLJkpMMG0xNHBQS155T3g8e1JWSjhZWlJiZF19I1RVJiY1eVJPST8/WC42bDtEd29BVVRSY3B7MVA9X1dYdkdKYT1PR1cudXB+XkAufSEkcXdka20iKnsxUSkhWz9gQDRkY2RbSHcjSnZNaS5WZWZKekpaMUdIPVdTVFdyOWs8K0tIfF8/IVglYmkkMHdLP2IpeGNFeCxvR19s''@;'; put 'put ''bChrdzEoS3BAVGQwLH11I0lLTnQrMFpGS0lPQWdMN1Qua09nOXpQajNSOUthfVhhNFU2Wng0PUVlfkQ+IyxIVlFfVE56ZlIvcj4pOEpsTzV7Ql9dWmJKTVtIUytrZDM7VmclMklvcUxGZjxraiwyOzUzX35dXShDU1dvQGkwYiRzcCpgYnE/QkNDUUdwX1olcCVITzl0eCkhZH1jVDJPe1p9SiE9''@;'; put 'put ''UCoqMF80a2N5XVNUSiQuaFo9bkkrJkFjUChvNlRMS29IRkhULmo0M1hZIyhPND0ldGtmT0MpLkh1NkN5SWUjfXh5SUs2SDcsY1FGeUdGUj1VN1A8eWpHaGciR1dxUzlBKm1eJXh6OkdiaFFXL0w7UW9nfG99JTQxYn5zXWA3VmtCaXB0QmtRZEl4fUhCNjQuY14pWFo3eSsvamk2YDw/ekd0Wyk1''@;'; put 'put ''ZFg2IXg5Yj5PR18zQjU/UG01Z3tOUD56VmNjfjdOUGQpayRdbDpkRTdtXWkoOG0rek45P117cXc9MkZ6ZSVvJFpINFlzPHB9SiolUlUvXSQxdm9AOFpDfmh7NzNtRm9kXXdLRms8Rl5vMG83PkB0NF1ERUNrNnNydUclL0liI0gyNCoweWRyXkk0NT42WUQzOVpbdjpmTmopRiRVcV9NdV1sS3VP''@;'; put 'put ''PyFeUW13O11DODkuaHhzKSFkemljXk40TiZtK0phe1ZMNjZXTGBIZVRVV2ghUHRxRHRZWzN+JWxtX3BvdT1MYGJiXllOPipoZEk/O1J9bzBaJHlpMUlDNVlFdiMjWG53YUB3JTVecV0/ZUsrWntIPC9HSXAkLnh5NFs8fjpyTG4wWkplZmk/XiNVdSRLQFZqeUBYX3FtVjo+PH5zQjModzp4WC8q''@;'; put 'put ''WCQlOmhiOVJzW0UpIWhOZVJkMkdaaWdnKlA+VyVYSlAmUF1ZfERyRnt1fEp4M2dEUnUqd2NUXnNLSkArQDMqYHdNNHYjRlJ4T1R2bW4pRDJLb31HWlpTYSUmPDdbQHk9VUVhJV09MzQsXlRoeT9rcmhIZy9nfi5QeC94L2VZfk1TIytIflt5WiNFYl9dbkkyflcuNjZvNUNdQ1dVVEltc0h5MEA6''@;'; put 'put ''WEEsVnoqflRsW2JMaU5ELGw/T2V3T0gjQC9XbmsjL2IpaXxmejZnLzFTOWQyX0R9Pmc6NCJvSmo8VEJXb3Y6MWAkPm5oUU5WIll9YXxwRkVNPVcvKXZ8K0NPY3pYMCMybmcieHh4RWVMT09+Ll0qXzs/Z3dOd1t6aU1VWldea2xyKGtxel56QVpNdCtPTHgjSUtoJFNEd0RZQCQwRnJFOHUicEsz''@;'; put 'put ''KX5vWXh5bno/fk1nYkhJMlklNHNne3lGR1p0KUIpKjhIVjNQXUdnbltvTHk1b2J6ZSlVa0xFW1NxbFh7R09YSGZ5Qzc5VWdgUi8/SndBKXlnN1lOdXZvOyg7QktMWjRjbVRWay83QX5Pd2dlajZDT3hCNlZbdilsdDxyXV5wTmtrXVpxKVhSOEJbJVozaFtJPUJ5WWtwLGxaRDJ+fXl7eklLeFk5''@;'; put 'put ''ejVTdHEheUllTCtdanBMeVF1K0ozcWFUdzlPLCMsRjppNHBDdkl1Ik9WTEhiL0MiSD5Wcy52fFA+L1leQEBPdC5fRi9VKChNUWVyWz5ZJkc9aDl1TT9PV0dYOSNtQURrTkdfS1hMeVlrdHpRUkF4bEZiajhkXX4sbixxVltxIUQ7VFVUXn5TdkkycyFkbkRERGE3QGw2PiltOCVCLmU4I3hmRlch''@;'; put 'put ''T3BTK1BpNWYxOjIxSTwyZHc2SDV0NFdFWHgvQy5FV0dqVilsI3oiTlpYNjNUaSwsRFFHRU0xU0gkM0NsMEJVYExoUWp6cF1yalhkWzVqaTEmNDNTfig9TzF4KjhgfkZ3RztdPGVdSEtVUUt6aTk4MkpVKXFpKXxGW19UbDF5KT9iM0d4K2oyLGFgLk1iK28ybjVMakRGMnpRJHUqX2EsPS9+N1h5''@;'; put 'put ''aUxQJUcqb1hVcVd8PkJqaEI5bnlpZ0AoPU5WeD9kPlkpJXF7M2AqKDBhU0xJJkkpWU9WdlZ7KUx2W0IiSWVudyZPLispNSorJXw2ZjN+Llk4ImpjWDJHdy43K1NRRHZNWjh3TmNQYX1dIihFRyhRTlE0SiwxLnJwQmUmKV1pKzpPO31GNmJTKGRVcHFDcHxeViE2UU0pX1JLMElzQFJaIkA0c0B4''@;'; put 'put ''P0BTN25GRERzKGthKXllNjZALHdmY2pnQThdOkM2Nmx1PCo5aDIrY2tvMChHYng5fEJ+OXM0JTVFLGlsMk9lUkV3fUMzKVVkTkFkRi9RSl4uJEJOZDxrRShreTtJYSYkUFFqPSIvMX41VkFyYEkrWHddKT9ANDRIJDlLMHo1dHIoLix1bHtkO29OJCkkNUF2W2tGV0BpdjZFSU9JVFlLJX1yW0cr''@;'; put 'put ''PG07cTY9Qyk+V08/WiVGU2pXRjNCaW1hQlFndjNocWBYZlpFdyIsSFdHX35UZnYrdXYxZChSRG9sRF9feFEydnN2P3F6LHd7OXJJQmBub0U0QSlrJVc0NjdeOn0yMmtWYFoqJXt3eEE3NDJIZ2Y4PFhvT0poTG1zOzk4I0tueltxcEtiQFosKyFYNG9RX2Q1KmE0ajJ+JHZqbGJoR0RIVnsmfilg''@;'; put 'put ''OXhBVkU+NkZeTkgpUzVRdztgVGo5dmBgPnZMKjtRYGUranRWP3VSVXM6OmlFMj4xLChpMVdMR1s7YFZnVTw5SVZKRTclYmFpMSN6ITh+UFtfQCgsT0ZGbUZTJnNMbSlSXmNpaT86Vm5eI2dlKyZkUFlRdXtOdUM2bXNWMl4zYHY8KyFVeXEkYTV3M3Q/XmIoT2hwa14xMXpQTSVmWVE/ZW80Oykl''@;'; put 'put ''fiIqQkR+NHdAIW5bIy5AZmklVSgsalJDL3lMa1NTdkcrLlgqVlFHPStwTSlwWU1iYmQ+R3ZrIXxaOmQ3bi9AVHlHclN1eDw3UEpPTEoydUopKD13d08+MGYhP0V4M3k5M1N4eXZVeWQvIyhJUXxVJmVqQCoubHpBU1BdUmgrSXN6VVl6byoqXWFgaF9DWzduJTpLIkE6ancwYGQ9WUghOD84Q286''@;'; put 'put ''b115Q2FSZ3tKfCtfVkt4SkVGZzRpbSReTVRaUVtNI0k9eH5qQ2M5Mj9Ic2deS1JhPFN2OkIjfkBgMShLbFl9IjtBSXhYQWhKWE10P0czc3hPJCtMWkxAQl9UTFRnVlJiUXlkc30yIjwzXT5MT3Y4Qn18a0tzMHB1KSEsU2kiOSlIVWNHeV5UX0A9Wm1rVFJ0Im0mUm9ERHd2aj1VPnY6fXFkdEl7''@;'; put 'put ''cnp5PS5fOFdEN1pwdEluTj9nanhMayJQMks2Pl1ePDMlajY/ZSxiaT9kTChzUVs1RGA+bmY5RXR3V3kzRSVafHM9cGldPkxLbVNjYmdxJklldHp6QHZ5ZWpEIWU1flZYdnhhdz1fOGVuO2xyWDlrQG58ciVKRVcoem1IfWE4W3pFYmpXVj1aW2AoKUBZX09RPShbUilJO140aEZTRGE2UDJGWWZM''@;'; put 'put ''ezI3bn56d1hrZTtyYmg3N0BufEV6aTV3ZTVZRHUwRyYiUzo8NzhhMy9jW3gvWHU/V1dPeTsvI3JZZHchTU0yLzx+XnouS0IyNHZ9dks1bz4kLmx9MXMlRmkmemJoU0x3VDQhWnp6SXhUMV1XUC8zYXQ2bCFgdENHU3R2ZEQ8KylPeUQjV1gkI1tYQkIiYn1bKUVdUiVvfFp6KmspQmE6XyImfkJZ''@;'; put 'put ''ckphYzx2KTFCZz9Zb0gwO1F4Z3s4NGBBbyVIPmVIaDRrIkl0QmVbZjdobVd5P3EmQyNYXitlU1ZZeVlORSY7SyJlOz5seFYkVXluLD9iKSMzM3ZPL18+XiRuWVREIiJacGNTXmxVX3xWPTF4Q2xiNUA0S2RPO1oocl8pMUYsekUpWT52I0RGVVAyMWgvO25oYS9LS2MjOSpDMW16QSM0ZGgsc1ZK''@;'; put 'put ''eVl0d0hNNEZgSjhPLnpfd1lse2RTeVghfEwqWUFKbyhPOX4yaFosNHpQRj8mKmM/Oi88Ui5FUmZaMXB1QzIkKSkxY1hYOCN7JTpCVFkzZSFgOTtLIUA/YCVZL0pDfUJrWnA8Ri49OCE5az1bT306VjVKclk+SUgxV1ducGZAcjQiPDAoQmF8Sn1TXVJTd2ZXJkdKJDVWc2lxaTFkTGM8cl9EUndd''@;'; put 'put ''X1lqTU13Mn54LnhqVWxGSzcpKXI7Ln1UfFdybHF2PSVSWnB5QFR3VnUhfkZMT2BLJEB4R2Qoa2Y+VCZBYUk4UlhtYUw8ZHM5c2laR0craCFCSmI0TmVROEdjeEZYcEQxM3NRKzp8QjNfIWM3NlR+LGFeVHdue0BPXXRyeUx5YjdWRUJzZlpWXyk0fmhtViRlO0JnMVI/ZUA6XyxnNEZpW1hRam9v''@;'; put 'put ''eHV0ey5eayEyI1JqZ1lJaGorc0pOanR0MVQ1VCJhcm0hbDUqeypXZm1gLD50bWIoS0AsNHpkMlQkNUU7MEMiR110YjJFTDxwcmc7byVqcWppVG1VRi5vcnxHP1owJUhyfHx9dG4jfUxuVVFyel9HeTltOmNaemxsUTNXaHxyW0Izb197ZUgpWk9QWmFnM1VmaVd3WEk3WDdANiJDMmYuNEBVdUhL''@;'; put 'put ''MSE1VVYmUUNUak44Xyt9VGFqeWFsIVs0Nkw3Vy9HV1IvU3pHI05hOHtzTjNKPy98WDxbfEIlRVZxbU9pLj9DKkdMcGxYP2h2JTJRMGVvUmVoQkI+RHNkdThwWTxrLDtCfDRfVjRUKj53Vk92eClSMShTPTY2TDtRXX43TFJnZWNYYHRfLDZUdjJkeFAwTi8xZX1VI31BO1VENWJBK3JJcVpOYyVK''@;'; put 'put ''WkVxcT1SISY8WTh+REwsb3leaGh2SXhrfCZzYyx1QFY9XTtbLllUd2BxXnEyaXp2K1pidjxUey9jVVNBQnRrMEwqYGZPa3pkbUp4cTRGb2kqSG9AXyQ/LilkTEZEUTNLKlp5e1dGQVZzMXticTY9NXMufHJXcHRdbW44bGpseHV3P3Ajc3tGRFB+IncpXTNWKDg1Pk1lYjYpNUN6Xms/PGNNYFEk''@;'; put 'put ''WVNDR15EQzR5YlJwfU5pPisqWHZgYXJObFM3KSwyT3lQQ2RGNDcrZG1FUD9vdmJDM0MmW1B4e3M/Yi49K19JLzdvcXo5THRGPmdNRThkPzpKSk8oXW5pZTR+TV9ifUV0NDB1JCVYL353Zi5xVjpmdkpdcUAkN0lyXnhIezg5SCMjanBUOyRSIjhbcyY6IjJaKyM8ZXA+Ki9lSC9SOmZqWnQjKShG''@;'; put 'put ''bjVjUkQpYkBMaHw6KlJEcmQoRnpWX2ldR0YoTjFdO3QybWBCbjYybEtdRktxeSlfW2R8UV5qRUoyaz0xLlE+MzZuYXpBayopRkAvdnsybWl2cWAzL3lDWlYofXdVUnNSVi8iZTd4LFclSz0qRGk5cT1AQ1hnOXdwKCYzOk4/W1JrXTh1a1pUaiw+TixEWStJV1Fba1dhTWpkMlFIK3xHZSp3N1U+''@;'; put 'put ''ZE1hUHxJZUU2dy8iUCtXJmZAZTk/WGRBVGJjeUo5ekgkXUxoTjFGdj1OKjd9LkhWUVk2RUomUzkvTWB6dzZ5KjYqXWI7aSszX1JbJVt2NkM2PGd4I0xVa3Nbeks0YWhsRX5eZSVzO2tqdFBHPiZJdSg8QkcvYWl+eV9PM2JYRTgvWUVRTERDdmxDOE1wNnJjeXc/Kk1kLEUpc3piTE91L0VsOztP''@;'; put 'put ''Sls8Y3R3NDUuZHU5ZHpTLlo5VTdtMHMweytDbGdaQWwmKE8uSyI8YE5PWTJheEVlMjNXblVdcipxTyJNMT1HM0R+PnRGfFU/QGMoISM4UGhwWnh+eXdCd0xxZG5vL3hpUFsrL2g4YmAkcVBRTzhdPHwvQmxiIyp2UHc6KV03cixRKn43RzpaQ20vPEN7dEdRWG5NUW8ubHJsJXNYbyZPSVdxRk1n''@;'; put 'put ''S0g3KlZMLFhIcFkxaUhdeXVVaEhRbHFDQkBkISoiYFp2TWpVaTUiXmslZXhvdkJaV2cieFRzKUBpaHlFb31NKVVxXSJzMjhsR0kyPzsyXXZEcU9RY0wqe3MiKiFsNT9ITjR9a2x+JDR5S0NjLkJCV1pecVM8SCRlJT9WZUNCZmcifWsyT2Y4bD4odyZRU0V2Yjw7NW1BKFNqRilIczMyZi9eZXVE''@;'; put 'put ''QlclN3RVKlkocyN5RUpYbjxMTG1JS2I6QXErXnAwbmw6dXZMX2sxa0FxdSloLHdafCMrUDtlTHpOR0c0RWM1QlVXPVptPHp3NlpPdTZWI1RMSmtUZDE8OzRXZCkwb3hLQUFTalRXU2JOWzBsfHFRNTZmNDtWaTtgIkNvQE12dCJSamFqOH5BYUcjV2AzTiowbmJNT3RLcV4rK2kmQj07Vnc7NTdh''@;'; put 'put ''PF9aNkosenY9OjxnOV58W29tR2NpYzxsLDopKzlmXUxmJk8xSzNnXm9IOi90ei85OjhVSWMkfSUhWTBLTy5zNGdoVTUvKUBWJT0jcDReP2l8K2dIeD42V2lWRCxHKnJmX1pVOGdaKXRde1R0P1B7anBhanlXPllSO3JlX2ZZbkI2YEsvalB3YT9Ic3Zyc0o3PHpvR1hpdGkqMV9INlJSTXdkXWIk''@;'; put 'put ''fjZjU2xodHY9X0NXeVROQEZke0hSK0FDYExFZTFHeStrfi49S24mNDQzJWxWMDdqck9BSylQNF08KT0jQTdmKyJjM1FLKiZzOixeT0wifjBfY3ZlJmZQXV1DKWZWTGVRd1BpT3FMSSltP0x7akdTal0pNjdrXSRRWV81SXFqYSkyITxNeytqaHpDQTBBSFF8Rjw4YFljYCsmISZUQmpVYiFNYnsj''@;'; put 'put ''RFtIMTplTyJbYioqaTZ+VHR6KnsmTGF2dXk4Ni5YVkZiV2xERiEhXSRVTjU1bHRPKT9wN1NIVzhZbS9GfDw+KkxBcmd+Vkdfc3hhKWlmKjZnPWhgMzVPPUxmUy9jeksmOEMqOGVTWjV5KmRdcDdaZEc5OnU9NWsjVF5vLD1tK2gocjEld1NJUyEsfHMwSC5CMnUmaUQsJn1dcyJtcTZfSENqRno6''@;'; put 'put ''dHlSbmJfazBAIUJEZl4yLnFdP19JLj1jQiJPPj5VQEspRj1nZS9yZy56Mm1nR09eSSozWzBXclBMJDFPIyRwbUxvcUNoQyQ5V2h9Q2ZORSVkOz5TeyVyKHhGJTpeZDU1NEpgfk9SLjsuQX1+KVcjSF43MlRyZHlEay89NllANlh9PSp1TWdqPT1HSyxnVT5xSTxbYHJXaHZeS1QyezxZTSx0THZZ''@;'; put 'put ''Vix3NW5QOHssOjZyYVEke2U0LjMkMCt1d0pGRn5jSFRvVkQ8Ylo2X11lKylPbTFdeXV8QUsxMXNQfkNyeDpfQmxHNTcrO0Y/SVgqRGgwV3FOQFBMJHs3M2slaClPRys7T3RRVUpbbXxUdDZdTUdxJlNvPiVhV1ksN2FQUmp6MCIpfEJeRDh3NSMsOGtfJWpQRTQmMndfL19zP0Yid2NIQkZZYzh9''@;'; put 'put ''TDQ3TFdod2hzUHYvRXZua091I1k2am45cEh1eXExUjdFOVF3QW1Me3dDYXtlKlBJXWN1RCp3SHtrOH0+VEVdQUowLDoqJGFzZjJIMDtJUnplPFpjODVXK1VzNnsjdnxGJWNUfi88bz4hKmNXTyZARiR1THdeL1VPYigldk9QM24rdzF+SzUqcmEycVViWzA1Q1NHdXw0OjFhdSJZVnx0V2Bma1JU''@;'; put 'put ''TTwwVyU8d19SVGM+fWVFJVcoWXNDT0ZoQVtPXk02K1BIcSpHcUhIKkZaSWtNSGorcn5kYmo2XUcyU3tqUj1uP2lsdUclTFAsaDJ5SnhoQiIyaXoqdiI/Jkw5aFAlNTFOQHttSTxqN0F6ZUFkd3JoRyhKNm9NPyptaDJDIUdkQkNfO2IrTCJFRHZjTGlUL2FgRU9MWExRPVIhe31hUCteSGovNGBD''@;'; put 'put ''WzFGT1FaZXlVOlRSOnhjYyl9T3srRnh3dlB0b1dla0VXbyZweWdGci86fVAvMmhIUmp0LkZNLnpZNjArdTJSbVpgUS5nN2FAbTsuREEzX0U9OHl1NkVBZ1B7akw4JGBXTkh8MnxeVj9KRVtuWmVEUzBHY3dZWlNRSiEyRVVuUDhPO2VoMTV9YDA/MlRYNXpkWyYmTHIkPlMqUURJKDA2OVFXYDc4''@;'; put 'put ''aDNWcD9rXWpEIncwcDFdO3JzMzs9Wz1PSTNpKDJsWHlqUSlENnRJYkIvLmFdfFc2OThfNCM/XkspN3FEcV85XSZhYjxSTTttYztJJmk9V104Xl9qOWczMjlCfGhoajtsLE9HLll7Yjh7M1hVS0pPdjd6fThrMi9wbmE4cXNjR10xYComZktUanYsOyVCaHBfcSpbUW5uMVtPIjxTenxYOC5vWXhe''@;'; put 'put ''YUVXQzJtYndOViNJIix6d21uaUt7WkwoK3Y8UkpkYlRtQCV6ZWpfazo8UlphVkFVbDVUe0BXJSklPU4hQ19fbHp2fVJDdVVNJHJOXXU9PSpncERZd0RQT10/JWlSaUBCRnlnQ1Q1IWRSdzljOSxgcnhfISwvPHxpLj9hYWpDclAiUzRWb3QsOi58WUBHVl5fdX19QmdDTn5zOT19cjZSSndfdm5I''@;'; put 'put ''PWgxMEtLMEAwMzJffVt3NWBAYj40cWFzO1RgJFBpXTpFRDE5dFQ/KkFUM0RAM0gqZ3lKen5JOV16bzIqIkd7NW06SUEzXnMkPEdrVi5pKmVvTzhzajVjM09Gbi4uKT97W1RZPnpvLkNxP2NpaDEhck1AKXc4N2BNXUpBWW5SSjosS0J3eVk6U1ZyTWpKOSRbd0Qjcy58eCZaPENhZD5ofCkqLy8i''@;'; put 'put ''NEJbc1pfSkZCNTlPPCZPZD9qN1cwKjZ0cGB4OUdqdiRvOGxAeHVtTkcsKDY4T21oPG83OFlCWjp9Jkg7W0BPMVp5I0h8SywoL2pqZUY0UmJ6Rjt2SlZVJihAO0FBRlltWCJhUGJ1b3lgZy4mW2ExKndYJFpBODh5aWg8cXt3ImBBazg8PENNMHg7KG0xPnxaJkdGYzh3Pz0kR0RGMV1ec25PenZs''@;'; put 'put ''TCZQTGpMamxLOHBjUXEuRl9+SWskfGBsfTdWcjFkdEkjUXMiSjhCc31kOXs8JXBAXnU1VytLNGUic1RqKH1zKEpURCNpQUppTCwxLlB+YSV+XUM7P0BMbyt5W2Yqe0xgYUk7Sz5aM0lQcV05b3s0WWMwelM/aExScE5CO1gsIyJTYGIxVEBUUklLa2pzaDUoZnopbyF4azNqbWJ9Y3AoTStkLipr''@;'; put 'put ''TDA7TzNnM2o3OFJRNE5RaktGQEw4VDlTQlR4UzcwISZQfW1RaXU5Knc3dHVxUU5TNFciViU0fjBjKiR9cVcsbTJETyk4UzRHQlQ3cENFZDxyPmhiblohJlYjKURJI1NSPDtxNnIxIkF1WW48VGh9fFV6dz1dY2NVaCY9NnRzJDJyQ2oiRTxHPzZPISl4fGpLUmx2LjFFTTx2U0tLPUxkZj5uKm4k''@;'; put 'put ''LCV8d3ZrRyVeOiYrYWIibWhEak48dEZnU1pZQHxnPEdbe3FQQV49WzQlLnF2aSxTPnU1TW9WWG0lQmEpTTYycUVgeHZzOUJHVj95bDYsOyJleDU+VTh2RVt9enB0bk52IzQ5VDNwc2Z0R0IvcDZbVCJ7Zk1eJTB0RjRtLiEoTUlxZFl7Z0ZRITN7N1EvJTBfRTRNdWYlMElYRWFQeld3Wz5pSFtE''@;'; put 'put ''UzhXRXdydHVeRXFKJi83PyUhZk1JNyE/TS5FOS5nNUpRcVU1bSpWcU14ZnF7KVoobV4/YzZOVDwmR3JVUm0lTXxAOTpzcHMudkhLTWpQdmwhRD5qL2Faai9wQ2F8TnRFPSlTc2VKSG4lRD1daG0qcnBucXZPSjdeV15rbT4+dzF5TlAxXWJiI1p7JEJXOWk3L0EpW2N0KX5FJFtwKmtdNyp0PS5t''@;'; put 'put ''Yk4yKi5NW0l1QmdjWXx9a2NWVW43NltafntHd3FhYUBvSXg1N1d4cl54eiVVRng4RDU4Kj1UUFB0YmlXOntJQEErWW9kSiNKQXhSXl8vYyRUUXJtSCw4Yyk/TTkzfShdfHZUKUEzNj5xY11gYX10YGoqInZ3bjkqa0t2P0xCNjQ4RzxUNzkhUmtReDlwcVRUfEYlNSVjITk9NjMldXIqSCNffHJI''@;'; put 'put ''PTlMTTg2cn5tblk/NTVqfCpHXntlXyRNbCRvK3dlWjI9aWBESU5BeCwqZ2gmd2JVbDp2N3xVYjF0WHNnL0UzXWs+JjRqKXVmREwpLzJRT2Y/MEgkek4sUS96RHNXcTY6OyZqbW1URy5TaUxDO3MlVGM9IWMveHpvM0g9Mkp6Ul5ETCY5ZU56S2x7byFRb30kJHxteSlaWCV4cFJ6UD50NHd1Kk9D''@;'; put 'put ''enpZb15pcCgzSU5WUDFMX2p8N2N4aFZvaFZ2WWF+JDU8JF1XWncrUT5oTlQiWE11RWRKR1lHanguVy9WSD9hTV1nfSJ8NTdBQ1cyWFFfKlpvZWhzLyFaRGpWUFAjbiJrVGF6SSttWiJeYGYqX1Z6Wmw7aHhWeXdSWkghNz1aaW1AUmIkSCJBQTV7PlpyLkZbZGpUQD9Vd3VFMTxDSlldYF0lVzMo''@;'; put 'put ''a1FeP0tAPDprIkpZMTg+U1t9K2RnczRIPl0qV15SSjhgSCE3RkBiUW1VOjZrdm87KGIkNHk2QU9zXTJzdnZpdml5QXpiOT5dZF0sNyR7OXUmNDtWX1BbSDt8V2w+PWEsKWddOGd7SkgmZGBjXnVsZXAwJDRfcTp7eG8uWURtOjFHQCF1OV9tZT5ycTM2RmJ4T31PJSFTbV1jWEV8RE5UWmNdTkVw''@;'; put 'put ''ejEscjd5NUVVUFBAN3xBfWNiZkNodzRTaj84VFJ9IWxHc0x9WkViSXlMazN3Nip0P2UpS0tacm5RaiJNSDpdY1ImbVAyK2pNYSFXUkZURjFqIi9PMHtMJWg6WlNbNTB6ZT5ie3daM01OYF55RyZ4ITRDdEhfWWIsfWZRKCt4O0gvNltkLk1ge2RwImM8RTE8ajxGdTMxdjRdUFB+N0tTUmNbYXl0''@;'; put 'put ''NXZMcDw0M0s2Mm5vfUcuMkw3akRCZm5dOV5bW21CL0NnYVc6R3Q3M0BIdl1sUEBnfXR9IUxDfiVAVTYkKmRDZytZaXprJn1TQEIrJEU1YnMmZWljWjZmSjJTI1IkM3xpMUhCZmFIMF9aaG1KIXhCKUxUYiZIR3tTVlEldENqRnRWWk8kakgmeVtrUCFhTF52KU1sUixJZEl4NHJ0W0hgLDUqQz82''@;'; put 'put ''R28oa3lAYVRnP3E+cWokcHZaZiMzSHxMYmI6SHZhKm8rQm4/cy4wN0Q+IWBYby9td0lsQ1N3P2hGVG5+QnQsUCV1KixCKEZtMmZuaEw6I35DaHo1KDhYfDIhNUdjJFtiWnR8YkdmQUBkWGFedDs/RjdxODR7OEYhWz9xT1dDXjsqZEJpQlhLYUxAYEA9RDZ8WEMiIzNxd1ljaH5iITsoemI6cTFU''@;'; put 'put ''OSw7X2NMSUUuOFFnczskR1Z+eEdMOihreChMOCpdP0lmJV5LQyxuImtxeEkieldDeUlQQnF5Q2o+fjJDNFVER0lmal8qOkskPj0pLD98b3Z3KSE4I1JHP24sR2p8aEFDPjRPSklWT3tHQXlVfUx3W317UEl+YHxfRVpVR2xISV43clArdmYsfHVSe29GfW5lW3NdKSpMMDdlelo4YHMiSk9YPVJe''@;'; put 'put ''SjI4cFklNX05RWx8UXY9OjB8JF5oTGhKRXJLaChzZWUwciV8S3RoJFlTNlhGaCtrZSxvJSVKMXsvdl1fVHlkTTFBZWliOSFHLHBtKDhgbU1mTiwwNFQvZH1fXmJ1TmhRcVd0Yk82YHVzN3F+eWI0fUU+NVNHbDlUSFZNY3gwMVZOOWwwOyluKGtIbFU+fS9qaXRQKldXNSZWQUNmdzxhR0QxeXwx''@;'; put 'put ''Vy9XJHQ0US8mb0BnUT9HMGVeck9rdjh5aTtISXQpZ1tPXzs4Nm97UG1Kb0wqQCk6VTZ5TDd9KFslUVJ5PTo2cjErfU1GWHUxL0hHfWFkPmErLypLYGd7SlgmJE0ybHxfZHlNN1JONXl3ekNrKjpqWFh4QmQiWTB2WlYoN0RhcDYoI1doUT96M2ppUEE1JVUmdCIhVkxrT1csKSl4aXRyX2E0cWo/''@;'; put 'put ''LGR+NXpfL2pQN0ZDKiluXyN+RHA4Zz5SJmIrYUN7Q3BabEdqKk9DIyl0dj84YjMhMGAqMW4oZHR4eCI8XXBxdGZlfGFYUyY4RlV7all1WE9eZl0uNmM7Szp7V1FMZzcuNyNNWk5XdH1JK090a0dqbkQ0c05lNT43YlAqR0o2PTNKME1nfSt4c2U4alU/TC59d2VXNiw0PD8qWmBAQEdeWDtHanNd''@;'; put 'put ''YFpwLDpnfjQ6T2VEKG5JU0FZP2kxfG9vTkksb0I4V1BISDp2dFJsSXssL1R7VX5WfnVJNz1ZVmtgND8ySFEzL20vTGddaWJOY21xV1BRd3ppXzNVUDUucjFpckQlMGo6fmgrWmdedjc2dSkpd0whQllXQ1FMWV5MaW1FZyRsZE9McWBdfi8xVlJme3UyaElffSZGMWghbkc1L3olZ1JCMXFAQUt5''@;'; put 'put ''blB5eUZUUkd0fSEsJXgrTGAsb05lUGMzVExOYywoMXI1RzkpKihBcCUlUypOMUssPH0mazkiJlI8Q1R2eDltJHpjKjM3QmNVPElmQzg/K2FldHcqeHN5MDBRZUo4bSh8ZEgjNjgpOj9tKH1jSkg8LmUqYWpHU3whPjMoNXhMVkthPlBlLDpWPFduT1kuVmZTMHlyV3F4dGQ3R1Fra35MMD9mR29H''@;'; put 'put ''MntmWGc4d0NUXWJPcy9pSjFxZlpRbjIyZTpjd0ZXUj1aWW5sO25DUWZlUGxkJGtTOFhyeXJ9SDNoKV9AVVtjPVped2FuQHpdXzA4ZnFYW0d5bkAzL35EfFg2XyF2ZjN+TDliImUqLGN5e1AoQmBJRFlZKmVnM20/Z2ZWQjo6by4ucj1WeSpjLm9ZbGsrPiFFInZsQ3FOKCF2VXV4W118MGBqY05P''@;'; put 'put ''L0heKld1a0taSF0qYDFgey5QW0J0YHBkRXowKWlRfGpPOX1CQUNMKVRkYi96bmg6KWtKZF02Vlo2LlpKZVNlQ1RUS0lUaHZQYVFUdFtsYTA3TCE7QitVOkQ7OiF5YVV4JkwhKlRIKjh4Jjt1bHM/azQ7WUlWQTE4QyFqTnVfNTw0ZFlvd2R0c2U3OUZsSX5ubztsdHBdSy9OPDwrbl08b0o4OGA7''@;'; put 'put ''SERnW2xycU5+XSNxMEx+M3Z1NUJsfWpMVC4odlZ5KCFac31ATHMmR0t2fE0yPFksJlJIUCJLRnxvLjw7MUZKRll1fEl5NzZUWiplXzwyNGFXV3pJeWt1NDBCV2RNZVdIPGxoIUNkLmM7Rm9DbjI8XTAuQkp8Wm8xOkdEP2pKPEp9XWlseSNJMTpReGQwJl1+O3dlaTgmOWpfQ0NNeUVuUHc3JXFB''@;'; put 'put ''KTxVN3hgTlBkbnBXfkZGX0JrNHxKfUYvSmx6ejFPJkF1R0c/SlBWNnliQFJIVD8ran07S09WTlI/ZUNGO0VJaiYrb1U7PHdWM0hDI3JRPzNQSmA9OiVXYzQ8bCJjZTVyZi5NWkx3M1d3fkJuc3lnb1I7MVApYltCJm0scS5qMjkycmd1Ny9AVUw2Uk09Mz52U3l8ISVPQyF0XUpkazAzdDFPK3pS''@;'; put 'put ''V0VQPnU8InZUMGNsP2FebkY7TGFRJXg5X3Q/bDQxZUVFTnx5STQqMTZqIkBaSGY1Z1paVHgmYWZiSCRVU1kqSU0hbyJ9MX5BfXVxQFk6YkE/fkV2STNtdlBPLjBiOk0kbkc3RmYhZGNhOjY0ZHRuRnVwVHQxYDxSI2p+Ti4pP2s8VjVyKXRePFc1Pz4ydlFJRVhbRls0Zm0pP3JwNiQ1RDk5Q0Ff''@;'; put 'put ''VkZObFJyMzpyM2Bmc1dHcDhMW3pteUx2PU17S3l4JiNtVVR3WmVKdTRRczdPeytbTjR8WkBYMnhuQnE8KUZFbGMlMlMoUlV+OHFZXnl5dVYrWTo1bzQkfHJ7Ii5MajYiendGOGYrYWdSS3dsKDVwP3R0Y25gSU9zJEdTZkdeNDslIWBNYEdSNXx1QFBbSmlJUXAsWjNtQDArfWhmUkgzITRKam1E''@;'; put 'put ''N2pOWF1rQj0yPT1Gd1cicXooc1pha3N7L0ViNF50Z2pyPXl2dTNXJHo0OF0mXWZDQDhlNENFZVZQKWFJTiRMI2lUNFcyVXN1eyZbZE4rVGpfJW1jcUYzSXcyKSQydm49Rzw+MkAwPV56VDwsako3SF5tbUwiRm48OUM4cCMvJTAxdXQkTmo0ZSozVk8hbSM0Oz9vcHk/Vz06USUsYF8kWjptfiR+''@;'; put 'put ''aCFdTGkjZmMhb3F7Z3s/I3l4fkZvUzZ0QypGfFB0bihGKWtKISkjWz4mJDZgOiFlOFdCb2hSP14qYTpIemVMUEorTUkiMzo2NnxDXURFTHxqXVI8ZDZFP2I4IzJiRkU8blJASCxveDMiO0IsOClkeGdSfXsqcUUoMUBkNiRSejVGTTp0RXZrdEt1SF1vIzNBQURoOUNIK2NvTS9RfnU5OE42e081''@;'; put 'put ''a3RhNlpNRGokLngwKyQhMkYvUVR1W282TktVMjJvTTxQOiRTPkorL0owMC5ITiErfShPV0lNSXVAZShPWiNVeWdtaEFRJjdpJl5CblVfREgqMn4mJlQqdzhkd2JTLGA8ZkI5YjcjR1VoPkBpbEshLmsmUyVkZF0uXVVHYTR6PVo9TEhKT2NvWWZsbWdsV0JAe1pzYVNQKiZLVXVDIzFpQk0ocm9n''@;'; put 'put ''KDVFal92PmAlJkNDIl85Nz9UNzBxOmBCdkZydGRBfGVHS0B5K1dATmcwNV46fG4qUnsrTTVGSH1bZ0xSSXZ8eG0lQm9SLGYkbm81SmF+ZDB7KEBtTG5ZbmE5eTE9bE9ReS9CLkJ3VjFFVGVdMSM2WT1tN04wb1kiZ2gieG1SUlBaYCNNdGUsU0hMOmNocyExWDBRW1MxY05rZjA3RVpWODxvUnQj''@;'; put 'put ''RmJRPUEqfENfZDdqOSZbNng/Xk8iKmw8ZjdfXTorVG1RZzh5dDppLnNpO0EweG9IUkAsREIrR0xDZGx+bDxhdlR5W2Uyc3VTZ1prNm9QLDU0NHhoO2IicVlqQDVaLitXXi5wLyRRcSMrKT57JXZLWV9hI0FHK20mVll8bkVDOyp6UEwjSmR2IXxBMXluUUJKfSp0LlFOZD0pU1I8LmNGSlREZz9v''@;'; put 'put ''IXttOVgkJXJJZDlqOW9keXJMMzt9VSg5VXhHcDNaanBQKnJlVj9CIlBZZS95ITQkWj1qT2pMI2A1PGk3MUdSInJYWEFzfXRvK0tuUClPIV4rNDgrKVt2Tkt6KzB9PGM5ITokUkY1WGAvWlsqRmQwTU5QUDJ8VHJVTlJtNVUzQkpzcDFUYFglZGZlUkFhN0hQWGtPTl54e14zTWsibE44YzVIbEZb''@;'; put 'put ''Y1tvQDgqND9wJkt6JmM9KDt5UndMZF5zaGVjJFNDdTRLUjVrMUh0aXg3ezQufC4lUlZPZilUIUM5TSFCLyhaZjt9WDNYcSIpKXNRIjRrNEdIMipoPnt5JmZ6c2ZVIyhhfCR+JCk+cVpTUzk1c2x2Wjl5e1s3KFMuYCRJVUs6MUQ/YDFXa11IYH4mNXZ1SX5wU297SWswblc9S2BPJmImJTI0Nyo6''@;'; put 'put ''Sn1gQEtdWG84N3FxYTg0MX1EXj0keStMNHMqT1hAOmh2bjZrdSFney93Mio6WncuYzA1S0dkTWc9cmJXQzouRnFlbnZmMyEjPEcvQWAwQndLfD9UIXshaEkrNkk0RkB3VCVJVlJQOj4vSEd1aGI1NHQ8MzZCJjo/NEZwY3A7LDIhZHM6Ukt9PDBMXXtMNW9aVSklZ08pWkZnRHQvRWwwJTFIYXpx''@;'; put 'put ''YmhObGl3SEk/TDw/PC9qQkIwYU02WTk6a00+Sn0vWSk8di4jPSZ4JkU0RSlNfVtkL3M9ZElEX3pNIzdlUlJfUkpmTWlSNTNlcX0zaj1oLyVCYz99YmY1RClzNEl2OS5BLmVvK0JWNUZ0UDFxPEtCImIvZCh7V1EwSkBdNSY1NjNqWmRPZ3s7c0EiOkUofDtqaT0wRHguPD9JeDQ6WWBESmBoQ3Yy''@;'; put 'put ''YTdYYnElRCN9WVU5P3UuXm1bfTssRGdqP2FjMG94RVgzdngqXjFqdy4wOCg7TlJIdVltNkUlImEqYzRGTGRCRiNwPFdBUSNfJSRsajlxM3Q2O2Z1cTZsKytyU3dJe3llL2hxdGRoSjpaRGcpZDVbTjJXUng6TixbMj5MRHdRbVo9TypYMWFdd0Ywb09bY0VhRWo3UWtEVjksZyo+RiRaZTtGWUF8''@;'; put 'put ''KWU3X2lPKFRfJUJ8K0UjSSFQIllCRUorOU1vImFtNisvTVFVOnVTTixLdzRzUCRsR24hdUl9ODdKS3J7K0ByMmkra3grVS9hJnE4ZHVAfVEuK1VnO2xrYywreG04SX43PldTPXxlJFNjRElweyRdRExUTF1oPHFuTlFfQGV8fWMhYl5wP3p5VkgsNCllRjwjV0hCVi83TWk+cEh3amhlbSxZMSgy''@;'; put 'put ''NndgelF8Smgje0clfXJKdFhXYlZLfnswXWNeIWhwe193d0pEYj1FUSZtTEQ3IXxeJkFNIXBpXlVbWiZteGJnWFdvSEpKflJhRU5GTi81ciksRl44Y3NkMCY9fUxYYkliLDpxXjFRVTZFPjxUc0NhdmU1ZlI4YWZbPHZpJi9gUzRyMH5hfHMuYUkxUUhLXVUuTDVwMUJVa1heVl5vMEgjSXBQfl83''@;'; put 'put ''K2k8M2lEPnRyWVI7XmpTYzY9cGNMdzUjbzB8LF0yMT9QLzplVUh8I0k3SylEWHRhJnI7Yzd6RjM5Jj5vJDArdTJuKy5PVUZBSkg/MS5wT3k/eGorVVpZTSpoKEUwKlI5TSw3fDkpKF5eS117RTE8Lyova1puZGFNSXYjdTpbWzFMRVVSR2gibCtPWzZHemYlT2MsXjx8RWldZWZQK2tSdWAqLlBp''@;'; put 'put ''TnU3ciVyPU54ZEBOQ25Ma3o5Z2J0XShdKGkoKkIuay9yPE9zOk9mdXl3cC86c15ueUN0MlF2d29bPEk2d1U/S0NkfCVDNFdMb3k6TzEjNjlUPygmVHBTOWM3TF0sfnlBV2FfS1p6W0tnTFlJIS5Hd2dbRnJMbmFCInV9OU4lNX0sdnRWKjV7Y2RHKjtnTS40bUJtNHlUU3c+XksjZ3xPcEJ5cEtj''@;'; put 'put ''Zy9uVUNDWnVbdS9rK1BXJmpSMmZNNUMkWkpGTUdCIixFPTw/enw/LnhDRzp3PFolRXtxVmltYiExKDZoe30sNjZ4aFU8JXohdSllb1ZZIXomU254JUprVj5yKiMhMSwod1MrP3gmNnNPakcsYWd1d1Q0NnRuSTFyXWoyNDlBK0B3RVFERXFFL1sjcE5STzZEVFdvVFFoRGhLeG9rLnRaLDswYG0x''@;'; put 'put ''ZHc/YHFTPXd9KkpNMUpLd30sZyJ4UCQ2TlVAPE1POU4/aWh1aFAuS1Z+dVIvMF85b1IvciVyfjsrUiFHYl88OlV8Q201NS9Ua211LmxAYi86W2ZQYjwzaGVocW52KC5XZk5bW0ZhaGxiUnA+RFpLRDhZbitJIj9pS1F5SDZZYj03fnNWPyNgdFpAbX47KzFGKWhZemNvb2NhYkdsaCUpXiJscTIh''@;'; put 'put ''MnMrK2lDc1ZXWzpNM3NhSysxPCsxU2QjbypFWCl4dGJrQDI+eF0ybllQXWE2NEFFNXNtSThdVGRBR0l8fj5Rb1FPIlg/OUwwZ0NeNC5jSypORlJlektyZUhiPXMpSTA1MzhuQDBaI3IhKyU9SCprOj5FKU9vNTJ2cm91VCNJUnNVUzc6bXZ2WG47SnJva3F8JUB2R01hI28jekpqSFR0MDQhaHdb''@;'; put 'put ''PyJIY29KfDAuRFEleThHMio2OmRIOy91cWMsSVReYXp4ezkyMl9MaDlgd2g6Q2ZWPWh5T3gpejBbUlJ2YmsuXTdIVUBTdFtpOWJnbH5afnw/L2lPWi4vLE51Z3FJOilbPysuTHlWLCFZMH02ZSMzVCxVWnBDbXo2MWZmOVIpdlFhW0Y+UjRKcn1VTk9jfXhRaTdNMUVOPz9CR3VqKktYJitVUHlJ''@;'; put 'put ''cjx6Z0ZbeDhMa2xpMFVjaGoudHt1QmtfX08iOT1raWBFLyhCaX1AdykpOj90eXR8TFFhcG9wUzg5ai5sYlZPMDUySGhKJTZEQVBLeyRnOVYpPC4vKXJ3TzxqKyMqPXh+MXZIaW5GWE5hcW13a3syPkNoQT4sd2lpXXN1KDFFZUlWSHU2MyYxP2IzUH5Pe0J7bThaPGRuRkdNTyQ7NVJuODt7RXQl''@;'; put 'put ''WHdNdD5GME4xfkRxTkkiJiRzLGwkOFVgQ1pvdTI1fldRWCs3OFRvdmd3ezNAPmE+THAoe1Y5TDprd2ZZWEkyKDR+fi4lbUwyIzFnZl9+LzU7PEVzSCJDRGREeT5dSV5aN3VQcCxldzlofH1bbCwwIWZ9UXRdeyhnU0N1VjFqMFlORip2d0Q6eGtCOzBuWzFBcyxbYEFTKSxKbilAdikoVUAiVSYx''@;'; put 'put ''e1k1SE9ZaTNzYTM7bGlCMjVfIiMvSEpzI0puP1tFUFRPTmpYS3l7XktbN2NJOSRYS14mRHY+RU5NQ3klM3tqKWo/N3FLN31JfmxsXl1deH5CWHglekRsdUJZRzNpR0g2ZS96K2F9dzZzREpjUW9yKVVfKVVSbUE2eC9hc0tjcFJbWTxiZzx8XmZgQGVXNztkXXkhZFNsdTguNzBGKGRrQW9JKHl8''@;'; put 'put ''W1VfSVhWJDwxent6ZC5Rdm90eXcxZVsybFE7ckk0JkQ6UWFRblRUNzYidHpzSjE5fCZqNGdmfVtgRm1NeXk6aFFqRz5tMjo3aUVdO148Ryl0cEJkZi9tInV+fExkMGhuRmFHJG0+WlB6LCNIOTwzNDcvei9fa1h6Uz1yTCxsdmRGYUh+QXNzIyRHbTF6aXVKMXBmZ0xzVUlRLigwayMsazJ1eFJ8''@;'; put 'put ''WEYuPVI5K3c8TllJK3c0RUJvJDwkNHpMSU44UF41MG03NlUmeDtRMlheXV5jQG8qVCNnXkIuKWJ8aGtBLz1vd1AlfWA9KClZQ0dTcWo+fmtKU0grR359LjxSIz9admUhS09FRlF4enFwOiQ5UmE+PygveTo7JSN7MyVZejMuX3UvMzVnTXFVMTdANSRleH5jajJOYHs1XUk2PnRGM1cvJjtzN25h''@;'; put 'put ''PDlCayVPUCU1fi5xVWBmXVpQQTprQ2FldmQkJGs+XlI9WWQkTEhgIWFNSC8vdEFWbiopdTsqayxDaVtZWnA5UnRIKXhLV2skSiJDdFV9LDJLa2VtbTg9RW53JHZ4fnN+ZG4jbTMwZUlZOjdQTGAhTz1oW3Z3MTM+QnFYb0BtO30rKDlmajZ3JihvW0NXb1N0QVNJdS44YWI3aTJ9R1QlRmJtdisx''@;'; put 'put ''WzB7NztOP0gxPnpgVmFeM1dDVm83bGs0OXImSCtWYSpoMWtseGE2W3p4KG5oIkN9X3xUK1k2S0AzQFhtRl9LYjg+QkJAUlhuWXhycCM6cEZTZzVfYkouRVhIV2xtQTdwNE13WFJMaDs8UlsoRk1UazR1Om9eKjFjTHYwX2Qpdk88IWx1b2IrUklFQWNlbTQjVkIrJFchPndMLGBoLyVoQkhGRFZL''@;'; put 'put ''SDZpTUVhbHhNQ2pzX3VPXSUxJW0lZjQiLD9HMUN7SXJeOWU1UW9YflV1LC5Cc2FbPCYkN3MsJEFGSVVEWXFgSStfPEBfRk56LF59ZmVlKGIvYkB6fmdaVT97W3hSUlo/PmZhXmhoe10+alZZazM4S0c3O1hpQ3lkfmRhVVg0OFRadzBNb3g3dmluKkN5XSExW1ZCMyhZQitPaSF3QTZVOypqPnt9''@;'; put 'put ''V181SHxsW3s4aEwrak87PHldLFUoeHdoTXJVU2coUEQzTlQ1On5Se05IPDdRU0lzQE1laXB0SG5rMT9WPX1XKklCfUJ6Vi4vXXxpVElpWl8iKi4rQFQ6TlRvVnFGcSJbbihMemtWNGpZSGdNUS9DbDVZWnVEVEpeZXVUPDFWU1lEZkxiaExBY2F3WFZRWj07UVEqNlo5OlRlMnlFMkdVcihxRykm''@;'; put 'put ''MXojWGpULyV4LjFZOG82Mz5fWVd6Vk9VVmdkdnNMZ19rNlglUGsobXd+eS8/MXtyJS55cmdzT15Yb1E9Uy9meT8ha1tbU1ciUGgzPWV3NHhUdDUoZ1A+Sjo8MXcvSEdVXWlgY1FUeCRFelV2NGQhKUEjVV43UF1ESlZ5L0U6KSx7XkcpMnEhS0wsOkprcUxARl9MNmpKJCw0L2VfX0ZQO1dAb2lr''@;'; put 'put ''YkYjSjMzZCt0MltFZiosZCNKZkJYdFUlYF4xSCZ8eDVxQkhbPFgzRWhBNHF7RDxjKj5OK2xObnBmMVFtWSt7KDE9KmMqMkw7XW5mWEdxbF12USNDXj03OXEuKzB3PjBrdj8yS1NoOyo9WVQqOyZ9KXshWXhHeURra3B5PSxSbGxXQDp4aUh6dUxIWz8vYk5BTURwVyV4aVZueTkpRTpSVExaTzBn''@;'; put 'put ''c2B8X2NLOkhiMXhPUCV9VWZ8OSlMPjc9WHI3NWdpW0s3bU04eXhPdFQsRDlWdVBaTSR8Xm5CNiMoVW5uZTY1LzRRa2RLOSRrTyZIOFZYUGYwQiVjLmQqTSE6bDdJQC85OnNuck8lTjVfTVo2dTFkbjMzV05ve0xbeV11SF0iOnEse156MyRNSDUuW1Q4KC95VSZ7ajs5S0FRdD4jZlF2YUxqcHMr''@;'; put 'put ''N0QmJX5FWHVUS001ZjV5eHVoPElpLlVJVXkoNzwufTh0Ziw0WFUlNGwrR0p0YDRxYUtBXmBbVEFoQDVsT1R0TnE6eTksLmw5R1g0IUQ7OEcmbGhlRiMlbEswOTlrUH5ST3oyaHdCVXcoY2Y/PGF+T103P180Xz9WIiVPUi58bj1FcXo0UGRtVVJ7N3pxWHw1ZSxHMGowL00zLmM4VSNZQCtMWW5C''@;'; put 'put ''emRUOyU8YkNlKUYjazU6Tk5aPFF3dz1USWhHcHxJST94LlB9WXQ1TVtHQzE1YVhUJCNHdVkkVGBfMklob153fSxuTC9uJjNUMW0/XmAqSmVeP0BdJmhFc1JlayUyJGJhajt0W3UjNWBqdDBETGIwMFF5KSJNOTYsLmNKMFBPS1heIypKLGZYSj94JVN7KGhHcmEkOzNlRG9oSW9BRzBdWk08TW4/''@;'; put 'put ''ZDhETCUhNSNoRHErOkc6N3heJm8jc2Y7U04hfWBEZUtFcys7QzguTHQqU0ArW2ksUWkjZnY2SE1+MDImQEFjW0FpQytNYnJTMjsrcHx2ZCElKm1Mb3FSQywuRm5DOXReWjA+dEtRNihnOzp+ZUduJlZmaD13YE4xJW9QZ21sMlAoMz4lZUMvemdAYGN0IjwhTHlFZVo+K0JHNGlialc5YmNTUVs9''@;'; put 'put ''KlA0VyFmYUFUUEYmQj9zJSwmKyZ8T21JNlIuZW94WHRtdD1FfUJdeWk7JUthbDYxPzdyLll4WEcrO11DcFBPXkVjMnNuY0wzNzNFRTIhNUJhUXNMVFBodUgyOzpbPnpVMH5FT2wkcE4uImlhNnxscDxzQ0B8YyFldkEpNHEsVVBEJHp6WGIvU1puditCQFE8dmAuYypdWzU6Q0Q0cyRJfHtHYDUq''@;'; put 'put ''NlBlU2N1Rl1iL2I9NUQ8PTNNcUJZOEg2ZkwuUkE8K0FGN2hyMHZGaHQ5Rz5LI35NZzNdN084KC8sQk5sYHR5OzhHU1djWXplNip3TzBYVkAhW2xRaFFBRytPcCQ6VDxkMns5cztqQHQ4NmYjIWw/aU5JRG16YEw1KiJ1eEguRERvcjhFbWMmQHoqKmVpfFVyPWhHXy5DclU+YWIjM1VGe1lMREJn''@;'; put 'put ''eXhrVlMiS25DPS5wMnQyJlphSm1lbnsxI3pmUHJXeDZlaixtb0s+ZjJYdDsjd3Y3Nyx1NTpYRWZSXjd2R3MzW0dMNHxHQGw/TkIpS0NfNGZNL2BdaHtOMWN6eEFzWXwkblY1RyR6fis6TGtvKl09In1UUWFvNm1MJVhVdEY5VHxRTyFmbSohQ2B2W3RzQlhiPEV4W3F8MFQ/YU10Iy9uM2tteUB5''@;'; put 'put ''a3ZmV3M9Y2w1T0Y6SkgjXVFQXU9WbTw4JmVXXkU6TWN+QDh3d1BiMSVLUTVMdTlFaFgzXlJifDleMiJ3empQV3xwVkpiWDFuYD9NQCxZayooW3t1ZmpMQ19id21jZS56M20mIUp0YyEyeVVFX350R3EkUE5vP0svMXgrSzU3fCMiTiNlSlVdXW0heGAqaExaZnw8SzwkI3IhTzVhST91WCFjZUUu''@;'; put 'put ''UG9aTj98X3t2cnNFe0N+dk1Na11vQTw3bH4jLjQzdy5UQVErQnN1LF9KazNrJSMyKjIhZF03PVFlRjljcUNraCs0ajRqUy9ZWmhEQn09fipCdWNrfEZ4c2puMD0zWSE/RktEemBtaFVRRElhSEJJPH1sQHZMMnNLWGZiW35rL056YEI6XUBEOk9ISVs8YSVtQk9SSVQzU0pnO24waF55ZkVJOkNt''@;'; put 'put ''QEV9T0JsKFg3OT8oS2k0JkJ0ZmJ0Pk1nfjovdntEMT9FXURLISpJdnBfaStWeHgvWDpBZy59c3dSPUBDfjJaY21CVzAwQDJGdTk4XWFaU2FfNXl8UGZwPDlNdnY5Z25ldUtPTWVvUXguUnwrbE59OEl0PWssWERWbl1zanxAPGhLLGZ9THZVc3M9cTdGRXQmOG0sbWMlJnYmIkslT2R5aUBqZ2lP''@;'; put 'put ''SVpKdEVDXzleX21+ezFAW1s8M21oXV50K2N0Tj1QejcmL0VGNWQuJk1tM25TaD99IWF0MiZ6JGklJkY2WFZYeG41LlZkO1NeQE5hPHo2SDpsTUQ3a1pudjhFZngke0V8MEB9bHdQXWQjWlp2UXhDdzZ0TTl2N0x3N0VUTT5nfXY8SSNJcEZEdjdqI05LLm9iVUJ7V3xkNTB6ZmpEMiwpe1s8aURR''@;'; put 'put ''KURkZTt3Rz1qeXhOfmd7YVA+Rm1oJWxlflNRbU5uOW1uTWZ3aXw8QVA3TTx5PURxSWZPZ1BDP3g7TWEibVssNC81ZT1dfXhHISliQkQhLyI3WzdpbEBWVUpzWVIkQlAwVWN8VW8pWX5uN0g0ZUJ8fGh5fTR3Mik9MTp6a1dZeFIpbkl9PUslZ2xJSCFGUE1WI2RVL1RMYEMjNlpRKW4sd2t1Ji44''@;'; put 'put ''PnhrQFcxRUpoellAXUhtXWRVKzZCSHVaR2Q3eltWYn52eyxGQSl2ezlhSCRdU31NLiJkKyxhYVpyRFByaGlTPyUlTHxkOkNpOmldYi4lQEsvOXhEXnR7PnEpRSZsUlVGQS9qXkAzLDMjM3s7JGVsNipjK3JYaz1iRDFuTGlbY0tqZj4sWTB4cjQwY1l+MW1eX0FNUUVSOzhSJjd8cU8hKTl8Qy86''@;'; put 'put ''MG8hUmdTNV9Gb2Rfc2ZPX3BsJjE7YStuJjxNOF0zMH1OalFBcmFKaV9XY2NFbEduVWsvVnwsK0RuRnwpb15lb2xFQyZtWGBWUlpMIUElaTZFX3tDWDxCfTNLO1FQOVVRUHoqR2Z4eHkucl90QE9RW3I9O0pHW0F9YWEofjAqeHNXaCErfUZlKSE0MEg+NHFrfCFAXX5jRylZZkI4XktaR3pVcXki''@;'; put 'put ''XzBUZT8jelh1L3R1MW1dQkQmYTw8TD1OQDFwQ2RSUTtRQDx4dE97IUBlWyw3KGBRfU8iZ2o2VytWXXVoMmQ+PUtWbkFSNGl8UnpzaERoMz5fUkE5Pll8L0tNNzghN2UjeyhIPjpYby96dS5jRDJaUzVkMGJrfUs2R3I/ZUhEKWc3TW1kRmpIYWlyc09PI1dmRlhlb0B4bipYK0NodFRWMyl6amk8''@;'; put 'put ''NkxBQVJ2THZQKEdzIWI4PnpjbiskfWcpPCMkQEpPcUA+U3A5fGZzSzRxR1F+LDZRM2EsKSE0TlMufik5dWtpKWlwdlZbWCVkJDxgSzhQbnlXKlFvdj5gYSJVezx9TFI0aCxfOD9ZamdrOkRTe3s9THQ2KTFddyg5UEFnVnYuOmVpMShIVnZVKjg+bFhNdCwyY31XRSxRUm5YT2FeNWxKZkYmX30u''@;'; put 'put ''Z1FKS19UMHxtfjByajw3WCs6My5sdExWPERKPC8jXyk3fEtLa1FuT012dS8/Kkc0antOcWEhSi9lMURkUCQ7dVheUjBuVTYuMiNlX0QkMDghIzBCJSE3TixpdEA8Uns6bFRyKyxGPkErIih0Knx6b3hlRSVqPWF9OWJJJl1VSj9UNloyRTdsajtGKEBvbE5EXih+KyVsOl5MZ2IuX1ZjY1U/LmNw''@;'; put 'put ''YiF4Tig9YSNWQ1p8M2IzPWM4Ulp5bixHW2pzVndmZTxVZFl5bWJCR1RYSFMqaTRbI2l9YnFyJih5PVFqaSV8JS5FKmdIcTp3WkxCUzNxTEl3N31jLChOUFdUQmQzO3tsOXJkZy95ZCxGUn5uSW1Xb3x9ZnlEOHkweEpwLCxxR3UhM0olTz5beFVCX0Zld1EjTHAzT3N0V199cTA1JGFOSzlYZDBB''@;'; put 'put ''PHFsfG43Y1JVKmZoOUp8LC5OZkhCKDZadFk5UntWT1l9UzJIZXY1diN9MGAlOyV3dGVkRDxbal0yfGRTR3Y7MlBffnZoLzRYRXl0PG1DdGoidzx3Vkt5U2JjTzV5WithZVNzRyRkelIzaDg6TjVQdk8zQEtEQE9HRjFxdCEvelcuITpsZGEhd2c+N3RJa1ZtMVtueSpeRyw4TDc1KF9bVExPbVhM''@;'; put 'put ''UmJMZD9CWCtYWy98T2hCSmw6QTxDS09zPyRtXXlyfU9RKkhZRV9xZig1clNUQ0Q9ZytkVnpUV1pxdiYme2VZVDZgcXZ8bkZZMX1OISxwKyF6fkxDNXZHSFlGRl1HbFRpdWVGTiEzTEY4KnIhOClTTms8L25pejMzO25Semhud29gSl4oNkVkcjFeZzFMNzp3fjBWY3ZUL3ZkPk14VDVjLigjL0ly''@;'; put 'put ''OXJ9anM7c089a18+Ok4+Tn56ImJiY2ZVbkVjQT1nY2RCSVBaYk0vYCwuODNgJkohb2tpcHt8NVFPRyslRmthIjtmJitKSDxQKV9qUE5ZVUg6Ymw0JG9ZO2QoNkUyS2RjXldLdGMpPEdsOXM3dkU0RnpGSmJqLHI9dnxRWzQ1UzptIT47YDojZ3w4dEVXJEM4VU80c1MjKyk5Jls5PUEhbzVIY0Ux''@;'; put 'put ''YyVaLm1OaV1Ubyghbzt8ZC9lNWFMMCw8aj9hNDRWbFNnIyRSL3NKMyk2LCpmVEg6V2ZwJk1kPjFeSGllL29vXjUlVFlGZH5pcU4zJCt+IiVOa0lpWjxXKnFOVmU+XVdhUzpsNTtpM0liRXVFWFZfbkU2O2JuVS9bXmc/bWM4U0R+UnhWXjFTa2d2Zm9NJiYsVXFSL1Vgej8hUml4TkxSYCNFXj9R''@;'; put 'put ''UjkyOyxxbDlgNiMzW2Q8S1E7eH1TbTxBeytEdEJbVF5JPj81a24kI05HVSw7P1BKLHQjeF9GVHN8PnxPOmFuMXt1e2pRalFjQyFXRCxeJX1oYippNlg4ezhCRUp3KFQlbEAhNG0vX3Y0IyhBZGwzTWkmaGZlO08mUVYoUz9lTmlRWzFVekZSM1skMzhyfG9FckMjTzU5dlBZdHA1UlNoNn1NQiom''@;'; put 'put ''UFp1NDVpfXFxLEV1YzBWe3A2MnA/fFEhTS96NGRlW0lsLCRCQGYlc0UicVN3SF5qM3Z2KjhQK3leKVZxWUNafVM1TXJ1aUhFMF9ycjlLaUZbc3RLYHFRPnoxIz9gLDErRHBJTWx8cXc8aF4yNmc2TlJtNTtxMih3YC96LmBmLzIyK2g7JHllWSwzdGI1SC5qSSs2bHpwVl0oVEdxZGBiaEFjN1Np''@;'; put 'put ''dU02QWMzWGZYcik+R35INWh4NWA6YVtNVWs6IzdddSo4VTc+XXlHKUxXaztzWG9GeDBORFFhLitpNUttVjkkZU1LSH1SJEhmTGNqfEhOQzd1dCliLyVqODckPy8wQTk1L0E5Kjt5UkJtaSkuXVtFRSM4LHBrZ3U+Sld9ITdbWjwoVnhDPHNvfkZHNHx1dUZhP0h3Tm84RkJUQHdPNDlNcUNeYDUo''@;'; put 'put ''YmspP1R6RzN2JXtdTmc0aG96Rm5MQzNkRElUQntyXmJeYGdYMiVrfWlTNXY6UTQ+Ty5EY1A5V1tOMSErI35IVylIfiNLaEk9U3FuM09tLEYyX3ZrZHJneD8mMnw3aGE1VTVwfS4zKmo4cGMpQXBXeTE2TnpGezVjdjFzb3RHRGR0RUMsM1lOT0RVdl9vcWtXbzp3UnpBR2FTJW1obzdtOWdUMj8x''@;'; put 'put ''ZGJ5NzY+N2ZadV5jRGhkR1c5akBzUXUiXlBZYVJrakh6Zyp2X3V1OE1zQyEmfj0+eX1vKFl7WCZrek5tLzptNGE5clArYCE5JE0hRk93QmdxKywpKUdiMkoqJV95S15aZEJFOHFuNlEhdEI7bD5LS2lsJXpEakxLSzRSLi5Jc1N6cXp9Y1twLjd6YUohUU8rXlYpM0YlTy5dbV0iaDxbLzhuWGRj''@;'; put 'put ''PmQuMClKWzMyVyZGN2pSSyU4Q31leWp0e2srSVJqXnJHMitNUkgyRWUlfTd8cXdaJjBYUl9ZR01bMkhnXz9FR35wVkJmMVZ0M25WMUJANnxbLGBCNSY/dFdtTzVKckVEKm1fXlNAQlA6YTc/Jl93Nk5KTXNfRyIhSlMiKmBfXy9jW2Y0Z25idy4uPUI1fjZ1R0VUbUpiMXpEMWxNUmRxOS4rSSFB''@;'; put 'put ''PXJ5MTtETVZjRGRKYk04X2RYWD0vUmB7SUp3cW1DNTdPSjxlKyUlS3w7Zy57c0hwfmROfmRwTmpKVn5nMk1dSXtweX5SWUBwPjcjVXh4bmpJKkRlZDhKVl9ZOHhTXWYpcXZmKys8Wz4rN2NbNGs3V3VifnFCPUlZbSZWbks7KzZCVzVvfXwzdWRZQTE6UCRyZmA3VStpSFJjNV5VIl0xc2puPHtR''@;'; put 'put ''cixLaUhiUSpaaWNrXXAzPDgjPzlJNSIjUFdWRCpUMj82W3A4fitXZHReNXJrO3IyNjFCYUZFO21LNDddbihwQzQoNyoiI1A7Zik/RHdtYzNOQ08qUk4iPCJOTTU9I0Vge2gqeWQhc1NhOXImYzNDRGF7dDNCdXtHKl9WVjBKamo3e1kmLm9XSDJHPmouPV1wWE1WflpOPVhLP2xvKChCTUk5K240''@;'; put 'put ''dVd+RkkxbHk1U3BtbUQuYlNSUT5+UixZJHl+Sl9yJiNmIVhmbn1uTFBQXiM1JTNFY0F1MHRMcU07LElBcD0pY0YmMWhDX1JvISowT1hEMTQzY2U6TWJDfSVoVSV5c1F4MG53aVpSTWYrSkFHPDR+UT8mYUcsLCkpLCEoPHgpT01Aaj1yaWRyb3tuZzl7YmA5ZksjQl10QWVEfUhiaCV1XjxfS189''@;'; put 'put ''b283KURiZkIkcFg0bGtMdDJKcEBHcWovWi8zOHE2OXluPSEzWkUvTTVCIVppL2BGSGJESV5uOXJUdSMsPikhLkRyUXV1RU43PTFrTC9KWXlgZU1sfWQwVj9ne1kzIz5NbHFEUF41XUEjJUxoIWlQRF5uWihXSjQ7Z2d4cDtnb3d3MDElRnw1KT8/U0xTflIqZF9bfjZ8bDhUQjJpYjFMMytyYzwk''@;'; put 'put ''fkRJZlRoQi4sTnVESSRMJXs6eE5tUzo4fmdQYVBoUm9nU2I+U2QpPk9FQFtPLC4sMzxqVHlAPkFXXUwpS1lbRk1GZSN6ZG5GOnomZWRKQlFTWjghPkc9blJETyxyaUpDe0ZPfVdMIWxHM0JiNzdlbHdxPCUoJjxGV341WC9MKlohJGFlQ0FLeSF7SVh4eUBMSllpPUUzVypBS0ozajt2SlE8TW5V''@;'; put 'put ''QSkzQCRAKWVpLlQ+RVl3W2YuMG8oQjNNeiw8JTp6QSVwR1hwZz5jeGhCTjZzMyx6T1cyNCFQY21OWlVvJVpwY0pEeWIpe0pqdV5seSx1I1pec15QYSZHYUpAKVJ8YkRfalE7eGdNQiQ1XzdPQFNlMVZ4ekx2NGFHdHc2KE1MWW1RQlA8Nnkrbmt0bH1eNSUmKi56MCgvZjxIZHpmLnV0ajNYSSpo''@;'; put 'put ''NjdOejFdM2YrREpGZWk3VXxTay80SW0lbGcuTnhIbENIYigpckF+byVHR3YwXWw+P1tOQ1suZHkpd2haQ1FaPyRPbmR8WFAofFdwOW9EeE5sbjR3UkMlaXp9dil+WUJ7a19+dEo9ckdFfmJad3wiaD9hK19KKEJBQjBoIy5aLylyJVBPfDJoUVolQT5zb0VbQj5YJlIqMmJ0XntsVGlQdVk9T0gj''@;'; put 'put ''YUk5YFpGaSFpRWQ6UndhfU9UUlkpZXUiZDFOenNqaWZVSFk+Z3R7cVBxZWldUTJINVJPa1ZwOT07bE9nODdHUyg1PFo7JDc2YzdRfiZyajZ1JkdiZVh5SHZFbS4iQWBKZGxUYG1mQDBmXVB1QGFJdCJ2dHszZEhFW0NlKiNBQygqbGA0a2dFJHRyL3sxX0VKQm86ZiVyRVhvSSZBaTdPTyg4I1sh''@;'; put 'put ''aT03LzlFNEFIPTRlZGNVXnJ6eFlld1l9ay8kZ3pTVzBufXErIkVNWyYkaEFGSX1WaVhFc00iQXhqRjhIUFBSQHE3SVYmN2tHSy9tWTgzNHw7UmgofjF8anBSM0gzQHMxMmAjamVreSRtMkI+eVM1fHlqfl16dEl1OmZQISp0bjNxdkNPO31Xd3h9aEI9OF9TMGdma0MsVSgyQi5qY1o4IntIUT0/''@;'; put 'put ''TCtfeGh1T1dzNzFdIjw4bUVwbmJsM3ttS2sxRGxwaTgjbVB1Q0I7aS81WH56V3ZzRlttLnEpeTdVNnxSKl44XlNKMFFIKiYmX29GbSgufX1qd1B5P35idkZEcHI2OkdqW0dKanI6O0dyKmlNY3NlMDZNSE8oMVI1Tl57PiViIV8qXmc3VGs5dn1QJTZ0XlJsNzsxWT8ycz87aXspITB0JHBnel9H''@;'; put 'put ''QjNTRlJbNHQ9YFBSfiY0WkhpIjcxUz1DNVViVCx5VGI6TylXUTRXUTI9Im56MWFzbT5PWjAkUkFHQ28hMmk0V0x1T0Y/WnNyPi5eZE8kPX41MihPVFNVRGokOURjSG5dZlkvPHRoWHxiS1JHRDF0aWNfSjtmTyw2VkowZ3BrVERUKFlEJlpDfWJRQ0M2KTovYS59YHk4RX1tPH1eXTkvOVVJJHtY''@;'; put 'put ''YzlFc2g3bXdpZyIxc2NtKkByTk8+aG9kaF8/Z31SKSo3VTVeekoweWk9Mk1qbXkwcEMpSnBlcUh2flQ9Vn0mJXhXUSovNUNkKXZCQGcid0BQTlNLZVJudSpCNTImR3N1SV4uNH5mJW9RJT8sYEtZMG1uOGdeVDJ9SjIzQGs0cDAjPXg4dUh4Ik1Qdm86Ums2QHFCYS5ARFl2Zl1XWHR0UkE2JjVi''@;'; put 'put ''UU9kaF5Ca1hsQzZ6fDRWRmEwWklzXlpEcHc8OCpoQ0FVOT9SZ04jST04bFAjQCxkKU85MkdaQHJIPTkwOm9qMW5GbnIuRVc1XSZAUHQ+TSkpPSJBYURIXVMlajNiWzIwb1YpO1E5MGw3YWw/NXgxMTMlM0oiKGM4fW53WXAyYyYyJk8jSGh6RmBIVXtdM0I6YjNeJToxS3Y1PDVKYGRvYUBTdyFN''@;'; put 'put ''KXFLMDQuPTgjTz1iWz1TV3JoMEhjZWJMKiRVO3pnWnReckJ3Y2hwbC88JERWeSRJIz4lU1ZGQHkxU25XMzV0VC9bPUoyN357VVYoYmZ1VFZzTE4uXl1sbzs8UlEoY00vZCxgLG1jRm0wOyg1VTRibzYxWDwhfHtUV3hGMEltYnImWW1UV051MFRmb0NjeXJhZyFeMH5udXBiJS8xdlYhekkvX0d4''@;'; put 'put ''Zy85KUhOUn1seHlUPHtSR2EkQTxzKVt0LyYiIjFubFl1ZCNMSU4waDYrc09vUkdzX0RVbnduIkZ+JXVUVFg7bFJSdl40dz8+ZlVtY248L1BzSyklZlZKVzElWmk/c3NXJUBIfF1RSyhdTiZjZG1MSmtWQVNNe08vJW8re2BNQzsqKzY1alNHKixIIWAyb3FBRGJhX05wazlTTkNqSnY4Oj1HeW9Z''@;'; put 'put ''Knp7en4uOnlhWVRsSFR0QmNJcFlIe2pgWVYvV3p0dWc2aF1FZ0t1Yl4sPFlONHBpYCF1L3NQez1kY2ZZZnJbQ35UNHdnP190Sl9acTUjNDNCR318L35vTC9tQjklKHkhNHlXblJifF1WKl1dMmorRSw5Q2dlUSolbUUqU08oRWEvbHA4JjJvcXBPUz5uPUc3eyxrY3FMPytANHZnL319Q3h6T34j''@;'; put 'put ''RSEvcSY3MmRBLC5TJCMyZ3dtK0gySW0rdU1dfTtSTmY6QXs7IUhmU0AuP1BEWVBmIUcqaUpmN0tZQF0lVGpFSkd5JnoyYUdoVUB3P0B0TmlTfm5pL0YuPkBnOV9TZ3YjJXJsRHdyLiEyaDhfT3ZGPCE9OHtTLjhocWFke2k/VXNTanRGPFoqSU0mNjU5UH5RWCl+ejg/JVc5Y2FTc1pQTjhwZldV''@;'; put 'put ''c0VvVjxAYDZRQmw1NUBmY2dWKl9nU2IlVlRCaS5iNT9sd1tydCpje207MWc2cEw2PjtjYWNgfDIsdE04dVZOO1YhKFJII3ljTXJlPXhZa30oZ28hfFdnO0BuMi9RP3l6cVprIzxdKW49Xjo3N0lGaXhRe2JVQkMvKSYpazl+NnlLYjw9LHYuTGdaWGpLZTBbfFciOV42Yzo2eUcmfUp1Jip6Mnwo''@;'; put 'put ''fGQrY2FFP3JjaXRdUSFsSEhyJUNVa0Jfe0Z9M3ImSDFUUml8JEFgIjttcWElRnY1WWZYfEg/Tz4sNihEKVR1Tkk9KWs0UExOLjVHUmp1ZWwmIUtrWkB+Q3ZMeHROe15HMmtDIUUsYFIpRFoscjRIMWFpWlcyb1VDZDJEQjE5LjU4e0NuSmhGak9IO1NPQE49eTxQYWBMbzpvR0FxaTVaQ18+MFoo''@;'; put 'put ''P1IxOVc5TmQ4WkliITRHMCRDJFAhVEt4ZVp8KEdhSi5VM3tbRDpnfTR6TSR7T3o1fHcuXWFMPClRX2ksKioySTg3clpld2dvUHckUGVKbCxEOmhqKzJKY3RVcClHd01lSmZsQDNwXjE6NnRMcFhgTipbNlQ0IXk1PVNAMyx5UCxpOSFSSTBAVU8/JDo4NThKI1duU3ZIKk1UVUpwYGBTR11wcSov''@;'; put 'put ''Zz9JWEd8Pm1YUD8zcC9iIU1JeilVe3lvOz5yaTtJVCNqflhjdnxBcCtjUWZDQ3NlX2NUWikwOiNFKzYvfHV7fTd6X1MwfjkoSXhLQzlTRDMvK1IkKXhObEM6L2Q8P2QsZTNzc3xxSGE+Mj1vKTg+NF5NL0dCWiUrRiUlWE1kWyNQfUkxLG4hPmoifGJdLmB4SCxWNXljczsqZ00pWC9rODZbMDYz''@;'; put 'put ''c290TmswVTdvUiY4UGlub3Rpei4+eGE5SV1dcXJXaTFyaT4lfngwbFg1OTlZK2VMUUVpLzZtQE1FUHVNeG85XW9eNm0xfF1ETjZJLnM8diQkdyIuZCZzY010TVl+PDpzTUM3UiUpQUxhZV1BQ2ZVZ0l0dSo9JEJFWlZIQFA4JU08TFd1Tj51ZHNRMypYMnxMdT1QN0UjPUJsRSFGcWFqXzZAbyp+''@;'; put 'put ''U0hrInZZZyM9PjEoWXRuLzI+dTBIOE5yaW4sI2opN2thNFU4KDtBanR7biwpU2ZAWjdNe1dmdVdKcVh0bmM2WksqJGMpVTtPUFg3bks+UVpubSZ6RzRYb2QveHFeZF1OI1AsIjxDLixSPmViKHd6QXQ8al9ufURZKEpIYmNvQmteNWRMXkhFVXc8XTx5ME17cDtMalpkKUdpNEBaRTI9djU4aUFh''@;'; put 'put ''OklsVVM6WCllaUlKbi5nMGF0Km0wLkRibFh9dTgxaFAjcD9JeSJPPnI1IkAvKT1sa2wwNGEvajtwYmRib0VIQ3RhVkQqPCQjQyosMypSOTUkNyovREBTLkI1Xl1mend4PVg2eVAhJGdiQk42U3oiRCNFZ2RAKzhtXzRJS0lkW3NvKiZQcD5YWjJeZzxMcFQ/Z3NRLj9bJGxYQztmfVh2Z0x8aiNt''@;'; put 'put ''djo+TjRFYCVtfTVjaitjYCMwdH4hYWtxbCQvcXh4ODdNbnBXTG47S0Y8aFpdfX5BQFEuRkx0JWN8PW9SYHpeWTgwZEd9bnZNOU04P0kuTTVwWDZzMXtmMjNmekwqKFJaTUYhNGtYdnR4OD5iTUZYciI6anA8U30hKVpNNFFCTmM4YzFMdXVVW0pNNSp6LnwjemYyd2w8bDNRUW9LISs4KkM1fFpX''@;'; put 'put ''bEUuMCk4bnpQTks/dzpbX3ksKUg+UChMXkpqb3A7QGovJXRQeGYlO3ZacGA9K1pIQj5gKmQjQz4jPitVZ35TaEx9THk/Ui5RWF59Ji5UZl1KQ1FgQFo6YEQsU21dP21KQDMwcylFQDokQjxIZmtKTj8qMU1hXzUiMjJ5NShiOGNmbm98PEhCXXwjLG1xNmwlTHtHKjFyN34qQVIjIWY+UDFnU2tT''@;'; put 'put ''RiovZkN0fWU0NzZpOjZtPDxVbmszMWF+Y3BnIlYhd0NNYiY2bU53ekRCJD1TSlVuUmw8dWohR2oxZD0rPWU3QG4pK1l5WT4xfGJDez8kbzxsM3pSdXVHampqP3ZJeDF8d3csZytROVlWR3xKWVpyWiVyeVNhY3plLHFZPUR9LDxPLzcuYHRNYiluYzspJlMiaCJzQ2d2OykpUWJTYENjUllBYHUs''@;'; put 'put ''d3l0cFsoPDd1YDhdOnBFQkw1TSYwKSpFfCtJYFpGUkk/eVdvKno0M0dqYGF+JDtocmUoViFKZlV3KzFSQzAkRVtnM256N2Z1Ni5DQFpNfD1bZkpfU2dTOSVQRVtERChYUytgeHp4YVpuTmtpQkRzenl6dGhjMlo8OixEWkxzcHMuSyt6USZvd00lRXQ6Kj16SztHcClHQ3R7WjlVTipiM2J4fjxR''@;'; put 'put ''aUdScl1SSyZad1JPPkF0bjthNEFMK0tQeD0pRVdeI2xmSHopRiJ3fkMrMihJakM3dn59WmlZPktpZFEyUnwpUy5IQzl+IkBNYmVnantEcX52enxmJWlLXllnRmBrKU1MTXs2ZXskb0k3SmV3TkU+cmtgRDp6Klcic0tbc1dFNi5mRS9KTUhLVWJuNCpGKXVjKl4qXzFydz1OKV1kU25YSG1Ld2NI''@;'; put 'put ''MF90ezQpNVYiPjk0KXxOM01OYjNBMlVLOz15SjhUMiEiVmVMLitNSmJzbUxJajxJRTEzcT9zflREYkNZM189MENvMkY9blZhfkYodzpLKF4vMTxsNUdWbExJdjRYeDUjQ1RTPUpobnU9RFg5fjE8QnFOaHloQ014dmZjdC81NHFAJnZJInA2Yl1NUXtVMC9GJXJMLnhuTXc+VHxOViY8cjpHV2tm''@;'; put 'put ''RnRmeyttVUhtfmkxKTtsW0J1JmBhe2gkRGckWXQ6MyZMUXJmYSRnQVtCb0t+ZVQ7VGpZL1R2LlhlIVolRnZkLCpKSVZKQ1AmVW0iOVtmcDo3eyghUT8vVDI4MGAualQ5bG9kMXojbXgldTs2fVlqbGkpMXx6OXlrRilqNmExbDU5SUk0bSl4KzZiZiJqUHwyWUolREIzYj9oI0oqLzFEZitDd0Ih''@;'; put 'put ''OCpdfkBaWnxxam5QfVMzPUIiJTZRQytOLkBTTUlHWTc3a1JxQjI/cF93OHMySGxDZnxzMilwLj98MmdGTndYYFVvQz57MDUoMnl9PUJxNjssNDYxWy5nc11hbk9CTCgqQWVLeXd1NnE+LD5IX3FzN3slLlkiWTNjVSk+PC57SzlHdmc2S2lvXmlOXng9Rnx0Jjl5d0djWGYlalM3UWdLaVRTLDJM''@;'; put 'put ''Vitwb18vX24weEB0PWMpNz0/VUpUbypWeDlLVk0xX0taXXN5e2k0dyZ+ZGdSa1BRZWpZeTwyLjhwVlEvYlcrLik3UFZSc20qIiEpazV7Sko9K1VVTDpOfVJOSzk3N3AkLj9xTmkiOD9SNyRTNzJ4WGRSMiJNL2MjeGJKMz9DLmIhOTdRclpPOFQrQn1dNlFiPmJlL0NjdnBLOHdAND5eVl4haTNs''@;'; put 'put ''UWlHPTg/MzZEfGs3N2p4dCp3UFJtUVQqSV5MRW1JZW9yNnEqd2h3Ky81ZDgyQUpKIiFpbjZZWz5zdlM/b1FIRCpnLDZzJkA7RCNCKkY8KHNBRnUqXzBUKGRbO01fYXd7K1lzd082WjN5ZVJDeDB7RER0NnVZTVR5OTBNS1ZNRDdeI1A7OlJzK28jTDRjbGlFWDkzaV9rWSM1IyZHKUIoRU4yT3xl''@;'; put 'put ''NzZ+R1JXa29FIn4pNz5bWyFqbmxCPDg5S00xXnk1PV5uI0BGWGhYZ15tLE9kdUNaUGhOVk53Nip7XmFbbXFndGFlVlo2PFRrWVFRTS5SYEFdX1FYIVhHdz1bZjpYWWVkPEE0bFsjMnM/O0l6KHM4XVdHJWcuZSI2UUd1Ljlwfj4kWn5sV0VFZ3hbTTs9UHU6VUx5IUBGNTM0TVdyOH1iUGZXcT1Q''@;'; put 'put ''YllufVkoIl9HJG14MVE5Wk51ZndWS0pMUTx8Kj9aXj9YRUNqaTlkOTN6Wz5SWXIycCMrUnw/RjAyKHZBP29bIVl6fXY0LCtIIUlbXT97NENAWV5WQkVCNHwpelgsM2BTIU4jXXV2fUBGOSE7M0phMmQ7RmdrdmdQdFM4eE8yTFgjUzJuUC9qZTFXWiYpWXNlWmNmUV1QbWR8aCtnU2lNOEklKGRo''@;'; put 'put ''WiRZW3l+QXBOYWcsS0xsUWEpZ0VBRGU/TSxTMGU1OSN5X1tacHwzcUk8MSQ4VmZwPDxZbmI/NyM4ZV44eTwuLmxhcWMvaCUyKFc/K3VGYTdPL31qbGpVbzghYVNxRmx4PDBERXJ2UGc2aXVGT1BRak86IiFOTWJtNC9EMHdDQWQqcitLQS58UDd7JDQ8RiE0P2lGPWYoUjJKKHllIyVzVXxXLGph''@;'; put 'put ''IkJIUTlNTW15OkJlVXo8SX1BbWMsVS5VV1QsSTFEbVNyeiE/UmloRV8qazgyVHRBeXh3e3hpT3wyQkNaOG5LQyw9cDlgeXZUOnkoc2ZILHVnVyJkQmcuKnVxZVlMZU9qTz9WM0JDM2A8JXshT0dGLjJ8TG1BSSEuaGFXb1haZ1EmSWJ9ZGxxeT1EeiYrJH0oQXlyXnM6M180M01GPTsjR0hOL3RT''@;'; put 'put ''bl5mP3s9fHcoLntgajFKTEtgUX5nKCQhR3J2OTJ0MWo3R21SYENSIUhvczpvJXQuenNkLChuajslQF0/PzBKXik1QzVmW3tCe111MCp2KjdHLiZSVmxPPilZQ2w4dHkuYFksemRjYklfYnklSXRhdDxWbk5TM3teUURXfmgvTnMkRyshbTtVPjhSR1FIYmRSW2x9NS5hLlJKSy5aY2wkQj5FfldZ''@;'; put 'put ''WWVKVXUkRH1ac3d6RXZyYVtjWz1zdjgpYGFlPG9SVEsjJExUfTFsWHNmU1AyOGwyYmpiVDtAc3p1XyIhS1BgXk1vfjVQK01ocE42RSJBTDppZ3ltIylkNHU4JWk6VztIVm1Oei5aLy9PQUdbK2RJMHYkKCElTXFWMW5VTiNvKCUpOkUwRUoxa2BGI0trQFRjdSs0VTtvSUsxRSVeIiteVXV9U2lV''@;'; put 'put ''alB6PE1MOkpUdmg2dV84PiR0VWppXiZkJVFkRkdAfGkxfnQiNHIuSTNTVikuUilZVHohdG8+dUBLW198OT0rXTJXKTFpcmtkNjA7fChfWUAkaVMhVHFbJkxMan0rKStzQ2VTMTFKTkhhKV81X3MjNjVGQlFOPi5edXF0Qj4iKnQ9KU4xM1tHUUpedGFgO0dNbnRhfWRhOSZAXVpjWzhtJVZZLDE8''@;'; put 'put ''UmR4YFNuWEJUO3w2XUIwPlM/PihWbltiSXQ1fWNaPTkiTHlxcGBRe2A8KHB9TE4uc1ZiTXgqaHQ+OU01Mjk8M3xqbD16M0JCeWpEYCN8ZUZ2N3V7OlZLZGFMX3BpRWJQSnQhbDNTdSN4K1pCUC9qVUYmVmVYKkpjTzt2JUtjQ2heNmQlXVUwbFpdRk1RJFJsUzB5KlVbZTNNYVArMEwvOVVUV35M''@;'; put 'put ''W1g4RiJBaTxJaUhtdlQjMjxeQHJyI1ldbCw0fTh4MnQ7ND5gZClIVzliV3dCZU9IKip6dEclOlA4eFZ1cj5hSyR6VW8ySyRqJnsmPSk1SCZLSWVlIzlyNFQ/K0lkQkhibTU4YEdNYXsoIy5fKmJHKHZ1UyI2QClfW316MWxzVHU7WjptdGg9SkN1LClQWipmKjF9dD9lJih6cXgqWmBMOm1bc3Vs''@;'; put 'put ''VTVAUSxhM1F4YWlaLFJSQnVjJVpufnBPITF0RWBHKVE1QkBaanhoUDhPNSQlQEAscE9OJnlRWTB5e05IfFB0ayEmelVEZEdnZkx0WD9IRlgzT1o+YXpeTiRwWU8/VjZHZTdPbG5ldDJ2en4vakwuUS94UkIuTGYpfUdAYzsjLGJKM0FlO258VzNdXkQifjRiaFRaW0V6byFzOkVLOCl9eHUuKV5P''@;'; put 'put ''QGIpeUtCcX1QeEIlJD40fkN3d1cwWERYMG1oQl00ZnFfOjFxWnIwYmR8QlRMKWVXZkV6Uk5OLHlqbVReXytSeHJRNGkuOlkmYCZLTX1XakY8LmpJPFAsUVd4Uyw0Q28rRU80UT47LDAsZ2IpbmN1QEIiTUNzIlsufTZ8PGQrUXlkZ1V9TzBGPDoxbEtOSEZ5XnopJmlDLjNhWDxTJX1naEtkVWZ4''@;'; put 'put ''WGlIMCxAWC4yKnMkd3MuTSlNOiFoV11ZdWssbjE2TjkvempNJF1GcUFwY01rd2dAZip8UDUlVU18UENeTTRbeSVAdXhjYH0zWE0qPWBkInJPJkVpZ291UGl7UFkxTGhqSjVsPWo/OUZwSkNHVzo0Xm99e0BJWGE9dC8hXjN1cWUwXmxWdnB4UzBQaTF+VXRAa1lScHx9ZHR4flIvWG9JOzVtMSRD''@;'; put 'put ''TUIvKVkzd3ZSRGpKeitxX3dVUi9AeDM0VTZXOG1uNjJLaHMiVjNjNGBnOSJda11yenR5JWRyPWo1OjNUUHx+R05LLlJ5PShiWihAY0ZtbjAmeVhYQG0zIVhwNjJzPVJlLHVHR3ldZXRoU2JWe0hqZ0ZQQXNhdl42LDNLUERUOVdpRG5lJkpiYzk0UFRtKFh0K0Fze1kpR0pBai50K3gmPSN2SGYv''@;'; put 'put ''UExFbGomPSNyKVAoOj5RTyRHeGFzQ1gzJnglK2UlJTg7IWEsNlZzUCppR055eG5RaXF8Yl0xLk5YOn47N1t1ImFgbS46bWcsZ0daTkZxTTk7c0Z7cklWKXErIkY5ZTNNUkpqZXwsajVNVTI7YC5TVzo4OEA3ZmxabC43M2JHQjQkZWRRQmZeNFQ0Pj4kSn52SFUoUXEhVC83KVltUUBTel0yLEZj''@;'; put 'put ''ZylOVDZVdkZeVCtPW3NGdkw0dXA6Y05+fFAjTDlVYV1lMmE4UDoyaC4iJjxha0t0SDd0LlgsU0E6bFhuK2Q2ZFBqNy8hPHZIM1V8SnswJUJmVVt9dGhOZyRAdUJ5US8oNHYjIVZUO31eez14OypMWV4lODBfU1pEZH5tRTJqelVuXVJeVzElQSNsUUxuQmJkS2sjJChrMlNQYEQ+RDgwb29hP0dJ''@;'; put 'put ''MEh3PkUkPEhfO0NYNGhJZyxMS00+Sm1fUDpOIVhyZkFoMzEoaVNpMFBpPiZSUz97dE88TmVpPktebTFMOGtFdHh3VGYjL2IkYEUxSkFxWHFmN2UleF16SSFiWitPVjtXTCZVMVJWTExdK0NLNS96KzA3NkV6d3g+azs/UlVCbmkhflVubXFqO3VxZCMocSlAPWR3XUwmamxbWTFkKyFOcUd0XnNQ''@;'; put 'put ''cnx2SUpvInJZamNueSg0bVkoNFUsZn1VeSw5RSlIfkk6SEAzbTcre1F9a30lVTw5ZEczOlVqK0N9cCpmM1o7fGFnW3B2RlM7NDI6W1dWTT9ofCl2Zng3ej0waTErMCtxL2ZEVGR+VFBicyp9TStiX2goX3xbbkt3bDh7Xm1WZldAZHNiV2ErajFSW1JqSGxXQzIhRSZXalA5cEl5bHprKEY1akNE''@;'; put 'put ''NjEzcVJyUlhHeGxeJm8uSV1sTTNKTTpEJm16Rk54RGVnaENyfHlebCooU3JoL3l1dEVqMS82YUshe0NxKDZ5dl1xMENDOFFITEw2cyVTV1dWZTZnc3UsUWg+Qn1EOjApOUglO1hCL0dLSVN3TilgSGJVJjp1I1MyfmI3YlB9b25HK1JFcWw8Ok06cSEhWCsvOmkzTS48NnR6cWgjZlJIQmZNX3l0''@;'; put 'put ''bG99YzRQVkAjVktPXm9uQ2ZxcTdqbFRoTFUqd1gwbF19Pnx4TSlgWDBNYlMyPn12Z3xNYVEieHspU3JHP0JKUHhidmNJJSheTnRhLGVHZS5hbldJdFRBdnA4OWdKamhWOGAraiN3NU9vQXVPYXxROmNFW2lrKiNfI15QZlVudEU2TSlEJGlbdXgjRUguL0AyYGw6QGVdU3FeXnlAbiUoMiwiR3xv''@;'; put 'put ''Zz4zcSFhTHg6PCh7N3VJI21haGZdWDEwRi4pc1NefFREP1hbWz0mcXdePmA2aCg4PkpFdSwsMW9NY3FqfVpVVT0rKTl3OWtnU3gwTCo1Oz9jUWE9YHhGSGJQIm5GI2doQkBhN3I4bkxrZFZyMVJlQjZffFkoR1dNV31xOER0bkk8X2JbRVtlJSUsKikkMG5eTSt9NEA6PUIlY1NkOH1kLnpRXiR1''@;'; put 'put ''Nn1HNEV4aUU6Yk1eJFM+IzkoSSp7OzNlbTYiTy42TkdlaFltb0M8WlJfb3E2K2UlayZ0OWIkZTlzLC9lYFJ7aHlFN1pte1QxYChIRik4dlZdZDd4aTpVfEJKW05ObiYuOntJJmJ5TihCbmh0UlFNWUo4Q3lHJiFRYkYva1l1PXh+R19wdlp+P0JXPHU7Vk91NVR4R0tkNzFCaVVCVFM9VyV7blZ8''@;'; put 'put ''RFc0SzUkQD03fFVrP2lBRT5Maz5vcUtpeHBAUllDVEA8JjxOV1t0Y088SlBuQm9JW3BNdlZqI3BbJmJdMERsbFI3SXdCaG04TFBNOX5YRG9GalZONCsve182fDp5cmFseiE8ZkJSIU1rYFR3NlcwbkI6fXVeX3JNVCh6P0J7cWl8IkF0RDxiQjlEY156XUtuUU1eS3NJP1dBM3tseGd5T2o2O3k7''@;'; put 'put ''bll8dFMhPn5oYD5VbyJhc1J0Q0dNYTs/NTRVNHFaRE1qVHxEXTo1dHZEMkBmS2pVcW1Rejc8QilNO3VxM3w7JjMxblN7d2g9VnsrZStQQjZXNF8xUmxSNGt3N1pXNnk6ey5+TT4sUWpNeClQU3VYSikkbm42Il5eSDFgViVjZWZAIX17NUI5XWlkKWsiZlY9SlE+JVRLNyQvY31EZD19Jnl6T2k8''@;'; put 'put ''VkU6IUwvK2RsVT1HJmVbQyV0bSNTLFtKXWF0Plt0Q1FNeUtfViN3MmNzOUNjXyE0USo8LChGNGBacVFkdUMycTw2UT9dfkohZ2BSImxCRCUiVXFyTylsZUpEMjtRcSFdV2ZEMGVaM2RYVGNbaS9jaiVnJkd1ViNlIV1TNExtcFVOVGVyUE5ZcUxMTXpVfSQvNkZSXXtVfVk0MEtIYD1iQSRIQVFj''@;'; put 'put ''ITNtT008K2hdIzc1WC9Udj4vSDxAP2JpT2JQZW49eUdHdUFaOEp5KGFyaEVecStRe1AyampGLEtsTG5sczssd105cGJ3eGR4eXsqa3JjOCx6MiJiZ2RyZSxabEhzLzEpVVgzfn5jfTVNRkJbPjFOXyNsZW0zYDAzPzFVZG5Ub01OdzVbWWxdQWEyeVdHeiJBX0JxYDo6d3MkQ3k2bVVqQ0JDXUN8''@;'; put 'put ''Z208dFFgOUlfMCw/PzxHYF5gPSF+b18pKUQ2TDNJeV8zfEl7IzYlNEF5SlN6X2hjMG1nVTM4OlcidUhFP24qfi4hVDNVMSJGP28hYnNIcTpqUTJ2QXcxNXAlW1tsTDZHe11naiNqbXM5eSlKYHNuUChdcC9lTVNkUnR+aURARHEySjlUQHxxfHViVSNZSnNZVzF6KTI7TEppNmNKdWV3KzY1NnA5''@;'; put 'put ''ZzxVbnhHNTFHQ0M0ST1aQGRdXzVGJUtVY3FTQiQmXikjcnpIK25TPXU6YkYmVzYxPkhtTnRXV1BFOFBeSVdJZHZFOHJZXlMjeyVnSE1bTV1RIylNQmU5WGhVLjEoSWd0Sk0za3RebzZ5WzlsUWBtfGtvKzUoSj88L1hjTk9oVTdHVE5gWXZpbj95LHJ+TVhIbU5dc0JxWytbZDhpU31lcl5kKEAr''@;'; put 'put ''LDR1QEA3cEtLYT18MjlldHQqSUw9KlVbN201PDYrWVNnbCglZEx4fmpyT0MuZDhWPHlMeTE1RkAiflZGVi5YMExWKlAqdC8uOlV8ZF9AOEJkK0xLOCNqaUMhK1dwcC9MUilEeUUiUXgjPUQ2Ozx+OnpnY1R5V25DdE9iZERTKlo4KCQpNGd1Xi84Y3ZrUE5RbDUsPjolVE02S01WNWdgc0ouP2Q8''@;'; put 'put ''fEhAVi5beCo0VmlefChNc1luajV4eUtxXn5Fenw2LEVDcUZkKk8vJXdjQW1aQlN+RDN4fHEqRFZvQ1MzKHY4RWUxSm9aTnMva1IxSzc5cGpuIjk+VU9VJW1hQV0pTmdEVGlqWUklR31GTTxdWUQ1dDt3diZ3YlVGamF7cmFiYmQ8ImQjSyYkNVFAUHR+bE5kODYyTmlzOjVLNCQ9ajl2fV5Ddy8k''@;'; put 'put ''VHYiV00iOkdlITokPXhWcWFJMSRXPiJjSnAvOkg/bSM2QUhPOzFSYjl0QmBaWGx4KkFuOD9nb3hYI3tPcCE1aD9hVC9DPV1tXmN+TH0lKXFzIWJ0fmEkOmBSVkZaXWx5dHBDPUEvYiE0QipQVlE0IXtCJiJrfnFBYGVpfi44MEZydmYlKG1nNUN7dixfVjpGK145fmMjYXkzVnc3bHo3fDRzfSs6''@;'; put 'put ''Ky5YcUlTUTNeJFNKNjRtfEp6SXIwNjp0Uy8xQSJVezcpWTssVXgqflAwbmRLUGddRCVPS05TaGw6ajZ7MyE6fGUpTUtfMW9QNSg/XXkvLFFxRzdCaUZxTT43VTtwLEdaSH4+O0s4OjxpdSg9SDtAM3g0JXFXPHE+ZjFtLllFWFRrTGVBYE5gYVAhczx4QlNXYXRjblRnYVQ4c2RmQCtFIigweE5+''@;'; put 'put ''Zm1ATG9IOCY5WEpsRzJ7R0lBInglX29WTFQrLFo3NF5AanlJMShJeDx6QWc4U3AsWX1yaTI8K2hSWyo+dihiRkBkTTguJl4kY25mUkkmUGVESV1TMkZzNCR0OmIiTmRwWipEUUpWfiF8VD1xfCwsVkRQYT1OVnojcV9wMzRCNXJTd1QkMVFgdSFmZyhkaSxJX1NBU3BAWldiKXR1bCVuJENFfEt6''@;'; put 'put ''KGU/ezxkKmNrZUU9d3xEeVFbaFVVfmlXMnt4bFhncG9rYzxKPHUkIktAUUErJHA9PXJ6OEN1aj8vSy9sLFd2NTk+e25HYWZsfnB2L1JEUUdbNTlgSTA8OFoqYC9qaHZFNysqOURvTGcmOEBJMF8vbWBzb1ZBQFZlYWMvO2pNLkBebU9dbCRQPmFhZ0V6cEgyaSIjWzNpYC9TQz8xcTV0KmhkQWpB''@;'; put 'put ''d2UhZGQofUwyeixmJUtUWSMmQ1EjMFcyel0rZiNNbDNvTV1yRGdxJjhUfXRASi9aKEFCe3ZHL3QmNT1Xbl56NSppXlddVWEzdFBkdiRMNTBAOENqNn1lKX1uYzxeX3QuM1Fue2JBIiZvMFBOaVYpeWtSTHxiXUouMn0sVE8wZUN3JWRQPCwwVT14YX0xYGApaipidnNCUUM3PVBBVEgxdFdAeF1r''@;'; put 'put ''VWg7eWp4JFpWOUkpOmh9ZVthXUBUa007aEhSfWMwej5vbXFLZy5XZVkubS49fVZaYy5NTDhZITlbflE5RU1jSU83TCFCbFlDSDViT08ldFErcGE8RUclME5rVHVnTGFoemhrZiZSY3ojMTY3fnNXIkM6U0tJYm86UW5McG5NM1JofSNPX30oPVJ9YzNYcSV+IlE6WTRnKyZTVEQ2ZjpaVjE5a29y''@;'; put 'put ''dTpgNl49OXRWRipFWiE4fix6Y3x3fldtdERrVjddI3o4QlRHU0w3KVErL3VvNWA5JDQlOGc4Uj9BZ1M+M1N0bltSXkpNQlEpLildVmMrSy9sd1RmQ1piN05KT2YkcGhbOUFIbUN2dkQrPltqciRabGZnQ1ttam1mOGFzQyp2Vn5ITFtVR2ZyQmZ+S11NIk1sK155Yz8leFk4Wm9vXXBeQl1uXi5U''@;'; put 'put ''QXx4P1E4XUt4I2RTRm95NTtKJk4ldHVXYXNxPCNVOzhWcHpHQSUrbWxXTUBXM0RsYX1Ce2s2JjxkVGZ3L24+eWp5ZDJlQEY9WzcqaTNwdlc8YClOSGNNXy41RHFHKFk+OUxPejNWKCEoPmlmXWBqR01mezgwPDFNVjN5SWBoOEpKNi9WWz8zMWRSOUEvITlCUWk6Qlt3cFtaaS40ITtbe0R8Lk4z''@;'; put 'put ''N3dBLixuNzQ4Nkd0OlR9ODR4KTJzTWFSXkxNNWdjYnBbLmx3XipkUWU+X15jUXEwMFVaPT0sVjRmW109KngvKjcxSSZqUEl8SCFBOXApUjY5WUgmJDdDe1ooWExPS01eSiludn1KLExOZEouWTdBUlRuI3YwMG5MaFZ2b1tZalJLZltUZ0xqYG02XjlnfSUjMXI4LkkoKzs9czpPdjx7PzMuW2Zx''@;'; put 'put ''QlVNfTQvRGBwPDVnfH5vajNybVtrMG1aSTdaQWk+TXJCUCpDSV4vQT89UWxWQ0RMQyp3YGs7QCkxT0J0KHA6RFJrPjxBJHtkTEReYDNqfmpDbyxvPTU6U09ERiozP3F5UXt8flddQlkkMnh0Xik1P1BaUUhyP1gvMCZyYlJ3YlIlUyFnPkxGKEZ+Q29WVzZhRy5Ea3pJZkxnN2dBRkxxNFRiXkd3''@;'; put 'put ''X3FjdXBNSChQU3dmYTRnJWI1UHNhI2tuaXIxWTdhW2VibCFZRCM6Sz87QjQ3NT9Ud0p8aEl2LlYsSi8wSkBXVVYvbjwhfEUjZlhHaG02KiV7P0hXcS9SY3pLWGZvQFtgWGA2P0A7X0p4bVsxRTdLK0AhQ3ZKY2BwTTtme0BHLiRWOzN+cT8mbnRzWXw6RmtPbkRZbEFZUCxON2ZBcyhCOSI0WnRu''@;'; put 'put ''Nyp3QDcxQzFCJUVkdkZPcFgiNTR6WStLUWJkdkxudWYjRl0mPEs5STMlRVVtJntXRVFwdUIpPD5wO3Q7bmRxbVR6KltKNkR6LjQ1ZHckN0BTPkYlSGZ8d2R0b31EZk1JUG1ZTntVdVolPHlmQlQjVkJFZExsMVJgQl00Sy5BN3JOcGk7fEtkUn1RJDZaa0QwdDlYTWo6am5ifVp1TyglTXRCaWY2''@;'; put 'put ''dFtANXNiJCpDPEVrInw5MzNKOSJtaSpoI1FAOSR0PnR2b3xgOyNRTE15MTNYY2U/O0paLypkZHlEaXw/Ln1ZSyZlfkwsdn1LfEFMfSRgbTIjJUYjKERMJWwkc2h3aF40S2xbODJjN2xVJDglXXRmTT5KIWMsdU5lI2l9UWBve3NlS2ZLIlVbOSxHS0JhbEMkJnBkblFdaEwxQ3QpPy9ecSkrc2V+''@;'; put 'put ''PVoqbGRXZVN4RCwhZmk2UV9uX0BKInReMjFmJEpiMT4/TWdlRFpfcSRLKXdPX1ghQS5LJW86eFNadz09dChLLGIzViQhT118aEs2RXNLNHQqJFNFRU9pV05zfHIpOGwpXn42ZHdHcG97fW8wNXYzQVl3fjtVQ0s/NytMJiJXOHNafHVNaX5SI0R4IVZkJGZDSHxFT0tZRVo4a0g5bzBUZGZfSkUw''@;'; put 'put ''fDVleC8wIWc6Rl0/a1kkRz9SWl07U3RWXSxidExmQ2k3Vyo4NFhDbT9sckRLRzg3KyR9JDIkQyU6T25daz9yW0M9c3F3NCF+WGpycVk4UG5rRU8hZ0s9P19NOH4pbmQ1bW4pa25GJHdOJXNUfWBnbnlSeVJQcmlQKnlaNVdoQGNJVzxPa15DdF8mJU5hWTZadzIpPkx8VlR5KzpUNTwwcmBeLndK''@;'; put 'put ''IU5EP1NUK29za2JDbktkLFlHXU54O3BIdS8uYlJreERVbTJzKURvQ3B+eWtJK3ovUk5DZCghIUwuVSZaUyRqbHVjUEhaW3hHR0dQPmtyLDlYZSZYNkxbfFNzR1U4LzEpLmEhKj0oM1VgTTRjfWkoXjRmdkw3V0khJT10NEwuYTI6VTxzaGt1OG5WKisubUI1ZzchWWppeHcjSSVgKUVVR0JjfT9a''@;'; put 'put ''OyZXZkgpMUFzaykpaiMrPUBnIzlzNTNaU2oyXndXXVl4UChDLyE6aDBMUUZnTWJKMSNnKTkmeHAhSGs2b0RNRHMqRnllaylmKStbRkR1UTxZMmwrJls4WiJsPSxhTE1MMSRgL1V1MU5qdUYvZlpgWSl8RHwsSD91KjlbSCE4Zmoqcik/OjdlVTNSQzZMRixAVHgoMyNrTTpaLFY1VVcxSjZHMUx1''@;'; put 'put ''ITtRcTF3OTJVT1BuSGxgLi5nUz5DJEldSjFKcXF0TixXeX5CXyRpQHZKWTpES2NPQzU0UUA6UC42Xyltd1U5eiI8KVV4PzkxMFVEMWhWPXBScSo9WXkzJHksQmNGJXF3WmJ1cEh8ZW9kImk6JEtFQzZOQkBTcDYxX3tCQzZ5PSpgUFFqVml0KiQxTFtAd3NycmZWa1lzXjRIZjZtZlF0V21wamFA''@;'; put 'put ''OyhyYi5nRyU8RHgxdVB8dj5gQHJhU1JQLy9FKVtdKjEjbj9ANDZrTXthUERnWTJdQDgkPCZqLFtPTUgoRm9Bd21gWVVQI35oX1c2fX4oSFJoM0dXTih2dVNHaF98WlU1U34jZ21mT1F1SUp9JEpxQ0I3I1R6UF5JaWM+eXIiXnF8d313MkspdC9RUHhERyVMdCo/alVKeilVOFlvXUI3b21PUiEv''@;'; put 'put ''PSNXfm81bSkvengrKltfK0hPJlNQTklTblVkZClMSVIwLHNCNy41bENaYFVxP0VNMX1QNzNXenZQZ3Y/Y2d+Zn5pVEg+aS82TWFHI15qPllFSHA6bkIzJU1RJUY2XTBJMStuQiFGbykzWXZjdmIubXooQGw1UkVFa0RQYWNGP1RTYFcrTW4rcyhzY0kkRVdXKTBRdy9FKyZ8fTR1P05xY2tkVDE9''@;'; put 'put ''YjQ7KklVKDN0LmB9Y3AvVlpTKmJzOkRIUkBuSG8yO2lHRjxibnEoRUteSmUuKyUvRV9lOCRDYmF3Nj4rR3AlK0tEZ3k7JD9GXTRLaUt1cyl5VzlCUGFzIWJ1diNObV1MdHglcDsubkhzeiI+NjJsJCx4bVU3NUZNaG8hMm8hVFchIVhCKi5+Liwleix4RV9yWG9yOzohekhOR01EVkhVYltVKCwo''@;'; put 'put ''ZWQ6M1NCMFU1QUAhW2AjdGxOPVAwTSE3Z35IeVBfQ1QzQ2NZIWY/VkgkVzdiRUtIb3V1c0tLYS5jOk1HYkAqclE2eEtyNG9QPHNWZC4sRkFQWFI+LC5rSVhKQX1We3JYeGYzdVAjd3J0fj02RFVuc2l6Lkt0bWxNUjB7KixCRn4/I2pYQnhSS0MsUik6eTA6ezxvNF1yKHNveWxLIWkuOXh8JDlq''@;'; put 'put ''cDl1Xj4vRlopM2Aybj5vQ2JhPEohVCJXTUliRiFrMCZbcyxoSmA6N19hZihYPm17UCQ+YFJXZ00zV25IQT5uYClsb3hpdCVDeEZvRnhRQiNXMnxpJEZJUCIufjxPZGtGV2owKTdJJVh1WX4zcmIrL0VfQWksVDhuPyhVUWJHVUxbMXVTNitFalBuJnNJdFZYflkqfVRLIVdDNEpJezQ8MmFKa2Zi''@;'; put 'put ''TS9gdSJKaChvPERoTDZEI2Ihdk9ra01pSypxanREdUMpM3dYMX1oVkkiMlpfVTc3UihXPCJIdC9dY316X1N0Om5qJC5GfTtJbFhPVTprPX48YTldVlNaaSJXWUFuNXd0eX4kQXVTNDNwVlYseCRFITo7UnMqbkIvP0dKYERjaEJkcDx6KHx3fkcpaVAmKitwSWZgOU9IeTRoP3EhRldoKjpeTy9E''@;'; put 'put ''Mnp5RVt5aWVwdGRXPUhvSS93cH1rZSkwISpiJTdlQCleN29iT2lCOGVJX3EsTXVFe20qfVhWOG5odUlnPzM7cCZQeTQvXWo4Q0ZgQUFSM2JSIjR3MGtnfX4wTnBdSiE9WUdsdlRkXk89PihbO2UzXVQ+JSNVLyJAW01tOXBBe3VJY0QpanI1Z0RwRXwkenhRYEEsUn5WQ10hXyRkPmlmMl91Ylln''@;'; put 'put ''Z1Z0W1hTIjlPfV9LXnMxVlUxZTowPmB3eyJsX1oiTHNJeE5Rb3s1N2pYMFlZPFY0dSlqbSg8aCUxOHtdW3tYaD5kQ3UzY09DPWBBaHFFclZzYi8zej1+JnQ8VmdUQWFhKFt8P1NZIzwhTTYsKmNgQUZ3S2VqTDJ8SHtSRGUmcVIpI0Zjb2Q8OzNXVn5leHh7WGl+PDxVNX1kZU5ucStWJV9+VXJJ''@;'; put 'put ''ZlN3ZnZoKkklKlNAKzAoKDM0JS5rVV1MPHw8V2VaKlExOW5AeCZXPX0vWH1KcSFtQTpSU0w7cj54O3l4cyQkRDUwL2RhU15SRSgqK2dgI1RkQ2prOCJvblg/dVlbaGUwanBHbUlSOmliQi9rOTBOTnU5a2tHO0Zmc2lqIzw4cmpbP19+L3FrRF8sV0BPKEpzZ05yRH4/KCpYbnpWZUtzMHxzWmtV''@;'; put 'put ''K0AwNDQqTXlZekhQR1pTbW0kMUdILFEscncxb0w6fT1tNio2KnhMVSx6NF1WUUleVm0vdSJNYyFPUWxdJStGXnpMSE50O05VIVM3MXZDPkF6PWFofSk8cDdBOTVbTVlpSmtCVSw8UWF5cjhbLlVwKi9GKSJTZCl3cW9laT1pVmImc1BzWDx6Z1EhZjA6aXNrInVObzxad2RbLClZNi9fLmMrRmBb''@;'; put 'put ''VXAsOTFCX0slbWt7Ikc7LjhpWWdyL1JYLnU3OVdCS0IlbyhPU28ianZVM1p5aGtacHpfSWx4YDU0aXllIXEsY1gzNUdKdjR3Om1MPjFVaCFlTWJHP1N5OGQpVFFuTyVZRGYmYUExJTp+RW5CfnEsRmZlNShiMG50PGFRPFpdYXJDaSNNSTcrd0p+ZUtxVFR5aklqYEUjbGZhKSIhPURKJigiUzJa''@;'; put 'put ''cT5yP0ZSenpBIWlNMWFJeX14Yks+c3c9X1psVV5BMFtbTSxlcUtTSkw0OFVycTE1cCtzWyJjXz4yXyY8PD81PDs7Y3o9QDtCdDEud3JyfHYqZWlBSm5TPV1yVHh1JGlGaVBuezh3OiosIltUdWxuR1JLQ007Kz9CVUNyZE9RISZ5VUhwNCVdbmdPT300ez1wanNzMUNjL2Q2OXIqPWk1UEJeSGlr''@;'; put 'put ''VyV4N0ExbWl9SmxbOD4qaGVYOmtQVjRUe1NUem5NLiwjKl4/JDZBbFYpTihyKWxaME9Pa0dvTm5abE0wczhdJW9KKipTaU80VWJ8aV43NVZKc3heYndyYXxKY2BJdGY1c3xQR3JINDR3QiF5eGl9d31CfXIsPmRlUzdsXXdGUnl3RG9sOSZaJWFXRT9QMiVjMnhDMy9RZy4iJndwLFVlQWVxQUhp''@;'; put 'put ''ZCRxQSlVKGs+MjhZLn0pQTU4LjBgcVUsbF44PHV2dz8wQitYPlRYX2RLYzReKlZ0MnkrYiM7NlE2STl5fjU8YnZCRHNlaTQ4OGh6VyY6QWQpMj17fVtlUWYhWWp8TXI2YSVweW5BWjVqRzpTY25XeCZMWEhTRFJ0VSRGP3ZqemBOKThlbGYhajYmYGZ2b3NJRlg9OTtoTHAhb2NWUEUwOElnW29i''@;'; put 'put ''Ol8hQHRYTVYkdzhjay5rbWdab08wXiRDY1V1UnNoT19XWVpbZ0Q7dz9GQyR1SmJmY0Eocj4wQ1FMYig2JWAuN1ZdJVF3VF5yZSVybEsjS2Y0OkE6JlJ8X11eQ1Jtaj0qN088IUlrRTduV19Be1F0N3lKO3B9STp8R3Rge2JLTjlbclhDKUJRITEvYiRTPncybDwwNlI5KTxMRWlnTDlVOkR0Ikw3''@;'; put 'put ''NFBJdT5NOSleYDJsP0EsPEYzL3EuRUxyNUlhTFVhO3Fkdmw1LExiKzNvV0psbGQsVzdtPT9tWDo7fW98ZEZsYTtEZ1VPTyxvZUZNTl9TZH4ldER0PV9uM2sqNFlLWzRTLjwuai86fF5WUnMsTXlDfSQ3a3grWntBZC5GM2dSVH45XlM0KGM3MDk/aSZjPVVLMEpPMjlyWEwxYDY2bn1bPGZwJSNQ''@;'; put 'put ''IlRKYFd6KCFUJkZXYS9sIVtdMDksViJlK3NbTl15OUI/MGpQZy9Pb29Lbmc3KEtMV1srRUcpW1BNZ3pSKn19RCp1dS9jSVVSJTZESVUhJXBTOCN9Vm1fPl0yfC5IT0RBSUFxMkszIS9NMjJHaU9fU0lwZnJKcGR1clNzKlh0MjxEMEVXTjBTMXFYT3h3Imh5SlFqRHVRZ3hVNktuVXNhY3xyOyE+''@;'; put 'put ''emxNV1oidFMhcU1waklBQW9SQEA0P0chSyxaPX5CdU1iZFI6PjdCMEhLRyM/MDpvTzh3cDxqYjp6TklVVk9sVDgufSRVMGg+cFlIUykpJUVzRjcsK0tdKk5APSVbKDV5cVc8dSNhKEhaM2Zud21AfWI3NE5jSU8sSkhDaFozL1NtXWpLdnRpRCZgfjtFbU9HPUxpV2swaWE6OXt9WTRgXm1rNHso''@;'; put 'put ''NnkyRm4lPzV1Lm9UVjJmXlBPc1I4VjpdVU97bih6Xkhpcl9AZkV3QmhIUTo3R1hILFlpVD1IREJ3fjZYQCpKKjk9KnNsTTxNOkJ2MCRJfHhBP3t9bEE8diwpQTMiL1FtMCMjfnJgRy9MM1pjfWNlN25yQVQpY2FmMDdMIlduanNPaEYkKkc+W10kLjQ/WVkjM1kmMTdXfEUuM00/OFc5Jl1OZjw0''@;'; put 'put ''P3BdUnl5NixKTHtxJGBobE9FTlE2YzwrUmdldjZJRUolJTolPHFOeCRbVUlxQ1EyQGwlTz5NViJ7cVBKcHRJW2JgIWguRX5iNEVGNzIoamksVFIzJk5KOWJnajNCOS5BRUhALk49anVIY2xeRCxTbkpSRkZOdDZydjttd1QjLEpzQEc9VDtDM2V6T2l8fX5AZi9YYCRaP3J8Rzx9YmlvVVZ5UE1I''@;'; put 'put ''dHZqcjVdcklLeiQoXVY6P18+WU4xVUhJPkIhRWxkIyxTTEJoTV1yX2N2YCxBTSJDQStyLGQlPE5TWEM6SjRLdE83R0xdeiRgSSFlWHlVRSY/JGZWKFMieCNzYDZWdG02JG5tVVciZ319azVSUit6dyxUb1BeWDpCOn46dmwqN0ZtVy8hSUNuSjl+S3I9byx8cyZKdUZiQnw4IV0/Y2dLdFhAYXFw''@;'; put 'put ''SUgoRUxlckd+L31dPmpzIlt7S04iRjVqTUZ3cSVwYSs8VXRvPzJdPF87KmdIWlVYN09JaiphTW9IQTMxcCZkPnk4OjR+cnFafkxyQT5rSlVCYSF+Wl5JUjpUNm0xJXk4SE04eTtSVlJ0fGooS1hpLnphJGY4eXZGOiU9Nz97cW9ubzhFRCptbGBGNSx8TlBPKWJzZlM4OkEqVkRwLExZRGJvI01u''@;'; put 'put ''KlReX1N8OWlzPjEiYStbSnJ2P29vT201KkZZLkwsfXFGPHpJJFR4RXljY0hWc2ptX3N7WmpnKTIqM2xvNDVsKkVzYiNnYjclWX5xXigmJDhqREdIZHYrUVB8ZHowUCFyKUJ4QipAQmxKamR6dzEoeHZYdjVjVXcuZUU+dG1DblA2ZyEvXjZ+OnNbVm0qZUkkVnFjNjh4LEchN3dmKyE8ZmN5YGl0''@;'; put 'put ''TWQ6L2F9RHFrPiZeWzYrZEFhXy8jfERdIVpGSH1RMiokNnNiV2REMkBsejpxKGx8STlrZDY1ODF6R2BQejowNXhwMFhlU11iRng0QkZJKFphcX5hLyRaWVRaS0VvWig3fmtOSFBoKXp+L3pYc3BybFtHdVMwP0NsXiRWIStmcjdrLyZpaGxsRUBBKkU1QWAyUzlMKTNuaXhBW0lMZSpSeiVAJkpq''@;'; put 'put ''PDZmb3wpXnBVdXA/U01xNFcoTj09eyxfOjdTUEtRRTh7bjRwT30+NEUveWt3N21tWmRPUCJ4WER4WFhMKmtZY2cjKEdPMilNeWMvNCRWQS9uJHgzSGEyPTl0YGE9PCZJODJoVSE+bCt9K0QhTzI5Yy82MTheQ05RaXB5TmRbKE8mcF84fGs/ez9TQGRgJE1HXnF9OFUhUCE3REtxX3VJOm48Pi9T''@;'; put 'put ''KU1ZUkFBRVY9Zk9+cnFoYT4sT1hCQWNXXWJSakU/aWNAdEJ3Qk9xKy5yKWF2MV9QSCpnUXMlKSp5N3JDcHp5czFDSzliUipdTjw2elp4ZSx2WjNjZChCZWZIPSFsVDw0QGxUVmFXUW1uJDhLdyY0ZEN+ekVjc2dzJEEwditNbC9we2V2VGJ6Uz05KihFV1diSzx+SSVqfFNiO25nWihRMWhUX3Zz''@;'; put 'put ''Y0Vea2pKOmMiSz5AaE5RemUjUEk2b1VuWGI/Z3tobXY+eXJye3I7TlBoI0JPIjRyIi8ub0VLWV07RyM6JCxzT3pyMUt6MzRXZXAxSS5aJjY9VkEhUExTdzRNQC57S1c7bit7TE5QMH09a305MEM/ZUBhQ1dZV3tAKXUhQCFqbkBoTlBdTkg6RHA8QFYlZz1OM159WV5hbFYyeytXN0gxa3Z1Z3B9''@;'; put 'put ''dl57dD9WbzQiXnlTQjpbbjVqLm0jSDFjNnheflhQc019R2RfVCpVQkg7P0NfbnB1XUc0Uyk8a0Zkb25ab154ciEvTDFDV3QzYig6VnddX3M5V11hJlVVWzR2SHRYVDJtPG90OCJ2KVd+dDZHfjFrdWVyUUc6WWshV29aTUI/dHlxPFsoY1Qwd18yOm0pK1U9V1AucHdYYilQcnlPaW4wL3FIby4y''@;'; put 'put ''aXF2KCNTPzxmZSFCWlBAND9LVl00JDI+UnpbZyxvN1ByQHMmYiMkJmZYNmQ+QFtUWk5HUV5aa1RdbTgwLz5HS2JoQS5PSkk0QjY/KlJpa1RpT0k1S0hPMHlJLyE4SjJsZCMqTypJKlFNZWZwR3RtO0JecFRbLGt8LyRTdGpsJGwiQTtJQDxpT15hNHglelVUKChxU0J0cnguZT5TZTRNZiQ8bCRv''@;'; put 'put ''Ri9bNz1kbmQ4UWZydGddbWV0aVJJLC5IQkB6UTwmaVd9X2llKiglOUJBNiooNnZfQCVYJlckMEg6UkBWNkJEeiUoei9pRjR6P1c3aVU5UUlLZVtTREJ8LGVTVCQrU3lTP0RUa3xAWU0yVmpeNS9eMEZLMnkpKCRwY0E+ZjUlLit6L1RpITU7WFkuWjJ7az5qb05hZDBoaiImQENLKT5FUXNzREt6''@;'; put 'put ''c0tdRDxvfEBXaWZXfjJ0SS5hTixNa0ROel48MyxIIXtCe3BAZE8oTkYmNnV8ZSI6PGxmXkVbUihMSTB+NHs3Nj9yWkhzQTImNHw7UiJqSHhTKmopZyhuYU8zO2pbPE1nW0VYVkFiRksufF1yMFU+MEV5L3JISy58fVdtN3U1VChBeUMubkcpUlZuNk5dTit8UGc3cG86UWtXb3JeRn1lQlE8WyEq''@;'; put 'put ''eHxTQiZMNFolc2MqOF1VSlYpXy4hL188Rj5WcXA+UjRiMF9LP34rODFFKWplRndHITlAfntCbiMwYDtgXkFNNm1RKmc5ay5GWEQ0SnYsZUI+Y3AucDtLOXo7TVIobEN7ciY1bFdpe3tbJlpDYyswa2MpJmRSQW5BL0c6LzRJNFAjKzJjMnVMKXM2RVlfKFVLeEkwekJVNHo9WEhDOmIwTVNZYnU+''@;'; put 'put ''OkpoXkFsY1dkVWY+bFlCUk06YylQeiJnNjE0UikzfVcrbnM7KjNeRU1WZHQ5UHFyRE1lITVmTkMqOG8yLE4vNiImfm04ZVh+d2pefDZnVmQ5KSxiei9IL0JaK0ZyZjMyU1R4bX1sPlg9e1tIVW1FV2p3MTMwInQsZjJSLGd7cFlRUUlKRmIzQCsvaFk9V25NUkVEQFR7Z0t3Q1Avc0BhMnUjVzZ+''@;'; put 'put ''Xmdzei9DWmFOSms9TlQ8JDNMKF97Szh6eHAzP102UDtZYXclZmBmTE56RyVVZ1Fdc212ZHBNbCk4VnlKU0NMfT1LbHFmX0cifU4qbzxlPD1hcnglb2s0Pn59ISgwOmwlN0YySSV6XXk5fk8jSi9II2luOCFheFs6NCMoOiwleE5oQDBvMUNwMUw/flMyZldVYWNPX29CMiU3KUo3KV58SEg0KD11''@;'; put 'put ''R2wzJnVsKS85OzpJVjxlUUo0Kl8rfXswd0IhclFMWTMmWX5ISiZCRVgpcTZkUUosOlNhJWdJM2tUTS8zcEBUXnZgcSpFLiVqPyFKYmhSbD1qPkJ8YHJkXkFxMy57YkFWazFGL3J7R1FiMnVMIldeXWNDdlF3a25QaWNOLFNiOFZ+emlkO30wSmFISTApLEwpUDNUTTB7Q1tfRlNPWEl9KTRNSnNd''@;'; put 'put ''S3B1TSFifXRATkQuIz1rW1VMc1lBezNmfDJgP0kxcmErWFB5WTttaUVSfmRpXXl+TmA9XkdqOVkhb2Znclp3W0N8U3pSMC5EeSY5ZEd9UzcvOElnfUlQXlc5czczY0BkNjFATiV7RWcqSkd7LDZLVj1ramEzcERyX3MrbkVNRmFgfHdDbCFRYWozTzI+P15TX0BfOCY+TEJ8Pl8iYUM0QnMqenRq''@;'; put 'put ''Tno5SUJDMElkTHJMMldnSGh1YFhzZlEhMTg/YkYvNzpHaSRabCssW0gsQ0hCY3V0K0AmUmt2Pm99USFnWWB5LGQ2e2RCeSVqRklEJUpkYVJuaVgjTFs+PF13MTpyPkwxWUY+N11QM0kxPlFAKTdpT35rRCYiTzAsLEBlWTE1QVo8IjM+fllONHJVOzVtNjYsJW1KYDpkN0pUPG5Pcyx0K1NjYjF9''@;'; put 'put ''RnsmJn5rSzgybk8wLHQrU2M2SXtMVTxLckRqXW84d19WeD9DTX40QVoxP3N5TVA4SSw0TyFDdUcrVjApQC9pPmBhSVB4YitwPSVgK1VBWmI2NWoxPGd1PjUvbmgoK345dklyVD1TZkclbmp9WExZPGx+K09mIiZ1VGZXd2A3UWRtTi5pbFRtPUlNYDNYUEddPURpYDFZMjBWM0MuVmVnVHl5PitM''@;'; put 'put ''RkwwZzJiUisreVolOjVKJjpMSmJjeTIyaWBnRS9AKz8uZWBIdjRiUzUzWV9iZ3IlO19TZSgpIzFMMV5VWUxDb21LUkhmZ0NlUkhYd0UrIW9HRVlfPCVefHZkI1t9fj5pVmlza1ElUmBUYW5Ld2kpJCEyRzNrJDFTMzIkXUIybnNHNEp+KUBaMFpfd3FXbmNxL1R7dmU4ZEJ+cmA4IiZTRiJAdSQ3''@;'; put 'put ''ZG9VV2R+dERDZUlVSmBIY1EqcE1zdUkoSVNhOD07eixzTXltdGpeZF92M3dDZypLISYjcDkjQiJzbThRaS56cmdvbno/Tz1ufXB2PzhwW1k+VlFpOEVHVDl0UEdRaTglbldhfTY/VSQ6ZHIvamNCdGZ+MH5tVGZZVXhJT0dkTXtXN0oxWnFJeD0xMDxCLk1KNyhqWF5aVUJJaEhBTVQ9Vk5KXlZQ''@;'; put 'put ''PnJLVCozTml2Pn14clY7JnxOSU9SLilOfkcqYGArVC9xWE9lLDM7UGUvZ21PN3kqTUI6ZCV1dztJbnx+Tmw9XXgjcDk5REZ8OHVdMTEzPVAxQWtVJVFsYGt8YjlgJnw6eXBlMUw4Sl8pS0cxPEsjZFE9dnUyJXQsOCokbFd+LkdDbWI2Yjppb1VYd0lnUEVEbWVSQThnRGsofnJHKVJCYDQpTz07''@;'; put 'put ''Uk4jNnlfKnlwMTJmU00oVFROMFNQPzpkNkZHbWh6YjtiaCN2NUc+Z1J0bTZXTk9FUFpPdmJ9eDpZKTYjRzFzZDx2RV9dO2xLMyImP309TnQzLE53KkBIPG8zQjV3OnBxRWBEU2lgaTJbdWY7aFV3MmQrJD5QfGpWanBMaHhbMHZadFYpZF5sT0t1QyZ+c0EjUHdATzslJVRCZ01dY0JpPTg4dEVZ''@;'; put 'put ''W0lRR1JVM1d2UXprbVpdOkdJM1dAO2EzQi4qUDp+WW1uNEM6Z3V0P19VR04uKmtqSnFFZ0V6aXsoSnFeX0lyRDR4bjssUGEoPVVyO2UrZlRYMl9vMCt8SV9JYyQ3bTYzaXA8NmV0bn1kNUZwbTcyT3ZYdk9VKHdWPF48dmpPS0YhIkRuMVVqJHxRJHRoKC8yWCUhTndpfm1NaURefHBOM3peejo3''@;'; put 'put ''dGVMcUtDXSlQbi5Ba2M0XlNAMD41JkIzWGMlKUt7PkRmaS5sSmFHLktXKSh3fHIiNnxOTCRzRntseSwsKlYqNE47RSprTWojYVt5SUJfOG1MRjlHT1gjeCslbWRHLklnSEVRK3AvL1IuP1ImQ3lIInVFLks0LHVifFMwaTpHQ3ExMl5Efj8hd29DMDJQVHdFTlBRI2BSU3A8eGJzLEozVDJlI0lP''@;'; put 'put ''XlkjWlNHVU0pUmgoSVtKJVEuZX5vayxXTldVZDFiVktdNHp7Y15hPllAKyp5fFU9fUhxLjJtfWRCPnxTSUdFSFs8M218aUc+ejVPTSlSVWxbLEU6ekxUYjxsUFVFJFRQcDJKNntaW0h2aXAkRS4xTVY+IyMmTTslQj4vZVE2eFlxOShyQWJTbT0+UGtTT2AuSV5reyU6c1dSPVo6fD0hbUlZc30/''@;'; put 'put ''ZX41KF9PKmZ3WTJvcFJZfHpue1ptUj45OWdudkYiJnIkendvfTImRlkkUUcmQXBNNlJiQms3MV1acVNCXVgzIVAjUCk0Ljp1JXdAOiRnQEpdbUtzOSVlPW0+WTBRSWNmJiZWfDhCIyJ3N3w9Xjl+Y3JNLiVAaTx2eUZvR3heK1FNRm9UNkV7Wlk3ck1+KVJuOEErb3hwK1UoSXNnbzU8RmY8Z3py''@;'; put 'put ''NjssYnhQOlBNVi9MKVJZaTMyYHk/SWxqW31gUDFvKUo5PCo5ImBTT18vYyRPPSF6bTE/eXxJWlVoZVhrU0VZX3gyaE55b1QyW3EzZU84aWUvUCh7bTsuPXJzYGshXjJYSjB8Uzp6RjY5JEooN148am4uTT5EVG1xenQiIkRodHg5Jn1hMFRsfTYlUTRDTX0xSTF5SkQyYUBBS1hHcUEzbTFYLFdi''@;'; put 'put ''YlJ+VSp2ez8/QEwrMUVLMTE8YnhvKFghIl41STBgTU1FMT1haXVjVC8pciRnaEhlOXo6dnxXKkVJYUskeVJeKF1yOV9KaHMiTjNxaEdoXzZAQ0Q4ezM8NUJjelc4ITklbDYhe0p0YWRSRkN1MDJubV9wOjM9RF5xfjlNcndzQCxoWkVxRG5+QDZSKHJVK04+cjZUWThwMzNUM2JbJTsuWW9jOy9q''@;'; put 'put ''W1l9Nl1iTi4vVV4hWSlWLz02TCsqUzV9JHBCaD87U05QLHk7P0Zwbmw7OGMlKkFQM3dyOCM+eWxCeSx+emA/KWJAU080P3FmL1cxLmpTTGtbV1lBYXBOQ0FiN0pUS3U1PTlhfl03OzNZfnw9ODxLckVNfFtPO2cuWXtyR2UyQH5dPHJiOiFJcl9sWC4vI0FaNioqeylnXi9GV2U5L2JjIVBaMkhq''@;'; put 'put ''RnZ+SSNIaWEjMWUjdXNOIkM2ey5mIlcjPlhsJEIxRlckfnQsZjR9UG5LZGZSbjImM2g4VmZoOF1rTUcoXXQ8OUk7SCVDMV1wTntEU21hWitXOjg2ZEJLdChlalBMa3Z1WHJ4ZHI0MmwvLn54QjlNcHg/OkkxVChEUTRacE5oXTgleFhzOXxAWV1fKlBkJCFCY0BSQHNlLGc9dXUwfUM7Z0ckK2xE''@;'; put 'put ''KzdSezlwVV56PHtbYzA9RzlmT059azpkQFklS3RLI2RgbFlhKWN9Ymh+WXtbJGRRJHksISZJITBrVy5PZFFMZFMqSjdKJj8+MXkpYz1zI11CXXglaGhCcH5TMHxQOFdiUV5tZGMvXTshZmtNeSQjdnFFRiRPSEFHJmxda093WU9DTSVxWWVCSEBoVTBMYEI+XWFNaWp7PEspNWRXcyZkJVY4U09g''@;'; put 'put ''eTFobktufXVqIyxuKyN+alpSaDpgQ1YvZGtpYXZGSEtaT3ZQP1MkKyZEWjE8TGF+VmFESTJ8a3xgb2hhW1BhYzh8ej5+ZlFNeE8hbn12TF57MyltZD9zTi5idUs0WCtYTEwoQkhpaEshTzVWRHRZYjIhSTA5WVVaK18wXUJ5XnY9VSgyYGlNPmVfdTlAQllBU3t8V1g+PV81cEtoP1NqfGpvYV1D''@;'; put 'put ''NExvMFhkIS8mIT5ZV2pKU14/dkUobDBXNj55SF5ienNILy89aCM1OjYka15HW0JVLm1FVlMwL1soNm8/OE9wfT0pfT93ezF1fDpHcVE8QDYqY3xrTW1CUT5EZGFVcEM5RWtATm1fMDtEc1A6WykjdCN0diRwRk4uPGZDemcxSTlYbD0+PGwxXlZvfmhPIzImUnBKWyRCejJmcisqfllJeERMZ31k''@;'; put 'put ''UWlzRyR8ImF9Y25+R048VXxMNGlFPWUoQyUkQUVrVEJIQzt2bzh+JF5aJV55Jklpaik/R0RUdDh+dnx7I1ptbmQrQWN+K3Q4fU5XMEo6RiF+fU5tX3w8ZlNQLzUjYTtZI0ZHN11uPkFtalBIc3V1RXhjdyNnKU9qSSN7Mj9fcFA5OzE2X1F+MFZBI3lpMn14PEBXZn5jVm88PWUyUjRfdlNLfEl4''@;'; put 'put ''U1JDUygmTTIsV3s5L302a2NjLHNWM1N8ZnQuV0FuKClOO2pPe2E5WUdGT3ZPKkFrJmN3NUhlIiYlZXhpaEVIRUttWTN+YmUyMkg5W1NRUmRtXixyZj0rWVFVR21va0ZdWzVGZ3hvUiRSWT09Xy5bNXVzQns9eCNAMDJjYWBndlVdXnU6YVc1PDU+S2Zgckt+aHBPWl0kWiVlJkc2UVBAIWtjKkJZ''@;'; put 'put ''Wn5HL01AMipJb1ZDYEIuYHp4IVVGeEdyWmkvZDQuNGxnbHk6MXBXfHJ+V21lMFU3T1MvZWclUGk7RlMqcTlERVdzYH4wKUZ2JUVFWXRNWERBTCsyaVl8THMlMjg9ODYyZVM5aWd3UD5OLjBoUSx3OWpIdHY1Oj9xekBSZzZ2OHFLVTopWl16WHx4Qlg0JT4zaFg9VEJqUVFkRDtTV3U5ZFU+czRz''@;'; put 'put ''KG4wZXpvT1IpXWElODlUW3AoWm0scHB6R3FxcUkmdnJ0d1hqaV99R0k8JG54UTwmK2xEXl01KGgjJWMjTTUoSCMufm1II0xFZiRdWzJyYHlXV29gTHd2fXZzbn01SCJafm1VPnBhWlhlKH1bcXVYcyROa2Fufk9TPmYpZ2lvRDQjXU1uSGY/YWFqd2s0S1V8OTs3YjVBbig5cnk6VkI1bHA7M28u''@;'; put 'put ''Ly44S3ZBclN4fncpa2tlQTFycyohL1VaRUl+XnA1cntQZFEoJTwseyxneD9TV2tnYkMhWDt2PSlqLi9fe2s+eXIoP3t3a2FMfi5CRnd6ZGMkRURdaSVuc2hXNnVWNC54I1U0NTI0T0NiQnRwcFRVNFJ2b3BzQ2hke3w4V09RfitAUjo6c3F8VyxzVDA+QEtbPmlbUm8jJlI+Zm89OmRwZXNSXzI/''@;'; put 'put ''OTc5Yj05PlJUcXQyXi4ufmA7MkteP3daW2lgSWJqVmhEOnJVX1NGSz4ha3B1ZlthTmhqak1SNGMhJkYvVXh3TkguaCZEdVBBX0QpX0VONUNKMCxzL3pBKDpdR2wpIXYyJkRBV2VxNEBUOHdUc0p1OmMue2pgJk1VJCRpMFF0KnIoY09BbTEoOmt+PjZOKH5nQTlLcnM5Ti4uZmJ8QThoN3pdNjM7''@;'; put 'put ''OUp6biZuWT1BLF1bN203MGVDU1JIcjhoYyJKdC5EaDs0L0ZAKDdsQXNVJSpKdj5tRiMhNiF8fFN9aDNrZk4wVzVxJWR4X2BOZnpMa1BpZGxobnx4JU5dR3dHZi5weFsiSTxjREdyJDl9TlRrcipfKl1oOmk+eFhJX3tvMjhxbD55PmM7NSxtLDI1LktsW25NV2gyS15oVlVmNmNzYGU5TXJTMmRp''@;'; put 'put ''dmVMTXYvPDJIMH1Pd09ZZHwwLm5pN2lPVytQZGlZbl1+aCMzJVMkOkZmRCQwXnhQTVNIa2Z4I3wkSTNHTFdAfmU6Xl42Nj97JilLLlM+eF9MI3pFTmpzSyJeaHdVLCwhc3tzKllVQVJBKVAqVUJZWj4wbDxaey5td0pPXjlhYlR7biQ4YTxCOT5+RnBjS01uVilzVF1XbFNBeHh2UEdpNGdHRWFL''@;'; put 'put ''SChCJCkuZioyciV1YjV7XVAvVy9NMTRzRzJEeWJgY0RWLHBOLmpWLk5sTWlibDxPI0lkKSVwUG1DOU9gZkduUFFmUDVWY0V8P0pXUVkiM2FRQSpqPXk3LnU0O0tQPHhHKiZDYj41On5UaDtwNiwqLCFkVE9VSmFbfEh4VElQSmZkYCIhZX5kUTcleloocURZb3JXQlpiI31PW1BoSigwZlI7eGtn''@;'; put 'put ''dEdhdUxnJGJpT3hobjBRKmwpKGhBYmlPeGg5cSExLjpOUFJpVE5+KDRjc3dXZn5LT1FYZ0NMWGdOe1swbywlaj5SRDQhXn4zMEJfQiVGcD8vfTw+ZiZNLE9vKDFTZTsvfi9QVGAsR14uTWUkdUY+Iy53XmB0U0RtT09bd2BbOGx6filzfjdhNy4mRW1bL2x7KktTKFN6W2xRcmxNLGVfJikqKDtg''@;'; put 'put ''Y3paJjo/OyV5PHh+fVRzUiFMWDpaQDk8ZjJYak9+N2osNjd3bzBfUnVENjlzJjYmKzI4OHV5MSw3cmxacSFDVU8oRzd8RXssYzFYZUBSSnVCSG90X04lTn4hJSwjcjl+NV1YND9tSHR+c31lYF5+aHhKOm54Pm14dTB4RytTPDRlYSI0LFQpY2ozWzhGYXIuUSo8XV9LUXhCI3hlOzA/KGNZRUtq''@;'; put 'put ''IyRGczZ7TnMjOlhQLEI8ZklkQHY/Z3NIcCVIJHNBOkNBWHVXViNHQU9BPGk9bnI7bC8oX1luPm48PFo9eztsL3V8MnI4N21wSWYwfCU5SUwmZVMpUnYxdml8KF9maVplcD1fKko8X1QoSWNLOSElUVQ5OXZ6QDhKMzZyYz8pYWB3Rn5VcVJqVz05VmdEN19tQlFAITIka0x8VzRPMlJ6KngzSVUq''@;'; put 'put ''L3p7NXIzXTpgSSwwcixlOyYjen5wMS8vVXg9W296YHI2RjV7R3lmKns4XlNJeWYwJGl1KEx1W3hFSjp3K1NleH1ZKjtlUzBQdUM/YXNQMUQxI2EpJlZjNmhYfldrQl5CU15ycHVkPEorRW4salZLejZqe28jdmFEQGJRVXlzaDl5fGZ9bmtAcjs9ZFJUflhWfk1TT2xoMjxVJDtZQltMbDRSUVBI''@;'; put 'put ''Il1pOGZEKS9ibXt1cjo6a2hkXlY1WXteRzR0TD5tITdJK1V4SV53aiplMUQpXTBENVQve3AofU4rLG82fmdmYGRvVy5VbiY+TW96MCwmK2pVYGh0PiR1PzFzWnVmbytvfTNdM0E5Jjslc2w3Ql84e2JdVnBIKmxOVygudk1uMEZUSUVGenIkZnYkY2lFSzd8UHMlMkY5U2s1ZkFzWWtWNX5AeTZJ''@;'; put 'put ''LElbRitGLisqMSNAazMxeWVTLGk6P1Q7SnE7Lz8uP3t0OnxNbkg0On56aEJaT2pwOEcmSmtOUU4oQkNBfDAlYmc6PERbNmhDO34mRCsvOFAzdn1mPTteMnkpdiZoRWJJeHguSnsxOlpvPixIOUhmaDJDXm9+LFIsSmU7a35hbUxTRV8lIVlhPE1nMip+OXBoWVR2Rm9sXk5AQVo2fFgueUJaX0h4''@;'; put 'put ''Mk45X1V0ZXFTbnovIXJpYkhbYEdVOk1EJHFRQ112VV9+JlRLcVdSQ2FVU3MvU2BuQTU5dVJyJVI8e3k0aWdlT3k6KGBQJjZNVj9BOmMjVlM8aiNYYi9SY1U5SDo0JSZbcTs5VVkqZT0pKTs8UlJJdCk6bUBzc0JLUm12YDY1NV5ZRjdaIn1zIWs9XnNCX11IZXpZVEtVTTBuTTVNdGQ9QnMiRn05''@;'; put 'put ''T1s9YVhITiMiZER4NkBVZnohQj1NS2FmT3pAb3h8YmJSMyowbzZZOGt+bT8hNlBnW2hXaVZ2T1YhQnk8RlpYPzAwcm8hM0ZwYiNPQlNZXjxqfTFqV1MqcjguSzJIbj5QMCxYXXN8TG00UXE9c01KbmdfYiVyQX1SazYpamloKUdiSzxLPDs8UW5aK31tcG5weysvR358Zk4ySzx6MlJXejxPdGF7''@;'; put 'put ''SkxmLzM4RjNwYGt7PEBJZFZ8VSg5LEVodF0sYzdWOWNfN0QwPkZbaDkoNitieUNkUVN+ZFVwLnskLDdfU3RvXWMuV2taKz17V2lxKn5JUC5AdGZUSVtBKTxARn1RRD1APj9xQmxhak8zXlBWU25meCRJPHlpRmJJZng4eHdUO21pP09wIj5qKUQ3ODd8OTFRci9kIzVCX11CIjU7PmBxSWExTC4l''@;'; put 'put ''QGxpWl1Re1tKQVdEaFpoOlNkLyxjJXsvZ0ZCeio6KW1JNixLNG47YEM6SCpTPF4oRmZjRyhVfjtqaWJZPmVsTl9ucGtiYG45KVQlOWhsOiZAcjFkN2VsUFJAMC5hTl0relY6WHxreGBMYEQsSUg9YHc8Zjp8JVR+P2l2NzU3T2RyKDsuMmg1RjpIMT5OW0pjZ10sbVVUT01PbD09WV51eFImKFFj''@;'; put 'put ''XVhEUkRaWnUqLzMjMElsXlBzSi9ZVSoxRHl7cklbNCVTaHIvNSwsMThyQH1efHlANSxddTBZOEhhSU8xI3ZNIVIjODwsSVc/dm4iWl1+VzptWnhVQiVDfjhAVl1UemExQktOXTNuWVVIMkJyMip8SjBicWtta0dOJWhobl4uNUQ+Kz48MDVtYXBdKGMjaHAzI2VqJV0kflRCa2c2PnI+ayUhKHVK''@;'; put 'put ''W11KYGo8MDxqZDIqW019bzpROkY3WTBZeiZUQ1VOM28seWskTzRwTy5uNi8hVH5jJSRSTjNyeyZQJClsVDhgdzxjW0hRVS9EWiwpd3JOWzxRT1hJe0hNKTdhWi5qc101RC53OWxWJDR2ZU5CUE1vZ2l4X3g2fntZPlVONzRNeCRReCtncCklbWg/Q0A7fFNlZXxSNTJgZnIzUiglPDh8N3YpQCMm''@;'; put 'put ''a35MQC9wUXUoT1Y0cHwiPT9nQ19zW21JRTs0VEhye3drO2ljalEhP2R+QEtxLDQieyY6JU15WVJ0ZEphfEVkfDpmODg4dTkwRHkke0dvYlhtZXA/JTtzWlIxU3A6IT0yLysodlZlWlszais3dGB5QlFTVXF6PD5FeV5rSSp5RlVQV0xqKEFDSFRZanJMKmRtSk9jTzh3KUY0MlZ6YEpgTHF7ZXBf''@;'; put 'put ''IXNGbk1raC5zMWt5e09eRikpazRRLEk4Y15kQ3JRNFtYN2NxSU1KOTJMPDQuekg5LFI+UFA4SS9YdlJIYXpYPmglaF5SZjd9OlVadWttMW9PMU9JR3grJXczSWlPI2RyKE1ATnV9PS4vQkVUP2g2Zl5+PTtzfjp1TjpVYkpnYS5UJWtgWjwpOSl9bm4vVytRNGNKU1o3VCFzdGI6TEVKfkxadzhS''@;'; put 'put ''ZVN5T0lvOW5AVCFrUVklIUV5WG8xOVBRXm1QZFtNOXIsMSttMzBpRks7dj5aZWhmVndJTE1dPD81KVM4IzhMKjsjN1NSfTEqX0MyUSNzbFAmYSpCa2lCTTxFdXRMZkx7bz9zQmNGRCRbbypeQ3A2KzUlUHA6IWksQHNSLkp+czZEa1VsJXFJM0ZAVkpPKG5eU3BzVWYqQi5nOVcxP315PldfaGBb''@;'; put 'put ''VF1fe0xrITAhYV9EX1JoSTpxOzRMPyFMRGJXYSVyU0dbfWdKWnBwWjk2K3wubX5jZCgqVkpXJC5NV0p9NXU6PTVqYUZqVEBxamtXdXpdK1Y4b3AmQENLcT1YQjUmbWJ5KzkpbHpAeko4QXl7TWZ4OHZyeUp5TzxDXnJOSDw7cjddQjJLXm4hWWdSQnFjYU4mPDh8SExvL1hQLHN3eW85SC4+ZzQ2''@;'; put 'put ''ZzAke24sL2pFN2VYPXJieDZvNWY0bjc1VyMxc2VeeC4+cmkxYSk8UjJZVW0/X3VrNS55ZnpeKFB6N0N+MTpBNnI4O2ZadVhVfV0uMldFcW51cltxMGloeEUlKDYhalN+IkVEKjhGVlg5cj8rUDVVX1g1cU5oK1NWbzhKWDxwKVlvVjkwdVsoXXJSNTM3fG9VTS5aX0ptM1tBWk1CPiR8LnN3fDll''@;'; put 'put ''LCU3QF87SWdleE4pLl9acVVNTD4sUlZpZV1ZI2tTMkg1XkgjLjxlTH5SWXYhNV5DZE1LNSthZzJJaDUjVyZOYENTYywpSXM1JSEvdjp5LFJZaDB2djBYSCpFMUtOIWswLDJ3NGU5akgmTWx3QCpTIiYveylHeEBscXc8N1N1L1NWY2x2NXFeRkAwY1tbOG1SXWJDQWY6Vz1sXnsxdyk9bmZzNCQy''@;'; put 'put ''bC4rdWlPNEApbSVVflYieWF4b3k4OFhQa1lnKnx0bFk3b0ZISCZQTm0pKypCdTxTXTd0KjBSYSlkXzdLYkpDJS5Pbz8lL3RNNjBCVWBvajc8UCRCRUI3bjMmTXhIVVpYMisrKkEuYVVXVy5pOXFpS3xBTV80MzlYUnhzI1pCckxiWGQlfH1FLE98althbVd6WG85Zl4od3lALnBibkQ7UUZqNzwk''@;'; put 'put ''eEI1dHdybm1YQVNbIUs2ZFVXJDN2Sn5OUmNFfCkzTFd5WFlKTzBSPGtRY1J8MX1EUyImWVYzW3Q6SGlKek1bUHwyYjs4Q09EUF5qK1t9KC9GOC4mWnJoa35ZckJYPF1MUlooNllxaHRdR1pzfT4pSGo7OHt3LiFjSV5feVElal5feVEvPz1IWjI3b0l7djUmMTYqcHFENE4hZHplXjR4eUtRXjpq''@;'; put 'put ''cVBuSndiK1F1KnZic0ZHVypHbzpVQlF1YT0iaTRUdiprc2d+OjRHcSEuYyRIREMkcDBpfGYycn4oXWBDZnd4QkZ7e3QxMGNwMXZEan0yVVF1NS5pdHVjWnJ3UXV0c2VpX0tqM285VTFPNFRVazpiSG58MTZOcF1mV2JZWjRQRGlEKFAxKDZJbENVdzpLM319YTc/UE5ZPD8jMHJKWi9ZT0g2OnlC''@;'; put 'put ''KEdkbkd0Yi9SMEZdRWRQMy8/YWNIQyJ7VVEiOE1yNCpCPGNNYTdhcVVUeWRqLmRWUHdRaHt3Xj90dVlUbnBzTmolWmg+Xk1udWNjUGhCc1decj5JTkQ0eD5QfWNwak1vektRZHt6KyIhaXNFSWY1UmxaI1IvZFUiM18yTUVQeUMvK2JWeS5KVCYsNDZvUixmTzdGbiEmYDpXcD5LTzhRYFd6MEtR''@;'; put 'put ''VyNKc2hgQl8xPEZsIUlDPVZiOlppOzhoOWF2X2lvK1srMCNdZWxWXiJyakJaQHtxdSpRLiQ3YEZZSmVDcWZoYG0hSkQ7am8oS1pVKWx7LkZ1WVpXX2B2XUpLOTxOISViQDxYWThERkhxNX1UMjE5aHNKOl9jMk14MCtBdzFtTEE8cGlSW3ohSUBEWV8/bCEvaygqaD5dYzRFYm0laV9lTWE5Zz00''@;'; put 'put ''S1NsLFhEWTNHdXUrQlJFbkc4fSxfNkN8fD4/XW9ZVzQ0S2ZkXnldR1cyRFN9Zm4ucHE/Pj9rUy82L3coLHhlVVFBay5NdXg9TXZRY2V2UTowVX1NeGlONT4vXzJTJlp+OnFbUDQyfSZSL1Y+UTxrWERJYF5LMllnNk90QExlK1dpZGBqe05feysiPzd7MUEoN1J7N2xMODhPdFVLQjpxXUV5M0FM''@;'; put 'put ''U2pkSF9XNS56P28jZHpFV1VuSFpCV28yK3VpRk0vKHpWVGorKHpyNj5XREslbGRINDZ4L2RfbFtnQnRWKDcmNyU5XUQ9NlhXSmpfUHUjOys0MjpLZ109bVp8W21gSygvenlpI0MlK3I5blYzekZ0cTxQdT13fXpIcyZ1XX5XSS52Qms0aTZ3eCZnYSN6Z2pfOC5IenpAaTNISk5vayY2KygpOH5k''@;'; put 'put ''UDB+VSkpMm5PTztRUzJbb1dKbkoyZ0AkPkckdkUoZy5gOldPfiMwQGdaL11+TnFUVW97R0wzT01VQFUuUm8jSGh1SGolOzoybU1ASldJbGlwS2REX1k3YlQuL11sJUtvPyJfSUxIYDJzNktTaGQvR29JQjt7e29GajdVPyZRPGRfenJuVjJMdyFlM2hecn5NaHNVbUx7TGdeaXVIdjlgSGAuKDd3''@;'; put 'put ''Nyg5ZmByJUsrbURWVV1ZeV5oVXosTlNYKGw5NUxOP2cpN306MDUhb3I9Ui5ZM2kzRTVkOjlWPyZKLzRGYWdVPUdMZ1BdXjIvQStwKHh2RE85RyksWU9ZIzlHayVnZlF0eThaJX1EOW08NW57WlZIezkrXXBPfnhlfDtyOTNIc3ohdzZrYGpCaHtOODw0Q2cpdjEqeHJpQCZQUDlXQmh4OnBWPyhQ''@;'; put 'put ''WShCO1hFNChDSz82cnBGezRAYCZLPVghKCxmMCNve29OZUY6YUA7MmV9UklYez8yal5SU3xpM1o7eFlZMkZxTnpsfFlNdElhRXJVa0NhLzBFeTR3VDlAK3FqJUE8bENhX1VvQl5JdF4pKEJHZWFyPVFEND8wJH13aWAvV3BiP1VRZ10yNiJwMytsTmgwRz13I3M2cyNGdzFec19HMV1+bmF5KVgz''@;'; put 'put ''IzV0RW46OEEqQmNzMlU2cG9AZj9yeSU6fDRLaXU6RW9VKUNdMFtvT2JKUWl8fTw+MmJMXU1fZFAwfj5UPzlJeD9tT3FjZ3RZdGo+OGd4MClhOUY+MGlEI0JfQXFlWGs8Wz1hK1U8SiNTSnFacDZ+NUU9dyF2YX1YSXhYRFZRdTVzUV9TISx0TDwyYz5ZQVp4IUk9ViY3QXsxXWpXVllleVIxaFlz''@;'; put 'put ''Pk4jSVtQfmMyRl13JV1PNmc/T3VsL3pqenx6I3tOUTd9dT5UIzhsNTcicXo1bGFyY2c+fT0rQyU/fHoje0ZQJi84RmhdampFM0FTa1grNkNWajpSKl1XMD93PDEwZXY7MFJsPilzNTh+QHlFUV96QTpqNTBiZHJoMS93Iis1QiJbTl93MkRrQFQrcHdOJl9YQDtDYn5jc2AyRFomXz0pT0JMVlRM''@;'; put 'put ''O0NPVV5FbldLfXlkO31XQGp3SEpeRS8kZnNpeiN9VmpiY2h9Onx8cz5kYEcrfTRDMz9CNmtvMW1+K0olbjEwP2VpR19VJSthRChJMyp6fDIoP3poZXc8KiRibX13ZmFOMS5jfn5hNDN3VVNWSHtifWBKKVI1TT4hO0V6Kk17XV84cVg3NXRzUiEkYHpwJXQob15LdUx+S3QmLmFPMH5CO3c2SiVp''@;'; put 'put ''XzgjYndhOT5qPyUlZUx+QFgzQ2daTH55NSFvel0jaDY6flBzJWMrPTxMQ2g5WWw+VWFIVn1fZFApTTAsc1k0Y3V1NS5+OjpJUzJAfH5mbEVKcyVuMT08YkNoOWslVXkkeVV9dCJxUUQ1VX06dnFRMndJMm9Ae3NIN0ViZV1dT297R2Joa2UwLn5jNFFTXVtSTEk3LGlINy5aYjl9bCVwdWUwfjVX''@;'; put 'put ''NHY2W1JMdDd8SitKcD4+PGQwQ15Sdkw7S0Z5dURkWlh3SXhAVzImcmVdcE5qS1hZfjpyJSs7NlJ9PiU7UH0qX3RCaXJ8cihnaUkxa21LWWkyJDNDXkBYV2YweHZRUDxde240KHFYfH5HTiReTXJVeS9zIn5YaCJoTlRMJEh4QE10amAzaEBsM0R2RW5Bb0ZlLEojIVYwOEk9aXtoIyRzVDcvQWRp''@;'; put 'put ''ekBVI1Y8TClbQmo5SipjTEopI2l0MD5pWyJZPm0ibkpJI0EmJUVFQHlKMUVRL2Rjc1UrT14zfHRweiQyIylAYEc7aUBoOWBeNjo4R0BDXToyVng5LyF4MD82cXg9UlBiKiVaI0ppJmQzUENRN19KNHx3IUVYUzB4S2ttJWcxW0I7Y1BlYlJta19ldzk2eTFLT1d3OW1tRGw2TCg1Y0wsQEgmNUJb''@;'; put 'put ''UlFeYjQ8Xl1PcURqPmBIXyR+PFZddU9ATkB7fnkzbiYlMylgP3wmX1IrY3s8VkNlaTNuSj1PUXFhJF83Y0h1czQ5YDZSSHBnN29VfCY3JTdVbFssXy9IP0ZDVGJ+aUFTTmFBU0IyfVR5VF8yJUYwPihKNUxnRHZaPXR+UUZrIU1tVld5bmw9Q182fiV0S1lSY3d9b181dF0/MSRVU0RMQVBbJDZM''@;'; put 'put ''KHJRfFo9dFQqbnN3IkgpdDVOPTxlfGlSUHYvNzBFUy46LjV3SUR8aVNnWlF7K2Q1Tytfblc4fUZjN3JOQHM7SC99Ti5MQ298Ok9hLjpJI3YvWntBc21qYktFKCpVcUd2aWFzajFkbWxpa1tzdUchcDxLS0dGI1JCMlBzW104I1hnfXlWNDY+ZlZldWM7I3ZZV28zVzc8K0IoJnZMPS5TOjN0az5n''@;'; put 'put ''bzl5a0xKOHAmJTlqb1BGMl8vbnZKOT9dP2VFWWwoQiM8eCR4OlM8NVNsdngsak0vLnt2PHtkOTgpVmJUZ0dOM3Q7TitwTTN8cV45W1hqMUAucnFMeDZ6QEhOR1tCMVYyUlduLHpvOzNXT2BtQ2I/WkY/IzR9c0RkbWdXSio0N0M0a1c+NkViPUVJODE1M0V9ai5efHx3aV80US9DZn5SR00pUmpD''@;'; put 'put ''a1FTfX4/JiNdK3xmV0xpRk9NdCM8cV5NX2FWaVtLQzpwWDdYIz5hQEJWaXhTS19heWE8dkdMbyZtZENoelV3WnttcmE0UX0oXWgpMGVROWx7fW5ELjVdd0dLWzolW3JRcT5GNjlxOVgoQi8kZVokVFkubl9LUDlALzNPZlZqN3F8KVNZYSlsUGEjSGk/OnlpJWRRMWA4fitwa0d2TTFDensqY00y''@;'; put 'put ''YSUuOylSJkYrNC44b1JHRjRfRSU4TjtYR19nRzsmSFtdaWh4d2lxbn0hYSNUTTBqTipQR25QMGJ+Xj9qZV58RW9gKSg5fEV5IlNwZzQzUz5+W0BuIm1kdSYsKDlDT0IrcEwsc245cCI0bywzUF0ifjFZOyhib3NRSDJUYlJIYnNKR1YqXnN8PjNeTlVvdnB3OXtHS3NXW1csXzVpcnc5SiNEP2Eu''@;'; put 'put ''UzhfUSQidW5sS2wzYHElV0YxS1QxK0QpNng+JGxMQ0giQkJHel5sOn49P2EzPm9WO1lteUouMTJyU25OfWhHQHVvRmEoTGhCPFJKJjBZUz5kK34hLz18PHJ3NkxxYUF9LkA6T0J8O25mJVBBW0BTPzBkfWAoZkdaUSJxNm4jOyxQcWZqSVQqL3xWV2csI315bnZ9fSVtRD1UKUBuQEwkcCZ4QUIj''@;'; put 'put ''SChyY2JLSXx7NEFXPH1aOHI2TDBwV0VtRjIvZGk3dEY0fCVjNGxQXUNOYDg2UGQxXnRCVGhoJUt+X0ooaSNaeXxkbVN0cShfaHdvKDw6TUx1TTdKNyQreCp7djhKPHtyK2drL2AkRGlRaDZUQnBFU2Q3YjNWI2MuVk5+ZHBGRzBJXywmMXJUXywmS3wjQk4+eXJUfiY0cjBiNGphYlQsOVhTSDg7''@;'; put 'put ''RnF1PnQ5U1ZDJjJGODJsIz99fSl4QTlMWGMoYXM5eH59d0YuMSZJaX0+WiFwdE5ePChvK09oaERrN2wkL2g5LnNiWChwPE97WyljJUUuOUl+c1pMbmtqWEtnbDxDSUU5bStsLGtueW9YTSRReDN9S3M0Nys/JiNFT1RwMDFNV11tZUpNZFpoSlJoaCs5e2x8I31sXjBGfDN+KWxuNXc2emBXMUp8''@;'; put 'put ''ciJtPVYmN0ZSdHx0NDRtYDtuRDYjRH4/KEpqdGFCcDgqYWJCO3tHbFA9LnEiWC9HbTRRIkFDeXJYZFd2cFordm07VS85O3hOXnkoa10zdD1Fe3YmaWUpOzEsPkJSIWs1KzlNcU46L2c5bW89IkJGLj9hcHNTc1B8aj9ZJS9KTWlFR3d9dGpeI3hgdmBmY3N9az5JWixPMTdxYTVxKD59L2Z6O1ZH''@;'; put 'put ''Pmt6Pzo+cTlPaCJbXV9tRyhoS05XQ0xmLkdAUTF3OTU2aEJDQ04iUjRfOyVWI3ZhdkxPYjNve0ooWll9ZEZLPmQoc2NHey5AOCY6KEhvN29VSEs+ZC9hQWYjZjZAZm9sZEFjYSNCN1AxYXNqLj84eSpoQlkjbzlJI3taZTdSa35zIWR8cyFgUTs5YSpWMX1bYVVwI355VlZVVCshckYuXXAkaG4w''@;'; put 'put ''JD1GLn0/OSpGNyRIJnluYFImO3JCV0FTbkA/WTp4emxvaCEjVWVaVigvNGxSS09GNTNSS0g6N1lNVDFhNWpTXyp2dltoKj0qKHp2eVIxeTdoO29zR0olcHx4OCQ6M2pkI3hVfkp2Q1ArMjo6QVZrZHJ+QDNwZEIiJSxzUndmIkpMPlRMXndbbT1QLEAlKiIreyZfKiIreFtdR1toYDd7KH1zWj0z''@;'; put 'put ''VGxFbS9lJFAzSzhyeEIoWG5QSjc8Mi8wMGVEOmJhd2sqX3x2OEo8aFZ6U3A6QnszNyhxTV1xdUs7U2k2bXRSfllmPXYqPypyKCp2KXhOfGkuOCw1OlMqV1NaSnh1SltVOmhgZGhTYk1ESVNeUFcsVSw4U3Jjb1hJajl8fFM9YktfVjpHUTE2YWs1KU1zbjR+X3RFRGVjWkNAOCgvImRyT0RjRnJu''@;'; put 'put ''bmx9OGxVbWAmRyZuKlBVcyR0bX1CTEIyYDxeayokKmx9WjomVEU7TzF3Uk9tZ29RJF4lPmEyQCs3ZktXbj8uJHl0RVc0XzpoJW0wRz0yUSZQU1Npc30qQmI3QHttZDc/YTlnKnp0SF9mIlk9IUQ6QnEiaSQ2Um9FeUddISVbZDlTLlZPOm9tM01Vb0FaYG12OF9VdWtjUFBVckRHR0krP3ZgalZy''@;'; put 'put ''dlY9Lip6S2lxTjVibzpeTFhxRWZdU09deix8cUJBfDg6aitLVlNTZilJPD1PKzRMdHk6Uy9vXSFsImgwfTtwa2R0Kld4ZFA0a2JfUTJzbz9GZ18sNCokKD5sODRlfUg2fT1OaXViJF4vSEdtYCJ2ez5iOD1jLGo+V340QVtFWiVIU2o3JWNwen0laltrcz08bmZfVm51SWFzInBoSHJ4JHFwP1Vb''@;'; put 'put ''NER4MyYvRHNCNzMubihTPXVFSkhneWtEIkFnPnx8XXVMKVQxPEJ6V3ZRbSgqdV5+el1BcU5lQjJaZ287Z0N3KXkhcWZQc1NgQnBufnNIX0RhSDUvJSx2R043XX0+Xj5RLyw4Xnx0QSZCPl5lSz55dUBfaDQxPiJtSGdZOENYOTwqSUl9UyNOJXBiSltaflZNen13Xzsyd29SWmVZNnd5QDosaUds''@;'; put 'put ''YTI+bVFhdH0rUDNUfiFqNUZFZWhraGVsZEI/bGxda2N1dlY3VEZWYEkiKz1+OVk7VjN7S0czTDc9JGh6Ij9+K1ZDRntER3orVGFWX0BfQmFgbSxmRDVAdyNxaH49Y1lDPGpvcVF+PWwqO3t4NCZzZSRJI3QyS0hhX0I7L09hYmEjY1siX1t5JHZ2YWRSYmxHLmdoO3VsVzlhO2A+P3hFKV1UMUlQ''@;'; put 'put ''bGc7WWc4YGc9SjVISWRbfnRIfEJXOWVhIX5FUDxJR3Q3YElDfEZrIVFWdTghKXI5NHFsJDIqVDt4RjpHRFF+dXVMS288emMqLFleNE81cmRmZWR1XnV2X0o7Mm06RzRGSm5DejleaGEvdixYSGQiPjJgNC85WGVYPlRyPUcpbkVZaHVUYHlqV3p9e1B2aj1qVEJ0am17JXlIVzJ7cmBrPj8pMTtb''@;'; put 'put ''ITtnL11Oc2Z9UjRpOH1eejY/OnleO1VYMWJzLkRxWnA2LjRrenplT2J2U0hwbzFCLl1lXX43e3I0NHlaeW9wYzpkZXd9dkJfRm4rblIrVzh+ZkJKT082bjooQGIjUGU6K0Ymaz5WNi9GPndJTV9zNmk/ZUI5JmlMc0tmWFNkRlhqTS99OFtWJSEpaig0QXMrfllvcFdENHAsSXhwcTk8OGd7IWY5''@;'; put 'put ''I3QpSiZ6Ml1TVHZKaGZsYyEhZWhye2o1aXxyfmErJi5nTVFzOFcvMll+dDxnNWh4PlpsW1tTUF9PaH1iMlleayZQKWpFbDhHT0F8NkUuYCZ3VG0jIjBhI2Ivb3hNZlpOdkxpajcpdmB0eSRPSj16P0xaVSxCJlpsVXNbYU5WUllCI2srT1JlZDE2XnE4b2RpPWB9XWRXQ0RCa35EbCt+XmUkbmZS''@;'; put 'put ''X2Frb00mY3FyQVNpN20xNFd1eGlaWlJmMldIPjBGfCVpTDZqOSVlcHxRS1QsXUgxT1N0dE4vXWlUUyFramhVTSUyO1NyNGchbktHaCRIM1A6YDNRQjpYP296djgyeHBSQiUqI3tXVU0hZm0rT00vZFgmfj8hdlMzP0lLTCRwPEFxW1NJRjNqbF50PElTSWQ8KzlQUWpKTDhDVUBRM1ldQld2OlpL''@;'; put 'put ''Nlk1SEwkRUtmPVhCL3syV3JoR1t1PD1OWE4wS0MxU3I0L1tZO21CR2JzcUYwfFMmcVs3elBpbnQ8I3ZDTTJBfnEvPFRWaDs8OHYsXThIQStveF4rcTsoak0qM0hEQDtSfjI4bVhmLDh7d1MoXXhwQG16dkB+em9dPVhzTnkuZ3Z7Vnlva3JnbkQxfG9NLDJVZSk4aUw2ej1JUE1HZnRHK1ZtMHc3''@;'; put 'put ''dkAvXnU/LHFZRFtGNVMlKUJbJG88WWU5SG9wTk9JUGtqOGYoUDlxenNFZis+dj0yKm8pIWlvZmA1XUs8Y2BCVHxaMVBNMEtHIXFNd3lUbT5gUURDSE49Sk9HJj9tZGk7IUE5L2BMMltgUiYvSSRkbGVWRHY8Z3Y3anRmVXR9TTlgZ14sOHh+eHFreUFLdGtBfUxpZz5pbj00Ylc9bHI5SkhPfjg4''@;'; put 'put ''THwyciVYLDsoa3NfOi8uU3dzaSMjRTZoL3Y1N25CZ0NKUjBdKi95ckI4bWFPOD1tTmJKKixrOmFoOTQqM2U/M0NTPDR1MU5NNS9sVmM0ejxCKnJ3N1J4b3pbbnpuNEBNXVZLTk1LdkhZX2F3d1d4c0FrQVNQb0VnLCh9VyZWUz9fWT1qJXdWKnQxb3dtOlZdWFNZPiwzYkpBP3wpNnVoJHQqY3U7''@;'; put 'put ''U1Z8Z1diWT10Wmlpc3oxVyhfUHN+VldFSjchQDMjZy5wLDheLC9wMj9QST5zMnd+fjppai5jMERJfm1ieG1XRjRHPVhDVXQrdDxaNW5eJUBqTEFYXStiX0k9aWh4bzsrdlhhOkhZMER6eWlIJSoiTH5HWFRQUEdHR2IzRzA7TypINDZPYSVTI3V0VVYkVjNNJkFZN2I2bGkiJTcvTkxsbFVmK280''@;'; put 'put ''UixZLE5sTjl7MkE2XUhTKGxzQWxuOmMhNnYrcCU5ZSMpWExMSUVoeFVwZFZPM1JpK1FWMiplREh3TV04MUJqWixUWkZaQjVDL0xAfCZOQGMlWjl0WW1WcT9kX3ImZHA3SGA7YyRgKTcxPyk1alshNXV9bTRuWzZ0eEwrTCZKJC5RQjVVI1ZINGhMekV4fmdJOUVeTkt9eHssfC4oNStzWiFGdDpp''@;'; put 'put ''ey9RVl8rT1UvYklzXUtiL3giT3FsX2VKYEpgSTVhdy5Ha3N+RWdVK2VgRVouVjR5KlY0TXZwM3RqeCNyRyV9dnhLLjEvUEhtZCohRWFad0RhViE9U2EhUEx9NCpLY15SWil+c1Y0ZmIrInY0OXBPSDYicCxtVDNUMEYvYSZXIXh5YlE2KG9+ISguKHVhVjVlJWg4TGgpaTlpKHMyQllfQSZfbzJG''@;'; put 'put ''ZXpjNGQ9dyNucGwzIiRMYl5mbFp4YHN9YjRYOD1pL2psJXdtezNyVTw7Mj5bZl16Nj5iOkVALFVJYDxWejV3fmpLenxrMy5denJddSVgPXwyXj43MnUodkZyXSlyKktMaEsoNCpfcHBzVzlUV114fXNrSDV0eU1UfS5bJXgvLjhoeSF3clVWXTNqMCFlKWhddzU3VlBeMjIjZGFfdntrR3hhc2lL''@;'; put 'put ''SDE5OV0uX0djJkw2ZyZmZ2RebD1jTlkpfjsuIjdvVTliP1hhWCJ1UDtjXjBEZy8pSlhXb3h9YiEjOjZJMl4lXlBIaklIbXQhQGh1XnxrIVRfPSpZd2FvZnkrcDljIUBjWjg3O2x8VkYjeWN8eHd7ZGhNX1NpUCErRDRDVmFTOGx3WUNzfW41KXd2OF5vRUtaPTxKJCtMJiFwVXFpdyNBdGpRVz06''@;'; put 'put ''eTBiI1diMzFCa1dUS3tpeHxQVE0zckExRl1hS2I8enk+W3h7KWZ8fTQxZWBqUzYzJV9oW1spUE4lfm5VN0FhRmEmVT5+cVVdW1Y5TXZaKGB3IW1VT1p9SFlmeGNwQGJJVUMmVTJMbUxoUC9fPXwjX1AjJkF7fnd9Ri8rI0RvdEp5Q0dJIm9vbTkidkNoW2ZxNCIkI0p5KE5KWXREeXxWeV4ucS8y''@;'; put 'put ''TGtyMnFWdCt6MVo2SXBHdmM+aVV3el9wWylWVmw5XzM+bDg8S1IvJFtVZGlPeDpNYzdiQmM4Nzl2JjpMe3Q1WlRLNz1jXUI4I19lczR6fn5FX19FOEB3MzhnZVNmKFdMXUhldS8xIT1uS31FOHN3TWpwKWtBeSF4NyxCSGojaU5veSFsZkhCeSFeMThTNzhwek5bSGVFSHI/SGUmRiRLdjBHelIr''@;'; put 'put ''QHVKXkhqYEFeRjZQbExhWXhSOXFAe21keD9zZnUvfF1PeWVHXSxpNHkie2p4Y0lAc2Y4SC45c2w9Sk8rOEBUcWlldUBycCxaJiJkZURHMUIsMV9UcH0lN3dxQ2VtQVJjaGdheS5EYCRpM3xCL3xjX1lzSzohTHl8THt9c3pyXSlSNyl+SF88VkhWS2BKYCVBLCVbYjJ5dHxjX3BwMWBEJFRxfTRY''@;'; put 'put ''WlViWnxmTjlwI2NKeEtWUCJkKjs1fSpSMGtdISRCSllCY0EiXiNUczgkKEptMndOfk9DTzZTeSpvbXEsMShlOCZ+NXF5Py5nfit2ZGd5XyRgSGA8cXBkdEZ4TyNgUFQmRUshfmdLNW1wV1RvO3NIbEhpd1VwJGZuXU9FZDQrO0djb3Rpb2tLeGx4Xl9bNTRuJl9PeTV8KFpsRTdZN040fXRTfUZT''@;'; put 'put ''NyNuVlQvcXFJfl1XUyJbI3dRYlQ0Ym8sLGB2XVFpUHVnfUM9d3s7fGRrfmE3ZjdWTUwzOH5hXXE8M0QxYnwzWmJzRmRDfXlDJT0rZztsWSMoSEVsZTVgJiY4ZCFRQio6Pkd7dDExdjgzekl6UWM/djdAVmNrLHxKIUAmRjREKChFbk0wJkx7WElNMGpmelh3XjkwMHkiJHldZHQqQEpbQnt7WSxF''@;'; put 'put ''MzgwQmN0SS5ockhoZStDVj9jYWdRYCQqVyJCVlBMUDBPMFVOYzRefE9zJVR0XiRTdFgiKkx7Tyo/V3diPyQiTSVPQSxteShOMVk5LGp9NFlNSE9VWkwsVEdwJVopOTNaTjRlNXZgSnQqV0YlPT1kbFZGRTs3bWxzenBKUmRSWzN6QUIud2JBaiopalNndkB4M3EyQG9FQl57YmVNUmchLGpBOzpn''@;'; put 'put ''OENuQEpJbFRiKXloK2ZBeGIxZE4zUUI0OF52VlBpUXUobGpSR0AiMlpvSWF5MXgsPiM6Nl5mPHd+byZZUCo4RjI/cU4xciVieTFAbE5RL20zWyhJcXUiRGxkdzQxW3FvVDlVfT56emNVMXp1eFJXJjV6bnF8MlpCPXxpTmVdWmxZS3UzPmIybHAwWy5AfnJdelFgZEBvKTByVT5fUkJvRitFZStm''@;'; put 'put ''OmF+T0JxPVBWVF82dXN+PjdNbXFfIjQyW0ZaT2Jva0svIiRFclBkKCRAam5vSltUTDRCPDp1cipjWEhWfUhATyVPYDJncmFjSCZjRUplbF9IJTdNWj82Ky8meV8qTF9jSjA/JmNHX2NKUSUpciZlPXwvUCNHOW5pJGJDN35IWGskVENddURqKTVVZGtNcj1fV01XN1k4MnhxTS83SGYuTDxGdzIi''@;'; put 'put ''aS9aJnFfVzQzTzdKeHFNL1h6UGtMX3tMInBNS3U2Ik5ZUylFKERlWylgM111VSNWJjMhMDtoSWRuXWA1d0owUVUoKW0qSzkoI1tqc2dGeHBZM3h5eSNhei9MaVQsYHdpJCJpeD0xbk9ne2dsPlQ+VSQ6OjJlb2FeWEQ5a0oyN0I2YlViXSQpcjVOSF5vbXpNUC9CVncpNl5wPD1XbG9JJU85RllO''@;'; put 'put ''IyYlOkBDPjNTNixZOlFzeTpCdVAlWFB0fjRNejQ7MyxmRGhUdW1VRlVfWTlNXjwmTUVKN3h5Zm86Vyl3NjVVbyxTWS9WVXxZQTNtJT9NfFp+SUJxPT9WVUVgUmNKPnp5PVM4PFA/VzxXN35OYlM9SkIwaDIwcXY5bWpiMj94ZlgrZCslPjQwWlNuTFpfaCpjXzVAR35xbHY1I3wjYjdPZmxvWXQ3''@;'; put 'put ''b2YyTGZub0tNeH1eWiUpOHxRJHp9VFlHK0YrWzhkNFVXZFN1emRZUmcpdGBWNGpDQnc4JjxVV2gxakxMbGFPISxSTj1uOVAhYSx6PEdNOjJUZV9fMW0zPmUqY19pUm19WT1JIy4iR1JTZ2V9d0A4bXwrMG11bU18bz5NfGBbcntgNSVKLHB7MTxdNDFlYik+Sy9PXyRoeTVnSlFkKG9QViN+RUxF''@;'; put 'put ''SmNVfilKK3h4UyUpNiNHTm1JT2VlVzdva0RRcTVOZDIvSUFBQThNQEBuQVVFUU83biYiYlgvWU1JYTI8ckRIKmh1T2YzYCozLEVOSm81RCVJZk1pQUFBQUFBQSRBJCQpb050cVBEZHNhMX5US2lXWSlycjN4QHFCQTJ0VF5SJGMsUmhxY1dHTktuZ3psQUg3YUphRVFfV0JzJUlJT1B4WlZ8MyVj''@;'; put 'put ''OW9ae08uS3o7OyslSUc7YXhoOlM9O24mRzI2Wmg7RTV+PDUzVHp7UTBxLlU8QmsmRU5xM1g8M1BhWzolYG0uZGBHUCkmYipCP2tkJTVfMiV3fTxbUl5WM3NZP088VDlxMS9qen5IRDM6eTohPzQ5TndzRTZkSTsqPzpiNik3e3Q3WyU6cXlRXUVUbypeN0tyXSt1bGdyXT13Q2pqT1pyYylDU3By''@;'; put 'put ''MC50Vzw9Nn5kWnozQDx9KWBVS2xhIn12KSZNZHRYSkRKIjFCeSxmZUVNWHhRMVNSOy9qfjMpdW4jXXIyeHBofXNFLklqLkhDXzJuTzx2TW14JlQyYndEaG8pPXBMJl4mZClvV2J7ODZRS0U7KzE5QHF3I0JEO1tWPU5dYzZvVEp3SEpGZE46Q3guZXVvbCgjU2VsJE55XUVMWko+I0x5Qj00bSFS''@;'; put 'put ''cF1jdyg7NEJHZnwuenc1K3p9ZiReP2UwJX5fdFlFdF0xQ0pLLDtCYj1pOEtNTlpKPWBGV1lieiN8NCRgO08qMD0sR357XlNGOSF0ISJeJTJRfjQ2RH0lJFBiKjpESj5POjVJWiI7NyE7eHN1WjRCaT5AIVh4Qj8haHZsJSt5IzlKRVt4XzNMMDdoT3xXXjQuTS9uRCF6Q3xOKS9MfUhvYVc5LmEo''@;'; put 'put ''bDt7TFI4JEAuRn18IS9xRmR6JSU8eUA4WnBSL3x1IUBiRT1QbUs9X0NxI2hmc1k+TWJXe1YzbUJwRz1ITks7Z0tBMUUzaUtdSjs0Tnl1dzJvbjhjNlU7dlszdyRRQEx6VSRUS2pfSTFgTSYuNSI+ayJlfmwwJW9jWzAobyNmZn42T2JhcW9BLysmTFM5QnJlMzouKENiYiwyREIrKktWfT10R2V0''@;'; put 'put ''cVdHMERMbltHQ0EoKjZLImcpU1tVT0ZjWTAxdzh6RW9ONUNsYykxZmdbaykvaGAwJD9EcHQjaUxnISJaNFdjTjhKX2BbPUNdIWU7d3JtdCtady9CcUVANFUzWzMlaj1udFFxZHh6O2lffDpwI2ImfnVHblcqWjkwMHlYXzUsVyxGY0dnYG5DMyEhOSh7RGxiNWp7ZGJyPmF4WSx1ZigifVRNc0s7''@;'; put 'put ''R0I2WSprNGljImZVMW1ZXltfJH1RKTMqKTpeUyRfKDMjLGBgNEB7TiVZT0pvIiQoK3QvUj1zIz9JTTZZPm9QS3tYUSlNS2AxPDlTbjQxPyhFM3VnIjh5PDFrUG9GK0FaM0t7ViFNM102ImhzPTtZW2IjcSpsZ1VyQnZERERvTzk0NFFLRkVNSC4lajNfekUxM0BwZ0dBOEZIZUpHK24hTzgobGdH''@;'; put 'put ''YVkjTi4wfH5mZXQ6V1VrJXpPSyhBLilCSncwXUFXPmwre182NFplIXpHdTEkNVh6czVUQzEuUShUMUY8MmQuei50N11iLlBXZ09YQCI5WnQjQl5uKzhpPzhoKSVAQ35BOmtnMEZvTzklJmUoTGNrLG1ZRV9dcEhibTB3OkVQRixkWFA1MHhHMnd6T2x6eVZvdzRGZEBPLlkqNntBbnNibWlYQDZi''@;'; put 'put ''X11kTFV0VjFeflY4eHYlbGo2ZzlpSH5LQ29JJXgvJlJLZk1zQ25FP2I7cm9hIiZqeW1UOzowRHlVNyJtNEJJTEc/KDZvZVkzOyFKYDhxUVkiU0M6cElxO05fX0xUQUlBait3XU5OSnhmZWFWb01bIXBTSyFPPnNhRjAvU09sJVMyPT4kIWMjZX1WLls1Y0BKQ3EvZDRSQ2oyQF9BRExDNHxBPVlL''@;'; put 'put ''U0RKX1hRYUlwZT1xbmFxYFVnJCk3fntZamd2MikueytCX0RAbCxGXkt+KVpDeiMuIXRvbTBiSDJ0SzFjR3pLOWJ+cVhdXzxkOHY5O1dkOThbfD5jTjpGQjVwbXh4ZFN6Z1Q8VUtiYXYqQ0QpVnJEQk0xS3c0TENjR2ckL2NUbD8xWTZGJXFDRnxRM1gxbmlfJWc+Wn53cXBGejh3UDlRR0FHN01R''@;'; put 'put ''RVptPywvXj1IdTx2Ukk+Nm4pMn1LfldgWz4wQyphTnBvPkFrMW9UNkRXJT9zIjVwX2Z9ez9hUTRjdUp6M1dgSEBYa2xWSlA7MyVjSiZfUTo0WkIqY15nRmsidmh3UH4vJTk1dXFWan1YcjRLQmt8dWhqJUk2NG1CaGMqRmdTMEoqYjZOMUBVQC9mY3YiRSJHUzttNyZoV2U1Xkc+T2dJKTMsV2FS''@;'; put 'put ''YHsxbnA4KFhAYEpRKH12VkZOWkt4X1hraC5sbDQpdihLcXUrX25mLlNTdyNkKzpAKypQe2VdRlJ5MFpAIlBTcCt+a2dnRHJlL3ROYUNJeW1+P0UiL0o+VWhxZXVJMEVkVkpVVSkwW1ZydGBxanZOQTF0W0hpXSokMjY/O0VVRUVPfEtLR3NgbFZ7SXttTFJJXjxNSXlbI0BaUm88QTRURDs6Y3pJ''@;'; put 'put ''M0pydClhUFU3TSgoWyJiS1tbSFJeaiNTZGNsVUp+OWZwTHMjbkt+QXF3aENjTXpIfWssMTE1I1tJXkg7ZXQhU3hbX3NPOEtJbW1yITZkYz5zNVk7ck0wQ3JBTWUoXk1CcVtgJjVEXT8kLiV6WH5QZmhdPFlxQmFCPTFETSZDbH5XfTcycjtIRWlPMC8pZSomP0MmMV1LSXVtbiVRcW17VC54aT1S''@;'; put 'put ''N0B3TjQiZylhR0RQQmJ7YlczYUphPCMoYn5SSTB2S3owOzpPal5KdEVGVW9ZNlp9YChId1grTnNkWjIyaGhDfXNjNi5geUtWdlppeUNKIUUwJCV2WXZyaD9ZJS8mWS5zU094ZH18Ql5fYClgZU9WO15lenFEYSZSaiJaTWc0ZUJ7fkdnO0JeZ11acnxNKzt2JkxlJlg7NCh9VCxCV25OJXdUNis/''@;'; put 'put ''T18vVCNXeyJFW1Vfc3JTaiooTnB3PmNsWz5lW0oqMWI7bmNGPURoYzA8TE9vZXFjdm0wV1tWWyE7dD99R0VANzVOdHEwQXJVTlskZzA9MmY2NHkjKGxrVmMrU29OL0I5V3BhJG1oNldSZHVAIWlzWk82M19iJXBOeSo7czl7KWFAZH5nUmllezhia0A2LCEkSEpKKWFrM0dYWk03O2trbjlRQVtn''@;'; put 'put ''YXhoZTFTJHMwYlNtJVU4NnI9PTszRFlzPkFaZCI6RTUyZCgyT007aGxvJS5VQHIxSEx7SFpPaFFBQk90WjJ+bzhMMH1gOXcxMThVTWRPa1NdTEhvUnc7Pk5GL1MkdzIxdz1WUSg+My4jQH0vcilEJXlATVdgT2h6NCpsbnhMNlcoPVEmbnE5OGtnOH4md1JpamZGailGJkNKaD5WMktuaU4xI3ZS''@;'; put 'put ''cjlpcypYZD8mYFNsbDFpI3Y6cVRQfjB8TElLOD43K2AzdHF7fWFkTWZLNTJ5RissfC5GZ0Zib0hlaERWX2lbe2dERTQvdzxtN1QmWj9iSX1SY0VHZ3BMXTkjZCw2cn5eU2gjXSNYSDpXOk5WRlAsXUIxO2VndH19bk5vVGBtYjwjbF55QnQ5LCkzPDZhdnNYajA8S3g1bEZIJlBWPyEyby5sPCR9''@;'; put 'put ''ODsuMUdMVD1LIjdvVn1RYnEmS29EX3c4bDBsW3F1ZkNCUSRpbWA0NigrVilXbEVGUUA5bUAhXyEwcklpVGRzYzZ+Un1ENzNNKkFjdzNLV1REQV5aY0p2LFhuVUNYR0BnTHUzJSw8c0N6bXhrSXljYjl+b0x4bjJIQFJCTTxlW1hGYDsyWzVQKytbZUFzZjxbfUJmJW91aTM6NyF3bWU1VVUkVW9y''@;'; put 'put ''MkwoMSNeM1tGbXEvWy5FJWN1QXR8JW1ecCxHfX0ieFEqU2NmWjV3RzpKc2RgXTd3cy5zRys+fDZrUCUmc048JFZ5LHpJL2FrISNoYktxVDk1MzhJP0tKOWYiTz4hKnpTaj85KjV4ZS5DNl5tbkk7TURATGZLc1lUfT1SKH5kJVQ2QFFUTS5KRjwmLDdrdll4ZFJEbCkoaTFvQkVYXiNKeHRoVU9L''@;'; put 'put ''JE4yMkJraFdneDU0ZE4pVDp7YzsiK0Vhb1lkcGp5V18wPTZGND0lPm5IayVlT2UrZGVkezpDODR3QiV9YzlfXWh+ZlB9SCQ1O2FFOzFeWzJ4MSQxLDt4V3liZnNdMEJXb3NdSS91WUpTQz9Ue2kpMHdjbXwmN0RMK2duU1omYyFRajg9fEViRFFsdXNjfiIqSXp1bT5yTnNCInBVMF9FR2w5YDNm''@;'; put 'put ''Yk9FK35QWU5KUldUWzh4YE5rZj5MO1swb0lOd3RmfCo+djdUN1c5dj5aamE9VDdndnM3cFVSXmtedmEpcCNKb1pbSmt2NF8wWlp8YG4/PzVaIjFILnx5bWFMITRIUzgkRmpBSyZrTmZ9dW5DcVo7NXssW3IrT0AmYzo7Inx2OWk8L3lZXjt3L2o0MVB1X0tpZUdeeys0Vy4rK2BCdjNQYHVEJUBy''@;'; put 'put ''e0kjMFBQLEVgV2t0NmE6LF1fU0YrRXYhPFcuUVIiSUNYcixyNkdBfWVadyZaVE5APWFrTjRROElKWFZwWiZ9KStZPUNWW2pJTCZPbDdEPU59dmlNQ3dQdEh6ZEZJZ0FQVm5zYWB4JVNrRFR9Tk87d3QlLGc3JTslaUhUST8oPVZ0OUA7dUdrJD80STRZLyVCMGc7SGMlP2koWnVnNnQhd3xMU2tX''@;'; put 'put ''dyg1WEJBIl0uU3hHT3l3K242WDB3OjpQTzxwO0VffjYpPioxMzVIM013fiQ0Wn1dZkBnYF5Xdk8mQXY4dG5vZiFuRThnXVc/QltvPE5tZyJFIXRoN0l2ZDkqc05AfjJoV0M2RWc/PVJYbUVRQGdZMiZnSD1FLDVvJnQ2XUhSOnE0bFkyZ3htLkxuQCY+KVpbanNdWVtGIVJPVTVtbVYzM2ljZj5p''@;'; put 'put ''ekxLRjM8ZWZ2JjxYTT1tNnImIkJaWkJeNlptR0d5QDY5c31zSys0bWJoamtTS2w/MT1qWDp5Zm5CUyleL0oqJGVJP0UqaT4jajhzeGpmUDBmbk9RYWo0RE0wMyQ8TzEzQnxFOkxsJDs2PVNAJXBTWHBBczw8d04kZ3VlVyZqbllCIzplJiZXbXR8IUIlfGB8Xk4yTi5LeWtbU0JNOS9ffExJezE+''@;'; put 'put ''TnFlRHpdN3pHMTZzIy9TYigreEpiI31bUHApTnZxVjdCKDk3W2oxYltCM2YuSzw3eXQ/NWxMKE89QTNgSHJPTzIjVW1Xfix8RHFPUyo2Zl5fWVZtVzU3Pm5OVHckKWs/YXdxRWhjcl1QdThFQ110S2xYYjw4QVdULFBgMVBwQks8Q1k/OyIsImo/JTJFXkQ6L04jVFJsV3dnLjg/SERfPk0iPTQx''@;'; put 'put ''VWosYUVrYi4+amtTaFlXbH00QUsjZFU7bkNfZWxuMkhTelNDWzM9Z1pPNTlNSHkwKz5RaTdaRlI/X3VNdi4yaEBJeCFCW3dnR3Q/MH1ibSRQTH5rcmd3ZyVqenZUej1ibmI0WFltVVtdMCNPUjhqViN4dFpvWikkXVhsVzBlJkd8fTwoREE7UUsoaWk2YzFLXVckRCkhMUlaO0QuP2RmNFVLUWNi''@;'; put 'put ''eWg9eG00PX5wXUdpcipyQk5zQzx4OHo0e0QhWlM5RD1VVW5AY2xGc1IrU0tidk54fCZmRzREdjBwMGJXKz9vcClYKy5SdyZsPFhgRkgkLltTQkt+KSxbeil4cyopVVYwYn4uXyQ9RExuJTMkKHc6bm40RlNwWlhrLiosdVhTT25fOTchU309XyxSTz9URTBsbHBQfWR4JmVJRXR+Q31sXVEkVng2''@;'; put 'put ''WTFbd3Z+QzVTclNFfjoqZTIjYCUkaXFQeTw+LmcqQUV5dWE1dHxvPWl+SGElTm5zNjQ6VTl2RjlseW1MQW9aVyJwd2J0amYpcDpkVTxEU1Zufj5SLHUmbDNCTk5OPlBGdGsxXTxVKF1bUk06ays7Xk9LYH1tPCZ8Nkh6dk1DXXZAUVtwRzhMRjY0ZD1tbEVpfjx5JF1bYmhdMSMxdipfVjdJQy4r''@;'; put 'put ''cnUvKFhhSWs7fTBqR3o8ajZ7MVssITxgdllIZEk1ajtVIWE0K2ttI2xwVEIyUldGaVJAeGpANEAoZW8pTlFVRCR4SDNPWnRtPWlxcFM+WCN0JkBZPHw+VSp2Ok01Tmw5aD1aQTJ0bnJvImNgS0NKKjBzP3ckcWNxLCxUYnx9eSh5V1QwM3t+eDV+bldadil4bitdUU9ZbzY3JWcoSnwzLCJFanlT''@;'; put 'put ''XyRAZldKZi9XOm58OmB4UEJaZz80fSEqV2VPVzZ6X0xlQGJCbzFzMmZOdCk1XXF4JVY/aS5SNXhHP21SeU03PyNHVDdLIUt3bSY1KGJUTUl3eS9JJEJRIk91aXAmd207LCglLk9mbXdGIiVbW0l1MnlQM2BbS2hSa2giSXh4JjJxNSVUY29scSp1VCMsXWgoT0duaEA8JHJuZX5+Q2FBXWVIPnF5''@;'; put 'put ''YCtDJWtTKCFhP1tQVGBfSCphVnJ4L0Z9WCpfL3dMenNtOkY5SUFBc2lXNGImYlpjNyJne1RSQHBpd0MmRzhGZDp6ITReXmVHUHUwPXd2aTBDcml+NkcwOk16cnJEPFt4TDM9YXpDOSFELmIpTGk2bj00aERHbl9Fa3cxWjZAM3pDImVvL3JQPGssYlp0cmFma31yZzFwb0ZrInh6SFh2U3doaSpu''@;'; put 'put ''PmEqRnwzQF9XOmkpOiNlcTdla1NvR2trYjxnW1RzeVErYUJ2fTszLCg+YVdWbVV2MzNpbChXaEpiKzdsOGNWZXxwZC9tNDdmSlAyTEVOQks4JTlwY3k+JG1wKXtIWDwoe0g0SWlsVWheWUxYQWR2R2ROZFhET15wczZHSF1GYkF3U2Z2ai9IRiJ8czg6bUE4TGd5KF93YUEhN15YSSN8RWZPWiMw''@;'; put 'put ''fCYqQ04pc0JsKl5AS1c7QisueF5aQmZdL0N3SXM8Jj05IkdET2V5aG8hamtmXlhNT3tqQ2M6NCEpWSNZREZxdl9wX2RsbSMuVkdZbGNmdUI+YXMrNj0yYmIhVkE5MFVebX5QMlprISY8eU1IUCRKVz85fEFJUDtDUUVAcilaTiM+dSY5JjNgMXB0N206aCs/b3FrciZPVVhQZzBra1F+RnVUe302''@;'; put 'put ''JSh2VD5hWmc9Kmp0ZX1YMmw8bl85Q01xY3gkMm5MO3g5VFZpZVt2IikzMnA9U3MsdiM0Yl86X1JQRDBuNGtBS1k0Sl9oZiNqIyMwR3pWZkpUakNheiZoUkowfnRSQFtQWTl7WXtKQlJKXkFZa0ZDTS5JZndTZjwyZSomKFI2Yi81IyU/ISx3JVlzc3teeiZMe3AlPCNOQ0gzVWxnc2BiRGJ+d35H''@;'; put 'put ''KS8lanlEcC5TRGt6K3hfRjJiLD9ONVs7UFo6PlQuViR2d09tVTUjW0U7SkRYdF8qNUE+WWEhWyFAT2F1UClZLzJRMjloNU5iMSk/JE1QaihDW25yS3B1YjZOJDpMMmNWL3ZkNGYkZjRlbllvM3NoKiI+cSRnWG84e054VFVdaGRJNmVCTng1UDp6KnBzWFtQKDJxIkZvdTNsKiwpaHVIdXd3KGEo''@;'; put 'put ''QEFtP3JHMEsob2NbVjglIyY9Y3ZGQG0icTJIQUVTaz9ZUDEoS1ZdQ21AdVB6WkhCMyhtaUJDNXptRTV3fjc3P0VCcEVXNH1DT35tRXR0RE87e3ZFdWE+QzY5L0F5XUR0YU4oUncoOV5xayQkSmp0SXgmZitFd0lyKkNVeWI9KyNWZUVUQ1NBW0g5UiI6MDhVYiNdQjEmVCV2SyhpUCZ9QEJyJXg2''@;'; put 'put ''TzFvXUpOWWhYY1U9ND8zU2IuNUs4YTUzfl1xIiRndFRnfk4ha1F1UE5KRiVLTjQmUk0vJno/dnc1cHMvVCRJUm85bF1UQTw+UCNFQUdfSixiei5mejFffVtHdUsmK3lTYW4xTzpTRHImKnMkbDJfTXRpR3VAPl5LTTMoNTZBe006RVpUL3xZbTRzOWk1SD52NUg0VlAuJDd4a1ZXSzNuRmFlOVla''@;'; put 'put ''O2FFKltJUENBIUQrOzxEXSUjWj1nS0FOR3liVUEsdVZ8cW4lMktyR3l7aj9PTkRCUz0sTH56e3pxfW1hPHh5MSw4b1s4c2dKQkBdeDZ4djAhemd6NUsyM1ZDZztOWC9pTWBmNCI8PjpOKkMidz9VaWNZR2ZTPV1qMTR5IUxlZ343UEMuZ2ZrTi9MW0lROSxVRD87e0giI15jc2MwQW5ReTF9WU4q''@;'; put 'put ''P2UhIk0laXk8bDc2VFt7OD42X3dSISosZnVIJlJJXkYyMipAPWNZPjhbQCtQa1VxdUl2dGArK1YpT0YqMlldSl9lPz4ob1F3XTw2dG1LSUBKSDtefj1ZNVNqR1kkQWJuTV5Vb1NyUWlIOz4zVjUxK1tLaD54QWVNLjJjQkJ2dmklQSJ8Uz9zI2k+SmNKNmxvWGk1YDg3KkhOdm1gJCpodVZXdEhN''@;'; put 'put ''Jjs3TkE5YzgsU3lFaFVCWjw7dEtJaCpxNWFYI3QrbT17Kk9jXl9PLmRUUFAvYDMwNiw5bD1CYVtaVUhSZ1FiS3FvazczKWEpPHR6dH1aVSZ0fE0kUGxvRWhgQFt9YkRSejxoRDY4WnowSnokd09vX0dENCIwY0lRNi40MV97TWs/O0VjfH5NeFlwaW49Yl5lcFg1YilsaGdweXsrbmF2ST82MEFo''@;'; put 'put ''alFzOmtEVkxDRC5MZHYmOS8hXjtKIkgwJjYvTEZZRk5kQjpYPUlRT01Pbz5mZktoLjxhOFlRWWcyV1g/LGw0MSEraShAMWg8XjA3fEVtK1UhbihjbzVrQ2lgfi48KSVZKjIjbSltRmhjX3AzW1I9QiNwInpCXSMva0I2JmwxPnU2OFsuenouPyskWGRuJVdZNVZfTzRRKCFQRHdpKlBERkt8Umk8''@;'; put 'put ''IXNFOzx2SCxVLCVeTFJ+TE4rZF9HbitUSiRELDRmb0lyUyJTRl9IaExkUlh2UDpTPUpseF4yI0pNQzBmMl8iUFZjNk4wdjl0bSV0e1c1YTZ3Nm08by4xZnI+bmxsRHR2ZjhbdF5EdVklRV1LSmpxY3JbU2ouSz8/aVBHK3pWJTN2JkBiPldNcSJjbmQmSm9EL2V8VVhqX3Fqa25sPk0qMl5CUUo1''@;'; put 'put ''KFcxaTRKV2syNEdrKChVJXttTVN5JG56Smw9RHFeVj02W0ZlY1l6PEVbfjdkZSopNzNwaHkxajw8KzhgTTA6d1UvNCgzYXFdUmN5a2hsZCEoLlUhUDBGQV0hQGVxUVlNWnNpUWxfSXMlRSxtPXtlUFI0W0hFRChKeGRSdio8dWhiXW4hOWxdeztwezozcEpla0tAVmcxNEVbM3Fdfk48KF1NPkZQ''@;'; put 'put ''a01McmQ9PzBQI1E+SmNqTXYkLGZ1V2gkTUhQdXNQKVQ7fTVaZHhDek5IcmsuUSNhenxGJDROUEQsdGpKfCpoakRkej40TGdFdl1rP2N7XkN9SCJZWDJyY3xIcXYveihjdntublRWeE9PcCh6ckNUOnJXJFIuXihfdX57MCZSMiNsX1FgTU9TT0BtJkZsODRMKTQsWGwxWEgvdG51WFAvfmV7TEcs''@;'; put 'put ''KnpjaXtrYHVOfSohVXAmbSZmeV8jezFZL20yentaU1p2SyNGYHlrUHd0IWB0SlZpZTRRNE9LPn5+YiQrSFVKfHV6Zmk2WlFkSXJwKC4waTJaPyhgPCZIO0B+UFhKQmUlWURYJSpoSUgwU0p7PzxYS2x3dXY3Nj1WSnx3Lm4ydyhsfllfb3M5QVJSVi5NOjJXa2lWRUg9KDpzTCVLQXZJYGZXZSg5''@;'; put 'put ''OTMrLjZ9azBEX1gjKnVzU05aTVBIN3ckL3dVNFhPdTR7L0ZfJmFCdkREVUtLV3pjc0V4ITg7d3J1XVVyXy90NH1JaV9iREk+aG42Si91XyNZISg1L21yekdOWigoQS5aSENbU0lAS09QWlBeO3dzbSRJYTRLX2U7O0xgX0clenU9ejVXW1pvRFtTJT89d094NV1GRXJYUUFjcGRnajxRVEdVWT89''@;'; put 'put ''RDQlOjFJfkBidUNKcTgrOEhbWCE1cWNic2hgMiMrO0AmYFVDYyVSPng/aWorakRAYis9SUovUEFZRTE/YTw/Pm4iLks9SE17QlYpUXElcCEqdGYvPF9pLz8sIT19P09ral5DZU5ZUWdrJlg6JTZqI1JlIVZ6PV5kNlJnPnN9UlVqNEs0UVlFLG9pbXpbUmRRaik7ZERyUHJ1ZHptJVRKQ2JQe0U1''@;'; put 'put ''WFZGZEdLeHpXeiNtfE9LOGAkcTUpL35QL3xbP1skXlohKDdtalopZElsYFgjOTkjQ30wLFNENnJkLi5pMWNqa1VPbCojZjV9PnJDdkxFJHcreTouS3Q1N3grL0pqNy4sblheJix7fVBDUSxqRHB7MHw2ciFKNTZAQE5OXkMoSGAzJmJaPk97bD8rSDwrd0FtVFJmI3ZDLHZicnxqOl1VK1I9TWhC''@;'; put 'put ''ckJ2KX5lVGRoNnMlWkV4eDtSYCQhPHdARChkcDNwe2lHb1kwUzFtLlp1O108e3U0fmZaaX1gXkdfW20zfk5zLERxVikjeX52ayZlVkpCbWwoJTNDVlh9M1laY140TjROZy81MEBESVZrbm5IfGgyWiRzSERSPTQsa0FiLFh5Q2gqX11MQmZXelRYN1pqUSlUa3leW3UvMmhgY0w5OFhjK3xWdnZZ''@;'; put 'put ''ez1kUHk4fkdxLEtCXU05NCFDfnRsZFRkZlUifSR6ezApP1N5UitCPHouSEAjdEpKaWZ0PVtIKkVsIkF6THBifVlDPSJ6dHliRjNML0pmOElCTjEuRzkzPCJIWXZwTUsxL09tSVZIXylfKD10czVBXU5WVEVmcUh8eS89VSUkUlBnYEBzY1kiVD9banZCfX1qQFs2aShsamk2YkttbyxLQnw5IihG''@;'; put 'put ''XTZHUy54ajtDX24wR0FgJn5EQ09xd0lLOCtCKUxzVS43Zz4kSEVPVS5lQHEqZXtzLiJBPGUjOmt+JWhNczBKVSQvPUh8RH5jaXRuSyVYYiNEMXJ1dWVsIXk3N0ZjeV1wfncvQThfOD1kTnhzMkQqfDB8ZXxlR0JoPiJncTNXVz5HYjxebnpvdjFTdTUqZF89fHt5bWZDZ3k4SkhlRGk5PD5TKkBQ''@;'; put 'put ''VmUzU11uWXNzJHkyRUFweWNZRi9gT2B2cVk6e3daen43SWcoeiQqN18zZzxTSm5VYnttMFhSczckPy9PMl91bTxxW3MsQUMialVRZktVQlFvZCxLYDUuOkplRjxUV3g3fH0qTG5Lc105OXU2TVp2OWxqSiREaH55R2g3XXdFKX4mcmJUQ3xJUkZYamU5X3RpQG1oJXtxU3hYYXVLIj5mSFR9QSxQ''@;'; put 'put ''fHRuXWd0RklYQjQvbERXRXRDbUwpfkRAay85O1Z5WHprey54PFRKeHhtPUJUaFUyajhCTjRKaURITzQ2OSZDVD42dCpxXUg6M1UuKT9dUUdgWUdtYHdqIWMjIXFYQWF1b2dBQyp0a1M9U2QheWxKOXJmcUN6c1MzXmVJMHJnaHUwZHZXeCZWQEAyMkFgYzNbRz9iamx9MyZ9dD9iX2g0JjBaSTM8''@;'; put 'put ''OHNYXztkMFBIJmNCIURDRnY5bCY+S1NdYz95N2NNaTdVdDg0OFkoTixaW05DWjU7SHxNVCJKREJYYDV+YFMseC5RQC9HfUtLSShRJF9TaytqYTQ4OmF3O2k1NHNUKk4qc3dlLz54ZSE7SEghYEV9aE5hRTZScyQlO3RHRTdiM1YvTXlxT1FgPU4jZntlbzxlN0J8c006Z3xPSDkydHk3dHROPndC''@;'; put 'put ''WEE6cENVN1ZpbSVkLG1QUXFSb0RQfT5OaWhgQD9ZZWpLKCZwOFkpLHJBeUQzYmAmS0hWSn4mcXxEJEBiSCsqb2kxKUUzfkJnSVUobzlCVUo6YGFhUkx8QmwoTmhAWXYpLisjSFRpQm9jNUddNlckNjE1enE2QSJNKkl9V0VgSSU3VUpBZHZKJnN8e1IuZE1KKyxaNEtrL3l5OjdpJUl1IUAuZFIv''@;'; put 'put ''SVUzMkJSSmlidmxgMSkrNz9PYUBDRENUVj9kQERmTjo7aihZPjBdaiRXcF0/N2Z2WlNQQjZ+RWIoJCIrPVRXWEpdWClEKX1EQUMmY2QkRVNhXWQ/K2hnQ2JMdGhkUj9Ya3c6c2gzN0l9JngwJlNmSlhTNitmOVtkPFJKKmR3Qm5IN3NmPUpkRlNeLnVDQEZgX29qN1ZAMUhYdnUwRX0oJiZDQTdU''@;'; put 'put ''MUVmNSFLaTR4RVArX11IIkxrTWphOkomdXdhR2YxKSRtNEJWaztKNXd8WTo4bF9YSWtad3RuQW18S3FNTSxKSUcxYmQ2bGA9U1g4WnxyenBGVkYlOi82ZzMmUntEO2xSTHpfQz5FS3h9L1Y6TmFOP0wzbm0qIlJ+UHpPVVFHYVApNStmbSM1diVTMmBPRXF0YXUiWT5zIS5mT3lrZVk1a318ajow''@;'; put 'put ''NU8uIzBteloiNFFFKTcsRW1HZyFOQlhQS0xkSklHSG0yW35ZZWc9NXBoUzJ4NDQxZGJrN1c/WXFSdEpkKTdTdVZ7O2lwX0ZPTn4xNUU5Sik0N3FYNDFiW19FTnl8ai57MHZZcVhAekg9QlU+JVJfKDR+MVA3NU9Bc35KV0x0Klt7TUEuRmdDSHU1WUUhTiVSYl5sbHxFSGZ3V1JDOz5bd3dMej0o''@;'; put 'put ''SUUrQzZAPkhCSG5tKm1SIlBOKT9zaXBIWXV1bzEiXlNsQXdxaXBRMUMzVjIyQHQxMHhDeF9dTFhNNlpkW2pGb095dD9OIzduISs0d08leGRPT0N5P05lU3kmOCg4Rl89NDZ2dFlYTjZrdjg/U11vciQ6M3NzQjxIMTdCLiFSd01le04pOm5SNURHdSJDRXo8SEB1UGxoP21fbF1NYiFzPitXUnB6''@;'; put 'put ''QDxKZHdPVTk5N2l3NzR8OHVoazA6OXdBT0RJKX4+MSRBfVo1fEZBbEF4ckRITCIvRS8mJi4uUENIVCZ8NH5zdUZCYlFAKXg9QkNKOWxIPEA4NzNIS1VLZERQOl9ARWEmL0VzN1ovJU9YNlVmOkpbP2dhPUNHQ3JmOXUoc0Y9U3c/KGt8aWZDclBiSUxhVyxGW29eWWh7RlRic1NfRWd5SiMpfTMx''@;'; put 'put ''JTFWekRMSUlkfCEyUighSW8yZXFucWImOHkrL1Q0XldYbUI5SiwxRWd+RHZWVW1mXW9peVByfHomfCloJHxJTklYRV1JXmtHYW9oc3o2TyUuQ31HSFFXbXxYcy9qbTNYOHM/Q1RrSHwjbUh1dTorayNQP0skOH1CSUdYVmJoK2A8UkYxX28+cStkR20sXjxEaSVqWnR+fDRTSVE5NzFTISp+TkhP''@;'; put 'put ''S1lmalFqYUBUfmQhOFhodn01Yy9jYlpmN2FoMmNLaEYzbG9mWU5xIldzai8wWlk3aVpKSFlgakJHYTNPfU45JVYsV1hMZDY4O3ssOl9Kdks3UXZpcllGazpLSVM0Kjw7QDYyPUEhNH1De2gjfjwyME9tWmVrPGJILkhoSTM9MGpyZU5zO2pWfEExKH46Z0UjJk5vM3ZbRV0jMGMjLGZeJUgsUGBt''@;'; put 'put ''cHNQOG5zVlAvVyZlfTUpTTdjMHJ4KWdNSTVZQ1M7S0c+PUVYVCJAWTViYkJOc2JuOE5UVV58I31vXiRzIzVnPXdlUFR7cXdXSSl7cHZeWzYjMmpvajRgJldxbGBJZFN7KnY7fT8uWDcscGMvbTI8ZHZXcU1EdEwmZHk8fXspPX05Tng3W2g2bWRBXmNhZEF7OT1oI35WTnlIMyhEIWUlenI9JnE0''@;'; put 'put ''PU9UUDJ4PHlzPi85OkBfZklSXlNSYzZQZ21fQ14yIyFSMmJjcWBgWFQ6dTYlXkZndUojZSFPSDw5QGorWjZlZXZaMiN8MH5uaDc1Rno2Ti5FcXJaa0ojUTcsXTNqVD1VJCtiUTxWW0JUI1VVfiRULHZyL0wuOEAvdVJnKmdCUC95RzwuckxefVJoLnlfXnRsS24+MWNmIjZFSFZHJXRPR0VMIzA9''@;'; put 'put ''X1Q/RSg9Kjs2ejcsc3NWYGBOWmFrdzN7eH5JPXI2Wyo0PGR0e0B0a306Qlp3K20kPC94RjBdKWtQdEYidUkkY3RfRTFXdD5HdmApbDNPRkVyYyZmazE6dy4rIWtBXSFWTHBNazQyU3x+eCt6fWZ4PDcmVCNQO05SO30oOmxrT00udjA3NF14aXd6MCFrO2twTWYjQW4vT3drTDxJWy9eK1MkVjdn''@;'; put 'put ''cT88RnA7UHN3IlRMPEo0ZSopeTRiZiM8fW14cXs+Wyw/ZHFsV3pHKklLInMiLn1CaU8yLyJxKiNGRXpVI1oyaj9Kb30mK2g/RXImMk8zbHI6I3xXMF1AInpoTmtPemttXz5wSmsqNTJ7KHc5eCs3Wmp2dnhJTV5aWlU+TSVXMHNESlNGfjR3STdLRDoyeDljSEIrfmRPaFMxfF9td0VfYD9PPnEv''@;'; put 'put ''S28/R1h4O1psWE17YzBKU3BpZnk/NGd5O1FpaURlc2lzcD1CWiM0PWM6SWhJUCpAKS9dSyNLWWJobzQlN0lpLGhNK0UhUCFgX0xtUVFkWj4kdDImRTsyZjJbIUF5ITM4Rn1GWnkkVXxvXzw9S14/djw8K1RYIXg6fl1MJVUrMHdiVl1USTAlVjlsaWJiSlR6YWtmPmpwUSxkPFteOChaU1g8UlMk''@;'; put 'put ''T1BxNWgpeEZKfCpRS1hWdXduTlJNY3M6I2h7dT5tR2EiJmBzMklQLGNPInN2Z3BRPi5ZfiFIP31+STtZWCIhJSM3TDZ5JHdGaWhiNzBURX1aME4kIzVoKHAwRW5LVzw2LDsqTklgPHg4fFs9Mk9XeV45WS9CPF1fJmVzdWhGcyYkfnc1WWR7WDw9TXt6PV1wMDFLdklwVzRZWEFIemBmSnxANGx6''@;'; put 'put ''MlZMWDpeZmtwOy86RSQjUElYQiNueEBwOHI5JE01aUA4fXVKQHhveXdyamxpRitFOXl6Sn00VzhnR1lWe2peJmRmN2tfZ1ZUTHBadWRpMm5LaEwpMkE+ZDw5eTN4bHArTClwLk09cFZObDxUJm4mP2RUPVQrXT1GW3VLJDRsaWAzW28ycFQ1OHlMdmdPWT5oemF3YDc2OFpNKStLRFI0JEhSaTtk''@;'; put 'put ''bil7JFNVVHh9fmlAWWs9bUk0NnZGQ3dtdCheRG5hRj1feX0jRXoxa3QzfjU9O25AJm0rKXFKbkxieCN5L0dAMVJUNGZnZkA8YHtjWjFxLCk6eGllbExNV3gyeWYxOlJaYS9TZkpDdXEhL1dKfix6Ulh2fVpbdSJxUT9DbWVSc1BXNiR7VzJmbG9NQjglSXMhcmlwcG16MDQybCFsezpqcWZQRSMk''@;'; put 'put ''UnlNKD9uW3NdSltRVGskfihQem8qN2ttPjpHeTdabyt+PzddPmM/PncsXmQhInBRWXtybzN3Uz5CSyZwOi8hdyRvUEVfQ19qQHNgUldAdjt7bTN7OTN+ZTF0SF9eRzAhPSJ8KmleNXUkdj17LDczbVghZ2NqaUkjXWdWPWd6bSxpbTF9WHBZeloiO2lIbGtEJXM1IyM4aEV3dUtYdXAyeHQlRkhk''@;'; put 'put ''WDY0SldqTnl6NCVxMiRfOH42KXApelU6YnJNLDBbKSVIRnJ6RFNXNEU8M0sxWUJFK2RXRlU2cExxZmVoNmJdMCN+TjtSd3xYJSY3TXlSPEBrKU9UYWw5IjF8ITQrXjpuRElTaSQwZXBSRTlqIU1eYUR5Z1k6cEV6Wn5eVW9MUlU0IWhdNzszLFZEQXh6ZDgyJE5ZOU0mdjN4LEdaTWJoZDFSVmRi''@;'; put 'put ''Ikkoe3lxKFJkeHFvI1FmUnprYG9dWjJISncwR1c8O357cyJXRXBedDYlU0xoRkgjY1J7eD11WEoxT0YubSFNcjspIy5ZZjJHfDNUN19PWSZWUFpJX0VuX1t2UCF3a0kjfV5lUmZwWyZsS359T2xRKG16OEheY1c7fj86KClrTHkhUnRFUUBtal1LeX5DSTJOai50PHVEQ0UlVjpbXyFxOm1maUQ3''@;'; put 'put ''fDo4WzY4cEV6PmdFSk03KEptTHpTfThrTT96JXRVZjk3XyFZSW9+QD9Jcz1Wb0I/XSE9ekhKJHBOOWViPGBHZylzIzNPMEI1WVUydExAPHUuZWdPcGY0V3xOfl1meHgwbVpdRmdnbSpRRVlROEk/M0J8Vmt0NW4mL2hhRn16V1BiLj0uaEZpZHI+LzgxJDJxOSJGeSF3OGclRmc4M2cyN3pPLkFM''@;'; put 'put ''L21gVlklMzt0QkFNYmBIZzdyNiZuay5gXVRuRiV1ajRuKX09UlleZjcsJiIkcD9ucSN+RDRqVjF6W1tLVTI6PmoiVEZKNUZBOGFLey5RW0AsYGU5dSZuIlMzZm1OKEM1cTckcE9bW3xDOCwxImxTYTJ3fGlzSGojaXkyQnY0NCZQO1c8eHVyKHd1SnAhWyRQIzJKeyx8Lzp+dlRuc1tuZnpfOG4/''@;'; put 'put ''fldzYTFeZyI/empndjMyUUY5Ii85TF12Ri5lOjZiYjJbP3hHM3BVJjErOTl6WTVobTFAc0RAdCYsbFs2U2Z2d0ldYVJmaiU1cTckMytIfnNCbjJgR3dQUkNHV0Ekd1V3cFplUCpIZSEiTTlrVVF5P20iXnR6YCwhUkQ5bUt1RVJIPCoyJVs8YTpJPmxdbUZ6VDZxYF0xbCwkMD0+cUU0SkM0OW9B''@;'; put 'put ''OU97LGlCe0RfKnMjKlozUC9UTyl9LHM4N2slNiQ4UCVTOiMvLFJWTyE+dDJEUHUseCIqcEZrWDFdOToqWnFYRUk6U1ArXnU7MHpLJmE9ZTF+QS5peXRhNVRoLE03TW8zLkV3NG5RZDF0emVlUF5NbEFvMDswX2BgR0xiQnkoUzAwYjV9R3dAK3deL05BXTRKZUNsYWo9ZnpEaX1XQktRTHwjWll5''@;'; put 'put ''ZiJsNnIwZXNFJEhkQDdZRT57QWs3UXwoNlBQejYpYiltbkdTT01tUWRmY3s7Pz5oSX07I0p+Q2JOcCxVR1huMkk5c3ZGTHN2UGBqdk9kSnB0e3J6cV9rV29QYEg3aVg0MXw5d2tvZEFlZFtOTyReaVtMVG9NdFJCMEU2aXFfdTE6IVhyZ2xZUX1gISlDJWtRUmo7aW5eNz0wI3pEfmpPJiZ2dzFs''@;'; put 'put ''XWhYQ1V8SDNXOzdNL3BGPnJSYmhPKXoqLjJjdHJbZEo8TkghSy9SWEVDbSlLR0hnS0BJKlBpQktlQ2FkfXNlSktefGpmTj1YODdjJTo1VlRaXkdlLFZnM2RIZilad0JZKyUqTU1oUDQ4YGgqN2xFbEY4JCJbZCFdRmljXVRYZCsvX3QhZ11uPHlHTVtaUDM9OTM/PS56WnZiVHNTc28lc1hrW3ol''@;'; put 'put ''bF5raVl2V1VYcmRKUlcvK21QWUtWW3RlYHRTJFM0aDNpei9QUD1eVVt1e0NMKiE+IURBRW5TIzU8UUY9Wjc/cC4/MHtHNzFnMGBIbjZhSkV2bGpXY1NKLkswc0B2XUp6KT5BVCYxSyFZO2d0UmteSXo6KEBzM0dxP2RkN21bdl0uYl1fVVA5LDcrOVlFYTpQIiRgRCYqW29UKFYyJk9BVHh1Z09Z''@;'; put 'put ''NiFRW29kP2E8fDV2VzZzQmdNVFhQNFZEWjp4VGdKOmByOVE/SmlMRDx6I3dzKFFGJC9YYHZTUjV5Rk5taj93MWRsTn01WF5MQCVsTyEjekwlbiMkNltdIUlULCRNe2pmTC9CYlE1P281Mi5PTEk3IlhMOi89TD1PaFNWSnVAcnJ4SnlAPSRtIiEuN192SilSZXNLV2osXnQ+VFMwImEmMVoxK09F''@;'; put 'put ''Xls7aDckUyw4dnhpdF1+PnF1JTR8fF0hQH1+YW1CLiwsczsuKnV4LkJDIWVtNEx0VCgiQGhfKltkMnB9Zks/Kng0PEAmeDZbXXl5bGR2KXJxMEQ5STU6T1ReVVt3eyZpPjhzMTYyfF14UkFHQWBKJU07L11OMUBKMHwhPVFqUyF7YS4rUSt+SUt9VCk8RG03XyU1byxZdX54RGRyd1F7Nnw+fV1W''@;'; put 'put ''b258PzVjRmZlWjJ7NmNeXm1PM2s4LkhuM1I7ZHc6VnM2IUI4eF8sdFhBR1RaeW0pR0J0S3h0a1E1VnpdP3ZTRTY2UiR+KVZ+YEZsKiNzLGx7M1Q4W0cpR2BYZTowTzpaLzQ0fEpSY2ZFU1gmfj5uPm0qZzVHY3RFMTZbIi40czdGZTxaNT5XRmErY3NVI0BLaGg3KnQja1puZTF+TnJ7fGtoJmhh''@;'; put 'put ''QTh8L15Kd3tLal48UH5qKnZRMDh4SDBeJD5kLDB1N3BEOTU1KyUzYWkvVz12Nm9mRTdGOj9wb0txSU46XyFCSGJTaSZSfmhoaks+R1RyXyYwIWsqRWNjaTJScV9VUW93S3RpOFRUM2p8MFZiUVt5WlRMc3d7UCZZZ3cpUiw/Sjh3MFMsdVBBQyQuMjBnfFZaY1tKTzFATiglRmosQH5QY085SnYh''@;'; put 'put ''alN+ZTZnJjZ0SWx8fG58V2E5LnZickE6Y3JdcklpeVt6SUJ1ZSp0cTtBaGRzaWloLHBkcjl3UkJJLCVoNC8jIkxkMTRUPjNnNzNjUTNAalE9MzA7aXlPZjlhWW9rbHJNTzMlfl43XjVnMG9wO09qN1h3Vk50eWxwa0BLJGhkUiVieUgzKFs3QjksWDEvYXZmRU1qOlRWdWU3N1llMWZoN19nbUZ1''@;'; put 'put ''SyRnMSRMUjh2YTVmIml1NjokclFoTDRreWBGcHp2P211KmJbbzQ/LikySiExXkpIMis/JVJlP141MHA7SmkyIzt9fVRCaiVlNCp+elRYZ1l+RWghZDAsWylMZG8pfmxdXlU/Zjg/QDc6JEhEfSkuRz9RQ3BfTyJtXWpBNXg8cGF7KHtbTXMycF9qQmZxMSU6ZXB0NG12TTdoNFQlcnU4dTFsbnx3''@;'; put 'put ''cXNiJmdCaEhONVQ6OUZ8JmVTKmM1VkcqT0h3YENlSHpbVmtmMVsxbEtnciUvKWUzKF5COzw/NHw6Rl8jJkMyVENOPHw4O0d1VmtuM3FsNGhVKlU7e2lzPjxpJCx5OGpjJHlxJCFrMmBKSU9OMXl8IjFjTlN4UD9pTUZfbFApLG5sYGFEV1VsRWU+ZjVTKytAdmwrPSRndD9yMFlsOkNjMSo5Ujpn''@;'; put 'put ''T1pgXX4xUGVUej9WfUwxP3ljODlOMiVeQyJ2PW1oNi5pOGpYMEV4a3E6XVpWbl1xKWZgME4vbC5BXitAWSFrcl9MIkIvUz1GLjhWKVReUnJVdl17SmYjfXk5eT5AQDQmZVJIYkR3KHo9cnFYKTF2LnZiX3Z1d3I3NUljdC82TjchfUc2YmFmRCksdEEoenNBIXFAVExSfVhxTTdiL09wYyFCJStP''@;'; put 'put ''UndiXVlzdEN+NnZpLlg8RDREZk1Te1QpXU8zYVZXTWRaSyVAVCt0SV1ranZ5SUFCdkF0JWxZfFkwV0pqazlOJnFHc3IwKzNTeEF1JV9Yej10N2dDM0FkZmNgVmpOQD97KzsyaU4mIStSe09DWjxffUlaQiJTdnl6blNDUHR7Qn09R0tJVEwsKEYkbDNQOCkwMnJ+P3pFcTFmVjd3b3A6PEY7fEFA''@;'; put 'put ''JH1jVHd6PllKN3hXZ0RCc3g2Kml8MWhtfk1+KXYsMGBASipJWV10dTpFUik7MHZgb25BUlZMQTR5RVVtSUUvOGRPJXA9e3R2cypNITxxRHNhd3IjcEZQe0MjOF9NfnB9cHZEZTFkKmJOaCpLWlt6OiZqO3UwO2d6b2ZnbmQvXTxKZHFvRSFMX2wqREZiZWVNeWtHWjgxKSMkRHxWJGIzcSs/dHlK''@;'; put 'put ''Sj14WnBfRiViTCY+RncpWUl1YyoqZG8xRWIqUn0/T1Y2I2tUP1hnPiViP0h0L0B+RjEqPCs2MmlTWHwjJXsvfmAqOjtnfV8zQClmaylgIlVhIjNlb2FTY1olUnQkaUx1ZUY8ZFdjc2w1bzpxcEtmVStWOSFNXXtkT1tVY15AVjYwclM5Vk1tPWZgakx1MmBtZ15qSyh6bCJqO3czPyNvRCRpO1g0''@;'; put 'put ''M1NtRkkjdlMvRGY7NHd4OWxOVG5MU0hAdyV8RlAod09PcC5DPmxudmttYWkxKCleLnE5fTM/NGtzOHhncjZFZzg2JG8raCx8eSEuMGdbVUI3Nis9V1drVkFxczBidWR4RHY8Xi5yKFYiSmhNcHAiNHl8YHpqRypHTnYzQFEiVHcyXmZkcn1edztkSU1LJTguT3JGfSFdLyY8K0s8Mnl9emJ6a3di''@;'; put 'put ''V1NAQyg/ejAxU2UqS103RHI5N0FoT0Qzdmp8T0JQc0Q/YTBAfWN3KUpxfjJHRm41KX1sUzN3ZihDd19uWj9zQ00oKnx9c2EvZmIuXmpeU3dyOFJBKn0+LD0xUlFBLGx1YFBXQXBYWzspYXVNR3ZRfE99MnE3JFQhTHtnJXZQKW5JTmU2I09mXS98Y2lJXytVUTgpdGcpbj8xIlEjTmx2JSxpSnZE''@;'; put 'put ''NCtLOks2Ozs+KGhTLHR2MGd0NXRxOU5zc3UzNyQ6QjEjNWF0NV1jR29YUC9XcHZNO1ZLfGNOK1IlJFMyamEvPWIyYlB0MGNnYUtDaUVDNGZdYiNFNkxlNlg9SHo+NiFtOz1nd20sRTVTLmljOEYyYU9WWE1gTzBaOWtoZHphWnhNcm9kfEpleWo1U2VdfTt9QTQ8SU4+R3JxMFIpZmVdMU9oY1JW''@;'; put 'put ''MUJTIzwiTTx2QGIwRHA3LGxHTTF1P3h+TEdnVylrcCxqdFp4PmhucSpiWWJeUkBUcjV8YENCN0Z4dF4yTW5qVm0hQ0N5SFs2VzxtO3l5aDVGPklOcVk5ZzZzU0RVcyJMLiZZd10iR2Fwb01PazU2XX1yIyJWLjxgIncjRFs4WHBadTVKZDp0dHBXR0JoIyElTDJKOChsZnAxbCt0JnNuIkhyUkhV''@;'; put 'put ''cklnTi5ecCFjN3xiY0cvVjg1PVczKjZtNnZheUJJXmw+NUs+LjRmem9fS3pqVH4vJld4IktAP0ZPL0FXKyxJLys6Okk5a0Y+MShkRFlbPnpDN3pQPUUie3Mmci8wL1c5VVN2MVVxdk4zKUpneHhNbTM6Z2Y6TiI2R1E0a0poRDtJe3oxfDp7enltZ1pOQ19jbEJ7Q25FUGF6MVlIZCtQKyQrUCxh''@;'; put 'put ''NWMydlltISRJK1NsW3hlckJAOz50JHJoJUpJSWhLblVse18+QSRYT1d6Vn5WeiJsRyJYInNPd1dUOl5MUVJHdk53Q1J5fXZHJStUfDApLG1LZnZNeDd7fiZJdGZqSnV+UU5UQWNMRENhR2V3PlJUKFguakleSShoM3hofT5XbmlheWlLZi8xRG19IilucVhsSjlgZnM9fW9tfiskQjk6WyY5KWFU''@;'; put 'put ''KXIlPiQlXXtBImBrRDI1M2NFTkJpMWZhOVc7QDgoVDl8P2p6cmFLNmt6UDAlM15oViVVSylIJEQ6RWgmSn5HdC9WaHEvQG8ue3s7aUBLeXp2WzclWmtSNFBWLEgmK0E5XXE7Nl9DTnslMywld2pmaWNpS25gRlpNV1JHdUlsXUNZKTwrJCV9QndaQntHek5QfS5pSVh3PXdXQUpTPCVhcGhkUDEx''@;'; put 'put ''cTBCZXx5NyhVYV5+WG5XNjlaUjxXPFR3SHd2diR3b2JkKH59LzR+c3ZwViU5KntGaXZ3VGEkSmU2e29DW1hFJlc4bzJjUTErWEw1PSZ4YEkuTVViW3ZMI3QueH57LmtBKC9ZemdbZmFGYXdTbEhlRUo9KyliS1EiPzsuelJvI1IqfGd1JVhVLDxRfHxrVDY5QkZxTzx+SmFCYFEqTnc0PmdpYWVS''@;'; put 'put ''eDAjenxqalNdKE5JUm9CdypwPG1nUU18Xms5SihXVTo1MHsrK2p+c3xXcjFJIzNydEI0QiJwOC5hK1FBKGhrZGFEOj5HJFs1bmZeKExqdEZmXitnSFk1NFZ2d19gUTY+QFV7fV0hcEE/PT9mSXYvVEAoZmM0QDkpN01ZND5EZm9LTjNENExLRF4uVytNRVRUY2k7OjVNSm1RPio/NT9mWk8zd3dP''@;'; put 'put ''MUh2PHM5SnxdPWRMWDpnKmR+Z318TzFWTi5rX24wTWhKTHNHJWNRaz5mL1lQRnpBXnB9VH5yUCZoInxESS9YNXsrInpXRXFBLFg2MVhISm4zK35ONnBxWntGUnZsMDh2UkYjaF9pZS8pR01ob1d1ekxofDp1LkwmPj5Re2NMMmBSJiV9XzlUJHZWMkgvKH46V3BnclBAXj1JZGsjXkxUe3RIMztv''@;'; put 'put ''eVZ9V1tXXlElJm8rZDhGWnJJbGZtSnUjWV4kLk5yKVN6YmZDZjEkVzM5c3lUOWRYTz8oWGNvWEdBQWN1SjswQ2BwUkZiV1h7NGlDQTlwQUZ6VXV1YXRfYnVEM0hTM2tFZzJPVlY7OEs1fVgpWShmJnFDXXMkdUleQTJYSGJoMFhRfWUkNE1rJFRydGcyY2N+b2ZaYUBCOHdQKjVtRHE5Pn40eDdk''@;'; put 'put ''cUsrJFMueix5YVhOa2NNa1BwenI5cmElJiRiWTBWRXhoJiNFXlBjfX01fSFSb0dma1N4VGFIeyxbYilhX2l5fHZlREooYSsxaTlEW2liU2t3RVBFaFYwc0NqQVUrQCJ8X3Z4I1BlK1FFZ1Q0YiFUJGVYMnxEVWV3SmovckdOe3A6TTg8XXB0ZyQsZFsoXkA4UUxyI1BlPFRwPz4rfDV+TUg3VGVY''@;'; put 'put ''WV1PcDZgbzs/eyosPDp5NnAvQzYxSm07OnglUiZVKVRIQ0smbiRZZ3M5fCVmYm1xPG9BazsveFBUL1tjOmtvKEZ6a2tCKCNaSD9lIURVeSh8SXN3ZC9CTi48RF5YMk8lVDhCWyJ9OXcmSTAwTmpaPjpqc2hlJWROb01jaVYwOD1kJX5mTFR6QF08a0trdmtNeFpFSytgQzFaYlRyJjl9PEQ3c3hg''@;'; put 'put ''V1BIfDdOZW98XmlZZyZVLkp1TzAsKy9HLD4qWDd6Xzs6YVVEIVtbLHJdcFdhO0VJej5IRCRKKylQSDVGW3ExP204KmdKOCpzM2J2RHFrU11FUksiJSxiKzhPIXg+fS5qWmJZV3VIW0k5KGBlekA5MldJWyY+fFdmIW1VS2NncklTQDx2dl19OUBzeTVIcmZ+dCMqW0tpNWRfWy5tKl1zUUhlJmd6''@;'; put 'put ''R3plRWdKTG1yOytHPCx9cU9bTWt1TVVUdltHRmI0LClIcVNHQXNad1orOXdzPjQlbUdzRGBXfXExSnxkYzZDYTh0XUttRz1jO1dQQGRgfn1JVy9kTFY0SHlTeUNQJEE8bkU+KFR5X2BZXThbcUl9RTs5WFUjWXddeHF0fSx9QX49c35+MWFxPmAzJklkdj1UfSYlejkjaFJheFBPRzhYYiJPLnBa''@;'; put 'put ''V3thL2ZWdVRUXSsmVGsjTnBvNWooWT09fFB1c3tWTExnJV8oIkBrbFEkOXhQP2ZQQy40LjFqQmhYI2U2MUlYXWFMeDAlWXROU19kM2BNZGwyU0VtLmMzPypdXiIyLHJPNUZrJFpJTEJXMnRkViJTQngzWC96XTV6Oj1oLztgYmwjPUhWfGR5QHRtW292ODEycTRhRChVdFBecXlOS15kO0hdJEBp''@;'; put 'put ''PWhTbG1bXzVjZXB3Zi5EeFBIcW4rcWl7LDE3VTVsQk5UVlo/R1VQPzBlZlJfTD55UlU1VXxiUHtgcm85ejkzPHdVUC84TWVxcV8qOHwudzxpa3hAaz8oWUdTOW5Wa11mNG8qRiRidCs3I2pDVXwiJk9FIyRCaH5QLjpoTGVJJTpreX0pXVthZCIqOiNxPDxvWnhBTnNhP1E9dVE7Rm80UDVCRjA9''@;'; put 'put ''Pmw5Ul46fFhAZUxtdz5SI1d9dEd7YzhBKmcoLCtaSW1WUCwsNC9JLF09U1dAJEgjYmp7ZFRjc2AiVnU8dFo9MWEkczI2L1pkNkd3IilPWTRIOyMkSjRHYlM3TUJwNDtIelNjXVhsZ008WE5Wcmx5InFlP0E2SGE+TF1kYzRmZW19JW9VSFVWczsraXdMOU94b2RzZlQ1Kj4qTVBrZXx+fUl3KGxp''@;'; put 'put ''YDVbV19AdnNEQ2ojOVR4InROMEM+dXBIK3UvKTBtIixPa3RZVUJ4TDhUZGQ8Yk8xIzZyV3d2YEM3PEJnKFVzUmtWYHR8QmtGRWpLRzFlaStCUlksWWNXeEU/UVd7bV0+Iz1BcV4sZXZKaUtNRyVHaVIlKiVkQG4zVF5DMlBpYTBwNTcubE0xdHQrVH0qR1RPbTwzaTRhejhmSiMpJSwrb1dQOm5q''@;'; put 'put ''fnp7K0ZPIVpFU0xbU1tKZF88P1ZPXStOXVpZKGIudyF9KmghYmdqQTt9aixRSXtsSz0qfHAvNjJAeTM9Uzh+cCxiSHF0ezdKKW9BO3pqMUomK2tBKiZ0V1dQczo2T2ZEajNgaX4kJDtUXStudyskdC9iVVB7WSRzWzxFYns3YzNHSHhgXloiZmk4RUkrQnk+KlVvWyg8Pn1bZE15QytnWGBLPH11''@;'; put 'put ''YGh5ciIvejlKfFg2czdPOEFlS2htOUA+UClpKlsqLGIpOFdHIyo1SVZJO29kdVg6OW5NYSN2Uk5uNlowKkc+WVBdV21YOiolZDAmJF07TDlOYmNTLCgsZFNWQTc+U0BDKHdbX3FKNHxgJHBOQHchRk9MaDo+OypzakIwcS9dfF88UDMvRCZ4a1BHQGFaZWc5Llo7VEhPM1tjb2ZmMl8xQTssVVo7''@;'; put 'put ''aTVib0Jneyh6YWxtVjNrLDpLQlMrOCpMUTJaPVt7MFp5Y0x1ciFzNzVkJmhndiMhY09gekY4RyI2RnckYX4qYHpQTFdRWHFJMnZSczsrPU1FQ2RReTBNVl58bUgoJXVtQGA8JT8re35SMj5jRGtuXylfZT9LN1RhITtBVThzeVV9Njg+SEghPH5kamVDcEgwL24lJjNhfiY/YVg1elc8QzRLKHEx''@;'; put 'put ''NHJAI3hpWyk4MzY1Q3syIT88OE1GbDJLbmg7SkAkNU9iOEt7QTIvNG1JP3FVKlApSl55ZGZEIl1valZEc311cS9eIXtYKSxvfltQN1k4Ono2flBQMlgyVmwxQmxxNUtgSWUld0BNIU83aH4+OVlvfWczZTh9biZhP2xENVglJkd7fSRwV0x0YGE1Z0RsfitSVExYNSFnS2g3cSI3Vit2XWg7dVJx''@;'; put 'put ''OlpQJi92fXAvMnhtU2hsaG5kLEEld345Z2csS3RGJVcvJnApL0E8UU96QCpGRl16PkokZSRrVnlNVSQ7RSV8ckchfkt0VlFQOlNheVlPIWZnd3EiditWeXMub0whPCM3Mm1AeTF+STpSbXpOMC9EbEVLWHhdV1EibXVHUUUyQ1N1al9Ka3ducCtQdjs4N3wySDptRjBuQ3BuI2NOKz0hYD9YXi5F''@;'; put 'put ''aGleLGdQKzY9bUBKSHY/UGRUJG9STGdySDM1UmU9fW1yMTQmfk1zMEQ1bVp9QEhxbUVpfCQwV2tvSTxNOUo3IyYyVH00T31gfjNefDJRL3xkfUduUH1eO1JXezs9c3EyI05DZFdocXJKPlZmc1JmO0tVK1dFaC80Y1h4WjUjYCRaSltze0JHbk1leWJfIUw2N3QuYStAOVhGXnFDSl1vZzRMKjIy''@;'; put 'put ''WFY7dCkiQ3wici4kNzteQ087a3ZYRUpYMTZqa3UrbUF6bj1vTWNtKmo8aytGLHM8US4uYnxBa0ZWMDY8ZTlZVFcqbkU1U3B6cSF7VTBgYyoyUEtlUntVPmskP3xUIV05OmJeaCQkM3J3JGo4VjlsRmMqMWhHIS93PDIieGFBM3gyIVU5LH5CIThvJWBqRSs+VG83PWlmbn59Qj5mT1c+b2R3Lzh5''@;'; put 'put ''XyJZbnUhdFNdMGFhcW5LLjR4TDpdKitAOFtTPFdefXg0KHskSTFzKjhtWDchP2BMMjNvMFBWQnY0OXVxKl5ma14wKGFYOCJBRG5GOWl4e3gsSm0hO2oiV0MkSnwlMHwwKWdzSHI8LHNeZUxtS1FEK10me25wNk9lLlB1W1Q0KHNadj4sNXA1cnEvNVFMYXtHdiVERiJHflplSGEsZz59K1Y1Oj9V''@;'; put 'put ''JkFkOkxfaSYoZG49VytmaWpnRCxeTF0zTkkmKXkxaCxuYXFUOmJLKzZCZVd8PVlQY2pnR1RhaUk7c05Cdj1uImQ/TTw6TVFBNElxempXLmk3OkolfU5adkIoZVRZPl1lJF5fWHB2QUFPMjtgZkJQZj46ZE9PdCtOZ1lzT2sxWX4mcV4hOipUMTBqPiYuLylxfjE3Rm9qY1BaM01LalByPGRTQG5L''@;'; put 'put ''SWdkUHVnOEhrMGFGfDpZcH05Kk5jKiNaeGM8MWJWTzh+Y1FyJFQ9Yj5SIX5WPSR8T0I6TFJDNk5kNHBIRVVleWpFSFBWbjcoZHR5QXNLNHhmUm9qQjElfTg9VyZSL0o/KjMiIXZ6ZX0zO3VIfCo6MDhJNGByWVV2OEZvRmMiaz86O1VIfjZAX0tlV2kqPTFiWUpCfUUqOUJRJCw2UXtAW29IKSR5''@;'; put 'put ''enFaT0UoaGB2cHJ7fjdjIlhGZi5DSWdVcWZGeEBQc1sldGlJTCZSRDU9eiVaemduOWRJcWhoTHl4ImEmR1ZFRkt8Q0tMWj1MZnojSH5tQmRyZSxMQjYpaV87ckd3eWU2QGloT29MZXNxI0FJdzhuc1g7Vi8ySThqRCImb3R3Qjd7WjdeYkcqVEQ+bkMqNkNYZVlVXTVAUXhlZkB2bSwpJHUwVjhL''@;'; put 'put ''RyQjajEpZCgsPElFeDRGXWJXUHpxMkp1YCEsPVdoJUtvVWIhQkpefnlRWDJTc29Ce0BUfG9TejJ9TC9eNnVsRGZgUSwxcEY2K2lyS218S01jbSM1VnVJeHd8Njc4WU95cUklQjpyLkpbPSg0PCsie0hvLERvRXxhTHp0L19qP3csNE1pbH0hcnFYOyxaNGwsTCRXPnxCXWFFaWtEc1dYPzVzKkVi''@;'; put 'put ''VEsxO3I5MztvP216PFZudHZJIU5rNDUuRUA+dyU2Yz15MFBYR2U4Q2FIfi9zd3l9JUAhMVNYO1k+UHsiIzpnfjxVcWtPOWF2VHN1PVZuV0NVXTJaelN9NzAmaG1eW1N9NzhCXWVHZyV7I1c8TjpLTlEsNTl3YG9TZzliVVhzc2hpUXxWYH4/MG5DIl4zd3chdWo6Ujw7NDglQzI/aUx0Ij9wJG5C''@;'; put 'put ''KF4kPUIzYSt3SUg8SXo0OU5HS2V3diYxclBTUGhhbjw1QEBPVylgfCpOX1FkLyU5V2xiZTo9QzNJRWVNPUFdKTVOb3RIPlBQLDZFZGJAcWsxfENKeSl+KmgmeCp7QztsaDRRdWtOc1M4dHpkPzpPWmVdbCREQ0RzTih6YTtAQS9ZYU07IkhNPFVEUi9XdGJbXS9JbSVkLCoyUDAqe0dTSX5jSigy''@;'; put 'put ''bTJdZlM/aTt5d3lQc0xNeCFpQG1UMGlaNlB5dyk3a2VOXnBCdElMP0NXQCU4Ri44Qk85Rm5tbWosSkJOYm9UK2ZAQVI2TGlgKjFpRmwvOlZAPEhsYWZhMyNoQnoqbGB3Z0UuYUFPZUE/QmxzV0M+VF5wQUU/RkQ6ImVifCRWRF9aRHVgNlJIaVY6eS80I31AL21rc34xPFovbS4zOlR9RHF6Mm9r''@;'; put 'put ''eVNETWs6RGUjNG01bDlkQCljJnZEcyM4b0Y9NjlHRFcmNkN3VWoidlB5QnUsNi5QIzI2d2NxQCQ6KHo1U3tXa08sKSNMI3BAJXt5Y0xzZnMqeDJOS2Q8SlFFXUY7ZiYofE0sSFdVNSNjNDskUzhdR35waEpjM31DfT5HYHd8VHI3LHh3PHpbaVptU3Z2ZyNDUDp+PyVOPkcwWH5YRm5jUWhBOnRo''@;'; put 'put ''RmdwP3gkJUw5MkM7JCJoKFpfQGNKX0VPPTBQQmVNP29TRHV3JmhgMWgwWVo8SC99aCt5SmFNPlFeMF0ibFpDPChUSEBGP05WVGwwLltINWc0fDpvWitbWT45YnlIKHMsfW5WNXtUeWd7TUFjOnNFMGNLW2F0W2h+OyZgJXdeeShYSUkqaEpFclRmKm4uJi47cGhaZ2VRMzJGeXh5ZWpPXS9IYXkr''@;'; put 'put ''ZVNzM3xyazVQIX1kcy8+WSR9RDYzPVdLN0tkQC81eCtqWV5tWVg1VHUyLHtoVEJAdDZ3PSYlWnR3VGwjfHRVSTMrZ3hSLEokQHpybmJ8YUo/OGYzfF49PSVQVExfSXhtYUZNVGtBRUhXfWJiRl9ZMUhxMUVsSiYhfG9FZ1Z5IjxWKiUhTGljZXI5QnE4JnYoJFkjUCE4fmpXJlI4Z2BXQzJCXyxr''@;'; put 'put ''Qj0hVlRSUW02R1RiTSs3SG1TeDVZIXEveztadS5oRVRyYWRHaCJKWUFfQUB3eEpOcysmIXxGKSVLLEIuQjM4UDlWTX57emVTNmxheX4kdk8wJFMuK1I1MHRkTyxyfjJ8L1hlOkBeLDkifUs4PWchViJWUk9peE9hSnF0OHY/UCtOUyNiO0NgZ1ltPCViYWFGQjIuZHpdMShObl1QaV9PLFtFUTY9''@;'; put 'put ''MkkzKyx0SE5xPCszYy93ZXdlT3RHVFNSSy9PX1c1YX4seyFpeSNOUGtxN1ZqSDtVUEIzO2R1WzZyRiEuQ1BAbDUhYHx4V1Ilbk1XPG1GN2JbQHJEK0Y1L2pMOGp1ciZKcG1kdUF6K117KGkoXyU/VkhgKWJCRC9MUmNfeUA/W0RiUSxYYnBAbWZ4NiIiTCFXd0pyTyNGYVUvQ2lIOGs3OWErOEou''@;'; put 'put ''ZytIfnAyTFN5XTMwQmRfT0kuJiJ5Y3MyRHZRWGZvYmFdMEJ0WG0hOllGMF1RP293JnVXejNMbiNYfmYkTlNdXU1DS0IoVlorTU5bRGozMG1CKWdgbmBaSCxWM1F7JS50NnBDZnheN1t1Uz9lYzYzMW0kXW5FJCxDd1pXYSlYfTp0dFc7SiM7IWcxMUJ3IjdmPFQ6XzJBTy5dQEVPRDZBM3A8KH0/''@;'; put 'put ''ZUJtaUZvNi5HTygwfldqdnZhW30vVk1sTi9oWlB8OXQrPGcuXXIzak5XUD5YTDVvYSNbRSooakgkMCVqU01WJGF9SzRxNSZSOypLaTthRU9BRz10VD9lT0JiYFUhRlBsWGs+XTcseDw+anZxRCxqaGZuZnRJZChraVVkZzhJeGxwTUcjbC9VZ25IK09CUyw6c0JreXdCXU09SjdVIilaMkp5O3RL''@;'; put 'put ''WEN8XltEQitXUHFIZHVpSTZ2TDF3bWI5bkU3ZC5+X05aeWhsQE5kWzZQTCxyRGsjMlp1Q317L0UrPWVVQ1BzRWpqTmZDKTlgZS91N302ZF19aDBQMUd3b011WShJW1VUQF9ZKyJYbSZAcUxncUJYeCNVYDxUYClpNlkiRTUuMmpaMzI6dXdLVXZiXlByRFluZ1BGVzhELiNsfUA8NWw1U0xCeTwm''@;'; put 'put ''MlVxMVFwcj4oTmNHOkZPUzR2Qi5eJVRXdGFQIT9ve3JzQDp2NEQjfmxWQSFZaUEhdkVadDVUY3F+JFomT255ZyMofnpTJXc0S1ZTIy8qOVVRaVA+cGBBL353RnxKP0E4NCE3WmppYDM8Nyo1UkZ1eE5MV0xlSi5lN2ExZjZNQjZoITImP3h1dHglSDlKWVN0U1pBYHMhQ2ZeWz5aaiVbWDo7RmZV''@;'; put 'put ''eztVQmc9UHJiLHZISn5bYkBPdC9AUmBYfkVCRnpFSSkqOmRZUXBmNCQ9X0Nmayk9SV0zdUUzWEc9JElwOXxxPGNDYm9vJUwrQV4sPD8wSDwzIzRBKCIiY21zLzNZa1JWVi8oeF4xMmM4KkxEKEBWVEp2M25jbl5TZE44WSJYRUVwPys8Y35ZQC5LfkZ6RW95QCNlTDxndmtTKT1kcVEscWImaC9v''@;'; put 'put ''eCZiRDN3fFA6R09oailrZnEjNSpMc2FxPkVpY3U5fisqbU1mIi9jZXkmJEJhTlJ6XVRMKTNKamZGYzpKSnUhZWJWXk9pME0pSjQ+RlV1Q3AvIWF1OGZUSSZ1OUVvT0tsPmxCZHM7XytJe3drYEA/cXloS1dPXUx7UnwjVnQ8JTB0JD99byFpJV99Tk55bjAldkNvTFdEKiRjUyhJWW0odzR9XXUs''@;'; put 'put ''OiFkPyYkP0RvKDMvREI0dlN1OHVJWSMjJSt8MS50UDUhcm9XV1dHb0Y/TWttLGxGcmI8RU0lQjh4fHxLX2t7NU5sNGo7VDhAdiR4XWFPWD8vK3s9ayQ5VmoxWWFyKiVkRUVsc3YvW1ckcFtQMSooRlA9UD9FYHksX2RnYl11RExJczh+aGZYPEFGVU50Rl44VElIe2o+TlA7Kzh3PGI+WFVGPVhB''@;'; put 'put ''b0hjUGUuKj8lKXpLc0NiTD5FUkZmJjY6OCtJSmpyMSF9SU08PnYweixGK1N8fX1SNT87UWhKY195XVN9Wjw1Pil9d3lGY2sodXU8T1orIW9ATnVLNWRYVGw0TGdMNmsmNXJSTns3fnpUdzElPmUoaGF+eHNRJV14bEIoey99T206IXE+ZWAic1pRYnJYJkplYjR2dWoqQGE8LD0xOkd5VHE4QzVI''@;'; put 'put ''bzI+S3kpMTpjLjgjalRML1h5KkFnaD98W01ZSUYvIUlLQEIzTUJoSF1VPS8+c2gwVCY9ZyJwRiZlVXhfbGMxYEIzeSpUXWAmKUpZb19YbkxCVnR6L0k4bSg2RkBzTn06Tks4IjFRSUUsbEAlQzApfkcwMnhdczIrYld4bWlgVGxGJlB3VG9iXzwydHBbbk0iTCF3PytZLCg2ZDtWSH1BRTVXTD4u''@;'; put 'put ''TCJoU3luaDZBUkZmOjFuZz5ANjsqaVpbL11vU058N1h8fGxkfl5aUT4lJTlYPXZNPjh4eXdrbzsjI011YiMrV0s9KDZUPVYjJEhndnlMXl5wcTFWN1lwKX1pWVtydmtsfS88fmNYc30pKVVycSVIMk1HZDJHNTF1SXMpOSZNMTFtZ11dUkBSO2QoaFhkT2s0XXdld2t3NDtsZXxuK2JfbywvcSl8''@;'; put 'put ''fl9QPT1lU2o5a1lBXW5CdX4wL3AzS3g6TjI0KE0rLjU9PTAvXmlkeXh4VWFFfnpQP3ZfQ2RhRWY7NV12dWoyOTw1Tz4hOTJKcGU/TkNzc09JJmRwPlsve0xbRlBkZFo/Rk04Rit+fD99My89NVAqK1Jqd3NdQjhfMyZRa1Q3Xm54OiF7UDdtZ0JnRCNELDhqY3E4dWYoMD9tNEdCXjNYLEVpPGxw''@;'; put 'put ''STlZSG4/KVUoVXdhKkRTPDphL0RIKmVfPENCMEc8dFgsRnguTE4hKWEjXz5jcF9PSWVaOiVZfjdfXWsqfnFiRVVZWn1+dCIwUkdAejRYa1NVTFNAQjE8ZkppeUVrST46dT50dkhuWXFPSEwrL3FuLH4oYFspNXNuejowYjclTXgvRlh4TVsyYS5MXyx3bipxXS5Oa1NWRWZwV09kW09FPTROenBK''@;'; put 'put ''M0AwN2lRd1RAcnQub3p+JTRnLEwxbyp2WFRrdlZMVUFqIXRvY2xIIUJ+RlQzcl4xRyRkVzQidzwkOWtxJGRNdXRXJWFfallnMW4+MVJke05ZVDs1UmZLX1ojPnBLOEBDdzQmYzgmNUxse0ZncThvPHowX3t4V1lkcm0oOF5wOm4mJG1bdGooISE4NGRJV3E9TUEhW0dHfU87WzlVVHc6MWUkTU5t''@;'; put 'put ''Wip+JD1LVWp3LE5uaXgvbHYvck85Zkx8ZVZmK1FQdiImSkZ0KWhCeCFKT1l9b2VXTH5uSGBOJDM8YztoQEprV01SYUAoaG9ncjtOblVrcnVLX1VFNXJ1ODxUOEdiRGp+SFpYWFJYaG4wa3FmPy54I2RAPFNfPnNXNHlBfSVwcTVHflgkfUZUeHU+S2pGXiZlfko3dX15TGhrbzZnb3JnVmQmJjds''@;'; put 'put ''bFIlUkM9ZHFqKXFsO2o1I2Z8d2xhXkVdUjYjTGQmel5nUCUkdC9jdj1iU11qXiFpV0IpISlJeSFeWWNCe0xvb0VhXVIoZTM9YT5rbkI5eUc6NC5hc0tJel1MNEA+VzoxNXo7eDtrMyE1Vy5mUiY9WVA/TTE/SGEoUHVMeDE3eDk5UmQ1c1E8MTZzeXg5Y3lVSG9SOUZSfHg6YEZlJjIxP1ZqYj84''@;'; put 'put ''Nk80cUtVaTZRZTRhYDFdI3xKJXc0fXldPHlNTUduT2JhNm5Ta0NeJHljNV5eMD9vU3Z3P1lrcGt6fSZgPzY0Z0RmbmNFMTI1RHM1ODJRVHd5WURsNnd5TTppSDlIW1ZYZlkvNiRlaXRPWyx4emgrTyh1JiNLMFIhZj5yUj04fFlsXklpbF9QayVpN0lTdlJQbH5SdDVMb0slWUc4SGRAK0dnJjJV''@;'; put 'put ''eEl3d2dPLypmcTNibkUqZCFbKW5gPXtHfWxUT3x4VGBsaW8zUDxnZ21lWjMrIUs7Pz9gPkgxXn1ZLGEwUXh1I1IzUjcpYSlMeiokSj9ufjNpKmNZYiE6JiZfaDxMODM1OC9eTnN6UmhgTjRvSF13bk9WdVZuKW1tfHE9IkdbZkwlOFNrYUl1WHN9STpHKFdmRjt2bXt6WSZUdi5RSkMzVDZwIkZq''@;'; put 'put ''YzBjO3Bjd1hWJHRgO2ZkbnIhdGwiKXA4aUJSbipicjt3YTl3IiI0ZCF2eW48OlRLbyxSNXlJO0wyUGVVWUpGR0JzaDBuVG9PXShtRzBAKldtITowKmRpMyM8QWBWQm07XU4uLnU3WGVsdWglNDFbK01ZU3V6IT52WE9+JT1BRHFkT0M8bmtQdUNGfmJvK1U+eGFNZSV5PWRkel8rQmFRPCQoa0Vp''@;'; put 'put ''K0FeeldOSlJndHQjI2k0KWopVV95SkRUd3FsYGlwIXpTWm1pUyZ5VFFDOTRCVzB7WzpOOzJnZkg1OCloem5pdkZNM1tbNCFMbVRePCpCRndXbV9lfCQkIVZxbjNZO25YYkJeRU5IRChuQDBaeyV9WEYlYXRVaUtiLFRlMXt4fmQ6M2djfEUpRyI1WSw9aEkyQlVDRiVefFthKyFkYzQyKCNWOCFr''@;'; put 'put ''LnBhVyNlflphXih6MkRFTWEqcHRlXVpCKXM1Zm5mP3okWmRlOlBQY2d5Nyhzc3F5REJHRCh0eFZYQXw6JnRidjpZQF1leT9ASkRldzN0fndHPCosfj4/REhDPWByVSY1ciNUTjN6JCM+WiM6L0ViTVg8bTZLMXRUQlR9S1tkNipUUnZ3PE5VJF4lbnZoJiRKUzpQZ2o0cnRnejdqc2k/YGhkR0xC''@;'; put 'put ''ZmhsKDdNM10/TSx+XXwvaHt2I24vTH43Pjd6eGJpWTUmMEF8RTdKWjpVPUAuK3BDaGA6SjBONmZfRGV1VS9HKVRScHVWU1FTKmVrdzgxNmE2QkImeVhgbXkwel5GejliVytQX0ZVPzFpYTcvVCQ4ajd+ZSpGUmNOcjYoMXdVJDJNSG4iRj10PD9maHZVMj1gNUI8WzlqVCVvPjdJX2NLPDY1IUZ3''@;'; put 'put ''XSwyYyt5TUBienVsYE9wJiZJUTwuXX5dVj4zXko/SkEvOVZudjl+Z1F2YV4hejxZd2ZNdnRUaEx+OzFQITpxRXljdlZjTTF1NlQ4NXtkNVIqXV5HdXdDTldePFgqfi5lbHx2Pj9ASjF+Rkh+dz0pP0ZHdStEcyY1d0R9SS4iPlVJNjxtITROND9hLkNidTVvaFlAdFdeQTUkXnF9MFpgOmExN2p9''@;'; put 'put ''LG1ec2RhOFNjVCVQdzE/YTFtMkZmRE0lYThCdVZheDg6dG5FOCU0UDB2OHVEZW06bXEhbHpNc0lFM19KR35yIkErKDhbP217KDlEciVAY1Q4RkN4MndGRDpSZ3BMeEUjQTxEeGhJXUZ5fF5ULlk3W3JQN105UUR9KFhpfm9UZFF6V0ZxSVp4MkhCIjgjJD9SUVR6fmU3emhPT2FQXiJjam1ZXnBU''@;'; put 'put ''Om9RRjZwTmJNZjlueSFhU3UpSixwQ1FganI6LnVTO3Y9RUl6b2tCLjxid0RJdlswM0g9IzReOz9ofW1kWlpNI3gwUV10US5RaXkiWisjbVJdckJ9UDN5Z3tIbypNejY5SG5qRmBWN3Qsbml3emREazRhbihTendLb1lAQDBPc2E8dHVSNGNdR2AoPXQkfntDYkt8KUl4UTMwbU95QUhSSiVLIjpe''@;'; put 'put ''OXJBTX00W25xdEp4dkpOcFdmdXpCXzBwQlI8OTRuNTxxPkQoOUNlN3gifHk3VD5COzIzYXYpUnk0OH48X35wfERWeGJ4JXF6djsvIWs1JDNoellfemRQMlUxSlVDKHhjR3ZiKFsvTFNRcFtvM0MkMm9rdiFOakxfOVhjWT1IVFAzTT5LdGFPTEhpMWxtcT8yXjRqRX4rJD4vT31IP25eQWJOJD01''@;'; put 'put ''M01+WVpraDElL1Z4NDh9WSFGazBYOGFlcnZCQixrZUhXdT9YS1Izc2NdO0JBent4Y1pNTWEkSV8uZnJkbE1dU2wjaTVhQFZhJHg7VzArRiRjQHhmdmtdVVlqZHhDIkVhQUNAVUY6MUorbW94MXdZTHlMa15HUF99Y1ZubGc3dH1sWkZtP3lmP0s7VShYQFchc1czeEJmYU1zSXhTYnx7cHsqKl49''@;'; put 'put ''MS8uWlBROTluWXRpVnJQMDB3M28haixjdDJjXzVPfTVpOjJ5b0dHOFspeiJ4ayNMdDt8InM8PUwpYUlAPkxnMT8udjFUfG5CV2lWNiQmPyo4aVFYdltVWnxqXjQ0YHEuT3pfV2dZdnhFQEw1fEpfOTk9QX57PmxDNEIxPnRZdlEyPF54d3JeLEVqLmtaMUNxcl1xV0MwSV9majZwfk9+N0xgLiFD''@;'; put 'put ''ODJSZHtHPiQ5ZDxfUks/OGZzKTErVUg9WUFwfX5oJiR6IWFUOUxCQkxBczFrKzZnYjBAJjQzS3k2flhnSiRYY0NnOm5OLihNOyUjT3xEKENjUl5OSjpdYE1YRm5WPCN+KEJOU0kuaFBHYktdVm89VzAyanhwQ3dFNl80NlduOms+Sls7M0E8Zl9peWAoQkNmaV9sRVZASy56Ni8uMG5oeGQ+akt+''@;'; put 'put ''WlhHfEpEYihHX0E4Tk9PQnBtM0dCI1hUXShCOnxkXnA1NkckNHFbWV0uO28ldltPUGR8OEpgIkFTYEtkU15RYzojZlpWM05jSGhPW001UCIpYiRHR3JCL2g1bnwuSzwrem1WTmZfRnRpd3xXJSRuVCM6P3gweDJmJmJrIXd5NHBYYDEscC44fldLbTMxYjk+YEFJV1EodGZRYz80I100I3siKklX''@;'; put 'put ''NER7bFBwYF5TeVFKbSlgdGEwRFNqKlBjPkhZcFAvcndFQEtCK21SRGMyKHUzQ3ojM0BselBsKSVsWFVyOVF6cEY6PEVfX2peYnVSeXdVa0hdbU1vIiZ7RlNSTiNqa1g3LlBSQlNCZi40PkhCSEouWjxId0ojSjh+VXciJi9zcSUueUs3IyxNYV5aRlt8KVFlLj53SEJZKU8mcUJqI20qQ0VoZHsj''@;'; put 'put ''MHRAbjc8ZEMqV1BOL09uKlp8WyxdP1B4KGtSUX5nZzgrTiFwWGdmPWh4RT1UT3shK20jO3p9UXwsKC4xS1EvdjcyJCZRbjVmKFdbcmA3WSw2Xl5HW1Q7YigxMlA+fGRja0M4Nnd5Nyk9IyhEJmRjQEVMa0A/MVFpW20kVz5Hc1p4M1Z+RmZiZkoqJldUUncmTWF4UCVnTWhGZURzYn4sUWdjRj41''@;'; put 'put ''TkNyfG9lbHlhO1lWd0JfWFNdcl5jREhQU25OWSUmaD8yTGBsN3F1cHlyI05reDA4NCZaOHc9ITshJUJGIStKJGIxaCV8Okw0Qk4wKj91L1h5WU9vImIvXyshXVdxWlNBLmQrYjJ+LzsqYSY6Oz9LaWBMYHQwMzU4fGJrLE5naEMqc045RlVrP1kpXiNvLnlzVlAqdW89YlVNV3hFP3RKbkJrdDJz''@;'; put 'put ''RjV3WU90aCNOOHcySUxjNjRGbXB3XXpOaFBne2V9JDZZcnt1OkF+IS9QfnR7Xn1xM0pxQH12bDFyL0ZXVjxeIUFPTVJGYkFNMDU+Sj1We0hmdV9RQ1o9MiVUS1d4al92flU6QTt6TFBvJiIxWyE/fWYuKTxGfEFPRnF2d35YbjZZY3NNXixHfkpebihWOltsS0IxcFE9cFJCNGVkQ2A2YFFvaEk9''@;'; put 'put ''Qk5bUVtQMDIuJVFJNkpNPFdvdkNvPSMvfW1hc2FNQDpqTDRKLnUvaitdPio5cE1NWGJnLiN+dHh1YCRSQVhkfFYvRVdCVkcsVkxEOSV6V0V9SExjPVRxLm53KDlYdV80YSJDMSIhdDJ+UC9AQDNbLG0vSWMjd01vcygjOyksKFRlczNQL0M5dCEsaj47KyosdiJvdnJHSnBoWFUuTHdZTF9mfEI0''@;'; put 'put ''N3VmLFhSKmxIPHBUZ3hZe31RPUx4Zil8VSNPKCVsL21NTGRbZyRNISlndmc8ayMufnlfR34yLnRadWg1YmFNUHFWTyM6dmZEen03JkdDOEUlPHV0eDB1QCQ2Qj5YWi82UHdXPm9LNGRgfj5pO0o7e2JBQkd0d3RzVV5GWVVnVWEre1F5fVczfER3IWBXUnY5fiNOe09LKVUuZVMlTjkpbj9Ac1VE''@;'; put 'put ''fWUiR1hCQDdeTltiQ2BFe296TU1mSzk6Kj11biN7a0hETlAlMXxrbSY0R3UoTEh3fTJGc0FhXVREbVhWfldxaF9DIlFmOn0jPmIzYk1DX2g1S1d+bVNleWJrXSpDZFp8O3wpbzJdQ0UuLFA+c1MwKX19Jn5CXkdhKl8ybUE4NlNlV3YqWytCcWE3YDNVejNoJStbMWFELFBKK1B1KkdqMHx+S0xN''@;'; put 'put ''SmxpUT5CbXk0SzpSOUpyREt2Qy9zakVDMT4zak1qOT5JMWt1cDlpYEJ9cU9YImJ5fTVNLFlwbEo6e1k4djdkLHQzR0pRbS5MNC85TkJpOSVkZGpQI1hhdDMlcFpxY300bX5+XVtGKUxkKH1UL0QmdUZwIjNKSkBTaW9hLF8iMXp9OkMlb3F7Rnl8TzhDKFNvQ303YHtuO08jTGNiSSl3UGhTW2Bk''@;'; put 'put ''UFVob3RkSCF1OlFnNnY3L0dOW3ouJSUmQUg9USVkQ3dNLnk5bHleMiFHfSxzWUo7UGBPJCsjOEN1KCQydjhGSj95IitZUCguLyMmSngrWlJFfGBsWEsvZk90PnpST3cyRkVzc1g4NyxdJE4uJGxnXUh4MH1lW3VoZ0IjOlhAei5TLHVPTEl2ImlDeVM+VFVjaENdOl8pQUZTPz43KHN+eU5vZy9M''@;'; put 'put ''bDt8UVd6Wlp2KDFnan0kNiRhYjNpX3ppRn1KZmtqM101IiYpNE4oVHIuSiQ0aUQqMyRgdGp3UDhTfiJdN3I6b1pRN1k8cEU+Jkk9U0o7ZSpoNXB9cmRwNkpjJkt2OzE+M3ZKWyYwZC4oSC5XeXNsWE0hUUBqakczWnheSSVaSFl6e2U4PF5WJlkwOENTUlAqKF82LjlXe0VqLE59OldeS05UJHpP''@;'; put 'put ''Z0NleGNuZm9HNls2TCl5fGNSdXF0R1pYaVI4OXJnYj5PT0swcEozQEdSS3pjZSlJaUVSXT1ZL3tFUkZ5QUc0YGJZOmQrO0NqaCR6ekNQNDtBYSNLPipJRWwmLGFMOVNCSmQpc1dwUDFJUmxySVJGfS89dyM9bUcuWTJseDdAfiE1NVM7UzhBUWZlMj9gNkZ0bmVnIVNVW2dzPzwzUTRkIXBPRns7''@;'; put 'put ''U31yUndYb1tFQTFLaWMhN2JxNmtrV2tAKV9EWyF5MGElKG1Jc1s1bH0wO0ZwfUtVblVeQHdoam1AWVhFMnYoJG5AeGM2PygxbCowc1MiMF1yJCZRXkhKSV5AUVNdOVtSdk5HVXk/NT1MPjNnJGckNV50RT1XQ3NIL3ZfRTIvUiokJjAsbjN4OH5CWzBBLy9oKldJfVcpSnZbW2sqY0hUfi8xIyxX''@;'; put 'put ''Smhjdj9uV3BaKU9FMUB3NnJCKDtVXURlfnlIYkB0QVYlQzAvYkhAYWxjUmYjNjpAI2xeYjgyOixbOzdGeXdUUVp+eEUse11CODVIeCIpZSRjdCQ2ISYwI0pdVyQ1dXFINzAmdndCPj5Ob3JEPURfJmNVciMmIWpSQUZSPXw2aE99cXVUZmlHMjN1LkdPPUdndnApQGRLTEBWQ2tpS2tFN2tsVVVv''@;'; put 'put ''SSV+dFs1TyNBdyxnMnRDMWNnYFBjU3Ypd3w6PjgiTWhzVmJZYlZpPD4mdldtUWZGOUlFaW9ecHN0QU5YejJuU2ksV2R6TTdid34rPTxQVllCO1BecFdFfGVEOHo0bXs1NFVqIzdMYkR+VkMkWTVfPlUkW042OmtCW35gUUUzQiZTaXImWXBLbTxxYmc2OWc9ZnImQHVBcyokfnFSMiNtcnZfVEtm''@;'; put 'put ''fkc3ejY9dGJ7WDN7O0tlZm10QDU1WVk+ekNAWSxKKSs8U0xCN3VbKD13XXBgRk8jeClXOjJpOHM8dV84KDg1K0tfaWxQSGdYSWN3IUAmeHFtbXY1MmA+PVMyQkA9TCZXJl0pNEQ0PHljJFp3bVR4TCYpZV50JHxee35oYm0zVDBgYVtqKm0xTFI7RWZ2WWQoY2xzP0JpakFJZiVAXmdadGhoMU8s''@;'; put 'put ''TG1VMCU4WzB9cUh2ZzxIfERhODB0Kyshbl41M1k/JHE3cG1ieC5qfCMmKGQqTl4mVVhiR2w1NHpIekplSmpkc1FYRTlbWkUuO1taOnNFRSh+VDByRWNLZjZAYTl1clpAaj0pN20/MVFvciNGVn5MN29wLiFCYV1uYntyOSN7TTQ6NTI7VV9ffWssfDxZJXxyTmpHZSJZUzxjRzQoKS90WWlBPUIk''@;'; put 'put ''djBARkFTNjhFNDAzTGFrUClQaD9kU1NJM1h6bkBZbkwkPlNlVWVjV0skbDdsN1pRejIlM2djKTJMI3RuWCl2KEdoLkQ+Vz9LYVQ9NnVmKnpWXUxmXUwoYXYsTlRsW1l4dWZ3I1dYdlFBWnNoKldhT3suI3N5T20hZVJ0U3dMVG9feX1qTHAmSUUoTTJpSitnV1FKJWBaXThWPSw4aVBXL1dBdV5U''@;'; put 'put ''TERddE4lLyY2b0U0NiIxRmlnfEUlUG80SlQzdy8rfiE/dnwwVUFXOStzZyN9T0I3Mmc9KHYvQUBXVGlCTnM3Wj07Z3hNaW4jN2YqUi91Iyt6e19FfVYyZVNZS0BmXUZ6Jn54Ukpyb0hTNkMwPjJNSCs0PTZYIkdgXyFCKE84dGI7Wio8JkUhKTB5NmBwQV1qSk1UPCQ/UGhPKHIldzQuWSRWQ2p2''@;'; put 'put ''P35+fmBTPEolQlRrSDl6MTE2ZXhmNldbOVM6PjorOXwjQTh6YiY7UTx5Q0NrR1EoYm1UU0pQejlhS0RXZSZQfnA5SGh0Vmw7Q3drLnlKTCRPKl5UQnRDJCsxTkt3SEBFNio7UF5MX14hWF9zJWVkUChzSlRGUWZuazpNOzhqMXB8ITgxbzdqYD8hOkB+W3grJTJOck04VD40NT0lRjtUP1ZAZUY+''@;'; put 'put ''TDpVcHFgdzx8Yj5qUX4vSEtmelBrIVZoSDRnV2ZBYTJVPihmJFJmc3IuU21EKWVAUGpNd1ZoPHRIXSptKHRnUy9iei99PWt8QnVlaiZOfSJ1U0tSTElHcVolTkJlYjxVLmxhPTwhbH00X290P0xwUyMmI2cjK2ZhNWMsSCpxT3Y1Iks8dSZCPkl+KF0iaWpXVGpNUHRFSC5yXn18RDIrYC8uel9W''@;'; put 'put ''N0taWWFAXT5KVjg6eUw4QjFfXixTby8oTks/R3NOOi8wIXVDRTJoVm9kTGs6KnYvfkcuZCpsTzRiYTQ2OSwzM1o/cTNMQ0JCMD9WWjVpKitMUmQwRit7M0VbZW1+PWI2UyhLaWgiJjBsIW8vKURbUiwwSzJ9MEdSYnZHc01TIkl7YXV1a1RBWV5VMEQqaWU5KiZOLjxlTVJ7NylTWy4hcj1NX15e''@;'; put 'put ''XSp5REtzY0NlIi5bcCV7UzdFayRYUmI5LkIiKiRAOkswWlYwRH5zVm9dIyJWLiNWJHtIW0VFRFVldFphS2UiZFdMdSNDQCF7T0F0c05jaDB6MCN8RGEvKihwSmkhZF1QcGZoZEkoRTopWVtLRVdpQ0toS1MyRlN8bFUrVEhjejRYTUNSSSp0QG9QSil9XXU7cUVPN0hNLiUwWEVdZms0LGNdZCFM''@;'; put 'put ''TH1Da3ksXU4/Pl90akM6alFwOTF2L3JdVFU3Tn4jQVB8P0VCcisrKiltbz9OXntsbS86dWcocVJpP09KJjE+UClIN1ZKOkZ5PCpYPU5xeWhzQFRFQGoyUjdWKTNwfXRyRn5UPW8zcUlXJVN4RSNHJE80WVQ4O3FRX207Nzl7K3lxMyRlQDNuMCV0RSRqJVdfPVpTfEssZm01I2h+dCVWd0hjYC43''@;'; put 'put ''Szphd1FIP3xnbl48I1slOVVhdjk8dDV1SzohRFplZH40WHpGI3lRPjtkRHJnKy4rcHx2Y209UnVpTVgmaHhobHBneCZhVnhbXyNrSEhEKTNlWU01QktyV0Z5ck5yUSghKXdmWklnNEljPkkpZiN9Sk5JMU4hMj5HKjNyflV0fmFoVmEyV2gmQVEyJGl1XmhqfTUuLCYrMDNxSU5LKjJpbC5ZYkZi''@;'; put 'put ''Jk17VSxgXkJtaHB4RXhYTzlaZT5Dcjd7c19WQVR0OHByQE49KG4+OVJfWiQsS1oxTysiQkM6YDtLW1k1S15CS3YwSk5UeE1jdjJgNHI/Y3ZrTGFQRVg8NzxLZHNHViMqPlglP046PTE2VzRTciRNSH18QnNQRFI0QXteaFMwekJHTV4/WEdzaE42SnMvSWUqXkJkMDJ3cVNiZ21WayZgV01hfTdU''@;'; put 'put ''WGh+PnkseTV6V089e1ZDPTVmcllnelFmfF9CTCk7M2hrPHZKbWxdVVtiOi9efFh9L2JZSSR5bTpbRVs6WkssdTN9RE14OkwwZFFsYDEmKEo3aUkkK0E3fUpNOVs8VW0hKjcoIUNsPzUsXXZee25NQCgkNERLcU9vZ09YYCljcE1wPGdiNmR6enU7Xzx6ISl1fCtUTmQkRW44LjUxM1Rnd2UoT29p''@;'; put 'put ''KTNqfF5zb3cySzQvWFFAd3BANUQjQDUob08wJVU2RkpFSEVFYH42fjYvfVF2eFk2VUREPF00bj01TzpARGZGSTs3ZVpOc0NEPnFVcjZaLjlUOFh9RFFzKyZLenk6TT4qeWlALmdwaDhKNC80QEQxVm08Qno1M0hacnV+SzxqUkokLmdTOGFSfkMwaDhpSjphIlhSXn1BdzAkbVdRPDpATzMvTGhW''@;'; put 'put ''SmVlX2hBfSpIJT83JXVIWFhQPzBvI3xYY0RidTRUVkx1QjQ0ZVo0MSNlNDJJM0lQRSlQK0Y4eGpPN0A7UnUzT28yWXYlMnVmZWFvZCwje3VnWExtNDtWYE5ReE4sR0BKYClaZG5bNUJQN1hHZkU7JE5kXyg6OW5XPmtISGZIJHFiT3t+eS9yW1A+JFhIPk5WTXV7bGh0XXJvUFciZWZjc218JVE1''@;'; put 'put ''STRPemo5aDhpM1RScGJoMTZPJE8sRS8wP2A4RE1eeTJ4dihvMypSezVKRj43ZSg5aCpTeCI7eH5McGBZLy9QUiJMWiglVlExW1tLLyM9dEleRWkzMGo/O01eUWBFSG8zSVhyPFptZXNHTldTfS8kdSJjTGBGKzc9ZSZDOn1ib2BrJHRJRHo1NXZ5aVlfWThjQntrfj1JKHY8JlFTM1JlL2Q0cHAo''@;'; put 'put ''NUxVX086Qzg0eU9bfCZ9PUUmZzlUMk1MN2NNdT12My8kQUNHSlN2LkBQQjVddjJqLjokWnFBOFNIWVBFWCY6WzBhcmgyaD4xSGxQdW5IOEBgWlB2ZTFHLFB7PlhJVkNyO1QjOkJsan5mUlkvI1M3MkJ0VHlbbTw7bDU/SzxHKT5PQVNsfCN7MmNxIyUxfWd1Rn5KflF8OCVRY1RKc14zdSssNTt4''@;'; put 'put ''aEBIU253RiFfUVNRSTpaQE1ZP3lUPkI6NGY/PjNuQCtIdHJVc05lKSNLOXowMmcvOiNAMGdfZnRdcF1MeD9jeFtZR297aVg+R18iMnUrQGxIbVg2LzRtKWlWd3w+aSVUWyJvWSMkIVNwSG5TRjlvJDlMKCx8JDJRfUNgI0dZWUFZZlhOSWBXaXkoJXRAOXNnZSFPWjkzKiZzdjpkTk95dE9ZLjpG''@;'; put 'put ''ekQpOGAzNHcqYUlzalNnZkwkQmlRcWdUU3VyVl90b102PV1uTFZyWmdWflluKVsjTm0jK1BrN0ptISNAan4oanJ3Pz97Q0hgRXY2a0dCakxzI0BNWyJtcXlSQz59USV8dU86NStBW2EvI1hiMnJfLiFNZWwlW2kjQmVGUHlxUmBIfi8qQG4+IXcmYnUvWylhXkosM29rS0lHQ2s3IWJDWiNAKjJk''@;'; put 'put ''K3NdY3o7LDhpZVZYXTtFOCorWntTKV91eDJbdjVDKjNfOT1pbjB9SDJ9aHk3YmZAJGVKbHddODw/PjJAQEFkTG5peXxeVyRDSnVfMU1gUnxvN1BKPShAW3g1enBYMlVfa0UseDhZSGBzfDlHaSZpW3hJeHlQYkpSb0h2VmpRSU4raEIxdTVDdWReUlVmQl07KCpHQ0M5LHlAR1l8PWc/czkpWX1M''@;'; put 'put ''cV1fN3s9XSxuL0QyUGhUIUg5XnEyd3k9NlAkYn5aLHlATilQcXEyTUksZj8ubFNafkddbCZtdl53blYqVDQlJnpvTS8/M0lZYjB1WjVTOWo1IVdfb3BadHc5e2wkdm0pPT5xWkczU3c9RnF5e0BiIVckeFB8ImM7aGM8UjdnZ0pWWThqZCFIcGg1Xns3c1lJd3R1Y312Rjdna1hsSXgwbFEjZmRI''@;'; put 'put ''NUcufXJ4cE9tWW9zVUA5UEs6YnJITiRnaClyayEqOjI7YUtbemd3a0xVKFdLfSpBa20+TVM+ODYhK2hidkAjNSlKM3w3TUh6fiw2U0NaaD0kOlo3ekZWJURrYT1kZEYlYnxHNEt3LmRVTG95TF5tWHlMfkdwc1REX3MpL0d1e1Q1XU9TYlVzY1c1JDNVKHN2KmJRb1U0MGokNkV6KCRSbS5YTVtg''@;'; put 'put ''XilDVilocnhDTmFOVCh0RWVwdU03Il57RWFyeHtFZiZiIzk4SylmNT9gdTFNY0EvQ0g3PiM1VXdURyMve3lZRlhPUFl3UHZ2IWVbfXYqc2NqX2l9fXpfPitaVkQ6IzVSQGg3JUM3IyUpMHA7KTw+SDNiJlBFOSVFJVRMPWJZQ3ZqWmE2MWlfcGkydHtSWjZsNXdNSlFJTnYke0dDdltAXnwvWCVy''@;'; put 'put ''KFNvQztySUhYTiZbek8uXz15OVFIUigmXlA2QT9QMTw2LlIyS25RfHUuRiMkMG1jQHNpRktuOzdfLjp1cy93UWo3b3FkJGNZIkxJai4hSSsjZkNVfjA9aVBSbXBhJnJrbE9BQ1ROcnwhTnF7P21LaiVuR255THZvZClRMWkqT0gwa3lzJnBmVSRlcyM6NUcpfnFqUGw4RTVDeHt4b25GYzlQeFJR''@;'; put 'put ''cSJNSDVGMn1yXyNjbDhSazIqLmJZKyNTfVMzLil7NXBsLj08d1l8PjZ0RWFbT1pdMjBeLHMyZjMyfGYvd3d2NG9pPjp2fUYjKWopNiNlXSg6X0g3WFFIfiw6NldXcVZEYU9fcSN9ZnQqay5DPVI5VUt+PkVZOnE6TEl1QU96Yl11Nixfc0ZbcntYZWFhKXVqfDUlLCV4fGVrXWpLPUU1OXZ7T1BW''@;'; put 'put ''IUt8dD4pW01LK15OdUVVZj9JSTIkTitBPEJvT0dTcDFnIW43TEVYXXFFY2NoWEtGW3hbN0JpSCwuLGNYI1RPamUmTmtbU2xNPCsvOVBuM0p7aUk6PFhwd2NUaGlNTSJEMkosUWw1bS9CPT10KWV2PT9AL101Wm4kPCEyXz1dSCk7ZmA1Yz04Z3RoNClwRzBbLDdjS3UpdCkvTUBGOkkkMX14cip3''@;'; put 'put ''QC9GIlU0V2YvLzsiNFZlUEMlIU9lSDJEfXg2amVEZHBOfipmSnpwTzV4ZVNhbGtRKTpsTlJHWVBGLEJtcWlXKiEuTjp6fklsKlpuXVtlcVAoTFUsZTRWRzo3dzxER1Q0RHcwRlRHUzRpXjVwVStQbk80aVUhY2gpPzBsWl5zWlhxXTtZLFcvdEp0XT1Ra0JXPixoZG1JUVouIjJgR0BlU017VkIq''@;'; put 'put ''W2YvMFhIamAofi9rUD07YG84b0FhbWlFezBqTndxb1FMTiVyL3o0eHJZcTcvTn04bzZbS3NxJXNgKVMxc3lLOGAjfkpSYWopW1laRlo5QkMoclZkckMjYCZnKjVLKClQaDtSV09VVmEkeENVS1Akdz1GIWQlSS5hISZgSSI6YT4hcDpeTD9sWj5tVzYpVjtzUjd2Jix5Q2R9XzRLYVlMYEVFflJ9''@;'; put 'put ''NVd7Q2BdQ25CcXVGRzRNbTw4UXV7K3hTZ3RKRkNCZzpCYE1Eb0o/QXZ+bDohWz4seGVufGZtZm1ZZXB0R0YvdUJiS14mTzIiImpbPlpedDciK30mQncxe0ZbPD8jUSU7X2FDNTFjW2pbSyJqeC9hYW9IMFliU3d8YWlDdXlUdUozQ3V7KD98P1kyLj9mX259OENbX1BwP2NsX1BCTjZxQnd1MjAk''@;'; put 'put ''XTh7JCgwbVFzPnhNZDEmTWQjSFFbUi8qSSFRKDNmRkloeklaRTxoIUU9IVIiR1dLZH0/QGJuKU95VzNSWFR3NjQvKGBSJmpWMDkkUyZnOzA2Rl0zUyk4SF5kQChxcCR3KFYzd09he141Zi8yPWkwaX1mSzdlPWAoNil2bUpYUG86VjxtYnklTCZRJUkjVVtWek82MzwwMmt0RTU4bkg9bD96LF8z''@;'; put 'put ''KVBLaHFEQEdqdEhaenhYXm55dSUkSmZ8Wyk7WD46Iy9qcyZkLnl3MUZGbF1GNHM1Q2tQK18iKmdFJElmYTxAZzI4VmxMN1ZnSl9eOjRtUFBIaWt4VF1QdSZRI01mWXkrLilwNHZffjdKMC9qVkYrelgyTm1SazI4d3YoRFAjWzsqUmgoI1ZSUiRHW2pfWzw8bD5CWlsuMjFVWj1sSiZScnJRZ1o+''@;'; put 'put ''e0g9X05gdipIUnQ1UDc+MkIuOl9xdW5kfmdMUT1UZGdeQjEsVTF4YHFjaVkkZkl1dVU8bSZbckBlKDksSlJ5d1V5PndAXldiOTM/OHxJZkxXeEZBeHtmNX0ie1ZnY2tucnYrKjdrcis5YUdmfH56fiZ7IyhpOEQ4ajFsUWNhWHVCdGZSRlJoalpYUyxzZFk4W0kpXjhOWntXXzdOUDNseV5KMU5j''@;'; put 'put ''TnN6U1tPNjskeFEhbEJFc1JyYFZvZUhRQ20kTVteUDRFZTxlVzd3Ty45W3MycnF9SClAWUNhQz4pQXJpTHhsI29IIlRCZlJnWUg4fU5VNXJ9YlkqUGxwM1Vxa2NMeTFJfUM8aVIjOHBITm1ITk9LZlJYcyZmaiEraTAibjckfjx5IW5wYWd4RnRMTlg4PXJBZF1pcytxWXdsTUJiMTlKNj1mbWAm''@;'; put 'put ''MywhRDB7RTNfZyRhT118RWpyQ1BUUFVsO0E2KmNkfmRxZjRAQHs5VGI3ZVsjN1hURyljQDw2bEhrTTYuaTVZUExXYmE7XShVYnReNnBlXiokUH12dSM5PixGbDRfKUxKZ21ZPEVAbng9Xmt3eSt2Wkg6NkZYent+XVN0b2IzRzY6P14odWNoTEN8KW8mPD04WklXbHYuVlJnZT1hYSRXajNZNE1b''@;'; put 'put ''eHZOWSJvVVlzcyRxVHE3TWFHR0RoLG5kOkJFPUF7dD09OG52ezlEKmJmZkBYbVI9JCNdQGlHXytKblIqd3ApQkx7WUdKX1lJWChLT1pLNWp2SGg8REFKbjJXJj1aW0gpLmwuNkdZNW1hbSk6ezQxdFEvJkRuZWh7S2ZOdkpLOEdiMG9iQmBIVjdgP1Q4aH4iIiJlcngmM25sJCwvSm1zbWBrPnw+''@;'; put 'put ''aSkhU117RDZpUj5fem8wXShXRE14KVg/ZyRGSCRvZFV7fWBeNldbKmRESj1ZLlc6U2BbRzJ1KEMpUkhYY0VRNTFFNXtmZVkvPjAmfkZKe18hd3FlIls/aE8hSCZPZlZdLEMrOjslQSFNNkRqKGlBR1kmfVIoeTMlPDhGaEIrdXVHcGE5c2osdm9PMXxhdDpZSjo2VnFaKjNlRjZfeUgvcyovNXJ7''@;'; put 'put ''dkZnPHRYRzZdezVsVEM+T1JYWlRxMSxtaUJ7MS5lLGlLYXspL2oydlteYWhxZ10+alM5byVbMDRSPSFTIThEbXk9Nkh0OFhkNl5rfjRnUHR8ME8oKEZ4OCJMP2lpRHpWQzoxKDZ5RG8uemszRSlzfCJxWGZCSGlROjgmdU55SHQvNTUxQl8+KXVgMEs2fExIXTZnLiMyI0c3V1JOPDJRQ2hjK3Yq''@;'; put 'put ''WntaS0gvMSQ0XmNNK2NvI3gkZlYlSVJqajo5JDIvc0NEWjRaTGB0dkBvTWAsWV0wJG8pTnB7K3Q7Xy5+dzw+ZVBfe2kkPm1POkRqcHVVciNzLmxtSUhPcj9GIkgjVU5xeCszL04iK1k9ZS8oYm9AVDxDRFtqY18idl1BR0xFNXhAU3NrXkZ+Q1pva1UsdX1xdEtQd15QSyZ0YyowdClyJlEvWnZq''@;'; put 'put ''UkRGRzNve045fSRJMVtsLEo2aFs9PDMzd25KQkgwJHFbJHlFJVk3V0BhNDBLXVUqRDJFNTc+Z1ljPUBBc1JrRUxMOXJlcXI/bX48IVc6UlhlOiU1VUBaPS4hXkAhNighKyxxLEw0LGZdd0tSa1hKVlAjVyl1IVJ9fTFjZHkhMGMmX0U0OmFYXzBVWkBoWjQ9Q29zOWBedVBKd2U7QC9mbEFYJWUm''@;'; put 'put ''cnh6YW9hZ01ZK1dgSXRrKEBDSXh0LGVvSGhmTHxHaSZfWD4qdlY8VUJGWl1aQ2x6YDp5R25EJmZEZiFGNm5rNjVkcm1dSFFpRCs5W2d1LkglLH1mRkxTMzpgPCxsJm9jcVU7SyYsWkxQYm86RjFbbVBfYEA4RH5Nd3lYZWN9JFE6MkUhOFM6OjJMJnRAP1ssQ2FgSzpfOHByeXdmW0tQYnNnRHZW''@;'; put 'put ''NXdtbW9dNzI3L2Z5Qlt+RTpGd2tTZkRQR0MvUG1zc05sQ2dOZGZjJF1gM2lMa3Mraz9jO3FPZkI1KGN6MC4kPX46XVdTYD4xSi46ImgrSGp4fXJiRTdRSWImMjhyUShMITdHRV1adCltKWVadipXNVtEKyZsKXM2PW8vdWxaNSIkVmgsK1ptRFBpKkFAalgvUXcja2VDWyZmIllvNzVzUEJSUGxk''@;'; put 'put ''KkdTY0kyPX5eUWBINmpGNFVOd2t8al8zZWJPQzlsRihgPmZ0TTF4IjVHa2M6JllPdHskfil+KD8rTThtTm9zNGYsOl9FQWRMRntqfFIjNm5eSDQuIyM6ISlYaDBkSnlETCw8TU86JDlZKj9NU3F+cGpgSFtjejt5JmhWb1siXkQzNFpmPVhsbzBpI0xxXn1RXnJOWDQ7JD1xVFlZXSxIUmpOXkRt''@;'; put 'put ''NX5oSUdtP11teiR+LzZrUlJDckpaTkc9cCowWihfQHpVUj1NN2tpcTpaR01zM1k/OjB4aT9hWnB0PU9OOTQkbUdWaSI/SnoqbStfNVA0ZHsmJkV8NWBeYVovRTJQfHBtT3BLVnR6RStgSiR1eGpUQjxUNjh5YHskKlMqSXdGJXtqZHRVUF0rK3ZTMTlvckN5fTpZM3Z1MGUqYmxRe3g0VWVIQklS''@;'; put 'put ''cT9hYTtvaCNST3MsdGlHQ048WTImQ3g5NCFoLGFOUFZJYjVHMS9vKTY+VlB6JU5jP0w4QkViXnQ6RzsoJkQsek5maTkuVDNqeGxMPmZZTzwsZmwlZlMwfjVZUXo9YEtRZzdOOUpgel9MbiFwP0NKTWJJdm0uVUh5eHd7fnVaO3Q7QGdqMDwifE1fezJ6L0JWVGFsWzFEZml7bU19LE8ufksvciJS''@;'; put 'put ''RFA+MXFEdnxCY1FKbWE3PTBofkpEUGZuVjNVc2dGLlFNfVIpPEwuOkpSW3QlQUB+JnkkK3skcj1NRy4hLkVQSVRPVlNLXl98eTBVJTZrSFJKWzphOEpjcj5PVWhiZyRUSHF4cUBoLi8qOzpHJUU7W1p5P1s5LDtXV1BoS0dxenU+Z0pwa110eFpOVHJXW35LWU5bfD9iPUg1YFk6X3FBU0MxR00w''@;'; put 'put ''S1Q1U3hSJjpkOWI5OWdfdWUlXjtELkguLkFjOnRXIUVhVSo4VG9jKTs1Z1FHUmhOOSNpNC5MWyxfXm0uM19Da1ouKlcyX2F1NFhyN2NPJmY1SnpeMTpKXSo/YHxtbCssLlgxemkkUjsxVyRGN102SmB7e21kN256clBzNGVLNWR7ZUNMeXxII31Ka15Ca1tPc2czUl5uYTIiKmNqMUpoQ3E9Pjxt''@;'; put 'put ''VF9PYFR2e0RJXU92dGh0TV1sPH1XP1BLJSxCPVtXeGgqQGVbd0xEaExVV15wTWomel4+b2UxeSk1Wk07XnxtOVhDYUB4OG43U2gqRm4maWZmeGZOaj4mMEY3L3BoRzBrXjh6SDtdQDNLbnM3P0JEVltZVl9kOWV3IkhFXS9zfiRUTillKFY6cThsTXgjcSY8UH4uX2kxRj9pKjQlSEhtLlR9Mkwj''@;'; put 'put ''ak1EelBgS1E/SWdnUUswWDNlcnRHblR2S0tyMkxqPlRTa35CcjBOJH1USGpCUSFeUi85LilEYVBsI0l6b1tVbzM+QTI1RnhrNSYrRiNJeyhoZz9JPkxWYzUoKjc+SCVLUSVfflp7KlVTSUIwZHNAVkUyW2UsWE8zVWdRUEJUOE1BeHA7O14qKUQvJG9bUWxtSHB6fnphNUcsK1ZPIV1FbTMrVSNO''@;'; put 'put ''Rm5fPE1hWEVvfW9AfmZ8Y1Ymd3s7ekIpSStZM2JGLEg2T2owYl41QGdiWjYrSEFRKFMkMEkhTzlOXStGRURiPD5wR1tfSHQ3endCcn42Y3JXeW4vY0hqQUUjRTNGVmp7XWZTKzkrbXB0PWB7N2QpRjEjWXlbTVA3ckVUOV5rLkclT3dpemtgP2N3MGhXSlBDcnVNOXpiTnxaZVAoPCljXSQyZllt''@;'; put 'put ''S2g9NkpIWG1hRTJGbU5HNTl6ZHpicUluJkZ9cC5vQj8ufnJVaSlaZD8xNnRnZ05JbnIqYz9yWTQ2e1UlUmdjJiVwIyw2UEB+QkckU2dfckIhUU4md1VvbXA9NTRNM21BRlE9e0o1Q0Z7cFUyLypFfHx3bGZxaF09R0hkW3FZVn50UF9Zd00sYjYwXUQ5T0kqdXo7KnxVJDRtUylEKyVYai5nLFl9''@;'; put 'put ''NG87dDU8cU4zL2NLeVRid1MwVjRJRU03Uih1K3hyMXJfKlY9cFBPPlZZdE0vPTUpLF45MmAzamk6PnlvLiRJY21vQTQjNzIoOWk+IT1eKHY8cUUvN2JVe11UWF94XVc4Vi9ifGomXjh6VSx8XjFpIT0+WGpIRiMkb3w/YW1JO2gjKGdAZUlvV3srcmpAU3hYLEBZPEFbPEN0Jm5yS35nI3VMJGV7''@;'; put 'put ''VztAJWsmPCV9anJpdy51KSpoQyp4dz9MfTxEcWtNPV5CQDE9UUV0I3Q0VVpmdHo+e0FsfDg1VypITyUhY2AsW3NrPVZBVG9bPmopXykvP2thPz8wYytUUyxbYm9tbSMua189PTQkfWYqeksqdGZEcS8lVlN2MV5LfUM1KipNfVFad0QsWGE0KVBaVzhTQ2hAXnx9X0NVVkJRa2IldnFqekpwOHF0''@;'; put 'put ''VV9oUFtmbC9HUGNJTG5kdVp4cHNWVU4xY3Q2PDBmdjBVcUFRYU5FZnZ1USgzJHRpd0hocE1KO2M/IndSR2JEej9uRD97cEVUd3ZDOypgJE5zcnxMZHlHOmwwVnZbSS5zcCFqU0QxaEp3NXBYcGd4KGxzc2JwSTRsVEx0WkBJcnZKMS5USkdRJkNmbXdsRnEodElKWlFXbS5LIik5PTlQVz9kRlsq''@;'; put 'put ''alFpP3c1SSUkP0hkc3QrI3N9SylVRjtpfT1jTStCY05uVCU3P1F1bGA1fm0hYDFQJF5MQE43NyFOImFFbD5nRkRfPlAyakx9JD1wQ2JmOjIkaVJnXUZHKEVdaWE+XTB0bDR2TXlPYStgaGpjVEJrYUM9fEl8dGNhWGlZeVtTMHMjMj86RSNbaGYmPCxCZj5wbmQlXj5rWCF5PEA7KjgpZ2JfZFFK''@;'; put 'put ''Ti9BfWxbfFdtIlQ+cGgmQl88c2EsUktOdT9gN25WKzs3Kzo0WD0xWClOTSJlfk5DTTcyYndfbCUuN2JDInFWKmx3KGN0X0d5UWxmSDUwSFU8fVdmM3dGK1BYVyIiazdDKUIpXzU3JiEuait+SFMhSDBXUzlkQkolNygxaHx9W3ZKP2t5TCh5SEUmUmk+Pj4+ZWVsOCUrRChfZFRYVk1iZkREcVk4''@;'; put 'put ''dk4qUztQcC5zdEg1ezJAMnBWUFtiPiwlKE9+aldJdkVCLzQzaSNpJCI4YDBnR09eWER5WHAqcm1qQG1XeGpmPmdJa3NgQWtUQ30qdjZXVWJMaUZicnsqWVN2TyZ0PGBmPmt2XiFOIzd4OCZhd0EqbF5kcUNMVldPcGU3YUM5MHVmKi5ocDMsW3l4dXFxdy9EKlFqYSpSbnlrZHAhWGNxVEZmVWln''@;'; put 'put ''endNaHxTVHs8ZjI7PkhYVEgiQSpAallHQzg4OnQ4NlFXJTdaZzlZWVtEeUo3YiFaMWA+Z1ptQTFiTURhNCoke1tNd3FsQDU6b3pUOV0wKCRgMWpXbU1LKkI4fDBAT09Qdl99fnFHci5RLkwjJFZNSE9MZHY8cEIxUnY3IUBYeiIwfWw1dGtLO3FSdnptU2RUUTUlJVFrPjMrV3owUnh0XWo/Nip7''@;'; put 'put ''VUhzPSwqWFBHbUlTTlJJKzB2OXksOz91UF57Y1t6dGRZQndCPzBsZT1RTjV8bndRaXlJL007USNoWj1razY7e1B0WEJLa1AodEspSEl8NSNFO29HTiMxY0N8VGZ2O0N3c2l3bF4mbDk6ZzVnJlc9KnNENkdbO1ZPOzxhMSJFYXxkWGIsZ3I2N0YhKnM7UD53S1VsRHNhVDxQbGdfTFpmZVZdYSVQ''@;'; put 'put ''T212Y1tYdCtLfkl2IkQ9UE5rbDV2W1prWShIKCV7UD5rMz47SGQ4LCZJYlFkX2FaTlArZWc9TyQoRyskK0NEJUtvWGZaKW9SUSsseSpaRyxGMy9KNXooR2tBfmBoRz5eVU41aEIuViZddkRBdEVqYW5YYnlDQT04S1RZa2BkfmA1VWs3S2htMVF3NW9fVW86aSI4VmpLaEIqXnxWYTldYz4hQk9p''@;'; put 'put ''SWYzeHxZWiJGaSRPeXY4dlRPJGoxfHd8OiFWKFZbciVfYT80eCs4Yn5pPXFtK1YlZF4kJFswJVBTdk42ayMvTTRTKDhOdm8qVjR9KGFpZU41eG1EUFJFXyMrIVNSUXZVQ2M7ejFCNXlLajBxL3IwYWFJXUt5Z0l0MFsxcCtWalcrWExediwyVENOODF+cDpDT3A6KyUqX0l1OmFKOTRhJntqYVEr''@;'; put 'put ''fChGeiNHaDhYSG9tJXhEfFNmcnNDLnprUTt0VDJWQH5eNV0lUXE0OFFwXSJ2K2YzdUxoWn02S2pFM1N4WDFkeWBEaWkvWU5pbCRwYT50clkmPlk0M3QqTSpqWm81PFpySWt7MilRR31scHxwQnB2TVE3JH4oe2AjWVJiU2JFOkB+UXZwYFZWSld7W1JFdDVJa09iLCw7Yms+RyViQzZwYX5gOShu''@;'; put 'put ''QW1TWVNgRnZtMj5PMHpnWi48SltyYmhMeEJvOlk0QSw8XUljMzs+MFY5TlhUNypWUGt+XWMpPyF0WVlnYm8sN1JdbG9tOERyWXBGMG5STy85U0lfUmRzK1Uzdl1jNHYpKHpuKTVraV1fPnE1Ulomfnc/Nj5VSn1oaypGMDh7eWQlTkhkN3QwX21rWlBfKDxbbyZ7d1ZyZnkqZyk3QFZ8PFtwdS8p''@;'; put 'put ''LmAmLHFhSTxUeDBdKStUY1U+LjBNeCtbfVVYUWxxeS9EZCx5PUJhXXpGOWp7S2IyWUJdSXZdM3pMWDtOelRGY2t8X2VRczlkSkQzL2pXUV8ldU86JlpXbUl4cC8wUl9XYVFvIUJbZFRqLkVWZjZ9Xj8hMFtPPCpCN1E6N3ZpOHtKZ3Z8MCF2QWFHIXNNP3xucE5IcjUrKGJLTHR8Y1tTYks/cEFY''@;'; put 'put ''JSRUPHI4QUguczc/TiFAKGwkSVZFVmErI1pURX0mJCZQK2JtVD0jPDwjNEtiJE4vVj4yPWUkXmYkUGR6Zy5kZk9uKDdrRyZiJT58bWdPeF80UVt1UTJsXkpOIiluU2JkeD9nJn45YUZLb3pKT2ZdVyw/JUopITpxLzhkP2tKdntLWTNsdWMhImsze0pDfFcpcnd5S3AsWnZoem09QD1EfUZGckBt''@;'; put 'put ''ZURuQlZDIjhoeEQwXnxTfT59dUdFaWNxb2E6Pm9JUipGKm88R05EcFNmfEh2MXdDYy48XTVCK0NqRFsxPTwsbDJfQX5NQEprYS9kc3lHO2hQMTNkWz8lUyNjYGJ4bVIzdnduZW1Nc1tjNXtXR1IhbmZRJGw7PkdlWTtzIXsrT2Y1OnAsQSM4JkwjdTEvKXMmcjw0VVN3dVR6RVR8XyhgQ1JaJH5T''@;'; put 'put ''VVhyLz1SRFFhYUY0QVU7R2h8LjAvQltddTgrZiZmLjhKSjZ9U15kalMqSFM2PjhpRldpVmlZSkVBZVkiUn5DKjltKkA6YmVJekpjREtFXmtXa0FhcllieUVzcFFDeUg3cDI/dHhqNi8/JiJaRl14YXFvQWksWjVhYzJUSFlxTjFbSGNsKnAsJntEaSRII0gwMWMkUl07KGVmLHIsanNiPzVqbGpN''@;'; put 'put ''JkBfPV8oWEwoWHVocEt1RERacUdocUltbmo+Pns7PDFOfGA0cXI/UD5IRXQzJiQheFVjY1s6L0c5KCQhVSlvfFlUTSl8ZSVMQXtZbFc4NipuVHoyZXZMKE9NUCo+U3xLT21HV25oZysxYXtHcWVPUiZkWlMpKGBre3ohXSNhIylCW2cxMzpgdkxDPD0vMWVbUGhmdXFqYnUkLiEoZkBoTkMoUUZN''@;'; put 'put ''VnxJaj82XiNDJU59RTowL3czYG98Lz5eYWZ0Y351QXxiJmNHUyQvWmd7cTtsdVgpQlloeypUKmFbbHE+b2UhQjAjZXkxQmNuOTBSPGUmckdmNmZENSRTamF4Z20mXX1NSVdocWg9RGMsfVh7PCo+LzhLMDppOC5lUHR0O3hfQzRCIyJ5IVRjcXlpfWtAMipxcDYvaFVmaT1JYzs3L2FtQllKWEs2''@;'; put 'put ''Jiw9ZVhecjRFL2tdZHlOQSM8ZXpSdFBYJVVyaUMlKzltQCJfd3haQVJNd0lWNkdNVyZ5QSJdKEpGUVNCKnlufTBSLEpYfm1mMCVdeHsweSJzP01icjpeTlFINnthdk9kPT5wTDxsdXVEKyo0S0U3c3FpdTdDIjFXK3VIJkBCdHVIOkBMJXVnO0o8JTBtfnZ0MyJqYHl0PTYlem1vKzo5Z1gvK0ku''@;'; put 'put ''S0hUfG5halp+eTtRTGs/ISt1Kk4yYHgwcUI3OUJXVEBiWHlELDd5K2ckKGpxOFVPNHcpPHJYSS4vWi9tdG8kTHo9L1E1MnRGZHtTWGtLQEt1cW59XUZKJTdvWig6RVE7UHsjRFhDI29hLCkiNnddcC5de1UxRU0sRGosbCJbaXo0T35bIXVecncycW1Yaml2ISs5ZylmdlZEdE1aQy98bHV+SGcj''@;'; put 'put ''dnU8ZCowYXpFclFWZXNYQzZHZENlMzRbXi5FZjI/OH12Ki5adl0ldTp4bUtLfDYlJFpjU281Mj4ue2d1JGxAU2dKZixLeG1gL1MlTiRDcCh2IzUmUz1jdDEkWEslNVVlKil2IU1DZlt3P2REXyldIkZKb2A9R0F4ZStjJDJIOT16PFZGMkFAalhwPlJrU0FjMltMLkRKVWBQMm52ajAyL0F1NlY3''@;'; put 'put ''NSUzVmVvYHlQZnpbantrflc+IkxEOzU0T3VvRUEpdFB+dEtoNkNdKF1xMGlkUGtEZjg1NEtTXkBDfU0rKXY2aTdeU04kYHBkUytxY1RIISopPVt0YjdleTgyQEgpXSJWXkRHbkUlQHVgclI4YnBhPXFgJGVTPDQ5WVB6PWEkbngoa2p+TTY3XnhkJD5bdC5rX2MqfFt0eStyRnd2ZEdGMEpSeGRY''@;'; put 'put ''QnAlXSFvK0FNS0VUMjBgRndJTSwlalgqNjRqaXREWmJlcilzUXokbCszdWdTfk8lTWIwSHs3VXJMWlQ/RmNrWUh+N2JjJExiVyoiSlF9RkY4Vy8sd31idlE1SDJReGtEZmhjOGcqdk9lRDZ9Zjg3V1E5MXdPNiFkcj4jOmRMfTc0fjdzNFdpLlhWNSRZeHRhYWFLS0decFQvbmRLfGhoNl5lOE1M''@;'; put 'put ''UmhvOW47PF9RWEsoWmVuKH5XRCZBaDBKS1lscVRfLCZzW0tZYTcyLzx+VHpPQUJzKWNJLk9LUy9bLnc+L3l4UWV9cC5lJVQvRkpYLG9CazJNUXZqRmwuLHFWZXQxIzdwJDRrZHVreG9xYVBLMFN4cGtwd1A6TWl7N3UkZUpvNztIX1NCMyE+VVFGNyZoIXZ6RVVQL0tzSF47d2JlbkxJTWs3dUwi''@;'; put 'put ''QWM5P1A5T2ZHMjwiRkkyZE1rMUBYeD5bTCFvY0RHdzpzN0J7Qlh+Kn5PL1tZJld4aWhFdkROUEkhYU1YYipmWHthbTB3KXk3OSx4cHRqREp+RF0hM0ZZRllLN08qJlZLaWlvMCFjbT1EPGBtazo5WyxaXzUmLHM5aCo1ZVRKUyJuPnVPXkFxMDVRMDVzQUtWPywmZkYuVmZSSldCLltMZW5TJUFx''@;'; put 'put ''Lilya3Q4cCMjKGdIUi9RWlV4RlJVPllBbkoyMi58UyIkOTdwbyZUbHtWeihfPWVVNk01QHJebX1Rc0IwbTtbcmc5cHI4PDlePm9yLGdXe1BwQmYoXmYwXTloOFddZloqOTIrRzQ/SXJ1aTJbM1E7aUpiKjdCfEN6OWVwVVMrSVNuTnFASXI6KDArdV1NQzlKNSxtbj9QXjFSXzkoU31MbHFIcHtB''@;'; put 'put ''R1dkWCt8dCFqOnNnNzozIW42a1kwXjVpPlcjbmZXaC8+YTI5eHxQeiNQUSt8VXFzR1Embn0zK2MrTEpEVyMyW1lbRnU8QWhjai8pNy8icjp3XXFXPn5mMF11QzlLN28/PWlbSihRSjdtSndCOFNZLHF9U1p4fUgrdUFLOitKJFo+IW9SMnJVVmokblFnW1RLK09veWldaT46Lj1YK2JqV1N7SX1G''@;'; put 'put ''VyZXUTRkVD1zVU0kUGVofFcmRVFnUzo3YkshRU4qNmF4ZW12dmpTSmN4NTZWN0xoazokWDk3QTU5enowVFFGS08zRXAoS00qTWd6NklDbntzKSljVU4peCQqP2lAdVNvcnwmYUo4dnZkYzwsQV9DX2FNbFU6Z3pRPHwiYTlnMiUocmgjVU9YajMjUE5lXXxufiR2SDc8XV9xMmA5MDg/b0daN21h''@;'; put 'put ''Uz16bDRnPyhyVWdkKztiJCtsSnFTPHdFKWl4MC94IS4sQylqcWBfe0thVDY8a3Z4VlFWU3ZTb0p7bEJoL3ZlUkJwRXUpRmEsK1QvYEkuaWFiUjdldnFNazZIaz15KHJAJllbfVIvTDNSWC45THFxKHJ1QGhCP1Y9P0FXfCF9amp3bSsjN1ttYFJvXXwsNDEySjF4bkBdK0sxbVs+R3BJL2REd1Z4''@;'; put 'put ''eFNiLkFNXj97bjtkZlt8X1dta21WUm9dPlN9Oi5FOSo3d0hXSXEkdF8sfjNCQDVsbG8he2BLTzRMQ2NlWXVMPDs4YyFSZSx7OFVdTyQoYzdZXXJGTCtUK3I+QVJ0fn5aQU8/X2lJKUBpZm9wYXgxRzZXakpfV29AfEBVam1pa1crV2EibXIvSU1KIlU2fEJURnR3NlUjNzhhajUkdjQ+Xm0ycV52''@;'; put 'put ''dDo0I3oycjBeXkooe2d5X0YjPUgwQl8iOWVzZTMhV2liYFJERXxfXVkwUCFeND5CX3J+cEU9al5IdF97MERkP20xYnwvTWJYTnc4dkhdalkoMFAhUShAcTsjMGcuRGYpT3hAP11iTlRVIk5INjhvYS5eSV9jcmk1dlg8R15IODAmZEhXU2F6Qzl4KWJQLjJMQ3QhRWdqKVNHNmZNeVQwInN2UWht''@;'; put 'put ''QU0+XjcraTpKN0J3PylzVzJWZE1fQ28leENNPzBgcHZuSGhoSi40W1tnRD9OcjBKTEQ8cHZacEdXSHxZcXV6QTZYW3ZMdTEiZngqJj07fmY6TiY4KXJ8LkdgMipqVy5gaXglUSpeYF11TFl1TTxpeVhNWCFCPnsqQTN7YltgPiVGaztmW3QyUyMrTj9OLHU9YTVoYkcmbCl3TGZvQiZUJUQlO2xt''@;'; put 'put ''MGFNW3J+PE4sRTtMakc2RkdxfCRJTT1kck5SNE5BOihee0ohMUZffjUmYEovYm8/IlJyKC9dM0N8PXsrVjROdjpZcEAiZTI/VG5URTpdfHxVZyE3dHdLM2pKdnlqRSwlanZlKlMsRzBJLyxtUl5oQWYrZFtAK3ZbVXZVWjI8JShJZzUrXjVGdmZzY25rdn1udEd7YlUqb3pldH5zVEx0LkMzeV48''@;'; put 'put ''bDtbWipzPXE9cT1xLGNePWRUNHgxX0pLUGt4OyxrSCpnKGo3Y1s9UkYzRzUsc2AxaWhpd1J6XyxNU1tfJjN+d3RPTnI4aXtOYmVWYHApYTcxM3JIWCpiVnUhaH57eC9fI0U1UFJRMzMiR1VjOy9pOUEmPmd9XUJ9O3I/XS8ifnw+SFpkYTU4U1Y+UXhqUklDTkB+P0osO2heRzNjflYvY0BGLykh''@;'; put 'put ''e1M8OHNSL2h5LFBMN3xHcXRXRiVlMGQ8M2JeN1VNYypzRTpAP29LfiU0cCEzO2w1O1E4XzkpNV50UEJbeGU0eXk5PE5vYkdiLnwhOGpqJHAzVHJTZWY0RkZyXyN6eUhGVTJDI1tYUz1gJUt3WEk7QExWKCRfWGFbeTxndFVxaGhPKW8/KElTSlJ7VG1RKDR0fk86JkB+Ykg1YDp9TzNEIUVPbUBG''@;'; put 'put ''aTgrLFFINjV+IUc2WTBNbzh6LGxGXTBqY3o5LjRDWzp7d3svVyVGUkBgZU8lZVYjblNpSTtfKkg2NDY6VFR7PXJGOV4mPHA5NmQ7OWJEQ2dKNiJTQF15KV89T1gjIzZMNDxHaiRmbmU0MEEjJWpUNVFPIWlGKmY1UVBAIVkhPHsmdVd0R29vKD9AYUloeHFmbkd5b2BJRkQ0TEBFIiZOfk4xVVI/''@;'; put 'put ''LElmPSM9ckImYzJfaHttJUMrLERuKENfVTU5TXpvcUtFTXZHIWJbXVY5dVJOeDoyTTRMZiNbIygoQCYwNlRaa0FWWF5DZk1oeHVHQ2oiODU0NDE2diMqVCNuVVtibGohJXpqU2BMYVBfIlp2T1ZzJVFiY2g5Jjs/XT9CVixSMn54RnplYzZZUE9vZnswZ2ZEVnxuTlZmRWZbeiVGT2JlZz4xRUo/''@;'; put 'put ''Zj59QzFHOy5UaFksSH1QdHxPZmE5aSJ9aVd4L0xWLnhAX0xRfj8uTlQ4Ny5xejUzUTNOLmlEbj42ckVSYSlIRGw+LEVCdl49MytKXiU9Vk19cztKMmpzeG4hbiw5SHEqJEkkMURtRVhNRUV1dUxaeHo0JHZoQE5HeXJtUn0iPzdVZzI4VSMpT0lPWChHSHZNSTtudTBfMUhHOmlqSENeaHhRS1hQ''@;'; put 'put ''T1BpWTA+Xy9GOWZFfGU8Qk5mWElsM1tYfT1ic0Yzc3RyL1lCOiZoMCYxMTZjJVlVNH1WW11jNiNNUnk7PS5paWsxeFVJc0VfcC5ELHBgcDwzJEMwckNnblZifSZqNGYvM082d1tgclsjcixMOFQ7TCZSeDRLcVtyWV85cTwicjM3QUcsOTErS0FoUz9gRDRDcE5pKz14YSJsbDE4VFIsQGRrX31W''@;'; put 'put ''IX04YGovflVSNix0M2gyamc/MWQscD1PMEB3RltkeXdXcXo4V2JsOnJMQXUsOWkofTtxL3U4X0J1SzlIdF8rT1dnVilGcTF+amVKR35XVCNfflM4QndsMTQ5e2gobj52K0o4eEJxUmNTPlJsbDQhTitANFpGZFpUfV0kM1g9aTheQEt8eC5nKU0kSWB9eHszR2R9azNZMzpgc1o9Ty8iMzZKflZ0''@;'; put 'put ''R1hudk1YVnRjITNJRE9EXktpdUYhJXVjZTc0dGRAeGdRK2ArSS43PD9sNEZlWztsV0oqMzRFUmJnfFJObnZSdjxjPU8pfXdLZEAhOF8sJnNbWkJ8QCxefGpFTX5WLEhkXmtFazkyP2hGeDpkKy57bkt2Q2tRZlgiZmtbZ1B5SWlfSWRKLFRmIXhaMzhXYG16YEVfSTNzLGlSaW9pO0UoOitJcyhg''@;'; put 'put ''WTw5Kyg2Mn5JLmZbfjxvQTZ+RG1FbVo4PXIrVlNldzR1U3pJNnBLK1hWKC51NTdvaFs9P1JyeyxBa016ezkvISZVP15FW0tsZTUpJTd7JXk6aVBuemJmTHRodn0mVnNbaGg8YTVbTSppJXhDUktdMkAvajxBY1FdPzx9bGgrQlhMM1pKaDl0MkYsOV4lVUpuSW91NmlOQnFsPmM9OW86SjBCY2th''@;'; put 'put ''dTRMYXVTX2klYmtHWnl1LmxXfGs+KT4mci9GUykxMnAvXjhyTUkwbFJhKWJ8Tm4jN0dyZjlhUnxZIlM1OEA6aWYzNnhIV2tzSSEhblk7QzU0QzdwVnZDPl1SbUs7fm9NfWl7RS46c2c4Q2VeTSJKSzM5b0IzKjchSCttaGBGbygsd2RQcDYiQVBGX2FdMjM4QGhnakREM0dBKi56JEd5VHlvaVk1''@;'; put 'put ''TV9iXlo9KSZLfGVfZyxFPV5kMVQhdUN4NXFNZ2krTz15YCYyTygibV5XU1ZCMlNmQkhYYzUiPkUzQS5VMiFtM3REPEMuMnZGdjpqVXl2QixhfEsrKmVHVDkuXlNZOSZ9cEdecGApOjJXfjsyfjJKezU+YFNYfVd+ODYuRy9vdDp1bHJLSGdHfUxyemB4dDZdbSE2cGhreWxXVFc9PmxZV1lNc00h''@;'; put 'put ''aiQyNF5+UDR6Qi5SeFgvIn4lQix0bUJ0SzkhdnRBIUh2Tz9GQ1tVJEhUKjB0fEZTKV1QbiN2WHBxK1EmS20reTpHZEI9NlhZcVFTYlZjWysmXXE0ZHQyX1lQY09xOFtEPTV8WTNyRUs/aVR2c2VfKGplNFBHYGBRW31iIzRKX3k8WnB9YVl4XktRbG8/fXJQL2hzfWkrQChsOTVna3E8KG9+aUx0''@;'; put 'put ''U09vKTkmNSI8VyhqODxZSCRnYmt6NDNXOVtTPWFjIks5W31xOS5GfV1gVnpyfEdJfV9qWCpAISpMfThJV2ZgXnkvKFdKP1pra3htST1pI0gvcVBDST1SJjNPO0Q9bzRdXSYkNFYxVF91JXI5JFdeMFJ7RjtFME5PR19INlBddGZESU5JSjBgWXh0ZHBYTkg9Nl4mPDU9Vn1dekcwQl9kSGE+YyUu''@;'; put 'put ''dVJYbnRlVXBeJT1YKzRmPnxwUUhuJX1xXlhMamRCNjMiOilRVTMsMSY8S2FdfHAxbFtGcE5GW0FjMDwpT246ZGVfa0RYTnc+cWpxYnNUIk5PYkY7SGpVZ0RsV09AVzMhPUpzRyg4N3BWcF5zRSF2JXNSLzEkLzNWfSQpaTFwd25SVll0c1k0Y1cvW0o4WFcsREUmVERdSTdzOSgiSX05JG1wYVQv''@;'; put 'put ''XXRIPWR9Rn1JTk4ve2ZtYjtjXiUjXTlpYmNPXiNWPz9EYzVmdkBQLyFsUmBEUXx+PHMlfklOTi9mODp4aylUXlJ7b1FUMzY8I284R1Npb3FUU1NXVz5ObTE7ZWt9RjlkbGshRHJPMWpfWSF2Y3RuVmk/U3RUazh2VH1QWT8kVCtjbE1YbnE+YkNOamNWWHNOIV9SZ1pWL3A4TXBvQXFXayxnOUxK''@;'; put 'put ''Zi8hITZ9dlhEQ3toJCQ4MlN2Z043fHFjMlo6WltUXypiMEZQUW95Xyp1KE44N1lTcTF4c1V8LHxeQ2AwRmJbRXUqRXFyN2BLL0I0M150by42PSlRfkIkcC46Tl9wV3M8IjAheyxSIUlgZnM4LFA4byxJO1IhLnY4WkFzU01mVGRwMX5pfEV+c2UjfVFdSVIhZ3VaUzgvRSI5LEpDQ1RlKClJZlQh''@;'; put 'put ''bCIzeXxDeV1qMzU9NHpTSEtDO0h4S3BLI19SQkQiRnRLPC8ycn4scU9lb3xCJT1pSTBRXWNSdD4kV0NCI1tPfSlRMnV9KjJwfjQyPmQlQD9tc3szcTZCK1ladk0uNl1gTGhsNz5MPCJnWVpdKnQ7YDRpbHMycE14QkV4aWMvbEskSldgb3BCYEorX1l1fnpKdC4xPmM6Mzl1dixvU1l1O0xUZ0o8''@;'; put 'put ''KDFFbV5lIjEuTkFCNEpYYVVFSU9hNUM3fFFQM20sT2RnS3JxP0hJQ118LFpwUjNZPTxUJGpyZlVtISwsTTAseFhGY0cvQnxuVjF7Rm1pXyREXUNmbVYsR0MjPWxCZSJlVEB0Wlt0MnRPa3M0JkZSOjQ0Zzk9bnZnS254Ol9wOWd3bmxyKmUiLGtOW1pwQytqREhedVREPHRMRW1+WU5tOlQ7OXY2''@;'; put 'put ''OFgsfFRbUD5SSjdyW0ZGWlNCfCwuVS9GRDklQ3F2Pn1NVGtVZ3QsTEQ/X1Eucz9OKDElLm1YOTA2QkpENTQqUzFVYHtBc2o9QjRwOXtCPH13QUI0dkJQW18/WkYiSWgpWG8oMz1RYXwheT4uYVtxMD43VSM3TH5vci9uZmhAQHZmNFRTbjxAWCF2aTJeJlF2UEdKang0NHZQPVQ+dTRFUkIscno+''@;'; put 'put ''ViwrPC46XywmJV0qY0JOJDN5UCZfVUQpW2ROJDMoTV80PU93VDVPMH1xVmU7WkgyL0ZNY3IvclIjRjN4LD5pWTZQTDwxZkZWb2E2amtuVklVKHwlc0Q0aiZ9UVZlOUFsd31RKDBVIylDPWwsOHlkK2NwU0JjTkk4UkFQfkR0MXdyblJpe0JjQnNdS0E0fHJ5VXk/Z0AlQjlnbSw9LlpvQjFaMUEq''@;'; put 'put ''Zn4zLyhLQ29CQlJHI3Y+Qkg3WS9AflYoNXRCLmQ6NCl+MVU6Ty48bClxMW0jWkg6TWxuKF0lPyZwS1AodT9UYW5iS1pvLF1qQDZNN0tfSDdweHt3fmp5UnUkNWtzPl8vKVdIUzJkfHhXP2JVSWNpb3tVWVthe15KWHZCUzMwTEpBbHdNVFJGN2ZNQ3lQYSspfXR+JERJKlp+VjheS0BLQEp8JVpk''@;'; put 'put ''PXA6SzI0fGIvMTQ2fGMkZFNFKzF2N1VncFVCP0tLJiJwODlvR0FjZFczPzhiY3BrY1AqYDpRKWN1NV52alFGQyVaTE9xLll+XUhHO3N+ZzA7ZUJaYGw0bHlyRypaTntMKntaPnt0ZWQxcjA8S1Y0WDRgNitxdSJXa2IldXQiPCZjL3JbOkImPE4sITBkUzRbLFpwSGJJVVlsRkFbNT43X2ByQXg1''@;'; put 'put ''VSNfK3AvQyMxIXE/cC9hJUxJNzckX0I+fGFuXTY+S3wuaWJkRGB4PnNBIXAyUTE2ZDw7VW9UaStha3Y6fUQ0e1B0OnchL3FkbDVqQE9nZmIlZ0JYOzhBUnwuRHVYdVZFIjIoQDhlRzM4VlB8Q1YqaFR1d0RHMWlYNnkwIV8uODdpVi42XShGcz0sQEtpdXpfI1MjU35jUixPazA6SlE0KmMhV2Ik''@;'; put 'put ''VTlGJT1mKm5AOCFFJkt7ZVJ9M2Nbfm4udDA+bEBRJkkkSkEqUHs/ZW5Wc0RVU0wkSz5CNFhkJTZ0JTN4RG1maDRBZGF7ezpdbXNraFUsLEJISCpzNShbNVRPJE9UKGskYS8pUntxdTZrJUE4KWhLJWtibn45TDJJUkw8K3EjKysuQjhCcl1fTlFqczxYWE5kcz0pJmUiVlJzanBCW2YuJnpUaGsr''@;'; put 'put ''OCRyOl5RL204eGBkflFWZW1aRzwvS0JaZGlVTzR3cVEiUitYL24+VytNaXtFVXUwbz4rMXlEPy81flEqPn5GRU0mUX1NaStWLEw9W24mJE1kKlsuWlpNQkN+eSNMRFtuRWN6Km18Rj8jLlomfCIzM31mYGBdbmpPXUVtbWlhLmcvMF9jJW5dS3pgPHM2aGhdOTB7NT9BJEQvMCZRK1BDfHkjbiwx''@;'; put 'put ''QzRMIkcmQzh1Sl5zPDBXOWZEUGlTVWhLeW1XUlMoYDYjVCl9LyE/UnlOLERWXm4rJC9URl9ZcyMlejQ+ZzE7SVtaaX5ZYXZjdEwvQyouQzhbbyhETThEPEZhY1puKUZbYyR3ZHdPY35adjQ/MnN3TztmWXBJQSksNDgkWXFIcyNKS016MX1JJGshaz5jaFp2MTxpa3d+aGpOUEJqZj5jX01bdlRO''@;'; put 'put ''RClfW1NGdjhEM2trTEVkVFpgREQyMypjJEAlIWpWdU4/UWcpMyNqVn5NJSxbW15ybFcoPXwrZWRaUER7R1lUTDpmLlA5JmV1dTxofD9NZ1tOR3lzWVo1UmxXcD5mdkpETkhVejlGT35SUV0haU9sYHVQcWw8W2o9Q0JbPkdPTG4+JmIoV3U+dT55YEA4bSlpQ0NHQjZfbGY0QVtrenhtUl1ZXWlx''@;'; put 'put ''Umt1UTVrd0svUDV0e2ZwQG9peTFdd20+T0Y8aChTdzg3d1N3e1tAbjE6Y3hjSjshJWdjNWgoX1godXYlKThhdH4rXmAmIUMqb2lQez9AeDJLWV9xWk91XnhhZUAkbD5lTSZCdygrI3QpeCtBTSJuTlk9Xn1nZlgsLms7ODciVSM0ek8kRSFaNyZTY2E8PVdGfFFYIT1peD5fd10/Sj95dHE4dT0q''@;'; put 'put ''JFZmeEhMUDFxQUNgcWRRd2h5MkZ+W2h5OS5fQ2Z8Q2MmQzQ9PE1BP3R7N1dNZGxKOXsrSXJ9O1JGKXY4anZXTjhwd093dStoTkg/Q2MxXW5QNV5OYUh8NHB7XTpDY0c0cjkiYzxkd3kiTEo4RjRoaEpnVXNBKFhqSiVKXTAvSHc4RUxgST1ndHBpPmpPUnRRdjpKfWA9SHlpcE5wL0pzcEd5SyJY''@;'; put 'put ''IWU0Oi5dMDYqKTA3c3RDRm1hOytCOnQrR1pCO1c3a3tlK1QhenVKVXNpMTVDNXduT3BvaW49XjNVViFYW2x5IWY3fiZaJk9pKDt2Yi8iP3VHako8JkpjUW9oVkhiWmsxV0x8ZW1gR05pbDF9dmhRWmBwcFMoa086dHQxWitxZFIjYzFOeGpAdW0kezFzIyJDYSN0ZjRvbHYvVXAqW2dKYXFwRlUp''@;'; put 'put ''e3xDVz5OYDJvOiYjXz4pWSJ8Slt4Y2thYWFBYzIxfVRIXXtIcTBCfiwvOm5WSTA1K25HUkFZQnMjJVc/STZ+WTYjQlhdPDI4QWNXUEFVfFFOXUczeFM5e3xZNiNzK3pzKHx0UkdHX0d7KTdtXVBrIWI0XixxI29sSzNJcyl6YDwrfHpgZzs0LkJ9Nld8fVd8TzJ+S35GQjU8WHlXNUZedlldZn03''@;'; put 'put ''fVEsYytTPnkwd0QpUFdgNX19KnBmQW4yfXtSQUoocFEoIm1gV1VWQWhbaXwxby9eUzo+eyxLOSQlRWohb01VYSFUKVI+b3tOPj5naF5la1h9LjBpME8jeGUwXXM8QzQkLnM7XnxHJlU7PEdqXjc4cTNgdTN7dC5bT0hOUWQjKl1Dbj4ob2Y5dTNAe3t1enY8JVlCd2ZseT1dNl1hPVkwUEc8JmB7''@;'; put 'put ''amJvM096S2NdMHB6LmQwJHB4UEchWUx8NlVHWUdvQ3pKcXwuYXBRSyQ8K0pZbzFoRlkjfiN9KmduOEFaJX5VR0Zjc3hvan1zTWtHJi5ldi4qdUsiOWU0K1Q1P144SH4lYEo6JGZ4Uj03T0ZbfVkwZkY0I0g+VVA9UU8oKUkzZHtTIV5CVCF9Q2ZDTX1TYSw5dDlweyRAWSl4eilwUyl7eUhpVHhD''@;'; put 'put ''IT5ULEBXJD5bUT1DWS5AR3d6LD08WXVUMUE9MXZddVA6UWpibG46bEt+S3FeSTRkPnckM21Lbyw4KWpZRH5wI19SKHZSbHs2SVReXlVEImtLfVFmVHNsMjdSfkFeKHVbWmpecSMqJno3UiF9S18uZTNPRk05VHdsOSNBd0Rye2lPfHQiJixyWkhdInhER2JCPCRvSjp+SHJ9Ml1LMng2aFZiNG5v''@;'; put 'put ''dVV+KiEsW3VDNDs5TEJfaSNkPVNmZkhfJj5XPFJpaXNMW0tFZ3AkUHRlNVJ6I0gyRjduK0V9T11xc09mRjpKNDx7JjF3OiYjdjNbcWsleCEsLCMwe19je1ZvTSxBTzlzMUR4KGxlcl0rM30sXnl3b1Zjb3M7cVZjIVo6RnZsYi4wVy5pRV4oS0RnT2g/d2QuRmZPZzIlMjR2OjVHK1o5RiJ7fCxz''@;'; put 'put ''Yj5VRW1hRD9xc2dneHdfei5lKzAwdGdLZltye1c4OjZ8UVt0bVFdS3JKS31YPzxrWSNzMz17WkldOGR6bmdQfktYeG5AKzohbCRlbHcreEUycUBGW3c8Klh0dVRONCUzeC4qY2RKOldTeTxiM3NJcWNUSHIrclNxT1hEX3ZzSXJ1UnB7VnxlNj0+NDd1JTUkN2BDL0s2YFROPlB2XygmSHMuP0Bs''@;'; put 'put ''cXY9NSQrNEIkK2wkTH4ofEU4YiQ7Ok5jKit7QiZLekpVTzQyWVBXZVExfDwvYCgoZltrOkMrSzBseV9WTTFCSWtnSFlBbElbOmVyZX1wK3l7bH5AKE5uS0Z7RlVMMG5bI0ViZUclRlUsQD4sazc3UE5OSCo9aWN5dGs1NjV+XyM5KCFob0giKDBNVWJ1Wl1WaXJPLGxZYmUzVkVzJl1mQlk6Rk1+''@;'; put 'put ''Z0V4VXNdMXh2QkJLcEVwRitGcmp4Qi4uWnNdfnMicSlHOkU8M3M1JCF1MC9lPzZNO0ZXUzVTcz4wXyNVN1Q4UyxhezNXLGNlPChYTDMzdjBWcy9XOEVVZi9JMllmajdZIyh6LFhiYV9jTnI4e1ghNGhER1dhXUBZUDglYX1tZSFmaitsTGdNYkg3ckdpTEM7UDBFe2h8MjFCQHVid2JZQVhOXk8i''@;'; put 'put ''YT83Un19cWlPNkpCTEQxV01WcFo2RlZxMUI6dFtjRlIqRDlQRkJySX5UXUEzSUZQOGt8THwqS1l5dFZxbC99Vyh0bzRMeDMoVypPdipEfEI2Q2Q/bj1xQ2hWJGtzTG9SKWFxKXtSPEU8KXZ6UVE5QmhYc0xbSnVHN3YocyM8U3FjOGBxLlhBaG4rZmZxdFdGIVcwdU41UHJvNDdDP3YiVGxhJDp4''@;'; put 'put ''KCtNZUttbSJlKjwqY2szQ1B5ZyJNMD88TVs7Syp2LmU7ZyVnQnBrJV0sT3RRLiRmWk9AUX5MX0ZjRSNaNnEyKltgPH4sfkZRcX4yMDBZPW0+cUk5XlliNkBMVUptNE9ULnEsdS4sei4zPlM7ODdfVTt1SjhwaFtFTSkjXj8jcXRTJmAvRzRxIWZIMWopVkRWI2ZGVCxxdk5jLn1dMTZSeFFROnYx''@;'; put 'put ''Ki81bTA+ZTNMSlVoVypTZStQTjkmdk1IYGBQPTlDXj9bNnhOPXtwTl5gWmxIUURoRWIwWG5bT3pZaiM+OyNYPyNAMTIiSyN1PX1VZ2B7T0tgUypNKHtXJnZdZyRwTjZAMEhFX05jT25KRV5JaHVtcHA/VUtgakJTKFtATCJFQW5lSEl7Om1Xflh8KXU9WkxpaHpRSzdwWyxAdGQvRS9TJVI7fiU7''@;'; put 'put ''ITklSHB+VE05IzMvT3Fldzx4dmA/JTM2Six4bGk5Nk41L21mOGBWJUo/QGs6WmlXLmRNVFVzZ2Y0b0A1fCs8QFBDeWVTdmZkWS9qS3kiVG1dW3R5Ky94cUIuMndPSjtPNyt5K1BQNXhTQTVAKmwkYSohS3lSOlFaJkB1eVFvTjFAOkAyZ1FaOzh5RE9Nej1eRnVWejRlQWJQSz07eiosJHwvezpM''@;'; put 'put ''K3Fvayw4O2R9KEdzO2ZeWytSfC93PCkya0QzOiw8VVVLPVVncWpeO1FdWlRSaDpAc21NbC8sSX1KT3hBL1YzVVE4eXc+YXVXSmNtXSlrNThFR0VIOUl5RDlQe2M8KndAY3xeX3g+eWA2MjFofnlwVFFjei5kZXZzeDBKUWZBNGcpQ2d5KEtdMl9oaDgvNmZwYVswXTg6eTVRNmNuSHRQOiElSFtO''@;'; put 'put ''YlpjUUssNWAmQkxsOW5aQjdzYHVbNDE1bUllSk44eClkMUdDQTdKW2EwbThMZCYiRU0xUGs9MHNGIyt4YEpBZHkqTD0/O1MzMS82cnkyPWQvcmI+VFBUeD46fHdZejF5ZjxBTTdGcUc7c3ddbDNlI097e0xAL2ovKWFgbGpkLCIhdXdCRHxROmBVTitfMm9CKiQ6K1BpKmtoeERgTmcvLk5zc297''@;'; put 'put ''RislbUc0bW5FY3RFfj8qdW07YWhHLks3KVBPYFZjeEhNWXhodDQmSCY9LzhXb0I3MlNBZFN6aVgweiFjeTZVVVNIZ14yJExRejpDI1prQ3NPX1pwX21PUERAfTEoaztmeDN+YjtuOXA1LHtXRWpVVz50PHVlI3B7O2FNLzEyXWYqW2FmIVcwJDkiV0ZKOE5WL09sZkFILGN9N3V1TltuJn05Yyso''@;'; put 'put ''fmIjXWpjMkdUa3p0QyheYHosR3Y6MEsuNHY6am9nP2xeWXVQPmklMithUGl6RVN2MTpmfW9jUzBeKWRvanpgOF5eZVhqN2lJLlhUYnNvdjF0UHZqNl1gX0R8biRtLHxmO2ZCLGE0P0dvaHtRfiw9JW1kP2lUP09xJilQOi9JakFuI2RyfkpKPTVUcURAJXsxczVWfUUxOGRwfilMX3Exe1MxLngu''@;'; put 'put ''O3R4TTZgTWlGcWpXODxoTFZSLkI+aUl3aDtXVypiajQxcjd9Q0JaM3Y+Kz9YSSJTYjMlRyh4WF8pO1hvMmZ0QTFybUJCd3JDfTc3Zj1rKFojUDtSSDVeXzFkTjA7VE02Wzcud15fKSRqSGNmNnV3KyI0Rmx8UlpkWU0lSCoqeHZgSkZOQVlGTkIqMXdaZG5QdHg6K3BMXkpoKV1KJDw7VC9CdlMv''@;'; put 'put ''Oj5EPytANmJ9V1goPTRESDNNeWhIPl1iWDZbQ0VUUXVJJklaPFoxWmlUfDtwOzlgaHtGSEMqTD5FR11mNTwrQjdZPzRXXkl1TlQ2ZWUyd1VqcHhKRzolPHdWaWtRK1J8cUB2JFlmTyswalJaenxhTSledGolfGA9X1tgR0ppO3FVcihwMjhicnFMdSx4UDU6OX1kNGg1dEFmR0NYVjd7ZGVjfDw7''@;'; put 'put ''dSEzZmJTRVRUMUF+cnhXcn14ZjFXIX5HW2BnW29QZV8vaXo0SE19dzBVQEZ1MGp9KV1HWCE/IXF0L1ZiKzl6SCQzQDw3Q0VqZ0Zla1UoVDU9KSFWP15nJWlyT0R5SWF4N3Y3aXFbZXRXZ2E0IU5EMStwP2tvJjJbY1QhXz1LNDQzW2dDUGAsJXVeL1hpJiljK0J9cXZ2V3J4bmlpMHBoYF5UcUkr''@;'; put 'put ''UG81WH19OVVKMEMlRVJIMzkpYyljKWMpY2pQJUg+dy91OCV4XnM+K1BSXWhubkVsPiRzdXROcG47Omlwb0xSTFJMUjVuTFJCaWE/V2lYP2N3OHtMRiYuJiN4LEQ2akhoY1k1Qmk9Oy8yeG5UWjdbYk5tcXVVbWNaZC5LZiU9ZlFqPjdrQkZJb3s+V1hXRTI0KnIoPzZTbjBzdnVDMUdIJDR3fjtv''@;'; put 'put ''YHNfZT5mLkw5RGQpU0RxP00rKFtgW1d1Mmt3ODh8LDQ9SV0vMmBKRihVWC9GV2hFIihuYD1USysueUo3T2M3S0FPPVtLbC5ZK0QkdkA6SHhgMnBQNDZeWEs4ZFg5XWgsUDhoWVh9dDRHcjNLOnc1N0Z6ZWM/XyZLOj41UGtQalZCUDJhUD83OCkjKEtiPUJGR15SRnNzNmVdK1c1QEJkMUBCfEhX''@;'; put 'put ''L2cqPVd1VjZFXUkpNzpKX1s9YTQ2e2c7L2QhVmdZRyhkbTdkNjpmPSsjbHwvfGdCN1goO05MRVEsRk9YSTtkNiwifC5xSk41MVEoV1Q5NDxuQmR9UF9bMDRneXJAJDRPJUAxTy9zVixUYEZmU28zQzM5c0xxalY3biVgckg0V0Q+dEIicEFMNjVPSHU+LmswS2N8IWwvXl1WNXY6RG56STFjUX0m''@;'; put 'put ''ZTJgdGVgYDgpWmslO0JhWmspPVdVM2NCI1smdEUyZzRCUExFJXxBNDgsPXhWL1dpTFY5WDA0IS84eUR5ZFMqQXgqM2RUfl9sJlViby4mR1tZTkFJT1UwZEQjdS9bSjtMNTdRXmJqWG1lPHxCYGokUXlZPnliNHlOSykueUBxdXRHdTRQSl1FUlpqI3VOTVYmMmFlTzlqYmpBNTgzRCxPSjsxNCs8''@;'; put 'put ''WSRTNTdeYSVmTEJvdF12S28zTDpDSylFIUx2LighWz1QWEJsdEEhdXBkSj8hZkZBRjtkR1F+JGg1X2F2MX1KI2ArV15TIyo6Nmk2MSs3RHVtfEZnZ1plL19CRndAMkVQNUVUdFhfLChQKlIxRzVnRS5Le11DLHApR1ReUWx1dDNbZ25rMm80Zyx+X3o6Snlla2lYR0BYa1BGPVFgRHVmQlJCMlJU''@;'; put 'put ''UG03K2tsbzRidGE5IUZHU3NYTGgkT0kwSy5eclMrYWEzayRLRiw2UVhTPzA0ez98Insze3s4UyM5ZXRPflZ0YzdDXk9jRkw5KkNQOCohcW1AIVFScjRpTG5wQzBMcFIxbyRzXTU5ckM4bFVlKUkwVjxZU2NuQixhQzZoNCIrKHJfYEBtPltZM15bKz17UWFASFQwZl8sPX53cmJKUn50U2hvalZ4''@;'; put 'put ''Ul5Id2pOV25qPVNXNSlXPHplbDgjZ1VKXWw8VmwpR3MxPDpqO1U4ZmUqcTM2Y2U9JCRTZjlaZ2gye3lRYm1scWF7OjI2JFN4bGJkO0lRQjBgISlDTHI3eGY1NS9Dd09dcD0jcDReVVpIfiVCby5QI10/PEFgbUZbRGJCVDJpQ2hWQjM3KVlyUDI8Uy5SQ118fiFsNFNuNEs8MFVzdEBxMmpZIytd''@;'; put 'put ''UGcpSVpkel5aNVUuY2xUMlAyQmMzPUh4IiI/bGg7WTFlNkR9Ill1b3tQNjh1MDt3djF+VmphdEVHT3Y5VHwwVENWSlNoQyFOUF8qejBHS21feiMlKV0qZUEkRXVJUkk7QDIzRDw6T0VFWFt0RXVGWHRdLm5qTmNhZkREbEo7dSMra0FdKStAK0g1QWJOKk1+MFdLNiVHXlB4XWFAO2R7RDolPGJh''@;'; put 'put ''JXZBYG9KblBYKz13ZTFkRihHWChnaVVzPkpgNEQlUEY3KHprME4oVnhqM3I0MmZKN1V3Un52eyR7SyxIYmExXjtSVVAxTk5oKiV6PWIvMmUic2JPX256QC5YKF0xJGdSY2IvIyxfQSFgP0dmSy9IUT19Oj1HTTRIaWxbQjtaRF57cDQ8bmx4e09IUCZPRilpM3Z1PS5gYiZPND9jKkhiJEhlKlY1''@;'; put 'put ''OUtyZ3RxWnFAY0YsKjkhM1g+REtLUntUblhTPnJmRCxaZlBjZVs6Zy5QSWd2N1dNIk9hLGRTOzkpQ1lxKyEvbVlYdVJrNER4OjsidEhOY156Jml0VH43bVJHWWNSI0lOSVBBTF5IMnhiaTBVa0JkUzxxY0Y/W1BgN14wJmo4djwmND1xX1YpJTcjYnphQl4uJk97e1czc0I7ZHFre1dWS0UoYUYm''@;'; put 'put ''SVBDUSxZLD9nfGQjaDJoZndaRCU4Ui5eO2NgTT97Xm1ZUitZMkRzMjo1KlpMfTBwQ3NVYEpQJl9RdjJ9eHx4fHh8eEhoNDdCOVoxP2pWfHlJWUouNV1pa0g6MDowOjBYP1hSc3w5b2VKdlV7djl6VVV+aUJjeUxPZS9kO0o4VD0vXnFKNzJfRCEwZl0/dTJFTkg1R2F9dSUjV3V8KTt0KnVVQiJF''@;'; put 'put ''cGQvZCVCUHlGcmpIcEh5MG1JV3RpQHMiSXUxOkhwV3R1bzhnQjQuOlh5e1lNcDFAdHszbk0yaU1WU3JKYy9rUF41OUNLcEU7ZmFwMzlnOjlsZUt0RzhVInJsKy8jXzNoOlA7R1VLRV0le1VjcCRMTjVfOFcjcW80PG0zNkg/LzlVaHk7RncxWHpkaUAyMEd2QnJwem1zRzF8RSFKcDR4VmVmI3E5''@;'; put 'put ''NH10InFXYHNOdHs0TiNLYW56ZGFqMWgjcVMxUU1rKiJFIlhvJHEpTSw6WzB+NFtPdEVrdHNdakk3Zzh5OjdgamNvdGhiMCxIUkFPenRPWmRjKXNuc0hPcTRdNHsvVXgyeyl9NVVzbDI0On1PJVU/T0pIOmwxOUNDcDcyZUgyNGhkQjchYCt1bEw5NCg+V3IsSGUwZjApJW8wV3I0MFdyQlBPL0dL''@;'; put 'put ''MStIUn1dTlV7X0Q0JTJ6bmhjbVZiW3dEb0JgSSplc0ludlNuMnNZdCJOMHtYW3hkaVNoc2J8Y19ecWdlI1dldGB8PHFUSUshVTUkW1JPVD9iMVVVKVpFaCQkSChfKmhbeHgwLi5YZV46dkQ+dEtTXkcmRUw7LFsvaVVTRlJ1fnJkXzc4PFYmM2p7YkRRbDpaJEFdfCh0YEZSWSU1RE0wND9nL2hT''@;'; put 'put ''WSZ6bCUuJkgqO0ZXYDExMnZOS3FFcUA6YF8peUBIak4yJTNXI2crNHFeKTtMIiVqaWBrXkU9XWVTIWxRdCg0VWdHN0IvQGJeLjlmRT5ndCUsPjtJK1pvZUpNZmxYL2A3JU9venBDRUFqTT1HNlE0Wi5xJlRkJD9bYVkydm9fN28vLDdCd0UrVVVXPmQ0dGUyOzZTditbTz8pXnwxclRkPnRSfGll''@;'; put 'put ''V3M2MihGS1kkK3tUaW1EJDRbcntMNnRIUCZCJHtLKHNnJVB6OFI9RGVYVUtaLE1fZ2FrSl9CQjhGST1pR1h7VGtmV2A8M2pAWSR5Yjg2XUBvMEtlb3xNO0pSbTtuP01eZGUqLlIqeWkyVkJXbiRuczcyTW1bT0F5e1pDYkMoRzt7NkthJlp6a2ROWCQoU3NsfmJeYD4/W3IvalhUcSZHUT9WK2p1''@;'; put 'put ''ZGd5QklSQzNwRHdyLGU2VzFSe2d1OFksfHxQIn0ycTBudl9JVXhiKlNecThbPnRSfGtvQDw1W21lO31LQXJeSjNYaG9dfUpPRVQvfil3cls4MS5JcnloOyhKaDs6TXxOTF5FcW9WIUcoN3RJb3lmbFlAPCo3LFZ+fXFpQ2lfQ1BRfXk3YWFnZVFZPVYwdzJ3RGMlR1gzaTswMChsa0Q4WHlQMF9m''@;'; put 'put ''cVprdSVzKkx3d1JofFJORHxIfUVtO0tAOz5JOk9UOEokbXNGX0AjKHoxXWkhVz1ndTxzKkhidHNxVX5daShwaXM9SHovRy9qZWZrLit1JD9XVldRdj8iNEgkV2Q0QDF1SStxcSlZQD8xdWE4O1AsMSwhMnk0LldDXSxvZzJ5WW9AaDNLU3pjNyhLeFJ2Y3xHUHZ7ajQwNV90eHNAMXVMKk9WaU01''@;'; put 'put ''fDc0ZSpheUZFdnw3NER6UCsuQClzSTBlUytJO2tRTENOQERreHArUEw8UCJCa3hCITJ5dnp+Kj4/fkw7STMrWmQ0QGgmKiR1KyRZcVUjLyhLRTFnIUpiczA7MEswK0dOckZsTDc5a1ErLyo/ayh0K0lQUlNJfnEka3B4NmNTKy5ZRHA4UGpFd25oUTRALzRNUGE1N0tRSmNvKmcrSVZmPERwcSRr''@;'; put 'put ''eysrZFArYUN6ZyR6e2ooVCF1JHEpWUphOmI7KilkMEg+amhSK2NzcTNoKzF+Vj5YLylkKz4jTkR7UllFQnRvL2JTYTJoVCJ0U09DVG4pUzsuY2dkNSo9cVorKiFGJm9vZEJhJSN1MFA1ODsqa3lDeDFnZldGLHFHTVZtUSU/MXUoKlVWbVFjYGFYYUoxS1UxTiVkUFpmeFNoSVpmJlBRTCVnYz9l''@;'; put 'put ''eTlFRCl0UHhSJi9lbC9bMXVRIjZxbGxaeGRHOEs2PzQ3Y1A3TW9Fa3pIamA/Jn1lLzFJfHFsbFgsT0QlRT4/NDd8T2JaJWxJSVthV1ZRTD04YlNIajlYJX1lL0Y/M0tnSl98NzRbNDJLWUoiPzF1NVhjeTVFQX5lL2N6JktZSkA/MXUuOjJLWUppYGFYR2oiQzZQd25mV24lfiI4S1lKZmBhWDJq''@;'; put 'put ''TytjQz19ZS9XSnkhcSFTSVBwQXoxZzM+cWNWZkpFMiVtYW1qSWp1WFVRSnZlVkZUKUA9YUlqU3Uocl1Oa3hdaGhJVmBVPCJ5N19RK2p2NV82WWt4P2FaST8/biFYT3A1YTl4UnMhYWVhPCFfNE9ObWBvWklZYHY7MS90cSpsWnghcSpsZWFlVkBTXkJMUklqbzV2JXkhJWNqK0hqez8vJEhqIVhF''@;'; put 'put ''ZlArPllONXkhJHF7M05jL046KzldZjUhNGl5M2E9az12WmZtanVKeGlBWnY/UihJUDh6RG1bWzdVYyFVR3M0SCQ3ZSNqYXFxbVl3ZEc+MENneSFVR2BOWG9BZjtgOkQ7YnxsVCpeKm9tYXtZJG4sY3hfX188azBaQ1Q/fCRRK14qb21hYVIhSzRqbSp1dmFmVjZRKX0hQXFtYXtlLHUidTB6IWdp''@;'; put 'put ''VSh2UnlIYHdyTDl9fCpXSy4mSCI+RDhQM1hQMEhqdVhoI2x4L2kvZVUsRkpqb2lzM29jN0ttIS9nJnxPTm1neCtAKn1NKyFJQ3gmUDBYNUlhPG9xNHpbX2pONGlwdVArRHZ8Mk9xSXRuPzFeX2ZDMyVOLyRYdEAzMV5qJHZxMm05ISN6L2k3SWdWc0grOzxvMCo1X30kflpWQWEqLkBsc1dic2c8''@;'; put 'put ''dSxJU2ZVbkdYRW4yT2t4dDYuY3ZnbCpCcVM+cmZ3dzAsPH1xb1N4NUI3VDssM21bJjtFUCg1VypPbT5efVBZXnBsb1I9L2A0KFhvbEsxXmQkOn4vfGJuYFFaOkxVLzpFVlFGWyxSMnlUPGw1WUFGKHxRS3hEIWBvOiZlQmIpYSlzVyk2N2tpNVkifCs6P0V8SU9GU0w2PFptWVVQfD5mJjAjb0Iy''@;'; put 'put ''eHhGMkYqNTxkX0giZH4zU0w8VC9DSn0/TzNEZ1lVWyYzVEYrNF9HKWFKVnwpSTlwOEAyb0ImOmFjX0g0LnFxQTZ+eU16QiprNkw7SDdoTUVpdWI0MCpMVns5P3YpT2taT2M4W0didENHdHtXd0RlRWN1OGBiXj8kJGBTIVQpNnZQYyYhPz9jbj8hPjhyLCVqO0NlS1N5PUVDKUElRzwzZF8uaFt3''@;'; put 'put ''WTI8YUM2Yk1hLzRLT11eK3VjMl9fL0dbMD4wQXMuMjRpbnpZXSZkIT8qKyVqaWB0ODtELkIvKXYqbiF3OEZkSG0oXSEocVkoTkI0dGpXRGx2Mkk6aCtDI0xna1JvQV5PXmpVeC9qVCpWLiR7NWdiVz4vUHYjJkEyc19xSTRTa3wuSHx1SXElTWQwe0MzXndQaVQ+WTYxN2EzKWw7bXsuOG8lKGBX''@;'; put 'put ''PzxBYH4mcHRseShzWV9dJVJOK29GTyU9NiwhTSxWPFUreTFFek4pfThnVW1gT3QzNGxycStkc0M7cT5EZltZPEh1SEZuJXJ4cDBJSTtAT0sxKmBsQ0pCaVdvRjJsJk06b1ghYjhuZTQxPzNDMXtBSGQhaGVuI2wqZlJURFZma3QvYDV2ejp8Uj95S09nYHFTcXVVXnJieyl3ImYqWGBXKWg+VyQs''@;'; put 'put ''P3FyWz1nfFUhaj4/MD8odl51dTVbemdCMnp5dzt4cFFyNSYzM3NMaGJ4KFJpPlZFZkw4R1NCMnV4L1U+VmhFcE46Wj9fKF0ucnJmX3taXlc6c0MiWkJGdThKYH0mdDVkcV9rY20qdUd4M3F5dlJyOlE2ckRpJVB6b1ckXyFfST13fD1BcV9CUFteMXc2Si5Oa1Y7Q1smO2g4Qj5TWzJvQVZefCox''@;'; put 'put ''LjF0RT9ney5IMnt9eWxWSksrU0dCcTE8SS8lPzZzVVJsOzIue1pCXU9LLyZ8bykhN1VpZF9gNHpeOWw/S1ouIU42MTF+MyhofG5DSklqMW89amhbY0tQI2l7aUtoUDJvX0JHUyRYJD5vMEBPW01xek1kS05JZEw2VWFEPlVhYm9UeWskOlohU3s/RzFLPXdtUkVnbXBdKy9QbmJ3Iy4zYXAwTnpT''@;'; put 'put ''SzQhQCNSUnFPRUtaXTcuV0xBSzZmb2ZsdnJyJV12UnU7T3J8cncyN28yKWFpNTE9TFBxQVAxLi5ORTJjcnd4RWN7Vl87XTwxYnswUHZjWXZaXVduenhPMlhdQyVdclJVQlkjZkZAKjRKO2FTd0BjKjo8TXZaelpEekVNY1hgL0RAJnx0I3trTWFofVJUYWVWTkExUjhvZipdOyYvXip1TlIhWDlI''@;'; put 'put ''MHtZbENNTSpTKm9YTWVGLzohU3ZeIV11YTFtUlVWenJjUWFnO3Y0Y11FLE1Ka3NXPFFzfmlhIjB8cmwyXnUlXzE8Ziw2JDM9NmgxJkFyZVJ7NWlNO3NBNyVSWjIwJSYlXl9sdmBkITopTVVlK3EmXVhwZTNnLmFwfSFuZlosI2RSOj9YVkkwLCZaTTNpTU1+QEtBaDRuLyljOG0sJWpAI1VQMD0h''@;'; put 'put ''czV6JVBpOyNdJWo/IUgvInRRVHI3TWlWZ2NeKShGPS5YRlluaC9EQ3xrPWtsPy8lUFYmc20/IVRibHwhOWx5Wmt1SSRYLmkuRUB6eU5SbWtWRlIwSFcpPUI2ZlJeXTFoUjpSRT9QMShdXWAzbW4vYnY3UlJ6bEVvI2BrJDswWWhVYld+JURJK0Q2cE5TOjFwSFp9aWspOFFfIWBuT3pPeTB5RkE0''@;'; put 'put ''IldGP2o0Lz9HNmskQjJqLi9wM2M3S09hd3RoM1kwcCkpLkQsTH4rLiw6ZFhPd3YlRSwzMDI4IzU9aFpRI0QubyFUWGBZflFIVSk/c151RV4vaiVZMTFBKGB9IXlGY1peXWclPT17RWRkX1dobFtraE56OUBicTo5SlFLJTlnZUgrJCtJJCRZMkBWd1tFXSRwemJHekt8OD1+JnJeaXssdipOQWFS''@;'; put 'put ''M0A5fjlyOD42ZFV6c0dLbXIlS0JlXl90Pl9Gak13QHlUZi4rJXhDWig6clZ0IXJ6JkVaWzBlSVptOlY8eGAwXVpfeWpzVF9XbD9xWGJFfS5zezxmQUk7dmUsd355NjM3T3dRL0ReX1o4N3ZRPU05OzVKfFlAKypOPlFJZl9aTS80VStIdi9GQSZCTz81VmV2c2B+Zk0pLi9kI0MsOSVDWTRsdn5n''@;'; put 'put ''W0Y5JGQydD86Lj16QllQOyRQL0tdZUdrQ1UzJDljRixNJUNkcHImTUBmInd9VChzXU1xQkhjeEhNWSxzaFlTbks8ejpzJDVyLEA5MnYuRWJ7NDo5U0RwJnVMdWs+KGkhaWh3KTIrTlhWLGF+YXJ6emhdMlpNeEA7VT4/WFp0MDcrd2w4UHNbOkNjeiZ9VyRyQXshWCozKF9Id0NjZURPRXtZNClO''@;'; put 'put ''ZVBeWVVjW2VfTFpuakRHQWMjcEwvYW9HJj12U0Z2ckFbRDsyKGplLFF+bX1WPHRWN21aKWhMXlowW3JrQXhGeFJuPztOU31TMVdsdD9gZTdTYFY8eEUoNGxIYFhnTHtFZ1lmZG9MOTJOaSpkbU9qTldabHhTXmtOUl0lWT8hWXJ7MVtTXkJzTlcqdkt+U2dUWkB8cSFkVWQhPCwxLi5ULk5hPy8y''@;'; put 'put ''cDt4PEZ6Y28rOE4/Yz96ZWNSIypVOERCaUBPTzAuXj5yS2pxdyNdME9AUX5uVihuIXYsR3plRDYycHcvdTltQW9nbEIvZC4vNVllZyMsP305YiZwXT4rZWlbRCY1dHs6VT5TbCI0TG85N3NreilXVCZ6RENNS3Z0eHY5ZUlyUV1FZGRXaTVhXUk4RGNPfSxIKTo2O2F0UDJ5fS82T3p1ZjA8Yjw4''@;'; put 'put ''WiwzYiYkYEkyN2syaF5oPlBlfThedSRxNTsuW0V0LHtUJDlLP2hxQm5PaiJXb2ZgQyVneyNSZW1zbV5dLCNlWnNnZTVdaH09aWswc1g+dHU+cV0+Zlo5YzkoJlMsQWVGfjNhb2dLcDE9fitWJCpXYjI5ekZhVjg/XVQ6MCRFI0d3REBwSTc4dEQ7QGk/cC5NcjVDNk96fHo1ITY4cGFdLiFXWTdq''@;'; put 'put ''Izh5fXZmTDhEYzBINzN7UHVUMlFZSENQNyZ5bWdWYElKMFs3bDksJGFCfl5BcUImYXp9I1EzN28yLmRVPCgoSiE9Zl40e3tbOyFCe2RCNFdkQjRXRC9EZDZVcXprUVpFN29UR29MbCk3Tk9kbmAlZ301bCVzJEg5KD1ZdWpZfnl0RmZlPmdbOiQ4MnplTCpwXnRwbislJjtDL2BuLylkVEVDQGUz''@;'; put 'put ''Q2VXPilbU1l5WU41dVslUiU4JC5lR15bZXlLXSZHOXE7Vy4/V0BsViUidDdffDw1aW8qPnx8bGFVSjM0ZnxZZERDfVlDRWJyME40fHI8SnVJMU5hX2AmcGdFakZAY2diKiRbTjRUdTVxQlNASUttbj48MnxXYnFCU2s8W3Z5UT5CTHVFLCU2aHozVHc0L3xPSTtfQi9CM3VJeCo0VmBEaj9TVzV4''@;'; put 'put ''Izx+IUhiSCtOe0hjbyh8d0Qke1c4ZntCIl9VZm5XdFI9LikpVFY1NlJCcCF+M3NbYW0oYDZrXS4zSi9vKjtyXnh8UjNxe0E+MTdPaG85Qjs0aEA2VGUuOFJ7WUBTLnB3Qi5Ba0FTcXUvRlZYRGZAM2g5Yi5qb05Pe3t7XjIiMHN5Tnc6ajRqWHByRjBBTXg3KTwkTTplWnNtODNdVGJHTnR7d3os''@;'; put 'put ''d0JVOihpRDM1MUdDZCJkYlhuPH1nfms4Ri5tXWJfIiRxWzgyP0BqTW12NnhuQ0JuXVBxOFReOFBzLFY1dW9vT3wxfiU9MGRlfmolTWU/K2Nfcm9XLDRzd2JzRnFzXWBUfUZLUC4hO005KSFQZ3pEKUNFSD10ZXxsMkFzWF9COyw2O2U0OSU7RChYXkpdYmtXeng1ODlMNXprIjM2IUF+ajxnSzBU''@;'; put 'put ''MTlCKjRGLls0fmFMbTdJbWx6LG5iTVIoUDo0YCFdOHB8PV5rdEV7TjlsMkJVMWUhLmVJPWpXeD9bPGk0T0AkRzQ2MHljWVF9LlhuYyFian5HXjw3fEYhZVk7LEkpSFpeKDQ3REFzOm9KOSpvRWRaKU4zfUZma0RyR30iczIvJGBlYmdxZGAyfjw9LmJUOm1LYFQyL0pzMmRBfmBFUipjQkRvS0Nr''@;'; put 'put ''S09JWWQ8O0FsPy9KXWY5SUY6Ty9tOkBIND9xOlJtYCZodFlyWHo5MFUyczUsS35ARURbQExzcCUxVF9BLFdEK2AxWU5hOit+JTdGPURXNjo1QEhCe1cvem1aJHcxbyReNUB0YTB2cnwuI3E2R1BpMzZ4fElnIzN+QDJIWmg0LilyRVEieDQ+Yj4uR15NQ2FpJm50QCFoKkFfTXNoMl1uSnJlYEJX''@;'; put 'put ''UlU/T3twQH0pU2UlJjIiKVBld0hUYno2ZV8pdzdPQmVrejgqVyU8bDBTMk9aNmtXSUFWZWdXPXJnNC9YfFhia0lMQjx6OkdlezxPQHh7biZWV3p+cjZCci9OQjhnaWB5NWg6QDlML1diYUhUVU9zJHU1KXVsYFE7SCN8Q25LSyxOa2NsPU8/LnE4eitHJiNnPUdHInV6a1ZCL2xgN2g6O1VwcTUx''@;'; put 'put ''eDwscUhSK0ZWSkM3bCZtfVFGZVJ3fkpBWmFsdWBwTT0vJmo4MkJZWCU9LnVtWD5UUSUrNSUsMXc1NlM8dmx5dVJ0e3laLk1UZ0ZMJmNaeC9yLyM9VyJZLjddb3pmU1dwJUdJJDQ4Sl05SThoWUVNaz8mTUZXfXxDKG9bd2w4OjlnOXdiUjMxd3FuJiZ9bVJCOGl0UShnITIkdkRZW3lkVGgmJC5H''@;'; put 'put ''RUElMT1YVk8xa2wxaTtSSzxYRjdYI304dzFbN0VNQitOZCUsPnIlSSwxTT0vYDY3MFZvb19wMzZVITpnQGR8LDJfalU5dnUkWVBYZWtGPz59V3JQPllVIiNhT3deZV1iXTEvU3xHXWVgYTlvLF9dcWQ5RjdPNzhzd3IuQEk7LCx6eTZ0Zk5OL1h9Znt2ZyFzJEBOa1FrQnpgcCllNDo+R29gL2Yq''@;'; put 'put ''a34waTNyaCRYTXN5SmZ9eCN3RDVtSlhaLihyTTsvZEZOI281dVA7TWkoRlppPShfeUl3bSRLVzYuREl5Oml9O3lgcChPQjgmIlMrKXc9LypxTy5FJjl8RWUhRlRyPy55bT91MztUOG9eNkJ3MzJqX3l4ayZFKXdARlVgb15TZTozezorcnd5RXZSJSlvT2U1fC9+emxDTX5XIl0rPSxTWyhYRiRo''@;'; put 'put ''L1d6LFt6VmpuXVdSKWVzelJnXTV1U3xvUnRqfnl6QWhhTVolKyNkTk4vWHd3Q3M6WFBRMiMwN1NVWVBrUnpdN2Amfl1ab3U8VGosQCtYKSQpTzlfS0tkSUJlVT5aT3plckFFP3FecTFULkxILkl+PyE3O3QrYThtYkxhZy5JRW9kdTJKYD5POmdNQUFTcUdLd2JRKyIvdG1Ack1fUCZxQ2wqZSV4''@;'; put 'put ''VGVXT2NxemJkbyIwc3M+JDkqN2B9RGpDYjUhWDQ2bXRoNDNJW2ZlYEFdSypvKWw0IXMpRVpqRyx3JVNSOWghZjhLR1pke1pmMj1YKW8yVE9CZ2tgK0gyVSYzPldpY3F6ZzN5VUFRKDEpdTEmOS9laVd+KD5ybyhWe3V9aEtUKyJdcHFXL1R4JVtQe1htei95SXFWOm03dlYwRX4xRXJOQ1RsdFZp''@;'; put 'put ''TnI/eDRYakdLOF1lQFFwYnhJZFJOVEI6MzplOGhnbHU1ciQhLmFXLndyeTYwcV9lKndgO3soRTghOHlIJnlxZGV9MWs/ZCh3OnFQXXMzW3UzOjM2ekYufUhPRjpgVj0yLHZ8VnNoIXZUL2V9RlZPbF9OcDBsOnZIYkV2OE83Qn5ZMFNNVWlUaTshKTZhc194KjcyKmZ9fjR3WyNuZSZsVml1UnFy''@;'; put 'put ''JT5ndn5yNUdII2gpZHpLeWJXW2EyPmIyOE4oNGtHIlRWPWwsODJeKndRblE+a3lDfTkxKTdBNjEkSnMjJjI8eFhvKD5eR0ViZ3kxO2QkS2M2PS5sOCF4PD8heGhTcHRiQjdEJSNTWFpbWXNVVXAwS0p6Nj9kbjtpXjpyM3JjWGU0O0VBLzVxTyx8On5aa3Z+dUxKNUBrMDdmLylaM196SzZ5WF83''@;'; put 'put ''fk8lelFhQmtQREFBLGhISEJ0O0NeSmNjODRHdXJDIV19dVIiQ0FRJjdkWGoqZ1RSbnpsNmtFblJQdnVXKUF2KEp0eU52KH45c2N6ZH1YTWwxZE1UMTQyaHYpaE1obCVjRGN6SClSREVydT5rTFIuIWk+S2lITCRLfXFTVW4vbC59VElpPk8leUVEaXQkfDdbSF1TM3dQeXUwUkREdipTb2N3Rnc8''@;'; put 'put ''QzMofHliXldjdVdmIy90W1d4KVE+ZGhgMypKLC5UZUF5Slcifi9SOURUVm5fQn1UN1Y2fXJsNT97P3Y7dj1MQDNeRCNGVGNTdEo6dTJxfnRaUVgqKVcjRWlFNnFhPHtzZVd0Y29VblBIeUx9bl14bk9RSXhaTXA5VW1yLDJsJVJiaCQrQWVeVkxqMVMoKzdiLD8xSU9wNjZIVTNgJnJLY3c4cTVL''@;'; put 'put ''XjNWcngoWlk4KUc6STY7Jj5eRFR5P3ZdQHpdOUVLTG8lTHFffFJYQ0ZwYX13Mn1EeE80PEkuMmBkeGVSYEhzci9gdFdnJCs9QDdrI2RJJiRRR0tYV1c6byM0a1FpJnJedGJIVX4pSFZ8dWdULDNAcTNdNFl4OHouQF0xUEImQ0pDPn5BNlBvVFdxeG9ON1AjRk09PlpLQGN0R1tkPUNvTixXWGol''@;'; put 'put ''KzRGZFB4I3I9SUssfjFPOipMVH4pXTFGantpXXFfY1JAdS89fn5KSVU3Ymp0cj8pXX5xdiw7aWp6V296IzZGbWVDJXI/fGhxY3xbUWB0fXwqMUZsUmRTY3AzfUIodWxic3t6O3J0SUYkR2NvNXslO2gyYiU6Y2d+MX5AVjpRbDRnWDNuQyRMSmgxSiQrOit4L3VZKks6Znd+Y0VmbTlVWDt9dD1I''@;'; put 'put ''czQxfFdkJGBKTSJ0WGpSeSo0PEJTUmpiOCxCIzVEPE4wTG5SSzdoemF2bmQ/P0VNYUpaTmA7OUZTOShPLmBZUF5mWz1NXk5HYkVMPVsoa0VoLmEkezA0aE18L2A4X0Y1WG5RNFk4V0NgentOP14iRiwyTU1eZWpNfVRSL2BZPHdVRXsjPn54dXhzZEU2XXtfd3A5Tm9ve3hdSiwxLHJzZmdoTjJD''@;'; put 'put ''VnIuIjVRPlRffjV9Y3c1Uzl3PVAxZlp4NS9bPFQoKWtiTEZnbSwoTT1BY3M4YmtJVzxQc1tBZ1JVNkQ+V1ZhWUtCdXNYNHcjVmF1eVleMW4ka0EkOmVSb1s8MjdrMzZROj1WJHEvbkV0NjxSMyV6WU4kJHpOQD5wd2RXOz88bkphMmEwU2lrQSIuLjB5Zj8mZDtaOVRDWmZCNDE7X2wsNyNyQ2Es''@;'; put 'put ''ZGxGWjIuSz5NejwqMEtPT1N+Z3pDOkYvaFQjeXZ0Lz5TR28kfF94eVlAdUN1Tk98QCZ3K0ZaNi9NaVZuNEUhKGdaVjZbbGRbNjIqPCVeXitGbDJrRyR0eHRwVH1ML2UpRnRGRWlvV3V3MEwvSUpSTDVUa0FITDIja3gwQSVuL2tdVT1sajNnX2NjcmMuRmNEQlExMjZwYGNmcWZWSVBPVSYkOmBt''@;'; put 'put ''UkdAIVFvZ0ZrdUtUUz9lXzo4TCQkXjt+aSxdUEtWXnoveU5DSjxZaHRrT0BJW2BRN1MsQVg+MjxlT1VYdVt8U2UiNmZycFUid19AOCZhMTF3K15HIipFbGg+Yjg2TWslPEhhYFRPOndnTnUmRH4xPilUWSx2Wk84KH5CcSZ0LzdZPHcsfHYzbyZKfVlMOlNlOjk6dzN8WTduT0t5NXZTMjk4Jm46''@;'; put 'put ''SEt7KWlWI2tZbXZtJD0sRVNGVEJdZ0wpfStEWShsMFN5aVhSdkxiKWhAKzdjSGo2OXI2Xk5QMSg+THhjRS5YdndiZXcsRGUqeW1vZH5IKjReZWsmZmlKZk1QRVBPUjdGbzNSKzFxelA/b1AvX1RVYnJqMEhKLitTY2lnWFAyNXNhcFQpVjRicExlTWVuMkxXdm4mQGlMb0NGUVZdPXhvWjw0bGlP''@;'; put 'put ''eVA1KE1eKWMpJFdhKGxSZCYvR249TWA4XVtRUXI3JjdGPVVOJFVkeSx1VHcrbkJTLyFMKXl4NDU/dFdyYl12STR+bEdAOjBdTWhSRGRMYmVZdzFWekNWR2hKTE5ePntEezs9OntVckVRJSkycDZVS1ZNWG5yQjNiaW9qcV5XRnIsdzU6Uj9XRUVdeCZVViYoX3teSXo5UGtKLng5IXMzYGQ7Yl5Y''@;'; put 'put ''ZXVbU3diOEQrb1Z8KGc8c3B7XSlYeHgsPUdHInc7VU5kfCgsYiNFbHkjSDR1ejZ0alJdQE57LChwPCRVbG5oJDhpeFl2ZGQpKmx6Kjs0TnxLLjZOeTEpTHcwODgzJlZUViJmdjYpTEVOJkx5VVRec3xbU0VhWzVfOExpWzhNP2JgbDx3LEhzKXxzPyx6KmYkQ0EpI2wqTEtaTXAmY2MxeUByekVV''@;'; put 'put ''PkEqbShXaiY0LllYazptKytmREpHaGsyc2dMKSFGRnlJPHp5WCp5fVhTem5fRXJyW1pwfHl9Rkk/NFJPKGMmNEJ5QCVoQWYwVVB7e2JMRH0uP252PCMkQSREU0JQLGZCOXhtIikkcSE1KyxRaX1UQGpqTjNgbHBMRzZTcnFDdVRYJnExYUU8cV1UU1gzQEFuYkgvO1dVI3Q1a3ZaOzM0blI7QiV4''@;'; put 'put ''YXhFMzB9W1ZPQnohcCh1cXZuNEtYZl9VRnY2LF5pIXtiMS5eTmtsRXM4ajZCQnh0OzR8MktBITdPOjlkaSlHMjwzR1hZUWhlL0d6OHFSNDV8cDlQKFp9ZiRVKElyaXk5XTVDfUghZEIoL29xdn5KaW1bZHUiKj1mXUA4MiU9cGFxLlFnYGdqPWElL1Yodj1DP3UoIWdaXn58RiVfbUpfK3t5bylH''@;'; put 'put ''ZTlkemxwTHZ2JGJGbGR0PV1vbnB9fjNPTV80clZwdmJ6I2dNZy9nbVIsPys2eixQL0RyV1A8TWtDLE83QSsrdntjPzYzIzVsfGkiRDlHe2o0e0h6LlQ9VW16cXYhaEpMLCJdKnUsVVJleDNuQjpFZV04eGJpSiVwcmNGSFhrOko8N3ZLNzo5a3hqMG8xfDRIcyhnXVl2aFteQ2Y3Ty8ySmxtYUNt''@;'; put 'put ''aSZkfndDbkxhT117amRGc08qP3JsT3xVfU42aEVvVkdHY3pjXmtvRlZoLzVicThraH0lTW1iKnRlOkBWMDUpbCxoN2dtLjB4azQkTCZoeE9bTEY8c2ZyVkpOUypsKU9aSzc8KnBbcGFfVExLUGlhPE42KFd6IUopM1Y9Y3M8cHcpdEpmYTI2RHNDR3BEVmVCM1ByIyMlVTNYe15xc256cFl3aSZr''@;'; put 'put ''Rzw4Imx5InEqZXY/PUlCcy53eH5IcEMpMV1kcWd4WUZWPUk1S3JIbCpMKks+QV1JUl05VG1QWWJ3ZjdHJHtAdUw7NlZvZ3FTN00zKFNAc0RVeUtEWltGZ1U9NW85WW17XnNJfFd6QHM7dmJebVMiKkY0QlFnPEw4UDJdI35rKXJRJXk7OX5UZklsRiYxT25OfCg2Ing9OzVwdUtSdFE3X3Z7Rytf''@;'; put 'put ''dHVFdG1oa01KTGBvX0Vtb2d8cS4qdSUlaTplNl06ZiokX0lGRCRpbyEjflRpTE8iZ0xAezs/REwqIWYrK1MwRndpQUQidDBPZj1GVCVxdmJaPF5ad0dxL2ZqP0hBTUtoTn12W1tVYGV2dyk4SDp4VEQ9ciU5Yz0+c3pedSU9MF8jOllqe0h2d3FKNGBlTEV2Uy45YlYkbTlFNGA2PC5MZiZEXkcz''@;'; put 'put ''NDJ6aXlWc1BDazYoWUNaekhtQU1XO0huZVhzU2RSLjFfckBkQGxJUyg3Rj10djFFfXMje3kwKTpheFU1fHVOejVRR2k3Unkke10/YW9nSWcxLF8rUkVDMlI5TVo8RlQzK1hjOCMwP3R8Oi5xfU8jOlhWTm1XPSlFLD58Y3trNXFydzk4VElxMEFoMVE+Vz0jMGtlTSNQfHkzOzt8QzcweV8/IjYz''@;'; put 'put ''bHwxZFhFMjl5a1FjOVBKaUtUb25vZzwiYHF2IUJbR2pudmcuUXk4VGA8OHdmazA4VzspX0V0MTIybHFqU3wlLmA+Uj00bjZJX2N4cW4vSXlGIm1nd1R0ZTpDOlRsa0M+MXJta153dEdeTT0oWGxZU3RYOVhHbUNvXUNyOGBCIWE1NW9MZS9+PFo4YGA7b1RTdnJwXXJfeiF2VEVgS18rJVBiJns4''@;'; put 'put ''VDE0ZkJpL1FoRHFzPUdgezQhOGZocmFnOlt6NnQ6SD5HSkx0bWB7REtHYlkmUERvR0YpcVFAaCNtcCt2OWtbOFNEWG1TbTpoV2J3PS4yUmEmISZ7U3ZVKWZ8QExKQy5PaTI4LmR3cWBXRHUqRnV6MTNKVFU+Q1UqTD9TdWNpSFVsYnAsVnlnc3FbMUhWWFt4XyhXczU+ZjAuTSlBeldvaVk7bThL''@;'; put 'put ''KlN8Vy8paXAyTyJjUTZGaVAwYnkwcENiOFZFK0dwd3JZKHc2V0hwcFI+N3lUaS5dWVciR2NjOT5fclExOWk9ajlLZCNIWyFzPGkjZUAoamFYQ1lhQTJqUiZnTVZGVHA4VS9nPjhTeXcxRGJgb3JQTnhRTjZ9cExRPFY7XT5eR3YwJVJyPFZ9YF4yQFRlKCYsYm0xSXplJGhTLyhzNk5kbiQ5T1Bf''@;'; put 'put ''fTtnIn1rWDhYJk1sOTFFbEtDaTJVW100UiFDM04wXVRsIVVocnhSOGtsX30sSHIuQ2U9TllIayR1IXJGc25XMlk3d1UwL055M1V0JWpjIyJgU04vYWJ1SWRnKX0oS3dDImhtZyIrTmZkUXgmRWhlRGlJbWU4eUg0RUgjRjY9PDkwc1hteyttSzE/UW5XMm8vQGsqMDdSfDsjR2ZLKHhoZmlIa0o3''@;'; put 'put ''Tz49ZV1bRDsvSmwxMldbJkZdMiEufTskT1g3VTd0I08yWj1PTGpzV3JLZXs8QzhpRCEhMksyJERwO0J0a35lbX1NZVQ+W2BTQ3xxQyZAKDVMNi9ReCEkOiErMXVxTn5sPENwYyR1K09WOmNaOWtdNm5ZN25SVE40W1ZdRihbLDd3KVVdUG4qVWc2anNWYixLQDRibkFGSWYvTSNNUSlzeFYlMWch''@;'; put 'put ''RjZnJHpoUDc4Int1aGhKVFciWVREfklqdC9hV1BGbUdkJiJxdF5CVSMmX058Y1NLRyheK2ZzJXNEajN7UWNqPTZbZzx9VChJPGNxKURmaXRDXjZKVlpVKGMrUVgwXVR1NyNHLD53c1djYy9ReVVMPnE/QmgmdisjOWBGT2VJRTxJZXBOVGZLYkg6Ki5TbWZFJH4hNTgjXmo7NSlwYmxGK2JnaEMw''@;'; put 'put ''RWpzK21mSHhYd199MiJ1ZUwkOyJyLF9tdzsiVldOfXJSQm10Iyk9QFR3KCZ+RGw/dHh7VXo7RU9rdk9QZ2l6aVYiVnVdRHd6KlFOczV6ODVjVWh6T3FWNlNMNUM/O0phNWpra29OKCwzcHl4JSZNRHk+WV56YDNEfGEsbG1XdXMpfDpyfWxkOmVpfTZZSjBadDlhOzN7SS8qJFZLR29kMzJmNk5i''@;'; put 'put ''Jk15MUlXNzgkQD4oT35CW3AocSV2Vj9+bzEuUFJqWFk5ZlBra0Noe2E9PmNJNCZjOiZZQDIwVWpCTFsrbTY6M0tYTzs4cWpBRitEJTs8bWlLOzZvd2RyQk43IUMrTFVhOTc0TlZuS05SViFFI0dPOHRYZmFLZ2dNOW5qJkBnbjd1bzI6SUZ0PU10UGxiYlVIKEoldDgsdk9rKytadTZUUU1RQi51''@;'; put 'put ''Sm04RXojLnA/KCZsVGBMZVlSVFBLU2xERk1bP0smZzclY2dsbk5sQztbZTFJPW5LSCZufipDcSJ+JGtTM0xdQzYiempOTUN7JHpJLjxadmpmVTI9fWh5VGpENnM9SiJ+M3poRWpnZkEpcU1MM1tASShZMV5aNEddYTs2YT1TUk4wQ1V6TzgxImBMWTVpcGUpOXg8KD5lY3JKLmEzXks6N1JieCla''@;'; put 'put ''fTprRVFnMGxVIkx2Kj8lQD4/ZHlPSXBqW2QucDlmeVI5SF5BdXlQOGh6fVgld0tbYCMjUyl4TClqP2ltejUoPEQoMk5FIzQmQzIkK0l6PGpQYyJLSCh7PVl0dDEvfUl2cl85OlNmMFRIKC9MdHt4KDwqSmkrYUNWOTsje31VQ0ghcCFsVmBZdkExbyFFMF52RF9GXj9jfXxBdFVqZHZUT2NicjNJ''@;'; put 'put ''I3FMbioiP1VHS2EuOWZSUCJ5aTg7QnVsZVhCZjlVZyF8Q1hMUitdbHk0a0RYKGFNSGoqPXhkMjF1clFHYCYyL1pscC9aRl5jS2U2XmZHP1o5RkZ4a1hTTj89d0pUUV9wXkhhdXoiLE1PX1ZJNmdqX1gxVD9qcCk2Om9YLnhvPH5EOHZ3bmksISQ6LEQpbG9nOnVXZ0ZYLl9iYj9uZl9bWjI3RD16''@;'; put 'put ''c0xoYlddMiFbTHdSOnI+I348OiR8Y1RmKzpIUE08Tj1HQnVWdGJyaFtUTU5PfVsiayRubSlzIW9IWVFyPjFYU3ExNWl7RUpKKSpaaFN2dkosdDV0R05JdyRFYkh6MjlaWkhZTUNoMm5EXlpTaSN9TXlBLl1ESSRPVGJCTCMpe1F9by9WR2gvT21eNVZqRlUrRX5PYn5PQmN1Ont8NCIhYnRFVlQh''@;'; put 'put ''L0p9NiIub150IiVKSEcmfW8+SyxqeW5eZUlSa3QlezYjXVZYYWY0YVM6Ol5CUV0pIlFDUStYXkhFayUpMWdzRzA5Kyk1cklAKSkkIi9PYkU6N2E4cGlrYWkyQilmeGFFYm50XWhwcU9FcTpgRWReS19QUWpVKyJ+ZUBlXT97IVJDelE7ZzNkNSxMfGM/dGomSVRDLExOJkNgQ204MSkicFI6Xko6''@;'; put 'put ''OHZzOFhCKEcjNFguPU9gPDpeK0VSSC9ddC9Qfk5jdWNWNykmLD5lV1JHbX4+UUpIZ2d4T2YzMnR7ZUFkZmJsXzR1dCZbRkxbaktgXUt8MmU3fTZBakNxYi9DWEBwYm1WZmg/aVFgbFp2ZixPVTApT0puLmtFZldma1hqZ0sxX1ZMeWpBSXNLe1ZOb0lmKyoqb0R+aW5bQ08ze3JjTnFfXUQuSWc3''@;'; put 'put ''aHgoZ25bV3w1UDJSakoiOio4anFuQkVRLGkpJUtTQSI2JHZGbUBRZWJ0aUczQC5OV3JRUG1eY3BjfUY0ZTQ8Vix4MmIwQE9rInBnUyglLkUpJlNrfWhJNF5tPFkwQnl2UkJmezJVNVtkVFd3QT8lIWplQnd2X0c+NVArek5bRUdYRXNUIUR8dFMwZVVlVkk2VE9FZW1rVTw9O11oIiROSTlwKTxS''@;'; put 'put ''Lk9AWUxiNzopWyRRcVBXL31laVZsTVc1VTBdQCpAR3UhYFgre0xmOHolZlBDc0p6ei5mNyhxK11IZyV1QlozbkVHU0kqQ1EiMnpZSFZESGA/L3YjXUc7NVA0MF16e19jcG5xa1RRK2tlL0lHNy84MilzcCN0XnZeOWwoZFRLSFUucHRiRV5UREtmajlsI1hNVV8pcmooJF1hZGhlZltOV2J4TSJ+''@;'; put 'put ''enJSeHxYM3hRITg6anhVcTgmYzo1bWhFPUMsbD1LJEhQRHQ/ekFkNERxIVI+T1p+Klh3bzlfQ2FqY15pYE5reFB6fSY5fiVKXzpJMTE1K01VNU9IUFpKcVtlXn1qS15oIlFZYHtRcEp1bHdnSTptYms8R1ZbRUR0ST12SnAmcCx0OCVXfTo3ITFqOmlsXU0wfmxrWTAhTkhpaHdeNT9VPmBINlhY''@;'; put 'put ''dT9XfF8rX3A4NUkkJVZ4PTIyYWFwSmRsMHpiMi52W2olJDQ4bXBqWStKeXNSeShCWnRdIVBYSX0wTXxWaj5OXTMsY2dybTJWTXhbMjFXM2l5UWQlLi9qNWM1TVUoZEdrbi9dQGt1OyNyKD8yL1QsazhgIUpabF0hZ0FsPmYzTVl8UVBDKHNNKz4jWGFSe1k6OisoQ2YxLkJmRGt1RyJ4eEo4PEdm''@;'; put 'put ''PlcoZDBTZU47e0dSXjB3YVZ3UXVFaTh1YD1gaHY1YVMqV0p7U3FtITJ0TDVoLH49W3xpWEEvb0xJeDgpdm1zOmdWR2kudz52bUZycHdeTGB9I1QoIXh7ZHImd1hsV2lFejAwYUdHZHBBIkMwZlJdLFpHNX57RXRrJU4zdVhTaH54TC5QXSFYfjFHYGExWixCRHBFWFdgdiR+bXtzNCkzflpiaEVA''@;'; put 'put ''b3l3TH5Ud2Z1OWYkc004OUJjcnpIcG19cW88LEMiSFU+PHR1T2VMMVNqWl5+NkZwXWpfS055SCg2RUB9fUw+fVREa3QmMEIkfF5HY2V5SFd6XmpPbjF3YU84Ky49bTxaPHRBfllSTTVhekhlUzhRQ3gkRyhbT2M4UEVMcWpvbU5tc1BkO1V7flRxIUkjYlBVWD0jeFEhbXsiVzt4bDxTQV4xO2pJ''@;'; put 'put ''Sk1VO1Q5XVt4cCJRQnUwJk5DaEQ1MzchO35BfnxGbUFBVHF4fWomYXtecT88aWU5SyNUZEBbJHt+eiJTcyZzTigmQThHNWhmamlpLE4qYyF0Oj1EdXkobS98TkxqemJueSwkL2RTJUxeZzpjNkxOPm1sKyx8W3JwTzUlTjopN1thLjM0JjZ9dix8RHBUemg6eHAxXmVPKX1xRCxaZTF1ZmN9V3V9''@;'; put 'put ''OjhtbkJ1dCxuMzUhaCw5RmJheFVqUVV8RUFxY0czPVM5b1JvOm9mfXdDeDVPLzxeJGFDVXJmJWZSIUFfN18wTXA7fSR+eixsfUpKfGNSbUJyMGNMOCY5Sk5uV2pJJHZjLmRsPSIxezgzS1YlTWxmUlYjZVElRG4xZVZ9fmBOTTNVYF8rIXZCWj91a3UhZDd6cFZGIVdLLjRTQnE1SCpCIUpkNTkw''@;'; put 'put ''TUM+Nkc1T2UxI0J9d3khUnhQMz98WHZrJlQ3clpPPDtHJHlQMi5wO21YLmtuSU4/YHJDRF45cmBPLzc0QV5DOGg7ZGZpQHxxQV46aW90KlFlejg8Z1oiUFMhQjFEQDt0JWRkXSZ1JndRXVdIXk5EMHY3e0Y+MDZYVWJxLi8reXFsK2J3QjdlPVVUNl5ITyl+empwMmhQZ15mODlOZjQ7M0J9UHNm''@;'; put 'put ''LllSKkxtaEBJeGlvWkd3ME5VcDFGRWE0V3lrZUIyPmM0eig9PlBERWp1Wz5BdEQqU0NmWl5hRnBFNGQ0NWI3cG15N1hjbiVxT1poaSM7dDYoJEJvUTEsIykkK2c8TEVmPG01Sl1DXUI2SWN1VCJdZDZuMis+SXp5VjljI2U4eS8/dD5tdTAsem5iaFN9NSwuQEFTenlZPiFQMV1oY3FkSDBDZls+''@;'; put 'put ''I3ouUWYiJV5GfT5ZO2VSLCZYYXt0fnBVJUo1LnkrdGY1cD9fXSJAOjMvSS8zOTg6Wl5vZ2cyQnlMU3RmYkRMe2JfaVk6QXFRLys/NUR2JCY6RUhRTCk+R2d6KXBqZ00wcnxuYFFXcVVyNFR0QXVLdFZzQFg6I2lzem49OS5tQXtMOzk2PTRZUUEiJntLVFlCMFpUbDtJQXhRXiwpQmZ8L3l0O3k7''@;'; put 'put ''Qzx9QCF5QlJMNGx0eChJaHldMDsvbiVaM2U3Z00sUyNFO1dKVTJbNH5LS2pZRitSMlhmVjlZPzdePDxvUWopLl1mcCNde2gmJGIlNlFESVkxZllpSGE1d1glLjp8UFQ4SFliW0d6SnxlZHhJKT1hKVtQXyguSnlDZ3Y/eCpMOCE6Z2k8NiIia0ZmbHwyUStgbmBWWCl+dmdJd1IqcXYzP2FeUVdj''@;'; put 'put ''QEVHQnswaFNUUGNHbTkpWjprfilzPkJSNShzQG52Xy4hS2drSG5reVh9Nllpb0kvc01fLGd7LGB6Qzd9JVlhXjxLSyE5UzNbSDF3UChRW2xIbjhsY31mWEJyKHR4Kmdndl01PHFeOnlHITR2aGJ6M3B1Q19AOnNhRkhJQj10P01jenMyQTx7JTJmfjUxXigzVURKVFVEI2xwP1M/WzY2b3pabEMk''@;'; put 'put ''eGtfJEtZLE5OdWprM2Iqc285VUAheFZ3b0h4K3dDR2lxXU58d0x8WHZhaEIqe29zfUJlPU47JVJMUSx7fSF6dVN7Oik6dl07IlkxIVNTZylre0tSXmxZe0x0flhjclooRSZNeUNjeF1jOl1OdFtXY2NReCFMTEAwSCo0VkkpSjB1VyxYOVNfQ0RES1d4KlU6I0IwS0RodCZyR3hSaGs7Xi5WMlRm''@;'; put 'put ''fjdEMSRsYFg+Rl8vUWxbe3duIilQNyZeRV1tPC4wUy8zflZoNVY0OEI+TTJqXjR6cj9Ia3lOLFg0IS5KIiNMT0xSLFs+bTdFYEooJDUpJiMhaGVrW0U5P1AjP2pQU2xeVTpPblQ4bFJiOH5AM0VDXV5qfEZpLjZdbkphSUk5M2JOTnQ8M15VRlVkX2J+dVIxeFI+JXhFbWhhX0pVVXEzc1ZFXWFy''@;'; put 'put ''YHt5TDlOYC4lTmklbWIxZTlYSUUpaT4xb1tQcGoqb351cX4kQE13IUksVUxQdHkuUT4yS1JodGRnT3N+MURfVHQzUy92MCMlOS8vLGhZYU1pWGN1WXkiJDgjaWpuZ21YNzJvTGlsa1FZMjImTVpfMElJaWF5LGVoInoubkZdUkYqdE4/X3huTS5ZWCI5Wn05a08saFJsLkMwT05PdWIlKENqeHNk''@;'; put 'put ''dXM2X31Rb257N088aXBDcGgzWCt3b3RCNWA+YTdNbEMhRSZXfDd+emdwLy9eV3w8JSZYKEpAPltXakMkOnh5NTN4JjU9cTBeW1BKUW47Qz5SKzJIKUkzQCQ6QV1CUVMzdjxeMlRHUjFJPVBJSEBaQCZUYilwbWF2WCVRZTU1R2JjSy8hbUYoRWNkVlNHeV94d1JQRDdvKnNIPEZoNCZpfF5YRStQ''@;'; put 'put ''NndKUD0jcFprMC95UTp2OnRsUF5Jc25jPjNSRW5wOTcxfD9Ob300SGc1WUl3dlY6NStKaEk4K2F+Y3VdNEFaW3FiTU1VKXQ9c19pfXIyfEt8alU/Yy51QkUkPSpRRiRSTGxZMzgoTG1bXXI4Lmk/eXFCN25kKSh4bFN1WSY3TU5naCFNcnR8aWtCNSRXVWkxY3pme11uOExtMGNdeU5TLHRlaj5w''@;'; put 'put ''OFBLWl96YT4jbUlhPD0lNkRwc05IPW8oK1ZafHVNUUl3UilhSW8uYFBpZEVDRjYjclghL14oXyprfl5+VkZ4Yn5jWjlzR2x3Ij5gYV5CY2liLCosPHU5fS88L0JeYiw2SFQ0I0ZoUF56ZXBbbGBLMX4pMkV+SUJpVWF7MjhyJXJAXjg9Wzs4Y3Y1MFQlJHpOIVFUJGxkdldle1AlYS5Ld0krKyVS''@;'; put 'put ''bF5GWl52ZzAreD1JeWx3QW5jJX5bZ1B5e0MlMTp+VzV7a3pfaSs2LkZQajxuVV8uT1NlUXRyfSV5ZWZ+cj0xcHs1bnU0PT95Ii9pWV1sMHlzJExtX1pYbSFIe3dwNSNUTDFuRHN4PD8uaT0/emBwfW8qYXRFTD8qcTF2RGBYWC8rRSlXNzl7R1VYV1NfXnJrLzVaP181Jkl8Ji9SZUEod2xyeHEz''@;'; put 'put ''L1VDVSY6WlsxUnU3MU4iYmgkZHh8UnNNLD54JXJ5bHh4cTsmZ3pKIlV2YVEzWXw7bz8jZ2U8T3g2L0AzdE9ae1M3KjxdMS8xVk80aGQuYT14MXNzVCQ9eV8vRTNVKVdsRz1OU0xsSlc3d2BPK31nJDJ5XWp9eGpnRWt1OG86YDA0VGc/bilVKiFiMGg+JDMpPFgodmB0fG5UezxFckV5RmNCOXAz''@;'; put 'put ''bDR6M1JqV2Q3W2xrV15MI0JrVTNqZUBHUVQ7VnFGYnc7eDkrQnFxWGhbdmZiL25bPDQmUkFUX3YoKysvYzgxWSpQTG5GREJsSUhrZl5JKHVJb20/JHshJW0mPmYwaGFNSCs1UU1NUHZobHdBYjpGOnBzITV0KEUiV2BDRzViaF9QW359NT9CI0U9PHQvdzM0RzZEQD9rPUdmbWNLTWA0OVgmTmtt''@;'; put 'put ''PkZxbEI7VCw9ckdhJFhyI1BXSUJdIS5mSG1ZfiF7fVBSU15HVE9SaDdfeV4uciU/YCN2VHswWG8zT2d6MzFzPkUwX1U5eHh3ci9hKk9RUkw2ek16SyRNflIpUmV6fUA4cFUwP1NzblZiMzYsXX5RMXB+N0VWcVA4UiJHO3ZnN2V9KTtxUDtRKiY6TEkmUiljME9ue1h5O2xSVyVGYVF3NXZYaGlV''@;'; put 'put ''QGguSWpmbz9QSzpmUmRxQDRFbXBwWmtUSE9XYT1iSWc8TTx9Ojl7SnMuWG4pJiNgVlFiV084KnRfRS5sT0wsS3lrI3JXbV1sYiteT3RjMzZNK2xtY2JRMD14JmpAfVtiIU0hYEBPJiloISRqOWtYP10oeF46eUJFZ2psRitVX0N9UygkUDZJUjBPSGpicElLc0lFaSxgU20uaGBeUTY2ZExQVlJb''@;'; put 'put ''RldbWTRZOnZrQk01flgkKXs7fGR8Zm01dzt2bDhBdTR8RHA5NHY6PFBGMzpVKUBnTEYpLnFfOSYqV3AofnFRdzVoKkpASjJuUCEjKzpCbU8pZzdXZnRmcyxlZjQ/c2Fob3VWJDZrfE14UStZVmlKQksmW2lWfVt4eG55NFs5TzV+WEElVzE1JlQsTVFiL1U2Y18mUH4jd2BCWFtwPmBeMF9UNkQx''@;'; put 'put ''LHRLWXdiRVtrdENzb2BVVHhDTUFKO0Z1VVpJMDVlZD1sZDV9ZCRbRj84XzYlNX5FQHdLSSVGQThGPUdzaHRmLmZ5Z0h+KDRxM1FdPiQybE01TjFEWXp4SWUxLDg4PCNvJVEuTmpjMmFvalZwZVBjSC56NElFbEJXZVhAbkw1W01aYnElSS5gejE8eCNARTAjcmFleV82bWR+Mkh3U3JwfUomRkBr''@;'; put 'put ''Vitoa3FMP1pmU0w9JXs1VDFHbWdvSmhhREc9aD87UiN6KlZaNDdadGFPYjxDSyNWSSxReTcxXUQmRzE9UkpTQG5SPX1saGhNMjAhXyMkd1RGZ0ZaYyUmLiR9R0p7OGVSRE8lelhALkBedkswNjZkbz9kLEZOfTVgRiRmTzNpNXcuYSQ9dGBjSiRgfG1ePFlJIlg0QDk/eXVZJWp5fHRGeFF4dCt5''@;'; put 'put ''e007bDc/KFlZUWhpbV42bzpHWGh3K05rKk9jU0k/KGtqWDJ1UlAiVVc6Y3A/N1AwOXY6QjZQYy5LSUdIWl89U1J5elNHLCYzdEA5YmUiY3VvVCpdKVNkNVAyVzhgXXNKKmksXTRsTkU5VSVbJXFlY0ouaiI8XWldUmIhW0JxLE5kPEUiSHo8LCY9MFdrO04qKkgxOjp8RShYVG80Knxba2I0aW9R''@;'; put 'put ''OlpLS0pkSXUod3I6KGF1QjxGTFZVRz57dTpUS3tyMSpYXjlGKSsheEZHT297UTtNXUNiXS4rVT9JUU1EUml6I2puP2hlKzFTJTYvLFVsNlhkNz18IltPOnI5JkchRTRCPXMiNEEwd1BFZjokd0ZmPEsmUXhIY1FOazpJKk9XbGFxSHJnVE9GLHspdj9WVkY6RHA7Kzc2MlkrN0FPbCpKRzJ8Z19x''@;'; put 'put ''Oy5hZCF0WVtfYUR3V0IydF5LOGhAeFVvW3dEdD44WnNSKG1eSiE6cnM+cHd1dn1lIUo/ZH4kX0pGJW9GdHwkTVFgNDJWMEVoVEg9JlZVJlUrWlZHeFBZU3FwNEtWQEtyc21xQ2QvPV8kI2gpbFlZWVZ1TEdzO1pwQEBmeylKSCpIQmpFakhGTCY6NXg/fWVJNmV7OE5qRWN0YnVdQm81Q3UhMlFJ''@;'; put 'put ''JjE1KFddfj8mbTZKIUIiPlNKNVl5XX5VRSpGW3g3fW0jLyx1TXVkZmRJaFNGQyNsakNBQnFLZz4zfj4xcFNedEdDWUNrck1EVHlxXnQiamdoTkdDMkVlUTAjJnpEZ0U8d3V0OkJMVl5QXSVOOSpTWG4ocFV1NUY/TDYzbTZ7cFJNL3JuZm1wT3ZET0Uua0g7fnkwPV09VloxL21UQFNAdHhIYV9f''@;'; put 'put ''JE89K3A0IU41aXRJNjF3eGkldltyIkE8SzlzdXoicz5FUmlRImdbKUByT0Q+emIjQDd9LzJtZWpveDZ4NnYrJiw4c1dOZW5pNEAsO14kIz8hSXtWPERhKmNOaHA3fTRMSXRQez8lZ2xgRTYyXXxpaWZLc0JqJCJJIWxHWl17blV8Ij52PSxkYCliVXZ0bStDPnlOT0BVYUg6XSVsOSRvLEM2P2cs''@;'; put 'put ''bks/REA/Yy5ePHtMIlE5Tjs0K3peR0xQcmFYSVV1ImdTKW9jKnxmOlZdW19PL0FUJTMvLkNhezc5LCltU1hVT24mSXsxemhXcXVoYjo4VWx8VlNNNGkwemMxO1VvITgoSVROLnBJVDl5TXR5V1UwKUZ3Mys7W1c8RW51ZElWV3VWL3I1R2BVcjo+NEtPRTdkRjR9RSNQcHglTF1QOipASVN1Ikxm''@;'; put 'put ''YDg8ZVImVnhVanA5UCpISDVeODIrQmtmI3lCJDBuO1lBNT5zNzkjT153OTM0YFI5cHZiKDM/Rl05WD04azIofEpVMCJqc1h4cW5kSU1BcEM2TWNJaksmNWYsSEg7RnE3d09oV1o3PCU9Nl9WdWQrOztpZ1t+diN5XkpGOnMjSDk6YCRDdXJuRmxDcTFQK1ZNWyNNVUM/VSQ1UzJaa000IXVFKUo0''@;'; put 'put ''LyxMR0xSL1JQQk1aOXZ1SSFESDVzWDI1Vy87JEVsI0dFO19zMUN9bVVNeEx8eWZpYEo3PkhtV2YsVlZrJns7akBNY1Y9Qm89YFIpZjsreFkoa2I5a2w1M11YZCs6OT1OUCNLP3l9WEBPW0tibEdfLHtMXXBoW30qXU1dWnJLcD4laWw0UzUsTXlyMGAjQ14+cjo7V19jJlYydzh+bjN3KS4/a0Ay''@;'; put 'put ''WDBPVV0uM2o9Qyg+TW5PMDlUMUFjcytDOyFCTkdhUGRseCp5Nm11SFdBI310fnxoVD8jTCVGViFAdTApd2BXVW5yT3xUMy84Y21SMXdJQFJsbU0hazpiIjJfVHNad3ZAOUpRWGFSQmhYMjAobUFpVTBWUEl3ajolX2lwWlIoJHM3YFIyWF0qI2NNJHZGOy59aCkyTnNHenRCbWVbNEtpYFt1WTNb''@;'; put 'put ''XnppTTcxQzlbY1MsUXtRR3RxISU0OXxYMlYic3ZmXTNbJDhlT34lPEBBUll4UXNpakBmNWQwLFF+R1ddSWgoQDtWWlEjMSFmVy8iQ1pRLEZrVDMsX0lFZkZUJD9LZGIxaiFvfFVrb25xfnxQSHU2Q14reXQ2akM/WUxHdj9JR3QrKilRL0hxL2A0Pl55al86OGBKImNmdVA6Qz1XRkxfSmVnfkpT''@;'; put 'put ''c1hCayFsSWloQG41VnYsO1NyV0JxNix1cF1gPGtnaigvaEd3eUZzc3dpV2VAe00wLmNhJEskJj0vYTthXit2eHRtcHRqL3diJEJpfnksMVE7MmBEcSlMOkdXL3tUd2lGVTB4ayZkQTN6bmZfQDk+ZyxAIUVZTit2JlFNWi9LZkBiNSJxZkVmbkkvXitDZWJpeE44cFRAc0NaLmttK01QNHdPQ3s/''@;'; put 'put ''RXRIWE06YyFpLGckWlFJOGtkSHNOKzEwPWh8azoxeWkvT1s2ZSFFSHQvWWROVFNWczBkN31RQklSOWthRyVgWG5iZ0R5Z0QlUmJ4d0BuKDc+V05QOTF9VHlzVDB+Kn5ObFpRMzZyK0pgcDl1amQuaWVaU2UySDNqJUo/Un5QV3RDeW0jYzckRSV1eS8jQFkrc29HXlRVKFVbTjhuaSEhW2VlM0lV''@;'; put 'put ''JCIzOU14Qk9lVlM0STtleDsjNCJ9fDU8bEs6TEVmUTgrclY1PkM4QENWZjMsUz5jYXwhdjclNXZPcTMhd2MidVlzTVg+STNsdU1hITE/SGlQWT8ofUhvJV8oYT1MTUhkZC8raWN7KV1OJj9HOiFCOlYoeDJKPzVNc0FmJShLXX4ydUc6Rz58JnIqa1BjS2hFKz54LEM8dGc3bGZzUXc5RWV2bVhL''@;'; put 'put ''QkZWPFpePGdFRisqdntjU2QhWDgxP3FhQVcpWlsoaXNbZWcmNDdgam4idzVqOGZoZWlyJjYzUUpCalgoOFUmQCtbZSZ6ZGUvcj5Wdk9femorfERGX287LmFzIypiR0YjfHNLWjU8W21Ae0lyQVJDPU5DV0o2dGMpMnJBbU5keWhaJE5NRjQqcE5iQFBxRFN3T19iMjcjNCw7XnBRZnZ5YS5JU0Q6''@;'; put 'put ''bk9uKyhbfSN6SX06LkhoLilyKEssKiokY3dRempOKlIiYTlIQDZFI1NIazdnIlJVRkNNd3FJYDwyRGA5eSRIZ3t9Ll5LekFCKj56Y1MrfSI2ZSF3eDw9YGxfcDdyWSlSNlddIzBKLkV3c3F8alJfdi5gSHc+KnQ0Ki5adVMsUTQue10iI2MvcD91R1U1dGd2Rl9iI0xfRF1hMyNjREJGckA8Ojgh''@;'; put 'put ''ZlBFREQ2fXA3IkohZjw5Qjk9WXh9W35iJSRlLDYhVltLKj5NZlRAdHQ0RHkqeTBpQF0xd1dsNCNqL1suXWZ0fj5ZT2loLEF9aiUoOCk+NkZ9d1M0Wi8jTFM6T20oL2YjTyZfMHhhQX1dcj8kUEl2VjclR0t3MD07X3phdztMWH4oMS84N2hRI25yL0JDXnkwfXFzeXMoIiZsKlhBKyxqKXBMQE56''@;'; put 'put ''fHY/QjdSWzZBKSw7Iisqb3J7VkBOPnsjSWQ0Z3FjZiIoVGxuL08lZV1wSHl9S1h4SGpjPiRZMiU0SGpzcV1yTD5XaTBeWWVWYDxqeH19LjpYcDQ1KXhzYlM3ZTtAYWpjelhzMWhFRyJ7YHl9fSEqP2VJSnRuYmpOLyhdbU0mQX09WFFAMlFSOUN+fFdYY0lNPE87I0t0QkNtN2ZZaX5IV09MUExa''@;'; put 'put ''dzJ4RDVXU1hjISx2dix4TEM1b2lkTjlkV09uVDlRJDVbMV1FajRvOFB6QHddTFNgd0xnK2swN2hVXSYjXjlRen41L2dAM2paUEN+KVFIbio+L2wwekJNTWhJNDg6cTozX1FTLi4+ZUw7VlY4TEtsW1d8LF1+cnt6aUxBIUwwN0JWTWRMaF5uVTFBWHFUTDo2aURKVyIuWGFoREV5TnFaTnxRczUi''@;'; put 'put ''Pm9VJkRLNXhyNEBZV1NYVXc5OyY8fk1jOGh9cFo7eXQzU3tdZj8jISt8WUx8KTBnbCIpJGROayY1MTYsI01EKzlxRH1YUmkza3h+TzZrNjtnNWJwcVlDPUAqdCg+VXo9Xld4JXNhNGRKSzM8UWZALykzT1dJM3djUSY2TCtCPHkvdnpTZzpxYGM8OXBfPUNgUWA3V1RUT3l4eXIhbVpoeWY8YFlP''@;'; put 'put ''fHVtbSVdJWYxRXFQaG5NdEhMa1lmdyUrIU00JGV8OlozenM/MHdKKmVeQipabXR1OW1yO3R3JEUwJEVObFBiM0U4VzdvY197emNjN29FflUscTdTOURGYWJzX0UpZjsoeSVhRnVQZCllPiVYKWdSS2VTVGNVODlkKn0zZS87TmdXK3MoRzomLkRfMHE+eypVYnowOCUlQ3IjJGYrMD4iejM/TVsi''@;'; put 'put ''b05jdlYvRkIxN1BxdlM+bWx8fEpYcVYrUHNPWV8pJTBWM01VKUtUW3lZR3JDUWltbGMoMDdQMWRvIywiOEtgb29GTExEPExafXdXfGw5NDV4PGNdai9NJEl7YEh9VHY2YyRsd2Bha2VbbEdoTG5fVShnV2ckMktKO1I1flc2fmNjIiFPU1poVXRPUXZnaDZsfVErMjgkP0EqWU9lPShJVVpRYCpb''@;'; put 'put ''MX44RTZSc3dvWC9kN0x8NyM6Zkdwcz9TVGRmdlA2U0B0NGBfMTFbdERNSUdUZVJ0ZyVgUTBWVTF8e0Z2VFVyfHZ5PE5OQV4+I0g9ciNVOC5fKUtueyltP0B3NiMzZW5KXmdKYHVQW3NgV3lLMUBSSUFZPlNeIyZWJnp9aUk+Z2A/WmBlWHpJXzRzMSlndE1KPCtkYGJrNFlSaz4sYX1tblV8XXpb''@;'; put 'put ''T2ZhI1FRfG9+LjpZdXRoPnlweyJbZiQ+SnRQeWx3Y0YrWnx4MSYpfXphZFcpUWNdKUkibTMrK0VLd2tiRmY8Y29RJnhdc0d9a1ZPZHYkVEs4NlRVJnFqbVNJU05nQiIkUjI0K2M3W19ZKjlfRihdXzRdej9JI3hZNyxwMGM/RT54VjJZU0tTe3hNYEJpckBiKXsrbztCfmF6Mj9rSGRIIl1WKStf''@;'; put 'put ''PTQ1d1ZyVCZTYD54V1NfNjhxSmA0cj52RzQycEI3YXdsTDYrUGlRcXt4KSp5cWQ2LGNSbXdtU1BtOiQ8bS99PncvO05nOGlpWj5uL1lPJCp6RExUdHlhTUl2WixlbXRfakJRL25XZ0RtMStoZ1A3cjZrMFhfcVs1MV8wL2NIMSE2XiZQPG4haGtELm1CYnd0L2l9OU1+IUttU2kvN3wzK0QjcTZC''@;'; put 'put ''Pip7ZSJzdXBDYShNXXQreTNvJkJSTDx5SjN2a1J7YnViYTdiYUhsW2pbeCUxbXlafnF2QEM0enUjRl5Ra3BxQXEwJVYwdTRDOkIsZ3d0Ulp0MHp8X2FyTWlpQzNYQFt9OzVrMUJUN0d8ekAvKz0za1hyeXFkOCEzJFFJKTx5Py5oNywhY3lMVmY2NS5AN3A1c19lLyNzOF4xVFZkeiNwMiJtNUxf''@;'; put 'put ''UUh3Kl5gUDAmVF1SOjFmKS9gI3BxL1t5UyE1Py53aHRjVUE8c2xUUmJUbWlKSG0jMHNwZy4vN0VsTikvITF9Z3AkZS5NQj5tNFc2WjM4fD5fKXArRl8xIWhyITdyPzU/VXokKnZxOE8mOD5OaTxefmZtcW1MT29teyNrKUlmX30/cnNHM2lxW2YmWj5mRHoqcGpidlVIW0R7Ql09V1chT1ouWVhw''@;'; put 'put ''KDdCVnhxTkdDQD5+ayhdVn0kZ3wpbXdoP19zXnkjPzsxem1IfUVVZGBuaFovcl1OSFgoLD9ENUJVLyVKN09GWlk0UmhvLD4mNE9yP35aTGdCaDMmUzNMVEwuUmVJRD9lIzImKHohXT5kQTp3M2Z8TWg8dS9+eXdORlVnfU87R0kyUUpgLkhxJDNtT1B2b3VfI0pEUSR7TH4mJVl9MVlje3opbk1j''@;'; put 'put ''N2pqZGoreDJhP1BTd1F0dV86KmpoJTB6fD11ViV8fGBKUkF7Lik0YURgUiF3IVIheDJsS11QfD4lezc3Ul9QK1ZDQW5kYCNLLksyWiFRQEp8X0Q8WH0+NkIzLnl7Rjg2PFs2dVpCfm5vQEBTPkw2eSMybkwpRTRJeV1UO1QlJFdHYmVKJmRjWDdfb0F+flduOlpzVTZ1NDlxdGBTIkleIShhOVdj''@;'; put 'put ''OCtVLDBkZkRdKz46WEREbk5qPzxXTDBNSWxaL1V3Y0lXdDNDW198WTp7a3orZjBIKGdSd3FFNn5rLklySHNnc0NKd0l8TGE+Z3V7aDJ8RFsrOkd+fCpkPkFVI1dvPiU+XlNAY0NTNjhydyg6YnsrU3x+VUZIT0kjRyJfNj5GQHZLLCMyPWFEblRrVS9IZnBMWHNuU2dSUlU+RklPaVt+aFo/Li4z''@;'; put 'put ''TDxMayNpXj0ufFJ2XSlpYVd3QiJRR3xIZV18OFs1Xkheel15TlIxZ0p4JCRQOj5ubCZgdytjRD4mUCsxQEIzdmZaTileUWx4bCpSdzVnXV8kc2Uxb2RPI09DWGpfeihLVnYyQGw8fEFjfXJXU2ZqIyZKW1Q1YTlUWzxCeD5ObytvbVRTYCtaQlkyQSNrYzMuS09jXiRiZTpVfDt9LkxHd3hbSjAl''@;'; put 'put ''OV5dIip6Q0psTmY4aFdkKHw3LCRmbm5uQm5ZP210MTZfVDordWAvL1dyRUt5U0FZdCZ0KWtscTIlYEQ2dWVlZnFUY1hWd0JQXitLLHVhU0l8KVdTbiYiRFBQQXk9bE4vaDM+ZFNJNzVXTnBCZk49Qi5mb0pvRms3WjJZL3IhJE5MXik/WG9TZClQXV5kMTB3I2MkbHQ6QmJqQHluJShzWThJI3RH''@;'; put 'put ''NGhJbSVAeWM7L2RzYjUkKiopTF1aJkxHI1RvIi8sNmtAPiExeUZ6UXomeXYhYm1AJjpTWF8wIT4rSUprOjxtamU2K0ooKi55QC5GVDc1YTNOLHxofUZGNHNOZC5zTXdWQkVfN1swc0cycDBPXnUwR0BSMlBQPG5zOywheXYwI01BcU08NHEueXJVN1hARmFUZXVGL2wha3JCeVkrY3RVYiNDUiY+''@;'; put 'put ''W2siZ245Wz8qaSQ+QVd0Ql51NjhIP3VbbCg8ZnFEMj1dTlNqYnMsXVdlRi5jfEUwb3Bhc1k5eldlP01gVSJUZExqdTljR0JFYU5sbmp0dXMwVU08UEtXN0heMzcuaDdRXXswZHAhOFZ5KmZuJUk9YWpxck82eiF9Uyg2QFVTV3tzbG1+MW00RngjNCRWa2YhUG9hUjd3ZyRRbDs0cDwkWSV0Lm1V''@;'; put 'put ''TkA0IVB6YGgyX3hGZlNhJTYyMyFubXMpfjAiXVtJOk9kVFQvckNvISsseCw1THQ3PyNHM0F4d3dkVGs/WEh+SV5qZH1UP3xFeFswSTI6M3VYVWxDMGYlUXI0OSV8ejw1I3FEe3pqMWhHImVFbHE6ZF10P2lGYDY7VkQicWZTQGZLM3ZRdHQ3N21gW0NuaiguVzcoZzomR0dtNm4iRDkkVixFTlBa''@;'; put 'put ''MihZWGE5JFdPPVtEO3YiIXNsaXphWSNJNE8pe2kqVDsiVDRANjB9PEFNcWAjLGFlXzl1bGcrKUw8W2hpMHhxPEMoM1ZhMXpffkR4d0csT2J9Vz90VFgkIUhTIV11RW0iI01FKW5ZKjspUy80OD9fQjJWXV0se3J0bG8uamA7Mz9ZTlpPVUZtUyN0ZWkhQ1VLeVtZZyw9T25yaHJGJXhVPGJkUVJo''@;'; put 'put ''O113ciV2SF9pV1ElO1Qpb2JzdEtfYlN3Q09hOm9zcXAwPFYxbm5xKGVUYDgwWkZEX34sNENYai80fDM7InM7K0FeVjskWz9ea3Q4QTZtRnIhJHB9ej0rPyk5NmJfYH5bJldhcUpofmF5Vzt+QihgbmshfCIvVzs/W0hNLGpJfTtpOkdIUm8zOll0Mk1EZHVaSUwhJTF0VjJDSk1JUlE1eyF9e2s0''@;'; put 'put ''cWolXltXPUUiO28mfXwuajxscGxubzJSZUpgfHFsXzVHVU5xOzZsOER7VDlRIWtbZWJXaytnQHJTSCpVJTUwPHA+fTVuOW1kaG5pfkksPFlfK1ZjNjhWU3FGaUc9b0xsLiE4d085O3hQQHQmcFNRRWBXS05hKEhGOWVUZitTMl9jTC9NVTsiYHlnWUU6SUdQY0x5RXE2Q3B0TGZWNiJpJH10JktP''@;'; put 'put ''a31lcDVXUk55KHxtOH54bXAhPUJ9RXtkOGJHejsiN218enNOOU02QVBfSDVRSEUoXmJ9L2ZkKi85L1tWKWdGTXdEZDErel1UTGsjeDR4eTMmI29vJiJme0ZRWEJGc2lzbj1HTmcoXTlWOWdmVlpCfGR6QXN0QkNMdy83dH5kQEZdcEU/SV08P2xyOGJnd3lqK29XL101M0QpLGxuUkp8NCV+SkIh''@;'; put 'put ''cip6PG82LFs4aUVIKE42KitsZ2pCaEh0OWc5Z2UqVEZ8PWpSO3VZbi98fDpqekB0fVkxYkA0MiZjV2lZMC8rb3QwWGZsQ2xAbS9zOU1uL1t3dHB7KjB1JDdCfUFfeFs0b2tTJCYxMjAyI3hsO1UqMih5TDMudVNgNmZ1QkIsek83L3owbzxoUTo+dGVLNTE3LCpIMlslZF0iOzhkPDxwZSF8aClJ''@;'; put 'put ''MEdxWmMzY1hvbGokcGxPMztxM1QqcWM5dlBLTjJ8enwrWTpScTs4IVFEU0l0ejB8KH5rbkp8QEk6bnEyOkU2QXAjWUQmUmZGbkhHXVZNKkxQKXl3P1hhbjpAR1t0aCJmRShfYywlckxWXU5zYUQrfXZzVVA4I3RffGgzJkMmZktdYz1fd2xEITZVLC9CV28wLGp+cUJtdyJrNjRkRix8d3tBcnl+''@;'; put 'put ''UTcrWSxxW1YxblJOQStmPGNdem5sVGZRVkUwZDphb3tqeT4scWwlKmFDckNuNCRxViNhbilnciM7bE1QLH0lbyRpbkFXb1VyfWJAcV55c3ZJMll1X1tFQVsvVC5WSktZPVpHWUs4W3p6VH0hVFYiTkI4b0Bvb1lbZG5ecGB8NW1GKlt1bm9vJEsjXXV1T0Y3dChTRmg7YmomRWNbW01DW34mZ0Ql''@;'; put 'put ''fEVrLldeeV9tMEA6YHo9IzxmSHwmLDc7b1FiI24+WCFTTVsiVX1Sbig2QlVrUnEvW3dVYFtPQ1NldDkqL3VhJEZmbSxqfEZiaU5eKl9ScHZKPXpiZ2FKbENnUXVMP1VnaXxRZzd9Rn1ONnAhIkVBbTQuMWRrP3NqPEY8P2NZRzZmVWhVRERlKlZWRFUmcnl9Plcra3w+cC8hfCx1LHRxMVA4YUw6''@;'; put 'put ''XTh7TWp7b1JfdF4+UHM8YFl0XmZ1LGlze3NAXlttVWtNc3xKSlZxJlo9dX1ARzc0Qi9OMCNdRmEmPj5wXTtuZ1NJPW5nIT9RS1EselBgJllbI1hmQ3JpOS5zM0A4TnJ+N2khL3Z5dCEsYjFPcmIqPVFbTSVYJDVCUUc/dWFHKWlAfV5rPDMhKSs4MXB4W0NTTGV+YHdDUXVFfkRdVFt7KVYofSNU''@;'; put 'put ''ZUJNVW9qOlJbQzFEJlpEIk9GLEVoXzptRUlhUm9ZX152OXhYWlVxKXJqfDpNZywjeSQ5RyI+elt2LjwxQU9FVGZ0PGBvVm9lZWQrMGZCNlc3Z3xPV3MxMT8zc09OQEJ6aVU0Nlc5aXFCcHQiOk5oZVo9UihYQzBlcnxhVTwsaDl9PH5VblhjPmx8VyghWF5ARU1UWjhHZ2U9bE5COyJQdHRIZWY0''@;'; put 'put ''NWVgb2B4OzYiWzNSPmRhTUdySExOfWE2UzxyX2VGbGpbJm9hUTx3ZU4mL3NMP2xxYWlPNGskWFZRfix9bCljKjhHQyNXUGtWSnB0IUJ0TkA0fHxUelU/IWp1SXQ4cUN8Wi8kLllaY2d0Oj9oaShqXUFkP1cvU1tpRTBTJDNPRTFyN2k3QHA6X0dxOnUrViNaVE40NigjUlN+M2UvYXhranJ7YkhU''@;'; put 'put ''WHhOMTh9YVlqbmxzZzVRfCYxRXwlIVA1WDp8SD9zKkVYeldHKEt6RHZjbUxpP3ZWJTBAYDBEaDE6Ui5LbDQxZFA1ISh1O2EyV0pBKVp0VzgjdlRrOUZTZ0pNa1FCN0xnIVtUdDZJI048SjUmcXMsfXM7X0tIQkhwK2t5REdXQnZ8KmF1RCZ6XzMvaVpTJT10S1pGQzhrSD14QkopeXVVbkkuKCRf''@;'; put 'put ''S3NXMCJAaW1OSnw4YVQuM309ZEgmRzFkQ3YlbHx3TT4jaDNNbHBwc2BLP0FQSzdkdmNoN3lOJWNLMWV+dTUxKG48T0FXc2xrbjVkeFZURS4wM0laW0giXzA6MmIvMjJKVClBVFBIUGl0IWg0WD48ISVNSEUoP2tAa3FoV0YpJExYNVguKCFCfjtmTH5lS215RiwmRXpvMSRnQGBCMy50JE83ImlO''@;'; put 'put ''Tmh2VDsxZlltMiwiQFlSLlpMPWlobkpxQEo2WUBZdkQ/Ij1+LEdlYzxOS3pFPnE3dixbaCNSS19+TGNGdnhaPVlHXW9gKFhCYCpmbTMrM1opWVh5TSQ4Pz9YYEZYdHk6eUBWJmhvUm9OeiR6SHg4Iz1RWEgiJlsrXjE+UGw5JX1jRnB4V0JbNSVdclsmUnZITF16Qj0jOSI4Z1JsK2I6T3UpbHhL''@;'; put 'put ''VF11bzwwWF1LcWQiXWEjMVdQYlYrPj9AYX0mUTMhUzFSNUU4aH5jT1VJSmlSbCpeJlY5W3c2XXdxQisrdW5GVXhEW0twa0s0SD4lNH1EQTorTyUoM0Q1UHJqaHNUZURPcUBWI3xtZ2NZa2NVfEJpeGZiYUsrL2liWjhZcUdoWlFdP0Q2fC4zbUJbTGBFOmFpXWI6RTp2L0A9YGxJMCE9VCY5fkI4''@;'; put 'put ''T1pWTD42VyN3L3Y+UUlOM19lO08lODpSYm4kOVcleTpgeDUoQzJgYE8jU1tCRWB4eSYhTW8/S1Y1eVtXXW89azAkKz85dCR4cEo0NGVmakVGOj1JMiRQMGw/cXF3ZmVEOSoyeVhrPS8oUWQ9UT9yfF9GLCRnfD19M1BjfXIuVEU9bnk2JShVc15RNywwYVJObndEJkpJOFp8a1dbOX5eUnczfj9i''@;'; put 'put ''P2UkUUNKX0tyLitkXWR1dXw5SCN0OitJdUh3XjUuXXVEZkFZPzwrciVCWlB7XkA9ZTNQX21nX2RsbV4pa2VrWVJSZklBX25HN01KNXorTz02OnJbSExqRXNePn06ZFtWIy9XYn00ejRLJjRBaVgxPUhrVD1qXkNULDI8aiRrPkMyTTBZVz0jVStjUyZbfDdZaHtBV1hVeUJCVVtlKjF5a0UyaExP''@;'; put 'put ''RTNOdjU7Ql0iQWZuNCk6fD0qQFhOVC5NQHJbOlgiQkNzSjphTnhwSnpzfmU2KS5bNjUmJDluKSVQdVk5ajNKMkZtWENjTnRNRUF7UXxEOFoqeFI8eWJyRXIhN1ZHRzkkYlZTMDAqaGFwSDJiNHxISW1zfmpwSCIrcE81ejFJckxfT3NyWF0wJUxtNUc7Zy9SdntVM255OmNvM31AfkBbJWc6VTwm''@;'; put 'put ''b2ZxUTJXaGFHWitlfTdTWXNgfn1GJmEjPUJJI0xUIWNUWF8+ai8+cnFMKUpEUFN9SUtXWTp9fWFFLk52ajcoZiU5WllhWmxFcT1uI2shKSNacUw0TWVDTntrQ2NVJixEcmpuSnp1QjtjZiQsaHFmPFc/QzBLel9Ea2x+bz9uOkM8IV8jUGpDR2UqU0xxTn1zIUQoRTw6WWI1YW9hOiN5NiZtezlT''@;'; put 'put ''dzsxRWhUKT11TUR3Z258NCVKNC87KUF1dSFKQHtDM3k4WV5nRDF8dFR4R1RlUHRkeD81Q1U5SHpiKSNbUmg9cEZ+WzFlXjJONno6czw3Q2NiO2IoaEZmfF52QHxtaz9GWkpWNkV7QG9fdG42JndbeDxnKytZaD1oTVM4S29HbjdyJTNeeyU8R3hsPSFifVRsMkl1QFFfXWUySC5Na3BqcyhPeiJO''@;'; put 'put ''Uk4uSWNLMFk+RXVCKkMwPXh3cG8/VjtkK2gjPzRZdV47PjUscEk3SEB5Tio3dzpgRkR7b1oxZyhkPXEpenxmQmczQkFQbXlOdiJyOCw+fmZsPkRxOE5qL3ssX0c/Py4wW0ZaaVpOeXdrMjY/TmpZVDd+Knd0PENwcG9uNXhfQDhmTmM9djcqNVlFTkNTcS8kSjUpTlksKGhHOTFXIng6cVYhXyFj''@;'; put 'put ''Nlg4T0cwZ2QkR1Y0Q1lVaFl3amliKTBbV2RoKVlFSCRDKCVYXmdbWSgxQkhnRmZLV2xJbCphfE4hdXdgJEgzem59Uy5jdWciOW9NUXA6cW1tVHJGaXVrJnZTJSZjXkJNOCNtJnFvVkdQUXN0JFJyKGtHdz81aiMjMmxjcXlIdFI3fXp9Xzk2Uk1+OEJpKzZZOyF+UWcwVXsuekZAOVB2X0hFOyZM''@;'; put 'put ''aEUxM3ZdU3g0eWVuIyZ5YV4zQFQ/cFRdSGs2UmBbayM4fHBKZVhjUip5NnE3R0pCdVpCJH5HbVtsWXxgd0QyZj4wZDg9clBwQmNwWTZXcjFYdXtYKG82VD1iRFZtU0VUZWVhO3oieGZkV01+bjomdSM0OmB5bmN3PE1jcSVGQ1MqRDN7JCRvY2ojIyRGQE9DITU4N0ZCY3A2KWYsXihANHtvXzYy''@;'; put 'put ''JVMoYlF7ek09TzNvNTxfZC5FOzZfKztpTGRHZ1BXKkZ7XVBsQWVsSUwoeDYzTyU1UixAcn1idHlQTzxQZzoiSSNzJkRhPFdWOD5sUzErazxZNz8vPXMlOHIie29UcWB4QH1ze2l0OUpjaXpPM1MpY0lga1pePkFaNEskaWdsKmcsaigkXyQ0WjxTWz9fUjZkbkRIVDtDKlpoSmwoc1MuI1dZMzlx''@;'; put 'put ''Q3Y/PVcoLGEqOzQucmh2TyVVeDVQUURAd3U1bT1QP2BBWiorQzNRaWNGPlR0WUh0eEVFOlhXTn4jX11ee2hRU0BVJSxePy94ZWRuRS98Ukt7bV54cmZpIitZNS9XXntSKSE4YywkW1o5cjcuaWRBMXFdfG5uW3Y2KUdzcis2MUpKOXIuIXN9KmJHZ3BOeEJ3e1ExO2A9JSYjMTciRTUybndNM0xe''@;'; put 'put ''LFlJfVtrJjtOaX1vUXcmIXBFST98WEgqZ193OHRPOjJzNCMkPDpUezBSVnowMV0pSW9IcV82X35uYGNLb28vO0VQVkwqYF1tc1Asd1YyT2k0PW1hflpFI0B7M3dkWDE5PiwvWFRkeWZnOFtMcVZgazclS0x4Kk40bl5qaCMsUWg6YU5kSyFAUStDTjsuLkIieGk6InpDO2kxcXxhSmp0MTpQYmpq''@;'; put 'put ''I1ghWGMlR2tTNj5AOjRmSU5uKWhXdSVdbyZtW2pnLyg/ImxfdzBybD5jald0OSx4YTFAP0Q2X1lXdlFfX2I6czJGK21LeHZkOmJ7PkImbjZfY3RxelgoNmVaMVYxK343YGZ4b3p+cFh4QntMSmV6Okk3d15ZTXViI0xoPVJkNWIrUCpnVSowMz00ODs7TiY2enUuOS4vYEYud0l5TzhaaU9wVyQs''@;'; put 'put ''LCp7blpjJEMyRV1PLEVVQClNbFo0KXA+Tz9wbmBWOVRkRHw4b0JRaVFbcHBuNDIyUWVaUzs+cV54b2EyZDtwaGIvYShPTnlyT3VbSiVmJTMsdjJFJGRCRVlxKTh1SS9hP11pbWFvSmYieFpwYEhYfG1wPHdaWnpeSlROXkd+NjZnZ1FkUnUsM25KMzQyejVvNmJIKktEeV1iT1lrPkUiMlgyYjFe''@;'; put 'put ''QG89b0BLLl56fF9HQUZXM3hlYVZHRGddW2RANntFeGJZan5WLEZJRkp8Q2s1YHlNSXl+bzpOYzlxLEFlJSl0SVYyWWJdSztzZFJDJCE0JDMqUjQyTnxhRVhZKVo3eVdNNUhGIlY/Y0wyXXJNLjwhTTdJeTlRVEVjQGl8Z1tqYzxud0A7SU8kPT1VXV15SkgqcnVtUng8ey9EYVskTXZhSnlVXk1R''@;'; put 'put ''cXheZ3UmPyVBKXo1Z1NeeCJIV2NEemZdKCt0bT5wUFJ5I2lLNzJTNGY6UjRrdXxZc2Zac0tgRCFpem1fRW1hd0skR2hSIzdEOykwIllkZ3BecCpCVj06OH5waj1nMWJQQTBSXjhNQ2FgLipKJCQ3d2RSN1g6cDpPYDRAU1s5V2oofXJQb2EjQFAqSmtnJilbWE5pfTxJcXVSRWAzc3FTQFk8S3JC''@;'; put 'put ''WiE8OSFfN09BWUdxXU5qTyU/WHAqRWdfeSh5bnlve3dBWDpFW31iN3I9ZWU6NDhuLyE+JGAmb0ZGRChdNzQ3QHo5I3gpV00jO3cpPjZ3antFNFo3ZU9saHUiKC5zZVZCIkNjek5lYipkMUl8Z1RHQEQufF55fGcuSlZLWTkzJH1sRnlPYE5yY2BmTmQsaFE6ZGFRUzhDb2ZBXzBdM19aNnt5bkYq''@;'; put 'put ''LEBaYms9XWlXNm12SXlEO1ldcGlhQW9SXzZZcyhVJGpJYkVAViEkYGhOcz0+YlU1cSwjUEl+Ul9iY2t+TmhTb19IKEJ3aUJYNjF6U2N1VGRkMzM8YXxiN2s3eXddSTZXdW92WzQ6QjVuOzFkIi9feWQmWTZOJT5GTUs0MmBrK0VWUWcmfkBPekxSdjFtJDw7LiErMWJUbVh3KFMpbk9Hd048U0w+''@;'; put 'put ''bCUjISNnOD9IJmdfblVVOVJfL09FRDljS3tuJTFIM2tEKFk7THElaSFDekshMH1LflddWFROTTFGQF1+WTxFNTtXSixKKipSblk1QTZ6W15+Z1Y6Ri5Oe3x2fTVQeXpYXyNMRVZnK1JxPkV+ekFxaSh5eXY1MXlEPHVzWWZAfml1YSghYUl4PkVFcWx4a2N8YjIvTzg7bWdvcD4+bDBuNXo3Wlp5''@;'; put 'put ''QSpuMTVWIU97OmgmOHVyfFApR1FCPDxZUl1SYlpUWyQpbmM0WTVOU3JPd1NpakkyUDJ9QER5QSRrKEk9YFBHZl5sYGV1OSg/aERAUjg4MzhBZUhzSzd2Z3lRcGMzQH18M2kvMT0pbVRlT1ljQH17QnwvP2sqMUsqVS9fMGV+JFpBbXR3ZWFtbWdhMWNRJVFNaD80bVQhfTFpISVFfjQ+d2R5IjZt''@;'; put 'put ''YyZGR1pnWlFHJmFQcEEsbCMsck4pSlVvLi5YO3BsNF1nIlo6JE1XRU9oVmtmcGYqRH1tJiVzMCNIey5gfTFmX3NYY0FeUyFiX1krJE5LU35RS3NpIVtwRjcrV0VxQz8rIzMrR2hPYEQjdG8zUERKQE1CUHRwWmJiWmgpYTxlVz1wPjM4PEsoKzY0UH5aUD0ydE1WMHBjLDo3cyRRN0RkeixBYlsh''@;'; put 'put ''Om9VNDF7eSFOYXZVVVFyND5URHBCZzdsRD99fF1oYTBRaW5YbW1+W2Q/X0UyYldXYV9xITpsIjY+Ik9ZazVXPyJ7VD0wcF1vbU5KWnhfQyhiR0k4USJaZmpNVHdQZFt+QVVQV1ZVOi9zYFNJe0BSTyw4NThbeld+IztTPDYxI2wrVDgpd1pFPjxXSW05KEQlUDY3bDV4NlB9WEloNkNBZmJAM2hA''@;'; put 'put ''OWtMIWp0JXckNVQibnJKb24zZF4wYTtGQ2tmPShsVlYvSkRJOmc8LmY7ejNOcH5QTCIuJms0XjBMc1J1Kjd3QCpCLnp+fnVLTiMoYyY6ZFlsYGJ8V1IqUSpHU2FzP3lIKkM+K1ZeQCRjaXpiQj5YY0pGb01AKDNsYF1dSkgiVD12IXxxKXFRaXhkQjNUMjt4Kls2N2Y9RENnR3xPX0hmU1srPnRe''@;'; put 'put ''NnV1UCZscFk3TlBLOmRpfk90dCJVUUNbd3J4SVIzeGcjQGBDIThndDhlJC58fTI+M1o5cyQkQGtjIzM4PGtFcFp2aGZKOmdIIzY8fmlZdVRvMzxvPnJsYXlvK0B4L2ArLFJnWEdpY0g1azRTUjFWdm52R0JsY1diOXklYng/OjRNdj03bjteUTIlfH5leUhdUVE0YXsiXiNmQ2R0OTt7L28pQFs5''@;'; put 'put ''RkQ9IXc7ODwrazl7aEJhe0VLRGd7TyRDRi9TcUpja0M5QWVhcDcxJmt5WDY9X146IkZNfWEkNTovRmt3RE0sc1R+VDNSX0U+Jng4b0xeWHdlTWtlRyYub1lLb3RDey44LDMlS3lSeW4vR3w1ayw3QVd7M2xJODRuQEZyP0h5N29oPEl7NEZ7Z3ZHWzguVlJYfGw3JHFZPk8uMlU/b200LnpBOmA2''@;'; put 'put ''IUZFOz9eeyZkaUV3VH5aUj5rIT5Vd0RnU01mMGBjMFYxV3JxPVAkIyIlVDl7Q045Ml9Ray5HNUpHZ09LYXd8ME44PUpBZGdrWXc3OnF+RHhzUUxSUkxFN2U4OWpxJjJddSEhS0smLGllOGE7eChYZyU4ZCZMOGJXbyspeFRGMlpQQjROSTp7OiZNYiRbVnwic285T2koKmtiSkZ+LnlJRG05dWlx''@;'; put 'put ''PnZrPCIqRyYxUT9+WyVfcHhURzRBb1ttYTVMbk1HIUx1eT96eUQrZDI8b2NfKHswQSJ0UnMwWnNSLGZBamxVTyhrQmFpe20uTUJXaVMvT0Zaa25dSmFxN34lbHgkTToqfExWNk85QDp7TitCUkIyN2hNNzFqMUc2T19jN0wqTH5FMHVFSU08WE9OaD56eV55IXEkYTAra05De3RlbFJnd0JXbGN+''@;'; put 'put ''IkpyTll3byxucSsqVUIqdi9yeVdWVEdheXVjPkohQyJGKjZAPGZWO3MzRzdvdjh8SVh+dShWWmtjUypyU24yKTJDJCR5U2s7MShnQTtGZ242OGZaX3RSZ0BwV2F4KHpGNXovNFRXdDtHL3w3P2ovaWo/JGk7I0N4IX13SSRvWW59bkBsP3UyJHoqKjN5XkdbWjF9LjZaM2ZHX2JPPSRaWilFZ3Zb''@;'; put 'put ''bkZoZk9dNkcwZ0p0ViVfdUBEXmJxfkY/SkBAQH5zfEJ2SF4oK2Z6K2RTd3ZteGUwd0kyKVF2Y0k8LzN3fis2UFNTJTlidzY9Mld0Q21nUlM2LCIlX2JsVWplZkI7KDsrT3NAQElHVmRzUjMuSipzSjFAKU99IXAlOUdAUT1bLDFyLyY6Z2N5ZmRfS1pKaS9WWWR4Yn58QHY2eCQvXXthLGsxV0Ra''@;'; put 'put ''QGs4dC8jaE1FNT1LPGp4VihmMDNhQit0UUlnW1pAfHosPEM/KjdyX0VONEtFN04lSnxCS3R4cDpae3w1L2dNM3YjM3szeU4vRDhEUGw6VztXXiY6REBQTDVSQFEiRjdNWHFVUiI2O2R1NyVDOn5QVmRYNUdPNTdSaE87Unh5YFF8ZkIvV2ZzeEgseWNSPjIuSyEiVHlhNU5Ddls+K297eTE+MGl0''@;'; put 'put ''cDluXnIye2hOOFA5JmozNG8zM1ZdMF9AXzpnYzNDbWQpYU07PUcqflAoXXdSNH5lY0wxISY3V1tkN20lamVVMiNHNmJhNkJLeyRucCQ/XXEhWHx+dyFTNilvJlB+ey9MOjVfKjE2WmJqMT50SVVUYFpGTzhuYl8iPVtqWkhfYnhiJT04LlpAdmJGX2VMYlFeayJuPlshK1szfClDOXtuZCQ4PEtb''@;'; put 'put ''bCohTUU7ZGUqPkxxQTN2KTNoQmQoVHNYbno8Qz0jciIjTykxUjYobkshZlFWJkxCI0dGMkhfeSorQDlrZnojeH45UVdReGRjUkJpQl5CMiZYKEV+O2hxUVpMSWA+TSVjI3E7WilXYEMqc1hMaW4vdF00JCs2NG5rTiREO2d8ZWhOXz5VT0JuWkVmZGw5W2NNXyl9dWhIWEZHYltIbDYjQUxgIkJ9''@;'; put 'put ''OyYlMjU3ODhkNUc1ZTUuWWp7eD5KYypiRDkleEdvRiowPV5XeGQ/d3p6YC9VZylPMi5oekU4Pz5yTm0qdkp6amVqJWVFfT4qVGV8MENdKXc7QUJPIzYqR01kIjguY3BIIyl+ZXZUKCNMdDtUcW90InNiMShXKz03RGVjTVQ/bTsyZHVFYVBOemQ+WFB7X1A9N05SdmEoK1UsbnFxejxYNV1sQjgj''@;'; put 'put ''eDhITlRDbTNAIkFaQVNubXV4PX17Ry5+XlZqPUBtNTN9Rk5VfE5gU3JrVyVFUG5EV25GXyxgLlFsJjVNKERDOU5tcCUsLHQxaUlOYWJpMy45fVoid0ddX2c/W0kiODxraChKUXIvTHkubkBKfW4xaStqRSM4djFEeSNfbFQ3ZmwjaSRTLC9pdnhici9JVj8zVHhkXTF4SVgrNVN4aktWTkZUaWZl''@;'; put 'put ''NG8sW194KkEoREtZWkdDPHE2bDs0XiQxU1k0V2NfWGRkKCwzY1t8czB7WEokJTwoYylPcnVYb2JiVnphSE9ueGBlezVlfGVNWkFTSChdQEhkPzVUVSRnenxYLHsqfS54VDQ4SHhwK1FeWUZfdSFwNXpUczcyO2FZfWg+TFUkNFp3bmkoOmFdNmEsWD1XWUc4VWMuUEdrUWxVUnVgfVc6b15+ZGg9''@;'; put 'put ''NndFPDMqc25tTSpnNVg+JjkmSHYlSSlVJV4oPjFeVnljJi5KcnUiZXVeQzFTJmsiW1ZMZSRBL1lSVXpZZVpQVzltOFZbOCJMZ0M3WjE8P3VYR3V9YzJLOGMwXi47XktuaX4zbzVxYW1gU0lhTDxiU2ZoLjsoInU3Y2ZsO2IqWVl0anRQYUQkWEk/W1ooWiM8ViUjPzBIVipYfCwsVTpzXVkidHNm''@;'; put 'put ''dV9hdHksLFU3cEdyMG5zJTBTclZkZ3pYWnA3TjJwb0BqZCVqaSp9ZVJufGR9OCY4TEg0JTVkb059M0ZKKUk1ZVNQT3ZtWkhHa0JWdm10OUdpSXhAQndQKH0pc1YhWG0zaTF8KHs8YSpsKz91aGV+OXEqRWlVKEplfFkvTVc/XT9DLzxFY0lwS25kMFN3dVNxVGZQMSRKREdlKDxAUitRQHJvQCZT''@;'; put 'put ''ciZMblBdfFVxOSlVOTZKZyszOmh0fDo2Tlh6JT1tS2peelVKXjZzJSR2c2xfWDJ+RU5NT31QTXZZWGUqdHtzMCg2eGEwP1VlS3JmWXklLj9DJStyTXooOXBGSnVFK3NlT2xxRnlPIzM5SThMe0ZFTCFDeCV6cDN2cl1feHAsPzFxRzJ4JEVlSThOVXpYQ0Q+dkNmVy9wKTBeMWNKS1BrWWU9byU4''@;'; put 'put ''Yi5KS2pJU3UjKSo9YyhlN2dQYnEwKzpqNEQweXBEOHxmQ2Q9TFdvIT8oZj99Ll4qQnpAbT48TUB6OlZ6I1hMfGJ4YUZoRXU9SypjKyF5eXRwRD0kZTdydmY7Q117aDVAMnYzWG0iRENTeSs+QHw2NDl+cTYzQWBDW1t4bGIyUWwoRj4jUTE1TTRCNnZ9YkAlPk0vNDd8ZXRgWmkiKDZzWkV8anRW''@;'; put 'put ''ITVCe3FPMz4pRyxmUipLPlcqXVJGQX10fn1YYXdbYT0uTVhFTCt7XjFqRTk6bXRHJG82SGY1I11hUVlxKGtiKUI9IUJCdSxaTV1Kdzc4ImlWbmB2MnY8XV13bFNtOz9CP0FobV1NKWVOa3xRWV5uPlVtYjhQQUFVUjx0aX47LyxbLFBUP3tIJjxrZEAvWytIVixhN0ZifF0mV2omc2N5PDspQzFf''@;'; put 'put ''RyNAWDxUd1IjZkZ2IUI3NTticntCSlFeRktGTkB9Mk1rU0xodTtiT3RIP25EaV5paTxbXXZ3a0dfOyZGYXJaKS9ebVVwYTBia0BzXXc/aWJlT3VFXWB5PW9wN1lYN0V6TXtfOUooKXs0XXBvJmAhKWM4Z2R6OCU1LD0zOjRvJWtGRWd2d2E7N1NSO3lSQCE1cmNOY2V9PyY2SVdFcjRSV3lMUV5L''@;'; put 'put ''TDRKc3dlOnVHVWppLjF8KmJhQztJKGBQYXcoal9ybz5rRk00VUJBP15OKDM0UUldOF0oZjI4KE1Kck1LZ1ZaXig2Z047XjMyRW42YFJFMykwdS4vWltpRTVCNHx9NDU1fGVXeW8kckNxMDkjJmhmPTpNUVNEaVdzLzFbKWZKKXReJn5YbEt7SmE9dDJFfF1vWmR1WSkqRTw1fTRFNjYrRmU0aCtQ''@;'; put 'put ''b05vSkdxNSomdTQ3Oz8sKX1veT58ZDBpaWU9cS92M30sViUoZmNTWVE6ajN3JF50SSV+elRYWE40ey59amgrNVhjZWg9ZHUkNkw4fVQ9dFMhVVBpY19oLmF9c0U0NDYlW29pa1RiUHtiNSokUEdbNFFpd2pIL0F5RXhLI2tPVyU1U0BkRVFRWShEdyZaTVdGJDo2JDQ1PDxKdFB1bSY3M3xDN2g6''@;'; put 'put ''aTVaaVU7K007UDNCNyg4ekArU15sLkR9JVc+W0ozeU9ORSlxXi5lZmpIIUUxOnZJQFF6V2MqYCpiWEhJdGl6bXphaXtOXjQiPFJ0KSpZfS5wZ1JKKz9yJUspXjNKOlcoUEZRWUlpPltwLztgN0w0e2phcF90Tm1OS0J2TUhreHJuInx5Kix4cEF+OmlrYFg4cl18PnpQMCFURGpRJX5CWUszImlf''@;'; put 'put ''Z2t7Zm5+OiQxQTJ8JmV+fldkSGE/ZzU1T0dFLE11bXd7KDBOdVk7VVQwOmwmQjs3UCZNbVZvdXhMUXNBdSs2e2RPP2B6YEQ/azprZWF8K259LGFMcW1jJl8scUp2ZXhvY0tsdyJDXSZLYGx2PzJkMTJSYFRtNm9Odi9QfG9QcDs3TzVfakg7OT5hcDo0fGJ7YX1zelhRKFlVQn4yfWxiQF1gLHU8''@;'; put 'put ''TG0kUj8qUmVGP3huUWEwTjcuaUB6WCswLCtFaltTNFE7VXhUdVU9TVAuYkdIJFtve24yWEI5QFRBfWxqWS4jajF9clZ7WHcvaXReTnkiX1JxUjgrRip+XVtTd0JkbSpMOmokaX0zSjBeY2chaE5TblpQOE89ZUI8Izh3NFkpei8rY2Q1eTpPNz0oY1VZYUZgU2dJJWl1LCozVWU9OC88T2kqdUgy''@;'; put 'put ''U3k5TFUuKS51WEt7O3Btdkc+dXtRWnQoMVk9XVpWaDp3LEgrXlZZX1pXY3tFaW80REtPOSliY0RkX1o2UVUuU0htOVdLKEVXP1VDIkQuWzpTPkJLQC5jMHZTOkNKbns1cUIxZVJzPzpDJTlGVGkiO0t8JC59WC9KaXR1c18qVT5KOk4lQDg2SXcmdi42WUtVdlt9dU9BR1U4TjEzbG1ady50U1FZ''@;'; put 'put ''cFtiMVB0MzliVm0qWnE7OmhoYSU5fU8yQCxodipCPDskdjtPUEQ6KXpQSX5SKERjfWpSQj09JDJYTTFpVyRTQyV+LndicHlocEcmXmNydn56ZDk3d2s6IVFGOEREcUU9PkNMMzBvNkNIVDFeeV5BTF88R3lWRnBsbndLZDJKfUw6eXZEeGMvZ35jelMrL08zPnVVOmpBLjxKKShsfDd0Uj1mJi5w''@;'; put 'put ''I3c4VCRKYmBvQEU9PFpBM3t0d1tDX3wsYGU1KEMrXmVjcWlBfFlCby99OmNPNyU1RW1hO0ZFSzRDJD5XfVkkUCxfL0lWVk9kLFRfME9pQjBmWEJ3alV2WU04Ozk2YSUkTkxVeDxZcl4uejlTLGlzTSEzPH16P2FVPCpwak8uaCRVQFphR1JLYk9+M1UoWyklVFZMQypIdXUsYVJ7cSw0RUAsMXto''@;'; put 'put ''fnsuX2wlRVlnTWR6PWxgX2hnYC5MeD8pT11fd0JXdHxkKG8xVkVhdk1wfDBEY1pwcVl+M2JGfHNaQl5pamIxW3UiXXBPK2ZiKGUre2lpOkMvZ1Ardiw3fkNGc2NXcEk3bCtaVnBYVXZhM2A+TmAhbCE4IU4+N31qQnEofn5tI1FlK1Y+MTMqM2l3dTZNO3FTeFpwSV1EfD5XNzdLSHg1YCMrTjNn''@;'; put 'put ''XkVCZlY7NlVdUiUyK29MTF1bVkgvMmtsR0JJIyQjJFh1R09bNCI1OnhpMD9vPk8xOiwrYlhIPjJtITk8eGlhJnxBUVROUGAyZiVidXtfeV9vcSNmNE9raldtYVQscVk4Z0JJaSI8cD95OmghbHFDfHE7V04vUj5yNlVGPUB7Sj92LDAhWn14YEVuV1prXyI5VCQoYWhecGRaZFM9QHRDam59bF8l''@;'; put 'put ''emFHazVUYjFNYWc3KVlDRHRzY0ZOTXVwNnE3YmltQm11OV53fUEoalZHYDZEJT5RNkwudDxESSkwLG8hRVNTYl5fMXZ9eXRxSz5dTHF5b3I8dEJvKTgmcDsqVDV5e2puSUt1XWZHMCY0d31ucSxTTnEkJUZjQ1N3WT8jfkNVaHdCbkQ2JT9MO2pKMX1sKCJnXS4/NWJLUGd2NGdiQHBvQ29CJHU8''@;'; put 'put ''Z2Y7dTU9XlQ1UHJZISJpVSQlYTtzK3JzNFtCMUJGcktaKkdSI1FXK3liOygpTyt3XV5ETXhMZiNebmVVOFNycmE4UyZUS3VSb0VIWDF4KEEsKTV9WEZlI1QjbHQ0Z31dbmomQGB5K2t2YkZ9JnJHOFksTExHJn0iVGRYMCtDa2A5NzpvPlVHKWtsYXImYmpeemFsRUV1PnUzKjo/WlY8V0UrYS8v''@;'; put 'put ''WXoqT159MW1bMlJfOHl6WHRMUnhldV06SFNrOTxsNz1NYkoyK19UJS5wdzBsRz1FaTRwQTQrP0oxT15uPG5mME40cypRKnU0U0ZlMDFuNWJBKWd5MDpQU1tJSnl7WSZteyw2UDt6Slc/LHFud21UKyZ9YEhBVUdMVVZVb0pDWyZdaHkpInZ3Nys4ezFVSmUySlc5NXlSIjl7XVcxIztafToqaVVR''@;'; put 'put ''ciJOInJqLlJHZDZmeEQhL2BMU2l0TEp6RSp3cGpdK1EwZHxbNkNLdEdKdSxyQ3VWO2wmVz9oNT46Vjlzd1RYMipMcjdeITVYY0ExS3QqXzJDZjFNeyRJYjYxPkg9QCZsKS4lVW1oNj4+dHwqRnB2Rz5xL3wjckVeKU5xZ0tIOHNERCY/VDYzPTlRWjpNXXsiZTlSNV1ufENdX3NuT2M+JWwudSlI''@;'; put 'put ''SmJDNCRpTUhUQmNaUHxVWCZZOFJQcjRhXkc0Pm9KeXkvcDdeZVBjaXsqaW9BSn1lS1dTM3BfdnJDWlM5Ql0wcWZdJC5xO2R5ZjtdIi5NLlhjOGUsS3NsRzAqNWxoL0h+YGIjUUZSPStgXj5KT3tAOSNiLnRLMG84WTlTTEJMLipUdXBBKCg+YmZxPHp1I0YwdWl+L0c0PnlTZ0tWKEgqfkEqOyxY''@;'; put 'put ''KHRTeyt7XlYyPF9RJjJLe1NeTGBYfHRVSllufTxreEs6RDtUK1pyPnpEQF5bLlk7WTYmdnJFRC9CcD14fU08Xl5BPn1BfXdFSSYqeyVHZTdzcGo2KzxvPk48aj1Rc2prPCM1e2E+OXA5ckllKkFUamtSNDZQSEopWTBRIiw9TGlDSWBiZDQsXzNsKjxxRklwMGF1dT9MZihLMT1uYSJFSVlrT2dl''@;'; put 'put ''YWlBYVRtQ3VDR0xDKkN3TSUyKltYOFshZ3xLRlF1YXVSXVpIRmlrNUJHRjohQEBVaVBqWkRvdCoxeHQ0QFZUeytnfjMxKzAzNUBjaldreGNBYkZUXzRwKlVtSF9YUzI/NXU5Z1l1Ons3KDdPKm1FSGVYemtxP2VmTixoO3Q9SGFkO0drUm1vMj5oMGlnOTNIYzp7JGBuIyh3M0Mue1RoOyFpR3BA''@;'; put 'put ''VyNufDI/TyFWTSlsejQpWXRTRi9rUXtjbCFPJlk4YEJ2fG05JGgzUkU1OTBNYWw5fH5XanNdUHkzPC5jNGdGaW1Jc0N+XkM/MmE9VixuMFNmJSZabDhoQD9VTFlQXXZJamApSjtqMDRVfFtCZVleSyEjTTxvOkg9aDgkSTkuLCNeIy88YipUMzlMXjZza0w+YEhvIlEwVTk+WTNBQz17WDVgRyFV''@;'; put 'put ''XTZ+OHZGSWBZUztiTylrM31wT1NyRX0mUV5qZ0VHTllyOFpSNFZ6RjNQTWwoOixxO2FyWXJYOXc6KzdbUzQwczRQc0A+KWh2Q3VNeCFCVjtqeDR7dXJ3JWsqVnpFU0NZREZsUVUmUGJGKzoqIXEyJDF8OV1zVyUsP1N2Ln5fK187LEdafjBnYkkwTVlGdTFBOlYvWnErcywjO1dfREVrPnF4fUci''@;'; put 'put ''MlQpO2MwZHt9OVR8M2lpQnl7a0tUenRYJCZ7P18ieiV0VFkrRHtvJiNiZThVWFIwaH5aVVo2Vil1fHlzYzNLbDBxdD8rSVJnOGhgblsqLz87VTB8WGo4fXRGbXs5IiR8Nk1eJFlYNSQrKDU3K2FmVjlBY1pjL3EhYUk5WUBKNS8lXVZWbHs8IWVVd1VmPC84bGBGLzAmL3okSTg+I3dud34rWyNU''@;'; put 'put ''cDYiV19JPmZPZ0VHdFIxOiQ0W0JJYmE6bXtbdncpUyh9aC41Qz10ZTRYZGJaXT5MTltYLl5sW1klVksqMzp2QyE1e1k2KUk3JnZFNXNtKkAofkg4NEJYSSEqUX5fbVlEfjtJKlhkZzRkYkYiKzxgWi9JNCUvLGducn1IaCpvfVM8Yz1GfT45QWJOeG51a09Id3UvL1ZORUxeIm5pPXQwQ2F5TmRZ''@;'; put 'put ''JXkodyMobjVvX2N0Q2FiOTJCfDAyL2pQMn1eVG5Aamt1YVUkbV5QaVs9NWU4IXswT21RISUrVnk0byF4QXE/dkNpTHMhIVFwOFJmS1lHVGF6bmA7Y0JtXmxTblp4eGlyS2suJDxMaVJnTFFtOnREajRqJWR1bT5CODYqNC8oPXF4T0wzYCgpSnVbXXhobk90MU1xemBDYmRGaj5Abjt7TDg9QHIi''@;'; put 'put ''UlJUIkdUN0Y/MlkyUEQlTCZ5bEpCLFlzayRmWE9ReV5JfXE6ZkNIXSszSiEzakQ9dT5mc15ZaCZbbEBVW0Q6NCY1RzZoakksRlVSbzhWaz1vO0JVdn0yel40UWZue3VvIjlRdT4jOH1nY1Y+YnYpLClJMXBxKUE6YVMmTX1NfnZja3gveip7a3JmVTB7Wj5USkB+WlkpclM6R2hUc3xXI2oqLGpz''@;'; put 'put ''QCtKNFpuVHlgZXs6M0FnTXR+KVBpUEhFRilYImU8ejpLdlp9UTlZIiFMRWZRWlVoLilQPz97O3BjbT5mP21uLEFdVChWWUh4MjlgWEdtWWFGZFshNFI1LlRnN2h1c2pUTlNsYT5LLmpmLm8hYn0pZTFdcS9IRFlfNWYhfjlPe11UeXU+Kmc7VEdiQE5SW1lGJk8mRzEhe09BZ1NHIypZZGssfWI1''@;'; put 'put ''akR1bjFxdjhNSFhoLEc2VSN9JHFHNX1sN2UkRGpQMyZaNiZPSkEqL1pOKEpSLmAmPiQzd3ZRaW1neiV9KUs9NkV9ODEibVJgfiJtT15nPiQ3OSNYJnd9KjNZdzBTVWpRe3RmOjxFT087YlhQRV0zaDprUFB5TTQqQiEjIWIjVUQ0QnQlMn49bylnU2FWX25QNXZZRU86ZEU4fHApQihDXiFtaiNQ''@;'; put 'put ''SW8/bGU4UCtkbD52WH15OlRsPlk3TGhsMnA0X2x7T3FDVVBHXUExfUljVj4/TUYkPVQsRHQyYSVsKG9lNmxGKWc+VSlVKmR7L1ZERiYjWG8rezNWTFBvOitqdTNddEBeekheYFU2Pl47IXxtamspPE5ybUsicUJQWl4hZkxFLEZUOUNjNVllfHtCeltKV2kqVihSLGt2M01RTW1fJHFiYXZGcnhr''@;'; put 'put ''MzFAa0QsSSpHfjVFYGlNK2RwRlRTPFtmPFpINU9QTmpncGxoakEyL2I0YmMqNzwleHRlTFcsYm0oUD86UDRzR0U7V0RIOjVFJnFISnMjWUV0PF9wJkdHNWRWLCMsM11MXUxlWVoofjx0dXdXMl9hfndRcEViVmI7Q04yYWs1SlhNVFhbJD0jUEV3eDBPLFpCRXAxLHYlUGg4MHFAS1swRHdbam99''@;'; put 'put ''Vn5RKDN3aSo0P04vMkhTcT1jNmE0ST1lWCFuTSwweThxIzxWOjwjfV4uazZTWTdzVHJuYm9dMzMob0BKTUdvJXN6UVVUOlkoKUJjQTMoTU9bL2BxU29lTzhsP1RxdFQ8XiJrc0Zoanc7eClANzV9VDgze1ova1ltTClyUihbKWpQQUFiWVNHTjpdOCR5T2spb2EsYzApVylLXjpoN3B0SztWI2Zu''@;'; put 'put ''U24hQkQ6OUBnU0xuN0YoaiYoUU08WTBLNCR3SjQwKTIsXlNwMUZKRCNFfktnXUZHY2taUFFaLHcoQzlXU2NgLjRFZzY5dTZBIUtoRmJpMXR4bitjWStARjZROEhkfCFrM0N5RygwTz92e1UqOD1seiZ8U3dTb34lLmAxXjoiJGY4R2l0ZGY0RWk3V2guNFQ8VjVwKyRbOE93SD9gfkk6N2pdWjgm''@;'; put 'put ''Vj1UX3t0T3BiektJWE85T3R1WTZhMiVJQ35YdHFMMUBdWSpeMFh6XmFBK1dTM0cjTXYjSF8/V3l1US9zeW1FYiFrQzg5S0tbfmFgc3U9bzlzQnA4PGovQnN1NHAuOnc0T19rWVRfMClpKURAMTBKTS5nbUdJS206VEleKVsmelIsREVAfTluMHxIPW8pTkk4Yz02ZVo+UlUqQj59OzpSW0BFPWNH''@;'; put 'put ''NEUmX2B3Pnc+LlFITEA2ZUYzPkwxa2hsSlhLcCNTeTZueC8kKjUvWEYjQFg7e3J8dF8oY3plUy5zfm5AbG47dmFLOCEsbSVFPV46ViE0WUNOaUxEX2ksLkFddDpiUEE8Tnh6eEpOY34rUF17Y0ZPMFl7IW09JXJQNWN1OnV+eSNaRy5PLmBgPHZCJW4rO2ZdWzZWXWNbYmxIaTU8MFVNNVNrVzVs''@;'; put 'put ''PCVuc1hdI1ROWDlBLkFSbVg9bSwwMFNHdyhuLHRJYFo3ZHJpPntePmQveiVPZT5VLE9aMio+dVd9YXoqflBwZGoyU2dwcEN9I1cqa1d2PWd6b1dWYHFxOUkyWFpsWypWXz9lJWBmL1Z+Kn49Y2NYa2d5Kks0e2VSSm9eZSxydDlze0lzMGtlfFA1KkNlLzdlVHFed0d4ITYrVElNdzthUSg5I1dU''@;'; put 'put ''M2MqeEUhcjRiRUwrQ1J0Z1A+N25yOXkwWS5oWV5zT2BvLm46UlkiPG95WWAqT0ExIzA5cUxoNUlaLitBVjcjSWk9WnxiTFlTcjBCXS90WmEiYlshRmtIZjw1bz9sMn1hfFpmeG8xe3tQZVE6OjdXKF1NPnNrUm43b2REOnNQQ0N7KVUzMHNlckkpbHhWbiNaaE9QIXt8SlY9I117Q0s4bVtjemdv''@;'; put 'put ''MWp+K28iSTBEOm5bXnQ4b3c0V2l9XngkdFZIdUxvcF5IJShQcE9gLHV1VVBlYFpKT00xQzlAUCh8fkZMLGlROzRVNjwsVnBnfGUjSyhVRWZAXmE3PnVzdWchTUtPLmVUdHJOW0dLYyN3UDJadSgvJTNQJnZnUVo4c3dNbS5vfSojLmV4ayIsb1hwKmslS3ZuKEhtJEtxNy43JH5VRTFbeClPQj5l''@;'; put 'put ''fiQqd15AZXdjL28mY2xnZG5iOFBkL1EiL1p7L0NGMlpsITlHPzJiOmRVdCVvK3ZFVWtUPVN7UWlURzIvYWt8T3tAPDpoLHpRKnd4YThDVmFtRytaM1JMcUpgfnNAbCtjbl8udWckJHVKVFR0aFd5LkE7Tn5GMU52IzZlWkw+fXFuIkg/R2ghdnttRWF+Ti5rLCRXcG08bGwzcVUvQyMrWFhkaSRs''@;'; put 'put ''Y1cmU29WRnl7X2Qxe01IIUBtclpgKHlFRGRCX09IT1dlLm5pTDpkI3NEYFB4bTouYWlSVFpzX2NVZ2FpX3dfPWBQIXI/Yz5qdW5kanQvMzVEaF5IcCtrVFJhOlQjTixwLnJNK1VKSnlLO1pVeFgycEx1dVRnSnNMeFh4byNIbEpFb21JPjBDaG9eSWNtaGlGaDhUJjAicHtpJEx8dzhAflcqUG8v''@;'; put 'put ''e2Y/JDBUUDR9K0JdPFE3eDpfX3U6T2phSTVuQywubSg6NHtBZyVxRyh4K2JERCxwdXJseEUhP2ZKM31jUXA7NWhXZVVYKXp1b3VxZlZsMFgoX0J0cEZ2JSNmSnJycUpRRmsqPGZmUUxFYTRrdzBgYjR9PXFZaWhdVCtsS3w3bzEva144TmN9Nk1CKzJVInlBdmVkPS8wcS5wU1c8Iy85Kj8ieURj''@;'; put 'put ''WCJBcVcvWX1HJjBLR2klczQ1cUxMcipudCVMWk08MURIZypeclhZRnxNaTVLa2VjTz1uXSQ2ckw6XTZeTihaQkh3YiQvVFlXOzlCayEjV0lvITJxckRaJiFgfUkhZlBKRlcoNzh3RzZ4WSsxYkVdcGkva0MmY3csNyhzLyRzcyVkdXk8czdFPm1TRGRzS0p5bUF0MEFxLjIlMTkidm1YRFFnT2k9''@;'; put 'put ''Z1gmNEo+U3FybHIzLih4OkJYey5ofiMsPFQoOEohSjd6UngqMGZjZWVpMnRvLmhFTVcmUCVJKTxZNzJWbnZAcigoZFFDXU8pdVQ0S2pkY0Y7THc1ZWNTU2hSTU9RVCJXbEQ3Y2dlTXlMUjhlZlBaOjopZH5vVW1+TTt0Ni4/ZEcyWXtXWzw+Qyg1YU5LISFlU3tvN3k2bzhnc2FqIWUsWEleM2NM''@;'; put 'put ''ZCJ6YElrcGc0Kk52dSxwPl1acUpGKmN4MFEoWzc6V1hqJXI8QHw2SiNSX2NpIVMsd1RnXTk6JTdeKElobF1YUzhUdVIhKX5wJjchRUdnZGJMInE1UyIzIiM2YFFNUFViLj5OeEAlPDRrRXFKX3Q+WUxNbHF2JkR2ZGFPJHRALFFTOiRpekZGeFVzLFYsNHFfVXh6IXwrRyMrdEVsTE08SGBRVXB+''@;'; put 'put ''RVYxNGVONmhmNVtoWF94KF0qRTQrWUVaOCpsbDcmaU1ZXTVgTWlCYWxvUXduUzVDLHhfRnZvWzE4bWxKcHssKGBxdTl8NVVLZG8+Nkh5RUV6SkB1fEshaT9mYmBHWU8+NkxXejlxaFc9NCIuZnFmSEVPZH56dC8vWGc7UEAqZ3xTRkYva0oiSHYpXkl9ZzY0NnJ+Z0tMK1hYRilXSXdOUWl9SFVP''@;'; put 'put ''OkNPTWVlbEFrXkpXdXtpZ0N7el1fe156I21iOXBARi5ASWMoKE9aNDpbO29ASTxqXTl5LilDXSkhZEhfYmgsT3tkZD5eWVd3cl1UXy9FblF8R09bOTpSMzIveG5TdWNOent0KyplQmQrXippeVp4Mk43SzIqXjQzO30vb3ElIltDQn1IXnt7cFBOWEcmRkR7Yz9oRG5YWHNfJlV4eCUjYW51eUJh''@;'; put 'put ''WW41IU1BU35nVmohJkQ2Q2pYKn5qPWI4dUZQRVBKeihkaV19UjhxdipsP1FUIiVHalg/Um5RPEdDJFBpV0hsMmhGLH5SYjpMaG03RzJlRmhTL1pEPnV3Zjx0a006NC4mcEZuRG8laiMkTHkrVUY/fVlDfFM1OCg5dlYxTXxFX3hwSyZ5Tldudl19V0tkWGBNfWdyRG58WVJNYiJVM0NpZ31MRihB''@;'; put 'put ''c25FaDgqejdgMyZzZUp3K21wW3ZSTiQzRHVGWF5bI3NpbjZOeT0xIzcxNXNpPCFqSkJDW1Z6cVdQOGBsaSpFaTJAVjkqI0p7XTdLJWV1SzU5YjkpJGR0LHcmd31+fClnP3ZlZXdFUiUvO0duUT03IittPX57VEhVbSpZXXMjK2E0YmUleUlQUCxxIXJ8dSY/bChhOlYxajghJlc7QytfX21sXWlA''@;'; put 'put ''X2N1YVclTTszWUs7PjFofFBVZGgxWnxPRVdoWVYzIVczZWtOWl59b2RbRnZWMnQ5ZVs5flNQRlVKMzFSfWtBPDQ9dm1HLHo5Iy9WUiZVImEiJnFpPktUInUxJnRFVXgmeW4wUjBpW3dzODxINkIwP3RUfXJlZn53VWZhLz9DbyNoeEx2VWlAcU5iV3xoPT1GPF0rQzMuUWdCdT1QfVMzUkg8WCxI''@;'; put 'put ''dCVFNCNtKyJ5SGl7MVc/fUNMSio/ai9sdihOK3RSUnpOSlZLJUFOZVIqeFdwaXduZFE5PWlNRWxjMXZ2SGIya05jdXhLQXwsWlI9Xj9NIl5rPUJSW3JfKklSRClXRztucllHVTd1QGk1a19LdT9XQjEoR0dmOlFdeG80cnxKN3BFbWd8PiI0bEx8VDQvWSlgdUVmKzdxdD5rfTh+a2Aoe3dqOzR+''@;'; put 'put ''WXo/JCIkUjU8Wmp7aUU1Wl1HMmB2dDoyXm5STHw8WVlzYipCWkpxbCswaCpzd1g6fGhKNjs6JSo9c2hJI31YekoxamlOWTxWd0U/ZGlUMk8kYH1fRV1dP2J9REdUaGU9SF8oS31rdXI9cDxBVCtCeTtGKDNfVz0iJFJ9JCFXdDlUfHozZkBzeWFzP3F+WFpFWUwldCRPLkV7TDAufVlZMCQlc30k''@;'; put 'put ''dSRJanQoU2NaPVYrWjs1SDsuS307bGdjaygrUnxHNCEyNUJaP1RaOGleUjUxS3o2NiooKVJbfTFhfU9zbllLVmp5Q3xvejhIPyVgdXlHPk8mNG1IVUc8fTUyPXxjTHREX1daUUs8M2N6SGBQTWY2RVpyNCFdSkRWailVU21nUyZbUj5FKDFrMUpEZ11fI251YUcyPD5ROl4oRXl5aDQ4TXEjaSM3''@;'; put 'put ''U2AmMVdgI08xKTNaWXE6ZFRFQF1DOEpYPWJFL1AiS0MkJlVuazRLNnc4aHF7fW4hQ2U6YmJNWXptSlJ7XT1kXWJjLm0+bXszK187QU4ofF8+Mk90QVk4UmN8MlpfMFdmbD1JRzldWSY6S15JZkd0RXRKUW5BRXdRezU+TWlEa1BgclBgaExMd1A4UEIzcm5xfGZuRGVZKTR4Z0RlazEoREc7Kito''@;'; put 'put ''PXQ0R00qby5Sdz98KFM7N1o2dUZ3eS4sbEN8N2dXXmsqQUc7SmI9cSVHXSh7bmghR0UzNiVXbGNFNEtzYkRATDhBZnFFJDUzYi5XdmhPSW9bPURDPko6VksrWHVLUHdqW2RXXmQ8NFErfHArR3doXjBYZ3BnLmhhZkNRVV0yQ2R5XTExWzJqTiRnPD9VRjVJMzxbU1ZSQyk2bGQiaj4vZl1TIVJG''@;'; put 'put ''Pyx6bkJXTTo2PkBoRGgySS9wN3Jmd29dfHoxQmxvP31DLn55IjRzTSMqK1ZzKzxffiIrUj1+JEExK3Q/c2BwNlRRPjlAUUhGbzZjRW1lfERrNz4zLHMmcX5BVEZyRkp1Wyoub1B7OlNOZjpTfkphT0w1enlwQThrXyN+fVpmaCF2SEddZ3xDfTB9NmhTWmY0YyttX2hqPSRYXV91e1hUVDlzVj53''@;'; put 'put ''Uk9AbVReRCZSeXAkaVUvJXVxZil9JC43Yy9UdCl4SXFaO2VRY1Eke1EpVTQoUjt6Nm9UNGhKJUZUWWgkbVdmUihlTilGLmZ0ci5DR0BCbjsuUEs8M2RNQD0/W3djfUteaXB3JmQpN0c4XWdeNmBUYlhMMTkhcVdfRiZZXXhWeCR8fU9NZjZxKSsod306RXFQMy9iL2wrQE8ldkkvdXYxQnZWQDQs''@;'; put 'put ''b0g3eH1WOEI4O0w+cX02Jj46bzJgTzYhPHkjb2pfZFBoLERoXWBUV2RELHJ6YTV+elQ5Yjp8P248YUN3YVskaUE1W3w7T1cwKDhoQ1pZfDNdWUFjOitOc3tAXUcpMD1ERCJ6dFg1MC58ODUpdlgoaGo1MihhciJBOnBtYHxebiFkKlk6VHY/eDtre0NuaUouJHM6PVJaWnopNEIqKlMsUysvUGJy''@;'; put 'put ''XjBZKUUxNjNvSj5uMFAicjhUdlM7NVJReSFMOTdZNCpnd0NYNElpQmZzX0RsVjBHcV0+MU1RJTNfXyh6aSJRPiFZO1hFcCxATjEpfmw/LC4lUTh+P1ZKVytubncqYSwuYl5AflBCYiYhPE5kdzciIk9vXipKfHhoSFRjRkxbR2FhQzo0JnkxVnR2flZIJUJXQn4lLGJUWlh+TDRAQF55fHYmeXp5''@;'; put 'put ''IixBWyNBMTZCNFRUOWdyNSFzNXxxUkRGMVE1K2lhaDRTX2RjMl8xaiErQFZpVFcsMnxSS3VHbkpbe15PODsrJmlXYys3TU4lImIzfGYsLiNCLlVCRFRlYzVOZVhAVENCW05zcF85WzxNYWZ4NmMoKj56eDpQd0FkRCpAOUljIm5ZaCMjMjkvPF5bKzhQfjB3LzI5cHl4PWE6XlV8cj5USVArX1I8''@;'; put 'put ''dSg2QFdkeCZ1bEBVP2RYbm4iK3hbSjJ5STUkbCU5TGdtMkdXQitIbTd1SGNDRHA2TFQyaFluKSwzPDohVi99QXIoSjwwISk8QllYTVtNTUcxZX5DVTdOPmhFZHgsWSw6dl9RTTBrN2Q8XUFwZHFqeTd0TjRVUSlKZ0dwaFZ3OEklT1h5XyY4VGUlPTo8LGZVe089fnl1Un5YMG9KJHV8PF5rezYh''@;'; put 'put ''cSoua2ZNYXI5eVh0Vk4iRXt2bEojWyl5e3RlVX0hVntLZGJoayt1NlV4b3VhQUk4X0U9OXwqSm8zNkcjMFBZUDExM0heZVlYMEVFN1NLJG1bNWhpT2ZLUVc0PyRpTiI5OlpwOjRHVjIsVUNYPmQxdSEybE48MGFZQD1wRz5wVCx1Q2ose05PTXZGNytSNTRQbipWUzBGcH1jKUhbV0l3NnY8by5V''@;'; put 'put ''JUQzQGpHOEs4cVMiLD48NTBINjxWPU8lSXI9ZEdVZUx9K0UkK21ISUxuPmk5I1JqK3hoNHpkfUV3e3BAb3t+QFViNVpXYUZ0fUJCWm5iRSYpJk9QYk5PLmVLe1NKIzc5IX06NERqQG40e3REUlR4YT96Nk94ekRaVXR5el09UFh8aUJNbipnbiRuJm8+bnYvXUFMKFs5Y0tiMFdTbXJBdj5UJGFe''@;'; put 'put ''eVQhJEE+W2k3emssTCtASHJtP0ZuJF02KVV7UkouNkcwR0BIX2RLIzt4XzwwRHRZKD48O3k0KH0velY2LGo8SDtIX1R+ZX19SFl4OSF2bSM1RjpFY3A8JE1hWDUkIWR9OFIhSjlTVm59U0RPd0lYbW1TcGZYZyVHKX0/TFdZU3BOaHo8RTN+d0hzd3t5LyklRiFDKlJjKGlOPWBONjdbclV1UW03''@;'; put 'put ''aj1ufVAzXUAzcUZJZiNIUHVBTCFtNChEWyNvOF5II2YxMFA9RHJ8Nz8lOEV1OSF2aXNtTSRyJSJ6UDJFW2I5Zjs7KXpuLj5USSlkRWJJQThAZSRtSDxrRkdeVGxsVEcxPWFNXXVlOC5sQGRYP1E3MjdvYWwjQjI8IlBdXjJGIixKZyVpPWd7bS9pbytQWTRsQ1VJY0QpPyk9WU1OVCNob2RZfl5E''@;'; put 'put ''ZilWSFs7U2RnfXtJTT42VkVaQnZRXX1XXntmQixOM3QvI3d4LzdlVSxkXShgT2R1OyRhNn0vK0I4MXksNylvXXFZbXldPChNS0g/KUhea0xCfTJ3QzhBalQ7NW9VWyNeYGIia2QrKmU4RlZQe1lCP3crVnpvYG48UF9wfjY7dVhWZ05eSntndFJJLEQuWFM6a2FDVl8xInVNZzYzKXNkTmxzOzlV''@;'; put 'put ''NT19VFUpU3Q4SE0qWyw8PnpRSWpvPnZOdEQkRFkjWElndjsvLiRaNXk5KlF7YmN6S1pYaEFyKzBwQy4xS25AY3k7NHFkYUUlWzRJdXo6fGt7RFozXX5RYns2S2hScldJLypScktXVlhacUMjLCx0RG54UyFfZzd+RyNKazRiKnw5Zmxxb1R3T0BzL0RgXmY8Rjs7SzFReyF5QU88IzFYZVgrO2lm''@;'; put 'put ''YDFLZ0s5Mi9yZSsvKlhBSngifXFsLiR6KzV0VUh1c2I+a3t1VW07ImNbWnsxcmxUKFBNX3RiXiZddSRObUBPeEs6VHZoe3A0aT1Gb0UwcDQ5ZnRpSGd+cCp6ek1+bVJlYkhBdU9uWDNoI3ZycWM3fXdiYUMoUUt5azg7bjAyeyp4PWs2RyZHR0wvST1tNigoMU1jfWNGWipDaEM3IiVLc2tRREZh''@;'; put 'put ''fkttLHhKXUhQaDY3Wk1jPWVPc2FQcWgmQkhCeDs5eDpqfiJ0JT8vdDdBPXdCcz5BXTIjTDZdPW9qTERzW2IwVlF3TXdqKUx1PEl5cTswRSphW3wzJGspUiFeMz13Q09EJXg7MkNteixhRn1FfV10OmwweUM2djYiQXdFWT8qOCU5YCQ2V1Q/JiRRN0hMSCFuQmwvYzpBVDVxNSYwLHVyentlSDVB''@;'; put 'put ''IW9HQjpWJX5zbnhWSjlUJU41XTcsUi5ucyZoUnZaRU1FSEtHOV1ZKmJrWHQ3ImpUeUtVbkh4K2NfKzpoaSE2R0ZHWmFOZ0ptPnosJkt8YTA/WjtCM3RmYkkwKl80Y100flZ0WUFKZTs/WE5XQzU3RGxzIjB9XUQ8JDMuVjlZSDp+cixSKG1+YTlufkxwODxVN0BJMklQQGFDL147MzQzMGVZYCEu''@;'; put 'put ''Vjdxc084ZHNIaDIqXTZ6dHZFNG1ZSnNAZnA4V01mJkNQMHtjemxoZFttWSk2QG0iNm1ydj5fMmV3Ljd1P3Zoe3ReIzpjbzBjfSxNITVJeCFhbDNAKzVaKHd4dWI5VWUqa2VGMn4mUzErYlovVEtaKDM0ZmBTZkxyfj9iTDF9XXRnU3xhT2VzKmBrSWYrZnxzdzs6NVJaNUpCRkReQnNEL2hjeyYw''@;'; put 'put ''VmRHNyFycXIpSlltX1h3Ryw3P0MjXl1lT0c3IUMzRFApLlhZM2VsY29bfjVCM2UhclldPUImYmdST3txen1TSHMlfW0ue2ZoYE9+NDt8X0dTJmt+aiEiUkp5YmlxaDd1YV1CV19RaHYmfTg/VlpBanFoaml7azomfW83c29GMXNKbUhSI2JqTChrNE87a30rLlh9eSVPO2spT3lyXXlNYClreU5T''@;'; put 'put ''PDMxZExTRVF8ejg4dl54K08wfVNfSkJyYlRSPG5PXTVQQXpeQjB+VSJJJk51QEk/TmtHS006KHRGUnFrR2lfTipMeHtrWXNlcj9OQlQ7OjtNe1IjMz55WzVwSkx8ISRuQDBxfEdJNyJWYGMiOFJWd0xQOSEzYkskNXc2MHUjezI7OiUqSTI6S01yUF17SHc1cX5uKFZDL05iVDpke20/Q2k4fnQ/''@;'; put 'put ''KFJGZFU3VC9sV3lXJVFYRlhsIkx2PW9Eaz0lLHsyRClgLl5uJT5YKjs5eGFVQzV5fjFJJmh1SSZBamJpYmJ8dyhCK1F2c1lbIWVKWVdYVV1XcD9NQkRmV3xKMkgoRFA9YHAuJlspZGVgcnVFRiVXJXYoQnt1JkdYQ3VhWTZnSXs7dykuezEwcTt7WCFuVGc5cmVeXiVmNC9zJGdNbVspPlc8VlN6''@;'; put 'put ''cmdGUD1sMjdKZiomS2hGIUMoYH4zdTZNc3V3MnZCSGMoQk89WCpvY11PfEEsVnl7NGgpW2UldXIpR3UrcF87N3I4TyIlant0cHImTTN1KkZ7VS9UP2N7bEU/aUdsQEl+JHQ9WH4sJEI+VjR4X0RXUk9icEUrZy4sb2V3TF8/OGVwW2E1Sm9VaVlNd2wxc3BQS1tkQDhvJilmYDZMXikqMik8JmdJ''@;'; put 'put ''PWM9fCslRlJUI2JzKyZ3bnl4Y0pmSmhTdllvOEI3QTJzNGJqZ01BSiheQGx0KzxZX2NtLi9veWhERHtBbGZoW29FZFl1QixjVV00ci99P34rOCV0REVQOSlULiYidip2VF9qT3hUakV7LkpBaT8heVZfKG18dzh+ZUBoW04lfkJwX2k1KDlxXVojdG8oKno1ZyheMDtZc2dFTToxXkkzKz1sbDho''@;'; put 'put ''fnVhPyRsZTJGJlckT3cpY3NXKjRpemM7YUNOdGZMSmpxKUMyTHB2THJqLjglP2U/N2UldWZbeGJ6RmVdTH1uLH5SLkR2LDZZXSYxZXdJdm8rbjp7WkJ8U0A6UWVNfnJvPm8hOU9uVV1edHApVWozPy5vWyFwMCJSem14U09INm5WJUt+VSM9I15zfUFjfkkwLi8xfTM3b3l9aSQyO2FAZV9YaVNA''@;'; put 'put ''bWMvNnVHczN1Mzg0a1Z+MjEvJFUsfH51aSQ0WGZ9OzxLJThJKHAwXT40aTYvNVFfPzFxRnY+aUdnfFhMYkxEYXt9YktbcCo2SiIpc0BeTm9URz10ZVo3PzFOUmllR2pqdlJkTHR3UE9AQUdIRVZ1Yn5GVC9hKylJJmAjNDtifT5GJG0rZGRSUFQ0bWtCK2ZVMUI+MSFvSU0wYkJHMzJrc1EoR3g/''@;'; put 'put ''MW5be2hxKk1WOVglaz46cHl4N0IjbnNFdVNuSVtDeUF5XmV5JDo9MGQkVSVSdWpXd0wuTGI+MWVYMiMqKUlOLyZgWj1YLmUhW10kQ2suW3Y9MC83K2tIMC93fC5aOm9acXsrZy9NRGpOc0t2P0Q6aDFVV0syL3Y9al4pRnhDU1R0VkVhOGBwXXVCZy9VclR+JnprRGJrS3hNSmw5WClOfEA4WWcy''@;'; put 'put ''a2BpeCFTLH00S1lPbChDRjc+L3xWYUZ7KUdZcUhJYkZCQ0FgSX0rbG9NTFJjfSpuKmtPd2Rzd0p6VTB2TTR3WSR8ODpueDEzYilEOG85czFpRGVkI2s5UkRUfmAuKnJjZE9ZYWpHJVlianljK3kwUFY7Si9wWyRwMllWMyZjQnFPVFEzYD1YXS9mZzNTRXZSWFBtMXxxdDNbRERwOHBrcEJbYHtI''@;'; put 'put ''TjsqfDZiNnMzcmNrOHdMN2lkZ2MiSEpYezU6SjZjZCwkaHt8XVM8dmF5YEBKQmhNdE9QPyJfPndGWHwidDVsTiRANjw4cGVmX29bfW5KPXFyIi9vWyxDSDR7Xmp5MzUhOSlWYyheKk0zak1aNl08SnxzcjZ9N2ZtZTVbTDp7fXFZUH1OO2p4UCRmaywrZF89Q29lND57Xj4jM2wqNkBdQFU+O1s8''@;'; put 'put ''PmdvOVcjRTl0OyNgTntRTHpMcCQ1aHteS05gQnclPCV3NSNwWyxMPUAzTTt+bjslajpAM3h+YHFqeG1Sckw3b2Z8JTs0OjQqKVsxL1Y1MURoVW9CKS49OWJAZF8+cn49LkNYTyo4Qkx8NWBiPTNgWTtsRU9RbzFOZ2x8fFVGRjhzK18mXX0qOyouZl8xLkFxLyUscz8uT3xeOjova3QwfVQ8fjxC''@;'; put 'put ''YHNLSSY6bFhrRD1BeWhDZHM8KF8+P0xOTEJvYU9xOFIoNnY5dip2Q3d4REowTTA0d3hEYHd4RDM6fFE7N3U4VlJRdl4rSVNLSCVePjlqWF5lKmNGS0NKcUlTaEB9M0ZxUkNZeUV+ezo3M0lhVkNUR0tHKHVFIi55WFImcCgkd3FYeFRlcnt7eHl9UU1ZPFtWPnslcyM7dmhVPCUpVmNbTWc7ZE97''@;'; put 'put ''dj5KN0dXKmgvVnRNdzgvRkc6bDg5Yj1xcztncltmbV48M29daFVgZTh4PSl4XUFxTVp3Nk5lMm01fGJEWy93a3xxYHF3fi8mWkRPfklHQzxbN2s9S25XIU1sSGxQPXU3PG5MOSY3JHB2I2JobTtfTkx4fE1UcG1lIWFoT0FWLiNLOH5xUEA6dz5TYTZjVj5lNn5JYVpWKjdkUTx6SDxxR2BvK15b''@;'; put 'put ''XX4jPXB7dyhfSHMvVmdmT35iV2EyRUdTVysmRWJ9ITM6Rj9Xc059UVVtR2MpNjl0O0gvdD09XnI8ZiRBYjh0OExmSkZ2SXxFOTVdZT06RlNhclRodlNycG13SGIqQF5HaEFed3siPWIvRT5BSzg/e3shPW1abV49aHJfeVhaUzo9YE9EcTVvQ11iWUp2Nj1hSWx1L3lEQFlHeWBOaWtXX1BAKzlM''@;'; put 'put ''YGVaZEZiNlAweTw1MitSYGBieXBvcXNGJk9yWUhAc3lTa1k+IU9hLFFme0xSfUNlekY8LCxmTmFEPiI/Py5ZeSl7dV5LeFkhLzlpaWorQ2V7cjI/UXtaT2dXPWpdI1ZUW1s+ZmE7QGdrV0VLKFM6cFFZM1owWFUyUD46cD5LMkoremoobnxsYilJPyVbWFg+Pzc4Qyo/Zmp1Z0NXK154RmJNSEcr''@;'; put 'put ''OXJLYWZkSWRQYlZTQDpjZmZ6VEEvIn0+Nm56fkhGa0R9IVpMcy4yL3dYQCFIWU5SOytiLldDSDcheD5EVW5WfilnJW1oJm0sSnxicT8/dlp9NWZYIUV1OkN9NCtvYXduMSRhNS9fX2QhOn14aSxQZ2U4a0p8ZDcxZ24kdEU0RXkoQlFjPyNyZkA5Y1VNKkRyOGY+XilSPENZc3pYYXpWVj5ARmx3''@;'; put 'put ''VSpEMGhUUHt1cVVZKkliVVF2UEs3T0pwcDMlNyMoMHFaWEB3U19bbHZhQiEqIyo/Z2p2PUNXKm1fViteeVtscHp5U0hMSyxRUktNUlJLc1JSS3hTbDdJTnpvTH03PT1yPF5fOyUlZ19gJk9JcmgkSik5YjYwSHBaTkRUPTNSZllbTEp5JFo3PU8oNzh0QDBNSks8Nk5TdCpgNjArY2Z3cllFe31E''@;'; put 'put ''MiJzVjozTzYsWT90cmhMOHUvcEtwbCF0S1EqMkU6WnhRcFluX05mZj9ZPjAuZXheRiFiZyxGQFdWMjBBYCUqS3x8KjwxRGc9MmBxTH19Kk8/XnE+ZiE1ZkYzKyRtNkRCIVtEMyRqK14kXXxQaGdJdmlyWE9LczttLEEqRkA5cyVIZHhBZUdFY2R5PTZ0bWVhOWksTm9GJHh5eERtRHZoanNtKkNg''@;'; put 'put ''IzdYW0lAP2YwYGI5S0w1O1IuJj9uPCFKfmx3b2JFaU50UlhHKGVpfH0pL3NEPzIhK20kO3x2cXh+N0VOfjJ0VjhYLyVsZUM4SiEycXxgPXNmVDteeyI2ZkFhbTA5JiwqMUBefjhGVX43aDw9ZVtgJkM7ejAxS31Vfl9BLyg9K3h8fTQ0cndHL0NpK2k0U011WUhjMSNtcjFzeF1oK2lUUl18M3dw''@;'; put 'put ''LlArdWgoJDlrVltWNWJ5KDkuNkMhM184eHx9L1F4VCpIa0xvdCZJZSptaVBCRispTipnXXlTLl9mK2BAdnpJXUlJfCFjXmczOn0qZzw1JCFSfjlNdVFVaEw/TX53a31AS3N9eHB9KE57a198aFFAWUN9TGJyRmVCW29CZyg/cW8mTW4sSk5ARDVReCQjLDRhPkwpYH1LTn1VeHRHfnhJcXFKRW9E''@;'; put 'put ''UlgjUW4maCY7amF3SitWUUMsPiZBPlZfP2p8UTpxPX1sQEovcmMpYkEwbXd+e1t9VHJJVj1vb31sJSo2Qj4sb2w7N2lVYkdOSTplVS5+cj5rdFZbO2pCM3szfTNHLyx5ZzRBaiU+ZzFAT30mNC5pMWRWQjwxfU9IRj5MZn0vPTEsS05NRG1iW2srdVJHT1BxaVI1O2ZYWGZibnpLZWNwPUtkVW5F''@;'; put 'put ''aF9KeU13aF9VeDMzQmhYXnhvVCl+SE54RllUXzU7bXJrKUQ6cEMsSH5yYkN9O0xUYkVUbHBiKG9nbVQqe1B1PUozejZxN2NILGZvYTN+fXgzPU1LSWZUeDxiU0pmQDpeZilkSHVeLjo9TFcuTitGcXd2aV1eQytpSUslcyRgSnwxLmdKVTNOcVlTIUMrbmJ1ZXBnWyREenU1YUk6bFNRWWpHUm4s''@;'; put 'put ''VTE0T3MzTFFEPzpbQmtdXktDYEN6V2tAUTYxSHQrQTNhN2Mwdz9YKiJYUDNwbG5oTXRaRzReOCJBdWtmfUVWbUUqX2JoSV9Malk/bEl9OilqelJPNjhNPCZWY30uUHo5S3k5fSgsTkM8PkZKRiNnRlBvNXVQe3VCRz9QM34+KFRdWTlYfWF7cm9pL2EkYUF5a31MR31uSCxxXk1hW1VkSD82Qmx4''@;'; put 'put ''N2FPTWIiTiRbeXtKeHJnK2l+ODNDIVBVeSlPfXtzdGpAWl4iSFJ3bC5pJDN2Im1vRXp0ZkZUeXMmXyU0aXwlJDp0RGhrXSVPM08jMiNXJE42KEw9NDNgVzUpJUxvbzxLLHd3cWBlYW1bPyMxTG5WVj50TmVZSHhAbjJ4WixHQVc2cTBKckY6K0o5RSksLzd+SXNRZlFjc0cia0tXN3BNWTQ7Vytm''@;'; put 'put ''enRQTHddLl1BM3hqVyElTCxvWEMsTl5+QWN0T25IZWVMfDBEWDBbNTFGYHU8d2UzfVVtZEolMEI8XT5XLFImNmNnKUQ4SDtreng+VXt3JHw8QWxmJEVbZyM6XUMjJT0qUWhEQmJJL2QiP3A1RGx1PV41VjtWQm43enEkYUxaNXY1L0p9YSleSDN8cjsvRCtIKjVRbE1xZTd5X1RDQVlpJWZiMVlW''@;'; put 'put ''X0VlTGVGOGNvPipDbzBBJj9lRGBhQWwjbT5iNXwjdCNnLiZ6cj9ySF1ZaUZCYkJ3QihoOiY2KG9TfEorP1o7ailNUHZiPnA6T21LdXFWaGtSY0pQKUhXbjpRd2ZZI25ZKCV2T3pJcCVTdGBAc01yRT9uUnNKVlp6VGo/KXs5SiV+XW9jUjpmLlp+ZWZGPElDT01MN30lJEYlPzUoeVgqJCxbTV1h''@;'; put 'put ''SWk+b3UyLGpZK19hZjJiYT1YX09FXlksSnNNfkoqbSpgYVAxezJUKU09W2YofTouQUMsbylLWzRdfUNoQkYkLDh+RUsuT14pMWEvLzV3aj1NS2t9N1pQQDt+WXI5bHBFSmleJHZ8NlEwfTxNUVV3TDFEP05uMTR4KVQhYkhxNztxKm5WOHR8MkorIUg1XTxWPF14KmA+NGlzSG1OdGNVUSNeKi9m''@;'; put 'put ''UzhMW2A9M2FhcHpdfG5yRC4wdyVZfE84M2Z0O241O1g5Tl0lUWFDWlkmWXVNdVt3V1hVQl81Zl16MUtOXjc7Q0gvJCghQmpUNDdKKFZzTy9eayRlbnJAdnB9YHdweDNxWUZ6c2NXOS5BOUdGPV4pRmh6NmNnamVCbyVfQHdwdixWY0M0LntGTmEkT04zVVhgRz1gWjMrdE9tLHV0Yzhyb3M1SWZH''@;'; put 'put ''ZDNHZis3aytDYyk9MDNEWDhycH4rW3lfVERXdyJZL0YhdG5MWXwvZFFEQFd2Kmc7PCw6bU86W1dsPDRdPVpialQ0aFhjQnpbfVYmPTAzXjEveUUuQCx+OndXVWd4TVBTajA4WCttQk9aQn5nTWwiXWN3U0orc3Q3MldLWS81aWRdUjNecU56VEJjUSpEOG8xKDd+eFJAQG9acXJCK19PaUVFSmli''@;'; put 'put ''TDtWdz4pdFoyWCtNb3JJYWFSUDJiS2lMRFVYb2RbM25PZ3QqSWo4clFXKSxeT2J+cEt4d0dXfnc8dDYpQi5ZWFFXVmR9VyNHRHF6Jmh1Q1hVRV9lbTA8em0rbGczSk1nSylYJFUyeHM4L2ZpVCxeUiomeHlMSGtuSkwpXmN4YCZsQUA1PXVKQVV+M3NDZS92cT1uIlVzaWhDcl43a2BEX15PL3E9''@;'; put 'put ''TEtxRWxgfW9hbz1SKSlHVV9JYiltK2ssbUcqOEJMXSE7fW5QRyk3ISFXVEBCSFFDYzd0UC4hO0w5dDdMXnMpZnkyM09aNWgraF9CenQ4QTRoTmJyLE9tdTIvaDBoeHk9RzQ6aWBeKXx7YXBlSk5sV1g5UUpgW1lpem9YVkZybV9RKk58KW5KNTpgdnV0KFI/dn1HXSpYOGdnSU9qYkprWllUfUt2''@;'; put 'put ''PXN7aHpSM1lDJmBFVE9SSCUhVCZzY0ZDRFVxbn10dzNybn1rLD96RExQTkJXOjFZUyY6empSQ0ppNzg3Y147VFZORi9oYjlMPE4hQlI4OzZQLHZEUWhOUEJQLG98Xlp8SndKNzN0em4uey9jOXQme3trSyxEaU44LixuRGFWUUtPXzNSP1hqMEhoTTt2LzV0OT04ZXR5XzVSQmtNQlJYTWxTI0Bw''@;'; put 'put ''K141OkgqRHNsInhLWmFeS1AmTElFd2R1YDJ8bDlUNSU/TWl8WXtpenEmYU5fXkFYO3dUdENQPyVmWzcrYSp0P1clU3VHRCZbcE9wNjMmWTxMcytdRkxIXnNxalc9KVVBNi5iLlRzNmc5L3RSeVErbXxoaWVqOnNJfWhXYSZCNHh+T2tlR1pAIUBfc0leZmBaZzpPYV85UXtONCQkaSkoRTU7MUUh''@;'; put 'put ''ZXArQzc9Y0tfM3U0LFd9alMwIylAcWhjWkhRZHcoYXh6dGAjSis0MngpMUZkfSQuKFsqOVAwSGghNE8uUmJlN2pzNmIsSlIwSGghNE8uUmJlN2pzNmIseStyOzNERispTkAxS01jMV0xTDFKeWRlaHRAMTRPY2BDYCxEIXllMDI2QEBEQDBISUFgS3ZwdGA0dG9gOEE/QFB1bWB8bipHcXI9aV5R''@;'; put 'put ''SmxAOyIscmd1b216ZX1TInhVSl8vKkN2flhefW14Q0ZTekhQe1VCWHVNYlpvT3pVPERlQEpVQnVoL19SJDxPMCVgZyFxTzhoXTVGTk9CUlhsaSpfXkw7UmU9ZEomTS82biMvMStvOWBiOV1eSEA1P1IqZm9GfD9eVSZ2MGc6YGZkbU5hfjg6OmYzbDdeQEAvV0hdN256YUVRekF2RCFheEkkV34o''@;'; put 'put ''Yj8mSUdCTWtCV354flA1N3A5d0pEZlcsXjZIYEdlfC96JXJaVTZYdC8vRDRGWXA2eUpPSXU1fkVHZU1ffm5OTDddfGs/PXxXdT9wUzBqRGAiPkhMdndDWlZlO2Q0fDh7ZyZmMSYpWHM6eGo7NiVdXmcvYyJEVXtyV31aOnR6XTZyeD1xdHpfTmU9WDt+KUR+dDV+ZzFpTl17eXZleEYlL3VHekkv''@;'; put 'put ''L3oyK0RPTDEodCxeVkcjSVFNUDRdTUR6Jlp5aT0wYkRZTXFEbHRdVFNkfjVhdzMoWlJNWWNXUkhsKTthPEVxfTUiJnlwV2owNVIwYTRHbmlzbiZgSmMhRzFiK3VSPythLD88aC5HVW15Tl1oL1R8JnlEYFcqM3JQKWZhST92bXRrYXF9LnolPSNtKEJUTUNMUWFpKTs4cjwrSCwmaXl9RV9KU1Uw''@;'; put 'put ''KFp8S1ZjWSFQM09SKVB7TVc8Qi5BOkxtZzcqYG9+emxQJHI5NHosIipPUF9XWG9CYD5DPmNLTFhiUERgTl9KK3JITF5CM09IeigzdXFhdV9fOVBXQSZbWy5ffispX3YhYyJ6fXg0ZEV3VGNkTVdHLltEeTtVK0dYYmhdV3hALl9+VkxlUSx2ZCVHTDhHNjh0Yl9Qal9mc0FSKkxJeSNZYkg2dEAm''@;'; put 'put ''KVZ1T3Z1Xk5yL0wmNlBwSUtKc3piNHRKfXdkL3JJWFI2WShWVGlwIlFMemk0Ty8sKlRBSVZNZWNGfEd4WFlpRX5GWHdsNiRZQHtwVW5aLkBGODF0eUVITigrbmcwMFlzTChjVlVDT3NwQnVrbHhTZjxmfXtYRFFzNX5tXXY7YW9rPj5YcWQ6Pnl4e25XUUJIVFJhSzpnUms+KiJYJipNUm1NNHU0''@;'; put 'put ''cztOZ2MyWWNXKEdXRjphezNjSj1vak03eCR+dGhRXklkK2IhPkloXXdDPGBHaVdkMDNvZTVVWCp5MzJ+My9EIWJPLHFuTm9LfDB2XmVjMGhvZGEiNXhXUnAjP0Z3aCkzK2duTipgKEglPHBFWXk9SiZiO2xFKXJlXzxubT0iMW9ZMVR8UCJSW2B5ZCNqY0A/OWBwRE53fnhPI0NJVF14IktKTlc3''@;'; put 'put ''UlhzLzE9djhfd0xZZHhnVTRpNFZyM0MzVX1YaVdjO0ZgWnVJY1NjclNYR2cxMX4mYy82eF4sNnYqInorVFJ2PUJMZTAvNm9nYWNBPl1sMislSX1MX35JfjI4TX1ba2VhcTZyOElfRjRVZUZPTlNddEFkUCM1VUV9XUcsJS9IdnNRb3pyVmQrciVPJUtXKzg7R2B0aWtvYFkqb00oOU9EfFl4cEs/''@;'; put 'put ''ZkF1b3JCd3UsRisxS2Z2ZmcwSF8xNE85aWJlMWoyOFAsZ2VsKnM2UCxQZjEwXTFOUHl6RzM1JUp5dWJqPlZRfj07KWA3TzZuYm9USlVaZm1CZipMd3BUKz07clhWfSJqbkNgOHdGL1AraEx5NnVMVnsjSSsmRD9OQy5gRXVlSjdNMURgdXc/Q0BhRmZ0T3dEUFRSRGFYRDk0STA/RH1HeHZ8KmV9''@;'; put 'put ''IVdYWDJ5JDYkUyVNfjZLWXNCMWNzQkJ6fHNyV1spSUFLb3NCfFddc0JFLmlsK1loMHc/fGlpM0QzbUciNzNhKVcvTU08UmRFW3ojYVpkT0ElLlh8Lm9lcVJkOFsxcF9XWUBHemtifkY8P2B2PzJGPlEqcjFMLiReTmZ5aSQ/a29Fb3xwQldYPmJiOE1xfVlCO2BQMyVVVWg/LisjU2suYDJTdDcw''@;'; put 'put ''fD8+QU1nWVJeOC8rVEA/VH1QZkl3ITZhRzdvITVpQ3ApXzVXNng0ZHg8Yyt1T3ApM3xHLkVneVFZeTVWJFptaTMkYF8uSG1RRmo7ImR0eDV+PURFNnxuRn5KNmZYajZ2T0VkPzEhNFM6WTByNiFVSDZTNX4rP3tSKSNuUigrdkdMXz1uSGpUVjxLYERUNTs2PTAzXzE4d0Q9M3pkV0tIb05mKmRQ''@;'; put 'put ''XVouQFlZQ0ZSVD9HIj1YRjc6MyY1PVV8PnxvaVkiLF59ZF9hd2R+QFAzQWltZTtdT1N3NHt0KWImMFhFfjp5SDVdJXJwVWQhWXhBeXc9PHwjY2Bwcj8jbl4jUSloOkljMC9ba2MhJCQ8fG9VXTM2ZW4lRktkMjtWMX1CRk11c3dwbzNAdEAud0J3RkU1b1hKOj9SeyVuUWFPV31zcHlYWyVpSmNN''@;'; put 'put ''XVQ0NEBrWEhAa2JRTShkNjVGMl4jezo1d016V3A7dnVdJDYqNT0iaSsxYVRNUDR5TSZibSt5JThNZWBSKkFEfkU8YTxseXxMYWBwUXNuRCRONDteVW1PPn14PTU/aH4ySypnS25iOSNOcUh7emksNDloV0UoakVRRjpHVG9HVmovQyUwZllEc3pXRGl0WFsjIyU/e2ZQX29wV0BfI3Q7YGZuSHl6''@;'; put 'put ''K1JDNjQ1JTI2eWRVXT1sc0A0cjNRNC9bQWQ2en5NdWRKXk1NKStJL3FPM0djIWBUM0lFK1VENXExbml3MWNTWT5WWWlZVVRIVE19XX1WM2lOPHFPai91fEs2TlJ7elV9P04kS3VLSzA8XVQ0MSVpQE1xOTRQKWJZdDVPWCthdz45dXNlMk0lQj1lVShZRXk9QWR6PUtQZDBUeDhMaGlQKHhEflha''@;'; put 'put ''RnF6NG9tT3F9bTVeNCF+VSpYPiRNOnpMblM2N0AkJHp2I0dWZGowIl5JU2ZUU1B8Sn5VaEhoXVY3O24jP3JRJU9fYF1kNTdXRzhIQTtdMUAiO2g8Rk5Ce1JYJkxIXmF8dSVGNCFUdis1PUFhQEtjeFFxfV0vTXpBXk5wYip6Nm5YKVg8SWFYbitrZDssKlc5dThXTDYpVmFrbUl8YVV2PHlZNT8k''@;'; put 'put ''QTIkWDkzVzUpW2U8V0ZHUElbRyt7MiFoIjFGLDArSFModDRzaGRqW15zW2g5cyNJSU1Uc0ldKE06YilQKEVFNGlqOzg8XUNWMXFVOihuYX5fNUsyK1hwdTArZD56clUhdURjQix6Z1V3M112JEwhN3ZuMTIjXl16bUMrT1AhPz5JZV10UmpLUXlBO0cieDd4eXduMEtPdjhyfFFPQy41YSMxRFM9''@;'; put 'put ''c1NTdGE/WGYqIU1BWWxAdVRuUE1ZJm40fDFxb1B9bW8rK0JFdHA5WyRjNGFdS31BUT0wMH1tNnN3X3lCSGpqekZ1c1RkbmRwQW5oSWZmIS85flZYPjtEKUdRWDpzWyRadkIqQmZ3T3lpUiZ7ckclR1khNk96SGNAeChCRlhnOmlDeitET0F6c2hiO2RmJjIzP100Mjw2WV17MG5xLyQ0byl3bDkj''@;'; put 'put ''PCYoPSNHYktLflV8QVdOSV9XcjVpeWswPzNAV0VjTXleZCtFPT8oNCh4fkZoP142dnRNZkcwNX4mSD1JVUAqem0mfEwwcmBUXnsqK3Y6dXxDIWs9KWA0d0Ngeys3MlI9JjU3UFd+PTJHZlB0OyNqTTNzQVhJMjN7L0ciLl5+ezNtKnFqZ2ciITYpbytBb2pAXytXfCwldll4XkU4W3xENjlmUXZ0''@;'; put 'put ''fkVlcDM6fGF3PiNBTzxEeVlnOnFOWVhqMGB2eU1SeXpmdktyYTl2KVImPUQ6cjBgLFA/fVcobnhgK015PTwrS2V3d1FxRmUpaHd2Tk9RUHQlQlksNXAzRVlqI0VOQjg3I3Y5d28rKTlTXnZTZXxncGE2eiNlclBJY2JpQzI7Qk1YIzlBOHtjKF0oejBdfF0uOUB0eEo9YDB7ZXpMem1pVjhwTCt3''@;'; put 'put ''Pl84L0xSL0JVTV9+LjNxKUxvRWxQPiV5bzhienxnd2xAdGdSTGAoei95JT5JfFl7VmVXb2V1c0xYWGBHRVdeb3BnQ1VWfVJibUJ3Ky88WTdTfktOMmFmTjNlXXtPUHpPOT42fVRuLmBCWStPNFQ5ezdWe3kqRi4yPmchTHlBQzNsP30rZV19YVZsYXxeQlVjVGUrdVJPWGFDc2JkZmRhaTNrVDYh''@;'; put 'put ''NmlGQ1Y0TzxrN2B0fjMhXncxTDJmNF46ImY0Mml7Lzk0Ul1RTnQwVz5NND81RzVSXS5HdU9ffn1+OEldey5OZitMNEdPfWI4SHVyLkZZKFtGRyJrQHZOKl0oeGNVZVRITUNUamlTQ1ddeHw/fFJvZiFXPkp4Mk9NYG48dWN+Vlg+T11pL0p7R0R5KTM8Y1IzUGhDRyJMUmkkdVpmJEtCZmRiNDs/''@;'; put 'put ''aittP0RbPyR2TGZRc0RXfkVRVn5vOCUuT2ZObDIrMEtCZCtkSzZdZzVXVmtzUHxmdEElVCtYUERXfl5kLHs1bzJpMDJbQigma3pLU3RzOU1DOlR0dXNmR117TmR6X3VCUyx9KGZMUGpdSExCZWxgZSIrOHlZKFNvV0w3eGJ9cFB3WTpzI2F1djMsfT9saHA5WiJbKGxAfnc2WmNFJDIkNjpZcWs5''@;'; put 'put ''TVtwY2o6SEJYV0lQMiV9flJxfUcqLlhdXkF4YHhMW19fUkA2Y2U5K3xrMX5wS0l+Z0slbk5XI0xIV34rdDN7KExUQGRfU3poIWR8Wjsjd21VKXJZZnBCJSF8M3toVUBLY2hoJCFCcGA+RX0rXyZ4PHlwVyI1dXNiMng9Tih2cGY8MnxeUz00cHdrMWN6RjJbPDo+dys+TjFqW1RZOWQyXmshTCVp''@;'; put 'put ''bEckWXFreGc3aDhQcktKTyQyPXxTUDpPaFlKU31CbGNlRVQ9P08rbX46L2AmaEhEWTIzeUReaXtjYS8ic31+LlQhIm43dF4wTnl7NHV2cWV7Zik1QUs/RW9eKGxhcHl4P2M4fmx9UigpeT5vTGd8OEh6Tkgxd1FNe05OSHh3YVk6RDJ9fHxCeFtrZkpWMyV7clk9PyI2YD1XbDd3LFtoYn1kYjxH''@;'; put 'put ''YEdsTDYxITQ1ZHU5VTk7b3l4SG57ezllKCFNbzh2dzhyOGI0a0pwN00lQlokcCR1dCY6WlZQfXpfW1NCV0RDV35Sb3JARnlFfVJvKyVHZHA6JSg0cyZJLFhZQDV9XmVxQEtxcFAmeTZSSy97SmUhRSQiVjBAZFV3UjFVOHkifk52W3pwQF1ILkhiTHghIm5aMyRGYFNLcSlPN19JbzFgYnxIfldU''@;'; put 'put ''N2k8bHJ9P2VwUGt1NHM1cTMyaGx9YjRQTlhNe2ZKfHBFMzwqKilrdzFGcTNgYmFkYShHej5YYXs+Q1FoN2Vde0R3MnZSN3RZc1twYkdHZSUuW15PdzRZMERkdVVma0g2WTBFOmBmdk9INnYjRihHNDxVdEhaaWx9NjBXcyN9SDooUl84NmgpbC4jYm1dZilsfjgmJUgucXY8Mz1geD1+PDxoODMh''@;'; put 'put ''aDg9LmlsK2xJaUJsaltnVFFae3NkIVg6Rl9QWGhzcl5bNVU/SUZzenEoe2sjb1cjeHd7fjgoZWclZlRuOC9Ce1o/TnpoeGMrbTFmW3VwOT97IVh5fDZ6NX50NmdVdFA4M0U4YXQzcFEwI0BDWEd3WW5AMW4oKDdheCxebEd2OjQvVk4xej56OUVxeSV5UltKUThZQXFGcmR9JSZQflt9ZTFUZThA''@;'; put 'put ''flUsSH5XRXMmRjF8Vz1MTXc/OnR1K0FvYSh5azQxJFJ7WGxqd10mR11QS2x9dGIkWCFSdTNCRXNLfUIvKXV0P2spKEVNeUNtMWJUfWlfM3VjKFVOKl1MX2JbVERsXVg0RmUsfHdpMHw1SFB+eE9rXjx3XW42Y0hXe3U+L1hdRzBHO3sweCNXXUBJK3NNeTw3XyNYdSg5MFNSMmNITyUwWHw4XjxN''@;'; put 'put ''TDpnfTc4YGNsdEYkI30qXmQ8V2ZzQkUqL2ZZVDIyfjldVjVhXkdMX2BAZlN9UGFlenRKUUV4NTlXJFU5P2hmV0xVRH1dfTluQiUwVGRKelJIdWgyT0VmNlF2cCIjfFtFS2R8LlBKT1N+QHl7SH1KZHxOU1VeKF81WnhLPG52VlVDSGZ2aGkyVF42ZlgsUWpgZSJPRjxXXjF9PiZQcTg+KXJmX2dA''@;'; put 'put ''VGRYfVYwVTNQQ1FEbF1XKEBlRSl8cWtMNyEzd3ZjQCNAbnd+QGtYMC83WF9zaEkod0kwckxINkUpc00sQkp6Yl9PMT1ZXnMofS5qZCoxblkuVjhEN1kzTWQvOWgxMXNoZ2NBOygsaXYiUTNua1NbY1ZqRmshcCJdaShrN2hkVGU3OFtKJDMmc2lUXm5JKUNgYiw2eTlDUyJEcEAuK1sjZD5lIjIv''@;'; put 'put ''VDYzUSU+L20rV2YqNmJ+LG1ffmJ+Km5hNnNpbytBPTpaQGFjci43fD9OfVUlQHJ5SC9RcV8oPno5KGMlUURkKnd4PXszIVFEaGI1b1pgWz9IbHI7dHRKTjFCamJDMGEiPUlAOClNPD49Pm9yL1VIQyNsfGI3NE92fXc2QylJfGs3QSFWVFo0KyVDdV4uNDVhdWxGLFlxYDRmJjM/Lm5rXTV9eDtD''@;'; put 'put ''bnR4WmlOZkQ+Imx2Kl1KTUdVTmMsTzlwJiU+Z3JVMSFRUl9xJH41TDYuZkBZcHc5WENnKEB5NnRhYDYlIj84cFZfakkkL2Rlc3xgQzVpYCZjWkV7LC5Dfix+P1d2UTRGZjI9JjNbNSRpVjkyfEdQfT9oMyQuZy4yelteNUskfns2WnpVMSV6RVFUQio/RkZPTyRfbHNyWD9CV2hWSmNANltsTDhA''@;'; put 'put ''eUZ7O2h+djshVT9DcmJ9ezNpSkRkSTxeZXJdZEJINis6eE95cFVwLntMTmBBdDFbZHVdPGM6dTd3eV9kd1RpKzBjMCFLKktMSGI+QU1XVS8qYSp6TURrXiQ2T3VrfGJETTZyZ3tLSUlLNUF+QFZaaFlFeGUvQ2B2REV0RytIcXRkbiUlR1VWUWJwOio9WHc6TiJiYHBXUzUoXlU8RzAvOWdFfEFu''@;'; put 'put ''PyVXWFF8bWlBKTdyYHhDei5PWF1iQlhbZEIkZlREM1MyUj1aTF5DdjxfTmZCQV9aMnY+emREI3tyZyVwKk5lZSZ0JnlMUTFzL09jTX0qblB2bmZVVjp0fjpHRnpBTE1lQUN0dS5+MkldNTV+eGFxfSNpej1qXyUkRUlMSC5ITypDMURXLm43aCNoZzskcklpQ25CUHF2T2lmNzpfeXxCb1p2XTVA''@;'; put 'put ''PiVDbHMzXmJ3XTRsOjFMTkgyOyppPC9qT1FyXjVkfFldek11PykmdWRvRlldbz1hbkhyZ0B6Pjh9ZkBHczE6M01hell7WmN1VmE+MnNjeEsjXUkzS0ZvfWtEQFt1KS96Qz02YilWInQ2JDVfIy4/TmpSOX1scjVvNixINDt+U3h7JTRgcGZKOlAjN1dqb2NZMTBaKE5pX2ZZOk0/Rzo/PSQ1UCI4''@;'; put 'put ''a2F6K3lod3Zga2FAWiRKX00rOyNjYF9icCsjSTFHb2hRI2gkT3ZPWkJ8Nmwjcl40YXUhS0U4fWd+OEAjbmRTJFQ8bWdMOGxpJkl2V0REXSFvdyk9cyxwIiZsfjhHOXpOZ0tTcmBVIVQ+cWs+QT5ecSZfKzlGUC4ySDQxfE9MMUQhekFKdXkrdGNVPTBaWGg6JE5ZWGg6R0x0L20oUXRUKjVvKXJp''@;'; put 'put ''YCMhcT0xXl48IjhCX0Fxfj00JUh3W0wkZ011dFt6fV4kUWBwKWMkVlpmJUJjenVBemE7Jkg8VlJgKTlCWHBxdncmNWdRd0tURCU5Zz5RSit6V2NvRihncDZWRlJWd1JNJElkPz03IjAwcX1PQHhPN19sKVhKZldOTkghQjc5bzR8VWV+Jnt7Tm0vdkIjQCxGN0t8cSpFKFYsflMhckBmOWNVZVRh''@;'; put 'put ''OlsmWzd9fT44NT80Rns0OjJqeEZJVE18Y0dBfWFANk5OVzxJOn1ycHFzREBnRV5ONjhuWU1HfCY/ZU9MYmE2QCFOR21zS199O3VhaTBkM08mWXxDS28oN35nL2JsL3BvN1swUHVbWyw/TStNe1FFSD0+IkEkN11xRlZNWC5eU2MjWlFTS086QzBLdHNYVjo/Znh7T3ooYFghR19MKjMwPmluP2B2''@;'; put 'put ''SE5WVlhQQSxVRGo5a11xJj54WlMrX3hjKk1YTjA0K1UifXg4UGhncnYlV2R4MEhTK2pVN3w8JkZLMT0mSytiWFZ1WEtBJlMjQiNYQktmd3tqQDApYW9sRkopN1d+bDFiKChQdTFuViU9QitdNzJtQWxbRm1QJSVWUCUlbGk6MWhCV35FcEphKCFjeXRdXV5ddTxYN15rT1h4VFtaO2JKZTxvZ01o''@;'; put 'put ''Mj1CN2I2YyV0aVt3ajsqRmx7dm8uOV0zIlYjPnB+YWkqcWR8bjhpJDpjYWEqWDRjYCw7b3ViVDdJL0V+ZzlHbnh2TStkRXwmLlsoYlE0OV5SeCh1I3pgbVVIYiFQbGo9PUUmQ1lUPDM9KmZXVzl1fiU6akxjVmFDcktlOSI7Q0cyfnZOU0ZefWQ8ViFhTjJ+Mkl6O28xMT02JX42RzdkVWA4ZkN1''@;'; put 'put ''QEZhTHVTO0N4SUxwQiZoLkZ4b2tYKzU0XlV8O0x5c3Nzb0dZMms/ZnIsSj4xJSJDZiZ0c0ZzLjxRaiklYmdiKG0zKVszbShPVTZGbTBaZEIvaihXNjU0QWMze1hzPEcuWlA+N01DKjlbbWxERCREUWZzP1FNeSJKMkcjcyUrbnZ8cWMqbiR+YTdLd0g4OENLTiRRYlovTEtOU2F3eXZbVm4/VFo2''@;'; put 'put ''PnJ3PjhDQ241b0NyNERgKzMkZmJCTEpLXyRDcUtzMHdVUTYzcHRGeW5nVyJgckRvNio7dSR0Qnp3JmF3VkpQfSopdkNkWUx8aVQ1b3VHYFFqcW07WHlNfkprYjhwL1o8TnwuY0khYV40clZfRHVUX3o+ZXxaXyhpdiYsdz0mOSRdOmtXUXtvb103SHpKUSQ/IT18fiEyMH1yPVN7bSo+Wz1wUnd1''@;'; put 'put ''fENgYkReTV8+RitVTilNWnVLfSMrI25ZUiF3fUVofmVXLEpVXWVpdnI8IzVTd054QXVFeWJKfHI0XyRbPWZAa0pNWjVkTTpkdkJkPWVbckkvayh6dW0rM0xxQjZ3ZV8jJFYzTTI9dnc9VytSfTA9ZTxVMG9wT19IJlRpMl0rI0dIdDdDR24kMjoofVJhWiFTeGZiOiYobTJfcT9NWj94PDUiXmBr''@;'; put 'put ''KFZ0MTt8b05ONGUpaVt1RVF4WFhIQCk/SC9pKmZHPT9uPzBAXVVDYCFPYXhGeXViImRnX28/dXFnMG97Pjp4NkpyfHQ/Xil3JCFJYGN6OFpoPFN8fiorXlA4K0BidUtqYCNOMVF9UGBydkl+MDRRRU97dnJyZzhELytMQC4mWHlkeEVkUmJZcz5lcioxPEZkVGlKRzQ9QihUczFoVSo2VE5zb0Zk''@;'; put 'put ''N19eNyV7JUJ1X2BATFdKU2ZnVkZzbSlucEUoRkwrW01Dc30qb0N3KXM0Yl9TRjdFOTpmSVp7ajQ7WzpbKT12M11qPT1fMT1WJSRgYms3cEVlPlNSOkdKWDk0TmhdbXFCYlY6d0x6c0t+Y2E2TEFKLm0kPSowImFDRENHLE9eOTw6bE5yMFlMX3AoPVJZSlZrZn1VQF5GWz9vd2JbfldKbVhMJipO''@;'; put 'put ''KH5xTnxGP0szMHNuKXp0YmZnTlArWzFMJF5KL3RVcXBrZTBjYSombXxWMTg2PzxvVjJ0dlZhWj5Ecls2P1p3dWxRRUgzNFdlNkJfcCg9MHZuQGA3Zlg9bytUYEcpYlhWSHVfJDBnN0c8X2gkMGd6R1V7YW9YYW9AWXBnSyJVNDtGNnVxVVksdUc7dzl+LzovWiVbOl9ONG5jXl9VTl1FZFN9RjRv''@;'; put 'put ''fF8rL28lOlgjQG9hVilpXV9VQGY5VFN3SDokVU85ak02VDk3LkZuIm4jemI0c3JxZUl4QiNXOn5UNz8uJF9bV1ZMIXppPHpXTShWYU0mfWBwJjJgcHYjY31pX2U3Vk5bVD9RMXMuTi4yRnpfT3pUYVhMR0EzXSlkM1twS2g6Z15ObVclX343KGQjNFJdbHtLTnI7ST8qYkBfP3x4ZjBPfSY3ViYk''@;'; put 'put ''aElUOE86U2Y/cTNscDBAXSo1TzUuXmw9M2BCPlgzPiNVPnB3SXpWfklieTJoTnBkO34rT1QpYUBAXXF1RWFxWVYiKz1hQnQ/bV14biIzIilxTn0qNj9rTkBhdkpQfmRePHxeUWJtZmRoYWlaX2pFRDFFL2NkM05qMjgmUzg6bG0hU0Y9WVRmYW9IUk1lU09ye2FFflZaYnNDe098Q2Q7OXopelQz''@;'; put 'put ''aWYyVGk0T3Q0fU83aWlaZzlXMy9YYFQldzxIQ2wsa1A2XzpdWUM5aj53eDswYmVnIXg1NzhGWiNgYl5BJkI6NDxbRy5FcmhAVUpyTSZMJjMqRGBwNj8uMjN1diVKQ1RgV0RpUnImQndqb3VoRFohWEVmWF5Ie1FbbjAscmdQZF14eHRka14mVCg3dmRfe1t0MH1KXkFYKk1vM1lkR15YSFFlMCJ6''@;'; put 'put ''YUdAdVo5QysqNj4kZV9IMUZGQSFSXnlyYl55ckFYU0AxcnAmYzRQKU88dXEjdzJmXkxsKntvKHcuWVpHWHl3eVtrXmt7TVBwNGlwST50YGg8JittPUdsQlAqL2BRN3BiPkdbWER4OkZde1R3OyxObzNZW1cwV09wUyoxK2hfLE85QElQfGdzZ35UdT8lN1VYe308YWFMdCV5P0hbOSFwOTtdMHN2''@;'; put 'put ''OnxmS2Z0KmQlN0BTVX4yNEB2dk81XTE1VW8lbXpddj02XkBtaDl3WjV8eWsqXiQoUXFraGw6eT9fJjoiTXFsKW5pcyheeFs0fjElYlhQPnMlbEdUIU5IInxsKT80fmg5UEw1OVh7PysjRzs5amkhcypDLlcrXms/ZiJRJVlFcX5gPmVmQUhJRyVFaCQ5LH43QCs2OjtBTSpBL2JxfUcqJTx3emhq''@;'; put 'put ''bkAmemtlY3VBX1Y7VkRyKSVHX0RFJDB+XUtxfU5xWXswO1cheWRmbnQxQ31KPzdzUjZgPmtKZWxRSHYjKHAkOXNlQV82VWhxbFlWMzE9PTREdUx4alZCImopfj4iblY6KitzdzhkaDw5JjRbMiF6VXBrfC5HLlszQHxhfTR2fUlYKWpMfUgkLGVscC9TfHRGMmxpQWRubkBSb3dDYk1KeX5MPWJV''@;'; put 'put ''U2UwW3cuLDl+PkhCTXBpN1BBa29tYng1SmFvU1h6RjY3OkJ6Vzxidn5MVmNmS3t9NlZqeV5yMCorPlJJWWlrQHo5IWZTb11JWio2T1E9MERHWWlaekNMfkg8XU1WVDlSXVc9ZF9oSDd0dTtVe1hCY0N0dnM4I212fUJ0MDBBX3ElKk93Yk0sWiVRLClhOT9RYyJpa2FGKkxZNz1NNk5Lek98KCko''@;'; put 'put ''TUQqMSFHfCFNd0N6KiRyZlFZQj9RWUI/Unpla1dHWVQ8LHEzYGFPe2g9THF0SDNAQnxPdTpGXTcpd0hrelAwKV0xNWJiP3B4aEpDXnd+a2p9LzI4JlJTQDdwYnR4Z2dmY1l5TlM9fXxfU2xwSnFRM3kpejc5UDB6N2VVNmFqQzgqIVdhXXNFWHJ4ektbdDNjOVAkIi93KDkoVmhvMnFbZVE0RmVf''@;'; put 'put ''dFBpQDJyNEM2W28zLl9lSnVyY1t2O0g6K2ssdnojNHtlOHVveittc0tRKWYvUlYuei9rPUhWTT9IVmlUMltqPEhRLEpiZGB0KSJRd0QoWlYwcmYqQn5oejFbY19NLGFDZHBPTU1tI3IpWDI+R3B0SFJaMitHc0dgRF5URUg1cSNKQzouMCx2YVI2WSwsSkxdKTR1KGkuMEl3UGk2SSxfNSE3di9a''@;'; put 'put ''PUhwTD9IfXkmWnwhMUI0eiNQTSxETjVqUUQ0T2ZGKT9tbnZpJUloYE9TK1l6UD1pVlZ+KU1TaTA3b3ZvelBTLD83SCl6aX1qcztMOD4xWGEodzdNLjBTekgrSSRTV3J3NEcmb0ElLlY6M2A5bT5jWnFEIz5wTzNzaTlWWi5EVz8yKi9TM01oQEh6WXt3KXdZMStMTHAsYm9yXTVPVVsuNEslT3wj''@;'; put 'put ''TDsrJV9eY05OcHt0WnduZXQse0UqKyRqeDdIc2U2VGdnTWhTczdaXnxvWz9dLGUueixmX0pwSzcvZjZSXV5xXWFKOywma1tyZTRJXntJJFtwTG0mUF1vXjgsZlJZJnAhKEpKIjBQLDJLNClYKEFoMykhS09zaExHbG9jSiVSbTxIN200NTR+Vn1PcDVtZl9SX3tZNkdmeCkySitfRjw9SztxTFdY''@;'; put 'put ''MzMhYnpXczdTVjg3c11iIz9vYkAweWA4YXtpK2lxKSV0RzxdTGtIS2gzXWtvY2JWflRERF4/flZGJFopXX5zKylRVSt4WTgxUSlhQjk7QGRtXyxzTnhwK09fL01dZl4uIyV8TD5lfWUzWUAzRH1lUUxOJWlKenJdRHksPjgiZj4+TDcleFN1Z35UQTMlbklMRj1dVyQhND02JXxuflQ5STd4JkRa''@;'; put 'put ''K3ZQJERQPXB1SGkvaSJITWExcnFTLjh3dHAoK0h1OTNicjA3WyRpOilLPGZpTyF6SWFFZnM/U21LKTUlPFsjR0B9bzxld2AoVE80UFZLSTQ6RERUWTUuUTYkNF0iWndeMGAyKFVYVyhLUmJvS2NCZjJ7WWtWW0s2X15CLCNkYEVeW0JBSWN6WSVYU3Q3JVh7WTx+UF0hSHJja252SHwvfXh1dzx5''@;'; put 'put ''ej0lZ285aV5pWVskYHlsXl9TKlVXI1BQTHtCaT02YH1fOHRbNjUrOiw4Q24mU3QhYHApZGlZbnxLOXlDXnRzNC5KMXZ2MmtoJmUjKWtYcF4iS1VpNmo9Rn1tQWNweDBSWGUmMyMufDhgcj9sZXs5b2V0IW90eiZwX0dRMktaNXEjc29zTldkbTJzInY/JXlVIj8hS0ZVNmU5MG43PFg1PncyKVpH''@;'; put 'put ''Umc5PGlTOn4xfkkvK119Iy9PYlRNI2NobFBORFMpWXJjfE9xUl9DQCwvTj1ZIV8vL0s2dVNYI1FCX1B1dn5KanUhKixlW1JuWmU5L1I3QGk1ZC9yeDAhPVBjMkZ7WT5FSXZUPnVPW10pOkBjYV14djxTXXtXYXQ6UUJMbjJuKXA3c3RmT25IdnlNLmBJQFhAUFA4Xmo9Rjg6Xy9YXyJLPm45KWBR''@;'; put 'put ''dnQ9OHciSTFfaCZdTDtQPClfV2NNJlVmTj8hb0lbJnc4NkJwaXdwbmo+SDRMNiRefjZ1TnQ3PXM+KEFWZFI1RjtUTTlqekp3aVVSS25MWWcySiVGSGYjWkwkaHQwKSRfQkNDaG9JSjczLEQvRkVBPU4kQmk2QWFCJGs/KT85O0VLSz1qO2ZPXWxad3gmPCYhWiEhW0k6RC9ENkZTR3A3cksoREpX''@;'; put 'put ''Pj40TmtfcSV1NTA/IzJvfWp2ZiZSYypacjJbOTs6VFkwJEhNOXpeS3RJRiplSCMxcU9rKUBPK3tSe1tNRTA7MkVMMCZAcXl6ezh5ZUAsO0ZFfT17d0p3WChFZEkkMmdEYDQhKkBMOXpeOGBYIlZ8JF80JncyNzZPP2V6PEBPRXlbNEBHdlAuWVF+bUo5YmJQb0F1I2thWlVmWldPQVlqIjROaWc0''@;'; put 'put ''ajloeUJ5MHU8fF99MWUue3VmbyNweWdXQ0pCay5aWCklOTFxW2gpMmghQHJ1UzMvaCE8MSRUbip2YEo0JWk+PVVAIWwqa1RKdDVySWFxUm1lNDVhZmBoZl9mKlkjQUNwLkhYOERKJktKT0N4NkJfXXhBSFNJVzxoWkZHOkMvbWg0e2JHSkxEYD1POHpye1o/WnU+bWd6cXhXbE9vYU5QRWlTSSVv''@;'; put 'put ''aWh8RT86Q0s5JDh0O01UTUR2UX1zKlRUWDRTQX5QNm5fbERKPkVZISw1RGAwWFhEYEl0NkZLd3d5QXYjI3hUZWg3MF98Lz5YTC9WVldASjNMMSlffWdbWEx5S21fTHkoWEAjTEh4dkxFOCYsbHxDKlk3MFFdd0k0e1djMU1pdHYlISRwJlV9c0BTIiFeNDkjPSRdTHlEWHMqUzhCdzk5azBvaXgy''@;'; put 'put ''NmNMa28lc2UlW2BmLnQjI31bYGY/aVpdKEtqbWZLPUVlLjRdYGZ+SU03fTgpbEZrZVAwRy5nYXp0Xl1QIn1UXj54STpIT2dqPklgI1BaWGpnPDkrcyRILk08Nlc1MGAvPSxoPGghSVVOZjhAMCVJOls8clR3L0lTKzgsZ15JczQyZ31maTE0SUt5TVRIY3RlOllhXjZYYnA5QGJXRTs0R0gvZTtt''@;'; put 'put ''OGZgPTs8ZmVdZCxxaiVzOF1kLFBrUzI9WXw4V1BXUD1NZjEuIzNnTHVYNT5sVSUmTVg4bjlZN0RKfFByVjMxfUh3TXEqREIhOEA4PnpYQ1BmMU1tKmAjTmt6InpgSzlaL3FaRGRESkp9XzhxanppJjtCI0prTTR0eDt6VTtkLixsM3t1YzlAPWdhXk80dlpfU2lvdGU0cD5sKWpPcC4jWGZ0ZWM5''@;'; put 'put ''PmwpalFwLiMyZ31mfVBPcC4jdmxaXXpsYEk+bEVKPmxVMixDaiRNVFtLP2klJiEpMW0vfE9rLnFabUNVWEJJdDt6eFd4ZkU7eTxBMERUS2JJJDJnIU9oU3FeSD1qJE1ULERuemRoZGw7Q21UTmtefGUuS1VaVEc/TWtUJFtZRm0oL1IkNzZuZ2IlZ1R5bVFddjJ8JkkjNkZPL1VxTlszUXEmZjVZ''@;'; put 'put ''N08xOTlJRmMqbCxGRS98M3NoOzRdTXxfRVltKkRSXigyKVlRfkNPMnJ6O2heM2pQa3gyTG14V0IhSz1IdEFpUitrP19IO3ovYCZ5OTkwbD49PyU3InVtakEyQV9qVCQ0SEQuaTxhV089NUl6e1QkbntUJHhZVSRQZVptTzRIOUovciRjYX1rZGFdZiEmK11kLCFuIzxmYEBmJExmaDUwaHBSNDpr''@;'; put 'put ''KmUqTTUwNjBScyU0PUtEIzFPYV48JSQsMnxIOXdjJSFxajEiOVh4ZSxbVz1xbS5aP2YrSk4kSDlUXlFmTCpqNXptZnk6VT9KKUdEOVlQQDU7R0w5JTxUazlxcG05THtmfklET35IUS8kJj8lSXY2IV48dDtjOTFeJiNhdGEkbmo/I01NSHdSci9AZSt8LzVYPyFlNFBaPndOa3dNe3FnO18rQCFJ''@;'; put 'put ''RClmMDAvIyZSOklFVEhjOE5hXlc9TCQ9a2FmODlnaDgmUlg4Jl4lQ3A4PEUyOTl8PERKOGo7Zntxem1LOzVEJTgmWkt5UT5aVFJyfipiJkNnem1pe2dBKC9aVFJyU20/az8rbDU3e04yLkhYOFUuR2doITYjTiR2bF8veTxoO0gjamUxeThROSM6TSEhT3JeWClsMmt+bSpPKWx+bTIwekREbGsx''@;'; put 'put ''OCZhfUlVK2NMKjV6QEhdMjVnPE9xNUIwajddJWZldlp1NFZtWyMwIXZaKCphJEZYeTAjJjFsZSw8a2Rsdzt8PShsWUhMPVBIaG1XJDJaZUk9PF5KUzhZbkspRDI3andnTHVxfShKTEJSXjI9XSNkdFA5R2QsVG52KGlabCFwfDNXXmsoVVQ0eGlNSyglU3BbYUVkRU9gNjAjJjlkOiErUUZTTDl6''@;'; put 'put ''R01fbGZ0O1V+WHY5Xl1QMnNHODpwOFk5KGtMcUlhJGQsfWtjO1V+WzV3O3c+dmRzZXlePEwvNE5oPTtaV35rU3NmalUlZX05OHk+dmR4O1V+U2V4T0VnVWZ6PTBvTGVSNyt5Nmp4NGBmNzBgfCEvVjBNO0M6ZSE8MUl2ayRvIWBmalVlTVR9STppPEhzRWx8ODk0Tns3V3d2bUNqdH1yWS97PmY7''@;'; put 'put ''di9Fayt8MEU0dD1oY2NJc2ZjVmgubnt7ITl2bE87aU1KTFF7OVFzJn0hZzslJmBgPzxaV2RnSXN2Y304d2xieyghZ1c/aSZ+QlNHKGZgZTR5czlSXShYanM0YGYrO2ghQHkye3c+UFB6Mi9ZdzxIfWhmX2ZsU3FqRTsuXXFqOiM/JTZOYV5MXzl8OHkhOXtmXytmdGxiPTtuIzhteU0uQSRIRmQu''@;'; put 'put ''S2EuOWxiKyVmSDJyJG4wZCVDW2pGVER3PnVvbnt1Y2VUMiwrQU50Qj8kbVklI2RjQ1Evfld+az4rbDUpSCRNeTxUUDckNWdoXVM9ZDlSe0hTUn15PCtTU3tIU21IWW5AIyVsXWY7dWg7UlhxVVZuQ2gyMFNzSmc2am4jdi5oJmlweV5XUFo4dFlGJlE+dmQjcEZkajVkaD49NiRPa2A9KmxJN0sj''@;'; put 'put ''QXZdamZ7TiQ6WXxxP0MpZj80MEc6LCx6MVlEKCx7PF0jMTxmK08zXVptaEtDcHVOeD5ZOEhDRWd3TGEsbS5qNS5JXntNVF0oNVR3eGF9e3A8cGRgYF4hblkuPCEpMmNEdT4jZCNObjg5SXJteEojbk5rJkpIIz1FTztqNW92JmMkayUrUFRXOGgjPGZdIzN1OVhoTyMxcHNlOkNNM0pnOz03XTV7''@;'; put 'put ''KlFJWS5EIU9bVlcvTWFsQ048ZmEuOWwycW87UmAhY1Usa0dlaC9NWysuWSJJMlZmaiVmJSsuI1htIkp+IyN1Nk0iRHQ+QDRmUExhTmsuT1dqez9CZFtmP2UqWVF+JVteOF0oO3kqWW1LcXhJNyopaFJdOkdNWV5XUG1CaDUyfHd4LHpyezUwQCtTfXdeNmBkLlc4PX1eZl0jUUArOGhmI2VIIyEr''@;'; put 'put ''PjAiQmJlKFpNJF9GZzxiUWEsNkw4cXRpS35TZTZeMmo4QHxDUl5pSk4kIkVbKyQpfCEyc0pCL2ZbcXplI1o3akoqflRpZXw4QGZsTyhzSDNOS3ZDZlk3YGt6JTIkK29ibE9mWTdgdShvYjkrQjxDImNHK2hEQVhaeVdNbUJ0OmNEWTwrbVNaR3V4WFp4Img7ZnJ1eEojSndFc0MycSNtb3F4bFVY''@;'; put 'put ''Wit8X0VxaGAvVjI2Wl9bRlo2NUolfllvekRUbD8seCxGNzZANTM6V011YysjYFt5eUFLa1BZSz0jKCp3OldFSTRqMFApLkJFRUMpdihGRXV0MGttQkVFRGBoMnhVLik8IXJeOGU4UVZLTHkwRSN7I002IUF2bW5TdVdbVldqREgrcGxlP1NLNTBAKzlkTnlLWWlER1opWmdSU2UxeShpL05zLD4x''@;'; put 'put ''cWxyJSpAZStIUGt0Olk9NEA1TzEsU1NEZ3Z0eltmLiN6bE07VzhAZn44dHo5K1E+anI2TmFeOSF6c1dXcyo5VE5rMyJmakNNQz98eDs1fUU6NypAOHFXUEg9cGxMRz1AbGZZL2dYXnFfalJHR1M5VUt0KCVnN2Vgc1V2dStdPElEOTF6QVk4IV96eHB8WGptWyN8Wl13KWpSNWwzWlJ0JjNiZGZJ''@;'; put 'put ''WjdsX3pQVEhjYDxhV189RlBSODcraCFuYyFTcSs9JD1rXU1tKiYpSFNgbVBec0xjKjdYcExfZiw0QDUiMHFsXmNiWilaSFNtMDVSKzhANURKYyYqbCFOIkRiM2skbWp4ImJyUGU0e09jUzEpWU8yZ25AI0ojZ25LfkhTZWh5PHIkX209T259T2t7TC80eWk7K1ZQXlV3Ty5aYi5JJDltPzF9OEUl''@;'; put 'put ''aDs6d0U3Pl1XUGFQNzp7OCU8NXtzOm1TP2ZEWW9gO1JUSkZrZXo8aiQvJiF5bGB8OFBIbWFwej0oJWZlQzByO1JeeE03PHloYlo8ITBHM2pnM2pUS3dHTVFeOGIhTTsrd01sWmU6NGJ2NW8heXMrXUlVQmJvJE9raXtwX2dHdS9HOE03d3QoaVJFeWV1LGdZUEs5VE5rVSk1JH52ZVZvZTdqd2dT''@;'; put 'put ''cF1pRG5iLnl2Zi43eEQiazpBbV54Ty97aS54S1RrP0JFKV1fMn5pIlNyQFc+Jj09Q0liUFh6RU9VOVNzXylffGMqO2dBWENuTE5UQ2spemNgRDNddl0reiFYdTpzd0tCK11+VjlvUmgzelt4N3NRTk0qRnFJJTVzZTJoT3Q9RDpXeyRfSEhbMFJdSFhGYDZ4fXArTnNAITtWMTEqdipfI30uPUxx''@;'; put 'put ''cSs3PSwoODhFdmxFbjJeSXorNmcsS1VKY0o7WDApKlY/NlkrVEhdMzF9UlY/Y0I8OVomVGN0Ry9vMTpiVEFXK0NPQmVCKlkqWGI8eFRJaTdhbDxWd0pFc2tOPWIsJjNmN0p9a2BsYSZaSTJYT0lXbiNeIUtWampSNmEocWBeQyF8aFlTLEkrRUR2WGVUcXpCWmF9XyhxKz08KUVvUkdeTnBgb3co''@;'; put 'put ''YTpuRTZnKzs6SUB6cjRFailAJjpoQ1dUa10zYXZPS1M5UW1WbCQwYD8iPz0rdi98W1pWOHYjbDIiP3M4UzRTInVDSDN0YGlPPmcrYFcmVHwzPEVpVnBaZG99X3lUN1QwU0xsd2czeHJFVy41RVpKPEpOMXRgfFR+YlVlYzVXNXx5OGpFInsmL0ddcm85UXh+clZqPF5vc3RCLGIhOGFOXVhOW0lw''@;'; put 'put ''bkF0WyJAcWBqaVsyRUZZcW4kNEt9S2s9Z2dEaVJbcm5IdTAsPipCK3l2YkEkPXZoMDldUV9PKW8ocSw+UUI1ZXszUUJzbUdDZihnKHFkI2c6KDA8PztrJDh9RSJSQn1paVVPPkNLZSs5Z25WfXY1X3U/YEFyaDNFRHZKQC8xZHl2c05vXVZzUmNVQ1VeZVo9UXdGeXViSilDYG93KFM2YTVpOj96''@;'; put 'put ''RFZqYCs9enNvRW99Ry4ydmhEOj1xJUcxZSZNb1M0U0pQW1RqJlJocSU8MUI2SjRHKVA7NyxhQ0l5dWI3PDN1OCxseFUjZWtqfGxoZ0V4SV0kdHxzcX03NEo9U1M4LlYvUzQ8e09LX1BDQitve0d1QWpVcnJZOHRBe15MdXwuU2RUNG9Fb317My8/Ont7LkxhM1N5WV1WKGFeODIoaU1BOTVyNGRF''@;'; put 'put ''TlMod1s0UClgQEd4WGVgLFp7O3RYK0xqNHdhJSsvKkpENjFATHJEV1YyUC5vW1pRayZdLkhoVVlLWzsqcDYkKmgzVHhAank5QEooNUBtTGphTSx5eDc0U34jJjVHMl0vYmZ8VVZZbGdlUC9lVCZ9RG9ZRnptYzFvcFd6VkM7VlczL25jc3E+fXNPKTVdTm1McShDLEQzKVIiNUAmZERDPF9wQGJE''@;'; put 'put ''THJoLyZnSig/XUczKylvNmJMbnc+elBDbEA3OixWQ0YrSk9ydkUiMnV4ZChLOjphLGlsNCwvSiY9TF0uVX4zNz9RLnJ5NzNgfjRFRUw1aVAmcnMxNWpnYSt1WlVaSXg0TWksITV4WUNzfFsyNDd5bkAjPjsxV29zY117MTZ1STQ8dXc3djtfRk9xKXQhRj02Z1M/XUh+I15wQzxfdk5TI2U8Lkol''@;'; put 'put ''Z3EiYWNXIlFYLj58bSRbdkV6MzIxaTRtOi5iUiZ4Q2FEWzR4XmB4UFRIc2ByUjQxN0U2PSI5dDFQLlJde1Y/dzR5blA1VSZNNjhwL0oqZnsySVtUalZ7dlJ3PixOQ3RDIXZWRUBoV0VXLiJwe2EkV1lpMWFqNXkrKDVWMXZnNn5LS11CTmI7UDZxYE06YCx5O0AoRz5Nc0Qqd3MueyU/W3BULHlW''@;'; put 'put ''PzFsZmQlPyMjfF5TSWY0ekhCVFhDNVEwQStDNWlSb092bjklYFJaNVUzbXguUCtWYzRAfFZ5WyJHem9hfn5xPmZVPXlwensxKzMhaXBtcmM9Rkk5Q1h5Y3gpSF05RS5pQUpvOVJ5WUNFUiliQCY7fXJBUlk8Zll4PClsd18/fHZzJVkxK1hgeTwhIVpQOHIkfk98cygxPiloMGJlNkg0elFIOSpP''@;'; put 'put ''dyxCdUg0akkuWi47PzZ3SG4pJnFgNyV9PFY3OGVzKFsrfUNUUyp1ITgyNmlYZj80VTVkQXsoITZKMjgxUnJmLmFHd3BHeHhYbiRHdWQyTlJJciorcFlaZXlTYnBNW182e2VecTtmLkRyZ11yIV9bSkYrVyoxUXJzKXM4LDFLdyJXQUZFJXpgcSVCciJkZnA4VFVNcFZwKVI/VCxfcV5LTlJNZGdp''@;'; put 'put ''InopOHx+ezsrKy4hSUQvVkEqOTc7eVBNJWNGMH5QS2VTfG47emdzdWYwSVBwVTkrfHZNUnR3PG0oYW53XiN0P3haMEd2WGVXRUhGeDhJRVllaFNZKzxlL15jK0lGZ3lFJkxQODtHYHBtVEVzMXYkQiFbXnVyPyxyZ0l1WjBkXW9gZSVTe0QpWEpiaTZvWGV4RGhpaGFJTGRDSF5IayFUamBxP3I6''@;'; put 'put ''Oyp5LGVEQmM3bXVuU1V6VHMoZEc9U3lrKjU0byZxTipHSmdwTXBSNjEmbDFuYE5ga2ckYXlbdHNPfVBNMEQqfVhmZWkoaGAvfWdJJCFHNipJRGwua0lyJmEqUyglTSx+aHpZOiVNWVczKll6RmRFKkB5LHxzfH0xUE1vI1M6Q09zPnN5NSQuY31rLGBQWiZoa09hPmZTNy95eSxpT0BSQyx9eFoi''@;'; put 'put ''JG5gR351bmR8dCYqOF1+YllVZGxlP3lBaUM3dEV0UkVoZGBSPmNaIj84aCJ8NnVkPHI3QU4kQlZqW2I9KytLV0BrYiNPdiZxVj1JfkpCeShxSjM5O1QyZl8rdDRBc1VTI2B0Sk9lZkZOfHFuViYzRkdKYW1JTVhTPEUzaCp3dSkmOjRIVXBAWENGMjB4MEo4SnowVTdkVHhgdlN9JHJxWH1KelpY''@;'; put 'put ''Ij9eXVtyR3VOdS4xRmVGOGElWXMoVnIjUWhhTzIpJWxAXk9IT3ZRKGl+QSt7dVNpcylEcGZObSM0UnNrbyg3M3Q7JkReQGx+VGY6M29gOSRqRCU5WnQiXnVwZ2dweW9HZDskV1M1OW9pU2lBQ0FBQWZES0FsQnxFZUxlY2UhfUE2ZCslT0sqQklJRixyTmFVXVJ3ZjMxVlglKmEiSUFBQUFBQ0El''@;'; put 'put ''QUMiWDYoQSQlbSUvKjNhUnJKbzJ1SE15WCYkVlhXLmZrfFB0dER3SUpFQkFEckZTakhnTmFFM0J5dlkkbmI8c3Z+Tmo8U31tenEoTHUsW1ZYKXMmOlZOVD0/R3N+TkltYD4zXnUrfHkwUmkqNz49IS94MzlTfE5PTkw0M3syI1syRTliUFYmZjNlQFJXRSxyZ2c0JmcpdmYsLEUhXmVNY2g/P0px''@;'; put 'put ''X2NNZXcqQXIwem5XRHViUC46bTIwIyxFfUFoaFFGV3JiN2E0SzMvKVZBNWJCN2thdGlLZlYyQlBVOmA+SCMrN0IzeUIiNlJdQFckeFNseEw0T1FpfVs6I3p6azptZDtfb2R1aE59fH1se1J+fSh1W2s5OjlrTSJIOlVCXkw+IUp8UVpWd3QrPjZnUHdiNUEjcU57c34vUX5hI2xBKmA/bTp+NixT''@;'; put 'put ''KGxFSTFOX3NVRSF0IURlVCxnbkpWbiZZZUshb0JycitJOD9FRnxfXzBISW45OVMuKV8/SCtxMkg3UDdUKS9zYkx2K2JEfVNHSWtETVUkeGw0OGFENW5jVWFNQSEiL1AmIXN4TzUiczp+ciwwaj1OeUwyV1hjXTMzYmc8a3NLVnlOQ3piPGtNelc+U3E0b3Q7OzZaNXpNWiU+U0ROJjxLWVl1eSp3''@;'; put 'put ''IkA5XzU6NTF3aFtrOXAyO2pjYGs2TCFkQFBhUDVRZ3V2PF8pUz1tISIjTCg8dURiUkZYQDJLRkFwSj0lTCJfdzlMZSVhSHdadmA1TSlobDI1RnJRPVB1XzNUU19xaFZ3Zzl8ImkycTBJVXNQRlgzRWo7NEYiLiFTTDZiSTp7YmglRyo4b0hmMn5zd1tDLGdGKk4yTF9WJilbZFooaiZ7TC5HO1NS''@;'; put 'put ''QSxbNyF6Y2YrbUxXVH48OGA3c0ZOcSpVVnV9NSF1bjhkaUdyeThsdXNJZyhqLzEwbGBtUFE6ZFpGOlRVVUVEcnU4Ok9KcHMmezAkbTI/e09uMU85d1hFRy9eKCZEW2lhTCZaMFM7ekZ2TCs6cTx1MFFwN10ueUdpRjYudHE3SjZpMiMsfmdAcXMiJDEvKSJ9PHhvQjwib0B0IUFFUD42KzVhJDEk''@;'; put 'put ''dDh9aTloSzdEMFQ+ZyFEQltHfWYpXzlRMDcxWy9DUEhDYl85ejQkOyxAc34uRmpCQ2lSPiVsNit0TCRPPno5VnohU1tOdmc3OkY/NXZtOG4iXXtzU3xvYH1MdiR2azddMSlJb0VFYW5aflYkZ3xJUnc6PHR9OUpESndDakBCak48bChuPUQ8IlM8ZUdeLDBaNGByK1NiZGVQNSNHUkQ4aV1PSjgu''@;'; put 'put ''ey9JTlksOzJtbCk3VCYmLDBiK19RbnxxSndMcX5fOVRfXXhZQWZXSXZWTzFSMSF2PlliQFN1PGEvUClINXQwY0g/fDtVZVJyW3V6VTg+NmhVeDoqO0ZOUTtRKV1RfnxVWlduTkczcWddIU1wSTVfJCViI1o+MlJ+Ri9ISm4oZmtfZU08RXolMiE7UERPP1lUSGs5STB1XX5qTGwmVXkzOzxgYi4h''@;'; put 'put ''NDZALiI+Q2VRJXgpJSpXTCNUaSlvZSRYVy5IJUFXTlEwbTxyKTBPPDo3NV9meFJ6JS43VCpOOGRbPmA0O3JNa0c7fXd8MmJ6X1s0Q21Zd1pYfkM/YDdSV3xhIlIifTNPJEYwUyxvR2BTUT8qdDdUb0lDOGVLLlZGZHU6Km9kXnZqNTNocVU4dld6ekdmNzdPe04yIy5mcCtGR0xWL2xnMCNlUldJ''@;'; put 'put ''YWduYnFgT1JpLmlzNilIQE9ud2pwMmJSTi85QjpBJV0sQEQyTnFoRVViRD9JK0ImZXJOZShdPGo8dFBCVT9PPUZoRmJ0QjIoQmJrVjwmMEVqeW4iOTVITHFbMGVffTkvdm0rTnkhJkM7eTQxTyk9PnN6dj1NRzs5TCEkdHF7YXlxSHRBQCR0N01gYVppeyp2I2E9b0F2KVhORUwjLmomd0MzaWRy''@;'; put 'put ''QUxeJm49aU5FRXcyTTEqbkB5N1tuXTwzS20yelQ0eUxWc3VKZ3ZgRjZ3JFR4TXpTYntARUtEdUlvfXZgZlA+cmkpOElZbF9JRWByeDdgTFZXMCslXkBBaHdOdzVjVD4/emg8LD9uMHQ0UWY6LEJuNVQ0JHx6RzAuWzZTdC5XX3IqLmpCWGpWSTQ7TiNaJH1YQyhgXjR4RyMzT3FZb1VDYHtJdi5T''@;'; put 'put ''W3gkOF19eC49VFl9Rn0kdUoxU0tbQndfYV0qbW0sXlJKLkEiUFdtS2x6RFhDWzEiVjRTT3BraXFhc01aISZmUC5SSF1YLnR1Zyw3OyFVdC91cHx2VSUhTmJkWU8rdU56ZyZwe2Y+a3hvNnJqWyMid0Bxc1F4PHM5UCV7XnEkTiRibT96S2o6JnpxZmlVTGBMY3ROKmRDcHJePngwcipYdDlbN0Bu''@;'; put 'put ''ZFdWb0laUVUkJTMuXlRreXtgQDExSyxfUnBMdixLP3UhVE5gWHYyN0g7TGolLzs2UFdDWk0idkVlbnUhOj9PLFhxOmIvc2k3KThfYiszaF16RDB6WyRvJlhqcy4wPjRgZXhIc3xdKSNifk1zKTFfd3JdS0MocCtvY187IWwsOnpjcHxreXt3N0lUNyw/fnFkLCo4bG1KLjpzU0FLPzxAX2hZc1Np''@;'; put 'put ''L3ZNRS9oM3lTJHFHVENtZUA0JVBRYiJ8PyRdbWpWUU57PXtCPEE1aDlkdFVHcVtteywjMyk3XVdEanxYSDZYL3BEd3pbdWVXd3J2Nj1NXl54cGZZY0tKYD5KJGs9X0JMI3kqek0vU3FGe3NJI0haRTQjez5rdEpyL0Y/PWpKQEJ0WGQhb35FIm1aSTBEfmlRJkAyIUdxXz8kayhOREYpcihwUHp4''@;'; put 'put ''ZT5qKnJRRDZ4YjAkUjElSXxRUFJFTX1HJElHQTguXkIiOnMqPWgxdTBDTmhRWyEhaDM6OVJTKDMhJSJsOSxOaVN1KEAuZUV7I0wsIWxufX5DOCtnOkg1amlNRiEhSGJrPWArMEhedz9ebiVPUWt+UzVUQHIjXzVfO210YStHNWpUfE98NXFNbGxPMH02KVhWbEdsW2s5KkMuTF9iI35gMiRnUEAl''@;'; put 'put ''S3pJaFBGNX44QVZONiM4NFF7SShNODxRKD9fP3JySTYrdT9+RDNtWFAueSh7YTUiIVs0RjNjfVd4L1RuRm47SDVkMVchQ0hYSCE6eDpnNUYpSUgxITBrIT59TCZzeS5MNk4sZnolU0NnTkJCPT1CMVIpSnglUjVgM2ouWlNoI25sV25MRDhOQUQmOUV4MlhjM29daV5rbGZXZ2ZIOTRpenZvJEdm''@;'; put 'put ''O3JuWl06VFtbT1ZkJnNVVj9HaHlzWEpvI3dwbFQ6QCZXY3xmR1csfE45VVBNVS5RaWlkekAyUDdHRFB1RDM/KnthaS8zLCVPQkdtM3RJMmJMITpXSXojWn5ZUz5NeD0kN1RUUXpCTkxaTWhRZm07RWBKJGswSXRwIXMwTlFnQVhpMT15V1NxUi59dElLbz5Mb308Yzt0Y3l6Sj0oPURwN09LPTtR''@;'; put 'put ''QUA1QmswbUNtYShGcjV3ailCOzk0Zn5ddSYrcTBvIUZiJWlwXV8kSF9ZY3IqQj5XXk49VV9CaStfQDwrWn51Z2sxZWwuZlRSRkpiQXkxKTM2O01KQExNdihNU3ZkVEdGVTE5azxjRUs9Im1WNSMqdXFvR0Q2ITB5ck82LG93alFnNkhsUE98elkrKld7OlhfdT10fFQ6JjNTLHImYS84OGNhV2t2''@;'; put 'put ''MTV8blFvfippOn4jXSMhezt0YkJ5K1hEd1tqOShkRzYyZDgoUTBIdzQ3RzN9cnE8djUrM3x+PDdGI1lrWylONENlK2FYe08zaCMhUG12TiZNbj46Llo+ZkxLeDlIRDB8MHh8NlJPZFVhbDJfdEgjeHZDZHQ+bCR+enB9c0FgUVVJLjBJS0g5O3U4bS85UXRWNFk9QTA/eWZTNztSbCM0cEx4Ik1D''@;'; put 'put ''Mm0sIzNPWWx8STRPYSpZemBCMzo7LzBYS0V7M2NeMXF6aEVXQnozZFZBYFM5aVhuNHcxN0VnbTdrU0Q3bFMqcENTQEUjQipqbGFNKy8pPSJJc3RifWVUMi98d1AyISNPKEhFUT1ScCZ5cn4+fT58bGdeVjBjMnNMcmFzQ2g9MnFGQjxWTSJaW2JGfEsyMWBLfCNTS3VOWTE/bUlJeT44OFY6OG1Y''@;'; put 'put ''TE15ZDJlRSpxKV5HK0h3IXpKeG1VKUtjQixoWihoJnFASyVxeEtIdS4lVUIqWCsmW2Y5PU0zTiJFUltOd2kwPUZHYGhXZ0w7MT5rNz5PbksxWkZWeSF8K0wsa05uPHFldmpqWzd0Ljx2JXheJkshQW18UiV0eUBpcWIoOVopPjFGdmJlcChZZGBGXW51WToxfUx4WiF0fT47QG9scSspR1BLS1gr''@;'; put 'put ''RXhXP3htKCRjfShAcGVxLHJMWGY1NykzVzkmViI0Pig1TD83bTBRLHtkNC5icVA2SU0hall4QjtVSmk2Tll6dEZ8Uj9oUX0se15ENm1NVHVwaGV8KkBvT25qXklAb29RUSooS2QkbF5ra188Y3ZqRWlUa2glPml6KkdSfU5uS1VEXVtrdjMkQ19mPW52L05qYCZdTSphfiJtXnBNTm0hXXQ9aFYx''@;'; put 'put ''VnNCejhVZyxFM3lSKiRFeT5WeURuWXIpcjlvW0lRI1ciJnQ1KEdzSC5Le2F3OyQsUFljWDsodyRrJUEwQ1ArZEg9TmYjRiloVGBCOCJUMytnOlBWbjkye1cic0h3WGo8USMmOEJ0YmI6b0hrKzY2UC56bCV6YD47M1plQEM2OXxZLnY7bTE9UWhCQUdpTUNKbF1KeE4zNVZCT2JhOk4hPEZpJURx''@;'; put 'put ''YHk4OWI4YGl0UXZ3Y1creUpXTGJxaiFIWlZnNXs6TCpVaVMmfTZlcmRJZEJEczAmWklPYUJKKXlAKyFqeE1AUmw8UnBpWltlYCFxUzEuR30wR19DanA9czpgSj0/OExkWnBqKmsvI017SSF2Pnw+c0JtMVZtaj9USExCWnpgVENnWm5pfkRhOVZ5OSMyMVpWKEk3M3lUMDBDOUJ+bWAxODhAVW41''@;'; put 'put ''P1pUL09RP1VhTXZWWnI6KDkle28pOGpwPUplKTEmQUNwSTUkWjRrTFNHKG5KV3I4dmJ4L2xmTlBAQm12T0RRbyZNeCg/V0l1U0d7cDRaY01JO0l3NHBQKS56ek4rbmVycHJoVFRKYX4rZSlrO0NaOjxiSipVO15oMFNLTkFuZkJEUnZyLyxDXUE4UGx1WSw5LGo0RUZkI20xWHFEPmQvPl1AR1Y8''@;'; put 'put ''TzpfR0I9OC5eTyg5Mk8uYjZtKSkvO2hfU01vSU9yM11BUT1LalkoQDMoNTN1WWEqUntoYjkrbm03ekpRYVFgIzk+N0IiY2F5SXVZIStYJTIiWFZRLyJQaFQ9O0FWMDFROUFhI2Vrfk1OT1ZQMGcrZUU5VCM5b1lweVU4bDIyczM1JnFMMGxkYTVXTnQ1TDU7VXolaXFPOTpmJkB5KW0lM1hnSiZJ''@;'; put 'put ''PypgLy5qLHRkYzlQLmlAfnE9dHJZUlMsUVZVS1pOfHR7N2YuQ2V3KCsmL05mRSxDO2ljPC4xZixKREUyV1AwenhrYyFuWHV2LjVHZFJEfHFdeEpvfTYsUD0wLDNyUVF6eClEelQ6Vk9IRlg/Vm9scng7fUB4S1ttQGNwfS9SbWp4SkYuaiRxeFBfUSJkM1ZUJWZrKHVUKkoxeEpzTE9ETXEvcmV2''@;'; put 'put ''djEhT0A3VWIwTyhhR3BgUElNOSQrbSpbMk4maDNmZkJMNy9qLE5bMTZlb2Y/clolNW17WjYmLzVRTiM0ajBdOTFRb2lIdFdSUzNATnBKZWpsTmo3N31FWCQrUngqISgzO3V1ZVQvPF54USk1eWl1NVEoRGdzSEN8VGdRKFF8K1BybGNsRHZwRzIuIj4odHE2NUt3Yl1GWUovJnZ2bF1+ZHxFUmZ1''@;'; put 'put ''U3ptMCwqdCpeJExtTC9EM3Y1UTVoMilvIWt0WTt2KXJ4UF5udDNhX3ZuTXpvZCU+ZF1PVzM5UWpyZ2ByRVYjfnd4cFIzITY8KCltellDZl5db2c6QzZ3OjFFWEteUWteNSEzaFtbJSRaUkZuP3I2RG58NmVQQ2JfcUd9ZXdpZzBSUFAvPlgqIithVCVqbyJTPkV8V29XSXg3YEA7KTUrIVVyJD1G''@;'; put 'put ''Jl1iWHZmaTdTeG5WMmIqWTNtMkV3P2hNIUl9IUUreCM6eWFaJSxyflpSYllvSU4zP2w0WGV9LDk3OEdmXnxQZiZrNjlMb08qLnxWPllMZTBJYUp4eiU1UTJZQllJTyUqfWZ4cylHTztSeTJ9cFUpNiQhTEdTfU55ZGdkX1I5P15tYz9vcGg+Yl9LYWY/bkI+PmVJQTM6Y0l4KElrPEBiZHtWWUAy''@;'; put 'put ''dkV7ITEoaVJvMmtZa3VATEIwXjt0a15PbW8mVksza3ZtL2d9cGIoKWgmJl82cUJuPCJ5Q1QxZFg/aixsbzxDakB5eTRjSTMme2ZUWV1sU2hKM3JLVj9ZYn1sSDdiaF8wdENadkA+KWJoOl4xOFlqbk1vITlTNkVLOU4+QilEUChbXlY9MEtwOTp+cTJYSGZiaUxRVkJoSDc2JSFuY0hjY11UY3RT''@;'; put 'put ''YGp6ODl1LGpqR04pZkZLQTBfIilHRD9iUmFudzZfSzg6QDRnX2V5ezIsZys4OF5Qb3dsI1h8QU5LSzM+PjFgIVpKU18wMHUiSEBCQjhqbEBHTyVbWS9XJE98aHNDcU4sPzsiNy5wWjZkbE9BRU8iUmZoKk41b0UlT3RzKjpbWT44WF9QTEhNVnBlfExLN0s8V2ZhPzdPRFJ4SEtpUmtHT0M8ZjJF''@;'; put 'put ''Z2VrfXxLKjdNZjJZQXRbRzsuOiZFJkc9JUZAJXtZaStaPyJzW0lzMVAmfCJSMCF+X3IwOW9AXzxYb25ZS0s7Jn50Vy5MNTUkN2huLDZdSTdEXzBxIl9SNzp9RF5CVWBDZXhrKFVWWVskUSU0Tj5ST2R6Tns0b28oIighaT9FZEpKTFFUfk4kbF9nZDc4S3Z0TzJQJDZnSiJ2ZD01THJsZnRwcW4y''@;'; put 'put ''TDRHT0RGUk1xQE53LDlyKCx6XTs2Ynh3eDU7cWEyZUpiKX5WQmRiK3VGY2FVPzMzP2tAcW9EeVc0ciN0ISVqRTFNMnNqYHxGJHkkcShqc085bypdUlZoYy9BbVJ3NSxTUyM9TyU1JHYzNSpaKV51Zz0oIVh8LzxJckoqWEJ6W29aKjJBcjZFUihmd3pGZlFuW3UsU1ooPiVgdXouOEdrVywwRWVQ''@;'; put 'put ''SlhtV3hPPm04Qnk4fn07TiNQZiNVJWJNWF80IWxWMVt6TUBMeUwkSnh4TjltfDEhLztIdkxge1VTLkZzaU9fJWtybz9JeWpXMXZEKzJlQHRWS19wOzhZLF1gbCw+PntALj9ddX53PykzeixrTEdHZH1qJEldR0FiSXpIQThXMHVNSzdqOXsuUmVfaFZuVWJpZzMjSjNQTGZdZmdXJFhUO1lwK3lg''@;'; put 'put ''SVZlRFZMcDtXQHY3fGV+fUBhPUExc255Skk7WmJlWWZkRF9YQDtGXSl6UWlrMmo4UUtjbncoT2M2cFIlcEErNn1HaHhoS05iX1UpT0ZHSj1QQjFTPTxST0pOZC9jSFZiKSRaRT5RIUZqTjYoMXBFITI6MyIoPlVIRD1bZjdAKmMrXURtX2xSZ3MpYUJsUS5XJmFMI1l4WldveTlZYSV7KHdTeFM/''@;'; put 'put ''NT1JM3BZM3YySyJTZGMvK0A4Q3gpcEtFZE1ZN0YoYndHdWw5JlFCJEVzIkN+eUAkdkJ+aHZDKlNKRE8jY105cXk/JiQjLz59TkhzaGlVZVpLUyZ4SyMwd3UqdFldQHRWZmU6X0w5d11bQ1BLdDIkaWwrfF5VdzdCLm4uWy55TnJ6emZhakdjSjR8JDt3P3ZrSD87KmtnKS80T1phMGBAfSFCXXNj''@;'; put 'put ''Q3JwZFQlZCxbeFtqUWh5QWM7UXw3cFdnLFBPZEhXVH41QiVYfjFGIlYsWT0vajQiYzBGTUZIfmYhaTBZOjBBKkg8KnY8P35pWFZDRFNSZFo9NjpfKUNnOX5oWH1mS3BPSiQoRERpczsrSU8jUEt+ZV1IY0xYYl4wLiwkPTF8YE02RUIuSkMpYTskMjFoPkQqcnEpN21ReColPWx8Zn1MdVNdIkZV''@;'; put 'put ''QnVsczVgMjltVXU/Qm4yRTxuMCNnfXgoc3JNKVlEdzg8Ql0wZXU0YmFeVEk/aj4kc2RbOjghOzcqTCQza0UrbUw/ITpfOTgoMjt0ant5U0pYcjBzRHhtMlFZVlJRM0tNPUZUSWUzOSZKKUNhUWd8bDJPK1lUYypDYHkzY14/Z3EzbkE1aGpyWkxQNT1VJkN+PXpZPT11WS58aVElUiw4MCNjcyE3''@;'; put 'put ''I25FamFbfi8yb3xoeCheIyUmdFpTOkhybTBQWS96ajB1MVtNRyI2blJIenM/YVAvfkQwXnEhZFN8bEljLjRfXyo7RDsjSF1bRVBtMTZXbTMyOVVxaTFsQHF2WVQjWmQrISxDWjxZSU5ldWpdLlN0Z1tAa2xAaipHWkZMOXlCNHgqQiIzS01NT1EuaWBtTGwvcXQ+QUpNbSl2KTJDNm9XSigwPW8h''@;'; put 'put ''UCU8Vz50UkZPLmttPkM5eHVAIiQ/QSRzOm9VO0BVUExoUUpiSzVmXm02SExOQ0pRXS9sbm1VVUpVSVlEcEMxPkp+fms7cXY8XXQjPyIsel9VSiZeNjtvJExlYSZHOE1tZDlkdihiNkY4W2xNbG5DQzJhKjRlMG9lbH1ifE9XXmB0VFQ8QkU6V0JVXW56NFZWfFReNGl9bHBMLzx+ZD03KlRlOGRn''@;'; put 'put ''Zz1NVnckYGtDaVJQSj19b3pSWkR+cWM8XWJLbXs/YUxIVGRJYyx8eGJ5R3IwQ2ZTeChIJGE4U2NCbEhmbCxJX3ZTQjkwXTMoRjldUio/VEgxOVQxJWZyQXtfSDVrVjt+KjxIRCgoK1ZBNFFacl9NN11aNERld2ppZ30vMj8zLkFCc1NHRktVKzVtQEo/MFAkVU83SF1ySFhDO2NBc0VIT218WldY''@;'; put 'put ''bTRYPEZ2OktNe2gjd1JubylHc1g2LEVgRXgrL000IUpybjIqaCNHbitOeTJeW0k4ZyFZR08/TGZ2Lmo8Yz1DPmFQMSVsXnhGfCpOPztqKzFVQzF7MWl0clFWfVspWW9aakBXOi59TjRyfGYzcS97YiF4YERxOTBZXihaRHNJNDpgbThtWUwlV0dwezZpcU47bGlRP2RoRUVLO1JAJSgzNSxGYWkk''@;'; put 'put ''MnR0QlM8OjNXJkVXWnJVdkB3Iz1DLm9ZYn48OG1GfjRNSlRgYDBJNjArNXUxbDN8Z35QbzhoOXBLKm4oUG5xaEVuaFtnaHZTZXg2PVluNEJdUUcyIXoxUm15WUJyQVVgazJuSC4kR1VnOnBDUHxLPHZ+ZFtPTClfVHB5eS5uOjBCKEAuVV9SbX16VyFPbjEmIy49dCMyJnV5NGl9dV99PkZ+JiZq''@;'; put 'put ''JWFDaix4VU1gN2Ajd05lXVA6Y1FMNFpSPW9XbUJpWlY2Ync8N3VedjsmMiFCQ3YhW20sQDR3dVRtXTx0WTgyYWZWWDBGbi9kIndOPVk2b204aio6YEhHTHgzVS8pLixGMlIwVzpWc1s7c2d+RUMhNEdOV2d4TEYrX2wsUUUvV31aaVU3SV5nL1Z8YGRxST5tMU9NQTYlVGZNJmo5UWkpXVlPLix0''@;'; put 'put ''XShsWkY2ZXE0dEBUPkA4Km9MUDQkKj5hbCZSdSU0L1RrT2k7I3ElblB2LlY2Ri8xWG5KY0FSIlkiP041VDo2JDNpVWM4U1lSXXkldX5ofnNARTpMPCh5aCxHUH1mcjUsS3wlZD9Wd0JKRXs4V09PLkVUMVB0VG4hSUMxR0lYM1A0aWJ0O2AvO0E/TkVzIXpOP3g3QTg3MD5yNmRsTmUycjE3REpR''@;'; put 'put ''a1V8I1k5IV5VRERZPExfXl5NX19wRU5veTozVS5jWmFZV1ppdHcycHp0eyZ2Lj82WVVaUWRPKE8yd1lJZCxfZ058ZTQuUU1lVTAuaT9ffTdAVCVoeEdtRzVqXmY2MUBYVSN9OnNbUCQwKEEqdW1ENlVySyE+Q059QkNPSCF0amN+eVYsI35lMVBoWjAkP2w9Z3Bgfit9TWtYJUNMYmMuTj50Pno8''@;'; put 'put ''W3xYVDR6Plorb1ZoQ3RLckNfKigkOktbanAmJDgkdGt1MXdAL2swO0tGUkp8Vzo7Syk3ezpEI1YobkM6VH48NHFZMH52SVMwfihZfUpJTSYjXVBWLHQvVkMhJjVCaCtISiJkRD5KZSFbX0llTDU5KVRyIzFRRnAmXlpXWDVqY15Bem9WWyVDeWJuQFk9KC4qTGV8XkxdcixPYnJXOEt5I24iYFUj''@;'; put 'put ''S0AxJHAkMTRrLkxyYkpre1A3NylORSI8VHJmYTFfbDx1OEsoQnV+K3NdZV5fQCxtcS9jMF4sT1BlPWomfmJnOmNwK1FxazgrIjhhdiZTaS5BXXRDLDhEJUtpd0BRJGJqbiNiTDhEW1Y0VT9ofXx+X3MsUCUydChiUVtEJU9Ld1lAPV1ocXY7VDMzUEVVX2g/X2tWWzNfYklHWXRCPWdVYFJ1WG1x''@;'; put 'put ''LH5wWy9gfVRGPEQjRnhLNmR9Q2pqKWtqd2RqZ1JqI2QrWUc9Kmk1an06PGhzIXFJIVJJdThndXtgWWZoP0x9OmxlNlNyfUh2MnUuRTRbbUJ6em51RF1kbl1xaj50b3p8M1FISjh7QElnNnRAJmE7PDBXXitQQ2FgRzIiJklSOG02LGQxfHIlZXAyRkAxVypMd3JEPDBeMzx6XUtPKDdiUXI2PzVk''@;'; put 'put ''YjJXbWBHIU01Yj9yTyU1ZTw/T1tQcUtNOkwqTnNzM1YjKzx8MUUsYVdTL2IqQ3ljcFpIZ3Jje2lYcWQwJCFqdiNPTkFSMStFIT1gJXoqcktWJkwqPCNMVV50XT0mdTc/am5+dyNdUk14Ymg6c3wyfGc/PHFlelUqU18wbG1CUFA+djRFJHVhZEw+azI3a0ZrWVVdd1pYcWc+dGRTMlE8NFhYTy4u''@;'; put 'put ''Vn4qcmwqfWkqNTJ3OnNVRjc6Yj9vNHZjL2o+ejpRUyFTY29ZJmlCJW5BbHRCJiF9a2p8KmgvMEFFJTBfKVdGI0V0U00wMChvfUNOOTxyNyQ7a2BIPmhPdlFjaltaa0VgYlRESkpHZFg3TEVYdD5Ccl5bKnIjLyRSand5YTV1OCRfdyk3MDdYPExkMUIvYkg3ZGJkXSRsanJIYmlWLDRiPWFvZUg+''@;'; put 'put ''RWpSTiMvNSp8cDc9UEt1dXZiPWtRanROLGNkWGNZN0tbdVN2WXoiWm5jQT9LUV94VVs7MDhkX1RlKmNoZTslVDhFR08icHM6VlYvR2ZMIXJIPH1kT21CNXcqN095JUdHPjZ0Nkt4VDVPMEl7QzZALF5fJiMrY1dALiNJY1FxXiQvW1VeTCFaWDB5fk1qSkd4KnxCZ3h8eC9Hd35KXXJwdT1CK3x7''@;'; put 'put ''dil4TFUuKGI1Wzx3dihRYWNNYzJ3Nk1fb0xGfEklNGJsUj0ja0xyOHBRaGEpO245WjxXJVI1MTcuRlBfenBsbj9WaHNCIU1QbFZnPTVbO3p5TVZjeVlPT0k8XT9MejMiPkJCWnV4Ok5+PnY7PXZHeUhzcSNpZUVqT25NTzBdZzl4MWNQWEQqO35MY3dCdk0ubWxDUjZbVk9MLyZaVj1UdCpWY3Bj''@;'; put 'put ''ZEYkblEkOTYuOD94ZCRSZXJLQmVudmNAZSk4XjhkeWMiZiUqZiRONFJlfUpyT3BEUmo5Jj0lQnhbUH5MKUk6OylUUCw2b31qeXVgfTEqQ3dsaWRlTzZlI1BUUFJdV1hzOnR0Vmp2c1B7dCxySTF7eDw6KmhPbV06OFQ0TnQhfkF9ZnwqIXNnITQ3Q101cFNAfSY3Xmo7X3Y3bkBheTFgUFt6cUZ4''@;'; put 'put ''ciJycnx9P3xxbjp1Sno6KWY1T2ZabDEoZUx7aXA9YTxkbSFiW0JhZjN4T1kxbFJXPF1mdld4QyVGckAmbSMrdXA5ZjR3Ni9qaFJWJV07NzUxM3VvQFsoOWQsUFJ6REptaChaOiw1O180Py5MRUpbZjhRbys0Qy4oRUZ+ZkswTUI6IWsrOkh4KENgfm8lV2VqOHV7bnQkZ1pUfDcmVzs/XmZAe0Z+''@;'; put 'put ''QllhbSROUVhvUzpnXnlOeW41PWcybXptbSgjJTNCaWVeWG5vdXlmTVhFRF0/Y1Rael1iVFRZPkg3R1FUUUo/M2d5NDVsOnFNMEFFUSxeV14qMCFEUk1WN2wjdW4wfDBdPFl7bkMuWH4zYEFNKGlxdFBHbEEqQGYwRGVGXiJqMWsmLzMuMVpuaHxwU2c+ZnpBQ002dmU8JjFsNHNtazxhKSo/Q1k+''@;'; put 'put ''fD9YelNzNiM6QT9LczUxeCJkY30pdDx4MEY5cFt3QzE/PjopW2pRa1Z1c1hSKjZjRERCTiR4QGQ8NDVOVl9ndCEobl19VHpPekVnfCpnKyY5WEBqY35CQEpwJFpXT09Rd2NGUiE1IzhCT2VgJGFoUn1MfWM+VHpyW3R6NTBZSEdZRXtGXmQrLnhUSSZiPHcsTU5xMmgxVSxHWVtEYVNSZ05IZCY+''@;'; put 'put ''a1BOWHIjUD96LDlJITU0VTN8WXIuSXRoMGdddSNxKU9DKy9QVGtrVDZELHY3WVohIU97W2JhdG9QaVQybEJwTlhRL246Pj9bYWAhUUF8Y25eQUlhfmo1Iik8fWpKaS85bGJbbCtDYXglS2F7bG9zXjh6YXJNLmk6VHQ1PG98IzVCSTU2MU9TfldeTDU2WXh1dHdrKHZuYj1ePEQ4P1dWZlBeZ0N6''@;'; put 'put ''W0M8KEd8NUVIeFh6ayZUbj1eLzQjQ3s+OTwkQ1hpa2B7LkNOUWxuVU1vajF3PD1+fW0oU2hwJl1ILjJENHI7Lix5My8hZmBIKUk5bXlzMHU0SFdDKWthZWF1bzIyej47RjRNU2lbe0cwcHxWYSwzZ2U4TCEpKURgKkRtcTd4cVZXMDFEVFJ7N05HeihRSnFZWTNnRUslYl17TEE6eHJJYCsqbD5h''@;'; put 'put ''R1RTNGBnQllfJVVNTThEdXUwZFVYWWsjWmNbOnl0eG9XdTNVVkQrcDFWNmReMmYlSCNzdVlEKUJ6JlY7MFlCOj1tMGRmSU9mQEEwOl9hNTB9aT4kbTtzdWVEe2hVXjpyWVMoeX5yPXRVRWohek86Llg2N1hFSlZRO3RabFMsQjcuejdGYXVQWTVAU3Q+P19sP2lUKDQwZjBmakx5V0d4PkQrXWJ4''@;'; put 'put ''ODJJI2YxLlZ6WihXUT9QLHpPLi9VUz1zPzExOkNGUW1RQC85dUB1cVVIfmZQanMrOnJFP3Q8WylNc0dYJiNPemYqSl19I3opQyQ+TmBaMERKSUNYJm83M0x7SEJQUitXKWpMVWghXz45Qj4sbT8rMjJaW18iZ3clcTk2OTtYODREKXE4U31mJn0qSj5wKHRgXjhAMCN8dTw3d1RLKzxVQzpPNjdM''@;'; put 'put ''YDBxPSUvRn1TL3xZeDpxNEM0UzpRZlQzbHNBWG5ST2pCYEpHR2kzfGFWWTcqbjtqPnU0eH57SFJnKVorOj4kKiFjPDYhbjM/KlR8UiE2N2giK1FjL31XSjphPDRQa0NHYGVaYV0pejQ/TTcsb1dgOTBPMnZ0U3ZtMVJyOSRpWis7XSQ1IzkqdnN5bFFWQ2AvMT4mLGI0cWNLRlNEckZpKlB+L1Mq''@;'; put 'put ''I19SdWA2R3NxQ0NfImppLik8OyM6bEN8ZCsoXjVlN2NFcDxCYUV9QEBGcUFpN0NuVHxfZEJqcipzN0JyYntka11XNyNybXdoczxHXmlxUytKbSFBV3xLa1lDQCROaSU9L0J8KDhCLyNhQU95ZjFxWEMydjRlcVsiVG5JWkVjbVNCL3UyTD1fK25BWWFGZEt+QU9ZbFohV3o1X11Ubz9BJEBmRmRn''@;'; put 'put ''WXRnbisrdThYb09CRjxwVm8/VCFafGpUaTssVTtrZHd6QkUxbT0pQFltfTx4fGV1IjkzYSxQOS9dY293an4yVFVxQ3YrLEtMXzFQelhXfV5iPEleQ1daSW9NZmYlNTF4S2hgIiNSck1eez0/PTN4V11Ka348OztqKHVpJCZvV3xLUC5wSm1IczpgR258VURlNmRXYGY2W2JyZ3pHUD53VU1ydXZM''@;'; put 'put ''RFI8byRtYWhAaShsYnt9YWBockRrLjxxMXVCOFIuUSsyUjxYPnd2fXBLeStOVlk6SHhEWVoiZDg9eUVdU2YvWk1fRno+a3U+enxvZ3I7eHJ1XnE5d1ssQiR0MDcoYWQ6Q1FeREJNa1E0IXZIL3g7QTw3eGBjZW8vIX04eFVAelA3azo8dmYmcWpsKSpITU0pT0l+N35uYVRxVkIsY2ptInQ9eDpY''@;'; put 'put ''LjE+MHY3dyNHUXJocmZTU0AmQ0h2bXFmYFlYKmVeOXRkKVg+ZDRAfmA1O31EIXN3MVltU2EiLyN4WjtheUpqM3YqOit3X3ZYWV5Scz1yemZbMDNbRCozSl4/IlFBbSg0T1pUa3BFPlU+ZyMpTF9sLlcoVzV5YEdzJUd0aDFWdUdnIkUmVjZwfFlHdGRTI2hWKStNQFE8aGEvKXtpPE9gSUtSJGtb''@;'; put 'put ''czheRmJwXXQyPGtPclE5cE9HdmEvPm82PlJrcGI2WzliMHZLVHczakJafiFhbE9VNDJQS0ooWmJ4a0ZIdG8mXWdyOjJLV0U9L0Zwa1A8aThMNGlQR0d6RzNFUi58ODdYNSF7dUpUVyJpN1tgdS4ibT44Il47X1lZK2kxKFhLOzBnLCMsMGUlY0ZEeEI0RFkhQDBuUnxwaSFgMW49YjxucTA3cHtR''@;'; put 'put ''LnhSZXEvK15Ad0Y4KWdZKUU5cGlkT0YmVUUvJmx5RipPOW1od0MkRHwkbzw3YkIxcGtBQl17c3x3L3BWUkBqP2Y9fCFSfDBuVVAvTl1oZF5IcnMhe148ZTxYZ2UkO29ZKSpIVn1LPmVHa2Qzb3BUZEFsOnREXyZ+ZCxYMyQpK2hVNWZgSGleXXR0YTchL3FsNjJIcHR4fXJlWkQpb1ZyNDMqbDE7''@;'; put 'put ''XVpHOzpnRT89ai5+QHt3MD5CdG5iP193SGM4P1RQbFBOSEMxUCJOXm1fXiZaNzdtWz5temJlWnt3azNkJDxJMyIhO3JjIUJ6NkUiemAzTlZjTXc4fEdEcCVrUTVwJXxUQlMhTmgrLzRsRldAbUl8RHh7VTw2Yllmej9EMkskVmkhbysvdUpeUjZ2UEIyWUVDSTlaVWV6U01sRmd+anJ4L3RFd21R''@;'; put 'put ''Rl94aUlLJnNWelcieFchXyZlPTBKZTJ2NlBWPzc4WiJUT1N0Olo1ak43NE40d3VJJXZjNEBOJU9PXW1ZXWM9UjdPUn1tX3ciTyxffUtmYkZjSXlPQlVzZSomWUpdOnlbWDV0VnBES081PXJtZV53UXBqezIobX5qbll7ajFMP3NVcipKeS5gMHolekFAMXdGWj9mS0o2T3FvOnwzJmBmQGRdQysm''@;'; put 'put ''Pk5JVmQ4X3VbITJnZDo+O18wPzl+dkl8dHkieVh4OTwzZElaX21fQ3QzISpqUCwhQlV8eHI3Y11bampAelBYfmBVcC5IUy5wWnFmSiUue2B2c0d1KWNDZVZtOXY0XnBXL2Ahd1EiQS84WnBoPnxnW15gZV4zZ2xTSiZed1dQbGJKQy46czVFTHw/e1FIXUIzJGBhMmB7aDZGXXNXZ1hsdzM4TW4i''@;'; put 'put ''dTFsNi9vdkIqdVp4RE1kOiJ9QWs6MEU0LilxcDU3eldzNmZ4XUlvVjoqIVIibmYzfDttQDwxSFRYeXoucXRAYSlZekpKSndTIk85X3s/dzJkaH06JG06OmoqJEZHNUAoNjIrZz1tYHlOS1ZLcFNec10sT1QoWXVHbG5zK0lDfSEqJEVBZm1DTzhyXzR7NCgwWFJvUXU4N3h+dTN9Vip1LlJ+WEMr''@;'; put 'put ''bTUlY31zOzIpRHVCZT89P3RSSF4xKSU7Y2JqYHUsUi4rfV9hNUtEOnBzdTBJcSpbVF9kVm9pYWFFaHA8VC5veEZTT2Q6RiwoRiZkaSV0Mm5aKjBPJVY5W287I09Kd3ohUDNEU2clblhPYVpFaVtHQHcvVSJPaldBTz1ZL1ZUQlp7SkVQPFNvfmBUcWFpOXxaNURodip7MD1qYiUsMlszIlVYUVlT''@;'; put 'put ''VH1gNTo/MkN1UUQ4U1Y/eF02JlgzfDgvOTR5YzJQWTJBQDFFMC5MJCROUHlhOWRRZEIvTz1KJkdtNjdZMTtsa2w8MkM1ZHBIM153JVBrczQ/YU9QIVgrcDErSFF2LFgpQjExPyp5eFA5WGFhRC9nVGU2ZTloVUtGRUFRKCFwdU51NVRFM2Y7PEkjY3JNLD4oISt3REhYYGFiOnZyUXopaCh6QlZf''@;'; put 'put ''JTM8OHRVR1Zge25RUTt0eFsvTEQjXmR9OyM2I2dRWUhCfFtXQjFAXnFWdnx7SHRfVGdObFBEQ159KnIpaF5CKiNrT1MqbUI4Xnk7dElrcThEfEtIdzB2VUJlP2pMRUhqZV4zST8uPD1xJip3VyRjMmAzUitjRix4dkxabVosYCFFNGMlRCpsIlUxbEFNNEgmYC9nIkJeMyksY2FkNzNqakoxTk5h''@;'; put 'put ''PGBhdyJGfG5dbWhNTUUwKF57dFIvUDRtXjYyOSRAYWpQNEFqV3YlTCI7amU7I2NJUHB8P1Fpd25TVi8qWj48dmwkOHcwdUxeQ1NDRV9dRXJmd3RSTG0mYVlxPURNMjdMNiVRdFdIJDsqYStPOF1tSCh+YG0jeUNvUzJQfkBxPVd7KmVkKkNNXjxXaDZRV1o3fEtSbjVxdkoiPzg4WFpoaEt7WjZi''@;'; put 'put ''KTROV1NVVkhOSDhuRCUyV3BeKStgaTo2NDxGZyVKV213YExoSUoqSkQ1e0hAYUNsX1U8MldeLzk1XjxZJHFnSyR3R0YmNF4uT2cyRTtONiNMNjgmZiRqKW5WZDFITTwqZXBRZVQvSEAiQGgsQmtuUkdeOlsjSk1PTXN0Wyo6Vi5GZzdRUGlDVDJfX0h6T19tWjh5ITh9KURGVXE1SltacEJ+QCtC''@;'; put 'put ''ZDxvJDJNfjt1V25IIzgxYVZNYCxjNkN9ZyRfL1U6TEFKSilsc2Q7cnszNF5CPnJMIW1DWVZwZTY/PjozSy4iP31VUTJLW2hCISNgKjE4Iyt4S3kxRSpLMH1HN1I4P3RIRCEyUVdGMk9sfWc4MHtfY2pRPGFfQEt9IiFjMXo6UVU4aDl1JT9xbi5hIk5gaDo7IWgsS0dtdzMoKXE4SWF9aVJmTCVH''@;'; put 'put ''KT45VyFsR1VeZDomV3tTTFQ7OWxNLGMiZXkiLCZxfGw6fDRFezN2fVY0SUB2fWNjOSNOQzA7bCgvdz9oZCE8MHtDW205cn0le0dEPS9BTz9oenlOSXE+SzA0bTxGJEU1O01YPjt7UDpfbThGYCxAZCNoTyR3R1VlRCVyMGxKc2R9TH5eZm1mNEdvbEZtJXh0cjQ/YyFLfiQvamEkdk9qLDwoN19b''@;'; put 'put ''KW5sJEZPcmZtb1RiKlJCaDVTdj18UUcpXXwkNDgxeSJXKVd6ZTFzVW5lI1NpTClFVnYsTDZRXzZMU3FkLCM3PHklWlYkcVZ8am5YX3FzWyQoSTlRY2E0KEl6UX04Pm9uQ0B+TkEzQmRYcjg0dTxgRG1IKVVNXkFwYjYuLExkQm90NCg2Qi5vZH1OKV1iL0lLVGF2ejdfK204WD1IYG00RylaJCs+''@;'; put 'put ''YlRmZ1hVNVM1NDo+RlBSVFJWJVEvNFtiUj5hL251Wn1qYXhNT0NQNVReeGwqKTxQMF1SYipkKXVsem0wR2Y0R2deZVYsSF5YNWIuZkxaWSJCYWdzRzRtSSMsLENZZTgxcC9XMFVbekpdXyFzck1WQGgyNC5VZT5lLDMwQGFKOyMmNCklPWpoNl96VEhbXlozI2NbdG9XZCtKTEBefXtrVVtGeFNw''@;'; put 'put ''bTZkfTZtJU1aMHw9TCwhcGRKOkdfRChVTVFHI2gqbUxFSSpYLC8lLEZ5U2JrcVkuXiN+RV5qMyt2cDtVYUc7Xn47cFFmZnNHQmN9Qyt4RmRIaTRsZThgTmJmIltsW2UhIlpZTEslPGguNjBeKFlfcWVtUzZ8JUkkTlB6cT9TLC45VHZ+QitfQHg1aDI1XWJidzkuW1p0dmo4KGZ2QVpmXz17V0Zs''@;'; put 'put ''YylWbn4yITBjJmdDUk5gMCpNeHx0TigjK0RYMnFlSnNuWmNlJUFGbUB8Zip5P3BQR0B6WVJGRmloTSl5NXdTJmpKOWR6ZDdeIXl4JTh3emVENXFUJD8hYV9LeWhpYWF8TjM2aDBBZVo2aV5kSH14I3w0MCpeV305THBrZjs6MjpfSVd4VGEjaSopP045NUd+LkJkOW8kKSlKSU1UamB2Ny9JdzBf''@;'; put 'put ''dXEpM1hjaHpPKGNaO3o9Qnl9eEM1OEFUIVQyPFdWcz09Iyp9KyhtcnRwMz9KSl1FTn55bndtW3dvRD1yUDZbaFUpQGImLnwjOzAzU2Q/TlJ8OkR1JndALGlhUD8qfVhUV19uPGRjOF1dIl9wZVpPTXJXZU9hUkdYWXJ7KF5WXzk7NiYzRmhpRWx3bSNgUyxaeDVeNSo/OWc+R15lL3NeSyM4ZVhn''@;'; put 'put ''QzZrM2d2fE8xbHh9bEdZVC5eOVRqbV57Sl5we2N5XXdrKEFLQWpQWGdbP2FFdndsRHRGQkk8WmhOVFFhYFZSSDM6VkxbUV90LmR5KV9kTWk9c2lTRHxvZyQoWnk+Uy9SdSw2fmJMWmx6fThRbVFjZipdUVMmLHpbcnBQP2ldTTRPcE4oV3E7Pn10PGV4dnsqdmNWeHBmUDVgIl9OaDRgPDxPensx''@;'; put 'put ''Nm8pUXQ0IzhNW0xkKiJwNnpbT1tfMUthfD81dD1KM0AmM3E+dGZ9MlR6K2h1KVQpNS4ubnJ4M2lpPmtCaiVIUiFIZVhDP1MjZFJIQks5RGxbfDs9fDFGWH4lW1MvSWp8cWZ9LjAvNGB9bHJpYTpuUXp8JjVTQ0Zhe196NyllJDh1OzRVL2pVUVQ+Z0JaS3FmLGFDZF1kYFt1LEBYV2cqbl1IVnlb''@;'; put 'put ''R2UqIVN7d10zaTlkb1VvaDFaeEd7OHJNb3M+aVp2NDdrOTV6bSZ2K3t4eldid24zcDBpXiNBNXcwVVkzKHk7PUlNZl5mLFAwOE9LYVpFYFdrZEdpKWhYX2A1Kz4jazhTM00jdWRdeWozUnV2KmBOInpYaWJebjldUkRHX3k0MDNibmtDL1kvcTF1SWlFYy8jR3ppOChCfH56NlNvb0NlL2t8aEF2''@;'; put 'put ''b0VGfVp8djIwOGEvP3RXYTZwPiwlOzxZaFE0VnVDYyQ4R3sjMHl6NCE1bHh2NUJXI2dWfEU9fTxkeGkvIkUwUDFkTmwxam5oTE0yajcqen5AdyJiflV3dyk0UUd1XXBwQVRMOXF1bWUoe3xZR107Ky9FJHokMU9kcFRHVFFvczwsN1RhRzpSc1BFb3N9dVV5YWtFVyZMOF4xQnEpe0koLHBRcDl5''@;'; put 'put ''I28/WFBiQ3EvKzRyLD5wSGljeVtiM3ApKFpgI0M9S3Y1MGwoWS5xe3paaUhUQFFhWSRSV21FOT5aZnU6LnVGSzpzJCkwPXxKdCtwLzl9OURHZmZ7L1NZfGAwaDtFQHhAZjUkSilGT0xabHxoI3olVTgiXThBKmQiRSFPcnw7L2k9cWYoI003UihNRl9mclMkLk9MNHldc3opMjFFbUVHKHNFc1db''@;'; put 'put ''ZjxFMUFMM1t7dlM2YCxZPVdVYXNueXReP21KZX5daUghJFRNfE1ZT3k2Uk1pcWVOMXM0NTczSXxFXyIkO0NoNF1+dSxhPElfZiFMa0QsPWEvOyguY3NzZStaLGh9eHZnO2I+JSpoIU9YYTUrSUZvKlFRXko1Rz0zUDRVRSFuLjgjJGZecXcpTU5dJDRSXzswanxwLnQ8SlZbNnwsPC88bSxoPHdz''@;'; put 'put ''YyYhOismeDZ7eWV2P0dObTFSRmUlcG8xL3RXTmpOaERwMENfRSR0c20mZGxtaE1fV1VmfWtecjhHQiJlRjtHN1siQndHfmw3bGlzM3VDSVl+VmIib0h3XndOVnZmJC5BOH4wX2QuPjk+SVB1eDUpNSwyWktgMyI4UEltSGp6Z0ZpZWpYdTs5eSVJb1Z+NEVXUXNNbis8SzxwWltoKFhseVIkYCFN''@;'; put 'put ''bmpFdm1NYCgoJFA7PX5oN2JBe0FAaWBpMmdHdGg6QmoqJi5MTndvTH14V0owRHA1MnQ1IUFLKSl8b0l5djFEdFdWbnI2WldQN29xUGtGZytKRnJ2Q2tHZUxEOUxjeSxqMmtoOTNuNEJSJWtIaVVvUX5dVSNZd1BoWWV7NDM2bHp1byFbKmRRSDJhfGdnek9gY1toWlI8S3VyK085b0E6XztaPS4j''@;'; put 'put ''SmJ2eUchWjI9ZU8wQUlLS35jbiNAW08wTDs5Q1I3MCVaLFA7eS9wTHgjTCt1SFJrcHkqV0lVZTRSREBjcSpjLHo2WkN7KWs0fiZ6WnorMikvdmdTQWc3XjxBYVN0MVFUfmwoNT9MSCl5UG9+YEA6IUFhJHw7YlNfUXojKjVOY2h6bHE7VChqOCZFanJnfld5bDJyb2EiO35RO2IqPlBsXy5pYCRk''@;'; put 'put ''eWdSfUF2QCo0KixeYF4wcGJgWS54a3BpO2ZELiRKUn1XLF5VLmBMZUtdKH07MSw2ZjdXPWRFMm1xUTpkIkkjMmBaaUFOOmpqREc3VTR3c1k9W1pSeVJbKlIlPWNbVUdxNGgqSmxqL2V0T1tMTVNuUUF0NyllW1JORkckTSQxWUJYUTBUW0lbNmJeIXtMWClZQ0F6UmVYZ100cHtLLEF7R2wyN0V1''@;'; put 'put ''KE1JTTcyfVRgO3FaeH5QMDNRKVImMihxPjJ1bT41VzpJK0xOeHx9aT9rRm4kQDhrTmFjcmFpLExQaSlgNHhoNX4+ODchSVtjQ20heCZPIThfJVZKOC9McFNRYyZwQl9YNUFmKFdUMi9dRVJHQkU0YEAvcnUheTdNfXkmc3FaaS5WWGUyYzZGUzl2aFtJLD9UJmtrITVnW2Q/dCQ/d0NRMiFzLFVI''@;'; put 'put ''b2ZOWXlHalRnLzE/cDN5bUorVEw7ak4rQ31iYDNoQjNhTVd2U2lySWZ9Wk00ZFdCaFghRE1oP3hQYCxHMGkxLEcwMlpfYzlGaEFuJlVDJnQ6RjlySDRRS0RPdlNyZG47MTpaZjp7fWlqcSFfLmo4YTN4MFlxSEw7XndeOTw/KF5ELGhKQzROPnt1M29dIzxbfHo6bSZ+L3ZMQ3tUZDRjKn0pY2lX''@;'; put 'put ''Qjk6TU9NeCVWeXxgS0RaInBUZGkyOVkwMUYjPkV8TTlLMlt7M1A4LkV2SFg2NT9QOlM8d25PUT9jLCRVeT15eFZ3SVdvcGk5MmNBSkY2UClnWi5LKS5IeEczQlFWMTNONiZkdHxQUmlkbXRsUG5UQihhRDZ2VnpKMTl7eVhdP2YzIV9MLnU+ZT4md214ZUxZZHxnJWExLl8zc0RPKUlaTX5rTyZI''@;'; put 'put ''QzR9YXBmMkhCOl9qc2tOWlI2N15nWXUhX0NlPz0mP2VwJT5VfThsXV9QVTx1OFN6IjElMSNiaDJBUyMrW28yWF5wJnRlVmQ4M1hmYEg2bl8ofEQxfjddT0w7UHk2aihJN2UpXVdVQmJufiI3IlNheWwvJFMzNWFBJGoqQiRfUylDLm0qWHJiTG95PStOSntpMjZQYiJISDNCVU9FYmUlcmNLVUJM''@;'; put 'put ''Tlo6Mjw7TVM2LmdCN3M1Y1k6XWJYejBfNlc9bVhmZXIscyJZezYkM2huOlVGZEpMQE9XdEYhZ3xwQjFuZkM0YnowTUh2aiwuUCJAXWMvWHJpTFI/TW5OXlRDRHQ8fjEySTJ5PD5AKnFfKDUpOHl1cXtpN3ZAbDJ3cFphKShKc1BHX0M6XlAoQShxPkp6NTFbUEheJDtFPiMpSUtaaUFFPytxYU81''@;'; put 'put ''ZU1BPmRGJFF+K0UycTtiSSg9VmF2NC52eX1YdF0sRzNGWlkwLjBVdFlJOEo1ZEBSRzVHSHQ7YykiYFV0bWlna3YpVEI6OlN+QGBgPk1nKTVMUCRxckx6e0VuYHYzUUN7WkFXPT8pSkZZK2BrVHVeZUAoMUxdaGJyd2tucTN4ViJgaGo9PVRAYUMzdUdedj1FdTh3PGxGWzBMVSZBZUlTYVpIZUc/''@;'; put 'put ''cjxmejpwXlolWn5pUVFQNlIifHw0cWFlKjlyITJ2ZHNzK0M4OEVuUFQuYGQ2bGI1RGdxbCViZyRXRyp+fkhlcDhjYntfbiZLLiZFMT9yTG94L1M6Y0pgbzJ+RVhCakZCbkZ0W0QsKWsvLD4kKXRSVD49aE9XaDw4W0NrKUpVVFgqTWlZfXpoVDBzcnNsJDVTOnFJPmRJOGRCKXdeZnFkdGN6JDtX''@;'; put 'put ''ejZzbTlWe0RSUFlGKlQwSXouQ0I+aWAwe0JxQHwpck9OZi5pJjF4QHkuZkhPI1FmZGUielQpeWAsSFczPEVdX1trRkJjU3pAL0hLOWBsLm0rJj9IaXh1KjdSR3M5RFNOX1Qjb0ZqIVVNe3Fja3heb31FQCR0emxtR21CJWxJamVjZEpQKnhjcFV8fWFCJnF9ZEpgbzt4TkRxOz5ZaXE/JUBPUDA8''@;'; put 'put ''ZGkhcW09dTpoLnxAITAobHNtJj1vR1skT05nNCJOciJffCFSU1ByRWRvRU11YkxDT0d2bUUwcSZSMEA3Y1o3a3J4ZTdxTnBAdUg3cGp+YE1lTDdJYj1aYylwbCl0ZTBINGAodSQ8VDg6VUZdcWMhLmNfUE9KcjBiJUM/K3Vfel9EMFdfeEMwWzNZY2x8MjJNUER+dlMxeGZNMXdvb0E3T018c1Ze''@;'; put 'put ''S047V3xMWjoiVW9QdGVEcFA3R05xNkx3QH07WVlHN1d6YE1HPzhKV3khSG1EellfR1B9ZXFiPjdJYSVlYERmXSNbOkQvfDxaJGU8KGQ8W0dsanl4azRFSzFVTm1NQns9QT1sfDZKWWYyJHBGOEMubit3N3xgJVhweGlNMj5Abm5MMTtbXmxFXTQ4UHxvan5ZfVM7NEFfVU9+KnwheyE7eDwpUkpD''@;'; put 'put ''Xl05V2NPR0glZG1rNl1oMiRuez12XVZbfCVyKD9RZipxYTskcUsqMmJ0L3JaLF1ndG1CdUt8ZDtPITJOR1MmMUA+al9qdTtDe3V2SkIzMm0qW2ZpfGxIXXlqTCo/RWZ9KVFHXXdLPzVAK1dAUSomSDZoRWwlPipOYGVhImJYeGZzL1ZsKzo1RV5AQHxiSHx4R1NUJkcsdXdmYnxBclg2VnVAKV1Y''@;'; put 'put ''Jk9NOVImYiNQPjRiOUUxZUcrWWleJExGd2t3ZG9qMGFpLD5TN0xyUWxbW31GXUJmaTt3WGRyQ107KV5VfltKWUpKUWF3fmFVXUZ4Y0hPVT5VViE4KykofmlnIUZ3LHtrOUhXNmFjd0lnaXg3TG5vK0F1Y1tuXSxRIT5kTzVMZ2Q/MHxkLmxkPSVaNnxONjtdJCQjLktqMmhoP2RoPj8pfCI+OVdO''@;'; put 'put ''JEdrL09RJDpqTldiISRaUltlPE89eSFFYnd6RjczeFV2SyQ1e2BANkMjYW1qXS5tNzY0bEt0Uy4mTSokT3dnWWEvRjoueG17O0M7aWt0TG5GenFMLGVbazQ7NXpQWE5SeXIzdiIlczo7R2VLOk0qXk4mW3plVUpmTlhCZUo1NDM4fDs3dnJbLG5QezpbTmB6ekRJRj5iXzpzeV5NIX48NWdKc34i''@;'; put 'put ''L1RWVnwwblRRN0J3OTV9ZlE+VEQiQXc9QWh+VDNONCVNNkMjYHFgcU4+Jl1UdHBxOFUpNCgjdyRjKTpucUNvK2NSMXBKQT5oJXEpMzVsV1JrXjp0IUVfVFc6VU9nP15oZGFSaiJ3YSombk03K1QsbkYjQ3JsKUApITdZKDVEZ2NmYklgRlJeQCM9X1JLUTc/SlhsXVFYPHdSJitnZXZwYypsM35p''@;'; put 'put ''ez8oOClXWnFHU3t8dD8/bD4lPGRdIzM1XSRtVCYwdDA/aW9+eiF0Q11fRnk5fjxsWHZgd2B1WyNLIlZEU1dEaipbXWJaL2VMS2QjKz1aWUspXkt8eFh8aG5XOEI/ZT1wTmdIQzJNOklJOyt8aHVQRktEa3M5bWhUflk5fGV1MzRyOjVQLkVbWWEvPnY3XVd8W054OUtpZ3Q+IzJnPkohdVptVkxq''@;'; put 'put ''VXx4MDYrTnpiTnVSVHFfIyFuZVpwPSNsInsraWg2WDF2Sm1NaUt3WkYpPjJJLF9ZM3B7Vz9IQiM7Ny47T2MqYCgpMTJ5YUNpKHlzUWtRMVVRSDZgaFQrY1NbLHkvakYyJn09aTRRTzxARUF7QG9+bUx6RD1MenF+YVElfWM1TnJaZWNGXSElc1s0Zz5RdlRVQVdTMl5GI28lS2djUTFRVWN6fVdd''@;'; put 'put ''O0N7LFF9QzxUdmA0THR5O2s8RTEkLDZkaGxxN21ReCY4VS9MLDkjO0peLEREaE5vYzpdYEReT0AzWDBIbXJaa0UwTTRHdzVEfGg1YXcjQWtbWUZIW1slcnFvSHxFUUAwWnd+UCZWLDIqUVVMSkFqN3hqdm4+X3VbbHBXbGxTaWZiL29WSExlJT42IUQ5c0ssRVMoIUgkfEc0ajAxRj10VU40X2Rr''@;'; put 'put ''R35QJWI2b0Q1WmNHeFsjVGpgY0I/ajZJY1goW3xIYVF7cEZNKEszYkVSbyVzbDplTSxabnMsP3tHX1pwJWExKlN+TG9KPDIhWWt5K3g2RWFocFhpKS9be2dlbGBLNkBXZyNKSjdlT3ZySDJhYjUrIy4sYGFZSVdKLlNjUlZtWnJuX3BMPkVlYCoqbEhUKjVJIUJlYkYsRi5bYGM8X0VIL24paERP''@;'; put 'put ''PGdxJGdaI3YxLlBydFQ9TFEoOERKfWcvUn1hdmY5IyIvaVp2Z1ZWLltsQFkiXkwpMnZeTCUuYXA0TnNvTzEvImVEUUphRDRoWHRqMyJJTVJNdENzYyNKRitNaFhWKzB2ZHZSVVhAWC9oeHNIZXB+LDczIk44IWtSSGNkPyRgIXszbDV1V2FbdiFLd35nJSNoL0hKKi8lV2ZyfGtESURjfC4maiou''@;'; put 'put ''TTxQelQ2dElOTHZaO0NCRVV3d0Y4fDF3KmJ7RWd5UFtIQmojQzYjLls5M3Vmc3NNUj5RbGtDdEE2THpXXSpEamp5eVpSVnBWUkEoQFc7PS8lRExsIlNhfnxNfHUhaVg4ZldLUyEzWzNWPGkwfmhiWil6VSxpUlI4KHNZK0VFUn4jcjNGWUFFUV9oV3NebWVEQWdqUkBybFZRSzBufEtFVTo+LHNO''@;'; put 'put ''N0JgVGMzdmhnYVYwVDUlVjxqKVIyVyxFX1VtKiJnMlVzR3hfUFpJZ3VycSYleTEqQ2JwfHI1PFIzJHZSdkI/YighSkI/diQ1T1pZdkNqbW8ueHpwM3BmVnx6WjIuTXc+fFVuKk8ocDFgV0ZsPnowZmopLG5kaHNnSDw5OzcyRnsrWSVTOmJKMjNpO3p4ckdaJGVSMTYxKT1BMXkjKnM7UzM4SThs''@;'; put 'put ''eHRZP3YoYGcsUT50XjJqcW1bJHF1NXlgNn5mS3MqPyt1cEpiaTlYc3FAenwyXiJsSjF7X2BRMGF6NG1uM3xCZVp3XSVSJGVxI19CUStvUGZ4MU0lLll7MGUsRGM+cF1HX2V9UG56UnZtY0E5PCF7KzsxSHJWVFFsP1BiJE5MZy5XQS48SVlVRW95TkhHd19aQSVvKixmZl45RkxtdGA0SnY3IWwj''@;'; put 'put ''KE5vW1BXTWNkb11faV9ibDxOY284NXQ2I1lXNj1WOzo7QWJAOzNuLi9MeTNLTzJKQlNLKipYSnEzOzxDIyt2L241WXE2UTIqPkcjREZLZjslOmQoW0slVSJhe2FFNj9mfUliRlpWdiN9fiwyOCRaRGZQJkJtM2RFRE09Qkl1Mmd3em9aRFpZTGlEb1h6VDshZFdxSn1fYyslT0BdelFfIVEpNUJE''@;'; put 'put ''cWhNaitnIjFNYEhVNDMpbDxpNEhoW19vQ2lscnt7WCtYWVBnX2ojWy55T3E7XmV4THdxLl9jMiw1fXZXK29VWURheUt8OCpgL0czKGdAb0V7Mk5lZmVZY3lOfXhidDdCWzRKbHxZY1hIKUIvMChrJH1oRDZsbFFgTFlsITpFQFEpZDV3MCpVTnZYJVlDVj42Szc1dXxDSVkva35FIS88fUBJQz0s''@;'; put 'put ''cGRDVCgxelFCMlNOQmMpeSFiaCZTN3YvOjM7I0NBaEhTTGdZOWUwcDVPQ341LyJvYUMzKSpjbSkvIiV8RlBQO2NLciMvRnhsVWwudiowMHloKiNFInV+ZVpdNGcjN2VOeDU8ekVbc0o8QFooeWg3MCJlS0JGNz1SPz19NXJYOi5KWnU3IWtsdWh1ek1jVyxAQmIyXVdoUXBVVTp6M3RSKTBBQixL''@;'; put 'put ''UV1MNkN+OU1kNnYhalshIXdMNm8yIzlrKnopJTxOJkB0SjF0OmMoSD82emxSX1ZhTlBiTSJCZm90WTl9bURxRS4zUEhPbnxYdnBiKEQuVk5uKXhtYE1sd2lnJFJlYVVjUHdTQlopN1k1L2tDfHovO315R0IiRUNid1Z1OVFafTsyd15vI2U9VDtiaGt0UzlfNEt8YFI1XSkwR2MsIXw2MEhNbGNX''@;'; put 'put ''bi5hPl51WUBaVDxlU3MqTXN2ZGUqWjEoW2RAPVFQWHZhfnQjRUxARl4xaWxDWHlRKmpaJjozZWBYUWNfW0NyJjEiOkJ3aSNIRzdhO1Q3blVASCJQMGh9eDY6JldwTzcuSVpqUjQ1MnFEcF5gJDgjSl5jeiZsJklydE90UjVUPSF0OUlyOjMoOm5KfURUaytTdjgzSWxYQHVoIm0sMiFtQmdjQGhZ''@;'; put 'put ''RihRfFBfJkRAeyM6WmVvMVMhRFlxYiQ4IX0vMUdiLkg+VkskXjkycCJoOWEuJmxob19DLjE3T3t4eHEvJVpQdzh6Z3ljajBFekFCZDVYc3AqNCp9cSRXQG5JZ0hEfjd2R35EPWZZOHwxaj92bkF4fFlJUnNbKm1KQWREWHhaMiNzN3A0WCJvdTx0JW9kSlBKUC5fXVt4S0doQ0VrM1tuJi80a3ZW''@;'; put 'put ''RSNicGAmb2cvSGtAcFpOfCtFZyFpSSNtNWx5PHlTVV9mZ25oV2BXRUduZzd7UkY6IjU2KXdnUikmRUVVOkNvaCxNfShDJiNteX4mQihodnBGcE1JPl5OcHFMTmoyUyE0TUptSihqNTpgfmVbOl0sTF9qcmglT1JJMUlHMjFkazV5SFh4JjJVRG0zYmI7NntZQHpZWnwvQn09NFVmJkVLKkUjeWhi''@;'; put 'put ''IXl6OmAmbXAsLlpMcTAmNXNAVl4+PjghKkZzNT19X3Vjcjo3I1czWkpwc153WT94Xz4uYD5neHIzY05VXlc1RVFmPnZUUlU2TmAlJiYxb2o+ZzZfWmtQaXhTZ0khZmg5IzVJX0MzK2BvX2VsZ2kjNDAmOSEmZDk2eDZVdXhVbGUle0NNV1QyRH5DQk91OWopKTJDSz8wTjlWJXVuaHRWLi8lMTkv''@;'; put 'put ''YmUkYjh1MExGXjA+emwqVVVFZEc9M3xZa0BSKzBFYCh0P1ZnVz4kMzB0XiZAezpYXmhWUCYoSVMmTk1HNnlDNH0vT29bMUUkczRPT1IjNGd6QWtIKmZRPV0wfV5VU2FIU2kuMVZucnU/U3o5THtLdzFqW2FuQGpgWzFpPjE2djl4Kz9hPDR2SywoMUNVLyUiNGdMImQ+VEJwPmNIR0w8Zj1mPixy''@;'; put 'put ''ZGZDcUMhSmxRTERiWmVBPk9qUnVmPVZJSHZUNmp2ZSl2dDtGfSwha3EscnRUOWNHL2FSY1lPPUZhWU52TG8lb3RqQS9IIUd2RWg1MmI/UEFHL1g/VDFrI2J+PFNnc141dmgqL0dfdjJQN3w/TFRARV8xUDZfTTc/W1RlQnxyZl1jY005PUNzP2FmXX1KQmxmbW0vbWs0YEhncz1TdTQhZ3lAJFVI''@;'; put 'put ''MSZjTyZbfW02Z3lYSCk/RE9ZcTwoMzxbJG1EUWBSSn5QXnNtJF1LQUJrUyouZDtiM3pIOTZ3ZjJJckZGakc2Pl81UlQkKlp7YjkuJnMwalNTKmolPlQkQnhhWloqTTRrb0cjcihoKVBgR2N8UT1ANkdedmZjZTtraXsjfHBXdX4wal1ycjspaGJmJShpZGV6Rnt1VCZLT3tfQ1YoVGMpZnhMY1hV''@;'; put 'put ''cVJjayxSIiZOMXt1a1NUOXMySk0raFs+SjUqLzg/eFhMWHF6KWtuQl5pPnhUTixXVVBtWl4wYHldKUxQaygkQWJ8dHNUXko2Tkg0W3Q0IXt+NXV3NzUifmxnOWBqZnRtSUZCLjsoIUFEKiFVImxxVzdxZyRFZF1UT3BBPE59SjZPSzh8UGFXOV9yMz4kI21QJVt5SCZSQj5AYz93YDlrcEgqO1F2''@;'; put 'put ''OyRBR0NxTkw0YUF3WCR+XUMvVThWW2p0aUBLXmNzeXx8IVNLdD1fOTYxc2EqWz88LG5XKzZpN10qXV9TMlZ7bHNmPTYyTSJ4M1pMMVZIcVdtTVApVXppeEZqSVh3THV7W3Fjb25YTCRVRHRlOW5rUVJKI3BDPjo4aGxKNFd+QXVfKEMpa0dWfitMUTw8cC5pQz5nOm1gSnJ2TDpgPFoiIW1tO2ci''@;'; put 'put ''VnF5UTBSLEJHPiVPKGQ+djpsZHVMQywrKEE0bUQ4Y1Q+L2c0am5tT0FxckssOjVQbX5Aa1Nle05zdWQuWHB3QlUwWHljd3I9WCYvTFZRe3YhOFU6cjFdRFhsfV9PKzopPHJLN1F5ZTFwX1E+JVY9eCh9SClWOG9Gdih2UDwyYVkjLCZDX3xndDZROFA+JGtmbEk7VFNMOWJ9eDQsNEEuI1tZfmYs''@;'; put 'put ''dk8kJnREOlVuRyhhVz9fZTRIWS5FPHRfVTB+ZHZdTis3TU81eXh8USE4d3N+dSU+OkxuU0VnMEJaWTA5KjMjMD1tbS4zdkBpWDkpZ3ZSUn5qb05TZSRLJUJIQlRjVlhWbi5ic3xTM2lHWTYsMj8vZGEvUitkVFV6VjVkeGEoNlUkU2RIZkRUZll4JTNAImhjTyh5TGA7eVA9ZUNWYWNoJCNqPWRj''@;'; put 'put ''Ok02ZWM9cmllUzkxOE5ZPFF2LHZnXV12QzoqSEJNTWhfaUhYb1sqV31HfnZ+aHh2SjZdN1dERX1JXyFQaDp5K2xmLE59d2hVTl8rQ1NiSW9dYCMhOWNfV2grO3F1I3V4b2VDKzhtaE19UCIpSF5bXj9iXmxINWo3PWRxcXpAdVc6OnpqWHBbME5FdiJLKHIkI1QxWTRzK3shRH56Sl8lRls3fDNM''@;'; put 'put ''ckBkaD5EKks4RyFRUU5Wby8uTGs0MiNFS2AodCpYbyMqJUwrJllmM0Y8KzcmSl9PTkx8PDA0R3lRPFtxSCpJYFY4X2w/V3peMFMwTXVwZTl+eSI5ZUElflZseEZFdjI5P1QyeDQ8P2Q/R28lMFpAPUxLR2o8RixOWjFtfFRQKSw5ZjZ0TUAkJGB4KnI4Lih9Q19DQzRrVT8mdmU6OzUpSTQ9cTRw''@;'; put 'put ''QkYhcjtPdDVYRXJFKXoxSntHSHomNz9TQWxNZllhNVA1KVZvV1dNJCZWIXciWDFecTlZVXJKOjUkPzpFWEkoQlgucWZ5ZnMzO04yPjR8XkQ1Q2xhYVI8WlBWUjJjbzBiMk5TKHxkQXdCdTtbZzRbTGEyVmAoKGxJQU00d1AxTUl+dUhoSkV5OHhCM2l7WkJgWnlMfE8rOWFHWWgrbUBqSD0wVyoj''@;'; put 'put ''cEpHQStBQyRSdDhtOkd1ZyVDaiZMZzZGYmJIc3YyRSNIRkwzRVRPN2hec2AiKi5ubn1ZQztXOStuaDsmRH12KW5zWVArXXUoZmAvOV1RaFs7Kks6UGoxZ3AkM2pCeSgyTHFMU1NKM3IrXXpRZnR0dkNpMmlKTCN+dG5pLEQkVmZ8R2F8X2cpX08sVVR8WV02SXt3dH0uK2kjNkJFVEJUTjooLGFm''@;'; put 'put ''SmNJcix4LnJ5a195fl95ODtjLzo7UExaKXdBRmZbRV83KzdhRXJZWUJII2lyXj47fDNFNjo2TkUrLGpRd2FPJE5aYSwrKzJgRmIqLzxNIm5SQD9nVnU/a1s4a0A+flEmQCQ2PVhkdiU8ODd0ISs7MD9jPnpObjF5UjpiW0QlOU5GKz95QDA7T3J6ZiErYWJ3SjA0cmdnaWclb3BVaXVSZkhoRz1m''@;'; put 'put ''XjdLIz9KfHReU2l9PHg3cWQwJH03L1M7VjsuSmRYbm44PUN+XnswdkB3WH0pS2JGVHprJCR9WCgjO2dxOG0hWTthTUorO3V+PFRoMVAiIz56KHZ7Oj98P0hIU21MfSoubiJ6aGs/WEpVOFdsfD9DKzFfMVpVRDFqbHshaWA2RUF6NVleYmlXY2xCQzpuZyUqdHYlJmVGIz0qUU17ME9de3smMkM4''@;'; put 'put ''TGNHOSFvM2dicmJIQ3tbQjFAUFlbLkljPXNLZ0w6Qjx1WiFGXn5XQDlzcmBdZzNiPnZ1KTRVOl4rKmhbR10pKDVlXWkiNSYoV1lqI2JgKXE4fnBZYzZ5eGZmWTpiR18vXmQqW3hiOzcycDJMPHJ8YW4lQCN1fWRZUiZuZyE3UjlIWzhEalUvSCtyWXhwWmNqZDVQV0VlVjdfPWpnb1hXW0dEZ3dP''@;'; put 'put ''U1diRU9nbmF+M3R3azcpTUBtN0wyN2F+SU0zNn1vSltGXiJIWnspc0xeMTtxP00uemR4KV8oW0lZVzNETVoxXiMjP1o9VVJKVVshfkFQMTR4IzNqYjx9YiNnNzdTfVY/UHkxXkk9KSxkbmp7dVdtKShHKTwuMDYkJE0+MC5OeSgzIm09V2lQLEhNNHd2JjB7ZE9uUjgmQVoxbUd1OVk5a3E6IUBe''@;'; put 'put ''SjlOVk9gOHI8OjkjbjByMV1FMzZkbzxvNHByYCpyYkNke0dhSk8uO0x7RnFlZDIuY0VkJn47W2N6THZFQTJbaGcqeTA6LHxIbT5dfGF7JTYxdltoKkU2Sn0/aUhpcUdPdkFYPmN2Yzdndls+RyZoLm9LS10yZl0lNUV1eSRaPXhVVkVwT2VlRToiN2I5MEpkal9zP2hJeCpWfV4obnZXKWVgRHci''@;'; put 'put ''Q3lCUVkjNXdZJTEmPDE6NH1BNU5PcXxUQ3JYSlRiUHEiT3k1UCojO0Q7JEVuIjNzfmBkekRvJSklPjliUCwzbWREbHRWZGBRcU9yM04zMC5pJV5YKzY1ZSNYcTN1L15jUHphPGZUKGFTPDF2MUNxLHU8amErOWRaRD1kX21FWkh8YEhGYG9vOUJzZnRsOyNiQyI6QjNxSWt3JHpMXU84SyVaZnpa''@;'; put 'put ''d14jV0pPfllNNTEmb0x0c1cjdzpRX1oqXyorQyVNW3A4U0RGcF9BT0VwSTlCKkFCfD5hM1YmWy8kdFg7fEwqTEJ4NmFTJSx0XnZHXT94MkN3Kk9XK31FNT5GYDkidkMrXyoqfTJ3O15aX3VbOmZje2JRJVJoflBGZDFgTUc7Qzc6NCszc1U2ZW1bKD5MfFJ2Ulh9TzVKZltIJFNtal9fbm97ayk3''@;'; put 'put ''fHdnUGxaOFNebUNTL0lQfGF3bGIrKHNMZ2JRPkksNn4yMm0pNlA5L3lTUVlrI1h8ckBNTk9gLD9FZEUrSE88ckdpUSY7bHZwZjgrfStDKnkwIXRoRkUpNCVRTWZERytAPiwsamlmeCtXakxnb2xMUnRkQUBYaDQxQ2NHTFhAYX14S1A5OWNgOm09NW5bJmtPMlc1LjBdeSRVWmp4VGRrI10oXXBT''@;'; put 'put ''P0sxfHFSS0goPUsjZ083RVQ5cytYV25uR2QxOWx3PDxpJlRwYiYkclJLKjBqU3F1OkVEW308K29fTTYxNElLIU9LRU1pSz4vJlpYYndsY3cuLG1mYkd7azFvTHgiYXsoWDZfM1lNNWI+PS9BK095OTBwVlJtdy8oSGNfWypaOShhfHZEdzx5P3VPYHYiK28qJE8lRihWSltnKG8uYGp4dzU4eXdq''@;'; put 'put ''UTQ6bUJ3Im4kcEllWiZWfkF7R1pIfGpZbEEqYWlNT3Y1YUg/dV9vVmsxPkxdPzdAWnguR0U/cmVvbkVkIVZ8bWdkanN5VDA1fV1nfGM0d3YxJG8sWzdlSWNHIl5WSFlaU2VIejZOMzp2d3NOfDRFM3RaI2BuXUM1MFd1R3FQdG4oZWVRWWk1YEY0TFs0LnRgfn16eUA0SXovNTQ/V3F5bzs9bmVY''@;'; put 'put ''bmhbIVMkKjpsamZtQDBsc08yV1dwYUxOXi9QTStlTSxTKXpMVE8wSmRLK0YxWWAsR2YzIlJOVzdYa3wlM2MuUyREM21NKTZfVENlY0pMQFZUQ3R4JGxIQFd1MlhAJXhILFtzX10+b2wiVWAod1lmNGIuKCQpIip6MHVAS3VgcnRETWpvbShETUR9KnRNTTFmdVo0MTxiIShbODxXPChpKWxrYFcv''@;'; put 'put ''bW90ckBnIlQ+PUNTKVNeS2Uhck9lPC5+Zil2dSV5ZE4xSThtZlY1bkU/R1lMO1JqdiZ4ODMkR1RuMEJOfkhSP2l+NVdvU2s6P3RMU2d7VEo9NnFkJTYjLypvOk1UYXdmVCs2KD11SGw3eG53Lj4yVFZpcml9bHloVDdHM1hmWFpUbnBWe1VILFhqYCopdD46JXhddjp6VUpHOmFudmoieCxbVVNX''@;'; put 'put ''JSole0ZYTGZ6Vy8kO3NCdy5TZk93eThPeXgvUk40YU5ZNEE8KXNieXhNVHZ6aiMve0RFWmcxdHpEPWpYXilRSXwmWWteWlRhJX02Ild2VHJZS3gjNmM0OTZON3RuWUZlSk1mcFQlQSk1ND93Qi92WD90al4zfCx1fCp5Y1hzSElSQGw4WUVoLmJjUmIzVHx7RmNqUj10OVQ7JlA0OTB6PU9OKlN+''@;'; put 'put ''X0V2NDA7L05vazJoKVM9QExSPnx8PilHUihWWF1zOHNfQi5kTmB1ZVJ3aGZAZHhxfld8OiUlaE5jPGF1ciZReX4yL3pdPz59W2t+bV5oTmR+bC5JbXlVbDF6dzRKND9wJlE3KilHXyV6UHY/RVckQWlLRD1kIVV+VVBON2wmd3FUXSsscls+KWNeUFhabzNgWSZaJD1WeH1YXyRINVFCUTZYLmY0''@;'; put 'put ''JC5oZmJrJjdsT0swcEwmKFdkL1ohNiYob1sjM25FYGphWU9udjpCcmZqdXVhbWZEe0JbXnRzayE0JmNhTFZpUCUqPzMjLmE1OWJhR2wlUyx3VyRCPmBJZGVvfVo+O18+dllAeDRfbyE3UCU2fGZzMGY0IVVqVkNTVWh+P1QpfCphdCIhaDlIXypTUV1tLE5Ve1BwP0ojfTFkck8uIWZHQVRyKn1+''@;'; put 'put ''Ti4vc2tiMStvfVBKZkM4NkNELyhESClPVjRaWzhmJSRHXl5pNkt6Tysma1A7Q1YwYXx5aGNbRDY9TW94cl1aXn4/MitocSpuZXU3UTlycGR1WGQ5Y3RDUW05P3sqYXFqNWIkWVdaXmhaPXRmK1FJKGFnO05peWxiW1ovV31udyp5Qnd4P3k3bkxPQGVka25Fb3tjJkBWRUVuOEwrRyNaPXlVbGFE''@;'; put 'put ''VXUpQnw2VWZjXSxdQ1lvVnRaK1AoXzYkaGJ1MyxNb1QvP0pOLERfPUJ0XWgobSpKIV9waWljRWtreVJ5VWMqSlRLKXBxdDhTMFoxa1opdUpGL3xAVHRsTFJtIURnO3FlSDoyL0JbVXloVTwmVSQyZj89XXFaTSpgUmB7bkxrdDpvfD96VF9JJEAsN0VANTU5aHhrY15Sfmo7LEk7Wl9eJXQoRVcv''@;'; put 'put ''dG1Yb0g0UlFIZj5jfkh0O3A9en0mQlB9JilZeUReRyklaGBQd2xtWjRva18xcytON0skRmFpRGcrcXJdJjYmKVsqVWd1TFgvUXd2Ly9laEZEZWRJclRMWEtxKikkNW5kIm9kVCtXfGx6OSI5Q3lmYnp0cE8wdDNXVzY/UGIrfE1VWTtaWz5vLjFDc2NGKm83PERLNixgJndoJW8xKnIoZGlVXUcp''@;'; put 'put ''PjF5VW1LTVplPnZeNWBQRlJpRjUpPkx6RVtMXm4mOlpkeFtYe117Slt5UFFfVD54WEo/XkoufVMjVktJSGchS2tOKE5sPXhqOWJJWHFXLkRucmhaJCRAa0lkcU5AVWZWbmlxcE5FQzAvVyp1WFBTXkt2XlUsMG0yW3lVYCt1RytHKDw8QE9pNE4vWD0xT29hIkw7ZXV1ZX5+fWtKRTJuM243NFhh''@;'; put 'put ''P3Aye1taPklraksiY21SU20wYC5YU3NtUSVVI2o1MyYhdEB0Kz8qfSt2bUJTYEFGLyJBWTFyZF9tZnl9aDdwP3leflMsMlolTWUvKStoY0lRbDVvbUBiW3U1cko1aXhjZkF6MVlXakdiI2c7PmNRPVE8LyZGdS9VbURKQTA1ayprQCNnbTBofkhPSmNqMk9lSWthcCwqSlM/KT95KVJjLio7JGxJ''@;'; put 'put ''eGRRen0uWyxxI0chLEd8RX1ONmw2KzNCU2lfMFpIY0NTaT9YY2wlITp3NmFsY2kiJHhaWEIuJikvYUBZLlY9X0Y4PTRFaVNGdlQ0REQ9JDRgWi4oTFdBPEpHbERALi93bEI+eC5ZUjRSPVAjY1ViLHAmVChLRzRyT115NFVBWCEiPzwlZH4uOXlGZSltcT1FQ3hoejt5JXxvP2EyeEMyKGdeVzx4''@;'; put 'put ''bzpxdzBQfW0+cE4iQEVvNG0ia3N+X2UmI0tyMUlZTSk0RzRoYzM0JW9ndC9ofVd2Z181KnM6QCV3eSYyVzk7Z0FhLEd4QipTaWtYajxrRGBJZXguT0oxIzkhU2whb2RqckNdZihJaHp+czRvdlpHeDEqd1hucz0oK2dSZHpfVz12ZSgob2RFNS4mMDomdEtNLmVrUU0mbWo0V30zazk4S2N1en49''@;'; put 'put ''TTtCYUQlMFc+M3VbOn1kUldldGQldndHT0x7TVVXcWMpWH57dmN2VCEmSnZCOGdacS9Aa0NlTHg6MVE+OW90cXM6ImZTTCN5VmEzOXZ3JnQ7K3t8YHEhO1RpQmlwJXlwYVIxfmVNWkdYXnRMX2dDbTU0RypeV0ZtP14+SSxUfi9KeDJscGpTeTBCczRQLDNGXUowMHtHZ21hQyVYVUNKakIhOXlR''@;'; put 'put ''IUh0TkRaOShjSjI6S3F1QmFuTiFqIU0rZC9rblhCeVJvYEp8Pn1Uclp5NWlgYklTaDE/OUUjVTptV1ddSml1OXpZSWVTMyR3NE02KnlGKF1UMHlDIyIkVT9zWDxLbEx4fF47cV1zNFYhY31PZHRfSCUqSz8uPXUmT1hRWjB1TixQd0VWdCxpeisubjZgS3pMO2taSVh7amRhaDc2IWlIYCNfWjld''@;'; put 'put ''IXhndlY6RGVpMWEpZHdLPkU9JkVhS0Q1M2Bvak0jfUFAXVQvZklOWU5gbl1FTS5tPlVqdFdROE5HfkoyRiM0ayZmR0V9PnB5fWhtXXZLRlZbJGIzeW9kd3k0MyQ8aGljbjAjNFB3RUR7QWMpVy4wRGMxdV1KRmtUOm5ZPy5rSEhGQWt6LndLbDEueUtYUG96dTMrdjB3Q2JTIV9BUkpMa0R6I3hD''@;'; put 'put ''aVc1dlA9RyI4a0JAXWNifVI6QnQ/eWZSZ1pJdEwyfFNYLFhaRC4sPl4lP3BtcX1lSHAhWlIvMjljXmpfZTR8ZHQzU2hzd2tCRSs8ai97W1koRnBUQmprdEdkaSgmNEE/Jml+Pm82TUw1TWY4Lmw3Uj07ZDkkTiUkVzVaMlM9Z0sxby9sL008c31lR0Vsb2gkKmBQLiRKMWpSezM6THY+YGZ0VyMo''@;'; put 'put ''YlFtPT4majh0NiNsPjJ3Pl0qKGFEcFtLNG9Ta2NiQSx2QDIrJjJXKkpWIzolNjA3Iy5PZjpCT292IksyflhMMC5KJWVbRT5lNkouST5sK2Awa3YuamNTQjBsNjdSYWBBTWMqQlJfNUl2IVswS2tpdEZEbS94L2l3QWooRnM0RFdSVSUkbj5vY3xGLGVTRjt3KjFDSkEiJms2OV11YGU6YSYwRUJf''@;'; put 'put ''Kj1gUVBTbiRmeWZ8SnpdWFJUdm1VXUpoJSEub1Q/THguZDUhZGtEXlpfYUVBZDExV0lCPjQlW3RrMWMoe19xIkolU3VyVSZbTWNKWSw+TGxNYF9rOV0pW0t8PiU5en4+P0pXLG5ya1duZjd9P0R4JSQ6TyNRTFFUdlJJITVWIX1xSkxmOls0XWB2cD9uLiRaIkojZ1E6Izs5JT5gfTEvTnNVJVBj''@;'; put 'put ''XkBvQjR8UEcqRkt7KDpUUVNvdl1YQC50cUxjUVZrSzVueVdxSFhWOnFQSnJZeX1hMX4jaV1IXiloTDZJWHgrRzduKkJLLiVrL15jT1BrSiszQHBZfk1+InclZmlnMSszLD5vK0hMI28jPkpuWFpdeHN3Un08M01NZCw3N2ZCJUBoSiJtRF41MSJsNE5ITywqWVFWamJeWk1NPiY0Qis5MzU9KFdd''@;'; put 'put ''Xjw9ejp5bz4jO09Bc186RClwMVRfSFFNUlciNHwuYlAsZmZjLlJ9WTJ2dGUoa048bVUzazJFXzJiM2hCZWh2a1NuN00qVVlyPjpSVWYkcz1tQkozbnYoRSl4eyEwYEBLbWJSIUtWLERne1Mvb0hvMmpUR29kI1tYazByT2ZnOCQoK3NHNHRZVHUrcHYyN1Y+M01EcnJCWTl0TUY5USYkYEl9MTs6''@;'; put 'put ''N1g2ZDQ4b3Q8Un0yZXssIm4lQDhKX1h5JWo4czpMbCtVRHsjLFVaWyt4SXpKWjpadzRwPCl5Tnp7I0xTUFpIJmN8RV1CKnplbWNVOyg6PmEpVCRXfGwucXshIjd1TSood3B7O007IXB4K0xmOF5ecTtFZ1FMKWQkaClzJkcpYDJVT34jV0tgbWpHbyZyVE42Q3lwcCY7KGJ5Q3JdPjdzNzp2PUBv''@;'; put 'put ''bFIwLixmfnUhOH5Gbi48X1tleFRzeyJaNCsvYFglejRQTyZWdVNlTWclc2MvfCIhR2ZlWElTR3l7VkR0VVRSQSFTdn5hM2Qxa18vVD1yMXlmVTwpVEJ0XVZ8KHo6fnBsU2AjcDR3SlZ4LnBLMko0Vk1mPjhqOSNkSHw5KTteWD5YUTZyUnxDen1DSjh0eSx0LD0wTHI0ZithN0JQRVJFPCJTcEpv''@;'; put 'put ''Skl4WjpbNkwyQG5ENWJoTFlTdV07YzxHXXBbYjY8dHRlfX11aFZiJm5gKTA7alhmbj5AOkBRZWhNLHFlQnEqVXUkY2A0SDFEOHwhOlcuM2ZGOXUrUyx3PTA+KG5PRzVSWn11aV40eGdWT2FKTUMlLHdEU0hUQiowbiNgPEExIyl4YTxxW153PEgoYjRSbUl6Vm9vM31IYCM8cll2QUcjVXtSb2xk''@;'; put 'put ''VTleKXxpeCpFI1QvTGBJNnoyZ1Z3ZmA3XzJlYntgKyJTYUZPPWhNPVhtZChLU3NVKlo1MEQ2aFh+P2FudU5Ldzx0WG95aUQmJV1RI15CZnB3RjBgVDRoamBJa1ImPyRVOCt5T257dzI7cDozKS5RX1Y/SV9zMkFMYzdVfilLKDxHJUBYUC5EPzR7S1VZJml1N2RiNjJNbVpsdGlUVml2PSlYcWpf''@;'; put 'put ''bFJHSmk2KEU5WjpyOix3KTw2M3BsPW5xRD83NEVEMlt1ZHVqO2BvZVBHZDFPKj5sKnUoPWJPcV55O34sRTZ4RS4/JE9Zb1NYW1p0RmQlYSVEbVRNP25feGA5YiMub1UhbHZNdCtRJUpUYlc2OnY/fHxXI01ML3E/dXR5Z3xiUUtgSl01IUIqNWopemNafFMxVVsoX1tLRHdzKFB3WUdEfT91ZClg''@;'; put 'put ''NHReS3Z1PDNEUCRmT2FFYns3cmNITSglYTlrOmMsaGxZeytiZHluXkp9R2UrNCVdV1VIV0AzLFFFSFgjRjM/JE1sZE99I1czcWE2VyR3Rk5NRlcwNFMyVkIiUzhAaDE7TUwxKD8hLCooUkEsO0c6eU1+Jl5haHY8JmgudTxPS0ZhWllBRWk5X2lRSTJSfEZiPDY+Sm48T3ZnVVVhSF12UjZgeWB1''@;'; put 'put ''ak92WyVAUDRgS2F7Unp5dD8vOihoMjp6ZTdRWnYpZ3c3R1dzbmUoN3UqL2NqNm9RaC5CcVVJNTQpKCZFKWJGalc4eTAoXT5ILjxQTjRBZigzKnt2S2Q4Y3t7VTN8MnBacFdLWS9gfFB1WDVoImZ8KSpDYEl1JUxJJltjKFgsSDtCOzJ4bDlzeiNuSURqKTg3fkZsISZNSkM1TE1jR0FIajZ0SCU4''@;'; put 'put ''SiR5VnprfmY0TEc+SjYkcCwvTkNoaG59Sz5FMk1nWThuMVJfPUguYE5pWWYpS0dteEhOL11NXk5tfFRxdHRSTnBqYnU/PFZ0NzNNYHZFeXZ6QHRPbTpINytBRSNLeWNYbmIjM1QoJkNCPls/ZzBBYmRfPV1+XSVFT1txN0FPN353cXB4bFpyZkRtdFdbXXRMKz5FYiNvKmhmVWRacj1MKVhvcktF''@;'; put 'put ''eVRFbVMqS1F2WDl9dkEmOkl9Z0IzQClwRlpnMl1xUXFbUCNuYiF8Tj9Ze1V7amgzKks9MzVgSDMwdVRRamI+JD59dEAyaFA9OXxzRTF6KWRAXltjRm4jKElSY3ZmTWB7e2s8IShrLkRIdnJ5PCNfVFc2OzdUQyRwNENPX3xNIzw0a0JIPkM4MW9obWQjNCZaRU9nI0tqP2FSfDFvdCVqZG9JeGle''@;'; put 'put ''eWRSJXQkZ2xLMCRUNlNRXlgyMnE5KTkuPUxTemlGQWspWm41VyRUfENeTk4ldX4hWWM2RXZAQjZKK0htdylSTCYuUDRXVXQmPi4kMjtaZ2RvajV0QkpGNkVdMzRNbklVfSk7M05MfSouOldFcXt0fjdGYnsxKnpxKSFaSTEvZFlzcFJ+bzlmeX0sUCImIm02fTZTMV9CYl8hVEdQQGVBbiMoeSZJ''@;'; put 'put ''Q00lZElmJE1rUDd7fFcyUy5NLCRCck46dD4kZ3IlWX5VQFA0IlEzLG8uV1srNmpmUShuT21YQVQiUDNjS1o4KVVufUp4QmtlWSlMRSF3NkxidzIxWSVZdHNOJFtBZjhbNmFwU0QuMWlpKjpIV3B1ciMpa3hYXmYhKW5jWns7VVAkYUY9Mj89fXBAaTZVSzZ9OS8hMyVwYCUidzdRO1cuPHoxX2lp''@;'; put 'put ''RkE+aUJuaWF4eFg/OEFZQmlbOVVKW3M5LFNxUD98QlVxIVR1Z3QpKzBXdnVpZjZzdzhpfGJ4JUN9YUI5P2E7ITMlUXo5eVdxdm59XTprYzAxQTlGPUtKRX0sdG55N2EsOk9sMCF9I2JfZ0VPPFRlT1QpZVE9QSNKU1FUQS49MHN8JnRVMEtZSVl8Ukksa2NKakBsM3BNOih1WlJHQ1RzQUQ6dWZX''@;'; put 'put ''dH1uMz5hbFZgUHlDKHtNR1grZUN+XXFJRitzUnRFYUlEI0VjPHBCPEM8W1AoTnlWUjZDazQ9PDM2b0llfXIuOiwrPGZlJXZkWVVnc2BwJmQ/aHM/blFyKn41XixVR14pNmVFQi5zdVFiZld0S1JlJDYsfC8mNXJlKVAraC49eTc5Q2kvaSU+O3xYRGU7OmJZZEVEWGsjTj4xOnNnTmF3cz9kamkl''@;'; put 'put ''RXBGUnhsSiFzcmg/e0BTS2ElLEA1NHF5P3wmV19FenVrSCRPe3x9bEl4ayJ4OWF8NzIpJjFjWU0wN2tsZDshOyRmYUJnW0whXn5kZF9aWlZyNis/LyQ9Iyo+SF9rVVEjNVBjOyFLOj9GX2QmKikyUlkoJCFlMCxjbVtyPzUlNHZPQkhqW3JAWlg2b2hkVWJEfj5wYkwkdHdLNE9RTDhPLmVjP1Rp''@;'; put 'put ''OFJSK09hbk4ieW03fVduLmwlaX48ZzJxcmYyWSs4IjlzUW5GOXF9N1RkSWM0RHY3Z2Vjd3Y6MWZhcVkxaD17LElBWE1bInN2KkJVWFIvX2M0bkMuWT1YSUtbRzI4Ti9LXipOI2psPGFrQG9zcUYiT1ZweXZHVD8rO11ZdTVqWy5QP3dyOTM2YEwwY11fNSMscT9BSWc8IjlZZWpFNShFRUJYIldj''@;'; put 'put ''WlguR1Z6UkxYUERAOyUsMCEzRFtSZkN1aGY+XWBhIWRjZkE+X0J1aFNUNzlAYFk1e291TTZCJigueEx3PWdzeiZ+KTB4eGA5a09hNThwWFM7TWozbmYqa3khPFBnMFkpJV1FbjgvPWIpXkU0IjRhVD8mKDNhNkskKmg8cVY0ZDxeUkFxX15gMXslanlGMj54cmciJnJUciIvRDRJNy89TltOd2F2''@;'; put 'put ''NDNsS3ZARmROPG4sajN4KDVDZXc7OGdNSFZ6a0dbQzM8dCszeHt6ZktwKTRBaWlxYCg4c0Z0SishY2hnPkolLlVeaXhTZlV6Pm10L2BVWDB0L0RMWDRAJmp8OmBiOVlGb3FZImcwd19tJTEuc35+SSozVl9MMlJbRXpDfSN6RWcrNmxvb290W3ZlLE8kN2QzKEcjYzgrZz5bUmZJJWJURT0kaGBS''@;'; put 'put ''LEZEOH4qdlNfaklRJUcoVWxYZSQ3ZXVCXjJdeERDOy55d148b3hGWFE6KiUvK31AJkE6V091TyN0QmJQVmBmPndlcTEvOlVZNSlidzwvUlc3Wl0zMkhpZWA0NX1eYGlsS3JMc1ZfIUR5MSlwYmwoVllhJVJ7cndyIUY3d1NlXnR+XndoJE5xWiZKZiJlL0dZeHVfM0lpLmleclhUMU56VSFZfm13''@;'; put 'put ''T3ouRD82MHY1dTJUJX0pbUthTDRoK3l0Mk16Z2oidWtvTjlgdiJ8clI3VEp1QFReTHpALG9WIVF4JTs8VGU4b0w7RENYVGshSlQiOVUrQyFHNSk/UyUodWdAJn1XZEoqTy5Kd191TFlkQHdoVjd4Yk4pZSJqLCxeOUQ/LDIqPCpMOFopJnAkN0djakYrUHl7OEhMcks/K0hHVW5VVnhdcDtLKT5f''@;'; put 'put ''fDomJXZHQFVUZ3EmRVldcVlyOSJKRXwzWzMxcEZ4UEJbVksjfVYmKXxUfDx1X0xZS00lI15SdDpNMH01KXopfT96I2wlV3FzVGshcXovfG4oWkYySF17V355VX54Jmh8YnYrRiI/SSZHJEYqRmpCQFFmNXwpOkFFMHdGOVFBOT9qW3IrY35HOSwiKHo1S0pFSjJIUkhrRXksYzdFJHo3bFtWeDpn''@;'; put 'put ''Ql1yaDZWT1p7QDFHTSZlW350dHA/eFZMZz1OeTVfT1goUWhXdEpHcnYwfHZFKCwmJTpzNnV+YDdneGBJODtnY3dSfk9WdihKW0h0KF80aVJzSF5mWE9WYSpMNkkzcTw7PHJSZS9IWD54KiZNQ1cmelZEeDh2bTN5PUw6JnE+PF1gcjx7RShKX3d5cS88NV9SMCFiP3xpaltwYHJzMzE+Wj1JOXAo''@;'; put 'put ''ZTl9PV5Oajc+QDFqcXpJfT9jQWpeMyVub1B1LiVZPzxSPHQ0dTIlZXJzeGI/JEtUZUhRVmhlOWpmVEA9ZEZZeXEidnttSHUmZXM+eSsrazFtSWIjTTswUixBSihyZnRDTUtaLzZNXW01MltvUykybHhiUDR+ajxfK3g3bSUyQmFDezhuNT1AQ2Fid2NSPWdxREcvKFRuVCE4Nlgkbl17QS88ezU7''@;'; put 'put ''ckNQUDk4eDNgUj1tVE19bnwoeiY4MDpZZ0ZNKmNvdjZIKld9VyhvPzFwVHRETkgyNEBaNDIwPmJHSEMvdTdeRnsiZFR2TkxsUkswakQwaGNSUkRIVnIqUm1YOmxOW1l6dXZINktmO3ZdM2IxKDgmKG17bmVVMDkxUEhVeV1+OmgqRFNFZHoiOnhFOWdIX2dOVDdmVFNPLCFjTzRafmkoLHJSd1Mp''@;'; put 'put ''OUUlP3hSdyhfbX55aFpxO0hINSgxIVRPc1lDWHtYPnxpWTo+eHRBV2RPd2d7OWRQe2NXIyZsQ0ZWVEQjS1dYOFpleSVPWntqR3JiIWwvSG1SdzxBVXpZc05uTGltQHc5c09vL1hBcU9CeCsqNTRpNjBHdSFGL054P2RDaDRsI2YwWnB7NGRzUDRmVXE5JnIhMyx7NDxtT35WeHM5QTZfcypofUJk''@;'; put 'put ''YnNzT0h6NHVeVERGTC9pbCR9Y29oSzI5LGJZU2MqOkZGdVNPNSw8UHtDPjh3Uz1FY0VQWjpoZVJwdTIzJEtjRlJBQz4pJC9XbCRNb14hZ34+RntZTmZ6Wl9hREguOyorQG5vPEs5eVckNkUweHFELnIqMjhMLGxkPHI1SUooSVNgMnxjb3k3PiFHTWwpTWslQUIkTjBwXVRmUEJOVj5MeEswaW1I''@;'; put 'put ''JUJsVU5xQVszbEModyEpWy5CTGUpIiM0Mjs0MyFhRyNTX3hYIX1aSVtmLn1ObihfO2pRZGIqTDx0QjlednUuXmRPTGkyTlVMUG52aFdgWEs1V3ZUJHk7L28iVW1DO1orUlFYa1h2e1BKXVt3cGNGaGFoI2ZFTE5zfGNbUXdveEF1SU0jaWpIPEk/JT1ZRSVzaiV4VGhwNn1HMiRaWXQ/dy9dU1E6''@;'; put 'put ''ZXVpNzxGNFAsd2Q1fn1hJFhWPyVAdyVLakk6KnRDWUdge3h2W2k8WHEhdSkienA5LGx3JGpqRWQyZ11QUHIvVit9WVp9MlAsZWRNcWgvRWVZJjFjNHNvenBFfnFBRGVwT0M4bTpyKktNWS4sQCtZWVJ5Xm55T2lzXlImU3tvOWNDbDpyalhEP3h7dGxXYH0wWEc6Q2BqS0dZRiE4bU40cX1CSi9A''@;'; put 'put ''WDdfTVZpQGNwT040Tz0pKjZpNyojLk13PERbWSFyQy8wLl9TemhZK0pUbjFyWiI+T1luZn5mcW1ZSEE0X0pTUC9+aTY8OSMkcjlyWD9SYn16WWdSSUY7dGQlTXtxZEtddTtDZ2JDTiw6V3R4O25kd31ES1F5OHl1a3xsdkJiKDh9UkxOYyleL31Xa0Y8elc4QnpzVls2OkJ0fUMhRjMzVmNjWUVT''@;'; put 'put ''aCNFPHUjMjojTishVkQifjZ9eShlO1ppUFZKZi5afEZHbEN6V3F9OFZaRzBbWjNaYFN0KCNYJGpUT2szdSE2cyFAUH5yK34kOXRTWy9je295SWlLckJFWTMiO1VTTW5NXyYjUTEuVn5DbkUmd0ldO3o6JEtgVjBGQDJZRyY4dEZEZXxMTk1mZUdHWiQ+O1A0QlBiKjkoIyphNz5iIlgoJGIpR1J5''@;'; put 'put ''QlBhelNfSSx0Q3B7MUxCPT02d1UyYUBvOzo2P2YpPU9gc2hkI2UpZX1dI3VVZWFoRmRNKU95R0s6TDhrL2Y5MGU+dV0xPU0jQERrMllwIUFmOkY7WHNCQmRAUFtCflBmI31RJkQrQHRCRiVXcXdsZEtfc31iZlU2Lls8fnhNeXUpeW5uQU1Idzkjd1BpOW9gZXpYUjNpQEpnYjpDRF8iV2c6TkB4''@;'; put 'put ''Y0pDOmAlLFIvWFhubGg5TCR4b0tpTl1nNCxua0k6QEQ3Q0htSVU7T2dQYihfelJHMlR4UFJAVG0mRDJYZGoqJH5KPzY+S3pec2FuMkFKRTdjPCtiQjt3JE5tQUFpeiw5dD9jLm46NTtxJX1efS5xUix+TX5mW3dKK0BwSlpoZDtsYk1TTC8oJkdpbTw0UHgvS3Bud0NtQHdRR3QyVCUsNXIyUngp''@;'; put 'put ''M05tZXBnOHklYW1AZ1lqZm5FNTgkMzoiXks/NzFhVEtJfklFNVVkMnhgMyFQcnd6ezY3Qkd6fS5MPjk6WD9aYDVqZGwsRyZROTVuVl5ZZC9aR1s2d0woVXg0aW8hampvPzZPUmpWMFtlVEFdek9ZN21oUWplbjEjT2Jlal5kNCk6U21OOFs5djgjNFYmRF9ITUxhQyNFZVkrOjZdVXQ8S0V4NTEq''@;'; put 'put ''VCFRRHgwVnkrLDVFKl5VUlpGTHJ9ME56Z0BZbytZcUlIeHd6PWlEdSRMVTouRUJ1LDUyWFRwYV57ekx1QGx5YjNQZXQpS2dzbHh8Y1J0M0ZAXiQxOnt6ZXg/KixpJDUrZGZMRzlEej4yeXV5KyVJJSZ9PDcpLzQqSl8laHlffE9bKCVoTWk3cF1ZbDpnd3ZfUTEoWF8kZ3l+ImlVV1EpZEJoeSR9''@;'; put 'put ''UTJhKnorRSxeU21dYXRxPT0jdTo6JFBeRH5WfURMb2Y7XkU5SGNmK3ZJZ3NNSjRxVH1JUmg+RDNTSFUifHNCZV8pbls/dEplQio+TiheZE5beUhIV2pKWWx6N3hWVExkeD58cU9ISSVeRGcrNlNmS3spZTJraWtXMFJHTyN+Vms3aXldMX1gP0l2d3JSPzB1Qihidldjb3NDRUcvJHx1LEBbVzY7''@;'; put 'put ''QilEUX53djFjNSxRfihTRU90fkR+JHowMXtGbjNtMmQhaH5XV3pFPyVpMFNqcUdEbHBYXyUoPEBnK1ZKS3Rra1RjRSo3Tnx9REZfU3MxMig7WGNdKCNdaEQlMEpdbkwlbDsuaXRfXTFYWit1Uk9OJlYlMlRnbnI0NX1KfE5vLE5fRlBWOTx7TWNYIy9UQ08mSVJiejIueUQwWT1ATCEqZ0NLaTFb''@;'; put 'put ''WFMkUlE/eEtFSDBsVUNeKmMheiw9N0JAJnZkbHIvO1N6VEQoM3pERllRQXo5M3J1VFtFfixjSzJFWGY3Mn5TLk5TMGtINzBTdnAqLltAdlc5bT5ZP2llekZkOUd0YSRDUUNHJmE5SFZ8I3Q1cyFQMVkpX0U1XkpfdC8mXlBMKEthO2hhIXREYSZ9YFRuRXhjPF16dHdvZGx2MypxWXtNRG1BbmM5''@;'; put 'put ''PXxxNWo1dEk1Uy40V0E1dVZjOUpkUXBoYGJydzlPblohNC9WPFpqemQ8NjB6Y1MrZGxkQzsqbzVFSSxHLj5jJD1iNmJ1OWpJMSQkZmlqX21MKkFRViMkZ3VtQFFyKmhddU0jTF9XM2Fhe10+Ll9jJSo/R01jMEBhTXI6fjBITSEzeXRyX0osdUg/Z01zNTZXXlduUFdXWGtvWXRrTnUvTHE1fSJV''@;'; put 'put ''ZF8zMlYrcl0lI3luKl9XL3BGNUBCSUxeTEh8VjM2ciN7WTp9Z0MzYUBKUiVuK2tKYHoodEVbfnNkayt0T1RyO0g8cHRgKilGVVdVJT1fdkZeU3VRPUBLWC5pfWptRjtBdSwyYTFzX1t3ZlV3UW5Mc1tEfCYucUNdVy9Sbmd9Oj9mJWhOSEU2b1Q7SGw/KjdZbyUyK1p5NnFASVIsWiU1LEEhR29o''@;'; put 'put ''MX49KnBmXi58MENyQDc+KyIjd15fcS9Vekl8RXY3ODBANFNfXXZ3ayIpLEkoTD12IjtsWFE8Pyt1fExwKT9Nc2IhMl4lYiMmYzE2b0w0LDpxV2EhWCJGJUN+c3YrJUlVV1YifiFqZ34kPzE3Z2lGR0dCYXlpNz8kUDVxRF81Y2J6cntXO2RkMSp6QD4lWV9mfiFqJCZdfkx+T0o+NnNnXzp0eiln''@;'; put 'put ''Vyp1T1Y0PXZ0a1kjXz5QKjdvWXdAJXZiNGRHNXMzMVBtQyxMTD9jaDBgfF8xJEQyN2VMVF1OaGl5elNXMEJFOzY+OUN1c0dgfVB4fiUjSSYjN1ZjKnApJnh4M1kyeWJFPD85dlkxMTZmXmdHWEI2N2MlRGJYWUtFWTlWLGhTcW9SLmVefDZXfHRqb2NpezRkP1h9U2ZCeHBPYz4vdWdyWCh3fEBV''@;'; put 'put ''VFldPCJfYzJZJX4ob0UhVFJRKms2L3JoIT0yP284MH1nNilFYTNyaDZUb1gxal5vIU9NP341KDNvaFAyIV14QWFOU1BrP3V6VExnbnY0d01JanIpYnV1W0hPejl7dj1wRjF2eSZCSTFFNlAiWWIoKUZwXiNBTk1Ca1tqSXJTNFFbYSphcTFednVVP0lpNG5vU31uZVF8PyhUQENsfVRWUW1ESlp1''@;'; put 'put ''TWc5OWt6Yzk8UjdZeD1DSXshVmtddms2cmgkRShoYjE4IjV8S1ovMFRaW3JUZEliLm0zQUVGZTpPSnJUfkk0c0VqUUspKWsoUk8/SzFoMiVSfHEuUlVIdntEfE9eKjAuRW9FXj1taF9+SFRXUVFqW2RnYSZxQE1pY1Y1N1FZYkp6KFkheFdkV0V7ZHskP2Nocnw6JWFuRXR7PWJQe2dnTz1McjRU''@;'; put 'put ''eWc1NTl9O280ezFybUJ8c0V6Pi4qa05YcjdbZX1LcSYkSWNeVzxNXTgqPHhZIWtuaEJEdk0qTi80eUdxMlcmcmBGYVAxNlA3dD1Lbyh8QWNkelhRSygrNTciSE9kUHA8OjoyUikjXVlLSTQ3XjxRQDE6cmFfKDghPTQ/bkBQfmxdUkFTfX58Jj8qU3JhM08kMj9iP0ZJdGshTERffXgsVkU8Ok5o''@;'; put 'put ''WWpPc0hCPDRPTk4uYE9yMUAsWUVaYlBjamM8alRuPWhNSng6dW84QHpAcSUhY3IpKktXMXg5LGspZG9XISl9XzA4fTlXKUptemZRYkY5WCtUK3U5UCVCQ1h7T3l1dk88InxeVDVfP0JrTD9pPXI8W2dsdEJgaCY+KEViSF1rVysvPm1vXVZVOCQ1QHEmUEEpbTtDISVdekYyemNIM0VOTUVldjFU''@;'; put 'put ''PSpEcWh9YGA7M2hSYHc0K193MCwxOktOeU0qdTx2MlYzQS5+ckAia1NzYVY1IztFT0RoJEVAbXBlKS9ZL3coZ3wyTSFwfGZLWmtxISk2flRkeyMyQ3Z+TkVoVmlmM0J4XilnQDtxYzVwViU1VjNKSW9DenFuTjE0TCE8LlYkKkJGQ259eHo7VDxIOHxuMVNGLHdXJHokSCwsOFpsPk56YFlYaT9z''@;'; put 'put ''cFJsYSgoWzxUSyxvKmwsOHJVRjA7dyFQbFFjUm1MZENmZHFaTEFlcmA7MUBFLGxXbWVCdnMwKD46WHRSRT1SMX0iPFY+Nll7OnFoO0xyY283KmcuWSZzOWwoekliQyxuI3chNyx+ckgoazs2K3huPjRkcWBLOzlXViNVWCosZCRAZkZMbmhwVHlTMDk2W0ZrWiZKakJxKiJ7JHBOSyRYV0BlRVR5''@;'; put 'put ''I2c/VzhnKDUuOGFfLyFWVE88PEd+ZW95N2hre3BDWnxrJis5XildN0VqKkosc0pbOTJyPC4xRXM8fC9SQm15fGxGbDRWW1syeypLK1hyQmg5WCxKUT12IVBvJEN9K1Q0Ol1FR198bGVbRld5MjRpajxgeXAmSSV4Sk87fSZ8Y3VRJlJqOyUheilmIlFtM0ZxR29QQHo8cHBDZFkyISN8YyZya2o9''@;'; put 'put ''V2F9ZzhbZGx7aGtkYCN4ZFhRO217SD5MNFs5VCl7OGk6TUNWZXR7WjI5PSpibGMhPXcuaWF5NGJIOD5UUGg1WyNQalV9YUQmJXUyLHhFeCFuTXlqNGAsbFhSR0oiQXBOTHR0e0x4T2YwXSFjXlssYUxEMzJLZ3o8eStuLm9YVD9kOCZNSyhqY0NZZ1hsSChDZlI+fTxPeHY7VGNyVU4qNyM4VCgq''@;'; put 'put ''ITlAPDNlcU1IWHh4PDpZM2w1Sl1jPEsqUXMxISJVUUdgd0NGKl48dHZRO3dhMjxWMiZEan55UmM8U1BhVDF8L3FHel1IZW0kKj0zVn10aGRhaDtUWkQwcW4/bjtCIUdhaClqVWBsJSVEQl9kIWsoNDhjQCUjNTQ7eUs8VCRFSWY9RHR2b0piUXE8Z2spUmghN3s4KG4vNV84c1JeJHdxIy9fVnEo''@;'; put 'put ''Xk10IiE9eGYjN0IpWCUhRmIjMEN6U1s/TXk7Mz8zQzJJL1RXMytWbGwsR3pwJHVDd009Vm9VdVNmMnt3PCh6cG03biRDbTxZO0pKVDdhaUllQyZ4LyNNa3RXRjEiVGFkcyZaRSJlVV02Iy84KThIWVZ6M0NdeG40YDY5XWArUUhJW2ZSYzRuRUsuOFZQdCghUyZbdHtBM09aKmo1U1VPWU8rV3l1''@;'; put 'put ''e1Foe3haLHUxcUduN1VmXzJiJWR3SlAmOFAhQ1dTPDBOR0RXJDthVmpySjk8fH1HfDJ7czIsK2MwMitfcipYRTV8REtaQjxjTGYjZHJRTlNCXSo0c21GTCZxXXdrWTxHY1cpNjl1OmQlUiNrbiomMkV4S1BzY1R9dVlWeGN9alEwXzxAbU9+T3lES2tEajpyeFJvSDYyR0QvKC52eXtJbFMrL3ZN''@;'; put 'put ''bTN3QXNNTEBhM0leZkNUMn00djVyZSFtXSw7OHM0aihJaDF3a0lTZkVRRE1SWDRZRF1we3JPe0F4bSpfLyV0QlteOCZDUlJwUCFgTFBeOlJjd2U4SW1uZWFsRnNJe0ZiVFN3SHhWOSQ/YXswSlRlakU8dDN3VGN2PGMjYXYzekZrZiNvVn5yLm4hdTQoVCJIbTV1IkRCVzR9MkJETE55QnksYUhH''@;'; put 'put ''ZHN5MVZ1NngyXUVxIXdrXTxGO3lrPVlUWndjfDpOXltVVVR1TH1XbWImK0hEU2ZXNTk9YVYkeHt3O11pYGVCOmpnfmBQNjN8WyJWQilmYmsoaUgjKHQ3Zy91PmcrL3w/cXRraTVSPSlNQkA2ZDJCdTNhSzx2YkhKKCQmYTN8ckVkJUx9X1dJPUA6R192MmEjSyU+YDY/TC52QEdlTStvRWFnQjEh''@;'; put 'put ''b08oNEVTZU04PnZMQEVvXnUlc35qTHheRUB5PiM2WmdtYUZVJUpaSCVNbnJfOHVyQzF8XSs3OSxmLkV0S2RgOiRQZmRxUWBbVGxvNS83eWk3eSJhZWVNRTEpaHVXJVQ+cnM8QE1RPGRnSlZwRzFycykkamZlJFFJRCFVRnBkSlZjOlt4fV9CI3ZYcm9CVjVESz4wQjFfJCZwbE81TjlHazM6JHY+''@;'; put 'put ''e2F8MHNDVVB5VVZGSHBbejl5ZF0wMn5BNy91QTA3KmRmdWxkRiZdMWNddFFdQCFdTHJ4di9ULmcqQ15RPVYvUCRZNEtEYVFJInxsOjh7bn1KNHBYLn4jfmk7UCVWKFFOVVg0ezxjW1tvYFNaYWB1PmdHb3VHXS5ATHArej5oXiE0N3BdIzkuUGVKTz52ODFlY1RnMEA4Inc/JVN4R1pldTEzIkhZ''@;'; put 'put ''U2VgdCRMZTlzQ2chMk8uWUEiMGF5IkMzMlJNOWE1UjdsTkluXX5VUkNhcmo2NlEkTXhEQmN+JmFjRFZNS1hMKCQyejhvcCszKjFlPWQxdHxrYjdWekBXTHYiJHNxYVo5ci9SczJQQCJqWm55a2pgXmduOTp+M31ec0o4NUxHfWhHXjQpKDxKaUciRnAyfkMjLyRNfn0mQVsjJlIwYTxgWUh1bDBZ''@;'; put 'put ''Nm17L150THY2TzBAOTRXeGgkams1YTNAfltyaHFSLCNEeElRc11OcSh4VF5fU2FzdSxBODZbYmBmPl0jeCUuN0B1cHBmOSlESXJjPEJwakNXS2Q9JDhEaCRtfjJ1VV4/ITU2clo6emYqZH5UbSF3MF0ubGoleUNSRkI9N0xOQFZVX25mVWJWXW0kdl1EaD94YiRiZVU9OG1gXWs2MylmKSxdVmJX''@;'; put 'put ''cFhheHNwJFA9JGBEOXYldGdFKTBaLmFNcl9re157dDQyJWpKZC5sM0B5bDtUQTtrcnJ6MENMRiV8bERKc2BbNyNROmJkNUB9UyVUSGRQYC84NiV0bzJndEMid2FjM0NMRkxGTEZ1WTk6fDd+NzZbQWdQRGc5X1JTNTtXS1hpLz9pfG1xXSs/UiNgUCw5N2BBW29aeFlgeVIsX3pJZWVfYm8xXThP''@;'; put 'put ''WSxMZT9pNyxHPXs6dzc2PkV6K2xYWnlsOjUpOUBtWnRuM09vdDRpSWJKV1JRSSV5Zj1WamkhZ1pLdm4kTCtXOmMwOChSZG5Dez89L2VrM0BHNnlDWShrW3psSGZDeE5kczskJVc9XUdLMC9dOF8vbzNacGw4JEBudz53USVTOCFgPV9VKFl7Zy98a2VKNk02UyhJJDJvSDgzPiJuNz5gOjVeQCtn''@;'; put 'put ''WkhzdSxGO05SO2soV2lvKklZYTU2MGRYMDYlMGhDUDJhMl5yXSpkJWwjYlE/PDF1dEB6VDhiSl9IJWtmcWN8LiQkeTVQZXY0OUJCQG1MOXFaMm0wLGthMjNjNUViJCx7YWBtMlllPEdzMXUqans4YiRyZWI6Yz9EcHtPciNPVS8jL1s3Izk1bk0pJWpPPVd+OnIiPWwjQyh4anFXe2xnYVRpcEUq''@;'; put 'put ''Q1hOT3BVUUkpQGFrdiFoTHFdV193XlJGQDxtQjh0RkBrcF9JV3BKM2xgT2BYO2JpZ2JBYEwka3AuNWwxRHhfUXs1aCVdPGR2LjdgWyxiQ2Z7ZGk4Vix1PTA2fSopXUZ7USs2X0VJb11geVI9cSRFXT0hXkk1Pkg9fTo/XXJZVWlgOCZONjs3cDg7SnohMkI7fmo+UH1POUB5ZTFnX1Qva2s1VWFa''@;'; put 'put ''cTF4TEQyN2FRZkVldig4aDBCOFJyLC54PCUlbUZXYU83UnZ8IkVdW2QwN3Q/QlI2OjMrNGcobHhsLiFAITRbWWNCODxXK3o+Y0FmWmtsNHhZe1N3NH01N3RlUS5kODtFXXM+MSN1a3Q2dVVzMHJnZlteWjpSRTt8XTRtQ0w6NlskVXVAemQkcTU2TkJ5VUtRMHp6Pmx1Mno+IlR2XkBtUHw4fH5k''@;'; put 'put ''NThbN2FwUVtgeVE9JWQzKSZLKURLTi5jbG8uVCNkUiUkZzowUjpgN1NkeGU7JHUwcX1dMFI6YDdSZ2BkUD9xME02RTg1XVtRcVI6e1dkSEtNRns4RCsqI1ltLHtwYnZgX3I1bDNAOGEkLl9ka3RyQ2Nna3BFcCZZcUlaZVY4LzdOZGQkTDRzeSRGeTRsUDFncnRqZFNCTVVebU9tNjJSOmtlO1dH''@;'; put 'put ''SkUoJSppW1puYi5DODYkWiQla1RjZGpUMVk/Y25HMWg0RlBUbVVpRXNBZXIkanIhUDI3blo5NHAqdzc+PH1PJiNgfXU8MHEieUBJL216bz95ZFhoYlozPjdqZGNOPnkkNHdPdCFyKjNjPWdzO0wkVDl5RzVqRWRYYDdkLzcuNDVqRShnWEcjdk91N3hiR2RzR0RQInl8Ozk0alhdZCt1W2NIZTBY''@;'; put 'put ''VzFvWXFPRmZ8ZkVnbWE5NHdPLHU/ZlYmMmN0JXZQVWF+ZGRYLGQvN31PblpRPy46bjBKZSx1eUdqWkRRUm1BZXUqNGMvJDlgMDxfZlRtTmB8T15uYjFPLGVkRDhzXWVjLDpBZWUpLiNLVG51XnhFZU9Ganpaa31kYjZUZSpqSl41JCNGRjxMKHdVYjpEZSQ3dzxeWDkjZVhbdz42Rk5nY0A0NnUq''@;'; put 'put ''SGBtdDBXLGRMWjc2QG8pI0spTUp6US5tMHFdLDxvakkhWXBwMHBsd3w4ciIhQVB9ZFpQbExaN1VhTjdgN2ZSMU5IMFU9dTBYOCgqLjQ9XT52PG98YlN9PVlmNn1IYV43ITtHMmAsPGZPNy9nP3hsbjVtQ1okVDt4OW5sa104YlBhRiRPbTpyWG1BWko4VDVFNk1hcmU+eWlbaDVbcEBmfTd7ckla''@;'; put 'put ''SjhMWzZuJGoxOW9tJTdoXiojeUNGZV03LGQyVlY4OTJEK3hzb2hPMSIkMmBbOE9RXiU1ZWBTVHtEbDFsdClDa2k4PSV4TChscT5rN2ZKNmV7I01neWJ1M182Q1dGTXt0L3p5Ny5TQEx7dGwya29TaXw3V19COCo5SzhtOEwkP3pKNlJEMTQhNlpoVTtlM3opUGBsN1FhVGVPKTNadl07M0Q4SzhH''@;'; put 'put ''WGp7NVUvTXJIRT9EVy5EWzJzXVR6YFt4OV9xdV1sdnRIMD5PMU16TCRsO2RpIzdqaz8ueEgoQCVvOjo1YTg0fV9nWWQ4XyFOfXkmKlJ+ZHg0b3tXWjpsPmA8SCRlOyFDMTJKQUJMeFhgIiVTWmNQJGVseztuY1BxRUl4NzVEdk19O25oVXE3Z104PzA6aUpQaV8kP2RPO2M3K3VUMlB5L3pueUtJ''@;'; put 'put ''UCNoN2dsbnlDbzh8blQyfUldRnZBYnVJVlF2XW4wbWEiaF8kckooYUd2M3tUUXRsWTA1WTtdKFNZe2sxKFMuYU5MYmk3VmMqPUk/PTV2Wi45N0lyOTdCUnFnSXJBODIwJThAZkNkfHh5MGpYZDx3T3EsaEpBeT1uR3hCZXcjKzhyJDF3Xm9kTiJidnldfVFdV0tXOXxaMm01aDVecl12UWQkWyZl''@;'; put 'put ''WG12Sn5mOUdaY3ZwNGlJVXV0WHJsfkAiNzE9YXlKRk02MjsmSzYlKkRSdlM3JGRkQGZVWXtjJFlLVzk9T3FnU0gyYWguO25ubSwudCQlSDg/VGAhPV04dypaMXs3Wjg+M151MlA7VWZBel9AXz9GYEhoR14oOmtsVUFJZltabmF7KzR1UUdrPCF6WV8kTDMrTlhJYT83W0ZuZCRmVkhzeyVNRXBx''@;'; put 'put ''NSFVYnhtYHorfVA5SyhTekMpT300VHpKdGxIZmpHQiNoRXR9YFhwcTUhRm8uanFqImhfOFdFMmMkRD03YCpAPV0jZ2tqcTdhVWZXPWw3bThxJSJBWTohKjwwKEpLZ1ksOF8/fTskMyFqZUA/K0xdNSVkbSVOeE8xLCpdXzZuUHtfX0l3ZDZ3c2JkZyFCY2ZDJC5MVnM7VyxHVk5lR1pIYUhLfDht''@;'; put 'put ''Vk02eGV9eCI3Z0VeRVokdSU3MnVVMUp9ZEElQCE/fGszZltBYE42blJwSlFLSnEuVHNIZiUuUGArY2ckeGVUez9BOCMlWSsrI0tFKFM+OjQ1KDshT24zaFlZSVFPM25JdlQ5PzxYIV0xSWJyXiVMUmUkNGpYLHVpazNlLHV4RElIUU8zbklQfGZiZU9lT2VscFZRVX19PGxnPSEpNGB1eURuZyFw''@;'; put 'put ''OVtFMTlbYiQ5W3k7WC89ZSImc2lfdjRIQEZHZn50YXN0XltqbmFePzxsN19eLmBnVkpnOXdYNVYpcDEpIWdHdn5ffTwsYUd2QCUlOSU5VV9xZ2A1PVokej5uLHUiJjMwVyxJR0dmR1NSMkgob10mOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAm''@;'; put 'put ''JT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9d''@;'; put 'put ''bnAmJT5nbzkmOz9dbnAmJT5nbzkmO0xlX2ZvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11vOSY7Pmxibz05eFUqcyYlPmdGVyp7P10+MHw6ViNuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBv''@;'; put 'put ''LCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQ''@;'; put 'put ''PzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQIzBnLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyE2MkNAJmo/IW88ITtdMC9VI25qPykpc3Z8RV9KPVQjbmo/KSlz''@;'; put 'put ''dnxFbmc9ISUyMTAzPlczeSUhdk5UUEsvNyNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1U''@;'; put 'put ''I25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSktzdF5VOW1mOilzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8''@;'; put 'put ''RV9KPVQjbjY2QntfSj1UJF9fIz5Ue3k/N3tOdlpEekVNSllTd2lHKk12WkR6RU1KWVN3VjluPGguYixjXzUuLD1SWTEyc0ddZFBOdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHo4MEVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZNGVTd2lHKk12WkR6RU1KWVN3aUcqTXZa''@;'; put 'put ''RHpFTUpZU3dpR3BnKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUsqP108bDpuZyx9dTJZcDNSbXR1OG12dThteHU4bV1CMHI2WzJQIldOVylwfSE7LHtfXyNtfHFbJWI1eCE7S007Mz9VYmlnOVcqc3F0XjMze0dObTwlO18z''@;'; put 'put ''M2Bwa2Z8R0xNXU5YKm18cXN4ZVkqbHEvYnN3O18zM3tHNj9TVl1OWCpscS9ic3dHemVbYS43SUk5NWlFSWFAU1ZdTkFXXU5YKmxxL2IiMioxdXdnOVZZSj1jLHdaUnhCO3tUeUphfVB4fk9SZmkhJmlxKl13LkgyUFJmaSEmaXEqXXclZSFvcCF7XzQ1YWIjbzUuWjNZWCRQUmZpISZpcSpddy5I''@;'; put 'put ''MlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhVjV9LkAjKDRQZ2ovMl5kL0hRZS8xbWUvSTl0NCQ5fHJ8''@;'; put 'put ''dTZbd1tmaGllc2ZTSiNnUXhXcnReXS8kbzlRQl5fIyNJcltmaCV4ITtiNTJfJVFqJWVJbSMyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZnlsZyw8bWNlaXN8b1FdTyROIzs2dDQqZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQ''@;'; put 'put ''bWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4LCNqJShwPmB3LGB8b0tgfFhOYHxHUWB8WyM7YCRIKVFNIXxyI2dNOSVqJFBeSSNnTTlze308bFk7Lns9P2hnOXplWXJ0XkM4bVt9bXFbfW1RUHs4VzttOWJwaDg7ZzNdJGU4JVI7bTli''@;'; put 'put ''cGg4O2czXSRlJWUhb3Ahe180NWFiJGBJM3hVX0JlYCRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdKV08bChldT4lUFhuXUxYbkhNWG5YTVhuV1B1Pn5XL2lARE58XyNLUCVlISV7X18jNV1eLlN+''@;'; put 'put ''a1MhZzw5dXt9PHlIclsyc2lKZzleZWc5XmVsMiN4Nzcld0F5N09XaUBER2ZzKSpITSF7dXdQV2lAREdmcykqSE0hbjl5Pm0kcTw6UW5pbTEvUGVEflUzPEVvOmNQT1JbUWtOTiZbZyUrfVN3anJQI3twOjBhYmQhW2RbREdmcykqSE0he3V3UFdpQERHZnMpKkhNIXt1d1BXaUBER2ZzKVN9fGYh''@;'; put 'put ''SDYkX0RlPX1DZT1CRGU9RkRlPS9ETnxYL1NmfnRhc3ReYixZZU0hKHJ0XlF9Jm9MKzN4ITs1UDVWKXBddWklRmpndldtWGZ+X308Zns4XWM7IUhkZU5memlLJUErJCEjYFBydF5zKTtgLzhnYyQ0Ol02YFRhVD9AaWFbPyFhYmh5ZVhvOXtPKi5hO0lsaThOcVEmY2dbbTdnejhSOmprMm1rOVEr''@;'; put 'put ''V1o5NCEyTCRjMTElb1tAaVkzclVPM0MzMVFVMzola1sjLmZ5PDRqa2Z5ZVgqLjEwZVh8b1FdN3BRXXkhXS5BZXU0diVmODo4Qy9AIyg0UGdqLzJeZC9IUWUvMW1lL0k5dDQkOXxyIWpSTSlYaTh9LipITSF8ciNnVyMlailvYC5bOzxsXUhXVip7dHRpJXFrRV5fI1Q4NTNpcnU0aGt9MzZbMmZd''@;'; put 'put ''bFtJT3ZNZFtQJFVXOWdZZDgkYUAxJDg4TzU2a3A2LzAuLmw0KyJmUSxPbH4ke0NnIyMldFB7SV1qXUJyZzJ3VjlAdyhZaHYiKEwxZ1Q3SHN4PzFvZltSVlApPyFjPStMMTxmUiNEZltSeUVqJXRQUDk8bGdbO2BkZ1pWQ2hJcjU2dVFTNlo4S2dNZCwuW3pweTs9eSNrZCVARThqL3VReUxPZlYk''@;'; put 'put ''djlRemteRyR2OXd8eDsjMDtSSzt2O3sjOmgwfi8jXm1QJG05Mm1BcEo4MyZ0YUJgYz5wVUo5YF17bjVlN2ppJShKKXJ0XmlzaSUoSl8/XyNLRHJbfW1JPDxsdCFjZTdqc3x9PHR7cVszflNKZzkmaFhydF4+RChvOn4jeCE7PlE9NCZoaCElailvPzYmOSE7Ykp9X308T0JfLm8zYSkhZ1VsPSo8''@;'; put 'put ''bFh9fTxNdnFbVEYmOCE7RFJ7Mz9VSCghZ1ApXj9fI1hFXy5uS1dpTFBoMitwR2krJWJTXShFIVM2Ti5baENmOzM/VXhsaCVjdUhtQWtnfVhlTSFHdUNmPEtre18jYkVtZmlzfF1fI2N4NTNpciwoaWVHJDRWW2hnOW5pWXJ0Xk44bVs8S3JSfDgiN3JTIVZ7aV9SbF51SmsxcylRQ3tRUXpIbV8v''@;'; put 'put ''VSF0PFsxS2xfRDdJdHhsaWNGXzFjLFRSL3hVZmNGUjJdKl4/U2RWeTlWNldQdjk3NDA8LGdrTDxKKGolPTtQOzxsKEUxVip7NCsmbyE5PD88bCl4NFYqe3k0bVtmaC5oZzl8U3d7fTxvNSIpR0AlYzsuIyZKLHl7UFJHZkUpQCo8bDtFaXdjVH5qKUkxSWF2e1F9SURreWpEPUxTYD1KLDopSiwu''@;'; put 'put ''MDtSRDJiQzFJRGtvS2l9eUlVPDZNM2lVUHpJTjpWVnR5Wz1kOz9qUyhyUzsub2VCIzNaQUowc3xrIUdseXxZdSk7SkAlUipOQisqJTRvXkJgdnwvZFA/Tjt3bWpiPXJOZDM9Jk08OlthQjhVK1Y3TWoydykscUsuMWdqbGk8IU9eQ0wpMVBtcFJ3eThQc1QwIXBjWDxWN0xtNTpHJGNsRGd+K1ZW''@;'; put 'put ''SSgoUlY2Ti54aGo8ZWhAaV0qKVl6UXxfJGtuaW9LfTFXbUReIihsaG9LOyVzIyg4Oiw1Kiw5Vm1zVEkvQDBPNDlFYldnSksoWVNPRG9wRlZze01EIjszMXtse2llNVZfRTxSKnQ9cyNHdVp5UzYkUG1Td0tBYHtGIjt6TXo+eks8LzkqeWorVTQrMjYvWSQueTZnU2FVM2drK302PVlbKit7TCF0''@;'; put 'put ''cX1tanYqcHZeXWJfMXlsVmxDU2h2eF9fX3UudD11SitHckkucHc4OiwsKjtSandOLmZMRD17UlJSbngla3xEVnk8NFdsY0d4I2xtKGU9cSpWRkwxWHY8Mn5pVGlFb21NVlpWNzNlMGQ6SXJYNzp3VUsrOXNeVlg8N0YlQCQ/ZzMrTyVVPUFDRXY+T1tWWWs0SlZRTiFWI1J3Rj1PW01Pa1RIVE8p''@;'; put 'put ''R1FHI2JtOmw8JXg8S01fJW05dllbajhtYXJ+e3xqO0BLKFRnOSZlYFdkIl9PPTZnU3NHZjBmfGxHblQ6JFhJMmxgWFRlZ3EwOS83SnksIiFlYH0/YF5sMU4+QXl6KThvNm1iLlpuUT1QRmM9TDlnJU8ueko4ITdtUXxPbmEoSmBre0tqZz55c3lCUG43USklMmhGZ3M+bSQsbChpUGdXdjI7Vk1P''@;'; put 'put ''PWcuSG9iV3AzZCRtW2I8NDYzKTVLODUhfFsmfl9ZW2NaQl1WWkh0O0l9PGxFYHZmdmhadFowJiFANyxFPThhJF0kJlc9fTNPLGMpP09+WVE5WGRxODNQJHBHI3RvPmdJOTJFK3xCUH4sVmRWXnBiRjhTI2JqYzdjOmI4aSRLVHhlMW0wcWJ6NktoSWQ5dnxIOkdWallnNjJOS2RNNyldcE5eYTsx''@;'; put 'put ''PHdTRDVtNyl7JiFHZjxzNDRoPz8wbSRjZWJicXdfM3U9OmdHM2A5Ujw1YlRoN08oKVgrLCFhOFozbWAvNT5dI0RNMVFoRTgxOzpKKCRASFU3WTxxWWtYWkBtJV5mO3o+YiViP2pqOTpuQ3VsPDdqeHhKWTV0VH5kXWIhaCgqWz0jYiFoTENYRUJucGxJPHduPSwmNjZNQyY9Y114MVEucmp9V1FQ''@;'; put 'put ''PU0uQSYzIUtGQ198YlgrIixFe0VxSygxb0soWF8wbXY5bk0oLkNAMD5DJTckfEBKcUtQTSh7JTckcithXzU1aUk1aENpT0JXLGRWQl0kKz4hJD5lPVRKaUU1cWJfMW5xakhmdH1XVXlibmwvQEElWHNNKENAWHNtLC9se21fSSQ3TzFVXzhtMTNkOnZ9dzYuJWtbZDY5c3hzfGkuai41MWZQViE3''@;'; put 'put ''SV1yekR+U3deel08Q18+fDFvcVRQPSpAQ1FCeypkS1hWZ3Z9XTBPUE44RWR6Q3pDOS45Mm5bPzFaclZtTzNSOjJodCFjQE0oTmxBLnpqXm1QfDx6RWZ6eHYsTHJhbjRmMCFEPi45NyRsXk49cltGJmE/Li5APSomTU5IJkdlUD9meX0mZl5nbXcuV197SVdLQz5Wdyl3e2hsUk0mO0BIUllFJSxP''@;'; put 'put ''ZG4xZDZNQC4hW15iYH5LdVReJU5gfj9lLnQ+TSElIW9wZiQvSXxnbDdFeSVTX1QiZCpydCEvIVZuSSQ5ITdtLl1FeTtvMTxKQGcsJTJBVjx4K1A1cVMjY0BKMi5zW0siNW5JWVRvKEkkdyVCakIucjx4fHcjM1kpbWQ6Wz02bktdc1JvOF8mYlEhfl1KRHJka1hfRyZpW3tzeClXdXFKImpWVCho''@;'; put 'put ''NWFeI3IoOWpHZ3x3XzhwJEA3O2x6bWY7QUBVOGFvMGQ8bS5kOkJjIXd8MHlGaUdmKnA1eF1oPTdIK08oXX5KdkI+ZmA+c1RtcyxyODh9bDd0PV0wMylUZyJuQVtPKH1qezBScXc7SCZhR2k8dlFFM2RNKGt5ZWhFU3ZkOkA9RWhdSTVtU1BScS5UbXB2OiQseEp6NDRoXiNFTVtLLC5bJm9yVm03''@;'; put 'put ''cHhmVTlScW4ybj02VV1VaGVNKDN6QTcofUEjKn1+YTcsXmdIYDYySyhiaU8pLmx4LCtdTHpyUi48W0lvKCVARmcibnAyNkVpblFVKT4jYilJJT5HZ31rIm47QGVUYiR1fjk2QntlVD04RCtPK0QoVGd8d3hOJT4+UnNdYT56XU9QVDpJVlVsaW1iJHM+Rz1RaSUuOzEvOFZtNXVkMDZYZDp6JSVh''@;'; put 'put ''L11JbHQ+bntGMW5kN0oraV9zciRPLEwsJFhFeWhNKSVmZ3EzSitPeiRqJX5VK2ZrJChGQDUsUiM7ai4he2ZeI1M9NGV8MDk2IWFUc3UsJTIkai85NE0/fC5sR3tsMWJxM2AubENgJCVqR18hOzZxKG8zYik9XUw5Jkl2bDExQS4me2leR2YjYC5sR3oqNH5dLjwoVT99Z0dfITZKMl9yKGVRdVg9''@;'; put 'put ''LmAmLmx3ITdUKEpNJUw2bjwmUi9QMnw0bXhnX214R05eW2oqXnU9MH1Xc3QmYUc6JHJSQltBUjkmPTBnTkA5clk4KXJVITtSdjwsbGx5aGhgeilvM0NwPlFIPzQrbmRURXo8Kk1yKC4iM0Bhc3BiOkVlJSNhflNyMXxsYSE/fH5OMGRiNlVlVm0zKTsiVENjKjVrMUlaJDdxdCxRP3s6LmdmNlZI''@;'; put 'put ''fU9+Ti5Ec0hWMXg3dnZYLHRuSVphW0xVYGRwbDIxdFV+Tl9Kdl9EeW1aQT96ZyJ6ezFlKU00Vj1BMGlrfG03JCE5W15yQGclOytQP0ZjQV1II3IrWm5AWmFhYmJMeU46ZCk0aHpsQmRYb1okX2IlfHVzblJDT0QrXVZ1JU18VUNBUE4mOGFrZmBkK2UuXUskTGVhbmB5Vmcia0EuYnckMCM5e11p''@;'; put 'put ''X25QPHJRTn1NfU19TX1NfjVhMHklJUlCIzxlSGgmMFFOZTZlLzFHL1BpLEA/I28xXV5JMW1efXBiM2BdSnNAcXhyUSFqL3A4ITx6UD1+SkxVZWdoW3F4aCR+MCJSPiVdN34/d10vZVJ2Vm0mZFJ2Oy5rcmYsN257LEFpRyQ8UiF9WTM2PmMsN25BUkUobTNmKTx6MEpIUjt7alBtLE5oVWZQZCRQ''@;'; put 'put ''dGViWXZJe2R8XV0hXjJqMTUkcVpZbUwkP2dLcSZJSWhSdjc2W0o5JHAkT2lxaFE/VFB+WSF8UCNlPUQzNno3bXVVPS5aOFZ7UnZfNTZyZjAlQEJvX2k6OTZqPyl8MThKMDtMbTIkP21fNVUoe2A6alZuaV5sYEtxNGpFSSFnWXAzKSxtN21XPU47NzJvYDM+cz5PfXoyL3s0JH4wWVZYI3h7Kilu''@;'; put 'put ''Rjx4IkUyXjN2bXZuP0BTMjsxXkNSKFFDaXJoJnZzYGlpdiEzZm49Z1Q/S2ZkdWdbKTxsJF80TTtqWUovYWVeS11mRltxdypMU3wldC5sflZqTEAwflZqO0B2bT9zaEdgckZWcWJvTyVxL0pvfkUxS11UIy5NKz98Kmpycz1JeS5KOzB9KnwmQD1kbmM/ITRjKSIvZmdlcTdKTiR3KktdbWI+fTg3''@;'; put 'put ''e156O2ddSVF4eD0yI3xuKFswNjtWamQkbyh4c3w4MSQjaCNWUGg5fEZnMEBVKGt9cn54Xm9KWD1yfkNRTyN1cXJ4XSFeMjxRLH13K3NoRTgve089LGtjTWBdfmpHc1htNVFnTmMkN3hlRFhzSlklfFE/MSshaFtqcXNefTJfITY+fjEsMW1WPUZ7MGFoeWQpYVFNM2gkVzpfP21qSEorUUdwSl4k''@;'; put 'put ''UjNTazF3VSh7PjFyfmgxd1Uzc3I2WF9tanBEJWFaM2goVzplW21qcERtMWBWfSMqUXxLI3VoXn0vaVtUKEp+WTNBb0g9UlNmcDExK3BIZG5gbG8rcFA9SzJpa3RrdnB3TkV9Y1EiM2w8dT03cCpEIzlIODVPNTZWWUcuOCxAWjIzPTpoO0dwQlR5JCtwJkUjSU0yZVFxanxaR2IlXUo5cll2TkJw''@;'; put 'put ''VH1OZ1hTRDY6clZtRFUjTCREPFMiOnhfTn1NKU4xRGFLJVljXmAwOUZvfUpeVXE8Jk15NG0zRkB4U0B7fWFscn02KG1kMEYrXXhFJVgmcHhNQGUuMm1WfTFvfntTPUNvIj9pY2ltUXM1UWFUI3U+cnJDMU85bS5dQXlAJXRWUTksVS97Ym5GfS5QKitdR3V9KnxgKzc+cWhRaXh5fSoyPih+LlFT''@;'; put 'put ''KyZeYmlhW31hXysmaiVWLyxMamcuU3ZwJEVNNSlmP1N2dSxJTEBaZyUxYCRqN1ZKM3FHN0pvIUJbO0A0YnBRYmA6ajNfJFVmPT09IWExITdqd1tiJDswN3UwT2MlfHFTRV1mdX0pfTEzVShmVkk5cyx8JktlVjp4QjNFXm09Tm8hQFp1bDcucmh8MzojKUA0NnEsT2x8Xm0sL2xRMU1dI286Ok1X''@;'; put 'put ''ZyYrYVJdM1BZJXVhP2d7cm5mIz0pcS9KaSM7MG4kYC9kcm5mXlB0IS8wRFMvLncuVD1ZV19HNUtyd1UrX09bS0g6Tz0iTzMpT3olQGEsMm1geUJAS3V3XlFVdVEmJTkyJCU0LmE/YCpIXUFvbls3NClAPFhIdUAlLk0jLFt6YmkkJnYlcjxPWTdaZXlOYDIwWz03bi5wa29RW19SM195ZTVQNU8s''@;'; put 'put ''WVtqbmAjfHNVbj1PVT58bW9HMU8lMmd9eC5QO0AmLjUsSlFAfEF9YTY9cTgsW0hxVm4uW2R+QnRZdTRQKjVyc2xAVUZ5ejwxfEdnejJXMTRoeys5MnsxIzJ5JVlEcyUpekojKEdJU0dnImpEUT5mT1RAUi5yUisibmg6c3o8MjgvVFtdO3ZdWnxdMHV4SDpyVVkoNSRpMTNgKz04fTAySl0wUzxA''@;'; put 'put ''a0lhJF4jUSROJGgpSE14UVZtVDliMDg7Kmw8K0xbIi5gK2t9PzFbJnFOQnA2VEQrZ2QjPToyPF0ycThgZXx1PU8zZVQkTk1qN1REU08odFVuPU99eFUucjZiVSNWbnxaRWg8REtJX2k/TEUodjsyZ1poNWphLFJ3QGV3OzRqL3BFUGBbMFo3bj9nP10vZG4zIXhSOD56R2xGUVI7fUg7PUo5Q0l8''@;'; put 'put ''PCJ3JWJMZTRoJWIkN1JgcXNESUNQVls2LFE/MFNCUn1uYiQwXTgkLiN3MHt9eXNtVD11UVNlX2AsM208ZFEhNiRKUUBaZWJaXz1OYntkZyJqOmxzQCVvR1BJWFtkNGV1Mmw7OC9gKkBEQEMlSi9hPj5VdChAcCI1MGUxQHpWbVFdSTB0VUVmakckN35pJDclQHMiR3JQL1lQcjx0RFF9R2RnUDY3''@;'; put 'put ''aXMzZylCYl42IWtdRFFKZWU4UjpgPzVhK3VqLENZNGNpKm0wPjB9V017YzQiQylEKURUQEBiWDs1aGRvLiNEfjhtLl1kM04jTmh6bHxiS2AvaGImS2VQZT54Ujo/QUUzSDg5ZlU3UjdfdWtlUzMpQmNnfGdAdUdzdER+Tl4zbFtLUUEvUGU0Lk1yT2NubDFdZGIkJiYyWjFgJlo4YVRSOmIxPk84''@;'; put 'put ''cn1HWW84VFEmLjhkfGBONDRRLD83RTQoQmtvN3FaLExOWV00KD9ZUzp8Nyl4aTYqdWQzfSomanwzUXU1aTEzXXJeVkM4aGNtPTRiemxibyJiR3JtX2QpelZwSXU6KzNaW154N3VWbUBCV2FpdlksZz8/PyYuRjtodC9WfTtXQFhfVXQwYVllaEA0KFMjcTJIViF8YE5saFUufmNCWHxFV3BWYlt1''@;'; put 'put ''RShGeGElcGQ3LHVyYnloVVtRNTduRV1RWUZpIUQvUUQ8Pm5MMGIjblc2elFSUTlfd2pXXSJpQHsjaW5PYDJQQXBDbTA/YlFEeXVDdjlpb2x0UCVgKio5cmVaWjQ0dFpsLkZ6b24/eD9ZOXxlZXtZPFtvXlEsQH5DNGteIykpOXJBW1FAQVNdIyQqKFdbUjV0XUpWSEF3VmEod3pSTDomUWBuKTdy''@;'; put 'put ''RF5KXiQvKjIqRWx2TmFAYVtlTWZJb0JQPjl3dXV3KkN+OERqKXkqPG5jQi96eWtWNjBPTEhdcDlDaGBRc0QzQnl9fSFoI15NU15IOm4ycVA8dml6V1d+bmJOVmdqKS5eMG8rJCpfUFNFOn0pKTRCI3MsYkhyMyNbPSR3VF5JeWorZj5ZfTxUX0BWK1U7L2k1OiJNOT9de24rIjI9Z15gPUxnW1pM''@;'; put 'put ''b05bKTdjPUc9Sj5dTkpxVlVqczMsRVNmZF8iNGBWfFlYI2ZHQnJ2KHlxQEt7OjpIdSFwfTVkTm5+dUFVWEliPzpfM19GOERdUzllYERzMSVjRk0wMGZvNz5zZFEmUT1ZIz55MXRxO2hQQjZIWDw5VDtGXnsxSFM+ZXlRKUl2NVdhNlZCM25SInNxTEQyW2NObjs8QnUmWWZPa00yPyUrZTEwXUxe''@;'; put 'put ''SHRxd0wsN3lidiJVdH52SzRGUi89JTNXe3hIZUJRMWYkc1FfQTQuJXloW2VQQXpBYW1gTlp8V2JJVVE8X1RvOX5tZyZhL0NacjAsMUV7fCZGZldsXVBecGBDRE1XPC9QSWdKJV9faCJgQHpTS0pQKUxJUTlKfCQ+Rj50Rm1KN2csMihSKHl6OHFgW3dEbXp2Nm5WLFcjdCR3VXxCe2RWSyQ9M2dM''@;'; put 'put ''VzIpWno7PEc2NlkoXlE9b31uLD58V3IkVXgxb1tYdkIzUTBAXzJwbmAqZ1gyV11OVEs7cUxmezVGcSphTmp8UXB3PFcjQ2U1anFPM25ENzxPd2RCUURzVlJKdCkkYmVXQDFocVd1W05bbkh3fEIiSHNmKVFtRXhxQmY9Rj5MZURSNCwjN152Wz9OclZ8b3IidXtAPiM6Vk91QjJtSmRtJm1GViVu''@;'; put 'put ''YzN8fSMwLkhPUXdEQVJOUUVkKiZIT0JRKzhEWXE8OEsiUDgqPE13eHQiMkEqclsxQn5MQEtEajZlflkscmYrSS44Kn0kZ05YejVNPUwkM24lRyl3dHI5IVExb1ZXW0RqW0hvKHZRTCl8KXclL1FCODN2WFNFV3p9Y3NCNU1+S2hHKmBdfGxCYkp5QVArUGE+ZSVyZHNrQS9wKSh1TXVEdU9fM2hO''@;'; put 'put ''Jis1MGIqInZRTzU+W0V0Lm5nP256Wi8oMSt4aCxGclhuckt0UShMe3xzfWZbR2pGXSQ6SVs5TXgiOXh9YHg1dmlOSWBOQS5ifktrXjdKQFhvPi9PXlVqcUYlJHBTRCxGeFI7Jjk3Ok4pPW8+aFMzJCpZSTNFTEJbRCl7K09Ee2VUI21LSzQrMn1xdzRNOGJjPzpROWRaXmw3eikuPFZtaFlYWD9A''@;'; put 'put ''VW1PTUdTa0I0a0tpbzJqRDo8dEIlOFdPP2s9QkldPjpHU2Q9ZWhqXkJpZUduI1cwJTZCdzRCMiosTUZKdEVoX1RyKDgvbnJlaDMsM0Q1XzNmUlEjTnA1VyNdIkpWPWEhezdqTEMxMkBRbGJ7JHlUXkM6PnRsKmgheihON21FQyRtc0MxKk5dOFluRH53fDJHTVddITphIVV4P0g4QTdsNXNGUFlJ''@;'; put 'put ''b1lePns1aCtkQyFJI0F7IVpfRzVSV0JZfHFfYDQ0fClyZ0tAenRba30ibX5gKyRWfF9ZVVMiSDd9Rj13Mz5BSl9MWno8SUB1Uy9FOVozYiopTVJjY20yWi5NNmRhaGA+NEhMWkcsSU80RD0/PkZlNjtuPH16bT9qKyJlX14scnwwMl9SP3FwRnlwJEtvdW9benBwMEd8RkQlM0RJKkVFZjdxbXBt''@;'; put 'put ''MW9bZVlbcUc/M1E1LmM9VC9PVyJ2LGAoWysmbit6VlNuV3ppSlgmX1pSOCY8d3JtdndfIXZzUEN1b1YjPCY0b1Z2X1FaZFtPOVdFI0pSP1sqQFNRT0YvXz0mMypCWnp0V2EyTG00IWglal1oJT50b1Z0X2JJRCIhNiJzLGB4WzQ5cnN4fCV0fD0xUnYuJEt3VVEpOm8jPTd2dkk1aWozK1QyLjZy''@;'; put 'put ''NEtHU2dGNjx3bXd8QSN+VWw9SV81fTdeRy8rM29Wcl9jMWNbdXBhI31qYnl0SiV1ZUttVmArKCFCUV4uOjsiVUpdVSswMmxWdCF3Xm9tK24iPCNwIz12TmJUWW1IIyMle0UwIStgKk1YPGtnNHBrPkldfCNHdG9bJjhZLCRPcCklb29KOD0jb2FUWW1vTW08UiZYfntTSTRSQyhoZjs4e0pCT3su''@;'; put 'put ''QmRqIityNTsqWTNbK2FNTEM8UjMrPmp5c3ZTQSthLiRaRmpALE8kMHgrJF8yeG9odWJKYDw8a0xTfkIsYGxbPmI5TV9VMUs7cXBGOio0IU9vfEN4WyouJjM/OkpvPm5bVltuaWQvbzkoJUsqSXNNSUtOQFQjPlAwLiYzVio7Q3U1XiR4KmdiSE07PmdGVT5uM0dScyFybSo0REdFb0w0V1QxYFFQ''@;'; put 'put ''OkZuMm9WLnw3YUw0aFNbcXdgbmtVVyFqLGB9QEtue0MieUp3LE0pfE5FTDR8UVtxb2BvW1RXP2csYDEoJUs/fTZtYDBUbWlgIXZUVyplLGA4QDQ5bXNsN3hbQF5Lbm1zQTZ6RF1yWS5XKSpIUj9BalQ5WyVbV0cvInpvVjZ8XWxLNG9OW3FVYGA2U1czb1txRk1MdlVRW24oQWl6Mnx9ej1xaEcj''@;'; put 'put ''XjBvMEQoOjxGcVIzW1Y+b1ttWk0qbitHKlZRaFhAaV5PKF5nRmNXMy5wJm9XfWBWPlU0VE1LbndILHxfTjBbaX5JanpbJHxHfE80bVRtV3RtS253SHIoeF5SJU8uJk1YPDVOIV1ZWzpWJDgjJmcpciFZZzM8S3dJQypNJXM5eltxO3MjPW9WJHNZeVtxYC4qeTY8Ymc5fWFHRy9FPVY+Ln1yREcv''@;'; put 'put ''fDxVaC59ISJhKyYzQzN1TCtgNXkpRlB3cmdDdSoqL19GLz88VWgyc3IvLGBHQD5ianMrLldDeEowPDlGcUEsR2JmM3BsRH1rMiF3altxY30rSkkvRnlvVnZ8fEdJL0B4b1ZpNyFaQiJWfmUyeCopXk83YSt6dXlbQV5oeWJ4W3F8X29bTjRvOW9WTH42bXlbVXZ5c3gqTTV+Q3ZKWyF2W1txY0dD''@;'; put 'put ''I0xUemY2aGg8RnB7QF9LcSxIL2E7Vj54czo4LGAmfTFNels9JHpbY3wvZTtPfUZvXT5iWVdrUnNXVmhtJnh8YCVGL0F4b1ZGRHpbR3RSK0pPfXNMKGxWJSY3UlIjcjZvUkB5ai98a2lkK0goNWU+NV4wYTMrWntGL1RnYGFXbXw/UCsqVD1tR3g4YGMkdjEoPCU/M1FZV2BPLGB4fmU2Ri96d3Am''@;'; put 'put ''SVJ6SzUiW0E0fSQwRi9Ud3Ama3x8R0o0QEZbcSlfTXYlQjNFJSM7cUYvMnZvVmh8YT1JNDdFW3E5XyF2TCZYY0N6RzdqNktFSX1lQnpbWF0/LmVzUjMsYEl7R3x6US9NdmxGIzcreEp5O3laZCohKTB8ITBiJmsiOVYmYHlbSXxSK0kvfX5FfVthYjB9SyVhJFZaYnojfXZQPDhOPlNyKnZmWkZ3''@;'; put 'put ''LGpfMUVBZnx+Q30mSChoOX1KNkxjIX5CXTtjYH4zXyROfXNjfDxaUlNqKFR4NjJAXzUwZnBnRmAub1s7W0QwNWBRJEFFPXQweU1UX187PURnVThvJGtbQX1kRyhoOH1+QzRGWkwiflczL0tkYGx1UnFbfntgW0t9czxoW35IP3F7VjVgZVt+Rz9DSHMoWnxIWUF0QElxVypUWVZLNmxHT3tZSjhS''@;'; put 'put ''WV1GMzBweC5YRU4oKGBrXm0xKnZWY3Z3ZE0jc2V+by9uSXtzdl8qdXQoNn0zNEc3dHA/UWRbI0NxRlt+fj5nTjpxLmNHaEZ+NllueGo8blMvWWJSIixndEw5KXlJTkl9VkU7SWAhJml9Lk4zZUV4cTV8eVlhPF91ekY/LE1ROTpxcUJudHhiY1ZlKUgkfjpeZn1LIz9RfHNQfmI8MFtfc3Z8bCF1''@;'; put 'put ''KD5+Il9+U3NXbVNBIi5+KX1WfWc5Kj57c3N8aHs1XVE5JH1xP2EjdSh0KD1+WntAZHRXXX5LfSxJNEYkfjo/RWh9cyh9fHc0RiJzVHwmSFdMXX4+XzVdRzdfc258Q0hpbiN+dygwP2NafSk/b2J2TS89fjhfbkk0fVk/eTN0KCt+LmBdQkZ+JnVneExfR2YlNT9ua0VFditDSFhXQEIiT0RSYlhj''@;'; put 'put ''I2FSI3ssZ0loSStTR2t1VSp9W1RsVFdWUDlQK0BuejNvNUR4YWtOOiZVSVsjZnxJK091TnZSP2RuPz08PSlCRCUzL0xHeUVKNTI6YnBCUEx7MXJLMFU7XjNYMUZXVEMsWyhBX113bFRNNzkxW3RxRlplckVpdHUoQH5OI11dR3MjPVRoM2dtJk1HO3FxSj1xVn09fiNgc3BUaF48Snx6QnlyLnR0''@;'; put 'put ''Vzl+ZVtwcDZsSjNFVDQweis1ZVMzbVQ9KV14NXJLblUxVzRZOU1VPW1pcjYuPDF6PjRlc21tVih2c1dXaUBEP2Nfbz0kOWd4bVA9V0AhMCVrNFhmeHFFfHd5Sm12Ji8zcCglNVtFb3QpJW99fmN0WXpdVCloKz5+fk8zWFE0PH0yeiQqUWpfKH5RW0VvYSVLfGteWnMrfk9beztsVi5TKWhxflAu''@;'; put 'put ''ODV7fjVPQH50YE9qVzQ0fSQxNEY/c2BzVFV2Z2h+Q0h4KWNgRXZaK1BJQEsjZzpxXj5lc1t8MnRzflNPTExXfHIoL1Z8NHRbJXlzfjtfY240ckhWfi4kTlt8UEBoV30zTldbfExATDQ7VXUoKHNKXnp5WnJXNDszJE5yW0oiQHwxaXJzTzw/c3l7a0k2Vl1YXy4uRilgXil7fVUhKHNHXkcvWXJo''@;'; put 'put ''bjszc0pyW2F2QHxiaXN+SDxLTGhyakJzW3g6e31NIVcoJXtmbj0zdShAfF1eZF8+My8mYCsvNjlWKmJlTUFNeVdpdT9ve0dINEw3YU9uengkSDdhT354SUxKVks2JDRleCl4eHQ6KnN4InZ7THQ/K34uRnYiQnIqSF9fQCgwZH1HQytfc2B+XktNe25JNkZTYWgpIl8+KDBkLkc/dD1zVUNLNm1B''@;'; put 'put ''V3hmd1lPPn4vXzspWUY8KCF+SUZxImpsM1sockZtUyghfkVtYnZbfjFBT2NyYTNMUyhLVks2XyhreEt2bklaPzdLQSJlQUk3Vk5OeGcoeUtHOiRXXT9lP2F2Wl1aU1ddYX43bnBMZkdhIlVDV3RAT3Z1KX1HNTB2ekYzNkV+bCJzOkQmVXRkelBEU0FLVntKLH5HN1N8Rk9mRyxuYjNaeFNhfmss''@;'; put 'put ''KipDKTF9Pz8xaDhwam45b3tyLGUkekRKfGVnPn55P19aST9vMXwxYFNgbHUufkcrfCppZnM9V1s5cSUyJEZed29EUm1rRHJyai5HWUdFXVQhcXE3RUB6TDMmQEhILmZJYjU0bkd2VClzPzw6P1B3XWV2Y1NhUns1KiVTKktHOnVPX183cSMjcyM1Tks2OD9gX1Rle2RGRVNhQX49PzxYbHk+LmIy''@;'; put 'put ''KChXdmtKKyZkZTlIcThrXU8mWFNZI3lUJktvZ2t+K3EvSjIzVHImbCgxY0pNdztKbj5icW1aZH1WXjsrIjVOISE0NTk3fSxbQiZFQjBUdmJTYSMrIUw4XjRdJm8ldSxLTHJ3KU92WjNNWE0uRz5xX30sLjljdCJrTytzVTRyZCkhSDRdI0JyPkJMfHIzQG8+alNnREQpbTcsdlNxQXtgW1YuQXQy''@;'; put 'put ''fT5JU18ie3hFOnxRRTsydXZhc1Z5WHNxVEByciRTOUVwUl5Gb1ozWz1bIz42VjcubEIuQVY9am9KUGElbz4jeG1LZV95dDZfcT9maDZXdmB6SGlNfl1FXTFZS1plaE04O25bSClmNkhJMUtWXTErJGJgI2Ngc058ZnE8WG1CdTNda0lzR2dLc3BgQHgzVDo/Z0ZnSXsianU9SCZSeHQ9fFtkM30q''@;'; put 'put ''QHpIOlIsYj8rLmZ9OlRRc19HKzVBVTJefntxWkh7Kmk2YTVhMm0/NzEsdSRfO3EsNWhEOF0hNWFgWl4/fWE7ITMjMWo3YXlaQFlxPjcpfWE+UCw5TmVxLFM4TzxlVGdUPioxPjwuWH0sPEJ9Y15fU0dvc0AxIy9Kdn0jcGhmJU86M08oXzcmS20sSmxHaWowL3tYeVBRUSY0VVQyZlY8Kj17ZzYl''@;'; put 'put ''Z1tqUDk4WD1VPy4vXSZpTDAjYFd7ZHJXX3dtMDtwODk9UStWOFkxL2xwL2hvYHlBOjZAXj1kZ2BtWl56aEJgJWU0UHJzOHAmXXpsKyMyZ1UrRWA3bnQ2QyE7ME44MSxbM1ZWe2JMeGZJbSx2MXlkaVkkKFZjc0hMeU9aMDExSWN2TFJQflJGVjpZZUFTfXVOLnUhIjFiQz9rM1BiamthM0V3XndJ''@;'; put 'put ''OzooKlRKYn1PVCZJLEVLNmN0bXhoeXg3YmNvVDpLJH4+VGdkdCNLfGcibUtkN01oSWxaJlQiWzdpPUIqbzdbNC4rTnAqbmxfQ3VvUihUTWltQn5BeVdDeXVpNEkseWM0K091dTQ0PldOSFFwXm4jYHcpNS5BeD8uXndNdEo3MXRiWiRNOkNUdGdRQFZUN1NHU3VqVWlXUXQ7fjNAaDZ9czx9TDBB''@;'; put 'put ''dD9+WGBtYlc0bX49K3FQe35XfnV6bkk5fmhANXllQ0ZkZXo9VksqUElyfDd+Ol5feHFXW358fUUlOnZ8cyl+MH5IfTBbP1E/fnF+P31JYFpTQXRLTkZkfjloRjAubVdfYkU8KFE1M2c0MlVRUWp+N3FLXTVjPzVKYiUzWUdnRnc/bFZxNGokOnZ1KFEsTGNBIn1+O34lK2R5clVLNnNyPz90QCpO''@;'; put 'put ''TFU4N1JJK09TQjdpUFh4dHxoPnE1eSo+YUV3T35lU3FYNU83bXEiInsoa19jKnkxQyIyX0pZMVdlKn1SaXNXcV50WzdsQnJxfD4zQ0c6OUZ+X2hBKEtHOlFjV3g6dj5YKTVTYVV0XlFRS0pYNFIwKXpXVXw2PmNoMVdNYj9qVyZ5MVhEQ0QjR0xpaUFJTSthIVNxRldSak4wQXBFcXBdQ30+dUcq''@;'; put 'put ''aEM1blg4RHdfLHVicUR2UCJheXA0WT5oSSR+TEwlRlNYdiZFTjUzUDRWST9+an0yTDRGJX5QQGJzfXMsfWh5YGV9flJ+KDxqX19zTndoPmQwOHd8MXt+UGRYUGwwJi44SWtoNHFoaylLXj4pVXFMfUlmJFE9Sm1vIWlqVWxdRERscS9gX11yaVUmRWAzS0pZKX5FdFtZKX5Ffk57cz5eREBaTHV3''@;'; put 'put ''QHNzRmNeZztJMyolcl9XdlIzKls5aXwuWlZYY28rQF49S29VMixeMXl3KT5lI2wpan18WGU9fTxOcUsoR1ZSXyJYIjtFMVFTLG1aJjoybDpGeiJNeGRQQnZ0LjtrVU0+aUxrMGFBIUlpSGNAbjM8JkV9alVYdHVVcUhxcTtfazAyLitJMSFRPG1PQFNZY0ltIlNFIUt8cHZ5XjFRJXFRbj17aHZ3''@;'; put 'put ''cUxSeG99PjJVWHRnZi4qSjJkTC5iejksJnJrSzZrOiQqNyRKcWxeX1dwMChRP1YyZEhmMWIoWkEhbnNoS2l6UV93MypNazBBeTxJMT5ya0txL2EuSl1UY005QUpENyh6V2BgYHV6ZTFCLjxFMU8iP20jfi59eHk7YXlyeldlNU5xX1tyKHJzSmwkOSpSYGBPKCJ+aCFffngrdjBjfXsyQCt3Yjo8''@;'; put 'put ''LzI7VVNhTEFqeCNRM3srLnwzaENSX3JHQD90Q0dwSjxjMF1Nemlnck51T1IuT11KN1JNVzRuPHtOKGhwVF8qWVEhM095eiZ1LCZKcVJeIn46PEoydmpqa0N9eUREe15PX18vfitSJH58a2pNSDxGIXZeNTFIcENtQUZMUit4eXgyaW82SUQ8IUZtOix+anRpM0k6OiFZeWpacmQsNllNIXx1V2wr''@;'; put 'put ''R1dmTTpWVnQpZHZOTGd9YSM5fkFjeDpIfjRqSWN2e1Z7Mz5MVjgkVkJzVz0uRk9BfWApUzQoYVFxVjUyTDE/W0NtfERBOH0sT3pGP2NjK3p2UWRfPmowXX15ekw0Z2VyODh9Mnp4azJbMWUrfWhhZ1djeEovTEM0eSEvMFJ6XyM4WVd3O3VqSmBSbWJXKT9DMF98eyxtc2BuRmNtUUMsPkBpZkB9''@;'; put 'put ''YHdnKExUbjF1fkFbJWh8TiYseUByPGB9ejJQKDhuN1RYPEsjUH4kXTM+VW9uLlUpYSNHfit6UChHWV87YyMoVXlAUUZvXzJ2VnxFajV9RG8mflB0byh0aWlfbDVeayVgUVpWfCQ1UTQpTWduV3ZtYi98aEBpfjFjUFdAfTkyPHwkTnZ+S1hQVylJekZqTSx2Lls+VFE/YDIzX0J5fH1YQjZoXmhs''@;'; put 'put ''MXE3bm9Xe0Z5bFs1KVt9SSJmflBjKH52cWBzdUlNL3pbUnlufEZAYig9VDo5UXBGNylecHk3fHB1OH0+PWZuajROe3NXOFthUGl9NCglPjU4N1RDRE0vWXtvQiV9WUdjc3BjMEYmXnpFVWBRWnx9VVhSV2dqJD4pRz0yK2BUdyp9SUVJTFljZm5dRDwyP3V6a2ZgOzg3fWw/Uih9Qzo5VWQ3NUsv''@;'; put 'put ''JUteYF12Kn1rcmc9Nn1OX1E0OnVfZXoiL2lwWzkye3xtO3xzR1FNL15bUnlHfkNvPTk1ZTc1Uy8lS35gbCsxfjliZz07Py49I3NFSyNoXXBUeEI0OW0vW04yd35Qczo5TiYoVTF+XTQ9OWpnNzV7dG9WfFsuRnd8Z2ghPkM4Tnszfndjaig9SC5Ra0dmbmNGVzR4KVpTLnx5NVkodWdfOyVAaEtw''@;'; put 'put ''YGleNn0uY2Z+TD9nKHd2OW1oflY9QmFRKUtQXz4jSXVfO0VCfl0/PX5Qbn1deTpoS1R9eTVrczBMS0xhSnhbVUguQyh5OW0kfXcsR2M2fFdEQn5wKVcoYkgkPkZ6VzR+KVpTcF9KKyF9a2k9OW1uc3BNLnBTeV8hdkN+VVgkc0xBZz1ve3ZzVDREel9ldUI0KnAvZVRRP01KVHxsZThoMVdeO2VK''@;'; put 'put ''c3AsXlFGOnxGa2Z+OCtlVzlbUFF5flFdRWNNdEJhXn4sWjVoKVljX0FdWlNdfjtLLzlFTn1dQ3koVV97MnZffWh9aF9rSGx1IisyO24oPF56VW9+bXA5aHkvL2lNXSlKa3wjOmVfMEQoaC59LCkofXAhUVdMUkpjRF1zUitzQz83VGQsfmldfVZ9b1dCbUwvWTQrN199Nl83Plo7WiMwX1pDN34i''@;'; put 'put ''dVtYVF1kZSl9byFkfmljYytxU0t2RGAjJFIoajJGNy4+L0MqfF90L1E5eUEiR0BzeCV8K0xtc2FEQDkuX14pOX02Yzp2QFojJG8pb0ZCYG8xJX5fI3Rge357dHlJSzZLdSEqK0RtZl9mKlM3UkRVZCwrMF1qbE1uPF9IYyE/OGEpYkIyaXcxMX5vfE1GKERPOldwaTg3cGxRbFF6ZWA4TiM5WGpX''@;'; put 'put ''TX1zXykwNUZCbVRefWNtNDZRcGpBZXg3LDdVQ0g2WWM+YCI6YjYsI15vUWdydGtYUnZoWXNwOWc6SUloV0IsSz5lVWZuYC9jL215ZXVnZ3wxZy9tOHRvb0RKLFBpZjRwKnU1dTkudjV5QzZOQTF5OyE6PnkraH5FRF51c3k5NXR9N0lwcVRJUH5ZL10sN1FHWWN4X0EkbHhAeV9IYXV1dExeOGc+''@;'; put 'put ''KDZuV0I6P2JlZTc6JXc+eSN4N0BTXmVMNnUjVVZJN2dDJC5HOjA+MStzaEtROGdWcCQ1MGRoTSI6eUp3MEtUKCNhcCk5QmUubXx0KV0jYnpTdGwxWUdYdjR6KWc/Nm5TKFZnamM0ckpJL3ouN05kbkVvXSokJSVEZX1QfSpTPT1MbjR6NDBnLHVDWDhbLk93K2greTVxJHpAamNuQ3FYWlFaX0NR''@;'; put 'put ''JlFpQmJNaz9ZLkZ7WUo2VSVPVzlPMUxgU1FgWFhhbnNsVVFJRV1gWzJlOlddK0hlNi82aGVGUnhMdSs0aiVZRUh1IUQmcG1sWC8yQG1wUyEmSSFmX3k1WSJkUnZtLEVdWltUWkAjLlJ0bEkheDd5JiVAKWMzMDFVQmR9N0Y2VlBSYnQpcClvWHZ4N3RdQTFAZERJOXNKKGFoXTRZPChRLls9cSJh''@;'; put 'put ''dTE+Ki87ems6L3Q2QGxMYWg5cC47XUo6fF4yN1RxPigvNnkvXiJUOCw+MShSUFdAUm5FJnc3ZGs7KUB8ZEw5QnI3a11PMmd8ZCVJI3RSNV86X0lvOi90aTJVYVk5XVJBOyNldH0kcXVhd3A+KjE+KjZHOnwmVj10LFsmdmE4dFI1ZDo4PHJxSjk9SVU3JXk+Xzk2aEwzYnBjTDZiOT4qY2klYkNQ''@;'; put 'put ''JWRnUT1VNSk0aEZQMyxEZyFfdDZtUytkSjhoMEYrSTRzeXc+diFEMVE9T19TYTEkQ0U9bTkzWm0jViVkd0QmNXwlW1J+ZCpTbEwvazIvKCpHZS5kT115alk8JFRlRm5IJlsyUytkUy5sTC9rWkQ5MCQ4Y0xjNyRnSU9YLCNTYTgqSGhQQEw7IXw1bjQlZENlX1NBVW83XzIhRW4zLGEhdGEoZDMx''@;'; put 'put ''UVg6MSVCO3MmeEhVYU9lVD9URjl0UzZOKFswKjZ5c1R7eVFHOm4lMFVdIV1KQmVnIWZ8dH1oRDozSl5sVlFmWyxvXTIhaEoqI1ghVmZXQl9KVWFySG5KWUtROV53ImRSdkAjZFZSeWhNejpGM2dFQEIpXVpsZl1ELE54X3coREBPISU+PXU0JUxpQjUpN2RVOTV0e18vTyVPZ1AmZC83OHo0TFRj''@;'; put 'put ''JHkhMiZqNmg5QStQU2Jtc24kXjFRPUkrUj05NCRqUEQhN3VdVWVpc01kIVszZkR+PElhdUR1c099YyFkRSl6OWIqWlV3NHAqcSI9d1B4IjtiT10jXTdoODFuZzgpMHw5ezg/ZjZqTVZtZVNKRWZgUTVqTjhCO1s3Qjh4X08yQSExdEI4a1NGXn03UmJIYTVFK3gjYWhrdTB0NWd2Y15fLzgpW2hn''@;'; put 'put ''IWFCYFNvSGdJfTljZEVkX2hEOEROQHBEKzg/TkhVNSU1bkpWUSolI0hUMjghcWcxVUBnWzxiPTBqViQiXVc4W0pSayJqViRLOHYiSjh4O0FeT0VqY00oOzd3WDxXVSVAPWFuXyR7aTJjRV1IPWUufC5GZDU4NlUyTnZsTGJuXW9KS0AxPVtkaktrTWl4bm1sRF94Qzg2JWBRZ2tfQVZAWDtwMUUq''@;'; put 'put ''Y2Q8Tj5CUkpSazIxW1lTKlMkXWpfUnpWflZFMElMK3NJc1AvNTpibjBsdSphREtONSUuSDUvW01oQm1CQEl8NC92fHA4fEBJfDQwYTJGQmMmIkVzNVFMOGNHYzdySTs3dmxEaVRjNWQlWi9talpAJC43aDI3dH5McEombXBsWnt2RCZGcVJvKTp4a0hSLElRN3U8RWsrOTomQCRuW1FuY2Q2YHZG''@;'; put 'put ''aVg3Q1g4W0FtTFAiNzlJSD0xLEpPQGMqI200em5qK21CVGxAYzF0YXVVdWpGTHpGZj5jPWdZLDc+Z2JaX0VJLyQ0amNQN3VBQF1Za3BIOi43TDsmVDFtOTpWRXVJanJYOXJJZnNYTj9FXm1wbGJjRHlLUD4zVGVEVyF9XjVwSkY8OyEhdC5ddD57bXtPaT5nYl1aRVBIaUU5YiQ1JFtQKFlBZW40''@;'; put 'put ''fnBCSShKQTgjeHhReXguZCJCSCRSUz4zezE7PVtkcz5meW5bfGROaUZLeV4lRUp5WzJXX2FvLiN2PW45P1V+aV5gdHFtfXtkIXR6VT5te09ie24yMXJ1XU43d21fR0E7WmNzOy9vSDBVS3VdR3M/S25URFBLWF5td2d1cG1sZSVQYGwlSm8/T3dMc3hpNmBLVnB+RXtdJlk6RXc7JCxsPWV3UEgx''@;'; put 'put ''SShESWFJSHN8Jko5bXJwMk5SOH5XLlZPSGpPSHB4T0AoMDZSdn5TTkw4WFhFQHU8dmwvKEh9S084K1JfRikxYVYmWSUjIjFiQ1JyV206LG00W2VaOWdZb153dz54aE1SOlE1RCtrXmwlSl1GJT4yZTB+TzE0MT0iLHMhX1UyNj9se2lFXTBtNmh6bDglKERdbF9RZmhHPUplOj1DSWlCbSw/Z0Jv''@;'; put 'put ''Q1FCa3V8N0cmRUFDcyx3JTM+TyFnV1VfUSs0YUlRfTwkLmRfXjtYJi9SYnhiQiRYK1NUNU59UnY+cm0sdnR+PyVDPShTI29SPFRbZGh0L11ibkZJP2dVLlhhU0o2Y19pR3s0cngpTDs3bmlMQm1NZjNDfFtzfWtleilTOWphSENWSWBVcVM9JGtrfDpdZltpIy4uKz0lIUtuantPUUZxZUUpS3Up''@;'; put 'put ''XWIlKEAxQEc4RmlIP05SMV1KUU8jcGp8NypTeDQsNXBqcV1xbEZYMF4oYU43QWVtTGwyeDB8UXdMJj9CO3gzSDhVYXRiK2RGWDFnTD1TI3dPQy5bU0Q7bE1gYzwoOWxWeHEwRSpjZC9ZU3BAYWhNSmxeI156KSIydFRwQGEkZjNgWmwlJDpndWw8KF1kZG8oTzo9MGZMfnZ2X0FtTFU3eW8mXT9l''@;'; put 'put ''Qjg8VzpRfTw1YTk3akZyeiNMe3QqIzlQfU9ySGhrTHJXdGlYJjVbRCJHI1toVztyYn15eXhxeXdRRWRlbmxjJFA9MT0wfSIwRVByPnJYQjgqI1M4eGJlYG8kNSgocyw3KnZBZSlETn0iR0JMNVV8WjtFdVtaez43aTBZVlQscDcoRFRLK3lkeVRjK3B7NXNxa11hVG49KnxrZUg4KEB9a2xqRDs/''@;'; put 'put ''IVFlMHJCUi9AdyVvVCQ3eytuaz1pJiN5RyZwV3AwZGI2dXNKOCZqNCZkPFBsVWQyLmZbblF5T1IxYT8zO1lKb1gzOkpRWmAvWW1kRWQ4OyFAa0skSWdTUD1WamZxTDYha0EldCFNJEtRbCxFZTh4UmxdVzZhezpWcSU9MGo6UjFkbXA6aXldJSU3amNlVXwhSSwxQD40YktlOj1EMUhlQWUrdXJI''@;'; put 'put ''W3Y7OXg3My9bajgqSmVzSHBMQzRoKGUwWjpzMHhMfFFtbFQ4Xjk7Zz8leVlVfk88VjdYYTA7LGR3Y1BoSDlOOkQzeExxbkJJPG1jJDZbQWc/NzZbQWd2M1hhUGVIW19dfmpsdiZJT314RDd6NSxHS0hzJk5kSXN8W0UrZEFqMlpRIXYweThSYllxSjFgJj83fFFuZE5JXWFBbEI4X2EzKzNrX1FC''@;'; put 'put ''ZW5aZmI5NF03ZWlAZVAlMiljKV83NmhHODZ1Y28iKl5tKT1YIyl6bF1tQmI5LEs2NnEyI3QwLlNnQ3Bae28uWmllZiRtLzY8KC9RO3tkQjVAWWMhMTxrSS5gNTNmdHozZCZdPzF+P2twUHEyQ3FzckM4cHM7aClTelU4cyxZZDkpWjhvWCRkW0txSEZ5T1tpc0lIdEg6Zy9LSTNhKEtlNGNicV06''@;'; put 'put ''Z1pPN0o3cmU+YFd7YEBhLEl7ZyU6SmM5d1hBMzxANDUqZnVnOSRiezpUWCs6a2s1MVBZcGokZ1EldTdRc2p1MF5sX1FTJUJQQTgid1FuemU7NippMlp2XTokLjc2aHpsR1hvWDJTfGhYN0U6Y0tWZSltWDhKckpJKiNUVFUoRUU3XzdqO2ZhdSFAalBXRXVJSnhvcV9IazN6YVF5Ly5oKSwrNmtY''@;'; put 'put ''PCtwQDt4PDZqVyNHdUxDKDZyTzdfVX0sNzk/fjdxW3AyU0VaNjwkTlI4Q2NDPkVYcFRAYj1mI25kczshcXt9dTAoPSNQPVdPKTEjfGZ+MG5SOCQzXnJUPDIqPSxQfDhxdjp4WXp4Xyk6M1dPaGVhb0luVSUibys1TCsqKXJ+NVZOJilGfCkxZXdIUlBdbHM0T24+dygrXixVUjQ9ZyFuQ2pQM3p0''@;'; put 'put ''P1FUTTNWbmpSaklMJC89TUdScEA+QiVCQCZsTzNCW2MjP2hudF9GRjQkOTF2bzZ8Km1nTStfVmR4KnsvKSk7KW8kOm9fPjloW24xZT1DNHUuLjF8Wlk3cmdCYmM1S0RQbX5sXzsmOlojeWlhXUZVKGRINFRvLzNEQEhaYGFIdnw3QnNCeHYpKSM+ZikuJmpOanU1X05jPzk0TDxMNjVySlVLUENi''@;'; put 'put ''QmNidno9ZVhqSU0sQ3FJd0crbWckPSRLMSlFSjNdMWYhMytNOWg8aSRNYnw1T1Y2Nz5NK2hdLl9OYFpTZz0zUURqZEhEPTMxRmdWcVNjfU1HUz9vRF9XJiwkYkshUUlvfGV3VW01TkV0LzlPb3dLX3BRQHR6LF5iMDtfRE43c2lbSkZ4dyV9U3VLVnsiXkQxX0x8TGJ8NUJ9cVBqMEhdWjlpT3BC''@;'; put 'put ''ZXVBYCJTTT8+WGlAM3FHWixgaDEwaGExcyZVLi99S2BZXzxoYlV4IUB8Q0RZfC5DaUFFTWBCaih4em0uZUw6dSZXMHdtYiQ+OiI9Sld1PWJaWik2e2Jad15bbUIsXyN3WnxTY083U2FVd2B+TkljZ0o5LmwrXj0yJXxLY3ojYD1DKmVUYygkTiJ1PHgkUXg6YjdFNSFYWkcvaEQ7ei5XQjQvOmk6''@;'; put 'put ''fXxPTT8hTT8kYl1IM3hje0IzclBnRTZCRWxgYGFdcjFhKFB5YXRfPnNVYyEyOiZjWmAmeltEIX1zQTVpaSN6LmpFM31UPUkqLDFWWG02WU8oSTVrJWZFJXxXTjUuN3w9QWtpbUI2dWxfUkNLN0AzV0MxK05KXnwuInVjbUJ+KD59JDI1VHYxeVQreTZlW1giMSZYVUNlQjZkZ2BSIj9ySDRgJVtF''@;'; put 'put ''dWBTYiZyPy4hOHFkJlB0SzxBR3BDS2ZgTXhCc0Y6RGZHYWEhJn4uV0xxQCsoekIicy8zTFV6ZW8wRlQ4OitvKncrRCx2WT92XltkTWh8QSp4PSRxQUJzTShhKU08dG9FQXMpWnV6flskV2B+O0IoWn5aM040NTVFeHgpcjcuTmZ3TU1oYytqWGFbNmR1QWFTMmBDUnlyV0RTKFJSRCxtQ3g9e3ov''@;'; put 'put ''dER6VFgmeyR4Qyh1akVSU2RLVzJ5NlllVFlVOSh5Ni8odlFdYH5NcEwqTS9GU35vNTs7KWJsQl9uZFllKWovMXI0WUFHcU8oJSQ1ZjRUaiRAUSQoTjZSPDB5cD4/IiVZKUlVeig0cmIzMWd6IiUra019PiIlTSIqeWlpcCE3TzA+Tk4qTklyKi41aTJdaEU3LGsyT0M3XywyJChfXWlFQnRJZ19r''@;'; put 'put ''QlFXPzNVTz8oI3g5SUo5Si8heGpRN3YwPHxiRlQ1a0dAPSF4dlc5U1Y1Yl1fdTJVZWF3aj1NQD1heEpmYTRtUkJJbXwqTSpJWSVTJjV2MmRJWTQ5SyE1VSE1QjViT1ZAIiV1N3FGQXAyUTtOYFFYdEk8S0M/PiIlLF86NFYqQjl3YXZ0L1QpYklkXV1wI30yRz57RnZlLGthWiRfSDFJaGR1OStQ''@;'; put 'put ''WWYzdixMdGJeTFY7UEJAflV7az1GVHReJl1tIyFseEhKRDp4OT58SXddaGlsdmpZcH5UdUpTVTp4e15XQy5IRFg8YWFLQWlLS1FVfFlSaFMjM08jblcwcTchSFhHejlmYTgmaltMT2tEXzNbNzg9cHghR1VYKEhdXSllcFRxSyooTWRsYnNhKUxRVEA9KndaUT50cEJCdm4zdyhsZlBPcXAiSG10''@;'; put 'put ''elZPT0gkJHVpOWQvdnN+eHtefEhBJDxEYmpoZUt3fWZEaUtJQD0zdWVPW3owTEFnRUBYR2J0QiEwOW9wbEJnek5jKDdwZlErfU9zLFEqLjt0USpCbUBkQkFpWntZQzIhSXpuJkJ8VksvLmpEaF1UTmpGVFtVZF5gXW9yLiJlXkZpNzRKMFd8ZU4jfVhuWXIpSFBLP2kjMXZlbHp0Sm1tKWVxfHFQ''@;'; put 'put ''L2F5LFdKZD86JkNqcVN1amlGaC9ZTHteZCRXZnBVTWlQTFhedi4rM2NjYztoOTVnQEJ4TWFyYj0ic3V6OTFKa2IhRCZCcTc1R15oM1E7Ul5wI0hhNSE3eHdBck47bm5NKjF0U3lVNUFZNEtmI2BLdilAV2FEQG8iQj53REI1XWZQI0w0LGNDUDdxXWFBTyY+OHFpUkRwNm49VjNTVmxNRiFEQm5Z''@;'; put 'put ''TE9OVTB8RG4xNEVjaDdnNX5ga1NaTEc1bmVsKiMxdTRSRjk1Y3RVNUIwbmE6WUkhWThjRWE2Mit4RHUpNC8oT0ouPz5PQ2ZbJkdgMWd6MXpJaEdbNHp0ZjohSzt9RGEvTEhGZmtuI0hLQj9EREQvWGRdMmcwSHpCPkh4Rm5ZKSg6WyQufVZiM2EmektLUTg/UCZzJnFMVCxQflVwa2BYSFR1aWcz''@;'; put 'put ''PzpbcTFeUX5GVDg7KzpCNXw/R2lDMzk4RXRKPENWeGtdI058THoobUxrclNKfktRRS8seC9DOHB0elY5Wk4/WSYudXhXaVMmWnM8KkgqY2paLmEoJlBwe1hIQltQODR1ZyVbM3Zfe0heL2tmMDl4VkFGM2kucVosa0sqMURuWT9ZNShoeFVxLz0qKGg0aSs3SFdofTd+d2hwTlk1Okksc3x0MHhF''@;'; put 'put ''ajFVNXdvdThON0srMyY3NEdIVUUsZC9lb2s6IlM/Lmh3KkV6Mk9RLD9xL2VvayN0TkRQWGMzWTxEIWUrTFtPJjhTIjtCeH0pTGdyWCYiV0BVdm8rNC8iSUtWZzY1QnNyZ0c0Y25eejZqUD9ScG84bFs1Pz1MWUFqKVsydVkmPVApTl52RSRucHg2YlBCdD1sYSY9UCNNflcsJFtaU1s0IkVsUEhw''@;'; put 'put ''VSNIezEyPGFnXmQuWDhxUVZ7Jjc6M2NOXSVOdVMoM2YlYnU6Vyluc1AsZUlrcE5gTWNpOCVqIXxVS0pZTzdfXmAhOiRrUG5MblQrMShNM1hMNDszY0kpNEd0WUFmSFEmVykzbj88ViNIYjJ4TChGbTc+bGQjSjY4WXgxMDkiOklBW2tSLmpdM2pXV2BuOFJBYF1veFV9QTJtXTYrY3RNQGtMQzlq''@;'; put 'put ''I0g2SndMQloobUJ4SDwzdz5wI3c+d11FPWF6eW1jQWcpQXwrMloyeXNfbCMjVDIvOjUyKk0hYzxLVmd3OVZrUE9VSGlOaDpDVCRdezBEdGxEKnhbYzddOU1QUi9QSipsN3dfeGk2W2hLaChLNlMlV2ojN1hAMyxYRll6PUxkK2VHcUl1JCpXbWpdIWdpVzI1fGUxYGtTMWthU0gwXWUxNEx6ZW1B''@;'; put 'put ''UWxNMzlRSWFLPXgmZD06PERARmJNXmlLaG87T0ZDaU9NSTxEMXgrUkc7KjtuPndreSskV2U5L0NnKSl4RGJ0NUlrVT53ckZwWlVDZyNJZ1shbSpZSk5YNTkqfjBFVXFBZyJoaCFOcDBFLCpPN1U1JihtRzU/eiFsUV1WJVkwPT1xSGFzUHRaeE8/PDJFJVp+RiVGX0ojSDk0Y1hPU0FgMyVDejZJ''@;'; put 'put ''ZSpNQ1NxMXdDdH1XNmQ4Y35LMW9rVFhYO3RqUCFFKzB1LkRiXW12VUF3WyRKVktoaFF3MmVwVlJLZyJjbFRrQyMqR3tsI3o2VytrPWl1N3RRREkheURBQU8mLnVNWWdzKlIqZFRNcEJuJXgqPUhqUDNaLClnX3Z6YUIpTlZBa1UxaktoYDBQVEo6LjIsN3tIekwmdENAcW0+dztCcGl8MDRPT3B1''@;'; put 'put ''enVvY2leV0pyfHE8SEkrfXZPOTNjI1BuT25IKSl9cHtTSWwzdl9tQSxwcTFMb10ocXU5XTFnZ1ZBRSQhdXpiIy9yIjo+IiVBUkRuUWUzSzt3U1guNVt0bCV6OW9wPkd+bntLVSRgcFdOKFFTcU1oKUo9TShXYUwrMENvP3VjMDg4cjBwcEtIfVJ2T2Q3Qm1jRFNwQEAmRHldIiV2KGxVX01vMGw5''@;'; put 'put ''dl93LmpZV2lTJldJTmk0VldHJTxOM0cqaDFWdCZHcHA3MHIxT0Z0cUJFVnZ5dVE3VUJUJjV2aE1rM3hpWjgzOFJkSSUhSl1fdDNRKnxCSVRSMVYuMyt8b2lPakdAPWd2RVlZeiJRdjt5Kyx0KkVAZC47NytbSDNhQG9QcH4iVk46YCJlPj8iJUhYYDxBQ1VrVmlTdzMlS2VCTSglKUZmbCJvWXYl''@;'; put 'put ''O0B2SUFBSy4iUCY1dit5b0wleVRnXnouT25gYVNHYHQzeGUoSCtkQUQiJVZIPzV1WVIlcHBFSlAkSVlYQHBUSEEzTFo7dixmcSouXSYqdHIhVUtwMig0MUQ2bEVTRmhYZ0hSOGBYZDlkJlB8aC5IQ0MjTE8mdFQzcXFrUGVxXU5UQVZ3T0NEemBBPjZffVdzQkx5PkV5SzkifTciK3g5cnd7L1Bq''@;'; put 'put ''JUxNY21UUHdedGFSZSZYMUZ6QUk1THc8VDEvPkYjdkI6eXteIlkxaU0kRGFbIW5CZFhBUkJfYyY1djNyUiUjNTgpZyZZRUtEI0d1UnFweENfU2V+JUJpPCswfG5yTCtIcUlAPU5jQFkhT0VHQnhPTyU4NjVWL19deEg3XklIO3U8N1ZLdTE7dyJocDBwcCJYbGRmTH41R0lRZmlLO09fdFpxdTkj''@;'; put 'put ''V211YFp+NUpmIilIVENhNHVwcDBaVDpgJF8jZ1B+TDxXX0VTQipfImdAPixKWUp7JGFSY2kwR081ZCFeTWxrW0ksN0l6MCt2cl9QXlE3MUxsbHckMTdiXTk2U3ZOTmg2YGBERT9PYyRBN2NwVlUjXzU/QV1dWTcmMHQwZnAuOWc0W0pMWChTKFdPJj5ZbWwjTVhSVE5OZy8/WHJTblAsY1YqV1Rp''@;'; put 'put ''SFo3Ulc2cW5NfXM2Q31PQkQ0Q05FPCpKbGFpdyVLNHdiPnl8WDVhWEUjR2tlKjZ3MzZUZkUjUHhuaE5sPXJZelJQamU7KiN5LitTblkoMn0zPkMhRTAlIXRWWD52fEw1eEMqMyJxb09kWk01Q2x3P31CQGJoMUV7Wy8zX1RIKHpZK2prbTVmPUgvTTdINSVWNjwxJEBWOXxudFhvJGE6Vih5RFo7''@;'; put 'put ''c2NnRVZ1U18vNVo9MERafDBOWl4mWi9HSFQwSFskUUhyd3okT0dGN3NNLm4+IVtZREAmZHI7Pyg0a1FTJFNsXi9xXz8wMU9nST1jNHwhWjs5Sz96KWUwXiZVZHxbWWI3Y0VoeXk3ckJAJDUzNEBtdVZWSEUzdlA8ZUgjNkg6LzdtUyIoQkRudHN5YEZDfS83SW9DTHF6JjpfYXRzMkx8PCZ7Xyle''@;'; put 'put ''UVZeeExhUG4qcjMvJEJad1p3ZiF3R3JAOXY0cjkpQ0RtaVUwdGhOe0QqcGFad3dLeEdIJnEmTDt1dzU5Q2MrclQwQnZmY1gzM2g7cmZARzNDV0hWN3hkbmFXPGtVQ3REal1zJkVdTWJKXUxFQixxRiU1VjB0UCN5b2s+OjtWOj5kNk4vTiJCSiJHWD40Vmsmej40fDE3e2pbYVd9eFsxRkI6d184''@;'; put 'put ''em8qWCp2VHBOLDcheDZnMmg9NTAoWy51eUMwdHlfL3laeHsjXzkhOVZ3Xyh3e1lpeTh9PH1me3dYZltlamkqZWdKJngkaSFiOnZTNnhHdGV4IlhpbH1rV2I3eiVQMjFnIjU1R1Zfaz41Kno1UDNLd1ZIcXxrTnIoXWNiUTFQdCsuTHxBbHJ8dk5BM1B0RmFQKTZ2e11saGF8cSlEa1k+MUdCNDcx''@;'; put 'put ''KFpEVj8iJWRtczNgfE9kdylRQkhiWlMoanxwd003K1YxaD9gRDc2WH5TTnklUUZwbnNuYV0/dklofUJ+RGtZU3A+cHxjK0hRflMvUWYyYHIoOSpNO2Rjc3R+VlR6bSEwT0RhOnZTciI/Q0lWek4rWlgrJlBfTzp6aFdUfkQ3PG5lZ0hibi99RWA3N3dKL29zdmBCMiJNe05ZKEh+JjY+c1hhNFtH''@;'; put 'put ''VDZ+dVtLRGRHbT5Oeyoqe0RMMkcvKHJaQERJZiQ7O0piaTNNe0x9QjJMTCpgcGtRKHxydz9Yc3c/dUhBTjpCUnxdJj95LmErcilvdWtxNz41NXovUEtCeiUmSzs1OF1PWn1WMyVqXXImX181YzpRezQ/Ty86Py9uSTxRdT5lPXA+cGVxU3VzMShNSEQ3M05wWmlYK01feHlGJjVJP0tIMSNwYnhh''@;'; put 'put ''JltTUE9CcEZUMnNAPCUxdHc6OlF2cz9fb3hxdiFPRC9zc2V+Nn1CPDdnM28lNFN7QnthSHtjUDZ0ektRdjpMa15GZD0rM19gNTdQSUpDaUJxPkdWREV3a08ySE4zQ0pDJCwoSyNfSmJ6RChyYmNEMT4va3t6dG9sUyRpXTM2VTZEekRCQ25+TjRyaXojdDtyNi5Bcj8yUDtDekJwYkdqeWAvKnld''@;'; put 'put ''ODVhYzNBTHxiQ2RBYT1XbTxoaSs4YTwzVHRWXlp0TSl6RXc+Om9Pe31CTjtlYjlHS2wxPWMufEx1byI+QWRDbVhreUVya2AwMVMzU3tOLFJXWjYyTDhEflNrRC5yNW90JjRaRTFlLj5MYmFsQzFGYzJ1K0RyKi9iaEM2LF0jeUZlbzhvaH59ZltlM2pqeX1fS0MoMVpxTj4xeFp4emFkVHtBKWta''@;'; put 'put ''NGZALj5jP1pgXVp3d05GTm9oYDUoenxabTwiSCNlI3ZzVnB7c007ZTg2RVFTWUNdZygvfDBPYjJaLCtybFh6eXJzVzo0VUlDa11QbnxxTn0pfCUyUXQmdy5RSF1+NXBMTXptQXVbNDZzMlMkcGtjaEtyZCkuNXltOj1FJlg+eF99e3tmOnJpbTtROXJ2LzJ2QF90WVpUImYmQ0NsXTVZOnxYVjhQ''@;'; put 'put ''fHxLRChUYEouOEpmPVRIOX0+QE1ZJEhYMl9xXS9Lek8oMlVyeUBjcV9tdmBOZj1+YCM1WkB9eDVoeiEmOTFWXlp5TnY2eHEjN2QodjIqTFQyeW1GPmE6Ln08OjtMfmMoTmM2WGAyZk5tSmoxNm58UmNwVDI9T3o2TUlML31WKmFkY0dObn5xV3p7dyFqRD5MbkNyYXpvYWAjOEc0UTpgUjV7cGZS''@;'; put 'put ''WzAvaSZDeFZbW1spcHwoTDcyXUgpb243JjU1MjIwZjFzdT1EV1pbVlM2VTA+Y09FZHYmNnxbN09UITU2czJkdn5gZGhmWj1NJU1wQzt1WTBRYUAmO1oyNWhTIlpqRiIvL1pPMW54PzxiYDo5QmRYZCE3OWtueDZ1e01LYkI/JDhFUWR2Vz5eYD8/a1omSFs3b08oPll8eClGZTltaTpDNHZIKTd0''@;'; put 'put ''JXVWal1oWVBnNmF7W141Ll1xWiZYJWA0aDZrVDFVZ1R4bWg3JjpbQFhGVTs/aHV+TGx5d0E5eXBWUGwvOHRaVCk/dTF5QTpdfG98OEZSaTI+ZVdFYFVielZVZWVfbnNvYFYiZV5yWFRydH19dnFmVTt4a1coXl9TfmNeLFFIR2NfbnNIYFczeXxdWlJMQmFkX2RTUypHM3BqSmJTYEl+MSJDczN5''@;'; put 'put ''ZEN5eVMyZU1NeixYcGpPYlJgK25jU0ZZIzhnMD0vYFNvektmb2k1LldiJm9waDdbKmM/TWFaQl08NTwvJTJ2VmxuWVdUbD81JXBAKTc5I2QyfV1LXX1gTEV6fC9YfkspIkheaXRbRXtFOk5hLls7RSF3cFZQbFVybjQxeztFNVE7ZT4vQWExT2l4ZDFEZDFoZzR4ZzNac35ZT3tgc1tLZjpXU31y''@;'; put 'put ''VVI6M1RMYn1TNjEqLGNKI0JTKCV8Nyt7YmRxJUxLNV9LdHxGW0BGezQ1UVh8eTZARlNZVSgwXzJ4KGtKajJoezkkQUt2K0dvfEErOkhUZSFXQ2p6cjc/YXJOeSVLRzZWMGBjS2xIUmRnPDZSYVJ4cD5eNXFMJkI2OUxiek5QXWZhY0smMExufi8lWigpKUo6PXNdJjklNX56OCJyX35Bb1ZpXVgo''@;'; put 'put ''KHNxVWV+KV5KS0MsVHtlKjFOMFo2KGVqSSZ5TjVaantvLy9hV2xiKzFGbmw8Y0B8OFhuWj1fNEVJYmI/PTpMcjxzMWBsQyo3UnMwYDAsJVN6NzNVMTY1ZlhLbF1YbnY9aVd7TTN4P1hZMG1GJVtMfF43dlNHXXAyKzBOUEtCQWE0VE98d1NBOl9aQ05DQjNpYT5NOmFyW106MTZBYDU6ekdZWlRD''@;'; put 'put ''bEk4OlhEaHAwNkQ+Y0A+TkYjZWJuSHskNUJ6KC9dbnA7Ry9vc0dgNkRTMUtOSDYpM3lzc35CMVh0S2VTRWBba1p1W0FGPnRfMz81RUA2RERgcHdkczFgZFNZM0JwRSZdYkpycmYpQnRrPy82c3woVkcuISJOfEs+ckZ6STJJMkRaSyR0N01uSF1LcltdYFlLJE5sPnolRGpdKVEmNXc2MktbYkRk''@;'; put 'put ''V2QvWnFUZGM+VXVEazlxRkNkOnxGUW09Pl5QQUMwV0g/Y2Bfe3Q1I2Y9ekZ5VV1PWkglNXBMSjBtcSNCc1ZMYSx7cjcpWiJaOi5pczt6cVF6MnheKGF1emd1KXZoeG9GKCpJcXBqcGpfOT0/aHUiST5qYzNhTV5ldTdefWN7UEVNJUVoXmVbJkVhWCsqR05qT1dxX3F6NV0iIn5xXz5wS2hVKDNX''@;'; put 'put ''fDkuakV+Tk9MaFckeTd0LEkuUW9UMVkiLnBzdX1SYzlpclg3U3JtcHpTM0lgYjpsU31eZlkoIWNkQlU7dThaTmxkaFR7eDdXcGUwVShWfjU7IVNIb3hOK2t6bC5iPio/NCgpYCFjSV1WfHJtP185e3BvZXVbP1ZSXT9tTE5vWiYsMDZ9WjMpR1QiWnk2PnxCWWNwQkh+b3ojSGxyMlIxYF5RRlA5''@;'; put 'put ''Vko8VnZ8WylHTHVzMWgrVFJjcWYyL2QxYWh5cyVfK3ZORDZ4Nj4pNW1+YEwmNUVgZFljcCFhSjRPOn58eC4kTCtDPVFEOn58WykqZTBTeCNlMjB7ZDZfV2tdSi8xJmp7dDt2IzkpZWklLHk2cXw0LHNaa3V1KUtyUF1Gcm46ZTNYWTpld1Zve2g3cyUsPUFyUWRoMXMmdjIuQEpSdndhOnd8RSsl''@;'; put 'put ''aXxvX3omKiVDQWZdKDMkSCQsUW06W1ZfW3dEYE9iY3E6cSYlW0ksJiM0U1JaTiZDYCYiZE8kLzgxW2FvJixKMDMxPnR3MSRNPjdWL1soQzZ2KGBYPnxKOCxHXzszfmB6O0IyaVd+enBWYy9+IXwkVFtXK3FWPl8pWE96KW9LamdCSj5iJjJfXztnNWE8QDptOCwzSns6NiRGIWFLJjxjM2VjZitE''@;'; put 'put ''VDtQZUAuWnFdKXF6bkBpWDNJS3F1e0hQXTZPSklxfVYwTUk+bHFZKXo0VnJuaXxiMVZXcjlxWCkxQ2ROVyMpM3tgezosMH1WJG96S2NxV0s9YEg7fEU4K3l9KDN4X043MEpxcFpGcF9qWH1WfHp6Sys+JVllamY2MFRyT1FyZjQ6WCMiezZQbkRyKVZmcilWUWBTWjFPbFAwS3FxcXtwWDNJY0ld''@;'; put 'put ''cSgvNDUrLns2dlZOYE9GKEVXeUxaKz5IKiUyLGN9VmV1SlZdX2xwZl1qIihrKGApM3pfeUBIKmx5ZD5zZ3RFZHFKN2AoUURAJk5PazYvWHJZQCZOTyoocj4rNWdkSGRUbFczKTxCbFczNFF4TzQjSXI/eiZjdVVOXlJUIzVoIlFFK0tLezFIeCZTXUBYXW5BV15vfj42Q0NdZUIyS3EmK1RDbFtL''@;'; put 'put ''O0g+VClELH0wTTByUn03eSY1S2E4eFloTnJjLDZRPm5GVkhPSWBpOis1bGQpJlovaGVxZjBYV3hUX2RFUl86ZX56SlZZXTp0ezZiOjY5N3Y2YmErNHhldVYyOU5TYkFAcndZcnt8P2AodUZlbzhKTGl8aipgRzxqP2VnZnY/cndfIUZWL1k+dHUjdHN5OldXWmxAMkN7WVZvOClLMlNuNS94MyNF''@;'; put 'put ''e2dOJWFuMTxRT2gya2dlfj40JGVJfiNheStyQVglQ1smcjRCVys9K0tLezIwMDZwOFcwR31TbVg/RF1oImUwdyNmMnIqS2JiYTE+alNSOGtmMkpiK1JXXnxOYz41R3IiW101SjpbMko/ZWFxZj50XURdL1syWzNPLnJFTUVvaHFfWSxRdEZWKEsyU1I4KDhBKUFyTDghQ0JdMHJwVlNdUjgrVDJK''@;'; put 'put ''WGFGNkBzRmBiNEN7UXRqQis2d1pAWzFXeDNoRnFzL2BiNEJwXVkjQWIrUld4fDd5ZXY+ZXJPQntKO2hlcWYsJitUK1Ypellfb2J5bmpQMDYrU2BFUHJpOnZrdHgpVHlkdSM2IlZfIlpQM2RPVj8wWWU1YklER20mJDQ4YHlAei5QMHMzZE9bVTdjOHtnMWsoeVBrUmRIaTIpQEFyUH1XIz4wOXhw''@;'; put 'put ''OmtoPXNIWWB1QFFUOiNfcHk8O3hJLiZbc2lYPFptRSZTX0QoSU57JDkrcyRkLmlLTyZTYHdEe1V7fU5ZSFB4Zyh2STl6S08mU2ssOkklS2JjaCklRChyKH13cGwvP2MuZyh2aWN7R0xpcSpaRWI2K0hHNm9IQ0UpV0ZmeFhQXXlJc3xzfC9LNzA/Y09BRE56ZHJMaTJfdWp4OkhYYzdddFdQUyMk''@;'; put 'put ''JntScU5uNGBqQihLSHQuR1VeYF8wPmV2Skk4Kkg3eWMhSlJ7YC9yNFNZKmdXJk9FRzdWWyx3IX5RPFB8bXRqVTRPTjcic3BzdUxoIXFzUkttV0tCcThJd3FQMk1SdmJzLGBDdnZzOlA5aERHUXpvY3ZoZWBqWT59e0Z5d1s+K0RgfFIpOGhDNSUsT0d5X2YoO0UlLHBgWlNGc3AoQ2dicz1gOCo+''@;'; put 'put ''fXA/bldzPmxPI34wZjJ9dlt8UVVRbjM7Y1pgUDgoTX5ibzkpaE9XJTEzeSV6cVBXezN3ZnNrY2hXW2JobjtdJTo6fTZ0U1cpRkcvU2RiWixdYkUxXypDZHNGKDcmbHcieFFqYlpHL1c3MigqbnE4L183a1Eob0drQiJDVmVLfkBqLzkhKTNJfWBPfGR+KiUlaEk3W0s0Z0p7W3UlfWcyNGh0dyNB''@;'; put 'put ''bSkmSEh9ZzVyc2kvaCgmXnQoNX1QMm4oXVFTRWRAJGQlfUkpVyhGZjI+dVAsN2IoTkdVNGQzO2M7X19CPnN1UyY+PHlLUFNMI0V2LGYjMX5bKTl+eEdRLGQoO3N2ZGUqbTcufCVpanNwKTBSblskZGRXTipzVzV9VjplRUp+YWBLNG5VVHZmNyVbTUp4RmtOfThpV2FRMXIiIjtjLz5aQyN8djpM''@;'; put 'put ''ND9DY180QmQrTltePE1MdW5eSjokOiZZNiVWYnMmYFd8b3hRfnFsZ1dCeTJ5czpYST50MHk7Y0l9Zyopc0V3YSsxM0w4I31kYExQMntLLCt+M3pQfF9eVS9mflZwUTRTZChoNX1JfXFMLn1ZV0Q3PEM+KFFJOShjcGh+WExZKCs4U1hqfEpreEZHSDFGP3QqTzJ+WXd4RntDYGVUfD5YclcvXkE5''@;'; put 'put ''I3xqMlBMUVEmaEBET2o9dEtQJEA1Qz1GITomSF5fMDFUKChFVExgIktQfihvRjhfWitkfihxIn42fkQ/UkxfREVodyl+XXlGIUNic1s+Snl0Xz1Pan5YY1NMSUhFaGZ8QEIjfTp3VjdyT1UoQEAqQV5lKT8/d1t8KT9WNCVncThKMXhLcSl5SD9gPlg8aEVfJTokaE1OUHwlLjBSVH5+KGMrQyJS''@;'; put 'put ''cU9XW0V0KDpzTHsuYDgkWkxFWCRsM343fGpCVVtrSihzOlM9Py5+IltyMC59KU88c05OYlpTfk1wZHN9RiE+UEpxOGF+fldTKHc+JkhBYGhdbFcqb14/YSx4WlFqdH5WTWBzci4yfWpbSUYzX2lKcThCMXhLTV1EOEEibSFLUCNbJUMwblRLODU7Pz5ESn5ydGR+fnZ0KEN9bUhsKGNxWiNKYHl2''@;'; put 'put ''Onx6fUB+SHMyfTFbfjpxZ2UyZCtoVyJFOVlZfFJ7IXNAUTVoIzosSUVCOkkyfWZbLjEhfTJjMUZlSUNUaDVrfi89bihsLHBeO2Mrc0M9MnkidyNnYjl4PTE+VXw6SFYoTkheKSU9dlQrNCM9LH5vMnlRY19VMU9qKF9HfFRMPWkobTI+OFIrN1sqS3lPKC58dVhQdmV9cyJ2SlF8JCwxIUV+Kjd5''@;'; put 'put ''RmN3YG5kX1oyT2paKXZwMn1EW0VSb3MkPVU0PCI1XWVXLktjX0IyQGRpfjAhRmN9SGpFeHxURSUsW0ZMTmVfXzE6UEpbYl9xfnEqXnlbJjhXTk05W1cofmlqQmtYTT5OV21fSzdSKDVpNHk2dE8oKHw6SCFJS2AqQyZzaUUqdkxgOkIxUFEoUGc0eV14fUxic25gakVpc3BDIT5vT3NXNn1vJWks''@;'; put 'put ''Ykl7dHc7Mn0uQElGNV9CZT5+US8yfVBbfWQpfWY0MFJHKUg0Pn1mTT5+K2AkKn1+KmApKj9+eVs3Xzk+JlBkK0FrNCQ6djl+cXx+fld8cz1CIlcoeHRmPyNRZ35UUlFfOF5VdShXeGtveihyfWghJG4yU1guS25GMStibj0iYSsoW0ZKfTJbMS8kWERSekN5WyRfSDtpT0pWUltXXkI8OEE/KUVG''@;'; put 'put ''P3xzUGMkVnhDOHM9MzdvJS5BOE98a19hPC9lWnJbNld1TXNncjh7JF83QlooMGk/P0JrPCFSelFeIypxTSptfip9dmt2SjxEZk90VkVtU14/RlNgYC5lOCVeIz1JRzhfOls1bkheUUZCTGhZRVooTiw9P15dLjswOXQ+Qld2Ol07SF97UytWd3Fye0lAdVs3UVljUTk2Q1ZWPSE/Pz9oPjtNSk87''@;'; put 'put ''N1l6O1Q2JkoxcyJCKndHOzozPTdaPyN9Tjdidj55TnZEd0ZFQnRnWl1Pe1hLQyZXR0MmS3MpQml2NHZkbk9xcWRxN2NafllpLmJyOFl7QWVZLFkoMXVOSHljNUx7ND0maUFLOG9rXjJmeHY0MDpgTzIiJVF3K0ZmODdxcT1zO1Qic1A7TjcvQiNzdnNzYSI7SntEfWcjW35nPk00U3l9cVBdeSMm''@;'; put 'put ''PDcvMyFhJVhqKHYhNi4xPEd4akxsKlBNaWQ6N2NJcnpAdmNeIkksM2NVR0c5SWsjKH1lRDJnUEFBelhBQUFBP2IpRD0oNUQiPHZIREcqX3pLNkF1e2s+PUtraVNuQURgRUs/VEsyJEpBXUNNPHVtQ0FaPzIzSnxobjBoZT5KPW1BelgzNGNDVEFFRTAhKnZWdHIsWExGUn0wZkRBQXBIZkcrblJR''@;'; put 'put ''QXVWUXZEc2I5QkdPTzxhZUwhM0pJNldSaj82UncpIShfJG9JPUhBTXtxaXU/bz96XUhdMFhbYitEbUZ4QWl7aDFbUF12V15lRWFfXyhvfWkzLndwVjxEQHlRfmZPIWNbPm4+JEheZFVLXmRVX145Vmh5PjNJeF4zYi5nP29gPyQpLipWd2txdn5dN19heUF6eUUob0dRYC41NC9DIVZlckhGckRg''@;'; put 'put ''LkpRNkNhNEMwWVVHbnxlW243XyxSaFVfIWJ8XTJgfkg4YDBkbDt+JGpdV1BTc1dxekMifkAoaDUzIzV7WCJzW089KiIsfnN3bFhiIn59I3pkSzpGKkl9WHlleCNnR1J9K2t1ajgsdUNyIm1vYj12bHVzWSlyTV40fllxbUBdY2dmK3osLE1KZWliMW5lcCZUOGlxallsbzcoKjBHQ1tCbm4wTDtT''@;'; put 'put ''QDE2eTNJSnUhbUNOaCpSd0BWeWV0NzEudyI5ciJ4SnRJJU0uQHQxT1M7MCJQcWMpXV5GSHpeLz5tPX1NWk5kOWFLL1Ymdyo/L1c1Om9jbXpWV0FnbXsxWkd8MzV0SSlPe2N5WXZEP25nNERXM2d+cl9VQkxjJVNtP3FXaVhPNUNgNGExJjpzUXNSfFR2IyFudnRrXXtfOk82TTxUUjR5eSlyUHR4''@;'; put 'put ''L2wrcFM0czxXcVY8TzAsM0AjfSJHT3VTVm9fMX5IZk88fXZgVlBMVXpIM0htIV1bImtIQ3ZtVy5TO2hdZUdhfkp+Yzw8L00ySVA7dU9TI20vRDNZeHI2fWxLT0E5c0sxbHMhOyZFLCoqI2kiJkFVT1l1JD5QPW5KRy9EZzFwWWE9R2F5Z3NdWn4qfU9XNFIrMmd0QCgxbERYWFEkeWAocSprYT1U''@;'; put 'put ''Pld6PkFnO3JrQDZdK3dXMElGTExsMVQqMDlgTmV9QTZfLDQqJUZLSiZ1eHFxWmkqRGtZRTdIUyp3c2JZL1tvLy5YV0x6Ly47U1osJHJ8ZnJhR1FESSY4Iytpa1l8R11GcSVQRDtDcSNIKns3SCpBZCRnZVVnQTokcG5uenMlSWhGR0tpeyVEQXhxKlBEcVFEYUs3fTwzVUJKKUNDO08/Nl1RY3Iw''@;'; put 'put ''PTk8dCs7N3RUUyFaQjxaN0s2RkN0KmF7OWRUQmU4QltjKHVzJiU+KS52JmRFcnVsXVNWRzJjaWwkSEhPKVdCejFCWHw/PkdvSSVVd0VhPVl0ZUV7WVVBUDEwSzJVNlYkc3tjbD93TE91ekJSWzIuJW0oW2ZgVFEiM1pOTVFRaz1RN2F7cltRbCVnQmFZTDlFQXRzTVJEJXkoK2FgMlYwPFhHQ2tb''@;'; put 'put ''PzVUfGF4dno2RF9RdGRWN3V3IStacSpoT3svNFhWbHA7RHdFLkElVGY0Oj9KU00wdFRofDIsPF5ZK0UkYF13LmdocCsvfXxlQjE0RnovJlZRZ11lVENPfDdZNl99IWx+KFRaNylCTyIjdiZhXW5DXSV7NV1pdzRCI2pEdntPcn4mZiFzYmB+dGIuKSNAKjY6NCR0KiNeT0pgL0U3fD5geUkqX3Iw''@;'; put 'put ''WXwmNkEifXdnKXxIJVBvOmI6QzBCViJHaDVRM3B3RGc1L21kUzIqVjwyLFpkTjNFW2xfQyFISF5FUF1qUDszPHFwL2wwbi5UJiwpJSF0RytbfEdVTXRfemNRTT5idDRQQUxbakJxe1Zra0ZaVT9rRnM/eTEpSEFjY24oZFpZcT5kOjohNV0sdFR4dGlUVGcmYn1xKihOXTh9TDV5K3NEWHw6KWhO''@;'; put 'put ''eF9Ob01jSlB6cH5nRXNRNCM3amdBVyYrKHt7JFA3cl16b351YURCYmxbQndtXyV5eWk9RGNBN0tWSikpIiMlXjpXbzdPRTJ4UEtqO3kmVjxZXmgyfE9TM1hJRCVGSXpNPmV4SFhIaFRaQlkpPVl8ZUo5OzM8fDguJX1VN3NAOk0+eURRJXZEY3hJPURCQm58LDo3cDtwKCxKd04+ayFlLmArQ0lJ''@;'; put 'put ''UXp2R241IXI9UEhmK1trIz5HW3lvLGZdLl1OMnU8QlBhWUlsQ2NKXkE9WFZCOXM7SV0re1htO3BhNUFdLCQwYkFnPHhZNktQfiVZNSo0ZCQmNCUsP25jS11+Rn4rTzMmO0pdYjJmTk9LKzFkdGRWeEdNLExdMGRCNygoKlRfb152SC50K0tKcUNSbilOd25bUUpLeTN6JnE6N1ptPmNTO3EkSTFo''@;'; put 'put ''IigrcWZac0khRFUpTVNlN00mLGxWclFZUDVaYTk/aU87Xj1tWlhDXUY/NTNFbyspKHMqaDRAfk9yQ0NPMk10RnhMcjM5TVdbNFc8YFZzcnZAfU8/QnxXITU1Wi57ckZEN3F1VXJLWlBsKkF8K3lSdXY0fVMhKGo9U2g5Jjo+YC8kKGVFL1M5KDFLPCY0e2o8el18QXBWLlM6KU40c017cVE1RV1+''@;'; put 'put ''RkNdYCJwejZuXkJPS0J4KH0oVFZbKyh0bnsjMG1UcjE1WFEwfTRlT1cyXyYraGh+ZUZ2SC5ffX5XV3VZdEIyNGh5L0JzOFsueyxjaT1HRG5HUT1hSDlnVzZoPU5uXltBJjQyWC5LTyhvdy5wJnEjfi9wdUlGMExaaHIzP04xQzMwcWR1eHFxKXl7NkBaZH5xfHIxeGEqRSwvNytZfFhXZGd4KFIj''@;'; put 'put ''Wkd3XyorO3JzQlR3fXFzST05aUBpUD8rTVdXRVR4PzIoclNYLC9MeVZfaSw3cG5HdD4weGw1ekd2aUp2PiZtTHg1LDh0PmBHMzwoKyhycGkzeCt3X3YmZFh8UkhIaTVeWTs7PCxaKChdIzkjLltJaT45Q1FEX2c+UX5bOVR4V0p5KFZYaSFzY1UyW0tJT11bXnA7MjdwZ2tuQS5gWFNHSGBva1pE''@;'; put 'put ''N2NTU2Q5ZXQ/am9iWHMlbXxWNF59K0E6aDwlM19sSStPZD1pZylrKmRTT35KPER1T2VKRjZMaTwyTlRxdUxaKCg2Zn0mKTtzTy9YLEJFT146MDVfME1ITUg5aDAoVF9yT3RKTUguUUhOPHt5JV5JJWc5Qm9XRjoyXkdATl5oTnR+MnFIVkpUeXcpYX19MHphX35NaG1mRDVoc2d2WjFrTlcjQl1b''@;'; put 'put ''Zyt1fl97dCFIdmNeaSt0c2x0V19VR1RKa0wifFJJcT4vWGk+UkBXVyhQbWJYWF00fUJCfHJZdS9pcyJeUiNwR3NfXVs0eCpESndMS2UvVU91PlpYclVfU30oYl8kLjdwRjVwPkhIblN1VSJodyl2Pl56PWElaT99UVpkPX1DMXg9d25gTiJAcmdsYl09UDksYE9RYEQ+aU5vUTksVVJHOlZOOXJ1''@;'; put 'put ''VHFqQitSXUJaPG86JWgobUdlPWREKXdGLjhAWEFUKD5QIVNmMmcsYE9XfTx7Lm9lLiFAM0lqd2YrbShndXtvdz9ZX24wJC4xYlo/bXohfG5WfTRRVHo6elVeKEpbbT5yPEZaUyM1XzBaO3JQQVI8fV5YUGtJdEpPUTdrM3gxdmR8ZVt1PkBoOHtReTVfKyw+MT5lcUoyKlYrNnV7bzEiRT5aQlIj''@;'; put 'put ''dCYhc3o9THxRbXtPLD5JcHMjW11vfFF2Y194Yy5rQ3smfSNVPDJ7b1pYVE1IYFtVQj5qS0hSTXEkY3l3W145KFVjXlFWbnZSMkpSa0wsYk1VPy5wfkd6cHMyM2g6Q1VfTVViM2NrUCxgT0pgWnN3VlZTMkAzSW53THFFZEZaXSNpfjF8VV9VenRwV2cpP2xHbV8yVjRMZ09HPzAlYCgqWkV3Yn4r''@;'; put 'put ''YUZackV2fWFqNHJJL185XmdqWjpRVng4flZ4M3ghKTVzcyJ4MW9eb3pZMXNEXVtrJDloUnBsYjV5Y15rJC5RYiM5XmV5M3h5PFFXa2pMfF01NiZabWZXSGZKKkYyS3l7b3klTXxfOW0zXVI1KjtNYF8qWS9ZVzNVYVM6PGB4NiwmM0khVF1hW3J0YV5vRUA/fkw7YjhSLjdwLz5EMEUuV3okWXpA''@;'; put 'put ''P357dHE+Mm9oPmxgL2lpWTRybTdwVUNvQURVeCYrdCFBd2NeQk51cyw+WV9+bmxTRlBPPyxnfnIrYismclk4fW9vY1M6MiFbIXVXLnx8akJ0cnRweDROTFV2OjJPNVBIKz0oKFBmPUo+OVhKWzApVUhhVkV2elFWWEBpTltJey8zX2xCWS9mQ3NRKm41ciw+VlB0QnUjIzcoeUFGVGJRfVVUclVj''@;'; put 'put ''MzdTZCpLbSw7XUZ3bzV7cXFUZCJSUGpYKSxBWnZyMVF2NDgqRVROdGN6ImtHOVBaLlEpYSlWKTtiYnEueCVub29NNTNVLF92OktwQzVwPn09NHY/dmJ+IktZM2R0SjRZdFhfdyUyYTl1VUdEaHQweDdKclJsWiQlPFd1dj1fWlBEbHQkTSREW0tkTXl1ZGNRdl1Fd1c6Qz5XfkoxfTZycEYhQUMo''@;'; put 'put ''WVh8WHRCLntHJmVKJWM3NFdkJHI4Lz1QWDUzfEw1R2FNWXpsPXl+aVVFd0FRL2NgJFhWalR2d0NZbn5MWFgxZCN5LFZPdTZrSip2elptTHwhcih2YD5yQ09ROU0xQnBMdU5dRUp0OkNIcm1dWHNCN0h9P3Y9cihBRnQ1RlZONyReWyhLV2w6eitJbnw0S1EpTVZHZHY+SyI1RiRBOmlHJm5VLFhz''@;'; put 'put ''QjQ7Ul1KRnEvV3h5LERLWXo7SXZRKkJWdCxocz5+PyltOU5dJmt2SjwqeFR8YzJbWnRTOz52a0RbMC5pXXFqVHZxK3MpbURnQXdXNFlmYkYoSVhkU05CWTdxU0lzSEU2bksxfEZOcWxqPTBiRFdVTyhkUGZvQFBmbiY0Lk9uWHI+LlJXZDx1REJTfV9HOm4oTipfZU4lIW1hKD99Wj5Nb3pbKnNS''@;'; put 'put ''RkI7aElnI3JTRHBMZ3p0fFVHWVJlTTovcD59VntyalpNKEtwVV01Sk1SQ255PDpHIiZCK0JAdXxmPWg+R0k6Q3QvIzpdRTlGPWhNRj9Qej5PPTBtWiZbSy9MNFJdV2AoPjtXJFsjOWJiflJXT0AoPFJbKVYzNX5xIiZtPnJhK2ZQW2V1OSRCLkFrK1FUKEIpdFB9QWV4fSo+SjV0QitRPSlFUiFf''@;'; put 'put ''fGxpQERIPH1yfl13aEE9M0JtLlZRW252dXksa0VeeT97V2ZzKVo7KHJlLGdlNlVPfCkpc3ZUQlF8ZShfW2g/dVgsdUJUbWI7TzJjLCtHajhZRiomeSJ8VHhwcVpJYC46MkFmYEJtI0MvY0JLIjVGMGs1X3dIJjQuTyZzZlksNTR3T3MldXkxZkRdUUhuYytsNGQ9IjNfaEQ1ckc+R0ooI0FOeWJK''@;'; put 'put ''WipqVUEoaVhMXj42TmNJYz0jTVopYiRjT3QhcyJoR1YmQzIkMFcyaDptcy5iX1dLU1syXyQsazM4enB+Zk5pU0ZQKEc6THJ6WWtFZCgsRyZHYUt5VXV0KCk8OjJBZiQuVXUoaHhkZGd7Yy9ZOFsrN0x8KjRucmMvOnZCQTR8K2dZVD5tSnZRPSxLKlV3KHI+IlZod3Y3Qkp1b286I0dsYlgkazli''@;'; put 'put ''WDQkeCkvcGE0XSY/OFFaP3VXaSRNXSZaQ1dLWk0+L2JNa2A9JEQhbTNBQVRuRF0pa0JwTEUqNnc0PlVhbiwvM0N+PGlAPUc0ciguYWN7IygrO01RfW9TRlB8T2pAYTNDKDMkV15YTnlGVEpgdDlUd1VGcE9kJGgoVE9RenA8aW5RU355aTsmQE5EViFwb15aS11yJHQsQ0EmJntZeFBjI1ouYHkl''@;'; put 'put ''KCM/bXN+RDczfW9LUVJYPWhXRDAiKzA1RzguW3t9IWhEK1RfSV0xczhzVHhMS3A+M0ldW0pYVTQ6KFA0bjNjVCR9IyFaX1RRP1tbdlZlWlhzZy4uYyVRSV1ebCNtSUE7NHRSRk1ebVlaV1lPVV91WVRJJEhLfng1TnFxckJeNC96RiJrXyIzKGoiTn5CRUpdL05QT0wvRT9qSUh0Y15URGl+Ll9W''@;'; put 'put ''Xyt5LGt6ejc/eUhSKGZpQV46WjxfZkU7MzxBK3dtKzJefnBdTChDWnl+fENdV0F7Q3BjNT4sWVRLYTUlP096KXwkIj1oPCVnWWxJPyhRPW51bDVKR040WlBZRSwkdXQqZUt4e29nOmooNzNZRilGMzxrYiV7Nj0zeGxidnNISjVUXSx6fUEza3UrNV0xUEBCT3QjbTM8PjFoLm9Ubld0bFNTWSRf''@;'; put 'put ''VmFgckl0Zzxyd2o/M0lBaE58UklyJX1eYW5fNSZCKjVkVzokdjcqdFVVdEYlNn5HJS8oKyV+Uz4yXmErSF5qajNoZFpMcUxMYWFbWjV8NUBRfEE2cjwjUlFMdGI7fGpKeFVbTHc/fH11PjoiLFVdTHc/dEdVKHMqTTVOTXc/eUh0fCMxITxzOSR9SXVnQy4mTlBGWnhDdChzSCxWcC83cChgOFpf''@;'; put 'put ''e2BJUUchZHN+alF6Pm9SYXJeLmx1K0ptOVVmLGh+JkF+RjYmQSNHZ2x+Sm0+JlhtVVRsQypiTT5gJlI1KDdwL0QyaGxCNSQmJHQvdjdIUEttTXd9ck55QGFuVFMsMl4ieyJdL0xtfn5bVV9sNVBIcDA4KSZHVXxWYk1SaS56K118cXpKKl9+ekRkT3xhNzFKaV18QzAhW1FJVEcwW3Z8WjN6IV5n''@;'; put 'put ''NUYyaERINiQobilrMEF2P3FIbl9WWVk9N0F2PzNJaFVGQjoyPlZjJTtHcThUXTpiVlR8eFhCfiI2N0wqZyx4Ukh7RXR+WG8rdT40QU4hXyh1UEdAWW5wfCRUWHJ1cyZjbDxoaVReaVFeeXd+YHcmbWIyeXVvcX4xP1pIRjV1fX18KzU+KFh7YWNITE9obn1yZX0rUG5WVSNuKSVxVXpEY352NkQ1''@;'; put 'put ''RXJAQ09BIS4mX1dkMDlrNT9ZMVEoZmtTbkcpLzl9cVA5VnYlWlA1N3M4fFdfSTtyNl43UkcvJnYsZi4ydWwuZDdkbTk/aWJpTlgwWUVXO00pRTVnQ0NaRilpO2o1MktQTjgqLCxtTCVNWkxnKlZvYl5pYWR2X2ooellRPHdVXyhrXWM6dUpGbzFbRmpNMD08SC5oN1JMKmlOQS97bnJGLC46WWQw''@;'; put 'put ''PCxufHZZci47LG9kWyhWeDUoZVdwMzFfQTZPST1rR10qJmdEcTR9LzFodF44aCZhMWpFQypfend9cjpEeGpzNk5iVExHdThtZnIoKVZ4NGxTQElKanZedig9MWhgdmVURDRQLEpCMz9nMUdzUnkke19lPX4wU1RuRFVARCQiNVJ4OnU2QUZeZmojNTpvYWg4eHZjZWBqUmgmQ1REJUkiSWMkPXwu''@;'; put 'put ''KyVnJTRyTWc+K1A7Pz9JU3Nud2tRakREem5XLG5gKmw+IVBkIXl2e3tQUVs+LHYiOSVqPVIoYF50bmFTUzVOb2BHVmhBI0xUUGIoVW01dzNvV1JZUTM1JnNlSzBVP0dMIStOSGIvcmouSVlnYk5wY257S0cmdEdtIWA+XStWT0hgR1ZGP21TZ0k/fnVXdEN9Kj9NbSk9QyRAU0g/fFRCNGEsJSEu''@;'; put 'put ''RWhoWypDPUJxNHspen57P1pfR0Q/KUdANGxwYDgjcVJBQCQoV2RbeSk6N0hCK3xecyVedjFAIUpdKFspJFcqMDR8LkN5cjRCKX0peiJsS2BYKk1TNGVpRHpqN0MpR1h3Xmo0UypOIl8zUzR1bnpFQCx+PXJ4RSN5ck09VjJKQlh0U019N3hoZnlOUCI8UVhRcXZMLz9zSTgzeSk2VnUxTXNfaGxW''@;'; put 'put ''fWQ2JVNTTUksUGdOTSpjckxZfT1AY19vbk4wZXdvNj85XWAsOHgpe21GIUkmI3ooKWB+a1FAbjEwV3xwM1QyW1pGQjhzYnhHVmJOL1kySmxQZDVEaTVCXXs0bF4mU0IoJl42KnNKKkdMKjNuVV1HP2B7RHo+JTJ3W2B6bDFnMmdkcktAaD4veD9VeEF9eDNzN2BVZjUlc29MeDNjfWM9On5VVkgm''@;'; put 'put ''fU9SXzh+dVh8OVZuYDEvR103OG1lTEojeXpweXZEdmp2UHx7YTdQfGRePDNpJW0+Pzx7Umo1QFFUTEZ5TVpBbFNucnYwUkZbKVZGWnBVKWMic01QJE44U3EiVyk8KUppNj5vW3g3MDZCfnQpQihfTF9vVj09SlojRHZCcXw7UkYhV1t9UENVX1ElMyVDb35zQ0swfTB4MHwjPW1UMW0pc3RMTHxZ''@;'; put 'put ''UlYzbXp5TnZ3QGBsWWo1NHchKXNzN25YXzg8OSYxWSt+XyQ5XitOUiNXM2l8dWp2PjVXQ15xSihfTHNtPkM/bHIzWSV9KDR1Pk46SjVvVXdHMXJPfm9TUEJFNj1NQDkkc1V4QnNTTndsKWg6XSFuVFglL0ZpPXNyZ154UDIuV2grSHVFaE99XSlKfDQ6TUooXz45Zj5iQXxsfi49ZWIsLDhsRnp+''@;'; put 'put ''ZHRYXz1tMm9RUjNGJD8xeVZESVJ1QlR8NkhwPnJ9biRXW0h9Wm4wZiEmYnVnc1NiNFRsbiEmYmVSKHVuS3FxbiEmTk1+c3p7IzB8TmJXNF5reE8ofE1mR3F+PzJZKjV8X0dRQVpMUG82PjxOT1F1dVV1PDwhK3FQdXwzMUJyam1vKDAxVV9KPU1JJEg9fCh9Vl9ZIURRPXF6QG5JbH1MNW0keC9Y''@;'; put 'put ''T2VXLytYSWZKSk8pUTtgW109JkF8fm1yLjVpY3xeSmNOKGVhXyxvVT1NL0ZIQythfDZNQDdXYWZBMz5jO20uVXl7PWw3fnMuNztzMnJxXjpIfHIkL2s+ciI+fnomI1FCTDFmQjU/fU9gfDU3VFFZe0pDaTAsQE5lfFBOTSJVYVRoRmNBPGk/T3khVXF1JX5TN2U9OyxRX0wlSTRmU0x8Z1pYcj1h''@;'; put 'put ''OX14R1M5fmlNSEk1RjtJJl0iWEkmNC5Pc1lmJGsweDd5ZzUqRzdrXywmPWtmWTp9T3o6Jm1UKVpWSF9+YW8yfUtGeC4xcU0sNWk+cnM5JHtoLCFzeHVVX1I6eGc9MzM+WkUwcj5NUW4seU00IUVHJilLL2NCcz4yV0xjQDxkN1o+TT54aHNHczQkal5POVtRQSIrcz0rQ2pJVFh8I01YX0c5JS4j''@;'; put 'put ''ZCk+WXBhc3JfQ187RktjVXw6WjZ6QFNuXkNIMVN4Lmo4K0AmZS5JWDRuP1Q0d1tOO3QobTJ8LjttMm9kfTclVEpOQlhYPXNwbWJ+QyFLfCZ9NkdtPkdQPnU+Tjt8OGpxPkZpQm0pRUEiW0A0JH59cm9XXzEvMXdsciZ7RkNdcnxja14lRTpfZGF7Jm1INVUuWGV+cF1dJnQhWio0Q2xgN0k2Kl1F''@;'; put 'put ''T3YkelVfMlZsPmNgeCtwPmtgWXIwQjBfI3c/JiRbTmQxSnNzZXFVbiI0JU45Vl9+KGxzejckQi41ajFqOn0oUlVuQ29uQ3U5WnQ0KiE+SWRpUEZAPjxuSVFgcE03R1ZYREhRNDlZTHx6VTVeU3xmQkhJLEh4QmAufH0saVZfVyxrPitfdSx9Jlp7JSN5Zm87bkkvX3klTnlQPXR+UlJZXzlPWlZ8''@;'; put 'put ''R3cqezc3czB9U19hOFBxL1k3c3lUNGBxMF1Fe05ldV9wPF94YV4mR1pwOkcvUl13Omd8LnUuJnVGRml4VzVENmY3Xi5KPnV2S29IRzc2czV1LD40dWNETDRCVk5XcXo3bVk0JGF8KyhjQSQoSE5CaHxsWXY+K2I4JnJ7aGE9Jll2STwpWWUlWSoufEpIM2ZzWTR3big2Ql1FXlFLayJKX3NgVFVu''@;'; put 'put ''LkZVZCEiQl56eWNmYDI0Kip8fD1FPG1QJX19PE58SyFHJkJLUW5kd21XdD0yVGA1WDJ5R19fKWwiJjMkaW1xWj9+UGg4bTxVM3s8d2ErcX0sJi8makBKeUB8WUM3NH1PbSokfSt3WF93SH1rIyk+fXZpZUpAcnErdHxbWyZtM3Q4bmdFWnwrUml6MXwqbU0/YDloOUVZWS4kLGthLkwjR00sUUd0''@;'; put 'put ''TjwrUmltLih3XTBYa3p0Q09PP1YzbG5ZbjEoWlIrVyNnL1FzUiwhJWd3QHI+a293KEJCTV0uUU4uKGNiRkxBRjB0JUFZcjVqP3dJPHYhbX0ifENHVk01WS5kQyFAaHk3IjZ1YjhPNWE0JFlRfmp6OiY+ailLckc5OCgwS0hbcHs+UGsmJUlJKGJDfiF6dD5daT1MRCN1Q31zdk04fmN5cSshR2N8''@;'; put 'put ''XllzZ0xqenVTcXJMS3FmOXZ6VCU5UHNvUVdda1FveCp2VE0/c1FUQyZpRSxwWlRxNWdrYVV9XSt3IzpTdEN0I1VkcTR3KFQmQnh1NHh3QUoueiM0VVE5THlCRDNiWWp5cTw3UyxNMEQ3Yi86OldSPGpYbStgUnNyVDZ5LE9pfml0XzcwQW9+P1NjW0JpbSxkL0RfSm4yQWxPY2VSTWszLmxXWz0q''@;'; put 'put ''Z0FlYnwjTT8meFFsM3xxPjhYWVtbWitQKSthYkxofkBTSCZKRjRnRyVoYDlPcj5vWzorLFt2flFvbz5idCRUMEVjUzl+eFo2JGNeK1Z1SXUoeXVrWzVnbWBKWn59SlN0PnhkfmRRT2AuOW1Ae1tVRmowcHRUfWslWE1RdW5jUWRNL1ovUm1zMWF7cnBGbXVnc3w9TkVZTlIqcTl9an13MTFaNCpl''@;'; put 'put ''dS92OXNjRDBadDhIVDNAR3Y8WFJhOm8+PVVEVChNJWY/QFVSfU9Zb2shdVNaYHtWYCJoWnRVOlFsRy51dCU/di5XTXEvMXQwfExsIlFkcltaK1AlMmFIQjc+WUpMfC5XPE1XcXJ+XSojKlcrTEQ4dnpRczhAMkRkLFIxR1ZqKD9TcjZ1WU93RGVzISssTGA9bz5oQiNkbGpsYXAwfXpfJVpGZ2k5''@;'; put 'put ''Q2Y/SGdyJi5oU1ZHeDFOZTpaTHZgdT4mXk5RfVFFT3RPTkRHK1VZUCR3QTw6Ln1UejV0VkhiNFsvWS5wOlRefS9dK319UG90Yz81Z3hUYkMoKik2eWF0QVg7UV1KL0owQjdIQDpgMGtoSSllYjZ1SFUwQ0h7YWI0PjducDBtUEljL3sqRXpvd3F0SWhsM2MxMzFnKDE3fFRLaHo2eTAlZXhadW1A''@;'; put 'put ''R2ZtezpadSNbUzQpKVJ9PihJRFJ7IUhdSGcuJEBgek9+JEFocF9+c1Y2T2VnRHBqJUkqcT1NIzFLYCNIQl0xfVpKYTYrZkd2ImZLXS81L0plU1UuLldrNkhvRXRDX0R5WU00a1cpRGNFWSpCZU1FfVprWm4jblVOJSEqNnJjPyhTIzAuKmc0Ryx+ZStXbnx8LzE0T2NFVztIXitQJSN9d2B2OGhI''@;'; put 'put ''NSxWdSwqZyg9dnNUVVVuNihbMT9aeUk/OStKKWooQzY4YXRed3lhTURNWVg5LEQ2fVQzdFo0IXY9dUFgYlRvImU0ZT9WcDM4XiNqX25+MVN1Ois/al1hQ2tQdElOP3pybThIWSppajBRSyJWJmwqPHhPZCZnQSlnKH41RCx4Y2ZKNXxGekUsRlhhYDZoaDtlNlVKb15UdD1aQ21xQHdfbjlLR2FD''@;'; put 'put ''OU46fTB9eGgxPzZEOHxRWmdudGA9MVRjUn5KYDsmb3ZHbSlrdSVCSD8yaDpXRkBeYlQ9OXM0aDo5YzFqVjMhc0hrUjBfRUx8WzxlJDkkaW4rNiliaXxtSm4jMkIhWGFKMWFXZTkoN24pdlVEIkZoNUVJLE5XYXxbaExsRV9MTEA8K3k7X0U2MTNQSm17YXImZnQjPnVmckcmZlBbWHYyaHwoIitv''@;'; put 'put ''bj9HWW1McTh5KWRVcWJmO0ouRCshY0FVKD50NVJTQzBMd35ZVW4+KzVpZkN3WTkyeUBXQ0IlbHk2YERtdVt2cyl5RXJ8N3VjZmp4MzRtQil3IlQiU3JgR1ZadioucXFHLyZUbGJRby5HSnohfCE1NHJzQjpPM0wvKjx9NVJhbjRucUk/dUJ3M2hqU30qNllkMGVSJn1YQ0Y+SEZRaSgxaXxlajRy''@;'; put 'put ''ZENaTypCOEFMY2wwdiRGUlNqI0R5fUpDXyZJdHM7TmM4PH1zPj95ZmBsS2tCOmVUJl90JD4sNkp0fnZmanl0Ziw8S2N1WEVzcW8maT1vZk07VnZ0KWt2cSxtVT9TMjp9OTByX0FIQmwwaFR2dWpIVE9pdDllPXt2LDUjcl5bZmclKFNGSiE7SGJPSFUvXW1ALGIoa15ObD5SV0VwSmdiflg1WWti''@;'; put 'put ''P0RvSkpRenclOHM4UUJsNXFFUWYiLyxERUc+RS5pTn58OjUiJng2UjBCbEk1fDQ9KmZJcUslISVKRntSIjM+SWlUanJOJihlV01eLFZGQWErT1RsNTtjTltLRHthe2RuSmR8O0B7JkZ3R1Ikenc+flNWYWF6bDdwTCE0dzMqakdPRCJ6WzZyfSkieFsoMUlXJklCJFlSdjB3fUp+aUcuN2s1MTZu''@;'; put 'put ''eCMiel1mREo3dzxCLF1QdipqW3R6cmBqKiowSWVCalhDZVd8dUl5InExVD9kUHVXTEdkWlM8P1pJMzhlZH4zKF0kazMjfD5JMytIakAmK0JpNEQsVXxMQk50W1E9fkZHVXNSR1lSZjV2QUZCN0JeJjI/fml8Nk9danlBISRpTmF4Y1ZtbkZhYXsqYCpwU24rYHlib0oyYWI2dWo5OUJRR3pYZyt4''@;'; put 'put ''MCkvPzJZUmp5bzwrUl9gM0JsVHJEM040V2xdRGImPyE0bU1pZzgiVmpsYmZZTjFFYW1DQH1ie31oQW01X09iZVlUQyxpOyZDM3wlb3BFdn1sflhDeF8pRVlTKVRgWkwmRDpDd0ltRERUMmBCVUA3YEo1KFRXel8zVGRtMUVYbGVQJHROL2ZJenklUGt5OXx2dV8mIls4Rj5NcmVwUGNbY3RCRElS''@;'; put 'put ''YmFnfjk7I1FtSlZ0dD9iP2RHXXw+SXtoVUVIW15zXyZGViFZN2JibXpIInNDMXYkZn5EMWdRKj4kOH5jL0ouXiVNU3JGNz1jVzc6U0ZVO0I9OTluSEVYZUBrYTJlejhMS3VDR3NSaWRzUFZFYkQ7SiFQN0dVe3BbQDFuX0RPZ3Q6YnMrNX1pei5eYHJ6QWAseEEqP31zbzVvdyN6LCsoTjYpIVp8''@;'; put 'put ''YXNxWDlCWUx8Vi9OSnl1UHQ0aF9WRzIxfCYwelojMFJjbFdiSkNTe0dIP0hSO0xZXyUvaCRDMj0ibm9QfXpCMFhFR3FhcXNwdFdubUwoIjl0bituV1g7OjI+TSFCU288IjRseXNndGJVUXR2VWg2VHxbRV82N0o1W1YoP30sVipNIm05UCkuflNpYGdISWQzbWVzRlFpQmc7USlxbEZCb21MYW5o''@;'; put 'put ''S1Yqel0pVkUuRFNXKzIwKCtsZEUoSDt8PURwdG9leXlzfm8hNiQ6M2dmeU14ayZ6aGlMJCJ4YVNiQ3RBdjZxeiMpeEJVaEBHIz5FaXBJY0MoTCp+eyQ7dWg6bigjLDs1YCF6SWA8bkVMMTQocD4vL0VIQEEuJDtROCVoOjgsJFRUM0F+Q2RaX1dYLklwL09IJD5gUTFONHJ2LkhIMi9TdzFoYjkv''@;'; put 'put ''SkAkOiJjNFZFMXJkMDE+YUJ0JVd2WH46R2JsQj8jTTNOYHgwdHJeSGFLJjQ+bmp5Rn5GclY+TyMyflQoa1JvaWEseXtCdWFoJHVQOWk+WmYrQlQ2KSJrVzorYH4yWmxaMitZMj8jdEB1Im5uRz9hM1RXbXxDSXd+QT9AaEI8IjEoe3I6OzsvTml0djRsR0BdcltCZnx3OHFzWncpSF0zclM5NGVT''@;'; put 'put ''fkZ7O095Llc2eTJMRkg6TCJiISgmeXM4IUo3KHdDRlYqZj9QKEY3M29WWUBEb0Auc2JaXitDVlhmJCpCT3lNNzgiWFk6QDNNT3VRSl5LTFsxR34mViIrUlg6aXghPnB4ck03Q0lSZXgkfThSdT5WIVp4SERxdW1XNWtFPntLRmp0T0ApP1FzYFBLQGRNbVt8VVtbJkFYbHolWm1LISRPeFBnZkMv''@;'; put 'put ''UzorIWh1TkxqKGxpb1pKQiVFQ1hEcWdSd3NmS0x8dWgvam4xS2pNY0RSIWUrInJILj0uZU5WfjVKdDMpQEIqaXhdYF5EXlFnSkA3KXxXU0IzZCphMEZKL3w0eTNxUWhyPXl8bHh3KT9NSkkkWjE2e2J3eiQ2Szo6fVNnT1V3b2dgeURVL20+QnBhSCsrTUNeZWpATClAd0t0PkJVYDd3aCYmXTZ6''@;'; put 'put ''UFglWlZ2c19YLntyKkNOcjAhVDlJY2MxJW49UyRrTzd1TklrVlVtIVNRZzVZK1JEMUUkczJvV1tlMFovfGFUbkk1ISYpTDh9NClwPmRQImJfT2Yse0xfP2J+QEtpITxLOmgmflk1UjlAYXUwYFFyTkwmWiM+Q2QyLHohfDZNLzdheWEpcHN7MU1TKl9JUGZ6KkQqZ1FMcENSWnNAT2cpQV4+bGJQ''@;'; put 'put ''Ll9bQzo9fTghOyY4W25dYWxwLFZPZX00Q3BMelVFRSl8SEFbJm1YVk4vQkdmOHNFaVdPPD5ydzl2ckcwLG9+dnRXblYieFptQWVWezthYWdYVVIoeEh5cTV8OEphZGg7OihQSExITSF5LHJpVCZ0azEvKjcxXU9aLk0+XVBkWSthUU9ST31JOVpbalYscXJyaklRNFVOQyJZUUdWZ3gqfC9OKi45''@;'; put 'put ''eUAsITt9a1ROT1JpXlhuLng4QiU9eFh8PipdJiw2KVohQzFwbDFkI09zImI5SS9WJi8pfj5rNlNUQSFNWyRfRStwZHdSTS5vITZfOU9CTyh9R0pWRTdLLyVtQ254Q31Ady5qczlaWG5AWkRUdUJSI1hZQltHdlREPU1hKjBzOEwzVH1RaFpnQSpIZm5GXmh1Z0NXRV5GdH5bV1lfUC90MVAvRXRL''@;'; put 'put ''Y3wySlNWRXRSREt1XyVhbCZwfVBLMHhZPCI+OTJeOl8pTj5zZXt4IkFrdFtMKytyOVMreVMweUZKe0U7SFNnTHRZeD1JdVBRZG1BdWVJX3lhT3dlSGAoI1B+KGEySiUuLG9fRERLTUVnLCpoQEZSP0p1em5nW044KG0uKm47SChzfj9KS1VZcHd7SVVuSTI9QiJoJlQ7OWZsOV5xRXZOSk8uOzFP''@;'; put 'put ''ej89LnhhcVM0TFp4Pi9PVDdxcEIhV0F6M09tLF8oJHIxeFBqdlQqKF5KY2dnI11hKH0iXWdGIXxzITtaSStMaCR0LnNCYTIoTUZrQEdjQXNEaGlOOi9hIWx4aSwifHdLTmlrNkNEOXMzX1tTOiJlY24lUyk3TUd7aFVSZ3NZVkIhfipkVG5rQU9XWiN6SyJ+JFckTmgkbGdfTH1+Pm9sPjAzUWZq''@;'; put 'put ''NiJ8OTZqcz51IkZoVEw+SUMsJFVEfGVqN2EySElkRmRYOWtmRzc8bltzenkvfUVkUzYxWHRBYll8UUtKIWtwbCpBTl12aHVkLFA+Qnh5NDFfNUd+L0tiZEh5c1dafVtJT2NKX2tFaTUkS2JESGpYO1Q6UWFILEJXSXdsflt5TEN1JiJUSHJgN3dYfEFLbGlqTkk/Mj5EfWQ9JEtTeU5PJXxiLkko''@;'; put 'put ''PnR+UWlOfn4+Kj9WVnQ1MUFveT0kb2Q3Jm1QTnIrdV1hejBBSVJsWWJ8X1hQdk13czldIzlKJmEoTCZydG9yPiVvIktoQl0xRi86RTl6aWBgKX5jdSN9REdrQnxBWHlyfnVmV0FiSGUsNyxOe2hlfDF4SShqQytSKXpreC5RYndvTEdPalJXZTV4VXx6NTdmQloqaDZ9LEFYT0Q6LGE+WSQ1bEJJ''@;'; put 'put ''bFlfZSVsYSxkcz5PVFU2VlopOEVMZkF5TUVaWER1OXJER3B5eVJKIklsckRFJV47MCVGV0FwRUMuKlZJXSxuajQrNVc2LiwjYjtGKHxaNFA/MWRBQ1gvO1h0eF58RHpDQ0U6XzBBNUBJVEluY21Yajo1WE07LkQzdFk0SFAlTExPNyxNKC4/QUY0QTwvMj4qZmMlNUlOKTVGLkxUTnhLcTFwMEZ0''@;'; put 'put ''YzR1MjNfaEVlayxob0kuYDlDW3J8KTJMJl9vZkVSVDpGd0VjdnY4bUROaDcxVXE2aSxDfXYxbSFtYWx+PUdeJjBqNVhIKWxLZXopKX42V3VsPzw4Pn5eVE58bVYhPzlEayw/UUg/bGkuQExSOz9kfmJVWF9ENX5sSkRpZSEkYT1ffiVaUH40bDhgOFB0YX5ZOXR4KzlFJCE2ZTJ1IzNdKVdFOEhk''@;'; put 'put ''UGsuOj5PJDdycCo0cmxHa15XRixfckUqci9DXlF9fk9bSl8rcn0qRiZTO2o6P0BLKjRiIzheSEpSJlRaUUBASHRVdUlSNFQlSWpOMmlMd2ZnRUFPdDh+TCs4eyYsQFJIW3RTTDFIYWokWzZGUlNqMEUwfTdlOyY4NWFROHpFaVBMZlMsVit0ZkQuW2t8ZDZ4PilNXTE0TzJHVzs9dG9GdTVlSkcv''@;'; put 'put ''ZShbNUxxdFMmYTlCJHZraH1AWkdtdVAsUFBsfGpDQCZUJG56JVpKSUY3JkI4WmhDLEltbnpdPjF8TUt6cFJRYE5pKSJUQEBtJj98M2IhKzA3Pk5pJHsuQ2p8cU5+JjZiJERoY0Z2ZG1jc0ZxVTl8cmdCNkc7dEU8PX4icFJnaU44emdmQltqejhpWl5xTnN6PCZ6NixoazZpIi85R053RS9ydmtF''@;'; put 'put ''VGRkeEljK0dBcTVTP1JRN3Qyd20uLEVYWCthOF9GeUAmTmV1MWZEbG54RlVEZD17SmhORHJdKSNBPT5ReGJYMWpzXVEoOW46SjE6Xls9TTUpMU8qXzkkTikrYSs/USg2bjNUWHF7YWBNP3Z9bHtAfndwVilrPWcrZV5eVyU+aGhzIVlqczZ1PE0+L25UIy5xZklPRmx9K3Isem4+e3smYjpPXWx7''@;'; put 'put ''PzI/aHkkL1pyeG1aUStPIkRzW1p8ckJHNUx+TCR8TlNFYEhpRSk7P250Oi5NKklJKVczVWw+akt4ISR+VSVrfFgxSV1JT3N9dExmR11XWWBQYU1ZTjBBImM6bj5FTUpZQSJ5ajdyPmJ1QDgzQXRnVjYkJVo/NUQySGtecSUvfW1MRE5WNiVRM2NmeDRnREpMdlcqNS8xJW1rM0QjYkwjaj0mQl1Z''@;'; put 'put ''Tzh6W21DTyhBVGtSQDIhP30oTSkkOz51WEx0e0JrRS99czUobnlSTFNaMnRvK1pkUlh7eSFaUUx8KXV1Vz9XWmoiI2B0dWYySCNMfHpIJV52VHBKfW1nWzp2OjRLfDROdFE9dE08PmVlZH1IQWAmKXRoTCxPT3Uwc3FSVl9XNm4yVHArfXlqQihQQzUudC9BM2hfI1pUa1taSmkkV34qflNRYE9O''@;'; put 'put ''ZGlEYSo7JXMvRGl5TDloWV5ZITIobDBiNjhnLltGWyk+Q2lGJVoybXoucTAlLyRQNiQpZ0U2dyVCOXVqOnsmUm9pUWpnKT59QTVnZ1gocCtSLG8rLzV9c2pBT2VoTlR6KmciUkdoI2ZROm4pKFpXbk1KJnRhKSp5XzszUk1CcD5qOmBENW80ITJ5aEMvMDtfdmEhNGQwXlUrT2M/NH1YLHJNQXtM''@;'; put 'put ''VyFNYFcjQFtYS2BvcEgqPUp9N2t+W1FxPktpaVovREdpVTRDTXpyYTQyeEwiL084NX0uVkdNTShjVVFUfi4/OiYuW19RcERaUl1zd25kWltMWz1xcV5JRjE6K09pPjVXVVdfVXR3SnMhQUFaIzp0RXB6LnwyN2s4U1JVQjJ4X2loVHFSWmIwIXN1TXMuMVtLM2h0KjRkU1R9MUReWlpiNls6UUdU''@;'; put 'put ''Y1NAQXhBYHlyQnpyUGhlR0NHX0M1eWNJdC5IbFMuQnMmYjZibGlHM1FkQyl1ciNYfFgvOlEoLmRVX1h6QkE0Tyx8MTJSc0YrJVlTc2V+WVVqeWREa2EyYC94cl00MUdIbWZuUkU/KXRUakdgKSRydV1UQE1nOVpGSCh9Kn1KUjpZfChNcmdRc2d0KGM1QVFGfXNASkg/PitZakp3IWM6O10wRD8+''@;'; put 'put ''aHFMTXxtSCozfnFEfmNHWmNETmYiZX51ZTElcHdnbUBMfG4uViMqQEl6QX4+V3p0X3JXd1glc1ZCcHNUP01xZjwkYm1IKkBmQWF7THEjX00wVnpENDtje0BvSk95bVM4RSV8O0BgJmtYWlJ4RGd0Jn4jQlRuQUFQKTg+NGxZP35lcyV4ZH5MNT9dQCR6JGNnRWZPeGlseGZ2aEpFQS48LGhgQjNF''@;'; put 'put ''LmFLWWlgbTYyQXZEUVF5YXRaWVNIUlpIdnZseC5Mc3V0QkFBQUFBQUJ0LExNZm5MQm5BKmM/cnhncVR8ZkMmQiJgUks2c2NyRCJNPiJaekBQZHFxVEVgLlJSSVJbLk0sUzRtLiN0N3ZecGR6JGRAbDV4VSsxdD9eZU9TcVd4KDNeUURxdVowI0opSWheYixgPEE+JF4pT3ZVeCNJI3NNNDM2Mn5F''@;'; put 'put ''Lmo/ODNmJmsxQXhaSTdJfnFmXWwoancofSVlRXxDPS8wOjFYfTgjW0lZcFttQDMqZSIsd3w8KzF7IjBZRyNfYFssSnJSe1cjSmo9dCRLTyI8cyohc1MlRWNdJXtAbnIyfD9tSFgmOHV+UXJvbW94ZWowWU5lck4/cl86VTBHP3xadVlHTXF7bio6eStbKWNuNWhOPEBXLjBPMytXZ044a1U+XWEq''@;'; put 'put ''dUEoa1VlSVgyS2h7KWt2Tz5oI3RzWUxUOV5rbW1PcHFdbCZHcDx5ZF0yKklJUzxLOXk1JDV4dXxdNit+Ni9tUStLOD1OOzR4bkA7cCVKbih3TDJsLC4rbi8zUl9+PVkmd1t1L1BBYEN8LkleeVB6eyZ2N3xLIVUhJjpVR1o5fSgoV3ZhVmVwMiRlRExVeyxRfXNzcWpPKCxnd19QZng7Jk8rSUJO''@;'; put 'put ''O1B8PToyM29mJS5HPGI/RjM+c1dkZ0pldDpDamchdF1tOnJ+LkVUbFJicDEuQX4uKHQmIy5dKk15T0BkNUVjXSxifFpSVHNOKnoyZFBXQmtpfkk2VXMocW5BQEtSNnV0WUlwa3FYVG1VI0RLel1xQmxKP1hFV1hjL2BRRU1YbkpdWCp0VGVdZXIudUArJj5wfCtHMlZJflhAfHtIbXdCeUkkMTwk''@;'; put 'put ''MixffG1AaUVNcDZIPlZpdlksMzAxRzgvTG9yRjg7Wmk+c1pUOTJkKjZCbzVeVEghRmIiRndGViVMQGs4Sm9FMU0xZUojTVJ1e0QwO142ZDVIOW53L31PT2g1QTxuXzZpZF1VWGkzKVklaFNqQFB+ITRVIUZEYCM7XV8sRlhVOz18QDQzfng7dnEqOz5lITt8eClObip1OnJsPUJxeE9qckcvbnJA''@;'; put 'put ''KWtWJks/MG84Yyosbn59PWA1cVVoXnlQQUZyLEVVeGM9PVZ7eHNqYk1tRjA3WVd6ZiZ4bXIuJEo3UCleP1YvYlN7JmtSWEs0bzpkNl5LV34vXTN2PSE6ZSVMTGtla1BBRjlbJHg+ZFNNR1khNiJuV0gxZT9qRDxvc2pwOj4xWzthbXtXXyFhMl49djBSUX53akEpc2YvbiMvaENBT1BZVzg/bW9N''@;'; put 'put ''QFBSZ0ZZX1VpYj9kZlVkOXMjTD8wIUkvVD5aK0xqPytCUVJhU0tjOWZRfSZCMTRoSGI8Kmt9MygzeTtlNz1TI0J5bEJsa14uQmFLVUZmbUBUWiV0aVt6fjN8bi4zZTJJKzlbIz98KVVKUjh+eUZ4RHtKZW42NC9lPikmQkBbYnlSXmRbTFRlVyNSWnkkRyZQLC9YaFdTOXdWNFE9SX5dI0B9SStF''@;'; put 'put ''dVhacFRAfm5EOlpxR2UufGlsX2pJZHlvNyM2P3d1UWRCRSUhKGR7c3puPU9RfHFAUndIVFB+dzVuZilOOWEjWltRfDptQ20kdUwuaiRxelE5NXNKQFczIUB2fUJBWWkoNjJ8S2VWblFyIntwdUNgeX1rSz1eY35fXTRjNV1+N09MPDI5YlBgK29SQGciK1hRbVs9bX09SzhmZCg3ejA6dH1VXnZr''@;'; put 'put ''TD0xc3BwQCxoVEBwWlVILCVnfFtVLGRFRSpMUWF7PUd3I0ssWWBxYE95ezJYbD0/KyNgYVpzUnltOlJMYlE0YCo6XmJQZGZNUGQickg/c35aJiY9cGluX2I2cWREWGFMUVtuOy5hbnxgUGM4eFQwaHZCRE5EJStiYTlUVUs7QTF0W2A4fmJVJWRTbDRdZD9zS3dzVlkkLllMJm9JdE9ZKX4weHQ3''@;'; put 'put ''N3wmVn59aE8kOk5+dWckUm9+WzU2MiVyWyh1Vjd+PzRISzk0fXJLNDhmWTs5dmdIZyZvTiExeUNgYXxUNjYqe2ZzbDNiWmh9XVhGQylbIzxeV0Y3TmUrcTJUcnBST0B9RCJnel1jcj90NGlmNmRWVD0wJjslZS5RPk98KH4oPnBXTFhXRGNrbVtOdT1eNkY6KWVTQDNZL25rREwvcnhHeXhDdmhW''@;'; put 'put ''JDlFMj8mUiZzK3guSGBAPTFWKUJDazgyR2ZeYmJ6fCNaUTx7ejlpbDRAQnVEWndqMERDOUJ9elUkM30kdWozKVUmfDJPJHlbPiRBTiVLOCYlcCRHMEoxRXgxWll5fH59RyNuSnJbU0piNXNEKUc8TmQ7KU04QHpsVldMSld8JVomaXF4QnUme1s0ZlExc1tJTV4iMG4yUks3fi5pckIvTz5Zdz8s''@;'; put 'put ''XjRYOkdXQTVgakImSCg3dj16JD99bSNdPloyWnAyVS5ydD0/VURNU1BUV2AjakYlVkIzUVs0Vj1KWlF5Sj9NTEN0cn5UNm9jQ1dfPD9GKEdbfU5TT3t6RFReTHZEPE9aQzh2SiVtW0AzZ0QsdjQwRk8ranxWbV1KLj47SXR8T3Y9dHlRVFBuXVQpSmt6QkdnLiRhJihRW35uX1gyKmhtOTIsPypR''@;'; put 'put ''TlQlWU48eylqTz5lY2NtMmt9OztqYnd+TmBBX0Ihel1Gcl9yYVVzS2VzOEMuUWF0W0ducmV3WGtbXVApdDtuU0FWZn0mVHFoQCZMYWY7N1I/PEJASTxzdGxAeV9pViZGUGcqPUdsYGdwLyNZa1dweG5VcCxyYkp8PmxrPHJsfksjIVk7cE4qZE1OYnB7KEIscH13Tjd3N3tKRXVeTG57NGc6eSoz''@;'; put 'put ''Wm1fb2pReyN+bkBoVWxWYnwxUT5ebzlbeF0lPUlfRzE9fCtKXTI4WCtkZFNoaHtdNyNncEg5ZzE/YVZFO0UyaXJ2a2ozSyhffnBbajFoVDVAWGZgPTNtaSUjNks0fHp9JVBPT1R7RXQkTXVhaUguc3BHd306V0o+PGBqYX03ZX0kOypjXl5pZmdWbGxUQlEiVFMqSl0+VThrJkQ5fDVrd3N9Zng2''@;'; put 'put ''ekBRbHhxayIhYTRgfkApREtlL1RdVX1yelcoPXVwMCVhLllGMSw6ZkMmTz9bWDF9PihqdkNlPzEpKilvRURKLGxQbj12PGwsc2ZzNWJ+c0k6fHRnaVRWe1o5PF53aCFhaD03UWk1VFdsT1Y5KTRgU0d+WiV3cnJ9QntqaE1VKWRJeSU8IT1jPnFUT35sTigmPjRTITtUPCR4RSpuL2FCIjZmYTxv''@;'; put 'put ''cH1FZWYpViZAaVIsVUN0PV0oOzYwP0tqLjVgSyRyPF9HckorUFZAYiZCUDs6IyZZU1cufn1fc3BNU3oyZnBrUUNTX3RgYkVdVVNkKWxuaEpNRExgPTh7fHJpI0BSPXM/Qml7MnBvTHBYYFh7UEFGN2Q4PXl2TjFPVWE/eTBCWmkyInMjZElEMHtoI3JxRzRMMTNge3hdJFA6VT8oI1d+KCNkZloj''@;'; put 'put ''W11BeV8uTU0lcyVBXn5MeF8yenNsVE56YjIrY2xALFl+ZnRNImRHIysvTFJzKDRFQVZDNCx2WGFmdUV9JXUyZ2EzS30qViVuMUJ4cS5yQ091LGxpIStUbEt2eHw5fkdmdHF9PCU+WiZDSVB9L1RucXQwe05BPzRtO1Q/NTI9YnBXKHBrYCRWeVIhd1BMWll+P1RXNEdvMmNPOWQlTyhMXjhMVmpp''@;'; put 'put ''Wko2XU5eJF1CITRQKVJ8PFlEckRxaDYmcHEqLEkyfipSKFsoUD1TO0s4e1l6bGc1fltvU29xdHhjSWlpMkQyPTl8Slc+bVosT3g+KW9DL0dyOVRNMEVFPVdZP1RbQGxUQD0+JWJucW8leWV5UitxTTp5LlJCMDAyKUVdNj96UndOfSUoOk4hPXpDOjB5STVEQHhIJGVJb3RLQ09NNVV5Z2YiI0dx''@;'; put 'put ''MStiK1t+U3FiXyRkRW0sfG8yfHB7I3ZBITdhKTM6bjtfKjJRWmd4WV9VV2J6eHxHYiE4I15uM3cwRkl8TUpjRmNhX2Z9JTNOKE8hPF5NSV8jWmZ9TWpLaH5EImc8NnAmP2hxcltuUExGeTp9Y11yaChkL0B4cnRnX3pTUHo8bDhxfVVoUktEIT95eCRbPWRqeEZJM20jKl5TO256ZiEhMzJHOzBF''@;'; put 'put ''L1FGMFJvbihTcj9EVGlzSHkvdzR2XUxLY3gyXXB7PildWERMOlslTCw2UDFzS0tkR1BgcDImRSFzdjBRIXlkOllfJHx7OkdRNDNtOC9SVlBaUD03aD46cmdXd296Q0MjS3g4X1RIJTRxNiM9cXlvQmErcjM4Om4zPFcpT2pKc15WZDZZak90VWwzSStVKDIqVSV+KlgqcDUpeDFsVmY3ITxTODBl''@;'; put 'put ''TSs+YElEJFRFaUUxVz1tdkxKY310ayh6ZWYhLl1tPiM+UFg/Y0RveWs4SFpSKkEwPFtTSW9pVShAQT1QTktfIj5EYVg9OVVaT2ddZkhbRGN4NlZaWS5rWjkzQlh7S35gWXJZbCFtP0kyV2VQUXR9NnkqZlpZRjFwJXAqKC54eXIhUVFIWEM4QXB2QUR1S00vZTg3Ym59UnsmQnFtKkJJRV5UY3R4''@;'; put 'put ''UnAvYjc+aH5xMkRiO1UlSXx2fkBscDgsQyN8Oz9QKUF0OH45fm1MQkZsKEFMOl1BInpKL1MpMFshVH4wIkJ7c3FQUjsxTTx8SWc0ezQlLmJweWNSTDd0U3tucGtpNlIrUm5MXztnT3xxfVJxSktqTUx1SzF+YVN0W2FMRkIuUlc+NVpJQm44KHwzdHtuPWZkRT0uUWVMfHokaylORUlyJjRpbkln''@;'; put 'put ''UkgjdWRCd0RiXi9uW11XfVYsPjFxcWZSbDRNO3lvfHJLRkxmbVRgYlhsMUFHLyNoekttbzM2XlgyWmA+W1Foa3pSQ3ErZGtdK3svZEJXb1lfTVlaT1Q8KEEleCZ1T147JHR1PVElKXNyeV59TS8xRHpLQDtEcnl0LD49anwvPWdIVjk1ditDKnc6PCk3JmRMYEpDdG9IUllycTFbbkM3UWh7U00y''@;'; put 'put ''b25fR2BZV2BFQThPflpzZV9FeUdoYnFoN0VCV0UufS5WY34jXmgzfGtMOnA0WTlLMDtoJCRpJT45e1R1XzFndSZOQkUsPSQ3QUFxSEI8ZGJLOVRROUtPVVQ4flZxbDNqKHlHd1drX1BXemJoKkwmJVZnRDxUKz4lVzJ1Z1lPXTdPcmdyT0F9IWx7cmI/bXdwTUZSXUw5RFsoQURCdFQhPUBvYXgx''@;'; put 'put ''eTtzSyZ5U1U6PTp6Y0MlI1NiUjYvZi9XW1ZbOSFMSytUWGJ5cFk/eXAqXWlrLnA1Q1llIjttMSQ4ek07JGtvLl5DRjxzU0Yzc2xSYSlSTyt9eUlJTj5peTBXTFR2RiorUihHNXUkWW9RQDw7KUs4dERvTXg6fChjKGFJeF0kUWM1TV0jUl4zZUJOQllrZFMyPyMhV2Q3JkIjXn1rP0hDJFlza0o4''@;'; put 'put ''RWt0PVchU0g0UUBMd2FxOUlTKUptZ2xnOHFqeGtHVjtVU2BQKnUzeTNOaFJdb3BaLFdCdz9aNE5NQGl2dXckVjBscCM4dXFUSyhUUz9yYVtTcl48RElPJnIye3FlUSpJIj40WTlVcmgoX11tfjs5Nnx9KHVAXkUiejFlXmJ3OjZWYyRCJExtaDxdWXJ2a10lOk50Z2d2Kl13O0gsTV5kaFJGezBE''@;'; put 'put ''VmZXS28hW1Y3KlN3TS5fJk5xRjBLUSMpMnFCczFLXl1aLml2dHs2JCx7SUdDQElyXXVCe15gKGpOZH1bais+JEpHZFJoMSRpcFArPmEsOjhRTjsvdHFwTW84QFF6eit7Vzgjey4rXTkyen4mKztEO2RxOD9RW10kczlfYkooNWM7PDdwTSxuOENoYTV9QGlZO01Oej4hKFVfa2hbKigyMWE3XXAk''@;'; put 'put ''SnFUcVhTW206e1ZNT0kje2JjeWJ7b1YqblQuNzRDMyRGa0VjJVpDb1tqKGRRcXM3Z1UpUVtMSlozakB4ZlAjaEVyJD84eW0jelEkZUJqbUhFdTwuNndtJUhlLkhJWFRjUnBtYU1HX2kmKjNzIVdYXVlCWzo1YiZ1fipKSGEzUiUoUiZyTi5uTVorNH0kWzI9K0NwT14veislW3p7YSEwfUc5JGAx''@;'; put 'put ''VmB5eThNWUYhOTx3OjZlTXl9SnphZF5NN3FxK3V4ZCJVJDRuSlldX1pWdzF+RkxHW0xbY05CeTpuUyo+e246ISEpQUt4K3wxNHF8KyMoWD40OEgoNHViU3JfOS4vbjA1NWRwdm5dM2c2diZabUNFbElNUXhxaiVOLkJIRnNlMDssdEg/IW8hO2c7WU0vKStWXn1vSGw+JWB4Qm98LDQrXyEwPlgl''@;'; put 'put ''YnRYSCxsL0R+VXZIeXE+QCkoS2dsLGxTNWhddXk4NHwze01ELkZqb2p2Z1slJFk0OC9VQTJufj0wXzIsRH1fdjo+Z3NgRDhSZT9bMzMjSk9TZk1ke0dzTFQ4aExNTis2YSM2cFpnN0lrUl8pUmxwc18jVH0+cjpnc2w0aV8sSkhhSVRlQjcjazhjc19FTip5NnR6aElLTTN0LD1LV0lIMUo2b2NC''@;'; put 'put ''NmUrUWpFdjVBPFQ+VDFtcm4xcF94ck9qRVYvZSM4TyN0UStAbiI1XV0vJT5yJm5HRVNVaGdVVFV9T2cjI1s3dmN4NiEjbXkoZ3IyMWlIdy50VXtZbkhldmkwMyI3UnBhQnA5MSY6PypSU29yejlILFQsZDUrWSFgajtfUDtSM11QalpgW3pgdDUvWD54R2BkZVdeOTBAIkJ9W3wzLjs5SWhTbUl2''@;'; put 'put ''Ki98U1U1SDZDYkA1bisyKjR+Sz0hQm05ayU5WitIanlxNER3OyhmY1RWY21vOFdWaihzNCovYFk/aG9LPk1GRSt8JXRWOClGK3lFck9gJEYifWJZdCJuKChBM1NycT13Kz95TT1RS2VJL3BQbTpvLCRbRTVuRz1yNGp9PlNMTWVUPX1scVp4T2AwfFhOJHhZbUBkb1FWV2MvL28rVWhILGhuKCNX''@;'; put 'put ''NSMjPGtHPV4yfnNVaGU7XzF3S1s/NCFJMGlRZmZsNyVjNVA2YCNgSkMmQXkmVF5wVUxrdFNZLERYVTFuP3ZqS3RQdyshPmlbRXtMSGIqdCgoYWk9ME1haDNRMCZ7PmtRWGkuPm87I201JSUkcTUuMEF5b352Ni81fXJwUk80PjMxc0EkPV1BdWNha1QzbTEyKEVSNm9ULmVQcl47akRNTi9FaFlu''@;'; put 'put ''XkgrOUNmREFJc1ojfDUlPl8rMVFTK3NNUllMPTN3Wj0yb2ZMZ0VRKzRbS2crTHZaLkRed3E6WEQod2Y0MnRRZzgwNVhpWEI3T2ksKlp9cDN+WStkOiVjZy46dToqQFUiPUZjMEFJamJJOkx0cntSQiQ9Jm00Xm9hVVFjZ0s+a34/WCh6Y289enJiRmBIMVk4Mnwla0ZxJE1jcTtdZ3xNJT94NHE1''@;'; put 'put ''T1QvM3Mue011PV9HdGhAYCUpSjJSI0w+Y2pud3dHeSRHLFQmYjNsQ1phKWpTUz5JI1ElckZKbkRwWCVmMnNBIlkyNSwuX1VHb3ZEfWMwYV87OE5YXXlScz42WXxITXxqfldscCxqbHM3OnlSOzB+SGIxXSNbaz5Udj5oWnxbPjpHdVA9Yj5bN3h3Lik1JXYhbTl8KighVEUwRmNdN15LP09sM1Rl''@;'; put 'put ''RFIkSWpzIWg4bHJlUD5RUFZjTT0yLy8jKz4wZXJtQFl5WjtOb2YpS2BsJWhvWXY4aXBoeE8kKDd0fiVdKmpuM150Z0xLWCF8TGNSV1VMPHs1WlFBODteM1tYeVNmZSQjamErcEssQy5XclM+Yzk3ejJ6LzFrOjNmYUp9KS9gJiU+RGcoX1dZWGJVV1Iqe0k3LyUmWU5PcCJFcn4qaGMzKFc7enBn''@;'; put 'put ''PnYxYm1mQEBNN3czVSN7fTUuLnF1cH5pWm9xLDBEP2VzU0FfeFlyLnslYFRnKWJzOCZVP2kqIVtJTD57RXJ8YHQmLzBNV198W3t7N2ZnRUhAd3VVP151ZkJraVJrPk9sfFIrPXNZKFE/WHxEMSpnYltYd1JyISw5dCJPK09tL1NfRUNwaSNTKF4+V3tFO1dbN18oPnxqaC9yIWN2bmBEXUB2JXJb''@;'; put 'put ''XkoxYyw0NFJdMT1NYXB9TUNdKCFtP3BKXy5pfiV6KCksMyY+Vm1kLihdMiprdkxvUGlGMTArYWM2MDt2aGdjPiw6SEY4QiJvdytPX3YlXWZ8NnYzdCZkZGM7ZHZoNGQkX2toNktTOmoqcFMzSERWbVd1Y0hvPyoiPilbU3RWZyg0V0ROc2VacWpYNWprOWVKIXAlQ3l5LzIvT1lRVjFHSGl3aF1H''@;'; put 'put ''ay96dlNxOm0oW3kuKDRmVXJTIzYyS3klSFtpNjNzM2VyckkzYHByUUdwOXcoWl48WlJHcE89Vzp5UiwrSUVnMzsxbio5USxYZXNKeUsmZ01+JUNNOTg6NnwmdHN8NDhtKmRWZ144TiZbWXpRKlpfd1lOZD1UW1ssUkpGO0l8SGR3d19gPjZHIV4wRGthJUk9SkQidmo/RntvVGRuKFQ7LnBGbHUu''@;'; put 'put ''Q0V8YzB8XmApdVtgSCR9KGJWQzdsVGR6RFI9aT0uWWc+dmdML0FTLzFFNUpLbXZLYmpwMCRJOWZWa15zZWVLZDNHUjBGMHtGXiJHS0cma1pBbXpkd3FvVGpdRmp5LDBecEIoVUk9Pj9rQ1taMGEyKGB9WzY0amdBM3JwMGNDNH58eVNzISQuZyF2NWAhJjNpUUBUW3h0Wn5wJFpVSFRPd0xsUmNk''@;'; put 'put ''VU45OklAP0pfdXpINXFQaTNQQVZLLENfJHsxLCoyc1VMZGNqM3huKFF5JFNdZ0x4aUtnSzxmZjo2XzlMRWVXcTlfO1UsW3tfbC5aZjk8WmxHWlF+WHxROnp1JWQvbjwoJkt7M2FZeUpIb2IrSU45PzRGfXFNQ0c/TXk/YElBa0QkS2x7VCRQIVUsQWk9cHF0Jl4ySGhFNVdaVV40KURuZmwvdGA+''@;'; put 'put ''OCM1XSZTJmtQdTxjXXI5PlhFSUFIdEd3VDJadX51KTVIeUJuVDJeQ0h2WXZvfDYrOixtIyw7PVM+IyhbKWBtUkY4WUZ+TjUlL1s8O19FJVR1Q3wlMWJVZWgyZHN6ekN1KUI2bWFZTkJ2YDV3JSQod0hzMTBNYCQpKTE8ajFdNDw/Z3FUPU1Ydj5YQ2h5WEAoO155PG5Ldz9OayFbRXxMV0IhekMm''@;'; put 'put ''fi9LTjhSS1JgfS9pck9aT2xRPHk8TWxLPC5QWH1MNEc5QCIoLnJVMWJFUUJ6M1lhTiskK1lNUzwkayQ/SERLZVF+KlZwSUtYKkYwO0R1T3V2R1FRMyxSZF1UMjNZYzxDXzsoPTJ7YkVpPnchdDAmT0Vmel1OQn4vMC97KCg6Mzk6SUdoJXlVOi5KKSVnND0pOl1rLjZpQ3wyc3VkXXtVOEFtL2Z9''@;'; put 'put ''NU5nOzdGfSRxd2hMeDA0ZHJzKzNya3s7YHJIVU14dHliemBxL3t0Z2d9dkB3Om8pLDxpJnFwSTIzRjwhaW85PzxPRTNNTXRDNWBiTV9DMS9TckwvTTlacS9nc1JqJjRFKlB0LH5iPSVxPGFddjU3NH12IyJZY3FyKHFHUCQsc3FMYj4iZk91O2NJI0hYcjh3Z3txV3V2Rm5IMH5xXlkjJURkW2Zo''@;'; put 'put ''LHd+KXZvZlk2R0shOm1UeEIyU3khd2Mvb05RREYpLzd2eyxuWC5+M28lX1h8U3ZzVGRlTngmUn5oVzxHW0VyXV5rbFc1dm9KRU8hUXJNdWooYDJ9bXppTTxuTFQ8fWY4RyhIc015LiR4e0V6S3VbYC5VQ2x8elNre3xzJCpJR3hGOW1kW0c2TV1rJVttKnhnMD0mdjc+TTg1dU5xR299aVJ+djNh''@;'; put 'put ''UEIpXVpVTHkxclNqdXtiXU5+X1FYNmd+alcjJT4ibH1FSHJ3cjVxdnI1MDpibl06MEgoIjZgbCt3RyxsOnt6cFB9PDM5PDJSR2J7aFYvbiF7PTQ5JSQuZD0kVWBUaEl7fCs3VUhhLiVBNV5kZCVibns5Tzc4VmZ1TnpURmNSTiE0VkBSNDR4RzJkXVUwP0ljPGcoNil0LnxuTkteNkMsTm5mMlhl''@;'; put 'put ''Lz88UlYyfXJDOk0pUk0+RXdFYUJfV2BlY2tuTTxvQk1SJlB2ZGxgZCkzWEw4Zm15NiFyIlVZKTU4fEJfKVFwYCYkIWVmLHtGW0NvMHB1JFpvdko2SSsqVn1zbCwqeG1DOTNCdSs5XjdmIzEkK15eKWI3aldOfCZJU1pOVGB8S0xnS2M5eSxjU2JGV1QkOis3ZFp4aiM1ZTNmMipDKHNjKFF0LE4x''@;'; put 'put ''TSNrLyRQMGNxJCNzZDI2fmo/R2YoTENEUnA9VGAjV0A+RV1yKkRMRDs3W0dXa01XbEtMbzlTaVFbaWVOci57VytqPDRvRSVgMi4hUj0zaGVHSSJMT05nfjoiKGFyaXBVbzVlIjVDY1FHV2NqLFYqNGk9RyZSdnpHNUAqPmRgKlkzSlFEPVVkK0VEdTxEKntOPHJIXyRBZDNZfVdnTTJePkJjREFt''@;'; put 'put ''S2xjbywsSVsxKE1IZXc6SWZKOlhNJWt6N3tXZFZFOnNAV3BiflEhL1kmKnR7a0EzSTxALFExY2B9RCZDPWZgQ1ZnRmt1YEpmLyhUKVtaU0YpNSsieyJ6flB4bHFEK2NHTHBrTi86ZXM3fFlYam5Ka0w0e0krais/aEk9JnNvRkchWV1UIzc5Y1sjLHVmUUxlbnMkNnB1SV9AUmJHcTgkNFlURG94''@;'; put 'put ''eHwhYjJTQFM0WyJ9MzB7ODpjTVpyfTR4dGN0SEdgMlE3Z0J8Y3NId2BFSz9rMjFdRWZtan1rYlc3eSwlbGs0djUiLm1UVFg1S1c/M3xEUCE4TSlbRSpde3U+c30obDkjeD09c05QZmVtT0lmLDthZDx3Q3BpIjdOTUkrcyh7Li8jeU9CfEFmbmlWbFNaa3k2PEdOYF50RE5ILFIhSGJdaHJ3TkdY''@;'; put 'put ''TGghZERnNjZVQSguTC8oSzgkQXVMUX5yWDVgIXs3alQqI3YpcDh0MTw8Ul8uWGJzZGkvVGVocWVxW04mZ04lYnV6VUZ9OTp6KkI9MlFNW2E7RWQ5Qll7aXtldkk4IW5aU1B9eV9oUnYhKXZRZ1srW2EkdE5EK0ohOnU/aElXaz1VKWxCa3E+L0Vmc3dhK0ZAQHpkdUwvRSRtOUM7STozSntIRyQz''@;'; put 'put ''d3RlPHByQGs4U21tfEtvODlrYyJtMWZeNl1RcyUmR2drI3tkLjUlUjpoYHsoYDk1MlEkRFE/L2JmNzFQPWBHJS9fQl5MRmFmN1sse1B8KklHLkYlPG1wcyImInkzX3IhXTZNQmghcEFfXUN9UF9YKSxFelp+bVE/I2wuZTRpWSYqeTZoaEMkOGFFPUl0UC4/OzE0N1toQUVMLjVocEs/QFNyRDch''@;'; put 'put ''cEgrY2VsOj0oLGghX1F5enh2XiwjfXtCekB0bTttc0gxdGs+anNMM3ooY2IiU0c+cG5nJn5xbThIVl1LJV9idUhrTF0qREcsU1g2VU1WO2NEYEBGcmx9aTFwLkRdST5DZm9kM25LRmZCZU0wZUt0VWMqe3tAXyxwXlBwfGlnSlJXYCx0e1okW0MpMEYxWlt4NV00TXhbJi9DOXl5TXdnWmkiVSts''@;'; put 'put ''O09TZjFEaXg8WXk7I2RbWmJHIS9MdVd6UngyInxqcmdzLC9wai5aaDxlaWcuMDJjP0I7dEJZTmdfNEE1OUdxI0xwbzxLSUVTY1dPO1F3ITVLUVhiMGh3cTwodndAVjA9M20oXTlUeV0yTStlPD1odT1Acl8yNUY2KiIqRFZuQmNsIkNyJVo/WUNqSDN9akMxNn5PKC5gQE9mSFlRZ0UmRjw2Kkcw''@;'; put 'put ''Zmhpe3dsVy5leFh2dWQuPHlIS1UsPTdTNmN5ZWREVkd4aEtralVmJU9XcjgoWnN4Mlo2IS9sIiRSM098dFMrL11GJlQ6RztBR1kjenphcHkqbXArblp2UGs8MmdWPXlpelU3XnkpLFU7fklmTnpDNVt7eG1lI3MjRkxpdT5wM3tCa1NDaVVuM0UuSWluMyl5XTE5W0luIX4mekNVdFcsc1gxVHZ8''@;'; put 'put ''Pig7cSZTWXlXND0pVSYlOU9iRXhlI3JqWlh2MHczTGZfOTI9YEI3Q0pfQW5UJHJ5eltHL3NCWlB9YClleD1rQj5od18pMEc2ezBmYCZCInZIYV80MG9fZkV4TWJAV2szI0FidT8ucWBiL3VtMG90dTx1L2RWfiM9OV1sPExQYElOcCpzLnc6PVp9KzRAIkNNWUpSI3lBK3ckP3REUz43UWBuSjBt''@;'; put 'put ''PHBPeklBW0Q0W21GRC81O3Z0KUZSYWFGSD9CZG5pajklTVQ5JjJTIytPTV9ERDNxdSlNPkN0LyF1MCN+PU5HP3lpZ2svM05aIlBTOjZQRnUlTmxkUC8wQjZmc1B2PkBGT2EkUGp1flR3cltYTSl+WnlsL2kiKjZzNyFnaGJhPTA5SzZwPz16dnBuSmddaUQpe3ArUSJeaytWMFkhQWtaIXZoKDNQ''@;'; put 'put ''Pz1OK316XmEwQUcoUVRRWGZ3Q0Z3JmJ6M2oqOj9dIXQjaVFzd0Uxcl5pKVFuP3ZkT0lyViJ6IX5odHxmVCsxXjI2UUkweWtRfnRXNjBNSDFvc2E6RkJZLlV5KUprIUR7UyprZkNHPV42WXJWZzl8ekJGXWZGKkVWPVApTV9tOzR+eUNuMjY1WFZiYD9IO3Q2anFRNHYyNDxKKHdYPHp+X30vPXBu''@;'; put 'put ''RztWZHZDWkxpfVcxOUVNPHkhTCRVPCRobiFUMmpSVnpLNlMhNjNwLmVARURoUzJiZCpRXXkrOH5delhTNDEkJC9+NStgLmhZRG9WcnIzWTNyL1FbdFM3YSZLT09DcmFXKmw8Ql5SJUsvQmE0PDt3MkQyUCp4dnA5UUtjRDNGUj90ayo6QmQ9W2AsTl8+cXxUWWcmS2tiYCs+WHg7QGh2ens7cSRK''@;'; put 'put ''OSk3ZFh0KkRqTm9JSyNhUlhKb3VaWGVMYlouOyk7Ijxyb21hMG4jR2J1WXl0U2toUXdwUFFHLzx1LGwqZWFZR0ddPm1dZiojNUk4e3hTe29hIWR4Ty9pSiNlZXdyUVRfZ0BqUltvYyIxWVc4ZmhJX09wMWxyeW5RKm5mYExadkBRO2VJbSJ6Q0txbWk2ekxfRCxmRm1uRkd7biw/cXlwYnRvK0Rx''@;'; put 'put ''WyxZUU03R250dXphOzFFKFN0bjskKmpqa3hbNV1kOE0sV1pGanNCIWNMbFlGLHVGTX4vayhnNn19TTh5bD94SnlYb21SI3RNVnMuVmZQKnFTKF0hemB1XnUjQFpMNSQ0aXY2YENGPyJoLFVaRXxRe0RUck5FUmtFMzNgZjwsLEVTPTVJIUBQOCEhMW0xOlQ2JGVdSipgRE4oXlAlVj99UCsiVnZ0''@;'; put 'put ''TFhGQksiZVY2ZSM1TlJkcykoUFBrOnh6e0t6Tm8/LC8hJGtTMGA4MmZsQlFgKjdxbUp0alEiWj06SXk0fXJiPilYfGVPcGdaYj9ERSpySXUzIXcmfSRNLmduWTJYXz9zPDN9QDRAe0R3TSNRJGU4SVRSNHE5KkIrcE1zTyVfMzZNayYxLzthVSU8PEkjd2EzZF4mYzxOVFU5Xmc2TEdua1pdL3A7''@;'; put 'put ''QFUhREE7RHQhMTxlXjNtKmZxN1YvSmtWQmprY2NMTjBea3Rrbygma1ZFcnpVdkdLWTwzI2gxYSVncClrX2FeaSJedHBFfE5yZi5hXTxHJGlCRjs9dldfLnMuK3pAS0VMUWooXjdmbiw0ZExgfm4wYm8jTm0yK3tkMDtXU05dI1didy9Mb1dnei9yfixSTEo9MGE3OzUwNVB1XiwvOXglfkh1R1pv''@;'; put 'put ''OWMqTWMrM1dfWm9NWXZ4OyVLN1lvdGtELnN4VT0hNHFZS1JEMVBaLzkoT3F+bzBjLCUwKXxqWktkbU0ldCNsdzd8UE5aelF6NSRuck9zZCpEVjtqM2pyYUc2JHdBQDs7dT8ufCQuRjQuaFdkfT1HenNuMH0ucFF9ZV5dNitTKDN6SEs2K20kKl1LcHdnSzF6YStANm5YRTxvOEJiWkdCeypockJ6''@;'; put 'put ''I3oiK2V0L3JZXn1MVVtnIT4wVz5gKnU0ZHxya2hNNG8hODZxTyVzK01yZzgofXBWdCslZDI+SGxNX3M8QGZmb0prbSxSVUwzYEoyMFljc2kwc0VVU3x7L21Ve0tLZUQjYHdtPkE7dFBjRGcrWWEiaHJGWFdEd3hUdnM+K2Y/fHNWd1BbRlNzSGBDeXVCRG86VnhSOFRkRiRJKG1PI1s3USYzOjFS''@;'; put 'put ''bDdRIk97WTgvSlp3PGYrZF0pXip3Wld5VkZXXVRTS0o3MVIiMGM9R0dQfStSMDZFV1NHa0NOfDxRRjhjNnFKfCRgelp3LGVMSz1PSXs9L29ISSlpSSMmbyNjbGg4dDgoaUdod2VGWSM3RUFSJXtzQCFiaUlpISZ4aCpiMTdwUyFxbz5da1l+cnhUKHN9Qkd4JmojIyh4P18jOWp3UkFwXVpydUBY''@;'; put 'put ''dU9GPmwyc3dFeHpBNkN+TGNdP11TJWBuNjcmVF1jKnpfZUIsJTBEX31RczhFdUxeZjgpNFtZeENbNHx4KmVDJTw8PSV6MkRVU2hkezc2cHpUUkRKbHIpZm58YEVgSn14UXk6UjF3WUlEbkprQipESHd8eDVJSzw6b2BKLy54Z3NjT29rRE8kTyokTDR9O2ZmRERAeXBmd0VYOnpIcFBsLGYse2Zh''@;'; put 'put ''NWBqXWVScz50MUxMNF93fXFPZH4jQykpYTNvc0ZjJSt5RUMzeD48aGc7SEg2aFlvNk1GSjE2dipAKXdudTdaI1Mkc1tZbn1XWDZ7Kk1+RlA/K3txUlBbZnN0Oz56S2ZoY2VFNk1ASFBdRl0kPUl2U3ElPCxkZ1VyYDFiWzZZeFcrO0NnLjwrJjBGWXJlamwlPSgkd0NhQ2BweGklTDVqQGUlWloq''@;'; put 'put ''SUQ/cnNTbXh+WG1qbFVoKTRRK3VCTjRXcj5JLjYjODM0WDA2XiVgR0VGdTZlKi9EdXFhdyQpS0BvR019PTtkd1VlU0BqPzF4NCNxcnFCSTdyRHoqaEIvN3tsM1tdemhdKzgxLnVUYV9jL0JaMFgiQDtOTV0uaExpZDFIQHw0JE4pW2xAViMmIT5LaH1SI0p8YUo8QD8uUXkuOHpgZS9BUFk0JCR8''@;'; put 'put ''fjdxKTdMYWVJV2dWeH4rQV94Syl3LkRNeDZmNzs7OVMkKnlgMWIiWkIya3BhWDRPOHkoUWsjaDFjVl9NW0I7XyMzeTAvWk01d2JwP10jSy9iPnVyNlI2UkkvfjQ5WCF9eGE7bTZ5dkZoXVI+JXhBa2NtRTchJHkvVkB4MltVaD9PNUhFejFXU3tVY2MrMVMzTGB4THxeKWM/QUArNDg0XmZlOEFq''@;'; put 'put ''bTpPWms3IzwlOjh1QkRSPj5ddnxvOjE8fWYyTEsjNld7XyxoWHtBZVV3OEdLfUFoY2cxT0c/RFl6ajlXVjl+bDs4Iy9leHxZekQjdGhtUDxZSDI7M2c7cmx+X3Y9UTVfIVpiPnUmMkhIO0Bke2g8Zn0wOkRyWGFEKnxlcSNbOHcyPjJbUVV1dCYpWCNgcTguaWA7VCo9ISlaVz5kNkg7ZHtXI3BM''@;'; put 'put ''JXRRd1RhajMpazFZKFEkXWBOOWh4ez9BUnpga2BtPk5TdCF7S1Y/W3FpdnRWW00/Vnw8TjomXjk6VzB1eEdeaTNBUS5HKW08cW9hP0FXYTREVWR5allKclo4TFNEPEM4KXIqdWQrPCRrQGhGflBmRDtMOk9DbFNoJHhwKjpjdElbVEhVZ3Z2QlIqfit0Q1NUQkNkZXNpbGd6SFNqKyg9YnlndiR8''@;'; put 'put ''bV9fTWxkczAiL1ZYJGlTWWM3XnI7NCJHWSxrezkxMX0xQTFbUS5AfStQdnBxVnlJfmpVYmFVczBVSiIhUEo1RWtDPTZ+ejV9PU0kVGpnRjs3OG4wQyIrdmN8WUohK1VMJVc3e2o/bilRNGZWKT94eDV9Xy9nLj9TRykxOyF1W0g4N0xhUlM6N01ue2c2QD9+bGJDZ303QzJodnt8NHtKeT8kJSRa''@;'; put 'put ''S3EkfGNAckBbeiUlQlFIKSk9ZDhpSH1XdS5pWzQjMVtee2AkQEkhVjYjJEw4R1NRJD9FKWw2UWspL09KXjtSckRaaStoIzEkQHxCKF1jWnJYIitpOk41NWR2Y0FFOkBjK2lMOTwwWmp+UCEjKG1gKz1ecixiUVR3ai8uUWVNT1YmfkBHNkl1cGJATDBMWGNkPmBQSlB6MHxMJiRSc3MjOHZUMCFh''@;'; put 'put ''am91TngkYElyU0BCY3xoWXNHTGNFVHZiNG5ZdnEvOXJ2byUkfWhQc0lNWCZQa1d9TWk5aUMheGpDWGpMYUlrXWV0WyJDTT4yeG5sK242fSF2QDk7dGJSN0leZ2A6JjUzLyh9IWY1fkYoL2csXSpLeVhWJEsjalNYdHhRe08+KUFUMl0xfDRza1FCYkluTDtYInE3SGJ0b1h2eTFSVyRac0xZYSR2''@;'; put 'put ''eiIqTy57L3xMO2QieSx+OHQkVyV8PSg7JUVWKHo6aD02N1dseW52QmBqNGlvQzw8fjMrNjAjUFo0YHdLdjV9L1dJWmoyei8oUFNJIl5Gdk5fVms+OFZuVCJHfGkrLFNWP2ZtOk5ra09jLjR0LGBvJmkmPGdoKX5iMVdCRy8pVFFqMmZrLCkyImBnX0d0QjFFPG0qKzZmbEl5WX02dCFXbjJVYz88''@;'; put 'put ''YWlNdGFiTjNvb180Zjdae29KISs5e3ZtbkZYdT9KZShSNCpxQjFAJj1oZyVyeUNEM0xtWHB1elk0KSMrd0p7fipeR3c3TElNW1FCaXJjPjEuZyE2fXc3K3soSzJCaV4/d0dPKD8jLEsqSlM2Pl1xN09mOFlzPl02XktuMFskK1hCRUJXKXlEWV89a2ZMX3NVM3Z+TiR6bnd2NWs0M3NxeUB2Qm5p''@;'; put 'put ''NiwmKEAvdUhXMiIrRT5YYm4zJV0jMWYpZkclezcybmlFUjsvW2N7VHdLVj5lTHkwSHoyRX5xSlEkbXIkTVYqQFFUbDZbdTpOX3R4fSFoR2pSIT0mS08heUMsejgqeU1jUHZtb1NjaDosZnZmUl1QL0Q7MTJXbEx8RlpzZj9hSkM0c0BjUWhFUm1uKHJDMC5hQmFHUCZ5KlEuKFFVJitgXmJLVT9J''@;'; put 'put ''a2slJCVmempmXnFuKzxbIjU1TkJNNSZKbDlzTWo7WnoqZigrQ0dINlhwNHJSSkp1MFdBLDpPPEBWV2RiOFpjcSxOR2JTbTgqQ3JWdXhAUmRrTmlEYng9X3o8TT5FLiloVyErT0NDWyR5NCZuKnBLWXNkfEphMEhHYFchOn1vZHhQVlpVfTU2IjE3IyoyLDNfTW9TUUIrWU4ycWU7XyVxQ1R0aDx+''@;'; put 'put ''JnVJIUAje3hXTjx4fD0pQH5AeWddInxTK3NRYUlkOUQ3K1pKSzgubnl+fkxsZV8jSSM6IXZNUC57P09dTUxyV1ImcUVPanhyTHZDRFRQa00ufHAzey9Lbn1FZz9nXjlRJCM5QHpvdX1jVV10RH19O3l7LDA1dEpjeT1vaDdZKTA7cEFlITsmXiMwblI3NH1KO2dqcyxVTl40XXR8Q3VwY1FtYFlT''@;'; put 'put ''SjMlKTF3NC4+T31kfCFXTytgaH15MUNEUnZ8eiIpYFp0Li8zaFJgcDwwQ2osV1F+QjJBeUAqO2lRdT8qLGxrK2cpWks8ST5fKzRnTzElckdzdVFAQyErS1BqRGlVU0FuR2o/VCJoVTtifFpESFBpMl05OihhZ3pkVCxVWiF8Nmk4bEAwSGRFQnFYK1hAd3VKVnVOZl5qeTs2PTppWGlZYy8vLDMp''@;'; put 'put ''SUtPPntGS3R0R3FIMyhEZGUrelV0TDxzak8yQiM3ZztRKCg3LGxEW10jfWRQU05kYTt6PChVbSQ0LGAxNSp4V059SzU1Kl4uQz02KDZQdX0sdi9GU1Nid3Npbl9RPmU1OjciTmosM0JDQExAOmFbXUB+QFBQL0RbdWVyfVd3aGBJazIyflYwcSI1NFpfIjclUl1yM0REaDBNLjsmdnNAdTxdU0J5''@;'; put 'put ''IThzeVtSeUp1RTtoN1pJSUdpP2gsOV9nUVA8ajV0bTRlMlpwaioyVSpIL3BGYVR+a2EoYUshIUpDJC5WQkZxPSNsW3E/e3tyUy5tXmlkPHtqeXUlJn42fk1SelUydUAhPmd4ImphRnY+dU9QfFpaY054RE9IQCp+JlMhNUJxL3trMGUleUA1aEBgZ3ghKXoyJm8kL15NYCk1KGosI0wkVSFqPihe''@;'; put 'put ''UHhHQ1k0bDx1KXI2Vk1ATjc5eF0/ZTB4TDdWLmo2cToldDxIS31XQztXNm9ANX1bdElZUVkjIWYpKi8kKTsvRmkrU2ozYktAdmwwViFqXTBCfltNMmA8S3dnUGp4QEFfQGtUdV8pWnVUUVkhYnV3ZkJkLjpTYWpsflBGRTZPdT0kfSFwSmQvWTtSWkt2O3JzMmRINVIpQ3tLUTBgfTdqdCY/fC93''@;'; put 'put ''WzkpXytwfFJ5WHNLaShJPTM4T2M5N2JeM0xaWVR0Wi9mX1tzbFczb0F7WkBPWFQzR1t7XmYjckVsPTNvIVdvb2BzO19MXy4qfkg6eHJ1OXpHbEltWjdfI1NjZzRRMF8zcSNMPFt1RXNZcGdQXik+Pn5EeVI/UDppXz1FcnlpeVU9P25VQ1ZdcSJoa1Bea1R2Ino1dT5uNllqcGFOIlB6YHFoJUhC''@;'; put 'put ''V1FDcl94NmA8TXlFQXA4aTAqMFF+O2hZZitAI2BMKWdqZ2M2LGduJDQ+Vig7WTgxRDoqI1BONjhZcW8seSV3WVE5MHdlKFRHX0MiTl45UkhCckxjPDNJVHhddTheOkZMdUs5KiRPISg1elFkaWk+bHN0cWQsbWpqfWpdKXBQM3lUVnM4Mzksa3xaMCJXKC9wN057KT9dVGMyNCZsWFs9QjYrWWUh''@;'; put 'put ''d2s0aTR8XzRDaUN1LklkUnNUdVAvXVVEXXE+KlsiaVdVfT17eTxJP2s3QW9SYm40diNtKzVlS3ZzKj98PVJ5NWo+eXdkNiFMXjhuQ3hBPFdgbWhQdWlMVFg8a3dMZjEoLlppVXF9MH5wVGllK2B6I2xSU1Neb1FbUVhaSXYrRnZAUSJwaCxmRixVZlkhR31HdyhRLjVQa1Jmc3IhVC5bKy9IJWwv''@;'; put 'put ''Pz1oKylbSzB4KlkoRjdxMjNzeigrMU0oeDgqLnhxTEVqNzNEfjpaLiE+OWVkQVAhayw8eSp7PUdyKE9qaGFMO3NdO3hucTEjMDYsNHdIVXJsaWR1cCtTT3NvdygrckwhTixlcVZvTmZddTB9VW9lO0QsSmpMTjo1NWJvJXNuKnF8SUEzby5jaE1EUHVVXmsyeDhiQTBJaGBpXWdHWls6VXtzX3I2''@;'; put 'put ''MkN3Zj82UHl8PV1UVWd1TEg6YU1uPWxHUz0lYGIkfVFDdWZGNVIkKHVxLFs2WSJQXk9uM1Ykc3g3VUViaUh0QUVme3hhMzJlSEgzZ0hAa2FjM0oqLCg2eXt8YkAhPk5TKWtxKT9FJUx5RDJaZj8pRyNGUS4mSmNdQkwrcFMyfmxzamlaNF9QWH1AfjpSST9ye3Bnci9KVFQ0R3kkSVZKPFIxOW9B''@;'; put 'put ''KT9CYjhYcTNzZzVIcVRPYWVUYER0UUBPOl9RVyNEUD8lek1GMXMpYGN3NE9oKCx9RHRgcVJBVT1idlZ+M1VVNDxHaS5AXjZROCJkdlhTJVA3V2VUXV8xbktSIlhWcCtyIVtefStSJTZsR2skV1M/STJ8bU06XU9ySFo9TCtaV3lkI3g+aCp0RWtzSU8vPjxWYD5Db2BXWVdsXVRNJkomcXtjRVNA''@;'; put 'put ''P1YwaHRSdCtGVXFgTiN9NjV6OnYyWzJRZWdsIlEwPiVRfFZpPUA4cVhhMUM6dklJfT1Vfn13WWRWVWZHYWw7My5HNGBMPFN5VjVeJCpPcVNfdDw4eEAlKX5AOkVWSCVSdTFlVklrK3h7VEdDN0U2XlpIVWFZPUNYbHdJN3w7MVl8OyJXXiVsIkJFRn5iI3B4Izh4Oz1wUDxXRGxBTjRZKywuZks9''@;'; put 'put ''WH4wPlpTSVskL0xaTmh4e0A7a19NMGhdZSx0W1hgaSM/blpOS2p3TTgjOnVONExbUC5HNyk4T1ghKXcsSHciOXs7YVNeQSo6YEJdZ2VSci9PRV5NLk58UkR8KSVKNGVYe0M9KjJoeDM0UUZRYEVVX1YmTXhpaClTN096Tj5iTXNXT2pxWWU8WkJMdGIyYV1TYjVyR0p2d3laT0dQXTcmUTh+WVQk''@;'; put 'put ''bD0re34rYi5XJlplSSY9ey8hNHxXTzYzTzNyNjZpKXJpNkxaNHE3ZCZ9WVlUejt0XyIwXyZASlQ2TGhyVTVCS1pBTkltWmZJP1ZpUzVrNiVSL3ZJMSUzalpEODdWYGtDTjk/X1JmWTlhMiV9aCwjTztXZzVSZUJqTGFxQzRRez98VlhMJV9keDVvX1ZHTXxHR3UjLzVKYlFKL25NKXYhbnQzPEIu''@;'; put 'put ''bSF4LHwhQmVEWnYqNEQzPHVmKXl5L3EyRSZub3koclpVcWFKWlRJVVpwTmN8aCEsXyFiKDQzXkRsO1gyeVBXXmdqcm9PNkssKyRnZytkVmYlI0VzbFhfaD87c0RdbV5yLGlDTlM0UiUmbCFNRSYlfns5ZEF3bnZRYi4qTkQzaGJYNzxWS2NsZFNlQztkUiwiX0JVZjt8YyQ1cE5VYkBHSGBqeltl''@;'; put 'put ''PDJuMF0uKEh4VkFMO3kyW1teSC9fQWFaTz9Jc190VzVDd2tzQmcyPSwoQSFPXjpMO0IueUg8MEA6aWgqY18uQ3QlIVNXeG5gdWNdTChTQ1dRWj5hOSFDJD90K1dvbWlOUj49X2hmSXQ7JVE6N2Rrd0QqNj9PRD1ZT2FqPnsiKEhfWG0ySFlHdTZPeDJBPShkb2tiYlFJWW5+bFZxN2UxN0d1bVBb''@;'; put 'put ''LHd0aHlVYSJpZlRlJVVdKX1rWEZ+WXBHQ05RbGB1UkBXY0NOdj8jaUNOTjQiZ3FURlg8empDRHRxKC5BVGpCIU16d08jWHh5aFBjIi5lNVBDUH1zMnoxdU9lZlNCbllGRCYvKypSSTVZYXFSSyJBY0M6cGl5VzEpR1k2Lj0sR1g5UmppREB0XVZXVSxaUXghTS9FcVQsMUkhXi98eClZKlFlfTZ2''@;'; put 'put ''XyY0OHFmYkl6JC5jYm41WGJpU0NIXlBeVl1EUj5nZkxKVXU0MjBkM2EpVEU+RzwyeF5DIm9YfT9RcSpkNXM7RElRNENbPzgjXWE9Ik9gSyV8JixhO3wxZH1vK2RUQEtYKT1oOiQxcTI3Qm13W0xYRjtQJTkrLj5IMXglUV5FKyE1UnpLcXtHNnlMMVViaFBaZnhgOXg4S00/YTk9TmoyOD9QNjQ+''@;'; put 'put ''ZWJKT05qZ1lyL3JRPzYoOCMySjoiXTl3fkBfc09udCxnT2R7ZCJXPiwze01EQEJZOCsucSJHYShycUJqWUhLO31uNXomLzQ6aFQ8WWRCQmFNYyVFLGRSYkIpby8wR0svVno5djl2TmwlKzM+dTNPemNiaWhuYTNzYjJufGZFezkmUDlyNWFQLDhfN3lZSiliZzNZW1dwdWhDaFtubz5ndFY+Tyg7''@;'; put 'put ''Yy5CYD9pRj5aJCF5OD9ZMSZhPyR3YDUuITp6UyFhPkg2cGN+TUo6XTdlUWE8T2JNWn4pXkheMThyJCIlSlUmemBHMFFyMko1WXZmaDMlakQ+Xl1hU2wjI3xDO1BiMm8mdj5GdFJpI0hXZHZCIjwjOGZvaVB0UHpgPzU4T2VPfXBSbGUsQSlzS0tyTHpyKCVXLi4qdCs6US5rSWk5Wm5DQiFsMGh2''@;'; put 'put ''cCVdKnxgZzQ8ITEqP3FNYF5oNlgwezh8cVVUO2lse0RLd1N5fUJyOHR3XVMqPXZRKlJHUUdPZCtWOEgxWn1dV0g7SGd2RCNIPGFAL0gleExqT0Q0NyY2byk5TGMqIj1KQzFKYU50SVI6XmRgTk9lOktua1dxblVFVEw1am4ub0xxWjtYOk8vOTkjSS5EfmMiYG18ZjVUekNsZzEuQStSdHl5dHFT''@;'; put 'put ''JiozaExRQ3skazRbQ31VdFNCdUBHc2lBYilEKTA5bFhZR1tONCNVbCNIZlR1ZFtNUSRuSH1YejVsOVkwKyE7O1UkcztNYkJHZSRVNn5GU3VrP0oyOSEjWyx4O2giYFI/L2ZSTW4rUkh5aShxZis3dng0UWpWT3pqPUxNfkJTOl1lOWZYSmEyWVp+Kz0qa01mYkBWSXt5RGd3Lkx2L1o0RVRKZnt4''@;'; put 'put ''RHtXNHZAWHJERmFrXUB8S1RWeyhaPEk6TT4xWEteKlthYSElKStFIVB2cnZMMUEkJF1XI1NUbTBnUW0iVyJsOWpfOlVTfH1eP2AhKVpWMzJhSXE+YmZ3el1fNVVnZyFnIy9yPWB7Jk4xWHdva3pdKnYucU5LMSEoVEFrSUNaXmcxMXE4PCVnInBsPX07UC5dUEspW0lJOV0zeCFBQ1VdbWY/JGVK''@;'; put 'put ''KipTS1ZHUyh7T08mVT1iXUB9WlQ8Zj1ZeEVAeC84LzdgTXwxTyRVWjokcSZAYmlGTF59aipLZ3xTe2RWQXo4ZkdOfU01QlJlbWpDaFgjNyRCQ1prfDlRLk9nYCRBKkAuIWxKN2V1cytWM2F2PCgvQENlIyRLQl0lQnFLIzImeVojWmZHQXczYnslMkRreX1QSE54dSZwKkpNZzckQWUoT3NHVTE4''@;'; put 'put ''VEtGaHBeKGtVOndsY1lUZyNAM0t9c30hMXxgLHx2UWwoJippLnpfUzJndlUiM1slaEksOT1jYFdjfXFDKlBfTnNVO1BAd3FhVW1sTHN2XiYlPV4wTComT2loSSRXeVg8YCNDW2RGfjJrNz5VZUNuMU0pVj0hLi9aMHMsN1FGQTZ6eilAOlttPlRHXkFkR20rRWVwZFsoeGxCKzcvd1FLajpdTn0m''@;'; put 'put ''ZCx+RVpsc3xxYy9WWUEzTGpEUFA3bWdJdy5SZEVLdXE9ck86T3haYjJpQkldJTk5N3d0OjAuNGZaYEV2L2tQX2xMdjBgPDBfMUthPS9vY2xkKl5Mck9xMyxrMnsjPVtdZUxFM3A7cUk6Mj9eNDg9dylrPTh6X31SYz5bd29LSn1WKWtDVC80STs8OFJJUm02SHN1NGc9WWppRHFZZ0lEI1NYMjpm''@;'; put 'put ''SlpMY2FDb2Vze0NBaUdsL11SbSZTa3AiTHxbQWwyNjZRaGIhPF1rb3pHPy5IN0J2byw6ciQyblNbSk41XWZFOkQhakM8Y3VkeEJGamNOUXJ8WiFgcyFOfEBhN3o5KS80emc3dT9Tc0VZXWkzIk15K2g2MCk+KUpfIXpleFZuZD9ZeFFTeXEkU3UrPV5dWFJQZSRrLE92aXlzPT1ZL1U6X1ZvalAu''@;'; put 'put ''Ti4rXl1VOkchYiElMXNpfHBBVHZSI305Jik0fl1FMTlSK2hXUz5mZ0kkLDk1O3V+VUh5eEJPMWgoWjU7M002VyZfayl1Rmk4a0VPWkpuSzJzUDNlL19jciRhUCRZeDJ6VzNpNW4jampgclF7JDJ0akF+YEk3NUpxPDNuN1dvcjZZdlZlLGJjYVJ8OlRdNkl6PHglRTR8TTJrc2M3fnJRVEg5IV9P''@;'; put 'put ''RTI8LmRIJldSeDs+d18wfkwqVT4rTzopfWFXLlFJOXc/OndsZWc8WFFNZEJTcFhoUFlDazJzTHtrbzA0byhvcV8uLltQbVpMYSU8ND9sIzRAMExsXWQpVHxxZ0ReZSkrREM9T0h0bGNrflFXPHJNYzppd3hSU2I+fHJnPTY5QmhZQDxdYXptYEI+eDBnSStaWldHYVBLJExsM1dGJj9jbEEvVCR1''@;'; put 'put ''LFMxdCpzRD1bPzdFL1cuXX5CVltbMlJRRyV0NkJ6fENOMTFbP1pkXkd6XmIkQ3dwJUdPeHo0O3R5ZSRzbVlDflBvSmkjR1JuImtYUFZUalR6cD1TaVMpUStFSnMjTSIxKVtUZFJ1JGckMlYrZHFAcm9lNSNfJml6MSUzUEp6Uzl4fnNyR2wjPz06KFpYTzR0Q2NBRStmMkJsNUhsbmQuPHEjbDlx''@;'; put 'put ''eStQK2M5WD1rdzF0Nil8bFFCWm9CZl8yJjd0aytLJls7YGpJMklaTnBXR0UyWWJtcGpYSk4wXl5bTVV3WkhDMU9SRXVIN11meCUlNyx7SEthS01IMG5HJlcqUzBKek91eD4qWDRATyVKXStDfSRSd2twPmwzNEV1U0hQckhIVHZfb21kUXhxPzlnU2RYM35LNS5vI1g5cmMoRlNmbmhOTyhKUD1v''@;'; put 'put ''YEhFOHlSb2peJHM/dHJ7dVN3az9QSVFuKTYwPU87UyhCUUEke1tQbjxnS3E5bUopLzxJLDFjXjI3QmxmXiVkUzo+b0M0Zm5ySXxjfk1aVGRgYSxnLkl7clc2czVIc1NiQW90OzY8cDdxKlQkNmNqTz5NPCJsOE5TSCpWc1RgVV1rN19tcWNXUSxPO30sJjdQY1JKK2YwQDk+TWN0dGxRZyVqdyg8''@;'; put 'put ''JHlBJls2dndSRCkjcW40NXhuczxSaFtVVks8THNrcXJ1ajZoUyo4UWBzLz1ZZTsiZUxxQ3UrQ1QhNGYlb0xyKCYvK2w7SGJfdlleem1ia0UxOiheSUBeaiNQciFPKT9qK1Y3QEA/YDx7N0t2ZSN7KE5Zbm8sPm8pLERQKExKWmAhY3p9XUluVSpeTE9+Um19VUI1ZGFZXkBuQH4hbFtEY3JEVGVb''@;'; put 'put ''JW1sdGE+aFEkdmczIWVLOmd9ZnI+WXxtW2hNRm99VEVoTWl0LiVoQlJUPUw1KWpiejwrdUohflE9dipncFF3a0pdeG0oQklXKnQoIStvc2ByNF4kMyNhfl1jRj1VKWVMLF5vbHBddURDej5kUGZvVHliQEApWFEuUVFjTCwvSmFPbSImJChTd0VvaysleH1aOEg2NSRgUToiJX5KVHpuNWxncWZL''@;'; put 'put ''P0hwNDlddzs7NykmY2s4Wm09cHFgMDEqeUhaOygmaDpZZmtCbnYxanFdLn1PSmRjLGsub2U6W1ojb2RUMnYra0Z+LixKMV47TypPPT9ObjJRbXtXKV9zb193Jnc+a0JaNCZKUU1sdCw7NkRCInZCMVk5Oixvb3IpQE1aRlk4YWUlY2x6LEVwMDFiZEE+c2Mwc0tbL3V3U3RrVkFKSSldKCl1RVFY''@;'; put 'put ''OUtZOHtRRk0hNzd6bypBbnwleDZlMkt5JndJYDJmJHFhYWFdbEJWMVUuIT18MUpnMndFOTlzWVV3TSw+c0pUKD4jd187IUFkOVB2Qi5xNi4/NSxHZVBvMHBfOlc3OUwyZDI2RVEmaCU7JTpHV2FALjpHLiVne0BTWz4+NV93dFFwN0R8bS5lLmFdLn5NZDMsP0d8ejFPJEk/QDZVWERAOjszQU9Z''@;'; put 'put ''OlA3MVt6OSFrZWdDVkAhKXpVcD1LfF5HPH5Cc2pAYTAya3J6P3hHe2lyPXt5Zk1wSFUzWlByL2YkNSM2Qy56JUd+WUIpK11UcGMrakNkblZqQy5VXiIhOHxjZGkvI11eSGg8fks0YnRUUV4uQEdZKTQmaE5aRzV5WFVCMnpwaGNKeUkuMHQrfCs9Xmh8W1A3Z000TFpZbzZJcjckZl8ldmx3O3Vh''@;'; put 'put ''KiVeXn5FUkQ2SXMmU1gzaX1RaDByXyk5SFRETmtga0Mpd2x7UFRYdSU0JX59MnFkakU/WCVrVTFYZmBiZXpgWmZSc0godzM2aUUxYnFGKy5BZnleT0crMlQmSzxrMzlZQmJXQWw+eF9vUnc/Sno/fUxUdXg3I2oyRm1oSVZTfUxXUHkuJmAxM0h3R3FJdXhCUiowdThrVmRgbWVrazUmSyRwRUly''@;'; put 'put ''cHQ7SzpjOj5rVitdK2tsPUNTYkZiXXhvTztlIkwyZ0M4cSsoKH1POkRqfDJOQSYoZFdLXU5kcn5XaSxmWCJKWGJ1UVUueTE8Ly8sWWlHNVRQLncqY2FLcU5dVX5QZypKbDdnP1N3Y3xiQUxmWDpeRlUpYEpqTW9FKjMrcGxgNGFXdGwvUkxeQHR6R1k9YTdvdCs5I3k4UTxGYE4ocD9KKSslUXUu''@;'; put 'put ''UDooSThxVWt3VX5PVXRocl5hUmFjMTlsYzI8ZiM/eGd9PjNAPHEufDU6VltwYGpILDJ7OWQpfSNHIUZRPnI0SFZVfTEwS2hZPEB7dk9AMSo5Tn58S3ImRW81OnxDbE9XI0NYcmB2LHVzV11MXkJOSiR9LlJzNjU3VFZ1Q1I7MTBkWVdAI1JjTD8pIVBRSDY3di82PWpDLkYkcThvOXhFTWY7cnRS''@;'; put 'put ''W31GeG0qTERGcUBIWzclcFM4Ii86S3YwIl5PWF9lSF1GMC5tIm9QKkg9cFcjSkFiQldHa0xHcG4lWjV4aTQuXWxLd3VUISJqSU03MEszbUBtJCksbTQpLklbYUNXW0cmcltzYV15X0FvanpHT0g2Vj5hRTlzIkwmaUFYfl12ckEiQ18xezswOSRIMlRtcFJCbWtbIUl5MmJCQTEvQm89SWJNXTdv''@;'; put 'put ''TkUhV199YDcxdWR0fSR7Ql5ZJkRfb3dOU1oreik3IVl7XWwqO3YwSlEyMC8udUJSPmpQMiJPP3RIS11tKjlaP3dPeVBEdStrcnMsfGtnImhFXntQWkI8Kj83WEt4K2hSbXpGXTd7OnRrLHFMS3VqRCtFZzxaeFU7IWduc1JJUV5PNlBbVEdOeEpjYDhrPkZ6LCpZIj5CKnB4Kk4mJDJPYUU/YVok''@;'; put 'put ''P25Oei40Nll8ai5ISVRqTTtVQCN4Xyx0TUM9MW4vPDlGPFZwSXEwZWc+JlE/XzptaDhWcDZ4aD1uaU0pNDxrMWVTMXFzUjlibSJQcGlySn1sYz82fntIeHozX2xhR2p4flB9QndlKl9nWXo1Jlc/PV07K3h6dkoqbWh5QW9RKmBhKitxTz9TYFI/MiRXVUI8MEBRaFtNVlo4N0wuXTxEUTJJdTY6''@;'; put 'put ''diElR1R0Ijd6VjV9U2hdfShPLDpoZ2dBU14oLy51dFgrNV5qZT4wQ2B4MEopaiNDXjdLbSRuN21mN3dbZE9OeyFTQVlrJmh1cVI0WWJgX3RNeC5dPUNFVXJiVjdAQDomP1ZFKW5uWTYmKnNrKWNreW9zeGMhfFpaW1I6NztlXWF8dmNVJS5QLz99akNpclZDZzU6TCNuZ0crX1pTfU0+YWdVJndq''@;'; put 'put ''NV9DXXVXMzAkN1hvIV9UVTk2N0gpWDg7e0NkWWA4NDB6bX4xfEZKI11wZzoxTDB5NzE+RjJidGp2dlJRLzttNEp5UClkKmlWV2hyMCZlI0R9Tnphfk9qPWBAZ3hjM0xKZWlOeGJbME0/eztae3EpSnhtM31gQWZ8UmYuJXo4WFlQRl42XjxNIXlGSFZWKnczKk0+ZFolY1h4entEQ2UlUktSdmdr''@;'; put 'put ''YTRsKlFHU1hlK3FpWmEoKC5DL2xecEo6cHR6Tmw6PGlEY2BbYjJOQmJjOFhpTyN5Rjc8d2NYay5tTW0hekl9STRnbyszMDR4ZTdZbCNHRytFPEgiMkY7TGBmM1pdemAzJFFLMFJiMGduMSJFRk1DX1dEcCVMaW5DdUBbclEzeSlUQ3RnfVZ6Myk2PjFVRmExaEQ3eTlmQXA5bHJNeWxgI25Fbiw8''@;'; put 'put ''WmZLJGNESFJWL3tLYilHT2pzWG9CWU9eUThrKGsjXkhlSTV6LjtJVGNhdStofXtSLn1XPWxKWnddQW8lWHZDSnRhV3cjTTZhWERlaWVbPlNZMT9aNTFzU1gjLHFPQ3pNSCJhdnpIKjFEMnBSSntOVGBEbmI2LG1NLyJTRnV7XyYrKGhQdklHczlMKyJ0NGE8N0t0Qkt4cE1NdTB9dW83OmpZRU8s''@;'; put 'put ''T0tKKzFEX1JlOyVMekw2VWxrNm1iP1FaMzMldzJ5cmU8PjAjazord1lOWm8qOUFLNGRTYih1LmFTSkJkS0wpVG9zKElgWHlHbWBEbi5eel09Nj8+On55ZGJGQHF+R1tgUyxiIntzSmJJeSYmcnNaYEV3ZyZVaWFOZj16PzRkV0pCQExdbUdgZVdCeSJtOiRBRW5lVjcmPXhEQkUiaHFEKjFuTkFt''@;'; put 'put ''dHJHUlZbaW43OlF8OjhySCxfblliR19jR2VYKGAkSnpkXUk3PDYvO0RFYjdYMndrNCxXeGRjN1tYckQweEAwPTxOIWE8TylfbjZKVEUxa0tHMEx7KVFQaW1eV0RiM0BjODBsPy5WW0FnazowRT9Gfl15SWw8fmBrMn50LDNgWEw6SnNFNmNdYDVoUHlZS01oano6eWEqfHsqT0V4Q1ZtNldscCNI''@;'; put 'put ''cW9sb1p4ZzNAL29RR0BuN2liVXJdUllibCJpZX5tLEA9VSI8O317QiZpSEkxXjVYUF8mPilMQDBTfjEkOEs0IUY2SmhlLF9SIypZVDZ2WykrX18peUZHXkB9K3IlQldqLF19IzlOdDQ4IyRAMXpqJDQ5RUxCUVpjWjpCUi59NXs9RERpZChofTVkUjtpIlcpbz1mSzJXaV1wUkBoYzdRald7RGFb''@;'; put 'put ''SDxZSGg1USxkR0lkVD4yRDFfRC4pT0E/UEM1R3JqUyZlVWR3bXxhc1tAPkYuKV1DRXR4JVo6JDNBdnYwVWFdUWIpWktsUWJgflg2eDVxISo5Rjl7Nk02KFNefH5tTzs8Olg9dCQ1dWBAWD10JH45ZCQyIVtoNW1UNUp0cjZZQnw9WCUzOjZeWD17MVs8eXdCOFlQQSwvcDVtam1JcHpsTFFEVzJO''@;'; put 'put ''c3RAZFNRfj5yMDFKeVAzOjlbO0ZAQzF1PVpIan1ZXz4ybUh2ZkVRQVc7OVs8QnlJYDoxT3J8eCJSKEpPUExGd0ppYX0zRUo0NFBdKTheMTI8fWtycShsVFBRN153MTN+Ym43PEdAbz0jfTVsU0xfS1ojKSxmJGl8KXBXKDhyRi8lIyZuJF92dz5zcm5GL302OW0kXyUiZyhvbkYvSE44NWx9KSoo''@;'; put 'put ''fmJUT3FxLnhLbmN3Sj85Vl9SImd8QVtQTDdKPDJ8XVE9IX0hWDY+QlRnXy9WODUjX3JFc3N1IXMoM357Kl1zfGllZ0I9T1RpfFBrIX5RITJ5dSlgITlxYkg6diR9KDhwKFtfL0M+fSlMRig4fWF7X19fZGx5ZHQzT0YvMENSV1VDfG95ZDA4JFFCUkMjUHZAe3x9JExWM3A9dihsZUtEJEIkRzRe''@;'; put 'put ''PGFLJWNaNkt2dVBLeEROMjV4M0guSjE8NVlRMzF+fUI+P2VTVVhQV2pAcl0uKH5XPyFscSg8cnRtRWR8YE1MeT5sJjN6QXtLcndPKXtUa2lUY0YvPTFmJStHX2t+MDNwUkR3RTd9ZE00X0tyUmc+SGF4VzJwSGoqTzRuRFlMaE1HSHZkInZnKDBacUo0bi5Vb1FNPCx7d0p8X0duO0I5fStLPD8j''@;'; put 'put ''UVdjQURITCN5Vy5PNFlweCs2Pyt1Wzo0aGdfdmlmWVNBNm10MFhzcHZdTGwjeEROMnZZeWhJVVRUbS9BeVhzX3VnVDkjU2NGLzBZIkhHUTJCMUUyZC54QEkkUVt0ZTRJNE94Ul58a2IiY1RnbWdZKXU5TVQ/d2AkSTxCSXI8UD5LQFkxZC5eeipPT0NPIm8jc1N6KzgwQ2ldWypAWDxWc0VId0dI''@;'; put 'put ''QkgmRiNzI2M6eUk2YUNOYDd9dkZhQkBuZyJHSEJIXkMjc1JHYFNoK2daPnF+THdtIUE9KEBRR1hUP0d6Y18xNXtlYz9JYSgjVis4aTArYUNjczgraDU7KiJkJj80ZVFtcHlBWVNodj9+aEgpTkRSdUkhVU59PCFHXnVlc05EPD90XktvfEBvdzxgdztGS0xZbz18V1BXSSpAdCEoTXZjUl5kRSNv''@;'; put 'put ''W3RaLlkmPSE+Ryo8IkdMak5BKGhbbUIyUlVIdHVlc0pEPT91VCldbktqcmFETTcreC9hb09yRyo0STRaWHJ8VnlwOnUmJU5jVTF7MTR2RD5WYUFENzhQJX1MK2MzVlRuaCZJIilbVSZYZ3kySlR8Vk1veDkiPmF4Lk5tLjx5NUBWSSV2VEBjcnl6NntXZ21sP0M4Qkx1TS4wVHxoSnQ3TltRXVIq''@;'; put 'put ''UiZmPnM0STR3P3F8Vnlpb3F4bXhRdWldXy5SST5QMjAjWVpJZ018MXVvbXZlZ0loakMsdVkqdGlnX3ViSDZwIVlpX0VeNEhRY1JCbExmcFhQV09acnwxeVRUNGpRQF09VWZUeXtYcHFZRyY0STQlYCh9YVpNdkd4eWdOSkkuaD9SeFEveiJST3hbJiVnKG03bEA6ezl0ME5pPyw3W3BQOnYvTnRR''@;'; put 'put ''a0pfbCQpWWg2P3lpY0YvWkdHfXtleEw7WXc0NXMzVTkpLkpJSCxgcXNCQFVDWy94d19fUHMjSyoxcVhBIW1lSGRJPyprOS8oSitoIXIkR05PRDcwTFtnSUJ4NztmN1NkLzAybyEudzgxeERZbDVhbzc+Viw0dytFPHlvW3FOd0lIdzpxc2coSFUmeChafiI3Zj9rS3cwS1dZY2NFYz8lZyg7STtV''@;'; put 'put ''KTQ7dWBMUSRjSDV6KUZBdmVzJndyfGF6SCFETltkW2NsRCp1N0Y6TGFjRWNaRCNzXmN2KTBje3QiXlt0UF5fbnBCNjJ7dWVzc11xfGM9fERNdG5OSVhhJjMja05ocTlsd29BYDMkeEcmeUtVekRNR31eaChVJUA+RiohPk1kSXQhcjRfWGgyZj5pcUdFVFs5N29TKmw+bCxuSEJQPkVDR0J1LGVM''@;'; put 'put ''bmlkU2liazQqSTFHQzhOT2MiKzVKKzwvKH1wR0EyZi56ZyhKVUtCbjYsenJWQzQrbFZOfioxZFNpU1BXUiEkcjdFakV0Iz9WeD06VGkpdm9DdHBIZFMqSTFFJEY8YmE0Rz0yI0UyZkdaTVclTVlZbmNlU1pNbXBBdV0qWCx7cWFOVE1wOz9USzR7MUglTDx7SUc2Q3QiNV0rIT4oYnlYXl95Qnda''@;'; put 'put ''RDFdK2opUUNLezRkU2l0T1dSOWpGfm0wIVh7e1lNNnR7elo3PUUiXUc2OTRoUFg2akpUb0g6MStKZGlaNjY7Rmlacyk4Y1VDYWJkLDtSRns+MmJZKEhHPHtaXSl0cj1wRnRUIjc7MlJUZixMMExfKSE+MWxjfCVOP0I9R04qKVJqJjQpVWE6fXE4TGlJTFspXzZnKSUxQVFpY0B4WFIzUGxaTE0u''@;'; put 'put ''RGdqandoK2RFcWFSbDN8OzZFRWtpI0cjL1p0JHBRNWspaFhwVFFxIm5YbyJVQD9VWGs6Uj0pWmVPfnZ5R3psXSZtaU5ON1hySk4pdVduTE9PPU4zfCI5MVM+aDh3bCFJJVswbnZhQXxERV40TTkqRF9hfX5MfHo0KHUqMVNeJnIqW2A6QmljJC5ETSl9dTl3eWxqXWhgRHJJZzFtc2pRUz9XdUN0''@;'; put 'put ''S3BdKyE+ZCZreCNEeU99NV9JdXNjYyhmOFkvJDIkXzJleTNPd093SkBvTG9UUEshTnk3VChlITo6K2xIYFRsRWdsdXtbaSlYc2doJFZaTjcySSRPdWI1dTk1Oj48eURsI295PyVnNzRoZntvQmQ/ZnBYKlVIXXsoKjt8cj9KW3lVVTRqYHFXdTd5NGR1aXNWQTg4YjIvNXE+JGY3e2V3TDw/e2JL''@;'; put 'put ''Z1hXRGVCZyY2SDE0cUNrQCtHeHs9Nm4id0VBTyxIenErWkJfYyxNKFg4WUVmZjt7RkJBP3oxQ2BgezYidXZwRTpgdTxdbloqM3heN2JsUnJWclReaGBKVk5gWnNBTHEpIlRkOXx+WFpESDxYci40c0VBQEBJM0lxMnd3QENFXn41KUJqbXNGbCE+I1Z2VlZlJnNGIWkwKiUoYkVWWHVsQU8+Yk9L''@;'; put 'put ''anl9OVhSOVQkI0ReKEYpLz1oNjFnO0MoPjdaT291dnBAXS45fFd1fD1Fci95Ii44UU8pRWhpQHg/RnZSPHg7M0lOe2JLM1ZCc2dyYmV0a2wyQG0rdWFAS24qZXk9P3dJW1NbMW9JWUFkWTsxTDwhXUJmN0RFXjc7JTojOShibTJ4N2l1fStgMkspLC5gRl10KiFCUUlQd3gvcnpQTWQySzBHQ2da''@;'; put 'put ''OWpSZE5mY1R2RVl8ZHxrTFR2RCVPWSghPiw6flBmRzNifV5Gdl5JTFNfQTtoYzZCTy8xRWw/bi4wZ01URigoOUV7V24jVkI2aVFoQFdXV117P2V+WldTYilwJF0pMTNONl8zI21WcyN2WWVMMGBtQiV8WE10YD8ldF17ZTU5I0c1R0dubT5HfXljVWtRUV5VSlNPaTRTYXwodFltWkVacj9dblB+''@;'; put 'put ''dWEleTl4T3R2cF4vS2ZzSHV0UnpkdTJOOm5ZalBvKWc/eDltb14rODRrNUpdNFtgdmJKeGA/OldgRnopPUk4RTV8P0I5QD4mfndtQUxLZTVXVEp6PDdHKXN8MnwhRGNFYlY4TVNpIUw4VEx1Nnklc0hbc1QlfnlGaHRIQjA0ajNPXmp+ejU3SGZ0YFRpWllaVSxsdXJYOG5oWCpVUHdyfFZ5czBP''@;'; put 'put ''U2tgMWZWY0tCRzwhTl0qbTRqMztNKX1LWlNAWEY2QEQxMXF3bSRMeUouNDJoc1huYkoqRm05USNjcmopOzhZLEd9Y0JTVHZefnJgTzRmfFR4d3pAOTx0d2hOTzspd2g3JnJwLDsrRFd9KV0rOVpoS1BbXXs/IXV+O0daez9afFY2WCkhfnNwO0A1Q1l9RzdWcSliK2Z6RnFgZE96RkZfNTQ9fjNh''@;'; put 'put ''MS9aQ0pgSC4hKG4xcTRpbmlJXnxvTltwRmJkUl9CYHpod25oSHloNnBfLlY+fnZ5YGVsOEJeZ00iX2YwRS86I0c4X30qYGIub2FGTlt8fm1JOTJBcEZZJFJ2Ii80T3x9Sm5UWyZSTWN8VlZDSjg7IS4oVFV+fD1OPHo3e1dFQ09QSm9WLHR8PUV1NX0uMypvK1AlM0YpY3MhbTpDfCNsMFY3fS5Y''@;'; put 'put ''IV06ZyEsfWVCRDRQSWQ8aSEsfWdbfDN+NjFeUzxrfmQ9fi4iY3FgO1QsfTFARzQmeCZfeHQ1KG1iXktqJTJNY3B8PXhLdH1iXmxWMzw6c1EzQHEoWTxwfD0vJm1fVSNUV1AkU0xKMFJgXUdILmtEcmU3NlkoekxqVTttTmsrNUBWQnVJbUk5VEIsYmpeZjg+Y3dIZkdqXzwwMy5KYnhmaFolaGhD''@;'; put 'put ''cCZGNHQkY2FKL3xAPy5qU207MT8xT2B0YzE4cERIcmVacTZoTWh1K1JXSFFLJFVGNF1GZXlrUWxpVnpfWVdGQnR9UGUlMXw3SlJvKD1DaVVwVytqMmpsc1RsdVslKWgqbmRtQF0zTFdVaGJJYDY6K2xPcFB9LmtjcDh3IV4zaE12a1pAX1ZkKzg+WWExV1h3dWtYXUBmMmA/QGhbWF8oYnk8Q35G''@;'; put 'put ''R2h8YCopbUk5V0FFRVE8bE4jZz95TmMkZjt9QmpBLzc2PmhQbDN9QllIL1R9djI2L3FAeUh6Wy93Y2slZjt9YiN1PDllfDp8N2tqaV9rPGJrTTU4ITF6RmNtVHAmeEVeOTUwcH4rVnVbZFV2VGRhJnMzbll6ZzlERnhkYCllKEdZK29XZzBXIW96fjlgfi4qaXAkUTNdfjxXKmAqVjlSMy5vV3Fn''@;'; put 'put ''TUF9clAxM2Q2aks3b1Z2KC82L1l5PDJ0I2hnVmRtP1d8PSZFd3NHb3RrPSRrVihFd3MxY3okfiZhelc4Ijc7OSZUNWZSM0gjdj9BNCJ2UiRNZHZdeUhSIkQqcFVwPzY3PyFfREFTQkhaNHN+L3tEJGBSI3M2aGlVNWA7LGBSUlc7P2ZEVFdeODo3NVUmYFJ5RHNORC5qZ3BuW0xNM31jQVk9Ll08''@;'; put 'put ''LlZldHxwSi8yO1UmYDxofW85Z019Ml1fZ0I4Pz54S1d9YW1TN3oybnRaXVp8WmdHaXhlPyJTfEp8JmBObSk4bnQ4NVAsRlc/WSFkN2VHL09NaDxYUHFXbEV1W1hVeV41SHQoNiRhdiZUb1tkfDlXU2Z0bGVWM0xabWcsWyV9M3ZadDBxfDcoQCsrPjEreDpMfFE7Wkx8T0ppal9+MTMuSHghIWl1''@;'; put 'put ''JmhDI1Y+LyxQZ1Mpels9Oj8uKHpBMmZAUWQifTptYHRwSmQ/NiN2UkIvWSwoI0skaH5OWHszZ3BRbWVJbHxDRFA0cEt5XmVJbHx3bEYvXz0jMytMZldqSGBAOUNOeFc4SSM9OTpiaiUmfWEuRSIlc2JOdFt+X3heMG0+fU42eFtNWCpxODImfnB0WT9yV1JDJWRrKmM4KFVoWyUyXWF4ZikmWSNv''@;'; put 'put ''QCtwZkVPfTMkYk9FOk81VWgxRXJlKTVUNE83NWZwU2Eudlpec0cxKW9HdVslRXo6c3A/c2tWJWtWd1ptKGgvY15mOFksczBhcFJxbStia2dwUl4zOj45MGB6JFZ5LHtjXWlfdS8/Ll89eyYxJTtjZzx7M0U1WUdwKVF3KFVrV3NaL1h9dWZHdnc3YkdkaVUiQFsxSnVnc08yUnd3LipeXyZtdWZf''@;'; put 'put ''Jll5Ti9ITGJjJlVKU0l+VGNfWzc/XXEuRERvKyJ6TklWVDchKmVEKnp8KWY+WX1AM0V2KGY0N30hQE1eeEFLVnJQQS9MSTApMG5FaGlWa21iITsse0s5WC91TngufCFALDpEeTpFS1lvaS5rZmVJYkgmfXVXdFBLUzwucjIrZ35uR18meE9HbSlvTmhXLGR4ak1HPD0vaVBsPDdFOlUmV1FHckBe''@;'; put 'put ''SlJCQXNNZH5EUjc3RHVad2klR3A4aTtQZ0FtQnZRaXozS1dLUmVySTBhbmtsTkJ3PzJVRnp3W1pDLllsXkhROj8zezUvIX0sXjtZa3pXQ1ooOlpkdzVqWEREenhrYFB8RFl8dmE9bj8rLE9VVTFzcmpmUUFjMD5VbTxsQTZle2Zqdnc3amtDTVtFMWNTM2trSWxUcHdPIX1rX11WbnZVWHhvNG1I''@;'; put 'put ''MExHejokXSFSPjleIWVAaTBkbXFKVUx5dk5HVER+ejUyMGgxOG1sY1ZMdCFOWVduPHA9RlRCfEglRTp9LGdsWzA4eXNhenpCI2xzUHh0NlcqdmV6W3NhejVTU21eYnBNUS8peTAwZiVeVU1pRz9kVXtYYXQzTlMve1NhbmFYRjFgOTxLditRamBBfSIhe1Z5PkkvNjg0cDQ6V3YhIkpGfjF5K1Nu''@;'; put 'put ''QTZsPiI6V3JkdUxjalF8PDFjUCg8eURweDlMOEA+dl15emUuJSlWOzFRSl8sSHRlanlMQCxbZWpPeVF3QWJ5IXFSMy5IfkgsVTo8QnZOSX52VmB7eVBENzFWRV0hNUNSdH5sMVh1eiJOOXtoIjczaEdTKVBiX0dVc0l0QiNsUSlkKnwjM1ZXSXV0fXNaMUJLdGJmIlEsV18+ajxYYml1JS5gZTN5''@;'; put 'put ''fDUrYkp+PWBlRGl+RyxgOH5kJD58cmcyMj43ImxdZH5INmB+YTNnTHcjXkVOTlp1JWFDWDFEVztCfFdyVC5HN311MXwqTzlFZDw/OUhObUwqfkBKc1d7LFhEIklyX3NsY09NMmA1Nn1oSnw/Sl1CIkl+KCNmeCV4TCFkd3hgcE9CLiJjMnEmV1c8NExiPXp0X058Pj08PHc8LllYQDRLM0dRKmlm''@;'; put 'put ''TjcxQ0YlNCxiJHdlK09PT2dgKDFWbnAzJUl5IUVSREZ3dV5qbGdOPmh6QE1yPzVZZXxndmtJZDFoYXdhXUFyY1t1eE9DZyQmZSpealhfRkVhZVs8SUBxOlN1XiZZKXgpTVY2bVgycW1ZM3FHPSs6JGFnYylHU3skXkdVRWNZImRkdV9ddyZJaSVZYVVOW0xgQ3c9U20iMU9IPipMYSo9ZD82aWR4''@;'; put 'put ''NjY9dHp5eSt3M0ZkJk16dX5qSE1fYnYvcl5DUGpeT1UjS08pXzoxPFdIcihZNkFEdSVaYT9EZ1dLPl9iKl47RHJMRWhGcT0pMzE/Wk49b3hQZE8qJVQvI0JuYEhlL19DQXEhVn07fHUseVIsX1JPdGFbdTksYktSPXkhZXg3dUhva1AwQV92KilZSj9jUnRlKCtjajw8L25BJn5RaEcwIyVAeHNp''@;'; put 'put ''UFY6I246I1E7SUMpaV4uMk4vW1g3WVNsczdnZX5UR2pSe1t1Wms6Lyprd09tT2djUSpCNUZxWkg2UzBQRy9JcyQ+eCRhL2l9SU9NKzVnK1JXXyhCUUJZQH5pXVtgX3UxIiRHXiFWQ1lOJlR7bjtzM3A+ZE4+bTkvdzZ6YFU6M2I/fSM4cGUjc1ZCNVBnIy8zLjx2QC5ScyVwa0R5c2NvYjgsQyNq''@;'; put 'put ''eUVtcG5ZRHxPQyQ0Zz51Xz13eXsjZU8pJCJ0OiRaZz4qXkVHSWdoWnpWSStpME1BQXwoLz9VY0NFaGp1YDhmK0BXOzwoOnpSUTZkInhaSFgiYSRlUWk4UktTJFBXeyNlY2ZiMUN7LEcvXkkkP3JHTlB0YTlFRWtkJWZ4L2FecE5LS11WO3Y8NU94OiE0d2NTYyNSd3hgTnAkb1c5RUFIfVl4fHl0''@;'; put 'put ''Sl50UEFdJHJ6MnYhT0BndVdQdD1MW3tsPC8vMVp8aUxRdi8sVFMjL0l1ZEpCaUFUey47I0RwWEEhMXlnPmJkRnYvNUZgT3UjfmAuT0wmVGMvb0okdlFNOEM6QSU3MjxOaj4sNDVGQjc/TE5oanlpX1M5TzF5flFMRT9TL3lUOTNwKUljUnAkQkdNVFpSeFVWclRNZHVZS1pwSj15dHxfYEJSSyJx''@;'; put 'put ''fFg7ail4P2lFPUJRfUtNOjlOK0RbTjJfUF5sL1tVYCg6VywlPEl0MF1tcVM4UTxgcU1LLmFqOUNXTUhLPEleRiJvPF4xRGhIXVldalV9fVJ8YXU4MEhAeGlSbHl2QitfaExoalBsUjVbXm5OKTg5UjhJVmJUTl8mYktAKFkubl5TVH5lYG4welZ3VCNVYlQlJUk7fCN7fD8iL3RxWCxfMVEwQTxo''@;'; put 'put ''eFNMbUcoK18jQG82a3MseXhIU2AoNis1T0JXaENWWypuKy9KN2VoJnswbjN4WE1RMy54VmpFRk5qN2MlOWZ4bnw9XXVnWStPUkZoKyZ9JDldQjVITnN6eWJTOz9wbD09YXJmNigmSF9rVFskMFpGUj99bWpeOipNT11Ndkt3fGV5cjt5PFFIemZiSlVvOzVqUjd3SUIwTXI8UUgsUSN1WiQ/N1lO''@;'; put 'put ''SmxGdmVpfW0vW2sqMzlRbWVsJmpXYDY+fjJhKj83KXFfJUpGTFUsdDJzN2M/SCFdRmZUIyFbKCEpKUlGLyZhYU8uT1MiQmh1RnZuR01IYW5JYUFOXj5OW1BnVTA4dzpGZnt3eGIpaXl8P25UYkJHWnVqNys4VEF+Z3dleUw1P0VmTCV4OV4yPml4ImN+XmgzNX45QzRgaEo5PlIwWTVERlo0KmJk''@;'; put 'put ''ZDlyS0taKChJXXY3MlRhfSFDN1g3TmYqPF5VUHQjZ0ImXm1QdiNHQ1JPfkdAQ1J1Xm5CIzxiRUZ8QWtJfUwrWXo2O2Q+UyR+Nk5odTxpXk9MVzM9Sk5QeD4uS184VCI7LzJ9SlkxKHV2T1ZOcWtAfDdeUlF8M0U2dEp7M1UoOz9HY3QwYzY+eD1lKTJXZUJEPWVXaTY8WDZ9VmphMDdpO3IxKl5K''@;'; put 'put ''entaZy4/d0siTnc8YUZjajNzbEsvTVc2WShTRH1rclRMLkxUcWp0X0dlWiglK0p0SVF8ZmhtK3xCRD9STF0zJCE0MShgVzYqU1I8V2dyR2QvJixLPEIwK3VdSDlkdCJNVkg3PmMmNElPQC89ZTxeY0ZNYnxdc3BHdyVjKVRRPUxnWj55P3ZpZHNsYFJsZGM8P0Fte2ElPTIkUlQpNmRhOXE2TUNd''@;'; put 'put ''Uj5iIVR1THRqcDQ2V1ZAKExIYm1DJX5QMVVKLi5vY3ozPFF2IXJiLHxjJX5jbDBUal5WZnVrTV1BNig8MipTeUIvTmFLZzw2e2YsVVU4VEN2LEIqWGp7d2JNRiw1YGtoblpQY1BER1kvPjE0P0ZadTB3czYsam5xb1tXO3I+RndadVowc0ImPFBIWEBIInghcUg1VlpvN0RfIllKIUNIX2M4bngo''@;'; put 'put ''aDRaTjg+Nn5CWSg6QilEKys1JTxvZTI+JiVCQU0pbE1SbW1XS1RUKkY+UzU5UXMqMVhNXXB4NkQ9WmZfZClsYytPa0VxQDZBWT54fiJ6UlA8I10oNjRGVkxvOmlnOjFyOVBCP2l+OXRoQG4/RiNVOVh8QSxARUVtUmBqYi5LMSFiSW81MXJta1AqZGVmPlA+Zk1Nb2t6QHsiWjZKLGI+W2ZMKXZ9''@;'; put 'put ''UURHelpabmRYVCJWeD55WmBDTkp3ODYyc0VkQ3hpa3UqUnpAVGFxIT9Ie2YwPTQ7YiJBM3hLV3xpQk1nSWFuOkFQQT0vNkdlK1tYNnh2b14oZ2QqYmE3fEc5TnZiSmhwWkF2UChOVTthJUxvNE16ZCt1STx3e2FIJnJGPz8rSCt4bSteWHtFYnZzOHc5c2cxTDsxKzdGVTZpMVlhSWMobjx9a1lk''@;'; put 'put ''bSQ4an1MIXZiXWV7IzBUI0lhSlhCRmVGXnRdNDk1VXM2enAkdCU0SWl6XkNgaTxfR3VmJC48X056WDNCRXYuLnRCT2w5bWJLVjBhQSZrZmU2R2g3ME9ibld2I0dRT1I9NCt9MnxAV3BKfitAVGReRF9bWUxvL3ZDV3Q+ayFeY0VyN1E3KkJpQDo3WVVWIkV+eU1ZdHl1fEVjTT0jJiFoRTZMZT05''@;'; put 'put ''OHxQWmo7YWRmWE1xUDJ5ZnMsY3JWbng7L09QQEc1PEQ9MkNjfklnXyFWKXh0L3hEMihxYSo7UkMrWD4qbnhJfDVtdit0V0dwSkFBbXA7I2B1UlEuIVAraHNyLEZ4cUx7Ym1WJlsifEl3ZUhPSHxFVmo6fFJgaFQoQmFDdUIvTT8rc2R7ajxAWk57XiFBYiJbU2xpVEBVKWNDXXlYPGpeOjdgNl86''@;'; put 'put ''RXtQYFkhO0xeSndRK2xhakROPlpoLE9MamF0aXx8XjBmM1NXVV86dkp+Mkwlfmk3IitpODA8WD89blM3I0Qzbl9UTTdQOyR7VnElYmB6P10+X2pSLkFvdVtrdndHXm5yMHNXW09HS3ZFKiE/O25sbjp2Pyk0Py5uW1Q3clVRR19WQmp8a3JwPTp+VG4lVmBsK0RucV9KfEVSOXJDYz0wIT0kZWhx''@;'; put 'put ''ayI2OH4/Sj0mbGhgU2FHSV05ey8kbD1FLD85UEVVSWh1PV14Xz1nfjR1O2p7S34qcz5FWGZlO0FCOkhRallmQGBtbjxnaF8sUzNhaF9RcEZ+MHZuSUZTRDdaMCV9MDJUKl56aDJuanFvPCwkU2BhRykhRChKdlFiSj5fdzRKSTpMelFEdEUqIkJBUnlIVmA1fV0+TCpQNGVyZiU9OW9EVSUrLDtA''@;'; put 'put ''ZmBNVX4+YH4vKCY5LncjWWo0KWNeTDxHUT1WQEV4cyp9Rkt2KClwPkhodXB1clUzSmgwUW5YLDQ2VlNRNGEmJlc0eGttenVeLDQmLDhwXWdIaHd5LGksSUIjSTRjb2MhWC9zRV55NUl5IlpJMH5zPSleKm4uYDpsKUhnUiZKNmElaFh3R14sVWc+U0U6dmMqM2UhTSZFYXZJKnU/KV9rX1V+fXhQ''@;'; put 'put ''VzdBNm1GdWopbT8hbj0kTlZHLEldVT84X2J8fG1jdUFIRFJicVBGJCxJeyxUazkoMmlCIjgrKFs+bm55VlUxXTQvOlNwTF9vOGA3eF1tbjs9e3B0Mz56Qyh6VC86b19VdHBHQGRXO1R7SHNaKDg6dnMuWF5lIXI6Qm90JV1wX1ZxNy53ODldRnJSK204Njg0OXtOMTVXPmNzVWtqMWpbOS5hR1hm''@;'; put 'put ''dl9WVzM7M31ZfG45MmVITHhGT21pZTwhNklgYT8xLkZ3Q3shajE4JTdqUVA+bkopJjh6IyV6X1BdODdqUVAmTDYiRUh6SFFqYWxRUG1mTkElZUM4cmA7YSJhcz5hMzRpdTxtNmFSaXBNbE9XJEJgXyNNRW1TMj1KVk5yQjxoLklBKTdqTVAmIiJXQVo/OypoSjhoZXt0ezVpYU5UWkE3PGFlIXN1''@;'; put 'put ''LD5OfT1bN0s9dCQ7PF4la2ppbUtiQ2F+bUIiO1UldSh5UER8aEFTcllASSF5P2EyaS5GTFJhfGIxaCZSO0c5QG4zInBJdHRJT2lTI0JoNEBQeVdWQjxoS0NMdDIhMjBMT25rcFREa0x9OGF3YEJiJlJxakZiTjJMVGp7b2pDNHFObmtHLjAyWWRdYjJ1SC53KGhMLEo8KUp0eylTQWhndG4pTFlJ''@;'; put 'put ''fiw9altzI103ZDhpdkIlU01iYWpnUVRmRDheaFVFdGxXY2tKZCxFaWZFXnJ1OGMqfn4xMkUhZkc2NjFFK1lLRSZEVzxeQlg2ImxaO0c2OkNCQmVtfj43ITljUGF5LEUzMEBQYn1jTnZmNGUwcWNuXXw6LDM4aVdPeFZCKUsyclB+bH5EKkRKZUk4QmVJUHspa1lFRE1NWDwmYXFsP2g6ZilEW2JR''@;'; put 'put ''YTdPeGIkM0lqVkFbYl10cmRgImMlbTQ4c3xkczNzcDY4a3ZbOiViV1Nkc0tnO2J8fGMmKWg/flJ4Nn1BTSEqT0wzX0R3MElHYmcpTE1vMjZhSTQ0ZEpRcn1RTnt0b1YuVT9vVEp6OGopJUt9PmV2OEl0MmN8OFh9R1dydW5+fjd+c0YhfTw0andOV1I/N0VQYVdTTF1uTEBbO2hFY25VbHxvbnpe''@;'; put 'put ''Wkp+cVhiSz5lKSg7V0dSUyFYdH4yUWZueF5oOmZ+Wz97P2g9IVRfflJQZm50Xn5UXj9MR31MSEJPb2l1d0x0KmkjfXd+dkIpZks8NEJNVSlpI2BZbiNTeX15JXs1VFE8Q3s+emZ+fTo5VCV7bndAXSJURDcqQilzNEJVTG4wekd+czI/b0ZAfjQxdSh+KUIiWT1efUV4Mz5AbjFyPDBbSy9bJUM8''@;'; put 'put ''fEhJI35CInR7fG85WGNqNFBOZ1NvLz9eRnEmKDRSRjt6Llc9JkdRaHE0a2t0ODlXeF9yVFcrJVJVM1RbNiswVzJzJXYhO0kpZkhRMlYveHxkczd5K1FIflU4Y3ptTEtVTippTyZJOHgmKmEmISRXRTE4MmNmUW8kbl5Hd3Ildn1MaCU6WnZGUmRHRHFTd2EvNDRSJWpDJCw2SlBOb300QWM8NkQ8''@;'; put 'put ''QVk7KFBOZzFpJEZIPER6UCVbTjV7ZXM5bj9VMyU7JWchVCR4U09bKEBnIVJBSltFJlA/T1g6Lk5mQ29LIzA7Mj4xbW5vcTtHYkRHTnZOeGk8UntqV1EpdkhkbC5yITFqI3YsJUBtYklyQFJoNHd7amleTU1+OShlUl5wbFd7fS9hdFAjdExjTXw8STN3IWp0XU87dTMlYHlWKTRJITZrQEsrMDM9''@;'; put 'put ''MDVCVThQYXhIQ21UYFhtPlJHaj5jcTcsRVd+N2ZnbURGJGE0OjpITH45NjhDNSljTDhPNlRfL2V4K3grOjx4NTRiWk9UMUBgN0FyL0JSVDo9RklMcnIpUSxVfkpnajVWOTwyJWkkeEVpZWRNbVE2SmwyJXFeZ0tJanhRbTxZMGpWdUJHRzVnY2pbdld6NDM4Vi5eeTk1SU0lSm5ZSzc9XlQmVl1W''@;'; put 'put ''S0x4T0tPJSUyOiMwJlI6YHVAOHNqR1ppP10ma2J6SStFIUFsPjlRWX5jKF0rK3BzXl5aUXxOQ2orQGFIK3lpVzRnWDNSKkZqQjoyYG84bUhWMH5AOnFrNF0hIlo4JmxNKmxYSj83Z3xdUi5IXmJvXXs3N1p6Wns1KFI0bjV3K15QTjllKFohc2l4NHdAUWk9d3h0UUgufmBBUG1NOmhEdTw8flJf''@;'; put 'put ''JVApd2wiLz15ZV9WZDp1ST9dPXo+T2FxSlJROHx7STV3NShmbUImfCVYSElZeFp6QHxMRDg8eH1eOV5JfVpPI01vSDR6Oz9AR0oldEsrUGV4UCU+Yzk0YyErbV9FKiUmNyVtMWFNJWcrNzF1Q0hUWz1lYV0wWFhoJlkwR01WSHhKVnwyMj8pQjJoczlwNz4/PXlTNTtpVGR1d2B2dT0/LEpSR2wu''@;'; put 'put ''QHIoKG0kM29MYmZGRjZBVlUhOGQwcWIlcHJ1Zj8kQntaQCNSITNoNk5bNG1mTl5XXnFCMFI7Q0tAT2leXnBHU2Z5UUF0OWNYY1JbVVoxUFRJZGVQZk09VG4qajZvUnd2S09YTkpVZXplbz5XY0tYPSspKXVNP21AOXN1V2Q3YjlOKWx0QEl0UEchJlp1b15rTiIiYzNMeyk8Ikx6RCRjfSxOK004''@;'; put 'put ''KmhDJGdlQipSfks2enVSeXpFcClFLnpLK2RFNFVOPSJvWm1DVlF+WDJ4cHtSN0tRTUJRIyFBeHd6OC5ebTRCYGtBe1Y6XjVJa3BHL1ZwOF5hWmklTVNHKHszPSY3ZTlRJmxiP2NlYWgqUl5tRkVCQjgySGVbJDZwaU9IN3tsamlNYEg0UXxmMWQwIX5sOixPOXw2dTBsY2wyc00xTGtATzNlPkUr''@;'; put 'put ''KipPaSxPe3A7XkcpJHQ8dk85UVspZmEiRzZLb00pSUJpKWU+TW0rNEchMlh1O0VuP1sxOkE0TzlKW0EpKi9CNkJgezQ8RjM1cEssK3V4QylzYXlgKTgsUmlEdmlRYD1+YUFxWkFwY3B9UTJEQ3VdVWhqYEQrRVgmaXJwWjh+MTcuT3lNMyZJT0NfYzl5NTh5MigoOkVeTCwsaUNZNllyKWZdMG8y''@;'; put 'put ''ZUBiYXo4MipJQGNLMGpGNjg8TDdVZiMkWi9Yal06Rmlde1heO0RtalgwcCs2JCJwdHVDfU8sMmt3PmhKUCRYU29HQDVFXVhMTnJyWUJGQHFLYHlXU28vX1JQLHZTMTdfUTFIWDZyK0doT0p7V3haZUJXYlJ4Vk5BbjJ7cHMvaDh+KGY8b3MpRUQpTD5MQ2plQH45MjVBeGU6N0hmSkxqQC9JI3lA''@;'; put 'put ''JTw5SDxPb3plal1HPUV2IX5nIVJbQW9lckNqfjxZNUZqdis6VVl4YCJMLyNzPSJHRilnIWxPR0pYaHN3IztbUVQuWkhqN1l9LnJfezE4cUlLc1clTT10VWI/Nk1CLlkjZFY9enJabiJgWjYrKzViK20uM3VKQnEwKStnRVFWaSRHPFQwNyRMTm82cEp0YC5rTEQiIjF5ODJPNyo8PF94TGxsI0Nn''@;'; put 'put ''WntoSG8wb0Jzeks9eWFZU147UEdoeTxUMDZnZFJrMD5jTy8oRF1Ze0ZVbUphVT57KUhbNCZbdWJlRVBSU1Z5V1NVLzxrKl9uSjNnIm9CbndeTSkrLHdIaj9MTmZwSyp6eW9tJmZrQnpjP0Yqe2l+O1MoIiU0S1pyS3NQRiQ+L1NlMEtSMilGd21bJnVkQHQ+Vyo9Lko9WnNDV3owXiEhfisiSm96''@;'; put 'put ''OVZKblhMTERPKkdAN2JaRUJtX1Mze0VwMVFMPmBZRkwicDRXdCVWKy5UUDVQcTJ8R3lOPSYrN0hyNjdOd0RLVX5tPTFrdllZdkhtWS83VXw1WTBadFRablBOJk16OmRvdn0oTnZYNTJ7Kioxc1pGUEpoWVorXkkudldbJT9tJEosXUdLcDtKfT5KWVlkK3FNfG1wRVcpXWNUZTI+bUxJMl5wKjZ+''@;'; put 'put ''UGlsMVU5PyRiQkZLdHAvREpKVXl6ajB2XmsmSVovLFFqT2t8M3V4dGo5WlBOdU1RMklLQm4iRVNFPmciNFp7QUs9IWZWYyFWPDp8YDAzIT1sZG9ZY1VhI3JHUy9ePGYmSzZae05MJDVJMW5Sa2Q9PGQ0S2Jvc3pqbFpKIWN9bVN6M3Y/WlF9ezo7Z2d0ZDVVT1BrPjp4U0FmZU98S2JoS1hFemBq''@;'; put 'put ''N2M2b0klQD5ZOUZkOykkTCxLZGh8M1l6TnFxOFtbfX0pS0l3NyY5UmVQU0o4eCMjLkojN2wsUT85UVpuXU0yPDN1Zmt2emRqeGlCcjhRL15nMjNPYmgpWDBGcyU2e2VoVj1FWXo1U0F8e21ZSFBqenNeInh2NkJKNTgoZHxqbS9sazJ1ZGg+OlFwO2J5Jk15YzZPYyFDWSE0WjdgPDFqNyM1Wj0x''@;'; put 'put ''V2ptZlh7PXp2QTE1KHU1OnpfRUxtTU1XUilKeF9GclZVY2h0dT5nJG51YzQ9IzpjJTtGaWwvNUJYRHlyUjJFa2lXekFfdEZATF1jczdNMWpBYEh4PHtgL1g9UTVvYmAycG52bllDPlhqaDpyLmt3QnBmQkYvPmN0JT9rZWtLUUxtPU5hKUFDPmFmXy8wejMmQUo7VCR8fVM9RHpkPGZJfCkuelBU''@;'; put 'put ''UypOTEw/PkV8ajByQ2Q9ajUzSFhhbUMsVXlmISleUXh+aTBXRXd3aXV9KUU8M3hdV187T1F1ay9sLClwUzN9d11xT0pUazpHYWJ4N2okQURFI05yRn5pTV88JEltSHlpQkdpNE11QVQ6Mj9tM0lqd1hbeD9iTFtJX0o8MjZWb3taRVQzUXNRWWk3dU1xfWlNVyE9YE9vOSNXNzhsYip2dlRrZSZv''@;'; put 'put ''dChgZDxjeGMiTE5tMkpTJmNPT0xLNWQvfEoqT2ZfOENuSTBfKmlNUkpSXztLPGxWWmZfVTJLRiRQVEIscDVuIWtxRTBzKGMlPDYyXUpMamx5JFpRNH12TnE0eEdtfmJxa01nfiY1WGc5MHMiblpKMzd9Qz49fXpaTGB0PSl1VFNjZyRuWlBCdHEjeDl0Tn5WeTdEOndxTlskTit1TjdYSXtWeUdC''@;'; put 'put ''Mkg7VD1sJmJTKGEpWTc8cGt3S052QHJdb0tXaW9maD1eVXY5UiQ+KDAsaDMkTD1jeTg8cDxJRnRAJGBnNzZqQXxtYHdlbjpIZjVeYXB6bHIzMU0ue3Y0c0lgQ0ZMdFBqKmhSIXVOaUNaNDJ9bGtRUkBwLmVHMXtYdU1wPEQoLEl6d0RaMUhDJCw2LFdAUktuN3M6RzJWTURrX1V5VFE2K2JGSShe''@;'; put 'put ''azZhbE8qTkwjfllZeCJtVENjfnFhNm1HJSYmazNzUHJfSntgeXZYLlJtRGk+Pn0odEFLcj0+TD97cilXdE46KkwsOE1pIS8mWFosJkp2b3wqKTJROyFKaCo6SlZufj86JD92U2teUWt9VkJwfVdALG5gdHp1OiVndnNzL3RUfHpNIUgrUT9uNWRvOk9dIXk5Qjg+JmRHUm5SP09xazB4c0Uqd11z''@;'; put 'put ''UG9xTmFGMmh9JUVZPiF1V318NlptaVFHQCRGMFFYZ3Q2WVt0UXx9YUY0R3h3RyppYk44TT50ZV9FOyx2ZkkpayQmPUIkNmBYUXwjVkA+Ujd+WkskXU01dzRST347cFQ3MixXWHM8O1J7Vz5YW3NRPTxVRn15bFJnPCI0b3YmZmcrRTVaTDluakYybEYhSSJFNz4vcjQ3OTxOYzVKTUhsYV88UFFV''@;'; put 'put ''UCRGWFFZPCxVKE1rZmI7Zmc+PFdxVVE/T0VVd2FaQ3c7bi45b1FiVE06RyVvdWwiRSV+O21XJDpANkt5TEdEZVoudyZ8YyU+d044UXd3UUZ8PldGNSJgM28vWT9vN0h6UWIxW2wkez5AVVtIOW9mUHZFUH4rIkFdSyxjbi50dy4jMVJtKUJaUnclWHBCNz47RGFTInp+Vjh5Nmp9OXVyU3s3Z1FE''@;'; put 'put ''WTxacXN6WFBZUEBROlM4VHVyelg5TEd3OVJkN256dipPezdnd09LT2QjWTJ8UE8pfFI7dmRuPCtnRXxvbyJbMVVgMmU3eDhUU2Z7SWFZQmQyIVNmWD5LZTBzVT1QSWFNLGYmV3YxJkwxK2x+PF44U11CIiIzTWZFKl9CQV1hbi4qQEhkSmldaih6PjVZTF58Jj4lVXJHa0h+STMrWnhVQ1hEdC9C''@;'; put 'put ''cU10UmhJWT1DMSxSSiF5LE4wPm92NiVVZEpZISFkMCx5W0M/KEJxMDVUTmB8YXVXU3o0dHZrWWZfQlgqeGBnWGk5UlEhNjprTFB7QWhEPzV1UHRUWGs6UlojSSF7QnE5TVdKUmAwU0o7cXlEU3FgQnFpampYOllfdS87dWF2MVNGYihNOV1AbiloTGNqSyl5LnMmRn5YMShYMk0/JGdPPHhJdW9V''@;'; put 'put ''eyRCcXl2STc9dCVYLyUrNXN8Plc2fSllN1BBNWtSOVgqTGdjJUwwNkRfNCF3bVUhXTk3VHZvfSttOntiIkkrdHs0cU8lalpPJDBLN10zYWU/VCkzV0c+aXtkTWdVRDFyfGh3VVoxYjolKmBiRWIuYzY+Izg2U25vdWIpeSZON3B4TD10XTNERH4oRDRfRDUpQ04vVyhGZHN1ei8sM0RPYzdQQUZu''@;'; put 'put ''eDpTdDZdM0NHIVIjRyRpa2ZpRU4vJjxpXyFSVHl9ZzFFb2pHSnJ6P19pX0FyNUFUcXlBMisvLEZSKls/c1lgSk1LeDZnKWE+NC51KVFzKyxWblcvU1RxfjRnVVBYU1d1WWFfXVZrdTFTITU9UjwoRlJibFh8UGFsXi44Py93MHpDSTVMLCk/bGIpUClfTVBwbHpnXy9VekkiTChOVXBIVlM/Lm1A''@;'; put 'put ''NkF3PjVnUV5mMF1GUWNeTGlkK3B3TUtRWnQ4VDdlXmJVKj10JCskYCVKciFRaiU2dXk5MVBNOj5RQFZdWkwxdGg9Z2RWbjMhS1Z9MDdDbDZPOGd7ZjBAIXZDUlglbD8/TzUuL1JXI30xajw/ajM/SiV5UithYzY8bl1mMFpTL3RfVSRjLzNYKGRYZ2QlNmMkYVBKNUt9IV0qMGI2YyFJJjViek0o''@;'; put 'put ''RFtNazQoQ2tseTh6Q2B5aG4qT21mNGh4WFV8ZzNndyU2Nn0qWSFUfj5tbERPMHRHdDI7N1MpR2wxbExTKGZPZ3xYS30/bUQ1RWg2TSpiblldezt3azo8ZGRBP0VwNDZxTnwoSl19UVojNmckPjFgZ2Rpbml3a19mVVRId2Q7NFAodzUpcjNRfWx1VVV6TExfO1MwWnxRM1p3P2chaGNgOjNRRXkz''@;'; put 'put ''Y2x7XTpzO21+Pml2YCp7emN8Zz9iKkExZnZzSldje11wTX1sbH4weSIjI3N7KnQyPGYxaF1qJX1pUlEoc3VsfEBleSYlSGhLYmgwQV1lX08kfm9Jb2gpLzw/cVRkdmksYz9QVS9HKFV1X1BVWHhYLlZKcFAoc1t6cXwxNCxLN2NeUVo1bmc0WSNrcD0sQmIsOX05R1RGfjxlKVZMX0NibiZ1ZXhC''@;'; put 'put ''UDR+cURXRz5pTkpqXy5FOVhbfmIyeFB9flZgUEJbfGg2Iks0LiFUPVN+cyk3YVB4M0cldTRrZEAvPmAvR3hMX3xhQl87L2Aufjo5bXxqfTo5d1s/WT05aXwwYDo5c1s3dDV+M29XVzV9a2EpckIpIm5vaHFuLDtBXl82P1pkc3lKZWt9bGklbTRdfnpJYHRpLFh4aEsvTi85Kmx7XXJ0SlJPNlAo''@;'; put 'put ''SyM8X2g4Vi9oOD1CMUw0fW0uUCpSOn5oYm51Sj8mRjckdUhJYWN7XT98fl9eOyRgTT06OTJ2OURjc2RxOl9xWzhfOX02X15fKkBzLmV8VGVgXzxrd0ExclswPGskNWNdeTVVLnFxd0F9XXt3UWs2P1hVKD5YNl4sUjA9VndFdChnYGVDXzgpLF5FJHtjcD5kdjM2e2tSRCYkYT87RHMjMm0vaXR9''@;'; put 'put ''Jjl7OzgpNVFAMVJiMDpHTnxtM1JreHIhRnFDa342ang6WShlUyliSX1rOyFvdS9xakVucyImLDttc08+O319WHA3RFZuLnx9aHlrSjN1aWNdWEYhUiZ0V0x8Xj8iZy45P3VHfHNPSWAhT3woMElJeXJrUlE6SSVjNCJ+cTQkdHAxQ2F6PEszIkRPU19fcjwufWRkSEY3bzlrJVR+U2woPn1hKDo5''@;'; put 'put ''ZHF8XVlPUSheaSlyc1RzcF59WW19XS58TTteO0RTa19sU2AqP1k0aEgudG1WKHwxdDJmKEo/V2JWKCtJKHE3fTN4TCpHNz0pdmQwWSYjQFFjX1pBK1YsVSt6Ol8oMks6fUdQfHhCb2gzd2RgSCxFP0xrNkkoVVUmJkU0UXdENGgrLE1+VShmMSklbnNkUU1kWnxDSmA/KWw6OShAQCozaGksdG17''@;'; put 'put ''ZDI+Iy9kOzV9aDheOy9SW2N9XTd8MyJDdUkxUzE/O10ibls1WmRzdDZ6PyFYNj1vM21ddUIxaD8vJHI9YlI5VyplKVR3VGt9WEV+JTBkT2p8OU9WbGJgS1hINiReeFUxaHhEMUY8Mk90MWU8b010fn5tTnw0Ij47RjFPZnNnd28oWD94Rz87T0BvMX59JF0+fiksPDJgX3F6RVZaLzVTKXwxQEw0''@;'; put 'put ''LykkOSJ8YG1OZHd8cnswNUMqfjAwamg2OGBqRC5pbm5HOzo5In10e2FbMSw1UyU/O0xwOiU9dlFncjtrQyZKKjtAaHMzWmw6Yj9fPzFoSj5GJFcoYUBaU01+Sjo6UTk0fWxAXi9COzw1fnRuPX5hRGVRSFMvfHorKGhFXjswaShJKHpyYn1PP3J+eDwuUWhNfDRWP0N2fHxuZUtiYylvKmxKc0pt''@;'; put 'put ''c0RPIiM7fWhifV0vJis+aGkkSVdybHNjKEE9I2gsUXVfUVJfRyJmbHN8JldyZShjeyFiPF1afjNaNk1ldl1DRykoKUxEbC8kciFOUmpLMV50RnUhaHtdaGY9XVlsXSpYSFB8Pkg/JlZ6KSVrc1gmWH1kKHw9TEFjfjxTJjl+e2Q6a0R9XSN5bmh4KzRWZmYxaHZBZEg1dkdIXjtdN2h+bGQhX3JR''@;'; put 'put ''S0hubzxnLkdmPXd2eCQjP1hvKz49MnR9VTE5QEpjT2dIYEdiaHRub0FUc3tsPlcuZmY0YEdiIihVJWxKImZpU09xbSMmOTQoaEtMYjI+YEkocmVOenpFeiI+XWZdSVdyMD90XkBsJlpkc3UqX19VcC83ZmMxKTojOmFJYzVRR3AlNyIoSyM1SndkfH5SbU57aHN4bnIoNVtjL15EUCgidClyaSVz''@;'; put 'put ''SmtzVUwiIyx9KFZ8bHh8SHFVQTwyJXMmOUZAQTE8OURAQCpYTy5RLGRAJl1FZ3wvMDkqL0tQKDt4YChsIU5SfiNINzZ9a2FQKlgkJV5rZWo/MCxsZSpMckNjXzlJe0A3PSFUcHVjOVQ1JiVLZjNWckMvOVtNXnhISyRMeks/VlVZZz99dDpHKSVpc2FKIVQ4KGI4JGNjUSo+T1NNLzNIb0c0PyFU''@;'; put 'put ''K1p0eUB6TS9MVEZmNjFfIlFkPTA/O1gjPGxKdmcsblFkPkoyblI0fVIsaF4lfThYSHYrYkB6SWRrTyU8KHYuWzEpUjZZfTZ3USpBMTJoJCooRVMoVHhAUWtfeE9qR0E9M0tmSTtKYXgmOXVYZnN6QDhjdk59Uyh9bFAjQkpDe1N+I2UkNlkpfjgodiFRfnowNX5iVWRTInN8V002fH5oYlc0Plsr''@;'; put 'put ''MWQ/RGM4SSs3K35LcDh9YH4sWT9hLn4/Ol1+RXJidHprND5dWHlCJX1TSEI9Nyx0V30sXil9OVFQQiJTOHN+Kyg4Z00sPX4zVy9gcit6azcrXVgzQEpWInM1RnM3Pn47U3t+T3JlPH19TztCMzR+JkQ7fko2cVsqMSF9YUhKIWNzbWpfXyVjXjs7XyMpXzs6X1UxLzkwPy9LMmhFKiFgQHs7OGpu''@;'; put 'put ''ZHM5dXR8UnJLdSspV3dpTCo4KTU9UCpCUypiTkRQe0ptPmI7NSpjbkZQW0F0K0E8UT9WUHw+JihBOV4qaENoJFh9ZnNtRkF1ImY0TnJwI31NS3xsa19yJF87I18hXlo0dHwpbFBMW00mOXNwIX1hYDo7KXhQV0pLVi9McyF+KkRDYExrfX55K0N+Q0lbWFRdUnlBdHBGTylufXVJWWwsRyw8fmVk''@;'; put 'put ''c3ZrKXJ3dEoveXBvMXI/OTwuKV9hOFh3MUA0ej86dmF8fkA1QzNMNkNwfWAwOXMiOyE+bEI4JEF7VnVWfnpVYHNRI1ZlM358eiY0eEt5e29sWldJW15FRHxvbC9+Ik99c2IxcGlZYDspX31BYF03VDRzYVQpfX1oQVRXPG95RnJbRVJafDRqbU4/KCZ8W2pQMlAoOjJsfFA1MmgiUVVBNXwpSndz''@;'; put 'put ''dVlMQ0Y+WTUodkZSIV8pVnh3aU5MUntpcUFPcVppTlAueiNLTDtQKDpSJndkfmZpTkVROWJSTTIxKGNaJEJROVBSYkI1azZ9NlVkQj50MWU/QyRTaFpmWlQ2bSI0UFc2WnxzelhVW3t0MmwmMj5DRyIyMk5ibk5mYEtSaDVse0hdZWt4RilhIltVNFd4XzEmY3duQ11zInBWdl1QYm5rT2l+XUlH''@;'; put 'put ''LihbNUh2RW0+OSg0YDl4fkM/aV1+YEc2OCJARThRdGJNUzE8TE9FM1loKHBkPnRiTUl6cUtWWj9CNSlyQVB8TEh4MlN0bDlHT2psMj5rdGx8dSxdO3tAOX03WksqLmRlfis3dF9uTXF4OiN1an5HRD8/WSh4Ym02fTNaUip4OlYhaHc/YWRkMDFBdDxbZH48aHxmUjMzcCFsd3J+T2NzYWoxP1NY''@;'; put 'put ''VXxkJF0qLFhbMWQ/JThmUi5RR0k+Vkkwe34jU2RzYTFyfEBENj5sfTQxbmguUVUhJjk9WWFsKj58SGtJYmMhc0s9SWIsPkpxbHh7O2EoWDF3ZjI+WkdCbl5fZDBldmw+JGJgX3s1di9ZaWAzfVRnfG8zaGMlcixOe05qJTVgMlUvXylqZXNYe1NqVEx6L35fU05tJnF8U2plc08kOWlRRWhENmZf''@;'; put 'put ''dllIOl9AcmV2OzhQUFhISC4+JX1HR2JHKS9ATipCUyFFW3FYVyUqdm9YSkMwd0dxSjFlPmNmaHRkI3VCNi5VISpKSyhOLGFhK2dEalVmZVV3OT98d2N8K1pgdGowQ208UWB3dV95eiV4MywvdC81MHdoNnQla0dPKllkal5eTzBkOF89eTpJJWFmeCs3WWMldSp1blgzRDBOfj5+S0NkVS5YfFda''@;'; put 'put ''MzVPRDE/PFpgQyUuIj4iPlpLeGNjZ3hvXzt4XytqZHNaentUSnpRNF1jPT9TXjVQVU43NWcpOmZdUW4xOXw3aj4/PStfXy84JWhGVjVjN1R4RWB3PiYwWWkpMmJuUk0yPzFyfEZDKVUpUFZfOH1yakpQI3N1RVRUUFdZfms5KyV1R24uMXdyPFMsJnV2QFRGcmtgMzFNLFVRWjxAWHxhOTs/K3w4''@;'; put 'put ''fVs1NEU0fHF8LDw2Y2BsaWJYLm1uQDlIRGZzRHhMe3NCO0VndX4+biRYeFguSWhoNkppLzZiT2oreCUwPHVvdmxudl5nN1NTYiRpNDB3ZmJWMUhpPTg6XWwhPFF3WzIkLmw9REg+JFBKSVIyayt3a1VUODFaODhSOzJkP1JUOC5tO2YoRmc7JUl+JDIkSVhZaCsuI0J9OSJJejliYiM1cl5nOG80''@;'; put 'put ''bl5wdS8qbUpxO1VjQVlgU1thcyhMRjB8OWlSUmlNR2hCY0FLKmpwRCpXaTZ2WnFUZFNjbHJFPHBxa0lZUHdBUkMyd3BrTEZqVmhnclVUU1AiJE9JJVMxMTtJNGtBfUFON2VeT2pOR15XNShwVkVKKlVyaSN5M0M9SXVSYzFoInw8Ti85antuTS85YD5XVDFocF1uUT5HVjUoVWEoP2AvSzFoOV1H''@;'; put 'put ''KEgvc0F+OmNzUnoiX1EqOH1oNWx3YnsrRGhuXnF0e0l+OWAxdW9+JWJoNmd9KDJlZ1JjTl1vMVR7dn4/Z2xQZnNLfjlhZnNDW2whO3FIU217dm9XNHskSC5DfXdqU1djMXg6bj8renVzdEhHL341O2NQYDVPWFc7RE4yImB9dCh9Zlh6RiowTjJ9YCs3NH13VVM0X1dOMj59a3RnVzMwRzdXe0Ba''@;'; put 'put ''Iz5ydE4yO31VdlJXXz11aiw+K3p9fiNSWVM0fGhhNH06bWZnVSxEayRzSWwsel4+KkchSkdiPyhOU19Ycn4oX2p3YE5+Iy44WCU6SHdrM3glfXgxPy47NE9XeCt0fFJyTS9qXiJCWDQlNGFDYjNQInR6N25rTzBEYypFVVZAbC87YXJPfV80UXZEelBHVS5NTEg4WTo3VEZtQXFpQUpbLiZOeExk''@;'; put 'put ''bFhYJFdISGM3Zkg6dSZrOCU+RkB0RVJXYjt3ay44dFlJOUooKDA6ZnI0QFd0LyV3IT57NHRzNmRGWjhXR2NeN1tldFVaZl9+IURQfTYxRXtxRENbdlFHIkA1Yjx1ZGY0RUdYR3BrITQqOVokdDJCck9nNVt3TjpVSWVJJEtbVSI4RE1kMC5EYD1aITV0L2t1X15fW0E5KmZAXURwYTk0LHEoZDBE''@;'; put 'put ''fis/PyNWb2YsSFFOPy8zNjJrdVFacV8oSy9Rb3lzUGUpN2J0Ijl1RVoyfksyKFZ4VUFRPiVhbXovXiUkW3p0OzA0dWJRZ1Q/W3h8bUgiJksqK1grel50WXEye1slZWQqYHhpdC42QkYzPHx4Wjl9Unw2YlhBcndkZmg1eiI2IkJQUUB+IjNjWlt0a2JOX1kvWzJFSE9oPkcwR2Y+fUNwaDM+JGg8''@;'; put 'put ''QW1UT0sueEF4OlhwVDB8ajxdYURoaWwmIiQyZFBoMGosPlBLZG9vVVVifk0kJTkoQzp+YTdeel9vcnNGUWYwRj9zPTgoWksxczFIJnkjanxPI3FUSDZnSW87YGdyLiZ5NEd0L1toUXUlUllYV3FmcXd5cUc4OzZLOC9zWnd1ZV5NITk5UWx4XSQlNmBeI2Y1JGJkOiZ7bHh3Km5iMXtkfk90V3k/''@;'; put 'put ''W20lKk5dYyRQKXk2MClzbzZ1LGhheyQ7VWQkbytnTWYjX0V7OHVeQUZ7ZiNNfSRoUHZeN1BRcGMkRiEkQTwqbVFbYnpTPk5gUC5pSi5CcV5tNEQ6eyN8ZFgublRjUTNKLi9gLDlGfldvL0ppYlB+JSEraTpZezRtel1RM3R5TEV6JClaViQ/NElfUSxEPjVmWDlFQnVYU3o7KCpddmMxWkIzRjlf''@;'; put 'put ''SDU0Nj5HV1l2LDZfaXRmZTtoOD80d3tVcTMwRWs0dlZueTsqbk1KcW81T2omeS5LX15sPjs5cTwmbUJmeSVKPVcqZk9ZfFo6ZHpobnhkT0tya0ZoM3AzX1BEWVVfMElpU117NjNvZzVyeUEzWHxWNyhdekxLS0xQc3N6LF9MX3lLaV8obXY9Uzs8a0spTD5hdCRULmAiZ0JVeUh5W3p9fFM/cH5r''@;'; put 'put ''XXxCakE8V2k3PElnN3VuczI8cl0oTS5eOj5Ncko4Xzx2eDdfNlFpRUUjNXEiKWpYIXVTR00yRjB4RzVfYU0jTjNKQzEhQyEoU3hWLkFYc1FwP24reFFzbzlhbl8sOFl5X2d5ezlDTUtCVUl7dTU9Ikk/fUNNQnQpKyxye35fODwiU3lDbG5FUFZJfGR2dCptZjpKSjcqfmBQeUMlRWF8QlMvVlAo''@;'; put 'put ''eWVZJXZ8RTR2WWphOWwsdXFVcEpTLmtJeGE6c0g5Qyp0VVF0b1RGTjNHWCt2LzJnTC4rNm5bbyxvWFR6JF8/Xm1mbGBDLj1teDJoSDxvJVF+MW9OKmNlJV0qL01wMVo5VHVXVzYpe3A4S1V3PHdNZFs7cisqTDVJJDMqRng9Vz1OKlYsPV1mIjo8WWM0L2k4RURYSFo6bkRNdCU8fT1GXSk3XkQ0''@;'; put 'put ''Vkc/MmxgNFlAYGA/S016WkcwNTpORENaJUQ5OSlVSltdTiF9N0YuL1o/MCpma296cjRDUkkrenVUIWZPPjRiKzAzS1RATCFAWkhfZiFPelBiMU1NXkFjRiY6UUtsfiM1fFc8aExtLFtNeXchcDcyNHBublEmVXhHN0NoWThmMm12I2RwdEJFMU5aU0JDLkx5SlI0VWtANUw4P3Q1JTt9KGx7cDBd''@;'; put 'put ''K1R0cHs8TEFYIWM1WzRMU2NCSkAvfnlFRCl0T2tQNmcvemA+NUxCcUJ7RXNPWTA8QEYzfEgwdntkcFIlcFo9SCpfU1osTnREVlk6eiJ3XTIpbGwkXys0UW10dWxKN1QjKlA8bW5JdT9WcXJZbGgqN2Z2TC9hNkZvKHsrJnsvLzNhPmIyRm5IYD0xQFdjYmBfdzx1ckZVZkwsQXp0ZVE+OE5fRDxw''@;'; put 'put ''IjdgTjQsZUFNZWU7fGAycltGWGxzJWJgTHRWcmZYc3lwNkZvPUJyMyIqcF52Jj9jT0U3RWliVE1EX30lanBpLl57L2crN3B3aF49UDAwRyxOanMpRmYyIWtKW1AlJDlNe3Y/L0hmeXk8YSFNbnV8WGYrPTEpW3VqMlo6IWpoKVomZ3tzJlFMREV0YHZMT05Pfi9kKWVodCNzaE4zL2FGNnt2Vyl9''@;'; put 'put ''UUdLfW1SckUwO2gvJEdveWg0M0w7bWJbUjFjYDF+YjNUXXpMOjVaS3VZJX5ibFZwKnpaP01EYkk8TFcwPG0wRixHelcyP3NwSCV2Uj4ocTI8dS9adntUd1JhUzA1JFVNJkF6IjBtdS5jQHI1QH1QczNSX0JFJm5wXW1pWzdjJCtyeVpzWDJ3aWk7fEdTVHNyRnwyOT1AalJbWmNVNjwxfkYvQUIz''@;'; put 'put ''M2I+YyQ0T1F3L3RPcT1gdnsjLjI5PlBheFdlV1d4MWY6MTc0UjpHeFZ0U3pYeyN0NSgwKGNCODUwQyJ5OEU/JXIlaXQpeWIiVENJY240JXBJfnp6UnFBIT99cyxfKSl6b2UofU9MPiwke15qV3dMdT5ZanU8WFV5WjR8IzNbXU8mfG95YkI+OCRhOTc0JV5aYER2PHJwMmZJV04iaVNfazZWY2M1''@;'; put 'put ''NjBhNEtoSGowNz8rRiVTWSJ4TDgzPiNpKDhFamRpUS5rMXIlTW4/a1drS0pkTiomL0csMVdgOlc2M3xlMUt7XzVYdlYuaVdtNzpMYEs2NVRBKCkjYXhnWk5PfkszRSVHbUEjWns4Zkt9bUtAOkR3X2csOkNHaWVpZllMZFUyKVFhYj5dMS5lZyEremoxWTRhM0JmM2d4NjxnRjk9Q2RAKmNvayEh''@;'; put 'put ''dGtqNiZVPSY4PkViPWsuLGwoMDxwKUthQGdjNTRVUChCJnF3WHp1cWlCaXhNV0Y4SGFNJTEkfk5baXZnLC8hWDReQHtlKWg3TGgpeUFkbWNOaGhsIzw4KyFlVCFrXjRaJWRITUY9NFBqa1ldOGU0P0pTRjlPbXM+aDchQ0sqYSxDWT1QMlojdj9iNyQ3YmArQipkMGBoNltuRm4vODF5aXwvODJm''@;'; put 'put ''RExReXRoWVlUJE1kRUQqfixdPmJmZEJnI2g5NHw+akxUQllPODUxVX02anphcXVYPVoyNDBfXVVDQUhdW0MhNDBJRmJwZVFhWHJ3L0kjTE1yMjlbIns3PW1SaGN5LGQiM0FJJTk9JEgzJihMdVc5LG1zZGQ+Q1p9cnxJbC5mWEJqUCMjPTRKbjZBflgpRzVoJUFLTVBPaXhCWHMzWE5DNVF0VHQv''@;'; put 'put ''LENkc2RMa3F8JDlBTGthK2tHd3lPYyovL2w3WmslLzA/Sl1aRHl+RWNtWzVuSX4wMTpTfVNkWHkvVD4jX0pqdn49LDk0KDtpeHgkJCVCWkgzN0BVMTdzT2xKNnYpIjJfJVdsSGR7YWZIX2pVZjI/I1IoRm02SWFneDByQFg9QHEoN3g4aWNLZzczPEpvM3VScSkvdWxDNjF9dUVxXlJNOSR1dkU5''@;'; put 'put ''NXAlOztgZDBiNjhQfShTL0RYd1VyaXxoJGVVJltZPzVGM0wpWy9LPzBjOHpAZFRvVnNBe081aG1rPjg3LjBKfmwifmtrc0FpZypJYztHak9DY11VSHJEJUJ4Vl18Wms5NDpuVGNAOCh2IyhZJkFVajlSaWBEJERyYmxvI0pmNGx6NVsiOlZxUlh8dSwoanVERTFYL0tUdy9WZ2ljV3FIMTR+YEVj''@;'; put 'put ''MVhPSEVIYjtDej06MStoWmMua1lnWE0jb191JSxxeF4hSSRtbklUcjZASmRMNXZQQnRGcjopPHk2S25JKUAxSnUzNkBrWkJ0MU15Z25TPWVwfiN2MT5JUXtPRHs1b1NndWIjND1SSXk6WCtTRXFRZ0l+djg+Iz4zOUsiaiN8ejRRViQrNFh1W2MxTGRVTnUxZlJicThnR11fJCJUTl9NN3JLckdf''@;'; put 'put ''fnI9TDFQRTI/fWk9KnQzI2Nda2poSVJrfGA2Km1PYS9JPihAQD5weGRBJWshXnB1KWdRd3t2cilfTnE7dXpbQy9VLHJJRy9QTTZjfGRzLmZlNDAmbXI2OEtSXl83XUVmUEJ6ejNReFp5PXlHX2FaJCZaOXdBSWA7I1B+ZzJlMWpnMyMja0Y/WzNWI1lrL3VjKiZZIy9IKFR2eiQlUDlaUHNhNV12''@;'; put 'put ''OXd1NTtTQkBKPTVJaWZXUVhJMFVBJykpKSxIQXx8KEhBPUZ4dCh7d2FzbUJpbmFyeTpGdGUsbG9jYXRlRmlsZTp2b2lkIDB9KSksSEF9ZnVuY3Rpb24genh0KGMpe3JldHVybntwYXRoOmMucGF0aCxkYXRhOmA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9u''@;'; put 'put ''ZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+XG48c3ZnIHdpZHRoPSIke2Mud2lkdGh9IiBoZWlnaHQ9IiR7Yy5oZWlnaHR9Ij48L3N2Zz5gfX1m''@;'; put 'put ''dW5jdGlvbiBVeHQoYyl7cmV0dXJuIGMubWFwKHp4dCl9dmFyIHI3ZT1jbGFzcyBJd3tjb25zdHJ1Y3RvcihsKXt0aGlzLl9tb2R1bGU9bH1zdGF0aWMgbG9hZCgpe3JldHVybiBCeHQoKS50aGVuKGw9Pm5ldyBJdyhsKSl9c3RhdGljIHVubG9hZCgpeyFmdW5jdGlvbiBqeHQoKXtIQSYmKEhB''@;'; put 'put ''PXZvaWQgMCl9KCl9dmVyc2lvbigpe3JldHVybiB0aGlzLl9tb2R1bGUuR3JhcGh2aXoucHJvdG90eXBlLnZlcnNpb24oKX1sYXlvdXQobCxhPSJzdmciLGQ9ImRvdCIsaCl7aWYoIWwpcmV0dXJuIiI7bGV0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeihoPy55SW52ZXJ0PzE6MCxoPy5u''@;'; put 'put ''b3A/aD8ubm9wOjApLHY9IiIsTT0iIjt0cnl7IWZ1bmN0aW9uIFp4dChjLGwpe2xldCBhPXtpbWFnZXM6W10sZmlsZXM6W10sLi4ubH07Wy4uLmEuZmlsZXMsLi4uVXh0KGEuaW1hZ2VzKV0uZm9yRWFjaChkPT5jLmNyZWF0ZUZpbGUoZC5wYXRoLGQuZGF0YSkpfShmLGgpO3RyeXt2PWYubGF5''@;'; put 'put ''b3V0KGwsYSxkKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9YWN5Y2xpYyhsLGE9ITEsZD0hMSl7aWYoIWwpcmV0dXJu''@;'; put 'put ''e2FjeWNsaWM6ITEsbnVtX3JldjowLG91dEZpbGU6IiJ9O2xldCBoPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosZj0hMSx2PTAsTT0iIixEPSIiO3RyeXt0cnl7Zj1oLmFjeWNsaWMobCxhLGQpLHY9aC5hY3ljbGljX251bV9yZXYsTT1oLmFjeWNsaWNfb3V0RmlsZX1jYXRjaChaKXtEPVou''@;'; put 'put ''bWVzc2FnZX1EPWgubGFzdEVycm9yKCl8fER9ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZihEKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihEKTtyZXR1cm57YWN5Y2xpYzpmLG51bV9yZXY6dixvdXRGaWxlOk19fXRyZWQobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybntv''@;'; put 'put ''dXQ6IiIsZXJyOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9IiIsdj0iIixNPSIiO3RyeXt0cnl7aC50cmVkKGwsYSxkKSxmPWgudHJlZF9vdXQsdj1oLnRyZWRfZXJyfWNhdGNoKEQpe009RC5tZXNzYWdlfU09aC5sYXN0RXJyb3IoKXx8TX1maW5hbGx5e3RoaXMuX21v''@;'; put 'put ''ZHVsZS5kZXN0cm95KGgpfWlmKCFmJiZNKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm57b3V0OmYsZXJyOnZ9fXVuZmxhdHRlbihsLGE9MCxkPSExLGg9MCl7aWYoIWwpcmV0dXJuIiI7bGV0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeix2PSIiLE09IiI7dHJ5e3Ry''@;'; put 'put ''eXt2PWYudW5mbGF0dGVuKGwsYSxkLGgpfWNhdGNoKEQpe009RC5tZXNzYWdlfU09Zi5sYXN0RXJyb3IoKXx8TX1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCF2JiZNKXRocm93IEl3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm4gdn1jaXJjbyhsLGE9InN2ZyIsZCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5''@;'; put 'put ''b3V0KGwsYSwic2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwib3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0''@;'; put 'put ''KGwsYSwicGF0Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfW5vcChsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90Iiwibm9wIil9bm9wMihsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90Iiwibm9wMiIpfX07ZnVuY3Rp''@;'; put 'put ''b24gRk4oYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYyl9ZnVuY3Rpb24gTTYoYyl7cmV0dXJuIE1hdGgucm91bmQoMTAwKmMpLzEwMH1mdW5jdGlvbiBpN2UoYyxsKXtpZigicG9seWdvbiI9PWMudGFnKXsoYT1GTihjKSkudGFnPSJwYXRoIjt2YXIgaD1GTihkPWMuYXR0cmlidXRlcyks''@;'; put 'put ''Zj1kLnBvaW50cztpZigicG9seWdvbiI9PWwudGFnKXsodj1jLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjtmb3IodmFyIEQ9ZC5wb2ludHMuc3BsaXQoIiAiKSxaPUQubWFwKGZ1bmN0aW9uKE9uKXt2YXIgenI9T24uc3BsaXQoIiwiKTtyZXR1cm5benJbMF0t''@;'; put 'put ''di5jeCx6clsxXS12LmN5XX0pLHJlPVpbWi5sZW5ndGgtMV1bMF0sY2U9WltaLmxlbmd0aC0xXVsxXSxiZT0wO2JlPFoubGVuZ3RoO2JlKysscmU9RWUsY2U9QmUpe3ZhciBxZT0oRWU9WltiZV1bMF0pLXJlO2lmKDAhPShydD0oQmU9WltiZV1bMV0pLWNlKSYmMDw9KHB0PXJlLWNlKnFlL3J0''@;'; put 'put ''KSYmcHQ8MS8wJiYocmU8PXB0JiZwdDw9RWV8fEVlPD1wdCYmcHQ8PXJlKSlicmVha312YXIgZHQ9W1t2LmN4K3B0LHYuY3krMF0uam9pbigiLCIpXTtmPShkdD0oZHQ9ZHQuY29uY2F0KEQuc2xpY2UoYmUpKSkuY29uY2F0KEQuc2xpY2UoMCxiZSkpKS5qb2luKCIgIil9aC5kPSJNIitmKyJ6''@;'; put 'put ''IixkZWxldGUgaC5wb2ludHMsYS5hdHRyaWJ1dGVzPWh9ZWxzZXt2YXIgYTsoYT1GTihjKSkudGFnPSJwYXRoIixoPUZOKGQ9Yy5hdHRyaWJ1dGVzKTt2YXIgZCxFZSxCZSxwdCxKdD1kLmN4LHZuPWQuY3ksQ249ZC5yeCx0bj1kLnJ5O2lmKCJwb2x5Z29uIj09bC50YWcpe3ZhciB2Oyh2PWwu''@;'; put 'put ''YmJveCkuY3g9di54K3Yud2lkdGgvMix2LmN5PXYueSt2LmhlaWdodC8yO3ZhciBNbj1sLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIilbMF0uc3BsaXQoIiwiKSxydD0ocWU9TW5bMF0tdi5jeCxNblsxXS12LmN5KSxtcj1NYXRoLnNxcnQoTWF0aC5wb3cocWUsMikrTWF0aC5wb3cocnQs''@;'; put 'put ''MikpLEduPXFlL21yLGFpPS1ydC9tcn1lbHNlIEduPTEsYWk9MDtoLmQ9Ik0gIitKdCsiICIrdm4rIiBtICIrKEVlPUNuKkduKSsiLCIrKEJlPS10biphaSkrIiBhICIrQ24rIiwiK3RuKyIgMCAxLDAgIisocWU9KHB0PUNuKi1HbiktRWUpKyIsIisocnQ9LXRuKi1haS1CZSkrIiBhICIrQ24r''@;'; put 'put ''IiwiK3RuKyIgMCAxLDAgIistcWUrIiwiKy1ydCsieiIsZGVsZXRlIGguY3gsZGVsZXRlIGguY3ksZGVsZXRlIGgucngsZGVsZXRlIGgucnksYS5hdHRyaWJ1dGVzPWh9cmV0dXJuIGF9ZnVuY3Rpb24gR3h0KCl7dHJ5e3I3ZS5sb2FkKCkudGhlbihhPT57YS5sYXlvdXQoIiIsInN2ZyIsImRv''@;'; put 'put ''dCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyksdGhpcy5fYWZ0ZXJJbml0JiZ0aGlzLl9hZnRlckluaXQoKX0pfWNhdGNoe31pZihudWxsIT10aGlzLl93b3JrZXIpe3ZhciBj''@;'; put 'put ''PXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5fd29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCkuY2FsbChsLGEpfSxjLm1hdGNoKC9eaHR0cHM/OlwvXC98XlwvXC8vaSl8fChjPW5ldyB3aW5kb3cuVVJMKGMsZG9jdW1lbnQubG9jYXRp''@;'; put 'put ''b24uaHJlZikuaHJlZiksSHRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6IiIsZW5naW5lOiJkb3QiLHZpelVSTDpjfSxmdW5jdGlvbihhKXt9KSxIdGUuY2FsbCh0aGlzLHt0eXBlOiJ2ZXJzaW9uIn0sZnVuY3Rpb24oYSl7InZlcnNpb24iPT09YS5kYXRhLnR5cGUmJihsLl9ncmFw''@;'; put 'put ''aHZpelZlcnNpb249YS5kYXRhLnZlcnNpb24sbC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcykpfSl9fWZ1bmN0aW9uIEh0ZShjLGwpe3RoaXMuX3dvcmtlckNhbGxiYWNrcy5wdXNoKGwpLHRoaXMuX3dvcmtlclBvcnQucG9zdE1lc3NhZ2UoYyl9ZnVuY3Rpb24gcXh0KGMsbCl7dmFy''@;'; put 'put ''IGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcztpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24mJnRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVk''@;'; put 'put ''ZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCx2PXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKTtlbHNlIGY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbix2PSExO3ZhciBNPXRoaXMuX29wdGlv''@;'; put 'put ''bnMuZ3Jvd0VudGVyaW5nRWRnZXMsRD17fSxaPXRoaXMuX2RpY3Rpb25hcnl8fHt9LHJlPXt9LGNlPXRoaXMuX25vZGVEaWN0aW9uYXJ5fHx7fTtmdW5jdGlvbiBwdChHbixhaT0wLF9pKXsoZnVuY3Rpb24gYmUoR24sYWkpe3ZhciBfaT1Hbi50YWc7aWYoImluZGV4Ij09YSlHbi5rZXk9YWk7''@;'; put 'put ''ZWxzZSBpZigiIyIhPV9pWzBdKWlmKCJpZCI9PWEpR24ua2V5PUduLmF0dHJpYnV0ZXMuaWQ7ZWxzZSBpZigidGl0bGUiPT1hKXt2YXIgT249R24uY2hpbGRyZW4uZmluZChmdW5jdGlvbih6cil7cmV0dXJuInRpdGxlIj09enIudGFnfSk7T24mJihHbi5rZXk9T24uY2hpbGRyZW4ubGVuZ3Ro''@;'; put 'put ''PjA/T24uY2hpbGRyZW5bMF0udGV4dDoiIil9bnVsbD09R24ua2V5JiYoaCYmKCJlbGxpcHNlIj09X2l8fCJwb2x5Z29uIj09X2kpJiYoX2k9InBhdGgiKSxHbi5rZXk9X2krIi0iK2FpKX0pKEduLGFpKSxmdW5jdGlvbiBFZShHbixhaSl7R24uaWQ9KGFpP2FpLmlkKyIuIjoiIikrR24ua2V5''@;'; put 'put ''fShHbixfaSk7dmFyIHpyPVpbR24uaWRdOyhmdW5jdGlvbiBCZShHbil7RFtHbi5pZF09R259KShHbiksZnVuY3Rpb24gcWUoR24sYWkpe2gmJkduLmlkIGluIFomJigicG9seWdvbiI9PWFpLnRhZ3x8ImVsbGlwc2UiPT1haS50YWd8fCJwYXRoIj09YWkudGFnKSYmKGFpLnRhZyE9R24udGFn''@;'; put 'put ''fHwicG9seWdvbiI9PUduLnRhZykmJigicGF0aCIhPWFpLnRhZyYmKEduLmFsdGVybmF0aXZlT2xkPWk3ZShhaSxHbikpLCJwYXRoIiE9R24udGFnJiYoR24uYWx0ZXJuYXRpdmVOZXc9aTdlKEduLGFpKSkpfShHbix6ciksZnVuY3Rpb24gcnQoR24sYWkpe2lmKGQmJmFpJiYoInBhdGgiPT1h''@;'; put 'put ''aS50YWd8fEduLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PUduLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciBfaT0oR24uYWx0ZXJuYXRpdmVOZXd8fEduKS5hdHRyaWJ1dGVzLmQ7aWYoR24uYWx0ZXJuYXRpdmVPbGQpdmFyIE9uPWt0ZShHbi5hbHRlcm5hdGl2ZU9sZCk7ZWxzZSBPbj1rdGUo''@;'; put 'put ''YWkpOyhHbi5hbHRlcm5hdGl2ZU9sZHx8KEduLmFsdGVybmF0aXZlT2xkPXt9KSkucG9pbnRzPWZ1bmN0aW9uIGZ4dChjLGwsYSxkKXtjb25zdCBoPWMsZj1oLmNsb25lTm9kZSgpLHY9aC5nZXRUb3RhbExlbmd0aCgpLE09KGYuc2V0QXR0cmlidXRlKCJkIixsKSxmKS5nZXRUb3RhbExlbmd0''@;'; put 'put ''aCgpLEQ9WzBdO2xldCBaPTA7Y29uc3QgcmU9ZD9hOmEvTWF0aC5tYXgodixNKTtmb3IoOyhaKz1yZSk8MTspRC5wdXNoKFopO3JldHVybiBELnB1c2goMSksRC5tYXAoZnVuY3Rpb24oYmUpe2NvbnN0IEVlPWguZ2V0UG9pbnRBdExlbmd0aChiZSp2KSxCZT1mLmdldFBvaW50QXRMZW5ndGgo''@;'; put 'put ''YmUqTSk7cmV0dXJuW1tFZS54LEVlLnldLFtCZS54LEJlLnldXX0pfShPbixfaSxmLHYpfX0oR24senIpO3ZhciBKbj17fTtHbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKERyKXt2YXIgJHI9RHIudGFnOygiZWxsaXBzZSI9PSRyfHwicG9seWdvbiI9PSRyKSYmKCRyPSJwYXRoIiksbnVs''@;'; put 'put ''bD09Sm5bJHJdJiYoSm5bJHJdPTApLHB0KERyLEpuWyRyXSsrLEduKX0pfWZ1bmN0aW9uIHZuKEduKXsoZnVuY3Rpb24gZHQoR24pe2lmKE0mJkduLnBhcmVudCYmIm5vZGUiPT1Hbi5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09R24udGFnKXtpZihHbi5jaGlsZHJlbi5sZW5n''@;'; put 'put ''dGg+MCl2YXIgT249R24uY2hpbGRyZW5bMF0udGV4dDtlbHNlIE9uPSIiO3JlW09uXT1Hbi5wYXJlbnR9fSkoR24pLGZ1bmN0aW9uIEp0KEduKXt2YXIgX2k9R24udGFnO2lmKE0mJiFaW0duLmlkXSYmR24ucGFyZW50JiZROGUoR24pJiYoInBhdGgiPT1faXx8InBvbHlnb24iPT1faSkpe2lm''@;'; put 'put ''KCJwb2x5Z29uIj09X2kpe3ZhciB6cj1Hbi5wYXJlbnQuY2hpbGRyZW4uZmluZChmdW5jdGlvbihIcil7cmV0dXJuInBhdGgiPT1Ici50YWd9KTt6ciYmKEduLnRvdGFsTGVuZ3RoPXpyLnRvdGFsTGVuZ3RoKX12YXIgSm49ZnVuY3Rpb24gbXh0KGMpe3JldHVybiBmdW5jdGlvbiBneHQoYyl7''@;'; put 'put ''cmV0dXJuImVkZ2UiPT1jLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzP2MucGFyZW50OmMucGFyZW50LnBhcmVudC5wYXJlbnR9KGMpLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24obCl7cmV0dXJuInRpdGxlIj09bC50YWd9KX0oR24pLERyPUpuLmNoaWxkcmVuWzBdLCRyPURyLnRleHQuc3BsaXQo''@;'; put 'put ''Ii0+Iik7MiE9JHIubGVuZ3RoJiYoJHI9RHIudGV4dC5zcGxpdCgiLS0iKSk7dmFyIHdpPSRyWzBdLGVhPXJlW3dpXTtpZihPYmplY3QuaGFzT3duKGNlLHdpKSl7dmFyIGZhPWNlW3dpXTtpZigoTnQ9ZWEuY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhyLHFyKXtyZXR1cm4iZyI9PUhy''@;'; put 'put ''LnRhZ30pKT49MCl7dmFyIHZ0PWVhLmNoaWxkcmVuW050XS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oSHIscXIpe3JldHVybiJhIj09SHIudGFnfSk7ZWE9ZWEuY2hpbGRyZW5bTnRdLmNoaWxkcmVuW3Z0XX0oTnQ9ZmEuY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhyLHFyKXty''@;'; put 'put ''ZXR1cm4iZyI9PUhyLnRhZ30pKT49MCYmKHZ0PWZhLmNoaWxkcmVuW050XS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24ocXIsb24pe3JldHVybiJhIj09cXIudGFnfSksZmE9ZmEuY2hpbGRyZW5bTnRdLmNoaWxkcmVuW3Z0XSk7Zm9yKHZhciBGdD1lYS5jaGlsZHJlbixOdD0wO050PEZ0''@;'; put 'put ''Lmxlbmd0aDtOdCsrKWlmKCJwb2x5Z29uIj09RnRbTnRdLnRhZ3x8ImVsbGlwc2UiPT1GdFtOdF0udGFnfHwicGF0aCI9PUZ0W050XS50YWd8fCJ0ZXh0Ij09RnRbTnRdLnRhZyl7dmFyIEhuPUZ0W050XTticmVha312YXIgdHI9ZmEuY2hpbGRyZW47Zm9yKE50PTA7TnQ8dHIubGVuZ3RoO050''@;'; put 'put ''KyspaWYoInBvbHlnb24iPT10cltOdF0udGFnfHwiZWxsaXBzZSI9PXRyW050XS50YWd8fCJwYXRoIj09dHJbTnRdLnRhZ3x8InRleHQiPT10cltOdF0udGFnKXt2YXIgYXI9dHJbTnRdO2JyZWFrfUduLm9mZnNldD1hciYmSG4/e3g6YXIuY2VudGVyLngtSG4uY2VudGVyLngseTphci5jZW50''@;'; put 'put ''ZXIueS1Ibi5jZW50ZXIueX06e3g6MCx5OjB9fX19KEduKSxHbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGFpKXt2bihhaSl9KX10aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRFbmQiLHRoaXMpO3ZhciBDbj13cyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVu''@;'; put 'put ''ZCgiZGl2IiksTW49KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYywiaW1hZ2Uvc3ZnK3htbCIpO0NuLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBNbi5kb2N1bWVudEVsZW1lbnR9KTt2YXIgR3I9dHYoQ24uc2VsZWN0KCJzdmciKSk7dGhpcy5fZGlzcGF0Y2guY2Fs''@;'; put 'put ''bCgiZGF0YUV4dHJhY3RFbmQiLHRoaXMpLHB0KEdyKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIix0aGlzKSx2bihHciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMkVuZCIsdGhpcyksdGhpcy5fZGF0YT1Hcix0aGlzLl9kaWN0aW9uYXJ5''@;'; put 'put ''PUQsdGhpcy5fbm9kZURpY3Rpb25hcnk9cmUsdGhpcy5fZXh0cmFjdERhdGE9ZnVuY3Rpb24oR24sYWksX2kpe3ZhciBPbj10dihHbik7cmV0dXJuIHB0KE9uLGFpLF9pKSx2bihPbiksT259LHRoaXMuX2J1c3k9ITEsdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NFbmQiLHRoaXMp''@;'; put 'put ''LGwmJmwuY2FsbCh0aGlzKSx0aGlzLl9xdWV1ZS5sZW5ndGg+MCYmdGhpcy5fcXVldWUuc2hpZnQoKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEhOKGMsbCl7aWYoKGE9KGM9bD9jLnRvRXhwb25lbnRpYWwobC0xKTpjLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxs''@;'; put 'put ''O3ZhciBhLGQ9Yy5zbGljZSgwLGEpO3JldHVybltkLmxlbmd0aD4xP2RbMF0rZC5zbGljZSgyKTpkLCtjLnNsaWNlKGErMSldfXZhciBhN2Usd0V0PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0''@;'; put 'put ''aW9uIE50ZShjKXtpZighKGw9d0V0LmV4ZWMoYykpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYyk7dmFyIGw7cmV0dXJuIG5ldyBWdGUoe2ZpbGw6bFsxXSxhbGlnbjpsWzJdLHNpZ246bFszXSxzeW1ib2w6bFs0XSx6ZXJvOmxbNV0sd2lkdGg6bFs2XSxjb21tYTpsWzdd''@;'; put 'put ''LHByZWNpc2lvbjpsWzhdJiZsWzhdLnNsaWNlKDEpLHRyaW06bFs5XSx0eXBlOmxbMTBdfSl9ZnVuY3Rpb24gVnRlKGMpe3RoaXMuZmlsbD12b2lkIDA9PT1jLmZpbGw/IiAiOmMuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PWMuYWxpZ24/Ij4iOmMuYWxpZ24rIiIsdGhpcy5zaWduPXZv''@;'; put 'put ''aWQgMD09PWMuc2lnbj8iLSI6Yy5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PWMuc3ltYm9sPyIiOmMuc3ltYm9sKyIiLHRoaXMuemVybz0hIWMuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PWMud2lkdGg/dm9pZCAwOitjLndpZHRoLHRoaXMuY29tbWE9ISFjLmNvbW1hLHRoaXMucHJl''@;'; put 'put ''Y2lzaW9uPXZvaWQgMD09PWMucHJlY2lzaW9uP3ZvaWQgMDorYy5wcmVjaXNpb24sdGhpcy50cmltPSEhYy50cmltLHRoaXMudHlwZT12b2lkIDA9PT1jLnR5cGU/IiI6Yy50eXBlKyIifWZ1bmN0aW9uIG83ZShjLGwpe3ZhciBhPUhOKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7dmFyIGQ9YVsw''@;'; put 'put ''XSxoPWFbMV07cmV0dXJuIGg8MD8iMC4iK25ldyBBcnJheSgtaCkuam9pbigiMCIpK2Q6ZC5sZW5ndGg+aCsxP2Quc2xpY2UoMCxoKzEpKyIuIitkLnNsaWNlKGgrMSk6ZCtuZXcgQXJyYXkoaC1kLmxlbmd0aCsyKS5qb2luKCIwIil9TnRlLnByb3RvdHlwZT1WdGUucHJvdG90eXBlLFZ0ZS5w''@;'; put 'put ''cm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoi''@;'; put 'put ''IikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtjb25zdCBzN2U9eyIlIjooYyxsKT0+KDEwMCpjKS50b0ZpeGVkKGwpLGI6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygy''@;'; put 'put ''KSxjOmM9PmMrIiIsZDpmdW5jdGlvbiB2RXQoYyl7cmV0dXJuIE1hdGguYWJzKGM9TWF0aC5yb3VuZChjKSk+PTFlMjE/Yy50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmMudG9TdHJpbmcoMTApfSxlOihjLGwpPT5jLnRvRXhwb25lbnRpYWwobCksZjooYyxsKT0+Yy50''@;'; put 'put ''b0ZpeGVkKGwpLGc6KGMsbCk9PmMudG9QcmVjaXNpb24obCksbzpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDgpLHA6KGMsbCk9Pm83ZSgxMDAqYyxsKSxyOm83ZSxzOmZ1bmN0aW9uIFNFdChjLGwpe3ZhciBhPUhOKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7dmFyIGQ9YVswXSxoPWFbMV0s''@;'; put 'put ''Zj1oLShhN2U9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaC8zKSkpKSsxLHY9ZC5sZW5ndGg7cmV0dXJuIGY9PT12P2Q6Zj52P2QrbmV3IEFycmF5KGYtdisxKS5qb2luKCIwIik6Zj4wP2Quc2xpY2UoMCxmKSsiLiIrZC5zbGljZShmKToiMC4iK25ldyBBcnJheSgxLWYp''@;'; put 'put ''LmpvaW4oIjAiKStITihjLE1hdGgubWF4KDAsbCtmLTEpKVswXX0sWDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIGw3ZShjKXtyZXR1cm4gY312YXIgTk4sYWYsYzdlPUFycmF5LnBy''@;'; put 'put ''b3RvdHlwZS5tYXAsdTdlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdOyFmdW5jdGlvbiBFRXQoYyl7Tk49ZnVuY3Rpb24gTUV0KGMpe3ZhciBsPXZvaWQgMD09PWMuZ3JvdXBpbmd8fHZvaWQgMD09PWMudGhv''@;'; put 'put ''dXNhbmRzP2w3ZTpmdW5jdGlvbiB5RXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtmb3IodmFyIGg9YS5sZW5ndGgsZj1bXSx2PTAsTT1jWzBdLEQ9MDtoPjAmJk0+MCYmKEQrTSsxPmQmJihNPU1hdGgubWF4KDEsZC1EKSksZi5wdXNoKGEuc3Vic3RyaW5nKGgtPU0saCtNKSksISgoRCs9''@;'; put 'put ''TSsxKT5kKSk7KU09Y1t2PSh2KzEpJWMubGVuZ3RoXTtyZXR1cm4gZi5yZXZlcnNlKCkuam9pbihsKX19KGM3ZS5jYWxsKGMuZ3JvdXBpbmcsTnVtYmVyKSxjLnRob3VzYW5kcysiIiksYT12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMuY3VycmVuY3lbMF0rIiIsZD12b2lkIDA9PT1jLmN1cnJl''@;'; put 'put ''bmN5PyIiOmMuY3VycmVuY3lbMV0rIiIsaD12b2lkIDA9PT1jLmRlY2ltYWw/Ii4iOmMuZGVjaW1hbCsiIixmPXZvaWQgMD09PWMubnVtZXJhbHM/bDdlOmZ1bmN0aW9uIF9FdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gY1srYV19KX19KGM3ZS5jYWxsKGMubnVtZXJhbHMsU3RyaW5nKSksdj12b2lkIDA9PT1jLnBlcmNlbnQ/IiUiOmMucGVyY2VudCsiIixNPXZvaWQgMD09PWMubWludXM/Ilx1MjIxMiI6Yy5taW51cysiIixEPXZvaWQgMD09PWMubmFuPyJOYU4iOmMubmFuKyIiO2Z1bmN0aW9uIFooY2Up''@;'; put 'put ''e3ZhciBiZT0oY2U9TnRlKGNlKSkuZmlsbCxFZT1jZS5hbGlnbixCZT1jZS5zaWduLHFlPWNlLnN5bWJvbCxydD1jZS56ZXJvLHB0PWNlLndpZHRoLGR0PWNlLmNvbW1hLEp0PWNlLnByZWNpc2lvbix2bj1jZS50cmltLENuPWNlLnR5cGU7Im4iPT09Q24/KGR0PSEwLENuPSJnIik6czdlW0Nu''@;'; put 'put ''XXx8KHZvaWQgMD09PUp0JiYoSnQ9MTIpLHZuPSEwLENuPSJnIiksKHJ0fHwiMCI9PT1iZSYmIj0iPT09RWUpJiYocnQ9ITAsYmU9IjAiLEVlPSI9Iik7dmFyIHRuPSIkIj09PXFlP2E6IiMiPT09cWUmJi9bYm94WF0vLnRlc3QoQ24pPyIwIitDbi50b0xvd2VyQ2FzZSgpOiIiLE1uPSIkIj09''@;'; put 'put ''PXFlP2Q6L1slcF0vLnRlc3QoQ24pP3Y6IiIsd3I9czdlW0NuXSxHcj0vW2RlZmdwcnMlXS8udGVzdChDbik7ZnVuY3Rpb24gbXIoR24pe3ZhciBPbix6cixKbixhaT10bixfaT1NbjtpZigiYyI9PT1DbilfaT13cihHbikrX2ksR249IiI7ZWxzZXt2YXIgRHI9KEduPStHbik8MHx8MS9Hbjww''@;'; put 'put ''O2lmKEduPWlzTmFOKEduKT9EOndyKE1hdGguYWJzKEduKSxKdCksdm4mJihHbj1mdW5jdGlvbiBDRXQoYyl7ZTpmb3IodmFyIGgsbD1jLmxlbmd0aCxhPTEsZD0tMTthPGw7KythKXN3aXRjaChjW2FdKXtjYXNlIi4iOmQ9aD1hO2JyZWFrO2Nhc2UiMCI6MD09PWQmJihkPWEpLGg9YTticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKCErY1thXSlicmVhayBlO2Q+MCYmKGQ9MCl9cmV0dXJuIGQ+MD9jLnNsaWNlKDAsZCkrYy5zbGljZShoKzEpOmN9KEduKSksRHImJjA9PStHbiYmIisiIT09QmUmJihEcj0hMSksYWk9KERyPyIoIj09PUJlP0JlOk06Ii0iPT09QmV8fCIoIj09PUJlPyIiOkJlKSthaSxf''@;'; put 'put ''aT0oInMiPT09Q24/dTdlWzgrYTdlLzNdOiIiKStfaSsoRHImJiIoIj09PUJlPyIpIjoiIiksR3IpZm9yKE9uPS0xLHpyPUduLmxlbmd0aDsrK09uPHpyOylpZig0OD4oSm49R24uY2hhckNvZGVBdChPbikpfHxKbj41Nyl7X2k9KDQ2PT09Sm4/aCtHbi5zbGljZShPbisxKTpHbi5zbGljZShP''@;'; put 'put ''bikpK19pLEduPUduLnNsaWNlKDAsT24pO2JyZWFrfX1kdCYmIXJ0JiYoR249bChHbiwxLzApKTt2YXIgJHI9YWkubGVuZ3RoK0duLmxlbmd0aCtfaS5sZW5ndGgsd2k9JHI8cHQ/bmV3IEFycmF5KHB0LSRyKzEpLmpvaW4oYmUpOiIiO3N3aXRjaChkdCYmcnQmJihHbj1sKHdpK0duLHdpLmxl''@;'; put 'put ''bmd0aD9wdC1faS5sZW5ndGg6MS8wKSx3aT0iIiksRWUpe2Nhc2UiPCI6R249YWkrR24rX2krd2k7YnJlYWs7Y2FzZSI9IjpHbj1haSt3aStHbitfaTticmVhaztjYXNlIl4iOkduPXdpLnNsaWNlKDAsJHI9d2kubGVuZ3RoPj4xKSthaStHbitfaSt3aS5zbGljZSgkcik7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDpHbj13aSthaStHbitfaX1yZXR1cm4gZihHbil9cmV0dXJuIEp0PXZvaWQgMD09PUp0PzY6L1tncHJzXS8udGVzdChDbik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxKdCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsSnQpKSxtci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBjZSsiIn0s''@;'; put 'put ''bXJ9cmV0dXJue2Zvcm1hdDpaLGZvcm1hdFByZWZpeDpmdW5jdGlvbiByZShjZSxiZSl7dmFyIEVlPVooKChjZT1OdGUoY2UpKS50eXBlPSJmIixjZSkpLEJlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIGJFdChjKXtyZXR1cm4oYz1ITihNYXRoLmFicyhj''@;'; put 'put ''KSkpP2NbMV06TmFOfShiZSkvMykpKSxxZT1NYXRoLnBvdygxMCwtQmUpLHJ0PXU3ZVs4K0JlLzNdO3JldHVybiBmdW5jdGlvbihwdCl7cmV0dXJuIEVlKHFlKnB0KStydH19fX0oYyksYWY9Tk4uZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19''@;'; put 'put ''KTtjb25zdCBCdGU9TWF0aC5QSSxqdGU9MipCdGUscnY9MWUtNixrRXQ9anRlLXJ2O2Z1bmN0aW9uIGQ3ZShjKXt0aGlzLl8rPWNbMF07Zm9yKGxldCBsPTEsYT1jLmxlbmd0aDtsPGE7KytsKXRoaXMuXys9YXJndW1lbnRzW2xdK2NbbF19Y2xhc3MgenRle2NvbnN0cnVjdG9yKGwpe3RoaXMu''@;'; put 'put ''X3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1sP2Q3ZTpmdW5jdGlvbiBERXQoYyl7bGV0IGw9TWF0aC5mbG9vcihjKTtpZighKGw+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Y31gKTtpZihsPjE1''@;'; put 'put ''KXJldHVybiBkN2U7Y29uc3QgYT0xMCoqbDtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5fKz1kWzBdO2ZvcihsZXQgaD0xLGY9ZC5sZW5ndGg7aDxmOysraCl0aGlzLl8rPU1hdGgucm91bmQoYXJndW1lbnRzW2hdKmEpL2ErZFtoXX19KGwpfW1vdmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBNJHt0''@;'; put 'put ''aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGwsYSl7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gx''@;'; put 'put ''PStsfSwke3RoaXMuX3kxPSthfWB9cXVhZHJhdGljQ3VydmVUbyhsLGEsZCxoKXt0aGlzLl9hcHBlbmRgUSR7K2x9LCR7K2F9LCR7dGhpcy5feDE9K2R9LCR7dGhpcy5feTE9K2h9YH1iZXppZXJDdXJ2ZVRvKGwsYSxkLGgsZix2KXt0aGlzLl9hcHBlbmRgQyR7K2x9LCR7K2F9LCR7K2R9LCR7''@;'; put 'put ''K2h9LCR7dGhpcy5feDE9K2Z9LCR7dGhpcy5feTE9K3Z9YH1hcmNUbyhsLGEsZCxoLGYpe2lmKGw9K2wsYT0rYSxkPStkLGg9K2gsKGY9K2YpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7Zn1gKTtsZXQgdj10aGlzLl94MSxNPXRoaXMuX3kxLEQ9ZC1sLFo9aC1hLHJl''@;'; put 'put ''PXYtbCxjZT1NLWEsYmU9cmUqcmUrY2UqY2U7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YDtlbHNlIGlmKGJlPnJ2KWlmKE1hdGguYWJzKGNlKkQtWipyZSk+cnYmJmYpe2xldCBFZT1kLXYsQmU9aC1NLHFlPUQqRCtaKloscnQ9''@;'; put 'put ''RWUqRWUrQmUqQmUscHQ9TWF0aC5zcXJ0KHFlKSxkdD1NYXRoLnNxcnQoYmUpLEp0PWYqTWF0aC50YW4oKEJ0ZS1NYXRoLmFjb3MoKHFlK2JlLXJ0KS8oMipwdCpkdCkpKS8yKSx2bj1KdC9kdCxDbj1KdC9wdDtNYXRoLmFicyh2bi0xKT5ydiYmdGhpcy5fYXBwZW5kYEwke2wrdm4qcmV9LCR7''@;'; put 'put ''YSt2bipjZX1gLHRoaXMuX2FwcGVuZGBBJHtmfSwke2Z9LDAsMCwkeysoY2UqRWU+cmUqQmUpfSwke3RoaXMuX3gxPWwrQ24qRH0sJHt0aGlzLl95MT1hK0NuKlp9YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YH1hcmMobCxhLGQsaCxmLHYpe2lmKGw9''@;'; put 'put ''K2wsYT0rYSx2PSEhdiwoZD0rZCk8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtkfWApO2xldCBNPWQqTWF0aC5jb3MoaCksRD1kKk1hdGguc2luKGgpLFo9bCtNLHJlPWErRCxjZT0xXnYsYmU9dj9oLWY6Zi1oO251bGw9PT10aGlzLl94MT90aGlzLl9hcHBlbmRgTSR7''@;'; put 'put ''Wn0sJHtyZX1gOihNYXRoLmFicyh0aGlzLl94MS1aKT5ydnx8TWF0aC5hYnModGhpcy5feTEtcmUpPnJ2KSYmdGhpcy5fYXBwZW5kYEwke1p9LCR7cmV9YCxkJiYoYmU8MCYmKGJlPWJlJWp0ZStqdGUpLGJlPmtFdD90aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLDEsJHtjZX0sJHtsLU19LCR7''@;'; put 'put ''YS1EfUEke2R9LCR7ZH0sMCwxLCR7Y2V9LCR7dGhpcy5feDE9Wn0sJHt0aGlzLl95MT1yZX1gOmJlPnJ2JiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7KyhiZT49QnRlKX0sJHtjZX0sJHt0aGlzLl94MT1sK2QqTWF0aC5jb3MoZil9LCR7dGhpcy5feTE9YStkKk1hdGguc2luKGYpfWAp''@;'; put 'put ''fXJlY3QobCxhLGQsaCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWgke2Q9K2R9diR7K2h9aCR7LWR9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiBoN2UoKXtyZXR1cm4gbmV3IHp0ZX1mdW5jdGlvbiBJ''@;'; put 'put ''RXQoYyxsLGEsZCl7cmV0dXJuIGw9LWwsZD0tZCxbYyxsXT1bYyphLWwqZCxjKmQrbCphXSxbYyxsPS1sXX1mdW5jdGlvbiBmN2UoYyxsLGEsZCxoLGYsdil7dmFyIEQ9dHYodjdlLmNhbGwodGhpcyxmKSk7Yy5kYXRhKFtEXSksTEEuY2FsbChjLm5vZGUoKSxEKSxwN2UoYyxsLGEsZCxoLGYs''@;'; put 'put ''dil9ZnVuY3Rpb24gcDdlKGMsbCxhLGQsaCxmLHYpe3ZhciBNPXYuc2hvcnRlbmluZ3x8MCxjZT1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAsLTMuNV1dLGJlPWQtbCxFZT1oLWEsQmU9TWF0aC5zcXJ0KGJlKmJlK0VlKkVlKTtpZigwPT1CZSl2YXIgcWU9MSxydD0wO2Vsc2UgcWU9YmUv''@;'; put 'put ''QmUscnQ9RWUvQmU7aWYoZD1sKyhCZS1NLTEwLS4xKSpxZSxoPWErKEJlLU0tMTAtLjEpKnJ0LGYuVVJMfHxmLnRvb2x0aXApdmFyIHB0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxkdD1wdC5zZWxlY3RXaXRo''@;'; put 'put ''b3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO2Vsc2UgZHQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7''@;'; put 'put ''dmFyIHZuPWg3ZSgpO3ZuLm1vdmVUbyhsLGEpLHZuLmxpbmVUbyhkLGgpLGR0LmF0dHIoImQiLHZuKSxkPWwrKEJlLU0tMTApKnFlLGg9YSsoQmUtTS0xMCkqcnQ7Zm9yKHZhciBDbj0wO0NuPGNlLmxlbmd0aDtDbisrKWNlW0NuXT1JRXQoKHRuPWNlW0NuXSlbMF0sdG5bMV0scWUscnQpO2Zv''@;'; put 'put ''cihDbj0wO0NuPGNlLmxlbmd0aDtDbisrKWNlW0NuXT1bZCsodG49Y2VbQ25dKVswXSxoK3RuWzFdXTt2YXIgTW49W107Zm9yKENuPTA7Q248Y2UubGVuZ3RoO0NuKyspe3ZhciB0bjtNbi5wdXNoKCh0bj1jZVtDbl0pLmpvaW4oIiwiKSl9dmFyIHdyPU1uLmpvaW4oIiAiKTtyZXR1cm4gSnQu''@;'; put 'put ''YXR0cigicG9pbnRzIix3ciksdGhpc31mdW5jdGlvbiBnN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0aW9uIG03ZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/dGhpcy5f''@;'; put 'put ''ZHJhd25FZGdlLmc6d3MobnVsbCl9ZnVuY3Rpb24gdjdlKGMpe3ZhciBsPSIiO2Zvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSludWxsIT1jW2FdJiYobCs9JyAiJythKyciPSInK2NbYV0rJyInKTt2YXIgaD10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2EgLT4gYiBbIitsKyJdfSIsInN2''@;'; put 'put ''ZyIsImRvdCIpLHY9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiB3cyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB2LmRvY3VtZW50RWxlbWVudH0pLnNlbGVj''@;'; put 'put ''dCgiLmVkZ2UiKX1mdW5jdGlvbiBiN2UoYyxsLGEsZCxoLGYpe3ZhciBNPXR2KEM3ZS5jYWxsKHRoaXMsZCxoKSk7cmV0dXJuIGMuZGF0YShbTV0pLExBLmNhbGwoYy5ub2RlKCksTSkseTdlKGMsbCxhLGgpLHRoaXN9ZnVuY3Rpb24geTdlKGMsbCxhLGQsaCl7aWYoZC5VUkx8fGQudG9vbHRp''@;'; put 'put ''cCl2YXIgZj1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBmPWM7dmFyIHY9Zi5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFn''@;'; put 'put ''YXRpb24oInRleHQiKTtpZigwIT12LnNpemUoKSl7dmFyIEQ9di5ub2RlKCkuZ2V0QkJveCgpO0QuY3g9RC54K0Qud2lkdGgvMixELmN5PUQueStELmhlaWdodC8yfWVsc2UgMCE9TS5zaXplKCkmJihEPXt4OitNLmF0dHIoIngiKSx5OitNLmF0dHIoInkiKSx3aWR0aDowLGhlaWdodDowLGN4''@;'; put 'put ''OitNLmF0dHIoIngiKSxjeTorTS5hdHRyKCJ5Iil9KTtyZXR1cm4gdi5lYWNoKGZ1bmN0aW9uKFoscmUpe3ZhciBjZT13cyh0aGlzKTtpZihjZS5hdHRyKCJjeCIpKWNlLmF0dHIoImN4IixNNihsKSkuYXR0cigiY3kiLE02KGEpKTtlbHNlIGlmKGNlLmF0dHIoInBvaW50cyIpKXt2YXIgYmU9''@;'; put 'put ''Y2UuYXR0cigicG9pbnRzIikudHJpbSgpO2NlLmF0dHIoInBvaW50cyIsZnVuY3Rpb24gV3h0KGYsbCxhKXt2YXIgaCxkPShoPWYuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KTtyZXR1cm4gZD1oLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bTTYoK2wr''@;'; put 'put ''ICt2LnNwbGl0KCIsIilbMF0pLE02KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KSwoaD1kLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5qb2luKCIsIil9KSkuam9pbigiICIpfShiZSxsLUQuY3gsYS1ELmN5KSl9ZWxzZXt2YXIgRWU9Y2UuYXR0cigiZCIpO2NlLmF0dHIoImQiLGZ1bmN0aW9u''@;'; put 'put ''IFl4dChjLGwsYSl7KGY9Yy5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIGQ9Yy5zcGxpdCgvW15bQS1aIF0rLyksZj0oZi5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuc3BsaXQoIiwiKX0pLGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybltNNigrbCsgK3Yuc3BsaXQoIiwiKVswXSksTTYo''@;'; put 'put ''K2ErICt2LnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5qb2luKCIsIil9KSk7cmV0dXJuIGQucmVkdWNlKGZ1bmN0aW9uKHYsTSxEKXtyZXR1cm4gdi5jb25jYXQoTSxmW0RdKX0sW10pLmpvaW4oIiIpfShFZSxsLUQuY3gsYS1ELmN5KSl9fSksMCE9TS5zaXpl''@;'; put 'put ''KCkmJk0uYXR0cigieCIsTTYoK00uYXR0cigieCIpK2wtRC5jeCkpLmF0dHIoInkiLE02KCtNLmF0dHIoInkiKSthLUQuY3kpKSx0aGlzfWZ1bmN0aW9uIF83ZSgpe2lmKCF0aGlzLl9kcmF3bk5vZGUpcmV0dXJuIHRoaXM7dmFyIGM9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIGMuZW1wdHko''@;'; put 'put ''KXx8Yy5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIHc3ZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJhd25Ob2RlLmc6d3MobnVsbCl9ZnVuY3Rpb24gQzdlKGMsbCl7dmFyIGE9IiI7Zm9yKHZhciBkIG9mIE9iamVjdC5rZXlzKGwpKW51bGwh''@;'; put 'put ''PWxbZF0mJihhKz0nICInK2QrJyI9IicrbFtkXSsnIicpO3ZhciBmPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK2MrJyIgWycrYSsiXX0iLCJzdmciLCJkb3QiKSxNPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGYsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gd3Mo''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTS5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5ub2RlIil9ZnVuY3Rpb24gVk4oYyl7c2VsZi5kb2N1bWVudD17fSxjLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KGwpe2xldCBhPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1hJiZsLmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyhsLmRhdGEudml6VVJMKSxhPXNlbGZbIkBocGNjLWpzL3dhc20iXSksInZlcnNpb24iIT1sLmRhdGEudHlwZT9hLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9Pntjb25z''@;'; put 'put ''dCBoPWQubGF5b3V0KGwuZGF0YS5kb3QsInN2ZyIsbC5kYXRhLmVuZ2luZSxsLmRhdGEub3B0aW9ucyk7Yy5wb3N0TWVzc2FnZShoP3t0eXBlOiJkb25lIixzdmc6aH06bC5kYXRhLnZpelVSTD97dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2goZD0+e2MucG9zdE1lc3NhZ2Uo''@;'; put 'put ''e3R5cGU6ImVycm9yIixlcnJvcjpkLm1lc3NhZ2V9KX0pOmEuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNpb24iLHZlcnNpb246ZC52ZXJzaW9uKCl9KX0pfSl9ZnVuY3Rpb24gQkV0KCl7Vk4oc2VsZil9ZnVuY3Rpb24gakV0KCl7c2VsZi5vbmNv''@;'; put 'put ''bm5lY3Q9ZnVuY3Rpb24oYyl7Y29uc3QgbD1jLnBvcnRzWzBdO1ZOKGwpLGwuc3RhcnQoKX19ZnVuY3Rpb24gVXRlKGMsbCl7aWYodGhpcy5fb3B0aW9ucz17dXNlV29ya2VyOiEwLHVzZVNoYXJlZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0bGUiLGZhZGU6ITAsdHdlZW5Q''@;'; put 'put ''YXRoczohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRnZXM6ITAsem9vbTohMCx6b29tU2NhbGVFeHRlbnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEvMCwtMS8wXSxbMS8wLDEvMF1d''@;'; put 'put ''LHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LGwgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGwpKXRoaXMuX29wdGlvbnNbYV09bFthXTtlbHNlImJvb2xlYW4iPT10eXBlb2YgbCYmKHRoaXMuX29wdGlvbnMudXNlV29ya2VyPWwpO3Zh''@;'; put 'put ''ciBkPXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGg9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihkPSExKSx0eXBlb2YgU2hhcmVkV29ya2VyPiJ1IiYmKGg9ITEpLGR8fGgpe3ZhciB2PWN0ZSgic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuImphdmFzY3JpcHQvd29ya2VyIj09d3ModGhpcykuYXR0cigidHlwZSIpfHx3cyh0aGlzKS5hdHRyKCJzcmMiKSYmd3ModGhpcykuYXR0cigic3JjIikubWF0Y2goLy4qXC9AaHBjYy1qc1wvd2FzbS8pfSk7MD09di5zaXplKCk/KGNvbnNvbGUud2FybignTm8gc2NyaXB0IHRhZyBv''@;'; put 'put ''ZiB0eXBlICJqYXZhc2NyaXB0L3dvcmtlciIgd2FzIGZvdW5kIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9ITEpOih0aGlzLl92aXpVUkw9di5hdHRyKCJzcmMiKSx0aGlzLl92aXpVUkx8fChjb25zb2xlLndhcm4oJ05vICJzcmMiIGF0''@;'; put 'put ''dHJpYnV0ZSBvZiB3YXMgZm91bmQgb24gdGhlICJqYXZhc2NyaXB0L3dvcmtlciIgc2NyaXB0IHRhZyBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKSl9aWYoaCl7Y29uc3QgWj0iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jh''@;'; put 'put ''c2U2NCwiK2J0b2EoVk4udG9TdHJpbmcoKSsiKCIrakV0LnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtlcihaKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3Jr''@;'; put 'put ''ZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgaWYoZCl7dmFyIE09bmV3IEJsb2IoW1ZOLnRvU3RyaW5nKCkrIigiK0JFdC50b1N0cmluZygpKyIpKCkiXSksRD13aW5kb3cu''@;'; put 'put ''VVJMLmNyZWF0ZU9iamVjdFVSTChNKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihEKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5fd29ya2VyQ2FsbGJhY2tz''@;'; put 'put ''PVtdfWVsc2UgcjdlLmxvYWQoKS50aGVuKChaPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPVoudmVyc2lvbigpfSkuYmluZCh0aGlzKSk7dGhpcy5fc2VsZWN0aW9uPWMsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2J1c3k9ITEsdGhpcy5fam9icz1bXSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9rZXlN''@;'; put 'put ''b2Rlcz1uZXcgU2V0KFsidGl0bGUiLCJpZCIsInRhZy1pbmRleCIsImluZGV4Il0pLHRoaXMuX2ltYWdlcz1bXSx0aGlzLl90cmFuc2xhdGlvbj12b2lkIDAsdGhpcy5fc2NhbGU9dm9pZCAwLHRoaXMuX2V2ZW50VHlwZXM9WyJpbml0RW5kIiwic3RhcnQiLCJsYXlvdXRTdGFydCIsImxheW91''@;'; put 'put ''dEVuZCIsImRhdGFFeHRyYWN0RW5kIiwiZGF0YVByb2Nlc3NQYXNzMUVuZCIsImRhdGFQcm9jZXNzUGFzczJFbmQiLCJkYXRhUHJvY2Vzc0VuZCIsInJlbmRlclN0YXJ0IiwicmVuZGVyRW5kIiwidHJhbnNpdGlvblN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInJlc3RvcmVFbmQiLCJlbmQiLCJ6''@;'; put 'put ''b29tIl0sdGhpcy5fZGlzcGF0Y2g9dXRlKC4uLnRoaXMuX2V2ZW50VHlwZXMpLEd4dC5jYWxsKHRoaXMpLGMubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlzfWZ1bmN0aW9uIEJOKGMsbCl7cmV0dXJuIHdzKGMpLmdyYXBodml6KGwpfWg3ZS5wcm90b3R5cGU9enRlLnByb3RvdHlwZSxVdGUucHJv''@;'; put 'put ''dG90eXBlPUJOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VXRlLGVuZ2luZTpmdW5jdGlvbiBvRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPWMsdGhpc30sYWRkSW1hZ2U6ZnVuY3Rpb24gc0V0KGMsbCxhKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1c2goe3BhdGg6Yyx3aWR0aDps''@;'; put 'put ''LGhlaWdodDphfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiBsRXQoYyl7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhjKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBrZXlNb2RlOiAiK2MpO2lmKGMhPXRoaXMuX29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0YSl0aHJvdyBFcnJvcigiVG9v''@;'; put 'put ''IGxhdGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPWMsdGhpc30sZmFkZTpmdW5jdGlvbiBjRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZmFkZT1jLHRoaXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gdUV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25z''@;'; put 'put ''LnR3ZWVuUGF0aHM9Yyx0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiBkRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9YyxjJiYodGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPSEwKSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOmZ1bmN0aW9uIGhFdChjKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPWMsdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gZkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uPWMsdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6ZnVuY3Rpb24gcEV0KGMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPWMsdGhpc30sem9vbTpmdW5jdGlvbiBveHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbT1jLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvcj9YOGUuY2FsbCh0aGlzKTohdGhpcy5fb3B0aW9ucy56''@;'; put 'put ''b29tJiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRoaXN9LHJlc2V0Wm9vbTpmdW5jdGlvbiBzeHQoYyl7dmFyIGw9dGhpcy5fem9vbVNlbGVjdGlvbjtyZXR1cm4gYyYmKGw9bC50cmFu''@;'; put 'put ''c2l0aW9uKGMpKSxsLmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9yOmZ1bmN0aW9uIHV4dCgpe3JldHVybiB0aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxlY3Rpb246ZnVuY3Rpb24gZHh0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiBseHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50PWMsdGhpc30sem9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiBjeHQoYyl7cmV0dXJuIHRoaXMuX29w''@;'; put 'put ''dGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudD1jLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiB2eHQoYyl7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1c2godGhpcy5yZW5kZXIuYmluZCh0aGlzLGMpKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyU3RhcnQiLHRoaXMp''@;'; put 'put ''LHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5P2JOKGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1NdGUodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSksZTdlLmNhbGwodGhpcyxjKX0uYmluZCh0aGlzKSwwKTplN2UuY2FsbCh0aGlzLGMpLHRoaXMpfSxsYXlvdXQ6ZnVuY3Rpb24gJHh0KGMs''@;'; put 'put ''bCxhLGQpe2lmKHRoaXMuX3dvcmtlcilIdGUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDpjLGVuZ2luZTpsLG9wdGlvbnM6YX0sZnVuY3Rpb24oZil7ZC5jYWxsKHRoaXMsZi5kYXRhKX0pO2Vsc2UgdHJ5e3ZhciBoPXRoaXMubGF5b3V0U3luYyhjLCJzdmciLGwsYSk7ZC5jYWxsKHRo''@;'; put 'put ''aXMse3R5cGU6ImRvbmUiLHN2ZzpofSl9Y2F0Y2goZil7ZC5jYWxsKHRoaXMse3R5cGU6ImVycm9yIixlcnJvcjpmLm1lc3NhZ2V9KX19LGRvdDpmdW5jdGlvbiBLeHQoYyxsKXt2YXIgYT10aGlzLGg9dGhpcy5fb3B0aW9ucy5lbmdpbmUsZj10aGlzLl9pbWFnZXM7cmV0dXJuIHRoaXMuX2Rp''@;'; put 'put ''c3BhdGNoLmNhbGwoInN0YXJ0Iix0aGlzKSx0aGlzLl9idXN5PSEwLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dFN0YXJ0Iix0aGlzKSx0aGlzLl93b3JrZXJ8fG51bGwhPXRoaXMubGF5b3V0U3luYz8odGhpcy5sYXlvdXQoYyxoLHtpbWFnZXM6Zn0sZnVuY3Rpb24oTSl7c3dpdGNoKE0u''@;'; put 'put ''dHlwZSl7Y2FzZSJlcnJvciI6aWYoIWEuX29uZXJyb3IpdGhyb3cgTS5lcnJvci5tZXNzYWdlO2EuX29uZXJyb3IoTS5lcnJvcik7YnJlYWs7Y2FzZSJkb25lIjpxeHQuY2FsbCh0aGlzLE0uc3ZnLGwpfX0pLHRoaXMpOih0aGlzLl9hZnRlckluaXQ9dGhpcy5kb3QuYmluZCh0aGlzLGMsbCks''@;'; put 'put ''dGhpcyl9LGRhdGE6ZnVuY3Rpb24gcHh0KCl7cmV0dXJuIHRoaXMuX2RhdGF8fG51bGx9LHJlbmRlckRvdDpmdW5jdGlvbiBYeHQoYyxsKXt2YXIgYT10aGlzO3JldHVybiB0aGlzLmRvdChjLGZ1bmN0aW9uIGQoKXthLnJlbmRlcihsKX0pLHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24gSnh0''@;'; put 'put ''KGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/dGhpcy5fdHJhbnNpdGlvbkZhY3Rvcnk9Yzp0aGlzLl90cmFuc2l0aW9uPU10ZShjKSx0aGlzfSxhY3RpdmU6ZnVuY3Rpb24gUXh0KGMpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJz''@;'; put 'put ''dmciKTtyZXR1cm4gMCE9YS5zaXplKCk/ZnVuY3Rpb24gVk10KGMsbCl7dmFyIGQsaCxhPWMuX190cmFuc2l0aW9uO2lmKGEpZm9yKGggaW4gbD1udWxsPT1sP251bGw6bCsiIixhKWlmKChkPWFbaF0pLnN0YXRlPjEmJmQubmFtZT09PWwpcmV0dXJuIG5ldyB1NChbW2NdXSxOTXQsbCwraCk7''@;'; put 'put ''cmV0dXJuIG51bGx9KGEubm9kZSgpLGMpOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gZUV0KGMpe2lmKHR5cGVvZiBjPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9vcHRpb25zKTtmb3IodmFyIGwgb2YgT2JqZWN0LmtleXMoYykpdGhpcy5fb3B0aW9uc1tsXT1jW2xdO3JldHVy''@;'; put 'put ''biB0aGlzfSx3aWR0aDpmdW5jdGlvbiB0RXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9Yyx0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gbkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmhlaWdodD1jLHRoaXN9LHNjYWxlOmZ1bmN0aW9uIHJFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9u''@;'; put 'put ''cy5zY2FsZT1jLHRoaXN9LGZpdDpmdW5jdGlvbiBpRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PWMsdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBhRXQoYyl7cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXI9Yyx0aGlzfSxvbjpmdW5jdGlvbiBnRXQoYyxsKXtyZXR1cm4gdGhpcy5fZGlz''@;'; put 'put ''cGF0Y2gub24oYyxsKSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIG1FdChjKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1jLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiBURXQoYyl7dmFyIGw9RGF0ZS5ub3coKSxhPXt9LGQ9dGhpcy5fZXZlbnRUeXBlcyxoPU1hdGgubWF4KC4uLmQubWFwKEQ9PkQu''@;'; put 'put ''bGVuZ3RoKSk7Zm9yKGxldCBEPTA7RDxkLmxlbmd0aDtEKyspe2xldCBaPWRbRF07YVtaXT1bXTt2YXIgdixNLGY9dGhpczt0aGlzLm9uKForIi5sb2ciLGM/ZnVuY3Rpb24oKXt2YXIgcmU9RGF0ZS5ub3coKSxjZT1hW1pdLmxlbmd0aDthW1pdLnB1c2gocmUpO3ZhciBiZT0iIjtpZihiZSs9''@;'; put 'put ''IkV2ZW50ICIsYmUrPWFmKCIgPjIiKShEKSsiICIsYmUrPVorIiAiLnJlcGVhdChoLVoubGVuZ3RoKSxiZSs9YWYoIiA+NSIpKHJlLWwpKyIgIiwiaW5pdEVuZCIhPVomJihiZSs9YWYoIiA+NSIpKHJlLWEuc3RhcnRbY2VdKSksImRhdGFQcm9jZXNzRW5kIj09WiYmKGJlKz0iIHByZXBhcmUg''@;'; put 'put ''ICAgICAgICAgICAgICAgICIrYWYoIiA+NSIpKHJlLWEubGF5b3V0RW5kW2NlXSkpLCJyZW5kZXJFbmQiPT1aJiZmLl90cmFuc2l0aW9uJiYoYmUrPSIgdHJhbnNpdGlvbiBzdGFydCBtYXJnaW4gIithZigiID41IikoZi5fdHJhbnNpdGlvbi5kZWxheSgpLShyZS1hLnJlbmRlclN0YXJ0W2Nl''@;'; put 'put ''XSkpLHY9Zi5fdHJhbnNpdGlvbi5kZWxheSgpLE09Zi5fdHJhbnNpdGlvbi5kdXJhdGlvbigpKSwidHJhbnNpdGlvblN0YXJ0Ij09Wil7dmFyIEVlPXJlLWEucmVuZGVyU3RhcnRbY2VdO2JlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrYWYoIiA+NSIpKHJlLWEucmVuZGVyU3RhcnRb''@;'; put 'put ''Y2VdKSxiZSs9IiBleHBlY3RlZCAiK2FmKCIgPjUiKSh2KSxiZSs9IiBkaWZmICIrYWYoIiA+NSIpKEVlLXYpfWlmKCJ0cmFuc2l0aW9uRW5kIj09Wil7dmFyIEJlPXJlLWEudHJhbnNpdGlvblN0YXJ0W2NlXTtiZSs9IiB0cmFuc2l0aW9uIGR1cmF0aW9uICAgICAiK2FmKCIgPjUiKShCZSks''@;'; put 'put ''YmUrPSIgZXhwZWN0ZWQgIithZigiID41IikoTSksYmUrPSIgZGlmZiAiK2FmKCIgPjUiKShCZS1NKX1jb25zb2xlLmxvZyhiZSksbD1yZX06bnVsbCl9cmV0dXJuIHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24gQUV0KCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLl9fZ3Jh''@;'; put 'put ''cGh2aXpfXyx0aGlzLl93b3JrZXImJnRoaXMuX3dvcmtlclBvcnRDbG9zZSgpLHRoaXN9LGRyYXdFZGdlOmZ1bmN0aW9uIFJFdChjLGwsYSxkLGgsZj17fSl7aWYoKGg9T2JqZWN0LmFzc2lnbih7fSxoKSkuc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIHY9d3MobnVsbCk7''@;'; put 'put ''ZWxzZXt2YXIgWj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLGNlPXR2KHY3ZS5jYWxsKHRoaXMsaCkpO3Y9Wi5hcHBlbmQoImciKS5kYXRhKFtjZV0pLExBLmNhbGwodi5ub2RlKCks''@;'; put 'put ''Y2UpLGY3ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZil9cmV0dXJuIHRoaXMuX2RyYXduRWRnZT17Zzp2LHgxOmMseTE6bCx4MjphLHkyOmQsYXR0cmlidXRlczpofSx0aGlzfSx1cGRhdGVEcmF3bkVkZ2U6ZnVuY3Rpb24gTEV0KGMsbCxhLGQsaD17fSxmPXt9KXtpZighdGhpcy5fZHJhd25F''@;'; put 'put ''ZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIHY9dGhpcy5fZHJhd25FZGdlLmc7cmV0dXJuIGg9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcyxoKSx0aGlzLl9kcmF3bkVkZ2UueDE9Yyx0aGlzLl9kcmF3bkVkZ2UueTE9bCx0aGlz''@;'; put 'put ''Ll9kcmF3bkVkZ2UueDI9YSx0aGlzLl9kcmF3bkVkZ2UueTI9ZCwhdi5lbXB0eSgpfHxoLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwodj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdh''@;'; put 'put ''dGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduRWRnZS5nPXYpLHYuZW1wdHkoKXx8ZjdlLmNhbGwodGhpcyx2LGMsbCxhLGQsaCxmKSx0aGlzfSxtb3ZlRHJhd25FZGdlRW5kUG9pbnQ6ZnVuY3Rpb24gT0V0KGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9y''@;'; put 'put ''KCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25FZGdlLmcsaD10aGlzLl9kcmF3bkVkZ2UueDEsZj10aGlzLl9kcmF3bkVkZ2UueTEsdj10aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25FZGdlLngyPWMsdGhpcy5fZHJhd25FZGdl''@;'; put 'put ''LnkyPWwscDdlKGQsaCxmLGMsbCx2LGEpLHRoaXN9LGluc2VydERyYXduRWRnZTpmdW5jdGlvbiBQRXQoYyl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBsPXRoaXMuX2RyYXduRWRnZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4g''@;'; put 'put ''dGhpcztsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKTt2YXIgdj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLE09di5kYXR1bSgpLEQ9dGhpcy5f''@;'; put 'put ''ZXh0cmFjdERhdGEobCxNLmNoaWxkcmVuLmxlbmd0aCx2LmRhdHVtKCkpO3JldHVybiBNLmNoaWxkcmVuLnB1c2goRCksRHRlKGwsRCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpc30scmVtb3ZlRHJhd25FZGdlOmc3ZSxyZW1vdmVEcmF3bkVkZ2U6ZzdlLGRyYXduRWRnZVNlbGVjdGlvbjpt''@;'; put 'put ''N2UsZHJhd25FZGdlU2VsZWN0aW9uOm03ZSxkcmF3Tm9kZTpmdW5jdGlvbiBGRXQoYyxsLGEsZD17fSxoPXt9KXtpZigoZD1PYmplY3QuYXNzaWduKHt9LGQpKS5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgZj13cyhudWxsKTtlbHNle3ZhciBEPXRoaXMuX3NlbGVjdGlv''@;'; put 'put ''bi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikscmU9dHYoQzdlLmNhbGwodGhpcyxhLGQpKTtmPUQuYXBwZW5kKCJnIikuZGF0YShbcmVdKSxMQS5jYWxsKGYubm9kZSgpLHJlKSxiN2UuY2FsbCh0aGlzLGYsYyxs''@;'; put 'put ''LGEsZCxoKX1yZXR1cm4gdGhpcy5fZHJhd25Ob2RlPXtnOmYsbm9kZUlkOmEseDpjLHk6bCxhdHRyaWJ1dGVzOmR9LHRoaXN9LHVwZGF0ZURyYXduTm9kZTpmdW5jdGlvbiBIRXQoYyxsLGEsZD17fSxoPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBi''@;'; put 'put ''ZWVuIGRyYXduIik7dmFyIGY9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIG51bGw9PWEmJihhPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpLGQ9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcyxkKSx0aGlzLl9kcmF3bk5vZGUubm9kZUlkPWEsdGhpcy5fZHJhd25Ob2Rl''@;'; put 'put ''Lng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLCFmLmVtcHR5KCl8fGQuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChmPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBw''@;'; put 'put ''ZW5kKCJnIiksdGhpcy5fZHJhd25Ob2RlLmc9ZiksZi5lbXB0eSgpfHxiN2UuY2FsbCh0aGlzLGYsYyxsLGEsZCxoKSx0aGlzfSxtb3ZlRHJhd25Ob2RlOmZ1bmN0aW9uIE5FdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3''@;'; put 'put ''biIpO3ZhciBkPXRoaXMuX2RyYXduTm9kZS5nLGg9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCxkLmVtcHR5KCl8fHk3ZShkLGMsbCxoKSx0aGlzfSxpbnNlcnREcmF3bk5vZGU6ZnVuY3Rpb24gVkV0KGMp''@;'; put 'put ''e2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTtudWxsPT1jJiYoYz10aGlzLl9kcmF3bk5vZGUubm9kZUlkKTt2YXIgbD10aGlzLl9kcmF3bk5vZGUuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7dmFyIGE9dGhpcy5fZHJhd25Ob2Rl''@;'; put 'put ''LmF0dHJpYnV0ZXM7aWYobC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyksYS5VUkx8fGEudG9vbHRpcCl2YXIgZj1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksTT0oZi5zZWxl''@;'; put 'put ''Y3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpKTtlbHNlIGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUi''@;'; put 'put ''KSxNPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO00udGV4dChhLmxhYmVsfHxjKTt2YXIgcmU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxjZT1yZS5kYXR1''@;'; put 'put ''bSgpLGJlPXRoaXMuX2V4dHJhY3REYXRhKGwsY2UuY2hpbGRyZW4ubGVuZ3RoLHJlLmRhdHVtKCkpO3JldHVybiBjZS5jaGlsZHJlbi5wdXNoKGJlKSxEdGUobCxiZSksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc30scmVtb3ZlRHJhd25Ob2RlOl83ZSxyZW1vdmVEcmF3bk5vZGU6XzdlLGRy''@;'; put 'put ''YXduTm9kZVNlbGVjdGlvbjp3N2UsZHJhd25Ob2RlU2VsZWN0aW9uOnc3ZSxncmFwaHZpelZlcnNpb246ZnVuY3Rpb24gYnh0KCl7cmV0dXJuIHRoaXMuX2dyYXBodml6VmVyc2lvbn19LEs5LnByb3RvdHlwZS5ncmFwaHZpej1mdW5jdGlvbiB6RXQoYyl7dmFyIGw9dGhpcy5ub2RlKCkuX19n''@;'; put 'put ''cmFwaHZpel9fO3JldHVybiBsPyhsLm9wdGlvbnMoYyksYk4oZnVuY3Rpb24oKXtsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKX0uYmluZCh0aGlzKSwwKSk6bD1uZXcgVXRlKHRoaXMsYyksbH0sSzkucHJvdG90eXBlLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb249ZnVuY3Rp''@;'; put 'put ''b24gVUV0KGMpe3JldHVybiB3cyh0aGlzLnNpemUoKT4wP3RoaXMubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoYyk6bnVsbCl9O3ZhciBaRXQ9eSg5ODA4Myk7ZnVuY3Rpb24gV0V0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIFlFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1M''@;'; put 'put ''bigpO2RlKDAsImNsci1pY29uIiwzMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gR0V0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjQpKDEsImRpdiIsMjUpKDIsImlucHV0IiwyNiwyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSks''@;'; put 'put ''SHQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksbXQoNCxXRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUsWUV0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoKTtmZSgyKSxw''@;'; put 'put ''aSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gJEV0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIEtFdChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLExlKCk7Y29uc3QgaD1oYSgzKSxmPUxlKDIpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwi''@;'; put 'put ''dGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIHFFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMzYsMyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''TGUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMuVEFC''@;'; put 'put ''TEVOQU1FIikpfSksaGUoKSxtdCg0LCRFdCwxLDAsImNsci1pY29uIiwyNykoNSxLRXQsMSwwLCJjbHItaWNvbiIsMjgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgyKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJ''@;'; put 'put ''ZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFhFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBKRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEh0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgpLiRpbXBsaWNpdCx2PUxlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIFFFdChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMzksMyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwo''@;'; put 'put ''Zi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykudHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCksbXQoNCxYRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUs''@;'; put 'put ''SkV0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoKS4kaW1wbGljaXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCl9fWZ1bmN0aW9uIGVUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDQwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1MZSgpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdDty''@;'; put 'put ''ZXR1cm4gQ3QoTGUoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsNDEpLE9lKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSg0KTtmZSgpLFRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLGZlKDIp''@;'; put 'put ''LElyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gdFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExl''@;'; put 'put ''KCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNyksSHQoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRhYmxlT25DbGljayhoLlRBQkxFVVJJLGgsZikpfSksR3QoMiwiY2xyLWljb24iLDM4KSxPZSgzKSxoZSgpLG10KDQsUUV0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSko''@;'; put 'put ''NSxlVHQsNCwzLCJjbHItdHJlZS1ub2RlIiw2KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5z''@;'; put 'put ''KSxmZSgpLHhlKCJpZCIsYS5UQUJMRVVSSSksZmUoMiksSXIoIiAiLGEuVEFCTEVOQU1FLCIgIiksZmUoKSx4ZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBuVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwzMiksSHQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29u''@;'; put 'put ''c3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzMyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1MZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllJRCxD''@;'; put 'put ''dChmLmxpYnJhcnlPbkNsaWNrKGYubGlifHwiIixoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzQpLE9lKDMpLGhlKCksbXQoNCxxRXQsNiwzLCJjbHItdHJlZS1ub2RlIiw1KSg1LHRUdCw2LDgsImNsci10cmVlLW5vZGUiLDM1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtU''@;'; put 'put ''cigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlcyksZmUoKSx4''@;'; put 'put ''ZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiByVHQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLG5UdCw2LDcsImNsci10cmVlLW5vZGUiLDMxKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1''@;'; put 'put ''bmN0aW9uIGlUdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDIpKDEsInNwYW4iLDQzKSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIGFUdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIsNDYpLE9lKDMsIiBQbGVhc2Ug''@;'; put 'put ''c2VsZWN0IGEgY29sdW1uIG9yIHRhYmxlICIpLGhlKCkoKSl9ZnVuY3Rpb24gb1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiaDMiLDU1KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxJcigiICIsYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4/YS5jdXJyZW50TGluZWFnZVBh''@;'; put 'put ''dGhMaWJUYWJsZSsiLiIrYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW46YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSwiICIpfX1mdW5jdGlvbiBzVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDUzKSxtdCgxLG9UdCwyLDEsImgzIiw1NCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIp''@;'; put 'put ''O2ZlKCkseGUoIm5nSWYiLCFhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbiYmIWEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUpfX1mdW5jdGlvbiBsVHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksZGUoMiwiYSIsNTYpLE9lKDMpLGhlKCksT2UoNCksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKDIpO2ZlKCksSXIoIiAiLGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzBdLCIuIiksZmUoKSx4ZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLmxpbmVhZ2VUYWJsZU5hbWUpLGZlKCksQ3IoYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMV0pLGZlKCks''@;'; put 'put ''SXIoIiIsYS5saW5lYWdlQ29sdW1uTmFtZS5sZW5ndGg+MD8iLiIrYS5saW5lYWdlQ29sdW1uTmFtZToiIiwiICIpfX1mdW5jdGlvbiBjVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQp''@;'; put 'put ''LmRvd25sb2FkUE5HKCkpfSksT2UoMSwiIFBORyAiKSxoZSgpfX1mdW5jdGlvbiB1VHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLmRvd25sb2FkQ1NWKCkpfSksT2UoMSwiIENTViAi''@;'; put 'put ''KSxoZSgpfX1mdW5jdGlvbiBkVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykuZG93bmxvYWRTVkcoKSl9KSxPZSgyLCJTVkciKSxoZSgp''@;'; put 'put ''LG10KDMsY1R0LDIsMCwiZGl2Iiw2NyksZGUoNCwiZGl2Iiw2NiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5kb3dubG9hZERvdCgpKX0pLE9lKDUsIkRvdCIpLGhlKCksbXQoNix1VHQsMiwwLCJkaXYiLDY3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgz''@;'; put 'put ''KTtmZSgzKSx4ZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCksZmUoMykseGUoIm5nSWYiLGEuZmxhdGRhdGEpfX1mdW5jdGlvbiBoVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjgpKDEsImlucHV0Iiw2OSksSHQo''@;'; put 'put ''ImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykuZ2VuZXJhdGVHcmFwaCgpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpO3JldHVybiBtaShmLnJlZnJlc2hDYWNoZSxoKXx8KGYucmVmcmVzaENhY2hlPWgpLEN0KGgp''@;'; put 'put ''fSksaGUoKSxkZSgyLCJsYWJlbCIpLE9lKDMsIlJlZnJlc2ggQ2FjaGUiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkscGkoIm5nTW9kZWwiLGEucmVmcmVzaENhY2hlKX19ZnVuY3Rpb24gZlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1NykoMSwi''@;'; put 'put ''YnV0dG9uIiw1OCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5saW1pdERvdERlcHRoPSEwKX0pLE9lKDIsIiBMaW1pdCBkZXB0aCAiKSxoZSgpLGRlKDMsImRpdiIsNTkpKDQsImRpdiIsNjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBo''@;'; put 'put ''PUxlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSExLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg1LCJpbnB1dCIsNjEpLGRlKDYsImxhYmVsIiksT2UoNywiQmFja3dh''@;'; put 'put ''cmQiKSxoZSgpKCksZGUoOCwiZGl2Iiw2MCksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITAsQ3QoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdy''@;'; put 'put ''YXBoVGFibGVDbGljaygpKX0pLEd0KDksImlucHV0Iiw2MSksZGUoMTAsImxhYmVsIiksT2UoMTEsIkZvcndhcmQiKSxoZSgpKCkoKSxkZSgxMiwiY2xyLWRyb3Bkb3duIiw2MikoMTMsImJ1dHRvbiIsNjMpLE9lKDE0LCIgRG93bmxvYWQgIiksR3QoMTUsImNsci1pY29uIiwyMiksaGUoKSxt''@;'; put 'put ''dCgxNixkVHQsNywyLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCksbXQoMTcsaFR0LDQsMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg1KSx4ZSgiY2hlY2tlZCIsIWEuZm9yd2FyZExpbmVhZ2UpLGZlKDQpLHhlKCJjaGVja2Vk''@;'; put 'put ''IixhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSx4ZSgiZGlzYWJsZWQiLCFhLmNvbHVtbiYmIWEudGFibGUpLGZlKDQpLHhlKCJuZ0lmIixhLmNvbHVtbil9fWZ1bmN0aW9uIHBUdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDczKSxPZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBn''@;'; put 'put ''VHQoYyxsKXsxJmMmJkd0KDAsInNwYW4iLDQzKX1mdW5jdGlvbiBtVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc0KSgxLCJkaXYiLDc1KSxtdCgyLGdUdCwxLDAsInNwYW4iLDc2KSxoZSgpLEd0KDMsImRpdiIsNzcpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgyKSx4ZSgibmdJ''@;'; put 'put ''ZiIsYS5ncmFwaFJlbmRlcmluZyl9fWZ1bmN0aW9uIHZUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsNzApLG10KDIscFR0LDIsMCwic3BhbiIsNzEpKDMsbVR0LDQsMSwiZGl2Iiw3MiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7VHIoIm10LTIiLGEudGFibGVGbGFn''@;'; put 'put ''KSxmZSgyKSx4ZSgibmdJZiIsYS5ncmFwaExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFhLmdyYXBoTG9hZGluZyl9fWZ1bmN0aW9uIGJUdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsc1R0LDIsMSwiZGl2Iiw0NyksZGUoMiwiZGl2Iiw0OCkoMywic2VjdGlvbiIsNDkpKDQsImRpdiIsNTAp''@;'; put 'put ''LG10KDUsbFR0LDUsNCwic3BhbiIsMTEpLGhlKCksbXQoNixmVHQsMTgsNCwiZGl2Iiw1MSksaGUoKSxtdCg3LHZUdCw0LDQsImRpdiIsNTIpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsIWEuZ3JhcGhDb250YWluZXIpLGZlKDQpLHhlKCJuZ0lmIixhLmxp''@;'; put 'put ''bmVhZ2VUYWJsZU5hbWUubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpLGZlKCkseGUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpfX1mdW5jdGlvbiB5VHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY2KSxIdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnJlbmRlclRvRG93bmxvYWQoIlBORyIpKX0pLE9lKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gX1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxIdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksT2UoMiwiU1ZHIiksaGUoKSxtdCgzLHlUdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIGguZG93''@;'; put 'put ''bmxvYWREb3QoKSxDdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksT2UoNSwiIERvdCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoMykseGUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpfX1jb25zdCB3VHQ9eSg5NzU4Nik7bGV0IGpOPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5sb2NhdGlvbj12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dnZXJTZXJ2aWNlPUQsdGhpcy5o''@;'; put 'put ''ZWxwZXJTZXJ2aWNlPVosdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhDb250YWluZXI9ITEsdGhpcy52''@;'; put 'put ''aXpJbnB1dD0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJsZUNvbHVtbnNSZWY9IiIsdGhpcy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNvbHVtbk5hbWU9IiIsdGhpcy5s''@;'; put 'put ''aWI9bnVsbCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLnJlZnJlc2hDYWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmxhcmdlRG90RmlsZUxp''@;'; put 'put ''bWl0PTFlMyx0aGlzLmxpbWl0RG90RGVwdGg9ITEsdGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKHYsTSxELFo9ITEpe00uY29sdW1ucz8oTS5leHBhbmRlZD0hTS5leHBhbmRlZCwhMD09PU0uZXhwYW5kZWQmJihmLnRhYmxlPXYsWnx8Zi5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKTooTS5leHBhbmRlZD0hTS5leHBhbmRlZCxNLmxvYWRpbmdDb2x1''@;'; put 'put ''bW5zPSEwLGYudGFibGU9dixmLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPU0uTElCTkFNRSsiLiIrTS5UQUJMRU5BTUUseWllbGQgZi5zZWxlY3RUYWJsZSh2LE0pLFp8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKEQudGFibGVzLE0pfSku''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9n''@;'; put 'put ''ZXRtZXRhY29scyIsZikudGhlbih2PT57aC5jb2x1bW5zTGlzdD12LmFkYXB0ZXJSZXNwb25zZS5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxvYWRpbmdDb2x1bW5zPSExKX0p''@;'; put 'put ''LmNhdGNoKHY9PnYpLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5s''@;'; put 'put ''aWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYm''@;'; put 'put ''dGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5pbkZvcmVncm91bmQ9ITAsZC50YWJsZXM/ZC5leHBhbmRlZD0hZC5leHBhbmRlZDooZC5sb2FkaW5nVGFibGVzPSEwLHlpZWxkIGguc2VsZWN0''@;'; put 'put ''TGlicmFyeShhLGQpKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGgubGlicmFyeUxpc3QsZCl9KSgpfXNlbGVjdExpYnJhcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7''@;'; put 'put ''bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbih2PT57aC50YWJsZXNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVuZ3RoPjAmJihkLnRhYmxlcz1o''@;'; put 'put ''LnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVS''@;'; put 'put ''SSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFy''@;'; put 'put ''eUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1''@;'; put 'put ''bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0tuLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxLbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LEtuLmxpbmVhZ2UuY29sdW1uc0xp''@;'; put 'put ''c3Q9dGhpcy5jb2x1bW5zTGlzdCxLbi5saW5lYWdlLmxpYj10aGlzLmxpYixLbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsS24ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PUtuLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50''@;'; put 'put ''YWJsZXNMaXN0PUtuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUtuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9S24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0IGQ7dGhpcy5jYW5jZWxSZW5k''@;'; put 'put ''ZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFnZSI7bGV0IGE9dGhpcy5yb3V0''@;'; put 'put ''ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBs''@;'; put 'put ''YWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0''@;'; put 'put ''SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7S24ubGluZWFnZS5saWJyYXJ5TGlzdCYmKEtuLmxpbmVhZ2UubGlicmFyeUxpc3QubGVuZ3RoPjA/YS5sb2FkR2xvYmFsRGF0YSgpOnlpZWxkIGEuc2FzU2Vy''@;'; put 'put ''dmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpLnRoZW4odj0+e2EubGlicmFyeUxpc3Q9di5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0JiZhLmxpYnJhcnlMaXN0Lmxl''@;'; put 'put ''bmd0aD4wJiYoYS5saWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+diksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHY9PnthLm9uUm91''@;'; put 'put ''dGVDaGFuZ2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGQ9dGhpcy5yb3V0ZS5zbmFw''@;'; put 'put ''c2hvdC5wYXJhbXMuZGlyZWN0aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy5jb2x1bW49YSx0aGlzLmdl''@;'; put 'put ''bmVyYXRlR3JhcGgoYSxkLGYpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikpfSx0aGlzLmRlYm91bmNlVGlt''@;'; put 'put ''ZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3Ry''@;'; put 'put ''aW5nKHRoaXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMudGFibGUu''@;'; put 'put ''aW5jbHVkZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q''@;'; put 'put ''KCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdy''@;'; put 'put ''YXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExv''@;'; put 'put ''YWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoTSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIFo9ZWUoZnVuY3Rpb24qKHJlKXtpZihyZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEu''@;'; put 'put ''bGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sg''@;'; put 'put ''YWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiByZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9''@;'; put 'put ''Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1yZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3JlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgY2U9cmUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwsYmU9IiI7Zm9yKGxl''@;'; put 'put ''dCBFZT0wO0VlPGNlLmxlbmd0aDtFZSsrKWJlKz11bmVzY2FwZShjZVtFZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPXJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgRWU9Zi5saWJyYXJ5TGlzdC5maW5kKEJlPT5yZS5hZGFwdGVyUmVzcG9uc2UuaW5m''@;'; put 'put ''b1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhCZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKEVlKXtsZXQgQmU7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5maW5kKHFlPT5xZS5UQUJMRVVS''@;'; put 'put ''SS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLEJlKSl7aWYoZi50YWJsZT1CZS5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBxZT1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9''@;'; put 'put ''PntsZXQgcnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3FlfSddYCk7cnQmJnJ0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2soQmUuVEFCTEVVUkksQmUsRWUsdm9pZCAwIT09ZCl9RWUmJihFZS5leHBhbmRlZD0hMCksQmUmJihCZS5leHBhbmRlZD0hMCl9''@;'; put 'put ''fWYudml6SW5wdXQ9YmV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9cmUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwLHJlLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cmUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIFouYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goWj0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmxhcmdlRG90Rmls''@;'; put 'put ''ZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRjaCh0aGlzLnBlbmRpbmdSZW5k''@;'; put 'put ''ZXJEb3dubG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMuYnVp''@;'; put 'put ''bGRHcmFwaCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlNWRyIs''@;'; put 'put ''dGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgTSxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUiKS5pbm5lckhUTUwsdj1hLmZp''@;'; put 'put ''bmQoRD0+RC5NRVRBSUQ9PT1mKTt2JiYoTT0iVEFCTEUiPT09di5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK3YuTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK3YuTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr''@;'; put 'put ''IixEPT57dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0''@;'; put 'put ''KCkscmVmcmVzaDpmLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9u''@;'; put 'put ''dGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoTSxEKT0+e2Yuc2FzU2Vydmlj''@;'; put 'put ''ZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihyZSl7aWYocmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYu''@;'; put 'put ''ZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIp''@;'; put 'put ''LHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUuYWRhcHRlclJlc3BvbnNlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFibGVOYW1l''@;'; put 'put ''PXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrcmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTkFNRSxmLmxpbmVhZ2VDb2x1bW5OYW1lPXJlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkNPTE5BTUUsZi5pZGxvb2t1cD1yZS5hZGFwdGVyUmVzcG9uc2UuaWRsb29r''@;'; put 'put ''dXA7bGV0IGNlPXJlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLGJlPSIiO2ZvcihsZXQgRWU9MDtFZTxjZS5sZW5ndGg7RWUrKyliZSs9dW5lc2NhcGUoY2VbRWVdLlNUUklORykrIlxuIjtpZihmLnZpeklucHV0PWJlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6''@;'; put 'put ''SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmZsYXRkYXRhPXJlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgQmUsRWU9Zi5saWJyYXJ5TGlzdC5maW5kKHFlPT5yZS5hZGFwdGVyUmVz''@;'; put 'put ''cG9uc2UuaW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhxZT8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7RWUmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKEVlLkxJQlJBUllJRCxFZSksRWUudGFibGVzJiYoQmU9RWUudGFibGVzLmZpbmQocWU9PnFlLlRBQkxF''@;'; put 'put ''VVJJPT09cmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCVVJJKSxCZSYmZi50YWJsZU9uQ2xpY2soQmUuVEFCTEVVUkksQmUsRWUsITApLnRoZW4oKCk9PntsZXQgcWU9QmUuVEFCTEVVUkk7aWYocWUpe2NvbnN0IHJ0PXFlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO2xldCBwdD1kb2N1bWVu''@;'; put 'put ''dC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7cnR9J11gKTtzZXRUaW1lb3V0KCgpPT57cHQmJihmLmxvZ2dlclNlcnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLEVlKSxwdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksRWUmJihFZS5leHBhbmRlZD0hMCksQmUmJihCZS5leHBhbmRlZD0h''@;'; put 'put ''MCkpfXJlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbihyZSl7cmV0dXJuIFouYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goWj0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyLGg9bmV3IEJsb2IoW2Qu''@;'; put 'put ''c2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGgpfWdldFNWR0Jsb2IoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyO3JldHVybiBuZXcgQmxvYihb''@;'; put 'put ''ZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSl9ZG93bmxvYWRTVkcoKXtpZihCTigiI2dyYXBoIikucmVzZXRab29tKCksbmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJs''@;'; put 'put ''b2IodGhpcy5nZXRTVkdCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0U1ZHVVJMKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpLGRvY3VtZW50LmJvZHkuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fWRvd25sb2FkUE5HKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Qk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLFpFdC5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi''@;'; put 'put ''I2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0ocmUsY2UpPT5udWxsPT09Y2U/IiI6Y2UsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChyZT0+aC5tYXAoY2U9PkpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KHJlW2NlXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCB2PWYuam9pbigiXHJcbiIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxEPW5ldyBCbG9iKFt2XSx7dHlwZToidGV4dC9jc3YifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9T''@;'; put 'put ''dHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoRCx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3ZhciBaPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKEQpO00uaHJlZj1aLE0uZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJj''@;'; put 'put ''c3YiKSxNLmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoWiksTS5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChkKX1nZXREb3RC''@;'; put 'put ''bG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0RG90''@;'; put 'put ''QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgidHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERvdFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEu''@;'; put 'put ''Y2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBo''@;'; put 'put ''UmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntCTigiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90KHRoaXMudml6SW5wdXQsKCk9''@;'; put 'put ''Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsdj13VHQoKS5mb3JtYXQoIllZTU1ERF9ISG1tIik7aWYodGhp''@;'; put 'put ''cy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMubGlicmFyeUxpc3QuZmluZChEPT5ELkxJQlJBUllJRD09dGhpcy5saWIpO00mJihkPWBfJHtNLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7''@;'; put 'put ''bGV0IE09dGhpcy50YWJsZXNMaXN0LmZpbmQoRD0+RC5UQUJMRVVSST09dGhpcy50YWJsZSk7TSYmKGg9YF8ke00uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmNvbHVtbnNMaXN0LmZpbmQoRD0+RC5DT0xVUkk9''@;'; put 'put ''PXRoaXMuY29sdW1uKTtNJiYoZj1gXyR7TS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke3Z9LiR7YX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZSh0bCksR2UoQ3UpLEdl''@;'; put 'put ''KExzKSxHZShmaCksR2UodmMpLEdlKFNkKSxHZShHdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZhcnM6MTEsY29uc3RzOltbIm1heERlcHRo''@;'; put 'put ''RG90IiwiIl0sWyJtYXhEZXB0aCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0x''@;'; put 'put ''MDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEs''@;'; put 'put ''Im1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2YWx1ZSIsMSwiY2xyLWlucHV0IiwibWF4LWRl''@;'; put 'put ''cHRoLWlucHV0Il0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0z''@;'; put 'put ''LW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0''@;'; put 'put ''IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJ''@;'; put 'put ''ZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIs''@;'; put 'put ''ImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwi''@;'; put 'put ''bmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJtLTAiLCJjdXJzb3It''@;'; put 'put ''cG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJu''@;'; put 'put ''Z01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFy''@;'; put 'put ''ZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRl''@;'; put 'put ''ciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13''@;'; put 'put ''ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1u''@;'; put 'put ''IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250''@;'; put 'put ''ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtci01IiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkaXJlY3Rpb24iLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91''@;'; put 'put ''cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlv''@;'; put 'put ''biIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJu''@;'; put 'put ''YW1lIiwicmVmcmVzaENhY2hlIiwzLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwicG9z''@;'; put 'put ''aXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDQp''@;'; put 'put ''LEh0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZGUoMSwiY2xyLXRyZWUiKSxtdCgyLEdFdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDMsclR0LDIsMSwibmctY29udGFpbmVyIiw2KSxoZSgpLG10KDQsaVR0''@;'; put 'put ''LDMsMCwiZGl2Iiw3KSxoZSgpLGRlKDUsImRpdiIsOCkoNiwiZGl2Iiw5KSxtdCg3LGFUdCw0LDAsImRpdiIsMTApKDgsYlR0LDgsNCwibmctY29udGFpbmVyIiwxMSksaGUoKSgpLGRlKDksImNsci1tb2RhbCIsMTIpKDEwLCJoMyIsMTMpLE9lKDExLCJMaW1pdCBEZXB0aCIpLGhlKCksZGUo''@;'; put 'put ''MTIsImRpdiIsMTQpKDEzLCJwIiksT2UoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSxoZSgpKCksZGUoMTUsImRpdiIsMTUpKDE2LCJkaXYiLDE2KSxHdCgxNywiaW5wdXQiLDE3LDApLGhlKCksZGUoMTksImNs''@;'; put 'put ''ci1jb250cm9sLWhlbHBlciIsMTgpLE9lKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLGhlKCksZGUoMjEsImRpdiIsMTkpKDIyLCJidXR0b24iLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubGlt''@;'; put 'put ''aXREb3REZXB0aD0hMSl9KSxPZSgyMywiIENhbmNlbCAiKSxoZSgpLGRlKDI0LCJidXR0b24iLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT1oYSgxOCk7cmV0dXJuIGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSksQ3QoaC5saW1pdERvdERlcHRoPSExKX0p''@;'; put 'put ''LE9lKDI1LCIgUmVzdWJtaXQgIiksaGUoKSgpKCkoKSxkZSgyNiwiY2xyLW1vZGFsIiwxMikoMjcsImgzIiwxMyksT2UoMjgsIldhcm5pbmciKSxoZSgpLGRlKDI5LCJkaXYiLDE0KSgzMCwicCIpLE9lKDMxKSxoZSgpKCksZGUoMzIsImRpdiIsMTUpKDMzLCJkaXYiLDE5KSgzNCwicCIpLE9l''@;'; put 'put ''KDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLGhlKCksZGUoMzYsImJ1dHRvbiIsMjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkpfSksT2UoMzcsIiBSZW5kZXIgIiksaGUoKSgp''@;'; put 'put ''LGRlKDM4LCJkaXYiLDE5KSgzOSwicCIpLE9lKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksaGUoKSxkZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMjEpLE9lKDQzLCIgRG93bmxvYWQgIiksR3QoNDQsImNsci1pY29uIiwy''@;'; put 'put ''MiksaGUoKSxtdCg0NSxfVHQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCkoKSxkZSg0NiwiZGl2IiwxOSkoNDcsInAiKSxPZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxoZSgpLEd0KDQ5LCJpbnB1dCIsMTcsMSksZGUoNTEsImJ1dHRv''@;'; put 'put ''biIsMjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDUwKTtyZXR1cm4gQ3QoaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSl9KSxPZSg1MiwiIFJlc3VibWl0ICIpLGhlKCkoKSxkZSg1MywiZGl2IiwxOSkoNTQsInAiKSxPZSg1NSwiQ2FuY2VsIHRoaXMg''@;'; put 'put ''c3VibWlzc2lvbiIpLGhlKCksZGUoNTYsImJ1dHRvbiIsMjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLE9lKDU3LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCl9MiZkJiYoZmUoMikseGUoIm5nSWYiLGgubGlicmFyeUxp''@;'; put 'put ''c3QpLGZlKCkseGUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgzKSx4ZSgibmdJZiIsIWguY29sdW1uJiYhaC50YWJsZSksZmUoKSx4ZSgibmdJZiIsaC5jb2x1bW58fGgudGFibGUpLGZlKCkseGUoImNsck1vZGFsT3BlbiIs''@;'; put 'put ''aC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDE3KSx4ZSgiY2xyTW9kYWxPcGVuIixudWxsIT09aC5sYXJnZURvdEZpbGVMaW5lcykoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg1KSxJcigiIFRoZSBnZW5lcmF0ZWQgZG90IGZpbGUgaGFzICIsaC5sYXJnZURv''@;'; put 'put ''dEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxmZSgxMSkseGUoImRpc2FibGVkIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsYzEscWwsTWQsbmwsR3Ms''@;'; put 'put ''RWgsUGQscDUsSGwsb3UsS3UsajAsTDIsZHMsakwsSWQsU2gsWjEsbDUscDcsZzcsVnksaTQscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQ1R0PSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiBTVHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDE0KSxP''@;'; put 'put ''ZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Zk0oInZhbHVlIixhKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIE1UdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDIwKX1mdW5jdGlvbiB4VHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNv''@;'; put 'put ''biIsMjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLEN0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEVUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5v''@;'; put 'put ''ZGUiLDE1KSgxLCJkaXYiLDE2KSgyLCJpbnB1dCIsMTcsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5tZXRhRGF0YVNlYXJjaCxoKXx8KGYubWV0YURhdGFTZWFyY2g9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCksbXQoNCxNVHQsMSwwLCJjbHItaWNvbiIsMTgpKDUseFR0LDEsMCwiY2xyLWljb24iLDE5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5tZXRh''@;'; put 'put ''RGF0YVNlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBUVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMyksSHQoImNsaWNrIixmdW5jdGlvbiho''@;'; put 'put ''KXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubWV0YURhdGFMaXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYu''@;'; put 'put ''ZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMjQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9TGUoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQsQ3QoZi5tZXRhRGF0YU9uQ2xpY2soZi5tZXRhRGF0YUlk''@;'; put 'put ''LGgpKX0pLEd0KDIsImNsci1pY29uIiwyNSksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEuSUQsIiAi''@;'; put 'put ''KX19ZnVuY3Rpb24gQVR0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxUVHQsNCwzLCJjbHItdHJlZS1ub2RlIiwyMiksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGtUdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjYp''@;'; put 'put ''LEd0KDEsImNsci1pY29uIiwyNyksZGUoMiwicCIsMjgpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdHlwZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIERUdChjLGwpezEmYyYmKGRlKDAsImg0IiksT2UoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIpLGhlKCkpfWZ1bmN0aW9uIElUdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImg0IiksT2UoMSwiTG9hZGluZyBtZXRhZGF0YSBvYmplY3RzIiksaGUoKSl9ZnVuY3Rpb24gUlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksbXQoMSxEVHQsMiwwLCJoNCIsMzEpKDIsSVR0LDIsMCwiaDQiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24gTFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSkoMSwic3BhbiIsMzApLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksbXQoMyxSVHQsMywyLCJkaXYi''@;'; put 'put ''LDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSx4ZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gT1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzOCkoMSwiaW5wdXQiLDM5LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtj''@;'; put 'put ''b25zdCBmPUxlKDIpO3JldHVybiBtaShmLm1ldGFPYmplY3RTZWFyY2gsaCl8fChmLm1ldGFPYmplY3RTZWFyY2g9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm1ldGFPYmplY3RPbkZpbHRlcigpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9TGUoMik7ZmUoKSxwaSgibmdNb2RlbCIsYS5tZXRhT2JqZWN0U2VhcmNoKX19ZnVuY3Rpb24gUFR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIEZUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBIVHQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJwIiw1NCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIE5UdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxtdCgzLFBUdCwxLDAsImNsci1p''@;'; put 'put ''Y29uIiw1MSkoNCxGVHQsMSwwLCJjbHItaWNvbiIsNTIpLE9lKDUpLGhlKCksbXQoNixIVHQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLFRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksZmUoMikseGUo''@;'; put 'put ''Im5nSWYiLCFhLmNvdW50KSxmZSgpLHhlKCJuZ0lmIixhLmNvdW50KSxmZSgpLElyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLHhlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIFZUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0NyksbXQoMSxOVHQsNyw3LCJjbHItdHJlZS1u''@;'; put 'put ''b2RlIiw0OCksUXMoMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNik7eGUoImNsckxhenkiLCEwKSxmZSgpLHhlKCJjbHJSZWN1cnNpdmVGb3JPZiIsRGMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBC''@;'; put 'put ''VHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxtdCgxLFZUdCwzLDUsImNsci10cmVlIiw0NiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDUpO2ZlKCkseGUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIGpUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O2RlKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQyKSxIdCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoMyk7cmV0dXJuIEN0KGg/di5wYW5lbENoYW5nZShoLGYpOiIiKX0pLGRlKDEsImNsci1hY2Nv''@;'; put 'put ''cmRpb24tdGl0bGUiKSxHdCgyLCJjbHItaWNvbiIsNDMpLE9lKDMpLGRlKDQsInAiLDQ0KSxPZSg1KSxoZSgpKCksbXQoNixCVHQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgzKSxJcigiICIsYS5OQU1FLCIg''@;'; put 'put ''IiksZmUoMiksQ3IoYS5JRCl9fWZ1bmN0aW9uIHpUdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsalR0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDEpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBVVHQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSgxLCJjbHItYWNjb3JkaW9uIiksbXQoMix6VHQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLHhlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIFpUdChjLGwpezEm''@;'; put 'put ''YyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBXVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24gWVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgpLElyKCIgIixhLlVSSSwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiBHVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksbXQoMyxaVHQsMSwwLCJjbHItaWNvbiIsNTEpKDQsV1R0LDEsMCwiY2xyLWljb24iLDUyKSxPZSg1KSxoZSgpLG10KDYsWVR0LDIsMSwicCIsNTMpLGhl''@;'; put 'put ''KCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSxUcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZlKDIpLHhlKCJuZ0lmIiwhYS5jb3VudCksZmUoKSx4ZSgibmdJZiIsYS5jb3VudCksZmUoKSxJcigiICIsYS5kaXNwbGF5LCIgIiks''@;'; put 'put ''ZmUoKSx4ZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiAkVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLG10KDEsR1R0LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLFFzKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpO3hlKCJjbHJMYXp5IiwhMCksZmUo''@;'; put 'put ''KSx4ZSgiY2xyUmVjdXJzaXZlRm9yT2YiLERjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gS1R0KGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwiZGl2Iiw1NSksR3QoMiwiY2xyLWljb24iLDQzKSxkZSgzLCJkaXYi''@;'; put 'put ''LDU2KSg0LCJwIiw1NyksT2UoNSksaGUoKSxkZSg2LCJwIiw1OCksT2UoNyksaGUoKSgpKCksbXQoOCwkVHQsMyw1LCJjbHItdHJlZSIsNDYpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDMpO2ZlKDUpLElyKCIgIixhLk5BTUUsIiAiKSxmZSgyKSxJcigiICIsYS5JRCwi''@;'; put 'put ''ICIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIHFUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApLG10KDEsS1R0LDksMywibmctY29udGFpbmVyIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xp''@;'; put 'put ''c3QpfX1mdW5jdGlvbiBYVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxPZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksT2UoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLE9lKDYpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0O2ZlKDIpLENyKGEuVFlQRSksZmUoMiksQ3IoYS5OQU1FKSxmZSgyKSxDcihhLlZBTFVFKX19ZnVuY3Rpb24gSlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiw1OSkoMSwiY2xyLWRnLWNvbHVtbiIpLE9lKDIsIiBUWVBFICIpLEd0KDMsImNsci1kZy1zdHJpbmctZmls''@;'; put 'put ''dGVyIiw2MCksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiksT2UoNSwiIE5BTUUgIiksR3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iKSxPZSg4LCIgVkFMVUUgIiksR3QoOSwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLG10''@;'; put 'put ''KDEwLFhUdCw3LDMsImNsci1kZy1yb3ciLDYxKSxkZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5hdGlvbiIsNjIsMikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxPZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLGhlKCksT2UoMTYpLGhlKCkoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9aGEoMTMpLGQ9TGUoMik7ZmUoMykseGUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLGZlKDMpLHhlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5uYW1lRmlsdGVyKSxmZSgzKSx4ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudmFsdWVGaWx0ZXIpLGZlKCkseGUoImNsckRn''@;'; put 'put ''SXRlbXNPZiIsZC5tZXRhT2JqZWN0QXR0cmlidXRlcyksZmUoMikseGUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSx4ZSgiY2xyUGFnZVNpemVPcHRpb25zIixZcyg5LENUdCkpLGZlKDIpLFZmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0''@;'; put 'put ''ZW1zLCIgQXR0cmlidXRlcyAiKX19ZnVuY3Rpb24gUVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMikoMSwiZGl2IiwzMyksbXQoMixPVHQsMywxLCJkaXYiLDM0KSxHdCgzLCJiciIpLG10KDQsVVR0LDMsMSwiZGl2IiwzNSkoNSxxVHQsMiwxLCJkaXYiLDM1KSxoZSgpLGRlKDYsImRp''@;'; put 'put ''diIsMzYpKDcsImgzIiksT2UoOCksaGUoKSxtdCg5LEpUdCwxNywxMCwiY2xyLWRhdGFncmlkIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSx4ZSgibmdJZiIsYS5tZXRhT2JqZWN0TGlzdCYmIWEub2JqZWN0Um91dGUpLGZlKDIpLHhlKCJuZ0lmIiwhYS5vYmplY3RWaWV3''@;'; put 'put ''KSxmZSgpLHhlKCJuZ0lmIixhLm9iamVjdFZpZXcpLGZlKDMpLENyKGEuYXNzb09iamVjdFNlbGVjdGVkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dUYWJsZSl9fWxldCBadGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnJvdXRlPU0sdGhpcy5tZXRhRGF0YVNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPVtdLHRoaXMubWV0YU9i''@;'; put 'put ''amVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YURhdGFJZD0iIix0aGlzLmxvYWRpbmc9ITAsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSEwLHRoaXMubWV0YU9iamVjdFNpemU9MjAwLHRoaXMuYXNzb1R5cGVTZWxlY3RlZD0iIix0aGlz''@;'; put 'put ''LmFzc29PYmplY3RTZWxlY3RlZD0iIix0aGlzLnJlcG9zaXRvcnk9IiIsdGhpcy5vYmplY3RSb3V0ZT0hMSx0aGlzLnNob3dEYXRhPSExLHRoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmdldENoaWxkcmVuPUQ9PkQuY291bnQ/Zm8oRC5kZXRhaWxzKTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgi''@;'; put 'put ''bWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTpELkFTU09DVVJJfV19KS50aGVuKHJlPT57dGhpcy5zaG93VGFibGU9ITAsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1yZS5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcyx0aGlzLmFzc29PYmplY3RT''@;'; put 'put ''ZWxlY3RlZD1ELk5BTUU7bGV0IGNlPXRoaXMucm91dGVyLnVybDtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5vYmplY3RSb3V0ZT9jZS5zbGljZSgwLGNlLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK0QuQVNTT0NVUkkuc2xpY2UoMStELkFTU09DVVJJ''@;'; put 'put ''LmluZGV4T2YoIlxcIikpOmNlKyIvb2JqZWN0LyIrRC5BU1NPQ1VSSS5zbGljZSgxK0QuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSkpLHRoaXMuZ2V0QXNzb3NpYXRpb25zQ291bnQocmUuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyl9KSx0aGlzLmRlYm91bmNlPSExfW5nT25Jbml0KCl7''@;'; put 'put ''S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9ITApLHRoaXMucGFnZVNpemU9NSxLbi5tZXRhZGF0YS5t''@;'; put 'put ''ZXRhRGF0YUxpc3QmJktuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Lbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9S24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0aGlzLnJlcG9zaXRv''@;'; put 'put ''cnk9S24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Lbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGF0eXBl''@;'; put 'put ''cyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudHlwZXMsS24ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITF9KSx0aGlzLnNhc1NlcnZpY2UucmVx''@;'; put 'put ''dWVzdCgibWV0YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5wdXNoKGEuYWRhcHRlclJlc3BvbnNlLm91''@;'; put 'put ''dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlvbiI6YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbMF0uTkFNRSxLbi5tZXRhZGF0YS5tZXRhUmVwb3Np''@;'; put 'put ''dG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLEtuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDtsZXQgaD0iIixmPXRoaXMucm91dGUuc25h''@;'; put 'put ''cHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlzdC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0T25DbGljayh0aGlzLm1ldGFPYmpl''@;'; put 'put ''Y3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+''@;'; put 'put ''e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFEYXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEiKSx0aGlzLnNob3dEYXRhPSExLHRoaXMu''@;'; put 'put ''bG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNlbGVjdG1ldGFPYmplY3QoYSxkKX1zZWxl''@;'; put 'put ''Y3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFvYmplY3RzIix7U0FTQ29udHJvbFRhYmxlOlt7bWV0YXR5cGU6YSxyZXBvOmgucmVwb3NpdG9yeX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0''@;'; put 'put ''TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5vYmplY3RzLGguZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoaC5tZXRhT2JqZWN0U2l6ZSksaC5sb2FkaW5nPSExLGguYXNzb1R5cGVTZWxlY3RlZD1hLGguZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGguc2hvd0RhdGE9ITB9KX0pKCl9c2VsZWN0''@;'; put 'put ''bWV0YU9iamVjdChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdEFzc29jaWF0aW9ucz12LmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMsaC5yb290JD1mbyhoLmdldEFzc29zaWF0aW9uc0NvdW50KHYuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucykpLGguc2hvd0FjYz0hMCxoLnNob3dUYWJsZT0hMDtsZXQgTT12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLmZpbmQoWj0+''@;'; put 'put ''Ik5hbWUiPT09Wi5OQU1FKS5WQUxVRTtoLmFzc29PYmplY3RTZWxlY3RlZD1NLGQuTkFNRT1NO2xldCBEPWgucm91dGVyLnVybDtoLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLm9iamVjdFJvdXRlP0Quc2xpY2UoMCxELmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK2Euc2xpY2Uo''@;'; put 'put ''MSthLmluZGV4T2YoIlxcIikpOkQrIi9vYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKSksaC5tZXRhT2JqZWN0QXR0cmlidXRlcz12LmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzfSl9KSgpfXNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSxkKXt2YXIgaD10aGlzO3JldHVy''@;'; put 'put ''biBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMsaC5zaG93VGFi''@;'; put 'put ''bGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0YWlsczpbXX0pO2xldCB2PWQuZ2V0KGYuQVNTT0MpO3YuY291bnQrKyx2LmRldGFpbHMucHVzaCh7''@;'; put 'put ''QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oZix2KXtoLnB1c2goe0FTU09DOnYsY291bnQ6Zi5jb3Vu''@;'; put 'put ''dCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5OnYrIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5wdXNoKGgpO3JldHVybiB0aGlzLmFz''@;'; put 'put ''c29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSl9bWV0YUxpc3RP''@;'; put 'put ''bkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxLbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmplY3RPbkZpbHRlcigpe3RoaXMubWV0''@;'; put 'put ''YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIpLHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5tZXRhT2JqZWN0U2l6ZSksS24ubWV0''@;'; put 'put ''YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxoPS0xO2ZvcihsZXQgZj0wO2Y8dGhp''@;'; put 'put ''cy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikmJmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVjdFNob3dMaXN0PS0xIT09aD90aGlz''@;'; put 'put ''Lm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2UoYSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0T25DbGljayhkLklELGQpLHRoaXMu''@;'; put 'put ''ZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0tuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy''@;'; put 'put ''biBuZXcoZHx8YykoR2UodmMpLEdlKHRsKSxHZShHdSksR2UoZmgpLEdlKExzKSxHZShDdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNyx2YXJz''@;'; put 'put ''OjgsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5n''@;'; put 'put ''TW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3Jh''@;'; put 'put ''eSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNl''@;'; put 'put ''YXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCBTQVMgVHlwZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwi''@;'; put 'put ''c2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5n''@;'; put 'put ''SWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFu''@;'; put 'put ''ZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzQsIm5nSWYiXSxbMSwiY2xyLXJvdyIs''@;'; put 'put ''ImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNsYXNzIiwic2VhcmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtNiIsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIi''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNs''@;'; put 'put ''ckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxh''@;'; put 'put ''enkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxb''@;'; put 'put ''InNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJd''@;'; put 'put ''LFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDMpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxPZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IiksaGUoKSxkZSg1LCJzZWxlY3QiLDQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm4gbWkoaC5yZXBvc2l0b3J5LHYpfHwoaC5yZXBvc2l0b3J5PXYpLHZ9KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksbXQoNixTVHQsMiwyLCJvcHRpb24iLDUpLGhlKCkoKSgpLGRlKDcsImNsci10cmVlIiks''@;'; put 'put ''bXQoOCxFVHQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSg5LEFUdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpLGRlKDEwLCJkaXYiLDgpKDExLCJkaXYiLDkpKDEyLCJoMyIsMTApLE9lKDEzKSxoZSgpLG10KDE0LGtUdCw0LDAsImRpdiIsMTEpKDE1LExUdCw0LDEsImRpdiIsMTIpKDE2''@;'; put 'put ''LFFUdCwxMCw1LCJkaXYiLDEzKSxoZSgpKCkpLDImZCYmKGZlKDUpLHBpKCJuZ01vZGVsIixoLnJlcG9zaXRvcnkpLGZlKCkseGUoIm5nRm9yT2YiLGgucmVwb3NpdG9yaWVzKSxmZSgyKSx4ZSgibmdJZiIsaC5tZXRhRGF0YUxpc3QpLGZlKCkseGUoIm5nRm9yT2YiLGgubWV0YURhdGFMaXN0''@;'; put 'put ''KSxmZSg0KSxDcihoLmFzc29UeXBlU2VsZWN0ZWQpLGZlKCkseGUoIm5nSWYiLCFoLmxvYWRpbmcmJiFoLm1ldGFPYmplY3RMaXN0KSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGguc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOltucyxiYSxBMixrMixxbCxUMixu''@;'; put 'put ''bCxHcyxBbSxRZixJNyxjTyxKeSxxeCx1TyxFbSxIZGUsU3AsUjcsdF8sVG0sQTcseG0sazcsZEcsRWgsUGQsWmRlLEhsLGowLEIxZSxkcyxaMSx4NywkeSxFMWUsRkwsQTFlLFQxZSxrMWUsRFksaTQscjQsRU1dLGVuY2Fwc3VsYXRpb246Mn0pfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4o''@;'; put 'put ''e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZUF0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIHRBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMyks''@;'; put 'put ''SHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgucm9sZVNlYXJjaD0iIixDdChoLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBuQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJk''@;'; put 'put ''aXYiLDgpKDIsImlucHV0Iiw5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYucm9sZVNlYXJjaCxoKXx8KGYucm9sZVNlYXJjaD1oKSxDdChoKX0pLEh0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo''@;'; put 'put ''KS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LGVBdCwxLDAsImNsci1pY29uIiwxMCkoNSx0QXQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLnJvbGVTZWFyY2gpLGZlKDIpLHhlKCJuZ0lm''@;'; put 'put ''IixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gckF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBDdChMZSgpLnJvbGVPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLE9lKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQsZD1MZSgpO1RyKCJhY3RpdmUiLGEuUk9MRVVSST09PWQucm9sZVVyaSksZmUoMyksSXIo''@;'; put 'put ''IiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gaUF0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxyQXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGFBdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIG9BdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gc0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIi''@;'; put 'put ''LDMyKSgxLCJ0ZCIsMzApLE9lKDIpLGhlKCksZGUoMywidGQiLDMwKSxPZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksT2UoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLE9lKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vy''@;'; put 'put ''cy8iK2EuVVJJTUVNKSxmZSgyKSxDcihhLk1FTUJFUk5BTUUpLGZlKDIpLENyKGEuRU1BSUwpLGZlKDIpLENyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksQ3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gbEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIs''@;'; put 'put ''InRyIikoMywidGQiLDI5KSg0LCJiIiksT2UoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxPZSg4LCJFTUFJTCIpLGhlKCkoKSxkZSg5LCJ0ZCIsMjkpKDEwLCJiIiksT2UoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCkoMTMsImIiKSxPZSgxNCwiVVBE''@;'; put 'put ''QVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksbXQoMTYsc0F0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgxNikseGUoIm5nRm9yT2YiLGEucm9sZU1lbWJlcnMpfX1mdW5jdGlvbiBjQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIEdy''@;'; put 'put ''b3VwcyBQcmVzZW50ICEiKSxoZSgpKX1mdW5jdGlvbiB1QXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLE9lKDQpLGhlKCksZGUoNSwidGQiLDMwKSxPZSg2KSxoZSgpLGRlKDcsInRkIiwzMCksT2UoOCksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJTUVNKSxmZSgyKSxDcihhLk1FTUJFUk5BTUUpLGZlKDIpLENyKGEuRU1BSUwpLGZlKDIpLENyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksQ3IoYS5NRU1CRVJVUERBVEVE''@;'; put 'put ''KX19ZnVuY3Rpb24gZEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksT2UoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxPZSg4LCJFTUFJTCIpLGhlKCkoKSxkZSg5LCJ0ZCIsMjkpKDEwLCJi''@;'; put 'put ''IiksT2UoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCkoMTMsImIiKSxPZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksbXQoMTYsdUF0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgxNikseGUoIm5nRm9yT2YiLGEu''@;'; put 'put ''cm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIGhBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxPZSg5KSxoZSgpKCkoKSgpLGRlKDEwLCJ0ciIp''@;'; put 'put ''KDExLCJ0ZCIsMjMpKDEyLCJpIiksT2UoMTMpLGhlKCkoKSgpKCkoKSgpKCksZGUoMTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLE9lKDE5KSxoZSgpLG10KDIwLG9BdCwyLDAsImg1Iiw2KSxkZSgyMSwiZGl2IiwyNiksbXQoMjIsbEF0''@;'; put 'put ''LDE3LDEsInRhYmxlIiwyNyksaGUoKSgpLEd0KDIzLCJociIpLGRlKDI0LCJkaXYiKSgyNSwiaDMiKSxPZSgyNiksaGUoKSxtdCgyNyxjQXQsMiwwLCJoNSIsNiksZGUoMjgsImRpdiIsMjYpLG10KDI5LGRBdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxHdCgzMCwiYnIiKSxoZSgpKCkoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg5KSxDcihhLnJvbGVOYW1lKSxmZSg0KSxDcihhLnJvbGVEZXNjKSxmZSg2KSxJcigiTUVNQkVSUyAoIixhLnJvbGVNZW1iZXJzQ291bnQsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnJvbGVNZW1iZXJzQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1h''@;'; put 'put ''LnJvbGVNZW1iZXJzQ291bnQpLGZlKDQpLElyKCJHcm91cHMgKCIsYS5yb2xlR3JvdXBzQ291bnQsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnJvbGVHcm91cHNDb3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEucm9sZUdyb3Vwc0NvdW50KX19bGV0IFM3ZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMucm9sZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFtZT0iIix0aGlzLnJvbGVEZXNj''@;'; put 'put ''PSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSExfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5w''@;'; put 'put ''YXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5yb2xlcz1Lbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Lbi51c2VybmF2LnJvbGVT''@;'; put 'put ''ZWFyY2gpOnZvaWQgMD09PUtuLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVz''@;'; put 'put ''LEtuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnND''@;'; put 'put ''b3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0''@;'; put 'put ''aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKToodGhpcy5yb2xlcz1Lbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Lbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJv''@;'; put 'put ''bGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLnJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLEtuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhp''@;'; put 'put ''cy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5y''@;'; put 'put ''b2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRl''@;'; put 'put ''cih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxLbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5w''@;'; put 'put ''YXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpOmQrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOmEu''@;'; put 'put ''Uk9MRVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1hLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xFREVTQ30pfWZpbmRSb2xlKGEsZCl7''@;'; put 'put ''bGV0IGg9ITE7cmV0dXJuIGEuZm9yRWFjaChmPT57Zi5ST0xFVVJJPT09ZCYmKGg9Zil9KSxofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZShHdSksR2UoTHMpLEdlKGZoKSxHZShDdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9''@;'; put 'put ''VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQs''@;'; put 'put ''Im5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJ''@;'; put 'put ''bnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xp''@;'; put 'put ''Y2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3Jv''@;'; put 'put ''dXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFp''@;'; put 'put ''bmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxtdCgyLG5BdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsaUF0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxtdCg1LGFBdCwzLDAsImRpdiIsNSkoNixoQXQsMzEsOCwi''@;'; put 'put ''ZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsaC5yb2xlcyksZmUoKSx4ZSgibmdGb3JPZiIsaC5yb2xlcyksZmUoMikseGUoIm5nSWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5yb2xlTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W25zLGJhLGMx''@;'; put 'put ''LHFsLG5sLEdzLEVoLFBkLEhsLFoxLGk0LHI0XSxzdHlsZXM6WyI6Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGV7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAucm9sZS1kYXRhe2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAucm9s''@;'; put 'put ''ZS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNh''@;'; put 'put ''N2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodHtoZWlnaHQ6MTAwJX0ucm9sZS1pbmZvLXRleHR7''@;'; put 'put ''ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWluZm8gdGR7dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWRhdGF7''@;'; put 'put ''bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhIGgzLC5yb2xlLWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdy15OnNjcm9s''@;'; put 'put ''bDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksZkF0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9''@;'; put 'put ''bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0s''@;'; put 'put ''ZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxwQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09u''@;'; put 'put ''RGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNs''@;'; put 'put ''czoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3I1XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGdBdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBt''@;'; put 'put ''QXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLnVzZXJTZWFyY2g9IiIsQ3QoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gdkF0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnVzZXJTZWFyY2gsaCl8fChmLnVzZXJTZWFyY2g9aCks''@;'; put 'put ''Q3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCksbXQoNCxnQXQsMSwwLCJjbHItaWNvbiIsMTApKDUsbUF0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUo''@;'; put 'put ''KTtmZSgyKSxwaSgibmdNb2RlbCIsZC51c2VyU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGJBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1''@;'; put 'put ''KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS51c2VyT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0LGQ9''@;'; put 'put ''TGUoKTtUcigiYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxmZSgzKSxJcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIHlBdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsYkF0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLHVpKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBfQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiB3QXQoYyxsKXtpZigxJmMmJihjaSgwKSxk''@;'; put 'put ''ZSgxLCJ0ciIpKDIsInRkIiwyNyksT2UoMywiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLGRlKDQsImIiKSxPZSg1KSxoZSgpKCkoKSxkZSg2LCJ0ciIpKDcsInRkIiwyNyksT2UoOCwiIE1ldGFkYXRhIFVwZGF0ZWQ6ICIpLGRlKDksImIiKSxPZSgxMCksaGUoKSgpKCksdWkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKDMpO2ZlKDUpLENyKGEudXNlckluZm8uTUVUQURBVEFDUkVBVEVEKSxmZSg1KSxDcihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIENBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0''@;'; put 'put ''LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxPZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLE9lKDEzKSxoZSgpKCkoKSgpLG10KDE0LHdBdCwxMSwyLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSgyKTtmZSg4KSxDcihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLENyKGEudXNlckluZm8uRElTUExBWU5BTUUpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19ZnVuY3Rpb24gU0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwi''@;'; put 'put ''ZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE9lKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3KSxPZSgxMSwiIFVzZXIgSUQ6ICIpLGRlKDEyLCJiIiksT2UoMTMpLGhlKCkoKSgpLGRlKDE0LCJ0''@;'; put 'put ''ciIpKDE1LCJ0ZCIsMjcpLE9lKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksZGUoMTcsImIiKSxPZSgxOCksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDgpLENyKGEudXNlckluZm8uTkFNRSksZmUoNSksQ3IoYS51c2VySW5mby5VUkkpLGZlKDUpLENyKGEudXNl''@;'; put 'put ''ckluZm8uUFJPVklERVIpfX1mdW5jdGlvbiBNQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIEVtYWlscyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24geEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLE9lKDIpLGhlKCksZGUoMywidGQiLDMxKSxPZSg0KSxo''@;'; put 'put ''ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxDcihhLkVNQUlMKSxmZSgyKSxDcihhLlRZUEUpfX1mdW5jdGlvbiBFQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxPZSg1LCJFTUFJTCIpLGhl''@;'; put 'put ''KCkoKSxkZSg2LCJ0ZCIsMzEpKDcsImIiKSxPZSg4LCJUWVBFIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLG10KDEwLHhBdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgxMCkseGUoIm5nRm9yT2YiLGEudXNlckVtYWlscyl9fWZ1bmN0aW9uIFRBdChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxtdCgzLE1BdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxtdCg1LEVBdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLElyKCJFTUFJTFMgKCIsYS51c2VyRW1haWxzQ291''@;'; put 'put ''bnR8fCIwIiwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiBBQXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24ga0F0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxPZSgxLCJO''@;'; put 'put ''byBHcm91cHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIERBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwzMyksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O3hlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSSksZmUoKSxJcigiICIs''@;'; put 'put ''YS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gSUF0KGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwidGQiLDMzKSxPZSgyKSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgpLHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIisoYS5HUk9VUFVS''@;'; put 'put ''SXx8YS5VUkkpKSxmZSgpLElyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBSQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpLG10KDEsREF0LDIsMiwidGQiLDMyKSgyLElBdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5n''@;'; put 'put ''SWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9uIExBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxtdCgyLFJBdCwzLDIsInRy''@;'; put 'put ''IiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSx4ZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24gT0F0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIFBBdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gUm9sZXMgUHJlc2VudCIpLGhlKCkp''@;'; put 'put ''fWZ1bmN0aW9uIEZBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDM0KSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDQpO2ZlKCkseGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5nZXRSb2xlVVJJKGEuUk9MRVVSSSkp''@;'; put 'put ''LGZlKCksSXIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gSEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLG10KDIsRkF0LDMsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDIpLHhlKCJuZ0Zvck9mIixhLnVzZXJSb2xlcyl9''@;'; put 'put ''fWZ1bmN0aW9uIE5BdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxtdCgzLFBBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxtdCg1LEhBdCwzLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksSXIoIlJPTEVTICgi''@;'; put 'put ''LGEudXNlclJvbGVzQ291bnR8fCIwIiwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50KX19ZnVuY3Rpb24gVkF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIEJBdChjLGwpezEmYyYmKGRlKDAs''@;'; put 'put ''Img1IiksT2UoMSwiTm8gTG9naW5zIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBqQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzEpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLENyKGEuRE9N''@;'; put 'put ''QUlOKSxmZSgyKSxDcihhLlVTRVJJRCl9fWZ1bmN0aW9uIHpBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLE9lKDUsIkRPTUFJTiIpLGhlKCkoKSxkZSg2LCJ0ZCIpKDcsImIiKSxPZSg4LCJVU0VSIElEIiksaGUo''@;'; put 'put ''KSgpKCkoKSxkZSg5LCJ0Ym9keSIpLG10KDEwLGpBdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgxMCkseGUoIm5nRm9yT2YiLGEudXNlckxvZ2lucyl9fWZ1bmN0aW9uIFVBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxt''@;'; put 'put ''dCgzLEJBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxtdCg1LHpBdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLElyKCJMT0dJTlMgKCIsYS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEudXNlckxvZ2lu''@;'; put 'put ''c0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiBaQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxtdCgxLENBdCwxNSwzLCJkaXYiLDIwKSgyLFNBdCwxOSwzLCJkaXYiLDIwKSxkZSgzLCJkaXYiLDIxKSg0LCJkaXYiLDIyKSg1LCJkaXYi''@;'; put 'put ''LDIzKSxtdCg2LFRBdCw2LDMsImRpdiIsNikoNyxBQXQsMSwwLCJociIsNiksZGUoOCwiZGl2IikoOSwiaDMiKSxPZSgxMCksaGUoKSxtdCgxMSxrQXQsMiwwLCJoNSIsNiksZGUoMTIsImRpdiIsMjQpLG10KDEzLExBdCwzLDEsInRhYmxlIiwyNSksaGUoKSgpLG10KDE0LE9BdCwxLDAsImhy''@;'; put 'put ''Iiw2KSgxNSxOQXQsNiwzLCJkaXYiLDYpKDE2LFZBdCwxLDAsImhyIiw2KSgxNyxVQXQsNiwzLCJkaXYiLDYpLEd0KDE4LCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksZmUoNCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoMyksSXIo''@;'; put 'put ''IkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHNDb3VudCksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgTTdlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJjaD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0''@;'; put 'put ''aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNlcnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtpZihLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3VzZXJzIix2b2lk''@;'; put 'put ''IDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudCl0aGlzLnVzZXJzPUtuLnVzZXJu''@;'; put 'put ''YXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUtuLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUtuLnVzZXJuYXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNl''@;'; put 'put ''cnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQUk9WSURFUjpmLnByb3ZpZGVySWR9KSk7dGhp''@;'; put 'put ''cy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxLbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9YS5hZGFwdGVyUmVzcG9uc2UudXNlcnMsS24u''@;'; put 'put ''dXNlcm5hdi51c2VyTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS51c2Vyc30pKToodGhpcy51c2Vycz1Lbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Lbi51c2VybmF2LnVzZXJTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50KWlmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YSl7''@;'; put 'put ''bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGQ9''@;'; put 'put ''PmQudGV4dCgpKS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAodj0+KHtHUk9VUE5BTUU6di5uYW1lLFVSSTp2LmlkfSkpO3RoaXMudXNlckdyb3Vwcz1mLHRoaXMudXNlckdyb3Vwc0NvdW50PWYu''@;'; put 'put ''bGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2PT52LlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7''@;'; put 'put ''aXdhbnQ6W3t1cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQjAuWS5TYXM5OnRoaXMudXNlckluZm89aC5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9aC5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRo''@;'; put 'put ''aXMudXNlckVtYWlsc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWguYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgQjAuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGY9PmYuVVJJPT09YSk7ZWxzZXtjb25zdCBmPWgu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Zi5JRCxOQU1FOmYuTkFNRSxESVNQTEFZTkFNRTpmLk5BTUV9fX10aGlzLnVzZXJEYXRhPWguYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy51c2Vy''@;'; put 'put ''R3JvdXBzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfX11c2VyTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnVzZXJzLHRoaXMudXNlclNlYXJjaCwiTkFNRSIpLEtuLnVzZXJuYXYudXNlclNlYXJjaD10aGlzLnVz''@;'; put 'put ''ZXJTZWFyY2h9dXNlck9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuVVJJKTpkKyIvIitl''@;'; put 'put ''bmNvZGVVUkkoYS5VUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithLlVSSSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50''@;'; put 'put ''ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy51c2VyRGF0YT1mLHRoaXMubG9hZGluZz0hMTtsZXQgdj1mLml0ZW1zLm1hcChNPT4oe0dST1VQTkFNRTpNLm5hbWUsVVJJOk0uaWR9KSk7dGhpcy51c2VyR3JvdXBzPXYsdGhpcy51c2VyR3JvdXBzQ291bnQ9di5sZW5n''@;'; put 'put ''dGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKE09Pk0uVVJJPT09YS5VUkkpKX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmEuVVJJfV19KS50aGVuKGY9Pntzd2l0Y2godGhpcy5s''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCMC5ZLlNhczk6dGhpcy51c2VySW5mbz1mLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2UuZW1h''@;'; put 'put ''aWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWYu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBCMC5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1hLlVSSSk7ZWxzZXtjb25zdCB2PWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwc1swXTt0aGlzLnVzZXJJ''@;'; put 'put ''bmZvPXtVUkk6di5JRCxOQU1FOnYuTkFNRSxESVNQTEFZTkFNRTp2Lk5BTUV9fX10aGlzLnVzZXJEYXRhPWYuYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBz''@;'; put 'put ''Lmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0dXJuIGEuc3BsaXQoIk9NU09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3UpLEdlKHRsKSxHZShDdSksR2UoZmgpLEdlKExzKSl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xh''@;'; put 'put ''c3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBw''@;'; put 'put ''U3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJz''@;'; put 'put ''aGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0s''@;'; put 'put ''WyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIs''@;'; put 'put ''InRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwiY2xh''@;'; put 'put ''c3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiks''@;'; put 'put ''bXQoMix2QXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLHlBdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksbXQoNSxfQXQsMywwLCJkaXYiLDUpKDYsWkF0LDE5LDExLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIixoLnVzZXJzKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0Zvck9mIixoLnVzZXJzKSxmZSgyKSx4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLnVzZXJEYXRhJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsYzEscHkscWwsbmwsR3MsRWgsUGQsSGwsWjEsaTQscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1y''@;'; put 'put ''ZXR1cm4gY30pKCk7Y29uc3QgV0F0PWM9Plsic2VnbWVudCIsY10sWUF0PShjLGwpPT4oeyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gR0F0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDkpfWZ1bmN0aW9uICRBdChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1MbigpO2RlKDAsInNwYW4iLDEwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5vblZhbHVlQ2xpY2soaCkpfSksT2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSxDcihhLmRlc2Ny''@;'; put 'put ''aXB0aW9uKX19ZnVuY3Rpb24gS0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEh0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5vblNlZ21lbnRMaW5rQ2xp''@;'; put 'put ''Y2soaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSx4ZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWZ1bmN0aW9uIHFB''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50b2dnbGUoaCkpfSksbXQoMixHQXQsMSwwLCJkaXYiLDQpLGRlKDMsInNw''@;'; put 'put ''YW4iLDUpLE9lKDQpLGhlKCksZGUoNSwic3BhbiIsNiksT2UoNiwiOiAiKSxoZSgpLG10KDcsJEF0LDIsMSwic3BhbiIsNyksaGUoKSxtdCg4LEtBdCwyLDQsInNlY3Rpb24iLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTt4ZSgibmdDbGFzcyIsc3AoNixXQXQs''@;'; put 'put ''InNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLGZlKCkseGUoIm5nQ2xhc3MiLGxwKDgsWUF0LGQuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxmZSgpLHhlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksZmUoMiksQ3IoYS5rZXkpLGZlKDMpLHhlKCJuZ0lmIiwhYS5leHBhbmRlZHx8IWQu''@;'; put 'put ''aXNFeHBhbmRhYmxlKGEpKSxmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCBYQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRM''@;'; put 'put ''aW5rQ2xpY2tlZD1uZXcgS3IsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaChhPT57dGhp''@;'; put 'put ''cy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVjdCI9PT1hLnR5''@;'; put 'put ''cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xp''@;'; put 'put ''Y2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFsdWUpe2Nhc2Ui''@;'; put 'put ''bnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5rIjticmVha31o''@;'; put 'put ''LnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJudWxsIixoLmRl''@;'; put 'put ''c2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9ImRhdGUiOiho''@;'; put 'put ''LnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09YVswXX1pc0V4''@;'; put 'put ''cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgTSxEO3JldHVybiJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''Znx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihNPWQuZ2V0KGYpLHZvaWQgMCE9PU0/eyRyZWY6TX06KGQuc2V0KGYsdiksQXJy''@;'; put 'put ''YXkuaXNBcnJheShmKT8oRD1bXSxmLmZvckVhY2goZnVuY3Rpb24oWixyZSl7RFtyZV09aChaLHYrIlsiK3JlKyJdIil9KSk6KEQ9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihaKXtEW1pdPWgoZltaXSx2KyJbIitKU09OLnN0cmluZ2lmeShaKSsiXSIpfSkpLEQpKX0oYSwi''@;'; put 'put ''JCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9j''@;'; put 'put ''dXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdG''@;'; put 'put ''b3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIl1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYoZGUoMCwic2VjdGlvbiIsMCksbXQoMSxxQXQsOSwxMSwic2VjdGlvbiIsMSksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLGJhLGNdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Lm5neC1qc29u''@;'; put 'put ''LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigtLW5neC1qc29uLXRv''@;'; put 'put ''Z2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNl''@;'; put 'put ''Z21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hpbGRyZW5bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVu''@;'; put 'put ''dC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZGF0ZVtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50''@;'; put 'put ''LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5KX0ubmd4LWpzb24t''@;'; put 'put ''dmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZnVu''@;'; put 'put ''Y3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9y''@;'; put 'put ''OnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAu''@;'; put 'put ''c2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''c2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkp''@;'; put 'put ''fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1''@;'; put 'put ''bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksSkF0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLFFBdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgiLyIpO2ZvcihsZXQgZj0wO2Y8''@;'; put 'put ''aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09YDxhIGhyZWY9JHtkfT4ke3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVwaXBlPWxsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLGVrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3''@;'; put 'put ''KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJwcmV0dHlqc29uIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0''@;'; put 'put ''O2ZNKCJ2YWx1ZSIsYS52YWx1ZSksZmUoKSxJcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gbmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0Z3JvdXAiLDIyKSxtdCgxLHRrdCwyLDIsIm9wdGlvbiIsMjMpLFFzKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0''@;'; put 'put ''LGQ9TGUoKTt4ZSgibGFiZWwiLGEua2V5KSxmZSgpLHhlKCJuZ0Zvck9mIixEYygyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gcmt0KGMsbCl7MSZjJiYoZGUoMCwicCIsMjUpLE9lKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSxoZSgpKX1mdW5jdGlvbiBp''@;'; put 'put ''a3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gYWt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIG9rdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMyksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsQ3QoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIHNrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4KSgyLCJpbnB1dCIsMjksMCks''@;'; put 'put ''Z2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCksQ3QoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlua3NMaXN0T25GaWx0ZXIo''@;'; put 'put ''KSl9KSxoZSgpLG10KDQsYWt0LDEsMCwiY2xyLWljb24iLDMwKSg1LG9rdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlua3NTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwx''@;'; put 'put ''KSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gbGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJu''@;'; put 'put ''IEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJw''@;'; put 'put ''IiwzNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkubGlua09uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O3BpKCJjbHJFeHBh''@;'; put 'put ''bmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLHp1KCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gY2t0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxsa3QsNCw0LCJjbHItdHJlZS1ub2RlIiwz''@;'; put 'put ''NCksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHVrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBka3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzMpLEh0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLml0ZW1zU2VhcmNoPSIiLEN0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBoa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwi''@;'; put 'put ''ZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0ZW1zU2VhcmNoPWgpLEN0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChMZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LHVrdCwxLDAsImNsci1pY29uIiwzMCkoNSxka3QsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSxmZSgyKSx4''@;'; put 'put ''ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUo''@;'; put 'put ''KS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludEl0ZW1zKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4''@;'; put 'put ''cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLml0ZW1PbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1M''@;'; put 'put ''ZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIHBrdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsZmt0LDQs''@;'; put 'put ''MywiY2xyLXRyZWUtbm9kZSIsMzQpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBna3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gbWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''ZGUoMCwibmd4LWpzb24tdmlld2VyIiw0OSksSHQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxoZSgpfTImYyYmeGUoImpzb24iLExlKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVu''@;'; put 'put ''Y3Rpb24gdmt0KGMsbCl7aWYoMSZjJiYoY2koMCksT2UoMSksUXMoMiwicHJldHR5anNvbiIpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLElyKCJcbiAgICAgICAgICAgICIsRGMoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIGJrdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGNpKDApLE9lKDEsIlxuICAgICAgICAgICIpLG10KDIsbWt0LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksT2UoMywiXG4gICAgICAgICAgIiksbXQoNCx2a3QsMywzLCJuZy1jb250YWluZXIiLDIxKSxPZSg1LCJcbiAgICAgICAgIiksdWkoKSksMiZjKXtjb25zdCBhPUxlKDIp''@;'; put 'put ''O2ZlKDIpLHhlKCJuZ0lmIiwhYS5yYXdKc29uKSxmZSgyKSx4ZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24geWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLE9lKDMsIiBHRVQgIiksZGUoNCwicCIsNDIpLFFzKDUsImxp''@;'; put 'put ''bmtpbnplIiksSHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGhlKCksZGUoNiwiYnV0dG9uIiwxNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksR3Qo''@;'; put 'put ''NywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLE9lKDExLCJTdGFydCIpLGhlKCksZGUoMTIsImlucHV0Iiw0NCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUo''@;'; put 'put ''KTtyZXR1cm4gbWkoZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3RhcnQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFiZWwiKSxPZSgxNSwiTGltaXQiKSxoZSgpLGRlKDE2LCJpbnB1dCIsNDQpLGdpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuZW5kcG9pbnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDE3LCJidXR0b24iLDQ1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCku''@;'; put 'put ''YXBwbHlRdWVyeVBhcmFtcygpKX0pLEd0KDE4LCJjbHItaWNvbiIsNDYpLGhlKCkoKSgpLGRlKDE5LCJwcmUiLDQ3KSxPZSgyMCwiICAgICAgICAiKSxtdCgyMSxia3QsNiwyLCJuZy1jb250YWluZXIiLDIxKSxPZSgyMiwiXG4gICAgICAiKSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPUxl''@;'; put 'put ''KCk7ZmUoNCkseGUoImlubmVySFRNTCIsRGMoNSw3LGEuZW5kcG9pbnQudXJsKSxWNCksZmUoOCkscGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksZmUoNCkscGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQp''@;'; put 'put ''LHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksZmUoKSx4ZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLHhlKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCBfa3Q9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlua3M9''@;'; put 'put ''W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1zU2Vh''@;'; put 'put ''cmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1saW5r''@;'; put 'put ''c0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEtuLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBl''@;'; put 'put ''clNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksS24udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3RoaXMu''@;'; put 'put ''bG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe0tuLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0h''@;'; put 'put ''MCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMu''@;'; put 'put ''ZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZD1hLm1l''@;'; put 'put ''c3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAgRXJy''@;'; put 'put ''b3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlz''@;'; put 'put ''LmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfWNvcHlKc29uKCl7dGhp''@;'; put 'put ''cy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVU''@;'; put 'put ''ZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9IitkOiIifWAsZj1gJHt0aGlzLmVu''@;'; put 'put ''ZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9ZC5saW5rcyx0aGlzLmVuZHBv''@;'; put 'put ''aW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0fSxkPT57dGhpcy5lbmRwb2lu''@;'; put 'put ''dExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlvbiYmKGg9YCR7aH1cbiR7ZC5l''@;'; put 'put ''cnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEd1KSxHZShUVyksR2UodGwpLEdlKHZjKSl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hJ''@;'; put 'put ''dGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInct''@;'; put 'put ''MTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJl''@;'; put 'put ''YSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xl''@;'; put 'put ''IiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJd''@;'; put 'put ''LFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIs''@;'; put 'put ''InRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxl''@;'; put 'put ''dGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNs''@;'; put 'put ''ckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBl''@;'; put 'put ''IiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGln''@;'; put 'put ''bi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1h''@;'; put 'put ''bGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIiwiZGlz''@;'; put 'put ''YWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksT2UoNCwiQVBJIENvbGxlY3Rpb24iKSxoZSgpLGRlKDUsInNlbGVjdCIsMyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1''@;'; put 'put ''bmN0aW9uKHYpe3JldHVybiBtaShoLmNvbGxlY3Rpb24sdil8fChoLmNvbGxlY3Rpb249diksdn0pLEh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxtdCg2LG5rdCwzLDQsIm9wdGdyb3VwIiw0KSxRcyg3LCJrZXl2YWx1ZSIpLGhl''@;'; put 'put ''KCkoKSgpLG10KDgscmt0LDIsMCwicCIsNSksZGUoOSwiZGl2Iiw2KSxtdCgxMCxpa3QsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSxkZSgxMSwiY2xyLXRyZWUiKSxtdCgxMixza3QsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxMyxja3QsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCksZGUo''@;'; put 'put ''MTQsImNsci10cmVlIiksbXQoMTUsaGt0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTYscGt0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTcsImRpdiIsMTApKDE4LCJkaXYiLDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIs''@;'; put 'put ''MTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMywiaW5wdXQiLDE1KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmF3SnNvbix2KXx8KGgucmF3SnNvbj12KSx2fSksaGUoKSxkZSgyNCwibGFiZWwiKSxPZSgyNSwiUkFXIEpzb24iKSxoZSgpKCkoKSxk''@;'; put 'put ''ZSgyNiwiYnV0dG9uIiwxNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmNvcHlKc29uKCl9KSxHdCgyNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoMjgsImg0IiwxOCksT2UoMjksIiBBUEkgRXhwbG9yZXIgIiksbXQoMzAsZ2t0LDEsMCwiY2xyLXNwaW5uZXIiLDE5KSxoZSgp''@;'; put 'put ''KCksR3QoMzEsImhyIiwyMCksbXQoMzIseWt0LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGhlKCkoKSksMiZkJiYoZmUoNSkscGkoIm5nTW9kZWwiLGguY29sbGVjdGlvbiksZmUoKSx4ZSgibmdGb3JPZiIsRGMoNywxMSxoLmNvbGxlY3Rpb25zKSksZmUoMikseGUoIm5nSWYiLGguZW5kcG9p''@;'; put 'put ''bnRMaW5rcy5sZW5ndGg8MSYmIWguY29sbGVjdGlvbkxvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmVuZHBvaW50TGlua3MpLGZlKDIpLHhlKCJu''@;'; put 'put ''Z0lmIixoLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLGZlKCkseGUoIm5nRm9yT2YiLGguZW5kcG9pbnRJdGVtcyksZmUoNykscGkoIm5nTW9kZWwiLGgucmF3SnNvbiksZmUoNykseGUoIm5nSWYiLGguZW5kcG9pbnRMb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5jb2xsZWN0aW9uLmxlbmd0''@;'; put 'put ''aD4wKSl9LGRlcGVuZGVuY2llczpbbnMsYmEsQTIsazIscWwsdkwsTWQsVDIsbmwsR3MsRWgsUGQsSGwsajAsZHMsSWQsQnksU2gsWjEsR0wseDcsJHksUmQsaTQscjQsWEF0LF9SLFFBdCxla3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgd2t0PW5ldyBTdCgiV2lu''@;'; put 'put ''ZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IENrdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlz''@;'; put 'put ''Lm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IFduLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7''@;'; put 'put ''aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2Vzczpk''@;'; put 'put ''fTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlk''@;'; put 'put ''KGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9u''@;'; put 'put ''bHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRo''@;'; put 'put ''aXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0''@;'; put 'put ''YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRB''@;'; put 'put ''cmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5''@;'; put 'put ''JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAw''@;'; put 'put ''KX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZh''@;'; put 'put ''LmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIp''@;'; put 'put ''LGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFn''@;'; put 'put ''ZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1''@;'; put 'put ''YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSx4cih2cykseHIod2t0LDgpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxTa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IEty''@;'; put 'put ''LHRoaXMuY2JPbkVycm9yPW5ldyBLcix0aGlzLm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2Fy''@;'; put 'put ''ZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciks''@;'; put 'put ''dGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGlj''@;'; put 'put ''ayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQs''@;'; put 'put ''c3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57''@;'; put 'put ''dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFdhKSxHZShKaSksR2UoRW8pLEdlKENrdCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06W05uLk5vbmUsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxv''@;'; put 'put ''dXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSxNa3Q9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7dmFyIHhrdD15KDI1MDAxKTtsZXQgRWt0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29uc3QgaD1wYXJzZUludChkWzBdKXx8MixmPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChhKTphO3JldHVybigwLHhrdC5DKShm''@;'; put 'put ''LGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFRrdD1bInF1ZXJ5RmlsdGVyIl0sQWt0PSgp''@;'; put 'put ''PT5bIiIsIiAiXTtmdW5jdGlvbiBra3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDU0KSxHdCgxLCJjbHItc3Bpbm5lciIsNTUpLGhlKCkpfWZ1bmN0aW9uIERrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBJa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw''@;'; put 'put ''LCJjbHItaWNvbiIsNjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIFJrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNs''@;'; put 'put ''ci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNTgsMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEh0KCJrZXl1''@;'; put 'put ''cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLG10KDQsRGt0LDEsMCwiY2xyLWljb24iLDU5KSg1LElrdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCk7ZmUoMikscGkoIm5nTW9k''@;'; put 'put ''ZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIExrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBPa3QoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIp''@;'; put 'put ''KX0pLGhlKCl9fWZ1bmN0aW9uIFBrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNjcsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0O3Jl''@;'; put 'put ''dHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLG10KDQsTGt0LDEs''@;'; put 'put ''MCwiY2xyLWljb24iLDU5KSg1LE9rdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKDIpLiRpbXBsaWNpdDtmZSgyKSx4ZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUo''@;'; put 'put ''Im5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBGa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw3NCl9ZnVuY3Rpb24gSGt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzUpfWZ1bmN0aW9uIE5rdChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzApLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkubmdWYXIsZj1MZSgpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdCxNPUxlKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxj''@;'; put 'put ''aSgxLDcxKSxtdCgyLEZrdCwxLDAsImNsci1pY29uIiw3MikoMyxIa3QsMSwwLCJjbHItaWNvbiIsNzMpLHVpKCksT2UoNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0LGg9TGUoMikuJGltcGxpY2l0LGY9TGUoKTtUcigiZGMtbG9ja2VkLWNvbnRy''@;'; put 'put ''b2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSx4ZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIgIixkLnJlcGxhY2UoIi1G''@;'; put 'put ''QyIsIiIpLCIgIil9fWZ1bmN0aW9uIFZrdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSgxLCJzcGFuIiksT2UoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSgpKX1mdW5jdGlvbiBCa3Qo''@;'; put 'put ''YyxsKXsxJmMmJihjaSgwKSxtdCgxLFZrdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc2KSx1aSgpKX1mdW5jdGlvbiBqa3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcCIpLG10KDEsTmt0LDUsOCwiYnV0dG9uIiw2OSkoMixCa3QsMiwwLCJuZy1jb250YWluZXIiLDQyKSxo''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGQubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGEpfX1mdW5jdGlvbiB6a3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksbXQoMSxqa3QsMywyLCJjbHItdG9vbHRpcCIs''@;'; put 'put ''NjgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9TGUoMyk7ZmUoKSx4ZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDY0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU5vZGVDbGlja2VkKGgsZikpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0O3JldHVy''@;'; put 'put ''biBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDY1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdCxmPUxlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxpYnJhcnlPbkNsaWNrKGguTElC''@;'; put 'put ''UkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsNjYpLE9lKDMpLGhlKCksbXQoNCxQa3QsNiw0LCJjbHItdHJlZS1ub2RlIiw3KSg1LHprdCwyLDEsImNsci10cmVlLW5vZGUiLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O1RyKCJjbHItZXhwYW5kZWQiLGEuZXhw''@;'; put 'put ''YW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCkseGUoIm5nSWYiLGEudGFibGVzKSxmZSgpLHhlKCJuZ0Zvck9mIixhLnRhYmxlcyl9''@;'; put 'put ''fWZ1bmN0aW9uIFprdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsVWt0LDYsNywiY2xyLXRyZWUtbm9kZSIsNjMpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gV2t0KGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gWWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSkoMiwiZGl2Iiw4MikoMywiZGl2Iiw4MykoNCwiYnV0dG9uIiw4NCksR3Qo''@;'; put 'put ''NSwiY2xyLWljb24iLDg1KSxoZSgpLGRlKDYsImgzIiw0NyksT2UoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2IiwxNSkoOSwicCIpLE9lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDI2KSgxMiwiYnV0dG9uIiw4NiksSHQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksT2UoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIEdrdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw4Nyl9ZnVuY3Rpb24gJGt0KGMsbCl7MSZjJiZHdCgwLCJhcHAtcXVlcnkiLG51''@;'; put 'put ''bGwsMyl9ZnVuY3Rpb24gS2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw4OCkoMSwic3BhbiIsODkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2Iiw5MCkoNCwicCIsOTEpLE9lKDUsIkxvYWRpbmcgVGFibGUgVmlld2VyIiksaGUoKSgpKCkpfWZ1bmN0aW9uIHFrdChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMTUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoNSk7cmV0dXJuIEN0KExlKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIFhrdChjLGwpezEmYyYmKGRlKDAsInNwYW4i''@;'; put 'put ''LDExNiksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gSmt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTE3KX1mdW5jdGlvbiBRa3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMTgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLElyKCIgIixu''@;'; put 'put ''dWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gZUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTIwKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoKSxJcigiICIsYS5k''@;'; put 'put ''c05vdGUsIiAiKX19ZnVuY3Rpb24gdER0KGMsbCl7MSZjJiYoY2koMCksbXQoMSxlRHQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTkpLHVpKCkpfWZ1bmN0aW9uIG5EdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxRcygyLCJ0aG91c2FuZFNlcGFyYXRvciIpLGhlKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1MZSg0KTtmZSgpLCRJKCIgKCIsejgoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIp''@;'; put 'put ''ICIpfX1mdW5jdGlvbiByRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxtdCgxLG5EdCwzLDcsInNwYW4iLDQyKSxkZSgyLCJjbHItaWNvbiIsMTIxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLGhlKCks''@;'; put 'put ''dWkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gaUR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNSku''@;'; put 'put ''ZWRpdFRhYmxlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzMyksZGUoMiwic3BhbiIpLE9lKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIGFEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExl''@;'; put 'put ''KDUpLmdvVG9MaW5lYWdlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzNCksZGUoMiwic3BhbiIpLE9lKDMsIkxpbmVhZ2UiKSxoZSgpKCl9fWZ1bmN0aW9uIG9EdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjYpKDEsImRpdiIsMTI3KSxIdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLm5ld1ZpZXdib3goKSl9KSxHdCgyLCJjbHItaWNvbiIsMTI4KSxkZSgzLCJzcGFuIiksT2UoNCwiVmlld2JveGVzIiksaGUoKSgpLG10KDUsaUR0LDQsMCwiZGl2IiwxMjkpKDYsYUR0LDQsMCwiZGl2IiwxMjkpLGRlKDcs''@;'; put 'put ''ImRpdiIsMTI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLm9wZW5RYigpKX0pLEd0KDgsImNsci1pY29uIiwxMzApLGRlKDksInNwYW4iKSxPZSgxMCwiRmlsdGVyIiksaGUoKSgpLGRlKDExLCJkaXYiLDEyNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB3dChhKSxDdChMZSg0KS5vcGVuRG93bmxvYWQ9ITApfSksR3QoMTIsImNsci1pY29uIiwxMzEpLGRlKDEzLCJzcGFuIiksT2UoMTQsIkRvd25sb2FkIiksaGUoKSgpLGRlKDE1LCJkaXYiLDEyNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5zaG93''@;'; put 'put ''V2ViUXVlcnkoKSl9KSxHdCgxNiwiY2xyLWljb24iLDEzMiksZGUoMTcsInNwYW4iKSxPZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSg0KTtmZSg1KSx4ZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXVy''@;'; put 'put ''aSl9fWZ1bmN0aW9uIHNEdChjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93biIsMTIyKSgxLCJidXR0b24iLDEyMyksR3QoMiwiY2xyLWljb24iLDEyNCksT2UoMywiIG9wdGlvbnMgIiksaGUoKSxtdCg0LG9EdCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIsMTI1KSxoZSgpKSwyJmMmJnhl''@;'; put 'put ''KCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIGxEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTM1KSgxLCJzcGFuIiksT2UoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLE9lKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoNCksQ3IoYS5xdWVyeVRl''@;'; put 'put ''eHQpfX1mdW5jdGlvbiBjRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDk4KSgxLCJzZWN0aW9uIiw5OSkoMiwiZm9ybSIsMTAwKSgzLCJkaXYiLDEwMSkoNCwiaW5wdXQiLDEwMiw0KSxIdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSg1''@;'; put 'put ''KTtyZXR1cm4gQ3QoTGUoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKSxtdCg2LHFrdCwxLDAsImNsci1pY29uIiwxMDMpKDcsWGt0LDIsMCwic3BhbiIsMTA0KSxoZSgpLGRlKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIs''@;'; put 'put ''MTA1KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKTtyZXR1cm4gbWkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgxMSwibGFiZWwiKSxPZSgxMiwiTnVtZXJpYyIpLGhlKCkoKSgpKCkoKSxk''@;'; put 'put ''ZSgxMywiZGl2IiwxMDYpKDE0LCJwIiwxMDcpKDE1LCJjbHItdG9vbHRpcCIsMTA4KSgxNiwiY2xyLWljb24iLDEwOSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLG10KDE3LEprdCwxLDAsImNsci1pY29uIiwxMTAp''@;'; put 'put ''KDE4LFFrdCwyLDEsInNwYW4iLDExMSkoMTksdER0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSxtdCgyMCxyRHQsMywxLCJuZy1jb250YWluZXIiLDQyKSxoZSgpKCksZGUoMjEsImRpdiIsMTEyKSxtdCgyMixzRHQsNSwxLCJjbHItZHJvcGRvd24iLDExMyksaGUoKSxtdCgyMyxsRHQs''@;'; put 'put ''NSwxLCJkaXYiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCkseGUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLGZlKDIpLHhlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLGZlKDMpLHBp''@;'; put 'put ''KCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDcpLHhlKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''YS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoMikseGUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLGZlKCkseGUoIm5nSWYiLCIxPTEiIT09YS5xdWVyeVRleHQmJiFZ''@;'; put 'put ''cygxMCxBa3QpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiB1RHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzNiksR3QoMSwiaW1nIiwxMzcpLGRlKDIsImgzIiwxMzgpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgbGlicmFyeSAiKSxoZSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIGREdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDU1KX1mdW5jdGlvbiBoRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE0NSksR3QoMSwiaW1nIiwxNDYpLGRlKDIsInAiLDEzOCksT2UoMywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIGZE''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInAiLDE0OSksT2UoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksZGUoMiwiY2xyLWljb24iLDE1MCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5yZWxvYWRMaWJJbmZvKCkpfSks''@;'; put 'put ''aGUoKSxPZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLGhlKCl9fWZ1bmN0aW9uIHBEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiRU5HSU5FOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCks''@;'; put 'put ''SXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIGdEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiTElCSUQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1''@;'; put 'put ''KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBtRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE9lKDIsIkxJQk5BTUU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIHZEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiTElCU0laRToiKSxoZSgpLGRlKDMsInRkIiwxNTIpLE9lKDQpLFFzKDUs''@;'; put 'put ''ImNvbnZlcnRTaXplIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9EYyg1LDEsYS5saWJpbmZvWzBdLkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIGJEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiT1dO''@;'; put 'put ''RVJTOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIHlEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSks''@;'; put 'put ''T2UoMiwiUEFUSFM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBfRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRk''@;'; put 'put ''IiwxNTEpLE9lKDIsIlBFUk1TOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24gd0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIi''@;'; put 'put ''KSgxLCJ0ZCIsMTUxKSxPZSgyLCJTQ0hFTUFTOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlvbiBDRHQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE9lKDIsIlRBQkxFX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoiIiwiICIpfX1mdW5jdGlvbiBT''@;'; put 'put ''RHQoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJ0YWJsZSIpLG10KDIscER0LDUsMSwidHIiLDQyKSgzLGdEdCw1LDEsInRyIiw0MikoNCxtRHQsNSwxLCJ0ciIsNDIpKDUsdkR0LDYsMywidHIiLDQyKSg2LGJEdCw1LDEsInRyIiw0MikoNyx5RHQsNSwxLCJ0ciIsNDIpKDgsX0R0LDUsMSwi''@;'; put 'put ''dHIiLDQyKSg5LHdEdCw1LDEsInRyIiw0MikoMTAsQ0R0LDUsMSwidHIiLDQyKSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgyKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uRU5HSU5FKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5PV05FUlMpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5UQUJMRV9DTlQpfX1mdW5jdGlvbiBNRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE0''@;'; put 'put ''NyksbXQoMSxmRHQsNCwwLCJwIiwxNDgpKDIsU0R0LDExLDksIm5nLWNvbnRhaW5lciIsNDIpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLHhlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg+MCl9fWZ1bmN0aW9uIHhEdChj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImRpdiIsMTM5KSxHdCgyLCJzZWN0aW9uIiw5OSksZGUoMywiZGl2IiwxNDApKDQsInAiLDkxKSxPZSg1KSxoZSgpLGRlKDYsImNsci1pY29uIiwxMjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUo''@;'; put 'put ''MikucmVsb2FkTGliSW5mbygpKX0pLGhlKCkoKSxHdCg3LCJkaXYiLDExMiksaGUoKSxkZSg4LCJkaXYiLDE0MSksbXQoOSxkRHQsMSwwLCJjbHItc3Bpbm5lciIsMTQyKSxoZSgpLG10KDEwLGhEdCw0LDAsImRpdiIsMTQzKSgxMSxNRHQsMywyLCJkaXYiLDE0NCksdWkoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9TGUoMik7ZmUoNSksSXIoIiAiLGEubGliLCIgIiksZmUoNCkseGUoIm5nSWYiLG51bGw9PT1hLmxpYmluZm8pLGZlKCkseGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pLGZlKCkseGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiBFRHQoYyxsKXsxJmMmJihkZSgw''@;'; put 'put ''LCJoMyIsMTU2KSxPZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIiksaGUoKSl9ZnVuY3Rpb24gVER0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE1NiksT2UoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLGhlKCkpfWZ1bmN0aW9u''@;'; put 'put ''IEFEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTUzKSxHdCgxLCJjbHItaWNvbiIsMTU0KSxtdCgyLEVEdCwyLDAsImgzIiwxNTUpKDMsVER0LDIsMCwiaDMiLDE1NSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLHhlKCJuZ0lmIixhLm5vRGF0YSksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''YS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiBrRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE1NyksR3QoMSwiaG90LXRhYmxlIiwxNTgpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZz''@;'; put 'put ''ZXQiLDUwKSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgiY29weVBhc3RlIixhLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixhLmhvdFRhYmxlLmNvbnRleHRN''@;'; put 'put ''ZW51KSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGEuaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hla2VyKSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixhLmhvdFRh''@;'; put 'put ''YmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJyb3dIZWFkZXJzIixhLmhvdFRhYmxlLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsYS5ob3RUYWJsZS5yb3dIZWFkZXJXaWR0''@;'; put 'put ''aCkoInJvd0hlaWdodHMiLGEuaG90VGFibGUucm93SGVpZ2h0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIEREdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE1OSksT2UoMSksR3QoMiwiY29udGFjdC1saW5rIiksaGUoKSksMiZjKXtjb25zdCBhPUxl''@;'; put 'put ''KDIpO2ZlKCksSXIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBJRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkyKSxtdCgxLGNEdCwyNCwxMSwiZGl2Iiw5Myko''@;'; put 'put ''Mix1RHQsNCwwLCJkaXYiLDk0KSgzLHhEdCwxMiw0LCJuZy1jb250YWluZXIiLDQyKSg0LEFEdCw0LDIsImRpdiIsOTUpKDUsa0R0LDIsMTksImRpdiIsOTYpLGRlKDYsImRpdiIpLG10KDcsRER0LDMsMSwicCIsOTcpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''YS50YWJsZSksZmUoKSx4ZSgibmdJZiIsIShhLmxpYnx8YS50YWJsZXx8YS5ub0RhdGFSZXFFcnJ8fGEubm9EYXRhKSksZmUoKSx4ZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksZmUoKSx4ZSgibmdJZiIsYS5ub0RhdGF8fGEubm9EYXRhUmVx''@;'; put 'put ''RXJyKSxmZSgpLHhlKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmYS50YWJsZSksZmUoMikseGUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5JiZhLmhvdFRhYmxlLmRhdGEmJmEuaG90VGFibGUuZGF0YS5sZW5n''@;'; put 'put ''dGg+YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWxldCB6Tj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixyZSxjZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgs''@;'; put 'put ''dGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRlPXYsdGhpcy5ldmVudFNlcnZpY2U9TSx0aGlzLmxvZ2dlclNlcnZpY2U9RCx0aGlzLmhlbHBlclNlcnZpY2U9Wix0aGlzLmxvY2F0aW9uPXJlLHRoaXMuY2RmPWNlLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZmQsdGhpcy5saWJyYXJpZXNQ''@;'; put 'put ''YWdpbmc9ITEsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzVHJlZUV4cGFuZGVkPSExLHRoaXMubGliaW5mbz1udWxsLHRoaXMudGFibGV1cmk9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckNvbHM9W10sdGhpcy5u''@;'; put 'put ''dWxsVmFyaWFibGVzPSExLHRoaXMuYWJvcnRBY3RpdmU9ITEsdGhpcy51cmxGaWx0ZXJQaz1udWxsLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMud2ViUXVlcnlUZXh0PSIiLHRoaXMucXVlcnlFcnI9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSExLHRoaXMubG9h''@;'; put 'put ''ZGluZ1RhYmxlVmlldz0hMSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5ub0RhdGFSZXFFcnI9ITEsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMub3BlbkRvd25sb2FkPSExLHRoaXMud2ViUXVlcnk9ITEsdGhpcy53ZWJRdWVy''@;'; put 'put ''eVRhYj0hMSx0aGlzLmRvd25sb2FkRm9ybWF0PSJDU1YiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRoaXMuc2VhcmNoTG9hZGluZz0hMSx0aGlzLnNlYXJjaE51bWVyaWM9ITEsdGhpcy5udW1iZXJPZlJvd3M9bnVsbCx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLiRkYXRh''@;'; put 'put ''Rm9ybWF0cz1udWxsLHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtk''@;'; put 'put ''YXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLHJvd0hlYWRlcnM6YmU9PiIgIixhZnRlckdldENvbEhl''@;'; put 'put ''YWRlcjooYmUsRWUsQmUpPT57RWUuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjIwLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVy''@;'; put 'put ''c19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1l''@;'; put 'put ''OiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihiZSxFZSxCZSxxZSxydCxwdCk9Pntjb25zdCBkdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IEp0LHZuPSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBDbj10''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLHRuPUNuP0NuWzBdWzFdOi0xLE1uPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcCh0bik7SnQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbTW5dLEp0JiYodm49YExBQkVMOiAke0p0Py5sYWJlbH08YnI+VFlQRTogJHtKdD8udHlw''@;'; put 'put ''ZX08YnI+TEVOR1RIOiAke0p0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtKdD8uZm9ybWF0fWApfXJldHVybiBkdC5pbm5lckhUTUw9dm4sZHR9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy52aWV3Ym94T3Blbj0hMSx0aGlz''@;'; put 'put ''LmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgWW0sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1uZ09uSW5pdCgpeyIiIT09S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb24mJjA9PT1PYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyku''@;'; put 'put ''bGVuZ3RoJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb25dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSx2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0mJihLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0i''@;'; put 'put ''dmlldy9kYXRhIiksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXk9YX0pfW5ld1ZpZXdib3goKXt0aGlzLnZpZXdib3hPcGVuPSEwfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZp''@;'; put 'put ''cnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1zZWFyY2hUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLHY9cGFyc2VJbnQoZC5y''@;'; put 'put ''b3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpfHwwO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGgsZC5zZWFyY2hOdW1lcmljLGYsdikudGhlbihNPT57TS5zYXNwYXJhbXN8fE0udmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFG''@;'; put 'put ''b3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9TS52ZXJzaW9uc3x8W10sZC5zZXREU05vdGUoKSxkLm51bWJlck9mUm93cz1NLnNhc3BhcmFtc1swXS5OT0JTLGQucXVlcnlUZXh0PU0uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGQuaGVhZGVyUGtzPU0u''@;'; put 'put ''c2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoP2Qubm9EYXRhPSEwOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSxkLnNldHVwSG90KCkpKTpkLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVy''@;'; put 'put ''cm9yKE0pfSksZC5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZpZXdEYXRhKHRoaXMudXJsRmlsdGVyUGt8fDApfXJlbG9hZExpYkluZm8oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxpYmluZm89bnVsbCxhLnNhc1N0b3JlU2Vydmlj''@;'; put 'put ''ZS5yZWZyZXNoTGliSW5mbyhhLmxpYikudGhlbihmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoKXthLmxpYmluZm89aC5saWJpbmZvLEtuLnZpZXdlci5saWJpbmZvPWEubGliaW5mbztjb25zdCBmPWEubGlicmFyaWVzLmZpbmQodj0+di5MSUJSQVJZUkVGPT09YS5saWIpO2YmJihm''@;'; put 'put ''LmxpYmluZm89YS5saWJpbmZvKX0pO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCksbnVsbD09PWEubGliaW5mbyYmKGEubGliaW5mbz1bXSl9KX0pKCl9ZmlsdGVyRm4oYSl7dGhpcy5saWJy''@;'; put 'put ''YXJpZXM9dGhpcy5saWJyYXJpZXMuZmlsdGVyKGg9Pi0xIT09aC5MSUJSQVJZTkFNRS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvY2FsZUxvd2VyQ2FzZSgpKSl9ZG93bmxvYWREYXRhKCl7bGV0IGE9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsZD10aGlzLnNhc2pzQ29uZmlnLmFw''@;'; put 'put ''cExvYztjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IEQsZj0iJnR5cGU9Iit0aGlzLmRvd25sb2FkRm9ybWF0LHY9IiZ0YWJsZT0iK3RoaXMudGFibGVUaXRsZSxNPSJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0''@;'; put 'put ''bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIjtEPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCksd2luZG93Lm9wZW4oYStoKyIvP19wcm9ncmFt''@;'; put 'put ''PSIrZCsiL3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhIitmK3YrTSsiJmZpbHRlcj0iK0QpLHRoaXMub3BlbkRvd25sb2FkPSExfWRvd25sb2FkRERMKCl7bGV0IGE9dGhpcy5saWIsZD10aGlzLnRhYmxlLGg9dGhpcy5kb3dubG9hZEZvcm1hdC5yZXBsYWNlKCJfRERMIiwiIiksZj10aGlz''@;'; put 'put ''LnNhc2pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IE09dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihmK00rIi8/X3Byb2dyYW09Iit2KyIvc2VydmljZXMvcHVibGljL2dldGRkbCIrYCZkcz0ke2R9JmxpYnJl''@;'; put 'put ''Zj0ke2F9JmZsYXZvdXI9JHtofSR7IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIifWApLHRoaXMub3BlbkRvd25sb2FkPSExfW9uQ2xpQ29tbWFuZEZvY3VzKGEpe2EucHJldmVu''@;'; put 'put ''dERlZmF1bHQoKSxhLnRhcmdldC5zZWxlY3QoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWJUYWIpfXRhYmxlRWRpdEV4aXN0cygpe2xldCBhPXt9O2E9S24uZWRpdG9yLmxpYnNBbmRUYWJsZXM7bGV0IGQ9dGhpcy5saWJUYWIuc3Bs''@;'; put 'put ''aXQoIi4iKVsxXSxoPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMF07cmV0dXJuISFhW2hdJiZhW2hdLmluY2x1ZGVzKGQpfWdvVG9MaW5lYWdlKCl7bGV0IGQ9YC92aWV3L2xpbmVhZ2UvJHt0aGlzLnRhYmxldXJpLnNwbGl0KCJcXCIpWzFdfS9SRVZFUlNFYDt0aGlzLnJvdXRlci5uYXZpZ2F0''@;'; put 'put ''ZUJ5VXJsKGQpfXNob3dXZWJRdWVyeSgpe2xldCBhO3RoaXMud2ViUXVlcnk9ITAsYT10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpO2xldCBkPXdpbmRvdy5sb2NhdGlv''@;'; put 'put ''bi5wb3J0Lmxlbmd0aD4wPyI6Iit3aW5kb3cubG9jYXRpb24ucG9ydDoiIjtjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IHY9YCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9JHtkfS8ke2h9Lz9fcHJv''@;'; put 'put ''Z3JhbT0ke3RoaXMuc2FzanNDb25maWcuYXBwTG9jfS9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSZ0eXBlPVdFQiR7dGhpcy53ZWJRdWVyeVRhYj8iVEFCIjoiQ1NWIn0mdGFibGU9JHt0aGlzLnRhYmxlVGl0bGV9JHsiJmZpbHRlcj0iK2F9YDt0aGlzLndlYlF1ZXJ5VGV4dD12LnJlcGxh''@;'; put 'put ''Y2UoLyAvZ2ltLCIlMjAiKX1jb3B5VG9DbGlwKCl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTthLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsYS5zdHlsZS5sZWZ0PSIwIixhLnN0eWxlLnRvcD0iMCIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnZhbHVlPXRoaXMud2Vi''@;'; put 'put ''UXVlcnlUZXh0LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5mb2N1cygpLGEuc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9k''@;'; put 'put ''YXRhIil9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWNoZWNrRXhwYW5kKGEpe31jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZUkVGIT09ZC5MSUJSQVJZUkVGJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9y''@;'; put 'put ''ZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJpZXMsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29s''@;'; put 'put ''bGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeUV4cGFuZGVkQ2hhbmdlKGEsZCl7YSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7''@;'; put 'put ''dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoZC50YWJsZXM/ZC5leHBhbmRlZD0hIWh8fCFkLmV4cGFuZGVkOnlpZWxkIGYuc2VsZWN0VGFibGUoYSwhMSxkKSxkLmV4cGFuZGVkKXtmLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IHY9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihg''@;'; put 'put ''I3NlYXJjaF8ke2QuTElCUkFSWVJFRn1gKTtmLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNlYXJjaElucHV0XSIsdiksdiYmdi5mb2N1cygpLGQmJmQubGliaW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3''@;'; put 'put ''L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxl''@;'; put 'put ''JiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSks''@;'; put 'put ''dGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5sb2FkaW5nVGFibGVzPSEwLGYudGFibGU9ITEsZi50YWJsZURpc2FibGU9ITAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hP0tuLnZpZXdlci50YWJsZXNTZXQm''@;'; put 'put ''JmQ/KGYuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITEsZi50YWJsZXM9S24udmlld2VyLnRhYmxlcyxmLmxpYmluZm89S24udmlld2VyLmxpYmluZm8pOihmLmxpYmluZm89bnVsbCx5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4odj0+e2YuYWJvcnRB''@;'; put 'put ''Y3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITE7bGV0IE09di5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQuTUVNTkFNRX0pO2YubGliaW5mbz12LmxpYmluZm98fFtdLGYudGFibGVzPU0saCYmKGgudGFibGVzPU0saC5saWJpbmZvPWYubGliaW5mbyksS24udmlld2VyLmxpYnJh''@;'; put 'put ''cmllcz1mLmxpYnJhcmllcyxLbi52aWV3ZXIubGlicmFyeT1mLmxpYixLbi52aWV3ZXIudGFibGVzPWYudGFibGVzLEtuLnZpZXdlci5saWJpbmZvPWYubGliaW5mbyxLbi52aWV3ZXIudGFibGVzU2V0PSEwfSkuY2F0Y2godj0+e2YubG9nZ2VyU2VydmljZS5lcnJvcih2KSxmLmFib3J0QWN0''@;'; put 'put ''aXZlPSEwLGYubm9EYXRhPSEwLGYudGFibGVUaXRsZT0iIixmLnRhYmxlRGlzYWJsZT0hMH0pKTpmLnRhYmxlRGlzYWJsZT0hMCxLbi52aWV3ZXIubGlicmFyeT1mLmxpYixkfHxmLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSFoLmV4cGFuZGVk''@;'; put 'put ''fSkoKX1zZWxlY3RMaWJUYWJsZShhLGQpeyJQbGVhc2Ugc2VsZWN0IHRhYmxlIiE9PWE/KHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLmxpYlRhYj10aGlzLmxpYisiLiIrdGhpcy50YWJsZSk6dGhpcy5hY3Rpb25EaXNhYmxlPSEwLEtuLnZpZXdlci50YWJsZT1hLGR8fHRoaXMuY2xlYXJH''@;'; put 'put ''bG9iYWxzRmlsdGVyKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmxpYlRhYil9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7S24udmlld2VyLmZpbHRlci5saWJkcz0iIixLbi52aWV3ZXIuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEtuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixLbi52''@;'; put 'put ''aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sS24udmlld2VyLmZpbHRlci5jb2xzPVtdLEtuLnZpZXdlci5maWx0ZXIudmFscz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hIXRoaXMubGliVGFiJiZhKyIuIitkPT09dGhpcy5saWJUYWJ9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24udmlld2VyLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJh''@;'; put 'put ''cmllc1NlYXJjaH1saWJyYXJ5UmVzZXRGaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UucmVzZXRBcnJheUZpbHRlcih0aGlzLmxpYnJhcmllcyl9dmlld0RhdGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg7aWYoZC5sb2FkaW5nVGFibGVWaWV3PSEwLHR5cGVv''@;'; put 'put ''ZiBkLmxpYkRhdGFzZXQ+InUiKWg9ZC5saWIrIi4iK2QudGFibGU7ZWxzZSBpZih0eXBlb2YgZC5saWI+InUiJiZ0eXBlb2YgZC50YWJsZT4idSIpe2xldCBNPVtdO2lmKE09ZC5saWJEYXRhc2V0LnNwbGl0KCIuIiksS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5saWJyYXJpZXM9S24udmlld2Vy''@;'; put 'put ''LmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oRD0+e2QubGlicmFyaWVzPUQuc2FzbGlic30pLmNhdGNoKEQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoRCl9KSxkLmxpYj1NWzBdLEtuLnZpZXdlci5zdGFydHVwU2V0KWQudGFibGVzPUtuLnZpZXdl''@;'; put 'put ''ci50YWJsZXM7ZWxzZXtsZXQgRD1kLmxpYnJhcmllcy5maW5kKFo9PlouTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihaPT57ZC50YWJsZXM9Wi5tcHRhYmxlcy5tYXAo''@;'; put 'put ''ZnVuY3Rpb24ocmUpe3JldHVybiByZS5NRU1OQU1FfSksRC50YWJsZXM9ZC50YWJsZXMsS24udmlld2VyLmxpYnJhcmllcz1kLmxpYnJhcmllcyxLbi52aWV3ZXIudGFibGVzPWQudGFibGVzLEtuLnZpZXdlci5zdGFydHVwU2V0PSEwfSkuY2F0Y2goWj0+e2QubG9nZ2VyU2VydmljZS5lcnJv''@;'; put 'put ''cihaKX0pfWQudGFibGU9TVsxXSxkLnRhYmxlRmxhZz0hMSxoPWQubGliRGF0YXNldCxkLmxpYlRhYj1ofWVsc2UgS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5saWJyYXJpZXM9S24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oTT0+e2Qu''@;'; put 'put ''bGlicmFyaWVzPU0uc2FzbGlic30pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSl9KSx0eXBlb2YgZC50YWJsZTwidSImJihLbi52aWV3ZXIuc3RhcnR1cFNldD9kLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5s''@;'; put 'put ''aWIpLnRoZW4oTT0+e2QudGFibGVzPU0ubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEQpe3JldHVybiBELk1FTU5BTUV9KX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSksZC5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNl''@;'; put 'put ''cnZlIn0pfSksZC50YWJsZUZsYWc9ITEsaD1kLmxpYisiLiIrZC50YWJsZSxkLnRhYmxlVGl0bGU9aCxkLmxpYlRhYj1oKTtkLnJvdXRlci51cmwuc3BsaXQoIi8iKS5sZW5ndGg+MyYmaCYmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGgsYSkudGhlbihNPT57aWYoTS5xdWVy''@;'; put 'put ''eS5sZW5ndGg+MCYmInZpZXciPT09S24ucm9vdFBhcmFtJiYwPT09S24udmlld2VyLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEtuLnZpZXdlci5maWx0ZXIucXVlcnk9ZC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNLnF1ZXJ5KSxLbi52aWV3ZXIuZmlsdGVyLmxpYmRzPWQucm91dGUuc25h''@;'; put 'put ''cHNob3QucGFyYW1zLmxpYk1lbSxkLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJ2aWV3ZXIiLE0uY29scykpLGQuYWJvcnRBY3RpdmU9ITEsZC5maWx0ZXJDb2xzPU0uY29scyxCZWUoZC5maWx0ZXJDb2xzLFtdLE0uJHZpZXdkYXRhKSxkLm51bWJlck9m''@;'; put 'put ''Um93cz1NLnNhc3BhcmFtc1swXS5OT0JTLGQuaGVhZGVyUGtzPU0uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLCJTQVM5Ij09PWQuc2FzanNDb25maWcuc2VydmVyVHlwZSl7bGV0IGJlPU0uc2FzcGFyYW1zWzBdLlRBQkxFVVJJO2JlJiZiZS5sZW5ndGg+MCYmKGQudGFibGV1''@;'; put 'put ''cmk9YmUpfWQuaG90VGFibGUuZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9TS52ZXJzaW9uc3x8W10sZC5zZXREU05vdGUoKSxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVDtsZXQgRD1b''@;'; put 'put ''XSxaPVtdO2ZvcihsZXQgYmUgaW4gTS52aWV3ZGF0YVswXSliZSYmWi5wdXNoKGJlKTtmb3IobGV0IGJlPTA7YmU8Wi5sZW5ndGg7YmUrKylELnB1c2goe2RhdGE6WltiZV19KTtkLmhvdFRhYmxlLmNvbEhlYWRlcnM9WixkLmhvdFRhYmxlLmNvbHVtbnM9RCxkLmhvdFRhYmxlLmNlbGxzPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX0sZC50YWJsZUZsYWc9ITE7bGV0IGNlPVtdO2NlPWguc3BsaXQoIi4iKSxkLmxpYj1jZVswXSxkLnRhYmxlPWNlWzFdLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoPyhkLm5vRGF0YT0hMCxkLnRhYmxlRmxhZz0hMCk6KGQubm9EYXRhPSEx''@;'; put 'put ''LGQudGFibGVGbGFnPSExKSxkLm5vRGF0YVJlcUVycj0hMX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSksZC5hYm9ydEFjdGl2ZT0hMCxkLm5vRGF0YVJlcUVycj0hMH0pKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmgmJmQucm91dGVyLm5hdmlnYXRlKDAh''@;'; put 'put ''PT1hP1siL3ZpZXcvZGF0YS8iK2grIi8iK2FdOlsiL3ZpZXcvZGF0YS8iK2hdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtsZXQgZj1kLnRhYmxlLHY9ZC5saWJyYXJpZXMuZmluZChNPT5NLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''O3Y/KEtuLnZpZXdlci5saWJyYXJpZXMubGVuZ3RoPjAmJihkLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzLGQubGlicmFyaWVzU2VhcmNoPUtuLnZpZXdlci5saWJyYXJpZXNTZWFyY2gpLGQubGlicmFyeU9uQ2xpY2soZC5saWIsdiwhMCkpOmQubGliaW5mbz1bXSxkLnRhYmxlPWZ8''@;'; put 'put ''fGQudGFibGUsZC5saWJyYXJpZXMmJmQuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGQubGlicmFyaWVzKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmQuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGQubG9hZGluZ1RhYmxlVmlldz0hMSwhZC5ub0RhdGEmJiFk''@;'; put 'put ''Lm5vRGF0YVJlcUVyciYmaCYmZC5zZXR1cEhvdCgpLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyfHxzZXRUaW1lb3V0KCgpPT57bGV0IE09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7TSYmKE0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixEPT57c2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e2xldCBaPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7WiYmWi5jbGljaygpfSwxMDApfSksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITApfSwyZTMpfSkoKX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8y''@;'; put 'put ''MDA6YX1vcGVuUWIoKXt0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWIrIi4iK3RoaXMudGFibGUsdGhpcy5maWx0ZXJDb2xzKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4g''@;'; put 'put ''ZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRz''@;'; put 'put ''Lmxlbmd0aDwxKXJldHVybiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKEtuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxLbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PVtdLEtuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIith''@;'; put 'put ''LmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kyspe2NvbnN0IE09Zlt2XS5lbGVtZW50cztkPU0uZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBudWxsPT09RC52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goTSl9fWlm''@;'; put 'put ''KGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goTT0+e2NvbnN0IEQ9e2ZpbHRl''@;'; put 'put ''ckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChaPT57RC5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShaKSl9KSxELmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEQp''@;'; put 'put ''KX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5VGV4dD1NLnJlc3VsdFswXS5GSUxURVJfVEVYVDtsZXQgRD1NLnJlc3VsdFswXS5G''@;'; put 'put ''SUxURVJfUks7YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkcysiLyIrRF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLGEudmlld0RhdGEoRCksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksYS5zdWJtaXRM''@;'; put 'put ''b2FkaW5nPSExfX0pKCl9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXNl''@;'; put 'put ''dERTTm90ZSgpe2NvbnN0IGE9dGhpcy5kc21ldGEuZmluZChmPT4iTk9URVMiPT09Zi5OQU1FKSxkPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX0xPTkdERVNDIj09PWYuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9TSE9SVERFU0MiPT09Zi5OQU1FKTt0aGlzLmRzTm90ZT1hJiZh''@;'; put 'put ''LlZBTFVFP2EuVkFMVUU6ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRToiIn1zZXR1cEhvdCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5sb2FkaW5nVGFibGVWaWV3JiZ0aGlzLmxpYkRhdGFzZXQmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVSZWdpc3RlcmVy''@;'; put 'put ''LmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihhLGQpe3JldHVybiBhPjUwMD81MDA6YX0sYWZ0ZXJHZXRD''@;'; put 'put ''b2xIZWFkZXI6KGEsZCk9Pntjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChhKTtoJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKGgpPi0xJiZkLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLGQuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFy''@;'; put 'put ''a1RhYmxlSGVhZGVyQ2xhc3MpfX0pKX0sMWUzKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN3aXRjaEZsYWc9ITAsYS50YWJsZVRpdGxlPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbXx8MCxhLnVybEZpbHRlclBrPXBhcnNl''@;'; put 'put ''SW50KGEucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkfHwiMCIpO2xldCBoPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTthLmxpYkRhdGFzZXQ9aCxoLmluY2x1ZGVzKCIuIil8fChhLmxpYj1oKSx5aWVsZCBhLnZpZXdEYXRhKGEudXJsRmlsdGVyUGspLGEubm9EYXRhP3Nl''@;'; put 'put ''dFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMH0sMTIwMCk6c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSExfSwxMjAwKX0pKCl9bG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSExLGEubGlicmFyaWVzTG9h''@;'; put 'put ''ZGluZz0hMCxLbi52aWV3ZXIuc3RhcnR1cFNldD9zZXRUaW1lb3V0KCgpPT57YS5saWJyYXJpZXM9S24udmlld2VyLmxpYnJhcmllcyxhLmxpYnJhcmllc1NlYXJjaD1Lbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoLGEubGliPUtuLnZpZXdlci5saWJyYXJ5LGEubGlicmFyaWVzVHJlZUV4cGFu''@;'; put 'put ''ZGVkPSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9LDEwMCk6KGEubm9EYXRhUmVxRXJyPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57YS5saWJyYXJpZXM9ZC5zYXNsaWJz''@;'; put 'put ''LEtuLnZpZXdlci5saWJyYXJpZXM9YS5saWJyYXJpZXMsS24udmlld2VyLnN0YXJ0dXBTZXQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCksYS5s''@;'; put 'put ''aWJyYXJpZXNMb2FkaW5nPSExLGEubm9EYXRhUmVxRXJyPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5ob3RUYWJsZS5kYXRhLmxlbmd0aD4wJiYoYS50YWJsZUZsYWc9ITApLGEuX3F1''@;'; put 'put ''ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57YS53aGVyZVN0cmluZz1kLnN0cmluZyxhLmNsYXVzZXM9ZC5vYmosYS5saWJkcz1kLmxpYmRzfSksdHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSI/YS5sb2FkV2l0aFBhcmFtZXRlcnMoKTph''@;'; put 'put ''LmxvYWRXaXRob3V0UGFyYW1ldGVycygpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UoVWgpLEdlKHRsKSxHZShMcyksR2UoQ3UpLEdlKHZjKSxHZShTZCksR2UoR3UpLEdlKGZoKSxHZShFcykpfX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKFRrdCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29u''@;'; put 'put ''dGFpbmVyIl0sZGVjbHM6OTUsdmFyczozMCxjb25zdHM6W1siY2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxb''@;'; put 'put ''ImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFz''@;'; put 'put ''cyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUi''@;'; put 'put ''LCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiY2xyLWNvbC1tZC02Il0sWzEsImRvd25sb2FkLXNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsidmFsdWUiLCJDU1YiXSxb''@;'; put 'put ''InZhbHVlIiwiU0FTIl0sWyJ2YWx1ZSIsIlBHU1FMX0RETCJdLFsidmFsdWUiLCJTQVNfRERMIl0sWyJ2YWx1ZSIsIlRTUUxfRERMIl0sWyJ2YWx1ZSIsIkVYQ0VMIl0sWyJ2YWx1ZSIsIk1BUktET1dOIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImlkIl0sWzEsIm1vZGFsLWJvZHkiLCJ3ZWItcXVlcnkiXSxbMSwicm93Il0sWzEsImNsci1jb2wtbGctMTIiLCJjbHIt''@;'; put 'put ''Y29sLW1kLTEyIiwiY2xyLWNvbC1zbS0xMiIsImNsci1jb2wteHMtMTIiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJidG4tZ3JvdXAiXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0s''@;'; put 'put ''WyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsImNhcmQtYmxvY2siLCJ3ZWItcXVlcnktd3JhcHBlciIsIndvcmQtYnJlYWstYWxsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlwZSIsInRl''@;'; put 'put ''eHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLDMsImZvY3VzIiwidmFsdWUiXSxbMSwiY2FyZC1mb290ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIiwibmd4Q2xpcGJvYXJkIl0sWyJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwiZmlsdGVyLW1vZGFs''@;'; put 'put ''IiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLW91dGxpbmUiLCJidG4tc20iLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFs''@;'; put 'put ''LXRpdGxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIG5vLWJv''@;'; put 'put ''cmRlcnMgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsNCwibmdJZiJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMSwibXktMTAtbXgtYXV0byIsInRl''@;'; put 'put ''eHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJv''@;'; put 'put ''ZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFu''@;'; put 'put ''ZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2si''@;'; put 'put ''XSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJpZCIsIm5nTW9kZWwiXSxbNCwi''@;'; put 'put ''bmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtbGluayIsMywiZGMtbG9ja2VkLWNvbnRyb2wiLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJd''@;'; put 'put ''LFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIs''@;'; put 'put ''NCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJp''@;'; put 'put ''YS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ryb3AiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9u''@;'; put 'put ''Il0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwiaGVhZGVyLXJvdyBjbHItcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIG5vRGF0YSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItZmxleC0xIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJoZWFkZXIt''@;'; put 'put ''cm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJmb3JtLWJsb2NrIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiLCJzdyIsImNsci1jb2wtbWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxl''@;'; put 'put ''eCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYi''@;'; put 'put ''XSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwi''@;'; put 'put ''Y2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsImNsci1mbGV4LWNvbHVtbiIsImQtZmxleCIsImNsci1mbGV4LXNtLXJvdyIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJk''@;'; put 'put ''LWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJWaWV3IGRhdGFzZXQgbWV0YSBpbmZvIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyBtci01Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsNCwibmdJZiJdLFsxLCJvcHRpb25zLWNvbCIsImNsci1jb2wtbWQiXSxbImNsYXNzIiwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xv''@;'; put 'put ''c2VNZW51T25JdGVtQ2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyIs''@;'; put 'put ''Im1yLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVz''@;'; put 'put ''aC10YWJsZSIsMywiY2xpY2siXSxbMSwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiZmlsdGVyU2lkZSJdLFsic2hhcGUi''@;'; put 'put ''LCJjb2ciLCJzaXplIiwiMTUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiXSxbImNsckRyb3Bkb3du''@;'; put 'put ''SXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImRvd25sb2FkLWNsb3VkIl0sWyJzaGFwZSIsInBlbmNpbCJdLFsic2hhcGUiLCJzd2l0Y2giXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxb''@;'; put 'put ''MSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LWxpYnJhcnktcG5nIiwiYWx0Iiwic2VsZWN0IGEgbGlicmFyeSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNv''@;'; put 'put ''biJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImJvcmRlci1ib3R0b20tZGl2aWRlciIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUt''@;'; put 'put ''Y29sIiwiY2xyLWNvbC1hdXRvIiwibXQtMTUiLCJtYi0xNSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxp''@;'; put 'put ''YmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxl''@;'; put 'put ''LXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3LTEwMCJdLFsic2hh''@;'; put 'put ''cGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsiY2xh''@;'; put 'put ''c3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwz''@;'; put 'put ''LCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMi''@;'; put 'put ''LCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQs''@;'; put 'put ''aCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDUpLEh0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksbXQoMSxra3QsMiwwLCJkaXYiLDYpLGRlKDIsImNsci10cmVlIiksbXQoMyxS''@;'; put 'put ''a3QsNiwzLCJjbHItdHJlZS1ub2RlIiw3KSg0LFprdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSxtdCg1LFdrdCwzLDAsImRpdiIsOSksaGUoKSxkZSg2LCJkaXYiLDEwKSxtdCg3LFlrdCwxNCwwLCJkaXYiLDExKSg4LEdrdCwxLDAsImRpdiIsMTIpLGRlKDksImNsci1tb2RhbCIsMTMp''@;'; put 'put ''LGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLm9wZW5Eb3dubG9hZCxNKXx8KGgub3BlbkRvd25sb2FkPU0pLEN0KE0pfSksZGUoMTAsImgzIiwxNCksT2UoMTEsIkRvd25sb2FkIiksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYp''@;'; put 'put ''KDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTcpKDE1LCJsYWJlbCIpLE9lKDE2LCJQbGVhc2UgY2hvb3NlIGRvd25sb2FkIGZvcm1hdCIpLGhlKCksZGUoMTcsInNlbGVjdCIsMTgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kb3dubG9hZEZv''@;'; put 'put ''cm1hdCxNKXx8KGguZG93bmxvYWRGb3JtYXQ9TSksQ3QoTSl9KSxkZSgxOCwib3B0aW9uIiwxOSksT2UoMTksIkNTViIpLGhlKCksZGUoMjAsIm9wdGlvbiIsMjApLE9lKDIxLCJEYXRhbGluZXMgKGNhcmRzIGZpbGUpIiksaGUoKSxkZSgyMiwib3B0aW9uIiwyMSksT2UoMjMsIkRETCAoUEdT''@;'; put 'put ''UUwgRmxhdm91cikiKSxoZSgpLGRlKDI0LCJvcHRpb24iLDIyKSxPZSgyNSwiRERMIChTQVMgRmxhdm91cikiKSxoZSgpLGRlKDI2LCJvcHRpb24iLDIzKSxPZSgyNywiRERMIChUU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyOCwib3B0aW9uIiwyNCksT2UoMjksIkV4Y2VsICgueGxzeCkiKSxo''@;'; put 'put ''ZSgpLGRlKDMwLCJvcHRpb24iLDI1KSxPZSgzMSwiTWFya2Rvd24gKC5tZCkiKSxoZSgpKCkoKSgpKCksZGUoMzIsImRpdiIsMjYpKDMzLCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgub3BlbkRvd25sb2FkPSExKX0pLE9lKDM0LCIgQ2FuY2Vs''@;'; put 'put ''ICIpLGhlKCksZGUoMzUsImJ1dHRvbiIsMjgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5kb3dubG9hZEZvcm1hdC5pbmNsdWRlcygiRERMIik/aC5kb3dubG9hZERETCgpOmguZG93bmxvYWREYXRhKCkpfSksT2UoMzYsIiBPayAiKSxoZSgpKCkoKSxkZSgzNywi''@;'; put 'put ''Y2xyLW1vZGFsIiwxMyksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgud2ViUXVlcnksTSl8fChoLndlYlF1ZXJ5PU0pLEN0KE0pfSksZGUoMzgsImgzIiwxNCksT2UoMzksIiBXZWIgUXVlcnkgVVJMICIpLGhlKCksZGUoNDAsImRpdiIsMjkp''@;'; put 'put ''KDQxLCJkaXYiLDMwKSg0MiwiZGl2IiwzMSkoNDMsImRpdiIsMzIpKDQ0LCJkaXYiLDMzKSg0NSwic3BhbiIpLE9lKDQ2LCJDb3B5IHRoZSBiZWxvdyBpbnRvIHlvdXIgcHJlZmVycmVkIGNsaWVudCB0b29sOiIpLGhlKCksZGUoNDcsImRpdiIsMzQpKDQ4LCJkaXYiLDM1KSxIdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITAsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg0OSwiaW5wdXQiLDM2KSxkZSg1MCwibGFiZWwiKSxPZSg1MSwiVEFCIiksaGUoKSgpLGRlKDUyLCJkaXYiLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGYpLGgud2ViUXVlcnlUYWI9ITEsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg1MywiaW5wdXQiLDM2KSxkZSg1NCwibGFiZWwiKSxPZSg1NSwiQ1NWIiksaGUoKSgpKCkoKSxkZSg1NiwiZGl2IiwzNykoNTcsInRleHRhcmVhIiwzOCwwKSxIdCgiZm9jdXMiLGZ1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biB3dChmKSxDdChoLm9uQ2xpQ29tbWFuZEZvY3VzKE0pKX0pLE9lKDU5LCIgICAgICAgICAgICAgICIpLGhlKCkoKSxkZSg2MCwiZGl2IiwzOSkoNjEsImJ1dHRvbiIsNDApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb3B5VG9DbGlwKCkpfSksT2UoNjIsIiBj''@;'; put 'put ''b3B5IHRvIGNsaXBib2FyZCAiKSxoZSgpKCkoKSgpKCkoKSxkZSg2MywiZGl2IiwyNikoNjQsImJ1dHRvbiIsMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC53ZWJRdWVyeT0hMSl9KSxPZSg2NSwiIGNsb3NlICIpLGhlKCkoKSgpLGRlKDY2LCJjbHItbW9kYWwi''@;'; put 'put ''LDQxKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDY3LCJoMyIsMTQpLE9lKDY4LCIgRmlsdGVyIGZvciB0YWJsZToiKSxkZSg2OSwic3BhbiIpLE9lKDcwKSxoZSgpKCksZGUo''@;'; put 'put ''NzEsImRpdiIsMTUpLG10KDcyLCRrdCwyLDAsImFwcC1xdWVyeSIsNDIpLGhlKCksZGUoNzMsImRpdiIsMjYpKDc0LCJidXR0b24iLDQzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucmVzZXRGaWx0ZXIoKSl9KSxPZSg3NSwiIHJlc2V0IGZpbHRlciAiKSxoZSgp''@;'; put 'put ''LGRlKDc2LCJidXR0b24iLDQ0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZmlsdGVyPSExLEN0KGgucmVtb3ZlUXVlcnkoKSl9KSxPZSg3NywiIENhbmNlbCAiKSxoZSgpLGRlKDc4LCJidXR0b24iLDQ1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYp''@;'; put 'put ''LEN0KGguc2VuZENsYXVzZSgpKX0pLE9lKDc5LCIgT2sgIiksaGUoKSgpKCksZGUoODAsImNsci1tb2RhbCIsNDYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0pLGRlKDgxLCJo''@;'; put 'put ''MyIsNDcpLE9lKDgyLCJFcnJvciIpLGhlKCksZGUoODMsImRpdiIsMTUpKDg0LCJwIiksT2UoODUpLGhlKCkoKSxkZSg4NiwiZGl2IiwyNikoODcsImJ1dHRvbiIsNDgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxPZSg4OCwiIENhbmNl''@;'; put 'put ''bCAiKSxoZSgpLGRlKDg5LCJidXR0b24iLDQ5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksT2UoOTAsIiBPayAiKSxoZSgpKCkoKSxtdCg5MSxLa3QsNiwwLCJkaXYiLDUwKSg5MixJRHQsOCw2LCJkaXYiLDUxKSxoZSgpLGRlKDkzLCJh''@;'; put 'put ''cHAtZGF0YXNldC1pbmZvIiw1MiksZ2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEh0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5m''@;'; put 'put ''b01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDk0LCJhcHAtdmlld2JveGVzIiw1MyksZ2koInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudmlld2JveE9wZW4sTSl8fChoLnZpZXdib3hPcGVuPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2Nv''@;'; put 'put ''bnN0IGY9aGEoNTgpO2ZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzTG9hZGluZyksZmUoMikseGUoIm5nSWYiLGgubGlicmFyaWVzKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmxpYnJhcmllcyksZmUoKSx4ZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLm51bGxW''@;'; put 'put ''YXJpYWJsZXMpLGZlKCkseGUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Eb3dubG9hZCkseGUoImNsck1vZGFsU2l6ZSIsIm1kIiksZmUoOCkscGkoIm5nTW9kZWwiLGguZG93bmxvYWRGb3JtYXQpLGZlKDE4KSx4ZSgiaWQiLGgudGFibGVU''@;'; put 'put ''aXRsZSksZmUoMikscGkoImNsck1vZGFsT3BlbiIsaC53ZWJRdWVyeSkseGUoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMTIpLHhlKCJjaGVja2VkIixoLndlYlF1ZXJ5VGFiKSxmZSg0KSx4ZSgiY2hlY2tlZCIsIWgud2ViUXVlcnlUYWIpLGZlKDQpLHhlKCJ2YWx1ZSIsaC53ZWJRdWVyeVRl''@;'; put 'put ''eHQpLGZlKDQpLHhlKCJuZ3hDbGlwYm9hcmQiLGYpLGZlKDUpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLElyKCIgIixoLmxpYlRhYiwiICIpLGZlKDIpLHhlKCJuZ0lmIixoLmZpbHRlciks''@;'; put 'put ''ZmUoNikseGUoImNsckxvYWRpbmciLGguc3VibWl0TG9hZGluZyksZmUoMikscGkoImNsck1vZGFsT3BlbiIsaC5xdWVyeUVyciksZmUoNSksQ3IoaC5xdWVyeUVyck1lc3NhZ2UpLGZlKDYpLHhlKCJuZ0lmIixoLmxvYWRpbmdUYWJsZVZpZXcpLGZlKCkseGUoIm5nSWYiLCFoLmxvYWRpbmdU''@;'; put 'put ''YWJsZVZpZXcpLGZlKCkscGkoIm9wZW4iLGguZGF0YXNldEluZm8pLHhlKCJkc21ldGEiLGguZHNtZXRhKSgidmVyc2lvbnMiLGgudmVyc2lvbnMpLGZlKCkscGkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W0k2ZSxucyxiYSxTMixjcCxTa3QsczcsQTIs''@;'; put 'put ''azIscWwsTWQsVDIsbmwsYTcsR3MseXAsRWgsUGQscDUsSGwsb3UsS3UsajAsTDIsUDIsZHMsUTFlLElkLEJ5LFNoLFoxLHg3LCR5LFFMLGw1LHA3LGc3LFZ5LG03LGI3LHY3LFJkLERfLGk0LE82ZSxwTyxYZWUsU3cscjQsRjZlLEVrdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBSRHQ9W3twYXRoOiIiLGNvbXBvbmVudDpwQXQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6ek59LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6ek59LHtwYXRoOiJkYXRhLzpsaWJNZW0v''@;'; put 'put ''OmZpbHRlcklkIixjb21wb25lbnQ6ek59LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDp6Tn0se3BhdGg6ImxpbmVhZ2UiLGNvbXBvbmVudDpqTn0se3BhdGg6ImxpbmVhZ2UvOnRhYmxlaWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OmpOfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNv''@;'; put 'put ''bHVyaS86ZGlyZWN0aW9uIixjb21wb25lbnQ6ak59LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OmpOfSx7cGF0aDoidml5YS1hcGktZXhwbG9yZXIiLGNvbXBvbmVudDpfa3R9LHtwYXRoOiJtZXRhZGF0YSIsY29tcG9uZW50Olp0''@;'; put 'put ''ZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQiLGNvbXBvbmVudDpadGV9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6WnRlfSx7cGF0aDoidXNlcm5hdiIsY29tcG9uZW50OmZBdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0''@;'; put 'put ''aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDpNN2V9LHtwYXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6TTdlfSx7cGF0aDoiZ3JvdXBzIixjb21wb25lbnQ6dDhlfSx7cGF0aDoiZ3JvdXBzLzp1cmkiLGNvbXBvbmVudDp0OGV9LHtw''@;'; put 'put ''YXRoOiJyb2xlcyIsY29tcG9uZW50OlM3ZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDpTN2V9XX1dfV07bGV0IExEdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2ko''@;'; put 'put ''e3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQoUkR0KSx6Y119KX19cmV0dXJuIGN9KSgpLE9EdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTjZlLFJhLExEdCxNa3QsUmMsejAsYTkuZm9yUm9vdCgpLFk5LEN3LFNBLFFlZSxuZl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEZEdD16Yy5mb3JSb290KFt7cGF0aDoiIixyZWRpcmVjdFRv''@;'; put 'put ''OiJob21lIixwYXRoTWF0Y2g6ImZ1bGwifSx7cGF0aDoidmlldyIsbG9hZENoaWxkcmVuOigpPT5PRHR9LHtwYXRoOiJyZXZpZXciLGNvbXBvbmVudDpGX3QsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidG9hcHByb3ZlIn0se3BhdGg6IiIsbG9hZENo''@;'; put 'put ''aWxkcmVuOigpPT5QX3R9XX0se3BhdGg6ImxpY2Vuc2luZyIsbG9hZENoaWxkcmVuOigpPT5leXR9LHtwYXRoOiJob21lIixsb2FkQ2hpbGRyZW46KCk9PmdidH0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT5hOXR9LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5ZX3R9''@;'; put 'put ''LHtwYXRoOiJzeXN0ZW0iLGxvYWRDaGlsZHJlbjooKT0+YXd0fSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9PmtLZX0se3BhdGg6IioqIixjb21wb25lbnQ6aiRlfV0se3VzZUhhc2g6ITB9KTtsZXQgSER0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjLGJvb3RzdHJhcDpbWFllXX0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOltvTCxVaCx0dGUsJFJdLGltcG9ydHM6W0IkZSxUb2UsUmMsSU9lLG9BZSxGRHQsQ3csejAs''@;'; put 'put ''WTksU0EsbmYsSkF0XX0pfX1yZXR1cm4gY30pKCk7a0NlKCkuYm9vdHN0cmFwTW9kdWxlKEhEdCl9LDM3MzQ6KG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9Pnt2YXIgX2FzeW5jVG9HZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXygyOTI5''@;'; put 'put ''MykuZGVmYXVsdCxfd3JhcEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNDI5NTgpLmRlZmF1bHQsX2F3YWl0QXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg1MzM0NCkuZGVmYXVsdCxfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZT1fX3dlYnBhY2tfcmVxdWlyZV9f''@;'; put 'put ''KDkzNTEzKS5kZWZhdWx0LF9hc3luY0l0ZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oODI4ODEpLmRlZmF1bHQseTtzZWxmLHk9KCk9PigoKT0+e3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXszMDYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgXz15KDI4MzApLGc9eSg5OTQ3KTtYLkNzdkZvcm1hdHRlclN0cmVhbT1jbGFzcyBCIGV4dGVuZHMgXy5UcmFuc2Zvcm17Y29uc3RydWN0b3IoUCl7c3Vw''@;'; put 'put ''ZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTpQLm9iamVjdE1vZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPVAsdGhpcy5yb3dGb3JtYXR0ZXI9bmV3IGcuUm93Rm9ybWF0dGVyKFApLHRoaXMuaGFzV3JpdHRlbkJPTT0hUC53cml0ZUJPTX10cmFuc2Zvcm0o''@;'; put 'put ''UCl7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1RyYW5zZm9ybT1QLHRoaXN9X3RyYW5zZm9ybShQLEYsTyl7bGV0IHo9ITE7dHJ5e3RoaXMuaGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMu''@;'; put 'put ''cm93Rm9ybWF0dGVyLmZvcm1hdChQLChOLEwpPT5OPyh6PSEwLE8oTikpOihMJiZMLmZvckVhY2goSz0+e3RoaXMucHVzaChJLmZyb20oSywidXRmOCIpKX0pLHo9ITAsTygpKSl9Y2F0Y2goTil7aWYoeil0aHJvdyBOO08oTil9fV9mbHVzaChQKXt0aGlzLnJvd0Zvcm1hdHRlci5maW5pc2go''@;'; put 'put ''KEYsTyk9PkY/UChGKTooTyYmTy5mb3JFYWNoKHo9Pnt0aGlzLnB1c2goSS5mcm9tKHosInV0ZjgiKSl9KSxQKCkpKX19fSw2NzYzOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Gb3JtYXR0ZXJPcHRpb25z''@;'; put 'put ''PXZvaWQgMCxYLkZvcm1hdHRlck9wdGlvbnM9Y2xhc3MgeXtjb25zdHJ1Y3RvcihfPXt9KXt2YXIgZzt0aGlzLm9iamVjdE1vZGU9ITAsdGhpcy5kZWxpbWl0ZXI9IiwiLHRoaXMucm93RGVsaW1pdGVyPSJcbiIsdGhpcy5xdW90ZT0nIicsdGhpcy5lc2NhcGU9dGhpcy5xdW90ZSx0aGlzLnF1''@;'; put 'put ''b3RlQ29sdW1ucz0hMSx0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29sdW1ucyx0aGlzLmhlYWRlcnM9bnVsbCx0aGlzLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXI9ITEsdGhpcy53cml0ZUJPTT0hMSx0aGlzLkJPTT0iXHVmZWZmIix0aGlzLmFsd2F5c1dyaXRlSGVhZGVycz0hMSxPYmpl''@;'; put 'put ''Y3QuYXNzaWduKHRoaXMsX3x8e30pLHR5cGVvZiBfPy5xdW90ZUhlYWRlcnM+InUiJiYodGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMpLCEwPT09Xz8ucXVvdGU/dGhpcy5xdW90ZT0nIic6ITE9PT1fPy5xdW90ZSYmKHRoaXMucXVvdGU9IiIpLCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''Xz8uZXNjYXBlJiYodGhpcy5lc2NhcGU9dGhpcy5xdW90ZSksdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9ISF0aGlzLmhlYWRlcnMmJihudWxsPT09KGc9Xy53cml0ZUhlYWRlcnMpfHx2b2lkIDA9PT1nfHxnKSx0aGlzLmhlYWRlcnM9QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnMpP3RoaXMu''@;'; put 'put ''aGVhZGVyczpudWxsLHRoaXMuZXNjYXBlZFF1b3RlPWAke3RoaXMuZXNjYXBlfSR7dGhpcy5xdW90ZX1gfX19LDUxODY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFApe3JldHVybiBQJiZQLl9fZXNNb2R1''@;'; put 'put ''bGU/UDp7ZGVmYXVsdDpQfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRmllbGRGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IF89SSh5KDgwOTQpKSxnPUkoeSg5NzIyKSksQj1JKHkoMTY1OCkpO1guRmllbGRGb3JtYXR0ZXI9Y2xhc3Mgd3tjb25z''@;'; put 'put ''dHJ1Y3RvcihGKXt0aGlzLl9oZWFkZXJzPW51bGwsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPUYsbnVsbCE9PUYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1GLmhlYWRlcnMpLHRoaXMuUkVQTEFDRV9SRUdFWFA9bmV3IFJlZ0V4cChGLnF1b3RlLCJnIik7Y29uc3QgTz1gWyR7Ri5kZWxpbWl0ZXJ9''@;'; put 'put ''JHtCLmRlZmF1bHQoRi5yb3dEZWxpbWl0ZXIpfXxccnxcbl1gO3RoaXMuRVNDQVBFX1JFR0VYUD1uZXcgUmVnRXhwKE8pfXNldCBoZWFkZXJzKEYpe3RoaXMuX2hlYWRlcnM9Rn1zaG91bGRRdW90ZShGLE8pe2NvbnN0IHo9Tz90aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVIZWFkZXJzOnRo''@;'; put 'put ''aXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUNvbHVtbnM7cmV0dXJuIF8uZGVmYXVsdCh6KT96OkFycmF5LmlzQXJyYXkoeik/eltGXTpudWxsIT09dGhpcy5faGVhZGVycyYmelt0aGlzLl9oZWFkZXJzW0ZdXX1mb3JtYXQoRixPLHope2NvbnN0IE49YCR7Zy5kZWZhdWx0KEYpPyIiOkZ9YC5y''@;'; put 'put ''ZXBsYWNlKC9cMC9nLCIiKSx7Zm9ybWF0dGVyT3B0aW9uczpMfT10aGlzO3JldHVybiIiIT09TC5xdW90ZSYmLTEhPT1OLmluZGV4T2YoTC5xdW90ZSk/dGhpcy5xdW90ZUZpZWxkKE4ucmVwbGFjZSh0aGlzLlJFUExBQ0VfUkVHRVhQLEwuZXNjYXBlZFF1b3RlKSk6LTEhPT1OLnNlYXJjaCh0''@;'; put 'put ''aGlzLkVTQ0FQRV9SRUdFWFApfHx0aGlzLnNob3VsZFF1b3RlKE8seik/dGhpcy5xdW90ZUZpZWxkKE4pOk59cXVvdGVGaWVsZChGKXtjb25zdHtxdW90ZTpPfT10aGlzLmZvcm1hdHRlck9wdGlvbnM7cmV0dXJuYCR7T30ke0Z9JHtPfWB9fX0sNzE4MTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Sb3dGb3JtYXR0ZXI9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IF89SSh5KDg0MjMpKSxnPUkoeSgyMzA3KSksQj15KDUxODYpLHc9eSg0NjkyKTtjbGFzcyBQe2NvbnN0cnVjdG9yKE8pe3RoaXMucm93Q291bnQ9MCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9Tyx0aGlzLmZpZWxkRm9ybWF0dGVyPW5ldyBCLkZpZWxkRm9ybWF0dGVyKE8pLHRoaXMuaGVh''@;'; put 'put ''ZGVycz1PLmhlYWRlcnMsdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9Ty5zaG91bGRXcml0ZUhlYWRlcnMsdGhpcy5oYXNXcml0dGVuSGVhZGVycz0hMSxudWxsIT09dGhpcy5oZWFkZXJzJiYodGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXRoaXMuaGVhZGVycyksTy50cmFuc2Zvcm0mJih0''@;'; put 'put ''aGlzLnJvd1RyYW5zZm9ybT1PLnRyYW5zZm9ybSl9c3RhdGljIGlzUm93SGFzaEFycmF5KE8pe3JldHVybiEhQXJyYXkuaXNBcnJheShPKSYmQXJyYXkuaXNBcnJheShPWzBdKSYmMj09PU9bMF0ubGVuZ3RofXN0YXRpYyBpc1Jvd0FycmF5KE8pe3JldHVybiBBcnJheS5pc0FycmF5KE8pJiYh''@;'; put 'put ''dGhpcy5pc1Jvd0hhc2hBcnJheShPKX1zdGF0aWMgZ2F0aGVySGVhZGVycyhPKXtyZXR1cm4gUC5pc1Jvd0hhc2hBcnJheShPKT9PLm1hcCh6PT56WzBdKTpBcnJheS5pc0FycmF5KE8pP086T2JqZWN0LmtleXMoTyl9c3RhdGljIGNyZWF0ZVRyYW5zZm9ybShPKXtyZXR1cm4gdy5pc1N5bmNU''@;'; put 'put ''cmFuc2Zvcm0oTyk/KHosTik9PntsZXQgTD1udWxsO3RyeXtMPU8oeil9Y2F0Y2goSyl7cmV0dXJuIE4oSyl9cmV0dXJuIE4obnVsbCxMKX06KHosTik9PntPKHosTil9fXNldCByb3dUcmFuc2Zvcm0oTyl7aWYoIV8uZGVmYXVsdChPKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdHJhbnNm''@;'; put 'put ''b3JtIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fcm93VHJhbnNmb3JtPVAuY3JlYXRlVHJhbnNmb3JtKE8pfWZvcm1hdChPLHope3RoaXMuY2FsbFRyYW5zZm9ybWVyKE8sKE4sTCk9PntpZihOKXJldHVybiB6KE4pO2lmKCFPKXJldHVybiB6KG51bGwpO2NvbnN0IEs9W107aWYoTCl7''@;'; put 'put ''Y29uc3R7c2hvdWxkRm9ybWF0Q29sdW1uczpVLGhlYWRlcnM6V309dGhpcy5jaGVja0hlYWRlcnMoTCk7aWYodGhpcy5zaG91bGRXcml0ZUhlYWRlcnMmJlcmJiF0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzJiYoSy5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyhXLCEwKSksdGhpcy5oYXNXcml0dGVu''@;'; put 'put ''SGVhZGVycz0hMCksVSl7Y29uc3QgWT10aGlzLmdhdGhlckNvbHVtbnMoTCk7Sy5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyhZLCExKSl9fXJldHVybiB6KG51bGwsSyl9KX1maW5pc2goTyl7Y29uc3Qgej1bXTtpZih0aGlzLmZvcm1hdHRlck9wdGlvbnMuYWx3YXlzV3JpdGVIZWFkZXJzJiYw''@;'; put 'put ''PT09dGhpcy5yb3dDb3VudCl7aWYoIXRoaXMuaGVhZGVycylyZXR1cm4gTyhuZXcgRXJyb3IoImBhbHdheXNXcml0ZUhlYWRlcnNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBidXQgYGhlYWRlcnNgIG9wdGlvbiBub3QgcHJvdmlkZWQuIikpO3oucHVzaCh0aGlzLmZvcm1hdENvbHVtbnModGhp''@;'; put 'put ''cy5oZWFkZXJzLCEwKSl9cmV0dXJuIHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyJiZ6LnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0RlbGltaXRlciksTyhudWxsLHopfWNoZWNrSGVhZGVycyhPKXtpZih0aGlzLmhlYWRlcnMpcmV0dXJue3Nob3Vs''@;'; put 'put ''ZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczp0aGlzLmhlYWRlcnN9O2NvbnN0IHo9UC5nYXRoZXJIZWFkZXJzKE8pO3JldHVybiB0aGlzLmhlYWRlcnM9eix0aGlzLmZpZWxkRm9ybWF0dGVyLmhlYWRlcnM9eix0aGlzLnNob3VsZFdyaXRlSGVhZGVycz97c2hvdWxkRm9ybWF0Q29sdW1uczoh''@;'; put 'put ''Zy5kZWZhdWx0KHosTyksaGVhZGVyczp6fTp7c2hvdWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOm51bGx9fWdhdGhlckNvbHVtbnMoTyl7aWYobnVsbD09PXRoaXMuaGVhZGVycyl0aHJvdyBuZXcgRXJyb3IoIkhlYWRlcnMgaXMgY3VycmVudGx5IG51bGwiKTtyZXR1cm4gQXJyYXkuaXNB''@;'; put 'put ''cnJheShPKT9QLmlzUm93SGFzaEFycmF5KE8pP3RoaXMuaGVhZGVycy5tYXAoKHosTik9Pntjb25zdCBMPU9bTl07cmV0dXJuIEw/TFsxXToiIn0pOlAuaXNSb3dBcnJheShPKSYmIXRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzP086dGhpcy5oZWFkZXJzLm1hcCgoeixOKT0+T1tOXSk6dGhpcy5o''@;'; put 'put ''ZWFkZXJzLm1hcCh6PT5PW3pdKX1jYWxsVHJhbnNmb3JtZXIoTyx6KXtyZXR1cm4gdGhpcy5fcm93VHJhbnNmb3JtP3RoaXMuX3Jvd1RyYW5zZm9ybShPLHopOnoobnVsbCxPKX1mb3JtYXRDb2x1bW5zKE8seil7Y29uc3QgTj1PLm1hcCgoSyxVKT0+dGhpcy5maWVsZEZvcm1hdHRlci5mb3Jt''@;'; put 'put ''YXQoSyxVLHopKS5qb2luKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5kZWxpbWl0ZXIpLHtyb3dDb3VudDpMfT10aGlzO3JldHVybiB0aGlzLnJvd0NvdW50Kz0xLEw/W3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIsTl0uam9pbigiIik6Tn19WC5Sb3dGb3JtYXR0ZXI9UH0sOTk0''@;'; put 'put ''NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5GaWVsZEZvcm1hdHRlcj1YLlJvd0Zvcm1hdHRlcj12b2lkIDA7dmFyIEk9eSg3MTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiUm93Rm9ybWF0dGVy''@;'; put 'put ''Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5Sb3dGb3JtYXR0ZXJ9fSk7dmFyIF89eSg1MTg2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiRmllbGRGb3JtYXR0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLkZpZWxkRm9ybWF0dGVy''@;'; put 'put ''fX0pfSw3MjAxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKFUsVyxZLHEpe3ZvaWQgMD09PXEmJihxPVkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShV''@;'; put 'put ''LHEse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFdbWV19fSl9OmZ1bmN0aW9uKFUsVyxZLHEpe3ZvaWQgMD09PXEmJihxPVkpLFVbcV09V1tZXX0pLGc9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKFUsVyl7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOld9KX06ZnVuY3Rpb24oVSxXKXtVLmRlZmF1bHQ9V30pLEI9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKFUpe2lmKFUmJlUuX19lc01vZHVsZSlyZXR1cm4gVTt2YXIgVz17fTtpZihudWxs''@;'; put 'put ''IT1VKWZvcih2YXIgWSBpbiBVKSJkZWZhdWx0IiE9PVkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLFkpJiZfKFcsVSxZKTtyZXR1cm4gZyhXLFUpLFd9LHc9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKFUsVyl7Zm9yKHZhciBZIGluIFUpImRlZmF1''@;'; put 'put ''bHQiIT09WSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChXLFkpJiZfKFcsVSxZKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgud3JpdGVUb1BhdGg9WC53cml0ZVRvU3RyaW5nPVgud3JpdGVUb0J1ZmZlcj1YLndyaXRl''@;'; put 'put ''VG9TdHJlYW09WC53cml0ZT1YLmZvcm1hdD1YLkZvcm1hdHRlck9wdGlvbnM9WC5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IFA9eSg5NTM5KSxGPXkoMjgzMCksTz1CKHkoODY0NikpLHo9eSg2NzYzKSxOPXkoMzA2Mik7dyh5KDQ2OTIpLFgpO3ZhciBMPXkoMzA2Mik7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIkNzdkZvcm1hdHRlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuQ3N2Rm9ybWF0dGVyU3RyZWFtfX0pO3ZhciBLPXkoNjc2Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIkZvcm1hdHRlck9wdGlvbnMiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLLkZvcm1hdHRlck9wdGlvbnN9fSksWC5mb3JtYXQ9VT0+bmV3IE4uQ3N2Rm9ybWF0dGVyU3RyZWFtKG5ldyB6LkZvcm1hdHRlck9wdGlvbnMoVSkpLFgud3JpdGU9KFUsVyk9Pntjb25zdCBZPVguZm9ybWF0KFcpLHE9UC5wcm9taXNpZnko''@;'; put 'put ''KGVlLEopPT57WS53cml0ZShlZSx2b2lkIDAsSil9KTtyZXR1cm4gVS5yZWR1Y2UoKGVlLEopPT5lZS50aGVuKCgpPT5xKEopKSxQcm9taXNlLnJlc29sdmUoKSkudGhlbigoKT0+WS5lbmQoKSkuY2F0Y2goZWU9PntZLmVtaXQoImVycm9yIixlZSl9KSxZfSxYLndyaXRlVG9TdHJlYW09KFUs''@;'; put 'put ''VyxZKT0+WC53cml0ZShXLFkpLnBpcGUoVSksWC53cml0ZVRvQnVmZmVyPShVLFc9e30pPT57Y29uc3QgWT1bXSxxPW5ldyBGLldyaXRhYmxlKHt3cml0ZShlZSxKLG5lKXtZLnB1c2goZWUpLG5lKCl9fSk7cmV0dXJuIG5ldyBQcm9taXNlKChlZSxKKT0+e3Eub24oImVycm9yIixKKS5vbigi''@;'; put 'put ''ZmluaXNoIiwoKT0+ZWUoSS5jb25jYXQoWSkpKSxYLndyaXRlKFUsVykucGlwZShxKX0pfSxYLndyaXRlVG9TdHJpbmc9KFUsVyk9Plgud3JpdGVUb0J1ZmZlcihVLFcpLnRoZW4oWT0+WS50b1N0cmluZygpKSxYLndyaXRlVG9QYXRoPShVLFcsWSk9Pntjb25zdCBxPU8uY3JlYXRlV3JpdGVT''@;'; put 'put ''dHJlYW0oVSx7ZW5jb2Rpbmc6InV0ZjgifSk7cmV0dXJuIFgud3JpdGUoVyxZKS5waXBlKHEpfX0sNDY5MjoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNTeW5jVHJhbnNmb3JtPXZvaWQgMCxYLmlzU3lu''@;'; put 'put ''Y1RyYW5zZm9ybT15PT4xPT09eS5sZW5ndGh9LDI2NTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE8pe3JldHVybiBPJiZPLl9fZXNNb2R1bGU/Tzp7ZGVmYXVsdDpPfX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVjb2RlVG9rZW49WC5oYXNUb2tlbkV4cGlyZWQ9WC5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPVguaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPXZvaWQgMDtjb25zdCBfPUkoeSg2MjQ1KSk7ZnVuY3Rpb24gUChPLHope3JldHVybigwLF8u''@;'; put 'put ''ZGVmYXVsdCkoTykuZXhwLShuZXcgRGF0ZSkudmFsdWVPZigpLzFlMzw9en1YLmlzQWNjZXNzVG9rZW5FeHBpcmluZz1mdW5jdGlvbiBnKE8sej0zNjAwKXtyZXR1cm4hT3x8UChPLHopfSxYLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9ZnVuY3Rpb24gQihPLHo9MzApe3JldHVybiFPfHxQKE8s''@;'; put 'put ''eil9LFguaGFzVG9rZW5FeHBpcmVkPWZ1bmN0aW9uIHcoTyl7cmV0dXJuIU98fFAoTywwKX0sWC5kZWNvZGVUb2tlbj1mdW5jdGlvbiBGKE8pe2xldCB6O3RyeXt6PSgwLF8uZGVmYXVsdCkoTyl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRva2VuIHN1cHBsaWVkLiIpfXJldHVy''@;'; put 'put ''biB6fX0sNjc5OTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCx7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDI2NTYpLFgpfSwzMjU5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksWC5wcmVmaXhNZXNzYWdlPXZvaWQgMCxYLnByZWZpeE1lc3NhZ2U9KEksXyk9PntpZigib2JqZWN0Ij09dHlwZW9mIEkpaWYoSS5oYXNPd25Qcm9wZXJ0eSgibWVzc2FnZSIpKUkubWVzc2FnZT1fK0kubWVzc2FnZTtlbHNle2lmKCFJLmhhc093blByb3BlcnR5KCJi''@;'; put 'put ''b2R5IikpcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxJKSx7bWVzc2FnZTpffSk7aWYoIm9iamVjdCI9PXR5cGVvZiBJLmJvZHkmJihJLm1lc3NhZ2U9SS5ib2R5Lm1lc3NhZ2U/XytJLmJvZHkubWVzc2FnZTpfKSwic3RyaW5nIj09dHlwZW9mIEkuYm9keSl7bGV0IGc7''@;'; put 'put ''dHJ5e2c9SlNPTi5wYXJzZShJLmJvZHkpfWNhdGNoe3JldHVybiBJLm1lc3NhZ2U9XyxJfXJldHVybiBnLm1lc3NhZ2U9Zy5tZXNzYWdlP18rZy5tZXNzYWdlOl8sSS5ib2R5PWcsSX19cmV0dXJuInN0cmluZyI9PXR5cGVvZiBJJiYoST1fK0kpLEl9fSw5Nzc4OmZ1bmN0aW9uKHVlLFgseSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3dd''@;'; put 'put ''fX0pfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3''@;'; put 'put ''KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMzI1OSksWCksXyh5KDEwNjQpLFgpfSwxMDY0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxYLlNlcnZlclR5cGVFcnJvcj12b2lkIDA7Y29uc3QgST15KDM5MDApO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihCPVtdKXtsZXQgdz0oQj1bLi4ubmV3IFNldChCKV0pLmxlbmd0aD9CLmpvaW4oIiwgIikudHJpbSgpOltJLlNlcnZlclR5cGUuU2FzVml5YSxJLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzOSxJLlNlcnZlclR5cGUuU2FzanNdLmpvaW4oIiwgIikudHJpbSgpO3c9dy5yZXBsYWNlKC8sXHMoW14sXSopJC8sIiBhbmQgJDEiKSxzdXBlcihgSW52YWxpZCBzZXJ2ZXIgdHlwZTogdmFsaWQgb3B0aW9uJHsxIT09Qi5sZW5ndGg/InMiOiIifSAkezEhPT1CLmxlbmd0aD8i''@;'; put 'put ''YXJlIjoiaXMifSAke3d9YCksdGhpcy5uYW1lPSJTZXJ2ZXJUeXBlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19WC5TZXJ2ZXJUeXBlRXJyb3I9X30sMzkwNjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdh''@;'; put 'put ''aXRlcnx8ZnVuY3Rpb24oTyx6LE4sTCl7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oVSxXKXtmdW5jdGlvbiBZKEope3RyeXtlZShMLm5leHQoSikpfWNhdGNoKG5lKXtXKG5lKX19ZnVuY3Rpb24gcShKKXt0cnl7ZWUoTC50aHJvdyhKKSl9Y2F0Y2gobmUpe1cobmUpfX1m''@;'; put 'put ''dW5jdGlvbiBlZShKKXtKLmRvbmU/VShKLnZhbHVlKTpmdW5jdGlvbiBLKFUpe3JldHVybiBVIGluc3RhbmNlb2YgTj9VOm5ldyBOKGZ1bmN0aW9uKFcpe1coVSl9KX0oSi52YWx1ZSkudGhlbihZLHEpfWVlKChMPUwuYXBwbHkoTyx6fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudXBkYXRlQ3N2PVguY3JlYXRlQ3N2PVgucmVhZENzdj12b2lkIDA7Y29uc3QgXz15KDE1NTkpLGc9eSg3MjAxKTtYLnJlYWRDc3Y9Tz0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQoMCxf''@;'; put 'put ''LnJlYWRGaWxlKShPKSkuc3BsaXQoIlxuIikuZmlsdGVyKE49Pk4ubGVuZ3RoKS5tYXAoTj0+Ti5zcGxpdCgiLCIpKX0pLFguY3JlYXRlQ3N2PShPLHosTik9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTD15aWVsZCgwLGcud3JpdGVUb1N0cmluZykoeix7aGVh''@;'; put 'put ''ZGVyczpOfSk7eWllbGQoMCxfLmNyZWF0ZUZpbGUpKE8sTCl9KSxYLnVwZGF0ZUNzdj0oTyx6LE4sTCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz15aWVsZCBGKE8seixOLEwpO2lmKEwpe2NvbnN0IFU9MD09PUsubGVuZ3RoPzE6Sy5sZW5ndGgsVz1OLmZp''@;'; put 'put ''bmRJbmRleChZPT5ZPT09TCk7Vz4tMT96LnNwbGljZShXLDAsVSk6KE4uc3BsaWNlKDAsMCxMKSx6LnNwbGljZSgwLDAsVSkpfUsucHVzaCh6KSx5aWVsZCgwLFguY3JlYXRlQ3N2KShPLEssTil9KTtjb25zdCBGPShPLHosTixMKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXtpZih6Lmxlbmd0aCE9PU4ubGVuZ3RoKXtpZih6Lmxlbmd0aD5OLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBtb3JlIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKTtpZighTHx8ei5sZW5ndGgrMSE9PU4ubGVuZ3RoKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIGxlc3MgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpfWVsc2UgaWYoTCYmTi5pbmNsdWRlcyhMKSl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBtb3JlIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKTtjb25z''@;'; put 'put ''dCBLPXlpZWxkKDAsWC5yZWFkQ3N2KShPKS5jYXRjaChXPT5bXSksVT1LWzBdO2lmKFUpe2lmKE4ubGVuZ3RoPlUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9mIHByb3ZpZGVkIGNvbHVtbnMgYXJlIGdyZWF0ZXIgdGhhbiBudW1iZXIgb2YgZXhpc3RpbmcgY29sdW1ucyIpO2lm''@;'; put 'put ''KE4ubGVuZ3RoPFUubGVuZ3RoKXtpZighTHx8Ti5sZW5ndGgrMSE9PVUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9mIHByb3ZpZGVkIGNvbHVtbnMgYXJlIGxlc3MgdGhhbiBudW1iZXIgb2YgZXhpc3RpbmcgY29sdW1ucyIpO2NvbnN0IFc9VS5maW5kSW5kZXgocT0+cT09PUwp''@;'; put 'put ''LFk9Wy4uLk5dO2lmKCEoVz4tMSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihZLnNwbGljZShXLDAsTCksSlNPTi5zdHJpbmdpZnkoTikhPT1KU09OLnN0cmluZ2lmeShZKSl0aHJvdyBuZXcgRXJyb3IoInBy''@;'; put 'put ''b3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpfWVsc2V7aWYoSlNPTi5zdHJpbmdpZnkoTikhPT1KU09OLnN0cmluZ2lmeShVKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lm''@;'; put 'put ''KEwmJiFOLmluY2x1ZGVzKEwpKXRocm93IG5ldyBFcnJvcigiY2FuIG5vdCBhZGQgbmV3IGlkIHRvIGV4aXN0aW5nIGRhdGEiKX19cmV0dXJuIEt9KX0sMTU1OTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5j''@;'; put 'put ''cmVhdGU/ZnVuY3Rpb24obSxBLGFlLHRlKXt2b2lkIDA9PT10ZSYmKHRlPWFlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSx0ZSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQVthZV19fSl9OmZ1bmN0aW9uKG0sQSxhZSx0ZSl7dm9pZCAwPT09dGUmJih0ZT1hZSksbVt0''@;'; put 'put ''ZV09QVthZV19KSxfPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihtLEEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpBfSl9OmZ1bmN0aW9uKG0sQSl7bS5kZWZhdWx0PUF9KSxnPXRo''@;'; put 'put ''aXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihtKXtpZihtJiZtLl9fZXNNb2R1bGUpcmV0dXJuIG07dmFyIEE9e307aWYobnVsbCE9bSlmb3IodmFyIGFlIGluIG0pImRlZmF1bHQiIT09YWUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGFlKSYmSShBLG0s''@;'; put 'put ''YWUpO3JldHVybiBfKEEsbSksQX0sQj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24obSxBLGFlLHRlKXtyZXR1cm4gbmV3KGFlfHwoYWU9UHJvbWlzZSkpKGZ1bmN0aW9uKHdlLFVlKXtmdW5jdGlvbiBKZSh2ZSl7dHJ5e01lKHRlLm5leHQodmUpKX1jYXRjaChYZSl7VWUoWGUpfX1m''@;'; put 'put ''dW5jdGlvbiBvdCh2ZSl7dHJ5e01lKHRlLnRocm93KHZlKSl9Y2F0Y2goWGUpe1VlKFhlKX19ZnVuY3Rpb24gTWUodmUpe3ZlLmRvbmU/d2UodmUudmFsdWUpOmZ1bmN0aW9uIHNlKHdlKXtyZXR1cm4gd2UgaW5zdGFuY2VvZiBhZT93ZTpuZXcgYWUoZnVuY3Rpb24oVWUpe1VlKHdlKX0pfSh2''@;'; put 'put ''ZS52YWx1ZSkudGhlbihKZSxvdCl9TWUoKHRlPXRlLmFwcGx5KG0sQXx8W10pKS5uZXh0KCkpfSl9LHc9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKG0pe3JldHVybiBtJiZtLl9fZXNNb2R1bGU/bTp7ZGVmYXVsdDptfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0TGluZUVuZGluZz1YLmlzVGVzdEZpbGU9WC50ZXN0RmlsZVJlZ0V4cD1YLmNyZWF0ZVJlYWRTdHJlYW09WC5jcmVhdGVXcml0ZVN0cmVhbT1YLmdldFJlYWxQYXRoPVguYmFzZTY0RW5jb2RlRmlsZT1YLmJhc2U2NEVuY29kZUltYWdlRmlsZT1Y''@;'; put 'put ''LnBhdGhTZXBFc2NhcGVkPVguY29weT1YLm1vdmVGaWxlPVguZ2V0UmVsYXRpdmVQYXRoPVgudW5pZnlGaWxlUGF0aD1YLmRlbGV0ZUZvbGRlcj1YLmRlbGV0ZUZpbGU9WC5jcmVhdGVGaWxlPVguY3JlYXRlRm9sZGVyPVgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFN1''@;'; put 'put ''YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTYXNGaWxlc0luRm9sZGVyPVgubGlzdEluaUZpbGVzSW5Gb2xkZXI9WC5saXN0RmlsZXNJbkZvbGRlcj1YLnJlYWRGaWxlQmluYXJ5PVgucmVhZEZpbGU9WC5pc0ZvbGRlcj1YLmZvbGRlckV4aXN0cz1YLmZpbGVFeGlzdHM9dm9pZCAwO2NvbnN0IFA9''@;'; put 'put ''dyh5KDU2NzQpKSxGPXcoeSgyNTIwKSksTz15KDYyNjYpLHo9Zyh5KDI5NzUpKSxOPXkoMzkwMCk7ZnVuY3Rpb24gSyhtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5hY2Nlc3MobSxQLmRlZmF1bHQuY29uc3RhbnRz''@;'; put 'put ''LkZfT0spLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSl9ZnVuY3Rpb24gWShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShtKX0pfWZ1bmN0aW9uIHEobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihBPT5BLmZpbHRlcihhZT0+IWFlLmlzRGlyZWN0b3J5KCkpLm1hcChhZT0+YWUubmFtZSkpfSl9ZnVuY3Rpb24gaWUobSxBPSEwLGFlPVtdKXtyZXR1''@;'; put 'put ''cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKHRlPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihBJiZ0ZS5maWx0ZXIod2U9PndlLmlzRGlyZWN0''@;'; put 'put ''b3J5KCkpLmxlbmd0aCl7bGV0IHdlPVtdO3JldHVybiB5aWVsZCgwLE8uYXN5bmNGb3JFYWNoKSh0ZS5maWx0ZXIoVWU9PlVlLmlzRGlyZWN0b3J5KCkpLFVlPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKZT1VZS5uYW1lO2lmKCFhZS5pbmNsdWRlcyhKZSkpe2Nv''@;'; put 'put ''bnN0IG90PUYuZGVmYXVsdC5qb2luKG0sSmUpO3dlPVsuLi53ZSwuLi4oeWllbGQgaWUob3QsQSxhZSkpLm1hcChNZT0+Ri5kZWZhdWx0LmpvaW4oSmUsTWUpKV19fSkpLFsuLi50ZS5maWx0ZXIoVWU9PiFVZS5pc0RpcmVjdG9yeSgpKS5tYXAoVWU9PlVlLm5hbWUpLC4uLndlXX1yZXR1cm4g''@;'; put 'put ''dGUubWFwKHNlPT5zZS5uYW1lKX0pKX0pfWZ1bmN0aW9uIGxlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLm1rZGlyKG0se3JlY3Vyc2l2ZTohMH0pfSl9ZnVuY3Rpb24gU2UobSxBPUYuZGVmYXVsdC5zZXAsYWU9''@;'; put 'put ''Ii8iKXtjb25zdCB0ZT17dW5peDoiLyIsd2luOiJcXCJ9O2xldCBzZT1PYmplY3Qua2V5cyh0ZSkuZmluZCh3ZT0+dGVbd2VdPT09QSk7aWYoc2Upe2NvbnN0IHdlPXRlW09iamVjdC5rZXlzKHRlKS5maW5kKFVlPT5VZSE9PXNlKV07cmV0dXJuIHNlPXRlW3NlXSxtLnNwbGl0KHdlKS5qb2lu''@;'; put 'put ''KHNlKX1yZXR1cm4gbS5zcGxpdChhZSkuam9pbihBKX1YLmZpbGVFeGlzdHM9ZnVuY3Rpb24gTChtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5hY2Nlc3MobSxQLmRlZmF1bHQuY29uc3RhbnRzLkZfT0spLnRoZW4o''@;'; put 'put ''KCk9PiEwKS5jYXRjaCgoKT0+ITEpfSl9LFguZm9sZGVyRXhpc3RzPUssWC5pc0ZvbGRlcj1mdW5jdGlvbiBVKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLmxzdGF0KG0pLnRoZW4oQT0+QS5pc0RpcmVjdG9yeSgp''@;'; put 'put ''KS5jYXRjaCgoKT0+ITEpfSl9LFgucmVhZEZpbGU9ZnVuY3Rpb24gVyhtLEE9InV0ZjgiKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShtLEEpfSl9LFgucmVhZEZpbGVCaW5hcnk9WSxYLmxpc3RGaWxl''@;'; put 'put ''c0luRm9sZGVyPXEsWC5saXN0SW5pRmlsZXNJbkZvbGRlcj1mdW5jdGlvbiBlZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHEobSkpLmZpbHRlcihBPT5BLmVuZHNXaXRoKCIuaW5pIikpfSl9LFgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9''@;'; put 'put ''ZnVuY3Rpb24gSihtLEE9ITEsYWU9W10pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgaWUobSxBLGFlKSkuZmlsdGVyKHdlPT53ZS5lbmRzV2l0aCgiLnNhcyIpKX0pfSxYLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9ZnVuY3Rpb24gbmUobSl7''@;'; put 'put ''cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihBPT5BLmZpbHRlcihhZT0+YWUuaXNEaXJlY3RvcnkoKSkubWFwKGFlPT5hZS5uYW1lKSl9KX0sWC5saXN0Rmls''@;'; put 'put ''ZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9aWUsWC5jcmVhdGVGb2xkZXI9bGUsWC5jcmVhdGVGaWxlPWZ1bmN0aW9uIG1lKG0sQSxhZSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKChtPVNlKG0pKS5zcGxpdChGLmRlZmF1bHQuc2VwKS5sZW5ndGg+MSl7bGV0''@;'; put 'put ''IHRlPW0uc3BsaXQoRi5kZWZhdWx0LnNlcCk7dGUucG9wKCk7Y29uc3Qgc2U9dGUuam9pbihGLmRlZmF1bHQuc2VwKTsoeWllbGQgSyhzZSkpfHwoeWllbGQgbGUoc2UpKX1yZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLndyaXRlRmlsZShtLEEsYWUpfSl9LFguZGVsZXRlRmlsZT1mdW5jdGlv''@;'; put 'put ''biBfZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5yZW1vdmUobSl9KX0sWC5kZWxldGVGb2xkZXI9ZnVuY3Rpb24gVGUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQu''@;'; put 'put ''cm0obSx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9KX0sWC51bmlmeUZpbGVQYXRoPVNlLFguZ2V0UmVsYXRpdmVQYXRoPWZ1bmN0aW9uIHplKG0sQSl7Y29uc3QgYWU9bS5zcGxpdChGLmRlZmF1bHQuc2VwKSx0ZT1BLnNwbGl0KEYuZGVmYXVsdC5zZXApO2xldCBzZT1bXSx3ZT1bXTthZS5m''@;'; put 'put ''b3JFYWNoKCh2ZSxYZSk9Pnt2b2lkIDAhPT10ZVtYZV0mJmFlW1hlXT09PXRlW1hlXT9zZS5wdXNoKHZlKTp2ZSYmd2UucHVzaCh2ZSl9KTtjb25zdCBVZT1zZS5qb2luKEYuZGVmYXVsdC5zZXApLEplPW5ldyBSZWdFeHAoYF4ke0YuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIp''@;'; put 'put ''fWApLG90PW5ldyBSZWdFeHAoYCR7Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIil9JGApO3JldHVybih3ZS5sZW5ndGg/YC4uJHtGLmRlZmF1bHQuc2VwfWAucmVwZWF0KHdlLmxlbmd0aCk6YC4ke0YuZGVmYXVsdC5zZXB9YCkrQS5yZXBsYWNlKFVlLCIiKS5yZXBsYWNlKEpl''@;'; put 'put ''LCIiKS5yZXBsYWNlKG90LCIiKX0sWC5tb3ZlRmlsZT1mdW5jdGlvbiBWKG0sQSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKG0sQSl9KX0sWC5jb3B5PWZ1bmN0aW9uIHAobSxBKXtyZXR1cm4gQih0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5jb3B5KG0sQSl9KX0sWC5wYXRoU2VwRXNjYXBlZD1GLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSxYLmJhc2U2NEVuY29kZUltYWdlRmlsZT1mdW5jdGlvbiBiKG0pe3JldHVybiBCKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gWShtKS50aGVuKEE9PntsZXQgYWU9Ri5kZWZhdWx0LmV4dG5hbWUobSkuc3Vic3RyKDEpfHwicG5nIjtyZXR1cm4ic3ZnIj09PWFlJiYoYWU9InN2Zyt4bWwiKSwiZGF0YTppbWFnZS8iK2FlKyI7YmFzZTY0LCIrQS50b1N0cmluZygiYmFz''@;'; put 'put ''ZTY0Iil9KX0pfSxYLmJhc2U2NEVuY29kZUZpbGU9ZnVuY3Rpb24geChtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShtLHtlbmNvZGluZzoiYmFzZTY0In0pfSl9LFguZ2V0UmVhbFBhdGg9ZnVuY3Rp''@;'; put 'put ''b24gQyhtKXtyZXR1cm4gUC5kZWZhdWx0LnJlYWxwYXRoU3luYyhtKX0sWC5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbiBUKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgei5maWxlRXhpc3RzKG0pKXx8KHlpZWxkIHouY3JlYXRlRmls''@;'; put 'put ''ZShtLCIiKSksUC5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKG0se2ZsYWdzOiJhIn0pfSl9LFguY3JlYXRlUmVhZFN0cmVhbT1tPT5CKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQuY3JlYXRlUmVhZFN0cmVhbShtKX0pLFgudGVzdEZpbGVSZWdF''@;'; put 'put ''eHA9L1wudGVzdFwuKFxkK1wuKT9zYXMkL2ksWC5pc1Rlc3RGaWxlPW09PlgudGVzdEZpbGVSZWdFeHAudGVzdChtKSxYLmdldExpbmVFbmRpbmc9bT0+bmV3IFJlZ0V4cChOLkxpbmVFbmRpbmdzLkNSTEYpLnRlc3QobSk/Ti5MaW5lRW5kaW5ncy5DUkxGOk4uTGluZUVuZGluZ3MuTEZ9LDU2''@;'; put 'put ''MjY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LFguZ2V0QWJzb2x1dGVQYXRoPXZvaWQgMDtjb25zdCBfPUkoeSgyNTIwKSksZz1JKHkoNzQzNSkpO1guZ2V0QWJzb2x1dGVQYXRoPSh3LFApPT5fLmRlZmF1bHQuaXNBYnNvbHV0ZSh3KXx8L15+Ly5leGVjKHcpP18uZGVmYXVsdC5ub3JtYWxpemUody5yZXBsYWNlKC9efi8sZy5kZWZhdWx0''@;'; put 'put ''LmhvbWVkaXIoKSkpOl8uZGVmYXVsdC5qb2luKFAsdyl9LDI5NzU6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHcsUCxGLE8pe3ZvaWQgMD09PU8mJihPPUYpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eSh3LE8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFBbRl19fSl9OmZ1bmN0aW9uKHcsUCxGLE8pe3ZvaWQgMD09PU8mJihPPUYpLHdbT109UFtGXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBGIGluIHcp''@;'; put 'put ''ImRlZmF1bHQiIT09RiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEYpJiZJKFAsdyxGKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucmVhZENzdj1YLmNyZWF0ZUNzdj1YLnVwZGF0ZUNzdj1YLmdldExpbmVFbmRp''@;'; put 'put ''bmc9WC50ZXN0RmlsZVJlZ0V4cD1YLmlzVGVzdEZpbGU9WC5nZXRSZWFsUGF0aD1YLmJhc2U2NEVuY29kZUZpbGU9WC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9WC5jb3B5PVgucGF0aFNlcEVzY2FwZWQ9WC5tb3ZlRmlsZT1YLnVuaWZ5RmlsZVBhdGg9WC5nZXRSZWxhdGl2ZVBhdGg9WC5kZWxl''@;'; put 'put ''dGVGb2xkZXI9WC5kZWxldGVGaWxlPVguY3JlYXRlV3JpdGVTdHJlYW09WC5jcmVhdGVSZWFkU3RyZWFtPVguY3JlYXRlRm9sZGVyPVguY3JlYXRlRmlsZT1YLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U2FzRmlsZXNJbkZv''@;'; put 'put ''bGRlcj1YLmxpc3RJbmlGaWxlc0luRm9sZGVyPVgubGlzdEZpbGVzSW5Gb2xkZXI9WC5yZWFkRmlsZUJpbmFyeT1YLnJlYWRGaWxlPVguaXNGb2xkZXI9WC5mb2xkZXJFeGlzdHM9WC5maWxlRXhpc3RzPXZvaWQgMDt2YXIgZz15KDE1NTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJmaWxl''@;'; put 'put ''RXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5maWxlRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJmb2xkZXJFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmZvbGRlckV4aXN0c319KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoWCwiaXNGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmlzRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcucmVhZEZpbGV9fSksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsInJlYWRGaWxlQmluYXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5yZWFkRmlsZUJpbmFyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdEZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBnLmxpc3RGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0SW5pRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdEluaUZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFgsImxpc3RTYXNGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0U2FzRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGcubGlzdFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXJ9''@;'; put 'put ''fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGcuY3JlYXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVSZWFkU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVSZWFkU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVXcml0ZVN0cmVh''@;'; put 'put ''bSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY3JlYXRlV3JpdGVTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRlbGV0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmRlbGV0ZUZpbGV9fSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KFgsImRlbGV0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVsZXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRSZWxhdGl2ZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdl''@;'; put 'put ''dFJlbGF0aXZlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidW5pZnlGaWxlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudW5pZnlGaWxlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibW92ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiBnLm1vdmVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJwYXRoU2VwRXNjYXBlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcucGF0aFNlcEVzY2FwZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNvcHkiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNvcHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImJhc2U2NEVuY29kZUltYWdlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlfX0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShYLCJiYXNlNjRFbmNvZGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5iYXNlNjRFbmNvZGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZXRSZWFsUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGcuZ2V0UmVhbFBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzVGVzdEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmlzVGVzdEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInRlc3RGaWxlUmVnRXhwIix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy50ZXN0RmlsZVJlZ0V4cH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0TGluZUVuZGluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZ2V0TGluZUVuZGluZ319KTt2YXIgQj15KDM5MDYpO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJ1cGRhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnVwZGF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jcmVhdGVDc3Z9fSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInJlYWRDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnJlYWRDc3Z9fSksXyh5KDU2MjYpLFgpfSwyNzc3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KSxYLm5ld0xpbmU9WC5jYXBpdGFsaXplRmlyc3RDaGFyPVguc2FuaXRpemVTcGVjaWFsQ2hhcnM9WC5wYWRXaXRoTnVtYmVyPXZvaWQgMDt2YXIgST15KDUzMDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJwYWRXaXRoTnVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gSS5wYWRXaXRoTnVtYmVyfX0pO3ZhciBfPXkoOTI3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInNhbml0aXplU3BlY2lhbENoYXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zYW5pdGl6ZVNwZWNpYWxDaGFyc319KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoWCwiY2FwaXRhbGl6ZUZpcnN0Q2hhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uY2FwaXRhbGl6ZUZpcnN0Q2hhcn19KTt2YXIgZz15KDE2MjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJuZXdMaW5lIix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5uZXdMaW5lfX0pfSw1MzA2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYWRXaXRoTnVtYmVyPXZvaWQgMCxYLnBhZFdpdGhOdW1iZXI9KEksXz0wKT0+ST45P0k6''@;'; put 'put ''YCR7X30ke0l9YH0sMTYyODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLm5ld0xpbmU9dm9pZCAwLFgubmV3TGluZT0oKT0+IndpbjMyIj09PUkucGxhdGZvcm0/IlxcclxcbiI6''@;'; put 'put ''IlxcbiJ9LDkyNzU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNhcGl0YWxpemVGaXJzdENoYXI9WC5zYW5pdGl6ZVNwZWNpYWxDaGFycz12b2lkIDAsWC5zYW5pdGl6ZVNwZWNpYWxDaGFycz1fPT5fLnJl''@;'; put 'put ''cGxhY2UoL1tcdTAwMWJcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csIiIpLFguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1fPT5fLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK18uc2xpY2UoMSl9LDY0Njc6ZnVuY3Rpb24o''@;'; put 'put ''dWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNTcGVjaWFs''@;'; put 'put ''TWlzc2luZz1YLmNob2ljZVZhbGlkYXRvcj1YLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1YLnVybFZhbGlkYXRvcj12b2lkIDA7Y29uc3QgXz1JKHkoNDgxKSk7WC51cmxWYWxpZGF0b3I9KEYsTyk9PiEhXy5kZWZhdWx0LmlzSHR0cFVyaShGKXx8ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShGKXx8''@;'; put 'put ''IiI9PT1GfHxPLFguY29uZmlybWF0aW9uVmFsaWRhdG9yPUY9PiEwPT09Rnx8ITE9PT1GLFguY2hvaWNlVmFsaWRhdG9yPShGLE8seik9PkY+MCYmRjw9T3x8eixYLmlzU3BlY2lhbE1pc3Npbmc9Rj0+KCJzdHJpbmciIT10eXBlb2YgRnx8IUYuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhw''@;'; put 'put ''KCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChGKX0sNzc1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZW5lcmF0ZVRpbWVzdGFtcD1YLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9WC5j''@;'; put 'put ''b252ZXJ0U2Vjb25kc1RvSG1zPXZvaWQgMDt2YXIgST15KDEzMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjb252ZXJ0U2Vjb25kc1RvSG1zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jb252ZXJ0U2Vjb25kc1RvSG1zfX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJ0aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZW5lcmF0ZVRpbWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2VuZXJhdGVUaW1lc3RhbXB9fSl9LDEzMDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY29udmVydFNlY29uZHNUb0htcz1YLmdlbmVyYXRlVGltZXN0YW1wPVgu''@;'; put 'put ''dGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7Y29uc3QgST15KDI3NzcpO1gudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz0odz1EYXRlLm5vdygpKT0+e2NvbnN0IFA9bmV3IERhdGUodyk7cmV0dXJuW1AuZ2V0RnVsbFllYXIoKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0TW9u''@;'; put 'put ''dGgoKSsxKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0RGF0ZSgpKV0uam9pbigiLyIpKyIgIitbKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldEhvdXJzKCkpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXRNaW51dGVzKCkpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXRTZWNvbmRzKCkpXS5q''@;'; put 'put ''b2luKCI6Iil9LFguZ2VuZXJhdGVUaW1lc3RhbXA9KHc9IiIsUCk9Pntjb25zdCBGPW5ldyBEYXRlO2xldCBPPVtGLmdldFVUQ0Z1bGxZZWFyKCksRi5nZXRVVENNb250aCgpKzEsRi5nZXRVVENEYXRlKCksRi5nZXRVVENIb3VycygpLEYuZ2V0VVRDTWludXRlcygpLEYuZ2V0VVRDU2Vjb25k''@;'; put 'put ''cygpXTtyZXR1cm4gTz1PLm1hcCh6PT4oMCxJLnBhZFdpdGhOdW1iZXIpKHopKSxQJiZ3JiZQPE8ubGVuZ3RoJiZQPj0wJiZPLnNwbGljZShQLDAsdyksTz1PLmpvaW4oUD8iIjp3KSxPfSxYLmNvbnZlcnRTZWNvbmRzVG9IbXM9dz0+e2lmKCF3KXJldHVybiIwIHNlY29uZCI7Y29uc3QgUD1N''@;'; put 'put ''YXRoLmZsb29yKHcvNjApLEY9TWF0aC5mbG9vcihQLzYwKSxPPVAlNjAsej13JTYwO2xldCBOPSIiO3JldHVybiBGPjAmJihOPUYrIiBob3VyIisoRj4xPyJzIjoiIikpLE8+MCYmKE4rPWAke04/IiwgIjoiIn0ke099IG1pbnV0ZSR7Tz4xPyJzIjoiIn1gKSx6PjAmJihOKz1gJHtOPyIsICI6''@;'; put 'put ''IiJ9JHt6fSBzZWNvbmQke3o+MT8icyI6IiJ9YCksTn19LDgyMzk6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbmZpZ1R5cGVzPXZvaWQgMCwoST1YLkNvbmZpZ1R5cGVzfHwoWC5Db25maWdU''@;'; put 'put ''eXBlcz17fSkpLkJ1aWxkPSJidWlsZENvbmZpZyIsSS5TZXJ2aWNlPSJzZXJ2aWNlQ29uZmlnIixJLkpvYj0iam9iQ29uZmlnIixJLlRlc3Q9InRlc3RDb25maWciLEkuRG9jPSJkb2NDb25maWciLEkuRGVwbG95PSJkZXBsb3lDb25maWciLEkuU3RyZWFtPSJzdHJlYW1Db25maWciLEkuQXV0''@;'; put 'put ''aD0iYXV0aENvbmZpZyJ9LDI0Mjc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTg5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSl9LDM2OTI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDcyOToodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''TGluZUVuZGluZ3M9dm9pZCAwLChJPVguTGluZUVuZGluZ3N8fChYLkxpbmVFbmRpbmdzPXt9KSkuQ1JMRj0iXHJcbiIsSS5MRj0iXG4ifSw2OTM5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5N''@;'; put 'put ''ZW1iZXJUeXBlPXZvaWQgMCwoST1YLk1lbWJlclR5cGV8fChYLk1lbWJlclR5cGU9e30pKS5zZXJ2aWNlPSJzZXJ2aWNlIixJLmZpbGU9ImZpbGUiLEkuZm9sZGVyPSJmb2xkZXIifSwzMzI3Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSl9LDUxNjU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzkwMDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9i''@;'; put 'put ''amVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3dd''@;'; put 'put ''fSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksXyh5KDgyMzkpLFgpLF8oeSgyNDI3KSxYKSxfKHkoMTg5KSxYKSxfKHkoMzY5MiksWCksXyh5KDY5MzkpLFgpLF8oeSgzMzI3KSxYKSxfKHkoNTE2NSksWCksXyh5KDQwNjkpLFgpLF8oeSg4OTMyKSxYKSxfKHkoNCksWCksXyh5KDIwMTUpLFgpLF8oeSg4NTE1KSxYKSxf''@;'; put 'put ''KHkoNTMxMyksWCksXyh5KDg5NzkpLFgpLF8oeSg0NzI5KSxYKX0sNDA2OToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNNYWNyb1ZhcnM9dm9pZCAwLFguaXNNYWNyb1ZhcnM9ST0+SSYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBJLm1hY3JvVmFycyYmIUFycmF5LmlzQXJyYXkoSS5tYWNyb1ZhcnMpfSw4OTMyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU0pzRmlsZVR5cGU9dm9pZCAwLChJPVguU0FTSnNGaWxlVHlwZXx8KFguU0FTSnNGaWxlVHlwZT17fSkpLnNlcnZpY2U9IlNlcnZpY2UiLEkuam9iPSJKb2IiLEkudGVzdD0iVGVzdCIsSS5maWxlPSJGaWxlIn0s''@;'; put 'put ''MjAxNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXJ2''@;'; put 'put ''ZXJUeXBlPXZvaWQgMCwoST1YLlNlcnZlclR5cGV8fChYLlNlcnZlclR5cGU9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixJLlNhczk9IlNBUzkiLEkuU2FzanM9IlNBU0pTIn0sNTMxMzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2''@;'; put 'put ''YWx1ZTohMH0pfSw4OTc5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlRhcmdldD12b2lkIDA7Y29uc3QgST15KDgyMzkpLF89eSg4NTE1KSxnPXkoNjc4MSk7WC5UYXJnZXQ9Y2xhc3MgQntjb25zdHJ1''@;'; put 'put ''Y3RvcihQLEY9e30pe3RoaXMuX3NlcnZlclR5cGU9Xy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsdGhpcy5nZXRDb25maWc9KE8seik9Pk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jb25maWdbT118fHt9KSx6W09dKTt0cnl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlk''@;'; put 'put ''IHRhcmdldDogSW5wdXQgSlNPTiBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTt0aGlzLl9jb25maWc9Rix0aGlzLl9uYW1lPSgwLGcudmFsaWRhdGVUYXJnZXROYW1lKShQLm5hbWUpLHRoaXMuX3NlcnZlclVybD0oMCxnLnZhbGlkYXRlU2VydmVyVXJsKShQLnNlcnZlclVybCksdGhpcy5fc2Vy''@;'; put 'put ''dmVyVHlwZT0oMCxnLnZhbGlkYXRlU2VydmVyVHlwZSkoUC5zZXJ2ZXJUeXBlKSx0aGlzLl9odHRwc0FnZW50T3B0aW9ucz0oMCxnLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnMpKFAuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuX2FwcExvYz0oMCxnLnZhbGlkYXRlQXBwTG9jKShQLmFwcExv''@;'; put 'put ''YyksdGhpcy5fY29udGV4dE5hbWU9KDAsZy52YWxpZGF0ZUNvbnRleHROYW1lKShQLmNvbnRleHROYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3NlcnZlck5hbWU9KDAsZy52YWxpZGF0ZVNlcnZlck5hbWUpKFAuc2VydmVyTmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zeW5jRm9s''@;'; put 'put ''ZGVyPSgwLGcudmFsaWRhdGVTeW5jRm9sZGVyKShQLnN5bmNGb2xkZXIpLHRoaXMuX3JlcG9zaXRvcnlOYW1lPSgwLGcudmFsaWRhdGVSZXBvc2l0b3J5TmFtZSkoUC5yZXBvc2l0b3J5TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSxQLmRvY0NvbmZpZyYmKHRoaXMuX2RvY0NvbmZpZz0oMCxnLnZh''@;'; put 'put ''bGlkYXRlRG9jQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkRvYyxQKSkpLFAuYXV0aENvbmZpZyYmKHRoaXMuX2F1dGhDb25maWc9KDAsZy52YWxpZGF0ZUF1dGhDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuQXV0aCxQKSkpLFAuYXV0aENvbmZpZ1Nh''@;'; put 'put ''czkmJih0aGlzLl9hdXRoQ29uZmlnU2FzOT0oMCxnLnZhbGlkYXRlQXV0aENvbmZpZ1NhczkpKFAuYXV0aENvbmZpZ1NhczkpKSxQLmJ1aWxkQ29uZmlnJiYodGhpcy5fYnVpbGRDb25maWc9KDAsZy52YWxpZGF0ZUJ1aWxkQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkJ1''@;'; put 'put ''aWxkLFApLHRoaXMuX25hbWUpKSx0aGlzLl9kZXBsb3lDb25maWc9KDAsZy52YWxpZGF0ZURlcGxveUNvbmZpZykoUC5kZXBsb3lDb25maWc/dGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5EZXBsb3ksUCk6e2RlcGxveVNlcnZpY2VQYWNrOiEwLGRlcGxveVNjcmlwdHM6W119KSxQLnNl''@;'; put 'put ''cnZpY2VDb25maWcmJih0aGlzLl9zZXJ2aWNlQ29uZmlnPSgwLGcudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlNlcnZpY2UsUCkpKSxQLmpvYkNvbmZpZyYmKHRoaXMuX2pvYkNvbmZpZz0oMCxnLnZhbGlkYXRlSm9iQ29uZmlnKSh0aGlzLmdl''@;'; put 'put ''dENvbmZpZyhJLkNvbmZpZ1R5cGVzLkpvYixQKSkpLFAuc3RyZWFtQ29uZmlnJiYodGhpcy5fc3RyZWFtQ29uZmlnPSgwLGcudmFsaWRhdGVTdHJlYW1Db25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuU3RyZWFtLFApKSksUC50ZXN0Q29uZmlnJiYodGhpcy5fdGVzdENvbmZp''@;'; put 'put ''Zz0oMCxnLnZhbGlkYXRlVGVzdENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5UZXN0LFApKSksUC5tYWNyb0ZvbGRlcnMmJlAubWFjcm9Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX21hY3JvRm9sZGVycz1QLm1hY3JvRm9sZGVycyksUC5wcm9ncmFtRm9sZGVycyYmUC5wcm9n''@;'; put 'put ''cmFtRm9sZGVycy5sZW5ndGgmJih0aGlzLl9wcm9ncmFtRm9sZGVycz1QLnByb2dyYW1Gb2xkZXJzKSxQLmJpbmFyeUZvbGRlcnMmJlAuYmluYXJ5Rm9sZGVycy5sZW5ndGgmJih0aGlzLl9iaW5hcnlGb2xkZXJzPVAuYmluYXJ5Rm9sZGVycyksUC5zeW5jRGlyZWN0b3JpZXMmJlAuc3luY0Rp''@;'; put 'put ''cmVjdG9yaWVzLmxlbmd0aCYmKHRoaXMuX3N5bmNEaXJlY3Rvcmllcz0oMCxnLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzKShQLnN5bmNEaXJlY3RvcmllcykpLFAuc2FzanNCdWlsZEZvbGRlciYmKHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXI9KDAsZy52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXIp''@;'; put 'put ''KFAuc2FzanNCdWlsZEZvbGRlcikpLFAuc2FzanNSZXN1bHRzRm9sZGVyJiYodGhpcy5fc2FzanNSZXN1bHRzRm9sZGVyPSgwLGcudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXIpKFAuc2FzanNSZXN1bHRzRm9sZGVyKSl9Y2F0Y2goTyl7dGhyb3cgbmV3IEVycm9yKGBFcnJvciBwYXJzaW5n''@;'; put 'put ''IHRhcmdldDogJHtPLm1lc3NhZ2V9YCl9fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9Z2V0IHNlcnZlclVybCgpe3JldHVybiB0aGlzLl9zZXJ2ZXJVcmx9Z2V0IHNlcnZlclR5cGUoKXtyZXR1cm4gdGhpcy5fc2VydmVyVHlwZX1nZXQgaHR0cHNBZ2VudE9wdGlvbnMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5faHR0cHNBZ2VudE9wdGlvbnN9Z2V0IGFwcExvYygpe3JldHVybiB0aGlzLl9hcHBMb2N9Z2V0IGRvY0NvbmZpZygpe3JldHVybiB0aGlzLl9kb2NDb25maWd9Z2V0IGF1dGhDb25maWcoKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ31nZXQgYXV0aENvbmZpZ1NhczkoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fYXV0aENvbmZpZ1Nhczl9Z2V0IGJ1aWxkQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2J1aWxkQ29uZmlnfWdldCBkZXBsb3lDb25maWcoKXtyZXR1cm4gdGhpcy5fZGVwbG95Q29uZmlnfWdldCBzZXJ2aWNlQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3NlcnZpY2VDb25maWd9Z2V0IGpvYkNv''@;'; put 'put ''bmZpZygpe3JldHVybiB0aGlzLl9qb2JDb25maWd9Z2V0IHN0cmVhbUNvbmZpZygpe3JldHVybiB0aGlzLl9zdHJlYW1Db25maWd9Z2V0IG1hY3JvRm9sZGVycygpe3JldHVybiB0aGlzLl9tYWNyb0ZvbGRlcnN9Z2V0IHByb2dyYW1Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX3Byb2dyYW1Gb2xk''@;'; put 'put ''ZXJzfWdldCBiaW5hcnlGb2xkZXJzKCl7cmV0dXJuIHRoaXMuX2JpbmFyeUZvbGRlcnN9Z2V0IGNvbnRleHROYW1lKCl7cmV0dXJuIHRoaXMuX2NvbnRleHROYW1lfWdldCBzZXJ2ZXJOYW1lKCl7cmV0dXJuIHRoaXMuX3NlcnZlck5hbWV9Z2V0IHJlcG9zaXRvcnlOYW1lKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3JlcG9zaXRvcnlOYW1lfWdldCB0ZXN0Q29uZmlnKCl7cmV0dXJuIHRoaXMuX3Rlc3RDb25maWd9Z2V0IHN5bmNGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc3luY0ZvbGRlcn1nZXQgc3luY0RpcmVjdG9yaWVzKCl7cmV0dXJuIHRoaXMuX3N5bmNEaXJlY3Rvcmllc31nZXQgc2FzanNCdWls''@;'; put 'put ''ZEZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc0J1aWxkRm9sZGVyfWdldCBzYXNqc1Jlc3VsdHNGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNSZXN1bHRzRm9sZGVyfXRvSnNvbihQPSEwKXt2YXIgRixPLHo7Y29uc3QgTj17bmFtZTp0aGlzLm5hbWUsc2VydmVyVXJsOnRoaXMuc2VydmVy''@;'; put 'put ''VXJsLHNlcnZlclR5cGU6dGhpcy5zZXJ2ZXJUeXBlLGh0dHBzQWdlbnRPcHRpb25zOnRoaXMuaHR0cHNBZ2VudE9wdGlvbnMsYXBwTG9jOnRoaXMuYXBwTG9jLGRvY0NvbmZpZzp0aGlzLmRvY0NvbmZpZyxkZXBsb3lDb25maWc6dGhpcy5kZXBsb3lDb25maWd9O3JldHVybiEobnVsbD09PShG''@;'; put 'put ''PXRoaXMubWFjcm9Gb2xkZXJzKXx8dm9pZCAwPT09RikmJkYubGVuZ3RoJiYoTi5tYWNyb0ZvbGRlcnM9dGhpcy5tYWNyb0ZvbGRlcnMpLCEobnVsbD09PShPPXRoaXMucHJvZ3JhbUZvbGRlcnMpfHx2b2lkIDA9PT1PKSYmTy5sZW5ndGgmJihOLnByb2dyYW1Gb2xkZXJzPXRoaXMucHJvZ3Jh''@;'; put 'put ''bUZvbGRlcnMpLCEobnVsbD09PSh6PXRoaXMuYmluYXJ5Rm9sZGVycyl8fHZvaWQgMD09PXopJiZ6Lmxlbmd0aCYmKE4uYmluYXJ5Rm9sZGVycz10aGlzLmJpbmFyeUZvbGRlcnMpLHRoaXMuYXV0aENvbmZpZyYmKE4uYXV0aENvbmZpZz10aGlzLmF1dGhDb25maWcpLHRoaXMuYXV0aENvbmZp''@;'; put 'put ''Z1NhczkmJihOLmF1dGhDb25maWdTYXM5PXRoaXMuYXV0aENvbmZpZ1NhczkpLHRoaXMuc2FzanNCdWlsZEZvbGRlcj9OLnNhc2pzQnVpbGRGb2xkZXI9dGhpcy5zYXNqc0J1aWxkRm9sZGVyOlAmJihOLnNhc2pzQnVpbGRGb2xkZXI9Zy5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUiksdGhp''@;'; put 'put ''cy5zYXNqc1Jlc3VsdHNGb2xkZXI/Ti5zYXNqc1Jlc3VsdHNGb2xkZXI9dGhpcy5zYXNqc1Jlc3VsdHNGb2xkZXI6UCYmKE4uc2FzanNSZXN1bHRzRm9sZGVyPWcuREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUiksdGhpcy5zeW5jRGlyZWN0b3JpZXM/Ti5zeW5jRGlyZWN0b3JpZXM9dGhp''@;'; put 'put ''cy5zeW5jRGlyZWN0b3JpZXM6UCYmKE4uc3luY0RpcmVjdG9yaWVzPVtdKSx0aGlzLmJ1aWxkQ29uZmlnP04uYnVpbGRDb25maWc9dGhpcy5idWlsZENvbmZpZzpQJiYoTi5idWlsZENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsYnVpbGRPdXRwdXRGaWxlTmFtZTpgJHt0''@;'; put 'put ''aGlzLm5hbWV9LnNhc2AsbWFjcm9WYXJzOnt9fSksdGhpcy5qb2JDb25maWc/Ti5qb2JDb25maWc9dGhpcy5qb2JDb25maWc6UCYmKE4uam9iQ29uZmlnPXtqb2JGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc2VydmljZUNvbmZp''@;'; put 'put ''Zz9OLnNlcnZpY2VDb25maWc9dGhpcy5zZXJ2aWNlQ29uZmlnOlAmJihOLnNlcnZpY2VDb25maWc9e3NlcnZpY2VGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc3RyZWFtQ29uZmlnP04uc3RyZWFtQ29uZmlnPXRoaXMuc3RyZWFt''@;'; put 'put ''Q29uZmlnOlAmJihOLnN0cmVhbUNvbmZpZz17c3RyZWFtV2ViRm9sZGVyOiIiLHN0cmVhbVdlYjohMSx3ZWJTb3VyY2VQYXRoOiIiLHN0cmVhbVNlcnZpY2VOYW1lOiIiLGFzc2V0UGF0aHM6W119KSx0aGlzLnRlc3RDb25maWc/Ti50ZXN0Q29uZmlnPXRoaXMudGVzdENvbmZpZzpQJiYoTi50''@;'; put 'put ''ZXN0Q29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e30sdGVzdFNldFVwOiIiLHRlc3RUZWFyRG93bjoiIn0pLHRoaXMuc2VydmVyVHlwZT09PV8uU2VydmVyVHlwZS5TYXNWaXlhP04uY29udGV4dE5hbWU9dGhpcy5jb250ZXh0TmFtZTp0aGlzLnNlcnZl''@;'; put 'put ''clR5cGU9PT1fLlNlcnZlclR5cGUuU2FzOSYmKE4uc2VydmVyTmFtZT10aGlzLnNlcnZlck5hbWUsTi5yZXBvc2l0b3J5TmFtZT10aGlzLnJlcG9zaXRvcnlOYW1lKSxOfX19LDY3ODE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1''@;'; put 'put ''bHR8fGZ1bmN0aW9uKHApe3JldHVybiBwJiZwLl9fZXNNb2R1bGU/cDp7ZGVmYXVsdDpwfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9WC52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9WC52YWxp''@;'; put 'put ''ZGF0ZVN5bmNEaXJlY3Rvcmllcz1YLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9WC52YWxpZGF0ZVN5bmNGb2xkZXI9WC52YWxpZGF0ZVNlcnZlck5hbWU9WC52YWxpZGF0ZUNvbnRleHROYW1lPVgudmFsaWRhdGVTdHJlYW1Db25maWc9WC52YWxpZGF0ZURlcGxveUNvbmZpZz1YLnZhbGlkYXRl''@;'; put 'put ''Sm9iQ29uZmlnPVgudmFsaWRhdGVUZXN0Q29uZmlnPVgudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPVgudmFsaWRhdGVCdWlsZENvbmZpZz1YLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9WC52YWxpZGF0ZUF1dGhDb25maWc9WC52YWxpZGF0ZURvY0NvbmZpZz1YLnZhbGlkYXRlQXBwTG9jPVgudmFs''@;'; put 'put ''aWRhdGVIdHRwc0FnZW50T3B0aW9ucz1YLnZhbGlkYXRlU2VydmVyVXJsPVgudmFsaWRhdGVUYXJnZXROYW1lPVgudmFsaWRhdGVTZXJ2ZXJUeXBlPVguREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj1YLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPXZvaWQgMDtjb25zdCBfPUkoeSg0''@;'; put 'put ''ODEpKSxnPXkoMzkwMCk7WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj0ic2FzanNidWlsZCIsWC5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSPSJzYXNqc3Jlc3VsdHMiLFgudmFsaWRhdGVTZXJ2ZXJUeXBlPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVy''@;'; put 'put ''IHR5cGU6IGBzZXJ2ZXJUeXBlYCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYocCE9PWcuU2VydmVyVHlwZS5TYXM5JiZwIT09Zy5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJnAhPT1nLlNlcnZlclR5cGUuU2FzanMpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlcnZlciB0eXBlOiBT''@;'; put 'put ''dXBwb3J0ZWQgdmFsdWVzIGZvciAgXGBzZXJ2ZXJUeXBlXGAgYXJlICR7Zy5TZXJ2ZXJUeXBlLlNhc1ZpeWF9LCAke2cuU2VydmVyVHlwZS5TYXM5fSBhbmQgJHtnLlNlcnZlclR5cGUuU2FzanN9LmApO3JldHVybiBwfSxYLnZhbGlkYXRlVGFyZ2V0TmFtZT1wPT57aWYoIXApdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihwLnRyaW0oKS5pbmNsdWRlcygiICIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBpbmNsdWRlIHNwYWNl''@;'; put 'put ''cy4iKTtpZighL15bYS16QS1aMC05XC1dKyQvaS50ZXN0KHApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGRhc2hlcy4iKTtyZXR1cm4gcH0sWC52YWxpZGF0ZVNlcnZlclVy''@;'; put 'put ''bD1wPT57aWYobnVsbD09cCYmKHA9IiIpLCIiIT09cCYmIV8uZGVmYXVsdC5pc0h0dHBVcmkocCkmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShwKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIFVSTDogYHNlcnZlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcg''@;'; put 'put ''b3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIik7cmV0dXJuIHB9LFgudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1wPT57aWYocCl7aWYoIm9iamVjdCIhPXR5cGVvZiBwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTog''@;'; put 'put ''YGh0dHBzQWdlbnRPcHRpb25zYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGFuIG9iamVjdCBvZiBgSHR0cHNBZ2VudE9wdGlvbnNgIik7aWYobnVsbD09cC5hbGxvd0luc2VjdXJlUmVxdWVzdHMpcC5hbGxvd0luc2VjdXJlUmVxdWVzdHM9ITE7ZWxzZSBpZigiYm9vbGVhbiIhPXR5''@;'; put 'put ''cGVvZiBwLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9ucy5hbGxvd0luc2VjdXJlUmVxdWVzdHNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYSBib29sZWFuIik7cmV0dXJuInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBwLmNhUGF0aCYmKHAuY2FQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLmtleVBhdGgmJihwLmtleVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAuY2VydFBhdGgmJihwLmNlcnRQYXRoPXZvaWQgMCkscH19LFgudmFsaWRhdGVBcHBMb2M9cD0+e2lmKCFwKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIXAuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIG11c3Qgc3RhcnQgd2l0aCBh''@;'; put 'put ''IGAvYC4iKTtyZXR1cm4gcH0sWC52YWxpZGF0ZURvY0NvbmZpZz1wPT57aWYocHx8KHA9e30pLCJib29sZWFuIiE9dHlwZW9mIHAuZGlzcGxheU1hY3JvQ29yZSYmKHAuZGlzcGxheU1hY3JvQ29yZT12b2lkIDApLCJib29sZWFuIiE9dHlwZW9mIHAuZW5hYmxlTGluZWFnZSYmKHAuZW5hYmxl''@;'; put 'put ''TGluZWFnZT12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5vdXREaXJlY3RvcnkmJihwLm91dERpcmVjdG9yeT12b2lkIDApLCJzdHJpbmciPT10eXBlb2YgcC5kYXRhQ29udHJvbGxlclVybCl7aWYoIiIhPT1wLmRhdGFDb250cm9sbGVyVXJsJiYhXy5kZWZhdWx0LmlzSHR0cFVyaShwLmRh''@;'; put 'put ''dGFDb250cm9sbGVyVXJsKSYmIV8uZGVmYXVsdC5pc0h0dHBzVXJpKHAuZGF0YUNvbnRyb2xsZXJVcmwpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEYXRhIENvbnRyb2xsZXIgVXJsOiBgZGF0YUNvbnRyb2xsZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEg''@;'; put 'put ''dmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpfWVsc2UgcC5kYXRhQ29udHJvbGxlclVybD12b2lkIDA7cmV0dXJuIHB9LFgudmFsaWRhdGVBdXRoQ29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25m''@;'; put 'put ''aWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwfSxYLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQu''@;'; put 'put ''Iik7aWYoIXAudXNlck5hbWV8fCFwLnBhc3N3b3JkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogdXNlck5hbWUgYW5kIHBhc3N3b3JkIGNhbiBub3QgYmUgZW1wdHkiKTtyZXR1cm4gcH0sWC52YWxpZGF0ZUJ1aWxkQ29uZmlnPShwLGIpPT57aWYoIXAp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJ1aWxkIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuYnVpbGRPdXRwdXRGaWxlTmFtZXx8KHAuYnVpbGRPdXRwdXRGaWxlTmFtZT1gJHtifS5zYXNgKSxwLmluaXRQcm9ncmFtfHwocC5pbml0UHJv''@;'; put 'put ''Z3JhbT0iIikscC50ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHB9LFgudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmljZSBjb25maWc6IEpTT04gY2Fubm90IGJl''@;'; put 'put ''IG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmluaXRQcm9ncmFtfHwocC5pbml0UHJvZ3JhbT0iIikscC50ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAuc2VydmljZUZvbGRlcnN8fChwLnNlcnZpY2VGb2xkZXJzPVtdKSxwLm1hY3JvVmFyc3x8KHAubWFjcm9WYXJzPXt9''@;'; put 'put ''KSxwfSxYLnZhbGlkYXRlVGVzdENvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRlc3QgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18''@;'; put 'put ''fChwLnRlcm1Qcm9ncmFtPSIiKSxwLm1hY3JvVmFyc3x8KHAubWFjcm9WYXJzPXt9KSxwLnRlc3RTZXRVcHx8KHAudGVzdFNldFVwPSIiKSxwLnRlc3RUZWFyRG93bnx8KHAudGVzdFRlYXJEb3duPSIiKSxwfSxYLnZhbGlkYXRlSm9iQ29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkludmFsaWQgam9iIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5qb2JGb2xkZXJzfHwocC5qb2JGb2xkZXJzPVtdKSxw''@;'; put 'put ''Lm1hY3JvVmFyc3x8KHAubWFjcm9WYXJzPXt9KSxwfSxYLnZhbGlkYXRlRGVwbG95Q29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVwbG95IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuZGVwbG95U2VydmljZVBh''@;'; put 'put ''Y2s9ISFwLmRlcGxveVNlcnZpY2VQYWNrLHAuZGVwbG95U2NyaXB0c3x8KHAuZGVwbG95U2NyaXB0cz1bXSkscH0sWC52YWxpZGF0ZVN0cmVhbUNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5k''@;'; put 'put ''ZWZpbmVkLiIpO2lmKCEwIT09cC5zdHJlYW1XZWImJiExIT09cC5zdHJlYW1XZWIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJgIGNhbm5vdCBiZSBhIG5vbi1ib29sZWFuIHZhbHVlLiIpO2lmKHAuc3RyZWFtV2ViJiYhcC5zdHJlYW1XZWJGb2xk''@;'; put 'put ''ZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJGb2xkZXJgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBgc3RyZWFtV2ViYCBpcyB0cnVlLiIpO2lmKHAuc3RyZWFtV2ViJiYhcC53ZWJTb3VyY2VQYXRoKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgd2ViU291cmNlUGF0aGAgc2hvdWxkIGNvbnRhaW4gdGhlIHBhdGggdG8geW91ciBmcm9udGVuZCBhcHBsaWNhdGlvbiBlZyBidWlsZCwgZGlzdCwgb3Igc3JjLiIpO3JldHVybiBwLnN0cmVhbUxvZ28mJiJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''cC5zdHJlYW1Mb2dvJiYocC5zdHJlYW1Mb2dvPXZvaWQgMCkscC5hc3NldFBhdGhzfHwocC5hc3NldFBhdGhzPVtdKSxwLnN0cmVhbVNlcnZpY2VOYW1lfHwocC5zdHJlYW1TZXJ2aWNlTmFtZT0iY2xpY2ttZSIpLHB9LFgudmFsaWRhdGVDb250ZXh0TmFtZT0ocCxiKT0+YiE9PWcuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNWaXlhfHxwP3A6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsWC52YWxpZGF0ZVNlcnZlck5hbWU9KHAsYik9PmIhPT1nLlNlcnZlclR5cGUuU2FzOXx8cD9wOiJTQVNBcHAiLFgudmFsaWRhdGVTeW5jRm9sZGVyPXA9PntpZigic3RyaW5nIj09dHlwZW9mIHAm''@;'; put 'put ''JnApcmV0dXJuIHB9LFgudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT0ocCxiKT0+YiE9PWcuU2VydmVyVHlwZS5TYXM5fHxwP3A6IkZvdW5kYXRpb24iLFgudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3JpZXMgY29u''@;'; put 'put ''ZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5mb3JFYWNoKGI9PntpZighYi5sb2NhbHx8IWIucmVtb3RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3J5IGNvbmZpZzogdmFsdWVzIG9mIHByb3BlcnR5ICdsb2NhbCcgYW5kICdy''@;'; put 'put ''ZW1vdGUgY2FuIG5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQiKX0pLHB9LFgudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPXA9PntpZigic3RyaW5nIiE9dHlwZW9mIHApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2YgdmFsdWUgKCR7dHlwZW9mIHB9KSBpcyBwcm92aWRlZCBmb3Ig''@;'; put 'put ''cHJvcGVydHkgJ3Nhc2pzQnVpbGRGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBwfHxYLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSfSxYLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPXA9PntpZigic3RyaW5nIiE9dHlwZW9mIHApdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGBJbnZhbGlkIHR5cGUgb2YgdmFsdWUgKCR7dHlwZW9mIHB9KSBpcyBwcm92aWRlZCBmb3IgcHJvcGVydHkgJ3Nhc2pzUmVzdWx0c0ZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIHB8fFguREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUn19''@;'; put 'put ''LDI5Mjc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5kZWNvZGVGcm9tQmFzZTY0PVguZW5jb2RlVG9CYXNlNjQ9dm9pZCAwO2NvbnN0IGc9Xyh5KDU4MzUpKSxCPSJ7c2FzanNfZW5jb2RlZH0iO1guZW5jb2RlVG9CYXNlNjQ9Rj0+e2NvbnN0IE89Zy5kZWZhdWx0LnJhbmRvbUJ5dGVzKDEwMCkudG9TdHJp''@;'; put 'put ''bmcoImhleCIpLHo9SS5mcm9tKE8rRikudG9TdHJpbmcoImJhc2U2NCIpO3JldHVybiBCK3p9LFguZGVjb2RlRnJvbUJhc2U2ND1GPT5GLnN0YXJ0c1dpdGgoQik/KEY9Ri5yZXBsYWNlKC9ee3Nhc2pzX2VuY29kZWR9LywiIiksSS5mcm9tKEYsImJhc2U2NCIpLnRvU3RyaW5nKCkuc3Vic3Ry''@;'; put 'put ''aW5nKDIwMCkpOkZ9LDU4MToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYnl0ZXNUb1NpemU9dm9pZCAwLFguYnl0ZXNUb1NpemU9KEksXz0xLGc9MTA5OTUxMTYyNzc3Nik9PntpZigwPT09SSlyZXR1cm4i''@;'; put 'put ''MCBCIjtJPUk+Zz9nOkk7Y29uc3QgUD1fPDA/MDpfLEY9TWF0aC5mbG9vcihNYXRoLmxvZyhJKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKEkvTWF0aC5wb3coMTAyNCxGKSkudG9GaXhlZChQKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtGXX19LDg2NTM6KHVlLFgpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNodW5rPXZvaWQgMCxYLmNodW5rPWZ1bmN0aW9uIHkoSSxfPTIyMCl7cmV0dXJuIEkubGVuZ3RoPD1fP1tJXTooSS5tYXRjaChuZXcgUmVnRXhwKCIuezEsIitfKyJ9IiwiZyIpKXx8W10p''@;'; put 'put ''LmZpbHRlcihnPT4hIWcpfX0sNjQ1NzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGlmZj12b2lkIDAsWC5kaWZmPWZ1bmN0aW9uIHkoSSxfKXtyZXR1cm5bLi4uSS5maWx0ZXIodz0+Im9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiB3PyFKU09OLnN0cmluZ2lmeShfKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh3KSk6IV8uaW5jbHVkZXModykpLC4uLl8uZmlsdGVyKHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoSSkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiFJLmluY2x1ZGVzKHcp''@;'; put 'put ''KV19fSwxNTI5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRFeGVjdXRvclBhdGg9dm9pZCAwO2NvbnN0IHk9e1NBU1ZJWUE6Ii9TQVNKb2JFeGVjdXRpb24iLFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNz''@;'; put 'put ''L2RvIn07WC5nZXRFeGVjdXRvclBhdGg9Xz0+Xz8oXz1fLnRvVXBwZXJDYXNlKCkseVtfXXx8IiIpOiIifSwzMzE2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFRyZWVFeGFtcGxlPVguaXNGaWxl''@;'; put 'put ''VHJlZT12b2lkIDA7Y29uc3QgST15KDM5MDApO1guaXNGaWxlVHJlZT1GPT5GJiZGLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRi5tZW1iZXJzKSYmMD09PUYubWVtYmVycy5maWx0ZXIoTz0+IWcoTykmJiFCKE8pJiYhdyhPKSkubGVuZ3RoO2NvbnN0IGc9Rj0+RiYmInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5zZXJ2aWNlJiYic3RyaW5nIj09dHlwZW9mIEYuY29kZSxCPUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuZmlsZSYmInN0cmluZyI9PXR5cGVvZiBGLmNvZGUsdz1GPT5GJiYic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLmZvbGRlciYmRi5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEYubWVtYmVycykmJjA9PT1GLm1lbWJlcnMuZmlsdGVyKE89PiFnKE8pJiYhQihPKSYmIXcoTykpLmxlbmd0aDtYLmdldFRyZWVFeGFtcGxlPSgpPT4oe21lbWJl''@;'; put 'put ''cnM6W3tuYW1lOiJqb2JzIix0eXBlOkkuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6ImV4dHJhY3QiLHR5cGU6SS5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToibWFrZWRhdGExIix0eXBlOkkuTWVtYmVyVHlwZS5zZXJ2aWNlLGNvZGU6IiVwdXQgSGVsbG8gV29y''@;'; put 'put ''bGQhOyJ9XX1dfV19KX0sNjI2NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTixMLEssVSl7dm9pZCAwPT09VSYmKFU9SyksT2JqZWN0LmRlZmluZVByb3BlcnR5KE4sVSx7ZW51''@;'; put 'put ''bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTFtLXX19KX06ZnVuY3Rpb24oTixMLEssVSl7dm9pZCAwPT09VSYmKFU9SyksTltVXT1MW0tdfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oTixMKXtmb3IodmFyIEsgaW4gTikiZGVmYXVsdCIhPT1LJiYhT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEwsSykmJkkoTCxOLEspfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jaHVuaz1YLmRpZmY9WC5ieXRlc1RvU2l6ZT1YLmdldEV4ZWN1dG9yUGF0aD1YLmRlY29kZUZyb21CYXNlNjQ9''@;'; put 'put ''WC5lbmNvZGVUb0Jhc2U2ND1YLnVybE9yaWdpbj1YLmdlbmVyYXRlUGF0aEZvclNhcz1YLmdldE1hY3Jvc1BhdGg9WC5lc2NhcGVXaW5TbGFzaGVzPVguaXNMaW51eD1YLmlzV2luZG93cz1YLnVuaXFBcnJheT1YLmFzeW5jRm9yRWFjaD1YLnV1aWR2ND12b2lkIDA7dmFyIGc9eSgxMTMxKTtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXVpZHY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51dWlkdjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImFzeW5jRm9yRWFjaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuYXN5bmNG''@;'; put 'put ''b3JFYWNofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ1bmlxQXJyYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnVuaXFBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiaXNXaW5kb3dzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZy5pc1dpbmRvd3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzTGludXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmlzTGludXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImVzY2FwZVdpblNsYXNoZXMiLHtlbnVtZXJhYmxlOiEwLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiBnLmVzY2FwZVdpblNsYXNoZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldE1hY3Jvc1BhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdldE1hY3Jvc1BhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdl''@;'; put 'put ''bmVyYXRlUGF0aEZvclNhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZ2VuZXJhdGVQYXRoRm9yU2FzfX0pLF8oeSgzMzE2KSxYKTt2YXIgQj15KDk2NTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ1cmxPcmlnaW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBCLnVybE9yaWdpbn19KTt2YXIgdz15KDI5MjcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJlbmNvZGVUb0Jhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuZW5jb2RlVG9CYXNlNjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''ImRlY29kZUZyb21CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmRlY29kZUZyb21CYXNlNjR9fSk7dmFyIFA9eSgxNTI5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0RXhlY3V0b3JQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gUC5nZXRFeGVjdXRvclBhdGh9fSk7dmFyIEY9eSg1ODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJieXRlc1RvU2l6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEYuYnl0ZXNUb1NpemV9fSk7dmFyIE89eSg2NDU3KTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiZGlmZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE8uZGlmZn19KTt2YXIgej15KDg2NTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHouY2h1bmt9fSl9LDk2NTI6KHVlLFgp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVybE9yaWdpbj12b2lkIDAsWC51cmxPcmlnaW49ST0+e2lmKCIiPT09SSlyZXR1cm4gSTtsZXQgXzt0cnl7Xz1uZXcgVVJMKEkpLm9yaWdpbn1jYXRjaHt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkludmFsaWQgVVJMLiIpfXJldHVybiBffX0sMTEzMTpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDQxNTUpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbihuZSxp''@;'; put 'put ''ZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP25lKFRlLnZhbHVlKTpmdW5jdGlvbiBKKG5lKXty''@;'; put 'put ''ZXR1cm4gbmUgaW5zdGFuY2VvZiBxP25lOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShuZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfSxCPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihXKXtyZXR1cm4gVyYm''@;'; put 'put ''Vy5fX2VzTW9kdWxlP1c6e2RlZmF1bHQ6V319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdlbmVyYXRlUGF0aEZvclNhcz1YLmdldE1hY3Jvc1BhdGg9WC5lc2NhcGVXaW5TbGFzaGVzPVguaXNMaW51eD1YLmlzV2luZG93cz1YLnVuaXFBcnJh''@;'; put 'put ''eT1YLnV1aWR2ND1YLmFzeW5jRm9yRWFjaD12b2lkIDA7Y29uc3Qgdz1CKHkoMjUyMCkpO1guYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIFAoVyxZKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Zm9yKGxldCBxPTA7cTxXLmxlbmd0aDtxKyspeWllbGQgWShXW3FdLHEs''@;'; put 'put ''Vyl9KX0sWC51dWlkdjQ9KCk9PiJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxXPT57Y29uc3QgWT0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09Vz9ZOjMmWXw4KS50b1N0cmluZygxNil9KSxYLnVuaXFBcnJheT1XPT5BcnJheS5m''@;'; put 'put ''cm9tKG5ldyBTZXQoVykpLFguaXNXaW5kb3dzPSgpPT4id2luMzIiPT09Xy5wbGF0Zm9ybSxYLmlzTGludXg9KCk9PiJsaW51eCI9PT1fLnBsYXRmb3JtLFguZXNjYXBlV2luU2xhc2hlcz1XPT4oMCxYLmlzV2luZG93cykoKT9XLnJlcGxhY2UoL1xcL2csIlxcXFwiKTpXLFguZ2V0TWFjcm9z''@;'; put 'put ''UGF0aD0oKT0+dy5kZWZhdWx0LmpvaW4oIi8iLCIuLiIsIm1hY3JvcyIpLFguZ2VuZXJhdGVQYXRoRm9yU2FzPVc9PlcucmVwbGFjZSgvXFwvZywiLyIpfSw5ODA5Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmJpZ251bT15KDQ1OTApLEkuZGVmaW5lPXkoMjUwMCkuZGVmaW5lLEkuYmFzZT15KDE5''@;'; put 'put ''NzkpLEkuY29uc3RhbnRzPXkoNjgyNiksSS5kZWNvZGVycz15KDgzMDcpLEkuZW5jb2RlcnM9eSg2NTc5KX0sMjUwMDoodWUsWCx5KT0+e3ZhciBJPXkoOTgwOSksXz15KDU3MTcpO2Z1bmN0aW9uIEIodyxQKXt0aGlzLm5hbWU9dyx0aGlzLmJvZHk9UCx0aGlzLmRlY29kZXJzPXt9LHRoaXMu''@;'; put 'put ''ZW5jb2RlcnM9e319WC5kZWZpbmU9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gbmV3IEIoUCxGKX0sQi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKFApe3ZhciBGO3RyeXtGPXkoNTE0MCkucnVuSW5UaGlzQ29udGV4dCgiKGZ1bmN0aW9uICIrdGhpcy5uYW1lKyIoZW50aXR5KSB7XG4g''@;'; put 'put ''IHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xufSkiKX1jYXRjaHtGPWZ1bmN0aW9uKHope3RoaXMuX2luaXROYW1lZCh6KX19cmV0dXJuIF8oRixQKSxGLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKHope1AuY2FsbCh0aGlzLHopfSxuZXcgRih0aGlzKX0sQi5wcm90b3R5cGUuX2dl''@;'; put 'put ''dERlY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZGVjb2RlcnNbUF0pKSx0aGlzLmRlY29kZXJzW1BdfSxCLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rp''@;'; put 'put ''b24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKEYpLmRlY29kZShQLE8pfSxCLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShQPVB8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNbUF09dGhpcy5fY3JlYXRl''@;'; put 'put ''TmFtZWQoSS5lbmNvZGVyc1tQXSkpLHRoaXMuZW5jb2RlcnNbUF19LEIucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoRikuZW5jb2RlKFAsTyl9fSw2NjI1Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoMTk3OSkuUmVwb3J0ZXIs''@;'; put 'put ''Zz15KDg3NjQpLkJ1ZmZlcjtmdW5jdGlvbiBCKFAsRil7Xy5jYWxsKHRoaXMsRiksZy5pc0J1ZmZlcihQKT8odGhpcy5iYXNlPVAsdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1QLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIHcoUCxGKXtpZihBcnJh''@;'; put 'put ''eS5pc0FycmF5KFApKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1QLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHd8fChPPW5ldyB3KE8sRikpLHRoaXMubGVuZ3RoKz1PLmxlbmd0aCxPfSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgUCl7aWYoISgwPD1QJiZQ''@;'; put 'put ''PD0yNTUpKXJldHVybiBGLmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIFApdGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPWcuYnl0ZUxlbmd0aChQKTtlbHNle2lmKCFnLmlzQnVm''@;'; put 'put ''ZmVyKFApKXJldHVybiBGLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBQKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9UC5sZW5ndGh9fUkoQixfKSxYLkM9QixCLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjpf''@;'; put 'put ''LnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxCLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKEYpe3ZhciBPPW5ldyBCKHRoaXMuYmFzZSk7cmV0dXJuIE8ub2Zmc2V0PUYub2Zmc2V0LE8ubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PUYub2Zmc2V0LF8ucHJvdG90eXBlLnJl''@;'; put 'put ''c3RvcmUuY2FsbCh0aGlzLEYucmVwb3J0ZXIpLE99LEIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sQi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90''@;'; put 'put ''aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoRnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxCLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKEYsTyl7aWYoISh0aGlzLm9mZnNldCtGPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoT3x8IkRl''@;'; put 'put ''Y29kZXJCdWZmZXIgb3ZlcnJ1biIpO3ZhciB6PW5ldyBCKHRoaXMuYmFzZSk7cmV0dXJuIHouX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx6Lm9mZnNldD10aGlzLm9mZnNldCx6Lmxlbmd0aD10aGlzLm9mZnNldCtGLHRoaXMub2Zmc2V0Kz1GLHp9LEIucHJvdG90eXBlLnJh''@;'; put 'put ''dz1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKEY/Ri5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxYLlI9dyx3LnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIEZ8fChGPW5ldyBnKHRoaXMubGVuZ3RoKSksT3x8KE89MCksMD09PXRoaXMubGVu''@;'; put 'put ''Z3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oeil7ei5qb2luKEYsTyksTys9ei5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVlP0ZbT109dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/Ri53''@;'; put 'put ''cml0ZSh0aGlzLnZhbHVlLE8pOmcuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShGLE8pLE8rPXRoaXMubGVuZ3RoKSksRn19LDE5Nzk6KHVlLFgseSk9Pnt2YXIgST1YO0kuUmVwb3J0ZXI9eSg4NDY1KS5iLEkuRGVjb2RlckJ1ZmZlcj15KDY2MjUpLkMsSS5FbmNvZGVy''@;'; put 'put ''QnVmZmVyPXkoNjYyNSkuUixJLk5vZGU9eSgxOTQ5KX0sMTk0OToodWUsWCx5KT0+e3ZhciBJPXkoMTk3OSkuUmVwb3J0ZXIsXz15KDE5NzkpLkVuY29kZXJCdWZmZXIsZz15KDE5NzkpLkRlY29kZXJCdWZmZXIsQj15KDk3NDYpLHc9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2Jq''@;'; put 'put ''aWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFz''@;'; put 'put ''dHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxQPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQodyk7ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPXt9O3RoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZT1LLEsuZW5jPU4sSy5wYXJlbnQ9THx8bnVsbCxLLmNoaWxkcmVuPW51bGwsSy50YWc9bnVsbCxLLmFyZ3M9bnVsbCxLLnJldmVyc2VBcmdzPW51bGwsSy5jaG9pY2U9bnVsbCxLLm9wdGlvbmFsPSExLEsuYW55PSExLEsub2JqPSExLEsudXNlPW51bGwsSy51c2VEZWNvZGVyPW51''@;'; put 'put ''bGwsSy5rZXk9bnVsbCxLLmRlZmF1bHQ9bnVsbCxLLmV4cGxpY2l0PW51bGwsSy5pbXBsaWNpdD1udWxsLEsuY29udGFpbnM9bnVsbCxLLnBhcmVudHx8KEsuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX11ZS5leHBvcnRzPU87dmFyIHo9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRh''@;'; put 'put ''ZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtPLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBMPXRoaXMu''@;'; put 'put ''X2Jhc2VTdGF0ZSxLPXt9O3ouZm9yRWFjaChmdW5jdGlvbihXKXtLW1ddPUxbV119KTt2YXIgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihLLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VTdGF0ZT1LLFV9LE8ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlO1Au''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihLKXt0aGlzW0tdPWZ1bmN0aW9uKCl7dmFyIFc9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIEwuY2hpbGRyZW4ucHVzaChXKSxXW0tdLmFwcGx5KFcsYXJndW1lbnRzKX19LHRoaXMpfSxPLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihMKXt2YXIg''@;'; put 'put ''Sz10aGlzLl9iYXNlU3RhdGU7QihudWxsPT09Sy5wYXJlbnQpLEwuY2FsbCh0aGlzKSxLLmNoaWxkcmVuPUsuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksQi5lcXVhbChLLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290''@;'; put 'put ''IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sTy5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtMPUwuZmlsdGVy''@;'; put 'put ''KGZ1bmN0aW9uKFcpe3JldHVybiEoVyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09VS5sZW5ndGgmJihCKG51bGw9PT1LLmNoaWxkcmVuKSxLLmNoaWxkcmVuPVUsVS5mb3JFYWNoKGZ1bmN0aW9uKFcpe1cuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAh''@;'; put 'put ''PT1MLmxlbmd0aCYmKEIobnVsbD09PUsuYXJncyksSy5hcmdzPUwsSy5yZXZlcnNlQXJncz1MLm1hcChmdW5jdGlvbihXKXtpZigib2JqZWN0IiE9dHlwZW9mIFd8fFcuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFc7dmFyIFk9e307cmV0dXJuIE9iamVjdC5rZXlzKFcpLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24ocSl7cT09KDB8cSkmJihxfD0wKSxZW1dbcV1dPXF9KSxZfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9k''@;'; put 'put ''ZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3Rocm93''@;'; put 'put ''IG5ldyBFcnJvcihOKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSx3LmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2Uu''@;'; put 'put ''Y2FsbChhcmd1bWVudHMpO3JldHVybiBCKG51bGw9PT1LLnRhZyksSy50YWc9Tix0aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksTy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEwpe0IoTCk7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy51c2U9TCx0aGlzfSxP''@;'; put 'put ''LnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5kZWZhdWx0KSxLLmRlZmF1bHQ9TCxLLm9w''@;'; put 'put ''dGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuZXhwbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlv''@;'; put 'put ''bihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmltcGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9QXJyYXkucHJvdG90eXBlLnNsaWNl''@;'; put 'put ''LmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTC5vYmo9ITAsMCE9PUsubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKEspLHRoaXN9LE8ucHJvdG90eXBlLmtleT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsua2V5KSxLLmtleT1MLHRoaXN9LE8ucHJvdG90''@;'; put 'put ''eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LE8ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuY2hvaWNlKSxLLmNob2ljZT1MLHRoaXMuX3VzZUFyZ3MoT2JqZWN0''@;'; put 'put ''LmtleXMoTCkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBMW1VdfSkpLHRoaXN9LE8ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsuY29udGFpbnM9TCx0aGlzfSxPLnByb3RvdHlwZS5fZGVjb2RlPWZ1''@;'; put 'put ''bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1VLnBhcmVudClyZXR1cm4gTC53cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29kZShMLEspKTt2YXIgbmUsVz1VLmRlZmF1bHQsWT0hMCxxPW51bGw7aWYobnVsbCE9PVUua2V5JiYocT1MLmVudGVyS2V5KFUu''@;'; put 'put ''a2V5KSksVS5vcHRpb25hbCl7dmFyIGVlPW51bGw7aWYobnVsbCE9PVUuZXhwbGljaXQ/ZWU9VS5leHBsaWNpdDpudWxsIT09VS5pbXBsaWNpdD9lZT1VLmltcGxpY2l0Om51bGwhPT1VLnRhZyYmKGVlPVUudGFnKSxudWxsIT09ZWV8fFUuYW55KXtpZihZPXRoaXMuX3BlZWtUYWcoTCxlZSxV''@;'; put 'put ''LmFueSksTC5pc0Vycm9yKFkpKXJldHVybiBZfWVsc2V7dmFyIEo9TC5zYXZlKCk7dHJ5e251bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSyksWT0hMH1jYXRjaHtZPSExfUwucmVzdG9yZShKKX19aWYoVS5vYmomJlkm''@;'; put 'put ''JihuZT1MLmVudGVyT2JqZWN0KCkpLFkpe2lmKG51bGwhPT1VLmV4cGxpY2l0KXt2YXIgaWU9dGhpcy5fZGVjb2RlVGFnKEwsVS5leHBsaWNpdCk7aWYoTC5pc0Vycm9yKGllKSlyZXR1cm4gaWU7TD1pZX12YXIgbGU9TC5vZmZzZXQ7aWYobnVsbD09PVUudXNlJiZudWxsPT09VS5jaG9pY2Up''@;'; put 'put ''e1UuYW55JiYoSj1MLnNhdmUoKSk7dmFyIG1lPXRoaXMuX2RlY29kZVRhZyhMLG51bGwhPT1VLmltcGxpY2l0P1UuaW1wbGljaXQ6VS50YWcsVS5hbnkpO2lmKEwuaXNFcnJvcihtZSkpcmV0dXJuIG1lO1UuYW55P1c9TC5yYXcoSik6TD1tZX1pZihLJiZLLnRyYWNrJiZudWxsIT09VS50YWcm''@;'; put 'put ''JksudHJhY2soTC5wYXRoKCksbGUsTC5sZW5ndGgsInRhZ2dlZCIpLEsmJksudHJhY2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxMLm9mZnNldCxMLmxlbmd0aCwiY29udGVudCIpLFUuYW55fHwoVz1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxM''@;'; put 'put ''LEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspKSxMLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoIVUuYW55JiZudWxsPT09VS5jaG9pY2UmJm51bGwhPT1VLmNoaWxkcmVuJiZVLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oU2Upe1NlLl9kZWNvZGUoTCxLKX0pLFUuY29udGFpbnMmJigib2N0''@;'; put 'put ''c3RyIj09PVUudGFnfHwiYml0c3RyIj09PVUudGFnKSl7dmFyIF9lPW5ldyBnKFcpO1c9dGhpcy5fZ2V0VXNlKFUuY29udGFpbnMsTC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoX2UsSyl9fXJldHVybiBVLm9iaiYmWSYmKFc9TC5sZWF2ZU9iamVjdChuZSkpLG51bGw9PT1VLmtleXx8''@;'; put 'put ''bnVsbD09PVcmJiEwIT09WT9udWxsIT09cSYmTC5leGl0S2V5KHEpOkwubGVhdmVLZXkocSxVLmtleSxXKSxXfSxPLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09THx8InNldCI9PT1MP251bGw6InNl''@;'; put 'put ''cW9mIj09PUx8fCJzZXRvZiI9PT1MP3RoaXMuX2RlY29kZUxpc3QoSyxMLFcuYXJnc1swXSxVKTovc3RyJC8udGVzdChMKT90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJvYmppZCI9PT1MJiZXLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoSyxXLmFyZ3NbMF0sVy5hcmdzWzFdLFUpOiJvYmppZCI9''@;'; put 'put ''PT1MP3RoaXMuX2RlY29kZU9iamlkKEssbnVsbCxudWxsLFUpOiJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUw/dGhpcy5fZGVjb2RlVGltZShLLEwsVSk6Im51bGxfIj09PUw/dGhpcy5fZGVjb2RlTnVsbChLLFUpOiJib29sIj09PUw/dGhpcy5fZGVjb2RlQm9vbChLLFUpOiJvYmpEZXNj''@;'; put 'put ''Ij09PUw/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToiaW50Ij09PUx8fCJlbnVtIj09PUw/dGhpcy5fZGVjb2RlSW50KEssVy5hcmdzJiZXLmFyZ3NbMF0sVSk6bnVsbCE9PVcudXNlP3RoaXMuX2dldFVzZShXLnVzZSxLLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShLLFUpOksuZXJyb3Io''@;'; put 'put ''InVua25vd24gdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBVLnVzZURlY29kZXI9dGhpcy5fdXNlKEwsSyksQihudWxsPT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxVLnVzZURlY29kZXI9''@;'; put 'put ''VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sVS5pbXBsaWNpdCE9PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5jbG9uZSgpLFUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PVUuaW1wbGljaXQpLFUu''@;'; put 'put ''dXNlRGVjb2Rlcn0sTy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPW51bGwsWT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24ocSl7dmFyIGVlPUwuc2F2ZSgpLEo9VS5jaG9pY2VbcV07dHJ5''@;'; put 'put ''e3ZhciBuZT1KLl9kZWNvZGUoTCxLKTtpZihMLmlzRXJyb3IobmUpKXJldHVybiExO1c9e3R5cGU6cSx2YWx1ZTpuZX0sWT0hMH1jYXRjaHtyZXR1cm4gTC5yZXN0b3JlKGVlKSwhMX1yZXR1cm4hMH0sdGhpcyksWT9XOkwuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxPLnByb3RvdHlw''@;'; put 'put ''ZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IF8oTCx0aGlzLnJlcG9ydGVyKX0sTy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLmRlZmF1bHR8fFcuZGVmYXVsdCE9PUwpe3ZhciBZ''@;'; put 'put ''PXRoaXMuX2VuY29kZVZhbHVlKEwsSyxVKTtpZih2b2lkIDAhPT1ZJiYhdGhpcy5fc2tpcERlZmF1bHQoWSxLLFUpKXJldHVybiBZfX0sTy5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcucGFyZW50KXJldHVy''@;'; put 'put ''biBXLmNoaWxkcmVuWzBdLl9lbmNvZGUoTCxLfHxuZXcgSSk7dmFyIEo9bnVsbDtpZih0aGlzLnJlcG9ydGVyPUssVy5vcHRpb25hbCYmdm9pZCAwPT09TCl7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm47TD1XLmRlZmF1bHR9dmFyIFk9bnVsbCxxPSExO2lmKFcuYW55KUo9dGhpcy5fY3Jl''@;'; put 'put ''YXRlRW5jb2RlckJ1ZmZlcihMKTtlbHNlIGlmKFcuY2hvaWNlKUo9dGhpcy5fZW5jb2RlQ2hvaWNlKEwsSyk7ZWxzZSBpZihXLmNvbnRhaW5zKVk9dGhpcy5fZ2V0VXNlKFcuY29udGFpbnMsVSkuX2VuY29kZShMLEspLHE9ITA7ZWxzZSBpZihXLmNoaWxkcmVuKVk9Vy5jaGlsZHJlbi5tYXAo''@;'; put 'put ''ZnVuY3Rpb24obGUpe2lmKCJudWxsXyI9PT1sZS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gbGUuX2VuY29kZShudWxsLEssTCk7aWYobnVsbD09PWxlLl9iYXNlU3RhdGUua2V5KXJldHVybiBLLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBtZT1LLmVudGVyS2V5KGxlLl9i''@;'; put 'put ''YXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIEwpcmV0dXJuIEsuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciBfZT1sZS5fZW5jb2RlKExbbGUuX2Jhc2VTdGF0ZS5rZXldLEssTCk7cmV0dXJuIEsubGVhdmVLZXkobWUpLF9lfSx0''@;'; put 'put ''aGlzKS5maWx0ZXIoZnVuY3Rpb24obGUpe3JldHVybiBsZX0pLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKCJzZXFvZiI9PT1XLnRhZ3x8InNldG9mIj09PVcudGFnKXtpZighVy5hcmdzfHwxIT09Vy5hcmdzLmxlbmd0aClyZXR1cm4gSy5lcnJvcigiVG9vIG1hbnkg''@;'; put 'put ''YXJncyBmb3IgOiAiK1cudGFnKTtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gSy5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO3ZhciBlZT10aGlzLmNsb25lKCk7ZWUuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1''@;'; put 'put ''ZmZlcihMLm1hcChmdW5jdGlvbihsZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxMKS5fZW5jb2RlKGxlLEspfSxlZSkpfWVsc2UgbnVsbCE9PVcudXNlP0o9dGhpcy5fZ2V0VXNlKFcudXNlLFUpLl9lbmNvZGUoTCxLKTooWT10aGlzLl9lbmNvZGVQcmlt''@;'; put 'put ''aXRpdmUoVy50YWcsTCkscT0hMCk7aWYoIVcuYW55JiZudWxsPT09Vy5jaG9pY2Upe3ZhciBuZT1udWxsIT09Vy5pbXBsaWNpdD9XLmltcGxpY2l0OlcudGFnLGllPW51bGw9PT1XLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09bmU/bnVsbD09PVcudXNlJiZLLmVycm9y''@;'; put 'put ''KCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09Vy51c2UmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuZSxxLGllLFkpKX1yZXR1cm4gbnVsbCE9PVcuZXhwbGljaXQmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShXLmV4cGxpY2l0LCExLCJjb250ZXh0''@;'; put 'put ''IixKKSksSn0sTy5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPVUuY2hvaWNlW0wudHlwZV07cmV0dXJuIFd8fEIoITEsTC50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoVS5jaG9pY2Up''@;'; put 'put ''KSksVy5fZW5jb2RlKEwudmFsdWUsSyl9LE8ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoTCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO2lmKCJvYmppZCI9PT1MJiZVLmFyZ3MpcmV0dXJu''@;'; put 'put ''IHRoaXMuX2VuY29kZU9iamlkKEssVS5yZXZlcnNlQXJnc1swXSxVLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShLLEwpO2lm''@;'; put 'put ''KCJudWxsXyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1MfHwiZW51bSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoSyxVLmFyZ3MmJlUucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woSyk7aWYoIm9iakRl''@;'; put 'put ''c2MiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEssTCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihMKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KEwpfSxPLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5j''@;'; put 'put ''dGlvbihMKXtyZXR1cm4vXltBLVphLXowLTkgJ1woXClcKyxcLVwuXC86PVw/XSokLy50ZXN0KEwpfX0sODQ2NToodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyk7ZnVuY3Rpb24gXyhCKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6Qnx8e30sZXJyb3JzOltd''@;'; put 'put ''fX1mdW5jdGlvbiBnKEIsdyl7dGhpcy5wYXRoPUIsdGhpcy5yZXRocm93KHcpfVguYj1fLF8ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odyl7cmV0dXJuIHcgaW5zdGFuY2VvZiBnfSxfLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1''@;'; put 'put ''cm57b2JqOncub2JqLHBhdGhMZW46dy5wYXRoLmxlbmd0aH19LF8ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtQLm9iaj13Lm9iaixQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy5wYXRoTGVuKX0sXy5wcm90b3R5cGUuZW50ZXJLZXk9ZnVu''@;'; put 'put ''Y3Rpb24odyl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHcpfSxfLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7UC5wYXRoPVAucGF0aC5zbGljZSgwLHctMSl9LF8ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9u''@;'; put 'put ''KHcsUCxGKXt2YXIgTz10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh3KSxudWxsIT09Ty5vYmomJihPLm9ialtQXT1GKX0sXy5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSxfLnByb3RvdHlwZS5lbnRl''@;'; put 'put ''ck9iamVjdD1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGUsUD13Lm9iajtyZXR1cm4gdy5vYmo9e30sUH0sXy5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxGPVAub2JqO3JldHVybiBQLm9iaj13LEZ9LF8ucHJv''@;'; put 'put ''dG90eXBlLmVycm9yPWZ1bmN0aW9uKHcpe3ZhciBQLEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxPPXcgaW5zdGFuY2VvZiBnO2lmKFA9Tz93Om5ldyBnKEYucGF0aC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KHopKyJdIn0pLmpvaW4oIiIpLHcubWVzc2FnZXx8dyx3''@;'; put 'put ''LnN0YWNrKSwhRi5vcHRpb25zLnBhcnRpYWwpdGhyb3cgUDtyZXR1cm4gT3x8Ri5lcnJvcnMucHVzaChQKSxQfSxfLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIFAub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5p''@;'; put 'put ''c0Vycm9yKHcpP251bGw6dyxlcnJvcnM6UC5lcnJvcnN9Ond9LEkoZyxFcnJvciksZy5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbih3KXtpZih0aGlzLm1lc3NhZ2U9dysiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2Fw''@;'; put 'put ''dHVyZVN0YWNrVHJhY2UodGhpcyxnKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goUCl7dGhpcy5zdGFjaz1QLnN0YWNrfXJldHVybiB0aGlzfX0sMTYwOih1ZSxYLHkpPT57dmFyIEk9eSg2ODI2KTtYLnRhZ0NsYXNzPXswOiJ1bml2ZXJzYWwi''@;'; put 'put ''LDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sWC50YWdDbGFzc0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnQ2xhc3MpLFgudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJvYmppZCIsNzoib2JqRGVz''@;'; put 'put ''YyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoidXRj''@;'; put 'put ''dGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxYLnRhZ0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnKX0sNjgyNjoodWUsWCx5KT0+e3ZhciBJPVg7SS5fcmV2ZXJzZT1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgQj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZykuZm9yRWFjaChmdW5jdGlvbih3KXsoMHx3KT09dyYmKHd8PTApLEJbZ1t3XV09d30pLEJ9LEkuZGVyPXkoMTYwKX0sMTY3MToodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDk4MDkpLGc9Xy5iYXNlLEI9Xy5iaWdu''@;'; put 'put ''dW0sdz1fLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Zy5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5j''@;'; put 'put ''dGlvbiBPKE4sTCl7dmFyIEs9Ti5yZWFkVUludDgoTCk7aWYoTi5pc0Vycm9yKEspKXJldHVybiBLO3ZhciBVPXcudGFnQ2xhc3NbSz4+Nl0sVz0hKDMyJkspO2lmKDMxJn5LKUsmPTMxO2Vsc2V7dmFyIFk9Sztmb3IoSz0wOyEoMTI4Jn5ZKTspe2lmKFk9Ti5yZWFkVUludDgoTCksTi5pc0Vy''@;'; put 'put ''cm9yKFkpKXJldHVybiBZO0s8PD03LEt8PTEyNyZZfX1yZXR1cm57Y2xzOlUscHJpbWl0aXZlOlcsdGFnOkssdGFnU3RyOncudGFnW0tdfX1mdW5jdGlvbiB6KE4sTCxLKXt2YXIgVT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IoVSkpcmV0dXJuIFU7aWYoIUwmJjEyOD09PVUpcmV0dXJu''@;'; put 'put ''IG51bGw7aWYoISgxMjgmVSkpcmV0dXJuIFU7dmFyIFc9MTI3JlU7aWYoVz40KXJldHVybiBOLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7VT0wO2Zvcih2YXIgWT0wO1k8VztZKyspe1U8PD04O3ZhciBxPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihxKSlyZXR1cm4g''@;'; put 'put ''cTtVfD1xfXJldHVybiBVfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gTCBpbnN0YW5jZW9mIGcuRGVjb2RlckJ1ZmZlcnx8KEw9bmV3IGcuRGVjb2RlckJ1ZmZlcihMLEspKSx0aGlzLnRyZWUuX2RlY29kZShMLEspfSxJKEYsZy5Ob2RlKSxG''@;'; put 'put ''LnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihMLEssVSl7aWYoTC5pc0VtcHR5KCkpcmV0dXJuITE7dmFyIFc9TC5zYXZlKCksWT1PKEwsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrSysnIicpO3JldHVybiBMLmlzRXJyb3IoWSk/WTooTC5yZXN0b3JlKFcpLFkudGFnPT09S3x8WS50YWdT''@;'; put 'put ''dHI9PT1LfHxZLnRhZ1N0cisib2YiPT09S3x8VSl9LEYucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPU8oTCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVzt2YXIgWT16KEwsVy5wcmltaXRpdmUsJ0Zh''@;'; put 'put ''aWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK0srJyInKTtpZihMLmlzRXJyb3IoWSkpcmV0dXJuIFk7aWYoIVUmJlcudGFnIT09SyYmVy50YWdTdHIhPT1LJiZXLnRhZ1N0cisib2YiIT09SylyZXR1cm4gTC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrSysnIicpO2lmKFcucHJpbWl0''@;'; put 'put ''aXZlfHxudWxsIT09WSlyZXR1cm4gTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJyk7dmFyIHE9TC5zYXZlKCksZWU9dGhpcy5fc2tpcFVudGlsRW5kKEwsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0''@;'; put 'put ''dXJuIEwuaXNFcnJvcihlZSk/ZWU6KFk9TC5vZmZzZXQtcS5vZmZzZXQsTC5yZXN0b3JlKHEpLEwuc2tpcChZLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpKX0sRi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihMLEspe2Zvcig7Oyl7dmFyIFU9TyhMLEspO2lm''@;'; put 'put ''KEwuaXNFcnJvcihVKSlyZXR1cm4gVTt2YXIgWSxXPXooTCxVLnByaW1pdGl2ZSxLKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoWT1VLnByaW1pdGl2ZXx8bnVsbCE9PVc/TC5za2lwKFcpOnRoaXMuX3NraXBVbnRpbEVuZChMLEspLEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZigiZW5k''@;'; put 'put ''Ij09PVUudGFnU3RyKWJyZWFrfX0sRi5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oTCxLLFUsVyl7Zm9yKHZhciBZPVtdOyFMLmlzRW1wdHkoKTspe3ZhciBxPXRoaXMuX3BlZWtUYWcoTCwiZW5kIik7aWYoTC5pc0Vycm9yKHEpKXJldHVybiBxO3ZhciBlZT1VLmRlY29kZShMLCJk''@;'; put 'put ''ZXIiLFcpO2lmKEwuaXNFcnJvcihlZSkmJnEpYnJlYWs7WS5wdXNoKGVlKX1yZXR1cm4gWX0sRi5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbihMLEspe2lmKCJiaXRzdHIiPT09Syl7dmFyIFU9TC5yZWFkVUludDgoKTtyZXR1cm4gTC5pc0Vycm9yKFUpP1U6e3VudXNlZDpVLGRhdGE6''@;'; put 'put ''TC5yYXcoKX19aWYoImJtcHN0ciI9PT1LKXt2YXIgVz1MLnJhdygpO2lmKFcubGVuZ3RoJTI9PTEpcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7Zm9yKHZhciBZPSIiLHE9MDtxPFcubGVuZ3RoLzI7cSsrKVkrPVN0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUoVy5yZWFkVUludDE2QkUoMipxKSk7cmV0dXJuIFl9aWYoIm51bXN0ciI9PT1LKXt2YXIgZWU9TC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoZWUpP2VlOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIg''@;'; put 'put ''dW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09SylyZXR1cm4gTC5yYXcoKTtpZigib2JqRGVzYyI9PT1LKXJldHVybiBMLnJhdygpO2lmKCJwcmludHN0ciI9PT1LKXt2YXIgSj1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKEop''@;'; put 'put ''P0o6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdChLKT9MLnJhdygpLnRvU3RyaW5nKCk6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrSysiIHVuc3VwcG9ydGVkIil9''@;'; put 'put ''LEYucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihMLEssVSl7Zm9yKHZhciBXLFk9W10scT0wOyFMLmlzRW1wdHkoKTspe3ZhciBlZT1MLnJlYWRVSW50OCgpO3E8PD03LHF8PTEyNyZlZSwxMjgmZWV8fChZLnB1c2gocSkscT0wKX1pZigxMjgmZWUmJlkucHVzaChxKSxXPVU/WTpb''@;'; put 'put ''WVswXS80MHwwLFlbMF0lNDBdLmNvbmNhdChZLnNsaWNlKDEpKSxLKXt2YXIgaWU9S1tXLmpvaW4oIiAiKV07dm9pZCAwPT09aWUmJihpZT1LW1cuam9pbigiLiIpXSksdm9pZCAwIT09aWUmJihXPWllKX1yZXR1cm4gV30sRi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2''@;'; put 'put ''YXIgVT1MLnJhdygpLnRvU3RyaW5nKCk7aWYoImdlbnRpbWUiPT09Syl2YXIgVz0wfFUuc2xpY2UoMCw0KSxZPTB8VS5zbGljZSg0LDYpLHE9MHxVLnNsaWNlKDYsOCksZWU9MHxVLnNsaWNlKDgsMTApLEo9MHxVLnNsaWNlKDEwLDEyKSxuZT0wfFUuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0''@;'; put 'put ''Y3RpbWUiIT09SylyZXR1cm4gTC5lcnJvcigiRGVjb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO1c9MHxVLnNsaWNlKDAsMiksWT0wfFUuc2xpY2UoMiw0KSxxPTB8VS5zbGljZSg0LDYpLGVlPTB8VS5zbGljZSg2LDgpLEo9MHxVLnNsaWNlKDgsMTApLG5lPTB8VS5z''@;'; put 'put ''bGljZSgxMCwxMiksVz1XPDcwPzJlMytXOjE5MDArV31yZXR1cm4gRGF0ZS5VVEMoVyxZLTEscSxlZSxKLG5lLDApfSxGLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbihMKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oTCl7dmFyIEs9TC5yZWFk''@;'; put 'put ''VUludDgoKTtyZXR1cm4gTC5pc0Vycm9yKEspP0s6MCE9PUt9LEYucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oTCxLKXt2YXIgVT1MLnJhdygpLFc9bmV3IEIoVSk7cmV0dXJuIEsmJihXPUtbVy50b1N0cmluZygxMCldfHxXKSxXfSxGLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEws''@;'; put 'put ''Syl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoSykpLEwuX2dldERlY29kZXIoImRlciIpLnRyZWV9fSw4MzA3Oih1ZSxYLHkpPT57dmFyIEk9WDtJLmRlcj15KDE2NzEpLEkucGVtPXkoOTYzMSl9LDk2MzE6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg4NzY0KS5CdWZm''@;'; put 'put ''ZXIsZz15KDE2NzEpO2Z1bmN0aW9uIEIodyl7Zy5jYWxsKHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9SShCLGcpLHVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUCxGKXtmb3IodmFyIE89UC50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLHo9Ri5sYWJlbC50b1Vw''@;'; put 'put ''cGVyQ2FzZSgpLE49L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLEw9LTEsSz0tMSxVPTA7VTxPLmxlbmd0aDtVKyspe3ZhciBXPU9bVV0ubWF0Y2goTik7aWYobnVsbCE9PVcmJldbMl09PT16KXtpZigtMSE9PUwpe2lmKCJFTkQiIT09V1sxXSlicmVhaztLPVU7YnJlYWt9aWYo''@;'; put 'put ''IkJFR0lOIiE9PVdbMV0pYnJlYWs7TD1VfX1pZigtMT09PUx8fC0xPT09Syl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIreik7dmFyIFk9Ty5zbGljZShMKzEsSykuam9pbigiIik7WS5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciBxPW5l''@;'; put 'put ''dyBfKFksImJhc2U2NCIpO3JldHVybiBnLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLHEsRil9fSw2OTg0Oih1ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoODc2NCkuQnVmZmVyLGc9eSg5ODA5KSxCPWcuYmFzZSx3PWcuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5j''@;'; put 'put ''PSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtCLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIE8oTil7cmV0dXJuIE48MTA/IjAiK046Tn11ZS5leHBvcnRzPVAs''@;'; put 'put ''UC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKEwsSykuam9pbigpfSxJKEYsQi5Ob2RlKSxGLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKEwsSyxVLFcpe3ZhciBKLFk9ZnVuY3Rpb24geihOLEwsSyxVKXt2YXIgVztp''@;'; put 'put ''Zigic2Vxb2YiPT09Tj9OPSJzZXEiOiJzZXRvZiI9PT1OJiYoTj0ic2V0Iiksdy50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkoTikpVz13LnRhZ0J5TmFtZVtOXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgTnx8KDB8TikhPT1OKXJldHVybiBVLmVycm9yKCJVbmtub3duIHRhZzogIitOKTtX''@;'; put 'put ''PU59cmV0dXJuIFc+PTMxP1UuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihMfHwoV3w9MzIpLFd8PXcudGFnQ2xhc3NCeU5hbWVbS3x8InVuaXZlcnNhbCJdPDw2KX0oTCxLLFUsdGhpcy5yZXBvcnRlcik7aWYoVy5sZW5ndGg8MTI4KXJldHVybihKPW5l''@;'; put 'put ''dyBfKDIpKVswXT1ZLEpbMV09Vy5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbSixXXSk7Zm9yKHZhciBxPTEsZWU9Vy5sZW5ndGg7ZWU+PTI1NjtlZT4+PTgpcSsrOyhKPW5ldyBfKDIrcSkpWzBdPVksSlsxXT0xMjh8cSxlZT0xK3E7Zm9yKHZhciBuZT1XLmxlbmd0aDtuZT4w''@;'; put 'put ''O2VlLS0sbmU+Pj04KUpbZWVdPTI1NSZuZTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbSixXXSl9LEYucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oTCxLKXtpZigiYml0c3RyIj09PUspcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8TC51bnVzZWQs''@;'; put 'put ''TC5kYXRhXSk7aWYoImJtcHN0ciI9PT1LKXtmb3IodmFyIFU9bmV3IF8oMipMLmxlbmd0aCksVz0wO1c8TC5sZW5ndGg7VysrKVUud3JpdGVVSW50MTZCRShMLmNoYXJDb2RlQXQoVyksMipXKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihVKX1yZXR1cm4ibnVtc3RyIj09PUs/''@;'; put 'put ''dGhpcy5faXNOdW1zdHIoTCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1LP3RoaXMuX2lzUHJpbnRzdHIo''@;'; put 'put ''TCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBs''@;'; put 'put ''ZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KEspfHwib2JqRGVzYyI9PT1LP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5y''@;'; put 'put ''ZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrSysiIHVuc3VwcG9ydGVkIil9LEYucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihMLEssVSl7aWYoInN0cmluZyI9PXR5cGVvZiBMKXtpZighSylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5n''@;'; put 'put ''IG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFLLmhhc093blByb3BlcnR5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO0w9S1tMXS5zcGxpdCgvW1xzXC5dKy9nKTtmb3IodmFyIFc9MDtXPEwu''@;'; put 'put ''bGVuZ3RoO1crKylMW1ddfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShMKSlmb3IoTD1MLnNsaWNlKCksVz0wO1c8TC5sZW5ndGg7VysrKUxbV118PTA7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJh''@;'; put 'put ''eSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShMKSk7aWYoIVUpe2lmKExbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtMLnNwbGljZSgwLDIsNDAqTFswXStMWzFdKX12YXIgWT0wO2ZvcihXPTA7VzxMLmxl''@;'; put 'put ''bmd0aDtXKyspe3ZhciBxPUxbV107Zm9yKFkrKztxPj0xMjg7cT4+PTcpWSsrfXZhciBlZT1uZXcgXyhZKSxKPWVlLmxlbmd0aC0xO2ZvcihXPUwubGVuZ3RoLTE7Vz49MDtXLS0pZm9yKGVlW0otLV09MTI3JihxPUxbV10pOyhxPj49Nyk+MDspZWVbSi0tXT0xMjh8MTI3JnE7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZWUpfSxGLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihMLEspe3ZhciBVLFc9bmV3IERhdGUoTCk7cmV0dXJuImdlbnRpbWUiPT09Sz9VPVtPKFcuZ2V0RnVsbFllYXIoKSksTyhXLmdldFVUQ01vbnRoKCkrMSksTyhXLmdldFVUQ0RhdGUo''@;'; put 'put ''KSksTyhXLmdldFVUQ0hvdXJzKCkpLE8oVy5nZXRVVENNaW51dGVzKCkpLE8oVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09Sz9VPVtPKFcuZ2V0RnVsbFllYXIoKSUxMDApLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5nZXRV''@;'; put 'put ''VENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoVSwib2N0c3RyIil9LEYucHJv''@;'; put 'put ''dG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxGLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKEwsSyl7aWYoInN0cmluZyI9PXR5cGVvZiBMKXtpZighSylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3Ry''@;'; put 'put ''aW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFLLmhhc093blByb3BlcnR5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShMKSk7TD1LW0xdfWlmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2YgTCYmIV8uaXNCdWZmZXIoTCkpe3ZhciBVPUwudG9BcnJheSgpOyFMLnNpZ24mJjEyOCZVWzBdJiZVLnVuc2hpZnQoMCksTD1uZXcgXyhVKX1pZihfLmlzQnVmZmVyKEwpKXt2YXIgVz1MLmxlbmd0aDswPT09TC5sZW5ndGgmJlcrKzt2YXIgcT1uZXcgXyhXKTtyZXR1cm4gTC5jb3B5''@;'; put 'put ''KHEpLDA9PT1MLmxlbmd0aCYmKHFbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihxKX1pZihMPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTtpZihMPDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxMXSk7Vz0xO2Zvcih2YXIgWT1M''@;'; put 'put ''O1k+PTI1NjtZPj49OClXKys7Zm9yKFk9KHE9bmV3IEFycmF5KFcpKS5sZW5ndGgtMTtZPj0wO1ktLSlxW1ldPTI1NSZMLEw+Pj04O3JldHVybiAxMjgmcVswXSYmcS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IF8ocSkpfSxGLnByb3RvdHlwZS5fZW5jb2RlQm9v''@;'; put 'put ''bD1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMPzI1NTowKX0sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKEspKSxMLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVlfSxGLnByb3RvdHlwZS5f''@;'; put 'put ''c2tpcERlZmF1bHQ9ZnVuY3Rpb24oTCxLLFUpe3ZhciBZLFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLmRlZmF1bHQpcmV0dXJuITE7dmFyIHE9TC5qb2luKCk7aWYodm9pZCAwPT09Vy5kZWZhdWx0QnVmZmVyJiYoVy5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKFcuZGVm''@;'; put 'put ''YXVsdCxLLFUpLmpvaW4oKSkscS5sZW5ndGghPT1XLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihZPTA7WTxxLmxlbmd0aDtZKyspaWYocVtZXSE9PVcuZGVmYXVsdEJ1ZmZlcltZXSlyZXR1cm4hMTtyZXR1cm4hMH19LDY1Nzk6KHVlLFgseSk9Pnt2YXIgST1YO0kuZGVyPXko''@;'; put 'put ''Njk4NCksSS5wZW09eSgyODgzKX0sMjg4MzoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDY5ODQpO2Z1bmN0aW9uIGcoQil7Xy5jYWxsKHRoaXMsQiksdGhpcy5lbmM9InBlbSJ9SShnLF8pLHVlLmV4cG9ydHM9ZyxnLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odyxQKXtmb3IodmFy''@;'; put 'put ''IE89Xy5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyx3KS50b1N0cmluZygiYmFzZTY0Iiksej1bIi0tLS0tQkVHSU4gIitQLmxhYmVsKyItLS0tLSJdLE49MDtOPE8ubGVuZ3RoO04rPTY0KXoucHVzaChPLnNsaWNlKE4sTis2NCkpO3JldHVybiB6LnB1c2goIi0tLS0tRU5EICIrUC5sYWJl''@;'; put 'put ''bCsiLS0tLS0iKSx6LmpvaW4oIlxuIil9fSw0NTkwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2''@;'; put 'put ''YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxl''@;'; put 'put ''bmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5''@;'; put 'put ''e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoOTUwKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+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+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1W''@;'; put 'put ''ZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4x''@;'; put 'put ''MyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9''@;'; put 'put ''MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0''@;'; put 'put ''aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4y''@;'; put 'put ''Nil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNl''@;'; put 'put ''LFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''UmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3Zh''@;'; put 'put ''ciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUs''@;'; put 'put ''c24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxXdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNl''@;'; put 'put ''LHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''bnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4y''@;'; put 'put ''Nil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxj''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXww''@;'; put 'put ''KSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''TXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxX''@;'; put 'put ''ZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChV''@;'; put 'put ''ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxz''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwo''@;'; put 'put ''dXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+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 ''MipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0sTWU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSpNZTtNZT10ZSpN''@;'; put 'put ''ZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK01lLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9''@;'; 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 ''aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5j''@;'; put 'put ''bG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0o''@;'; put 'put ''cCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5t''@;'; put 'put ''dWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtU''@;'; put 'put ''Kyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hd''@;'; put 'put ''PXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1N''@;'; put 'put ''YXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1tt''@;'; put 'put ''K0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09''@;'; put 'put ''QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihw''@;'; put 'put ''LGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0''@;'; put 'put ''dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMu''@;'; put 'put ''c3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRo''@;'; put 'put ''aXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53''@;'; put 'put ''b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlz''@;'; put 'put ''LmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndv''@;'; put 'put ''cmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hd''@;'; put 'put ''KStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hd''@;'; put 'put ''PTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxl''@;'; put 'put ''bmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNo''@;'; put 'put ''bG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgu''@;'; put 'put ''bWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3Ry''@;'; put 'put ''aXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1i''@;'; put 'put ''JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihw''@;'; put 'put ''LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9''@;'; put 'put ''LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVz''@;'; put 'put ''aHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBi''@;'; put 'put ''PSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIg''@;'; put 'put ''Qz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5p''@;'; put 'put ''c0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2Fl''@;'; put 'put ''LS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7''@;'; put 'put ''KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2Nk''@;'; put 'put ''OnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5l''@;'; put 'put ''dyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZh''@;'; put 'put ''ciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJl''@;'; put 'put ''dHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4''@;'; put 'put ''PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEp''@;'; put 'put ''O3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9''@;'; put 'put ''LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAh''@;'; put 'put ''PT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3Ry''@;'; put 'put ''aXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1''@;'; put 'put ''bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBl''@;'; put 'put ''LnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9''@;'; put 'put ''PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09''@;'; put 'put ''PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVt''@;'; put 'put ''YmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJv''@;'; put 'put ''bVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''TXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu''@;'; put 'put ''cmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJ''@;'; put 'put ''bnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgp''@;'; put 'put ''LHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBm''@;'; put 'put ''ZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRo''@;'; put 'put ''aXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52''@;'; put 'put ''bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRt''@;'; put 'put ''cCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxp''@;'; put 'put ''ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQz''@;'; put 'put ''MDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1I''@;'; put 'put ''JngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4g''@;'; put 'put ''MD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsr''@;'; put 'put ''KXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYi''@;'; put 'put ''PT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRp''@;'; put 'put ''dmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1l''@;'; put 'put ''LmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9''@;'; put 'put ''ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1w''@;'; put 'put ''LmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHAp''@;'; put 'put ''LHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlz''@;'; put 'put ''Lmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygp''@;'; put 'put ''JiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhp''@;'; put 'put ''cyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2Uu''@;'; put 'put ''Y21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVu''@;'; put 'put ''Y3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEp''@;'; put 'put ''LnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0w''@;'; put 'put ''LEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9''@;'; put 'put ''MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''Lmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygp''@;'; put 'put ''fHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7''@;'; put 'put ''cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCku''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1''@;'; put 'put ''Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1k''@;'; put 'put ''KHVlKSx0aGlzKX0sOTI4MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89eSg1MTA4KTtmdW5jdGlvbiBnKFZlKXtyZXR1cm4oZz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihrZSl7cmV0''@;'; put 'put ''dXJuIHR5cGVvZiBrZX06ZnVuY3Rpb24oa2Upe3JldHVybiBrZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYma2UuY29uc3RydWN0b3I9PT1TeW1ib2wmJmtlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Yga2V9KShWZSl9ZnVuY3Rpb24gQihWZSxrZSl7Zm9yKHZhciBB''@;'; put 'put ''ZT0wO0FlPGtlLmxlbmd0aDtBZSsrKXt2YXIgX3Q9a2VbQWVdO190LmVudW1lcmFibGU9X3QuZW51bWVyYWJsZXx8ITEsX3QuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBfdCYmKF90LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVmUsUChfdC5rZXkpLF90KX19ZnVuY3Rp''@;'; put 'put ''b24gdyhWZSxrZSxBZSl7cmV0dXJuIGtlJiZCKFZlLnByb3RvdHlwZSxrZSksQWUmJkIoVmUsQWUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxWZX1mdW5jdGlvbiBQKFZlKXt2YXIga2U9ZnVuY3Rpb24gRihWZSxrZSl7aWYoIm9iamVjdCIh''@;'; put 'put ''PT1nKFZlKXx8bnVsbD09PVZlKXJldHVybiBWZTt2YXIgQWU9VmVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1BZSl7dmFyIF90PUFlLmNhbGwoVmUsa2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1nKF90KSlyZXR1cm4gX3Q7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1rZT9TdHJpbmc6TnVtYmVyKShWZSl9KFZlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWcoa2UpP2tlOlN0cmluZyhrZSl9dmFyIHplLFYsTj15KDIxMzYpLmNvZGVzLEw9Ti5FUlJf''@;'; put 'put ''QU1CSUdVT1VTX0FSR1VNRU5ULEs9Ti5FUlJfSU5WQUxJRF9BUkdfVFlQRSxVPU4uRVJSX0lOVkFMSURfQVJHX1ZBTFVFLFc9Ti5FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsWT1OLkVSUl9NSVNTSU5HX0FSR1MscT15KDU5NjEpLEo9eSg5NTM5KS5pbnNwZWN0LG5lPXkoOTUzOSkudHlwZXMs''@;'; put 'put ''aWU9bmUuaXNQcm9taXNlLGxlPW5lLmlzUmVnRXhwLG1lPXkoODE2MikoKSxfZT15KDU2MjQpKCksVGU9eSgxOTI0KSgiUmVnRXhwLnByb3RvdHlwZS50ZXN0Iik7ZnVuY3Rpb24gQygpe3ZhciBWZT15KDkxNTgpO3plPVZlLmlzRGVlcEVxdWFsLFY9VmUuaXNEZWVwU3RyaWN0RXF1YWx9dmFy''@;'; put 'put ''IEU9ITEsbT11ZS5leHBvcnRzPXdlLEE9e307ZnVuY3Rpb24gYWUoVmUpe3Rocm93IFZlLm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcj9WZS5tZXNzYWdlOm5ldyBxKFZlKX1mdW5jdGlvbiBzZShWZSxrZSxBZSxfdCl7aWYoIUFlKXt2YXIgbnQ9ITE7aWYoMD09PWtlKW50PSEwLF90PSJObyB2''@;'; put 'put ''YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihfdCBpbnN0YW5jZW9mIEVycm9yKXRocm93IF90O3ZhciBRZT1uZXcgcSh7YWN0dWFsOkFlLGV4cGVjdGVkOiEwLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46VmV9KTt0aHJvdyBRZS5n''@;'; put 'put ''ZW5lcmF0ZWRNZXNzYWdlPW50LFFlfX1mdW5jdGlvbiB3ZSgpe2Zvcih2YXIgVmU9YXJndW1lbnRzLmxlbmd0aCxrZT1uZXcgQXJyYXkoVmUpLEFlPTA7QWU8VmU7QWUrKylrZVtBZV09YXJndW1lbnRzW0FlXTtzZS5hcHBseSh2b2lkIDAsW3dlLGtlLmxlbmd0aF0uY29uY2F0KGtlKSl9bS5m''@;'; put 'put ''YWlsPWZ1bmN0aW9uIHRlKFZlLGtlLEFlLF90LG50KXt2YXIgdW4sUWU9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09UWU/dW49IkZhaWxlZCI6MT09PVFlPyhBZT1WZSxWZT12b2lkIDApOighMT09PUUmJihFPSEwLChJLmVtaXRXYXJuaW5nP0kuZW1pdFdhcm5pbmc6Xy53YXJuLmJpbmQoXykp''@;'; put 'put ''KCJhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFzc2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEgbWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmciLCJERVAwMDk0IikpLDI9PT1RZSYm''@;'; put 'put ''KF90PSIhPSIpKSxBZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEFlO3ZhciBNdD17YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG9wZXJhdG9yOnZvaWQgMD09PV90PyJmYWlsIjpfdCxzdGFja1N0YXJ0Rm46bnR8fHRlfTt2b2lkIDAhPT1BZSYmKE10Lm1lc3NhZ2U9QWUpO3ZhciBEdD1uZXcgcShN''@;'; put 'put ''dCk7dGhyb3cgdW4mJihEdC5tZXNzYWdlPXVuLER0LmdlbmVyYXRlZE1lc3NhZ2U9ITApLER0fSxtLkFzc2VydGlvbkVycm9yPXEsbS5vaz13ZSxtLmVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVk''@;'; put 'put ''Iik7a2UhPUFlJiZhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3RFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3Rl''@;'; put 'put ''ZCIpO2tlPT1BZSYmYWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOlZlfSl9LG0uZGVlcEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVj''@;'; put 'put ''dGVkIik7dm9pZCAwPT09emUmJkMoKSx6ZShrZSxBZSl8fGFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiZGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3REZWVwRXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT16ZSYmQygpLHplKGtlLEFlKSYmYWUoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJub3REZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLmRlZXBTdHJpY3RFcXVhbD1m''@;'; put 'put ''dW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PXplJiZDKCksVihrZSxBZSl8fGFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFs''@;'; put 'put ''IixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gVWUoVmUsa2UsQWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT16ZSYmQygpLFYoVmUsa2UpJiZhZSh7YWN0dWFsOlZlLGV4cGVj''@;'; put 'put ''dGVkOmtlLG1lc3NhZ2U6QWUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlVlfSl9LG0uc3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShrZSxB''@;'; put 'put ''ZSl8fGFlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoic3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIs''@;'; put 'put ''ImV4cGVjdGVkIik7X2Uoa2UsQWUpJiZhZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX07dmFyIEplPXcoZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe3ZhciBudD10aGlzOyhmdW5jdGlvbiBPKFZlLGtl''@;'; put 'put ''KXtpZighKFZlIGluc3RhbmNlb2Yga2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxWZSksQWUuZm9yRWFjaChmdW5jdGlvbihRZSl7UWUgaW4ga2UmJihudFtRZV09dm9pZCAwIT09X3QmJiJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''X3RbUWVdJiZsZShrZVtRZV0pJiZUZShrZVtRZV0sX3RbUWVdKT9fdFtRZV06a2VbUWVdKX0pfSk7ZnVuY3Rpb24gTWUoVmUsa2UsQWUsX3Qpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrZSl7aWYobGUoa2UpKXJldHVybiBUZShrZSxWZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IEsoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0sa2UpO2lmKCJvYmplY3QiIT09ZyhWZSl8fG51bGw9PT1WZSl7dmFyIG50PW5ldyBxKHthY3R1YWw6VmUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpBZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46X3R9''@;'; put 'put ''KTt0aHJvdyBudC5vcGVyYXRvcj1fdC5uYW1lLG50fXZhciBRZT1PYmplY3Qua2V5cyhrZSk7aWYoa2UgaW5zdGFuY2VvZiBFcnJvcilRZS5wdXNoKCJuYW1lIiwibWVzc2FnZSIpO2Vsc2UgaWYoMD09PVFlLmxlbmd0aCl0aHJvdyBuZXcgVSgiZXJyb3IiLGtlLCJtYXkgbm90IGJlIGFuIGVt''@;'; put 'put ''cHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT16ZSYmQygpLFFlLmZvckVhY2goZnVuY3Rpb24odW4peyJzdHJpbmciPT10eXBlb2YgVmVbdW5dJiZsZShrZVt1bl0pJiZUZShrZVt1bl0sVmVbdW5dKXx8ZnVuY3Rpb24gb3QoVmUsa2UsQWUsX3QsbnQsUWUpe2lmKCEoQWUgaW4gVmUpfHwh''@;'; put 'put ''VihWZVtBZV0sa2VbQWVdKSl7aWYoIV90KXt2YXIgdW49bmV3IEplKFZlLG50KSx5dD1uZXcgSmUoa2UsbnQsVmUpLE10PW5ldyBxKHthY3R1YWw6dW4sZXhwZWN0ZWQ6eXQsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlFlfSk7dGhyb3cgTXQuYWN0dWFsPVZlLE10''@;'; put 'put ''LmV4cGVjdGVkPWtlLE10Lm9wZXJhdG9yPVFlLm5hbWUsTXR9YWUoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOl90LG9wZXJhdG9yOlFlLm5hbWUsc3RhY2tTdGFydEZuOlFlfSl9fShWZSxrZSx1bixBZSxRZSxfdCl9KSwhMH1yZXR1cm4gdm9pZCAwIT09a2UucHJvdG90eXBlJiZW''@;'; put 'put ''ZSBpbnN0YW5jZW9mIGtlfHwhRXJyb3IuaXNQcm90b3R5cGVPZihrZSkmJiEwPT09a2UuY2FsbCh7fSxWZSl9ZnVuY3Rpb24gdmUoVmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBWZSl0aHJvdyBuZXcgSygiZm4iLCJGdW5jdGlvbiIsVmUpO3RyeXtWZSgpfWNhdGNoKGtlKXtyZXR1cm4ga2V9''@;'; put 'put ''cmV0dXJuIEF9ZnVuY3Rpb24gWGUoVmUpe3JldHVybiBpZShWZSl8fG51bGwhPT1WZSYmIm9iamVjdCI9PT1nKFZlKSYmImZ1bmN0aW9uIj09dHlwZW9mIFZlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBWZS5jYXRjaH1mdW5jdGlvbiBqZShWZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgp''@;'; put 'put ''LnRoZW4oZnVuY3Rpb24oKXt2YXIga2U7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFZlKXtpZighWGUoa2U9VmUoKSkpdGhyb3cgbmV3IFcoImluc3RhbmNlIG9mIFByb21pc2UiLCJwcm9taXNlRm4iLGtlKX1lbHNle2lmKCFYZShWZSkpdGhyb3cgbmV3IEsoInByb21pc2VGbiIsWyJGdW5jdGlv''@;'; put 'put ''biIsIlByb21pc2UiXSxWZSk7a2U9VmV9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4ga2V9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KS5jYXRjaChmdW5jdGlvbihBZSl7cmV0dXJuIEFlfSl9KX1mdW5jdGlvbiBEZShWZSxrZSxBZSxfdCl7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBBZSl7aWYoND09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEsoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxBZSk7aWYoIm9iamVjdCI9PT1nKGtlKSYmbnVsbCE9PWtlKXtpZihrZS5tZXNzYWdlPT09QWUpdGhyb3cg''@;'; put 'put ''bmV3IEwoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQoa2UubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoa2U9PT1BZSl0aHJvdyBuZXcgTCgiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoa2Us''@;'; put 'put ''JyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKTtfdD1BZSxBZT12b2lkIDB9ZWxzZSBpZihudWxsIT1BZSYmIm9iamVjdCIhPT1nKEFlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIEFlKXRocm93IG5ldyBLKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhw''@;'; put 'put ''Il0sQWUpO2lmKGtlPT09QSl7dmFyIG50PSIiO0FlJiZBZS5uYW1lJiYobnQrPSIgKCIuY29uY2F0KEFlLm5hbWUsIikiKSksbnQrPV90PyI6ICIuY29uY2F0KF90KToiLiIsYWUoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6QWUsb3BlcmF0b3I6VmUubmFtZSxtZXNzYWdlOiJNaXNzaW5nIGV4''@;'; put 'put ''cGVjdGVkICIuY29uY2F0KCJyZWplY3RzIj09PVZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChudCksc3RhY2tTdGFydEZuOlZlfSl9aWYoQWUmJiFNZShrZSxBZSxfdCxWZSkpdGhyb3cga2V9ZnVuY3Rpb24gRmUoVmUsa2UsQWUsX3Qpe2lmKGtlIT09QSl7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBBZSYmKF90PUFlLEFlPXZvaWQgMCksIUFlfHxNZShrZSxBZSkpe3ZhciBudD1fdD8iOiAiLmNvbmNhdChfdCk6Ii4iO2FlKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsb3BlcmF0b3I6VmUubmFtZSxtZXNzYWdlOiJHb3QgdW53YW50ZWQgIi5jb25jYXQoImRvZXNOb3RS''@;'; put 'put ''ZWplY3QiPT09VmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KG50LCJcbiIpKydBY3R1YWwgbWVzc2FnZTogIicuY29uY2F0KGtlJiZrZS5tZXNzYWdlLCciJyksc3RhY2tTdGFydEZuOlZlfSl9dGhyb3cga2V9fWZ1bmN0aW9uIFJlKFZlLGtlLEFlLF90LG50KXtpZigh''@;'; put 'put ''bGUoa2UpKXRocm93IG5ldyBLKCJyZWdleHAiLCJSZWdFeHAiLGtlKTt2YXIgUWU9Im1hdGNoIj09PW50O2lmKCJzdHJpbmciIT10eXBlb2YgVmV8fFRlKGtlLFZlKSE9PVFlKXtpZihBZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEFlO3ZhciB1bj0hQWU7QWU9QWV8fCgic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIFZlPydUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSAnKyIiLmNvbmNhdChnKFZlKSwiICgiKS5jb25jYXQoSihWZSksIikiKTooUWU/IlRoZSBpbnB1dCBkaWQgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIjoi''@;'; put 'put ''VGhlIGlucHV0IHdhcyBleHBlY3RlZCB0byBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiKSsiIi5jb25jYXQoSihrZSksIi4gSW5wdXQ6XG5cbiIpLmNvbmNhdChKKFZlKSwiXG4iKSk7dmFyIHl0PW5ldyBxKHthY3R1YWw6VmUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpBZSxvcGVy''@;'; put 'put ''YXRvcjpudCxzdGFja1N0YXJ0Rm46X3R9KTt0aHJvdyB5dC5nZW5lcmF0ZWRNZXNzYWdlPXVuLHl0fX1mdW5jdGlvbiBJZSgpe2Zvcih2YXIgVmU9YXJndW1lbnRzLmxlbmd0aCxrZT1uZXcgQXJyYXkoVmUpLEFlPTA7QWU8VmU7QWUrKylrZVtBZV09YXJndW1lbnRzW0FlXTtzZS5hcHBseSh2''@;'; put 'put ''b2lkIDAsW0llLGtlLmxlbmd0aF0uY29uY2F0KGtlKSl9bS50aHJvd3M9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtudC0xXT1hcmd1bWVudHNbbnRdO0RlLmFwcGx5KHZvaWQg''@;'; put 'put ''MCxbVmUsdmUoa2UpXS5jb25jYXQoX3QpKX0sbS5yZWplY3RzPWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtyZXR1cm4gamUoa2UpLnRoZW4o''@;'; put 'put ''ZnVuY3Rpb24oUWUpe3JldHVybiBEZS5hcHBseSh2b2lkIDAsW1ZlLFFlXS5jb25jYXQoX3QpKX0pfSxtLmRvZXNOb3RUaHJvdz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250''@;'; put 'put ''LTFdPWFyZ3VtZW50c1tudF07RmUuYXBwbHkodm9pZCAwLFtWZSx2ZShrZSldLmNvbmNhdChfdCkpfSxtLmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtu''@;'; put 'put ''dC0xXT1hcmd1bWVudHNbbnRdO3JldHVybiBqZShrZSkudGhlbihmdW5jdGlvbihRZSl7cmV0dXJuIEZlLmFwcGx5KHZvaWQgMCxbVmUsUWVdLmNvbmNhdChfdCkpfSl9LG0uaWZFcnJvcj1mdW5jdGlvbiBWZShrZSl7aWYobnVsbCE9a2Upe3ZhciBBZT0iaWZFcnJvciBnb3QgdW53YW50ZWQg''@;'; put 'put ''ZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09ZyhrZSkmJiJzdHJpbmciPT10eXBlb2Yga2UubWVzc2FnZT9BZSs9MD09PWtlLm1lc3NhZ2UubGVuZ3RoJiZrZS5jb25zdHJ1Y3Rvcj9rZS5jb25zdHJ1Y3Rvci5uYW1lOmtlLm1lc3NhZ2U6QWUrPUooa2UpO3ZhciBfdD1uZXcgcSh7YWN0dWFsOmtl''@;'; put 'put ''LGV4cGVjdGVkOm51bGwsb3BlcmF0b3I6ImlmRXJyb3IiLG1lc3NhZ2U6QWUsc3RhY2tTdGFydEZuOlZlfSksbnQ9a2Uuc3RhY2s7aWYoInN0cmluZyI9PXR5cGVvZiBudCl7dmFyIFFlPW50LnNwbGl0KCJcbiIpO1FlLnNoaWZ0KCk7Zm9yKHZhciB1bj1fdC5zdGFjay5zcGxpdCgiXG4iKSx5''@;'; put 'put ''dD0wO3l0PFFlLmxlbmd0aDt5dCsrKXt2YXIgTXQ9dW4uaW5kZXhPZihRZVt5dF0pO2lmKC0xIT09TXQpe3VuPXVuLnNsaWNlKDAsTXQpO2JyZWFrfX1fdC5zdGFjaz0iIi5jb25jYXQodW4uam9pbigiXG4iKSwiXG4iKS5jb25jYXQoUWUuam9pbigiXG4iKSl9dGhyb3cgX3R9fSxtLm1hdGNo''@;'; put 'put ''PWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtSZShrZSxBZSxfdCxWZSwibWF0Y2giKX0sbS5kb2VzTm90TWF0Y2g9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe1JlKGtlLEFlLF90LFZlLCJkb2VzTm90TWF0Y2giKX0sbS5zdHJpY3Q9bWUoSWUsbSx7ZXF1YWw6bS5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6''@;'; put 'put ''bS5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6bS5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6bS5ub3REZWVwU3RyaWN0RXF1YWx9KSxtLnN0cmljdC5zdHJpY3Q9bS5zdHJpY3R9LDU5NjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtmdW5jdGlvbiBfKEEsYWUp''@;'; put 'put ''e3ZhciB0ZT1PYmplY3Qua2V5cyhBKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgc2U9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhBKTthZSYmKHNlPXNlLmZpbHRlcihmdW5jdGlvbih3ZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io''@;'; put 'put ''QSx3ZSkuZW51bWVyYWJsZX0pKSx0ZS5wdXNoLmFwcGx5KHRlLHNlKX1yZXR1cm4gdGV9ZnVuY3Rpb24gZyhBKXtmb3IodmFyIGFlPTE7YWU8YXJndW1lbnRzLmxlbmd0aDthZSsrKXt2YXIgdGU9bnVsbCE9YXJndW1lbnRzW2FlXT9hcmd1bWVudHNbYWVdOnt9O2FlJTI/XyhPYmplY3QodGUp''@;'; put 'put ''LCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtCKEEsc2UsdGVbc2VdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGUpKTpfKE9iamVjdCh0ZSkpLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oc2Upe09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHNlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGUsc2UpKX0pfXJldHVybiBBfWZ1bmN0aW9uIEIoQSxhZSx0ZSl7cmV0dXJuKGFlPU8oYWUpKWluIEE/T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsYWUse3ZhbHVlOnRl''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6QVthZV09dGUsQX1mdW5jdGlvbiBQKEEsYWUpe2Zvcih2YXIgdGU9MDt0ZTxhZS5sZW5ndGg7dGUrKyl7dmFyIHNlPWFlW3RlXTtzZS5lbnVtZXJhYmxlPXNlLmVudW1lcmFibGV8fCExLHNlLmNvbmZpZ3VyYWJs''@;'; put 'put ''ZT0hMCwidmFsdWUiaW4gc2UmJihzZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsTyhzZS5rZXkpLHNlKX19ZnVuY3Rpb24gTyhBKXt2YXIgYWU9ZnVuY3Rpb24geihBLGFlKXtpZigib2JqZWN0IiE9PWllKEEpfHxudWxsPT09QSlyZXR1cm4gQTt2YXIgdGU9QVtTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXRlKXt2YXIgc2U9dGUuY2FsbChBLGFlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09aWUoc2UpKXJldHVybiBzZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWFlP1N0cmluZzpOdW1iZXIpKEEpfShBLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWllKGFlKT9hZTpTdHJpbmcoYWUpfWZ1bmN0aW9uIEsoQSxhZSl7aWYoYWUmJigib2JqZWN0Ij09PWllKGFlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGFlKSlyZXR1cm4gYWU7''@;'; put 'put ''aWYodm9pZCAwIT09YWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gVShBKX1mdW5jdGlvbiBVKEEpe2lmKHZvaWQgMD09PUEpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlz''@;'; put 'put ''IGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gQX1mdW5jdGlvbiBXKEEpe3ZhciBhZT0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBXPWZ1bmN0aW9uKHNlKXtpZihudWxsPT09c2V8fCFmdW5j''@;'; put 'put ''dGlvbiBlZShBKXtyZXR1cm4tMSE9PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQSkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpfShzZSkpcmV0dXJuIHNlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJl''@;'; put 'put ''IG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHR5cGVvZiBhZTwidSIpe2lmKGFlLmhhcyhzZSkpcmV0dXJuIGFlLmdldChzZSk7YWUuc2V0KHNlLHdlKX1mdW5jdGlvbiB3ZSgpe3JldHVybiBZKHNlLGFyZ3VtZW50cyxuZSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIHdlLnByb3RvdHlwZT1P''@;'; put 'put ''YmplY3QuY3JlYXRlKHNlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOndlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEood2Usc2UpfSxXKEEpfWZ1bmN0aW9uIFkoQSxhZSx0ZSl7cmV0dXJuKFk9cSgpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQo''@;'; put 'put ''KTpmdW5jdGlvbih3ZSxVZSxKZSl7dmFyIG90PVtudWxsXTtvdC5wdXNoLmFwcGx5KG90LFVlKTt2YXIgdmU9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkod2Usb3QpKTtyZXR1cm4gSmUmJkoodmUsSmUucHJvdG90eXBlKSx2ZX0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBxKCl7''@;'; put 'put ''aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29u''@;'; put 'put ''c3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIEooQSxhZSl7cmV0dXJuKEo9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oc2Usd2Upe3JldHVybiBzZS5fX3Byb3RvX189''@;'; put 'put ''d2Usc2V9KShBLGFlKX1mdW5jdGlvbiBuZShBKXtyZXR1cm4obmU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24odGUpe3JldHVybiB0ZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0ZSl9KShBKX1mdW5jdGlvbiBp''@;'; put 'put ''ZShBKXtyZXR1cm4oaWU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYWUpe3JldHVybiB0eXBlb2YgYWV9OmZ1bmN0aW9uKGFlKXtyZXR1cm4gYWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmFlLmNvbnN0''@;'; put 'put ''cnVjdG9yPT09U3ltYm9sJiZhZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGFlfSkoQSl9dmFyIG1lPXkoOTUzOSkuaW5zcGVjdCxUZT15KDIxMzYpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIFNlKEEsYWUsdGUpe3JldHVybih2b2lkIDA9PT10ZXx8''@;'; put 'put ''dGU+QS5sZW5ndGgpJiYodGU9QS5sZW5ndGgpLEEuc3Vic3RyaW5nKHRlLWFlLmxlbmd0aCx0ZSk9PT1hZX12YXIgVj0iIixwPSIiLGI9IiIseD0iIixDPXtkZWVwU3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsOiIsc3RyaWN0RXF1YWw6IkV4''@;'; put 'put ''cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDoiLHN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLGRlZXBFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbDoi''@;'; put 'put ''LGVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBlcXVhbDoiLG5vdERlZXBTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgc3RyaWN0''@;'; put 'put ''bHkgdW5lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6Jyxub3REZWVwRXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWwgdG86Jyxu''@;'; put 'put ''b3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgbG9vc2VseSB1bmVxdWFsIHRvOicsbm90SWRlbnRpY2FsOiJWYWx1ZXMgaWRlbnRpY2FsIGJ1dCBub3QgcmVmZXJlbmNlLWVxdWFsOiJ9O2Z1bmN0aW9uIEgoQSl7dmFyIGFlPU9iamVjdC5rZXlzKEEpLHRlPU9iamVjdC5jcmVhdGUo''@;'; put 'put ''T2JqZWN0LmdldFByb3RvdHlwZU9mKEEpKTtyZXR1cm4gYWUuZm9yRWFjaChmdW5jdGlvbihzZSl7dGVbc2VdPUFbc2VdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLCJtZXNzYWdlIix7dmFsdWU6QS5tZXNzYWdlfSksdGV9ZnVuY3Rpb24gaihBKXtyZXR1cm4gbWUoQSx7Y29tcGFjdDoh''@;'; put 'put ''MSxjdXN0b21JbnNwZWN0OiExLGRlcHRoOjFlMyxtYXhBcnJheUxlbmd0aDoxLzAsc2hvd0hpZGRlbjohMSxicmVha0xlbmd0aDoxLzAsc2hvd1Byb3h5OiExLHNvcnRlZDohMCxnZXR0ZXJzOiEwfSl9dmFyIG09ZnVuY3Rpb24oQSxhZSl7IWZ1bmN0aW9uIE4oQSxhZSl7aWYoImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIGFlJiZudWxsIT09YWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFlJiZhZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpBLHdy''@;'; put 'put ''aXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxhZSYmSihBLGFlKX0oc2UsQSk7dmFyIHRlPWZ1bmN0aW9uIEwoQSl7dmFyIGFlPXEoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgd2Usc2U9bmUoQSk7''@;'; put 'put ''aWYoYWUpe3ZhciBVZT1uZSh0aGlzKS5jb25zdHJ1Y3Rvcjt3ZT1SZWZsZWN0LmNvbnN0cnVjdChzZSxhcmd1bWVudHMsVWUpfWVsc2Ugd2U9c2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBLKHRoaXMsd2UpfX0oc2UpO2Z1bmN0aW9uIHNlKHdlKXt2YXIgVWU7aWYoZnVuY3Rpb24g''@;'; put 'put ''dyhBLGFlKXtpZighKEEgaW5zdGFuY2VvZiBhZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsc2UpLCJvYmplY3QiIT09aWUod2UpfHxudWxsPT09d2UpdGhyb3cgbmV3IFRlKCJvcHRpb25zIiwiT2JqZWN0Iix3ZSk7dmFy''@;'; put 'put ''IEplPXdlLm1lc3NhZ2Usb3Q9d2Uub3BlcmF0b3IsTWU9d2Uuc3RhY2tTdGFydEZuLHZlPXdlLmFjdHVhbCxYZT13ZS5leHBlY3RlZCxqZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9SmUpVWU9dGUuY2FsbCh0aGlzLFN0cmluZyhKZSkp''@;'; put 'put ''O2Vsc2UgaWYoSS5zdGRlcnImJkkuc3RkZXJyLmlzVFRZJiYoSS5zdGRlcnImJkkuc3RkZXJyLmdldENvbG9yRGVwdGgmJjEhPT1JLnN0ZGVyci5nZXRDb2xvckRlcHRoKCk/KFY9Ilx4MWJbMzRtIixwPSJceDFiWzMybSIseD0iXHgxYlszOW0iLGI9Ilx4MWJbMzFtIik6KFY9IiIscD0iIix4''@;'; put 'put ''PSIiLGI9IiIpKSwib2JqZWN0Ij09PWllKHZlKSYmbnVsbCE9PXZlJiYib2JqZWN0Ij09PWllKFhlKSYmbnVsbCE9PVhlJiYic3RhY2siaW4gdmUmJnZlIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiBYZSYmWGUgaW5zdGFuY2VvZiBFcnJvciYmKHZlPUgodmUpLFhlPUgoWGUpKSwiZGVl''@;'; put 'put ''cFN0cmljdEVxdWFsIj09PW90fHwic3RyaWN0RXF1YWwiPT09b3QpVWU9dGUuY2FsbCh0aGlzLGZ1bmN0aW9uIEUoQSxhZSx0ZSl7dmFyIHNlPSIiLHdlPSIiLFVlPTAsSmU9IiIsb3Q9ITEsTWU9aihBKSx2ZT1NZS5zcGxpdCgiXG4iKSxYZT1qKGFlKS5zcGxpdCgiXG4iKSxqZT0wLERlPSIi''@;'; put 'put ''O2lmKCJzdHJpY3RFcXVhbCI9PT10ZSYmIm9iamVjdCI9PT1pZShBKSYmIm9iamVjdCI9PT1pZShhZSkmJm51bGwhPT1BJiZudWxsIT09YWUmJih0ZT0ic3RyaWN0RXF1YWxPYmplY3QiKSwxPT09dmUubGVuZ3RoJiYxPT09WGUubGVuZ3RoJiZ2ZVswXSE9PVhlWzBdKXt2YXIgRmU9dmVbMF0u''@;'; put 'put ''bGVuZ3RoK1hlWzBdLmxlbmd0aDtpZihGZTw9MTApe2lmKCEoIm9iamVjdCI9PT1pZShBKSYmbnVsbCE9PUF8fCJvYmplY3QiPT09aWUoYWUpJiZudWxsIT09YWV8fDA9PT1BJiYwPT09YWUpKXJldHVybiIiLmNvbmNhdChDW3RlXSwiXG5cbiIpKyIiLmNvbmNhdCh2ZVswXSwiICE9PSAiKS5j''@;'; put 'put ''b25jYXQoWGVbMF0sIlxuIil9ZWxzZSBpZigic3RyaWN0RXF1YWxPYmplY3QiIT09dGUmJkZlPChJLnN0ZGVyciYmSS5zdGRlcnIuaXNUVFk/SS5zdGRlcnIuY29sdW1uczo4MCkpe2Zvcig7dmVbMF1bamVdPT09WGVbMF1bamVdOylqZSsrO2plPjImJihEZT0iXG4gICIuY29uY2F0KGZ1bmN0''@;'; put 'put ''aW9uIHplKEEsYWUpe2lmKGFlPU1hdGguZmxvb3IoYWUpLDA9PUEubGVuZ3RofHwwPT1hZSlyZXR1cm4iIjt2YXIgdGU9QS5sZW5ndGgqYWU7Zm9yKGFlPU1hdGguZmxvb3IoTWF0aC5sb2coYWUpL01hdGgubG9nKDIpKTthZTspQSs9QSxhZS0tO3JldHVybiBBK0Euc3Vic3RyaW5nKDAsdGUt''@;'; put 'put ''QS5sZW5ndGgpfSgiICIsamUpLCJeIiksamU9MCl9fWZvcih2YXIgSWU9dmVbdmUubGVuZ3RoLTFdLFZlPVhlW1hlLmxlbmd0aC0xXTtJZT09PVZlJiYoamUrKzwyP0plPSJcbiAgIi5jb25jYXQoSWUpLmNvbmNhdChKZSk6c2U9SWUsdmUucG9wKCksWGUucG9wKCksMCE9PXZlLmxlbmd0aCYm''@;'; put 'put ''MCE9PVhlLmxlbmd0aCk7KUllPXZlW3ZlLmxlbmd0aC0xXSxWZT1YZVtYZS5sZW5ndGgtMV07dmFyIGtlPU1hdGgubWF4KHZlLmxlbmd0aCxYZS5sZW5ndGgpO2lmKDA9PT1rZSl7dmFyIEFlPU1lLnNwbGl0KCJcbiIpO2lmKEFlLmxlbmd0aD4zMClmb3IoQWVbMjZdPSIiLmNvbmNhdChWLCIu''@;'; put 'put ''Li4iKS5jb25jYXQoeCk7QWUubGVuZ3RoPjI3OylBZS5wb3AoKTtyZXR1cm4iIi5jb25jYXQoQy5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoQWUuam9pbigiXG4iKSwiXG4iKX1qZT4zJiYoSmU9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChKZSksb3Q9ITApLCIi''@;'; put 'put ''IT09c2UmJihKZT0iXG4gICIuY29uY2F0KHNlKS5jb25jYXQoSmUpLHNlPSIiKTt2YXIgX3Q9MCxudD1DW3RlXSsiXG4iLmNvbmNhdChwLCIrIGFjdHVhbCIpLmNvbmNhdCh4LCIgIikuY29uY2F0KGIsIi0gZXhwZWN0ZWQiKS5jb25jYXQoeCksUWU9IiAiLmNvbmNhdChWLCIuLi4iKS5jb25j''@;'; put 'put ''YXQoeCwiIExpbmVzIHNraXBwZWQiKTtmb3IoamU9MDtqZTxrZTtqZSsrKXt2YXIgdW49amUtVWU7aWYodmUubGVuZ3RoPGplKzEpdW4+MSYmamU+MiYmKHVuPjQ/KHdlKz0iXG4iLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCksb3Q9ITApOnVuPjMmJih3ZSs9IlxuICAiLmNvbmNhdChYZVtq''@;'; put 'put ''ZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQoWGVbamUtMV0pLF90KyspLFVlPWplLHNlKz0iXG4iLmNvbmNhdChiLCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoWGVbamVdKSxfdCsrO2Vsc2UgaWYoWGUubGVuZ3RoPGplKzEpdW4+MSYmamU+MiYmKHVuPjQ/KHdlKz0iXG4iLmNvbmNh''@;'; put 'put ''dChWLCIuLi4iKS5jb25jYXQoeCksb3Q9ITApOnVuPjMmJih3ZSs9IlxuICAiLmNvbmNhdCh2ZVtqZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQodmVbamUtMV0pLF90KyspLFVlPWplLHdlKz0iXG4iLmNvbmNhdChwLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQodmVbamVdKSxfdCsr''@;'; put 'put ''O2Vsc2V7dmFyIHl0PVhlW2plXSxNdD12ZVtqZV0sRHQ9TXQhPT15dCYmKCFTZShNdCwiLCIpfHxNdC5zbGljZSgwLC0xKSE9PXl0KTtEdCYmU2UoeXQsIiwiKSYmeXQuc2xpY2UoMCwtMSk9PT1NdCYmKER0PSExLE10Kz0iLCIpLER0Pyh1bj4xJiZqZT4yJiYodW4+ND8od2UrPSJcbiIuY29u''@;'; put 'put ''Y2F0KFYsIi4uLiIpLmNvbmNhdCh4KSxvdD0hMCk6dW4+MyYmKHdlKz0iXG4gICIuY29uY2F0KHZlW2plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdCh2ZVtqZS0xXSksX3QrKyksVWU9amUsd2UrPSJcbiIuY29uY2F0KHAsIisiKS5jb25jYXQoeCwiICIpLmNvbmNhdChNdCksc2UrPSJc''@;'; put 'put ''biIuY29uY2F0KGIsIi0iKS5jb25jYXQoeCwiICIpLmNvbmNhdCh5dCksX3QrPTIpOih3ZSs9c2Usc2U9IiIsKDE9PT11bnx8MD09PWplKSYmKHdlKz0iXG4gICIuY29uY2F0KE10KSxfdCsrKSl9aWYoX3Q+MjAmJmplPGtlLTIpcmV0dXJuIiIuY29uY2F0KG50KS5jb25jYXQoUWUsIlxuIiku''@;'; put 'put ''Y29uY2F0KHdlLCJcbiIpLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCkuY29uY2F0KHNlLCJcbiIpKyIiLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCl9cmV0dXJuIiIuY29uY2F0KG50KS5jb25jYXQob3Q/UWU6IiIsIlxuIikuY29uY2F0KHdlKS5jb25jYXQoc2UpLmNvbmNhdChKZSkuY29u''@;'; put 'put ''Y2F0KERlKX0odmUsWGUsb3QpKTtlbHNlIGlmKCJub3REZWVwU3RyaWN0RXF1YWwiPT09b3R8fCJub3RTdHJpY3RFcXVhbCI9PT1vdCl7dmFyIERlPUNbb3RdLEZlPWoodmUpLnNwbGl0KCJcbiIpO2lmKCJub3RTdHJpY3RFcXVhbCI9PT1vdCYmIm9iamVjdCI9PT1pZSh2ZSkmJm51bGwhPT12''@;'; put 'put ''ZSYmKERlPUMubm90U3RyaWN0RXF1YWxPYmplY3QpLEZlLmxlbmd0aD4zMClmb3IoRmVbMjZdPSIiLmNvbmNhdChWLCIuLi4iKS5jb25jYXQoeCk7RmUubGVuZ3RoPjI3OylGZS5wb3AoKTtVZT10ZS5jYWxsKHRoaXMsMT09PUZlLmxlbmd0aD8iIi5jb25jYXQoRGUsIiAiKS5jb25jYXQoRmVb''@;'; put 'put ''MF0pOiIiLmNvbmNhdChEZSwiXG5cbiIpLmNvbmNhdChGZS5qb2luKCJcbiIpLCJcbiIpKX1lbHNle3ZhciBSZT1qKHZlKSxJZT0iIixWZT1DW290XTsibm90RGVlcEVxdWFsIj09PW90fHwibm90RXF1YWwiPT09b3Q/KFJlPSIiLmNvbmNhdChDW290XSwiXG5cbiIpLmNvbmNhdChSZSkpLmxl''@;'; put 'put ''bmd0aD4xMDI0JiYoUmU9IiIuY29uY2F0KFJlLnNsaWNlKDAsMTAyMSksIi4uLiIpKTooSWU9IiIuY29uY2F0KGooWGUpKSxSZS5sZW5ndGg+NTEyJiYoUmU9IiIuY29uY2F0KFJlLnNsaWNlKDAsNTA5KSwiLi4uIikpLEllLmxlbmd0aD41MTImJihJZT0iIi5jb25jYXQoSWUuc2xpY2UoMCw1''@;'; put 'put ''MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1vdHx8ImVxdWFsIj09PW90P1JlPSIiLmNvbmNhdChWZSwiXG5cbiIpLmNvbmNhdChSZSwiXG5cbnNob3VsZCBlcXVhbFxuXG4iKTpJZT0iICIuY29uY2F0KG90LCIgIikuY29uY2F0KEllKSksVWU9dGUuY2FsbCh0aGlzLCIiLmNvbmNhdChSZSku''@;'; put 'put ''Y29uY2F0KEllKSl9cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD1qZSxVZS5nZW5lcmF0ZWRNZXNzYWdlPSFKZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVShVZSksIm5hbWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VSUl9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMH0pLFVlLmNvZGU9IkVSUl9BU1NFUlRJT04iLFVlLmFjdHVhbD12ZSxVZS5leHBlY3RlZD1YZSxVZS5vcGVyYXRvcj1vdCxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoVShVZSksTWUpLFVlLm5hbWU9IkFzc2VydGlv''@;'; put 'put ''bkVycm9yIixLKFVlKX1yZXR1cm4gZnVuY3Rpb24gRihBLGFlLHRlKXthZSYmUChBLnByb3RvdHlwZSxhZSksdGUmJlAoQSx0ZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KHNlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4iIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdCh0aGlzLmNvZGUsIl06ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbihVZSxKZSl7cmV0dXJuIG1lKHRoaXMsZyhnKHt9LEplKSx7fSx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkp''@;'; put 'put ''fX1dKSxzZX0oVyhFcnJvciksbWUuY3VzdG9tKTt1ZS5leHBvcnRzPW19LDIxMzY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShtZSl7cmV0dXJuKEk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24o''@;'; put 'put ''X2Upe3JldHVybiB0eXBlb2YgX2V9OmZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJl9lLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZfZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIF9lfSkobWUpfWZ1bmN0aW9uIF8obWUsX2Upe2Zv''@;'; put 'put ''cih2YXIgVGU9MDtUZTxfZS5sZW5ndGg7VGUrKyl7dmFyIFNlPV9lW1RlXTtTZS5lbnVtZXJhYmxlPVNlLmVudW1lcmFibGV8fCExLFNlLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gU2UmJihTZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLEIoU2Uua2V5KSxTZSl9''@;'; put 'put ''fWZ1bmN0aW9uIEIobWUpe3ZhciBfZT1mdW5jdGlvbiB3KG1lLF9lKXtpZigib2JqZWN0IiE9PUkobWUpfHxudWxsPT09bWUpcmV0dXJuIG1lO3ZhciBUZT1tZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PVRlKXt2YXIgU2U9VGUuY2FsbChtZSxfZXx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9PUkoU2UpKXJldHVybiBTZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PV9lP1N0cmluZzpOdW1iZXIpKG1lKX0obWUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09''@;'; put 'put ''SShfZSk/X2U6U3RyaW5nKF9lKX1mdW5jdGlvbiBPKG1lLF9lKXtyZXR1cm4oTz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihTZSx6ZSl7cmV0dXJuIFNlLl9fcHJvdG9fXz16ZSxTZX0pKG1lLF9lKX1mdW5jdGlvbiBVKG1lKXty''@;'; put 'put ''ZXR1cm4oVT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihUZSl7cmV0dXJuIFRlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKFRlKX0pKG1lKX12YXIgWSxxLFc9e307ZnVuY3Rpb24gZWUobWUsX2UsVGUpe1RlfHwo''@;'; put 'put ''VGU9RXJyb3IpO3ZhciB6ZT1mdW5jdGlvbihWKXshZnVuY3Rpb24gRihtZSxfZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lJiZudWxsIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTttZS5wcm90''@;'; put 'put ''b3R5cGU9T2JqZWN0LmNyZWF0ZShfZSYmX2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bWUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxfZSYmTyhtZSxfZSl9KGIsVik7dmFy''@;'; put 'put ''IHA9ZnVuY3Rpb24geihtZSl7dmFyIF9lPWZ1bmN0aW9uIEsoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29s''@;'; put 'put ''ZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHplLFNlPVUobWUpO2lmKF9lKXt2YXIgVj1VKHRoaXMpLmNvbnN0cnVjdG9yO3plPVJl''@;'; put 'put ''ZmxlY3QuY29uc3RydWN0KFNlLGFyZ3VtZW50cyxWKX1lbHNlIHplPVNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gTihtZSxfZSl7aWYoX2UmJigib2JqZWN0Ij09PUkoX2UpfHwiZnVuY3Rpb24iPT10eXBlb2YgX2UpKXJldHVybiBfZTtpZih2b2lkIDAhPT1fZSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBMKG1lKXtpZih2b2lkIDA9PT1tZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlh''@;'; put 'put ''bGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBtZX0obWUpfSh0aGlzLHplKX19KGIpO2Z1bmN0aW9uIGIoeCxDLFQpe3ZhciBIO3JldHVybiBmdW5jdGlvbiBQKG1lLF9lKXtpZighKG1lIGluc3RhbmNlb2YgX2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v''@;'; put 'put ''dCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGIpLEg9cC5jYWxsKHRoaXMsZnVuY3Rpb24gU2UoVixwLGIpe3JldHVybiJzdHJpbmciPT10eXBlb2YgX2U/X2U6X2UoVixwLGIpfSh4LEMsVCkpLEguY29kZT1tZSxIfXJldHVybiBmdW5jdGlvbiBnKG1lLF9lLFRlKXtyZXR1''@;'; put 'put ''cm4gX2UmJl8obWUucHJvdG90eXBlLF9lKSxUZSYmXyhtZSxUZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLG1lfShiKX0oVGUpO1dbbWVdPXplfWZ1bmN0aW9uIEoobWUsX2Upe2lmKEFycmF5LmlzQXJyYXkobWUpKXt2YXIgVGU9bWUubGVu''@;'; put 'put ''Z3RoO3JldHVybiBtZT1tZS5tYXAoZnVuY3Rpb24oU2Upe3JldHVybiBTdHJpbmcoU2UpfSksVGU+Mj8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KG1lLnNsaWNlKDAsVGUtMSkuam9pbigiLCAiKSwiLCBvciAiKSttZVtUZS0xXToyPT09VGU/Im9uZSBvZiAiLmNvbmNhdChfZSwi''@;'; put 'put ''ICIpLmNvbmNhdChtZVswXSwiIG9yICIpLmNvbmNhdChtZVsxXSk6Im9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KG1lWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQoU3RyaW5nKG1lKSl9ZWUoIkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVu''@;'; put 'put ''dCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24obWUsX2UsVGUpe3ZhciBTZSx6ZTtpZih2b2lkIDA9PT1ZJiYoWT15KDkyODIpKSxZKCJzdHJpbmciPT10eXBlb2YgbWUsIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIiksInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBfZSYmZnVuY3Rpb24gbmUobWUsX2UsVGUpe3JldHVybiBtZS5zdWJzdHIoIVRlfHxUZTwwPzA6K1RlLF9lLmxlbmd0aCk9PT1fZX0oX2UsIm5vdCAiKT8oU2U9Im11c3Qgbm90IGJlIixfZT1fZS5yZXBsYWNlKC9ebm90IC8sIiIpKTpTZT0ibXVzdCBiZSIsZnVuY3Rp''@;'; put 'put ''b24gaWUobWUsX2UsVGUpe3JldHVybih2b2lkIDA9PT1UZXx8VGU+bWUubGVuZ3RoKSYmKFRlPW1lLmxlbmd0aCksbWUuc3Vic3RyaW5nKFRlLV9lLmxlbmd0aCxUZSk9PT1fZX0obWUsIiBhcmd1bWVudCIpKXplPSJUaGUgIi5jb25jYXQobWUsIiAiKS5jb25jYXQoU2UsIiAiKS5jb25jYXQo''@;'; put 'put ''SihfZSwidHlwZSIpKTtlbHNle3ZhciBWPWZ1bmN0aW9uIGxlKG1lLF9lLFRlKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIFRlJiYoVGU9MCksIShUZStfZS5sZW5ndGg+bWUubGVuZ3RoKSYmLTEhPT1tZS5pbmRleE9mKF9lLFRlKX0obWUsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7emU9''@;'; put 'put ''J1RoZSAiJy5jb25jYXQobWUsJyIgJykuY29uY2F0KFYsIiAiKS5jb25jYXQoU2UsIiAiKS5jb25jYXQoSihfZSwidHlwZSIpKX1yZXR1cm4gemUrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdChJKFRlKSl9LFR5cGVFcnJvciksZWUoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24o''@;'; put 'put ''bWUsX2Upe3ZhciBUZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PXEmJihxPXkoOTUzOSkpO3ZhciBTZT1xLmluc3BlY3QoX2UpO3JldHVybiBTZS5sZW5ndGg+MTI4JiYoU2U9IiIuY29uY2F0KFNl''@;'; put 'put ''LnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KG1lLCInICIpLmNvbmNhdChUZSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoU2UpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksZWUoIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIsZnVuY3Rpb24obWUsX2UsVGUpe3Zh''@;'; put 'put ''ciBTZTtyZXR1cm4gU2U9VGUmJlRlLmNvbnN0cnVjdG9yJiZUZS5jb25zdHJ1Y3Rvci5uYW1lPyJpbnN0YW5jZSBvZiAiLmNvbmNhdChUZS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdChJKFRlKSksIkV4cGVjdGVkICIuY29uY2F0KG1lLCcgdG8gYmUgcmV0dXJuZWQgZnJvbSB0''@;'; put 'put ''aGUgIicpLmNvbmNhdChfZSwnIicpKyIgZnVuY3Rpb24gYnV0IGdvdCAiLmNvbmNhdChTZSwiLiIpfSxUeXBlRXJyb3IpLGVlKCJFUlJfTUlTU0lOR19BUkdTIixmdW5jdGlvbigpe2Zvcih2YXIgbWU9YXJndW1lbnRzLmxlbmd0aCxfZT1uZXcgQXJyYXkobWUpLFRlPTA7VGU8bWU7VGUrKylf''@;'; put 'put ''ZVtUZV09YXJndW1lbnRzW1RlXTt2b2lkIDA9PT1ZJiYoWT15KDkyODIpKSxZKF9lLmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBTZT0iVGhlICIsemU9X2UubGVuZ3RoO3N3aXRjaChfZT1fZS5tYXAoZnVuY3Rpb24oVil7cmV0dXJuJyIn''@;'; put 'put ''LmNvbmNhdChWLCciJyl9KSx6ZSl7Y2FzZSAxOlNlKz0iIi5jb25jYXQoX2VbMF0sIiBhcmd1bWVudCIpO2JyZWFrO2Nhc2UgMjpTZSs9IiIuY29uY2F0KF9lWzBdLCIgYW5kICIpLmNvbmNhdChfZVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2RlZmF1bHQ6U2UrPV9lLnNsaWNlKDAsemUtMSku''@;'; put 'put ''am9pbigiLCAiKSxTZSs9IiwgYW5kICIuY29uY2F0KF9lW3plLTFdLCIgYXJndW1lbnRzIil9cmV0dXJuIiIuY29uY2F0KFNlLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSx1ZS5leHBvcnRzLmNvZGVzPVd9LDkxNTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24g''@;'; put 'put ''SShEdCxpdCl7cmV0dXJuIGZ1bmN0aW9uIFAoRHQpe2lmKEFycmF5LmlzQXJyYXkoRHQpKXJldHVybiBEdH0oRHQpfHxmdW5jdGlvbiB3KER0LGl0KXt2YXIgJGU9bnVsbD09RHQ/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmRHRbU3ltYm9sLml0ZXJhdG9yXXx8RHRbIkBAaXRlcmF0b3IiXTtp''@;'; put 'put ''ZihudWxsIT0kZSl7dmFyIHR0LEhlLHV0LHF0LFJ0PVtdLFB0PSEwLHNpPSExO3RyeXtpZih1dD0oJGU9JGUuY2FsbChEdCkpLm5leHQsMD09PWl0KXtpZihPYmplY3QoJGUpIT09JGUpcmV0dXJuO1B0PSExfWVsc2UgZm9yKDshKFB0PSh0dD11dC5jYWxsKCRlKSkuZG9uZSkmJihSdC5wdXNo''@;'; put 'put ''KHR0LnZhbHVlKSxSdC5sZW5ndGghPT1pdCk7UHQ9ITApO31jYXRjaChRdCl7c2k9ITAsSGU9UXR9ZmluYWxseXt0cnl7aWYoIVB0JiZudWxsIT0kZS5yZXR1cm4mJihxdD0kZS5yZXR1cm4oKSxPYmplY3QocXQpIT09cXQpKXJldHVybn1maW5hbGx5e2lmKHNpKXRocm93IEhlfX1yZXR1cm4g''@;'; put 'put ''UnR9fShEdCxpdCl8fGZ1bmN0aW9uIGcoRHQsaXQpe2lmKER0KXtpZigic3RyaW5nIj09dHlwZW9mIER0KXJldHVybiBCKER0LGl0KTt2YXIgJGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKER0KS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PSRlJiZEdC5jb25zdHJ1Y3RvciYm''@;'; put 'put ''KCRlPUR0LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09JGV8fCJTZXQiPT09JGUpcmV0dXJuIEFycmF5LmZyb20oRHQpO2lmKCJBcmd1bWVudHMiPT09JGV8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KCRlKSlyZXR1cm4gQihEdCxpdCl9fShEdCxp''@;'; put 'put ''dCl8fGZ1bmN0aW9uIF8oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3Jd''@;'; put 'put ''KCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIEIoRHQsaXQpeyhudWxsPT1pdHx8aXQ+RHQubGVuZ3RoKSYmKGl0PUR0Lmxlbmd0aCk7Zm9yKHZhciAkZT0wLHR0PW5ldyBBcnJheShpdCk7JGU8aXQ7JGUrKyl0dFskZV09RHRbJGVdO3JldHVybiB0dH1mdW5jdGlvbiBGKER0KXtyZXR1cm4oRj0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihpdCl7cmV0dXJuIHR5cGVvZiBpdH06ZnVuY3Rpb24oaXQpe3JldHVybiBpdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmaXQuY29uc3RydWN0b3I9PT1TeW1ib2wm''@;'; put 'put ''Jml0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgaXR9KShEdCl9dmFyIE89dm9pZCAwIT09L2EvZy5mbGFncyx6PWZ1bmN0aW9uKGl0KXt2YXIgJGU9W107cmV0dXJuIGl0LmZvckVhY2goZnVuY3Rpb24odHQpe3JldHVybiAkZS5wdXNoKHR0KX0pLCRlfSxOPWZ1bmN0aW9u''@;'; put 'put ''KGl0KXt2YXIgJGU9W107cmV0dXJuIGl0LmZvckVhY2goZnVuY3Rpb24odHQsSGUpe3JldHVybiAkZS5wdXNoKFtIZSx0dF0pfSksJGV9LEw9T2JqZWN0LmlzP09iamVjdC5pczp5KDYwOSksSz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJv''@;'; put 'put ''bHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sVT1OdW1iZXIuaXNOYU4/TnVtYmVyLmlzTmFOOnkoMzYwKTtmdW5jdGlvbiBXKER0KXtyZXR1cm4gRHQuY2FsbC5iaW5kKER0KX12YXIgWT1XKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHE9VyhPYmplY3QucHJvdG90eXBlLnByb3Bl''@;'; put 'put ''cnR5SXNFbnVtZXJhYmxlKSxlZT1XKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLEo9eSg5NTM5KS50eXBlcyxuZT1KLmlzQW55QXJyYXlCdWZmZXIsaWU9Si5pc0FycmF5QnVmZmVyVmlldyxsZT1KLmlzRGF0ZSxtZT1KLmlzTWFwLF9lPUouaXNSZWdFeHAsVGU9Si5pc1NldCxTZT1KLmlz''@;'; put 'put ''TmF0aXZlRXJyb3IsemU9Si5pc0JveGVkUHJpbWl0aXZlLFY9Si5pc051bWJlck9iamVjdCxwPUouaXNTdHJpbmdPYmplY3QsYj1KLmlzQm9vbGVhbk9iamVjdCx4PUouaXNCaWdJbnRPYmplY3QsQz1KLmlzU3ltYm9sT2JqZWN0LFQ9Si5pc0Zsb2F0MzJBcnJheSxIPUouaXNGbG9hdDY0QXJy''@;'; put 'put ''YXk7ZnVuY3Rpb24gaihEdCl7aWYoMD09PUR0Lmxlbmd0aHx8RHQubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgaXQ9MDtpdDxEdC5sZW5ndGg7aXQrKyl7dmFyICRlPUR0LmNoYXJDb2RlQXQoaXQpO2lmKCRlPDQ4fHwkZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT1EdC5sZW5ndGgmJkR0''@;'; put 'put ''Pj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBFKER0KXtyZXR1cm4gT2JqZWN0LmtleXMoRHQpLmZpbHRlcihqKS5jb25jYXQoSyhEdCkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChEdCkpKX1mdW5jdGlvbiBtKER0LGl0KXtpZihEdD09PWl0KXJl''@;'; put 'put ''dHVybiAwO2Zvcih2YXIgJGU9RHQubGVuZ3RoLHR0PWl0Lmxlbmd0aCxIZT0wLHV0PU1hdGgubWluKCRlLHR0KTtIZTx1dDsrK0hlKWlmKER0W0hlXSE9PWl0W0hlXSl7JGU9RHRbSGVdLHR0PWl0W0hlXTticmVha31yZXR1cm4gJGU8dHQ/LTE6dHQ8JGU/MTowfXZhciBzZT0wLHdlPTEsVWU9''@;'; put 'put ''MixKZT0zO2Z1bmN0aW9uIERlKER0LGl0LCRlLHR0KXtpZihEdD09PWl0KXJldHVybiAwIT09RHR8fCEkZXx8TChEdCxpdCk7aWYoJGUpe2lmKCJvYmplY3QiIT09RihEdCkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBEdCYmVShEdCkmJlUoaXQpO2lmKCJvYmplY3QiIT09RihpdCl8fG51bGw9''@;'; put 'put ''PT1EdHx8bnVsbD09PWl0fHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoRHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGl0KSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1EdHx8Im9iamVjdCIhPT1GKER0KSlyZXR1cm4obnVsbD09PWl0fHwib2JqZWN0IiE9PUYoaXQpKSYmRHQ9PWl0O2lmKG51''@;'; put 'put ''bGw9PT1pdHx8Im9iamVjdCIhPT1GKGl0KSlyZXR1cm4hMX12YXIgSGU9ZWUoRHQpO2lmKEhlIT09ZWUoaXQpKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoRHQpKXtpZihEdC5sZW5ndGghPT1pdC5sZW5ndGgpcmV0dXJuITE7dmFyIHF0PUUoRHQpLFJ0PUUoaXQpO3JldHVybiBxdC5sZW5n''@;'; put 'put ''dGg9PT1SdC5sZW5ndGgmJlJlKER0LGl0LCRlLHR0LHdlLHF0KX1pZigiW29iamVjdCBPYmplY3RdIj09PUhlJiYoIW1lKER0KSYmbWUoaXQpfHwhVGUoRHQpJiZUZShpdCkpKXJldHVybiExO2lmKGxlKER0KSl7aWYoIWxlKGl0KXx8RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKER0KSE9''@;'; put 'put ''PURhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChpdCkpcmV0dXJuITF9ZWxzZSBpZihfZShEdCkpe2lmKCFfZShpdCl8fCFmdW5jdGlvbiBvdChEdCxpdCl7cmV0dXJuIE8/RHQuc291cmNlPT09aXQuc291cmNlJiZEdC5mbGFncz09PWl0LmZsYWdzOlJlZ0V4cC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChEdCk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXQpfShEdCxpdCkpcmV0dXJuITF9ZWxzZSBpZihTZShEdCl8fER0IGluc3RhbmNlb2YgRXJyb3Ipe2lmKER0Lm1lc3NhZ2UhPT1pdC5tZXNzYWdlfHxEdC5uYW1lIT09aXQubmFtZSlyZXR1cm4hMX1lbHNle2lm''@;'; put 'put ''KGllKER0KSl7aWYoJGV8fCFUKER0KSYmIUgoRHQpKXtpZighZnVuY3Rpb24gdmUoRHQsaXQpe3JldHVybiBEdC5ieXRlTGVuZ3RoPT09aXQuYnl0ZUxlbmd0aCYmMD09PW0obmV3IFVpbnQ4QXJyYXkoRHQuYnVmZmVyLER0LmJ5dGVPZmZzZXQsRHQuYnl0ZUxlbmd0aCksbmV3IFVpbnQ4QXJy''@;'; put 'put ''YXkoaXQuYnVmZmVyLGl0LmJ5dGVPZmZzZXQsaXQuYnl0ZUxlbmd0aCkpfShEdCxpdCkpcmV0dXJuITF9ZWxzZSBpZighZnVuY3Rpb24gTWUoRHQsaXQpe2lmKER0LmJ5dGVMZW5ndGghPT1pdC5ieXRlTGVuZ3RoKXJldHVybiExO2Zvcih2YXIgJGU9MDskZTxEdC5ieXRlTGVuZ3RoOyRlKysp''@;'; put 'put ''aWYoRHRbJGVdIT09aXRbJGVdKXJldHVybiExO3JldHVybiEwfShEdCxpdCkpcmV0dXJuITE7dmFyIFB0PUUoRHQpLHNpPUUoaXQpO3JldHVybiBQdC5sZW5ndGg9PT1zaS5sZW5ndGgmJlJlKER0LGl0LCRlLHR0LHNlLFB0KX1pZihUZShEdCkpcmV0dXJuISghVGUoaXQpfHxEdC5zaXplIT09''@;'; put 'put ''aXQuc2l6ZSkmJlJlKER0LGl0LCRlLHR0LFVlKTtpZihtZShEdCkpcmV0dXJuISghbWUoaXQpfHxEdC5zaXplIT09aXQuc2l6ZSkmJlJlKER0LGl0LCRlLHR0LEplKTtpZihuZShEdCkpe2lmKCFmdW5jdGlvbiBYZShEdCxpdCl7cmV0dXJuIER0LmJ5dGVMZW5ndGg9PT1pdC5ieXRlTGVuZ3Ro''@;'; put 'put ''JiYwPT09bShuZXcgVWludDhBcnJheShEdCksbmV3IFVpbnQ4QXJyYXkoaXQpKX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoemUoRHQpJiYhZnVuY3Rpb24gamUoRHQsaXQpe3JldHVybiBWKER0KT9WKGl0KSYmTChOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCksTnVtYmVyLnBy''@;'; put 'put ''b3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpKTpwKER0KT9wKGl0KSYmU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpPT09U3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpOmIoRHQpP2IoaXQpJiZCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpPT09Qm9vbGVh''@;'; put 'put ''bi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTp4KER0KT94KGl0KSYmQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpPT09QmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpOkMoaXQpJiZTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1TeW1ib2wucHJv''@;'; put 'put ''dG90eXBlLnZhbHVlT2YuY2FsbChpdCl9KER0LGl0KSlyZXR1cm4hMX1yZXR1cm4gUmUoRHQsaXQsJGUsdHQsc2UpfWZ1bmN0aW9uIEZlKER0LGl0KXtyZXR1cm4gaXQuZmlsdGVyKGZ1bmN0aW9uKCRlKXtyZXR1cm4gcShEdCwkZSl9KX1mdW5jdGlvbiBSZShEdCxpdCwkZSx0dCxIZSx1dCl7''@;'; put 'put ''aWYoNT09PWFyZ3VtZW50cy5sZW5ndGgpe3V0PU9iamVjdC5rZXlzKER0KTt2YXIgcXQ9T2JqZWN0LmtleXMoaXQpO2lmKHV0Lmxlbmd0aCE9PXF0Lmxlbmd0aClyZXR1cm4hMX1mb3IodmFyIFJ0PTA7UnQ8dXQubGVuZ3RoO1J0KyspaWYoIVkoaXQsdXRbUnRdKSlyZXR1cm4hMTtpZigkZSYm''@;'; put 'put ''NT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBQdD1LKER0KTtpZigwIT09UHQubGVuZ3RoKXt2YXIgc2k9MDtmb3IoUnQ9MDtSdDxQdC5sZW5ndGg7UnQrKyl7dmFyIFF0PVB0W1J0XTtpZihxKER0LFF0KSl7aWYoIXEoaXQsUXQpKXJldHVybiExO3V0LnB1c2goUXQpLHNpKyt9ZWxzZSBpZihx''@;'; put 'put ''KGl0LFF0KSlyZXR1cm4hMX12YXIgc249SyhpdCk7aWYoUHQubGVuZ3RoIT09c24ubGVuZ3RoJiZGZShpdCxzbikubGVuZ3RoIT09c2kpcmV0dXJuITF9ZWxzZXt2YXIgUmk9SyhpdCk7aWYoMCE9PVJpLmxlbmd0aCYmMCE9PUZlKGl0LFJpKS5sZW5ndGgpcmV0dXJuITF9fWlmKDA9PT11dC5s''@;'; put 'put ''ZW5ndGgmJihIZT09PXNlfHxIZT09PXdlJiYwPT09RHQubGVuZ3RofHwwPT09RHQuc2l6ZSkpcmV0dXJuITA7aWYodm9pZCAwPT09dHQpdHQ9e3ZhbDE6bmV3IE1hcCx2YWwyOm5ldyBNYXAscG9zaXRpb246MH07ZWxzZXt2YXIgaG49dHQudmFsMS5nZXQoRHQpO2lmKHZvaWQgMCE9PWhuKXt2''@;'; put 'put ''YXIgZnQ9dHQudmFsMi5nZXQoaXQpO2lmKHZvaWQgMCE9PWZ0KXJldHVybiBobj09PWZ0fXR0LnBvc2l0aW9uKyt9dHQudmFsMS5zZXQoRHQsdHQucG9zaXRpb24pLHR0LnZhbDIuc2V0KGl0LHR0LnBvc2l0aW9uKTt2YXIgT3I9ZnVuY3Rpb24gdW4oRHQsaXQsJGUsdHQsSGUsdXQpe3ZhciBx''@;'; put 'put ''dD0wO2lmKHV0PT09VWUpe2lmKCFmdW5jdGlvbiBfdChEdCxpdCwkZSx0dCl7Zm9yKHZhciBIZT1udWxsLHV0PXooRHQpLHF0PTA7cXQ8dXQubGVuZ3RoO3F0Kyspe3ZhciBSdD11dFtxdF07aWYoIm9iamVjdCI9PT1GKFJ0KSYmbnVsbCE9PVJ0KW51bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhl''@;'; put 'put ''LmFkZChSdCk7ZWxzZSBpZighaXQuaGFzKFJ0KSl7aWYoJGV8fCFrZShEdCxpdCxSdCkpcmV0dXJuITE7bnVsbD09PUhlJiYoSGU9bmV3IFNldCksSGUuYWRkKFJ0KX19aWYobnVsbCE9PUhlKXtmb3IodmFyIFB0PXooaXQpLHNpPTA7c2k8UHQubGVuZ3RoO3NpKyspe3ZhciBRdD1QdFtzaV07''@;'; put 'put ''aWYoIm9iamVjdCI9PT1GKFF0KSYmbnVsbCE9PVF0KXtpZighSWUoSGUsUXQsJGUsdHQpKXJldHVybiExfWVsc2UgaWYoISRlJiYhRHQuaGFzKFF0KSYmIUllKEhlLFF0LCRlLHR0KSlyZXR1cm4hMX1yZXR1cm4gMD09PUhlLnNpemV9cmV0dXJuITB9KER0LGl0LCRlLEhlKSlyZXR1cm4hMX1l''@;'; put 'put ''bHNlIGlmKHV0PT09SmUpe2lmKCFmdW5jdGlvbiBRZShEdCxpdCwkZSx0dCl7Zm9yKHZhciBIZT1udWxsLHV0PU4oRHQpLHF0PTA7cXQ8dXQubGVuZ3RoO3F0Kyspe3ZhciBSdD1JKHV0W3F0XSwyKSxQdD1SdFswXSxzaT1SdFsxXTtpZigib2JqZWN0Ij09PUYoUHQpJiZudWxsIT09UHQpbnVs''@;'; put 'put ''bD09PUhlJiYoSGU9bmV3IFNldCksSGUuYWRkKFB0KTtlbHNle3ZhciBRdD1pdC5nZXQoUHQpO2lmKHZvaWQgMD09PVF0JiYhaXQuaGFzKFB0KXx8IURlKHNpLFF0LCRlLHR0KSl7aWYoJGV8fCFBZShEdCxpdCxQdCxzaSx0dCkpcmV0dXJuITE7bnVsbD09PUhlJiYoSGU9bmV3IFNldCksSGUu''@;'; put 'put ''YWRkKFB0KX19fWlmKG51bGwhPT1IZSl7Zm9yKHZhciBzbj1OKGl0KSxSaT0wO1JpPHNuLmxlbmd0aDtSaSsrKXt2YXIgaG49SShzbltSaV0sMiksZnQ9aG5bMF0sT3I9aG5bMV07aWYoIm9iamVjdCI9PT1GKGZ0KSYmbnVsbCE9PWZ0KXtpZighbnQoSGUsRHQsZnQsT3IsJGUsdHQpKXJldHVy''@;'; put 'put ''biExfWVsc2UgaWYoISgkZXx8RHQuaGFzKGZ0KSYmRGUoRHQuZ2V0KGZ0KSxPciwhMSx0dCl8fG50KEhlLER0LGZ0LE9yLCExLHR0KSkpcmV0dXJuITF9cmV0dXJuIDA9PT1IZS5zaXplfXJldHVybiEwfShEdCxpdCwkZSxIZSkpcmV0dXJuITF9ZWxzZSBpZih1dD09PXdlKWZvcig7cXQ8RHQu''@;'; put 'put ''bGVuZ3RoO3F0Kyspe2lmKCFZKER0LHF0KSl7aWYoWShpdCxxdCkpcmV0dXJuITE7Zm9yKHZhciBSdD1PYmplY3Qua2V5cyhEdCk7cXQ8UnQubGVuZ3RoO3F0Kyspe3ZhciBQdD1SdFtxdF07aWYoIVkoaXQsUHQpfHwhRGUoRHRbUHRdLGl0W1B0XSwkZSxIZSkpcmV0dXJuITF9cmV0dXJuIFJ0''@;'; put 'put ''Lmxlbmd0aD09PU9iamVjdC5rZXlzKGl0KS5sZW5ndGh9aWYoIVkoaXQscXQpfHwhRGUoRHRbcXRdLGl0W3F0XSwkZSxIZSkpcmV0dXJuITF9Zm9yKHF0PTA7cXQ8dHQubGVuZ3RoO3F0Kyspe3ZhciBzaT10dFtxdF07aWYoIURlKER0W3NpXSxpdFtzaV0sJGUsSGUpKXJldHVybiExfXJldHVy''@;'; put 'put ''biEwfShEdCxpdCwkZSx1dCx0dCxIZSk7cmV0dXJuIHR0LnZhbDEuZGVsZXRlKER0KSx0dC52YWwyLmRlbGV0ZShpdCksT3J9ZnVuY3Rpb24gSWUoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9eihEdCksdXQ9MDt1dDxIZS5sZW5ndGg7dXQrKyl7dmFyIHF0PUhlW3V0XTtpZihEZShpdCxxdCwk''@;'; put 'put ''ZSx0dCkpcmV0dXJuIER0LmRlbGV0ZShxdCksITB9cmV0dXJuITF9ZnVuY3Rpb24gVmUoRHQpe3N3aXRjaChGKER0KSl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBudWxsO2Nhc2Uib2JqZWN0IjpyZXR1cm47Y2FzZSJzeW1ib2wiOnJldHVybiExO2Nhc2Uic3RyaW5nIjpEdD0rRHQ7Y2FzZSJu''@;'; put 'put ''dW1iZXIiOmlmKFUoRHQpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGtlKER0LGl0LCRlKXt2YXIgdHQ9VmUoJGUpO3JldHVybiB0dD8/KGl0Lmhhcyh0dCkmJiFEdC5oYXModHQpKX1mdW5jdGlvbiBBZShEdCxpdCwkZSx0dCxIZSl7dmFyIHV0PVZlKCRlKTtpZihudWxsIT11dClyZXR1''@;'; put 'put ''cm4gdXQ7dmFyIHF0PWl0LmdldCh1dCk7cmV0dXJuISh2b2lkIDA9PT1xdCYmIWl0Lmhhcyh1dCl8fCFEZSh0dCxxdCwhMSxIZSkpJiYhRHQuaGFzKHV0KSYmRGUodHQscXQsITEsSGUpfWZ1bmN0aW9uIG50KER0LGl0LCRlLHR0LEhlLHV0KXtmb3IodmFyIHF0PXooRHQpLFJ0PTA7UnQ8cXQu''@;'; put 'put ''bGVuZ3RoO1J0Kyspe3ZhciBQdD1xdFtSdF07aWYoRGUoJGUsUHQsSGUsdXQpJiZEZSh0dCxpdC5nZXQoUHQpLEhlLHV0KSlyZXR1cm4gRHQuZGVsZXRlKFB0KSwhMH1yZXR1cm4hMX11ZS5leHBvcnRzPXtpc0RlZXBFcXVhbDpmdW5jdGlvbiB5dChEdCxpdCl7cmV0dXJuIERlKER0LGl0LCEx''@;'; put 'put ''KX0saXNEZWVwU3RyaWN0RXF1YWw6ZnVuY3Rpb24gTXQoRHQsaXQpe3JldHVybiBEZShEdCxpdCwhMCl9fX0sODIyNDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgud3JhcHBlcj1mdW5jdGlvbiB5KEkpe3Jl''@;'; put 'put ''dHVybiBJfX0sOTc0MjoodWUsWCk9PnsidXNlIHN0cmljdCI7WC5ieXRlTGVuZ3RoPWZ1bmN0aW9uIEYoVSl7dmFyIFc9UChVKSxxPVdbMV07cmV0dXJuIDMqKFdbMF0rcSkvNC1xfSxYLnRvQnl0ZUFycmF5PWZ1bmN0aW9uIHooVSl7dmFyIFcsbGUsWT1QKFUpLHE9WVswXSxlZT1ZWzFdLEo9''@;'; put 'put ''bmV3IF8oZnVuY3Rpb24gTyhVLFcsWSl7cmV0dXJuIDMqKFcrWSkvNC1ZfSgwLHEsZWUpKSxuZT0wLGllPWVlPjA/cS00OnE7Zm9yKGxlPTA7bGU8aWU7bGUrPTQpVz1JW1UuY2hhckNvZGVBdChsZSldPDwxOHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDEyfElbVS5jaGFyQ29kZUF0KGxlKzIp''@;'; put 'put ''XTw8NnxJW1UuY2hhckNvZGVBdChsZSszKV0sSltuZSsrXT1XPj4xNiYyNTUsSltuZSsrXT1XPj44JjI1NSxKW25lKytdPTI1NSZXO3JldHVybiAyPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDJ8SVtVLmNoYXJDb2RlQXQobGUrMSldPj40LEpbbmUrK109MjU1JlcpLDE9PT1lZSYm''@;'; put 'put ''KFc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MTB8SVtVLmNoYXJDb2RlQXQobGUrMSldPDw0fElbVS5jaGFyQ29kZUF0KGxlKzIpXT4+MixKW25lKytdPVc+PjgmMjU1LEpbbmUrK109MjU1JlcpLEp9LFguZnJvbUJ5dGVBcnJheT1mdW5jdGlvbiBLKFUpe2Zvcih2YXIgVyxZPVUubGVuZ3RoLHE9''@;'; put 'put ''WSUzLGVlPVtdLEo9MTYzODMsbmU9MCxpZT1ZLXE7bmU8aWU7bmUrPUopZWUucHVzaChMKFUsbmUsbmUrSj5pZT9pZTpuZStKKSk7cmV0dXJuIDE9PT1xP2VlLnB1c2goeVsoVz1VW1ktMV0pPj4yXSt5W1c8PDQmNjNdKyI9PSIpOjI9PT1xJiZlZS5wdXNoKHlbKFc9KFVbWS0yXTw8OCkrVVtZ''@;'; put 'put ''LTFdKT4+MTBdK3lbVz4+NCY2M10reVtXPDwyJjYzXSsiPSIpLGVlLmpvaW4oIiIpfTtmb3IodmFyIHk9W10sST1bXSxfPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LGc9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXow''@;'; put 'put ''MTIzNDU2Nzg5Ky8iLEI9MDtCPDY0OysrQil5W0JdPWdbQl0sSVtnLmNoYXJDb2RlQXQoQildPUI7ZnVuY3Rpb24gUChVKXt2YXIgVz1VLmxlbmd0aDtpZihXJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIg''@;'; put 'put ''WT1VLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PVkmJihZPVcpLFtZLFk9PT1XPzA6NC1ZJTRdfWZ1bmN0aW9uIE4oVSl7cmV0dXJuIHlbVT4+MTgmNjNdK3lbVT4+MTImNjNdK3lbVT4+NiY2M10reVs2MyZVXX1mdW5jdGlvbiBMKFUsVyxZKXtmb3IodmFyIGVlPVtdLEo9VztKPFk7Sis9Myll''@;'; put 'put ''ZS5wdXNoKE4oKFVbSl08PDE2JjE2NzExNjgwKSsoVVtKKzFdPDw4JjY1MjgwKSsoMjU1JlVbSisyXSkpKTtyZXR1cm4gZWUuam9pbigiIil9SVs0NV09NjIsSVs5NV09NjN9LDM1NTA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh4LEMp''@;'; put 'put ''e2lmKCF4KXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoeCxDKXt4LnN1cGVyXz1DO3ZhciBUPWZ1bmN0aW9uKCl7fTtULnByb3RvdHlwZT1DLnByb3RvdHlwZSx4LnByb3RvdHlwZT1uZXcgVCx4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj14fWZ1bmN0''@;'; put 'put ''aW9uIHcoeCxDLFQpe2lmKHcuaXNCTih4KSlyZXR1cm4geDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eCYmKCgibGUiPT09Q3x8ImJlIj09PUMpJiYoVD1DLEM9MTApLHRoaXMuX2luaXQoeHx8MCxDfHwxMCxUfHwi''@;'; put 'put ''YmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg2NjAxKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9u''@;'; put 'put ''IEYoeCxDKXt2YXIgVD14LmNoYXJDb2RlQXQoQyk7cmV0dXJuIFQ+PTQ4JiZUPD01Nz9ULTQ4OlQ+PTY1JiZUPD03MD9ULTU1OlQ+PTk3JiZUPD0xMDI/VC04Nzp2b2lkIGcoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIreCl9ZnVuY3Rpb24gTyh4LEMsVCl7dmFyIEg9Rih4LFQpO3JldHVy''@;'; put 'put ''biBULTE+PUMmJihIfD1GKHgsVC0xKTw8NCksSH1mdW5jdGlvbiB6KHgsQyxULEgpe2Zvcih2YXIgaj0wLEU9MCxtPU1hdGgubWluKHgubGVuZ3RoLFQpLEE9QztBPG07QSsrKXt2YXIgYWU9eC5jaGFyQ29kZUF0KEEpLTQ4O2oqPUgsRT1hZT49NDk/YWUtNDkrMTA6YWU+PTE3P2FlLTE3KzEw''@;'; put 'put ''OmFlLGcoYWU+PTAmJkU8SCwiSW52YWxpZCBjaGFyYWN0ZXIiKSxqKz1FfXJldHVybiBqfWZ1bmN0aW9uIE4oeCxDKXt4LndvcmRzPUMud29yZHMseC5sZW5ndGg9Qy5sZW5ndGgseC5uZWdhdGl2ZT1DLm5lZ2F0aXZlLHgucmVkPUMucmVkfWlmKHcuaXNCTj1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''QyBpbnN0YW5jZW9mIHd8fG51bGwhPT1DJiYib2JqZWN0Ij09dHlwZW9mIEMmJkMuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KEMud29yZHMpfSx3Lm1heD1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKT4wP0M6VH0sdy5taW49ZnVuY3Rpb24o''@;'; put 'put ''QyxUKXtyZXR1cm4gQy5jbXAoVCk8MD9DOlR9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEMsVCxIKXtpZigibnVtYmVyIj09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoQyxULEgpO2lmKCJvYmplY3QiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdEFycmF5KEMsVCxI''@;'; put 'put ''KTsiaGV4Ij09PVQmJihUPTE2KSxnKFQ9PT0oMHxUKSYmVD49MiYmVDw9MzYpO3ZhciBqPTA7Ii0iPT09KEM9Qy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihqKyssdGhpcy5uZWdhdGl2ZT0xKSxqPEMubGVuZ3RoJiYoMTY9PT1UP3RoaXMuX3BhcnNlSGV4KEMsaixIKToo''@;'; put 'put ''dGhpcy5fcGFyc2VCYXNlKEMsVCxqKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oQyxULEgpe0M8MCYmKHRoaXMubmVnYXRpdmU9MSxDPS1DKSxDPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2''@;'; put 'put ''NzEwODg2MyZDXSx0aGlzLmxlbmd0aD0xKTpDPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcoQzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcx''@;'; put 'put ''MDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKEMsVCxIKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQy5sZW5ndGgpLEMubGVuZ3RoPD0wKXJldHVybiB0aGlz''@;'; put 'put ''LndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKEMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIEUsbSxBPTA7aWYoImJlIj09''@;'; put 'put ''PUgpZm9yKGo9Qy5sZW5ndGgtMSxFPTA7aj49MDtqLT0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqLTFdPDw4fENbai0yXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7ZWxzZSBpZigibGUiPT09''@;'; put 'put ''SClmb3Ioaj0wLEU9MDtqPEMubGVuZ3RoO2orPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2orMV08PDh8Q1tqKzJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKEMsVCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKEMubGVuZ3RoLVQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIEEs''@;'; put 'put ''RT0wLG09MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xO2o+PVQ7ai09MilBPU8oQyxULGopPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODtlbHNlIGZvcihqPShDLmxlbmd0aC1UKSUyPT0wP1QrMTpU''@;'; put 'put ''O2o8Qy5sZW5ndGg7ais9MilBPU8oQyxULGopPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODt0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKEMsVCxIKXt0aGlzLndvcmRz''@;'; put 'put ''PVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgaj0wLEU9MTtFPD02NzEwODg2MztFKj1UKWorKztqLS0sRT1FL1R8MDtmb3IodmFyIG09Qy5sZW5ndGgtSCxBPW0laixhZT1NYXRoLm1pbihtLG0tQSkrSCx0ZT0wLHNlPUg7c2U8YWU7c2UrPWopdGU9eihDLHNlLHNlK2osVCksdGhpcy5pbXVs''@;'; put 'put ''bihFKSx0aGlzLndvcmRzWzBdK3RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXRlOnRoaXMuX2lhZGRuKHRlKTtpZigwIT09QSl7dmFyIHdlPTE7Zm9yKHRlPXooQyxzZSxDLmxlbmd0aCxUKSxzZT0wO3NlPEE7c2UrKyl3ZSo9VDt0aGlzLmltdWxuKHdlKSx0aGlzLndvcmRzWzBdK3RlPDY3''@;'; put 'put ''MTA4ODY0P3RoaXMud29yZHNbMF0rPXRlOnRoaXMuX2lhZGRuKHRlKX10aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKEMpe0Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylDLndvcmRzW1RdPXRoaXMud29y''@;'; put 'put ''ZHNbVF07Qy5sZW5ndGg9dGhpcy5sZW5ndGgsQy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLEMucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihDKXtOKEMsdGhpcyl9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29weShDKSxDfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8QzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlz''@;'; put 'put ''LndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlw''@;'; put 'put ''ZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXt3LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1MfWNhdGNoe3cucHJvdG90eXBlLmluc3BlY3Q9TH1lbHNlIHcucHJvdG90eXBlLmluc3BlY3Q9TDtmdW5j''@;'; put 'put ''dGlvbiBMKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIEs9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDEx''@;'; put 'put ''LDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxXPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4''@;'; put 'put ''LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0''@;'; put 'put ''MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZTt2YXIgSD14Lmxlbmd0aCtDLmxlbmd0aHwwO1QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgaj0wfHgud29yZHNbMF0sRT0wfEMud29y''@;'; put 'put ''ZHNbMF0sbT1qKkUsYWU9bS82NzEwODg2NHwwO1Qud29yZHNbMF09NjcxMDg4NjMmbTtmb3IodmFyIHRlPTE7dGU8SDt0ZSsrKXtmb3IodmFyIHNlPWFlPj4+MjYsd2U9NjcxMDg4NjMmYWUsVWU9TWF0aC5taW4odGUsQy5sZW5ndGgtMSksSmU9TWF0aC5tYXgoMCx0ZS14Lmxlbmd0aCsxKTtK''@;'; put 'put ''ZTw9VWU7SmUrKylzZSs9KG09KGo9MHx4LndvcmRzW3RlLUplfDBdKSooRT0wfEMud29yZHNbSmVdKSt3ZSkvNjcxMDg4NjR8MCx3ZT02NzEwODg2MyZtO1Qud29yZHNbdGVdPTB8d2UsYWU9MHxzZX1yZXR1cm4gMCE9PWFlP1Qud29yZHNbdGVdPTB8YWU6VC5sZW5ndGgtLSxULl9zdHJpcCgp''@;'; put 'put ''fXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKEMsVCl7dmFyIEg7aWYoVD0wfFR8fDEsMTY9PT0oQz1DfHwxMCl8fCJoZXgiPT09Qyl7SD0iIjtmb3IodmFyIGo9MCxFPTAsbT0wO208dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT10aGlzLndvcmRzW21dLGFlPSgxNjc3NzIxNSYoQTw8anxF''@;'; put 'put ''KSkudG9TdHJpbmcoMTYpO0U9QT4+PjI0LWomMTY3NzcyMTUsKGorPTIpPj0yNiYmKGotPTI2LG0tLSksSD0wIT09RXx8bSE9PXRoaXMubGVuZ3RoLTE/S1s2LWFlLmxlbmd0aF0rYWUrSDphZStIfWZvcigwIT09RSYmKEg9RS50b1N0cmluZygxNikrSCk7SC5sZW5ndGglVCE9MDspSD0iMCIr''@;'; put 'put ''SDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpe3ZhciB0ZT1VW0NdLHNlPVdbQ107SD0iIjt2YXIgd2U9dGhpcy5jbG9uZSgpO2Zvcih3ZS5uZWdhdGl2ZT0wOyF3ZS5pc1plcm8oKTspe3ZhciBVZT13ZS5tb2RybihzZSku''@;'; put 'put ''dG9TdHJpbmcoQyk7SD0od2U9d2UuaWRpdm4oc2UpKS5pc1plcm8oKT9VZStIOktbdGUtVWUubGVuZ3RoXStVZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglVCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWcoITEsIkJh''@;'; put 'put ''c2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Qys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRz''@;'; put 'put ''WzJdP0MrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tQzpDfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0sUCYmKHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoUCxDLFQpfSksdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5''@;'; put 'put ''LEMsVCl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKEMsVCxIKXt0aGlzLl9zdHJpcCgpO3ZhciBqPXRoaXMuYnl0ZUxlbmd0aCgpLEU9SHx8TWF0aC5tYXgoMSxqKTtnKGo8PUUsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKEU+MCwiUmVxdWVz''@;'; put 'put ''dGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIG09ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5hbGxvY1Vuc2FmZT9DLmFsbG9jVW5zYWZlKFQpOm5ldyBDKFQpfShDLEUpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09VD8iTEUiOiJCRSIpXShtLGopLG19LHcucHJvdG90eXBl''@;'; put 'put ''Ll90b0FycmF5TGlrZUxFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTAsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0grK109MjU1JkEsSDxDLmxlbmd0aCYmKENbSCsrXT1BPj44JjI1NSksSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4x''@;'; put 'put ''NiYyNTUpLDY9PT1tPyhIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg8Qy5sZW5ndGgpZm9yKENbSCsrXT1qO0g8Qy5sZW5ndGg7KUNbSCsrXT0wfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbihDLFQpe2Zvcih2''@;'; put 'put ''YXIgSD1DLmxlbmd0aC0xLGo9MCxFPTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tILS1dPTI1NSZBLEg+PTAmJihDW0gtLV09QT4+OCYyNTUpLEg+PTAmJihDW0gtLV09QT4+MTYmMjU1KSw2PT09bT8oSD49MCYmKENbSC0tXT1BPj4yNCYyNTUp''@;'; put 'put ''LGo9MCxtPTApOihqPUE+Pj4yNCxtKz0yKX1pZihIPj0wKWZvcihDW0gtLV09ajtIPj0wOylDW0gtLV09MH0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKEMpe3JldHVybiAzMi1NYXRoLmNsejMyKEMpfTpmdW5jdGlvbihDKXt2YXIgVD1DLEg9MDtyZXR1cm4g''@;'; put 'put ''VD49NDA5NiYmKEgrPTEzLFQ+Pj49MTMpLFQ+PTY0JiYoSCs9NyxUPj4+PTcpLFQ+PTgmJihIKz00LFQ+Pj49NCksVD49MiYmKEgrPTIsVD4+Pj0yKSxIK1R9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihDKXtpZigwPT09QylyZXR1cm4gMjY7dmFyIFQ9QyxIPTA7cmV0dXJuIDgx''@;'; put 'put ''OTEmVHx8KEgrPTEzLFQ+Pj49MTMpLDEyNyZUfHwoSCs9NyxUPj4+PTcpLDE1JlR8fChIKz00LFQ+Pj49NCksMyZUfHwoSCs9MixUPj4+PTIpLDEmVHx8SCsrLEh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBUPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK1R9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIEM9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNb''@;'; put 'put ''VF0pO2lmKEMrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBDfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3Ro''@;'; put 'put ''aXMuYWJzKCkuaW5vdG4oQykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy50ZXN0bihDLTEpP3RoaXMubm90bihDKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLml1b3I9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgVD0wO1Q8Qy5sZW5ndGg7VCsrKXRoaXMud29yZHNbVF09dGhpcy53b3Jkc1tUXXxDLndvcmRzW1RdO3JldHVybiB0aGlzLl9zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1b3IoQyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKEMpOkMuY2xvbmUo''@;'; put 'put ''KS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoQyk6Qy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKEMpe3ZhciBUO1Q9dGhpcy5sZW5ndGg+Qy5s''@;'; put 'put ''ZW5ndGg/Qzp0aGlzO2Zvcih2YXIgSD0wO0g8VC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZDLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ULmxlbmd0aCx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhp''@;'; put 'put ''cy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChDKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChDKTpDLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihD''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKEMpOkMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oQyl7dmFyIFQsSDt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oVD10aGlzLEg9Qyk6KFQ9QyxIPXRoaXMpO2Zvcih2''@;'; put 'put ''YXIgaj0wO2o8SC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXV5ILndvcmRzW2pdO2lmKHRoaXMhPT1UKWZvcig7ajxULmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1ULmxlbmd0aCx0aGlzLl9zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5peG9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihDKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihDKTpDLmNsb25lKCkuaXhv''@;'; put 'put ''cih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKEMpOkMuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+''@;'; put 'put ''PTApO3ZhciBUPTB8TWF0aC5jZWlsKEMvMjYpLEg9QyUyNjt0aGlzLl9leHBhbmQoVCksSD4wJiZULS07Zm9yKHZhciBqPTA7ajxUO2orKyl0aGlzLndvcmRzW2pdPTY3MTA4ODYzJn50aGlzLndvcmRzW2pdO3JldHVybiBIPjAmJih0aGlzLndvcmRzW2pdPX50aGlzLndvcmRzW2pdJjY3MTA4''@;'; put 'put ''ODYzPj4yNi1IKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oQyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oQyxUKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEg9Qy8yNnwwLGo9QyUyNjty''@;'; put 'put ''ZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1UP3RoaXMud29yZHNbSF18MTw8ajp0aGlzLndvcmRzW0hdJn4oMTw8aiksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDKXt2YXIgVCxILGo7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5l''@;'; put 'put ''Z2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gQy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLEMubmVnYXRpdmU9MSxU''@;'; put 'put ''Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhIPXRoaXMsaj1DKTooSD1DLGo9dGhpcyk7Zm9yKHZhciBFPTAsbT0wO208ai5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrKDB8ai53b3Jkc1ttXSkrRSksRT1UPj4+MjY7Zm9yKDsw''@;'; put 'put ''IT09RSYmbTxILmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxILndvcmRzW21dKStFKSxFPVQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09RSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1FLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3Io''@;'; put 'put ''O208SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09SC53b3Jkc1ttXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMpe3ZhciBUO3JldHVybiAwIT09Qy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCxUPXRoaXMuc3ViKEMpLEMubmVnYXRp''@;'; put 'put ''dmVePTEsVCk6MD09PUMubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsVD1DLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsVCk6dGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoQyk6Qy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlzdWI9ZnVuY3Rpb24oQyl7aWYoMCE9PUMubmVnYXRpdmUpe0MubmVnYXRpdmU9MDt2YXIgVD10aGlzLmlhZGQoQyk7cmV0dXJuIEMubmVnYXRpdmU9MSxULl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKEMpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBqLEUsSD10aGlzLmNtcChDKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhqPXRoaXMsRT1DKTooaj1DLEU9dGhpcyk7Zm9yKHZhciBtPTAsQT0w''@;'; put 'put ''O0E8RS5sZW5ndGg7QSsrKW09KFQ9KDB8ai53b3Jkc1tBXSktKDB8RS53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtmb3IoOzAhPT1tJiZBPGoubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7aWYo''@;'; put 'put ''MD09PW0mJkE8ai5sZW5ndGgmJmohPT10aGlzKWZvcig7QTxqLmxlbmd0aDtBKyspdGhpcy53b3Jkc1tBXT1qLndvcmRzW0FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxBKSxqIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc3ViPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihDKX07dmFyIEo9ZnVuY3Rpb24oQyxULEgpe3ZhciBhZSx0ZSxzZSxqPUMud29yZHMsRT1ULndvcmRzLG09SC53b3JkcyxBPTAsd2U9MHxqWzBdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfGpbMV0sTWU9''@;'; put 'put ''ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8alsyXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxqWzNdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfGpbNF0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8als1XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxqWzZdLHl0PTgxOTEm''@;'; put 'put ''dW4sTXQ9dW4+Pj4xMyxEdD0wfGpbN10saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8als4XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxqWzldLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfEVbMF0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8RVsxXSxobj04MTkxJlJpLGZ0''@;'; put 'put ''PVJpPj4+MTMsT3I9MHxFWzJdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfEVbM10sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8RVs0XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxFWzVdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfEVbNl0scm49ODE5MSZqbix6dD1qbj4+''@;'; put 'put ''PjEzLGhpPTB8RVs3XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxFWzhdLFh0PTgxOTEmSWksZW49SWk+Pj4xMyx1YT0wfEVbOV0sRWk9ODE5MSZ1YSx2cj11YT4+PjEzO0gubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBXbj0oQSsoYWU9TWF0aC5p''@;'; put 'put ''bXVsKFVlLFF0KSl8MCkrKCg4MTkxJih0ZT0odGU9TWF0aC5pbXVsKFVlLHNuKSkrTWF0aC5pbXVsKEplLFF0KXwwKSk8PDEzKXwwO0E9KChzZT1NYXRoLmltdWwoSmUsc24pKSsodGU+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLGFlPU1hdGguaW11bChNZSxRdCksdGU9KHRl''@;'; put 'put ''PU1hdGguaW11bChNZSxzbikpK01hdGguaW11bCh2ZSxRdCl8MCxzZT1NYXRoLmltdWwodmUsc24pO3ZhciAkaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGhuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCkpPDwxMyl8MDtB''@;'; put 'put ''PSgoc2U9c2UrTWF0aC5pbXVsKEplLGZ0KXwwKSsodGU+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChqZSxRdCksdGU9KHRlPU1hdGguaW11bChqZSxzbikpK01hdGguaW11bChEZSxRdCl8MCxzZT1NYXRoLmltdWwoRGUsc24pLGFlPWFlK01hdGguaW11''@;'; put 'put ''bChNZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGZ0KXwwO3ZhciBlaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFd0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsQXQpfDApK01h''@;'; put 'put ''dGguaW11bChKZSxXdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLEF0KXwwKSsodGU+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSZSxRdCksdGU9KHRlPU1hdGguaW11bChSZSxzbikpK01hdGguaW11bChJZSxRdCl8MCxzZT1NYXRo''@;'; put 'put ''LmltdWwoSWUsc24pLGFlPWFlK01hdGguaW11bChqZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKERlLGZ0KXwwLGFlPWFlK01hdGguaW11bChNZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwodmUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLEF0KXwwO3ZhciBRcj0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLHN0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKEplLFV0KXwwKSsodGU+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLGFlPU1hdGguaW11bChrZSxRdCksdGU9KHRlPU1hdGguaW11bChrZSxzbikpK01hdGguaW11bChBZSxRdCl8MCxzZT1NYXRoLmltdWwoQWUsc24pLGFlPWFlK01hdGguaW11bChSZSxobil8MCx0''@;'; put 'put ''ZT0odGU9dGUrTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKEllLGZ0KXwwLGFlPWFlK01hdGguaW11bChqZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKERl''@;'; put 'put ''LEF0KXwwLGFlPWFlK01hdGguaW11bChNZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLFV0KXwwO3ZhciBWaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFdlKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStN''@;'; put 'put ''YXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLFR0KXwwKSsodGU+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChudCxRdCksdGU9KHRlPU1hdGguaW11bChudCxzbikpK01hdGgu''@;'; put 'put ''aW11bChRZSxRdCl8MCxzZT1NYXRoLmltdWwoUWUsc24pLGFlPWFlK01hdGguaW11bChrZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGZ0KXwwLGFlPWFlK01hdGguaW11bChSZSxXdCl8MCx0ZT0odGU9''@;'; put 'put ''dGUrTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKEllLEF0KXwwLGFlPWFlK01hdGguaW11bChqZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKERlLFV0KXww''@;'; put 'put ''LGFlPWFlK01hdGguaW11bChNZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLFR0KXwwO3ZhciBOaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGh0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmlt''@;'; put 'put ''dWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHh0KXwwKSsodGU+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLGFlPU1hdGguaW11bCh5dCxRdCksdGU9KHRlPU1hdGguaW11bCh5dCxzbikpK01hdGguaW11bChN''@;'; put 'put ''dCxRdCl8MCxzZT1NYXRoLmltdWwoTXQsc24pLGFlPWFlK01hdGguaW11bChudCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGZ0KXwwLGFlPWFlK01hdGguaW11bChrZSxXdCl8MCx0ZT0odGU9dGUrTWF0''@;'; put 'put ''aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLEF0KXwwLGFlPWFlK01hdGguaW11bChSZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKEllLFV0KXwwLGFlPWFl''@;'; put 'put ''K01hdGguaW11bChqZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKERlLFR0KXwwLGFlPWFlK01hdGguaW11bChNZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQp''@;'; put 'put ''fDAsc2U9c2UrTWF0aC5pbXVsKHZlLHh0KXwwO3ZhciBEYT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLHJuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHp0KXwwKSso''@;'; put 'put ''dGU+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChpdCxRdCksdGU9KHRlPU1hdGguaW11bChpdCxzbikpK01hdGguaW11bCgkZSxRdCl8MCxzZT1NYXRoLmltdWwoJGUsc24pLGFlPWFlK01hdGguaW11bCh5dCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKE10LGZ0KXwwLGFlPWFlK01hdGguaW11bChudCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLEF0KXwwLGFlPWFlK01hdGgu''@;'; put 'put ''aW11bChrZSxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLFV0KXwwLGFlPWFlK01hdGguaW11bChSZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsc2U9''@;'; put 'put ''c2UrTWF0aC5pbXVsKEllLFR0KXwwLGFlPWFlK01hdGguaW11bChqZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKERlLHh0KXwwLGFlPWFlK01hdGguaW11bChNZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKHZlLHp0KXwwO3ZhciBMcj0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLGNuKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCkpPDwxMyl8MDtBPSgo''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKEplLGZuKXwwKSsodGU+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLGFlPU1hdGguaW11bChIZSxRdCksdGU9KHRlPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxzZT1NYXRoLmltdWwodXQsc24pLGFlPWFlK01hdGguaW11bChp''@;'; put 'put ''dCxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGZ0KXwwLGFlPWFlK01hdGguaW11bCh5dCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKE10LEF0KXwwLGFlPWFlK01hdGguaW11bChudCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLFV0KXwwLGFlPWFlK01hdGguaW11bChrZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLFR0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLFR0KXwwLGFlPWFlK01hdGguaW11bChSZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKEllLHh0KXwwLGFlPWFlK01hdGguaW11bChq''@;'; put 'put ''ZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKERlLHp0KXwwLGFlPWFlK01hdGguaW11bChNZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKHZlLGZuKXwwO3ZhciBXaT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLGVuKXwwKSsodGU+Pj4xMyl8MCkr''@;'; put 'put ''KFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxRdCksdGU9KHRlPU1hdGguaW11bChSdCxzbikpK01hdGguaW11bChQdCxRdCl8MCxzZT1NYXRoLmltdWwoUHQsc24pLGFlPWFlK01hdGguaW11bChIZSxobil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodXQsaG4pfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGZ0KXwwLGFlPWFlK01hdGguaW11bChpdCxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLEF0KXwwLGFlPWFlK01hdGguaW11bCh5dCxzdCl8''@;'; put 'put ''MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKE10LFV0KXwwLGFlPWFlK01hdGguaW11bChudCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsc2U9c2UrTWF0aC5pbXVs''@;'; put 'put ''KFFlLFR0KXwwLGFlPWFlK01hdGguaW11bChrZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLHh0KXwwLGFlPWFlK01hdGguaW11bChSZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLHp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoSWUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKEllLHp0KXwwLGFlPWFlK01hdGguaW11bChqZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKERlLGZuKXwwLGFlPWFlK01hdGguaW11bChNZSxYdCl8''@;'; put 'put ''MCx0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKHZlLGVuKXwwO3ZhciBwYT0oQSsoYWU9YWUrTWF0aC5pbXVsKFVlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoVWUsdnIpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEplLHZyKXwwKSsodGU+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxobiksdGU9KHRlPU1hdGguaW11bChSdCxmdCkpK01hdGguaW11bChQdCxobil8MCxzZT1NYXRoLmltdWwoUHQs''@;'; put 'put ''ZnQpLGFlPWFlK01hdGguaW11bChIZSxXdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLEF0KXwwKStNYXRoLmltdWwodXQsV3QpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LEF0KXwwLGFlPWFlK01hdGguaW11bChpdCxzdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoJGUsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLFV0KXwwLGFlPWFlK01hdGguaW11bCh5dCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKE10LFR0KXwwLGFlPWFlK01hdGguaW11bChudCxodCl8MCx0ZT0o''@;'; put 'put ''dGU9dGUrTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLHh0KXwwLGFlPWFlK01hdGguaW11bChrZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLHp0''@;'; put 'put ''KXwwLGFlPWFlK01hdGguaW11bChSZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKEllLGZuKXwwLGFlPWFlK01hdGguaW11bChqZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKERlLGVuKXwwO3ZhciBRbj0oQSsoYWU9YWUrTWF0aC5pbXVsKE1lLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsdnIpfDApK01hdGguaW11bCh2ZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKHZl''@;'; put 'put ''LHZyKXwwKSsodGU+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxXdCksdGU9KHRlPU1hdGguaW11bChSdCxBdCkpK01hdGguaW11bChQdCxXdCl8MCxzZT1NYXRoLmltdWwoUHQsQXQpLGFlPWFlK01hdGguaW11bChIZSxzdCl8MCx0ZT0odGU9dGUr''@;'; put 'put ''TWF0aC5pbXVsKEhlLFV0KXwwKStNYXRoLmltdWwodXQsc3QpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LFV0KXwwLGFlPWFlK01hdGguaW11bChpdCxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKCRlLFR0KXwwLGFl''@;'; put 'put ''PWFlK01hdGguaW11bCh5dCxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsc2U9c2UrTWF0aC5pbXVsKE10LHh0KXwwLGFlPWFlK01hdGguaW11bChudCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''cm4pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLHp0KXwwLGFlPWFlK01hdGguaW11bChrZSxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGZuKXwwLGFlPWFlK01hdGguaW11bChSZSxYdCl8MCx0ZT0odGU9dGUr''@;'; put 'put ''TWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKEllLGVuKXwwO3ZhciBsYT0oQSsoYWU9YWUrTWF0aC5pbXVsKGplLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoamUsdnIpfDApK01hdGguaW11bChEZSxFaSl8MCkpPDwx''@;'; put 'put ''Myl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKERlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxzdCksdGU9KHRlPU1hdGguaW11bChSdCxVdCkpK01hdGguaW11bChQdCxzdCl8MCxzZT1NYXRoLmltdWwoUHQsVXQpLGFlPWFlK01h''@;'; put 'put ''dGguaW11bChIZSxXZSl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLFR0KXwwKStNYXRoLmltdWwodXQsV2UpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LFR0KXwwLGFlPWFlK01hdGguaW11bChpdCxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAs''@;'; put 'put ''c2U9c2UrTWF0aC5pbXVsKCRlLHh0KXwwLGFlPWFlK01hdGguaW11bCh5dCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsc2U9c2UrTWF0aC5pbXVsKE10LHp0KXwwLGFlPWFlK01hdGguaW11bChudCxjbil8MCx0ZT0odGU9dGUrTWF0aC5p''@;'; put 'put ''bXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGZuKXwwLGFlPWFlK01hdGguaW11bChrZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKEFlLGVuKXwwO3ZhciB5YT0o''@;'; put 'put ''QSsoYWU9YWUrTWF0aC5pbXVsKFJlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoUmUsdnIpfDApK01hdGguaW11bChJZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEllLHZyKXwwKSsodGU+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYz''@;'; put 'put ''LGFlPU1hdGguaW11bChSdCxXZSksdGU9KHRlPU1hdGguaW11bChSdCxUdCkpK01hdGguaW11bChQdCxXZSl8MCxzZT1NYXRoLmltdWwoUHQsVHQpLGFlPWFlK01hdGguaW11bChIZSxodCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHh0KXwwKStNYXRoLmltdWwodXQsaHQpfDAsc2U9c2Ur''@;'; put 'put ''TWF0aC5pbXVsKHV0LHh0KXwwLGFlPWFlK01hdGguaW11bChpdCxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLHp0KXwwLGFlPWFlK01hdGguaW11bCh5dCxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsc2U9c2UrTWF0aC5pbXVsKE10LGZuKXwwLGFlPWFlK01hdGguaW11bChudCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKFFlLGVuKXwwO3ZhciBMYT0oQSsoYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKGtlLEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsdnIpfDApK01hdGguaW11bChBZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKEFlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLGFlPU1h''@;'; put 'put ''dGguaW11bChSdCxodCksdGU9KHRlPU1hdGguaW11bChSdCx4dCkpK01hdGguaW11bChQdCxodCl8MCxzZT1NYXRoLmltdWwoUHQseHQpLGFlPWFlK01hdGguaW11bChIZSxybil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHp0KXwwKStNYXRoLmltdWwodXQscm4pfDAsc2U9c2UrTWF0aC5p''@;'; put 'put ''bXVsKHV0LHp0KXwwLGFlPWFlK01hdGguaW11bChpdCxjbil8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsc2U9c2UrTWF0aC5pbXVsKCRlLGZuKXwwLGFlPWFlK01hdGguaW11bCh5dCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LGVuKXww''@;'; put 'put ''KStNYXRoLmltdWwoTXQsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKE10LGVuKXwwO3ZhciBGYT0oQSsoYWU9YWUrTWF0aC5pbXVsKG50LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwobnQsdnIpfDApK01hdGguaW11bChRZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0''@;'; put 'put ''aC5pbXVsKFFlLHZyKXwwKSsodGU+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxybiksdGU9KHRlPU1hdGguaW11bChSdCx6dCkpK01hdGguaW11bChQdCxybil8MCxzZT1NYXRoLmltdWwoUHQsenQpLGFlPWFlK01hdGguaW11bChIZSxjbil8MCx0''@;'; put 'put ''ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGZuKXwwKStNYXRoLmltdWwodXQsY24pfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGZuKXwwLGFlPWFlK01hdGguaW11bChpdCxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKCRl''@;'; put 'put ''LGVuKXwwO3ZhciB0aT0oQSsoYWU9YWUrTWF0aC5pbXVsKHl0LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsdnIpfDApK01hdGguaW11bChNdCxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKE10LHZyKXwwKSsodGU+Pj4xMyl8MCkrKHRpPj4+MjYp''@;'; put 'put ''fDAsdGkmPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxjbiksdGU9KHRlPU1hdGguaW11bChSdCxmbikpK01hdGguaW11bChQdCxjbil8MCxzZT1NYXRoLmltdWwoUHQsZm4pLGFlPWFlK01hdGguaW11bChIZSxYdCl8MCx0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLGVuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''dXQsWHQpfDAsc2U9c2UrTWF0aC5pbXVsKHV0LGVuKXwwO3ZhciBnbz0oQSsoYWU9YWUrTWF0aC5pbXVsKGl0LEVpKXwwKXwwKSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsdnIpfDApK01hdGguaW11bCgkZSxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKCRlLHZy''@;'; put 'put ''KXwwKSsodGU+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLGFlPU1hdGguaW11bChSdCxYdCksdGU9KHRlPU1hdGguaW11bChSdCxlbikpK01hdGguaW11bChQdCxYdCl8MCxzZT1NYXRoLmltdWwoUHQsZW4pO3ZhciBOcz0oQSsoYWU9YWUrTWF0aC5pbXVsKEhlLEVpKXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsdnIpfDApK01hdGguaW11bCh1dCxFaSl8MCkpPDwxMyl8MDtBPSgoc2U9c2UrTWF0aC5pbXVsKHV0LHZyKXwwKSsodGU+Pj4xMyl8MCkrKE5zPj4+MjYpfDAsTnMmPTY3MTA4ODYzO3ZhciBibD0oQSsoYWU9TWF0aC5pbXVsKFJ0LEVp''@;'; put 'put ''KSl8MCkrKCg4MTkxJih0ZT0odGU9TWF0aC5pbXVsKFJ0LHZyKSkrTWF0aC5pbXVsKFB0LEVpKXwwKSk8PDEzKXwwO3JldHVybiBBPSgoc2U9TWF0aC5pbXVsKFB0LHZyKSkrKHRlPj4+MTMpfDApKyhibD4+PjI2KXwwLGJsJj02NzEwODg2MyxtWzBdPVduLG1bMV09JGksbVsyXT1laSxtWzNd''@;'; put 'put ''PVFyLG1bNF09VmksbVs1XT1OaSxtWzZdPURhLG1bN109THIsbVs4XT1XaSxtWzldPXBhLG1bMTBdPVFuLG1bMTFdPWxhLG1bMTJdPXlhLG1bMTNdPUxhLG1bMTRdPUZhLG1bMTVdPXRpLG1bMTZdPWdvLG1bMTddPU5zLG1bMThdPWJsLDAhPT1BJiYobVsxOV09QSxILmxlbmd0aCsrKSxIfTtm''@;'; put 'put ''dW5jdGlvbiBuZSh4LEMsVCl7VC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXngubmVnYXRpdmUsVC5sZW5ndGg9eC5sZW5ndGgrQy5sZW5ndGg7Zm9yKHZhciBIPTAsaj0wLEU9MDtFPFQubGVuZ3RoLTE7RSsrKXt2YXIgbT1qO2o9MDtmb3IodmFyIEE9NjcxMDg4NjMmSCxhZT1NYXRoLm1pbihFLEMu''@;'; put 'put ''bGVuZ3RoLTEpLHRlPU1hdGgubWF4KDAsRS14Lmxlbmd0aCsxKTt0ZTw9YWU7dGUrKyl7dmFyIEplPSgwfHgud29yZHNbRS10ZV0pKigwfEMud29yZHNbdGVdKSxvdD02NzEwODg2MyZKZTtBPTY3MTA4ODYzJihvdD1vdCtBfDApLGorPShtPShtPW0rKEplLzY3MTA4ODY0fDApfDApKyhvdD4+''@;'; put 'put ''PjI2KXwwKT4+PjI2LG0mPTY3MTA4ODYzfVQud29yZHNbRV09QSxIPW0sbT1qfXJldHVybiAwIT09SD9ULndvcmRzW0VdPUg6VC5sZW5ndGgtLSxULl9zdHJpcCgpfWZ1bmN0aW9uIGllKHgsQyxUKXtyZXR1cm4gbmUoeCxDLFQpfWZ1bmN0aW9uIGxlKHgsQyl7dGhpcy54PXgsdGhpcy55PUN9''@;'; put 'put ''TWF0aC5pbXVsfHwoSj1lZSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oQyxUKXt2YXIgaj10aGlzLmxlbmd0aCtDLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1DLmxlbmd0aD9KKHRoaXMsQyxUKTpqPDYzP2VlKHRoaXMsQyxUKTpqPDEwMjQ/bmUodGhpcyxDLFQp''@;'; put 'put ''OmllKHRoaXMsQyxUKX0sbGUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPXcucHJvdG90eXBlLl9jb3VudEJpdHMoQyktMSxqPTA7ajxDO2orKylUW2pdPXRoaXMucmV2QmluKGosSCxDKTtyZXR1cm4gVH0sbGUucHJvdG90eXBlLnJldkJp''@;'; put 'put ''bj1mdW5jdGlvbihDLFQsSCl7aWYoMD09PUN8fEM9PT1ILTEpcmV0dXJuIEM7Zm9yKHZhciBqPTAsRT0wO0U8VDtFKyspanw9KDEmQyk8PFQtRS0xLEM+Pj0xO3JldHVybiBqfSxsZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7Zm9yKHZhciBBPTA7QTxtO0ErKylq''@;'; put 'put ''W0FdPVRbQ1tBXV0sRVtBXT1IW0NbQV1dfSxsZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEMsVCxILGosRSxtKXt0aGlzLnBlcm11dGUobSxDLFQsSCxqLEUpO2Zvcih2YXIgQT0xO0E8RTtBPDw9MSlmb3IodmFyIGFlPUE8PDEsdGU9TWF0aC5jb3MoMipNYXRoLlBJL2FlKSxzZT1N''@;'; put 'put ''YXRoLnNpbigyKk1hdGguUEkvYWUpLHdlPTA7d2U8RTt3ZSs9YWUpZm9yKHZhciBVZT10ZSxKZT1zZSxvdD0wO290PEE7b3QrKyl7dmFyIE1lPUhbd2Urb3RdLHZlPWpbd2Urb3RdLFhlPUhbd2Urb3QrQV0samU9alt3ZStvdCtBXSxEZT1VZSpYZS1KZSpqZTtqZT1VZSpqZStKZSpYZSxIW3dl''@;'; put 'put ''K290XT1NZSsoWGU9RGUpLGpbd2Urb3RdPXZlK2plLEhbd2Urb3QrQV09TWUtWGUsalt3ZStvdCtBXT12ZS1qZSxvdCE9PWFlJiYoRGU9dGUqVWUtc2UqSmUsSmU9dGUqSmUrc2UqVWUsVWU9RGUpfX0sbGUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKEMsVCl7dmFyIEg9MXxNYXRo''@;'; put 'put ''Lm1heChULEMpLGo9MSZILEU9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlFKys7cmV0dXJuIDE8PEUrMStqfSxsZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKEMsVCxIKXtpZighKEg8PTEpKWZvcih2YXIgaj0wO2o8SC8yO2orKyl7dmFyIEU9Q1tqXTtDW2pdPUNbSC1qLTFdLENbSC1q''@;'; put 'put ''LTFdPUUsRT1UW2pdLFRbal09LVRbSC1qLTFdLFRbSC1qLTFdPS1FfX0sbGUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MDtqPFQvMjtqKyspe3ZhciBFPTgxOTIqTWF0aC5yb3VuZChDWzIqaisxXS9UKStNYXRoLnJvdW5kKENbMipqXS9UKStI''@;'; put 'put ''O0Nbal09NjcxMDg4NjMmRSxIPUU8NjcxMDg4NjQ/MDpFLzY3MTA4ODY0fDB9cmV0dXJuIEN9LGxlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKEMsVCxILGope2Zvcih2YXIgRT0wLG09MDttPFQ7bSsrKUhbMiptXT04MTkxJihFKz0wfENbbV0pLEhbMiptKzFdPTgxOTEmKEU+Pj49''@;'; put 'put ''MTMpLEU+Pj49MTM7Zm9yKG09MipUO208ajsrK20pSFttXT0wO2coMD09PUUpLGcoISgtODE5MiZFKSl9LGxlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD0wO0g8QztIKyspVFtIXT0wO3JldHVybiBUfSxsZS5wcm90b3R5cGUubXVscD1mdW5j''@;'; put 'put ''dGlvbihDLFQsSCl7dmFyIGo9Mip0aGlzLmd1ZXNzTGVuMTNiKEMubGVuZ3RoLFQubGVuZ3RoKSxFPXRoaXMubWFrZVJCVChqKSxtPXRoaXMuc3R1YihqKSxBPW5ldyBBcnJheShqKSxhZT1uZXcgQXJyYXkoaiksdGU9bmV3IEFycmF5KGopLHNlPW5ldyBBcnJheShqKSx3ZT1uZXcgQXJyYXko''@;'; put 'put ''aiksVWU9bmV3IEFycmF5KGopLEplPUgud29yZHM7SmUubGVuZ3RoPWosdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsQSxqKSx0aGlzLmNvbnZlcnQxM2IoVC53b3JkcyxULmxlbmd0aCxzZSxqKSx0aGlzLnRyYW5zZm9ybShBLG0sYWUsdGUsaixFKSx0aGlzLnRyYW5zZm9ybShz''@;'; put 'put ''ZSxtLHdlLFVlLGosRSk7Zm9yKHZhciBvdD0wO290PGo7b3QrKyl7dmFyIE1lPWFlW290XSp3ZVtvdF0tdGVbb3RdKlVlW290XTt0ZVtvdF09YWVbb3RdKlVlW290XSt0ZVtvdF0qd2Vbb3RdLGFlW290XT1NZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYWUsdGUsaiksdGhpcy50cmFuc2Zvcm0o''@;'; put 'put ''YWUsdGUsSmUsbSxqLEUpLHRoaXMuY29uanVnYXRlKEplLG0saiksdGhpcy5ub3JtYWxpemUxM2IoSmUsaiksSC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsSC5sZW5ndGg9Qy5sZW5ndGgrVC5sZW5ndGgsSC5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMpe3Zh''@;'; put 'put ''ciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksdGhpcy5tdWxUbyhDLFQpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtD''@;'; put 'put ''Lmxlbmd0aCksaWUodGhpcyxDLFQpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oQyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3''@;'; put 'put ''MTA4ODY0KTtmb3IodmFyIEg9MCxqPTA7ajx0aGlzLmxlbmd0aDtqKyspe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKkMsbT0oNjcxMDg4NjMmRSkrKDY3MTA4ODYzJkgpO0g+Pj0yNixIKz1FLzY3MTA4ODY0fDAsSCs9bT4+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmbX1yZXR1cm4gMCE9''@;'; put 'put ''PUgmJih0aGlzLndvcmRzW2pdPUgsdGhpcy5sZW5ndGgrKyksVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oQyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMpe3ZhciBUPWZ1bmN0aW9uIHEoeCl7Zm9yKHZhciBDPW5ldyBBcnJheSh4LmJpdExlbmd0aCgpKSxUPTA7VDxDLmxlbmd0aDtUKyspQ1tU''@;'; put 'put ''XT14LndvcmRzW1QvMjZ8MF0+Pj5UJTI2JjE7cmV0dXJuIEN9KEMpO2lmKDA9PT1ULmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciBIPXRoaXMsaj0wO2o8VC5sZW5ndGgmJjA9PT1UW2pdO2orKyxIPUguc3FyKCkpO2lmKCsrajxULmxlbmd0aClmb3IodmFyIEU9SC5zcXIoKTtqPFQu''@;'; put 'put ''bGVuZ3RoO2orKyxFPUUuc3FyKCkpMCE9PVRbal0mJihIPUgubXVsKEUpKTtyZXR1cm4gSH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgRSxUPUMlMjYsSD0oQy1UKS8yNixqPTY3MTA4ODYzPj4+MjYtVDw8MjYtVDtpZigw''@;'; put 'put ''IT09VCl7dmFyIG09MDtmb3IoRT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdJmo7dGhpcy53b3Jkc1tFXT0oMHx0aGlzLndvcmRzW0VdKS1BPDxUfG0sbT1BPj4+MjYtVH1tJiYodGhpcy53b3Jkc1tFXT1tLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoRT10''@;'; put 'put ''aGlzLmxlbmd0aC0xO0U+PTA7RS0tKXRoaXMud29yZHNbRStIXT10aGlzLndvcmRzW0VdO2ZvcihFPTA7RTxIO0UrKyl0aGlzLndvcmRzW0VdPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKEMpe3JldHVybiBnKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihDKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKEMsVCxIKXt2YXIgajtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCksaj1UPyhULVQlMjYpLzI2OjA7dmFyIEU9QyUyNixtPU1hdGgubWluKChDLUUpLzI2LHRoaXMubGVuZ3RoKSxBPTY3''@;'; put 'put ''MTA4ODYzXjY3MTA4ODYzPj4+RTw8RSxhZT1IO2lmKGotPW0saj1NYXRoLm1heCgwLGopLGFlKXtmb3IodmFyIHRlPTA7dGU8bTt0ZSsrKWFlLndvcmRzW3RlXT10aGlzLndvcmRzW3RlXTthZS5sZW5ndGg9bX1pZigwIT09bSlpZih0aGlzLmxlbmd0aD5tKWZvcih0aGlzLmxlbmd0aC09bSx0''@;'; put 'put ''ZT0wO3RlPHRoaXMubGVuZ3RoO3RlKyspdGhpcy53b3Jkc1t0ZV09dGhpcy53b3Jkc1t0ZSttXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBzZT0wO2Zvcih0ZT10aGlzLmxlbmd0aC0xO3RlPj0wJiYoMCE9PXNlfHx0ZT49aik7dGUtLSl7dmFyIHdlPTB8dGhpcy53''@;'; put 'put ''b3Jkc1t0ZV07dGhpcy53b3Jkc1t0ZV09c2U8PDI2LUV8d2U+Pj5FLHNlPXdlJkF9cmV0dXJuIGFlJiYwIT09c2UmJihhZS53b3Jkc1thZS5sZW5ndGgrK109c2UpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pc2hybj1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKEMsVCxIKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKEMpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihDKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKEMpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihDKX0sdy5wcm90b3R5cGUudGVz''@;'; put 'put ''dG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8VCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMm''@;'; put 'put ''JkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PVQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3Ro''@;'; put 'put ''KSwwIT09VCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCksdGhpcy5fc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKEMpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlv''@;'; put 'put ''bihDKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzwwP3RoaXMuaXN1Ym4oLUMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PUM/KHRoaXMud29yZHNbMF09Qy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihDKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKEMpe3RoaXMud29yZHNbMF0rPUM7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53''@;'; put 'put ''b3Jkc1tUXT49NjcxMDg4NjQ7VCsrKXRoaXMud29yZHNbVF0tPTY3MTA4ODY0LFQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbVCsxXT0xOnRoaXMud29yZHNbVCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxUKzEpLHRoaXN9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''dWJuPWZ1bmN0aW9uKEMpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpLEM8MClyZXR1cm4gdGhpcy5pYWRkbigtQyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRo''@;'; put 'put ''aXMud29yZHNbMF0tPUMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPDA7VCsrKXRoaXMud29yZHNbVF0rPTY3MTA4''@;'; put 'put ''ODY0LHRoaXMud29yZHNbVCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKEMpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oQyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oQyxULEgpe3ZhciBFO3RoaXMuX2V4''@;'; put 'put ''cGFuZChDLmxlbmd0aCtIKTt2YXIgbSxBPTA7Zm9yKEU9MDtFPEMubGVuZ3RoO0UrKyl7bT0oMHx0aGlzLndvcmRzW0UrSF0pK0E7dmFyIGFlPSgwfEMud29yZHNbRV0pKlQ7QT0oKG0tPTY3MTA4ODYzJmFlKT4+MjYpLShhZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0UrSF09NjcxMDg4NjMm''@;'; put 'put ''bX1mb3IoO0U8dGhpcy5sZW5ndGgtSDtFKyspQT0obT0oMHx0aGlzLndvcmRzW0UrSF0pK0EpPj4yNix0aGlzLndvcmRzW0UrSF09NjcxMDg4NjMmbTtpZigwPT09QSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IoZygtMT09PUEpLEE9MCxFPTA7RTx0aGlzLmxlbmd0aDtFKyspQT0obT0tKDB8''@;'; put 'put ''dGhpcy53b3Jkc1tFXSkrQSk+PjI2LHRoaXMud29yZHNbRV09NjcxMDg4NjMmbTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKEMsVCl7dmFyIEgsaj10aGlzLmNsb25lKCksRT1DLG09MHxFLndvcmRzW0UubGVuZ3Ro''@;'; put 'put ''LTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhtKSkmJihFPUUudXNobG4oSCksai5pdXNobG4oSCksbT0wfEUud29yZHNbRS5sZW5ndGgtMV0pO3ZhciB0ZSxhZT1qLmxlbmd0aC1FLmxlbmd0aDtpZigibW9kIiE9PVQpeyh0ZT1uZXcgdyhudWxsKSkubGVuZ3RoPWFlKzEsdGUud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KHRlLmxlbmd0aCk7Zm9yKHZhciBzZT0wO3NlPHRlLmxlbmd0aDtzZSsrKXRlLndvcmRzW3NlXT0wfXZhciB3ZT1qLmNsb25lKCkuX2lzaGxuc3VibXVsKEUsMSxhZSk7MD09PXdlLm5lZ2F0aXZlJiYoaj13ZSx0ZSYmKHRlLndvcmRzW2FlXT0xKSk7Zm9yKHZhciBVZT1hZS0x''@;'; put 'put ''O1VlPj0wO1VlLS0pe3ZhciBKZT02NzEwODg2NCooMHxqLndvcmRzW0UubGVuZ3RoK1VlXSkrKDB8ai53b3Jkc1tFLmxlbmd0aCtVZS0xXSk7Zm9yKEplPU1hdGgubWluKEplL218MCw2NzEwODg2Myksai5faXNobG5zdWJtdWwoRSxKZSxVZSk7MCE9PWoubmVnYXRpdmU7KUplLS0sai5uZWdh''@;'; put 'put ''dGl2ZT0wLGouX2lzaGxuc3VibXVsKEUsMSxVZSksai5pc1plcm8oKXx8KGoubmVnYXRpdmVePTEpO3RlJiYodGUud29yZHNbVWVdPUplKX1yZXR1cm4gdGUmJnRlLl9zdHJpcCgpLGouX3N0cmlwKCksImRpdiIhPT1UJiYwIT09SCYmai5pdXNocm4oSCkse2Rpdjp0ZXx8bnVsbCxtb2Q6an19''@;'; put 'put ''LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIGcoIUMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLFQpLCJtb2Qi''@;'; put 'put ''IT09VCYmKGo9bS5kaXYubmVnKCkpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaWFkZChDKSkse2RpdjpqLG1vZDpFfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlPyhtPXRoaXMuZGl2bW9kKEMubmVnKCksVCksIm1vZCIhPT1UJiYo''@;'; put 'put ''aj1tLmRpdi5uZWcoKSkse2RpdjpqLG1vZDptLm1vZH0pOnRoaXMubmVnYXRpdmUmQy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLm5lZygpLFQpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaXN1YihDKSkse2RpdjptLmRpdixtb2Q6RX0p''@;'; put 'put ''OkMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChDKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1DLmxlbmd0aD8iZGl2Ij09PVQ/e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09VD97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53''@;'; put 'put ''b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoQyxUKTt2YXIgaixFLG19LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywiZGl2IiwhMSkuZGl2''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihDKXt2''@;'; put 'put ''YXIgVD10aGlzLmRpdm1vZChDKTtpZihULm1vZC5pc1plcm8oKSlyZXR1cm4gVC5kaXY7dmFyIEg9MCE9PVQuZGl2Lm5lZ2F0aXZlP1QubW9kLmlzdWIoQyk6VC5tb2Qsaj1DLnVzaHJuKDEpLEU9Qy5hbmRsbigxKSxtPUguY21wKGopO3JldHVybiBtPDB8fDE9PT1FJiYwPT09bT9ULmRpdjow''@;'; put 'put ''IT09VC5kaXYubmVnYXRpdmU/VC5kaXYuaXN1Ym4oMSk6VC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZyhDPD02NzEwODg2Myk7Zm9yKHZhciBIPSgxPDwyNiklQyxqPTAsRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKWo9''@;'; put 'put ''KEgqaisoMHx0aGlzLndvcmRzW0VdKSklQztyZXR1cm4gVD8tajpqfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm1vZHJuKEMpfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMpO2Zvcih2YXIg''@;'; put 'put ''SD0wLGo9dGhpcy5sZW5ndGgtMTtqPj0wO2otLSl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkrNjcxMDg4NjQqSDt0aGlzLndvcmRzW2pdPUUvQ3wwLEg9RSVDfXJldHVybiB0aGlzLl9zdHJpcCgpLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmlkaXZuKEMpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUpLGcoIUMuaXNaZXJvKCkpO3ZhciBUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygx''@;'; put 'put ''KSxFPW5ldyB3KDApLG09bmV3IHcoMCksQT1uZXcgdygxKSxhZT0wO1QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrYWU7Zm9yKHZhciB0ZT1ILmNsb25lKCksc2U9VC5jbG9uZSgpOyFULmlzWmVybygpOyl7Zm9yKHZhciB3ZT0wLFVlPTE7IShULndv''@;'; put 'put ''cmRzWzBdJlVlKSYmd2U8MjY7Kyt3ZSxVZTw8PTEpO2lmKHdlPjApZm9yKFQuaXVzaHJuKHdlKTt3ZS0tID4wOykoai5pc09kZCgpfHxFLmlzT2RkKCkpJiYoai5pYWRkKHRlKSxFLmlzdWIoc2UpKSxqLml1c2hybigxKSxFLml1c2hybigxKTtmb3IodmFyIEplPTAsb3Q9MTshKEgud29yZHNb''@;'; put 'put ''MF0mb3QpJiZKZTwyNjsrK0plLG90PDw9MSk7aWYoSmU+MClmb3IoSC5pdXNocm4oSmUpO0plLS0gPjA7KShtLmlzT2RkKCl8fEEuaXNPZGQoKSkmJihtLmlhZGQodGUpLEEuaXN1YihzZSkpLG0uaXVzaHJuKDEpLEEuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKG0p''@;'; put 'put ''LEUuaXN1YihBKSk6KEguaXN1YihUKSxtLmlzdWIoaiksQS5pc3ViKEUpKX1yZXR1cm57YTptLGI6QSxnY2Q6SC5pdXNobG4oYWUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUpLGcoIUMuaXNaZXJvKCkpO3ZhciB3ZSxUPXRoaXMsSD1DLmNsb25l''@;'; put 'put ''KCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxFPW5ldyB3KDApLG09SC5jbG9uZSgpO1QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgQT0wLGFlPTE7IShULndvcmRzWzBdJmFlKSYmQTwyNjsrK0EsYWU8PD0xKTtpZihB''@;'; put 'put ''PjApZm9yKFQuaXVzaHJuKEEpO0EtLSA+MDspai5pc09kZCgpJiZqLmlhZGQobSksai5pdXNocm4oMSk7Zm9yKHZhciB0ZT0wLHNlPTE7IShILndvcmRzWzBdJnNlKSYmdGU8MjY7Kyt0ZSxzZTw8PTEpO2lmKHRlPjApZm9yKEguaXVzaHJuKHRlKTt0ZS0tID4wOylFLmlzT2RkKCkmJkUuaWFk''@;'; put 'put ''ZChtKSxFLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihFKSk6KEguaXN1YihUKSxFLmlzdWIoaikpfXJldHVybih3ZT0wPT09VC5jbXBuKDEpP2o6RSkuY21wbigwKTwwJiZ3ZS5pYWRkKEMpLHdlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oQyl7aWYodGhpcy5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gQy5hYnMoKTtpZihDLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBUPXRoaXMuY2xvbmUoKSxIPUMuY2xvbmUoKTtULm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgaj0wO1QuaXNFdmVuKCkmJkguaXNFdmVuKCk7aisrKVQuaXVzaHJuKDEpLEgu''@;'; put 'put ''aXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtULmlzRXZlbigpOylULml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBFPVQuY21wKEgpO2lmKEU8MCl7dmFyIG09VDtUPUgsSD1tfWVsc2UgaWYoMD09PUV8fDA9PT1ILmNtcG4oMSkpYnJlYWs7VC5pc3ViKEgpfXJldHVy''@;'; put 'put ''biBILml1c2hsbihqKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5lZ2NkKEMpLmEudW1vZChDKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLndvcmRzWzBdJkN9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjYsaj0xPDxUO2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1qLHRoaXM7Zm9yKHZhciBFPWosbT1IOzAhPT1FJiZtPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9MHx0aGlzLndvcmRzW21dO0U9KEErPUUpPj4+MjYsdGhpcy53b3Jkc1ttXT1BJj02NzEwODg2M31yZXR1''@;'; put 'put ''cm4gMCE9PUUmJih0aGlzLndvcmRzW21dPUUsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oQyl7dmFyIEgsVD1DPDA7aWYo''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmUmJiFUKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZUKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtUJiYoQz0tQyksZyhDPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgaj0wfHRoaXMud29y''@;'; put 'put ''ZHNbMF07SD1qPT09Qz8wOmo8Qz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihDKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiAxO3ZhciBUPXRoaXMudWNtcChDKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtVDpUfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKEMpe2lmKHRoaXMubGVuZ3RoPkMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPEMubGVuZ3RoKXJldHVybi0xO2Zvcih2''@;'; put 'put ''YXIgVD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIGo9MHx0aGlzLndvcmRzW0hdLEU9MHxDLndvcmRzW0hdO2lmKGohPT1FKXtqPEU/VD0tMTpqPkUmJihUPTEpO2JyZWFrfX1yZXR1cm4gVH0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXBu''@;'; put 'put ''KEMpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk+PTB9LHcucHJv''@;'; put 'put ''dG90eXBlLmx0bj1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPD0wfSx3LnByb3RvdHlwZS5s''@;'; put 'put ''dGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXAoQyl9LHcucmVkPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biBuZXcgcChDKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxDLmNvbnZlcnRU''@;'; put 'put ''byh0aGlzKS5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucmVkPUMsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoQyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZEFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsQyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxDKSx0''@;'; put 'put ''aGlzLnJlZC5tdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQuaW11bCh0aGlzLEMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRo''@;'; put 'put ''aXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZFBvdz1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCYmIUMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLEMpfTt2YXIgbWU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxs''@;'; put 'put ''fTtmdW5jdGlvbiBfZSh4LEMpe3RoaXMubmFtZT14LHRoaXMucD1uZXcgdyhDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gVGUoKXtfZS5jYWxsKHRo''@;'; put 'put ''aXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFNlKCl7X2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAg''@;'; put 'put ''MDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiB6ZSgpe19lLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVigpe19lLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gcCh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpe3ZhciBDPXcuX3ByaW1lKHgpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgZyh4Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdy''@;'; put 'put ''ZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGIoeCl7cC5jYWxsKHRoaXMseCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5p''@;'; put 'put ''dXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMu''@;'; put 'put ''ciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1fZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksQ30sX2UucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oQyl7''@;'; put 'put ''dmFyIEgsVD1DO2Rve3RoaXMuc3BsaXQoVCx0aGlzLnRtcCksSD0oVD0oVD10aGlzLmltdWxLKFQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBqPUg8dGhpcy5uPy0xOlQudWNtcCh0aGlzLnApO3JldHVybiAwPT09aj8oVC53b3Jkc1swXT0wLFQu''@;'; put 'put ''bGVuZ3RoPTEpOmo+MD9ULmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ULnN0cmlwP1Quc3RyaXAoKTpULl9zdHJpcCgpLFR9LF9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe0MuaXVzaHJuKHRoaXMubiwwLFQpfSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7cmV0dXJuIEMu''@;'; put 'put ''aW11bCh0aGlzLmspfSxCKFRlLF9lKSxUZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9NDE5NDMwMyxqPU1hdGgubWluKEMubGVuZ3RoLDkpLEU9MDtFPGo7RSsrKVQud29yZHNbRV09Qy53b3Jkc1tFXTtpZihULmxlbmd0aD1qLEMubGVuZ3RoPD05KXJldHVybiBD''@;'; put 'put ''LndvcmRzWzBdPTAsdm9pZChDLmxlbmd0aD0xKTt2YXIgbT1DLndvcmRzWzldO2ZvcihULndvcmRzW1QubGVuZ3RoKytdPW0mSCxFPTEwO0U8Qy5sZW5ndGg7RSsrKXt2YXIgQT0wfEMud29yZHNbRV07Qy53b3Jkc1tFLTEwXT0oQSZIKTw8NHxtPj4+MjIsbT1BfUMud29yZHNbRS0xMF09bT4+''@;'; put 'put ''Pj0yMixDLmxlbmd0aC09MD09PW0mJkMubGVuZ3RoPjEwPzEwOjl9LFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtDLndvcmRzW0MubGVuZ3RoXT0wLEMud29yZHNbQy5sZW5ndGgrMV09MCxDLmxlbmd0aCs9Mjtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTB8''@;'; put 'put ''Qy53b3Jkc1tIXTtDLndvcmRzW0hdPTY3MTA4ODYzJihUKz05NzcqaiksVD02NCpqKyhULzY3MTA4ODY0fDApfXJldHVybiAwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmKEMubGVuZ3RoLS0sMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJkMubGVuZ3RoLS0pLEN9LEIoU2UsX2UpLEIoemUsX2Up''@;'; put 'put ''LEIoVixfZSksVi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHxDLndvcmRzW0hdKStULEU9NjcxMDg4NjMmajtqPj4+PTI2LEMud29yZHNbSF09RSxUPWp9cmV0dXJuIDAhPT1UJiYoQy53b3Jkc1tDLmxlbmd0''@;'; put 'put ''aCsrXT1UKSxDfSx3Ll9wcmltZT1mdW5jdGlvbihDKXtpZihtZVtDXSlyZXR1cm4gbWVbQ107dmFyIFQ7aWYoImsyNTYiPT09QylUPW5ldyBUZTtlbHNlIGlmKCJwMjI0Ij09PUMpVD1uZXcgU2U7ZWxzZSBpZigicDE5MiI9PT1DKVQ9bmV3IHplO2Vsc2V7aWYoInAyNTUxOSIhPT1DKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK0MpO1Q9bmV3IFZ9cmV0dXJuIG1lW0NdPVQsVH0scC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVkLCJyZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIil9LHAucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKEMsVCl7ZyghKEMubmVnYXRpdmV8VC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCYmQy5yZWQ9PT1ULnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpfSxwLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShDKS5fZm9yY2VSZWQodGhpcyk6KE4oQyxDLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLEMpfSxwLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIEMuaXNaZXJvKCk/Qy5jbG9uZSgpOnRoaXMubS5zdWIoQykuX2ZvcmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5hZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2Zv''@;'; put 'put ''cmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaWFkZChUKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0scC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5''@;'; put 'put ''MihDLFQpO3ZhciBIPUMuc3ViKFQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pc3ViKFQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5p''@;'; put 'put ''YWRkKHRoaXMubSksSH0scC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoQyksdGhpcy5pbW9kKEMudXNobG4oVCkpfSxwLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5pbXVs''@;'; put 'put ''KFQpKX0scC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5tdWwoVCkpfSxwLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltdWwoQyxDLmNsb25lKCkpfSxwLnByb3RvdHlwZS5zcXI9ZnVuY3Rp''@;'; put 'put ''b24oQyl7cmV0dXJuIHRoaXMubXVsKEMsQyl9LHAucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBUPXRoaXMubS5hbmRsbigzKTtpZihnKFQlMj09MSksMz09PVQpe3ZhciBIPXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigy''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5wb3coQyxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksRT0wOyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspRSsrLGouaXVzaHJuKDEpO2coIWouaXNaZXJvKCkpO3ZhciBtPW5ldyB3KDEpLnRvUmVkKHRoaXMpLEE9bS5yZWROZWcoKSxhZT10aGlzLm0uc3Vi''@;'; put 'put ''bigxKS5pdXNocm4oMSksdGU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih0ZT1uZXcgdygyKnRlKnRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codGUsYWUpLmNtcChBKTspdGUucmVkSUFkZChBKTtmb3IodmFyIHNlPXRoaXMucG93KHRlLGopLHdlPXRoaXMucG93KEMsai5hZGRuKDEpLml1''@;'; put 'put ''c2hybigxKSksVWU9dGhpcy5wb3coQyxqKSxKZT1FOzAhPT1VZS5jbXAobSk7KXtmb3IodmFyIG90PVVlLE1lPTA7MCE9PW90LmNtcChtKTtNZSsrKW90PW90LnJlZFNxcigpO2coTWU8SmUpO3ZhciB2ZT10aGlzLnBvdyhzZSxuZXcgdygxKS5pdXNobG4oSmUtTWUtMSkpO3dlPXdlLnJlZE11''@;'; put 'put ''bCh2ZSksc2U9dmUucmVkU3FyKCksVWU9VWUucmVkTXVsKHNlKSxKZT1NZX1yZXR1cm4gd2V9LHAucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVQubmVnYXRpdmU/KFQubmVnYXRpdmU9MCx0aGlzLmltb2QoVCkucmVkTmVnKCkp''@;'; put 'put ''OnRoaXMuaW1vZChUKX0scC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMsVCl7aWYoVC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PVQuY21wbigxKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBqPW5ldyBBcnJheSgxNik7alswXT1uZXcgdygxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxqWzFdPUM7Zm9yKHZhciBFPTI7RTxqLmxlbmd0aDtFKyspaltFXT10aGlzLm11bChqW0UtMV0sQyk7dmFyIG09alswXSxBPTAsYWU9MCx0ZT1ULmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dGUmJih0ZT0yNiksRT1ULmxlbmd0aC0xO0U+PTA7RS0tKXtmb3IodmFyIHNlPVQud29yZHNbRV0s''@;'; put 'put ''d2U9dGUtMTt3ZT49MDt3ZS0tKXt2YXIgVWU9c2U+PndlJjE7bSE9PWpbMF0mJihtPXRoaXMuc3FyKG0pKSwwIT09VWV8fDAhPT1BPyhBPDw9MSxBfD1VZSwoND09KythZXx8MD09PUUmJjA9PT13ZSkmJihtPXRoaXMubXVsKG0saltBXSksYWU9MCxBPTApKTphZT0wfXRlPTI2fXJldHVybiBt''@;'; put 'put ''fSxwLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7dmFyIFQ9Qy51bW9kKHRoaXMubSk7cmV0dXJuIFQ9PT1DP1QuY2xvbmUoKTpUfSxwLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD1DLmNsb25lKCk7cmV0dXJuIFQucmVkPW51bGwsVH0sdy5tb250PWZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiBuZXcgYihDKX0sQihiLHApLGIucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMudXNobG4odGhpcy5zaGlmdCkpfSxiLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmltb2QoQy5tdWwo''@;'; put 'put ''dGhpcy5yaW52KSk7cmV0dXJuIFQucmVkPW51bGwsVH0sYi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIEMud29yZHNbMF09MCxDLmxlbmd0aD0xLEM7dmFyIEg9Qy5pbXVsKFQpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LGIucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1DLm11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11''@;'; put 'put ''bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiB0aGlzLmltb2QoQy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sOTkzMToodWUsWCx5KT0+e3ZhciBJO2Z1bmN0aW9uIF8oQil7dGhpcy5yYW5kPUJ9aWYodWUuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4gSXx8KEk9bmV3IF8obnVsbCkpLEkuZ2VuZXJhdGUodyl9LHVlLmV4cG9ydHMuUmFuZD1fLF8ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yYW5kKHcpfSxfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0''@;'; put 'put ''dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh3KTtmb3IodmFyIFA9bmV3IFVpbnQ4QXJyYXkodyksRj0wO0Y8UC5sZW5ndGg7RisrKVBbRl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gUH0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21W''@;'; put 'put ''YWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1m''@;'; put 'put ''dW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVk''@;'; put 'put ''IHlldCIpfSk7ZWxzZSB0cnl7dmFyIGc9eSg5MjE0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZy5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtyZXR1cm4gZy5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0s''@;'; put 'put ''NDQ5NzoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIF8oTyl7SS5pc0J1ZmZlcihPKXx8KE89SS5mcm9tKE8pKTtmb3IodmFyIHo9Ty5sZW5ndGgvNHwwLE49bmV3IEFycmF5KHopLEw9MDtMPHo7TCsrKU5bTF09Ty5yZWFkVUludDMyQkUoNCpMKTtyZXR1cm4gTn1m''@;'; put 'put ''dW5jdGlvbiBnKE8pe2Zvcig7MDxPLmxlbmd0aDtPKyspT1swXT0wfWZ1bmN0aW9uIEIoTyx6LE4sTCxLKXtmb3IodmFyIGxlLG1lLF9lLFRlLFU9TlswXSxXPU5bMV0sWT1OWzJdLHE9TlszXSxlZT1PWzBdXnpbMF0sSj1PWzFdXnpbMV0sbmU9T1syXV56WzJdLGllPU9bM11eelszXSxTZT00''@;'; put 'put ''LHplPTE7emU8Szt6ZSsrKWxlPVVbZWU+Pj4yNF1eV1tKPj4+MTYmMjU1XV5ZW25lPj4+OCYyNTVdXnFbMjU1JmllXV56W1NlKytdLG1lPVVbSj4+PjI0XV5XW25lPj4+MTYmMjU1XV5ZW2llPj4+OCYyNTVdXnFbMjU1JmVlXV56W1NlKytdLF9lPVVbbmU+Pj4yNF1eV1tpZT4+PjE2JjI1NV1e''@;'; put 'put ''WVtlZT4+PjgmMjU1XV5xWzI1NSZKXV56W1NlKytdLFRlPVVbaWU+Pj4yNF1eV1tlZT4+PjE2JjI1NV1eWVtKPj4+OCYyNTVdXnFbMjU1Jm5lXV56W1NlKytdLGVlPWxlLEo9bWUsbmU9X2UsaWU9VGU7cmV0dXJuIGxlPShMW2VlPj4+MjRdPDwyNHxMW0o+Pj4xNiYyNTVdPDwxNnxMW25lPj4+''@;'; put 'put ''OCYyNTVdPDw4fExbMjU1JmllXSleeltTZSsrXSxtZT0oTFtKPj4+MjRdPDwyNHxMW25lPj4+MTYmMjU1XTw8MTZ8TFtpZT4+PjgmMjU1XTw8OHxMWzI1NSZlZV0pXnpbU2UrK10sX2U9KExbbmU+Pj4yNF08PDI0fExbaWU+Pj4xNiYyNTVdPDwxNnxMW2VlPj4+OCYyNTVdPDw4fExbMjU1Jkpd''@;'; put 'put ''KV56W1NlKytdLFRlPShMW2llPj4+MjRdPDwyNHxMW2VlPj4+MTYmMjU1XTw8MTZ8TFtKPj4+OCYyNTVdPDw4fExbMjU1Jm5lXSleeltTZSsrXSxbbGU+Pj49MCxtZT4+Pj0wLF9lPj4+PTAsVGU+Pj49MF19dmFyIHc9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLFA9ZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIE89bmV3IEFycmF5KDI1Niksej0wO3o8MjU2O3orKylPW3pdPXo8MTI4P3o8PDE6ejw8MV4yODM7Zm9yKHZhciBOPVtdLEw9W10sSz1bW10sW10sW10sW11dLFU9W1tdLFtdLFtdLFtdXSxXPTAsWT0wLHE9MDtxPDI1NjsrK3Epe3ZhciBlZT1ZXlk8PDFeWTw8Ml5ZPDwzXlk8''@;'; put 'put ''PDQ7TltXXT1lZT1lZT4+PjheMjU1JmVlXjk5LExbZWVdPVc7dmFyIEo9T1tXXSxuZT1PW0pdLGllPU9bbmVdLGxlPTI1NypPW2VlXV4xNjg0MzAwOCplZTtLWzBdW1ddPWxlPDwyNHxsZT4+PjgsS1sxXVtXXT1sZTw8MTZ8bGU+Pj4xNixLWzJdW1ddPWxlPDw4fGxlPj4+MjQsS1szXVtXXT1s''@;'; put 'put ''ZSxVWzBdW2VlXT0obGU9MTY4NDMwMDkqaWVeNjU1MzcqbmVeMjU3KkpeMTY4NDMwMDgqVyk8PDI0fGxlPj4+OCxVWzFdW2VlXT1sZTw8MTZ8bGU+Pj4xNixVWzJdW2VlXT1sZTw8OHxsZT4+PjI0LFVbM11bZWVdPWxlLDA9PT1XP1c9WT0xOihXPUpeT1tPW09baWVeSl1dXSxZXj1PW09bWV1d''@;'; put 'put ''KX1yZXR1cm57U0JPWDpOLElOVl9TQk9YOkwsU1VCX01JWDpLLElOVl9TVUJfTUlYOlV9fSgpO2Z1bmN0aW9uIEYoTyl7dGhpcy5fa2V5PV8oTyksdGhpcy5fcmVzZXQoKX1GLmJsb2NrU2l6ZT0xNixGLmtleVNpemU9MzIsRi5wcm90b3R5cGUuYmxvY2tTaXplPUYuYmxvY2tTaXplLEYucHJv''@;'; put 'put ''dG90eXBlLmtleVNpemU9Ri5rZXlTaXplLEYucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgTz10aGlzLl9rZXksej1PLmxlbmd0aCxOPXorNixMPTQqKE4rMSksSz1bXSxVPTA7VTx6O1UrKylLW1VdPU9bVV07Zm9yKFU9ejtVPEw7VSsrKXt2YXIgVz1LW1UtMV07VSV6PT0w''@;'; put 'put ''PyhXPVAuU0JPWFsoVz1XPDw4fFc+Pj4yNCk+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSxXXj13W1UvenwwXTw8MjQpOno+NiYmVSV6PT00JiYoVz1QLlNCT1hbVz4+PjI0XTw8MjR8UC5TQk9YW1c+Pj4xNiYyNTVd''@;'; put 'put ''PDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddKSxLW1VdPUtbVS16XV5XfWZvcih2YXIgWT1bXSxxPTA7cTxMO3ErKyl7dmFyIGVlPUwtcSxKPUtbZWUtKHElND8wOjQpXTtZW3FdPXE8NHx8ZWU8PTQ/SjpQLklOVl9TVUJfTUlYWzBdW1AuU0JPWFtKPj4+MjRdXV5QLklO''@;'; put 'put ''Vl9TVUJfTUlYWzFdW1AuU0JPWFtKPj4+MTYmMjU1XV1eUC5JTlZfU1VCX01JWFsyXVtQLlNCT1hbSj4+PjgmMjU1XV1eUC5JTlZfU1VCX01JWFszXVtQLlNCT1hbMjU1JkpdXX10aGlzLl9uUm91bmRzPU4sdGhpcy5fa2V5U2NoZWR1bGU9Syx0aGlzLl9pbnZLZXlTY2hlZHVsZT1ZfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oTyl7cmV0dXJuIEIoTz1fKE8pLHRoaXMuX2tleVNjaGVkdWxlLFAuU1VCX01JWCxQLlNCT1gsdGhpcy5fblJvdW5kcyl9LEYucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihPKXt2YXIgej10aGlzLmVuY3J5cHRCbG9ja1Jh''@;'; put 'put ''dyhPKSxOPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBOLndyaXRlVUludDMyQkUoelswXSwwKSxOLndyaXRlVUludDMyQkUoelsxXSw0KSxOLndyaXRlVUludDMyQkUoelsyXSw4KSxOLndyaXRlVUludDMyQkUoelszXSwxMiksTn0sRi5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9u''@;'; put 'put ''KE8pe3ZhciB6PShPPV8oTykpWzFdO09bMV09T1szXSxPWzNdPXo7dmFyIE49QihPLHRoaXMuX2ludktleVNjaGVkdWxlLFAuSU5WX1NVQl9NSVgsUC5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxMPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMyQkUoTlswXSwwKSxMLndy''@;'; put 'put ''aXRlVUludDMyQkUoTlszXSw0KSxMLndyaXRlVUludDMyQkUoTlsyXSw4KSxMLndyaXRlVUludDMyQkUoTlsxXSwxMiksTH0sRi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtnKHRoaXMuX2tleVNjaGVkdWxlKSxnKHRoaXMuX2ludktleVNjaGVkdWxlKSxnKHRoaXMuX2tleSl9LHVlLmV4''@;'; put 'put ''cG9ydHMuQUVTPUZ9LDQ4NDg6KHVlLFgseSk9Pnt2YXIgST15KDQ0OTcpLF89eSg5NTA5KS5CdWZmZXIsZz15KDEwMjcpLEI9eSg1NzE3KSx3PXkoMzI4OCksUD15KDcyOTUpLEY9eSg2ODUpO2Z1bmN0aW9uIE4oTCxLLFUsVyl7Zy5jYWxsKHRoaXMpO3ZhciBZPV8uYWxsb2MoNCwwKTt0aGlz''@;'; put 'put ''Ll9jaXBoZXI9bmV3IEkuQUVTKEspO3ZhciBxPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soWSk7dGhpcy5fZ2hhc2g9bmV3IHcocSksVT1mdW5jdGlvbiB6KEwsSyxVKXtpZigxMj09PUsubGVuZ3RoKXJldHVybiBMLl9maW5JRD1fLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDFdKV0pLF8u''@;'; put 'put ''Y29uY2F0KFtLLF8uZnJvbShbMCwwLDAsMl0pXSk7dmFyIFc9bmV3IHcoVSksWT1LLmxlbmd0aCxxPVklMTY7Vy51cGRhdGUoSykscSYmVy51cGRhdGUoXy5hbGxvYyhxPTE2LXEsMCkpLFcudXBkYXRlKF8uYWxsb2MoOCwwKSk7dmFyIGVlPTgqWSxKPV8uYWxsb2MoOCk7Si53cml0ZVVJbnRC''@;'; put 'put ''RShlZSwwLDgpLFcudXBkYXRlKEopLEwuX2ZpbklEPVcuc3RhdGU7dmFyIG5lPV8uZnJvbShMLl9maW5JRCk7cmV0dXJuIEYobmUpLG5lfSh0aGlzLFUscSksdGhpcy5fcHJldj1fLmZyb20oVSksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5z''@;'; put 'put ''YWZlKDApLHRoaXMuX2RlY3J5cHQ9Vyx0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsdGhpcy5fbW9kZT1MLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9QihOLGcpLE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7''@;'; put 'put ''dmFyIEs9MTYtdGhpcy5fYWxlbiUxNjtLPDE2JiYoSz1fLmFsbG9jKEssMCksdGhpcy5fZ2hhc2gudXBkYXRlKEspKX10aGlzLl9jYWxsZWQ9ITA7dmFyIFU9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsTCk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P0w6VSksdGhp''@;'; put 'put ''cy5fbGVuKz1MLmxlbmd0aCxVfSxOLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBMPVAodGhpcy5f''@;'; put 'put ''Z2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24gTyhMLEspe3ZhciBVPTA7TC5sZW5ndGghPT1LLmxlbmd0aCYmVSsrO2Zvcih2YXIgVz1NYXRoLm1pbihM''@;'; put 'put ''Lmxlbmd0aCxLLmxlbmd0aCksWT0wO1k8VzsrK1kpVSs9TFtZXV5LW1ldO3JldHVybiBVfShMLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1MLHRoaXMuX2NpcGhl''@;'; put 'put ''ci5zY3J1YigpfSxOLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdHx8IV8uaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0''@;'; put 'put ''aGlzLl9hdXRoVGFnfSxOLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKEspe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPUt9LE4ucHJvdG90eXBlLnNl''@;'; put 'put ''dEFBRD1mdW5jdGlvbihLKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoSyksdGhpcy5fYWxlbis9Sy5sZW5ndGh9LHVlLmV4cG9ydHM9Tn0sNDY5NjoodWUsWCx5''@;'; put 'put ''KT0+e3ZhciBJPXkoMTQ5NCksXz15KDYxOTMpLGc9eSg0OTQ2KTtYLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1JLmNyZWF0ZUNpcGhlcixYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9SS5jcmVhdGVDaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9Xy5jcmVhdGVEZWNpcGhl''@;'; put 'put ''cixYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PV8uY3JlYXRlRGVjaXBoZXJpdixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBCKCl7cmV0dXJuIE9iamVjdC5rZXlzKGcpfX0sNjE5MzoodWUsWCx5KT0+e3ZhciBJPXkoNDg0OCksXz15KDk1MDkpLkJ1ZmZlcixn''@;'; put 'put ''PXkoNDUpLEI9eSg1OTY5KSx3PXkoMTAyNyksUD15KDQ0OTcpLEY9eSgzMDQ4KTtmdW5jdGlvbiB6KFcsWSxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IE4sdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PV8uZnJvbShxKSx0aGlz''@;'; put 'put ''Ll9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gTigpe3RoaXMuY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFcsWSxxKXt2YXIgZWU9Z1tXLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIHEmJihxPV8uZnJvbShxKSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Xy5mcm9tKFkpKSxZLmxlbmd0''@;'; put 'put ''aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IEIoZWUubW9kdWxlLFkscSwhMCk6ImF1dGgiPT09ZWUudHlwZT9uZXcgSShlZS5tb2R1bGUsWSxxLCEwKTpuZXcgeihlZS5t''@;'; put 'put ''b2R1bGUsWSxxKX15KDU3MTcpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZLHEsZWU9W107WT10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOylxPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFkpLGVlLnB1''@;'; put 'put ''c2gocSk7cmV0dXJuIF8uY29uY2F0KGVlKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gTChXKXt2YXIgWT1XWzE1XTtpZihZPDF8fFk+MTYpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciBxPS0xOysrcTxZOylpZihXW3ErKDE2LVkpXSE9PVkpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1ZKXJldHVybiBXLnNsaWNlKDAsMTYtWSl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlz''@;'; put 'put ''LFcpKTtpZihXKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcp''@;'; put 'put ''e3RoaXMuY2FjaGU9Xy5jb25jYXQoW3RoaXMuY2FjaGUsV10pfSxOLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVyl7dmFyIFk7aWYoVyl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYp''@;'; put 'put ''LFl9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFk7cmV0dXJuIG51bGx9LE4ucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIHRoaXMuY2FjaGV9LFguY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24gVShXLFkpe3ZhciBxPWdbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCExLHEua2V5LHEuaXYpO3JldHVybiBLKFcsZWUua2V5''@;'; put 'put ''LGVlLml2KX0sWC5jcmVhdGVEZWNpcGhlcml2PUt9LDE0OTQ6KHVlLFgseSk9Pnt2YXIgST15KDQ1KSxfPXkoNDg0OCksZz15KDk1MDkpLkJ1ZmZlcixCPXkoNTk2OSksdz15KDEwMjcpLFA9eSg0NDk3KSxGPXkoMzA0OCk7ZnVuY3Rpb24geihXLFkscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2Nh''@;'; put 'put ''Y2hlPW5ldyBMLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoWSksdGhpcy5fcHJldj1nLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfXkoNTcxNykoeix3KSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFks''@;'; put 'put ''cSxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCgpOylxPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFkpLGVlLnB1c2gocSk7cmV0dXJuIGcuY29uY2F0KGVlKX07dmFyIE49Zy5hbGxvYygxNiwxNik7ZnVuY3Rpb24gTCgpe3RoaXMuY2FjaGU9Zy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFcs''@;'; put 'put ''WSxxKXt2YXIgZWU9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPWcuZnJvbShZKSksWS5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlk''@;'; put 'put ''IGtleSBsZW5ndGggIitZLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1nLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVl''@;'; put 'put ''LnR5cGU/bmV3IEIoZWUubW9kdWxlLFkscSk6ImF1dGgiPT09ZWUudHlwZT9uZXcgXyhlZS5tb2R1bGUsWSxxKTpuZXcgeihlZS5tb2R1bGUsWSxxKX16LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJl''@;'; put 'put ''dHVybiBXPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFcpLHRoaXMuX2NpcGhlci5zY3J1YigpLFc7aWYoIVcuZXF1YWxzKE4pKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1''@;'; put 'put ''dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sTC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2FjaGU9Zy5jb25jYXQoW3RoaXMuY2FjaGUsV10pfSxMLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxl''@;'; put 'put ''bmd0aD4xNSl7dmFyIFc9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXfXJldHVybiBudWxsfSxMLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgVz0xNi10aGlzLmNhY2hlLmxlbmd0aCxZPWcuYWxsb2NVbnNh''@;'; put 'put ''ZmUoVykscT0tMTsrK3E8VzspWS53cml0ZVVJbnQ4KFcscSk7cmV0dXJuIGcuY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sWC5jcmVhdGVDaXBoZXJpdj1LLFguY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgcT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhXLGVlLmtleSxlZS5pdil9fSwzMjg4Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz1JLmFsbG9jKDE2LDApO2Z1bmN0aW9uIEIoUCl7dmFyIEY9SS5hbGxvY1Vuc2Fm''@;'; put 'put ''ZSgxNik7cmV0dXJuIEYud3JpdGVVSW50MzJCRShQWzBdPj4+MCwwKSxGLndyaXRlVUludDMyQkUoUFsxXT4+PjAsNCksRi53cml0ZVVJbnQzMkJFKFBbMl0+Pj4wLDgpLEYud3JpdGVVSW50MzJCRShQWzNdPj4+MCwxMiksRn1mdW5jdGlvbiB3KFApe3RoaXMuaD1QLHRoaXMuc3RhdGU9SS5h''@;'; put 'put ''bGxvYygxNiwwKSx0aGlzLmNhY2hlPUkuYWxsb2NVbnNhZmUoMCl9dy5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oUCl7Zm9yKHZhciBGPS0xOysrRjxQLmxlbmd0aDspdGhpcy5zdGF0ZVtGXV49UFtGXTt0aGlzLl9tdWx0aXBseSgpfSx3LnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIE8sTixQPWZ1bmN0aW9uIGcoUCl7cmV0dXJuW1AucmVhZFVJbnQzMkJFKDApLFAucmVhZFVJbnQzMkJFKDQpLFAucmVhZFVJbnQzMkJFKDgpLFAucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksRj1bMCwwLDAsMF0sTD0tMTsrK0w8MTI4Oyl7Zm9yKCEhKHRoaXMuc3RhdGVb''@;'; put 'put ''fn4oTC84KV0mMTw8Ny1MJTgpJiYoRlswXV49UFswXSxGWzFdXj1QWzFdLEZbMl1ePVBbMl0sRlszXV49UFszXSksTj0hISgxJlBbM10pLE89MztPPjA7Ty0tKVBbT109UFtPXT4+PjF8KDEmUFtPLTFdKTw8MzE7UFswXT1QWzBdPj4+MSxOJiYoUFswXT0tNTIwMDkzNjk2XlBbMF0pfXRoaXMu''@;'; put 'put ''c3RhdGU9QihGKX0sdy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFApe3RoaXMuY2FjaGU9SS5jb25jYXQoW3RoaXMuY2FjaGUsUF0pO2Zvcih2YXIgRjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KUY9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2Uo''@;'; put 'put ''MTYpLHRoaXMuZ2hhc2goRil9LHcucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKFAsRil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKEkuY29uY2F0KFt0aGlzLmNhY2hlLF9dLDE2KSksdGhpcy5naGFzaChCKFswLFAsMCxGXSkpLHRoaXMuc3RhdGV9LHVlLmV4cG9ydHM9''@;'; put 'put ''d30sNjg1OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbiBYKHkpe2Zvcih2YXIgXyxJPXkubGVuZ3RoO0ktLTspe2lmKDI1NSE9PShfPXkucmVhZFVJbnQ4KEkpKSl7XysrLHkud3JpdGVVSW50OChfLEkpO2JyZWFrfXkud3JpdGVVSW50OCgwLEkpfX19LDUyOTI6KHVlLFgseSk9Pnt2YXIgST15''@;'; put 'put ''KDcyOTUpO1guZW5jcnlwdD1mdW5jdGlvbihfLGcpe3ZhciBCPUkoZyxfLl9wcmV2KTtyZXR1cm4gXy5fcHJldj1fLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIpLF8uX3ByZXZ9LFguZGVjcnlwdD1mdW5jdGlvbihfLGcpe3ZhciBCPV8uX3ByZXY7Xy5fcHJldj1nO3ZhciB3PV8uX2NpcGhlci5k''@;'; put 'put ''ZWNyeXB0QmxvY2soZyk7cmV0dXJuIEkodyxCKX19LDYzMTE6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoNzI5NSk7ZnVuY3Rpb24gZyhCLHcsUCl7dmFyIEY9dy5sZW5ndGgsTz1fKHcsQi5fY2FjaGUpO3JldHVybiBCLl9jYWNoZT1CLl9jYWNoZS5zbGljZShGKSxCLl9w''@;'; put 'put ''cmV2PUkuY29uY2F0KFtCLl9wcmV2LFA/dzpPXSksT31YLmVuY3J5cHQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgTyxGPUkuYWxsb2NVbnNhZmUoMCk7dy5sZW5ndGg7KXtpZigwPT09Qi5fY2FjaGUubGVuZ3RoJiYoQi5fY2FjaGU9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KSxC''@;'; put 'put ''Ll9wcmV2PUkuYWxsb2NVbnNhZmUoMCkpLCEoQi5fY2FjaGUubGVuZ3RoPD13Lmxlbmd0aCkpe0Y9SS5jb25jYXQoW0YsZyhCLHcsUCldKTticmVha31GPUkuY29uY2F0KFtGLGcoQix3LnNsaWNlKDAsTz1CLl9jYWNoZS5sZW5ndGgpLFApXSksdz13LnNsaWNlKE8pfXJldHVybiBGfX0sMTUx''@;'; put 'put ''MDoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIF8oQix3LFApe2Zvcih2YXIgTCxLLE89LTEsTj0wOysrTzw4OylOKz0oMTI4JihLPUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldilbMF1eKEw9dyYxPDw3LU8/MTI4OjApKSk+Pk8lOCxCLl9wcmV2PWcoQi5f''@;'; put 'put ''cHJldixQP0w6Syk7cmV0dXJuIE59ZnVuY3Rpb24gZyhCLHcpe3ZhciBQPUIubGVuZ3RoLEY9LTEsTz1JLmFsbG9jVW5zYWZlKEIubGVuZ3RoKTtmb3IoQj1JLmNvbmNhdChbQixJLmZyb20oW3ddKV0pOysrRjxQOylPW0ZdPUJbRl08PDF8QltGKzFdPj43O3JldHVybiBPfVguZW5jcnlwdD1m''@;'; put 'put ''dW5jdGlvbihCLHcsUCl7Zm9yKHZhciBGPXcubGVuZ3RoLE89SS5hbGxvY1Vuc2FmZShGKSx6PS0xOysrejxGOylPW3pdPV8oQix3W3pdLFApO3JldHVybiBPfX0sMTk2NDoodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIF8oZyxCLHcpe3ZhciBGPWcuX2NpcGhlci5l''@;'; put 'put ''bmNyeXB0QmxvY2soZy5fcHJldilbMF1eQjtyZXR1cm4gZy5fcHJldj1JLmNvbmNhdChbZy5fcHJldi5zbGljZSgxKSxJLmZyb20oW3c/QjpGXSldKSxGfVguZW5jcnlwdD1mdW5jdGlvbihnLEIsdyl7Zm9yKHZhciBQPUIubGVuZ3RoLEY9SS5hbGxvY1Vuc2FmZShQKSxPPS0xOysrTzxQOylG''@;'; put 'put ''W09dPV8oZyxCW09dLHcpO3JldHVybiBGfX0sNjAwOToodWUsWCx5KT0+e3ZhciBJPXkoNzI5NSksXz15KDk1MDkpLkJ1ZmZlcixnPXkoNjg1KTtmdW5jdGlvbiBCKFApe3ZhciBGPVAuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoUC5fcHJldik7cmV0dXJuIGcoUC5fcHJldiksRn1YLmVuY3J5''@;'; put 'put ''cHQ9ZnVuY3Rpb24oUCxGKXt2YXIgTz1NYXRoLmNlaWwoRi5sZW5ndGgvMTYpLHo9UC5fY2FjaGUubGVuZ3RoO1AuX2NhY2hlPV8uY29uY2F0KFtQLl9jYWNoZSxfLmFsbG9jVW5zYWZlKDE2Kk8pXSk7Zm9yKHZhciBOPTA7TjxPO04rKyl7dmFyIEw9QihQKSxLPXorMTYqTjtQLl9jYWNoZS53''@;'; put 'put ''cml0ZVVJbnQzMkJFKExbMF0sSyswKSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMV0sSys0KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbMl0sSys4KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKExbM10sSysxMil9dmFyIFU9UC5fY2FjaGUuc2xpY2UoMCxGLmxlbmd0aCk7cmV0dXJuIFAu''@;'; put 'put ''X2NhY2hlPVAuX2NhY2hlLnNsaWNlKEYubGVuZ3RoKSxJKEYsVSl9fSwxMDg0Oih1ZSxYKT0+e1guZW5jcnlwdD1mdW5jdGlvbih5LEkpe3JldHVybiB5Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKEkpfSxYLmRlY3J5cHQ9ZnVuY3Rpb24oeSxJKXtyZXR1cm4geS5fY2lwaGVyLmRlY3J5cHRCbG9j''@;'; put 'put ''ayhJKX19LDQ1Oih1ZSxYLHkpPT57dmFyIEk9e0VDQjp5KDEwODQpLENCQzp5KDUyOTIpLENGQjp5KDYzMTEpLENGQjg6eSgxOTY0KSxDRkIxOnkoMTUxMCksT0ZCOnkoODg2MSksQ1RSOnkoNjAwOSksR0NNOnkoNjAwOSl9LF89eSg0OTQ2KTtmb3IodmFyIGcgaW4gXylfW2ddLm1vZHVsZT1J''@;'; put 'put ''W19bZ10ubW9kZV07dWUuZXhwb3J0cz1ffSw4ODYxOih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDcyOTUpO2Z1bmN0aW9uIGcoQil7cmV0dXJuIEIuX3ByZXY9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2KSxCLl9wcmV2fVguZW5jcnlwdD1mdW5jdGlvbihCLHcp''@;'; put 'put ''e2Zvcig7Qi5fY2FjaGUubGVuZ3RoPHcubGVuZ3RoOylCLl9jYWNoZT1JLmNvbmNhdChbQi5fY2FjaGUsZyhCKV0pO3ZhciBQPUIuX2NhY2hlLnNsaWNlKDAsdy5sZW5ndGgpO3JldHVybiBCLl9jYWNoZT1CLl9jYWNoZS5zbGljZSh3Lmxlbmd0aCksXyh3LFApfX0sNTk2OToodWUsWCx5KT0+''@;'; put 'put ''e3ZhciBJPXkoNDQ5NyksXz15KDk1MDkpLkJ1ZmZlcixnPXkoMTAyNyk7ZnVuY3Rpb24gdyhQLEYsTyx6KXtnLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhGKSx0aGlzLl9wcmV2PV8uZnJvbShPKSx0aGlzLl9jYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hl''@;'; put 'put ''PV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD16LHRoaXMuX21vZGU9UH15KDU3MTcpKHcsZyksdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsUCx0aGlzLl9kZWNyeXB0KX0sdy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHVlLmV4cG9ydHM9d30sMzYxNDoodWUsWCx5KT0+e3ZhciBJPXkoNzY2NyksXz15KDQ2OTYpLGc9eSg0NSksQj15KDk3MTUpLHc9eSgzMDQ4KTtmdW5jdGlvbiBPKEwsSyxVKXtpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKXJldHVybiBfLmNy''@;'; put 'put ''ZWF0ZUNpcGhlcml2KEwsSyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkx9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiB6KEwsSyxVKXtpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKXJldHVybiBfLmNyZWF0ZURl''@;'; put 'put ''Y2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TCxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9ZnVuY3Rpb24gUChMLEspe3ZhciBVLFc7aWYoTD1M''@;'; put 'put ''LnRvTG93ZXJDYXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tMXS5pdjtlbHNle2lmKCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJuIE8oTCxZLmtleSxZLml2KX0sWC5j''@;'; put 'put ''cmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PU8sWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPWZ1bmN0aW9uIEYoTCxLKXt2YXIgVSxXO2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZh''@;'; put 'put ''bGlkIHN1aXRlIHR5cGUiKTtVPTgqQltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiB6KEwsWS5rZXksWS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1YLkRlY2lwaGVyaXY9eixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBOKCl7cmV0dXJuIE9i''@;'; put 'put ''amVjdC5rZXlzKEIpLmNvbmNhdChfLmdldENpcGhlcnMoKSl9fSw3NjY3Oih1ZSxYLHkpPT57dmFyIEk9eSgxMDI3KSxfPXkoNTI1MSksZz15KDU3MTcpLEI9eSg5NTA5KS5CdWZmZXIsdz17ImRlcy1lZGUzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlMyI6Xy5FREUs''@;'; put 'put ''ImRlcy1lZGUtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRlcy1lZGUiOl8uRURFLCJkZXMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkRFUyksImRlcy1lY2IiOl8uREVTfTtmdW5jdGlvbiBQKEYpe0kuY2FsbCh0aGlzKTt2YXIgTixPPUYubW9kZS50b0xvd2VyQ2FzZSgpLHo9''@;'; put 'put ''d1tPXTtOPUYuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBMPUYua2V5O0IuaXNCdWZmZXIoTCl8fChMPUIuZnJvbShMKSksKCJkZXMtZWRlIj09PU98fCJkZXMtZWRlLWNiYyI9PT1PKSYmKEw9Qi5jb25jYXQoW0wsTC5zbGljZSgwLDgpXSkpO3ZhciBLPUYuaXY7Qi5pc0J1ZmZl''@;'; put 'put ''cihLKXx8KEs9Qi5mcm9tKEspKSx0aGlzLl9kZXM9ei5jcmVhdGUoe2tleTpMLGl2OkssdHlwZTpOfSl9dy5kZXM9d1siZGVzLWNiYyJdLHcuZGVzMz13WyJkZXMtZWRlMy1jYmMiXSx1ZS5leHBvcnRzPVAsZyhQLEkpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7cmV0dXJuIEIu''@;'; put 'put ''ZnJvbSh0aGlzLl9kZXMudXBkYXRlKEYpKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEIuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw5NzE1Oih1ZSxYKT0+e1hbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sWFsiZGVzLWNiYyJdPVguZGVzPXtrZXk6OCxpdjo4fSxY''@;'; put 'put ''WyJkZXMtZWRlMy1jYmMiXT1YLmRlczM9e2tleToyNCxpdjo4fSxYWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sWFsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LFhbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwzNjYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzU1''@;'; put 'put ''MCksXz15KDE3OTgpLGc9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gQihGKXt2YXIgeixPPUYubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97ej1uZXcgSShfKE8pKX13aGlsZSh6LmNtcChGLm1vZHVsdXMpPj0wfHwhei51bW9kKEYucHJpbWUxKXx8IXoudW1vZChGLnByaW1lMikpO3JldHVybiB6''@;'; put 'put ''fWZ1bmN0aW9uIFAoRixPKXt2YXIgej1mdW5jdGlvbiB3KEYpe3ZhciBPPUIoRik7cmV0dXJue2JsaW5kZXI6Ty50b1JlZChJLm1vbnQoRi5tb2R1bHVzKSkucmVkUG93KG5ldyBJKEYucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOk8uaW52bShGLm1vZHVsdXMpfX0oTyks''@;'; put 'put ''Tj1PLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEw9bmV3IEkoRikubXVsKHouYmxpbmRlcikudW1vZChPLm1vZHVsdXMpLEs9TC50b1JlZChJLm1vbnQoTy5wcmltZTEpKSxVPUwudG9SZWQoSS5tb250KE8ucHJpbWUyKSksVz1PLmNvZWZmaWNpZW50LFk9Ty5wcmltZTEscT1PLnByaW1lMixlZT1L''@;'; put 'put ''LnJlZFBvdyhPLmV4cG9uZW50MSkuZnJvbVJlZCgpLEo9VS5yZWRQb3coTy5leHBvbmVudDIpLmZyb21SZWQoKSxuZT1lZS5pc3ViKEopLmltdWwoVykudW1vZChZKS5pbXVsKHEpO3JldHVybiBKLmlhZGQobmUpLmltdWwoei51bmJsaW5kZXIpLnVtb2QoTy5tb2R1bHVzKS50b0FycmF5TGlr''@;'; put 'put ''ZShnLCJiZSIsTil9UC5nZXRyPUIsdWUuZXhwb3J0cz1QfSw2MDQyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9eSg1MjA3KX0sNDc0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoMzQ4MiksZz15KDM4NzIpLEI9eSg1NzE3KSx3''@;'; put 'put ''PXkoMjk1NyksUD15KDc3NTMpLEY9eSg1MjA3KTtmdW5jdGlvbiBPKEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgVT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPVUuaGFzaCx0aGlzLl9oYXNoPV8oVS5oYXNo''@;'; put 'put ''KSx0aGlzLl90YWc9VS5pZCx0aGlzLl9zaWduVHlwZT1VLnNpZ259ZnVuY3Rpb24geihLKXtnLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPV8oVS5oYXNoKSx0aGlzLl90YWc9''@;'; put 'put ''VS5pZCx0aGlzLl9zaWduVHlwZT1VLnNpZ259ZnVuY3Rpb24gTihLKXtyZXR1cm4gbmV3IE8oSyl9ZnVuY3Rpb24gTChLKXtyZXR1cm4gbmV3IHooSyl9T2JqZWN0LmtleXMoRikuZm9yRWFjaChmdW5jdGlvbihLKXtGW0tdLmlkPUkuZnJvbShGW0tdLmlkLCJoZXgiKSxGW0sudG9Mb3dlckNh''@;'; put 'put ''c2UoKV09RltLXX0pLEIoTyxnLldyaXRhYmxlKSxPLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxXLFkpe3RoaXMuX2hhc2gudXBkYXRlKFUpLFkoKX0sTy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''VT9JLmZyb20oVSxXKTpVKSx0aGlzfSxPLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFUsVyl7dGhpcy5lbmQoKTt2YXIgWT10aGlzLl9oYXNoLmRpZ2VzdCgpLHE9dyhZLFUsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gVz9xLnRvU3RyaW5nKFcpOnF9''@;'; put 'put ''LEIoeixnLldyaXRhYmxlKSx6LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxXLFkpe3RoaXMuX2hhc2gudXBkYXRlKFUpLFkoKX0sei5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgVT9JLmZyb20oVSxX''@;'; put 'put ''KTpVKSx0aGlzfSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oVSxXLFkpe3ZhciBxPSJzdHJpbmciPT10eXBlb2YgVz9JLmZyb20oVyxZKTpXO3RoaXMuZW5kKCk7dmFyIGVlPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIFAocSxlZSxVLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9''@;'; put 'put ''LHVlLmV4cG9ydHM9e1NpZ246TixWZXJpZnk6TCxjcmVhdGVTaWduOk4sY3JlYXRlVmVyaWZ5Okx9fSwyOTU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSg4MzU1KSxnPXkoMzY2MyksQj15KDY5NDgpLmVjLHc9eSgzNTUwKSxQPXkoOTgwKSxGPXko''@;'; put 'put ''MTMwOCk7ZnVuY3Rpb24gVShKLG5lLGllLGxlKXtpZigoSj1JLmZyb20oSi50b0FycmF5KCkpKS5sZW5ndGg8bmUuYnl0ZUxlbmd0aCgpKXt2YXIgbWU9SS5hbGxvYyhuZS5ieXRlTGVuZ3RoKCktSi5sZW5ndGgpO0o9SS5jb25jYXQoW21lLEpdKX12YXIgX2U9aWUubGVuZ3RoLFRlPWZ1bmN0''@;'; put 'put ''aW9uIFkoSixuZSl7Sj0oSj1XKEosbmUpKS5tb2QobmUpO3ZhciBpZT1JLmZyb20oSi50b0FycmF5KCkpO2lmKGllLmxlbmd0aDxuZS5ieXRlTGVuZ3RoKCkpe3ZhciBsZT1JLmFsbG9jKG5lLmJ5dGVMZW5ndGgoKS1pZS5sZW5ndGgpO2llPUkuY29uY2F0KFtsZSxpZV0pfXJldHVybiBpZX0o''@;'; put 'put ''aWUsbmUpLFNlPUkuYWxsb2MoX2UpO1NlLmZpbGwoMSk7dmFyIHplPUkuYWxsb2MoX2UpO3JldHVybiB6ZT1fKGxlLHplKS51cGRhdGUoU2UpLnVwZGF0ZShJLmZyb20oWzBdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksU2U9XyhsZSx6ZSkudXBkYXRlKFNlKS5kaWdlc3QoKSx7''@;'; put 'put ''azp6ZT1fKGxlLHplKS51cGRhdGUoU2UpLnVwZGF0ZShJLmZyb20oWzFdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksdjpTZT1fKGxlLHplKS51cGRhdGUoU2UpLmRpZ2VzdCgpfX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT1uZXcgdyhKKSxsZT0oSi5sZW5ndGg8PDMpLW5lLmJp''@;'; put 'put ''dExlbmd0aCgpO3JldHVybiBsZT4wJiZpZS5pc2hybihsZSksaWV9ZnVuY3Rpb24gcShKLG5lLGllKXt2YXIgbGUsbWU7ZG97Zm9yKGxlPUkuYWxsb2MoMCk7OCpsZS5sZW5ndGg8Si5iaXRMZW5ndGgoKTspbmUudj1fKGllLG5lLmspLnVwZGF0ZShuZS52KS5kaWdlc3QoKSxsZT1JLmNvbmNh''@;'; put 'put ''dChbbGUsbmUudl0pO21lPVcobGUsSiksbmUuaz1fKGllLG5lLmspLnVwZGF0ZShuZS52KS51cGRhdGUoSS5mcm9tKFswXSkpLmRpZ2VzdCgpLG5lLnY9XyhpZSxuZS5rKS51cGRhdGUobmUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1tZS5jbXAoSikpO3JldHVybiBtZX1mdW5jdGlvbiBlZShK''@;'; put 'put ''LG5lLGllLGxlKXtyZXR1cm4gSi50b1JlZCh3Lm1vbnQoaWUpKS5yZWRQb3cobmUpLmZyb21SZWQoKS5tb2QobGUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24geihKLG5lLGllLGxlLG1lKXt2YXIgX2U9UChuZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9RltuZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIituZS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBfZT1uZXcg''@;'; put 'put ''QihpZSkua2V5RnJvbVByaXZhdGUobmUucHJpdmF0ZUtleSkuc2lnbihKKTtyZXR1cm4gSS5mcm9tKF9lLnRvREVSKCkpfShKLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIEwoSixuZSxpZSl7Zm9yKHZhciB6ZSxsZT1uZS5wYXJhbXMucHJpdl9rZXksbWU9bmUucGFyYW1zLnAsX2U9bmUucGFyYW1zLnEsVGU9bmUucGFyYW1zLmcsU2U9bmV3IHcoMCksVj1XKEosX2UpLm1vZChfZSkscD0hMSxiPVUobGUsX2UsSixpZSk7ITE9PT1wOylTZT1lZShUZSx6ZT1x''@;'; put 'put ''KF9lLGIsaWUpLG1lLF9lKSwwPT09KHA9emUuaW52bShfZSkuaW11bChWLmFkZChsZS5tdWwoU2UpKSkubW9kKF9lKSkuY21wbigwKSYmKHA9ITEsU2U9bmV3IHcoMCkpO3JldHVybiBmdW5jdGlvbiBLKEosbmUpe0o9Si50b0FycmF5KCksbmU9bmUudG9BcnJheSgpLDEyOCZKWzBdJiYoSj1b''@;'; put 'put ''MF0uY29uY2F0KEopKSwxMjgmbmVbMF0mJihuZT1bMF0uY29uY2F0KG5lKSk7dmFyIGxlPVs0OCxKLmxlbmd0aCtuZS5sZW5ndGgrNCwyLEoubGVuZ3RoXTtyZXR1cm4gbGU9bGUuY29uY2F0KEosWzIsbmUubGVuZ3RoXSxuZSksSS5mcm9tKGxlKX0oU2UscCl9KEosX2UsaWUpfWlmKCJyc2Ei''@;'; put 'put ''IT09bGUmJiJlY2RzYS9yc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9pZCAwIT09bmUucGFkZGluZyYmMSE9PW5lLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcgbW9kZSIpO0o9SS5j''@;'; put 'put ''b25jYXQoW21lLEpdKTtmb3IodmFyIFRlPV9lLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFNlPVswLDFdO0oubGVuZ3RoK1NlLmxlbmd0aCsxPFRlOylTZS5wdXNoKDI1NSk7U2UucHVzaCgwKTtmb3IodmFyIHplPS0xOysremU8Si5sZW5ndGg7KVNlLnB1c2goSlt6ZV0pO3JldHVybiBnKFNlLF9l''@;'; put 'put ''KX0sdWUuZXhwb3J0cy5nZXRLZXk9VSx1ZS5leHBvcnRzLm1ha2VLZXk9cX0sNzc1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MDkpLkJ1ZmZlcixfPXkoMzU1MCksZz15KDY5NDgpLmVjLEI9eSg5ODApLHc9eSgxMzA4KTtmdW5jdGlvbiB6KE4sTCl7aWYoTi5jbXBuKDAp''@;'; put 'put ''PD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihOLmNtcChMKT49MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIil9dWUuZXhwb3J0cz1mdW5jdGlvbiBQKE4sTCxLLFUsVyl7dmFyIFk9QihLKTtpZigiZWMiPT09WS50eXBlKXtpZigiZWNkc2EiIT09VSYmImVjZHNh''@;'; put 'put ''L3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEYoTixMLEspe3ZhciBVPXdbSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFVKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0suZGF0YS5h''@;'; put 'put ''bGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IGcoVSkudmVyaWZ5KEwsTixLLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KE4sTCxZKX1pZigiZHNhIj09PVkudHlwZSl7aWYoImRzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIE8oTixMLEspe3ZhciBVPUsuZGF0YS5wLFc9Sy5kYXRhLnEsWT1LLmRhdGEuZyxxPUsuZGF0YS5wdWJfa2V5LGVlPUIuc2lnbmF0dXJlLmRlY29kZShOLCJkZXIiKSxKPWVlLnMsbmU9ZWUucjt6KEosVykseihuZSxXKTt2YXIgaWU9Xy5tb250KFUpLGxlPUouaW52''@;'; put 'put ''bShXKTtyZXR1cm4gMD09PVkudG9SZWQoaWUpLnJlZFBvdyhuZXcgXyhMKS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgpLm11bChxLnRvUmVkKGllKS5yZWRQb3cobmUubXVsKGxlKS5tb2QoVykpLmZyb21SZWQoKSkubW9kKFUpLm1vZChXKS5jbXAobmUpfShOLEwsWSl9aWYoInJzYSIhPT1V''@;'; put 'put ''JiYiZWNkc2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtMPUkuY29uY2F0KFtXLExdKTtmb3IodmFyIHE9WS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxlZT1bMV0sSj0wO0wubGVuZ3RoK2VlLmxlbmd0aCsyPHE7KWVlLnB1c2goMjU1KSxKKz0xO2Vl''@;'; put 'put ''LnB1c2goMCk7Zm9yKHZhciBuZT0tMTsrK25lPEwubGVuZ3RoOyllZS5wdXNoKExbbmVdKTtlZT1JLmZyb20oZWUpO3ZhciBpZT1fLm1vbnQoWS5tb2R1bHVzKTtOPShOPW5ldyBfKE4pLnRvUmVkKGllKSkucmVkUG93KG5ldyBfKFkucHVibGljRXhwb25lbnQpKSxOPUkuZnJvbShOLmZyb21S''@;'; put 'put ''ZWQoKS50b0FycmF5KCkpO3ZhciBsZT1KPDg/MTowO2ZvcihxPU1hdGgubWluKE4ubGVuZ3RoLGVlLmxlbmd0aCksTi5sZW5ndGghPT1lZS5sZW5ndGgmJihsZT0xKSxuZT0tMTsrK25lPHE7KWxlfD1OW25lXV5lZVtuZV07cmV0dXJuIDA9PT1sZX19LDQzOTA6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg4MjEyKSxfPU9iamVjdC5rZXlzfHxmdW5jdGlvbihLKXt2YXIgVT1bXTtmb3IodmFyIFcgaW4gSylVLnB1c2goVyk7cmV0dXJuIFV9O3VlLmV4cG9ydHM9ejt2YXIgZz1PYmplY3QuY3JlYXRlKHkoNjQ5NykpO2cuaW5oZXJpdHM9eSg1NzE3KTt2YXIgQj15KDQ5NjAp''@;'; put 'put ''LHc9eSgyMDEwKTtnLmluaGVyaXRzKHosQik7Zm9yKHZhciBQPV8ody5wcm90b3R5cGUpLEY9MDtGPFAubGVuZ3RoO0YrKyl7dmFyIE89UFtGXTt6LnByb3RvdHlwZVtPXXx8KHoucHJvdG90eXBlW09dPXcucHJvdG90eXBlW09dKX1mdW5jdGlvbiB6KEspe2lmKCEodGhpcyBpbnN0YW5jZW9m''@;'; put 'put ''IHopKXJldHVybiBuZXcgeihLKTtCLmNhbGwodGhpcyxLKSx3LmNhbGwodGhpcyxLKSxLJiYhMT09PUsucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxLJiYhMT09PUsud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsSyYmITE9PT1LLmFsbG93''@;'; put 'put ''SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixOKX1mdW5jdGlvbiBOKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxJLm5leHRUaWNrKEwsdGhpcyl9ZnVuY3Rpb24gTChLKXtLLmVuZCgpfU9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwiZGVzdHJveWVk''@;'; put 'put ''Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEspe3Zv''@;'; put 'put ''aWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1LLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUspfX0pLHoucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEssVSl7dGhp''@;'; put 'put ''cy5wdXNoKG51bGwpLHRoaXMuZW5kKCksSS5uZXh0VGljayhVLEspfX0sMTI5NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWc7dmFyIEk9eSgzOTEyKSxfPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7ZnVuY3Rpb24gZyhCKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1''@;'; put 'put ''cm4gbmV3IGcoQik7SS5jYWxsKHRoaXMsQil9Xy5pbmhlcml0cz15KDU3MTcpLF8uaW5oZXJpdHMoZyxJKSxnLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEIsdyxQKXtQKG51bGwsQil9fSw0OTYwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDgyMTIp''@;'; put 'put ''O3VlLmV4cG9ydHM9bGU7dmFyIEIsZz15KDU4MjYpO2xlLlJlYWRhYmxlU3RhdGU9aWUseSg3MTg3KTt2YXIgUD1mdW5jdGlvbih2ZSxYZSl7cmV0dXJuIHZlLmxpc3RlbmVycyhYZSkubGVuZ3RofSxGPXkoOTgxOSksTz15KDE1NzIpLkJ1ZmZlcix6PSh0eXBlb2YgeS5nPCJ1Ij95Lmc6dHlw''@;'; put 'put ''ZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sSz1PYmplY3QuY3JlYXRlKHkoNjQ5NykpO0suaW5oZXJpdHM9eSg1NzE3KTt2YXIgVT15KDYzNTMpLFc9dm9pZCAwO1c9VSYmVS5kZWJ1Z2xvZz9VLmRlYnVnbG9n''@;'; put 'put ''KCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGVlLFk9eSgyMjY3KSxxPXkoNTk5Nyk7Sy5pbmhlcml0cyhsZSxGKTt2YXIgSj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBpZSh2ZSxYZSl7dmFyIGplPVhlIGluc3RhbmNlb2YoQj1CfHx5''@;'; put 'put ''KDQzOTApKTt0aGlzLm9iamVjdE1vZGU9ISEodmU9dmV8fHt9KS5vYmplY3RNb2RlLGplJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF2ZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBEZT12ZS5oaWdoV2F0ZXJNYXJrLEZlPXZlLnJlYWRhYmxlSGlnaFdhdGVyTWFyazt0''@;'; put 'put ''aGlzLmhpZ2hXYXRlck1hcms9RGV8fDA9PT1EZT9EZTpqZSYmKEZlfHwwPT09RmUpP0ZlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuYnVmZmVyPW5ldyBZLHRoaXMubGVuZ3RoPTAsdGhpcy5w''@;'; put 'put ''aXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJs''@;'; put 'put ''ZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz12ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMu''@;'; put 'put ''ZW5jb2Rpbmc9bnVsbCx2ZS5lbmNvZGluZyYmKGVlfHwoZWU9eSgyMjIxKS5zKSx0aGlzLmRlY29kZXI9bmV3IGVlKHZlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXZlLmVuY29kaW5nKX1mdW5jdGlvbiBsZSh2ZSl7aWYoQj1CfHx5KDQzOTApLCEodGhpcyBpbnN0YW5jZW9mIGxlKSlyZXR1''@;'; put 'put ''cm4gbmV3IGxlKHZlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBpZSh2ZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLHZlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHZlLnJlYWQmJih0aGlzLl9yZWFkPXZlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5kZXN0cm95JiYodGhpcy5fZGVzdHJv''@;'; put 'put ''eT12ZS5kZXN0cm95KSksRi5jYWxsKHRoaXMpfWZ1bmN0aW9uIG1lKHZlLFhlLGplLERlLEZlKXt2YXIgSWUsUmU9dmUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIG51bGw9PT1YZT8oUmUucmVhZGluZz0hMSxmdW5jdGlvbiBiKHZlLFhlKXtpZighWGUuZW5kZWQpe2lmKFhlLmRlY29kZXIpe3Zh''@;'; put 'put ''ciBqZT1YZS5kZWNvZGVyLmVuZCgpO2plJiZqZS5sZW5ndGgmJihYZS5idWZmZXIucHVzaChqZSksWGUubGVuZ3RoKz1YZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoKX1YZS5lbmRlZD0hMCx4KHZlKX19KHZlLFJlKSk6KEZlfHwoSWU9ZnVuY3Rpb24gVGUodmUsWGUpe3ZhciBqZTtyZXR1cm4h''@;'; put 'put ''ZnVuY3Rpb24gTCh2ZSl7cmV0dXJuIE8uaXNCdWZmZXIodmUpfHx2ZSBpbnN0YW5jZW9mIHp9KFhlKSYmInN0cmluZyIhPXR5cGVvZiBYZSYmdm9pZCAwIT09WGUmJiF2ZS5vYmplY3RNb2RlJiYoamU9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxq''@;'; put 'put ''ZX0oUmUsWGUpKSxJZT92ZS5lbWl0KCJlcnJvciIsSWUpOlJlLm9iamVjdE1vZGV8fFhlJiZYZS5sZW5ndGg+MD8oInN0cmluZyIhPXR5cGVvZiBYZSYmIVJlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihYZSkhPT1PLnByb3RvdHlwZSYmKFhlPWZ1bmN0aW9uIE4odmUpe3Jl''@;'; put 'put ''dHVybiBPLmZyb20odmUpfShYZSkpLERlP1JlLmVuZEVtaXR0ZWQ/dmUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6X2UodmUsUmUsWGUsITApOlJlLmVuZGVkP3ZlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNo''@;'; put 'put ''KCkgYWZ0ZXIgRU9GIikpOihSZS5yZWFkaW5nPSExLFJlLmRlY29kZXImJiFqZT8oWGU9UmUuZGVjb2Rlci53cml0ZShYZSksUmUub2JqZWN0TW9kZXx8MCE9PVhlLmxlbmd0aD9fZSh2ZSxSZSxYZSwhMSk6VCh2ZSxSZSkpOl9lKHZlLFJlLFhlLCExKSkpOkRlfHwoUmUucmVhZGluZz0hMSkp''@;'; put 'put ''LGZ1bmN0aW9uIFNlKHZlKXtyZXR1cm4hdmUuZW5kZWQmJih2ZS5uZWVkUmVhZGFibGV8fHZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrfHwwPT09dmUubGVuZ3RoKX0oUmUpfWZ1bmN0aW9uIF9lKHZlLFhlLGplLERlKXtYZS5mbG93aW5nJiYwPT09WGUubGVuZ3RoJiYhWGUuc3luYz8odmUu''@;'; put 'put ''ZW1pdCgiZGF0YSIsamUpLHZlLnJlYWQoMCkpOihYZS5sZW5ndGgrPVhlLm9iamVjdE1vZGU/MTpqZS5sZW5ndGgsRGU/WGUuYnVmZmVyLnVuc2hpZnQoamUpOlhlLmJ1ZmZlci5wdXNoKGplKSxYZS5uZWVkUmVhZGFibGUmJngodmUpKSxUKHZlLFhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''bGUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih2ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUuZGVzdHJveWVkPXZlKX19KSxsZS5wcm90b3R5cGUuZGVzdHJveT1xLmRlc3Ryb3ksbGUucHJvdG90eXBlLl91bmRlc3Ryb3k9cS51bmRlc3Ryb3ksbGUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHZlLFhlKXt0aGlzLnB1c2gobnVsbCksWGUodmUpfSxsZS5wcm90b3R5cGUucHVz''@;'; put 'put ''aD1mdW5jdGlvbih2ZSxYZSl7dmFyIERlLGplPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGplLm9iamVjdE1vZGU/RGU9ITA6InN0cmluZyI9PXR5cGVvZiB2ZSYmKChYZT1YZXx8amUuZGVmYXVsdEVuY29kaW5nKSE9PWplLmVuY29kaW5nJiYodmU9Ty5mcm9tKHZlLFhlKSxYZT0iIiks''@;'; put 'put ''RGU9ITApLG1lKHRoaXMsdmUsWGUsITEsRGUpfSxsZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih2ZSl7cmV0dXJuIG1lKHRoaXMsdmUsbnVsbCwhMCwhMSl9LGxlLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5n''@;'; put 'put ''fSxsZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe3JldHVybiBlZXx8KGVlPXkoMjIyMSkucyksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBlZSh2ZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz12ZSx0aGlzfTtmdW5jdGlvbiBwKHZlLFhlKXtyZXR1''@;'; put 'put ''cm4gdmU8PTB8fDA9PT1YZS5sZW5ndGgmJlhlLmVuZGVkPzA6WGUub2JqZWN0TW9kZT8xOnZlIT12ZT9YZS5mbG93aW5nJiZYZS5sZW5ndGg/WGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6WGUubGVuZ3RoOih2ZT5YZS5oaWdoV2F0ZXJNYXJrJiYoWGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlv''@;'; put 'put ''biBWKHZlKXtyZXR1cm4gdmU+PTgzODg2MDg/dmU9ODM4ODYwODoodmUtLSx2ZXw9dmU+Pj4xLHZlfD12ZT4+PjIsdmV8PXZlPj4+NCx2ZXw9dmU+Pj44LHZlfD12ZT4+PjE2LHZlKyspLHZlfSh2ZSkpLHZlPD1YZS5sZW5ndGg/dmU6WGUuZW5kZWQ/WGUubGVuZ3RoOihYZS5uZWVkUmVhZGFi''@;'; put 'put ''bGU9ITAsMCkpfWZ1bmN0aW9uIHgodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtYZS5uZWVkUmVhZGFibGU9ITEsWGUuZW1pdHRlZFJlYWRhYmxlfHwoVygiZW1pdFJlYWRhYmxlIixYZS5mbG93aW5nKSxYZS5lbWl0dGVkUmVhZGFibGU9ITAsWGUuc3luYz9fLm5leHRUaWNrKEMsdmUp''@;'; put 'put ''OkModmUpKX1mdW5jdGlvbiBDKHZlKXtXKCJlbWl0IHJlYWRhYmxlIiksdmUuZW1pdCgicmVhZGFibGUiKSxhZSh2ZSl9ZnVuY3Rpb24gVCh2ZSxYZSl7WGUucmVhZGluZ01vcmV8fChYZS5yZWFkaW5nTW9yZT0hMCxfLm5leHRUaWNrKEgsdmUsWGUpKX1mdW5jdGlvbiBIKHZlLFhlKXtmb3Io''@;'; put 'put ''dmFyIGplPVhlLmxlbmd0aDshWGUucmVhZGluZyYmIVhlLmZsb3dpbmcmJiFYZS5lbmRlZCYmWGUubGVuZ3RoPFhlLmhpZ2hXYXRlck1hcmsmJihXKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHZlLnJlYWQoMCksamUhPT1YZS5sZW5ndGgpOylqZT1YZS5sZW5ndGg7WGUucmVhZGluZ01vcmU9''@;'; put 'put ''ITF9ZnVuY3Rpb24gRSh2ZSl7VygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdmUucmVhZCgwKX1mdW5jdGlvbiBBKHZlLFhlKXtYZS5yZWFkaW5nfHwoVygicmVzdW1lIHJlYWQgMCIpLHZlLnJlYWQoMCkpLFhlLnJlc3VtZVNjaGVkdWxlZD0hMSxYZS5hd2FpdERyYWluPTAsdmUuZW1p''@;'; put 'put ''dCgicmVzdW1lIiksYWUodmUpLFhlLmZsb3dpbmcmJiFYZS5yZWFkaW5nJiZ2ZS5yZWFkKDApfWZ1bmN0aW9uIGFlKHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7Zm9yKFcoImZsb3ciLFhlLmZsb3dpbmcpO1hlLmZsb3dpbmcmJm51bGwhPT12ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdGUo''@;'; put 'put ''dmUsWGUpe3JldHVybiAwPT09WGUubGVuZ3RoP251bGw6KFhlLm9iamVjdE1vZGU/amU9WGUuYnVmZmVyLnNoaWZ0KCk6IXZlfHx2ZT49WGUubGVuZ3RoPyhqZT1YZS5kZWNvZGVyP1hlLmJ1ZmZlci5qb2luKCIiKToxPT09WGUuYnVmZmVyLmxlbmd0aD9YZS5idWZmZXIuaGVhZC5kYXRhOlhl''@;'; put 'put ''LmJ1ZmZlci5jb25jYXQoWGUubGVuZ3RoKSxYZS5idWZmZXIuY2xlYXIoKSk6amU9ZnVuY3Rpb24gc2UodmUsWGUsamUpe3ZhciBEZTtyZXR1cm4gdmU8WGUuaGVhZC5kYXRhLmxlbmd0aD8oRGU9WGUuaGVhZC5kYXRhLnNsaWNlKDAsdmUpLFhlLmhlYWQuZGF0YT1YZS5oZWFkLmRhdGEuc2xp''@;'; put 'put ''Y2UodmUpKTpEZT12ZT09PVhlLmhlYWQuZGF0YS5sZW5ndGg/WGUuc2hpZnQoKTpqZT9mdW5jdGlvbiB3ZSh2ZSxYZSl7dmFyIGplPVhlLmhlYWQsRGU9MSxGZT1qZS5kYXRhO2Zvcih2ZS09RmUubGVuZ3RoO2plPWplLm5leHQ7KXt2YXIgUmU9amUuZGF0YSxJZT12ZT5SZS5sZW5ndGg/UmUu''@;'; put 'put ''bGVuZ3RoOnZlO2lmKEZlKz1JZT09PVJlLmxlbmd0aD9SZTpSZS5zbGljZSgwLHZlKSwwPT0odmUtPUllKSl7SWU9PT1SZS5sZW5ndGg/KCsrRGUsWGUuaGVhZD1qZS5uZXh0P2plLm5leHQ6WGUudGFpbD1udWxsKTooWGUuaGVhZD1qZSxqZS5kYXRhPVJlLnNsaWNlKEllKSk7YnJlYWt9KytE''@;'; put 'put ''ZX1yZXR1cm4gWGUubGVuZ3RoLT1EZSxGZX0odmUsWGUpOmZ1bmN0aW9uIFVlKHZlLFhlKXt2YXIgamU9Ty5hbGxvY1Vuc2FmZSh2ZSksRGU9WGUuaGVhZCxGZT0xO2ZvcihEZS5kYXRhLmNvcHkoamUpLHZlLT1EZS5kYXRhLmxlbmd0aDtEZT1EZS5uZXh0Oyl7dmFyIFJlPURlLmRhdGEsSWU9''@;'; put 'put ''dmU+UmUubGVuZ3RoP1JlLmxlbmd0aDp2ZTtpZihSZS5jb3B5KGplLGplLmxlbmd0aC12ZSwwLEllKSwwPT0odmUtPUllKSl7SWU9PT1SZS5sZW5ndGg/KCsrRmUsWGUuaGVhZD1EZS5uZXh0P0RlLm5leHQ6WGUudGFpbD1udWxsKTooWGUuaGVhZD1EZSxEZS5kYXRhPVJlLnNsaWNlKEllKSk7''@;'; put 'put ''YnJlYWt9KytGZX1yZXR1cm4gWGUubGVuZ3RoLT1GZSxqZX0odmUsWGUpLERlfSh2ZSxYZS5idWZmZXIsWGUuZGVjb2RlciksamUpO3ZhciBqZX1mdW5jdGlvbiBKZSh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO2lmKFhlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRh''@;'; put 'put ''YmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7WGUuZW5kRW1pdHRlZHx8KFhlLmVuZGVkPSEwLF8ubmV4dFRpY2sob3QsWGUsdmUpKX1mdW5jdGlvbiBvdCh2ZSxYZSl7IXZlLmVuZEVtaXR0ZWQmJjA9PT12ZS5sZW5ndGgmJih2ZS5lbmRFbWl0dGVkPSEwLFhlLnJlYWRhYmxl''@;'; put 'put ''PSExLFhlLmVtaXQoImVuZCIpKX1mdW5jdGlvbiBNZSh2ZSxYZSl7Zm9yKHZhciBqZT0wLERlPXZlLmxlbmd0aDtqZTxEZTtqZSsrKWlmKHZlW2plXT09PVhlKXJldHVybiBqZTtyZXR1cm4tMX1sZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih2ZSl7VygicmVhZCIsdmUpLHZlPXBhcnNlSW50''@;'; put 'put ''KHZlLDEwKTt2YXIgWGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxqZT12ZTtpZigwIT09dmUmJihYZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT12ZSYmWGUubmVlZFJlYWRhYmxlJiYoWGUubGVuZ3RoPj1YZS5oaWdoV2F0ZXJNYXJrfHxYZS5lbmRlZCkpcmV0dXJuIFcoInJlYWQ6IGVtaXRSZWFk''@;'; put 'put ''YWJsZSIsWGUubGVuZ3RoLFhlLmVuZGVkKSwwPT09WGUubGVuZ3RoJiZYZS5lbmRlZD9KZSh0aGlzKTp4KHRoaXMpLG51bGw7aWYoMD09PSh2ZT1wKHZlLFhlKSkmJlhlLmVuZGVkKXJldHVybiAwPT09WGUubGVuZ3RoJiZKZSh0aGlzKSxudWxsO3ZhciBGZSxEZT1YZS5uZWVkUmVhZGFibGU7''@;'; put 'put ''cmV0dXJuIFcoIm5lZWQgcmVhZGFibGUiLERlKSwoMD09PVhlLmxlbmd0aHx8WGUubGVuZ3RoLXZlPFhlLmhpZ2hXYXRlck1hcmspJiZXKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsRGU9ITApLFhlLmVuZGVkfHxYZS5yZWFkaW5nP1coInJlYWRpbmcgb3IgZW5kZWQiLERlPSExKTpE''@;'; put 'put ''ZSYmKFcoImRvIHJlYWQiKSxYZS5yZWFkaW5nPSEwLFhlLnN5bmM9ITAsMD09PVhlLmxlbmd0aCYmKFhlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChYZS5oaWdoV2F0ZXJNYXJrKSxYZS5zeW5jPSExLFhlLnJlYWRpbmd8fCh2ZT1wKGplLFhlKSkpLG51bGw9PT0oRmU9dmU+MD90ZSh2''@;'; put 'put ''ZSxYZSk6bnVsbCk/KFhlLm5lZWRSZWFkYWJsZT0hMCx2ZT0wKTpYZS5sZW5ndGgtPXZlLDA9PT1YZS5sZW5ndGgmJihYZS5lbmRlZHx8KFhlLm5lZWRSZWFkYWJsZT0hMCksamUhPT12ZSYmWGUuZW5kZWQmJkplKHRoaXMpKSxudWxsIT09RmUmJnRoaXMuZW1pdCgiZGF0YSIsRmUpLEZlfSxs''@;'; put 'put ''ZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odmUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGxlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHZlLFhlKXt2YXIgamU9dGhpcyxEZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRj''@;'; put 'put ''aChEZS5waXBlc0NvdW50KXtjYXNlIDA6RGUucGlwZXM9dmU7YnJlYWs7Y2FzZSAxOkRlLnBpcGVzPVtEZS5waXBlcyx2ZV07YnJlYWs7ZGVmYXVsdDpEZS5waXBlcy5wdXNoKHZlKX1EZS5waXBlc0NvdW50Kz0xLFcoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsRGUucGlwZXNDb3VudCxYZSk7''@;'; put 'put ''dmFyIFJlPVhlJiYhMT09PVhlLmVuZHx8dmU9PT1JLnN0ZG91dHx8dmU9PT1JLnN0ZGVycj9EdDpWZTtmdW5jdGlvbiBWZSgpe1coIm9uZW5kIiksdmUuZW5kKCl9RGUuZW5kRW1pdHRlZD9fLm5leHRUaWNrKFJlKTpqZS5vbmNlKCJlbmQiLFJlKSx2ZS5vbigidW5waXBlIixmdW5jdGlvbiBJ''@;'; put 'put ''ZShpdCwkZSl7Vygib251bnBpcGUiKSxpdD09PWplJiYkZSYmITE9PT0kZS5oYXNVbnBpcGVkJiYoJGUuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBfdCgpe1coImNsZWFudXAiKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHl0KSx2ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixNdCksdmUu''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImRyYWluIixrZSksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIix1biksdmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsSWUpLGplLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFZlKSxqZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixEdCksamUucmVtb3ZlTGlzdGVuZXIoImRh''@;'; put 'put ''dGEiLFFlKSxBZT0hMCxEZS5hd2FpdERyYWluJiYoIXZlLl93cml0YWJsZVN0YXRlfHx2ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZrZSgpfSgpKX0pO3ZhciBrZT1mdW5jdGlvbiBqKHZlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7VygicGlwZU9u''@;'; put 'put ''RHJhaW4iLFhlLmF3YWl0RHJhaW4pLFhlLmF3YWl0RHJhaW4mJlhlLmF3YWl0RHJhaW4tLSwwPT09WGUuYXdhaXREcmFpbiYmUCh2ZSwiZGF0YSIpJiYoWGUuZmxvd2luZz0hMCxhZSh2ZSkpfX0oamUpO3ZlLm9uKCJkcmFpbiIsa2UpO3ZhciBBZT0hMSxudD0hMTtmdW5jdGlvbiBRZShpdCl7''@;'; put 'put ''Vygib25kYXRhIiksbnQ9ITEsITE9PT12ZS53cml0ZShpdCkmJiFudCYmKCgxPT09RGUucGlwZXNDb3VudCYmRGUucGlwZXM9PT12ZXx8RGUucGlwZXNDb3VudD4xJiYtMSE9PU1lKERlLnBpcGVzLHZlKSkmJiFBZSYmKFcoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsRGUuYXdhaXRE''@;'; put 'put ''cmFpbiksRGUuYXdhaXREcmFpbisrLG50PSEwKSxqZS5wYXVzZSgpKX1mdW5jdGlvbiB1bihpdCl7Vygib25lcnJvciIsaXQpLER0KCksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIix1biksMD09PVAodmUsImVycm9yIikmJnZlLmVtaXQoImVycm9yIixpdCl9ZnVuY3Rpb24geXQoKXt2ZS5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiZmluaXNoIixNdCksRHQoKX1mdW5jdGlvbiBNdCgpe1coIm9uZmluaXNoIiksdmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix5dCksRHQoKX1mdW5jdGlvbiBEdCgpe1coInVucGlwZSIpLGplLnVucGlwZSh2ZSl9cmV0dXJuIGplLm9uKCJkYXRhIixRZSksZnVuY3Rp''@;'; put 'put ''b24gbmUodmUsWGUsamUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHZlLnByZXBlbmRMaXN0ZW5lcihYZSxqZSk7dmUuX2V2ZW50cyYmdmUuX2V2ZW50c1tYZV0/Zyh2ZS5fZXZlbnRzW1hlXSk/dmUuX2V2ZW50c1tYZV0udW5zaGlmdChqZSk6dmUu''@;'; put 'put ''X2V2ZW50c1tYZV09W2plLHZlLl9ldmVudHNbWGVdXTp2ZS5vbihYZSxqZSl9KHZlLCJlcnJvciIsdW4pLHZlLm9uY2UoImNsb3NlIix5dCksdmUub25jZSgiZmluaXNoIixNdCksdmUuZW1pdCgicGlwZSIsamUpLERlLmZsb3dpbmd8fChXKCJwaXBlIHJlc3VtZSIpLGplLnJlc3VtZSgpKSx2''@;'; put 'put ''ZX0sbGUucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih2ZSl7dmFyIFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1YZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1YZS5waXBlc0NvdW50KXJldHVybiB2ZSYmdmUhPT1YZS5waXBlc3x8KHZl''@;'; put 'put ''fHwodmU9WGUucGlwZXMpLFhlLnBpcGVzPW51bGwsWGUucGlwZXNDb3VudD0wLFhlLmZsb3dpbmc9ITEsdmUmJnZlLmVtaXQoInVucGlwZSIsdGhpcyxqZSkpLHRoaXM7aWYoIXZlKXt2YXIgRGU9WGUucGlwZXMsRmU9WGUucGlwZXNDb3VudDtYZS5waXBlcz1udWxsLFhlLnBpcGVzQ291bnQ9''@;'; put 'put ''MCxYZS5mbG93aW5nPSExO2Zvcih2YXIgUmU9MDtSZTxGZTtSZSsrKURlW1JlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgSWU9TWUoWGUucGlwZXMsdmUpO3JldHVybi0xPT09SWV8fChYZS5waXBlcy5zcGxpY2UoSWUsMSksWGUucGlwZXND''@;'; put 'put ''b3VudC09MSwxPT09WGUucGlwZXNDb3VudCYmKFhlLnBpcGVzPVhlLnBpcGVzWzBdKSx2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsamUpKSx0aGlzfSxsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9bGUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHZlLFhlKXt2YXIgamU9Ri5wcm90b3R5cGUub24uY2Fs''@;'; put 'put ''bCh0aGlzLHZlLFhlKTtpZigiZGF0YSI9PT12ZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKTtlbHNlIGlmKCJyZWFkYWJsZSI9PT12ZSl7dmFyIERlPXRoaXMuX3JlYWRhYmxlU3RhdGU7IURlLmVuZEVtaXR0ZWQmJiFEZS5yZWFkYWJsZUxpc3Rlbmlu''@;'; put 'put ''ZyYmKERlLnJlYWRhYmxlTGlzdGVuaW5nPURlLm5lZWRSZWFkYWJsZT0hMCxEZS5lbWl0dGVkUmVhZGFibGU9ITEsRGUucmVhZGluZz9EZS5sZW5ndGgmJngodGhpcyk6Xy5uZXh0VGljayhFLHRoaXMpKX1yZXR1cm4gamV9LGxlLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdmU9''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdmUuZmxvd2luZ3x8KFcoInJlc3VtZSIpLHZlLmZsb3dpbmc9ITAsZnVuY3Rpb24gbSh2ZSxYZSl7WGUucmVzdW1lU2NoZWR1bGVkfHwoWGUucmVzdW1lU2NoZWR1bGVkPSEwLF8ubmV4dFRpY2soQSx2ZSxYZSkpfSh0aGlzLHZlKSksdGhpc30s''@;'; put 'put ''bGUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFcoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFcoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5n''@;'; put 'put ''PSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30sbGUucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odmUpe3ZhciBYZT10aGlzLGplPXRoaXMuX3JlYWRhYmxlU3RhdGUsRGU9ITE7Zm9yKHZhciBGZSBpbiB2ZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFcoIndyYXBwZWQgZW5kIiksamUuZGVj''@;'; put 'put ''b2RlciYmIWplLmVuZGVkKXt2YXIgSWU9amUuZGVjb2Rlci5lbmQoKTtJZSYmSWUubGVuZ3RoJiZYZS5wdXNoKEllKX1YZS5wdXNoKG51bGwpfSksdmUub24oImRhdGEiLGZ1bmN0aW9uKEllKXtXKCJ3cmFwcGVkIGRhdGEiKSxqZS5kZWNvZGVyJiYoSWU9amUuZGVjb2Rlci53cml0ZShJZSkp''@;'; put 'put ''LGplLm9iamVjdE1vZGUmJm51bGw9PUllfHwhKGplLm9iamVjdE1vZGV8fEllJiZJZS5sZW5ndGgpfHxYZS5wdXNoKEllKXx8KERlPSEwLHZlLnBhdXNlKCkpfSksdmUpdm9pZCAwPT09dGhpc1tGZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiB2ZVtGZV0mJih0aGlzW0ZlXT1mdW5jdGlvbihJZSl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZlW0llXS5hcHBseSh2ZSxhcmd1bWVudHMpfX0oRmUpKTtmb3IodmFyIFJlPTA7UmU8Si5sZW5ndGg7UmUrKyl2ZS5vbihKW1JlXSx0aGlzLmVtaXQuYmluZCh0aGlzLEpbUmVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oSWUpe1coIndy''@;'; put 'put ''YXBwZWQgX3JlYWQiLEllKSxEZSYmKERlPSExLHZlLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrfX0pLGxlLl9mcm9tTGlzdD10ZX0sMzkxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUI7dmFyIEk9eSg0MzkwKSxfPU9iamVjdC5jcmVhdGUoeSg2NDk3KSk7ZnVuY3Rpb24gZyhGLE8pe3ZhciB6PXRoaXMuX3RyYW5zZm9ybVN0YXRlO3oudHJhbnNm''@;'; put 'put ''b3JtaW5nPSExO3ZhciBOPXoud3JpdGVjYjtpZighTilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ei53cml0ZWNodW5rPW51bGwsei53cml0ZWNiPW51bGwsbnVsbCE9TyYmdGhpcy5wdXNoKE8pLE4o''@;'; put 'put ''Rik7dmFyIEw9dGhpcy5fcmVhZGFibGVTdGF0ZTtMLnJlYWRpbmc9ITEsKEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gQihGKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIo''@;'; put 'put ''Rik7SS5jYWxsKHRoaXMsRiksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmcuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEYmJigiZnVuY3Rpb24iPT10eXBlb2YgRi50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ri50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBGLmZsdXNoJiYodGhpcy5fZmx1c2g9Ri5mbHVzaCkp''@;'; put 'put ''LHRoaXMub24oInByZWZpbmlzaCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBGPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKE8seil7UChGLE8seil9KTpQKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBQKEYsTyx6KXtpZihPKXJldHVybiBG''@;'; put 'put ''LmVtaXQoImVycm9yIixPKTtpZihudWxsIT16JiZGLnB1c2goeiksRi5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihGLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEYucHVzaChudWxsKX1fLmluaGVyaXRzPXkoNTcxNyksXy5pbmhlcml0cyhCLEkpLEIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5fdHJhbnNm''@;'; put 'put ''b3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxJLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxGLE8pfSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEYsTyx6KXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuX3dy''@;'; put 'put ''aXRlPWZ1bmN0aW9uKEYsTyx6KXt2YXIgTj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihOLndyaXRlY2I9eixOLndyaXRlY2h1bms9RixOLndyaXRlZW5jb2Rpbmc9TywhTi50cmFuc2Zvcm1pbmcpe3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7KE4ubmVlZFRyYW5zZm9ybXx8TC5uZWVkUmVh''@;'; put 'put ''ZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX19LEIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEYpe3ZhciBPPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1PLndyaXRlY2h1bmsmJk8ud3JpdGVjYiYmIU8udHJhbnNmb3Jt''@;'; put 'put ''aW5nPyhPLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oTy53cml0ZWNodW5rLE8ud3JpdGVlbmNvZGluZyxPLmFmdGVyVHJhbnNmb3JtKSk6Ty5uZWVkVHJhbnNmb3JtPSEwfSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihGLE8pe3ZhciB6PXRoaXM7SS5wcm90b3R5cGUu''@;'; put 'put ''X2Rlc3Ryb3kuY2FsbCh0aGlzLEYsZnVuY3Rpb24oTil7TyhOKSx6LmVtaXQoImNsb3NlIil9KX19LDIwMTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoODIxMik7ZnVuY3Rpb24gQihtKXt2YXIgQT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVs''@;'; put 'put ''bCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBFKG0sQSxhZSl7dmFyIHRlPW0uZW50cnk7Zm9yKG0uZW50cnk9bnVsbDt0ZTspe3ZhciBzZT10ZS5jYWxsYmFjaztBLnBlbmRpbmdjYi0tLHNlKGFlKSx0ZT10ZS5uZXh0fUEuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9bX0oQSxt''@;'; put 'put ''KX19dWUuZXhwb3J0cz1KO3ZhciBQLHc9IUkuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihJLnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOl8ubmV4dFRpY2s7Si5Xcml0YWJsZVN0YXRlPXE7dmFyIEY9T2JqZWN0LmNyZWF0ZSh5KDY0OTcpKTtGLmluaGVy''@;'; put 'put ''aXRzPXkoNTcxNyk7dmFyIGVlLE89e2RlcHJlY2F0ZTp5KDQ5MjcpfSx6PXkoOTgxOSksTj15KDE1NzIpLkJ1ZmZlcixMPSh0eXBlb2YgeS5nPCJ1Ij95Lmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30s''@;'; put 'put ''Vz15KDU5OTcpO2Z1bmN0aW9uIFkoKXt9ZnVuY3Rpb24gcShtLEEpe1A9UHx8eSg0MzkwKTt2YXIgYWU9QSBpbnN0YW5jZW9mIFA7dGhpcy5vYmplY3RNb2RlPSEhKG09bXx8e30pLm9iamVjdE1vZGUsYWUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIW0ud3JpdGFibGVP''@;'; put 'put ''YmplY3RNb2RlKTt2YXIgdGU9bS5oaWdoV2F0ZXJNYXJrLHNlPW0ud3JpdGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz10ZXx8MD09PXRlP3RlOmFlJiYoc2V8fDA9PT1zZSk/c2U6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZs''@;'; put 'put ''b29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1tLmRlY29kZVN0cmlu''@;'; put 'put ''Z3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPW0uZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihKZSl7IWZ1bmN0''@;'; put 'put ''aW9uIHplKG0sQSl7dmFyIGFlPW0uX3dyaXRhYmxlU3RhdGUsdGU9YWUuc3luYyxzZT1hZS53cml0ZWNiO2lmKGZ1bmN0aW9uIFNlKG0pe20ud3JpdGluZz0hMSxtLndyaXRlY2I9bnVsbCxtLmxlbmd0aC09bS53cml0ZWxlbixtLndyaXRlbGVuPTB9KGFlKSxBKSFmdW5jdGlvbiBUZShtLEEs''@;'; put 'put ''YWUsdGUsc2Upey0tQS5wZW5kaW5nY2IsYWU/KF8ubmV4dFRpY2soc2UsdGUpLF8ubmV4dFRpY2soSCxtLEEpLG0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG0uZW1pdCgiZXJyb3IiLHRlKSk6KHNlKHRlKSxtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtLmVtaXQo''@;'; put 'put ''ImVycm9yIix0ZSksSChtLEEpKX0obSxhZSx0ZSxBLHNlKTtlbHNle3ZhciB3ZT14KGFlKTshd2UmJiFhZS5jb3JrZWQmJiFhZS5idWZmZXJQcm9jZXNzaW5nJiZhZS5idWZmZXJlZFJlcXVlc3QmJmIobSxhZSksdGU/dyhWLG0sYWUsd2Usc2UpOlYobSxhZSx3ZSxzZSl9fShBLEplKX0sdGhp''@;'; put 'put ''cy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0''@;'; put 'put ''Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQih0aGlzKX1mdW5jdGlvbiBKKG0pe2lmKFA9UHx8eSg0MzkwKSwhKGVlLmNhbGwoSix0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgSihtKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBxKG0sdGhpcyksdGhp''@;'; put 'put ''cy53cml0YWJsZT0hMCxtJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0ud3JpdGUmJih0aGlzLl93cml0ZT1tLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgbS53cml0ZXYmJih0aGlzLl93cml0ZXY9bS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95''@;'; put 'put ''PW0uZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIG0uZmluYWwmJih0aGlzLl9maW5hbD1tLmZpbmFsKSksei5jYWxsKHRoaXMpfWZ1bmN0aW9uIF9lKG0sQSxhZSx0ZSxzZSx3ZSxVZSl7QS53cml0ZWxlbj10ZSxBLndyaXRlY2I9VWUsQS53cml0aW5nPSEwLEEuc3luYz0hMCxhZT9tLl93''@;'; put 'put ''cml0ZXYoc2UsQS5vbndyaXRlKTptLl93cml0ZShzZSx3ZSxBLm9ud3JpdGUpLEEuc3luYz0hMX1mdW5jdGlvbiBWKG0sQSxhZSx0ZSl7YWV8fGZ1bmN0aW9uIHAobSxBKXswPT09QS5sZW5ndGgmJkEubmVlZERyYWluJiYoQS5uZWVkRHJhaW49ITEsbS5lbWl0KCJkcmFpbiIpKX0obSxBKSxB''@;'; put 'put ''LnBlbmRpbmdjYi0tLHRlKCksSChtLEEpfWZ1bmN0aW9uIGIobSxBKXtBLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIGFlPUEuYnVmZmVyZWRSZXF1ZXN0O2lmKG0uX3dyaXRldiYmYWUmJmFlLm5leHQpe3ZhciBzZT1uZXcgQXJyYXkoQS5idWZmZXJlZFJlcXVlc3RDb3VudCksd2U9QS5jb3Jr''@;'; put 'put ''ZWRSZXF1ZXN0c0ZyZWU7d2UuZW50cnk9YWU7Zm9yKHZhciBVZT0wLEplPSEwO2FlOylzZVtVZV09YWUsYWUuaXNCdWZ8fChKZT0hMSksYWU9YWUubmV4dCxVZSs9MTtzZS5hbGxCdWZmZXJzPUplLF9lKG0sQSwhMCxBLmxlbmd0aCxzZSwiIix3ZS5maW5pc2gpLEEucGVuZGluZ2NiKyssQS5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsd2UubmV4dD8oQS5jb3JrZWRSZXF1ZXN0c0ZyZWU9d2UubmV4dCx3ZS5uZXh0PW51bGwpOkEuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBCKEEpLEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7YWU7KXt2YXIgb3Q9YWUuY2h1bms7aWYo''@;'; put 'put ''X2UobSxBLCExLEEub2JqZWN0TW9kZT8xOm90Lmxlbmd0aCxvdCxhZS5lbmNvZGluZyxhZS5jYWxsYmFjayksYWU9YWUubmV4dCxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sQS53cml0aW5nKWJyZWFrfW51bGw9PT1hZSYmKEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1BLmJ1ZmZlcmVk''@;'; put 'put ''UmVxdWVzdD1hZSxBLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24geChtKXtyZXR1cm4gbS5lbmRpbmcmJjA9PT1tLmxlbmd0aCYmbnVsbD09PW0uYnVmZmVyZWRSZXF1ZXN0JiYhbS5maW5pc2hlZCYmIW0ud3JpdGluZ31mdW5jdGlvbiBDKG0sQSl7bS5fZmluYWwoZnVuY3Rpb24oYWUp''@;'; put 'put ''e0EucGVuZGluZ2NiLS0sYWUmJm0uZW1pdCgiZXJyb3IiLGFlKSxBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIiksSChtLEEpfSl9ZnVuY3Rpb24gSChtLEEpe3ZhciBhZT14KEEpO3JldHVybiBhZSYmKGZ1bmN0aW9uIFQobSxBKXshQS5wcmVmaW5pc2hlZCYmIUEuZmluYWxD''@;'; put 'put ''YWxsZWQmJigiZnVuY3Rpb24iPT10eXBlb2YgbS5fZmluYWw/KEEucGVuZGluZ2NiKyssQS5maW5hbENhbGxlZD0hMCxfLm5leHRUaWNrKEMsbSxBKSk6KEEucHJlZmluaXNoZWQ9ITAsbS5lbWl0KCJwcmVmaW5pc2giKSkpfShtLEEpLDA9PT1BLnBlbmRpbmdjYiYmKEEuZmluaXNoZWQ9ITAs''@;'; put 'put ''bS5lbWl0KCJmaW5pc2giKSkpLGFlfUYuaW5oZXJpdHMoSix6KSxxLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIEE9dGhpcy5idWZmZXJlZFJlcXVlc3QsYWU9W107QTspYWUucHVzaChBKSxBPUEubmV4dDtyZXR1cm4gYWV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShxLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0Ok8uZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIs''@;'; put 'put ''IkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KGVlPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5z''@;'; put 'put ''dGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24obSl7cmV0dXJuISFlZS5jYWxsKHRoaXMsbSl8fHRoaXM9PT1KJiZtJiZtLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgcX19KSk6ZWU9ZnVuY3Rpb24obSl7cmV0dXJuIG0g''@;'; put 'put ''aW5zdGFuY2VvZiB0aGlzfSxKLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikpfSxKLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihtLEEsYWUpe3ZhciB0ZT10aGlzLl93cml0YWJsZVN0YXRl''@;'; put 'put ''LHNlPSExLHdlPSF0ZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBVKG0pe3JldHVybiBOLmlzQnVmZmVyKG0pfHxtIGluc3RhbmNlb2YgTH0obSk7cmV0dXJuIHdlJiYhTi5pc0J1ZmZlcihtKSYmKG09ZnVuY3Rpb24gSyhtKXtyZXR1cm4gTi5mcm9tKG0pfShtKSksImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEEmJihhZT1BLEE9bnVsbCksd2U/QT0iYnVmZmVyIjpBfHwoQT10ZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBhZSYmKGFlPVkpLHRlLmVuZGVkP2Z1bmN0aW9uIG5lKG0sQSl7dmFyIGFlPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7bS5lbWl0KCJlcnJvciIs''@;'; put 'put ''YWUpLF8ubmV4dFRpY2soQSxhZSl9KHRoaXMsYWUpOih3ZXx8ZnVuY3Rpb24gaWUobSxBLGFlLHRlKXt2YXIgc2U9ITAsd2U9ITE7cmV0dXJuIG51bGw9PT1hZT93ZT1uZXcgVHlwZUVycm9yKCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIpOiJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''YWUmJnZvaWQgMCE9PWFlJiYhQS5vYmplY3RNb2RlJiYod2U9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSx3ZSYmKG0uZW1pdCgiZXJyb3IiLHdlKSxfLm5leHRUaWNrKHRlLHdlKSxzZT0hMSksc2V9KHRoaXMsdGUsbSxhZSkpJiYodGUucGVuZGlu''@;'; put 'put ''Z2NiKyssc2U9ZnVuY3Rpb24gbWUobSxBLGFlLHRlLHNlLHdlKXtpZighYWUpe3ZhciBVZT1mdW5jdGlvbiBsZShtLEEsYWUpe3JldHVybiFtLm9iamVjdE1vZGUmJiExIT09bS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIEEmJihBPU4uZnJvbShBLGFlKSksQX0oQSx0ZSxzZSk7''@;'; put 'put ''dGUhPT1VZSYmKGFlPSEwLHNlPSJidWZmZXIiLHRlPVVlKX12YXIgSmU9QS5vYmplY3RNb2RlPzE6dGUubGVuZ3RoO0EubGVuZ3RoKz1KZTt2YXIgb3Q9QS5sZW5ndGg8QS5oaWdoV2F0ZXJNYXJrO2lmKG90fHwoQS5uZWVkRHJhaW49ITApLEEud3JpdGluZ3x8QS5jb3JrZWQpe3ZhciBNZT1B''@;'; put 'put ''Lmxhc3RCdWZmZXJlZFJlcXVlc3Q7QS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazp0ZSxlbmNvZGluZzpzZSxpc0J1ZjphZSxjYWxsYmFjazp3ZSxuZXh0Om51bGx9LE1lP01lLm5leHQ9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0OkEuYnVmZmVyZWRSZXF1ZXN0PUEubGFzdEJ1ZmZlcmVkUmVx''@;'; put 'put ''dWVzdCxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgX2UobSxBLCExLEplLHRlLHNlLHdlKTtyZXR1cm4gb3R9KHRoaXMsdGUsd2UsbSxBLGFlKSksc2V9LEoucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxKLnByb3RvdHlwZS51''@;'; put 'put ''bmNvcms9ZnVuY3Rpb24oKXt2YXIgbT10aGlzLl93cml0YWJsZVN0YXRlO20uY29ya2VkJiYobS5jb3JrZWQtLSwhbS53cml0aW5nJiYhbS5jb3JrZWQmJiFtLmJ1ZmZlclByb2Nlc3NpbmcmJm0uYnVmZmVyZWRSZXF1ZXN0JiZiKHRoaXMsbSkpfSxKLnByb3RvdHlwZS5zZXREZWZhdWx0RW5j''@;'; put 'put ''b2Rpbmc9ZnVuY3Rpb24oQSl7aWYoInN0cmluZyI9PXR5cGVvZiBBJiYoQT1BLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKEEr''@;'; put 'put ''IiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0EpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1BLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLnByb3RvdHlwZSwid3JpdGFibGVIaWdo''@;'; put 'put ''V2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihtLEEsYWUpe2FlKG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkIikp''@;'; put 'put ''fSxKLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsSi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKG0sQSxhZSl7dmFyIHRlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ImZ1bmN0aW9uIj09dHlwZW9mIG0/KGFlPW0sbT1udWxsLEE9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIEEmJihhZT1BLEE9bnVsbCks''@;'; put 'put ''bnVsbCE9bSYmdGhpcy53cml0ZShtLEEpLHRlLmNvcmtlZCYmKHRlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLHRlLmVuZGluZ3x8ZnVuY3Rpb24gaihtLEEsYWUpe0EuZW5kaW5nPSEwLEgobSxBKSxhZSYmKEEuZmluaXNoZWQ/Xy5uZXh0VGljayhhZSk6bS5vbmNlKCJmaW5pc2giLGFlKSks''@;'; put 'put ''QS5lbmRlZD0hMCxtLndyaXRhYmxlPSExfSh0aGlzLHRlLGFlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95''@;'; put 'put ''ZWR9LHNldDpmdW5jdGlvbihtKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9bSl9fSksSi5wcm90b3R5cGUuZGVzdHJveT1XLmRlc3Ryb3ksSi5wcm90b3R5cGUuX3VuZGVzdHJveT1XLnVuZGVzdHJveSxKLnByb3RvdHlwZS5fZGVzdHJveT1m''@;'; put 'put ''dW5jdGlvbihtLEEpe3RoaXMuZW5kKCksQShtKX19LDIyNjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIF89eSgxNTcyKS5CdWZmZXIsZz15KDY0MTkpO2Z1bmN0aW9uIEIodyxQLEYpe3cuY29weShQLEYpfXVlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KCl7KGZ1bmN0aW9u''@;'; put 'put ''IEkodyxQKXtpZighKHcgaW5zdGFuY2VvZiBQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsdyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdy5wcm90b3R5cGUucHVzaD1m''@;'; put 'put ''dW5jdGlvbihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1POnRoaXMuaGVhZD1PLHRoaXMudGFpbD1PLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0OnRoaXMuaGVh''@;'; put 'put ''ZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPU8pLHRoaXMuaGVhZD1PLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgRj10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90''@;'; put 'put ''aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLEZ9fSx3LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSx3LnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4iIjtmb3IodmFyIE89dGhpcy5oZWFkLHo9IiIrTy5kYXRhO089Ty5uZXh0Oyl6Kz1GK08uZGF0YTtyZXR1cm4gen0sdy5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gXy5hbGxvYygwKTtmb3IodmFyIE89Xy5hbGxvY1Vuc2FmZShG''@;'; put 'put ''Pj4+MCksej10aGlzLmhlYWQsTj0wO3o7KUIoei5kYXRhLE8sTiksTis9ei5kYXRhLmxlbmd0aCx6PXoubmV4dDtyZXR1cm4gT30sd30oKSxnJiZnLmluc3BlY3QmJmcuaW5zcGVjdC5jdXN0b20mJih1ZS5leHBvcnRzLnByb3RvdHlwZVtnLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciB3PWcuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrd30pfSw1OTk3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODIxMik7ZnVuY3Rpb24gQih3LFApe3cuZW1pdCgiZXJyb3IiLFApfXVlLmV4cG9ydHM9e2Rl''@;'; put 'put ''c3Ryb3k6ZnVuY3Rpb24gXyh3LFApe3ZhciBGPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oUD9QKHcpOncmJih0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhCLHRoaXMsdykpOkkubmV4dFRpY2soQix0aGlzLHcpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kod3x8bnVsbCxmdW5jdGlvbihOKXshUCYmTj9GLl93cml0YWJsZVN0YXRlP0YuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVk''@;'; put 'put ''fHwoRi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhCLEYsTikpOkkubmV4dFRpY2soQixGLE4pOlAmJlAoTil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIGcoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9''@;'; put 'put ''ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlLmVycm9yRW1pdHRlZD0hMSl9fX0sOTgxOToodWUsWCx5KT0+e3VlLmV4cG9ydHM9eSg3MTg3KS5FdmVudEVtaXR0ZXJ9LDE1NzI6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBC''@;'; put 'put ''KHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89''@;'; put 'put ''Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEg''@;'; put 'put ''bnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDM4NzI6KHVlLFgseSk9Pnso''@;'; put 'put ''WD11ZS5leHBvcnRzPXkoNDk2MCkpLlN0cmVhbT1YLFguUmVhZGFibGU9WCxYLldyaXRhYmxlPXkoMjAxMCksWC5EdXBsZXg9eSg0MzkwKSxYLlRyYW5zZm9ybT15KDM5MTIpLFguUGFzc1Rocm91Z2g9eSgxMjk0KX0sMjIyMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzNjQp''@;'; put 'put ''LkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpj''@;'; put 'put ''YXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIgbmU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQihKKXt2YXIgbmU9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4idXRmOCI7Zm9y''@;'; put 'put ''KHZhciBuZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7''@;'; put 'put ''Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKG5lKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2FzZSgpLG5lPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiBuZSYmKEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIG5lfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMuZW5kPVUsbmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixuZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9''@;'; put 'put ''Vyx0aGlzLmVuZD1ZLG5lPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShuZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6''@;'; put 'put ''Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFyIG5lPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gTyhKLG5lLGllKXtpZigxMjghPSgxOTImbmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZm''@;'; put 'put ''ZCI7aWYoSi5sYXN0TmVlZD4xJiZuZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJm5lWzFdKSlyZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MiYmbmUubGVuZ3RoPjImJjEyOCE9KDE5MiZuZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMs''@;'; put 'put ''Sik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RD''@;'; put 'put ''aGFyLG5lLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEosbmUpe2lmKChKLmxlbmd0aC1uZSklMj09MCl7dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLG5lKTtpZihpZSl7dmFyIGxlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lm''@;'; put 'put ''KGxlPj01NTI5NiYmbGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0''@;'; put 'put ''TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJpbmcoInV0ZjE2bGUiLG5lLEoubGVuZ3RoLTEpfWZ1bmN0aW9uIFUoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUr''@;'; put 'put ''dGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBXKEosbmUpe3ZhciBpZT0oSi5sZW5ndGgtbmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLG5lKToodGhpcy5sYXN0TmVlZD0zLWll''@;'; put 'put ''LHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixuZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9u''@;'; put 'put ''IFkoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5n''@;'; put 'put ''KX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1YLnM9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtpZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIG5lLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShuZT10aGlzLmZp''@;'; put 'put ''bGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP25lP25lK3RoaXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6bmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTChKKXt2YXIgbmU9''@;'; put 'put ''SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSsiXHVmZmZkIjpuZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBOKEosbmUpe3ZhciBpZT1mdW5jdGlvbiBGKEosbmUsaWUpe3ZhciBsZT1uZS5sZW5ndGgtMTtpZihsZTxpZSlyZXR1cm4gMDt2''@;'; put 'put ''YXIgbWU9UChuZVtsZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMSksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMiksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChuZVtsZV0pKT49MD8obWU+''@;'; put 'put ''MCYmKDI9PT1tZT9tZT0wOkoubGFzdE5lZWQ9bWUtMyksbWUpOjB9KHRoaXMsSixuZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0ZjgiLG5lKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgbGU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHko''@;'; put 'put ''dGhpcy5sYXN0Q2hhciwwLGxlKSxKLnRvU3RyaW5nKCJ1dGY4IixuZSxsZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAs''@;'; put 'put ''dGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSwzMzY0Oih1''@;'; put 'put ''ZSxYLHkpPT57dmFyIEk9eSg4NzY0KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhw''@;'; put 'put ''b3J0cz1JOihnKEksWCksWC5CdWZmZXI9QiksZyhfLEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9u''@;'; put 'put ''KHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5h''@;'; put 'put ''bGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw3Mjk1Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe2Zvcih2YXIgdz1NYXRoLm1pbihnLmxlbmd0aCxCLmxlbmd0''@;'; put 'put ''aCksUD1uZXcgSSh3KSxGPTA7Rjx3OysrRilQW0ZdPWdbRl1eQltGXTtyZXR1cm4gUH19LDg3NjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MTA4KTtjb25zdCBfPXkoOTc0MiksZz15KDY0NSksQj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7WC5CdWZmZXI9TyxYLlNsb3dCdWZmZXI9ZnVuY3Rpb24gbmUoJGUpe3JldHVybiskZSE9JGUmJigkZT0wKSxPLmFsbG9jKCskZSl9LFguSU5TUEVDVF9NQVhfQllURVM9NTA7Y29uc3Qg''@;'; put 'put ''dz0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIEYoJGUpe2lmKCRlPncpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyskZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7Y29uc3QgdHQ9bmV3IFVpbnQ4QXJyYXkoJGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''dHQsTy5wcm90b3R5cGUpLHR0fWZ1bmN0aW9uIE8oJGUsdHQsSGUpe2lmKCJudW1iZXIiPT10eXBlb2YgJGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5''@;'; put 'put ''cGUgbnVtYmVyJyk7cmV0dXJuIEsoJGUpfXJldHVybiB6KCRlLHR0LEhlKX1mdW5jdGlvbiB6KCRlLHR0LEhlKXtpZigic3RyaW5nIj09dHlwZW9mICRlKXJldHVybiBmdW5jdGlvbiBVKCRlLHR0KXtpZigoInN0cmluZyIhPXR5cGVvZiB0dHx8IiI9PT10dCkmJih0dD0idXRmOCIpLCFPLmlz''@;'; put 'put ''RW5jb2RpbmcodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdHQpO2NvbnN0IEhlPTB8aWUoJGUsdHQpO2xldCB1dD1GKEhlKTtjb25zdCBxdD11dC53cml0ZSgkZSx0dCk7cmV0dXJuIHF0IT09SGUmJih1dD11dC5zbGljZSgwLHF0KSksdXR9KCRlLHR0KTtp''@;'; put 'put ''ZihBcnJheUJ1ZmZlci5pc1ZpZXcoJGUpKXJldHVybiBmdW5jdGlvbiBZKCRlKXtpZih1bigkZSxVaW50OEFycmF5KSl7Y29uc3QgdHQ9bmV3IFVpbnQ4QXJyYXkoJGUpO3JldHVybiBxKHR0LmJ1ZmZlcix0dC5ieXRlT2Zmc2V0LHR0LmJ5dGVMZW5ndGgpfXJldHVybiBXKCRlKX0oJGUpO2lm''@;'; put 'put ''KG51bGw9PSRlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mICRlKTtpZih1bigkZSxB''@;'; put 'put ''cnJheUJ1ZmZlcil8fCRlJiZ1bigkZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYodW4oJGUsU2hhcmVkQXJyYXlCdWZmZXIpfHwkZSYmdW4oJGUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHEoJGUsdHQsSGUpO2lmKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgJGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7Y29uc3QgdXQ9JGUudmFsdWVPZiYmJGUudmFsdWVPZigpO2lmKG51bGwhPXV0JiZ1dCE9PSRlKXJl''@;'; put 'put ''dHVybiBPLmZyb20odXQsdHQsSGUpO2NvbnN0IHF0PWZ1bmN0aW9uIGVlKCRlKXtpZihPLmlzQnVmZmVyKCRlKSl7Y29uc3QgdHQ9MHxKKCRlLmxlbmd0aCksSGU9Rih0dCk7cmV0dXJuIDA9PT1IZS5sZW5ndGh8fCRlLmNvcHkoSGUsMCwwLHR0KSxIZX1yZXR1cm4gdm9pZCAwIT09JGUubGVu''@;'; put 'put ''Z3RoPyJudW1iZXIiIT10eXBlb2YgJGUubGVuZ3RofHx5dCgkZS5sZW5ndGgpP0YoMCk6VygkZSk6IkJ1ZmZlciI9PT0kZS50eXBlJiZBcnJheS5pc0FycmF5KCRlLmRhdGEpP1coJGUuZGF0YSk6dm9pZCAwfSgkZSk7aWYocXQpcmV0dXJuIHF0O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxs''@;'; put 'put ''IT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiAkZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBPLmZyb20oJGVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksdHQsSGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJl''@;'; put 'put ''IG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mICRlKX1mdW5jdGlvbiBOKCRlKXtpZigibnVtYmVyIiE9dHlwZW9mICRlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBh''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoJGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInKyRlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBLKCRlKXtyZXR1cm4gTigkZSksRigkZTwwPzA6MHxKKCRlKSl9ZnVuY3Rp''@;'; put 'put ''b24gVygkZSl7Y29uc3QgdHQ9JGUubGVuZ3RoPDA/MDowfEooJGUubGVuZ3RoKSxIZT1GKHR0KTtmb3IobGV0IHV0PTA7dXQ8dHQ7dXQrPTEpSGVbdXRdPTI1NSYkZVt1dF07cmV0dXJuIEhlfWZ1bmN0aW9uIHEoJGUsdHQsSGUpe2lmKHR0PDB8fCRlLmJ5dGVMZW5ndGg8dHQpdGhyb3cgbmV3''@;'; put 'put ''IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKCRlLmJ5dGVMZW5ndGg8dHQrKEhlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7bGV0IHV0O3JldHVybiB1dD12b2lkIDA9''@;'; put 'put ''PT10dCYmdm9pZCAwPT09SGU/bmV3IFVpbnQ4QXJyYXkoJGUpOnZvaWQgMD09PUhlP25ldyBVaW50OEFycmF5KCRlLHR0KTpuZXcgVWludDhBcnJheSgkZSx0dCxIZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKHV0LE8ucHJvdG90eXBlKSx1dH1mdW5jdGlvbiBKKCRlKXtpZigkZT49dyl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrdy50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfCRlfWZ1bmN0aW9uIGllKCRlLHR0KXtpZihPLmlzQnVmZmVyKCRlKSlyZXR1cm4gJGUubGVuZ3Ro''@;'; put 'put ''O2lmKEFycmF5QnVmZmVyLmlzVmlldygkZSl8fHVuKCRlLEFycmF5QnVmZmVyKSlyZXR1cm4gJGUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mICRlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVm''@;'; put 'put ''ZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiAkZSk7Y29uc3QgSGU9JGUubGVuZ3RoLHV0PWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIXV0JiYwPT09SGUpcmV0dXJuIDA7bGV0IHF0PSExO2Zvcig7Oylzd2l0Y2godHQpe2Nhc2Ui''@;'; put 'put ''YXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEhlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGtlKCRlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKkhlO2Nhc2UiaGV4IjpyZXR1''@;'; put 'put ''cm4gSGU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbnQoJGUpLmxlbmd0aDtkZWZhdWx0OmlmKHF0KXJldHVybiB1dD8tMTprZSgkZSkubGVuZ3RoO3R0PSgiIit0dCkudG9Mb3dlckNhc2UoKSxxdD0hMH19ZnVuY3Rpb24gbGUoJGUsdHQsSGUpe2xldCB1dD0hMTtpZigodm9pZCAwPT09dHR8''@;'; put 'put ''fHR0PDApJiYodHQ9MCksdHQ+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09SGV8fEhlPnRoaXMubGVuZ3RoKSYmKEhlPXRoaXMubGVuZ3RoKSxIZTw9MCl8fChIZT4+Pj0wKTw9KHR0Pj4+PTApKXJldHVybiIiO2ZvcigkZXx8KCRlPSJ1dGY4Iik7Oylzd2l0Y2goJGUpe2Nhc2UiaGV4IjpyZXR1''@;'; put 'put ''cm4gbSh0aGlzLHR0LEhlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBDKHRoaXMsdHQsSGUpO2Nhc2UiYXNjaWkiOnJldHVybiBqKHRoaXMsdHQsSGUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEUodGhpcyx0dCxIZSk7Y2FzZSJiYXNlNjQiOnJldHVybiB4KHRo''@;'; put 'put ''aXMsdHQsSGUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gQSh0aGlzLHR0LEhlKTtkZWZhdWx0OmlmKHV0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrJGUpOyRlPSgkZSsiIikudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSx1dD0hMH19ZnVuY3Rpb24gbWUoJGUsdHQsSGUpe2NvbnN0IHV0PSRlW3R0XTskZVt0dF09JGVbSGVdLCRlW0hlXT11dH1mdW5jdGlvbiBfZSgkZSx0dCxIZSx1dCxxdCl7aWYoMD09PSRlLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIEhlPyh1dD1IZSxIZT0wKTpIZT4y''@;'; put 'put ''MTQ3NDgzNjQ3P0hlPTIxNDc0ODM2NDc6SGU8LTIxNDc0ODM2NDgmJihIZT0tMjE0NzQ4MzY0OCkseXQoSGU9K0hlKSYmKEhlPXF0PzA6JGUubGVuZ3RoLTEpLEhlPDAmJihIZT0kZS5sZW5ndGgrSGUpLEhlPj0kZS5sZW5ndGgpe2lmKHF0KXJldHVybi0xO0hlPSRlLmxlbmd0aC0xfWVsc2Ug''@;'; put 'put ''aWYoSGU8MCl7aWYoIXF0KXJldHVybi0xO0hlPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0dCYmKHR0PU8uZnJvbSh0dCx1dCkpLE8uaXNCdWZmZXIodHQpKXJldHVybiAwPT09dHQubGVuZ3RoPy0xOlRlKCRlLHR0LEhlLHV0LHF0KTtpZigibnVtYmVyIj09dHlwZW9mIHR0KXJldHVybiB0dCY9''@;'; put 'put ''MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3F0P1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCgkZSx0dCxIZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbCgkZSx0dCxIZSk6VGUoJGUsW3R0XSxIZSx1dCxx''@;'; put 'put ''dCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gVGUoJGUsdHQsSGUsdXQscXQpe2xldCBzbixSdD0xLFB0PSRlLmxlbmd0aCxzaT10dC5sZW5ndGg7aWYodm9pZCAwIT09dXQmJigidWNzMiI9PT0odXQ9U3RyaW5n''@;'; put 'put ''KHV0KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXV0fHwidXRmMTZsZSI9PT11dHx8InV0Zi0xNmxlIj09PXV0KSl7aWYoJGUubGVuZ3RoPDJ8fHR0Lmxlbmd0aDwyKXJldHVybi0xO1J0PTIsUHQvPTIsc2kvPTIsSGUvPTJ9ZnVuY3Rpb24gUXQoUmksaG4pe3JldHVybiAxPT09UnQ/Umlb''@;'; put 'put ''aG5dOlJpLnJlYWRVSW50MTZCRShobipSdCl9aWYocXQpe2xldCBSaT0tMTtmb3Ioc249SGU7c248UHQ7c24rKylpZihRdCgkZSxzbik9PT1RdCh0dCwtMT09PVJpPzA6c24tUmkpKXtpZigtMT09PVJpJiYoUmk9c24pLHNuLVJpKzE9PT1zaSlyZXR1cm4gUmkqUnR9ZWxzZS0xIT09UmkmJihz''@;'; put 'put ''bi09c24tUmkpLFJpPS0xfWVsc2UgZm9yKEhlK3NpPlB0JiYoSGU9UHQtc2kpLHNuPUhlO3NuPj0wO3NuLS0pe2xldCBSaT0hMDtmb3IobGV0IGhuPTA7aG48c2k7aG4rKylpZihRdCgkZSxzbitobikhPT1RdCh0dCxobikpe1JpPSExO2JyZWFrfWlmKFJpKXJldHVybiBzbn1yZXR1cm4tMX1m''@;'; put 'put ''dW5jdGlvbiBTZSgkZSx0dCxIZSx1dCl7SGU9TnVtYmVyKEhlKXx8MDtjb25zdCBxdD0kZS5sZW5ndGgtSGU7dXQ/KHV0PU51bWJlcih1dCkpPnF0JiYodXQ9cXQpOnV0PXF0O2NvbnN0IFJ0PXR0Lmxlbmd0aDtsZXQgUHQ7Zm9yKHV0PlJ0LzImJih1dD1SdC8yKSxQdD0wO1B0PHV0OysrUHQp''@;'; put 'put ''e2NvbnN0IHNpPXBhcnNlSW50KHR0LnN1YnN0cigyKlB0LDIpLDE2KTtpZih5dChzaSkpcmV0dXJuIFB0OyRlW0hlK1B0XT1zaX1yZXR1cm4gUHR9ZnVuY3Rpb24gemUoJGUsdHQsSGUsdXQpe3JldHVybiBRZShrZSh0dCwkZS5sZW5ndGgtSGUpLCRlLEhlLHV0KX1mdW5jdGlvbiBWKCRlLHR0''@;'; put 'put ''LEhlLHV0KXtyZXR1cm4gUWUoZnVuY3Rpb24gQWUoJGUpe2NvbnN0IHR0PVtdO2ZvcihsZXQgSGU9MDtIZTwkZS5sZW5ndGg7KytIZSl0dC5wdXNoKDI1NSYkZS5jaGFyQ29kZUF0KEhlKSk7cmV0dXJuIHR0fSh0dCksJGUsSGUsdXQpfWZ1bmN0aW9uIHAoJGUsdHQsSGUsdXQpe3JldHVybiBR''@;'; put 'put ''ZShudCh0dCksJGUsSGUsdXQpfWZ1bmN0aW9uIGIoJGUsdHQsSGUsdXQpe3JldHVybiBRZShmdW5jdGlvbiBfdCgkZSx0dCl7bGV0IEhlLHV0LHF0O2NvbnN0IFJ0PVtdO2ZvcihsZXQgUHQ9MDtQdDwkZS5sZW5ndGgmJiEoKHR0LT0yKTwwKTsrK1B0KUhlPSRlLmNoYXJDb2RlQXQoUHQpLHV0''@;'; put 'put ''PUhlPj44LHF0PUhlJTI1NixSdC5wdXNoKHF0KSxSdC5wdXNoKHV0KTtyZXR1cm4gUnR9KHR0LCRlLmxlbmd0aC1IZSksJGUsSGUsdXQpfWZ1bmN0aW9uIHgoJGUsdHQsSGUpe3JldHVybiBfLmZyb21CeXRlQXJyYXkoMD09PXR0JiZIZT09PSRlLmxlbmd0aD8kZTokZS5zbGljZSh0dCxIZSkp''@;'; put 'put ''fWZ1bmN0aW9uIEMoJGUsdHQsSGUpe0hlPU1hdGgubWluKCRlLmxlbmd0aCxIZSk7Y29uc3QgdXQ9W107bGV0IHF0PXR0O2Zvcig7cXQ8SGU7KXtjb25zdCBSdD0kZVtxdF07bGV0IFB0PW51bGwsc2k9UnQ+MjM5PzQ6UnQ+MjIzPzM6UnQ+MTkxPzI6MTtpZihxdCtzaTw9SGUpe2xldCBRdCxz''@;'; put 'put ''bixSaSxobjtzd2l0Y2goc2kpe2Nhc2UgMTpSdDwxMjgmJihQdD1SdCk7YnJlYWs7Y2FzZSAyOlF0PSRlW3F0KzFdLDEyOD09KDE5MiZRdCkmJihobj0oMzEmUnQpPDw2fDYzJlF0LGhuPjEyNyYmKFB0PWhuKSk7YnJlYWs7Y2FzZSAzOlF0PSRlW3F0KzFdLHNuPSRlW3F0KzJdLDEyOD09KDE5''@;'; put 'put ''MiZRdCkmJjEyOD09KDE5MiZzbikmJihobj0oMTUmUnQpPDwxMnwoNjMmUXQpPDw2fDYzJnNuLGhuPjIwNDcmJihobjw1NTI5Nnx8aG4+NTczNDMpJiYoUHQ9aG4pKTticmVhaztjYXNlIDQ6UXQ9JGVbcXQrMV0sc249JGVbcXQrMl0sUmk9JGVbcXQrM10sMTI4PT0oMTkyJlF0KSYmMTI4PT0o''@;'; put 'put ''MTkyJnNuKSYmMTI4PT0oMTkyJlJpKSYmKGhuPSgxNSZSdCk8PDE4fCg2MyZRdCk8PDEyfCg2MyZzbik8PDZ8NjMmUmksaG4+NjU1MzUmJmhuPDExMTQxMTImJihQdD1obikpfX1udWxsPT09UHQ/KFB0PTY1NTMzLHNpPTEpOlB0PjY1NTM1JiYoUHQtPTY1NTM2LHV0LnB1c2goUHQ+Pj4xMCYx''@;'; put 'put ''MDIzfDU1Mjk2KSxQdD01NjMyMHwxMDIzJlB0KSx1dC5wdXNoKFB0KSxxdCs9c2l9cmV0dXJuIGZ1bmN0aW9uIEgoJGUpe2NvbnN0IHR0PSRlLmxlbmd0aDtpZih0dDw9VClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsJGUpO2xldCBIZT0iIix1dD0wO2Zvcig7dXQ8''@;'; put 'put ''dHQ7KUhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywkZS5zbGljZSh1dCx1dCs9VCkpO3JldHVybiBIZX0odXQpfVgua01heExlbmd0aD13LCEoTy5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIFAoKXt0cnl7Y29uc3QgJGU9bmV3IFVpbnQ4QXJyYXkoMSksdHQ9e2Zv''@;'; put 'put ''bzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YodHQsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZigkZSx0dCksNDI9PT0kZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgSTwidSImJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBJLmVycm9yJiZJLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3Vw''@;'; put 'put ''cG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJvZmZzZXQi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE8uaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxPLnBvb2xTaXplPTgxOTIsTy5mcm9tPWZ1bmN0aW9uKCRlLHR0LEhlKXtyZXR1cm4geigkZSx0dCxIZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihPLnBy''@;'; put 'put ''b3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sVWludDhBcnJheSksTy5hbGxvYz1mdW5jdGlvbigkZSx0dCxIZSl7cmV0dXJuIGZ1bmN0aW9uIEwoJGUsdHQsSGUpe3JldHVybiBOKCRlKSwkZTw9MD9GKCRlKTp2b2lkIDAhPT10dD8ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEhlP0YoJGUpLmZpbGwodHQsSGUpOkYoJGUpLmZpbGwodHQpOkYoJGUpfSgkZSx0dCxIZSl9LE8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24oJGUpe3JldHVybiBLKCRlKX0sTy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oJGUpe3JldHVybiBLKCRlKX0sTy5pc0J1ZmZlcj1mdW5j''@;'; put 'put ''dGlvbih0dCl7cmV0dXJuIG51bGwhPXR0JiYhMD09PXR0Ll9pc0J1ZmZlciYmdHQhPT1PLnByb3RvdHlwZX0sTy5jb21wYXJlPWZ1bmN0aW9uKHR0LEhlKXtpZih1bih0dCxVaW50OEFycmF5KSYmKHR0PU8uZnJvbSh0dCx0dC5vZmZzZXQsdHQuYnl0ZUxlbmd0aCkpLHVuKEhlLFVpbnQ4QXJy''@;'; put 'put ''YXkpJiYoSGU9Ty5mcm9tKEhlLEhlLm9mZnNldCxIZS5ieXRlTGVuZ3RoKSksIU8uaXNCdWZmZXIodHQpfHwhTy5pc0J1ZmZlcihIZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFy''@;'; put 'put ''cmF5Jyk7aWYodHQ9PT1IZSlyZXR1cm4gMDtsZXQgdXQ9dHQubGVuZ3RoLHF0PUhlLmxlbmd0aDtmb3IobGV0IFJ0PTAsUHQ9TWF0aC5taW4odXQscXQpO1J0PFB0OysrUnQpaWYodHRbUnRdIT09SGVbUnRdKXt1dD10dFtSdF0scXQ9SGVbUnRdO2JyZWFrfXJldHVybiB1dDxxdD8tMTpxdDx1''@;'; put 'put ''dD8xOjB9LE8uaXNFbmNvZGluZz1mdW5jdGlvbih0dCl7c3dpdGNoKFN0cmluZyh0dCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNl''@;'; put 'put ''InVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxPLmNvbmNhdD1mdW5jdGlvbih0dCxIZSl7aWYoIUFycmF5LmlzQXJyYXkodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5''@;'; put 'put ''IG9mIEJ1ZmZlcnMnKTtpZigwPT09dHQubGVuZ3RoKXJldHVybiBPLmFsbG9jKDApO2xldCB1dDtpZih2b2lkIDA9PT1IZSlmb3IoSGU9MCx1dD0wO3V0PHR0Lmxlbmd0aDsrK3V0KUhlKz10dFt1dF0ubGVuZ3RoO2NvbnN0IHF0PU8uYWxsb2NVbnNhZmUoSGUpO2xldCBSdD0wO2Zvcih1dD0w''@;'; put 'put ''O3V0PHR0Lmxlbmd0aDsrK3V0KXtsZXQgUHQ9dHRbdXRdO2lmKHVuKFB0LFVpbnQ4QXJyYXkpKVJ0K1B0Lmxlbmd0aD5xdC5sZW5ndGg/KE8uaXNCdWZmZXIoUHQpfHwoUHQ9Ty5mcm9tKFB0KSksUHQuY29weShxdCxSdCkpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHF0LFB0LFJ0''@;'; put 'put ''KTtlbHNle2lmKCFPLmlzQnVmZmVyKFB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7UHQuY29weShxdCxSdCl9UnQrPVB0Lmxlbmd0aH1yZXR1cm4gcXR9LE8uYnl0ZUxlbmd0aD1pZSxPLnByb3RvdHlwZS5faXNC''@;'; put 'put ''dWZmZXI9ITAsTy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7Y29uc3QgdHQ9dGhpcy5sZW5ndGg7aWYodHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IobGV0IEhlPTA7SGU8dHQ7SGUrPTIpbWUo''@;'; put 'put ''dGhpcyxIZSxIZSsxKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7Y29uc3QgdHQ9dGhpcy5sZW5ndGg7aWYodHQlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IobGV0IEhl''@;'; put 'put ''PTA7SGU8dHQ7SGUrPTQpbWUodGhpcyxIZSxIZSszKSxtZSh0aGlzLEhlKzEsSGUrMik7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3Qg''@;'; put 'put ''YmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKGxldCBIZT0wO0hlPHR0O0hlKz04KW1lKHRoaXMsSGUsSGUrNyksbWUodGhpcyxIZSsxLEhlKzYpLG1lKHRoaXMsSGUrMixIZSs1KSxtZSh0aGlzLEhlKzMsSGUrNCk7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5n''@;'; put 'put ''PU8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgdHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9DKHRoaXMsMCx0dCk6bGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxPLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odHQpe2lm''@;'; put 'put ''KCFPLmlzQnVmZmVyKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT10dHx8MD09PU8uY29tcGFyZSh0aGlzLHR0KX0sTy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe2xldCB0dD0iIjtjb25zdCBIZT1YLklOU1BF''@;'; put 'put ''Q1RfTUFYX0JZVEVTO3JldHVybiB0dD10aGlzLnRvU3RyaW5nKCJoZXgiLDAsSGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+SGUmJih0dCs9IiAuLi4gIiksIjxCdWZmZXIgIit0dCsiPiJ9LEImJihPLnByb3RvdHlwZVtCXT1PLnByb3RvdHlwZS5pbnNw''@;'; put 'put ''ZWN0KSxPLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHR0LEhlLHV0LHF0LFJ0KXtpZih1bih0dCxVaW50OEFycmF5KSYmKHR0PU8uZnJvbSh0dCx0dC5vZmZzZXQsdHQuYnl0ZUxlbmd0aCkpLCFPLmlzQnVmZmVyKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJn''@;'; put 'put ''dW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0dCk7aWYodm9pZCAwPT09SGUmJihIZT0wKSx2b2lkIDA9PT11dCYmKHV0PXR0P3R0Lmxlbmd0aDowKSx2b2lkIDA9PT1xdCYmKHF0PTApLHZvaWQgMD09PVJ0JiYo''@;'; put 'put ''UnQ9dGhpcy5sZW5ndGgpLEhlPDB8fHV0PnR0Lmxlbmd0aHx8cXQ8MHx8UnQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHF0Pj1SdCYmSGU+PXV0KXJldHVybiAwO2lmKHF0Pj1SdClyZXR1cm4tMTtpZihIZT49dXQpcmV0dXJuIDE7''@;'; put 'put ''aWYodGhpcz09PXR0KXJldHVybiAwO2xldCBQdD0oUnQ+Pj49MCktKHF0Pj4+PTApLHNpPSh1dD4+Pj0wKS0oSGU+Pj49MCk7Y29uc3QgUXQ9TWF0aC5taW4oUHQsc2kpLHNuPXRoaXMuc2xpY2UocXQsUnQpLFJpPXR0LnNsaWNlKEhlLHV0KTtmb3IobGV0IGhuPTA7aG48UXQ7KytobilpZihz''@;'; put 'put ''bltobl0hPT1SaVtobl0pe1B0PXNuW2huXSxzaT1SaVtobl07YnJlYWt9cmV0dXJuIFB0PHNpPy0xOnNpPFB0PzE6MH0sTy5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHR0LEhlLHV0KX0sTy5wcm90b3R5cGUuaW5kZXhPZj1m''@;'; put 'put ''dW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIF9lKHRoaXMsdHQsSGUsdXQsITApfSxPLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIF9lKHRoaXMsdHQsSGUsdXQsITEpfSxPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7aWYodm9p''@;'; put 'put ''ZCAwPT09SGUpcXQ9InV0ZjgiLHV0PXRoaXMubGVuZ3RoLEhlPTA7ZWxzZSBpZih2b2lkIDA9PT11dCYmInN0cmluZyI9PXR5cGVvZiBIZSlxdD1IZSx1dD10aGlzLmxlbmd0aCxIZT0wO2Vsc2V7aWYoIWlzRmluaXRlKEhlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcs''@;'; put 'put ''IGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7SGU+Pj49MCxpc0Zpbml0ZSh1dCk/KHV0Pj4+PTAsdm9pZCAwPT09cXQmJihxdD0idXRmOCIpKToocXQ9dXQsdXQ9dm9pZCAwKX1jb25zdCBSdD10aGlzLmxlbmd0aC1IZTtpZigodm9pZCAwPT09''@;'; put 'put ''dXR8fHV0PlJ0KSYmKHV0PVJ0KSx0dC5sZW5ndGg+MCYmKHV0PDB8fEhlPDApfHxIZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtxdHx8KHF0PSJ1dGY4Iik7bGV0IFB0PSExO2Zvcig7Oylzd2l0Y2go''@;'; put 'put ''cXQpe2Nhc2UiaGV4IjpyZXR1cm4gU2UodGhpcyx0dCxIZSx1dCk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gemUodGhpcyx0dCxIZSx1dCk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gVih0aGlzLHR0LEhlLHV0KTtjYXNlImJhc2U2NCI6cmV0''@;'; put 'put ''dXJuIHAodGhpcyx0dCxIZSx1dCk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBiKHRoaXMsdHQsSGUsdXQpO2RlZmF1bHQ6aWYoUHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitxdCk7cXQ9KCIiK3F0''@;'; put 'put ''KS50b0xvd2VyQ2FzZSgpLFB0PSEwfX0sTy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtjb25zdCBUPTQwOTY7ZnVuY3Rpb24gaigkZSx0dCxIZSl7bGV0''@;'; put 'put ''IHV0PSIiO0hlPU1hdGgubWluKCRlLmxlbmd0aCxIZSk7Zm9yKGxldCBxdD10dDtxdDxIZTsrK3F0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyYkZVtxdF0pO3JldHVybiB1dH1mdW5jdGlvbiBFKCRlLHR0LEhlKXtsZXQgdXQ9IiI7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtmb3Io''@;'; put 'put ''bGV0IHF0PXR0O3F0PEhlOysrcXQpdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoJGVbcXRdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gbSgkZSx0dCxIZSl7Y29uc3QgdXQ9JGUubGVuZ3RoOyghdHR8fHR0PDApJiYodHQ9MCksKCFIZXx8SGU8MHx8SGU+dXQpJiYoSGU9dXQpO2xldCBxdD0iIjtmb3Io''@;'; put 'put ''bGV0IFJ0PXR0O1J0PEhlOysrUnQpcXQrPU10WyRlW1J0XV07cmV0dXJuIHF0fWZ1bmN0aW9uIEEoJGUsdHQsSGUpe2NvbnN0IHV0PSRlLnNsaWNlKHR0LEhlKTtsZXQgcXQ9IiI7Zm9yKGxldCBSdD0wO1J0PHV0Lmxlbmd0aC0xO1J0Kz0yKXF0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHV0W1J0''@;'; put 'put ''XSsyNTYqdXRbUnQrMV0pO3JldHVybiBxdH1mdW5jdGlvbiBhZSgkZSx0dCxIZSl7aWYoJGUlMSE9MHx8JGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoJGUrdHQ+SGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25k''@;'; put 'put ''IGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiB0ZSgkZSx0dCxIZSx1dCxxdCxSdCl7aWYoIU8uaXNCdWZmZXIoJGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0dD5xdHx8dHQ8UnQpdGhyb3cgbmV3IFJhbmdl''@;'; put 'put ''RXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKEhlK3V0PiRlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gc2UoJGUsdHQsSGUsdXQscXQpe0RlKHR0LHV0LHF0LCRlLEhlLDcpO2xldCBSdD1OdW1i''@;'; put 'put ''ZXIodHQmQmlnSW50KDQyOTQ5NjcyOTUpKTskZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0LFJ0Pj49OCwkZVtIZSsrXT1SdDtsZXQgUHQ9TnVtYmVyKHR0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuICRlW0hlKytdPVB0LFB0''@;'; put 'put ''Pj49OCwkZVtIZSsrXT1QdCxQdD4+PTgsJGVbSGUrK109UHQsUHQ+Pj04LCRlW0hlKytdPVB0LEhlfWZ1bmN0aW9uIHdlKCRlLHR0LEhlLHV0LHF0KXtEZSh0dCx1dCxxdCwkZSxIZSw3KTtsZXQgUnQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7JGVbSGUrN109UnQsUnQ+Pj04LCRl''@;'; put 'put ''W0hlKzZdPVJ0LFJ0Pj49OCwkZVtIZSs1XT1SdCxSdD4+PTgsJGVbSGUrNF09UnQ7bGV0IFB0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiAkZVtIZSszXT1QdCxQdD4+PTgsJGVbSGUrMl09UHQsUHQ+Pj04LCRlW0hlKzFdPVB0LFB0Pj49OCwkZVtI''@;'; put 'put ''ZV09UHQsSGUrOH1mdW5jdGlvbiBVZSgkZSx0dCxIZSx1dCxxdCxSdCl7aWYoSGUrdXQ+JGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihIZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBK''@;'; put 'put ''ZSgkZSx0dCxIZSx1dCxxdCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHF0fHxVZSgkZSwwLEhlLDQpLGcud3JpdGUoJGUsdHQsSGUsdXQsMjMsNCksSGUrNH1mdW5jdGlvbiBvdCgkZSx0dCxIZSx1dCxxdCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHF0fHxVZSgkZSwwLEhlLDgpLGcud3JpdGUo''@;'; put 'put ''JGUsdHQsSGUsdXQsNTIsOCksSGUrOH1PLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0dCxIZSl7Y29uc3QgdXQ9dGhpcy5sZW5ndGg7KHR0PX5+dHQpPDA/KHR0Kz11dCk8MCYmKHR0PTApOnR0PnV0JiYodHQ9dXQpLChIZT12b2lkIDA9PT1IZT91dDp+fkhlKTwwPyhIZSs9dXQpPDAmJihI''@;'; put 'put ''ZT0wKTpIZT51dCYmKEhlPXV0KSxIZTx0dCYmKEhlPXR0KTtjb25zdCBxdD10aGlzLnN1YmFycmF5KHR0LEhlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHF0LE8ucHJvdG90eXBlKSxxdH0sTy5wcm90b3R5cGUucmVhZFVpbnRMRT1PLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0''@;'; put 'put ''aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fGFlKHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9dGhpc1t0dF0sUnQ9MSxQdD0wO2Zvcig7KytQdDxIZSYmKFJ0Kj0yNTYpOylxdCs9dGhpc1t0dCtQdF0qUnQ7cmV0dXJuIHF0fSxPLnByb3RvdHlwZS5yZWFkVWludEJFPU8ucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3R0Pj4+PTAsSGU+Pj49MCx1dHx8YWUodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0Ky0tSGVdLFJ0PTE7Zm9yKDtIZT4wJiYoUnQqPTI1Nik7KXF0Kz10aGlzW3R0Ky0tSGVdKlJ0O3JldHVybiBxdH0sTy5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVpbnQ4PU8ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfSxPLnByb3RvdHlwZS5yZWFkVWludDE2TEU9Ty5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHR0''@;'; put 'put ''LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsMix0aGlzLmxlbmd0aCksdGhpc1t0dF18dGhpc1t0dCsxXTw8OH0sTy5wcm90b3R5cGUucmVhZFVpbnQxNkJFPU8ucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDIsdGhp''@;'; put 'put ''cy5sZW5ndGgpLHRoaXNbdHRdPDw4fHRoaXNbdHQrMV19LE8ucHJvdG90eXBlLnJlYWRVaW50MzJMRT1PLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0dF18dGhpc1t0dCsxXTw8OHx0''@;'; put 'put ''aGlzW3R0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0dCszXX0sTy5wcm90b3R5cGUucmVhZFVpbnQzMkJFPU8ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdHRdKyh0aGlz''@;'; put 'put ''W3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQrM10pfSxPLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUhlfHx2b2lkIDA9PT11dCkmJlJl''@;'; put 'put ''KHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PUhlKzI1Nip0aGlzWysrdHRdKzY1NTM2KnRoaXNbKyt0dF0rdGhpc1srK3R0XSoyKioyNCxSdD10aGlzWysrdHRdKzI1Nip0aGlzWysrdHRdKzY1NTM2KnRoaXNbKyt0dF0rdXQqMioqMjQ7cmV0dXJuIEJpZ0ludChxdCkrKEJpZ0ludChSdCk8''@;'; put 'put ''PEJpZ0ludCgzMikpfSksTy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KTtjb25z''@;'; put 'put ''dCBxdD1IZSoyKioyNCs2NTUzNip0aGlzWysrdHRdKzI1Nip0aGlzWysrdHRdK3RoaXNbKyt0dF0sUnQ9dGhpc1srK3R0XSoyKioyNCs2NTUzNip0aGlzWysrdHRdKzI1Nip0aGlzWysrdHRdK3V0O3JldHVybihCaWdJbnQocXQpPDxCaWdJbnQoMzIpKStCaWdJbnQoUnQpfSksTy5wcm90b3R5''@;'; put 'put ''cGUucmVhZEludExFPWZ1bmN0aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fGFlKHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9dGhpc1t0dF0sUnQ9MSxQdD0wO2Zvcig7KytQdDxIZSYmKFJ0Kj0yNTYpOylxdCs9dGhpc1t0dCtQdF0qUnQ7cmV0dXJuIFJ0Kj0xMjgscXQ+PVJ0''@;'; put 'put ''JiYocXQtPU1hdGgucG93KDIsOCpIZSkpLHF0fSxPLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3R0Pj4+PTAsSGU+Pj49MCx1dHx8YWUodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD1IZSxSdD0xLFB0PXRoaXNbdHQrLS1xdF07Zm9yKDtxdD4wJiYoUnQqPTI1Nik7''@;'; put 'put ''KVB0Kz10aGlzW3R0Ky0tcXRdKlJ0O3JldHVybiBSdCo9MTI4LFB0Pj1SdCYmKFB0LT1NYXRoLnBvdygyLDgqSGUpKSxQdH0sTy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0dF0/LTEq''@;'; put 'put ''KDI1NS10aGlzW3R0XSsxKTp0aGlzW3R0XX0sTy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odHQsSGUpe3R0Pj4+PTAsSGV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpO2NvbnN0IHV0PXRoaXNbdHRdfHRoaXNbdHQrMV08PDg7cmV0dXJuIDMyNzY4JnV0PzQyOTQ5MDE3NjB8dXQ6dXR9''@;'; put 'put ''LE8ucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHR0LEhlKXt0dD4+Pj0wLEhlfHxhZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCB1dD10aGlzW3R0KzFdfHRoaXNbdHRdPDw4O3JldHVybiAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0fSxPLnByb3RvdHlwZS5yZWFkSW50MzJMRT1m''@;'; put 'put ''dW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTZ8dGhpc1t0dCszXTw8MjR9LE8ucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxI''@;'; put 'put ''ZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0dF08PDI0fHRoaXNbdHQrMV08PDE2fHRoaXNbdHQrMl08PDh8dGhpc1t0dCszXX0sTy5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRo''@;'; put 'put ''aXNbdHQrN107cmV0dXJuKHZvaWQgMD09PUhlfHx2b2lkIDA9PT11dCkmJlJlKHR0LHRoaXMubGVuZ3RoLTgpLChCaWdJbnQodGhpc1t0dCs0XSsyNTYqdGhpc1t0dCs1XSs2NTUzNip0aGlzW3R0KzZdKyh1dDw8MjQpKTw8QmlnSW50KDMyKSkrQmlnSW50KEhlKzI1Nip0aGlzWysrdHRdKzY1''@;'; put 'put ''NTM2KnRoaXNbKyt0dF0rMTY3NzcyMTYqdGhpc1srK3R0XSl9KSxPLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmUmUo''@;'; put 'put ''dHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9KEhlPDwyNCkrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdO3JldHVybihCaWdJbnQocXQpPDxCaWdJbnQoMzIpKStCaWdJbnQoMTY3NzcyMTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzI1Nip0aGlzWysr''@;'; put 'put ''dHRdK3V0KX0pLE8ucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITAsMjMsNCl9LE8ucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+''@;'; put 'put ''Pj49MCxIZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITEsMjMsNCl9LE8ucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fGFlKHR0LDgsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCEwLDUyLDgpfSxPLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMSw1Miw4KX0sTy5wcm90b3R5cGUud3JpdGVVaW50TEU9Ty5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odHQsSGUs''@;'; put 'put ''dXQscXQpe3R0PSt0dCxIZT4+Pj0wLHV0Pj4+PTAscXR8fHRlKHRoaXMsdHQsSGUsdXQsTWF0aC5wb3coMiw4KnV0KS0xLDApO2xldCBSdD0xLFB0PTA7Zm9yKHRoaXNbSGVdPTI1NSZ0dDsrK1B0PHV0JiYoUnQqPTI1Nik7KXRoaXNbSGUrUHRdPXR0L1J0JjI1NTtyZXR1cm4gSGUrdXR9LE8u''@;'; put 'put ''cHJvdG90eXBlLndyaXRlVWludEJFPU8ucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXt0dD0rdHQsSGU+Pj49MCx1dD4+Pj0wLHF0fHx0ZSh0aGlzLHR0LEhlLHV0LE1hdGgucG93KDIsOCp1dCktMSwwKTtsZXQgUnQ9dXQtMSxQdD0xO2Zvcih0aGlzW0hlK1J0''@;'; put 'put ''XT0yNTUmdHQ7LS1SdD49MCYmKFB0Kj0yNTYpOyl0aGlzW0hlK1J0XT10dC9QdCYyNTU7cmV0dXJuIEhlK3V0fSxPLnByb3RvdHlwZS53cml0ZVVpbnQ4PU8ucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0''@;'; put 'put ''dCxIZSwxLDI1NSwwKSx0aGlzW0hlXT0yNTUmdHQsSGUrMX0sTy5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1PLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMiw2NTUzNSwwKSx0aGlzW0hl''@;'; put 'put ''XT0yNTUmdHQsdGhpc1tIZSsxXT10dD4+PjgsSGUrMn0sTy5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1PLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMiw2NTUzNSwwKSx0aGlzW0hlXT10''@;'; put 'put ''dD4+PjgsdGhpc1tIZSsxXT0yNTUmdHQsSGUrMn0sTy5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1PLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbSGUr''@;'; put 'put ''M109dHQ+Pj4yNCx0aGlzW0hlKzJdPXR0Pj4+MTYsdGhpc1tIZSsxXT10dD4+PjgsdGhpc1tIZV09MjU1JnR0LEhlKzR9LE8ucHJvdG90eXBlLndyaXRlVWludDMyQkU9Ty5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0''@;'; put 'put ''fHx0ZSh0aGlzLHR0LEhlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0hlXT10dD4+PjI0LHRoaXNbSGUrMV09dHQ+Pj4xNix0aGlzW0hlKzJdPXR0Pj4+OCx0aGlzW0hlKzNdPTI1NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVy''@;'; put 'put ''biBzZSh0aGlzLHR0LEhlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLE8ucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHdlKHRoaXMsdHQsSGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''IikpfSksTy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7aWYodHQ9K3R0LEhlPj4+PTAsIXF0KXtjb25zdCBRdD1NYXRoLnBvdygyLDgqdXQtMSk7dGUodGhpcyx0dCxIZSx1dCxRdC0xLC1RdCl9bGV0IFJ0PTAsUHQ9MSxzaT0wO2Zvcih0aGlzW0hlXT0yNTUm''@;'; put 'put ''dHQ7KytSdDx1dCYmKFB0Kj0yNTYpOyl0dDwwJiYwPT09c2kmJjAhPT10aGlzW0hlK1J0LTFdJiYoc2k9MSksdGhpc1tIZStSdF09KHR0L1B0fDApLXNpJjI1NTtyZXR1cm4gSGUrdXR9LE8ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHR0PSt0dCxIZT4+''@;'; put 'put ''Pj0wLCFxdCl7Y29uc3QgUXQ9TWF0aC5wb3coMiw4KnV0LTEpO3RlKHRoaXMsdHQsSGUsdXQsUXQtMSwtUXQpfWxldCBSdD11dC0xLFB0PTEsc2k9MDtmb3IodGhpc1tIZStSdF09MjU1JnR0Oy0tUnQ+PTAmJihQdCo9MjU2KTspdHQ8MCYmMD09PXNpJiYwIT09dGhpc1tIZStSdCsxXSYmKHNp''@;'; put 'put ''PTEpLHRoaXNbSGUrUnRdPSh0dC9QdHwwKS1zaSYyNTU7cmV0dXJuIEhlK3V0fSxPLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSwxLDEyNywtMTI4KSx0dDwwJiYodHQ9MjU1K3R0KzEpLHRoaXNb''@;'; put 'put ''SGVdPTI1NSZ0dCxIZSsxfSxPLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tIZV09MjU1JnR0LHRoaXNbSGUrMV09dHQ+Pj44LEhlKzJ9LE8ucHJvdG90''@;'; put 'put ''eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0hlXT10dD4+PjgsdGhpc1tIZSsxXT0yNTUmdHQsSGUrMn0sTy5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9u''@;'; put 'put ''KHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0hlXT0yNTUmdHQsdGhpc1tIZSsxXT10dD4+PjgsdGhpc1tIZSsyXT10dD4+PjE2LHRoaXNbSGUrM109dHQ+Pj4yNCxIZSs0fSxPLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHR0PDAmJih0dD00Mjk0OTY3Mjk1K3R0KzEpLHRoaXNbSGVdPXR0Pj4+MjQsdGhpc1tIZSsxXT10dD4+PjE2LHRo''@;'; put 'put ''aXNbSGUrMl09dHQ+Pj44LHRoaXNbSGUrM109MjU1JnR0LEhlKzR9LE8ucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gc2UodGhpcyx0dCxIZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiIpKX0pLE8ucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gd2UodGhpcyx0dCxIZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLE8ucHJvdG90eXBlLndyaXRlRmxvYXRMRT1m''@;'; put 'put ''dW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIEplKHRoaXMsdHQsSGUsITAsdXQpfSxPLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBKZSh0aGlzLHR0LEhlLCExLHV0KX0sTy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0dCxIZSx1dCl7''@;'; put 'put ''cmV0dXJuIG90KHRoaXMsdHQsSGUsITAsdXQpfSxPLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gb3QodGhpcyx0dCxIZSwhMSx1dCl9LE8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKCFPLmlzQnVmZmVyKHR0KSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZih1dHx8KHV0PTApLCFxdCYmMCE9PXF0JiYocXQ9dGhpcy5sZW5ndGgpLEhlPj10dC5sZW5ndGgmJihIZT10dC5sZW5ndGgpLEhlfHwoSGU9MCkscXQ+MCYmcXQ8dXQmJihxdD11dCkscXQ9PT11dHx8MD09''@;'; put 'put ''PXR0Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKEhlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZih1dDwwfHx1dD49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lm''@;'; put 'put ''KHF0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cXQ+dGhpcy5sZW5ndGgmJihxdD10aGlzLmxlbmd0aCksdHQubGVuZ3RoLUhlPHF0LXV0JiYocXQ9dHQubGVuZ3RoLUhlK3V0KTtjb25zdCBSdD1xdC11dDtyZXR1cm4gdGhpcz09PXR0JiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oSGUsdXQscXQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKHR0LHRoaXMuc3ViYXJyYXkodXQscXQpLEhlKSxSdH0sTy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0dCxI''@;'; put 'put ''ZSx1dCxxdCl7aWYoInN0cmluZyI9PXR5cGVvZiB0dCl7aWYoInN0cmluZyI9PXR5cGVvZiBIZT8ocXQ9SGUsSGU9MCx1dD10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiB1dCYmKHF0PXV0LHV0PXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1xdCYmInN0cmluZyIhPXR5cGVvZiBxdCl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBxdCYmIU8uaXNFbmNvZGluZyhxdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitxdCk7aWYoMT09PXR0Lmxlbmd0aCl7Y29uc3QgUHQ9dHQuY2hh''@;'; put 'put ''ckNvZGVBdCgwKTsoInV0ZjgiPT09cXQmJlB0PDEyOHx8ImxhdGluMSI9PT1xdCkmJih0dD1QdCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHR0P3R0Jj0yNTU6ImJvb2xlYW4iPT10eXBlb2YgdHQmJih0dD1OdW1iZXIodHQpKTtpZihIZTwwfHx0aGlzLmxlbmd0aDxIZXx8dGhpcy5sZW5ndGg8''@;'; put 'put ''dXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHV0PD1IZSlyZXR1cm4gdGhpcztsZXQgUnQ7aWYoSGU+Pj49MCx1dD12b2lkIDA9PT11dD90aGlzLmxlbmd0aDp1dD4+PjAsdHR8fCh0dD0wKSwibnVtYmVyIj09dHlwZW9mIHR0KWZvcihSdD1IZTtSdDx1''@;'; put 'put ''dDsrK1J0KXRoaXNbUnRdPXR0O2Vsc2V7Y29uc3QgUHQ9Ty5pc0J1ZmZlcih0dCk/dHQ6Ty5mcm9tKHR0LHF0KSxzaT1QdC5sZW5ndGg7aWYoMD09PXNpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0dCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9y''@;'; put 'put ''KFJ0PTA7UnQ8dXQtSGU7KytSdCl0aGlzW1J0K0hlXT1QdFtSdCVzaV19cmV0dXJuIHRoaXN9O2NvbnN0IE1lPXt9O2Z1bmN0aW9uIHZlKCRlLHR0LEhlKXtNZVskZV09Y2xhc3MgZXh0ZW5kcyBIZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm1l''@;'; put 'put ''c3NhZ2UiLHt2YWx1ZTp0dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7JGV9XWAsZGVsZXRlIHRoaXMubmFtZX1nZXQgY29kZSgpe3JldHVybiAkZX1zZXQgY29kZShxdCl7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KHRoaXMsImNvZGUiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpxdCx3cml0YWJsZTohMH0pfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHskZX1dOiAke3RoaXMubWVzc2FnZX1gfX19ZnVuY3Rpb24gWGUoJGUpe2xldCB0dD0iIixIZT0k''@;'; put 'put ''ZS5sZW5ndGg7Y29uc3QgdXQ9Ii0iPT09JGVbMF0/MTowO2Zvcig7SGU+PXV0KzQ7SGUtPTMpdHQ9YF8keyRlLnNsaWNlKEhlLTMsSGUpfSR7dHR9YDtyZXR1cm5gJHskZS5zbGljZSgwLEhlKX0ke3R0fWB9ZnVuY3Rpb24gRGUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKCRlPkhlfHwkZTx0dCl7''@;'; put 'put ''Y29uc3QgUHQ9ImJpZ2ludCI9PXR5cGVvZiB0dD8ibiI6IiI7bGV0IHNpO3Rocm93IHNpPVJ0PjM/MD09PXR0fHx0dD09PUJpZ0ludCgwKT9gPj0gMCR7UHR9IGFuZCA8IDIke1B0fSAqKiAkezgqKFJ0KzEpfSR7UHR9YDpgPj0gLSgyJHtQdH0gKiogJHs4KihSdCsxKS0xfSR7UHR9KSBhbmQg''@;'; put 'put ''PCAyICoqICR7OCooUnQrMSktMX0ke1B0fWA6YD49ICR7dHR9JHtQdH0gYW5kIDw9ICR7SGV9JHtQdH1gLG5ldyBNZS5FUlJfT1VUX09GX1JBTkdFKCJ2YWx1ZSIsc2ksJGUpfSFmdW5jdGlvbiBqZSgkZSx0dCxIZSl7RmUodHQsIm9mZnNldCIpLCh2b2lkIDA9PT0kZVt0dF18fHZvaWQgMD09''@;'; put 'put ''PSRlW3R0K0hlXSkmJlJlKHR0LCRlLmxlbmd0aC0oSGUrMSkpfSh1dCxxdCxSdCl9ZnVuY3Rpb24gRmUoJGUsdHQpe2lmKCJudW1iZXIiIT10eXBlb2YgJGUpdGhyb3cgbmV3IE1lLkVSUl9JTlZBTElEX0FSR19UWVBFKHR0LCJudW1iZXIiLCRlKX1mdW5jdGlvbiBSZSgkZSx0dCxIZSl7dGhy''@;'; put 'put ''b3cgTWF0aC5mbG9vcigkZSkhPT0kZT8oRmUoJGUsSGUpLG5ldyBNZS5FUlJfT1VUX09GX1JBTkdFKEhlfHwib2Zmc2V0IiwiYW4gaW50ZWdlciIsJGUpKTp0dDwwP25ldyBNZS5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFM6bmV3IE1lLkVSUl9PVVRfT0ZfUkFOR0UoSGV8fCJvZmZzZXQiLGA+''@;'; put 'put ''PSAke0hlPzE6MH0gYW5kIDw9ICR7dHR9YCwkZSl9dmUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oJGUpe3JldHVybiAkZT9gJHskZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDoiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5k''@;'; put 'put ''cyJ9LFJhbmdlRXJyb3IpLHZlKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oJGUsdHQpe3JldHVybmBUaGUgIiR7JGV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHR0fWB9LFR5cGVFcnJvciksdmUoIkVSUl9PVVRfT0Zf''@;'; put 'put ''UkFOR0UiLGZ1bmN0aW9uKCRlLHR0LEhlKXtsZXQgdXQ9YFRoZSB2YWx1ZSBvZiAiJHskZX0iIGlzIG91dCBvZiByYW5nZS5gLHF0PUhlO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKEhlKSYmTWF0aC5hYnMoSGUpPjQyOTQ5NjcyOTY/cXQ9WGUoU3RyaW5nKEhlKSk6ImJpZ2ludCI9PXR5cGVv''@;'; put 'put ''ZiBIZSYmKHF0PVN0cmluZyhIZSksKEhlPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8SGU8LShCaWdJbnQoMikqKkJpZ0ludCgzMikpKSYmKHF0PVhlKHF0KSkscXQrPSJuIiksdXQrPWAgSXQgbXVzdCBiZSAke3R0fS4gUmVjZWl2ZWQgJHtxdH1gLHV0fSxSYW5nZUVycm9yKTtjb25zdCBJZT0v''@;'; put 'put ''W14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIGtlKCRlLHR0KXtsZXQgSGU7dHQ9dHR8fDEvMDtjb25zdCB1dD0kZS5sZW5ndGg7bGV0IHF0PW51bGw7Y29uc3QgUnQ9W107Zm9yKGxldCBQdD0wO1B0PHV0OysrUHQpe2lmKEhlPSRlLmNoYXJDb2RlQXQoUHQpLEhlPjU1Mjk1JiZIZTw1NzM0''@;'; put 'put ''NCl7aWYoIXF0KXtpZihIZT41NjMxOSl7KHR0LT0zKT4tMSYmUnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoUHQrMT09PXV0KXsodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1xdD1IZTtjb250aW51ZX1pZihIZTw1NjMyMCl7KHR0LT0zKT4tMSYmUnQu''@;'; put 'put ''cHVzaCgyMzksMTkxLDE4OSkscXQ9SGU7Y29udGludWV9SGU9NjU1MzYrKHF0LTU1Mjk2PDwxMHxIZS01NjMyMCl9ZWxzZSBxdCYmKHR0LT0zKT4tMSYmUnQucHVzaCgyMzksMTkxLDE4OSk7aWYocXQ9bnVsbCxIZTwxMjgpe2lmKCh0dC09MSk8MClicmVhaztSdC5wdXNoKEhlKX1lbHNlIGlm''@;'; put 'put ''KEhlPDIwNDgpe2lmKCh0dC09Mik8MClicmVhaztSdC5wdXNoKEhlPj42fDE5Miw2MyZIZXwxMjgpfWVsc2UgaWYoSGU8NjU1MzYpe2lmKCh0dC09Myk8MClicmVhaztSdC5wdXNoKEhlPj4xMnwyMjQsSGU+PjYmNjN8MTI4LDYzJkhlfDEyOCl9ZWxzZXtpZighKEhlPDExMTQxMTIpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHR0LT00KTwwKWJyZWFrO1J0LnB1c2goSGU+PjE4fDI0MCxIZT4+MTImNjN8MTI4LEhlPj42JjYzfDEyOCw2MyZIZXwxMjgpfX1yZXR1cm4gUnR9ZnVuY3Rpb24gbnQoJGUpe3JldHVybiBfLnRvQnl0ZUFycmF5KGZ1bmN0aW9u''@;'; put 'put ''IFZlKCRlKXtpZigoJGU9KCRlPSRlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKEllLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDskZS5sZW5ndGglNCE9MDspJGUrPSI9IjtyZXR1cm4gJGV9KCRlKSl9ZnVuY3Rpb24gUWUoJGUsdHQsSGUsdXQpe2xldCBxdDtmb3IocXQ9MDtx''@;'; put 'put ''dDx1dCYmIShxdCtIZT49dHQubGVuZ3RofHxxdD49JGUubGVuZ3RoKTsrK3F0KXR0W3F0K0hlXT0kZVtxdF07cmV0dXJuIHF0fWZ1bmN0aW9uIHVuKCRlLHR0KXtyZXR1cm4gJGUgaW5zdGFuY2VvZiB0dHx8bnVsbCE9JGUmJm51bGwhPSRlLmNvbnN0cnVjdG9yJiZudWxsIT0kZS5jb25zdHJ1''@;'; put 'put ''Y3Rvci5uYW1lJiYkZS5jb25zdHJ1Y3Rvci5uYW1lPT09dHQubmFtZX1mdW5jdGlvbiB5dCgkZSl7cmV0dXJuICRlIT0kZX1jb25zdCBNdD1mdW5jdGlvbigpe2NvbnN0ICRlPSIwMTIzNDU2Nzg5YWJjZGVmIix0dD1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IEhlPTA7SGU8MTY7KytIZSl7Y29u''@;'; put 'put ''c3QgdXQ9MTYqSGU7Zm9yKGxldCBxdD0wO3F0PDE2OysrcXQpdHRbdXQrcXRdPSRlW0hlXSskZVtxdF19cmV0dXJuIHR0fSgpO2Z1bmN0aW9uIER0KCRlKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD4idSI/aXQ6JGV9ZnVuY3Rpb24gaXQoKXt0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBub3Qgc3Vw''@;'; put 'put ''cG9ydGVkIil9fSw1MTE2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODYxMiksXz15KDE3NjgpLGc9eSg4OTI4KSxCPXkoOTc3MCk7dWUuZXhwb3J0cz1CfHxJLmNhbGwoZyxfKX0sMzE5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2MTIpLF89eSgxNzY4KSxn''@;'; put 'put ''PXkoNTExNik7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBnKEksXyxhcmd1bWVudHMpfX0sMTc2ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseX0sODkyODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUZ1bmN0aW9uLnByb3Rv''@;'; put 'put ''dHlwZS5jYWxsfSwzMTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4NjEyKSxfPXkoNDQ1MyksZz15KDg5MjgpLEI9eSg1MTE2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe2lmKFAubGVuZ3RoPDF8fCJmdW5jdGlvbiIhPXR5cGVvZiBQWzBdKXRocm93IG5ldyBfKCJhIGZ1bmN0''@;'; put 'put ''aW9uIGlzIHJlcXVpcmVkIik7cmV0dXJuIEIoSSxnLFApfX0sOTc3MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdCYmUmVmbGVjdC5hcHBseX0sMTkyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIxMCksXz15KDU1NTkp''@;'; put 'put ''LGc9XyhJKCJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiKSk7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFApe3ZhciBGPUkodywhIVApO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGJiZnKHcsIi5wcm90b3R5cGUuIik+LTE/XyhGKTpGfX0sNTU1OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDc3NzEpLF89eSg0NDI5KSxnPXkoMzE5KSxCPXkoMzE5Mik7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1nKGFyZ3VtZW50cyksTz1QLmxlbmd0aC0oYXJndW1lbnRzLmxlbmd0aC0xKTtyZXR1cm4gSShGLDErKE8+MD9POjApLCEwKX0sXz9fKHVlLmV4cG9ydHMsImFwcGx5''@;'; put 'put ''Iix7dmFsdWU6Qn0pOnVlLmV4cG9ydHMuYXBwbHk9Qn0sNzM3OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIxMCksXz15KDMxOSksZz1fKFtJKCIlU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJSIpXSk7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFApe3ZhciBGPUkodywhIVApO3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGJiZnKHcsIi5wcm90b3R5cGUuIik+LTE/XyhbRl0pOkZ9fSwxMDI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89eSgyODMwKS5UcmFuc2Zvcm0sZz15KDI1NTMpLnM7ZnVuY3Rpb24gdyh6KXtfLmNhbGwodGhp''@;'; put 'put ''cyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIHosdGhpcy5oYXNoTW9kZT90aGlzW3pdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwp''@;'; put 'put ''LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXkoNTcxNykodyxfKTt2YXIgUD10eXBlb2YgVWludDhBcnJheTwidSIsRj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGlu''@;'; put 'put ''c3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTt3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oeixOLEwpe3ZhciBLPWZ1bmN0aW9uIE8oeixOKXtpZih6IGluc3RhbmNlb2YgSSlyZXR1cm4gejtpZigic3RyaW5nIj09dHlwZW9mIHopcmV0dXJuIEkuZnJvbSh6''@;'; put 'put ''LE4pO2lmKEYmJkFycmF5QnVmZmVyLmlzVmlldyh6KSl7aWYoMD09PXouYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTD1JLmZyb20oei5idWZmZXIsei5ieXRlT2Zmc2V0LHouYnl0ZUxlbmd0aCk7aWYoTC5ieXRlTGVuZ3RoPT09ei5ieXRlTGVuZ3RoKXJldHVybiBMfWlmKFAm''@;'; put 'put ''JnogaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKHopJiZ6LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2Ygei5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmei5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih6KSlyZXR1cm4gSS5mcm9tKHopO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1Ro''@;'; put 'put ''ZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfSh6LE4pLFU9dGhpcy5fdXBkYXRlKEspO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KEwmJihVPXRoaXMuX3RvU3RyaW5n''@;'; put 'put ''KFUsTCkpLFUpfSx3LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sdy5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRB''@;'; put 'put ''dXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3Rh''@;'; put 'put ''dGUiKX0sdy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih6LE4sTCl7dmFyIEs7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHopOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoeikpfWNhdGNoKFUpe0s9VX1maW5hbGx5e0woSyl9fSx3LnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rp''@;'; put 'put ''b24oeil7dmFyIE47dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goTCl7Tj1MfXooTil9LHcucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHope3ZhciBOPXRoaXMuX19maW5hbCgpfHxJLmFsbG9jKDApO3JldHVybiB6JiYoTj10aGlzLl90b1N0cmluZyhOLHos''@;'; put 'put ''ITApKSxOfSx3LnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oeixOLEwpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBnKE4pLHRoaXMuX2VuY29kaW5nPU4pLHRoaXMuX2VuY29kaW5nIT09Til0aHJvdyBuZXcgRXJyb3IoImNhblx1MjAxOXQgc3dpdGNoIGVuY29k''@;'; put 'put ''aW5ncyIpO3ZhciBLPXRoaXMuX2RlY29kZXIud3JpdGUoeik7cmV0dXJuIEwmJihLKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxLfSx1ZS5leHBvcnRzPXd9LDUxMDg6KHVlLFgseSk9Pnt2YXIgST15KDk1MzkpLF89eSg5MjgyKTtmdW5jdGlvbiBnKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1l''@;'; put 'put ''KCl9dmFyIHcsQj1BcnJheS5wcm90b3R5cGUuc2xpY2UsUD17fTt3PXR5cGVvZiB5Lmc8InUiJiZ5LmcuY29uc29sZT95LmcuY29uc29sZTp0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNvbnNvbGU/d2luZG93LmNvbnNvbGU6e307Zm9yKHZhciBGPVtbZnVuY3Rpb24gSygpe30sImxvZyJd''@;'; put 'put ''LFtmdW5jdGlvbiBVKCl7dy5sb2cuYXBwbHkodyxhcmd1bWVudHMpfSwiaW5mbyJdLFtmdW5jdGlvbiBXKCl7dy5sb2cuYXBwbHkodyxhcmd1bWVudHMpfSwid2FybiJdLFtmdW5jdGlvbiBZKCl7dy53YXJuLmFwcGx5KHcsYXJndW1lbnRzKX0sImVycm9yIl0sW2Z1bmN0aW9uIHEobGUpe1Bb''@;'; put 'put ''bGVdPWcoKX0sInRpbWUiXSxbZnVuY3Rpb24gZWUobGUpe3ZhciBtZT1QW2xlXTtpZighbWUpdGhyb3cgbmV3IEVycm9yKCJObyBzdWNoIGxhYmVsOiAiK2xlKTtkZWxldGUgUFtsZV07dmFyIF9lPWcoKS1tZTt3LmxvZyhsZSsiOiAiK19lKyJtcyIpfSwidGltZUVuZCJdLFtmdW5jdGlvbiBK''@;'; put 'put ''KCl7dmFyIGxlPW5ldyBFcnJvcjtsZS5uYW1lPSJUcmFjZSIsbGUubWVzc2FnZT1JLmZvcm1hdC5hcHBseShudWxsLGFyZ3VtZW50cyksdy5lcnJvcihsZS5zdGFjayl9LCJ0cmFjZSJdLFtmdW5jdGlvbiBuZShsZSl7dy5sb2coSS5pbnNwZWN0KGxlKSsiXG4iKX0sImRpciJdLFtmdW5jdGlv''@;'; put 'put ''biBpZShsZSl7aWYoIWxlKXt2YXIgbWU9Qi5jYWxsKGFyZ3VtZW50cywxKTtfLm9rKCExLEkuZm9ybWF0LmFwcGx5KG51bGwsbWUpKX19LCJhc3NlcnQiXV0sTz0wO088Ri5sZW5ndGg7TysrKXt2YXIgej1GW09dLEw9elsxXTt3W0xdfHwod1tMXT16WzBdKX11ZS5leHBvcnRzPXd9LDY0OTc6''@;'; put 'put ''KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcjtmdW5jdGlvbiBxKGVlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKX1YLmlzQXJyYXk9ZnVuY3Rpb24gXyhlZSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlZSk6IltvYmplY3QgQXJy''@;'; put 'put ''YXldIj09PXEoZWUpfSxYLmlzQm9vbGVhbj1mdW5jdGlvbiBnKGVlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlZX0sWC5pc051bGw9ZnVuY3Rpb24gQihlZSl7cmV0dXJuIG51bGw9PT1lZX0sWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiB3KGVlKXtyZXR1cm4gbnVsbD09ZWV9LFgu''@;'; put 'put ''aXNOdW1iZXI9ZnVuY3Rpb24gUChlZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlZX0sWC5pc1N0cmluZz1mdW5jdGlvbiBGKGVlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGVlfSxYLmlzU3ltYm9sPWZ1bmN0aW9uIE8oZWUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZWV9LFguaXNVbmRl''@;'; put 'put ''ZmluZWQ9ZnVuY3Rpb24geihlZSl7cmV0dXJuIHZvaWQgMD09PWVlfSxYLmlzUmVnRXhwPWZ1bmN0aW9uIE4oZWUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09cShlZSl9LFguaXNPYmplY3Q9ZnVuY3Rpb24gTChlZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlZSYmbnVsbCE9PWVlfSxY''@;'; put 'put ''LmlzRGF0ZT1mdW5jdGlvbiBLKGVlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1xKGVlKX0sWC5pc0Vycm9yPWZ1bmN0aW9uIFUoZWUpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1xKGVlKXx8ZWUgaW5zdGFuY2VvZiBFcnJvcn0sWC5pc0Z1bmN0aW9uPWZ1bmN0aW9uIFcoZWUpe3JldHVy''@;'; put 'put ''biJmdW5jdGlvbiI9PXR5cGVvZiBlZX0sWC5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBZKGVlKXtyZXR1cm4gbnVsbD09PWVlfHwiYm9vbGVhbiI9PXR5cGVvZiBlZXx8Im51bWJlciI9PXR5cGVvZiBlZXx8InN0cmluZyI9PXR5cGVvZiBlZXx8InN5bWJvbCI9PXR5cGVvZiBlZXx8dHlwZW9mIGVl''@;'; put 'put ''PiJ1In0sWC5pc0J1ZmZlcj1JLmlzQnVmZmVyfSw2MzkzOih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz15KDY5NDgpLGc9eSg2NDI2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgdyhPKX07dmFyIEI9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRl''@;'; put 'put ''TGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9''@;'; put 'put ''LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gdyhGKXt0aGlzLmN1cnZlVHlwZT1CW0ZdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6Rn0pLHRoaXMuY3VydmU9''@;'; put 'put ''bmV3IF8uZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBQKEYsTyx6KXtBcnJheS5pc0FycmF5KEYpfHwoRj1GLnRvQXJyYXkoKSk7dmFyIE49bmV3IEkoRik7aWYoeiYmTi5sZW5ndGg8eil7dmFyIEw9bmV3IEkoei1OLmxlbmd0aCk7TC5maWxsKDAp''@;'; put 'put ''LE49SS5jb25jYXQoW0wsTl0pfXJldHVybiBPP04udG9TdHJpbmcoTyk6Tn1CLnAyMjQ9Qi5zZWNwMjI0cjEsQi5wMjU2PUIuc2VjcDI1NnIxPUIucHJpbWUyNTZ2MSxCLnAxOTI9Qi5zZWNwMTkycjE9Qi5wcmltZTE5MnYxLEIucDM4ND1CLnNlY3AzODRyMSxCLnA1MjE9Qi5zZWNwNTIxcjEs''@;'; put 'put ''dy5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShGLE8pfSx3LnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEYsTyx6KXtyZXR1cm4gTz1PfHwidXRmOCIs''@;'; put 'put ''SS5pc0J1ZmZlcihGKXx8KEY9bmV3IEkoRixPKSksUCh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoRikuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSx6LHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVu''@;'; put 'put ''Y3Rpb24oRixPKXt2YXIgej10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PU8sITApO3JldHVybiJoeWJyaWQiPT09TyYmKHpbMF09elt6Lmxlbmd0aC0xXSUyPzc6NiksUCh6LEYpfSx3LnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKEYpe3JldHVybiBQKHRoaXMu''@;'; put 'put ''a2V5cy5nZXRQcml2YXRlKCksRil9LHcucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihGLE8pe3JldHVybiBPPU98fCJ1dGY4IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhGKSx0aGlzfSx3LnByb3RvdHlwZS5zZXRQcml2YXRl''@;'; put 'put ''S2V5PWZ1bmN0aW9uKEYsTyl7Tz1PfHwidXRmOCIsSS5pc0J1ZmZlcihGKXx8KEY9bmV3IEkoRixPKSk7dmFyIHo9bmV3IGcoRik7cmV0dXJuIHo9ei50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZSh6KSx0aGlz''@;'; put 'put ''fX0sNjQyNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJv''@;'; put 'put ''dG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51''@;'; put 'put ''bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0''@;'; put 'put ''eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDg2MjMpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAs''@;'; put 'put ''Yil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6''@;'; put 'put ''aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgp''@;'; put 'put ''O2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8''@;'; put 'put ''MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3''@;'; put 'put ''MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihn''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRo''@;'; put 'put ''aXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYt''@;'; put 'put ''aiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3''@;'; put 'put ''MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0x''@;'; put 'put ''XXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxt''@;'; put 'put ''PTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3Ro''@;'; put 'put ''aXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxl''@;'; put 'put ''bmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9''@;'; put 'put ''LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxl''@;'; put 'put ''bmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3Bl''@;'; put 'put ''Y3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2''@;'; put 'put ''LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1''@;'; put 'put ''ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEs''@;'; put 'put ''MzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8''@;'; put 'put ''cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10''@;'; put 'put ''ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUu''@;'; put 'put ''dG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2''@;'; put 'put ''KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUu''@;'; put 'put ''aWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIg''@;'; put 'put ''YW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2''@;'; put 'put ''KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmco''@;'; put 'put ''MTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlz''@;'; put 'put ''LnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21d''@;'; put 'put ''PTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1w''@;'; put 'put ''LHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4''@;'; put 'put ''PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlz''@;'; put 'put ''LndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRz''@;'; put 'put ''KHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''c05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEp''@;'; put 'put ''LHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Io''@;'; put 'put ''cCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlz''@;'; put 'put ''Lmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10''@;'; put 'put ''aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNs''@;'; put 'put ''b25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRz''@;'; put 'put ''W0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAs''@;'; put 'put ''Qz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYw''@;'; put 'put ''PT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0''@;'; put 'put ''aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2''@;'; put 'put ''O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRo''@;'; put 'put ''aXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxw''@;'; put 'put ''Lm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFk''@;'; put 'put ''ZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIg''@;'; put 'put ''SD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2''@;'; put 'put ''MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0s''@;'; put 'put ''VWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgx''@;'; put 'put ''OTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLHNpPTB8VFsxXSxRdD04MTkxJnNp''@;'; put 'put ''LHNuPXNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1u''@;'; put 'put ''cj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRo''@;'; put 'put ''LmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRo''@;'; put 'put ''LmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLFJ0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBX''@;'; put 'put ''bj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24p''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygk''@;'; put 'put ''aT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJl''@;'; put 'put ''LGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsV3QpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhR''@;'; put 'put ''cj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBW''@;'; put 'put ''aT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24p''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''VWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxybil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGgu''@;'; put 'put ''aW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01h''@;'; put 'put ''dGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1''@;'; put 'put ''dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bChqZSxY''@;'; put 'put ''dCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRo''@;'; put 'put ''LmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01h''@;'; put 'put ''dGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1''@;'; put 'put ''dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGgu''@;'; put 'put ''aW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwo''@;'; put 'put ''SGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFsz''@;'; put 'put ''XT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07''@;'; put 'put ''ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4''@;'; put 'put ''PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9''@;'; put 'put ''MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYz''@;'; put 'put ''JnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIp''@;'; put 'put ''OmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJp''@;'; put 'put ''bj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNb''@;'; put 'put ''al09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNp''@;'; put 'put ''bigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSxNZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKk1lO01lPXRlKk1lK3NlKm90LHhbYWUrd2VdPVVlKyhv''@;'; put 'put ''dD12ZSksQ1thZSt3ZV09SmUrTWUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLU1lLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngs''@;'; put 'put ''VD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0Nd''@;'; put 'put ''PS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4''@;'; put 'put ''PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0y''@;'; put 'put ''KmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0''@;'; put 'put ''aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgu''@;'; put 'put ''d29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7''@;'; put 'put ''d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMp''@;'; put 'put ''LHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVs''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndv''@;'; put 'put ''cmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5w''@;'; put 'put ''b3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJv''@;'; put 'put ''dG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tU''@;'; put 'put ''XSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0w''@;'; put 'put ''O1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZh''@;'; put 'put ''ciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBd''@;'; put 'put ''PTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsr''@;'; put 'put ''XT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hs''@;'; put 'put ''bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3''@;'; put 'put ''LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwh''@;'; put 'put ''KHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''bWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRo''@;'; put 'put ''aXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRz''@;'; put 'put ''W2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''O2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tU''@;'; put 'put ''XSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09aily''@;'; put 'put ''ZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''d29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVu''@;'; put 'put ''Z3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFl''@;'; put 'put ''Lm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxD''@;'; put 'put ''Ll9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9''@;'; put 'put ''PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09''@;'; put 'put ''PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdh''@;'; put 'put ''dGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAh''@;'; put 'put ''PT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToi''@;'; put 'put ''bW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEw''@;'; put 'put ''KS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9''@;'; put 'put ''eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMu''@;'; put 'put ''bGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3''@;'; put 'put ''MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZygh''@;'; put 'put ''cC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4''@;'; put 'put ''Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5p''@;'; put 'put ''c09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgp''@;'; put 'put ''KSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3Rv''@;'; put 'put ''dHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5j''@;'; put 'put ''bXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBd''@;'; put 'put ''JkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/''@;'; put 'put ''QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9''@;'; put 'put ''MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDww''@;'; put 'put ''KXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVu''@;'; put 'put ''Y3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsr''@;'; put 'put ''KXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0x''@;'; put 'put ''O2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0''@;'; put 'put ''aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0x''@;'; put 'put ''KTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRl''@;'; put 'put ''eHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBu''@;'; put 'put ''dW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5y''@;'; put 'put ''ZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRo''@;'; put 'put ''aXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5y''@;'; put 'put ''ZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3Vi''@;'; put 'put ''KHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5y''@;'; put 'put ''ZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp''@;'; put 'put ''cy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hs''@;'; put 'put ''bih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUo''@;'; put 'put ''KXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13''@;'; put 'put ''Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVu''@;'; put 'put ''Z3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10''@;'; put 'put ''aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUo''@;'; put 'put ''eD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5j''@;'; put 'put ''dGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3Ro''@;'; put 'put ''LDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsr''@;'; put 'put ''KXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAu''@;'; put 'put ''d29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0x''@;'; put 'put ''XSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNb''@;'; put 'put ''eF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYo''@;'; put 'put ''InAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQo''@;'; put 'put ''dGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3Zl''@;'; put 'put ''cmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAo''@;'; put 'put ''dGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1''@;'; put 'put ''Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnBy''@;'; put 'put ''b3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25l''@;'; put 'put ''KCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyss''@;'; put 'put ''Qy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5j''@;'; put 'put ''bXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRT''@;'; put 'put ''cXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZt''@;'; put 'put ''cCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIu''@;'; put 'put ''Y21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUy''@;'; put 'put ''Njtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1U''@;'; put 'put ''JiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJv''@;'; put 'put ''bT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hp''@;'; put 'put ''ZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAu''@;'; put 'put ''d29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49''@;'; put 'put ''MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9''@;'; put 'put ''cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAm''@;'; put 'put ''JihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSwzNDgyOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTcxNyksXz15KDIzMTgpLGc9eSg5Nzg1KSxCPXkoOTA3Miksdz15KDEwMjcpO2Z1bmN0aW9uIFAoRil7dy5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Rn1JKFAsdyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlz''@;'; put 'put ''Ll9oYXNoLnVwZGF0ZShGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIm1kNSI9PT0oTz1PLnRvTG93ZXJDYXNlKCkpP25ldyBfOiJybWQxNjAiPT09T3x8InJpcGVtZDE2MCI9''@;'; put 'put ''PT1PP25ldyBnOm5ldyBQKEIoTykpfX0sODAyODoodWUsWCx5KT0+e3ZhciBJPXkoMjMxOCk7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4obmV3IEkpLnVwZGF0ZShfKS5kaWdlc3QoKX19LDgzNTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NzE3KSxfPXkoMTAzMSks''@;'; put 'put ''Zz15KDEwMjcpLEI9eSg5NTA5KS5CdWZmZXIsdz15KDgwMjgpLFA9eSg5Nzg1KSxGPXkoOTA3MiksTz1CLmFsbG9jKDEyOCk7ZnVuY3Rpb24geihOLEwpe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIEwmJihMPUIuZnJvbShMKSk7dmFyIEs9InNoYTUxMiI9PT1OfHwi''@;'; put 'put ''c2hhMzg0Ij09PU4/MTI4OjY0O3RoaXMuX2FsZz1OLHRoaXMuX2tleT1MLEwubGVuZ3RoPks/TD0oInJtZDE2MCI9PT1OP25ldyBQOkYoTikpLnVwZGF0ZShMKS5kaWdlc3QoKTpMLmxlbmd0aDxLJiYoTD1CLmNvbmNhdChbTCxPXSxLKSk7Zm9yKHZhciBXPXRoaXMuX2lwYWQ9Qi5hbGxvY1Vu''@;'; put 'put ''c2FmZShLKSxZPXRoaXMuX29wYWQ9Qi5hbGxvY1Vuc2FmZShLKSxxPTA7cTxLO3ErKylXW3FdPTU0XkxbcV0sWVtxXT05Ml5MW3FdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1OP25ldyBQOkYoTiksdGhpcy5faGFzaC51cGRhdGUoVyl9SSh6LGcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oTil7dGhpcy5faGFzaC51cGRhdGUoTil9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBQOkYodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShOKS5kaWdl''@;'; put 'put ''c3QoKX0sdWUuZXhwb3J0cz1mdW5jdGlvbihMLEspe3JldHVybiJybWQxNjAiPT09KEw9TC50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1MP25ldyB6KCJybWQxNjAiLEspOiJtZDUiPT09TD9uZXcgXyh3LEspOm5ldyB6KEwsSyl9fSwxMDMxOih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoNTcxNyksXz15KDk1MDkpLkJ1ZmZlcixnPXkoMTAyNyksQj1fLmFsbG9jKDEyOCksdz02NDtmdW5jdGlvbiBQKEYsTyl7Zy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTyYmKE89Xy5mcm9tKE8pKSx0aGlzLl9hbGc9Rix0aGlzLl9rZXk9TyxPLmxlbmd0''@;'; put 'put ''aD53P089RihPKTpPLmxlbmd0aDx3JiYoTz1fLmNvbmNhdChbTyxCXSx3KSk7Zm9yKHZhciB6PXRoaXMuX2lwYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxOPXRoaXMuX29wYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxMPTA7TDx3O0wrKyl6W0xdPTU0Xk9bTF0sTltMXT05Ml5PW0xdO3RoaXMuX2hhc2g9W3pd''@;'; put 'put ''fUkoUCxnKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gucHVzaChGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5fYWxnKF8uY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKF8uY29uY2F0KFt0aGlzLl9vcGFk''@;'; put 'put ''LEZdKSl9LHVlLmV4cG9ydHM9UH0sNTgzNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnJhbmRvbUJ5dGVzPVgucm5nPVgucHNldWRvUmFuZG9tQnl0ZXM9WC5wcm5nPXkoMTc5OCksWC5jcmVhdGVIYXNoPVguSGFzaD15KDM0ODIpLFguY3JlYXRlSG1hYz1YLkhtYWM9eSg4MzU1KTt2YXIg''@;'; put 'put ''ST15KDYwNDIpLF89T2JqZWN0LmtleXMoSSksZz1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoXyk7WC5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZ307dmFyIEI9eSg1NjMyKTtYLnBia2RmMj1CLnBia2RmMixY''@;'; put 'put ''LnBia2RmMlN5bmM9Qi5wYmtkZjJTeW5jO3ZhciB3PXkoMzYxNCk7WC5DaXBoZXI9dy5DaXBoZXIsWC5jcmVhdGVDaXBoZXI9dy5jcmVhdGVDaXBoZXIsWC5DaXBoZXJpdj13LkNpcGhlcml2LFguY3JlYXRlQ2lwaGVyaXY9dy5jcmVhdGVDaXBoZXJpdixYLkRlY2lwaGVyPXcuRGVjaXBoZXIs''@;'; put 'put ''WC5jcmVhdGVEZWNpcGhlcj13LmNyZWF0ZURlY2lwaGVyLFguRGVjaXBoZXJpdj13LkRlY2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcml2PXcuY3JlYXRlRGVjaXBoZXJpdixYLmdldENpcGhlcnM9dy5nZXRDaXBoZXJzLFgubGlzdENpcGhlcnM9dy5saXN0Q2lwaGVyczt2YXIgUD15KDI2MDcp''@;'; put 'put ''O1guRGlmZmllSGVsbG1hbkdyb3VwPVAuRGlmZmllSGVsbG1hbkdyb3VwLFguY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPVAuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLFguZ2V0RGlmZmllSGVsbG1hbj1QLmdldERpZmZpZUhlbGxtYW4sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVAuY3JlYXRl''@;'; put 'put ''RGlmZmllSGVsbG1hbixYLkRpZmZpZUhlbGxtYW49UC5EaWZmaWVIZWxsbWFuO3ZhciBGPXkoNDc0Myk7WC5jcmVhdGVTaWduPUYuY3JlYXRlU2lnbixYLlNpZ249Ri5TaWduLFguY3JlYXRlVmVyaWZ5PUYuY3JlYXRlVmVyaWZ5LFguVmVyaWZ5PUYuVmVyaWZ5LFguY3JlYXRlRUNESD15KDYz''@;'; put 'put ''OTMpO3ZhciBPPXkoNzkwMCk7WC5wdWJsaWNFbmNyeXB0PU8ucHVibGljRW5jcnlwdCxYLnByaXZhdGVFbmNyeXB0PU8ucHJpdmF0ZUVuY3J5cHQsWC5wdWJsaWNEZWNyeXB0PU8ucHVibGljRGVjcnlwdCxYLnByaXZhdGVEZWNyeXB0PU8ucHJpdmF0ZURlY3J5cHQ7dmFyIHo9eSg3OTYzKTtY''@;'; put 'put ''LnJhbmRvbUZpbGw9ei5yYW5kb21GaWxsLFgucmFuZG9tRmlsbFN5bmM9ei5yYW5kb21GaWxsU3luYyxYLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0''@;'; put 'put ''IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Iil9LFguY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhf''@;'; put 'put ''Tk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1Mx''@;'; put 'put ''X1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMjI5NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ0MjkpLF89eSgzNDY0KSxnPXkoNDQ1''@;'; put 'put ''MyksQj15KDcyOTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCxGLE8pe2lmKCFQfHwib2JqZWN0IiE9dHlwZW9mIFAmJiJmdW5jdGlvbiIhPXR5cGVvZiBQKXRocm93IG5ldyBnKCJgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgRiYm''@;'; put 'put ''InN5bWJvbCIhPXR5cGVvZiBGKXRocm93IG5ldyBnKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbM10mJm51bGwhPT1hcmd1bWVudHNbM10pdGhyb3cgbmV3IGcoImBu''@;'; put 'put ''b25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s0XSYmbnVsbCE9PWFyZ3VtZW50c1s0XSl0aHJvdyBuZXcgZygiYG5vbldyaXRhYmxlYCwgaWYgcHJv''@;'; put 'put ''dmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50c1s1XSl0aHJvdyBuZXcgZygiYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEg''@;'; put 'put ''Ym9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNl0pdGhyb3cgbmV3IGcoImBsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiIpO3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106''@;'; put 'put ''bnVsbCxOPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxMPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06bnVsbCxLPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLFU9ISFCJiZCKFAsRik7aWYoSSlJKFAsRix7Y29uZmlndXJhYmxlOm51bGw9PT1M''@;'; put 'put ''JiZVP1UuY29uZmlndXJhYmxlOiFMLGVudW1lcmFibGU6bnVsbD09PXomJlU/VS5lbnVtZXJhYmxlOiF6LHZhbHVlOk8sd3JpdGFibGU6bnVsbD09PU4mJlU/VS53cml0YWJsZTohTn0pO2Vsc2V7aWYoIUsmJih6fHxOfHxMKSl0aHJvdyBuZXcgXygiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5v''@;'; put 'put ''dCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtQW0ZdPU99fX0sNDI4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDIyMTUpLF89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv''@;'; put 'put ''bCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLGc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxCPUFycmF5LnByb3RvdHlwZS5jb25jYXQsdz15KDIyOTYpLEY9eSgxMDQ0KSgpLE89ZnVuY3Rpb24oTixMLEssVSl7aWYoTCBpbiBOKWlmKCEwPT09VSl7aWYoTltMXT09PUspcmV0''@;'; put 'put ''dXJufWVsc2UgaWYoIWZ1bmN0aW9uKE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOJiYiW29iamVjdCBGdW5jdGlvbl0iPT09Zy5jYWxsKE4pfShVKXx8IVUoKSlyZXR1cm47Rj93KE4sTCxLLCEwKTp3KE4sTCxLKX0sej1mdW5jdGlvbihOLEwpe3ZhciBLPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''Mj9hcmd1bWVudHNbMl06e30sVT1JKEwpO18mJihVPUIuY2FsbChVLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTCkpKTtmb3IodmFyIFc9MDtXPFUubGVuZ3RoO1crPTEpTyhOLFVbV10sTFtVW1ddXSxLW1VbV11dKX07ei5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhRix1ZS5leHBvcnRz''@;'; put 'put ''PXp9LDUyNTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC51dGlscz15KDEyNzgpLFguQ2lwaGVyPXkoNTc1NiksWC5ERVM9eSg3NzgpLFguQ0JDPXkoOTA1MSksWC5FREU9eSg2NTEpfSw5MDUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0NiksXz15KDU3MTcpLGc9e307''@;'; put 'put ''ZnVuY3Rpb24gQihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0aGlzLml2Lmxlbmd0aDtGKyspdGhpcy5pdltGXT1QW0ZdfVguaW5zdGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlvbiBGKEwp''@;'; put 'put ''e1AuY2FsbCh0aGlzLEwpLHRoaXMuX2NiY0luaXQoKX1fKEYsUCk7Zm9yKHZhciBPPU9iamVjdC5rZXlzKGcpLHo9MDt6PE8ubGVuZ3RoO3orKyl7dmFyIE49T1t6XTtGLnByb3RvdHlwZVtOXT1nW05dfXJldHVybiBGLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9LEZ9LGcu''@;'; put 'put ''X2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgQih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUZ9LGcuX3VwZGF0ZT1mdW5jdGlvbihGLE8seixOKXt2YXIgSz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsVT10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlw''@;'; put 'put ''dCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV11ePUZbTytXXTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxVLDAseixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT16W04rV119ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxGLE8s''@;'; put 'put ''eixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspeltOK1ddXj1VW1ddO2ZvcihXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT1GW08rV119fX0sNTc1NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NDYpO2Z1bmN0aW9uIF8oZyl7dGhpcy5vcHRpb25zPWcsdGhpcy50''@;'; put 'put ''eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1nLnBhZGRpbmd9dWUuZXhwb3J0cz1fLF8ucHJvdG90eXBlLl9pbml0''@;'; put 'put ''PWZ1bmN0aW9uKCl7fSxfLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQil7cmV0dXJuIDA9PT1CLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChCKTp0aGlzLl91cGRhdGVFbmNyeXB0KEIpfSxfLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9u''@;'; put 'put ''KEIsdyl7Zm9yKHZhciBQPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixCLmxlbmd0aC13KSxGPTA7RjxQO0YrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitGXT1CW3crRl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1QLFB9LF8ucHJvdG90eXBlLl9mbHVz''@;'; put 'put ''aEJ1ZmZlcj1mdW5jdGlvbihCLHcpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxCLHcpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LF8ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKEIpe3ZhciB3PTAsUD0wLE89bmV3IEFycmF5KCgodGhpcy5i''@;'; put 'put ''dWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJih3Kz10aGlzLl9idWZmZXIoQix3KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKFArPXRoaXMuX2ZsdXNoQnVmZmVyKE8sUCkpKTtmb3Io''@;'; put 'put ''dmFyIHo9Qi5sZW5ndGgtKEIubGVuZ3RoLXcpJXRoaXMuYmxvY2tTaXplO3c8ejt3Kz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoQix3LE8sUCksUCs9dGhpcy5ibG9ja1NpemU7Zm9yKDt3PEIubGVuZ3RoO3crKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVy''@;'; put 'put ''T2ZmXT1CW3ddO3JldHVybiBPfSxfLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTAsRj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK0IubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxPPW5ldyBBcnJheShGKnRoaXMuYmxvY2tTaXplKTtGPjA7''@;'; put 'put ''Ri0tKXcrPXRoaXMuX2J1ZmZlcihCLHcpLFArPXRoaXMuX2ZsdXNoQnVmZmVyKE8sUCk7cmV0dXJuIHcrPXRoaXMuX2J1ZmZlcihCLHcpLE99LF8ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEIpe3ZhciB3LFA7cmV0dXJuIEImJih3PXRoaXMudXBkYXRlKEIpKSxQPSJlbmNyeXB0Ij09PXRo''@;'; put 'put ''aXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSx3P3cuY29uY2F0KFApOlB9LF8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oQix3KXtpZigwPT09dylyZXR1cm4hMTtmb3IoO3c8Qi5sZW5ndGg7KUJbdysrXT0wO3JldHVybiEwfSxfLnByb3RvdHlwZS5f''@;'; put 'put ''ZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQiwwKSxCfSxfLnByb3RvdHlwZS5fdW5w''@;'; put 'put ''YWQ9ZnVuY3Rpb24oQil7cmV0dXJuIEJ9LF8ucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXtJLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBCPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEIsMCksdGhpcy5fdW5wYWQoQil9fSw3Nzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NzQ2KSxfPXkoNTcxNyksZz15KDEyNzgpLEI9eSg1NzU2KTtmdW5jdGlvbiB3KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxs''@;'; put 'put ''fWZ1bmN0aW9uIFAoTyl7Qi5jYWxsKHRoaXMsTyk7dmFyIHo9bmV3IHc7dGhpcy5fZGVzU3RhdGU9eix0aGlzLmRlcml2ZUtleXMoeixPLmtleSl9XyhQLEIpLHVlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IFAoeil9O3ZhciBGPVsxLDEsMiwyLDIsMiwyLDIs''@;'; put 'put ''MSwyLDIsMiwyLDIsMiwxXTtQLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKHosTil7ei5rZXlzPW5ldyBBcnJheSgzMiksSS5lcXVhbChOLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEw9Zy5yZWFkVUludDMyQkUoTiwwKSxLPWcucmVhZFVJ''@;'; put 'put ''bnQzMkJFKE4sNCk7Zy5wYzEoTCxLLHoudG1wLDApLEw9ei50bXBbMF0sSz16LnRtcFsxXTtmb3IodmFyIFU9MDtVPHoua2V5cy5sZW5ndGg7VSs9Mil7dmFyIFc9RltVPj4+MV07TD1nLnIyOHNobChMLFcpLEs9Zy5yMjhzaGwoSyxXKSxnLnBjMihMLEssei5rZXlzLFUpfX0sUC5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbih6LE4sTCxLKXt2YXIgVT10aGlzLl9kZXNTdGF0ZSxXPWcucmVhZFVJbnQzMkJFKHosTiksWT1nLnJlYWRVSW50MzJCRSh6LE4rNCk7Zy5pcChXLFksVS50bXAsMCksVz1VLnRtcFswXSxZPVUudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9l''@;'; put 'put ''bmNyeXB0KFUsVyxZLFUudG1wLDApOnRoaXMuX2RlY3J5cHQoVSxXLFksVS50bXAsMCksWT1VLnRtcFsxXSxnLndyaXRlVUludDMyQkUoTCxXPVUudG1wWzBdLEspLGcud3JpdGVVSW50MzJCRShMLFksSys0KX0sUC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih6LE4pe2lmKCExPT09dGhpcy5w''@;'; put 'put ''YWRkaW5nKXJldHVybiExO2Zvcih2YXIgTD16Lmxlbmd0aC1OLEs9TjtLPHoubGVuZ3RoO0srKyl6W0tdPUw7cmV0dXJuITB9LFAucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih6KXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gejtmb3IodmFyIE49elt6Lmxlbmd0aC0xXSxMPXoubGVu''@;'; put 'put ''Z3RoLU47TDx6Lmxlbmd0aDtMKyspSS5lcXVhbCh6W0xdLE4pO3JldHVybiB6LnNsaWNlKDAsei5sZW5ndGgtTil9LFAucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKHosTixMLEssVSl7Zm9yKHZhciBXPU4sWT1MLHE9MDtxPHoua2V5cy5sZW5ndGg7cSs9Mil7dmFyIGVlPXoua2V5c1tx''@;'; put 'put ''XSxKPXoua2V5c1txKzFdO2cuZXhwYW5kKFksei50bXAsMCk7dmFyIG5lPWcuc3Vic3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0pLGxlPVk7WT0oV15nLnBlcm11dGUobmUpKT4+PjAsVz1sZX1nLnJpcChZLFcsSyxVKX0sUC5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oeixO''@;'; put 'put ''LEwsSyxVKXtmb3IodmFyIFc9TCxZPU4scT16LmtleXMubGVuZ3RoLTI7cT49MDtxLT0yKXt2YXIgZWU9ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07Zy5leHBhbmQoVyx6LnRtcCwwKTt2YXIgbmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9VztXPShZXmcucGVy''@;'; put 'put ''bXV0ZShuZSkpPj4+MCxZPWxlfWcucmlwKFcsWSxLLFUpfX0sNjUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0NiksXz15KDU3MTcpLGc9eSg1NzU2KSxCPXkoNzc4KTtmdW5jdGlvbiB3KEYsTyl7SS5lcXVhbChPLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7''@;'; put 'put ''dmFyIHo9Ty5zbGljZSgwLDgpLE49Ty5zbGljZSg4LDE2KSxMPU8uc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1GP1tCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onp9KSxCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZW5j''@;'; put 'put ''cnlwdCIsa2V5Okx9KV06W0IuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6en0pXX1mdW5jdGlvbiBQKEYpe2cuY2FsbCh0aGlzLEYpO3ZhciBPPW5ldyB3KHRoaXMudHlw''@;'; put 'put ''ZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1PfV8oUCxnKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBQKE8pfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPXRoaXMuX2VkZVN0YXRlO0suY2lwaGVyc1sw''@;'; put 'put ''XS5fdXBkYXRlKE8seixOLEwpLEsuY2lwaGVyc1sxXS5fdXBkYXRlKE4sTCxOLEwpLEsuY2lwaGVyc1syXS5fdXBkYXRlKE4sTCxOLEwpfSxQLnByb3RvdHlwZS5fcGFkPUIucHJvdG90eXBlLl9wYWQsUC5wcm90b3R5cGUuX3VucGFkPUIucHJvdG90eXBlLl91bnBhZH0sMTI3ODoodWUsWCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7WC5yZWFkVUludDMyQkU9ZnVuY3Rpb24oQix3KXtyZXR1cm4oQlswK3ddPDwyNHxCWzErd108PDE2fEJbMit3XTw8OHxCWzMrd10pPj4+MH0sWC53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKEIsdyxQKXtCWzArUF09dz4+PjI0LEJbMStQXT13Pj4+MTYmMjU1LEJbMitQ''@;'; put 'put ''XT13Pj4+OCYyNTUsQlszK1BdPTI1NSZ3fSxYLmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTY7Tj49MDtOLT0yKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+Pj5MK04mMTtmb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9Qj4+PkwrTiYxfWZvcihO''@;'; put 'put ''PTY7Tj49MDtOLT0yKXtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEsenw9dz4+PkwrTiYxO2ZvcihMPTE7TDw9MjU7TCs9OCl6PDw9MSx6fD1CPj4+TCtOJjF9UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5yaXA9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49MDtOPDQ7''@;'; put 'put ''TisrKWZvcih2YXIgTD0yNDtMPj0wO0wtPTgpTzw8PTEsT3w9dz4+PkwrTiYxLE88PD0xLE98PUI+Pj5MK04mMTtmb3IoTj00O048ODtOKyspZm9yKEw9MjQ7TD49MDtMLT04KXo8PD0xLHp8PXc+Pj5MK04mMSx6PDw9MSx6fD1CPj4+TCtOJjE7UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0s''@;'; put 'put ''WC5wYzE9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49NztOPj01O04tLSl7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9Qj4+TCtOJjF9Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+Pkwr''@;'; put 'put ''TiYxO2ZvcihOPTE7Tjw9MztOKyspe2ZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD13Pj5MK04mMTtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9Qj4+TCtOJjF9Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LFgucjI4''@;'; put 'put ''c2hsPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIEI8PHcmMjY4NDM1NDU1fEI+Pj4yOC13fTt2YXIgeT1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIs''@;'; put 'put ''MywxMCwxNCw2LDIwLDI3LDI0XTtYLnBjMj1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj15Lmxlbmd0aD4+PjEsTD0wO0w8TjtMKyspTzw8PTEsT3w9Qj4+PnlbTF0mMTtmb3IoTD1OO0w8eS5sZW5ndGg7TCsrKXo8PD0xLHp8PXc+Pj55W0xdJjE7UFtGKzBdPU8+Pj4wLFBb''@;'; put 'put ''RisxXT16Pj4+MH0sWC5leHBhbmQ9ZnVuY3Rpb24oQix3LFApe3ZhciBGPTAsTz0wO0Y9KDEmQik8PDV8Qj4+PjI3O2Zvcih2YXIgej0yMzt6Pj0xNTt6LT00KUY8PD02LEZ8PUI+Pj56JjYzO2Zvcih6PTExO3o+PTM7ei09NClPfD1CPj4+eiY2MyxPPDw9NjtPfD0oMzEmQik8PDF8Qj4+PjMx''@;'; put 'put ''LHdbUCswXT1GPj4+MCx3W1ArMV09Tz4+PjB9O3ZhciBJPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcs''@;'; put 'put ''MTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwy''@;'; put 'put ''LDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEz''@;'; put 'put ''LDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEs''@;'; put 'put ''MTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIs''@;'; put 'put ''Niw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0''@;'; put 'put ''LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwx''@;'; put 'put ''MSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO1guc3Vic3RpdHV0ZT1mdW5jdGlvbihCLHcpe2Zvcih2YXIgUD0wLEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbNjQqRiso''@;'; put 'put ''Qj4+PjE4LTYqRiY2MyldO2ZvcihGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzI1Nis2NCpGKyh3Pj4+MTgtNipGJjYzKV07cmV0dXJuIFA+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYs''@;'; put 'put ''MTAsMjEsMjgsN107WC5wZXJtdXRlPWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MDtQPF8ubGVuZ3RoO1ArKyl3PDw9MSx3fD1CPj4+X1tQXSYxO3JldHVybiB3Pj4+MH0sWC5wYWRTcGxpdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBGPUIudG9TdHJpbmcoMik7Ri5sZW5ndGg8dzspRj0i''@;'; put 'put ''MCIrRjtmb3IodmFyIE89W10sej0wO3o8dzt6Kz1QKU8ucHVzaChGLnNsaWNlKHoseitQKSk7cmV0dXJuIE8uam9pbigiICIpfX0sMjYwNzoodWUsWCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyLF89eSgzNTkwKSxnPXkoOTc5OSksQj15KDc0MjYpLFA9e2JpbmFyeTohMCxoZXg6ITAsYmFz''@;'; put 'put ''ZTY0OiEwfTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1YLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1YLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gdyhPKXt2YXIgej1uZXcgSShnW09dLnByaW1lLCJoZXgiKSxOPW5ldyBJKGdbT10uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IEIoeixOKX0sWC5j''@;'; put 'put ''cmVhdGVEaWZmaWVIZWxsbWFuPVguRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBGKE8seixOLEwpe3JldHVybiBJLmlzQnVmZmVyKHopfHx2b2lkIDA9PT1QW3pdP0YoTywiYmluYXJ5Iix6LE4pOih6PXp8fCJiaW5hcnkiLEw9THx8ImJpbmFyeSIsTj1OfHxuZXcgSShbMl0pLEkuaXNCdWZmZXIo''@;'; put 'put ''Til8fChOPW5ldyBJKE4sTCkpLCJudW1iZXIiPT10eXBlb2YgTz9uZXcgQihfKE8sTiksTiwhMCk6KEkuaXNCdWZmZXIoTyl8fChPPW5ldyBJKE8seikpLG5ldyBCKE8sTiwhMCkpKX19LDc0MjY6KHVlLFgseSk9Pnt2YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoMzYyMCksQj1uZXcoeSgzMDQ3''@;'; put 'put ''KSksdz1uZXcgXygyNCksUD1uZXcgXygxMSksRj1uZXcgXygxMCksTz1uZXcgXygzKSx6PW5ldyBfKDcpLE49eSgzNTkwKSxMPXkoMTc5OCk7ZnVuY3Rpb24gSyhKLG5lKXtyZXR1cm4gbmU9bmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLG5lKSksdGhpcy5fcHViPW5ldyBf''@;'; put 'put ''KEopLHRoaXN9ZnVuY3Rpb24gVShKLG5lKXtyZXR1cm4gbmU9bmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLG5lKSksdGhpcy5fcHJpdj1uZXcgXyhKKSx0aGlzfXVlLmV4cG9ydHM9cTt2YXIgVz17fTtmdW5jdGlvbiBxKEosbmUsaWUpe3RoaXMuc2V0R2VuZXJhdG9yKG5l''@;'; put 'put ''KSx0aGlzLl9fcHJpbWU9bmV3IF8oSiksdGhpcy5fcHJpbWU9Xy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49Si5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLGllPyh0aGlzLnNldFB1YmxpY0tleT1LLHRo''@;'; put 'put ''aXMuc2V0UHJpdmF0ZUtleT1VKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBlZShKLG5lKXt2YXIgaWU9bmV3IEkoSi50b0FycmF5KCkpO3JldHVybiBuZT9pZS50b1N0cmluZyhuZSk6aWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHEucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gWShKLG5lKXt2YXIgaWU9bmUudG9TdHJpbmcoImhleCIpLGxlPVtpZSxKLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGxlIGlu''@;'; put 'put ''IFcpcmV0dXJuIFdbbGVdO3ZhciBfZSxtZT0wO2lmKEouaXNFdmVuKCl8fCFOLnNpbXBsZVNpZXZlfHwhTi5mZXJtYXRUZXN0KEopfHwhQi50ZXN0KEopKXJldHVybiBtZSs9MSxXW2xlXT1tZSs9IjAyIj09PWllfHwiMDUiPT09aWU/ODo0LG1lO3N3aXRjaChCLnRlc3QoSi5zaHJuKDEpKXx8''@;'; put 'put ''KG1lKz0yKSxpZSl7Y2FzZSIwMiI6Si5tb2QodykuY21wKFApJiYobWUrPTgpO2JyZWFrO2Nhc2UiMDUiOihfZT1KLm1vZChGKSkuY21wKE8pJiZfZS5jbXAoeikmJihtZSs9OCk7YnJlYWs7ZGVmYXVsdDptZSs9NH1yZXR1cm4gV1tsZV09bWUsbWV9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2Vu''@;'; put 'put ''KSksdGhpcy5fcHJpbWVDb2RlfX0pLHEucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgXyhMKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlz''@;'; put 'put ''Ll9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0scS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihKKXt2YXIgbmU9KEo9KEo9bmV3IF8oSikpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxpZT1uZXcgSShuZS50b0Fy''@;'; put 'put ''cmF5KCkpLGxlPXRoaXMuZ2V0UHJpbWUoKTtpZihpZS5sZW5ndGg8bGUubGVuZ3RoKXt2YXIgbWU9bmV3IEkobGUubGVuZ3RoLWllLmxlbmd0aCk7bWUuZmlsbCgwKSxpZT1JLmNvbmNhdChbbWUsaWVdKX1yZXR1cm4gaWV9LHEucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihuZSl7''@;'; put 'put ''cmV0dXJuIGVlKHRoaXMuX3B1YixuZSl9LHEucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24obmUpe3JldHVybiBlZSh0aGlzLl9wcml2LG5lKX0scS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oSil7cmV0dXJuIGVlKHRoaXMuX19wcmltZSxKKX0scS5wcm90b3R5cGUuZ2V0''@;'; put 'put ''R2VuZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiBlZSh0aGlzLl9nZW4sSil9LHEucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihKLG5lKXtyZXR1cm4gbmU9bmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLG5lKSksdGhpcy5fX2dlbj1KLHRoaXMuX2dlbj1uZXcg''@;'; put 'put ''XyhKKSx0aGlzfX0sMzU5MDoodWUsWCx5KT0+e3ZhciBJPXkoMTc5OCk7dWUuZXhwb3J0cz1sZSxsZS5zaW1wbGVTaWV2ZT1uZSxsZS5mZXJtYXRUZXN0PWllO3ZhciBfPXkoMzYyMCksZz1uZXcgXygyNCksdz1uZXcoeSgzMDQ3KSksUD1uZXcgXygxKSxGPW5ldyBfKDIpLE89bmV3IF8oNSks''@;'; put 'put ''TD0obmV3IF8oMTYpLG5ldyBfKDgpLG5ldyBfKDEwKSksSz1uZXcgXygzKSxXPShuZXcgXyg3KSxuZXcgXygxMSkpLFk9bmV3IF8oNCksZWU9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiBuZShtZSl7Zm9yKHZhciBfZT1mdW5jdGlvbiBKKCl7aWYobnVsbCE9PWVlKXJldHVybiBlZTt2YXIg''@;'; put 'put ''X2U9W107X2VbMF09Mjtmb3IodmFyIFRlPTEsU2U9MztTZTwxMDQ4NTc2O1NlKz0yKXtmb3IodmFyIHplPU1hdGguY2VpbChNYXRoLnNxcnQoU2UpKSxWPTA7VjxUZSYmX2VbVl08PXplJiZTZSVfZVtWXSE9MDtWKyspO1RlIT09ViYmX2VbVl08PXplfHwoX2VbVGUrK109U2UpfXJldHVybiBl''@;'; put 'put ''ZT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKWlmKDA9PT1tZS5tb2RuKF9lW1RlXSkpcmV0dXJuIDA9PT1tZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gaWUobWUpe3ZhciBfZT1fLm1vbnQobWUpO3JldHVybiAwPT09Ri50b1JlZChfZSkucmVkUG93KG1lLnN1Ym4o''@;'; put 'put ''MSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIGxlKG1lLF9lKXtpZihtZTwxNilyZXR1cm4gbmV3IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxTZTs7KXtmb3IoVGU9bmV3IF8oSShNYXRoLmNlaWwobWUvOCkpKTtUZS5i''@;'; put 'put ''aXRMZW5ndGgoKT5tZTspVGUuaXNocm4oMSk7aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoUCksVGUudGVzdG4oMSl8fFRlLmlhZGQoRiksX2UuY21wKEYpKXtpZighX2UuY21wKE8pKWZvcig7VGUubW9kKEwpLmNtcChLKTspVGUuaWFkZChZKX1lbHNlIGZvcig7VGUubW9kKGcpLmNtcChXKTsp''@;'; put 'put ''VGUuaWFkZChZKTtpZihuZShTZT1UZS5zaHJuKDEpKSYmbmUoVGUpJiZpZShTZSkmJmllKFRlKSYmdy50ZXN0KFNlKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzYyMDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhW''@;'; put 'put ''LHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12''@;'; put 'put ''YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHAp''@;'; put 'put ''e3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2''@;'; put 'put ''YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1w''@;'; put 'put ''JiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9w''@;'; put 'put ''OmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9''@;'; put 'put ''PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwi''@;'; put 'put ''bGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0x''@;'; put 'put ''KTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9Myks''@;'; put 'put ''ImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0x''@;'; put 'put ''LHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7''@;'; put 'put ''Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3Ro''@;'; put 'put ''O0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9''@;'; put 'put ''ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihD''@;'; put 'put ''PXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIs''@;'; put 'put ''Qyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFy''@;'; put 'put ''IEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMu''@;'; put 'put ''d29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMu''@;'; put 'put ''c3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro''@;'; put 'put ''KytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFy''@;'; put 'put ''IE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVsw''@;'; put 'put ''LDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0''@;'; put 'put ''MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9''@;'; put 'put ''cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7''@;'; put 'put ''Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEw''@;'; put 'put ''ODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zv''@;'; put 'put ''cih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05b''@;'; put 'put ''Ni1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3Zh''@;'; put 'put ''ciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gu''@;'; put 'put ''bGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRo''@;'; put 'put ''aXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1''@;'; put 'put ''cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5''@;'; put 'put ''TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMp''@;'; put 'put ''O2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1pl''@;'; put 'put ''cm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0s''@;'; put 'put ''dy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49''@;'; put 'put ''NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCks''@;'; put 'put ''MyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1''@;'; put 'put ''bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0''@;'; put 'put ''aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2''@;'; put 'put ''ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxl''@;'; put 'put ''bmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRz''@;'; put 'put ''W3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVh''@;'; put 'put ''bmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlz''@;'; put 'put ''IT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5p''@;'; put 'put ''dXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZh''@;'; put 'put ''ciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29y''@;'; put 'put ''ZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5f''@;'; put 'put ''bm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIg''@;'; put 'put ''VD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1i''@;'; put 'put ''Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFk''@;'; put 'put ''ZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIo''@;'; put 'put ''dGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRk''@;'; put 'put ''KHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRz''@;'; put 'put ''W2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jk''@;'; put 'put ''c1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLGplPTgxOTEmWGUs''@;'; put 'put ''RGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0''@;'; put 'put ''Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLHNpPTB8VFsxXSxRdD04MTkxJnNpLHNuPXNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEz''@;'; put 'put ''LFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0w''@;'; put 'put ''fFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGpl''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQp''@;'; put 'put ''LEU9RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''QWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxR''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoamUsV3QpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''TXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQp''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhl''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJ''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1l''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5''@;'; put 'put ''dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYp''@;'; put 'put ''fDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYp''@;'; put 'put ''fDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11''@;'; put 'put ''bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhl''@;'; put 'put ''LGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVy''@;'; put 'put ''biBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEy''@;'; put 'put ''XT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMu''@;'; put 'put ''eT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rp''@;'; put 'put ''b24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgt''@;'; put 'put ''MSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYs''@;'; put 'put ''SCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13''@;'; put 'put ''LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEm''@;'; put 'put ''cCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5w''@;'; put 'put ''ZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFth''@;'; put 'put ''ZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSxNZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKk1lO01lPXRlKk1lK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUrTWUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLU1lLHdlIT09RSYmKHZlPW0qdGUtQSpz''@;'; put 'put ''ZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlv''@;'; put 'put ''bihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0w''@;'; put 'put ''LEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgs''@;'; put 'put ''Qyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3Io''@;'; put 'put ''dmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBB''@;'; put 'put ''cnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53''@;'; put 'put ''b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2Vd''@;'; put 'put ''LEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3Ro''@;'; put 'put ''K2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBi''@;'; put 'put ''PW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24o''@;'; put 'put ''cCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlz''@;'; put 'put ''LndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDti''@;'; put 'put ''PHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8''@;'; put 'put ''Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikv''@;'; put 'put ''MjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''aGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgu''@;'; put 'put ''bWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5I''@;'; put 'put ''KWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBh''@;'; put 'put ''ZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVz''@;'; put 'put ''dG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAm''@;'; put 'put ''JnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29y''@;'; put 'put ''ZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vi''@;'; put 'put ''bj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlz''@;'; put 'put ''LndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2''@;'; put 'put ''NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFu''@;'; put 'put ''ZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3Io''@;'; put 'put ''O1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndv''@;'; put 'put ''cmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0o''@;'; put 'put ''eD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5s''@;'; put 'put ''ZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4''@;'; put 'put ''ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwx''@;'; put 'put ''LHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWIm''@;'; put 'put ''JihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9''@;'; put 'put ''KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAo''@;'; put 'put ''cCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRz''@;'; put 'put ''WzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVy''@;'; put 'put ''bygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpi''@;'; put 'put ''LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1m''@;'; put 'put ''dW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9y''@;'; put 'put ''KHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0''@;'; put 'put ''ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEo''@;'; put 'put ''eC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5p''@;'; put 'put ''c3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAu''@;'; put 'put ''Y2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lm''@;'; put 'put ''KGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQu''@;'; put 'put ''aXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygp''@;'; put 'put ''KXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4o''@;'; put 'put ''MSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVz''@;'; put 'put ''aGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50''@;'; put 'put ''aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8''@;'; put 'put ''PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09''@;'; put 'put ''VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9''@;'; put 'put ''Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4''@;'; put 'put ''PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5s''@;'; put 'put ''dG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNl''@;'; put 'put ''KHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMp''@;'; put 'put ''Ll9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3Jj''@;'; put 'put ''ZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVk''@;'; put 'put ''Lm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''UG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0''@;'; put 'put ''aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1''@;'; put 'put ''NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVy''@;'; put 'put ''IHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNo''@;'; put 'put ''bG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciks''@;'; put 'put ''dGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVu''@;'; put 'put ''Z3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11''@;'; put 'put ''bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndv''@;'; put 'put ''cmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0y''@;'; put 'put ''MixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53''@;'; put 'put ''b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIo''@;'; put 'put ''VGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3Ro''@;'; put 'put ''KytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBw''@;'; put 'put ''LmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4Lmlh''@;'; put 'put ''ZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11''@;'; put 'put ''bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVz''@;'; put 'put ''aHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5t''@;'; put 'put ''LnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4o''@;'; put 'put ''MSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSks''@;'; put 'put ''QT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5p''@;'; put 'put ''bW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFd''@;'; put 'put ''PXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49''@;'; put 'put ''MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNv''@;'; put 'put ''bnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBuZXcgemUocCl9LEIoemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYp''@;'; put 'put ''KTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52''@;'; put 'put ''KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnBy''@;'; put 'put ''b3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5t''@;'; put 'put ''KSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw2NTA0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBnLEk9eSgzMTkpLF89eSg3Mjk2KTt0cnl7Zz1bXS5fX3Byb3RvX189PT1BcnJheS5wcm90''@;'; put 'put ''b3R5cGV9Y2F0Y2goRil7aWYoIUZ8fCJvYmplY3QiIT10eXBlb2YgRnx8ISgiY29kZSJpbiBGKXx8IkVSUl9QUk9UT19BQ0NFU1MiIT09Ri5jb2RlKXRocm93IEZ9dmFyIEI9ISFnJiZfJiZfKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLHc9T2JqZWN0LFA9dy5nZXRQcm90b3R5cGVP''@;'; put 'put ''Zjt1ZS5leHBvcnRzPUImJiJmdW5jdGlvbiI9PXR5cGVvZiBCLmdldD9JKFtCLmdldF0pOiJmdW5jdGlvbiI9PXR5cGVvZiBQJiZmdW5jdGlvbihPKXtyZXR1cm4gUChudWxsPT1PP086dyhPKSl9fSw2OTQ4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPVg7SS52ZXJzaW9uPXkoODU5''@;'; put 'put ''NykuaTgsSS51dGlscz15KDk1MyksSS5yYW5kPXkoOTkzMSksSS5jdXJ2ZT15KDgyNTQpLEkuY3VydmVzPXkoNTQyNyksSS5lYz15KDc5NTQpLEkuZWRkc2E9eSg1OTgwKX0sNDkxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSg5NTMpLGc9Xy5nZXROQUYsQj1f''@;'; put 'put ''LmdldEpTRix3PV8uYXNzZXJ0O2Z1bmN0aW9uIFAoTyx6KXt0aGlzLnR5cGU9Tyx0aGlzLnA9bmV3IEkoei5wLDE2KSx0aGlzLnJlZD16LnByaW1lP0kucmVkKHoucHJpbWUpOkkubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgSSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEko''@;'; put 'put ''MSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ei5uJiZuZXcgSSh6Lm4sMTYpLHRoaXMuZz16LmcmJnRoaXMucG9pbnRGcm9tSlNPTih6Lmcsei5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcg''@;'; put 'put ''QXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIE49dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IU58fE4uY21wbigxMDApPjA/dGhpcy5yZWRO''@;'; put 'put ''PW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gRihPLHope3RoaXMuY3VydmU9Tyx0aGlzLnR5cGU9eix0aGlzLnByZWNvbXB1dGVkPW51bGx9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9u''@;'; put 'put ''KCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oeixOKXt3KHoucHJlY29tcHV0ZWQpO3Zh''@;'; put 'put ''ciBMPXouX2dldERvdWJsZXMoKSxLPWcoTiwxLHRoaXMuX2JpdExlbmd0aCksVT0oMTw8TC5zdGVwKzEpLShMLnN0ZXAlMj09MD8yOjEpO1UvPTM7dmFyIFkscSxXPVtdO2ZvcihZPTA7WTxLLmxlbmd0aDtZKz1MLnN0ZXApe3E9MDtmb3IodmFyIGVlPVkrTC5zdGVwLTE7ZWU+PVk7ZWUtLSlx''@;'; put 'put ''PShxPDwxKStLW2VlXTtXLnB1c2gocSl9Zm9yKHZhciBKPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxuZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksaWU9VTtpZT4wO2llLS0pe2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspKHE9V1tZXSk9PT1pZT9uZT1uZS5taXhlZEFkZChMLnBv''@;'; put 'put ''aW50c1tZXSk6cT09PS1pZSYmKG5lPW5lLm1peGVkQWRkKEwucG9pbnRzW1ldLm5lZygpKSk7Sj1KLmFkZChuZSl9cmV0dXJuIEoudG9QKCl9LFAucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHosTil7Zm9yKHZhciBMPTQsSz16Ll9nZXROQUZQb2ludHMoTCksVT1LLnBvaW50cyxXPWco''@;'; put 'put ''TixMPUsud25kLHRoaXMuX2JpdExlbmd0aCksWT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscT1XLmxlbmd0aC0xO3E+PTA7cS0tKXtmb3IodmFyIGVlPTA7cT49MCYmMD09PVdbcV07cS0tKWVlKys7aWYocT49MCYmZWUrKyxZPVkuZGJscChlZSkscTwwKWJyZWFrO3ZhciBKPVdbcV07''@;'; put 'put ''dygwIT09SiksWT0iYWZmaW5lIj09PXoudHlwZT9ZLm1peGVkQWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4xXS5uZWcoKSk6WS5hZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PXoudHlwZT9ZLnRvUCgpOll9LFAucHJvdG90eXBlLl93bmFmTXVs''@;'; put 'put ''QWRkPWZ1bmN0aW9uKHosTixMLEssVSl7dmFyIEosbmUsaWUsVz10aGlzLl93bmFmVDEsWT10aGlzLl93bmFmVDIscT10aGlzLl93bmFmVDMsZWU9MDtmb3IoSj0wO0o8SztKKyspe3ZhciBsZT0oaWU9TltKXSkuX2dldE5BRlBvaW50cyh6KTtXW0pdPWxlLnduZCxZW0pdPWxlLnBvaW50c31m''@;'; put 'put ''b3IoSj1LLTE7Sj49MTtKLT0yKXt2YXIgbWU9Si0xLF9lPUo7aWYoMT09PVdbbWVdJiYxPT09V1tfZV0pe3ZhciBUZT1bTlttZV0sbnVsbCxudWxsLE5bX2VdXTswPT09TlttZV0ueS5jbXAoTltfZV0ueSk/KFRlWzFdPU5bbWVdLmFkZChOW19lXSksVGVbMl09TlttZV0udG9KKCkubWl4ZWRB''@;'; put 'put ''ZGQoTltfZV0ubmVnKCkpKTowPT09TlttZV0ueS5jbXAoTltfZV0ueS5yZWROZWcoKSk/KFRlWzFdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS5hZGQoTltfZV0ubmVnKCkpKTooVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRv''@;'; put 'put ''SigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk7dmFyIFNlPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLHplPUIoTFttZV0sTFtfZV0pO2ZvcihlZT1NYXRoLm1heCh6ZVswXS5sZW5ndGgsZWUpLHFbbWVdPW5ldyBBcnJheShlZSkscVtfZV09bmV3IEFycmF5KGVlKSxuZT0wO25lPGVlO25lKysp''@;'; put 'put ''cVttZV1bbmVdPVNlWzMqKDErKDB8emVbMF1bbmVdKSkrKDErKDB8emVbMV1bbmVdKSldLHFbX2VdW25lXT0wLFlbbWVdPVRlfWVsc2UgcVttZV09ZyhMW21lXSxXW21lXSx0aGlzLl9iaXRMZW5ndGgpLHFbX2VdPWcoTFtfZV0sV1tfZV0sdGhpcy5fYml0TGVuZ3RoKSxlZT1NYXRoLm1heChx''@;'; put 'put ''W21lXS5sZW5ndGgsZWUpLGVlPU1hdGgubWF4KHFbX2VdLmxlbmd0aCxlZSl9dmFyIGI9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHg9dGhpcy5fd25hZlQ0O2ZvcihKPWVlO0o+PTA7Si0tKXtmb3IodmFyIEM9MDtKPj0wOyl7dmFyIFQ9ITA7Zm9yKG5lPTA7bmU8SztuZSsrKXhbbmVd''@;'; put 'put ''PTB8cVtuZV1bSl0sMCE9PXhbbmVdJiYoVD0hMSk7aWYoIVQpYnJlYWs7QysrLEotLX1pZihKPj0wJiZDKyssYj1iLmRibHAoQyksSjwwKWJyZWFrO2ZvcihuZT0wO25lPEs7bmUrKyl7dmFyIEg9eFtuZV07MCE9PUgmJihIPjA/aWU9WVtuZV1bSC0xPj4xXTpIPDAmJihpZT1ZW25lXVstSC0x''@;'; put 'put ''Pj4xXS5uZWcoKSksYj0iYWZmaW5lIj09PWllLnR5cGU/Yi5taXhlZEFkZChpZSk6Yi5hZGQoaWUpKX19Zm9yKEo9MDtKPEs7SisrKVlbSl09bnVsbDtyZXR1cm4gVT9iOmIudG9QKCl9LFAuQmFzZVBvaW50PUYsRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5v''@;'; put 'put ''dCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxQLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih6LE4pe3o9Xy50b0FycmF5KHosTik7dmFyIEw9dGhpcy5wLmJ5dGVMZW5ndGgoKTtp''@;'; put 'put ''ZigoND09PXpbMF18fDY9PT16WzBdfHw3PT09elswXSkmJnoubGVuZ3RoLTE9PTIqTClyZXR1cm4gNj09PXpbMF0/dyh6W3oubGVuZ3RoLTFdJTI9PTApOjc9PT16WzBdJiZ3KHpbei5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludCh6LnNsaWNlKDEsMStMKSx6LnNsaWNlKDErTCwxKzIqTCkp''@;'; put 'put ''O2lmKCgyPT09elswXXx8Mz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT09TClyZXR1cm4gdGhpcy5wb2ludEZyb21YKHouc2xpY2UoMSwxK0wpLDM9PT16WzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEYucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rp''@;'; put 'put ''b24oeil7cmV0dXJuIHRoaXMuZW5jb2RlKHosITApfSxGLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHope3ZhciBOPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksTD10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsTik7cmV0dXJuIHo/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29u''@;'; put 'put ''Y2F0KEwpOls0XS5jb25jYXQoTCx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsTikpfSxGLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oeixOKXtyZXR1cm4gXy5lbmNvZGUodGhpcy5fZW5jb2RlKE4pLHopfSxGLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHope2lmKHRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIE49e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBOLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksTi5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx6KSxOLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQ9Tix0aGlzfSxGLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbih6KXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgTj10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFOJiZOLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgoei5iaXRMZW5ndGgoKSsxKS9O''@;'; put 'put ''LnN0ZXApfSxGLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbih6LE4pe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgTD1bdGhpc10sSz10aGlzLFU9MDtVPE47VSs9eil7Zm9y''@;'; put 'put ''KHZhciBXPTA7Vzx6O1crKylLPUsuZGJsKCk7TC5wdXNoKEspfXJldHVybntzdGVwOnoscG9pbnRzOkx9fSxGLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHope2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVk''@;'; put 'put ''Lm5hZjtmb3IodmFyIE49W3RoaXNdLEw9KDE8PHopLTEsSz0xPT09TD9udWxsOnRoaXMuZGJsKCksVT0xO1U8TDtVKyspTltVXT1OW1UtMV0uYWRkKEspO3JldHVybnt3bmQ6eixwb2ludHM6Tn19LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LEYucHJvdG90''@;'; put 'put ''eXBlLmRibHA9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPXRoaXMsTD0wO0w8ejtMKyspTj1OLmRibCgpO3JldHVybiBOfX0sMTEzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk1MyksXz15KDM3ODUpLGc9eSg1NzE3KSxCPXkoNDkxOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKE8p''@;'; put 'put ''e3RoaXMudHdpc3RlZD0xIT0oMHxPLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Ty5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsQi5jYWxsKHRoaXMsImVkd2FyZHMiLE8pLHRoaXMuYT1uZXcgXyhPLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50''@;'; put 'put ''b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBfKE8uYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgXyhPLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSx3KCF0aGlzLnR3aXN0ZWR8fDA9PT10''@;'; put 'put ''aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxPLmMpfWZ1bmN0aW9uIEYoTyx6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMsTywicHJvamVjdGl2ZSIpLG51bGw9PT16JiZudWxsPT09TiYmbnVsbD09PUw/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55''@;'; put 'put ''PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgXyh6LDE2KSx0aGlzLnk9bmV3IF8oTiwxNiksdGhpcy56PUw/bmV3IF8oTCwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PUsmJm5ldyBf''@;'; put 'put ''KEssMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYm''@;'; put 'put ''IXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10''@;'; put 'put ''aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfWcoUCxCKSx1ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMubU9uZUE/ei5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHopfSxQLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih6KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5vbmVDP3o6dGhpcy5jLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHosTixMLEspe3JldHVybiB0aGlzLnBvaW50KHosTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHosTil7KHo9bmV3IF8oeiwxNikpLnJlZHx8KHo9ei50b1Jl''@;'; put 'put ''ZCh0aGlzLnJlZCkpO3ZhciBMPXoucmVkU3FyKCksSz10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKEwpKSxVPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChMKSksVz1LLnJlZE11bChVLnJlZEludm0oKSksWT1XLnJlZFNxcnQoKTtpZigwIT09WS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIHE9WS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTiYmIXF8fCFOJiZxKSYmKFk9WS5yZWROZWcoKSksdGhpcy5wb2ludCh6LFkpfSxQLnByb3RvdHlwZS5wb2ludEZy''@;'; put 'put ''b21ZPWZ1bmN0aW9uKHosTil7KHo9bmV3IF8oeiwxNikpLnJlZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPXoucmVkU3FyKCksSz1MLnJlZFN1Yih0aGlzLmMyKSxVPUwucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLFc9Sy5yZWRNdWwoVS5yZWRJ''@;'; put 'put ''bnZtKCkpO2lmKDA9PT1XLmNtcCh0aGlzLnplcm8pKXtpZihOKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx6KX12YXIgWT1XLnJlZFNxcnQoKTtpZigwIT09WS5yZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIFkuZnJvbVJlZCgpLmlzT2RkKCkhPT1OJiYoWT1ZLnJlZE5lZygpKSx0aGlzLnBvaW50KFkseil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHope2lmKHouaXNJbmZpbml0eSgpKXJldHVybiEwO3oubm9ybWFsaXpl''@;'; put 'put ''KCk7dmFyIE49ei54LnJlZFNxcigpLEw9ei55LnJlZFNxcigpLEs9Ti5yZWRNdWwodGhpcy5hKS5yZWRBZGQoTCksVT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChOKS5yZWRNdWwoTCkpKTtyZXR1cm4gMD09PUsuY21wKFUpfSxnKEYsQi5CYXNlUG9pbnQp''@;'; put 'put ''LFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oeil7cmV0dXJuIEYuZnJvbUpTT04odGhpcyx6KX0sUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyBGKHRoaXMseixOLEwsSyl9LEYuZnJvbUpTT049ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3''@;'; put 'put ''IEYoeixOWzBdLE5bMV0sTlsyXSl9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJv''@;'; put 'put ''bVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9''@;'; put 'put ''PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxGLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLEw9dGhpcy56LnJlZFNxcigpO0w9TC5yZWRJQWRkKEwpO3ZhciBLPXRoaXMuY3VydmUuX211bEEoeiksVT10aGlz''@;'; put 'put ''LngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih6KS5yZWRJU3ViKE4pLFc9Sy5yZWRBZGQoTiksWT1XLnJlZFN1YihMKSxxPUsucmVkU3ViKE4pLGVlPVUucmVkTXVsKFkpLEo9Vy5yZWRNdWwocSksbmU9VS5yZWRNdWwocSksaWU9WS5yZWRNdWwoVyk7cmV0dXJuIHRoaXMuY3Vy''@;'; put 'put ''dmUucG9pbnQoZWUsSixpZSxuZSl9LEYucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEssVSxXLFkscSxlZSx6PXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3Zh''@;'; put 'put ''ciBKPShZPXRoaXMuY3VydmUuX211bEEoTikpLnJlZEFkZChMKTt0aGlzLnpPbmU/KEs9ei5yZWRTdWIoTikucmVkU3ViKEwpLnJlZE11bChKLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRTcXIoKS5yZWRTdWIoSikucmVkU3ViKEopKToo''@;'; put 'put ''cT10aGlzLnoucmVkU3FyKCksZWU9Si5yZWRTdWIocSkucmVkSVN1YihxKSxLPXoucmVkU3ViKE4pLnJlZElTdWIoTCkucmVkTXVsKGVlKSxVPUoucmVkTXVsKFkucmVkU3ViKEwpKSxXPUoucmVkTXVsKGVlKSl9ZWxzZSBZPU4ucmVkQWRkKEwpLHE9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnop''@;'; put 'put ''LnJlZFNxcigpLGVlPVkucmVkU3ViKHEpLnJlZFN1YihxKSxLPXRoaXMuY3VydmUuX211bEMoei5yZWRJU3ViKFkpKS5yZWRNdWwoZWUpLFU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwoTi5yZWRJU3ViKEwpKSxXPVkucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUs''@;'; put 'put ''Vyl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxGLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHope3ZhciBOPXRoaXMueS5yZWRTdWIo''@;'; put 'put ''dGhpcy54KS5yZWRNdWwoei55LnJlZFN1Yih6LngpKSxMPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoei55LnJlZEFkZCh6LngpKSxLPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHoudCksVT10aGlzLnoucmVkTXVsKHouei5yZWRBZGQoei56KSksVz1MLnJlZFN1''@;'; put 'put ''YihOKSxZPVUucmVkU3ViKEspLHE9VS5yZWRBZGQoSyksZWU9TC5yZWRBZGQoTiksSj1XLnJlZE11bChZKSxuZT1xLnJlZE11bChlZSksaWU9Vy5yZWRNdWwoZWUpLGxlPVkucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEosbmUsbGUsaWUpfSxGLnByb3RvdHlwZS5fcHJvakFk''@;'; put 'put ''ZD1mdW5jdGlvbih6KXt2YXIgbmUsaWUsTj10aGlzLnoucmVkTXVsKHoueiksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bCh6LngpLFU9dGhpcy55LnJlZE11bCh6LnkpLFc9dGhpcy5jdXJ2ZS5kLnJlZE11bChLKS5yZWRNdWwoVSksWT1MLnJlZFN1YihXKSxxPUwucmVkQWRkKFcpLGVl''@;'; put 'put ''PXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoei54LnJlZEFkZCh6LnkpKS5yZWRJU3ViKEspLnJlZElTdWIoVSksSj1OLnJlZE11bChZKS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KG5lPU4ucmVkTXVsKHEpLnJlZE11bChVLnJlZFN1Yih0aGlzLmN1cnZlLl9t''@;'; put 'put ''dWxBKEspKSksaWU9WS5yZWRNdWwocSkpOihuZT1OLnJlZE11bChxKS5yZWRNdWwoVS5yZWRTdWIoSykpLGllPXRoaXMuY3VydmUuX211bEMoWSkucmVkTXVsKHEpKSx0aGlzLmN1cnZlLnBvaW50KEosbmUsaWUpfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuaXNJ''@;'; put 'put ''bmZpbml0eSgpP3o6ei5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh6KTp0aGlzLl9wcm9qQWRkKHopfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoeik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwo''@;'; put 'put ''dGhpcyx6KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMseil9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixMXSwyLCExKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih6LE4sTCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixMXSwyLCEwKX0sRi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB6PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHopLHRo''@;'; put 'put ''aXMueT10aGlzLnkucmVkTXVsKHopLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHopKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0''@;'; put 'put ''aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlz''@;'; put 'put ''LnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcz09PXp8fDA9PT10aGlzLmdldFgoKS5jbXAoei5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHouZ2V0WSgpKX0sRi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHope3ZhciBOPXoudG9SZWQo''@;'; put 'put ''dGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwO2Zvcih2YXIgTD16LmNsb25lKCksSz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoTC5pYWRkKHRoaXMuY3VydmUubiksTC5jbXAodGhpcy5jdXJ2ZS5wKT49MCly''@;'; put 'put ''ZXR1cm4hMTtpZihOLnJlZElBZGQoSyksMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITB9fSxGLnByb3RvdHlwZS50b1A9Ri5wcm90b3R5cGUubm9ybWFsaXplLEYucHJvdG90eXBlLm1peGVkQWRkPUYucHJvdG90eXBlLmFkZH0sODI1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1Y''@;'; put 'put ''O0kuYmFzZT15KDQ5MTgpLEkuc2hvcnQ9eSg2NjczKSxJLm1vbnQ9eSgyODgxKSxJLmVkd2FyZHM9eSgxMTM4KX0sMjg4MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSg1NzE3KSxnPXkoNDkxOCksQj15KDk1Myk7ZnVuY3Rpb24gdyhGKXtnLmNhbGwodGhpcywi''@;'; put 'put ''bW9udCIsRiksdGhpcy5hPW5ldyBJKEYuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSShGLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBJKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMu''@;'; put 'put ''YTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBQKEYsTyx6KXtnLkJhc2VQb2ludC5jYWxsKHRoaXMsRiwicHJvamVjdGl2ZSIpLG51bGw9PT1PJiZudWxsPT09ej8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8p''@;'; put 'put ''Oih0aGlzLng9bmV3IEkoTywxNiksdGhpcy56PW5ldyBJKHosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9Xyh3LGcpLHVlLmV4cG9ydHM9dyx3LnBy''@;'; put 'put ''b3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihPKXt2YXIgej1PLm5vcm1hbGl6ZSgpLngsTj16LnJlZFNxcigpLEw9Ti5yZWRNdWwoeikucmVkQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh6KTtyZXR1cm4gMD09PUwucmVkU3FydCgpLnJlZFNxcigpLmNtcChMKX0sXyhQLGcuQmFzZVBv''@;'; put 'put ''aW50KSx3LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihPLHope3JldHVybiB0aGlzLnBvaW50KEIudG9BcnJheShPLHopLDEpfSx3LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihPLHope3JldHVybiBuZXcgUCh0aGlzLE8seil9LHcucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVu''@;'; put 'put ''Y3Rpb24oTyl7cmV0dXJuIFAuZnJvbUpTT04odGhpcyxPKX0sUC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sUC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFAu''@;'; put 'put ''ZnJvbUpTT049ZnVuY3Rpb24oTyx6KXtyZXR1cm4gbmV3IFAoTyx6WzBdLHpbMV18fE8ub25lKX0sUC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVk''@;'; put 'put ''KCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxQLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sUC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJl''@;'; put 'put ''ZEFkZCh0aGlzLnopLnJlZFNxcigpLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEs9ei5yZWRTdWIoTCksVT16LnJlZE11bChMKSxXPUsucmVkTXVsKEwucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChLKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUsVyl9LFAucHJv''@;'; put 'put ''dG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oTyx6KXt2YXIgTj10aGlzLngucmVkQWRkKHRoaXMueiksTD10aGlzLngucmVkU3ViKHRoaXMueiksSz1P''@;'; put 'put ''LngucmVkQWRkKE8ueiksVz1PLngucmVkU3ViKE8ueikucmVkTXVsKE4pLFk9Sy5yZWRNdWwoTCkscT16LnoucmVkTXVsKFcucmVkQWRkKFkpLnJlZFNxcigpKSxlZT16LngucmVkTXVsKFcucmVkSVN1YihZKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocSxlZSl9LFAucHJv''@;'; put 'put ''dG90eXBlLm11bD1mdW5jdGlvbihPKXtmb3IodmFyIHo9Ty5jbG9uZSgpLE49dGhpcyxMPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxVPVtdOzAhPT16LmNtcG4oMCk7ei5pdXNocm4oMSkpVS5wdXNoKHouYW5kbG4oMSkpO2Zvcih2YXIgVz1VLmxlbmd0aC0xO1c+PTA7Vy0tKTA9PT1V''@;'; put 'put ''W1ddPyhOPU4uZGlmZkFkZChMLHRoaXMpLEw9TC5kYmwoKSk6KEw9Ti5kaWZmQWRkKEwsdGhpcyksTj1OLmRibCgpKTtyZXR1cm4gTH0sUC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5w''@;'; put 'put ''cm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE8pe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKE8uZ2V0WCgpKX0sUC5wcm90b3R5cGUubm9ybWFs''@;'; put 'put ''aXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxQLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDY2NzM6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTMpLF89eSgzNzg1KSxnPXkoNTcxNyksQj15KDQ5MTgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXtCLmNhbGwodGhpcywic2hvcnQiLHopLHRoaXMuYT1uZXcgXyh6LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IF8o''@;'; put 'put ''ei5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dl''@;'; put 'put ''dEVuZG9tb3JwaGlzbSh6KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBGKHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJhZmZpbmUiKSxudWxsPT09TiYmbnVsbD09PUw/KHRoaXMueD1udWxsLHRo''@;'; put 'put ''aXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBfKE4sMTYpLHRoaXMueT1uZXcgXyhMLDE2KSxLJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0''@;'; put 'put ''aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIE8oeixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImphY29iaWFuIiksbnVsbD09PU4mJm51bGw9PT1MJiZudWxsPT09Sz8o''@;'; put 'put ''dGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IF8oMCkpOih0aGlzLng9bmV3IF8oTiwxNiksdGhpcy55PW5ldyBfKEwsMTYpLHRoaXMuej1uZXcgXyhLLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5y''@;'; put 'put ''ZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfWcoUCxCKSx1ZS5leHBvcnRzPVAsUC5wcm90''@;'; put 'put ''b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihOKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgTCxLO2lmKE4uYmV0YSlMPW5ldyBfKE4uYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIFU9dGhpcy5fZ2V0RW5kb1Jv''@;'; put 'put ''b3RzKHRoaXMucCk7TD0oTD1VWzBdLmNtcChVWzFdKTwwP1VbMF06VVsxXSkudG9SZWQodGhpcy5yZWQpfWlmKE4ubGFtYmRhKUs9bmV3IF8oTi5sYW1iZGEsMTYpO2Vsc2V7dmFyIFc9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoV1swXSkueC5jbXAodGhpcy5n''@;'; put 'put ''LngucmVkTXVsKEwpKT9LPVdbMF06dygwPT09dGhpcy5nLm11bChLPVdbMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSkpfXJldHVybntiZXRhOkwsbGFtYmRhOkssYmFzaXM6Ti5iYXNpcz9OLmJhc2lzLm1hcChmdW5jdGlvbihxKXtyZXR1cm57YTpuZXcgXyhxLmEsMTYpLGI6bmV3IF8o''@;'; put 'put ''cS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoSyl9fX0sUC5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihOKXt2YXIgTD1OPT09dGhpcy5wP3RoaXMucmVkOl8ubW9udChOKSxLPW5ldyBfKDIpLnRvUmVkKEwpLnJlZEludm0oKSxVPUsucmVkTmVnKCksVz1uZXcgXygzKS50''@;'; put 'put ''b1JlZChMKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKEspO3JldHVybltVLnJlZEFkZChXKS5mcm9tUmVkKCksVS5yZWRTdWIoVykuZnJvbVJlZCgpXX0sUC5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihOKXtmb3IodmFyIEosbmUsaWUsbGUsbWUsX2UsVGUsemUsVixMPXRo''@;'; put 'put ''aXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksSz1OLFU9dGhpcy5uLmNsb25lKCksVz1uZXcgXygxKSxZPW5ldyBfKDApLHE9bmV3IF8oMCksZWU9bmV3IF8oMSksU2U9MDswIT09Sy5jbXBuKDApOyl7dmFyIHA9VS5kaXYoSyk7emU9VS5zdWIocC5tdWwoSykp''@;'; put 'put ''LFY9cS5zdWIocC5tdWwoVykpO3ZhciBiPWVlLnN1YihwLm11bChZKSk7aWYoIWllJiZ6ZS5jbXAoTCk8MClKPVRlLm5lZygpLG5lPVcsaWU9emUubmVnKCksbGU9VjtlbHNlIGlmKGllJiYyPT0rK1NlKWJyZWFrO1RlPXplLFU9SyxLPXplLHE9VyxXPVYsZWU9WSxZPWJ9bWU9emUubmVnKCks''@;'; put 'put ''X2U9Vjt2YXIgeD1pZS5zcXIoKS5hZGQobGUuc3FyKCkpO3JldHVybiBtZS5zcXIoKS5hZGQoX2Uuc3FyKCkpLmNtcCh4KT49MCYmKG1lPUosX2U9bmUpLGllLm5lZ2F0aXZlJiYoaWU9aWUubmVnKCksbGU9bGUubmVnKCkpLG1lLm5lZ2F0aXZlJiYobWU9bWUubmVnKCksX2U9X2UubmVnKCkp''@;'; put 'put ''LFt7YTppZSxiOmxlfSx7YTptZSxiOl9lfV19LFAucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oTil7dmFyIEw9dGhpcy5lbmRvLmJhc2lzLEs9TFswXSxVPUxbMV0sVz1VLmIubXVsKE4pLmRpdlJvdW5kKHRoaXMubiksWT1LLmIubmVnKCkubXVsKE4pLmRpdlJvdW5kKHRoaXMubiks''@;'; put 'put ''cT1XLm11bChLLmEpLGVlPVkubXVsKFUuYSksSj1XLm11bChLLmIpLG5lPVkubXVsKFUuYik7cmV0dXJue2sxOk4uc3ViKHEpLnN1YihlZSksazI6Si5hZGQobmUpLm5lZygpfX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihOLEwpeyhOPW5ldyBfKE4sMTYpKS5yZWR8fChOPU4u''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpKTt2YXIgSz1OLnJlZFNxcigpLnJlZE11bChOKS5yZWRJQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxVPUsucmVkU3FydCgpO2lmKDAhPT1VLnJlZFNxcigpLnJlZFN1YihLKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFs''@;'; put 'put ''aWQgcG9pbnQiKTt2YXIgVz1VLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihMJiYhV3x8IUwmJlcpJiYoVT1VLnJlZE5lZygpKSx0aGlzLnBvaW50KE4sVSl9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE4pe2lmKE4uaW5mKXJldHVybiEwO3ZhciBMPU4ueCxLPU4ueSxVPXRoaXMu''@;'; put 'put ''YS5yZWRNdWwoTCksVz1MLnJlZFNxcigpLnJlZE11bChMKS5yZWRJQWRkKFUpLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PUsucmVkU3FyKCkucmVkSVN1YihXKS5jbXBuKDApfSxQLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oTixMLEspe2Zvcih2YXIgVT10aGlzLl9l''@;'; put 'put ''bmRvV25hZlQxLFc9dGhpcy5fZW5kb1duYWZUMixZPTA7WTxOLmxlbmd0aDtZKyspe3ZhciBxPXRoaXMuX2VuZG9TcGxpdChMW1ldKSxlZT1OW1ldLEo9ZWUuX2dldEJldGEoKTtxLmsxLm5lZ2F0aXZlJiYocS5rMS5pbmVnKCksZWU9ZWUubmVnKCEwKSkscS5rMi5uZWdhdGl2ZSYmKHEuazIu''@;'; put 'put ''aW5lZygpLEo9Si5uZWcoITApKSxVWzIqWV09ZWUsVVsyKlkrMV09SixXWzIqWV09cS5rMSxXWzIqWSsxXT1xLmsyfWZvcih2YXIgbmU9dGhpcy5fd25hZk11bEFkZCgxLFUsVywyKlksSyksaWU9MDtpZTwyKlk7aWUrKylVW2llXT1udWxsLFdbaWVdPW51bGw7cmV0dXJuIG5lfSxnKEYsQi5C''@;'; put 'put ''YXNlUG9pbnQpLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyxOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTixMKXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLE4sTCl9LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0''@;'; put 'put ''aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgTj10aGlzLnByZWNvbXB1dGVkO2lmKE4mJk4uYmV0YSlyZXR1cm4gTi5iZXRhO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihOKXt2YXIgSz10aGlzLmN1cnZl''@;'; put 'put ''LFU9ZnVuY3Rpb24oVyl7cmV0dXJuIEsucG9pbnQoVy54LnJlZE11bChLLmVuZG8uYmV0YSksVy55KX07Ti5iZXRhPUwsTC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpOLm5hZiYme3duZDpOLm5hZi53bmQscG9pbnRzOk4ubmFmLnBvaW50cy5tYXAoVSl9LGRvdWJsZXM6Ti5kb3VibGVz''@;'; put 'put ''JiZ7c3RlcDpOLmRvdWJsZXMuc3RlcCxwb2ludHM6Ti5kb3VibGVzLnBvaW50cy5tYXAoVSl9fX1yZXR1cm4gTH19LEYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRo''@;'; put 'put ''aXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQs''@;'; put 'put ''cG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEYuZnJvbUpTT049ZnVuY3Rpb24oTixMLEspeyJzdHJpbmciPT10eXBlb2YgTCYmKEw9SlNPTi5wYXJzZShMKSk7dmFyIFU9Ti5wb2ludChMWzBdLExbMV0sSyk7aWYoIUxbMl0p''@;'; put 'put ''cmV0dXJuIFU7ZnVuY3Rpb24gVyhxKXtyZXR1cm4gTi5wb2ludChxWzBdLHFbMV0sSyl9dmFyIFk9TFsyXTtyZXR1cm4gVS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6W1VdLmNvbmNhdChZLmRvdWJsZXMucG9p''@;'; put 'put ''bnRzLm1hcChXKSl9LG5hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOltVXS5jb25jYXQoWS5uYWYucG9pbnRzLm1hcChXKSl9fSxVfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVD''@;'; put 'put ''IFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihO''@;'; put 'put ''KXtpZih0aGlzLmluZilyZXR1cm4gTjtpZihOLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKE4pKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoTikpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChOLngpKXJldHVybiB0aGlz''@;'; put 'put ''LmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy55LnJlZFN1YihOLnkpOzAhPT1MLmNtcG4oMCkmJihMPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoTi54KS5yZWRJbnZtKCkpKTt2YXIgSz1MLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKE4ueCksVT1MLnJlZE11bCh0''@;'; put 'put ''aGlzLngucmVkU3ViKEspKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIE49dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1OLmNtcG4oMCkpcmV0dXJu''@;'; put 'put ''IHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLmN1cnZlLmEsSz10aGlzLngucmVkU3FyKCksVT1OLnJlZEludm0oKSxXPUsucmVkQWRkKEspLnJlZElBZGQoSykucmVkSUFkZChMKS5yZWRNdWwoVSksWT1XLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlz''@;'; put 'put ''LngpKSxxPVcucmVkTXVsKHRoaXMueC5yZWRTdWIoWSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLHEpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4pe3JldHVybiBOPW5ldyBfKE4sMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhOKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLE4pOnRoaXMuY3VydmUuZW5kbz90aGlz''@;'; put 'put ''LmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW05dKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihOLEwsSyl7dmFyIFU9W3RoaXMsTF0sVz1bTixLXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFm''@;'; put 'put ''TXVsQWRkKFUsVyk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFUsVywyKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihOLEwsSyl7dmFyIFU9W3RoaXMsTF0sVz1bTixLXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFUsVywhMCk6dGhp''@;'; put 'put ''cy5jdXJ2ZS5fd25hZk11bEFkZCgxLFUsVywyLCEwKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXM9PT1OfHx0aGlzLmluZj09PU4uaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKE4ueCkmJjA9PT10aGlzLnkuY21wKE4ueSkpfSxGLnByb3RvdHlwZS5uZWc9''@;'; put 'put ''ZnVuY3Rpb24oTil7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihOJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgSz10aGlzLnByZWNvbXB1dGVkLFU9ZnVuY3Rpb24oVyl7cmV0dXJuIFcubmVnKCl9O0wucHJl''@;'; put 'put ''Y29tcHV0ZWQ9e25hZjpLLm5hZiYme3duZDpLLm5hZi53bmQscG9pbnRzOksubmFmLnBvaW50cy5tYXAoVSl9LGRvdWJsZXM6Sy5kb3VibGVzJiZ7c3RlcDpLLmRvdWJsZXMuc3RlcCxwb2ludHM6Sy5kb3VibGVzLnBvaW50cy5tYXAoVSl9fX1yZXR1cm4gTH0sRi5wcm90b3R5cGUudG9KPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sZyhPLEIuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVy''@;'; put 'put ''biBuZXcgTyh0aGlzLE4sTCxLKX0sTy5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTj10aGlzLnoucmVkSW52bSgpLEw9Ti5yZWRTcXIoKSxLPXRoaXMueC5yZWRNdWwoTCksVT10aGlz''@;'; put 'put ''LnkucmVkTXVsKEwpLnJlZE11bChOKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxPLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxPLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7''@;'; put 'put ''aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIE47aWYoTi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9Ti56LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFU9dGhpcy54LnJlZE11bChMKSxXPU4ueC5yZWRNdWwoSyksWT10aGlzLnkucmVkTXVsKEwucmVkTXVsKE4ueikpLHE9''@;'; put 'put ''Ti55LnJlZE11bChLLnJlZE11bCh0aGlzLnopKSxlZT1VLnJlZFN1YihXKSxKPVkucmVkU3ViKHEpO2lmKDA9PT1lZS5jbXBuKDApKXJldHVybiAwIT09Si5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBuZT1lZS5yZWRTcXIoKSxpZT1u''@;'; put 'put ''ZS5yZWRNdWwoZWUpLGxlPVUucmVkTXVsKG5lKSxtZT1KLnJlZFNxcigpLnJlZElBZGQoaWUpLnJlZElTdWIobGUpLnJlZElTdWIobGUpLF9lPUoucmVkTXVsKGxlLnJlZElTdWIobWUpKS5yZWRJU3ViKFkucmVkTXVsKGllKSksVGU9dGhpcy56LnJlZE11bChOLnopLnJlZE11bChlZSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuY3VydmUuanBvaW50KG1lLF9lLFRlKX0sTy5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIE4udG9KKCk7aWYoTi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy56LnJlZFNxcigpLEs9dGhpcy54LFU9''@;'; put 'put ''Ti54LnJlZE11bChMKSxXPXRoaXMueSxZPU4ueS5yZWRNdWwoTCkucmVkTXVsKHRoaXMueikscT1LLnJlZFN1YihVKSxlZT1XLnJlZFN1YihZKTtpZigwPT09cS5jbXBuKDApKXJldHVybiAwIT09ZWUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwo''@;'; put 'put ''KTt2YXIgSj1xLnJlZFNxcigpLG5lPUoucmVkTXVsKHEpLGllPUsucmVkTXVsKEopLGxlPWVlLnJlZFNxcigpLnJlZElBZGQobmUpLnJlZElTdWIoaWUpLnJlZElTdWIoaWUpLG1lPWVlLnJlZE11bChpZS5yZWRJU3ViKGxlKSkucmVkSVN1YihXLnJlZE11bChuZSkpLF9lPXRoaXMuei5yZWRN''@;'; put 'put ''dWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihOKXtpZigwPT09TilyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighTilyZXR1cm4gdGhpcy5kYmwoKTt2YXIgTDtpZih0aGlzLmN1''@;'; put 'put ''cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIEs9dGhpcztmb3IoTD0wO0w8TjtMKyspSz1LLmRibCgpO3JldHVybiBLfXZhciBVPXRoaXMuY3VydmUuYSxXPXRoaXMuY3VydmUudGludixZPXRoaXMueCxxPXRoaXMueSxlZT10aGlzLnosSj1lZS5yZWRTcXIoKS5yZWRTcXIoKSxu''@;'; put 'put ''ZT1xLnJlZEFkZChxKTtmb3IoTD0wO0w8TjtMKyspe3ZhciBpZT1ZLnJlZFNxcigpLGxlPW5lLnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPWllLnJlZEFkZChpZSkucmVkSUFkZChpZSkucmVkSUFkZChVLnJlZE11bChKKSksVGU9WS5yZWRNdWwobGUpLFNlPV9lLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIoVGUucmVkQWRkKFRlKSksemU9VGUucmVkSVN1YihTZSksVj1fZS5yZWRNdWwoemUpO1Y9Vi5yZWRJQWRkKFYpLnJlZElTdWIobWUpO3ZhciBwPW5lLnJlZE11bChlZSk7TCsxPE4mJihKPUoucmVkTXVsKG1lKSksWT1TZSxlZT1wLG5lPVZ9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFks''@;'; put 'put ''bmUucmVkTXVsKFcpLGVlKX0sTy5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sTy5wcm90b3R5''@;'; put 'put ''cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgTixMLEs7aWYodGhpcy56T25lKXt2YXIgVT10aGlzLngucmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7cT1xLnJlZElBZGQocSk7''@;'; put 'put ''dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSksbmU9WS5yZWRJQWRkKFkpO25lPShuZT1uZS5yZWRJQWRkKG5lKSkucmVkSUFkZChuZSksTj1KLEw9ZWUucmVkTXVsKHEucmVkSVN1YihKKSkucmVkSVN1YihuZSksSz10aGlz''@;'; put 'put ''LnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaWU9dGhpcy54LnJlZFNxcigpLGxlPXRoaXMueS5yZWRTcXIoKSxtZT1sZS5yZWRTcXIoKSxfZT10aGlzLngucmVkQWRkKGxlKS5yZWRTcXIoKS5yZWRJU3ViKGllKS5yZWRJU3ViKG1lKTtfZT1fZS5yZWRJQWRkKF9lKTt2YXIgVGU9aWUucmVk''@;'; put 'put ''QWRkKGllKS5yZWRJQWRkKGllKSxTZT1UZS5yZWRTcXIoKSx6ZT1tZS5yZWRJQWRkKG1lKTt6ZT0oemU9emUucmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpLE49U2UucmVkSVN1YihfZSkucmVkSVN1YihfZSksTD1UZS5yZWRNdWwoX2UucmVkSVN1YihOKSkucmVkSVN1Yih6ZSksSz0oSz10aGlz''@;'; put 'put ''LnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoSyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KE4sTCxLKX0sTy5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIE4sTCxLO2lmKHRoaXMuek9uZSl7dmFyIFU9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5y''@;'; put 'put ''ZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxKPWVlLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKTtOPUo7''@;'; put 'put ''dmFyIG5lPVkucmVkSUFkZChZKTtuZT0obmU9bmUucmVkSUFkZChuZSkpLnJlZElBZGQobmUpLEw9ZWUucmVkTXVsKHEucmVkSVN1YihKKSkucmVkSVN1YihuZSksSz10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaWU9dGhpcy56LnJlZFNxcigpLGxlPXRoaXMueS5yZWRTcXIoKSxt''@;'; put 'put ''ZT10aGlzLngucmVkTXVsKGxlKSxfZT10aGlzLngucmVkU3ViKGllKS5yZWRNdWwodGhpcy54LnJlZEFkZChpZSkpO19lPV9lLnJlZEFkZChfZSkucmVkSUFkZChfZSk7dmFyIFRlPW1lLnJlZElBZGQobWUpLFNlPShUZT1UZS5yZWRJQWRkKFRlKSkucmVkQWRkKFRlKTtOPV9lLnJlZFNxcigp''@;'; put 'put ''LnJlZElTdWIoU2UpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIobGUpLnJlZElTdWIoaWUpO3ZhciB6ZT1sZS5yZWRTcXIoKTt6ZT0oemU9KHplPXplLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSksTD1fZS5yZWRNdWwoVGUucmVkSVN1YihO''@;'; put 'put ''KSkucmVkSVN1Yih6ZSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KE4sTCxLKX0sTy5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuY3VydmUuYSxMPXRoaXMueCxLPXRoaXMueSxVPXRoaXMueixXPVUucmVkU3FyKCkucmVkU3FyKCksWT1MLnJlZFNxcigpLHE9Sy5yZWRT''@;'; put 'put ''cXIoKSxlZT1ZLnJlZEFkZChZKS5yZWRJQWRkKFkpLnJlZElBZGQoTi5yZWRNdWwoVykpLEo9TC5yZWRBZGQoTCksbmU9KEo9Si5yZWRJQWRkKEopKS5yZWRNdWwocSksaWU9ZWUucmVkU3FyKCkucmVkSVN1YihuZS5yZWRBZGQobmUpKSxsZT1uZS5yZWRJU3ViKGllKSxtZT1xLnJlZFNxcigp''@;'; put 'put ''O21lPShtZT0obWU9bWUucmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIgX2U9ZWUucmVkTXVsKGxlKS5yZWRJU3ViKG1lKSxUZT1LLnJlZEFkZChLKS5yZWRNdWwoVSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGllLF9lLFRlKX0sTy5wcm90b3R5cGUudHJwbD1m''@;'; put 'put ''dW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgTj10aGlzLngucmVkU3FyKCksTD10aGlzLnkucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksVT1MLnJlZFNxcigpLFc9Ti5yZWRBZGQoTikucmVkSUFkZChOKSxZPVcucmVkU3Fy''@;'; put 'put ''KCkscT10aGlzLngucmVkQWRkKEwpLnJlZFNxcigpLnJlZElTdWIoTikucmVkSVN1YihVKSxlZT0ocT0ocT0ocT1xLnJlZElBZGQocSkpLnJlZEFkZChxKS5yZWRJQWRkKHEpKS5yZWRJU3ViKFkpKS5yZWRTcXIoKSxKPVUucmVkSUFkZChVKTtKPShKPShKPUoucmVkSUFkZChKKSkucmVkSUFk''@;'; put 'put ''ZChKKSkucmVkSUFkZChKKTt2YXIgbmU9Vy5yZWRJQWRkKHEpLnJlZFNxcigpLnJlZElTdWIoWSkucmVkSVN1YihlZSkucmVkSVN1YihKKSxpZT1MLnJlZE11bChuZSk7aWU9KGllPWllLnJlZElBZGQoaWUpKS5yZWRJQWRkKGllKTt2YXIgbGU9dGhpcy54LnJlZE11bChlZSkucmVkSVN1Yihp''@;'; put 'put ''ZSk7bGU9KGxlPWxlLnJlZElBZGQobGUpKS5yZWRJQWRkKGxlKTt2YXIgbWU9dGhpcy55LnJlZE11bChuZS5yZWRNdWwoSi5yZWRJU3ViKG5lKSkucmVkSVN1YihxLnJlZE11bChlZSkpKTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIF9l''@;'; put 'put ''PXRoaXMuei5yZWRBZGQocSkucmVkU3FyKCkucmVkSVN1YihLKS5yZWRJU3ViKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTixMKXtyZXR1cm4gTj1uZXcgXyhOLEwpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0s''@;'; put 'put ''Ty5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7aWYoImFmZmluZSI9PT1OLnR5cGUpcmV0dXJuIHRoaXMuZXEoTi50b0ooKSk7aWYodGhpcz09PU4pcmV0dXJuITA7dmFyIEw9dGhpcy56LnJlZFNxcigpLEs9Ti56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKEspLnJlZElTdWIoTi54''@;'; put 'put ''LnJlZE11bChMKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgVT1MLnJlZE11bCh0aGlzLnopLFc9Sy5yZWRNdWwoTi56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoVykucmVkSVN1YihOLnkucmVkTXVsKFUpKS5jbXBuKDApfSxPLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oTil7dmFyIEw9''@;'; put 'put ''dGhpcy56LnJlZFNxcigpLEs9Ti50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKEwpO2lmKDA9PT10aGlzLnguY21wKEspKXJldHVybiEwO2Zvcih2YXIgVT1OLmNsb25lKCksVz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKEwpOzspe2lmKFUuaWFkZCh0aGlzLmN1cnZlLm4pLFUuY21wKHRo''@;'; put 'put ''aXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoSy5yZWRJQWRkKFcpLDA9PT10aGlzLnguY21wKEspKXJldHVybiEwfX0sTy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMgSlBvaW50IHg6ICIr''@;'; put 'put ''dGhpcy54LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LE8ucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sNTQyNzoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgTyxJPVgsXz15KDM3MTUpLGc9eSg4MjU0KSx3PXkoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXt0aGlzLmN1cnZlPSJzaG9ydCI9PT16LnR5cGU/bmV3IGcuc2hvcnQoeik6ImVkd2FyZHMiPT09ei50eXBlP25ldyBnLmVkd2FyZHMoeik6bmV3IGcubW9udCh6KSx0''@;'; put 'put ''aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPXouaGFzaCx3KHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksdyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIEYo''@;'; put 'put ''eixOKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgTD1uZXcgUChOKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6TH0p''@;'; put 'put ''LEx9fSl9SS5QcmVzZXRDdXJ2ZT1QLEYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5''@;'; put 'put ''MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLEYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1''@;'; put 'put ''NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwi''@;'; put 'put ''YmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLEYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixu''@;'; put 'put ''OiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBk''@;'; put 'put ''ODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxGKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAw''@;'; put 'put ''MDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6Xy5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1''@;'; put 'put ''NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksRigicDUyMSIs''@;'; put 'put ''e3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAi''@;'; put 'put ''LG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOl8u''@;'; put 'put ''c2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMy''@;'; put 'put ''ZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0p''@;'; put 'put ''LEYoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxGKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2''@;'; put 'put ''MzFhNWNmNWQzZWQiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NTgiXX0pO3RyeXtPPXkoMTAzNyl9Y2F0Y2h7Tz12b2lkIDB9Rigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoi''@;'; put 'put ''NyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6Xy5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1''@;'; put 'put ''MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7''@;'; put 'put ''YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcy''@;'; put 'put ''NmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsT119KX0sNzk1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3ODUpLF89eSgyMTU2KSxnPXkoOTUzKSxCPXkoNTQyNyksdz15KDk5MzEpLFA9Zy5hc3NlcnQsRj15KDEyNTEp''@;'; put 'put ''LE89eSg2MTEpO2Z1bmN0aW9uIHooTil7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KE4pOyJzdHJpbmciPT10eXBlb2YgTiYmKFAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTiksIlVua25vd24gY3VydmUgIitOKSxOPUJbTl0pLE4gaW5zdGFu''@;'; put 'put ''Y2VvZiBCLlByZXNldEN1cnZlJiYoTj17Y3VydmU6Tn0pLHRoaXMuY3VydmU9Ti5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPU4uY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShOLmN1cnZl''@;'; put 'put ''Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPU4uaGFzaHx8Ti5jdXJ2ZS5oYXNofXVlLmV4cG9ydHM9eix6LnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgRih0aGlzLEwpfSx6LnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihMLEspe3JldHVybiBG''@;'; put 'put ''LmZyb21Qcml2YXRlKHRoaXMsTCxLKX0sei5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihMLEspe3JldHVybiBGLmZyb21QdWJsaWModGhpcyxMLEspfSx6LnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKEwpe0x8fChMPXt9KTtmb3IodmFyIEs9bmV3IF8oe2hhc2g6dGhp''@;'; put 'put ''cy5oYXNoLHBlcnM6TC5wZXJzLHBlcnNFbmM6TC5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpMLmVudHJvcHl8fHcodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpMLmVudHJvcHkmJkwuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxVPXRoaXMu''@;'; put 'put ''bi5ieXRlTGVuZ3RoKCksVz10aGlzLm4uc3ViKG5ldyBJKDIpKTs7KXt2YXIgWT1uZXcgSShLLmdlbmVyYXRlKFUpKTtpZighKFkuY21wKFcpPjApKXJldHVybiBZLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoWSl9fSx6LnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oTCxL''@;'; put 'put ''LFUpe3ZhciBXO2lmKEkuaXNCTihMKXx8Im51bWJlciI9PXR5cGVvZiBMKVc9KEw9bmV3IEkoTCwxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgTClXPUwubGVuZ3RoLEw9bmV3IEkoTCwxNik7ZWxzZXt2YXIgWT1MLnRvU3RyaW5nKCk7Vz1ZLmxlbmd0aCsxPj4+''@;'; put 'put ''MSxMPW5ldyBJKFksMTYpfSJudW1iZXIiIT10eXBlb2YgVSYmKFU9OCpXKTt2YXIgcT1VLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoTD1MLnVzaHJuKHEpKSwhSyYmTC5jbXAodGhpcy5uKT49MD9MLnN1Yih0aGlzLm4pOkx9LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTCxL''@;'; put 'put ''LFUsVyl7aWYoIm9iamVjdCI9PXR5cGVvZiBVJiYoVz1VLFU9bnVsbCksV3x8KFc9e30pLCJzdHJpbmciIT10eXBlb2YgTCYmIm51bWJlciIhPXR5cGVvZiBMJiYhSS5pc0JOKEwpKXtQKCJvYmplY3QiPT10eXBlb2YgTCYmTCYmIm51bWJlciI9PXR5cGVvZiBMLmxlbmd0aCwiRXhwZWN0ZWQg''@;'; put 'put ''bWVzc2FnZSB0byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxQKEwubGVuZ3RoPj4+MD09PUwubGVuZ3RoKTtmb3IodmFyIFk9MDtZPEwubGVuZ3RoO1krKylQKCgyNTUmTFtZXSk9PT1MW1ldKX1LPXRoaXMua2V5RnJvbVByaXZhdGUoSyxVKSxM''@;'; put 'put ''PXRoaXMuX3RydW5jYXRlVG9OKEwsITEsVy5tc2dCaXRMZW5ndGgpLFAoIUwuaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciBxPXRoaXMubi5ieXRlTGVuZ3RoKCksZWU9Sy5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLHEpLEo9TC50b0FycmF5KCJiZSIs''@;'; put 'put ''cSk7UChuZXcgSShKKS5lcShMKSwiQ2FuIG5vdCBzaWduIG1lc3NhZ2UiKTtmb3IodmFyIG5lPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmVlLG5vbmNlOkoscGVyczpXLnBlcnMscGVyc0VuYzpXLnBlcnNFbmN8fCJ1dGY4In0pLGllPXRoaXMubi5zdWIobmV3IEkoMSkpLGxlPTA7''@;'; put 'put ''O2xlKyspe3ZhciBtZT1XLms/Vy5rKGxlKTpuZXcgSShuZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgobWU9dGhpcy5fdHJ1bmNhdGVUb04obWUsITApKS5jbXBuKDEpPD0wfHxtZS5jbXAoaWUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwobWUpO2lmKCFfZS5pc0luZmlu''@;'; put 'put ''aXR5KCkpe3ZhciBUZT1fZS5nZXRYKCksU2U9VGUudW1vZCh0aGlzLm4pO2lmKDAhPT1TZS5jbXBuKDApKXt2YXIgemU9bWUuaW52bSh0aGlzLm4pLm11bChTZS5tdWwoSy5nZXRQcml2YXRlKCkpLmlhZGQoTCkpO2lmKDAhPT0oemU9emUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgVj0o''@;'; put 'put ''X2UuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChTZSk/MjowKTtyZXR1cm4gVy5jYW5vbmljYWwmJnplLmNtcCh0aGlzLm5oKT4wJiYoemU9dGhpcy5uLnN1Yih6ZSksVl49MSksbmV3IE8oe3I6U2Usczp6ZSxyZWNvdmVyeVBhcmFtOlZ9KX19fX19fSx6LnByb3RvdHlwZS52ZXJp''@;'; put 'put ''Znk9ZnVuY3Rpb24oTCxLLFUsVyxZKXtZfHwoWT17fSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFkubXNnQml0TGVuZ3RoKSxVPXRoaXMua2V5RnJvbVB1YmxpYyhVLFcpO3ZhciBxPShLPW5ldyBPKEssImhleCIpKS5yLGVlPUsucztpZihxLmNtcG4oMSk8MHx8cS5jbXAodGhpcy5uKT49''@;'; put 'put ''MHx8ZWUuY21wbigxKTwwfHxlZS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgbGUsSj1lZS5pbnZtKHRoaXMubiksbmU9Si5tdWwoTCkudW1vZCh0aGlzLm4pLGllPUoubXVsKHEpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEobGU9dGhpcy5nLmpt''@;'; put 'put ''dWxBZGQobmUsVS5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmbGUuZXFYVG9QKHEpOiEobGU9dGhpcy5nLm11bEFkZChuZSxVLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiYwPT09bGUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocSl9LHoucHJvdG90eXBlLnJlY292ZXJQ''@;'; put 'put ''dWJLZXk9ZnVuY3Rpb24oTixMLEssVSl7UCgoMyZLKT09PUssIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxMPW5ldyBPKEwsVSk7dmFyIFc9dGhpcy5uLFk9bmV3IEkoTikscT1MLnIsZWU9TC5zLEo9MSZLLG5lPUs+PjE7aWYocS5jbXAodGhpcy5jdXJ2ZS5w''@;'; put 'put ''LnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJm5lKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7cT10aGlzLmN1cnZlLnBvaW50RnJvbVgobmU/cS5hZGQodGhpcy5jdXJ2ZS5uKTpxLEopO3ZhciBpZT1MLnIuaW52bShXKSxsZT1XLnN1YihZ''@;'; put 'put ''KS5tdWwoaWUpLnVtb2QoVyksbWU9ZWUubXVsKGllKS51bW9kKFcpO3JldHVybiB0aGlzLmcubXVsQWRkKGxlLHEsbWUpfSx6LnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKE4sTCxLLFUpe2lmKG51bGwhPT0oTD1uZXcgTyhMLFUpKS5yZWNvdmVyeVBhcmFtKXJldHVy''@;'; put 'put ''biBMLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBXPTA7Vzw0O1crKyl7dmFyIFk7dHJ5e1k9dGhpcy5yZWNvdmVyUHViS2V5KE4sTCxXKX1jYXRjaHtjb250aW51ZX1pZihZLmVxKEspKXJldHVybiBXfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9y''@;'; put 'put ''Iil9fSwxMjUxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc4NSksZz15KDk1MykuYXNzZXJ0O2Z1bmN0aW9uIEIodyxQKXt0aGlzLmVjPXcsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxQLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoUC5wcml2LFAucHJpdkVuYyks''@;'; put 'put ''UC5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhQLnB1YixQLnB1YkVuYyl9dWUuZXhwb3J0cz1CLEIuZnJvbVB1YmxpYz1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoUCx7cHViOkYscHViRW5jOk99KX0sQi5mcm9tUHJpdmF0ZT1mdW5jdGlvbihQLEYsTyl7''@;'; put 'put ''cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoUCx7cHJpdjpGLHByaXZFbmM6T30pfSxCLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBQPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIFAuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBr''@;'; put 'put ''ZXkifTpQLnZhbGlkYXRlKCk/UC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9''@;'; put 'put ''fSxCLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFAmJihGPVAsUD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksRj90aGlzLnB1Yi5lbmNvZGUoRixQKTp0aGlzLnB1Yn0sQi5wcm90b3R5''@;'; put 'put ''cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihQKXtyZXR1cm4iaGV4Ij09PVA/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sQi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oUCxGKXt0aGlzLnByaXY9bmV3IEkoUCxGfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51''@;'; put 'put ''bW9kKHRoaXMuZWMuY3VydmUubil9LEIucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtpZihQLnh8fFAueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/ZyhQLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8''@;'; put 'put ''fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJmcoUC54JiZQLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoUC54LFAueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoUCxGKX0sQi5w''@;'; put 'put ''cm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKFApe3JldHVybiBQLnZhbGlkYXRlKCl8fGcoUC52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLFAubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5l''@;'; put 'put ''Yy5zaWduKFAsdGhpcyxGLE8pfSxCLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLmVjLnZlcmlmeShQLEYsdGhpcyx2b2lkIDAsTyl9LEIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMu''@;'; put 'put ''cHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9fSw2MTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxfPXkoOTUzKSxnPV8uYXNzZXJ0O2Z1bmN0aW9uIEIoeixOKXtpZih6IGluc3RhbmNlb2YgQily''@;'; put 'put ''ZXR1cm4gejt0aGlzLl9pbXBvcnRERVIoeixOKXx8KGcoei5yJiZ6LnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgSSh6LnIsMTYpLHRoaXMucz1uZXcgSSh6LnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT16LnJlY292ZXJ5UGFyYW0/bnVsbDp6LnJl''@;'; put 'put ''Y292ZXJ5UGFyYW0pfWZ1bmN0aW9uIHcoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gUCh6LE4pe3ZhciBMPXpbTi5wbGFjZSsrXTtpZighKDEyOCZMKSlyZXR1cm4gTDt2YXIgSz0xNSZMO2lmKDA9PT1LfHxLPjR8fDA9PT16W04ucGxhY2VdKXJldHVybiExO2Zvcih2YXIgVT0wLFc9MCxZPU4u''@;'; put 'put ''cGxhY2U7VzxLO1crKyxZKyspVTw8PTgsVXw9eltZXSxVPj4+PTA7cmV0dXJuIShVPD0xMjcpJiYoTi5wbGFjZT1ZLFUpfWZ1bmN0aW9uIEYoeil7Zm9yKHZhciBOPTAsTD16Lmxlbmd0aC0xOyF6W05dJiYhKDEyOCZ6W04rMV0pJiZOPEw7KU4rKztyZXR1cm4gMD09PU4/ejp6LnNsaWNlKE4p''@;'; put 'put ''fWZ1bmN0aW9uIE8oeixOKXtpZihOPDEyOCl6LnB1c2goTik7ZWxzZXt2YXIgTD0xKyhNYXRoLmxvZyhOKS9NYXRoLkxOMj4+PjMpO2Zvcih6LnB1c2goMTI4fEwpOy0tTDspei5wdXNoKE4+Pj4oTDw8MykmMjU1KTt6LnB1c2goTil9fXVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5faW1wb3J0''@;'; put 'put ''REVSPWZ1bmN0aW9uKE4sTCl7Tj1fLnRvQXJyYXkoTixMKTt2YXIgSz1uZXcgdztpZig0OCE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVT1QKE4sSyk7aWYoITE9PT1VfHxVK0sucGxhY2UhPT1OLmxlbmd0aHx8MiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVz1QKE4sSyk7aWYo''@;'; put 'put ''ITE9PT1XfHwxMjgmTltLLnBsYWNlXSlyZXR1cm4hMTt2YXIgWT1OLnNsaWNlKEsucGxhY2UsVytLLnBsYWNlKTtpZihLLnBsYWNlKz1XLDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIHE9UChOLEspO2lmKCExPT09cXx8Ti5sZW5ndGghPT1xK0sucGxhY2V8fDEyOCZOW0sucGxhY2Vd''@;'; put 'put ''KXJldHVybiExO3ZhciBlZT1OLnNsaWNlKEsucGxhY2UscStLLnBsYWNlKTtpZigwPT09WVswXSl7aWYoISgxMjgmWVsxXSkpcmV0dXJuITE7WT1ZLnNsaWNlKDEpfWlmKDA9PT1lZVswXSl7aWYoISgxMjgmZWVbMV0pKXJldHVybiExO2VlPWVlLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3''@;'; put 'put ''IEkoWSksdGhpcy5zPW5ldyBJKGVlKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sQi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oTil7dmFyIEw9dGhpcy5yLnRvQXJyYXkoKSxLPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZMWzBdJiYoTD1bMF0uY29uY2F0KEwpKSwxMjgmS1swXSYm''@;'; put 'put ''KEs9WzBdLmNvbmNhdChLKSksTD1GKEwpLEs9RihLKTshKEtbMF18fDEyOCZLWzFdKTspSz1LLnNsaWNlKDEpO3ZhciBVPVsyXTtPKFUsTC5sZW5ndGgpLChVPVUuY29uY2F0KEwpKS5wdXNoKDIpLE8oVSxLLmxlbmd0aCk7dmFyIFc9VS5jb25jYXQoSyksWT1bNDhdO3JldHVybiBPKFksVy5s''@;'; put 'put ''ZW5ndGgpLFk9WS5jb25jYXQoVyksXy5lbmNvZGUoWSxOKX19LDU5ODA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzE1KSxfPXkoNTQyNyksZz15KDk1MyksQj1nLmFzc2VydCx3PWcucGFyc2VCeXRlcyxQPXkoOTA4NyksRj15KDM2MjIpO2Z1bmN0aW9uIE8oeil7aWYoQigi''@;'; put 'put ''ZWQyNTUxOSI9PT16LCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKHopO3RoaXMuY3VydmU9ej1fW3pdLmN1cnZlLHRoaXMuZz16LmcsdGhpcy5nLnByZWNvbXB1dGUoei5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9p''@;'; put 'put ''bnRDbGFzcz16LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoei5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1JLnNoYTUxMn11ZS5leHBvcnRzPU8sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihOLEwpe049dyhOKTt2YXIgSz10aGlzLmtleUZy''@;'; put 'put ''b21TZWNyZXQoTCksVT10aGlzLmhhc2hJbnQoSy5tZXNzYWdlUHJlZml4KCksTiksVz10aGlzLmcubXVsKFUpLFk9dGhpcy5lbmNvZGVQb2ludChXKSxxPXRoaXMuaGFzaEludChZLEsucHViQnl0ZXMoKSxOKS5tdWwoSy5wcml2KCkpLGVlPVUuYWRkKHEpLnVtb2QodGhpcy5jdXJ2ZS5uKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlcsUzplZSxSZW5jb2RlZDpZfSl9LE8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihOLEwsSyl7aWYoTj13KE4pLChMPXRoaXMubWFrZVNpZ25hdHVyZShMKSkuUygpLmd0ZShMLmVkZHNhLmN1cnZlLm4pfHxMLlMoKS5pc05lZygpKXJldHVy''@;'; put 'put ''biExO3ZhciBVPXRoaXMua2V5RnJvbVB1YmxpYyhLKSxXPXRoaXMuaGFzaEludChMLlJlbmNvZGVkKCksVS5wdWJCeXRlcygpLE4pLFk9dGhpcy5nLm11bChMLlMoKSk7cmV0dXJuIEwuUigpLmFkZChVLnB1YigpLm11bChXKSkuZXEoWSl9LE8ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIE49dGhpcy5oYXNoKCksTD0wO0w8YXJndW1lbnRzLmxlbmd0aDtMKyspTi51cGRhdGUoYXJndW1lbnRzW0xdKTtyZXR1cm4gZy5pbnRGcm9tTEUoTi5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxPLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKE4pe3Jl''@;'; put 'put ''dHVybiBQLmZyb21QdWJsaWModGhpcyxOKX0sTy5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihOKXtyZXR1cm4gUC5mcm9tU2VjcmV0KHRoaXMsTil9LE8ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYodGhp''@;'; put 'put ''cyxOKX0sTy5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIEw9Ti5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBMW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PU4uZ2V0WCgpLmlzT2RkKCk/MTI4OjAsTH0sTy5wcm90b3R5cGUuZGVj''@;'; put 'put ''b2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIEw9KE49Zy5wYXJzZUJ5dGVzKE4pKS5sZW5ndGgtMSxLPU4uc2xpY2UoMCxMKS5jb25jYXQoLTEyOSZOW0xdKSxVPSEhKDEyOCZOW0xdKSxXPWcuaW50RnJvbUxFKEspO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoVyxVKX0sTy5wcm90b3R5''@;'; put 'put ''cGUuZW5jb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBOLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sTy5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBnLmludEZyb21MRShOKX0sTy5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihOKXtyZXR1cm4g''@;'; put 'put ''TiBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDkwODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTMpLF89SS5hc3NlcnQsZz1JLnBhcnNlQnl0ZXMsQj1JLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIHcoUCxGKXt0aGlzLmVkZHNhPVAsdGhpcy5fc2VjcmV0PWcoRi5z''@;'; put 'put ''ZWNyZXQpLFAuaXNQb2ludChGLnB1Yik/dGhpcy5fcHViPUYucHViOnRoaXMuX3B1YkJ5dGVzPWcoRi5wdWIpfXcuZnJvbVB1YmxpYz1mdW5jdGlvbihGLE8pe3JldHVybiBPIGluc3RhbmNlb2Ygdz9POm5ldyB3KEYse3B1YjpPfSl9LHcuZnJvbVNlY3JldD1mdW5jdGlvbihGLE8pe3JldHVy''@;'; put 'put ''biBPIGluc3RhbmNlb2Ygdz9POm5ldyB3KEYse3NlY3JldDpPfSl9LHcucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LEIodywicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxCKHcs''@;'; put 'put ''InB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxCKHcsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgRj10aGlzLmVkZHNhLE89dGhpcy5oYXNo''@;'; put 'put ''KCksej1GLmVuY29kaW5nTGVuZ3RoLTEsTj1PLnNsaWNlKDAsRi5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIE5bMF0mPTI0OCxOW3pdJj0xMjcsTlt6XXw9NjQsTn0pLEIodywicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxC''@;'; put 'put ''KHcsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLEIodywibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSx3''@;'; put 'put ''LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEYpe3JldHVybiBfKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oRix0aGlzKX0sdy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KEYsTyx0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKEYpe3JldHVybiBfKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLEkuZW5jb2RlKHRoaXMuc2VjcmV0KCksRil9LHcucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihGKXtyZXR1cm4gSS5lbmNvZGUo''@;'; put 'put ''dGhpcy5wdWJCeXRlcygpLEYpfSx1ZS5leHBvcnRzPXd9LDM2MjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzg1KSxfPXkoOTUzKSxnPV8uYXNzZXJ0LEI9Xy5jYWNoZWRQcm9wZXJ0eSx3PV8ucGFyc2VCeXRlcztmdW5jdGlvbiBQKEYsTyl7dGhpcy5lZGRzYT1GLCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgTyYmKE89dyhPKSksQXJyYXkuaXNBcnJheShPKSYmKGcoTy5sZW5ndGg9PT0yKkYuZW5jb2RpbmdMZW5ndGgsIlNpZ25hdHVyZSBoYXMgaW52YWxpZCBzaXplIiksTz17UjpPLnNsaWNlKDAsRi5lbmNvZGluZ0xlbmd0aCksUzpPLnNsaWNlKEYuZW5jb2RpbmdMZW5ndGgp''@;'; put 'put ''fSksZyhPLlImJk8uUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksRi5pc1BvaW50KE8uUikmJih0aGlzLl9SPU8uUiksTy5TIGluc3RhbmNlb2YgSSYmKHRoaXMuX1M9Ty5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KE8uUik/Ty5SOk8uUmVuY29kZWQsdGhpcy5fU2VuY29k''@;'; put 'put ''ZWQ9QXJyYXkuaXNBcnJheShPLlMpP08uUzpPLlNlbmNvZGVkfUIoUCwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLEIoUCwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVk''@;'; put 'put ''KCkpfSksQihQLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxCKFAsIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxQLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sUC5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gXy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LHVlLmV4cG9ydHM9UH0sMTAzNzp1ZT0+e3VlLmV4''@;'; put 'put ''cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEi''@;'; put 'put ''XSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZj''@;'; put 'put ''NmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFk''@;'; put 'put ''OGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRi''@;'; put 'put ''M2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5''@;'; put 'put ''NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0''@;'; put 'put ''ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3''@;'; put 'put ''ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZk''@;'; put 'put ''IiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2Vj''@;'; put 'put ''OTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2''@;'; put 'put ''YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYy''@;'; put 'put ''MWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdm''@;'; put 'put ''YmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5''@;'; put 'put ''N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdm''@;'; put 'put ''MTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJd''@;'; put 'put ''LFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRi''@;'; put 'put ''YmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEw''@;'; put 'put ''YWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3''@;'; put 'put ''MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2Rk''@;'; put 'put ''MzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQx''@;'; put 'put ''MTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3''@;'; put 'put ''Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRi''@;'; put 'put ''IiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2''@;'; put 'put ''MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0Mjkx''@;'; put 'put ''YjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2Yjkz''@;'; put 'put ''NjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2Vh''@;'; put 'put ''MzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMz''@;'; put 'put ''YWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZh''@;'; put 'put ''ZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEi''@;'; put 'put ''XSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTEx''@;'; put 'put ''OGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgw''@;'; put 'put ''ZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUw''@;'; put 'put ''OTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2''@;'; put 'put ''YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhl''@;'; put 'put ''MjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBk''@;'; put 'put ''MWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwi''@;'; put 'put ''YzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNm''@;'; put 'put ''NTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYw''@;'; put 'put ''YzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3''@;'; put 'put ''YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0''@;'; put 'put ''MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1''@;'; put 'put ''NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3''@;'; put 'put ''MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0s''@;'; put 'put ''WyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThm''@;'; put 'put ''ZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRl''@;'; put 'put ''ODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhi''@;'; put 'put ''YTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1''@;'; put 'put ''MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRl''@;'; put 'put ''MGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZj''@;'; put 'put ''ZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYi''@;'; put 'put ''LCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdj''@;'; put 'put ''YzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBl''@;'; put 'put ''NjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdl''@;'; put 'put ''NGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4''@;'; put 'put ''OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2''@;'; put 'put ''OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBh''@;'; put 'put ''MzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1Zjhl''@;'; put 'put ''MGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4Nzcz''@;'; put 'put ''YzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1''@;'; put 'put ''OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQi''@;'; put 'put ''LCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWEx''@;'; put 'put ''Yzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhi''@;'; put 'put ''Y2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRh''@;'; put 'put ''YjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1''@;'; put 'put ''YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYw''@;'; put 'put ''Y2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNi''@;'; put 'put ''YTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJd''@;'; put 'put ''LFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEy''@;'; put 'put ''MTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJm''@;'; put 'put ''ODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1''@;'; put 'put ''NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJj''@;'; put 'put ''MDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2''@;'; put 'put ''ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAw''@;'; put 'put ''NzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwi''@;'; put 'put ''NWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUz''@;'; put 'put ''M2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4''@;'; put 'put ''YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMz''@;'; put 'put ''OGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZi''@;'; put 'put ''YzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5''@;'; put 'put ''NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkw''@;'; put 'put ''ODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsi''@;'; put 'put ''NWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5''@;'; put 'put ''ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0''@;'; put 'put ''MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNj''@;'; put 'put ''ODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNk''@;'; put 'put ''ODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEw''@;'; put 'put ''ZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThm''@;'; put 'put ''OTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwi''@;'; put 'put ''MTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEy''@;'; put 'put ''N2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRl''@;'; put 'put ''ZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5''@;'; put 'put ''MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5''@;'; put 'put ''OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBi''@;'; put 'put ''Y2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkx''@;'; put 'put ''NTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxb''@;'; put 'put ''IjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2Vi''@;'; put 'put ''NDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5''@;'; put 'put ''YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2Nk''@;'; put 'put ''M2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZi''@;'; put 'put ''Mzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0''@;'; put 'put ''N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4''@;'; put 'put ''OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJm''@;'; put 'put ''M2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJh''@;'; put 'put ''MmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4''@;'; put 'put ''NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcy''@;'; put 'put ''NDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVk''@;'; put 'put ''MTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJl''@;'; put 'put ''NGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEw''@;'; put 'put ''Y2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFl''@;'; put 'put ''MzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBh''@;'; put 'put ''MGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1''@;'; put 'put ''ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5''@;'; put 'put ''MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2Nl''@;'; put 'put ''NjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2Yzlj''@;'; put 'put ''ZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVl''@;'; put 'put ''YTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3''@;'; put 'put ''ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYw''@;'; put 'put ''YjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQi''@;'; put 'put ''XSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5''@;'; put 'put ''OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDEx''@;'; put 'put ''OWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4Zjdm''@;'; put 'put ''ZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMx''@;'; put 'put ''Mzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVk''@;'; put 'put ''MjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1''@;'; put 'put ''ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIi''@;'; put 'put ''LCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4''@;'; put 'put ''Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAx''@;'; put 'put ''YzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIz''@;'; put 'put ''YTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJk''@;'; put 'put ''ZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1''@;'; put 'put ''NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIx''@;'; put 'put ''YTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUi''@;'; put 'put ''XSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4''@;'; put 'put ''OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5''@;'; put 'put ''MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWVi''@;'; put 'put ''YjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJl''@;'; put 'put ''ZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIw''@;'; put 'put ''YjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2Qw''@;'; put 'put ''ZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkz''@;'; put 'put ''IiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1''@;'; put 'put ''NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3''@;'; put 'put ''OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2Jl''@;'; put 'put ''ZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYw''@;'; put 'put ''Yjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdj''@;'; put 'put ''YjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1''@;'; put 'put ''N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJd''@;'; put 'put ''LFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMz''@;'; put 'put ''MGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5''@;'; put 'put ''ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3''@;'; put 'put ''NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4''@;'; put 'put ''MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3''@;'; put 'put ''NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThl''@;'; put 'put ''NTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5''@;'; put 'put ''IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2Yz''@;'; put 'put ''MTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2''@;'; put 'put ''MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZl''@;'; put 'put ''NjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2''@;'; put 'put ''OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRj''@;'; put 'put ''OTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDk1MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YLF89eSgzNzg1KSxnPXkoOTc0NiksQj15KDQ1MDQpO0kuYXNzZXJ0PWcsSS50b0FycmF5PUIudG9BcnJheSxJLnpl''@;'; put 'put ''cm8yPUIuemVybzIsSS50b0hleD1CLnRvSGV4LEkuZW5jb2RlPUIuZW5jb2RlLEkuZ2V0TkFGPWZ1bmN0aW9uIHcoTixMLEspe3ZhciBXLFU9bmV3IEFycmF5KE1hdGgubWF4KE4uYml0TGVuZ3RoKCksSykrMSk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crPTEpVVtXXT0wO3ZhciBZPTE8PEwrMSxx''@;'; put 'put ''PU4uY2xvbmUoKTtmb3IoVz0wO1c8VS5sZW5ndGg7VysrKXt2YXIgZWUsSj1xLmFuZGxuKFktMSk7cS5pc09kZCgpP3EuaXN1Ym4oZWU9Sj4oWT4+MSktMT8oWT4+MSktSjpKKTplZT0wLFVbV109ZWUscS5pdXNocm4oMSl9cmV0dXJuIFV9LEkuZ2V0SlNGPWZ1bmN0aW9uIFAoTixMKXt2YXIg''@;'; put 'put ''Sz1bW10sW11dO049Ti5jbG9uZSgpLEw9TC5jbG9uZSgpO2Zvcih2YXIgWSxVPTAsVz0wO04uY21wbigtVSk+MHx8TC5jbXBuKC1XKT4wOyl7dmFyIEosbmUscT1OLmFuZGxuKDMpK1UmMyxlZT1MLmFuZGxuKDMpK1cmMzszPT09cSYmKHE9LTEpLDM9PT1lZSYmKGVlPS0xKSxKPTEmcT8zIT0o''@;'; put 'put ''WT1OLmFuZGxuKDcpK1UmNykmJjUhPT1ZfHwyIT09ZWU/cTotcTowLEtbMF0ucHVzaChKKSxuZT0xJmVlPzMhPShZPUwuYW5kbG4oNykrVyY3KSYmNSE9PVl8fDIhPT1xP2VlOi1lZTowLEtbMV0ucHVzaChuZSksMipVPT09SisxJiYoVT0xLVUpLDIqVz09PW5lKzEmJihXPTEtVyksTi5pdXNo''@;'; put 'put ''cm4oMSksTC5pdXNocm4oMSl9cmV0dXJuIEt9LEkuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9Il8iK0w7Ti5wcm90b3R5cGVbTF09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tVXT90aGlzW1VdOnRoaXNbVV09Sy5jYWxsKHRoaXMpfX0sSS5wYXJzZUJ5''@;'; put 'put ''dGVzPWZ1bmN0aW9uIE8oTil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBOP0kudG9BcnJheShOLCJoZXgiKTpOfSxJLmludEZyb21MRT1mdW5jdGlvbiB6KE4pe3JldHVybiBuZXcgXyhOLCJoZXgiLCJsZSIpfX0sMzc4NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBl''@;'; put 'put ''LmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5f''@;'; put 'put ''aW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDU1NjgpLkJ1''@;'; put 'put ''ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCks''@;'; put 'put ''eH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rp''@;'; put 'put ''b24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAs''@;'; put 'put ''Yix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4''@;'; put 'put ''KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRz''@;'; put 'put ''PVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQm''@;'; put 'put ''NjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0''@;'; put 'put ''aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJl''@;'; put 'put ''Ij09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUi''@;'; put 'put ''PT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIg''@;'; put 'put ''aixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/Yisx''@;'; put 'put ''OmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jk''@;'; put 'put ''cz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhp''@;'; put 'put ''cy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRz''@;'; put 'put ''WzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMu''@;'; put 'put ''bGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0''@;'; put 'put ''aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIp''@;'; put 'put ''K3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1''@;'; put 'put ''NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1''@;'; put 'put ''bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4''@;'; put 'put ''ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNb''@;'; put 'put ''c2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShw''@;'; put 'put ''PXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9''@;'; put 'put ''MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2''@;'; put 'put ''KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3Io''@;'; put 'put ''dGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9''@;'; put 'put ''dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVt''@;'; put 'put ''YmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBn''@;'; put 'put ''KHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRl''@;'; put 'put ''TGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNs''@;'; put 'put ''b25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNo''@;'; put 'put ''cm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9''@;'; put 'put ''NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9Nyxi''@;'; put 'put ''Pj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEp''@;'; put 'put ''K2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3''@;'; put 'put ''LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9u''@;'; put 'put ''ZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90''@;'; put 'put ''b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxl''@;'; put 'put ''bmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''ZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4''@;'; put 'put ''KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIu''@;'; put 'put ''d29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlz''@;'; put 'put ''Ll9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5v''@;'; put 'put ''dG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/''@;'; put 'put ''dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3Vi''@;'; put 'put ''KHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlz''@;'; put 'put ''LEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4''@;'; put 'put ''NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07''@;'; put 'put ''cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtw''@;'; put 'put ''Lm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9''@;'; put 'put ''dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQu''@;'; put 'put ''d29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5n''@;'; put 'put ''dGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90''@;'; put 'put ''Pj4+MTMsWGU9MHxDWzNdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEz''@;'; put 'put ''LER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLHNpPTB8VFsxXSxRdD04MTkxJnNpLHNuPXNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0w''@;'; put 'put ''fFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhd''@;'; put 'put ''LGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkr''@;'; put 'put ''TWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUs''@;'; put 'put ''UHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAs''@;'; put 'put ''dnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLFJ0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''SWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0''@;'; put 'put ''ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxo''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11''@;'; put 'put ''bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxo''@;'; put 'put ''bil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsV3QpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0''@;'; put 'put ''KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0''@;'; put 'put ''ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxo''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''JGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAs''@;'; put 'put ''TmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChN''@;'; put 'put ''ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZu''@;'; put 'put ''KXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJl''@;'; put 'put ''LHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChp''@;'; put 'put ''dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQs''@;'; put 'put ''VXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChp''@;'; put 'put ''dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZu''@;'; put 'put ''KXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAs''@;'; put 'put ''TGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDAp''@;'; put 'put ''K01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5''@;'; put 'put ''XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVu''@;'; put 'put ''Y3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2''@;'; put 'put ''Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4''@;'; put 'put ''NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4''@;'; put 'put ''NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9y''@;'; put 'put ''KHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1m''@;'; put 'put ''dW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1B''@;'; put 'put ''LHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSxNZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKk1lO01lPXRlKk1lK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUrTWUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pd''@;'; put 'put ''PUplLU1lLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEou''@;'; put 'put ''cHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEz''@;'; put 'put ''Yj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBl''@;'; put 'put ''LmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90''@;'; put 'put ''b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJC''@;'; put 'put ''VChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5n''@;'; put 'put ''dGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dl''@;'; put 'put ''XT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5i''@;'; put 'put ''Lm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9''@;'; put 'put ''Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3''@;'; put 'put ''IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09''@;'; put 'put ''YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYm''@;'; put 'put ''cD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+''@;'; put 'put ''PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIl''@;'; put 'put ''MjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9''@;'; put 'put ''SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49''@;'; put 'put ''MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5n''@;'; put 'put ''dGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnBy''@;'; put 'put ''b3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rp''@;'; put 'put ''b24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxl''@;'; put 'put ''bmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAt''@;'; put 'put ''KDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIg''@;'; put 'put ''Yj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgs''@;'; put 'put ''YisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTww''@;'; put 'put ''O2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlz''@;'; put 'put ''LndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMu''@;'; put 'put ''bGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxI''@;'; put 'put ''PTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0''@;'; put 'put ''aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1F''@;'; put 'put ''LTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5l''@;'; put 'put ''Z2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWIm''@;'; put 'put ''JihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5k''@;'; put 'put ''aXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxl''@;'; put 'put ''bmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1sw''@;'; put 'put ''XSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJv''@;'; put 'put ''dG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRo''@;'; put 'put ''aXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRp''@;'; put 'put ''di5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3Jl''@;'; put 'put ''dHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0''@;'; put 'put ''aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTsh''@;'; put 'put ''Yi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVz''@;'; put 'put ''aHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEp''@;'; put 'put ''O2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5p''@;'; put 'put ''c1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jk''@;'; put 'put ''c1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0g''@;'; put 'put ''PjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1m''@;'; put 'put ''dW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4o''@;'; put 'put ''KTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSli''@;'; put 'put ''cmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''T2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1i''@;'; put 'put ''KS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRz''@;'; put 'put ''W0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlv''@;'; put 'put ''bihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmln''@;'; put 'put ''Iik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxl''@;'; put 'put ''bmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihw''@;'; put 'put ''KTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJl''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv''@;'; put 'put ''c2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZy''@;'; put 'put ''b20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlz''@;'; put 'put ''Ll9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGco''@;'; put 'put ''dGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5p''@;'; put 'put ''bXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRT''@;'; put 'put ''cXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk''@;'; put 'put ''Lm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxw''@;'; put 'put ''MTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5j''@;'; put 'put ''dGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTki''@;'; put 'put ''LCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4o''@;'; put 'put ''MSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hp''@;'; put 'put ''ZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90''@;'; put 'put ''eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVy''@;'; put 'put ''biAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11''@;'; put 'put ''bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0''@;'; put 'put ''aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+''@;'; put 'put ''MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7''@;'; put 'put ''eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3Ro''@;'; put 'put ''LS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1''@;'; put 'put ''cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7''@;'; put 'put ''ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVz''@;'; put 'put ''IiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVk''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5''@;'; put 'put ''cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49''@;'; put 'put ''MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIo''@;'; put 'put ''Yik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNs''@;'; put 'put ''b25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFy''@;'; put 'put ''IHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQo''@;'; put 'put ''dGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10''@;'; put 'put ''aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4o''@;'; put 'put ''c2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1sw''@;'; put 'put ''XT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2''@;'; put 'put ''YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0y''@;'; put 'put ''Nn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGws''@;'; put 'put ''Yn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBi''@;'; put 'put ''PXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNr''@;'; put 'put ''bih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5t''@;'; put 'put ''KSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmlt''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90''@;'; put 'put ''eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw0NDI5OnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ITE7aWYo''@;'; put 'put ''WCl0cnl7WCh7fSwiYSIse3ZhbHVlOjF9KX1jYXRjaHtYPSExfXVlLmV4cG9ydHM9WH0sMzk4MTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUV2YWxFcnJvcn0sMTY0ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUVycm9yfSw0NzI2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4''@;'; put 'put ''cG9ydHM9UmFuZ2VFcnJvcn0sNjcxMjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVJlZmVyZW5jZUVycm9yfSwzNDY0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9U3ludGF4RXJyb3J9LDQ0NTM6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1UeXBlRXJyb3J9LDM5MTU6''@;'; put 'put ''dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1VUklFcnJvcn0sODg5Mjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU9iamVjdH0sNzE4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQixJPXkoNTEwOCksXz0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxs''@;'; put 'put ''LGc9XyYmImZ1bmN0aW9uIj09dHlwZW9mIF8uYXBwbHk/Xy5hcHBseTpmdW5jdGlvbihfZSxUZSxTZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKF9lLFRlLFNlKX07Qj1fJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5vd25LZXlzP18ub3duS2V5czpPYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKF9lKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoX2UpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKF9lKSl9OmZ1bmN0aW9uKF9lKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoX2UpfTt2YXIg''@;'; put 'put ''UD1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UhPV9lfTtmdW5jdGlvbiBGKCl7Ri5pbml0LmNhbGwodGhpcyl9dWUuZXhwb3J0cz1GLHVlLmV4cG9ydHMub25jZT1mdW5jdGlvbiBuZShtZSxfZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFRlLFNlKXtmdW5jdGlv''@;'; put 'put ''biB6ZShwKXttZS5yZW1vdmVMaXN0ZW5lcihfZSxWKSxTZShwKX1mdW5jdGlvbiBWKCl7ImZ1bmN0aW9uIj09dHlwZW9mIG1lLnJlbW92ZUxpc3RlbmVyJiZtZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHplKSxUZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfWxlKG1lLF9lLFYse29uY2U6''@;'; put 'put ''ITB9KSwiZXJyb3IiIT09X2UmJmZ1bmN0aW9uIGllKG1lLF9lLFRlKXsiZnVuY3Rpb24iPT10eXBlb2YgbWUub24mJmxlKG1lLCJlcnJvciIsX2UsVGUpfShtZSx6ZSx7b25jZTohMH0pfSl9LEYuRXZlbnRFbWl0dGVyPUYsRi5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsRi5wcm90b3R5cGUu''@;'; put 'put ''X2V2ZW50c0NvdW50PTAsRi5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIE89MTA7ZnVuY3Rpb24geihtZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG1lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlv''@;'; put 'put ''bi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBtZSl9ZnVuY3Rpb24gTihtZSl7cmV0dXJuIHZvaWQgMD09PW1lLl9tYXhMaXN0ZW5lcnM/Ri5kZWZhdWx0TWF4TGlzdGVuZXJzOm1lLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gTChtZSxfZSxUZSxTZSl7dmFyIHplLFYscDtpZih6KFRlKSx2b2lk''@;'; put 'put ''IDA9PT0oVj1tZS5fZXZlbnRzKT8oVj1tZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksbWUuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1WLm5ld0xpc3RlbmVyJiYobWUuZW1pdCgibmV3TGlzdGVuZXIiLF9lLFRlLmxpc3RlbmVyP1RlLmxpc3RlbmVyOlRlKSxWPW1lLl9ldmVudHMp''@;'; put 'put ''LHA9VltfZV0pLHZvaWQgMD09PXApcD1WW19lXT1UZSwrK21lLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBwP3A9VltfZV09U2U/W1RlLHBdOltwLFRlXTpTZT9wLnVuc2hpZnQoVGUpOnAucHVzaChUZSksKHplPU4obWUpKT4wJiZwLmxlbmd0aD56ZSYmIXAud2Fy''@;'; put 'put ''bmVkKXtwLndhcm5lZD0hMDt2YXIgYj1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitwLmxlbmd0aCsiICIrU3RyaW5nKF9lKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2Ug''@;'; put 'put ''bGltaXQiKTtiLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsYi5lbWl0dGVyPW1lLGIudHlwZT1fZSxiLmNvdW50PXAubGVuZ3RoLGZ1bmN0aW9uIHcobWUpe0kmJkkud2FybiYmSS53YXJuKG1lKX0oYil9cmV0dXJuIG1lfWZ1bmN0aW9uIEsoKXtpZighdGhpcy5maXJlZCly''@;'; put 'put ''ZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMp''@;'; put 'put ''fWZ1bmN0aW9uIFUobWUsX2UsVGUpe3ZhciBTZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6bWUsdHlwZTpfZSxsaXN0ZW5lcjpUZX0semU9Sy5iaW5kKFNlKTtyZXR1cm4gemUubGlzdGVuZXI9VGUsU2Uud3JhcEZuPXplLHplfWZ1bmN0aW9uIFcobWUsX2UsVGUpe3ZhciBTZT1t''@;'; put 'put ''ZS5fZXZlbnRzO2lmKHZvaWQgMD09PVNlKXJldHVybltdO3ZhciB6ZT1TZVtfZV07cmV0dXJuIHZvaWQgMD09PXplP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiB6ZT9UZT9bemUubGlzdGVuZXJ8fHplXTpbemVdOlRlP2Z1bmN0aW9uIEoobWUpe2Zvcih2YXIgX2U9bmV3IEFycmF5KG1lLmxlbmd0''@;'; put 'put ''aCksVGU9MDtUZTxfZS5sZW5ndGg7KytUZSlfZVtUZV09bWVbVGVdLmxpc3RlbmVyfHxtZVtUZV07cmV0dXJuIF9lfSh6ZSk6cSh6ZSx6ZS5sZW5ndGgpfWZ1bmN0aW9uIFkobWUpe3ZhciBfZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09X2Upe3ZhciBUZT1fZVttZV07aWYoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFRlKXJldHVybiAxO2lmKHZvaWQgMCE9PVRlKXJldHVybiBUZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gcShtZSxfZSl7Zm9yKHZhciBUZT1uZXcgQXJyYXkoX2UpLFNlPTA7U2U8X2U7KytTZSlUZVtTZV09bWVbU2VdO3JldHVybiBUZX1mdW5jdGlvbiBsZShtZSxfZSxU''@;'; put 'put ''ZSxTZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG1lLm9uKVNlLm9uY2U/bWUub25jZShfZSxUZSk6bWUub24oX2UsVGUpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG1lLmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0''@;'; put 'put ''IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIG1lKTttZS5hZGRFdmVudExpc3RlbmVyKF9lLGZ1bmN0aW9uIHplKFYpe1NlLm9uY2UmJm1lLnJlbW92ZUV2ZW50TGlzdGVuZXIoX2UsemUpLFRlKFYpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJk''@;'; put 'put ''ZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT30sc2V0OmZ1bmN0aW9uKG1lKXtpZigibnVtYmVyIiE9dHlwZW9mIG1lfHxtZTwwfHxQKG1lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVu''@;'; put 'put ''ZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK21lKyIuIik7Tz1tZX19KSxGLmluaXQ9ZnVuY3Rpb24oKXsodm9pZCAwPT09dGhpcy5fZXZlbnRzfHx0aGlzLl9ldmVudHM9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhp''@;'; put 'put ''cykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LEYucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihfZSl7aWYoIm51bWJl''@;'; put 'put ''ciIhPXR5cGVvZiBfZXx8X2U8MHx8UChfZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytfZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9X2Us''@;'; put 'put ''dGhpc30sRi5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE4odGhpcyl9LEYucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oX2Upe2Zvcih2YXIgVGU9W10sU2U9MTtTZTxhcmd1bWVudHMubGVuZ3RoO1NlKyspVGUucHVzaChhcmd1bWVudHNbU2VdKTt2YXIgemU9''@;'; put 'put ''ImVycm9yIj09PV9lLFY9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PVYpemU9emUmJnZvaWQgMD09PVYuZXJyb3I7ZWxzZSBpZighemUpcmV0dXJuITE7aWYoemUpe3ZhciBwO2lmKFRlLmxlbmd0aD4wJiYocD1UZVswXSkscCBpbnN0YW5jZW9mIEVycm9yKXRocm93IHA7dmFyIGI9bmV3IEVy''@;'; put 'put ''cm9yKCJVbmhhbmRsZWQgZXJyb3IuIisocD8iICgiK3AubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBiLmNvbnRleHQ9cCxifXZhciB4PVZbX2VdO2lmKHZvaWQgMD09PXgpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHgpZyh4LHRoaXMsVGUpO2Vsc2V7dmFyIEM9eC5sZW5ndGgsVD1x''@;'; put 'put ''KHgsQyk7Zm9yKFNlPTA7U2U8QzsrK1NlKWcoVFtTZV0sdGhpcyxUZSl9cmV0dXJuITB9LEYucHJvdG90eXBlLm9uPUYucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4gTCh0aGlzLF9lLFRlLCExKX0sRi5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0''@;'; put 'put ''aW9uKF9lLFRlKXtyZXR1cm4gTCh0aGlzLF9lLFRlLCEwKX0sRi5wcm90b3R5cGUub25jZT1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIHooVGUpLHRoaXMub24oX2UsVSh0aGlzLF9lLFRlKSksdGhpc30sRi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0''@;'; put 'put ''dXJuIHooVGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKF9lLFUodGhpcyxfZSxUZSkpLHRoaXN9LEYucHJvdG90eXBlLm9mZj1GLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7dmFyIFNlLHplLFYscCxiO2lmKHooVGUpLHZvaWQgMD09PSh6ZT10aGlzLl9ldmVudHMp''@;'; put 'put ''KXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShTZT16ZVtfZV0pKXJldHVybiB0aGlzO2lmKFNlPT09VGV8fFNlLmxpc3RlbmVyPT09VGUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIHplW19lXSx6ZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''ciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsX2UsU2UubGlzdGVuZXJ8fFRlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgU2Upe2ZvcihWPS0xLHA9U2UubGVuZ3RoLTE7cD49MDtwLS0paWYoU2VbcF09PT1UZXx8U2VbcF0ubGlzdGVuZXI9PT1UZSl7Yj1TZVtwXS5saXN0ZW5l''@;'; put 'put ''cixWPXA7YnJlYWt9aWYoVjwwKXJldHVybiB0aGlzOzA9PT1WP1NlLnNoaWZ0KCk6ZnVuY3Rpb24gZWUobWUsX2Upe2Zvcig7X2UrMTxtZS5sZW5ndGg7X2UrKyltZVtfZV09bWVbX2UrMV07bWUucG9wKCl9KFNlLFYpLDE9PT1TZS5sZW5ndGgmJih6ZVtfZV09U2VbMF0pLHZvaWQgMCE9PXpl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixfZSxifHxUZSl9cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihfZSl7dmFyIFRlLFNlLHplO2lmKHZvaWQgMD09PShTZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlz''@;'; put 'put ''O2lmKHZvaWQgMD09PVNlLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09U2VbX2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVu''@;'; put 'put ''dHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgU2VbX2VdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgcCxWPU9iamVjdC5rZXlzKFNlKTtmb3IoemU9MDt6ZTxWLmxlbmd0aDsrK3plKSJyZW1vdmVMaXN0ZW5lciIhPT0ocD1WW3plXSkmJnRoaXMucmVtb3ZlQWxsTGlz''@;'; put 'put ''dGVuZXJzKHApO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKFRlPVNlW19lXSkpdGhpcy5yZW1vdmVMaXN0''@;'; put 'put ''ZW5lcihfZSxUZSk7ZWxzZSBpZih2b2lkIDAhPT1UZSlmb3IoemU9VGUubGVuZ3RoLTE7emU+PTA7emUtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKF9lLFRlW3plXSk7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihfZSl7cmV0dXJuIFcodGhpcyxfZSwhMCl9LEYu''@;'; put 'put ''cHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihfZSl7cmV0dXJuIFcodGhpcyxfZSwhMSl9LEYubGlzdGVuZXJDb3VudD1mdW5jdGlvbihtZSxfZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG1lLmxpc3RlbmVyQ291bnQ/bWUubGlzdGVuZXJDb3VudChfZSk6WS5jYWxsKG1lLF9l''@;'; put 'put ''KX0sRi5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1ZLEYucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9CKHRoaXMuX2V2ZW50cyk6W119fSwzMDQ4Oih1ZSxYLHkpPT57dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDIzMTgpO3VlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24gZyhCLHcsUCxGKXtpZihJLmlzQnVmZmVyKEIpfHwoQj1JLmZyb20oQiwiYmluYXJ5IikpLHcmJihJLmlzQnVmZmVyKHcpfHwodz1JLmZyb20odywiYmluYXJ5IikpLDghPT13Lmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZl''@;'; put 'put ''ciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIE89UC84LHo9SS5hbGxvYyhPKSxOPUkuYWxsb2MoRnx8MCksTD1JLmFsbG9jKDApO08+MHx8Rj4wOyl7dmFyIEs9bmV3IF87Sy51cGRhdGUoTCksSy51cGRhdGUoQiksdyYmSy51cGRhdGUodyksTD1LLmRpZ2VzdCgpO3ZhciBVPTA7aWYo''@;'; put 'put ''Tz4wKXt2YXIgVz16Lmxlbmd0aC1PO1U9TWF0aC5taW4oTyxMLmxlbmd0aCksTC5jb3B5KHosVywwLFUpLE8tPVV9aWYoVTxMLmxlbmd0aCYmRj4wKXt2YXIgWT1OLmxlbmd0aC1GLHE9TWF0aC5taW4oRixMLmxlbmd0aC1VKTtMLmNvcHkoTixZLFUsVStxKSxGLT1xfX1yZXR1cm4gTC5maWxs''@;'; put 'put ''KDApLHtrZXk6eixpdjpOfX19LDQwMjk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MzIwKSxfPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsZz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOLEwpe2lmKCFJKE4pKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBLO2FyZ3VtZW50cy5sZW5ndGg+PTMmJihLPUwpLGZ1bmN0aW9uIEYoTyl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PV8uY2FsbChPKX0oeik/ZnVuY3Rpb24oeixOLEwpe2Zvcih2YXIgSz0wLFU9ei5s''@;'; put 'put ''ZW5ndGg7SzxVO0srKylnLmNhbGwoeixLKSYmKG51bGw9PUw/Tih6W0tdLEsseik6Ti5jYWxsKEwseltLXSxLLHopKX0oeixOLEspOiJzdHJpbmciPT10eXBlb2Ygej9mdW5jdGlvbih6LE4sTCl7Zm9yKHZhciBLPTAsVT16Lmxlbmd0aDtLPFU7SysrKW51bGw9PUw/Tih6LmNoYXJBdChLKSxL''@;'; put 'put ''LHopOk4uY2FsbChMLHouY2hhckF0KEspLEsseil9KHosTixLKTpmdW5jdGlvbih6LE4sTCl7Zm9yKHZhciBLIGluIHopZy5jYWxsKHosSykmJihudWxsPT1MP04oeltLXSxLLHopOk4uY2FsbChMLHpbS10sSyx6KSl9KHosTixLKX19LDYyMzA6dWU9Pnt1ZS5leHBvcnRzPSJvYmplY3QiPT10''@;'; put 'put ''eXBlb2Ygc2VsZj9zZWxmLkZvcm1EYXRhOndpbmRvdy5Gb3JtRGF0YX0sMzg3MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2NvbnN0IF89eSg3NyksZz15KDI1MjApLEI9eSgxMzgxKS5ta2RpcnNTeW5jLHc9eSgzMTgpLnV0aW1lc01pbGxpc1N5bmMsUD15KDI3MzMp''@;'; put 'put ''O2Z1bmN0aW9uIE8oX2UsVGUsU2UsemUpe2NvbnN0IHA9KHplLmRlcmVmZXJlbmNlP18uc3RhdFN5bmM6Xy5sc3RhdFN5bmMpKFRlKTtpZihwLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGZ1bmN0aW9uIGVlKF9lLFRlLFNlLHplLFYpe3JldHVybiBUZT9uZShTZSx6ZSxWKTpmdW5jdGlvbiBKKF9l''@;'; put 'put ''LFRlLFNlLHplKXtyZXR1cm4gXy5ta2RpclN5bmMoU2UpLG5lKFRlLFNlLHplKSxZKFNlLF9lKX0oX2UubW9kZSxTZSx6ZSxWKX0ocCxfZSxUZSxTZSx6ZSk7aWYocC5pc0ZpbGUoKXx8cC5pc0NoYXJhY3RlckRldmljZSgpfHxwLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24geihf''@;'; put 'put ''ZSxUZSxTZSx6ZSxWKXtyZXR1cm4gVGU/ZnVuY3Rpb24gTihfZSxUZSxTZSx6ZSl7aWYoemUub3ZlcndyaXRlKXJldHVybiBfLnVubGlua1N5bmMoU2UpLEwoX2UsVGUsU2UsemUpO2lmKHplLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke1NlfScgYWxyZWFkeSBleGlzdHNgKX0o''@;'; put 'put ''X2UsU2UsemUsVik6TChfZSxTZSx6ZSxWKX0ocCxfZSxUZSxTZSx6ZSk7aWYocC5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBsZShfZSxUZSxTZSx6ZSl7bGV0IFY9Xy5yZWFkbGlua1N5bmMoVGUpO2lmKHplLmRlcmVmZXJlbmNlJiYoVj1nLnJlc29sdmUoSS5jd2QoKSxWKSks''@;'; put 'put ''X2Upe2xldCBwO3RyeXtwPV8ucmVhZGxpbmtTeW5jKFNlKX1jYXRjaChiKXtpZigiRUlOVkFMIj09PWIuY29kZXx8IlVOS05PV04iPT09Yi5jb2RlKXJldHVybiBfLnN5bWxpbmtTeW5jKFYsU2UpO3Rocm93IGJ9aWYoemUuZGVyZWZlcmVuY2UmJihwPWcucmVzb2x2ZShJLmN3ZCgpLHApKSxQ''@;'; put 'put ''LmlzU3JjU3ViZGlyKFYscCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtWfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtwfScuYCk7aWYoUC5pc1NyY1N1YmRpcihwLFYpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtwfScgd2l0aCAnJHtW''@;'; put 'put ''fScuYCk7cmV0dXJuIGZ1bmN0aW9uIG1lKF9lLFRlKXtyZXR1cm4gXy51bmxpbmtTeW5jKFRlKSxfLnN5bWxpbmtTeW5jKF9lLFRlKX0oVixTZSl9cmV0dXJuIF8uc3ltbGlua1N5bmMoVixTZSl9KF9lLFRlLFNlLHplKTt0aHJvdyBwLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29w''@;'; put 'put ''eSBhIHNvY2tldCBmaWxlOiAke1RlfWApOnAuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtUZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtUZX1gKX1mdW5jdGlvbiBMKF9lLFRlLFNlLHplKXtyZXR1cm4gXy5jb3B5RmlsZVN5bmMoVGUsU2Up''@;'; put 'put ''LHplLnByZXNlcnZlVGltZXN0YW1wcyYmZnVuY3Rpb24gSyhfZSxUZSxTZSl7KGZ1bmN0aW9uIFUoX2Upe3JldHVybiEoMTI4Jl9lKX0pKF9lKSYmZnVuY3Rpb24gVyhfZSxUZSl7WShfZSwxMjh8VGUpfShTZSxfZSksZnVuY3Rpb24gcShfZSxUZSl7Y29uc3QgU2U9Xy5zdGF0U3luYyhfZSk7''@;'; put 'put ''dyhUZSxTZS5hdGltZSxTZS5tdGltZSl9KFRlLFNlKX0oX2UubW9kZSxUZSxTZSksWShTZSxfZS5tb2RlKX1mdW5jdGlvbiBZKF9lLFRlKXtyZXR1cm4gXy5jaG1vZFN5bmMoX2UsVGUpfWZ1bmN0aW9uIG5lKF9lLFRlLFNlKXtjb25zdCB6ZT1fLm9wZW5kaXJTeW5jKF9lKTt0cnl7bGV0IFY7''@;'; put 'put ''Zm9yKDtudWxsIT09KFY9emUucmVhZFN5bmMoKSk7KWllKFYubmFtZSxfZSxUZSxTZSl9ZmluYWxseXt6ZS5jbG9zZVN5bmMoKX19ZnVuY3Rpb24gaWUoX2UsVGUsU2UsemUpe2NvbnN0IFY9Zy5qb2luKFRlLF9lKSxwPWcuam9pbihTZSxfZSk7aWYoemUuZmlsdGVyJiYhemUuZmlsdGVyKFYs''@;'; put 'put ''cCkpcmV0dXJuO2NvbnN0e2Rlc3RTdGF0OmJ9PVAuY2hlY2tQYXRoc1N5bmMoVixwLCJjb3B5Iix6ZSk7cmV0dXJuIE8oYixWLHAsemUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gRihfZSxUZSxTZSl7ImZ1bmN0aW9uIj09dHlwZW9mIFNlJiYoU2U9e2ZpbHRlcjpTZX0pLChTZT1TZXx8e30pLmNs''@;'; put 'put ''b2JiZXI9ISgiY2xvYmJlciJpbiBTZSl8fCEhU2UuY2xvYmJlcixTZS5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBTZT8hIVNlLm92ZXJ3cml0ZTpTZS5jbG9iYmVyLFNlLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09SS5hcmNoJiZJLmVtaXRXYXJuaW5nKCJVc2luZyB0aGUgcHJlc2Vy''@;'; put 'put ''dmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cblx0c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAyIik7Y29uc3R7c3JjU3Rh''@;'; put 'put ''dDp6ZSxkZXN0U3RhdDpWfT1QLmNoZWNrUGF0aHNTeW5jKF9lLFRlLCJjb3B5IixTZSk7aWYoUC5jaGVja1BhcmVudFBhdGhzU3luYyhfZSx6ZSxUZSwiY29weSIpLFNlLmZpbHRlciYmIVNlLmZpbHRlcihfZSxUZSkpcmV0dXJuO2NvbnN0IHA9Zy5kaXJuYW1lKFRlKTtyZXR1cm4gXy5leGlz''@;'; put 'put ''dHNTeW5jKHApfHxCKHApLE8oVixfZSxUZSxTZSl9fSw3MTg5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7Y29uc3QgXz15KDc3NDkpLGc9eSgyNTIwKSx7bWtkaXJzOkJ9PXkoMTM4MSkse3BhdGhFeGlzdHM6d309eSg5MjU3KSx7dXRpbWVzTWlsbGlzOlB9PXkoMzE4''@;'; put 'put ''KSxGPXkoMjczMyk7ZnVuY3Rpb24geigpe3JldHVybih6PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZT17fSl7ImZ1bmN0aW9uIj09dHlwZW9mIHplJiYoemU9e2ZpbHRlcjp6ZX0pLHplLmNsb2JiZXI9ISgiY2xvYmJlciJpbiB6ZSl8fCEhemUuY2xvYmJlcix6ZS5vdmVy''@;'; put 'put ''d3JpdGU9Im92ZXJ3cml0ZSJpbiB6ZT8hIXplLm92ZXJ3cml0ZTp6ZS5jbG9iYmVyLHplLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09SS5hcmNoJiZJLmVtaXRXYXJuaW5nKCJVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVj''@;'; put 'put ''b21tZW5kZWQ7XG5cblx0c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAxIik7Y29uc3R7c3JjU3RhdDpWLGRlc3RTdGF0OnB9PXlpZWxkIEYuY2hlY2tQYXRocyhUZSxTZSwiY29w''@;'; put 'put ''eSIsemUpO2lmKHlpZWxkIEYuY2hlY2tQYXJlbnRQYXRocyhUZSxWLFNlLCJjb3B5IiksISh5aWVsZCBOKFRlLFNlLHplKSkpcmV0dXJuO2NvbnN0IHg9Zy5kaXJuYW1lKFNlKTsoeWllbGQgdyh4KSl8fCh5aWVsZCBCKHgpKSx5aWVsZCBLKHAsVGUsU2UsemUpfSkpLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX1mdW5jdGlvbiBOKFRlLFNlLHplKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTCgpe3JldHVybihMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSl7cmV0dXJuIXplLmZpbHRlcnx8emUuZmlsdGVyKFRlLFNlKX0pKS5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSyhUZSxTZSx6ZSxWKXtyZXR1cm4gVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVSgpe3JldHVybiBVPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSxWKXtjb25zdCBiPXlpZWxkKFYuZGVyZWZlcmVuY2U/Xy5zdGF0''@;'; put 'put ''Ol8ubHN0YXQpKFNlKTtpZihiLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGZ1bmN0aW9uIGllKFRlLFNlLHplLFYscCl7cmV0dXJuIGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oYixUZSxTZSx6ZSxWKTtpZihiLmlzRmlsZSgpfHxiLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fGIuaXNCbG9ja0Rldmlj''@;'; put 'put ''ZSgpKXJldHVybiBmdW5jdGlvbiBXKFRlLFNlLHplLFYscCl7cmV0dXJuIFkuYXBwbHkodGhpcyxhcmd1bWVudHMpfShiLFRlLFNlLHplLFYpO2lmKGIuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gbWUoVGUsU2UsemUsVil7cmV0dXJuIF9lLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX0oVGUsU2UsemUsVik7dGhyb3cgYi5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtTZX1gKTpiLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7U2V9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7U2V9''@;'; put 'put ''YCl9KSxVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBZKCl7cmV0dXJuKFk9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplLFYscCl7aWYoIVNlKXJldHVybiBxKFRlLHplLFYscCk7aWYocC5vdmVyd3JpdGUpcmV0dXJuIHlpZWxkIF8udW5saW5rKFYpLHEoVGUs''@;'; put 'put ''emUsVixwKTtpZihwLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke1Z9JyBhbHJlYWR5IGV4aXN0c2ApfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBxKFRlLFNlLHplLFYpe3JldHVybiBlZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZWUoKXtyZXR1''@;'; put 'put ''cm4oZWU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplLFYpe2lmKHlpZWxkIF8uY29weUZpbGUoU2UsemUpLFYucHJlc2VydmVUaW1lc3RhbXBzKXsoZnVuY3Rpb24gSihUZSl7cmV0dXJuISgxMjgmVGUpfSkoVGUubW9kZSkmJih5aWVsZCBmdW5jdGlvbiBuZShUZSxTZSl7''@;'; put 'put ''cmV0dXJuIF8uY2htb2QoVGUsMTI4fFNlKX0oemUsVGUubW9kZSkpO2NvbnN0IHA9eWllbGQgXy5zdGF0KFNlKTt5aWVsZCBQKHplLHAuYXRpbWUscC5tdGltZSl9cmV0dXJuIF8uY2htb2QoemUsVGUubW9kZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGxlKCl7cmV0dXJu''@;'; put 'put ''KGxlPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSxWLHApe1NlfHwoeWllbGQgXy5ta2RpcihWKSk7Y29uc3QgYj1bXTt2YXIgVCx4PSExLEM9ITE7dHJ5e2Zvcih2YXIgaixIPV9hc3luY0l0ZXJhdG9yKHlpZWxkIF8ub3BlbmRpcih6ZSkpO3g9IShqPXlpZWxkIEgubmV4''@;'; put 'put ''dCgpKS5kb25lO3g9ITEpe2NvbnN0IEU9ai52YWx1ZTt7Y29uc3QgbT1nLmpvaW4oemUsRS5uYW1lKSxBPWcuam9pbihWLEUubmFtZSk7Yi5wdXNoKE4obSxBLHApLnRoZW4oYWU9PntpZihhZSlyZXR1cm4gRi5jaGVja1BhdGhzKG0sQSwiY29weSIscCkudGhlbigoe2Rlc3RTdGF0OnRlfSk9''@;'; put 'put ''PksodGUsbSxBLHApKX0pKX19fWNhdGNoKEUpe0M9ITAsVD1FfWZpbmFsbHl7dHJ5e3gmJm51bGwhPUgucmV0dXJuJiYoeWllbGQgSC5yZXR1cm4oKSl9ZmluYWxseXtpZihDKXRocm93IFR9fXlpZWxkIFByb21pc2UuYWxsKGIpLFNlfHwoeWllbGQgXy5jaG1vZChWLFRlLm1vZGUpKX0pKS5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gX2UoKXtyZXR1cm4oX2U9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplLFYpe2xldCBwPXlpZWxkIF8ucmVhZGxpbmsoU2UpO2lmKFYuZGVyZWZlcmVuY2UmJihwPWcucmVzb2x2ZShJLmN3ZCgpLHApKSwhVGUpcmV0dXJu''@;'; put 'put ''IF8uc3ltbGluayhwLHplKTtsZXQgYj1udWxsO3RyeXtiPXlpZWxkIF8ucmVhZGxpbmsoemUpfWNhdGNoKHgpe2lmKCJFSU5WQUwiPT09eC5jb2RlfHwiVU5LTk9XTiI9PT14LmNvZGUpcmV0dXJuIF8uc3ltbGluayhwLHplKTt0aHJvdyB4fWlmKFYuZGVyZWZlcmVuY2UmJihiPWcucmVzb2x2''@;'; put 'put ''ZShJLmN3ZCgpLGIpKSxGLmlzU3JjU3ViZGlyKHAsYikpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtwfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtifScuYCk7aWYoRi5pc1NyY1N1YmRpcihiLHApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAn''@;'; put 'put ''JHtifScgd2l0aCAnJHtwfScuYCk7cmV0dXJuIHlpZWxkIF8udW5saW5rKHplKSxfLnN5bWxpbmsocCx6ZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gTyhUZSxTZSl7cmV0dXJuIHouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sNjQ2NDoodWUsWCx5KT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2U7dWUuZXhwb3J0cz17Y29weTpJKHkoNzE4OSkpLGNvcHlTeW5jOnkoMzg3Myl9fSw1NTkwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoNzc0OSksZz15KDI1MjAp''@;'; put 'put ''LEI9eSgxMzgxKSx3PXkoNDU0MiksUD1JKGZ1bmN0aW9uKCl7dmFyIE89X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE4pe2xldCBMO3RyeXtMPXlpZWxkIF8ucmVhZGRpcihOKX1jYXRjaHtyZXR1cm4gQi5ta2RpcnMoTil9cmV0dXJuIFByb21pc2UuYWxsKEwubWFwKEs9PncucmVtb3Zl''@;'; put 'put ''KGcuam9pbihOLEspKSkpfSk7cmV0dXJuIGZ1bmN0aW9uIHooTil7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej1fLnJlYWRkaXJTeW5jKE8pfWNhdGNoe3JldHVybiBCLm1rZGlyc1N5bmMoTyl9ei5mb3JFYWNoKE49PntOPWcu''@;'; put 'put ''am9pbihPLE4pLHcucmVtb3ZlU3luYyhOKX0pfXVlLmV4cG9ydHM9e2VtcHR5RGlyU3luYzpGLGVtcHR5ZGlyU3luYzpGLGVtcHR5RGlyOlAsZW1wdHlkaXI6UH19LDY1MzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlLF89eSgyNTIwKSxnPXko''@;'; put 'put ''Nzc0OSksQj15KDEzODEpO2Z1bmN0aW9uIFAoKXtyZXR1cm4oUD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTyl7bGV0IHo7dHJ5e3o9eWllbGQgZy5zdGF0KE8pfWNhdGNoe31pZih6JiZ6LmlzRmlsZSgpKXJldHVybjtjb25zdCBOPV8uZGlybmFtZShPKTtsZXQgTD1udWxsO3RyeXtM''@;'; put 'put ''PXlpZWxkIGcuc3RhdChOKX1jYXRjaChLKXtpZigiRU5PRU5UIj09PUsuY29kZSlyZXR1cm4geWllbGQgQi5ta2RpcnMoTiksdm9pZCh5aWVsZCBnLndyaXRlRmlsZShPLCIiKSk7dGhyb3cgS31MLmlzRGlyZWN0b3J5KCk/eWllbGQgZy53cml0ZUZpbGUoTywiIik6eWllbGQgZy5yZWFkZGly''@;'; put 'put ''KE4pfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtjcmVhdGVGaWxlOkkoZnVuY3Rpb24gdyhPKXtyZXR1cm4gUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVGaWxlU3luYzpmdW5jdGlvbiBGKE8pe2xldCB6O3RyeXt6PWcuc3RhdFN5bmMoTyl9Y2F0Y2h7fWlm''@;'; put 'put ''KHomJnouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IE49Xy5kaXJuYW1lKE8pO3RyeXtnLnN0YXRTeW5jKE4pLmlzRGlyZWN0b3J5KCl8fGcucmVhZGRpclN5bmMoTil9Y2F0Y2goTCl7aWYoIUx8fCJFTk9FTlQiIT09TC5jb2RlKXRocm93IEw7Qi5ta2RpcnNTeW5jKE4pfWcud3JpdGVGaWxlU3lu''@;'; put 'put ''YyhPLCIiKX19fSwxNzIwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0e2NyZWF0ZUZpbGU6SSxjcmVhdGVGaWxlU3luYzpffT15KDY1MzApLHtjcmVhdGVMaW5rOmcsY3JlYXRlTGlua1N5bmM6Qn09eSg0MTQ3KSx7Y3JlYXRlU3ltbGluazp3LGNyZWF0ZVN5bWxpbmtTeW5jOlB9PXko''@;'; put 'put ''MzYzNSk7dWUuZXhwb3J0cz17Y3JlYXRlRmlsZTpJLGNyZWF0ZUZpbGVTeW5jOl8sZW5zdXJlRmlsZTpJLGVuc3VyZUZpbGVTeW5jOl8sY3JlYXRlTGluazpnLGNyZWF0ZUxpbmtTeW5jOkIsZW5zdXJlTGluazpnLGVuc3VyZUxpbmtTeW5jOkIsY3JlYXRlU3ltbGluazp3LGNyZWF0ZVN5bWxp''@;'; put 'put ''bmtTeW5jOlAsZW5zdXJlU3ltbGluazp3LGVuc3VyZVN5bWxpbmtTeW5jOlB9fSw0MTQ3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoMjUyMCksZz15KDc3NDkpLEI9eSgxMzgxKSx7cGF0aEV4aXN0czp3fT15KDkyNTcpLHthcmVJZGVu''@;'; put 'put ''dGljYWw6UH09eSgyNzMzKTtmdW5jdGlvbiBPKCl7cmV0dXJuKE89X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE4sTCl7bGV0IEssVTt0cnl7Sz15aWVsZCBnLmxzdGF0KEwpfWNhdGNoe310cnl7VT15aWVsZCBnLmxzdGF0KE4pfWNhdGNoKHEpe3Rocm93IHEubWVzc2FnZT1xLm1lc3Nh''@;'; put 'put ''Z2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIikscX1pZihLJiZQKFUsSykpcmV0dXJuO2NvbnN0IFc9Xy5kaXJuYW1lKEwpOyh5aWVsZCB3KFcpKXx8KHlpZWxkIEIubWtkaXJzKFcpKSx5aWVsZCBnLmxpbmsoTixMKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17''@;'; put 'put ''Y3JlYXRlTGluazpJKGZ1bmN0aW9uIEYoTixMKXtyZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVMaW5rU3luYzpmdW5jdGlvbiB6KE4sTCl7bGV0IEs7dHJ5e0s9Zy5sc3RhdFN5bmMoTCl9Y2F0Y2h7fXRyeXtjb25zdCBZPWcubHN0YXRTeW5jKE4pO2lmKEsmJlAoWSxL''@;'; put 'put ''KSlyZXR1cm59Y2F0Y2goWSl7dGhyb3cgWS5tZXNzYWdlPVkubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxZfWNvbnN0IFU9Xy5kaXJuYW1lKEwpO3JldHVybiBnLmV4aXN0c1N5bmMoVSl8fEIubWtkaXJzU3luYyhVKSxnLmxpbmtTeW5jKE4sTCl9fX0sNjA3MjoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoMjUyMCksXz15KDc3NDkpLHtwYXRoRXhpc3RzOmd9PXkoOTI1NyksQj15KDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIFAoKXtyZXR1cm4oUD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTyx6KXtpZihJLmlzQWJzb2x1dGUoTykp''@;'; put 'put ''e3RyeXt5aWVsZCBfLmxzdGF0KE8pfWNhdGNoKFUpe3Rocm93IFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksVX1yZXR1cm57dG9Dd2Q6Tyx0b0RzdDpPfX1jb25zdCBOPUkuZGlybmFtZSh6KSxMPUkuam9pbihOLE8pO2lmKHlpZWxkIGcoTCkp''@;'; put 'put ''cmV0dXJue3RvQ3dkOkwsdG9Ec3Q6T307dHJ5e3lpZWxkIF8ubHN0YXQoTyl9Y2F0Y2goVSl7dGhyb3cgVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxVfXJldHVybnt0b0N3ZDpPLHRvRHN0OkkucmVsYXRpdmUoTixPKX19KSkuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3N5bWxpbmtQYXRoczpCKGZ1bmN0aW9uIHcoTyx6KXtyZXR1cm4gUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxzeW1saW5rUGF0aHNTeW5jOmZ1bmN0aW9uIEYoTyx6KXtpZihJLmlzQWJzb2x1dGUoTykpe2lmKCFfLmV4aXN0c1N5bmMoTykpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOk8sdG9Ec3Q6T319Y29uc3QgTj1JLmRpcm5hbWUoeiksTD1JLmpvaW4oTixPKTtpZihfLmV4aXN0c1N5bmMoTCkpcmV0dXJue3RvQ3dkOkwsdG9Ec3Q6T307aWYoIV8uZXhpc3RzU3lu''@;'; put 'put ''YyhPKSl0aHJvdyBuZXcgRXJyb3IoInJlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Tyx0b0RzdDpJLnJlbGF0aXZlKE4sTyl9fX19LDkyNTk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDc3NDkpLF89eSg4OTgxKS5mcm9tUHJvbWlzZTtm''@;'; put 'put ''dW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFAsRil7aWYoRilyZXR1cm4gRjtsZXQgTzt0cnl7Tz15aWVsZCBJLmxzdGF0KFApfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gTyYmTy5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn0pKS5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17c3ltbGlua1R5cGU6XyhmdW5jdGlvbiBnKFAsRil7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksc3ltbGlua1R5cGVTeW5jOmZ1bmN0aW9uIHcoUCxGKXtpZihGKXJldHVybiBGO2xldCBPO3RyeXtPPUkubHN0YXRTeW5jKFApfWNh''@;'; put 'put ''dGNoe3JldHVybiJmaWxlIn1yZXR1cm4gTyYmTy5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn19fSwzNjM1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoMjUyMCksZz15KDc3NDkpLHtta2RpcnM6Qixta2RpcnNTeW5jOnd9PXkoMTM4''@;'; put 'put ''MSkse3N5bWxpbmtQYXRoczpQLHN5bWxpbmtQYXRoc1N5bmM6Rn09eSg2MDcyKSx7c3ltbGlua1R5cGU6TyxzeW1saW5rVHlwZVN5bmM6en09eSg5MjU5KSx7cGF0aEV4aXN0czpOfT15KDkyNTcpLHthcmVJZGVudGljYWw6TH09eSgyNzMzKTtmdW5jdGlvbiBVKCl7cmV0dXJuKFU9X2FzeW5j''@;'; put 'put ''VG9HZW5lcmF0b3IoZnVuY3Rpb24qKFkscSxlZSl7bGV0IEo7dHJ5e0o9eWllbGQgZy5sc3RhdChxKX1jYXRjaHt9aWYoSiYmSi5pc1N5bWJvbGljTGluaygpKXtjb25zdFttZSxfZV09eWllbGQgUHJvbWlzZS5hbGwoW2cuc3RhdChZKSxnLnN0YXQocSldKTtpZihMKG1lLF9lKSlyZXR1cm59''@;'; put 'put ''Y29uc3QgbmU9eWllbGQgUChZLHEpO1k9bmUudG9Ec3Q7Y29uc3QgaWU9eWllbGQgTyhuZS50b0N3ZCxlZSksbGU9Xy5kaXJuYW1lKHEpO3JldHVybih5aWVsZCBOKGxlKSl8fCh5aWVsZCBCKGxlKSksZy5zeW1saW5rKFkscSxpZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9y''@;'; put 'put ''dHM9e2NyZWF0ZVN5bWxpbms6SShmdW5jdGlvbiBLKFkscSxlZSl7cmV0dXJuIFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlU3ltbGlua1N5bmM6ZnVuY3Rpb24gVyhZLHEsZWUpe2xldCBKO3RyeXtKPWcubHN0YXRTeW5jKHEpfWNhdGNoe31pZihKJiZKLmlzU3ltYm9saWNMaW5r''@;'; put 'put ''KCkpe2NvbnN0IG1lPWcuc3RhdFN5bmMoWSksX2U9Zy5zdGF0U3luYyhxKTtpZihMKG1lLF9lKSlyZXR1cm59Y29uc3QgbmU9RihZLHEpO1k9bmUudG9Ec3QsZWU9eihuZS50b0N3ZCxlZSk7Y29uc3QgaWU9Xy5kaXJuYW1lKHEpO3JldHVybiBnLmV4aXN0c1N5bmMoaWUpfHx3KGllKSxnLnN5''@;'; put 'put ''bWxpbmtTeW5jKFkscSxlZSl9fX0sNzc0OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2NvbnN0IF89eSg4OTgxKS5mcm9tQ2FsbGJhY2ssZz15KDc3KSxCPVsiYWNjZXNzIiwiYXBwZW5kRmlsZSIsImNobW9kIiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiY3Ai''@;'; put 'put ''LCJmY2htb2QiLCJmY2hvd24iLCJmZGF0YXN5bmMiLCJmc3RhdCIsImZzeW5jIiwiZnRydW5jYXRlIiwiZnV0aW1lcyIsImdsb2IiLCJsY2htb2QiLCJsY2hvd24iLCJsdXRpbWVzIiwibGluayIsImxzdGF0IiwibWtkaXIiLCJta2R0ZW1wIiwib3BlbiIsIm9wZW5kaXIiLCJyZWFkZGlyIiwi''@;'; put 'put ''cmVhZEZpbGUiLCJyZWFkbGluayIsInJlYWxwYXRoIiwicmVuYW1lIiwicm0iLCJybWRpciIsInN0YXQiLCJzdGF0ZnMiLCJzeW1saW5rIiwidHJ1bmNhdGUiLCJ1bmxpbmsiLCJ1dGltZXMiLCJ3cml0ZUZpbGUiXS5maWx0ZXIodz0+ImZ1bmN0aW9uIj09dHlwZW9mIGdbd10pO09iamVjdC5h''@;'; put 'put ''c3NpZ24oWCxnKSxCLmZvckVhY2godz0+e1hbd109XyhnW3ddKX0pLFguZXhpc3RzPWZ1bmN0aW9uKHcsUCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFA/Zy5leGlzdHModyxQKTpuZXcgUHJvbWlzZShGPT5nLmV4aXN0cyh3LEYpKX0sWC5yZWFkPWZ1bmN0aW9uKHcsUCxGLE8seixOKXty''@;'; put 'put ''ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTj9nLnJlYWQodyxQLEYsTyx6LE4pOm5ldyBQcm9taXNlKChMLEspPT57Zy5yZWFkKHcsUCxGLE8seiwoVSxXLFkpPT57aWYoVSlyZXR1cm4gSyhVKTtMKHtieXRlc1JlYWQ6VyxidWZmZXI6WX0pfSl9KX0sWC53cml0ZT1mdW5jdGlvbih3LFAsLi4u''@;'; put 'put ''Ril7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEZbRi5sZW5ndGgtMV0/Zy53cml0ZSh3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLndyaXRlKHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5dGVzV3JpdHRlbjpMLGJ1ZmZlcjpLfSl9KX0pfSxYLnJlYWR2''@;'; put 'put ''PWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLnJlYWR2KHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoTyx6KT0+e2cucmVhZHYodyxQLC4uLkYsKE4sTCxLKT0+e2lmKE4pcmV0dXJuIHooTik7Tyh7Ynl0ZXNSZWFkOkwsYnVmZmVyczpL''@;'; put 'put ''fSl9KX0pfSxYLndyaXRldj1mdW5jdGlvbih3LFAsLi4uRil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEZbRi5sZW5ndGgtMV0/Zy53cml0ZXYodyxQLC4uLkYpOm5ldyBQcm9taXNlKChPLHopPT57Zy53cml0ZXYodyxQLC4uLkYsKE4sTCxLKT0+e2lmKE4pcmV0dXJuIHooTik7Tyh7Ynl0''@;'; put 'put ''ZXNXcml0dGVuOkwsYnVmZmVyczpLfSl9KX0pfSwiZnVuY3Rpb24iPT10eXBlb2YgZy5yZWFscGF0aC5uYXRpdmU/WC5yZWFscGF0aC5uYXRpdmU9XyhnLnJlYWxwYXRoLm5hdGl2ZSk6SS5lbWl0V2FybmluZygiZnMucmVhbHBhdGgubmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBi''@;'; put 'put ''ZWluZyBtb25rZXktcGF0Y2hlZD8iLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDMiKX0sNTY3NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXsuLi55KDc3NDkpLC4uLnkoNjQ2NCksLi4ueSg1NTkwKSwuLi55KDE3MjApLC4uLnkoNjU3MyksLi4ueSgxMzgxKSwuLi55''@;'; put 'put ''KDUzMCksLi4ueSg0NjcwKSwuLi55KDkyNTcpLC4uLnkoNDU0Mil9fSw2NTczOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoNzE4Myk7Xy5vdXRwdXRKc29uPUkoeSgzNTA4KSksXy5vdXRwdXRKc29uU3luYz15KDk1NzgpLF8ub3V0cHV0''@;'; put 'put ''SlNPTj1fLm91dHB1dEpzb24sXy5vdXRwdXRKU09OU3luYz1fLm91dHB1dEpzb25TeW5jLF8ud3JpdGVKU09OPV8ud3JpdGVKc29uLF8ud3JpdGVKU09OU3luYz1fLndyaXRlSnNvblN5bmMsXy5yZWFkSlNPTj1fLnJlYWRKc29uLF8ucmVhZEpTT05TeW5jPV8ucmVhZEpzb25TeW5jLHVlLmV4''@;'; put 'put ''cG9ydHM9X30sNzE4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNjgxMyk7dWUuZXhwb3J0cz17cmVhZEpzb246SS5yZWFkRmlsZSxyZWFkSnNvblN5bmM6SS5yZWFkRmlsZVN5bmMsd3JpdGVKc29uOkkud3JpdGVGaWxlLHdyaXRlSnNvblN5bmM6SS53cml0ZUZpbGVTeW5j''@;'; put 'put ''fX0sOTU3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6SX09eSg2NzgwKSx7b3V0cHV0RmlsZVN5bmM6X309eSg0NjcwKTt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3LFApe2NvbnN0IEY9SSh3LFApO18oQixGLFApfX0sMzUwODoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijtjb25zdHtzdHJpbmdpZnk6SX09eSg2NzgwKSx7b3V0cHV0RmlsZTpffT15KDQ2NzApO2Z1bmN0aW9uIEIoKXtyZXR1cm4oQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxQLEY9e30pe2NvbnN0IE89SShQLEYpO3lpZWxkIF8odyxPLEYpfSkpLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKX11ZS5leHBvcnRzPWZ1bmN0aW9uIGcodyxQKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSwxMzgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSx7bWFrZURpcjpfLG1ha2VEaXJTeW5jOmd9PXkoODIzMyksQj1JKF8pO3Vl''@;'; put 'put ''LmV4cG9ydHM9e21rZGlyczpCLG1rZGlyc1N5bmM6Zyxta2RpcnA6Qixta2RpcnBTeW5jOmcsZW5zdXJlRGlyOkIsZW5zdXJlRGlyU3luYzpnfX0sODIzMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSkse2NoZWNrUGF0aDpffT15KDM0NjgpLGc9Qj0+Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBCP0I6e21vZGU6NTExLC4uLkJ9Lm1vZGU7dWUuZXhwb3J0cy5tYWtlRGlyPWZ1bmN0aW9uKCl7dmFyIEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHcsUCl7cmV0dXJuIF8odyksSS5ta2Rpcih3LHttb2RlOmcoUCkscmVjdXJzaXZlOiEwfSl9KTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24odyxQKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHVlLmV4cG9ydHMubWFrZURpclN5bmM9KEIsdyk9PihfKEIpLEkubWtkaXJTeW5jKEIse21vZGU6Zyh3KSxyZWN1cnNpdmU6ITB9KSl9LDM0Njg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KTtj''@;'; put 'put ''b25zdCBfPXkoMjUyMCk7dWUuZXhwb3J0cy5jaGVja1BhdGg9ZnVuY3Rpb24oQil7aWYoIndpbjMyIj09PUkucGxhdGZvcm0mJi9bPD46Inw/Kl0vLnRlc3QoQi5yZXBsYWNlKF8ucGFyc2UoQikucm9vdCwiIikpKXtjb25zdCBQPW5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNo''@;'; put 'put ''YXJhY3RlcnM6ICR7Qn1gKTt0aHJvdyBQLmNvZGU9IkVJTlZBTCIsUH19fSw1MzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDg5ODEpLmZyb21Qcm9taXNlO3VlLmV4cG9ydHM9e21vdmU6SSh5KDQzNikpLG1vdmVTeW5jOnkoMzczNil9fSwzNzM2Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO2NvbnN0IEk9eSg3NyksXz15KDI1MjApLGc9eSg2NDY0KS5jb3B5U3luYyxCPXkoNDU0MikucmVtb3ZlU3luYyx3PXkoMTM4MSkubWtkaXJwU3luYyxQPXkoMjczMyk7ZnVuY3Rpb24gTihLLFUsVyl7dHJ5e0kucmVuYW1lU3luYyhLLFUpfWNhdGNoKFkpe2lmKCJFWERFViIh''@;'; put 'put ''PT1ZLmNvZGUpdGhyb3cgWTtyZXR1cm4gZnVuY3Rpb24gTChLLFUsVyl7cmV0dXJuIGcoSyxVLHtvdmVyd3JpdGU6VyxlcnJvck9uRXhpc3Q6ITAscHJlc2VydmVUaW1lc3RhbXBzOiEwfSksQihLKX0oSyxVLFcpfX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYoSyxVLFcpe2NvbnN0IFk9KFc9V3x8''@;'; put 'put ''e30pLm92ZXJ3cml0ZXx8Vy5jbG9iYmVyfHwhMSx7c3JjU3RhdDpxLGlzQ2hhbmdpbmdDYXNlOmVlPSExfT1QLmNoZWNrUGF0aHNTeW5jKEssVSwibW92ZSIsVyk7cmV0dXJuIFAuY2hlY2tQYXJlbnRQYXRoc1N5bmMoSyxxLFUsIm1vdmUiKSxmdW5jdGlvbiBPKEspe2NvbnN0IFU9Xy5kaXJu''@;'; put 'put ''YW1lKEspO3JldHVybiBfLnBhcnNlKFUpLnJvb3Q9PT1VfShVKXx8dyhfLmRpcm5hbWUoVSkpLGZ1bmN0aW9uIHooSyxVLFcsWSl7aWYoWSlyZXR1cm4gTihLLFUsVyk7aWYoVylyZXR1cm4gQihVKSxOKEssVSxXKTtpZihJLmV4aXN0c1N5bmMoVSkpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFs''@;'; put 'put ''cmVhZHkgZXhpc3RzLiIpO3JldHVybiBOKEssVSxXKX0oSyxVLFksZWUpfX0sNDM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSxfPXkoMjUyMCkse2NvcHk6Z309eSg2NDY0KSx7cmVtb3ZlOkJ9PXkoNDU0Mikse21rZGlycDp3fT15KDEzODEpLHtwYXRoRXhpc3Rz''@;'; put 'put ''OlB9PXkoOTI1NyksRj15KDI3MzMpO2Z1bmN0aW9uIHooKXtyZXR1cm4gej1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLHE9e30pe2NvbnN0IGVlPXEub3ZlcndyaXRlfHxxLmNsb2JiZXJ8fCExLHtzcmNTdGF0OkosaXNDaGFuZ2luZ0Nhc2U6bmU9ITF9PXlpZWxkIEYuY2hlY2tQ''@;'; put 'put ''YXRocyhXLFksIm1vdmUiLHEpO3lpZWxkIEYuY2hlY2tQYXJlbnRQYXRocyhXLEosWSwibW92ZSIpO2NvbnN0IGllPV8uZGlybmFtZShZKTtyZXR1cm4gXy5wYXJzZShpZSkucm9vdCE9PWllJiYoeWllbGQgdyhpZSkpLGZ1bmN0aW9uIE4oVyxZLHEsZWUpe3JldHVybiBMLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX0oVyxZLGVlLG5lKX0pLHouYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEwoKXtyZXR1cm4gTD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLHEsZWUpe2lmKCFlZSlpZihxKXlpZWxkIEIoWSk7ZWxzZSBpZih5aWVsZCBQKFkpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTt0cnl7eWllbGQgSS5yZW5hbWUoVyxZKX1jYXRjaChKKXtpZigiRVhERVYiIT09Si5jb2RlKXRocm93IEo7eWllbGQgZnVuY3Rpb24gSyhXLFkscSl7cmV0dXJuIFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfShXLFkscSl9fSksTC5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9ZnVuY3Rpb24gVSgpe3JldHVybihVPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFkscSl7cmV0dXJuIHlpZWxkIGcoVyxZLHtvdmVyd3JpdGU6cSxlcnJvck9uRXhpc3Q6ITAscHJlc2VydmVUaW1lc3RhbXBzOiEwfSksQihXKX0pKS5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBPKFcsWSl7cmV0dXJuIHouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sNDY3MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODk4MSkuZnJvbVByb21pc2UsXz15KDc3NDkpLGc9eSgyNTIwKSxCPXkoMTM4MSksdz15KDkyNTcpLnBh''@;'; put 'put ''dGhFeGlzdHM7ZnVuY3Rpb24gRigpe3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih6LE4sTD0idXRmLTgiKXtjb25zdCBLPWcuZGlybmFtZSh6KTtyZXR1cm4oeWllbGQgdyhLKSl8fCh5aWVsZCBCLm1rZGlycyhLKSksXy53cml0ZUZpbGUoeixOLEwpfSkpLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtvdXRwdXRGaWxlOkkoZnVuY3Rpb24gUCh6LE4pe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG91dHB1dEZpbGVTeW5jOmZ1bmN0aW9uIE8oeiwuLi5OKXtjb25zdCBMPWcuZGlybmFtZSh6KTtfLmV4aXN0c1N5bmMoTCl8fEIubWtk''@;'; put 'put ''aXJzU3luYyhMKSxfLndyaXRlRmlsZVN5bmMoeiwuLi5OKX19fSw5MjU3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg4OTgxKS5mcm9tUHJvbWlzZSxfPXkoNzc0OSk7dWUuZXhwb3J0cz17cGF0aEV4aXN0czpJKGZ1bmN0aW9uIGcoQil7cmV0dXJuIF8uYWNjZXNzKEIpLnRo''@;'; put 'put ''ZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSkscGF0aEV4aXN0c1N5bmM6Xy5leGlzdHNTeW5jfX0sNDU0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzcpLF89eSg4OTgxKS5mcm9tQ2FsbGJhY2s7dWUuZXhwb3J0cz17cmVtb3ZlOl8oZnVuY3Rpb24gZyh3LFApe0kucm0o''@;'; put 'put ''dyx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSxQKX0pLHJlbW92ZVN5bmM6ZnVuY3Rpb24gQih3KXtJLnJtU3luYyh3LHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KX19fSwyNzMzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NzQ5KSxfPXkoMjUyMCksZz15KDg5ODEpLmZyb21Q''@;'; put 'put ''cm9taXNlO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxxLGVlLEope2NvbnN0e3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9PXlpZWxkIGZ1bmN0aW9uIEIoWSxxLGVlKXtjb25zdCBKPWVlLmRlcmVmZXJlbmNlP25lPT5JLnN0YXQobmUse2JpZ2lu''@;'; put 'put ''dDohMH0pOm5lPT5JLmxzdGF0KG5lLHtiaWdpbnQ6ITB9KTtyZXR1cm4gUHJvbWlzZS5hbGwoW0ooWSksSihxKS5jYXRjaChuZT0+e2lmKCJFTk9FTlQiPT09bmUuY29kZSlyZXR1cm4gbnVsbDt0aHJvdyBuZX0pXSkudGhlbigoW25lLGllXSk9Pih7c3JjU3RhdDpuZSxkZXN0U3RhdDppZX0p''@;'; put 'put ''KX0oWSxxLEopO2lmKGllKXtpZihLKG5lLGllKSl7Y29uc3QgbGU9Xy5iYXNlbmFtZShZKSxtZT1fLmJhc2VuYW1lKHEpO2lmKCJtb3ZlIj09PWVlJiZsZSE9PW1lJiZsZS50b0xvd2VyQ2FzZSgpPT09bWUudG9Mb3dlckNhc2UoKSlyZXR1cm57c3JjU3RhdDpuZSxkZXN0U3RhdDppZSxpc0No''@;'; put 'put ''YW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKG5lLmlzRGlyZWN0b3J5KCkmJiFpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5''@;'; put 'put ''ICcke3F9JyB3aXRoIGRpcmVjdG9yeSAnJHtZfScuYCk7aWYoIW5lLmlzRGlyZWN0b3J5KCkmJmllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtxfScgd2l0aCBub24tZGlyZWN0b3J5ICcke1l9Jy5gKX1pZihuZS5pc0RpcmVj''@;'; put 'put ''dG9yeSgpJiZVKFkscSkpdGhyb3cgbmV3IEVycm9yKFcoWSxxLGVlKSk7cmV0dXJue3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9fSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB6KFkscSxlZSxKKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTigpe3Jl''@;'; put 'put ''dHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLHEsZWUsSil7Y29uc3QgbmU9Xy5yZXNvbHZlKF8uZGlybmFtZShZKSksaWU9Xy5yZXNvbHZlKF8uZGlybmFtZShlZSkpO2lmKGllPT09bmV8fGllPT09Xy5wYXJzZShpZSkucm9vdClyZXR1cm47bGV0IGxlO3RyeXtsZT15aWVs''@;'; put 'put ''ZCBJLnN0YXQoaWUse2JpZ2ludDohMH0pfWNhdGNoKG1lKXtpZigiRU5PRU5UIj09PW1lLmNvZGUpcmV0dXJuO3Rocm93IG1lfWlmKEsocSxsZSkpdGhyb3cgbmV3IEVycm9yKFcoWSxlZSxKKSk7cmV0dXJuIHooWSxxLGllLEopfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBL''@;'; put 'put ''KFkscSl7cmV0dXJuIHEuaW5vJiZxLmRldiYmcS5pbm89PT1ZLmlubyYmcS5kZXY9PT1ZLmRldn1mdW5jdGlvbiBVKFkscSl7Y29uc3QgZWU9Xy5yZXNvbHZlKFkpLnNwbGl0KF8uc2VwKS5maWx0ZXIobmU9Pm5lKSxKPV8ucmVzb2x2ZShxKS5zcGxpdChfLnNlcCkuZmlsdGVyKG5lPT5uZSk7''@;'; put 'put ''cmV0dXJuIGVlLmV2ZXJ5KChuZSxpZSk9PkpbaWVdPT09bmUpfWZ1bmN0aW9uIFcoWSxxLGVlKXtyZXR1cm5gQ2Fubm90ICR7ZWV9ICcke1l9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3F9Jy5gfXVlLmV4cG9ydHM9e2NoZWNrUGF0aHM6ZyhmdW5jdGlvbiBQKFkscSxlZSxK''@;'; put 'put ''KXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjaGVja1BhdGhzU3luYzpmdW5jdGlvbiBPKFkscSxlZSxKKXtjb25zdHtzcmNTdGF0Om5lLGRlc3RTdGF0OmllfT1mdW5jdGlvbiB3KFkscSxlZSl7bGV0IEo7Y29uc3QgbmU9ZWUuZGVyZWZlcmVuY2U/bGU9Pkkuc3RhdFN5bmMo''@;'; put 'put ''bGUse2JpZ2ludDohMH0pOmxlPT5JLmxzdGF0U3luYyhsZSx7YmlnaW50OiEwfSksaWU9bmUoWSk7dHJ5e0o9bmUocSl9Y2F0Y2gobGUpe2lmKCJFTk9FTlQiPT09bGUuY29kZSlyZXR1cm57c3JjU3RhdDppZSxkZXN0U3RhdDpudWxsfTt0aHJvdyBsZX1yZXR1cm57c3JjU3RhdDppZSxkZXN0''@;'; put 'put ''U3RhdDpKfX0oWSxxLEopO2lmKGllKXtpZihLKG5lLGllKSl7Y29uc3QgbGU9Xy5iYXNlbmFtZShZKSxtZT1fLmJhc2VuYW1lKHEpO2lmKCJtb3ZlIj09PWVlJiZsZSE9PW1lJiZsZS50b0xvd2VyQ2FzZSgpPT09bWUudG9Mb3dlckNhc2UoKSlyZXR1cm57c3JjU3RhdDpuZSxkZXN0U3RhdDpp''@;'; put 'put ''ZSxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKG5lLmlzRGlyZWN0b3J5KCkmJiFpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGly''@;'; put 'put ''ZWN0b3J5ICcke3F9JyB3aXRoIGRpcmVjdG9yeSAnJHtZfScuYCk7aWYoIW5lLmlzRGlyZWN0b3J5KCkmJmllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtxfScgd2l0aCBub24tZGlyZWN0b3J5ICcke1l9Jy5gKX1pZihuZS5p''@;'; put 'put ''c0RpcmVjdG9yeSgpJiZVKFkscSkpdGhyb3cgbmV3IEVycm9yKFcoWSxxLGVlKSk7cmV0dXJue3NyY1N0YXQ6bmUsZGVzdFN0YXQ6aWV9fSxjaGVja1BhcmVudFBhdGhzOmcoeiksY2hlY2tQYXJlbnRQYXRoc1N5bmM6ZnVuY3Rpb24gTChZLHEsZWUsSil7Y29uc3QgbmU9Xy5yZXNvbHZlKF8u''@;'; put 'put ''ZGlybmFtZShZKSksaWU9Xy5yZXNvbHZlKF8uZGlybmFtZShlZSkpO2lmKGllPT09bmV8fGllPT09Xy5wYXJzZShpZSkucm9vdClyZXR1cm47bGV0IGxlO3RyeXtsZT1JLnN0YXRTeW5jKGllLHtiaWdpbnQ6ITB9KX1jYXRjaChtZSl7aWYoIkVOT0VOVCI9PT1tZS5jb2RlKXJldHVybjt0aHJv''@;'; put 'put ''dyBtZX1pZihLKHEsbGUpKXRocm93IG5ldyBFcnJvcihXKFksZWUsSikpO3JldHVybiBMKFkscSxpZSxKKX0saXNTcmNTdWJkaXI6VSxhcmVJZGVudGljYWw6S319LDMxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoNzc0OSksXz15KDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0''@;'; put 'put ''aW9uIEIoKXtyZXR1cm4oQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUCxGLE8pe2NvbnN0IHo9eWllbGQgSS5vcGVuKFAsInIrIik7bGV0IE49bnVsbDt0cnl7eWllbGQgSS5mdXRpbWVzKHosRixPKX1maW5hbGx5e3RyeXt5aWVsZCBJLmNsb3NlKHopfWNhdGNoKEwpe049TH19aWYo''@;'; put 'put ''Til0aHJvdyBOfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXt1dGltZXNNaWxsaXM6XyhmdW5jdGlvbiBnKFAsRixPKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx1dGltZXNNaWxsaXNTeW5jOmZ1bmN0aW9uIHcoUCxGLE8pe2NvbnN0IHo9SS5vcGVuU3lu''@;'; put 'put ''YyhQLCJyKyIpO3JldHVybiBJLmZ1dGltZXNTeW5jKHosRixPKSxJLmNsb3NlU3luYyh6KX19fSw3NjQ4OnVlPT57InVzZSBzdHJpY3QiO3ZhciB5PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1NYXRoLm1heCxnPWZ1bmN0aW9uKEYsTyl7Zm9yKHZhciB6PVtdLE49MDtOPEYubGVuZ3Ro''@;'; put 'put ''O04rPTEpeltOXT1GW05dO2Zvcih2YXIgTD0wO0w8Ty5sZW5ndGg7TCs9MSl6W0wrRi5sZW5ndGhdPU9bTF07cmV0dXJuIHp9O3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIE89dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgT3x8IltvYmplY3QgRnVuY3Rpb25dIiE9PXkuYXBwbHkoTykp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK08pO2Zvcih2YXIgTix6PWZ1bmN0aW9uKEYsTyl7Zm9yKHZhciB6PVtdLE49MSxMPTA7TjxGLmxlbmd0aDtOKz0xLEwrPTEpeltMXT1GW05dO3JldHVybiB6fShhcmd1''@;'; put 'put ''bWVudHMpLEs9SSgwLE8ubGVuZ3RoLXoubGVuZ3RoKSxVPVtdLFc9MDtXPEs7VysrKVVbV109IiQiK1c7aWYoTj1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKFAsRil7Zm9yKHZhciBPPSIiLHo9MDt6PFAubGVuZ3RoO3orPTEpTys9UFt6XSx6KzE8UC5s''@;'; put 'put ''ZW5ndGgmJihPKz0iLCIpO3JldHVybiBPfShVKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBOKXt2YXIgcT1PLmFwcGx5KHRoaXMsZyh6LGFyZ3VtZW50cykpO3JldHVybiBPYmplY3QocSk9PT1xP3E6''@;'; put 'put ''dGhpc31yZXR1cm4gTy5hcHBseShGLGcoeixhcmd1bWVudHMpKX0pLE8ucHJvdG90eXBlKXt2YXIgWT1mdW5jdGlvbigpe307WS5wcm90b3R5cGU9Ty5wcm90b3R5cGUsTi5wcm90b3R5cGU9bmV3IFksWS5wcm90b3R5cGU9bnVsbH1yZXR1cm4gTn19LDg2MTI6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg3NjQ4KTt1ZS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxJfSwyMTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEksXz15KDg4OTIpLGc9eSgxNjQ4KSxCPXkoMzk4MSksdz15KDQ3MjYpLFA9eSg2NzEyKSxGPXkoMzQ2NCksTz15KDQ0NTMpLHo9''@;'; put 'put ''eSgzOTE1KSxOPXkoOTczOCksTD15KDYzMjkpLEs9eSgyMjY0KSxVPXkoNTczMCksVz15KDcwNyksWT15KDM4NjIpLHE9eSg5NTUwKSxlZT1GdW5jdGlvbixKPWZ1bmN0aW9uKHZlKXt0cnl7cmV0dXJuIGVlKCcidXNlIHN0cmljdCI7IHJldHVybiAoJyt2ZSsiKS5jb25zdHJ1Y3RvcjsiKSgp''@;'; put 'put ''fWNhdGNoe319LG5lPXkoNzI5NiksaWU9eSg0NDI5KSxsZT1mdW5jdGlvbigpe3Rocm93IG5ldyBPfSxtZT1uZT9mdW5jdGlvbigpe3RyeXtyZXR1cm4gbGV9Y2F0Y2h7dHJ5e3JldHVybiBuZShhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHtyZXR1cm4gbGV9fX0oKTpsZSxfZT15KDE0''@;'; put 'put ''MDUpKCksVGU9eSgxNjE4KSxTZT15KDg4OTkpLHplPXkoNDQzKSxWPXkoMTc2OCkscD15KDg5MjgpLGI9e30seD10eXBlb2YgVWludDhBcnJheT4idSJ8fCFUZT9JOlRlKFVpbnQ4QXJyYXkpLEM9e19fcHJvdG9fXzpudWxsLCIlQWdncmVnYXRlRXJyb3IlIjp0eXBlb2YgQWdncmVnYXRlRXJy''@;'; put 'put ''b3I+InUiP0k6QWdncmVnYXRlRXJyb3IsIiVBcnJheSUiOkFycmF5LCIlQXJyYXlCdWZmZXIlIjp0eXBlb2YgQXJyYXlCdWZmZXI+InUiP0k6QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk6SSwiJUFzeW5jRnJv''@;'; put 'put ''bVN5bmNJdGVyYXRvclByb3RvdHlwZSUiOkksIiVBc3luY0Z1bmN0aW9uJSI6YiwiJUFzeW5jR2VuZXJhdG9yJSI6YiwiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIjpiLCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOmIsIiVBdG9taWNzJSI6dHlwZW9mIEF0b21pY3M+InUiP0k6QXRvbWlj''@;'; put 'put ''cywiJUJpZ0ludCUiOnR5cGVvZiBCaWdJbnQ+InUiP0k6QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOnR5cGVvZiBCaWdJbnQ2NEFycmF5PiJ1Ij9JOkJpZ0ludDY0QXJyYXksIiVCaWdVaW50NjRBcnJheSUiOnR5cGVvZiBCaWdVaW50NjRBcnJheT4idSI/STpCaWdVaW50NjRBcnJheSwiJUJv''@;'; put 'put ''b2xlYW4lIjpCb29sZWFuLCIlRGF0YVZpZXclIjp0eXBlb2YgRGF0YVZpZXc+InUiP0k6RGF0YVZpZXcsIiVEYXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUiOmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVuY29kZVVSSSUiOmVuY29kZVVSSSwi''@;'; put 'put ''JWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29kZVVSSUNvbXBvbmVudCwiJUVycm9yJSI6ZywiJWV2YWwlIjpldmFsLCIlRXZhbEVycm9yJSI6QiwiJUZsb2F0MTZBcnJheSUiOnR5cGVvZiBGbG9hdDE2QXJyYXk+InUiP0k6RmxvYXQxNkFycmF5LCIlRmxvYXQzMkFycmF5JSI6dHlwZW9mIEZs''@;'; put 'put ''b2F0MzJBcnJheT4idSI/STpGbG9hdDMyQXJyYXksIiVGbG9hdDY0QXJyYXklIjp0eXBlb2YgRmxvYXQ2NEFycmF5PiJ1Ij9JOkZsb2F0NjRBcnJheSwiJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSI6dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PiJ1Ij9JOkZpbmFsaXphdGlvblJlZ2lzdHJ5''@;'; put 'put ''LCIlRnVuY3Rpb24lIjplZSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6YiwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP0k6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij9JOkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMy''@;'; put 'put ''QXJyYXk+InUiP0k6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoVGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6SSwiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjpJLCIlTWFw''@;'; put 'put ''JSI6dHlwZW9mIE1hcD4idSI/STpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgTWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpfLCIlT2JqZWN0Lmdl''@;'; put 'put ''dE93blByb3BlcnR5RGVzY3JpcHRvciUiOm5lLCIlcGFyc2VGbG9hdCUiOnBhcnNlRmxvYXQsIiVwYXJzZUludCUiOnBhcnNlSW50LCIlUHJvbWlzZSUiOnR5cGVvZiBQcm9taXNlPiJ1Ij9JOlByb21pc2UsIiVQcm94eSUiOnR5cGVvZiBQcm94eT4idSI/STpQcm94eSwiJVJhbmdlRXJyb3Il''@;'; put 'put ''Ijp3LCIlUmVmZXJlbmNlRXJyb3IlIjpQLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij9JOlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2YgU2V0PiJ1Ij9JOlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIFNldD4idSJ8fCFfZXx8IVRlP0k6''@;'; put 'put ''VGUoKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVTaGFyZWRBcnJheUJ1ZmZlciUiOnR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj4idSI/STpTaGFyZWRBcnJheUJ1ZmZlciwiJVN0cmluZyUiOlN0cmluZywiJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKCIiW1N5''@;'; put 'put ''bWJvbC5pdGVyYXRvcl0oKSk6SSwiJVN5bWJvbCUiOl9lP1N5bWJvbDpJLCIlU3ludGF4RXJyb3IlIjpGLCIlVGhyb3dUeXBlRXJyb3IlIjptZSwiJVR5cGVkQXJyYXklIjp4LCIlVHlwZUVycm9yJSI6TywiJVVpbnQ4QXJyYXklIjp0eXBlb2YgVWludDhBcnJheT4idSI/STpVaW50OEFycmF5''@;'; put 'put ''LCIlVWludDhDbGFtcGVkQXJyYXklIjp0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk+InUiP0k6VWludDhDbGFtcGVkQXJyYXksIiVVaW50MTZBcnJheSUiOnR5cGVvZiBVaW50MTZBcnJheT4idSI/STpVaW50MTZBcnJheSwiJVVpbnQzMkFycmF5JSI6dHlwZW9mIFVpbnQzMkFycmF5PiJ1Ij9J''@;'; put 'put ''OlVpbnQzMkFycmF5LCIlVVJJRXJyb3IlIjp6LCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij9JOldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP0k6V2Vha1JlZiwiJVdlYWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/STpXZWFrU2V0LCIlRnVuY3Rpb24ucHJv''@;'; put 'put ''dG90eXBlLmNhbGwlIjpwLCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSI6ViwiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiOmllLCIlT2JqZWN0LmdldFByb3RvdHlwZU9mJSI6U2UsIiVNYXRoLmFicyUiOk4sIiVNYXRoLmZsb29yJSI6TCwiJU1hdGgubWF4JSI6SywiJU1hdGgubWluJSI6''@;'; put 'put ''VSwiJU1hdGgucG93JSI6VywiJU1hdGgucm91bmQlIjpZLCIlTWF0aC5zaWduJSI6cSwiJVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YlIjp6ZX07aWYoVGUpdHJ5e251bGwuZXJyb3J9Y2F0Y2godmUpe3ZhciBUPVRlKFRlKHZlKSk7Q1siJUVycm9yLnByb3RvdHlwZSUiXT1UfXZhciBIPWZ1bmN0''@;'; put 'put ''aW9uIHZlKFhlKXt2YXIgamU7aWYoIiVBc3luY0Z1bmN0aW9uJSI9PT1YZSlqZT1KKCJhc3luYyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVHZW5lcmF0b3JGdW5jdGlvbiUiPT09WGUpamU9SigiZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24l''@;'; put 'put ''Ij09PVhlKWplPUooImFzeW5jIGZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvciUiPT09WGUpe3ZhciBEZT12ZSgiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIik7RGUmJihqZT1EZS5wcm90b3R5cGUpfWVsc2UgaWYoIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI9''@;'; put 'put ''PT1YZSl7dmFyIEZlPXZlKCIlQXN5bmNHZW5lcmF0b3IlIik7RmUmJlRlJiYoamU9VGUoRmUucHJvdG90eXBlKSl9cmV0dXJuIENbWGVdPWplLGplfSxqPXtfX3Byb3RvX186bnVsbCwiJUFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlQXJyYXlQ''@;'; put 'put ''cm90b3R5cGUlIjpbIkFycmF5IiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvX2VudHJpZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZW50cmllcyJdLCIlQXJyYXlQcm90b19mb3JFYWNoJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImZvckVhY2giXSwiJUFycmF5UHJvdG9fa2V5cyUiOlsi''@;'; put 'put ''QXJyYXkiLCJwcm90b3R5cGUiLCJrZXlzIl0sIiVBcnJheVByb3RvX3ZhbHVlcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJ2YWx1ZXMiXSwiJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkFzeW5jRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yJSI6WyJBc3luY0dl''@;'; put 'put ''bmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlQm9vbGVhblByb3RvdHlwZSUiOlsiQm9vbGVhbiIsInByb3RvdHlwZSJdLCIlRGF0YVZpZXdQ''@;'; put 'put ''cm90b3R5cGUlIjpbIkRhdGFWaWV3IiwicHJvdG90eXBlIl0sIiVEYXRlUHJvdG90eXBlJSI6WyJEYXRlIiwicHJvdG90eXBlIl0sIiVFcnJvclByb3RvdHlwZSUiOlsiRXJyb3IiLCJwcm90b3R5cGUiXSwiJUV2YWxFcnJvclByb3RvdHlwZSUiOlsiRXZhbEVycm9yIiwicHJvdG90eXBlIl0s''@;'; put 'put ''IiVGbG9hdDMyQXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0MzJBcnJheSIsInByb3RvdHlwZSJdLCIlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDY0QXJyYXkiLCJwcm90b3R5cGUiXSwiJUZ1bmN0aW9uUHJvdG90eXBlJSI6WyJGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJh''@;'; put 'put ''dG9yJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlSW50OEFycmF5UHJvdG90eXBlJSI6WyJJbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDE2''@;'; put 'put ''QXJyYXlQcm90b3R5cGUlIjpbIkludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDMyQXJyYXlQcm90b3R5cGUlIjpbIkludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUpTT05QYXJzZSUiOlsiSlNPTiIsInBhcnNlIl0sIiVKU09OU3RyaW5naWZ5JSI6WyJKU09OIiwic3RyaW5naWZ5Il0s''@;'; put 'put ''IiVNYXBQcm90b3R5cGUlIjpbIk1hcCIsInByb3RvdHlwZSJdLCIlTnVtYmVyUHJvdG90eXBlJSI6WyJOdW1iZXIiLCJwcm90b3R5cGUiXSwiJU9iamVjdFByb3RvdHlwZSUiOlsiT2JqZWN0IiwicHJvdG90eXBlIl0sIiVPYmpQcm90b190b1N0cmluZyUiOlsiT2JqZWN0IiwicHJvdG90eXBl''@;'; put 'put ''IiwidG9TdHJpbmciXSwiJU9ialByb3RvX3ZhbHVlT2YlIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInZhbHVlT2YiXSwiJVByb21pc2VQcm90b3R5cGUlIjpbIlByb21pc2UiLCJwcm90b3R5cGUiXSwiJVByb21pc2VQcm90b190aGVuJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIiwidGhlbiJd''@;'; put 'put ''LCIlUHJvbWlzZV9hbGwlIjpbIlByb21pc2UiLCJhbGwiXSwiJVByb21pc2VfcmVqZWN0JSI6WyJQcm9taXNlIiwicmVqZWN0Il0sIiVQcm9taXNlX3Jlc29sdmUlIjpbIlByb21pc2UiLCJyZXNvbHZlIl0sIiVSYW5nZUVycm9yUHJvdG90eXBlJSI6WyJSYW5nZUVycm9yIiwicHJvdG90eXBl''@;'; put 'put ''Il0sIiVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUiOlsiUmVmZXJlbmNlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZ0V4cFByb3RvdHlwZSUiOlsiUmVnRXhwIiwicHJvdG90eXBlIl0sIiVTZXRQcm90b3R5cGUlIjpbIlNldCIsInByb3RvdHlwZSJdLCIlU2hhcmVkQXJyYXlCdWZmZXJQcm90''@;'; put 'put ''b3R5cGUlIjpbIlNoYXJlZEFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVTdHJpbmdQcm90b3R5cGUlIjpbIlN0cmluZyIsInByb3RvdHlwZSJdLCIlU3ltYm9sUHJvdG90eXBlJSI6WyJTeW1ib2wiLCJwcm90b3R5cGUiXSwiJVN5bnRheEVycm9yUHJvdG90eXBlJSI6WyJTeW50YXhFcnJv''@;'; put 'put ''ciIsInByb3RvdHlwZSJdLCIlVHlwZWRBcnJheVByb3RvdHlwZSUiOlsiVHlwZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVHlwZUVycm9yUHJvdG90eXBlJSI6WyJUeXBlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVVpbnQ4QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4QXJyYXkiLCJwcm90b3R5cGUi''@;'; put 'put ''XSwiJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSI6WyJVaW50OENsYW1wZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDE2QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MzJBcnJheVByb3RvdHlwZSUiOlsiVWludDMyQXJyYXkiLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJVVSSUVycm9yUHJvdG90eXBlJSI6WyJVUklFcnJvciIsInByb3RvdHlwZSJdLCIlV2Vha01hcFByb3RvdHlwZSUiOlsiV2Vha01hcCIsInByb3RvdHlwZSJdLCIlV2Vha1NldFByb3RvdHlwZSUiOlsiV2Vha1NldCIsInByb3RvdHlwZSJdfSxFPXkoODYxMiksbT15KDg4MjQp''@;'; put 'put ''LEE9RS5jYWxsKHAsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksYWU9RS5jYWxsKFYsQXJyYXkucHJvdG90eXBlLnNwbGljZSksdGU9RS5jYWxsKHAsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxzZT1FLmNhbGwocCxTdHJpbmcucHJvdG90eXBlLnNsaWNlKSx3ZT1FLmNhbGwocCxSZWdFeHAu''@;'; put 'put ''cHJvdG90eXBlLmV4ZWMpLFVlPS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csSmU9L1xcKFxcKT8vZyxNZT1mdW5jdGlvbihYZSxqZSl7dmFyIEZlLERlPVhl''@;'; put 'put ''O2lmKG0oaixEZSkmJihEZT0iJSIrKEZlPWpbRGVdKVswXSsiJSIpLG0oQyxEZSkpe3ZhciBSZT1DW0RlXTtpZihSZT09PWImJihSZT1IKERlKSksdHlwZW9mIFJlPiJ1IiYmIWplKXRocm93IG5ldyBPKCJpbnRyaW5zaWMgIitYZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBs''@;'; put 'put ''ZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpGZSxuYW1lOkRlLHZhbHVlOlJlfX10aHJvdyBuZXcgRigiaW50cmluc2ljICIrWGUrIiBkb2VzIG5vdCBleGlzdCEiKX07dWUuZXhwb3J0cz1mdW5jdGlvbihYZSxqZSl7aWYoInN0cmluZyIhPXR5cGVvZiBYZXx8MD09PVhlLmxl''@;'; put 'put ''bmd0aCl0aHJvdyBuZXcgTygiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIGplKXRocm93IG5ldyBPKCciYWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lm''@;'; put 'put ''KG51bGw9PT13ZSgvXiU/W14lXSolPyQvLFhlKSl0aHJvdyBuZXcgRigiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBEZT1mdW5jdGlvbihYZSl7dmFyIGplPXNlKFhlLDAsMSks''@;'; put 'put ''RGU9c2UoWGUsLTEpO2lmKCIlIj09PWplJiYiJSIhPT1EZSl0aHJvdyBuZXcgRigiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCIpO2lmKCIlIj09PURlJiYiJSIhPT1qZSl0aHJvdyBuZXcgRigiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3Rl''@;'; put 'put ''ZCBvcGVuaW5nIGAlYCIpO3ZhciBGZT1bXTtyZXR1cm4gdGUoWGUsVWUsZnVuY3Rpb24oUmUsSWUsVmUsa2Upe0ZlW0ZlLmxlbmd0aF09VmU/dGUoa2UsSmUsIiQxIik6SWV8fFJlfSksRmV9KFhlKSxGZT1EZS5sZW5ndGg+MD9EZVswXToiIixSZT1NZSgiJSIrRmUrIiUiLGplKSxJZT1SZS5u''@;'; put 'put ''YW1lLFZlPVJlLnZhbHVlLGtlPSExLEFlPVJlLmFsaWFzO0FlJiYoRmU9QWVbMF0sYWUoRGUsQShbMCwxXSxBZSkpKTtmb3IodmFyIF90PTEsbnQ9ITA7X3Q8RGUubGVuZ3RoO190Kz0xKXt2YXIgUWU9RGVbX3RdLHVuPXNlKFFlLDAsMSkseXQ9c2UoUWUsLTEpO2lmKCgnIic9PT11bnx8Iici''@;'; put 'put ''PT09dW58fCJgIj09PXVufHwnIic9PT15dHx8IiciPT09eXR8fCJgIj09PXl0KSYmdW4hPT15dCl0aHJvdyBuZXcgRigicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCgiY29uc3RydWN0b3IiPT09UWV8fCFudCkmJihrZT0hMCksbShD''@;'; put 'put ''LEllPSIlIisoRmUrPSIuIitRZSkrIiUiKSlWZT1DW0llXTtlbHNlIGlmKG51bGwhPVZlKXtpZighKFFlIGluIFZlKSl7aWYoIWplKXRocm93IG5ldyBPKCJiYXNlIGludHJpbnNpYyBmb3IgIitYZSsiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVy''@;'; put 'put ''bn1pZihuZSYmX3QrMT49RGUubGVuZ3RoKXt2YXIgTXQ9bmUoVmUsUWUpO1ZlPShudD0hIU10KSYmImdldCJpbiBNdCYmISgib3JpZ2luYWxWYWx1ZSJpbiBNdC5nZXQpP010LmdldDpWZVtRZV19ZWxzZSBudD1tKFZlLFFlKSxWZT1WZVtRZV07bnQmJiFrZSYmKENbSWVdPVZlKX19cmV0dXJu''@;'; put 'put ''IFZlfX0sODg5OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4OTIpO3VlLmV4cG9ydHM9SS5nZXRQcm90b3R5cGVPZnx8bnVsbH0sNDQzOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldFByb3RvdHlwZU9mfHxudWxs''@;'; put 'put ''fSwxNjE4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDQzKSxfPXkoODg5OSksZz15KDY1MDQpO3VlLmV4cG9ydHM9ST9mdW5jdGlvbih3KXtyZXR1cm4gSSh3KX06Xz9mdW5jdGlvbih3KXtpZighd3x8Im9iamVjdCIhPXR5cGVvZiB3JiYiZnVuY3Rpb24iIT10eXBlb2Ygdyl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJnZXRQcm90bzogbm90IGFuIG9iamVjdCIpO3JldHVybiBfKHcpfTpnP2Z1bmN0aW9uKHcpe3JldHVybiBnKHcpfTpudWxsfSw2OTA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfSw3Mjk2Oih1''@;'; put 'put ''ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjkwKTtpZihJKXRyeXtJKFtdLCJsZW5ndGgiKX1jYXRjaHtJPW51bGx9dWUuZXhwb3J0cz1JfSw2NDU4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24geShJKXtpZihudWxsPT09SXx8Im9iamVjdCIhPXR5cGVvZiBJ''@;'; put 'put ''KXJldHVybiBJO2lmKEkgaW5zdGFuY2VvZiBPYmplY3QpdmFyIF89e19fcHJvdG9fXzpYKEkpfTtlbHNlIF89T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoSSkuZm9yRWFjaChmdW5jdGlvbihnKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxn''@;'; put 'put ''LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSSxnKSl9KSxffTt2YXIgWD1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKEkpe3JldHVybiBJLl9fcHJvdG9fX319LDc3Oih1ZSxYLHkpPT57dmFyIE8seixJPXkoNDE1NSksXz15KDUxMDgpLGc9eSg1NDQzKSxCPXkoMjE2''@;'; put 'put ''MSksdz15KDg1MjApLFA9eSg2NDU4KSxGPXkoOTUzOSk7ZnVuY3Rpb24gTChuZSxpZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLE8se2dldDpmdW5jdGlvbigpe3JldHVybiBpZX19KX0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj8o''@;'; put 'put ''Tz1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIpLHo9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KE89Il9fX2dyYWNlZnVsLWZzLnF1ZXVlIix6PSJfX19ncmFjZWZ1bC1mcy5wcmV2aW91cyIpO3ZhciBxLEs9ZnVuY3Rpb24gTigpe307ZnVuY3Rpb24gVyhuZSl7''@;'; put 'put ''QihuZSksbmUuZ3JhY2VmdWxpZnk9VyxuZS5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uIHNlKG90LE1lKXtyZXR1cm4gbmV3IG5lLlJlYWRTdHJlYW0ob3QsTWUpfSxuZS5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbiB3ZShvdCxNZSl7cmV0dXJuIG5ldyBuZS5Xcml0ZVN0cmVhbShvdCxN''@;'; put 'put ''ZSl9O3ZhciBpZT1uZS5yZWFkRmlsZTtuZS5yZWFkRmlsZT1mdW5jdGlvbiBsZShvdCxNZSx2ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE1lJiYodmU9TWUsTWU9bnVsbCksZnVuY3Rpb24gWGUoamUsRGUsRmUsUmUpe3JldHVybiBpZShqZSxEZSxmdW5jdGlvbihJZSl7IUllfHwiRU1G''@;'; put 'put ''SUxFIiE9PUllLmNvZGUmJiJFTkZJTEUiIT09SWUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgRmUmJkZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFtYZSxbamUsRGUsRmVdLEllLFJlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShvdCxNZSx2ZSl9O3ZhciBtZT1uZS53cml0ZUZpbGU7''@;'; put 'put ''bmUud3JpdGVGaWxlPWZ1bmN0aW9uIF9lKG90LE1lLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxmdW5jdGlvbiBqZShEZSxGZSxSZSxJZSxWZSl7cmV0dXJuIG1lKERlLEZlLFJlLGZ1bmN0aW9uKGtlKXsha2V8fCJFTUZJTEUiIT09a2UuY29k''@;'; put 'put ''ZSYmIkVORklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW2plLFtEZSxGZSxSZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG90LE1lLHZlLFhlKX07dmFyIFRlPW5lLmFwcGVuZEZpbGU7VGUmJihu''@;'; put 'put ''ZS5hcHBlbmRGaWxlPWZ1bmN0aW9uIFNlKG90LE1lLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxmdW5jdGlvbiBqZShEZSxGZSxSZSxJZSxWZSl7cmV0dXJuIFRlKERlLEZlLFJlLGZ1bmN0aW9uKGtlKXsha2V8fCJFTUZJTEUiIT09a2UuY29k''@;'; put 'put ''ZSYmIkVORklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW2plLFtEZSxGZSxSZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KG90LE1lLHZlLFhlKX0pO3ZhciB6ZT1uZS5jb3B5RmlsZTt6ZSYmKG5l''@;'; put 'put ''LmNvcHlGaWxlPWZ1bmN0aW9uIFYob3QsTWUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPTApLGZ1bmN0aW9uIGplKERlLEZlLFJlLEllLFZlKXtyZXR1cm4gemUoRGUsRmUsUmUsZnVuY3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5jb2RlJiYiRU5G''@;'; put 'put ''SUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbamUsW0RlLEZlLFJlLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QsTWUsdmUsWGUpfSk7dmFyIHA9bmUucmVhZGRpcjtuZS5yZWFkZGlyPWZ1bmN0''@;'; put 'put ''aW9uIHgob3QsTWUsdmUpeyJmdW5jdGlvbiI9PXR5cGVvZiBNZSYmKHZlPU1lLE1lPW51bGwpO3ZhciBYZT1iLnRlc3QoSS52ZXJzaW9uKT9mdW5jdGlvbihGZSxSZSxJZSxWZSl7cmV0dXJuIHAoRmUsamUoRmUsUmUsSWUsVmUpKX06ZnVuY3Rpb24oRmUsUmUsSWUsVmUpe3JldHVybiBwKEZl''@;'; put 'put ''LFJlLGplKEZlLFJlLEllLFZlKSl9O3JldHVybiBYZShvdCxNZSx2ZSk7ZnVuY3Rpb24gamUoRGUsRmUsUmUsSWUpe3JldHVybiBmdW5jdGlvbihWZSxrZSl7IVZlfHwiRU1GSUxFIiE9PVZlLmNvZGUmJiJFTkZJTEUiIT09VmUuY29kZT8oa2UmJmtlLnNvcnQmJmtlLnNvcnQoKSwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgUmUmJlJlLmNhbGwodGhpcyxWZSxrZSkpOlkoW1hlLFtEZSxGZSxSZV0sVmUsSWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfX19O3ZhciBiPS9edlswLTVdXC4vO2lmKCJ2MC44Ij09PUkudmVyc2lvbi5zdWJzdHIoMCw0KSl7dmFyIEM9dyhuZSk7bT1DLlJlYWRTdHJl''@;'; put 'put ''YW0sYWU9Qy5Xcml0ZVN0cmVhbX12YXIgVD1uZS5SZWFkU3RyZWFtO1QmJihtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQucHJvdG90eXBlKSxtLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIEEoKXt2YXIgb3Q9dGhpcztKZShvdC5wYXRoLG90LmZsYWdzLG90Lm1vZGUsZnVuY3Rpb24oTWUs''@;'; put 'put ''dmUpe01lPyhvdC5hdXRvQ2xvc2UmJm90LmRlc3Ryb3koKSxvdC5lbWl0KCJlcnJvciIsTWUpKToob3QuZmQ9dmUsb3QuZW1pdCgib3BlbiIsdmUpLG90LnJlYWQoKSl9KX0pO3ZhciBIPW5lLldyaXRlU3RyZWFtO0gmJihhZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShILnByb3RvdHlwZSks''@;'; put 'put ''YWUucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24gdGUoKXt2YXIgb3Q9dGhpcztKZShvdC5wYXRoLG90LmZsYWdzLG90Lm1vZGUsZnVuY3Rpb24oTWUsdmUpe01lPyhvdC5kZXN0cm95KCksb3QuZW1pdCgiZXJyb3IiLE1lKSk6KG90LmZkPXZlLG90LmVtaXQoIm9wZW4iLHZlKSl9KX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShuZSwiUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBtfSxzZXQ6ZnVuY3Rpb24ob3Qpe209b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBhZX0sc2V0OmZ1bmN0aW9uKG90KXthZT1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgaj1tO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwiRmlsZVJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sc2V0OmZ1bmN0aW9uKG90KXtq''@;'; put 'put ''PW90fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBFPWFlO2Z1bmN0aW9uIG0ob3QsTWUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT8oVC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6bS5hcHBseShPYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxhcmd1bWVudHMp''@;'; put 'put ''fWZ1bmN0aW9uIGFlKG90LE1lKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGFlPyhILmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTphZS5hcHBseShPYmplY3QuY3JlYXRlKGFlLnByb3RvdHlwZSksYXJndW1lbnRzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkobmUsIkZpbGVXcml0ZVN0cmVh''@;'; put 'put ''bSIse2dldDpmdW5jdGlvbigpe3JldHVybiBFfSxzZXQ6ZnVuY3Rpb24ob3Qpe0U9b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIFVlPW5lLm9wZW47ZnVuY3Rpb24gSmUob3QsTWUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51''@;'; put 'put ''bGwpLGZ1bmN0aW9uIGplKERlLEZlLFJlLEllLFZlKXtyZXR1cm4gVWUoRGUsRmUsUmUsZnVuY3Rpb24oa2UsQWUpeyFrZXx8IkVNRklMRSIhPT1rZS5jb2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbamUs''@;'; put 'put ''W0RlLEZlLFJlLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QsTWUsdmUsWGUpfXJldHVybiBuZS5vcGVuPUplLG5lfWZ1bmN0aW9uIFkobmUpe0soIkVOUVVFVUUiLG5lWzBdLm5hbWUsbmVbMV0pLGdbT10ucHVzaChuZSksSigpfWZ1bmN0aW9uIGVlKCl7Zm9yKHZh''@;'; put 'put ''ciBuZT1EYXRlLm5vdygpLGllPTA7aWU8Z1tPXS5sZW5ndGg7KytpZSlnW09dW2llXS5sZW5ndGg+MiYmKGdbT11baWVdWzNdPW5lLGdbT11baWVdWzRdPW5lKTtKKCl9ZnVuY3Rpb24gSigpe2lmKGNsZWFyVGltZW91dChxKSxxPXZvaWQgMCwwIT09Z1tPXS5sZW5ndGgpe3ZhciBuZT1nW09d''@;'; put 'put ''LnNoaWZ0KCksaWU9bmVbMF0sbGU9bmVbMV0sbWU9bmVbMl0sX2U9bmVbM10sVGU9bmVbNF07aWYodm9pZCAwPT09X2UpSygiUkVUUlkiLGllLm5hbWUsbGUpLGllLmFwcGx5KG51bGwsbGUpO2Vsc2UgaWYoRGF0ZS5ub3coKS1fZT49NmU0KXtLKCJUSU1FT1VUIixpZS5uYW1lLGxlKTt2YXIg''@;'; put 'put ''U2U9bGUucG9wKCk7ImZ1bmN0aW9uIj09dHlwZW9mIFNlJiZTZS5jYWxsKG51bGwsbWUpfWVsc2V7dmFyIHplPURhdGUubm93KCktVGUsVj1NYXRoLm1heChUZS1fZSwxKTt6ZT49TWF0aC5taW4oMS4yKlYsMTAwKT8oSygiUkVUUlkiLGllLm5hbWUsbGUpLGllLmFwcGx5KG51bGwsbGUuY29u''@;'; put 'put ''Y2F0KFtfZV0pKSk6Z1tPXS5wdXNoKG5lKX12b2lkIDA9PT1xJiYocT1zZXRUaW1lb3V0KEosMCkpfX1GLmRlYnVnbG9nP0s9Ri5kZWJ1Z2xvZygiZ2ZzNCIpOi9cYmdmczRcYi9pLnRlc3QoSS5lbnYuTk9ERV9ERUJVR3x8IiIpJiYoSz1mdW5jdGlvbigpe3ZhciBuZT1GLmZvcm1hdC5hcHBs''@;'; put 'put ''eShGLGFyZ3VtZW50cyk7bmU9IkdGUzQ6ICIrbmUuc3BsaXQoL1xuLykuam9pbigiXG5HRlM0OiAiKSxfLmVycm9yKG5lKX0pLGdbT118fChMKGcseS5nW09dfHxbXSksZy5jbG9zZT1mdW5jdGlvbihuZSl7ZnVuY3Rpb24gaWUobGUsbWUpe3JldHVybiBuZS5jYWxsKGcsbGUsZnVuY3Rpb24o''@;'; put 'put ''X2Upe19lfHxlZSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBtZSYmbWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSx6LHt2YWx1ZTpuZX0pLGllfShnLmNsb3NlKSxnLmNsb3NlU3luYz1mdW5jdGlvbihuZSl7ZnVuY3Rpb24gaWUobGUpe25l''@;'; put 'put ''LmFwcGx5KGcsYXJndW1lbnRzKSxlZSgpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUseix7dmFsdWU6bmV9KSxpZX0oZy5jbG9zZVN5bmMpLC9cYmdmczRcYi9pLnRlc3QoSS5lbnYuTk9ERV9ERUJVR3x8IiIpJiZJLm9uKCJleGl0IixmdW5jdGlvbigpe0soZ1tPXSkseSg5Mjgy''@;'; put 'put ''KS5lcXVhbChnW09dLmxlbmd0aCwwKX0pKSx5LmdbT118fEwoeS5nLGdbT10pLHVlLmV4cG9ydHM9VyhQKGcpKSxJLmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCYmIWcuX19wYXRjaGVkJiYodWUuZXhwb3J0cz1XKGcpLGcuX19wYXRjaGVkPSEwKX0sODUyMDoodWUsWCx5KT0+''@;'; put 'put ''e3ZhciBJPXkoNDE1NSksXz15KDI4MzApLlN0cmVhbTt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQil7cmV0dXJue1JlYWRTdHJlYW06ZnVuY3Rpb24gdyhGLE8pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHcpKXJldHVybiBuZXcgdyhGLE8pO18uY2FsbCh0aGlzKTt2YXIgej10aGlzO3RoaXMucGF0''@;'; put 'put ''aD1GLHRoaXMuZmQ9bnVsbCx0aGlzLnJlYWRhYmxlPSEwLHRoaXMucGF1c2VkPSExLHRoaXMuZmxhZ3M9InIiLHRoaXMubW9kZT00MzgsdGhpcy5idWZmZXJTaXplPTY1NTM2LE89T3x8e307Zm9yKHZhciBOPU9iamVjdC5rZXlzKE8pLEw9MCxLPU4ubGVuZ3RoO0w8SztMKyspe3ZhciBVPU5b''@;'; put 'put ''TF07dGhpc1tVXT1PW1VdfWlmKHRoaXMuZW5jb2RpbmcmJnRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyksdm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHZv''@;'; put 'put ''aWQgMD09PXRoaXMuZW5kKXRoaXMuZW5kPTEvMDtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5lbmQpdGhyb3cgVHlwZUVycm9yKCJlbmQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ+dGhpcy5lbmQpdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlIDw9IGVuZCIp''@;'; put 'put ''O3RoaXMucG9zPXRoaXMuc3RhcnR9bnVsbD09PXRoaXMuZmQ/Qi5vcGVuKHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSxmdW5jdGlvbihXLFkpe2lmKFcpcmV0dXJuIHouZW1pdCgiZXJyb3IiLFcpLHZvaWQoei5yZWFkYWJsZT0hMSk7ei5mZD1ZLHouZW1pdCgib3BlbiIsWSksei5f''@;'; put 'put ''cmVhZCgpfSk6SS5uZXh0VGljayhmdW5jdGlvbigpe3ouX3JlYWQoKX0pfSxXcml0ZVN0cmVhbTpmdW5jdGlvbiBQKEYsTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBQKEYsTyk7Xy5jYWxsKHRoaXMpLHRoaXMucGF0aD1GLHRoaXMuZmQ9bnVsbCx0aGlzLndyaXRhYmxl''@;'; put 'put ''PSEwLHRoaXMuZmxhZ3M9InciLHRoaXMuZW5jb2Rpbmc9ImJpbmFyeSIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ5dGVzV3JpdHRlbj0wLE89T3x8e307Zm9yKHZhciB6PU9iamVjdC5rZXlzKE8pLE49MCxMPXoubGVuZ3RoO048TDtOKyspe3ZhciBLPXpbTl07dGhpc1tLXT1PW0tdfWlmKHZvaWQg''@;'; put 'put ''MCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PDApdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlID49IHplcm8iKTt0aGlzLnBvcz10aGlzLnN0YXJ0''@;'; put 'put ''fXRoaXMuYnVzeT0hMSx0aGlzLl9xdWV1ZT1bXSxudWxsPT09dGhpcy5mZCYmKHRoaXMuX29wZW49Qi5vcGVuLHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sdGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLHZvaWQgMF0pLHRoaXMuZmx1c2goKSl9fX19LDIxNjE6KHVlLFgseSk9''@;'; put 'put ''Pnt2YXIgST15KDQxNTUpLF89eSgzMjA4KSxnPUkuY3dkLEI9bnVsbCx3PUkuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNfHxJLnBsYXRmb3JtO0kuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIEJ8fChCPWcuY2FsbChJKSksQn07dHJ5e0kuY3dkKCl9Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBJLmNoZGlyKXt2YXIgUD1JLmNoZGlyO0kuY2hkaXI9ZnVuY3Rpb24oTyl7Qj1udWxsLFAuY2FsbChJLE8pfSxPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihJLmNoZGlyLFApfXVlLmV4cG9ydHM9ZnVuY3Rpb24gRihPKXtmdW5jdGlvbiBMKEope3JldHVy''@;'; put 'put ''biBKJiZmdW5jdGlvbihuZSxpZSxsZSl7cmV0dXJuIEouY2FsbChPLG5lLGllLGZ1bmN0aW9uKG1lKXtlZShtZSkmJihtZT1udWxsKSxsZSYmbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIEsoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllKXt0cnl7cmV0dXJuIEouY2Fs''@;'; put 'put ''bChPLG5lLGllKX1jYXRjaChsZSl7aWYoIWVlKGxlKSl0aHJvdyBsZX19fWZ1bmN0aW9uIFUoSil7cmV0dXJuIEomJmZ1bmN0aW9uKG5lLGllLGxlLG1lKXtyZXR1cm4gSi5jYWxsKE8sbmUsaWUsbGUsZnVuY3Rpb24oX2Upe2VlKF9lKSYmKF9lPW51bGwpLG1lJiZtZS5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9KX19ZnVuY3Rpb24gVyhKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUsbGUpe3RyeXtyZXR1cm4gSi5jYWxsKE8sbmUsaWUsbGUpfWNhdGNoKG1lKXtpZighZWUobWUpKXRocm93IG1lfX19ZnVuY3Rpb24gWShKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUsbGUpe2Z1bmN0''@;'; put 'put ''aW9uIG1lKF9lLFRlKXtUZSYmKFRlLnVpZDwwJiYoVGUudWlkKz00Mjk0OTY3Mjk2KSxUZS5naWQ8MCYmKFRlLmdpZCs9NDI5NDk2NzI5NikpLGxlJiZsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGllJiYobGU9aWUsaWU9bnVsbCksaWU/Si5jYWxs''@;'; put 'put ''KE8sbmUsaWUsbWUpOkouY2FsbChPLG5lLG1lKX19ZnVuY3Rpb24gcShKKXtyZXR1cm4gSiYmZnVuY3Rpb24obmUsaWUpe3ZhciBsZT1pZT9KLmNhbGwoTyxuZSxpZSk6Si5jYWxsKE8sbmUpO3JldHVybiBsZSYmKGxlLnVpZDwwJiYobGUudWlkKz00Mjk0OTY3Mjk2KSxsZS5naWQ8MCYmKGxl''@;'; put 'put ''LmdpZCs9NDI5NDk2NzI5NikpLGxlfX1mdW5jdGlvbiBlZShKKXtyZXR1cm4hSnx8IkVOT1NZUyI9PT1KLmNvZGV8fCEoSS5nZXR1aWQmJjA9PT1JLmdldHVpZCgpfHwiRUlOVkFMIiE9PUouY29kZSYmIkVQRVJNIiE9PUouY29kZSl9Xy5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJkku''@;'; put 'put ''dmVyc2lvbi5tYXRjaCgvXnYwXC42XC5bMC0yXXxedjBcLjVcLi8pJiZmdW5jdGlvbiB6KEope0oubGNobW9kPWZ1bmN0aW9uKG5lLGllLGxlKXtKLm9wZW4obmUsXy5PX1dST05MWXxfLk9fU1lNTElOSyxpZSxmdW5jdGlvbihtZSxfZSl7bWU/bGUmJmxlKG1lKTpKLmZjaG1vZChfZSxpZSxm''@;'; put 'put ''dW5jdGlvbihUZSl7Si5jbG9zZShfZSxmdW5jdGlvbihTZSl7bGUmJmxlKFRlfHxTZSl9KX0pfSl9LEoubGNobW9kU3luYz1mdW5jdGlvbihuZSxpZSl7dmFyIF9lLGxlPUoub3BlblN5bmMobmUsXy5PX1dST05MWXxfLk9fU1lNTElOSyxpZSksbWU9ITA7dHJ5e19lPUouZmNobW9kU3luYyhs''@;'; put 'put ''ZSxpZSksbWU9ITF9ZmluYWxseXtpZihtZSl0cnl7Si5jbG9zZVN5bmMobGUpfWNhdGNoe31lbHNlIEouY2xvc2VTeW5jKGxlKX1yZXR1cm4gX2V9fShPKSxPLmx1dGltZXN8fGZ1bmN0aW9uIE4oSil7Xy5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJkouZnV0aW1lcz8oSi5sdXRpbWVz''@;'; put 'put ''PWZ1bmN0aW9uKG5lLGllLGxlLG1lKXtKLm9wZW4obmUsXy5PX1NZTUxJTkssZnVuY3Rpb24oX2UsVGUpe19lP21lJiZtZShfZSk6Si5mdXRpbWVzKFRlLGllLGxlLGZ1bmN0aW9uKFNlKXtKLmNsb3NlKFRlLGZ1bmN0aW9uKHplKXttZSYmbWUoU2V8fHplKX0pfSl9KX0sSi5sdXRpbWVzU3lu''@;'; put 'put ''Yz1mdW5jdGlvbihuZSxpZSxsZSl7dmFyIF9lLG1lPUoub3BlblN5bmMobmUsXy5PX1NZTUxJTkspLFRlPSEwO3RyeXtfZT1KLmZ1dGltZXNTeW5jKG1lLGllLGxlKSxUZT0hMX1maW5hbGx5e2lmKFRlKXRyeXtKLmNsb3NlU3luYyhtZSl9Y2F0Y2h7fWVsc2UgSi5jbG9zZVN5bmMobWUpfXJl''@;'; put 'put ''dHVybiBfZX0pOkouZnV0aW1lcyYmKEoubHV0aW1lcz1mdW5jdGlvbihuZSxpZSxsZSxtZSl7bWUmJkkubmV4dFRpY2sobWUpfSxKLmx1dGltZXNTeW5jPWZ1bmN0aW9uKCl7fSl9KE8pLE8uY2hvd249VShPLmNob3duKSxPLmZjaG93bj1VKE8uZmNob3duKSxPLmxjaG93bj1VKE8ubGNob3du''@;'; put 'put ''KSxPLmNobW9kPUwoTy5jaG1vZCksTy5mY2htb2Q9TChPLmZjaG1vZCksTy5sY2htb2Q9TChPLmxjaG1vZCksTy5jaG93blN5bmM9VyhPLmNob3duU3luYyksTy5mY2hvd25TeW5jPVcoTy5mY2hvd25TeW5jKSxPLmxjaG93blN5bmM9VyhPLmxjaG93blN5bmMpLE8uY2htb2RTeW5jPUsoTy5j''@;'; put 'put ''aG1vZFN5bmMpLE8uZmNobW9kU3luYz1LKE8uZmNobW9kU3luYyksTy5sY2htb2RTeW5jPUsoTy5sY2htb2RTeW5jKSxPLnN0YXQ9WShPLnN0YXQpLE8uZnN0YXQ9WShPLmZzdGF0KSxPLmxzdGF0PVkoTy5sc3RhdCksTy5zdGF0U3luYz1xKE8uc3RhdFN5bmMpLE8uZnN0YXRTeW5jPXEoTy5m''@;'; put 'put ''c3RhdFN5bmMpLE8ubHN0YXRTeW5jPXEoTy5sc3RhdFN5bmMpLE8uY2htb2QmJiFPLmxjaG1vZCYmKE8ubGNobW9kPWZ1bmN0aW9uKEosbmUsaWUpe2llJiZJLm5leHRUaWNrKGllKX0sTy5sY2htb2RTeW5jPWZ1bmN0aW9uKCl7fSksTy5jaG93biYmIU8ubGNob3duJiYoTy5sY2hvd249ZnVu''@;'; put 'put ''Y3Rpb24oSixuZSxpZSxsZSl7bGUmJkkubmV4dFRpY2sobGUpfSxPLmxjaG93blN5bmM9ZnVuY3Rpb24oKXt9KSwid2luMzIiPT09dyYmKE8ucmVuYW1lPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlbmFtZT9PLnJlbmFtZTpmdW5jdGlvbihKKXtmdW5jdGlvbiBuZShpZSxsZSxtZSl7dmFyIF9l''@;'; put 'put ''PURhdGUubm93KCksVGU9MDtKKGllLGxlLGZ1bmN0aW9uIFNlKHplKXtpZih6ZSYmKCJFQUNDRVMiPT09emUuY29kZXx8IkVQRVJNIj09PXplLmNvZGV8fCJFQlVTWSI9PT16ZS5jb2RlKSYmRGF0ZS5ub3coKS1fZTw2ZTQpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtPLnN0YXQobGUs''@;'; put 'put ''ZnVuY3Rpb24oVixwKXtWJiYiRU5PRU5UIj09PVYuY29kZT9KKGllLGxlLFNlKTptZSh6ZSl9KX0sVGUpLHZvaWQoVGU8MTAwJiYoVGUrPTEwKSk7bWUmJm1lKHplKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxKKSxuZX0oTy5yZW5h''@;'; put 'put ''bWUpKSxPLnJlYWQ9ImZ1bmN0aW9uIiE9dHlwZW9mIE8ucmVhZD9PLnJlYWQ6ZnVuY3Rpb24oSil7ZnVuY3Rpb24gbmUoaWUsbGUsbWUsX2UsVGUsU2Upe3ZhciB6ZTtpZihTZSYmImZ1bmN0aW9uIj09dHlwZW9mIFNlKXt2YXIgVj0wO3plPWZ1bmN0aW9uKHAsYix4KXtpZihwJiYiRUFHQUlO''@;'; put 'put ''Ij09PXAuY29kZSYmVjwxMClyZXR1cm4gVisrLEouY2FsbChPLGllLGxlLG1lLF9lLFRlLHplKTtTZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXJldHVybiBKLmNhbGwoTyxpZSxsZSxtZSxfZSxUZSx6ZSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlw''@;'; put 'put ''ZU9mKG5lLEopLG5lfShPLnJlYWQpLE8ucmVhZFN5bmM9ImZ1bmN0aW9uIiE9dHlwZW9mIE8ucmVhZFN5bmM/Ty5yZWFkU3luYzpmdW5jdGlvbihKKXtyZXR1cm4gZnVuY3Rpb24obmUsaWUsbGUsbWUsX2Upe2Zvcih2YXIgVGU9MDs7KXRyeXtyZXR1cm4gSi5jYWxsKE8sbmUsaWUsbGUsbWUs''@;'; put 'put ''X2UpfWNhdGNoKFNlKXtpZigiRUFHQUlOIj09PVNlLmNvZGUmJlRlPDEwKXtUZSsrO2NvbnRpbnVlfXRocm93IFNlfX19KE8ucmVhZFN5bmMpfX0sMTA0NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ0MjkpLF89ZnVuY3Rpb24oKXtyZXR1cm4hIUl9O18uaGFzQXJyYXlMZW5n''@;'; put 'put ''dGhEZWZpbmVCdWc9ZnVuY3Rpb24oKXtpZighSSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIDEhPT1JKFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoe3JldHVybiEwfX0sdWUuZXhwb3J0cz1ffSwxNDA1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXR5cGVvZiBTeW1i''@;'; put 'put ''b2w8InUiJiZTeW1ib2wsXz15KDU0MTkpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBJKCJmb28iKSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZfKCl9''@;'; put 'put ''fSw1NDE5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgU3ltYm9sfHwiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylyZXR1cm4hMTtpZigic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVy''@;'; put 'put ''YXRvcilyZXR1cm4hMDt2YXIgeT17fSxJPVN5bWJvbCgidGVzdCIpLF89T2JqZWN0KEkpO2lmKCJzdHJpbmciPT10eXBlb2YgSXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSSl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKF8pKXJldHVybiExO2Zvcih2YXIgQiBpbiB5W0ldPTQyLHkpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5rZXlzJiYwIT09T2JqZWN0LmtleXMoeSkubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFt''@;'; put 'put ''ZXMmJjAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh5KS5sZW5ndGgpcmV0dXJuITE7dmFyIHc9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh5KTtpZigxIT09dy5sZW5ndGh8fHdbMF0hPT1JfHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHks''@;'; put 'put ''SSkpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe3ZhciBQPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoeSxJKTtpZig0MiE9PVAudmFsdWV8fCEwIT09UC5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0s''@;'; put 'put ''NjQxMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU0MTkpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gSSgpJiYhIVN5bWJvbC50b1N0cmluZ1RhZ319LDMzNDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NTA5KS5CdWZmZXIsXz15KDI4MzApLlRyYW5z''@;'; put 'put ''Zm9ybTtmdW5jdGlvbiBCKE8pe18uY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1JLmFsbG9jVW5zYWZlKE8pLHRoaXMuX2Jsb2NrU2l6ZT1PLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9eSg1NzE3KShCLF8pLEIucHJvdG90eXBl''@;'; put 'put ''Ll90cmFuc2Zvcm09ZnVuY3Rpb24oTyx6LE4pe3ZhciBMPW51bGw7dHJ5e3RoaXMudXBkYXRlKE8seil9Y2F0Y2goSyl7TD1LfU4oTCl9LEIucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgej1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goTil7ej1OfU8o''@;'; put 'put ''eil9O3ZhciB3PXR5cGVvZiBVaW50OEFycmF5PCJ1IixQPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO0IucHJv''@;'; put 'put ''dG90eXBlLnVwZGF0ZT1mdW5jdGlvbihPLHope2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO089ZnVuY3Rpb24gRihPLHope2lmKE8gaW5zdGFuY2VvZiBJKXJldHVybiBPO2lmKCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gSS5m''@;'; put 'put ''cm9tKE8seik7aWYoUCYmQXJyYXlCdWZmZXIuaXNWaWV3KE8pKXtpZigwPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBOPUkuZnJvbShPLmJ1ZmZlcixPLmJ5dGVPZmZzZXQsTy5ieXRlTGVuZ3RoKTtpZihOLmJ5dGVMZW5ndGg9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIE59''@;'; put 'put ''aWYodyYmTyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoTykmJk8uY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZPLmNvbnN0cnVjdG9yLmlzQnVmZmVyKE8pKXJldHVybiBJLmZyb20oTyk7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KE8seik7Zm9yKHZhciBOPXRoaXMuX2Jsb2NrLEw9MDt0aGlzLl9ibG9ja09mZnNldCtPLmxlbmd0aC1MPj10aGlz''@;'; put 'put ''Ll9ibG9ja1NpemU7KXtmb3IodmFyIEs9dGhpcy5fYmxvY2tPZmZzZXQ7Szx0aGlzLl9ibG9ja1NpemU7KU5bSysrXT1PW0wrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO0w8Ty5sZW5ndGg7KU5bdGhpcy5fYmxvY2tPZmZzZXQrK109T1tMKytdO2Zvcih2YXIg''@;'; put 'put ''VT0wLFc9OCpPLmxlbmd0aDtXPjA7KytVKXRoaXMuX2xlbmd0aFtVXSs9VywoVz10aGlzLl9sZW5ndGhbVV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW1VdLT00Mjk0OTY3Mjk2KlcpO3JldHVybiB0aGlzfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oTyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciB6PXRoaXMuX2RpZ2Vz''@;'; put 'put ''dCgpO3ZvaWQgMCE9PU8mJih6PXoudG9TdHJpbmcoTykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIE49MDtOPDQ7KytOKXRoaXMuX2xlbmd0aFtOXT0wO3JldHVybiB6fSxCLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSx1ZS5leHBvcnRzPUJ9LDM3MTU6KHVlLFgseSk9Pnt2YXIgST1YO0kudXRpbHM9eSg2NDM2KSxJLmNvbW1vbj15KDU3NzIpLEkuc2hhPXkoOTA0MSksSS5yaXBlbWQ9eSgyOTQ5KSxJLmhtYWM9eSgyMzQ0KSxJLnNoYTE9SS5zaGEu''@;'; put 'put ''c2hhMSxJLnNoYTI1Nj1JLnNoYS5zaGEyNTYsSS5zaGEyMjQ9SS5zaGEuc2hhMjI0LEkuc2hhMzg0PUkuc2hhLnNoYTM4NCxJLnNoYTUxMj1JLnNoYS5zaGE1MTIsSS5yaXBlbWQxNjA9SS5yaXBlbWQucmlwZW1kMTYwfSw1NzcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQz''@;'; put 'put ''NiksXz15KDk3NDYpO2Z1bmN0aW9uIGcoKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhp''@;'; put 'put ''cy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfVguQmxvY2tIYXNoPWcs''@;'; put 'put ''Zy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUCl7aWYodz1JLnRvQXJyYXkodyxQKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQodyk6dyx0aGlzLnBlbmRpbmdUb3RhbCs9dy5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4''@;'; put 'put ''KXt2YXIgRj0odz10aGlzLnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPXcuc2xpY2Uody5sZW5ndGgtRix3Lmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksdz1JLmpvaW4zMih3LDAsdy5sZW5ndGgtRix0aGlzLmVu''@;'; put 'put ''ZGlhbik7Zm9yKHZhciBPPTA7Tzx3Lmxlbmd0aDtPKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZSh3LE8sTyt0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sZy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksXyhudWxsPT09''@;'; put 'put ''dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3Qodyl9LGcucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLnBlbmRpbmdUb3RhbCxQPXRoaXMuX2RlbHRhOCxGPVAtKHcrdGhpcy5wYWRMZW5ndGgpJVAsTz1uZXcgQXJyYXkoRit0aGlzLnBhZExlbmd0aCk7T1swXT0xMjg7Zm9y''@;'; put 'put ''KHZhciB6PTE7ejxGO3orKylPW3pdPTA7aWYodzw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBOPTg7Tjx0aGlzLnBhZExlbmd0aDtOKyspT1t6KytdPTA7T1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPXc+Pj4yNCYyNTUsT1t6KytdPXc+Pj4xNiYy''@;'; put 'put ''NTUsT1t6KytdPXc+Pj44JjI1NSxPW3orK109MjU1Jnd9ZWxzZSBmb3IoT1t6KytdPTI1NSZ3LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPXc+Pj4xNiYyNTUsT1t6KytdPXc+Pj4yNCYyNTUsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsT1t6KytdPTAsTj04O048dGhpcy5wYWRMZW5ndGg7''@;'; put 'put ''TisrKU9beisrXT0wO3JldHVybiBPfX0sMjM0NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg5NzQ2KTtmdW5jdGlvbiBnKEIsdyxQKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGcoQix3LFApO3RoaXMuSGFzaD1CLHRoaXMuYmxvY2tTaXpl''@;'; put 'put ''PUIuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPUIub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChJLnRvQXJyYXkodyxQKSl9dWUuZXhwb3J0cz1nLGcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHcpe3cubGVuZ3RoPnRoaXMuYmxvY2tTaXpl''@;'; put 'put ''JiYodz0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLmRpZ2VzdCgpKSxfKHcubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBQPXcubGVuZ3RoO1A8dGhpcy5ibG9ja1NpemU7UCsrKXcucHVzaCgwKTtmb3IoUD0wO1A8dy5sZW5ndGg7UCsrKXdbUF1ePTU0O2Zvcih0aGlzLmlubmVy''@;'; put 'put ''PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodyksUD0wO1A8dy5sZW5ndGg7UCsrKXdbUF1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodyl9LGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh3LFApLHRoaXN9LGcu''@;'; put 'put ''cHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3Qodyl9fSwyOTQ5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQzNiksXz15KDU3NzIpLGc9SS5yb3RsMzIsQj1J''@;'; put 'put ''LnN1bTMyLHc9SS5zdW0zMl8zLFA9SS5zdW0zMl80LEY9Xy5CbG9ja0hhc2g7ZnVuY3Rpb24gTygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTztGLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3''@;'; put 'put ''NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24geihxLGVlLEosbmUpe3JldHVybiBxPD0xNT9lZV5KXm5lOnE8PTMxP2VlJkp8fmVlJm5lOnE8PTQ3PyhlZXx+SilebmU6cTw9NjM/ZWUmbmV8SiZ+bmU6ZWVeKEp8fm5lKX1mdW5jdGlvbiBMKHEpe3JldHVybiBxPD0xNT8xMzUy''@;'; put 'put ''ODI5OTI2OnE8PTMxPzE1NDg2MDM2ODQ6cTw9NDc/MTgzNjA3MjY5MTpxPD02Mz8yMDUzOTk0MjE3OjB9SS5pbmhlcml0cyhPLEYpLFgucmlwZW1kMTYwPU8sTy5ibG9ja1NpemU9NTEyLE8ub3V0U2l6ZT0xNjAsTy5obWFjU3RyZW5ndGg9MTkyLE8ucGFkTGVuZ3RoPTY0LE8ucHJvdG90eXBl''@;'; put 'put ''Ll91cGRhdGU9ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciBuZT10aGlzLmhbMF0saWU9dGhpcy5oWzFdLGxlPXRoaXMuaFsyXSxtZT10aGlzLmhbM10sX2U9dGhpcy5oWzRdLFRlPW5lLFNlPWllLHplPWxlLFY9bWUscD1fZSxiPTA7Yjw4MDtiKyspe3ZhciB4PUIoZyhQKG5lLHooYixpZSxsZSxt''@;'; put 'put ''ZSksZWVbS1tiXStKXSwocT1iKTw9MTU/MDpxPD0zMT8xNTE4NTAwMjQ5OnE8PTQ3PzE4NTk3NzUzOTM6cTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxXW2JdKSxfZSk7bmU9X2UsX2U9bWUsbWU9ZyhsZSwxMCksbGU9aWUsaWU9eCx4PUIoZyhQKFRlLHooNzktYixTZSx6ZSxWKSxlZVtV''@;'; put 'put ''W2JdK0pdLEwoYikpLFlbYl0pLHApLFRlPXAscD1WLFY9Zyh6ZSwxMCksemU9U2UsU2U9eH12YXIgcTt4PXcodGhpcy5oWzFdLGxlLFYpLHRoaXMuaFsxXT13KHRoaXMuaFsyXSxtZSxwKSx0aGlzLmhbMl09dyh0aGlzLmhbM10sX2UsVGUpLHRoaXMuaFszXT13KHRoaXMuaFs0XSxuZSxTZSks''@;'; put 'put ''dGhpcy5oWzRdPXcodGhpcy5oWzBdLGllLHplKSx0aGlzLmhbMF09eH0sTy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihlZSl7cmV0dXJuImhleCI9PT1lZT9JLnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTpJLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEs9WzAsMSwyLDMsNCw1''@;'; put 'put ''LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwz''@;'; put 'put ''LDgsMTEsNiwxNSwxM10sVT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywx''@;'; put 'put ''MCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxXPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcs''@;'; put 'put ''NSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxZPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDEx''@;'; put 'put ''LDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sOTA0MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnNoYTE9eSg0NzYx''@;'; put 'put ''KSxYLnNoYTIyND15KDc5OSksWC5zaGEyNTY9eSg5MzQ0KSxYLnNoYTM4ND15KDc3MiksWC5zaGE1MTI9eSg1OTAwKX0sNDc2MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1NzcyKSxnPXkoNzAzOCksQj1JLnJvdGwzMix3PUkuc3VtMzIsUD1JLnN1bTMyXzUs''@;'; put 'put ''Rj1nLmZ0XzEsTz1fLkJsb2NrSGFzaCx6PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBOKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOO08uY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywy''@;'; put 'put ''NTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1JLmluaGVyaXRzKE4sTyksdWUuZXhwb3J0cz1OLE4uYmxvY2tTaXplPTUxMixOLm91dFNpemU9MTYwLE4uaG1hY1N0cmVuZ3RoPTgwLE4ucGFkTGVuZ3RoPTY0LE4ucHJvdG90eXBlLl91cGRhdGU9''@;'; put 'put ''ZnVuY3Rpb24oSyxVKXtmb3IodmFyIFc9dGhpcy5XLFk9MDtZPDE2O1krKylXW1ldPUtbVStZXTtmb3IoO1k8Vy5sZW5ndGg7WSsrKVdbWV09QihXW1ktM11eV1tZLThdXldbWS0xNF1eV1tZLTE2XSwxKTt2YXIgcT10aGlzLmhbMF0sZWU9dGhpcy5oWzFdLEo9dGhpcy5oWzJdLG5lPXRoaXMu''@;'; put 'put ''aFszXSxpZT10aGlzLmhbNF07Zm9yKFk9MDtZPFcubGVuZ3RoO1krKyl7dmFyIGxlPX5+KFkvMjApLG1lPVAoQihxLDUpLEYobGUsZWUsSixuZSksaWUsV1tZXSx6W2xlXSk7aWU9bmUsbmU9SixKPUIoZWUsMzApLGVlPXEscT1tZX10aGlzLmhbMF09dyh0aGlzLmhbMF0scSksdGhpcy5oWzFd''@;'; put 'put ''PXcodGhpcy5oWzFdLGVlKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sSiksdGhpcy5oWzNdPXcodGhpcy5oWzNdLG5lKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0saWUpfSxOLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEspe3JldHVybiJoZXgiPT09Sz9JLnRvSGV4MzIodGhpcy5oLCJiaWci''@;'; put 'put ''KTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc5OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg5MzQ0KTtmdW5jdGlvbiBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnO18uY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0''@;'; put 'put ''MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyxfKSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9NTEyLGcub3V0U2l6ZT0yMjQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVuZ3RoPTY0''@;'; put 'put ''LGcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0kudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDkzNDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxf''@;'; put 'put ''PXkoNTc3MiksZz15KDcwMzgpLEI9eSg5NzQ2KSx3PUkuc3VtMzIsUD1JLnN1bTMyXzQsRj1JLnN1bTMyXzUsTz1nLmNoMzIsej1nLm1hajMyLE49Zy5zMF8yNTYsTD1nLnMxXzI1NixLPWcuZzBfMjU2LFU9Zy5nMV8yNTYsVz1fLkJsb2NrSGFzaCxZPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEs''@;'; put 'put ''MzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAy''@;'; put 'put ''MjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIw''@;'; put 'put ''NSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQs''@;'; put 'put ''NDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkz''@;'; put 'put ''MjUyOThdO2Z1bmN0aW9uIHEoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBxKSlyZXR1cm4gbmV3IHE7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVd''@;'; put 'put ''LHRoaXMuaz1ZLHRoaXMuVz1uZXcgQXJyYXkoNjQpfUkuaW5oZXJpdHMocSxXKSx1ZS5leHBvcnRzPXEscS5ibG9ja1NpemU9NTEyLHEub3V0U2l6ZT0yNTYscS5obWFjU3RyZW5ndGg9MTkyLHEucGFkTGVuZ3RoPTY0LHEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSixuZSl7Zm9yKHZh''@;'; put 'put ''ciBpZT10aGlzLlcsbGU9MDtsZTwxNjtsZSsrKWllW2xlXT1KW25lK2xlXTtmb3IoO2xlPGllLmxlbmd0aDtsZSsrKWllW2xlXT1QKFUoaWVbbGUtMl0pLGllW2xlLTddLEsoaWVbbGUtMTVdKSxpZVtsZS0xNl0pO3ZhciBtZT10aGlzLmhbMF0sX2U9dGhpcy5oWzFdLFRlPXRoaXMuaFsyXSxT''@;'; put 'put ''ZT10aGlzLmhbM10semU9dGhpcy5oWzRdLFY9dGhpcy5oWzVdLHA9dGhpcy5oWzZdLGI9dGhpcy5oWzddO2ZvcihCKHRoaXMuay5sZW5ndGg9PT1pZS5sZW5ndGgpLGxlPTA7bGU8aWUubGVuZ3RoO2xlKyspe3ZhciB4PUYoYixMKHplKSxPKHplLFYscCksdGhpcy5rW2xlXSxpZVtsZV0pLEM9''@;'; put 'put ''dyhOKG1lKSx6KG1lLF9lLFRlKSk7Yj1wLHA9VixWPXplLHplPXcoU2UseCksU2U9VGUsVGU9X2UsX2U9bWUsbWU9dyh4LEMpfXRoaXMuaFswXT13KHRoaXMuaFswXSxtZSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLF9lKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sVGUpLHRoaXMuaFszXT13KHRo''@;'; put 'put ''aXMuaFszXSxTZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLHplKSx0aGlzLmhbNV09dyh0aGlzLmhbNV0sViksdGhpcy5oWzZdPXcodGhpcy5oWzZdLHApLHRoaXMuaFs3XT13KHRoaXMuaFs3XSxiKX0scS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihKKXtyZXR1cm4iaGV4Ij09PUo/SS50''@;'; put 'put ''b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3NzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDM2KSxfPXkoNTkwMCk7ZnVuY3Rpb24gZygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZztfLmNhbGwodGhpcyksdGhp''@;'; put 'put ''cy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2Mjgx''@;'; put 'put ''MywzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcsXyksdWUuZXhwb3J0cz1nLGcuYmxvY2tTaXplPTEwMjQsZy5vdXRTaXplPTM4NCxnLmhtYWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9MTI4LGcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P0kudG9IZXgz''@;'; put 'put ''Mih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sNTkwMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MzYpLF89eSg1NzcyKSxnPXkoOTc0NiksQj1JLnJvdHI2NF9oaSx3PUkucm90cjY0X2xvLFA9SS5zaHI2''@;'; put 'put ''NF9oaSxGPUkuc2hyNjRfbG8sTz1JLnN1bTY0LHo9SS5zdW02NF9oaSxOPUkuc3VtNjRfbG8sTD1JLnN1bTY0XzRfaGksSz1JLnN1bTY0XzRfbG8sVT1JLnN1bTY0XzVfaGksVz1JLnN1bTY0XzVfbG8sWT1fLkJsb2NrSGFzaCxxPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2''@;'; put 'put ''MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEw''@;'; put 'put ''NTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEz''@;'; put 'put ''NDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIs''@;'; put 'put ''Mzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYz''@;'; put 'put ''MDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3''@;'; put 'put ''NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0''@;'; put 'put ''NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3''@;'; put 'put ''ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1''@;'; put 'put ''MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2''@;'; put 'put ''LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcx''@;'; put 'put ''Njc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gZWUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlZSkpcmV0dXJuIG5ldyBlZTtZLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQy''@;'; put 'put ''NDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9cSx0aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gSih4''@;'; put 'put ''LEMsVCxILGope3ZhciBFPXgmVF5+eCZqO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIG5lKHgsQyxULEgsaixFKXt2YXIgbT1DJkhefkMmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBpZSh4LEMsVCxILGope3ZhciBFPXgmVF54JmpeVCZq''@;'; put 'put ''O3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGxlKHgsQyxULEgsaixFKXt2YXIgbT1DJkheQyZFXkgmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBtZSh4LEMpe3ZhciBFPUIoeCxDLDI4KV5CKEMseCwyKV5CKEMseCw3KTtyZXR1cm4gRTww''@;'; put 'put ''JiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBfZSh4LEMpe3ZhciBFPXcoeCxDLDI4KV53KEMseCwyKV53KEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBUZSh4LEMpe3ZhciBFPUIoeCxDLDE0KV5CKHgsQywxOCleQihDLHgsOSk7cmV0dXJuIEU8MCYm''@;'; put 'put ''KEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gU2UoeCxDKXt2YXIgRT13KHgsQywxNCledyh4LEMsMTgpXncoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHplKHgsQyl7dmFyIEU9Qih4LEMsMSleQih4LEMsOCleUCh4LEMsNyk7cmV0dXJuIEU8MCYmKEUr''@;'; put 'put ''PTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVih4LEMpe3ZhciBFPXcoeCxDLDEpXncoeCxDLDgpXkYoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHAoeCxDKXt2YXIgRT1CKHgsQywxOSleQihDLHgsMjkpXlAoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0''@;'; put 'put ''OTY3Mjk2KSxFfWZ1bmN0aW9uIGIoeCxDKXt2YXIgRT13KHgsQywxOSledyhDLHgsMjkpXkYoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfUkuaW5oZXJpdHMoZWUsWSksdWUuZXhwb3J0cz1lZSxlZS5ibG9ja1NpemU9MTAyNCxlZS5vdXRTaXplPTUxMixlZS5obWFjU3Ry''@;'; put 'put ''ZW5ndGg9MTkyLGVlLnBhZExlbmd0aD0xMjgsZWUucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9dGhpcy5XLGo9MDtqPDMyO2orKylIW2pdPUNbVCtqXTtmb3IoO2o8SC5sZW5ndGg7ais9Mil7dmFyIEU9cChIW2otNF0sSFtqLTNdKSxtPWIoSFtqLTRd''@;'; put 'put ''LEhbai0zXSksQT1IW2otMTRdLGFlPUhbai0xM10sdGU9emUoSFtqLTMwXSxIW2otMjldKSxzZT1WKEhbai0zMF0sSFtqLTI5XSksd2U9SFtqLTMyXSxVZT1IW2otMzFdO0hbal09TChFLG0sQSxhZSx0ZSxzZSx3ZSxVZSksSFtqKzFdPUsoRSxtLEEsYWUsdGUsc2Usd2UsVWUpfX0sZWUucHJv''@;'; put 'put ''dG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQyxUKXt0aGlzLl9wcmVwYXJlQmxvY2soQyxUKTt2YXIgSD10aGlzLlcsaj10aGlzLmhbMF0sRT10aGlzLmhbMV0sbT10aGlzLmhbMl0sQT10aGlzLmhbM10sYWU9dGhpcy5oWzRdLHRlPXRoaXMuaFs1XSxzZT10aGlzLmhbNl0sd2U9dGhpcy5oWzdd''@;'; put 'put ''LFVlPXRoaXMuaFs4XSxKZT10aGlzLmhbOV0sb3Q9dGhpcy5oWzEwXSxNZT10aGlzLmhbMTFdLHZlPXRoaXMuaFsxMl0sWGU9dGhpcy5oWzEzXSxqZT10aGlzLmhbMTRdLERlPXRoaXMuaFsxNV07Zyh0aGlzLmsubGVuZ3RoPT09SC5sZW5ndGgpO2Zvcih2YXIgRmU9MDtGZTxILmxlbmd0aDtG''@;'; put 'put ''ZSs9Mil7dmFyIFJlPWplLEllPURlLFZlPVRlKFVlLEplKSxrZT1TZShVZSxKZSksQWU9SihVZSwwLG90LDAsdmUpLF90PW5lKDAsSmUsMCxNZSwwLFhlKSxudD10aGlzLmtbRmVdLFFlPXRoaXMua1tGZSsxXSx1bj1IW0ZlXSx5dD1IW0ZlKzFdLE10PVUoUmUsSWUsVmUsa2UsQWUsX3QsbnQs''@;'; put 'put ''UWUsdW4seXQpLER0PVcoUmUsSWUsVmUsa2UsQWUsX3QsbnQsUWUsdW4seXQpO1JlPW1lKGosRSksSWU9X2UoaixFKSxWZT1pZShqLDAsbSwwLGFlKSxrZT1sZSgwLEUsMCxBLDAsdGUpO3ZhciBpdD16KFJlLEllLFZlLGtlKSwkZT1OKFJlLEllLFZlLGtlKTtqZT12ZSxEZT1YZSx2ZT1vdCxY''@;'; put 'put ''ZT1NZSxvdD1VZSxNZT1KZSxVZT16KHNlLHdlLE10LER0KSxKZT1OKHdlLHdlLE10LER0KSxzZT1hZSx3ZT10ZSxhZT1tLHRlPUEsbT1qLEE9RSxqPXooTXQsRHQsaXQsJGUpLEU9TihNdCxEdCxpdCwkZSl9Tyh0aGlzLmgsMCxqLEUpLE8odGhpcy5oLDIsbSxBKSxPKHRoaXMuaCw0LGFlLHRl''@;'; put 'put ''KSxPKHRoaXMuaCw2LHNlLHdlKSxPKHRoaXMuaCw4LFVlLEplKSxPKHRoaXMuaCwxMCxvdCxNZSksTyh0aGlzLmgsMTIsdmUsWGUpLE8odGhpcy5oLDE0LGplLERlKX0sZWUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oQyl7cmV0dXJuImhleCI9PT1DP0kudG9IZXgzMih0aGlzLmgsImJp''@;'; put 'put ''ZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzAzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDY0MzYpLnJvdHIzMjtmdW5jdGlvbiBCKEwsSyxVKXtyZXR1cm4gTCZLXn5MJlV9ZnVuY3Rpb24gdyhMLEssVSl7cmV0dXJuIEwmS15MJlVeSyZVfWZ1bmN0aW9uIFAoTCxL''@;'; put 'put ''LFUpe3JldHVybiBMXkteVX1YLmZ0XzE9ZnVuY3Rpb24gZyhMLEssVSxXKXtyZXR1cm4gMD09PUw/QihLLFUsVyk6MT09PUx8fDM9PT1MP1AoSyxVLFcpOjI9PT1MP3coSyxVLFcpOnZvaWQgMH0sWC5jaDMyPUIsWC5tYWozMj13LFgucDMyPVAsWC5zMF8yNTY9ZnVuY3Rpb24gRihMKXtyZXR1''@;'; put 'put ''cm4gXyhMLDIpXl8oTCwxMyleXyhMLDIyKX0sWC5zMV8yNTY9ZnVuY3Rpb24gTyhMKXtyZXR1cm4gXyhMLDYpXl8oTCwxMSleXyhMLDI1KX0sWC5nMF8yNTY9ZnVuY3Rpb24geihMKXtyZXR1cm4gXyhMLDcpXl8oTCwxOCleTD4+PjN9LFguZzFfMjU2PWZ1bmN0aW9uIE4oTCl7cmV0dXJuIF8o''@;'; put 'put ''TCwxNyleXyhMLDE5KV5MPj4+MTB9fSw2NDM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTc0NiksXz15KDU3MTcpO2Z1bmN0aW9uIGcoYix4KXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImYi5jaGFyQ29kZUF0KHgpKXx8eDwwfHx4KzE+PWIubGVuZ3RoKSYmNTYzMjA9PSg2NDUx''@;'; put 'put ''MiZiLmNoYXJDb2RlQXQoeCsxKSl9ZnVuY3Rpb24gUChiKXtyZXR1cm4oYj4+PjI0fGI+Pj44JjY1MjgwfGI8PDgmMTY3MTE2ODB8KDI1NSZiKTw8MjQpPj4+MH1mdW5jdGlvbiBPKGIpe3JldHVybiAxPT09Yi5sZW5ndGg/IjAiK2I6Yn1mdW5jdGlvbiB6KGIpe3JldHVybiA3PT09Yi5sZW5n''@;'; put 'put ''dGg/IjAiK2I6Nj09PWIubGVuZ3RoPyIwMCIrYjo1PT09Yi5sZW5ndGg/IjAwMCIrYjo0PT09Yi5sZW5ndGg/IjAwMDAiK2I6Mz09PWIubGVuZ3RoPyIwMDAwMCIrYjoyPT09Yi5sZW5ndGg/IjAwMDAwMCIrYjoxPT09Yi5sZW5ndGg/IjAwMDAwMDAiK2I6Yn1YLmluaGVyaXRzPV8sWC50b0Fy''@;'; put 'put ''cmF5PWZ1bmN0aW9uIEIoYix4KXtpZihBcnJheS5pc0FycmF5KGIpKXJldHVybiBiLnNsaWNlKCk7aWYoIWIpcmV0dXJuW107dmFyIEM9W107aWYoInN0cmluZyI9PXR5cGVvZiBiKWlmKHgpe2lmKCJoZXgiPT09eClmb3IoKGI9Yi5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3Ro''@;'; put 'put ''JTIhPTAmJihiPSIwIitiKSxIPTA7SDxiLmxlbmd0aDtIKz0yKUMucHVzaChwYXJzZUludChiW0hdK2JbSCsxXSwxNikpfWVsc2UgZm9yKHZhciBUPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgaj1iLmNoYXJDb2RlQXQoSCk7ajwxMjg/Q1tUKytdPWo6ajwyMDQ4PyhDW1QrK109aj4+Nnwx''@;'; put 'put ''OTIsQ1tUKytdPTYzJmp8MTI4KTpnKGIsSCk/KGo9NjU1MzYrKCgxMDIzJmopPDwxMCkrKDEwMjMmYi5jaGFyQ29kZUF0KCsrSCkpLENbVCsrXT1qPj4xOHwyNDAsQ1tUKytdPWo+PjEyJjYzfDEyOCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KTooQ1tUKytdPWo+PjEyfDIy''@;'; put 'put ''NCxDW1QrK109aj4+NiY2M3wxMjgsQ1tUKytdPTYzJmp8MTI4KX1lbHNlIGZvcihIPTA7SDxiLmxlbmd0aDtIKyspQ1tIXT0wfGJbSF07cmV0dXJuIEN9LFgudG9IZXg9ZnVuY3Rpb24gdyhiKXtmb3IodmFyIHg9IiIsQz0wO0M8Yi5sZW5ndGg7QysrKXgrPU8oYltDXS50b1N0cmluZygxNikp''@;'; put 'put ''O3JldHVybiB4fSxYLmh0b25sPVAsWC50b0hleDMyPWZ1bmN0aW9uIEYoYix4KXtmb3IodmFyIEM9IiIsVD0wO1Q8Yi5sZW5ndGg7VCsrKXt2YXIgSD1iW1RdOyJsaXR0bGUiPT09eCYmKEg9UChIKSksQys9eihILnRvU3RyaW5nKDE2KSl9cmV0dXJuIEN9LFguemVybzI9TyxYLnplcm84PXos''@;'; put 'put ''WC5qb2luMzI9ZnVuY3Rpb24gTihiLHgsQyxUKXt2YXIgSD1DLXg7SShIJTQ9PTApO2Zvcih2YXIgaj1uZXcgQXJyYXkoSC80KSxFPTAsbT14O0U8ai5sZW5ndGg7RSsrLG0rPTQpaltFXT0oImJpZyI9PT1UP2JbbV08PDI0fGJbbSsxXTw8MTZ8YlttKzJdPDw4fGJbbSszXTpiW20rM108PDI0''@;'; put 'put ''fGJbbSsyXTw8MTZ8YlttKzFdPDw4fGJbbV0pPj4+MDtyZXR1cm4gan0sWC5zcGxpdDMyPWZ1bmN0aW9uIEwoYix4KXtmb3IodmFyIEM9bmV3IEFycmF5KDQqYi5sZW5ndGgpLFQ9MCxIPTA7VDxiLmxlbmd0aDtUKyssSCs9NCl7dmFyIGo9YltUXTsiYmlnIj09PXg/KENbSF09aj4+PjI0LENb''@;'; put 'put ''SCsxXT1qPj4+MTYmMjU1LENbSCsyXT1qPj4+OCYyNTUsQ1tIKzNdPTI1NSZqKTooQ1tIKzNdPWo+Pj4yNCxDW0grMl09aj4+PjE2JjI1NSxDW0grMV09aj4+PjgmMjU1LENbSF09MjU1JmopfXJldHVybiBDfSxYLnJvdHIzMj1mdW5jdGlvbiBLKGIseCl7cmV0dXJuIGI+Pj54fGI8PDMyLXh9''@;'; put 'put ''LFgucm90bDMyPWZ1bmN0aW9uIFUoYix4KXtyZXR1cm4gYjw8eHxiPj4+MzIteH0sWC5zdW0zMj1mdW5jdGlvbiBXKGIseCl7cmV0dXJuIGIreD4+PjB9LFguc3VtMzJfMz1mdW5jdGlvbiBZKGIseCxDKXtyZXR1cm4gYit4K0M+Pj4wfSxYLnN1bTMyXzQ9ZnVuY3Rpb24gcShiLHgsQyxUKXty''@;'; put 'put ''ZXR1cm4gYit4K0MrVD4+PjB9LFguc3VtMzJfNT1mdW5jdGlvbiBlZShiLHgsQyxULEgpe3JldHVybiBiK3grQytUK0g+Pj4wfSxYLnN1bTY0PWZ1bmN0aW9uIEooYix4LEMsVCl7dmFyIEU9VCtiW3grMV0+Pj4wO2JbeF09KEU8VD8xOjApK0MrYlt4XT4+PjAsYlt4KzFdPUV9LFguc3VtNjRf''@;'; put 'put ''aGk9ZnVuY3Rpb24gbmUoYix4LEMsVCl7cmV0dXJuKHgrVD4+PjA8eD8xOjApK2IrQz4+PjB9LFguc3VtNjRfbG89ZnVuY3Rpb24gaWUoYix4LEMsVCl7cmV0dXJuIHgrVD4+PjB9LFguc3VtNjRfNF9oaT1mdW5jdGlvbiBsZShiLHgsQyxULEgsaixFLG0pe3ZhciBBPTAsYWU9eDtyZXR1cm4g''@;'; put 'put ''QSs9KGFlPWFlK1Q+Pj4wKTx4PzE6MCxBKz0oYWU9YWUraj4+PjApPGo/MTowLGIrQytIK0UrKEErPShhZT1hZSttPj4+MCk8bT8xOjApPj4+MH0sWC5zdW02NF80X2xvPWZ1bmN0aW9uIG1lKGIseCxDLFQsSCxqLEUsbSl7cmV0dXJuIHgrVCtqK20+Pj4wfSxYLnN1bTY0XzVfaGk9ZnVuY3Rp''@;'; put 'put ''b24gX2UoYix4LEMsVCxILGosRSxtLEEsYWUpe3ZhciB0ZT0wLHNlPXg7cmV0dXJuIHRlKz0oc2U9c2UrVD4+PjApPHg/MTowLHRlKz0oc2U9c2Uraj4+PjApPGo/MTowLHRlKz0oc2U9c2UrbT4+PjApPG0/MTowLGIrQytIK0UrQSsodGUrPShzZT1zZSthZT4+PjApPGFlPzE6MCk+Pj4wfSxY''@;'; put 'put ''LnN1bTY0XzVfbG89ZnVuY3Rpb24gVGUoYix4LEMsVCxILGosRSxtLEEsYWUpe3JldHVybiB4K1QraittK2FlPj4+MH0sWC5yb3RyNjRfaGk9ZnVuY3Rpb24gU2UoYix4LEMpe3JldHVybih4PDwzMi1DfGI+Pj5DKT4+PjB9LFgucm90cjY0X2xvPWZ1bmN0aW9uIHplKGIseCxDKXtyZXR1cm4o''@;'; put 'put ''Yjw8MzItQ3x4Pj4+Qyk+Pj4wfSxYLnNocjY0X2hpPWZ1bmN0aW9uIFYoYix4LEMpe3JldHVybiBiPj4+Q30sWC5zaHI2NF9sbz1mdW5jdGlvbiBwKGIseCxDKXtyZXR1cm4oYjw8MzItQ3x4Pj4+Qyk+Pj4wfX0sODgyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1GdW5jdGlvbi5w''@;'; put 'put ''cm90b3R5cGUuY2FsbCxfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZz15KDg2MTIpO3VlLmV4cG9ydHM9Zy5jYWxsKEksXyl9LDIxNTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzE1KSxfPXkoNDUwNCksZz15KDk3NDYpO2Z1bmN0aW9uIEIodyl7aWYoISh0''@;'; put 'put ''aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKHcpO3RoaXMuaGFzaD13Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdy5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT13Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgs''@;'; put 'put ''dGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBQPV8udG9BcnJheSh3LmVudHJvcHksdy5lbnRyb3B5RW5jfHwiaGV4IiksRj1fLnRvQXJyYXkody5ub25jZSx3Lm5vbmNlRW5jfHwiaGV4IiksTz1fLnRvQXJyYXko''@;'; put 'put ''dy5wZXJzLHcucGVyc0VuY3x8ImhleCIpO2coUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoUCxGLE8pfXVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5faW5pdD1m''@;'; put 'put ''dW5jdGlvbihQLEYsTyl7dmFyIHo9UC5jb25jYXQoRikuY29uY2F0KE8pO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIE49MDtOPHRoaXMuVi5sZW5ndGg7TisrKXRoaXMuS1tOXT0wLHRoaXMuVltOXT0xO3Ro''@;'; put 'put ''aXMuX3VwZGF0ZSh6KSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sQi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXt2''@;'; put 'put ''YXIgRj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7UCYmKEY9Ri51cGRhdGUoUCkpLHRoaXMuSz1GLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksUCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuViku''@;'; put 'put ''dXBkYXRlKFsxXSkudXBkYXRlKFApLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxCLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oUCxGLE8seil7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLFA9Xy50b0FycmF5KFAs''@;'; put 'put ''RiksTz1fLnRvQXJyYXkoTyx6KSxnKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoUC5jb25jYXQoT3x8W10pKSx0aGlzLl9yZXNlZWQ9MX0sQi5wcm90b3R5''@;'; put 'put ''cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oUCxGLE8seil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksTyYmKE89Xy50b0FycmF5KE8senx8Imhl''@;'; put 'put ''eCIpLHRoaXMuX3VwZGF0ZShPKSk7Zm9yKHZhciBOPVtdO04ubGVuZ3RoPFA7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksTj1OLmNvbmNhdCh0aGlzLlYpO3ZhciBMPU4uc2xpY2UoMCxQKTtyZXR1cm4gdGhpcy5fdXBkYXRlKE8pLHRoaXMuX3Jlc2VlZCsr''@;'; put 'put ''LF8uZW5jb2RlKEwsRil9fSw2NDU6KHVlLFgpPT57WC5yZWFkPWZ1bmN0aW9uKHksSSxfLGcsQil7dmFyIHcsUCxGPTgqQi1nLTEsTz0oMTw8RiktMSx6PU8+PjEsTj0tNyxMPV8/Qi0xOjAsSz1fPy0xOjEsVT15W0krTF07Zm9yKEwrPUssdz1VJigxPDwtTiktMSxVPj49LU4sTis9RjtOPjA7''@;'; put 'put ''dz0yNTYqdyt5W0krTF0sTCs9SyxOLT04KTtmb3IoUD13JigxPDwtTiktMSx3Pj49LU4sTis9ZztOPjA7UD0yNTYqUCt5W0krTF0sTCs9SyxOLT04KTtpZigwPT09dyl3PTEtejtlbHNle2lmKHc9PT1PKXJldHVybiBQP05hTjoxLzAqKFU/LTE6MSk7UCs9TWF0aC5wb3coMixnKSx3LT16fXJl''@;'; put 'put ''dHVybihVPy0xOjEpKlAqTWF0aC5wb3coMix3LWcpfSxYLndyaXRlPWZ1bmN0aW9uKHksSSxfLGcsQix3KXt2YXIgUCxGLE8sej04KnctQi0xLE49KDE8PHopLTEsTD1OPj4xLEs9MjM9PT1CP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxVPWc/MDp3LTEsVz1nPzE6LTEsWT1J''@;'; put 'put ''PDB8fDA9PT1JJiYxL0k8MD8xOjA7Zm9yKEk9TWF0aC5hYnMoSSksaXNOYU4oSSl8fEk9PT0xLzA/KEY9aXNOYU4oSSk/MTowLFA9Tik6KFA9TWF0aC5mbG9vcihNYXRoLmxvZyhJKS9NYXRoLkxOMiksSSooTz1NYXRoLnBvdygyLC1QKSk8MSYmKFAtLSxPKj0yKSwoSSs9UCtMPj0xP0svTzpL''@;'; put 'put ''Kk1hdGgucG93KDIsMS1MKSkqTz49MiYmKFArKyxPLz0yKSxQK0w+PU4/KEY9MCxQPU4pOlArTD49MT8oRj0oSSpPLTEpKk1hdGgucG93KDIsQiksUCs9TCk6KEY9SSpNYXRoLnBvdygyLEwtMSkqTWF0aC5wb3coMixCKSxQPTApKTtCPj04O3lbXytVXT0yNTUmRixVKz1XLEYvPTI1NixCLT04''@;'; put 'put ''KTtmb3IoUD1QPDxCfEYseis9Qjt6PjA7eVtfK1VdPTI1NSZQLFUrPVcsUC89MjU2LHotPTgpO3lbXytVLVddfD0xMjgqWX19LDU3MTc6dWU9Pnt1ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHksSSl7SSYmKHkuc3VwZXJfPUkseS5wcm90b3R5''@;'; put 'put ''cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnksZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbih5LEkpe2lmKEkpe3kuc3VwZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJv''@;'; put 'put ''dG90eXBlLHkucHJvdG90eXBlPW5ldyBfLHkucHJvdG90eXBlLmNvbnN0cnVjdG9yPXl9fX0sMjU4NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY0MTApKCksZz15KDczNzkpKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksQj1mdW5jdGlvbihPKXtyZXR1cm4hKEkmJk8m''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgTyYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIE8pJiYiW29iamVjdCBBcmd1bWVudHNdIj09PWcoTyl9LHc9ZnVuY3Rpb24oTyl7cmV0dXJuISFCKE8pfHxudWxsIT09TyYmIm9iamVjdCI9PXR5cGVvZiBPJiYibGVuZ3RoImluIE8mJiJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''Ty5sZW5ndGgmJk8ubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iIT09ZyhPKSYmImNhbGxlZSJpbiBPJiYiW29iamVjdCBGdW5jdGlvbl0iPT09ZyhPLmNhbGxlZSl9LFA9ZnVuY3Rpb24oKXtyZXR1cm4gQihhcmd1bWVudHMpfSgpO0IuaXNMZWdhY3lBcmd1bWVudHM9dyx1ZS5leHBvcnRz''@;'; put 'put ''PVA/Qjp3fSw1MzIwOnVlPT57InVzZSBzdHJpY3QiO3ZhciBJLF8sWD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcseT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJm51bGwhPT1SZWZsZWN0JiZSZWZsZWN0LmFwcGx5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB5JiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cgX319KSxfPXt9LHkoZnVuY3Rpb24oKXt0aHJvdyA0Mn0sbnVsbCxJKX1jYXRjaChlZSl7ZWUhPT1fJiYoeT1udWxsKX1lbHNlIHk9''@;'; put 'put ''bnVsbDt2YXIgZz0vXlxzKmNsYXNzXGIvLEI9ZnVuY3Rpb24oSil7dHJ5e3ZhciBuZT1YLmNhbGwoSik7cmV0dXJuIGcudGVzdChuZSl9Y2F0Y2h7cmV0dXJuITF9fSx3PWZ1bmN0aW9uKEope3RyeXtyZXR1cm4hQihKKSYmKFguY2FsbChKKSwhMCl9Y2F0Y2h7cmV0dXJuITF9fSxQPU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcsVT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYhIVN5bWJvbC50b1N0cmluZ1RhZyxXPSEoMCBpblssXSksWT1mdW5jdGlvbigpe3JldHVybiExfTtpZigib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50KXt2YXIgcT1kb2N1bWVudC5hbGw7UC5jYWxsKHEp''@;'; put 'put ''PT09UC5jYWxsKGRvY3VtZW50LmFsbCkmJihZPWZ1bmN0aW9uKEope2lmKChXfHwhSikmJih0eXBlb2YgSj4idSJ8fCJvYmplY3QiPT10eXBlb2YgSikpdHJ5e3ZhciBuZT1QLmNhbGwoSik7cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1uZXx8IltvYmplY3QgSFRNTCBk''@;'; put 'put ''b2N1bWVudC5hbGwgY2xhc3NdIj09PW5lfHwiW29iamVjdCBIVE1MQ29sbGVjdGlvbl0iPT09bmV8fCJbb2JqZWN0IE9iamVjdF0iPT09bmUpJiZudWxsPT1KKCIiKX1jYXRjaHt9cmV0dXJuITF9KX11ZS5leHBvcnRzPXk/ZnVuY3Rpb24oSil7aWYoWShKKSlyZXR1cm4hMDtpZighSnx8ImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIEomJiJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4hMTt0cnl7eShKLG51bGwsSSl9Y2F0Y2gobmUpe2lmKG5lIT09XylyZXR1cm4hMX1yZXR1cm4hQihKKSYmdyhKKX06ZnVuY3Rpb24oSil7aWYoWShKKSlyZXR1cm4hMDtpZighSnx8ImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IEomJiJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4hMTtpZihVKXJldHVybiB3KEopO2lmKEIoSikpcmV0dXJuITE7dmFyIG5lPVAuY2FsbChKKTtyZXR1cm4hKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1uZSYmIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiE9PW5lJiYhL15cW29iamVjdCBI''@;'; put 'put ''VE1MLy50ZXN0KG5lKSkmJncoSil9fSw4NjYyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciB6LEk9eSg3Mzc5KSxnPXkoOTI0NikoL15ccyooPzpmdW5jdGlvbik/XCovKSxCPXkoNjQxMCkoKSx3PXkoMTYxOCksUD1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksRj1JKCJGdW5j''@;'; put 'put ''dGlvbi5wcm90b3R5cGUudG9TdHJpbmciKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBMKXJldHVybiExO2lmKGcoRihMKSkpcmV0dXJuITA7aWYoIUIpcmV0dXJuIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09PVAoTCk7aWYoIXcpcmV0dXJuITE7''@;'; put 'put ''aWYodHlwZW9mIHo+InUiKXt2YXIgVT1mdW5jdGlvbigpe2lmKCFCKXJldHVybiExO3RyeXtyZXR1cm4gRnVuY3Rpb24oInJldHVybiBmdW5jdGlvbiooKSB7fSIpKCl9Y2F0Y2h7fX0oKTt6PSEhVSYmdyhVKX1yZXR1cm4gdyhMKT09PXp9fSw4NjExOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24oeSl7cmV0dXJuIHkhPXl9fSwzNjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTU5KSxfPXkoNDI4OSksZz15KDg2MTEpLEI9eSg5NDE1KSx3PXkoMzE5NCksUD1JKEIoKSxOdW1iZXIpO18oUCx7Z2V0UG9seWZpbGw6QixpbXBsZW1lbnRhdGlvbjpn''@;'; put 'put ''LHNoaW06d30pLHVlLmV4cG9ydHM9UH0sOTQxNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2MTEpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOJiZOdW1iZXIuaXNOYU4oTmFOKSYmIU51bWJlci5pc05hTigiYSIpP051bWJlci5pc05hTjpJfX0s''@;'; put 'put ''MzE5NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQyODkpLF89eSg5NDE1KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEI9XygpO3JldHVybiBJKE51bWJlcix7aXNOYU46Qn0se2lzTmFOOmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiE9PUJ9fSksQn19LDg0MjA6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIHcsST15KDczNzkpLF89eSg2NDEwKSgpLGc9eSg4ODI0KSxCPXkoNzI5Nik7aWYoXyl7dmFyIFA9SSgiUmVnRXhwLnByb3RvdHlwZS5leGVjIiksRj17fSxPPWZ1bmN0aW9uKCl7dGhyb3cgRn0sej17dG9TdHJpbmc6Tyx2YWx1ZU9mOk99OyJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlJiYoeltTeW1ib2wudG9QcmltaXRpdmVdPU8pLHc9ZnVuY3Rpb24oVSl7aWYoIVV8fCJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTt2YXIgVz1CKFUsImxhc3RJbmRleCIpO2lmKCFXfHwhZyhXLCJ2YWx1ZSIpKXJldHVybiExO3Ry''@;'; put 'put ''eXtQKFUseil9Y2F0Y2gocSl7cmV0dXJuIHE9PT1GfX19ZWxzZXt2YXIgTj1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIik7dz1mdW5jdGlvbihVKXtyZXR1cm4hKCFVfHwib2JqZWN0IiE9dHlwZW9mIFUmJiJmdW5jdGlvbiIhPXR5cGVvZiBVKSYmIltvYmplY3QgUmVnRXhwXSI9PT1O''@;'; put 'put ''KFUpfX11ZS5leHBvcnRzPXd9LDU2OTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDMwKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3JldHVybiEhSShnKX19LDU4MjY6dWU9Pnt2YXIgWD17fS50b1N0cmluZzt1ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHkp''@;'; put 'put ''e3JldHVybiJbb2JqZWN0IEFycmF5XSI9PVguY2FsbCh5KX19LDY4MTM6KHVlLFgseSk9PntsZXQgSTt0cnl7ST15KDc3KX1jYXRjaHtJPXkoNDEyOSl9Y29uc3QgXz15KDg5ODEpLHtzdHJpbmdpZnk6ZyxzdHJpcEJvbTpCfT15KDY3ODApO2Z1bmN0aW9uIFAoKXtyZXR1cm4oUD1fYXN5bmNU''@;'; put 'put ''b0dlbmVyYXRvcihmdW5jdGlvbiooVyxZPXt9KXsic3RyaW5nIj09dHlwZW9mIFkmJihZPXtlbmNvZGluZzpZfSk7Y29uc3QgcT1ZLmZzfHxJLGVlPSEoInRocm93cyJpbiBZKXx8WS50aHJvd3M7bGV0IG5lLEo9eWllbGQgXy5mcm9tQ2FsbGJhY2socS5yZWFkRmlsZSkoVyxZKTtKPUIoSik7''@;'; put 'put ''dHJ5e25lPUpTT04ucGFyc2UoSixZP1kucmV2aXZlcjpudWxsKX1jYXRjaChpZSl7aWYoZWUpdGhyb3cgaWUubWVzc2FnZT1gJHtXfTogJHtpZS5tZXNzYWdlfWAsaWU7cmV0dXJuIG51bGx9cmV0dXJuIG5lfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBGPV8uZnJvbVByb21pc2Uo''@;'; put 'put ''ZnVuY3Rpb24gdyhXKXtyZXR1cm4gUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtmdW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxxPXt9KXtjb25zdCBlZT1xLmZzfHxJLEo9ZyhZLHEpO3lpZWxkIF8uZnJvbUNhbGxiYWNrKGVlLndyaXRlRmls''@;'; put 'put ''ZSkoVyxKLHEpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBMPV8uZnJvbVByb21pc2UoZnVuY3Rpb24geihXLFkpe3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3VlLmV4cG9ydHM9e3JlYWRGaWxlOkYscmVhZEZpbGVTeW5jOmZ1bmN0aW9uIE8oVyxZPXt9KXsic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIFkmJihZPXtlbmNvZGluZzpZfSk7Y29uc3QgcT1ZLmZzfHxJLGVlPSEoInRocm93cyJpbiBZKXx8WS50aHJvd3M7dHJ5e2xldCBKPXEucmVhZEZpbGVTeW5jKFcsWSk7cmV0dXJuIEo9QihKKSxKU09OLnBhcnNlKEosWS5yZXZpdmVyKX1jYXRjaChKKXtpZihlZSl0aHJv''@;'; put 'put ''dyBKLm1lc3NhZ2U9YCR7V306ICR7Si5tZXNzYWdlfWAsSjtyZXR1cm4gbnVsbH19LHdyaXRlRmlsZTpMLHdyaXRlRmlsZVN5bmM6ZnVuY3Rpb24gSyhXLFkscT17fSl7Y29uc3QgZWU9cS5mc3x8SSxKPWcoWSxxKTtyZXR1cm4gZWUud3JpdGVGaWxlU3luYyhXLEoscSl9fX0sNjc4MDoodWUs''@;'; put 'put ''WCx5KT0+e3ZhciBJPXkoODc2NCkuQnVmZmVyO3VlLmV4cG9ydHM9e3N0cmluZ2lmeTpmdW5jdGlvbiBfKEIse0VPTDp3PSJcbiIsZmluYWxFT0w6UD0hMCxyZXBsYWNlcjpGPW51bGwsc3BhY2VzOk99PXt9KXtjb25zdCB6PVA/dzoiIjtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoQixGLE8pLnJl''@;'; put 'put ''cGxhY2UoL1xuL2csdykren0sc3RyaXBCb206ZnVuY3Rpb24gZyhCKXtyZXR1cm4gSS5pc0J1ZmZlcihCKSYmKEI9Qi50b1N0cmluZygidXRmOCIpKSxCLnJlcGxhY2UoL15cdUZFRkYvLCIiKX19fSw2MjQ1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoRil7dGhpcy5tZXNz''@;'; put 'put ''YWdlPUZ9eS5yKFgpLHkuZChYLHtJbnZhbGlkVG9rZW5FcnJvcjooKT0+QixkZWZhdWx0OigpPT5QfSksKEkucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZENoYXJhY3RlckVycm9yIjt2YXIgXz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJp''@;'; put 'put ''bmQod2luZG93KXx8ZnVuY3Rpb24oRil7dmFyIE89U3RyaW5nKEYpLnJlcGxhY2UoLz0rJC8sIiIpO2lmKE8ubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IEkoIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciB6''@;'; put 'put ''LE4sTD0wLEs9MCxVPSIiO049Ty5jaGFyQXQoSysrKTt+TiYmKHo9TCU0PzY0KnorTjpOLEwrKyU0KT9VKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZ6Pj4oLTIqTCY2KSk6MClOPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4''@;'; put 'put ''OSsvPSIuaW5kZXhPZihOKTtyZXR1cm4gVX07ZnVuY3Rpb24gQihGKXt0aGlzLm1lc3NhZ2U9Rn0oQi5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7Y29uc3QgUD1mdW5jdGlvbiB3KEYsTyl7aWYoInN0cmluZyIhPXR5cGVvZiBGKXRocm93IG5ldyBCKCJJ''@;'; put 'put ''bnZhbGlkIHRva2VuIHNwZWNpZmllZCIpO3ZhciB6PSEwPT09KE89T3x8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKGZ1bmN0aW9uIGcoRil7dmFyIE89Ri5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKTtzd2l0Y2goTy5sZW5ndGglNCl7Y2FzZSAwOmJy''@;'; put 'put ''ZWFrO2Nhc2UgMjpPKz0iPT0iO2JyZWFrO2Nhc2UgMzpPKz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChfKE8pLnJlcGxhY2UoLyguKS9nLGZ1bmN0aW9uKE4sTCl7dmFyIEs9TC5jaGFyQ29k''@;'; put 'put ''ZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBLLmxlbmd0aDwyJiYoSz0iMCIrSyksIiUiK0t9KSl9Y2F0Y2h7cmV0dXJuIF8oTyl9fShGLnNwbGl0KCIuIilbel0pKX1jYXRjaChOKXt0aHJvdyBuZXcgQigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQ6ICIrTi5tZXNz''@;'; put 'put ''YWdlKX19fSwxNjU4Oih1ZSxYLHkpPT57dmFyIGc9L1tcXF4kLiorPygpW1xde318XS9nLEI9UmVnRXhwKGcuc291cmNlKSxQPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsRj0ib2JqZWN0Ij09dHlwZW9mIHkuZyYmeS5nJiZ5LmcuT2Jq''@;'; put 'put ''ZWN0PT09T2JqZWN0JiZ5Lmd8fFB8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksej1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLE49Ri5TeW1ib2wsTD1OP04ucHJvdG90eXBlOnZvaWQgMCxLPUw/TC50b1N0cmluZzp2b2lkIDA7dWUuZXhwb3J0cz1mdW5jdGlvbiBlZShKKXtyZXR1cm4o''@;'; put 'put ''Sj1mdW5jdGlvbiBxKEope3JldHVybiBudWxsPT1KPyIiOmZ1bmN0aW9uIFUoSil7aWYoInN0cmluZyI9PXR5cGVvZiBKKXJldHVybiBKO2lmKGZ1bmN0aW9uIFkoSil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBKfHxmdW5jdGlvbiBXKEope3JldHVybiEhSiYmIm9iamVjdCI9PXR5cGVvZiBK''@;'; put 'put ''fShKKSYmIltvYmplY3QgU3ltYm9sXSI9PXouY2FsbChKKX0oSikpcmV0dXJuIEs/Sy5jYWxsKEopOiIiO3ZhciBuZT1KKyIiO3JldHVybiIwIj09bmUmJjEvSj09LTEvMD8iLTAiOm5lfShKKX0oSikpJiZCLnRlc3QoSik/Si5yZXBsYWNlKGcsIlxcJCYiKTpKfX0sODA5NDp1ZT0+e3ZhciBJ''@;'; put 'put ''PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlvbiBfKEIpe3JldHVybiEwPT09Qnx8ITE9PT1CfHxmdW5jdGlvbiBnKEIpe3JldHVybiEhQiYmIm9iamVjdCI9PXR5cGVvZiBCfShCKSYmIltvYmplY3QgQm9vbGVhbl0iPT1JLmNhbGwoQil9fSwyMzA3Oih1ZSxY''@;'; put 'put ''LHkpPT57dWU9eS5ubWQodWUpO3ZhciBfPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixnPTEsQj0yLHc9OTAwNzE5OTI1NDc0MDk5MSxQPSJbb2JqZWN0IEFyZ3VtZW50c10iLEY9IltvYmplY3QgQXJyYXldIixPPSJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIix6PSJbb2JqZWN0IEJvb2xl''@;'; put 'put ''YW5dIixOPSJbb2JqZWN0IERhdGVdIixMPSJbb2JqZWN0IEVycm9yXSIsSz0iW29iamVjdCBGdW5jdGlvbl0iLFU9IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIixXPSJbb2JqZWN0IE1hcF0iLFk9IltvYmplY3QgTnVtYmVyXSIscT0iW29iamVjdCBOdWxsXSIsZWU9IltvYmplY3QgT2Jq''@;'; put 'put ''ZWN0XSIsSj0iW29iamVjdCBQcm9taXNlXSIsbmU9IltvYmplY3QgUHJveHldIixpZT0iW29iamVjdCBSZWdFeHBdIixsZT0iW29iamVjdCBTZXRdIixtZT0iW29iamVjdCBTdHJpbmddIixUZT0iW29iamVjdCBVbmRlZmluZWRdIixTZT0iW29iamVjdCBXZWFrTWFwXSIsemU9IltvYmplY3Qg''@;'; put 'put ''QXJyYXlCdWZmZXJdIixWPSJbb2JqZWN0IERhdGFWaWV3XSIsYWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sdGU9L14oPzowfFsxLTldXGQqKSQvLHNlPXt9O3NlWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1zZVsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09c2VbIltvYmplY3Qg''@;'; put 'put ''SW50OEFycmF5XSJdPXNlWyJbb2JqZWN0IEludDE2QXJyYXldIl09c2VbIltvYmplY3QgSW50MzJBcnJheV0iXT1zZVsiW29iamVjdCBVaW50OEFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPXNlWyJbb2JqZWN0IFVp''@;'; put 'put ''bnQzMkFycmF5XSJdPSEwLHNlW1BdPXNlW0ZdPXNlW3plXT1zZVt6XT1zZVtWXT1zZVtOXT1zZVtMXT1zZVtLXT1zZVtXXT1zZVtZXT1zZVtlZV09c2VbaWVdPXNlW2xlXT1zZVttZV09c2VbU2VdPSExO3ZhciB3ZT0ib2JqZWN0Ij09dHlwZW9mIHkuZyYmeS5nJiZ5LmcuT2JqZWN0PT09T2Jq''@;'; put 'put ''ZWN0JiZ5LmcsVWU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixKZT13ZXx8VWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksb3Q9WCYmIVgubm9kZVR5cGUmJlgsTWU9b3QmJnVlJiYhdWUubm9kZVR5cGUmJnVlLHZlPU1lJiZNZS5l''@;'; put 'put ''eHBvcnRzPT09b3QsWGU9dmUmJndlLnByb2Nlc3MsamU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFhlJiZYZS5iaW5kaW5nJiZYZS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxEZT1qZSYmamUuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEllKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPW51bGw9''@;'; put 'put ''PUFuPzA6QW4ubGVuZ3RoOysrdmk8QXI7KWlmKGFuKEFuW3ZpXSx2aSxBbikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQWUoQW4sYW4pe3JldHVybiBBbi5oYXMoYW4pfWZ1bmN0aW9uIG50KEFuKXt2YXIgYW49LTEsdmk9QXJyYXkoQW4uc2l6ZSk7cmV0dXJuIEFuLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oQXIsUG8pe3ZpWysrYW5dPVtQbyxBcl19KSx2aX1mdW5jdGlvbiB1bihBbil7dmFyIGFuPS0xLHZpPUFycmF5KEFuLnNpemUpO3JldHVybiBBbi5mb3JFYWNoKGZ1bmN0aW9uKEFyKXt2aVsrK2FuXT1Bcn0pLHZpfXZhciBBbix5dD1BcnJheS5wcm90b3R5cGUsRHQ9T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZSxpdD1KZVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sJGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLHR0PUR0Lmhhc093blByb3BlcnR5LEhlPShBbj0vW14uXSskLy5leGVjKGl0JiZpdC5rZXlzJiZpdC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrQW46''@;'; put 'put ''IiIsdXQ9RHQudG9TdHJpbmcscXQ9UmVnRXhwKCJeIiskZS5jYWxsKHR0KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxSdD12''@;'; put 'put ''ZT9KZS5CdWZmZXI6dm9pZCAwLFB0PUplLlN5bWJvbCxzaT1KZS5VaW50OEFycmF5LFF0PUR0LnByb3BlcnR5SXNFbnVtZXJhYmxlLHNuPXl0LnNwbGljZSxSaT1QdD9QdC50b1N0cmluZ1RhZzp2b2lkIDAsaG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxmdD1SdD9SdC5pc0J1ZmZl''@;'; put 'put ''cjp2b2lkIDAsT3I9ZnVuY3Rpb24gUWUoQW4sYW4pe3JldHVybiBmdW5jdGlvbih2aSl7cmV0dXJuIEFuKGFuKHZpKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLFd0PVloKEplLCJEYXRhVmlldyIpLEF0PVloKEplLCJNYXAiKSxSbj1ZaChKZSwiUHJvbWlzZSIpLHN0PVloKEplLCJTZXQiKSxV''@;'; put 'put ''dD1ZaChKZSwiV2Vha01hcCIpLHJpPVloKE9iamVjdCwiY3JlYXRlIiksV2U9T2woV3QpLFR0PU9sKEF0KSxucj1PbChSbiksaHQ9T2woc3QpLHh0PU9sKFV0KSxqbj1QdD9QdC5wcm90b3R5cGU6dm9pZCAwLHJuPWpuP2puLnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIHp0KEFuKXt2YXIgYW49''@;'; put 'put ''LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2FuPHZpOyl7dmFyIEFyPUFuW2FuXTt0aGlzLnNldChBclswXSxBclsxXSl9fWZ1bmN0aW9uIGVuKEFuKXt2YXIgYW49LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2FuPHZp''@;'; put 'put ''Oyl7dmFyIEFyPUFuW2FuXTt0aGlzLnNldChBclswXSxBclsxXSl9fWZ1bmN0aW9uIGVpKEFuKXt2YXIgYW49LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2FuPHZpOyl7dmFyIEFyPUFuW2FuXTt0aGlzLnNldChBclswXSxBclsxXSl9fWZ1bmN0aW9uIFdp''@;'; put 'put ''KEFuKXt2YXIgYW49LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IGVpOysrYW48dmk7KXRoaXMuYWRkKEFuW2FuXSl9ZnVuY3Rpb24gbGEoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fPW5ldyBlbihBbik7dGhpcy5zaXplPWFuLnNpemV9ZnVuY3Rpb24g''@;'; put 'put ''YmwoQW4sYW4pe2Zvcih2YXIgdmk9QW4ubGVuZ3RoO3ZpLS07KWlmKHVmKEFuW3ZpXVswXSxhbikpcmV0dXJuIHZpO3JldHVybi0xfWZ1bmN0aW9uIExjKEFuKXtyZXR1cm4gbnVsbD09QW4/dm9pZCAwPT09QW4/VGU6cTpSaSYmUmkgaW4gT2JqZWN0KEFuKT9mdW5jdGlvbiBjZihBbil7dmFy''@;'; put 'put ''IGFuPXR0LmNhbGwoQW4sUmkpLHZpPUFuW1JpXTt0cnl7QW5bUmldPXZvaWQgMDt2YXIgQXI9ITB9Y2F0Y2h7fXZhciBQbz11dC5jYWxsKEFuKTtyZXR1cm4gQXImJihhbj9BbltSaV09dmk6ZGVsZXRlIEFuW1JpXSksUG99KEFuKTpmdW5jdGlvbiBpZyhBbil7cmV0dXJuIHV0LmNhbGwoQW4p''@;'; put 'put ''fShBbil9ZnVuY3Rpb24gRDAoQW4pe3JldHVybiBOYShBbikmJkxjKEFuKT09UH1mdW5jdGlvbiBpcihBbixhbix2aSxBcixQbyl7cmV0dXJuIEFuPT09YW58fChudWxsPT1Bbnx8bnVsbD09YW58fCFOYShBbikmJiFOYShhbik/QW4hPUFuJiZhbiE9YW46ZnVuY3Rpb24geGEoQW4sYW4sdmks''@;'; put 'put ''QXIsUG8sZW8pe3ZhciBvbD1kZihBbiksem89ZGYoYW4pLFZzPW9sP0Y6WWkoQW4pLFNzPXpvP0Y6WWkoYW4pLGpsPShWcz1Wcz09UD9lZTpWcyk9PWVlLEhvPShTcz1Tcz09UD9lZTpTcyk9PWVlLGtvPVZzPT1TcztpZihrbyYmaGYoQW4pKXtpZighaGYoYW4pKXJldHVybiExO29sPSEwLGps''@;'; put 'put ''PSExfWlmKGtvJiYhamwpcmV0dXJuIGVvfHwoZW89bmV3IGxhKSxvbHx8RDMoQW4pP2IwKEFuLGFuLHZpLEFyLFBvLGVvKTpmdW5jdGlvbiBIYShBbixhbix2aSxBcixQbyxlbyxvbCl7c3dpdGNoKHZpKXtjYXNlIFY6aWYoQW4uYnl0ZUxlbmd0aCE9YW4uYnl0ZUxlbmd0aHx8QW4uYnl0ZU9m''@;'; put 'put ''ZnNldCE9YW4uYnl0ZU9mZnNldClyZXR1cm4hMTtBbj1Bbi5idWZmZXIsYW49YW4uYnVmZmVyO2Nhc2UgemU6cmV0dXJuIShBbi5ieXRlTGVuZ3RoIT1hbi5ieXRlTGVuZ3RofHwhZW8obmV3IHNpKEFuKSxuZXcgc2koYW4pKSk7Y2FzZSB6OmNhc2UgTjpjYXNlIFk6cmV0dXJuIHVmKCtBbiwr''@;'; put 'put ''YW4pO2Nhc2UgTDpyZXR1cm4gQW4ubmFtZT09YW4ubmFtZSYmQW4ubWVzc2FnZT09YW4ubWVzc2FnZTtjYXNlIGllOmNhc2UgbWU6cmV0dXJuIEFuPT1hbisiIjtjYXNlIFc6dmFyIHpvPW50O2Nhc2UgbGU6aWYoem98fCh6bz11biksQW4uc2l6ZSE9YW4uc2l6ZSYmIShBciZnKSlyZXR1cm4h''@;'; put 'put ''MTt2YXIgU3M9b2wuZ2V0KEFuKTtpZihTcylyZXR1cm4gU3M9PWFuO0FyfD1CLG9sLnNldChBbixhbik7dmFyIGpsPWIwKHpvKEFuKSx6byhhbiksQXIsUG8sZW8sb2wpO3JldHVybiBvbC5kZWxldGUoQW4pLGpsO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihybilyZXR1cm4gcm4uY2FsbChB''@;'; put 'put ''bik9PXJuLmNhbGwoYW4pfXJldHVybiExfShBbixhbixWcyx2aSxBcixQbyxlbyk7aWYoISh2aSZnKSl7dmFyIFN0PWpsJiZ0dC5jYWxsKEFuLCJfX3dyYXBwZWRfXyIpLEJ0PUhvJiZ0dC5jYWxsKGFuLCJfX3dyYXBwZWRfXyIpO2lmKFN0fHxCdCl7dmFyIF9uPVN0P0FuLnZhbHVlKCk6QW4s''@;'; put 'put ''bW49QnQ/YW4udmFsdWUoKTphbjtyZXR1cm4gZW98fChlbz1uZXcgbGEpLFBvKF9uLG1uLHZpLEFyLGVvKX19cmV0dXJuISFrbyYmKGVvfHwoZW89bmV3IGxhKSxmdW5jdGlvbiBSdShBbixhbix2aSxBcixQbyxlbyl7dmFyIG9sPXZpJmcsem89UHIoQW4pLFZzPXpvLmxlbmd0aDtpZihWcyE9''@;'; put 'put ''UHIoYW4pLmxlbmd0aCYmIW9sKXJldHVybiExO2Zvcih2YXIgSG89VnM7SG8tLTspe3ZhciBrbz16b1tIb107aWYoIShvbD9rbyBpbiBhbjp0dC5jYWxsKGFuLGtvKSkpcmV0dXJuITF9dmFyIFN0PWVvLmdldChBbik7aWYoU3QmJmVvLmdldChhbikpcmV0dXJuIFN0PT1hbjt2YXIgQnQ9ITA7''@;'; put 'put ''ZW8uc2V0KEFuLGFuKSxlby5zZXQoYW4sQW4pO2Zvcih2YXIgX249b2w7KytIbzxWczspe3ZhciBtbj1Bbltrbz16b1tIb11dLEluPWFuW2tvXTtpZihBcil2YXIgYm49b2w/QXIoSW4sbW4sa28sYW4sQW4sZW8pOkFyKG1uLEluLGtvLEFuLGFuLGVvKTtpZighKHZvaWQgMD09PWJuP21uPT09''@;'; put 'put ''SW58fFBvKG1uLEluLHZpLEFyLGVvKTpibikpe0J0PSExO2JyZWFrfV9ufHwoX249ImNvbnN0cnVjdG9yIj09a28pfWlmKEJ0JiYhX24pe3ZhciB1cj1Bbi5jb25zdHJ1Y3RvcixiaT1hbi5jb25zdHJ1Y3Rvcjt1ciE9YmkmJiJjb25zdHJ1Y3RvciJpbiBBbiYmImNvbnN0cnVjdG9yImluIGFu''@;'; put 'put ''JiYhKCJmdW5jdGlvbiI9PXR5cGVvZiB1ciYmdXIgaW5zdGFuY2VvZiB1ciYmImZ1bmN0aW9uIj09dHlwZW9mIGJpJiZiaSBpbnN0YW5jZW9mIGJpKSYmKEJ0PSExKX1yZXR1cm4gZW8uZGVsZXRlKEFuKSxlby5kZWxldGUoYW4pLEJ0fShBbixhbix2aSxBcixQbyxlbykpfShBbixhbix2aSxB''@;'; put 'put ''cixpcixQbykpfWZ1bmN0aW9uIGIwKEFuLGFuLHZpLEFyLFBvLGVvKXt2YXIgb2w9dmkmZyx6bz1Bbi5sZW5ndGgsVnM9YW4ubGVuZ3RoO2lmKHpvIT1WcyYmIShvbCYmVnM+em8pKXJldHVybiExO3ZhciBTcz1lby5nZXQoQW4pO2lmKFNzJiZlby5nZXQoYW4pKXJldHVybiBTcz09YW47dmFy''@;'; put 'put ''IGpsPS0xLEhvPSEwLGtvPXZpJkI/bmV3IFdpOnZvaWQgMDtmb3IoZW8uc2V0KEFuLGFuKSxlby5zZXQoYW4sQW4pOysramw8em87KXt2YXIgU3Q9QW5bamxdLEJ0PWFuW2psXTtpZihBcil2YXIgX249b2w/QXIoQnQsU3QsamwsYW4sQW4sZW8pOkFyKFN0LEJ0LGpsLEFuLGFuLGVvKTtpZih2''@;'; put 'put ''b2lkIDAhPT1fbil7aWYoX24pY29udGludWU7SG89ITE7YnJlYWt9aWYoa28pe2lmKCFJZShhbixmdW5jdGlvbihtbixJbil7aWYoIUFlKGtvLEluKSYmKFN0PT09bW58fFBvKFN0LG1uLHZpLEFyLGVvKSkpcmV0dXJuIGtvLnB1c2goSW4pfSkpe0hvPSExO2JyZWFrfX1lbHNlIGlmKFN0IT09''@;'; put 'put ''QnQmJiFQbyhTdCxCdCx2aSxBcixlbykpe0hvPSExO2JyZWFrfX1yZXR1cm4gZW8uZGVsZXRlKEFuKSxlby5kZWxldGUoYW4pLEhvfWZ1bmN0aW9uIFByKEFuKXtyZXR1cm4gZnVuY3Rpb24gcHUoQW4sYW4sdmkpe3ZhciBBcj1hbihBbik7cmV0dXJuIGRmKEFuKT9BcjpmdW5jdGlvbiBSZShB''@;'; put 'put ''bixhbil7Zm9yKHZhciB2aT0tMSxBcj1hbi5sZW5ndGgsUG89QW4ubGVuZ3RoOysrdmk8QXI7KUFuW1BvK3ZpXT1hblt2aV07cmV0dXJuIEFufShBcix2aShBbikpfShBbiwkaCxDcyl9ZnVuY3Rpb24gb2QoQW4sYW4pe3ZhciB2aT1Bbi5fX2RhdGFfXztyZXR1cm4gZnVuY3Rpb24gUWMoQW4p''@;'; put 'put ''e3ZhciBhbj10eXBlb2YgQW47cmV0dXJuInN0cmluZyI9PWFufHwibnVtYmVyIj09YW58fCJzeW1ib2wiPT1hbnx8ImJvb2xlYW4iPT1hbj8iX19wcm90b19fIiE9PUFuOm51bGw9PT1Bbn0oYW4pP3ZpWyJzdHJpbmciPT10eXBlb2YgYW4/InN0cmluZyI6Imhhc2giXTp2aS5tYXB9ZnVuY3Rp''@;'; put 'put ''b24gWWgoQW4sYW4pe3ZhciB2aT1mdW5jdGlvbiBfdChBbixhbil7cmV0dXJuIEFuPy5bYW5dfShBbixhbik7cmV0dXJuIGZ1bmN0aW9uIGxpKEFuKXtyZXR1cm4hKCFPYyhBbil8fGZ1bmN0aW9uIHJnKEFuKXtyZXR1cm4hIUhlJiZIZSBpbiBBbn0oQW4pKSYmKGZmKEFuKT9xdDphZSkudGVz''@;'; put 'put ''dChPbChBbikpfSh2aSk/dmk6dm9pZCAwfXp0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBoaSgpe3RoaXMuX19kYXRhX189cmk/cmkobnVsbCk6e30sdGhpcy5zaXplPTB9LHp0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gY24oQW4pe3ZhciBhbj10aGlzLmhhcyhBbikmJmRlbGV0ZSB0''@;'; put 'put ''aGlzLl9fZGF0YV9fW0FuXTtyZXR1cm4gdGhpcy5zaXplLT1hbj8xOjAsYW59LHp0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gZm4oQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fO2lmKHJpKXt2YXIgdmk9YW5bQW5dO3JldHVybiB2aT09PV8/dm9pZCAwOnZpfXJldHVybiB0dC5jYWxsKGFuLEFu''@;'; put 'put ''KT9hbltBbl06dm9pZCAwfSx6dC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIElpKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXztyZXR1cm4gcmk/dm9pZCAwIT09YW5bQW5dOnR0LmNhbGwoYW4sQW4pfSx6dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFh0KEFuLGFuKXt2YXIgdmk9dGhpcy5fX2Rh''@;'; put 'put ''dGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhBbik/MDoxLHZpW0FuXT1yaSYmdm9pZCAwPT09YW4/Xzphbix0aGlzfSxlbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gdWEoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxlbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9u''@;'; put 'put ''IEVpKEFuKXt2YXIgYW49dGhpcy5fX2RhdGFfXyx2aT1ibChhbixBbik7cmV0dXJuISh2aTwwfHwodmk9PWFuLmxlbmd0aC0xP2FuLnBvcCgpOnNuLmNhbGwoYW4sdmksMSksLS10aGlzLnNpemUsMCkpfSxlbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHZyKEFuKXt2YXIgYW49dGhpcy5fX2Rh''@;'; put 'put ''dGFfXyx2aT1ibChhbixBbik7cmV0dXJuIHZpPDA/dm9pZCAwOmFuW3ZpXVsxXX0sZW4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBXbihBbil7cmV0dXJuIGJsKHRoaXMuX19kYXRhX18sQW4pPi0xfSxlbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uICRpKEFuLGFuKXt2YXIgdmk9dGhpcy5fX2Rh''@;'; put 'put ''dGFfXyxBcj1ibCh2aSxBbik7cmV0dXJuIEFyPDA/KCsrdGhpcy5zaXplLHZpLnB1c2goW0FuLGFuXSkpOnZpW0FyXVsxXT1hbix0aGlzfSxlaS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gUXIoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyB6dCxtYXA6bmV3KEF0fHxl''@;'; put 'put ''biksc3RyaW5nOm5ldyB6dH19LGVpLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gVmkoQW4pe3ZhciBhbj1vZCh0aGlzLEFuKS5kZWxldGUoQW4pO3JldHVybiB0aGlzLnNpemUtPWFuPzE6MCxhbn0sZWkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBOaShBbil7cmV0dXJuIG9kKHRoaXMsQW4p''@;'; put 'put ''LmdldChBbil9LGVpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gRGEoQW4pe3JldHVybiBvZCh0aGlzLEFuKS5oYXMoQW4pfSxlaS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIExyKEFuLGFuKXt2YXIgdmk9b2QodGhpcyxBbiksQXI9dmkuc2l6ZTtyZXR1cm4gdmkuc2V0KEFuLGFuKSx0aGlzLnNp''@;'; put 'put ''emUrPXZpLnNpemU9PUFyPzA6MSx0aGlzfSxXaS5wcm90b3R5cGUuYWRkPVdpLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uIHBhKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoQW4sXyksdGhpc30sV2kucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBRbihBbil7cmV0dXJuIHRoaXMuX19kYXRh''@;'; put 'put ''X18uaGFzKEFuKX0sbGEucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHlhKCl7dGhpcy5fX2RhdGFfXz1uZXcgZW4sdGhpcy5zaXplPTB9LGxhLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gTGEoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLHZpPWFuLmRlbGV0ZShBbik7cmV0dXJuIHRoaXMu''@;'; put 'put ''c2l6ZT1hbi5zaXplLHZpfSxsYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIEZhKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoQW4pfSxsYS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHRpKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoQW4pfSxsYS5wcm90b3R5cGUuc2V0PWZ1bmN0''@;'; put 'put ''aW9uIGdvKEFuLGFuKXt2YXIgdmk9dGhpcy5fX2RhdGFfXztpZih2aSBpbnN0YW5jZW9mIGVuKXt2YXIgQXI9dmkuX19kYXRhX187aWYoIUF0fHxBci5sZW5ndGg8MTk5KXJldHVybiBBci5wdXNoKFtBbixhbl0pLHRoaXMuc2l6ZT0rK3ZpLnNpemUsdGhpczt2aT10aGlzLl9fZGF0YV9fPW5l''@;'; put 'put ''dyBlaShBcil9cmV0dXJuIHZpLnNldChBbixhbiksdGhpcy5zaXplPXZpLnNpemUsdGhpc307dmFyIENzPWhuP2Z1bmN0aW9uKEFuKXtyZXR1cm4gbnVsbD09QW4/W106KEFuPU9iamVjdChBbiksZnVuY3Rpb24gRmUoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9bnVsbD09QW4/MDpBbi5sZW5n''@;'; put 'put ''dGgsUG89MCxlbz1bXTsrK3ZpPEFyOyl7dmFyIG9sPUFuW3ZpXTthbihvbCx2aSxBbikmJihlb1tQbysrXT1vbCl9cmV0dXJuIGVvfShobihBbiksZnVuY3Rpb24oYW4pe3JldHVybiBRdC5jYWxsKEFuLGFuKX0pKX06ZnVuY3Rpb24gS2goKXtyZXR1cm5bXX0sWWk9TGM7ZnVuY3Rpb24geWwo''@;'; put 'put ''QW4sYW4pe3JldHVybiEhKGFuPWFuPz93KSYmKCJudW1iZXIiPT10eXBlb2YgQW58fHRlLnRlc3QoQW4pKSYmQW4+LTEmJkFuJTE9PTAmJkFuPGFufWZ1bmN0aW9uIE9sKEFuKXtpZihudWxsIT1Bbil7dHJ5e3JldHVybiAkZS5jYWxsKEFuKX1jYXRjaHt9dHJ5e3JldHVybiBBbisiIn1jYXRj''@;'; put 'put ''aHt9fXJldHVybiIifWZ1bmN0aW9uIHVmKEFuLGFuKXtyZXR1cm4gQW49PT1hbnx8QW4hPUFuJiZhbiE9YW59KFd0JiZZaShuZXcgV3QobmV3IEFycmF5QnVmZmVyKDEpKSkhPVZ8fEF0JiZZaShuZXcgQXQpIT1XfHxSbiYmWWkoUm4ucmVzb2x2ZSgpKSE9Snx8c3QmJllpKG5ldyBzdCkhPWxl''@;'; put 'put ''fHxVdCYmWWkobmV3IFV0KSE9U2UpJiYoWWk9ZnVuY3Rpb24oQW4pe3ZhciBhbj1MYyhBbiksdmk9YW49PWVlP0FuLmNvbnN0cnVjdG9yOnZvaWQgMCxBcj12aT9PbCh2aSk6IiI7aWYoQXIpc3dpdGNoKEFyKXtjYXNlIFdlOnJldHVybiBWO2Nhc2UgVHQ6cmV0dXJuIFc7Y2FzZSBucjpyZXR1''@;'; put 'put ''cm4gSjtjYXNlIGh0OnJldHVybiBsZTtjYXNlIHh0OnJldHVybiBTZX1yZXR1cm4gYW59KTt2YXIgc2Q9RDAoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9EMDpmdW5jdGlvbihBbil7cmV0dXJuIE5hKEFuKSYmdHQuY2FsbChBbiwiY2FsbGVlIikmJiFRdC5jYWxsKEFuLCJjYWxs''@;'; put 'put ''ZWUiKX0sZGY9QXJyYXkuaXNBcnJheSxoZj1mdHx8ZnVuY3Rpb24gcWgoKXtyZXR1cm4hMX07ZnVuY3Rpb24gZmYoQW4pe2lmKCFPYyhBbikpcmV0dXJuITE7dmFyIGFuPUxjKEFuKTtyZXR1cm4gYW49PUt8fGFuPT1VfHxhbj09T3x8YW49PW5lfWZ1bmN0aW9uIEdoKEFuKXtyZXR1cm4ibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIEFuJiZBbj4tMSYmQW4lMT09MCYmQW48PXd9ZnVuY3Rpb24gT2MoQW4pe3ZhciBhbj10eXBlb2YgQW47cmV0dXJuIG51bGwhPUFuJiYoIm9iamVjdCI9PWFufHwiZnVuY3Rpb24iPT1hbil9ZnVuY3Rpb24gTmEoQW4pe3JldHVybiBudWxsIT1BbiYmIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBBbn12YXIgRDM9RGU/ZnVuY3Rpb24ga2UoQW4pe3JldHVybiBmdW5jdGlvbihhbil7cmV0dXJuIEFuKGFuKX19KERlKTpmdW5jdGlvbiBWdChBbil7cmV0dXJuIE5hKEFuKSYmR2goQW4ubGVuZ3RoKSYmISFzZVtMYyhBbildfTtmdW5jdGlvbiAkaChBbil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IGsxKEFuKXtyZXR1cm4gbnVsbCE9QW4mJkdoKEFuLmxlbmd0aCkmJiFmZihBbil9KEFuKT9mdW5jdGlvbiBOcyhBbixhbil7dmFyIHZpPWRmKEFuKSxBcj0hdmkmJnNkKEFuKSxQbz0hdmkmJiFBciYmaGYoQW4pLGVvPSF2aSYmIUFyJiYhUG8mJkQzKEFuKSxvbD12aXx8QXJ8fFBvfHxlbyx6''@;'; put 'put ''bz1vbD9mdW5jdGlvbiBWZShBbixhbil7Zm9yKHZhciB2aT0tMSxBcj1BcnJheShBbik7Kyt2aTxBbjspQXJbdmldPWFuKHZpKTtyZXR1cm4gQXJ9KEFuLmxlbmd0aCxTdHJpbmcpOltdLFZzPXpvLmxlbmd0aDtmb3IodmFyIFNzIGluIEFuKShhbnx8dHQuY2FsbChBbixTcykpJiYoIW9sfHwh''@;'; put 'put ''KCJsZW5ndGgiPT1Tc3x8UG8mJigib2Zmc2V0Ij09U3N8fCJwYXJlbnQiPT1Tcyl8fGVvJiYoImJ1ZmZlciI9PVNzfHwiYnl0ZUxlbmd0aCI9PVNzfHwiYnl0ZU9mZnNldCI9PVNzKXx8eWwoU3MsVnMpKSkmJnpvLnB1c2goU3MpO3JldHVybiB6b30oQW4pOmZ1bmN0aW9uIEpyKEFuKXtpZigh''@;'; put 'put ''ZnVuY3Rpb24geTAoQW4pe3ZhciBhbj1BbiYmQW4uY29uc3RydWN0b3I7cmV0dXJuIEFuPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBhbiYmYW4ucHJvdG90eXBlfHxEdCl9KEFuKSlyZXR1cm4gT3IoQW4pO3ZhciBhbj1bXTtmb3IodmFyIHZpIGluIE9iamVjdChBbikpdHQuY2FsbChBbix2aSkm''@;'; put 'put ''JiJjb25zdHJ1Y3RvciIhPXZpJiZhbi5wdXNoKHZpKTtyZXR1cm4gYW59KEFuKX11ZS5leHBvcnRzPWZ1bmN0aW9uIGVoKEFuLGFuKXtyZXR1cm4gaXIoQW4sYW4pfX0sODQyMzoodWUsWCx5KT0+e3ZhciBPPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmpl''@;'; put 'put ''Y3QmJnNlbGYsej0ib2JqZWN0Ij09dHlwZW9mIHkuZyYmeS5nJiZ5LmcuT2JqZWN0PT09T2JqZWN0JiZ5Lmd8fE98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksTj1PYmplY3QucHJvdG90eXBlLEw9Ti5oYXNPd25Qcm9wZXJ0eSxLPU4udG9TdHJpbmcsVT16LlN5bWJvbCxXPVU/VS50b1N0''@;'; put 'put ''cmluZ1RhZzp2b2lkIDA7dWUuZXhwb3J0cz1mdW5jdGlvbiBKKGllKXtpZighZnVuY3Rpb24gbmUoaWUpe3ZhciBsZT10eXBlb2YgaWU7cmV0dXJuIG51bGwhPWllJiYoIm9iamVjdCI9PWxlfHwiZnVuY3Rpb24iPT1sZSl9KGllKSlyZXR1cm4hMTt2YXIgbGU9ZnVuY3Rpb24gWShpZSl7cmV0''@;'; put 'put ''dXJuIG51bGw9PWllP3ZvaWQgMD09PWllPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpXJiZXIGluIE9iamVjdChpZSk/ZnVuY3Rpb24gcShpZSl7dmFyIGxlPUwuY2FsbChpZSxXKSxtZT1pZVtXXTt0cnl7aWVbV109dm9pZCAwO3ZhciBfZT0hMH1jYXRjaHt9dmFyIFRl''@;'; put 'put ''PUsuY2FsbChpZSk7cmV0dXJuIF9lJiYobGU/aWVbV109bWU6ZGVsZXRlIGllW1ddKSxUZX0oaWUpOmZ1bmN0aW9uIGVlKGllKXtyZXR1cm4gSy5jYWxsKGllKX0oaWUpfShpZSk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09bGV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWxl''@;'; put 'put ''fHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWxlfHwiW29iamVjdCBQcm94eV0iPT1sZX19LDk3MjI6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uIFgoeSl7cmV0dXJuIG51bGw9PXl9fSw5NzM4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5hYnN9LDYzMjk6dWU9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLmZsb29yfSwzNjc4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbih5KXtyZXR1cm4geSE9eX19LDIyNjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLm1heH0sNTczMDp1ZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgubWlufSw3MDc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLnBvd30sMzg2Mjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgucm91bmR9LDk1NTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNjc4KTt1ZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKGcpe3JldHVybiBJKGcpfHwwPT09Zz9nOmc8MD8tMToxfX0sMjMxODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU3MTcpLF89eSgzMzQ5KSxnPXkoOTUwOSkuQnVmZmVyLEI9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiB3KCl7Xy5jYWxsKHRoaXMsNjQp''@;'; put 'put ''LHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIFAoTCxLKXtyZXR1cm4gTDw8S3xMPj4+MzItS31mdW5jdGlvbiBGKEwsSyxVLFcsWSxxLGVlKXtyZXR1cm4gUChMKyhLJlV8fksmVykrWStx''@;'; put 'put ''fDAsZWUpK0t8MH1mdW5jdGlvbiBPKEwsSyxVLFcsWSxxLGVlKXtyZXR1cm4gUChMKyhLJld8VSZ+VykrWStxfDAsZWUpK0t8MH1mdW5jdGlvbiB6KEwsSyxVLFcsWSxxLGVlKXtyZXR1cm4gUChMKyhLXlVeVykrWStxfDAsZWUpK0t8MH1mdW5jdGlvbiBOKEwsSyxVLFcsWSxxLGVlKXtyZXR1''@;'; put 'put ''cm4gUChMKyhVXihLfH5XKSkrWStxfDAsZWUpK0t8MH1JKHcsXyksdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgTD1CLEs9MDtLPDE2OysrSylMW0tdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqSyk7dmFyIFU9dGhpcy5fYSxXPXRoaXMuX2IsWT10aGlzLl9jLHE9''@;'; put 'put ''dGhpcy5fZDtVPUYoVSxXLFkscSxMWzBdLDM2MTQwOTAzNjAsNykscT1GKHEsVSxXLFksTFsxXSwzOTA1NDAyNzEwLDEyKSxZPUYoWSxxLFUsVyxMWzJdLDYwNjEwNTgxOSwxNyksVz1GKFcsWSxxLFUsTFszXSwzMjUwNDQxOTY2LDIyKSxVPUYoVSxXLFkscSxMWzRdLDQxMTg1NDgzOTksNyks''@;'; put 'put ''cT1GKHEsVSxXLFksTFs1XSwxMjAwMDgwNDI2LDEyKSxZPUYoWSxxLFUsVyxMWzZdLDI4MjE3MzU5NTUsMTcpLFc9RihXLFkscSxVLExbN10sNDI0OTI2MTMxMywyMiksVT1GKFUsVyxZLHEsTFs4XSwxNzcwMDM1NDE2LDcpLHE9RihxLFUsVyxZLExbOV0sMjMzNjU1Mjg3OSwxMiksWT1GKFks''@;'; put 'put ''cSxVLFcsTFsxMF0sNDI5NDkyNTIzMywxNyksVz1GKFcsWSxxLFUsTFsxMV0sMjMwNDU2MzEzNCwyMiksVT1GKFUsVyxZLHEsTFsxMl0sMTgwNDYwMzY4Miw3KSxxPUYocSxVLFcsWSxMWzEzXSw0MjU0NjI2MTk1LDEyKSxZPUYoWSxxLFUsVyxMWzE0XSwyNzkyOTY1MDA2LDE3KSxVPU8oVSxX''@;'; put 'put ''PUYoVyxZLHEsVSxMWzE1XSwxMjM2NTM1MzI5LDIyKSxZLHEsTFsxXSw0MTI5MTcwNzg2LDUpLHE9TyhxLFUsVyxZLExbNl0sMzIyNTQ2NTY2NCw5KSxZPU8oWSxxLFUsVyxMWzExXSw2NDM3MTc3MTMsMTQpLFc9TyhXLFkscSxVLExbMF0sMzkyMTA2OTk5NCwyMCksVT1PKFUsVyxZLHEsTFs1''@;'; put 'put ''XSwzNTkzNDA4NjA1LDUpLHE9TyhxLFUsVyxZLExbMTBdLDM4MDE2MDgzLDkpLFk9TyhZLHEsVSxXLExbMTVdLDM2MzQ0ODg5NjEsMTQpLFc9TyhXLFkscSxVLExbNF0sMzg4OTQyOTQ0OCwyMCksVT1PKFUsVyxZLHEsTFs5XSw1Njg0NDY0MzgsNSkscT1PKHEsVSxXLFksTFsxNF0sMzI3NTE2''@;'; put 'put ''MzYwNiw5KSxZPU8oWSxxLFUsVyxMWzNdLDQxMDc2MDMzMzUsMTQpLFc9TyhXLFkscSxVLExbOF0sMTE2MzUzMTUwMSwyMCksVT1PKFUsVyxZLHEsTFsxM10sMjg1MDI4NTgyOSw1KSxxPU8ocSxVLFcsWSxMWzJdLDQyNDM1NjM1MTIsOSksWT1PKFkscSxVLFcsTFs3XSwxNzM1MzI4NDczLDE0''@;'; put 'put ''KSxVPXooVSxXPU8oVyxZLHEsVSxMWzEyXSwyMzY4MzU5NTYyLDIwKSxZLHEsTFs1XSw0Mjk0NTg4NzM4LDQpLHE9eihxLFUsVyxZLExbOF0sMjI3MjM5MjgzMywxMSksWT16KFkscSxVLFcsTFsxMV0sMTgzOTAzMDU2MiwxNiksVz16KFcsWSxxLFUsTFsxNF0sNDI1OTY1Nzc0MCwyMyksVT16''@;'; put 'put ''KFUsVyxZLHEsTFsxXSwyNzYzOTc1MjM2LDQpLHE9eihxLFUsVyxZLExbNF0sMTI3Mjg5MzM1MywxMSksWT16KFkscSxVLFcsTFs3XSw0MTM5NDY5NjY0LDE2KSxXPXooVyxZLHEsVSxMWzEwXSwzMjAwMjM2NjU2LDIzKSxVPXooVSxXLFkscSxMWzEzXSw2ODEyNzkxNzQsNCkscT16KHEsVSxX''@;'; put 'put ''LFksTFswXSwzOTM2NDMwMDc0LDExKSxZPXooWSxxLFUsVyxMWzNdLDM1NzI0NDUzMTcsMTYpLFc9eihXLFkscSxVLExbNl0sNzYwMjkxODksMjMpLFU9eihVLFcsWSxxLExbOV0sMzY1NDYwMjgwOSw0KSxxPXoocSxVLFcsWSxMWzEyXSwzODczMTUxNDYxLDExKSxZPXooWSxxLFUsVyxMWzE1''@;'; put 'put ''XSw1MzA3NDI1MjAsMTYpLFU9TihVLFc9eihXLFkscSxVLExbMl0sMzI5OTYyODY0NSwyMyksWSxxLExbMF0sNDA5NjMzNjQ1Miw2KSxxPU4ocSxVLFcsWSxMWzddLDExMjY4OTE0MTUsMTApLFk9TihZLHEsVSxXLExbMTRdLDI4Nzg2MTIzOTEsMTUpLFc9TihXLFkscSxVLExbNV0sNDIzNzUz''@;'; put 'put ''MzI0MSwyMSksVT1OKFUsVyxZLHEsTFsxMl0sMTcwMDQ4NTU3MSw2KSxxPU4ocSxVLFcsWSxMWzNdLDIzOTk5ODA2OTAsMTApLFk9TihZLHEsVSxXLExbMTBdLDQyOTM5MTU3NzMsMTUpLFc9TihXLFkscSxVLExbMV0sMjI0MDA0NDQ5NywyMSksVT1OKFUsVyxZLHEsTFs4XSwxODczMzEzMzU5''@;'; put 'put ''LDYpLHE9TihxLFUsVyxZLExbMTVdLDQyNjQzNTU1NTIsMTApLFk9TihZLHEsVSxXLExbNl0sMjczNDc2ODkxNiwxNSksVz1OKFcsWSxxLFUsTFsxM10sMTMwOTE1MTY0OSwyMSksVT1OKFUsVyxZLHEsTFs0XSw0MTQ5NDQ0MjI2LDYpLHE9TihxLFUsVyxZLExbMTFdLDMxNzQ3NTY5MTcsMTAp''@;'; put 'put ''LFk9TihZLHEsVSxXLExbMl0sNzE4Nzg3MjU5LDE1KSxXPU4oVyxZLHEsVSxMWzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStVfDAsdGhpcy5fYj10aGlzLl9iK1d8MCx0aGlzLl9jPXRoaXMuX2MrWXwwLHRoaXMuX2Q9dGhpcy5fZCtxfDB9LHcucHJvdG90eXBlLl9kaWdlc3Q9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwo''@;'; put 'put ''MCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgTD1nLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTC53''@;'; put 'put ''cml0ZUludDMyTEUodGhpcy5fYSwwKSxMLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksTC53cml0ZUludDMyTEUodGhpcy5fZCwxMiksTH0sdWUuZXhwb3J0cz13fSwzMDQ3Oih1ZSxYLHkpPT57dmFyIEk9eSg2MjQwKSxfPXkoOTkzMSk7ZnVuY3Rp''@;'; put 'put ''b24gZyhCKXt0aGlzLnJhbmQ9Qnx8bmV3IF8uUmFuZH11ZS5leHBvcnRzPWcsZy5jcmVhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyBnKHcpfSxnLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKHcpe3ZhciBQPXcuYml0TGVuZ3RoKCksRj1NYXRoLmNlaWwoUC84KTtkb3t2YXIgTz1u''@;'; put 'put ''ZXcgSSh0aGlzLnJhbmQuZ2VuZXJhdGUoRikpfXdoaWxlKE8uY21wKHcpPj0wKTtyZXR1cm4gT30sZy5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbih3LFApe3ZhciBGPVAuc3ViKHcpO3JldHVybiB3LmFkZCh0aGlzLl9yYW5kYmVsb3coRikpfSxnLnByb3RvdHlwZS50ZXN0PWZ1bmN0''@;'; put 'put ''aW9uKHcsUCxGKXt2YXIgTz13LmJpdExlbmd0aCgpLHo9SS5tb250KHcpLE49bmV3IEkoMSkudG9SZWQoeik7UHx8KFA9TWF0aC5tYXgoMSxPLzQ4fDApKTtmb3IodmFyIEw9dy5zdWJuKDEpLEs9MDshTC50ZXN0bihLKTtLKyspO2Zvcih2YXIgVT13LnNocm4oSyksVz1MLnRvUmVkKHopO1A+''@;'; put 'put ''MDtQLS0pe3ZhciBxPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxMKTtGJiZGKHEpO3ZhciBlZT1xLnRvUmVkKHopLnJlZFBvdyhVKTtpZigwIT09ZWUuY21wKE4pJiYwIT09ZWUuY21wKFcpKXtmb3IodmFyIEo9MTtKPEs7SisrKXtpZigwPT09KGVlPWVlLnJlZFNxcigpKS5jbXAoTikpcmV0''@;'; put 'put ''dXJuITE7aWYoMD09PWVlLmNtcChXKSlicmVha31pZihKPT09SylyZXR1cm4hMX19cmV0dXJuITB9LGcucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odyxQKXt2YXIgRj13LmJpdExlbmd0aCgpLE89SS5tb250KHcpLHo9bmV3IEkoMSkudG9SZWQoTyk7UHx8KFA9TWF0aC5tYXgoMSxG''@;'; put 'put ''LzQ4fDApKTtmb3IodmFyIE49dy5zdWJuKDEpLEw9MDshTi50ZXN0bihMKTtMKyspO2Zvcih2YXIgSz13LnNocm4oTCksVT1OLnRvUmVkKE8pO1A+MDtQLS0pe3ZhciBXPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxOKSxZPXcuZ2NkKFcpO2lmKDAhPT1ZLmNtcG4oMSkpcmV0dXJuIFk7dmFy''@;'; put 'put ''IHE9Vy50b1JlZChPKS5yZWRQb3coSyk7aWYoMCE9PXEuY21wKHopJiYwIT09cS5jbXAoVSkpe2Zvcih2YXIgZWU9MTtlZTxMO2VlKyspe2lmKDA9PT0ocT1xLnJlZFNxcigpKS5jbXAoeikpcmV0dXJuIHEuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpO2lmKDA9PT1xLmNtcChVKSlicmVha31p''@;'; put 'put ''ZihlZT09PUwpcmV0dXJuKHE9cS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0''@;'; put 'put ''aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4g''@;'; put 'put ''Vjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0ku''@;'; put 'put ''ZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0''@;'; put 'put ''dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3Ro''@;'; put 'put ''LGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNv''@;'; put 'put ''bnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5j''@;'; put 'put ''dGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIg''@;'; put 'put ''Qz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0''@;'; put 'put ''aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlz''@;'; put 'put ''LndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXko''@;'; put 'put ''dGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2Vp''@;'; put 'put ''bChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0o''@;'; put 'put ''SD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBb''@;'; put 'put ''Q118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8o''@;'; put 'put ''cCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4''@;'; put 'put ''ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIp''@;'; put 'put ''QysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0p''@;'; put 'put ''O2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJv''@;'; put 'put ''dG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAw''@;'; put 'put ''MCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3''@;'; put 'put ''MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2''@;'; put 'put ''MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIg''@;'; put 'put ''eD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4''@;'; put 'put ''NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0w''@;'; put 'put ''fEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5s''@;'; put 'put ''ZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAh''@;'; put 'put ''PT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5u''@;'; put 'put ''ZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlz''@;'; put 'put ''LndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50''@;'; put 'put ''b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2Vy''@;'; put 'put ''IHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEu''@;'; put 'put ''aXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0''@;'; put 'put ''aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCti''@;'; put 'put ''fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgr''@;'; put 'put ''Kyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhp''@;'; put 'put ''cy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVz''@;'; put 'put ''dG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9''@;'; put 'put ''MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6''@;'; put 'put ''cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhv''@;'; put 'put ''cj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNs''@;'; put 'put ''b25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tD''@;'; put 'put ''XT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhp''@;'; put 'put ''cy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVu''@;'; put 'put ''Z3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJu''@;'; put 'put ''IDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0''@;'; put 'put ''aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIu''@;'; put 'put ''X25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5n''@;'; put 'put ''dGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgm''@;'; put 'put ''Jmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9''@;'; put 'put ''Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgx''@;'; put 'put ''OTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0''@;'; put 'put ''LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1S''@;'; put 'put ''bj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4x''@;'; put 'put ''Mzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSso''@;'; put 'put ''bT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQp''@;'; put 'put ''KStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01h''@;'; put 'put ''dGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQp''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxz''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''dmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQp''@;'; put 'put ''KStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''a2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxU''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5''@;'; put 'put ''dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2''@;'; put 'put ''KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaiso''@;'; put 'put ''RT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11''@;'; put 'put ''bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSso''@;'; put 'put ''bT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaiso''@;'; put 'put ''RT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11''@;'; put 'put ''bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2''@;'; put 'put ''KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4p''@;'; put 'put ''KStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsx''@;'; put 'put ''NV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJv''@;'; put 'put ''dG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5u''@;'; put 'put ''ZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3Ro''@;'; put 'put ''KzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4''@;'; put 'put ''PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0x''@;'; put 'put ''LEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30s''@;'; put 'put ''Si5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZh''@;'; put 'put ''ciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUr''@;'; put 'put ''d2Ural0sTWU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1zZSpNZTtNZT10ZSpNZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK01lLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEou''@;'; put 'put ''cHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZh''@;'; put 'put ''ciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTky''@;'; put 'put ''Kk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsr''@;'; put 'put ''KXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxw''@;'; put 'put ''O3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1u''@;'; put 'put ''ZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25q''@;'; put 'put ''dWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxn''@;'; put 'put ''KHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVy''@;'; put 'put ''biAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7''@;'; put 'put ''cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigp''@;'; put 'put ''O0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1i''@;'; put 'put ''O2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2Zv''@;'; put 'put ''cihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygw''@;'; put 'put ''PT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCks''@;'; put 'put ''aj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208''@;'; put 'put ''dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29y''@;'; put 'put ''ZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikv''@;'; put 'put ''MjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53''@;'; put 'put ''b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2Zv''@;'; put 'put ''cihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9''@;'; put 'put ''KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNb''@;'; put 'put ''VF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYm''@;'; put 'put ''KFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVu''@;'; put 'put ''Z3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3Rl''@;'; put 'put ''XSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRp''@;'; put 'put ''dmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSks''@;'; put 'put ''dGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5u''@;'; put 'put ''ZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZl''@;'; put 'put ''PyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhp''@;'; put 'put ''c306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihw''@;'; put 'put ''LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEp''@;'; put 'put ''Lm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9''@;'; put 'put ''PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBl''@;'; put 'put ''Lm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7''@;'; put 'put ''Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDAp''@;'; put 'put ''LEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwy''@;'; put 'put ''NjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3Nl''@;'; put 'put ''LHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIo''@;'; put 'put ''YiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9i''@;'; put 'put ''LnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+''@;'; put 'put ''MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5p''@;'; put 'put ''c3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVy''@;'; put 'put ''bygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigp''@;'; put 'put ''OyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBl''@;'; put 'put ''LmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsx''@;'; put 'put ''KSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5s''@;'; put 'put ''ZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lm''@;'; put 'put ''KDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3Jl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2''@;'; put 'put ''YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09''@;'; put 'put ''dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''Zyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0''@;'; put 'put ''aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRo''@;'; put 'put ''aXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgp''@;'; put 'put ''e2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnBy''@;'; put 'put ''aW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhp''@;'; put 'put ''cy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMu''@;'; put 'put ''bWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhp''@;'; put 'put ''cy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6''@;'; put 'put ''dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJv''@;'; put 'put ''dG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7''@;'; put 'put ''dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0''@;'; put 'put ''aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2''@;'; put 'put ''MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9''@;'; put 'put ''ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlv''@;'; put 'put ''bihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAi''@;'; put 'put ''K3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJv''@;'; put 'put ''dG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1v''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5t''@;'; put 'put ''LnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFk''@;'; put 'put ''ZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJu''@;'; put 'put ''IHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBl''@;'; put 'put ''LnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwo''@;'; put 'put ''cCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4''@;'; put 'put ''KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMu''@;'; put 'put ''bS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7''@;'; put 'put ''MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVs''@;'; put 'put ''KEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1m''@;'; put 'put ''dW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7''@;'; put 'put ''VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9''@;'; put 'put ''PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9''@;'; put 'put ''cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5w''@;'; put 'put ''cm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUu''@;'; put 'put ''cHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0''@;'; put 'put ''aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMu''@;'; put 'put ''c2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5t''@;'; put 'put ''KS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sOTc0Njp1ZT0+e2Z1bmN0aW9uIFgoeSxJKXtpZigheSl0aHJvdyBuZXcgRXJyb3IoSXx8IkFzc2VydGlvbiBmYWlsZWQiKX11ZS5leHBvcnRzPVgsWC5lcXVhbD1mdW5jdGlvbihJLF8sZyl7aWYo''@;'; put 'put ''SSE9Xyl0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQ6ICIrSSsiICE9ICIrXyl9fSw0NTA0Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1YO2Z1bmN0aW9uIF8oQil7cmV0dXJuIDE9PT1CLmxlbmd0aD8iMCIrQjpCfWZ1bmN0aW9uIGcoQil7Zm9yKHZhciB3PSIiLFA9''@;'; put 'put ''MDtQPEIubGVuZ3RoO1ArKyl3Kz1fKEJbUF0udG9TdHJpbmcoMTYpKTtyZXR1cm4gd315LnRvQXJyYXk9ZnVuY3Rpb24gSShCLHcpe2lmKEFycmF5LmlzQXJyYXkoQikpcmV0dXJuIEIuc2xpY2UoKTtpZighQilyZXR1cm5bXTt2YXIgUD1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEIpe2Zvcih2''@;'; put 'put ''YXIgRj0wO0Y8Qi5sZW5ndGg7RisrKVBbRl09MHxCW0ZdO3JldHVybiBQfWlmKCJoZXgiPT09dylmb3IoKEI9Qi5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihCPSIwIitCKSxGPTA7RjxCLmxlbmd0aDtGKz0yKVAucHVzaChwYXJzZUludChCW0ZdK0JbRisxXSwx''@;'; put 'put ''NikpO2Vsc2UgZm9yKEY9MDtGPEIubGVuZ3RoO0YrKyl7dmFyIE89Qi5jaGFyQ29kZUF0KEYpLHo9Tz4+OCxOPTI1NSZPO3o/UC5wdXNoKHosTik6UC5wdXNoKE4pfXJldHVybiBQfSx5Lnplcm8yPV8seS50b0hleD1nLHkuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7cmV0dXJuImhleCI9PT1QP2co''@;'; put 'put ''dyk6d319LDQyNDQ6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9ZnVuY3Rpb24oeSl7cmV0dXJuIHkhPXl9O3VlLmV4cG9ydHM9ZnVuY3Rpb24oSSxfKXtyZXR1cm4gMD09PUkmJjA9PT1fPzEvST09MS9fOiEhKEk9PT1ffHxYKEkpJiZYKF8pKX19LDYwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDQyODkpLF89eSg1NTU5KSxnPXkoNDI0NCksQj15KDU2MjQpLHc9eSgyMjgxKSxQPV8oQigpLE9iamVjdCk7SShQLHtnZXRQb2x5ZmlsbDpCLGltcGxlbWVudGF0aW9uOmcsc2hpbTp3fSksdWUuZXhwb3J0cz1QfSw1NjI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoNDI0NCk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOkl9fSwyMjgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTYyNCksXz15KDQyODkpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgQj1JKCk7''@;'; put 'put ''cmV0dXJuIF8oT2JqZWN0LHtpczpCfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzIT09Qn19KSxCfX0sODk4NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtpZighT2JqZWN0LmtleXMpe3ZhciBfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZz1PYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLnRvU3RyaW5nLEI9eSgxNDE0KSx3PU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsUD0hdy5jYWxsKHt0b1N0cmluZzpudWxsfSwidG9TdHJpbmciKSxGPXcuY2FsbChmdW5jdGlvbigpe30sInByb3RvdHlwZSIpLE89WyJ0b1N0cmluZyIsInRvTG9jYWxl''@;'; put 'put ''U3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3IiXSx6PWZ1bmN0aW9uKFUpe3ZhciBXPVUuY29uc3RydWN0b3I7cmV0dXJuIFcmJlcucHJvdG90eXBlPT09VX0sTj17JGFwcGxpY2F0aW9u''@;'; put 'put ''Q2FjaGU6ITAsJGNvbnNvbGU6ITAsJGV4dGVybmFsOiEwLCRmcmFtZTohMCwkZnJhbWVFbGVtZW50OiEwLCRmcmFtZXM6ITAsJGlubmVySGVpZ2h0OiEwLCRpbm5lcldpZHRoOiEwLCRvbm1vemZ1bGxzY3JlZW5jaGFuZ2U6ITAsJG9ubW96ZnVsbHNjcmVlbmVycm9yOiEwLCRvdXRlckhlaWdo''@;'; put 'put ''dDohMCwkb3V0ZXJXaWR0aDohMCwkcGFnZVhPZmZzZXQ6ITAsJHBhZ2VZT2Zmc2V0OiEwLCRwYXJlbnQ6ITAsJHNjcm9sbExlZnQ6ITAsJHNjcm9sbFRvcDohMCwkc2Nyb2xsWDohMCwkc2Nyb2xsWTohMCwkc2VsZjohMCwkd2Via2l0SW5kZXhlZERCOiEwLCR3ZWJraXRTdG9yYWdlSW5mbzoh''@;'; put 'put ''MCwkd2luZG93OiEwfSxMPWZ1bmN0aW9uKCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7Zm9yKHZhciBVIGluIHdpbmRvdyl0cnl7aWYoIU5bIiQiK1VdJiZfLmNhbGwod2luZG93LFUpJiZudWxsIT09d2luZG93W1VdJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvd1tVXSl0cnl7eih3''@;'; put 'put ''aW5kb3dbVV0pfWNhdGNoe3JldHVybiEwfX1jYXRjaHtyZXR1cm4hMH1yZXR1cm4hMX0oKTtJPWZ1bmN0aW9uKFcpe3ZhciBZPW51bGwhPT1XJiYib2JqZWN0Ij09dHlwZW9mIFcscT0iW29iamVjdCBGdW5jdGlvbl0iPT09Zy5jYWxsKFcpLGVlPUIoVyksSj1ZJiYiW29iamVjdCBTdHJpbmdd''@;'; put 'put ''Ij09PWcuY2FsbChXKSxuZT1bXTtpZighWSYmIXEmJiFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIGllPUYmJnE7aWYoSiYmVy5sZW5ndGg+MCYmIV8uY2FsbChXLDApKWZvcih2YXIgbGU9MDtsZTxXLmxlbmd0aDsrK2xl''@;'; put 'put ''KW5lLnB1c2goU3RyaW5nKGxlKSk7aWYoZWUmJlcubGVuZ3RoPjApZm9yKHZhciBtZT0wO21lPFcubGVuZ3RoOysrbWUpbmUucHVzaChTdHJpbmcobWUpKTtlbHNlIGZvcih2YXIgX2UgaW4gVykoIWllfHwicHJvdG90eXBlIiE9PV9lKSYmXy5jYWxsKFcsX2UpJiZuZS5wdXNoKFN0cmluZyhf''@;'; put 'put ''ZSkpO2lmKFApZm9yKHZhciBUZT1mdW5jdGlvbihVKXtpZih0eXBlb2Ygd2luZG93PiJ1Inx8IUwpcmV0dXJuIHooVSk7dHJ5e3JldHVybiB6KFUpfWNhdGNoe3JldHVybiExfX0oVyksU2U9MDtTZTxPLmxlbmd0aDsrK1NlKSghVGV8fCJjb25zdHJ1Y3RvciIhPT1PW1NlXSkmJl8uY2FsbChX''@;'; put 'put ''LE9bU2VdKSYmbmUucHVzaChPW1NlXSk7cmV0dXJuIG5lfX11ZS5leHBvcnRzPUl9LDIyMTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9QXJyYXkucHJvdG90eXBlLnNsaWNlLF89eSgxNDE0KSxnPU9iamVjdC5rZXlzLEI9Zz9mdW5jdGlvbihGKXtyZXR1cm4gZyhGKX06eSg4OTg3''@;'; put 'put ''KSx3PU9iamVjdC5rZXlzO0Iuc2hpbT1mdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKXt2YXIgRj1mdW5jdGlvbigpe3ZhciBPPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIE8mJk8ubGVuZ3RoPT09YXJndW1lbnRzLmxlbmd0aH0oMSwyKTtGfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24o''@;'; put 'put ''eil7cmV0dXJuIF8oeik/dyhJLmNhbGwoeikpOncoeil9KX1lbHNlIE9iamVjdC5rZXlzPUI7cmV0dXJuIE9iamVjdC5rZXlzfHxCfSx1ZS5leHBvcnRzPUJ9LDE0MTQ6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KEkpe3ZhciBfPVguY2FsbChJKSxnPSJbb2JqZWN0IEFyZ3VtZW50c10iPT09XztyZXR1cm4gZ3x8KGc9IltvYmplY3QgQXJyYXldIiE9PV8mJm51bGwhPT1JJiYib2JqZWN0Ij09dHlwZW9mIEkmJiJudW1iZXIiPT10eXBlb2YgSS5sZW5ndGgmJkkubGVuZ3RoPj0wJiYiW29iamVjdCBGdW5j''@;'; put 'put ''dGlvbl0iPT09WC5jYWxsKEkuY2FsbGVlKSksZ319LDI4Mzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMjE1KSxfPXkoNTQxOSkoKSxnPXkoNzM3OSksQj15KDg4OTIpLHc9ZygiQXJyYXkucHJvdG90eXBlLnB1c2giKSxQPWcoIk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJ''@;'; put 'put ''c0VudW1lcmFibGUiKSxGPV8/Qi5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6bnVsbDt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTil7aWYobnVsbD09eil0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt2YXIgTD1CKHopO2lmKDE9PT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBMO2Zvcih2YXIgSz0xO0s8YXJndW1lbnRzLmxlbmd0aDsrK0spe3ZhciBVPUIoYXJndW1lbnRzW0tdKSxXPUkoVSksWT1fJiYoQi5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN8fEYpO2lmKFkpZm9yKHZhciBxPVkoVSksZWU9MDtlZTxxLmxlbmd0aDsrK2VlKXt2YXIgSj1xW2VlXTtQ''@;'; put 'put ''KFUsSikmJncoVyxKKX1mb3IodmFyIG5lPTA7bmU8Vy5sZW5ndGg7KytuZSl7dmFyIGllPVdbbmVdO1AoVSxpZSkmJihMW2llXT1VW2llXSl9fXJldHVybiBMfX0sODE2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4h''@;'; put 'put ''T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTtmb3IodmFyIEI9ImFiY2RlZmdoaWprbG1ub3BxcnN0Iix3PUIuc3BsaXQoIiIpLFA9e30sRj0wO0Y8dy5sZW5ndGg7KytGKVBbd1tGXV09d1tGXTt2YXIgTz1PYmplY3QuYXNzaWduKHt9LFApLHo9''@;'; put 'put ''IiI7Zm9yKHZhciBOIGluIE8peis9TjtyZXR1cm4gQiE9PXp9KCl8fGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ258fCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpcmV0dXJuITE7dmFyIEI9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHsxOjJ9KTt0cnl7T2JqZWN0LmFzc2lnbihCLCJ4''@;'; put 'put ''eSIpfWNhdGNoe3JldHVybiJ5Ij09PUJbMV19cmV0dXJuITF9KCk/STpPYmplY3QuYXNzaWdufX0sNzQzNToodWUsWCk9PntYLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxYLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBsb2NhdGlvbjwidSI/bG9jYXRpb24u''@;'; put 'put ''aG9zdG5hbWU6IiJ9LFgubG9hZGF2Zz1mdW5jdGlvbigpe3JldHVybltdfSxYLnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxYLmZyZWVtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sWC50b3RhbG1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVF''@;'; put 'put ''fSxYLmNwdXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWC50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIkJyb3dzZXIifSxYLnJlbGVhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LFgubmV0d29ya0ludGVyZmFjZXM9WC5nZXRO''@;'; put 'put ''ZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxYLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LFgucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LFgudG1wZGlyPVgudG1wRGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxYLkVPTD0i''@;'; put 'put ''XG4iLFguaG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LDI4MTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5ODA5KTtYLmNlcnRpZmljYXRlPXkoMTkzNCk7dmFyIF89SS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5r''@;'; put 'put ''ZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRo''@;'; put 'put ''aXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7WC5SU0FQcml2YXRlS2V5PV87dmFyIGc9SS5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlz''@;'; put 'put ''LmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO1guUlNBUHVibGljS2V5PWc7dmFyIEI9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlk''@;'; put 'put ''KCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkp''@;'; put 'put ''Lm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO1guUHVibGljS2V5PXc7dmFyIFA9''@;'; put 'put ''SS5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLlByaXZhdGVLZXk9UDt2''@;'; put 'put ''YXIgRj1JLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUi''@;'; put 'put ''KS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIiku''@;'; put 'put ''b2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLkVuY3J5cHRlZFByaXZhdGVLZXk9Rjt2YXIgTz1JLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7WC5EU0FQcml2YXRlS2V5PU8sWC5EU0FwYXJhbT1J''@;'; put 'put ''LmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciB6PUkuZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSxOPUkuZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoeiksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQo''@;'; put 'put ''MSkuYml0c3RyKCkpfSk7WC5FQ1ByaXZhdGVLZXk9TixYLnNpZ25hdHVyZT1JLmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sMTkzNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDk4MDkpLF89SS5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLGc9SS5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9i''@;'; put 'put ''aih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksQj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIp''@;'; put 'put ''Lm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNL''@;'; put 'put ''ZXkiKS5iaXRzdHIoKSl9KSxQPUkuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YoZyl9KSxGPUkuZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKFApfSksTz1JLmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoRil9KX0pLHo9SS5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoXyksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKF8pKX0pLE49SS5kZWZpbmUoIkV4dGVu''@;'; put 'put ''c2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksTD1JLmRlZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKEIpLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoTyksdGhpcy5rZXkoInZh''@;'; put 'put ''bGlkaXR5IikudXNlKHopLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKE8pLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZSh3KSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVl''@;'; put 'put ''SUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoTikub3B0aW9uYWwoKSl9KSxLPUkuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0Nl''@;'; put 'put ''cnRpZmljYXRlIikudXNlKEwpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7dWUuZXhwb3J0cz1LfSw3NjMxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPS9Qcm9jLVR5cGU6IDQsRU5DUllQ''@;'; put 'put ''VEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLF89L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLGc9L14tLS0tLUJFR0lOICgo''@;'; put 'put ''PzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sQj15KDMwNDgpLHc9eSg0Njk2KSxQPXkoOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXt2YXIgTCx6PUYudG9TdHJpbmcoKSxOPXoubWF0Y2goSSk7aWYo''@;'; put 'put ''Til7dmFyIFU9ImFlcyIrTlsxXSxXPVAuZnJvbShOWzJdLCJoZXgiKSxZPVAuZnJvbShOWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0IikscT1CKE8sVy5zbGljZSgwLDgpLHBhcnNlSW50KE5bMV0sMTApKS5rZXksZWU9W10sSj13LmNyZWF0ZURlY2lwaGVyaXYoVSxxLFcpO2Vl''@;'; put 'put ''LnB1c2goSi51cGRhdGUoWSkpLGVlLnB1c2goSi5maW5hbCgpKSxMPVAuY29uY2F0KGVlKX1lbHNle3ZhciBLPXoubWF0Y2goZyk7TD1QLmZyb20oS1syXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6ei5tYXRjaChfKVsxXSxkYXRhOkx9fX0sOTgwOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgxOCksXz15KDI1NjIpLGc9eSg3NjMxKSxCPXkoNDY5Niksdz15KDU2MzIpLFA9eSg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gTyh6KXt2YXIgTjsib2JqZWN0Ij09dHlwZW9mIHomJiFQLmlzQnVmZmVyKHopJiYoTj16LnBhc3NwaHJhc2Usej16''@;'; put 'put ''LmtleSksInN0cmluZyI9PXR5cGVvZiB6JiYoej1QLmZyb20oeikpO3ZhciBXLFksTD1nKHosTiksSz1MLnRhZyxVPUwuZGF0YTtzd2l0Y2goSyl7Y2FzZSJDRVJUSUZJQ0FURSI6WT1JLmNlcnRpZmljYXRlLmRlY29kZShVLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5''@;'; put 'put ''SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChZfHwoWT1JLlB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIikpLFc9WS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShZLnN1YmplY3RQ''@;'; put 'put ''dWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFkuc3ViamVjdFByaXZhdGVLZXk9WS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpZfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gWS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9r''@;'; put 'put ''ZXk9SS5EU0FwYXJhbS5kZWNvZGUoWS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6WS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6VT1m''@;'; put 'put ''dW5jdGlvbiBGKHosTil7dmFyIEw9ei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsSz1wYXJzZUludCh6LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksVT1fW3ouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9p''@;'; put 'put ''bigiLiIpXSxXPXouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LFk9ei5zdWJqZWN0UHJpdmF0ZUtleSxxPXBhcnNlSW50KFUuc3BsaXQoIi0iKVsxXSwxMCkvOCxlZT13LnBia2RmMlN5bmMoTixMLEsscSwic2hhMSIpLEo9Qi5jcmVhdGVEZWNpcGhlcml2KFUsZWUsVyksbmU9W107cmV0''@;'; put 'put ''dXJuIG5lLnB1c2goSi51cGRhdGUoWSkpLG5lLnB1c2goSi5maW5hbCgpKSxQLmNvbmNhdChuZSl9KFU9SS5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSxOKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goVz0oWT1JLlByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpKS5hbGdv''@;'; put 'put ''cml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOlkuYWxnb3JpdGhtLmN1cnZl''@;'; put 'put ''LHByaXZhdGVLZXk6SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0''@;'; put 'put ''ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlkuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIlJTQSBQ''@;'; put 'put ''UklWQVRFIEtFWSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczpJLkRTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6''@;'; put 'put ''KFU9SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6VS5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK0spfX1PLnNpZ25hdHVyZT1JLnNpZ25hdHVyZSx1ZS5leHBvcnRzPU99LDE3''@;'; put 'put ''MjU6dWU9Pnt1ZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHksSSl7eS5zdXBlcl89SSx5LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6eSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oeSxJKXt5LnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnByb3RvdHlwZSx5LnByb3RvdHlwZT1uZXcgXyx5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15fX0sMjk3NDp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7''@;'; put 'put ''cmV0dXJuIHkmJiJvYmplY3QiPT10eXBlb2YgeSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHkuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHkucmVhZFVJbnQ4fX0sODA1OToodWUsWCx5KT0+e3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9LyVbc2Rq''@;'; put 'put ''JV0vZztYLmZvcm1hdD1mdW5jdGlvbihFKXtpZighbGUoRSkpe2Zvcih2YXIgbT1bXSxBPTA7QTxhcmd1bWVudHMubGVuZ3RoO0ErKyltLnB1c2goUChhcmd1bWVudHNbQV0pKTtyZXR1cm4gbS5qb2luKCIgIil9QT0xO2Zvcih2YXIgYWU9YXJndW1lbnRzLHRlPWFlLmxlbmd0aCxzZT1TdHJp''@;'; put 'put ''bmcoRSkucmVwbGFjZShnLGZ1bmN0aW9uKFVlKXtpZigiJSUiPT09VWUpcmV0dXJuIiUiO2lmKEE+PXRlKXJldHVybiBVZTtzd2l0Y2goVWUpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoYWVbQSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihhZVtBKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJu''@;'; put 'put ''IEpTT04uc3RyaW5naWZ5KGFlW0ErK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBVZX19KSx3ZT1hZVtBXTtBPHRlO3dlPWFlWysrQV0pSih3ZSl8fCFTZSh3ZSk/c2UrPSIgIit3ZTpzZSs9IiAiK1Aod2UpO3JldHVybiBzZX0sWC5kZXByZWNhdGU9ZnVuY3Rp''@;'; put 'put ''b24oRSxtKXtpZihfZSh5LmcucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFguZGVwcmVjYXRlKEUsbSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PUkubm9EZXByZWNhdGlvbilyZXR1cm4gRTt2YXIgQT0hMTtyZXR1cm4gZnVuY3Rpb24gYWUoKXtpZighQSl7aWYo''@;'; put 'put ''SS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihtKTtJLnRyYWNlRGVwcmVjYXRpb24/Xy50cmFjZShtKTpfLmVycm9yKG0pLEE9ITB9cmV0dXJuIEUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIHcsQj17fTtmdW5jdGlvbiBQKEUsbSl7dmFyIEE9e3NlZW46W10sc3R5bGl6''@;'; put 'put ''ZTpPfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKEEuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoQS5jb2xvcnM9YXJndW1lbnRzWzNdKSxlZShtKT9BLnNob3dIaWRkZW49bTptJiZYLl9leHRlbmQoQSxtKSxfZShBLnNob3dIaWRkZW4pJiYoQS5zaG93''@;'; put 'put ''SGlkZGVuPSExKSxfZShBLmRlcHRoKSYmKEEuZGVwdGg9MiksX2UoQS5jb2xvcnMpJiYoQS5jb2xvcnM9ITEpLF9lKEEuY3VzdG9tSW5zcGVjdCkmJihBLmN1c3RvbUluc3BlY3Q9ITApLEEuY29sb3JzJiYoQS5zdHlsaXplPUYpLE4oQSxFLEEuZGVwdGgpfWZ1bmN0aW9uIEYoRSxtKXt2YXIg''@;'; put 'put ''QT1QLnN0eWxlc1ttXTtyZXR1cm4gQT8iXHgxYlsiK1AuY29sb3JzW0FdWzBdKyJtIitFKyJceDFiWyIrUC5jb2xvcnNbQV1bMV0rIm0iOkV9ZnVuY3Rpb24gTyhFLG0pe3JldHVybiBFfWZ1bmN0aW9uIE4oRSxtLEEpe2lmKEUuY3VzdG9tSW5zcGVjdCYmbSYmcChtLmluc3BlY3QpJiZtLmlu''@;'; put 'put ''c3BlY3QhPT1YLmluc3BlY3QmJighbS5jb25zdHJ1Y3Rvcnx8bS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1tKSl7dmFyIGFlPW0uaW5zcGVjdChBLEUpO3JldHVybiBsZShhZSl8fChhZT1OKEUsYWUsQSkpLGFlfXZhciB0ZT1mdW5jdGlvbiBMKEUsbSl7aWYoX2UobSkpcmV0dXJuIEUuc3R5''@;'; put 'put ''bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYobGUobSkpe3ZhciBBPSInIitKU09OLnN0cmluZ2lmeShtKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBFLnN0eWxpemUoQSwic3RyaW5nIil9cmV0''@;'; put 'put ''dXJuIGllKG0pP0Uuc3R5bGl6ZSgiIittLCJudW1iZXIiKTplZShtKT9FLnN0eWxpemUoIiIrbSwiYm9vbGVhbiIpOkoobSk/RS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oRSxtKTtpZih0ZSlyZXR1cm4gdGU7dmFyIHNlPU9iamVjdC5rZXlzKG0pLHdlPWZ1bmN0aW9uIHooRSl7''@;'; put 'put ''dmFyIG09e307cmV0dXJuIEUuZm9yRWFjaChmdW5jdGlvbihBLGFlKXttW0FdPSEwfSksbX0oc2UpO2lmKEUuc2hvd0hpZGRlbiYmKHNlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG0pKSxWKG0pJiYoc2UuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxzZS5pbmRleE9mKCJkZXNjcmlwdGlv''@;'; put 'put ''biIpPj0wKSlyZXR1cm4gSyhtKTtpZigwPT09c2UubGVuZ3RoKXtpZihwKG0pKXJldHVybiBFLnN0eWxpemUoIltGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoVGUobSkpcmV0dXJuIEUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''LmNhbGwobSksInJlZ2V4cCIpO2lmKHplKG0pKXJldHVybiBFLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwiZGF0ZSIpO2lmKFYobSkpcmV0dXJuIEsobSl9dmFyIFhlLEplPSIiLG90PSExLE1lPVsieyIsIn0iXTtyZXR1cm4gcShtKSYmKG90PSEwLE1lPVsiWyIs''@;'; put 'put ''Il0iXSkscChtKSYmKEplPSIgW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1lOiIiKSsiXSIpLFRlKG0pJiYoSmU9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSksemUobSkmJihKZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChtKSksVihtKSYm''@;'; put 'put ''KEplPSIgIitLKG0pKSwwIT09c2UubGVuZ3RofHxvdCYmMCE9bS5sZW5ndGg/QTwwP1RlKG0pP0Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksInJlZ2V4cCIpOkUuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KEUuc2Vlbi5wdXNoKG0pLFhlPW90P2Z1''@;'; put 'put ''bmN0aW9uIFUoRSxtLEEsYWUsdGUpe2Zvcih2YXIgc2U9W10sd2U9MCxVZT1tLmxlbmd0aDt3ZTxVZTsrK3dlKWoobSxTdHJpbmcod2UpKT9zZS5wdXNoKFcoRSxtLEEsYWUsU3RyaW5nKHdlKSwhMCkpOnNlLnB1c2goIiIpO3JldHVybiB0ZS5mb3JFYWNoKGZ1bmN0aW9uKEplKXtKZS5tYXRj''@;'; put 'put ''aCgvXlxkKyQvKXx8c2UucHVzaChXKEUsbSxBLGFlLEplLCEwKSl9KSxzZX0oRSxtLEEsd2Usc2UpOnNlLm1hcChmdW5jdGlvbihqZSl7cmV0dXJuIFcoRSxtLEEsd2UsamUsb3QpfSksRS5zZWVuLnBvcCgpLGZ1bmN0aW9uIFkoRSxtLEEpe3ZhciB0ZT1FLnJlZHVjZShmdW5jdGlvbihzZSx3''@;'; put 'put ''ZSl7cmV0dXJuIHdlLmluZGV4T2YoIlxuIiksc2Urd2UucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApO3JldHVybiB0ZT42MD9BWzBdKygiIj09PW0/IiI6bSsiXG4gIikrIiAiK0Uuam9pbigiLFxuICAiKSsiICIrQVsxXTpBWzBdK20rIiAiK0Uuam9pbigiLCAi''@;'; put 'put ''KSsiICIrQVsxXX0oWGUsSmUsTWUpKTpNZVswXStKZStNZVsxXX1mdW5jdGlvbiBLKEUpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChFKSsiXSJ9ZnVuY3Rpb24gVyhFLG0sQSxhZSx0ZSxzZSl7dmFyIHdlLFVlLEplO2lmKChKZT1PYmplY3QuZ2V0T3duUHJvcGVy''@;'; put 'put ''dHlEZXNjcmlwdG9yKG0sdGUpfHx7dmFsdWU6bVt0ZV19KS5nZXQ/VWU9RS5zdHlsaXplKEplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6SmUuc2V0JiYoVWU9RS5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksaihhZSx0ZSl8fCh3ZT0iWyIrdGUr''@;'; put 'put ''Il0iKSxVZXx8KEUuc2Vlbi5pbmRleE9mKEplLnZhbHVlKTwwPyhVZT1KKEEpP04oRSxKZS52YWx1ZSxudWxsKTpOKEUsSmUudmFsdWUsQS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKFVlPXNlP1VlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihvdCl7cmV0dXJuIiAgIitvdH0pLmpvaW4oIlxu''@;'; put 'put ''Iikuc3Vic3RyKDIpOiJcbiIrVWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKG90KXtyZXR1cm4iICAgIitvdH0pLmpvaW4oIlxuIikpOlVlPUUuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksX2Uod2UpKXtpZihzZSYmdGUubWF0Y2goL15cZCskLykpcmV0dXJuIFVlOyh3ZT1K''@;'; put 'put ''U09OLnN0cmluZ2lmeSgiIit0ZSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KHdlPXdlLnN1YnN0cigxLHdlLmxlbmd0aC0yKSx3ZT1FLnN0eWxpemUod2UsIm5hbWUiKSk6KHdlPXdlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBs''@;'; put 'put ''YWNlKC8oXiJ8IiQpL2csIiciKSx3ZT1FLnN0eWxpemUod2UsInN0cmluZyIpKX1yZXR1cm4gd2UrIjogIitVZX1mdW5jdGlvbiBxKEUpe3JldHVybiBBcnJheS5pc0FycmF5KEUpfWZ1bmN0aW9uIGVlKEUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIEV9ZnVuY3Rpb24gSihFKXtyZXR1cm4g''@;'; put 'put ''bnVsbD09PUV9ZnVuY3Rpb24gaWUoRSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFfWZ1bmN0aW9uIGxlKEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRX1mdW5jdGlvbiBfZShFKXtyZXR1cm4gdm9pZCAwPT09RX1mdW5jdGlvbiBUZShFKXtyZXR1cm4gU2UoRSkmJiJbb2JqZWN0IFJlZ0V4''@;'; put 'put ''cF0iPT09eChFKX1mdW5jdGlvbiBTZShFKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEUmJm51bGwhPT1FfWZ1bmN0aW9uIHplKEUpe3JldHVybiBTZShFKSYmIltvYmplY3QgRGF0ZV0iPT09eChFKX1mdW5jdGlvbiBWKEUpe3JldHVybiBTZShFKSYmKCJbb2JqZWN0IEVycm9yXSI9PT14KEUp''@;'; put 'put ''fHxFIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIHAoRSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEV9ZnVuY3Rpb24geChFKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEUpfWZ1bmN0aW9uIEMoRSl7cmV0dXJuIEU8MTA/IjAiK0UudG9TdHJpbmcoMTApOkUu''@;'; put 'put ''dG9TdHJpbmcoMTApfVguZGVidWdsb2c9ZnVuY3Rpb24oRSl7aWYoX2UodykmJih3PUkuZW52Lk5PREVfREVCVUd8fCIiKSxFPUUudG9VcHBlckNhc2UoKSwhQltFXSlpZihuZXcgUmVnRXhwKCJcXGIiK0UrIlxcYiIsImkiKS50ZXN0KHcpKXt2YXIgbT1JLnBpZDtCW0VdPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIEE9WC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpO18uZXJyb3IoIiVzICVkOiAlcyIsRSxtLEEpfX1lbHNlIEJbRV09ZnVuY3Rpb24oKXt9O3JldHVybiBCW0VdfSxYLmluc3BlY3Q9UCxQLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGlu''@;'; put 'put ''dmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sUC5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51''@;'; put 'put ''bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxYLmlzQXJyYXk9cSxYLmlzQm9vbGVhbj1lZSxYLmlzTnVsbD1KLFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVu''@;'; put 'put ''Y3Rpb24gbmUoRSl7cmV0dXJuIG51bGw9PUV9LFguaXNOdW1iZXI9aWUsWC5pc1N0cmluZz1sZSxYLmlzU3ltYm9sPWZ1bmN0aW9uIG1lKEUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgRX0sWC5pc1VuZGVmaW5lZD1fZSxYLmlzUmVnRXhwPVRlLFguaXNPYmplY3Q9U2UsWC5pc0RhdGU9emUs''@;'; put 'put ''WC5pc0Vycm9yPVYsWC5pc0Z1bmN0aW9uPXAsWC5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBiKEUpe3JldHVybiBudWxsPT09RXx8ImJvb2xlYW4iPT10eXBlb2YgRXx8Im51bWJlciI9PXR5cGVvZiBFfHwic3RyaW5nIj09dHlwZW9mIEV8fCJzeW1ib2wiPT10eXBlb2YgRXx8dHlwZW9mIEU+InUi''@;'; put 'put ''fSxYLmlzQnVmZmVyPXkoMjk3NCk7dmFyIFQ9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBqKEUsbSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChFLG0p''@;'; put 'put ''fVgubG9nPWZ1bmN0aW9uKCl7Xy5sb2coIiVzIC0gJXMiLGZ1bmN0aW9uIEgoKXt2YXIgRT1uZXcgRGF0ZSxtPVtDKEUuZ2V0SG91cnMoKSksQyhFLmdldE1pbnV0ZXMoKSksQyhFLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bRS5nZXREYXRlKCksVFtFLmdldE1vbnRoKCldLG1d''@;'; put 'put ''LmpvaW4oIiAiKX0oKSxYLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cykpfSxYLmluaGVyaXRzPXkoMTcyNSksWC5fZXh0ZW5kPWZ1bmN0aW9uKEUsbSl7aWYoIW18fCFTZShtKSlyZXR1cm4gRTtmb3IodmFyIEE9T2JqZWN0LmtleXMobSksYWU9QS5sZW5ndGg7YWUtLTspRVtBW2FlXV09bVtB''@;'; put 'put ''W2FlXV07cmV0dXJuIEV9fSwyNTIwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz0id2luMzIiPT09SS5wbGF0Zm9ybSxnPXkoODA1OSk7ZnVuY3Rpb24gQihZLHEpe2Zvcih2YXIgZWU9W10sSj0wO0o8WS5sZW5ndGg7SisrKXt2YXIgbmU9WVtKXTshbmV8fCIuIj09''@;'; put 'put ''PW5lfHwoIi4uIj09PW5lP2VlLmxlbmd0aCYmIi4uIiE9PWVlW2VlLmxlbmd0aC0xXT9lZS5wb3AoKTpxJiZlZS5wdXNoKCIuLiIpOmVlLnB1c2gobmUpKX1yZXR1cm4gZWV9ZnVuY3Rpb24gdyhZKXtmb3IodmFyIHE9WS5sZW5ndGgtMSxlZT0wO2VlPD1xJiYhWVtlZV07ZWUrKyk7Zm9yKHZh''@;'; put 'put ''ciBKPXE7Sj49MCYmIVlbSl07Si0tKTtyZXR1cm4gMD09PWVlJiZKPT09cT9ZOmVlPko/W106WS5zbGljZShlZSxKKzEpfXZhciBQPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLEY9L14oW1xzXFNdKj8pKCg/Olwu''@;'; put 'put ''ezEsMn18W15cXFwvXSs/fCkoXC5bXi5cL1xcXSp8KSkoPzpbXFxcL10qKSQvLE89e307ZnVuY3Rpb24geihZKXt2YXIgcT1QLmV4ZWMoWSksZWU9KHFbMV18fCIiKSsocVsyXXx8IiIpLG5lPUYuZXhlYyhxWzNdfHwiIik7cmV0dXJuW2VlLG5lWzFdLG5lWzJdLG5lWzNdXX1mdW5jdGlvbiBO''@;'; put 'put ''KFkpe3ZhciBxPVAuZXhlYyhZKSxlZT1xWzFdfHwiIixKPSEhZWUmJiI6IiE9PWVlWzFdO3JldHVybntkZXZpY2U6ZWUsaXNVbmM6Sixpc0Fic29sdXRlOkp8fCEhcVsyXSx0YWlsOnFbM119fWZ1bmN0aW9uIEwoWSl7cmV0dXJuIlxcXFwiK1kucmVwbGFjZSgvXltcXFwvXSsvLCIiKS5yZXBs''@;'; put 'put ''YWNlKC9bXFxcL10rL2csIlxcIil9Ty5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPSIiLHE9IiIsZWU9ITEsSj1hcmd1bWVudHMubGVuZ3RoLTE7Sj49LTE7Si0tKXt2YXIgbmU7aWYoSj49MD9uZT1hcmd1bWVudHNbSl06WT8oIShuZT1JLmVudlsiPSIrWV0pfHxuZS5zdWJzdHIoMCwz''@;'; put 'put ''KS50b0xvd2VyQ2FzZSgpIT09WS50b0xvd2VyQ2FzZSgpKyJcXCIpJiYobmU9WSsiXFwiKTpuZT1JLmN3ZCgpLCFnLmlzU3RyaW5nKG5lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKG5lKXt2YXIgaWU9TihuZSks''@;'; put 'put ''bGU9aWUuZGV2aWNlLG1lPWllLmlzVW5jLF9lPWllLmlzQWJzb2x1dGUsVGU9aWUudGFpbDtpZigoIWxlfHwhWXx8bGUudG9Mb3dlckNhc2UoKT09PVkudG9Mb3dlckNhc2UoKSkmJihZfHwoWT1sZSksZWV8fChxPVRlKyJcXCIrcSxlZT1fZSksWSYmZWUpKWJyZWFrfX1yZXR1cm4gbWUmJihZ''@;'; put 'put ''PUwoWSkpLFkrKGVlPyJcXCI6IiIpKyhxPUIocS5zcGxpdCgvW1xcXC9dKy8pLCFlZSkuam9pbigiXFwiKSl8fCIuIn0sTy5ub3JtYWxpemU9ZnVuY3Rpb24oWSl7dmFyIHE9TihZKSxlZT1xLmRldmljZSxKPXEuaXNVbmMsbmU9cS5pc0Fic29sdXRlLGllPXEudGFpbCxsZT0vW1xcXC9dJC8u''@;'; put 'put ''dGVzdChpZSk7cmV0dXJuIShpZT1CKGllLnNwbGl0KC9bXFxcL10rLyksIW5lKS5qb2luKCJcXCIpKSYmIW5lJiYoaWU9Ii4iKSxpZSYmbGUmJihpZSs9IlxcIiksSiYmKGVlPUwoZWUpKSxlZSsobmU/IlxcIjoiIikraWV9LE8uaXNBYnNvbHV0ZT1mdW5jdGlvbihZKXtyZXR1cm4gTihZKS5p''@;'; put 'put ''c0Fic29sdXRlfSxPLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIFk9W10scT0wO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBlZT1hcmd1bWVudHNbcV07aWYoIWcuaXNTdHJpbmcoZWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJp''@;'; put 'put ''bmdzIik7ZWUmJlkucHVzaChlZSl9dmFyIEo9WS5qb2luKCJcXCIpO3JldHVybi9eW1xcXC9dezJ9W15cXFwvXS8udGVzdChZWzBdKXx8KEo9Si5yZXBsYWNlKC9eW1xcXC9dezIsfS8sIlxcIikpLE8ubm9ybWFsaXplKEopfSxPLnJlbGF0aXZlPWZ1bmN0aW9uKFkscSl7WT1PLnJlc29sdmUo''@;'; put 'put ''WSkscT1PLnJlc29sdmUocSk7Zm9yKHZhciBlZT1ZLnRvTG93ZXJDYXNlKCksSj1xLnRvTG93ZXJDYXNlKCksbmU9dyhxLnNwbGl0KCJcXCIpKSxpZT13KGVlLnNwbGl0KCJcXCIpKSxsZT13KEouc3BsaXQoIlxcIikpLG1lPU1hdGgubWluKGllLmxlbmd0aCxsZS5sZW5ndGgpLF9lPW1lLFRl''@;'; put 'put ''PTA7VGU8bWU7VGUrKylpZihpZVtUZV0hPT1sZVtUZV0pe19lPVRlO2JyZWFrfWlmKDA9PV9lKXJldHVybiBxO3ZhciBTZT1bXTtmb3IoVGU9X2U7VGU8aWUubGVuZ3RoO1RlKyspU2UucHVzaCgiLi4iKTtyZXR1cm4oU2U9U2UuY29uY2F0KG5lLnNsaWNlKF9lKSkpLmpvaW4oIlxcIil9LE8u''@;'; put 'put ''X21ha2VMb25nPWZ1bmN0aW9uKFkpe2lmKCFnLmlzU3RyaW5nKFkpKXJldHVybiBZO2lmKCFZKXJldHVybiIiO3ZhciBxPU8ucmVzb2x2ZShZKTtyZXR1cm4vXlthLXpBLVpdXDpcXC8udGVzdChxKT8iXFxcXD9cXCIrcTovXlxcXFxbXj8uXS8udGVzdChxKT8iXFxcXD9cXFVOQ1xcIitxLnN1''@;'; put 'put ''YnN0cmluZygyKTpZfSxPLmRpcm5hbWU9ZnVuY3Rpb24oWSl7dmFyIHE9eihZKSxlZT1xWzBdLEo9cVsxXTtyZXR1cm4gZWV8fEo/KEomJihKPUouc3Vic3RyKDAsSi5sZW5ndGgtMSkpLGVlK0opOiIuIn0sTy5iYXNlbmFtZT1mdW5jdGlvbihZLHEpe3ZhciBlZT16KFkpWzJdO3JldHVybiBx''@;'; put 'put ''JiZlZS5zdWJzdHIoLTEqcS5sZW5ndGgpPT09cSYmKGVlPWVlLnN1YnN0cigwLGVlLmxlbmd0aC1xLmxlbmd0aCkpLGVlfSxPLmV4dG5hbWU9ZnVuY3Rpb24oWSl7cmV0dXJuIHooWSlbM119LE8uZm9ybWF0PWZ1bmN0aW9uKFkpe2lmKCFnLmlzT2JqZWN0KFkpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBZKTtpZighZy5pc1N0cmluZyhZLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIr''@;'; put 'put ''dHlwZW9mIFkucm9vdCk7dmFyIGVlPVkuZGlyLEo9WS5iYXNlfHwiIjtyZXR1cm4gZWU/ZWVbZWUubGVuZ3RoLTFdPT09Ty5zZXA/ZWUrSjplZStPLnNlcCtKOkp9LE8ucGFyc2U9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdw''@;'; put 'put ''YXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgWSk7dmFyIHE9eihZKTtpZighcXx8NCE9PXEubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitZKyInIik7cmV0dXJue3Jvb3Q6cVswXSxkaXI6cVswXStxWzFdLnNsaWNlKDAsLTEpLGJh''@;'; put 'put ''c2U6cVsyXSxleHQ6cVszXSxuYW1lOnFbMl0uc2xpY2UoMCxxWzJdLmxlbmd0aC1xWzNdLmxlbmd0aCl9fSxPLnNlcD0iXFwiLE8uZGVsaW1pdGVyPSI7Ijt2YXIgSz0vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8sVT17fTtm''@;'; put 'put ''dW5jdGlvbiBXKFkpe3JldHVybiBLLmV4ZWMoWSkuc2xpY2UoMSl9VS5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPSIiLHE9ITEsZWU9YXJndW1lbnRzLmxlbmd0aC0xO2VlPj0tMSYmIXE7ZWUtLSl7dmFyIEo9ZWU+PTA/YXJndW1lbnRzW2VlXTpJLmN3ZCgpO2lmKCFnLmlzU3RyaW5n''@;'; put 'put ''KEopKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7SiYmKFk9SisiLyIrWSxxPSIvIj09PUpbMF0pfXJldHVybihxPyIvIjoiIikrKFk9QihZLnNwbGl0KCIvIiksIXEpLmpvaW4oIi8iKSl8fCIuIn0sVS5ub3JtYWxpemU9''@;'; put 'put ''ZnVuY3Rpb24oWSl7dmFyIHE9VS5pc0Fic29sdXRlKFkpLGVlPVkmJiIvIj09PVlbWS5sZW5ndGgtMV07cmV0dXJuIShZPUIoWS5zcGxpdCgiLyIpLCFxKS5qb2luKCIvIikpJiYhcSYmKFk9Ii4iKSxZJiZlZSYmKFkrPSIvIiksKHE/Ii8iOiIiKStZfSxVLmlzQWJzb2x1dGU9ZnVuY3Rpb24o''@;'; put 'put ''WSl7cmV0dXJuIi8iPT09WS5jaGFyQXQoMCl9LFUuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgWT0iIixxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPWFyZ3VtZW50c1txXTtpZighZy5pc1N0cmluZyhlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgu''@;'; put 'put ''am9pbiBtdXN0IGJlIHN0cmluZ3MiKTtlZSYmKFkrPVk/Ii8iK2VlOmVlKX1yZXR1cm4gVS5ub3JtYWxpemUoWSl9LFUucmVsYXRpdmU9ZnVuY3Rpb24oWSxxKXtZPVUucmVzb2x2ZShZKS5zdWJzdHIoMSkscT1VLnJlc29sdmUocSkuc3Vic3RyKDEpO2Zvcih2YXIgZWU9dyhZLnNwbGl0KCIv''@;'; put 'put ''IikpLEo9dyhxLnNwbGl0KCIvIikpLG5lPU1hdGgubWluKGVlLmxlbmd0aCxKLmxlbmd0aCksaWU9bmUsbGU9MDtsZTxuZTtsZSsrKWlmKGVlW2xlXSE9PUpbbGVdKXtpZT1sZTticmVha312YXIgbWU9W107Zm9yKGxlPWllO2xlPGVlLmxlbmd0aDtsZSsrKW1lLnB1c2goIi4uIik7cmV0dXJu''@;'; put 'put ''KG1lPW1lLmNvbmNhdChKLnNsaWNlKGllKSkpLmpvaW4oIi8iKX0sVS5fbWFrZUxvbmc9ZnVuY3Rpb24oWSl7cmV0dXJuIFl9LFUuZGlybmFtZT1mdW5jdGlvbihZKXt2YXIgcT1XKFkpLGVlPXFbMF0sSj1xWzFdO3JldHVybiBlZXx8Sj8oSiYmKEo9Si5zdWJzdHIoMCxKLmxlbmd0aC0xKSks''@;'; put 'put ''ZWUrSik6Ii4ifSxVLmJhc2VuYW1lPWZ1bmN0aW9uKFkscSl7dmFyIGVlPVcoWSlbMl07cmV0dXJuIHEmJmVlLnN1YnN0cigtMSpxLmxlbmd0aCk9PT1xJiYoZWU9ZWUuc3Vic3RyKDAsZWUubGVuZ3RoLXEubGVuZ3RoKSksZWV9LFUuZXh0bmFtZT1mdW5jdGlvbihZKXtyZXR1cm4gVyhZKVsz''@;'; put 'put ''XX0sVS5mb3JtYXQ9ZnVuY3Rpb24oWSl7aWYoIWcuaXNPYmplY3QoWSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIFkpO2lmKCFnLmlzU3RyaW5nKFkucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgWS5yb290KTtyZXR1cm4oWS5kaXI/WS5kaXIrVS5zZXA6IiIpKyhZLmJhc2V8fCIiKX0sVS5wYXJzZT1mdW5jdGlvbihZKXtpZighZy5pc1N0cmluZyhZKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBZKTt2YXIgcT1XKFkpO2lmKCFxfHw0IT09cS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1krIiciKTtyZXR1cm4gcVsxXT1xWzFdfHwiIixx''@;'; put 'put ''WzJdPXFbMl18fCIiLHFbM109cVszXXx8IiIse3Jvb3Q6cVswXSxkaXI6cVswXStxWzFdLnNsaWNlKDAsLTEpLGJhc2U6cVsyXSxleHQ6cVszXSxuYW1lOnFbMl0uc2xpY2UoMCxxWzJdLmxlbmd0aC1xWzNdLmxlbmd0aCl9fSxVLnNlcD0iLyIsVS5kZWxpbWl0ZXI9IjoiLHVlLmV4cG9ydHM9''@;'; put 'put ''Xz9POlUsdWUuZXhwb3J0cy5wb3NpeD1VLHVlLmV4cG9ydHMud2luMzI9T30sNTYzMjoodWUsWCx5KT0+e1gucGJrZGYyPXkoODYzOCksWC5wYmtkZjJTeW5jPXkoMTI1Nyl9LDg2Mzg6KHVlLFgseSk9Pnt2YXIgUCxMLEk9eSg5NTA5KS5CdWZmZXIsXz15KDczNTcpLGc9eSgyMzY4KSxCPXko''@;'; put 'put ''MTI1Nyksdz15KDc3NzcpLEY9eS5nLmNyeXB0byYmeS5nLmNyeXB0by5zdWJ0bGUsTz17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQi''@;'; put 'put ''LCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sej1bXTtmdW5jdGlvbiBLKCl7cmV0dXJuIEx8fChMPXkuZy5wcm9jZXNzJiZ5LmcucHJvY2Vzcy5uZXh0VGljaz95LmcucHJvY2Vzcy5uZXh0VGljazp5LmcucXVldWVNaWNyb3Rhc2s/eS5nLnF1ZXVlTWljcm90YXNrOnku''@;'; put 'put ''Zy5zZXRJbW1lZGlhdGU/eS5nLnNldEltbWVkaWF0ZTp5Lmcuc2V0VGltZW91dCl9ZnVuY3Rpb24gVShZLHEsZWUsSixuZSl7cmV0dXJuIEYuaW1wb3J0S2V5KCJyYXciLFkse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gRi5kZXJp''@;'; put 'put ''dmVCaXRzKHtuYW1lOiJQQktERjIiLHNhbHQ6cSxpdGVyYXRpb25zOmVlLGhhc2g6e25hbWU6bmV9fSxpZSxKPDwzKX0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBJLmZyb20oaWUpfSl9dWUuZXhwb3J0cz1mdW5jdGlvbihZLHEsZWUsSixuZSxpZSl7ImZ1bmN0aW9uIj09dHlwZW9mIG5l''@;'; put 'put ''JiYoaWU9bmUsbmU9dm9pZCAwKTt2YXIgbGU9T1sobmU9bmV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYobGUmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmcuUHJvbWlzZSl7aWYoXyhlZSxKKSxZPXcoWSxnLCJQYXNzd29yZCIpLHE9dyhxLGcsIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''aWUpdGhyb3cgbmV3IEVycm9yKCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTshZnVuY3Rpb24gVyhZLHEpe1kudGhlbihmdW5jdGlvbihlZSl7SygpKGZ1bmN0aW9uKCl7cShudWxsLGVlKX0pfSxmdW5jdGlvbihlZSl7SygpKGZ1bmN0aW9uKCl7cShlZSl9KX0pfShmdW5jdGlv''@;'; put 'put ''biBOKFkpe2lmKHkuZy5wcm9jZXNzJiYheS5nLnByb2Nlc3MuYnJvd3Nlcnx8IUZ8fCFGLmltcG9ydEtleXx8IUYuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT16W1ldKXJldHVybiB6W1ldO3ZhciBxPVUoUD1QfHxJLmFsbG9jKDgpLFAsMTAsMTI4''@;'; put 'put ''LFkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4geltZXT1xLHF9KGxlKS50aGVuKGZ1bmN0aW9uKG1lKXtyZXR1cm4gbWU/VShZLHEsZWUsSixsZSk6QihZLHEsZWUsSixuZSl9KSxpZSl9ZWxzZSBLKCkoZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgbWU7dHJ5e21lPUIoWSxxLGVlLEosbmUpfWNhdGNoKF9lKXtyZXR1cm4gaWUoX2UpfWllKG51bGwsbWUpfSl9fSwyMzY4Oih1ZSxYLHkpPT57dmFyIF8sST15KDQxNTUpO189eS5nLnByb2Nlc3MmJnkuZy5wcm9jZXNzLmJyb3dzZXI/InV0Zi04Ijp5LmcucHJvY2VzcyYmeS5nLnByb2Nl''@;'; put 'put ''c3MudmVyc2lvbj9wYXJzZUludChJLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLHVlLmV4cG9ydHM9X30sNzM1Nzp1ZT0+e3ZhciBYPU1hdGgucG93KDIsMzApLTE7dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2lmKCJudW1i''@;'; put 'put ''ZXIiIT10eXBlb2YgeSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKHk8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBh''@;'; put 'put ''IG51bWJlciIpO2lmKEk8MHx8ST5YfHxJIT1JKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSwxMjU3Oih1ZSxYLHkpPT57dmFyIEk9eSg4MDI4KSxfPXkoOTc4NSksZz15KDkwNzIpLEI9eSg5NTA5KS5CdWZmZXIsdz15KDczNTcpLFA9eSgyMzY4KSxGPXkoNzc3Nyks''@;'; put 'put ''Tz1CLmFsbG9jKDEyOCksej17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIE4oVSxXLFkpe3ZhciBxPWZ1bmN0aW9uIEwoVSl7cmV0dXJuInJtZDE2MCI9PT1VfHwicmlwZW1kMTYw''@;'; put 'put ''Ij09PVU/ZnVuY3Rpb24gWShxKXtyZXR1cm4obmV3IF8pLnVwZGF0ZShxKS5kaWdlc3QoKX06Im1kNSI9PT1VP0k6ZnVuY3Rpb24gVyhxKXtyZXR1cm4gZyhVKS51cGRhdGUocSkuZGlnZXN0KCl9fShVKSxlZT0ic2hhNTEyIj09PVV8fCJzaGEzODQiPT09VT8xMjg6NjQ7Vy5sZW5ndGg+ZWU/''@;'; put 'put ''Vz1xKFcpOlcubGVuZ3RoPGVlJiYoVz1CLmNvbmNhdChbVyxPXSxlZSkpO2Zvcih2YXIgSj1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLG5lPUIuYWxsb2NVbnNhZmUoZWUreltVXSksaWU9MDtpZTxlZTtpZSsrKUpbaWVdPTU0XldbaWVdLG5lW2llXT05Ml5XW2llXTt2YXIgbGU9Qi5hbGxvY1Vu''@;'; put 'put ''c2FmZShlZStZKzQpO0ouY29weShsZSwwLDAsZWUpLHRoaXMuaXBhZDE9bGUsdGhpcy5pcGFkMj1KLHRoaXMub3BhZD1uZSx0aGlzLmFsZz1VLHRoaXMuYmxvY2tzaXplPWVlLHRoaXMuaGFzaD1xLHRoaXMuc2l6ZT16W1VdfU4ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihVLFcpe3JldHVybiBV''@;'; put 'put ''LmNvcHkoVyx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKFcpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sdWUuZXhwb3J0cz1mdW5jdGlvbiBLKFUsVyxZLHEsZWUpe3coWSxxKTt2YXIgSj1uZXcgTihlZT1lZXx8InNoYTEiLFU9RihVLFAs''@;'; put 'put ''IlBhc3N3b3JkIiksKFc9RihXLFAsIlNhbHQiKSkubGVuZ3RoKSxuZT1CLmFsbG9jVW5zYWZlKHEpLGllPUIuYWxsb2NVbnNhZmUoVy5sZW5ndGgrNCk7Vy5jb3B5KGllLDAsMCxXLmxlbmd0aCk7Zm9yKHZhciBsZT0wLG1lPXpbZWVdLF9lPU1hdGguY2VpbChxL21lKSxUZT0xO1RlPD1fZTtU''@;'; put 'put ''ZSsrKXtpZS53cml0ZVVJbnQzMkJFKFRlLFcubGVuZ3RoKTtmb3IodmFyIFNlPUoucnVuKGllLEouaXBhZDEpLHplPVNlLFY9MTtWPFk7VisrKXt6ZT1KLnJ1bih6ZSxKLmlwYWQyKTtmb3IodmFyIHA9MDtwPG1lO3ArKylTZVtwXV49emVbcF19U2UuY29weShuZSxsZSksbGUrPW1lfXJldHVy''@;'; put 'put ''biBuZX19LDc3Nzc6KHVlLFgseSk9Pnt2YXIgST15KDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxCKXtpZihJLmlzQnVmZmVyKF8pKXJldHVybiBfO2lmKCJzdHJpbmciPT10eXBlb2YgXylyZXR1cm4gSS5mcm9tKF8sZyk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KF8pKXJl''@;'; put 'put ''dHVybiBJLmZyb20oXy5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IoQisiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDk5MDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1bIkZsb2F0MTZBcnJheSIsIkZsb2F0MzJB''@;'; put 'put ''cnJheSIsIkZsb2F0NjRBcnJheSIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSJdfSw4MjEyOih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7dWUuZXhwb3J0cz10eXBlb2YgST4idSJ8fCFJLnZlcnNpb258fDA9PT1JLnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1JLnZlcnNpb24uaW5kZXhPZigidjEuIikmJjAhPT1JLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT97bmV4''@;'; put 'put ''dFRpY2s6ZnVuY3Rpb24gXyhnLEIsdyxQKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZyl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciBPLHosRj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChGKXtjYXNlIDA6Y2FzZSAxOnJl''@;'; put 'put ''dHVybiBJLm5leHRUaWNrKGcpO2Nhc2UgMjpyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cuY2FsbChudWxsLEIpfSk7Y2FzZSAzOnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5jYWxsKG51bGwsQix3KX0pO2Nhc2UgNDpyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cu''@;'; put 'put ''Y2FsbChudWxsLEIsdyxQKX0pO2RlZmF1bHQ6Zm9yKE89bmV3IEFycmF5KEYtMSksej0wO3o8Ty5sZW5ndGg7KU9beisrXT1hcmd1bWVudHNbel07cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmFwcGx5KG51bGwsTyl9KX19fTpJfSw0MTU1OnVlPT57dmFyIHksSSxYPXVlLmV4cG9y''@;'; put 'put ''dHM9e307ZnVuY3Rpb24gXygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGcoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIEIoVyl7aWYoeT09PXNldFRpbWVv''@;'; put 'put ''dXQpcmV0dXJuIHNldFRpbWVvdXQoVywwKTtpZigoeT09PV98fCF5KSYmc2V0VGltZW91dClyZXR1cm4geT1zZXRUaW1lb3V0LHNldFRpbWVvdXQoVywwKTt0cnl7cmV0dXJuIHkoVywwKX1jYXRjaHt0cnl7cmV0dXJuIHkuY2FsbChudWxsLFcsMCl9Y2F0Y2h7cmV0dXJuIHkuY2FsbCh0aGlz''@;'; put 'put ''LFcsMCl9fX0hZnVuY3Rpb24oKXt0cnl7eT0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Ol99Y2F0Y2h7eT1ffXRyeXtJPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Omd9Y2F0Y2h7ST1nfX0oKTt2YXIgTyxQPVtdLEY9ITEsej0t''@;'; put 'put ''MTtmdW5jdGlvbiBOKCl7IUZ8fCFPfHwoRj0hMSxPLmxlbmd0aD9QPU8uY29uY2F0KFApOno9LTEsUC5sZW5ndGgmJkwoKSl9ZnVuY3Rpb24gTCgpe2lmKCFGKXt2YXIgVz1CKE4pO0Y9ITA7Zm9yKHZhciBZPVAubGVuZ3RoO1k7KXtmb3IoTz1QLFA9W107Kyt6PFk7KU8mJk9bel0ucnVuKCk7''@;'; put 'put ''ej0tMSxZPVAubGVuZ3RofU89bnVsbCxGPSExLGZ1bmN0aW9uIHcoVyl7aWYoST09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KFcpO2lmKChJPT09Z3x8IUkpJiZjbGVhclRpbWVvdXQpcmV0dXJuIEk9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChXKTt0cnl7cmV0dXJuIEko''@;'; put 'put ''Vyl9Y2F0Y2h7dHJ5e3JldHVybiBJLmNhbGwobnVsbCxXKX1jYXRjaHtyZXR1cm4gSS5jYWxsKHRoaXMsVyl9fX0oVyl9fWZ1bmN0aW9uIEsoVyxZKXt0aGlzLmZ1bj1XLHRoaXMuYXJyYXk9WX1mdW5jdGlvbiBVKCl7fVgubmV4dFRpY2s9ZnVuY3Rpb24oVyl7dmFyIFk9bmV3IEFycmF5KGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspWVtxLTFdPWFyZ3VtZW50c1txXTtQLnB1c2gobmV3IEsoVyxZKSksMT09PVAubGVuZ3RoJiYhRiYmQihMKX0sSy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7''@;'; put 'put ''dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sWC50aXRsZT0iYnJvd3NlciIsWC5icm93c2VyPSEwLFguZW52PXt9LFguYXJndj1bXSxYLnZlcnNpb249IiIsWC52ZXJzaW9ucz17fSxYLm9uPVUsWC5hZGRMaXN0ZW5lcj1VLFgub25jZT1VLFgub2ZmPVUsWC5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cj1VLFgucmVtb3ZlQWxsTGlzdGVuZXJzPVUsWC5lbWl0PVUsWC5wcmVwZW5kTGlzdGVuZXI9VSxYLnByZXBlbmRPbmNlTGlzdGVuZXI9VSxYLmxpc3RlbmVycz1mdW5jdGlvbihXKXtyZXR1cm5bXX0sWC5iaW5kaW5nPWZ1bmN0aW9uKFcpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5k''@;'; put 'put ''aW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sWC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LFguY2hkaXI9ZnVuY3Rpb24oVyl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sWC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sNzkwMDoodWUsWCx5''@;'; put 'put ''KT0+e1gucHVibGljRW5jcnlwdD15KDY1NTkpLFgucHJpdmF0ZURlY3J5cHQ9eSg2MTM4KSxYLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKF8sZyl7cmV0dXJuIFgucHVibGljRW5jcnlwdChfLGcsITApfSxYLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oXyxnKXtyZXR1cm4gWC5wcml2YXRlRGVj''@;'; put 'put ''cnlwdChfLGcsITApfX0sOTE5OToodWUsWCx5KT0+e3ZhciBJPXkoMzQ4MiksXz15KDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBnKEIpe3ZhciB3PV8uYWxsb2NVbnNhZmUoNCk7cmV0dXJuIHcud3JpdGVVSW50MzJCRShCLDApLHd9dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe2Zvcih2YXIgTyxQ''@;'; put 'put ''PV8uYWxsb2MoMCksRj0wO1AubGVuZ3RoPHc7KU89ZyhGKyspLFA9Xy5jb25jYXQoW1AsSSgic2hhMSIpLnVwZGF0ZShCKS51cGRhdGUoTykuZGlnZXN0KCldKTtyZXR1cm4gUC5zbGljZSgwLHcpfX0sMjE0NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0Ijtm''@;'; put 'put ''dW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0''@;'; put 'put ''cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChW''@;'; put 'put ''fHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDcxMDgpLkJ1ZmZlcn1j''@;'; put 'put ''YXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5j''@;'; put 'put ''dGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBp''@;'; put 'put ''bnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsi''@;'; put 'put ''aGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhp''@;'; put 'put ''cy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEw''@;'; put 'put ''ODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4''@;'; put 'put ''NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndv''@;'; put 'put ''cmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgp''@;'; put 'put ''Zm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClm''@;'; put 'put ''b3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAs''@;'; put 'put ''SD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7Qzxw''@;'; put 'put ''Lmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0s''@;'; put 'put ''dGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jk''@;'; put 'put ''c1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1t''@;'; put 'put ''OnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3Ro''@;'; put 'put ''LHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0''@;'; put 'put ''aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMu''@;'; put 'put ''dG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQw''@;'; put 'put ''MTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9u''@;'; put 'put ''IFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7''@;'; put 'put ''Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSth''@;'; put 'put ''ZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEw''@;'; put 'put ''KXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8''@;'; put 'put ''fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIg''@;'; put 'put ''bT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5p''@;'; put 'put ''c1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53''@;'; put 'put ''b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNh''@;'; put 'put ''biBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVv''@;'; put 'put ''ZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3Ro''@;'; put 'put ''KCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7''@;'; put 'put ''aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCks''@;'; put 'put ''altULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+''@;'; put 'put ''PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcp''@;'; put 'put ''LDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcu''@;'; put 'put ''cHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUu''@;'; put 'put ''bmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxw''@;'; put 'put ''Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRo''@;'; put 'put ''aXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhp''@;'; put 'put ''cy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''dWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNb''@;'; put 'put ''Q11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2''@;'; put 'put ''ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBh''@;'; put 'put ''bmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53''@;'; put 'put ''b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRo''@;'; put 'put ''aXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6''@;'; put 'put ''KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9''@;'; put 'put ''KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJu''@;'; put 'put ''IHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0''@;'; put 'put ''aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5j''@;'; put 'put ''bXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNb''@;'; put 'put ''al0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisr''@;'; put 'put ''KXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yihw''@;'; put 'put ''KX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMs''@;'; put 'put ''WGU9MHxDWzNdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8''@;'; put 'put ''Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLHNpPTB8VFsxXSxRdD04MTkxJnNpLHNuPXNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10s''@;'; put 'put ''V3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgx''@;'; put 'put ''OTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3Zh''@;'; put 'put ''ciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUs''@;'; put 'put ''c24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKGplLFJ0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQ''@;'; put 'put ''dCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsV3QpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUs''@;'; put 'put ''enQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''UmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3Zh''@;'; put 'put ''ciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUs''@;'; put 'put ''ZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXww''@;'; put 'put ''KStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''RGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXww''@;'; put 'put ''KStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3Zh''@;'; put 'put ''ciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUs''@;'; put 'put ''Zm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxI''@;'; put 'put ''WzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24g''@;'; put 'put ''SihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRo''@;'; put 'put ''aXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxF''@;'; put 'put ''PU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8''@;'; put 'put ''MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2''@;'; put 'put ''YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBD''@;'; put 'put ''PTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlv''@;'; put 'put ''bihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7''@;'; put 'put ''d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSxNZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKk1lO01lPXRlKk1lK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUrTWUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLU1l''@;'; put 'put ''LHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90''@;'; put 'put ''eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5j''@;'; put 'put ''dGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZl''@;'; put 'put ''cnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUu''@;'; put 'put ''c3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxI''@;'; put 'put ''PXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixD''@;'; put 'put ''KSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dl''@;'; put 'put ''XSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0''@;'; put 'put ''aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5t''@;'; put 'put ''dWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEw''@;'; put 'put ''ODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''c3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5''@;'; put 'put ''KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtD''@;'; put 'put ''KysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7''@;'; put 'put ''dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9''@;'; put 'put ''SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2''@;'; put 'put ''OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigw''@;'; put 'put ''IT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAh''@;'; put 'put ''PT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSks''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlw''@;'; put 'put ''ZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hy''@;'; put 'put ''bihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7''@;'; put 'put ''ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1N''@;'; put 'put ''YXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhp''@;'; put 'put ''cy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8''@;'; put 'put ''dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0''@;'; put 'put ''aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRz''@;'; put 'put ''W1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3Ro''@;'; put 'put ''O1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53''@;'; put 'put ''b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEs''@;'; put 'put ''bS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+''@;'; put 'put ''PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZl''@;'; put 'put ''PTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlw''@;'; put 'put ''ZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUgu''@;'; put 'put ''ZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVn''@;'; put 'put ''KCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50''@;'; put 'put ''aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7''@;'; put 'put ''ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBl''@;'; put 'put ''Lm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2''@;'; put 'put ''bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdh''@;'; put 'put ''dGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2Iu''@;'; put 'put ''dW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1pl''@;'; put 'put ''cm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEp''@;'; put 'put ''O2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21w''@;'; put 'put ''KHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8o''@;'; put 'put ''KSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZF''@;'; put 'put ''KSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQu''@;'; put 'put ''aXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlv''@;'; put 'put ''bihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKysp''@;'; put 'put ''Yi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazti''@;'; put 'put ''LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixD''@;'; put 'put ''PTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWom''@;'; put 'put ''PTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFy''@;'; put 'put ''IEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''MT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21w''@;'; put 'put ''KHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0s''@;'; put 'put ''dy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl''@;'; put 'put ''cyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3Jj''@;'; put 'put ''ZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5y''@;'; put 'put ''ZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIo''@;'; put 'put ''dGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRo''@;'; put 'put ''aXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51''@;'; put 'put ''bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBs''@;'; put 'put ''ZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1v''@;'; put 'put ''ZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYp''@;'; put 'put ''LHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRo''@;'; put 'put ''aXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmly''@;'; put 'put ''ZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09''@;'; put 'put ''Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAu''@;'; put 'put ''bGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1q''@;'; put 'put ''fXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxl''@;'; put 'put ''bmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9''@;'; put 'put ''LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9''@;'; put 'put ''PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtp''@;'; put 'put ''ZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhw''@;'; put 'put ''LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVn''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5p''@;'; put 'put ''c3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0''@;'; put 'put ''dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnky''@;'; put 'put ''KHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhp''@;'; put 'put ''cy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyks''@;'; put 'put ''aj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBv''@;'; put 'put ''dyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUt''@;'; put 'put ''MSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1v''@;'; put 'put ''ZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcg''@;'; put 'put ''dygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1i''@;'; put 'put ''LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1''@;'; put 'put ''cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5t''@;'; put 'put ''b250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMu''@;'; put 'put ''aW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlz''@;'; put 'put ''LnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0''@;'; put 'put ''aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmlu''@;'; put 'put ''dm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw2MTM4Oih1ZSxYLHkpPT57dmFyIEk9eSg5ODApLF89eSg5MTk5KSxnPXkoNzg1OSksQj15KDIxNDQpLHc9eSgz''@;'; put 'put ''NjYzKSxQPXkoMzQ4MiksRj15KDQ4MTgpLE89eSg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihVLFcsWSl7dmFyIHE7cT1VLnBhZGRpbmc/VS5wYWRkaW5nOlk/MTo0O3ZhciBuZSxlZT1JKFUpLEo9ZWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoVy5sZW5ndGg+Snx8bmV3IEIo''@;'; put 'put ''VykuY21wKGVlLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO25lPVk/RihuZXcgQihXKSxlZSk6dyhXLGVlKTt2YXIgaWU9Ty5hbGxvYyhKLW5lLmxlbmd0aCk7aWYobmU9Ty5jb25jYXQoW2llLG5lXSxKKSw0PT09cSlyZXR1cm4gZnVuY3Rpb24geihL''@;'; put 'put ''LFUpe3ZhciBXPUsubW9kdWx1cy5ieXRlTGVuZ3RoKCksWT1QKCJzaGExIikudXBkYXRlKE8uYWxsb2MoMCkpLmRpZ2VzdCgpLHE9WS5sZW5ndGg7aWYoMCE9PVVbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIGVlPVUuc2xpY2UoMSxxKzEpLEo9VS5zbGljZShx''@;'; put 'put ''KzEpLG5lPWcoZWUsXyhKLHEpKSxpZT1nKEosXyhuZSxXLXEtMSkpO2lmKGZ1bmN0aW9uIEwoSyxVKXtLPU8uZnJvbShLKSxVPU8uZnJvbShVKTt2YXIgVz0wLFk9Sy5sZW5ndGg7Sy5sZW5ndGghPT1VLmxlbmd0aCYmKFcrKyxZPU1hdGgubWluKEsubGVuZ3RoLFUubGVuZ3RoKSk7Zm9yKHZh''@;'; put 'put ''ciBxPS0xOysrcTxZOylXKz1LW3FdXlVbcV07cmV0dXJuIFd9KFksaWUuc2xpY2UoMCxxKSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBsZT1xOzA9PT1pZVtsZV07KWxlKys7aWYoMSE9PWllW2xlKytdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBl''@;'; put 'put ''cnJvciIpO3JldHVybiBpZS5zbGljZShsZSl9KGVlLG5lKTtpZigxPT09cSlyZXR1cm4gZnVuY3Rpb24gTihLLFUsVyl7Zm9yKHZhciBZPVUuc2xpY2UoMCwyKSxxPTIsZWU9MDswIT09VVtxKytdOylpZihxPj1VLmxlbmd0aCl7ZWUrKzticmVha312YXIgSj1VLnNsaWNlKDIscS0xKTtpZigo''@;'; put 'put ''IjAwMDIiIT09WS50b1N0cmluZygiaGV4IikmJiFXfHwiMDAwMSIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmVykmJmVlKyssSi5sZW5ndGg8OCYmZWUrKyxlZSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gVS5zbGljZShxKX0oMCxuZSxZKTtpZigzPT09cSlyZXR1''@;'; put 'put ''cm4gbmU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDY1NTk6KHVlLFgseSk9Pnt2YXIgST15KDk4MCksXz15KDE3OTgpLGc9eSgzNDgyKSxCPXkoOTE5OSksdz15KDc4NTkpLFA9eSgyMTQ0KSxGPXkoNDgxOCksTz15KDM2NjMpLHo9eSg5NTA5KS5CdWZmZXI7dWUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihXLFkscSl7dmFyIGVlO2VlPVcucGFkZGluZz9XLnBhZGRpbmc6cT8xOjQ7dmFyIG5lLEo9SShXKTtpZig0PT09ZWUpbmU9ZnVuY3Rpb24gTihVLFcpe3ZhciBZPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCkscT1XLmxlbmd0aCxlZT1nKCJzaGExIikudXBkYXRlKHouYWxs''@;'; put 'put ''b2MoMCkpLmRpZ2VzdCgpLEo9ZWUubGVuZ3RoLG5lPTIqSjtpZihxPlktbmUtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgaWU9ei5hbGxvYyhZLXEtbmUtMiksbGU9WS1KLTEsbWU9XyhKKSxfZT13KHouY29uY2F0KFtlZSxpZSx6LmFsbG9jKDEsMSksV10sbGUp''@;'; put 'put ''LEIobWUsbGUpKSxUZT13KG1lLEIoX2UsSikpO3JldHVybiBuZXcgUCh6LmNvbmNhdChbei5hbGxvYygxKSxUZSxfZV0sWSkpfShKLFkpO2Vsc2UgaWYoMT09PWVlKW5lPWZ1bmN0aW9uIEwoVSxXLFkpe3ZhciBKLHE9Vy5sZW5ndGgsZWU9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihxPmVl''@;'; put 'put ''LTExKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3JldHVybiBKPVk/ei5hbGxvYyhlZS1xLTMsMjU1KTpmdW5jdGlvbiBLKFUpe2Zvcih2YXIgSixXPXouYWxsb2NVbnNhZmUoVSksWT0wLHE9XygyKlUpLGVlPTA7WTxVOyllZT09PXEubGVuZ3RoJiYocT1fKDIqVSksZWU9''@;'; put 'put ''MCksKEo9cVtlZSsrXSkmJihXW1krK109Sik7cmV0dXJuIFd9KGVlLXEtMyksbmV3IFAoei5jb25jYXQoW3ouZnJvbShbMCxZPzE6Ml0pLEosei5hbGxvYygxKSxXXSxlZSkpfShKLFkscSk7ZWxzZXtpZigzIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigobmU9''@;'; put 'put ''bmV3IFAoWSkpLmNtcChKLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiBxP08obmUsSik6RihuZSxKKX19LDQ4MTg6KHVlLFgseSk9Pnt2YXIgST15KDIxNDQpLF89eSg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biBnKEIsdyl7cmV0dXJuIF8uZnJvbShCLnRvUmVkKEkubW9udCh3Lm1vZHVsdXMpKS5yZWRQb3cobmV3IEkody5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sNzg1OTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtmb3IodmFyIF89eS5sZW5ndGgsZz0tMTsr''@;'; put 'put ''K2c8XzspeVtnXV49SVtnXTtyZXR1cm4geX19LDM2ODk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eS5yKFgpLHkuZChYLHtkZWNvZGU6KCk9PlNlLGRlZmF1bHQ6KCk9PngsZW5jb2RlOigpPT56ZSx0b0FTQ0lJOigpPT5wLHRvVW5pY29kZTooKT0+Vix1Y3MyZGVjb2RlOigpPT5pZSx1Y3My''@;'; put 'put ''ZW5jb2RlOigpPT5sZX0pO2NvbnN0IEk9MjE0NzQ4MzY0NyxfPTM2LE49L154bi0tLyxMPS9bXlwwLVx4N0ZdLyxLPS9bXHgyRVx1MzAwMlx1RkYwRVx1RkY2MV0vZyxVPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFz''@;'; put 'put ''aWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxZPU1hdGguZmxvb3IscT1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIGVlKEMpe3Rocm93IG5ldyBSYW5nZUVycm9yKFVbQ10pfWZ1''@;'; put 'put ''bmN0aW9uIG5lKEMsVCl7Y29uc3QgSD1DLnNwbGl0KCJAIik7bGV0IGo9IiI7SC5sZW5ndGg+MSYmKGo9SFswXSsiQCIsQz1IWzFdKTtjb25zdCBtPWZ1bmN0aW9uIEooQyxUKXtjb25zdCBIPVtdO2xldCBqPUMubGVuZ3RoO2Zvcig7ai0tOylIW2pdPVQoQ1tqXSk7cmV0dXJuIEh9KChDPUMu''@;'; put 'put ''cmVwbGFjZShLLCIuIikpLnNwbGl0KCIuIiksVCkuam9pbigiLiIpO3JldHVybiBqK219ZnVuY3Rpb24gaWUoQyl7Y29uc3QgVD1bXTtsZXQgSD0wO2NvbnN0IGo9Qy5sZW5ndGg7Zm9yKDtIPGo7KXtjb25zdCBFPUMuY2hhckNvZGVBdChIKyspO2lmKEU+PTU1Mjk2JiZFPD01NjMxOSYmSDxq''@;'; put 'put ''KXtjb25zdCBtPUMuY2hhckNvZGVBdChIKyspOzU2MzIwPT0oNjQ1MTImbSk/VC5wdXNoKCgoMTAyMyZFKTw8MTApKygxMDIzJm0pKzY1NTM2KTooVC5wdXNoKEUpLEgtLSl9ZWxzZSBULnB1c2goRSl9cmV0dXJuIFR9Y29uc3QgbGU9Qz0+U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uQyksbWU9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIEM+PTQ4JiZDPDU4P0MtNDgrMjY6Qz49NjUmJkM8OTE/Qy02NTpDPj05NyYmQzwxMjM/Qy05NzpffSxfZT1mdW5jdGlvbihDLFQpe3JldHVybiBDKzIyKzc1KihDPDI2KS0oKDAhPVQpPDw1KX0sVGU9ZnVuY3Rpb24oQyxULEgpe2xldCBqPTA7Zm9yKEM9SD9Z''@;'; put 'put ''KEMvNzAwKTpDPj4xLEMrPVkoQy9UKTtDPjQ1NTtqKz1fKUM9WShDLzM1KTtyZXR1cm4gWShqKzM2KkMvKEMrMzgpKX0sU2U9ZnVuY3Rpb24oQyl7Y29uc3QgVD1bXSxIPUMubGVuZ3RoO2xldCBqPTAsRT0xMjgsbT03MixBPUMubGFzdEluZGV4T2YoIi0iKTtBPDAmJihBPTApO2ZvcihsZXQg''@;'; put 'put ''YWU9MDthZTxBOysrYWUpQy5jaGFyQ29kZUF0KGFlKT49MTI4JiZlZSgibm90LWJhc2ljIiksVC5wdXNoKEMuY2hhckNvZGVBdChhZSkpO2ZvcihsZXQgYWU9QT4wP0ErMTowO2FlPEg7KXtjb25zdCB0ZT1qO2ZvcihsZXQgd2U9MSxVZT1fOztVZSs9Xyl7YWU+PUgmJmVlKCJpbnZhbGlkLWlu''@;'; put 'put ''cHV0Iik7Y29uc3QgSmU9bWUoQy5jaGFyQ29kZUF0KGFlKyspKTtKZT49XyYmZWUoImludmFsaWQtaW5wdXQiKSxKZT5ZKChJLWopL3dlKSYmZWUoIm92ZXJmbG93Iiksais9SmUqd2U7Y29uc3Qgb3Q9VWU8PW0/MTpVZT49bSsyNj8yNjpVZS1tO2lmKEplPG90KWJyZWFrO2NvbnN0IE1lPV8t''@;'; put 'put ''b3Q7d2U+WShJL01lKSYmZWUoIm92ZXJmbG93Iiksd2UqPU1lfWNvbnN0IHNlPVQubGVuZ3RoKzE7bT1UZShqLXRlLHNlLDA9PXRlKSxZKGovc2UpPkktRSYmZWUoIm92ZXJmbG93IiksRSs9WShqL3NlKSxqJT1zZSxULnNwbGljZShqKyssMCxFKX1yZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9p''@;'; put 'put ''bnQoLi4uVCl9LHplPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sSD0oQz1pZShDKSkubGVuZ3RoO2xldCBqPTEyOCxFPTAsbT03Mjtmb3IoY29uc3QgdGUgb2YgQyl0ZTwxMjgmJlQucHVzaChxKHRlKSk7Y29uc3QgQT1ULmxlbmd0aDtsZXQgYWU9QTtmb3IoQSYmVC5wdXNoKCItIik7YWU8SDsp''@;'; put 'put ''e2xldCB0ZT1JO2Zvcihjb25zdCB3ZSBvZiBDKXdlPj1qJiZ3ZTx0ZSYmKHRlPXdlKTtjb25zdCBzZT1hZSsxO3RlLWo+WSgoSS1FKS9zZSkmJmVlKCJvdmVyZmxvdyIpLEUrPSh0ZS1qKSpzZSxqPXRlO2Zvcihjb25zdCB3ZSBvZiBDKWlmKHdlPGomJisrRT5JJiZlZSgib3ZlcmZsb3ciKSx3''@;'; put 'put ''ZT09PWope2xldCBVZT1FO2ZvcihsZXQgSmU9Xzs7SmUrPV8pe2NvbnN0IG90PUplPD1tPzE6SmU+PW0rMjY/MjY6SmUtbTtpZihVZTxvdClicmVhaztjb25zdCBNZT1VZS1vdCx2ZT1fLW90O1QucHVzaChxKF9lKG90K01lJXZlLDApKSksVWU9WShNZS92ZSl9VC5wdXNoKHEoX2UoVWUsMCkp''@;'; put 'put ''KSxtPVRlKEUsc2UsYWU9PT1BKSxFPTAsKythZX0rK0UsKytqfXJldHVybiBULmpvaW4oIiIpfSxWPWZ1bmN0aW9uKEMpe3JldHVybiBuZShDLGZ1bmN0aW9uKFQpe3JldHVybiBOLnRlc3QoVCk/U2UoVC5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpUfSl9LHA9ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IG5lKEMsZnVuY3Rpb24oVCl7cmV0dXJuIEwudGVzdChUKT8ieG4tLSIremUoVCk6VH0pfSx4PXt2ZXJzaW9uOiIyLjMuMSIsdWNzMjp7ZGVjb2RlOmllLGVuY29kZTpsZX0sZGVjb2RlOlNlLGVuY29kZTp6ZSx0b0FTQ0lJOnAsdG9Vbmljb2RlOlZ9fSw3MTI5Oih1ZSxYKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgeT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIF8oUCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoUC5yZXBsYWNlKC9cKy9nLCIgIikpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBnKFApe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29t''@;'; put 'put ''cG9uZW50KFApfWNhdGNoe3JldHVybiBudWxsfX1YLnN0cmluZ2lmeT1mdW5jdGlvbiB3KFAsRil7Rj1GfHwiIjt2YXIgeixOLE89W107Zm9yKE4gaW4ic3RyaW5nIiE9dHlwZW9mIEYmJihGPSI/IiksUClpZih5LmNhbGwoUCxOKSl7aWYoISh6PVBbTl0pJiYobnVsbD09enx8aXNOYU4oeikp''@;'; put 'put ''JiYoej0iIiksTj1nKE4pLHo9Zyh6KSxudWxsPT09Tnx8bnVsbD09PXopY29udGludWU7Ty5wdXNoKE4rIj0iK3opfXJldHVybiBPLmxlbmd0aD9GK08uam9pbigiJiIpOiIifSxYLnBhcnNlPWZ1bmN0aW9uIEIoUCl7Zm9yKHZhciB6LEY9LyhbXj0/IyZdKyk9PyhbXiZdKikvZyxPPXt9O3o9''@;'; put 'put ''Ri5leGVjKFApOyl7dmFyIE49Xyh6WzFdKSxMPV8oelsyXSk7bnVsbD09PU58fG51bGw9PT1MfHxOIGluIE98fChPW05dPUwpfXJldHVybiBPfX0sMTc5ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89NjU1MzYsdz15KDk1MDkpLkJ1ZmZlcixQPXkuZy5jcnlwdG98''@;'; put 'put ''fHkuZy5tc0NyeXB0bzt1ZS5leHBvcnRzPVAmJlAuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uIEYoTyx6KXtpZihPPjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgTj13LmFsbG9jVW5zYWZlKE8pO2lmKE8+MClp''@;'; put 'put ''ZihPPl8pZm9yKHZhciBMPTA7TDxPO0wrPV8pUC5nZXRSYW5kb21WYWx1ZXMoTi5zbGljZShMLEwrXykpO2Vsc2UgUC5nZXRSYW5kb21WYWx1ZXMoTik7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHo/SS5uZXh0VGljayhmdW5jdGlvbigpe3oobnVsbCxOKX0pOk59OmZ1bmN0aW9uIEIoKXt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw3OTYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXkoNDE1NSk7ZnVuY3Rpb24gXygpe3Rocm93IG5ldyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfXZhciBnPXkoOTUwOSksQj15''@;'; put 'put ''KDE3OTgpLHc9Zy5CdWZmZXIsUD1nLmtNYXhMZW5ndGgsRj15LmcuY3J5cHRvfHx5LmcubXNDcnlwdG8sTz1NYXRoLnBvdygyLDMyKS0xO2Z1bmN0aW9uIHooVyxZKXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFchPVcpdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTtpZihXPk98fFc8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKFc+UHx8Vz5ZKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTihXLFkscSl7aWYoIm51bWJlciIhPXR5cGVvZiBXfHxXIT1X''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKFc+T3x8VzwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKFcrWT5xfHxXPlApdGhyb3cgbmV3IFJhbmdlRXJyb3IoImJ1ZmZlciB0b28gc21hbGwiKX1mdW5jdGlv''@;'; put 'put ''biBLKFcsWSxxLGVlKXtpZihJLmJyb3dzZXIpe3ZhciBuZT1uZXcgVWludDhBcnJheShXLmJ1ZmZlcixZLHEpO3JldHVybiBGLmdldFJhbmRvbVZhbHVlcyhuZSksZWU/dm9pZCBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7ZWUobnVsbCxXKX0pOld9aWYoIWVlKXJldHVybiBCKHEpLmNvcHkoVyxZ''@;'; put 'put ''KSxXO0IocSxmdW5jdGlvbihsZSxtZSl7aWYobGUpcmV0dXJuIGVlKGxlKTttZS5jb3B5KFcsWSksZWUobnVsbCxXKX0pfUYmJkYuZ2V0UmFuZG9tVmFsdWVzfHwhSS5icm93c2VyPyhYLnJhbmRvbUZpbGw9ZnVuY3Rpb24gTChXLFkscSxlZSl7aWYoISh3LmlzQnVmZmVyKFcpfHxXIGluc3Rh''@;'; put 'put ''bmNlb2YgeS5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBZKWVlPVksWT0wLHE9Vy5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcSll''@;'; put 'put ''ZT1xLHE9Vy5sZW5ndGgtWTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiB6KFksVy5sZW5ndGgpLE4ocSxZLFcubGVuZ3RoKSxLKFcsWSxxLGVlKX0sWC5yYW5kb21GaWxs''@;'; put 'put ''U3luYz1mdW5jdGlvbiBVKFcsWSxxKXtpZih0eXBlb2YgWT4idSImJihZPTApLCEody5pc0J1ZmZlcihXKXx8VyBpbnN0YW5jZW9mIHkuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1''@;'; put 'put ''cm4geihZLFcubGVuZ3RoKSx2b2lkIDA9PT1xJiYocT1XLmxlbmd0aC1ZKSxOKHEsWSxXLmxlbmd0aCksSyhXLFkscSl9KTooWC5yYW5kb21GaWxsPV8sWC5yYW5kb21GaWxsU3luYz1fKX0sNDI4MTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT17fTtmdW5jdGlvbiBJKFAsRixPKXtPfHwoTz1F''@;'; put 'put ''cnJvcik7dmFyIE49ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gSyhVLFcsWSl7cmV0dXJuIEwuY2FsbCh0aGlzLGZ1bmN0aW9uIHooTCxLLFUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRj9GOkYoTCxLLFUpfShVLFcsWSkpfHx0aGlzfXJldHVybiBmdW5jdGlvbiBYKFAsRil7UC5wcm90b3R5cGU9''@;'; put 'put ''T2JqZWN0LmNyZWF0ZShGLnByb3RvdHlwZSksUC5wcm90b3R5cGUuY29uc3RydWN0b3I9UCxQLl9fcHJvdG9fXz1GfShLLEwpLEt9KE8pO04ucHJvdG90eXBlLm5hbWU9Ty5uYW1lLE4ucHJvdG90eXBlLmNvZGU9UCx5W1BdPU59ZnVuY3Rpb24gXyhQLEYpe2lmKEFycmF5LmlzQXJyYXkoUCkp''@;'; put 'put ''e3ZhciBPPVAubGVuZ3RoO3JldHVybiBQPVAubWFwKGZ1bmN0aW9uKHope3JldHVybiBTdHJpbmcoeil9KSxPPjI/Im9uZSBvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFAuc2xpY2UoMCxPLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrUFtPLTFdOjI9PT1PPyJvbmUgb2YgIi5jb25jYXQoRiwi''@;'; put 'put ''ICIpLmNvbmNhdChQWzBdLCIgb3IgIikuY29uY2F0KFBbMV0pOiJvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFBbMF0pfXJldHVybiJvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFN0cmluZyhQKSl9SSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihQLEYpe3JldHVybidUaGUg''@;'; put 'put ''dmFsdWUgIicrRisnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrUCsnIid9LFR5cGVFcnJvciksSSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKFAsRixPKXt2YXIgeixOO2lmKCJzdHJpbmciPT10eXBlb2YgRiYmZnVuY3Rpb24gZyhQLEYsTyl7cmV0dXJuIFAuc3Vic3RyKCFP''@;'; put 'put ''fHxPPDA/MDorTyxGLmxlbmd0aCk9PT1GfShGLCJub3QgIik/KHo9Im11c3Qgbm90IGJlIixGPUYucmVwbGFjZSgvXm5vdCAvLCIiKSk6ej0ibXVzdCBiZSIsZnVuY3Rpb24gQihQLEYsTyl7cmV0dXJuKHZvaWQgMD09PU98fE8+UC5sZW5ndGgpJiYoTz1QLmxlbmd0aCksUC5zdWJzdHJpbmco''@;'; put 'put ''Ty1GLmxlbmd0aCxPKT09PUZ9KFAsIiBhcmd1bWVudCIpKU49IlRoZSAiLmNvbmNhdChQLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQoXyhGLCJ0eXBlIikpO2Vsc2V7dmFyIEw9ZnVuY3Rpb24gdyhQLEYsTyl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBPJiYoTz0wKSwhKE8rRi5sZW5ndGg+''@;'; put 'put ''UC5sZW5ndGgpJiYtMSE9PVAuaW5kZXhPZihGLE8pfShQLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO049J1RoZSAiJy5jb25jYXQoUCwnIiAnKS5jb25jYXQoTCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKX1yZXR1cm4gTisiLiBSZWNlaXZlZCB0eXBlICIuY29u''@;'; put 'put ''Y2F0KHR5cGVvZiBPKX0sVHlwZUVycm9yKSxJKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxJKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIlRoZSAiK1ArIiBtZXRob2QgaXMgbm90IGltcGxlbWVu''@;'; put 'put ''dGVkIn0pLEkoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIiksSSgiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1bmN0aW9uKFApe3JldHVybiJDYW5ub3QgY2FsbCAiK1ArIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLEkoIkVSUl9NVUxUSVBM''@;'; put 'put ''RV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLEkoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIiksSSgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxJKCJFUlJfU1RSRUFN''@;'; put 'put ''X05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksSSgiRVJSX1VOS05PV05fRU5DT0RJTkciLGZ1bmN0aW9uKFApe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK1B9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9VTlNISUZUX0FG''@;'; put 'put ''VEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksdWUuZXhwb3J0cy5xPXl9LDY3NTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPU9iamVjdC5rZXlzfHxmdW5jdGlvbihMKXt2YXIgSz1bXTtmb3IodmFyIFUgaW4gTClLLnB1''@;'; put 'put ''c2goVSk7cmV0dXJuIEt9O3VlLmV4cG9ydHM9Tzt2YXIgZz15KDk0ODEpLEI9eSg0MjI5KTt5KDU3MTcpKE8sZyk7Zm9yKHZhciB3PV8oQi5wcm90b3R5cGUpLFA9MDtQPHcubGVuZ3RoO1ArKyl7dmFyIEY9d1tQXTtPLnByb3RvdHlwZVtGXXx8KE8ucHJvdG90eXBlW0ZdPUIucHJvdG90eXBl''@;'; put 'put ''W0ZdKX1mdW5jdGlvbiBPKEwpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyhMKTtnLmNhbGwodGhpcyxMKSxCLmNhbGwodGhpcyxMKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsTCYmKCExPT09TC5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09TC53cml0YWJs''@;'; put 'put ''ZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09TC5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIix6KSkpfWZ1bmN0aW9uIHooKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxJLm5leHRUaWNrKE4sdGhpcyl9ZnVuY3Rpb24gTihMKXtMLmVu''@;'; put 'put ''ZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3Rv''@;'; put 'put ''dHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEspe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1LLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUspfX0pfSwyNzI1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Xzt2YXIgST15KDQ2MDUpO2Z1bmN0aW9uIF8oZyl7aWYoISh0''@;'; put 'put ''aGlzIGluc3RhbmNlb2YgXykpcmV0dXJuIG5ldyBfKGcpO0kuY2FsbCh0aGlzLGcpfXkoNTcxNykoXyxJKSxfLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGcsQix3KXt3KG51bGwsZyl9fSw5NDgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfLEk9eSg0MTU1KTt1ZS5leHBv''@;'; put 'put ''cnRzPXAscC5SZWFkYWJsZVN0YXRlPVYseSg3MTg3KTt2YXIgTCxCPWZ1bmN0aW9uKFJlLEllKXtyZXR1cm4gUmUubGlzdGVuZXJzKEllKS5sZW5ndGh9LHc9eSgyNTAzKSxQPXkoODc2NCkuQnVmZmVyLEY9KHR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlw''@;'; put 'put ''ZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxOPXkoNDYxNik7TD1OJiZOLmRlYnVnbG9nP04uZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgbGUsbWUsX2UsSz15KDczMjcpLFU9eSgxMTk1KSxZPXkoMjQ1NykuZ2V0SGlnaFdhdGVyTWFy''@;'; put 'put ''ayxxPXkoNDI4MSkucSxlZT1xLkVSUl9JTlZBTElEX0FSR19UWVBFLEo9cS5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLG5lPXEuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsaWU9cS5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO3koNTcxNykocCx3KTt2YXIgVGU9VS5l''@;'; put 'put ''cnJvck9yRGVzdHJveSxTZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBWKEZlLFJlLEllKXtfPV98fHkoNjc1MyksImJvb2xlYW4iIT10eXBlb2YgSWUmJihJZT1SZSBpbnN0YW5jZW9mIF8pLHRoaXMub2JqZWN0TW9kZT0hIShGZT1GZXx8''@;'; put 'put ''e30pLm9iamVjdE1vZGUsSWUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUZlLnJlYWRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVkodGhpcyxGZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixJZSksdGhpcy5idWZmZXI9bmV3IEssdGhpcy5sZW5ndGg9''@;'; put 'put ''MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlz''@;'; put 'put ''LnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09RmUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFGZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGlu''@;'; put 'put ''Zz1GZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxGZS5lbmNvZGluZyYmKGxlfHwobGU9eSgyNTUzKS5zKSx0aGlzLmRlY29kZXI9bmV3IGxlKEZlLmVuY29k''@;'; put 'put ''aW5nKSx0aGlzLmVuY29kaW5nPUZlLmVuY29kaW5nKX1mdW5jdGlvbiBwKEZlKXtpZihfPV98fHkoNjc1MyksISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKEZlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBWKEZlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIF8pLHRoaXMucmVhZGFi''@;'; put 'put ''bGU9ITAsRmUmJigiZnVuY3Rpb24iPT10eXBlb2YgRmUucmVhZCYmKHRoaXMuX3JlYWQ9RmUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIEZlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUZlLmRlc3Ryb3kpKSx3LmNhbGwodGhpcyl9ZnVuY3Rpb24gYihGZSxSZSxJZSxWZSxrZSl7TCgicmVh''@;'; put 'put ''ZGFibGVBZGRDaHVuayIsUmUpO3ZhciBfdCxBZT1GZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09UmUpQWUucmVhZGluZz0hMSxmdW5jdGlvbiBFKEZlLFJlKXtpZihMKCJvbkVvZkNodW5rIiksIVJlLmVuZGVkKXtpZihSZS5kZWNvZGVyKXt2YXIgSWU9UmUuZGVjb2Rlci5lbmQoKTtJZSYm''@;'; put 'put ''SWUubGVuZ3RoJiYoUmUuYnVmZmVyLnB1c2goSWUpLFJlLmxlbmd0aCs9UmUub2JqZWN0TW9kZT8xOkllLmxlbmd0aCl9UmUuZW5kZWQ9ITAsUmUuc3luYz9tKEZlKTooUmUubmVlZFJlYWRhYmxlPSExLFJlLmVtaXR0ZWRSZWFkYWJsZXx8KFJlLmVtaXR0ZWRSZWFkYWJsZT0hMCxBKEZlKSkp''@;'; put 'put ''fX0oRmUsQWUpO2Vsc2UgaWYoa2V8fChfdD1mdW5jdGlvbiBDKEZlLFJlKXt2YXIgSWU7cmV0dXJuIWZ1bmN0aW9uIHooRmUpe3JldHVybiBQLmlzQnVmZmVyKEZlKXx8RmUgaW5zdGFuY2VvZiBGfShSZSkmJiJzdHJpbmciIT10eXBlb2YgUmUmJnZvaWQgMCE9PVJlJiYhRmUub2JqZWN0TW9k''@;'; put 'put ''ZSYmKEllPW5ldyBlZSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLFJlKSksSWV9KEFlLFJlKSksX3QpVGUoRmUsX3QpO2Vsc2UgaWYoQWUub2JqZWN0TW9kZXx8UmUmJlJlLmxlbmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgUmUmJiFBZS5vYmplY3RNb2RlJiZP''@;'; put 'put ''YmplY3QuZ2V0UHJvdG90eXBlT2YoUmUpIT09UC5wcm90b3R5cGUmJihSZT1mdW5jdGlvbiBPKEZlKXtyZXR1cm4gUC5mcm9tKEZlKX0oUmUpKSxWZSlBZS5lbmRFbWl0dGVkP1RlKEZlLG5ldyBpZSk6eChGZSxBZSxSZSwhMCk7ZWxzZSBpZihBZS5lbmRlZClUZShGZSxuZXcgSik7ZWxzZXtp''@;'; put 'put ''ZihBZS5kZXN0cm95ZWQpcmV0dXJuITE7QWUucmVhZGluZz0hMSxBZS5kZWNvZGVyJiYhSWU/KFJlPUFlLmRlY29kZXIud3JpdGUoUmUpLEFlLm9iamVjdE1vZGV8fDAhPT1SZS5sZW5ndGg/eChGZSxBZSxSZSwhMSk6YWUoRmUsQWUpKTp4KEZlLEFlLFJlLCExKX1lbHNlIFZlfHwoQWUucmVh''@;'; put 'put ''ZGluZz0hMSxhZShGZSxBZSkpO3JldHVybiFBZS5lbmRlZCYmKEFlLmxlbmd0aDxBZS5oaWdoV2F0ZXJNYXJrfHwwPT09QWUubGVuZ3RoKX1mdW5jdGlvbiB4KEZlLFJlLEllLFZlKXtSZS5mbG93aW5nJiYwPT09UmUubGVuZ3RoJiYhUmUuc3luYz8oUmUuYXdhaXREcmFpbj0wLEZlLmVtaXQo''@;'; put 'put ''ImRhdGEiLEllKSk6KFJlLmxlbmd0aCs9UmUub2JqZWN0TW9kZT8xOkllLmxlbmd0aCxWZT9SZS5idWZmZXIudW5zaGlmdChJZSk6UmUuYnVmZmVyLnB1c2goSWUpLFJlLm5lZWRSZWFkYWJsZSYmbShGZSkpLGFlKEZlLFJlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsImRl''@;'; put 'put ''c3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oUmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''LmRlc3Ryb3llZD1SZSl9fSkscC5wcm90b3R5cGUuZGVzdHJveT1VLmRlc3Ryb3kscC5wcm90b3R5cGUuX3VuZGVzdHJveT1VLnVuZGVzdHJveSxwLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihGZSxSZSl7UmUoRmUpfSxwLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEZlLFJlKXt2YXIg''@;'; put 'put ''VmUsSWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gSWUub2JqZWN0TW9kZT9WZT0hMDoic3RyaW5nIj09dHlwZW9mIEZlJiYoKFJlPVJlfHxJZS5kZWZhdWx0RW5jb2RpbmcpIT09SWUuZW5jb2RpbmcmJihGZT1QLmZyb20oRmUsUmUpLFJlPSIiKSxWZT0hMCksYih0aGlzLEZlLFJlLCEx''@;'; put 'put ''LFZlKX0scC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihGZSl7cmV0dXJuIGIodGhpcyxGZSxudWxsLCEwLCExKX0scC5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30scC5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9''@;'; put 'put ''ZnVuY3Rpb24oRmUpe2xlfHwobGU9eSgyNTUzKS5zKTt2YXIgUmU9bmV3IGxlKEZlKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9UmUsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBJZT10aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLFZlPSIiO251bGwhPT1JZTspVmUrPVJlLndyaXRlKEllLmRhdGEpLEllPUllLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1WZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChWZSksdGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9VmUubGVuZ3RoLHRoaXN9O3ZhciBUPTEwNzM3NDE4MjQ7ZnVuY3Rpb24gaihGZSxSZSl7cmV0dXJuIEZlPD0wfHwwPT09UmUubGVuZ3RoJiZSZS5lbmRlZD8wOlJlLm9iamVjdE1vZGU/MTpGZSE9RmU/UmUuZmxvd2luZyYmUmUubGVuZ3RoP1JlLmJ1''@;'; put 'put ''ZmZlci5oZWFkLmRhdGEubGVuZ3RoOlJlLmxlbmd0aDooRmU+UmUuaGlnaFdhdGVyTWFyayYmKFJlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gSChGZSl7cmV0dXJuIEZlPj1UP0ZlPVQ6KEZlLS0sRmV8PUZlPj4+MSxGZXw9RmU+Pj4yLEZlfD1GZT4+PjQsRmV8PUZlPj4+OCxGZXw9RmU+Pj4x''@;'; put 'put ''NixGZSsrKSxGZX0oRmUpKSxGZTw9UmUubGVuZ3RoP0ZlOlJlLmVuZGVkP1JlLmxlbmd0aDooUmUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBtKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW1pdFJlYWRhYmxlIixSZS5uZWVkUmVhZGFibGUsUmUuZW1pdHRlZFJlYWRh''@;'; put 'put ''YmxlKSxSZS5uZWVkUmVhZGFibGU9ITEsUmUuZW1pdHRlZFJlYWRhYmxlfHwoTCgiZW1pdFJlYWRhYmxlIixSZS5mbG93aW5nKSxSZS5lbWl0dGVkUmVhZGFibGU9ITAsSS5uZXh0VGljayhBLEZlKSl9ZnVuY3Rpb24gQShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO0woImVtaXRSZWFk''@;'; put 'put ''YWJsZV8iLFJlLmRlc3Ryb3llZCxSZS5sZW5ndGgsUmUuZW5kZWQpLCFSZS5kZXN0cm95ZWQmJihSZS5sZW5ndGh8fFJlLmVuZGVkKSYmKEZlLmVtaXQoInJlYWRhYmxlIiksUmUuZW1pdHRlZFJlYWRhYmxlPSExKSxSZS5uZWVkUmVhZGFibGU9IVJlLmZsb3dpbmcmJiFSZS5lbmRlZCYmUmUu''@;'; put 'put ''bGVuZ3RoPD1SZS5oaWdoV2F0ZXJNYXJrLE1lKEZlKX1mdW5jdGlvbiBhZShGZSxSZSl7UmUucmVhZGluZ01vcmV8fChSZS5yZWFkaW5nTW9yZT0hMCxJLm5leHRUaWNrKHRlLEZlLFJlKSl9ZnVuY3Rpb24gdGUoRmUsUmUpe2Zvcig7IVJlLnJlYWRpbmcmJiFSZS5lbmRlZCYmKFJlLmxlbmd0''@;'; put 'put ''aDxSZS5oaWdoV2F0ZXJNYXJrfHxSZS5mbG93aW5nJiYwPT09UmUubGVuZ3RoKTspe3ZhciBJZT1SZS5sZW5ndGg7aWYoTCgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxGZS5yZWFkKDApLEllPT09UmUubGVuZ3RoKWJyZWFrfVJlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHdlKEZlKXt2YXIg''@;'; put 'put ''UmU9RmUuX3JlYWRhYmxlU3RhdGU7UmUucmVhZGFibGVMaXN0ZW5pbmc9RmUubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLFJlLnJlc3VtZVNjaGVkdWxlZCYmIVJlLnBhdXNlZD9SZS5mbG93aW5nPSEwOkZlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZGZS5yZXN1bWUoKX1mdW5jdGlv''@;'; put 'put ''biBVZShGZSl7TCgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksRmUucmVhZCgwKX1mdW5jdGlvbiBvdChGZSxSZSl7TCgicmVzdW1lIixSZS5yZWFkaW5nKSxSZS5yZWFkaW5nfHxGZS5yZWFkKDApLFJlLnJlc3VtZVNjaGVkdWxlZD0hMSxGZS5lbWl0KCJyZXN1bWUiKSxNZShGZSksUmUu''@;'; put 'put ''Zmxvd2luZyYmIVJlLnJlYWRpbmcmJkZlLnJlYWQoMCl9ZnVuY3Rpb24gTWUoRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtmb3IoTCgiZmxvdyIsUmUuZmxvd2luZyk7UmUuZmxvd2luZyYmbnVsbCE9PUZlLnJlYWQoKTspO31mdW5jdGlvbiB2ZShGZSxSZSl7cmV0dXJuIDA9PT1SZS5s''@;'; put 'put ''ZW5ndGg/bnVsbDooUmUub2JqZWN0TW9kZT9JZT1SZS5idWZmZXIuc2hpZnQoKTohRmV8fEZlPj1SZS5sZW5ndGg/KEllPVJlLmRlY29kZXI/UmUuYnVmZmVyLmpvaW4oIiIpOjE9PT1SZS5idWZmZXIubGVuZ3RoP1JlLmJ1ZmZlci5maXJzdCgpOlJlLmJ1ZmZlci5jb25jYXQoUmUubGVuZ3Ro''@;'; put 'put ''KSxSZS5idWZmZXIuY2xlYXIoKSk6SWU9UmUuYnVmZmVyLmNvbnN1bWUoRmUsUmUuZGVjb2RlciksSWUpO3ZhciBJZX1mdW5jdGlvbiBYZShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO0woImVuZFJlYWRhYmxlIixSZS5lbmRFbWl0dGVkKSxSZS5lbmRFbWl0dGVkfHwoUmUuZW5kZWQ9''@;'; put 'put ''ITAsSS5uZXh0VGljayhqZSxSZSxGZSkpfWZ1bmN0aW9uIGplKEZlLFJlKXtpZihMKCJlbmRSZWFkYWJsZU5UIixGZS5lbmRFbWl0dGVkLEZlLmxlbmd0aCksIUZlLmVuZEVtaXR0ZWQmJjA9PT1GZS5sZW5ndGgmJihGZS5lbmRFbWl0dGVkPSEwLFJlLnJlYWRhYmxlPSExLFJlLmVtaXQoImVu''@;'; put 'put ''ZCIpLEZlLmF1dG9EZXN0cm95KSl7dmFyIEllPVJlLl93cml0YWJsZVN0YXRlOyghSWV8fEllLmF1dG9EZXN0cm95JiZJZS5maW5pc2hlZCkmJlJlLmRlc3Ryb3koKX19ZnVuY3Rpb24gRGUoRmUsUmUpe2Zvcih2YXIgSWU9MCxWZT1GZS5sZW5ndGg7SWU8VmU7SWUrKylpZihGZVtJZV09PT1S''@;'; put 'put ''ZSlyZXR1cm4gSWU7cmV0dXJuLTF9cC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihGZSl7TCgicmVhZCIsRmUpLEZlPXBhcnNlSW50KEZlLDEwKTt2YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT1GZTtpZigwIT09RmUmJihSZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1GZSYmUmUubmVl''@;'; put 'put ''ZFJlYWRhYmxlJiYoKDAhPT1SZS5oaWdoV2F0ZXJNYXJrP1JlLmxlbmd0aD49UmUuaGlnaFdhdGVyTWFyazpSZS5sZW5ndGg+MCl8fFJlLmVuZGVkKSlyZXR1cm4gTCgicmVhZDogZW1pdFJlYWRhYmxlIixSZS5sZW5ndGgsUmUuZW5kZWQpLDA9PT1SZS5sZW5ndGgmJlJlLmVuZGVkP1hlKHRo''@;'; put 'put ''aXMpOm0odGhpcyksbnVsbDtpZigwPT09KEZlPWooRmUsUmUpKSYmUmUuZW5kZWQpcmV0dXJuIDA9PT1SZS5sZW5ndGgmJlhlKHRoaXMpLG51bGw7dmFyIGtlLFZlPVJlLm5lZWRSZWFkYWJsZTtyZXR1cm4gTCgibmVlZCByZWFkYWJsZSIsVmUpLCgwPT09UmUubGVuZ3RofHxSZS5sZW5ndGgt''@;'; put 'put ''RmU8UmUuaGlnaFdhdGVyTWFyaykmJkwoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixWZT0hMCksUmUuZW5kZWR8fFJlLnJlYWRpbmc/TCgicmVhZGluZyBvciBlbmRlZCIsVmU9ITEpOlZlJiYoTCgiZG8gcmVhZCIpLFJlLnJlYWRpbmc9ITAsUmUuc3luYz0hMCwwPT09UmUubGVuZ3Ro''@;'; put 'put ''JiYoUmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKFJlLmhpZ2hXYXRlck1hcmspLFJlLnN5bmM9ITEsUmUucmVhZGluZ3x8KEZlPWooSWUsUmUpKSksbnVsbD09PShrZT1GZT4wP3ZlKEZlLFJlKTpudWxsKT8oUmUubmVlZFJlYWRhYmxlPVJlLmxlbmd0aDw9UmUuaGlnaFdhdGVyTWFy''@;'; put 'put ''ayxGZT0wKTooUmUubGVuZ3RoLT1GZSxSZS5hd2FpdERyYWluPTApLDA9PT1SZS5sZW5ndGgmJihSZS5lbmRlZHx8KFJlLm5lZWRSZWFkYWJsZT0hMCksSWUhPT1GZSYmUmUuZW5kZWQmJlhlKHRoaXMpKSxudWxsIT09a2UmJnRoaXMuZW1pdCgiZGF0YSIsa2UpLGtlfSxwLnByb3RvdHlwZS5f''@;'; put 'put ''cmVhZD1mdW5jdGlvbihGZSl7VGUodGhpcyxuZXcgbmUoIl9yZWFkKCkiKSl9LHAucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oRmUsUmUpe3ZhciBJZT10aGlzLFZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKFZlLnBpcGVzQ291bnQpe2Nhc2UgMDpWZS5waXBlcz1GZTticmVhaztjYXNl''@;'; put 'put ''IDE6VmUucGlwZXM9W1ZlLnBpcGVzLEZlXTticmVhaztkZWZhdWx0OlZlLnBpcGVzLnB1c2goRmUpfVZlLnBpcGVzQ291bnQrPTEsTCgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixWZS5waXBlc0NvdW50LFJlKTt2YXIgQWU9UmUmJiExPT09UmUuZW5kfHxGZT09PUkuc3Rkb3V0fHxGZT09PUku''@;'; put 'put ''c3RkZXJyP3R0Om50O2Z1bmN0aW9uIG50KCl7TCgib25lbmQiKSxGZS5lbmQoKX1WZS5lbmRFbWl0dGVkP0kubmV4dFRpY2soQWUpOkllLm9uY2UoImVuZCIsQWUpLEZlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIF90KEhlLHV0KXtMKCJvbnVucGlwZSIpLEhlPT09SWUmJnV0JiYhMT09PXV0Lmhh''@;'; put 'put ''c1VucGlwZWQmJih1dC5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIHl0KCl7TCgiY2xlYW51cCIpLEZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaXQpLEZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLCRlKSxGZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFFlKSxGZS5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZXJyb3IiLER0KSxGZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixfdCksSWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsbnQpLEllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHR0KSxJZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsTXQpLHVuPSEwLFZlLmF3YWl0RHJhaW4mJighRmUuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGV8fEZlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJlFlKCl9KCkpfSk7dmFyIFFlPWZ1bmN0aW9uIHNlKEZlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgSWU9RmUuX3JlYWRhYmxlU3RhdGU7TCgicGlwZU9uRHJhaW4iLEllLmF3YWl0RHJhaW4pLEllLmF3YWl0RHJhaW4mJkllLmF3YWl0''@;'; put 'put ''RHJhaW4tLSwwPT09SWUuYXdhaXREcmFpbiYmQihGZSwiZGF0YSIpJiYoSWUuZmxvd2luZz0hMCxNZShGZSkpfX0oSWUpO0ZlLm9uKCJkcmFpbiIsUWUpO3ZhciB1bj0hMTtmdW5jdGlvbiBNdChIZSl7TCgib25kYXRhIik7dmFyIHV0PUZlLndyaXRlKEhlKTtMKCJkZXN0LndyaXRlIix1dCks''@;'; put 'put ''ITE9PT11dCYmKCgxPT09VmUucGlwZXNDb3VudCYmVmUucGlwZXM9PT1GZXx8VmUucGlwZXNDb3VudD4xJiYtMSE9PURlKFZlLnBpcGVzLEZlKSkmJiF1biYmKEwoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsVmUuYXdhaXREcmFpbiksVmUuYXdhaXREcmFpbisrKSxJZS5wYXVzZSgp''@;'; put 'put ''KX1mdW5jdGlvbiBEdChIZSl7TCgib25lcnJvciIsSGUpLHR0KCksRmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixEdCksMD09PUIoRmUsImVycm9yIikmJlRlKEZlLEhlKX1mdW5jdGlvbiBpdCgpe0ZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLCRlKSx0dCgpfWZ1bmN0aW9uICRlKCl7TCgi''@;'; put 'put ''b25maW5pc2giKSxGZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGl0KSx0dCgpfWZ1bmN0aW9uIHR0KCl7TCgidW5waXBlIiksSWUudW5waXBlKEZlKX1yZXR1cm4gSWUub24oImRhdGEiLE10KSxmdW5jdGlvbiB6ZShGZSxSZSxJZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnByZXBlbmRM''@;'; put 'put ''aXN0ZW5lcilyZXR1cm4gRmUucHJlcGVuZExpc3RlbmVyKFJlLEllKTtGZS5fZXZlbnRzJiZGZS5fZXZlbnRzW1JlXT9BcnJheS5pc0FycmF5KEZlLl9ldmVudHNbUmVdKT9GZS5fZXZlbnRzW1JlXS51bnNoaWZ0KEllKTpGZS5fZXZlbnRzW1JlXT1bSWUsRmUuX2V2ZW50c1tSZV1dOkZlLm9u''@;'; put 'put ''KFJlLEllKX0oRmUsImVycm9yIixEdCksRmUub25jZSgiY2xvc2UiLGl0KSxGZS5vbmNlKCJmaW5pc2giLCRlKSxGZS5lbWl0KCJwaXBlIixJZSksVmUuZmxvd2luZ3x8KEwoInBpcGUgcmVzdW1lIiksSWUucmVzdW1lKCkpLEZlfSxwLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oRmUpe3Zh''@;'; put 'put ''ciBSZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPXtoYXNVbnBpcGVkOiExfTtpZigwPT09UmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09UmUucGlwZXNDb3VudClyZXR1cm4gRmUmJkZlIT09UmUucGlwZXN8fChGZXx8KEZlPVJlLnBpcGVzKSxSZS5waXBlcz1udWxsLFJlLnBpcGVz''@;'; put 'put ''Q291bnQ9MCxSZS5mbG93aW5nPSExLEZlJiZGZS5lbWl0KCJ1bnBpcGUiLHRoaXMsSWUpKSx0aGlzO2lmKCFGZSl7dmFyIFZlPVJlLnBpcGVzLGtlPVJlLnBpcGVzQ291bnQ7UmUucGlwZXM9bnVsbCxSZS5waXBlc0NvdW50PTAsUmUuZmxvd2luZz0hMTtmb3IodmFyIEFlPTA7QWU8a2U7QWUr''@;'; put 'put ''KylWZVtBZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIF90PURlKFJlLnBpcGVzLEZlKTtyZXR1cm4tMT09PV90fHwoUmUucGlwZXMuc3BsaWNlKF90LDEpLFJlLnBpcGVzQ291bnQtPTEsMT09PVJlLnBpcGVzQ291bnQmJihSZS5waXBlcz1S''@;'; put 'put ''ZS5waXBlc1swXSksRmUuZW1pdCgidW5waXBlIix0aGlzLEllKSksdGhpc30scC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9cC5wcm90b3R5cGUub249ZnVuY3Rpb24oRmUsUmUpe3ZhciBJZT13LnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsRmUsUmUpLFZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0''@;'; put 'put ''dXJuImRhdGEiPT09RmU/KFZlLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09VmUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PUZlJiYhVmUuZW5kRW1pdHRlZCYmIVZlLnJlYWRhYmxlTGlzdGVuaW5nJiYoVmUucmVh''@;'; put 'put ''ZGFibGVMaXN0ZW5pbmc9VmUubmVlZFJlYWRhYmxlPSEwLFZlLmZsb3dpbmc9ITEsVmUuZW1pdHRlZFJlYWRhYmxlPSExLEwoIm9uIHJlYWRhYmxlIixWZS5sZW5ndGgsVmUucmVhZGluZyksVmUubGVuZ3RoP20odGhpcyk6VmUucmVhZGluZ3x8SS5uZXh0VGljayhVZSx0aGlzKSksSWV9LHAu''@;'; put 'put ''cHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKEZlLFJlKXt2YXIgSWU9dy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLEZlLFJlKTtyZXR1cm4icmVhZGFibGUiPT09RmUmJkkubmV4dFRpY2sod2UsdGhpcyksSWV9LHAucHJvdG90eXBlLnJlbW92ZUFsbExpc3Rl''@;'; put 'put ''bmVycz1mdW5jdGlvbihGZSl7dmFyIFJlPXcucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1GZXx8dm9pZCAwPT09RmUpJiZJLm5leHRUaWNrKHdlLHRoaXMpLFJlfSxwLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgRmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gRmUuZmxvd2luZ3x8KEwoInJlc3VtZSIpLEZlLmZsb3dpbmc9IUZlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIEplKEZlLFJlKXtSZS5yZXN1bWVTY2hlZHVsZWR8fChSZS5yZXN1bWVTY2hlZHVsZWQ9ITAsSS5uZXh0''@;'; put 'put ''VGljayhvdCxGZSxSZSkpfSh0aGlzLEZlKSksRmUucGF1c2VkPSExLHRoaXN9LHAucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEwoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxv''@;'; put 'put ''d2luZyYmKEwoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30scC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihGZSl7dmFyIFJlPXRoaXMsSWU9dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZSxWZT0hMTtmb3IodmFyIGtlIGluIEZlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoTCgid3JhcHBlZCBlbmQiKSxJZS5kZWNvZGVyJiYhSWUuZW5kZWQpe3ZhciBfdD1JZS5kZWNvZGVyLmVuZCgpO190JiZfdC5sZW5ndGgmJlJlLnB1c2goX3QpfVJlLnB1c2gobnVsbCl9KSxGZS5vbigi''@;'; put 'put ''ZGF0YSIsZnVuY3Rpb24oX3Qpe0woIndyYXBwZWQgZGF0YSIpLEllLmRlY29kZXImJihfdD1JZS5kZWNvZGVyLndyaXRlKF90KSksSWUub2JqZWN0TW9kZSYmbnVsbD09X3R8fCEoSWUub2JqZWN0TW9kZXx8X3QmJl90Lmxlbmd0aCl8fFJlLnB1c2goX3QpfHwoVmU9ITAsRmUucGF1c2UoKSl9''@;'; put 'put ''KSxGZSl2b2lkIDA9PT10aGlzW2tlXSYmImZ1bmN0aW9uIj09dHlwZW9mIEZlW2tlXSYmKHRoaXNba2VdPWZ1bmN0aW9uKG50KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRmVbbnRdLmFwcGx5KEZlLGFyZ3VtZW50cyl9fShrZSkpO2Zvcih2YXIgQWU9MDtBZTxTZS5sZW5ndGg7QWUrKylG''@;'; put 'put ''ZS5vbihTZVtBZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxTZVtBZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihfdCl7TCgid3JhcHBlZCBfcmVhZCIsX3QpLFZlJiYoVmU9ITEsRmUucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocC5wcm90b3R5cGVb''@;'; put 'put ''U3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW1lJiYobWU9eSg1ODUwKSksbWUodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihSZSl7dGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1SZSl9fSkscC5fZnJvbUxpc3Q9dmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihwLmZyb209ZnVuY3Rpb24oRmUsUmUpe3JldHVybiB2b2lkIDA9PT1fZSYmKF9lPXkoNTE2NykpLF9lKHAsRmUsUmUpfSl9LDQ2MDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1PO3ZhciBJPXkoNDI4''@;'; put 'put ''MSkucSxfPUkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZz1JLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxCPUkuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx3PUkuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLFA9eSg2NzUzKTtmdW5jdGlvbiBGKEwsSyl7dmFyIFU9''@;'; put 'put ''dGhpcy5fdHJhbnNmb3JtU3RhdGU7VS50cmFuc2Zvcm1pbmc9ITE7dmFyIFc9VS53cml0ZWNiO2lmKG51bGw9PT1XKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgZyk7VS53cml0ZWNodW5rPW51bGwsVS53cml0ZWNiPW51bGwsbnVsbCE9SyYmdGhpcy5wdXNoKEspLFcoTCk7dmFyIFk9''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZTtZLnJlYWRpbmc9ITEsKFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gTyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oTCk7UC5jYWxs''@;'; put 'put ''KHRoaXMsTCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOkYuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVk''@;'; put 'put ''UmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEwmJigiZnVuY3Rpb24iPT10eXBlb2YgTC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09TC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBMLmZsdXNoJiYodGhpcy5fZmx1c2g9TC5mbHVzaCkpLHRoaXMub24o''@;'; put 'put ''InByZWZpbmlzaCIseil9ZnVuY3Rpb24geigpe3ZhciBMPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9OKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihLLFUpe04oTCxLLFUpfSl9ZnVuY3Rpb24g''@;'; put 'put ''TihMLEssVSl7aWYoSylyZXR1cm4gTC5lbWl0KCJlcnJvciIsSyk7aWYobnVsbCE9VSYmTC5wdXNoKFUpLEwuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB3O2lmKEwuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgQjtyZXR1cm4gTC5wdXNoKG51bGwpfXko''@;'; put 'put ''NTcxNykoTyxQKSxPLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsUC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsTCxLKX0sTy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihMLEssVSl7VShuZXcg''@;'; put 'put ''XygiX3RyYW5zZm9ybSgpIikpfSxPLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKFcud3JpdGVjYj1VLFcud3JpdGVjaHVuaz1MLFcud3JpdGVlbmNvZGluZz1LLCFXLnRyYW5zZm9ybWluZyl7dmFyIFk9dGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZTsoVy5uZWVkVHJhbnNmb3JtfHxZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZLmhpZ2hXYXRlck1hcmspfX0sTy5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PUsu''@;'; put 'put ''d3JpdGVjaHVua3x8Sy50cmFuc2Zvcm1pbmc/Sy5uZWVkVHJhbnNmb3JtPSEwOihLLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oSy53cml0ZWNodW5rLEsud3JpdGVlbmNvZGluZyxLLmFmdGVyVHJhbnNmb3JtKSl9LE8ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEwsSyl7''@;'; put 'put ''UC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEwsZnVuY3Rpb24oVSl7SyhVKX0pfX0sNDIyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQixJPXkoNDE1NSk7ZnVuY3Rpb24gZyhNZSl7dmFyIHZlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmlu''@;'; put 'put ''aXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIG90KE1lLHZlLFhlKXt2YXIgamU9TWUuZW50cnk7Zm9yKE1lLmVudHJ5PW51bGw7amU7KXt2YXIgRGU9amUuY2FsbGJhY2s7dmUucGVuZGluZ2NiLS0sRGUoWGUpLGplPWplLm5leHR9dmUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9TWV9KHZlLE1l''@;'; put 'put ''KX19dWUuZXhwb3J0cz1WLFYuV3JpdGFibGVTdGF0ZT1TZTt2YXIgemUsdz17ZGVwcmVjYXRlOnkoNDkyNyl9LFA9eSgyNTAzKSxGPXkoODc2NCkuQnVmZmVyLE89KHR5cGVvZiB5Lmc8InUiP3kuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVp''@;'; put 'put ''bnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxMPXkoMTE5NSksVT15KDI0NTcpLmdldEhpZ2hXYXRlck1hcmssVz15KDQyODEpLnEsWT1XLkVSUl9JTlZBTElEX0FSR19UWVBFLHE9Vy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxlZT1XLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxKPVcuRVJSX1NU''@;'; put 'put ''UkVBTV9DQU5OT1RfUElQRSxuZT1XLkVSUl9TVFJFQU1fREVTVFJPWUVELGllPVcuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxsZT1XLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELG1lPVcuRVJSX1VOS05PV05fRU5DT0RJTkcsX2U9TC5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBUZSgpe31m''@;'; put 'put ''dW5jdGlvbiBTZShNZSx2ZSxYZSl7Qj1CfHx5KDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIFhlJiYoWGU9dmUgaW5zdGFuY2VvZiBCKSx0aGlzLm9iamVjdE1vZGU9ISEoTWU9TWV8fHt9KS5vYmplY3RNb2RlLFhlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFNZS53cml0''@;'; put 'put ''YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1VKHRoaXMsTWUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsWGUpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVz''@;'; put 'put ''dHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09TWUuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9TWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5i''@;'; put 'put ''dWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihEZSl7IWZ1bmN0aW9uIEUoTWUsdmUpe3ZhciBYZT1NZS5fd3JpdGFibGVTdGF0ZSxqZT1YZS5zeW5jLERlPVhlLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIERlKXRocm93IG5ldyBlZTtpZihmdW5jdGlvbiBq''@;'; put 'put ''KE1lKXtNZS53cml0aW5nPSExLE1lLndyaXRlY2I9bnVsbCxNZS5sZW5ndGgtPU1lLndyaXRlbGVuLE1lLndyaXRlbGVuPTB9KFhlKSx2ZSkhZnVuY3Rpb24gSChNZSx2ZSxYZSxqZSxEZSl7LS12ZS5wZW5kaW5nY2IsWGU/KEkubmV4dFRpY2soRGUsamUpLEkubmV4dFRpY2soVWUsTWUsdmUp''@;'; put 'put ''LE1lLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZShNZSxqZSkpOihEZShqZSksTWUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLF9lKE1lLGplKSxVZShNZSx2ZSkpfShNZSxYZSxqZSx2ZSxEZSk7ZWxzZXt2YXIgRmU9dGUoWGUpfHxNZS5kZXN0cm95ZWQ7IUZlJiYh''@;'; put 'put ''WGUuY29ya2VkJiYhWGUuYnVmZmVyUHJvY2Vzc2luZyYmWGUuYnVmZmVyZWRSZXF1ZXN0JiZhZShNZSxYZSksamU/SS5uZXh0VGljayhtLE1lLFhlLEZlLERlKTptKE1lLFhlLEZlLERlKX19KHZlLERlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09TWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFNZS5hdXRvRGVzdHJv''@;'; put 'put ''eSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGcodGhpcyl9ZnVuY3Rpb24gVihNZSl7dmFyIHZlPXRoaXMgaW5zdGFuY2VvZihCPUJ8fHkoNjc1MykpO2lmKCF2ZSYmIXplLmNhbGwoVix0aGlzKSlyZXR1cm4gbmV3IFYoTWUpO3RoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGU9bmV3IFNlKE1lLHRoaXMsdmUpLHRoaXMud3JpdGFibGU9ITAsTWUmJigiZnVuY3Rpb24iPT10eXBlb2YgTWUud3JpdGUmJih0aGlzLl93cml0ZT1NZS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIE1lLndyaXRldiYmKHRoaXMuX3dyaXRldj1NZS53cml0ZXYpLCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBNZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1NZS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgTWUuZmluYWwmJih0aGlzLl9maW5hbD1NZS5maW5hbCkpLFAuY2FsbCh0aGlzKX1mdW5jdGlvbiBUKE1lLHZlLFhlLGplLERlLEZlLFJlKXt2ZS53cml0ZWxl''@;'; put 'put ''bj1qZSx2ZS53cml0ZWNiPVJlLHZlLndyaXRpbmc9ITAsdmUuc3luYz0hMCx2ZS5kZXN0cm95ZWQ/dmUub253cml0ZShuZXcgbmUoIndyaXRlIikpOlhlP01lLl93cml0ZXYoRGUsdmUub253cml0ZSk6TWUuX3dyaXRlKERlLEZlLHZlLm9ud3JpdGUpLHZlLnN5bmM9ITF9ZnVuY3Rpb24gbShN''@;'; put 'put ''ZSx2ZSxYZSxqZSl7WGV8fGZ1bmN0aW9uIEEoTWUsdmUpezA9PT12ZS5sZW5ndGgmJnZlLm5lZWREcmFpbiYmKHZlLm5lZWREcmFpbj0hMSxNZS5lbWl0KCJkcmFpbiIpKX0oTWUsdmUpLHZlLnBlbmRpbmdjYi0tLGplKCksVWUoTWUsdmUpfWZ1bmN0aW9uIGFlKE1lLHZlKXt2ZS5idWZmZXJQ''@;'; put 'put ''cm9jZXNzaW5nPSEwO3ZhciBYZT12ZS5idWZmZXJlZFJlcXVlc3Q7aWYoTWUuX3dyaXRldiYmWGUmJlhlLm5leHQpe3ZhciBEZT1uZXcgQXJyYXkodmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLEZlPXZlLmNvcmtlZFJlcXVlc3RzRnJlZTtGZS5lbnRyeT1YZTtmb3IodmFyIFJlPTAsSWU9ITA7''@;'; put 'put ''WGU7KURlW1JlXT1YZSxYZS5pc0J1Znx8KEllPSExKSxYZT1YZS5uZXh0LFJlKz0xO0RlLmFsbEJ1ZmZlcnM9SWUsVChNZSx2ZSwhMCx2ZS5sZW5ndGgsRGUsIiIsRmUuZmluaXNoKSx2ZS5wZW5kaW5nY2IrKyx2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsRmUubmV4dD8odmUuY29ya2Vk''@;'; put 'put ''UmVxdWVzdHNGcmVlPUZlLm5leHQsRmUubmV4dD1udWxsKTp2ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGcodmUpLHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO1hlOyl7dmFyIFZlPVhlLmNodW5rO2lmKFQoTWUsdmUsITEsdmUub2JqZWN0TW9kZT8xOlZlLmxlbmd0aCxW''@;'; put 'put ''ZSxYZS5lbmNvZGluZyxYZS5jYWxsYmFjayksWGU9WGUubmV4dCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHZlLndyaXRpbmcpYnJlYWt9bnVsbD09PVhlJiYodmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX12ZS5idWZmZXJlZFJlcXVlc3Q9WGUsdmUuYnVmZmVyUHJvY2Vzc2luZz0h''@;'; put 'put ''MX1mdW5jdGlvbiB0ZShNZSl7cmV0dXJuIE1lLmVuZGluZyYmMD09PU1lLmxlbmd0aCYmbnVsbD09PU1lLmJ1ZmZlcmVkUmVxdWVzdCYmIU1lLmZpbmlzaGVkJiYhTWUud3JpdGluZ31mdW5jdGlvbiBzZShNZSx2ZSl7TWUuX2ZpbmFsKGZ1bmN0aW9uKFhlKXt2ZS5wZW5kaW5nY2ItLSxYZSYm''@;'; put 'put ''X2UoTWUsWGUpLHZlLnByZWZpbmlzaGVkPSEwLE1lLmVtaXQoInByZWZpbmlzaCIpLFVlKE1lLHZlKX0pfWZ1bmN0aW9uIFVlKE1lLHZlKXt2YXIgWGU9dGUodmUpO2lmKFhlJiYoZnVuY3Rpb24gd2UoTWUsdmUpeyF2ZS5wcmVmaW5pc2hlZCYmIXZlLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIE1lLl9maW5hbHx8dmUuZGVzdHJveWVkPyh2ZS5wcmVmaW5pc2hlZD0hMCxNZS5lbWl0KCJwcmVmaW5pc2giKSk6KHZlLnBlbmRpbmdjYisrLHZlLmZpbmFsQ2FsbGVkPSEwLEkubmV4dFRpY2soc2UsTWUsdmUpKSl9KE1lLHZlKSwwPT09dmUucGVuZGluZ2NiJiYodmUuZmlu''@;'; put 'put ''aXNoZWQ9ITAsTWUuZW1pdCgiZmluaXNoIiksdmUuYXV0b0Rlc3Ryb3kpKSl7dmFyIGplPU1lLl9yZWFkYWJsZVN0YXRlOyghamV8fGplLmF1dG9EZXN0cm95JiZqZS5lbmRFbWl0dGVkKSYmTWUuZGVzdHJveSgpfXJldHVybiBYZX15KDU3MTcpKFYsUCksU2UucHJvdG90eXBlLmdldEJ1ZmZl''@;'; put 'put ''cj1mdW5jdGlvbigpe2Zvcih2YXIgdmU9dGhpcy5idWZmZXJlZFJlcXVlc3QsWGU9W107dmU7KVhlLnB1c2godmUpLHZlPXZlLm5leHQ7cmV0dXJuIFhlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6dy5kZXByZWNhdGUo''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZT''@;'; put 'put ''eW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oemU9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFYsU3ltYm9sLmhhc0luc3RhbmNlLHt2''@;'; put 'put ''YWx1ZTpmdW5jdGlvbih2ZSl7cmV0dXJuISF6ZS5jYWxsKHRoaXMsdmUpfHx0aGlzPT09ViYmdmUmJnZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgU2V9fSkpOnplPWZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUgaW5zdGFuY2VvZiB0aGlzfSxWLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7''@;'; put 'put ''X2UodGhpcyxuZXcgSil9LFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE1lLHZlLFhlKXt2YXIgamU9dGhpcy5fd3JpdGFibGVTdGF0ZSxEZT0hMSxGZT0hamUub2JqZWN0TW9kZSYmZnVuY3Rpb24gTihNZSl7cmV0dXJuIEYuaXNCdWZmZXIoTWUpfHxNZSBpbnN0YW5jZW9mIE99KE1lKTty''@;'; put 'put ''ZXR1cm4gRmUmJiFGLmlzQnVmZmVyKE1lKSYmKE1lPWZ1bmN0aW9uIHooTWUpe3JldHVybiBGLmZyb20oTWUpfShNZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLEZlP3ZlPSJidWZmZXIiOnZlfHwodmU9amUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgWGUmJihYZT1UZSksamUuZW5kaW5nP2Z1bmN0aW9uIHAoTWUsdmUpe3ZhciBYZT1uZXcgbGU7X2UoTWUsWGUpLEkubmV4dFRpY2sodmUsWGUpfSh0aGlzLFhlKTooRmV8fGZ1bmN0aW9uIGIoTWUsdmUsWGUsamUpe3ZhciBEZTtyZXR1cm4gbnVsbD09PVhlP0RlPW5ldyBpZToic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIFhlJiYhdmUub2JqZWN0TW9kZSYmKERlPW5ldyBZKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSxYZSkpLCFEZXx8KF9lKE1lLERlKSxJLm5leHRUaWNrKGplLERlKSwhMSl9KHRoaXMsamUsTWUsWGUpKSYmKGplLnBlbmRpbmdjYisrLERlPWZ1bmN0aW9uIEMoTWUs''@;'; put 'put ''dmUsWGUsamUsRGUsRmUpe2lmKCFYZSl7dmFyIFJlPWZ1bmN0aW9uIHgoTWUsdmUsWGUpe3JldHVybiFNZS5vYmplY3RNb2RlJiYhMSE9PU1lLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgdmUmJih2ZT1GLmZyb20odmUsWGUpKSx2ZX0odmUsamUsRGUpO2plIT09UmUmJihYZT0h''@;'; put 'put ''MCxEZT0iYnVmZmVyIixqZT1SZSl9dmFyIEllPXZlLm9iamVjdE1vZGU/MTpqZS5sZW5ndGg7dmUubGVuZ3RoKz1JZTt2YXIgVmU9dmUubGVuZ3RoPHZlLmhpZ2hXYXRlck1hcms7aWYoVmV8fCh2ZS5uZWVkRHJhaW49ITApLHZlLndyaXRpbmd8fHZlLmNvcmtlZCl7dmFyIGtlPXZlLmxhc3RC''@;'; put 'put ''dWZmZXJlZFJlcXVlc3Q7dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6amUsZW5jb2Rpbmc6RGUsaXNCdWY6WGUsY2FsbGJhY2s6RmUsbmV4dDpudWxsfSxrZT9rZS5uZXh0PXZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q6dmUuYnVmZmVyZWRSZXF1ZXN0PXZlLmxhc3RCdWZmZXJlZFJlcXVl''@;'; put 'put ''c3QsdmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBUKE1lLHZlLCExLEllLGplLERlLEZlKTtyZXR1cm4gVmV9KHRoaXMsamUsRmUsTWUsdmUsWGUpKSxEZX0sVi5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LFYucHJvdG90eXBl''@;'; put 'put ''LnVuY29yaz1mdW5jdGlvbigpe3ZhciBNZT10aGlzLl93cml0YWJsZVN0YXRlO01lLmNvcmtlZCYmKE1lLmNvcmtlZC0tLCFNZS53cml0aW5nJiYhTWUuY29ya2VkJiYhTWUuYnVmZmVyUHJvY2Vzc2luZyYmTWUuYnVmZmVyZWRSZXF1ZXN0JiZhZSh0aGlzLE1lKSl9LFYucHJvdG90eXBlLnNl''@;'; put 'put ''dERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih2ZSl7aWYoInN0cmluZyI9PXR5cGVvZiB2ZSYmKHZlPXZlLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJh''@;'; put 'put ''dyJdLmluZGV4T2YoKHZlKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IG1lKHZlKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9dmUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1l''@;'; put 'put ''cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksVi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKE1lLHZlLFhlKXtYZShuZXcgcSgiX3dyaXRlKCkiKSl9LFYucHJvdG90eXBlLl93cml0ZXY9bnVsbCxWLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24o''@;'; put 'put ''TWUsdmUsWGUpe3ZhciBqZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBNZT8oWGU9TWUsTWU9bnVsbCx2ZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxudWxsIT1NZSYmdGhpcy53cml0ZShNZSx2ZSksamUuY29ya2Vk''@;'; put 'put ''JiYoamUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksamUuZW5kaW5nfHxmdW5jdGlvbiBKZShNZSx2ZSxYZSl7dmUuZW5kaW5nPSEwLFVlKE1lLHZlKSxYZSYmKHZlLmZpbmlzaGVkP0kubmV4dFRpY2soWGUpOk1lLm9uY2UoImZpbmlzaCIsWGUpKSx2ZS5lbmRlZD0hMCxNZS53cml0YWJsZT0h''@;'; put 'put ''MX0odGhpcyxqZSxYZSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnBy''@;'; put 'put ''b3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih2ZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZGVzdHJveWVkPXZlKX19KSxWLnByb3RvdHlwZS5kZXN0cm95PUwuZGVzdHJveSxWLnByb3RvdHlwZS5fdW5kZXN0cm95PUwudW5kZXN0cm95LFYucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKE1lLHZlKXt2ZShNZSl9fSw1ODUwOih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBfLEk9eSg0MTU1KTtmdW5jdGlvbiBnKGxlLG1lLF9lKXtyZXR1cm4gbWU9ZnVuY3Rpb24gQihsZSl7dmFyIG1lPWZ1bmN0aW9uIHcobGUsbWUpe2lmKCJvYmplY3QiIT10eXBlb2YgbGV8fG51bGw9PT1sZSlyZXR1cm4gbGU7dmFyIF9lPWxlW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09X2Upe3ZhciBUZT1fZS5jYWxsKGxlLG1lfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgVGUpcmV0dXJuIFRlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09bWU/U3RyaW5nOk51bWJlcikobGUpfShsZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBtZT9tZTpTdHJpbmcobWUpfShtZSksbWUgaW4gbGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLG1lLHt2YWx1ZTpfZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmxlW21lXT1fZSxsZX12YXIgUD15KDg2MTApLEY9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLE89U3ltYm9sKCJsYXN0UmVqZWN0Iiksej1TeW1ib2woImVycm9yIiksTj1TeW1ib2woImVuZGVkIiksTD1TeW1ib2woImxhc3RQcm9taXNlIiksSz1TeW1ib2woImhhbmRsZVByb21p''@;'; put 'put ''c2UiKSxVPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gVyhsZSxtZSl7cmV0dXJue3ZhbHVlOmxlLGRvbmU6bWV9fWZ1bmN0aW9uIFkobGUpe3ZhciBtZT1sZVtGXTtpZihudWxsIT09bWUpe3ZhciBfZT1sZVtVXS5yZWFkKCk7bnVsbCE9PV9lJiYobGVbTF09bnVsbCxsZVtGXT1udWxsLGxl''@;'; put 'put ''W09dPW51bGwsbWUoVyhfZSwhMSkpKX19ZnVuY3Rpb24gcShsZSl7SS5uZXh0VGljayhZLGxlKX12YXIgSj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxuZT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGcoXz17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW1VdfSxuZXh0OmZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIG1lPXRoaXMsX2U9dGhpc1t6XTtpZihudWxsIT09X2UpcmV0dXJuIFByb21pc2UucmVqZWN0KF9lKTtpZih0aGlzW05dKXJldHVybiBQcm9taXNlLnJlc29sdmUoVyh2b2lkIDAsITApKTtpZih0aGlzW1VdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp''@;'; put 'put ''b24oVixwKXtJLm5leHRUaWNrKGZ1bmN0aW9uKCl7bWVbel0/cChtZVt6XSk6VihXKHZvaWQgMCwhMCkpfSl9KTt2YXIgU2UsVGU9dGhpc1tMXTtpZihUZSlTZT1uZXcgUHJvbWlzZShmdW5jdGlvbiBlZShsZSxtZSl7cmV0dXJuIGZ1bmN0aW9uKF9lLFRlKXtsZS50aGVuKGZ1bmN0aW9uKCl7''@;'; put 'put ''bWVbTl0/X2UoVyh2b2lkIDAsITApKTptZVtLXShfZSxUZSl9LFRlKX19KFRlLHRoaXMpKTtlbHNle3ZhciB6ZT10aGlzW1VdLnJlYWQoKTtpZihudWxsIT09emUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShXKHplLCExKSk7U2U9bmV3IFByb21pc2UodGhpc1tLXSl9cmV0dXJuIHRoaXNbTF09''@;'; put 'put ''U2UsU2V9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZyhfLCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIG1lPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF9lLFRlKXttZVtVXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oU2Upe1NlP1RlKFNl''@;'; put 'put ''KTpfZShXKHZvaWQgMCwhMCkpfSl9KX0pLF8pLEopO3VlLmV4cG9ydHM9ZnVuY3Rpb24obWUpe3ZhciBfZSxUZT1PYmplY3QuY3JlYXRlKG5lLChnKF9lPXt9LFUse3ZhbHVlOm1lLHdyaXRhYmxlOiEwfSksZyhfZSxGLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksZyhfZSxPLHt2YWx1ZTpu''@;'; put 'put ''dWxsLHdyaXRhYmxlOiEwfSksZyhfZSx6LHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksZyhfZSxOLHt2YWx1ZTptZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksZyhfZSxLLHt2YWx1ZTpmdW5jdGlvbih6ZSxWKXt2YXIgcD1UZVtVXS5yZWFkKCk7cD8oVGVbTF09''@;'; put 'put ''bnVsbCxUZVtGXT1udWxsLFRlW09dPW51bGwsemUoVyhwLCExKSkpOihUZVtGXT16ZSxUZVtPXT1WKX0sd3JpdGFibGU6ITB9KSxfZSkpO3JldHVybiBUZVtMXT1udWxsLFAobWUsZnVuY3Rpb24oU2Upe2lmKFNlJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09U2UuY29kZSl7dmFy''@;'; put 'put ''IHplPVRlW09dO3JldHVybiBudWxsIT09emUmJihUZVtMXT1udWxsLFRlW0ZdPW51bGwsVGVbT109bnVsbCx6ZShTZSkpLHZvaWQoVGVbel09U2UpfXZhciBWPVRlW0ZdO251bGwhPT1WJiYoVGVbTF09bnVsbCxUZVtGXT1udWxsLFRlW09dPW51bGwsVihXKHZvaWQgMCwhMCkpKSxUZVtOXT0h''@;'; put 'put ''MH0pLG1lLm9uKCJyZWFkYWJsZSIscS5iaW5kKG51bGwsVGUpKSxUZX19LDczMjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShZLHEpe3ZhciBlZT1PYmplY3Qua2V5cyhZKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgSj1PYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlTeW1ib2xzKFkpO3EmJihKPUouZmlsdGVyKGZ1bmN0aW9uKG5lKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihZLG5lKS5lbnVtZXJhYmxlfSkpLGVlLnB1c2guYXBwbHkoZWUsSil9cmV0dXJuIGVlfWZ1bmN0aW9uIF8oWSl7Zm9yKHZhciBxPTE7cTxhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPW51bGwhPWFyZ3VtZW50c1txXT9hcmd1bWVudHNbcV06e307cSUyP0koT2JqZWN0KGVlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihKKXtnKFksSixlZVtKXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydGllcyhZLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGVlKSk6SShPYmplY3QoZWUpKS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEosT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlZSxKKSl9KX1yZXR1cm4gWX1mdW5jdGlv''@;'; put 'put ''biBnKFkscSxlZSl7cmV0dXJuKHE9RihxKSlpbiBZP09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLHEse3ZhbHVlOmVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6WVtxXT1lZSxZfWZ1bmN0aW9uIHcoWSxxKXtmb3IodmFyIGVlPTA7ZWU8cS5sZW5ndGg7ZWUr''@;'; put 'put ''Kyl7dmFyIEo9cVtlZV07Si5lbnVtZXJhYmxlPUouZW51bWVyYWJsZXx8ITEsSi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEomJihKLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxGKEoua2V5KSxKKX19ZnVuY3Rpb24gRihZKXt2YXIgcT1mdW5jdGlvbiBPKFkscSl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBZfHxudWxsPT09WSlyZXR1cm4gWTt2YXIgZWU9WVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWVlKXt2YXIgSj1lZS5jYWxsKFkscXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuIEo7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1xP1N0cmluZzpOdW1iZXIpKFkpfShZLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHE/cTpTdHJpbmcocSl9dmFyIE49eSg4NzY0KS5CdWZmZXIsSz15KDIz''@;'; put 'put ''NjEpLmluc3BlY3QsVT1LJiZLLmN1c3RvbXx8Imluc3BlY3QiO2Z1bmN0aW9uIFcoWSxxLGVlKXtOLnByb3RvdHlwZS5jb3B5LmNhbGwoWSxxLGVlKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWSgpeyhmdW5jdGlvbiBCKFkscSl7aWYoIShZIGluc3RhbmNlb2YgcSkpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFkpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGZ1bmN0aW9uIFAoWSxxLGVlKXtxJiZ3KFkucHJvdG90eXBlLHEpLGVlJiZ3KFksZWUpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShZLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShZLFt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PUo6dGhpcy5oZWFkPUosdGhpcy50YWlsPUos''@;'; put 'put ''Kyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPUopLHRoaXMuaGVhZD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rp''@;'; put 'put ''b24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlZT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGVlfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMu''@;'; put 'put ''aGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIEo9dGhpcy5oZWFkLG5lPSIiK0ouZGF0YTtKPUoubmV4dDspbmUrPWVlK0ouZGF0YTtyZXR1cm4gbmV9fSx7''@;'; put 'put ''a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIE4uYWxsb2MoMCk7Zm9yKHZhciBKPU4uYWxsb2NVbnNhZmUoZWU+Pj4wKSxuZT10aGlzLmhlYWQsaWU9MDtuZTspVyhuZS5kYXRhLEosaWUpLGllKz1uZS5kYXRhLmxlbmd0aCxuZT1uZS5u''@;'; put 'put ''ZXh0O3JldHVybiBKfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oZWUsSil7dmFyIG5lO3JldHVybiBlZTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KG5lPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsZWUpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKGVlKSk6bmU9''@;'; put 'put ''ZWU9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOko/dGhpcy5fZ2V0U3RyaW5nKGVlKTp0aGlzLl9nZXRCdWZmZXIoZWUpLG5lfX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6''@;'; put 'put ''ZnVuY3Rpb24oZWUpe3ZhciBKPXRoaXMuaGVhZCxuZT0xLGllPUouZGF0YTtmb3IoZWUtPWllLmxlbmd0aDtKPUoubmV4dDspe3ZhciBsZT1KLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihpZSs9bWU9PT1sZS5sZW5ndGg/bGU6bGUuc2xpY2UoMCxlZSksMD09KGVlLT1t''@;'; put 'put ''ZSkpe21lPT09bGUubGVuZ3RoPygrK25lLHRoaXMuaGVhZD1KLm5leHQ/Si5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPUosSi5kYXRhPWxlLnNsaWNlKG1lKSk7YnJlYWt9KytuZX1yZXR1cm4gdGhpcy5sZW5ndGgtPW5lLGllfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVu''@;'; put 'put ''Y3Rpb24oZWUpe3ZhciBKPU4uYWxsb2NVbnNhZmUoZWUpLG5lPXRoaXMuaGVhZCxpZT0xO2ZvcihuZS5kYXRhLmNvcHkoSiksZWUtPW5lLmRhdGEubGVuZ3RoO25lPW5lLm5leHQ7KXt2YXIgbGU9bmUuZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGxlLmNvcHkoSixKLmxl''@;'; put 'put ''bmd0aC1lZSwwLG1lKSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsraWUsdGhpcy5oZWFkPW5lLm5leHQ/bmUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1uZSxuZS5kYXRhPWxlLnNsaWNlKG1lKSk7YnJlYWt9KytpZX1yZXR1cm4gdGhpcy5sZW5ndGgtPWllLEp9fSx7''@;'; put 'put ''a2V5OlUsdmFsdWU6ZnVuY3Rpb24oZWUsSil7cmV0dXJuIEsodGhpcyxfKF8oe30sSikse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSksWX0oKX0sMTE5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpO2Z1bmN0aW9uIGcoTyx6KXtQKE8seiksQihPKX1m''@;'; put 'put ''dW5jdGlvbiBCKE8pe08uX3dyaXRhYmxlU3RhdGUmJiFPLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8Ty5fcmVhZGFibGVTdGF0ZSYmIU8uX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHxPLmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gUChPLHope08uZW1pdCgiZXJyb3IiLHopfXVlLmV4cG9y''@;'; put 'put ''dHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gXyhPLHope3ZhciBOPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oej96KE8pOk8mJih0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhQLHRoaXMsTykpOkkubmV4dFRpY2soUCx0aGlzLE8pKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koT3x8bnVsbCxmdW5jdGlvbihVKXsheiYmVT9OLl93cml0YWJsZVN0YXRlP04uX3dyaXRhYmxlU3RhdGUuZXJyb3JF''@;'; put 'put ''bWl0dGVkP0kubmV4dFRpY2soQixOKTooTi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsSS5uZXh0VGljayhnLE4sVSkpOkkubmV4dFRpY2soZyxOLFUpOno/KEkubmV4dFRpY2soQixOKSx6KFUpKTpJLm5leHRUaWNrKEIsTil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIHco''@;'; put 'put ''KXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNo''@;'; put 'put ''ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uIEYoTyx6KXt2YXIgTj1PLl9yZWFkYWJsZVN0YXRlLEw9Ty5fd3JpdGFibGVTdGF0ZTtOJiZOLmF1dG9EZXN0cm95''@;'; put 'put ''fHxMJiZMLmF1dG9EZXN0cm95P08uZGVzdHJveSh6KTpPLmVtaXQoImVycm9yIix6KX19fSw4NjEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDI4MSkucS5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBnKCl7fXVlLmV4cG9ydHM9ZnVuY3Rpb24gdyhQLEYs''@;'; put 'put ''Tyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEYpcmV0dXJuIHcoUCxudWxsLEYpO0Z8fChGPXt9KSxPPWZ1bmN0aW9uIF8oUCl7dmFyIEY9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIUYpe0Y9ITA7Zm9yKHZhciBPPWFyZ3VtZW50cy5sZW5ndGgsej1uZXcgQXJyYXkoTyksTj0wO048TztOKysp''@;'; put 'put ''eltOXT1hcmd1bWVudHNbTl07UC5hcHBseSh0aGlzLHopfX19KE98fGcpO3ZhciB6PUYucmVhZGFibGV8fCExIT09Ri5yZWFkYWJsZSYmUC5yZWFkYWJsZSxOPUYud3JpdGFibGV8fCExIT09Ri53cml0YWJsZSYmUC53cml0YWJsZSxMPWZ1bmN0aW9uKCl7UC53cml0YWJsZXx8VSgpfSxLPVAu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGUmJlAuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsVT1mdW5jdGlvbigpe049ITEsSz0hMCx6fHxPLmNhbGwoUCl9LFc9UC5fcmVhZGFibGVTdGF0ZSYmUC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFk9ZnVuY3Rpb24oKXt6PSExLFc9ITAsTnx8Ty5jYWxsKFApfSxx''@;'; put 'put ''PWZ1bmN0aW9uKGllKXtPLmNhbGwoUCxpZSl9LGVlPWZ1bmN0aW9uKCl7dmFyIGllO3JldHVybiB6JiYhVz8oKCFQLl9yZWFkYWJsZVN0YXRlfHwhUC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksTy5jYWxsKFAsaWUpKTpOJiYhSz8oKCFQLl93cml0YWJsZVN0YXRlfHwhUC5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksTy5jYWxsKFAsaWUpKTp2b2lkIDB9LEo9ZnVuY3Rpb24oKXtQLnJlcS5vbigiZmluaXNoIixVKX07cmV0dXJuIGZ1bmN0aW9uIEIoUCl7cmV0dXJuIFAuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgUC5hYm9ydH0oUCk/KFAu''@;'; put 'put ''b24oImNvbXBsZXRlIixVKSxQLm9uKCJhYm9ydCIsZWUpLFAucmVxP0ooKTpQLm9uKCJyZXF1ZXN0IixKKSk6TiYmIVAuX3dyaXRhYmxlU3RhdGUmJihQLm9uKCJlbmQiLEwpLFAub24oImNsb3NlIixMKSksUC5vbigiZW5kIixZKSxQLm9uKCJmaW5pc2giLFUpLCExIT09Ri5lcnJvciYmUC5v''@;'; put 'put ''bigiZXJyb3IiLHEpLFAub24oImNsb3NlIixlZSksZnVuY3Rpb24oKXtQLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsVSksUC5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLGVlKSxQLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixKKSxQLnJlcSYmUC5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlz''@;'; put 'put ''aCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixxKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9z''@;'; put 'put ''ZSIsZWUpfX19LDUxNjc6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDk5NDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEksZz15KDQyODEpLnEsQj1nLkVSUl9N''@;'; put 'put ''SVNTSU5HX0FSR1Msdz1nLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIFAoVSl7aWYoVSl0aHJvdyBVfWZ1bmN0aW9uIHooVSl7VSgpfWZ1bmN0aW9uIE4oVSxXKXtyZXR1cm4gVS5waXBlKFcpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gSygpe2Zvcih2YXIgVT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LFc9bmV3IEFycmF5KFUpLFk9MDtZPFU7WSsrKVdbWV09YXJndW1lbnRzW1ldO3ZhciBxPWZ1bmN0aW9uIEwoVSl7cmV0dXJuIFUubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgVVtVLmxlbmd0aC0xXT9VLnBvcCgpOlB9KFcpO2lmKEFycmF5LmlzQXJyYXkoV1swXSkmJihXPVdbMF0pLFcu''@;'; put 'put ''bGVuZ3RoPDIpdGhyb3cgbmV3IEIoInN0cmVhbXMiKTt2YXIgZWUsSj1XLm1hcChmdW5jdGlvbihuZSxpZSl7dmFyIGxlPWllPFcubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uIE8oVSxXLFkscSl7cT1mdW5jdGlvbiBfKFUpe3ZhciBXPSExO3JldHVybiBmdW5jdGlvbigpe1d8fChXPSEwLFUu''@;'; put 'put ''YXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0ocSk7dmFyIGVlPSExO1Uub24oImNsb3NlIixmdW5jdGlvbigpe2VlPSEwfSksdm9pZCAwPT09SSYmKEk9eSg4NjEwKSksSShVLHtyZWFkYWJsZTpXLHdyaXRhYmxlOll9LGZ1bmN0aW9uKG5lKXtpZihuZSlyZXR1cm4gcShuZSk7ZWU9ITAscSgp''@;'; put 'put ''fSk7dmFyIEo9ITE7cmV0dXJuIGZ1bmN0aW9uKG5lKXtpZighZWUmJiFKKXtpZihKPSEwLGZ1bmN0aW9uIEYoVSl7cmV0dXJuIFUuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVS5hYm9ydH0oVSkpcmV0dXJuIFUuYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVS5kZXN0cm95''@;'; put 'put ''KXJldHVybiBVLmRlc3Ryb3koKTtxKG5lfHxuZXcgdygicGlwZSIpKX19fShuZSxsZSxpZT4wLGZ1bmN0aW9uKF9lKXtlZXx8KGVlPV9lKSxfZSYmSi5mb3JFYWNoKHopLCFsZSYmKEouZm9yRWFjaCh6KSxxKGVlKSl9KX0pO3JldHVybiBXLnJlZHVjZShOKX19LDI0NTc6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSg0MjgxKS5xLkVSUl9JTlZBTElEX09QVF9WQUxVRTt1ZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIGcoQix3LFAsRil7dmFyIE89ZnVuY3Rpb24gXyhCLHcsUCl7cmV0dXJuIG51bGwhPUIuaGlnaFdhdGVyTWFyaz9CLmhpZ2hXYXRlck1h''@;'; put 'put ''cms6dz9CW1BdOm51bGx9KHcsRixQKTtpZihudWxsIT1PKXtpZighaXNGaW5pdGUoTyl8fE1hdGguZmxvb3IoTykhPT1PfHxPPDApdGhyb3cgbmV3IEkoRj9QOiJoaWdoV2F0ZXJNYXJrIixPKTtyZXR1cm4gTWF0aC5mbG9vcihPKX1yZXR1cm4gQi5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDI1''@;'; put 'put ''MDM6KHVlLFgseSk9Pnt1ZS5leHBvcnRzPXkoNzE4NykuRXZlbnRFbWl0dGVyfSw3NDE4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtpZihJPUkuc3BsaXQoIjoiKVswXSwhKHk9K3kpKXJldHVybiExO3N3aXRjaChJKXtjYXNlImh0dHAiOmNhc2Uid3MiOnJl''@;'; put 'put ''dHVybiA4MCE9PXk7Y2FzZSJodHRwcyI6Y2FzZSJ3c3MiOnJldHVybiA0NDMhPT15O2Nhc2UiZnRwIjpyZXR1cm4gMjEhPT15O2Nhc2UiZ29waGVyIjpyZXR1cm4gNzAhPT15O2Nhc2UiZmlsZSI6cmV0dXJuITF9cmV0dXJuIDAhPT15fX0sOTc4NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDg3NjQpLkJ1ZmZlcixfPXkoNTcxNyksZz15KDMzNDkpLEI9bmV3IEFycmF5KDE2KSx3PVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMs''@;'; put 'put ''MTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFA9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwx''@;'; put 'put ''NSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sRj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEz''@;'; put 'put ''LDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sTz1bOCw5LDksMTEs''@;'; put 'put ''MTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUs''@;'; put 'put ''MTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sej1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxOPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIEwoKXtnLmNhbGwodGhpcyw2NCksdGhpcy5fYT0x''@;'; put 'put ''NzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIEsoSixuZSl7cmV0dXJuIEo8PG5lfEo+Pj4zMi1uZX1mdW5jdGlvbiBVKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVy''@;'; put 'put ''biBLKEorKG5lXmllXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIFcoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmUmaWV8fm5lJmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIFkoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisoKG5lfH5p''@;'; put 'put ''ZSlebGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gcShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZSZsZXxpZSZ+bGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gZWUoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmVeKGllfH5sZSkpK19l''@;'; put 'put ''K1RlfDAsU2UpK21lfDB9XyhMLGcpLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEo9QixuZT0wO25lPDE2OysrbmUpSltuZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpuZSk7Zm9yKHZhciBpZT0wfHRoaXMuX2EsbGU9MHx0aGlzLl9iLG1lPTB8dGhpcy5fYyxf''@;'; put 'put ''ZT0wfHRoaXMuX2QsVGU9MHx0aGlzLl9lLFNlPTB8dGhpcy5fYSx6ZT0wfHRoaXMuX2IsVj0wfHRoaXMuX2MscD0wfHRoaXMuX2QsYj0wfHRoaXMuX2UseD0wO3g8ODA7eCs9MSl7dmFyIEMsVDt4PDE2PyhDPVUoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzBdLEZbeF0pLFQ9ZWUoU2UsemUs''@;'; put 'put ''VixwLGIsSltQW3hdXSxOWzBdLE9beF0pKTp4PDMyPyhDPVcoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzFdLEZbeF0pLFQ9cShTZSx6ZSxWLHAsYixKW1BbeF1dLE5bMV0sT1t4XSkpOng8NDg/KEM9WShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMl0sRlt4XSksVD1ZKFNlLHplLFYscCxi''@;'; put 'put ''LEpbUFt4XV0sTlsyXSxPW3hdKSk6eDw2ND8oQz1xKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selszXSxGW3hdKSxUPVcoU2UsemUsVixwLGIsSltQW3hdXSxOWzNdLE9beF0pKTooQz1lZShpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbNF0sRlt4XSksVD1VKFNlLHplLFYscCxiLEpbUFt4XV0s''@;'; put 'put ''Tls0XSxPW3hdKSksaWU9VGUsVGU9X2UsX2U9SyhtZSwxMCksbWU9bGUsbGU9QyxTZT1iLGI9cCxwPUsoViwxMCksVj16ZSx6ZT1UfXZhciBIPXRoaXMuX2IrbWUrcHwwO3RoaXMuX2I9dGhpcy5fYytfZStifDAsdGhpcy5fYz10aGlzLl9kK1RlK1NlfDAsdGhpcy5fZD10aGlzLl9lK2llK3pl''@;'; put 'put ''fDAsdGhpcy5fZT10aGlzLl9hK2xlK1Z8MCx0aGlzLl9hPUh9LEwucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQs''@;'; put 'put ''NjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3Ro''@;'; put 'put ''WzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgSj1JLmFsbG9jP0kuYWxsb2MoMjApOm5ldyBJKDIwKTtyZXR1cm4gSi53cml0ZUludDMyTEUodGhpcy5fYSwwKSxKLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksSi53cml0ZUludDMyTEUodGhpcy5f''@;'; put 'put ''ZCwxMiksSi53cml0ZUludDMyTEUodGhpcy5fZSwxNiksSn0sdWUuZXhwb3J0cz1MfSw5NTA5Oih1ZSxYLHkpPT57dmFyIEk9eSg4NzY0KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYp''@;'; put 'put ''fV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEksWCksWC5CdWZmZXI9QiksQi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfLnByb3RvdHlwZSksZyhfLEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBh''@;'; put 'put ''IG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJn''@;'; put 'put ''dW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw5''@;'; put 'put ''MjQ2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzM3OSksXz15KDg0MjApLGc9SSgiUmVnRXhwLnByb3RvdHlwZS5leGVjIiksQj15KDQ0NTMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7aWYoIV8oUCkpdGhyb3cgbmV3IEIoImByZWdleGAgbXVzdCBiZSBhIFJlZ0V4cCIpO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihPKXtyZXR1cm4gbnVsbCE9PWcoUCxPKX19fSw3NzcxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjEwKSxfPXkoMjI5NiksZz15KDEwNDQpKCksQj15KDcyOTYpLHc9eSg0NDUzKSxQPUkoIiVNYXRoLmZsb29yJSIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''Tyx6KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgTyl0aHJvdyBuZXcgdygiYGZuYCBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJudW1iZXIiIT10eXBlb2Ygenx8ejwwfHx6PjQyOTQ5NjcyOTV8fFAoeikhPT16KXRocm93IG5ldyB3KCJgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0''@;'; put 'put ''IGludGVnZXIiKTt2YXIgTj1hcmd1bWVudHMubGVuZ3RoPjImJiEhYXJndW1lbnRzWzJdLEw9ITAsSz0hMDtpZigibGVuZ3RoImluIE8mJkIpe3ZhciBVPUIoTywibGVuZ3RoIik7VSYmIVUuY29uZmlndXJhYmxlJiYoTD0hMSksVSYmIVUud3JpdGFibGUmJihLPSExKX1yZXR1cm4oTHx8S3x8''@;'; put 'put ''IU4pJiYoZz9fKE8sImxlbmd0aCIseiwhMCwhMCk6XyhPLCJsZW5ndGgiLHopKSxPfX0sNDE4OToodWUsWCx5KT0+e3ZhciBJPXkoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIF8oZyxCKXt0aGlzLl9ibG9jaz1JLmFsbG9jKGcpLHRoaXMuX2ZpbmFsU2l6ZT1CLHRoaXMuX2Jsb2NrU2l6ZT1nLHRo''@;'; put 'put ''aXMuX2xlbj0wfV8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihnLEIpeyJzdHJpbmciPT10eXBlb2YgZyYmKGc9SS5mcm9tKGcsQj1CfHwidXRmOCIpKTtmb3IodmFyIHc9dGhpcy5fYmxvY2ssUD10aGlzLl9ibG9ja1NpemUsRj1nLmxlbmd0aCxPPXRoaXMuX2xlbix6PTA7ejxGOyl7Zm9y''@;'; put 'put ''KHZhciBOPU8lUCxMPU1hdGgubWluKEYteixQLU4pLEs9MDtLPEw7SysrKXdbTitLXT1nW3orS107eis9TCwoTys9TCklUD09MCYmdGhpcy5fdXBkYXRlKHcpfXJldHVybiB0aGlzLl9sZW4rPUYsdGhpc30sXy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGcpe3ZhciBCPXRoaXMuX2xlbiV0''@;'; put 'put ''aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbQl09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxCKzEpLEI+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIHc9OCp0aGlzLl9sZW47aWYodzw9NDI5NDk2NzI5NSl0aGlz''@;'; put 'put ''Ll9ibG9jay53cml0ZVVJbnQzMkJFKHcsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIFA9KDQyOTQ5NjcyOTUmdyk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKHctUCkvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShQLHRo''@;'; put 'put ''aXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBPPXRoaXMuX2hhc2goKTtyZXR1cm4gZz9PLnRvU3RyaW5nKGcpOk99LF8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBi''@;'; put 'put ''eSBzdWJjbGFzcyIpfSx1ZS5leHBvcnRzPV99LDkwNzI6KHVlLFgseSk9Pnt2YXIgST11ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2c9Zy50b0xvd2VyQ2FzZSgpO3ZhciBCPUlbZ107aWYoIUIpdGhyb3cgbmV3IEVycm9yKGcrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1''@;'; put 'put ''ZXN0cykiKTtyZXR1cm4gbmV3IEJ9O0kuc2hhPXkoNDQ0OCksSS5zaGExPXkoODMzNiksSS5zaGEyMjQ9eSg4NDMyKSxJLnNoYTI1Nj15KDc0OTkpLEkuc2hhMzg0PXkoMTY4NiksSS5zaGE1MTI9eSg3ODE2KX0sNDQ0ODoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDQxODkpLGc9eSg5''@;'; put 'put ''NTA5KS5CdWZmZXIsQj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKE4pe3JldHVybiBOPDw1fE4+Pj4yN31m''@;'; put 'put ''dW5jdGlvbiBPKE4pe3JldHVybiBOPDwzMHxOPj4+Mn1mdW5jdGlvbiB6KE4sTCxLLFUpe3JldHVybiAwPT09Tj9MJkt8fkwmVToyPT09Tj9MJkt8TCZVfEsmVTpMXkteVX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5f''@;'; put 'put ''Yj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXtmb3IodmFyIEw9dGhpcy5fdyxLPTB8dGhpcy5fYSxVPTB8dGhpcy5fYixXPTB8dGhpcy5fYyxZPTB8''@;'; put 'put ''dGhpcy5fZCxxPTB8dGhpcy5fZSxlZT0wO2VlPDE2OysrZWUpTFtlZV09Ti5yZWFkSW50MzJCRSg0KmVlKTtmb3IoO2VlPDgwOysrZWUpTFtlZV09TFtlZS0zXV5MW2VlLThdXkxbZWUtMTRdXkxbZWUtMTZdO2Zvcih2YXIgSj0wO0o8ODA7KytKKXt2YXIgbmU9fn4oSi8yMCksaWU9RihLKSt6''@;'; put 'put ''KG5lLFUsVyxZKStxK0xbSl0rQltuZV18MDtxPVksWT1XLFc9TyhVKSxVPUssSz1pZX10aGlzLl9hPUsrdGhpcy5fYXwwLHRoaXMuX2I9VSt0aGlzLl9ifDAsdGhpcy5fYz1XK3RoaXMuX2N8MCx0aGlzLl9kPVkrdGhpcy5fZHwwLHRoaXMuX2U9cSt0aGlzLl9lfDB9LFAucHJvdG90eXBlLl9o''@;'; put 'put ''YXNoPWZ1bmN0aW9uKCl7dmFyIE49Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTi53cml0''@;'; put 'put ''ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxOfSx1ZS5leHBvcnRzPVB9LDgzMzY6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg0MTg5KSxnPXkoOTUwOSkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVu''@;'; put 'put ''Y3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihMKXtyZXR1cm4gTDw8MXxMPj4+MzF9ZnVuY3Rpb24gTyhMKXtyZXR1cm4gTDw8NXxMPj4+Mjd9ZnVuY3Rpb24geihMKXtyZXR1cm4gTDw8MzB8TD4+PjJ9ZnVuY3Rpb24gTihMLEss''@;'; put 'put ''VSxXKXtyZXR1cm4gMD09PUw/SyZVfH5LJlc6Mj09PUw/SyZVfEsmV3xVJlc6S15VXld9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4''@;'; put 'put ''NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBLPXRoaXMuX3csVT0wfHRoaXMuX2EsVz0wfHRoaXMuX2IsWT0wfHRoaXMuX2MscT0wfHRoaXMuX2QsZWU9MHx0aGlzLl9lLEo9MDtKPDE2OysrSilLW0pdPUwucmVhZElu''@;'; put 'put ''dDMyQkUoNCpKKTtmb3IoO0o8ODA7KytKKUtbSl09RihLW0otM11eS1tKLThdXktbSi0xNF1eS1tKLTE2XSk7Zm9yKHZhciBuZT0wO25lPDgwOysrbmUpe3ZhciBpZT1+fihuZS8yMCksbGU9TyhVKStOKGllLFcsWSxxKStlZStLW25lXStCW2llXXwwO2VlPXEscT1ZLFk9eihXKSxXPVUsVT1s''@;'; put 'put ''ZX10aGlzLl9hPVUrdGhpcy5fYXwwLHRoaXMuX2I9Vyt0aGlzLl9ifDAsdGhpcy5fYz1ZK3RoaXMuX2N8MCx0aGlzLl9kPXErdGhpcy5fZHwwLHRoaXMuX2U9ZWUrdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBMPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBM''@;'; put 'put ''LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTH0sdWUuZXhwb3J0cz1QfSw4NDMyOih1''@;'; put 'put ''ZSxYLHkpPT57dmFyIEk9eSg1NzE3KSxfPXkoNzQ5OSksZz15KDQxODkpLEI9eSg5NTA5KS5CdWZmZXIsdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsNjQsNTYpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LFAu''@;'; put 'put ''cHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9Qi5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIEYud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksRi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxGLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEYu''@;'; put 'put ''d3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEZ9LHVlLmV4cG9ydHM9UH0sNzQ5OToodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15KDQxODkpLGc9eSg5NTA5KS5CdWZmZXIsQj1bMTExNjM1MjQw''@;'; put 'put ''OCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwz''@;'; put 'put ''ODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0''@;'; put 'put ''MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5''@;'; put 'put ''MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIw''@;'; put 'put ''NDAzMTQ3OSwzMzI5MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihVLFcsWSl7cmV0dXJuIFleVSYoV15ZKX1mdW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gVSZXfFkmKFV8Vyl9ZnVu''@;'; put 'put ''Y3Rpb24geihVKXtyZXR1cm4oVT4+PjJ8VTw8MzApXihVPj4+MTN8VTw8MTkpXihVPj4+MjJ8VTw8MTApfWZ1bmN0aW9uIE4oVSl7cmV0dXJuKFU+Pj42fFU8PDI2KV4oVT4+PjExfFU8PDIxKV4oVT4+PjI1fFU8PDcpfWZ1bmN0aW9uIEwoVSl7cmV0dXJuKFU+Pj43fFU8PDI1KV4oVT4+PjE4''@;'; put 'put ''fFU8PDE0KV5VPj4+M31mdW5jdGlvbiBLKFUpe3JldHVybihVPj4+MTd8VTw8MTUpXihVPj4+MTl8VTw8MTMpXlU+Pj4xMH1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkw''@;'; put 'put ''NDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVKXtmb3IodmFyIFc9dGhpcy5fdyxZPTB8dGhpcy5f''@;'; put 'put ''YSxxPTB8dGhpcy5fYixlZT0wfHRoaXMuX2MsSj0wfHRoaXMuX2QsbmU9MHx0aGlzLl9lLGllPTB8dGhpcy5fZixsZT0wfHRoaXMuX2csbWU9MHx0aGlzLl9oLF9lPTA7X2U8MTY7KytfZSlXW19lXT1VLnJlYWRJbnQzMkJFKDQqX2UpO2Zvcig7X2U8NjQ7KytfZSlXW19lXT1LKFdbX2UtMl0p''@;'; put 'put ''K1dbX2UtN10rTChXW19lLTE1XSkrV1tfZS0xNl18MDtmb3IodmFyIFRlPTA7VGU8NjQ7KytUZSl7dmFyIFNlPW1lK04obmUpK0YobmUsaWUsbGUpK0JbVGVdK1dbVGVdfDAsemU9eihZKStPKFkscSxlZSl8MDttZT1sZSxsZT1pZSxpZT1uZSxuZT1KK1NlfDAsSj1lZSxlZT1xLHE9WSxZPVNl''@;'; put 'put ''K3plfDB9dGhpcy5fYT1ZK3RoaXMuX2F8MCx0aGlzLl9iPXErdGhpcy5fYnwwLHRoaXMuX2M9ZWUrdGhpcy5fY3wwLHRoaXMuX2Q9Sit0aGlzLl9kfDAsdGhpcy5fZT1uZSt0aGlzLl9lfDAsdGhpcy5fZj1pZSt0aGlzLl9mfDAsdGhpcy5fZz1sZSt0aGlzLl9nfDAsdGhpcy5faD1tZSt0aGlz''@;'; put 'put ''Ll9ofDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFU9Zy5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIFUud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksVS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxVLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLFUud3JpdGVJbnQzMkJFKHRoaXMu''@;'; put 'put ''X2QsMTIpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLFUud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLFV9LHVlLmV4cG9ydHM9UH0sMTY4NjoodWUsWCx5KT0+e3ZhciBJPXkoNTcxNyksXz15''@;'; put 'put ''KDc4MTYpLGc9eSg0MTg5KSxCPXkoOTUwOSkuQnVmZmVyLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhpcywxMjgsMTEyKX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcw''@;'; put 'put ''MzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRo''@;'; put 'put ''aXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIEY9Qi5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gTyh6LE4sTCl7Ri53cml0ZUludDMyQkUoeixMKSxGLndyaXRlSW50MzJCRShOLEwrNCl9cmV0dXJuIE8odGhpcy5fYWgsdGhpcy5fYWwsMCksTyh0aGlzLl9iaCx0aGlzLl9ibCw4KSxPKHRoaXMuX2NoLHRoaXMuX2NsLDE2''@;'; put 'put ''KSxPKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxPKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxPKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxGfSx1ZS5leHBvcnRzPVB9LDc4MTY6KHVlLFgseSk9Pnt2YXIgST15KDU3MTcpLF89eSg0MTg5KSxnPXkoOTUwOSkuQnVmZmVyLEI9WzExMTYzNTI0MDgsMzYw''@;'; put 'put ''OTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQz''@;'; put 'put ''ODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2''@;'; put 'put ''OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIx''@;'; put 'put ''OTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgy''@;'; put 'put ''NDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkx''@;'; put 'put ''NDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5''@;'; put 'put ''LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAw''@;'; put 'put ''MjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAy''@;'; put 'put ''NDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEs''@;'; put 'put ''MjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1''@;'; put 'put ''OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gRihxLGVlLEope3JldHVybiBKXnEmKGVl''@;'; put 'put ''XkopfWZ1bmN0aW9uIE8ocSxlZSxKKXtyZXR1cm4gcSZlZXxKJihxfGVlKX1mdW5jdGlvbiB6KHEsZWUpe3JldHVybihxPj4+Mjh8ZWU8PDQpXihlZT4+PjJ8cTw8MzApXihlZT4+Pjd8cTw8MjUpfWZ1bmN0aW9uIE4ocSxlZSl7cmV0dXJuKHE+Pj4xNHxlZTw8MTgpXihxPj4+MTh8ZWU8PDE0''@;'; put 'put ''KV4oZWU+Pj45fHE8PDIzKX1mdW5jdGlvbiBMKHEsZWUpe3JldHVybihxPj4+MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXnE+Pj43fWZ1bmN0aW9uIEsocSxlZSl7cmV0dXJuKHE+Pj4xfGVlPDwzMSleKHE+Pj44fGVlPDwyNCleKHE+Pj43fGVlPDwyNSl9ZnVuY3Rpb24gVShxLGVlKXtyZXR1''@;'; put 'put ''cm4ocT4+PjE5fGVlPDwxMyleKGVlPj4+Mjl8cTw8MylecT4+PjZ9ZnVuY3Rpb24gVyhxLGVlKXtyZXR1cm4ocT4+PjE5fGVlPDwxMyleKGVlPj4+Mjl8cTw8MyleKHE+Pj42fGVlPDwyNil9ZnVuY3Rpb24gWShxLGVlKXtyZXR1cm4gcT4+PjA8ZWU+Pj4wPzE6MH1JKFAsXyksUC5wcm90b3R5''@;'; put 'put ''cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUs''@;'; put 'put ''dGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5f''@;'; put 'put ''aGw9MzI3MDMzMjA5LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT10aGlzLl93LEo9MHx0aGlzLl9haCxuZT0wfHRoaXMuX2JoLGllPTB8dGhpcy5fY2gsbGU9MHx0aGlzLl9kaCxtZT0wfHRoaXMuX2VoLF9lPTB8dGhpcy5fZmgsVGU9MHx0aGlzLl9n''@;'; put 'put ''aCxTZT0wfHRoaXMuX2hoLHplPTB8dGhpcy5fYWwsVj0wfHRoaXMuX2JsLHA9MHx0aGlzLl9jbCxiPTB8dGhpcy5fZGwseD0wfHRoaXMuX2VsLEM9MHx0aGlzLl9mbCxUPTB8dGhpcy5fZ2wsSD0wfHRoaXMuX2hsLGo9MDtqPDMyO2orPTIpZWVbal09cS5yZWFkSW50MzJCRSg0KmopLGVlW2or''@;'; put 'put ''MV09cS5yZWFkSW50MzJCRSg0KmorNCk7Zm9yKDtqPDE2MDtqKz0yKXt2YXIgRT1lZVtqLTMwXSxtPWVlW2otMzArMV0sQT1MKEUsbSksYWU9SyhtLEUpLHRlPVUoRT1lZVtqLTRdLG09ZWVbai00KzFdKSxzZT1XKG0sRSksSmU9ZWVbai0zMl0sb3Q9ZWVbai0zMisxXSxNZT1hZStlZVtqLTE0''@;'; put 'put ''KzFdfDAsdmU9QStlZVtqLTE0XStZKE1lLGFlKXwwO3ZlPSh2ZT12ZSt0ZStZKE1lPU1lK3NlfDAsc2UpfDApK0plK1koTWU9TWUrb3R8MCxvdCl8MCxlZVtqXT12ZSxlZVtqKzFdPU1lfWZvcih2YXIgWGU9MDtYZTwxNjA7WGUrPTIpe3ZlPWVlW1hlXSxNZT1lZVtYZSsxXTt2YXIgamU9TyhK''@;'; put 'put ''LG5lLGllKSxEZT1PKHplLFYscCksRmU9eihKLHplKSxSZT16KHplLEopLEllPU4obWUseCksVmU9Tih4LG1lKSxrZT1CW1hlXSxBZT1CW1hlKzFdLF90PUYobWUsX2UsVGUpLG50PUYoeCxDLFQpLFFlPUgrVmV8MCx1bj1TZStJZStZKFFlLEgpfDA7dW49KHVuPSh1bj11bitfdCtZKFFlPVFl''@;'; put 'put ''K250fDAsbnQpfDApK2tlK1koUWU9UWUrQWV8MCxBZSl8MCkrdmUrWShRZT1RZStNZXwwLE1lKXwwO3ZhciB5dD1SZStEZXwwLE10PUZlK2plK1koeXQsUmUpfDA7U2U9VGUsSD1ULFRlPV9lLFQ9QyxfZT1tZSxDPXgsbWU9bGUrdW4rWSh4PWIrUWV8MCxiKXwwLGxlPWllLGI9cCxpZT1uZSxw''@;'; put 'put ''PVYsbmU9SixWPXplLEo9dW4rTXQrWSh6ZT1RZSt5dHwwLFFlKXwwfXRoaXMuX2FsPXRoaXMuX2FsK3plfDAsdGhpcy5fYmw9dGhpcy5fYmwrVnwwLHRoaXMuX2NsPXRoaXMuX2NsK3B8MCx0aGlzLl9kbD10aGlzLl9kbCtifDAsdGhpcy5fZWw9dGhpcy5fZWwreHwwLHRoaXMuX2ZsPXRoaXMu''@;'; put 'put ''X2ZsK0N8MCx0aGlzLl9nbD10aGlzLl9nbCtUfDAsdGhpcy5faGw9dGhpcy5faGwrSHwwLHRoaXMuX2FoPXRoaXMuX2FoK0orWSh0aGlzLl9hbCx6ZSl8MCx0aGlzLl9iaD10aGlzLl9iaCtuZStZKHRoaXMuX2JsLFYpfDAsdGhpcy5fY2g9dGhpcy5fY2graWUrWSh0aGlzLl9jbCxwKXwwLHRo''@;'; put 'put ''aXMuX2RoPXRoaXMuX2RoK2xlK1kodGhpcy5fZGwsYil8MCx0aGlzLl9laD10aGlzLl9laCttZStZKHRoaXMuX2VsLHgpfDAsdGhpcy5fZmg9dGhpcy5fZmgrX2UrWSh0aGlzLl9mbCxDKXwwLHRoaXMuX2doPXRoaXMuX2doK1RlK1kodGhpcy5fZ2wsVCl8MCx0aGlzLl9oaD10aGlzLl9oaCtT''@;'; put 'put ''ZStZKHRoaXMuX2hsLEgpfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHE9Zy5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gZWUoSixuZSxpZSl7cS53cml0ZUludDMyQkUoSixpZSkscS53cml0ZUludDMyQkUobmUsaWUrNCl9cmV0dXJuIGVlKHRoaXMuX2FoLHRoaXMuX2Fs''@;'; put 'put ''LDApLGVlKHRoaXMuX2JoLHRoaXMuX2JsLDgpLGVlKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxlZSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksZWUodGhpcy5fZWgsdGhpcy5fZWwsMzIpLGVlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxlZSh0aGlzLl9naCx0aGlzLl9nbCw0OCksZWUodGhpcy5faGgs''@;'; put 'put ''dGhpcy5faGwsNTYpLHF9LHVlLmV4cG9ydHM9UH0sMjgzMDoodWUsWCx5KT0+e3VlLmV4cG9ydHM9Zzt2YXIgST15KDcxODcpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBnKCl7SS5jYWxsKHRoaXMpfXkoNTcxNykoZyxJKSxnLlJlYWRhYmxlPXkoOTQ4MSksZy5Xcml0YWJsZT15KDQyMjkpLGcu''@;'; put 'put ''RHVwbGV4PXkoNjc1MyksZy5UcmFuc2Zvcm09eSg0NjA1KSxnLlBhc3NUaHJvdWdoPXkoMjcyNSksZy5maW5pc2hlZD15KDg2MTApLGcucGlwZWxpbmU9eSg5OTQ2KSxnLlN0cmVhbT1nLGcucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oQix3KXt2YXIgUD10aGlzO2Z1bmN0aW9uIEYoVyl7Qi53''@;'; put 'put ''cml0YWJsZSYmITE9PT1CLndyaXRlKFcpJiZQLnBhdXNlJiZQLnBhdXNlKCl9ZnVuY3Rpb24gTygpe1AucmVhZGFibGUmJlAucmVzdW1lJiZQLnJlc3VtZSgpfVAub24oImRhdGEiLEYpLEIub24oImRyYWluIixPKSwhQi5faXNTdGRpbyYmKCF3fHwhMSE9PXcuZW5kKSYmKFAub24oImVuZCIs''@;'; put 'put ''TiksUC5vbigiY2xvc2UiLEwpKTt2YXIgej0hMTtmdW5jdGlvbiBOKCl7enx8KHo9ITAsQi5lbmQoKSl9ZnVuY3Rpb24gTCgpe3p8fCh6PSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBCLmRlc3Ryb3kmJkIuZGVzdHJveSgpKX1mdW5jdGlvbiBLKFcpe2lmKFUoKSwwPT09SS5saXN0ZW5lckNvdW50''@;'; put 'put ''KHRoaXMsImVycm9yIikpdGhyb3cgV31mdW5jdGlvbiBVKCl7UC5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsRiksQi5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLE8pLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTiksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImVy''@;'; put 'put ''cm9yIixLKSxCLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVSksQi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFUpfXJldHVybiBQLm9uKCJlcnJvciIsSyksQi5vbigiZXJyb3IiLEspLFAub24oImVu''@;'; put 'put ''ZCIsVSksUC5vbigiY2xvc2UiLFUpLEIub24oImNsb3NlIixVKSxCLmVtaXQoInBpcGUiLFApLEJ9fSwyNTUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTUwOSkuQnVmZmVyLF89SS5pc0VuY29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNh''@;'; put 'put ''c2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9''@;'; put 'put ''fTtmdW5jdGlvbiB3KEope3ZhciBuZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBCKEope3ZhciBuZT1mdW5jdGlvbiBnKEope2lmKCFKKXJldHVybiJ1dGY4Ijtmb3IodmFyIG5lOzspc3dpdGNoKEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNz''@;'; put 'put ''MiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYobmUpcmV0dXJu''@;'; put 'put ''O0o9KCIiK0opLnRvTG93ZXJDYXNlKCksbmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIG5lJiYoSS5pc0VuY29kaW5nPT09X3x8IV8oSikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitKKTtyZXR1cm4gbmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRm''@;'; put 'put ''MTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9VSxuZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD16LG5lPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1XLHRoaXMuZW5kPVksbmU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXEsdm9pZCh0aGlzLmVu''@;'; put 'put ''ZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFsbG9jVW5zYWZlKG5lKX1mdW5jdGlvbiBQKEope3JldHVybiBKPD0xMjc/MDpKPj41PT02PzI6Sj4+ND09MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIg''@;'; put 'put ''bmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBPKEosbmUsaWUpe2lmKDEyOCE9KDE5MiZuZVswXSkpcmV0dXJuIEoubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjEmJm5lLmxlbmd0aD4xKXtpZigxMjghPSgxOTImbmVbMV0pKXJldHVybiBKLmxh''@;'; put 'put ''c3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZuZS5sZW5ndGg+MiYmMTI4IT0oMTkyJm5lWzJdKSlyZXR1cm4gSi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxKKTtyZXR1cm4gdm9pZCAwIT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxh''@;'; put 'put ''c3RDaGFyLG5lLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooSi5jb3B5KHRoaXMubGFzdENoYXIsbmUsMCxKLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixu''@;'; put 'put ''ZSl7aWYoKEoubGVuZ3RoLW5lKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIsbmUpO2lmKGllKXt2YXIgbGU9aWUuY2hhckNvZGVBdChpZS5sZW5ndGgtMSk7aWYobGU+PTU1Mjk2JiZsZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRo''@;'; put 'put ''aXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0saWUuc2xpY2UoMCwtMSl9cmV0dXJuIGllfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmlu''@;'; put 'put ''ZygidXRmMTZsZSIsbmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gVShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9uZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQp''@;'; put 'put ''Om5lfWZ1bmN0aW9uIFcoSixuZSl7dmFyIGllPShKLmxlbmd0aC1uZSklMztyZXR1cm4gMD09PWllP0oudG9TdHJpbmcoImJhc2U2NCIsbmUpOih0aGlzLmxhc3ROZWVkPTMtaWUsdGhpcy5sYXN0VG90YWw9MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxh''@;'; put 'put ''c3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxKLnRvU3RyaW5nKCJiYXNlNjQiLG5lLEoubGVuZ3RoLWllKSl9ZnVuY3Rpb24gWShKKXt2YXIgbmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9u''@;'; put 'put ''ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpuZX1mdW5jdGlvbiBxKEope3JldHVybiBKLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGVlKEope3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifVgucz13LHcucHJv''@;'; put 'put ''dG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgbmUsaWU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KG5lPXRoaXMuZmlsbExhc3QoSikpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDty''@;'; put 'put ''ZXR1cm4gaWU8Si5sZW5ndGg/bmU/bmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpuZXx8IiJ9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbiBMKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lKyJcdWZmZmQiOm5l''@;'; put 'put ''fSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixuZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixuZSxpZSl7dmFyIGxlPW5lLmxlbmd0aC0xO2lmKGxlPGllKXJldHVybiAwO3ZhciBtZT1QKG5lW2xlXSk7cmV0dXJuIG1lPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1sZTxp''@;'; put 'put ''ZXx8LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0yKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKG5lW2xlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6Si5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxKLG5lKTtpZighdGhpcy5sYXN0''@;'; put 'put ''TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIsbmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBsZT1KLmxlbmd0aC0oaWUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLDAsbGUpLEoudG9TdHJpbmcoInV0ZjgiLG5lLGxlKX0sdy5wcm90b3R5cGUuZmlsbExh''@;'; put 'put ''c3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RU''@;'; put 'put ''b3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEoubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aH19LDc4NTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3QgST15KDM2ODkpLF89eSg0NTY0KSxnPXkoNzUyKSxCPXkoMjIy''@;'; put 'put ''NCkueSx3PXkoNTc2MSkubSxQPXkoODk3MSkuVSxGPXkoNzY1MiksTz15KDQ1Nikse2Zyb21DYWxsYmFjazp6fT15KDcwNDEpLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOk59PXkoMTI2OSksTD0vXltceDIxXHgyMy1ceDJCXHgyRC1ceDNBXHgzQy1ceDVCXHg1RC1ceDdFXSskLyxLPS9bXHgw''@;'; put 'put ''MC1ceDFGXS8sVT1bIlxuIiwiXHIiLCJcMCJdLFc9L1tceDIwLVx4M0FceDNDLVx4N0VdKy8sWT0vW1x4MDlceDIwLVx4MkZceDNCLVx4NDBceDVCLVx4NjBceDdCLVx4N0VdLyxxPXtqYW46MCxmZWI6MSxtYXI6MixhcHI6MyxtYXk6NCxqdW46NSxqdWw6NixhdWc6NyxzZXA6OCxvY3Q6OSxu''@;'; put 'put ''b3Y6MTAsZGVjOjExfSxlZT0yMTQ3NDgzNjQ3ZTMsbmU9J0ludmFsaWQgc2FtZVNpdGVDb250ZXh0IG9wdGlvbiBmb3IgZ2V0Q29va2llcygpOyBleHBlY3RlZCBvbmUgb2YgInN0cmljdCIsICJsYXgiLCBvciAibm9uZSInO2Z1bmN0aW9uIGllKGplKXtGLnZhbGlkYXRlKEYuaXNOb25FbXB0''@;'; put 'put ''eVN0cmluZyhqZSksamUpO2NvbnN0IERlPVN0cmluZyhqZSkudG9Mb3dlckNhc2UoKTtyZXR1cm4ibm9uZSI9PT1EZXx8ImxheCI9PT1EZXx8InN0cmljdCI9PT1EZT9EZTpudWxsfWNvbnN0IGxlPU9iamVjdC5mcmVlemUoe1NJTEVOVDoic2lsZW50IixTVFJJQ1Q6InN0cmljdCIsRElTQUJM''@;'; put 'put ''RUQ6InVuc2FmZS1kaXNhYmxlZCJ9KSxtZT0vKD86Xig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9JCl8KD86Xig/Oig/OlthLWZcZF17MSw0fTopezd9KD86W2EtZlxkXXsxLDR9fDopfCg/''@;'; put 'put ''OlthLWZcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxk''@;'; put 'put ''fDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDJ9fDopfCg/OlthLWZcZF17MSw0fTopezR9KD86KD86OlthLWZcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsx''@;'; put 'put ''LTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDN9fDopfCg/OlthLWZcZF17MSw0fTopezN9KD86KD86OlthLWZcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQp''@;'; put 'put ''KD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezJ9KD86KD86OlthLWZcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoy''@;'; put 'put ''NVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDV9fDopfCg/OlthLWZcZF17MSw0fTopezF9KD86KD86OlthLWZcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJb''@;'; put 'put ''MC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDZ9fDopfCg/OjooPzooPzo6W2EtZlxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkp''@;'; put 'put ''ezN9fCg/OjpbYS1mXGRdezEsNH0pezEsN318OikpKSQpLyxfZT0iXG5cXFs/KD86XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7N30oPzpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxc''@;'; put 'put ''XGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXw6W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVd''@;'; put 'put ''fDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDJ9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezR9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQp''@;'; put 'put ''KD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwzfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXszfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRc''@;'; put 'put ''XGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwzfTooPzoyNVswLTVd''@;'; put 'put ''fDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDV9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezF9KD86KD86OlthLWZBLUZcXGRdezEsNH0p''@;'; put 'put ''ezAsNH06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw2fXw6KXxcbig/OjooPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw1''@;'; put 'put ''fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDd9fDopKVxuKSg/OiVbMC05YS16QS1aXXsxLH0pP1xcXT9cbiIucmVwbGFj''@;'; put 'put ''ZSgvXHMqXC9cLy4qJC9nbSwiIikucmVwbGFjZSgvXG4vZywiIikudHJpbSgpLFRlPW5ldyBSZWdFeHAoYF4ke19lfSRgKTtmdW5jdGlvbiBTZShqZSxEZSxGZSxSZSl7bGV0IEllPTA7Zm9yKDtJZTxqZS5sZW5ndGg7KXtjb25zdCBWZT1qZS5jaGFyQ29kZUF0KEllKTtpZihWZTw9NDd8fFZl''@;'; put 'put ''Pj01OClicmVhaztJZSsrfXJldHVybiBJZTxEZXx8SWU+RmV8fCFSZSYmSWUhPWplLmxlbmd0aD9udWxsOnBhcnNlSW50KGplLnN1YnN0cigwLEllKSwxMCl9ZnVuY3Rpb24gemUoamUpe2NvbnN0IERlPWplLnNwbGl0KCI6IiksRmU9WzAsMCwwXTtpZigzIT09RGUubGVuZ3RoKXJldHVybiBu''@;'; put 'put ''dWxsO2ZvcihsZXQgUmU9MDtSZTwzO1JlKyspe2NvbnN0IFZlPVNlKERlW1JlXSwxLDIsMj09UmUpO2lmKG51bGw9PT1WZSlyZXR1cm4gbnVsbDtGZVtSZV09VmV9cmV0dXJuIEZlfWZ1bmN0aW9uIFYoamUpe2plPVN0cmluZyhqZSkuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKTtjb25zdCBE''@;'; put 'put ''ZT1xW2plXTtyZXR1cm4gRGU+PTA/RGU6bnVsbH1mdW5jdGlvbiBwKGplKXtpZighamUpcmV0dXJuO2NvbnN0IERlPWplLnNwbGl0KFkpO2lmKCFEZSlyZXR1cm47bGV0IEZlPW51bGwsUmU9bnVsbCxJZT1udWxsLFZlPW51bGwsa2U9bnVsbCxBZT1udWxsO2ZvcihsZXQgX3Q9MDtfdDxEZS5s''@;'; put 'put ''ZW5ndGg7X3QrKyl7Y29uc3QgbnQ9RGVbX3RdLnRyaW0oKTtpZighbnQubGVuZ3RoKWNvbnRpbnVlO2xldCBRZTtudWxsPT09SWUmJihRZT16ZShudCksUWUpPyhGZT1RZVswXSxSZT1RZVsxXSxJZT1RZVsyXSk6bnVsbCE9PVZlfHwoUWU9U2UobnQsMSwyLCEwKSxudWxsPT09UWUpP251bGwh''@;'; put 'put ''PT1rZXx8KFFlPVYobnQpLG51bGw9PT1RZSk/bnVsbD09PUFlJiYoUWU9U2UobnQsMiw0LCEwKSxudWxsIT09UWUmJihBZT1RZSxBZT49NzAmJkFlPD05OT9BZSs9MTkwMDpBZT49MCYmQWU8PTY5JiYoQWUrPTJlMykpKTprZT1RZTpWZT1RZX1yZXR1cm4gbnVsbD09PVZlfHxudWxsPT09a2V8''@;'; put 'put ''fG51bGw9PT1BZXx8bnVsbD09PUllfHxWZTwxfHxWZT4zMXx8QWU8MTYwMXx8RmU+MjN8fFJlPjU5fHxJZT41OT92b2lkIDA6bmV3IERhdGUoRGF0ZS5VVEMoQWUsa2UsVmUsRmUsUmUsSWUpKX1mdW5jdGlvbiBiKGplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzRGF0ZShqZSksamUpLGplLnRv''@;'; put 'put ''VVRDU3RyaW5nKCl9ZnVuY3Rpb24geChqZSl7cmV0dXJuIG51bGw9PWplP251bGw6KGplPWplLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKSxUZS50ZXN0KGplKSYmKGplPWplLnJlcGxhY2UoIlsiLCIiKS5yZXBsYWNlKCJdIiwiIikpLEkmJi9bXlx1MDAwMS1cdTAwN2ZdLy50ZXN0KGplKSYm''@;'; put 'put ''KGplPUkudG9BU0NJSShqZSkpLGplLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIEMoamUsRGUsRmUpe2lmKG51bGw9PWplfHxudWxsPT1EZSlyZXR1cm4gbnVsbDtpZighMSE9PUZlJiYoamU9eChqZSksRGU9eChEZSkpLGplPT1EZSlyZXR1cm4hMDtjb25zdCBSZT1qZS5sYXN0SW5kZXhPZihE''@;'; put 'put ''ZSk7cmV0dXJuIShSZTw9MHx8amUubGVuZ3RoIT09RGUubGVuZ3RoK1JlfHwiLiIhPT1qZS5zdWJzdHIoUmUtMSwxKXx8bWUudGVzdChqZSkpfWZ1bmN0aW9uIFQoamUpe2lmKCFqZXx8Ii8iIT09amUuc3Vic3RyKDAsMSkpcmV0dXJuIi8iO2lmKCIvIj09PWplKXJldHVybiBqZTtjb25zdCBE''@;'; put 'put ''ZT1qZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiAwPT09RGU/Ii8iOmplLnNsaWNlKDAsRGUpfWZ1bmN0aW9uIEUoamUsRGUpe2lmKCghRGV8fCJvYmplY3QiIT10eXBlb2YgRGUpJiYoRGU9e30pLEYuaXNFbXB0eVN0cmluZyhqZSl8fCFGLmlzU3RyaW5nKGplKSlyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBGZT0oamU9amUudHJpbSgpKS5pbmRleE9mKCI7IiksSWU9ZnVuY3Rpb24gaihqZSxEZSl7amU9ZnVuY3Rpb24gSChqZSl7aWYoRi5pc0VtcHR5U3RyaW5nKGplKSlyZXR1cm4gamU7Zm9yKGxldCBEZT0wO0RlPFUubGVuZ3RoO0RlKyspe2NvbnN0IEZlPWplLmluZGV4T2YoVVtEZV0pOy0x''@;'; put 'put ''IT09RmUmJihqZT1qZS5zdWJzdHIoMCxGZSkpfXJldHVybiBqZX0oamUpLEYudmFsaWRhdGUoRi5pc1N0cmluZyhqZSksamUpO2xldCBSZSxJZSxGZT1qZS5pbmRleE9mKCI9Iik7aWYoRGUpMD09PUZlJiYoRmU9KGplPWplLnN1YnN0cigxKSkuaW5kZXhPZigiPSIpKTtlbHNlIGlmKEZlPD0w''@;'; put 'put ''KXJldHVybjtpZihGZTw9MD8oUmU9IiIsSWU9amUudHJpbSgpKTooUmU9amUuc3Vic3RyKDAsRmUpLnRyaW0oKSxJZT1qZS5zdWJzdHIoRmUrMSkudHJpbSgpKSxLLnRlc3QoUmUpfHxLLnRlc3QoSWUpKXJldHVybjtjb25zdCBWZT1uZXcgb3Q7cmV0dXJuIFZlLmtleT1SZSxWZS52YWx1ZT1J''@;'; put 'put ''ZSxWZX0oLTE9PT1GZT9qZTpqZS5zdWJzdHIoMCxGZSksISFEZS5sb29zZSk7aWYoIUllKXJldHVybjtpZigtMT09PUZlKXJldHVybiBJZTtjb25zdCBWZT1qZS5zbGljZShGZSsxKS50cmltKCk7aWYoMD09PVZlLmxlbmd0aClyZXR1cm4gSWU7Y29uc3Qga2U9VmUuc3BsaXQoIjsiKTtmb3Io''@;'; put 'put ''O2tlLmxlbmd0aDspe2NvbnN0IEFlPWtlLnNoaWZ0KCkudHJpbSgpO2lmKDA9PT1BZS5sZW5ndGgpY29udGludWU7Y29uc3QgX3Q9QWUuaW5kZXhPZigiPSIpO2xldCBudCxRZTtzd2l0Y2goLTE9PT1fdD8obnQ9QWUsUWU9bnVsbCk6KG50PUFlLnN1YnN0cigwLF90KSxRZT1BZS5zdWJzdHIo''@;'; put 'put ''X3QrMSkpLG50PW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpLFFlJiYoUWU9UWUudHJpbSgpKSxudCl7Y2FzZSJleHBpcmVzIjppZihRZSl7Y29uc3QgeXQ9cChRZSk7eXQmJihJZS5leHBpcmVzPXl0KX1icmVhaztjYXNlIm1heC1hZ2UiOmlmKFFlJiYvXi0/WzAtOV0rJC8udGVzdChRZSkpe2Nv''@;'; put 'put ''bnN0IHl0PXBhcnNlSW50KFFlLDEwKTtJZS5zZXRNYXhBZ2UoeXQpfWJyZWFrO2Nhc2UiZG9tYWluIjppZihRZSl7Y29uc3QgeXQ9UWUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpO3l0JiYoSWUuZG9tYWluPXl0LnRvTG93ZXJDYXNlKCkpfWJyZWFrO2Nhc2UicGF0aCI6SWUucGF0aD1RZSYm''@;'; put 'put ''Ii8iPT09UWVbMF0/UWU6bnVsbDticmVhaztjYXNlInNlY3VyZSI6SWUuc2VjdXJlPSEwO2JyZWFrO2Nhc2UiaHR0cG9ubHkiOkllLmh0dHBPbmx5PSEwO2JyZWFrO2Nhc2Uic2FtZXNpdGUiOnN3aXRjaChRZT9RZS50b0xvd2VyQ2FzZSgpOiIiKXtjYXNlInN0cmljdCI6SWUuc2FtZVNpdGU9''@;'; put 'put ''InN0cmljdCI7YnJlYWs7Y2FzZSJsYXgiOkllLnNhbWVTaXRlPSJsYXgiO2JyZWFrO2Nhc2Uibm9uZSI6SWUuc2FtZVNpdGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6SWUuc2FtZVNpdGU9dm9pZCAwfWJyZWFrO2RlZmF1bHQ6SWUuZXh0ZW5zaW9ucz1JZS5leHRlbnNpb25zfHxbXSxJZS5leHRl''@;'; put 'put ''bnNpb25zLnB1c2goQWUpfX1yZXR1cm4gSWV9ZnVuY3Rpb24gYWUoamUpe2xldCBEZTt0cnl7RGU9SlNPTi5wYXJzZShqZSl9Y2F0Y2goRmUpe3JldHVybiBGZX1yZXR1cm4gRGV9ZnVuY3Rpb24gdGUoamUpe2lmKCFqZXx8Ri5pc0VtcHR5U3RyaW5nKGplKSlyZXR1cm4gbnVsbDtsZXQgRGU7''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiBqZSl7aWYoRGU9YWUoamUpLERlIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIG51bGx9ZWxzZSBEZT1qZTtjb25zdCBGZT1uZXcgb3Q7Zm9yKGxldCBSZT0wO1JlPG90LnNlcmlhbGl6YWJsZVByb3BlcnRpZXMubGVuZ3RoO1JlKyspe2NvbnN0IEllPW90LnNl''@;'; put 'put ''cmlhbGl6YWJsZVByb3BlcnRpZXNbUmVdO3ZvaWQgMD09PURlW0llXXx8RGVbSWVdPT09SmVbSWVdfHwoRmVbSWVdPSJleHBpcmVzIj09PUllfHwiY3JlYXRpb24iPT09SWV8fCJsYXN0QWNjZXNzZWQiPT09SWU/bnVsbD09PURlW0llXT9udWxsOiJJbmZpbml0eSI9PURlW0llXT8iSW5maW5p''@;'; put 'put ''dHkiOm5ldyBEYXRlKERlW0llXSk6RGVbSWVdKX1yZXR1cm4gRmV9ZnVuY3Rpb24gc2UoamUsRGUpe0YudmFsaWRhdGUoRi5pc09iamVjdChqZSksamUpLEYudmFsaWRhdGUoRi5pc09iamVjdChEZSksRGUpO2xldCBGZT0wO3JldHVybiBGZT0oRGUucGF0aD9EZS5wYXRoLmxlbmd0aDowKS0o''@;'; put 'put ''amUucGF0aD9qZS5wYXRoLmxlbmd0aDowKSwwIT09RmV8fChGZT0oamUuY3JlYXRpb24/amUuY3JlYXRpb24uZ2V0VGltZSgpOmVlKS0oRGUuY3JlYXRpb24/RGUuY3JlYXRpb24uZ2V0VGltZSgpOmVlKSwwIT09RmV8fChGZT1qZS5jcmVhdGlvbkluZGV4LURlLmNyZWF0aW9uSW5kZXgpKSxG''@;'; put 'put ''ZX1mdW5jdGlvbiBVZShqZSl7aWYoamUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGplO3RyeXtqZT1kZWNvZGVVUkkoamUpfWNhdGNoe31yZXR1cm4gXyhqZSl9Y29uc3QgSmU9e2tleToiIix2YWx1ZToiIixleHBpcmVzOiJJbmZpbml0eSIsbWF4QWdlOm51bGwsZG9tYWluOm51bGwscGF0''@;'; put 'put ''aDpudWxsLHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxwYXRoSXNEZWZhdWx0Om51bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6bnVsbCxzYW1lU2l0ZTp2b2lkIDB9O2NsYXNzIG90e2NvbnN0cnVjdG9yKERlPXt9KXtjb25zdCBGZT1O''@;'; put 'put ''KCk7RmUmJih0aGlzW0ZlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxKZSxEZSksdGhpcy5jcmVhdGlvbj10aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY3JlYXRpb25JbmRleCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxl''@;'; put 'put ''OiExLHdyaXRhYmxlOiEwLHZhbHVlOisrb3QuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3QgRGU9RGF0ZS5ub3coKSxGZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9zdE9ubHk6Ij8iLFJlPXRoaXMuY3JlYXRpb24/RGUtdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoi''@;'; put 'put ''PyIsSWU9dGhpcy5sYXN0QWNjZXNzZWQ/RGUtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6Ij8iO3JldHVybmBDb29raWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9ubHk9JHtGZX07IGFBZ2U9JHtJZX07IGNBZ2U9JHtSZX0iYH10b0pTT04oKXtjb25zdCBEZT17fTtmb3Io''@;'; put 'put ''Y29uc3QgRmUgb2Ygb3Quc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW0ZlXSE9PUplW0ZlXSYmKCJleHBpcmVzIj09PUZlfHwiY3JlYXRpb24iPT09RmV8fCJsYXN0QWNjZXNzZWQiPT09RmU/RGVbRmVdPW51bGw9PT10aGlzW0ZlXT9udWxsOiJJbmZpbml0eSI9PXRoaXNbRmVdPyJJbmZp''@;'; put 'put ''bml0eSI6dGhpc1tGZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PUZlP251bGwhPT10aGlzW0ZlXSYmKERlW0ZlXT10aGlzW0ZlXT09MS8wfHx0aGlzW0ZlXT09LTEvMD90aGlzW0ZlXS50b1N0cmluZygpOnRoaXNbRmVdKTp0aGlzW0ZlXSE9PUplW0ZlXSYmKERlW0ZlXT10aGlzW0ZlXSkp''@;'; put 'put ''O3JldHVybiBEZX1jbG9uZSgpe3JldHVybiB0ZSh0aGlzLnRvSlNPTigpKX12YWxpZGF0ZSgpe2lmKCFMLnRlc3QodGhpcy52YWx1ZSl8fHRoaXMuZXhwaXJlcyE9MS8wJiYhKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGUpJiYhcCh0aGlzLmV4cGlyZXMpfHxudWxsIT10aGlzLm1heEFn''@;'; put 'put ''ZSYmdGhpcy5tYXhBZ2U8PTB8fG51bGwhPXRoaXMucGF0aCYmIVcudGVzdCh0aGlzLnBhdGgpKXJldHVybiExO2NvbnN0IERlPXRoaXMuY2RvbWFpbigpO3JldHVybiEoRGUmJihEZS5tYXRjaCgvXC4kLyl8fG51bGw9PWcuZ2V0UHVibGljU3VmZml4KERlKSkpfXNldEV4cGlyZXMoRGUpe3Ro''@;'; put 'put ''aXMuZXhwaXJlcz1EZSBpbnN0YW5jZW9mIERhdGU/RGU6cChEZSl8fCJJbmZpbml0eSJ9c2V0TWF4QWdlKERlKXt0aGlzLm1heEFnZT1EZT09PTEvMHx8RGU9PT0tMS8wP0RlLnRvU3RyaW5nKCk6RGV9Y29va2llU3RyaW5nKCl7bGV0IERlPXRoaXMudmFsdWU7cmV0dXJuIG51bGw9PURlJiYo''@;'; put 'put ''RGU9IiIpLCIiPT09dGhpcy5rZXk/RGU6YCR7dGhpcy5rZXl9PSR7RGV9YH10b1N0cmluZygpe2xldCBEZT10aGlzLmNvb2tpZVN0cmluZygpO2lmKHRoaXMuZXhwaXJlcyE9MS8wJiYodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZT9EZSs9YDsgRXhwaXJlcz0ke2IodGhpcy5leHBpcmVz''@;'; put 'put ''KX1gOkRlKz1gOyBFeHBpcmVzPSR7dGhpcy5leHBpcmVzfWApLG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZSE9MS8wJiYoRGUrPWA7IE1heC1BZ2U9JHt0aGlzLm1heEFnZX1gKSx0aGlzLmRvbWFpbiYmIXRoaXMuaG9zdE9ubHkmJihEZSs9YDsgRG9tYWluPSR7dGhpcy5kb21haW59''@;'; put 'put ''YCksdGhpcy5wYXRoJiYoRGUrPWA7IFBhdGg9JHt0aGlzLnBhdGh9YCksdGhpcy5zZWN1cmUmJihEZSs9IjsgU2VjdXJlIiksdGhpcy5odHRwT25seSYmKERlKz0iOyBIdHRwT25seSIpLHRoaXMuc2FtZVNpdGUmJiJub25lIiE9PXRoaXMuc2FtZVNpdGUpe2NvbnN0IEZlPW90LnNhbWVTaXRl''@;'; put 'put ''Q2Fub25pY2FsW3RoaXMuc2FtZVNpdGUudG9Mb3dlckNhc2UoKV07RGUrPWA7IFNhbWVTaXRlPSR7RmV8fHRoaXMuc2FtZVNpdGV9YH1yZXR1cm4gdGhpcy5leHRlbnNpb25zJiZ0aGlzLmV4dGVuc2lvbnMuZm9yRWFjaChGZT0+e0RlKz1gOyAke0ZlfWB9KSxEZX1UVEwoRGUpe2lmKG51bGwh''@;'; put 'put ''PXRoaXMubWF4QWdlKXJldHVybiB0aGlzLm1heEFnZTw9MD8wOjFlMyp0aGlzLm1heEFnZTtsZXQgRmU9dGhpcy5leHBpcmVzO3JldHVybiBGZSE9MS8wPyhGZSBpbnN0YW5jZW9mIERhdGV8fChGZT1wKEZlKXx8MS8wKSxGZT09MS8wPzEvMDpGZS5nZXRUaW1lKCktKERlfHxEYXRlLm5vdygp''@;'; put 'put ''KSk6MS8wfWV4cGlyeVRpbWUoRGUpe2lmKG51bGwhPXRoaXMubWF4QWdlKXtjb25zdCBSZT10aGlzLm1heEFnZTw9MD8tMS8wOjFlMyp0aGlzLm1heEFnZTtyZXR1cm4oRGV8fHRoaXMuY3JlYXRpb258fG5ldyBEYXRlKS5nZXRUaW1lKCkrUmV9cmV0dXJuIHRoaXMuZXhwaXJlcz09MS8wPzEv''@;'; put 'put ''MDp0aGlzLmV4cGlyZXMuZ2V0VGltZSgpfWV4cGlyeURhdGUoRGUpe2NvbnN0IEZlPXRoaXMuZXhwaXJ5VGltZShEZSk7cmV0dXJuIEZlPT0xLzA/bmV3IERhdGUoZWUpOkZlPT0tMS8wP25ldyBEYXRlKDApOm5ldyBEYXRlKEZlKX1pc1BlcnNpc3RlbnQoKXtyZXR1cm4gbnVsbCE9dGhpcy5t''@;'; put 'put ''YXhBZ2V8fHRoaXMuZXhwaXJlcyE9MS8wfWNhbm9uaWNhbGl6ZWREb21haW4oKXtyZXR1cm4gbnVsbD09dGhpcy5kb21haW4/bnVsbDp4KHRoaXMuZG9tYWluKX1jZG9tYWluKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsaXplZERvbWFpbigpfX1mdW5jdGlvbiBNZShqZSl7aWYobnVsbCE9amUp''@;'; put 'put ''e2NvbnN0IERlPWplLnRvTG93ZXJDYXNlKCk7c3dpdGNoKERlKXtjYXNlIGxlLlNUUklDVDpjYXNlIGxlLlNJTEVOVDpjYXNlIGxlLkRJU0FCTEVEOnJldHVybiBEZX19cmV0dXJuIGxlLlNJTEVOVH1vdC5jb29raWVzQ3JlYXRlZD0wLG90LnBhcnNlPUUsb3QuZnJvbUpTT049dGUsb3Quc2Vy''@;'; put 'put ''aWFsaXphYmxlUHJvcGVydGllcz1PYmplY3Qua2V5cyhKZSksb3Quc2FtZVNpdGVMZXZlbD17c3RyaWN0OjMsbGF4OjIsbm9uZToxfSxvdC5zYW1lU2l0ZUNhbm9uaWNhbD17c3RyaWN0OiJTdHJpY3QiLGxheDoiTGF4In07Y2xhc3MgdmV7Y29uc3RydWN0b3IoRGUsRmU9e3JlamVjdFB1Ymxp''@;'; put 'put ''Y1N1ZmZpeGVzOiEwfSl7ImJvb2xlYW4iPT10eXBlb2YgRmUmJihGZT17cmVqZWN0UHVibGljU3VmZml4ZXM6RmV9KSxGLnZhbGlkYXRlKEYuaXNPYmplY3QoRmUpLEZlKSx0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzPUZlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLHRoaXMuZW5hYmxlTG9vc2VN''@;'; put 'put ''b2RlPSEhRmUubG9vc2VNb2RlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluPSJib29sZWFuIiE9dHlwZW9mIEZlLmFsbG93U3BlY2lhbFVzZURvbWFpbnx8RmUuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHRoaXMuc3RvcmU9RGV8fG5ldyB3LHRoaXMucHJlZml4U2VjdXJpdHk9TWUoRmUucHJl''@;'; put 'put ''Zml4U2VjdXJpdHkpLHRoaXMuX2Nsb25lU3luYz1YZSgiY2xvbmUiKSx0aGlzLl9pbXBvcnRDb29raWVzU3luYz1YZSgiX2ltcG9ydENvb2tpZXMiKSx0aGlzLmdldENvb2tpZXNTeW5jPVhlKCJnZXRDb29raWVzIiksdGhpcy5nZXRDb29raWVTdHJpbmdTeW5jPVhlKCJnZXRDb29raWVTdHJp''@;'; put 'put ''bmciKSx0aGlzLmdldFNldENvb2tpZVN0cmluZ3NTeW5jPVhlKCJnZXRTZXRDb29raWVTdHJpbmdzIiksdGhpcy5yZW1vdmVBbGxDb29raWVzU3luYz1YZSgicmVtb3ZlQWxsQ29va2llcyIpLHRoaXMuc2V0Q29va2llU3luYz1YZSgic2V0Q29va2llIiksdGhpcy5zZXJpYWxpemVTeW5jPVhl''@;'; put 'put ''KCJzZXJpYWxpemUiKX1zZXRDb29raWUoRGUsRmUsUmUsSWUpe2xldCBWZTtpZihGLnZhbGlkYXRlKEYuaXNOb25FbXB0eVN0cmluZyhGZSksSWUsUmUpLEYuaXNGdW5jdGlvbihGZSkpcmV0dXJuKEllPUZlKShuZXcgRXJyb3IoIk5vIFVSTCB3YXMgc3BlY2lmaWVkIikpO2NvbnN0IGtlPVVl''@;'; put 'put ''KEZlKTtpZihGLmlzRnVuY3Rpb24oUmUpJiYoSWU9UmUsUmU9e30pLEYudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEllKSxJZSksIUYuaXNOb25FbXB0eVN0cmluZyhEZSkmJiFGLmlzT2JqZWN0KERlKSYmRGUgaW5zdGFuY2VvZiBTdHJpbmcmJjA9PURlLmxlbmd0aClyZXR1cm4gSWUobnVsbCk7''@;'; put 'put ''Y29uc3QgQWU9eChrZS5ob3N0bmFtZSksX3Q9UmUubG9vc2V8fHRoaXMuZW5hYmxlTG9vc2VNb2RlO2xldCBudD1udWxsO2lmKFJlLnNhbWVTaXRlQ29udGV4dCYmKG50PWllKFJlLnNhbWVTaXRlQ29udGV4dCksIW50KSlyZXR1cm4gSWUobmV3IEVycm9yKG5lKSk7aWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBEZXx8RGUgaW5zdGFuY2VvZiBTdHJpbmcpe2lmKCEoRGU9b3QucGFyc2UoRGUse2xvb3NlOl90fSkpKXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBmYWlsZWQgdG8gcGFyc2UiKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOlZlKX1lbHNlIGlmKCEoRGUgaW5zdGFuY2VvZiBvdCkp''@;'; put 'put ''cmV0dXJuIFZlPW5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gc2V0Q29va2llIG11c3QgYmUgYSBDb29raWUgb2JqZWN0IG9yIHN0cmluZyIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6VmUpO2NvbnN0IFFlPVJlLm5vd3x8bmV3IERhdGU7aWYodGhpcy5yZWplY3RQdWJsaWNTdWZmaXhl''@;'; put 'put ''cyYmRGUuZG9tYWluJiZudWxsPT1nLmdldFB1YmxpY1N1ZmZpeChEZS5jZG9tYWluKCkse2FsbG93U3BlY2lhbFVzZURvbWFpbjp0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixpZ25vcmVFcnJvcjpSZS5pZ25vcmVFcnJvcn0pJiYhVGUudGVzdChEZS5kb21haW4pKXJldHVybiBWZT1uZXcg''@;'; put 'put ''RXJyb3IoIkNvb2tpZSBoYXMgZG9tYWluIHNldCB0byBhIHB1YmxpYyBzdWZmaXgiKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtpZihEZS5kb21haW4pe2lmKCFDKEFlLERlLmNkb21haW4oKSwhMSkpcmV0dXJuIFZlPW5ldyBFcnJvcihgQ29va2llIG5vdCBpbiB0aGlzIGhvc3QncyBk''@;'; put 'put ''b21haW4uIENvb2tpZToke0RlLmNkb21haW4oKX0gUmVxdWVzdDoke0FlfWApLEllKFJlLmlnbm9yZUVycm9yP251bGw6VmUpO251bGw9PURlLmhvc3RPbmx5JiYoRGUuaG9zdE9ubHk9ITEpfWVsc2UgRGUuaG9zdE9ubHk9ITAsRGUuZG9tYWluPUFlO2lmKCghRGUucGF0aHx8Ii8iIT09RGUu''@;'; put 'put ''cGF0aFswXSkmJihEZS5wYXRoPVQoa2UucGF0aG5hbWUpLERlLnBhdGhJc0RlZmF1bHQ9ITApLCExPT09UmUuaHR0cCYmRGUuaHR0cE9ubHkpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksSWUoUmUuaWdub3JlRXJy''@;'; put 'put ''b3I/bnVsbDpWZSk7aWYoIm5vbmUiIT09RGUuc2FtZVNpdGUmJnZvaWQgMCE9PURlLnNhbWVTaXRlJiZudCYmIm5vbmUiPT09bnQpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGlzIFNhbWVTaXRlIGJ1dCB0aGlzIGlzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QiKSxJZShSZS5pZ25vcmVF''@;'; put 'put ''cnJvcj9udWxsOlZlKTtjb25zdCB1bj10aGlzLnByZWZpeFNlY3VyaXR5PT09bGUuU0lMRU5UO2lmKHRoaXMucHJlZml4U2VjdXJpdHkhPT1sZS5ESVNBQkxFRCl7bGV0ICRlLGl0PSExO2lmKGZ1bmN0aW9uIG0oamUpe3JldHVybiBGLnZhbGlkYXRlKEYuaXNPYmplY3QoamUpLGplKSwhamUu''@;'; put 'put ''a2V5LnN0YXJ0c1dpdGgoIl9fU2VjdXJlLSIpfHxqZS5zZWN1cmV9KERlKT9mdW5jdGlvbiBBKGplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzT2JqZWN0KGplKSksIWplLmtleS5zdGFydHNXaXRoKCJfX0hvc3QtIil8fGplLnNlY3VyZSYmamUuaG9zdE9ubHkmJm51bGwhPWplLnBhdGgmJiIv''@;'; put 'put ''Ij09PWplLnBhdGh9KERlKXx8KGl0PSEwLCRlPSJDb29raWUgaGFzIF9fSG9zdCBwcmVmaXggYnV0IGVpdGhlciBTZWN1cmUgb3IgSG9zdE9ubHkgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgUGF0aCBpcyBub3QgJy8nIik6KGl0PSEwLCRlPSJDb29raWUgaGFzIF9fU2VjdXJlIHByZWZpeCBi''@;'; put 'put ''dXQgU2VjdXJlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IiksaXQpcmV0dXJuIEllKFJlLmlnbm9yZUVycm9yfHx1bj9udWxsOm5ldyBFcnJvcigkZSkpfWNvbnN0IE10PXRoaXMuc3RvcmU7TXQudXBkYXRlQ29va2llfHwoTXQudXBkYXRlQ29va2llPWZ1bmN0aW9uKGl0LCRlLHR0KXt0aGlzLnB1''@;'; put 'put ''dENvb2tpZSgkZSx0dCl9KSxNdC5maW5kQ29va2llKERlLmRvbWFpbixEZS5wYXRoLERlLmtleSxmdW5jdGlvbiBEdChpdCwkZSl7aWYoaXQpcmV0dXJuIEllKGl0KTtjb25zdCB0dD1mdW5jdGlvbihIZSl7aWYoSGUpcmV0dXJuIEllKEhlKTtJZShudWxsLERlKX07aWYoJGUpe2lmKCExPT09''@;'; put 'put ''UmUuaHR0cCYmJGUuaHR0cE9ubHkpcmV0dXJuIGl0PW5ldyBFcnJvcigib2xkIENvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6aXQpO0RlLmNyZWF0aW9uPSRlLmNyZWF0aW9uLERlLmNyZWF0aW9uSW5kZXg9JGUu''@;'; put 'put ''Y3JlYXRpb25JbmRleCxEZS5sYXN0QWNjZXNzZWQ9UWUsTXQudXBkYXRlQ29va2llKCRlLERlLHR0KX1lbHNlIERlLmNyZWF0aW9uPURlLmxhc3RBY2Nlc3NlZD1RZSxNdC5wdXRDb29raWUoRGUsdHQpfSl9Z2V0Q29va2llcyhEZSxGZSxSZSl7Ri52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJp''@;'; put 'put ''bmcoRGUpLFJlLERlKTtjb25zdCBJZT1VZShEZSk7Ri5pc0Z1bmN0aW9uKEZlKSYmKFJlPUZlLEZlPXt9KSxGLnZhbGlkYXRlKEYuaXNPYmplY3QoRmUpLFJlLEZlKSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihSZSksUmUpO2NvbnN0IFZlPXgoSWUuaG9zdG5hbWUpLGtlPUllLnBhdGhuYW1l''@;'; put 'put ''fHwiLyI7bGV0IEFlPUZlLnNlY3VyZTtudWxsPT1BZSYmSWUucHJvdG9jb2wmJigiaHR0cHM6Ij09SWUucHJvdG9jb2x8fCJ3c3M6Ij09SWUucHJvdG9jb2wpJiYoQWU9ITApO2xldCBfdD0wO2lmKEZlLnNhbWVTaXRlQ29udGV4dCl7Y29uc3QgaXQ9aWUoRmUuc2FtZVNpdGVDb250ZXh0KTtp''@;'; put 'put ''ZihfdD1vdC5zYW1lU2l0ZUxldmVsW2l0XSwhX3QpcmV0dXJuIFJlKG5ldyBFcnJvcihuZSkpfWxldCBudD1GZS5odHRwO251bGw9PW50JiYobnQ9ITApO2NvbnN0IFFlPUZlLm5vd3x8RGF0ZS5ub3coKSx1bj0hMSE9PUZlLmV4cGlyZSx5dD0hIUZlLmFsbFBhdGhzLE10PXRoaXMuc3RvcmU7''@;'; put 'put ''ZnVuY3Rpb24gRHQoaXQpe2lmKGl0Lmhvc3RPbmx5KXtpZihpdC5kb21haW4hPVZlKXJldHVybiExfWVsc2UgaWYoIUMoVmUsaXQuZG9tYWluLCExKSlyZXR1cm4hMTtyZXR1cm4hKCF5dCYmIVAoa2UsaXQucGF0aCl8fGl0LnNlY3VyZSYmIUFlfHxpdC5odHRwT25seSYmIW50fHxfdCYmb3Qu''@;'; put 'put ''c2FtZVNpdGVMZXZlbFtpdC5zYW1lU2l0ZXx8Im5vbmUiXT5fdHx8dW4mJml0LmV4cGlyeVRpbWUoKTw9UWUmJihNdC5yZW1vdmVDb29raWUoaXQuZG9tYWluLGl0LnBhdGgsaXQua2V5LCgpPT57fSksMSkpfU10LmZpbmRDb29raWVzKFZlLHl0P251bGw6a2UsdGhpcy5hbGxvd1NwZWNpYWxV''@;'; put 'put ''c2VEb21haW4sKGl0LCRlKT0+e2lmKGl0KXJldHVybiBSZShpdCk7JGU9JGUuZmlsdGVyKER0KSwhMSE9PUZlLnNvcnQmJigkZT0kZS5zb3J0KHNlKSk7Y29uc3QgdHQ9bmV3IERhdGU7Zm9yKGNvbnN0IEhlIG9mICRlKUhlLmxhc3RBY2Nlc3NlZD10dDtSZShudWxsLCRlKX0pfWdldENvb2tp''@;'; put 'put ''ZVN0cmluZyguLi5EZSl7Y29uc3QgRmU9RGUucG9wKCk7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRmUpLEZlKSxEZS5wdXNoKGZ1bmN0aW9uKEllLFZlKXtJZT9GZShJZSk6RmUobnVsbCxWZS5zb3J0KHNlKS5tYXAoa2U9PmtlLmNvb2tpZVN0cmluZygpKS5qb2luKCI7ICIpKX0pLHRoaXMu''@;'; put 'put ''Z2V0Q29va2llcy5hcHBseSh0aGlzLERlKX1nZXRTZXRDb29raWVTdHJpbmdzKC4uLkRlKXtjb25zdCBGZT1EZS5wb3AoKTtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihGZSksRmUpLERlLnB1c2goZnVuY3Rpb24oSWUsVmUpe0llP0ZlKEllKTpGZShudWxsLFZlLm1hcChrZT0+a2UudG9TdHJp''@;'; put 'put ''bmcoKSkpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsRGUpfXNlcmlhbGl6ZShEZSl7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRGUpLERlKTtsZXQgRmU9dGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lO0YuaXNPYmplY3QoRmUpJiYoRmU9bnVsbCk7Y29uc3QgUmU9e3ZlcnNpb246''@;'; put 'put ''YHRvdWdoLWNvb2tpZUAke099YCxzdG9yZVR5cGU6RmUscmVqZWN0UHVibGljU3VmZml4ZXM6ISF0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGVuYWJsZUxvb3NlTW9kZTohIXRoaXMuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjohIXRoaXMuYWxsb3dTcGVjaWFsVXNl''@;'; put 'put ''RG9tYWluLHByZWZpeFNlY3VyaXR5Ok1lKHRoaXMucHJlZml4U2VjdXJpdHkpLGNvb2tpZXM6W119O2lmKCF0aGlzLnN0b3JlLmdldEFsbENvb2tpZXN8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMpcmV0dXJuIERlKG5ldyBFcnJvcigic3RvcmUgZG9lcyBu''@;'; put 'put ''b3Qgc3VwcG9ydCBnZXRBbGxDb29raWVzIGFuZCBjYW5ub3QgYmUgc2VyaWFsaXplZCIpKTt0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMoKEllLFZlKT0+SWU/RGUoSWUpOihSZS5jb29raWVzPVZlLm1hcChrZT0+KGRlbGV0ZShrZT1rZSBpbnN0YW5jZW9mIG90P2tlLnRvSlNPTigpOmtlKS5j''@;'; put 'put ''cmVhdGlvbkluZGV4LGtlKSksRGUobnVsbCxSZSkpKX10b0pTT04oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVTeW5jKCl9X2ltcG9ydENvb2tpZXMoRGUsRmUpe2xldCBSZT1EZS5jb29raWVzO2lmKCFSZXx8IUFycmF5LmlzQXJyYXkoUmUpKXJldHVybiBGZShuZXcgRXJyb3IoInNlcmlhbGl6''@;'; put 'put ''ZWQgamFyIGhhcyBubyBjb29raWVzIGFycmF5IikpO1JlPVJlLnNsaWNlKCk7Y29uc3QgSWU9VmU9PntpZihWZSlyZXR1cm4gRmUoVmUpO2lmKCFSZS5sZW5ndGgpcmV0dXJuIEZlKFZlLHRoaXMpO2xldCBrZTt0cnl7a2U9dGUoUmUuc2hpZnQoKSl9Y2F0Y2goQWUpe3JldHVybiBGZShBZSl9''@;'; put 'put ''aWYobnVsbD09PWtlKXJldHVybiBJZShudWxsKTt0aGlzLnN0b3JlLnB1dENvb2tpZShrZSxJZSl9O0llKCl9Y2xvbmUoRGUsRmUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoRmU9RGUsRGU9bnVsbCksdGhpcy5zZXJpYWxpemUoKFJlLEllKT0+e2lmKFJlKXJldHVybiBGZShSZSk7dmUuZGVz''@;'; put 'put ''ZXJpYWxpemUoSWUsRGUsRmUpfSl9Y2xvbmVTeW5jKERlKXtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKCk7aWYoIURlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIGNsb25lIGRlc3RpbmF0aW9uIHN0b3JlIGlzIG5vdCBzeW5j''@;'; put 'put ''aHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzLl9jbG9uZVN5bmMoRGUpfXJlbW92ZUFsbENvb2tpZXMoRGUpe0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKERlKSxEZSk7Y29uc3QgRmU9dGhpcy5zdG9yZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgRmUucmVtb3Zl''@;'; put 'put ''QWxsQ29va2llcyYmRmUucmVtb3ZlQWxsQ29va2llcyE9PUIucHJvdG90eXBlLnJlbW92ZUFsbENvb2tpZXMpcmV0dXJuIEZlLnJlbW92ZUFsbENvb2tpZXMoRGUpO0ZlLmdldEFsbENvb2tpZXMoKFJlLEllKT0+e2lmKFJlKXJldHVybiBEZShSZSk7aWYoMD09PUllLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''RGUobnVsbCk7bGV0IFZlPTA7Y29uc3Qga2U9W107ZnVuY3Rpb24gQWUoX3Qpe2lmKF90JiZrZS5wdXNoKF90KSxWZSsrLFZlPT09SWUubGVuZ3RoKXJldHVybiBEZShrZS5sZW5ndGg/a2VbMF06bnVsbCl9SWUuZm9yRWFjaChfdD0+e0ZlLnJlbW92ZUNvb2tpZShfdC5kb21haW4sX3QucGF0''@;'; put 'put ''aCxfdC5rZXksQWUpfSl9KX1zdGF0aWMgZGVzZXJpYWxpemUoRGUsRmUsUmUpe2xldCBJZTtpZigzIT09YXJndW1lbnRzLmxlbmd0aCYmKFJlPUZlLEZlPW51bGwpLEYudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKFJlKSxSZSksInN0cmluZyI9PXR5cGVvZiBEZSl7aWYoSWU9YWUoRGUpLEllIGlu''@;'; put 'put ''c3RhbmNlb2YgRXJyb3IpcmV0dXJuIFJlKEllKX1lbHNlIEllPURlO2NvbnN0IFZlPW5ldyB2ZShGZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6SWUucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOkllLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46SWUuYWxsb3dT''@;'; put 'put ''cGVjaWFsVXNlRG9tYWluLHByZWZpeFNlY3VyaXR5OkllLnByZWZpeFNlY3VyaXR5fSk7VmUuX2ltcG9ydENvb2tpZXMoSWUsa2U9PntpZihrZSlyZXR1cm4gUmUoa2UpO1JlKG51bGwsVmUpfSl9c3RhdGljIGRlc2VyaWFsaXplU3luYyhEZSxGZSl7Y29uc3QgUmU9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBEZT9KU09OLnBhcnNlKERlKTpEZSxJZT1uZXcgdmUoRmUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOlJlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpSZS5lbmFibGVMb29zZU1vZGV9KTtpZighSWUuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIg''@;'; put 'put ''c3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIEllLl9pbXBvcnRDb29raWVzU3luYyhSZSksSWV9fWZ1bmN0aW9uIFhlKGplKXtyZXR1cm4gZnVuY3Rpb24oLi4uRGUpe2lmKCF0aGlzLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO2xldCBGZSxSZTtpZih0aGlzW2plXSguLi5EZSwoSWUsVmUpPT57RmU9SWUsUmU9VmV9KSxGZSl0aHJvdyBGZTtyZXR1cm4gUmV9fXZlLmZyb21KU09OPXZlLmRlc2VyaWFs''@;'; put 'put ''aXplU3luYyxbIl9pbXBvcnRDb29raWVzIiwiY2xvbmUiLCJnZXRDb29raWVzIiwiZ2V0Q29va2llU3RyaW5nIiwiZ2V0U2V0Q29va2llU3RyaW5ncyIsInJlbW92ZUFsbENvb2tpZXMiLCJzZXJpYWxpemUiLCJzZXRDb29raWUiXS5mb3JFYWNoKGplPT57dmUucHJvdG90eXBlW2plXT16KHZl''@;'; put 'put ''LnByb3RvdHlwZVtqZV0pfSksdmUuZGVzZXJpYWxpemU9eih2ZS5kZXNlcmlhbGl6ZSksWC52ZXJzaW9uPU8sWC5Db29raWVKYXI9dmUsWC5Db29raWU9b3QsWC5TdG9yZT1CLFguTWVtb3J5Q29va2llU3RvcmU9dyxYLnBhcnNlRGF0ZT1wLFguZm9ybWF0RGF0ZT1iLFgucGFyc2U9RSxYLmZy''@;'; put 'put ''b21KU09OPXRlLFguZG9tYWluTWF0Y2g9QyxYLmRlZmF1bHRQYXRoPVQsWC5wYXRoTWF0Y2g9UCxYLmdldFB1YmxpY1N1ZmZpeD1nLmdldFB1YmxpY1N1ZmZpeCxYLmNvb2tpZUNvbXBhcmU9c2UsWC5wZXJtdXRlRG9tYWluPXkoNzMyNCkucGVybXV0ZURvbWFpbixYLnBlcm11dGVQYXRoPWZ1''@;'; put 'put ''bmN0aW9uIHdlKGplKXtpZihGLnZhbGlkYXRlKEYuaXNTdHJpbmcoamUpKSwiLyI9PT1qZSlyZXR1cm5bIi8iXTtjb25zdCBEZT1bamVdO2Zvcig7amUubGVuZ3RoPjE7KXtjb25zdCBGZT1qZS5sYXN0SW5kZXhPZigiLyIpO2lmKDA9PT1GZSlicmVhaztqZT1qZS5zdWJzdHIoMCxGZSksRGUu''@;'; put 'put ''cHVzaChqZSl9cmV0dXJuIERlLnB1c2goIi8iKSxEZX0sWC5jYW5vbmljYWxEb21haW49eCxYLlByZWZpeFNlY3VyaXR5RW51bT1sZSxYLlBhcmFtZXRlckVycm9yPUYuUGFyYW1ldGVyRXJyb3J9LDU3NjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Y29uc3R7ZnJvbUNhbGxiYWNrOl99PXko''@;'; put 'put ''NzA0MSksZz15KDIyMjQpLnksQj15KDczMjQpLnBlcm11dGVEb21haW4sdz15KDg5NzEpLlUse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6UCxnZXRVdGlsSW5zcGVjdDpGfT15KDEyNjkpO2NsYXNzIE8gZXh0ZW5kcyBne2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnN5bmNocm9ub3VzPSEw''@;'; put 'put ''LHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3QgVT1QKCk7VSYmKHRoaXNbVV09dGhpcy5pbnNwZWN0KX1pbnNwZWN0KCl7cmV0dXJuYHsgaWR4OiAke0YoeikodGhpcy5pZHgsITEsMil9IH1gfWZpbmRDb29raWUoVSxXLFkscSl7cmV0dXJuIHEobnVsbCx0aGlzLmlkeFtVXSYm''@;'; put 'put ''dGhpcy5pZHhbVV1bV10/dGhpcy5pZHhbVV1bV11bWV18fG51bGw6dm9pZCAwKX1maW5kQ29va2llcyhVLFcsWSxxKXtjb25zdCBlZT1bXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgWSYmKHE9WSxZPSEwKSwhVSlyZXR1cm4gcShudWxsLFtdKTtsZXQgSjtKPVc/ZnVuY3Rpb24obWUpe09iamVj''@;'; put 'put ''dC5rZXlzKG1lKS5mb3JFYWNoKF9lPT57aWYodyhXLF9lKSl7Y29uc3QgVGU9bWVbX2VdO2Zvcihjb25zdCBTZSBpbiBUZSllZS5wdXNoKFRlW1NlXSl9fSl9OmZ1bmN0aW9uKG1lKXtmb3IoY29uc3QgX2UgaW4gbWUpe2NvbnN0IFRlPW1lW19lXTtmb3IoY29uc3QgU2UgaW4gVGUpZWUucHVz''@;'; put 'put ''aChUZVtTZV0pfX07Y29uc3QgbmU9QihVLFkpfHxbVV0saWU9dGhpcy5pZHg7bmUuZm9yRWFjaChsZT0+e2NvbnN0IG1lPWllW2xlXTttZSYmSihtZSl9KSxxKG51bGwsZWUpfXB1dENvb2tpZShVLFcpe3RoaXMuaWR4W1UuZG9tYWluXXx8KHRoaXMuaWR4W1UuZG9tYWluXT1PYmplY3QuY3Jl''@;'; put 'put ''YXRlKG51bGwpKSx0aGlzLmlkeFtVLmRvbWFpbl1bVS5wYXRoXXx8KHRoaXMuaWR4W1UuZG9tYWluXVtVLnBhdGhdPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W1UuZG9tYWluXVtVLnBhdGhdW1Uua2V5XT1VLFcobnVsbCl9dXBkYXRlQ29va2llKFUsVyxZKXt0aGlzLnB1dENvb2tp''@;'; put 'put ''ZShXLFkpfXJlbW92ZUNvb2tpZShVLFcsWSxxKXt0aGlzLmlkeFtVXSYmdGhpcy5pZHhbVV1bV10mJnRoaXMuaWR4W1VdW1ddW1ldJiZkZWxldGUgdGhpcy5pZHhbVV1bV11bWV0scShudWxsKX1yZW1vdmVDb29raWVzKFUsVyxZKXtyZXR1cm4gdGhpcy5pZHhbVV0mJihXP2RlbGV0ZSB0aGlz''@;'; put 'put ''LmlkeFtVXVtXXTpkZWxldGUgdGhpcy5pZHhbVV0pLFkobnVsbCl9cmVtb3ZlQWxsQ29va2llcyhVKXtyZXR1cm4gdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKSxVKG51bGwpfWdldEFsbENvb2tpZXMoVSl7Y29uc3QgVz1bXSxZPXRoaXMuaWR4O09iamVjdC5rZXlzKFkpLmZvckVhY2go''@;'; put 'put ''ZWU9PntPYmplY3Qua2V5cyhZW2VlXSkuZm9yRWFjaChuZT0+e09iamVjdC5rZXlzKFlbZWVdW25lXSkuZm9yRWFjaChsZT0+e251bGwhPT1sZSYmVy5wdXNoKFlbZWVdW25lXVtsZV0pfSl9KX0pLFcuc29ydCgoZWUsSik9PihlZS5jcmVhdGlvbkluZGV4fHwwKS0oSi5jcmVhdGlvbkluZGV4''@;'; put 'put ''fHwwKSksVShudWxsLFcpfX1mdW5jdGlvbiB6KEspe2NvbnN0IFU9T2JqZWN0LmtleXMoSyk7aWYoMD09PVUubGVuZ3RoKXJldHVybiJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge30iO2xldCBXPSJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuIjtyZXR1cm4gT2JqZWN0LmtleXMoSyku''@;'; put 'put ''Zm9yRWFjaCgoWSxxKT0+e1crPWZ1bmN0aW9uIE4oSyxVKXtsZXQgWT1gICAnJHtLfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhVKS5mb3JFYWNoKChxLGVlLEopPT57WSs9ZnVuY3Rpb24gTChLLFUpe2NvbnN0IFc9IiAgICAiO2xldCBZPWAk''@;'; put 'put ''e1d9JyR7S30nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoVSkuZm9yRWFjaCgocSxlZSxKKT0+e1krPWAgICAgICAke3F9OiAke1VbcV0uaW5zcGVjdCgpfWAsZWU8Si5sZW5ndGgtMSYmKFkrPSIsIiksWSs9IlxuIn0pLFkrPWAke1d9fWAsWX0o''@;'; put 'put ''cSxVW3FdKSxlZTxKLmxlbmd0aC0xJiYoWSs9IiwiKSxZKz0iXG4ifSksWSs9IiAgfSIsWX0oWSxLW1ldKSxxPFUubGVuZ3RoLTEmJihXKz0iLCIpLFcrPSJcbiJ9KSxXKz0ifSIsV31bImZpbmRDb29raWUiLCJmaW5kQ29va2llcyIsInB1dENvb2tpZSIsInVwZGF0ZUNvb2tpZSIsInJlbW92''@;'; put 'put ''ZUNvb2tpZSIsInJlbW92ZUNvb2tpZXMiLCJyZW1vdmVBbGxDb29raWVzIiwiZ2V0QWxsQ29va2llcyJdLmZvckVhY2goSz0+e08ucHJvdG90eXBlW0tdPV8oTy5wcm90b3R5cGVbS10pfSksWC5tPU99LDg5NzE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guVT1mdW5jdGlvbiB5KEksXyl7cmV0''@;'; put 'put ''dXJuIF89PT1JfHwwPT09SS5pbmRleE9mKF8pJiYoIi8iPT09Xy5zdWJzdHIoLTEpfHwiLyI9PT1JLnN1YnN0cihfLmxlbmd0aCwxKSl9fSw3MzI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9eSg3NTIpO1gucGVybXV0ZURvbWFpbj1mdW5jdGlvbiBfKGcsQil7Y29uc3Qgdz1J''@;'; put 'put ''LmdldFB1YmxpY1N1ZmZpeChnLHthbGxvd1NwZWNpYWxVc2VEb21haW46Qn0pO2lmKCF3KXJldHVybiBudWxsO2lmKHc9PWcpcmV0dXJuW2ddOyIuIj09Zy5zbGljZSgtMSkmJihnPWcuc2xpY2UoMCwtMSkpO2NvbnN0IEY9Zy5zbGljZSgwLC0ody5sZW5ndGgrMSkpLnNwbGl0KCIuIikucmV2''@;'; put 'put ''ZXJzZSgpO2xldCBPPXc7Y29uc3Qgej1bT107Zm9yKDtGLmxlbmd0aDspTz1gJHtGLnNoaWZ0KCl9LiR7T31gLHoucHVzaChPKTtyZXR1cm4gen19LDc1MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPXkoODU2NiksXz1bImxvY2FsIiwiZXhhbXBsZSIsImludmFsaWQiLCJsb2Nh''@;'; put 'put ''bGhvc3QiLCJ0ZXN0Il0sZz1bImxvY2FsaG9zdCIsImludmFsaWQiXTtYLmdldFB1YmxpY1N1ZmZpeD1mdW5jdGlvbiBCKHcsUD17fSl7Y29uc3QgRj13LnNwbGl0KCIuIiksTz1GW0YubGVuZ3RoLTFdLE49ISFQLmlnbm9yZUVycm9yO2lmKFAuYWxsb3dTcGVjaWFsVXNlRG9tYWluJiZfLmlu''@;'; put 'put ''Y2x1ZGVzKE8pKXtpZihGLmxlbmd0aD4xKXJldHVybmAke0ZbRi5sZW5ndGgtMl19LiR7T31gO2lmKGcuaW5jbHVkZXMoTykpcmV0dXJuYCR7T31gfWlmKCFOJiZfLmluY2x1ZGVzKE8pKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRoZSBwdWJsaWMgc3VmZml4''@;'; put 'put ''ICIke099IiB3aGljaCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8gYWxsb3cgdGhpcywgY29uZmlndXJlIHlvdXIgQ29va2llSmFyIHdpdGgge2FsbG93U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVybiBJLmdldCh3KX19LDIy''@;'; put 'put ''MjQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO1gueT1jbGFzcyB5e2NvbnN0cnVjdG9yKCl7dGhpcy5zeW5jaHJvbm91cz0hMX1maW5kQ29va2llKF8sZyxCLHcpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1maW5kQ29va2llcyhfLGcsQix3KXt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImZpbmRDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXB1dENvb2tpZShfLGcpe3Rocm93IG5ldyBFcnJvcigicHV0Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXVwZGF0ZUNvb2tpZShfLGcsQil7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVDb29raWUgaXMgbm90''@;'; put 'put ''IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llKF8sZyxCLHcpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZXMoXyxnLEIpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1v''@;'; put 'put ''dmVBbGxDb29raWVzKF8pe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1nZXRBbGxDb29raWVzKF8pe3Rocm93IG5ldyBFcnJvcigiZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fubm90IGJlIHNl''@;'; put 'put ''cmlhbGl6ZWQpIil9fX0sMTI2OToodWUsWCx5KT0+e2Z1bmN0aW9uIEkoKXt0cnl7cmV0dXJuIHkoOTUzOSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIF8oKXtyZXR1cm4gU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKX1YLmdldFV0aWxJbnNwZWN0PWZ1bmN0''@;'; put 'put ''aW9uKHcsUD17fSl7Y29uc3QgTz0oUC5yZXF1aXJlVXRpbHx8SSkoKTtyZXR1cm4gZnVuY3Rpb24oTixMLEspe3JldHVybiBPP08uaW5zcGVjdChOLEwsSyk6dyhOKX19LFguZ2V0Q3VzdG9tSW5zcGVjdFN5bWJvbD1mdW5jdGlvbih3PXt9KXtyZXR1cm4ody5sb29rdXBDdXN0b21JbnNwZWN0''@;'; put 'put ''U3ltYm9sfHxfKSgpfHxmdW5jdGlvbiBnKEIpe2NvbnN0IFA9KEIucmVxdWlyZVV0aWx8fEkpKCk7cmV0dXJuIFA/UC5pbnNwZWN0LmN1c3RvbTpudWxsfSh3KX19LDc2NTI6KHVlLFgpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoTil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE59ZnVu''@;'; put 'put ''Y3Rpb24gQihOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE58fE4gaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gdyhOKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PXRvU3RyaW5nLmNhbGwoTil9Y2xhc3MgeiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKC4uLkwpe3N1cGVyKC4uLkwp''@;'; put 'put ''fX1YLlBhcmFtZXRlckVycm9yPXosWC5pc0Z1bmN0aW9uPXksWC5pc05vbkVtcHR5U3RyaW5nPWZ1bmN0aW9uIEkoTil7cmV0dXJuIEIoTikmJiIiIT09Tn0sWC5pc0RhdGU9ZnVuY3Rpb24gXyhOKXtyZXR1cm4gZnVuY3Rpb24gUChOLEwpe3RyeXtyZXR1cm4gTiBpbnN0YW5jZW9mIEx9Y2F0''@;'; put 'put ''Y2h7cmV0dXJuITF9fShOLERhdGUpJiZmdW5jdGlvbiBGKE4pe3JldHVybiJudW1iZXIiPT10eXBlb2YgTiYmTiUxPT0wfShOLmdldFRpbWUoKSl9LFguaXNFbXB0eVN0cmluZz1mdW5jdGlvbiBnKE4pe3JldHVybiIiPT09Tnx8TiBpbnN0YW5jZW9mIFN0cmluZyYmIiI9PT1OLnRvU3RyaW5n''@;'; put 'put ''KCl9LFguaXNTdHJpbmc9QixYLmlzT2JqZWN0PXcsWC52YWxpZGF0ZT1mdW5jdGlvbiBPKE4sTCxLKXtpZih5KEwpfHwoSz1MLEw9bnVsbCksdyhLKXx8KEs9e0Vycm9yOiJGYWlsZWQgQ2hlY2sifSksIU4pe2lmKCFMKXRocm93IG5ldyB6KEspO0wobmV3IHooSykpfX19LDQ1Njp1ZT0+e3Vl''@;'; put 'put ''LmV4cG9ydHM9IjQuMS4zIn0sNzA0MToodWUsWCk9PnsidXNlIHN0cmljdCI7WC5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24oeSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSly''@;'; put 'put ''ZXR1cm4gbmV3IFByb21pc2UoKEksXyk9Pnthcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aF09KGcsQik9PntpZihnKXJldHVybiBfKGcpO0koQil9LGFyZ3VtZW50cy5sZW5ndGgrKyx5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3kuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwibmFtZSIse3Zh''@;'; put 'put ''bHVlOnkubmFtZX0pfSxYLmZyb21Qcm9taXNlPWZ1bmN0aW9uKHkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtjb25zdCBJPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJKXJldHVybiB5LmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKTtkZWxldGUgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYXJndW1lbnRzLmxlbmd0aC0tLHkuYXBwbHkodGhpcyxhcmd1bWVudHMpLnRoZW4oXz0+SShudWxsLF8pLEkpfSwibmFtZSIse3ZhbHVlOnkubmFtZX0pfX0sNjcyOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3co''@;'; put 'put ''WSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9''@;'; put 'put ''KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQ29udGV4dE1hbmFnZXI9dm9pZCAwO2NvbnN0IF89eSg1OTI4KSxnPXkoOTc3OCk7WC5Db250ZXh0TWFuYWdlcj1jbGFzcyBCe2dldCBnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0c31nZXQgZ2V0RGVmYXVsdExhdW5jaGVyQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0c31jb25zdHJ1Y3RvcihQLEYpe3RoaXMuc2VydmVyVXJsPVAsdGhpcy5yZXF1ZXN0Q2xpZW50PUYsdGhpcy5kZWZhdWx0''@;'; put 'put ''Q29tcHV0ZUNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJEYXRhIE1pbmluZyBjb21wdXRlIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsIlNBUyBNb2Rl''@;'; put 'put ''bCBNYW5hZ2VyIGNvbXB1dGUgY29udGV4dCIsIlNBUyBTdHVkaW8gY29tcHV0ZSBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBjb21wdXRlIGNvbnRleHQiXSx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBsYXVuY2hlciBjb250ZXh0''@;'; put 'put ''IiwiRGF0YSBNaW5pbmcgbGF1bmNoZXIgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkpvYiBGbG93IEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGxh''@;'; put 'put ''dW5jaGVyIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGxhdW5jaGVyIGNvbnRleHQiXSxQJiYoMCxfLmlzVXJsKShQKX1nZXRDb21wdXRlQ29udGV4dHMoUCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxQKS5jYXRjaCh6PT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0''@;'; put 'put ''ZSBjb250ZXh0cy4gIil9KTtyZXR1cm4oRiYmRi5pdGVtcz9GLml0ZW1zOltdKS5tYXAoej0+KHtjcmVhdGVkQnk6ei5jcmVhdGVkQnksaWQ6ei5pZCxuYW1lOnoubmFtZSx2ZXJzaW9uOnoudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhQKXtyZXR1cm4g''@;'; put 'put ''SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OkZ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxQKS5jYXRjaCh6PT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2Up''@;'; put 'put ''KHosIkVycm9yIHdoaWxlIGdldHRpbmcgbGF1bmNoZXIgY29udGV4dHMuICIpfSk7cmV0dXJuKEYmJkYuaXRlbXM/Ri5pdGVtczpbXSkubWFwKHo9Pih7Y3JlYXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVyc2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0p''@;'; put 'put ''fWNyZWF0ZUNvbXB1dGVDb250ZXh0KFAsRixPLHosTixMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFApLHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyxgQ29tcHV0''@;'; put 'put ''ZSBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dHMoTikpLmZpbmQoZWU9PmVlLm5hbWU9PT1QKSl0aHJvdyBuZXcgRXJyb3IoYENvbXB1dGUgY29udGV4dCAnJHtQfScgYWxyZWFkeSBleGlzdHMuYCk7aWYoRiYmIXRoaXMuZGVm''@;'; put 'put ''YXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoRikmJiEoeWllbGQgdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKE4pKS5maW5kKEo9PkoubmFtZT09PUYpKXtjb25zdCBKPWBUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgJHtGfWAsaWU9eWllbGQgdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRl''@;'; put 'put ''eHQoRixKLCJkaXJlY3QiLE4pLmNhdGNoKGxlPT57dGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAke2xlfWApfSk7aWYoIWllfHwhaWUubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRl''@;'; put 'put ''eHQuIik7Rj1pZS5uYW1lfWxldCBXPXtyZXVzZVNlcnZlclByb2Nlc3NlczohMH07TyYmKFc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFcpLHtydW5TZXJ2ZXJBczpPfSkpO2NvbnN0IFk9e25hbWU6UCxsYXVuY2hDb250ZXh0Ontjb250ZXh0TmFtZTpGfHwiIn0sYXR0cmlidXRl''@;'; put 'put ''czpXfTtMJiZMLmxlbmd0aD9ZLmF1dGhvcml6ZWRVc2Vycz1MOlkuYXV0aG9yaXplQWxsQXV0aGVudGljYXRlZFVzZXJzPSEwLHomJihZLmVudmlyb25tZW50PXthdXRvRXhlY0xpbmVzOnp9KTtjb25zdHtyZXN1bHQ6cX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5z''@;'; put 'put ''ZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHNgLFksTikuY2F0Y2goZWU9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoZWUsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGNvbXB1dGUgY29udGV4dC4gIil9KTtyZXR1cm4gcX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChQLEYsTz0iZGlyZWN0Iix6''@;'; put 'put ''KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIik7aWYodGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cyxgTGF1bmNoZXIgY29udGV4''@;'; put 'put ''dCAnJHtQfScgYWxyZWFkeSBleGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyh6KSkuZmluZChXPT5XLm5hbWU9PT1QKSl0aHJvdyBuZXcgRXJyb3IoYExhdW5jaGVyIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApO2NvbnN0IEs9e25hbWU6UCxkZXNjcmlw''@;'; put 'put ''dGlvbjpGLGxhdW5jaFR5cGU6T30se3Jlc3VsdDpVfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vbGF1bmNoZXIvY29udGV4dHNgLEsseikuY2F0Y2goVz0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKShXLCJFcnJvciB3aGlsZSBjcmVhdGluZyBs''@;'; put 'put ''YXVuY2hlciBjb250ZXh0LiAiKX0pO3JldHVybiBVfSl9ZWRpdENvbXB1dGVDb250ZXh0KFAsRixPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHo7dGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFApLHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVm''@;'; put 'put ''YXVsdENvbXB1dGVDb250ZXh0cywiRWRpdGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApLHo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLE8pLHp8fCh6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKEYuaWQs''@;'; put 'put ''TykpO2NvbnN0e3Jlc3VsdDpOLGV0YWc6TH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3ouaWR9YCxPKS5jYXRjaChLPT57dGhyb3cgSyYmNDA0PT09Sy5zdGF0dXM/bmV3IEVycm9yKGBUaGUgY29udGV4dCAnJHtQ''@;'; put 'put ''fScgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci5gKTpLfSk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYC9jb21wdXRlL2NvbnRleHRzLyR7Ti5pZH1gLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE4pLEYpLHthdHRyaWJ1dGVz''@;'; put 'put ''Ok9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxOLmF0dHJpYnV0ZXMpLEYuYXR0cmlidXRlcyl9KSxPLHsiSWYtTWF0Y2giOkx9KX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpP''@;'; put 'put ''fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2ZpbHRlcj1lcShuYW1lLCAiJHtQfSIpYCxGKS5jYXRjaCh6PT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250''@;'; put 'put ''ZXh0IGJ5IG5hbWUuICIpfSk7aWYoIU98fCFPLml0ZW1zfHwhTy5pdGVtcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGV4dCAnJHtQfScgd2FzIG5vdCBmb3VuZCBhdCAnJHt0aGlzLnNlcnZlclVybH0nLmApO3JldHVybiBPLml0ZW1zWzBdfSl9Z2V0Q29tcHV0ZUNvbnRleHRC''@;'; put 'put ''eUlkKFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpPfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7UH1gLEYpLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4''@;'; put 'put ''TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgaWQuICIpfSk7cmV0dXJuIE99KX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok99PXlpZWxkIHRoaXMu''@;'; put 'put ''cmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgLEY/LmFjY2Vzc190b2tlbikuY2F0Y2goVT0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSBmZXRjaGluZyBjb21wdXRlIGNvbnRleHRzLiIpfSks''@;'; put 'put ''ej1PLml0ZW1zfHxbXSxOPVtdLEw9ei5tYXAoVT0+e2NvbnN0IFc9WyIlcHV0ICY9c3lzdXNlcmlkOyJdO3JldHVybigpPT5QKGB0ZXN0LSR7VS5uYW1lfWAsVyxVLm5hbWUsRixudWxsLCExLCEwLCEwKS5jYXRjaChZPT5ZKX0pO2xldCBLPVtdO2Zvcihjb25zdCBVIG9mIEwpSy5wdXNoKHlp''@;'; put 'put ''ZWxkIFUoKSk7cmV0dXJuIEsuZm9yRWFjaCgoVSxXKT0+e2lmKFUmJlUubG9nKXRyeXtsZXQgcT0iIjtjb25zdCBlZT1VLmxvZy5zcGxpdCgiXG4iKS5maW5kKEo9Pkouc3RhcnRzV2l0aCgiU1lTVVNFUklEPSIpKTtlZSYmKHE9ZWUucmVwbGFjZSgiU1lTVVNFUklEPSIsIiIpLE4ucHVzaCh7''@;'; put 'put ''Y3JlYXRlZEJ5OnpbV10uY3JlYXRlZEJ5LGlkOnpbV10uaWQsbmFtZTp6W1ddLm5hbWUsdmVyc2lvbjp6W1ddLnZlcnNpb24sYXR0cmlidXRlczp7c3lzVXNlcklkOnF9fSkpfWNhdGNoKFkpe3Rocm93IFl9fSksTn0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KFAsRil7cmV0dXJuIEkodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkRlbGV0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCk7''@;'; put 'put ''Y29uc3Qgej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFAsRik7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt6LmlkfWAsRil9KX12YWxpZGF0ZUNvbnRleHROYW1lKFApe2lmKCFQ''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpfWlzRGVmYXVsdENvbnRleHQoUCxGPXRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyxPPSIiLHo9ITEpe2lmKEYuaW5jbHVkZXMoUCkpdGhyb3cgbmV3IEVycm9yKGAke099JHt6PyJcbkRlZmF1bHQgY29udGV4''@;'; put 'put ''dHM6IitGLm1hcCgoTixMKT0+YFxuJHtMKzF9LiAke059YCk6IiJ9YCl9fX0sODMwNjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyhMfHwoTD1Qcm9taXNlKSkoZnVuY3Rpb24oVyxZ''@;'; put 'put ''KXtmdW5jdGlvbiBxKG5lKXt0cnl7SihLLm5leHQobmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIGVlKG5lKXt0cnl7SihLLnRocm93KG5lKSl9Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlvbiBKKG5lKXtuZS5kb25lP1cobmUudmFsdWUpOmZ1bmN0aW9uIFUoVyl7cmV0dXJuIFcgaW5z''@;'; put 'put ''dGFuY2VvZiBMP1c6bmV3IEwoZnVuY3Rpb24oWSl7WShXKX0pfShuZS52YWx1ZSkudGhlbihxLGVlKX1KKChLPUsuYXBwbHkoeixOfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oeil7cmV0dXJuIHomJnouX19lc01vZHVsZT96OntkZWZh''@;'; put 'put ''dWx0Onp9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVM5QXBpQ2xpZW50PXZvaWQgMDtjb25zdCBnPXkoNzc1NyksQj1fKHkoNjIzMCkpLHc9eSg3OTUpLFA9eSg1OTI4KTtYLlNBUzlBcGlDbGllbnQ9Y2xhc3MgRntjb25zdHJ1Y3RvcihO''@;'; put 'put ''LEwsSyl7dGhpcy5zZXJ2ZXJVcmw9Tix0aGlzLmpvYnNQYXRoPUwsTiYmKDAsUC5pc1VybCkoTiksdGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyB3LlNhczlSZXF1ZXN0Q2xpZW50KE4sSyl9Z2V0Q29uZmlnKCl7cmV0dXJue3NlcnZlclVybDp0aGlzLnNlcnZlclVybH19c2V0Q29uZmlnKE4pe04m''@;'; put 'put ''Jih0aGlzLnNlcnZlclVybD1OKX1leGVjdXRlU2NyaXB0KE4sTCxLKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmxvZ2luKEwsSyx0aGlzLmpvYnNQYXRoKTtjb25zdCBXPU8oWy4uLk4sImRhdGEgX251bGxfOyIsImZp''@;'; put 'put ''bGUgX3dlYm91dDsiLCJwdXQgJ0V4ZWN1dGVkIHNhc2pzIHJ1bic7IiwicnVuOyJdLmpvaW4oIlxuIikpLFk9YC9Vc2VyIEZvbGRlcnMvJHtMfS9NeSBGb2xkZXIvc2FzanMvcnVubmVyYCxxPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK1cuZ2V0Qm91bmRhcnkoKSxKPXsiY2Fj''@;'; put 'put ''aGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6cSwiQ29udGVudC1MZW5ndGgiOlcuZ2V0TGVuZ3RoU3luYygpLENvbm5lY3Rpb246ImtlZXAtYWxpdmUifSxuZT1gJHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitZKyImX2RlYnVnPWxvZyJ9''@;'; put 'put ''YDtyZXR1cm4oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QobmUsVyx2b2lkIDAscSxKKSkucmVzdWx0fSl9fTtjb25zdCBPPXo9Pntjb25zdCBOPW5ldyBCLmRlZmF1bHQsTD1gc2FzanMtZXhlY3V0ZS1zYXM5LSR7KDAsZy5nZW5lcmF0ZVRpbWVzdGFtcCkoIiIpfS5zYXNgO3JldHVy''@;'; put 'put ''biBOLmFwcGVuZChMLHose2ZpbGVuYW1lOkwsY29udGVudFR5cGU6InRleHQvcGxhaW4ifSksTn19LDk4MjE6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24obmUsaWUsbGUsbWUpe3Jl''@;'; put 'put ''dHVybiBuZXcobGV8fChsZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKGIpe3RyeXtwKG1lLm5leHQoYikpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBWKGIpe3RyeXtwKG1lLnRocm93KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gcChiKXtiLmRvbmU/VGUo''@;'; put 'put ''Yi52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIGxlP1RlOm5ldyBsZShmdW5jdGlvbihTZSl7U2UoVGUpfSl9KGIudmFsdWUpLnRoZW4oemUsVil9cCgobWU9bWUuYXBwbHkobmUsaWV8fFtdKSkubmV4dCgpKX0pfSxCPXRoaXMmJnRoaXMuX19pbXBvcnREZWZh''@;'; put 'put ''dWx0fHxmdW5jdGlvbihuZSl7cmV0dXJuIG5lJiZuZS5fX2VzTW9kdWxlP25lOntkZWZhdWx0Om5lfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTVml5YUFwaUNsaWVudD12b2lkIDA7Y29uc3Qgdz15KDU5MjgpLFA9Qih5KDYyMzApKSxG''@;'; put 'put ''PXkoMTM5NSksTz15KDY5MDMpLHo9eSg2NzIpLE49eSg5MDk3KSxMPXkoOTc3OCksSz15KDEzNDMpLFU9eSg3MDQpLFc9eSg2NDk2KSxZPXkoMTYyMikscT15KDM1NjkpLGVlPXkoMzY2KTtYLlNBU1ZpeWFBcGlDbGllbnQ9Y2xhc3MgSntjb25zdHJ1Y3RvcihpZSxsZSxtZSxfZSl7dGhpcy5z''@;'; put 'put ''ZXJ2ZXJVcmw9aWUsdGhpcy5yb290Rm9sZGVyTmFtZT1sZSx0aGlzLmNvbnRleHROYW1lPW1lLHRoaXMucmVxdWVzdENsaWVudD1fZSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnNlc3Npb25NYW5hZ2VyPW5ldyBPLlNlc3Npb25NYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMuY29udGV4dE5hbWUs''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmNvbnRleHRNYW5hZ2VyPW5ldyB6LkNvbnRleHRNYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5mb2xkZXJNYXA9bmV3IE1hcCxpZSYmKDAsdy5pc1VybCkoaWUpfWFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpe3Ro''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKX1nZXQgZGVidWcoKXtyZXR1cm4gdGhpcy5fZGVidWd9c2V0IGRlYnVnKGllKXt0aGlzLl9kZWJ1Zz1pZSx0aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1pZSl9Z2V0Sm9ic0luRm9s''@;'; put 'put ''ZGVyKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7aWV9YDppZTtyZXR1cm4gdGhpcy5mb2xkZXJNYXAuZ2V0KGxlKXx8KHlpZWxkIHRoaXMucG9wdWxh''@;'; put 'put ''dGVGb2xkZXJNYXAobGUpKSx0aGlzLmZvbGRlck1hcC5nZXQobGUpfSl9Z2V0Q29uZmlnKCl7cmV0dXJue3NlcnZlclVybDp0aGlzLnNlcnZlclVybCxyb290Rm9sZGVyTmFtZTp0aGlzLnJvb3RGb2xkZXJOYW1lfX1zZXRDb25maWcoaWUsbGUpe2llJiYodGhpcy5zZXJ2ZXJVcmw9aWUpLGxl''@;'; put 'put ''JiYodGhpcy5yb290Rm9sZGVyTmFtZT1sZSl9Z2V0Q29tcHV0ZUNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRzKGllKX0pfWdldERlZmF1bHRDb21wdXRl''@;'; put 'put ''Q29udGV4dHMoKXtyZXR1cm4gdGhpcy5jb250ZXh0TWFuYWdlci5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzfWdldExhdW5jaGVyQ29udGV4dHMoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRM''@;'; put 'put ''YXVuY2hlckNvbnRleHRzKGllKX0pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxlPXRoaXMuZXhlY3V0ZVNjcmlwdC5iaW5kKHRoaXMpO3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldEV4''@;'; put 'put ''ZWN1dGFibGVDb250ZXh0cyhsZSxpZSl9KX1jcmVhdGVTZXNzaW9uKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ol9lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIs''@;'; put 'put ''bGUpLFRlPV9lLml0ZW1zJiZfZS5pdGVtcy5sZW5ndGg/X2UuaXRlbXMuZmluZCh6ZT0+emUubmFtZT09PWllKTpudWxsO2lmKCFUZSl0aHJvdyBuZXcgRXJyb3IoYEV4ZWN1dGlvbiBjb250ZXh0ICR7aWV9IG5vdCBmb3VuZC5gKTtjb25zdHtyZXN1bHQ6U2V9PXlpZWxkIHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudC5wb3N0KGAvY29tcHV0ZS9jb250ZXh0cy8ke1RlLmlkfS9zZXNzaW9uc2Ase30sbGUpO3JldHVybiBTZX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRo''@;'; put 'put ''aXMuY29udGV4dE1hbmFnZXIuY3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUsbWUsX2UsVGUsU2UpfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KGllLGxlLG1lPSJkaXJlY3QiLF9lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29u''@;'; put 'put ''dGV4dE1hbmFnZXIuY3JlYXRlTGF1bmNoZXJDb250ZXh0KGllLGxlLG1lLF9lKX0pfWVkaXRDb21wdXRlQ29udGV4dChpZSxsZSxtZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmVkaXRDb21wdXRlQ29u''@;'; put 'put ''dGV4dChpZSxsZSxtZSl9KX1kZWxldGVDb21wdXRlQ29udGV4dChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLGxlKX0pfWV4ZWN1dGVTY3JpcHQoaWUs''@;'; put 'put ''bGUsbWUsX2UsVGU9bnVsbCxTZT0hMSx6ZT0hMSxWPSEwLHAsYj0hMSx4KXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsWS5leGVjdXRlT25Db21wdXRlQXBpKSh0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXNzaW9uTWFuYWdlcix0aGlzLnJvb3RG''@;'; put 'put ''b2xkZXJOYW1lLGllLGxlLG1lLF9lLFRlLFNlLHplLFYscCxiLHgpfSl9Z2V0Rm9sZGVyKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0k''@;'; put 'put ''e2llfWAsbGUpLnRoZW4obWU9Pm1lLnJlc3VsdCl9KX1jcmVhdGVGaWxlKGllLGxlLG1lLF9lLFRlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIW1lJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyBy''@;'; put 'put ''ZXF1aXJlZC4iKTshX2UmJm1lJiYoX2U9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobWUsVGUpKTtjb25zdCBTZT17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlzcG9zaXRpb24iOmBmaWxlbmFtZT0iJHtpZX0iO2B9LHplPW5ldyBQLmRlZmF1bHQ7''@;'; put 'put ''cmV0dXJuIHplLmFwcGVuZCgiZmlsZSIsbGUsaWUpLCh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0ke19lfSZ0eXBlRGVmTmFtZT1maWxlI3Jhd1VwbG9hZGAsemUsVGUsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIr''@;'; put 'put ''emUuX2JvdW5kYXJ5LFNlKSkucmVzdWx0fSl9Y3JlYXRlRm9sZGVyKGllLGxlLG1lLF9lLFRlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgU2U9SS5sb2dnZXJ8fF87aWYoIWxlJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUg''@;'; put 'put ''cGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtpZighbWUmJmxlKWlmKG1lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGxlLF9lKSl7aWYoVGUpe2NvbnN0IFY9bGUrIi8iK2llOyh5aWVsZCB0aGlzLmdldEZvbGRlclVyaShWLF9lKSkmJih5aWVsZCB0aGlzLmRlbGV0ZUZvbGRlcihsZSsi''@;'; put 'put ''LyIraWUsX2UpKX19ZWxzZXtTZS5pbmZvKGBQYXJlbnQgZm9sZGVyIGF0IHBhdGggJyR7bGV9JyBpcyBub3QgcHJlc2VudC5gKTtjb25zdCBWPWxlLnN1YnN0cmluZygwLGxlLmxhc3RJbmRleE9mKCIvIikpLHA9YCR7bGUuc3BsaXQoIi8iKS5wb3AoKX1gO2lmKCIiPT09Vil0aHJvdyBuZXcg''@;'; put 'put ''Ri5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihsZSx0aGlzLnNlcnZlclVybCxfZSk7U2UuaW5mbyhgQ3JlYXRpbmcgcGFyZW50IGZvbGRlcjpcbicke3B9JyBpbiAnJHtWfSdgKTtjb25zdCBiPXlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKHAsVix2b2lkIDAsX2UpO1NlLmluZm8oYFBhcmVudCBm''@;'; put 'put ''b2xkZXIgJyR7cH0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLmApLG1lPWAvZm9sZGVycy9mb2xkZXJzLyR7Yi5pZH1gfWNvbnN0e3Jlc3VsdDp6ZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSR7bWV9YCx7''@;'; put 'put ''bmFtZTppZSx0eXBlOiJmb2xkZXIifSxfZSkuY2F0Y2goVj0+e2NvbnN0e21lc3NhZ2U6cCxyZXNwb25zZTpifT1WO2lmKHAmJmImJmIuZGF0YSYmYi5kYXRhLm1lc3NhZ2Upe2NvbnN0e3N0YXR1czp4fT1iLHttZXNzYWdlOkN9PWIuZGF0YSxUPVtwLENdLm1hcChqPT4vXC4kLy50ZXN0KGop''@;'; put 'put ''P2o6YCR7an0uYCk7dGhyb3chVGUmJjQwOT09PXgmJlQucHVzaCgnVG8gb3ZlcnJpZGUsIHBsZWFzZSBzZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksVC5qb2luKCIgIil9dGhyb3cgVn0pO3JldHVybiB5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGAke2xlfS8ke2llfWAsX2UpLHpl''@;'; put 'put ''fSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCB0byBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJu''@;'; put 'put ''IV9lJiZtZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLFRlKSkseWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0ke19lfWAse25hbWU6aWUscGFyYW1ldGVyczpb''@;'; put 'put ''e25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixkZWZhdWx0VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6bGV9LFRlKX0pfWdldEF1dGhDb2RlKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9''@;'; put 'put ''YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU0xvZ29uL29hdXRoL2F1dGhvcml6ZT9jbGllbnRfaWQ9JHtpZX0mcmVzcG9uc2VfdHlwZT1jb2RlYDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChsZSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKF9lPT5fZS5yZXN1bHQpLnRoZW4o''@;'; put 'put ''X2U9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBUZT0iIjtpZigoMCxOLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShfZSkpe2NvbnN0IHplPSh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuYXV0aG9yaXplKF9lKSkuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2Jv''@;'; put 'put ''ZHk+IilbMF0sVj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gVi5pbm5lckhUTUw9emUsVGU9Vi5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCxUZX17Y29uc3QgU2U9X2Uuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0semU9''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHplLmlubmVySFRNTD1TZSx6ZSYmKFRlPXplLnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0KSxUZX19KSkuY2F0Y2goKCk9Pm51bGwpfSl9Z2V0QWNjZXNzVG9rZW4oaWUsbGUsbWUpe3JldHVybiBnKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxxLmdldEFjY2Vzc1Rva2VuRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLGxlLG1lKX0pfXJlZnJlc2hUb2tlbnMoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4o''@;'; put 'put ''MCxlZS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LGllLGxlLG1lKX0pfWRlbGV0ZUNsaWVudChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXRoaXMuc2VydmVyVXJsK2Avb2F1dGgvY2xpZW50cy8ke2llfWA7''@;'; put 'put ''cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUobWUsbGUpKS5yZXN1bHR9KX1leGVjdXRlQ29tcHV0ZUpvYihpZSxsZSxtZSxfZSxUZSxTZT0hMCx6ZT0hMSxWLHA9ITEsYil7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB4PShUZXx8e30p''@;'; put 'put ''LmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46eH09eWllbGQoMCxVLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNh''@;'; put 'put ''bm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUiKTtjb25zdCBDPWllLnNwbGl0KCIvIiksVD1DLnBvcCgpLEg9Qy5qb2luKCIvIiksaj0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtIfWA6SDt5aWVsZCB0''@;'; put 'put ''aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGoseCkuY2F0Y2godGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkodGUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9KTtjb25zdCBFPXRoaXMuZm9sZGVyTWFwLmdldChqKTtpZighRSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBm''@;'; put 'put ''b2xkZXIgJyR7an0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhpcy5zZXJ2ZXJVcmx9J2ApO2NvbnN0IG09RT8uZmluZCh0ZT0+dGUubmFtZT09PVQpO2lmKCFtKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7bGV0IEE9bT8uY29kZTtpZighQSl7Y29uc3QgdGU9bT8ubGlu''@;'; put 'put ''a3MuZmluZCh3ZT0+ImdldFJlc291cmNlIj09PXdlLnJlbCk7aWYoIXRlKXRocm93IG5ldyBFcnJvcigiVVJJIG9mIGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91bmQuIik7Y29uc3R7cmVzdWx0OnNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7''@;'; put 'put ''dGUuaHJlZn1gLHgpLmNhdGNoKHdlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHdlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9uLiAiKX0pO0E9c2UuY29kZSxtLmNvZGU9QX1BfHwoQT0iIik7Y29uc3QgYWU9QS5yZXBsYWNlKC9cclxuL2csIlxuIikuc3BsaXQoIlxu''@;'; put 'put ''Iik7cmV0dXJuIHlpZWxkIHRoaXMuZXhlY3V0ZVNjcmlwdChpZSxhZSxsZSxUZSxfZSxtZSx6ZSxTZSxWLHAsYil9KX1leGVjdXRlSm9iKGllLGxlLG1lLF9lLFRlKXt2YXIgU2UsemUsVjtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHA9KFRlfHx7fSkuYWNj''@;'; put 'put ''ZXNzX3Rva2VuO2lmKFRlJiYoe2FjY2Vzc190b2tlbjpwfT15aWVsZCgwLFUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsVGUpKSwoMCx3LmlzUmVsYXRpdmVQYXRoKShpZSkmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90''@;'; put 'put ''IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZS4iKTtjb25zdCBiPWllLnNwbGl0KCIvIikseD1iLnBvcCgpLEM9Yi5qb2luKCIvIiksVD0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtDfWA6Qzt5aWVsZCB0aGlz''@;'; put 'put ''LnBvcHVsYXRlRm9sZGVyTWFwKFQscCk7Y29uc3QgSD10aGlzLmZvbGRlck1hcC5nZXQoVCk7aWYoIUgpdGhyb3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke1R9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfScuYCk7Y29uc3Qgaj1IPy5maW5kKERlPT5EZS5uYW1lPT09''@;'; put 'put ''eCk7bGV0IEU9W107aWYoX2UmJk9iamVjdC5rZXlzKF9lKS5sZW5ndGgmJihFPXlpZWxkIHRoaXMudXBsb2FkVGFibGVzKF9lLHApKSwhail0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0IG09bnVsbD09PShTZT1qPy5saW5rcy5maW5kKERlPT4iZ2V0UmVzb3Vy''@;'; put 'put ''Y2UiPT09RGUucmVsKSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS5ocmVmLHtyZXN1bHQ6QX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke219YCxwKSxhZT17X2NvbnRleHROYW1lOmxlLF9wcm9ncmFtOmAke1R9LyR7eH1gLF93ZWJpbl9maWxlX2Nv''@;'; put 'put ''dW50OkUubGVuZ3RoLF9PTUlUSlNPTkxJU1RJTkc6ITAsX09NSVRKU09OTE9HOiEwLF9PTUlUU0VTU0lPTlJFU1VMVFM6ITAsX09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6ITB9O21lJiYoYWUuX09NSVRURVhUTE9HPSJmYWxzZSIsYWUuX09NSVRTRVNTSU9OUkVTVUxUUz0iZmFs''@;'; put 'put ''c2UiLGFlLl9ERUJVRz0xMzEpLEUuZm9yRWFjaCgoRGUsRmUpPT57YWVbYF93ZWJpbl9maWxldXJpJHtGZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHtEZS5maWxlLmlkfWAsYWVbYF93ZWJpbl9uYW1lJHtGZSsxfWBdPURlLnRhYmxlTmFtZX0pO2NvbnN0IHRlPXtuYW1lOmBleGVjLSR7eH1gLGRl''@;'; put 'put ''c2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixqb2JEZWZpbml0aW9uOkEsYXJndW1lbnRzOmFlfSx7cmVzdWx0OnNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0YCx0ZSxwKSx3ZT15aWVs''@;'; put 'put ''ZCB0aGlzLnBvbGxKb2JTdGF0ZShzZSxUZSkuY2F0Y2goRGU9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoRGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSx7cmVzdWx0OlVlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9q''@;'; put 'put ''b2JFeGVjdXRpb24vam9icy8ke3NlLmlkfWAscCk7bGV0IEplLG90O2NvbnN0IE1lPVVlLnJlc3VsdHNbIl93ZWJvdXQuanNvbiJdLHZlPVVlLmxpbmtzLmZpbmQoRGU9PiJsb2ciPT09RGUucmVsKTtpZihNZSYmKEplPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2''@;'; put 'put ''ZXJVcmx9JHtNZX0vY29udGVudGAscCwidGV4dC9wbGFpbiIpKSxtZSYmdmUmJihvdD15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7dmUuaHJlZn0vY29udGVudGAscCkudGhlbihEZT0+RGUucmVzdWx0Lml0ZW1zLm1hcChGZT0+RmUubGluZSkuam9p''@;'; put 'put ''bigiXG4iKSkpLCJmYWlsZWQiPT09d2UpdGhyb3cgbmV3IEYuSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PSh6ZT1VZS5lcnJvcil8fHZvaWQgMD09PXplP3ZvaWQgMDp6ZS5lcnJvckNvZGUsbnVsbD09PShWPVVlLmVycm9yKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5tZXNzYWdlLG90KTtjb25z''@;'; put 'put ''dCBYZT17cmVzdWx0OkplPy5yZXN1bHQsbG9nOm90fSx7ZXJyb3I6amV9PVVlO3JldHVybiBqZSYmKFhlLmVycm9yPWplKSxYZX0pfXBvcHVsYXRlRm9sZGVyTWFwKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9KDAsdy5pc1JlbGF0aXZl''@;'; put 'put ''UGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7aWV9YDppZTtpZih0aGlzLmZvbGRlck1hcC5nZXQobWUpKXJldHVybjtjb25zdCBfZT0iL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIrbWUse3Jlc3VsdDpUZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHtf''@;'; put 'put ''ZX1gLGxlKS5jYXRjaChWPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKFYsIkVycm9yIHdoaWxlIGdldHRpbmcgZm9sZGVyLiAiKX0pO2lmKCFUZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXRoICR7bWV9IGRvZXMgbm90IGV4aXN0IG9uICR7dGhpcy5zZXJ2ZXJVcmx9YCk7Y29uc3R7cmVz''@;'; put 'put ''dWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzLyR7VGUuaWR9L21lbWJlcnM/bGltaXQ9JHtUZS5tZW1iZXJDb3VudDw1MDA/NTAwOlRlLm1lbWJlckNvdW50fWAsbGUpLmNhdGNoKFY9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoViwiRXJy''@;'; put 'put ''b3Igd2hpbGUgZ2V0dGluZyBtZW1iZXJzLiAiKX0pO3RoaXMuZm9sZGVyTWFwLnNldChtZSxTZS5pdGVtcyl9KX1wb2xsSm9iU3RhdGUoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxLLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50LGllLHRoaXMuZGVidWcsbGUsbWUpfSl9dXBsb2FkVGFibGVzKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsVy51cGxvYWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSl9KX1nZXRGb2xkZXJEZXRhaWxzKGllLGxl''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9KDAsdy5pc1VyaSkoaWUpP2llOmAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1gLHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9''@;'; put 'put ''JHttZX1gLGxlKS5jYXRjaChUZT0+e2lmKFRlIGluc3RhbmNlb2YgRi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IFRlO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihfZSlyZXR1cm4gX2V9KX1nZXRGb2xkZXJVcmkoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXtjb25zdCBtZT15aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMoaWUsbGUpO2lmKG1lKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7bWUuaWR9YH0pfWdldFJlY3ljbGVCaW5VcmkoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6bWV9''@;'; put 'put ''PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmluYCxpZSkuY2F0Y2goX2U9PntpZihfZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBfZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYo''@;'; put 'put ''bWUpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHttZS5pZH1gfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFt''@;'; put 'put ''ZShpZSxsZSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsbGUpfSl9bGlzdEZvbGRlcihpZSxsZSxtZT0y''@;'; put 'put ''MCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPSgwLHcuaXNVcmkpKGllKT9pZTp5aWVsZCB0aGlzLmdldEZvbGRlclVyaShpZSxsZSkse3Jlc3VsdDpUZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke19l''@;'; put 'put ''fS9tZW1iZXJzP2xpbWl0PSR7bWV9YCxsZSk7cmV0dXJuIFRlJiZUZS5pdGVtcz9UZS5pdGVtcy5tYXAoU2U9PlNlLm5hbWUpOltdfSl9bW92ZUZvbGRlcihpZSxsZSxtZSxfZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPWllLnNwbGl0KCIvIiku''@;'; put 'put ''cG9wKCk7aWYoeWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGxlLF9lKSltZT1UZTtlbHNle2xldCB4PWxlLnNwbGl0KCIvIik7eC5zcGxpY2UoeC5sZW5ndGgtMSwxKSxsZT14LmpvaW4oIi8iKX1jb25zdCB6ZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShpZSxfZSksVj15aWVsZCB0aGlz''@;'; put 'put ''LmdldEZvbGRlclVyaShsZSxfZSk7aWYoIXplKXJldHVybjtjb25zdCBwPXplPy5zcGxpdCgiLyIpLnBvcCgpLHtyZXN1bHQ6Yn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBhdGNoKGAke3RoaXMuc2VydmVyVXJsfSR7emV9YCx7aWQ6cCxuYW1lOm1lLHBhcmVudEZvbGRlclVyaTpWfSxf''@;'; put 'put ''ZSkuY2F0Y2goeD0+e3Rocm93IHguY29kZSYmIkVOT1RGT1VORCI9PT14LmNvZGU/e2JvZHk6e21lc3NhZ2U6YEZvbGRlciAnJHtpZS5zcGxpdCgiLyIpLnBvcCgpfScgd2FzIG5vdCBmb3VuZC5gfX06eH0pO3JldHVybiBifHx2b2lkIDB9KX1kZWxldGVGb2xkZXIoaWUsbGUpe3JldHVybiBn''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT15aWVsZCB0aGlzLmdldFJlY3ljbGVCaW5VcmkobGUpLF9lPWllLnNwbGl0KCIvIikucG9wKCl8fCIiLFRlPW5ldyBEYXRlLHplPV9lKyIgIitUZS50b0xvY2FsZURhdGVTdHJpbmcoKSsiICIrVGUudG9Mb2NhbGVUaW1l''@;'; put 'put ''U3RyaW5nKCk7cmV0dXJuIHlpZWxkIHRoaXMubW92ZUZvbGRlcihpZSxtZSx6ZSxsZSl9KX19fSw1OTU2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFkscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSko''@;'; put 'put ''ZnVuY3Rpb24obmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9uZShUZS52YWx1ZSk6ZnVu''@;'; put 'put ''Y3Rpb24gSihuZSl7cmV0dXJuIG5lIGluc3RhbmNlb2YgcT9uZTpuZXcgcShmdW5jdGlvbihpZSl7aWUobmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2''@;'; put 'put ''YWx1ZTohMH0pO2NvbnN0IF89eSg1OTI4KSxnPXkoMTIzMCksQj15KDk4MjEpLHc9eSg4MzA2KSxQPXkoMzQ2NyksRj15KDE1MjcpLE89eSgzOTAwKSx6PXkoNDU4OCksTj15KDM2MDIpLEw9eSg4MjE3KSxLPXtzZXJ2ZXJVcmw6IiIscGF0aFNBU0pTOiIvU0FTanNBcGkvc3RwL2V4ZWN1dGUi''@;'; put 'put ''LHBhdGhTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyIscGF0aFNBU1ZpeWE6Ii9TQVNKb2JFeGVjdXRpb24iLGFwcExvYzoiL1B1YmxpYy9zZWVkYXBwIixzZXJ2ZXJUeXBlOk8uU2VydmVyVHlwZS5TYXNWaXlhLGRlYnVnOiExLGNvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21w''@;'; put 'put ''dXRlIGNvbnRleHQiLHVzZUNvbXB1dGVBcGk6bnVsbCxsb2dpbk1lY2hhbmlzbTpnLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHR9O1guZGVmYXVsdD1jbGFzcyBVe2NvbnN0cnVjdG9yKFkpe3RoaXMuc2FzanNDb25maWc9bmV3IGcuU0FTanNDb25maWcsdGhpcy5qb2JzUGF0aD0iIix0aGlzLnNh''@;'; put 'put ''c1ZpeWFBcGlDbGllbnQ9bnVsbCx0aGlzLnNhczlBcGlDbGllbnQ9bnVsbCx0aGlzLnNhc0pTQXBpQ2xpZW50PW51bGwsdGhpcy5maWxlVXBsb2FkZXI9bnVsbCx0aGlzLmF1dGhNYW5hZ2VyPW51bGwsdGhpcy5yZXF1ZXN0Q2xpZW50PW51bGwsdGhpcy53ZWJKb2JFeGVjdXRvcj1udWxsLHRo''@;'; put 'put ''aXMuc2FzanNKb2JFeGVjdXRvcj1udWxsLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5qZXNKb2JFeGVjdXRvcj1udWxsLHRoaXMuc2FzOUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9KCk9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe3ZhciBxLGVlLEosbmUsaWU7eWllbGQgbnVsbD09PShxPXRoaXMud2ViSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1xP3ZvaWQgMDpxLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oZWU9dGhpcy5jb21wdXRlSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1lZT92b2lkIDA6''@;'; put 'put ''ZWUucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShKPXRoaXMuamVzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1KP3ZvaWQgMDpKLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0obmU9dGhpcy5maWxlVXBsb2FkZXIpfHx2b2lkIDA9PT1uZT92b2lkIDA6''@;'; put 'put ''bmUucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShpZT10aGlzLnNhc2pzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1pZT92b2lkIDA6aWUucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCl9KSx0aGlzLnNldFZlcmJvc2VNb2RlPXE9Pnt2YXIgZWU7bnVsbD09PShlZT10aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQpfHx2b2lkIDA9PT1lZXx8ZWUuc2V0VmVyYm9zZU1vZGUocSl9LHRoaXMuc2FzanNDb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEspLFkpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9Z2V0Q3NyZlRva2VuKFk9ImdlbmVyYWwiKXt2YXIgcTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PShxPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PXE/dm9pZCAwOnEuZ2V0Q3NyZlRva2VuKFkpfWV4ZWN1dGVTY3JpcHQoe2xpbmVzT2ZDb2RlOlksZmlsZU5hbWU6cSxjb250ZXh0TmFtZTplZSxydW5UaW1lOkosYXV0aENvbmZpZzpuZSxhdXRoQ29uZmlnU2FzOTpp''@;'; put 'put ''ZSxkZWJ1ZzpsZX0pe3ZhciBtZSxfZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW08uU2VydmVyVHlwZS5TYXM5LE8uU2VydmVyVHlwZS5TYXNqcyxPLlNlcnZlclR5cGUuU2FzVml5YV0p''@;'; put 'put ''LHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5KXtpZighaWUpdGhyb3cgbmV3IEVycm9yKCJBdXRoIGNvbmZpZyBmb3Igc2FzOSBpcyBub3QgcHJvdmlkZWQiKTtyZXR1cm4geWllbGQgbnVsbD09PShtZT10aGlzLnNhczlBcGlDbGllbnQpfHx2b2lkIDA9''@;'; put 'put ''PT1tZT92b2lkIDA6bWUuZXhlY3V0ZVNjcmlwdChZLGllLnVzZXJOYW1lLGllLnBhc3N3b3JkKX1pZih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanMpcmV0dXJuIHlpZWxkIG51bGw9PT0oX2U9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PV9l''@;'; put 'put ''P3ZvaWQgMDpfZS5leGVjdXRlU2NyaXB0KFkuam9pbigiXG4iKSxKLG5lKTtpZih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YSl7aWYoIShlZT1lZXx8dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSkpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0''@;'; put 'put ''IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtpZighcSl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgbmFtZSBpcyByZXF1aXJlZCBpbiBjYXNlIG9mIFNBUyBWSVlBLiBQbGVhc2UgcHJvdmlkZSBh''@;'; put 'put ''IGBmaWxlTmFtZWAuIik7cmV0dXJuIHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5leGVjdXRlU2NyaXB0KHEsWSxlZSxuZSxudWxsLGxlfHx0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKX19KX1leGVjdXRlSm9iKFkscSxlZSl7dmFyIEo7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbTy5TZXJ2ZXJUeXBlLlNhc2pzXSkseWllbGQgbnVsbD09PShKPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1KP3ZvaWQgMDpKLmV4ZWN1dGVKb2IoWSxxLGVlKX0pfWdldENvbXB1''@;'; put 'put ''dGVDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1''@;'; put 'put ''dGVDb250ZXh0cyhZKX0pfWdldExhdW5jaGVyQ29udGV4dHMoWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRMYXVuY2hlckNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQuZ2V0TGF1bmNoZXJDb250ZXh0cyhZKX0pfWdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNWaXlh''@;'; put 'put ''QXBpQ2xpZW50LmdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRFeGVjdXRhYmxlQ29udGV4dHMiLFtPLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRFeGVjdXRhYmxlQ29udGV4dHMoWSl9KX1jcmVhdGVDb21wdXRlQ29udGV4dChZLHEsZWUsSixuZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0''@;'; put 'put ''aG9kU3VwcG9ydGVkKCJjcmVhdGVDb21wdXRlQ29udGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUNvbXB1dGVDb250ZXh0KFkscSxlZSxKLG5lLGllKX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChZLHEsZWUsSil7cmV0dXJu''@;'; put 'put ''IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVMYXVuY2hlckNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVMYXVuY2hlckNvbnRleHQoWSxx''@;'; put 'put ''LGVlLEopfSl9ZWRpdENvbXB1dGVDb250ZXh0KFkscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJlZGl0Q29tcHV0ZUNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5lZGl0Q29tcHV0ZUNvbnRleHQoWSxxLGVlKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDb21wdXRlQ29udGV4dCIsW08u''@;'; put 'put ''U2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNvbXB1dGVDb250ZXh0KFkscSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhv''@;'; put 'put ''ZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShZLHEpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKFkscSl7cmV0dXJuIEkodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5SWQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5SWQoWSxxKX0pfWNyZWF0ZVNl''@;'; put 'put ''c3Npb24oWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZVNlc3Npb24iLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVTZXNzaW9uKFks''@;'; put 'put ''cSl9KX1jcmVhdGVGb2xkZXIoWSxxLGVlLEosbmUsaWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmU/eWllbGQgbmUuY3JlYXRlRm9sZGVyKFkscSxlZSxKLGllKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRm9sZGVyKFkscSxl''@;'; put 'put ''ZSxKLGllKX0pfWNyZWF0ZUZpbGUoWSxxLGVlLEosbmUsaWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gaWU/eWllbGQgaWUuY3JlYXRlRmlsZShZLHEsZWUsSixuZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZpbGUoWSxxLGVl''@;'; put 'put ''LEosbmUpfSl9Z2V0Rm9sZGVyKFkscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRGb2xk''@;'; put 'put ''ZXIoWSxxKX0pfWRlbGV0ZUZvbGRlcihZLHEpe3ZhciBlZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUZvbGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShlZT10aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1lZT92b2lkIDA6ZWUuZGVsZXRlRm9sZGVyKFkscSl9KX1saXN0Rm9sZGVyKFkscSxlZSl7dmFyIEo7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJsaXN0Rm9s''@;'; put 'put ''ZGVyIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Sj92b2lkIDA6Si5saXN0Rm9sZGVyKFkscSxlZSl9KX1tb3ZlRm9sZGVyKFkscSxlZSxKKXt2YXIgbmU7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJtb3ZlRm9sZGVyIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KG5lPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PW5lP3ZvaWQgMDpuZS5tb3ZlRm9sZGVyKFkscSxlZSxKKX0p''@;'; put 'put ''fWNyZWF0ZUpvYkRlZmluaXRpb24oWSxxLGVlLEosbmUsaWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlSm9iRGVmaW5pdGlvbiIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSksaWU/eWllbGQgaWUu''@;'; put 'put ''Y3JlYXRlSm9iRGVmaW5pdGlvbihZLHEsZWUsSixuZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUpvYkRlZmluaXRpb24oWSxxLGVlLEosbmUpfSl9Z2V0QXV0aENvZGUoWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlz''@;'; put 'put ''TWV0aG9kU3VwcG9ydGVkKCJnZXRBdXRoQ29kZSIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEF1dGhDb2RlKFkpfSl9Z2V0QWNjZXNzVG9rZW4oWSxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEFjY2Vzc1Rva2VuIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsTy5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzSlNBcGlDbGllbnQuZ2V0''@;'; put 'put ''QWNjZXNzVG9rZW4oWSxlZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKFkscSxlZSl9KX1yZWZyZXNoVG9rZW5zKFkscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJy''@;'; put 'put ''ZWZyZXNoVG9rZW5zIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsTy5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzSlNBcGlDbGllbnQucmVmcmVzaFRva2VucyhlZSk6eWllbGQgdGhpcy5zYXNW''@;'; put 'put ''aXlhQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoWSxxLGVlKX0pfWRlbGV0ZUNsaWVudChZLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ2xpZW50IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5''@;'; put 'put ''aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ2xpZW50KFkscSl9KX1nZXRTYXNqc0NvbmZpZygpe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnfWdldFVzZXJOYW1lKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIudXNlck5hbWV9c2V0U0FTanNDb25maWcoWSl7cmV0dXJuIEkodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuc2FzanNDb25maWc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLFkpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9KX1zZXREZWJ1Z1N0YXRlKFkpe3RoaXMuc2FzanNDb25maWcuZGVidWc9''@;'; put 'put ''WSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVidWc9WSl9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmNoZWNrU2Vzc2lvbigpfSl9bG9nSW4oWSxxLGVl''@;'; put 'put ''LEo9e30pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNhc2pzQ29uZmlnLmxvZ2luTWVjaGFuaXNtPT09Zy5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0KXtpZighWXx8IXEpdGhyb3cgbmV3IEVycm9yKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUg''@;'; put 'put ''cmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBsb2dpbiBtZWNoYW5pc20uIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nSW4oWSxxKX1pZih0eXBlb2Ygd2luZG93PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlRoZSByZWRpcmVjdGVkIGxvZ2luIG1lY2hhbmlzbSBpcyBvbmx5IGF2''@;'; put 'put ''YWlsYWJsZSBmb3IgdXNlIGluIHRoZSBicm93c2VyLiIpO3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnJlZGlyZWN0ZWRMb2dJbihKKX0pfWxvZ091dCgpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ091dCgpfXVwbG9hZEZpbGUoWSxxLGVlLEo9e30sbmUpe3JldHVybiBJKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtKPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxKKTtjb25zdCBpZT17ZmlsZXM6cSxwYXJhbXM6ZWV9O3JldHVybiB5aWVsZCB0aGlzLmZpbGVVcGxvYWRlci5leGVjdXRlKFksaWUsSixuZSl9KX1yZXF1ZXN0''@;'; put 'put ''KFkscSxlZT17fSxKLG5lLGllPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7ZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLGVlKTtjb25zdCBsZT0oMCxfLnZhbGlkYXRlSW5wdXQpKHEpO3JldHVybiBsZS5zdGF0''@;'; put 'put ''dXM/ZWUuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc2pzSm9iRXhlY3V0b3IuZXhlY3V0ZShZLHEsZWUsSixuZSxpZSk6ZWUuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhJiZudWxsIT1lZS51c2VDb21wdXRlQXBpP2VlLnVzZUNvbXB1dGVB''@;'; put 'put ''cGk/eWllbGQgdGhpcy5jb21wdXRlSm9iRXhlY3V0b3IuZXhlY3V0ZShZLHEsZWUsSixuZSk6KGVlLmNvbnRleHROYW1lfHwoZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGVlKSx7Y29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9KSkseWll''@;'; put 'put ''bGQgdGhpcy5qZXNKb2JFeGVjdXRvci5leGVjdXRlKFkscSxlZSxKLG5lLGllKSk6ZWUuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiZlZS51c2VybmFtZSYmZWUucGFzc3dvcmQ/eWllbGQgdGhpcy5zYXM5Sm9iRXhlY3V0b3IuZXhlY3V0ZShZLHEsZWUpOnlpZWxkIHRoaXMud2Vi''@;'; put 'put ''Sm9iRXhlY3V0b3IuZXhlY3V0ZShZLHEsZWUsSixuZSxpZSk6UHJvbWlzZS5yZWplY3QobmV3IGcuRXJyb3JSZXNwb25zZShsZS5tc2cpKX0pfWRlcGxveVNlcnZpY2VQYWNrKFkscSxlZSxKLG5lPSExKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5pc01l''@;'; put 'put ''dGhvZFN1cHBvcnRlZCgiZGVwbG95U2VydmljZVBhY2siLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pO2xldCBpZT1udWxsO2lmKGVlfHxxKWVlfHwoZWU9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpLHF8fChxPXRoaXMuc2FzanNDb25maWcuYXBwTG9jKSx0aGlzLnNhc2pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YT8oaWU9bmV3IEIuU0FTVml5YUFwaUNsaWVudChlZSxxLHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSxpZS5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKTp0aGlzLnNhc2pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKGllPW5ldyB3LlNBUzlBcGlDbGllbnQoZWUsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSk7ZWxzZXtsZXQgbWU9bnVsbDt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzVml5YT9tZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJihtZT10aGlzLnNhczlBcGlDbGllbnQuZ2V0Q29uZmlnKCkpLGVlPW1lLnNlcnZlclVybCxxPW1lLnJvb3RGb2xkZXJO''@;'; put 'put ''YW1lfVkubWVtYmVyc1swXS5tZW1iZXJzJiZZLm1lbWJlcnNbMF0ubWVtYmVycy5zb3J0KG1lPT4iZm9sZGVyIj09PW1lLnR5cGU/LTE6MSk7Y29uc3QgbGU9WS5tZW1iZXJzO3lpZWxkIHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKHEsbGUsSixpZSxuZSl9KX1zdGFydENvbXB1dGVK''@;'; put 'put ''b2IoWSxxLGVlPXt9LEosbmUsaWUsbGU9ITEsbWUsX2Upe3ZhciBUZSxTZSx6ZSxWO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihlZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksZWUpLHRoaXMuaXNNZXRob2RTdXBw''@;'; put 'put ''b3J0ZWQoInN0YXJ0Q29tcHV0ZUpvYiIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSksIWVlLmNvbnRleHROYW1lKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25m''@;'; put 'put ''aWcuIik7cmV0dXJuIF9lPyhudWxsPT09KFRlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVRlfHxUZS5zZXRWZXJib3NlTW9kZShfZSksbnVsbD09PShTZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1TZXx8U2UuZW5hYmxlVmVyYm9zZU1vZGUoKSk6ITE9PT1fZSYmKG51''@;'; put 'put ''bGw9PT0oemU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09emV8fHplLmRpc2FibGVWZXJib3NlTW9kZSgpKSxudWxsPT09KFY9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5leGVjdXRlQ29tcHV0ZUpvYihZLGVlLmNvbnRleHROYW1lLGVlLmRlYnVn''@;'; put 'put ''LHEsSiwhIW5lLCExLGllLGxlLG1lKX0pfWZldGNoTG9nRmlsZUNvbnRlbnQoWSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoWSxxKS50aGVuKGVlPT57aWYoIWVlKXJldHVybiBQcm9taXNlLnJl''@;'; put 'put ''amVjdChuZXcgZy5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFJlc3BvbnNlIHdhcyBub3QgcHJvdmlkZWQuIikpO3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZWUucmVzdWx0KX1jYXRjaChKKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGcuRXJyb3JSZXNw''@;'; put 'put ''b25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBUaGUgcmVzdWx0IGlzIG5vdCB2YWxpZC4iLEopKX19KX0pfWdldFNhc1JlcXVlc3RzKCl7cmV0dXJuWy4uLnRoaXMucmVxdWVzdENsaWVudC5nZXRSZXF1ZXN0cygpXS5zb3J0KF8uY29tcGFyZVRpbWVzdGFtcHMpfWNsZWFyU2FzUmVx''@;'; put 'put ''dWVzdHMoKXt0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJSZXF1ZXN0cygpfXNldHVwQ29uZmlndXJhdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsfHwiIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKWlmKHR5cGVvZiBsb2NhdGlvbjwidSIpe2xldCBZ''@;'; put 'put ''PWAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0bmFtZX1gO2xvY2F0aW9uLnBvcnQmJihZPWAke1l9OiR7bG9jYXRpb24ucG9ydH1gKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD1ZfWVsc2UgdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9IiI7Ii8iPT09dGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJVcmwuc2xpY2UoLTEpJiYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwuc2xpY2UoMCwtMSkpLHRoaXMucmVxdWVzdENsaWVudD90aGlzLnJlcXVlc3RDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpOnRoaXMucmVxdWVzdENsaWVudD1uZXcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzP04uU2FzanNSZXF1ZXN0Q2xpZW50OnouUmVxdWVzdENsaWVudCkodGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyx0aGlzLnNhc2pzQ29uZmlnLnJlcXVlc3RIaXN0b3J5TGltaXQsdGhpcy5zYXNqc0NvbmZpZy52ZXJib3NlKSx0aGlzLmpvYnNQYXRoPXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXNWaXlhP3RoaXMuc2FzanNDb25maWcucGF0aFNBU1ZpeWE6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczk/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTOTp0aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNKUyx0aGlzLmF1dGhNYW5hZ2VyPW5l''@;'; put 'put ''dyBGLkF1dGhNYW5hZ2VyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHMpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNW''@;'; put 'put ''aXlhJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50P3RoaXMuc2FzVml5YUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpOnRoaXMuc2FzVml5YUFwaUNsaWVudD1uZXcgQi5TQVNWaXlhQXBpQ2xpZW50KHRoaXMuc2Fz''@;'; put 'put ''anNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jLHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVidWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2''@;'; put 'put ''ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJih0aGlzLnNhczlBcGlDbGllbnQ/dGhpcy5zYXM5QXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCk6dGhpcy5zYXM5QXBpQ2xpZW50PW5ldyB3LlNBUzlBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2''@;'; put 'put ''ZXJVcmwsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzJiYodGhpcy5zYXNKU0FwaUNsaWVudHx8KHRoaXMuc2FzSlNBcGlDbGllbnQ9bmV3IFAuU0FTanNBcGlD''@;'; put 'put ''bGllbnQodGhpcy5yZXF1ZXN0Q2xpZW50KSkpLHRoaXMuZmlsZVVwbG9hZGVyPW5ldyBMLkZpbGVVcGxvYWRlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMud2ViSm9i''@;'; put 'put ''RXhlY3V0b3I9bmV3IEwuV2ViSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW5l''@;'; put 'put ''dyBMLlNhc2pzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzOUpvYkV4ZWN1dG9yPW5ldyBMLlNhczlKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bmV3IEwuQ29tcHV0ZUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMu''@;'; put 'put ''c2FzVml5YUFwaUNsaWVudCksdGhpcy5qZXNKb2JFeGVjdXRvcj1uZXcgTC5KZXNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpfWNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhZLHEsZWUsSixuZSl7cmV0dXJuIEkodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkKDAsXy5hc3luY0ZvckVhY2gpKHEsaWU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3N3aXRjaChpZS50eXBlKXtjYXNlImZvbGRlciI6eWllbGQgdGhpcy5jcmVhdGVGb2xkZXIoaWUubmFtZSxZLHZvaWQgMCxlZSxKLG5lKTti''@;'; put 'put ''cmVhaztjYXNlImZpbGUiOnlpZWxkIHRoaXMuY3JlYXRlRmlsZShpZS5uYW1lLGllLmNvZGUsWSx2b2lkIDAsZWUsSik7YnJlYWs7Y2FzZSJzZXJ2aWNlIjp5aWVsZCB0aGlzLmNyZWF0ZUpvYkRlZmluaXRpb24oaWUubmFtZSxpZS5jb2RlLFksdm9pZCAwLGVlLEopO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKGBVbmlkZW50aWZpZWQgbWVtYmVyICcke2llLm5hbWV9JyBwcm92aWRlZC5gKX0iZm9sZGVyIj09PWllLnR5cGUmJmllLm1lbWJlcnMmJmllLm1lbWJlcnMubGVuZ3RoJiYoeWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoYCR7WX0vJHtpZS5uYW1l''@;'; put 'put ''fWAsaWUubWVtYmVycyxlZSxKLG5lKSl9KSl9KX1pc01ldGhvZFN1cHBvcnRlZChZLHEpe2lmKCF0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGV8fCFxLmluY2x1ZGVzKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSkpdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgJyR7WX0nIGlzIG9ubHkg''@;'; put 'put ''c3VwcG9ydGVkIG9uICR7cS5qb2luKCIsICIpfSBzZXJ2ZXJzLmApfWVuYWJsZVZlcmJvc2VNb2RlKFkscSl7dmFyIGVlO251bGw9PT0oZWU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09ZWV8fGVlLmVuYWJsZVZlcmJvc2VNb2RlKFkscSl9ZGlzYWJsZVZlcmJvc2VNb2RlKCl7dmFy''@;'; put 'put ''IFk7bnVsbD09PShZPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVl8fFkuZGlzYWJsZVZlcmJvc2VNb2RlKCl9fX0sMzQ2NzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhL''@;'; put 'put ''fHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxxKXtmdW5jdGlvbiBlZShpZSl7dHJ5e25lKFUubmV4dChpZSkpfWNhdGNoKGxlKXtxKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e25lKFUudGhyb3coaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIG5lKGllKXtpZS5kb25lP1koaWUudmFs''@;'; put 'put ''dWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24ocSl7cShZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1uZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4p''@;'; put 'put ''e3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTanNBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IGc9Xyh5KDYyMzApKSxCPXkoMzkwMCksdz15KDk3NzgpLFA9eSg1NyksRj15KDI0''@;'; put 'put ''OSksTz15KDcwNCk7WC5TQVNqc0FwaUNsaWVudD1jbGFzcyB6e2NvbnN0cnVjdG9yKEwpe3RoaXMucmVxdWVzdENsaWVudD1MfWdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoTCl7Y29uc3R7YWNjZXNzX3Rva2Vu''@;'; put 'put ''Okt9PXlpZWxkKDAsTy5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxMLEIuU2VydmVyVHlwZS5TYXNqcyk7cmV0dXJuIEt9fSl9ZGVwbG95KEwsSyxVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2Vu''@;'; put 'put ''Rm9yUmVxdWVzdChVKTtMLmFwcExvYz1MLmFwcExvY3x8Sztjb25zdHtyZXN1bHQ6WX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIsTCxXLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1''@;'; put 'put ''cm4gUHJvbWlzZS5yZXNvbHZlKFkpfSl9ZGVwbG95WmlwRmlsZShMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVSZWFkU3RyZWFtOlV9PXkoMjk3NSksVz15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChLKSxZPXlpZWxk''@;'; put 'put ''IFUoTCkscT1uZXcgZy5kZWZhdWx0O3EuYXBwZW5kKCJmaWxlIixZKTtjb25zdCBlZT1gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtxLmdldEJvdW5kYXJ5KCl9YCx7cmVzdWx0Okp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kv''@;'; put 'put ''dXBsb2FkIixxLFcsZWUse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShKKX0pfWV4ZWN1dGVKb2IoTCxLLFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPVU/VS5hY2Nlc3Nf''@;'; put 'put ''dG9rZW46dm9pZCAwO2xldCBZO1k9TC5fcHJvZ3JhbS5zdGFydHNXaXRoKCIvIik/TC5fcHJvZ3JhbTpgJHtLfS8ke0wuX3Byb2dyYW19YDtjb25zdCBxPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNz''@;'; put 'put ''aWduKHtfZGVidWc6MTMxfSxMKSx7X3Byb2dyYW06WX0pLFcpO3JldHVybntyZXN1bHQ6cS5yZXN1bHQsbG9nOnEubG9nfX0pfWV4ZWN1dGVTY3JpcHQoTCxLPSJzYXMiLFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPXlpZWxkIHRoaXMuZ2V0QWNj''@;'; put 'put ''ZXNzVG9rZW5Gb3JSZXF1ZXN0KFUpLFk9e2xvZzoiIn07cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9jb2RlL2V4ZWN1dGUiLHtjb2RlOkwscnVuVGltZTpLfSxXKS50aGVuKHE9Pntjb25zdHtsb2c6ZWUscHJpbnRPdXRwdXQ6SixyZXN1bHQ6bmV9PXE7''@;'; put 'put ''WS5sb2c9ZWUsSiYmKFkucHJpbnRPdXRwdXQ9SiksbmUmJihZLndlYm91dD1uZSl9KS5jYXRjaChxPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHEsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KSxZfSl9Z2V0QWNjZXNzVG9rZW4oTCxL''@;'; put 'put ''KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsUC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQsTCxLKX0pfXJlZnJlc2hUb2tlbnMoTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVy''@;'; put 'put ''bigwLEYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQsTCl9KX19fSw2OTAzOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTCxLLFUpe3JldHVybiBu''@;'; put 'put ''ZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFkscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtuZShVLm5leHQoaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtuZShVLnRocm93KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBuZShpZSl7aWUuZG9uZT9ZKGll''@;'; put 'put ''LnZhbHVlKTpmdW5jdGlvbiBXKFkpe3JldHVybiBZIGluc3RhbmNlb2YgSz9ZOm5ldyBLKGZ1bmN0aW9uKHEpe3EoWSl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9bmUoKFU9VS5hcHBseShOLEx8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksWC5TZXNzaW9uTWFuYWdlcj12b2lkIDA7Y29uc3QgQj15KDEyMzApLHc9eSgxMzk1KSxQPXkoNTkyOCksRj15KDk3NzgpO1guU2Vzc2lvbk1hbmFnZXI9Y2xhc3Mgentjb25zdHJ1Y3RvcihMLEssVSl7dGhpcy5zZXJ2ZXJVcmw9TCx0aGlzLmNvbnRleHROYW1lPUssdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50PVUsdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMuc2V0dGluZ0Nv''@;'; put 'put ''bnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlPXtwcmludGVkOiExLHN0YXRlOkIuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LEwmJigwLFAuaXNVcmwpKEwpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoTCl7dGhpcy5fZGVidWc9''@;'; put 'put ''TH1pc1Nlc3Npb25WYWxpZChMKXtpZighTClyZXR1cm4hMTtjb25zdCBLPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShMLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFMLmF0dHJpYnV0ZXN8fEs+PUwuYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVU''@;'; put 'put ''aW1lb3V0KX1yZW1vdmVTZXNzaW9uRnJvbVBvb2woTCl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihLPT5LLmlkIT09TC5pZCl9cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihMPT50aGlzLmlzU2Vzc2lvblZhbGlk''@;'; put 'put ''KEwpKX10aHJvd0Vycm9ycyhMLEspe3Rocm93IEs/KDAsRi5wcmVmaXhNZXNzYWdlKShuZXcgRXJyb3IoTC5qb2luKCIuICIpKSxLKTpuZXcgRXJyb3IoTC5tYXAoVT0+VS5tZXNzYWdlP1UubWVzc2FnZTpVKS5qb2luKCIuICIpKX1nZXRTZXNzaW9uKEwpe3JldHVybiBnKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPVtdO2xldCBVPSExO2NvbnN0IFc9KCk9PntLLmxlbmd0aCYmIVUmJihVPSEwLHRoaXMudGhyb3dFcnJvcnMoSykpfTtpZih0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3RoKXtjb25zdCBZPXRoaXMuc2Vz''@;'; put 'put ''c2lvbnNbMF07cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFkpLHRoaXMuY3JlYXRlU2Vzc2lvbnMoTCkuY2F0Y2gocT0+e0sucHVzaChxKX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0Y2gocT0+e0sucHVzaChxKX0pLFcoKSxZfXt0aGlzLmNyZWF0ZVNl''@;'; put 'put ''c3Npb25zKEwpLmNhdGNoKHE9PntLLnB1c2gocSl9KSx5aWVsZCB0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpLmNhdGNoKHE9PntLLnB1c2gocSl9KSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpO2NvbnN0IFk9dGhpcy5zZXNzaW9ucy5wb3AoKTtyZXR1cm4gdGhpcy5yZW1v''@;'; put 'put ''dmVTZXNzaW9uRnJvbVBvb2woWSksVygpLFl9fSl9Z2V0RXJyb3JNZXNzYWdlKEwsSyxVKXtyZXR1cm5gJHtVfSByZXF1ZXN0IHRvICR7S30gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHtMLnJlc3BvbnNlLnN0YXR1c3x8InVua25vd24ifS4gYCtMLnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8''@;'; put 'put ''IiJ9Y2xlYXJTZXNzaW9uKEwsSyl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFU9YC9jb21wdXRlL3Nlc3Npb25zLyR7TH1gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKFUsSykudGhlbigoKT0+e3RoaXMuc2Vzc2lvbnM9dGhp''@;'; put 'put ''cy5zZXNzaW9ucy5maWx0ZXIoVz0+Vy5pZCE9PUwpfSkuY2F0Y2goVz0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLFUsIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pfSl9Y3JlYXRlU2Vzc2lvbnMoTCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9W107dGhpcy5zZXNzaW9ucy5sZW5ndGh8fCh5aWVsZCgwLFAuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksKCk9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuY3JlYXRlQW5kV2Fp''@;'; put 'put ''dEZvclNlc3Npb24oTCkuY2F0Y2goVT0+e0sucHVzaChVKX0pfSkpKSxLLmxlbmd0aCYmdGhpcy50aHJvd0Vycm9ycyhLLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pfXdhaXRGb3JDdXJyZW50Q29udGV4dCgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtyZXR1cm4gbmV3IFByb21pc2UoTD0+e2NvbnN0IEs9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLmN1cnJlbnRDb250ZXh0JiYodGhpcy5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKEspLEwoKSl9LDEwMCl9KX0pfWNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpe3JldHVybiBn''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmN1cnJlbnRDb250ZXh0fHwodGhpcy5zZXR0aW5nQ29udGV4dD95aWVsZCB0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpOnlpZWxkIHRoaXMuc2V0Q3VycmVudENvbnRleHQoTCkpO2NvbnN0IEs9YCR7dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmx9L2NvbXB1dGUvY29udGV4dHMvJHt0aGlzLmN1cnJlbnRDb250ZXh0LmlkfS9zZXNzaW9uc2Ase3Jlc3VsdDpVLGV0YWc6V309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoSyx7fSxMKS5jYXRjaChxPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNz''@;'; put 'put ''YWdlKHEsSywiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pO1UuZXRhZz1XO2NvbnN0IFk9VS5saW5rcy5maW5kKHE9PiJzdGF0ZSI9PT1xLnJlbCk7aWYoIVkpdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIFUuc3RhdGVVcmw9WS5ocmVm''@;'; put 'put ''LHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oVSxXLEwpLHRoaXMuc2Vzc2lvbnMucHVzaChVKSxVfSl9c2V0Q3VycmVudENvbnRleHQoTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmN1cnJlbnRDb250ZXh0KXtjb25zdCBLPWAke3RoaXMuc2Vy''@;'; put 'put ''dmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYDt0aGlzLnNldHRpbmdDb250ZXh0PSEwO2NvbnN0e3Jlc3VsdDpVfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEssTCkuY2F0Y2gocT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2Fn''@;'; put 'put ''ZShxLEssIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29udGV4dHMuICIpfSksWT0oVSYmVS5pdGVtcyYmVS5pdGVtcy5sZW5ndGg/VS5pdGVtczpbXSkuZmluZChxPT5xLm5hbWU9PT10aGlzLmNvbnRleHROYW1lKTtpZighWSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250''@;'; put 'put ''ZXh0ICcke3RoaXMuY29udGV4dE5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIgJHt0aGlzLnNlcnZlclVybH0uYCk7dGhpcy5jdXJyZW50Q29udGV4dD1ZLFByb21pc2UucmVzb2x2ZSgpfX0pfXdhaXRGb3JTZXNzaW9uKEwsSyxVKXt2YXIgVztyZXR1cm4gZyh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e3N0YXRlOll9PUw7Y29uc3R7c3RhdGVVcmw6cX09TCxlZT1JLmxvZ2dlcnx8XztpZihZPT09Qi5TZXNzaW9uU3RhdGUuUGVuZGluZ3x8WT09PUIuU2Vzc2lvblN0YXRlLlJ1bm5pbmd8fFk9PT1CLlNlc3Npb25TdGF0ZS5Ob1N0YXRlKXtpZihxKXt0''@;'; put 'put ''aGlzLmRlYnVnJiYhdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQmJihlZS5pbmZvKGBQb2xsaW5nOiAke3RoaXMuc2VydmVyVXJsK3F9YCksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITApO2NvbnN0IEo9YCR7dGhpcy5zZXJ2ZXJVcmx9JHtxfT93YWl0PTMwYCx7''@;'; put 'put ''cmVzdWx0Om5lLHJlc3BvbnNlU3RhdHVzOmllfT15aWVsZCB0aGlzLmdldFNlc3Npb25TdGF0ZShKLEssVSkuY2F0Y2gobGU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkobGUsIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHNlc3Npb24uICIpfSk7aWYoWT1uZS50cmltKCksdGhpcy5kZWJ1''@;'; put 'put ''ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09WSYmKGVlLmluZm8oYEN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnJHtZfSdgKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9WSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksIVkpe2NvbnN0IGxl''@;'; put 'put ''PW5ldyB3Lk5vU2Vzc2lvblN0YXRlRXJyb3IoaWUsdGhpcy5zZXJ2ZXJVcmwrcSxudWxsPT09KFc9TC5saW5rcy5maW5kKG1lPT4ibG9nIj09PW1lLnJlbCkpfHx2b2lkIDA9PT1XP3ZvaWQgMDpXLmhyZWYpO3JldHVybiB0aGlzLmxvZ2dlZEVycm9ycy5maW5kKG1lPT5tZS5zZXJ2ZXJSZXNw''@;'; put 'put ''b25zZVN0YXR1cz09PWxlLnNlcnZlclJlc3BvbnNlU3RhdHVzKXx8KHRoaXMubG9nZ2VkRXJyb3JzLnB1c2gobGUpLGVlLmluZm8obGUubWVzc2FnZSkpLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oTCxLLFUpfXJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxZfXRocm93IHRoaXMuc2Vz''@;'; put 'put ''c2lvblN0YXRlTGlua0Vycm9yfXJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxZfSl9Z2V0U2Vzc2lvblN0YXRlKEwsSyxVKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoTCxVLCJ0ZXh0L3BsYWlu''@;'; put 'put ''Iix7IklmLU5vbmUtTWF0Y2giOkt9KS50aGVuKFc9Pih7cmVzdWx0OlcucmVzdWx0LHJlc3BvbnNlU3RhdHVzOlcuc3RhdHVzfSkpLmNhdGNoKFc9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoVyxMLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBz''@;'; put 'put ''ZXNzaW9uIHN0YXRlLiAiKX0pfSl9Z2V0VmFyaWFibGUoTCxLLFUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL3Nlc3Npb25zLyR7TH0vdmFyaWFibGVzLyR7S31gO3JldHVybiB5aWVsZCB0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQuZ2V0KFcsVSkuY2F0Y2goWT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShZLFcsIkdFVCIpLGBFcnJvciB3aGlsZSBmZXRjaGluZyBzZXNzaW9uIHZhcmlhYmxlICcke0t9Jy4gYCl9KX0pfX19LDE2MjI6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVSxXLFkscSl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oSixuZSl7ZnVuY3Rpb24gaWUoX2Upe3RyeXttZShxLm5leHQoX2UpKX1jYXRjaChU''@;'; put 'put ''ZSl7bmUoVGUpfX1mdW5jdGlvbiBsZShfZSl7dHJ5e21lKHEudGhyb3coX2UpKX1jYXRjaChUZSl7bmUoVGUpfX1mdW5jdGlvbiBtZShfZSl7X2UuZG9uZT9KKF9lLnZhbHVlKTpmdW5jdGlvbiBlZShKKXtyZXR1cm4gSiBpbnN0YW5jZW9mIFk/SjpuZXcgWShmdW5jdGlvbihuZSl7bmUoSil9''@;'; put 'put ''KX0oX2UudmFsdWUpLnRoZW4oaWUsbGUpfW1lKChxPXEuYXBwbHkoVSxXfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXhlY3V0ZU9uQ29tcHV0ZUFwaT12b2lkIDA7Y29uc3QgQj15KDc3NTcpLHc9eSg5Nzc4KSxQ''@;'; put 'put ''PXkoMzYwNyksRj15KDcwNCksTz15KDU5MjgpLHo9eSg3MTQpLE49eSgxMzQzKSxMPXkoNjQ5Nik7WC5leGVjdXRlT25Db21wdXRlQXBpPWZ1bmN0aW9uIEsoVSxXLFkscSxlZSxKLG5lLGllPW51bGwsbGU9ITEsbWU9ITEsX2U9ITAsVGUsU2U9ITEsemUpe3ZhciBWLHA7cmV0dXJuIGcodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBiPShuZXx8e30pLmFjY2Vzc190b2tlbjtuZSYmKHthY2Nlc3NfdG9rZW46Yn09eWllbGQoMCxGLmdldFRva2VucykoVSxuZSkpO2NvbnN0IHg9SS5sb2dnZXJ8fF87dHJ5e2xldCBDO2NvbnN0IFQ9eWllbGQgVy5nZXRTZXNzaW9uKGIp''@;'; put 'put ''LmNhdGNoKE1lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSk7aWYoQz1ULmlkLFNlKXtjb25zdHtyZXN1bHQ6TWV9PXlpZWxkIFcuZ2V0VmFyaWFibGUoQywiU1lTSk9CSUQiLGIpLmNhdGNoKHZlPT57dGhyb3coMCx3LnBy''@;'; put 'put ''ZWZpeE1lc3NhZ2UpKHZlLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gdmFyaWFibGUuICIpfSk7aWYoTWUmJk1lLnZhbHVlKXtjb25zdCB2ZT1ZP3Euc3BsaXQoWSkuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6cTsoSS5sb2dnZXJ8fF8pLmluZm8oYFRyaWdnZXJpbmcgJyR7dmV9''@;'; put 'put ''JyB3aXRoIFBJRCAke01lLnZhbHVlfSBhdCAkeygwLEIudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUykoKX1gKX19bGV0IEg7SD0oMCxPLmlzUmVsYXRpdmVQYXRoKShxKT9gZXhlYy0ke3EuaW5jbHVkZXMoIi8iKT9xLnNwbGl0KCIvIilbMV06cX1gOnEuc3BsaXQoIi8iKS5wb3AoKTtsZXQg''@;'; put 'put ''aj17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLE8uaXNSZWxhdGl2ZVBhdGgpKHEpP1krIi8iK3E6cX07emUmJihqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSx6ZSkpLGxlJiYoaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saikse19ERUJVRzoxMzF9''@;'; put 'put ''KSk7bGV0IEU9W107aWUmJihKU09OLnN0cmluZ2lmeShpZSkuaW5jbHVkZXMoIjsiKT8oRT15aWVsZCgwLEwudXBsb2FkVGFibGVzKShVLGllLGIpLmNhdGNoKE1lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgdGFibGVzLiAiKX0pLGouX3dl''@;'; put 'put ''YmluX2ZpbGVfY291bnQ9RS5sZW5ndGgsRS5mb3JFYWNoKChNZSx2ZSk9PntqW2Bfd2ViaW5fZmlsZXVyaSR7dmUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7TWUuZmlsZS5pZH1gLGpbYF93ZWJpbl9uYW1lJHt2ZSsxfWBdPU1lLnRhYmxlTmFtZX0pKTpqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFz''@;'; put 'put ''c2lnbih7fSxqKSwoMCx6LmZvcm1hdERhdGFGb3JSZXF1ZXN0KShpZSkpKTtjb25zdCBtPXtuYW1lOkh8fCJEZWZhdWx0IEpvYiBOYW1lIixkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsY29kZTplZSx2YXJpYWJsZXM6aix2ZXJzaW9uOjJ9LHtyZXN1bHQ6QX09eWllbGQgVS5wb3N0''@;'; put 'put ''KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnNgLG0sYikuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIHBvc3Rpbmcgam9iLiAiKX0pO2lmKCFfZSlyZXR1cm4gVDtsZSYmKHguaW5mbyhgSm9iIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgJyR7''@;'; put 'put ''SH0nLmApLHguaW5mbyhgWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jlc3MgYXQgJyR7VS5nZXRCYXNlVXJsKCl9JHtBLmxpbmtzLmZpbmQoTWU9PiJzdGF0ZSI9PT1NZS5yZWwpLmhyZWZ9Jy5gKSk7Y29uc3QgdGU9eWllbGQoMCxOLnBvbGxKb2JTdGF0ZSkoVSxBLGxlLG5lLFRlLHtz''@;'; put 'put ''ZXNzaW9uOlQsc2Vzc2lvbk1hbmFnZXI6V30pLmNhdGNoKE1lPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgdmUsWGU7Y29uc3QgamU9bnVsbD09PSh2ZT1NZT8ucmVzcG9uc2UpfHx2b2lkIDA9PT12ZT92b2lkIDA6dmUuZGF0YSxEZT0vZXJyPVswLTldKiwvLmV4ZWMo''@;'; put 'put ''amUpO2lmKCI1MTEzIj09PShudWxsPT09KFhlPURlPy5bMF0pfHx2b2lkIDA9PT1YZT92b2lkIDA6WGUuc2xpY2UoNCwtMSkpKXtjb25zdCBJZT1BLmxpbmtzLmZpbmQoVmU9PiJ1cCI9PT1WZS5yZWwpLmhyZWYrIi9sb2ciO01lLmxvZz15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxi''@;'; put 'put ''LEllLDFlNil9dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkpO25lJiYoe2FjY2Vzc190b2tlbjpifT15aWVsZCgwLEYuZ2V0VG9rZW5zKShVLG5lKSk7Y29uc3R7cmVzdWx0OnNlfT15aWVsZCBVLmdldChgL2NvbXB1dGUv''@;'; put 'put ''c2Vzc2lvbnMvJHtDfS9qb2JzLyR7QS5pZH1gLGIpLmNhdGNoKE1lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYi4gIil9KTtsZXQgd2UsVWU9IiI7Y29uc3QgSmU9c2UubGlua3MuZmluZChNZT0+ImxvZyI9PT1NZS5yZWwpO2lmKGxlJiZK''@;'; put 'put ''ZSl7Y29uc3QgTWU9YCR7SmUuaHJlZn0vY29udGVudGAsdmU9bnVsbCE9PShwPW51bGw9PT0oVj1zZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5saW5lQ291bnQpJiZ2b2lkIDAhPT1wP3A6MWU2O1VlPXlpZWxkKDAsTy5mZXRjaExvZ0J5Q2h1bmtzKShVLGIsTWUsdmUp''@;'; put 'put ''fWlmKHRlPT09Ti5Kb2JTdGF0ZS5GYWlsZWR8fHRlPT09Ti5Kb2JTdGF0ZS5FcnJvcil0aHJvdyBuZXcgUC5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3Ioc2UsVWUpO2lmKCFtZSlyZXR1cm57am9iOnNlLGxvZzpVZX07Y29uc3Qgb3Q9YC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vZmlsZXJlZnMv''@;'; put 'put ''X3dlYm91dC9jb250ZW50YDtyZXR1cm4gd2U9eWllbGQgVS5nZXQob3QsYiwidGV4dC9wbGFpbiIpLmNhdGNoKE1lPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgdmUsWGU7aWYoTWUgaW5zdGFuY2VvZiBQLk5vdEZvdW5kRXJyb3ImJkplKXtjb25zdCBqZT1gJHtKZS5o''@;'; put 'put ''cmVmfS9jb250ZW50YCxEZT1udWxsIT09KFhlPW51bGw9PT0odmU9c2UubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PXZlP3ZvaWQgMDp2ZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1YZT9YZToxZTY7cmV0dXJuIFVlPXlpZWxkKDAsTy5mZXRjaExvZ0J5Q2h1bmtzKShVLGIsamUsRGUpLFByb21p''@;'; put 'put ''c2UucmVqZWN0KHtzdGF0dXM6NTAwLGxvZzpVZX0pfXJldHVybntyZXN1bHQ6SlNPTi5zdHJpbmdpZnkoTWUpfX0pKSx5aWVsZCBXLmNsZWFyU2Vzc2lvbihDLGIpLmNhdGNoKE1lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSBjbGVhcmluZyBzZXNzaW9uLiAi''@;'; put 'put ''KX0pLHtyZXN1bHQ6d2U/LnJlc3VsdCxsb2c6VWV9fWNhdGNoKEMpe2lmKDQwND09PUMuc3RhdHVzKXJldHVybiBLKFUsVyxZLHEsZWUsSixuZSxpZSxsZSwhMSwhMCk7dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpfX0pfX0sNzQ1''@;'; put 'put ''ODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQxNTUpLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkpfWNhdGNo''@;'; put 'put ''KGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEudmFsdWUp''@;'; put 'put ''LnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0RmlsZVN0cmVhbT12b2lkIDA7Y29uc3QgZz15KDI5NzUpLEI9eSg3NzU3KTtYLmdldEZpbGVTdHJlYW09KFAsRik9''@;'; put 'put ''Pl8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3JlYXRlV3JpdGVTdHJlYW06T309eSgyOTc1KSx6PUZ8fEkuY3dkKCk7aWYoeWllbGQoMCxnLmlzRm9sZGVyKSh6KSl7Y29uc3QgTD1gJHtQLm5hbWV8fCJqb2IifS0keygwLEIuZ2VuZXJhdGVUaW1lc3RhbXApKCl9''@;'; put 'put ''LmxvZ2AsVT15KDI1MjApLmpvaW4oRnx8SS5jd2QoKSxMKTtyZXR1cm4geWllbGQgTyhVKX1yZXR1cm4geWllbGQgTyh6KX0pfSwxMzQzOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9u''@;'; put 'put ''KFcsWSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbihuZSxpZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1''@;'; put 'put ''bmN0aW9uIF9lKFRlKXtUZS5kb25lP25lKFRlLnZhbHVlKTpmdW5jdGlvbiBKKG5lKXtyZXR1cm4gbmUgaW5zdGFuY2VvZiBxP25lOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShuZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfTtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5kb1BvbGw9WC5wb2xsSm9iU3RhdGU9WC5Kb2JTdGF0ZT12b2lkIDA7Y29uc3QgQj15KDcwNCksdz15KDEzOTUpLFA9eSgxMjMwKSxGPXkoNTkyOCk7dmFyIE8sVzsoVz1PPVguSm9iU3RhdGV8fChYLkpv''@;'; put 'put ''YlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFcuUnVubmluZz0icnVubmluZyIsVy5QZW5kaW5nPSJwZW5kaW5nIixXLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsVy5Ob1N0YXRlPSIiLFcuRmFpbGVkPSJmYWlsZWQiLFcuRXJyb3I9ImVycm9yIixYLnBvbGxKb2JTdGF0ZT1m''@;'; put 'put ''dW5jdGlvbiB6KFcsWSxxLGVlLEosbmUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBpZT1JLmxvZ2dlcnx8XyxsZT1KPy5zdHJlYW1Mb2d8fCExLG1lPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxw''@;'; put 'put ''b2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUwMCxwb2xsSW50ZXJ2YWw6M2U0fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dO2xldCBfZTtpZih2b2lkIDAhPT1KKXtfZT1bSl07bGV0e3BvbGxTdHJhdGVneTp4fT1KO3ZvaWQgMCE9PXg/KFUoeCkseD14LnNv''@;'; put 'put ''cnQoKEMsVCk9PkMubWF4UG9sbENvdW50LVQubWF4UG9sbENvdW50KSxfZT1bLi4uX2UsLi4ueF0pOl9lPVsuLi5fZSwuLi5tZV19ZWxzZSBfZT1tZTtsZXQgVGU9X2Uuc3BsaWNlKDAsMSlbMF07Sj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVGUpLEp8fHt9KTtjb25zdCBTZT1Z''@;'; put 'put ''LmxpbmtzLmZpbmQoeD0+InN0YXRlIj09PXgucmVsKTtpZighU2UpdGhyb3cgbmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO2xldCBwLHplPXlpZWxkIE4oVyxZLE8uTm9TdGF0ZSxxLGVlKS5jYXRjaCh4PT4oaWUuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBz''@;'; put 'put ''dGF0ZSBmcm9tICR7U2UuaHJlZn0uIFN0YXJ0aW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLmAseCksTy5VbmF2YWlsYWJsZSkpLFY9MDtpZih6ZT09PU8uQ29tcGxldGVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoemUpO2lmKGxlJiYoMCxGLmlzTm9kZSkoKSl7Y29uc3R7''@;'; put 'put ''Z2V0RmlsZVN0cmVhbTp4fT15KDc0NTgpO3A9eWllbGQgeChZLEoubG9nRm9sZGVyUGF0aCl9bGV0IGI9eWllbGQoMCxYLmRvUG9sbCkoVyxZLHplLHEsVixKLGVlLGxlLHAsbmUpO2lmKHplPWIuc3RhdGUsVj1iLnBvbGxDb3VudCwhTCh6ZSl8fFY+PUoubWF4UG9sbENvdW50JiYhX2UubGVu''@;'; put 'put ''Z3RoKXJldHVybiB6ZTtmb3IoO19lLmxlbmd0aCYmTCh6ZSk7KVRlPV9lLnNwbGljZSgwLDEpWzBdLEomJihUZS5sb2dGb2xkZXJQYXRoPUoubG9nRm9sZGVyUGF0aCksYj15aWVsZCgwLFguZG9Qb2xsKShXLFksemUscSxWLFRlLGVlLGxlLHAsbmUpLHplPWIuc3RhdGUsVj1iLnBvbGxDb3Vu''@;'; put 'put ''dDtyZXR1cm4gcCYmcC5lbmQoKSx6ZX0pfTtjb25zdCBOPShXLFkscSxlZSxKKT0+Zyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBuZT1ZLmxpbmtzLmZpbmQoaWU9PiJzdGF0ZSI9PT1pZS5yZWwpO2lmKEwocSkpe2xldCBpZTtKJiYoaWU9eWllbGQoMCxCLmdldFRv''@;'; put 'put ''a2VucykoVyxKKSk7Y29uc3R7cmVzdWx0OmxlfT15aWVsZCBXLmdldChgJHtuZS5ocmVmfT9fYWN0aW9uPXdhaXQmd2FpdD0zMDBgLGllPy5hY2Nlc3NfdG9rZW4sInRleHQvcGxhaW4iLHt9LGVlKS5jYXRjaChtZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFkuaWQsbWUpfSk7''@;'; put 'put ''cmV0dXJuIGxlLnRyaW0oKX1yZXR1cm4gcX0pLEw9Vz0+Vz09PU8uUnVubmluZ3x8Vz09PU8uTm9TdGF0ZXx8Vz09PU8uUGVuZGluZ3x8Vz09PU8uVW5hdmFpbGFibGU7WC5kb1BvbGw9KFcsWSxxLGVlLEosbmUsaWUsbGUsbWUsX2UpPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe3ZhciBUZSxTZTtjb25zdHttYXhQb2xsQ291bnQ6emUscG9sbEludGVydmFsOlZ9PW5lLHA9SS5sb2dnZXJ8fF8sYj1ZLmxpbmtzLmZpbmQoRT0+InN0YXRlIj09PUUucmVsKTtsZXQgQz0wLFQ9cSxIPU8uTm9TdGF0ZSxqPTA7Zm9yKDtMKFQpJiZKPD16ZTspe2lmKF9lJiZKJiZKJTEw''@;'; put 'put ''PT0wJiZpZSl7Y29uc3R7c2Vzc2lvbjptLHNlc3Npb25NYW5hZ2VyOkF9PV9lLHtzdGF0ZVVybDphZSxldGFnOnRlLGlkOnNlfT1tLHthY2Nlc3NfdG9rZW46d2V9PWllLHtpZDpVZX09WSx7cmVzdWx0OkplLHJlc3BvbnNlU3RhdHVzOm90fT15aWVsZCBBLmdldFNlc3Npb25TdGF0ZShhZSx0''@;'; put 'put ''ZSx3ZSkuY2F0Y2godmU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihVZSx2ZSl9KSxNZT12ZT0+W1AuU2Vzc2lvblN0YXRlLlJ1bm5pbmcsUC5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVkZXModmUpO2lmKCFNZShKZSl8fDIwMCE9PW90KXtBLmNsZWFyU2Vzc2lvbihzZSx3ZSk7''@;'; put 'put ''Y29uc3QgdmU9TWUoSmUpP2BTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyBub3QgMjAwLiBTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyAke290fS5gOmBTZXNzaW9uIHN0YXRlIG9mIHRoZSBqb2IgaXMgbm90ICdydW5uaW5nJyBvciAnaWRsZScuIFNlc3Npb24gc3RhdGUgaXMgJyR7SmV9''@;'; put 'put ''J2A7dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoVWUsbmV3IEVycm9yKHZlKSl9fVQ9eWllbGQgTihXLFksVCxlZSxpZSkuY2F0Y2gobT0+e2lmKEMrKyxKPj16ZXx8Qz49NSl0aHJvdyBtO3JldHVybiBwLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAke2IuaHJl''@;'; put 'put ''Zn0uIFJlc3VtaW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLmAsbSksTy5VbmF2YWlsYWJsZX0pLEorKztjb25zdCBFPVkubGlua3MuZmluZChtPT4ic2VsZiI9PT1tLnJlbCkuaHJlZjtpZihsZSl7Y29uc3R7cmVzdWx0Om19PXlpZWxkIFcuZ2V0KEUsaWU/LmFjY2Vzc190''@;'; put 'put ''b2tlbiksQT1udWxsIT09KFNlPW51bGw9PT0oVGU9bS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09VGU/dm9pZCAwOlRlLmxpbmVDb3VudCkmJnZvaWQgMCE9PVNlP1NlOjFlNix7c2F2ZUxvZzphZX09KDAsRi5pc05vZGUpKCk/eSgyMDgwKTp7c2F2ZUxvZzpudWxsfTthZSYmKHlpZWxkIGFl''@;'; put 'put ''KFksVyxqLEEsbWUsaWU/LmFjY2Vzc190b2tlbikpLGorPUF9ZWUmJkghPT1UJiYocC5pbmZvKGBQb2xsaW5nOiAke1cuZ2V0QmFzZVVybCgpK0V9L3N0YXRlYCkscC5pbmZvKGBDdXJyZW50IGpvYiBzdGF0ZTogJHtUfWApLEg9VCksVCE9PU8uVW5hdmFpbGFibGUmJkM+MCYmKEM9MCksVCE9''@;'; put 'put ''PU8uQ29tcGxldGVkJiYoeWllbGQoMCxGLmRlbGF5KShWKSl9cmV0dXJue3N0YXRlOlQscG9sbENvdW50Okp9fSk7Y29uc3QgVT1XPT57Y29uc3QgWT0ocSxlZSk9Pnt0aHJvdyBuZXcgRXJyb3IoYFBvbGwgc3RyYXRlZ2llcyBhcmUgbm90IHZhbGlkLiR7cT9gICR7cX1gOiIifSR7ZWU/YCBJ''@;'; put 'put ''bnZhbGlkIHBvbGwgc3RyYXRlZ3k6IFxuJHtKU09OLnN0cmluZ2lmeShlZSxudWxsLDIpfWA6IiJ9YCl9O1cuZm9yRWFjaCgocSxlZSk9Pntjb25zdHttYXhQb2xsQ291bnQ6Sixwb2xsSW50ZXJ2YWw6bmV9PXE7SjwxP1koIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4g''@;'; put 'put ''MC4iLHEpOjAhPT1lZT9KPD1XW2VlLTFdLm1heFBvbGxDb3VudCYmWSgiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAnbWF4UG9sbENvdW50JyBpbiBwcmV2aW91cyBwb2xsIHN0cmF0ZWd5LiIscSk6bmU8MSYmWSgiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0''@;'; put 'put ''ZXIgdGhhbiAwLiIscSl9KX19LDIwODA6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5j''@;'; put 'put ''dGlvbiBXKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9L''@;'; put 'put ''Om5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2F2ZUxvZz12b2lkIDA7Y29uc3QgQj15KDU5MjgpLHc9''@;'; put 'put ''eSg2MTMxKTtYLnNhdmVMb2c9ZnVuY3Rpb24gUChGLE8seixOLEwsSyl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFLKXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Ri5pZH0gY2Fubm90IGJlIGZldGNoZWQgd2l0aG91dCBhIHZhbGlkIGFjY2Vz''@;'; put 'put ''cyB0b2tlbi5gKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0YuaWR9IGNhbm5vdCBiZSB3cml0dGVuIHdpdGhvdXQgYSB2YWxpZCB3cml0ZSBzdHJlYW0uYCk7Y29uc3QgVT1JLmxvZ2dlcnx8XyxXPUYubGlua3MuZmluZChxPT4ibG9nIj09PXEucmVsKTtpZighVyl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoYExvZyBVUkwgZm9yIGpvYiAke0YuaWR9IHdhcyBub3QgZm91bmQuYCk7Y29uc3QgWT15aWVsZCgwLEIuZmV0Y2hMb2cpKE8sSyxgJHtXLmhyZWZ9L2NvbnRlbnRgLHosTik7VS5pbmZvKGBXcml0aW5nIGxvZ3MgdG8gJHtMLnBhdGh9YCkseWllbGQoMCx3LndyaXRl''@;'; put 'put ''U3RyZWFtKShMLFl8fCIiKX0pfX0sNjQ5NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8u''@;'; put 'put ''bmV4dChZKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0p''@;'; put 'put ''fShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwbG9hZFRhYmxlcz12b2lkIDA7Y29uc3QgXz15KDk3NzgpLGc9eSgyNDAyKTtYLnVwbG9hZFRhYmxl''@;'; put 'put ''cz1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz1bXTtmb3IoY29uc3QgeiBpbiBQKXtjb25zdCBOPSgwLGcuY29udmVydFRvQ1NWKShQLHopO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1OKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtjb25zdCBMPXlpZWxkIHcudXBsb2FkRmlsZSgiL2ZpbGVzL2ZpbGVzI3Jhd1VwbG9hZCIsTixGKS5jYXRjaChLPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2Up''@;'; put 'put ''KEssIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlLiAiKX0pO08ucHVzaCh7dGFibGVOYW1lOnosZmlsZTpMLnJlc3VsdH0pfXJldHVybiBPfSl9fSw2MTMxOmZ1bmN0aW9uKHVlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oXyxnLEIsdyl7''@;'; put 'put ''cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oRixPKXtmdW5jdGlvbiB6KEspe3RyeXtMKHcubmV4dChLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTihLKXt0cnl7TCh3LnRocm93KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBMKEspe0suZG9uZT9GKEsudmFsdWUp''@;'; put 'put ''OmZ1bmN0aW9uIFAoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoZnVuY3Rpb24oTyl7TyhGKX0pfShLLnZhbHVlKS50aGVuKHosTil9TCgodz13LmFwcGx5KF8sZ3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxYLndyaXRlU3RyZWFtPXZvaWQgMCxYLndyaXRlU3RyZWFtPShfLGcpPT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoQix3KT0+e18ud3JpdGUoZysiXG4iLFA9PntQP3coUCk6QighMCl9KX0pfSl9LDI4NTE6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIEk9eSg1MTA4KSxfPXkoNDE1NSksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKG5lLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRj''@;'; put 'put ''aChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/bmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoobmUpe3JldHVybiBuZSBpbnN0YW5jZW9mIHE/bmU6bmV3IHEoZnVuY3Rpb24oaWUp''@;'; put 'put ''e2llKG5lKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkF1dGhNYW5hZ2VyPXZvaWQgMDtjb25zdCBCPXkoMzkwMCksdz15KDEzOTUp''@;'; put 'put ''LFA9eSg1OTI4KSxGPXkoMTE3MCksTz15KDU0MTgpLHo9eSg0NTgyKSxOPXkoNjU0NyksTD15KDE1MjcpO1guQXV0aE1hbmFnZXI9Y2xhc3MgS3tjb25zdHJ1Y3RvcihZLHEsZWUsSil7dGhpcy5zZXJ2ZXJVcmw9WSx0aGlzLnNlcnZlclR5cGU9cSx0aGlzLnJlcXVlc3RDbGllbnQ9ZWUsdGhp''@;'; put 'put ''cy5sb2dpbkNhbGxiYWNrPUosdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1uZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWE6cmV0dXJuIG5lPy5pZDtjYXNlIEIuU2VydmVyVHlwZS5TYXM5OnJldHVybiIiO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBuZT8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gSS5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlv''@;'; put 'put ''biIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPW5lPT57c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gbmU/Lm5hbWU7Y2FzZSBCLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4oMCxGLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5KShu''@;'; put 'put ''ZSk7Y2FzZSBCLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIG5lPy5kaXNwbGF5TmFtZTtkZWZhdWx0OnJldHVybiBJLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPW5lPT57bGV0IGllPW5lWzFd''@;'; put 'put ''LnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1pZVswXSl7aWU9aWUuc3Vic3RyKDEpO2NvbnN0IGxlPXRoaXMuc2VydmVyVXJsP2Ake3RoaXMuc2VydmVyVXJsfS8ke2llfWA6YCR7aWV9YDt0aGlzLmxvZ2luVXJsPXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhP2xl''@;'; put 'put ''OmxlLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpfX0sdGhpcy5sb2dpblVybD0iL1NBU0xvZ29uL2xvZ2luIix0aGlzLmxvZ291dFVybD10aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOT8iL1NBU0xvZ29uL2xvZ291dD8iOnRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhPyIvU0FTTG9nb24vbG9nb3V0LmRvPyI6Ii9TQVNMb2dvbi9sb2dvdXQiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPXRoaXMuc2VydmVyVXJsK3RoaXMucmVkaXJlY3RlZExvZ2luVXJsfXJlZGlyZWN0ZWRMb2dJbih7b25Mb2dnZWRPdXQ6''@;'; put 'put ''WX0pe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOnEsdXNlck5hbWU6ZWUsdXNlckxvbmdOYW1lOkp9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2lmKHEpcmV0dXJuKF8ubG9nZ2VyfHxJKS5sb2coImxvZ2luIHdhcyBub3QgYXR0''@;'; put 'put ''ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOmVlLHVzZXJMb25nTmFtZTpKfTtjb25zdCBuZT15aWVsZCgwLE8ub3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2lu''@;'; put 'put ''VXJsLCJTQVNMb2dvbiIse3dpZHRoOjUwMCxoZWlnaHQ6NjAwfSxZKTtpZighbmUpcmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifTtjb25zdHtpc0xvZ2dlZEluOmllfT10aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT95aWVsZCgw''@;'; put 'put ''LE4udmVyaWZ5U2FzVml5YUxvZ2luKShuZSk6eWllbGQoMCx6LnZlcmlmeVNhczlMb2dpbikobmUpO2lmKG5lLmNsb3NlKCksaWUpe3RoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKTtjb25zdHt1c2VyTmFt''@;'; put 'put ''ZTpsZSx1c2VyTG9uZ05hbWU6bWV9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO3JldHVybiB5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpsZSx1c2VyTG9uZ05hbWU6bWV9fXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJM''@;'; put 'put ''b25nTmFtZToiIn19KX1sb2dJbihZLHEpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlZT17X3NlcnZpY2U6ImRlZmF1bHQiLHVzZXJuYW1lOlkscGFzc3dvcmQ6cX07dGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIjtsZXR7aXNMb2dn''@;'; put 'put ''ZWRJbjpKLGxvZ2luRm9ybTpuZSx1c2VyTG9uZ05hbWU6aWV9PXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7aWYoSilyZXR1cm4oXy5sb2dnZXJ8fEkpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5s''@;'; put 'put ''b2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1lZS51c2VybmFtZSx0aGlzLnVzZXJMb25nTmFtZT1pZSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX07bGV0IGxlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVz''@;'; put 'put ''dChuZSxlZSksbWU9KDAsTC5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQpKHRoaXMuc2VydmVyVHlwZSxsZSk7aWYoIW1lKXtpZihVKGxlKSl7Y29uc3QgVGU9eWllbGQgdGhpcy5nZXRMb2dpbkZvcm0obGUpO2xlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdChUZSxlZSl9Y29uc3Qg''@;'; put 'put ''X2U9eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTttZT1fZS5pc0xvZ2dlZEluLHRoaXMudXNlckxvbmdOYW1lPV9lLnVzZXJMb25nTmFtZX1yZXR1cm4gbWUmJih0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2so''@;'; put 'put ''KSksdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1lZS51c2VybmFtZSkse2lzTG9nZ2VkSW46bWUsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9fSl9cGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKXtyZXR1cm4gZyh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1gJHt0aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2tgO3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9TQVNMb2dvbi9sb2dpbj9zZXJ2aWNlPSR7WX1gLHZvaWQgMCku''@;'; put 'put ''Y2F0Y2gocT0+e2lmKCEocSBpbnN0YW5jZW9mIHcuTm90Rm91bmRFcnJvcikpdGhyb3cgcX0pfSl9c2VuZExvZ2luUmVxdWVzdChZLHEpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzanMpe2NvbnN0''@;'; put 'put ''e3VzZXJuYW1lOm5lLHBhc3N3b3JkOmllfT1xLHtyZXN1bHQ6bGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOm5lLHBhc3N3b3JkOmllfSx2b2lkIDApO3JldHVybiBsZX1mb3IoY29uc3QgbmUgaW4gWSlxW25lXT1ZW25lXTtjb25zdCBl''@;'; put 'put ''ZT0oMCxQLnNlcmlhbGl6ZSkocSkse3Jlc3VsdDpKfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLGVlLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0p''@;'; put 'put ''O3JldHVybiBKfSl9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46WSx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTplZX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7bGV0IEo9bnVsbDtyZXR1cm4gWXx8KHlp''@;'; put 'put ''ZWxkIHRoaXMubG9nT3V0KCksSj15aWVsZCB0aGlzLmdldE5ld0xvZ2luRm9ybSgpKSxQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46WSx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTplZSxsb2dpbkZvcm06Sn0pfSl9Z2V0TmV3TG9naW5Gb3JtKCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNqcylyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiLyIsdm9pZCAwKS50aGVuKCh7cmVzdWx0OnF9KT0+e3ZhciBlZTtjb25zdCBKPW51bGw9PT0oZWU9LzxzY3JpcHQ+ZG9jdW1lbnQuY29v''@;'; put 'put ''a2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHEpKXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlWzFdO0omJihkb2N1bWVudC5jb29raWU9Sil9KTtjb25zdHtyZXN1bHQ6WX09eWllbGQgdGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ2luVXJsLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpLHZvaWQgMCwidGV4dC9wbGFpbiIpO3JldHVybiB5aWVsZCB0aGlzLmdldExvZ2luRm9ybShZKX0pfWZldGNoVXNlck5hbWUoKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT10aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT9gJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgOnRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXM5P2Ake3Ro''@;'; put 'put ''aXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzYDpgJHt0aGlzLnNlcnZlclVybH0vU0FTanNBcGkvc2Vzc2lvbmAse3Jlc3VsdDpxfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFksdm9pZCAwLCJ0ZXh0L3BsYWluIikuY2F0Y2goSj0+KHtyZXN1bHQ6ImF1dGhFcnIifSkpLGVl''@;'; put 'put ''PSJhdXRoRXJyIiE9PXE7cmV0dXJuIGVlP3tpc0xvZ2dlZEluOmVlLHVzZXJOYW1lOnRoaXMuZXh0cmFjdFVzZXJOYW1lKHEpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUocSl9Oih5aWVsZCB0aGlzLmxvZ091dCgpLHtpc0xvZ2dlZEluOmVlLHVzZXJOYW1lOiIiLHVz''@;'; put 'put ''ZXJMb25nTmFtZToiIn0pfSl9Z2V0TG9naW5Gb3JtKFkpe2NvbnN0IGVlPS88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKFkpLEo9e307aWYoZWUmJmVlLmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybChlZSk7Y29uc3QgbmU9KFk9WS5yZXBsYWNlKC88aW5w''@;'; put 'put ''dXQvZywiXG48aW5wdXQiKSkubWF0Y2goLzxpbnB1dC4qImhpZGRlbiJbXj5dKj4vZyk7bmUmJm5lLmZvckVhY2goaWU9Pntjb25zdCBsZT1pZS5tYXRjaCgvbmFtZT0iKFteIl0qKSJcc3ZhbHVlPSIoW14iXSopLyk7bGUmJmxlLmxlbmd0aCYmKEpbbGVbMV1dPWxlWzJdKX0pfXJldHVybiBP''@;'; put 'put ''YmplY3Qua2V5cyhKKS5sZW5ndGg/SjpudWxsfWxvZ091dCgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyQ3NyZlRva2VucygpLHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dvdXRVcmwsdm9pZCAw''@;'; put 'put ''KS50aGVuKCgpPT4hMCl9KX19O2NvbnN0IFU9Vz0+L0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHZlcmlmeWluZyB5b3VyIGNyZWRlbnRpYWxzLiBQbGVhc2UgZW50ZXIgeW91ciBjcmVkZW50aWFscyBhZ2Fpbi4vZ20udGVzdChXKX0sNTc6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0''@;'; put 'put ''cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEudmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxG''@;'; put 'put ''fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7Y29uc3QgXz15KDk3NzgpLGc9eSg5MDE3KSxCPXkoMzkwMCk7WC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPWZ1bmN0''@;'; put 'put ''aW9uIHcoUCxGLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB6PSIvU0FTanNBcGkvYXV0aC90b2tlbiIsTj17Y2xpZW50SWQ6Rixjb2RlOk99O3JldHVybiB5aWVsZCBQLnBvc3QoeixOLHZvaWQgMCkudGhlbihMPT57Y29uc3QgSz1MLnJlc3VsdDty''@;'; put 'put ''ZXR1cm57YWNjZXNzX3Rva2VuOksuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpLLnJlZnJlc2hUb2tlbn19KS5jYXRjaChMPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKEwsKDAsZy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFj''@;'; put 'put ''Y2Vzc1Rva2VuRm9yU2FzanMiLEIuU2VydmVyVHlwZS5TYXNqcyx6LE4sRikpfSl9KX19LDM1Njk6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTyx6LE4sTCl7cmV0dXJuIG5ldyhOfHwo''@;'; put 'put ''Tj1Qcm9taXNlKSkoZnVuY3Rpb24oVSxXKXtmdW5jdGlvbiBZKEope3RyeXtlZShMLm5leHQoSikpfWNhdGNoKG5lKXtXKG5lKX19ZnVuY3Rpb24gcShKKXt0cnl7ZWUoTC50aHJvdyhKKSl9Y2F0Y2gobmUpe1cobmUpfX1mdW5jdGlvbiBlZShKKXtKLmRvbmU/VShKLnZhbHVlKTpmdW5jdGlv''@;'; put 'put ''biBLKFUpe3JldHVybiBVIGluc3RhbmNlb2YgTj9VOm5ldyBOKGZ1bmN0aW9uKFcpe1coVSl9KX0oSi52YWx1ZSkudGhlbihZLHEpfWVlKChMPUwuYXBwbHkoTyx6fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0''@;'; put 'put ''QWNjZXNzVG9rZW5Gb3JWaXlhPXZvaWQgMDtjb25zdCBnPXkoMzkwMCksQj15KDk3NzgpLHc9eSgxMzk1KSxQPXkoOTAxNyk7WC5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24gRihPLHosTixMKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IEs7Sz10''@;'; put 'put ''eXBlb2YgST4idSI/YnRvYSh6KyI6IitOKTpJLmZyb20oeisiOiIrTikudG9TdHJpbmcoImJhc2U2NCIpO2NvbnN0IFU9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsVz17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitLLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LFk9bmV3IFVSTFNlYXJjaFBh''@;'; put 'put ''cmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOkx9KSxxPW5ldyBVUkxTZWFyY2hQYXJhbXMoWSk7cmV0dXJuIHlpZWxkIE8ucG9zdChVLHEsdm9pZCAwLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLFcpLnRoZW4oSj0+Si5yZXN1bHQpLmNhdGNo''@;'; put 'put ''KEo9Pnt0aHJvdyBKIGluc3RhbmNlb2Ygdy5DZXJ0aWZpY2F0ZUVycm9yP0o6KDAsQi5wcmVmaXhNZXNzYWdlKShKLCgwLFAuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLGcuU2VydmVyVHlwZS5TYXNW''@;'; put 'put ''aXlhLFUsWSxXLHosTikpfSl9KX19LDkwMTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1YLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4''@;'; put 'put ''PXZvaWQgMDtjb25zdCBJPXkoMzkwMCksZz1QPT5gUmVzcG9uc2UgZnJvbSAkeyhQPT5QPT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/IlZpeWEiOiJTYXNqcyIpKFApfSBpcyBiZWxvdy5gO1guZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9KFAsRixPLHosTixMLEssVSk9Pntjb25zdCBXPXE9''@;'; put 'put ''PkpTT04uc3RyaW5naWZ5KHEsbnVsbCwyKSxZPVtgRXJyb3Igd2hpbGUgJHtQfSBmcm9tICR7en1gLGBUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICR7Rn0gZnVuY3Rpb24uYF07cmV0dXJuIE4mJihZLnB1c2goIlBheWxvYWQ6IiksWS5wdXNoKFcoTikpKSxMJiYoWS5wdXNoKCJIZWFk''@;'; put 'put ''ZXJzOiIpLFkucHVzaChXKEwpKSksSyYmWS5wdXNoKGBDbGllbnRJZDogJHtLfWApLFUmJlkucHVzaChgQ2xpZW50U2VjcmV0OiAke1V9YCksWS5wdXNoKCIiKSxZLnB1c2goYCR7ZyhPKX1gKSxZLnB1c2goIiIpLFkuam9pbigiXG4iKX0sWC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJl''@;'; put 'put ''c3BvbnNlPShQLEYpPT5QLnNwbGl0KGAke2coRil9XG5gKS5wb3AoKX0sNzA0OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSksXz15KDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcoTHx8KEw9UHJvbWlz''@;'; put 'put ''ZSkpKGZ1bmN0aW9uKFcsWSl7ZnVuY3Rpb24gcShuZSl7dHJ5e0ooSy5uZXh0KG5lKSl9Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlvbiBlZShuZSl7dHJ5e0ooSy50aHJvdyhuZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gSihuZSl7bmUuZG9uZT9XKG5lLnZhbHVlKTpmdW5jdGlvbiBV''@;'; put 'put ''KFcpe3JldHVybiBXIGluc3RhbmNlb2YgTD9XOm5ldyBMKGZ1bmN0aW9uKFkpe1koVyl9KX0obmUudmFsdWUpLnRoZW4ocSxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFRv''@;'; put 'put ''a2Vucz12b2lkIDA7Y29uc3QgQj15KDY3OTkpLHc9eSgzOTAwKSxQPXkoMzY2KSxGPXkoMjQ5KTtYLmdldFRva2Vucz1mdW5jdGlvbiBPKHosTixMPXcuU2VydmVyVHlwZS5TYXNWaXlhKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1JLmxvZ2dlcnx8''@;'; put 'put ''XztsZXR7YWNjZXNzX3Rva2VuOlUscmVmcmVzaF90b2tlbjpXLGNsaWVudDpZLHNlY3JldDpxfT1OO2lmKCgwLEIuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShVKXx8KDAsQi5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKShXKSl7aWYoKDAsQi5oYXNUb2tlbkV4cGlyZWQpKFcpKXtjb25zdCBKPSJV''@;'; put 'put ''bmFibGUgdG8gb2J0YWluIG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iO3Rocm93IEsuZXJyb3IoSiksbmV3IEVycm9yKEopfUsuaW5mbygiUmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLCh7YWNjZXNzX3Rva2VuOlUscmVm''@;'; put 'put ''cmVzaF90b2tlbjpXfT1MPT09dy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQoMCxQLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh6LFkscSxXKTp5aWVsZCgwLEYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh6LFcpKX1yZXR1cm57YWNjZXNzX3Rva2VuOlUscmVmcmVzaF90b2tlbjpXLGNsaWVudDpZ''@;'; put 'put ''LHNlY3JldDpxfX0pfX0sMTUyNzpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVz''@;'; put 'put ''Y3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9uKGcsQix3''@;'; put 'put ''LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSgyODUxKSxYKSxfKHkoOTA5NyksWCksXyh5KDkxNjYpLFgpLF8oeSg2NjQzKSxYKX0sOTA5NzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLFguaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9dm9pZCAwLFguaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9ST0+Lzxmb3JtLithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoSSl9LDkxNjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsWC5pc0xvZ0luUmVxdWlyZWQ9ST0+Lzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVteIl0qKS4qPi9nbS50ZXN0KEkpfSw2NjQzOih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD1YLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPVgubG9naW5TdWNjZXNzSGVhZGVycz1YLmRlZmF1bHRTdWNjZXNzSGVhZGVy''@;'; put 'put ''S2V5PXZvaWQgMDtjb25zdCBJPXkoMzkwMCksXz15KDU5MjgpLGc9IllvdSBoYXZlIHNpZ25lZCBpbi4iO1guZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9ImRlZmF1bHQiLFgubG9naW5TdWNjZXNzSGVhZGVycz17ZXM6IllhIHNlIGhhIGluaWNpYWRvIGxhIHNlc2lceGYzbi4iLHRoOiJcdTBl''@;'; put 'put ''MDRcdTBlMzhcdTBlMTNcdTBlMjVcdTBlMDdcdTBlMGFcdTBlMzdcdTBlNDhcdTBlMmRcdTBlNDBcdTBlMDJcdTBlNDlcdTBlMzJcdTBlNDNcdTBlMGFcdTBlNDlcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLGphOiJcdTMwYjVcdTMwYTRcdTMwZjNcdTMwYTRcdTMwZjNcdTMwNTdcdTMwN2Vc''@;'; put 'put ''dTMwNTdcdTMwNWZcdTMwMDIiLG5iOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhlNS4iLHNsOiJQcmlqYXZpbGkgc3RlIHNlLiIsYXI6Ilx1MDY0NFx1MDY0Mlx1MDYyZiBcdTA2NDJcdTA2NDVcdTA2MmEgIixzazoiUHJpaGxceGUxc2lsaSBzdGUgc2EuIix6aF9ISzoiXHU2MGE4XHU1ZGYyXHU3''@;'; put 'put ''NjdiXHU1MTY1XHUzMDAyIix6aF9DTjoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1ZjU1XHUzMDAyIixpdDoiTCd1dGVudGUgc2kgXHhlOCBjb25uZXNzby4iLHN2OiJEdSBoYXIgbG9nZ2F0IGluLiIsaGU6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLG5sOiJVIGhlYnQgemljaCBh''@;'; put 'put ''YW5nZW1lbGQuIixwbDoiWm9zdGFcdTAxNDJlXHUwMTViIHphbG9nb3dhbnkuIixrbzoiXHViODVjXHVhZGY4XHVjNzc4XHVkNTg4XHVjMmI1XHViMmM4XHViMmU0LiIsemhfVFc6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsdHI6Ik90dXJ1bSBhXHhlN3RcdTAxMzFuXHUwMTMx''@;'; put 'put ''ei4iLGl3OiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixmcjoiVm91cyBceGVhdGVzIGNvbm5lY3RceGU5LiIsdWs6Ilx1MDQxMlx1MDQzOCBcdTA0MzJcdTA0MzJcdTA0NTZcdTA0MzlcdTA0NDhcdTA0M2JcdTA0MzggXHUwNDMyIFx1MDQzZVx1MDQzMVx1MDQzYlx1MDQ1Nlx1''@;'; put 'put ''MDQzYVx1MDQzZVx1MDQzMlx1MDQzOFx1MDQzOSBcdTA0MzdcdTA0MzBcdTA0M2ZcdTA0MzhcdTA0NDEuIixwdF9CUjoiVm9jXHhlYSBzZSBjb25lY3RvdS4iLG5vOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhlNS4iLGNzOiJKc3RlIHBcdTAxNTlpaGxceGUxXHUwMTYxZW5pLiIsZmk6Ik9sZXQg''@;'; put 'put ''a2lyamF1dHVudXQgc2lzXHhlNFx4ZTRuLiIscnU6Ilx1MDQxMlx1MDQ0YiBcdTA0MzJcdTA0NGJcdTA0M2ZcdTA0M2VcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2JcdTA0MzggXHUwNDMyXHUwNDQ1XHUwNDNlXHUwNDM0IFx1MDQzMiBcdTA0NDFcdTA0MzhcdTA0NDFcdTA0NDJcdTA0MzVcdTA0''@;'; put 'put ''M2NcdTA0NDMuIixlbDoiXHUwMzg4XHUwM2M3XHUwM2I1XHUwM2M0XHUwM2I1IFx1MDNjM1x1MDNjNVx1MDNiZFx1MDNiNFx1MDNiNVx1MDNiOFx1MDNiNVx1MDNhZi4iLGhyOiJQcmlqYXZpbGkgc3RlIHNlLiIsZGE6IkR1IGVyIGxvZ2dldCBwXHhlNS4iLGRlOiJTaWUgc2luZCBqZXR6dCBh''@;'; put 'put ''bmdlbWVsZGV0LiIsc2g6IlByaWphdmxqZW5pIHN0ZS4iLHB0OiJJbmljaW91IHNlc3NceGUzby4iLGh1OiJCZWplbGVudGtlemV0dC4iLHNyOiJQcmlqYXZsamVuaSBzdGUuIixlbjpnLFtYLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTpnfSxYLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVh''@;'; put 'put ''ZGVyPSgpPT57bGV0IFA9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW1guZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXldO2NvbnN0IEY9KDAsXy5nZXRVc2VyTGFuZ3VhZ2UpKCk7aWYoRil7bGV0IE89WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW0ZdO2lmKE8pUD1PO2Vsc2V7Y29uc3QgTj1PYmplY3Qua2V5''@;'; put 'put ''cyhYLmxvZ2luU3VjY2Vzc0hlYWRlcnMpLmZpbmQoTD0+bmV3IFJlZ0V4cChMLCJpIikudGVzdChGKSk7TiYmKFA9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW05dKX19cmV0dXJuIFB9LFguaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50PShQLEYpPT5QPT09SS5TZXJ2ZXJUeXBlLlNhc2pzP0Y/''@;'; put 'put ''LmxvZ2dlZEluOm5ldyBSZWdFeHAoKDAsWC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSwiZ20iKS50ZXN0KEYpfSw1NDE4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXtyZXR1cm4gbmV3''@;'; put 'put ''KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6ZnVuY3Rpb24g''@;'; put 'put ''eihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgub3Blbldl''@;'; put 'put ''YlBhZ2U9dm9pZCAwO2NvbnN0IF89eSgxMjEwKSxnPXt3aWR0aDo1MDAsaGVpZ2h0OjYwMH07WC5vcGVuV2ViUGFnZT1mdW5jdGlvbiBCKHcsUD0iIixGPWcsTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3dpZHRoOnosaGVpZ2h0Ok59PUYsTD1zY3Jl''@;'; put 'put ''ZW4ud2lkdGgvMi16LzIsSz1zY3JlZW4uaGVpZ2h0LzItTi8yO3JldHVybiB3aW5kb3cub3Blbih3LFAsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke3p9LGhlaWdodD0ke059LGxlZnQ9JHtMfSx0b3A9JHtLfWApfHwoKHlpZWxkKE8/P18ub3BlbkxvZ2luUHJvbXB0''@;'; put 'put ''KSgpKT93aW5kb3cub3Blbih3LFAsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke3p9LGhlaWdodD0ke059LGxlZnQ9JHtMfSx0b3A9JHtLfWApOm51bGwpfSl9fSwyNDk6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0''@;'; put 'put ''ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShxKXt0cnl7WSh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhxKXt0cnl7WSh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0''@;'; put 'put ''aW9uIFkocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KHEudmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDtjb25zdCBfPXkoOTc3OCksZz15KDkwMTcpLEI9eSgzOTAwKTtYLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbiB3KFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IE89Ii9TQVNqc0FwaS9hdXRoL3JlZnJlc2giLHo9e0F1dGhvcml6YXRpb246IkJlYXJlciAiK0Z9O3JldHVybiB5aWVsZCBQLnBvc3QoTyx2b2lkIDAsdm9pZCAwLHZvaWQgMCx6KS50aGVuKEw9Pntjb25zdCBLPUwucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46''@;'; put 'put ''Sy5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOksucmVmcmVzaFRva2VufX0pLmNhdGNoKEw9Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoTCwoMCxnLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yU2FzanMiLEIuU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXNqcyxPKSl9KX0pfX0sMzY2OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXkoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTCxLLFUpe3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFkscSl7ZnVu''@;'; put 'put ''Y3Rpb24gZWUoaWUpe3RyeXtuZShVLm5leHQoaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtuZShVLnRocm93KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBuZShpZSl7aWUuZG9uZT9ZKGllLnZhbHVlKTpmdW5jdGlvbiBXKFkpe3JldHVybiBZIGluc3Rh''@;'; put 'put ''bmNlb2YgSz9ZOm5ldyBLKGZ1bmN0aW9uKHEpe3EoWSl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9bmUoKFU9VS5hcHBseShOLEx8fFtdKSkubmV4dCgpKX0pfSxnPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1''@;'; put 'put ''bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDtjb25zdCBCPXkoMzkwMCksdz15KDk3NzgpLFA9Zyh5KDYyMzApKSxGPXkoNTkyOCksTz15KDkwMTcpO1gucmVmcmVzaFRva2Vuc0ZvclZp''@;'; put 'put ''eWE9ZnVuY3Rpb24geihOLEwsSyxVKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoISgwLEYuaXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUgdXNlZCBieSBOb2RlLiIpO2NvbnN0IFc9''@;'; put 'put ''Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIscT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIisodHlwZW9mIEk+InUiP2J0b2EoTCsiOiIrSyk6SS5mcm9tKEwrIjoiK0spLnRvU3RyaW5nKCJiYXNlNjQiKSl9LGVlPW5ldyBQLmRlZmF1bHQ7cmV0dXJuIGVlLmFwcGVuZCgiZ3JhbnRfdHlwZSIsInJl''@;'; put 'put ''ZnJlc2hfdG9rZW4iKSxlZS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLFUpLHlpZWxkIE4ucG9zdChXLGVlLHZvaWQgMCwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitlZS5fYm91bmRhcnkscSkudGhlbihuZT0+bmUucmVzdWx0KS5jYXRjaChuZT0+e3Rocm93KDAsdy5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlKShuZSwoMCxPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIsQi5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVyxlZSxxLEwsSykpfSl9KX19LDQ1ODI6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0''@;'; put 'put ''Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC52ZXJpZnlTYXM5TG9naW49dm9pZCAwO2NvbnN0IF89eSg1OTI4KSxnPXkoMTUyNyk7WC52ZXJpZnlTYXM5TG9naW49ZnVuY3Rpb24gQih3KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7bGV0IFA9ITEsRj1uZXcgRGF0ZSxPPTA7ZG97aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLHcuY2xvc2VkKWJyZWFrO1A9dy53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKSYmdy53aW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lclRleHQuaW5jbHVkZXMoKDAsZy5n''@;'; put 'put ''ZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSksTz0oKG5ldyBEYXRlKS52YWx1ZU9mKCktRi52YWx1ZU9mKCkpLzFlM313aGlsZSghUCYmTzwzMDApO3JldHVybntpc0xvZ2dlZEluOlB9fSl9fSw2NTQ3OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRo''@;'; put 'put ''aXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0so''@;'; put 'put ''ZWUpfX1mdW5jdGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTG9nZ2VkSW5TQVNWSVlBPVgudmVyaWZ5U2FzVml5YUxvZ2luPXZvaWQgMDtjb25zdCBfPXkoNTkyOCksZz15KDE1MjcpO1gudmVyaWZ5U2FzVml5YUxvZ2luPWZ1bmN0aW9uIEIoUCl7dmFyIEYsTztyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHo9ITEsTj1uZXcgRGF0ZSxMPTA7ZG97aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLFAuY2xvc2VkKWJyZWFrO3o9KDAsWC5pc0xvZ2dlZEluU0FTVklZQSkoKSxMPSgobmV3IERhdGUpLnZhbHVlT2YoKS1OLnZhbHVlT2YoKSkvMWUz''@;'; put 'put ''fXdoaWxlKCF6JiZMPDMwMCk7bGV0IEs9ITE7Tj1uZXcgRGF0ZTtkb3tpZih5aWVsZCgwLF8uZGVsYXkpKDFlMyksUC5jbG9zZWQpYnJlYWs7Sz1QLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpfHwobnVsbD09PShPPW51bGw9PT0oRj1QLndpbmRvdy5kb2N1bWVu''@;'; put 'put ''dC5ib2R5KXx8dm9pZCAwPT09Rj92b2lkIDA6Ri5pbm5lclRleHQpfHx2b2lkIDA9PT1PP3ZvaWQgMDpPLmluY2x1ZGVzKCgwLGcuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpKSxMPSgobmV3IERhdGUpLnZhbHVlT2YoKS1OLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFLJiZMPDMw''@;'; put 'put ''MCk7cmV0dXJue2lzTG9nZ2VkSW46eiYmS319KX0sWC5pc0xvZ2dlZEluU0FTVklZQT0oKT0+ZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX0sNDAzNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDtjb25zdCBJPXkoMjQwMiksXz15KDU5MjgpO1guZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT0oQix3KT0+e2Zvcihjb25zdCBQIGluIHcpe2lmKCFBcnJheS5p''@;'; put 'put ''c0FycmF5KHdbUF0pKWNvbnRpbnVlO2NvbnN0IEY9UCxPPSgwLEkuY29udmVydFRvQ1NWKSh3LFApO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1PKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hh''@;'; put 'put ''cmFjdGVycy4iKTtpZigoMCxfLmlzTm9kZSkoKSlCLmFwcGVuZChGLE8se2ZpbGVuYW1lOmAke0Z9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtlbHNle2NvbnN0IHo9bmV3IEJsb2IoW09dLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7Qi5hcHBlbmQoRix6LGAke0Z9''@;'; put 'put ''LmNzdmApfX1yZXR1cm4gQn19LDIxNzA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEk9eSgyNDAyKSxfPXkoNDc5OSk7WC5nZW5lcmF0''@;'; put 'put ''ZVRhYmxlVXBsb2FkRm9ybT0oQix3KT0+e2NvbnN0IFA9W10sRj17fTtsZXQgTz0wO2Zvcihjb25zdCB6IGluIHcpe08rKywoMCxJLmlzRm9ybWF0c1RhYmxlKSh6KXx8UC5wdXNoKHopO2NvbnN0IE49KDAsSS5jb252ZXJ0VG9DU1YpKHcseik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVO''@;'; put 'put ''R1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO04ubGVuZ3RoPjE2ZTM/KDAsXy5zcGxpdENodW5rcykoTikubWFwKEs9PntCLmFwcGVuZChgc2FzanMke099ZGF0YWAsSyl9KTpG''@;'; put 'put ''W2BzYXNqcyR7T31kYXRhYF09Tn1yZXR1cm4gRi5zYXNqc190YWJsZXM9UC5qb2luKCIgIikse2Zvcm1EYXRhOkIscmVxdWVzdFBhcmFtczpGfX19LDM2MDc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3Jl''@;'; put 'put ''YXRlP2Z1bmN0aW9uKHcsUCxGLE8pe3ZvaWQgMD09PU8mJihPPUYpO3ZhciB6PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUCxGKTsoIXp8fCgiZ2V0ImluIHo/IVAuX19lc01vZHVsZTp6LndyaXRhYmxlfHx6LmNvbmZpZ3VyYWJsZSkpJiYoej17ZW51bWVyYWJsZTohMCxnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gUFtGXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxPLHopfTpmdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSx3W09dPVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZh''@;'; put 'put ''dWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxGKSYmSShQLHcsRil9LGc9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IEI9Zyh5KDU5NTYpKTtfKHkoMTIzMCksWCksXyh5KDEzOTUpLFgpLF8oeSg5ODIxKSxYKSxfKHkoODMwNiksWCksXyh5KDM0NjcpLFgpLF8oeSgzNjAyKSxYKSxYLmRlZmF1bHQ9Qi5kZWZhdWx0fSwxNTcwOmZ1bmN0aW9uKHVlLFgs''@;'; put 'put ''eSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUocSl7dHJ5e1koei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7''@;'; put 'put ''dHJ5e1koei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKHEpe3EuZG9uZT9MKHEudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShxLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAs''@;'; put 'put ''Rnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbXB1dGVKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz15KDM5MDApLGc9eSgxMzk1KSxCPXkoNjExOCk7WC5Db21wdXRlSm9iRXhlY3V0b3I9Y2xhc3MgdyBleHRl''@;'; put 'put ''bmRzIEIuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEYsTyl7c3VwZXIoRixfLlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PU99ZXhlY3V0ZShGLE8seixOLEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPU58fCgo''@;'; put 'put ''KT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgocSxlZSk9Pnt2YXIgSjtudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Snx8Si5leGVjdXRlQ29tcHV0ZUpvYihGLHouY29udGV4dE5hbWUsei5kZWJ1ZyxPLEwsITAsITApLnRoZW4obmU9''@;'; put 'put ''Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChuZSxGLHouZGVidWcpLHEobmUucmVzdWx0KX0pLmNhdGNoKG5lPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtuZSBpbnN0YW5jZW9mIGcuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlh''@;'; put 'put ''QXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QobmUsRix6LmRlYnVnKSxlZShuZXcgZy5FcnJvclJlc3BvbnNlKG5lPy5tZXNzYWdlLG5lKSkpLG5lIGluc3RhbmNlb2YgZy5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShGLE8seixO''@;'; put 'put ''KS50aGVuKGllPT57cShpZSl9LGllPT57ZWUoaWUpfSkpLHlpZWxkIEsoKSk6ZWUobmV3IGcuRXJyb3JSZXNwb25zZShuZT8ubWVzc2FnZSxuZSkpfSkpfSl9KX19fSwzNDkxOmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv''@;'; put 'put ''bihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBxKGVlKXtl''@;'; put 'put ''ZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfXEoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5GaWxlVXBsb2FkZXI9dm9pZCAwO2NvbnN0IF89eSg1OTI4KSxnPXkoMTM5NSksQj15KDM5MDApLHc9eSg2MTE4KTtYLkZpbGVVcGxvYWRlcj1jbGFzcyBQIGV4dGVuZHMgdy5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTyx6LE4sTCl7c3VwZXIo''@;'; put 'put ''Tyx6KSx0aGlzLmpvYnNQYXRoPU4sdGhpcy5yZXF1ZXN0Q2xpZW50PUx9ZXhlY3V0ZShPLHosTixMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7ZmlsZXM6SyxwYXJhbXM6VX09eixXPUx8fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO2lmKCFLPy5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IGcuRXJyb3JSZXNwb25zZSgiQXQgbGVhc3Qgb25lIGZpbGUgbXVzdCBiZSBwcm92aWRlZC4iKTtpZighT3x8IiI9PT1PKXRocm93IG5ldyBnLkVycm9yUmVzcG9uc2UoInNhc0pvYiBtdXN0IGJlIHByb3ZpZGVkLiIpO2xldCBZPSIiO2ZvcihsZXQgbWUgaW4gVSlVLmhh''@;'; put 'put ''c093blByb3BlcnR5KG1lKSYmKFkrPWAmJHttZX09JHtVW21lXX1gKTtjb25zdCBxPU4uYXBwTG9jP04uYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrTy5yZXBsYWNlKC9eXC8vLCIiKTpPLGVlPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3F9JHtZfWAsSj1uZXcgRm9ybURh''@;'; put 'put ''dGE7Zm9yKGxldCBtZSBvZiBLKUouYXBwZW5kKCJmaWxlIixtZS5maWxlLG1lLmZpbGVOYW1lKTtjb25zdCBuZT10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIik7bmUmJkouYXBwZW5kKCJfY3NyZiIsbmUudmFsdWUpLE4uZGVidWcmJkouYXBwZW5kKCJfZGVidWciLCIx''@;'; put 'put ''MzEiKSxOLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YSYmTi5jb250ZXh0TmFtZSYmSi5hcHBlbmQoIl9jb250ZXh0bmFtZSIsTi5jb250ZXh0TmFtZSk7Y29uc3QgaWU9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4''@;'; put 'put ''dC9wbGFpbiJ9O3JldHVybiBuZXcgUHJvbWlzZSgobWUsX2UpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoZWUsSix2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLGllKS50aGVuKFRlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5k''@;'; put 'put ''UmVxdWVzdChUZSxPLE4uZGVidWcpO2xldCBTZT1UZS5yZXN1bHQ7aWYoTi5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNWaXlhOlNlPXlpZWxkKDAsXy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShUZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LE4uc2VydmVyVXJsKTticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXM5OlNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8ucGFyc2VXZWJvdXRSZXNwb25zZSkoVGUucmVzdWx0LGVlKTpUZS5yZXN1bHQ7YnJlYWs7Y2FzZSBCLlNlcnZlclR5cGUuU2FzanM6U2U9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5nZXRWYWxpZEpzb24pKFRlLnJlc3VsdCk6VGUucmVzdWx0fWVsc2UgU2U9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5nZXRWYWxpZEpzb24pKFRlLnJlc3VsdCk6VGUucmVzdWx0O21lKFNlKX0pKS5jYXRjaChUZT0+SSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7VGUgaW5zdGFuY2VvZiBnLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVGUsTyxOLmRlYnVnKSxfZShuZXcgZy5FcnJvclJlc3BvbnNlKFRlPy5tZXNzYWdlLFRlKSkpLFRlIGluc3RhbmNlb2YgZy5M''@;'; put 'put ''b2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShPLHosTixMKS50aGVuKFNlPT57bWUoU2UpfSxTZT0+e19lKFNlKX0pKSx5aWVsZCBXKCkpOl9lKG5ldyBnLkVycm9yUmVzcG9uc2UoIkZpbGUgdXBsb2FkIHJlcXVlc3QgZmFpbGVk''@;'; put 'put ''LiIsVGUpKX0pKX0pfSl9fX0sNDQ0NjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7cShOLm5l''@;'; put 'put ''eHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1Uo''@;'; put 'put ''Syl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSmVzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89eSgzOTAwKSxnPXkoMTM5NSksQj15KDYx''@;'; put 'put ''MTgpLHc9eSg1OTI4KTtYLkplc0pvYkV4ZWN1dG9yPWNsYXNzIFAgZXh0ZW5kcyBCLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihPLHope3N1cGVyKE8sXy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD16fWV4ZWN1dGUoTyx6LE4sTCxLLFU9W10pe3JldHVy''@;'; put 'put ''biBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPUx8fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgocSxlZSk9Pnt2YXIgSjtudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Snx8Si5leGVjdXRlSm9iKE8s''@;'; put 'put ''Ti5jb250ZXh0TmFtZSxOLmRlYnVnLHosSykudGhlbihuZT0+e3RoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KG5lLE8sTi5kZWJ1Zyk7Y29uc3QgaWU9KDAsdy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykobmUsVSk7cShpZSl9KS5jYXRjaChuZT0+SSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bmUgaW5zdGFuY2VvZiBnLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QobmUsTyxOLmRlYnVnKSxlZShuZXcgZy5FcnJvclJlc3BvbnNlKG5lPy5tZXNzYWdlLG5lKSkpLG5lIGluc3RhbmNlb2Yg''@;'; put 'put ''Zy5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShPLHosTixMLEssVSkudGhlbihpZT0+e3EoaWUpfSxpZT0+e2VlKGllKX0pKSx5aWVsZCBXKCkpOmVlKG5ldyBnLkVycm9yUmVzcG9uc2UobmU/Lm1lc3NhZ2UsbmUpKX0pKX0p''@;'; put 'put ''fSl9fX0sNjExODpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQix3LFAsRil7cmV0dXJuIG5ldyhQfHwoUD1Qcm9taXNlKSkoZnVuY3Rpb24oeixOKXtmdW5jdGlvbiBMKFcpe3RyeXtVKEYubmV4dChXKSl9Y2F0Y2go''@;'; put 'put ''WSl7TihZKX19ZnVuY3Rpb24gSyhXKXt0cnl7VShGLnRocm93KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBVKFcpe1cuZG9uZT96KFcudmFsdWUpOmZ1bmN0aW9uIE8oeil7cmV0dXJuIHogaW5zdGFuY2VvZiBQP3o6bmV3IFAoZnVuY3Rpb24oTil7Tih6KX0pfShXLnZhbHVlKS50aGVu''@;'; put 'put ''KEwsSyl9VSgoRj1GLmFwcGx5KEIsd3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkJhc2VKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz15KDU5MjgpO1guQmFzZUpvYkV4ZWN1dG9yPWNsYXNzIGd7Y29uc3RydWN0''@;'; put 'put ''b3IodyxQKXt0aGlzLnNlcnZlclVybD13LHRoaXMuc2VydmVyVHlwZT1QLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLF8uYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRp''@;'; put 'put ''bmdSZXF1ZXN0cyxGPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCBGKCl9KSksdGhpcy53YWl0aW5nUmVxdWVzdHM9W119KX1hcHBlbmRXYWl0aW5nUmVxdWVzdCh3KXt0aGlzLndhaXRpbmdSZXF1ZXN0cy5wdXNoKHcpfWdldFJlcXVlc3RQYXJhbXModyl7Y29uc3Qg''@;'; put 'put ''UD17fTtyZXR1cm4gdy5kZWJ1ZyYmKFAuX29taXR0ZXh0bG9nPSJmYWxzZSIsUC5fb21pdHNlc3Npb25yZXN1bHRzPSJmYWxzZSIsUC5fZGVidWc9MTMxKSxQfX19LDI2OTM6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9u''@;'; put 'put ''KE4sTCxLLFUpe3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFkscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtuZShVLm5leHQoaWUpKX1jYXRjaChsZSl7cShsZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtuZShVLnRocm93KGllKSl9Y2F0Y2gobGUpe3EobGUpfX1mdW5jdGlvbiBu''@;'; put 'put ''ZShpZSl7aWUuZG9uZT9ZKGllLnZhbHVlKTpmdW5jdGlvbiBXKFkpe3JldHVybiBZIGluc3RhbmNlb2YgSz9ZOm5ldyBLKGZ1bmN0aW9uKHEpe3EoWSl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9bmUoKFU9VS5hcHBseShOLEx8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBv''@;'; put 'put ''cnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgZz1fKHkoNjIzMCkpLEI9eSgxMzk1KSx3''@;'; put 'put ''PXkoNTkyOCksUD15KDYxMTgpLEY9eSg3OTUpO1guU2FzOUpvYkV4ZWN1dG9yPWNsYXNzIE8gZXh0ZW5kcyBQLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihMLEssVSxXLFkpe3N1cGVyKEwsSyksdGhpcy5qb2JzUGF0aD1VLHRoaXMucmVxdWVzdENsaWVudD1XLHRoaXMuc2FzOVJlcXVl''@;'; put 'put ''c3RDbGllbnQ9bmV3IEYuU2FzOVJlcXVlc3RDbGllbnQoTCxZKX1leGVjdXRlKEwsSyxVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz0oMCx3LmlzUmVsYXRpdmVQYXRoKShMKSYmVS5hcHBMb2M/VS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStM''@;'; put 'put ''LnJlcGxhY2UoL15cLy8sIiIpOkw7bGV0IFk9YCR7VS5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofT8keyJfcHJvZ3JhbT0iK1d9YDtZPWAke1l9JHtVLnVzZXJuYW1lJiZVLnBhc3N3b3JkPyImX3VzZXJuYW1lPSIrVS51c2VybmFtZSsiJl9wYXNzd29yZD0iK1UucGFzc3dvcmQ6IiJ9YCxZ''@;'; put 'put ''PWAke1l9JHtVLmRlYnVnPyImX2RlYnVnPTEzMSI6IiJ9YDtsZXQgcT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhVKSksZWU9bmV3IGcuZGVmYXVsdDtpZihLKXRyeXtlZT16KGVlLEspfWNhdGNoKGllKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JS''@;'; put 'put ''ZXNwb25zZShpZT8ubWVzc2FnZSxpZSkpfWVsc2UgSz0iIjtmb3IoY29uc3QgaWUgaW4gcSlxLmhhc093blByb3BlcnR5KGllKSYmZWUuYXBwZW5kKGllLHFbaWVdKTt5aWVsZCB0aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKFUudXNlcm5hbWUsVS5wYXNzd29yZCx0aGlzLmpvYnNQYXRo''@;'; put 'put ''KTtjb25zdCBKPUsmJk9iamVjdC5rZXlzKEspLmxlbmd0aD8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitlZS5fYm91bmRhcnk6InRleHQvcGxhaW4iO3JldHVybiBuZXcgUHJvbWlzZSgoaWUsbGUpPT50aGlzLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoWSxlZSx2b2lkIDAsSix7''@;'; put 'put ''QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihtZT0+e3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KG1lLEwsVS5kZWJ1ZyksaWUobWUpfSkuY2F0Y2gobWU9PntsZXQgX2U9bWU7bWUucmVzdWx0JiYiIiE9PW1lLnJlc3VsdD9fZT1tZS5yZXN1bHQ6''@;'; put 'put ''bWUubWVzc2FnZSYmKF9lPW1lLm1lc3NhZ2UpLHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KF9lLEwsVS5kZWJ1ZyksbGUobmV3IEIuRXJyb3JSZXNwb25zZShtZT8ubWVzc2FnZSxtZSkpfSkpfSl9Z2V0UmVxdWVzdFBhcmFtcyhMKXtjb25zdCBLPXt9O3JldHVybiBMLmRlYnVn''@;'; put 'put ''JiYoSy5fZGVidWc9MTMxKSxLfX07Y29uc3Qgej0oTixMKT0+e2Zvcihjb25zdCBLIGluIEwpe2NvbnN0IFU9SyxXPSgwLHcuY29udmVydFRvQ1NWKShMLEspO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1XKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBz''@;'; put 'put ''dHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtOLmFwcGVuZChVLFcse2ZpbGVuYW1lOmAke1V9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1yZXR1cm4gTn19LDEwNjU6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBuZShsZSl7dHJ5e2llKFcudGhyb3cobGUp''@;'; put 'put ''KX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9xKGxlLnZhbHVlKTpmdW5jdGlvbiBZKHEpe3JldHVybiBxIGluc3RhbmNlb2YgVT9xOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShxKX0pfShsZS52YWx1ZSkudGhlbihKLG5lKX1pZSgoVz1XLmFwcGx5KEwsS3x8W10p''@;'; put 'put ''KS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZMLl9fZXNNb2R1bGU/TDp7ZGVmYXVsdDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2FzanNKb2JFeGVjdXRvcj12b2lk''@;'; put 'put ''IDA7Y29uc3QgZz1fKHkoNjIzMCkpLEI9eSgzOTAwKSx3PXkoMTM5NSksUD15KDQwMzcpLEY9eSg1OTI4KSxPPXkoNTkyOCksej15KDYxMTgpO1guU2FzanNKb2JFeGVjdXRvcj1jbGFzcyBOIGV4dGVuZHMgei5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSyxVLFcpe3N1cGVyKEssQi5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhc2pzKSx0aGlzLmpvYnNQYXRoPVUsdGhpcy5yZXF1ZXN0Q2xpZW50PVd9ZXhlY3V0ZShLLFUsVyxZLHEsZWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPVksbmU9KDAsTy5pc1JlbGF0aXZlUGF0aCkoSykmJlcuYXBwTG9j''@;'; put 'put ''P1cuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8vLCIiKTpLO2xldCBpZT1gJHtXLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK25lfWAsbGU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVykpLG1lPSgwLEYu''@;'; put 'put ''Z2V0Rm9ybURhdGEpKCk7aWYoVSl0cnl7bWU9KDAsUC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShtZSxVKX1jYXRjaChTZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoU2U/Lm1lc3NhZ2UsU2UpKX1mb3IoY29uc3QgU2UgaW4gbGUpbGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoU2UpJiZtZS5hcHBlbmQoU2UsbGVbU2VdKTtjb25zdCBfZT1tZSBpbnN0YW5jZW9mIGcuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHttZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3Jt''@;'; put 'put ''LWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoU2UsemUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoaWUsbWUscT8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKFY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKE9iamVjdC5lbnRyaWVzKFYucmVzdWx0KS5sZW5ndGg8MSl0''@;'; put 'put ''aHJvdyBuZXcgdy5Kb2JFeGVjdXRpb25FcnJvcigwLGBObyB3ZWJvdXQgd2FzIHJldHVybmVkIGJ5IGpvYiAke25lfS4gIFBsZWFzZSBjaGVjayB0aGUgU0FTIGxvZyBmb3IgbW9yZSBpbmZvLmAsVi5sb2cpO2NvbnN0e3Jlc3VsdDpwfT1WO3AmJiJzdHJpbmciPT10eXBlb2YgcCYmcC50cmlt''@;'; put 'put ''KCkmJihWLnJlc3VsdD0oMCxPLmdldFZhbGlkSnNvbikocCkpLHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKTtjb25zdCBiPSgwLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKFYsZWUpO1NlKGIpfSkpLmNhdGNoKFY9PkkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe1YgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpLHplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSkpLFYgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWly''@;'; put 'put ''ZWRFcnJvcj8oWXx8emUobmV3IHcuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLFYpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUo''@;'; put 'put ''SyxVLFcsWSxxLGVlKS50aGVuKHA9PntTZShwKX0scD0+e3plKHApfSkpLEomJih5aWVsZCBKKCkpKTp6ZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpfSkpfSl9KX19fSw2MDg0OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2Fp''@;'; put 'put ''dGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gbmUobGUpe3RyeXtpZShXLnRocm93KGxlKSl9Y2F0Y2gobWUpe2Vl''@;'; put 'put ''KG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRvbmU/cShsZS52YWx1ZSk6ZnVuY3Rpb24gWShxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFU/cTpuZXcgVShmdW5jdGlvbihlZSl7ZWUocSl9KX0obGUudmFsdWUpLnRoZW4oSixuZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtdKSkubmV4dCgpKX0pfSxf''@;'; put 'put ''PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihMKXtyZXR1cm4gTCYmTC5fX2VzTW9kdWxlP0w6e2RlZmF1bHQ6TH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLldlYkpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBnPV8oeSg2''@;'; put 'put ''MjMwKSksQj15KDM5MDApLHc9eSgxMzk1KSxQPXkoNDAzNyksRj15KDIxNzApLE89eSg1OTI4KSx6PXkoNjExOCk7WC5XZWJKb2JFeGVjdXRvcj1jbGFzcyBOIGV4dGVuZHMgei5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSyxVLFcsWSxxKXtzdXBlcihLLFUpLHRoaXMuam9ic1BhdGg9''@;'; put 'put ''Vyx0aGlzLnJlcXVlc3RDbGllbnQ9WSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9cX1leGVjdXRlKEssVSxXLFkscSxlZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9WSxuZT0oMCxPLmlzUmVsYXRpdmVQYXRoKShLKSYmVy5hcHBMb2M/Vy5hcHBM''@;'; put 'put ''b2MucmVwbGFjZSgvXC8/JC8sIi8iKStLLnJlcGxhY2UoL15cLy8sIiIpOks7bGV0IGllPWAke1cuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrbmV9YDtpZihXLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YSl7bGV0IFNlO3RyeXtTZT15aWVsZCB0''@;'; put 'put ''aGlzLmdldEpvYlVyaShLKX1jYXRjaCh6ZSl7cmV0dXJuIG5ldyBQcm9taXNlKChWLHApPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt6ZSBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUo''@;'; put 'put ''SyxVLFcsWSxxLGVlKS50aGVuKGI9PntWKGIpfSxiPT57cChiKX0pKSxKJiYoeWllbGQgSigpKSk6cChuZXcgdy5FcnJvclJlc3BvbnNlKHplPy5tZXNzYWdlLHplKSl9KSl9aWUrPVNlLmxlbmd0aD4wPyImX2pvYj0iK1NlOiIiLFNlLmxlbmd0aD4wJiYoaWUrPSImX2pvYj0iK1NlLGllPWll''@;'; put 'put ''LnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3JhbT0iKSksaWUrPVcuY29udGV4dE5hbWUmJiEvXHMvLnRlc3QoVy5jb250ZXh0TmFtZSk/YCZfY29udGV4dG5hbWU9JHtXLmNvbnRleHROYW1lfWA6IiJ9bGV0IGxlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFcp''@;'; put 'put ''KSxtZT0oMCxPLmdldEZvcm1EYXRhKSgpO2lmKFUpe2NvbnN0IFNlPUpTT04uc3RyaW5naWZ5KFUpO2lmKFcuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXM5fHxTZS5sZW5ndGg+NWU1fHxTZS5pbmNsdWRlcygiOyIpKXRyeXttZT0oMCxQLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKG1l''@;'; put 'put ''LFUpfWNhdGNoKHplKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZSh6ZT8ubWVzc2FnZSx6ZSkpfWVsc2UgdHJ5e2NvbnN0e2Zvcm1EYXRhOnplLHJlcXVlc3RQYXJhbXM6Vn09KDAsRi5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybSkobWUsVSk7bWU9emUsbGU9T2Jq''@;'; put 'put ''ZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGxlKSxWKX1jYXRjaCh6ZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoemU/Lm1lc3NhZ2UsemUpKX19Zm9yKGNvbnN0IFNlIGluIGxlKWxlLmhhc093blByb3BlcnR5KFNlKSYmbWUuYXBwZW5kKFNlLGxlW1Nl''@;'; put 'put ''XSk7Y29uc3QgX2U9bWUgaW5zdGFuY2VvZiBnLmRlZmF1bHQmJnR5cGVvZiBGb3JtRGF0YT4idSI/YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7bWUuZ2V0SGVhZGVycygpWyJjb250ZW50LXR5cGUiXX1gOiJtdWx0aXBhcnQvZm9ybS1kYXRhIjtyZXR1cm4gbmV3IFByb21pc2Uo''@;'; put 'put ''KFNlLHplKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KGllLG1lLHE/LmFjY2Vzc190b2tlbixfZSkudGhlbihWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1Zyk7bGV0IHA9Vi5yZXN1bHQ7aWYo''@;'; put 'put ''Vy5kZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNWaXlhOnA9eWllbGQoMCxPLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKFYucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNlcnZlclVybCk7YnJlYWs7Y2FzZSBCLlNlcnZlclR5cGUu''@;'; put 'put ''U2FzOTpwPSJzdHJpbmciPT10eXBlb2YgVi5yZXN1bHQ/KDAsTy5wYXJzZVdlYm91dFJlc3BvbnNlKShWLnJlc3VsdCxpZSk6Vi5yZXN1bHR9Y29uc3QgYj0oMCxPLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKSh7cmVzdWx0OnAsbG9nOlYubG9nfSxlZSk7U2UoYil9KSkuY2F0Y2go''@;'; put 'put ''Vj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7ViBpbnN0YW5jZW9mIHcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1ZyksemUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKSksViBpbnN0YW5j''@;'; put 'put ''ZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyhZfHx6ZShuZXcgdy5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsVikpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3Qo''@;'; put 'put ''KCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLHEsZWUpLnRoZW4ocD0+e1NlKHApfSxwPT57emUocCl9KSksSiYmKHlpZWxkIEooKSkpOnplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSl9KSl9KX0pfWdldEpvYlVyaShLKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7aWYoIXRoaXMuc2FzVml5YUFwaUNsaWVudClyZXR1cm4iIjtsZXQgVyxZLFU9IiI7aWYoKDAsTy5pc1JlbGF0aXZlUGF0aCkoSykpe2NvbnN0IGVlPUsuc3BsaXQoIi8iKTtXPWVlLmxlbmd0aD4xP2VlWzBdOiIiLFk9ZWUubGVuZ3RoPjE/ZWVbMV06IiJ9ZWxzZXtjb25zdCBl''@;'; put 'put ''ZT1LLnNwbGl0KCIvIik7WT1lZS5wb3AoKXx8IiIsVz1lZS5qb2luKCIvIil9aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJKb2IgbmFtZSBpcyBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7Y29uc3QgcT15aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Sm9ic0luRm9sZGVyKFcpO2lm''@;'; put 'put ''KHEpe2NvbnN0IGVlPXEuZmluZChKPT5KLm5hbWU9PT1ZJiYiam9iRGVmaW5pdGlvbiI9PT1KLmNvbnRlbnRUeXBlKTtlZSYmKFU9ZWUudXJpKX1yZXR1cm4gVX0pfX19LDgyMTc6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8''@;'; put 'put ''fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIg''@;'; put 'put ''dyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKHkoMTU3MCksWCksXyh5KDM0OTEpLFgpLF8oeSg0NDQ2KSxYKSxf''@;'; put 'put ''KHkoNjExOCksWCksXyh5KDI2OTMpLFgpLF8oeSg2MDg0KSxYKSxfKHkoMTA2NSksWCl9LDQ1ODg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24o''@;'; put 'put ''bmUsaWUsbGUsbWUpe3ZvaWQgMD09PW1lJiYobWU9bGUpO3ZhciBfZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGllLGxlKTsoIV9lfHwoImdldCJpbiBfZT8haWUuX19lc01vZHVsZTpfZS53cml0YWJsZXx8X2UuY29uZmlndXJhYmxlKSkmJihfZT17ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWVbbGVdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxtZSxfZSl9OmZ1bmN0aW9uKG5lLGllLGxlLG1lKXt2b2lkIDA9PT1tZSYmKG1lPWxlKSxuZVttZV09aWVbbGVdfSksQj10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5j''@;'; put 'put ''cmVhdGU/ZnVuY3Rpb24obmUsaWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6aWV9KX06ZnVuY3Rpb24obmUsaWUpe25lLmRlZmF1bHQ9aWV9KSx3PXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihuZSl7aWYobmUmJm5l''@;'; put 'put ''Ll9fZXNNb2R1bGUpcmV0dXJuIG5lO3ZhciBpZT17fTtpZihudWxsIT1uZSlmb3IodmFyIGxlIGluIG5lKSJkZWZhdWx0IiE9PWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmUsbGUpJiZnKGllLG5lLGxlKTtyZXR1cm4gQihpZSxuZSksaWV9LFA9dGhpcyYmdGhp''@;'; put 'put ''cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG5lLGllLGxlLG1lKXtyZXR1cm4gbmV3KGxlfHwobGU9UHJvbWlzZSkpKGZ1bmN0aW9uKFRlLFNlKXtmdW5jdGlvbiB6ZShiKXt0cnl7cChtZS5uZXh0KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gVihiKXt0cnl7cChtZS50aHJvdyhiKSl9Y2F0''@;'; put 'put ''Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIHAoYil7Yi5kb25lP1RlKGIudmFsdWUpOmZ1bmN0aW9uIF9lKFRlKXtyZXR1cm4gVGUgaW5zdGFuY2VvZiBsZT9UZTpuZXcgbGUoZnVuY3Rpb24oU2Upe1NlKFRlKX0pfShiLnZhbHVlKS50aGVuKHplLFYpfXAoKG1lPW1lLmFwcGx5KG5lLGllfHxbXSkp''@;'; put 'put ''Lm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgudGhyb3dJZkVycm9yPVguUmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3QgRj13KHkoODM3MykpLE89eSgxNTI3KSx6PXkoMTM5NSksTj15KDI4MTMpLEw9eSg5Nzc4KSxLPXkoOTUy''@;'; put 'put ''NiksVT15KDU5MjgpLFc9eSgxMDA1KSxZPXkoOTUzOSk7WC5SZXF1ZXN0Q2xpZW50PWNsYXNzIHF7Y29uc3RydWN0b3IoaWUsbGUsbWUsX2Upe3RoaXMuYmFzZVVybD1pZSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMucmVxdWVzdHNMaW1pdD0xMCx0aGlzLnZlcmJvc2VNb2RlPSExLHRoaXMuY3Ny''@;'; put 'put ''ZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmdldFJlcXVlc3RzPSgpPT50aGlzLnJlcXVlc3RzLHRoaXMuY2xlYXJSZXF1ZXN0cz0oKT0+e3RoaXMucmVxdWVzdHM9W119LHRoaXMuYXV0aG9yaXplPVRlPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQg''@;'; put 'put ''U2U9bnVsbDtjb25zdCB6ZT17fSxWPVRlLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cC5pbm5lckhUTUw9Vjtjb25zdCBiPXAucXVlcnlTZWxlY3RvcigiI2FwcGxpY2F0aW9uX2F1dGhvcml6YXRpb24iKTtT''@;'; put 'put ''ZT1iP3RoaXMuYmFzZVVybCtiLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik6bnVsbDtjb25zdCB4PWI/LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0Iik7Zm9yKGNvbnN0IEggb2YgeCkidXNlcl9vYXV0aF9hcHByb3ZhbCI9PT1ILm5hbWUmJihILnZhbHVlPSJ0cnVlIiksemVbSC5uYW1lXT1ILnZh''@;'; put 'put ''bHVlO2NvbnN0IEM9T2JqZWN0LmtleXMoemUpLmZpbmQoSD0+SD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiY3NyZiIpKTtDJiYodGhpcy5jc3JmVG9rZW4udmFsdWU9emVbQ10sdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZT10aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lfHwieC1jc3JmLXRv''@;'; put 'put ''a2VuIik7Y29uc3QgVD1uZXcgRm9ybURhdGE7Zm9yKGNvbnN0IEggaW4gemUpemUuaGFzT3duUHJvcGVydHkoSCkmJlQuYXBwZW5kKEgsemVbSF0pO2lmKCFTZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggRm9ybSBVUkwgaXMgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHlpZWxkIHRoaXMu''@;'; put 'put ''aHR0cENsaWVudC5wb3N0KFNlLFQse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn19KS50aGVuKEg9PkguZGF0YSkuY2F0Y2goSD0+eyhJLmxvZ2dlcnx8XykuZXJyb3IoSCl9KX0pLHRoaXMucHJldHRpZnlTdHJp''@;'; put 'put ''bmc9VGU9PigwLFkuaW5zcGVjdCkoVGUse2NvbG9yczoiYmxlYWNoZWQiIT09dGhpcy52ZXJib3NlTW9kZX0pLHRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHk9VGU9PntpZighVGUpcmV0dXJuIiI7bGV0IFNlO2lmKCJzdHJpbmciPT10eXBlb2YgVGUpdHJ5e1NlPUpTT04ucGFyc2UoVGUpfWNh''@;'; put 'put ''dGNoe1NlPVRlfWVsc2UgU2U9VGU7Y29uc3QgemU9dGhpcy5wcmV0dGlmeVN0cmluZyhTZSkuc3BsaXQoIlxuIik7cmV0dXJuIHplLmxlbmd0aD41MSYmKHplLnNwbGljZSg1MCksemUucHVzaCgiLi4uIikpLHplLmpvaW4oIlxuIil9LHRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZT1UZT0+e3Zh''@;'; put 'put ''ciBTZSx6ZSxWLHA7Y29uc3R7c3RhdHVzOmIsY29uZmlnOngscmVxdWVzdDpDLGRhdGE6VH09VGUsSD1udWxsIT09KFNlPUM/Ll9oZWFkZXIpJiZ2b2lkIDAhPT1TZT9TZToiTm90IHByb3ZpZGVkXG4iLGo9bnVsbCE9PShWPW51bGw9PT0oemU9Qz8ucmVzKXx8dm9pZCAwPT09emU/dm9pZCAw''@;'; put 'put ''OnplLnJhd0hlYWRlcnMpJiZ2b2lkIDAhPT1WP1Y6WyJOb3QgcHJvdmlkZWQiXSxFPXRoaXMuZm9ybWF0SGVhZGVycyhqKSxtPXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoVCk7cmV0dXJuIG51bGw9PT0ocD1JLmxvZ2dlcil8fHZvaWQgMD09PXB8fHAuaW5mbyhgSFRUUCBSZXF1ZXN0IChm''@;'; put 'put ''aXJzdCA1MCBsaW5lcyk6XG4ke0h9JHt0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KHguZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKGIpfVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke0V9JHttP2BcblxuJHttfWA6IiJ9''@;'; put 'put ''XG5gKSxUZX0sdGhpcy5oYW5kbGVBeGlvc0Vycm9yPVRlPT57dmFyIFNlLHplLFYscCxiLHg7Y29uc3QgQz0iTm90IHByb3ZpZGVkIix7cmVzcG9uc2U6VCxyZXF1ZXN0OkgsY29uZmlnOmp9PVRlO2xldCBFPXtfaGVhZGVyOmAke0N9XG5gLHJlczp7cmF3SGVhZGVyczpbQ119fTtIJiYoRT17''@;'; put 'put ''X2hlYWRlcjpudWxsIT09KFY9bnVsbCE9PShTZT1ILl9oZWFkZXIpJiZ2b2lkIDAhPT1TZT9TZTpudWxsPT09KHplPUguX2N1cnJlbnRSZXF1ZXN0KXx8dm9pZCAwPT09emU/dm9pZCAwOnplLl9oZWFkZXIpJiZ2b2lkIDAhPT1WP1Y6QyxyZXM6e3Jhd0hlYWRlcnM6bnVsbCE9PShiPW51bGw9''@;'; put 'put ''PT0ocD1ILnJlcyl8fHZvaWQgMD09PXA/dm9pZCAwOnAucmF3SGVhZGVycykmJnZvaWQgMCE9PWI/YjpbQ119fSk7bGV0IG09VHx8e3N0YXR1czpDLHJlcXVlc3Q6RSxjb25maWc6anx8e2RhdGE6QyxoZWFkZXJzOnt9fSxkYXRhOkN9O2NvbnN0e3N0YXR1czpBLHJlcXVlc3Q6YWUsZGF0YTp0''@;'; put 'put ''ZX09bSx7X2hlYWRlcjpzZSxyZXM6d2V9PWFlLFVlPXRoaXMuZm9ybWF0SGVhZGVycyh3ZS5yYXdIZWFkZXJzKSxKZT10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KHRlKTtyZXR1cm4gbnVsbD09PSh4PUkubG9nZ2VyKXx8dm9pZCAwPT09eHx8eC5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0''@;'; put 'put ''IDUwIGxpbmVzKTpcbiR7c2V9JHt0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KGo/LmRhdGEpfVxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICR7dGhpcy5wcmV0dGlmeVN0cmluZyhBKX1cblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuJHtVZX0ke0plP2BcblxuJHtKZX1gOiIi''@;'; put 'put ''fVxuYCksVGV9LHRoaXMuZm9ybWF0SGVhZGVycz1UZT0+VGUucmVkdWNlKChTZSx6ZSxWKT0+U2UrKFYlMj09MD9gJHswPT09Vj8iIjoiXG4ifSR7emV9YDpgOiAke3plfWApLCIiKSx0aGlzLnNldFZlcmJvc2VNb2RlPVRlPT57dGhpcy52ZXJib3NlTW9kZT1UZSx0aGlzLnZlcmJvc2VNb2Rl''@;'; put 'put ''P3RoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKTp0aGlzLmRpc2FibGVWZXJib3NlTW9kZSgpfSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlPShUZT10aGlzLmhhbmRsZUF4aW9zUmVzcG9uc2UsU2U9dGhpcy5oYW5kbGVBeGlvc0Vycm9yKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yPXRoaXMuaHR0cENs''@;'; put 'put ''aWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFRlLFNlKX0sdGhpcy5kaXNhYmxlVmVyYm9zZU1vZGU9KCk9Pnt0aGlzLmh0dHBJbnRlcmNlcHRvciYmdGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS5lamVjdCh0aGlzLmh0dHBJbnRlcmNlcHRvcil9LHRoaXMuZ2V0''@;'; put 'put ''SGVhZGVycz0oVGUsU2UpPT57Y29uc3QgemU9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT1TZSYmKHplWyJDb250ZW50LVR5cGUiXT1TZSksemUuQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PVNlPyJhcHBsaWNhdGlvbi9qc29uIjoiKi8qIixUZSYm''@;'; put 'put ''KHplLkF1dGhvcml6YXRpb249YEJlYXJlciAke1RlfWApLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlJiYoemVbdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5jc3JmVG9rZW4udmFsdWUpLHplfSx0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9h''@;'; put 'put ''ZENzcmZUb2tlbj1UZT0+e2NvbnN0IFNlPXRoaXMucGFyc2VDc3JmVG9rZW4oVGUpO1NlJiYodGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPVNlKX0sdGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbj1UZT0+e2NvbnN0IFNlPXRoaXMucGFyc2VDc3JmVG9rZW4oVGUpO1NlJiYodGhpcy5jc3JmVG9r''@;'; put 'put ''ZW49U2UpfSx0aGlzLnBhcnNlQ3NyZlRva2VuPVRlPT57dmFyIFNlO2NvbnN0IHplPW51bGw9PT0oU2U9VGUuaGVhZGVyc1sieC1jc3JmLWhlYWRlciJdKXx8dm9pZCAwPT09U2U/dm9pZCAwOlNlLnRvTG93ZXJDYXNlKCk7aWYoemUpcmV0dXJue2hlYWRlck5hbWU6emUsdmFsdWU6VGUuaGVh''@;'; put 'put ''ZGVyc1t6ZV18fCIifX0sdGhpcy5oYW5kbGVFcnJvcj0oVGUsU2UsemU9ITEpPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBWPVRlLnJlc3BvbnNlO2lmKFRlIGluc3RhbmNlb2Ygei5BdXRob3JpemVFcnJvcil7Y29uc3QgcD15aWVsZCB0aGlzLmh0dHBDbGllbnQu''@;'; put 'put ''Z2V0KFRlLmNvbmZpcm1Vcmwse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4iLEFjY2VwdDoiKi8qIn19KS5jYXRjaChiPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIGdldHRpbmcgZXJyb3IgY29uZmlybVVy''@;'; put 'put ''bC4gIil9KTtyZXR1cm4oMCxPLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShwPy5kYXRhKSYmKHlpZWxkIHRoaXMuYXV0aG9yaXplKHAuZGF0YSkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBhdXRob3JpemluZyByZXF1ZXN0LiAiKX0pKSx5aWVs''@;'; put 'put ''ZCBTZSgpLmNhdGNoKGI9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pfWlmKFRlIGluc3RhbmNlb2Ygei5Mb2dpblJlcXVpcmVkRXJyb3IpdGhyb3cgdGhpcy5jbGVhckNzcmZUb2tlbnMoKSxU''@;'; put 'put ''ZTtpZihUZSBpbnN0YW5jZW9mIFcuSW52YWxpZFNBU2pzQ3NyZkVycm9yKXJldHVybiB5aWVsZCB0aGlzLmh0dHBDbGllbnQuZ2V0KCIvIix7d2l0aFhTUkZUb2tlbjohMH0pLnRoZW4ocD0+e3ZhciBiO2NvbnN0IHg9bnVsbD09PShiPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNS''@;'; put 'put ''Ri1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyhwLmRhdGEpKXx8dm9pZCAwPT09Yj92b2lkIDA6YlsxXTt4JiYoZG9jdW1lbnQuY29va2llPXgpfSkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShw''@;'; put 'put ''LCJFcnJvciB3aGlsZSByZS1mZXRjaGluZyBDU1JGIHRva2VuLiIpfSkseWllbGQgU2UoKS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KTtpZig0MDM9PT1WPy5zdGF0dXN8fDQ0''@;'; put 'put ''OT09PVY/LnN0YXR1cyl7aWYodGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbihWKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZSlyZXR1cm4geWllbGQgU2UoKS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIGV4''@;'; put 'put ''ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KTt0aHJvdyBUZX1pZig0MDQ9PT1WPy5zdGF0dXMpdGhyb3cgbmV3IHouTm90Rm91bmRFcnJvcihWLmNvbmZpZy51cmwpO2lmKDUwMiE9PVY/LnN0YXR1cyl0aHJvdyBUZS5pc0F4aW9zRXJyb3ImJiJVTkFCTEVfVE9fVkVSSUZZ''@;'; put 'put ''X0xFQUZfU0lHTkFUVVJFIj09PVRlLmNvZGU/bmV3IHouQ2VydGlmaWNhdGVFcnJvcihUZS5tZXNzYWdlKTpUZS5tZXNzYWdlP1RlOigwLEwucHJlZml4TWVzc2FnZSkoVGUsIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKTtpZih6ZSl0aHJvdyBuZXcgei5JbnRlcm5hbFNlcnZlckVy''@;'; put 'put ''cm9yfSksdGhpcy5jcmVhdGVIdHRwQ2xpZW50KGllLGxlKSxtZSYmKHRoaXMucmVxdWVzdHNMaW1pdD1tZSksX2UmJih0aGlzLnNldFZlcmJvc2VNb2RlKF9lKSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCkpfXNldENvbmZpZyhpZSxsZSl7dGhpcy5jcmVhdGVIdHRwQ2xpZW50KGllLGxlKX1z''@;'; put 'put ''YXZlTG9jYWxTdG9yYWdlVG9rZW4oaWUsbGUpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsaWUpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLGxlKX1nZXRDc3JmVG9rZW4oaWU9ImdlbmVyYWwiKXtyZXR1cm4iZmlsZSI9PT1pZT90aGlzLmZpbGVVcGxv''@;'; put 'put ''YWRDc3JmVG9rZW46dGhpcy5jc3JmVG9rZW59Y2xlYXJDc3JmVG9rZW5zKCl7dGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn19Y2xlYXJMb2NhbFN0b3JhZ2VUb2tlbnMoKXtsb2Nh''@;'; put 'put ''bFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLCIiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIiwiIil9Z2V0QmFzZVVybCgpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuYmFzZVVSTHx8IiJ9YXBwZW5kUmVxdWVzdChpZSxsZSxtZSl7bGV0IF9lPSIi''@;'; put 'put ''LFRlPSIiLFNlPW51bGw7bWUmJihpZT8ubG9nPyhfZT0oMCxVLnBhcnNlU291cmNlQ29kZSkoaWUubG9nKSxUZT0oMCxVLnBhcnNlR2VuZXJhdGVkQ29kZSkoaWUubG9nKSxTZT1pZT8ucmVzdWx0P2llLnJlc3VsdC5XT1JLOmllLmxvZyk6aWU/LnJlc3VsdCYmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''aWUucmVzdWx0JiYoX2U9KDAsVS5wYXJzZVNvdXJjZUNvZGUpKGllLnJlc3VsdCksVGU9KDAsVS5wYXJzZUdlbmVyYXRlZENvZGUpKGllLnJlc3VsdCkpLFNlPWllLnJlc3VsdC5XT1JLKSk7Y29uc3QgemU9InN0cmluZyI9PXR5cGVvZiBpZT8ucmVzdWx0P2llPy5yZXN1bHQ6SlNPTi5zdHJp''@;'; put 'put ''bmdpZnkoaWU/LnJlc3VsdCxudWxsLDIpO3RoaXMucmVxdWVzdHMucHVzaCh7bG9nRmlsZTppZT8ubG9nfHx6ZXx8aWUsc2VydmljZUxpbms6bGUsdGltZXN0YW1wOm5ldyBEYXRlLHNvdXJjZUNvZGU6X2UsZ2VuZXJhdGVkQ29kZTpUZSxTQVNXT1JLOlNlfSksdGhpcy5yZXF1ZXN0cy5sZW5n''@;'; put 'put ''dGg+dGhpcy5yZXF1ZXN0c0xpbWl0JiZ0aGlzLnJlcXVlc3RzLnNwbGljZSgwLDEpfWdldChpZSxsZSxtZT0iYXBwbGljYXRpb24vanNvbiIsX2U9e30sVGU9ITEpe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB6ZT17aGVhZGVyczpPYmplY3QuYXNzaWdu''@;'; put 'put ''KE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKGxlLG1lKSksX2UpLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1tZT8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09PW1lJiYoemUudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0''@;'; put 'put ''aGlzLmh0dHBDbGllbnQuZ2V0KGllLHplKS50aGVuKFY9PigoMCxYLnRocm93SWZFcnJvcikoViksdGhpcy5wYXJzZVJlc3BvbnNlKFYpKSkuY2F0Y2goVj0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoViwoKT0+dGhpcy5n''@;'; put 'put ''ZXQoaWUsbGUsbWUsX2UpLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KSxUZSl9KSl9KX1wb3N0KGllLGxlLG1lLF9lPSJhcHBsaWNhdGlvbi9qc29uIixUZT17fSxTZT17fSl7cmV0''@;'; put 'put ''dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHplPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobWUsX2UpKSxUZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KGllLGxlLE9iamVjdC5hc3NpZ24oe2hlYWRlcnM6emUs''@;'; put 'put ''d2l0aFhTUkZUb2tlbjohMH0sU2UpKS50aGVuKFY9PigoMCxYLnRocm93SWZFcnJvcikoViksdGhpcy5wYXJzZVJlc3BvbnNlKFYpKSkuY2F0Y2goVj0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoViwoKT0+dGhpcy5wb3N0''@;'; put 'put ''KGllLGxlLG1lLF9lLFRlKSl9KSl9KX1wdXQoaWUsbGUsbWUsX2U9e30pe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlvbi9qc29uIikpLF9l''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dChpZSxsZSx7aGVhZGVyczpUZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihTZT0+KCgwLFgudGhyb3dJZkVycm9yKShTZSksdGhpcy5wYXJzZVJlc3BvbnNlKFNlKSkpLmNhdGNoKFNlPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihTZSwoKT0+dGhpcy5wdXQoaWUsbGUsbWUsX2UpKX0pKX0pfWRlbGV0ZShpZSxsZSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXRoaXMuZ2V0SGVhZGVycyhsZSwiYXBwbGljYXRpb24vanNv''@;'; put 'put ''biIpO3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVsZXRlKGllLHtoZWFkZXJzOm1lLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKF9lPT4oKDAsWC50aHJvd0lmRXJyb3IpKF9lKSx0aGlzLnBhcnNlUmVzcG9uc2UoX2UpKSkuY2F0Y2goX2U9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKF9lLCgpPT50aGlzLmRlbGV0ZShpZSxsZSkpfSkpfSl9cGF0Y2goaWUsbGU9e30sbWUpe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBfZT10aGlzLmdldEhlYWRlcnMobWUsImFwcGxpY2F0aW9u''@;'; put 'put ''L2pzb24iKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBhdGNoKGllLGxlLHtoZWFkZXJzOl9lLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKFRlPT4oKDAsWC50aHJvd0lmRXJyb3IpKFRlKSx0aGlzLnBhcnNlUmVzcG9uc2UoVGUpKSkuY2F0Y2goVGU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFRlLCgpPT50aGlzLnBhdGNoKGllLGxlLG1lKSl9KSl9KX11cGxvYWRGaWxlKGllLGxlLG1lKXt2YXIgX2U7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXRoaXMuZ2V0SGVhZGVy''@;'; put 'put ''cyhtZSwiYXBwbGljYXRpb24vanNvbiIpO251bGwhPT0oX2U9dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKSYmdm9pZCAwIT09X2UmJl9lLnZhbHVlJiYoVGVbdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi52YWx1ZSk7dHJ5e2Nv''@;'; put 'put ''bnN0IFNlPXlpZWxkIHRoaXMuaHR0cENsaWVudC5wb3N0KGllLGxlLHtoZWFkZXJzOlRlLHRyYW5zZm9ybVJlcXVlc3Q6emU9PnplfSk7cmV0dXJue3Jlc3VsdDpTZS5kYXRhLGV0YWc6U2UuaGVhZGVycy5ldGFnfX1jYXRjaChTZSl7Y29uc3QgemU9U2UucmVzcG9uc2U7aWYoNDAzPT09emU/''@;'; put 'put ''LnN0YXR1c3x8NDQ5PT09emU/LnN0YXR1cyl7aWYodGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW4oemUpLHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbilyZXR1cm4gdGhpcy51cGxvYWRGaWxlKGllLGxlLG1lKTt0aHJvdyBTZX10aHJvdyBTZX19KX1wYXJzZVJlc3BvbnNlKGll''@;'; put 'put ''KXtjb25zdCBsZT1pZT8uaGVhZGVycz9pZS5oZWFkZXJzLmV0YWc6IiI7bGV0IG1lLF9lPSExO3RyeXttZT0ic3RyaW5nIj09dHlwZW9mIGllLmRhdGE/SlNPTi5wYXJzZShpZS5kYXRhKTppZS5kYXRhfWNhdGNoe3RyeXttZT1KU09OLnBhcnNlKCgwLE4ucGFyc2VXZWJvdXRSZXNwb25zZSko''@;'; put 'put ''aWUuZGF0YSkpfWNhdGNoe21lPWllLmRhdGF9X2U9ITB9bGV0IFRlPXtyZXN1bHQ6bWUsZXRhZzpsZSxzdGF0dXM6aWUuc3RhdHVzfTtyZXR1cm4gX2UmJihUZS5sb2c9aWUuZGF0YSksVGV9Y3JlYXRlSHR0cENsaWVudChpZSxsZSl7Y29uc3QgbWU9bGU/bmV3IEYuQWdlbnQobGUpOnZvaWQg''@;'; put 'put ''MDt0aGlzLmh0dHBDbGllbnQ9KDAsVS5jcmVhdGVBeGlvc0luc3RhbmNlKShpZSxtZSksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPV9lPT5fZT49MjAwJiZfZTw9NDAxfX0sWC50aHJvd0lmRXJyb3I9bmU9Pnt2YXIgaWUsbGUsbWUsX2UsVGUsU2UsemU7c3dpdGNo''@;'; put 'put ''KG5lLnN0YXR1cyl7Y2FzZSA0MDA6aWYoIm9iamVjdCI9PXR5cGVvZiBuZS5kYXRhJiYiaW52YWxpZF9ncmFudCI9PT1uZS5kYXRhLmVycm9yKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcihuZS5kYXRhKTtpZigic3RyaW5nIj09dHlwZW9mIG5lLmRhdGEmJiJpbnZhbGlkIGNzcmYg''@;'; put 'put ''dG9rZW4hIj09PW5lLmRhdGEudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgVy5JbnZhbGlkU0FTanNDc3JmRXJyb3I7YnJlYWs7Y2FzZSA0MDE6dGhyb3cib2JqZWN0Ij09dHlwZW9mIG5lLmRhdGE/bmV3IHouTG9naW5SZXF1aXJlZEVycm9yKG5lLmRhdGEpOm5ldyB6LkxvZ2luUmVxdWlyZWRF''@;'; put 'put ''cnJvcn1pZihudWxsIT09KGxlPW51bGw9PT0oaWU9bmUuZGF0YSl8fHZvaWQgMD09PWllP3ZvaWQgMDppZS5lbnRpdHlJRCkmJnZvaWQgMCE9PWxlJiZsZS5pbmNsdWRlcygibG9naW4iKSl0aHJvdyBuZXcgei5Mb2dpblJlcXVpcmVkRXJyb3I7aWYoInN0cmluZyI9PXR5cGVvZiBuZS5kYXRh''@;'; put 'put ''JiYoMCxPLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShuZS5kYXRhKSl0aHJvdyBuZXcgei5BdXRob3JpemVFcnJvcigiQXV0aG9yaXphdGlvbiByZXF1aXJlZCIsbmUucmVxdWVzdC5yZXNwb25zZVVSTCk7aWYoInN0cmluZyI9PXR5cGVvZiBuZS5kYXRhJiYoMCxPLmlzTG9nSW5SZXF1aXJl''@;'; put 'put ''ZCkobmUuZGF0YSkmJihudWxsPT09KF9lPW51bGw9PT0obWU9bmUuY29uZmlnKXx8dm9pZCAwPT09bWU/dm9pZCAwOm1lLnVybCl8fHZvaWQgMD09PV9lfHwhX2UuaW5jbHVkZXMoIi9TQVNMb2dvbi9sb2dpbiIpKSl0aHJvdyBuZXcgei5Mb2dpblJlcXVpcmVkRXJyb3I7aWYobnVsbCE9PShU''@;'; put 'put ''ZT1uZS5kYXRhKSYmdm9pZCAwIT09VGUmJlRlLmF1dGhfcmVxdWVzdCl0aHJvdyBuZXcgei5BdXRob3JpemVFcnJvcihuZS5kYXRhLm1lc3NhZ2UsbmUucmVxdWVzdC5yZXNwb25zZVVSTCk7aWYobnVsbCE9PSh6ZT1udWxsPT09KFNlPW5lLmNvbmZpZyl8fHZvaWQgMD09PVNlP3ZvaWQgMDpT''@;'; put 'put ''ZS51cmwpJiZ2b2lkIDAhPT16ZSYmemUuaW5jbHVkZXMoInNhc0F1dGhFcnJvciIpKXRocm93IG5ldyBLLlNBUzlBdXRoRXJyb3I7Y29uc3QgVj1KKG5lLmRhdGEpO2lmKFYpdGhyb3cgVn07Y29uc3QgSj1uZT0+e2lmKCFuZSlyZXR1cm4gbnVsbDt0cnl7Y29uc3QgaWU9SlNPTi5wYXJzZShu''@;'; put 'put ''ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7aWYoaWUuZXJyb3JDb2RlJiZpZS5tZXNzYWdlKXJldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcihpZS5lcnJvckNvZGUsaWUubWVzc2FnZSxuZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSl9Y2F0Y2h7fXRyeXtpZihuZT8uaW5jbHVkZXMo''@;'; put 'put ''J3siZXJyb3JDb2RlJykpe2NvbnN0IGxlPW5lLnNwbGl0KCd7ImVycm9yQ29kZScpO2lmKGxlLmxlbmd0aD4xKXtjb25zdCBtZT0neyJlcnJvckNvZGUnK2xlWzFdLnNwbGl0KCcifScpWzBdKycifScsX2U9SlNPTi5wYXJzZShtZS5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtyZXR1cm4gbmV3''@;'; put 'put ''IHouSm9iRXhlY3V0aW9uRXJyb3IoX2UuZXJyb3JDb2RlLF9lLm1lc3NhZ2UsbmU/LnJlcGxhY2UoL1tcblxyXS9nLCJcbiIpKX19fWNhdGNoe310cnl7aWYobmU/Lm1hdGNoKC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKSl7Y29uc3QgbGU9bmUuc3BsaXQoL3N0b3JlZCBwcm9jZXNz''@;'; put 'put ''IG5vdCBmb3VuZDogL2kpO2lmKGxlLmxlbmd0aD4xKXtjb25zdCBtZT1sZVsxXS5zcGxpdCgiPGk+IilbMV0uc3BsaXQoIjwvaT4iKVswXSxfZT1tZS5lbmRzV2l0aCgicnVubmVyIik/IlNBU0pTIHJ1bm5lciBub3QgZm91bmQuIEhlcmUncyB0aGUgbGluayAoaHR0cHM6Ly9jbGkuc2FzanMu''@;'; put 'put ''aW8vYXV0aC8jc2FzanMtcnVubmVyKSB0byB0aGUgU0FTIGNvZGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBTQVNqcyBydW5uZXIiOmBTdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6ICR7bWV9YDtyZXR1cm4gbmV3IHouSm9iRXhlY3V0aW9uRXJyb3IoNTAwLF9lLCIiKX19fWNhdGNoe310cnl7aWYo''@;'; put 'put ''IW5lPy5tYXRjaCgvPj53ZWJvdXRCRUdJTjw8LykmJm5lPy5tYXRjaCgvU3RvcmVkIFByb2Nlc3MgRXJyb3IvaSkmJm5lPy5tYXRjaCgvVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4vaSkpe2NvbnN0IGxlPW5lLnNwbGl0KCI8aDI+U0FTIExvZzwvaDI+Iik7aWYobGUubGVu''@;'; put 'put ''Z3RoPjEpe2NvbnN0IG1lPWxlWzFdLnNwbGl0KCI8cHJlPiIpWzFdLnNwbGl0KCI8L3ByZT4iKVswXTtyZXR1cm4gbmV3IHouSm9iRXhlY3V0aW9uRXJyb3IoNTAwLCJUaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLiIsbWUpfX19Y2F0Y2h7fXJldHVybiBudWxsfX0sNzk1OmZ1''@;'; put 'put ''bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihMLEssVSxXKXt2b2lkIDA9PT1XJiYoVz1VKTt2YXIgWT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEssVSk7KCFZfHwoImdl''@;'; put 'put ''dCJpbiBZPyFLLl9fZXNNb2R1bGU6WS53cml0YWJsZXx8WS5jb25maWd1cmFibGUpKSYmKFk9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEtbVV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEwsVyxZKX06ZnVuY3Rpb24oTCxLLFUsVyl7dm9pZCAwPT09VyYmKFc9VSks''@;'; put 'put ''TFtXXT1LW1VdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTCxLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoTCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6S30pfTpmdW5jdGlvbihMLEspe0wuZGVmYXVsdD1LfSksZz10''@;'; put 'put ''aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oTCl7aWYoTCYmTC5fX2VzTW9kdWxlKXJldHVybiBMO3ZhciBLPXt9O2lmKG51bGwhPUwpZm9yKHZhciBVIGluIEwpImRlZmF1bHQiIT09VSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEwsVSkmJkkoSyxMLFUp''@;'; put 'put ''O3JldHVybiBfKEssTCksS30sQj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIG5l''@;'; put 'put ''KGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP3EobGUudmFsdWUpOmZ1bmN0aW9uIFkocSl7cmV0dXJuIHEgaW5zdGFuY2VvZiBVP3E6bmV3IFUoZnVuY3Rpb24oZWUpe2VlKHEpfSl9KGxlLnZhbHVlKS50aGVuKEosbmUp''@;'; put 'put ''fWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2FzOVJlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IHc9eSg4MjI0KSxQPWcoeSg3ODU3KSksRj15KDk3NzgpLE89eSg0NTg4KSx6PXko''@;'; put 'put ''MTM5NSk7WC5TYXM5UmVxdWVzdENsaWVudD1jbGFzcyBOIGV4dGVuZHMgTy5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKEssVSl7c3VwZXIoSyxVKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMubWF4UmVkaXJlY3RzPTAsdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVz''@;'; put 'put ''PVc9Plc+PTIwMCYmVzwzMDMsdy53cmFwcGVyJiYoKDAsdy53cmFwcGVyKSh0aGlzLmh0dHBDbGllbnQpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXI9bmV3IFAuQ29va2llSmFyKX1sb2dpbihLLFUsVyl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0''@;'; put 'put ''IFk9YC9Vc2VyIEZvbGRlcnMvJHtLfS9NeSBGb2xkZXIvc2FzanMvcnVubmVyYDt0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyJiYodGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphci5yZW1vdmVBbGxDb29raWVzKCkseWllbGQgdGhpcy5nZXQoYCR7V30/X3Byb2dyYW09JHtZfSZfdXNl''@;'; put 'put ''cm5hbWU9JHtLfSZfcGFzc3dvcmQ9JHtVfWAsdm9pZCAwLCJ0ZXh0L3BsYWluIikpfSl9Z2V0KEssVSxXPSJhcHBsaWNhdGlvbi9qc29uIixZPXt9LHE9ITEpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPXtoZWFkZXJzOk9iamVjdC5hc3NpZ24oT2Jq''@;'; put 'put ''ZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoVSxXKSksWSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PVc/InRleHQiOiJqc29uIix3aXRoWFNSRlRva2VuOiEwfTtyZXR1cm4idGV4dC9wbGFpbiI9PT1XJiYoSi50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENs''@;'; put 'put ''aWVudC5nZXQoSyxKKS50aGVuKG5lPT4zMDI9PT1uZS5zdGF0dXM/dGhpcy5nZXQobmUuaGVhZGVycy5sb2NhdGlvbixVLFcpOigoMCxPLnRocm93SWZFcnJvcikobmUpLHRoaXMucGFyc2VSZXNwb25zZShuZSkpKS5jYXRjaChuZT0+Qih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''aWYobmUgaW5zdGFuY2VvZiB6LkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IG5lO3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKG5lLCgpPT50aGlzLmdldChLLFUsVyxZKS5jYXRjaChpZT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKShpZSwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhh''@;'; put 'put ''bmRsZSBlcnJvciBjYWxsYmFjay4gIil9KSxxKS5jYXRjaChpZT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKShpZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfSl9KSl9KX1wb3N0KEssVSxXLFk9ImFwcGxpY2F0aW9uL2pzb24iLHE9e30pe3JldHVybiBCKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKFcsWSkpLHEpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChLLFUse2hlYWRlcnM6ZWUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oSj0+Qih0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIDMwMj09PUouc3RhdHVzP3lpZWxkIHRoaXMuZ2V0KEouaGVhZGVycy5sb2NhdGlvbix2b2lkIDAsWSxxKTooKDAsTy50aHJvd0lmRXJyb3IpKEopLHRoaXMucGFyc2VSZXNwb25zZShKKSl9KSkuY2F0Y2goSj0+Qih0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoSiwoKT0+dGhpcy5wb3N0KEssVSxXLFkscSkpfSkpfSl9fX0sMzYwMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5T''@;'; put 'put ''QVNKU19MT0dTX1NFUEFSQVRPUj1YLlNhc2pzUmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3QgST15KDQ1ODgpO1guU2FzanNSZXF1ZXN0Q2xpZW50PWNsYXNzIF8gZXh0ZW5kcyBJLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0SGVhZGVy''@;'; put 'put ''cz0oQix3KT0+e3ZhciBQO2NvbnN0IEY9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT13JiYoRlsiQ29udGVudC1UeXBlIl09dyksRi5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09dz93OiIqLyoiLCFCJiZ0eXBlb2Ygd2luZG93PCJ1IiYmKEI9bnVs''@;'; put 'put ''bCE9PShQPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2Nlc3NUb2tlbiIpKSYmdm9pZCAwIT09UD9QOnZvaWQgMCksQiYmKEYuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7Qn1gKSxGfX1wYXJzZVJlc3BvbnNlKEIpe2NvbnN0IHc9Qj8uaGVhZGVycz9CLmhlYWRlcnMuZXRhZzoiIjtsZXQgRixP''@;'; put 'put ''LHosUD17fTt0cnl7UD0ic3RyaW5nIj09dHlwZW9mIEIuZGF0YT9KU09OLnBhcnNlKEIuZGF0YSk6Qi5kYXRhfWNhdGNoe2lmKEIuZGF0YS5pbmNsdWRlcyhYLlNBU0pTX0xPR1NfU0VQQVJBVE9SKSl7Y29uc3R7ZGF0YTpLfT1CLFU9Sy5zcGxpdChYLlNBU0pTX0xPR1NfU0VQQVJBVE9SKTtG''@;'; put 'put ''PVUuc3BsaWNlKDAsMSlbMF0sdm9pZCAwIT09RiYmKFA9Rik7Y29uc3QgVz1VLnNwbGljZSgwLFUubGVuZ3RoLTEpLFk9bmV3IFJlZ0V4cChgJHtYLlNBU0pTX0xPR1NfU0VQQVJBVE9SfSRgKSxxPVVbMF07cSYmKFkudGVzdChLKT9XLmxlbmd0aD4xJiZXLnB1c2gocSk6ej1xKSxPPVcuam9p''@;'; put 'put ''bihYLlNBU0pTX0xPR1NfU0VQQVJBVE9SKX1lbHNlIFA9Qi5kYXRhfWNvbnN0IE49e3Jlc3VsdDpQLGxvZzpPfHwiIixldGFnOncsc3RhdHVzOkIuc3RhdHVzfTtyZXR1cm4geiYmKE4ucHJpbnRPdXRwdXQ9eiksTn19LFguU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pTX0xPR1NfU0VQQVJB''@;'; put 'put ''VE9SXzE2M2VlMTdiNmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sNDcwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ2NjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNjE3NzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSl9LDQ5NzU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMjE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSl9LDQ3ODI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDE2ODoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE2Oih1''@;'; put 'put ''ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM4NDA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzE1MzoodWUsWCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxNDI4Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU4NDE6KHVlLFgpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJLF87T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTG9naW5NZWNoYW5pc209WC5TQVNqc0NvbmZpZz12b2lkIDAsWC5TQVNqc0NvbmZpZz1jbGFzcyB5e2NvbnN0cnVjdG9yKCl7dGhpcy5zZXJ2ZXJVcmw9IiIsdGhpcy5wYXRoU0FTSlM9IiIs''@;'; put 'put ''dGhpcy5wYXRoU0FTOT0iIix0aGlzLnBhdGhTQVNWaXlhPSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuc2VydmVyVHlwZT1udWxsLHRoaXMuZGVidWc9ITAsdGhpcy52ZXJib3NlPSEwLHRoaXMuY29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlz''@;'; put 'put ''bT1JLkRlZmF1bHQsdGhpcy5yZXF1ZXN0SGlzdG9yeUxpbWl0PTEwfX0sKF89ST1YLkxvZ2luTWVjaGFuaXNtfHwoWC5Mb2dpbk1lY2hhbmlzbT17fSkpLkRlZmF1bHQ9IkRlZmF1bHQiLF8uUmVkaXJlY3RlZD0iUmVkaXJlY3RlZCJ9LDYwMzg6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNlc3Npb25TdGF0ZT12b2lkIDAsKEk9WC5TZXNzaW9uU3RhdGV8fChYLlNlc3Npb25TdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixJLlJ1bm5pbmc9InJ1bm5pbmciLEkuUGVuZGluZz0i''@;'; put 'put ''cGVuZGluZyIsSS5JZGxlPSJpZGxlIixJLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsSS5Ob1N0YXRlPSIiLEkuRmFpbGVkPSJmYWlsZWQiLEkuRXJyb3I9ImVycm9yIn0sOTQ5MzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2''@;'; put 'put ''YWx1ZTohMH0pfSw4NjUwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDEyNDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''QXV0aG9yaXplRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLGcpe3N1cGVyKF8pLHRoaXMubWVzc2FnZT1fLHRoaXMuY29uZmlybVVybD1nLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90''@;'; put 'put ''eXBlKX19WC5BdXRob3JpemVFcnJvcj15fSw5NDY1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5DZXJ0aWZpY2F0ZUVycm9yPXZvaWQgMDtjbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZyl7''@;'; put 'put ''c3VwZXIoYCR7Z31cblBsZWFzZSB2aXNpdCB0aGUgbGluayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGlzc3VlOlxuLSBodHRwczovL2dpdGh1Yi5jb20vc2FzanMvY2xpL2lzc3Vlcy8xMTgxI2lzc3VlY29tbWVudC0xMDkwNjM4NTg0XG5gKSx0aGlzLm5hbWU9IkNl''@;'; put 'put ''cnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLEkucHJvdG90eXBlKX19WC5DZXJ0aWZpY2F0ZUVycm9yPUl9LDUyNjc6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbXB1dGVK''@;'; put 'put ''b2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8sZyl7c3VwZXIoIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpLHRoaXMuam9iPV8sdGhpcy5sb2c9Zyx0aGlzLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0''@;'; put 'put ''LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj15fSw5MjMyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5FcnJvclJlc3BvbnNlPXZvaWQgMCxY''@;'; put 'put ''LkVycm9yUmVzcG9uc2U9Y2xhc3MgeXtjb25zdHJ1Y3RvcihfLGcsQil7bGV0IHc9ZztpZigib2JqZWN0IiE9dHlwZW9mIGcpdHJ5e3c9SlNPTi5wYXJzZShnKX1jYXRjaHtCPWcsdz0iIn10aGlzLmVycm9yPXttZXNzYWdlOl8sZGV0YWlsczp3LHJhdzpCfX19fSw1MTA5Oih1ZSxYKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IEludGVybmFsIHNlcnZlciBlcnJvci4iKSx0''@;'; put 'put ''aGlzLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5JbnRlcm5hbFNlcnZlckVycm9yPXl9LDU1MTg6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxYLkludmFsaWRKc29uRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogaW52YWxpZCBKc29uIHN0cmluZyIpLHRoaXMubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5w''@;'; put 'put ''cm90b3R5cGUpfX1YLkludmFsaWRKc29uRXJyb3I9eX0sMTAwNToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSW52YWxpZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29u''@;'; put 'put ''c3RydWN0b3IoKXtzdXBlcigiQXV0aCBlcnJvcjogSW52YWxpZCBDU1JGIHRva2VuISIpLHRoaXMubmFtZT0iSW52YWxpZFNBU2pzQ3NyZkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSW52YWxpZFNBU2pzQ3NyZkVycm9yPXl9LDg1MzE6KHVlLFgp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxnLEIpe3N1cGVyKGBFcnJvciBDb2RlICR7X306ICR7Z31gKSx0''@;'; put 'put ''aGlzLmVycm9yQ29kZT1fLHRoaXMuZXJyb3JNZXNzYWdlPWcsdGhpcy5yZXN1bHQ9Qix0aGlzLm5hbWU9IkpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguSm9iRXhlY3V0aW9uRXJyb3I9eX0sOTA3OToodWUsWCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLGcpe3N1cGVyKGBFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9i''@;'; put 'put ''ICR7X306ICR7Zy5tZXNzYWdlfHxnfWApLHRoaXMub3JpZ2luYWxFcnJvcj1nLHRoaXMubmFtZT0iSm9iU3RhdGVQb2xsRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Kb2JTdGF0ZVBvbGxFcnJvcj15fSwzMDk2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKSx0aGlz''@;'; put 'put ''Lm5hbWU9Ikpzb25QYXJzZUFycmF5RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Kc29uUGFyc2VBcnJheUVycm9yPXl9LDY3NDM6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KSxYLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBBdXRoIGVycm9yOiAke18/SlNPTi5zdHJpbmdpZnkoXyxudWxsLDIpOiJZb3UgbXVzdCBiZSBsb2dnZWQgaW4gdG8gYWNjZXNzIHRoaXMgcmVzb3VyY2Ui''@;'; put 'put ''fWApLHRoaXMubmFtZT0iTG9naW5SZXF1aXJlZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fVguTG9naW5SZXF1aXJlZEVycm9yPXl9LDc4NjQ6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KSxYLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAwO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLGcsQil7c3VwZXIoYENvdWxkIG5vdCBnZXQgc2Vzc2lvbiBzdGF0ZS4gU2VydmVyIHJlc3BvbmRlZCB3aXRoICR7X30gd2hpbHN0IGNoZWNraW5nIHN0YXRl''@;'; put 'put ''OiAke2d9YCksdGhpcy5zZXJ2ZXJSZXNwb25zZVN0YXR1cz1fLHRoaXMuc2Vzc2lvblN0YXRlVXJsPWcsdGhpcy5sb2dVcmw9Qix0aGlzLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLk5vU2Vzc2lvblN0YXRlRXJyb3I9''@;'; put 'put ''eX0sOTU3NzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTm90Rm91bmRFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogUmVzb3VyY2UgYXQg''@;'; put 'put ''JHtffSB3YXMgbm90IGZvdW5kYCksdGhpcy51cmw9Xyx0aGlzLm5hbWU9Ik5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLHkucHJvdG90eXBlKX19WC5Ob3RGb3VuZEVycm9yPXl9LDkyNzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguUm9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO2NvbnN0IEk9eSg2Nzk5KTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoQix3LFApe2xldCBGPWBSb290IGZvbGRlciAke0J9IHdhcyBub3QgZm91bmQuXG5QbGVh''@;'; put 'put ''c2UgY2hlY2sgJHt3fS9TQVNEcml2ZS5cbklmIHRoZSBmb2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbmA7aWYoUCl7bGV0IHo9KDAsSS5kZWNvZGVUb2tlbikoUCkuc2NvcGU7ej16Lm1hcChOPT4iKiAiK04pLEYrPSJZb3VyIGFjY2Vz''@;'; put 'put ''cyB0b2tlbiBjb250YWlucyB0aGUgZm9sbG93aW5nIHNjb3BlczpcbiIrei5qb2luKCJcbiIpfXN1cGVyKEYpLHRoaXMubmFtZT0iUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19WC5Sb290Rm9sZGVyTm90Rm91bmRFcnJv''@;'; put 'put ''cj1ffSw5NTI2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVM5QXV0aEVycm9yPXZvaWQgMDtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiVGhlIGNyZWRlbnRpYWxzIHlv''@;'; put 'put ''dSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIiksdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLlNBUzlBdXRoRXJyb3I9''@;'; put 'put ''eX0sODg3NToodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogZXJyb3Ig''@;'; put 'put ''d2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICR7X31gKSx0aGlzLnVybD1fLHRoaXMubmFtZT0iV2Vib3V0UmVzcG9uc2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1YLldlYm91dFJlc3BvbnNlRXJyb3I9eX0sMTM5NTpmdW5jdGlvbih1ZSxYLHkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2Vz''@;'; put 'put ''TW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89''@;'; put 'put ''dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLF8oeSgxMjQpLFgpLF8oeSg5NDY1KSxYKSxfKHkoNTI2NyksWCksXyh5KDkyMzIpLFgpLF8oeSg1MTA5KSxYKSxfKHkoNTUxOCksWCksXyh5KDg1MzEpLFgpLF8oeSg5MDc5KSxYKSxfKHkoMzA5NiksWCksXyh5KDY3NDMpLFgpLF8oeSg3ODY0KSxYKSxfKHkoOTU3NyksWCksXyh5''@;'; put 'put ''KDkyNzkpLFgpLF8oeSg4ODc1KSxYKX0sMTIzMDpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blBy''@;'; put 'put ''b3BlcnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0''@;'; put 'put ''aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3''@;'; put 'put ''KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oeSg0NzApLFgpLF8oeSg0NjY2KSxYKSxfKHkoNDk3NSksWCksXyh5KDU3NjYpLFgpLF8oeSgyMTUpLFgpLF8oeSg0NzgyKSxYKSxfKHkoNDE2OCksWCksXyh5KDg1MTYpLFgpLF8oeSgzODQwKSxY''@;'; put 'put ''KSxfKHkoNTg0MSksWCksXyh5KDE0MjgpLFgpLF8oeSg2MDM4KSxYKSxfKHkoOTQ5MyksWCksXyh5KDMxNTMpLFgpLF8oeSg4NjUwKSxYKSxfKHkoNjE3NyksWCksXyh5KDEzOTUpLFgpfSwzMzAyOmZ1bmN0aW9uKHVlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlzLl9fYXdhaXRl''@;'; put 'put ''cnx8ZnVuY3Rpb24oXyxnLEIsdyl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oRixPKXtmdW5jdGlvbiB6KEspe3RyeXtMKHcubmV4dChLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTihLKXt0cnl7TCh3LnRocm93KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBM''@;'; put 'put ''KEspe0suZG9uZT9GKEsudmFsdWUpOmZ1bmN0aW9uIFAoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoZnVuY3Rpb24oTyl7TyhGKX0pfShLLnZhbHVlKS50aGVuKHosTil9TCgodz13LmFwcGx5KF8sZ3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPXZvaWQgMCxYLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPWZ1bmN0aW9uIEkoXyxnKXtyZXR1cm4geSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IEI9e307aWYoZz8u''@;'; put 'put ''bGVuZ3RoKXtjb25zdCB3PWcucmVkdWNlKChQLEYpPT4oUFtGXT1fW0ZdLFApLHt9KTtCPU9iamVjdC5hc3NpZ24oe3Jlc3VsdDpfLnJlc3VsdH0sdyl9ZWxzZSBCPV8ucmVzdWx0O3JldHVybiBCfSl9fSw3OTIyOmZ1bmN0aW9uKHVlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT10aGlzJiZ0aGlz''@;'; put 'put ''Ll9fYXdhaXRlcnx8ZnVuY3Rpb24oXyxnLEIsdyl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oRixPKXtmdW5jdGlvbiB6KEspe3RyeXtMKHcubmV4dChLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTihLKXt0cnl7TCh3LnRocm93KEspKX1jYXRjaChVKXtPKFUpfX1m''@;'; put 'put ''dW5jdGlvbiBMKEspe0suZG9uZT9GKEsudmFsdWUpOmZ1bmN0aW9uIFAoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoZnVuY3Rpb24oTyl7TyhGKX0pfShLLnZhbHVlKS50aGVuKHosTil9TCgodz13LmFwcGx5KF8sZ3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmFzeW5jRm9yRWFjaD12b2lkIDAsWC5hc3luY0ZvckVhY2g9ZnVuY3Rpb24gSShfLGcpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtmb3IobGV0IEI9MDtCPF8ubGVuZ3RoO0IrKyl5aWVsZCBnKF9bQl0s''@;'; put 'put ''QixfKX0pfX0sMzc5MzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY29tcGFyZVRpbWVzdGFtcHM9dm9pZCAwLFguY29tcGFyZVRpbWVzdGFtcHM9KEksXyk9Pl8udGltZXN0YW1wLmdldFRpbWUoKS1JLnRp''@;'; put 'put ''bWVzdGFtcC5nZXRUaW1lKCl9LDI0MDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc0Zvcm1hdHNUYWJsZT1YLmNvbnZlcnRUb0NTVj12b2lkIDA7Y29uc3QgXz15KDY0Njcp''@;'; put 'put ''LGc9eSg5Nzc4KTtYLmNvbnZlcnRUb0NTVj0oRixPKT0+e3ZhciB6O2lmKCFGW09dKXtjb25zdCBlZT0oMCxnLnByZWZpeE1lc3NhZ2UpKCJObyB0YWJsZSBwcm92aWRlZCB0byBiZSBjb252ZXJ0ZWQgdG8gQ1NWLiIsIkVycm9yIHdoaWxlIGNvbnZlcnRpbmcgdG8gQ1NWLiAiKTt0aHJvdyJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgZWU/bmV3IEVycm9yKGVlKTplZX1jb25zdCBOPUZbT107aWYoIUFycmF5LmlzQXJyYXkoTikpcmV0dXJuIiI7bGV0IFUsTD1udWxsPT09KHo9RltgJCR7T31gXSl8fHZvaWQgMD09PXo/dm9pZCAwOnouZm9ybWF0cyxLPVtdLFc9ITE7TCYmKEs9T2JqZWN0LmtleXMo''@;'; put 'put ''TCkubWFwKGVlPT5gJHtlZX06JHtMW2VlXX1gKSk7Y29uc3QgWT1PYmplY3Qua2V5cyhOWzBdKTtyZXR1cm4gWS5mb3JFYWNoKGVlPT57aWYoIUx8fCFPYmplY3Qua2V5cyhMKS5pbmNsdWRlcyhlZSkpe2xldCBKPSExLG5lPSExO2lmKE4uZm9yRWFjaChpZT0+e251bGw9PT1pZVtlZV18fCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgaWVbZWVdP0o9ITA6InN0cmluZyI9PXR5cGVvZiBpZVtlZV0mJigwLF8uaXNTcGVjaWFsTWlzc2luZykoaWVbZWVdKSYmKG5lPSEwKX0pLEomJm5lKUsucHVzaChgJHtlZX06YmVzdC5gKSxMfHwoTD17fSksTFtlZV09ImJlc3QuIjtlbHNle2xldCBpZT1udWxsLGxl''@;'; put 'put ''PSExLG1lPS0xO2NvbnN0IF9lPU4ubWFwKChUZSxTZSk9PntpZihUZVtlZV18fCIiPT09VGVbZWVdKXtsZXQgemU7cmV0dXJuIGllP2xlfHwobGU9KCIiPT09VGVbZWVdfHwic3RyaW5nIj09dHlwZW9mIFRlW2VlXT8iY2hhcnMiOiJudW1iZXIiKSE9PWllLG1lPWxlP1NlKzE6LTEpOmllPSIi''@;'; put 'put ''PT09VGVbZWVdfHwic3RyaW5nIj09dHlwZW9mIFRlW2VlXT8iY2hhcnMiOiJudW1iZXIiLCJzdHJpbmciPT10eXBlb2YgVGVbZWVdJiYoemU9UChUZVtlZV0pKSx6ZX19KS5zb3J0KChUZSxTZSk9PlNlLVRlKVswXTtfZSYmX2U+MzI3NjUmJihXPSEwKSxsZSYmSS5lcnJvcihgUm93ICgke21l''@;'; put 'put ''fSksIENvbHVtbiAoJHtlZX0pIGhhcyBtaXhlZCB0eXBlczogRVJST1JgKSxLLnB1c2goYCR7ZWV9OiR7ImNoYXJzIj09PWllPyIkY2hhciI6IiJ9JHtfZXx8KCJjaGFycyI9PT1pZT8iMSI6ImJlc3QiKX0uYCl9fX0pLEwmJihLPUsuc29ydCgoZWUsSik9PlkuaW5kZXhPZihlZS5yZXBsYWNl''@;'; put 'put ''KC86LiovLCIiKSktWS5pbmRleE9mKEoucmVwbGFjZSgvOi4qLywiIikpKSksVz8iRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiOihVPU4ubWFwKGVlPT5PYmplY3Qua2V5cyhlZSkubWFwKChuZSxpZSk9PntsZXQgbGU7Y29uc3QgbWU9ZWVbbmVdO2lmKCJudW1iZXIiPT10eXBlb2YgbWUp''@;'; put 'put ''cmV0dXJuIG1lO2lmKGxlPW51bGw9PT1tZT8iIjptZSxMJiYiYmVzdC4iPT09TFtuZV0pe2lmKGxlJiYhKDAsXy5pc1NwZWNpYWxNaXNzaW5nKShsZSkpdGhyb3cgbmV3IEVycm9yKCJBIFNwZWNpYWwgbWlzc2luZyB2YWx1ZSBjYW4gb25seSBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSAn''@;'; put 'put ''QScgdG8gJ1onLCAnXycsICcuW2Etel0nLCAnLl8nIik7cmV0dXJuYCR7bGUuaW5jbHVkZXMoIi4iKT8iIjoiLiJ9JHtsZS50b0xvd2VyQ2FzZSgpfWB9cmV0dXJuIGxlPWxlLnJlcGxhY2UoLyIvZywnIiInKSxsZT1gIiR7bGV9ImAsbGUuc3Vic3RyaW5nKDEsbGUubGVuZ3RoLTEpLnNlYXJj''@;'; put 'put ''aCgvKFx0fFxufFxyfCx8XCd8XCIpL2dtKTwwJiYobGU9bGUuc3Vic3RyaW5nKDEsbGUubGVuZ3RoLTEpKSxsZT1sZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpLCIiPT09bGUmJktbaWVdLmluY2x1ZGVzKCJiZXN0IikmJihsZT0iLiIpLGxlfSkuam9pbigiLCIpKSxLLmpvaW4oIiwiKS5yZXBs''@;'; put 'put ''YWNlKC8sL2csIiAiKSsiXHJcbiIrVS5qb2luKCJcclxuIikpfSxYLmlzRm9ybWF0c1RhYmxlPUY9Pi9eXCQuKi8udGVzdChGKTtjb25zdCBQPUY9PntsZXQgTz1GLmxlbmd0aDtmb3IobGV0IHo9Ri5sZW5ndGgtMTt6Pj0wO3otLSl7Y29uc3QgTj1GLmNoYXJDb2RlQXQoeik7Tj4xMjcmJk48''@;'; put 'put ''PTIwNDc/TysrOk4+MjA0NyYmTjw9NjU1MzUmJihPKz0yKSxOPj01NjMyMCYmTjw9NTczNDMmJnotLX1yZXR1cm4gT319LDYxMTY6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEIpe3JldHVybiBCJiZCLl9f''@;'; put 'put ''ZXNNb2R1bGU/Qjp7ZGVmYXVsdDpCfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY3JlYXRlQXhpb3NJbnN0YW5jZT12b2lkIDA7Y29uc3QgXz1JKHkoNzIxOCkpO1guY3JlYXRlQXhpb3NJbnN0YW5jZT0oQix3KT0+Xy5kZWZhdWx0LmNyZWF0''@;'; put 'put ''ZSh7YmFzZVVSTDpCLGh0dHBzQWdlbnQ6d30pfSw5ODI1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5kZWxheT12b2lkIDAsWC5kZWxheT1JPT5uZXcgUHJvbWlzZShfPT5zZXRUaW1lb3V0KF8sSSkpfSw5''@;'; put 'put ''OTA6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxfPXkoNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7cShOLm5l''@;'; put 'put ''eHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1Uo''@;'; put 'put ''Syl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1xKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZmV0Y2hMb2c9WC5mZXRjaExvZ0J5Q2h1bmtzPXZvaWQgMDtjb25zdCBCPXkoOTc3OCk7WC5m''@;'; put 'put ''ZXRjaExvZ0J5Q2h1bmtzPShGLE8seixOKT0+Zyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQoMCxYLmZldGNoTG9nKShGLE8seiwwLE4pfSksWC5mZXRjaExvZz0oRixPLHosTixMKT0+Zyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z''@;'; put 'put ''dCBLPUkubG9nZ2VyfHxfO2xldCBVPSIiO2NvbnN0IFc9TDwxZTQ/TDoxZTQ7ZG97Sy5pbmZvKGBGZXRjaGluZyBsb2dzIGZyb20gbGluZSBubzogJHtOKzF9IHRvICR7TitXfSBvZiAke0x9LmApO2NvbnN0IFk9eWllbGQgRi5nZXQoYCR7en0/c3RhcnQ9JHtOfSZsaW1pdD0ke1d9YCxPKS50''@;'; put 'put ''aGVuKGVlPT5lZS5yZXN1bHQpLmNhdGNoKGVlPT57dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKGVlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KTtpZigwPT09WS5pdGVtcy5sZW5ndGgpYnJlYWs7VSs9WS5pdGVtcy5tYXAoZWU9PmVlLmxpbmUpLmpvaW4oIlxuIiksTis9V313aGls''@;'; put 'put ''ZShOPEwpO3JldHVybiBVfSl9LDcxNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5mb3JtYXREYXRhRm9yUmVxdWVzdD12b2lkIDA7Y29uc3QgST15KDI0MDIpLF89eSg0Nzk5KTtYLmZvcm1hdERhdGFG''@;'; put 'put ''b3JSZXF1ZXN0PUI9Pntjb25zdCB3PVtdO2xldCBQPTA7Y29uc3QgRj17fTtmb3IoY29uc3QgTyBpbiBCKXtpZigoMCxJLmlzRm9ybWF0c1RhYmxlKShPKSYmT2JqZWN0LmtleXMoQikuaW5jbHVkZXMoTy5yZXBsYWNlKC9eXCQvLCIiKSkpY29udGludWU7UCsrLCgwLEkuaXNGb3JtYXRzVGFi''@;'; put 'put ''bGUpKE8pfHx3LnB1c2goTyk7Y29uc3Qgej0oMCxJLmNvbnZlcnRUb0NTVikoQixPKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09eil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMu''@;'; put 'put ''Iik7aWYoei5sZW5ndGg+MTZlMyl7Y29uc3QgTj0oMCxfLnNwbGl0Q2h1bmtzKSh6KTtGW2BzYXNqcyR7UH1kYXRhMGBdPU4ubGVuZ3RoLE4uZm9yRWFjaCgoTCxLKT0+e0ZbYHNhc2pzJHtQfWRhdGEke0srMX1gXT1MfSl9ZWxzZSBGW2BzYXNqcyR7UH1kYXRhYF09en1yZXR1cm4gRi5zYXNq''@;'; put 'put ''c190YWJsZXM9dy5qb2luKCIgIiksRn19LDg0NTg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0Rm9ybURhdGE9dm9pZCAwO2NvbnN0IF89eSg1OTI4KSxnPUkoeSg2MjMwKSk7WC5nZXRGb3JtRGF0YT0oKT0+KDAsXy5pc05vZGUpKCk/bmV3IGcuZGVmYXVsdDpuZXcgRm9ybURhdGF9LDMyNjA6KHVlLFgpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFVzZXJMYW5ndWFnZT12b2lkIDAsWC5nZXRVc2VyTGFuZ3VhZ2U9KCk9PndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V8fHdpbmRvdy5uYXZpZ2F0b3IudXNlckxhbmd1YWdlfSwxODg0Oih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFZhbGlkSnNvbj12b2lkIDA7Y29uc3QgST15KDEzOTUpO1guZ2V0VmFsaWRKc29uPWc9Pnt0cnl7aWYobnVsbD09Zyl0aHJvdyBuZXcgSS5JbnZhbGlkSnNvbkVy''@;'; put 'put ''cm9yO2lmKEFycmF5LmlzQXJyYXkoZykpdGhyb3cgbmV3IEkuSnNvblBhcnNlQXJyYXlFcnJvcjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGc/ZzoiIj09PWc/e306SlNPTi5wYXJzZShnKX1jYXRjaChCKXt0aHJvdyBCIGluc3RhbmNlb2YgSS5Kc29uUGFyc2VBcnJheUVycm9yP0I6bmV3IEku''@;'; put 'put ''SW52YWxpZEpzb25FcnJvcn19fSw1OTI4OmZ1bmN0aW9uKHVlLFgseSl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVy''@;'; put 'put ''dHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24o''@;'; put 'put ''ZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyh5KDMzMDIpLFgpLF8oeSg3OTIyKSxYKSxfKHkoMzc5MyksWCksXyh5KDI0MDIpLFgpLF8oeSg2MTE2KSxYKSxfKHkoOTgyNSksWCksXyh5KDk5MCksWCksXyh5KDE4ODQpLFgpLF8oeSg0MjQzKSxYKSxf''@;'; put 'put ''KHkoMjU3KSxYKSxfKHkoMiksWCksXyh5KDI2MTUpLFgpLF8oeSgyOTIwKSxYKSxfKHkoMjQyMiksWCksXyh5KDMxKSxYKSxfKHkoNjUxNSksWCksXyh5KDY0MTYpLFgpLF8oeSgyODEzKSxYKSxfKHkoOTg5NiksWCksXyh5KDQ3OTkpLFgpLF8oeSg0NTE2KSxYKSxfKHkoODQ1OCksWCksXyh5''@;'; put 'put ''KDMyNjApLFgpfSw0MjQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNOb2RlPXZvaWQgMCxYLmlzTm9kZT0oKT0+dHlwZW9mIEk8InUiJiZudWxsIT1JLnZlcnNpb25zJiZu''@;'; put 'put ''dWxsIT1JLnZlcnNpb25zLm5vZGV9LDI1NzoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNSZWxhdGl2ZVBhdGg9dm9pZCAwLFguaXNSZWxhdGl2ZVBhdGg9ST0+ISFJJiYhSS5zdGFydHNXaXRoKCIvIil9''@;'; put 'put ''LDI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzVXJpPXZvaWQgMCxYLmlzVXJpPUk9Pi9eXC9mb2xkZXJzXC9mb2xkZXJzXC8vLnRlc3QoSSl9LDI2MTU6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzVXJsPXZvaWQgMCxYLmlzVXJsPUk9Pntjb25zdCBfPVsiaHR0cDoiLCJodHRwczoiXTt0cnl7Y29uc3QgZz1uZXcgVVJMKEkpO2lmKCFfLmluY2x1ZGVzKGcucHJvdG9jb2wpKXJldHVybiExfWNhdGNoe3Jl''@;'; put 'put ''dHVybiExfXJldHVybiEwfX0sMTIxMDpmdW5jdGlvbih1ZSxYKXsidXNlIHN0cmljdCI7dmFyIHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e3EoTi5uZXh0''@;'; put 'put ''KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e3EoTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIHEoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtVKEsp''@;'; put 'put ''fSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9cSgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLm9wZW5Mb2dpblByb21wdD12b2lkIDA7dmFyIEk9ZnVuY3Rpb24oRil7cmV0dXJuIEYuc3R5bGVz''@;'; put 'put ''PSJzYXNqc0FkYXB0ZXJTdHlsZXMiLEYub3ZlcmxheT0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHRCRyIsRi5kaWFsb2c9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0IixGfShJfHx7fSk7Y29uc3QgXz0ic2FzanMtYWRhcHRlciIsZz17cG9wVXA6YCR7X31wb3BVcGAscG9wVXBCRzpgJHtffXBv''@;'; put 'put ''cFVwQkdgfTtYLm9wZW5Mb2dpblByb21wdD0oKT0+bmV3IFByb21pc2UoRj0+eSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBPPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Ty5pZD1JLnN0eWxlcyxPLmlubmVyVGV4dD1QO2NvbnN0IHo9ZG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2Iik7ei5pZD1JLm92ZXJsYXksei5jbGFzc0xpc3QuYWRkKGcucG9wVXBCRyk7Y29uc3QgTj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtOLmlkPUkuZGlhbG9nLE4uY2xhc3NMaXN0LmFkZChnLnBvcFVwKTtjb25zdCBMPWRvY3VtZW50LmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoImgxIik7TC5pbm5lclRleHQ9IlNlc3Npb24gRXhwaXJlZCEiLE4uYXBwZW5kQ2hpbGQoTCk7Y29uc3QgSz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtVLmlubmVyVGV4dD0iWW91IG5lZWQgdG8gcmVsb2dpbiwg''@;'; put 'put ''Y2xpY2sgT0sgdG8gbG9naW4uIixLLmFwcGVuZENoaWxkKFUpLE4uYXBwZW5kQ2hpbGQoSyk7Y29uc3QgVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtXLmNsYXNzTGlzdC5hZGQoImNhbmNlbCIpLFcuaW5uZXJUZXh0PSJDYW5jZWwiLFcub25jbGljaz0oKT0+e3coKSxGKCEx''@;'; put 'put ''KX0sTi5hcHBlbmRDaGlsZChXKTtjb25zdCBZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1kuY2xhc3NMaXN0LmFkZCgiY29uZmlybSIpLFkuaW5uZXJUZXh0PSJPayIsWS5vbmNsaWNrPSgpPT57dygpLEYoITApfSxOLmFwcGVuZENoaWxkKFkpLGRvY3VtZW50LmJvZHkuc3R5''@;'; put 'put ''bGUub3ZlcmZsb3c9ImhpZGRlbiIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChPKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHopLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTil9KSk7Y29uc3Qgdz0oKT0+e09iamVjdC52YWx1ZXMoSSkuZm9yRWFjaChGPT57dmFyIE87Y29uc3Qg''@;'; put 'put ''ej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChGKTtudWxsPT09KE89ej8ucGFyZW50Tm9kZSl8fHZvaWQgMD09PU98fE8ucmVtb3ZlQ2hpbGQoeil9KSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJhdXRvIn0sUD1gXG4uJHtnLnBvcFVwQkd9ICxcbi4ke2cucG9wVXB9IHtcbiAgei1p''@;'; put 'put ''bmRleDogMTAwMDA7XG59XG4uJHtnLnBvcFVwfSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xu''@;'; put 'put ''ICB0b3A6IDQwJTtcbiAgbGVmdDogNTAlO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtZmFtaWx5OiAnUFQgU2FucycsIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIHotaW5kZXg6IDk5OTtcbiAgb3ZlcmZs''@;'; put 'put ''b3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC1oZWlnaHQ6IDMwMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAl''@;'; put 'put ''LCAtNTAlKTtcbn1cbi4ke2cucG9wVXB9ID4gaDEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNXB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xu''@;'; put 'put ''ICBmb250LXNpemU6IDEuMmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgYm9yZGVyLXdpZHRoOiA1cHg7XG4gIGJv''@;'; put 'put ''cmRlci1jb2xvcjogYmxhY2s7XG59XG4uJHtnLnBvcFVwfSA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtMTA4cHgpO1xuICBtYXJnaW46IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1z''@;'; put 'put ''aXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNSU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYm9yZGVyLXN0eWxlOiBub25lIG5vbmUgc29s''@;'; put 'put ''aWQgbm9uZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uJHtnLnBvcFVwfSA+IGRpdiA+IHNwYW4ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzog''@;'; put 'put ''Ym9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMzAwcHg7XG4gIGhlaWdodDogMTA4cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cbi4ke2cucG9wVXB9IC5jYW5jZWwge1xuICBmbG9hdDogbGVm''@;'; put 'put ''dDtcbn1cbi4ke2cucG9wVXB9IC5jb25maXJtIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLiR7Zy5wb3BVcH0gPiBidXR0b24ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJv''@;'; put 'put ''eDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxMHB4O1xuICB3aWR0aDogNTAlO1xuICBib3JkZXI6IDFweCBub25lICNjY2M7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJhY2tncm91''@;'; put 'put ''bmQ6IHJnYmEoMSwgMSwgMSwgMC4yKTtcbn1cbi4ke2cucG9wVXB9ID4gYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuLiR7Zy5wb3BVcEJHfSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAg''@;'; put 'put ''bGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvcGFjaXR5OiAwLjk1O1xuICB6LWluZGV4OiA1MDtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KCMwMzc4Y2QsICMwMTIwMzYpO1xufVxu''@;'; put 'put ''YH0sMjkyMDoodWUsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgubmVlZHNSZXRyeT12b2lkIDAsWC5uZWVkc1JldHJ5PUk9PiEhSSYmKEkuaW5jbHVkZXMoJyJlcnJvckNvZGUiOjQwMycpJiZJLmluY2x1ZGVzKCJf''@;'; put 'put ''Y3NyZiIpJiZJLmluY2x1ZGVzKCJYLUNTUkYtVE9LRU4iKXx8SS5pbmNsdWRlcygnInN0YXR1cyI6NDAzJykmJkkuaW5jbHVkZXMoJyJlcnJvciI6IkZvcmJpZGRlbiInKXx8SS5pbmNsdWRlcygnInN0YXR1cyI6NDQ5JykmJkkuaW5jbHVkZXMoIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MsIHJl''@;'; put 'put ''dHJ5IG9yaWdpbmFsIHJlcXVlc3QiKSl9LDI0MjI6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlR2VuZXJhdGVkQ29kZT12b2lkIDAsWC5wYXJzZUdlbmVyYXRlZENvZGU9ST0+SS5zcGxpdCgiXG4i''@;'; put 'put ''KS5maWx0ZXIodz0+dy50cmltKCkuc3RhcnRzV2l0aCgiTVBSSU5UIikpLmpvaW4oIlxyXG4iKX0sMzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVNhc1ZpeWFMb2c9''@;'; put 'put ''dm9pZCAwLFgucGFyc2VTYXNWaXlhTG9nPWc9PntsZXQgQjt0cnl7Qj1nLml0ZW1zP2cuaXRlbXMubWFwKHc9PncubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShnKX1jYXRjaCh3KXtJLmVycm9yKCJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgbG9nIHJl''@;'; put 'put ''c3BvbnNlIix3KSxCPWd9cmV0dXJuIEJ9fSw2NTE1Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVNvdXJjZUNvZGU9dm9pZCAwLFgucGFyc2VTb3VyY2VDb2RlPUk9Pkkuc3BsaXQoIlxuIikuZmls''@;'; put 'put ''dGVyKEI9PkIudHJpbSgpLnN1YnN0cmluZygwLDEwKS50cmltU3RhcnQoKS5tYXRjaCgvXlxkLykpLmpvaW4oIlxyXG4iKX0sNjQxNjpmdW5jdGlvbih1ZSxYLHkpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQix3LFAsRil7cmV0dXJuIG5ldyhQ''@;'; put 'put ''fHwoUD1Qcm9taXNlKSkoZnVuY3Rpb24oeixOKXtmdW5jdGlvbiBMKFcpe3RyeXtVKEYubmV4dChXKSl9Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gSyhXKXt0cnl7VShGLnRocm93KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBVKFcpe1cuZG9uZT96KFcudmFsdWUpOmZ1bmN0aW9uIE8o''@;'; put 'put ''eil7cmV0dXJuIHogaW5zdGFuY2VvZiBQP3o6bmV3IFAoZnVuY3Rpb24oTil7Tih6KX0pfShXLnZhbHVlKS50aGVuKEwsSyl9VSgoRj1GLmFwcGx5KEIsd3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU2Fz''@;'; put 'put ''Vml5YURlYnVnUmVzcG9uc2U9dm9pZCAwO2NvbnN0IF89eSg1OTI4KTtYLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2U9KEIsdyxQKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBGPUIuc3BsaXQoLzxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDog''@;'; put 'put ''NTAwcHgiIHNyYz0ifDxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQtY29sb3I6Q2FudmFzOyIgc3JjPS8pWzFdLE89Rj9GLnNwbGl0KC8iPjxcL2lmcmFtZT58PjxcL2lmcmFtZT4vKVswXTpudWxsO2lmKCFPKXRocm93IG5ldyBFcnJvcigiVW5h''@;'; put 'put ''YmxlIHRvIGZpbmQgd2Vib3V0IGZpbGUgVVJMLiIpO3JldHVybiB3LmdldChQK08sdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbih6PT4oMCxfLmdldFZhbGlkSnNvbikoei5yZXN1bHQpKX0pfSwyODEzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTEwOCk7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VXZWJvdXRSZXNwb25zZT12b2lkIDA7Y29uc3QgXz15KDEzOTUpO1gucGFyc2VXZWJvdXRSZXNwb25zZT0oQix3KT0+e2xldCBQPSIiO2lmKEIuaW5jbHVkZXMoIj4+d2Vib3V0QkVHSU48PCIpKXRyeXtQPUIuc3Bs''@;'; put 'put ''aXQoIj4+d2Vib3V0QkVHSU48PCIpWzFdLnNwbGl0KCI+PndlYm91dEVORDw8IilbMF19Y2F0Y2goRil7aWYodyl0aHJvdyBuZXcgXy5XZWJvdXRSZXNwb25zZUVycm9yKHcpO1A9IiIsSS5lcnJvcihGKX1yZXR1cm4gUH19LDExNzA6KHVlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PXZvaWQgMDtjb25zdCB5PVsiTG9nIE9mZiJdO1guZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9Xz0+e2NvbnN0IEI9Xz8ubWF0Y2goLyJ0aXRsZSI6XHM/Ii4qPyIvKTtsZXQgdz1C''@;'; put 'put ''Py5bMF0uc3BsaXQoIjoiKVsxXS50cmltKCksUD13Py5pbmRleE9mKCIgIik7cmV0dXJuIHc/KHkubWFwKEY9Pntjb25zdCBPPXc/LmluZGV4T2YoRil8fC0xO08+LTEmJihQPU8rRi5sZW5ndGgpfSksdy5zbGljZShQLC0xKS50cmltKCkpOiJ1bmtub3duIn19LDk4OTY6KHVlLFgpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNlcmlhbGl6ZT12b2lkIDAsWC5zZXJpYWxpemU9ST0+e2NvbnN0IF89W107Zm9yKGNvbnN0IGcgaW4gSSlpZihJLmhhc093blByb3BlcnR5KGcpKWlmKElbZ11pbnN0YW5jZW9mIEFy''@;'; put 'put ''cmF5KWZvcihsZXQgQj0wLHc9SVtnXS5sZW5ndGg7Qjx3O0IrKylfLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGcpKyI9IitlbmNvZGVVUklDb21wb25lbnQoSVtnXVtCXSkpO2Vsc2UgXy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChnKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KElbZ10pKTty''@;'; put 'put ''ZXR1cm4gXy5qb2luKCImIil9fSw0Nzk5Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5zcGxpdENodW5rcz12b2lkIDAsWC5zcGxpdENodW5rcz1JPT57Y29uc3QgZz1NYXRoLmNlaWwoSS5sZW5ndGgvMTZl''@;'; put 'put ''MyksQj1uZXcgQXJyYXkoZyk7Zm9yKGxldCB3PTAsUD0wO3c8ZzsrK3csUCs9MTZlMylCW3ddPUkuc3Vic3RyKFAsMTZlMyk7cmV0dXJuIEJ9fSw0NTE2Oih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC52YWxp''@;'; put 'put ''ZGF0ZUlucHV0PVguSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkU9WC5NT1JFX0lORk89dm9pZCAwLFguTU9SRV9JTkZPPSJGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL3Nhc2pzLmlvL3Nhc2pzLWFkYXB0ZXIvI3JlcXVlc3QtcmVzcG9uc2UiLFguSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkU9YFBh''@;'; put 'put ''cmFtZXRlciBkYXRhIGNvbnRhaW5zIGludmFsaWQgdGFibGUgc3RydWN0dXJlLiAke1guTU9SRV9JTkZPfWAsWC52YWxpZGF0ZUlucHV0PV89PntpZihudWxsPT09XylyZXR1cm57c3RhdHVzOiEwLG1zZzoiIn07aWYoIm9iamVjdCIhPT1JKF8pKXJldHVybntzdGF0dXM6ITEsbXNnOlguSU5W''@;'; put 'put ''QUxJRF9UQUJMRV9TVFJVQ1RVUkV9O2NvbnN0IGc9Qj0+Qi5tYXRjaCgvXlwkLiovKSYmT2JqZWN0LmtleXMoXykuaW5jbHVkZXMoQi5yZXBsYWNlKC9eXCQvLCIiKSk7Zm9yKGNvbnN0IEIgaW4gXyl7aWYoIUIubWF0Y2goL15bYS16QS1aX10vKSYmIWcoQikpcmV0dXJue3N0YXR1czohMSxt''@;'; put 'put ''c2c6IkZpcnN0IGxldHRlciBvZiB0YWJsZSBzaG91bGQgYmUgYWxwaGFiZXQgb3IgdW5kZXJzY29yZS4ifTtpZighQi5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLykmJiFnKEIpKXJldHVybntzdGF0dXM6ITEsbXNnOiJUYWJsZSBuYW1lIHNob3VsZCBiZSBhbHBoYW51bWVyaWMu''@;'; put 'put ''In07aWYoQi5sZW5ndGg+MzIpcmV0dXJue3N0YXR1czohMSxtc2c6Ik1heGltdW0gbGVuZ3RoIGZvciB0YWJsZSBuYW1lIGNvdWxkIGJlIDMyIGNoYXJhY3RlcnMuIn07aWYoIkFycmF5IiE9PUkoX1tCXSkmJiFnKEIpKXJldHVybntzdGF0dXM6ITEsbXNnOlguSU5WQUxJRF9UQUJMRV9TVFJV''@;'; put 'put ''Q1RVUkV9O2lmKEFycmF5LmlzQXJyYXkoX1tCXSkpZm9yKGNvbnN0IHcgb2YgX1tCXSl7aWYoIm9iamVjdCIhPT1JKHcpKXJldHVybntzdGF0dXM6ITEsbXNnOmBUYWJsZSAke0J9IGNvbnRhaW5zIGludmFsaWQgc3RydWN0dXJlLiAke1guTU9SRV9JTkZPfWB9O3tjb25zdCBQPU9iamVjdC5r''@;'; put 'put ''ZXlzKHcpO2Zvcihjb25zdCBGIG9mIFApaWYodm9pZCAwPT09d1tGXSlyZXR1cm57c3RhdHVzOiExLG1zZzpgQSByb3cgaW4gdGFibGUgJHtCfSBjb250YWlucyBpbnZhbGlkIHZhbHVlLiBDYW4ndCBhc3NpZ24gdW5kZWZpbmVkIHRvICR7Rn0uYH19fX1yZXR1cm57c3RhdHVzOiEwLG1zZzoi''@;'; put 'put ''In19O2NvbnN0IEk9Xz0+QXJyYXkuaXNBcnJheShfKT8iQXJyYXkiOnR5cGVvZiBffSw4OTgxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmZyb21DYWxsYmFjaz1mdW5jdGlvbih5KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLkkpe2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBJW0kubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoXyxnKT0+e0kucHVzaCgoQix3KT0+bnVsbCE9Qj9nKEIpOl8odykpLHkuYXBwbHkodGhpcyxJKX0pO3kuYXBwbHkodGhpcyxJKX0sIm5hbWUiLHt2YWx1ZTp5Lm5hbWV9KX0sWC5mcm9tUHJvbWlzZT1mdW5jdGlvbih5KXty''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLkkpe2NvbnN0IF89SVtJLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgXylyZXR1cm4geS5hcHBseSh0aGlzLEkpO0kucG9wKCkseS5hcHBseSh0aGlzLEkpLnRoZW4oZz0+XyhudWxsLGcpLF8pfSwibmFtZSIs''@;'; put 'put ''e3ZhbHVlOnkubmFtZX0pfX0sNDU2NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDc0MTgpLF89eSg3MTI5KSxnPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdKy8sQj0vW1xuXHJcdF0vZyx3''@;'; put 'put ''PS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8sUD0vOlxkKyQvLEY9L14oW2Etel1bYS16MC05ListXSo6KT8oXC9cLyk/KFtcXC9dKyk/KFtcU1xzXSopL2ksTz0vXlthLXpBLVpdOi87ZnVuY3Rpb24geihuZSl7cmV0dXJuKG5lfHwiIikudG9TdHJpbmcoKS5yZXBsYWNlKGcsIiIp''@;'; put 'put ''fXZhciBOPVtbIiMiLCJoYXNoIl0sWyI/IiwicXVlcnkiXSxmdW5jdGlvbihpZSxsZSl7cmV0dXJuIFUobGUucHJvdG9jb2wpP2llLnJlcGxhY2UoL1xcL2csIi8iKTppZX0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRoIiwxXSxbTmFOLCJob3N0Iix2b2lkIDAsMSwxXSxbLzooXGQqKSQv''@;'; put 'put ''LCJwb3J0Iix2b2lkIDAsMV0sW05hTiwiaG9zdG5hbWUiLHZvaWQgMCwxLDFdXSxMPXtoYXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gSyhuZSl7dmFyIGllO2llPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgeS5nPCJ1Ij95Lmc6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307dmFyIFRl''@;'; put 'put ''LG1lPXt9LF9lPXR5cGVvZihuZT1uZXx8aWUubG9jYXRpb258fHt9KTtpZigiYmxvYjoiPT09bmUucHJvdG9jb2wpbWU9bmV3IHEodW5lc2NhcGUobmUucGF0aG5hbWUpLHt9KTtlbHNlIGlmKCJzdHJpbmciPT09X2UpZm9yKFRlIGluIG1lPW5ldyBxKG5lLHt9KSxMKWRlbGV0ZSBtZVtUZV07''@;'; put 'put ''ZWxzZSBpZigib2JqZWN0Ij09PV9lKXtmb3IoVGUgaW4gbmUpVGUgaW4gTHx8KG1lW1RlXT1uZVtUZV0pO3ZvaWQgMD09PW1lLnNsYXNoZXMmJihtZS5zbGFzaGVzPXcudGVzdChuZS5ocmVmKSl9cmV0dXJuIG1lfWZ1bmN0aW9uIFUobmUpe3JldHVybiJmaWxlOiI9PT1uZXx8ImZ0cDoiPT09''@;'; put 'put ''bmV8fCJodHRwOiI9PT1uZXx8Imh0dHBzOiI9PT1uZXx8IndzOiI9PT1uZXx8IndzczoiPT09bmV9ZnVuY3Rpb24gVyhuZSxpZSl7bmU9KG5lPXoobmUpKS5yZXBsYWNlKEIsIiIpLGllPWllfHx7fTt2YXIgemUsbGU9Ri5leGVjKG5lKSxtZT1sZVsxXT9sZVsxXS50b0xvd2VyQ2FzZSgpOiIi''@;'; put 'put ''LF9lPSEhbGVbMl0sVGU9ISFsZVszXSxTZT0wO3JldHVybiBfZT9UZT8oemU9bGVbMl0rbGVbM10rbGVbNF0sU2U9bGVbMl0ubGVuZ3RoK2xlWzNdLmxlbmd0aCk6KHplPWxlWzJdK2xlWzRdLFNlPWxlWzJdLmxlbmd0aCk6VGU/KHplPWxlWzNdK2xlWzRdLFNlPWxlWzNdLmxlbmd0aCk6emU9''@;'; put 'put ''bGVbNF0sImZpbGU6Ij09PW1lP1NlPj0yJiYoemU9emUuc2xpY2UoMikpOlUobWUpP3plPWxlWzRdOm1lP19lJiYoemU9emUuc2xpY2UoMikpOlNlPj0yJiZVKGllLnByb3RvY29sKSYmKHplPWxlWzRdKSx7cHJvdG9jb2w6bWUsc2xhc2hlczpfZXx8VShtZSksc2xhc2hlc0NvdW50OlNlLHJl''@;'; put 'put ''c3Q6emV9fWZ1bmN0aW9uIHEobmUsaWUsbGUpe2lmKG5lPShuZT16KG5lKSkucmVwbGFjZShCLCIiKSwhKHRoaXMgaW5zdGFuY2VvZiBxKSlyZXR1cm4gbmV3IHEobmUsaWUsbGUpO3ZhciBtZSxfZSxUZSxTZSx6ZSxWLHA9Ti5zbGljZSgpLGI9dHlwZW9mIGllLHg9dGhpcyxDPTA7Zm9yKCJv''@;'; put 'put ''YmplY3QiIT09YiYmInN0cmluZyIhPT1iJiYobGU9aWUsaWU9bnVsbCksbGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBsZSYmKGxlPV8ucGFyc2UpLG1lPSEoX2U9VyhuZXx8IiIsaWU9SyhpZSkpKS5wcm90b2NvbCYmIV9lLnNsYXNoZXMseC5zbGFzaGVzPV9lLnNsYXNoZXN8fG1lJiZpZS5zbGFz''@;'; put 'put ''aGVzLHgucHJvdG9jb2w9X2UucHJvdG9jb2x8fGllLnByb3RvY29sfHwiIixuZT1fZS5yZXN0LCgiZmlsZToiPT09X2UucHJvdG9jb2wmJigyIT09X2Uuc2xhc2hlc0NvdW50fHxPLnRlc3QobmUpKXx8IV9lLnNsYXNoZXMmJihfZS5wcm90b2NvbHx8X2Uuc2xhc2hlc0NvdW50PDJ8fCFVKHgu''@;'; put 'put ''cHJvdG9jb2wpKSkmJihwWzNdPVsvKC4qKS8sInBhdGhuYW1lIl0pO0M8cC5sZW5ndGg7QysrKSJmdW5jdGlvbiIhPXR5cGVvZihTZT1wW0NdKT8oVj1TZVsxXSwoVGU9U2VbMF0pIT1UZT94W1ZdPW5lOiJzdHJpbmciPT10eXBlb2YgVGU/fih6ZT0iQCI9PT1UZT9uZS5sYXN0SW5kZXhPZihU''@;'; put 'put ''ZSk6bmUuaW5kZXhPZihUZSkpJiYoIm51bWJlciI9PXR5cGVvZiBTZVsyXT8oeFtWXT1uZS5zbGljZSgwLHplKSxuZT1uZS5zbGljZSh6ZStTZVsyXSkpOih4W1ZdPW5lLnNsaWNlKHplKSxuZT1uZS5zbGljZSgwLHplKSkpOih6ZT1UZS5leGVjKG5lKSkmJih4W1ZdPXplWzFdLG5lPW5lLnNs''@;'; put 'put ''aWNlKDAsemUuaW5kZXgpKSx4W1ZdPXhbVl18fG1lJiZTZVszXSYmaWVbVl18fCIiLFNlWzRdJiYoeFtWXT14W1ZdLnRvTG93ZXJDYXNlKCkpKTpuZT1TZShuZSx4KTtsZSYmKHgucXVlcnk9bGUoeC5xdWVyeSkpLG1lJiZpZS5zbGFzaGVzJiYiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYm''@;'; put 'put ''KCIiIT09eC5wYXRobmFtZXx8IiIhPT1pZS5wYXRobmFtZSkmJih4LnBhdGhuYW1lPWZ1bmN0aW9uIFkobmUsaWUpe2lmKCIiPT09bmUpcmV0dXJuIGllO2Zvcih2YXIgbGU9KGllfHwiLyIpLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuY29uY2F0KG5lLnNwbGl0KCIvIikpLG1lPWxlLmxlbmd0''@;'; put 'put ''aCxfZT1sZVttZS0xXSxUZT0hMSxTZT0wO21lLS07KSIuIj09PWxlW21lXT9sZS5zcGxpY2UobWUsMSk6Ii4uIj09PWxlW21lXT8obGUuc3BsaWNlKG1lLDEpLFNlKyspOlNlJiYoMD09PW1lJiYoVGU9ITApLGxlLnNwbGljZShtZSwxKSxTZS0tKTtyZXR1cm4gVGUmJmxlLnVuc2hpZnQoIiIp''@;'; put 'put ''LCgiLiI9PT1fZXx8Ii4uIj09PV9lKSYmbGUucHVzaCgiIiksbGUuam9pbigiLyIpfSh4LnBhdGhuYW1lLGllLnBhdGhuYW1lKSksIi8iIT09eC5wYXRobmFtZS5jaGFyQXQoMCkmJlUoeC5wcm90b2NvbCkmJih4LnBhdGhuYW1lPSIvIit4LnBhdGhuYW1lKSxJKHgucG9ydCx4LnByb3RvY29s''@;'; put 'put ''KXx8KHguaG9zdD14Lmhvc3RuYW1lLHgucG9ydD0iIikseC51c2VybmFtZT14LnBhc3N3b3JkPSIiLHguYXV0aCYmKH4oemU9eC5hdXRoLmluZGV4T2YoIjoiKSk/KHgudXNlcm5hbWU9eC5hdXRoLnNsaWNlKDAsemUpLHgudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNv''@;'; put 'put ''bXBvbmVudCh4LnVzZXJuYW1lKSkseC5wYXNzd29yZD14LmF1dGguc2xpY2UoemUrMSkseC5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgucGFzc3dvcmQpKSk6eC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgu''@;'; put 'put ''YXV0aCkpLHguYXV0aD14LnBhc3N3b3JkP3gudXNlcm5hbWUrIjoiK3gucGFzc3dvcmQ6eC51c2VybmFtZSkseC5vcmlnaW49ImZpbGU6IiE9PXgucHJvdG9jb2wmJlUoeC5wcm90b2NvbCkmJnguaG9zdD94LnByb3RvY29sKyIvLyIreC5ob3N0OiJudWxsIix4LmhyZWY9eC50b1N0cmluZygp''@;'; put 'put ''fXEucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24gZWUobmUsaWUsbGUpe3ZhciBtZT10aGlzO3N3aXRjaChuZSl7Y2FzZSJxdWVyeSI6InN0cmluZyI9PXR5cGVvZiBpZSYmaWUubGVuZ3RoJiYoaWU9KGxlfHxfLnBhcnNlKShpZSkpLG1lW25lXT1pZTticmVhaztjYXNlInBvcnQiOm1lW25lXT1p''@;'; put 'put ''ZSxJKGllLG1lLnByb3RvY29sKT9pZSYmKG1lLmhvc3Q9bWUuaG9zdG5hbWUrIjoiK2llKToobWUuaG9zdD1tZS5ob3N0bmFtZSxtZVtuZV09IiIpO2JyZWFrO2Nhc2UiaG9zdG5hbWUiOm1lW25lXT1pZSxtZS5wb3J0JiYoaWUrPSI6IittZS5wb3J0KSxtZS5ob3N0PWllO2JyZWFrO2Nhc2Ui''@;'; put 'put ''aG9zdCI6bWVbbmVdPWllLFAudGVzdChpZSk/KGllPWllLnNwbGl0KCI6IiksbWUucG9ydD1pZS5wb3AoKSxtZS5ob3N0bmFtZT1pZS5qb2luKCI6IikpOihtZS5ob3N0bmFtZT1pZSxtZS5wb3J0PSIiKTticmVhaztjYXNlInByb3RvY29sIjptZS5wcm90b2NvbD1pZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LG1lLnNsYXNoZXM9IWxlO2JyZWFrO2Nhc2UicGF0aG5hbWUiOmNhc2UiaGFzaCI6aWYoaWUpe3ZhciBfZT0icGF0aG5hbWUiPT09bmU/Ii8iOiIjIjttZVtuZV09aWUuY2hhckF0KDApIT09X2U/X2UraWU6aWV9ZWxzZSBtZVtuZV09aWU7YnJlYWs7Y2FzZSJ1c2VybmFtZSI6Y2FzZSJwYXNz''@;'; put 'put ''d29yZCI6bWVbbmVdPWVuY29kZVVSSUNvbXBvbmVudChpZSk7YnJlYWs7Y2FzZSJhdXRoIjp2YXIgVGU9aWUuaW5kZXhPZigiOiIpO35UZT8obWUudXNlcm5hbWU9aWUuc2xpY2UoMCxUZSksbWUudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChtZS51c2Vy''@;'; put 'put ''bmFtZSkpLG1lLnBhc3N3b3JkPWllLnNsaWNlKFRlKzEpLG1lLnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQobWUucGFzc3dvcmQpKSk6bWUudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChpZSkpfWZvcih2YXIgU2U9''@;'; put 'put ''MDtTZTxOLmxlbmd0aDtTZSsrKXt2YXIgemU9TltTZV07emVbNF0mJihtZVt6ZVsxXV09bWVbemVbMV1dLnRvTG93ZXJDYXNlKCkpfXJldHVybiBtZS5hdXRoPW1lLnBhc3N3b3JkP21lLnVzZXJuYW1lKyI6IittZS5wYXNzd29yZDptZS51c2VybmFtZSxtZS5vcmlnaW49ImZpbGU6IiE9PW1l''@;'; put 'put ''LnByb3RvY29sJiZVKG1lLnByb3RvY29sKSYmbWUuaG9zdD9tZS5wcm90b2NvbCsiLy8iK21lLmhvc3Q6Im51bGwiLG1lLmhyZWY9bWUudG9TdHJpbmcoKSxtZX0sdG9TdHJpbmc6ZnVuY3Rpb24gSihuZSl7KCFuZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG5lKSYmKG5lPV8uc3RyaW5naWZ5KTt2''@;'; put 'put ''YXIgaWUsbGU9dGhpcyxtZT1sZS5ob3N0LF9lPWxlLnByb3RvY29sO19lJiYiOiIhPT1fZS5jaGFyQXQoX2UubGVuZ3RoLTEpJiYoX2UrPSI6Iik7dmFyIFRlPV9lKyhsZS5wcm90b2NvbCYmbGUuc2xhc2hlc3x8VShsZS5wcm90b2NvbCk/Ii8vIjoiIik7cmV0dXJuIGxlLnVzZXJuYW1lPyhU''@;'; put 'put ''ZSs9bGUudXNlcm5hbWUsbGUucGFzc3dvcmQmJihUZSs9IjoiK2xlLnBhc3N3b3JkKSxUZSs9IkAiKTpsZS5wYXNzd29yZD8oVGUrPSI6IitsZS5wYXNzd29yZCxUZSs9IkAiKToiZmlsZToiIT09bGUucHJvdG9jb2wmJlUobGUucHJvdG9jb2wpJiYhbWUmJiIvIiE9PWxlLnBhdGhuYW1lJiYo''@;'; put 'put ''VGUrPSJAIiksKCI6Ij09PW1lW21lLmxlbmd0aC0xXXx8UC50ZXN0KGxlLmhvc3RuYW1lKSYmIWxlLnBvcnQpJiYobWUrPSI6IiksVGUrPW1lK2xlLnBhdGhuYW1lLChpZT0ib2JqZWN0Ij09dHlwZW9mIGxlLnF1ZXJ5P25lKGxlLnF1ZXJ5KTpsZS5xdWVyeSkmJihUZSs9Ij8iIT09aWUuY2hh''@;'; put 'put ''ckF0KDApPyI/IitpZTppZSksbGUuaGFzaCYmKFRlKz1sZS5oYXNoKSxUZX19LHEuZXh0cmFjdFByb3RvY29sPVcscS5sb2NhdGlvbj1LLHEudHJpbUxlZnQ9eixxLnFzPV8sdWUuZXhwb3J0cz1xfSw0OTI3Oih1ZSxYLHkpPT57dmFyIEk9eSg1MTA4KTtmdW5jdGlvbiBnKEIpe3RyeXtpZigh''@;'; put 'put ''eS5nLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgdz15LmcubG9jYWxTdG9yYWdlW0JdO3JldHVybiBudWxsIT13JiYidHJ1ZSI9PT1TdHJpbmcodykudG9Mb3dlckNhc2UoKX11ZS5leHBvcnRzPWZ1bmN0aW9uIF8oQix3KXtpZihnKCJub0RlcHJlY2F0aW9uIikp''@;'; put 'put ''cmV0dXJuIEI7dmFyIFA9ITE7cmV0dXJuIGZ1bmN0aW9uIEYoKXtpZighUCl7aWYoZygidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcih3KTtnKCJ0cmFjZURlcHJlY2F0aW9uIik/SS50cmFjZSh3KTpJLndhcm4odyksUD0hMH1yZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50''@;'; put 'put ''cyl9fX0sMzg0OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbih5KXtyZXR1cm4geSYmIm9iamVjdCI9PXR5cGVvZiB5JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgeS5yZWFkVUludDh9fSw1OTU1Oih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjU4NCksXz15KDg2NjIpLGc9eSg2NDMwKSxCPXkoNTY5Mik7ZnVuY3Rpb24gdyhBZSl7cmV0dXJuIEFlLmNhbGwuYmluZChBZSl9dmFyIFA9dHlwZW9mIEJpZ0ludDwidSIsRj10eXBlb2YgU3ltYm9sPCJ1IixPPXcoT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZyksej13KE51bWJlci5wcm90b3R5cGUudmFsdWVPZiksTj13KFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiksTD13KEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YpO2lmKFApdmFyIEs9dyhCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YpO2lmKEYpdmFyIFU9dyhTeW1ib2wucHJv''@;'; put 'put ''dG90eXBlLnZhbHVlT2YpO2Z1bmN0aW9uIFcoQWUsX3Qpe2lmKCJvYmplY3QiIT10eXBlb2YgQWUpcmV0dXJuITE7dHJ5e3JldHVybiBfdChBZSksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIHAoQWUpe3JldHVybiJbb2JqZWN0IE1hcF0iPT09TyhBZSl9ZnVuY3Rpb24geChBZSl7cmV0''@;'; put 'put ''dXJuIltvYmplY3QgU2V0XSI9PT1PKEFlKX1mdW5jdGlvbiBUKEFlKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1PKEFlKX1mdW5jdGlvbiBqKEFlKXtyZXR1cm4iW29iamVjdCBXZWFrU2V0XSI9PT1PKEFlKX1mdW5jdGlvbiBtKEFlKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0i''@;'; put 'put ''PT09TyhBZSl9ZnVuY3Rpb24gQShBZSl7cmV0dXJuISh0eXBlb2YgQXJyYXlCdWZmZXI+InUiKSYmKG0ud29ya2luZz9tKEFlKTpBZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKX1mdW5jdGlvbiBhZShBZSl7cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIj09PU8oQWUpfWZ1bmN0aW9uIHRlKEFl''@;'; put 'put ''KXtyZXR1cm4hKHR5cGVvZiBEYXRhVmlldz4idSIpJiYoYWUud29ya2luZz9hZShBZSk6QWUgaW5zdGFuY2VvZiBEYXRhVmlldyl9WC5pc0FyZ3VtZW50c09iamVjdD1JLFguaXNHZW5lcmF0b3JGdW5jdGlvbj1fLFguaXNUeXBlZEFycmF5PUIsWC5pc1Byb21pc2U9ZnVuY3Rpb24gWShBZSl7''@;'; put 'put ''cmV0dXJuIHR5cGVvZiBQcm9taXNlPCJ1IiYmQWUgaW5zdGFuY2VvZiBQcm9taXNlfHxudWxsIT09QWUmJiJvYmplY3QiPT10eXBlb2YgQWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBBZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgQWUuY2F0Y2h9LFguaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rp''@;'; put 'put ''b24gcShBZSl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoQWUpOkIoQWUpfHx0ZShBZSl9LFguaXNVaW50OEFycmF5PWZ1bmN0aW9uIGVlKEFlKXtyZXR1cm4iVWludDhBcnJheSI9PT1nKEFlKX0sWC5pc1VpbnQ4''@;'; put 'put ''Q2xhbXBlZEFycmF5PWZ1bmN0aW9uIEooQWUpe3JldHVybiJVaW50OENsYW1wZWRBcnJheSI9PT1nKEFlKX0sWC5pc1VpbnQxNkFycmF5PWZ1bmN0aW9uIG5lKEFlKXtyZXR1cm4iVWludDE2QXJyYXkiPT09ZyhBZSl9LFguaXNVaW50MzJBcnJheT1mdW5jdGlvbiBpZShBZSl7cmV0dXJuIlVp''@;'; put 'put ''bnQzMkFycmF5Ij09PWcoQWUpfSxYLmlzSW50OEFycmF5PWZ1bmN0aW9uIGxlKEFlKXtyZXR1cm4iSW50OEFycmF5Ij09PWcoQWUpfSxYLmlzSW50MTZBcnJheT1mdW5jdGlvbiBtZShBZSl7cmV0dXJuIkludDE2QXJyYXkiPT09ZyhBZSl9LFguaXNJbnQzMkFycmF5PWZ1bmN0aW9uIF9lKEFl''@;'; put 'put ''KXtyZXR1cm4iSW50MzJBcnJheSI9PT1nKEFlKX0sWC5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbiBUZShBZSl7cmV0dXJuIkZsb2F0MzJBcnJheSI9PT1nKEFlKX0sWC5pc0Zsb2F0NjRBcnJheT1mdW5jdGlvbiBTZShBZSl7cmV0dXJuIkZsb2F0NjRBcnJheSI9PT1nKEFlKX0sWC5pc0JpZ0lu''@;'; put 'put ''dDY0QXJyYXk9ZnVuY3Rpb24gemUoQWUpe3JldHVybiJCaWdJbnQ2NEFycmF5Ij09PWcoQWUpfSxYLmlzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24gVihBZSl7cmV0dXJuIkJpZ1VpbnQ2NEFycmF5Ij09PWcoQWUpfSxwLndvcmtpbmc9dHlwZW9mIE1hcDwidSImJnAobmV3IE1hcCksWC5pc01h''@;'; put 'put ''cD1mdW5jdGlvbiBiKEFlKXtyZXR1cm4hKHR5cGVvZiBNYXA+InUiKSYmKHAud29ya2luZz9wKEFlKTpBZSBpbnN0YW5jZW9mIE1hcCl9LHgud29ya2luZz10eXBlb2YgU2V0PCJ1IiYmeChuZXcgU2V0KSxYLmlzU2V0PWZ1bmN0aW9uIEMoQWUpe3JldHVybiEodHlwZW9mIFNldD4idSIpJiYo''@;'; put 'put ''eC53b3JraW5nP3goQWUpOkFlIGluc3RhbmNlb2YgU2V0KX0sVC53b3JraW5nPXR5cGVvZiBXZWFrTWFwPCJ1IiYmVChuZXcgV2Vha01hcCksWC5pc1dlYWtNYXA9ZnVuY3Rpb24gSChBZSl7cmV0dXJuISh0eXBlb2YgV2Vha01hcD4idSIpJiYoVC53b3JraW5nP1QoQWUpOkFlIGluc3RhbmNl''@;'; put 'put ''b2YgV2Vha01hcCl9LGoud29ya2luZz10eXBlb2YgV2Vha1NldDwidSImJmoobmV3IFdlYWtTZXQpLFguaXNXZWFrU2V0PWZ1bmN0aW9uIEUoQWUpe3JldHVybiBqKEFlKX0sbS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJm0obmV3IEFycmF5QnVmZmVyKSxYLmlzQXJyYXlCdWZm''@;'; put 'put ''ZXI9QSxhZS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBEYXRhVmlldzwidSImJmFlKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSksMCwxKSksWC5pc0RhdGFWaWV3PXRlO3ZhciBzZT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP1NoYXJlZEFycmF5''@;'; put 'put ''QnVmZmVyOnZvaWQgMDtmdW5jdGlvbiB3ZShBZSl7cmV0dXJuIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdIj09PU8oQWUpfWZ1bmN0aW9uIFVlKEFlKXtyZXR1cm4hKHR5cGVvZiBzZT4idSIpJiYodHlwZW9mIHdlLndvcmtpbmc+InUiJiYod2Uud29ya2luZz13ZShuZXcgc2UpKSx3ZS53''@;'; put 'put ''b3JraW5nP3dlKEFlKTpBZSBpbnN0YW5jZW9mIHNlKX1mdW5jdGlvbiBqZShBZSl7cmV0dXJuIFcoQWUseil9ZnVuY3Rpb24gRGUoQWUpe3JldHVybiBXKEFlLE4pfWZ1bmN0aW9uIEZlKEFlKXtyZXR1cm4gVyhBZSxMKX1mdW5jdGlvbiBSZShBZSl7cmV0dXJuIFAmJlcoQWUsSyl9ZnVuY3Rp''@;'; put 'put ''b24gSWUoQWUpe3JldHVybiBGJiZXKEFlLFUpfVguaXNTaGFyZWRBcnJheUJ1ZmZlcj1VZSxYLmlzQXN5bmNGdW5jdGlvbj1mdW5jdGlvbiBKZShBZSl7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09TyhBZSl9LFguaXNNYXBJdGVyYXRvcj1mdW5jdGlvbiBvdChBZSl7cmV0dXJu''@;'; put 'put ''IltvYmplY3QgTWFwIEl0ZXJhdG9yXSI9PT1PKEFlKX0sWC5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uIE1lKEFlKXtyZXR1cm4iW29iamVjdCBTZXQgSXRlcmF0b3JdIj09PU8oQWUpfSxYLmlzR2VuZXJhdG9yT2JqZWN0PWZ1bmN0aW9uIHZlKEFlKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3Jd''@;'; put 'put ''Ij09PU8oQWUpfSxYLmlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZT1mdW5jdGlvbiBYZShBZSl7cmV0dXJuIltvYmplY3QgV2ViQXNzZW1ibHkuTW9kdWxlXSI9PT1PKEFlKX0sWC5pc051bWJlck9iamVjdD1qZSxYLmlzU3RyaW5nT2JqZWN0PURlLFguaXNCb29sZWFuT2JqZWN0PUZlLFgu''@;'; put 'put ''aXNCaWdJbnRPYmplY3Q9UmUsWC5pc1N5bWJvbE9iamVjdD1JZSxYLmlzQm94ZWRQcmltaXRpdmU9ZnVuY3Rpb24gVmUoQWUpe3JldHVybiBqZShBZSl8fERlKEFlKXx8RmUoQWUpfHxSZShBZSl8fEllKEFlKX0sWC5pc0FueUFycmF5QnVmZmVyPWZ1bmN0aW9uIGtlKEFlKXtyZXR1cm4gdHlw''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXk8InUiJiYoQShBZSl8fFVlKEFlKSl9LFsiaXNQcm94eSIsImlzRXh0ZXJuYWwiLCJpc01vZHVsZU5hbWVzcGFjZU9iamVjdCJdLmZvckVhY2goZnVuY3Rpb24oQWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLEFlLHtlbnVtZXJhYmxlOiExLHZhbHVlOmZ1bmN0aW9u''@;'; put 'put ''KCl7dGhyb3cgbmV3IEVycm9yKEFlKyIgaXMgbm90IHN1cHBvcnRlZCBpbiB1c2VybGFuZCIpfX0pfSl9LDk1Mzk6KHVlLFgseSk9Pnt2YXIgST15KDQxNTUpLF89eSg1MTA4KSxnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbih3ZSl7Zm9yKHZhciBVZT1PYmpl''@;'; put 'put ''Y3Qua2V5cyh3ZSksSmU9e30sb3Q9MDtvdDxVZS5sZW5ndGg7b3QrKylKZVtVZVtvdF1dPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2UsVWVbb3RdKTtyZXR1cm4gSmV9LEI9LyVbc2RqJV0vZztYLmZvcm1hdD1mdW5jdGlvbihzZSl7aWYoIV9lKHNlKSl7Zm9yKHZhciB3ZT1b''@;'; put 'put ''XSxVZT0wO1VlPGFyZ3VtZW50cy5sZW5ndGg7VWUrKyl3ZS5wdXNoKE8oYXJndW1lbnRzW1VlXSkpO3JldHVybiB3ZS5qb2luKCIgIil9VWU9MTtmb3IodmFyIEplPWFyZ3VtZW50cyxvdD1KZS5sZW5ndGgsTWU9U3RyaW5nKHNlKS5yZXBsYWNlKEIsZnVuY3Rpb24oWGUpe2lmKCIlJSI9PT1Y''@;'; put 'put ''ZSlyZXR1cm4iJSI7aWYoVWU+PW90KXJldHVybiBYZTtzd2l0Y2goWGUpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoSmVbVWUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoSmVbVWUrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoSmVbVWUrK10pfWNhdGNoe3JldHVy''@;'; put 'put ''biJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBYZX19KSx2ZT1KZVtVZV07VWU8b3Q7dmU9SmVbKytVZV0paWUodmUpfHwhVih2ZSk/TWUrPSIgIit2ZTpNZSs9IiAiK08odmUpO3JldHVybiBNZX0sWC5kZXByZWNhdGU9ZnVuY3Rpb24oc2Usd2Upe2lmKHR5cGVvZiBJPCJ1IiYmITA9PT1J''@;'; put 'put ''Lm5vRGVwcmVjYXRpb24pcmV0dXJuIHNlO2lmKHR5cGVvZiBJPiJ1IilyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWC5kZXByZWNhdGUoc2Usd2UpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIFVlPSExO3JldHVybiBmdW5jdGlvbiBKZSgpe2lmKCFVZSl7aWYoSS50aHJvd0RlcHJlY2F0''@;'; put 'put ''aW9uKXRocm93IG5ldyBFcnJvcih3ZSk7SS50cmFjZURlcHJlY2F0aW9uP18udHJhY2Uod2UpOl8uZXJyb3Iod2UpLFVlPSEwfXJldHVybiBzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdz17fSxQPS9eJC87aWYoSS5lbnYuTk9ERV9ERUJVRyl7dmFyIEY9SS5lbnYuTk9ERV9ERUJV''@;'; put 'put ''RztGPUYucmVwbGFjZSgvW3xcXHt9KClbXF1eJCs/Ll0vZywiXFwkJiIpLnJlcGxhY2UoL1wqL2csIi4qIikucmVwbGFjZSgvLC9nLCIkfF4iKS50b1VwcGVyQ2FzZSgpLFA9bmV3IFJlZ0V4cCgiXiIrRisiJCIsImkiKX1mdW5jdGlvbiBPKHNlLHdlKXt2YXIgVWU9e3NlZW46W10sc3R5bGl6''@;'; put 'put ''ZTpOfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKFVlLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKFVlLmNvbG9ycz1hcmd1bWVudHNbM10pLG5lKHdlKT9VZS5zaG93SGlkZGVuPXdlOndlJiZYLl9leHRlbmQoVWUsd2UpLFNlKFVlLnNob3dIaWRkZW4p''@;'; put 'put ''JiYoVWUuc2hvd0hpZGRlbj0hMSksU2UoVWUuZGVwdGgpJiYoVWUuZGVwdGg9MiksU2UoVWUuY29sb3JzKSYmKFVlLmNvbG9ycz0hMSksU2UoVWUuY3VzdG9tSW5zcGVjdCkmJihVZS5jdXN0b21JbnNwZWN0PSEwKSxVZS5jb2xvcnMmJihVZS5zdHlsaXplPXopLEsoVWUsc2UsVWUuZGVwdGgp''@;'; put 'put ''fWZ1bmN0aW9uIHooc2Usd2Upe3ZhciBVZT1PLnN0eWxlc1t3ZV07cmV0dXJuIFVlPyJceDFiWyIrTy5jb2xvcnNbVWVdWzBdKyJtIitzZSsiXHgxYlsiK08uY29sb3JzW1VlXVsxXSsibSI6c2V9ZnVuY3Rpb24gTihzZSx3ZSl7cmV0dXJuIHNlfWZ1bmN0aW9uIEsoc2Usd2UsVWUpe2lmKHNl''@;'; put 'put ''LmN1c3RvbUluc3BlY3QmJndlJiZ4KHdlLmluc3BlY3QpJiZ3ZS5pbnNwZWN0IT09WC5pbnNwZWN0JiYoIXdlLmNvbnN0cnVjdG9yfHx3ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT13ZSkpe3ZhciBKZT13ZS5pbnNwZWN0KFVlLHNlKTtyZXR1cm4gX2UoSmUpfHwoSmU9SyhzZSxKZSxVZSkp''@;'; put 'put ''LEplfXZhciBvdD1mdW5jdGlvbiBVKHNlLHdlKXtpZihTZSh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKF9lKHdlKSl7dmFyIFVlPSInIitKU09OLnN0cmluZ2lmeSh3ZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5y''@;'; put 'put ''ZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gc2Uuc3R5bGl6ZShVZSwic3RyaW5nIil9cmV0dXJuIG1lKHdlKT9zZS5zdHlsaXplKCIiK3dlLCJudW1iZXIiKTpuZSh3ZSk/c2Uuc3R5bGl6ZSgiIit3ZSwiYm9vbGVhbiIpOmllKHdlKT9zZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZv''@;'; put 'put ''aWQgMH0oc2Usd2UpO2lmKG90KXJldHVybiBvdDt2YXIgTWU9T2JqZWN0LmtleXMod2UpLHZlPWZ1bmN0aW9uIEwoc2Upe3ZhciB3ZT17fTtyZXR1cm4gc2UuZm9yRWFjaChmdW5jdGlvbihVZSxKZSl7d2VbVWVdPSEwfSksd2V9KE1lKTtpZihzZS5zaG93SGlkZGVuJiYoTWU9T2JqZWN0Lmdl''@;'; put 'put ''dE93blByb3BlcnR5TmFtZXMod2UpKSxiKHdlKSYmKE1lLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8TWUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIFcod2UpO2lmKDA9PT1NZS5sZW5ndGgpe2lmKHgod2UpKXJldHVybiBzZS5zdHlsaXplKCJbRnVuY3Rpb24iKyh3ZS5uYW1l''@;'; put 'put ''PyI6ICIrd2UubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoemUod2UpKXJldHVybiBzZS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksInJlZ2V4cCIpO2lmKHAod2UpKXJldHVybiBzZS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2Up''@;'; put 'put ''LCJkYXRlIik7aWYoYih3ZSkpcmV0dXJuIFcod2UpfXZhciBJZSxqZT0iIixEZT0hMSxGZT1bInsiLCJ9Il07cmV0dXJuIEood2UpJiYoRGU9ITAsRmU9WyJbIiwiXSJdKSx4KHdlKSYmKGplPSIgW0Z1bmN0aW9uIisod2UubmFtZT8iOiAiK3dlLm5hbWU6IiIpKyJdIiksemUod2UpJiYoamU9''@;'; put 'put ''IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSkpLHAod2UpJiYoamU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwod2UpKSxiKHdlKSYmKGplPSIgIitXKHdlKSksMCE9PU1lLmxlbmd0aHx8RGUmJjAhPXdlLmxlbmd0aD9VZTwwP3plKHdlKT9zZS5zdHls''@;'; put 'put ''aXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksInJlZ2V4cCIpOnNlLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihzZS5zZWVuLnB1c2god2UpLEllPURlP2Z1bmN0aW9uIFkoc2Usd2UsVWUsSmUsb3Qpe2Zvcih2YXIgTWU9W10sdmU9MCxYZT13ZS5sZW5ndGg7''@;'; put 'put ''dmU8WGU7Kyt2ZSltKHdlLFN0cmluZyh2ZSkpP01lLnB1c2gocShzZSx3ZSxVZSxKZSxTdHJpbmcodmUpLCEwKSk6TWUucHVzaCgiIik7cmV0dXJuIG90LmZvckVhY2goZnVuY3Rpb24oamUpe2plLm1hdGNoKC9eXGQrJC8pfHxNZS5wdXNoKHEoc2Usd2UsVWUsSmUsamUsITApKX0pLE1lfShz''@;'; put 'put ''ZSx3ZSxVZSx2ZSxNZSk6TWUubWFwKGZ1bmN0aW9uKFZlKXtyZXR1cm4gcShzZSx3ZSxVZSx2ZSxWZSxEZSl9KSxzZS5zZWVuLnBvcCgpLGZ1bmN0aW9uIGVlKHNlLHdlLFVlKXt2YXIgb3Q9c2UucmVkdWNlKGZ1bmN0aW9uKE1lLHZlKXtyZXR1cm4gdmUuaW5kZXhPZigiXG4iKSxNZSt2ZS5y''@;'; put 'put ''ZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIG90PjYwP1VlWzBdKygiIj09PXdlPyIiOndlKyJcbiAiKSsiICIrc2Uuam9pbigiLFxuICAiKSsiICIrVWVbMV06VWVbMF0rd2UrIiAiK3NlLmpvaW4oIiwgIikrIiAiK1VlWzFdfShJZSxqZSxGZSkpOkZl''@;'; put 'put ''WzBdK2plK0ZlWzFdfWZ1bmN0aW9uIFcoc2Upe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZSkrIl0ifWZ1bmN0aW9uIHEoc2Usd2UsVWUsSmUsb3QsTWUpe3ZhciB2ZSxYZSxqZTtpZigoamU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3ZSxvdCl8''@;'; put 'put ''fHt2YWx1ZTp3ZVtvdF19KS5nZXQ/WGU9c2Uuc3R5bGl6ZShqZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOmplLnNldCYmKFhlPXNlLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxtKEplLG90KXx8KHZlPSJbIitvdCsiXSIpLFhlfHwoc2Uuc2Vl''@;'; put 'put ''bi5pbmRleE9mKGplLnZhbHVlKTwwPyhYZT1pZShVZSk/SyhzZSxqZS52YWx1ZSxudWxsKTpLKHNlLGplLnZhbHVlLFVlLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoWGU9TWU/WGUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKERlKXtyZXR1cm4iICAiK0RlfSkuam9pbigiXG4iKS5zbGljZSgy''@;'; put 'put ''KToiXG4iK1hlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihEZSl7cmV0dXJuIiAgICIrRGV9KS5qb2luKCJcbiIpKTpYZT1zZS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxTZSh2ZSkpe2lmKE1lJiZvdC5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gWGU7KHZlPUpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KCIiK290KSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8odmU9dmUuc2xpY2UoMSwtMSksdmU9c2Uuc3R5bGl6ZSh2ZSwibmFtZSIpKToodmU9dmUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIp''@;'; put 'put ''LHZlPXNlLnN0eWxpemUodmUsInN0cmluZyIpKX1yZXR1cm4gdmUrIjogIitYZX1mdW5jdGlvbiBKKHNlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShzZSl9ZnVuY3Rpb24gbmUoc2Upe3JldHVybiJib29sZWFuIj09dHlwZW9mIHNlfWZ1bmN0aW9uIGllKHNlKXtyZXR1cm4gbnVsbD09PXNlfWZ1''@;'; put 'put ''bmN0aW9uIG1lKHNlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHNlfWZ1bmN0aW9uIF9lKHNlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHNlfWZ1bmN0aW9uIFNlKHNlKXtyZXR1cm4gdm9pZCAwPT09c2V9ZnVuY3Rpb24gemUoc2Upe3JldHVybiBWKHNlKSYmIltvYmplY3QgUmVnRXhwXSI9''@;'; put 'put ''PT1UKHNlKX1mdW5jdGlvbiBWKHNlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHNlJiZudWxsIT09c2V9ZnVuY3Rpb24gcChzZSl7cmV0dXJuIFYoc2UpJiYiW29iamVjdCBEYXRlXSI9PT1UKHNlKX1mdW5jdGlvbiBiKHNlKXtyZXR1cm4gVihzZSkmJigiW29iamVjdCBFcnJvcl0iPT09VChz''@;'; put 'put ''ZSl8fHNlIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIHgoc2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzZX1mdW5jdGlvbiBUKHNlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlKX1mdW5jdGlvbiBIKHNlKXtyZXR1cm4gc2U8MTA/IjAiK3NlLnRvU3Ry''@;'; put 'put ''aW5nKDEwKTpzZS50b1N0cmluZygxMCl9WC5kZWJ1Z2xvZz1mdW5jdGlvbihzZSl7aWYoc2U9c2UudG9VcHBlckNhc2UoKSwhd1tzZV0paWYoUC50ZXN0KHNlKSl7dmFyIHdlPUkucGlkO3dbc2VdPWZ1bmN0aW9uKCl7dmFyIFVlPVguZm9ybWF0LmFwcGx5KFgsYXJndW1lbnRzKTtfLmVycm9y''@;'; put 'put ''KCIlcyAlZDogJXMiLHNlLHdlLFVlKX19ZWxzZSB3W3NlXT1mdW5jdGlvbigpe307cmV0dXJuIHdbc2VdfSxYLmluc3BlY3Q9TyxPLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAs''@;'; put 'put ''MzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sTy5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVm''@;'; put 'put ''aW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxYLnR5cGVzPXkoNTk1NSksWC5pc0FycmF5PUosWC5pc0Jvb2xlYW49bmUsWC5pc051bGw9aWUsWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBsZShzZSl7cmV0dXJu''@;'; put 'put ''IG51bGw9PXNlfSxYLmlzTnVtYmVyPW1lLFguaXNTdHJpbmc9X2UsWC5pc1N5bWJvbD1mdW5jdGlvbiBUZShzZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBzZX0sWC5pc1VuZGVmaW5lZD1TZSxYLmlzUmVnRXhwPXplLFgudHlwZXMuaXNSZWdFeHA9emUsWC5pc09iamVjdD1WLFguaXNEYXRl''@;'; put 'put ''PXAsWC50eXBlcy5pc0RhdGU9cCxYLmlzRXJyb3I9YixYLnR5cGVzLmlzTmF0aXZlRXJyb3I9YixYLmlzRnVuY3Rpb249eCxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIEMoc2Upe3JldHVybiBudWxsPT09c2V8fCJib29sZWFuIj09dHlwZW9mIHNlfHwibnVtYmVyIj09dHlwZW9mIHNlfHwic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIHNlfHwic3ltYm9sIj09dHlwZW9mIHNlfHx0eXBlb2Ygc2U+InUifSxYLmlzQnVmZmVyPXkoMzg0KTt2YXIgaj1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIG0oc2Us''@;'; put 'put ''d2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2Usd2UpfVgubG9nPWZ1bmN0aW9uKCl7Xy5sb2coIiVzIC0gJXMiLGZ1bmN0aW9uIEUoKXt2YXIgc2U9bmV3IERhdGUsd2U9W0goc2UuZ2V0SG91cnMoKSksSChzZS5nZXRNaW51dGVzKCkpLEgoc2UuZ2V0''@;'; put 'put ''U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltzZS5nZXREYXRlKCksaltzZS5nZXRNb250aCgpXSx3ZV0uam9pbigiICIpfSgpLFguZm9ybWF0LmFwcGx5KFgsYXJndW1lbnRzKSl9LFguaW5oZXJpdHM9eSg1NzE3KSxYLl9leHRlbmQ9ZnVuY3Rpb24oc2Usd2Upe2lmKCF3ZXx8IVYod2Up''@;'; put 'put ''KXJldHVybiBzZTtmb3IodmFyIFVlPU9iamVjdC5rZXlzKHdlKSxKZT1VZS5sZW5ndGg7SmUtLTspc2VbVWVbSmVdXT13ZVtVZVtKZV1dO3JldHVybiBzZX07dmFyIEE9dHlwZW9mIFN5bWJvbDwidSI/U3ltYm9sKCJ1dGlsLnByb21pc2lmeS5jdXN0b20iKTp2b2lkIDA7ZnVuY3Rpb24gYWUo''@;'; put 'put ''c2Usd2Upe2lmKCFzZSl7dmFyIFVlPW5ldyBFcnJvcigiUHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZhbHVlIik7VWUucmVhc29uPXNlLHNlPVVlfXJldHVybiB3ZShzZSl9WC5wcm9taXNpZnk9ZnVuY3Rpb24od2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB3ZSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtpZihBJiZ3ZVtBXSl7dmFyIFVlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZihVZT13ZVtBXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ1dGlsLnByb21pc2lmeS5jdXN0b20i''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoVWUsQSx7dmFsdWU6VWUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxVZX1mdW5jdGlvbiBVZSgpe2Zvcih2YXIgSmUsb3QsTWU9bmV3IFBy''@;'; put 'put ''b21pc2UoZnVuY3Rpb24oamUsRGUpe0plPWplLG90PURlfSksdmU9W10sWGU9MDtYZTxhcmd1bWVudHMubGVuZ3RoO1hlKyspdmUucHVzaChhcmd1bWVudHNbWGVdKTt2ZS5wdXNoKGZ1bmN0aW9uKGplLERlKXtqZT9vdChqZSk6SmUoRGUpfSk7dHJ5e3dlLmFwcGx5KHRoaXMsdmUpfWNhdGNo''@;'; put 'put ''KGplKXtvdChqZSl9cmV0dXJuIE1lfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoVWUsT2JqZWN0LmdldFByb3RvdHlwZU9mKHdlKSksQSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFVlLEEse3ZhbHVlOlVlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVWUsZyh3ZSkpfSxYLnByb21pc2lmeS5jdXN0b209QSxYLmNhbGxiYWNraWZ5PWZ1bmN0aW9uIHRlKHNlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygc2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBv''@;'; put 'put ''ZiB0eXBlIEZ1bmN0aW9uJyk7ZnVuY3Rpb24gd2UoKXtmb3IodmFyIFVlPVtdLEplPTA7SmU8YXJndW1lbnRzLmxlbmd0aDtKZSsrKVVlLnB1c2goYXJndW1lbnRzW0plXSk7dmFyIG90PVVlLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUg''@;'; put 'put ''bGFzdCBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24iKTt2YXIgTWU9dGhpcyx2ZT1mdW5jdGlvbigpe3JldHVybiBvdC5hcHBseShNZSxhcmd1bWVudHMpfTtzZS5hcHBseSh0aGlzLFVlKS50aGVuKGZ1bmN0aW9uKFhlKXtJLm5leHRUaWNrKHZlLmJpbmQobnVsbCxudWxsLFhl''@;'; put 'put ''KSl9LGZ1bmN0aW9uKFhlKXtJLm5leHRUaWNrKGFlLmJpbmQobnVsbCxYZSx2ZSkpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih3ZSxPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc2UpKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3ZSxnKHNlKSksd2V9fSw0ODE6KHVlLFgseSk9Pnsh''@;'; put 'put ''ZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZXhwb3J0cy5pc191cmk9ZyxJLmV4cG9ydHMuaXNfaHR0cF91cmk9QixJLmV4cG9ydHMuaXNfaHR0cHNfdXJpPXcsSS5leHBvcnRzLmlzX3dlYl91cmk9UCxJLmV4cG9ydHMuaXNVcmk9ZyxJLmV4cG9ydHMuaXNIdHRwVXJpPUIsSS5leHBvcnRz''@;'; put 'put ''LmlzSHR0cHNVcmk9dyxJLmV4cG9ydHMuaXNXZWJVcmk9UDt2YXIgXz1mdW5jdGlvbihGKXtyZXR1cm4gRi5tYXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVuY3Rpb24gZyhGKXtpZihGJiYhL1te''@;'; put 'put ''YS16MC05XDpcL1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9XC5cLVxfXH5cJV0vaS50ZXN0KEYpJiYhLyVbXjAtOWEtZl0vaS50ZXN0KEYpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwkKS9pLnRlc3QoRikpe3ZhciBPLE4sTCxLLFUsej0iIixXPSIiO2lmKE49KE89XyhGKSlb''@;'; put 'put ''Ml0sTD1PWzNdLEs9T1s0XSxVPU9bNV0sKHo9T1sxXSkmJnoubGVuZ3RoJiZMLmxlbmd0aD49MCl7aWYoTiYmTi5sZW5ndGgpe2lmKDAhPT1MLmxlbmd0aCYmIS9eXC8vLnRlc3QoTCkpcmV0dXJufWVsc2UgaWYoL15cL1wvLy50ZXN0KEwpKXJldHVybjtpZigvXlthLXpdW2EtejAtOVwrXC1c''@;'; put 'put ''Ll0qJC8udGVzdCh6LnRvTG93ZXJDYXNlKCkpKXJldHVybiBXKz16KyI6IixOJiZOLmxlbmd0aCYmKFcrPSIvLyIrTiksVys9TCxLJiZLLmxlbmd0aCYmKFcrPSI/IitLKSxVJiZVLmxlbmd0aCYmKFcrPSIjIitVKSxXfX19ZnVuY3Rpb24gQihGLE8pe2lmKGcoRikpe3ZhciB6LEssVyxZLE49''@;'; put 'put ''IiIsTD0iIixVPSIiLHE9IiI7aWYoTD0oej1fKEYpKVsyXSxLPXpbM10sVz16WzRdLFk9els1XSxOPXpbMV0pe2lmKE8pe2lmKCJodHRwcyIhPU4udG9Mb3dlckNhc2UoKSlyZXR1cm59ZWxzZSBpZigiaHR0cCIhPU4udG9Mb3dlckNhc2UoKSlyZXR1cm47aWYoTClyZXR1cm4vOihcZCspJC8u''@;'; put 'put ''dGVzdChMKSYmKFU9TC5tYXRjaCgvOihcZCspJC8pWzBdLEw9TC5yZXBsYWNlKC86XGQrJC8sIiIpKSxxKz1OKyI6IixxKz0iLy8iK0wsVSYmKHErPVUpLHErPUssVyYmVy5sZW5ndGgmJihxKz0iPyIrVyksWSYmWS5sZW5ndGgmJihxKz0iIyIrWSkscX19fWZ1bmN0aW9uIHcoRil7cmV0dXJu''@;'; put 'put ''IEIoRiwhMCl9ZnVuY3Rpb24gUChGKXtyZXR1cm4gQihGKXx8dyhGKX19KHVlPXkubm1kKHVlKSl9LDUxNDA6KF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMpPT57dmFyIGluZGV4T2Y9ZnVuY3Rpb24odWUsWCl7aWYodWUuaW5kZXhPZilyZXR1cm4gdWUuaW5kZXhPZihYKTtmb3Io''@;'; put 'put ''dmFyIHk9MDt5PHVlLmxlbmd0aDt5KyspaWYodWVbeV09PT1YKXJldHVybiB5O3JldHVybi0xfSxPYmplY3Rfa2V5cz1mdW5jdGlvbih1ZSl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKHVlKTt2YXIgWD1bXTtmb3IodmFyIHkgaW4gdWUpWC5wdXNoKHkpO3JldHVybiBYfSxm''@;'; put 'put ''b3JFYWNoPWZ1bmN0aW9uKHVlLFgpe2lmKHVlLmZvckVhY2gpcmV0dXJuIHVlLmZvckVhY2goWCk7Zm9yKHZhciB5PTA7eTx1ZS5sZW5ndGg7eSsrKVgodWVbeV0seSx1ZSl9LGRlZmluZVByb3A9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiXyIse30p''@;'; put 'put ''LGZ1bmN0aW9uKHVlLFgseSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLFgse3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHZhbHVlOnl9KX19Y2F0Y2h7cmV0dXJuIGZ1bmN0aW9uKFgseSxJKXtYW3ldPUl9fX0oKSxnbG9iYWxzPVsiQXJyYXkiLCJCb29sZWFu''@;'; put 'put ''IiwiRGF0ZSIsIkVycm9yIiwiRXZhbEVycm9yIiwiRnVuY3Rpb24iLCJJbmZpbml0eSIsIkpTT04iLCJNYXRoIiwiTmFOIiwiTnVtYmVyIiwiT2JqZWN0IiwiUmFuZ2VFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwiUmVnRXhwIiwiU3RyaW5nIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJV''@;'; put 'put ''UklFcnJvciIsImRlY29kZVVSSSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImV2YWwiLCJpc0Zpbml0ZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwidW5kZWZpbmVkIiwidW5lc2NhcGUiXTtmdW5jdGlv''@;'; put 'put ''biBDb250ZXh0KCl7fUNvbnRleHQucHJvdG90eXBlPXt9O3ZhciBTY3JpcHQ9ZXhwb3J0cy5TY3JpcHQ9ZnVuY3Rpb24oWCl7aWYoISh0aGlzIGluc3RhbmNlb2YgU2NyaXB0KSlyZXR1cm4gbmV3IFNjcmlwdChYKTt0aGlzLmNvZGU9WH07U2NyaXB0LnByb3RvdHlwZS5ydW5JbkNvbnRleHQ9''@;'; put 'put ''ZnVuY3Rpb24odWUpe2lmKCEodWUgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC4iKTt2YXIgWD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtYLnN0eWxlfHwoWC5zdHlsZT17fSksWC5zdHlsZS5kaXNw''@;'; put 'put ''bGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFgpO3ZhciB5PVguY29udGVudFdpbmRvdyxJPXkuZXZhbCxfPXkuZXhlY1NjcmlwdDshSSYmXyYmKF8uY2FsbCh5LCJudWxsIiksST15LmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXModWUpLGZ1bmN0aW9uKHcpe3lbd109dWVb''@;'; put 'put ''d119KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odyl7dWVbd10mJih5W3ddPXVlW3ddKX0pO3ZhciBnPU9iamVjdF9rZXlzKHkpLEI9SS5jYWxsKHksdGhpcy5jb2RlKTtyZXR1cm4gZm9yRWFjaChPYmplY3Rfa2V5cyh5KSxmdW5jdGlvbih3KXsodyBpbiB1ZXx8LTE9PT1pbmRleE9mKGcs''@;'; put 'put ''dykpJiYodWVbd109eVt3XSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24odyl7dyBpbiB1ZXx8ZGVmaW5lUHJvcCh1ZSx3LHlbd10pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChYKSxCfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluVGhpc0NvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''ZXZhbCh0aGlzLmNvZGUpfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dD1mdW5jdGlvbih1ZSl7dmFyIFg9U2NyaXB0LmNyZWF0ZUNvbnRleHQodWUpLHk9dGhpcy5ydW5JbkNvbnRleHQoWCk7cmV0dXJuIHVlJiZmb3JFYWNoKE9iamVjdF9rZXlzKFgpLGZ1bmN0aW9uKEkpe3Vl''@;'; put 'put ''W0ldPVhbSV19KSx5fSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKHVlKXtleHBvcnRzW3VlXT1TY3JpcHRbdWVdPWZ1bmN0aW9uKFgpe3ZhciB5PVNjcmlwdChYKTtyZXR1cm4geVt1ZV0uYXBwbHkoeSxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9''@;'; put 'put ''fSksZXhwb3J0cy5pc0NvbnRleHQ9ZnVuY3Rpb24odWUpe3JldHVybiB1ZSBpbnN0YW5jZW9mIENvbnRleHR9LGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKHVlKXtyZXR1cm4gZXhwb3J0cy5TY3JpcHQodWUpfSxleHBvcnRzLmNyZWF0ZUNvbnRleHQ9U2NyaXB0LmNyZWF0ZUNvbnRl''@;'; put 'put ''eHQ9ZnVuY3Rpb24odWUpe3ZhciBYPW5ldyBDb250ZXh0O3JldHVybiJvYmplY3QiPT10eXBlb2YgdWUmJmZvckVhY2goT2JqZWN0X2tleXModWUpLGZ1bmN0aW9uKHkpe1hbeV09dWVbeV19KSxYfX0sNjQzMDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQwMjkpLF89eSgzMDgz''@;'; put 'put ''KSxnPXkoNTU1OSksQj15KDczNzkpLHc9eSg3Mjk2KSxQPUIoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxGPXkoNjQxMCkoKSxPPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij95Lmc6Z2xvYmFsVGhpcyx6PV8oKSxOPUIoIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxMPU9iamVjdC5nZXRQ''@;'; put 'put ''cm90b3R5cGVPZixLPUIoIkFycmF5LnByb3RvdHlwZS5pbmRleE9mIiwhMCl8fGZ1bmN0aW9uKGVlLEope2Zvcih2YXIgbmU9MDtuZTxlZS5sZW5ndGg7bmUrPTEpaWYoZWVbbmVdPT09SilyZXR1cm4gbmU7cmV0dXJuLTF9LFU9e19fcHJvdG9fXzpudWxsfTtJKHosRiYmdyYmTD9mdW5jdGlv''@;'; put 'put ''bihxKXt2YXIgZWU9bmV3IE9bcV07aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGVlKXt2YXIgSj1MKGVlKSxuZT13KEosU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighbmUpe3ZhciBpZT1MKEopO25lPXcoaWUsU3ltYm9sLnRvU3RyaW5nVGFnKX1VWyIkIitxXT1nKG5lLmdldCl9fTpmdW5jdGlv''@;'; put 'put ''bihxKXt2YXIgZWU9bmV3IE9bcV0sSj1lZS5zbGljZXx8ZWUuc2V0O0omJihVWyIkIitxXT1nKEopKX0pLHVlLmV4cG9ydHM9ZnVuY3Rpb24oZWUpe2lmKCFlZXx8Im9iamVjdCIhPXR5cGVvZiBlZSlyZXR1cm4hMTtpZighRil7dmFyIEo9TihQKGVlKSw4LC0xKTtyZXR1cm4gSyh6LEopPi0x''@;'; put 'put ''P0o6Ik9iamVjdCI9PT1KJiZmdW5jdGlvbihlZSl7dmFyIEo9ITE7cmV0dXJuIEkoVSxmdW5jdGlvbihuZSxpZSl7aWYoIUopdHJ5e25lKGVlKSxKPU4oaWUsMSl9Y2F0Y2h7fX0pLEp9KGVlKX1yZXR1cm4gdz9mdW5jdGlvbihlZSl7dmFyIEo9ITE7cmV0dXJuIEkoVSxmdW5jdGlvbihuZSxp''@;'; put 'put ''ZSl7aWYoIUopdHJ5eyIkIituZShlZSk9PT1pZSYmKEo9TihpZSwxKSl9Y2F0Y2h7fX0pLEp9KGVlKTpudWxsfX0sODY0NjooKT0+e30sOTUwOigpPT57fSw2NjAxOigpPT57fSw5MjE0OigpPT57fSw2NDE5OigpPT57fSw2MzUzOigpPT57fSw4NjIzOigpPT57fSw3NzQ4OigpPT57fSw1NTY4''@;'; put 'put ''OigpPT57fSw1NDQzOigpPT57fSw0MTI5OigpPT57fSw2NjE5OigpPT57fSw3MTA4OigpPT57fSwyMzYxOigpPT57fSw0NjE2OigpPT57fSw4MzczOigpPT57fSwzMDgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTkwOCksXz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/eS5nOmds''@;'; put 'put ''b2JhbFRoaXM7dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgQj1bXSx3PTA7dzxJLmxlbmd0aDt3KyspImZ1bmN0aW9uIj09dHlwZW9mIF9bSVt3XV0mJihCW0IubGVuZ3RoXT1JW3ddKTtyZXR1cm4gQn19LDcyMTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0MTU1KSxf''@;'; put 'put ''PXkoODc2NCkuQnVmZmVyLGc9eSg1MTA4KTtmdW5jdGlvbiBCKFN0LEJ0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU3QuYXBwbHkoQnQsYXJndW1lbnRzKX19Y29uc3R7dG9TdHJpbmc6d309T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6UH09T2JqZWN0LEY9KFN0PT5CdD0+''@;'; put 'put ''e2NvbnN0IF9uPXcuY2FsbChCdCk7cmV0dXJuIFN0W19uXXx8KFN0W19uXT1fbi5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE89U3Q9PihTdD1TdC50b0xvd2VyQ2FzZSgpLEJ0PT5GKEJ0KT09PVN0KSx6PVN0PT5CdD0+dHlwZW9mIEJ0PT09U3Qs''@;'; put 'put ''e2lzQXJyYXk6Tn09QXJyYXksTD16KCJ1bmRlZmluZWQiKSxVPU8oIkFycmF5QnVmZmVyIiksWT16KCJzdHJpbmciKSxxPXooImZ1bmN0aW9uIiksZWU9eigibnVtYmVyIiksSj1TdD0+bnVsbCE9PVN0JiYib2JqZWN0Ij09dHlwZW9mIFN0LGllPVN0PT57aWYoIm9iamVjdCIhPT1GKFN0KSly''@;'; put 'put ''ZXR1cm4hMTtjb25zdCBCdD1QKFN0KTtyZXR1cm4hKG51bGwhPT1CdCYmQnQhPT1PYmplY3QucHJvdG90eXBlJiZudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKEJ0KXx8U3ltYm9sLnRvU3RyaW5nVGFnIGluIFN0fHxTeW1ib2wuaXRlcmF0b3IgaW4gU3QpfSxsZT1PKCJEYXRlIiksbWU9''@;'; put 'put ''TygiRmlsZSIpLF9lPU8oIkJsb2IiKSxUZT1PKCJGaWxlTGlzdCIpLFY9TygiVVJMU2VhcmNoUGFyYW1zIiksW3AsYix4LENdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKE8pO2Z1bmN0aW9uIEgoU3QsQnQse2FsbE93bktleXM6X249ITF9''@;'; put 'put ''PXt9KXtpZihudWxsPT09U3R8fHR5cGVvZiBTdD4idSIpcmV0dXJuO2xldCBtbixJbjtpZigib2JqZWN0IiE9dHlwZW9mIFN0JiYoU3Q9W1N0XSksTihTdCkpZm9yKG1uPTAsSW49U3QubGVuZ3RoO21uPEluO21uKyspQnQuY2FsbChudWxsLFN0W21uXSxtbixTdCk7ZWxzZXtjb25zdCBibj1f''@;'; put 'put ''bj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTdCk6T2JqZWN0LmtleXMoU3QpLHVyPWJuLmxlbmd0aDtsZXQgYmk7Zm9yKG1uPTA7bW48dXI7bW4rKyliaT1iblttbl0sQnQuY2FsbChudWxsLFN0W2JpXSxiaSxTdCl9fWZ1bmN0aW9uIGooU3QsQnQpe0J0PUJ0LnRvTG93ZXJDYXNlKCk7''@;'; put 'put ''Y29uc3QgX249T2JqZWN0LmtleXMoU3QpO2xldCBJbixtbj1fbi5sZW5ndGg7Zm9yKDttbi0tID4wOylpZihJbj1fblttbl0sQnQ9PT1Jbi50b0xvd2VyQ2FzZSgpKXJldHVybiBJbjtyZXR1cm4gbnVsbH1jb25zdCBFPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBz''@;'; put 'put ''ZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp5LmcsbT1TdD0+IUwoU3QpJiZTdCE9PUUsb3Q9KFN0PT5CdD0+U3QmJkJ0IGluc3RhbmNlb2YgU3QpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUChVaW50OEFycmF5KSksWGU9TygiSFRNTEZvcm1FbGVtZW50IiksRGU9KCh7''@;'; put 'put ''aGFzT3duUHJvcGVydHk6U3R9KT0+KEJ0LF9uKT0+U3QuY2FsbChCdCxfbikpKE9iamVjdC5wcm90b3R5cGUpLEZlPU8oIlJlZ0V4cCIpLFJlPShTdCxCdCk9Pntjb25zdCBfbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhTdCksbW49e307SChfbiwoSW4sYm4pPT57bGV0IHVy''@;'; put 'put ''OyExIT09KHVyPUJ0KEluLGJuLFN0KSkmJihtbltibl09dXJ8fEluKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFN0LG1uKX0sUWU9TygiQXN5bmNGdW5jdGlvbiIpLHl0PShTdD0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlLEJ0PXEoRS5wb3N0TWVzc2FnZSksU3Q/c2V0SW1t''@;'; put 'put ''ZWRpYXRlOkJ0Pyhfbj1gYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsbW49W10sRS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe3NvdXJjZTpJbixkYXRhOmJufSk9PntJbj09PUUmJmJuPT09X24mJm1uLmxlbmd0aCYmbW4uc2hpZnQoKSgpfSwhMSksSW49Pnttbi5wdXNoKEluKSxFLnBv''@;'; put 'put ''c3RNZXNzYWdlKF9uLCIqIil9KTpfbj0+c2V0VGltZW91dChfbikpLE10PXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZChFKTp0eXBlb2YgSTwidSImJkkubmV4dFRpY2t8fHl0O3ZhciBTdCxCdCxfbixtbixEdD17aXNBcnJheTpOLGlzQXJyYXlCdWZmZXI6''@;'; put 'put ''VSxpc0J1ZmZlcjpmdW5jdGlvbiBLKFN0KXtyZXR1cm4gbnVsbCE9PVN0JiYhTChTdCkmJm51bGwhPT1TdC5jb25zdHJ1Y3RvciYmIUwoU3QuY29uc3RydWN0b3IpJiZxKFN0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmU3QuY29uc3RydWN0b3IuaXNCdWZmZXIoU3QpfSxpc0Zvcm1EYXRhOlN0''@;'; put 'put ''PT57bGV0IEJ0O3JldHVybiBTdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGb3JtRGF0YSYmU3QgaW5zdGFuY2VvZiBGb3JtRGF0YXx8cShTdC5hcHBlbmQpJiYoImZvcm1kYXRhIj09PShCdD1GKFN0KSl8fCJvYmplY3QiPT09QnQmJnEoU3QudG9TdHJpbmcpJiYiW29iamVjdCBGb3JtRGF0YV0i''@;'; put 'put ''PT09U3QudG9TdHJpbmcoKSkpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbiBXKFN0KXtsZXQgQnQ7cmV0dXJuIEJ0PXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoU3QpOlN0JiZTdC5idWZmZXImJlUoU3QuYnVmZmVyKSxC''@;'; put 'put ''dH0saXNTdHJpbmc6WSxpc051bWJlcjplZSxpc0Jvb2xlYW46U3Q9PiEwPT09U3R8fCExPT09U3QsaXNPYmplY3Q6Sixpc1BsYWluT2JqZWN0OmllLGlzUmVhZGFibGVTdHJlYW06cCxpc1JlcXVlc3Q6Yixpc1Jlc3BvbnNlOngsaXNIZWFkZXJzOkMsaXNVbmRlZmluZWQ6TCxpc0RhdGU6bGUs''@;'; put 'put ''aXNGaWxlOm1lLGlzQmxvYjpfZSxpc1JlZ0V4cDpGZSxpc0Z1bmN0aW9uOnEsaXNTdHJlYW06U3Q9PkooU3QpJiZxKFN0LnBpcGUpLGlzVVJMU2VhcmNoUGFyYW1zOlYsaXNUeXBlZEFycmF5Om90LGlzRmlsZUxpc3Q6VGUsZm9yRWFjaDpILG1lcmdlOmZ1bmN0aW9uIEEoKXtjb25zdHtjYXNl''@;'; put 'put ''bGVzczpTdH09bSh0aGlzKSYmdGhpc3x8e30sQnQ9e30sX249KG1uLEluKT0+e2NvbnN0IGJuPVN0JiZqKEJ0LEluKXx8SW47QnRbYm5dPWllKEJ0W2JuXSkmJmllKG1uKT9BKEJ0W2JuXSxtbik6aWUobW4pP0Eoe30sbW4pOk4obW4pP21uLnNsaWNlKCk6bW59O2ZvcihsZXQgbW49MCxJbj1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoO21uPEluO21uKyspYXJndW1lbnRzW21uXSYmSChhcmd1bWVudHNbbW5dLF9uKTtyZXR1cm4gQnR9LGV4dGVuZDooU3QsQnQsX24se2FsbE93bktleXM6bW59PXt9KT0+KEgoQnQsKEluLGJuKT0+e1N0W2JuXT1fbiYmcShJbik/QihJbixfbik6SW59LHthbGxPd25L''@;'; put 'put ''ZXlzOm1ufSksU3QpLHRyaW06U3Q9PlN0LnRyaW0/U3QudHJpbSgpOlN0LnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSxzdHJpcEJPTTpTdD0+KDY1Mjc5PT09U3QuY2hhckNvZGVBdCgwKSYmKFN0PVN0LnNsaWNlKDEpKSxTdCksaW5oZXJpdHM6KFN0''@;'; put 'put ''LEJ0LF9uLG1uKT0+e1N0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEJ0LnByb3RvdHlwZSxtbiksU3QucHJvdG90eXBlLmNvbnN0cnVjdG9yPVN0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCwic3VwZXIiLHt2YWx1ZTpCdC5wcm90b3R5cGV9KSxfbiYmT2JqZWN0LmFzc2lnbihTdC5wcm90''@;'; put 'put ''b3R5cGUsX24pfSx0b0ZsYXRPYmplY3Q6KFN0LEJ0LF9uLG1uKT0+e2xldCBJbixibix1cjtjb25zdCBiaT17fTtpZihCdD1CdHx8e30sbnVsbD09U3QpcmV0dXJuIEJ0O2Rve2ZvcihJbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTdCksYm49SW4ubGVuZ3RoO2JuLS0gPjA7KXVyPUlu''@;'; put 'put ''W2JuXSwoIW1ufHxtbih1cixTdCxCdCkpJiYhYmlbdXJdJiYoQnRbdXJdPVN0W3VyXSxiaVt1cl09ITApO1N0PSExIT09X24mJlAoU3QpfXdoaWxlKFN0JiYoIV9ufHxfbihTdCxCdCkpJiZTdCE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBCdH0sa2luZE9mOkYsa2luZE9mVGVzdDpPLGVu''@;'; put 'put ''ZHNXaXRoOihTdCxCdCxfbik9PntTdD1TdHJpbmcoU3QpLCh2b2lkIDA9PT1fbnx8X24+U3QubGVuZ3RoKSYmKF9uPVN0Lmxlbmd0aCk7Y29uc3QgbW49U3QuaW5kZXhPZihCdCxfbi09QnQubGVuZ3RoKTtyZXR1cm4tMSE9PW1uJiZtbj09PV9ufSx0b0FycmF5OlN0PT57aWYoIVN0KXJldHVy''@;'; put 'put ''biBudWxsO2lmKE4oU3QpKXJldHVybiBTdDtsZXQgQnQ9U3QubGVuZ3RoO2lmKCFlZShCdCkpcmV0dXJuIG51bGw7Y29uc3QgX249bmV3IEFycmF5KEJ0KTtmb3IoO0J0LS0gPjA7KV9uW0J0XT1TdFtCdF07cmV0dXJuIF9ufSxmb3JFYWNoRW50cnk6KFN0LEJ0KT0+e2NvbnN0IG1uPShTdCYm''@;'; put 'put ''U3RbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChTdCk7bGV0IEluO2Zvcig7KEluPW1uLm5leHQoKSkmJiFJbi5kb25lOyl7Y29uc3QgYm49SW4udmFsdWU7QnQuY2FsbChTdCxiblswXSxiblsxXSl9fSxtYXRjaEFsbDooU3QsQnQpPT57bGV0IF9uO2NvbnN0IG1uPVtdO2Zvcig7bnVsbCE9PShf''@;'; put 'put ''bj1TdC5leGVjKEJ0KSk7KW1uLnB1c2goX24pO3JldHVybiBtbn0saXNIVE1MRm9ybTpYZSxoYXNPd25Qcm9wZXJ0eTpEZSxoYXNPd25Qcm9wOkRlLHJlZHVjZURlc2NyaXB0b3JzOlJlLGZyZWV6ZU1ldGhvZHM6U3Q9PntSZShTdCwoQnQsX24pPT57aWYocShTdCkmJi0xIT09WyJhcmd1bWVu''@;'; put 'put ''dHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKF9uKSlyZXR1cm4hMTtpZihxKFN0W19uXSkpe2lmKEJ0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEJ0KXJldHVybiB2b2lkKEJ0LndyaXRhYmxlPSExKTtCdC5zZXR8fChCdC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCBy''@;'; put 'put ''ZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrX24rIiciKX0pfX0pfSx0b09iamVjdFNldDooU3QsQnQpPT57Y29uc3QgX249e30sbW49SW49PntJbi5mb3JFYWNoKGJuPT57X25bYm5dPSEwfSl9O3JldHVybiBOKFN0KT9tbihTdCk6bW4oU3RyaW5nKFN0KS5zcGxpdChCdCkpLF9ufSx0b0Nh''@;'; put 'put ''bWVsQ2FzZTpTdD0+U3QudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKF9uLG1uLEluKXtyZXR1cm4gbW4udG9VcHBlckNhc2UoKStJbn0pLG5vb3A6KCk9Pnt9LHRvRmluaXRlTnVtYmVyOihTdCxCdCk9Pm51bGwhPVN0JiZOdW1iZXIuaXNG''@;'; put 'put ''aW5pdGUoU3Q9K1N0KT9TdDpCdCxmaW5kS2V5OmosZ2xvYmFsOkUsaXNDb250ZXh0RGVmaW5lZDptLGlzU3BlY0NvbXBsaWFudEZvcm06ZnVuY3Rpb24gX3QoU3Qpe3JldHVybiEhKFN0JiZxKFN0LmFwcGVuZCkmJiJGb3JtRGF0YSI9PT1TdFtTeW1ib2wudG9TdHJpbmdUYWddJiZTdFtTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3JdKX0sdG9KU09OT2JqZWN0OlN0PT57Y29uc3QgQnQ9bmV3IEFycmF5KDEwKSxfbj0obW4sSW4pPT57aWYoSihtbikpe2lmKEJ0LmluZGV4T2YobW4pPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gbW4pKXtCdFtJbl09bW47Y29uc3QgYm49Tihtbik/W106e307cmV0dXJu''@;'; put 'put ''IEgobW4sKHVyLGJpKT0+e2NvbnN0IEZyPV9uKHVyLEluKzEpOyFMKEZyKSYmKGJuW2JpXT1Gcil9KSxCdFtJbl09dm9pZCAwLGJufX1yZXR1cm4gbW59O3JldHVybiBfbihTdCwwKX0saXNBc3luY0ZuOlFlLGlzVGhlbmFibGU6U3Q9PlN0JiYoSihTdCl8fHEoU3QpKSYmcShTdC50aGVuKSYm''@;'; put 'put ''cShTdC5jYXRjaCksc2V0SW1tZWRpYXRlOnl0LGFzYXA6TXR9O2Z1bmN0aW9uIGl0KFN0LEJ0LF9uLG1uLEluKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz0o''@;'; put 'put ''bmV3IEVycm9yKS5zdGFjayx0aGlzLm1lc3NhZ2U9U3QsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixCdCYmKHRoaXMuY29kZT1CdCksX24mJih0aGlzLmNvbmZpZz1fbiksbW4mJih0aGlzLnJlcXVlc3Q9bW4pLEluJiYodGhpcy5yZXNwb25zZT1Jbix0aGlzLnN0YXR1cz1Jbi5zdGF0dXM/SW4u''@;'; put 'put ''c3RhdHVzOm51bGwpfUR0LmluaGVyaXRzKGl0LEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFt''@;'; put 'put ''ZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6RHQudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5zdGF0dXN9fX0pO2NvbnN0ICRlPWl0LnBy''@;'; put 'put ''b3RvdHlwZSx0dD17fTtmdW5jdGlvbiB1dChTdCl7cmV0dXJuIER0LmlzUGxhaW5PYmplY3QoU3QpfHxEdC5pc0FycmF5KFN0KX1mdW5jdGlvbiBxdChTdCl7cmV0dXJuIER0LmVuZHNXaXRoKFN0LCJbXSIpP1N0LnNsaWNlKDAsLTIpOlN0fWZ1bmN0aW9uIFJ0KFN0LEJ0LF9uKXtyZXR1cm4g''@;'; put 'put ''U3Q/U3QuY29uY2F0KEJ0KS5tYXAoZnVuY3Rpb24oSW4sYm4pe3JldHVybiBJbj1xdChJbiksIV9uJiZibj8iWyIrSW4rIl0iOklufSkuam9pbihfbj8iLiI6IiIpOkJ0fVsiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIs''@;'; put 'put ''IkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goU3Q9Pnt0dFtT''@;'; put 'put ''dF09e3ZhbHVlOlN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGl0LHR0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoJGUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSksaXQuZnJvbT0oU3QsQnQsX24sbW4sSW4sYm4pPT57Y29uc3QgdXI9T2JqZWN0LmNyZWF0ZSgkZSk7cmV0dXJuIER0''@;'; put 'put ''LnRvRmxhdE9iamVjdChTdCx1cixmdW5jdGlvbihGcil7cmV0dXJuIEZyIT09RXJyb3IucHJvdG90eXBlfSxiaT0+ImlzQXhpb3NFcnJvciIhPT1iaSksaXQuY2FsbCh1cixTdC5tZXNzYWdlLEJ0LF9uLG1uLEluKSx1ci5jYXVzZT1TdCx1ci5uYW1lPVN0Lm5hbWUsYm4mJk9iamVjdC5hc3Np''@;'; put 'put ''Z24odXIsYm4pLHVyfTtjb25zdCBzaT1EdC50b0ZsYXRPYmplY3QoRHQse30sbnVsbCxmdW5jdGlvbihCdCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEJ0KX0pO2Z1bmN0aW9uIFF0KFN0LEJ0LF9uKXtpZighRHQuaXNPYmplY3QoU3QpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0''@;'; put 'put ''IGJlIGFuIG9iamVjdCIpO0J0PUJ0fHxuZXcgRm9ybURhdGE7Y29uc3QgbW49KF9uPUR0LnRvRmxhdE9iamVjdChfbix7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKF9vLGppKXtyZXR1cm4hRHQuaXNVbmRlZmluZWQoamlbX29dKX0pKS5tZXRhVG9rZW5z''@;'; put 'put ''LEluPV9uLnZpc2l0b3J8fG9hLGJuPV9uLmRvdHMsdXI9X24uaW5kZXhlcyxGcj0oX24uQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmRHQuaXNTcGVjQ29tcGxpYW50Rm9ybShCdCk7aWYoIUR0LmlzRnVuY3Rpb24oSW4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBi''@;'; put 'put ''ZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gdGEodG8pe2lmKG51bGw9PT10bylyZXR1cm4iIjtpZihEdC5pc0RhdGUodG8pKXJldHVybiB0by50b0lTT1N0cmluZygpO2lmKCFGciYmRHQuaXNCbG9iKHRvKSl0aHJvdyBuZXcgaXQoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVy''@;'; put 'put ''IGluc3RlYWQuIik7cmV0dXJuIER0LmlzQXJyYXlCdWZmZXIodG8pfHxEdC5pc1R5cGVkQXJyYXkodG8pP0ZyJiYiZnVuY3Rpb24iPT10eXBlb2YgQmxvYj9uZXcgQmxvYihbdG9dKTpfLmZyb20odG8pOnRvfWZ1bmN0aW9uIG9hKHRvLF9vLGppKXtsZXQgUGM9dG87aWYodG8mJiFqaSYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiB0bylpZihEdC5lbmRzV2l0aChfbywie30iKSlfbz1tbj9fbzpfby5zbGljZSgwLC0yKSx0bz1KU09OLnN0cmluZ2lmeSh0byk7ZWxzZSBpZihEdC5pc0FycmF5KHRvKSYmZnVuY3Rpb24gUHQoU3Qpe3JldHVybiBEdC5pc0FycmF5KFN0KSYmIVN0LnNvbWUodXQpfSh0''@;'; put 'put ''byl8fChEdC5pc0ZpbGVMaXN0KHRvKXx8RHQuZW5kc1dpdGgoX28sIltdIikpJiYoUGM9RHQudG9BcnJheSh0bykpKXJldHVybiBfbz1xdChfbyksUGMuZm9yRWFjaChmdW5jdGlvbihDYSxUYSl7IUR0LmlzVW5kZWZpbmVkKENhKSYmbnVsbCE9PUNhJiZCdC5hcHBlbmQoITA9PT11cj9SdChb''@;'; put 'put ''X29dLFRhLGJuKTpudWxsPT09dXI/X286X28rIltdIix0YShDYSkpfSksITE7cmV0dXJuISF1dCh0byl8fChCdC5hcHBlbmQoUnQoamksX28sYm4pLHRhKHRvKSksITEpfWNvbnN0IFZhPVtdLCRvPU9iamVjdC5hc3NpZ24oc2kse2RlZmF1bHRWaXNpdG9yOm9hLGNvbnZlcnRWYWx1ZTp0YSxp''@;'; put 'put ''c1Zpc2l0YWJsZTp1dH0pO2lmKCFEdC5pc09iamVjdChTdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBmdW5jdGlvbiBYbCh0byxfbyl7aWYoIUR0LmlzVW5kZWZpbmVkKHRvKSl7aWYoLTEhPT1WYS5pbmRleE9mKHRvKSl0aHJvdyBFcnJv''@;'; put 'put ''cigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrX28uam9pbigiLiIpKTtWYS5wdXNoKHRvKSxEdC5mb3JFYWNoKHRvLGZ1bmN0aW9uKFBjLHpsKXshMD09PSghKER0LmlzVW5kZWZpbmVkKFBjKXx8bnVsbD09PVBjKSYmSW4uY2FsbChCdCxQYyxEdC5pc1N0cmluZyh6bCk/emwu''@;'; put 'put ''dHJpbSgpOnpsLF9vLCRvKSkmJlhsKFBjLF9vP19vLmNvbmNhdCh6bCk6W3psXSl9KSxWYS5wb3AoKX19KFN0KSxCdH1mdW5jdGlvbiBzbihTdCl7Y29uc3QgQnQ9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9''@;'; put 'put ''O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoU3QpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKG1uKXtyZXR1cm4gQnRbbW5dfSl9ZnVuY3Rpb24gUmkoU3QsQnQpe3RoaXMuX3BhaXJzPVtdLFN0JiZRdChTdCx0aGlzLEJ0KX1jb25zdCBobj1SaS5wcm90b3R5cGU7ZnVu''@;'; put 'put ''Y3Rpb24gZnQoU3Qpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoU3QpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0i''@;'; put 'put ''KX1mdW5jdGlvbiBPcihTdCxCdCxfbil7aWYoIUJ0KXJldHVybiBTdDtjb25zdCBtbj1fbiYmX24uZW5jb2RlfHxmdDtEdC5pc0Z1bmN0aW9uKF9uKSYmKF9uPXtzZXJpYWxpemU6X259KTtjb25zdCBJbj1fbiYmX24uc2VyaWFsaXplO2xldCBibjtpZihibj1Jbj9JbihCdCxfbik6RHQuaXNV''@;'; put 'put ''UkxTZWFyY2hQYXJhbXMoQnQpP0J0LnRvU3RyaW5nKCk6bmV3IFJpKEJ0LF9uKS50b1N0cmluZyhtbiksYm4pe2NvbnN0IHVyPVN0LmluZGV4T2YoIiMiKTstMSE9PXVyJiYoU3Q9U3Quc2xpY2UoMCx1cikpLFN0Kz0oLTE9PT1TdC5pbmRleE9mKCI/Iik/Ij8iOiImIikrYm59cmV0dXJuIFN0''@;'; put 'put ''fWhuLmFwcGVuZD1mdW5jdGlvbihCdCxfbil7dGhpcy5fcGFpcnMucHVzaChbQnQsX25dKX0saG4udG9TdHJpbmc9ZnVuY3Rpb24oQnQpe2NvbnN0IF9uPUJ0P2Z1bmN0aW9uKG1uKXtyZXR1cm4gQnQuY2FsbCh0aGlzLG1uLHNuKX06c247cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlv''@;'; put 'put ''bihJbil7cmV0dXJuIF9uKEluWzBdKSsiPSIrX24oSW5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgQXQ9Y2xhc3MgV3R7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShCdCxfbixtbil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkJ0LHJlamVjdGVkOl9u''@;'; put 'put ''LHN5bmNocm9ub3VzOiEhbW4mJm1uLnN5bmNocm9ub3VzLHJ1bldoZW46bW4/bW4ucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChCdCl7dGhpcy5oYW5kbGVyc1tCdF0mJih0aGlzLmhhbmRsZXJzW0J0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0''@;'; put 'put ''aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEJ0KXtEdC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24obW4pe251bGwhPT1tbiYmQnQobW4pfSl9fSxSbj17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sV2U9e2lz''@;'; put 'put ''QnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOlJpLEZvcm1EYXRhOnR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbCxCbG9iOnR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGx9LHByb3RvY29s''@;'; put 'put ''czpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTtjb25zdCBUdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixucj0ib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yfHx2b2lkIDAsaHQ9VHQmJighbnJ8fFsiUmVhY3RO''@;'; put 'put ''YXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YobnIucHJvZHVjdCk8MCkseHQ9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzLGpuPVR0JiZ3''@;'; put 'put ''aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciB6dD17Li4uT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaGFzQnJvd3NlckVudjpUdCxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6eHQsaGFzU3RhbmRhcmRCcm93c2VyRW52Omh0LG5hdmlnYXRv''@;'; put 'put ''cjpucixvcmlnaW46am59KSwuLi5XZX07ZnVuY3Rpb24gSWkoU3Qpe2Z1bmN0aW9uIEJ0KF9uLG1uLEluLGJuKXtsZXQgdXI9X25bYm4rK107aWYoIl9fcHJvdG9fXyI9PT11cilyZXR1cm4hMDtjb25zdCBiaT1OdW1iZXIuaXNGaW5pdGUoK3VyKSxGcj1ibj49X24ubGVuZ3RoO3JldHVybiB1''@;'; put 'put ''cj0hdXImJkR0LmlzQXJyYXkoSW4pP0luLmxlbmd0aDp1cixGcj8oSW5bdXJdPUR0Lmhhc093blByb3AoSW4sdXIpP1tJblt1cl0sbW5dOm1uLCFiaSk6KCghSW5bdXJdfHwhRHQuaXNPYmplY3QoSW5bdXJdKSkmJihJblt1cl09W10pLEJ0KF9uLG1uLEluW3VyXSxibikmJkR0LmlzQXJyYXko''@;'; put 'put ''SW5bdXJdKSYmKEluW3VyXT1mdW5jdGlvbiBmbihTdCl7Y29uc3QgQnQ9e30sX249T2JqZWN0LmtleXMoU3QpO2xldCBtbjtjb25zdCBJbj1fbi5sZW5ndGg7bGV0IGJuO2Zvcihtbj0wO21uPEluO21uKyspYm49X25bbW5dLEJ0W2JuXT1TdFtibl07cmV0dXJuIEJ0fShJblt1cl0pKSwhYmkp''@;'; put 'put ''fWlmKER0LmlzRm9ybURhdGEoU3QpJiZEdC5pc0Z1bmN0aW9uKFN0LmVudHJpZXMpKXtjb25zdCBfbj17fTtyZXR1cm4gRHQuZm9yRWFjaEVudHJ5KFN0LChtbixJbik9PntCdChmdW5jdGlvbiBjbihTdCl7cmV0dXJuIER0Lm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxTdCkubWFwKEJ0PT4i''@;'; put 'put ''W10iPT09QnRbMF0/IiI6QnRbMV18fEJ0WzBdKX0obW4pLEluLF9uLDApfSksX259cmV0dXJuIG51bGx9Y29uc3QgZW49e3RyYW5zaXRpb25hbDpSbixhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oQnQsX24pe2NvbnN0IG1uPV9uLmdl''@;'; put 'put ''dENvbnRlbnRUeXBlKCl8fCIiLEluPW1uLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxibj1EdC5pc09iamVjdChCdCk7aWYoYm4mJkR0LmlzSFRNTEZvcm0oQnQpJiYoQnQ9bmV3IEZvcm1EYXRhKEJ0KSksRHQuaXNGb3JtRGF0YShCdCkpcmV0dXJuIEluP0pTT04uc3RyaW5naWZ5''@;'; put 'put ''KElpKEJ0KSk6QnQ7aWYoRHQuaXNBcnJheUJ1ZmZlcihCdCl8fER0LmlzQnVmZmVyKEJ0KXx8RHQuaXNTdHJlYW0oQnQpfHxEdC5pc0ZpbGUoQnQpfHxEdC5pc0Jsb2IoQnQpfHxEdC5pc1JlYWRhYmxlU3RyZWFtKEJ0KSlyZXR1cm4gQnQ7aWYoRHQuaXNBcnJheUJ1ZmZlclZpZXcoQnQpKXJl''@;'; put 'put ''dHVybiBCdC5idWZmZXI7aWYoRHQuaXNVUkxTZWFyY2hQYXJhbXMoQnQpKXJldHVybiBfbi5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxCdC50b1N0cmluZygpO2xldCBiaTtpZihibil7aWYobW4uaW5kZXhPZigi''@;'; put 'put ''YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGZ1bmN0aW9uIGhpKFN0LEJ0KXtyZXR1cm4gUXQoU3QsbmV3IHp0LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oX24sbW4sSW4sYm4pe3JldHVybiB6dC5p''@;'; put 'put ''c05vZGUmJkR0LmlzQnVmZmVyKF9uKT8odGhpcy5hcHBlbmQobW4sX24udG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6Ym4uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQnQpKX0oQnQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoYmk9RHQuaXNGaWxl''@;'; put 'put ''TGlzdChCdCkpfHxtbi5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2NvbnN0IEZyPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUXQoYmk/eyJmaWxlc1tdIjpCdH06QnQsRnImJm5ldyBGcix0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGJufHxJbj8o''@;'; put 'put ''X24uc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxmdW5jdGlvbiBYdChTdCxCdCxfbil7aWYoRHQuaXNTdHJpbmcoU3QpKXRyeXtyZXR1cm4oQnR8fEpTT04ucGFyc2UpKFN0KSxEdC50cmltKFN0KX1jYXRjaChtbil7aWYoIlN5bnRheEVycm9yIiE9PW1uLm5hbWUpdGhy''@;'; put 'put ''b3cgbW59cmV0dXJuKF9ufHxKU09OLnN0cmluZ2lmeSkoU3QpfShCdCkpOkJ0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEJ0KXtjb25zdCBfbj10aGlzLnRyYW5zaXRpb25hbHx8ZW4udHJhbnNpdGlvbmFsLG1uPV9uJiZfbi5mb3JjZWRKU09OUGFyc2luZyxJbj0ianNvbiI9PT10''@;'; put 'put ''aGlzLnJlc3BvbnNlVHlwZTtpZihEdC5pc1Jlc3BvbnNlKEJ0KXx8RHQuaXNSZWFkYWJsZVN0cmVhbShCdCkpcmV0dXJuIEJ0O2lmKEJ0JiZEdC5pc1N0cmluZyhCdCkmJihtbiYmIXRoaXMucmVzcG9uc2VUeXBlfHxJbikpe2NvbnN0IHVyPSEoX24mJl9uLnNpbGVudEpTT05QYXJzaW5nKSYm''@;'; put 'put ''SW47dHJ5e3JldHVybiBKU09OLnBhcnNlKEJ0KX1jYXRjaChiaSl7aWYodXIpdGhyb3ciU3ludGF4RXJyb3IiPT09YmkubmFtZT9pdC5mcm9tKGJpLGl0LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmJpfX1yZXR1cm4gQnR9XSx0aW1lb3V0OjAseHNyZkNvb2tp''@;'; put 'put ''ZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOnp0LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp6dC5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9u''@;'; put 'put ''KEJ0KXtyZXR1cm4gQnQ+PTIwMCYmQnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07RHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0''@;'; put 'put ''Y2giXSxTdD0+e2VuLmhlYWRlcnNbU3RdPXt9fSk7dmFyIHVhPWVuO2NvbnN0IEVpPUR0LnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNp''@;'; put 'put ''bmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFduPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gJGko''@;'; put 'put ''U3Qpe3JldHVybiBTdCYmU3RyaW5nKFN0KS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBlaShTdCl7cmV0dXJuITE9PT1TdHx8bnVsbD09U3Q/U3Q6RHQuaXNBcnJheShTdCk/U3QubWFwKGVpKTpTdHJpbmcoU3QpfWZ1bmN0aW9uIE5pKFN0LEJ0LF9uLG1uLEluKXtpZihEdC5pc0Z1''@;'; put 'put ''bmN0aW9uKG1uKSlyZXR1cm4gbW4uY2FsbCh0aGlzLEJ0LF9uKTtpZihJbiYmKEJ0PV9uKSxEdC5pc1N0cmluZyhCdCkpe2lmKER0LmlzU3RyaW5nKG1uKSlyZXR1cm4tMSE9PUJ0LmluZGV4T2YobW4pO2lmKER0LmlzUmVnRXhwKG1uKSlyZXR1cm4gbW4udGVzdChCdCl9fWNsYXNzIFdpe2Nv''@;'; put 'put ''bnN0cnVjdG9yKEJ0KXtCdCYmdGhpcy5zZXQoQnQpfXNldChCdCxfbixtbil7Y29uc3QgSW49dGhpcztmdW5jdGlvbiBibihiaSxGcix0YSl7Y29uc3Qgb2E9JGkoRnIpO2lmKCFvYSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7Y29u''@;'; put 'put ''c3QgVmE9RHQuZmluZEtleShJbixvYSk7KCFWYXx8dm9pZCAwPT09SW5bVmFdfHwhMD09PXRhfHx2b2lkIDA9PT10YSYmITEhPT1JbltWYV0pJiYoSW5bVmF8fEZyXT1laShiaSkpfWNvbnN0IHVyPShiaSxGcik9PkR0LmZvckVhY2goYmksKHRhLG9hKT0+Ym4odGEsb2EsRnIpKTtpZihEdC5p''@;'; put 'put ''c1BsYWluT2JqZWN0KEJ0KXx8QnQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKXVyKEJ0LF9uKTtlbHNlIGlmKER0LmlzU3RyaW5nKEJ0KSYmKEJ0PUJ0LnRyaW0oKSkmJiEoU3Q9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoU3QudHJpbSgpKSkoQnQpKXVyKChT''@;'; put 'put ''dD0+e2NvbnN0IEJ0PXt9O2xldCBfbixtbixJbjtyZXR1cm4gU3QmJlN0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24odXIpe0luPXVyLmluZGV4T2YoIjoiKSxfbj11ci5zdWJzdHJpbmcoMCxJbikudHJpbSgpLnRvTG93ZXJDYXNlKCksbW49dXIuc3Vic3RyaW5nKEluKzEpLnRyaW0o''@;'; put 'put ''KSwhKCFfbnx8QnRbX25dJiZFaVtfbl0pJiYoInNldC1jb29raWUiPT09X24/QnRbX25dP0J0W19uXS5wdXNoKG1uKTpCdFtfbl09W21uXTpCdFtfbl09QnRbX25dP0J0W19uXSsiLCAiK21uOm1uKX0pLEJ0fSkoQnQpLF9uKTtlbHNlIGlmKER0LmlzSGVhZGVycyhCdCkpZm9yKGNvbnN0W2Jp''@;'; put 'put ''LEZyXW9mIEJ0LmVudHJpZXMoKSlibihGcixiaSxtbik7ZWxzZSBudWxsIT1CdCYmYm4oX24sQnQsbW4pO3JldHVybiB0aGlzfWdldChCdCxfbil7aWYoQnQ9JGkoQnQpKXtjb25zdCBtbj1EdC5maW5kS2V5KHRoaXMsQnQpO2lmKG1uKXtjb25zdCBJbj10aGlzW21uXTtpZighX24pcmV0dXJu''@;'; put 'put ''IEluO2lmKCEwPT09X24pcmV0dXJuIGZ1bmN0aW9uIFFyKFN0KXtjb25zdCBCdD1PYmplY3QuY3JlYXRlKG51bGwpLF9uPS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2c7bGV0IG1uO2Zvcig7bW49X24uZXhlYyhTdCk7KUJ0W21uWzFdXT1tblsyXTtyZXR1cm4gQnR9KEluKTtp''@;'; put 'put ''ZihEdC5pc0Z1bmN0aW9uKF9uKSlyZXR1cm4gX24uY2FsbCh0aGlzLEluLG1uKTtpZihEdC5pc1JlZ0V4cChfbikpcmV0dXJuIF9uLmV4ZWMoSW4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoQnQsX24pe2lmKEJ0''@;'; put 'put ''PSRpKEJ0KSl7Y29uc3QgbW49RHQuZmluZEtleSh0aGlzLEJ0KTtyZXR1cm4hKCFtbnx8dm9pZCAwPT09dGhpc1ttbl18fF9uJiYhTmkoMCx0aGlzW21uXSxtbixfbikpfXJldHVybiExfWRlbGV0ZShCdCxfbil7Y29uc3QgbW49dGhpcztsZXQgSW49ITE7ZnVuY3Rpb24gYm4odXIpe2lmKHVy''@;'; put 'put ''PSRpKHVyKSl7Y29uc3QgYmk9RHQuZmluZEtleShtbix1cik7YmkmJighX258fE5pKDAsbW5bYmldLGJpLF9uKSkmJihkZWxldGUgbW5bYmldLEluPSEwKX19cmV0dXJuIER0LmlzQXJyYXkoQnQpP0J0LmZvckVhY2goYm4pOmJuKEJ0KSxJbn1jbGVhcihCdCl7Y29uc3QgX249T2JqZWN0Lmtl''@;'; put 'put ''eXModGhpcyk7bGV0IG1uPV9uLmxlbmd0aCxJbj0hMTtmb3IoO21uLS07KXtjb25zdCBibj1fblttbl07KCFCdHx8TmkoMCx0aGlzW2JuXSxibixCdCwhMCkpJiYoZGVsZXRlIHRoaXNbYm5dLEluPSEwKX1yZXR1cm4gSW59bm9ybWFsaXplKEJ0KXtjb25zdCBfbj10aGlzLG1uPXt9O3JldHVy''@;'; put 'put ''biBEdC5mb3JFYWNoKHRoaXMsKEluLGJuKT0+e2NvbnN0IHVyPUR0LmZpbmRLZXkobW4sYm4pO2lmKHVyKXJldHVybiBfblt1cl09ZWkoSW4pLHZvaWQgZGVsZXRlIF9uW2JuXTtjb25zdCBiaT1CdD9mdW5jdGlvbiBEYShTdCl7cmV0dXJuIFN0LnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxh''@;'; put 'put ''Y2UoLyhbYS16XGRdKShcdyopL2csKEJ0LF9uLG1uKT0+X24udG9VcHBlckNhc2UoKSttbil9KGJuKTpTdHJpbmcoYm4pLnRyaW0oKTtiaSE9PWJuJiZkZWxldGUgX25bYm5dLF9uW2JpXT1laShJbiksbW5bYmldPSEwfSksdGhpc31jb25jYXQoLi4uQnQpe3JldHVybiB0aGlzLmNvbnN0cnVj''@;'; put 'put ''dG9yLmNvbmNhdCh0aGlzLC4uLkJ0KX10b0pTT04oQnQpe2NvbnN0IF9uPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIER0LmZvckVhY2godGhpcywobW4sSW4pPT57bnVsbCE9bW4mJiExIT09bW4mJihfbltJbl09QnQmJkR0LmlzQXJyYXkobW4pP21uLmpvaW4oIiwgIik6bW4pfSksX259''@;'; put 'put ''W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW0J0LF9uXSk9PkJ0KyI6ICIrX24pLmpvaW4oIlxuIil9Z2V0''@;'; put 'put ''W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShCdCl7cmV0dXJuIEJ0IGluc3RhbmNlb2YgdGhpcz9CdDpuZXcgdGhpcyhCdCl9c3RhdGljIGNvbmNhdChCdCwuLi5fbil7Y29uc3QgbW49bmV3IHRoaXMoQnQpO3JldHVybiBfbi5mb3JFYWNo''@;'; put 'put ''KEluPT5tbi5zZXQoSW4pKSxtbn1zdGF0aWMgYWNjZXNzb3IoQnQpe2NvbnN0IG1uPSh0aGlzW1duXT10aGlzW1duXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLEluPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGJuKHVyKXtjb25zdCBiaT0kaSh1cik7bW5bYmldfHwoZnVuY3Rpb24gTHIo''@;'; put 'put ''U3QsQnQpe2NvbnN0IF9uPUR0LnRvQ2FtZWxDYXNlKCIgIitCdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKG1uPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LG1uK19uLHt2YWx1ZTpmdW5jdGlvbihJbixibix1cil7cmV0dXJuIHRoaXNbbW5dLmNhbGwodGhpcyxCdCxJbixibix1''@;'; put 'put ''cil9LGNvbmZpZ3VyYWJsZTohMH0pfSl9KEluLHVyKSxtbltiaV09ITApfXJldHVybiBEdC5pc0FycmF5KEJ0KT9CdC5mb3JFYWNoKGJuKTpibihCdCksdGhpc319V2kuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIs''@;'; put 'put ''IlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pLER0LnJlZHVjZURlc2NyaXB0b3JzKFdpLnByb3RvdHlwZSwoe3ZhbHVlOlN0fSxCdCk9PntsZXQgX249QnRbMF0udG9VcHBlckNhc2UoKStCdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5TdCxzZXQobW4pe3RoaXNbX25dPW1ufX19KSxE''@;'; put 'put ''dC5mcmVlemVNZXRob2RzKFdpKTt2YXIgcGE9V2k7ZnVuY3Rpb24gUW4oU3QsQnQpe2NvbnN0IF9uPXRoaXN8fHVhLG1uPUJ0fHxfbixJbj1wYS5mcm9tKG1uLmhlYWRlcnMpO2xldCBibj1tbi5kYXRhO3JldHVybiBEdC5mb3JFYWNoKFN0LGZ1bmN0aW9uKGJpKXtibj1iaS5jYWxsKF9uLGJu''@;'; put 'put ''LEluLm5vcm1hbGl6ZSgpLEJ0P0J0LnN0YXR1czp2b2lkIDApfSksSW4ubm9ybWFsaXplKCksYm59ZnVuY3Rpb24gbGEoU3Qpe3JldHVybiEoIVN0fHwhU3QuX19DQU5DRUxfXyl9ZnVuY3Rpb24geWEoU3QsQnQsX24pe2l0LmNhbGwodGhpcyxTdD8/ImNhbmNlbGVkIixpdC5FUlJfQ0FOQ0VM''@;'; put 'put ''RUQsQnQsX24pLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9ZnVuY3Rpb24gTGEoU3QsQnQsX24pe2NvbnN0IG1uPV9uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztfbi5zdGF0dXMmJm1uJiYhbW4oX24uc3RhdHVzKT9CdChuZXcgaXQoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUg''@;'; put 'put ''Iitfbi5zdGF0dXMsW2l0LkVSUl9CQURfUkVRVUVTVCxpdC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKF9uLnN0YXR1cy8xMDApLTRdLF9uLmNvbmZpZyxfbi5yZXF1ZXN0LF9uKSk6U3QoX24pfUR0LmluaGVyaXRzKHlhLGl0LHtfX0NBTkNFTF9fOiEwfSk7Y29uc3QgTnM9KFN0LEJ0''@;'; put 'put ''LF9uPTMpPT57bGV0IG1uPTA7Y29uc3QgSW49ZnVuY3Rpb24gdGkoU3QsQnQpe1N0PVN0fHwxMDtjb25zdCBfbj1uZXcgQXJyYXkoU3QpLG1uPW5ldyBBcnJheShTdCk7bGV0IHVyLEluPTAsYm49MDtyZXR1cm4gQnQ9dm9pZCAwIT09QnQ/QnQ6MWUzLGZ1bmN0aW9uKEZyKXtjb25zdCB0YT1E''@;'; put 'put ''YXRlLm5vdygpLG9hPW1uW2JuXTt1cnx8KHVyPXRhKSxfbltJbl09RnIsbW5bSW5dPXRhO2xldCBWYT1ibiwkbz0wO2Zvcig7VmEhPT1JbjspJG8rPV9uW1ZhKytdLFZhJT1TdDtpZihJbj0oSW4rMSklU3QsSW49PT1ibiYmKGJuPShibisxKSVTdCksdGEtdXI8QnQpcmV0dXJuO2NvbnN0IFhs''@;'; put 'put ''PW9hJiZ0YS1vYTtyZXR1cm4gWGw/TWF0aC5yb3VuZCgxZTMqJG8vWGwpOnZvaWQgMH19KDUwLDI1MCk7cmV0dXJuIGZ1bmN0aW9uIGdvKFN0LEJ0KXtsZXQgSW4sYm4sX249MCxtbj0xZTMvQnQ7Y29uc3QgdXI9KHRhLG9hPURhdGUubm93KCkpPT57X249b2EsSW49bnVsbCxibiYmKGNsZWFy''@;'; put 'put ''VGltZW91dChibiksYm49bnVsbCksU3QuYXBwbHkobnVsbCx0YSl9O3JldHVyblsoLi4udGEpPT57Y29uc3Qgb2E9RGF0ZS5ub3coKSxWYT1vYS1fbjtWYT49bW4/dXIodGEsb2EpOihJbj10YSxibnx8KGJuPXNldFRpbWVvdXQoKCk9Pntibj1udWxsLHVyKEluKX0sbW4tVmEpKSl9LCgpPT5J''@;'; put 'put ''biYmdXIoSW4pXX0oYm49Pntjb25zdCB1cj1ibi5sb2FkZWQsYmk9Ym4ubGVuZ3RoQ29tcHV0YWJsZT9ibi50b3RhbDp2b2lkIDAsRnI9dXItbW4sdGE9SW4oRnIpO21uPXVyLFN0KHtsb2FkZWQ6dXIsdG90YWw6YmkscHJvZ3Jlc3M6Ymk/dXIvYmk6dm9pZCAwLGJ5dGVzOkZyLHJhdGU6dGF8''@;'; put 'put ''fHZvaWQgMCxlc3RpbWF0ZWQ6dGEmJmJpJiZ1cjw9Ymk/KGJpLXVyKS90YTp2b2lkIDAsZXZlbnQ6Ym4sbGVuZ3RoQ29tcHV0YWJsZTpudWxsIT1iaSxbQnQ/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9KX0sX24pfSxibD0oU3QsQnQpPT57Y29uc3QgX249bnVsbCE9U3Q7cmV0dXJuW21uPT5C''@;'; put 'put ''dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTpfbix0b3RhbDpTdCxsb2FkZWQ6bW59KSxCdFsxXV19LHB1PVN0PT4oLi4uQnQpPT5EdC5hc2FwKCgpPT5TdCguLi5CdCkpO3ZhciBMYz16dC5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/KChTdCxCdCk9Pl9uPT4oX249bmV3IFVSTChfbix6dC5vcmlnaW4p''@;'; put 'put ''LFN0LnByb3RvY29sPT09X24ucHJvdG9jb2wmJlN0Lmhvc3Q9PT1fbi5ob3N0JiYoQnR8fFN0LnBvcnQ9PT1fbi5wb3J0KSkpKG5ldyBVUkwoenQub3JpZ2luKSx6dC5uYXZpZ2F0b3ImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QoenQubmF2aWdhdG9yLnVzZXJBZ2VudCkpOigpPT4hMCxEMD16''@;'; put 'put ''dC5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKFN0LEJ0LF9uLG1uLEluLGJuKXtjb25zdCB1cj1bU3QrIj0iK2VuY29kZVVSSUNvbXBvbmVudChCdCldO0R0LmlzTnVtYmVyKF9uKSYmdXIucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKF9uKS50b0dNVFN0cmluZygpKSxEdC5pc1N0cmlu''@;'; put 'put ''ZyhtbikmJnVyLnB1c2goInBhdGg9IittbiksRHQuaXNTdHJpbmcoSW4pJiZ1ci5wdXNoKCJkb21haW49IitJbiksITA9PT1ibiYmdXIucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXVyLmpvaW4oIjsgIil9LHJlYWQoU3Qpe2NvbnN0IEJ0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChu''@;'; put 'put ''ZXcgUmVnRXhwKCIoXnw7XFxzKikoIitTdCsiKT0oW147XSopIikpO3JldHVybiBCdD9kZWNvZGVVUklDb21wb25lbnQoQnRbM10pOm51bGx9LHJlbW92ZShTdCl7dGhpcy53cml0ZShTdCwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZDooKT0+bnVsbCxyZW1vdmUoKXt9''@;'; put 'put ''fTtmdW5jdGlvbiBsaShTdCxCdCxfbil7bGV0IG1uPSFmdW5jdGlvbiBpcihTdCl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChTdCl9KEJ0KTtyZXR1cm4gU3QmJm1ufHwwPT1fbj9mdW5jdGlvbiB4YShTdCxCdCl7cmV0dXJuIEJ0P1N0LnJlcGxhY2UoL1wvP1wv''@;'; put 'put ''JC8sIiIpKyIvIitCdC5yZXBsYWNlKC9eXC8rLywiIik6U3R9KFN0LEJ0KTpCdH1jb25zdCBWdD1TdD0+U3QgaW5zdGFuY2VvZiBwYT97Li4uU3R9OlN0O2Z1bmN0aW9uIEpyKFN0LEJ0KXtCdD1CdHx8e307Y29uc3QgX249e307ZnVuY3Rpb24gbW4odGEsb2EsVmEsJG8pe3JldHVybiBEdC5p''@;'; put 'put ''c1BsYWluT2JqZWN0KHRhKSYmRHQuaXNQbGFpbk9iamVjdChvYSk/RHQubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6JG99LHRhLG9hKTpEdC5pc1BsYWluT2JqZWN0KG9hKT9EdC5tZXJnZSh7fSxvYSk6RHQuaXNBcnJheShvYSk/b2Euc2xpY2UoKTpvYX1mdW5jdGlvbiBJbih0YSxvYSxWYSwkbyl7''@;'; put 'put ''cmV0dXJuIER0LmlzVW5kZWZpbmVkKG9hKT9EdC5pc1VuZGVmaW5lZCh0YSk/dm9pZCAwOm1uKHZvaWQgMCx0YSwwLCRvKTptbih0YSxvYSwwLCRvKX1mdW5jdGlvbiBibih0YSxvYSl7aWYoIUR0LmlzVW5kZWZpbmVkKG9hKSlyZXR1cm4gbW4odm9pZCAwLG9hKX1mdW5jdGlvbiB1cih0YSxv''@;'; put 'put ''YSl7cmV0dXJuIER0LmlzVW5kZWZpbmVkKG9hKT9EdC5pc1VuZGVmaW5lZCh0YSk/dm9pZCAwOm1uKHZvaWQgMCx0YSk6bW4odm9pZCAwLG9hKX1mdW5jdGlvbiBiaSh0YSxvYSxWYSl7cmV0dXJuIFZhIGluIEJ0P21uKHRhLG9hKTpWYSBpbiBTdD9tbih2b2lkIDAsdGEpOnZvaWQgMH1jb25z''@;'; put 'put ''dCBGcj17dXJsOmJuLG1ldGhvZDpibixkYXRhOmJuLGJhc2VVUkw6dXIsdHJhbnNmb3JtUmVxdWVzdDp1cix0cmFuc2Zvcm1SZXNwb25zZTp1cixwYXJhbXNTZXJpYWxpemVyOnVyLHRpbWVvdXQ6dXIsdGltZW91dE1lc3NhZ2U6dXIsd2l0aENyZWRlbnRpYWxzOnVyLHdpdGhYU1JGVG9rZW46''@;'; put 'put ''dXIsYWRhcHRlcjp1cixyZXNwb25zZVR5cGU6dXIseHNyZkNvb2tpZU5hbWU6dXIseHNyZkhlYWRlck5hbWU6dXIsb25VcGxvYWRQcm9ncmVzczp1cixvbkRvd25sb2FkUHJvZ3Jlc3M6dXIsZGVjb21wcmVzczp1cixtYXhDb250ZW50TGVuZ3RoOnVyLG1heEJvZHlMZW5ndGg6dXIsYmVmb3Jl''@;'; put 'put ''UmVkaXJlY3Q6dXIsdHJhbnNwb3J0OnVyLGh0dHBBZ2VudDp1cixodHRwc0FnZW50OnVyLGNhbmNlbFRva2VuOnVyLHNvY2tldFBhdGg6dXIscmVzcG9uc2VFbmNvZGluZzp1cix2YWxpZGF0ZVN0YXR1czpiaSxoZWFkZXJzOih0YSxvYSxWYSk9PkluKFZ0KHRhKSxWdChvYSksMCwhMCl9O3Jl''@;'; put 'put ''dHVybiBEdC5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sU3QsQnQpKSxmdW5jdGlvbihvYSl7Y29uc3QgVmE9RnJbb2FdfHxJbiwkbz1WYShTdFtvYV0sQnRbb2FdLG9hKTtEdC5pc1VuZGVmaW5lZCgkbykmJlZhIT09Yml8fChfbltvYV09JG8pfSksX259dmFyIGIwPVN0''@;'; put 'put ''PT57Y29uc3QgQnQ9SnIoe30sU3QpO2xldCBGcix7ZGF0YTpfbix3aXRoWFNSRlRva2VuOm1uLHhzcmZIZWFkZXJOYW1lOkluLHhzcmZDb29raWVOYW1lOmJuLGhlYWRlcnM6dXIsYXV0aDpiaX09QnQ7aWYoQnQuaGVhZGVycz11cj1wYS5mcm9tKHVyKSxCdC51cmw9T3IobGkoQnQuYmFzZVVS''@;'; put 'put ''TCxCdC51cmwpLFN0LnBhcmFtcyxTdC5wYXJhbXNTZXJpYWxpemVyKSxiaSYmdXIuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChiaS51c2VybmFtZXx8IiIpKyI6IisoYmkucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGJpLnBhc3N3b3JkKSk6IiIpKSks''@;'; put 'put ''RHQuaXNGb3JtRGF0YShfbikpaWYoenQuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx6dC5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpdXIuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKCExIT09KEZyPXVyLmdldENvbnRlbnRUeXBlKCkpKXtjb25zdFt0YSwuLi5vYV09RnI/''@;'; put 'put ''RnIuc3BsaXQoIjsiKS5tYXAoVmE9PlZhLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3VyLnNldENvbnRlbnRUeXBlKFt0YXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLm9hXS5qb2luKCI7ICIpKX1pZih6dC5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihtbiYmRHQuaXNGdW5jdGlvbiht''@;'; put 'put ''bikmJihtbj1tbihCdCkpLG1ufHwhMSE9PW1uJiZMYyhCdC51cmwpKSl7Y29uc3QgdGE9SW4mJmJuJiZEMC5yZWFkKGJuKTt0YSYmdXIuc2V0KEluLHRhKX1yZXR1cm4gQnR9LFJ1PXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSImJmZ1bmN0aW9uKFN0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVu''@;'; put 'put ''Y3Rpb24oX24sbW4pe2NvbnN0IEluPWIwKFN0KTtsZXQgYm49SW4uZGF0YTtjb25zdCB1cj1wYS5mcm9tKEluLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO2xldCBvYSxWYSwkbyxYbCx0byx7cmVzcG9uc2VUeXBlOmJpLG9uVXBsb2FkUHJvZ3Jlc3M6RnIsb25Eb3dubG9hZFByb2dyZXNzOnRhfT1J''@;'; put 'put ''bjtmdW5jdGlvbiBfbygpe1hsJiZYbCgpLHRvJiZ0bygpLEluLmNhbmNlbFRva2VuJiZJbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvYSksSW4uc2lnbmFsJiZJbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9hKX1sZXQgamk9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0''@;'; put 'put ''aW9uIFBjKCl7aWYoIWppKXJldHVybjtjb25zdCBDYT1wYS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gamkmJmppLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTtMYShmdW5jdGlvbigkMCl7X24oJDApLF9vKCl9LGZ1bmN0aW9uKCQwKXttbigkMCksX28oKX0se2RhdGE6YmkmJiJ0''@;'; put 'put ''ZXh0IiE9PWJpJiYianNvbiIhPT1iaT9qaS5yZXNwb25zZTpqaS5yZXNwb25zZVRleHQsc3RhdHVzOmppLnN0YXR1cyxzdGF0dXNUZXh0OmppLnN0YXR1c1RleHQsaGVhZGVyczpDYSxjb25maWc6U3QscmVxdWVzdDpqaX0pLGppPW51bGx9amkub3BlbihJbi5tZXRob2QudG9VcHBlckNhc2Uo''@;'; put 'put ''KSxJbi51cmwsITApLGppLnRpbWVvdXQ9SW4udGltZW91dCwib25sb2FkZW5kImluIGppP2ppLm9ubG9hZGVuZD1QYzpqaS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshaml8fDQhPT1qaS5yZWFkeVN0YXRlfHwwPT09amkuc3RhdHVzJiYoIWppLnJlc3BvbnNlVVJMfHwwIT09amku''@;'; put 'put ''cmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSl8fHNldFRpbWVvdXQoUGMpfSxqaS5vbmFib3J0PWZ1bmN0aW9uKCl7amkmJihtbihuZXcgaXQoIlJlcXVlc3QgYWJvcnRlZCIsaXQuRUNPTk5BQk9SVEVELFN0LGppKSksamk9bnVsbCl9LGppLm9uZXJyb3I9ZnVuY3Rpb24oKXttbihuZXcg''@;'; put 'put ''aXQoIk5ldHdvcmsgRXJyb3IiLGl0LkVSUl9ORVRXT1JLLFN0LGppKSksamk9bnVsbH0samkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFRhPUluLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitJbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiO0luLnRpbWVvdXRFcnJv''@;'; put 'put ''ck1lc3NhZ2UmJihUYT1Jbi50aW1lb3V0RXJyb3JNZXNzYWdlKSxtbihuZXcgaXQoVGEsKEluLnRyYW5zaXRpb25hbHx8Um4pLmNsYXJpZnlUaW1lb3V0RXJyb3I/aXQuRVRJTUVET1VUOml0LkVDT05OQUJPUlRFRCxTdCxqaSkpLGppPW51bGx9LHZvaWQgMD09PWJuJiZ1ci5zZXRDb250ZW50''@;'; put 'put ''VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBqaSYmRHQuZm9yRWFjaCh1ci50b0pTT04oKSxmdW5jdGlvbihUYSxYaCl7amkuc2V0UmVxdWVzdEhlYWRlcihYaCxUYSl9KSxEdC5pc1VuZGVmaW5lZChJbi53aXRoQ3JlZGVudGlhbHMpfHwoamkud2l0aENyZWRlbnRpYWxzPSEhSW4u''@;'; put 'put ''d2l0aENyZWRlbnRpYWxzKSxiaSYmImpzb24iIT09YmkmJihqaS5yZXNwb25zZVR5cGU9SW4ucmVzcG9uc2VUeXBlKSx0YSYmKFskbyx0b109TnModGEsITApLGppLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIiwkbykpLEZyJiZqaS51cGxvYWQmJihbVmEsWGxdPU5zKEZyKSxqaS51cGxv''@;'; put 'put ''YWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFZhKSxqaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsWGwpKSwoSW4uY2FuY2VsVG9rZW58fEluLnNpZ25hbCkmJihvYT1DYT0+e2ppJiYobW4oIUNhfHxDYS50eXBlP25ldyB5YShudWxsLFN0LGppKTpDYSksamkuYWJv''@;'; put 'put ''cnQoKSxqaT1udWxsKX0sSW4uY2FuY2VsVG9rZW4mJkluLmNhbmNlbFRva2VuLnN1YnNjcmliZShvYSksSW4uc2lnbmFsJiYoSW4uc2lnbmFsLmFib3J0ZWQ/b2EoKTpJbi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9hKSkpO2NvbnN0IHpsPWZ1bmN0aW9uIEZhKFN0KXtjb25z''@;'; put 'put ''dCBCdD0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhTdCk7cmV0dXJuIEJ0JiZCdFsxXXx8IiJ9KEluLnVybCk7emwmJi0xPT09enQucHJvdG9jb2xzLmluZGV4T2YoemwpP21uKG5ldyBpdCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIit6bCsiOiIsaXQuRVJSX0JBRF9SRVFVRVNU''@;'; put 'put ''LFN0KSk6amkuc2VuZChibnx8bnVsbCl9KX0sb2Q9KFN0LEJ0KT0+e2NvbnN0e2xlbmd0aDpfbn09U3Q9U3Q/U3QuZmlsdGVyKEJvb2xlYW4pOltdO2lmKEJ0fHxfbil7bGV0IEluLG1uPW5ldyBBYm9ydENvbnRyb2xsZXI7Y29uc3QgYm49ZnVuY3Rpb24odGEpe2lmKCFJbil7SW49ITAsYmko''@;'; put 'put ''KTtjb25zdCBvYT10YSBpbnN0YW5jZW9mIEVycm9yP3RhOnRoaXMucmVhc29uO21uLmFib3J0KG9hIGluc3RhbmNlb2YgaXQ/b2E6bmV3IHlhKG9hIGluc3RhbmNlb2YgRXJyb3I/b2EubWVzc2FnZTpvYSkpfX07bGV0IHVyPUJ0JiZzZXRUaW1lb3V0KCgpPT57dXI9bnVsbCxibihuZXcgaXQo''@;'; put 'put ''YHRpbWVvdXQgJHtCdH0gb2YgbXMgZXhjZWVkZWRgLGl0LkVUSU1FRE9VVCkpfSxCdCk7Y29uc3QgYmk9KCk9PntTdCYmKHVyJiZjbGVhclRpbWVvdXQodXIpLHVyPW51bGwsU3QuZm9yRWFjaCh0YT0+e3RhLnVuc3Vic2NyaWJlP3RhLnVuc3Vic2NyaWJlKGJuKTp0YS5yZW1vdmVFdmVudExp''@;'; put 'put ''c3RlbmVyKCJhYm9ydCIsYm4pfSksU3Q9bnVsbCl9O1N0LmZvckVhY2godGE9PnRhLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixibikpO2NvbnN0e3NpZ25hbDpGcn09bW47cmV0dXJuIEZyLnVuc3Vic2NyaWJlPSgpPT5EdC5hc2FwKGJpKSxGcn19O2NvbnN0IFloPWZ1bmN0aW9uKihTdCxC''@;'; put 'put ''dCl7bGV0IF9uPVN0LmJ5dGVMZW5ndGg7aWYoIUJ0fHxfbjxCdClyZXR1cm4gdm9pZCh5aWVsZCBTdCk7bGV0IEluLG1uPTA7Zm9yKDttbjxfbjspSW49bW4rQnQseWllbGQgU3Quc2xpY2UobW4sSW4pLG1uPUlufSxjZj1mdW5jdGlvbigpe3ZhciBTdD1fd3JhcEFzeW5jR2VuZXJhdG9yKGZ1''@;'; put 'put ''bmN0aW9uKihCdCxfbil7dmFyIGJuLG1uPSExLEluPSExO3RyeXtmb3IodmFyIGJpLHVyPV9hc3luY0l0ZXJhdG9yKENzKEJ0KSk7bW49IShiaT15aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcih1ci5uZXh0KCkpKS5kb25lO21uPSExKXtjb25zdCBGcj1iaS52YWx1ZTt5aWVsZCpfYXN5bmNH''@;'; put 'put ''ZW5lcmF0b3JEZWxlZ2F0ZShfYXN5bmNJdGVyYXRvcihZaChGcixfbikpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKX19Y2F0Y2goRnIpe0luPSEwLGJuPUZyfWZpbmFsbHl7dHJ5e21uJiZudWxsIT11ci5yZXR1cm4mJih5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcih1ci5yZXR1cm4oKSkpfWZp''@;'; put 'put ''bmFsbHl7aWYoSW4pdGhyb3cgYm59fX0pO3JldHVybiBmdW5jdGlvbihfbixtbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksQ3M9ZnVuY3Rpb24oKXt2YXIgU3Q9X3dyYXBBc3luY0dlbmVyYXRvcihmdW5jdGlvbiooQnQpe2lmKEJ0W1N5bWJvbC5hc3luY0l0ZXJhdG9y''@;'; put 'put ''XSlyZXR1cm4gdm9pZCh5aWVsZCpfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZShfYXN5bmNJdGVyYXRvcihCdCksX2F3YWl0QXN5bmNHZW5lcmF0b3IpKTtjb25zdCBfbj1CdC5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHtkb25lOm1uLHZhbHVlOklufT15aWVsZCBfYXdhaXRBc3luY0dl''@;'; put 'put ''bmVyYXRvcihfbi5yZWFkKCkpO2lmKG1uKWJyZWFrO3lpZWxkIElufX1maW5hbGx5e3lpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKF9uLmNhbmNlbCgpKX19KTtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFlpPShTdCxCdCxfbixtbik9''@;'; put 'put ''Pntjb25zdCBJbj1jZihTdCxCdCk7bGV0IHVyLGJuPTAsYmk9RnI9Pnt1cnx8KHVyPSEwLG1uJiZtbihGcikpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtwdWxsOkZyPT5fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooKXt0cnl7Y29uc3R7ZG9uZTp0YSx2YWx1ZTpvYX09eWllbGQg''@;'; put 'put ''SW4ubmV4dCgpO2lmKHRhKXJldHVybiBiaSgpLHZvaWQgRnIuY2xvc2UoKTtpZihfbil7bGV0ICRvPWJuKz1vYS5ieXRlTGVuZ3RoO19uKCRvKX1Gci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KG9hKSl9Y2F0Y2godGEpe3Rocm93IGJpKHRhKSx0YX19KSgpLGNhbmNlbDpGcj0+KGJpKEZyKSxJ''@;'; put 'put ''bi5yZXR1cm4oKSl9LHtoaWdoV2F0ZXJNYXJrOjJ9KX0seWw9ImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoJiYiZnVuY3Rpb24iPT10eXBlb2YgUmVxdWVzdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlc3BvbnNlLFFjPXlsJiYiZnVuY3Rpb24iPT10eXBlb2YgUmVhZGFibGVTdHJlYW0scmc9eWwm''@;'; put 'put ''JigiZnVuY3Rpb24iPT10eXBlb2YgVGV4dEVuY29kZXI/KFN0PT5CdD0+U3QuZW5jb2RlKEJ0KSkobmV3IFRleHRFbmNvZGVyKTpmdW5jdGlvbigpe3ZhciBTdD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooQnQpe3JldHVybiBuZXcgVWludDhBcnJheSh5aWVsZCBuZXcgUmVzcG9uc2Uo''@;'; put 'put ''QnQpLmFycmF5QnVmZmVyKCkpfSk7cmV0dXJuIGZ1bmN0aW9uKEJ0KXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkseTA9KFN0LC4uLkJ0KT0+e3RyeXtyZXR1cm4hIVN0KC4uLkJ0KX1jYXRjaHtyZXR1cm4hMX19LGlnPVFjJiZ5MCgoKT0+e2xldCBTdD0hMTtjb25zdCBC''@;'; put 'put ''dD1uZXcgUmVxdWVzdCh6dC5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBTdD0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBTdCYmIUJ0fSksdWY9UWMmJnkwKCgpPT5EdC5pc1Jl''@;'; put 'put ''YWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLHNkPXtzdHJlYW06dWYmJihTdD0+U3QuYm9keSl9O3lsJiYoU3Q9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2goQnQ9Pnshc2RbQnRdJiYoc2RbQnRdPUR0LmlzRnVu''@;'; put 'put ''Y3Rpb24oU3RbQnRdKT9fbj0+X25bQnRdKCk6KF9uLG1uKT0+e3Rocm93IG5ldyBpdChgUmVzcG9uc2UgdHlwZSAnJHtCdH0nIGlzIG5vdCBzdXBwb3J0ZWRgLGl0LkVSUl9OT1RfU1VQUE9SVCxtbil9KX0pfSkobmV3IFJlc3BvbnNlKTtjb25zdCBkZj1mdW5jdGlvbigpe3ZhciBTdD1fYXN5''@;'; put 'put ''bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooQnQpe3JldHVybiBudWxsPT1CdD8wOkR0LmlzQmxvYihCdCk/QnQuc2l6ZTpEdC5pc1NwZWNDb21wbGlhbnRGb3JtKEJ0KT8oeWllbGQgbmV3IFJlcXVlc3QoenQub3JpZ2luLHttZXRob2Q6IlBPU1QiLGJvZHk6QnR9KS5hcnJheUJ1ZmZlcigpKS5i''@;'; put 'put ''eXRlTGVuZ3RoOkR0LmlzQXJyYXlCdWZmZXJWaWV3KEJ0KXx8RHQuaXNBcnJheUJ1ZmZlcihCdCk/QnQuYnl0ZUxlbmd0aDooRHQuaXNVUkxTZWFyY2hQYXJhbXMoQnQpJiYoQnQrPSIiKSxEdC5pc1N0cmluZyhCdCk/KHlpZWxkIHJnKEJ0KSkuYnl0ZUxlbmd0aDp2b2lkIDApfSk7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxrMT1mdW5jdGlvbigpe3ZhciBTdD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooQnQsX24pe3JldHVybiBEdC50b0Zpbml0ZU51bWJlcihCdC5nZXRDb250ZW50TGVuZ3RoKCkpPz9kZihfbil9KTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oX24sbW4pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO3ZhciBoZj15bCYmZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtsZXR7dXJsOl9uLG1ldGhvZDptbixkYXRhOkluLHNpZ25hbDpibixjYW5jZWxU''@;'; put 'put ''b2tlbjp1cix0aW1lb3V0OmJpLG9uRG93bmxvYWRQcm9ncmVzczpGcixvblVwbG9hZFByb2dyZXNzOnRhLHJlc3BvbnNlVHlwZTpvYSxoZWFkZXJzOlZhLHdpdGhDcmVkZW50aWFsczokbz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpYbH09YjAoQnQpO29hPW9hPyhvYSsiIikudG9Mb3dl''@;'; put 'put ''ckNhc2UoKToidGV4dCI7bGV0IF9vLHRvPW9kKFtibix1ciYmdXIudG9BYm9ydFNpZ25hbCgpXSxiaSk7Y29uc3Qgamk9dG8mJnRvLnVuc3Vic2NyaWJlJiYoKCk9Pnt0by51bnN1YnNjcmliZSgpfSk7bGV0IFBjO3RyeXtpZih0YSYmaWcmJiJnZXQiIT09bW4mJiJoZWFkIiE9PW1uJiYwIT09''@;'; put 'put ''KFBjPXlpZWxkIGsxKFZhLEluKSkpe2xldCAkMCxHMD1uZXcgUmVxdWVzdChfbix7bWV0aG9kOiJQT1NUIixib2R5OkluLGR1cGxleDoiaGFsZiJ9KTtpZihEdC5pc0Zvcm1EYXRhKEluKSYmKCQwPUcwLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJlZhLnNldENvbnRlbnRUeXBlKCQw''@;'; put 'put ''KSxHMC5ib2R5KXtjb25zdFtObyxxaV09YmwoUGMsTnMocHUodGEpKSk7SW49WWkoRzAuYm9keSw2NTUzNixObyxxaSl9fUR0LmlzU3RyaW5nKCRvKXx8KCRvPSRvPyJpbmNsdWRlIjoib21pdCIpO2NvbnN0IHpsPSJjcmVkZW50aWFscyJpbiBSZXF1ZXN0LnByb3RvdHlwZTtfbz1uZXcgUmVx''@;'; put 'put ''dWVzdChfbix7Li4uWGwsc2lnbmFsOnRvLG1ldGhvZDptbi50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6VmEubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpJbixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnpsPyRvOnZvaWQgMH0pO2xldCBDYT15aWVsZCBmZXRjaChfbyk7Y29uc3QgVGE9dWYm''@;'; put 'put ''Jigic3RyZWFtIj09PW9hfHwicmVzcG9uc2UiPT09b2EpO2lmKHVmJiYoRnJ8fFRhJiZqaSkpe2NvbnN0IEcwPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKE1zPT57RzBbTXNdPUNhW01zXX0pO2NvbnN0ICQwPUR0LnRvRmluaXRlTnVtYmVyKENhLmhlYWRl''@;'; put 'put ''cnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbTm8scWldPUZyJiZibCgkMCxOcyhwdShGciksITApKXx8W107Q2E9bmV3IFJlc3BvbnNlKFlpKENhLmJvZHksNjU1MzYsTm8sKCk9PntxaSYmcWkoKSxqaSYmamkoKX0pLEcwKX1vYT1vYXx8InRleHQiO2xldCBYaD15aWVsZCBzZFtEdC5maW5k''@;'; put 'put ''S2V5KHNkLG9hKXx8InRleHQiXShDYSxCdCk7cmV0dXJuIVRhJiZqaSYmamkoKSx5aWVsZCBuZXcgUHJvbWlzZSgoRzAsJDApPT57TGEoRzAsJDAse2RhdGE6WGgsaGVhZGVyczpwYS5mcm9tKENhLmhlYWRlcnMpLHN0YXR1czpDYS5zdGF0dXMsc3RhdHVzVGV4dDpDYS5zdGF0dXNUZXh0LGNv''@;'; put 'put ''bmZpZzpCdCxyZXF1ZXN0Ol9vfSl9KX1jYXRjaCh6bCl7dGhyb3cgamkmJmppKCksemwmJiJUeXBlRXJyb3IiPT09emwubmFtZSYmL2ZldGNoL2kudGVzdCh6bC5tZXNzYWdlKT9PYmplY3QuYXNzaWduKG5ldyBpdCgiTmV0d29yayBFcnJvciIsaXQuRVJSX05FVFdPUkssQnQsX28pLHtjYXVz''@;'; put 'put ''ZTp6bC5jYXVzZXx8emx9KTppdC5mcm9tKHpsLHpsJiZ6bC5jb2RlLEJ0LF9vKX19KTtyZXR1cm4gZnVuY3Rpb24oQnQpe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpO2NvbnN0IGVoPXtodHRwOm51bGwseGhyOlJ1LGZldGNoOmhmfTtEdC5mb3JFYWNoKGVoLChTdCxCdCk9''@;'; put 'put ''PntpZihTdCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCwibmFtZSIse3ZhbHVlOkJ0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCwiYWRhcHRlck5hbWUiLHt2YWx1ZTpCdH0pfX0pO2NvbnN0IGZmPVN0PT5gLSAke1N0fWAsR2g9U3Q9PkR0LmlzRnVuY3Rpb24oU3Qp''@;'; put 'put ''fHxudWxsPT09U3R8fCExPT09U3Q7dmFyIE9jX2dldEFkYXB0ZXI9U3Q9PntTdD1EdC5pc0FycmF5KFN0KT9TdDpbU3RdO2NvbnN0e2xlbmd0aDpCdH09U3Q7bGV0IF9uLG1uO2NvbnN0IEluPXt9O2ZvcihsZXQgYm49MDtibjxCdDtibisrKXtsZXQgdXI7aWYoX249U3RbYm5dLG1uPV9uLCFH''@;'; put 'put ''aChfbikmJihtbj1laFsodXI9U3RyaW5nKF9uKSkudG9Mb3dlckNhc2UoKV0sdm9pZCAwPT09bW4pKXRocm93IG5ldyBpdChgVW5rbm93biBhZGFwdGVyICcke3VyfSdgKTtpZihtbilicmVhaztJblt1cnx8IiMiK2JuXT1tbn1pZighbW4pe2NvbnN0IGJuPU9iamVjdC5lbnRyaWVzKEluKS5t''@;'; put 'put ''YXAoKFtiaSxGcl0pPT5gYWRhcHRlciAke2JpfSBgKyghMT09PUZyPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpO3Rocm93IG5ldyBpdCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRj''@;'; put 'put ''aCB0aGUgcmVxdWVzdCAiKyhCdD9ibi5sZW5ndGg+MT8ic2luY2UgOlxuIitibi5tYXAoZmYpLmpvaW4oIlxuIik6IiAiK2ZmKGJuWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiKSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIG1ufTtmdW5jdGlvbiBOYShTdCl7aWYoU3QuY2FuY2Vs''@;'; put 'put ''VG9rZW4mJlN0LmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxTdC5zaWduYWwmJlN0LnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB5YShudWxsLFN0KX1mdW5jdGlvbiBEMyhTdCl7cmV0dXJuIE5hKFN0KSxTdC5oZWFkZXJzPXBhLmZyb20oU3QuaGVhZGVycyksU3QuZGF0YT1Rbi5j''@;'; put 'put ''YWxsKFN0LFN0LnRyYW5zZm9ybVJlcXVlc3QpLC0xIT09WyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKFN0Lm1ldGhvZCkmJlN0LmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLE9jX2dldEFkYXB0ZXIoU3QuYWRhcHRl''@;'; put 'put ''cnx8dWEuYWRhcHRlcikoU3QpLnRoZW4oZnVuY3Rpb24obW4pe3JldHVybiBOYShTdCksbW4uZGF0YT1Rbi5jYWxsKFN0LFN0LnRyYW5zZm9ybVJlc3BvbnNlLG1uKSxtbi5oZWFkZXJzPXBhLmZyb20obW4uaGVhZGVycyksbW59LGZ1bmN0aW9uKG1uKXtyZXR1cm4gbGEobW4pfHwoTmEoU3Qp''@;'; put 'put ''LG1uJiZtbi5yZXNwb25zZSYmKG1uLnJlc3BvbnNlLmRhdGE9UW4uY2FsbChTdCxTdC50cmFuc2Zvcm1SZXNwb25zZSxtbi5yZXNwb25zZSksbW4ucmVzcG9uc2UuaGVhZGVycz1wYS5mcm9tKG1uLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QobW4pfSl9Y29uc3QgS2g9e307''@;'; put 'put ''WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChTdCxCdCk9PntLaFtTdF09ZnVuY3Rpb24obW4pe3JldHVybiB0eXBlb2YgbW49PT1TdHx8ImEiKyhCdDwxPyJuICI6IiAiKStTdH19KTtjb25zdCBxaD17fTtLaC50cmFu''@;'; put 'put ''c2l0aW9uYWw9ZnVuY3Rpb24oQnQsX24sbW4pe2Z1bmN0aW9uIEluKGJuLHVyKXtyZXR1cm4iW0F4aW9zIHYxLjguMl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitibisiJyIrdXIrKG1uPyIuICIrbW46IiIpfXJldHVybihibix1cixiaSk9PntpZighMT09PUJ0KXRocm93IG5ldyBpdChJbih1''@;'; put 'put ''ciwiIGhhcyBiZWVuIHJlbW92ZWQiKyhfbj8iIGluICIrX246IiIpKSxpdC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIF9uJiYhcWhbdXJdJiYocWhbdXJdPSEwLGcud2FybihJbih1ciwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrX24rIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRo''@;'; put 'put ''ZSBuZWFyIGZ1dHVyZSIpKSksIUJ0fHxCdChibix1cixiaSl9fSxLaC5zcGVsbGluZz1mdW5jdGlvbihCdCl7cmV0dXJuKF9uLG1uKT0+KGcud2FybihgJHttbn0gaXMgbGlrZWx5IGEgbWlzc3BlbGxpbmcgb2YgJHtCdH1gKSwhMCl9O3ZhciBhbj17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbiBB''@;'; put 'put ''bihTdCxCdCxfbil7aWYoIm9iamVjdCIhPXR5cGVvZiBTdCl0aHJvdyBuZXcgaXQoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGl0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb25zdCBtbj1PYmplY3Qua2V5cyhTdCk7bGV0IEluPW1uLmxlbmd0aDtmb3IoO0luLS0gPjA7KXtjb25zdCBi''@;'; put 'put ''bj1tbltJbl0sdXI9QnRbYm5dO2lmKHVyKXtjb25zdCBiaT1TdFtibl0sRnI9dm9pZCAwPT09Yml8fHVyKGJpLGJuLFN0KTtpZighMCE9PUZyKXRocm93IG5ldyBpdCgib3B0aW9uICIrYm4rIiBtdXN0IGJlICIrRnIsaXQuRVJSX0JBRF9PUFRJT05fVkFMVUUpfWVsc2UgaWYoITAhPT1fbil0''@;'; put 'put ''aHJvdyBuZXcgaXQoIlVua25vd24gb3B0aW9uICIrYm4saXQuRVJSX0JBRF9PUFRJT04pfX0sdmFsaWRhdG9yczpLaH07Y29uc3Qgdmk9YW4udmFsaWRhdG9ycztjbGFzcyBBcntjb25zdHJ1Y3RvcihCdCl7dGhpcy5kZWZhdWx0cz1CdCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcg''@;'; put 'put ''QXQscmVzcG9uc2U6bmV3IEF0fX1yZXF1ZXN0KEJ0LF9uKXt2YXIgbW49dGhpcztyZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCBtbi5fcmVxdWVzdChCdCxfbil9Y2F0Y2goSW4pe2lmKEluIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBibj17fTtF''@;'; put 'put ''cnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShibik6Ym49bmV3IEVycm9yO2NvbnN0IHVyPWJuLnN0YWNrP2JuLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dHJ5e0luLnN0YWNrP3VyJiYhU3RyaW5nKEluLnN0YWNrKS5lbmRzV2l0aCh1ci5yZXBs''@;'; put 'put ''YWNlKC9eLitcbi4rXG4vLCIiKSkmJihJbi5zdGFjays9IlxuIit1cik6SW4uc3RhY2s9dXJ9Y2F0Y2h7fX10aHJvdyBJbn19KSgpfV9yZXF1ZXN0KEJ0LF9uKXsic3RyaW5nIj09dHlwZW9mIEJ0Pyhfbj1fbnx8e30pLnVybD1CdDpfbj1CdHx8e30sX249SnIodGhpcy5kZWZhdWx0cyxfbik7''@;'; put 'put ''Y29uc3R7dHJhbnNpdGlvbmFsOm1uLHBhcmFtc1NlcmlhbGl6ZXI6SW4saGVhZGVyczpibn09X247dm9pZCAwIT09bW4mJmFuLmFzc2VydE9wdGlvbnMobW4se3NpbGVudEpTT05QYXJzaW5nOnZpLnRyYW5zaXRpb25hbCh2aS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzp2aS50cmFuc2l0''@;'; put 'put ''aW9uYWwodmkuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp2aS50cmFuc2l0aW9uYWwodmkuYm9vbGVhbil9LCExKSxudWxsIT1JbiYmKER0LmlzRnVuY3Rpb24oSW4pP19uLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpJbn06YW4uYXNzZXJ0T3B0aW9ucyhJbix7ZW5jb2RlOnZp''@;'; put 'put ''LmZ1bmN0aW9uLHNlcmlhbGl6ZTp2aS5mdW5jdGlvbn0sITApKSx2b2lkIDAhPT1fbi5hbGxvd0Fic29sdXRlVXJsc3x8KF9uLmFsbG93QWJzb2x1dGVVcmxzPXZvaWQgMD09PXRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHN8fHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHMp''@;'; put 'put ''LGFuLmFzc2VydE9wdGlvbnMoX24se2Jhc2VVcmw6dmkuc3BlbGxpbmcoImJhc2VVUkwiKSx3aXRoWHNyZlRva2VuOnZpLnNwZWxsaW5nKCJ3aXRoWFNSRlRva2VuIil9LCEwKSxfbi5tZXRob2Q9KF9uLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''O2xldCB1cj1ibiYmRHQubWVyZ2UoYm4uY29tbW9uLGJuW19uLm1ldGhvZF0pO2JuJiZEdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLHRvPT57ZGVsZXRlIGJuW3RvXX0pLF9uLmhlYWRlcnM9cGEuY29uY2F0KHVyLGJuKTtj''@;'; put 'put ''b25zdCBiaT1bXTtsZXQgRnI9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKF9vKXsiZnVuY3Rpb24iPT10eXBlb2YgX28ucnVuV2hlbiYmITE9PT1fby5ydW5XaGVuKF9uKXx8KEZyPUZyJiZfby5zeW5jaHJvbm91cyxiaS51bnNoaWZ0KF9vLmZ1bGZpbGxl''@;'; put 'put ''ZCxfby5yZWplY3RlZCkpfSk7Y29uc3QgdGE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihfbyl7dGEucHVzaChfby5mdWxmaWxsZWQsX28ucmVqZWN0ZWQpfSk7bGV0IG9hLCRvLFZhPTA7aWYoIUZyKXtjb25zdCB0bz1bRDMuYmluZCh0aGlzKSx2b2lk''@;'; put 'put ''IDBdO2Zvcih0by51bnNoaWZ0LmFwcGx5KHRvLGJpKSx0by5wdXNoLmFwcGx5KHRvLHRhKSwkbz10by5sZW5ndGgsb2E9UHJvbWlzZS5yZXNvbHZlKF9uKTtWYTwkbzspb2E9b2EudGhlbih0b1tWYSsrXSx0b1tWYSsrXSk7cmV0dXJuIG9hfSRvPWJpLmxlbmd0aDtsZXQgWGw9X247Zm9yKFZh''@;'; put 'put ''PTA7VmE8JG87KXtjb25zdCB0bz1iaVtWYSsrXSxfbz1iaVtWYSsrXTt0cnl7WGw9dG8oWGwpfWNhdGNoKGppKXtfby5jYWxsKHRoaXMsamkpO2JyZWFrfX10cnl7b2E9RDMuY2FsbCh0aGlzLFhsKX1jYXRjaCh0byl7cmV0dXJuIFByb21pc2UucmVqZWN0KHRvKX1mb3IoVmE9MCwkbz10YS5s''@;'; put 'put ''ZW5ndGg7VmE8JG87KW9hPW9hLnRoZW4odGFbVmErK10sdGFbVmErK10pO3JldHVybiBvYX1nZXRVcmkoQnQpe3JldHVybiBPcihsaSgoQnQ9SnIodGhpcy5kZWZhdWx0cyxCdCkpLmJhc2VVUkwsQnQudXJsLEJ0LmFsbG93QWJzb2x1dGVVcmxzKSxCdC5wYXJhbXMsQnQucGFyYW1zU2VyaWFs''@;'; put 'put ''aXplcil9fUR0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEJ0KXtBci5wcm90b3R5cGVbQnRdPWZ1bmN0aW9uKF9uLG1uKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEpyKG1ufHx7fSx7bWV0aG9kOkJ0LHVybDpfbixkYXRhOihtbnx8e30pLmRhdGF9''@;'; put 'put ''KSl9fSksRHQuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKEJ0KXtmdW5jdGlvbiBfbihtbil7cmV0dXJuIGZ1bmN0aW9uKGJuLHVyLGJpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEpyKGJpfHx7fSx7bWV0aG9kOkJ0LGhlYWRlcnM6bW4/eyJDb250ZW50LVR5cGUiOiJt''@;'; put 'put ''dWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmJuLGRhdGE6dXJ9KSl9fUFyLnByb3RvdHlwZVtCdF09X24oKSxBci5wcm90b3R5cGVbQnQrIkZvcm0iXT1fbighMCl9KTt2YXIgUG89QXI7Y2xhc3MgZW97Y29uc3RydWN0b3IoQnQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBCdCl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IF9uO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihibil7X249Ym59KTtjb25zdCBtbj10aGlzO3RoaXMucHJvbWlzZS50aGVuKEluPT57aWYoIW1uLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBi''@;'; put 'put ''bj1tbi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2JuLS0gPjA7KW1uLl9saXN0ZW5lcnNbYm5dKEluKTttbi5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1Jbj0+e2xldCBibjtjb25zdCB1cj1uZXcgUHJvbWlzZShiaT0+e21uLnN1YnNjcmliZShiaSksYm49Yml9KS50aGVu''@;'; put 'put ''KEluKTtyZXR1cm4gdXIuY2FuY2VsPWZ1bmN0aW9uKCl7bW4udW5zdWJzY3JpYmUoYm4pfSx1cn0sQnQoZnVuY3Rpb24oYm4sdXIsYmkpe21uLnJlYXNvbnx8KG1uLnJlYXNvbj1uZXcgeWEoYm4sdXIsYmkpLF9uKG1uLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVh''@;'; put 'put ''c29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShCdCl7dGhpcy5yZWFzb24/QnQodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChCdCk6dGhpcy5fbGlzdGVuZXJzPVtCdF19dW5zdWJzY3JpYmUoQnQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0''@;'; put 'put ''dXJuO2NvbnN0IF9uPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKEJ0KTstMSE9PV9uJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKF9uLDEpfXRvQWJvcnRTaWduYWwoKXtjb25zdCBCdD1uZXcgQWJvcnRDb250cm9sbGVyLF9uPW1uPT57QnQuYWJvcnQobW4pfTtyZXR1cm4gdGhpcy5zdWJzY3Jp''@;'; put 'put ''YmUoX24pLEJ0LnNpZ25hbC51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZShfbiksQnQuc2lnbmFsfXN0YXRpYyBzb3VyY2UoKXtsZXQgQnQ7cmV0dXJue3Rva2VuOm5ldyBlbyhmdW5jdGlvbihJbil7QnQ9SW59KSxjYW5jZWw6QnR9fX12YXIgb2w9ZW87Y29uc3QgU3M9e0NvbnRp''@;'; put 'put ''bnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENv''@;'; put 'put ''bnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1w''@;'; put 'put ''b3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1''@;'; put 'put ''dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0''@;'; put 'put ''MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVx''@;'; put 'put ''dWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRH''@;'; put 'put ''YXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxO''@;'; put 'put ''ZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFNzKS5mb3JFYWNoKChbU3QsQnRdKT0+e1NzW0J0XT1TdH0pO3ZhciBqbD1Tcztjb25zdCBrbz1mdW5jdGlvbiBIbyhTdCl7Y29uc3QgQnQ9bmV3IFBvKFN0KSxfbj1CKFBvLnByb3RvdHlwZS5yZXF1ZXN0''@;'; put 'put ''LEJ0KTtyZXR1cm4gRHQuZXh0ZW5kKF9uLFBvLnByb3RvdHlwZSxCdCx7YWxsT3duS2V5czohMH0pLER0LmV4dGVuZChfbixCdCxudWxsLHthbGxPd25LZXlzOiEwfSksX24uY3JlYXRlPWZ1bmN0aW9uKEluKXtyZXR1cm4gSG8oSnIoU3QsSW4pKX0sX259KHVhKTtrby5BeGlvcz1Qbyxrby5D''@;'; put 'put ''YW5jZWxlZEVycm9yPXlhLGtvLkNhbmNlbFRva2VuPW9sLGtvLmlzQ2FuY2VsPWxhLGtvLlZFUlNJT049IjEuOC4yIixrby50b0Zvcm1EYXRhPVF0LGtvLkF4aW9zRXJyb3I9aXQsa28uQ2FuY2VsPWtvLkNhbmNlbGVkRXJyb3Isa28uYWxsPWZ1bmN0aW9uKEJ0KXtyZXR1cm4gUHJvbWlzZS5h''@;'; put 'put ''bGwoQnQpfSxrby5zcHJlYWQ9ZnVuY3Rpb24gem8oU3Qpe3JldHVybiBmdW5jdGlvbihfbil7cmV0dXJuIFN0LmFwcGx5KG51bGwsX24pfX0sa28uaXNBeGlvc0Vycm9yPWZ1bmN0aW9uIFZzKFN0KXtyZXR1cm4gRHQuaXNPYmplY3QoU3QpJiYhMD09PVN0LmlzQXhpb3NFcnJvcn0sa28ubWVy''@;'; put 'put ''Z2VDb25maWc9SnIsa28uQXhpb3NIZWFkZXJzPXBhLGtvLmZvcm1Ub0pTT049U3Q9PklpKER0LmlzSFRNTEZvcm0oU3QpP25ldyBGb3JtRGF0YShTdCk6U3QpLGtvLmdldEFkYXB0ZXI9T2NfZ2V0QWRhcHRlcixrby5IdHRwU3RhdHVzQ29kZT1qbCxrby5kZWZhdWx0PWtvLHVlLmV4cG9ydHM9''@;'; put 'put ''a299LDg1NjY6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJLF87T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWCx7X19lc01vZHVsZTp7dmFsdWU6ITB9LFtTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZToiTW9kdWxlIn19KTtjb25zdCB3PWZ1bmN0aW9uIHkoWSl7cmV0dXJuIFkmJlkuX19l''@;'; put 'put ''c01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFksImRlZmF1bHQiKT9ZLmRlZmF1bHQ6WX0oZnVuY3Rpb24gZygpe2lmKF8pcmV0dXJuIEk7Xz0xO2NvbnN0IFk9MjE0NzQ4MzY0NyxxPTM2LFRlPS9eeG4tLS8sU2U9L1teXDAtXHg3Rl0vLHplPS9bXHgyRVx1''@;'; put 'put ''MzAwMlx1RkYwRVx1RkY2MV0vZyxWPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFs''@;'; put 'put ''aWQgaW5wdXQifSxiPU1hdGguZmxvb3IseD1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIEMod2Upe3Rocm93IG5ldyBSYW5nZUVycm9yKFZbd2VdKX1mdW5jdGlvbiBIKHdlLFVlKXtjb25zdCBKZT13ZS5zcGxpdCgiQCIpO2xldCBvdD0iIjtKZS5sZW5ndGg+MSYmKG90PUplWzBdKyJA''@;'; put 'put ''Iix3ZT1KZVsxXSk7Y29uc3QgdmU9ZnVuY3Rpb24gVCh3ZSxVZSl7Y29uc3QgSmU9W107bGV0IG90PXdlLmxlbmd0aDtmb3IoO290LS07KUplW290XT1VZSh3ZVtvdF0pO3JldHVybiBKZX0oKHdlPXdlLnJlcGxhY2UoemUsIi4iKSkuc3BsaXQoIi4iKSxVZSkuam9pbigiLiIpO3JldHVybiBv''@;'; put 'put ''dCt2ZX1mdW5jdGlvbiBqKHdlKXtjb25zdCBVZT1bXTtsZXQgSmU9MDtjb25zdCBvdD13ZS5sZW5ndGg7Zm9yKDtKZTxvdDspe2NvbnN0IE1lPXdlLmNoYXJDb2RlQXQoSmUrKyk7aWYoTWU+PTU1Mjk2JiZNZTw9NTYzMTkmJkplPG90KXtjb25zdCB2ZT13ZS5jaGFyQ29kZUF0KEplKyspOzU2''@;'; put 'put ''MzIwPT0oNjQ1MTImdmUpP1VlLnB1c2goKCgxMDIzJk1lKTw8MTApKygxMDIzJnZlKSs2NTUzNik6KFVlLnB1c2goTWUpLEplLS0pfWVsc2UgVWUucHVzaChNZSl9cmV0dXJuIFVlfWNvbnN0IG09ZnVuY3Rpb24od2Upe3JldHVybiB3ZT49NDgmJndlPDU4P3dlLTQ4KzI2OndlPj02NSYmd2U8''@;'; put 'put ''OTE/d2UtNjU6d2U+PTk3JiZ3ZTwxMjM/d2UtOTc6cX0sQT1mdW5jdGlvbih3ZSxVZSl7cmV0dXJuIHdlKzIyKzc1Kih3ZTwyNiktKCgwIT1VZSk8PDUpfSxhZT1mdW5jdGlvbih3ZSxVZSxKZSl7bGV0IG90PTA7Zm9yKHdlPUplP2Iod2UvNzAwKTp3ZT4+MSx3ZSs9Yih3ZS9VZSk7d2U+NDU1''@;'; put 'put ''O290Kz1xKXdlPWIod2UvMzUpO3JldHVybiBiKG90KzM2KndlLyh3ZSszOCkpfSx0ZT1mdW5jdGlvbih3ZSl7Y29uc3QgVWU9W10sSmU9d2UubGVuZ3RoO2xldCBvdD0wLE1lPTEyOCx2ZT03MixYZT13ZS5sYXN0SW5kZXhPZigiLSIpO1hlPDAmJihYZT0wKTtmb3IobGV0IGplPTA7amU8WGU7''@;'; put 'put ''KytqZSl3ZS5jaGFyQ29kZUF0KGplKT49MTI4JiZDKCJub3QtYmFzaWMiKSxVZS5wdXNoKHdlLmNoYXJDb2RlQXQoamUpKTtmb3IobGV0IGplPVhlPjA/WGUrMTowO2plPEplOyl7Y29uc3QgRGU9b3Q7Zm9yKGxldCBSZT0xLEllPXE7O0llKz1xKXtqZT49SmUmJkMoImludmFsaWQtaW5wdXQi''@;'; put 'put ''KTtjb25zdCBWZT1tKHdlLmNoYXJDb2RlQXQoamUrKykpO1ZlPj1xJiZDKCJpbnZhbGlkLWlucHV0IiksVmU+YigoWS1vdCkvUmUpJiZDKCJvdmVyZmxvdyIpLG90Kz1WZSpSZTtjb25zdCBrZT1JZTw9dmU/MTpJZT49dmUrMjY/MjY6SWUtdmU7aWYoVmU8a2UpYnJlYWs7Y29uc3QgQWU9cS1r''@;'; put 'put ''ZTtSZT5iKFkvQWUpJiZDKCJvdmVyZmxvdyIpLFJlKj1BZX1jb25zdCBGZT1VZS5sZW5ndGgrMTt2ZT1hZShvdC1EZSxGZSwwPT1EZSksYihvdC9GZSk+WS1NZSYmQygib3ZlcmZsb3ciKSxNZSs9YihvdC9GZSksb3QlPUZlLFVlLnNwbGljZShvdCsrLDAsTWUpfXJldHVybiBTdHJpbmcuZnJv''@;'; put 'put ''bUNvZGVQb2ludCguLi5VZSl9LHNlPWZ1bmN0aW9uKHdlKXtjb25zdCBVZT1bXSxKZT0od2U9aih3ZSkpLmxlbmd0aDtsZXQgb3Q9MTI4LE1lPTAsdmU9NzI7Zm9yKGNvbnN0IERlIG9mIHdlKURlPDEyOCYmVWUucHVzaCh4KERlKSk7Y29uc3QgWGU9VWUubGVuZ3RoO2xldCBqZT1YZTtmb3Io''@;'; put 'put ''WGUmJlVlLnB1c2goIi0iKTtqZTxKZTspe2xldCBEZT1ZO2Zvcihjb25zdCBSZSBvZiB3ZSlSZT49b3QmJlJlPERlJiYoRGU9UmUpO2NvbnN0IEZlPWplKzE7RGUtb3Q+YigoWS1NZSkvRmUpJiZDKCJvdmVyZmxvdyIpLE1lKz0oRGUtb3QpKkZlLG90PURlO2Zvcihjb25zdCBSZSBvZiB3ZSlp''@;'; put 'put ''ZihSZTxvdCYmKytNZT5ZJiZDKCJvdmVyZmxvdyIpLFJlPT09b3Qpe2xldCBJZT1NZTtmb3IobGV0IFZlPXE7O1ZlKz1xKXtjb25zdCBrZT1WZTw9dmU/MTpWZT49dmUrMjY/MjY6VmUtdmU7aWYoSWU8a2UpYnJlYWs7Y29uc3QgQWU9SWUta2UsX3Q9cS1rZTtVZS5wdXNoKHgoQShrZStBZSVf''@;'; put 'put ''dCwwKSkpLEllPWIoQWUvX3QpfVVlLnB1c2goeChBKEllLDApKSksdmU9YWUoTWUsRmUsamU9PT1YZSksTWU9MCwrK2plfSsrTWUsKytvdH1yZXR1cm4gVWUuam9pbigiIil9O3JldHVybiBJPXt2ZXJzaW9uOiIyLjMuMSIsdWNzMjp7ZGVjb2RlOmosZW5jb2RlOndlPT5TdHJpbmcuZnJvbUNv''@;'; put 'put ''ZGVQb2ludCguLi53ZSl9LGRlY29kZTp0ZSxlbmNvZGU6c2UsdG9BU0NJSTpmdW5jdGlvbih3ZSl7cmV0dXJuIEgod2UsZnVuY3Rpb24oVWUpe3JldHVybiBTZS50ZXN0KFVlKT8ieG4tLSIrc2UoVWUpOlVlfSl9LHRvVW5pY29kZTpmdW5jdGlvbih3ZSl7cmV0dXJuIEgod2UsZnVuY3Rpb24o''@;'; put 'put ''VWUpe3JldHVybiBUZS50ZXN0KFVlKT90ZShVZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpVZX0pfX19KCkpLEY9WyJhYyIsImNvbS5hYyIsImVkdS5hYyIsImdvdi5hYyIsIm1pbC5hYyIsIm5ldC5hYyIsIm9yZy5hYyIsImFkIiwiYWUiLCJhYy5hZSIsImNvLmFlIiwiZ292LmFlIiwibWls''@;'; put 'put ''LmFlIiwibmV0LmFlIiwib3JnLmFlIiwic2NoLmFlIiwiYWVybyIsImFpcmxpbmUuYWVybyIsImFpcnBvcnQuYWVybyIsImFjY2lkZW50LWludmVzdGlnYXRpb24uYWVybyIsImFjY2lkZW50LXByZXZlbnRpb24uYWVybyIsImFlcm9iYXRpYy5hZXJvIiwiYWVyb2NsdWIuYWVybyIsImFlcm9k''@;'; put 'put ''cm9tZS5hZXJvIiwiYWdlbnRzLmFlcm8iLCJhaXItc3VydmVpbGxhbmNlLmFlcm8iLCJhaXItdHJhZmZpYy1jb250cm9sLmFlcm8iLCJhaXJjcmFmdC5hZXJvIiwiYWlydHJhZmZpYy5hZXJvIiwiYW1idWxhbmNlLmFlcm8iLCJhc3NvY2lhdGlvbi5hZXJvIiwiYXV0aG9yLmFlcm8iLCJiYWxs''@;'; put 'put ''b29uaW5nLmFlcm8iLCJicm9rZXIuYWVybyIsImNhYS5hZXJvIiwiY2FyZ28uYWVybyIsImNhdGVyaW5nLmFlcm8iLCJjZXJ0aWZpY2F0aW9uLmFlcm8iLCJjaGFtcGlvbnNoaXAuYWVybyIsImNoYXJ0ZXIuYWVybyIsImNpdmlsYXZpYXRpb24uYWVybyIsImNsdWIuYWVybyIsImNvbmZlcmVu''@;'; put 'put ''Y2UuYWVybyIsImNvbnN1bHRhbnQuYWVybyIsImNvbnN1bHRpbmcuYWVybyIsImNvbnRyb2wuYWVybyIsImNvdW5jaWwuYWVybyIsImNyZXcuYWVybyIsImRlc2lnbi5hZXJvIiwiZGdjYS5hZXJvIiwiZWR1Y2F0b3IuYWVybyIsImVtZXJnZW5jeS5hZXJvIiwiZW5naW5lLmFlcm8iLCJlbmdp''@;'; put 'put ''bmVlci5hZXJvIiwiZW50ZXJ0YWlubWVudC5hZXJvIiwiZXF1aXBtZW50LmFlcm8iLCJleGNoYW5nZS5hZXJvIiwiZXhwcmVzcy5hZXJvIiwiZmVkZXJhdGlvbi5hZXJvIiwiZmxpZ2h0LmFlcm8iLCJmcmVpZ2h0LmFlcm8iLCJmdWVsLmFlcm8iLCJnbGlkaW5nLmFlcm8iLCJnb3Zlcm5tZW50''@;'; put 'put ''LmFlcm8iLCJncm91bmRoYW5kbGluZy5hZXJvIiwiZ3JvdXAuYWVybyIsImhhbmdnbGlkaW5nLmFlcm8iLCJob21lYnVpbHQuYWVybyIsImluc3VyYW5jZS5hZXJvIiwiam91cm5hbC5hZXJvIiwiam91cm5hbGlzdC5hZXJvIiwibGVhc2luZy5hZXJvIiwibG9naXN0aWNzLmFlcm8iLCJtYWdh''@;'; put 'put ''emluZS5hZXJvIiwibWFpbnRlbmFuY2UuYWVybyIsIm1hcmtldHBsYWNlLmFlcm8iLCJtZWRpYS5hZXJvIiwibWljcm9saWdodC5hZXJvIiwibW9kZWxsaW5nLmFlcm8iLCJuYXZpZ2F0aW9uLmFlcm8iLCJwYXJhY2h1dGluZy5hZXJvIiwicGFyYWdsaWRpbmcuYWVybyIsInBhc3Nlbmdlci1h''@;'; put 'put ''c3NvY2lhdGlvbi5hZXJvIiwicGlsb3QuYWVybyIsInByZXNzLmFlcm8iLCJwcm9kdWN0aW9uLmFlcm8iLCJyZWNyZWF0aW9uLmFlcm8iLCJyZXBib2R5LmFlcm8iLCJyZXMuYWVybyIsInJlc2VhcmNoLmFlcm8iLCJyb3RvcmNyYWZ0LmFlcm8iLCJzYWZldHkuYWVybyIsInNjaWVudGlzdC5h''@;'; put 'put ''ZXJvIiwic2VydmljZXMuYWVybyIsInNob3cuYWVybyIsInNreWRpdmluZy5hZXJvIiwic29mdHdhcmUuYWVybyIsInN0dWRlbnQuYWVybyIsInRheGkuYWVybyIsInRyYWRlci5hZXJvIiwidHJhZGluZy5hZXJvIiwidHJhaW5lci5hZXJvIiwidW5pb24uYWVybyIsIndvcmtpbmdncm91cC5h''@;'; put 'put ''ZXJvIiwid29ya3MuYWVybyIsImFmIiwiY29tLmFmIiwiZWR1LmFmIiwiZ292LmFmIiwibmV0LmFmIiwib3JnLmFmIiwiYWciLCJjby5hZyIsImNvbS5hZyIsIm5ldC5hZyIsIm5vbS5hZyIsIm9yZy5hZyIsImFpIiwiY29tLmFpIiwibmV0LmFpIiwib2ZmLmFpIiwib3JnLmFpIiwiYWwiLCJj''@;'; put 'put ''b20uYWwiLCJlZHUuYWwiLCJnb3YuYWwiLCJtaWwuYWwiLCJuZXQuYWwiLCJvcmcuYWwiLCJhbSIsImNvLmFtIiwiY29tLmFtIiwiY29tbXVuZS5hbSIsIm5ldC5hbSIsIm9yZy5hbSIsImFvIiwiY28uYW8iLCJlZC5hbyIsImVkdS5hbyIsImdvdi5hbyIsImd2LmFvIiwiaXQuYW8iLCJvZy5h''@;'; put 'put ''byIsIm9yZy5hbyIsInBiLmFvIiwiYXEiLCJhciIsImJldC5hciIsImNvbS5hciIsImNvb3AuYXIiLCJlZHUuYXIiLCJnb2IuYXIiLCJnb3YuYXIiLCJpbnQuYXIiLCJtaWwuYXIiLCJtdXNpY2EuYXIiLCJtdXR1YWwuYXIiLCJuZXQuYXIiLCJvcmcuYXIiLCJzZW5hc2EuYXIiLCJ0dXIuYXIi''@;'; put 'put ''LCJhcnBhIiwiZTE2NC5hcnBhIiwiaG9tZS5hcnBhIiwiaW4tYWRkci5hcnBhIiwiaXA2LmFycGEiLCJpcmlzLmFycGEiLCJ1cmkuYXJwYSIsInVybi5hcnBhIiwiYXMiLCJnb3YuYXMiLCJhc2lhIiwiYXQiLCJhYy5hdCIsInN0aC5hYy5hdCIsImNvLmF0IiwiZ3YuYXQiLCJvci5hdCIsImF1''@;'; put 'put ''IiwiYXNuLmF1IiwiY29tLmF1IiwiZWR1LmF1IiwiZ292LmF1IiwiaWQuYXUiLCJuZXQuYXUiLCJvcmcuYXUiLCJjb25mLmF1Iiwib3ouYXUiLCJhY3QuYXUiLCJuc3cuYXUiLCJudC5hdSIsInFsZC5hdSIsInNhLmF1IiwidGFzLmF1IiwidmljLmF1Iiwid2EuYXUiLCJhY3QuZWR1LmF1Iiwi''@;'; put 'put ''Y2F0aG9saWMuZWR1LmF1IiwibnN3LmVkdS5hdSIsIm50LmVkdS5hdSIsInFsZC5lZHUuYXUiLCJzYS5lZHUuYXUiLCJ0YXMuZWR1LmF1IiwidmljLmVkdS5hdSIsIndhLmVkdS5hdSIsInFsZC5nb3YuYXUiLCJzYS5nb3YuYXUiLCJ0YXMuZ292LmF1IiwidmljLmdvdi5hdSIsIndhLmdvdi5h''@;'; put 'put ''dSIsInNjaG9vbHMubnN3LmVkdS5hdSIsImF3IiwiY29tLmF3IiwiYXgiLCJheiIsImJpei5heiIsImNvbS5heiIsImVkdS5heiIsImdvdi5heiIsImluZm8uYXoiLCJpbnQuYXoiLCJtaWwuYXoiLCJuYW1lLmF6IiwibmV0LmF6Iiwib3JnLmF6IiwicHAuYXoiLCJwcm8uYXoiLCJiYSIsImNv''@;'; put 'put ''bS5iYSIsImVkdS5iYSIsImdvdi5iYSIsIm1pbC5iYSIsIm5ldC5iYSIsIm9yZy5iYSIsImJiIiwiYml6LmJiIiwiY28uYmIiLCJjb20uYmIiLCJlZHUuYmIiLCJnb3YuYmIiLCJpbmZvLmJiIiwibmV0LmJiIiwib3JnLmJiIiwic3RvcmUuYmIiLCJ0di5iYiIsIiouYmQiLCJiZSIsImFjLmJl''@;'; put 'put ''IiwiYmYiLCJnb3YuYmYiLCJiZyIsIjAuYmciLCIxLmJnIiwiMi5iZyIsIjMuYmciLCI0LmJnIiwiNS5iZyIsIjYuYmciLCI3LmJnIiwiOC5iZyIsIjkuYmciLCJhLmJnIiwiYi5iZyIsImMuYmciLCJkLmJnIiwiZS5iZyIsImYuYmciLCJnLmJnIiwiaC5iZyIsImkuYmciLCJqLmJnIiwiay5i''@;'; put 'put ''ZyIsImwuYmciLCJtLmJnIiwibi5iZyIsIm8uYmciLCJwLmJnIiwicS5iZyIsInIuYmciLCJzLmJnIiwidC5iZyIsInUuYmciLCJ2LmJnIiwidy5iZyIsInguYmciLCJ5LmJnIiwiei5iZyIsImJoIiwiY29tLmJoIiwiZWR1LmJoIiwiZ292LmJoIiwibmV0LmJoIiwib3JnLmJoIiwiYmkiLCJj''@;'; put 'put ''by5iaSIsImNvbS5iaSIsImVkdS5iaSIsIm9yLmJpIiwib3JnLmJpIiwiYml6IiwiYmoiLCJhZnJpY2EuYmoiLCJhZ3JvLmJqIiwiYXJjaGl0ZWN0ZXMuYmoiLCJhc3N1ci5iaiIsImF2b2NhdHMuYmoiLCJjby5iaiIsImNvbS5iaiIsImVjby5iaiIsImVjb25vLmJqIiwiZWR1LmJqIiwiaW5m''@;'; put 'put ''by5iaiIsImxvaXNpcnMuYmoiLCJtb25leS5iaiIsIm5ldC5iaiIsIm9yZy5iaiIsIm90ZS5iaiIsInJlc3RhdXJhbnQuYmoiLCJyZXN0by5iaiIsInRvdXJpc20uYmoiLCJ1bml2LmJqIiwiYm0iLCJjb20uYm0iLCJlZHUuYm0iLCJnb3YuYm0iLCJuZXQuYm0iLCJvcmcuYm0iLCJibiIsImNv''@;'; put 'put ''bS5ibiIsImVkdS5ibiIsImdvdi5ibiIsIm5ldC5ibiIsIm9yZy5ibiIsImJvIiwiY29tLmJvIiwiZWR1LmJvIiwiZ29iLmJvIiwiaW50LmJvIiwibWlsLmJvIiwibmV0LmJvIiwib3JnLmJvIiwidHYuYm8iLCJ3ZWIuYm8iLCJhY2FkZW1pYS5ibyIsImFncm8uYm8iLCJhcnRlLmJvIiwiYmxv''@;'; put 'put ''Zy5ibyIsImJvbGl2aWEuYm8iLCJjaWVuY2lhLmJvIiwiY29vcGVyYXRpdmEuYm8iLCJkZW1vY3JhY2lhLmJvIiwiZGVwb3J0ZS5ibyIsImVjb2xvZ2lhLmJvIiwiZWNvbm9taWEuYm8iLCJlbXByZXNhLmJvIiwiaW5kaWdlbmEuYm8iLCJpbmR1c3RyaWEuYm8iLCJpbmZvLmJvIiwibWVkaWNp''@;'; put 'put ''bmEuYm8iLCJtb3ZpbWllbnRvLmJvIiwibXVzaWNhLmJvIiwibmF0dXJhbC5ibyIsIm5vbWJyZS5ibyIsIm5vdGljaWFzLmJvIiwicGF0cmlhLmJvIiwicGx1cmluYWNpb25hbC5ibyIsInBvbGl0aWNhLmJvIiwicHJvZmVzaW9uYWwuYm8iLCJwdWVibG8uYm8iLCJyZXZpc3RhLmJvIiwic2Fs''@;'; put 'put ''dWQuYm8iLCJ0ZWNub2xvZ2lhLmJvIiwidGtzYXQuYm8iLCJ0cmFuc3BvcnRlLmJvIiwid2lraS5ibyIsImJyIiwiOWd1YWN1LmJyIiwiYWJjLmJyIiwiYWRtLmJyIiwiYWR2LmJyIiwiYWdyLmJyIiwiYWp1LmJyIiwiYW0uYnIiLCJhbmFuaS5iciIsImFwYXJlY2lkYS5iciIsImFwcC5iciIs''@;'; put 'put ''ImFycS5iciIsImFydC5iciIsImF0by5iciIsImIuYnIiLCJiYXJ1ZXJpLmJyIiwiYmVsZW0uYnIiLCJiZXQuYnIiLCJiaHouYnIiLCJiaWIuYnIiLCJiaW8uYnIiLCJibG9nLmJyIiwiYm1kLmJyIiwiYm9hdmlzdGEuYnIiLCJic2IuYnIiLCJjYW1waW5hZ3JhbmRlLmJyIiwiY2FtcGluYXMu''@;'; put 'put ''YnIiLCJjYXhpYXMuYnIiLCJjaW0uYnIiLCJjbmcuYnIiLCJjbnQuYnIiLCJjb20uYnIiLCJjb250YWdlbS5iciIsImNvb3AuYnIiLCJjb3ouYnIiLCJjcmkuYnIiLCJjdWlhYmEuYnIiLCJjdXJpdGliYS5iciIsImRlZi5iciIsImRlcy5iciIsImRldC5iciIsImRldi5iciIsImVjbi5iciIs''@;'; put 'put ''ImVjby5iciIsImVkdS5iciIsImVtcC5iciIsImVuZi5iciIsImVuZy5iciIsImVzcC5iciIsImV0Yy5iciIsImV0aS5iciIsImZhci5iciIsImZlaXJhLmJyIiwiZmxvZy5iciIsImZsb3JpcGEuYnIiLCJmbS5iciIsImZuZC5iciIsImZvcnRhbC5iciIsImZvdC5iciIsImZvei5iciIsImZz''@;'; put 'put ''dC5iciIsImcxMi5iciIsImdlby5iciIsImdnZi5iciIsImdvaWFuaWEuYnIiLCJnb3YuYnIiLCJhYy5nb3YuYnIiLCJhbC5nb3YuYnIiLCJhbS5nb3YuYnIiLCJhcC5nb3YuYnIiLCJiYS5nb3YuYnIiLCJjZS5nb3YuYnIiLCJkZi5nb3YuYnIiLCJlcy5nb3YuYnIiLCJnby5nb3YuYnIiLCJt''@;'; put 'put ''YS5nb3YuYnIiLCJtZy5nb3YuYnIiLCJtcy5nb3YuYnIiLCJtdC5nb3YuYnIiLCJwYS5nb3YuYnIiLCJwYi5nb3YuYnIiLCJwZS5nb3YuYnIiLCJwaS5nb3YuYnIiLCJwci5nb3YuYnIiLCJyai5nb3YuYnIiLCJybi5nb3YuYnIiLCJyby5nb3YuYnIiLCJyci5nb3YuYnIiLCJycy5nb3YuYnIi''@;'; put 'put ''LCJzYy5nb3YuYnIiLCJzZS5nb3YuYnIiLCJzcC5nb3YuYnIiLCJ0by5nb3YuYnIiLCJncnUuYnIiLCJpbWIuYnIiLCJpbmQuYnIiLCJpbmYuYnIiLCJqYWIuYnIiLCJqYW1wYS5iciIsImpkZi5iciIsImpvaW52aWxsZS5iciIsImpvci5iciIsImp1cy5iciIsImxlZy5iciIsImxlaWxhby5i''@;'; put 'put ''ciIsImxlbC5iciIsImxvZy5iciIsImxvbmRyaW5hLmJyIiwibWFjYXBhLmJyIiwibWFjZWlvLmJyIiwibWFuYXVzLmJyIiwibWFyaW5nYS5iciIsIm1hdC5iciIsIm1lZC5iciIsIm1pbC5iciIsIm1vcmVuYS5iciIsIm1wLmJyIiwibXVzLmJyIiwibmF0YWwuYnIiLCJuZXQuYnIiLCJuaXRl''@;'; put 'put ''cm9pLmJyIiwiKi5ub20uYnIiLCJub3QuYnIiLCJudHIuYnIiLCJvZG8uYnIiLCJvbmcuYnIiLCJvcmcuYnIiLCJvc2FzY28uYnIiLCJwYWxtYXMuYnIiLCJwb2EuYnIiLCJwcGcuYnIiLCJwcm8uYnIiLCJwc2MuYnIiLCJwc2kuYnIiLCJwdmguYnIiLCJxc2wuYnIiLCJyYWRpby5iciIsInJl''@;'; put 'put ''Yy5iciIsInJlY2lmZS5iciIsInJlcC5iciIsInJpYmVpcmFvLmJyIiwicmlvLmJyIiwicmlvYnJhbmNvLmJyIiwicmlvcHJldG8uYnIiLCJzYWx2YWRvci5iciIsInNhbXBhLmJyIiwic2FudGFtYXJpYS5iciIsInNhbnRvYW5kcmUuYnIiLCJzYW9iZXJuYXJkby5iciIsInNhb2dvbmNhLmJy''@;'; put 'put ''Iiwic2VnLmJyIiwic2pjLmJyIiwic2xnLmJyIiwic2x6LmJyIiwic29yb2NhYmEuYnIiLCJzcnYuYnIiLCJ0YXhpLmJyIiwidGMuYnIiLCJ0ZWMuYnIiLCJ0ZW8uYnIiLCJ0aGUuYnIiLCJ0bXAuYnIiLCJ0cmQuYnIiLCJ0dXIuYnIiLCJ0di5iciIsInVkaS5iciIsInZldC5iciIsInZpeC5i''@;'; put 'put ''ciIsInZsb2cuYnIiLCJ3aWtpLmJyIiwiemxnLmJyIiwiYnMiLCJjb20uYnMiLCJlZHUuYnMiLCJnb3YuYnMiLCJuZXQuYnMiLCJvcmcuYnMiLCJidCIsImNvbS5idCIsImVkdS5idCIsImdvdi5idCIsIm5ldC5idCIsIm9yZy5idCIsImJ2IiwiYnciLCJjby5idyIsIm9yZy5idyIsImJ5Iiwi''@;'; put 'put ''Z292LmJ5IiwibWlsLmJ5IiwiY29tLmJ5Iiwib2YuYnkiLCJieiIsImNvLmJ6IiwiY29tLmJ6IiwiZWR1LmJ6IiwiZ292LmJ6IiwibmV0LmJ6Iiwib3JnLmJ6IiwiY2EiLCJhYi5jYSIsImJjLmNhIiwibWIuY2EiLCJuYi5jYSIsIm5mLmNhIiwibmwuY2EiLCJucy5jYSIsIm50LmNhIiwibnUu''@;'; put 'put ''Y2EiLCJvbi5jYSIsInBlLmNhIiwicWMuY2EiLCJzay5jYSIsInlrLmNhIiwiZ2MuY2EiLCJjYXQiLCJjYyIsImNkIiwiZ292LmNkIiwiY2YiLCJjZyIsImNoIiwiY2kiLCJhYy5jaSIsImFceGU5cm9wb3J0LmNpIiwiYXNzby5jaSIsImNvLmNpIiwiY29tLmNpIiwiZWQuY2kiLCJlZHUuY2ki''@;'; put 'put ''LCJnby5jaSIsImdvdXYuY2kiLCJpbnQuY2kiLCJuZXQuY2kiLCJvci5jaSIsIm9yZy5jaSIsIiouY2siLCIhd3d3LmNrIiwiY2wiLCJjby5jbCIsImdvYi5jbCIsImdvdi5jbCIsIm1pbC5jbCIsImNtIiwiY28uY20iLCJjb20uY20iLCJnb3YuY20iLCJuZXQuY20iLCJjbiIsImFjLmNuIiwi''@;'; put 'put ''Y29tLmNuIiwiZWR1LmNuIiwiZ292LmNuIiwibWlsLmNuIiwibmV0LmNuIiwib3JnLmNuIiwiXHU1MTZjXHU1M2Y4LmNuIiwiXHU3ZGIyXHU3ZDYxLmNuIiwiXHU3ZjUxXHU3ZWRjLmNuIiwiYWguY24iLCJiai5jbiIsImNxLmNuIiwiZmouY24iLCJnZC5jbiIsImdzLmNuIiwiZ3guY24iLCJn''@;'; put 'put ''ei5jbiIsImhhLmNuIiwiaGIuY24iLCJoZS5jbiIsImhpLmNuIiwiaGsuY24iLCJobC5jbiIsImhuLmNuIiwiamwuY24iLCJqcy5jbiIsImp4LmNuIiwibG4uY24iLCJtby5jbiIsIm5tLmNuIiwibnguY24iLCJxaC5jbiIsInNjLmNuIiwic2QuY24iLCJzaC5jbiIsInNuLmNuIiwic3guY24i''@;'; put 'put ''LCJ0ai5jbiIsInR3LmNuIiwieGouY24iLCJ4ei5jbiIsInluLmNuIiwiemouY24iLCJjbyIsImNvbS5jbyIsImVkdS5jbyIsImdvdi5jbyIsIm1pbC5jbyIsIm5ldC5jbyIsIm5vbS5jbyIsIm9yZy5jbyIsImNvbSIsImNvb3AiLCJjciIsImFjLmNyIiwiY28uY3IiLCJlZC5jciIsImZpLmNy''@;'; put 'put ''IiwiZ28uY3IiLCJvci5jciIsInNhLmNyIiwiY3UiLCJjb20uY3UiLCJlZHUuY3UiLCJnb2IuY3UiLCJpbmYuY3UiLCJuYXQuY3UiLCJuZXQuY3UiLCJvcmcuY3UiLCJjdiIsImNvbS5jdiIsImVkdS5jdiIsImlkLmN2IiwiaW50LmN2IiwibmV0LmN2Iiwibm9tZS5jdiIsIm9yZy5jdiIsInB1''@;'; put 'put ''YmwuY3YiLCJjdyIsImNvbS5jdyIsImVkdS5jdyIsIm5ldC5jdyIsIm9yZy5jdyIsImN4IiwiZ292LmN4IiwiY3kiLCJhYy5jeSIsImJpei5jeSIsImNvbS5jeSIsImVrbG9nZXMuY3kiLCJnb3YuY3kiLCJsdGQuY3kiLCJtaWwuY3kiLCJuZXQuY3kiLCJvcmcuY3kiLCJwcmVzcy5jeSIsInBy''@;'; put 'put ''by5jeSIsInRtLmN5IiwiY3oiLCJkZSIsImRqIiwiZGsiLCJkbSIsImNvLmRtIiwiY29tLmRtIiwiZWR1LmRtIiwiZ292LmRtIiwibmV0LmRtIiwib3JnLmRtIiwiZG8iLCJhcnQuZG8iLCJjb20uZG8iLCJlZHUuZG8iLCJnb2IuZG8iLCJnb3YuZG8iLCJtaWwuZG8iLCJuZXQuZG8iLCJvcmcu''@;'; put 'put ''ZG8iLCJzbGQuZG8iLCJ3ZWIuZG8iLCJkeiIsImFydC5keiIsImFzc28uZHoiLCJjb20uZHoiLCJlZHUuZHoiLCJnb3YuZHoiLCJuZXQuZHoiLCJvcmcuZHoiLCJwb2wuZHoiLCJzb2MuZHoiLCJ0bS5keiIsImVjIiwiY29tLmVjIiwiZWR1LmVjIiwiZmluLmVjIiwiZ29iLmVjIiwiZ292LmVj''@;'; put 'put ''IiwiaW5mby5lYyIsImsxMi5lYyIsIm1lZC5lYyIsIm1pbC5lYyIsIm5ldC5lYyIsIm9yZy5lYyIsInByby5lYyIsImVkdSIsImVlIiwiYWlwLmVlIiwiY29tLmVlIiwiZWR1LmVlIiwiZmllLmVlIiwiZ292LmVlIiwibGliLmVlIiwibWVkLmVlIiwib3JnLmVlIiwicHJpLmVlIiwicmlpay5l''@;'; put 'put ''ZSIsImVnIiwiYWMuZWciLCJjb20uZWciLCJlZHUuZWciLCJldW4uZWciLCJnb3YuZWciLCJpbmZvLmVnIiwibWUuZWciLCJtaWwuZWciLCJuYW1lLmVnIiwibmV0LmVnIiwib3JnLmVnIiwic2NpLmVnIiwic3BvcnQuZWciLCJ0di5lZyIsIiouZXIiLCJlcyIsImNvbS5lcyIsImVkdS5lcyIs''@;'; put 'put ''ImdvYi5lcyIsIm5vbS5lcyIsIm9yZy5lcyIsImV0IiwiYml6LmV0IiwiY29tLmV0IiwiZWR1LmV0IiwiZ292LmV0IiwiaW5mby5ldCIsIm5hbWUuZXQiLCJuZXQuZXQiLCJvcmcuZXQiLCJldSIsImZpIiwiYWxhbmQuZmkiLCJmaiIsImFjLmZqIiwiYml6LmZqIiwiY29tLmZqIiwiZ292LmZq''@;'; put 'put ''IiwiaW5mby5maiIsIm1pbC5maiIsIm5hbWUuZmoiLCJuZXQuZmoiLCJvcmcuZmoiLCJwcm8uZmoiLCIqLmZrIiwiZm0iLCJjb20uZm0iLCJlZHUuZm0iLCJuZXQuZm0iLCJvcmcuZm0iLCJmbyIsImZyIiwiYXNzby5mciIsImNvbS5mciIsImdvdXYuZnIiLCJub20uZnIiLCJwcmQuZnIiLCJ0''@;'; put 'put ''bS5mciIsImF2b3Vlcy5mciIsImNjaS5mciIsImdyZXRhLmZyIiwiaHVpc3NpZXItanVzdGljZS5mciIsImdhIiwiZ2IiLCJnZCIsImVkdS5nZCIsImdvdi5nZCIsImdlIiwiY29tLmdlIiwiZWR1LmdlIiwiZ292LmdlIiwibmV0LmdlIiwib3JnLmdlIiwicHZ0LmdlIiwic2Nob29sLmdlIiwi''@;'; put 'put ''Z2YiLCJnZyIsImNvLmdnIiwibmV0LmdnIiwib3JnLmdnIiwiZ2giLCJjb20uZ2giLCJlZHUuZ2giLCJnb3YuZ2giLCJtaWwuZ2giLCJvcmcuZ2giLCJnaSIsImNvbS5naSIsImVkdS5naSIsImdvdi5naSIsImx0ZC5naSIsIm1vZC5naSIsIm9yZy5naSIsImdsIiwiY28uZ2wiLCJjb20uZ2wi''@;'; put 'put ''LCJlZHUuZ2wiLCJuZXQuZ2wiLCJvcmcuZ2wiLCJnbSIsImduIiwiYWMuZ24iLCJjb20uZ24iLCJlZHUuZ24iLCJnb3YuZ24iLCJuZXQuZ24iLCJvcmcuZ24iLCJnb3YiLCJncCIsImFzc28uZ3AiLCJjb20uZ3AiLCJlZHUuZ3AiLCJtb2JpLmdwIiwibmV0LmdwIiwib3JnLmdwIiwiZ3EiLCJn''@;'; put 'put ''ciIsImNvbS5nciIsImVkdS5nciIsImdvdi5nciIsIm5ldC5nciIsIm9yZy5nciIsImdzIiwiZ3QiLCJjb20uZ3QiLCJlZHUuZ3QiLCJnb2IuZ3QiLCJpbmQuZ3QiLCJtaWwuZ3QiLCJuZXQuZ3QiLCJvcmcuZ3QiLCJndSIsImNvbS5ndSIsImVkdS5ndSIsImdvdi5ndSIsImd1YW0uZ3UiLCJp''@;'; put 'put ''bmZvLmd1IiwibmV0Lmd1Iiwib3JnLmd1Iiwid2ViLmd1IiwiZ3ciLCJneSIsImNvLmd5IiwiY29tLmd5IiwiZWR1Lmd5IiwiZ292Lmd5IiwibmV0Lmd5Iiwib3JnLmd5IiwiaGsiLCJjb20uaGsiLCJlZHUuaGsiLCJnb3YuaGsiLCJpZHYuaGsiLCJuZXQuaGsiLCJvcmcuaGsiLCJcdTRlMmFc''@;'; put 'put ''dTRlYmEuaGsiLCJcdTUwMGJcdTRlYmEuaGsiLCJcdTUxNmNcdTUzZjguaGsiLCJcdTY1M2ZcdTVlOWMuaGsiLCJcdTY1NGVcdTgwYjIuaGsiLCJcdTY1NTlcdTgwYjIuaGsiLCJcdTdiODdcdTRlYmEuaGsiLCJcdTdkNDRcdTdlNTQuaGsiLCJcdTdkNDRcdTdlYzcuaGsiLCJcdTdkYjJcdTdk''@;'; put 'put ''NjEuaGsiLCJcdTdkYjJcdTdlZGMuaGsiLCJcdTdlYzRcdTdlNTQuaGsiLCJcdTdlYzRcdTdlYzcuaGsiLCJcdTdmNTFcdTdkNjEuaGsiLCJcdTdmNTFcdTdlZGMuaGsiLCJobSIsImhuIiwiY29tLmhuIiwiZWR1LmhuIiwiZ29iLmhuIiwibWlsLmhuIiwibmV0LmhuIiwib3JnLmhuIiwiaHIi''@;'; put 'put ''LCJjb20uaHIiLCJmcm9tLmhyIiwiaXouaHIiLCJuYW1lLmhyIiwiaHQiLCJhZHVsdC5odCIsImFydC5odCIsImFzc28uaHQiLCJjb20uaHQiLCJjb29wLmh0IiwiZWR1Lmh0IiwiZmlybS5odCIsImdvdXYuaHQiLCJpbmZvLmh0IiwibWVkLmh0IiwibmV0Lmh0Iiwib3JnLmh0IiwicGVyc28u''@;'; put 'put ''aHQiLCJwb2wuaHQiLCJwcm8uaHQiLCJyZWwuaHQiLCJzaG9wLmh0IiwiaHUiLCIyMDAwLmh1IiwiYWdyYXIuaHUiLCJib2x0Lmh1IiwiY2FzaW5vLmh1IiwiY2l0eS5odSIsImNvLmh1IiwiZXJvdGljYS5odSIsImVyb3Rpa2EuaHUiLCJmaWxtLmh1IiwiZm9ydW0uaHUiLCJnYW1lcy5odSIs''@;'; put 'put ''ImhvdGVsLmh1IiwiaW5mby5odSIsImluZ2F0bGFuLmh1Iiwiam9nYXN6Lmh1Iiwia29ueXZlbG8uaHUiLCJsYWthcy5odSIsIm1lZGlhLmh1IiwibmV3cy5odSIsIm9yZy5odSIsInByaXYuaHUiLCJyZWtsYW0uaHUiLCJzZXguaHUiLCJzaG9wLmh1Iiwic3BvcnQuaHUiLCJzdWxpLmh1Iiwi''@;'; put 'put ''c3pleC5odSIsInRtLmh1IiwidG96c2RlLmh1IiwidXRhemFzLmh1IiwidmlkZW8uaHUiLCJpZCIsImFjLmlkIiwiYml6LmlkIiwiY28uaWQiLCJkZXNhLmlkIiwiZ28uaWQiLCJtaWwuaWQiLCJteS5pZCIsIm5ldC5pZCIsIm9yLmlkIiwicG9ucGVzLmlkIiwic2NoLmlkIiwid2ViLmlkIiwi''@;'; put 'put ''aWUiLCJnb3YuaWUiLCJpbCIsImFjLmlsIiwiY28uaWwiLCJnb3YuaWwiLCJpZGYuaWwiLCJrMTIuaWwiLCJtdW5pLmlsIiwibmV0LmlsIiwib3JnLmlsIiwiXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQwXHUwNWU3XHUwNWQzXHUwNWRlXHUwNWQ5XHUwNWQ0Llx1MDVk''@;'; put 'put ''OVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkOVx1MDVlOVx1MDVkNVx1MDVkMS5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZTZcdTA1ZDRcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWRlXHUwNWRlXHUwNWU5XHUwNWRjLlx1''@;'; put 'put ''MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsImltIiwiYWMuaW0iLCJjby5pbSIsImx0ZC5jby5pbSIsInBsYy5jby5pbSIsImNvbS5pbSIsIm5ldC5pbSIsIm9yZy5pbSIsInR0LmltIiwidHYuaW0iLCJpbiIsIjVnLmluIiwiNmcuaW4iLCJhYy5pbiIsImFpLmluIiwiYW0uaW4iLCJi''@;'; put 'put ''aWhhci5pbiIsImJpei5pbiIsImJ1c2luZXNzLmluIiwiY2EuaW4iLCJjbi5pbiIsImNvLmluIiwiY29tLmluIiwiY29vcC5pbiIsImNzLmluIiwiZGVsaGkuaW4iLCJkci5pbiIsImVkdS5pbiIsImVyLmluIiwiZmlybS5pbiIsImdlbi5pbiIsImdvdi5pbiIsImd1amFyYXQuaW4iLCJpbmQu''@;'; put 'put ''aW4iLCJpbmZvLmluIiwiaW50LmluIiwiaW50ZXJuZXQuaW4iLCJpby5pbiIsIm1lLmluIiwibWlsLmluIiwibmV0LmluIiwibmljLmluIiwib3JnLmluIiwicGcuaW4iLCJwb3N0LmluIiwicHJvLmluIiwicmVzLmluIiwidHJhdmVsLmluIiwidHYuaW4iLCJ1ay5pbiIsInVwLmluIiwidXMu''@;'; put 'put ''aW4iLCJpbmZvIiwiaW50IiwiZXUuaW50IiwiaW8iLCJjby5pbyIsImNvbS5pbyIsImVkdS5pbyIsImdvdi5pbyIsIm1pbC5pbyIsIm5ldC5pbyIsIm5vbS5pbyIsIm9yZy5pbyIsImlxIiwiY29tLmlxIiwiZWR1LmlxIiwiZ292LmlxIiwibWlsLmlxIiwibmV0LmlxIiwib3JnLmlxIiwiaXIi''@;'; put 'put ''LCJhYy5pciIsImNvLmlyIiwiZ292LmlyIiwiaWQuaXIiLCJuZXQuaXIiLCJvcmcuaXIiLCJzY2guaXIiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJpcyIsIml0IiwiZWR1Lml0IiwiZ292Lml0IiwiYWJy''@;'; put 'put ''Lml0IiwiYWJydXp6by5pdCIsImFvc3RhLXZhbGxleS5pdCIsImFvc3RhdmFsbGV5Lml0IiwiYmFzLml0IiwiYmFzaWxpY2F0YS5pdCIsImNhbC5pdCIsImNhbGFicmlhLml0IiwiY2FtLml0IiwiY2FtcGFuaWEuaXQiLCJlbWlsaWEtcm9tYWduYS5pdCIsImVtaWxpYXJvbWFnbmEuaXQiLCJl''@;'; put 'put ''bXIuaXQiLCJmcml1bGktdi1naXVsaWEuaXQiLCJmcml1bGktdmUtZ2l1bGlhLml0IiwiZnJpdWxpLXZlZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGktdmdpdWxpYS5pdCIsImZyaXVsaXYtZ2l1bGlhLml0Iiwi''@;'; put 'put ''ZnJpdWxpdmUtZ2l1bGlhLml0IiwiZnJpdWxpdmVnaXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGl2Z2l1bGlhLml0IiwiZnZnLml0IiwibGF6Lml0IiwibGF6aW8uaXQiLCJsaWcuaXQiLCJsaWd1cmlhLml0IiwibG9t''@;'; put 'put ''Lml0IiwibG9tYmFyZGlhLml0IiwibG9tYmFyZHkuaXQiLCJsdWNhbmlhLml0IiwibWFyLml0IiwibWFyY2hlLml0IiwibW9sLml0IiwibW9saXNlLml0IiwicGllZG1vbnQuaXQiLCJwaWVtb250ZS5pdCIsInBtbi5pdCIsInB1Zy5pdCIsInB1Z2xpYS5pdCIsInNhci5pdCIsInNhcmRlZ25h''@;'; put 'put ''Lml0Iiwic2FyZGluaWEuaXQiLCJzaWMuaXQiLCJzaWNpbGlhLml0Iiwic2ljaWx5Lml0IiwidGFhLml0IiwidG9zLml0IiwidG9zY2FuYS5pdCIsInRyZW50aW4tc3VkLXRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZHRpcm9sLml0IiwidHJlbnRpbi1z''@;'; put 'put ''XHhmY2R0aXJvbC5pdCIsInRyZW50aW4tc3VlZC10aXJvbC5pdCIsInRyZW50aW4tc3VlZHRpcm9sLml0IiwidHJlbnRpbm8uaXQiLCJ0cmVudGluby1hLWFkaWdlLml0IiwidHJlbnRpbm8tYWFkaWdlLml0IiwidHJlbnRpbm8tYWx0by1hZGlnZS5pdCIsInRyZW50aW5vLWFsdG9hZGlnZS5p''@;'; put 'put ''dCIsInRyZW50aW5vLXMtdGlyb2wuaXQiLCJ0cmVudGluby1zdGlyb2wuaXQiLCJ0cmVudGluby1zdWQtdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluby1zdWR0aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbm8tc3VlZC10aXJv''@;'; put 'put ''bC5pdCIsInRyZW50aW5vLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vYS1hZGlnZS5pdCIsInRyZW50aW5vYWFkaWdlLml0IiwidHJlbnRpbm9hbHRvLWFkaWdlLml0IiwidHJlbnRpbm9hbHRvYWRpZ2UuaXQiLCJ0cmVudGlub3MtdGlyb2wuaXQiLCJ0cmVudGlub3N0aXJvbC5pdCIsInRyZW50''@;'; put 'put ''aW5vc3VkLXRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZHRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vc3VlZC10aXJvbC5pdCIsInRyZW50aW5vc3VlZHRpcm9sLml0IiwidHJlbnRpbnN1ZC10aXJvbC5pdCIsInRyZW50''@;'; put 'put ''aW5zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluc3VkdGlyb2wuaXQiLCJ0cmVudGluc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluc3VlZC10aXJvbC5pdCIsInRyZW50aW5zdWVkdGlyb2wuaXQiLCJ0dXNjYW55Lml0IiwidW1iLml0IiwidW1icmlhLml0IiwidmFsLWQtYW9zdGEuaXQiLCJ2YWwt''@;'; put 'put ''ZGFvc3RhLml0IiwidmFsZC1hb3N0YS5pdCIsInZhbGRhb3N0YS5pdCIsInZhbGxlLWFvc3RhLml0IiwidmFsbGUtZC1hb3N0YS5pdCIsInZhbGxlLWRhb3N0YS5pdCIsInZhbGxlYW9zdGEuaXQiLCJ2YWxsZWQtYW9zdGEuaXQiLCJ2YWxsZWRhb3N0YS5pdCIsInZhbGxlZS1hb3N0ZS5pdCIs''@;'; put 'put ''InZhbGxceGU5ZS1hb3N0ZS5pdCIsInZhbGxlZS1kLWFvc3RlLml0IiwidmFsbFx4ZTllLWQtYW9zdGUuaXQiLCJ2YWxsZWVhb3N0ZS5pdCIsInZhbGxceGU5ZWFvc3RlLml0IiwidmFsbGVlZGFvc3RlLml0IiwidmFsbFx4ZTllZGFvc3RlLml0IiwidmFvLml0IiwidmRhLml0IiwidmVuLml0''@;'; put 'put ''IiwidmVuZXRvLml0IiwiYWcuaXQiLCJhZ3JpZ2VudG8uaXQiLCJhbC5pdCIsImFsZXNzYW5kcmlhLml0IiwiYWx0by1hZGlnZS5pdCIsImFsdG9hZGlnZS5pdCIsImFuLml0IiwiYW5jb25hLml0IiwiYW5kcmlhLWJhcmxldHRhLXRyYW5pLml0IiwiYW5kcmlhLXRyYW5pLWJhcmxldHRhLml0''@;'; put 'put ''IiwiYW5kcmlhYmFybGV0dGF0cmFuaS5pdCIsImFuZHJpYXRyYW5pYmFybGV0dGEuaXQiLCJhby5pdCIsImFvc3RhLml0IiwiYW9zdGUuaXQiLCJhcC5pdCIsImFxLml0IiwiYXF1aWxhLml0IiwiYXIuaXQiLCJhcmV6em8uaXQiLCJhc2NvbGktcGljZW5vLml0IiwiYXNjb2xpcGljZW5vLml0''@;'; put 'put ''IiwiYXN0aS5pdCIsImF0Lml0IiwiYXYuaXQiLCJhdmVsbGluby5pdCIsImJhLml0IiwiYmFsc2FuLml0IiwiYmFsc2FuLXN1ZHRpcm9sLml0IiwiYmFsc2FuLXNceGZjZHRpcm9sLml0IiwiYmFsc2FuLXN1ZWR0aXJvbC5pdCIsImJhcmkuaXQiLCJiYXJsZXR0YS10cmFuaS1hbmRyaWEuaXQi''@;'; put 'put ''LCJiYXJsZXR0YXRyYW5pYW5kcmlhLml0IiwiYmVsbHVuby5pdCIsImJlbmV2ZW50by5pdCIsImJlcmdhbW8uaXQiLCJiZy5pdCIsImJpLml0IiwiYmllbGxhLml0IiwiYmwuaXQiLCJibi5pdCIsImJvLml0IiwiYm9sb2duYS5pdCIsImJvbHphbm8uaXQiLCJib2x6YW5vLWFsdG9hZGlnZS5p''@;'; put 'put ''dCIsImJvemVuLml0IiwiYm96ZW4tc3VkdGlyb2wuaXQiLCJib3plbi1zXHhmY2R0aXJvbC5pdCIsImJvemVuLXN1ZWR0aXJvbC5pdCIsImJyLml0IiwiYnJlc2NpYS5pdCIsImJyaW5kaXNpLml0IiwiYnMuaXQiLCJidC5pdCIsImJ1bHNhbi5pdCIsImJ1bHNhbi1zdWR0aXJvbC5pdCIsImJ1''@;'; put 'put ''bHNhbi1zXHhmY2R0aXJvbC5pdCIsImJ1bHNhbi1zdWVkdGlyb2wuaXQiLCJiei5pdCIsImNhLml0IiwiY2FnbGlhcmkuaXQiLCJjYWx0YW5pc3NldHRhLml0IiwiY2FtcGlkYW5vLW1lZGlvLml0IiwiY2FtcGlkYW5vbWVkaW8uaXQiLCJjYW1wb2Jhc3NvLml0IiwiY2FyYm9uaWEtaWdsZXNp''@;'; put 'put ''YXMuaXQiLCJjYXJib25pYWlnbGVzaWFzLml0IiwiY2FycmFyYS1tYXNzYS5pdCIsImNhcnJhcmFtYXNzYS5pdCIsImNhc2VydGEuaXQiLCJjYXRhbmlhLml0IiwiY2F0YW56YXJvLml0IiwiY2IuaXQiLCJjZS5pdCIsImNlc2VuYS1mb3JsaS5pdCIsImNlc2VuYS1mb3JsXHhlYy5pdCIsImNl''@;'; put 'put ''c2VuYWZvcmxpLml0IiwiY2VzZW5hZm9ybFx4ZWMuaXQiLCJjaC5pdCIsImNoaWV0aS5pdCIsImNpLml0IiwiY2wuaXQiLCJjbi5pdCIsImNvLml0IiwiY29tby5pdCIsImNvc2VuemEuaXQiLCJjci5pdCIsImNyZW1vbmEuaXQiLCJjcm90b25lLml0IiwiY3MuaXQiLCJjdC5pdCIsImN1bmVv''@;'; put 'put ''Lml0IiwiY3ouaXQiLCJkZWxsLW9nbGlhc3RyYS5pdCIsImRlbGxvZ2xpYXN0cmEuaXQiLCJlbi5pdCIsImVubmEuaXQiLCJmYy5pdCIsImZlLml0IiwiZmVybW8uaXQiLCJmZXJyYXJhLml0IiwiZmcuaXQiLCJmaS5pdCIsImZpcmVuemUuaXQiLCJmbG9yZW5jZS5pdCIsImZtLml0IiwiZm9n''@;'; put 'put ''Z2lhLml0IiwiZm9ybGktY2VzZW5hLml0IiwiZm9ybFx4ZWMtY2VzZW5hLml0IiwiZm9ybGljZXNlbmEuaXQiLCJmb3JsXHhlY2Nlc2VuYS5pdCIsImZyLml0IiwiZnJvc2lub25lLml0IiwiZ2UuaXQiLCJnZW5vYS5pdCIsImdlbm92YS5pdCIsImdvLml0IiwiZ29yaXppYS5pdCIsImdyLml0''@;'; put 'put ''IiwiZ3Jvc3NldG8uaXQiLCJpZ2xlc2lhcy1jYXJib25pYS5pdCIsImlnbGVzaWFzY2FyYm9uaWEuaXQiLCJpbS5pdCIsImltcGVyaWEuaXQiLCJpcy5pdCIsImlzZXJuaWEuaXQiLCJrci5pdCIsImxhLXNwZXppYS5pdCIsImxhcXVpbGEuaXQiLCJsYXNwZXppYS5pdCIsImxhdGluYS5pdCIs''@;'; put 'put ''ImxjLml0IiwibGUuaXQiLCJsZWNjZS5pdCIsImxlY2NvLml0IiwibGkuaXQiLCJsaXZvcm5vLml0IiwibG8uaXQiLCJsb2RpLml0IiwibHQuaXQiLCJsdS5pdCIsImx1Y2NhLml0IiwibWFjZXJhdGEuaXQiLCJtYW50b3ZhLml0IiwibWFzc2EtY2FycmFyYS5pdCIsIm1hc3NhY2FycmFyYS5p''@;'; put 'put ''dCIsIm1hdGVyYS5pdCIsIm1iLml0IiwibWMuaXQiLCJtZS5pdCIsIm1lZGlvLWNhbXBpZGFuby5pdCIsIm1lZGlvY2FtcGlkYW5vLml0IiwibWVzc2luYS5pdCIsIm1pLml0IiwibWlsYW4uaXQiLCJtaWxhbm8uaXQiLCJtbi5pdCIsIm1vLml0IiwibW9kZW5hLml0IiwibW9uemEuaXQiLCJt''@;'; put 'put ''b256YS1icmlhbnphLml0IiwibW9uemEtZS1kZWxsYS1icmlhbnphLml0IiwibW9uemFicmlhbnphLml0IiwibW9uemFlYnJpYW56YS5pdCIsIm1vbnphZWRlbGxhYnJpYW56YS5pdCIsIm1zLml0IiwibXQuaXQiLCJuYS5pdCIsIm5hcGxlcy5pdCIsIm5hcG9saS5pdCIsIm5vLml0Iiwibm92''@;'; put 'put ''YXJhLml0IiwibnUuaXQiLCJudW9yby5pdCIsIm9nLml0Iiwib2dsaWFzdHJhLml0Iiwib2xiaWEtdGVtcGlvLml0Iiwib2xiaWF0ZW1waW8uaXQiLCJvci5pdCIsIm9yaXN0YW5vLml0Iiwib3QuaXQiLCJwYS5pdCIsInBhZG92YS5pdCIsInBhZHVhLml0IiwicGFsZXJtby5pdCIsInBhcm1h''@;'; put 'put ''Lml0IiwicGF2aWEuaXQiLCJwYy5pdCIsInBkLml0IiwicGUuaXQiLCJwZXJ1Z2lhLml0IiwicGVzYXJvLXVyYmluby5pdCIsInBlc2Fyb3VyYmluby5pdCIsInBlc2NhcmEuaXQiLCJwZy5pdCIsInBpLml0IiwicGlhY2VuemEuaXQiLCJwaXNhLml0IiwicGlzdG9pYS5pdCIsInBuLml0Iiwi''@;'; put 'put ''cG8uaXQiLCJwb3JkZW5vbmUuaXQiLCJwb3RlbnphLml0IiwicHIuaXQiLCJwcmF0by5pdCIsInB0Lml0IiwicHUuaXQiLCJwdi5pdCIsInB6Lml0IiwicmEuaXQiLCJyYWd1c2EuaXQiLCJyYXZlbm5hLml0IiwicmMuaXQiLCJyZS5pdCIsInJlZ2dpby1jYWxhYnJpYS5pdCIsInJlZ2dpby1l''@;'; put 'put ''bWlsaWEuaXQiLCJyZWdnaW9jYWxhYnJpYS5pdCIsInJlZ2dpb2VtaWxpYS5pdCIsInJnLml0IiwicmkuaXQiLCJyaWV0aS5pdCIsInJpbWluaS5pdCIsInJtLml0Iiwicm4uaXQiLCJyby5pdCIsInJvbWEuaXQiLCJyb21lLml0Iiwicm92aWdvLml0Iiwic2EuaXQiLCJzYWxlcm5vLml0Iiwi''@;'; put 'put ''c2Fzc2FyaS5pdCIsInNhdm9uYS5pdCIsInNpLml0Iiwic2llbmEuaXQiLCJzaXJhY3VzYS5pdCIsInNvLml0Iiwic29uZHJpby5pdCIsInNwLml0Iiwic3IuaXQiLCJzcy5pdCIsInNceGZjZHRpcm9sLml0Iiwic3VlZHRpcm9sLml0Iiwic3YuaXQiLCJ0YS5pdCIsInRhcmFudG8uaXQiLCJ0''@;'; put 'put ''ZS5pdCIsInRlbXBpby1vbGJpYS5pdCIsInRlbXBpb29sYmlhLml0IiwidGVyYW1vLml0IiwidGVybmkuaXQiLCJ0bi5pdCIsInRvLml0IiwidG9yaW5vLml0IiwidHAuaXQiLCJ0ci5pdCIsInRyYW5pLWFuZHJpYS1iYXJsZXR0YS5pdCIsInRyYW5pLWJhcmxldHRhLWFuZHJpYS5pdCIsInRy''@;'; put 'put ''YW5pYW5kcmlhYmFybGV0dGEuaXQiLCJ0cmFuaWJhcmxldHRhYW5kcmlhLml0IiwidHJhcGFuaS5pdCIsInRyZW50by5pdCIsInRyZXZpc28uaXQiLCJ0cmllc3RlLml0IiwidHMuaXQiLCJ0dXJpbi5pdCIsInR2Lml0IiwidWQuaXQiLCJ1ZGluZS5pdCIsInVyYmluby1wZXNhcm8uaXQiLCJ1''@;'; put 'put ''cmJpbm9wZXNhcm8uaXQiLCJ2YS5pdCIsInZhcmVzZS5pdCIsInZiLml0IiwidmMuaXQiLCJ2ZS5pdCIsInZlbmV6aWEuaXQiLCJ2ZW5pY2UuaXQiLCJ2ZXJiYW5pYS5pdCIsInZlcmNlbGxpLml0IiwidmVyb25hLml0IiwidmkuaXQiLCJ2aWJvLXZhbGVudGlhLml0Iiwidmlib3ZhbGVudGlh''@;'; put 'put ''Lml0IiwidmljZW56YS5pdCIsInZpdGVyYm8uaXQiLCJ2ci5pdCIsInZzLml0IiwidnQuaXQiLCJ2di5pdCIsImplIiwiY28uamUiLCJuZXQuamUiLCJvcmcuamUiLCIqLmptIiwiam8iLCJhZ3JpLmpvIiwiYWkuam8iLCJjb20uam8iLCJlZHUuam8iLCJlbmcuam8iLCJmbS5qbyIsImdvdi5q''@;'; put 'put ''byIsIm1pbC5qbyIsIm5ldC5qbyIsIm9yZy5qbyIsInBlci5qbyIsInBoZC5qbyIsInNjaC5qbyIsInR2LmpvIiwiam9icyIsImpwIiwiYWMuanAiLCJhZC5qcCIsImNvLmpwIiwiZWQuanAiLCJnby5qcCIsImdyLmpwIiwibGcuanAiLCJuZS5qcCIsIm9yLmpwIiwiYWljaGkuanAiLCJha2l0''@;'; put 'put ''YS5qcCIsImFvbW9yaS5qcCIsImNoaWJhLmpwIiwiZWhpbWUuanAiLCJmdWt1aS5qcCIsImZ1a3Vva2EuanAiLCJmdWt1c2hpbWEuanAiLCJnaWZ1LmpwIiwiZ3VubWEuanAiLCJoaXJvc2hpbWEuanAiLCJob2trYWlkby5qcCIsImh5b2dvLmpwIiwiaWJhcmFraS5qcCIsImlzaGlrYXdhLmpw''@;'; put 'put ''IiwiaXdhdGUuanAiLCJrYWdhd2EuanAiLCJrYWdvc2hpbWEuanAiLCJrYW5hZ2F3YS5qcCIsImtvY2hpLmpwIiwia3VtYW1vdG8uanAiLCJreW90by5qcCIsIm1pZS5qcCIsIm1peWFnaS5qcCIsIm1peWF6YWtpLmpwIiwibmFnYW5vLmpwIiwibmFnYXNha2kuanAiLCJuYXJhLmpwIiwibmlp''@;'; put 'put ''Z2F0YS5qcCIsIm9pdGEuanAiLCJva2F5YW1hLmpwIiwib2tpbmF3YS5qcCIsIm9zYWthLmpwIiwic2FnYS5qcCIsInNhaXRhbWEuanAiLCJzaGlnYS5qcCIsInNoaW1hbmUuanAiLCJzaGl6dW9rYS5qcCIsInRvY2hpZ2kuanAiLCJ0b2t1c2hpbWEuanAiLCJ0b2t5by5qcCIsInRvdHRvcmku''@;'; put 'put ''anAiLCJ0b3lhbWEuanAiLCJ3YWtheWFtYS5qcCIsInlhbWFnYXRhLmpwIiwieWFtYWd1Y2hpLmpwIiwieWFtYW5hc2hpLmpwIiwiXHU0ZTA5XHU5MWNkLmpwIiwiXHU0ZWFjXHU5MGZkLmpwIiwiXHU0ZjUwXHU4Y2MwLmpwIiwiXHU1MTc1XHU1ZWFiLmpwIiwiXHU1MzE3XHU2ZDc3XHU5MDUz''@;'; put 'put ''LmpwIiwiXHU1MzQzXHU4NDQ5LmpwIiwiXHU1NDhjXHU2YjRjXHU1YzcxLmpwIiwiXHU1N2ZjXHU3Mzg5LmpwIiwiXHU1OTI3XHU1MjA2LmpwIiwiXHU1OTI3XHU5NjJhLmpwIiwiXHU1OTQ4XHU4MjZmLmpwIiwiXHU1YmFlXHU1N2NlLmpwIiwiXHU1YmFlXHU1ZDBlLmpwIiwiXHU1YmNjXHU1''@;'; put 'put ''YzcxLmpwIiwiXHU1YzcxXHU1M2UzLmpwIiwiXHU1YzcxXHU1ZjYyLmpwIiwiXHU1YzcxXHU2OGE4LmpwIiwiXHU1YzkwXHU5NjFjLmpwIiwiXHU1Y2ExXHU1YzcxLmpwIiwiXHU1Y2E5XHU2MjRiLmpwIiwiXHU1Y2Y2XHU2ODM5LmpwIiwiXHU1ZTgzXHU1Y2Y2LmpwIiwiXHU1ZmIzXHU1Y2Y2''@;'; put 'put ''LmpwIiwiXHU2MTFiXHU1YTliLmpwIiwiXHU2MTFiXHU3N2U1LmpwIiwiXHU2NWIwXHU2ZjVmLmpwIiwiXHU2NzcxXHU0ZWFjLmpwIiwiXHU2ODAzXHU2NzI4LmpwIiwiXHU2Yzk2XHU3ZTA0LmpwIiwiXHU2ZWNiXHU4Y2MwLmpwIiwiXHU3MThhXHU2NzJjLmpwIiwiXHU3N2YzXHU1ZGRkLmpw''@;'; put 'put ''IiwiXHU3OTVlXHU1OTQ4XHU1ZGRkLmpwIiwiXHU3OThmXHU0ZTk1LmpwIiwiXHU3OThmXHU1Y2ExLmpwIiwiXHU3OThmXHU1Y2Y2LmpwIiwiXHU3OWNiXHU3NTMwLmpwIiwiXHU3ZmE0XHU5OWFjLmpwIiwiXHU4MzI4XHU1N2NlLmpwIiwiXHU5NTc3XHU1ZDBlLmpwIiwiXHU5NTc3XHU5MWNl''@;'; put 'put ''LmpwIiwiXHU5NzUyXHU2OGVlLmpwIiwiXHU5NzU5XHU1Y2ExLmpwIiwiXHU5OTk5XHU1ZGRkLmpwIiwiXHU5YWQ4XHU3N2U1LmpwIiwiXHU5Y2U1XHU1M2Q2LmpwIiwiXHU5ZTdmXHU1MTUwXHU1Y2Y2LmpwIiwiKi5rYXdhc2FraS5qcCIsIiFjaXR5Lmthd2FzYWtpLmpwIiwiKi5raXRha3l1''@;'; put 'put ''c2h1LmpwIiwiIWNpdHkua2l0YWt5dXNodS5qcCIsIioua29iZS5qcCIsIiFjaXR5LmtvYmUuanAiLCIqLm5hZ295YS5qcCIsIiFjaXR5Lm5hZ295YS5qcCIsIiouc2FwcG9yby5qcCIsIiFjaXR5LnNhcHBvcm8uanAiLCIqLnNlbmRhaS5qcCIsIiFjaXR5LnNlbmRhaS5qcCIsIioueW9rb2hh''@;'; put 'put ''bWEuanAiLCIhY2l0eS55b2tvaGFtYS5qcCIsImFpc2FpLmFpY2hpLmpwIiwiYW1hLmFpY2hpLmpwIiwiYW5qby5haWNoaS5qcCIsImFzdWtlLmFpY2hpLmpwIiwiY2hpcnl1LmFpY2hpLmpwIiwiY2hpdGEuYWljaGkuanAiLCJmdXNvLmFpY2hpLmpwIiwiZ2FtYWdvcmkuYWljaGkuanAiLCJo''@;'; put 'put ''YW5kYS5haWNoaS5qcCIsImhhenUuYWljaGkuanAiLCJoZWtpbmFuLmFpY2hpLmpwIiwiaGlnYXNoaXVyYS5haWNoaS5qcCIsImljaGlub21peWEuYWljaGkuanAiLCJpbmF6YXdhLmFpY2hpLmpwIiwiaW51eWFtYS5haWNoaS5qcCIsImlzc2hpa2kuYWljaGkuanAiLCJpd2FrdXJhLmFpY2hp''@;'; put 'put ''LmpwIiwia2FuaWUuYWljaGkuanAiLCJrYXJpeWEuYWljaGkuanAiLCJrYXN1Z2FpLmFpY2hpLmpwIiwia2lyYS5haWNoaS5qcCIsImtpeW9zdS5haWNoaS5qcCIsImtvbWFraS5haWNoaS5qcCIsImtvbmFuLmFpY2hpLmpwIiwia290YS5haWNoaS5qcCIsIm1paGFtYS5haWNoaS5qcCIsIm1p''@;'; put 'put ''eW9zaGkuYWljaGkuanAiLCJuaXNoaW8uYWljaGkuanAiLCJuaXNzaGluLmFpY2hpLmpwIiwib2J1LmFpY2hpLmpwIiwib2d1Y2hpLmFpY2hpLmpwIiwib2hhcnUuYWljaGkuanAiLCJva2F6YWtpLmFpY2hpLmpwIiwib3dhcmlhc2FoaS5haWNoaS5qcCIsInNldG8uYWljaGkuanAiLCJzaGlr''@;'; put 'put ''YXRzdS5haWNoaS5qcCIsInNoaW5zaGlyby5haWNoaS5qcCIsInNoaXRhcmEuYWljaGkuanAiLCJ0YWhhcmEuYWljaGkuanAiLCJ0YWthaGFtYS5haWNoaS5qcCIsInRvYmlzaGltYS5haWNoaS5qcCIsInRvZWkuYWljaGkuanAiLCJ0b2dvLmFpY2hpLmpwIiwidG9rYWkuYWljaGkuanAiLCJ0''@;'; put 'put ''b2tvbmFtZS5haWNoaS5qcCIsInRveW9ha2UuYWljaGkuanAiLCJ0b3lvaGFzaGkuYWljaGkuanAiLCJ0b3lva2F3YS5haWNoaS5qcCIsInRveW9uZS5haWNoaS5qcCIsInRveW90YS5haWNoaS5qcCIsInRzdXNoaW1hLmFpY2hpLmpwIiwieWF0b21pLmFpY2hpLmpwIiwiYWtpdGEuYWtpdGEu''@;'; put 'put ''anAiLCJkYWlzZW4uYWtpdGEuanAiLCJmdWppc2F0by5ha2l0YS5qcCIsImdvam9tZS5ha2l0YS5qcCIsImhhY2hpcm9nYXRhLmFraXRhLmpwIiwiaGFwcG91LmFraXRhLmpwIiwiaGlnYXNoaW5hcnVzZS5ha2l0YS5qcCIsImhvbmpvLmFraXRhLmpwIiwiaG9uanlvLmFraXRhLmpwIiwiaWth''@;'; put 'put ''d2EuYWtpdGEuanAiLCJrYW1pa29hbmkuYWtpdGEuanAiLCJrYW1pb2thLmFraXRhLmpwIiwia2F0YWdhbWkuYWtpdGEuanAiLCJrYXp1bm8uYWtpdGEuanAiLCJraXRhYWtpdGEuYWtpdGEuanAiLCJrb3Nha2EuYWtpdGEuanAiLCJreW93YS5ha2l0YS5qcCIsIm1pc2F0by5ha2l0YS5qcCIs''@;'; put 'put ''Im1pdGFuZS5ha2l0YS5qcCIsIm1vcml5b3NoaS5ha2l0YS5qcCIsIm5pa2Foby5ha2l0YS5qcCIsIm5vc2hpcm8uYWtpdGEuanAiLCJvZGF0ZS5ha2l0YS5qcCIsIm9nYS5ha2l0YS5qcCIsIm9nYXRhLmFraXRhLmpwIiwic2VtYm9rdS5ha2l0YS5qcCIsInlva290ZS5ha2l0YS5qcCIsInl1''@;'; put 'put ''cmlob25qby5ha2l0YS5qcCIsImFvbW9yaS5hb21vcmkuanAiLCJnb25vaGUuYW9tb3JpLmpwIiwiaGFjaGlub2hlLmFvbW9yaS5qcCIsImhhc2hpa2FtaS5hb21vcmkuanAiLCJoaXJhbmFpLmFvbW9yaS5qcCIsImhpcm9zYWtpLmFvbW9yaS5qcCIsIml0YXlhbmFnaS5hb21vcmkuanAiLCJr''@;'; put 'put ''dXJvaXNoaS5hb21vcmkuanAiLCJtaXNhd2EuYW9tb3JpLmpwIiwibXV0c3UuYW9tb3JpLmpwIiwibmFrYWRvbWFyaS5hb21vcmkuanAiLCJub2hlamkuYW9tb3JpLmpwIiwib2lyYXNlLmFvbW9yaS5qcCIsIm93YW5pLmFvbW9yaS5qcCIsInJva3Vub2hlLmFvbW9yaS5qcCIsInNhbm5vaGUu''@;'; put 'put ''YW9tb3JpLmpwIiwic2hpY2hpbm9oZS5hb21vcmkuanAiLCJzaGluZ28uYW9tb3JpLmpwIiwidGFra28uYW9tb3JpLmpwIiwidG93YWRhLmFvbW9yaS5qcCIsInRzdWdhcnUuYW9tb3JpLmpwIiwidHN1cnV0YS5hb21vcmkuanAiLCJhYmlrby5jaGliYS5qcCIsImFzYWhpLmNoaWJhLmpwIiwi''@;'; put 'put ''Y2hvbmFuLmNoaWJhLmpwIiwiY2hvc2VpLmNoaWJhLmpwIiwiY2hvc2hpLmNoaWJhLmpwIiwiY2h1by5jaGliYS5qcCIsImZ1bmFiYXNoaS5jaGliYS5qcCIsImZ1dHRzdS5jaGliYS5qcCIsImhhbmFtaWdhd2EuY2hpYmEuanAiLCJpY2hpaGFyYS5jaGliYS5qcCIsImljaGlrYXdhLmNoaWJh''@;'; put 'put ''LmpwIiwiaWNoaW5vbWl5YS5jaGliYS5qcCIsImluemFpLmNoaWJhLmpwIiwiaXN1bWkuY2hpYmEuanAiLCJrYW1hZ2F5YS5jaGliYS5qcCIsImthbW9nYXdhLmNoaWJhLmpwIiwia2FzaGl3YS5jaGliYS5qcCIsImthdG9yaS5jaGliYS5qcCIsImthdHN1dXJhLmNoaWJhLmpwIiwia2ltaXRz''@;'; put 'put ''dS5jaGliYS5qcCIsImtpc2FyYXp1LmNoaWJhLmpwIiwia296YWtpLmNoaWJhLmpwIiwia3VqdWt1cmkuY2hpYmEuanAiLCJreW9uYW4uY2hpYmEuanAiLCJtYXRzdWRvLmNoaWJhLmpwIiwibWlkb3JpLmNoaWJhLmpwIiwibWloYW1hLmNoaWJhLmpwIiwibWluYW1pYm9zby5jaGliYS5qcCIs''@;'; put 'put ''Im1vYmFyYS5jaGliYS5qcCIsIm11dHN1emF3YS5jaGliYS5qcCIsIm5hZ2FyYS5jaGliYS5qcCIsIm5hZ2FyZXlhbWEuY2hpYmEuanAiLCJuYXJhc2hpbm8uY2hpYmEuanAiLCJuYXJpdGEuY2hpYmEuanAiLCJub2RhLmNoaWJhLmpwIiwib2FtaXNoaXJhc2F0by5jaGliYS5qcCIsIm9taWdh''@;'; put 'put ''d2EuY2hpYmEuanAiLCJvbmp1a3UuY2hpYmEuanAiLCJvdGFraS5jaGliYS5qcCIsInNha2FlLmNoaWJhLmpwIiwic2FrdXJhLmNoaWJhLmpwIiwic2hpbW9mdXNhLmNoaWJhLmpwIiwic2hpcmFrby5jaGliYS5qcCIsInNoaXJvaS5jaGliYS5qcCIsInNoaXN1aS5jaGliYS5qcCIsInNvZGVn''@;'; put 'put ''YXVyYS5jaGliYS5qcCIsInNvc2EuY2hpYmEuanAiLCJ0YWtvLmNoaWJhLmpwIiwidGF0ZXlhbWEuY2hpYmEuanAiLCJ0b2dhbmUuY2hpYmEuanAiLCJ0b2hub3Noby5jaGliYS5qcCIsInRvbWlzYXRvLmNoaWJhLmpwIiwidXJheWFzdS5jaGliYS5qcCIsInlhY2hpbWF0YS5jaGliYS5qcCIs''@;'; put 'put ''InlhY2hpeW8uY2hpYmEuanAiLCJ5b2thaWNoaWJhLmNoaWJhLmpwIiwieW9rb3NoaWJhaGlrYXJpLmNoaWJhLmpwIiwieW90c3VrYWlkby5jaGliYS5qcCIsImFpbmFuLmVoaW1lLmpwIiwiaG9uYWkuZWhpbWUuanAiLCJpa2F0YS5laGltZS5qcCIsImltYWJhcmkuZWhpbWUuanAiLCJpeW8u''@;'; put 'put ''ZWhpbWUuanAiLCJrYW1pamltYS5laGltZS5qcCIsImtpaG9rdS5laGltZS5qcCIsImt1bWFrb2dlbi5laGltZS5qcCIsIm1hc2FraS5laGltZS5qcCIsIm1hdHN1bm8uZWhpbWUuanAiLCJtYXRzdXlhbWEuZWhpbWUuanAiLCJuYW1pa2F0YS5laGltZS5qcCIsIm5paWhhbWEuZWhpbWUuanAi''@;'; put 'put ''LCJvenUuZWhpbWUuanAiLCJzYWlqby5laGltZS5qcCIsInNlaXlvLmVoaW1lLmpwIiwic2hpa29rdWNodW8uZWhpbWUuanAiLCJ0b2JlLmVoaW1lLmpwIiwidG9vbi5laGltZS5qcCIsInVjaGlrby5laGltZS5qcCIsInV3YWppbWEuZWhpbWUuanAiLCJ5YXdhdGFoYW1hLmVoaW1lLmpwIiwi''@;'; put 'put ''ZWNoaXplbi5mdWt1aS5qcCIsImVpaGVpamkuZnVrdWkuanAiLCJmdWt1aS5mdWt1aS5qcCIsImlrZWRhLmZ1a3VpLmpwIiwia2F0c3V5YW1hLmZ1a3VpLmpwIiwibWloYW1hLmZ1a3VpLmpwIiwibWluYW1pZWNoaXplbi5mdWt1aS5qcCIsIm9iYW1hLmZ1a3VpLmpwIiwib2hpLmZ1a3VpLmpw''@;'; put 'put ''Iiwib25vLmZ1a3VpLmpwIiwic2FiYWUuZnVrdWkuanAiLCJzYWthaS5mdWt1aS5qcCIsInRha2FoYW1hLmZ1a3VpLmpwIiwidHN1cnVnYS5mdWt1aS5qcCIsIndha2FzYS5mdWt1aS5qcCIsImFzaGl5YS5mdWt1b2thLmpwIiwiYnV6ZW4uZnVrdW9rYS5qcCIsImNoaWt1Z28uZnVrdW9rYS5q''@;'; put 'put ''cCIsImNoaWt1aG8uZnVrdW9rYS5qcCIsImNoaWt1am8uZnVrdW9rYS5qcCIsImNoaWt1c2hpbm8uZnVrdW9rYS5qcCIsImNoaWt1emVuLmZ1a3Vva2EuanAiLCJjaHVvLmZ1a3Vva2EuanAiLCJkYXphaWZ1LmZ1a3Vva2EuanAiLCJmdWt1Y2hpLmZ1a3Vva2EuanAiLCJoYWthdGEuZnVrdW9r''@;'; put 'put ''YS5qcCIsImhpZ2FzaGkuZnVrdW9rYS5qcCIsImhpcm9rYXdhLmZ1a3Vva2EuanAiLCJoaXNheWFtYS5mdWt1b2thLmpwIiwiaWl6dWthLmZ1a3Vva2EuanAiLCJpbmF0c3VraS5mdWt1b2thLmpwIiwia2Foby5mdWt1b2thLmpwIiwia2FzdWdhLmZ1a3Vva2EuanAiLCJrYXN1eWEuZnVrdW9r''@;'; put 'put ''YS5qcCIsImthd2FyYS5mdWt1b2thLmpwIiwia2Vpc2VuLmZ1a3Vva2EuanAiLCJrb2dhLmZ1a3Vva2EuanAiLCJrdXJhdGUuZnVrdW9rYS5qcCIsImt1cm9naS5mdWt1b2thLmpwIiwia3VydW1lLmZ1a3Vva2EuanAiLCJtaW5hbWkuZnVrdW9rYS5qcCIsIm1peWFrby5mdWt1b2thLmpwIiwi''@;'; put 'put ''bWl5YW1hLmZ1a3Vva2EuanAiLCJtaXlhd2FrYS5mdWt1b2thLmpwIiwibWl6dW1ha2kuZnVrdW9rYS5qcCIsIm11bmFrYXRhLmZ1a3Vva2EuanAiLCJuYWthZ2F3YS5mdWt1b2thLmpwIiwibmFrYW1hLmZ1a3Vva2EuanAiLCJuaXNoaS5mdWt1b2thLmpwIiwibm9nYXRhLmZ1a3Vva2EuanAi''@;'; put 'put ''LCJvZ29yaS5mdWt1b2thLmpwIiwib2thZ2FraS5mdWt1b2thLmpwIiwib2thd2EuZnVrdW9rYS5qcCIsIm9raS5mdWt1b2thLmpwIiwib211dGEuZnVrdW9rYS5qcCIsIm9uZ2EuZnVrdW9rYS5qcCIsIm9ub2pvLmZ1a3Vva2EuanAiLCJvdG8uZnVrdW9rYS5qcCIsInNhaWdhd2EuZnVrdW9r''@;'; put 'put ''YS5qcCIsInNhc2FndXJpLmZ1a3Vva2EuanAiLCJzaGluZ3UuZnVrdW9rYS5qcCIsInNoaW55b3NoaXRvbWkuZnVrdW9rYS5qcCIsInNob25haS5mdWt1b2thLmpwIiwic29lZGEuZnVrdW9rYS5qcCIsInN1ZS5mdWt1b2thLmpwIiwidGFjaGlhcmFpLmZ1a3Vva2EuanAiLCJ0YWdhd2EuZnVr''@;'; put 'put ''dW9rYS5qcCIsInRha2F0YS5mdWt1b2thLmpwIiwidG9oby5mdWt1b2thLmpwIiwidG95b3RzdS5mdWt1b2thLmpwIiwidHN1aWtpLmZ1a3Vva2EuanAiLCJ1a2loYS5mdWt1b2thLmpwIiwidW1pLmZ1a3Vva2EuanAiLCJ1c3VpLmZ1a3Vva2EuanAiLCJ5YW1hZGEuZnVrdW9rYS5qcCIsInlh''@;'; put 'put ''bWUuZnVrdW9rYS5qcCIsInlhbmFnYXdhLmZ1a3Vva2EuanAiLCJ5dWt1aGFzaGkuZnVrdW9rYS5qcCIsImFpenViYW5nZS5mdWt1c2hpbWEuanAiLCJhaXp1bWlzYXRvLmZ1a3VzaGltYS5qcCIsImFpenV3YWthbWF0c3UuZnVrdXNoaW1hLmpwIiwiYXNha2F3YS5mdWt1c2hpbWEuanAiLCJi''@;'; put 'put ''YW5kYWkuZnVrdXNoaW1hLmpwIiwiZGF0ZS5mdWt1c2hpbWEuanAiLCJmdWt1c2hpbWEuZnVrdXNoaW1hLmpwIiwiZnVydWRvbm8uZnVrdXNoaW1hLmpwIiwiZnV0YWJhLmZ1a3VzaGltYS5qcCIsImhhbmF3YS5mdWt1c2hpbWEuanAiLCJoaWdhc2hpLmZ1a3VzaGltYS5qcCIsImhpcmF0YS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJoaXJvbm8uZnVrdXNoaW1hLmpwIiwiaWl0YXRlLmZ1a3VzaGltYS5qcCIsImluYXdhc2hpcm8uZnVrdXNoaW1hLmpwIiwiaXNoaWthd2EuZnVrdXNoaW1hLmpwIiwiaXdha2kuZnVrdXNoaW1hLmpwIiwiaXp1bWl6YWtpLmZ1a3VzaGltYS5qcCIsImthZ2FtaWlzaGku''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwia2FuZXlhbWEuZnVrdXNoaW1hLmpwIiwia2F3YW1hdGEuZnVrdXNoaW1hLmpwIiwia2l0YWthdGEuZnVrdXNoaW1hLmpwIiwia2l0YXNoaW9iYXJhLmZ1a3VzaGltYS5qcCIsImtvb3JpLmZ1a3VzaGltYS5qcCIsImtvcml5YW1hLmZ1a3VzaGltYS5qcCIsImt1bmlt''@;'; put 'put ''aS5mdWt1c2hpbWEuanAiLCJtaWhhcnUuZnVrdXNoaW1hLmpwIiwibWlzaGltYS5mdWt1c2hpbWEuanAiLCJuYW1pZS5mdWt1c2hpbWEuanAiLCJuYW5nby5mdWt1c2hpbWEuanAiLCJuaXNoaWFpenUuZnVrdXNoaW1hLmpwIiwibmlzaGlnby5mdWt1c2hpbWEuanAiLCJva3VtYS5mdWt1c2hp''@;'; put 'put ''bWEuanAiLCJvbW90ZWdvLmZ1a3VzaGltYS5qcCIsIm9uby5mdWt1c2hpbWEuanAiLCJvdGFtYS5mdWt1c2hpbWEuanAiLCJzYW1lZ2F3YS5mdWt1c2hpbWEuanAiLCJzaGltb2dvLmZ1a3VzaGltYS5qcCIsInNoaXJha2F3YS5mdWt1c2hpbWEuanAiLCJzaG93YS5mdWt1c2hpbWEuanAiLCJz''@;'; put 'put ''b21hLmZ1a3VzaGltYS5qcCIsInN1a2FnYXdhLmZ1a3VzaGltYS5qcCIsInRhaXNoaW4uZnVrdXNoaW1hLmpwIiwidGFtYWthd2EuZnVrdXNoaW1hLmpwIiwidGFuYWd1cmEuZnVrdXNoaW1hLmpwIiwidGVuZWkuZnVrdXNoaW1hLmpwIiwieWFidWtpLmZ1a3VzaGltYS5qcCIsInlhbWF0by5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJ5YW1hdHN1cmkuZnVrdXNoaW1hLmpwIiwieWFuYWl6dS5mdWt1c2hpbWEuanAiLCJ5dWdhd2EuZnVrdXNoaW1hLmpwIiwiYW5wYWNoaS5naWZ1LmpwIiwiZW5hLmdpZnUuanAiLCJnaWZ1LmdpZnUuanAiLCJnaW5hbi5naWZ1LmpwIiwiZ29kby5naWZ1LmpwIiwiZ3Vq''@;'; put 'put ''by5naWZ1LmpwIiwiaGFzaGltYS5naWZ1LmpwIiwiaGljaGlzby5naWZ1LmpwIiwiaGlkYS5naWZ1LmpwIiwiaGlnYXNoaXNoaXJha2F3YS5naWZ1LmpwIiwiaWJpZ2F3YS5naWZ1LmpwIiwiaWtlZGEuZ2lmdS5qcCIsImtha2FtaWdhaGFyYS5naWZ1LmpwIiwia2FuaS5naWZ1LmpwIiwia2Fz''@;'; put 'put ''YWhhcmEuZ2lmdS5qcCIsImthc2FtYXRzdS5naWZ1LmpwIiwia2F3YXVlLmdpZnUuanAiLCJraXRhZ2F0YS5naWZ1LmpwIiwibWluby5naWZ1LmpwIiwibWlub2thbW8uZ2lmdS5qcCIsIm1pdGFrZS5naWZ1LmpwIiwibWl6dW5hbWkuZ2lmdS5qcCIsIm1vdG9zdS5naWZ1LmpwIiwibmFrYXRz''@;'; put 'put ''dWdhd2EuZ2lmdS5qcCIsIm9nYWtpLmdpZnUuanAiLCJzYWthaG9naS5naWZ1LmpwIiwic2VraS5naWZ1LmpwIiwic2VraWdhaGFyYS5naWZ1LmpwIiwic2hpcmFrYXdhLmdpZnUuanAiLCJ0YWppbWkuZ2lmdS5qcCIsInRha2F5YW1hLmdpZnUuanAiLCJ0YXJ1aS5naWZ1LmpwIiwidG9raS5n''@;'; put 'put ''aWZ1LmpwIiwidG9taWthLmdpZnUuanAiLCJ3YW5vdWNoaS5naWZ1LmpwIiwieWFtYWdhdGEuZ2lmdS5qcCIsInlhb3RzdS5naWZ1LmpwIiwieW9yby5naWZ1LmpwIiwiYW5uYWthLmd1bm1hLmpwIiwiY2hpeW9kYS5ndW5tYS5qcCIsImZ1amlva2EuZ3VubWEuanAiLCJoaWdhc2hpYWdhdHN1''@;'; put 'put ''bWEuZ3VubWEuanAiLCJpc2VzYWtpLmd1bm1hLmpwIiwiaXRha3VyYS5ndW5tYS5qcCIsImthbm5hLmd1bm1hLmpwIiwia2FucmEuZ3VubWEuanAiLCJrYXRhc2hpbmEuZ3VubWEuanAiLCJrYXdhYmEuZ3VubWEuanAiLCJraXJ5dS5ndW5tYS5qcCIsImt1c2F0c3UuZ3VubWEuanAiLCJtYWVi''@;'; put 'put ''YXNoaS5ndW5tYS5qcCIsIm1laXdhLmd1bm1hLmpwIiwibWlkb3JpLmd1bm1hLmpwIiwibWluYWthbWkuZ3VubWEuanAiLCJuYWdhbm9oYXJhLmd1bm1hLmpwIiwibmFrYW5vam8uZ3VubWEuanAiLCJuYW5tb2t1Lmd1bm1hLmpwIiwibnVtYXRhLmd1bm1hLmpwIiwib2l6dW1pLmd1bm1hLmpw''@;'; put 'put ''Iiwib3JhLmd1bm1hLmpwIiwib3RhLmd1bm1hLmpwIiwic2hpYnVrYXdhLmd1bm1hLmpwIiwic2hpbW9uaXRhLmd1bm1hLmpwIiwic2hpbnRvLmd1bm1hLmpwIiwic2hvd2EuZ3VubWEuanAiLCJ0YWthc2FraS5ndW5tYS5qcCIsInRha2F5YW1hLmd1bm1hLmpwIiwidGFtYW11cmEuZ3VubWEu''@;'; put 'put ''anAiLCJ0YXRlYmF5YXNoaS5ndW5tYS5qcCIsInRvbWlva2EuZ3VubWEuanAiLCJ0c3VraXlvbm8uZ3VubWEuanAiLCJ0c3VtYWdvaS5ndW5tYS5qcCIsInVlbm8uZ3VubWEuanAiLCJ5b3NoaW9rYS5ndW5tYS5qcCIsImFzYW1pbmFtaS5oaXJvc2hpbWEuanAiLCJkYWl3YS5oaXJvc2hpbWEu''@;'; put 'put ''anAiLCJldGFqaW1hLmhpcm9zaGltYS5qcCIsImZ1Y2h1Lmhpcm9zaGltYS5qcCIsImZ1a3V5YW1hLmhpcm9zaGltYS5qcCIsImhhdHN1a2FpY2hpLmhpcm9zaGltYS5qcCIsImhpZ2FzaGloaXJvc2hpbWEuaGlyb3NoaW1hLmpwIiwiaG9uZ28uaGlyb3NoaW1hLmpwIiwiamluc2VraWtvZ2Vu''@;'; put 'put ''Lmhpcm9zaGltYS5qcCIsImthaXRhLmhpcm9zaGltYS5qcCIsImt1aS5oaXJvc2hpbWEuanAiLCJrdW1hbm8uaGlyb3NoaW1hLmpwIiwia3VyZS5oaXJvc2hpbWEuanAiLCJtaWhhcmEuaGlyb3NoaW1hLmpwIiwibWl5b3NoaS5oaXJvc2hpbWEuanAiLCJuYWthLmhpcm9zaGltYS5qcCIsIm9u''@;'; put 'put ''b21pY2hpLmhpcm9zaGltYS5qcCIsIm9zYWtpa2FtaWppbWEuaGlyb3NoaW1hLmpwIiwib3Rha2UuaGlyb3NoaW1hLmpwIiwic2FrYS5oaXJvc2hpbWEuanAiLCJzZXJhLmhpcm9zaGltYS5qcCIsInNlcmFuaXNoaS5oaXJvc2hpbWEuanAiLCJzaGluaWNoaS5oaXJvc2hpbWEuanAiLCJzaG9i''@;'; put 'put ''YXJhLmhpcm9zaGltYS5qcCIsInRha2VoYXJhLmhpcm9zaGltYS5qcCIsImFiYXNoaXJpLmhva2thaWRvLmpwIiwiYWJpcmEuaG9ra2FpZG8uanAiLCJhaWJldHN1Lmhva2thaWRvLmpwIiwiYWthYmlyYS5ob2trYWlkby5qcCIsImFra2VzaGkuaG9ra2FpZG8uanAiLCJhc2FoaWthd2EuaG9r''@;'; put 'put ''a2FpZG8uanAiLCJhc2hpYmV0c3UuaG9ra2FpZG8uanAiLCJhc2hvcm8uaG9ra2FpZG8uanAiLCJhc3NhYnUuaG9ra2FpZG8uanAiLCJhdHN1bWEuaG9ra2FpZG8uanAiLCJiaWJhaS5ob2trYWlkby5qcCIsImJpZWkuaG9ra2FpZG8uanAiLCJiaWZ1a2EuaG9ra2FpZG8uanAiLCJiaWhvcm8u''@;'; put 'put ''aG9ra2FpZG8uanAiLCJiaXJhdG9yaS5ob2trYWlkby5qcCIsImNoaXBwdWJldHN1Lmhva2thaWRvLmpwIiwiY2hpdG9zZS5ob2trYWlkby5qcCIsImRhdGUuaG9ra2FpZG8uanAiLCJlYmV0c3UuaG9ra2FpZG8uanAiLCJlbWJldHN1Lmhva2thaWRvLmpwIiwiZW5pd2EuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJlcmltby5ob2trYWlkby5qcCIsImVzYW4uaG9ra2FpZG8uanAiLCJlc2FzaGkuaG9ra2FpZG8uanAiLCJmdWthZ2F3YS5ob2trYWlkby5qcCIsImZ1a3VzaGltYS5ob2trYWlkby5qcCIsImZ1cmFuby5ob2trYWlkby5qcCIsImZ1cnViaXJhLmhva2thaWRvLmpwIiwiaGFib3JvLmhva2th''@;'; put 'put ''aWRvLmpwIiwiaGFrb2RhdGUuaG9ra2FpZG8uanAiLCJoYW1hdG9uYmV0c3UuaG9ra2FpZG8uanAiLCJoaWRha2EuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2FndXJhLmhva2thaWRvLmpwIiwiaGlnYXNoaWthd2EuaG9ra2FpZG8uanAiLCJoaXJvby5ob2trYWlkby5qcCIsImhva3VyeXUuaG9r''@;'; put 'put ''a2FpZG8uanAiLCJob2t1dG8uaG9ra2FpZG8uanAiLCJob25iZXRzdS5ob2trYWlkby5qcCIsImhvcm9rYW5haS5ob2trYWlkby5qcCIsImhvcm9ub2JlLmhva2thaWRvLmpwIiwiaWtlZGEuaG9ra2FpZG8uanAiLCJpbWFrYW5lLmhva2thaWRvLmpwIiwiaXNoaWthcmkuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJpd2FtaXphd2EuaG9ra2FpZG8uanAiLCJpd2FuYWkuaG9ra2FpZG8uanAiLCJrYW1pZnVyYW5vLmhva2thaWRvLmpwIiwia2FtaWthd2EuaG9ra2FpZG8uanAiLCJrYW1pc2hpaG9yby5ob2trYWlkby5qcCIsImthbWlzdW5hZ2F3YS5ob2trYWlkby5qcCIsImthbW9lbmFpLmhva2thaWRv''@;'; put 'put ''LmpwIiwia2F5YWJlLmhva2thaWRvLmpwIiwia2VtYnVjaGkuaG9ra2FpZG8uanAiLCJraWtvbmFpLmhva2thaWRvLmpwIiwia2ltb2JldHN1Lmhva2thaWRvLmpwIiwia2l0YWhpcm9zaGltYS5ob2trYWlkby5qcCIsImtpdGFtaS5ob2trYWlkby5qcCIsImtpeW9zYXRvLmhva2thaWRvLmpw''@;'; put 'put ''Iiwia29zaGltaXp1Lmhva2thaWRvLmpwIiwia3VubmVwcHUuaG9ra2FpZG8uanAiLCJrdXJpeWFtYS5ob2trYWlkby5qcCIsImt1cm9tYXRzdW5haS5ob2trYWlkby5qcCIsImt1c2hpcm8uaG9ra2FpZG8uanAiLCJrdXRjaGFuLmhva2thaWRvLmpwIiwia3lvd2EuaG9ra2FpZG8uanAiLCJt''@;'; put 'put ''YXNoaWtlLmhva2thaWRvLmpwIiwibWF0c3VtYWUuaG9ra2FpZG8uanAiLCJtaWthc2EuaG9ra2FpZG8uanAiLCJtaW5hbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJtb21iZXRzdS5ob2trYWlkby5qcCIsIm1vc2V1c2hpLmhva2thaWRvLmpwIiwibXVrYXdhLmhva2thaWRvLmpwIiwibXVyb3Jh''@;'; put 'put ''bi5ob2trYWlkby5qcCIsIm5haWUuaG9ra2FpZG8uanAiLCJuYWthZ2F3YS5ob2trYWlkby5qcCIsIm5ha2FzYXRzdW5haS5ob2trYWlkby5qcCIsIm5ha2F0b21iZXRzdS5ob2trYWlkby5qcCIsIm5hbmFlLmhva2thaWRvLmpwIiwibmFucG9yby5ob2trYWlkby5qcCIsIm5heW9yby5ob2tr''@;'; put 'put ''YWlkby5qcCIsIm5lbXVyby5ob2trYWlkby5qcCIsIm5paWthcHB1Lmhva2thaWRvLmpwIiwibmlraS5ob2trYWlkby5qcCIsIm5pc2hpb2tvcHBlLmhva2thaWRvLmpwIiwibm9ib3JpYmV0c3UuaG9ra2FpZG8uanAiLCJudW1hdGEuaG9ra2FpZG8uanAiLCJvYmloaXJvLmhva2thaWRvLmpw''@;'; put 'put ''Iiwib2JpcmEuaG9ra2FpZG8uanAiLCJva2V0by5ob2trYWlkby5qcCIsIm9rb3BwZS5ob2trYWlkby5qcCIsIm90YXJ1Lmhva2thaWRvLmpwIiwib3RvYmUuaG9ra2FpZG8uanAiLCJvdG9mdWtlLmhva2thaWRvLmpwIiwib3RvaW5lcHB1Lmhva2thaWRvLmpwIiwib3VtdS5ob2trYWlkby5q''@;'; put 'put ''cCIsIm96b3JhLmhva2thaWRvLmpwIiwicGlwcHUuaG9ra2FpZG8uanAiLCJyYW5rb3NoaS5ob2trYWlkby5qcCIsInJlYnVuLmhva2thaWRvLmpwIiwicmlrdWJldHN1Lmhva2thaWRvLmpwIiwicmlzaGlyaS5ob2trYWlkby5qcCIsInJpc2hpcmlmdWppLmhva2thaWRvLmpwIiwic2Fyb21h''@;'; put 'put ''Lmhva2thaWRvLmpwIiwic2FydWZ1dHN1Lmhva2thaWRvLmpwIiwic2hha290YW4uaG9ra2FpZG8uanAiLCJzaGFyaS5ob2trYWlkby5qcCIsInNoaWJlY2hhLmhva2thaWRvLmpwIiwic2hpYmV0c3UuaG9ra2FpZG8uanAiLCJzaGlrYWJlLmhva2thaWRvLmpwIiwic2hpa2FvaS5ob2trYWlk''@;'; put 'put ''by5qcCIsInNoaW1hbWFraS5ob2trYWlkby5qcCIsInNoaW1penUuaG9ra2FpZG8uanAiLCJzaGltb2thd2EuaG9ra2FpZG8uanAiLCJzaGluc2hpbm90c3UuaG9ra2FpZG8uanAiLCJzaGludG9rdS5ob2trYWlkby5qcCIsInNoaXJhbnVrYS5ob2trYWlkby5qcCIsInNoaXJhb2kuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJzaGlyaXVjaGkuaG9ra2FpZG8uanAiLCJzb2JldHN1Lmhva2thaWRvLmpwIiwic3VuYWdhd2EuaG9ra2FpZG8uanAiLCJ0YWlraS5ob2trYWlkby5qcCIsInRha2FzdS5ob2trYWlkby5qcCIsInRha2lrYXdhLmhva2thaWRvLmpwIiwidGFraW5vdWUuaG9ra2FpZG8uanAiLCJ0''@;'; put 'put ''ZXNoaWthZ2EuaG9ra2FpZG8uanAiLCJ0b2JldHN1Lmhva2thaWRvLmpwIiwidG9obWEuaG9ra2FpZG8uanAiLCJ0b21ha29tYWkuaG9ra2FpZG8uanAiLCJ0b21hcmkuaG9ra2FpZG8uanAiLCJ0b3lhLmhva2thaWRvLmpwIiwidG95YWtvLmhva2thaWRvLmpwIiwidG95b3RvbWkuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJ0b3lvdXJhLmhva2thaWRvLmpwIiwidHN1YmV0c3UuaG9ra2FpZG8uanAiLCJ0c3VraWdhdGEuaG9ra2FpZG8uanAiLCJ1cmFrYXdhLmhva2thaWRvLmpwIiwidXJhdXN1Lmhva2thaWRvLmpwIiwidXJ5dS5ob2trYWlkby5qcCIsInV0YXNoaW5haS5ob2trYWlkby5qcCIsIndh''@;'; put 'put ''a2thbmFpLmhva2thaWRvLmpwIiwid2Fzc2FtdS5ob2trYWlkby5qcCIsInlha3Vtby5ob2trYWlkby5qcCIsInlvaWNoaS5ob2trYWlkby5qcCIsImFpb2kuaHlvZ28uanAiLCJha2FzaGkuaHlvZ28uanAiLCJha28uaHlvZ28uanAiLCJhbWFnYXNha2kuaHlvZ28uanAiLCJhb2dha2kuaHlv''@;'; put 'put ''Z28uanAiLCJhc2Fnby5oeW9nby5qcCIsImFzaGl5YS5oeW9nby5qcCIsImF3YWppLmh5b2dvLmpwIiwiZnVrdXNha2kuaHlvZ28uanAiLCJnb3NoaWtpLmh5b2dvLmpwIiwiaGFyaW1hLmh5b2dvLmpwIiwiaGltZWppLmh5b2dvLmpwIiwiaWNoaWthd2EuaHlvZ28uanAiLCJpbmFnYXdhLmh5''@;'; put 'put ''b2dvLmpwIiwiaXRhbWkuaHlvZ28uanAiLCJrYWtvZ2F3YS5oeW9nby5qcCIsImthbWlnb3JpLmh5b2dvLmpwIiwia2FtaWthd2EuaHlvZ28uanAiLCJrYXNhaS5oeW9nby5qcCIsImthc3VnYS5oeW9nby5qcCIsImthd2FuaXNoaS5oeW9nby5qcCIsIm1pa2kuaHlvZ28uanAiLCJtaW5hbWlh''@;'; put 'put ''d2FqaS5oeW9nby5qcCIsIm5pc2hpbm9taXlhLmh5b2dvLmpwIiwibmlzaGl3YWtpLmh5b2dvLmpwIiwib25vLmh5b2dvLmpwIiwic2FuZGEuaHlvZ28uanAiLCJzYW5uYW4uaHlvZ28uanAiLCJzYXNheWFtYS5oeW9nby5qcCIsInNheW8uaHlvZ28uanAiLCJzaGluZ3UuaHlvZ28uanAiLCJz''@;'; put 'put ''aGlub25zZW4uaHlvZ28uanAiLCJzaGlzby5oeW9nby5qcCIsInN1bW90by5oeW9nby5qcCIsInRhaXNoaS5oeW9nby5qcCIsInRha2EuaHlvZ28uanAiLCJ0YWthcmF6dWthLmh5b2dvLmpwIiwidGFrYXNhZ28uaHlvZ28uanAiLCJ0YWtpbm8uaHlvZ28uanAiLCJ0YW1iYS5oeW9nby5qcCIs''@;'; put 'put ''InRhdHN1bm8uaHlvZ28uanAiLCJ0b3lvb2thLmh5b2dvLmpwIiwieWFidS5oeW9nby5qcCIsInlhc2hpcm8uaHlvZ28uanAiLCJ5b2thLmh5b2dvLmpwIiwieW9rYXdhLmh5b2dvLmpwIiwiYW1pLmliYXJha2kuanAiLCJhc2FoaS5pYmFyYWtpLmpwIiwiYmFuZG8uaWJhcmFraS5qcCIsImNo''@;'; put 'put ''aWt1c2VpLmliYXJha2kuanAiLCJkYWlnby5pYmFyYWtpLmpwIiwiZnVqaXNoaXJvLmliYXJha2kuanAiLCJoaXRhY2hpLmliYXJha2kuanAiLCJoaXRhY2hpbmFrYS5pYmFyYWtpLmpwIiwiaGl0YWNoaW9taXlhLmliYXJha2kuanAiLCJoaXRhY2hpb3RhLmliYXJha2kuanAiLCJpYmFyYWtp''@;'; put 'put ''LmliYXJha2kuanAiLCJpbmEuaWJhcmFraS5qcCIsImluYXNoaWtpLmliYXJha2kuanAiLCJpdGFrby5pYmFyYWtpLmpwIiwiaXdhbWEuaWJhcmFraS5qcCIsImpvc28uaWJhcmFraS5qcCIsImthbWlzdS5pYmFyYWtpLmpwIiwia2FzYW1hLmliYXJha2kuanAiLCJrYXNoaW1hLmliYXJha2ku''@;'; put 'put ''anAiLCJrYXN1bWlnYXVyYS5pYmFyYWtpLmpwIiwia29nYS5pYmFyYWtpLmpwIiwibWloby5pYmFyYWtpLmpwIiwibWl0by5pYmFyYWtpLmpwIiwibW9yaXlhLmliYXJha2kuanAiLCJuYWthLmliYXJha2kuanAiLCJuYW1lZ2F0YS5pYmFyYWtpLmpwIiwib2FyYWkuaWJhcmFraS5qcCIsIm9n''@;'; put 'put ''YXdhLmliYXJha2kuanAiLCJvbWl0YW1hLmliYXJha2kuanAiLCJyeXVnYXNha2kuaWJhcmFraS5qcCIsInNha2FpLmliYXJha2kuanAiLCJzYWt1cmFnYXdhLmliYXJha2kuanAiLCJzaGltb2RhdGUuaWJhcmFraS5qcCIsInNoaW1vdHN1bWEuaWJhcmFraS5qcCIsInNoaXJvc2F0by5pYmFy''@;'; put 'put ''YWtpLmpwIiwic293YS5pYmFyYWtpLmpwIiwic3VpZnUuaWJhcmFraS5qcCIsInRha2FoYWdpLmliYXJha2kuanAiLCJ0YW1hdHN1a3VyaS5pYmFyYWtpLmpwIiwidG9rYWkuaWJhcmFraS5qcCIsInRvbW9iZS5pYmFyYWtpLmpwIiwidG9uZS5pYmFyYWtpLmpwIiwidG9yaWRlLmliYXJha2ku''@;'; put 'put ''anAiLCJ0c3VjaGl1cmEuaWJhcmFraS5qcCIsInRzdWt1YmEuaWJhcmFraS5qcCIsInVjaGloYXJhLmliYXJha2kuanAiLCJ1c2hpa3UuaWJhcmFraS5qcCIsInlhY2hpeW8uaWJhcmFraS5qcCIsInlhbWFnYXRhLmliYXJha2kuanAiLCJ5YXdhcmEuaWJhcmFraS5qcCIsInl1a2kuaWJhcmFr''@;'; put 'put ''aS5qcCIsImFuYW1penUuaXNoaWthd2EuanAiLCJoYWt1aS5pc2hpa2F3YS5qcCIsImhha3VzYW4uaXNoaWthd2EuanAiLCJrYWdhLmlzaGlrYXdhLmpwIiwia2Fob2t1LmlzaGlrYXdhLmpwIiwia2FuYXphd2EuaXNoaWthd2EuanAiLCJrYXdha2l0YS5pc2hpa2F3YS5qcCIsImtvbWF0c3Uu''@;'; put 'put ''aXNoaWthd2EuanAiLCJuYWthbm90by5pc2hpa2F3YS5qcCIsIm5hbmFvLmlzaGlrYXdhLmpwIiwibm9taS5pc2hpa2F3YS5qcCIsIm5vbm9pY2hpLmlzaGlrYXdhLmpwIiwibm90by5pc2hpa2F3YS5qcCIsInNoaWthLmlzaGlrYXdhLmpwIiwic3V6dS5pc2hpa2F3YS5qcCIsInRzdWJhdGEu''@;'; put 'put ''aXNoaWthd2EuanAiLCJ0c3VydWdpLmlzaGlrYXdhLmpwIiwidWNoaW5hZGEuaXNoaWthd2EuanAiLCJ3YWppbWEuaXNoaWthd2EuanAiLCJmdWRhaS5pd2F0ZS5qcCIsImZ1amlzYXdhLml3YXRlLmpwIiwiaGFuYW1ha2kuaXdhdGUuanAiLCJoaXJhaXp1bWkuaXdhdGUuanAiLCJoaXJvbm8u''@;'; put 'put ''aXdhdGUuanAiLCJpY2hpbm9oZS5pd2F0ZS5qcCIsImljaGlub3Nla2kuaXdhdGUuanAiLCJpd2FpenVtaS5pd2F0ZS5qcCIsIml3YXRlLml3YXRlLmpwIiwiam9ib2ppLml3YXRlLmpwIiwia2FtYWlzaGkuaXdhdGUuanAiLCJrYW5lZ2FzYWtpLml3YXRlLmpwIiwia2FydW1haS5pd2F0ZS5q''@;'; put 'put ''cCIsImthd2FpLml3YXRlLmpwIiwia2l0YWthbWkuaXdhdGUuanAiLCJrdWppLml3YXRlLmpwIiwia3Vub2hlLml3YXRlLmpwIiwia3V6dW1ha2kuaXdhdGUuanAiLCJtaXlha28uaXdhdGUuanAiLCJtaXp1c2F3YS5pd2F0ZS5qcCIsIm1vcmlva2EuaXdhdGUuanAiLCJuaW5vaGUuaXdhdGUu''@;'; put 'put ''anAiLCJub2RhLml3YXRlLmpwIiwib2Z1bmF0by5pd2F0ZS5qcCIsIm9zaHUuaXdhdGUuanAiLCJvdHN1Y2hpLml3YXRlLmpwIiwicmlrdXplbnRha2F0YS5pd2F0ZS5qcCIsInNoaXdhLml3YXRlLmpwIiwic2hpenVrdWlzaGkuaXdhdGUuanAiLCJzdW1pdGEuaXdhdGUuanAiLCJ0YW5vaGF0''@;'; put 'put ''YS5pd2F0ZS5qcCIsInRvbm8uaXdhdGUuanAiLCJ5YWhhYmEuaXdhdGUuanAiLCJ5YW1hZGEuaXdhdGUuanAiLCJheWFnYXdhLmthZ2F3YS5qcCIsImhpZ2FzaGlrYWdhd2Eua2FnYXdhLmpwIiwia2Fub25qaS5rYWdhd2EuanAiLCJrb3RvaGlyYS5rYWdhd2EuanAiLCJtYW5uby5rYWdhd2Eu''@;'; put 'put ''anAiLCJtYXJ1Z2FtZS5rYWdhd2EuanAiLCJtaXRveW8ua2FnYXdhLmpwIiwibmFvc2hpbWEua2FnYXdhLmpwIiwic2FudWtpLmthZ2F3YS5qcCIsInRhZG90c3Uua2FnYXdhLmpwIiwidGFrYW1hdHN1LmthZ2F3YS5qcCIsInRvbm9zaG8ua2FnYXdhLmpwIiwidWNoaW5vbWkua2FnYXdhLmpw''@;'; put 'put ''IiwidXRhenUua2FnYXdhLmpwIiwiemVudHN1amkua2FnYXdhLmpwIiwiYWt1bmUua2Fnb3NoaW1hLmpwIiwiYW1hbWkua2Fnb3NoaW1hLmpwIiwiaGlva2kua2Fnb3NoaW1hLmpwIiwiaXNhLmthZ29zaGltYS5qcCIsImlzZW4ua2Fnb3NoaW1hLmpwIiwiaXp1bWkua2Fnb3NoaW1hLmpwIiwi''@;'; put 'put ''a2Fnb3NoaW1hLmthZ29zaGltYS5qcCIsImthbm95YS5rYWdvc2hpbWEuanAiLCJrYXdhbmFiZS5rYWdvc2hpbWEuanAiLCJraW5rby5rYWdvc2hpbWEuanAiLCJrb3V5YW1hLmthZ29zaGltYS5qcCIsIm1ha3VyYXpha2kua2Fnb3NoaW1hLmpwIiwibWF0c3Vtb3RvLmthZ29zaGltYS5qcCIs''@;'; put 'put ''Im1pbmFtaXRhbmUua2Fnb3NoaW1hLmpwIiwibmFrYXRhbmUua2Fnb3NoaW1hLmpwIiwibmlzaGlub29tb3RlLmthZ29zaGltYS5qcCIsInNhdHN1bWFzZW5kYWkua2Fnb3NoaW1hLmpwIiwic29vLmthZ29zaGltYS5qcCIsInRhcnVtaXp1LmthZ29zaGltYS5qcCIsInl1c3VpLmthZ29zaGlt''@;'; put 'put ''YS5qcCIsImFpa2F3YS5rYW5hZ2F3YS5qcCIsImF0c3VnaS5rYW5hZ2F3YS5qcCIsImF5YXNlLmthbmFnYXdhLmpwIiwiY2hpZ2FzYWtpLmthbmFnYXdhLmpwIiwiZWJpbmEua2FuYWdhd2EuanAiLCJmdWppc2F3YS5rYW5hZ2F3YS5qcCIsImhhZGFuby5rYW5hZ2F3YS5qcCIsImhha29uZS5r''@;'; put 'put ''YW5hZ2F3YS5qcCIsImhpcmF0c3VrYS5rYW5hZ2F3YS5qcCIsImlzZWhhcmEua2FuYWdhd2EuanAiLCJrYWlzZWkua2FuYWdhd2EuanAiLCJrYW1ha3VyYS5rYW5hZ2F3YS5qcCIsImtpeW9rYXdhLmthbmFnYXdhLmpwIiwibWF0c3VkYS5rYW5hZ2F3YS5qcCIsIm1pbmFtaWFzaGlnYXJhLmth''@;'; put 'put ''bmFnYXdhLmpwIiwibWl1cmEua2FuYWdhd2EuanAiLCJuYWthaS5rYW5hZ2F3YS5qcCIsIm5pbm9taXlhLmthbmFnYXdhLmpwIiwib2Rhd2FyYS5rYW5hZ2F3YS5qcCIsIm9pLmthbmFnYXdhLmpwIiwib2lzby5rYW5hZ2F3YS5qcCIsInNhZ2FtaWhhcmEua2FuYWdhd2EuanAiLCJzYW11a2F3''@;'; put 'put ''YS5rYW5hZ2F3YS5qcCIsInRzdWt1aS5rYW5hZ2F3YS5qcCIsInlhbWFraXRhLmthbmFnYXdhLmpwIiwieWFtYXRvLmthbmFnYXdhLmpwIiwieW9rb3N1a2Eua2FuYWdhd2EuanAiLCJ5dWdhd2FyYS5rYW5hZ2F3YS5qcCIsInphbWEua2FuYWdhd2EuanAiLCJ6dXNoaS5rYW5hZ2F3YS5qcCIs''@;'; put 'put ''ImFraS5rb2NoaS5qcCIsImdlaXNlaS5rb2NoaS5qcCIsImhpZGFrYS5rb2NoaS5qcCIsImhpZ2FzaGl0c3Vuby5rb2NoaS5qcCIsImluby5rb2NoaS5qcCIsImthZ2FtaS5rb2NoaS5qcCIsImthbWkua29jaGkuanAiLCJraXRhZ2F3YS5rb2NoaS5qcCIsImtvY2hpLmtvY2hpLmpwIiwibWlo''@;'; put 'put ''YXJhLmtvY2hpLmpwIiwibW90b3lhbWEua29jaGkuanAiLCJtdXJvdG8ua29jaGkuanAiLCJuYWhhcmkua29jaGkuanAiLCJuYWthbXVyYS5rb2NoaS5qcCIsIm5hbmtva3Uua29jaGkuanAiLCJuaXNoaXRvc2Eua29jaGkuanAiLCJuaXlvZG9nYXdhLmtvY2hpLmpwIiwib2NoaS5rb2NoaS5q''@;'; put 'put ''cCIsIm9rYXdhLmtvY2hpLmpwIiwib3RveW8ua29jaGkuanAiLCJvdHN1a2kua29jaGkuanAiLCJzYWthd2Eua29jaGkuanAiLCJzdWt1bW8ua29jaGkuanAiLCJzdXNha2kua29jaGkuanAiLCJ0b3NhLmtvY2hpLmpwIiwidG9zYXNoaW1penUua29jaGkuanAiLCJ0b3lvLmtvY2hpLmpwIiwi''@;'; put 'put ''dHN1bm8ua29jaGkuanAiLCJ1bWFqaS5rb2NoaS5qcCIsInlhc3VkYS5rb2NoaS5qcCIsInl1c3VoYXJhLmtvY2hpLmpwIiwiYW1ha3VzYS5rdW1hbW90by5qcCIsImFyYW8ua3VtYW1vdG8uanAiLCJhc28ua3VtYW1vdG8uanAiLCJjaG95by5rdW1hbW90by5qcCIsImd5b2t1dG8ua3VtYW1v''@;'; put 'put ''dG8uanAiLCJrYW1pYW1ha3VzYS5rdW1hbW90by5qcCIsImtpa3VjaGkua3VtYW1vdG8uanAiLCJrdW1hbW90by5rdW1hbW90by5qcCIsIm1hc2hpa2kua3VtYW1vdG8uanAiLCJtaWZ1bmUua3VtYW1vdG8uanAiLCJtaW5hbWF0YS5rdW1hbW90by5qcCIsIm1pbmFtaW9ndW5pLmt1bWFtb3Rv''@;'; put 'put ''LmpwIiwibmFnYXN1Lmt1bWFtb3RvLmpwIiwibmlzaGloYXJhLmt1bWFtb3RvLmpwIiwib2d1bmkua3VtYW1vdG8uanAiLCJvenUua3VtYW1vdG8uanAiLCJzdW1vdG8ua3VtYW1vdG8uanAiLCJ0YWthbW9yaS5rdW1hbW90by5qcCIsInVraS5rdW1hbW90by5qcCIsInV0by5rdW1hbW90by5q''@;'; put 'put ''cCIsInlhbWFnYS5rdW1hbW90by5qcCIsInlhbWF0by5rdW1hbW90by5qcCIsInlhdHN1c2hpcm8ua3VtYW1vdG8uanAiLCJheWFiZS5reW90by5qcCIsImZ1a3VjaGl5YW1hLmt5b3RvLmpwIiwiaGlnYXNoaXlhbWEua3lvdG8uanAiLCJpZGUua3lvdG8uanAiLCJpbmUua3lvdG8uanAiLCJq''@;'; put 'put ''b3lvLmt5b3RvLmpwIiwia2FtZW9rYS5reW90by5qcCIsImthbW8ua3lvdG8uanAiLCJraXRhLmt5b3RvLmpwIiwia2l6dS5reW90by5qcCIsImt1bWl5YW1hLmt5b3RvLmpwIiwia3lvdGFtYmEua3lvdG8uanAiLCJreW90YW5hYmUua3lvdG8uanAiLCJreW90YW5nby5reW90by5qcCIsIm1h''@;'; put 'put ''aXp1cnUua3lvdG8uanAiLCJtaW5hbWkua3lvdG8uanAiLCJtaW5hbWl5YW1hc2hpcm8ua3lvdG8uanAiLCJtaXlhenUua3lvdG8uanAiLCJtdWtvLmt5b3RvLmpwIiwibmFnYW9rYWt5by5reW90by5qcCIsIm5ha2FneW8ua3lvdG8uanAiLCJuYW50YW4ua3lvdG8uanAiLCJveWFtYXpha2ku''@;'; put 'put ''a3lvdG8uanAiLCJzYWt5by5reW90by5qcCIsInNlaWthLmt5b3RvLmpwIiwidGFuYWJlLmt5b3RvLmpwIiwidWppLmt5b3RvLmpwIiwidWppdGF3YXJhLmt5b3RvLmpwIiwid2F6dWthLmt5b3RvLmpwIiwieWFtYXNoaW5hLmt5b3RvLmpwIiwieWF3YXRhLmt5b3RvLmpwIiwiYXNhaGkubWll''@;'; put 'put ''LmpwIiwiaW5hYmUubWllLmpwIiwiaXNlLm1pZS5qcCIsImthbWV5YW1hLm1pZS5qcCIsImthd2Fnb2UubWllLmpwIiwia2loby5taWUuanAiLCJraXNvc2FraS5taWUuanAiLCJraXdhLm1pZS5qcCIsImtvbW9uby5taWUuanAiLCJrdW1hbm8ubWllLmpwIiwia3V3YW5hLm1pZS5qcCIsIm1h''@;'; put 'put ''dHN1c2FrYS5taWUuanAiLCJtZWl3YS5taWUuanAiLCJtaWhhbWEubWllLmpwIiwibWluYW1paXNlLm1pZS5qcCIsIm1pc3VnaS5taWUuanAiLCJtaXlhbWEubWllLmpwIiwibmFiYXJpLm1pZS5qcCIsInNoaW1hLm1pZS5qcCIsInN1enVrYS5taWUuanAiLCJ0YWRvLm1pZS5qcCIsInRhaWtp''@;'; put 'put ''Lm1pZS5qcCIsInRha2kubWllLmpwIiwidGFtYWtpLm1pZS5qcCIsInRvYmEubWllLmpwIiwidHN1Lm1pZS5qcCIsInVkb25vLm1pZS5qcCIsInVyZXNoaW5vLm1pZS5qcCIsIndhdGFyYWkubWllLmpwIiwieW9ra2FpY2hpLm1pZS5qcCIsImZ1cnVrYXdhLm1peWFnaS5qcCIsImhpZ2FzaGlt''@;'; put 'put ''YXRzdXNoaW1hLm1peWFnaS5qcCIsImlzaGlub21ha2kubWl5YWdpLmpwIiwiaXdhbnVtYS5taXlhZ2kuanAiLCJrYWt1ZGEubWl5YWdpLmpwIiwia2FtaS5taXlhZ2kuanAiLCJrYXdhc2FraS5taXlhZ2kuanAiLCJtYXJ1bW9yaS5taXlhZ2kuanAiLCJtYXRzdXNoaW1hLm1peWFnaS5qcCIs''@;'; put 'put ''Im1pbmFtaXNhbnJpa3UubWl5YWdpLmpwIiwibWlzYXRvLm1peWFnaS5qcCIsIm11cmF0YS5taXlhZ2kuanAiLCJuYXRvcmkubWl5YWdpLmpwIiwib2dhd2FyYS5taXlhZ2kuanAiLCJvaGlyYS5taXlhZ2kuanAiLCJvbmFnYXdhLm1peWFnaS5qcCIsIm9zYWtpLm1peWFnaS5qcCIsInJpZnUu''@;'; put 'put ''bWl5YWdpLmpwIiwic2VtaW5lLm1peWFnaS5qcCIsInNoaWJhdGEubWl5YWdpLmpwIiwic2hpY2hpa2FzaHVrdS5taXlhZ2kuanAiLCJzaGlrYW1hLm1peWFnaS5qcCIsInNoaW9nYW1hLm1peWFnaS5qcCIsInNoaXJvaXNoaS5taXlhZ2kuanAiLCJ0YWdham8ubWl5YWdpLmpwIiwidGFpd2Eu''@;'; put 'put ''bWl5YWdpLmpwIiwidG9tZS5taXlhZ2kuanAiLCJ0b21peWEubWl5YWdpLmpwIiwid2FrdXlhLm1peWFnaS5qcCIsIndhdGFyaS5taXlhZ2kuanAiLCJ5YW1hbW90by5taXlhZ2kuanAiLCJ6YW8ubWl5YWdpLmpwIiwiYXlhLm1peWF6YWtpLmpwIiwiZWJpbm8ubWl5YXpha2kuanAiLCJnb2th''@;'; put 'put ''c2UubWl5YXpha2kuanAiLCJoeXVnYS5taXlhemFraS5qcCIsImthZG9nYXdhLm1peWF6YWtpLmpwIiwia2F3YW1pbmFtaS5taXlhemFraS5qcCIsImtpam8ubWl5YXpha2kuanAiLCJraXRhZ2F3YS5taXlhemFraS5qcCIsImtpdGFrYXRhLm1peWF6YWtpLmpwIiwia2l0YXVyYS5taXlhemFr''@;'; put 'put ''aS5qcCIsImtvYmF5YXNoaS5taXlhemFraS5qcCIsImt1bml0b21pLm1peWF6YWtpLmpwIiwia3VzaGltYS5taXlhemFraS5qcCIsIm1pbWF0YS5taXlhemFraS5qcCIsIm1peWFrb25vam8ubWl5YXpha2kuanAiLCJtaXlhemFraS5taXlhemFraS5qcCIsIm1vcm90c3VrYS5taXlhemFraS5q''@;'; put 'put ''cCIsIm5pY2hpbmFuLm1peWF6YWtpLmpwIiwibmlzaGltZXJhLm1peWF6YWtpLmpwIiwibm9iZW9rYS5taXlhemFraS5qcCIsInNhaXRvLm1peWF6YWtpLmpwIiwic2hpaWJhLm1peWF6YWtpLmpwIiwic2hpbnRvbWkubWl5YXpha2kuanAiLCJ0YWthaGFydS5taXlhemFraS5qcCIsInRha2Fu''@;'; put 'put ''YWJlLm1peWF6YWtpLmpwIiwidGFrYXpha2kubWl5YXpha2kuanAiLCJ0c3Vuby5taXlhemFraS5qcCIsImFjaGkubmFnYW5vLmpwIiwiYWdlbWF0c3UubmFnYW5vLmpwIiwiYW5hbi5uYWdhbm8uanAiLCJhb2tpLm5hZ2Fuby5qcCIsImFzYWhpLm5hZ2Fuby5qcCIsImF6dW1pbm8ubmFnYW5v''@;'; put 'put ''LmpwIiwiY2hpa3Vob2t1Lm5hZ2Fuby5qcCIsImNoaWt1bWEubmFnYW5vLmpwIiwiY2hpbm8ubmFnYW5vLmpwIiwiZnVqaW1pLm5hZ2Fuby5qcCIsImhha3ViYS5uYWdhbm8uanAiLCJoYXJhLm5hZ2Fuby5qcCIsImhpcmF5YS5uYWdhbm8uanAiLCJpaWRhLm5hZ2Fuby5qcCIsImlpamltYS5u''@;'; put 'put ''YWdhbm8uanAiLCJpaXlhbWEubmFnYW5vLmpwIiwiaWl6dW5hLm5hZ2Fuby5qcCIsImlrZWRhLm5hZ2Fuby5qcCIsImlrdXNha2EubmFnYW5vLmpwIiwiaW5hLm5hZ2Fuby5qcCIsImthcnVpemF3YS5uYWdhbm8uanAiLCJrYXdha2FtaS5uYWdhbm8uanAiLCJraXNvLm5hZ2Fuby5qcCIsImtp''@;'; put 'put ''c29mdWt1c2hpbWEubmFnYW5vLmpwIiwia2l0YWFpa2kubmFnYW5vLmpwIiwia29tYWdhbmUubmFnYW5vLmpwIiwia29tb3JvLm5hZ2Fuby5qcCIsIm1hdHN1a2F3YS5uYWdhbm8uanAiLCJtYXRzdW1vdG8ubmFnYW5vLmpwIiwibWlhc2EubmFnYW5vLmpwIiwibWluYW1pYWlraS5uYWdhbm8u''@;'; put 'put ''anAiLCJtaW5hbWltYWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1pbm93YS5uYWdhbm8uanAiLCJtaW5vd2EubmFnYW5vLmpwIiwibWl5YWRhLm5hZ2Fuby5qcCIsIm1peW90YS5uYWdhbm8uanAiLCJtb2NoaXp1a2kubmFnYW5vLmpwIiwibmFnYW5vLm5hZ2Fuby5qcCIsIm5hZ2F3YS5uYWdhbm8u''@;'; put 'put ''anAiLCJuYWdpc28ubmFnYW5vLmpwIiwibmFrYWdhd2EubmFnYW5vLmpwIiwibmFrYW5vLm5hZ2Fuby5qcCIsIm5vemF3YW9uc2VuLm5hZ2Fuby5qcCIsIm9idXNlLm5hZ2Fuby5qcCIsIm9nYXdhLm5hZ2Fuby5qcCIsIm9rYXlhLm5hZ2Fuby5qcCIsIm9tYWNoaS5uYWdhbm8uanAiLCJvbWku''@;'; put 'put ''bmFnYW5vLmpwIiwib29rdXdhLm5hZ2Fuby5qcCIsIm9vc2hpa2EubmFnYW5vLmpwIiwib3Rha2kubmFnYW5vLmpwIiwib3RhcmkubmFnYW5vLmpwIiwic2FrYWUubmFnYW5vLmpwIiwic2FrYWtpLm5hZ2Fuby5qcCIsInNha3UubmFnYW5vLmpwIiwic2FrdWhvLm5hZ2Fuby5qcCIsInNoaW1v''@;'; put 'put ''c3V3YS5uYWdhbm8uanAiLCJzaGluYW5vbWFjaGkubmFnYW5vLmpwIiwic2hpb2ppcmkubmFnYW5vLmpwIiwic3V3YS5uYWdhbm8uanAiLCJzdXpha2EubmFnYW5vLmpwIiwidGFrYWdpLm5hZ2Fuby5qcCIsInRha2Ftb3JpLm5hZ2Fuby5qcCIsInRha2F5YW1hLm5hZ2Fuby5qcCIsInRhdGVz''@;'; put 'put ''aGluYS5uYWdhbm8uanAiLCJ0YXRzdW5vLm5hZ2Fuby5qcCIsInRvZ2FrdXNoaS5uYWdhbm8uanAiLCJ0b2d1cmEubmFnYW5vLmpwIiwidG9taS5uYWdhbm8uanAiLCJ1ZWRhLm5hZ2Fuby5qcCIsIndhZGEubmFnYW5vLmpwIiwieWFtYWdhdGEubmFnYW5vLmpwIiwieWFtYW5vdWNoaS5uYWdh''@;'; put 'put ''bm8uanAiLCJ5YXNha2EubmFnYW5vLmpwIiwieWFzdW9rYS5uYWdhbm8uanAiLCJjaGlqaXdhLm5hZ2FzYWtpLmpwIiwiZnV0c3UubmFnYXNha2kuanAiLCJnb3RvLm5hZ2FzYWtpLmpwIiwiaGFzYW1pLm5hZ2FzYWtpLmpwIiwiaGlyYWRvLm5hZ2FzYWtpLmpwIiwiaWtpLm5hZ2FzYWtpLmpw''@;'; put 'put ''IiwiaXNhaGF5YS5uYWdhc2FraS5qcCIsImthd2F0YW5hLm5hZ2FzYWtpLmpwIiwia3VjaGlub3RzdS5uYWdhc2FraS5qcCIsIm1hdHN1dXJhLm5hZ2FzYWtpLmpwIiwibmFnYXNha2kubmFnYXNha2kuanAiLCJvYmFtYS5uYWdhc2FraS5qcCIsIm9tdXJhLm5hZ2FzYWtpLmpwIiwib3NldG8u''@;'; put 'put ''bmFnYXNha2kuanAiLCJzYWlrYWkubmFnYXNha2kuanAiLCJzYXNlYm8ubmFnYXNha2kuanAiLCJzZWloaS5uYWdhc2FraS5qcCIsInNoaW1hYmFyYS5uYWdhc2FraS5qcCIsInNoaW5rYW1pZ290by5uYWdhc2FraS5qcCIsInRvZ2l0c3UubmFnYXNha2kuanAiLCJ0c3VzaGltYS5uYWdhc2Fr''@;'; put 'put ''aS5qcCIsInVuemVuLm5hZ2FzYWtpLmpwIiwiYW5kby5uYXJhLmpwIiwiZ29zZS5uYXJhLmpwIiwiaGVndXJpLm5hcmEuanAiLCJoaWdhc2hpeW9zaGluby5uYXJhLmpwIiwiaWthcnVnYS5uYXJhLmpwIiwiaWtvbWEubmFyYS5qcCIsImthbWlraXRheWFtYS5uYXJhLmpwIiwia2FubWFraS5u''@;'; put 'put ''YXJhLmpwIiwia2FzaGliYS5uYXJhLmpwIiwia2FzaGloYXJhLm5hcmEuanAiLCJrYXRzdXJhZ2kubmFyYS5qcCIsImthd2FpLm5hcmEuanAiLCJrYXdha2FtaS5uYXJhLmpwIiwia2F3YW5pc2hpLm5hcmEuanAiLCJrb3J5by5uYXJhLmpwIiwia3Vyb3Rha2kubmFyYS5qcCIsIm1pdHN1ZS5u''@;'; put 'put ''YXJhLmpwIiwibWl5YWtlLm5hcmEuanAiLCJuYXJhLm5hcmEuanAiLCJub3NlZ2F3YS5uYXJhLmpwIiwib2ppLm5hcmEuanAiLCJvdWRhLm5hcmEuanAiLCJveW9kby5uYXJhLmpwIiwic2FrdXJhaS5uYXJhLmpwIiwic2FuZ28ubmFyYS5qcCIsInNoaW1vaWNoaS5uYXJhLmpwIiwic2hpbW9r''@;'; put 'put ''aXRheWFtYS5uYXJhLmpwIiwic2hpbmpvLm5hcmEuanAiLCJzb25pLm5hcmEuanAiLCJ0YWthdG9yaS5uYXJhLmpwIiwidGF3YXJhbW90by5uYXJhLmpwIiwidGVua2F3YS5uYXJhLmpwIiwidGVucmkubmFyYS5qcCIsInVkYS5uYXJhLmpwIiwieWFtYXRva29yaXlhbWEubmFyYS5qcCIsInlh''@;'; put 'put ''bWF0b3Rha2FkYS5uYXJhLmpwIiwieWFtYXpvZS5uYXJhLmpwIiwieW9zaGluby5uYXJhLmpwIiwiYWdhLm5paWdhdGEuanAiLCJhZ2Fuby5uaWlnYXRhLmpwIiwiZ29zZW4ubmlpZ2F0YS5qcCIsIml0b2lnYXdhLm5paWdhdGEuanAiLCJpenVtb3pha2kubmlpZ2F0YS5qcCIsImpvZXRzdS5u''@;'; put 'put ''aWlnYXRhLmpwIiwia2Ftby5uaWlnYXRhLmpwIiwia2FyaXdhLm5paWdhdGEuanAiLCJrYXNoaXdhemFraS5uaWlnYXRhLmpwIiwibWluYW1pdW9udW1hLm5paWdhdGEuanAiLCJtaXRzdWtlLm5paWdhdGEuanAiLCJtdWlrYS5uaWlnYXRhLmpwIiwibXVyYWthbWkubmlpZ2F0YS5qcCIsIm15''@;'; put 'put ''b2tvLm5paWdhdGEuanAiLCJuYWdhb2thLm5paWdhdGEuanAiLCJuaWlnYXRhLm5paWdhdGEuanAiLCJvaml5YS5uaWlnYXRhLmpwIiwib21pLm5paWdhdGEuanAiLCJzYWRvLm5paWdhdGEuanAiLCJzYW5qby5uaWlnYXRhLmpwIiwic2Vpcm8ubmlpZ2F0YS5qcCIsInNlaXJvdS5uaWlnYXRh''@;'; put 'put ''LmpwIiwic2VraWthd2EubmlpZ2F0YS5qcCIsInNoaWJhdGEubmlpZ2F0YS5qcCIsInRhZ2FtaS5uaWlnYXRhLmpwIiwidGFpbmFpLm5paWdhdGEuanAiLCJ0b2NoaW8ubmlpZ2F0YS5qcCIsInRva2FtYWNoaS5uaWlnYXRhLmpwIiwidHN1YmFtZS5uaWlnYXRhLmpwIiwidHN1bmFuLm5paWdh''@;'; put 'put ''dGEuanAiLCJ1b251bWEubmlpZ2F0YS5qcCIsInlhaGlrby5uaWlnYXRhLmpwIiwieW9pdGEubmlpZ2F0YS5qcCIsInl1emF3YS5uaWlnYXRhLmpwIiwiYmVwcHUub2l0YS5qcCIsImJ1bmdvb25vLm9pdGEuanAiLCJidW5nb3Rha2FkYS5vaXRhLmpwIiwiaGFzYW1hLm9pdGEuanAiLCJoaWpp''@;'; put 'put ''Lm9pdGEuanAiLCJoaW1lc2hpbWEub2l0YS5qcCIsImhpdGEub2l0YS5qcCIsImthbWl0c3VlLm9pdGEuanAiLCJrb2tvbm9lLm9pdGEuanAiLCJrdWp1Lm9pdGEuanAiLCJrdW5pc2FraS5vaXRhLmpwIiwia3VzdS5vaXRhLmpwIiwib2l0YS5vaXRhLmpwIiwic2Fpa2kub2l0YS5qcCIsInRh''@;'; put 'put ''a2V0YS5vaXRhLmpwIiwidHN1a3VtaS5vaXRhLmpwIiwidXNhLm9pdGEuanAiLCJ1c3VraS5vaXRhLmpwIiwieXVmdS5vaXRhLmpwIiwiYWthaXdhLm9rYXlhbWEuanAiLCJhc2FrdWNoaS5va2F5YW1hLmpwIiwiYml6ZW4ub2theWFtYS5qcCIsImhheWFzaGltYS5va2F5YW1hLmpwIiwiaWJh''@;'; put 'put ''cmEub2theWFtYS5qcCIsImthZ2FtaW5vLm9rYXlhbWEuanAiLCJrYXNhb2thLm9rYXlhbWEuanAiLCJraWJpY2h1by5va2F5YW1hLmpwIiwia3VtZW5hbi5va2F5YW1hLmpwIiwia3VyYXNoaWtpLm9rYXlhbWEuanAiLCJtYW5pd2Eub2theWFtYS5qcCIsIm1pc2FraS5va2F5YW1hLmpwIiwi''@;'; put 'put ''bmFnaS5va2F5YW1hLmpwIiwibmlpbWkub2theWFtYS5qcCIsIm5pc2hpYXdha3VyYS5va2F5YW1hLmpwIiwib2theWFtYS5va2F5YW1hLmpwIiwic2F0b3Noby5va2F5YW1hLmpwIiwic2V0b3VjaGkub2theWFtYS5qcCIsInNoaW5qby5va2F5YW1hLmpwIiwic2hvby5va2F5YW1hLmpwIiwi''@;'; put 'put ''c29qYS5va2F5YW1hLmpwIiwidGFrYWhhc2hpLm9rYXlhbWEuanAiLCJ0YW1hbm8ub2theWFtYS5qcCIsInRzdXlhbWEub2theWFtYS5qcCIsIndha2Uub2theWFtYS5qcCIsInlha2FnZS5va2F5YW1hLmpwIiwiYWd1bmkub2tpbmF3YS5qcCIsImdpbm93YW4ub2tpbmF3YS5qcCIsImdpbm96''@;'; put 'put ''YS5va2luYXdhLmpwIiwiZ3VzaGlrYW1pLm9raW5hd2EuanAiLCJoYWViYXJ1Lm9raW5hd2EuanAiLCJoaWdhc2hpLm9raW5hd2EuanAiLCJoaXJhcmEub2tpbmF3YS5qcCIsImloZXlhLm9raW5hd2EuanAiLCJpc2hpZ2FraS5va2luYXdhLmpwIiwiaXNoaWthd2Eub2tpbmF3YS5qcCIsIml0''@;'; put 'put ''b21hbi5va2luYXdhLmpwIiwiaXplbmEub2tpbmF3YS5qcCIsImthZGVuYS5va2luYXdhLmpwIiwia2luLm9raW5hd2EuanAiLCJraXRhZGFpdG8ub2tpbmF3YS5qcCIsImtpdGFuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJrdW1lamltYS5va2luYXdhLmpwIiwia3VuaWdhbWkub2tpbmF3YS5q''@;'; put 'put ''cCIsIm1pbmFtaWRhaXRvLm9raW5hd2EuanAiLCJtb3RvYnUub2tpbmF3YS5qcCIsIm5hZ28ub2tpbmF3YS5qcCIsIm5haGEub2tpbmF3YS5qcCIsIm5ha2FndXN1a3Uub2tpbmF3YS5qcCIsIm5ha2lqaW4ub2tpbmF3YS5qcCIsIm5hbmpvLm9raW5hd2EuanAiLCJuaXNoaWhhcmEub2tpbmF3''@;'; put 'put ''YS5qcCIsIm9naW1pLm9raW5hd2EuanAiLCJva2luYXdhLm9raW5hd2EuanAiLCJvbm5hLm9raW5hd2EuanAiLCJzaGltb2ppLm9raW5hd2EuanAiLCJ0YWtldG9taS5va2luYXdhLmpwIiwidGFyYW1hLm9raW5hd2EuanAiLCJ0b2thc2hpa2kub2tpbmF3YS5qcCIsInRvbWlndXN1a3Uub2tp''@;'; put 'put ''bmF3YS5qcCIsInRvbmFraS5va2luYXdhLmpwIiwidXJhc29lLm9raW5hd2EuanAiLCJ1cnVtYS5va2luYXdhLmpwIiwieWFlc2Uub2tpbmF3YS5qcCIsInlvbWl0YW4ub2tpbmF3YS5qcCIsInlvbmFiYXJ1Lm9raW5hd2EuanAiLCJ5b25hZ3VuaS5va2luYXdhLmpwIiwiemFtYW1pLm9raW5h''@;'; put 'put ''d2EuanAiLCJhYmVuby5vc2FrYS5qcCIsImNoaWhheWFha2FzYWthLm9zYWthLmpwIiwiY2h1by5vc2FrYS5qcCIsImRhaXRvLm9zYWthLmpwIiwiZnVqaWlkZXJhLm9zYWthLmpwIiwiaGFiaWtpbm8ub3Nha2EuanAiLCJoYW5uYW4ub3Nha2EuanAiLCJoaWdhc2hpb3Nha2Eub3Nha2EuanAi''@;'; put 'put ''LCJoaWdhc2hpc3VtaXlvc2hpLm9zYWthLmpwIiwiaGlnYXNoaXlvZG9nYXdhLm9zYWthLmpwIiwiaGlyYWthdGEub3Nha2EuanAiLCJpYmFyYWtpLm9zYWthLmpwIiwiaWtlZGEub3Nha2EuanAiLCJpenVtaS5vc2FrYS5qcCIsIml6dW1pb3RzdS5vc2FrYS5qcCIsIml6dW1pc2Fuby5vc2Fr''@;'; put 'put ''YS5qcCIsImthZG9tYS5vc2FrYS5qcCIsImthaXp1a2Eub3Nha2EuanAiLCJrYW5hbi5vc2FrYS5qcCIsImthc2hpd2FyYS5vc2FrYS5qcCIsImthdGFuby5vc2FrYS5qcCIsImthd2FjaGluYWdhbm8ub3Nha2EuanAiLCJraXNoaXdhZGEub3Nha2EuanAiLCJraXRhLm9zYWthLmpwIiwia3Vt''@;'; put 'put ''YXRvcmkub3Nha2EuanAiLCJtYXRzdWJhcmEub3Nha2EuanAiLCJtaW5hdG8ub3Nha2EuanAiLCJtaW5vaC5vc2FrYS5qcCIsIm1pc2FraS5vc2FrYS5qcCIsIm1vcmlndWNoaS5vc2FrYS5qcCIsIm5leWFnYXdhLm9zYWthLmpwIiwibmlzaGkub3Nha2EuanAiLCJub3NlLm9zYWthLmpwIiwi''@;'; put 'put ''b3Nha2FzYXlhbWEub3Nha2EuanAiLCJzYWthaS5vc2FrYS5qcCIsInNheWFtYS5vc2FrYS5qcCIsInNlbm5hbi5vc2FrYS5qcCIsInNldHRzdS5vc2FrYS5qcCIsInNoaWpvbmF3YXRlLm9zYWthLmpwIiwic2hpbWFtb3RvLm9zYWthLmpwIiwic3VpdGEub3Nha2EuanAiLCJ0YWRhb2thLm9z''@;'; put 'put ''YWthLmpwIiwidGFpc2hpLm9zYWthLmpwIiwidGFqaXJpLm9zYWthLmpwIiwidGFrYWlzaGkub3Nha2EuanAiLCJ0YWthdHN1a2kub3Nha2EuanAiLCJ0b25kYWJheWFzaGkub3Nha2EuanAiLCJ0b3lvbmFrYS5vc2FrYS5qcCIsInRveW9uby5vc2FrYS5qcCIsInlhby5vc2FrYS5qcCIsImFy''@;'; put 'put ''aWFrZS5zYWdhLmpwIiwiYXJpdGEuc2FnYS5qcCIsImZ1a3Vkb21pLnNhZ2EuanAiLCJnZW5rYWkuc2FnYS5qcCIsImhhbWF0YW1hLnNhZ2EuanAiLCJoaXplbi5zYWdhLmpwIiwiaW1hcmkuc2FnYS5qcCIsImthbWltaW5lLnNhZ2EuanAiLCJrYW56YWtpLnNhZ2EuanAiLCJrYXJhdHN1LnNh''@;'; put 'put ''Z2EuanAiLCJrYXNoaW1hLnNhZ2EuanAiLCJraXRhZ2F0YS5zYWdhLmpwIiwia2l0YWhhdGEuc2FnYS5qcCIsImtpeWFtYS5zYWdhLmpwIiwia291aG9rdS5zYWdhLmpwIiwia3l1cmFnaS5zYWdhLmpwIiwibmlzaGlhcml0YS5zYWdhLmpwIiwib2dpLnNhZ2EuanAiLCJvbWFjaGkuc2FnYS5q''@;'; put 'put ''cCIsIm91Y2hpLnNhZ2EuanAiLCJzYWdhLnNhZ2EuanAiLCJzaGlyb2lzaGkuc2FnYS5qcCIsInRha3Uuc2FnYS5qcCIsInRhcmEuc2FnYS5qcCIsInRvc3Uuc2FnYS5qcCIsInlvc2hpbm9nYXJpLnNhZ2EuanAiLCJhcmFrYXdhLnNhaXRhbWEuanAiLCJhc2FrYS5zYWl0YW1hLmpwIiwiY2hp''@;'; put 'put ''Y2hpYnUuc2FpdGFtYS5qcCIsImZ1amltaS5zYWl0YW1hLmpwIiwiZnVqaW1pbm8uc2FpdGFtYS5qcCIsImZ1a2F5YS5zYWl0YW1hLmpwIiwiaGFubm8uc2FpdGFtYS5qcCIsImhhbnl1LnNhaXRhbWEuanAiLCJoYXN1ZGEuc2FpdGFtYS5qcCIsImhhdG9nYXlhLnNhaXRhbWEuanAiLCJoYXRv''@;'; put 'put ''eWFtYS5zYWl0YW1hLmpwIiwiaGlkYWthLnNhaXRhbWEuanAiLCJoaWdhc2hpY2hpY2hpYnUuc2FpdGFtYS5qcCIsImhpZ2FzaGltYXRzdXlhbWEuc2FpdGFtYS5qcCIsImhvbmpvLnNhaXRhbWEuanAiLCJpbmEuc2FpdGFtYS5qcCIsImlydW1hLnNhaXRhbWEuanAiLCJpd2F0c3VraS5zYWl0''@;'; put 'put ''YW1hLmpwIiwia2FtaWl6dW1pLnNhaXRhbWEuanAiLCJrYW1pa2F3YS5zYWl0YW1hLmpwIiwia2FtaXNhdG8uc2FpdGFtYS5qcCIsImthc3VrYWJlLnNhaXRhbWEuanAiLCJrYXdhZ29lLnNhaXRhbWEuanAiLCJrYXdhZ3VjaGkuc2FpdGFtYS5qcCIsImthd2FqaW1hLnNhaXRhbWEuanAiLCJr''@;'; put 'put ''YXpvLnNhaXRhbWEuanAiLCJraXRhbW90by5zYWl0YW1hLmpwIiwia29zaGlnYXlhLnNhaXRhbWEuanAiLCJrb3Vub3N1LnNhaXRhbWEuanAiLCJrdWtpLnNhaXRhbWEuanAiLCJrdW1hZ2F5YS5zYWl0YW1hLmpwIiwibWF0c3VidXNoaS5zYWl0YW1hLmpwIiwibWluYW5vLnNhaXRhbWEuanAi''@;'; put 'put ''LCJtaXNhdG8uc2FpdGFtYS5qcCIsIm1peWFzaGlyby5zYWl0YW1hLmpwIiwibWl5b3NoaS5zYWl0YW1hLmpwIiwibW9yb3lhbWEuc2FpdGFtYS5qcCIsIm5hZ2F0b3JvLnNhaXRhbWEuanAiLCJuYW1lZ2F3YS5zYWl0YW1hLmpwIiwibmlpemEuc2FpdGFtYS5qcCIsIm9nYW5vLnNhaXRhbWEu''@;'; put 'put ''anAiLCJvZ2F3YS5zYWl0YW1hLmpwIiwib2dvc2Uuc2FpdGFtYS5qcCIsIm9rZWdhd2Euc2FpdGFtYS5qcCIsIm9taXlhLnNhaXRhbWEuanAiLCJvdGFraS5zYWl0YW1hLmpwIiwicmFuemFuLnNhaXRhbWEuanAiLCJyeW9rYW1pLnNhaXRhbWEuanAiLCJzYWl0YW1hLnNhaXRhbWEuanAiLCJz''@;'; put 'put ''YWthZG8uc2FpdGFtYS5qcCIsInNhdHRlLnNhaXRhbWEuanAiLCJzYXlhbWEuc2FpdGFtYS5qcCIsInNoaWtpLnNhaXRhbWEuanAiLCJzaGlyYW9rYS5zYWl0YW1hLmpwIiwic29rYS5zYWl0YW1hLmpwIiwic3VnaXRvLnNhaXRhbWEuanAiLCJ0b2RhLnNhaXRhbWEuanAiLCJ0b2tpZ2F3YS5z''@;'; put 'put ''YWl0YW1hLmpwIiwidG9rb3JvemF3YS5zYWl0YW1hLmpwIiwidHN1cnVnYXNoaW1hLnNhaXRhbWEuanAiLCJ1cmF3YS5zYWl0YW1hLmpwIiwid2FyYWJpLnNhaXRhbWEuanAiLCJ5YXNoaW8uc2FpdGFtYS5qcCIsInlva296ZS5zYWl0YW1hLmpwIiwieW9uby5zYWl0YW1hLmpwIiwieW9yaWku''@;'; put 'put ''c2FpdGFtYS5qcCIsInlvc2hpZGEuc2FpdGFtYS5qcCIsInlvc2hpa2F3YS5zYWl0YW1hLmpwIiwieW9zaGltaS5zYWl0YW1hLmpwIiwiYWlzaG8uc2hpZ2EuanAiLCJnYW1vLnNoaWdhLmpwIiwiaGlnYXNoaW9taS5zaGlnYS5qcCIsImhpa29uZS5zaGlnYS5qcCIsImtva2Euc2hpZ2EuanAi''@;'; put 'put ''LCJrb25hbi5zaGlnYS5qcCIsImtvc2VpLnNoaWdhLmpwIiwia290by5zaGlnYS5qcCIsImt1c2F0c3Uuc2hpZ2EuanAiLCJtYWliYXJhLnNoaWdhLmpwIiwibW9yaXlhbWEuc2hpZ2EuanAiLCJuYWdhaGFtYS5zaGlnYS5qcCIsIm5pc2hpYXphaS5zaGlnYS5qcCIsIm5vdG9nYXdhLnNoaWdh''@;'; put 'put ''LmpwIiwib21paGFjaGltYW4uc2hpZ2EuanAiLCJvdHN1LnNoaWdhLmpwIiwicml0dG8uc2hpZ2EuanAiLCJyeXVvaC5zaGlnYS5qcCIsInRha2FzaGltYS5zaGlnYS5qcCIsInRha2F0c3VraS5zaGlnYS5qcCIsInRvcmFoaW1lLnNoaWdhLmpwIiwidG95b3NhdG8uc2hpZ2EuanAiLCJ5YXN1''@;'; put 'put ''LnNoaWdhLmpwIiwiYWthZ2kuc2hpbWFuZS5qcCIsImFtYS5zaGltYW5lLmpwIiwiZ290c3Uuc2hpbWFuZS5qcCIsImhhbWFkYS5zaGltYW5lLmpwIiwiaGlnYXNoaWl6dW1vLnNoaW1hbmUuanAiLCJoaWthd2Euc2hpbWFuZS5qcCIsImhpa2ltaS5zaGltYW5lLmpwIiwiaXp1bW8uc2hpbWFu''@;'; put 'put ''ZS5qcCIsImtha2lub2tpLnNoaW1hbmUuanAiLCJtYXN1ZGEuc2hpbWFuZS5qcCIsIm1hdHN1ZS5zaGltYW5lLmpwIiwibWlzYXRvLnNoaW1hbmUuanAiLCJuaXNoaW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9oZGEuc2hpbWFuZS5qcCIsIm9raW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9rdWl6dW1v''@;'; put 'put ''LnNoaW1hbmUuanAiLCJzaGltYW5lLnNoaW1hbmUuanAiLCJ0YW1heXUuc2hpbWFuZS5qcCIsInRzdXdhbm8uc2hpbWFuZS5qcCIsInVubmFuLnNoaW1hbmUuanAiLCJ5YWt1bW8uc2hpbWFuZS5qcCIsInlhc3VnaS5zaGltYW5lLmpwIiwieWF0c3VrYS5zaGltYW5lLmpwIiwiYXJhaS5zaGl6''@;'; put 'put ''dW9rYS5qcCIsImF0YW1pLnNoaXp1b2thLmpwIiwiZnVqaS5zaGl6dW9rYS5qcCIsImZ1amllZGEuc2hpenVva2EuanAiLCJmdWppa2F3YS5zaGl6dW9rYS5qcCIsImZ1amlub21peWEuc2hpenVva2EuanAiLCJmdWt1cm9pLnNoaXp1b2thLmpwIiwiZ290ZW1iYS5zaGl6dW9rYS5qcCIsImhh''@;'; put 'put ''aWJhcmEuc2hpenVva2EuanAiLCJoYW1hbWF0c3Uuc2hpenVva2EuanAiLCJoaWdhc2hpaXp1LnNoaXp1b2thLmpwIiwiaXRvLnNoaXp1b2thLmpwIiwiaXdhdGEuc2hpenVva2EuanAiLCJpenUuc2hpenVva2EuanAiLCJpenVub2t1bmkuc2hpenVva2EuanAiLCJrYWtlZ2F3YS5zaGl6dW9r''@;'; put 'put ''YS5qcCIsImthbm5hbWkuc2hpenVva2EuanAiLCJrYXdhbmVob24uc2hpenVva2EuanAiLCJrYXdhenUuc2hpenVva2EuanAiLCJraWt1Z2F3YS5zaGl6dW9rYS5qcCIsImtvc2FpLnNoaXp1b2thLmpwIiwibWFraW5vaGFyYS5zaGl6dW9rYS5qcCIsIm1hdHN1emFraS5zaGl6dW9rYS5qcCIs''@;'; put 'put ''Im1pbmFtaWl6dS5zaGl6dW9rYS5qcCIsIm1pc2hpbWEuc2hpenVva2EuanAiLCJtb3JpbWFjaGkuc2hpenVva2EuanAiLCJuaXNoaWl6dS5zaGl6dW9rYS5qcCIsIm51bWF6dS5zaGl6dW9rYS5qcCIsIm9tYWV6YWtpLnNoaXp1b2thLmpwIiwic2hpbWFkYS5zaGl6dW9rYS5qcCIsInNoaW1p''@;'; put 'put ''enUuc2hpenVva2EuanAiLCJzaGltb2RhLnNoaXp1b2thLmpwIiwic2hpenVva2Euc2hpenVva2EuanAiLCJzdXNvbm8uc2hpenVva2EuanAiLCJ5YWl6dS5zaGl6dW9rYS5qcCIsInlvc2hpZGEuc2hpenVva2EuanAiLCJhc2hpa2FnYS50b2NoaWdpLmpwIiwiYmF0by50b2NoaWdpLmpwIiwi''@;'; put 'put ''aGFnYS50b2NoaWdpLmpwIiwiaWNoaWthaS50b2NoaWdpLmpwIiwiaXdhZnVuZS50b2NoaWdpLmpwIiwia2FtaW5va2F3YS50b2NoaWdpLmpwIiwia2FudW1hLnRvY2hpZ2kuanAiLCJrYXJhc3V5YW1hLnRvY2hpZ2kuanAiLCJrdXJvaXNvLnRvY2hpZ2kuanAiLCJtYXNoaWtvLnRvY2hpZ2ku''@;'; put 'put ''anAiLCJtaWJ1LnRvY2hpZ2kuanAiLCJtb2thLnRvY2hpZ2kuanAiLCJtb3RlZ2kudG9jaGlnaS5qcCIsIm5hc3UudG9jaGlnaS5qcCIsIm5hc3VzaGlvYmFyYS50b2NoaWdpLmpwIiwibmlra28udG9jaGlnaS5qcCIsIm5pc2hpa2F0YS50b2NoaWdpLmpwIiwibm9naS50b2NoaWdpLmpwIiwi''@;'; put 'put ''b2hpcmEudG9jaGlnaS5qcCIsIm9odGF3YXJhLnRvY2hpZ2kuanAiLCJveWFtYS50b2NoaWdpLmpwIiwic2FrdXJhLnRvY2hpZ2kuanAiLCJzYW5vLnRvY2hpZ2kuanAiLCJzaGltb3RzdWtlLnRvY2hpZ2kuanAiLCJzaGlveWEudG9jaGlnaS5qcCIsInRha2FuZXphd2EudG9jaGlnaS5qcCIs''@;'; put 'put ''InRvY2hpZ2kudG9jaGlnaS5qcCIsInRzdWdhLnRvY2hpZ2kuanAiLCJ1amlpZS50b2NoaWdpLmpwIiwidXRzdW5vbWl5YS50b2NoaWdpLmpwIiwieWFpdGEudG9jaGlnaS5qcCIsImFpenVtaS50b2t1c2hpbWEuanAiLCJhbmFuLnRva3VzaGltYS5qcCIsImljaGliYS50b2t1c2hpbWEuanAi''@;'; put 'put ''LCJpdGFuby50b2t1c2hpbWEuanAiLCJrYWluYW4udG9rdXNoaW1hLmpwIiwia29tYXRzdXNoaW1hLnRva3VzaGltYS5qcCIsIm1hdHN1c2hpZ2UudG9rdXNoaW1hLmpwIiwibWltYS50b2t1c2hpbWEuanAiLCJtaW5hbWkudG9rdXNoaW1hLmpwIiwibWl5b3NoaS50b2t1c2hpbWEuanAiLCJt''@;'; put 'put ''dWdpLnRva3VzaGltYS5qcCIsIm5ha2FnYXdhLnRva3VzaGltYS5qcCIsIm5hcnV0by50b2t1c2hpbWEuanAiLCJzYW5hZ29jaGkudG9rdXNoaW1hLmpwIiwic2hpc2hpa3VpLnRva3VzaGltYS5qcCIsInRva3VzaGltYS50b2t1c2hpbWEuanAiLCJ3YWppa2kudG9rdXNoaW1hLmpwIiwiYWRh''@;'; put 'put ''Y2hpLnRva3lvLmpwIiwiYWtpcnVuby50b2t5by5qcCIsImFraXNoaW1hLnRva3lvLmpwIiwiYW9nYXNoaW1hLnRva3lvLmpwIiwiYXJha2F3YS50b2t5by5qcCIsImJ1bmt5by50b2t5by5qcCIsImNoaXlvZGEudG9reW8uanAiLCJjaG9mdS50b2t5by5qcCIsImNodW8udG9reW8uanAiLCJl''@;'; put 'put ''ZG9nYXdhLnRva3lvLmpwIiwiZnVjaHUudG9reW8uanAiLCJmdXNzYS50b2t5by5qcCIsImhhY2hpam8udG9reW8uanAiLCJoYWNoaW9qaS50b2t5by5qcCIsImhhbXVyYS50b2t5by5qcCIsImhpZ2FzaGlrdXJ1bWUudG9reW8uanAiLCJoaWdhc2hpbXVyYXlhbWEudG9reW8uanAiLCJoaWdh''@;'; put 'put ''c2hpeWFtYXRvLnRva3lvLmpwIiwiaGluby50b2t5by5qcCIsImhpbm9kZS50b2t5by5qcCIsImhpbm9oYXJhLnRva3lvLmpwIiwiaW5hZ2kudG9reW8uanAiLCJpdGFiYXNoaS50b2t5by5qcCIsImthdHN1c2hpa2EudG9reW8uanAiLCJraXRhLnRva3lvLmpwIiwia2l5b3NlLnRva3lvLmpw''@;'; put 'put ''Iiwia29kYWlyYS50b2t5by5qcCIsImtvZ2FuZWkudG9reW8uanAiLCJrb2t1YnVuamkudG9reW8uanAiLCJrb21hZS50b2t5by5qcCIsImtvdG8udG9reW8uanAiLCJrb3V6dXNoaW1hLnRva3lvLmpwIiwia3VuaXRhY2hpLnRva3lvLmpwIiwibWFjaGlkYS50b2t5by5qcCIsIm1lZ3Vyby50''@;'; put 'put ''b2t5by5qcCIsIm1pbmF0by50b2t5by5qcCIsIm1pdGFrYS50b2t5by5qcCIsIm1penVoby50b2t5by5qcCIsIm11c2FzaGltdXJheWFtYS50b2t5by5qcCIsIm11c2FzaGluby50b2t5by5qcCIsIm5ha2Fuby50b2t5by5qcCIsIm5lcmltYS50b2t5by5qcCIsIm9nYXNhd2FyYS50b2t5by5q''@;'; put 'put ''cCIsIm9rdXRhbWEudG9reW8uanAiLCJvbWUudG9reW8uanAiLCJvc2hpbWEudG9reW8uanAiLCJvdGEudG9reW8uanAiLCJzZXRhZ2F5YS50b2t5by5qcCIsInNoaWJ1eWEudG9reW8uanAiLCJzaGluYWdhd2EudG9reW8uanAiLCJzaGluanVrdS50b2t5by5qcCIsInN1Z2luYW1pLnRva3lv''@;'; put 'put ''LmpwIiwic3VtaWRhLnRva3lvLmpwIiwidGFjaGlrYXdhLnRva3lvLmpwIiwidGFpdG8udG9reW8uanAiLCJ0YW1hLnRva3lvLmpwIiwidG9zaGltYS50b2t5by5qcCIsImNoaXp1LnRvdHRvcmkuanAiLCJoaW5vLnRvdHRvcmkuanAiLCJrYXdhaGFyYS50b3R0b3JpLmpwIiwia29nZS50b3R0''@;'; put 'put ''b3JpLmpwIiwia290b3VyYS50b3R0b3JpLmpwIiwibWlzYXNhLnRvdHRvcmkuanAiLCJuYW5idS50b3R0b3JpLmpwIiwibmljaGluYW4udG90dG9yaS5qcCIsInNha2FpbWluYXRvLnRvdHRvcmkuanAiLCJ0b3R0b3JpLnRvdHRvcmkuanAiLCJ3YWthc2EudG90dG9yaS5qcCIsInlhenUudG90''@;'; put 'put ''dG9yaS5qcCIsInlvbmFnby50b3R0b3JpLmpwIiwiYXNhaGkudG95YW1hLmpwIiwiZnVjaHUudG95YW1hLmpwIiwiZnVrdW1pdHN1LnRveWFtYS5qcCIsImZ1bmFoYXNoaS50b3lhbWEuanAiLCJoaW1pLnRveWFtYS5qcCIsImltaXp1LnRveWFtYS5qcCIsImluYW1pLnRveWFtYS5qcCIsImpv''@;'; put 'put ''aGFuYS50b3lhbWEuanAiLCJrYW1paWNoaS50b3lhbWEuanAiLCJrdXJvYmUudG95YW1hLmpwIiwibmFrYW5paWthd2EudG95YW1hLmpwIiwibmFtZXJpa2F3YS50b3lhbWEuanAiLCJuYW50by50b3lhbWEuanAiLCJueXV6ZW4udG95YW1hLmpwIiwib3lhYmUudG95YW1hLmpwIiwidGFpcmEu''@;'; put 'put ''dG95YW1hLmpwIiwidGFrYW9rYS50b3lhbWEuanAiLCJ0YXRleWFtYS50b3lhbWEuanAiLCJ0b2dhLnRveWFtYS5qcCIsInRvbmFtaS50b3lhbWEuanAiLCJ0b3lhbWEudG95YW1hLmpwIiwidW5henVraS50b3lhbWEuanAiLCJ1b3p1LnRveWFtYS5qcCIsInlhbWFkYS50b3lhbWEuanAiLCJh''@;'; put 'put ''cmlkYS53YWtheWFtYS5qcCIsImFyaWRhZ2F3YS53YWtheWFtYS5qcCIsImdvYm8ud2FrYXlhbWEuanAiLCJoYXNoaW1vdG8ud2FrYXlhbWEuanAiLCJoaWRha2Eud2FrYXlhbWEuanAiLCJoaXJvZ2F3YS53YWtheWFtYS5qcCIsImluYW1pLndha2F5YW1hLmpwIiwiaXdhZGUud2FrYXlhbWEu''@;'; put 'put ''anAiLCJrYWluYW4ud2FrYXlhbWEuanAiLCJrYW1pdG9uZGEud2FrYXlhbWEuanAiLCJrYXRzdXJhZ2kud2FrYXlhbWEuanAiLCJraW1pbm8ud2FrYXlhbWEuanAiLCJraW5va2F3YS53YWtheWFtYS5qcCIsImtpdGF5YW1hLndha2F5YW1hLmpwIiwia295YS53YWtheWFtYS5qcCIsImtvemEu''@;'; put 'put ''d2FrYXlhbWEuanAiLCJrb3phZ2F3YS53YWtheWFtYS5qcCIsImt1ZG95YW1hLndha2F5YW1hLmpwIiwia3VzaGltb3RvLndha2F5YW1hLmpwIiwibWloYW1hLndha2F5YW1hLmpwIiwibWlzYXRvLndha2F5YW1hLmpwIiwibmFjaGlrYXRzdXVyYS53YWtheWFtYS5qcCIsInNoaW5ndS53YWth''@;'; put 'put ''eWFtYS5qcCIsInNoaXJhaGFtYS53YWtheWFtYS5qcCIsInRhaWppLndha2F5YW1hLmpwIiwidGFuYWJlLndha2F5YW1hLmpwIiwid2FrYXlhbWEud2FrYXlhbWEuanAiLCJ5dWFzYS53YWtheWFtYS5qcCIsInl1cmEud2FrYXlhbWEuanAiLCJhc2FoaS55YW1hZ2F0YS5qcCIsImZ1bmFnYXRh''@;'; put 'put ''LnlhbWFnYXRhLmpwIiwiaGlnYXNoaW5lLnlhbWFnYXRhLmpwIiwiaWlkZS55YW1hZ2F0YS5qcCIsImthaG9rdS55YW1hZ2F0YS5qcCIsImthbWlub3lhbWEueWFtYWdhdGEuanAiLCJrYW5leWFtYS55YW1hZ2F0YS5qcCIsImthd2FuaXNoaS55YW1hZ2F0YS5qcCIsIm1hbXVyb2dhd2EueWFt''@;'; put 'put ''YWdhdGEuanAiLCJtaWthd2EueWFtYWdhdGEuanAiLCJtdXJheWFtYS55YW1hZ2F0YS5qcCIsIm5hZ2FpLnlhbWFnYXRhLmpwIiwibmFrYXlhbWEueWFtYWdhdGEuanAiLCJuYW55by55YW1hZ2F0YS5qcCIsIm5pc2hpa2F3YS55YW1hZ2F0YS5qcCIsIm9iYW5hemF3YS55YW1hZ2F0YS5qcCIs''@;'; put 'put ''Im9lLnlhbWFnYXRhLmpwIiwib2d1bmkueWFtYWdhdGEuanAiLCJvaGt1cmEueWFtYWdhdGEuanAiLCJvaXNoaWRhLnlhbWFnYXRhLmpwIiwic2FnYWUueWFtYWdhdGEuanAiLCJzYWthdGEueWFtYWdhdGEuanAiLCJzYWtlZ2F3YS55YW1hZ2F0YS5qcCIsInNoaW5qby55YW1hZ2F0YS5qcCIs''@;'; put 'put ''InNoaXJhdGFrYS55YW1hZ2F0YS5qcCIsInNob25haS55YW1hZ2F0YS5qcCIsInRha2FoYXRhLnlhbWFnYXRhLmpwIiwidGVuZG8ueWFtYWdhdGEuanAiLCJ0b3phd2EueWFtYWdhdGEuanAiLCJ0c3VydW9rYS55YW1hZ2F0YS5qcCIsInlhbWFnYXRhLnlhbWFnYXRhLmpwIiwieWFtYW5vYmUu''@;'; put 'put ''eWFtYWdhdGEuanAiLCJ5b25lemF3YS55YW1hZ2F0YS5qcCIsInl1emEueWFtYWdhdGEuanAiLCJhYnUueWFtYWd1Y2hpLmpwIiwiaGFnaS55YW1hZ3VjaGkuanAiLCJoaWthcmkueWFtYWd1Y2hpLmpwIiwiaG9mdS55YW1hZ3VjaGkuanAiLCJpd2FrdW5pLnlhbWFndWNoaS5qcCIsImt1ZGFt''@;'; put 'put ''YXRzdS55YW1hZ3VjaGkuanAiLCJtaXRvdS55YW1hZ3VjaGkuanAiLCJuYWdhdG8ueWFtYWd1Y2hpLmpwIiwib3NoaW1hLnlhbWFndWNoaS5qcCIsInNoaW1vbm9zZWtpLnlhbWFndWNoaS5qcCIsInNodW5hbi55YW1hZ3VjaGkuanAiLCJ0YWJ1c2UueWFtYWd1Y2hpLmpwIiwidG9rdXlhbWEu''@;'; put 'put ''eWFtYWd1Y2hpLmpwIiwidG95b3RhLnlhbWFndWNoaS5qcCIsInViZS55YW1hZ3VjaGkuanAiLCJ5dXUueWFtYWd1Y2hpLmpwIiwiY2h1by55YW1hbmFzaGkuanAiLCJkb3NoaS55YW1hbmFzaGkuanAiLCJmdWVmdWtpLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhLnlhbWFuYXNoaS5qcCIsImZ1''@;'; put 'put ''amlrYXdhZ3VjaGlrby55YW1hbmFzaGkuanAiLCJmdWppeW9zaGlkYS55YW1hbmFzaGkuanAiLCJoYXlha2F3YS55YW1hbmFzaGkuanAiLCJob2t1dG8ueWFtYW5hc2hpLmpwIiwiaWNoaWthd2FtaXNhdG8ueWFtYW5hc2hpLmpwIiwia2FpLnlhbWFuYXNoaS5qcCIsImtvZnUueWFtYW5hc2hp''@;'; put 'put ''LmpwIiwia29zaHUueWFtYW5hc2hpLmpwIiwia29zdWdlLnlhbWFuYXNoaS5qcCIsIm1pbmFtaS1hbHBzLnlhbWFuYXNoaS5qcCIsIm1pbm9idS55YW1hbmFzaGkuanAiLCJuYWthbWljaGkueWFtYW5hc2hpLmpwIiwibmFuYnUueWFtYW5hc2hpLmpwIiwibmFydXNhd2EueWFtYW5hc2hpLmpw''@;'; put 'put ''IiwibmlyYXNha2kueWFtYW5hc2hpLmpwIiwibmlzaGlrYXRzdXJhLnlhbWFuYXNoaS5qcCIsIm9zaGluby55YW1hbmFzaGkuanAiLCJvdHN1a2kueWFtYW5hc2hpLmpwIiwic2hvd2EueWFtYW5hc2hpLmpwIiwidGFiYXlhbWEueWFtYW5hc2hpLmpwIiwidHN1cnUueWFtYW5hc2hpLmpwIiwi''@;'; put 'put ''dWVub2hhcmEueWFtYW5hc2hpLmpwIiwieWFtYW5ha2Frby55YW1hbmFzaGkuanAiLCJ5YW1hbmFzaGkueWFtYW5hc2hpLmpwIiwia2UiLCJhYy5rZSIsImNvLmtlIiwiZ28ua2UiLCJpbmZvLmtlIiwibWUua2UiLCJtb2JpLmtlIiwibmUua2UiLCJvci5rZSIsInNjLmtlIiwia2ciLCJjb20u''@;'; put 'put ''a2ciLCJlZHUua2ciLCJnb3Yua2ciLCJtaWwua2ciLCJuZXQua2ciLCJvcmcua2ciLCIqLmtoIiwia2kiLCJiaXoua2kiLCJjb20ua2kiLCJlZHUua2kiLCJnb3Yua2kiLCJpbmZvLmtpIiwibmV0LmtpIiwib3JnLmtpIiwia20iLCJhc3Mua20iLCJjb20ua20iLCJlZHUua20iLCJnb3Yua20i''@;'; put 'put ''LCJtaWwua20iLCJub20ua20iLCJvcmcua20iLCJwcmQua20iLCJ0bS5rbSIsImFzc28ua20iLCJjb29wLmttIiwiZ291di5rbSIsIm1lZGVjaW4ua20iLCJub3RhaXJlcy5rbSIsInBoYXJtYWNpZW5zLmttIiwicHJlc3NlLmttIiwidmV0ZXJpbmFpcmUua20iLCJrbiIsImVkdS5rbiIsImdv''@;'; put 'put ''di5rbiIsIm5ldC5rbiIsIm9yZy5rbiIsImtwIiwiY29tLmtwIiwiZWR1LmtwIiwiZ292LmtwIiwib3JnLmtwIiwicmVwLmtwIiwidHJhLmtwIiwia3IiLCJhYy5rciIsImNvLmtyIiwiZXMua3IiLCJnby5rciIsImhzLmtyIiwia2cua3IiLCJtaWwua3IiLCJtcy5rciIsIm5lLmtyIiwib3Iu''@;'; put 'put ''a3IiLCJwZS5rciIsInJlLmtyIiwic2Mua3IiLCJidXNhbi5rciIsImNodW5nYnVrLmtyIiwiY2h1bmduYW0ua3IiLCJkYWVndS5rciIsImRhZWplb24ua3IiLCJnYW5nd29uLmtyIiwiZ3dhbmdqdS5rciIsImd5ZW9uZ2J1ay5rciIsImd5ZW9uZ2dpLmtyIiwiZ3llb25nbmFtLmtyIiwiaW5j''@;'; put 'put ''aGVvbi5rciIsImplanUua3IiLCJqZW9uYnVrLmtyIiwiamVvbm5hbS5rciIsInNlb3VsLmtyIiwidWxzYW4ua3IiLCJrdyIsImNvbS5rdyIsImVkdS5rdyIsImVtYi5rdyIsImdvdi5rdyIsImluZC5rdyIsIm5ldC5rdyIsIm9yZy5rdyIsImt5IiwiY29tLmt5IiwiZWR1Lmt5IiwibmV0Lmt5''@;'; put 'put ''Iiwib3JnLmt5Iiwia3oiLCJjb20ua3oiLCJlZHUua3oiLCJnb3Yua3oiLCJtaWwua3oiLCJuZXQua3oiLCJvcmcua3oiLCJsYSIsImNvbS5sYSIsImVkdS5sYSIsImdvdi5sYSIsImluZm8ubGEiLCJpbnQubGEiLCJuZXQubGEiLCJvcmcubGEiLCJwZXIubGEiLCJsYiIsImNvbS5sYiIsImVk''@;'; put 'put ''dS5sYiIsImdvdi5sYiIsIm5ldC5sYiIsIm9yZy5sYiIsImxjIiwiY28ubGMiLCJjb20ubGMiLCJlZHUubGMiLCJnb3YubGMiLCJuZXQubGMiLCJvcmcubGMiLCJsaSIsImxrIiwiYWMubGsiLCJhc3NuLmxrIiwiY29tLmxrIiwiZWR1LmxrIiwiZ292LmxrIiwiZ3JwLmxrIiwiaG90ZWwubGsi''@;'; put 'put ''LCJpbnQubGsiLCJsdGQubGsiLCJuZXQubGsiLCJuZ28ubGsiLCJvcmcubGsiLCJzY2gubGsiLCJzb2MubGsiLCJ3ZWIubGsiLCJsciIsImNvbS5sciIsImVkdS5sciIsImdvdi5sciIsIm5ldC5sciIsIm9yZy5sciIsImxzIiwiYWMubHMiLCJiaXoubHMiLCJjby5scyIsImVkdS5scyIsImdv''@;'; put 'put ''di5scyIsImluZm8ubHMiLCJuZXQubHMiLCJvcmcubHMiLCJzYy5scyIsImx0IiwiZ292Lmx0IiwibHUiLCJsdiIsImFzbi5sdiIsImNvbS5sdiIsImNvbmYubHYiLCJlZHUubHYiLCJnb3YubHYiLCJpZC5sdiIsIm1pbC5sdiIsIm5ldC5sdiIsIm9yZy5sdiIsImx5IiwiY29tLmx5IiwiZWR1''@;'; put 'put ''Lmx5IiwiZ292Lmx5IiwiaWQubHkiLCJtZWQubHkiLCJuZXQubHkiLCJvcmcubHkiLCJwbGMubHkiLCJzY2gubHkiLCJtYSIsImFjLm1hIiwiY28ubWEiLCJnb3YubWEiLCJuZXQubWEiLCJvcmcubWEiLCJwcmVzcy5tYSIsIm1jIiwiYXNzby5tYyIsInRtLm1jIiwibWQiLCJtZSIsImFjLm1l''@;'; put 'put ''IiwiY28ubWUiLCJlZHUubWUiLCJnb3YubWUiLCJpdHMubWUiLCJuZXQubWUiLCJvcmcubWUiLCJwcml2Lm1lIiwibWciLCJjby5tZyIsImNvbS5tZyIsImVkdS5tZyIsImdvdi5tZyIsIm1pbC5tZyIsIm5vbS5tZyIsIm9yZy5tZyIsInByZC5tZyIsIm1oIiwibWlsIiwibWsiLCJjb20ubWsi''@;'; put 'put ''LCJlZHUubWsiLCJnb3YubWsiLCJpbmYubWsiLCJuYW1lLm1rIiwibmV0Lm1rIiwib3JnLm1rIiwibWwiLCJjb20ubWwiLCJlZHUubWwiLCJnb3V2Lm1sIiwiZ292Lm1sIiwibmV0Lm1sIiwib3JnLm1sIiwicHJlc3NlLm1sIiwiKi5tbSIsIm1uIiwiZWR1Lm1uIiwiZ292Lm1uIiwib3JnLm1u''@;'; put 'put ''IiwibW8iLCJjb20ubW8iLCJlZHUubW8iLCJnb3YubW8iLCJuZXQubW8iLCJvcmcubW8iLCJtb2JpIiwibXAiLCJtcSIsIm1yIiwiZ292Lm1yIiwibXMiLCJjb20ubXMiLCJlZHUubXMiLCJnb3YubXMiLCJuZXQubXMiLCJvcmcubXMiLCJtdCIsImNvbS5tdCIsImVkdS5tdCIsIm5ldC5tdCIs''@;'; put 'put ''Im9yZy5tdCIsIm11IiwiYWMubXUiLCJjby5tdSIsImNvbS5tdSIsImdvdi5tdSIsIm5ldC5tdSIsIm9yLm11Iiwib3JnLm11IiwibXVzZXVtIiwibXYiLCJhZXJvLm12IiwiYml6Lm12IiwiY29tLm12IiwiY29vcC5tdiIsImVkdS5tdiIsImdvdi5tdiIsImluZm8ubXYiLCJpbnQubXYiLCJt''@;'; put 'put ''aWwubXYiLCJtdXNldW0ubXYiLCJuYW1lLm12IiwibmV0Lm12Iiwib3JnLm12IiwicHJvLm12IiwibXciLCJhYy5tdyIsImJpei5tdyIsImNvLm13IiwiY29tLm13IiwiY29vcC5tdyIsImVkdS5tdyIsImdvdi5tdyIsImludC5tdyIsIm5ldC5tdyIsIm9yZy5tdyIsIm14IiwiY29tLm14Iiwi''@;'; put 'put ''ZWR1Lm14IiwiZ29iLm14IiwibmV0Lm14Iiwib3JnLm14IiwibXkiLCJiaXoubXkiLCJjb20ubXkiLCJlZHUubXkiLCJnb3YubXkiLCJtaWwubXkiLCJuYW1lLm15IiwibmV0Lm15Iiwib3JnLm15IiwibXoiLCJhYy5teiIsImFkdi5teiIsImNvLm16IiwiZWR1Lm16IiwiZ292Lm16IiwibWls''@;'; put 'put ''Lm16IiwibmV0Lm16Iiwib3JnLm16IiwibmEiLCJhbHQubmEiLCJjby5uYSIsImNvbS5uYSIsImdvdi5uYSIsIm5ldC5uYSIsIm9yZy5uYSIsIm5hbWUiLCJuYyIsImFzc28ubmMiLCJub20ubmMiLCJuZSIsIm5ldCIsIm5mIiwiYXJ0cy5uZiIsImNvbS5uZiIsImZpcm0ubmYiLCJpbmZvLm5m''@;'; put 'put ''IiwibmV0Lm5mIiwib3RoZXIubmYiLCJwZXIubmYiLCJyZWMubmYiLCJzdG9yZS5uZiIsIndlYi5uZiIsIm5nIiwiY29tLm5nIiwiZWR1Lm5nIiwiZ292Lm5nIiwiaS5uZyIsIm1pbC5uZyIsIm1vYmkubmciLCJuYW1lLm5nIiwibmV0Lm5nIiwib3JnLm5nIiwic2NoLm5nIiwibmkiLCJhYy5u''@;'; put 'put ''aSIsImJpei5uaSIsImNvLm5pIiwiY29tLm5pIiwiZWR1Lm5pIiwiZ29iLm5pIiwiaW4ubmkiLCJpbmZvLm5pIiwiaW50Lm5pIiwibWlsLm5pIiwibmV0Lm5pIiwibm9tLm5pIiwib3JnLm5pIiwid2ViLm5pIiwibmwiLCJubyIsImZocy5ubyIsImZvbGtlYmlibC5ubyIsImZ5bGtlc2JpYmwu''@;'; put 'put ''bm8iLCJpZHJldHQubm8iLCJtdXNldW0ubm8iLCJwcml2Lm5vIiwidmdzLm5vIiwiZGVwLm5vIiwiaGVyYWQubm8iLCJrb21tdW5lLm5vIiwibWlsLm5vIiwic3RhdC5ubyIsImFhLm5vIiwiYWgubm8iLCJidS5ubyIsImZtLm5vIiwiaGwubm8iLCJobS5ubyIsImphbi1tYXllbi5ubyIsIm1y''@;'; put 'put ''Lm5vIiwibmwubm8iLCJudC5ubyIsIm9mLm5vIiwib2wubm8iLCJvc2xvLm5vIiwicmwubm8iLCJzZi5ubyIsInN0Lm5vIiwic3ZhbGJhcmQubm8iLCJ0bS5ubyIsInRyLm5vIiwidmEubm8iLCJ2Zi5ubyIsImdzLmFhLm5vIiwiZ3MuYWgubm8iLCJncy5idS5ubyIsImdzLmZtLm5vIiwiZ3Mu''@;'; put 'put ''aGwubm8iLCJncy5obS5ubyIsImdzLmphbi1tYXllbi5ubyIsImdzLm1yLm5vIiwiZ3Mubmwubm8iLCJncy5udC5ubyIsImdzLm9mLm5vIiwiZ3Mub2wubm8iLCJncy5vc2xvLm5vIiwiZ3Mucmwubm8iLCJncy5zZi5ubyIsImdzLnN0Lm5vIiwiZ3Muc3ZhbGJhcmQubm8iLCJncy50bS5ubyIs''@;'; put 'put ''ImdzLnRyLm5vIiwiZ3MudmEubm8iLCJncy52Zi5ubyIsImFrcmVoYW1uLm5vIiwiXHhlNWtyZWhhbW4ubm8iLCJhbGdhcmQubm8iLCJceGU1bGdceGU1cmQubm8iLCJhcm5hLm5vIiwiYnJvbm5veXN1bmQubm8iLCJiclx4Zjhublx4Zjh5c3VuZC5ubyIsImJydW11bmRkYWwubm8iLCJicnlu''@;'; put 'put ''ZS5ubyIsImRyb2Jhay5ubyIsImRyXHhmOGJhay5ubyIsImVnZXJzdW5kLm5vIiwiZmV0c3VuZC5ubyIsImZsb3JvLm5vIiwiZmxvclx4Zjgubm8iLCJmcmVkcmlrc3RhZC5ubyIsImhva2tzdW5kLm5vIiwiaG9uZWZvc3Mubm8iLCJoXHhmOG5lZm9zcy5ubyIsImplc3NoZWltLm5vIiwiam9y''@;'; put 'put ''cGVsYW5kLm5vIiwialx4ZjhycGVsYW5kLm5vIiwia2lya2VuZXMubm8iLCJrb3BlcnZpay5ubyIsImtyb2tzdGFkZWx2YS5ubyIsImxhbmdldmFnLm5vIiwibGFuZ2V2XHhlNWcubm8iLCJsZWlydmlrLm5vIiwibWpvbmRhbGVuLm5vIiwibWpceGY4bmRhbGVuLm5vIiwibW8taS1yYW5hLm5v''@;'; put 'put ''IiwibW9zam9lbi5ubyIsIm1vc2pceGY4ZW4ubm8iLCJuZXNvZGR0YW5nZW4ubm8iLCJvcmthbmdlci5ubyIsIm9zb3lyby5ubyIsIm9zXHhmOHlyby5ubyIsInJhaG9sdC5ubyIsInJceGU1aG9sdC5ubyIsInNhbmRuZXNzam9lbi5ubyIsInNhbmRuZXNzalx4Zjhlbi5ubyIsInNrZWRzbW9r''@;'; put 'put ''b3JzZXQubm8iLCJzbGF0dHVtLm5vIiwic3BqZWxrYXZpay5ubyIsInN0YXRoZWxsZS5ubyIsInN0YXZlcm4ubm8iLCJzdGpvcmRhbHNoYWxzZW4ubm8iLCJzdGpceGY4cmRhbHNoYWxzZW4ubm8iLCJ0YW5hbmdlci5ubyIsInRyYW5ieS5ubyIsInZvc3NldmFuZ2VuLm5vIiwiYWFyYm9ydGUu''@;'; put 'put ''bm8iLCJhZWpyaWUubm8iLCJhZmpvcmQubm8iLCJceGU1ZmpvcmQubm8iLCJhZ2RlbmVzLm5vIiwibmVzLmFrZXJzaHVzLm5vIiwiYWtub2x1b2t0YS5ubyIsIlx4ZTFrXHUwMTRib2x1b2t0YS5ubyIsImFsLm5vIiwiXHhlNWwubm8iLCJhbGFoZWFkanUubm8iLCJceGUxbGFoZWFkanUubm8i''@;'; put 'put ''LCJhbGVzdW5kLm5vIiwiXHhlNWxlc3VuZC5ubyIsImFsc3RhaGF1Zy5ubyIsImFsdGEubm8iLCJceGUxbHRceGUxLm5vIiwiYWx2ZGFsLm5vIiwiYW1saS5ubyIsIlx4ZTVtbGkubm8iLCJhbW90Lm5vIiwiXHhlNW1vdC5ubyIsImFuZGFzdW9sby5ubyIsImFuZGVidS5ubyIsImFuZG95Lm5v''@;'; put 'put ''IiwiYW5kXHhmOHkubm8iLCJhcmRhbC5ubyIsIlx4ZTVyZGFsLm5vIiwiYXJlbWFyay5ubyIsImFyZW5kYWwubm8iLCJceGU1cy5ubyIsImFzZXJhbC5ubyIsIlx4ZTVzZXJhbC5ubyIsImFza2VyLm5vIiwiYXNraW0ubm8iLCJhc2tveS5ubyIsImFza1x4Zjh5Lm5vIiwiYXNrdm9sbC5ubyIs''@;'; put 'put ''ImFzbmVzLm5vIiwiXHhlNXNuZXMubm8iLCJhdWRuZWRhbG4ubm8iLCJhdWtyYS5ubyIsImF1cmUubm8iLCJhdXJsYW5kLm5vIiwiYXVyc2tvZy1ob2xhbmQubm8iLCJhdXJza29nLWhceGY4bGFuZC5ubyIsImF1c3Rldm9sbC5ubyIsImF1c3RyaGVpbS5ubyIsImF2ZXJveS5ubyIsImF2ZXJc''@;'; put 'put ''eGY4eS5ubyIsImJhZGFkZGphLm5vIiwiYlx4ZTVkXHhlNWRkalx4ZTUubm8iLCJiXHhlNnJ1bS5ubyIsImJhaGNhdnVvdG5hLm5vIiwiYlx4ZTFoY2F2dW90bmEubm8iLCJiYWhjY2F2dW90bmEubm8iLCJiXHhlMWhjY2F2dW90bmEubm8iLCJiYWlkYXIubm8iLCJiXHhlMWlkXHhlMXIubm8i''@;'; put 'put ''LCJiYWpkZGFyLm5vIiwiYlx4ZTFqZGRhci5ubyIsImJhbGF0Lm5vIiwiYlx4ZTFsXHhlMXQubm8iLCJiYWxlc3RyYW5kLm5vIiwiYmFsbGFuZ2VuLm5vIiwiYmFsc2Zqb3JkLm5vIiwiYmFtYmxlLm5vIiwiYmFyZHUubm8iLCJiYXJ1bS5ubyIsImJhdHNmam9yZC5ubyIsImJceGU1dHNmam9y''@;'; put 'put ''ZC5ubyIsImJlYXJhbHZhaGtpLm5vIiwiYmVhcmFsdlx4ZTFoa2kubm8iLCJiZWFyZHUubm8iLCJiZWlhcm4ubm8iLCJiZXJnLm5vIiwiYmVyZ2VuLm5vIiwiYmVybGV2YWcubm8iLCJiZXJsZXZceGU1Zy5ubyIsImJpZXZhdC5ubyIsImJpZXZceGUxdC5ubyIsImJpbmRhbC5ubyIsImJpcmtl''@;'; put 'put ''bmVzLm5vIiwiYmphcmtveS5ubyIsImJqYXJrXHhmOHkubm8iLCJiamVya3JlaW0ubm8iLCJianVnbi5ubyIsImJvZG8ubm8iLCJib2RceGY4Lm5vIiwiYm9rbi5ubyIsImJvbWxvLm5vIiwiYlx4ZjhtbG8ubm8iLCJicmVtYW5nZXIubm8iLCJicm9ubm95Lm5vIiwiYnJceGY4bm5ceGY4eS5u''@;'; put 'put ''byIsImJ1ZGVqanUubm8iLCJuZXMuYnVza2VydWQubm8iLCJieWdsYW5kLm5vIiwiYnlrbGUubm8iLCJjYWhjZXN1b2xvLm5vIiwiXHUwMTBkXHhlMWhjZXN1b2xvLm5vIiwiZGF2dmVuamFyZ2Eubm8iLCJkYXZ2ZW5qXHhlMXJnYS5ubyIsImRhdnZlc2lpZGEubm8iLCJkZWF0bnUubm8iLCJk''@;'; put 'put ''aWVsZGRhbnVvcnJpLm5vIiwiZGl2dGFzdnVvZG5hLm5vIiwiZGl2dHRhc3Z1b3RuYS5ubyIsImRvbm5hLm5vIiwiZFx4ZjhubmEubm8iLCJkb3ZyZS5ubyIsImRyYW1tZW4ubm8iLCJkcmFuZ2VkYWwubm8iLCJkeXJveS5ubyIsImR5clx4Zjh5Lm5vIiwiZWlkLm5vIiwiZWlkZmpvcmQubm8i''@;'; put 'put ''LCJlaWRzYmVyZy5ubyIsImVpZHNrb2cubm8iLCJlaWRzdm9sbC5ubyIsImVpZ2Vyc3VuZC5ubyIsImVsdmVydW0ubm8iLCJlbmViYWtrLm5vIiwiZW5nZXJkYWwubm8iLCJldG5lLm5vIiwiZXRuZWRhbC5ubyIsImV2ZW5hc3NpLm5vIiwiZXZlblx4ZTFcdTAxNjFcdTAxNjFpLm5vIiwiZXZl''@;'; put 'put ''bmVzLm5vIiwiZXZqZS1vZy1ob3JubmVzLm5vIiwiZmFyc3VuZC5ubyIsImZhdXNrZS5ubyIsImZlZGplLm5vIiwiZmV0Lm5vIiwiZmlubm95Lm5vIiwiZmlublx4Zjh5Lm5vIiwiZml0amFyLm5vIiwiZmphbGVyLm5vIiwiZmplbGwubm8iLCJmbGEubm8iLCJmbFx4ZTUubm8iLCJmbGFrc3Rh''@;'; put 'put ''ZC5ubyIsImZsYXRhbmdlci5ubyIsImZsZWtrZWZqb3JkLm5vIiwiZmxlc2Jlcmcubm8iLCJmbG9yYS5ubyIsImZvbGxkYWwubm8iLCJmb3JkZS5ubyIsImZceGY4cmRlLm5vIiwiZm9yc2FuZC5ubyIsImZvc25lcy5ubyIsImZyXHhlNm5hLm5vIiwiZnJhbmEubm8iLCJmcmVpLm5vIiwiZnJv''@;'; put 'put ''Z24ubm8iLCJmcm9sYW5kLm5vIiwiZnJvc3RhLm5vIiwiZnJveWEubm8iLCJmclx4Zjh5YS5ubyIsImZ1b2lza3Uubm8iLCJmdW9zc2tvLm5vIiwiZnVzYS5ubyIsImZ5cmVzZGFsLm5vIiwiZ2FpdnVvdG5hLm5vIiwiZ1x4ZTFpdnVvdG5hLm5vIiwiZ2Fsc2Eubm8iLCJnXHhlMWxzXHhlMS5u''@;'; put 'put ''byIsImdhbXZpay5ubyIsImdhbmdhdmlpa2Eubm8iLCJnXHhlMVx1MDE0Ymdhdmlpa2Eubm8iLCJnYXVsYXIubm8iLCJnYXVzZGFsLm5vIiwiZ2llaHRhdnVvYXRuYS5ubyIsImdpbGRlc2thbC5ubyIsImdpbGRlc2tceGU1bC5ubyIsImdpc2tlLm5vIiwiZ2plbW5lcy5ubyIsImdqZXJkcnVt''@;'; put 'put ''Lm5vIiwiZ2plcnN0YWQubm8iLCJnamVzZGFsLm5vIiwiZ2pvdmlrLm5vIiwiZ2pceGY4dmlrLm5vIiwiZ2xvcHBlbi5ubyIsImdvbC5ubyIsImdyYW4ubm8iLCJncmFuZS5ubyIsImdyYW52aW4ubm8iLCJncmF0YW5nZW4ubm8iLCJncmltc3RhZC5ubyIsImdyb25nLm5vIiwiZ3J1ZS5ubyIs''@;'; put 'put ''Imd1bGVuLm5vIiwiZ3VvdmRhZ2VhaWRudS5ubyIsImhhLm5vIiwiaFx4ZTUubm8iLCJoYWJtZXIubm8iLCJoXHhlMWJtZXIubm8iLCJoYWRzZWwubm8iLCJoXHhlNmdlYm9zdGFkLm5vIiwiaGFnZWJvc3RhZC5ubyIsImhhbGRlbi5ubyIsImhhbHNhLm5vIiwiaGFtYXIubm8iLCJoYW1hcm95''@;'; put 'put ''Lm5vIiwiaGFtbWFyZmVhc3RhLm5vIiwiaFx4ZTFtbVx4ZTFyZmVhc3RhLm5vIiwiaGFtbWVyZmVzdC5ubyIsImhhcG1pci5ubyIsImhceGUxcG1pci5ubyIsImhhcmFtLm5vIiwiaGFyZWlkLm5vIiwiaGFyc3RhZC5ubyIsImhhc3Zpay5ubyIsImhhdHRmamVsbGRhbC5ubyIsImhhdWdlc3Vu''@;'; put 'put ''ZC5ubyIsIm9zLmhlZG1hcmsubm8iLCJ2YWxlci5oZWRtYXJrLm5vIiwidlx4ZTVsZXIuaGVkbWFyay5ubyIsImhlbW5lLm5vIiwiaGVtbmVzLm5vIiwiaGVtc2VkYWwubm8iLCJoaXRyYS5ubyIsImhqYXJ0ZGFsLm5vIiwiaGplbG1lbGFuZC5ubyIsImhvYm9sLm5vIiwiaG9iXHhmOGwubm8i''@;'; put 'put ''LCJob2Yubm8iLCJob2wubm8iLCJob2xlLm5vIiwiaG9sbWVzdHJhbmQubm8iLCJob2x0YWxlbi5ubyIsImhvbHRceGU1bGVuLm5vIiwib3MuaG9yZGFsYW5kLm5vIiwiaG9ybmluZGFsLm5vIiwiaG9ydGVuLm5vIiwiaG95YW5nZXIubm8iLCJoXHhmOHlhbmdlci5ubyIsImhveWxhbmRldC5u''@;'; put 'put ''byIsImhceGY4eWxhbmRldC5ubyIsImh1cmRhbC5ubyIsImh1cnVtLm5vIiwiaHZhbGVyLm5vIiwiaHlsbGVzdGFkLm5vIiwiaWJlc3RhZC5ubyIsImluZGVyb3kubm8iLCJpbmRlclx4Zjh5Lm5vIiwiaXZlbGFuZC5ubyIsIml2Z3Uubm8iLCJqZXZuYWtlci5ubyIsImpvbHN0ZXIubm8iLCJq''@;'; put 'put ''XHhmOGxzdGVyLm5vIiwiam9uZGFsLm5vIiwia2Fmam9yZC5ubyIsImtceGU1ZmpvcmQubm8iLCJrYXJhc2pvaGthLm5vIiwia1x4ZTFyXHhlMVx1MDE2MWpvaGthLm5vIiwia2FyYXNqb2subm8iLCJrYXJsc295Lm5vIiwia2FybW95Lm5vIiwia2FybVx4Zjh5Lm5vIiwia2F1dG9rZWluby5u''@;'; put 'put ''byIsImtsYWJ1Lm5vIiwia2xceGU2YnUubm8iLCJrbGVwcC5ubyIsImtvbmdzYmVyZy5ubyIsImtvbmdzdmluZ2VyLm5vIiwia3JhYW5naGtlLm5vIiwia3JceGU1YW5naGtlLm5vIiwia3JhZ2Vyby5ubyIsImtyYWdlclx4Zjgubm8iLCJrcmlzdGlhbnNhbmQubm8iLCJrcmlzdGlhbnN1bmQu''@;'; put 'put ''bm8iLCJrcm9kc2hlcmFkLm5vIiwia3JceGY4ZHNoZXJhZC5ubyIsImt2XHhlNmZqb3JkLm5vIiwia3ZceGU2bmFuZ2VuLm5vIiwia3ZhZmpvcmQubm8iLCJrdmFsc3VuZC5ubyIsImt2YW0ubm8iLCJrdmFuYW5nZW4ubm8iLCJrdmluZXNkYWwubm8iLCJrdmlubmhlcmFkLm5vIiwia3ZpdGVz''@;'; put 'put ''ZWlkLm5vIiwia3ZpdHNveS5ubyIsImt2aXRzXHhmOHkubm8iLCJsYWFrZXN2dWVtaWUubm8iLCJsXHhlNnJkYWwubm8iLCJsYWhwcGkubm8iLCJsXHhlMWhwcGkubm8iLCJsYXJkYWwubm8iLCJsYXJ2aWsubm8iLCJsYXZhZ2lzLm5vIiwibGF2YW5nZW4ubm8iLCJsZWFuZ2F2aWlrYS5ubyIs''@;'; put 'put ''ImxlYVx1MDE0Ymdhdmlpa2Eubm8iLCJsZWJlc2J5Lm5vIiwibGVpa2FuZ2VyLm5vIiwibGVpcmZqb3JkLm5vIiwibGVrYS5ubyIsImxla3N2aWsubm8iLCJsZW52aWsubm8iLCJsZXJkYWwubm8iLCJsZXNqYS5ubyIsImxldmFuZ2VyLm5vIiwibGllci5ubyIsImxpZXJuZS5ubyIsImxpbGxl''@;'; put 'put ''aGFtbWVyLm5vIiwibGlsbGVzYW5kLm5vIiwibGluZGFzLm5vIiwibGluZFx4ZTVzLm5vIiwibGluZGVzbmVzLm5vIiwibG9hYmF0Lm5vIiwibG9hYlx4ZTF0Lm5vIiwibG9kaW5nZW4ubm8iLCJsXHhmOGRpbmdlbi5ubyIsImxvbS5ubyIsImxvcHBhLm5vIiwibG9yZW5za29nLm5vIiwibFx4''@;'; put 'put ''ZjhyZW5za29nLm5vIiwibG90ZW4ubm8iLCJsXHhmOHRlbi5ubyIsImx1bmQubm8iLCJsdW5uZXIubm8iLCJsdXJveS5ubyIsImx1clx4Zjh5Lm5vIiwibHVzdGVyLm5vIiwibHluZ2RhbC5ubyIsImx5bmdlbi5ubyIsIm1hbGF0dnVvcG1pLm5vIiwibVx4ZTFsYXR2dW9wbWkubm8iLCJtYWxz''@;'; put 'put ''ZWx2Lm5vIiwibVx4ZTVsc2Vsdi5ubyIsIm1hbHZpay5ubyIsIm1hbmRhbC5ubyIsIm1hcmtlci5ubyIsIm1hcm5hcmRhbC5ubyIsIm1hc2Zqb3JkZW4ubm8iLCJtYXNveS5ubyIsIm1ceGU1c1x4Zjh5Lm5vIiwibWF0dGEtdmFyamphdC5ubyIsIm1ceGUxdHRhLXZceGUxcmpqYXQubm8iLCJt''@;'; put 'put ''ZWxhbmQubm8iLCJtZWxkYWwubm8iLCJtZWxodXMubm8iLCJtZWxveS5ubyIsIm1lbFx4Zjh5Lm5vIiwibWVyYWtlci5ubyIsIm1lclx4ZTVrZXIubm8iLCJtaWRzdW5kLm5vIiwibWlkdHJlLWdhdWxkYWwubm8iLCJtb2FyZWtlLm5vIiwibW9ceGU1cmVrZS5ubyIsIm1vZGFsZW4ubm8iLCJt''@;'; put 'put ''b2R1bS5ubyIsIm1vbGRlLm5vIiwiaGVyb3kubW9yZS1vZy1yb21zZGFsLm5vIiwic2FuZGUubW9yZS1vZy1yb21zZGFsLm5vIiwiaGVyXHhmOHkubVx4ZjhyZS1vZy1yb21zZGFsLm5vIiwic2FuZGUubVx4ZjhyZS1vZy1yb21zZGFsLm5vIiwibW9za2VuZXMubm8iLCJtb3NzLm5vIiwibW9z''@;'; put 'put ''dmlrLm5vIiwibXVvc2F0Lm5vIiwibXVvc1x4ZTF0Lm5vIiwibmFhbWVzamV2dWVtaWUubm8iLCJuXHhlNVx4ZTVtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU2clx4Zjh5Lm5vIiwibmFtZGFsc2VpZC5ubyIsIm5hbXNvcy5ubyIsIm5hbXNza29nYW4ubm8iLCJuYW5uZXN0YWQubm8iLCJuYXJveS5u''@;'; put 'put ''byIsIm5hcnZpaWthLm5vIiwibmFydmlrLm5vIiwibmF1c3RkYWwubm8iLCJuYXZ1b3RuYS5ubyIsIm5ceGUxdnVvdG5hLm5vIiwibmVkcmUtZWlrZXIubm8iLCJuZXNuYS5ubyIsIm5lc29kZGVuLm5vIiwibmVzc2VieS5ubyIsIm5lc3NldC5ubyIsIm5pc3NlZGFsLm5vIiwibml0dGVkYWwu''@;'; put 'put ''bm8iLCJub3JkLWF1cmRhbC5ubyIsIm5vcmQtZnJvbi5ubyIsIm5vcmQtb2RhbC5ubyIsIm5vcmRkYWwubm8iLCJub3Jka2FwcC5ubyIsImJvLm5vcmRsYW5kLm5vIiwiYlx4Zjgubm9yZGxhbmQubm8iLCJoZXJveS5ub3JkbGFuZC5ubyIsImhlclx4Zjh5Lm5vcmRsYW5kLm5vIiwibm9yZHJl''@;'; put 'put ''LWxhbmQubm8iLCJub3JkcmVpc2Eubm8iLCJub3JlLW9nLXV2ZGFsLm5vIiwibm90b2RkZW4ubm8iLCJub3R0ZXJveS5ubyIsIm5ceGY4dHRlclx4Zjh5Lm5vIiwib2RkYS5ubyIsIm9rc25lcy5ubyIsIlx4Zjhrc25lcy5ubyIsIm9tYXN2dW90bmEubm8iLCJvcHBkYWwubm8iLCJvcHBlZ2Fy''@;'; put 'put ''ZC5ubyIsIm9wcGVnXHhlNXJkLm5vIiwib3JrZGFsLm5vIiwib3JsYW5kLm5vIiwiXHhmOHJsYW5kLm5vIiwib3Jza29nLm5vIiwiXHhmOHJza29nLm5vIiwib3JzdGEubm8iLCJceGY4cnN0YS5ubyIsIm9zZW4ubm8iLCJvc3Rlcm95Lm5vIiwib3N0ZXJceGY4eS5ubyIsInZhbGVyLm9zdGZv''@;'; put 'put ''bGQubm8iLCJ2XHhlNWxlci5ceGY4c3Rmb2xkLm5vIiwib3N0cmUtdG90ZW4ubm8iLCJceGY4c3RyZS10b3Rlbi5ubyIsIm92ZXJoYWxsYS5ubyIsIm92cmUtZWlrZXIubm8iLCJceGY4dnJlLWVpa2VyLm5vIiwib3llci5ubyIsIlx4Zjh5ZXIubm8iLCJveWdhcmRlbi5ubyIsIlx4Zjh5Z2Fy''@;'; put 'put ''ZGVuLm5vIiwib3lzdHJlLXNsaWRyZS5ubyIsIlx4Zjh5c3RyZS1zbGlkcmUubm8iLCJwb3JzYW5nZXIubm8iLCJwb3JzYW5ndS5ubyIsInBvcnNceGUxXHUwMTRiZ3Uubm8iLCJwb3JzZ3J1bm4ubm8iLCJyYWRlLm5vIiwiclx4ZTVkZS5ubyIsInJhZG95Lm5vIiwicmFkXHhmOHkubm8iLCJy''@;'; put 'put ''XHhlNmxpbmdlbi5ubyIsInJhaGtrZXJhdmp1Lm5vIiwiclx4ZTFoa2tlclx4ZTF2anUubm8iLCJyYWlzYS5ubyIsInJceGUxaXNhLm5vIiwicmFra2VzdGFkLm5vIiwicmFsaW5nZW4ubm8iLCJyYW5hLm5vIiwicmFuZGFiZXJnLm5vIiwicmF1bWEubm8iLCJyZW5kYWxlbi5ubyIsInJlbm5l''@;'; put 'put ''YnUubm8iLCJyZW5uZXNveS5ubyIsInJlbm5lc1x4Zjh5Lm5vIiwicmluZGFsLm5vIiwicmluZ2VidS5ubyIsInJpbmdlcmlrZS5ubyIsInJpbmdzYWtlci5ubyIsInJpc29yLm5vIiwicmlzXHhmOHIubm8iLCJyaXNzYS5ubyIsInJvYW4ubm8iLCJyb2RveS5ubyIsInJceGY4ZFx4Zjh5Lm5v''@;'; put 'put ''Iiwicm9sbGFnLm5vIiwicm9tc2Eubm8iLCJyb21za29nLm5vIiwiclx4Zjhtc2tvZy5ubyIsInJvcm9zLm5vIiwiclx4Zjhyb3Mubm8iLCJyb3N0Lm5vIiwiclx4ZjhzdC5ubyIsInJveWtlbi5ubyIsInJceGY4eWtlbi5ubyIsInJveXJ2aWsubm8iLCJyXHhmOHlydmlrLm5vIiwicnVvdmF0''@;'; put 'put ''Lm5vIiwicnlnZ2Uubm8iLCJzYWxhbmdlbi5ubyIsInNhbGF0Lm5vIiwic1x4ZTFsYXQubm8iLCJzXHhlMWxceGUxdC5ubyIsInNhbHRkYWwubm8iLCJzYW1uYW5nZXIubm8iLCJzYW5kZWZqb3JkLm5vIiwic2FuZG5lcy5ubyIsInNhbmRveS5ubyIsInNhbmRceGY4eS5ubyIsInNhcnBzYm9y''@;'; put 'put ''Zy5ubyIsInNhdWRhLm5vIiwic2F1aGVyYWQubm8iLCJzZWwubm8iLCJzZWxidS5ubyIsInNlbGplLm5vIiwic2Vsam9yZC5ubyIsInNpZWxsYWsubm8iLCJzaWdkYWwubm8iLCJzaWxqYW4ubm8iLCJzaXJkYWwubm8iLCJza2FuaXQubm8iLCJza1x4ZTFuaXQubm8iLCJza2FubGFuZC5ubyIs''@;'; put 'put ''InNrXHhlNW5sYW5kLm5vIiwic2thdW4ubm8iLCJza2Vkc21vLm5vIiwic2tpLm5vIiwic2tpZW4ubm8iLCJza2llcnZhLm5vIiwic2tpZXJ2XHhlMS5ubyIsInNraXB0dmV0Lm5vIiwic2tqYWsubm8iLCJza2pceGU1ay5ubyIsInNramVydm95Lm5vIiwic2tqZXJ2XHhmOHkubm8iLCJza29k''@;'; put 'put ''amUubm8iLCJzbW9sYS5ubyIsInNtXHhmOGxhLm5vIiwic25hYXNlLm5vIiwic25ceGU1YXNlLm5vIiwic25hc2Eubm8iLCJzblx4ZTVzYS5ubyIsInNuaWxsZmpvcmQubm8iLCJzbm9hc2Eubm8iLCJzb2duZGFsLm5vIiwic29nbmUubm8iLCJzXHhmOGduZS5ubyIsInNva25kYWwubm8iLCJz''@;'; put 'put ''b2xhLm5vIiwic29sdW5kLm5vIiwic29tbmEubm8iLCJzXHhmOG1uYS5ubyIsInNvbmRyZS1sYW5kLm5vIiwic1x4ZjhuZHJlLWxhbmQubm8iLCJzb25nZGFsZW4ubm8iLCJzb3ItYXVyZGFsLm5vIiwic1x4ZjhyLWF1cmRhbC5ubyIsInNvci1mcm9uLm5vIiwic1x4ZjhyLWZyb24ubm8iLCJz''@;'; put 'put ''b3Itb2RhbC5ubyIsInNceGY4ci1vZGFsLm5vIiwic29yLXZhcmFuZ2VyLm5vIiwic1x4ZjhyLXZhcmFuZ2VyLm5vIiwic29yZm9sZC5ubyIsInNceGY4cmZvbGQubm8iLCJzb3JyZWlzYS5ubyIsInNceGY4cnJlaXNhLm5vIiwic29ydGxhbmQubm8iLCJzb3J1bS5ubyIsInNceGY4cnVtLm5v''@;'; put 'put ''Iiwic3B5ZGViZXJnLm5vIiwic3RhbmdlLm5vIiwic3RhdmFuZ2VyLm5vIiwic3RlaWdlbi5ubyIsInN0ZWlua2plci5ubyIsInN0am9yZGFsLm5vIiwic3RqXHhmOHJkYWwubm8iLCJzdG9ra2Uubm8iLCJzdG9yLWVsdmRhbC5ubyIsInN0b3JkLm5vIiwic3RvcmRhbC5ubyIsInN0b3Jmam9y''@;'; put 'put ''ZC5ubyIsInN0cmFuZC5ubyIsInN0cmFuZGEubm8iLCJzdHJ5bi5ubyIsInN1bGEubm8iLCJzdWxkYWwubm8iLCJzdW5kLm5vIiwic3VubmRhbC5ubyIsInN1cm5hZGFsLm5vIiwic3ZlaW8ubm8iLCJzdmVsdmlrLm5vIiwic3lra3lsdmVuLm5vIiwidGFuYS5ubyIsImJvLnRlbGVtYXJrLm5v''@;'; put 'put ''IiwiYlx4ZjgudGVsZW1hcmsubm8iLCJ0aW1lLm5vIiwidGluZ3ZvbGwubm8iLCJ0aW5uLm5vIiwidGplbGRzdW5kLm5vIiwidGpvbWUubm8iLCJ0alx4ZjhtZS5ubyIsInRva2tlLm5vIiwidG9sZ2Eubm8iLCJ0b25zYmVyZy5ubyIsInRceGY4bnNiZXJnLm5vIiwidG9yc2tlbi5ubyIsInRy''@;'; put 'put ''XHhlNm5hLm5vIiwidHJhbmEubm8iLCJ0cmFub3kubm8iLCJ0cmFuXHhmOHkubm8iLCJ0cm9hbmRpbi5ubyIsInRyb2dzdGFkLm5vIiwidHJceGY4Z3N0YWQubm8iLCJ0cm9tc2Eubm8iLCJ0cm9tc28ubm8iLCJ0cm9tc1x4Zjgubm8iLCJ0cm9uZGhlaW0ubm8iLCJ0cnlzaWwubm8iLCJ0dmVk''@;'; put 'put ''ZXN0cmFuZC5ubyIsInR5ZGFsLm5vIiwidHluc2V0Lm5vIiwidHlzZmpvcmQubm8iLCJ0eXNuZXMubm8iLCJ0eXN2XHhlNnIubm8iLCJ0eXN2YXIubm8iLCJ1bGxlbnNha2VyLm5vIiwidWxsZW5zdmFuZy5ubyIsInVsdmlrLm5vIiwidW5qYXJnYS5ubyIsInVualx4ZTFyZ2Eubm8iLCJ1dHNp''@;'; put 'put ''cmEubm8iLCJ2YWFwc3RlLm5vIiwidmFkc28ubm8iLCJ2YWRzXHhmOC5ubyIsInZceGU2clx4Zjh5Lm5vIiwidmFnYS5ubyIsInZceGU1Z1x4ZTUubm8iLCJ2YWdhbi5ubyIsInZceGU1Z2FuLm5vIiwidmFnc295Lm5vIiwidlx4ZTVnc1x4Zjh5Lm5vIiwidmFrc2RhbC5ubyIsInZhbGxlLm5v''@;'; put 'put ''IiwidmFuZy5ubyIsInZhbnlsdmVuLm5vIiwidmFyZG8ubm8iLCJ2YXJkXHhmOC5ubyIsInZhcmdnYXQubm8iLCJ2XHhlMXJnZ1x4ZTF0Lm5vIiwidmFyb3kubm8iLCJ2ZWZzbi5ubyIsInZlZ2Eubm8iLCJ2ZWdhcnNoZWkubm8iLCJ2ZWdceGU1cnNoZWkubm8iLCJ2ZW5uZXNsYS5ubyIsInZl''@;'; put 'put ''cmRhbC5ubyIsInZlcnJhbi5ubyIsInZlc3RieS5ubyIsInNhbmRlLnZlc3Rmb2xkLm5vIiwidmVzdG5lcy5ubyIsInZlc3RyZS1zbGlkcmUubm8iLCJ2ZXN0cmUtdG90ZW4ubm8iLCJ2ZXN0dmFnb3kubm8iLCJ2ZXN0dlx4ZTVnXHhmOHkubm8iLCJ2ZXZlbHN0YWQubm8iLCJ2aWsubm8iLCJ2''@;'; put 'put ''aWtuYS5ubyIsInZpbmRhZmpvcmQubm8iLCJ2b2FnYXQubm8iLCJ2b2xkYS5ubyIsInZvc3Mubm8iLCIqLm5wIiwibnIiLCJiaXoubnIiLCJjb20ubnIiLCJlZHUubnIiLCJnb3YubnIiLCJpbmZvLm5yIiwibmV0Lm5yIiwib3JnLm5yIiwibnUiLCJueiIsImFjLm56IiwiY28ubnoiLCJjcmku''@;'; put 'put ''bnoiLCJnZWVrLm56IiwiZ2VuLm56IiwiZ292dC5ueiIsImhlYWx0aC5ueiIsIml3aS5ueiIsImtpd2kubnoiLCJtYW9yaS5ueiIsIm1cdTAxMDFvcmkubnoiLCJtaWwubnoiLCJuZXQubnoiLCJvcmcubnoiLCJwYXJsaWFtZW50Lm56Iiwic2Nob29sLm56Iiwib20iLCJjby5vbSIsImNvbS5v''@;'; put 'put ''bSIsImVkdS5vbSIsImdvdi5vbSIsIm1lZC5vbSIsIm11c2V1bS5vbSIsIm5ldC5vbSIsIm9yZy5vbSIsInByby5vbSIsIm9uaW9uIiwib3JnIiwicGEiLCJhYm8ucGEiLCJhYy5wYSIsImNvbS5wYSIsImVkdS5wYSIsImdvYi5wYSIsImluZy5wYSIsIm1lZC5wYSIsIm5ldC5wYSIsIm5vbS5w''@;'; put 'put ''YSIsIm9yZy5wYSIsInNsZC5wYSIsInBlIiwiY29tLnBlIiwiZWR1LnBlIiwiZ29iLnBlIiwibWlsLnBlIiwibmV0LnBlIiwibm9tLnBlIiwib3JnLnBlIiwicGYiLCJjb20ucGYiLCJlZHUucGYiLCJvcmcucGYiLCIqLnBnIiwicGgiLCJjb20ucGgiLCJlZHUucGgiLCJnb3YucGgiLCJpLnBo''@;'; put 'put ''IiwibWlsLnBoIiwibmV0LnBoIiwibmdvLnBoIiwib3JnLnBoIiwicGsiLCJhYy5wayIsImJpei5wayIsImNvbS5wayIsImVkdS5wayIsImZhbS5wayIsImdrcC5wayIsImdvYi5wayIsImdvZy5wayIsImdvay5wayIsImdvbi5wayIsImdvcC5wayIsImdvcy5wayIsImdvdi5wayIsIm5ldC5w''@;'; put 'put ''ayIsIm9yZy5wayIsIndlYi5wayIsInBsIiwiY29tLnBsIiwibmV0LnBsIiwib3JnLnBsIiwiYWdyby5wbCIsImFpZC5wbCIsImF0bS5wbCIsImF1dG8ucGwiLCJiaXoucGwiLCJlZHUucGwiLCJnbWluYS5wbCIsImdzbS5wbCIsImluZm8ucGwiLCJtYWlsLnBsIiwibWVkaWEucGwiLCJtaWFz''@;'; put 'put ''dGEucGwiLCJtaWwucGwiLCJuaWVydWNob21vc2NpLnBsIiwibm9tLnBsIiwicGMucGwiLCJwb3dpYXQucGwiLCJwcml2LnBsIiwicmVhbGVzdGF0ZS5wbCIsInJlbC5wbCIsInNleC5wbCIsInNob3AucGwiLCJza2xlcC5wbCIsInNvcy5wbCIsInN6a29sYS5wbCIsInRhcmdpLnBsIiwidG0u''@;'; put 'put ''cGwiLCJ0b3VyaXNtLnBsIiwidHJhdmVsLnBsIiwidHVyeXN0eWthLnBsIiwiZ292LnBsIiwiYXAuZ292LnBsIiwiZ3Jpdy5nb3YucGwiLCJpYy5nb3YucGwiLCJpcy5nb3YucGwiLCJrbXBzcC5nb3YucGwiLCJrb25zdWxhdC5nb3YucGwiLCJrcHBzcC5nb3YucGwiLCJrd3AuZ292LnBsIiwi''@;'; put 'put ''a3dwc3AuZ292LnBsIiwibXVwLmdvdi5wbCIsIm13Lmdvdi5wbCIsIm9pYS5nb3YucGwiLCJvaXJtLmdvdi5wbCIsIm9rZS5nb3YucGwiLCJvb3cuZ292LnBsIiwib3NjaHIuZ292LnBsIiwib3VtLmdvdi5wbCIsInBhLmdvdi5wbCIsInBpbmIuZ292LnBsIiwicGl3Lmdvdi5wbCIsInBvLmdv''@;'; put 'put ''di5wbCIsInByLmdvdi5wbCIsInBzcC5nb3YucGwiLCJwc3NlLmdvdi5wbCIsInB1cC5nb3YucGwiLCJyemd3Lmdvdi5wbCIsInNhLmdvdi5wbCIsInNkbi5nb3YucGwiLCJza28uZ292LnBsIiwic28uZ292LnBsIiwic3IuZ292LnBsIiwic3Rhcm9zdHdvLmdvdi5wbCIsInVnLmdvdi5wbCIs''@;'; put 'put ''InVnaW0uZ292LnBsIiwidW0uZ292LnBsIiwidW1pZy5nb3YucGwiLCJ1cG93Lmdvdi5wbCIsInVwcG8uZ292LnBsIiwidXMuZ292LnBsIiwidXcuZ292LnBsIiwidXpzLmdvdi5wbCIsIndpZi5nb3YucGwiLCJ3aWloLmdvdi5wbCIsIndpbmIuZ292LnBsIiwid2lvcy5nb3YucGwiLCJ3aXRk''@;'; put 'put ''Lmdvdi5wbCIsIndpdy5nb3YucGwiLCJ3a3ouZ292LnBsIiwid3NhLmdvdi5wbCIsIndza3IuZ292LnBsIiwid3NzZS5nb3YucGwiLCJ3dW96Lmdvdi5wbCIsInd6bWl1dy5nb3YucGwiLCJ6cC5nb3YucGwiLCJ6cGlzZG4uZ292LnBsIiwiYXVndXN0b3cucGwiLCJiYWJpYS1nb3JhLnBsIiwi''@;'; put 'put ''YmVkemluLnBsIiwiYmVza2lkeS5wbCIsImJpYWxvd2llemEucGwiLCJiaWFseXN0b2sucGwiLCJiaWVsYXdhLnBsIiwiYmllc3pjemFkeS5wbCIsImJvbGVzbGF3aWVjLnBsIiwiYnlkZ29zemN6LnBsIiwiYnl0b20ucGwiLCJjaWVzenluLnBsIiwiY3plbGFkei5wbCIsImN6ZXN0LnBsIiwi''@;'; put 'put ''ZGx1Z29sZWthLnBsIiwiZWxibGFnLnBsIiwiZWxrLnBsIiwiZ2xvZ293LnBsIiwiZ25pZXpuby5wbCIsImdvcmxpY2UucGwiLCJncmFqZXdvLnBsIiwiaWxhd2EucGwiLCJqYXdvcnpuby5wbCIsImplbGVuaWEtZ29yYS5wbCIsImpnb3JhLnBsIiwia2FsaXN6LnBsIiwia2FycGFjei5wbCIs''@;'; put 'put ''ImthcnR1enkucGwiLCJrYXN6dWJ5LnBsIiwia2F0b3dpY2UucGwiLCJrYXppbWllcnotZG9sbnkucGwiLCJrZXBuby5wbCIsImtldHJ6eW4ucGwiLCJrbG9kemtvLnBsIiwia29iaWVyenljZS5wbCIsImtvbG9icnplZy5wbCIsImtvbmluLnBsIiwia29uc2tvd29sYS5wbCIsImt1dG5vLnBs''@;'; put 'put ''IiwibGFweS5wbCIsImxlYm9yay5wbCIsImxlZ25pY2EucGwiLCJsZXphanNrLnBsIiwibGltYW5vd2EucGwiLCJsb216YS5wbCIsImxvd2ljei5wbCIsImx1YmluLnBsIiwibHVrb3cucGwiLCJtYWxib3JrLnBsIiwibWFsb3BvbHNrYS5wbCIsIm1hem93c3plLnBsIiwibWF6dXJ5LnBsIiwi''@;'; put 'put ''bWllbGVjLnBsIiwibWllbG5vLnBsIiwibXJhZ293by5wbCIsIm5ha2xvLnBsIiwibm93YXJ1ZGEucGwiLCJueXNhLnBsIiwib2xhd2EucGwiLCJvbGVja28ucGwiLCJvbGt1c3oucGwiLCJvbHN6dHluLnBsIiwib3BvY3puby5wbCIsIm9wb2xlLnBsIiwib3N0cm9kYS5wbCIsIm9zdHJvbGVr''@;'; put 'put ''YS5wbCIsIm9zdHJvd2llYy5wbCIsIm9zdHJvd3dsa3AucGwiLCJwaWxhLnBsIiwicGlzei5wbCIsInBvZGhhbGUucGwiLCJwb2RsYXNpZS5wbCIsInBvbGtvd2ljZS5wbCIsInBvbW9yc2tpZS5wbCIsInBvbW9yemUucGwiLCJwcm9jaG93aWNlLnBsIiwicHJ1c3prb3cucGwiLCJwcnpld29y''@;'; put 'put ''c2sucGwiLCJwdWxhd3kucGwiLCJyYWRvbS5wbCIsInJhd2EtbWF6LnBsIiwicnlibmlrLnBsIiwicnplc3pvdy5wbCIsInNhbm9rLnBsIiwic2VqbnkucGwiLCJza29jem93LnBsIiwic2xhc2sucGwiLCJzbHVwc2sucGwiLCJzb3Nub3dpZWMucGwiLCJzdGFsb3dhLXdvbGEucGwiLCJzdGFy''@;'; put 'put ''YWNob3dpY2UucGwiLCJzdGFyZ2FyZC5wbCIsInN1d2Fsa2kucGwiLCJzd2lkbmljYS5wbCIsInN3aWVib2R6aW4ucGwiLCJzd2lub3Vqc2NpZS5wbCIsInN6Y3plY2luLnBsIiwic3pjenl0bm8ucGwiLCJ0YXJub2JyemVnLnBsIiwidGdvcnkucGwiLCJ0dXJlay5wbCIsInR5Y2h5LnBsIiwi''@;'; put 'put ''dXN0a2EucGwiLCJ3YWxicnp5Y2gucGwiLCJ3YXJtaWEucGwiLCJ3YXJzemF3YS5wbCIsIndhdy5wbCIsIndlZ3Jvdy5wbCIsIndpZWx1bi5wbCIsIndsb2NsLnBsIiwid2xvY2xhd2VrLnBsIiwid29kemlzbGF3LnBsIiwid29sb21pbi5wbCIsIndyb2NsYXcucGwiLCJ6YWNocG9tb3IucGwi''@;'; put 'put ''LCJ6YWdhbi5wbCIsInphcm93LnBsIiwiemdvcmEucGwiLCJ6Z29yemVsZWMucGwiLCJwbSIsInBuIiwiY28ucG4iLCJlZHUucG4iLCJnb3YucG4iLCJuZXQucG4iLCJvcmcucG4iLCJwb3N0IiwicHIiLCJiaXoucHIiLCJjb20ucHIiLCJlZHUucHIiLCJnb3YucHIiLCJpbmZvLnByIiwiaXNs''@;'; put 'put ''YS5wciIsIm5hbWUucHIiLCJuZXQucHIiLCJvcmcucHIiLCJwcm8ucHIiLCJhYy5wciIsImVzdC5wciIsInByb2YucHIiLCJwcm8iLCJhYWEucHJvIiwiYWNhLnBybyIsImFjY3QucHJvIiwiYXZvY2F0LnBybyIsImJhci5wcm8iLCJjcGEucHJvIiwiZW5nLnBybyIsImp1ci5wcm8iLCJsYXcu''@;'; put 'put ''cHJvIiwibWVkLnBybyIsInJlY2h0LnBybyIsInBzIiwiY29tLnBzIiwiZWR1LnBzIiwiZ292LnBzIiwibmV0LnBzIiwib3JnLnBzIiwicGxvLnBzIiwic2VjLnBzIiwicHQiLCJjb20ucHQiLCJlZHUucHQiLCJnb3YucHQiLCJpbnQucHQiLCJuZXQucHQiLCJub21lLnB0Iiwib3JnLnB0Iiwi''@;'; put 'put ''cHVibC5wdCIsInB3IiwiYmVsYXUucHciLCJjby5wdyIsImVkLnB3IiwiZ28ucHciLCJvci5wdyIsInB5IiwiY29tLnB5IiwiY29vcC5weSIsImVkdS5weSIsImdvdi5weSIsIm1pbC5weSIsIm5ldC5weSIsIm9yZy5weSIsInFhIiwiY29tLnFhIiwiZWR1LnFhIiwiZ292LnFhIiwibWlsLnFh''@;'; put 'put ''IiwibmFtZS5xYSIsIm5ldC5xYSIsIm9yZy5xYSIsInNjaC5xYSIsInJlIiwiYXNzby5yZSIsImNvbS5yZSIsInJvIiwiYXJ0cy5ybyIsImNvbS5ybyIsImZpcm0ucm8iLCJpbmZvLnJvIiwibm9tLnJvIiwibnQucm8iLCJvcmcucm8iLCJyZWMucm8iLCJzdG9yZS5ybyIsInRtLnJvIiwid3d3''@;'; put 'put ''LnJvIiwicnMiLCJhYy5ycyIsImNvLnJzIiwiZWR1LnJzIiwiZ292LnJzIiwiaW4ucnMiLCJvcmcucnMiLCJydSIsInJ3IiwiYWMucnciLCJjby5ydyIsImNvb3AucnciLCJnb3YucnciLCJtaWwucnciLCJuZXQucnciLCJvcmcucnciLCJzYSIsImNvbS5zYSIsImVkdS5zYSIsImdvdi5zYSIs''@;'; put 'put ''Im1lZC5zYSIsIm5ldC5zYSIsIm9yZy5zYSIsInB1Yi5zYSIsInNjaC5zYSIsInNiIiwiY29tLnNiIiwiZWR1LnNiIiwiZ292LnNiIiwibmV0LnNiIiwib3JnLnNiIiwic2MiLCJjb20uc2MiLCJlZHUuc2MiLCJnb3Yuc2MiLCJuZXQuc2MiLCJvcmcuc2MiLCJzZCIsImNvbS5zZCIsImVkdS5z''@;'; put 'put ''ZCIsImdvdi5zZCIsImluZm8uc2QiLCJtZWQuc2QiLCJuZXQuc2QiLCJvcmcuc2QiLCJ0di5zZCIsInNlIiwiYS5zZSIsImFjLnNlIiwiYi5zZSIsImJkLnNlIiwiYnJhbmQuc2UiLCJjLnNlIiwiZC5zZSIsImUuc2UiLCJmLnNlIiwiZmguc2UiLCJmaHNrLnNlIiwiZmh2LnNlIiwiZy5zZSIs''@;'; put 'put ''Imguc2UiLCJpLnNlIiwiay5zZSIsImtvbWZvcmIuc2UiLCJrb21tdW5hbGZvcmJ1bmQuc2UiLCJrb212dXguc2UiLCJsLnNlIiwibGFuYmliLnNlIiwibS5zZSIsIm4uc2UiLCJuYXR1cmJydWtzZ3ltbi5zZSIsIm8uc2UiLCJvcmcuc2UiLCJwLnNlIiwicGFydGkuc2UiLCJwcC5zZSIsInBy''@;'; put 'put ''ZXNzLnNlIiwici5zZSIsInMuc2UiLCJ0LnNlIiwidG0uc2UiLCJ1LnNlIiwidy5zZSIsInguc2UiLCJ5LnNlIiwiei5zZSIsInNnIiwiY29tLnNnIiwiZWR1LnNnIiwiZ292LnNnIiwibmV0LnNnIiwib3JnLnNnIiwic2giLCJjb20uc2giLCJnb3Yuc2giLCJtaWwuc2giLCJuZXQuc2giLCJv''@;'; put 'put ''cmcuc2giLCJzaSIsInNqIiwic2siLCJzbCIsImNvbS5zbCIsImVkdS5zbCIsImdvdi5zbCIsIm5ldC5zbCIsIm9yZy5zbCIsInNtIiwic24iLCJhcnQuc24iLCJjb20uc24iLCJlZHUuc24iLCJnb3V2LnNuIiwib3JnLnNuIiwicGVyc28uc24iLCJ1bml2LnNuIiwic28iLCJjb20uc28iLCJl''@;'; put 'put ''ZHUuc28iLCJnb3Yuc28iLCJtZS5zbyIsIm5ldC5zbyIsIm9yZy5zbyIsInNyIiwic3MiLCJiaXouc3MiLCJjby5zcyIsImNvbS5zcyIsImVkdS5zcyIsImdvdi5zcyIsIm1lLnNzIiwibmV0LnNzIiwib3JnLnNzIiwic2NoLnNzIiwic3QiLCJjby5zdCIsImNvbS5zdCIsImNvbnN1bGFkby5z''@;'; put 'put ''dCIsImVkdS5zdCIsImVtYmFpeGFkYS5zdCIsIm1pbC5zdCIsIm5ldC5zdCIsIm9yZy5zdCIsInByaW5jaXBlLnN0Iiwic2FvdG9tZS5zdCIsInN0b3JlLnN0Iiwic3UiLCJzdiIsImNvbS5zdiIsImVkdS5zdiIsImdvYi5zdiIsIm9yZy5zdiIsInJlZC5zdiIsInN4IiwiZ292LnN4Iiwic3ki''@;'; put 'put ''LCJjb20uc3kiLCJlZHUuc3kiLCJnb3Yuc3kiLCJtaWwuc3kiLCJuZXQuc3kiLCJvcmcuc3kiLCJzeiIsImFjLnN6IiwiY28uc3oiLCJvcmcuc3oiLCJ0YyIsInRkIiwidGVsIiwidGYiLCJ0ZyIsInRoIiwiYWMudGgiLCJjby50aCIsImdvLnRoIiwiaW4udGgiLCJtaS50aCIsIm5ldC50aCIs''@;'; put 'put ''Im9yLnRoIiwidGoiLCJhYy50aiIsImJpei50aiIsImNvLnRqIiwiY29tLnRqIiwiZWR1LnRqIiwiZ28udGoiLCJnb3YudGoiLCJpbnQudGoiLCJtaWwudGoiLCJuYW1lLnRqIiwibmV0LnRqIiwibmljLnRqIiwib3JnLnRqIiwidGVzdC50aiIsIndlYi50aiIsInRrIiwidGwiLCJnb3YudGwi''@;'; put 'put ''LCJ0bSIsImNvLnRtIiwiY29tLnRtIiwiZWR1LnRtIiwiZ292LnRtIiwibWlsLnRtIiwibmV0LnRtIiwibm9tLnRtIiwib3JnLnRtIiwidG4iLCJjb20udG4iLCJlbnMudG4iLCJmaW4udG4iLCJnb3YudG4iLCJpbmQudG4iLCJpbmZvLnRuIiwiaW50bC50biIsIm1pbmNvbS50biIsIm5hdC50''@;'; put 'put ''biIsIm5ldC50biIsIm9yZy50biIsInBlcnNvLnRuIiwidG91cmlzbS50biIsInRvIiwiY29tLnRvIiwiZWR1LnRvIiwiZ292LnRvIiwibWlsLnRvIiwibmV0LnRvIiwib3JnLnRvIiwidHIiLCJhdi50ciIsImJicy50ciIsImJlbC50ciIsImJpei50ciIsImNvbS50ciIsImRyLnRyIiwiZWR1''@;'; put 'put ''LnRyIiwiZ2VuLnRyIiwiZ292LnRyIiwiaW5mby50ciIsImsxMi50ciIsImtlcC50ciIsIm1pbC50ciIsIm5hbWUudHIiLCJuZXQudHIiLCJvcmcudHIiLCJwb2wudHIiLCJ0ZWwudHIiLCJ0c2sudHIiLCJ0di50ciIsIndlYi50ciIsIm5jLnRyIiwiZ292Lm5jLnRyIiwidHQiLCJiaXoudHQi''@;'; put 'put ''LCJjby50dCIsImNvbS50dCIsImVkdS50dCIsImdvdi50dCIsImluZm8udHQiLCJtaWwudHQiLCJuYW1lLnR0IiwibmV0LnR0Iiwib3JnLnR0IiwicHJvLnR0IiwidHYiLCJ0dyIsImNsdWIudHciLCJjb20udHciLCJlYml6LnR3IiwiZWR1LnR3IiwiZ2FtZS50dyIsImdvdi50dyIsImlkdi50''@;'; put 'put ''dyIsIm1pbC50dyIsIm5ldC50dyIsIm9yZy50dyIsInR6IiwiYWMudHoiLCJjby50eiIsImdvLnR6IiwiaG90ZWwudHoiLCJpbmZvLnR6IiwibWUudHoiLCJtaWwudHoiLCJtb2JpLnR6IiwibmUudHoiLCJvci50eiIsInNjLnR6IiwidHYudHoiLCJ1YSIsImNvbS51YSIsImVkdS51YSIsImdv''@;'; put 'put ''di51YSIsImluLnVhIiwibmV0LnVhIiwib3JnLnVhIiwiY2hlcmthc3N5LnVhIiwiY2hlcmthc3kudWEiLCJjaGVybmlnb3YudWEiLCJjaGVybmloaXYudWEiLCJjaGVybml2dHNpLnVhIiwiY2hlcm5vdnRzeS51YSIsImNrLnVhIiwiY24udWEiLCJjci51YSIsImNyaW1lYS51YSIsImN2LnVh''@;'; put 'put ''IiwiZG4udWEiLCJkbmVwcm9wZXRyb3Zzay51YSIsImRuaXByb3BldHJvdnNrLnVhIiwiZG9uZXRzay51YSIsImRwLnVhIiwiaWYudWEiLCJpdmFuby1mcmFua2l2c2sudWEiLCJraC51YSIsImtoYXJraXYudWEiLCJraGFya292LnVhIiwia2hlcnNvbi51YSIsImtobWVsbml0c2tpeS51YSIs''@;'; put 'put ''ImtobWVsbnl0c2t5aS51YSIsImtpZXYudWEiLCJraXJvdm9ncmFkLnVhIiwia20udWEiLCJrci51YSIsImtyb3B5dm55dHNreWkudWEiLCJrcnltLnVhIiwia3MudWEiLCJrdi51YSIsImt5aXYudWEiLCJsZy51YSIsImx0LnVhIiwibHVnYW5zay51YSIsImx1aGFuc2sudWEiLCJsdXRzay51''@;'; put 'put ''YSIsImx2LnVhIiwibHZpdi51YSIsIm1rLnVhIiwibXlrb2xhaXYudWEiLCJuaWtvbGFldi51YSIsIm9kLnVhIiwib2Rlc2EudWEiLCJvZGVzc2EudWEiLCJwbC51YSIsInBvbHRhdmEudWEiLCJyaXZuZS51YSIsInJvdm5vLnVhIiwicnYudWEiLCJzYi51YSIsInNlYmFzdG9wb2wudWEiLCJz''@;'; put 'put ''ZXZhc3RvcG9sLnVhIiwic20udWEiLCJzdW15LnVhIiwidGUudWEiLCJ0ZXJub3BpbC51YSIsInV6LnVhIiwidXpoZ29yb2QudWEiLCJ1emhob3JvZC51YSIsInZpbm5pY2EudWEiLCJ2aW5ueXRzaWEudWEiLCJ2bi51YSIsInZvbHluLnVhIiwieWFsdGEudWEiLCJ6YWthcnBhdHRpYS51YSIs''@;'; put 'put ''InphcG9yaXpoemhlLnVhIiwiemFwb3Jpemh6aGlhLnVhIiwiemhpdG9taXIudWEiLCJ6aHl0b215ci51YSIsInpwLnVhIiwienQudWEiLCJ1ZyIsImFjLnVnIiwiY28udWciLCJjb20udWciLCJnby51ZyIsIm5lLnVnIiwib3IudWciLCJvcmcudWciLCJzYy51ZyIsInVrIiwiYWMudWsiLCJj''@;'; put 'put ''by51ayIsImdvdi51ayIsImx0ZC51ayIsIm1lLnVrIiwibmV0LnVrIiwibmhzLnVrIiwib3JnLnVrIiwicGxjLnVrIiwicG9saWNlLnVrIiwiKi5zY2gudWsiLCJ1cyIsImRuaS51cyIsImZlZC51cyIsImlzYS51cyIsImtpZHMudXMiLCJuc24udXMiLCJhay51cyIsImFsLnVzIiwiYXIudXMi''@;'; put 'put ''LCJhcy51cyIsImF6LnVzIiwiY2EudXMiLCJjby51cyIsImN0LnVzIiwiZGMudXMiLCJkZS51cyIsImZsLnVzIiwiZ2EudXMiLCJndS51cyIsImhpLnVzIiwiaWEudXMiLCJpZC51cyIsImlsLnVzIiwiaW4udXMiLCJrcy51cyIsImt5LnVzIiwibGEudXMiLCJtYS51cyIsIm1kLnVzIiwibWUu''@;'; put 'put ''dXMiLCJtaS51cyIsIm1uLnVzIiwibW8udXMiLCJtcy51cyIsIm10LnVzIiwibmMudXMiLCJuZC51cyIsIm5lLnVzIiwibmgudXMiLCJuai51cyIsIm5tLnVzIiwibnYudXMiLCJueS51cyIsIm9oLnVzIiwib2sudXMiLCJvci51cyIsInBhLnVzIiwicHIudXMiLCJyaS51cyIsInNjLnVzIiwi''@;'; put 'put ''c2QudXMiLCJ0bi51cyIsInR4LnVzIiwidXQudXMiLCJ2YS51cyIsInZpLnVzIiwidnQudXMiLCJ3YS51cyIsIndpLnVzIiwid3YudXMiLCJ3eS51cyIsImsxMi5hay51cyIsImsxMi5hbC51cyIsImsxMi5hci51cyIsImsxMi5hcy51cyIsImsxMi5hei51cyIsImsxMi5jYS51cyIsImsxMi5j''@;'; put 'put ''by51cyIsImsxMi5jdC51cyIsImsxMi5kYy51cyIsImsxMi5mbC51cyIsImsxMi5nYS51cyIsImsxMi5ndS51cyIsImsxMi5pYS51cyIsImsxMi5pZC51cyIsImsxMi5pbC51cyIsImsxMi5pbi51cyIsImsxMi5rcy51cyIsImsxMi5reS51cyIsImsxMi5sYS51cyIsImsxMi5tYS51cyIsImsx''@;'; put 'put ''Mi5tZC51cyIsImsxMi5tZS51cyIsImsxMi5taS51cyIsImsxMi5tbi51cyIsImsxMi5tby51cyIsImsxMi5tcy51cyIsImsxMi5tdC51cyIsImsxMi5uYy51cyIsImsxMi5uZS51cyIsImsxMi5uaC51cyIsImsxMi5uai51cyIsImsxMi5ubS51cyIsImsxMi5udi51cyIsImsxMi5ueS51cyIs''@;'; put 'put ''ImsxMi5vaC51cyIsImsxMi5vay51cyIsImsxMi5vci51cyIsImsxMi5wYS51cyIsImsxMi5wci51cyIsImsxMi5zYy51cyIsImsxMi50bi51cyIsImsxMi50eC51cyIsImsxMi51dC51cyIsImsxMi52YS51cyIsImsxMi52aS51cyIsImsxMi52dC51cyIsImsxMi53YS51cyIsImsxMi53aS51''@;'; put 'put ''cyIsImNjLmFrLnVzIiwibGliLmFrLnVzIiwiY2MuYWwudXMiLCJsaWIuYWwudXMiLCJjYy5hci51cyIsImxpYi5hci51cyIsImNjLmFzLnVzIiwibGliLmFzLnVzIiwiY2MuYXoudXMiLCJsaWIuYXoudXMiLCJjYy5jYS51cyIsImxpYi5jYS51cyIsImNjLmNvLnVzIiwibGliLmNvLnVzIiwi''@;'; put 'put ''Y2MuY3QudXMiLCJsaWIuY3QudXMiLCJjYy5kYy51cyIsImxpYi5kYy51cyIsImNjLmRlLnVzIiwiY2MuZmwudXMiLCJjYy5nYS51cyIsImNjLmd1LnVzIiwiY2MuaGkudXMiLCJjYy5pYS51cyIsImNjLmlkLnVzIiwiY2MuaWwudXMiLCJjYy5pbi51cyIsImNjLmtzLnVzIiwiY2Mua3kudXMi''@;'; put 'put ''LCJjYy5sYS51cyIsImNjLm1hLnVzIiwiY2MubWQudXMiLCJjYy5tZS51cyIsImNjLm1pLnVzIiwiY2MubW4udXMiLCJjYy5tby51cyIsImNjLm1zLnVzIiwiY2MubXQudXMiLCJjYy5uYy51cyIsImNjLm5kLnVzIiwiY2MubmUudXMiLCJjYy5uaC51cyIsImNjLm5qLnVzIiwiY2Mubm0udXMi''@;'; put 'put ''LCJjYy5udi51cyIsImNjLm55LnVzIiwiY2Mub2gudXMiLCJjYy5vay51cyIsImNjLm9yLnVzIiwiY2MucGEudXMiLCJjYy5wci51cyIsImNjLnJpLnVzIiwiY2Muc2MudXMiLCJjYy5zZC51cyIsImNjLnRuLnVzIiwiY2MudHgudXMiLCJjYy51dC51cyIsImNjLnZhLnVzIiwiY2MudmkudXMi''@;'; put 'put ''LCJjYy52dC51cyIsImNjLndhLnVzIiwiY2Mud2kudXMiLCJjYy53di51cyIsImNjLnd5LnVzIiwiazEyLnd5LnVzIiwibGliLmZsLnVzIiwibGliLmdhLnVzIiwibGliLmd1LnVzIiwibGliLmhpLnVzIiwibGliLmlhLnVzIiwibGliLmlkLnVzIiwibGliLmlsLnVzIiwibGliLmluLnVzIiwi''@;'; put 'put ''bGliLmtzLnVzIiwibGliLmt5LnVzIiwibGliLmxhLnVzIiwibGliLm1hLnVzIiwibGliLm1kLnVzIiwibGliLm1lLnVzIiwibGliLm1pLnVzIiwibGliLm1uLnVzIiwibGliLm1vLnVzIiwibGliLm1zLnVzIiwibGliLm10LnVzIiwibGliLm5jLnVzIiwibGliLm5kLnVzIiwibGliLm5lLnVz''@;'; put 'put ''IiwibGliLm5oLnVzIiwibGliLm5qLnVzIiwibGliLm5tLnVzIiwibGliLm52LnVzIiwibGliLm55LnVzIiwibGliLm9oLnVzIiwibGliLm9rLnVzIiwibGliLm9yLnVzIiwibGliLnBhLnVzIiwibGliLnByLnVzIiwibGliLnJpLnVzIiwibGliLnNjLnVzIiwibGliLnNkLnVzIiwibGliLnRu''@;'; put 'put ''LnVzIiwibGliLnR4LnVzIiwibGliLnV0LnVzIiwibGliLnZhLnVzIiwibGliLnZpLnVzIiwibGliLnZ0LnVzIiwibGliLndhLnVzIiwibGliLndpLnVzIiwibGliLnd5LnVzIiwiY2h0ci5rMTIubWEudXMiLCJwYXJvY2guazEyLm1hLnVzIiwicHZ0LmsxMi5tYS51cyIsImFubi1hcmJvci5t''@;'; put 'put ''aS51cyIsImNvZy5taS51cyIsImRzdC5taS51cyIsImVhdG9uLm1pLnVzIiwiZ2VuLm1pLnVzIiwibXVzLm1pLnVzIiwidGVjLm1pLnVzIiwid2FzaHRlbmF3Lm1pLnVzIiwidXkiLCJjb20udXkiLCJlZHUudXkiLCJndWIudXkiLCJtaWwudXkiLCJuZXQudXkiLCJvcmcudXkiLCJ1eiIsImNv''@;'; put 'put ''LnV6IiwiY29tLnV6IiwibmV0LnV6Iiwib3JnLnV6IiwidmEiLCJ2YyIsImNvbS52YyIsImVkdS52YyIsImdvdi52YyIsIm1pbC52YyIsIm5ldC52YyIsIm9yZy52YyIsInZlIiwiYXJ0cy52ZSIsImJpYi52ZSIsImNvLnZlIiwiY29tLnZlIiwiZTEyLnZlIiwiZWR1LnZlIiwiZmlybS52ZSIs''@;'; put 'put ''ImdvYi52ZSIsImdvdi52ZSIsImluZm8udmUiLCJpbnQudmUiLCJtaWwudmUiLCJuZXQudmUiLCJub20udmUiLCJvcmcudmUiLCJyYXIudmUiLCJyZWMudmUiLCJzdG9yZS52ZSIsInRlYy52ZSIsIndlYi52ZSIsInZnIiwidmkiLCJjby52aSIsImNvbS52aSIsImsxMi52aSIsIm5ldC52aSIs''@;'; put 'put ''Im9yZy52aSIsInZuIiwiYWMudm4iLCJhaS52biIsImJpei52biIsImNvbS52biIsImVkdS52biIsImdvdi52biIsImhlYWx0aC52biIsImlkLnZuIiwiaW5mby52biIsImludC52biIsImlvLnZuIiwibmFtZS52biIsIm5ldC52biIsIm9yZy52biIsInByby52biIsImFuZ2lhbmcudm4iLCJi''@;'; put 'put ''YWNnaWFuZy52biIsImJhY2thbi52biIsImJhY2xpZXUudm4iLCJiYWNuaW5oLnZuIiwiYmFyaWEtdnVuZ3RhdS52biIsImJlbnRyZS52biIsImJpbmhkaW5oLnZuIiwiYmluaGR1b25nLnZuIiwiYmluaHBodW9jLnZuIiwiYmluaHRodWFuLnZuIiwiY2FtYXUudm4iLCJjYW50aG8udm4iLCJj''@;'; put 'put ''YW9iYW5nLnZuIiwiZGFrbGFrLnZuIiwiZGFrbm9uZy52biIsImRhbmFuZy52biIsImRpZW5iaWVuLnZuIiwiZG9uZ25haS52biIsImRvbmd0aGFwLnZuIiwiZ2lhbGFpLnZuIiwiaGFnaWFuZy52biIsImhhaWR1b25nLnZuIiwiaGFpcGhvbmcudm4iLCJoYW5hbS52biIsImhhbm9pLnZuIiwi''@;'; put 'put ''aGF0aW5oLnZuIiwiaGF1Z2lhbmcudm4iLCJob2FiaW5oLnZuIiwiaHVuZ3llbi52biIsImtoYW5oaG9hLnZuIiwia2llbmdpYW5nLnZuIiwia29udHVtLnZuIiwibGFpY2hhdS52biIsImxhbWRvbmcudm4iLCJsYW5nc29uLnZuIiwibGFvY2FpLnZuIiwibG9uZ2FuLnZuIiwibmFtZGluaC52''@;'; put 'put ''biIsIm5naGVhbi52biIsIm5pbmhiaW5oLnZuIiwibmluaHRodWFuLnZuIiwicGh1dGhvLnZuIiwicGh1eWVuLnZuIiwicXVhbmdiaW5oLnZuIiwicXVhbmduYW0udm4iLCJxdWFuZ25nYWkudm4iLCJxdWFuZ25pbmgudm4iLCJxdWFuZ3RyaS52biIsInNvY3RyYW5nLnZuIiwic29ubGEudm4i''@;'; put 'put ''LCJ0YXluaW5oLnZuIiwidGhhaWJpbmgudm4iLCJ0aGFpbmd1eWVuLnZuIiwidGhhbmhob2Eudm4iLCJ0aGFuaHBob2hvY2hpbWluaC52biIsInRodWF0aGllbmh1ZS52biIsInRpZW5naWFuZy52biIsInRyYXZpbmgudm4iLCJ0dXllbnF1YW5nLnZuIiwidmluaGxvbmcudm4iLCJ2aW5ocGh1''@;'; put 'put ''Yy52biIsInllbmJhaS52biIsInZ1IiwiY29tLnZ1IiwiZWR1LnZ1IiwibmV0LnZ1Iiwib3JnLnZ1Iiwid2YiLCJ3cyIsImNvbS53cyIsImVkdS53cyIsImdvdi53cyIsIm5ldC53cyIsIm9yZy53cyIsInl0IiwiXHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjI3XHUwNjJhIiwiXHUwNTcw''@;'; put 'put ''XHUwNTYxXHUwNTc1IiwiXHUwOWFjXHUwOWJlXHUwOTgyXHUwOWIyXHUwOWJlIiwiXHUwNDMxXHUwNDMzIiwiXHUwNjI3XHUwNjQ0XHUwNjI4XHUwNjJkXHUwNjMxXHUwNjRhXHUwNjQ2IiwiXHUwNDMxXHUwNDM1XHUwNDNiIiwiXHU0ZTJkXHU1NmZkIiwiXHU0ZTJkXHU1NzBiIiwiXHUwNjI3''@;'; put 'put ''XHUwNjQ0XHUwNjJjXHUwNjMyXHUwNjI3XHUwNjI2XHUwNjMxIiwiXHUwNjQ1XHUwNjM1XHUwNjMxIiwiXHUwNDM1XHUwNDRlIiwiXHUwM2I1XHUwM2M1IiwiXHUwNjQ1XHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI3IiwiXHUxMGQyXHUxMGQ0IiwiXHUw''@;'; put 'put ''M2I1XHUwM2JiIiwiXHU5OTk5XHU2ZTJmIiwiXHU1MDBiXHU0ZWJhLlx1OTk5OVx1NmUyZiIsIlx1NTE2Y1x1NTNmOC5cdTk5OTlcdTZlMmYiLCJcdTY1M2ZcdTVlOWMuXHU5OTk5XHU2ZTJmIiwiXHU2NTU5XHU4MGIyLlx1OTk5OVx1NmUyZiIsIlx1N2Q0NFx1N2U1NC5cdTk5OTlcdTZlMmYi''@;'; put 'put ''LCJcdTdkYjJcdTdkNjEuXHU5OTk5XHU2ZTJmIiwiXHUwY2FkXHUwY2JlXHUwY2IwXHUwY2E0IiwiXHUwYjJkXHUwYjNlXHUwYjMwXHUwYjI0IiwiXHUwOWFkXHUwOWJlXHUwOWYwXHUwOWE0IiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0XHUwOTJlXHUwOTRkIiwiXHUwOTJkXHUwOTNlXHUw''@;'; put 'put ''OTMwXHUwOTRiXHUwOTI0IiwiXHUwNjgwXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwZDJkXHUwZDNlXHUwZDMwXHUwZDI0XHUwZDAyIiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0IiwiXHUwNjI4XHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwNjI4XHUwNmJlXHUwNjI3XHUwNjMxXHUwNjJhIiwi''@;'; put 'put ''XHUwYzJkXHUwYzNlXHUwYzMwXHUwYzI0XHUwYzRkIiwiXHUwYWFkXHUwYWJlXHUwYWIwXHUwYWE0IiwiXHUwYTJkXHUwYTNlXHUwYTMwXHUwYTI0IiwiXHUwOWFkXHUwOWJlXHUwOWIwXHUwOWE0IiwiXHUwYjg3XHUwYmE4XHUwYmNkXHUwYmE0XHUwYmJmXHUwYmFmXHUwYmJlIiwiXHUwNjI3''@;'; put 'put ''XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjMxXHUwNjI3XHUwNjQyIiwiXHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjMxXHUwNjJmXHUwNjQ2IiwiXHVkNTVjXHVhZDZkIiwiXHUwNDliXHUwNDMwXHUwNDM3IiwiXHUw''@;'; put 'put ''ZWE1XHUwZWIyXHUwZWE3IiwiXHUwZGJkXHUwZDgyXHUwZDlhXHUwZGNmIiwiXHUwYjg3XHUwYmIyXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmM4IiwiXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjNhXHUwNjMxXHUwNjI4IiwiXHUwNDNjXHUwNDNhXHUwNDM0IiwiXHUwNDNjXHUwNDNlXHUwNDNkIiwi''@;'; put 'put ''XHU2ZmIzXHU5NTgwIiwiXHU2ZmIzXHU5NWU4IiwiXHUwNjQ1XHUwNjQ0XHUwNjRhXHUwNjMzXHUwNjRhXHUwNjI3IiwiXHUwNjM5XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNmE5XHUwNjMzXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNjQzXHUwNjMz''@;'; put 'put ''XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjQxXHUwNjQ0XHUwNjMzXHUwNjM3XHUwNjRhXHUwNjQ2IiwiXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDMwXHUwNDNhLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzMVx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0''@;'; put 'put ''MzQuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDNcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQwXHUwNDQ0IiwiXHUwNjQyXHUwNjM3''@;'; put 'put ''XHUwNjMxIiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNmMzIiwiXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjQ3IiwiXHUwNjMzXHUwNjQ4XHUwNjJmXHUwNjI3XHUwNjQ2IiwiXHU2NWIwXHU1MmEwXHU1NzYxIiwiXHUwYjlhXHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmFhXHUwYmNkXHUwYmFhXHUwYmMyXHUwYmIwXHUw''@;'; put 'put ''YmNkIiwiXHUwNjMzXHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjI5IiwiXHUwNjMzXHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjI3IiwiXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE3XHUwZTJiXHUwZTMyXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxOFx1MGUzOFx1MGUyM1x1MGUwMVx1''@;'; put 'put ''MGUzNFx1MGUwOC5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlNDBcdTBlMTlcdTBlNDdcdTBlMTUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTIzXHUwZTMxXHUwZTEwXHUwZTFhXHUwZTMyXHUwZTI1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyOFx1MGUzNlx1MGUwMVx1MGUyOVx1MGUz''@;'; put 'put ''Mi5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMmRcdTBlMDdcdTBlMDRcdTBlNGNcdTBlMDFcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwNjJhXHUwNjQ4XHUwNjQ2XHUwNjMzIiwiXHU1M2YwXHU3MDYzIiwiXHU1M2YwXHU2ZTdlIiwiXHU4MWZhXHU3MDYzIiwiXHUwNDQzXHUwNDNh''@;'; put 'put ''XHUwNDQwIiwiXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ1XHUwNjQ2IiwieHh4IiwieWUiLCJjb20ueWUiLCJlZHUueWUiLCJnb3YueWUiLCJtaWwueWUiLCJuZXQueWUiLCJvcmcueWUiLCJhYy56YSIsImFncmljLnphIiwiYWx0LnphIiwiY28uemEiLCJlZHUuemEiLCJnb3YuemEiLCJncm9u''@;'; put 'put ''ZGFyLnphIiwibGF3LnphIiwibWlsLnphIiwibmV0LnphIiwibmdvLnphIiwibmljLnphIiwibmlzLnphIiwibm9tLnphIiwib3JnLnphIiwic2Nob29sLnphIiwidG0uemEiLCJ3ZWIuemEiLCJ6bSIsImFjLnptIiwiYml6LnptIiwiY28uem0iLCJjb20uem0iLCJlZHUuem0iLCJnb3Yuem0i''@;'; put 'put ''LCJpbmZvLnptIiwibWlsLnptIiwibmV0LnptIiwib3JnLnptIiwic2NoLnptIiwienciLCJhYy56dyIsImNvLnp3IiwiZ292Lnp3IiwibWlsLnp3Iiwib3JnLnp3IiwiYWFhIiwiYWFycCIsImFiYiIsImFiYm90dCIsImFiYnZpZSIsImFiYyIsImFibGUiLCJhYm9nYWRvIiwiYWJ1ZGhhYmki''@;'; put 'put ''LCJhY2FkZW15IiwiYWNjZW50dXJlIiwiYWNjb3VudGFudCIsImFjY291bnRhbnRzIiwiYWNvIiwiYWN0b3IiLCJhZHMiLCJhZHVsdCIsImFlZyIsImFldG5hIiwiYWZsIiwiYWZyaWNhIiwiYWdha2hhbiIsImFnZW5jeSIsImFpZyIsImFpcmJ1cyIsImFpcmZvcmNlIiwiYWlydGVsIiwiYWtk''@;'; put 'put ''biIsImFsaWJhYmEiLCJhbGlwYXkiLCJhbGxmaW5hbnoiLCJhbGxzdGF0ZSIsImFsbHkiLCJhbHNhY2UiLCJhbHN0b20iLCJhbWF6b24iLCJhbWVyaWNhbmV4cHJlc3MiLCJhbWVyaWNhbmZhbWlseSIsImFtZXgiLCJhbWZhbSIsImFtaWNhIiwiYW1zdGVyZGFtIiwiYW5hbHl0aWNzIiwiYW5k''@;'; put 'put ''cm9pZCIsImFucXVhbiIsImFueiIsImFvbCIsImFwYXJ0bWVudHMiLCJhcHAiLCJhcHBsZSIsImFxdWFyZWxsZSIsImFyYWIiLCJhcmFtY28iLCJhcmNoaSIsImFybXkiLCJhcnQiLCJhcnRlIiwiYXNkYSIsImFzc29jaWF0ZXMiLCJhdGhsZXRhIiwiYXR0b3JuZXkiLCJhdWN0aW9uIiwiYXVk''@;'; put 'put ''aSIsImF1ZGlibGUiLCJhdWRpbyIsImF1c3Bvc3QiLCJhdXRob3IiLCJhdXRvIiwiYXV0b3MiLCJhd3MiLCJheGEiLCJhenVyZSIsImJhYnkiLCJiYWlkdSIsImJhbmFtZXgiLCJiYW5kIiwiYmFuayIsImJhciIsImJhcmNlbG9uYSIsImJhcmNsYXljYXJkIiwiYmFyY2xheXMiLCJiYXJlZm9v''@;'; put 'put ''dCIsImJhcmdhaW5zIiwiYmFzZWJhbGwiLCJiYXNrZXRiYWxsIiwiYmF1aGF1cyIsImJheWVybiIsImJiYyIsImJidCIsImJidmEiLCJiY2ciLCJiY24iLCJiZWF0cyIsImJlYXV0eSIsImJlZXIiLCJiZW50bGV5IiwiYmVybGluIiwiYmVzdCIsImJlc3RidXkiLCJiZXQiLCJiaGFydGkiLCJi''@;'; put 'put ''aWJsZSIsImJpZCIsImJpa2UiLCJiaW5nIiwiYmluZ28iLCJiaW8iLCJibGFjayIsImJsYWNrZnJpZGF5IiwiYmxvY2tidXN0ZXIiLCJibG9nIiwiYmxvb21iZXJnIiwiYmx1ZSIsImJtcyIsImJtdyIsImJucHBhcmliYXMiLCJib2F0cyIsImJvZWhyaW5nZXIiLCJib2ZhIiwiYm9tIiwiYm9u''@;'; put 'put ''ZCIsImJvbyIsImJvb2siLCJib29raW5nIiwiYm9zY2giLCJib3N0aWsiLCJib3N0b24iLCJib3QiLCJib3V0aXF1ZSIsImJveCIsImJyYWRlc2NvIiwiYnJpZGdlc3RvbmUiLCJicm9hZHdheSIsImJyb2tlciIsImJyb3RoZXIiLCJicnVzc2VscyIsImJ1aWxkIiwiYnVpbGRlcnMiLCJidXNp''@;'; put 'put ''bmVzcyIsImJ1eSIsImJ1enoiLCJiemgiLCJjYWIiLCJjYWZlIiwiY2FsIiwiY2FsbCIsImNhbHZpbmtsZWluIiwiY2FtIiwiY2FtZXJhIiwiY2FtcCIsImNhbm9uIiwiY2FwZXRvd24iLCJjYXBpdGFsIiwiY2FwaXRhbG9uZSIsImNhciIsImNhcmF2YW4iLCJjYXJkcyIsImNhcmUiLCJjYXJl''@;'; put 'put ''ZXIiLCJjYXJlZXJzIiwiY2FycyIsImNhc2EiLCJjYXNlIiwiY2FzaCIsImNhc2lubyIsImNhdGVyaW5nIiwiY2F0aG9saWMiLCJjYmEiLCJjYm4iLCJjYnJlIiwiY2VudGVyIiwiY2VvIiwiY2VybiIsImNmYSIsImNmZCIsImNoYW5lbCIsImNoYW5uZWwiLCJjaGFyaXR5IiwiY2hhc2UiLCJj''@;'; put 'put ''aGF0IiwiY2hlYXAiLCJjaGludGFpIiwiY2hyaXN0bWFzIiwiY2hyb21lIiwiY2h1cmNoIiwiY2lwcmlhbmkiLCJjaXJjbGUiLCJjaXNjbyIsImNpdGFkZWwiLCJjaXRpIiwiY2l0aWMiLCJjaXR5IiwiY2xhaW1zIiwiY2xlYW5pbmciLCJjbGljayIsImNsaW5pYyIsImNsaW5pcXVlIiwiY2xv''@;'; put 'put ''dGhpbmciLCJjbG91ZCIsImNsdWIiLCJjbHVibWVkIiwiY29hY2giLCJjb2RlcyIsImNvZmZlZSIsImNvbGxlZ2UiLCJjb2xvZ25lIiwiY29tbWJhbmsiLCJjb21tdW5pdHkiLCJjb21wYW55IiwiY29tcGFyZSIsImNvbXB1dGVyIiwiY29tc2VjIiwiY29uZG9zIiwiY29uc3RydWN0aW9uIiwi''@;'; put 'put ''Y29uc3VsdGluZyIsImNvbnRhY3QiLCJjb250cmFjdG9ycyIsImNvb2tpbmciLCJjb29sIiwiY29yc2ljYSIsImNvdW50cnkiLCJjb3Vwb24iLCJjb3Vwb25zIiwiY291cnNlcyIsImNwYSIsImNyZWRpdCIsImNyZWRpdGNhcmQiLCJjcmVkaXR1bmlvbiIsImNyaWNrZXQiLCJjcm93biIsImNy''@;'; put 'put ''cyIsImNydWlzZSIsImNydWlzZXMiLCJjdWlzaW5lbGxhIiwiY3ltcnUiLCJjeW91IiwiZGFkIiwiZGFuY2UiLCJkYXRhIiwiZGF0ZSIsImRhdGluZyIsImRhdHN1biIsImRheSIsImRjbGsiLCJkZHMiLCJkZWFsIiwiZGVhbGVyIiwiZGVhbHMiLCJkZWdyZWUiLCJkZWxpdmVyeSIsImRlbGwi''@;'; put 'put ''LCJkZWxvaXR0ZSIsImRlbHRhIiwiZGVtb2NyYXQiLCJkZW50YWwiLCJkZW50aXN0IiwiZGVzaSIsImRlc2lnbiIsImRldiIsImRobCIsImRpYW1vbmRzIiwiZGlldCIsImRpZ2l0YWwiLCJkaXJlY3QiLCJkaXJlY3RvcnkiLCJkaXNjb3VudCIsImRpc2NvdmVyIiwiZGlzaCIsImRpeSIsImRu''@;'; put 'put ''cCIsImRvY3MiLCJkb2N0b3IiLCJkb2ciLCJkb21haW5zIiwiZG90IiwiZG93bmxvYWQiLCJkcml2ZSIsImR0diIsImR1YmFpIiwiZHVubG9wIiwiZHVwb250IiwiZHVyYmFuIiwiZHZhZyIsImR2ciIsImVhcnRoIiwiZWF0IiwiZWNvIiwiZWRla2EiLCJlZHVjYXRpb24iLCJlbWFpbCIsImVt''@;'; put 'put ''ZXJjayIsImVuZXJneSIsImVuZ2luZWVyIiwiZW5naW5lZXJpbmciLCJlbnRlcnByaXNlcyIsImVwc29uIiwiZXF1aXBtZW50IiwiZXJpY3Nzb24iLCJlcm5pIiwiZXNxIiwiZXN0YXRlIiwiZXVyb3Zpc2lvbiIsImV1cyIsImV2ZW50cyIsImV4Y2hhbmdlIiwiZXhwZXJ0IiwiZXhwb3NlZCIs''@;'; put 'put ''ImV4cHJlc3MiLCJleHRyYXNwYWNlIiwiZmFnZSIsImZhaWwiLCJmYWlyd2luZHMiLCJmYWl0aCIsImZhbWlseSIsImZhbiIsImZhbnMiLCJmYXJtIiwiZmFybWVycyIsImZhc2hpb24iLCJmYXN0IiwiZmVkZXgiLCJmZWVkYmFjayIsImZlcnJhcmkiLCJmZXJyZXJvIiwiZmlkZWxpdHkiLCJm''@;'; put 'put ''aWRvIiwiZmlsbSIsImZpbmFsIiwiZmluYW5jZSIsImZpbmFuY2lhbCIsImZpcmUiLCJmaXJlc3RvbmUiLCJmaXJtZGFsZSIsImZpc2giLCJmaXNoaW5nIiwiZml0IiwiZml0bmVzcyIsImZsaWNrciIsImZsaWdodHMiLCJmbGlyIiwiZmxvcmlzdCIsImZsb3dlcnMiLCJmbHkiLCJmb28iLCJm''@;'; put 'put ''b29kIiwiZm9vdGJhbGwiLCJmb3JkIiwiZm9yZXgiLCJmb3JzYWxlIiwiZm9ydW0iLCJmb3VuZGF0aW9uIiwiZm94IiwiZnJlZSIsImZyZXNlbml1cyIsImZybCIsImZyb2dhbnMiLCJmcm9udGllciIsImZ0ciIsImZ1aml0c3UiLCJmdW4iLCJmdW5kIiwiZnVybml0dXJlIiwiZnV0Ym9sIiwi''@;'; put 'put ''ZnlpIiwiZ2FsIiwiZ2FsbGVyeSIsImdhbGxvIiwiZ2FsbHVwIiwiZ2FtZSIsImdhbWVzIiwiZ2FwIiwiZ2FyZGVuIiwiZ2F5IiwiZ2JpeiIsImdkbiIsImdlYSIsImdlbnQiLCJnZW50aW5nIiwiZ2VvcmdlIiwiZ2dlZSIsImdpZnQiLCJnaWZ0cyIsImdpdmVzIiwiZ2l2aW5nIiwiZ2xhc3Mi''@;'; put 'put ''LCJnbGUiLCJnbG9iYWwiLCJnbG9ibyIsImdtYWlsIiwiZ21iaCIsImdtbyIsImdteCIsImdvZGFkZHkiLCJnb2xkIiwiZ29sZHBvaW50IiwiZ29sZiIsImdvbyIsImdvb2R5ZWFyIiwiZ29vZyIsImdvb2dsZSIsImdvcCIsImdvdCIsImdyYWluZ2VyIiwiZ3JhcGhpY3MiLCJncmF0aXMiLCJn''@;'; put 'put ''cmVlbiIsImdyaXBlIiwiZ3JvY2VyeSIsImdyb3VwIiwiZ3VjY2kiLCJndWdlIiwiZ3VpZGUiLCJndWl0YXJzIiwiZ3VydSIsImhhaXIiLCJoYW1idXJnIiwiaGFuZ291dCIsImhhdXMiLCJoYm8iLCJoZGZjIiwiaGRmY2JhbmsiLCJoZWFsdGgiLCJoZWFsdGhjYXJlIiwiaGVscCIsImhlbHNp''@;'; put 'put ''bmtpIiwiaGVyZSIsImhlcm1lcyIsImhpcGhvcCIsImhpc2FtaXRzdSIsImhpdGFjaGkiLCJoaXYiLCJoa3QiLCJob2NrZXkiLCJob2xkaW5ncyIsImhvbGlkYXkiLCJob21lZGVwb3QiLCJob21lZ29vZHMiLCJob21lcyIsImhvbWVzZW5zZSIsImhvbmRhIiwiaG9yc2UiLCJob3NwaXRhbCIs''@;'; put 'put ''Imhvc3QiLCJob3N0aW5nIiwiaG90IiwiaG90ZWxzIiwiaG90bWFpbCIsImhvdXNlIiwiaG93IiwiaHNiYyIsImh1Z2hlcyIsImh5YXR0IiwiaHl1bmRhaSIsImlibSIsImljYmMiLCJpY2UiLCJpY3UiLCJpZWVlIiwiaWZtIiwiaWthbm8iLCJpbWFtYXQiLCJpbWRiIiwiaW1tbyIsImltbW9i''@;'; put 'put ''aWxpZW4iLCJpbmMiLCJpbmR1c3RyaWVzIiwiaW5maW5pdGkiLCJpbmciLCJpbmsiLCJpbnN0aXR1dGUiLCJpbnN1cmFuY2UiLCJpbnN1cmUiLCJpbnRlcm5hdGlvbmFsIiwiaW50dWl0IiwiaW52ZXN0bWVudHMiLCJpcGlyYW5nYSIsImlyaXNoIiwiaXNtYWlsaSIsImlzdCIsImlzdGFuYnVs''@;'; put 'put ''IiwiaXRhdSIsIml0diIsImphZ3VhciIsImphdmEiLCJqY2IiLCJqZWVwIiwiamV0enQiLCJqZXdlbHJ5IiwiamlvIiwiamxsIiwiam1wIiwiam5qIiwiam9idXJnIiwiam90Iiwiam95IiwianBtb3JnYW4iLCJqcHJzIiwianVlZ29zIiwianVuaXBlciIsImthdWZlbiIsImtkZGkiLCJrZXJy''@;'; put 'put ''eWhvdGVscyIsImtlcnJ5bG9naXN0aWNzIiwia2Vycnlwcm9wZXJ0aWVzIiwia2ZoIiwia2lhIiwia2lkcyIsImtpbSIsImtpbmRsZSIsImtpdGNoZW4iLCJraXdpIiwia29lbG4iLCJrb21hdHN1Iiwia29zaGVyIiwia3BtZyIsImtwbiIsImtyZCIsImtyZWQiLCJrdW9rZ3JvdXAiLCJreW90''@;'; put 'put ''byIsImxhY2FpeGEiLCJsYW1ib3JnaGluaSIsImxhbWVyIiwibGFuY2FzdGVyIiwibGFuZCIsImxhbmRyb3ZlciIsImxhbnhlc3MiLCJsYXNhbGxlIiwibGF0IiwibGF0aW5vIiwibGF0cm9iZSIsImxhdyIsImxhd3llciIsImxkcyIsImxlYXNlIiwibGVjbGVyYyIsImxlZnJhayIsImxlZ2Fs''@;'; put 'put ''IiwibGVnbyIsImxleHVzIiwibGdidCIsImxpZGwiLCJsaWZlIiwibGlmZWluc3VyYW5jZSIsImxpZmVzdHlsZSIsImxpZ2h0aW5nIiwibGlrZSIsImxpbGx5IiwibGltaXRlZCIsImxpbW8iLCJsaW5jb2xuIiwibGluayIsImxpcHN5IiwibGl2ZSIsImxpdmluZyIsImxsYyIsImxscCIsImxv''@;'; put 'put ''YW4iLCJsb2FucyIsImxvY2tlciIsImxvY3VzIiwibG9sIiwibG9uZG9uIiwibG90dGUiLCJsb3R0byIsImxvdmUiLCJscGwiLCJscGxmaW5hbmNpYWwiLCJsdGQiLCJsdGRhIiwibHVuZGJlY2siLCJsdXhlIiwibHV4dXJ5IiwibWFkcmlkIiwibWFpZiIsIm1haXNvbiIsIm1ha2V1cCIsIm1h''@;'; put 'put ''biIsIm1hbmFnZW1lbnQiLCJtYW5nbyIsIm1hcCIsIm1hcmtldCIsIm1hcmtldGluZyIsIm1hcmtldHMiLCJtYXJyaW90dCIsIm1hcnNoYWxscyIsIm1hdHRlbCIsIm1iYSIsIm1ja2luc2V5IiwibWVkIiwibWVkaWEiLCJtZWV0IiwibWVsYm91cm5lIiwibWVtZSIsIm1lbW9yaWFsIiwibWVu''@;'; put 'put ''IiwibWVudSIsIm1lcmNrIiwibWVyY2ttc2QiLCJtaWFtaSIsIm1pY3Jvc29mdCIsIm1pbmkiLCJtaW50IiwibWl0IiwibWl0c3ViaXNoaSIsIm1sYiIsIm1scyIsIm1tYSIsIm1vYmlsZSIsIm1vZGEiLCJtb2UiLCJtb2kiLCJtb20iLCJtb25hc2giLCJtb25leSIsIm1vbnN0ZXIiLCJtb3Jt''@;'; put 'put ''b24iLCJtb3J0Z2FnZSIsIm1vc2NvdyIsIm1vdG8iLCJtb3RvcmN5Y2xlcyIsIm1vdiIsIm1vdmllIiwibXNkIiwibXRuIiwibXRyIiwibXVzaWMiLCJuYWIiLCJuYWdveWEiLCJuYXZ5IiwibmJhIiwibmVjIiwibmV0YmFuayIsIm5ldGZsaXgiLCJuZXR3b3JrIiwibmV1c3RhciIsIm5ldyIs''@;'; put 'put ''Im5ld3MiLCJuZXh0IiwibmV4dGRpcmVjdCIsIm5leHVzIiwibmZsIiwibmdvIiwibmhrIiwibmljbyIsIm5pa2UiLCJuaWtvbiIsIm5pbmphIiwibmlzc2FuIiwibmlzc2F5Iiwibm9raWEiLCJub3J0b24iLCJub3ciLCJub3dydXoiLCJub3d0diIsIm5yYSIsIm5ydyIsIm50dCIsIm55YyIs''@;'; put 'put ''Im9iaSIsIm9ic2VydmVyIiwib2ZmaWNlIiwib2tpbmF3YSIsIm9sYXlhbiIsIm9sYXlhbmdyb3VwIiwib2xsbyIsIm9tZWdhIiwib25lIiwib25nIiwib25sIiwib25saW5lIiwib29vIiwib3BlbiIsIm9yYWNsZSIsIm9yYW5nZSIsIm9yZ2FuaWMiLCJvcmlnaW5zIiwib3Nha2EiLCJvdHN1''@;'; put 'put ''a2EiLCJvdHQiLCJvdmgiLCJwYWdlIiwicGFuYXNvbmljIiwicGFyaXMiLCJwYXJzIiwicGFydG5lcnMiLCJwYXJ0cyIsInBhcnR5IiwicGF5IiwicGNjdyIsInBldCIsInBmaXplciIsInBoYXJtYWN5IiwicGhkIiwicGhpbGlwcyIsInBob25lIiwicGhvdG8iLCJwaG90b2dyYXBoeSIsInBo''@;'; put 'put ''b3RvcyIsInBoeXNpbyIsInBpY3MiLCJwaWN0ZXQiLCJwaWN0dXJlcyIsInBpZCIsInBpbiIsInBpbmciLCJwaW5rIiwicGlvbmVlciIsInBpenphIiwicGxhY2UiLCJwbGF5IiwicGxheXN0YXRpb24iLCJwbHVtYmluZyIsInBsdXMiLCJwbmMiLCJwb2hsIiwicG9rZXIiLCJwb2xpdGllIiwi''@;'; put 'put ''cG9ybiIsInByYW1lcmljYSIsInByYXhpIiwicHJlc3MiLCJwcmltZSIsInByb2QiLCJwcm9kdWN0aW9ucyIsInByb2YiLCJwcm9ncmVzc2l2ZSIsInByb21vIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvdGVjdGlvbiIsInBydSIsInBydWRlbnRpYWwiLCJwdWIiLCJwd2MiLCJxcG9u''@;'; put 'put ''IiwicXVlYmVjIiwicXVlc3QiLCJyYWNpbmciLCJyYWRpbyIsInJlYWQiLCJyZWFsZXN0YXRlIiwicmVhbHRvciIsInJlYWx0eSIsInJlY2lwZXMiLCJyZWQiLCJyZWRzdG9uZSIsInJlZHVtYnJlbGxhIiwicmVoYWIiLCJyZWlzZSIsInJlaXNlbiIsInJlaXQiLCJyZWxpYW5jZSIsInJlbiIs''@;'; put 'put ''InJlbnQiLCJyZW50YWxzIiwicmVwYWlyIiwicmVwb3J0IiwicmVwdWJsaWNhbiIsInJlc3QiLCJyZXN0YXVyYW50IiwicmV2aWV3IiwicmV2aWV3cyIsInJleHJvdGgiLCJyaWNoIiwicmljaGFyZGxpIiwicmljb2giLCJyaWwiLCJyaW8iLCJyaXAiLCJyb2NrcyIsInJvZGVvIiwicm9nZXJz''@;'; put 'put ''Iiwicm9vbSIsInJzdnAiLCJydWdieSIsInJ1aHIiLCJydW4iLCJyd2UiLCJyeXVreXUiLCJzYWFybGFuZCIsInNhZmUiLCJzYWZldHkiLCJzYWt1cmEiLCJzYWxlIiwic2Fsb24iLCJzYW1zY2x1YiIsInNhbXN1bmciLCJzYW5kdmlrIiwic2FuZHZpa2Nvcm9tYW50Iiwic2Fub2ZpIiwic2Fw''@;'; put 'put ''Iiwic2FybCIsInNhcyIsInNhdmUiLCJzYXhvIiwic2JpIiwic2JzIiwic2NiIiwic2NoYWVmZmxlciIsInNjaG1pZHQiLCJzY2hvbGFyc2hpcHMiLCJzY2hvb2wiLCJzY2h1bGUiLCJzY2h3YXJ6Iiwic2NpZW5jZSIsInNjb3QiLCJzZWFyY2giLCJzZWF0Iiwic2VjdXJlIiwic2VjdXJpdHki''@;'; put 'put ''LCJzZWVrIiwic2VsZWN0Iiwic2VuZXIiLCJzZXJ2aWNlcyIsInNldmVuIiwic2V3Iiwic2V4Iiwic2V4eSIsInNmciIsInNoYW5ncmlsYSIsInNoYXJwIiwic2hlbGwiLCJzaGlhIiwic2hpa3NoYSIsInNob2VzIiwic2hvcCIsInNob3BwaW5nIiwic2hvdWppIiwic2hvdyIsInNpbGsiLCJz''@;'; put 'put ''aW5hIiwic2luZ2xlcyIsInNpdGUiLCJza2kiLCJza2luIiwic2t5Iiwic2t5cGUiLCJzbGluZyIsInNtYXJ0Iiwic21pbGUiLCJzbmNmIiwic29jY2VyIiwic29jaWFsIiwic29mdGJhbmsiLCJzb2Z0d2FyZSIsInNvaHUiLCJzb2xhciIsInNvbHV0aW9ucyIsInNvbmciLCJzb255Iiwic295''@;'; put 'put ''Iiwic3BhIiwic3BhY2UiLCJzcG9ydCIsInNwb3QiLCJzcmwiLCJzdGFkYSIsInN0YXBsZXMiLCJzdGFyIiwic3RhdGViYW5rIiwic3RhdGVmYXJtIiwic3RjIiwic3RjZ3JvdXAiLCJzdG9ja2hvbG0iLCJzdG9yYWdlIiwic3RvcmUiLCJzdHJlYW0iLCJzdHVkaW8iLCJzdHVkeSIsInN0eWxl''@;'; put 'put ''Iiwic3Vja3MiLCJzdXBwbGllcyIsInN1cHBseSIsInN1cHBvcnQiLCJzdXJmIiwic3VyZ2VyeSIsInN1enVraSIsInN3YXRjaCIsInN3aXNzIiwic3lkbmV5Iiwic3lzdGVtcyIsInRhYiIsInRhaXBlaSIsInRhbGsiLCJ0YW9iYW8iLCJ0YXJnZXQiLCJ0YXRhbW90b3JzIiwidGF0YXIiLCJ0''@;'; put 'put ''YXR0b28iLCJ0YXgiLCJ0YXhpIiwidGNpIiwidGRrIiwidGVhbSIsInRlY2giLCJ0ZWNobm9sb2d5IiwidGVtYXNlayIsInRlbm5pcyIsInRldmEiLCJ0aGQiLCJ0aGVhdGVyIiwidGhlYXRyZSIsInRpYWEiLCJ0aWNrZXRzIiwidGllbmRhIiwidGlwcyIsInRpcmVzIiwidGlyb2wiLCJ0am1h''@;'; put 'put ''eHgiLCJ0angiLCJ0a21heHgiLCJ0bWFsbCIsInRvZGF5IiwidG9reW8iLCJ0b29scyIsInRvcCIsInRvcmF5IiwidG9zaGliYSIsInRvdGFsIiwidG91cnMiLCJ0b3duIiwidG95b3RhIiwidG95cyIsInRyYWRlIiwidHJhZGluZyIsInRyYWluaW5nIiwidHJhdmVsIiwidHJhdmVsZXJzIiwi''@;'; put 'put ''dHJhdmVsZXJzaW5zdXJhbmNlIiwidHJ1c3QiLCJ0cnYiLCJ0dWJlIiwidHVpIiwidHVuZXMiLCJ0dXNodSIsInR2cyIsInViYW5rIiwidWJzIiwidW5pY29tIiwidW5pdmVyc2l0eSIsInVubyIsInVvbCIsInVwcyIsInZhY2F0aW9ucyIsInZhbmEiLCJ2YW5ndWFyZCIsInZlZ2FzIiwidmVu''@;'; put 'put ''dHVyZXMiLCJ2ZXJpc2lnbiIsInZlcnNpY2hlcnVuZyIsInZldCIsInZpYWplcyIsInZpZGVvIiwidmlnIiwidmlraW5nIiwidmlsbGFzIiwidmluIiwidmlwIiwidmlyZ2luIiwidmlzYSIsInZpc2lvbiIsInZpdmEiLCJ2aXZvIiwidmxhYW5kZXJlbiIsInZvZGthIiwidm9sdm8iLCJ2b3Rl''@;'; put 'put ''Iiwidm90aW5nIiwidm90byIsInZveWFnZSIsIndhbGVzIiwid2FsbWFydCIsIndhbHRlciIsIndhbmciLCJ3YW5nZ291Iiwid2F0Y2giLCJ3YXRjaGVzIiwid2VhdGhlciIsIndlYXRoZXJjaGFubmVsIiwid2ViY2FtIiwid2ViZXIiLCJ3ZWJzaXRlIiwid2VkIiwid2VkZGluZyIsIndlaWJv''@;'; put 'put ''Iiwid2VpciIsIndob3N3aG8iLCJ3aWVuIiwid2lraSIsIndpbGxpYW1oaWxsIiwid2luIiwid2luZG93cyIsIndpbmUiLCJ3aW5uZXJzIiwid21lIiwid29sdGVyc2tsdXdlciIsIndvb2RzaWRlIiwid29yayIsIndvcmtzIiwid29ybGQiLCJ3b3ciLCJ3dGMiLCJ3dGYiLCJ4Ym94IiwieGVy''@;'; put 'put ''b3giLCJ4aWh1YW4iLCJ4aW4iLCJcdTA5MTVcdTA5NDlcdTA5MmUiLCJcdTMwYmJcdTMwZmNcdTMwZWIiLCJcdTRmNWJcdTVjNzEiLCJcdTYxNDhcdTU1ODQiLCJcdTk2YzZcdTU2ZTIiLCJcdTU3MjhcdTdlYmYiLCJcdTcwYjlcdTc3MGIiLCJcdTBlMDRcdTBlMmRcdTBlMjEiLCJcdTUxNmJc''@;'; put 'put ''dTUzNjYiLCJcdTA2NDVcdTA2NDhcdTA2NDJcdTA2MzkiLCJcdTUxNmNcdTc2Y2EiLCJcdTUxNmNcdTUzZjgiLCJcdTk5OTlcdTY4M2NcdTkxY2NcdTYyYzkiLCJcdTdmNTFcdTdhZDkiLCJcdTc5ZmJcdTUyYTgiLCJcdTYyMTFcdTcyMzFcdTRmNjAiLCJcdTA0M2NcdTA0M2VcdTA0NDFcdTA0''@;'; put 'put ''M2FcdTA0MzJcdTA0MzAiLCJcdTA0M2FcdTA0MzBcdTA0NDJcdTA0M2VcdTA0M2JcdTA0MzhcdTA0M2EiLCJcdTA0M2VcdTA0M2RcdTA0M2JcdTA0MzBcdTA0MzlcdTA0M2QiLCJcdTA0NDFcdTA0MzBcdTA0MzlcdTA0NDIiLCJcdTgwNTRcdTkwMWEiLCJcdTA1ZTdcdTA1ZDVcdTA1ZGQiLCJc''@;'; put 'put ''dTY1ZjZcdTVjMWEiLCJcdTVmYWVcdTUzNWEiLCJcdTZkZTFcdTlhNmNcdTk1MjEiLCJcdTMwZDVcdTMwYTFcdTMwYzNcdTMwYjdcdTMwZTdcdTMwZjMiLCJcdTA0M2VcdTA0NDBcdTA0MzMiLCJcdTA5MjhcdTA5NDdcdTA5MWYiLCJcdTMwYjlcdTMwYzhcdTMwYTIiLCJcdTMwYTJcdTMwZGVc''@;'; put 'put ''dTMwYmVcdTMwZjMiLCJcdWMwYmNcdWMxMzEiLCJcdTU1NDZcdTY4MDciLCJcdTU1NDZcdTVlOTciLCJcdTU1NDZcdTU3Y2UiLCJcdTA0MzRcdTA0MzVcdTA0NDJcdTA0MzgiLCJcdTMwZGRcdTMwYTRcdTMwZjNcdTMwYzgiLCJcdTY1YjBcdTk1ZmIiLCJcdTViYjZcdTk2ZmIiLCJcdTA2NDNc''@;'; put 'put ''dTA2NDhcdTA2NDUiLCJcdTRlMmRcdTY1ODdcdTdmNTEiLCJcdTRlMmRcdTRmZTEiLCJcdTVhMzFcdTRlNTAiLCJcdThjMzdcdTZiNGMiLCJcdTk2ZmJcdThhMGFcdTc2YzhcdTc5ZDEiLCJcdThkMmRcdTcyNjkiLCJcdTMwYWZcdTMwZTlcdTMwYTZcdTMwYzkiLCJcdTkwMWFcdThjYTkiLCJc''@;'; put 'put ''dTdmNTFcdTVlOTciLCJcdTA5MzhcdTA5MDJcdTA5MTdcdTA5MjBcdTA5MjgiLCJcdTk5MTBcdTUzODUiLCJcdTdmNTFcdTdlZGMiLCJcdTA0M2FcdTA0M2VcdTA0M2MiLCJcdTRlOWFcdTlhNmNcdTkwMGEiLCJcdTk4ZGZcdTU0YzEiLCJcdTk4ZGVcdTUyMjlcdTZkNjYiLCJcdTYyNGJcdTY3''@;'; put 'put ''M2EiLCJcdTA2MjdcdTA2MzFcdTA2MjdcdTA2NDVcdTA2NDNcdTA2NDgiLCJcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDRcdTA2NGFcdTA2MjdcdTA2NDYiLCJcdTA2MjhcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2MjdcdTA2MjhcdTA2NDhcdTA2MzhcdTA2MjhcdTA2NGEiLCJcdTA2''@;'; put 'put ''NDNcdTA2MjdcdTA2MmJcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDMiLCJcdTA2NDdcdTA2NDVcdTA2MzFcdTA2MjdcdTA2NDciLCJcdWIyZjdcdWNlZjQiLCJcdTY1M2ZcdTVlOWMiLCJcdTA2MzRcdTA2MjhcdTA2NDNcdTA2MjkiLCJcdTA2MjhcdTA2NGFcdTA2MmFcdTA2NDMiLCJcdTA2Mzlc''@;'; put 'put ''dTA2MzFcdTA2MjgiLCJcdTY3M2FcdTY3ODQiLCJcdTdlYzRcdTdlYzdcdTY3M2FcdTY3ODQiLCJcdTUwNjVcdTVlYjciLCJcdTYyZGJcdTgwNTgiLCJcdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTU5MjdcdTYyZmYiLCJcdTMwN2ZcdTMwOTNcdTMwNmEiLCJcdTMwYjBcdTMwZmNcdTMwYjBcdTMw''@;'; put 'put ''ZWIiLCJcdTRlMTZcdTc1NGMiLCJcdTY2ZjhcdTdjNGQiLCJcdTdmNTFcdTU3NDAiLCJcdWIyZjdcdWIxMzciLCJcdTMwYjNcdTMwZTAiLCJcdTU5MjlcdTRlM2JcdTY1NTkiLCJcdTZlMzhcdTYyMGYiLCJ2ZXJtXHhmNmdlbnNiZXJhdGVyIiwidmVybVx4ZjZnZW5zYmVyYXR1bmciLCJcdTRm''@;'; put 'put ''MDFcdTRlMWEiLCJcdTRmZTFcdTYwNmYiLCJcdTU2MDlcdTkxY2NcdTU5MjdcdTkxNTJcdTVlOTciLCJcdTU2MDlcdTkxY2MiLCJcdTVlN2ZcdTRlMWMiLCJcdTY1M2ZcdTUyYTEiLCJ4eXoiLCJ5YWNodHMiLCJ5YWhvbyIsInlhbWF4dW4iLCJ5YW5kZXgiLCJ5b2RvYmFzaGkiLCJ5b2dhIiwi''@;'; put 'put ''eW9rb2hhbWEiLCJ5b3UiLCJ5b3V0dWJlIiwieXVuIiwiemFwcG9zIiwiemFyYSIsInplcm8iLCJ6aXAiLCJ6b25lIiwienVlcmljaCIsImNvLmtyZCIsImVkdS5rcmQiLCJhcnQucGwiLCJnbGl3aWNlLnBsIiwia3Jha293LnBsIiwicG96bmFuLnBsIiwid3JvYy5wbCIsInpha29wYW5lLnBs''@;'; put 'put ''IiwibGliLmRlLnVzIiwiMTJjaGFycy5kZXYiLCIxMmNoYXJzLml0IiwiMTJjaGFycy5wcm8iLCJjYy51YSIsImluZi51YSIsImx0ZC51YSIsIjYxMS50byIsImEyaG9zdGVkLmNvbSIsImNwc2VydmVyLmNvbSIsImFhYS52b2RrYSIsIioub24tYWNvcm4uaW8iLCJhY3RpdmV0cmFpbC5iaXoi''@;'; put 'put ''LCJhZGFwdGFibGUuYXBwIiwiYWRvYmVhZW1jbG91ZC5jb20iLCIqLmRldi5hZG9iZWFlbWNsb3VkLmNvbSIsImFlbS5saXZlIiwiaGx4LmxpdmUiLCJhZG9iZWFlbWNsb3VkLm5ldCIsImFlbS5wYWdlIiwiaGx4LnBhZ2UiLCJobHgzLnBhZ2UiLCJhZG9iZWlvLXN0YXRpYy5uZXQiLCJhZG9i''@;'; put 'put ''ZWlvcnVudGltZS5uZXQiLCJhZnJpY2EuY29tIiwiYmVlcC5wbCIsImFpcmtpdGFwcHMuY29tIiwiYWlya2l0YXBwcy1hdS5jb20iLCJhaXJraXRhcHBzLmV1IiwiYWl2ZW5jbG91ZC5jb20iLCJha2FkbnMubmV0IiwiYWthbWFpLm5ldCIsImFrYW1haS1zdGFnaW5nLm5ldCIsImFrYW1haWVk''@;'; put 'put ''Z2UubmV0IiwiYWthbWFpZWRnZS1zdGFnaW5nLm5ldCIsImFrYW1haWhkLm5ldCIsImFrYW1haWhkLXN0YWdpbmcubmV0IiwiYWthbWFpb3JpZ2luLm5ldCIsImFrYW1haW9yaWdpbi1zdGFnaW5nLm5ldCIsImFrYW1haXplZC5uZXQiLCJha2FtYWl6ZWQtc3RhZ2luZy5uZXQiLCJlZGdla2V5''@;'; put 'put ''Lm5ldCIsImVkZ2VrZXktc3RhZ2luZy5uZXQiLCJlZGdlc3VpdGUubmV0IiwiZWRnZXN1aXRlLXN0YWdpbmcubmV0IiwiYmFyc3kuY2EiLCIqLmNvbXB1dGUuZXN0YXRlIiwiKi5hbGNlcy5uZXR3b3JrIiwia2Fzc2VydmVyLmNvbSIsImFsdGVydmlzdGEub3JnIiwiYWx3YXlzZGF0YS5uZXQi''@;'; put 'put ''LCJteWFtYXplLm5ldCIsImV4ZWN1dGUtYXBpLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJleGVjdXRlLWFwaS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1lYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRo''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhl''@;'; put 'put ''YXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1zb3V0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0zLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJleGVjdXRlLWFwaS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''eGVjdXRlLWFwaS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0''@;'; put 'put ''ZS1hcGkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImNsb3VkZnJvbnQubmV0IiwiYXV0aC5hZi1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFw''@;'; put 'put ''LW5vcnRoZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTMuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoLTIu''@;'; put 'put ''YW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTMuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC00LmFtYXpv''@;'; put 'put ''bmNvZ25pdG8uY29tIiwiYXV0aC5jYS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNhLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTIuYW1hem9uY29nbml0by5jb20iLCJh''@;'; put 'put ''dXRoLmV1LW5vcnRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXNvdXRoLTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0yLmFtYXpvbmNv''@;'; put 'put ''Z25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTMuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmlsLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgubWUtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5z''@;'; put 'put ''YS1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1lYXN0LTIuYW1hem9u''@;'; put 'put ''Y29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29t''@;'; put 'put ''IiwiYXV0aC1maXBzLnVzLXdlc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tLmNuIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20iLCIqLmNvbXB1dGUtMS5hbWF6b25hd3MuY29tIiwidXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9k''@;'; put 'put ''LmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcm5vdGVib29rcy1wcm9kLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcmFwcHVpLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bS5jbiIsImVtcm5vdGVib29rcy1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJzdHVkaW8tcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJv''@;'; put 'put ''ZC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8t''@;'; put 'put ''cHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5v''@;'; put 'put ''cnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''bm90ZWJvb2tzLXByb2QuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhl''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''YXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC00''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9v''@;'; put 'put ''a3MtcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1yc3R1ZGlvLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1jZW50cmFsLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1ub3J0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9k''@;'; put 'put ''LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlv''@;'; put 'put ''LXByb2QuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1''@;'; put 'put ''aS1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3Rl''@;'; put 'put ''Ym9va3MtcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiZW1yc3R1ZGlvLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5zYS1lYXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMt''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVz''@;'; put 'put ''LWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJh''@;'; put 'put ''cHB1aS1wcm9kLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCIqLmNuLW5vcnRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tLmNuIiwiKi5jbi1ub3J0aHdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmFmLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiKi5hcC1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiKi5hcC1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGgtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1z''@;'; put 'put ''b3V0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC00LmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouY2EtY2VudHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouY2Etd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtY2VudHJhbC0x''@;'; put 'put ''LmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtY2VudHJhbC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1zb3V0aC0yLmFpcmZsb3cuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsIiouZXUtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtd2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtd2VzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouaWwtY2VudHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioubWUtY2Vu''@;'; put 'put ''dHJhbC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioubWUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnNhLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVzLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVzLWVhc3QtMi5haXJmbG93LmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCIqLnVzLXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLnVzLXdlc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWRlcHJlY2F0ZWQuY24tbm9y''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmR1YWxzdGFjay5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNj''@;'; put 'put ''ZXNzcG9pbnQuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLW9iamVjdC1sYW1iZGEuY24tbm9ydGh3''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''d2Vic2l0ZS5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9p''@;'; put 'put ''bnQuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9p''@;'; put 'put ''bnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxz''@;'; put 'put ''dGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAt''@;'; put 'put ''bm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9i''@;'; put 'put ''amVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAt''@;'; put 'put ''c291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoLTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNv''@;'; put 'put ''dXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMu''@;'; put 'put ''ZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3Qt''@;'; put 'put ''My5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFj''@;'; put 'put ''ay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTQuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291''@;'; put 'put ''dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3Qt''@;'; put 'put ''NS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5jYS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2EtY2Vu''@;'; put 'put ''dHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1''@;'; put 'put ''YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50''@;'; put 'put ''LmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNz''@;'; put 'put ''cG9pbnQuZHVhbHN0YWNrLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vi''@;'; put 'put ''c2l0ZS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5k''@;'; put 'put ''dWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1kZXByZWNhdGVkLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1h''@;'; put 'put ''Y2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdl''@;'; put 'put ''YnNpdGUuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFj''@;'; put 'put ''ay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1hY2Nlc3Nwb2ludC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50Lm1lLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu''@;'; put 'put ''ZHVhbHN0YWNrLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5t''@;'; put 'put ''ZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hbWF6b25hd3MuY29tIiwiczMtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''ZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1leHRlcm5hbC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwibXJhcC5hY2Nlc3Nwb2ludC5zMy1nbG9iYWwuYW1hem9uYXdzLmNvbSIsInMzLW1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXNh''@;'; put 'put ''LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy11cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1ldS13ZXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLXdlYnNpdGUtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''d2Vic2l0ZS11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0''@;'; put 'put ''YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZWFzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFj''@;'; put 'put ''ay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMu''@;'; put 'put ''dXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWVhc3QtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi1lYXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1nb3Yt''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZ292LXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWdvdi13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5k''@;'; put 'put ''dWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtd2VzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1vYmplY3QtbGFtYmRhLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdlc3Qt''@;'; put 'put ''Mi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtd2VzdC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1ub3J0aGVhc3QtMi5zYWdlbWFr''@;'; put 'put ''ZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsImxh''@;'; put 'put ''YmVsaW5nLmV1LWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0yLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJsYWJlbGluZy51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29r''@;'; put 'put ''LmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0''@;'; put 'put ''LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTQuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmNhLWNlbnRyYWwtMS5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy5jYS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdz''@;'; put 'put ''Iiwibm90ZWJvb2suZXUtY2VudHJhbC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1ub3J0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0''@;'; put 'put ''LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5pbC1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLm1lLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwi''@;'; put 'put ''bm90ZWJvb2subWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suc2EtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1lYXN0LTIu''@;'; put 'put ''c2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi13ZXN0LTEuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3Mi''@;'; put 'put ''LCJub3RlYm9vay1maXBzLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwibm90ZWJvb2suY24tbm9ydGh3ZXN0LTEuc2FnZW1ha2VyLmNvbS5jbiIsInN0dWRpby5hZi1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8u''@;'; put 'put ''YXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGgtMS5zYWdlbWFr''@;'; put 'put ''ZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlv''@;'; put 'put ''LmV1LWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwi''@;'; put 'put ''c3R1ZGlvLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXdlc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLm1lLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLm1lLXNvdXRoLTEuc2FnZW1ha2Vy''@;'; put 'put ''LmF3cyIsInN0dWRpby5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3YtZWFz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLWZpcHMudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwi''@;'; put 'put ''c3R1ZGlvLmNuLW5vcnRoLTEuc2FnZW1ha2VyLmNvbS5jbiIsInN0dWRpby5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwiKi5leHBlcmltZW50cy5zYWdlbWFrZXIuYXdzIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGlj''@;'; put 'put ''cy1nYXRld2F5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGhlYXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1n''@;'; put 'put ''YXRld2F5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhbXBsaWZ5YXBwLmNvbSIsIiouYXdzYXBwcnVubmVyLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwidmZzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtZWFzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2''@;'; put 'put ''aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNs''@;'; put 'put ''b3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRo''@;'; put 'put ''ZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndl''@;'; put 'put ''YnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMu''@;'; put 'put ''YXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmNh''@;'; put 'put ''LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1''@;'; put 'put ''LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''d2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3''@;'; put 'put ''LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuaWwtY2VudHJh''@;'; put 'put ''bC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRz''@;'; put 'put ''LmNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNs''@;'; put 'put ''b3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwidmZzLmNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiYXdzYXBwcy5jb20iLCJjbi1ub3J0aC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJjbi1ub3J0aHdlc3QtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiZWxhc3RpY2JlYW5zdGFsay5jb20i''@;'; put 'put ''LCJhZi1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0zLmVsYXN0''@;'; put 'put ''aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIs''@;'; put 'put ''ImNhLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LW5vcnRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0xLmVsYXN0aWNiZWFuc3Rh''@;'; put 'put ''bGsuY29tIiwiZXUtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiaWwtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwibWUtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInNhLWVhc3QtMS5lbGFzdGljYmVh''@;'; put 'put ''bnN0YWxrLmNvbSIsInVzLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3Ytd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0xLmVs''@;'; put 'put ''YXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiKi5lbGIuYW1hem9uYXdzLmNvbS5jbiIsIiouZWxiLmFtYXpvbmF3cy5jb20iLCJhd3NnbG9iYWxhY2NlbGVyYXRvci5jb20iLCIqLnByaXZhdGUucmVwb3N0LmF3cyIsImVlcm8ub25saW5lIiwi''@;'; put 'put ''ZWVyby1zdGFnZS5vbmxpbmUiLCJhcGlnZWUuaW8iLCJwYW5lbC5kZXYiLCJzaWlpdGVzLmNvbSIsImFwcHNwYWNlaG9zdGVkLmNvbSIsImFwcHNwYWNldXNlcmNvbnRlbnQuY29tIiwiYXBwdWRvLm5ldCIsIm9uLWFwdGlibGUuY29tIiwiZjUuc2kiLCJhcnZhbmVkZ2UuaXIiLCJ1c2VyLmFz''@;'; put 'put ''ZWluZXQubmUuanAiLCJndi52YyIsImQuZ3YudmMiLCJ1c2VyLnBhcnR5LmV1cyIsInBpbWllbnRhLm9yZyIsInBvaXZyb24ub3JnIiwicG90YWdlci5vcmciLCJzd2VldHBlcHBlci5vcmciLCJteWFzdXN0b3IuY29tIiwiY2RuLnByb2QuYXRsYXNzaWFuLWRldi5uZXQiLCJ0cmFuc2xhdGVk''@;'; put 'put ''LnBhZ2UiLCJteWZyaXR6LmxpbmsiLCJteWZyaXR6Lm5ldCIsIm9uYXZzdGFjay5uZXQiLCIqLmF3ZGV2LmNhIiwiKi5hZHZpc29yLndzIiwiZWNvbW1lcmNlLXNob3AucGwiLCJiLWRhdGEuaW8iLCJiYWxlbmEtZGV2aWNlcy5jb20iLCJiYXNlLmVjIiwib2ZmaWNpYWwuZWMiLCJidXlzaG9w''@;'; put 'put ''LmpwIiwiZmFzaGlvbnN0b3JlLmpwIiwiaGFuZGNyYWZ0ZWQuanAiLCJrYXdhaWlzaG9wLmpwIiwic3VwZXJzYWxlLmpwIiwidGhlc2hvcC5qcCIsInNob3BzZWxlY3QubmV0IiwiYmFzZS5zaG9wIiwiYmVhZ2xlYm9hcmQuaW8iLCIqLmJlZ2V0LmFwcCIsInBhZ2VzLmdheSIsImJuci5sYSIs''@;'; put 'put ''ImJpdGJ1Y2tldC5pbyIsImJsYWNrYmF1ZGNkbi5uZXQiLCJvZi5qZSIsImJsdWViaXRlLmlvIiwiYm9vbWxhLm5ldCIsImJvdXRpci5jb20iLCJib3hmdXNlLmlvIiwic3F1YXJlNy5jaCIsImJwbGFjZWQuY29tIiwiYnBsYWNlZC5kZSIsInNxdWFyZTcuZGUiLCJicGxhY2VkLm5ldCIsInNx''@;'; put 'put ''dWFyZTcubmV0IiwiKi5zLmJyYXZlLmlvIiwic2hvcC5icmVuZGx5LmhyIiwic2hvcC5icmVuZGx5LnJzIiwiYnJvd3NlcnNhZmV0eW1hcmsuaW8iLCJyYWRpby5hbSIsInJhZGlvLmZtIiwidWswLmJpZ3YuaW8iLCJkaC5ieXRlbWFyay5jby51ayIsInZtLmJ5dGVtYXJrLmNvLnVrIiwiY2Fm''@;'; put 'put ''anMuY29tIiwiY2FudmEtYXBwcy5jbiIsIioubXkuY2FudmFzaXRlLmNuIiwiY2FudmEtYXBwcy5jb20iLCIqLm15LmNhbnZhLnNpdGUiLCJkcnIuYWMiLCJ1d3UuYWkiLCJjYXJyZC5jbyIsImNyZC5jbyIsImp1Lm1wIiwiYXBpLmdvdi51ayIsImNkbjc3LXN0b3JhZ2UuY29tIiwicnNjLmNv''@;'; put 'put ''bnRlbnRwcm94eTkuY3oiLCJyLmNkbjc3Lm5ldCIsImNkbjc3LXNzbC5uZXQiLCJjLmNkbjc3Lm9yZyIsInJzYy5jZG43Ny5vcmciLCJzc2wub3JpZ2luLmNkbjc3LXNlY3VyZS5vcmciLCJ6YS5ieiIsImJyLmNvbSIsImNuLmNvbSIsImRlLmNvbSIsImV1LmNvbSIsImpwbi5jb20iLCJtZXgu''@;'; put 'put ''Y29tIiwicnUuY29tIiwic2EuY29tIiwidWsuY29tIiwidXMuY29tIiwiemEuY29tIiwiY29tLmRlIiwiZ2IubmV0IiwiaHUubmV0IiwianAubmV0Iiwic2UubmV0IiwidWsubmV0IiwiYWUub3JnIiwiY29tLnNlIiwiY3gudWEiLCJkaXNjb3Vyc2UuZ3JvdXAiLCJkaXNjb3Vyc2UudGVhbSIs''@;'; put 'put ''ImNsZXJrLmFwcCIsImNsZXJrc3RhZ2UuYXBwIiwiKi5sY2wuZGV2IiwiKi5sY2xzdGFnZS5kZXYiLCIqLnN0Zy5kZXYiLCIqLnN0Z3N0YWdlLmRldiIsImNsZXZlcmFwcHMuY2MiLCIqLnNlcnZpY2VzLmNsZXZlci1jbG91ZC5jb20iLCJjbGV2ZXJhcHBzLmlvIiwiY2xldmVyYXBwcy50ZWNo''@;'; put 'put ''IiwiY2xpY2tyaXNpbmcubmV0IiwiY2xvdWRucy5hc2lhIiwiY2xvdWRucy5iZSIsImNsb3VkLWlwLmJpeiIsImNsb3VkbnMuYml6IiwiY2xvdWRucy5jYyIsImNsb3VkbnMuY2giLCJjbG91ZG5zLmNsIiwiY2xvdWRucy5jbHViIiwiZG5zYWJyLmNvbSIsImlwLWRkbnMuY29tIiwiY2xvdWRu''@;'; put 'put ''cy5jeCIsImNsb3VkbnMuZXUiLCJjbG91ZG5zLmluIiwiY2xvdWRucy5pbmZvIiwiZGRucy1pcC5uZXQiLCJkbnMtY2xvdWQubmV0IiwiZG5zLWR5bmFtaWMubmV0IiwiY2xvdWRucy5ueiIsImNsb3VkbnMub3JnIiwiaXAtZHluYW1pYy5vcmciLCJjbG91ZG5zLnBoIiwiY2xvdWRucy5wcm8i''@;'; put 'put ''LCJjbG91ZG5zLnB3IiwiY2xvdWRucy51cyIsImM2Ni5tZSIsImNsb3VkNjYud3MiLCJjbG91ZDY2LnpvbmUiLCJqZGV2Y2xvdWQuY29tIiwid3BkZXZjbG91ZC5jb20iLCJjbG91ZGFjY2Vzcy5ob3N0IiwiZnJlZXNpdGUuaG9zdCIsImNsb3VkYWNjZXNzLm5ldCIsIiouY2xvdWRlcmEuc2l0''@;'; put 'put ''ZSIsImNmLWlwZnMuY29tIiwiY2xvdWRmbGFyZS1pcGZzLmNvbSIsInRyeWNsb3VkZmxhcmUuY29tIiwicGFnZXMuZGV2IiwicjIuZGV2Iiwid29ya2Vycy5kZXYiLCJjbG91ZGZsYXJlLm5ldCIsImNkbi5jbG91ZGZsYXJlLm5ldCIsImNkbi5jbG91ZGZsYXJlYW55Y2FzdC5uZXQiLCJjZG4u''@;'; put 'put ''Y2xvdWRmbGFyZWNuLm5ldCIsImNkbi5jbG91ZGZsYXJlZ2xvYmFsLm5ldCIsImN1c3QuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMubHBnLmNsb3Vkc2NhbGUuY2giLCJvYmplY3RzLnJtYS5jbG91ZHNjYWxlLmNoIiwid25leHQuYXBwIiwiY25weS5nZG4iLCIqLm90YXAuY28iLCJjby5jYSIs''@;'; put 'put ''ImNvLmNvbSIsImNvZGViZXJnLnBhZ2UiLCJjc2IuYXBwIiwicHJldmlldy5jc2IuYXBwIiwiY28ubmwiLCJjby5ubyIsIndlYmhvc3RpbmcuYmUiLCJob3N0aW5nLWNsdXN0ZXIubmwiLCJjdGZjbG91ZC5uZXQiLCJjb252ZXguc2l0ZSIsImFjLnJ1IiwiZWR1LnJ1IiwiZ292LnJ1IiwiaW50''@;'; put 'put ''LnJ1IiwibWlsLnJ1IiwidGVzdC5ydSIsImR5bi5jb3NpZG5zLmRlIiwiZG5zdXBkYXRlci5kZSIsImR5bmFtaXNjaGVzLWRucy5kZSIsImludGVybmV0LWRucy5kZSIsImwtby1nLWktbi5kZSIsImR5bmFtaWMtZG5zLmluZm8iLCJmZXN0ZS1pcC5uZXQiLCJrbngtc2VydmVyLm5ldCIsInN0''@;'; put 'put ''YXRpYy1hY2Nlc3MubmV0IiwiY3JhZnQubWUiLCJyZWFsbS5jeiIsIm9uLmNyaXNwLmVtYWlsIiwiKi5jcnlwdG9ub21pYy5uZXQiLCJjdXJ2LmRldiIsImNmb2xrcy5wbCIsImN5b24ubGluayIsImN5b24uc2l0ZSIsInBsYXRmb3JtMC5hcHAiLCJmbndrLnNpdGUiLCJmb2xpb25ldHdvcmsu''@;'; put 'put ''c2l0ZSIsImJpei5kayIsImNvLmRrIiwiZmlybS5kayIsInJlZy5kayIsInN0b3JlLmRrIiwiZHluZG5zLmRhcHBub2RlLmlvIiwiYnVpbHR3aXRoZGFyay5jb20iLCJkYXJrbGFuZy5pbyIsImRlbW8uZGF0YWRldGVjdC5jb20iLCJpbnN0YW5jZS5kYXRhZGV0ZWN0LmNvbSIsImVkZ2VzdGFj''@;'; put 'put ''ay5tZSIsImRhdHRvbG9jYWwuY29tIiwiZGF0dG9yZWxheS5jb20iLCJkYXR0b3dlYi5jb20iLCJteWRhdHRvLmNvbSIsImRhdHRvbG9jYWwubmV0IiwibXlkYXR0by5uZXQiLCJkZG5zcy5kZSIsImR5bi5kZG5zcy5kZSIsImR5bmRucy5kZG5zcy5kZSIsImR5bi1pcDI0LmRlIiwiZHluZG5z''@;'; put 'put ''MS5kZSIsImhvbWUtd2Vic2VydmVyLmRlIiwiZHluLmhvbWUtd2Vic2VydmVyLmRlIiwibXlob21lLXNlcnZlci5kZSIsImRkbnNzLm9yZyIsImRlYmlhbi5uZXQiLCJkZWZpbmltYS5pbyIsImRlZmluaW1hLm5ldCIsImRlbm8uZGV2IiwiZGVuby1zdGFnaW5nLmRldiIsImRlZHluLmlvIiwi''@;'; put 'put ''ZGV0YS5hcHAiLCJkZXRhLmRldiIsImRmaXJtYS5wbCIsImRrb250by5wbCIsInlvdTIucGwiLCJvbmRpZ2l0YWxvY2Vhbi5hcHAiLCIqLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20iLCJ1cy5rZyIsInJzcy5teS5pZCIsImRpaGVyLnNvbHV0aW9ucyIsImRpc2NvcmRzYXlzLmNvbSIsImRpc2Nv''@;'; put 'put ''cmRzZXouY29tIiwiam96aS5iaXoiLCJkbnNob21lLmRlIiwib25saW5lLnRoIiwic2hvcC50aCIsImRyYXlkZG5zLmNvbSIsInNob3BhcmVuYS5wbCIsImRyZWFtaG9zdGVycy5jb20iLCJkdXJ1bWlzLmNvbSIsIm15ZHJvYm8uY29tIiwiZHJ1ZC5pbyIsImRydWQudXMiLCJkdWNrZG5zLm9y''@;'; put 'put ''ZyIsImR5LmZpIiwidHVuay5vcmciLCJkeW5kbnMuYml6IiwiZm9yLWJldHRlci5iaXoiLCJmb3ItbW9yZS5iaXoiLCJmb3Itc29tZS5iaXoiLCJmb3ItdGhlLmJpeiIsInNlbGZpcC5iaXoiLCJ3ZWJob3AuYml6IiwiZnRwYWNjZXNzLmNjIiwiZ2FtZS1zZXJ2ZXIuY2MiLCJteXBob3Rvcy5j''@;'; put 'put ''YyIsInNjcmFwcGluZy5jYyIsImJsb2dkbnMuY29tIiwiY2VjaGlyZS5jb20iLCJkbnNhbGlhcy5jb20iLCJkbnNkb2pvLmNvbSIsImRvZXNudGV4aXN0LmNvbSIsImRvbnRleGlzdC5jb20iLCJkb29tZG5zLmNvbSIsImR5bi1vLXNhdXIuY29tIiwiZHluYWxpYXMuY29tIiwiZHluZG5zLWF0''@;'; put 'put ''LWhvbWUuY29tIiwiZHluZG5zLWF0LXdvcmsuY29tIiwiZHluZG5zLWJsb2cuY29tIiwiZHluZG5zLWZyZWUuY29tIiwiZHluZG5zLWhvbWUuY29tIiwiZHluZG5zLWlwLmNvbSIsImR5bmRucy1tYWlsLmNvbSIsImR5bmRucy1vZmZpY2UuY29tIiwiZHluZG5zLXBpY3MuY29tIiwiZHluZG5z''@;'; put 'put ''LXJlbW90ZS5jb20iLCJkeW5kbnMtc2VydmVyLmNvbSIsImR5bmRucy13ZWIuY29tIiwiZHluZG5zLXdpa2kuY29tIiwiZHluZG5zLXdvcmsuY29tIiwiZXN0LWEtbGEtbWFpc29uLmNvbSIsImVzdC1hLWxhLW1hc2lvbi5jb20iLCJlc3QtbGUtcGF0cm9uLmNvbSIsImVzdC1tb24tYmxvZ3Vl''@;'; put 'put ''dXIuY29tIiwiZnJvbS1hay5jb20iLCJmcm9tLWFsLmNvbSIsImZyb20tYXIuY29tIiwiZnJvbS1jYS5jb20iLCJmcm9tLWN0LmNvbSIsImZyb20tZGMuY29tIiwiZnJvbS1kZS5jb20iLCJmcm9tLWZsLmNvbSIsImZyb20tZ2EuY29tIiwiZnJvbS1oaS5jb20iLCJmcm9tLWlhLmNvbSIsImZy''@;'; put 'put ''b20taWQuY29tIiwiZnJvbS1pbC5jb20iLCJmcm9tLWluLmNvbSIsImZyb20ta3MuY29tIiwiZnJvbS1reS5jb20iLCJmcm9tLW1hLmNvbSIsImZyb20tbWQuY29tIiwiZnJvbS1taS5jb20iLCJmcm9tLW1uLmNvbSIsImZyb20tbW8uY29tIiwiZnJvbS1tcy5jb20iLCJmcm9tLW10LmNvbSIs''@;'; put 'put ''ImZyb20tbmMuY29tIiwiZnJvbS1uZC5jb20iLCJmcm9tLW5lLmNvbSIsImZyb20tbmguY29tIiwiZnJvbS1uai5jb20iLCJmcm9tLW5tLmNvbSIsImZyb20tbnYuY29tIiwiZnJvbS1vaC5jb20iLCJmcm9tLW9rLmNvbSIsImZyb20tb3IuY29tIiwiZnJvbS1wYS5jb20iLCJmcm9tLXByLmNv''@;'; put 'put ''bSIsImZyb20tcmkuY29tIiwiZnJvbS1zYy5jb20iLCJmcm9tLXNkLmNvbSIsImZyb20tdG4uY29tIiwiZnJvbS10eC5jb20iLCJmcm9tLXV0LmNvbSIsImZyb20tdmEuY29tIiwiZnJvbS12dC5jb20iLCJmcm9tLXdhLmNvbSIsImZyb20td2kuY29tIiwiZnJvbS13di5jb20iLCJmcm9tLXd5''@;'; put 'put ''LmNvbSIsImdldG15aXAuY29tIiwiZ290ZG5zLmNvbSIsImhvYmJ5LXNpdGUuY29tIiwiaG9tZWxpbnV4LmNvbSIsImhvbWV1bml4LmNvbSIsImlhbWFsbGFtYS5jb20iLCJpcy1hLWFuYXJjaGlzdC5jb20iLCJpcy1hLWJsb2dnZXIuY29tIiwiaXMtYS1ib29ra2VlcGVyLmNvbSIsImlzLWEt''@;'; put 'put ''YnVsbHMtZmFuLmNvbSIsImlzLWEtY2F0ZXJlci5jb20iLCJpcy1hLWNoZWYuY29tIiwiaXMtYS1jb25zZXJ2YXRpdmUuY29tIiwiaXMtYS1jcGEuY29tIiwiaXMtYS1jdWJpY2xlLXNsYXZlLmNvbSIsImlzLWEtZGVtb2NyYXQuY29tIiwiaXMtYS1kZXNpZ25lci5jb20iLCJpcy1hLWRvY3Rv''@;'; put 'put ''ci5jb20iLCJpcy1hLWZpbmFuY2lhbGFkdmlzb3IuY29tIiwiaXMtYS1nZWVrLmNvbSIsImlzLWEtZ3JlZW4uY29tIiwiaXMtYS1ndXJ1LmNvbSIsImlzLWEtaGFyZC13b3JrZXIuY29tIiwiaXMtYS1odW50ZXIuY29tIiwiaXMtYS1sYW5kc2NhcGVyLmNvbSIsImlzLWEtbGF3eWVyLmNvbSIs''@;'; put 'put ''ImlzLWEtbGliZXJhbC5jb20iLCJpcy1hLWxpYmVydGFyaWFuLmNvbSIsImlzLWEtbGxhbWEuY29tIiwiaXMtYS1tdXNpY2lhbi5jb20iLCJpcy1hLW5hc2NhcmZhbi5jb20iLCJpcy1hLW51cnNlLmNvbSIsImlzLWEtcGFpbnRlci5jb20iLCJpcy1hLXBlcnNvbmFsdHJhaW5lci5jb20iLCJp''@;'; put 'put ''cy1hLXBob3RvZ3JhcGhlci5jb20iLCJpcy1hLXBsYXllci5jb20iLCJpcy1hLXJlcHVibGljYW4uY29tIiwiaXMtYS1yb2Nrc3Rhci5jb20iLCJpcy1hLXNvY2lhbGlzdC5jb20iLCJpcy1hLXN0dWRlbnQuY29tIiwiaXMtYS10ZWFjaGVyLmNvbSIsImlzLWEtdGVjaGllLmNvbSIsImlzLWEt''@;'; put 'put ''dGhlcmFwaXN0LmNvbSIsImlzLWFuLWFjY291bnRhbnQuY29tIiwiaXMtYW4tYWN0b3IuY29tIiwiaXMtYW4tYWN0cmVzcy5jb20iLCJpcy1hbi1hbmFyY2hpc3QuY29tIiwiaXMtYW4tYXJ0aXN0LmNvbSIsImlzLWFuLWVuZ2luZWVyLmNvbSIsImlzLWFuLWVudGVydGFpbmVyLmNvbSIsImlz''@;'; put 'put ''LWNlcnRpZmllZC5jb20iLCJpcy1nb25lLmNvbSIsImlzLWludG8tYW5pbWUuY29tIiwiaXMtaW50by1jYXJzLmNvbSIsImlzLWludG8tY2FydG9vbnMuY29tIiwiaXMtaW50by1nYW1lcy5jb20iLCJpcy1sZWV0LmNvbSIsImlzLW5vdC1jZXJ0aWZpZWQuY29tIiwiaXMtc2xpY2suY29tIiwi''@;'; put 'put ''aXMtdWJlcmxlZXQuY29tIiwiaXMtd2l0aC10aGViYW5kLmNvbSIsImlzYS1nZWVrLmNvbSIsImlzYS1ob2NrZXludXQuY29tIiwiaXNzbWFydGVydGhhbnlvdS5jb20iLCJsaWtlcy1waWUuY29tIiwibGlrZXNjYW5keS5jb20iLCJuZWF0LXVybC5jb20iLCJzYXZlcy10aGUtd2hhbGVzLmNv''@;'; put 'put ''bSIsInNlbGZpcC5jb20iLCJzZWxscy1mb3ItbGVzcy5jb20iLCJzZWxscy1mb3ItdS5jb20iLCJzZXJ2ZWJicy5jb20iLCJzaW1wbGUtdXJsLmNvbSIsInNwYWNlLXRvLXJlbnQuY29tIiwidGVhY2hlcy15b2dhLmNvbSIsIndyaXRlc3RoaXNibG9nLmNvbSIsImF0aC5jeCIsImZ1ZXR0ZXJ0''@;'; put 'put ''ZGFzbmV0ei5kZSIsImlzdGVpbmdlZWsuZGUiLCJpc3RtZWluLmRlIiwibGVidGltbmV0ei5kZSIsImxlaXR1bmdzZW4uZGUiLCJ0cmFldW10Z2VyYWRlLmRlIiwiYmFycmVsLW9mLWtub3dsZWRnZS5pbmZvIiwiYmFycmVsbC1vZi1rbm93bGVkZ2UuaW5mbyIsImR5bmRucy5pbmZvIiwiZm9y''@;'; put 'put ''LW91ci5pbmZvIiwiZ3Jva3MtdGhlLmluZm8iLCJncm9rcy10aGlzLmluZm8iLCJoZXJlLWZvci1tb3JlLmluZm8iLCJrbm93c2l0YWxsLmluZm8iLCJzZWxmaXAuaW5mbyIsIndlYmhvcC5pbmZvIiwiZm9yZ290Lmhlci5uYW1lIiwiZm9yZ290Lmhpcy5uYW1lIiwiYXQtYmFuZC1jYW1wLm5l''@;'; put 'put ''dCIsImJsb2dkbnMubmV0IiwiYnJva2UtaXQubmV0IiwiYnV5c2hvdXNlcy5uZXQiLCJkbnNhbGlhcy5uZXQiLCJkbnNkb2pvLm5ldCIsImRvZXMtaXQubmV0IiwiZG9udGV4aXN0Lm5ldCIsImR5bmFsaWFzLm5ldCIsImR5bmF0aG9tZS5uZXQiLCJlbmRvZmludGVybmV0Lm5ldCIsImZyb20t''@;'; put 'put ''YXoubmV0IiwiZnJvbS1jby5uZXQiLCJmcm9tLWxhLm5ldCIsImZyb20tbnkubmV0IiwiZ2V0cy1pdC5uZXQiLCJoYW0tcmFkaW8tb3AubmV0IiwiaG9tZWZ0cC5uZXQiLCJob21laXAubmV0IiwiaG9tZWxpbnV4Lm5ldCIsImhvbWV1bml4Lm5ldCIsImluLXRoZS1iYW5kLm5ldCIsImlzLWEt''@;'; put 'put ''Y2hlZi5uZXQiLCJpcy1hLWdlZWsubmV0IiwiaXNhLWdlZWsubmV0Iiwia2lja3MtYXNzLm5ldCIsIm9mZmljZS1vbi10aGUubmV0IiwicG9kem9uZS5uZXQiLCJzY3JhcHBlci1zaXRlLm5ldCIsInNlbGZpcC5uZXQiLCJzZWxscy1pdC5uZXQiLCJzZXJ2ZWJicy5uZXQiLCJzZXJ2ZWZ0cC5u''@;'; put 'put ''ZXQiLCJ0aHJ1aGVyZS5uZXQiLCJ3ZWJob3AubmV0IiwibWVyc2VpbmUubnUiLCJtaW5lLm51Iiwic2hhY2tuZXQubnUiLCJibG9nZG5zLm9yZyIsImJsb2dzaXRlLm9yZyIsImJvbGRseWdvaW5nbm93aGVyZS5vcmciLCJkbnNhbGlhcy5vcmciLCJkbnNkb2pvLm9yZyIsImRvZXNudGV4aXN0''@;'; put 'put ''Lm9yZyIsImRvbnRleGlzdC5vcmciLCJkb29tZG5zLm9yZyIsImR2cmRucy5vcmciLCJkeW5hbGlhcy5vcmciLCJkeW5kbnMub3JnIiwiZ28uZHluZG5zLm9yZyIsImhvbWUuZHluZG5zLm9yZyIsImVuZG9maW50ZXJuZXQub3JnIiwiZW5kb2Z0aGVpbnRlcm5ldC5vcmciLCJmcm9tLW1lLm9y''@;'; put 'put ''ZyIsImdhbWUtaG9zdC5vcmciLCJnb3RkbnMub3JnIiwiaG9iYnktc2l0ZS5vcmciLCJob21lZG5zLm9yZyIsImhvbWVmdHAub3JnIiwiaG9tZWxpbnV4Lm9yZyIsImhvbWV1bml4Lm9yZyIsImlzLWEtYnJ1aW5zZmFuLm9yZyIsImlzLWEtY2FuZGlkYXRlLm9yZyIsImlzLWEtY2VsdGljc2Zh''@;'; put 'put ''bi5vcmciLCJpcy1hLWNoZWYub3JnIiwiaXMtYS1nZWVrLm9yZyIsImlzLWEta25pZ2h0Lm9yZyIsImlzLWEtbGludXgtdXNlci5vcmciLCJpcy1hLXBhdHNmYW4ub3JnIiwiaXMtYS1zb3hmYW4ub3JnIiwiaXMtZm91bmQub3JnIiwiaXMtbG9zdC5vcmciLCJpcy1zYXZlZC5vcmciLCJpcy12''@;'; put 'put ''ZXJ5LWJhZC5vcmciLCJpcy12ZXJ5LWV2aWwub3JnIiwiaXMtdmVyeS1nb29kLm9yZyIsImlzLXZlcnktbmljZS5vcmciLCJpcy12ZXJ5LXN3ZWV0Lm9yZyIsImlzYS1nZWVrLm9yZyIsImtpY2tzLWFzcy5vcmciLCJtaXNjb25mdXNlZC5vcmciLCJwb2R6b25lLm9yZyIsInJlYWRteWJsb2cu''@;'; put 'put ''b3JnIiwic2VsZmlwLm9yZyIsInNlbGxzeW91cmhvbWUub3JnIiwic2VydmViYnMub3JnIiwic2VydmVmdHAub3JnIiwic2VydmVnYW1lLm9yZyIsInN0dWZmLTQtc2FsZS5vcmciLCJ3ZWJob3Aub3JnIiwiYmV0dGVyLXRoYW4udHYiLCJkeW5kbnMudHYiLCJvbi10aGUtd2ViLnR2Iiwid29y''@;'; put 'put ''c2UtdGhhbi50diIsImlzLWJ5LnVzIiwibGFuZC00LXNhbGUudXMiLCJzdHVmZi00LXNhbGUudXMiLCJkeW5kbnMud3MiLCJteXBldHMud3MiLCJkZG5zZnJlZS5jb20iLCJkZG5zZ2Vlay5jb20iLCJnaWl6ZS5jb20iLCJnbGVlemUuY29tIiwia296b3cuY29tIiwibG9zZXlvdXJpcC5jb20i''@;'; put 'put ''LCJvb2d1eS5jb20iLCJ0aGV3b3JrcGMuY29tIiwiY2FzYWNhbS5uZXQiLCJkeW51Lm5ldCIsImFjY2Vzc2NhbS5vcmciLCJjYW1kdnIub3JnIiwiZnJlZWRkbnMub3JnIiwibXl3aXJlLm9yZyIsIndlYnJlZGlyZWN0Lm9yZyIsIm15ZGRucy5yb2NrcyIsImR5bnY2Lm5ldCIsImU0LmN6Iiwi''@;'; put 'put ''ZWFzeXBhbmVsLmFwcCIsImVhc3lwYW5lbC5ob3N0IiwiKi5ld3AubGl2ZSIsInR3bWFpbC5jYyIsInR3bWFpbC5uZXQiLCJ0d21haWwub3JnIiwibXltYWlsZXIuY29tLnR3IiwidXJsLnR3IiwiYXQuZW1mLmNhbXAiLCJydC5odCIsImVsZW1lbnRvci5jbG91ZCIsImVsZW1lbnRvci5jb29s''@;'; put 'put ''IiwiZW4tcm9vdC5mciIsIm15dHVsZWFwLmNvbSIsInR1bGVhcC1wYXJ0bmVycy5jb20iLCJlbmNyLmFwcCIsImVuY29yZWFwaS5jb20iLCJldS5lbmNvd2F5LmNsb3VkIiwiZXUub3JnIiwiYWwuZXUub3JnIiwiYXNzby5ldS5vcmciLCJhdC5ldS5vcmciLCJhdS5ldS5vcmciLCJiZS5ldS5v''@;'; put 'put ''cmciLCJiZy5ldS5vcmciLCJjYS5ldS5vcmciLCJjZC5ldS5vcmciLCJjaC5ldS5vcmciLCJjbi5ldS5vcmciLCJjeS5ldS5vcmciLCJjei5ldS5vcmciLCJkZS5ldS5vcmciLCJkay5ldS5vcmciLCJlZHUuZXUub3JnIiwiZWUuZXUub3JnIiwiZXMuZXUub3JnIiwiZmkuZXUub3JnIiwiZnIu''@;'; put 'put ''ZXUub3JnIiwiZ3IuZXUub3JnIiwiaHIuZXUub3JnIiwiaHUuZXUub3JnIiwiaWUuZXUub3JnIiwiaWwuZXUub3JnIiwiaW4uZXUub3JnIiwiaW50LmV1Lm9yZyIsImlzLmV1Lm9yZyIsIml0LmV1Lm9yZyIsImpwLmV1Lm9yZyIsImtyLmV1Lm9yZyIsImx0LmV1Lm9yZyIsImx1LmV1Lm9yZyIs''@;'; put 'put ''Imx2LmV1Lm9yZyIsIm1lLmV1Lm9yZyIsIm1rLmV1Lm9yZyIsIm10LmV1Lm9yZyIsIm15LmV1Lm9yZyIsIm5ldC5ldS5vcmciLCJuZy5ldS5vcmciLCJubC5ldS5vcmciLCJuby5ldS5vcmciLCJuei5ldS5vcmciLCJwbC5ldS5vcmciLCJwdC5ldS5vcmciLCJyby5ldS5vcmciLCJydS5ldS5v''@;'; put 'put ''cmciLCJzZS5ldS5vcmciLCJzaS5ldS5vcmciLCJzay5ldS5vcmciLCJ0ci5ldS5vcmciLCJ1ay5ldS5vcmciLCJ1cy5ldS5vcmciLCJldXJvZGlyLnJ1IiwiZXUtMS5ldmVubm9kZS5jb20iLCJldS0yLmV2ZW5ub2RlLmNvbSIsImV1LTMuZXZlbm5vZGUuY29tIiwiZXUtNC5ldmVubm9kZS5j''@;'; put 'put ''b20iLCJ1cy0xLmV2ZW5ub2RlLmNvbSIsInVzLTIuZXZlbm5vZGUuY29tIiwidXMtMy5ldmVubm9kZS5jb20iLCJ1cy00LmV2ZW5ub2RlLmNvbSIsInJlbGF5LmV2ZXJ2YXVsdC5hcHAiLCJyZWxheS5ldmVydmF1bHQuZGV2IiwiZXhwby5hcHAiLCJzdGFnaW5nLmV4cG8uYXBwIiwib25mYWJy''@;'; put 'put ''aWNhLmNvbSIsInJ1Lm5ldCIsImFkeWdleWEucnUiLCJiYXNoa2lyaWEucnUiLCJiaXIucnUiLCJjYmcucnUiLCJjb20ucnUiLCJkYWdlc3Rhbi5ydSIsImdyb3pueS5ydSIsImthbG15a2lhLnJ1Iiwia3VzdGFuYWkucnUiLCJtYXJpbmUucnUiLCJtb3Jkb3ZpYS5ydSIsIm1zay5ydSIsIm15''@;'; put 'put ''dGlzLnJ1IiwibmFsY2hpay5ydSIsIm5vdi5ydSIsInB5YXRpZ29yc2sucnUiLCJzcGIucnUiLCJ2bGFkaWthdmthei5ydSIsInZsYWRpbWlyLnJ1IiwiYWJraGF6aWEuc3UiLCJhZHlnZXlhLnN1IiwiYWt0eXViaW5zay5zdSIsImFya2hhbmdlbHNrLnN1IiwiYXJtZW5pYS5zdSIsImFzaGdh''@;'; put 'put ''YmFkLnN1IiwiYXplcmJhaWphbi5zdSIsImJhbGFzaG92LnN1IiwiYmFzaGtpcmlhLnN1IiwiYnJ5YW5zay5zdSIsImJ1a2hhcmEuc3UiLCJjaGlta2VudC5zdSIsImRhZ2VzdGFuLnN1IiwiZWFzdC1rYXpha2hzdGFuLnN1IiwiZXhuZXQuc3UiLCJnZW9yZ2lhLnN1IiwiZ3Jvem55LnN1Iiwi''@;'; put 'put ''aXZhbm92by5zdSIsImphbWJ5bC5zdSIsImthbG15a2lhLnN1Iiwia2FsdWdhLnN1Iiwia2FyYWNvbC5zdSIsImthcmFnYW5kYS5zdSIsImthcmVsaWEuc3UiLCJraGFrYXNzaWEuc3UiLCJrcmFzbm9kYXIuc3UiLCJrdXJnYW4uc3UiLCJrdXN0YW5haS5zdSIsImxlbnVnLnN1IiwibWFuZ3lz''@;'; put 'put ''aGxhay5zdSIsIm1vcmRvdmlhLnN1IiwibXNrLnN1IiwibXVybWFuc2suc3UiLCJuYWxjaGlrLnN1IiwibmF2b2kuc3UiLCJub3J0aC1rYXpha2hzdGFuLnN1Iiwibm92LnN1Iiwib2JuaW5zay5zdSIsInBlbnphLnN1IiwicG9rcm92c2suc3UiLCJzb2NoaS5zdSIsInNwYi5zdSIsInRhc2hr''@;'; put 'put ''ZW50LnN1IiwidGVybWV6LnN1IiwidG9nbGlhdHRpLnN1IiwidHJvaXRzay5zdSIsInRzZWxpbm9ncmFkLnN1IiwidHVsYS5zdSIsInR1dmEuc3UiLCJ2bGFkaWthdmthei5zdSIsInZsYWRpbWlyLnN1Iiwidm9sb2dkYS5zdSIsImNoYW5uZWxzZHZyLm5ldCIsInUuY2hhbm5lbHNkdnIubmV0''@;'; put 'put ''IiwiZWRnZWNvbXB1dGUuYXBwIiwiZmFzdGx5LWVkZ2UuY29tIiwiZmFzdGx5LXRlcnJhcml1bS5jb20iLCJmcmVldGxzLmZhc3RseS5uZXQiLCJtYXAuZmFzdGx5Lm5ldCIsImEucHJvZC5mYXN0bHkubmV0IiwiZ2xvYmFsLnByb2QuZmFzdGx5Lm5ldCIsImEuc3NsLmZhc3RseS5uZXQiLCJi''@;'; put 'put ''LnNzbC5mYXN0bHkubmV0IiwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0IiwiZmFzdGx5bGIubmV0IiwibWFwLmZhc3RseWxiLm5ldCIsIioudXNlci5mbSIsImZhc3R2cHMtc2VydmVyLmNvbSIsImZhc3R2cHMuaG9zdCIsIm15ZmFzdC5ob3N0IiwiZmFzdHZwcy5zaXRlIiwibXlmYXN0LnNwYWNl''@;'; put 'put ''IiwiY29ubi51ayIsImNvcHJvLnVrIiwiaG9zcC51ayIsImZlZG9yYWluZnJhY2xvdWQub3JnIiwiZmVkb3JhcGVvcGxlLm9yZyIsImNsb3VkLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZyIsIm15ZG9i''@;'; put 'put ''aXNzLmNvbSIsImZoLW11ZW5zdGVyLmlvIiwiZmlsZWdlYXIubWUiLCJmaXJlYmFzZWFwcC5jb20iLCJmbGRydi5jb20iLCJmbHV0dGVyZmxvdy5hcHAiLCJmbHkuZGV2Iiwic2h3LmlvIiwiZWRnZWFwcC5uZXQiLCJmb3JnZWJsb2Nrcy5jb20iLCJpZC5mb3JnZXJvY2suaW8iLCJmcmFtZXIu''@;'; put 'put ''YWkiLCJmcmFtZXIuYXBwIiwiZnJhbWVyY2FudmFzLmNvbSIsImZyYW1lci5tZWRpYSIsImZyYW1lci5waG90b3MiLCJmcmFtZXIud2Vic2l0ZSIsImZyYW1lci53aWtpIiwiMGUudmMiLCJmcmVlYm94LW9zLmNvbSIsImZyZWVib3hvcy5jb20iLCJmYngtb3MuZnIiLCJmYnhvcy5mciIsImZy''@;'; put 'put ''ZWVib3gtb3MuZnIiLCJmcmVlYm94b3MuZnIiLCJmcmVlZGVza3RvcC5vcmciLCJmcmVlbXlpcC5jb20iLCIqLmZydXNreS5kZSIsIndpZW4uZnVua2ZldWVyLmF0IiwiZGFlbW9uLmFzaWEiLCJkaXguYXNpYSIsIm15ZG5zLmJ6IiwiMGFtLmpwIiwiMGcwLmpwIiwiMGowLmpwIiwiMHQwLmpw''@;'; put 'put ''IiwibXlkbnMuanAiLCJwZ3cuanAiLCJ3amcuanAiLCJrZXl3b3JkLW9uLm5ldCIsImxpdmUtb24ubmV0Iiwic2VydmVyLW9uLm5ldCIsIm15ZG5zLnR3IiwibXlkbnMudmMiLCIqLmZ1dHVyZWNtcy5hdCIsIiouZXguZnV0dXJlY21zLmF0IiwiKi5pbi5mdXR1cmVjbXMuYXQiLCJmdXR1cmVo''@;'; put 'put ''b3N0aW5nLmF0IiwiZnV0dXJlbWFpbGluZy5hdCIsIiouZXgub3J0c2luZm8uYXQiLCIqLmt1bmRlbi5vcnRzaW5mby5hdCIsIiouc3RhdGljcy5jbG91ZCIsImFsaWFzZXMxMjEuY29tIiwiY2FtcGFpZ24uZ292LnVrIiwic2VydmljZS5nb3YudWsiLCJpbmRlcGVuZGVudC1jb21taXNzaW9u''@;'; put 'put ''LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWVzdC51ayIsImluZGVwZW5kZW50LWlucXVpcnkudWsiLCJpbmRlcGVuZGVudC1wYW5lbC51ayIsImluZGVwZW5kZW50LXJldmlldy51ayIsInB1YmxpYy1pbnF1aXJ5LnVrIiwicm95YWwtY29tbWlzc2lvbi51ayIsImdlaGlybi5uZS5qcCIsInVzZXJj''@;'; put 'put ''b250ZW50LmpwIiwiZ2VudGFwcHMuY29tIiwiZ2VudGxlbnRhcGlzLmNvbSIsImxhYi5tcyIsImNkbi1lZGdlcy5uZXQiLCJsb2NhbGNlcnQubmV0IiwibG9jYWxob3N0Y2VydC5uZXQiLCJnc2ouYnoiLCJnaXRodWJ1c2VyY29udGVudC5jb20iLCJnaXRodWJwcmV2aWV3LmRldiIsImdpdGh1''@;'; put 'put ''Yi5pbyIsImdpdGxhYi5pbyIsImdpdGFwcC5zaSIsImdpdHBhZ2Uuc2kiLCJnbGl0Y2gubWUiLCJub2cuY29tbXVuaXR5IiwiY28ucm8iLCJzaG9wLnJvIiwibG9saXBvcC5pbyIsImFuZ3J5LmpwIiwiYmFieWJsdWUuanAiLCJiYWJ5bWlsay5qcCIsImJhY2tkcm9wLmpwIiwiYmFtYmluYS5q''@;'; put 'put ''cCIsImJpdHRlci5qcCIsImJsdXNoLmpwIiwiYm9vLmpwIiwiYm95LmpwIiwiYm95ZnJpZW5kLmpwIiwiYnV0LmpwIiwiY2FuZHlwb3AuanAiLCJjYXBvby5qcCIsImNhdGZvb2QuanAiLCJjaGVhcC5qcCIsImNoaWNhcHBhLmpwIiwiY2hpbGxvdXQuanAiLCJjaGlwcy5qcCIsImNob3dkZXIu''@;'; put 'put ''anAiLCJjaHUuanAiLCJjaWFvLmpwIiwiY29jb3R0ZS5qcCIsImNvb2xibG9nLmpwIiwiY3Jhbmt5LmpwIiwiY3V0ZWdpcmwuanAiLCJkYWEuanAiLCJkZWNhLmpwIiwiZGVjaS5qcCIsImRpZ2ljay5qcCIsImVnb2lzbS5qcCIsImZha2VmdXIuanAiLCJmZW0uanAiLCJmbGllci5qcCIsImZs''@;'; put 'put ''b3BweS5qcCIsImZvb2wuanAiLCJmcmVuY2hraXNzLmpwIiwiZ2lybGZyaWVuZC5qcCIsImdpcmx5LmpwIiwiZ2xvb215LmpwIiwiZ29ubmEuanAiLCJncmVhdGVyLmpwIiwiaGFjY2EuanAiLCJoZWF2eS5qcCIsImhlci5qcCIsImhpaG8uanAiLCJoaXBweS5qcCIsImhvbHkuanAiLCJodW5n''@;'; put 'put ''cnkuanAiLCJpY3VydXMuanAiLCJpdGlnby5qcCIsImplbGx5YmVhbi5qcCIsImtpa2lyYXJhLmpwIiwia2lsbC5qcCIsImtpbG8uanAiLCJrdXJvbi5qcCIsImxpdHRsZXN0YXIuanAiLCJsb2xpcG9wbWMuanAiLCJsb2xpdGFwdW5rLmpwIiwibG9tby5qcCIsImxvdmVwb3AuanAiLCJsb3Zl''@;'; put 'put ''c2ljay5qcCIsIm1haW4uanAiLCJtb2RzLmpwIiwibW9uZC5qcCIsIm1vbmdvbGlhbi5qcCIsIm1vby5qcCIsIm5hbWFzdGUuanAiLCJuaWtpdGEuanAiLCJub2J1c2hpLmpwIiwibm9vci5qcCIsIm9vcHMuanAiLCJwYXJhbGxlbC5qcCIsInBhcmFzaXRlLmpwIiwicGVjb3JpLmpwIiwicGVl''@;'; put 'put ''d2VlLmpwIiwicGVubmUuanAiLCJwZXBwZXIuanAiLCJwZXJtYS5qcCIsInBpZ2JvYXQuanAiLCJwaW5va28uanAiLCJwdW55dS5qcCIsInB1cHUuanAiLCJwdXNzeWNhdC5qcCIsInB5YS5qcCIsInJhaW5kcm9wLmpwIiwicmVhZHltYWRlLmpwIiwic2FkaXN0LmpwIiwic2Nob29sYnVzLmpw''@;'; put 'put ''Iiwic2VjcmV0LmpwIiwic3RhYmEuanAiLCJzdHJpcHBlci5qcCIsInN1Yi5qcCIsInN1bm55ZGF5LmpwIiwidGhpY2suanAiLCJ0b25rb3RzdS5qcCIsInVuZGVyLmpwIiwidXBwZXIuanAiLCJ2ZWx2ZXQuanAiLCJ2ZXJzZS5qcCIsInZlcnN1cy5qcCIsInZpdmlhbi5qcCIsIndhdHNvbi5q''@;'; put 'put ''cCIsIndlYmxpa2UuanAiLCJ3aGl0ZXNub3cuanAiLCJ6b21iaWUuanAiLCJoZXRlbWwubmV0IiwiZ3JhcGhpYy5kZXNpZ24iLCJnb2lwLmRlIiwiYmxvZ3Nwb3QuYWUiLCJibG9nc3BvdC5hbCIsImJsb2dzcG90LmFtIiwiKi5ob3N0ZWQuYXBwIiwiKi5ydW4uYXBwIiwid2ViLmFwcCIsImJs''@;'; put 'put ''b2dzcG90LmNvbS5hciIsImJsb2dzcG90LmNvLmF0IiwiYmxvZ3Nwb3QuY29tLmF1IiwiYmxvZ3Nwb3QuYmEiLCJibG9nc3BvdC5iZSIsImJsb2dzcG90LmJnIiwiYmxvZ3Nwb3QuYmoiLCJibG9nc3BvdC5jb20uYnIiLCJibG9nc3BvdC5jb20uYnkiLCJibG9nc3BvdC5jYSIsImJsb2dzcG90''@;'; put 'put ''LmNmIiwiYmxvZ3Nwb3QuY2giLCJibG9nc3BvdC5jbCIsImJsb2dzcG90LmNvbS5jbyIsIiouMGVtbS5jb20iLCJhcHBzcG90LmNvbSIsIiouci5hcHBzcG90LmNvbSIsImJsb2dzcG90LmNvbSIsImNvZGVzcG90LmNvbSIsImdvb2dsZWFwaXMuY29tIiwiZ29vZ2xlY29kZS5jb20iLCJwYWdl''@;'; put 'put ''c3BlZWRtb2JpbGl6ZXIuY29tIiwid2l0aGdvb2dsZS5jb20iLCJ3aXRoeW91dHViZS5jb20iLCJibG9nc3BvdC5jdiIsImJsb2dzcG90LmNvbS5jeSIsImJsb2dzcG90LmN6IiwiYmxvZ3Nwb3QuZGUiLCIqLmdhdGV3YXkuZGV2IiwiYmxvZ3Nwb3QuZGsiLCJibG9nc3BvdC5jb20uZWUiLCJi''@;'; put 'put ''bG9nc3BvdC5jb20uZWciLCJibG9nc3BvdC5jb20uZXMiLCJibG9nc3BvdC5maSIsImJsb2dzcG90LmZyIiwiY2xvdWQuZ29vZyIsInRyYW5zbGF0ZS5nb29nIiwiKi51c2VyY29udGVudC5nb29nIiwiYmxvZ3Nwb3QuZ3IiLCJibG9nc3BvdC5oayIsImJsb2dzcG90LmhyIiwiYmxvZ3Nwb3Qu''@;'; put 'put ''aHUiLCJibG9nc3BvdC5jby5pZCIsImJsb2dzcG90LmllIiwiYmxvZ3Nwb3QuY28uaWwiLCJibG9nc3BvdC5pbiIsImJsb2dzcG90LmlzIiwiYmxvZ3Nwb3QuaXQiLCJibG9nc3BvdC5qcCIsImJsb2dzcG90LmNvLmtlIiwiYmxvZ3Nwb3Qua3IiLCJibG9nc3BvdC5saSIsImJsb2dzcG90Lmx0''@;'; put 'put ''IiwiYmxvZ3Nwb3QubHUiLCJibG9nc3BvdC5tZCIsImJsb2dzcG90Lm1rIiwiYmxvZ3Nwb3QuY29tLm10IiwiYmxvZ3Nwb3QubXgiLCJibG9nc3BvdC5teSIsImNsb3VkZnVuY3Rpb25zLm5ldCIsImJsb2dzcG90LmNvbS5uZyIsImJsb2dzcG90Lm5sIiwiYmxvZ3Nwb3Qubm8iLCJibG9nc3Bv''@;'; put 'put ''dC5jby5ueiIsImJsb2dzcG90LnBlIiwiYmxvZ3Nwb3QucHQiLCJibG9nc3BvdC5xYSIsImJsb2dzcG90LnJlIiwiYmxvZ3Nwb3Qucm8iLCJibG9nc3BvdC5ycyIsImJsb2dzcG90LnJ1IiwiYmxvZ3Nwb3Quc2UiLCJibG9nc3BvdC5zZyIsImJsb2dzcG90LnNpIiwiYmxvZ3Nwb3Quc2siLCJi''@;'; put 'put ''bG9nc3BvdC5zbiIsImJsb2dzcG90LnRkIiwiYmxvZ3Nwb3QuY29tLnRyIiwiYmxvZ3Nwb3QudHciLCJibG9nc3BvdC51ZyIsImJsb2dzcG90LmNvLnVrIiwiYmxvZ3Nwb3QuY29tLnV5IiwiYmxvZ3Nwb3Qudm4iLCJibG9nc3BvdC5jby56YSIsImdvdXBpbGUuZnIiLCJweW1udC51ayIsImNs''@;'; put 'put ''b3VkYXBwcy5kaWdpdGFsIiwibG9uZG9uLmNsb3VkYXBwcy5kaWdpdGFsIiwiZ292Lm5sIiwiZ3JhZmFuYS1kZXYubmV0IiwiZ3JheWpheWxlYWd1ZXMuY29tIiwiZ1x4ZmNuc3RpZ2Jlc3RlbGxlbi5kZSIsImdceGZjbnN0aWdsaWVmZXJuLmRlIiwiZmluLmNpIiwiZnJlZS5ociIsImNhYS5s''@;'; put 'put ''aSIsInVhLnJzIiwiY29uZi5zZSIsImhceGU0a2tpbmVuLmZpIiwiaHJzbi5kZXYiLCJoYXNoYmFuZy5zaCIsImhhc3VyYS5hcHAiLCJoYXN1cmEtYXBwLmlvIiwiaGF0ZW5hYmxvZy5jb20iLCJoYXRlbmFkaWFyeS5jb20iLCJoYXRlYmxvLmpwIiwiaGF0ZW5hYmxvZy5qcCIsImhhdGVuYWRp''@;'; put 'put ''YXJ5LmpwIiwiaGF0ZW5hZGlhcnkub3JnIiwicGFnZXMuaXQuaHMtaGVpbGJyb25uLmRlIiwicGFnZXMtcmVzZWFyY2guaXQuaHMtaGVpbGJyb25uLmRlIiwiaGVpeXUuc3BhY2UiLCJoZWxpb2hvLnN0IiwiaGVsaW9ob3N0LnVzIiwiaGVwZm9yZ2Uub3JnIiwiaGVyb2t1YXBwLmNvbSIsImhl''@;'; put 'put ''cm9rdXNzbC5jb20iLCJoZXlmbG93LnBhZ2UiLCJoZXlmbG93LnNpdGUiLCJyYXZlbmRiLmNsb3VkIiwicmF2ZW5kYi5jb21tdW5pdHkiLCJkZXZlbG9wbWVudC5ydW4iLCJyYXZlbmRiLnJ1biIsImhvbWVza2xlcC5wbCIsIioua2luLm9uZSIsIiouaWQucHViIiwiKi5raW4ucHViIiwic2Vj''@;'; put 'put ''YWFzLmhrIiwiaG9wbGl4LnNob3AiLCJvcnguYml6IiwiYml6LmdsIiwiYml6Lm5nIiwiY28uYml6Lm5nIiwiZGwuYml6Lm5nIiwiZ28uYml6Lm5nIiwibGcuYml6Lm5nIiwib24uYml6Lm5nIiwiY29sLm5nIiwiZmlybS5uZyIsImdlbi5uZyIsImx0ZC5uZyIsIm5nby5uZyIsInBsYy5uZyIs''@;'; put 'put ''ImllLnVhIiwiaG9zdHlob3N0aW5nLmlvIiwiaGYuc3BhY2UiLCJzdGF0aWMuaGYuc3BhY2UiLCJoeXBlcm5vZGUuaW8iLCJpb2JiLm5ldCIsImNvLmN6IiwiKi5tb29uc2NhbGUuaW8iLCJtb29uc2NhbGUubmV0IiwiZ3IuY29tIiwiaWtpLmZpIiwiaWJ4b3MuaXQiLCJpbGlhZGJveG9zLml0''@;'; put 'put ''Iiwic211c2hjZG4uY29tIiwid3Bob3N0ZWRtYWlsLmNvbSIsIndwbXVjZG4uY29tIiwidGVtcHVybC5ob3N0Iiwid3BtdWRldi5ob3N0IiwiZHluLWJlcmxpbi5kZSIsImluLWJlcmxpbi5kZSIsImluLWJyYi5kZSIsImluLWJ1dHRlci5kZSIsImluLWRzbC5kZSIsImluLXZwbi5kZSIsImlu''@;'; put 'put ''LWRzbC5uZXQiLCJpbi12cG4ubmV0IiwiaW4tZHNsLm9yZyIsImluLXZwbi5vcmciLCJiaXouYXQiLCJpbmZvLmF0IiwiaW5mby5jeCIsImFjLmxlZy5iciIsImFsLmxlZy5iciIsImFtLmxlZy5iciIsImFwLmxlZy5iciIsImJhLmxlZy5iciIsImNlLmxlZy5iciIsImRmLmxlZy5iciIsImVz''@;'; put 'put ''LmxlZy5iciIsImdvLmxlZy5iciIsIm1hLmxlZy5iciIsIm1nLmxlZy5iciIsIm1zLmxlZy5iciIsIm10LmxlZy5iciIsInBhLmxlZy5iciIsInBiLmxlZy5iciIsInBlLmxlZy5iciIsInBpLmxlZy5iciIsInByLmxlZy5iciIsInJqLmxlZy5iciIsInJuLmxlZy5iciIsInJvLmxlZy5iciIs''@;'; put 'put ''InJyLmxlZy5iciIsInJzLmxlZy5iciIsInNjLmxlZy5iciIsInNlLmxlZy5iciIsInNwLmxlZy5iciIsInRvLmxlZy5iciIsInBpeG9saW5vLmNvbSIsIm5hNHUucnUiLCJhcHBzLTFhbmQxLmNvbSIsImxpdmUtd2Vic2l0ZS5jb20iLCJhcHBzLTFhbmQxLm5ldCIsIndlYnNpdGVidWlsZGVy''@;'; put 'put ''Lm9ubGluZSIsImFwcC1pb25vcy5zcGFjZSIsImlvcHN5cy5zZSIsIiouZHdlYi5saW5rIiwiaXBpZm9ueS5uZXQiLCJpci5tZCIsImlzLWEtZ29vZC5kZXYiLCJpcy1hLmRldiIsImlzZXJ2c2NodWxlLmRlIiwibWVpbi1pc2Vydi5kZSIsInNjaHVscGxhdHRmb3JtLmRlIiwic2NodWxzZXJ2''@;'; put 'put ''ZXIuZGUiLCJ0ZXN0LWlzZXJ2LmRlIiwiaXNlcnYuZGV2IiwibWVsLmNsb3VkbGV0cy5jb20uYXUiLCJjbG91ZC5pbnRlcmhvc3Rzb2x1dGlvbnMuYmUiLCJhbHAxLmFlLmZsb3cuY2giLCJhcHBlbmdpbmUuZmxvdy5jaCIsImVzLTEuYXhhcm5ldC5jbG91ZCIsImRpYWRlbS5jbG91ZCIsInZp''@;'; put 'put ''cC5qZWxhc3RpYy5jbG91ZCIsImplbGUuY2xvdWQiLCJpdDEuZXVyLmFydWJhLmplbnYtYXJ1YmEuY2xvdWQiLCJpdDEuamVudi1hcnViYS5jbG91ZCIsImtlbGl3ZWIuY2xvdWQiLCJjcy5rZWxpd2ViLmNsb3VkIiwib3hhLmNsb3VkIiwidG4ub3hhLmNsb3VkIiwidWsub3hhLmNsb3VkIiwi''@;'; put 'put ''cHJpbWV0ZWwuY2xvdWQiLCJ1ay5wcmltZXRlbC5jbG91ZCIsImNhLnJlY2xhaW0uY2xvdWQiLCJ1ay5yZWNsYWltLmNsb3VkIiwidXMucmVjbGFpbS5jbG91ZCIsImNoLnRyZW5kaG9zdGluZy5jbG91ZCIsImRlLnRyZW5kaG9zdGluZy5jbG91ZCIsImplbGUuY2x1YiIsImRvcGFhcy5jb20i''@;'; put 'put ''LCJwYWFzLmhvc3RlZC1ieS1wcmV2aWRlci5jb20iLCJyYWctY2xvdWQuaG9zdGV1ci5jb20iLCJyYWctY2xvdWQtY2guaG9zdGV1ci5jb20iLCJqY2xvdWQuaWstc2VydmVyLmNvbSIsImpjbG91ZC12ZXItanBjLmlrLXNlcnZlci5jb20iLCJkZW1vLmplbGFzdGljLmNvbSIsInBhYXMubWFz''@;'; put 'put ''c2l2ZWdyaWQuY29tIiwiamVkLndhZmFpY2xvdWQuY29tIiwicnlkLndhZmFpY2xvdWQuY29tIiwiai5zY2FsZWZvcmNlLmNvbS5jeSIsImplbGFzdGljLmRvZ2Fkby5ldSIsImZpLmNsb3VkcGxhdGZvcm0uZmkiLCJkZW1vLmRhdGFjZW50ZXIuZmkiLCJwYWFzLmRhdGFjZW50ZXIuZmkiLCJq''@;'; put 'put ''ZWxlLmhvc3QiLCJtaXJjbG91ZC5ob3N0IiwicGFhcy5iZWVieXRlLmlvIiwic2VrZDEuYmVlYnl0ZWFwcC5pbyIsImplbGUuaW8iLCJqYy5uZWVuLml0IiwiamNsb3VkLmt6IiwiY2xvdWRqaWZmeS5uZXQiLCJmcmExLWRlLmNsb3VkamlmZnkubmV0Iiwid2VzdDEtdXMuY2xvdWRqaWZmeS5u''@;'; put 'put ''ZXQiLCJqbHMtc3RvMS5lbGFzdHgubmV0IiwiamxzLXN0bzIuZWxhc3R4Lm5ldCIsImpscy1zdG8zLmVsYXN0eC5uZXQiLCJmci0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTEucGFh''@;'; put 'put ''cy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0yLnBhYXMubWFzc2l2ZWdyaWQubmV0Iiwic2ctMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImplbGFzdGljLnNhdmVpbmNsb3VkLm5ldCIsIm5vcmRlc3RlLWlkYy5zYXZlaW5jbG91ZC5uZXQiLCJqLnNjYWxlZm9yY2UubmV0Iiwic2RzY2xvdWQucGwi''@;'; put 'put ''LCJ1bmljbG91ZC5wbCIsIm1pcmNsb3VkLnJ1IiwiZW5zY2FsZWQuc2ciLCJqZWxlLnNpdGUiLCJqZWxhc3RpYy50ZWFtIiwib3JhbmdlY2xvdWQudG4iLCJqLmxheWVyc2hpZnQuY28udWsiLCJwaHguZW5zY2FsZWQudXMiLCJtaXJjbG91ZC51cyIsIm15amluby5ydSIsIiouaG9zdGluZy5t''@;'; put 'put ''eWppbm8ucnUiLCIqLmxhbmRpbmcubXlqaW5vLnJ1IiwiKi5zcGVjdHJ1bS5teWppbm8ucnUiLCIqLnZwcy5teWppbm8ucnUiLCJqb3RlbHVsdS5jbG91ZCIsIndlYmFkb3JzaXRlLmNvbSIsImpvdXd3ZWIuc2l0ZSIsIiouY25zLmpveWVudC5jb20iLCIqLnRyaXRvbi56b25lIiwianMub3Jn''@;'; put 'put ''Iiwia2Fhcy5nZyIsImtocGxheS5ubCIsImthcHNpLmZpIiwiZXpwcm94eS5rdWxldXZlbi5iZSIsImt1bGV1dmVuLmNsb3VkIiwia2V5bWFjaGluZS5kZSIsImtpbmdob3N0Lm5ldCIsInVuaTUubmV0Iiwia25pZ2h0cG9pbnQuc3lzdGVtcyIsImtvb2Jpbi5ldmVudHMiLCJ3ZWJ0aGluZ3Mu''@;'; put 'put ''aW8iLCJrcmVsbGlhbi5uZXQiLCJveWEudG8iLCJnaXQtcmVwb3MuZGUiLCJsY3ViZS1zZXJ2ZXIuZGUiLCJzdm4tcmVwb3MuZGUiLCJsZWFkcGFnZXMuY28iLCJscGFnZXMuY28iLCJscHVzZXJjb250ZW50LmNvbSIsImxlbHV4LnNpdGUiLCJsaWJwMnAuZGlyZWN0IiwicnVuY29udGFpbmVy''@;'; put 'put ''cy5kZXYiLCJjby5idXNpbmVzcyIsImNvLmVkdWNhdGlvbiIsImNvLmV2ZW50cyIsImNvLmZpbmFuY2lhbCIsImNvLm5ldHdvcmsiLCJjby5wbGFjZSIsImNvLnRlY2hub2xvZ3kiLCJsaW5reWFyZC1jbG91ZC5jaCIsImxpbmt5YXJkLmNsb3VkIiwibWVtYmVycy5saW5vZGUuY29tIiwiKi5u''@;'; put 'put ''b2RlYmFsYW5jZXIubGlub2RlLmNvbSIsIioubGlub2Rlb2JqZWN0cy5jb20iLCJpcC5saW5vZGV1c2VyY29udGVudC5jb20iLCJ3ZS5icyIsImZpbGVnZWFyLXNnLm1lIiwiZ2dmZi5uZXQiLCIqLnVzZXIubG9jYWxjZXJ0LmRldiIsImxvZHoucGwiLCJwYWJpYW5pY2UucGwiLCJwbG9jay5w''@;'; put 'put ''bCIsInNpZXJhZHoucGwiLCJza2llcm5pZXdpY2UucGwiLCJ6Z2llcnoucGwiLCJsb2dpbmxpbmUuYXBwIiwibG9naW5saW5lLmRldiIsImxvZ2lubGluZS5pbyIsImxvZ2lubGluZS5zZXJ2aWNlcyIsImxvZ2lubGluZS5zaXRlIiwibG9obXVzLm1lIiwic2VydmVycy5ydW4iLCJrcmFzbmlr''@;'; put 'put ''LnBsIiwibGVjem5hLnBsIiwibHViYXJ0b3cucGwiLCJsdWJsaW4ucGwiLCJwb25pYXRvd2EucGwiLCJzd2lkbmlrLnBsIiwiZ2x1Zy5vcmcudWsiLCJsdWcub3JnLnVrIiwibHVncy5vcmcudWsiLCJiYXJzeS5iZyIsImJhcnN5LmNsdWIiLCJiYXJzeWNlbnRlci5jb20iLCJiYXJzeW9ubGlu''@;'; put 'put ''ZS5jb20iLCJiYXJzeS5kZSIsImJhcnN5LmRldiIsImJhcnN5LmV1IiwiYmFyc3kuZ3IiLCJiYXJzeS5pbiIsImJhcnN5LmluZm8iLCJiYXJzeS5pbyIsImJhcnN5Lm1lIiwiYmFyc3kubWVudSIsImJhcnN5b25saW5lLm1lbnUiLCJiYXJzeS5tb2JpIiwiYmFyc3kubmV0IiwiYmFyc3kub25s''@;'; put 'put ''aW5lIiwiYmFyc3kub3JnIiwiYmFyc3kucHJvIiwiYmFyc3kucHViIiwiYmFyc3kucm8iLCJiYXJzeS5ycyIsImJhcnN5LnNob3AiLCJiYXJzeW9ubGluZS5zaG9wIiwiYmFyc3kuc2l0ZSIsImJhcnN5LnN0b3JlIiwiYmFyc3kuc3VwcG9ydCIsImJhcnN5LnVrIiwiYmFyc3kuY28udWsiLCJi''@;'; put 'put ''YXJzeW9ubGluZS5jby51ayIsIioubWFnZW50b3NpdGUuY2xvdWQiLCJoYi5jbGRtYWlsLnJ1IiwibWF0bGFiLmNsb3VkIiwibW9kZWxzY2FwZS5jb20iLCJtd2Nsb3Vkbm9ucHJvZC5jb20iLCJwb2x5c3BhY2UuY29tIiwibWF5Zmlyc3QuaW5mbyIsIm1heWZpcnN0Lm9yZyIsIm1hemVwbGF5''@;'; put 'put ''LmNvbSIsIm1jZGlyLm1lIiwibWNkaXIucnUiLCJ2cHMubWNkaXIucnUiLCJtY3ByZS5ydSIsIm1lZGlhdGVjaC5ieSIsIm1lZGlhdGVjaC5kZXYiLCJocmEuaGVhbHRoIiwibWVkdXNhanMuYXBwIiwibWluaXNlcnZlci5jb20iLCJtZW1zZXQubmV0IiwibWVzc2VybGkuYXBwIiwiYXRtZXRh''@;'; put 'put ''LmNvbSIsImFwcHMuZmJzYnguY29tIiwiKi5jbG91ZC5tZXRhY2VudHJ1bS5jeiIsImN1c3RvbS5tZXRhY2VudHJ1bS5jeiIsImZsdC5jbG91ZC5tdW5pLmN6IiwidXNyLmNsb3VkLm11bmkuY3oiLCJtZXRlb3JhcHAuY29tIiwiZXUubWV0ZW9yYXBwLmNvbSIsImNvLnBsIiwiKi5henVyZWNv''@;'; put 'put ''bnRhaW5lci5pbyIsImF6dXJlLWFwaS5uZXQiLCJhenVyZS1tb2JpbGUubmV0IiwiYXp1cmVlZGdlLm5ldCIsImF6dXJlZmQubmV0IiwiYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjEuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjMuYXp1cmVzdGF0aWNhcHBz''@;'; put 'put ''Lm5ldCIsIjQuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjUuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjYuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjcuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImNlbnRyYWx1cy5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdGFzaWEuYXp1cmVzdGF0aWNhcHBzLm5ldCIs''@;'; put 'put ''ImVhc3R1czIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3RldXJvcGUuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3R1czIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImF6dXJld2Vic2l0ZXMubmV0IiwiY2xvdWRhcHAubmV0IiwidHJhZmZpY21hbmFnZXIubmV0IiwiYmxvYi5jb3JlLndpbmRv''@;'; put 'put ''d3MubmV0Iiwic2VydmljZWJ1cy53aW5kb3dzLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5jb20iLCJzbi5teW5ldG5hbWUubmV0Iiwicm91dGluZ3RoZWNsb3VkLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5vcmciLCJjc3guY2MiLCJteWRic2VydmVyLmNvbSIsIndlYnNwYWNlY29uZmlnLmRlIiwi''@;'; put 'put ''bWl0dHdhbGQuaW5mbyIsIm1pdHR3YWxkc2VydmVyLmluZm8iLCJ0eXBvM3NlcnZlci5pbmZvIiwicHJvamVjdC5zcGFjZSIsIm1vZHguZGV2IiwiYm1vYXR0YWNobWVudHMub3JnIiwibmV0LnJ1Iiwib3JnLnJ1IiwicHAucnUiLCJob3N0ZWRwaS5jb20iLCJjYXJhY2FsLm15dGhpYy1iZWFz''@;'; put 'put ''dHMuY29tIiwiY3VzdG9tZXIubXl0aGljLWJlYXN0cy5jb20iLCJmZW50aWdlci5teXRoaWMtYmVhc3RzLmNvbSIsImx5bngubXl0aGljLWJlYXN0cy5jb20iLCJvY2Vsb3QubXl0aGljLWJlYXN0cy5jb20iLCJvbmNpbGxhLm15dGhpYy1iZWFzdHMuY29tIiwib256YS5teXRoaWMtYmVhc3Rz''@;'; put 'put ''LmNvbSIsInNwaGlueC5teXRoaWMtYmVhc3RzLmNvbSIsInZzLm15dGhpYy1iZWFzdHMuY29tIiwieC5teXRoaWMtYmVhc3RzLmNvbSIsInlhbGkubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0LnJldHJvc251Yi5jby51ayIsInVpLm5hYnUuY2FzYSIsImNsb3VkLm5vc3BhbXByb3h5LmNvbSIs''@;'; put 'put ''Im5ldGZ5LmFwcCIsIm5ldGxpZnkuYXBwIiwiNHUuY29tIiwibmZzaG9zdC5jb20iLCJpcGZzLm5mdHN0b3JhZ2UubGluayIsIm5nby51cyIsIm5ncm9rLmFwcCIsIm5ncm9rLWZyZWUuYXBwIiwibmdyb2suZGV2Iiwibmdyb2stZnJlZS5kZXYiLCJuZ3Jvay5pbyIsImFwLm5ncm9rLmlvIiwi''@;'; put 'put ''YXUubmdyb2suaW8iLCJldS5uZ3Jvay5pbyIsImluLm5ncm9rLmlvIiwianAubmdyb2suaW8iLCJzYS5uZ3Jvay5pbyIsInVzLm5ncm9rLmlvIiwibmdyb2sucGl6emEiLCJuZ3Jvay5wcm8iLCJ0b3J1bi5wbCIsIm5oLXNlcnYuY28udWsiLCJuaW1zaXRlLnVrIiwibW1hZmFuLmJpeiIsIm15''@;'; put 'put ''ZnRwLmJpeiIsIm5vLWlwLmJpeiIsIm5vLWlwLmNhIiwiZmFudGFzeWxlYWd1ZS5jYyIsImdvdGRucy5jaCIsIjN1dGlsaXRpZXMuY29tIiwiYmxvZ3N5dGUuY29tIiwiY2lzY29mcmVhay5jb20iLCJkYW1uc2VydmVyLmNvbSIsImRkbnNraW5nLmNvbSIsImRpdGNoeW91cmlwLmNvbSIsImRu''@;'; put 'put ''c2lza2lua3kuY29tIiwiZHlubnMuY29tIiwiZ2Vla2dhbGF4eS5jb20iLCJoZWFsdGgtY2FyZXJlZm9ybS5jb20iLCJob21lc2VjdXJpdHltYWMuY29tIiwiaG9tZXNlY3VyaXR5cGMuY29tIiwibXlhY3RpdmVkaXJlY3RvcnkuY29tIiwibXlzZWN1cml0eWNhbWVyYS5jb20iLCJteXZuYy5j''@;'; put 'put ''b20iLCJuZXQtZnJlYWtzLmNvbSIsIm9udGhld2lmaS5jb20iLCJwb2ludDJ0aGlzLmNvbSIsInF1aWNrc3l0ZXMuY29tIiwic2VjdXJpdHl0YWN0aWNzLmNvbSIsInNlcnZlYmVlci5jb20iLCJzZXJ2ZWNvdW50ZXJzdHJpa2UuY29tIiwic2VydmVleGNoYW5nZS5jb20iLCJzZXJ2ZWZ0cC5j''@;'; put 'put ''b20iLCJzZXJ2ZWdhbWUuY29tIiwic2VydmVoYWxmbGlmZS5jb20iLCJzZXJ2ZWh0dHAuY29tIiwic2VydmVodW1vdXIuY29tIiwic2VydmVpcmMuY29tIiwic2VydmVtcDMuY29tIiwic2VydmVwMnAuY29tIiwic2VydmVwaWNzLmNvbSIsInNlcnZlcXVha2UuY29tIiwic2VydmVzYXJjYXNt''@;'; put 'put ''LmNvbSIsInN0dWZmdG9yZWFkLmNvbSIsInVudXN1YWxwZXJzb24uY29tIiwid29ya2lzYm9yaW5nLmNvbSIsImR2cmNhbS5pbmZvIiwiaWxvdmVjb2xsZWdlLmluZm8iLCJuby1pcC5pbmZvIiwiYnJhc2lsaWEubWUiLCJkZG5zLm1lIiwiZG5zZm9yLm1lIiwiaG9wdG8ubWUiLCJsb2dpbnRv''@;'; put 'put ''Lm1lIiwibm9pcC5tZSIsIndlYmhvcC5tZSIsImJvdW5jZW1lLm5ldCIsImRkbnMubmV0IiwiZWF0aW5nLW9yZ2FuaWMubmV0IiwibXlkaXNzZW50Lm5ldCIsIm15ZWZmZWN0Lm5ldCIsIm15bWVkaWFwYy5uZXQiLCJteXBzeC5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLm5ldCIsIm5obGZhbi5u''@;'; put 'put ''ZXQiLCJuby1pcC5uZXQiLCJwZ2FmYW4ubmV0IiwicHJpdmF0aXplaGVhbHRoaW5zdXJhbmNlLm5ldCIsInJlZGlyZWN0bWUubmV0Iiwic2VydmVibG9nLm5ldCIsInNlcnZlbWluZWNyYWZ0Lm5ldCIsInN5dGVzLm5ldCIsImNhYmxlLW1vZGVtLm9yZyIsImNvbGxlZ2VmYW4ub3JnIiwiY291''@;'; put 'put ''Y2hwb3RhdG9mcmllcy5vcmciLCJob3B0by5vcmciLCJtbGJmYW4ub3JnIiwibXlmdHAub3JnIiwibXlzZWN1cml0eWNhbWVyYS5vcmciLCJuZmxmYW4ub3JnIiwibm8taXAub3JnIiwicmVhZC1ib29rcy5vcmciLCJ1ZmNmYW4ub3JnIiwiemFwdG8ub3JnIiwibm8taXAuY28udWsiLCJnb2xm''@;'; put 'put ''ZmFuLnVzIiwibm9pcC51cyIsInBvaW50dG8udXMiLCJzdGFnZS5ub2RlYXJ0LmlvIiwiKi5kZXZlbG9wZXIuYXBwIiwibm9vcC5hcHAiLCIqLm5vcnRoZmxhbmsuYXBwIiwiKi5idWlsZC5ydW4iLCIqLmNvZGUucnVuIiwiKi5kYXRhYmFzZS5ydW4iLCIqLm1pZ3JhdGlvbi5ydW4iLCJub3Rp''@;'; put 'put ''Y2VhYmxlLm5ld3MiLCJub3Rpb24uc2l0ZSIsImRuc2tpbmcuY2giLCJteXBpLmNvIiwibjR0LmNvIiwiMDAxd3d3LmNvbSIsIm15aXBob3N0LmNvbSIsImZvcnVtei5pbmZvIiwic291bmRjYXN0Lm1lIiwidGNwNC5tZSIsImRuc3VwLm5ldCIsImhpY2FtLm5ldCIsIm5vdy1kbnMubmV0Iiwi''@;'; put 'put ''b3duaXAubmV0IiwidnBuZG5zLm5ldCIsImR5bnNlcnYub3JnIiwibm93LWRucy5vcmciLCJ4NDQzLnB3Iiwibm93LWRucy50b3AiLCJudGRsbC50b3AiLCJmcmVlZGRucy51cyIsIm5zdXBkYXRlLmluZm8iLCJuZXJkcG9sLm92aCIsIm55Yy5tbiIsInBydmN5LnBhZ2UiLCJvYmwub25nIiwi''@;'; put 'put ''b2JzZXJ2YWJsZWhxLmNsb3VkIiwic3RhdGljLm9ic2VydmFibGV1c2VyY29udGVudC5jb20iLCJvbWcubG9sIiwiY2xvdWR5Y2x1c3Rlci5uZXQiLCJvbW5pd2Uuc2l0ZSIsIjEyM3dlYnNlaXRlLmF0IiwiMTIzd2Vic2l0ZS5iZSIsInNpbXBsZXNpdGUuY29tLmJyIiwiMTIzd2Vic2l0ZS5j''@;'; put 'put ''aCIsInNpbXBsZXNpdGUuY29tIiwiMTIzd2Vic2VpdGUuZGUiLCIxMjNoamVtbWVzaWRlLmRrIiwiMTIzbWl3ZWIuZXMiLCIxMjNrb3Rpc2l2dS5maSIsIjEyM3NpdGV3ZWIuZnIiLCJzaW1wbGVzaXRlLmdyIiwiMTIzaG9tZXBhZ2UuaXQiLCIxMjN3ZWJzaXRlLmx1IiwiMTIzd2Vic2l0ZS5u''@;'; put 'put ''bCIsIjEyM2hqZW1tZXNpZGUubm8iLCJzZXJ2aWNlLm9uZSIsInNpbXBsZXNpdGUucGwiLCIxMjNwYWdpbmF3ZWIucHQiLCIxMjNtaW5zaWRhLnNlIiwiaXMtYS1mdWxsc3RhY2suZGV2IiwiaXMtY29vbC5kZXYiLCJpcy1ub3QtYS5kZXYiLCJsb2NhbHBsYXllci5kZXYiLCJpcy1sb2NhbC5v''@;'; put 'put ''cmciLCJvcGVuc29jaWFsLnNpdGUiLCJvcGVuY3JhZnQuaG9zdGluZyIsIjE2LWIuaXQiLCIzMi1iLml0IiwiNjQtYi5pdCIsIm9yc2l0ZXMuY29tIiwib3BlcmF1bml0ZS5jb20iLCIqLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jaS5jdXN0b21lci1vY2kuY29tIiwiKi5vY3AuY3VzdG9tZXIt''@;'; put 'put ''b2NpLmNvbSIsIioub2NzLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9yYWNsZWNsb3VkYXBwcy5jb20iLCIqLm9yYWNsZWdvdmNsb3VkYXBwcy5jb20iLCIqLm9yYWNsZWdvdmNsb3VkYXBwcy51ayIsInRlY2gub3JhbmdlIiwiY2FuLnJlIiwiYXV0aGdlYXItc3RhZ2luZy5jb20iLCJhdXRoZ2Vh''@;'; put 'put ''cmFwcHMuY29tIiwic2t5Z2VhcmFwcC5jb20iLCJvdXRzeXN0ZW1zY2xvdWQuY29tIiwiKi5ob3N0aW5nLm92aC5uZXQiLCIqLndlYnBhYXMub3ZoLm5ldCIsIm93bnByb3ZpZGVyLmNvbSIsIm93bi5wbSIsIioub3dvLmNvZGVzIiwib3gucnMiLCJveS5sYyIsInBnZm9nLmNvbSIsInBhZ2V4''@;'; put 'put ''bC5jb20iLCJnb3RwYW50aGVvbi5jb20iLCJwYW50aGVvbnNpdGUuaW8iLCIqLnBheXdoaXJsLmNvbSIsIioueG1pdC5jbyIsInhtaXQuZGV2IiwibWFkZXRoaXMuc2l0ZSIsInNydi51cyIsImdoLnNydi51cyIsImdsLnNydi51cyIsImxrMy5ydSIsIm15cGVwLmxpbmsiLCJwZXJzcGVjdGEu''@;'; put 'put ''Y2xvdWQiLCJvbi13ZWIuZnIiLCIqLnVwc3VuLmFwcCIsInVwc3VuYXBwLmNvbSIsImVudC5wbGF0Zm9ybS5zaCIsImV1LnBsYXRmb3JtLnNoIiwidXMucGxhdGZvcm0uc2giLCIqLnBsYXRmb3Jtc2guc2l0ZSIsIioudHN0LnNpdGUiLCJwbGF0dGVyLWFwcC5jb20iLCJwbGF0dGVyLWFwcC5k''@;'; put 'put ''ZXYiLCJwbGF0dGVycC51cyIsInBsZXkuZ2FtZXMiLCJvbnBvcnRlci5ydW4iLCJjby5ibiIsInBvc3RtYW4tZWNoby5jb20iLCJwc3Rtbi5pbyIsIm1vY2sucHN0bW4uaW8iLCJodHRwYmluLm9yZyIsInByZXF1YWxpZnltZS50b2RheSIsInhlbi5wcmdtci5jb20iLCJwcml2LmF0IiwicHJv''@;'; put 'put ''dG9uZXQuaW8iLCJjaGlydXJnaWVucy1kZW50aXN0ZXMtZW4tZnJhbmNlLmZyIiwiYnllbi5zaXRlIiwicHVidGxzLm9yZyIsInB5dGhvbmFueXdoZXJlLmNvbSIsImV1LnB5dGhvbmFueXdoZXJlLmNvbSIsInFhMi5jb20iLCJxY3guaW8iLCIqLnN5cy5xY3guaW8iLCJteXFuYXBjbG91ZC5j''@;'; put 'put ''biIsImFscGhhLW15cW5hcGNsb3VkLmNvbSIsImRldi1teXFuYXBjbG91ZC5jb20iLCJteWNsb3VkbmFzLmNvbSIsIm15bmFzY2xvdWQuY29tIiwibXlxbmFwY2xvdWQuY29tIiwicW90by5pbyIsInF1YWxpZmlvYXBwLmNvbSIsImxhZGVzay5jb20iLCJxYnVzZXIuY29tIiwiKi5xdWlwZWxl''@;'; put 'put ''bWVudHMuY29tIiwidmFwb3IuY2xvdWQiLCJ2YXBvcmNsb3VkLmlvIiwicmFja21hemUuY29tIiwicmFja21hemUubmV0IiwiY2xvdWRzaXRlLmJ1aWxkZXJzIiwibXlyYWR3ZWIubmV0Iiwic2VydmVybmFtZS51cyIsIndlYi5pbiIsImluLm5ldCIsIm15cmRieC5pbyIsInNpdGUucmItaG9z''@;'; put 'put ''dGluZy5pbyIsIioub24tcmFuY2hlci5jbG91ZCIsIioub24tazNzLmlvIiwiKi5vbi1yaW8uaW8iLCJyYXZwYWdlLmNvLmlsIiwicmVhZHRoZWRvY3MtaG9zdGVkLmNvbSIsInJlYWR0aGVkb2NzLmlvIiwicmhjbG91ZC5jb20iLCJpbnN0YW5jZXMuc3Bhd24uY2MiLCJvbnJlbmRlci5jb20i''@;'; put 'put ''LCJhcHAucmVuZGVyLmNvbSIsInJlcGxpdC5hcHAiLCJpZC5yZXBsaXQuYXBwIiwiZmlyZXdhbGxlZHJlcGxpdC5jbyIsImlkLmZpcmV3YWxsZWRyZXBsaXQuY28iLCJyZXBsLmNvIiwiaWQucmVwbC5jbyIsInJlcGxpdC5kZXYiLCJhcmNoZXIucmVwbGl0LmRldiIsImJvbmVzLnJlcGxpdC5k''@;'; put 'put ''ZXYiLCJjYW5hcnkucmVwbGl0LmRldiIsImdsb2JhbC5yZXBsaXQuZGV2IiwiaGFja2VyLnJlcGxpdC5kZXYiLCJpZC5yZXBsaXQuZGV2IiwiamFuZXdheS5yZXBsaXQuZGV2Iiwia2ltLnJlcGxpdC5kZXYiLCJraXJhLnJlcGxpdC5kZXYiLCJraXJrLnJlcGxpdC5kZXYiLCJvZG8ucmVwbGl0''@;'; put 'put ''LmRldiIsInBhcmlzLnJlcGxpdC5kZXYiLCJwaWNhcmQucmVwbGl0LmRldiIsInBpa2UucmVwbGl0LmRldiIsInByZXJlbGVhc2UucmVwbGl0LmRldiIsInJlZWQucmVwbGl0LmRldiIsInJpa2VyLnJlcGxpdC5kZXYiLCJzaXNrby5yZXBsaXQuZGV2Iiwic3BvY2sucmVwbGl0LmRldiIsInN0''@;'; put 'put ''YWdpbmcucmVwbGl0LmRldiIsInN1bHUucmVwbGl0LmRldiIsInRhcnBpdC5yZXBsaXQuZGV2IiwidGVhbXMucmVwbGl0LmRldiIsInR1Y2tlci5yZXBsaXQuZGV2Iiwid2VzbGV5LnJlcGxpdC5kZXYiLCJ3b3JmLnJlcGxpdC5kZXYiLCJyZXBsLnJ1biIsInJlc2luZGV2aWNlLmlvIiwiZGV2''@;'; put 'put ''aWNlcy5yZXNpbnN0YWdpbmcuaW8iLCJoemMuaW8iLCJhZGltby5jby51ayIsIml0Y291bGRiZXdvci5zZSIsImF1cy5iYXNrZXRiYWxsIiwibnouYmFza2V0YmFsbCIsImdpdC1wYWdlcy5yaXQuZWR1Iiwicm9ja3kucGFnZSIsInJ1Yi5kZSIsInJ1aHItdW5pLWJvY2h1bS5kZSIsImlvLm5v''@;'; put 'put ''Yy5ydWhyLXVuaS1ib2NodW0uZGUiLCJcdTA0MzFcdTA0MzhcdTA0MzcuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDNlXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQ0MFx1MDQ0Ylx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0MzhcdTA0''@;'; put 'put ''NDAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDQxXHUwNDNhLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0MzBcdTA0M2NcdTA0MzBcdTA0NDBcdTA0MzAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUw''@;'; put 'put ''NDQxXHUwNDNlXHUwNDQ3XHUwNDM4Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzZlx1MDQzMS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NGYuXHUwNDQwXHUwNDQzXHUwNDQxIiwicmFzLnJ1IiwibnlhdC5hcHAiLCIxODByLmNvbSIsImRvamluLmNvbSIsInNha3VyYXRhbi5j''@;'; put 'put ''b20iLCJzYWt1cmF3ZWIuY29tIiwieDAuY29tIiwiMi1kLmpwIiwiYm9uYS5qcCIsImNyYXAuanAiLCJkYXluaWdodC5qcCIsImVlay5qcCIsImZsb3AuanAiLCJoYWxmbW9vbi5qcCIsImplZXouanAiLCJtYXRyaXguanAiLCJtaW1vemEuanAiLCJpdm9yeS5uZS5qcCIsIm1haWwtYm94Lm5l''@;'; put 'put ''LmpwIiwibWludHMubmUuanAiLCJtb2t1cmVuLm5lLmpwIiwib3BhbC5uZS5qcCIsInNha3VyYS5uZS5qcCIsInN1bW9tby5uZS5qcCIsInRvcGF6Lm5lLmpwIiwibmV0Z2FtZXJzLmpwIiwibnlhbnRhLmpwIiwibzBvMC5qcCIsInJkeS5qcCIsInJnci5qcCIsInJ1bGV6LmpwIiwiczMuaXNr''@;'; put 'put ''MDEuc2FrdXJhc3RvcmFnZS5qcCIsInMzLmlzazAyLnNha3VyYXN0b3JhZ2UuanAiLCJzYWxvb24uanAiLCJzYmxvLmpwIiwic2tyLmpwIiwidGFuay5qcCIsInVoLW9oLmpwIiwidW5kby5qcCIsInJzLndlYmFjY2VsLmpwIiwidXNlci53ZWJhY2NlbC5qcCIsIndlYnNvemFpLmpwIiwieGlp''@;'; put 'put ''LmpwIiwic3F1YXJlcy5uZXQiLCJqcG4ub3JnIiwia2lyYXJhLnN0IiwieDAudG8iLCJmcm9tLnR2Iiwic2FrdXJhLnR2IiwiKi5idWlsZGVyLmNvZGUuY29tIiwiKi5kZXYtYnVpbGRlci5jb2RlLmNvbSIsIiouc3RnLWJ1aWxkZXIuY29kZS5jb20iLCIqLjAwMS50ZXN0LmNvZGUtYnVpbGRl''@;'; put 'put ''ci1zdGcucGxhdGZvcm0uc2FsZXNmb3JjZS5jb20iLCIqLmQuY3JtLmRldiIsIioudy5jcm0uZGV2IiwiKi53YS5jcm0uZGV2IiwiKi53Yi5jcm0uZGV2IiwiKi53Yy5jcm0uZGV2IiwiKi53ZC5jcm0uZGV2IiwiKi53ZS5jcm0uZGV2IiwiKi53Zi5jcm0uZGV2Iiwic2FuZGNhdHMuaW8iLCJs''@;'; put 'put ''b2dvaXAuY29tIiwibG9nb2lwLmRlIiwiZnItcGFyLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImZyLXBhci0yLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJubC1hbXMtMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiY29ja3BpdC5mci1wYXIuc2N3LmNsb3VkIiwiZm5jLmZyLXBhci5zY3cuY2xvdWQi''@;'; put 'put ''LCJmdW5jdGlvbnMuZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJrOHMuZnItcGFyLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5mci1wYXIuc2N3LmNsb3VkIiwiczMuZnItcGFyLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUuZnItcGFyLnNjdy5jbG91ZCIsIndobS5mci1wYXIuc2N3LmNsb3VkIiwicHJp''@;'; put 'put ''di5pbnN0YW5jZXMuc2N3LmNsb3VkIiwicHViLmluc3RhbmNlcy5zY3cuY2xvdWQiLCJrOHMuc2N3LmNsb3VkIiwiY29ja3BpdC5ubC1hbXMuc2N3LmNsb3VkIiwiazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMubmwtYW1zLnNjdy5jbG91ZCIsInMzLm5sLWFtcy5zY3cuY2xvdWQi''@;'; put 'put ''LCJzMy13ZWJzaXRlLm5sLWFtcy5zY3cuY2xvdWQiLCJ3aG0ubmwtYW1zLnNjdy5jbG91ZCIsImNvY2twaXQucGwtd2F3LnNjdy5jbG91ZCIsIms4cy5wbC13YXcuc2N3LmNsb3VkIiwibm9kZXMuazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy5wbC13YXcuc2N3LmNsb3VkIiwiczMtd2Vic2l0''@;'; put 'put ''ZS5wbC13YXcuc2N3LmNsb3VkIiwic2NhbGVib29rLnNjdy5jbG91ZCIsInNtYXJ0bGFiZWxpbmcuc2N3LmNsb3VkIiwiZGVkaWJveC5mciIsInNjaG9rb2tla3MubmV0IiwiZ292LnNjb3QiLCJzZXJ2aWNlLmdvdi5zY290Iiwic2NyeXNlYy5jb20iLCJjbGllbnQuc2NyeXB0ZWQuaW8iLCJm''@;'; put 'put ''aXJld2FsbC1nYXRld2F5LmNvbSIsImZpcmV3YWxsLWdhdGV3YXkuZGUiLCJteS1nYXRld2F5LmRlIiwibXktcm91dGVyLmRlIiwic3BkbnMuZGUiLCJzcGRucy5ldSIsImZpcmV3YWxsLWdhdGV3YXkubmV0IiwibXktZmlyZXdhbGwub3JnIiwibXlmaXJld2FsbC5vcmciLCJzcGRucy5vcmci''@;'; put 'put ''LCJzZWlkYXQubmV0Iiwic2VsbGZ5LnN0b3JlIiwibWluaXNpdGUubXMiLCJzZW5zZWVyaW5nLm5ldCIsInNlcnZlYm9sdC5jbG91ZCIsImJpei51YSIsImNvLnVhIiwicHAudWEiLCJhcy5zaC5jbiIsInNoZWV6eS5nYW1lcyIsInNoaWZ0ZWRpdC5pbyIsIm15c2hvcGJsb2Nrcy5jb20iLCJt''@;'; put 'put ''eXNob3BpZnkuY29tIiwic2hvcGl0c2l0ZS5jb20iLCJzaG9wd2FyZS5zaG9wIiwic2hvcHdhcmUuc3RvcmUiLCJtby1zaWVtZW5zLmlvIiwiMWthcHAuY29tIiwiYXBwY2hpemkuY29tIiwiYXBwbGluemkuY29tIiwic2luYWFwcC5jb20iLCJ2aXBzaW5hYXBwLmNvbSIsInNpdGVsZWFmLm5l''@;'; put 'put ''dCIsInNtYWxsLXdlYi5vcmciLCJhZXJvcG9ydC5mciIsImF2b2NhdC5mciIsImNoYW1iYWdyaS5mciIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy5mciIsImV4cGVydHMtY29tcHRhYmxlcy5mciIsIm1lZGVjaW4uZnIiLCJub3RhaXJlcy5mciIsInBoYXJtYWNpZW4uZnIiLCJwb3J0LmZyIiwi''@;'; put 'put ''dmV0ZXJpbmFpcmUuZnIiLCJ2cDQubWUiLCIqLnNub3dmbGFrZS5hcHAiLCIqLnByaXZhdGVsaW5rLnNub3dmbGFrZS5hcHAiLCJzdHJlYW1saXQuYXBwIiwic3RyZWFtbGl0YXBwLmNvbSIsInRyeS1zbm93cGxvdy5jb20iLCJtYWZlbG8ubmV0IiwicGxheXN0YXRpb24tY2xvdWQuY29tIiwi''@;'; put 'put ''c3JodC5zaXRlIiwiYXBwcy5sYWlyLmlvIiwiKi5zdG9sb3MuaW8iLCJzcGFjZWtpdC5pbyIsImluZC5tb20iLCJjdXN0b21lci5zcGVlZHBhcnRuZXIuZGUiLCJteXNwcmVhZHNob3AuYXQiLCJteXNwcmVhZHNob3AuY29tLmF1IiwibXlzcHJlYWRzaG9wLmJlIiwibXlzcHJlYWRzaG9wLmNh''@;'; put 'put ''IiwibXlzcHJlYWRzaG9wLmNoIiwibXlzcHJlYWRzaG9wLmNvbSIsIm15c3ByZWFkc2hvcC5kZSIsIm15c3ByZWFkc2hvcC5kayIsIm15c3ByZWFkc2hvcC5lcyIsIm15c3ByZWFkc2hvcC5maSIsIm15c3ByZWFkc2hvcC5mciIsIm15c3ByZWFkc2hvcC5pZSIsIm15c3ByZWFkc2hvcC5pdCIs''@;'; put 'put ''Im15c3ByZWFkc2hvcC5uZXQiLCJteXNwcmVhZHNob3AubmwiLCJteXNwcmVhZHNob3Aubm8iLCJteXNwcmVhZHNob3AucGwiLCJteXNwcmVhZHNob3Auc2UiLCJteXNwcmVhZHNob3AuY28udWsiLCJ3LWNvcnAtc3RhdGljYmxpdHouY29tIiwidy1jcmVkZW50aWFsbGVzcy1zdGF0aWNibGl0''@;'; put 'put ''ei5jb20iLCJ3LXN0YXRpY2JsaXR6LmNvbSIsInN0YWNraGVyby1uZXR3b3JrLmNvbSIsInJ1bnMub25zdGFja2l0LmNsb3VkIiwic3RhY2tpdC5nZyIsInN0YWNraXQucm9ja3MiLCJzdGFja2l0LnJ1biIsInN0YWNraXQuem9uZSIsIm11c2ljaWFuLmlvIiwibm92ZWNvcmUuc2l0ZSIsImFw''@;'; put 'put ''aS5zdGRsaWIuY29tIiwiZmVlZGJhY2suYWMiLCJmb3Jtcy5hYyIsImFzc2Vzc21lbnRzLmN4IiwiY2FsY3VsYXRvcnMuY3giLCJmdW5uZWxzLmN4IiwicGF5bm93LmN4IiwicXVpenplcy5jeCIsInJlc2VhcmNoZWQuY3giLCJ0ZXN0cy5jeCIsInN1cnZleXMuc28iLCJzdG9yZWJhc2Uuc3Rv''@;'; put 'put ''cmUiLCJzdG9yaXByZXNzLmFwcCIsInN0b3JqLmZhcm0iLCJzdHJhcGlhcHAuY29tIiwibWVkaWEuc3RyYXBpYXBwLmNvbSIsInZwcy1ob3N0Lm5ldCIsImF0bC5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJuanMuamVsYXN0aWMudnBzLWhvc3QubmV0IiwicmljLmplbGFzdGljLnZwcy1ob3N0''@;'; put 'put ''Lm5ldCIsInN0cmVhay1saW5rLmNvbSIsInN0cmVha2xpbmtzLmNvbSIsInN0cmVha3VzZXJjb250ZW50LmNvbSIsInNvYy5zcmNmLm5ldCIsInVzZXIuc3JjZi5uZXQiLCJ1dHdlbnRlLmlvIiwidGVtcC1kbnMuY29tIiwic3VwYWJhc2UuY28iLCJzdXBhYmFzZS5pbiIsInN1cGFiYXNlLm5l''@;'; put 'put ''dCIsInN5bmNsb3VkLml0IiwiZHNjbG91ZC5iaXoiLCJkaXJlY3QucXVpY2tjb25uZWN0LmNuIiwiZHNteW5hcy5jb20iLCJmYW1pbHlkcy5jb20iLCJkaXNrc3RhdGlvbi5tZSIsImRzY2xvdWQubWUiLCJpMjM0Lm1lIiwibXlkcy5tZSIsInN5bm9sb2d5Lm1lIiwiZHNjbG91ZC5tb2JpIiwi''@;'; put 'put ''ZHNteW5hcy5uZXQiLCJmYW1pbHlkcy5uZXQiLCJkc215bmFzLm9yZyIsImZhbWlseWRzLm9yZyIsImRpcmVjdC5xdWlja2Nvbm5lY3QudG8iLCJ2cG5wbHVzLnRvIiwibXl0YWJpdC5jb20iLCJteXRhYml0LmNvLmlsIiwidGFiaXRvcmRlci5jby5pbCIsInRhaWZ1bi1kbnMuZGUiLCJ0cy5u''@;'; put 'put ''ZXQiLCIqLmMudHMubmV0IiwiZ2RhLnBsIiwiZ2RhbnNrLnBsIiwiZ2R5bmlhLnBsIiwibWVkLnBsIiwic29wb3QucGwiLCJ0YXZldXNlcmNvbnRlbnQuY29tIiwicC50YXdrLmVtYWlsIiwicC50YXdrdG8uZW1haWwiLCJzaXRlLnRiLWhvc3RpbmcuY29tIiwiZWR1Z2l0LmlvIiwiczMudGVj''@;'; put 'put ''a2lkcy5vcmciLCJ0ZWxlYml0LmFwcCIsInRlbGViaXQuaW8iLCIqLnRlbGViaXQueHl6IiwiKi5maXJlbmV0LmNoIiwiKi5zdmMuZmlyZW5ldC5jaCIsInJlc2VydmQuY29tIiwidGhpbmdkdXN0ZGF0YS5jb20iLCJjdXN0LmRldi50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRldi50aGluZ2R1''@;'; put 'put ''c3QuaW8iLCJjdXN0LmRpc3JlYy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRpc3JlYy50aGluZ2R1c3QuaW8iLCJjdXN0LnByb2QudGhpbmdkdXN0LmlvIiwiY3VzdC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInJlc2VydmQudGVzdGluZy50aGluZ2R1c3QuaW8iLCJ0aWNrZXRzLmlvIiwiYXJ2''@;'; put 'put ''by5uZXR3b3JrIiwiYXppbXV0aC5uZXR3b3JrIiwidGxvbi5uZXR3b3JrIiwidG9ycHJvamVjdC5uZXQiLCJwYWdlcy50b3Jwcm9qZWN0Lm5ldCIsInRvd25uZXdzLXN0YWdpbmcuY29tIiwiMTJocC5hdCIsIjJpeC5hdCIsIjRsaW1hLmF0IiwibGltYS1jaXR5LmF0IiwiMTJocC5jaCIsIjJp''@;'; put 'put ''eC5jaCIsIjRsaW1hLmNoIiwibGltYS1jaXR5LmNoIiwidHJhZmZpY3BsZXguY2xvdWQiLCJkZS5jb29sIiwiMTJocC5kZSIsIjJpeC5kZSIsIjRsaW1hLmRlIiwibGltYS1jaXR5LmRlIiwiMTMzNy5waWN0dXJlcyIsImNsYW4ucmlwIiwibGltYS1jaXR5LnJvY2tzIiwid2Vic3BhY2Uucm9j''@;'; put 'put ''a3MiLCJsaW1hLnpvbmUiLCIqLnRyYW5zdXJsLmJlIiwiKi50cmFuc3VybC5ldSIsInNpdGUudHJhbnNpcC5tZSIsIioudHJhbnN1cmwubmwiLCJ0dXhmYW1pbHkub3JnIiwiZGQtZG5zLmRlIiwiZHJheS1kbnMuZGUiLCJkcmF5ZG5zLmRlIiwiZHluLXZwbi5kZSIsImR5bnZwbi5kZSIsIm1l''@;'; put 'put ''aW4tdmlnb3IuZGUiLCJteS12aWdvci5kZSIsIm15LXdhbi5kZSIsInN5bm8tZHMuZGUiLCJzeW5vbG9neS1kaXNrc3RhdGlvbi5kZSIsInN5bm9sb2d5LWRzLmRlIiwiZGlza3N0YXRpb24uZXUiLCJkaXNrc3RhdGlvbi5vcmciLCJ0eXBlZHJlYW0uYXBwIiwicHJvLnR5cGVmb3JtLmNvbSIs''@;'; put 'put ''IioudWJlcnNwYWNlLmRlIiwidWJlci5zcGFjZSIsImhrLmNvbSIsImluYy5oayIsImx0ZC5oayIsImhrLm9yZyIsIml0LmNvbSIsInVuaXNvbi1zZXJ2aWNlcy5jbG91ZCIsInZpcnR1YWwtdXNlci5kZSIsInZpcnR1YWx1c2VyLmRlIiwibmFtZS5wbSIsInNjaC50ZiIsImJpei53ZiIsInNj''@;'; put 'put ''aC53ZiIsIm9yZy55dCIsInJzLmJhIiwiYmllbHNrby5wbCIsInVwbGkuaW8iLCJ1cm93bi5jbG91ZCIsImRuc3VwZGF0ZS5pbmZvIiwidXMub3JnIiwidi51YSIsImV4cHJlc3MudmFsLnJ1biIsIndlYi52YWwucnVuIiwidmVyY2VsLmFwcCIsInYwLmJ1aWxkIiwidmVyY2VsLmRldiIsInZ1''@;'; put 'put ''c2VyY29udGVudC5uZXQiLCJub3cuc2giLCIyMDM4LmlvIiwicm91dGVyLm1hbmFnZW1lbnQiLCJ2LWluZm8uaW5mbyIsInZvb3Jsb3Blci5jbG91ZCIsIioudnVsdHJvYmplY3RzLmNvbSIsIndhZmZsZWNlbGwuY29tIiwid2ViZmxvdy5pbyIsIndlYmZsb3d0ZXN0LmlvIiwiKi53ZWJoYXJl''@;'; put 'put ''LmRldiIsImJvb2tvbmxpbmUuYXBwIiwiaG90ZWx3aXRoZmxpZ2h0LmNvbSIsInJlc2VydmUtb25saW5lLmNvbSIsInJlc2VydmUtb25saW5lLm5ldCIsImNwcmFwaWQuY29tIiwicGxlc2tucy5jb20iLCJ3cDIuaG9zdCIsInBkbnMucGFnZSIsInBsZXNrLnBhZ2UiLCJ3cHNxdWFyZWQuc2l0''@;'; put 'put ''ZSIsIioud2FkbC50b3AiLCJyZW1vdGV3ZC5jb20iLCJib3guY2EiLCJwYWdlcy53aWFyZHdlYi5jb20iLCJ0b29sZm9yZ2Uub3JnIiwid21jbG91ZC5vcmciLCJ3bWZsYWJzLm9yZyIsIndkaC5hcHAiLCJwYW5lbC5nZyIsImRhZW1vbi5wYW5lbC5nZyIsIndpeHNpdGUuY29tIiwid2l4c3R1''@;'; put 'put ''ZGlvLmNvbSIsImVkaXRvcnguaW8iLCJ3aXhzdHVkaW8uaW8iLCJ3aXgucnVuIiwibWVzc3dpdGhkbnMuY29tIiwid29sdGxhYi1kZW1vLmNvbSIsIm15Zm9ydW0uY29tbXVuaXR5IiwiY29tbXVuaXR5LXByby5kZSIsImRpc2t1c3Npb25zYmVyZWljaC5kZSIsImNvbW11bml0eS1wcm8ubmV0''@;'; put 'put ''IiwibWVpbmZvcnVtLm5ldCIsImFmZmluaXR5bG90dGVyeS5vcmcudWsiLCJyYWZmbGVlbnRyeS5vcmcudWsiLCJ3ZWVrbHlsb3R0ZXJ5Lm9yZy51ayIsIndwZW5naW5lcG93ZXJlZC5jb20iLCJqcy53cGVuZ2luZXBvd2VyZWQuY29tIiwiaGFsZi5ob3N0IiwieG5iYXkuY29tIiwidTIueG5i''@;'; put 'put ''YXkuY29tIiwidTItbG9jYWwueG5iYXkuY29tIiwiY2lzdHJvbi5ubCIsImRlbW9uLm5sIiwieHM0YWxsLnNwYWNlIiwieWFuZGV4Y2xvdWQubmV0Iiwic3RvcmFnZS55YW5kZXhjbG91ZC5uZXQiLCJ3ZWJzaXRlLnlhbmRleGNsb3VkLm5ldCIsIm9mZmljaWFsLmFjYWRlbXkiLCJ5b2xhc2l0''@;'; put 'put ''ZS5jb20iLCJ5b21iby5tZSIsInluaC5mciIsIm5vaG9zdC5tZSIsIm5vaG8uc3QiLCJ6YS5uZXQiLCJ6YS5vcmciLCJ6YXAuY2xvdWQiLCJ6ZWFidXIuYXBwIiwiYnNzLmRlc2lnbiIsImJhc2ljc2VydmVyLmlvIiwidmlydHVhbHNlcnZlci5pbyIsImVudGVycHJpc2VjbG91ZC5udSJdLnJl''@;'; put 'put ''ZHVjZSgoWSxxKT0+e2NvbnN0IGVlPXEucmVwbGFjZSgvXihcKlwufFwhKS8sIiIpLEo9dy50b0FTQ0lJKGVlKSxuZT1xLmNoYXJBdCgwKTtpZihZLmhhcyhKKSl0aHJvdyBuZXcgRXJyb3IoYE11bHRpcGxlIHJ1bGVzIGZvdW5kIGZvciAke3F9ICgke0p9KWApO3JldHVybiBZLnNldChKLHty''@;'; put 'put ''dWxlOnEsc3VmZml4OmVlLHB1bnlTdWZmaXg6Six3aWxkY2FyZDoiKiI9PT1uZSxleGNlcHRpb246IiEiPT09bmV9KSxZfSxuZXcgTWFwKSx6PXtET01BSU5fVE9PX1NIT1JUOiJEb21haW4gbmFtZSB0b28gc2hvcnQuIixET01BSU5fVE9PX0xPTkc6IkRvbWFpbiBuYW1lIHRvbyBsb25nLiBJ''@;'; put 'put ''dCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDI1NSBjaGFycy4iLExBQkVMX1NUQVJUU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3Qgc3RhcnQgd2l0aCBhIGRhc2guIixMQUJFTF9FTkRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBlbmQgd2l0aCBh''@;'; put 'put ''IGRhc2guIixMQUJFTF9UT09fTE9ORzoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IG1vc3QgNjMgY2hhcnMgbG9uZy4iLExBQkVMX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IGxlYXN0IDEgY2hhcmFjdGVyIGxvbmcuIixMQUJFTF9JTlZBTElEX0NI''@;'; put 'put ''QVJTOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGRhc2hlcy4ifSxMPVk9PntpZigic3RyaW5nIiE9dHlwZW9mIFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWluIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4iKTtsZXQgcT1Z''@;'; put 'put ''LnNsaWNlKDApLnRvTG93ZXJDYXNlKCk7Ii4iPT09cS5jaGFyQXQocS5sZW5ndGgtMSkmJihxPXEuc2xpY2UoMCxxLmxlbmd0aC0xKSk7Y29uc3QgZWU9KFk9Pntjb25zdCBxPXcudG9BU0NJSShZKTtpZihxLmxlbmd0aDwxKXJldHVybiJET01BSU5fVE9PX1NIT1JUIjtpZihxLmxlbmd0aD4y''@;'; put 'put ''NTUpcmV0dXJuIkRPTUFJTl9UT09fTE9ORyI7Y29uc3QgZWU9cS5zcGxpdCgiLiIpO2xldCBKO2ZvcihsZXQgbmU9MDtuZTxlZS5sZW5ndGg7KytuZSl7aWYoSj1lZVtuZV0sIUoubGVuZ3RoKXJldHVybiJMQUJFTF9UT09fU0hPUlQiO2lmKEoubGVuZ3RoPjYzKXJldHVybiJMQUJFTF9UT09f''@;'; put 'put ''TE9ORyI7aWYoIi0iPT09Si5jaGFyQXQoMCkpcmV0dXJuIkxBQkVMX1NUQVJUU19XSVRIX0RBU0giO2lmKCItIj09PUouY2hhckF0KEoubGVuZ3RoLTEpKXJldHVybiJMQUJFTF9FTkRTX1dJVEhfREFTSCI7aWYoIS9eW2EtejAtOVwtX10rJC8udGVzdChKKSlyZXR1cm4iTEFCRUxfSU5WQUxJ''@;'; put 'put ''RF9DSEFSUyJ9fSkocSk7aWYoZWUpcmV0dXJue2lucHV0OlksZXJyb3I6e21lc3NhZ2U6eltlZV0sY29kZTplZX19O2NvbnN0IEo9e2lucHV0OlksdGxkOm51bGwsc2xkOm51bGwsZG9tYWluOm51bGwsc3ViZG9tYWluOm51bGwsbGlzdGVkOiExfSxuZT1xLnNwbGl0KCIuIik7aWYoImxvY2Fs''@;'; put 'put ''Ij09PW5lW25lLmxlbmd0aC0xXSlyZXR1cm4gSjtjb25zdCBpZT0oKT0+KC94bi0tLy50ZXN0KHEpJiYoSi5kb21haW4mJihKLmRvbWFpbj13LnRvQVNDSUkoSi5kb21haW4pKSxKLnN1YmRvbWFpbiYmKEouc3ViZG9tYWluPXcudG9BU0NJSShKLnN1YmRvbWFpbikpKSxKKSxsZT0oWT0+e2Nv''@;'; put 'put ''bnN0IHE9dy50b0FTQ0lJKFkpLnNwbGl0KCIuIik7Zm9yKGxldCBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe2NvbnN0IEo9cS5zbGljZShlZSkuam9pbigiLiIpLG5lPUYuZ2V0KEopO2lmKG5lKXJldHVybiBuZX1yZXR1cm4gbnVsbH0pKHEpO2lmKCFsZSlyZXR1cm4gbmUubGVuZ3RoPDI/Sjoo''@;'; put 'put ''Si50bGQ9bmUucG9wKCksSi5zbGQ9bmUucG9wKCksSi5kb21haW49W0ouc2xkLEoudGxkXS5qb2luKCIuIiksbmUubGVuZ3RoJiYoSi5zdWJkb21haW49bmUucG9wKCkpLGllKCkpO0oubGlzdGVkPSEwO2NvbnN0IG1lPWxlLnN1ZmZpeC5zcGxpdCgiLiIpLF9lPW5lLnNsaWNlKDAsbmUubGVu''@;'; put 'put ''Z3RoLW1lLmxlbmd0aCk7cmV0dXJuIGxlLmV4Y2VwdGlvbiYmX2UucHVzaChtZS5zaGlmdCgpKSxKLnRsZD1tZS5qb2luKCIuIiksIV9lLmxlbmd0aHx8KGxlLndpbGRjYXJkJiYobWUudW5zaGlmdChfZS5wb3AoKSksSi50bGQ9bWUuam9pbigiLiIpKSwhX2UubGVuZ3RoKXx8KEouc2xkPV9l''@;'; put 'put ''LnBvcCgpLEouZG9tYWluPVtKLnNsZCxKLnRsZF0uam9pbigiLiIpLF9lLmxlbmd0aCYmKEouc3ViZG9tYWluPV9lLmpvaW4oIi4iKSkpLGllKCl9LEs9WT0+WSYmTChZKS5kb21haW58fG51bGwsVT1ZPT57Y29uc3QgcT1MKFkpO3JldHVybiEoIXEuZG9tYWlufHwhcS5saXN0ZWQpfTtYLmRl''@;'; put 'put ''ZmF1bHQ9e3BhcnNlOkwsZ2V0OkssaXNWYWxpZDpVfSxYLmVycm9yQ29kZXM9eixYLmdldD1LLFguaXNWYWxpZD1VLFgucGFyc2U9TH0sNDk0Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgs''@;'; put 'put ''Iml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUi''@;'; put 'put ''OiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlw''@;'; put 'put ''ZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVz''@;'; put 'put ''MTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoi''@;'; put 'put ''QUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5''@;'; put 'put ''IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIs''@;'; put 'put ''Iml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6''@;'; put 'put ''MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJt''@;'; put 'put ''b2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9G''@;'; put 'put ''QiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUi''@;'; put 'put ''OiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0i''@;'; put 'put ''fSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdj''@;'; put 'put ''bSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNTIwNzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJz''@;'; put 'put ''aGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FF''@;'; put 'put ''bmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1''@;'; put 'put ''MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNo''@;'; put 'put ''YTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1''@;'; put 'put ''MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0s''@;'; put 'put ''ImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQi''@;'; put 'put ''Onsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwi''@;'; put 'put ''aGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIs''@;'; put 'put ''ImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQi''@;'; put 'put ''LCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlk''@;'; put 'put ''IjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6''@;'; put 'put ''eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwi''@;'; put 'put ''UlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDEzMDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4x''@;'; put 'put ''MzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwzMjA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJz''@;'; put 'put ''ZSgneyJPX1JET05MWSI6MCwiT19XUk9OTFkiOjEsIk9fUkRXUiI6MiwiU19JRk1UIjo2MTQ0MCwiU19JRlJFRyI6MzI3NjgsIlNfSUZESVIiOjE2Mzg0LCJTX0lGQ0hSIjo4MTkyLCJTX0lGQkxLIjoyNDU3NiwiU19JRklGTyI6NDA5NiwiU19JRkxOSyI6NDA5NjAsIlNfSUZTT0NLIjo0OTE1''@;'; put 'put ''MiwiT19DUkVBVCI6NTEyLCJPX0VYQ0wiOjIwNDgsIk9fTk9DVFRZIjoxMzEwNzIsIk9fVFJVTkMiOjEwMjQsIk9fQVBQRU5EIjo4LCJPX0RJUkVDVE9SWSI6MTA0ODU3NiwiT19OT0ZPTExPVyI6MjU2LCJPX1NZTkMiOjEyOCwiT19TWU1MSU5LIjoyMDk3MTUyLCJPX05PTkJMT0NLIjo0LCJT''@;'; put 'put ''X0lSV1hVIjo0NDgsIlNfSVJVU1IiOjI1NiwiU19JV1VTUiI6MTI4LCJTX0lYVVNSIjo2NCwiU19JUldYRyI6NTYsIlNfSVJHUlAiOjMyLCJTX0lXR1JQIjoxNiwiU19JWEdSUCI6OCwiU19JUldYTyI6NywiU19JUk9USCI6NCwiU19JV09USCI6MiwiU19JWE9USCI6MSwiRTJCSUciOjcsIkVB''@;'; put 'put ''Q0NFUyI6MTMsIkVBRERSSU5VU0UiOjQ4LCJFQUREUk5PVEFWQUlMIjo0OSwiRUFGTk9TVVBQT1JUIjo0NywiRUFHQUlOIjozNSwiRUFMUkVBRFkiOjM3LCJFQkFERiI6OSwiRUJBRE1TRyI6OTQsIkVCVVNZIjoxNiwiRUNBTkNFTEVEIjo4OSwiRUNISUxEIjoxMCwiRUNPTk5BQk9SVEVEIjo1''@;'; put 'put ''MywiRUNPTk5SRUZVU0VEIjo2MSwiRUNPTk5SRVNFVCI6NTQsIkVERUFETEsiOjExLCJFREVTVEFERFJSRVEiOjM5LCJFRE9NIjozMywiRURRVU9UIjo2OSwiRUVYSVNUIjoxNywiRUZBVUxUIjoxNCwiRUZCSUciOjI3LCJFSE9TVFVOUkVBQ0giOjY1LCJFSURSTSI6OTAsIkVJTFNFUSI6OTIs''@;'; put 'put ''IkVJTlBST0dSRVNTIjozNiwiRUlOVFIiOjQsIkVJTlZBTCI6MjIsIkVJTyI6NSwiRUlTQ09OTiI6NTYsIkVJU0RJUiI6MjEsIkVMT09QIjo2MiwiRU1GSUxFIjoyNCwiRU1MSU5LIjozMSwiRU1TR1NJWkUiOjQwLCJFTVVMVElIT1AiOjk1LCJFTkFNRVRPT0xPTkciOjYzLCJFTkVURE9XTiI6''@;'; put 'put ''NTAsIkVORVRSRVNFVCI6NTIsIkVORVRVTlJFQUNIIjo1MSwiRU5GSUxFIjoyMywiRU5PQlVGUyI6NTUsIkVOT0RBVEEiOjk2LCJFTk9ERVYiOjE5LCJFTk9FTlQiOjIsIkVOT0VYRUMiOjgsIkVOT0xDSyI6NzcsIkVOT0xJTksiOjk3LCJFTk9NRU0iOjEyLCJFTk9NU0ciOjkxLCJFTk9QUk9U''@;'; put 'put ''T09QVCI6NDIsIkVOT1NQQyI6MjgsIkVOT1NSIjo5OCwiRU5PU1RSIjo5OSwiRU5PU1lTIjo3OCwiRU5PVENPTk4iOjU3LCJFTk9URElSIjoyMCwiRU5PVEVNUFRZIjo2NiwiRU5PVFNPQ0siOjM4LCJFTk9UU1VQIjo0NSwiRU5PVFRZIjoyNSwiRU5YSU8iOjYsIkVPUE5PVFNVUFAiOjEwMiwi''@;'; put 'put ''RU9WRVJGTE9XIjo4NCwiRVBFUk0iOjEsIkVQSVBFIjozMiwiRVBST1RPIjoxMDAsIkVQUk9UT05PU1VQUE9SVCI6NDMsIkVQUk9UT1RZUEUiOjQxLCJFUkFOR0UiOjM0LCJFUk9GUyI6MzAsIkVTUElQRSI6MjksIkVTUkNIIjozLCJFU1RBTEUiOjcwLCJFVElNRSI6MTAxLCJFVElNRURPVVQi''@;'; put 'put ''OjYwLCJFVFhUQlNZIjoyNiwiRVdPVUxEQkxPQ0siOjM1LCJFWERFViI6MTgsIlNJR0hVUCI6MSwiU0lHSU5UIjoyLCJTSUdRVUlUIjozLCJTSUdJTEwiOjQsIlNJR1RSQVAiOjUsIlNJR0FCUlQiOjYsIlNJR0lPVCI6NiwiU0lHQlVTIjoxMCwiU0lHRlBFIjo4LCJTSUdLSUxMIjo5LCJTSUdV''@;'; put 'put ''U1IxIjozMCwiU0lHU0VHViI6MTEsIlNJR1VTUjIiOjMxLCJTSUdQSVBFIjoxMywiU0lHQUxSTSI6MTQsIlNJR1RFUk0iOjE1LCJTSUdDSExEIjoyMCwiU0lHQ09OVCI6MTksIlNJR1NUT1AiOjE3LCJTSUdUU1RQIjoxOCwiU0lHVFRJTiI6MjEsIlNJR1RUT1UiOjIyLCJTSUdVUkciOjE2LCJT''@;'; put 'put ''SUdYQ1BVIjoyNCwiU0lHWEZTWiI6MjUsIlNJR1ZUQUxSTSI6MjYsIlNJR1BST0YiOjI3LCJTSUdXSU5DSCI6MjgsIlNJR0lPIjoyMywiU0lHU1lTIjoxMiwiU1NMX09QX0FMTCI6MjE0NzQ4NjcxOSwiU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTiI6MjYyMTQ0LCJT''@;'; put 'put ''U0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIjo0MTk0MzA0LCJTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVCI6MzI3NjgsIlNTTF9PUF9DT09LSUVfRVhDSEFOR0UiOjgxOTIsIlNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRyI6MjE0NzQ4MzY0OCwiU1NMX09QX0RPTlRfSU5TRVJUX0VN''@;'; put 'put ''UFRZX0ZSQUdNRU5UUyI6MjA0OCwiU1NMX09QX0VQSEVNRVJBTF9SU0EiOjAsIlNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QiOjQsIlNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUiI6MzIsIlNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUciOjEsIlNTTF9PUF9NU0lFX1NT''@;'; put 'put ''TFYyX1JTQV9QQURESU5HIjowLCJTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHIjo1MzY4NzA5MTIsIlNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHIjoyLCJTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRyI6MTA3Mzc0MTgyNCwiU1NMX09QX05FVFNDQVBFX1JFVVNF''@;'; put 'put ''X0NJUEhFUl9DSEFOR0VfQlVHIjo4LCJTU0xfT1BfTk9fQ09NUFJFU1NJT04iOjEzMTA3MiwiU1NMX09QX05PX1FVRVJZX01UVSI6NDA5NiwiU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OIjo2NTUzNiwiU1NMX09QX05PX1NTTHYyIjoxNjc3NzIxNiwiU1NM''@;'; put 'put ''X09QX05PX1NTTHYzIjozMzU1NDQzMiwiU1NMX09QX05PX1RJQ0tFVCI6MTYzODQsIlNTTF9PUF9OT19UTFN2MSI6NjcxMDg4NjQsIlNTTF9PUF9OT19UTFN2MV8xIjoyNjg0MzU0NTYsIlNTTF9PUF9OT19UTFN2MV8yIjoxMzQyMTc3MjgsIlNTTF9PUF9QS0NTMV9DSEVDS18xIjowLCJTU0xf''@;'; put 'put ''T1BfUEtDUzFfQ0hFQ0tfMiI6MCwiU1NMX09QX1NJTkdMRV9ESF9VU0UiOjEwNDg1NzYsIlNTTF9PUF9TSU5HTEVfRUNESF9VU0UiOjUyNDI4OCwiU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRyI6MTI4LCJTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHIjowLCJTU0xf''@;'; put 'put ''T1BfVExTX0JMT0NLX1BBRERJTkdfQlVHIjo1MTIsIlNTTF9PUF9UTFNfRDVfQlVHIjoyNTYsIlNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHIjo4Mzg4NjA4LCJFTkdJTkVfTUVUSE9EX0RTQSI6MiwiRU5HSU5FX01FVEhPRF9ESCI6NCwiRU5HSU5FX01FVEhPRF9SQU5EIjo4LCJFTkdJTkVfTUVU''@;'; put 'put ''SE9EX0VDREgiOjE2LCJFTkdJTkVfTUVUSE9EX0VDRFNBIjozMiwiRU5HSU5FX01FVEhPRF9DSVBIRVJTIjo2NCwiRU5HSU5FX01FVEhPRF9ESUdFU1RTIjoxMjgsIkVOR0lORV9NRVRIT0RfU1RPUkUiOjI1NiwiRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTIjo1MTIsIkVOR0lORV9NRVRIT0Rf''@;'; put 'put ''UEtFWV9BU04xX01FVEhTIjoxMDI0LCJFTkdJTkVfTUVUSE9EX0FMTCI6NjU1MzUsIkVOR0lORV9NRVRIT0RfTk9ORSI6MCwiREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRSI6MiwiREhfQ0hFQ0tfUF9OT1RfUFJJTUUiOjEsIkRIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1IiOjQsIkRIX05P''@;'; put 'put ''VF9TVUlUQUJMRV9HRU5FUkFUT1IiOjgsIk5QTl9FTkFCTEVEIjoxLCJSU0FfUEtDUzFfUEFERElORyI6MSwiUlNBX1NTTFYyM19QQURESU5HIjoyLCJSU0FfTk9fUEFERElORyI6MywiUlNBX1BLQ1MxX09BRVBfUEFERElORyI6NCwiUlNBX1g5MzFfUEFERElORyI6NSwiUlNBX1BLQ1MxX1BT''@;'; put 'put ''U19QQURESU5HIjo2LCJQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQiOjIsIlBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEIjo0LCJQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCI6NiwiRl9PSyI6MCwiUl9PSyI6NCwiV19PSyI6MiwiWF9PSyI6MSwiVVZfVURQX1JFVVNFQUREUiI6NH0n''@;'; put 'put ''KX0sOTc5OTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4''@;'; put 'put ''Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2''@;'; put 'put ''OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2Vk''@;'; put 'put ''ZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJi''@;'; put 'put ''ZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVj''@;'; put 'put ''ZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJn''@;'; put 'put ''ZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4''@;'; put 'put ''NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2''@;'; put 'put ''MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEw''@;'; put 'put ''NTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRl''@;'; put 'put ''Zjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4''@;'; put 'put ''MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0''@;'; put 'put ''YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3''@;'; put 'put ''MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRm''@;'; put 'put ''MjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNm''@;'; put 'put ''NWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5''@;'; put 'put ''NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2''@;'; put 'put ''MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1''@;'; put 'put ''YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2Qw''@;'; put 'put ''MDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRl''@;'; put 'put ''MDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0''@;'; put 'put ''YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNi''@;'; put 'put ''ZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3''@;'; put 'put ''MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0''@;'; put 'put ''ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1''@;'; put 'put ''ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1''@;'; put 'put ''MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFj''@;'; put 'put ''NjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3''@;'; put 'put ''ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0s''@;'; put 'put ''Im1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2''@;'; put 'put ''ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2Ez''@;'; put 'put ''YWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUx''@;'; put 'put ''NWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZh''@;'; put 'put ''MDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFm''@;'; put 'put ''NGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5''@;'; put 'put ''OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2Vk''@;'; put 'put ''YmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJl''@;'; put 'put ''YzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYz''@;'; put 'put ''MjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFi''@;'; put 'put ''NjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjVi''@;'; put 'put ''M2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4''@;'; put 'put ''MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sODU5Nzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXtpODoiNi42LjEifX0sMjU2Mjp1ZT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMi4xNi44NDAuMS4xMDEuMy40LjEuMSI6ImFlcy0xMjgtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMiI6ImFlcy0xMjgtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMyI6ImFlcy0xMjgtb2ZiIiwiMi4xNi44NDAuMS4x''@;'; put 'put ''MDEuMy40LjEuNCI6ImFlcy0xMjgtY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiOiJhZXMtMTkyLWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyIjoiYWVzLTE5Mi1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMyI6ImFlcy0xOTItb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40''@;'; put 'put ''LjEuMjQiOiJhZXMtMTkyLWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIjoiYWVzLTI1Ni1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MiI6ImFlcy0yNTYtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDMiOiJhZXMtMjU2LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0''@;'; put 'put ''IjoiYWVzLTI1Ni1jZmIifScpfX0sX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fPXt9O2Z1bmN0aW9uIF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTcyX18odWUpe3ZhciBYPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t1ZV07aWYodm9pZCAwIT09WClyZXR1cm4gWC5leHBvcnRzO3Zh''@;'; put 'put ''ciB5PV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t1ZV09e2lkOnVlLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gX193ZWJwYWNrX21vZHVsZXNfX1t1ZV0uY2FsbCh5LmV4cG9ydHMseSx5LmV4cG9ydHMsX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzJfXykseS5sb2FkZWQ9''@;'; put 'put ''ITAseS5leHBvcnRzfV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTcyX18uZD0odWUsWCk9Pntmb3IodmFyIHkgaW4gWClfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3Ml9fLm8oWCx5KSYmIV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTcyX18ubyh1ZSx5KSYmT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHVlLHkse2VudW1lcmFibGU6ITAsZ2V0OlhbeV19KX0sX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzJfXy5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8''@;'; put 'put ''bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2h7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzJfXy5vPSh1ZSxYKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVl''@;'; put 'put ''LFgpLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTcyX18ucj11ZT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHVlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzJfXy5ubWQ9dWU9Pih1ZS5wYXRocz1bXSx1ZS5jaGlsZHJlbnx8KHVlLmNoaWxkcmVuPVtdKSx1ZSk7dmFyIF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19fPV9fbmVzdGVkX3dl''@;'; put 'put ''YnBhY2tfcmVxdWlyZV8yODg5MTcyX18oMzYwNyk7cmV0dXJuIF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19ffSkoKSxtb2R1bGUuZXhwb3J0cz15KCl9LDU5NDg6ZnVuY3Rpb24odWUsWCx5KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9u''@;'; put 'put ''KEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNTcGVjaWFsTWlzc2luZz1YLmNob2ljZVZhbGlkYXRvcj1YLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1YLnVybFZhbGlkYXRv''@;'; put 'put ''cj12b2lkIDA7Y29uc3QgXz1JKHkoMTI5NTQpKTtYLnVybFZhbGlkYXRvcj0oRixPKT0+ISFfLmRlZmF1bHQuaXNIdHRwVXJpKEYpfHwhIV8uZGVmYXVsdC5pc0h0dHBzVXJpKEYpfHwiIj09PUZ8fE8sWC5jb25maXJtYXRpb25WYWxpZGF0b3I9Rj0+ITA9PT1GfHwhMT09PUYsWC5jaG9pY2VW''@;'; put 'put ''YWxpZGF0b3I9KEYsTyx6KT0+Rj4wJiZGPD1PfHx6LFguaXNTcGVjaWFsTWlzc2luZz1GPT4oInN0cmluZyIhPXR5cGVvZiBGfHwhRi5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEYpfSwxMzI0NzoodWUsWCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIF87WC5ZPXZvaWQgMCwoXz1YLll8fChYLlk9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixfLlNhczk9IlNBUzkiLF8uU2FzanM9IlNBU0pTIn0sMjUwMDE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guQz12b2lkIDAsWC5DPShfLGc9MSxCPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PV8p''@;'; put 'put ''cmV0dXJuIjAgQiI7Xz1fPkI/QjpfO2NvbnN0IEY9ZzwwPzA6ZyxPPU1hdGguZmxvb3IoTWF0aC5sb2coXykvTWF0aC5sb2coMTAyNCkpO3JldHVybihfL01hdGgucG93KDEwMjQsTykpLnRvRml4ZWQoRikrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bT119fSw0MjkyNDpmdW5jdGlv''@;'; put 'put ''bih1ZSl7dmFyIFg9e3ZlcnNpb246IjEuMTUuMCJ9O1hbNDM3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx''@;'; put 'put ''ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhl''@;'; put 'put ''Y1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1''@;'; put 'put ''MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNc''@;'; put 'put ''dTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1''@;'; put 'put ''MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYo''@;'; put 'put ''X1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbNjIwXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2''@;'; put 'put ''XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBcdTAx''@;'; put 'put ''MDVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMDdceGM0XHUwMTA0XHUwMTE4XHUwMTE5XHUwMTQyXHhmNFx4ZjZcdTAxMDZceGZiXHhmOVx1MDE1YVx4ZDZceGRjXHhhMlx1MDE0MVx4YTVcdTAxNWJcdTAxOTJcdTAxNzlcdTAxN2JceGYzXHhkM1x1MDE0NFx1MDE0M1x1MDE3YVx1MDE3''@;'; put 'put ''Y1x4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1''@;'; put 'put ''M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFc''@;'; put 'put ''eGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEw''@;'; put 'put ''XHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbNzM3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgw''@;'; put 'put ''NVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2Rl''@;'; put 'put ''ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAz''@;'; put 'put ''YThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJc''@;'; put 'put ''dTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1''@;'; put 'put ''NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2Jc''@;'; put 'put ''dTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hh''@;'; put 'put ''ckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1MF09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgx''@;'; put 'put ''M1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhl''@;'; put 'put ''Mlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4''@;'; put 'put ''YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2''@;'; put 'put ''Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4''@;'; put 'put ''YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6''@;'; put 'put ''XyxkZWM6SX19KCksWFs4NTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJico''@;'; put 'put ''KSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1''@;'; put 'put ''MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhh''@;'; put 'put ''Ylx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1''@;'; put 'put ''MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRc''@;'; put 'put ''eGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcp''@;'; put 'put ''JiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODU3XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVc''@;'; put 'put ''eDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBc''@;'; put 'put ''eGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1MDEzMFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4''@;'; put 'put ''YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2''@;'; put 'put ''Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNiXHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0''@;'; put 'put ''XHhhZFx4YjFcdWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2Vu''@;'; put 'put ''YzpfLGRlYzpJfX0oKSxYWzg2MV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2''@;'; put 'put ''XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUy''@;'; put 'put ''NTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0''@;'; put 'put ''XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZc''@;'; put 'put ''dTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcp''@;'; put 'put ''LElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg2NV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFc''@;'; put 'put ''eDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThc''@;'; put 'put ''eGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTky''@;'; put 'put ''XHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUy''@;'; put 'put ''NTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAz''@;'; put 'put ''OThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNv''@;'; put 'put ''ZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg2Nl09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4''@;'; put 'put ''MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEy''@;'; put 'put ''XHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUw''@;'; put 'put ''NDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYz''@;'; put 'put ''XHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUy''@;'; put 'put ''NTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAx''@;'; put 'put ''XHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJB''@;'; put 'put ''dChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODc0XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4''@;'; put 'put ''MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUw''@;'; put 'put ''ZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIw''@;'; put 'put ''XHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3''@;'; put 'put ''XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4OTVd''@;'; put 'put ''PWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6''@;'; put 'put ''Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDEwY1x4ZmNceGU5XHUwMTBmXHhlNFx1MDEwZVx1MDE2NFx1MDEwZFx1MDExYlx1MDExYVx1MDEzOVx4Y2RcdTAxM2VcdTAxZWFceGM0XHhjMVx4YzlcdTAx''@;'; put 'put ''N2VcdTAxN2RceGY0XHhmNlx4ZDNcdTAxNmZceGRhXHhmZFx4ZDZceGRjXHUwMTYwXHUwMTNkXHhkZFx1MDE1OFx1MDE2NVx4ZTFceGVkXHhmM1x4ZmFcdTAxNDhcdTAxNDdcdTAxNmVceGQ0XHUwMTYxXHUwMTU5XHUwMTU1XHUwMTU0XHhiY1x4YTdceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5''@;'; put 'put ''M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1''@;'; put 'put ''MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUw''@;'; put 'put ''M2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQo''@;'; put 'put ''ZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs5MzJdPWZ1bmN0aW9uKCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgx''@;'; put 'put ''MFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjYxXHVmZjYyXHVmZjYzXHVmZjY0XHVmZjY1XHVmZjY2XHVmZjY3XHVmZjY4XHVmZjY5XHVmZjZhXHVmZjZiXHVmZjZjXHVmZjZkXHVmZjZlXHVmZjZmXHVmZjcwXHVmZjcxXHVmZjcyXHVmZjczXHVmZjc0XHVmZjc1XHVmZjc2XHVm''@;'; put 'put ''Zjc3XHVmZjc4XHVmZjc5XHVmZjdhXHVmZjdiXHVmZjdjXHVmZjdkXHVmZjdlXHVmZjdmXHVmZjgwXHVmZjgxXHVmZjgyXHVmZjgzXHVmZjg0XHVmZjg1XHVmZjg2XHVmZjg3XHVmZjg4XHVmZjg5XHVmZjhhXHVmZjhiXHVmZjhjXHVmZjhkXHVmZjhlXHVmZjhmXHVmZjkwXHVmZjkxXHVmZjky''@;'; put 'put ''XHVmZjkzXHVmZjk0XHVmZjk1XHVmZjk2XHVmZjk3XHVmZjk4XHVmZjk5XHVmZjlhXHVmZjliXHVmZjljXHVmZjlkXHVmZjllXHVmZjlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBdW2ddKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFc''@;'; put 'put ''dTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1''@;'; put 'put ''MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHVmZmZkXHhmN1x1ZmYxZFx1MjI2''@;'; put 'put ''MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3''@;'; put 'put ''XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjA4XHUyMjBiXHUy''@;'; put 'put ''Mjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTJiXHUy''@;'; put 'put ''MDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjVlZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEyOV1b''@;'; put 'put ''Z11dPTMzMDI0K2cseVszMzAyNCtnXT1fWzEyOV1bZ10pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1''@;'; put 'put ''ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY0''@;'; put 'put ''MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1''@;'; put 'put ''YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1''@;'; put 'put ''MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5''@;'; put 'put ''MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMwXVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzEzMF1bZ11dPTMzMjgwK2cseVszMzI4MCtnXT1fWzEzMF1bZ10pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBh''@;'; put 'put ''OVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1''@;'; put 'put ''MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1ZmZm''@;'; put 'put ''ZFx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNh''@;'; put 'put ''OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1''@;'; put 'put ''MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMxXVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzEzMV1bZ11dPTMzNTM2K2cseVszMzUzNitnXT1fWzEzMV1bZ10pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQw''@;'; put 'put ''MVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQz''@;'; put 'put ''Y1x1MDQzZFx1ZmZmZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0''@;'; put 'put ''Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMl0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMl1bZ11dPTMzNzkyK2cseVszMzc5MitnXT1fWzEzMl1bZ10pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2''@;'; put 'put ''NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx1MjQ2Zlx1MjQ3MFx1MjQ3MVx1MjQ3Mlx1MjQ3M1x1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1MzM0OVx1''@;'; put 'put ''MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MzM3Ylx1ZmZmZFx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNFx1MzJhNVx1MzJhNlx1MzJhN1x1MzJhOFx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1''@;'; put 'put ''MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNV0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNV1bZ11dPTM0NTYwK2cseVszNDU2MCtnXT1fWzEzNV1bZ10pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJh''@;'; put 'put ''Nlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1''@;'; put 'put ''NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBi''@;'; put 'put ''Mlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzEzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNl1bZ11dPTM0ODE2K2cseVszNDgxNitnXT1fWzEzNl1bZ10pO2ZvcihfWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY2''@;'; put 'put ''Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1''@;'; put 'put ''NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTlj''@;'; put 'put ''NVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1ZmZmZFx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1''@;'; put 'put ''OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0''@;'; put 'put ''Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1''@;'; put 'put ''Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1''@;'; put 'put ''OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzEzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzN11bZ11dPTM1MDcyK2cseVszNTA3MitnXT1fWzEzN11bZ10pO2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1''@;'; put 'put ''OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5''@;'; put 'put ''NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYlx1ZmZmZFx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1''@;'; put 'put ''NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMVx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgy''@;'; put 'put ''YVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1''@;'; put 'put ''N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2Zl''@;'; put 'put ''Ylx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOF1bZ11dPTM1MzI4K2cseVszNTMyOCtnXT1fWzEzOF1bZ10pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1''@;'; put 'put ''NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1''@;'; put 'put ''MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1ZmZmZFx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1''@;'; put 'put ''NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVh''@;'; put 'put ''Y1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1''@;'; put 'put ''Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQx''@;'; put 'put ''Zlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOV1bZ11dPTM1NTg0K2cseVszNTU4NCtnXT1fWzEzOV1bZ10pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1''@;'; put 'put ''Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0''@;'; put 'put ''Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1ZmZmZFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1''@;'; put 'put ''OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBh''@;'; put 'put ''OVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1''@;'; put 'put ''NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0''@;'; put 'put ''OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1''@;'; put 'put ''NTNlM1x1NTQxMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0MF1bZ11dPTM1ODQwK2cseVszNTg0MCtnXT1fWzE0MF1bZ10pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1''@;'; put 'put ''NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1''@;'; put 'put ''NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1ZmZmZFx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1''@;'; put 'put ''OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiY1x1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2''@;'; put 'put ''OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1''@;'; put 'put ''NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcy''@;'; put 'put ''OFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1''@;'; put 'put ''N2IzOVx1NTMxOVx1NTE4YVx1NTIzN1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0MV1bZ11dPTM2MDk2K2cseVszNjA5NitnXT1fWzE0MV1bZ10pO2ZvcihfWzE0Ml09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1''@;'; put 'put ''NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThl''@;'; put 'put ''Ylx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1ZmZmZFx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1''@;'; put 'put ''ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVk''@;'; put 'put ''NFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1''@;'; put 'put ''NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1''@;'; put 'put ''M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1''@;'; put 'put ''NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Ml1bZ11dPTM2MzUyK2cseVszNjM1MitnXT1fWzE0Ml1bZ10p''@;'; put 'put ''O2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1''@;'; put 'put ''ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2Uy''@;'; put 'put ''ZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1ZmZmZFx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1''@;'; put 'put ''OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNl''@;'; put 'put ''Y1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1''@;'; put 'put ''NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1''@;'; put 'put ''NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1''@;'; put 'put ''N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0M11bZ11dPTM2NjA4K2cseVszNjYwOCtn''@;'; put 'put ''XT1fWzE0M11bZ10pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1''@;'; put 'put ''NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAz''@;'; put 'put ''Mlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1ZmZmZFx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1''@;'; put 'put ''NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZVx1NmY4NFx1NjQ3''@;'; put 'put ''YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1''@;'; put 'put ''ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1Nzhh''@;'; put 'put ''OVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1''@;'; put 'put ''NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NF1bZ11dPTM2ODY0''@;'; put 'put ''K2cseVszNjg2NCtnXT1fWzE0NF1bZ10pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1''@;'; put 'put ''OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0''@;'; put 'put ''NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1ZmZmZFx1NjRjZFx1NjVlOVx1NjZmOVx1''@;'; put 'put ''NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4''@;'; put 'put ''ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1''@;'; put 'put ''Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIz''@;'; put 'put ''NFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1''@;'; put 'put ''NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0''@;'; put 'put ''NV1bZ11dPTM3MTIwK2cseVszNzEyMCtnXT1fWzE0NV1bZ10pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1''@;'; put 'put ''OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYz''@;'; put 'put ''ZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1ZmZmZFx1OTAxMFx1''@;'; put 'put ''NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFj''@;'; put 'put ''Ylx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1''@;'; put 'put ''OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUy''@;'; put 'put ''Nlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1''@;'; put 'put ''NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ2XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE0Nl1bZ11dPTM3Mzc2K2cseVszNzM3NitnXT1fWzE0Nl1bZ10pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1''@;'; put 'put ''NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUz''@;'; put 'put ''MFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhY1x1''@;'; put 'put ''ZmZmZFx1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1''@;'; put 'put ''NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMFx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1''@;'; put 'put ''N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0''@;'; put 'put ''OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1''@;'; put 'put ''Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ3XVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0N11bZ11dPTM3NjMyK2cseVszNzYzMitnXT1fWzE0N11bZ10pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1''@;'; put 'put ''OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZh''@;'; put 'put ''NFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1''@;'; put 'put ''NWE5Mlx1Njg4NVx1ZmZmZFx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZk''@;'; put 'put ''ZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1''@;'; put 'put ''OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2''@;'; put 'put ''OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1''@;'; put 'put ''N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0OF0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMTQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OF1bZ11dPTM3ODg4K2cseVszNzg4OCtnXT1fWzE0OF1bZ10pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1''@;'; put 'put ''NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVk''@;'; put 'put ''Zlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1''@;'; put 'put ''NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1ZmZmZFx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1''@;'; put 'put ''M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1''@;'; put 'put ''N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4''@;'; put 'put ''Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1''@;'; put 'put ''NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0OV0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMTQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OV1bZ11dPTM4MTQ0K2cseVszODE0NCtnXT1fWzE0OV1bZ10pO2ZvcihfWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkNVx1NmNlMVx1''@;'; put 'put ''NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1Njcx''@;'; put 'put ''Ylx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1''@;'; put 'put ''NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1ZmZmZFx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNj''@;'; put 'put ''OFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MFx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1''@;'; put 'put ''NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWVi''@;'; put 'put ''YVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1''@;'; put 'put ''NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzE1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MF1bZ11dPTM4NDAwK2cseVszODQwMCtnXT1fWzE1MF1bZ10pO2ZvcihfWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkx''@;'; put 'put ''NVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1''@;'; put 'put ''OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1ZmZmZFx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1''@;'; put 'put ''MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1''@;'; put 'put ''NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3''@;'; put 'put ''Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1''@;'; put 'put ''NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzE1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MV1bZ11dPTM4NjU2K2cseVszODY1NitnXT1fWzE1MV1bZ10pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBj''@;'; put 'put ''ZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1''@;'; put 'put ''OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1''@;'; put 'put ''N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1''@;'; put 'put ''NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMlx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Ml1bZ11dPTM4OTEyK2cseVszODkxMitnXT1fWzE1Ml1bZ10pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEz''@;'; put 'put ''Ylx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1''@;'; put 'put ''NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1ZmZmZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0''@;'; put 'put ''Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOFx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1''@;'; put 'put ''OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2''@;'; put 'put ''OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1''@;'; put 'put ''NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRh''@;'; put 'put ''OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1M11bZ11dPTM5MTY4K2cseVszOTE2OCtnXT1fWzE1M11bZ10pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0''@;'; put 'put ''NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1''@;'; put 'put ''NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1ZmZmZFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZh''@;'; put 'put ''ZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1''@;'; put 'put ''NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgx''@;'; put 'put ''OVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1''@;'; put 'put ''NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2''@;'; put 'put ''N1x1NTk2Y1x1NTk2OVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1NF1bZ11dPTM5NDI0K2cseVszOTQyNCtnXT1fWzE1NF1bZ10pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0''@;'; put 'put ''MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1''@;'; put 'put ''NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1ZmZmZFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJl''@;'; put 'put ''Mlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1''@;'; put 'put ''NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQx''@;'; put 'put ''NFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1''@;'; put 'put ''NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVj''@;'; put 'put ''MVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1NV1bZ11dPTM5NjgwK2cseVszOTY4MCtnXT1fWzE1NV1bZ10pO2ZvcihfWzE1''@;'; put 'put ''Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYw''@;'; put 'put ''OVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1''@;'; put 'put ''NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MFx1ZmZmZFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAy''@;'; put 'put ''Nlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YVx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1''@;'; put 'put ''NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEz''@;'; put 'put ''ZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1''@;'; put 'put ''NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIw''@;'; put 'put ''MFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Nl1bZ11dPTM5OTM2K2cseVszOTkzNitnXT1fWzE1Nl1b''@;'; put 'put ''Z10pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4''@;'; put 'put ''Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1''@;'; put 'put ''NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1ZmZmZFx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNj''@;'; put 'put ''OVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1''@;'; put 'put ''NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUz''@;'; put 'put ''N1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1''@;'; put 'put ''NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4''@;'; put 'put ''OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1N11bZ11dPTQwMTkyK2cseVs0MDE5''@;'; put 'put ''MitnXT1fWzE1N11bZ10pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1Njcx''@;'; put 'put ''ZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1''@;'; put 'put ''NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1ZmZmZFx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3''@;'; put 'put ''N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1''@;'; put 'put ''NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1Njkz''@;'; put 'put ''ZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1''@;'; put 'put ''NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1''@;'; put 'put ''OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OF1bZ11dPTQw''@;'; put 'put ''NDQ4K2cseVs0MDQ0OCtnXT1fWzE1OF1bZ10pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFh''@;'; put 'put ''YVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1''@;'; put 'put ''NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZlx1ZmZmZFx1OWViZVx1NmMwOFx1NmMx''@;'; put 'put ''M1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1''@;'; put 'put ''NmNiZVx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRm''@;'; put 'put ''OVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1''@;'; put 'put ''NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5''@;'; put 'put ''Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE1OV1bZ11dPTQwNzA0K2cseVs0MDcwNCtnXT1fWzE1OV1bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1''@;'; put 'put ''Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1''@;'; put 'put ''NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1ZmZmZFx1NzBk''@;'; put 'put ''OVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1''@;'; put 'put ''NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJh''@;'; put 'put ''Mlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1''@;'; put 'put ''NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0''@;'; put 'put ''MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRm''@;'; put 'put ''MVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1''@;'; put 'put ''NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVm''@;'; put 'put ''Zlx1ZmZmZFx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1''@;'; put 'put ''NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZk''@;'; put 'put ''ZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1''@;'; put 'put ''Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4''@;'; put 'put ''Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1Nzkx''@;'; put 'put ''Mlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1''@;'; put 'put ''NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2Fh''@;'; put 'put ''OVx1N2FjOFx1N2FiMFx1ZmZmZFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1''@;'; put 'put ''N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MFx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4''@;'; put 'put ''Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1''@;'; put 'put ''N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2Ni''@;'; put 'put ''Mlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwMlx1N2QxY1x1N2QxNVx1N2Qw''@;'; put 'put ''YVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1''@;'; put 'put ''N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2Uz''@;'; put 'put ''Ylx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1ZmZmZFx1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1''@;'; put 'put ''N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4''@;'; put 'put ''OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1''@;'; put 'put ''ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5''@;'; put 'put ''Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyN10u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Ylx1ODE0''@;'; put 'put ''Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1''@;'; put 'put ''ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0''@;'; put 'put ''MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ZmZmZFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1''@;'; put 'put ''ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5''@;'; put 'put ''Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1''@;'; put 'put ''ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRk''@;'; put 'put ''OVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1''@;'; put 'put ''ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZj''@;'; put 'put ''Nlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ZmZmZFx1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1''@;'; put 'put ''ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OVx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdj''@;'; put 'put ''NFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1''@;'; put 'put ''ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhk''@;'; put 'put ''ZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1''@;'; put 'put ''ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFh''@;'; put 'put ''NVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1ZmZmZFx1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1''@;'; put 'put ''OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5''@;'; put 'put ''YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1''@;'; put 'put ''OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5''@;'; put 'put ''OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1''@;'; put 'put ''OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYy''@;'; put 'put ''Nlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1ZmZmZFx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1''@;'; put 'put ''OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2''@;'; put 'put ''OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1''@;'; put 'put ''OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIx''@;'; put 'put ''ZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1''@;'; put 'put ''OTMyZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1''@;'; put 'put ''OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3''@;'; put 'put ''NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVx1ZmZmZFx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1''@;'; put 'put ''OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZVx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5''@;'; put 'put ''N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1''@;'; put 'put ''OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5''@;'; put 'put ''MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1''@;'; put 'put ''OTg2Ylx1OTg2Zlx1OTg3MFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5MitnXT1fWzIzMl1bZ10pO2ZvcihfWzIzM109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1''@;'; put 'put ''OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTll''@;'; put 'put ''ZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0M1x1ZmZmZFx1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1''@;'; put 'put ''OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIy''@;'; put 'put ''M1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1''@;'; put 'put ''OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMy''@;'; put 'put ''NFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1''@;'; put 'put ''OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4K2cseVs1OTY0OCtnXT1fWzIzM11bZ10pO2Zvcihf''@;'; put 'put ''WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1''@;'; put 'put ''OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5''@;'; put 'put ''ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1ZmZmZFx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1''@;'; put 'put ''OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFk''@;'; put 'put ''Y1x1NzE5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bZ11dPTU5OTA0K2cseVs1OTkwNCtnXT1fWzIz''@;'; put 'put ''NF1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1''@;'; put 'put ''NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJj''@;'; put 'put ''MFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmZmZFx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1''@;'; put 'put ''NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4''@;'; put 'put ''NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1''@;'; put 'put ''NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJk''@;'; put 'put ''Nlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1''@;'; put 'put ''NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2''@;'; put 'put ''MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1''@;'; put 'put ''NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2Fl''@;'; put 'put ''N1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ZmZmZFx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1''@;'; put 'put ''ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFk''@;'; put 'put ''N1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1''@;'; put 'put ''OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1''@;'; put 'put ''MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1''@;'; put 'put ''MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11d''@;'; put 'put ''PTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1MjE2MFx1''@;'; put 'put ''MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZm''@;'; put 'put ''Ylx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1ZmZmZFx1NTE2NFx1NTE5ZFx1''@;'; put 'put ''NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5''@;'; put 'put ''ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1''@;'; put 'put ''NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYy''@;'; put 'put ''NFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1''@;'; put 'put ''NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUwXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzI1MF1bZ11dPTY0ZTMrZyx5WzY0ZTMrZ109X1syNTBdW2ddKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZl''@;'; put 'put ''M2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJc''@;'; put 'put ''dTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZmZmRcdWZh''@;'; put 'put ''MWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlc''@;'; put 'put ''dTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZh''@;'; put 'put ''MjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBc''@;'; put 'put ''dWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3''@;'; put 'put ''M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MV1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syNTFdW2ddXT02NDI1NitnLHlbNjQyNTYrZ109X1syNTFdW2ddKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlk''@;'; put 'put ''NzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1''@;'; put 'put ''Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW2ddXT02NDUxMitnLHlbNjQ1MTIrZ109X1syNTJdW2ddKTtyZXR1cm57ZW5jOkksZGVjOnl9fSgpLFhbOTM2XT1mdW5jdGlvbigpe3ZhciBnLHk9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4''@;'; put 'put ''MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamts''@;'; put 'put ''bW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzBdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEy''@;'; put 'put ''XHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0ZTM3XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0ZTU1XHU0ZTU3XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0''@;'; put 'put ''ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhXHU0ZTZiXHU0ZTZjXHU0ZTZkXHU0ZTZlXHU0ZTZmXHU0ZTcyXHU0ZTc0XHU0ZTc1XHU0ZTc2XHU0ZTc3XHU0ZTc4XHU0ZTc5XHU0ZTdhXHU0ZTdiXHU0ZTdjXHU0ZTdkXHU0ZTdmXHU0ZTgwXHU0ZTgxXHU0ZTgyXHU0ZTgzXHU0ZTg0XHU0ZTg1''@;'; put 'put ''XHU0ZTg3XHU0ZThhXHVmZmZkXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFhXHU0ZWFmXHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0ZWJkXHU0ZWJlXHU0ZWM4XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0''@;'; put 'put ''ZWQyXHU0ZWRhXHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0ZWYxXHU0ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA0XHU0ZjA1XHU0ZjA2XHU0ZjA3XHU0ZjA4XHU0ZjBi''@;'; put 'put ''XHU0ZjBjXHU0ZjEyXHU0ZjEzXHU0ZjE0XHU0ZjE1XHU0ZjE2XHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0ZjI5XHU0ZjJjXHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlXHU0ZjNmXHU0ZjQwXHU0ZjQxXHU0ZjQyXHU0ZjQ0XHU0''@;'; put 'put ''ZjQ1XHU0ZjQ3XHU0ZjQ4XHU0ZjQ5XHU0ZjRhXHU0ZjRiXHU0ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0ZjY4XHU0ZjZhXHU0ZjZiXHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0ZjcyXHU0Zjc1XHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0Zjgx''@;'; put 'put ''XHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4XHU0Zjk5XHU0ZjlhXHU0ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0ZmEyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTI5XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTI5XVtnXV09MzMwMjQrZyx5WzMzMDI0K2ddPV9bMTI5XVtnXSk7Zm9yKF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIw''@;'; put 'put ''XHU0ZmIxXHU0ZmIyXHU0ZmIzXHU0ZmI0XHU0ZmI2XHU0ZmI3XHU0ZmI4XHU0ZmI5XHU0ZmJhXHU0ZmJiXHU0ZmJjXHU0ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyXHU0ZmQzXHU0ZmQ0XHU0ZmQ1XHU0''@;'; put 'put ''ZmQ2XHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDAyXHU1MDAzXHU1MDA0XHU1MDA1XHU1MDA2''@;'; put 'put ''XHU1MDA3XHU1MDA4XHU1MDA5XHU1MDBhXHVmZmZkXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmXHU1MDMwXHU1MDMxXHU1MDMyXHU1MDMzXHU1''@;'; put 'put ''MDM0XHU1MDM1XHU1MDM2XHU1MDM3XHU1MDM4XHU1MDM5XHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU0XHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5''@;'; put 'put ''XHU1MDViXHU1MDVkXHU1MDVlXHU1MDVmXHU1MDYwXHU1MDYxXHU1MDYyXHU1MDYzXHU1MDY0XHU1MDY2XHU1MDY3XHU1MDY4XHU1MDY5XHU1MDZhXHU1MDZiXHU1MDZkXHU1MDZlXHU1MDZmXHU1MDcwXHU1MDcxXHU1MDcyXHU1MDczXHU1MDc0XHU1MDc1XHU1MDc4XHU1MDc5XHU1MDdhXHU1''@;'; put 'put ''MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlXHU1MDhmXHU1MDkwXHU1MDkxXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk1XHU1MDk2XHU1MDk3XHU1MDk4XHU1MDk5XHU1MDlhXHU1MDliXHU1MDljXHU1MDlk''@;'; put 'put ''XHU1MDllXHU1MDlmXHU1MGEwXHU1MGExXHU1MGEyXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkXHU1MGFlXHU1MGFmXHU1MGIwXHU1MGIxXHU1MGIzXHU1MGI0XHU1MGI1XHU1MGI2XHU1MGI3XHU1MGI4XHU1MGI5XHU1MGJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMwXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1sxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMwXVtnXV09MzMyODArZyx5WzMzMjgwK2ddPV9bMTMwXVtnXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGJkXHU1MGJl''@;'; put 'put ''XHU1MGJmXHU1MGMwXHU1MGMxXHU1MGMyXHU1MGMzXHU1MGM0XHU1MGM1XHU1MGM2XHU1MGM3XHU1MGM4XHU1MGM5XHU1MGNhXHU1MGNiXHU1MGNjXHU1MGNkXHU1MGNlXHU1MGQwXHU1MGQxXHU1MGQyXHU1MGQzXHU1MGQ0XHU1MGQ1XHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiXHU1MGRjXHU1''@;'; put 'put ''MGRkXHU1MGRlXHU1MGRmXHU1MGUwXHU1MGUxXHU1MGUyXHU1MGUzXHU1MGU0XHU1MGU1XHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2XHU1MGY3XHU1MGY4XHU1MGY5XHU1MGZhXHU1MGZjXHU1MGZkXHU1MGZlXHU1MGZmXHU1MTAw''@;'; put 'put ''XHU1MTAxXHU1MTAyXHU1MTAzXHU1MTA0XHU1MTA1XHU1MTA4XHVmZmZkXHU1MTA5XHU1MTBhXHU1MTBjXHU1MTBkXHU1MTBlXHU1MTBmXHU1MTEwXHU1MTExXHU1MTEzXHU1MTE0XHU1MTE1XHU1MTE2XHU1MTE3XHU1MTE4XHU1MTE5XHU1MTFhXHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1''@;'; put 'put ''MTFmXHU1MTIwXHU1MTIyXHU1MTIzXHU1MTI0XHU1MTI1XHU1MTI2XHU1MTI3XHU1MTI4XHU1MTI5XHU1MTJhXHU1MTJiXHU1MTJjXHU1MTJkXHU1MTJlXHU1MTJmXHU1MTMwXHU1MTMxXHU1MTMyXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM2XHU1MTM3XHU1MTM4XHU1MTM5XHU1MTNhXHU1MTNi''@;'; put 'put ''XHU1MTNjXHU1MTNkXHU1MTNlXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU1MTVmXHU1MTYwXHU1MTYxXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1''@;'; put 'put ''MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2XHU1MWE3XHU1MWE4XHU1MWE5''@;'; put 'put ''XHU1MWFhXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyXHU1MWQzXHU1MWQ0XHU1MWQ1XHU1MWQ2XHU1MWQ3XHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMxXVtnXV09MzM1MzYrZyx5WzMzNTM2K2ddPV9bMTMxXVtnXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1XHU1MWU2XHU1MWU3XHU1MWU4XHU1MWU5XHU1MWVhXHU1MWVjXHU1MWVlXHU1MWYxXHU1MWYyXHU1MWY0XHU1MWY3XHU1MWZlXHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1''@;'; put 'put ''MjEwXHU1MjEzXHU1MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMyXHU1MjM0XHU1MjM1XHU1MjNjXHU1MjNlXHU1MjQ0XHU1MjQ1XHU1MjQ2XHU1MjQ3XHU1MjQ4XHU1MjQ5''@;'; put 'put ''XHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4XHVmZmZkXHU1MjU5XHU1MjVhXHU1MjViXHU1MjVkXHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1MjZiXHU1MjZjXHU1MjZkXHU1MjZlXHU1MjcwXHU1MjcxXHU1MjczXHU1''@;'; put 'put ''Mjc0XHU1Mjc1XHU1Mjc2XHU1Mjc3XHU1Mjc4XHU1Mjc5XHU1MjdhXHU1MjdiXHU1MjdjXHU1MjdlXHU1MjgwXHU1MjgzXHU1Mjg0XHU1Mjg1XHU1Mjg2XHU1Mjg3XHU1Mjg5XHU1MjhhXHU1MjhiXHU1MjhjXHU1MjhkXHU1MjhlXHU1MjhmXHU1MjkxXHU1MjkyXHU1Mjk0XHU1Mjk1XHU1Mjk2''@;'; put 'put ''XHU1Mjk3XHU1Mjk4XHU1Mjk5XHU1MjlhXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0XHU1MmI1XHU1MmI2XHU1MmI3XHU1MmI4XHU1MmI5XHU1MmJhXHU1MmJiXHU1MmJjXHU1MmJkXHU1MmMwXHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1''@;'; put 'put ''MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQxXHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5XHU1MmRhXHU1MmRiXHU1MmRjXHU1MmRkXHU1MmRlXHU1MmUwXHU1MmUxXHU1MmUyXHU1MmUzXHU1MmU1XHU1MmU2XHU1MmU3XHU1MmU4XHU1MmU5XHU1MmVh''@;'; put 'put ''XHU1MmViXHU1MmVjXHU1MmVkXHU1MmVlXHU1MmVmXHU1MmYxXHU1MmYyXHU1MmYzXHU1MmY0XHU1MmY1XHU1MmY2XHU1MmY3XHU1MmY4XHU1MmZiXHU1MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0XHU1MzA3XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMyXVtnXV09MzM3OTIrZyx5WzMzNzkyK2ddPV9bMTMyXVtnXSk7Zm9yKF9bMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmXHU1MzMwXHU1MzMxXHU1MzMyXHU1MzMzXHU1MzM0XHU1MzM1XHU1''@;'; put 'put ''MzM2XHU1MzM3XHU1MzM4XHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1Mzdj''@;'; put 'put ''XHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmXHVmZmZkXHU1MzkwXHU1MzkxXHU1MzkyXHU1MzkzXHU1Mzk0XHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1''@;'; put 'put ''M2FiXHU1M2FjXHU1M2FkXHU1M2FmXHU1M2IwXHU1M2IxXHU1M2IyXHU1M2IzXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzXHU1M2M0XHU1M2M1XHU1M2M2XHU1M2M3XHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2Qz''@;'; put 'put ''XHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1''@;'; put 'put ''NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkXHU1NDVlXHU1NDVmXHU1NDYwXHU1NDYxXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5XHU1NDZh''@;'; put 'put ''XHU1NDZiXHU1NDZjXHU1NDZkXHU1NDZlXHU1NDZmXHU1NDcwXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1''@;'; put 'put ''NGExXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTMzXVtnXV09MzQwNDgrZyx5WzM0MDQ4K2ddPV9bMTMzXVtnXSk7Zm9yKF9bMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwXHU1NGUxXHU1NGUyXHU1NGUzXHU1''@;'; put 'put ''NGU0XHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1NGYxXHU1NGY0XHU1NGY1XHU1NGY2XHU1NGY3XHU1NGY4XHU1NGY5XHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhXHU1NTBiXHU1NTBjXHU1NTBkXHU1NTBlXHU1NTEyXHU1NTEzXHU1NTE1''@;'; put 'put ''XHU1NTE2XHU1NTE3XHU1NTE4XHU1NTE5XHU1NTFhXHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2XHVmZmZkXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1''@;'; put 'put ''NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiXHU1NTRjXHU1NTRkXHU1NTRlXHU1NTRmXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3XHU1NTU4XHU1NTU5XHU1NTVhXHU1NTViXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZm''@;'; put 'put ''XHU1NTcwXHU1NTcxXHU1NTcyXHU1NTczXHU1NTc0XHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwXHU1NWExXHU1NWEyXHU1NWEzXHU1''@;'; put 'put ''NWE0XHU1NWE1XHU1NWE2XHU1NWE4XHU1NWE5XHU1NWFhXHU1NWFiXHU1NWFjXHU1NWFkXHU1NWFlXHU1NWFmXHU1NWIwXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmXHU1NWMwXHU1NWMxXHU1NWMyXHU1NWMzXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNi''@;'; put 'put ''XHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3XHU1NWQ4XHU1NWQ5XHU1NWRhXHU1NWRiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4XHU1NWY5XHU1NWZhXHU1NWZiXHU1NWZjXHU1NWZmXHU1NjAyXHU1''@;'; put 'put ''NjAzXHU1NjA0XHU1NjA1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM0XVtnXV09MzQzMDQrZyx5WzM0MzA0K2ddPV9bMTM0XVtnXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjA2XHU1NjA3XHU1NjBhXHU1NjBiXHU1NjBkXHU1NjEwXHU1NjExXHU1NjEyXHU1NjEzXHU1NjE0XHU1NjE1XHU1NjE2XHU1NjE3XHU1NjE5XHU1NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1''@;'; put 'put ''NjI2XHU1NjI4XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJmXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1NjNjXHU1NjNkXHU1NjNlXHU1NjQwXHU1NjQxXHU1NjQyXHU1NjQzXHU1NjQ0XHU1NjQ1XHU1NjQ2XHU1NjQ3XHU1NjQ4XHU1NjQ5XHU1NjRhXHU1NjRi''@;'; put 'put ''XHU1NjRmXHU1NjUwXHU1NjUxXHU1NjUyXHU1NjUzXHU1NjU1XHU1NjU2XHU1NjVhXHU1NjViXHU1NjVkXHU1NjVlXHU1NjVmXHU1NjYwXHU1NjYxXHVmZmZkXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1NjZlXHU1NjZmXHU1NjcwXHU1NjcyXHU1NjczXHU1Njc0XHU1Njc1XHU1''@;'; put 'put ''Njc3XHU1Njc4XHU1Njc5XHU1NjdhXHU1NjdkXHU1NjdlXHU1NjdmXHU1NjgwXHU1NjgxXHU1NjgyXHU1NjgzXHU1Njg0XHU1Njg3XHU1Njg4XHU1Njg5XHU1NjhhXHU1NjhiXHU1NjhjXHU1NjhkXHU1NjkwXHU1NjkxXHU1NjkyXHU1Njk0XHU1Njk1XHU1Njk2XHU1Njk3XHU1Njk4XHU1Njk5''@;'; put 'put ''XHU1NjlhXHU1NjliXHU1NjljXHU1NjlkXHU1NjllXHU1NjlmXHU1NmEwXHU1NmExXHU1NmEyXHU1NmE0XHU1NmE1XHU1NmE2XHU1NmE3XHU1NmE4XHU1NmE5XHU1NmFhXHU1NmFiXHU1NmFjXHU1NmFkXHU1NmFlXHU1NmIwXHU1NmIxXHU1NmIyXHU1NmIzXHU1NmI0XHU1NmI1XHU1NmI2XHU1''@;'; put 'put ''NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkXHU1NmJlXHU1NmJmXHU1NmMwXHU1NmMxXHU1NmMyXHU1NmMzXHU1NmM0XHU1NmM1XHU1NmM2XHU1NmM3XHU1NmM4XHU1NmM5XHU1NmNiXHU1NmNjXHU1NmNkXHU1NmNlXHU1NmNmXHU1NmQwXHU1NmQxXHU1NmQyXHU1NmQzXHU1NmQ1XHU1NmQ2''@;'; put 'put ''XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1XHU1NmU2XHU1NmU3XHU1NmU4XHU1NmU5XHU1NmVhXHU1NmVjXHU1NmVlXHU1NmVmXHU1NmYyXHU1NmYzXHU1NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiXHU1NzBjXHU1''@;'; put 'put ''NzBkXHU1NzBlXHU1NzBmXHU1NzEwXHU1NzExXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM1XVtnXV09MzQ1NjArZyx5WzM0NTYwK2ddPV9bMTM1XVtnXSk7Zm9yKF9bMTM2XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzEyXHU1NzEzXHU1NzE0XHU1NzE1XHU1NzE2XHU1NzE3XHU1NzE4XHU1NzE5XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1''@;'; put 'put ''NzJiXHU1NzMxXHU1NzMyXHU1NzM0XHU1NzM1XHU1NzM2XHU1NzM3XHU1NzM4XHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyXHU1NzUzXHU1NzU0XHU1NzU1XHU1NzU2XHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYz''@;'; put 'put ''XHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwXHVmZmZkXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkXHU1NzhlXHU1NzhmXHU1NzkwXHU1NzkxXHU1''@;'; put 'put ''Nzk0XHU1Nzk1XHU1Nzk2XHU1Nzk3XHU1Nzk4XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5XHU1N2JhXHU1N2JiXHU1N2JjXHU1N2JkXHU1N2Jl''@;'; put 'put ''XHU1N2JmXHU1N2MwXHU1N2MxXHU1N2M0XHU1N2M1XHU1N2M2XHU1N2M3XHU1N2M4XHU1N2M5XHU1N2NhXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1XHU1N2U2XHU1N2U3XHU1N2U4XHU1''@;'; put 'put ''N2U5XHU1N2VhXHU1N2ViXHU1N2VjXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEy''@;'; put 'put ''XHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1XHU1ODI2XHU1ODI3XHU1ODI4XHU1ODI5XHU1ODJiXHU1ODJjXHU1ODJkXHU1ODJlXHU1ODJmXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2XHU1''@;'; put 'put ''ODM3XHU1ODM4XHU1ODM5XHU1ODNhXHU1ODNiXHU1ODNjXHU1ODNkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM2XVtnXV09MzQ4MTYrZyx5WzM0ODE2K2ddPV9bMTM2XVtnXSk7Zm9yKF9b''@;'; put 'put ''MTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODNlXHU1ODNmXHU1ODQwXHU1ODQxXHU1ODQyXHU1ODQzXHU1ODQ1XHU1ODQ2XHU1ODQ3XHU1ODQ4XHU1ODQ5XHU1ODRhXHU1ODRiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1''@;'; put 'put ''ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5XHU1ODVhXHU1ODViXHU1ODVjXHU1ODVkXHU1ODVmXHU1ODYwXHU1ODYxXHU1ODYyXHU1ODYzXHU1ODY0XHU1ODY2XHU1ODY3XHU1ODY4XHU1ODY5XHU1ODZhXHU1ODZkXHU1ODZlXHU1ODZmXHU1ODcwXHU1ODcxXHU1ODcyXHU1ODczXHU1ODc0''@;'; put 'put ''XHU1ODc1XHU1ODc2XHU1ODc3XHU1ODc4XHU1ODc5XHU1ODdhXHU1ODdiXHU1ODdjXHU1ODdkXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjXHVmZmZkXHU1ODhkXHU1ODhlXHU1ODhmXHU1ODkwXHU1ODkxXHU1ODk0XHU1ODk1XHU1ODk2XHU1''@;'; put 'put ''ODk3XHU1ODk4XHU1ODliXHU1ODljXHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGEzXHU1OGE0XHU1OGE1XHU1OGE2XHU1OGE3XHU1OGFhXHU1OGFiXHU1OGFjXHU1OGFkXHU1OGFlXHU1OGFmXHU1OGIwXHU1OGIxXHU1OGIyXHU1OGIzXHU1OGI0XHU1OGI1XHU1OGI2XHU1OGI3XHU1OGI4''@;'; put 'put ''XHU1OGI5XHU1OGJhXHU1OGJiXHU1OGJkXHU1OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2XHU1OGM3XHU1OGM4XHU1OGM5XHU1OGNhXHU1OGNiXHU1OGNjXHU1OGNkXHU1OGNlXHU1OGNmXHU1OGQwXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2XHU1OGQ3XHU1OGQ4XHU1''@;'; put 'put ''OGQ5XHU1OGRhXHU1OGRiXHU1OGRjXHU1OGRkXHU1OGRlXHU1OGRmXHU1OGUwXHU1OGUxXHU1OGUyXHU1OGUzXHU1OGU1XHU1OGU2XHU1OGU3XHU1OGU4XHU1OGU5XHU1OGVhXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhXHU1OGZiXHU1OGZj''@;'; put 'put ''XHU1OGZkXHU1OGZlXHU1OGZmXHU1OTAwXHU1OTAxXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4XHU1OTA5XHU1OTBhXHU1OTBiXHU1OTBjXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1''@;'; put 'put ''OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMyXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM3XVtnXV09MzUwNzIrZyx5WzM1MDcyK2ddPV9bMTM3''@;'; put 'put ''XVtnXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTNkXHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1OTQ2XHU1OTRhXHU1OTRjXHU1OTRkXHU1OTUwXHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1''@;'; put 'put ''OTVjXHU1OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2XHU1OTY3XHU1OTY4XHU1OTY5XHU1OTZhXHU1OTZiXHU1OTZjXHU1OTZkXHU1OTZlXHU1OTZmXHU1OTcwXHU1OTcxXHU1OTcyXHU1OTc1XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1OTdlXHU1OTdmXHU1OTgw''@;'; put 'put ''XHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1OTliXHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2XHVmZmZkXHU1OWE3XHU1OWFjXHU1OWFkXHU1OWIwXHU1OWIxXHU1OWIzXHU1''@;'; put 'put ''OWI0XHU1OWI1XHU1OWI2XHU1OWI3XHU1OWI4XHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmXHU1OWMwXHU1OWMxXHU1OWMyXHU1OWMzXHU1OWM0XHU1OWM1XHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNjXHU1OWNkXHU1OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlXHU1OWRm''@;'; put 'put ''XHU1OWUwXHU1OWUxXHU1OWUyXHU1OWU0XHU1OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWViXHU1OWVkXHU1OWVlXHU1OWVmXHU1OWYwXHU1OWYxXHU1OWYyXHU1OWYzXHU1OWY0XHU1OWY1XHU1OWY2XHU1OWY3XHU1OWY4XHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1''@;'; put 'put ''YTBhXHU1YTBiXHU1YTBkXHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEyXHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1YTFiXHU1YTFkXHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1YTI2XHU1YTI3XHU1YTI4XHU1YTJhXHU1YTJiXHU1YTJjXHU1YTJkXHU1YTJlXHU1YTJm''@;'; put 'put ''XHU1YTMwXHU1YTMzXHU1YTM1XHU1YTM3XHU1YTM4XHU1YTM5XHU1YTNhXHU1YTNiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxXHU1YTQyXHU1YTQzXHU1YTQ0XHU1YTQ1XHU1YTQ3XHU1YTQ4XHU1YTRiXHU1YTRjXHU1YTRkXHU1YTRlXHU1YTRmXHU1YTUwXHU1YTUxXHU1YTUyXHU1YTUzXHU1''@;'; put 'put ''YTU0XHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1YTViXHU1YTVjXHU1YTVkXHU1YTVlXHU1YTVmXHU1YTYwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM4XVtnXV09MzUzMjgrZyx5WzM1''@;'; put 'put ''MzI4K2ddPV9bMTM4XVtnXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiXHU1YTZjXHU1YTZkXHU1YTZlXHU1YTZmXHU1YTcwXHU1''@;'; put 'put ''YTcxXHU1YTcyXHU1YTczXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwXHU1YTgxXHU1YTgyXHU1YTgzXHU1YTg0XHU1YTg1XHU1YTg2XHU1YTg3XHU1YTg4XHU1YTg5XHU1YThhXHU1YThiXHU1YThjXHU1YThkXHU1YThlXHU1YThmXHU1YTkwXHU1YTkxXHU1YTkz''@;'; put 'put ''XHU1YTk0XHU1YTk1XHU1YTk2XHU1YTk3XHU1YTk4XHU1YTk5XHU1YTljXHU1YTlkXHU1YTllXHU1YTlmXHU1YWEwXHU1YWExXHU1YWEyXHU1YWEzXHU1YWE0XHU1YWE1XHU1YWE2XHU1YWE3XHU1YWE4XHU1YWE5XHU1YWFiXHU1YWFjXHVmZmZkXHU1YWFkXHU1YWFlXHU1YWFmXHU1YWIwXHU1''@;'; put 'put ''YWIxXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5XHU1YWJhXHU1YWJiXHU1YWJjXHU1YWJkXHU1YWJmXHU1YWMwXHU1YWMzXHU1YWM0XHU1YWM1XHU1YWM2XHU1YWM3XHU1YWM4XHU1YWNhXHU1YWNiXHU1YWNkXHU1YWNlXHU1YWNmXHU1YWQwXHU1YWQxXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5''@;'; put 'put ''XHU1YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjXHU1YWVkXHU1YWVlXHU1YWVmXHU1YWYwXHU1YWYyXHU1YWYzXHU1YWY0XHU1YWY1XHU1YWY2XHU1YWY3XHU1YWY4XHU1YWY5XHU1YWZhXHU1YWZiXHU1YWZjXHU1''@;'; put 'put ''YWZkXHU1YWZlXHU1YWZmXHU1YjAwXHU1YjAxXHU1YjAyXHU1YjAzXHU1YjA0XHU1YjA1XHU1YjA2XHU1YjA3XHU1YjA4XHU1YjBhXHU1YjBiXHU1YjBjXHU1YjBkXHU1YjBlXHU1YjBmXHU1YjEwXHU1YjExXHU1YjEyXHU1YjEzXHU1YjE0XHU1YjE1XHU1YjE4XHU1YjE5XHU1YjFhXHU1YjFi''@;'; put 'put ''XHU1YjFjXHU1YjFkXHU1YjFlXHU1YjFmXHU1YjIwXHU1YjIxXHU1YjIyXHU1YjIzXHU1YjI0XHU1YjI1XHU1YjI2XHU1YjI3XHU1YjI4XHU1YjI5XHU1YjJhXHU1YjJiXHU1YjJjXHU1YjJkXHU1YjJlXHU1YjJmXHU1YjMwXHU1YjMxXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4XHU1YjM5XHU1''@;'; put 'put ''YjNhXHU1YjNiXHU1YjNjXHU1YjNkXHU1YjNlXHU1YjNmXHU1YjQxXHU1YjQyXHU1YjQzXHU1YjQ0XHU1YjQ1XHU1YjQ2XHU1YjQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTM5XVtnXV09''@;'; put 'put ''MzU1ODQrZyx5WzM1NTg0K2ddPV9bMTM5XVtnXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjQ4XHU1YjQ5XHU1YjRhXHU1YjRiXHU1YjRjXHU1YjRkXHU1YjRlXHU1YjRmXHU1YjUyXHU1YjU2XHU1YjVlXHU1''@;'; put 'put ''YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2''@;'; put 'put ''XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmXHVmZmZkXHU1YmQxXHU1YmQ0XHU1''@;'; put 'put ''YmQ1XHU1YmQ2XHU1YmQ3XHU1YmQ4XHU1YmQ5XHU1YmRhXHU1YmRiXHU1YmRjXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5XHU1YmVhXHU1YmViXHU1YmVjXHU1YmVkXHU1YmVmXHU1YmYxXHU1YmYyXHU1YmYzXHU1YmY0XHU1YmY1XHU1YmY2XHU1YmY3XHU1YmZkXHU1YmZl''@;'; put 'put ''XHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1''@;'; put 'put ''YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3''@;'; put 'put ''XHU1YzY4XHU1YzY5XHU1YzZhXHU1YzZiXHU1YzZjXHU1YzZkXHU1YzcwXHU1YzcyXHU1YzczXHU1Yzc0XHU1Yzc1XHU1Yzc2XHU1Yzc3XHU1Yzc4XHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzXHU1Yzg0XHU1Yzg1XHU1Yzg2XHU1Yzg3XHU1Yzg5XHU1YzhhXHU1YzhiXHU1''@;'; put 'put ''YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkXHU1YzllXHU1YzlmXHU1Y2EwXHU1Y2ExXHU1Y2E0XHU1Y2E1XHU1Y2E2XHU1Y2E3XHU1Y2E4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTQwXVtnXV09MzU4NDArZyx5WzM1ODQwK2ddPV9bMTQwXVtnXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2FhXHU1Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2JhXHU1''@;'; put 'put ''Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2MyXHU1Y2MzXHU1Y2M1XHU1Y2M2XHU1Y2M3XHU1Y2M4XHU1Y2M5XHU1Y2NhXHU1Y2NjXHU1Y2NkXHU1Y2NlXHU1Y2NmXHU1Y2QwXHU1Y2QxXHU1Y2QzXHU1Y2Q0XHU1Y2Q1XHU1Y2Q2XHU1Y2Q3XHU1Y2Q4XHU1Y2RhXHU1Y2RiXHU1Y2RjXHU1Y2Rk''@;'; put 'put ''XHU1Y2RlXHU1Y2RmXHU1Y2UwXHU1Y2UyXHU1Y2UzXHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1Y2VlXHU1Y2VmXHU1Y2YxXHU1Y2YyXHU1Y2YzXHU1Y2Y0XHU1Y2Y1XHU1Y2Y2XHU1Y2Y3XHU1Y2Y4XHU1Y2Y5XHU1Y2ZhXHU1Y2ZjXHU1Y2ZkXHU1Y2ZlXHU1Y2ZmXHU1ZDAwXHVmZmZkXHU1''@;'; put 'put ''ZDAxXHU1ZDA0XHU1ZDA1XHU1ZDA4XHU1ZDA5XHU1ZDBhXHU1ZDBiXHU1ZDBjXHU1ZDBkXHU1ZDBmXHU1ZDEwXHU1ZDExXHU1ZDEyXHU1ZDEzXHU1ZDE1XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFjXHU1ZDFkXHU1ZDFmXHU1ZDIwXHU1ZDIxXHU1ZDIyXHU1ZDIzXHU1ZDI1XHU1ZDI4''@;'; put 'put ''XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmXHU1ZDMwXHU1ZDMxXHU1ZDMyXHU1ZDMzXHU1ZDM1XHU1ZDM2XHU1ZDM3XHU1ZDM4XHU1ZDM5XHU1ZDNhXHU1ZDNiXHU1ZDNjXHU1ZDNmXHU1ZDQwXHU1ZDQxXHU1ZDQyXHU1ZDQzXHU1ZDQ0XHU1ZDQ1XHU1ZDQ2XHU1ZDQ4XHU1ZDQ5XHU1ZDRkXHU1''@;'; put 'put ''ZDRlXHU1ZDRmXHU1ZDUwXHU1ZDUxXHU1ZDUyXHU1ZDUzXHU1ZDU0XHU1ZDU1XHU1ZDU2XHU1ZDU3XHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1ZDVlXHU1ZDVmXHU1ZDYwXHU1ZDYxXHU1ZDYyXHU1ZDYzXHU1ZDY0XHU1ZDY1XHU1ZDY2XHU1ZDY3XHU1ZDY4XHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcw''@;'; put 'put ''XHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1XHU1ZDc2XHU1ZDc3XHU1ZDc4XHU1ZDc5XHU1ZDdhXHU1ZDdiXHU1ZDdjXHU1ZDdkXHU1ZDdlXHU1ZDdmXHU1ZDgwXHU1ZDgxXHU1ZDgzXHU1ZDg0XHU1ZDg1XHU1ZDg2XHU1ZDg3XHU1ZDg4XHU1ZDg5XHU1ZDhhXHU1ZDhiXHU1ZDhjXHU1ZDhkXHU1''@;'; put 'put ''ZDhlXHU1ZDhmXHU1ZDkwXHU1ZDkxXHU1ZDkyXHU1ZDkzXHU1ZDk0XHU1ZDk1XHU1ZDk2XHU1ZDk3XHU1ZDk4XHU1ZDlhXHU1ZDliXHU1ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDFdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTQxXVtnXV09MzYwOTYrZyx5WzM2MDk2K2ddPV9bMTQxXVtnXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGExXHU1ZGEyXHU1ZGEzXHU1ZGE0XHU1ZGE1XHU1ZGE2XHU1ZGE3XHU1''@;'; put 'put ''ZGE4XHU1ZGE5XHU1ZGFhXHU1ZGFiXHU1ZGFjXHU1ZGFkXHU1ZGFlXHU1ZGFmXHU1ZGIwXHU1ZGIxXHU1ZGIyXHU1ZGIzXHU1ZGI0XHU1ZGI1XHU1ZGI2XHU1ZGI4XHU1ZGI5XHU1ZGJhXHU1ZGJiXHU1ZGJjXHU1ZGJkXHU1ZGJlXHU1ZGJmXHU1ZGMwXHU1ZGMxXHU1ZGMyXHU1ZGMzXHU1ZGM0''@;'; put 'put ''XHU1ZGM2XHU1ZGM3XHU1ZGM4XHU1ZGM5XHU1ZGNhXHU1ZGNiXHU1ZGNjXHU1ZGNlXHU1ZGNmXHU1ZGQwXHU1ZGQxXHU1ZGQyXHU1ZGQzXHU1ZGQ0XHU1ZGQ1XHU1ZGQ2XHU1ZGQ3XHU1ZGQ4XHU1ZGQ5XHU1ZGRhXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1''@;'; put 'put ''ZGVkXHVmZmZkXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4XHU1ZGY5XHU1ZGZhXHU1ZGZiXHU1ZGZjXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlXHU1ZTFmXHU1ZTIwXHU1ZTIxXHU1ZTIyXHU1ZTIz''@;'; put 'put ''XHU1ZTI0XHU1ZTI1XHU1ZTI4XHU1ZTI5XHU1ZTJhXHU1ZTJiXHU1ZTJjXHU1ZTJmXHU1ZTMwXHU1ZTMyXHU1ZTMzXHU1ZTM0XHU1ZTM1XHU1ZTM2XHU1ZTM5XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2XHU1ZTQ3XHU1ZTQ4XHU1ZTQ5XHU1ZTRhXHU1ZTRiXHU1''@;'; put 'put ''ZTRkXHU1ZTRlXHU1ZTRmXHU1ZTUwXHU1ZTUxXHU1ZTUyXHU1ZTUzXHU1ZTU2XHU1ZTU3XHU1ZTU4XHU1ZTU5XHU1ZTVhXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzXHU1ZTY0XHU1ZTY1XHU1ZTY2XHU1ZTY3XHU1ZTY4XHU1ZTY5XHU1ZTZhXHU1ZTZiXHU1ZTZjXHU1ZTZkXHU1ZTZl''@;'; put 'put ''XHU1ZTZmXHU1ZTcwXHU1ZTcxXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4XHU1ZWE5XHU1ZWFhXHU1''@;'; put 'put ''ZWFiXHU1ZWFjXHU1ZWFlXHU1ZWFmXHU1ZWIwXHU1ZWIxXHU1ZWIyXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmXHU1ZWMwXHU1ZWMxXHU1ZWMyXHU1ZWMzXHU1ZWM0XHU1ZWM1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sx''@;'; put 'put ''NDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQyXVtnXV09MzYzNTIrZyx5WzM2MzUyK2ddPV9bMTQyXVtnXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiXHU1ZWNjXHU1''@;'; put 'put ''ZWNkXHU1ZWNlXHU1ZWNmXHU1ZWQwXHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjXHU1ZWRkXHU1ZWRlXHU1ZWRmXHU1ZWUwXHU1ZWUxXHU1ZWUyXHU1ZWUzXHU1ZWU0XHU1ZWU1XHU1ZWU2XHU1ZWU3XHU1ZWU5XHU1ZWViXHU1ZWVjXHU1ZWVkXHU1ZWVlXHU1ZWVm''@;'; put 'put ''XHU1ZWYwXHU1ZWYxXHU1ZWYyXHU1ZWYzXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1''@;'; put 'put ''ZjIyXHU1ZjIzXHU1ZjI0XHVmZmZkXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyXHU1ZjMzXHU1ZjM0XHU1ZjM1XHU1ZjM2XHU1ZjM3XHU1ZjM4XHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxXHU1ZjQyXHU1ZjQzXHU1ZjQ0XHU1ZjQ1XHU1ZjQ2XHU1ZjQ3XHU1ZjQ4''@;'; put 'put ''XHU1ZjQ5XHU1ZjRhXHU1ZjRiXHU1ZjRjXHU1ZjRkXHU1ZjRlXHU1ZjRmXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1''@;'; put 'put ''Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyXHU1ZmEzXHU1ZmE0XHU1ZmE1XHU1ZmE2XHU1ZmE3XHU1ZmE5XHU1ZmFi''@;'; put 'put ''XHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1ZmIxXHU1ZmIyXHU1ZmIzXHU1ZmI0XHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlXHU1ZmJmXHU1ZmMwXHU1ZmMxXHU1ZmMyXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1''@;'; put 'put ''ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQzXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1sxNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQzXVtnXV09MzY2MDgrZyx5WzM2NjA4K2ddPV9bMTQzXVtnXSk7Zm9yKF9bMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDA4XHU2MDA5XHU2MDBiXHU2''@;'; put 'put ''MDBjXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2MDJkXHU2MDJlXHU2MDMwXHU2MDMxXHU2MDMyXHU2MDMzXHU2MDM0XHU2MDM2XHU2MDM3XHU2MDM4XHU2MDM5XHU2MDNhXHU2MDNkXHU2MDNlXHU2MDQw''@;'; put 'put ''XHU2MDQ0XHU2MDQ1XHU2MDQ2XHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRhXHU2MDRjXHU2MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVlXHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2''@;'; put 'put ''MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwXHVmZmZkXHU2MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEyXHU2MGE0''@;'; put 'put ''XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIwXHU2MGIzXHU2MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJkXHU2MGJlXHU2MGJmXHU2MGMwXHU2MGMxXHU2MGMyXHU2MGMzXHU2MGM0XHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjXHU2MGNkXHU2MGNlXHU2MGNmXHU2''@;'; put 'put ''MGQwXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2MGUxXHU2MGUyXHU2MGUzXHU2MGU0XHU2MGU1XHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3XHU2MGY4XHU2MGZiXHU2MGZjXHU2MGZkXHU2MGZlXHU2MGZmXHU2MTAyXHU2MTAzXHU2MTA0''@;'; put 'put ''XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwXHU2MTExXHU2MTEyXHU2MTEzXHU2MTE0XHU2MTE2XHU2MTE3XHU2MTE4XHU2MTE5XHU2MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2MTIxXHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjXHU2MTJkXHU2MTJlXHU2''@;'; put 'put ''MTJmXHU2MTMwXHU2MTMxXHU2MTMyXHU2MTMzXHU2MTM0XHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM4XHU2MTM5XHU2MTNhXHU2MTNiXHU2MTNjXHU2MTNkXHU2MTNlXHU2MTQwXHU2MTQxXHU2MTQyXHU2MTQzXHU2MTQ0XHU2MTQ1XHU2MTQ2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ0''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ0XVtnXV09MzY4NjQrZyx5WzM2ODY0K2ddPV9bMTQ0XVtnXSk7Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTQ3XHU2''@;'; put 'put ''MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2XHU2MTU3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTViXHU2MTVjXHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5XHU2MTZhXHU2MTZiXHU2MTZjXHU2MTZk''@;'; put 'put ''XHU2MTZlXHU2MTZmXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4XHU2MTc5XHU2MTdhXHU2MTdiXHU2MTdjXHU2MTdkXHU2MTdlXHU2MTdmXHU2MTgwXHU2MTgxXHU2MTgyXHU2MTgzXHU2MTg0XHU2MTg1XHU2MTg2XHU2MTg3XHU2MTg4XHU2MTg5XHU2MThhXHU2MThjXHU2''@;'; put 'put ''MThkXHU2MThmXHU2MTkwXHU2MTkxXHU2MTkyXHU2MTkzXHU2MTk1XHVmZmZkXHU2MTk2XHU2MTk3XHU2MTk4XHU2MTk5XHU2MTlhXHU2MTliXHU2MTljXHU2MTllXHU2MTlmXHU2MWEwXHU2MWExXHU2MWEyXHU2MWEzXHU2MWE0XHU2MWE1XHU2MWE2XHU2MWFhXHU2MWFiXHU2MWFkXHU2MWFl''@;'; put 'put ''XHU2MWFmXHU2MWIwXHU2MWIxXHU2MWIyXHU2MWIzXHU2MWI0XHU2MWI1XHU2MWI2XHU2MWI4XHU2MWI5XHU2MWJhXHU2MWJiXHU2MWJjXHU2MWJkXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzXHU2MWM0XHU2MWM1XHU2MWM2XHU2MWM3XHU2MWM5XHU2MWNjXHU2MWNkXHU2MWNlXHU2MWNmXHU2''@;'; put 'put ''MWQwXHU2MWQzXHU2MWQ1XHU2MWQ2XHU2MWQ3XHU2MWQ4XHU2MWQ5XHU2MWRhXHU2MWRiXHU2MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUwXHU2MWUxXHU2MWUyXHU2MWUzXHU2MWU0XHU2MWU1XHU2MWU3XHU2MWU4XHU2MWU5XHU2MWVhXHU2MWViXHU2MWVjXHU2MWVkXHU2MWVlXHU2MWVm''@;'; put 'put ''XHU2MWYwXHU2MWYxXHU2MWYyXHU2MWYzXHU2MWY0XHU2MWY2XHU2MWY3XHU2MWY4XHU2MWY5XHU2MWZhXHU2MWZiXHU2MWZjXHU2MWZkXHU2MWZlXHU2MjAwXHU2MjAxXHU2MjAyXHU2MjAzXHU2MjA0XHU2MjA1XHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2''@;'; put 'put ''MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2XHU2MjM4XHU2MjM5XHU2MjNhXHU2MjNiXHU2MjNjXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMTQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ1XVtnXV09MzcxMjArZyx5WzM3MTIwK2ddPV9bMTQ1XVtnXSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjXHU2MjVkXHU2MjVlXHU2MjVmXHU2MjYwXHU2MjYxXHU2MjYyXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2Mjgx''@;'; put 'put ''XHU2MjgyXHU2MjgzXHU2Mjg1XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiXHU2MjhjXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2''@;'; put 'put ''MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxXHVmZmZkXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZh''@;'; put 'put ''XHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2''@;'; put 'put ''MzMxXHU2MzMzXHU2MzM0XHU2MzM1XHU2MzM2XHU2MzM3XHU2MzM4XHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2XHU2MzU3XHU2MzU4XHU2MzU5XHU2MzVhXHU2MzViXHU2MzVj''@;'; put 'put ''XHU2MzVkXHU2MzYwXHU2MzY0XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2''@;'; put 'put ''MzhkXHU2MzkxXHU2MzkzXHU2Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5XHU2MzlhXHU2MzliXHU2MzljXHU2MzlkXHU2MzllXHU2MzlmXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ2XVtnXV09MzczNzYrZyx5WzM3Mzc2K2ddPV9bMTQ2XVtnXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2Q3XHU2M2Q4XHU2M2Q5XHU2M2RhXHU2M2RiXHU2M2RjXHU2M2RkXHU2M2RmXHU2M2UyXHU2M2U0XHU2M2U1XHU2M2U2''@;'; put 'put ''XHU2M2U3XHU2M2U4XHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2M2ZhXHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2NDA2XHU2NDA3XHU2NDA4XHU2NDA5XHU2NDBhXHU2NDBkXHU2NDBlXHU2NDExXHU2NDEyXHU2''@;'; put 'put ''NDE1XHU2NDE2XHU2NDE3XHU2NDE4XHU2NDE5XHU2NDFhXHU2NDFkXHU2NDFmXHU2NDIyXHU2NDIzXHU2NDI0XHVmZmZkXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlXHU2NDJmXHU2NDMwXHU2NDMxXHU2NDMyXHU2NDMzXHU2NDM1XHU2NDM2XHU2NDM3XHU2NDM4XHU2NDM5''@;'; put 'put ''XHU2NDNiXHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiXHU2NDRjXHU2NDRkXHU2NDRlXHU2NDRmXHU2NDUwXHU2NDUxXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYyXHU2''@;'; put 'put ''NDYzXHU2NDY0XHU2NDY1XHU2NDY2XHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlXHU2NDZmXHU2NDcwXHU2NDcxXHU2NDcyXHU2NDczXHU2NDc0XHU2NDc1XHU2NDc2XHU2NDc3XHU2NDdiXHU2NDdjXHU2NDdkXHU2NDdlXHU2NDdmXHU2NDgwXHU2NDgxXHU2NDgzXHU2NDg2XHU2NDg4''@;'; put 'put ''XHU2NDg5XHU2NDhhXHU2NDhiXHU2NDhjXHU2NDhkXHU2NDhlXHU2NDhmXHU2NDkwXHU2NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlhXHU2NDliXHU2NDljXHU2NDlkXHU2NDlmXHU2NGEwXHU2NGExXHU2NGEyXHU2NGEzXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4XHU2NGFhXHU2NGFiXHU2''@;'; put 'put ''NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2NGMxXHU2NGMzXHU2NGM0XHU2NGM2XHU2NGM3XHU2NGM4XHU2NGM5XHU2NGNhXHU2NGNiXHU2NGNjXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2NGQ1XHU2NGQ2XHU2NGQ5''@;'; put 'put ''XHU2NGRhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ3XVtnXV09Mzc2MzIrZyx5WzM3NjMyK2ddPV9bMTQ3XVtnXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3XHU2NGU4XHU2NGU5XHU2NGVhXHU2NGViXHU2NGVjXHU2NGVkXHU2NGVlXHU2NGVmXHU2NGYwXHU2NGYxXHU2NGYyXHU2NGYzXHU2NGY0XHU2NGY1''@;'; put 'put ''XHU2NGY2XHU2NGY3XHU2NGY4XHU2NGY5XHU2NGZhXHU2NGZiXHU2NGZjXHU2NGZkXHU2NGZlXHU2NGZmXHU2NTAxXHU2NTAyXHU2NTAzXHU2NTA0XHU2NTA1XHU2NTA2XHU2NTA3XHU2NTA4XHU2NTBhXHU2NTBiXHU2NTBjXHU2NTBkXHU2NTBlXHU2NTBmXHU2NTEwXHU2NTExXHU2NTEzXHU2''@;'; put 'put ''NTE0XHU2NTE1XHU2NTE2XHU2NTE3XHU2NTE5XHU2NTFhXHU2NTFiXHU2NTFjXHU2NTFkXHU2NTFlXHU2NTFmXHU2NTIwXHU2NTIxXHVmZmZkXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2XHU2NTI3XHU2NTI4XHU2NTI5XHU2NTJhXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMz''@;'; put 'put ''XHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwXHU2NTQxXHU2NTQyXHU2NTQzXHU2NTQ0XHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2''@;'; put 'put ''NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4XHU2NTc5XHU2NTdhXHU2NTdiXHU2NTdjXHU2NTdkXHU2NTdlXHU2NTdmXHU2NTgwXHU2NTgxXHU2NTgyXHU2NTgzXHU2NTg0XHU2NTg1XHU2NTg2XHU2NTg4''@;'; put 'put ''XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWI1XHU2NWI2XHU2''@;'; put 'put ''NWI3XHU2NWI4XHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4XHU2NWQ5XHU2NWRhXHU2NWRiXHU2NWRjXHU2NWRkXHU2NWRlXHU2NWRmXHU2NWUxXHU2NWUz''@;'; put 'put ''XHU2NWU0XHU2NWVhXHU2NWViXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ4XVtnXV09Mzc4ODgrZyx5WzM3ODg4K2ddPV9bMTQ4XVtnXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiXHU2NWZjXHU2NWZkXHU2NWZlXHU2NWZmXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjEx''@;'; put 'put ''XHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3XHU2NjM4XHU2NjM5XHU2NjNhXHU2NjNiXHU2NjNkXHU2''@;'; put 'put ''NjNmXHU2NjQwXHU2NjQyXHU2NjQ0XHU2NjQ1XHU2NjQ2XHU2NjQ3XHU2NjQ4XHU2NjQ5XHU2NjRhXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4XHVmZmZkXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5XHU2NjZh''@;'; put 'put ''XHU2NjZiXHU2NjZjXHU2NjZkXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2''@;'; put 'put ''NjkzXHU2Njk0XHU2Njk1XHU2Njk4XHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjllXHU2NjlmXHU2NmEwXHU2NmExXHU2NmEyXHU2NmEzXHU2NmE0XHU2NmE1XHU2NmE2XHU2NmE5XHU2NmFhXHU2NmFiXHU2NmFjXHU2NmFkXHU2NmFmXHU2NmIwXHU2NmIxXHU2NmIyXHU2NmIzXHU2NmI1''@;'; put 'put ''XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmXHU2NmMwXHU2NmMxXHU2NmMyXHU2NmMzXHU2NmM0XHU2NmM1XHU2NmM2XHU2NmM3XHU2NmM4XHU2NmM5XHU2NmNhXHU2NmNiXHU2NmNjXHU2NmNkXHU2NmNlXHU2NmNmXHU2NmQwXHU2NmQxXHU2NmQyXHU2''@;'; put 'put ''NmQzXHU2NmQ0XHU2NmQ1XHU2NmQ2XHU2NmQ3XHU2NmQ4XHU2NmRhXHU2NmRlXHU2NmRmXHU2NmUwXHU2NmUxXHU2NmUyXHU2NmUzXHU2NmU0XHU2NmU1XHU2NmU3XHU2NmU4XHU2NmVhXHU2NmViXHU2NmVjXHU2NmVkXHU2NmVlXHU2NmVmXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZh''@;'; put 'put ''XHU2NmZiXHU2NmZkXHU2NzAxXHU2NzAyXHU2NzAzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTQ5XVtnXV09MzgxNDQrZyx5WzM4MTQ0K2ddPV9bMTQ5XVtnXSk7Zm9yKF9bMTUwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2NzFjXHU2NzFlXHU2NzIwXHU2NzIxXHU2NzIy''@;'; put 'put ''XHU2NzIzXHU2NzI0XHU2NzI1XHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNiXHU2NzNjXHU2NzNlXHU2NzNmXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2NzU0XHU2NzU1XHU2''@;'; put 'put ''NzU3XHU2NzU4XHU2NzU5XHU2NzVhXHU2NzViXHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZiXHU2NzZjXHU2NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2XHVmZmZkXHU2Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2''@;'; put 'put ''XHU2Nzg4XHU2NzhhXHU2NzhjXHU2NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2Nzk2XHU2Nzk5XHU2NzliXHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2N2E2XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5XHU2N2JhXHU2N2JiXHU2''@;'; put 'put ''N2JjXHU2N2JkXHU2N2JlXHU2N2JmXHU2N2MwXHU2N2MyXHU2N2M1XHU2N2M2XHU2N2M3XHU2N2M4XHU2N2M5XHU2N2NhXHU2N2NiXHU2N2NjXHU2N2NkXHU2N2NlXHU2N2Q1XHU2N2Q2XHU2N2Q3XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4XHU2N2Vh''@;'; put 'put ''XHU2N2ViXHU2N2VkXHU2N2VlXHU2N2YyXHU2N2Y1XHU2N2Y2XHU2N2Y3XHU2N2Y4XHU2N2Y5XHU2N2ZhXHU2N2ZiXHU2N2ZjXHU2N2ZlXHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4XHU2ODE5XHU2ODFhXHU2ODFiXHU2''@;'; put 'put ''ODFjXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyXHU2ODIzXHU2ODI0XHU2ODI1XHU2ODI2XHU2ODI3XHU2ODI4XHU2ODJiXHU2ODJjXHU2ODJkXHU2ODJlXHU2ODJmXHU2ODMwXHU2ODMxXHU2ODM0XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2ODQ3XHU2ODRiXHU2ODRkXHU2ODRm''@;'; put 'put ''XHU2ODUyXHU2ODU2XHU2ODU3XHU2ODU4XHU2ODU5XHU2ODVhXHU2ODViXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUwXVtnXV09Mzg0MDArZyx5WzM4NDAwK2ddPV9bMTUwXVtnXSk7Zm9y''@;'; put 'put ''KF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVmXHU2ODZhXHU2ODZjXHU2ODZkXHU2ODZlXHU2ODZmXHU2ODcwXHU2ODcxXHU2ODcyXHU2ODczXHU2ODc1XHU2ODc4XHU2ODc5XHU2ODdh''@;'; put 'put ''XHU2ODdiXHU2ODdjXHU2ODdkXHU2ODdlXHU2ODdmXHU2ODgwXHU2ODgyXHU2ODg0XHU2ODg3XHU2ODg4XHU2ODg5XHU2ODhhXHU2ODhiXHU2ODhjXHU2ODhkXHU2ODhlXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4XHU2ODk5XHU2ODlhXHU2ODliXHU2ODljXHU2''@;'; put 'put ''ODlkXHU2ODllXHU2ODlmXHU2OGEwXHU2OGExXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4XHVmZmZkXHU2OGI5XHU2OGJhXHU2OGJiXHU2OGJjXHU2OGJkXHU2OGJlXHU2OGJmXHU2OGMx''@;'; put 'put ''XHU2OGMzXHU2OGM0XHU2OGM1XHU2OGM2XHU2OGM3XHU2OGM4XHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiXHU2OGRjXHU2OGRkXHU2OGRlXHU2OGRmXHU2OGUxXHU2OGUyXHU2OGU0XHU2OGU1XHU2OGU2XHU2''@;'; put 'put ''OGU3XHU2OGU4XHU2OGU5XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2XHU2OTA3XHU2OTA4XHU2OTA5XHU2OTBhXHU2OTBj''@;'; put 'put ''XHU2OTBmXHU2OTExXHU2OTEzXHU2OTE0XHU2OTE1XHU2OTE2XHU2OTE3XHU2OTE4XHU2OTE5XHU2OTFhXHU2OTFiXHU2OTFjXHU2OTFkXHU2OTFlXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1XHU2OTI2XHU2OTI3XHU2OTI4XHU2OTI5XHU2OTJhXHU2OTJiXHU2OTJjXHU2OTJlXHU2OTJmXHU2''@;'; put 'put ''OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQzXHU2OTQ0XHU2OTQ1XHU2OTQ2XHU2OTQ3XHU2OTQ4XHU2OTQ5XHU2OTRhXHU2OTRiXHU2OTRjXHU2OTRkXHU2OTRlXHU2OTRmXHU2OTUwXHU2OTUx''@;'; put 'put ''XHU2OTUyXHU2OTUzXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUxXVtnXV09Mzg2NTYrZyx5WzM4NjU2K2ddPV9b''@;'; put 'put ''MTUxXVtnXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyXHU2OTczXHU2OTc0''@;'; put 'put ''XHU2OTc1XHU2OTc2XHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlXHU2OThmXHU2OTkwXHU2OTkxXHU2OTkyXHU2OTkzXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkXHU2OTllXHU2OTlmXHU2OWEwXHU2''@;'; put 'put ''OWExXHU2OWEyXHU2OWEzXHU2OWE0XHU2OWE1XHU2OWE2XHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkXHVmZmZkXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyXHU2OWMzXHU2OWM0''@;'; put 'put ''XHU2OWM1XHU2OWM2XHU2OWM3XHU2OWM4XHU2OWM5XHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1XHU2OWQ2XHU2OWQ3XHU2OWQ4XHU2OWQ5XHU2OWRhXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxXHU2OWUyXHU2OWUzXHU2OWU0XHU2OWU1XHU2OWU2XHU2OWU3XHU2''@;'; put 'put ''OWU4XHU2OWU5XHU2OWVhXHU2OWViXHU2OWVjXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzXHU2OWY0XHU2OWY1XHU2OWY2XHU2OWY3XHU2OWY4XHU2OWY5XHU2OWZhXHU2OWZiXHU2OWZjXHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAyXHU2YTAzXHU2YTA0XHU2YTA1XHU2YTA2XHU2YTA3''@;'; put 'put ''XHU2YTA4XHU2YTA5XHU2YTBiXHU2YTBjXHU2YTBkXHU2YTBlXHU2YTBmXHU2YTEwXHU2YTExXHU2YTEyXHU2YTEzXHU2YTE0XHU2YTE1XHU2YTE2XHU2YTE5XHU2YTFhXHU2YTFiXHU2YTFjXHU2YTFkXHU2YTFlXHU2YTIwXHU2YTIyXHU2YTIzXHU2YTI0XHU2YTI1XHU2YTI2XHU2YTI3XHU2''@;'; put 'put ''YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2XHU2YTM3XHU2YTM4XHU2YTM5XHU2YTNhXHU2YTNiXHU2YTNjXHU2YTNmXHU2YTQwXHU2YTQxXHU2YTQyXHU2YTQzXHU2YTQ1XHU2YTQ2XHU2YTQ4XHU2YTQ5XHU2YTRhXHU2YTRiXHU2YTRj''@;'; put 'put ''XHU2YTRkXHU2YTRlXHU2YTRmXHU2YTUxXHU2YTUyXHU2YTUzXHU2YTU0XHU2YTU1XHU2YTU2XHU2YTU3XHU2YTVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUyXVtnXV09Mzg5MTIrZyx5''@;'; put 'put ''WzM4OTEyK2ddPV9bMTUyXVtnXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVjXHU2YTVkXHU2YTVlXHU2YTVmXHU2YTYwXHU2YTYyXHU2YTYzXHU2YTY0XHU2YTY2XHU2YTY3XHU2YTY4XHU2YTY5XHU2YTZh''@;'; put 'put ''XHU2YTZiXHU2YTZjXHU2YTZkXHU2YTZlXHU2YTZmXHU2YTcwXHU2YTcyXHU2YTczXHU2YTc0XHU2YTc1XHU2YTc2XHU2YTc3XHU2YTc4XHU2YTdhXHU2YTdiXHU2YTdkXHU2YTdlXHU2YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1XHU2YTg2XHU2YTg3XHU2YTg4XHU2YTg5XHU2YThhXHU2''@;'; put 'put ''YThiXHU2YThjXHU2YThkXHU2YThmXHU2YTkyXHU2YTkzXHU2YTk0XHU2YTk1XHU2YTk2XHU2YTk4XHU2YTk5XHU2YTlhXHU2YTliXHU2YTljXHU2YTlkXHU2YTllXHU2YTlmXHU2YWExXHU2YWEyXHU2YWEzXHU2YWE0XHU2YWE1XHU2YWE2XHVmZmZkXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFk''@;'; put 'put ''XHU2YWFlXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWIyXHU2YWIzXHU2YWI0XHU2YWI1XHU2YWI2XHU2YWI3XHU2YWI4XHU2YWI5XHU2YWJhXHU2YWJiXHU2YWJjXHU2YWJkXHU2YWJlXHU2YWJmXHU2YWMwXHU2YWMxXHU2YWMyXHU2YWMzXHU2YWM0XHU2YWM1XHU2YWM2XHU2YWM3XHU2YWM4XHU2''@;'; put 'put ''YWM5XHU2YWNhXHU2YWNiXHU2YWNjXHU2YWNkXHU2YWNlXHU2YWNmXHU2YWQwXHU2YWQxXHU2YWQyXHU2YWQzXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWQ3XHU2YWQ4XHU2YWQ5XHU2YWRhXHU2YWRiXHU2YWRjXHU2YWRkXHU2YWRlXHU2YWRmXHU2YWUwXHU2YWUxXHU2YWUyXHU2YWUzXHU2YWU0''@;'; put 'put ''XHU2YWU1XHU2YWU2XHU2YWU3XHU2YWU4XHU2YWU5XHU2YWVhXHU2YWViXHU2YWVjXHU2YWVkXHU2YWVlXHU2YWVmXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWYzXHU2YWY0XHU2YWY1XHU2YWY2XHU2YWY3XHU2YWY4XHU2YWY5XHU2YWZhXHU2YWZiXHU2YWZjXHU2YWZkXHU2YWZlXHU2YWZmXHU2''@;'; put 'put ''YjAwXHU2YjAxXHU2YjAyXHU2YjAzXHU2YjA0XHU2YjA1XHU2YjA2XHU2YjA3XHU2YjA4XHU2YjA5XHU2YjBhXHU2YjBiXHU2YjBjXHU2YjBkXHU2YjBlXHU2YjBmXHU2YjEwXHU2YjExXHU2YjEyXHU2YjEzXHU2YjE0XHU2YjE1XHU2YjE2XHU2YjE3XHU2YjE4XHU2YjE5XHU2YjFhXHU2YjFi''@;'; put 'put ''XHU2YjFjXHU2YjFkXHU2YjFlXHU2YjFmXHU2YjI1XHU2YjI2XHU2YjI4XHU2YjI5XHU2YjJhXHU2YjJiXHU2YjJjXHU2YjJkXHU2YjJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTUzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTUzXVtn''@;'; put 'put ''XV09MzkxNjgrZyx5WzM5MTY4K2ddPV9bMTUzXVtnXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNk''@;'; put 'put ''XHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkXHU2YjRlXHU2YjRmXHU2YjUwXHU2YjUxXHU2YjUyXHU2YjUzXHU2YjU0XHU2YjU1XHU2YjU2XHU2YjU3XHU2YjU4XHU2YjVhXHU2YjViXHU2YjVjXHU2YjVkXHU2YjVlXHU2YjVmXHU2''@;'; put 'put ''YjYwXHU2YjYxXHU2YjY4XHU2YjY5XHU2YjZiXHU2YjZjXHU2YjZkXHU2YjZlXHU2YjZmXHU2YjcwXHU2YjcxXHU2YjcyXHU2YjczXHU2Yjc0XHU2Yjc1XHU2Yjc2XHU2Yjc3XHU2Yjc4XHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4XHVmZmZkXHU2YjhjXHU2Yjhl''@;'; put 'put ''XHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljXHU2YjlkXHU2YjllXHU2YjlmXHU2YmEwXHU2YmEyXHU2YmEzXHU2YmE0XHU2YmE1XHU2YmE2XHU2YmE3XHU2YmE4XHU2YmE5XHU2YmFiXHU2YmFjXHU2YmFkXHU2YmFlXHU2YmFmXHU2YmIwXHU2''@;'; put 'put ''YmIxXHU2YmIyXHU2YmI2XHU2YmI4XHU2YmI5XHU2YmJhXHU2YmJiXHU2YmJjXHU2YmJkXHU2YmJlXHU2YmMwXHU2YmMzXHU2YmM0XHU2YmM2XHU2YmM3XHU2YmM4XHU2YmM5XHU2YmNhXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjXHU2YmRkXHU2YmRlXHU2YmRm''@;'; put 'put ''XHU2YmUwXHU2YmUyXHU2YmUzXHU2YmU0XHU2YmU1XHU2YmU2XHU2YmU3XHU2YmU4XHU2YmU5XHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlXHU2YmZmXHU2YzAwXHU2YzAxXHU2YzAyXHU2''@;'; put 'put ''YzAzXHU2YzA0XHU2YzA4XHU2YzA5XHU2YzBhXHU2YzBiXHU2YzBjXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNl''@;'; put 'put ''XHU2YzNmXHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiXHU2YzRjXHU2YzRkXHU2YzRlXHU2YzRmXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTRdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTU0XVtnXV09Mzk0MjQrZyx5WzM5NDI0K2ddPV9bMTU0XVtnXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiXHU2YzZj''@;'; put 'put ''XHU2YzZkXHU2YzZlXHU2YzZmXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2''@;'; put 'put ''YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4XHVmZmZk''@;'; put 'put ''XHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2''@;'; put 'put ''ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmXHU2ZDIwXHU2ZDIxXHU2ZDIyXHU2ZDIzXHU2ZDI0XHU2ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQy''@;'; put 'put ''XHU2ZDQ0XHU2ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2''@;'; put 'put ''ZDdhXHU2ZDdiXHU2ZDdkXHU2ZDdlXHU2ZDdmXHU2ZDgwXHU2ZDgxXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZDk5XHU2ZDlhXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIw''@;'; put 'put ''XHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5XHU2ZGJhXHU2ZGJiXHU2ZGJjXHU2ZGJkXHU2ZGJlXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTVdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTU1XVtnXV09Mzk2ODArZyx5WzM5NjgwK2ddPV9bMTU1XVtnXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2ZGQyXHU2ZGQzXHU2ZGQ0''@;'; put 'put ''XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUzXHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVhXHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYyXHU2ZGY0XHU2ZGY1XHU2ZGY2XHU2ZGY4XHU2ZGZhXHU2ZGZkXHU2ZGZlXHU2ZGZmXHU2ZTAwXHU2ZTAxXHU2''@;'; put 'put ''ZTAyXHU2ZTAzXHU2ZTA0XHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2ZTE5XHU2ZTFiXHU2ZTFjXHU2ZTFlXHU2ZTFmXHU2ZTIyXHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMz''@;'; put 'put ''XHU2ZTM1XHVmZmZkXHU2ZTM2XHU2ZTM3XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTNkXHU2ZTNlXHU2ZTNmXHU2ZTQwXHU2ZTQxXHU2ZTQyXHU2ZTQ1XHU2ZTQ2XHU2ZTQ3XHU2ZTQ4XHU2ZTQ5XHU2ZTRhXHU2ZTRiXHU2ZTRjXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2ZTU1XHU2ZTU3XHU2''@;'; put 'put ''ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwXHU2ZTYxXHU2ZTYyXHU2ZTYzXHU2ZTY0XHU2ZTY1XHU2ZTY2XHU2ZTY3XHU2ZTY4XHU2ZTY5XHU2ZTZhXHU2ZTZjXHU2ZTZkXHU2ZTZmXHU2ZTcwXHU2ZTcxXHU2ZTcyXHU2ZTczXHU2ZTc0XHU2ZTc1XHU2ZTc2XHU2ZTc3XHU2ZTc4''@;'; put 'put ''XHU2ZTc5XHU2ZTdhXHU2ZTdiXHU2ZTdjXHU2ZTdkXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2ZTg3XHU2ZTg4XHU2ZThhXHU2ZThiXHU2ZThjXHU2ZThkXHU2ZThlXHU2ZTkxXHU2ZTkyXHU2ZTkzXHU2ZTk0XHU2ZTk1XHU2ZTk2XHU2ZTk3XHU2ZTk5XHU2ZTlhXHU2ZTliXHU2ZTlkXHU2''@;'; put 'put ''ZTllXHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2ZWJjXHU2ZWJlXHU2ZWJmXHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5XHU2ZWNh''@;'; put 'put ''XHU2ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3XHU2ZWVhXHU2ZWViXHU2ZWVjXHU2ZWVkXHU2ZWVlXHU2ZWVmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxNTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU2XVtnXV09Mzk5MzYrZyx5WzM5OTM2K2ddPV9bMTU2XVtnXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1''@;'; put 'put ''XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhXHU2ZWZiXHU2ZWZjXHU2ZWZkXHU2ZWZlXHU2ZWZmXHU2ZjAwXHU2ZjAxXHU2ZjAzXHU2ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhXHU2ZjBiXHU2ZjBjXHU2ZjBkXHU2ZjBlXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2XHU2ZjE3XHU2ZjE4XHU2''@;'; put 'put ''ZjE5XHU2ZjFhXHU2ZjFiXHU2ZjFjXHU2ZjFkXHU2ZjFlXHU2ZjFmXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3XHU2ZjM4XHU2ZjM5XHU2ZjNhXHU2ZjNiXHU2ZjNjXHU2ZjNkXHU2ZjNm''@;'; put 'put ''XHU2ZjQwXHU2ZjQxXHU2ZjQyXHVmZmZkXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlXHU2ZjRmXHU2ZjUwXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU0XHU2ZjU1XHU2ZjU2XHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2''@;'; put 'put ''ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3XHU2ZjY4XHU2ZjY5XHU2ZjZhXHU2ZjZiXHU2ZjZjXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkXHU2ZjdlXHU2ZjdmXHU2ZjgwXHU2ZjgxXHU2ZjgyXHU2ZjgzXHU2Zjg1XHU2Zjg2''@;'; put 'put ''XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmXHU2ZjkwXHU2ZjkxXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk1XHU2Zjk2XHU2Zjk3XHU2Zjk4XHU2Zjk5XHU2ZjlhXHU2ZjliXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyXHU2ZmEzXHU2ZmE0XHU2ZmE1XHU2ZmE2XHU2ZmE4XHU2ZmE5XHU2''@;'; put 'put ''ZmFhXHU2ZmFiXHU2ZmFjXHU2ZmFkXHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmIxXHU2ZmIyXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2ZmJhXHU2ZmJiXHU2ZmJjXHU2ZmJkXHU2ZmJlXHU2ZmJmXHU2ZmMxXHU2ZmMzXHU2ZmM0XHU2ZmM1XHU2ZmM2XHU2ZmM3XHU2ZmM4XHU2ZmNhXHU2ZmNi''@;'; put 'put ''XHU2ZmNjXHU2ZmNkXHU2ZmNlXHU2ZmNmXHU2ZmQwXHU2ZmQzXHU2ZmQ0XHU2ZmQ1XHU2ZmQ2XHU2ZmQ3XHU2ZmQ4XHU2ZmQ5XHU2ZmRhXHU2ZmRiXHU2ZmRjXHU2ZmRkXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTU3XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxNTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU3XVtnXV09NDAxOTIrZyx5WzQwMTkyK2ddPV9bMTU3XVtnXSk7Zm9yKF9bMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmU2XHU2ZmU3XHU2ZmU4''@;'; put 'put ''XHU2ZmU5XHU2ZmVhXHU2ZmViXHU2ZmVjXHU2ZmVkXHU2ZmYwXHU2ZmYxXHU2ZmYyXHU2ZmYzXHU2ZmY0XHU2ZmY1XHU2ZmY2XHU2ZmY3XHU2ZmY4XHU2ZmY5XHU2ZmZhXHU2ZmZiXHU2ZmZjXHU2ZmZkXHU2ZmZlXHU2ZmZmXHU3MDAwXHU3MDAxXHU3MDAyXHU3MDAzXHU3MDA0XHU3MDA1XHU3''@;'; put 'put ''MDA2XHU3MDA3XHU3MDA4XHU3MDA5XHU3MDBhXHU3MDBiXHU3MDBjXHU3MDBkXHU3MDBlXHU3MDBmXHU3MDEwXHU3MDEyXHU3MDEzXHU3MDE0XHU3MDE1XHU3MDE2XHU3MDE3XHU3MDE4XHU3MDE5XHU3MDFjXHU3MDFkXHU3MDFlXHU3MDFmXHU3MDIwXHU3MDIxXHU3MDIyXHU3MDI0XHU3MDI1''@;'; put 'put ''XHU3MDI2XHU3MDI3XHU3MDI4XHU3MDI5XHU3MDJhXHVmZmZkXHU3MDJiXHU3MDJjXHU3MDJkXHU3MDJlXHU3MDJmXHU3MDMwXHU3MDMxXHU3MDMyXHU3MDMzXHU3MDM0XHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhXHU3MDNiXHU3MDNjXHU3MDNkXHU3MDNlXHU3MDNmXHU3MDQwXHU3MDQxXHU3''@;'; put 'put ''MDQyXHU3MDQzXHU3MDQ0XHU3MDQ1XHU3MDQ2XHU3MDQ3XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDRkXHU3MDRlXHU3MDUwXHU3MDUxXHU3MDUyXHU3MDUzXHU3MDU0XHU3MDU1XHU3MDU2XHU3MDU3XHU3MDU4XHU3MDU5XHU3MDVhXHU3MDViXHU3MDVjXHU3MDVkXHU3MDVmXHU3MDYw''@;'; put 'put ''XHU3MDYxXHU3MDYyXHU3MDYzXHU3MDY0XHU3MDY1XHU3MDY2XHU3MDY3XHU3MDY4XHU3MDY5XHU3MDZhXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3''@;'; put 'put ''MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllXHU3MDlmXHU3MGEwXHU3MGExXHU3MGEyXHU3MGEzXHU3MGE0XHU3MGE1XHU3MGE2XHU3MGE3XHU3MGE4XHU3MGE5XHU3MGFhXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1''@;'; put 'put ''XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiXHU3MGNjXHU3MGNkXHU3MGNlXHU3MGNmXHU3MGQwXHU3MGQxXHU3MGQyXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ3XHU3MGRhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MTU4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU4XVtnXV09NDA0NDgrZyx5WzQwNDQ4K2ddPV9bMTU4XVtnXSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGRj''@;'; put 'put ''XHU3MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwXHU3MGYxXHU3MGYyXHU3MGYzXHU3MGY0XHU3MGY1XHU3MGY2XHU3MGY4XHU3MGZhXHU3MGZiXHU3MGZjXHU3MGZlXHU3MGZmXHU3MTAwXHU3MTAxXHU3MTAyXHU3MTAzXHU3MTA0XHU3''@;'; put 'put ''MTA1XHU3MTA2XHU3MTA3XHU3MTA4XHU3MTBiXHU3MTBjXHU3MTBkXHU3MTBlXHU3MTBmXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3MTFiXHU3MTFjXHU3MTFkXHU3MTFlXHU3MTFmXHU3MTIwXHU3MTIxXHU3MTIyXHU3MTIzXHU3MTI0XHU3MTI1XHU3MTI3XHU3MTI4XHU3MTI5XHU3MTJh''@;'; put 'put ''XHU3MTJiXHU3MTJjXHU3MTJkXHU3MTJlXHU3MTMyXHU3MTMzXHU3MTM0XHVmZmZkXHU3MTM1XHU3MTM3XHU3MTM4XHU3MTM5XHU3MTNhXHU3MTNiXHU3MTNjXHU3MTNkXHU3MTNlXHU3MTNmXHU3MTQwXHU3MTQxXHU3MTQyXHU3MTQzXHU3MTQ0XHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3''@;'; put 'put ''MTRiXHU3MTRkXHU3MTRmXHU3MTUwXHU3MTUxXHU3MTUyXHU3MTUzXHU3MTU0XHU3MTU1XHU3MTU2XHU3MTU3XHU3MTU4XHU3MTU5XHU3MTVhXHU3MTViXHU3MTVkXHU3MTVmXHU3MTYwXHU3MTYxXHU3MTYyXHU3MTYzXHU3MTY1XHU3MTY5XHU3MTZhXHU3MTZiXHU3MTZjXHU3MTZkXHU3MTZm''@;'; put 'put ''XHU3MTcwXHU3MTcxXHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlXHU3MTdmXHU3MTgwXHU3MTgxXHU3MTgyXHU3MTgzXHU3MTg1XHU3MTg2XHU3MTg3XHU3MTg4XHU3MTg5XHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3''@;'; put 'put ''MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhXHU3MTliXHU3MTljXHU3MTlkXHU3MTllXHU3MWExXHU3MWEyXHU3MWEzXHU3MWE0XHU3MWE1XHU3MWE2XHU3MWE3XHU3MWE5XHU3MWFhXHU3MWFiXHU3MWFkXHU3MWFlXHU3MWFmXHU3MWIwXHU3MWIxXHU3MWIyXHU3MWI0XHU3MWI2XHU3MWI3''@;'; put 'put ''XHU3MWI4XHU3MWJhXHU3MWJiXHU3MWJjXHU3MWJkXHU3MWJlXHU3MWJmXHU3MWMwXHU3MWMxXHU3MWMyXHU3MWM0XHU3MWM1XHU3MWM2XHU3MWM3XHU3MWM4XHU3MWM5XHU3MWNhXHU3MWNiXHU3MWNjXHU3MWNkXHU3MWNmXHU3MWQwXHU3MWQxXHU3MWQyXHU3MWQzXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMTU5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTU5XVtnXV09NDA3MDQrZyx5WzQwNzA0K2ddPV9bMTU5XVtnXSk7Zm9yKF9bMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3MWQ2XHU3MWQ3XHU3MWQ4XHU3MWQ5XHU3MWRhXHU3MWRiXHU3MWRjXHU3MWRkXHU3MWRlXHU3MWRmXHU3MWUxXHU3MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4XHU3MWU5XHU3MWVhXHU3MWViXHU3MWVjXHU3MWVkXHU3MWVmXHU3MWYwXHU3MWYxXHU3MWYyXHU3MWYzXHU3''@;'; put 'put ''MWY0XHU3MWY1XHU3MWY2XHU3MWY3XHU3MWY4XHU3MWZhXHU3MWZiXHU3MWZjXHU3MWZkXHU3MWZlXHU3MWZmXHU3MjAwXHU3MjAxXHU3MjAyXHU3MjAzXHU3MjA0XHU3MjA1XHU3MjA3XHU3MjA4XHU3MjA5XHU3MjBhXHU3MjBiXHU3MjBjXHU3MjBkXHU3MjBlXHU3MjBmXHU3MjEwXHU3MjEx''@;'; put 'put ''XHU3MjEyXHU3MjEzXHU3MjE0XHU3MjE1XHU3MjE2XHU3MjE3XHU3MjE4XHU3MjE5XHU3MjFhXHVmZmZkXHU3MjFiXHU3MjFjXHU3MjFlXHU3MjFmXHU3MjIwXHU3MjIxXHU3MjIyXHU3MjIzXHU3MjI0XHU3MjI1XHU3MjI2XHU3MjI3XHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3''@;'; put 'put ''MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQwXHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ0XHU3MjQ1XHU3MjQ2XHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVl''@;'; put 'put ''XHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1XHU3Mjg2XHU3Mjg3XHU3Mjg4XHU3Mjg5XHU3MjhjXHU3''@;'; put 'put ''MjhlXHU3MjkwXHU3MjkxXHU3MjkzXHU3Mjk0XHU3Mjk1XHU3Mjk2XHU3Mjk3XHU3Mjk4XHU3Mjk5XHU3MjlhXHU3MjliXHU3MjljXHU3MjlkXHU3MjllXHU3MmEwXHU3MmExXHU3MmEyXHU3MmEzXHU3MmE0XHU3MmE1XHU3MmE2XHU3MmE3XHU3MmE4XHU3MmE5XHU3MmFhXHU3MmFiXHU3MmFl''@;'; put 'put ''XHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhXHU3MmJiXHU3MmJjXHU3MmJkXHU3MmJlXHU3MmJmXHU3MmMwXHU3MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYwXVtnXV09NDA5NjArZyx5WzQwOTYwK2ddPV9bMTYwXVtnXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZm''@;'; put 'put ''NWVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZc''@;'; put 'put ''dTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIw''@;'; put 'put ''XHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW2ddXT00MTIxNitnLHlbNDEyMTYrZ109X1sxNjFdW2ddKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVc''@;'; put 'put ''dTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0''@;'; put 'put ''NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW2ddXT00MTQ3MitnLHlbNDE0NzIrZ109X1sxNjJdW2ddKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZm''@;'; put 'put ''MDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRc''@;'; put 'put ''dWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZm''@;'; put 'put ''NDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJc''@;'; put 'put ''dWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW2ddXT00MTcyOCtnLHlbNDE3MjgrZ109X1sxNjNdW2ddKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMw''@;'; put 'put ''NDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJc''@;'; put 'put ''dTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMw''@;'; put 'put ''N2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW2ddXT00MTk4NCtnLHlbNDE5ODQrZ109X1sxNjRdW2ddKTtmb3IoX1sxNjVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMw''@;'; put 'put ''YTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBc''@;'; put 'put ''dTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMw''@;'; put 'put ''ZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW2ddXT00MjI0MCtnLHlbNDIyNDArZ109X1sxNjVdW2ddKTtmb3Io''@;'; put 'put ''X1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAz''@;'; put 'put ''OTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDRcdWZmZmRcdWZmZmRcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzFcdWZmZmRcdWZlMzNcdWZlMzRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW2ddXT00MjQ5NitnLHlbNDI0OTYrZ109X1sx''@;'; put 'put ''NjZdW2ddKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0''@;'; put 'put ''MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFc''@;'; put 'put ''dTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0''@;'; put 'put ''MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW2ddXT00Mjc1MitnLHlb''@;'; put 'put ''NDI3NTIrZ109X1sxNjddW2ddKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAyY2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIxMDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlc''@;'; put 'put ''dTIyMTVcdTIyMWZcdTIyMjNcdTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTBcdTI1NTFcdTI1NTJcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTI1NjJcdTI1NjNcdTI1''@;'; put 'put ''NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTI1NmJcdTI1NmNcdTI1NmRcdTI1NmVcdTI1NmZcdTI1NzBcdTI1NzFcdTI1NzJcdTI1NzNcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdWZmZmRcdTI1ODhcdTI1ODlcdTI1OGFcdTI1OGJc''@;'; put 'put ''dTI1OGNcdTI1OGRcdTI1OGVcdTI1OGZcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1ZTVcdTI2MDlcdTIyOTVcdTMwMTJcdTMwMWRcdTMwMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdTAyNTFcdWZmZmRcdTAxNDRcdTAxNDhc''@;'; put 'put ''dWZmZmRcdTAyNjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMx''@;'; put 'put ''MWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW2ddXT00MzAwOCtnLHlbNDMwMDgrZ109X1sx''@;'; put 'put ''NjhdW2ddKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVc''@;'; put 'put ''dTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTRcdWZmZmRcdTIxMjFcdTMyMzFcdWZmZmRcdTIwMTBcdWZmZmRcdWZmZmRcdWZmZmRcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDlcdWZlNGFcdWZl''@;'; put 'put ''NGJcdWZlNGNcdWZlNGRcdWZlNGVcdWZlNGZcdWZlNTBcdWZlNTFcdWZlNTJcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZlNTlcdWZlNWFcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdWZlNWZcdWZlNjBcdWZlNjFcdWZmZmRcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZlNjhc''@;'; put 'put ''dWZlNjlcdWZlNmFcdWZlNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThc''@;'; put 'put ''dTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1''@;'; put 'put ''MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW2ddXT00MzI2NCtnLHlb''@;'; put 'put ''NDMyNjQrZ109X1sxNjldW2ddKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTJcdTcyZTNcdTcyZTRcdTcyZTVcdTcyZTZcdTcyZTdcdTcyZWFcdTcyZWJcdTcyZjVcdTcyZjZc''@;'; put 'put ''dTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDRcdTczMDVcdTczMDZcdTczMDdcdTczMDhcdTczMDlcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTcz''@;'; put 'put ''MjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDBcdTczNDFcdTczNDJcdTczNDNcdTczNDRcdTczNDVcdTczNDZcdTczNDdcdTczNDhcdWZmZmRcdTczNDlcdTczNGFcdTczNGJcdTczNGNc''@;'; put 'put ''dTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNThcdTczNTlcdTczNWFcdTczNWJcdTczNWNcdTczNWRcdTczNWVcdTczNWZcdTczNjFcdTczNjJcdTczNjNcdTczNjRcdTczNjVcdTczNjZcdTczNjdcdTczNjhcdTczNjlcdTczNmFcdTczNmJcdTczNmVcdTcz''@;'; put 'put ''NzBcdTczNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzBdW2dd''@;'; put 'put ''XT00MzUyMCtnLHlbNDM1MjArZ109X1sxNzBdW2ddKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNzJcdTczNzNcdTczNzRcdTczNzVcdTczNzZcdTczNzdcdTczNzhcdTczNzlcdTczN2FcdTczN2JcdTczN2Nc''@;'; put 'put ''dTczN2RcdTczN2ZcdTczODBcdTczODFcdTczODJcdTczODNcdTczODVcdTczODZcdTczODhcdTczOGFcdTczOGNcdTczOGRcdTczOGZcdTczOTBcdTczOTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTczOWFcdTczOWNcdTczOWRcdTczOWVcdTczYTBcdTczYTFcdTcz''@;'; put 'put ''YTNcdTczYTRcdTczYTVcdTczYTZcdTczYTdcdTczYThcdTczYWFcdTczYWNcdTczYWRcdTczYjFcdTczYjRcdTczYjVcdTczYjZcdTczYjhcdTczYjlcdTczYmNcdTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzNcdTczYzRcdTczYzVcdTczYzZcdTczYzdcdWZmZmRcdTczY2JcdTczY2Nc''@;'; put 'put ''dTczY2VcdTczZDJcdTczZDNcdTczZDRcdTczZDVcdTczZDZcdTczZDdcdTczZDhcdTczZGFcdTczZGJcdTczZGNcdTczZGRcdTczZGZcdTczZTFcdTczZTJcdTczZTNcdTczZTRcdTczZTZcdTczZThcdTczZWFcdTczZWJcdTczZWNcdTczZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjNcdTcz''@;'; put 'put ''ZjRcdTczZjVcdTczZjZcdTczZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3MV1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxNzFdW2ddXT00Mzc3NitnLHlbNDM3NzYrZ109X1sxNzFdW2ddKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczZjhcdTczZjlcdTczZmFcdTczZmJcdTczZmNcdTczZmRcdTczZmVcdTczZmZcdTc0MDBc''@;'; put 'put ''dTc0MDFcdTc0MDJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTFcdTc0MTJcdTc0MTNcdTc0MTRcdTc0MTVcdTc0MTZcdTc0MTdcdTc0MThcdTc0MTlcdTc0MWNcdTc0MWRcdTc0MWVcdTc0MWZcdTc0MjBcdTc0MjFcdTc0MjNcdTc0MjRcdTc0MjdcdTc0''@;'; put 'put ''MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzdcdTc0MzhcdTc0MzlcdTc0M2FcdTc0M2JcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDJcdTc0NDNcdTc0NDRcdTc0NDVcdTc0NDZcdTc0NDdcdTc0NDhcdTc0NDlcdTc0NGFcdTc0NGJcdTc0NGNcdTc0NGRcdWZmZmRc''@;'; put 'put ''dTc0NGVcdTc0NGZcdTc0NTBcdTc0NTFcdTc0NTJcdTc0NTNcdTc0NTRcdTc0NTZcdTc0NThcdTc0NWRcdTc0NjBcdTc0NjFcdTc0NjJcdTc0NjNcdTc0NjRcdTc0NjVcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NjlcdTc0NmFcdTc0NmJcdTc0NmNcdTc0NmVcdTc0NmZcdTc0NzFcdTc0NzJcdTc0''@;'; put 'put ''NzNcdTc0NzRcdTc0NzVcdTc0NzhcdTc0NzlcdTc0N2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Ml1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxNzJdW2ddXT00NDAzMitnLHlbNDQwMzIrZ109X1sxNzJdW2ddKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVc''@;'; put 'put ''dTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTFcdTc0OTJcdTc0OTNcdTc0OTRcdTc0OTVcdTc0OTZcdTc0OTdcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWJcdTc0OWRcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTJcdTc0YTNcdTc0YTRcdTc0YTVcdTc0YTZcdTc0''@;'; put 'put ''YWFcdTc0YWJcdTc0YWNcdTc0YWRcdTc0YWVcdTc0YWZcdTc0YjBcdTc0YjFcdTc0YjJcdTc0YjNcdTc0YjRcdTc0YjVcdTc0YjZcdTc0YjdcdTc0YjhcdTc0YjlcdTc0YmJcdTc0YmNcdTc0YmRcdTc0YmVcdTc0YmZcdTc0YzBcdTc0YzFcdTc0YzJcdTc0YzNcdTc0YzRcdTc0YzVcdTc0YzZc''@;'; put 'put ''dTc0YzdcdWZmZmRcdTc0YzhcdTc0YzlcdTc0Y2FcdTc0Y2JcdTc0Y2NcdTc0Y2RcdTc0Y2VcdTc0Y2ZcdTc0ZDBcdTc0ZDFcdTc0ZDNcdTc0ZDRcdTc0ZDVcdTc0ZDZcdTc0ZDdcdTc0ZDhcdTc0ZDlcdTc0ZGFcdTc0ZGJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTdcdTc0ZThcdTc0''@;'; put 'put ''ZTlcdTc0ZWFcdTc0ZWJcdTc0ZWNcdTc0ZWRcdTc0ZjBcdTc0ZjFcdTc0ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzE3M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzNdW2ddXT00NDI4OCtnLHlbNDQyODgrZ109X1sxNzNdW2ddKTtmb3IoX1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjNcdTc0ZjVcdTc0ZjhcdTc0ZjlcdTc0ZmFc''@;'; put 'put ''dTc0ZmJcdTc0ZmNcdTc0ZmRcdTc0ZmVcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDVcdTc1MDZcdTc1MDdcdTc1MDhcdTc1MDlcdTc1MGFcdTc1MGJcdTc1MGNcdTc1MGVcdTc1MTBcdTc1MTJcdTc1MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJcdTc1MWRcdTc1MWVcdTc1MjBcdTc1''@;'; put 'put ''MjFcdTc1MjJcdTc1MjNcdTc1MjRcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1M2ZcdTc1NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NGFcdTc1NGRcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVc''@;'; put 'put ''dTc1NTZcdTc1NTdcdTc1NThcdWZmZmRcdTc1NWRcdTc1NWVcdTc1NWZcdTc1NjBcdTc1NjFcdTc1NjJcdTc1NjNcdTc1NjRcdTc1NjdcdTc1NjhcdTc1NjlcdTc1NmJcdTc1NmNcdTc1NmRcdTc1NmVcdTc1NmZcdTc1NzBcdTc1NzFcdTc1NzNcdTc1NzVcdTc1NzZcdTc1NzdcdTc1N2FcdTc1''@;'; put 'put ''N2JcdTc1N2NcdTc1N2RcdTc1N2VcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVcdTc1ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzRdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzE3NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzRdW2ddXT00NDU0NCtnLHlbNDQ1NDQrZ109X1sxNzRdW2ddKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ODhcdTc1ODlcdTc1OGFc''@;'; put 'put ''dTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTZcdTc1YTdcdTc1YThcdTc1YTlcdTc1YWFcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1''@;'; put 'put ''Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRc''@;'; put 'put ''dTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDdcdWZmZmRcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2''@;'; put 'put ''MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sx''@;'; put 'put ''NzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzVdW2ddXT00NDgwMCtnLHlbNDQ4MDArZ109X1sxNzVdW2ddKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NDVc''@;'; put 'put ''dTc2NDZcdTc2NDdcdTc2NDhcdTc2NDlcdTc2NGFcdTc2NGJcdTc2NGVcdTc2NGZcdTc2NTBcdTc2NTFcdTc2NTJcdTc2NTNcdTc2NTVcdTc2NTdcdTc2NThcdTc2NTlcdTc2NWFcdTc2NWJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjRcdTc2NjVcdTc2NjZcdTc2NjdcdTc2''@;'; put 'put ''NjhcdTc2NjlcdTc2NmFcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzBcdTc2NzFcdTc2NzJcdTc2NzNcdTc2NzRcdTc2NzVcdTc2NzZcdTc2NzdcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBc''@;'; put 'put ''dTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWJcdWZmZmRcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWZcdTc2YTBcdTc2YTFcdTc2YTJcdTc2YTNcdTc2YTVcdTc2YTZcdTc2YTdcdTc2YThcdTc2YTlcdTc2YWFcdTc2YWJcdTc2YWNcdTc2YWRcdTc2YWZcdTc2YjBcdTc2''@;'; put 'put ''YjNcdTc2YjVcdTc2YjZcdTc2YjdcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YmJcdTc2YmNcdTc2YmRcdTc2YmVcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFc''@;'; put 'put ''dTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdi''@;'; put 'put ''MDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2Zc''@;'; put 'put ''dTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1sxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW2ddXT00NTA1NitnLHlbNDUwNTYrZ109X1sxNzZdW2ddKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVcdTc2ZTBcdTc2ZTFcdTc2ZTJcdTc2ZTNcdTc2ZTRcdTc2ZTZcdTc2ZTdcdTc2ZThcdTc2ZTlcdTc2ZWFcdTc2ZWJcdTc2ZWNcdTc2ZWRcdTc2ZjBcdTc2''@;'; put 'put ''ZjNcdTc2ZjVcdTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJcdTc3MDNcdTc3MDVcdTc3MDZcdTc3MGFcdTc3MGNcdTc3MGVcdTc3MGZcdTc3MTBcdTc3MTFcdTc3MTJcdTc3MTNcdTc3MTRcdTc3MTVcdTc3MTZcdTc3MTdcdTc3MThcdTc3MWJcdTc3MWNc''@;'; put 'put ''dTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3MjdcdTc3MmFcdTc3MmJcdWZmZmRcdTc3MmNcdTc3MmVcdTc3MzBcdTc3MzFcdTc3MzJcdTc3MzNcdTc3MzRcdTc3MzlcdTc3M2JcdTc3M2RcdTc3M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZcdTc3NDhcdTc3''@;'; put 'put ''NDlcdTc3NGFcdTc3NGJcdTc3NGNcdTc3NGRcdTc3NGVcdTc3NGZcdTc3NTJcdTc3NTNcdTc3NTRcdTc3NTVcdTc3NTZcdTc3NTdcdTc3NThcdTc3NTlcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZc''@;'; put 'put ''dTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZi''@;'; put 'put ''ZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZc''@;'; put 'put ''dTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW2ddXT00NTMxMitnLHlbNDUzMTIrZ109X1sxNzddW2ddKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmRcdTc3NmVcdTc3NmZcdTc3NzBcdTc3NzFcdTc3NzJcdTc3NzNcdTc3NzRcdTc3NzVcdTc3NzZcdTc3NzdcdTc3NzhcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3''@;'; put 'put ''ODJcdTc3ODNcdTc3ODZcdTc3ODdcdTc3ODhcdTc3ODlcdTc3OGFcdTc3OGJcdTc3OGZcdTc3OTBcdTc3OTNcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OTdcdTc3OThcdTc3OTlcdTc3OWFcdTc3OWJcdTc3OWNcdTc3OWRcdTc3OWVcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJc''@;'; put 'put ''dTc3YWRcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjZcdTc3YjdcdTc3YjhcdTc3YjlcdTc3YmFcdWZmZmRcdTc3YmNcdTc3YmVcdTc3YzBcdTc3YzFcdTc3YzJcdTc3YzNcdTc3YzRcdTc3YzVcdTc3YzZcdTc3YzdcdTc3YzhcdTc3YzlcdTc3Y2FcdTc3Y2JcdTc3Y2NcdTc3''@;'; put 'put ''Y2VcdTc3Y2ZcdTc3ZDBcdTc3ZDFcdTc3ZDJcdTc3ZDNcdTc3ZDRcdTc3ZDVcdTc3ZDZcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGRcdTc3ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTFcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNc''@;'; put 'put ''dTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThk''@;'; put 'put ''MjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNc''@;'; put 'put ''dTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2''@;'; put 'put ''MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW2ddXT00NTU2OCtnLHlbNDU1NjgrZ109X1sxNzhdW2ddKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDNcdTc4MDRcdTc4MDVcdTc4MDZcdTc4MDdcdTc4MDhcdTc4MGFcdTc4MGJcdTc4''@;'; put 'put ''MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4NDJcdTc4NDNcdTc4NDRc''@;'; put 'put ''dTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWFcdWZmZmRcdTc4NWJcdTc4NWNcdTc4NWVcdTc4NWZcdTc4NjBcdTc4NjFcdTc4NjJcdTc4NjNcdTc4NjRcdTc4NjVcdTc4NjZcdTc4NjdcdTc4NjhcdTc4''@;'; put 'put ''NjlcdTc4NmZcdTc4NzBcdTc4NzFcdTc4NzJcdTc4NzNcdTc4NzRcdTc4NzVcdTc4NzZcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2RcdTc4N2VcdTc4N2ZcdTc4ODBcdTc4ODFcdTc4ODJcdTc4ODNcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVc''@;'; put 'put ''dTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4''@;'; put 'put ''NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2Fc''@;'; put 'put ''dThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2''@;'; put 'put ''Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW2ddXT00NTgyNCtnLHlbNDU4MjQrZ109X1sxNzldW2ddKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJcdTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZcdTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZcdTc4YThcdTc4''@;'; put 'put ''YTlcdTc4YWFcdTc4YWJcdTc4YWNcdTc4YWRcdTc4YWVcdTc4YWZcdTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNcdTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2NcdTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFc''@;'; put 'put ''dTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGFcdTc4ZGJcdTc4ZGNcdTc4ZGRcdTc4ZGVcdTc4ZGZcdTc4ZTBcdTc4ZTFcdTc4ZTJcdTc4ZTNcdWZmZmRcdTc4ZTRcdTc4ZTVcdTc4ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWRcdTc4ZWVcdTc4ZWZcdTc4ZjBcdTc4''@;'; put 'put ''ZjFcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmJcdTc4ZmNcdTc4ZmRcdTc4ZmVcdTc4ZmZcdTc5MDBcdTc5MDJcdTc5MDNcdTc5MDRcdTc5MDZcdTc5MDdcdTc5MDhcdTc5MDlcdTc5MGFcdTc5MGJcdTc5MGNcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRc''@;'; put 'put ''dTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdl''@;'; put 'put ''ZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0Njdc''@;'; put 'put ''dTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZi''@;'; put 'put ''ODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODBdW2ddXT00NjA4MCtnLHlbNDYwODArZ109X1sxODBdW2ddKTtmb3IoX1sxODFdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MGRcdTc5MGVcdTc5MGZcdTc5MTBcdTc5MTFcdTc5MTJcdTc5MTRcdTc5MTVcdTc5MTZcdTc5MTdcdTc5MThcdTc5MTlcdTc5MWFcdTc5MWJcdTc5MWNcdTc5MWRcdTc5MWZcdTc5MjBcdTc5''@;'; put 'put ''MjFcdTc5MjJcdTc5MjNcdTc5MjVcdTc5MjZcdTc5MjdcdTc5MjhcdTc5MjlcdTc5MmFcdTc5MmJcdTc5MmNcdTc5MmRcdTc5MmVcdTc5MmZcdTc5MzBcdTc5MzFcdTc5MzJcdTc5MzNcdTc5MzVcdTc5MzZcdTc5MzdcdTc5MzhcdTc5MzlcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRc''@;'; put 'put ''dTc5NDVcdTc5NDdcdTc5NGFcdTc5NGJcdTc5NGNcdTc5NGRcdTc5NGVcdTc5NGZcdTc5NTBcdTc5NTFcdTc5NTJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjNcdWZmZmRcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzBcdTc5NzFcdTc5''@;'; put 'put ''NzJcdTc5NzNcdTc5NzRcdTc5NzVcdTc5NzZcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2RcdTc5N2VcdTc5N2ZcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlc''@;'; put 'put ''dTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkw''@;'; put 'put ''NTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRc''@;'; put 'put ''dTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThj''@;'; put 'put ''MDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODFdW2ddXT00NjMzNitnLHlbNDYzMzYrZ109X1sxODFdW2ddKTtm''@;'; put 'put ''b3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OTdcdTc5OThcdTc5OTlcdTc5OWJcdTc5OWNcdTc5OWRcdTc5OWVcdTc5OWZcdTc5YTBcdTc5YTFcdTc5YTJcdTc5YTNcdTc5''@;'; put 'put ''YTRcdTc5YTVcdTc5YTZcdTc5YThcdTc5YTlcdTc5YWFcdTc5YWJcdTc5YWNcdTc5YWRcdTc5YWVcdTc5YWZcdTc5YjBcdTc5YjFcdTc5YjJcdTc5YjRcdTc5YjVcdTc5YjZcdTc5YjdcdTc5YjhcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2Nc''@;'; put 'put ''dTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDlcdTc5ZGFcdTc5ZGJcdTc5ZGNcdTc5ZGRcdTc5ZGVcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWFcdWZmZmRcdTc5ZWNcdTc5ZWVcdTc5ZjFcdTc5ZjJcdTc5ZjNcdTc5ZjRcdTc5ZjVcdTc5''@;'; put 'put ''ZjZcdTc5ZjdcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGZcdTdhMTBcdTdhMTFcdTdhMTJcdTdhMTNcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZc''@;'; put 'put ''dTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZi''@;'; put 'put ''ZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2Zc''@;'; put 'put ''dTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkx''@;'; put 'put ''MDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW2ddXT00NjU5MitnLHlbNDY1OTIrZ109''@;'; put 'put ''X1sxODJdW2ddKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjRcdTdhMjVcdTdhMjZcdTdhMjdcdTdhMjhcdTdhMjlcdTdhMmFcdTdhMmJcdTdhMmNcdTdhMmRcdTdh''@;'; put 'put ''MmVcdTdhMmZcdTdhMzBcdTdhMzFcdTdhMzJcdTdhMzRcdTdhMzVcdTdhMzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdhNDBcdTdhNDFcdTdhNDJcdTdhNDNcdTdhNDRcdTdhNDVcdTdhNDdcdTdhNDhcdTdhNDlcdTdhNGFcdTdhNGJcdTdhNGNcdTdhNGRcdTdhNGVcdTdhNGZcdTdhNTBcdTdhNTJc''@;'; put 'put ''dTdhNTNcdTdhNTRcdTdhNTVcdTdhNTZcdTdhNThcdTdhNTlcdTdhNWFcdTdhNWJcdTdhNWNcdTdhNWRcdTdhNWVcdTdhNWZcdTdhNjBcdTdhNjFcdTdhNjJcdTdhNjNcdTdhNjRcdTdhNjVcdTdhNjZcdTdhNjdcdTdhNjhcdWZmZmRcdTdhNjlcdTdhNmFcdTdhNmJcdTdhNmNcdTdhNmRcdTdh''@;'; put 'put ''NmVcdTdhNmZcdTdhNzFcdTdhNzJcdTdhNzNcdTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdcdTdhODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdhOGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdhOWVcdTdhYTFcdTdhYTJc''@;'; put 'put ''dThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgy''@;'; put 'put ''YjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdc''@;'; put 'put ''dTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1''@;'; put 'put ''NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW2ddXT00Njg0OCtn''@;'; put 'put ''LHlbNDY4NDgrZ109X1sxODNdW2ddKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWVcdTdhYWZcdTdhYjBcdTdhYjFcdTdhYjJcdTdhYjRcdTdh''@;'; put 'put ''YjVcdTdhYjZcdTdhYjdcdTdhYjhcdTdhYjlcdTdhYmFcdTdhYmJcdTdhYmNcdTdhYmRcdTdhYmVcdTdhYzBcdTdhYzFcdTdhYzJcdTdhYzNcdTdhYzRcdTdhYzVcdTdhYzZcdTdhYzdcdTdhYzhcdTdhYzlcdTdhY2FcdTdhY2NcdTdhY2RcdTdhY2VcdTdhY2ZcdTdhZDBcdTdhZDFcdTdhZDJc''@;'; put 'put ''dTdhZDNcdTdhZDRcdTdhZDVcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTdcdTdhZThcdTdhZTlcdTdhZWFcdTdhZWJcdTdhZWNcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjNcdWZmZmRcdTdhZjRcdTdhZjVcdTdhZjZcdTdh''@;'; put 'put ''ZjdcdTdhZjhcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdc''@;'; put 'put ''dTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThk''@;'; put 'put ''MWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFc''@;'; put 'put ''dTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4''@;'; put 'put ''M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODRd''@;'; put 'put ''W2ddXT00NzEwNCtnLHlbNDcxMDQrZ109X1sxODRdW2ddKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdcdTdiMzlcdTdiM2JcdTdiM2RcdTdi''@;'; put 'put ''M2ZcdTdiNDBcdTdiNDFcdTdiNDJcdTdiNDNcdTdiNDRcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjNcdTdiNjRcdTdiNjVcdTdiNjZcdTdiNjdcdTdiNjhcdTdiNjlcdTdiNmFcdTdiNmJc''@;'; put 'put ''dTdiNmNcdTdiNmRcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODZcdTdiODdcdTdiODhcdTdiODlcdTdiOGFcdTdiOGJcdTdiOGNcdTdiOGVcdTdiOGZcdWZmZmRcdTdiOTFcdTdi''@;'; put 'put ''OTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjlcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYmVcdTdiYmZc''@;'; put 'put ''dTdiYzBcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3''@;'; put 'put ''YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJc''@;'; put 'put ''dTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2''@;'; put 'put ''NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4NV1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxODVdW2ddXT00NzM2MCtnLHlbNDczNjArZ109X1sxODVdW2ddKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiYzVcdTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2RcdTdiY2VcdTdiY2ZcdTdi''@;'; put 'put ''ZDBcdTdiZDJcdTdiZDRcdTdiZDVcdTdiZDZcdTdiZDdcdTdiZDhcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdiZTBcdTdiZTJcdTdiZTNcdTdiZTRcdTdiZTdcdTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjJcdTdiZjNcdTdiZjRcdTdiZjVcdTdiZjZc''@;'; put 'put ''dTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdiZmZcdTdjMDBcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRcdTdjMDVcdTdjMDZcdTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTBcdTdjMTFcdTdjMTJcdTdjMTNcdTdjMTRcdTdjMTVcdTdjMTdcdTdjMThcdTdjMTlcdWZm''@;'; put 'put ''ZmRcdTdjMWFcdTdjMWJcdTdjMWNcdTdjMWRcdTdjMWVcdTdjMjBcdTdjMjFcdTdjMjJcdTdjMjNcdTdjMjRcdTdjMjVcdTdjMjhcdTdjMjlcdTdjMmJcdTdjMmNcdTdjMmRcdTdjMmVcdTdjMmZcdTdjMzBcdTdjMzFcdTdjMzJcdTdjMzNcdTdjMzRcdTdjMzVcdTdjMzZcdTdjMzdcdTdjMzlc''@;'; put 'put ''dTdjM2FcdTdjM2JcdTdjM2NcdTdjM2RcdTdjM2VcdTdjNDJcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYx''@;'; put 'put ''YmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlc''@;'; put 'put ''dTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1''@;'; put 'put ''ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4Nl1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxODZdW2ddXT00NzYxNitnLHlbNDc2MTYrZ109X1sxODZdW2ddKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjNDNcdTdjNDRcdTdjNDVcdTdjNDZcdTdjNDdcdTdjNDhcdTdj''@;'; put 'put ''NDlcdTdjNGFcdTdjNGJcdTdjNGNcdTdjNGVcdTdjNGZcdTdjNTBcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTRcdTdjNTVcdTdjNTZcdTdjNTdcdTdjNThcdTdjNTlcdTdjNWFcdTdjNWJcdTdjNWNcdTdjNWRcdTdjNWVcdTdjNWZcdTdjNjBcdTdjNjFcdTdjNjJcdTdjNjNcdTdjNjRcdTdjNjVc''@;'; put 'put ''dTdjNjZcdTdjNjdcdTdjNjhcdTdjNjlcdTdjNmFcdTdjNmJcdTdjNmNcdTdjNmRcdTdjNmVcdTdjNmZcdTdjNzBcdTdjNzFcdTdjNzJcdTdjNzVcdTdjNzZcdTdjNzdcdTdjNzhcdTdjNzlcdTdjN2FcdTdjN2VcdTdjN2ZcdTdjODBcdTdjODFcdTdjODJcdTdjODNcdTdjODRcdTdjODVcdTdj''@;'; put 'put ''ODZcdTdjODdcdWZmZmRcdTdjODhcdTdjOGFcdTdjOGJcdTdjOGNcdTdjOGRcdTdjOGVcdTdjOGZcdTdjOTBcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZc''@;'; put 'put ''dTdjYjBcdTdjYjRcdTdjYjVcdTdjYjZcdTdjYjdcdTdjYjhcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZk''@;'; put 'put ''ZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNc''@;'; put 'put ''dTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZk''@;'; put 'put ''NTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODddLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW2ddXT00Nzg3MitnLHlbNDc4NzIrZ109X1sxODddW2ddKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjYmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdj''@;'; put 'put ''YzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2VcdTdjY2ZcdTdjZDBcdTdjZDFcdTdjZDJcdTdjZDNcdTdjZDRcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTFcdTdjZTJcdTdjZTNcdTdjZTRcdTdjZTVcdTdjZTZcdTdjZTdcdTdjZTlcdTdjZWFcdTdjZWJcdTdjZWNcdTdjZWRc''@;'; put 'put ''dTdjZWVcdTdjZjBcdTdjZjFcdTdjZjJcdTdjZjNcdTdjZjRcdTdjZjVcdTdjZjZcdTdjZjdcdTdjZjlcdTdjZmFcdTdjZmNcdTdjZmRcdTdjZmVcdTdjZmZcdTdkMDBcdTdkMDFcdTdkMDJcdTdkMDNcdTdkMDRcdTdkMDVcdTdkMDZcdTdkMDdcdTdkMDhcdTdkMDlcdTdkMGJcdTdkMGNcdTdk''@;'; put 'put ''MGRcdTdkMGVcdTdkMGZcdTdkMTBcdWZmZmRcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTRcdTdkMTVcdTdkMTZcdTdkMTdcdTdkMThcdTdkMTlcdTdkMWFcdTdkMWJcdTdkMWNcdTdkMWRcdTdkMWVcdTdkMWZcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFc''@;'; put 'put ''dTdkMmNcdTdkMmRcdTdkMmVcdTdkMzBcdTdkMzFcdTdkMzJcdTdkMzNcdTdkMzRcdTdkMzVcdTdkMzZcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1''@;'; put 'put ''YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFc''@;'; put 'put ''dTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5''@;'; put 'put ''NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxODhdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW2ddXT00ODEyOCtnLHlbNDgxMjgrZ109X1sxODhdW2ddKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMzdcdTdkMzhcdTdk''@;'; put 'put ''MzlcdTdkM2FcdTdkM2JcdTdkM2NcdTdkM2RcdTdkM2VcdTdkM2ZcdTdkNDBcdTdkNDFcdTdkNDJcdTdkNDNcdTdkNDRcdTdkNDVcdTdkNDZcdTdkNDdcdTdkNDhcdTdkNDlcdTdkNGFcdTdkNGJcdTdkNGNcdTdkNGRcdTdkNGVcdTdkNGZcdTdkNTBcdTdkNTFcdTdkNTJcdTdkNTNcdTdkNTRc''@;'; put 'put ''dTdkNTVcdTdkNTZcdTdkNTdcdTdkNThcdTdkNTlcdTdkNWFcdTdkNWJcdTdkNWNcdTdkNWRcdTdkNWVcdTdkNWZcdTdkNjBcdTdkNjFcdTdkNjJcdTdkNjNcdTdkNjRcdTdkNjVcdTdkNjZcdTdkNjdcdTdkNjhcdTdkNjlcdTdkNmFcdTdkNmJcdTdkNmNcdTdkNmRcdTdkNmZcdTdkNzBcdTdk''@;'; put 'put ''NzFcdTdkNzJcdTdkNzNcdTdkNzRcdTdkNzVcdTdkNzZcdWZmZmRcdTdkNzhcdTdkNzlcdTdkN2FcdTdkN2JcdTdkN2NcdTdkN2RcdTdkN2VcdTdkN2ZcdTdkODBcdTdkODFcdTdkODJcdTdkODNcdTdkODRcdTdkODVcdTdkODZcdTdkODdcdTdkODhcdTdkODlcdTdkOGFcdTdkOGJcdTdkOGNc''@;'; put 'put ''dTdkOGRcdTdkOGVcdTdkOGZcdTdkOTBcdTdkOTFcdTdkOTJcdTdkOTNcdTdkOTRcdTdkOTVcdTdkOTZcdTdkOTdcdTdkOThcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4''@;'; put 'put ''NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2Zc''@;'; put 'put ''dTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1''@;'; put 'put ''NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1sxODldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW2ddXT00ODM4NCtnLHlbNDgzODQrZ109X1sxODldW2ddKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdk''@;'; put 'put ''OTlcdTdkOWFcdTdkOWJcdTdkOWNcdTdkOWRcdTdkOWVcdTdkOWZcdTdkYTBcdTdkYTFcdTdkYTJcdTdkYTNcdTdkYTRcdTdkYTVcdTdkYTdcdTdkYThcdTdkYTlcdTdkYWFcdTdkYWJcdTdkYWNcdTdkYWRcdTdkYWZcdTdkYjBcdTdkYjFcdTdkYjJcdTdkYjNcdTdkYjRcdTdkYjVcdTdkYjZc''@;'; put 'put ''dTdkYjdcdTdkYjhcdTdkYjlcdTdkYmFcdTdkYmJcdTdkYmNcdTdkYmRcdTdkYmVcdTdkYmZcdTdkYzBcdTdkYzFcdTdkYzJcdTdkYzNcdTdkYzRcdTdkYzVcdTdkYzZcdTdkYzdcdTdkYzhcdTdkYzlcdTdkY2FcdTdkY2JcdTdkY2NcdTdkY2RcdTdkY2VcdTdkY2ZcdTdkZDBcdTdkZDFcdTdk''@;'; put 'put ''ZDJcdTdkZDNcdTdkZDRcdTdkZDVcdTdkZDZcdTdkZDdcdTdkZDhcdTdkZDlcdWZmZmRcdTdkZGFcdTdkZGJcdTdkZGNcdTdkZGRcdTdkZGVcdTdkZGZcdTdkZTBcdTdkZTFcdTdkZTJcdTdkZTNcdTdkZTRcdTdkZTVcdTdkZTZcdTdkZTdcdTdkZThcdTdkZTlcdTdkZWFcdTdkZWJcdTdkZWNc''@;'; put 'put ''dTdkZWRcdTdkZWVcdTdkZWZcdTdkZjBcdTdkZjFcdTdkZjJcdTdkZjNcdTdkZjRcdTdkZjVcdTdkZjZcdTdkZjdcdTdkZjhcdTdkZjlcdTdkZmFcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRl''@;'; put 'put ''OTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdc''@;'; put 'put ''dTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYw''@;'; put 'put ''ZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1sxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW2ddXT00ODY0MCtnLHlbNDg2NDArZ109X1sxOTBdW2ddKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTdkZmJcdTdkZmNcdTdkZmRcdTdkZmVcdTdkZmZcdTdlMDBcdTdlMDFcdTdlMDJcdTdlMDNcdTdlMDRcdTdlMDVcdTdlMDZcdTdlMDdcdTdlMDhcdTdlMDlcdTdlMGFcdTdlMGJcdTdlMGNcdTdlMGRcdTdlMGVcdTdlMGZcdTdlMTBcdTdlMTFcdTdlMTJcdTdlMTNcdTdlMTRc''@;'; put 'put ''dTdlMTVcdTdlMTZcdTdlMTdcdTdlMThcdTdlMTlcdTdlMWFcdTdlMWJcdTdlMWNcdTdlMWRcdTdlMWVcdTdlMWZcdTdlMjBcdTdlMjFcdTdlMjJcdTdlMjNcdTdlMjRcdTdlMjVcdTdlMjZcdTdlMjdcdTdlMjhcdTdlMjlcdTdlMmFcdTdlMmJcdTdlMmNcdTdlMmRcdTdlMmVcdTdlMmZcdTdl''@;'; put 'put ''MzBcdTdlMzFcdTdlMzJcdTdlMzNcdTdlMzRcdTdlMzVcdTdlMzZcdTdlMzdcdTdlMzhcdTdlMzlcdWZmZmRcdTdlM2FcdTdlM2NcdTdlM2RcdTdlM2VcdTdlM2ZcdTdlNDBcdTdlNDJcdTdlNDNcdTdlNDRcdTdlNDVcdTdlNDZcdTdlNDhcdTdlNDlcdTdlNGFcdTdlNGJcdTdlNGNcdTdlNGRc''@;'; put 'put ''dTdlNGVcdTdlNGZcdTdlNTBcdTdlNTFcdTdlNTJcdTdlNTNcdTdlNTRcdTdlNTVcdTdlNTZcdTdlNTdcdTdlNThcdTdlNTlcdTdlNWFcdTdlNWJcdTdlNWNcdTdlNWRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5''@;'; put 'put ''NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNc''@;'; put 'put ''dTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4''@;'; put 'put ''ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW2ddXT00ODg5NitnLHlbNDg4OTYrZ109X1sxOTFdW2ddKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNWVcdTdlNWZcdTdlNjBcdTdlNjFcdTdlNjJcdTdlNjNcdTdlNjRcdTdlNjVcdTdlNjZcdTdlNjdcdTdlNjhcdTdlNjlcdTdlNmFcdTdlNmJcdTdlNmNcdTdlNmRcdTdlNmVcdTdlNmZcdTdlNzBcdTdlNzFcdTdlNzJcdTdlNzNcdTdlNzRcdTdlNzVc''@;'; put 'put ''dTdlNzZcdTdlNzdcdTdlNzhcdTdlNzlcdTdlN2FcdTdlN2JcdTdlN2NcdTdlN2RcdTdlN2VcdTdlN2ZcdTdlODBcdTdlODFcdTdlODNcdTdlODRcdTdlODVcdTdlODZcdTdlODdcdTdlODhcdTdlODlcdTdlOGFcdTdlOGJcdTdlOGNcdTdlOGRcdTdlOGVcdTdlOGZcdTdlOTBcdTdlOTFcdTdl''@;'; put 'put ''OTJcdTdlOTNcdTdlOTRcdTdlOTVcdTdlOTZcdTdlOTdcdTdlOThcdTdlOTlcdTdlOWFcdTdlOWNcdTdlOWRcdTdlOWVcdWZmZmRcdTdlYWVcdTdlYjRcdTdlYmJcdTdlYmNcdTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdcdTdmMzlcdTdmM2JcdTdmM2Nc''@;'; put 'put ''dTdmM2RcdTdmM2VcdTdmM2ZcdTdmNDBcdTdmNDFcdTdmNDNcdTdmNDZcdTdmNDdcdTdmNDhcdTdmNDlcdTdmNGFcdTdmNGJcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNGZcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVl''@;'; put 'put ''ZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVc''@;'; put 'put ''dTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZj''@;'; put 'put ''ZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhc''@;'; put 'put ''dTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW2ddXT00OTE1MitnLHlbNDkxNTIrZ109X1sxOTJdW2ddKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNjdcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhc''@;'; put 'put ''dTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODJcdTdmODNcdTdmODRcdTdmODVcdTdmODZcdTdmODdcdTdmODhcdTdmODlcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTJcdTdmOTNcdTdmOTVcdTdmOTZcdTdmOTdcdTdmOThcdTdmOTlcdTdmOWJcdTdm''@;'; put 'put ''OWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYThcdTdmYTlcdTdmYWFcdTdmYWJcdTdmYWNcdTdmYWRcdTdmYWVcdTdmYjFcdWZmZmRcdTdmYjNcdTdmYjRcdTdmYjVcdTdmYjZcdTdmYjdcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZc''@;'; put 'put ''dTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2ZcdTdmZDBcdTdmZDFcdTdmZDJcdTdmZDNcdTdmZDZcdTdmZDdcdTdmZDlcdTdmZGFcdTdmZGJcdTdmZGNcdTdmZGRcdTdmZGVcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0''@;'; put 'put ''ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlc''@;'; put 'put ''dTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0''@;'; put 'put ''MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlc''@;'; put 'put ''dTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW2ddXT00OTQwOCtnLHlbNDk0MDgrZ109X1sxOTNdW2ddKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjRcdTdmZjVcdTdmZjZcdTdmZjdcdTdmZjhcdTdmZjlcdTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJc''@;'; put 'put ''dTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmJcdTgwMmNcdTgwMmRcdTgwMmVcdTgwMmZcdTgwMzBcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgw''@;'; put 'put ''M2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTdcdWZmZmRcdTgwNTlcdTgwNWJcdTgwNWNcdTgwNWRcdTgwNWVcdTgwNWZcdTgwNjBcdTgwNjFcdTgwNjJcdTgwNjNcdTgwNjRc''@;'; put 'put ''dTgwNjVcdTgwNjZcdTgwNjdcdTgwNjhcdTgwNmJcdTgwNmNcdTgwNmRcdTgwNmVcdTgwNmZcdTgwNzBcdTgwNzJcdTgwNzNcdTgwNzRcdTgwNzVcdTgwNzZcdTgwNzdcdTgwNzhcdTgwNzlcdTgwN2FcdTgwN2JcdTgwN2NcdTgwN2RcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVh''@;'; put 'put ''MDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRc''@;'; put 'put ''dTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3''@;'; put 'put ''YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJc''@;'; put 'put ''dTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTRdW2ddXT00OTY2NCtnLHlbNDk2NjQrZ109X1sxOTRdW2ddKTtmb3IoX1sxOTVd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwN2VcdTgwODFcdTgwODJcdTgwODVcdTgwODhcdTgwOGFcdTgwOGRcdTgwOGVcdTgwOGZcdTgwOTBcdTgwOTFcdTgwOTJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNc''@;'; put 'put ''dTgwYTZcdTgwYTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgwYmJcdTgwYzVcdTgwYzdcdTgwYzhcdTgwYzlcdTgwY2FcdTgwY2JcdTgwY2ZcdTgwZDBcdTgwZDFcdTgwZDJcdTgwZDNcdTgwZDRcdTgwZDVcdTgwZDhcdTgwZGZcdTgwZTBcdTgw''@;'; put 'put ''ZTJcdTgwZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgwZmVcdTgwZmZcdTgxMDBcdTgxMDFcdTgxMDNcdTgxMDRcdTgxMDVcdTgxMDdcdTgxMDhcdTgxMGJcdWZmZmRcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWZcdTgxMjBc''@;'; put 'put ''dTgxMjFcdTgxMjJcdTgxMjNcdTgxMjRcdTgxMjVcdTgxMjZcdTgxMjdcdTgxMjhcdTgxMjlcdTgxMmFcdTgxMmJcdTgxMmRcdTgxMmVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzlcdTgxM2FcdTgxM2JcdTgxM2NcdTgxM2RcdTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2''@;'; put 'put ''ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2Zc''@;'; put 'put ''dTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3''@;'; put 'put ''MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRc''@;'; put 'put ''dTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTVdW2ddXT00OTkyMCtnLHlbNDk5MjArZ109X1sxOTVdW2dd''@;'; put 'put ''KTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDBcdTgxNDFcdTgxNDJcdTgxNDNcdTgxNDRcdTgxNDVcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWJc''@;'; put 'put ''dTgxNWNcdTgxNWRcdTgxNWVcdTgxNWZcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODNcdTgxODRcdTgxODVcdTgxODZcdTgxODdcdTgxODlcdTgx''@;'; put 'put ''OGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTJcdTgxOTNcdTgxOTRcdTgxOTVcdTgxOTZcdTgxOTdcdTgxOTlcdTgxOWFcdTgxOWVcdTgxOWZcdTgxYTBcdTgxYTFcdTgxYTJcdTgxYTRcdTgxYTVcdWZmZmRcdTgxYTdcdTgxYTlcdTgxYWJcdTgxYWNcdTgxYWRcdTgxYWVcdTgxYWZc''@;'; put 'put ''dTgxYjBcdTgxYjFcdTgxYjJcdTgxYjRcdTgxYjVcdTgxYjZcdTgxYjdcdTgxYjhcdTgxYjlcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2RcdTgxY2VcdTgxY2ZcdTgxZDBcdTgxZDFcdTgxZDJcdTgxZDNcdTY0NzlcdTg2''@;'; put 'put ''MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVc''@;'; put 'put ''dTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5''@;'; put 'put ''ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJc''@;'; put 'put ''dTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW2ddXT01MDE3NitnLHlbNTAxNzYr''@;'; put 'put ''Z109X1sxOTZdW2ddKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDRcdTgxZDVcdTgxZDZcdTgxZDdcdTgxZDhcdTgxZDlcdTgxZGFcdTgxZGJcdTgxZGNcdTgxZGRcdTgxZGVcdTgxZGZcdTgxZTBcdTgxZTFc''@;'; put 'put ''dTgxZTJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWVcdTgxZWZcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjdcdTgxZjhcdTgxZjlcdTgxZmFcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDdcdTgyMDhcdTgyMDlcdTgyMGFcdTgyMGJcdTgyMGVcdTgy''@;'; put 'put ''MGZcdTgyMTFcdTgyMTNcdTgyMTVcdTgyMTZcdTgyMTdcdTgyMThcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2ZcdWZmZmRcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVc''@;'; put 'put ''dTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTBcdTgyNTFcdTgyNTJcdTgyNTNcdTgyNTRcdTgyNTVcdTgyNTZcdTgyNTdcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjBcdTgyNjFcdTgyNjJcdTgyNjNcdTgyNjRcdTgyNjVcdTgyNjZcdTgyNjdcdTgy''@;'; put 'put ''NjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVc''@;'; put 'put ''dTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYy''@;'; put 'put ''OWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThc''@;'; put 'put ''dTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW2ddXT01MDQz''@;'; put 'put ''MitnLHlbNTA0MzIrZ109X1sxOTddW2ddKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyNmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVcdTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBc''@;'; put 'put ''dTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgyOTBcdTgyOTNcdTgyOTRcdTgyOTVcdTgyOTZcdTgyOWFcdTgyOWJcdTgyOWVcdTgyYTBcdTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgyYjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgy''@;'; put 'put ''YzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlcdTgyZGFcdTgyZGRcdTgyZTJcdTgyZTdcdTgyZThcdTgyZTlcdTgyZWFcdTgyZWNcdTgyZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVcdTgyZjZcdTgyZjhcdWZmZmRcdTgyZmFcdTgyZmNcdTgyZmRc''@;'; put 'put ''dTgyZmVcdTgyZmZcdTgzMDBcdTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJcdTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMWRcdTgzMWVcdTgzMWZcdTgzMjBcdTgzMjFcdTgzMjJcdTgzMjNcdTgzMjRcdTgzMjVcdTgzMjZcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgzMzJcdTgz''@;'; put 'put ''MzdcdTgzM2JcdTgzM2RcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJc''@;'; put 'put ''dTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2''@;'; put 'put ''NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdc''@;'; put 'put ''dTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''OThdW2ddXT01MDY4OCtnLHlbNTA2ODgrZ109X1sxOThdW2ddKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGFcdTgzNGJcdTgzNGNc''@;'; put 'put ''dTgzNGRcdTgzNGVcdTgzNTNcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNThcdTgzNTlcdTgzNWRcdTgzNjJcdTgzNzBcdTgzNzFcdTgzNzJcdTgzNzNcdTgzNzRcdTgzNzVcdTgzNzZcdTgzNzlcdTgzN2FcdTgzN2VcdTgzN2ZcdTgzODBcdTgzODFcdTgzODJcdTgzODNcdTgzODRcdTgzODdcdTgz''@;'; put 'put ''ODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTFcdTgzYTJcdTgzYTNcdTgzYTRcdTgzYTVcdTgzYTZcdTgzYTdcdTgzYWNcdTgzYWRcdTgzYWVcdWZmZmRcdTgzYWZc''@;'; put 'put ''dTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgz''@;'; put 'put ''ZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBc''@;'; put 'put ''dTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYw''@;'; put 'put ''MmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdc''@;'; put 'put ''dTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxOTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE5OV1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxOTldW2ddXT01MDk0NCtnLHlbNTA5NDQrZ109X1sxOTldW2ddKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZWVcdTgzZWZcdTgzZjNcdTgzZjRcdTgzZjVcdTgzZjZcdTgzZjdcdTgzZmFc''@;'; put 'put ''dTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTJcdTg0MTNcdTg0MTRcdTg0MTVcdTg0MTZcdTg0MTdcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWVcdTg0MWZcdTg0MjBcdTg0MjFcdTg0MjJcdTg0MjNcdTg0''@;'; put 'put ''MjlcdTg0MmFcdTg0MmJcdTg0MmNcdTg0MmRcdTg0MmVcdTg0MmZcdTg0MzBcdTg0MzJcdTg0MzNcdTg0MzRcdTg0MzVcdTg0MzZcdTg0MzdcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2VcdTg0M2ZcdTg0NDBcdTg0NDFcdTg0NDJcdTg0NDNcdTg0NDRcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NDlc''@;'; put 'put ''dWZmZmRcdTg0NGFcdTg0NGJcdTg0NGNcdTg0NGRcdTg0NGVcdTg0NGZcdTg0NTBcdTg0NTJcdTg0NTNcdTg0NTRcdTg0NTVcdTg0NTZcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjRcdTg0NjVcdTg0NjZcdTg0NjdcdTg0NjhcdTg0NmFcdTg0NmVcdTg0NmZcdTg0''@;'; put 'put ''NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFc''@;'; put 'put ''dTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5''@;'; put 'put ''OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVc''@;'; put 'put ''dThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwMF1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW2ddXT01MTIwMCtnLHlbNTEyMDArZ109X1syMDBdW2ddKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0N2RcdTg0N2VcdTg0N2ZcdTg0ODBcdTg0ODFcdTg0ODNc''@;'; put 'put ''dTg0ODRcdTg0ODVcdTg0ODZcdTg0OGFcdTg0OGRcdTg0OGZcdTg0OTBcdTg0OTFcdTg0OTJcdTg0OTNcdTg0OTRcdTg0OTVcdTg0OTZcdTg0OThcdTg0OWFcdTg0OWJcdTg0OWRcdTg0OWVcdTg0OWZcdTg0YTBcdTg0YTJcdTg0YTNcdTg0YTRcdTg0YTVcdTg0YTZcdTg0YTdcdTg0YThcdTg0''@;'; put 'put ''YTlcdTg0YWFcdTg0YWJcdTg0YWNcdTg0YWRcdTg0YWVcdTg0YjBcdTg0YjFcdTg0YjNcdTg0YjVcdTg0YjZcdTg0YjdcdTg0YmJcdTg0YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZcdTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJcdTg0ZDRc''@;'; put 'put ''dTg0ZDVcdTg0ZDdcdWZmZmRcdTg0ZDhcdTg0ZDlcdTg0ZGFcdTg0ZGJcdTg0ZGNcdTg0ZGVcdTg0ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTdcdTg0ZThcdTg0ZTlcdTg0ZWFcdTg0ZWJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjFcdTg0ZjJcdTg0ZjNcdTg0ZjRcdTg0ZjVcdTg0ZjZcdTg0ZjdcdTg0''@;'; put 'put ''ZjhcdTg0ZjlcdTg0ZmFcdTg0ZmJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1MDFcdTg1MDJcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlc''@;'; put 'put ''dTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRl''@;'; put 'put ''MGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNc''@;'; put 'put ''dTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDFdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT1fWzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW2ddXT01MTQ1NitnLHlbNTE0NTYrZ109X1syMDFdW2ddKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MDNcdTg1MDRcdTg1MDVcdTg1MDZc''@;'; put 'put ''dTg1MDdcdTg1MDhcdTg1MDlcdTg1MGFcdTg1MGJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjZcdTg1MjdcdTg1MjhcdTg1''@;'; put 'put ''MjlcdTg1MmFcdTg1MmRcdTg1MmVcdTg1MmZcdTg1MzBcdTg1MzFcdTg1MzJcdTg1MzNcdTg1MzRcdTg1MzVcdTg1MzZcdTg1M2VcdTg1M2ZcdTg1NDBcdTg1NDFcdTg1NDJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGJcdTg1NGNcdTg1NGRcdTg1NGVcdTg1NGZcdTg1NTBcdTg1NTFc''@;'; put 'put ''dTg1NTJcdTg1NTNcdTg1NTRcdTg1NTVcdWZmZmRcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWZcdTg1NjBcdTg1NjFcdTg1NjJcdTg1NjNcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjlcdTg1NmFcdTg1NmJcdTg1NmNcdTg1NmRcdTg1NmVcdTg1NmZcdTg1NzBcdTg1''@;'; put 'put ''NzFcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZc''@;'; put 'put ''dTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkx''@;'; put 'put ''Y2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZc''@;'; put 'put ''dTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDJdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT1fWzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW2ddXT01MTcxMitnLHlbNTE3MTIrZ109X1syMDJdW2ddKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODJcdTg1ODNc''@;'; put 'put ''dTg1ODZcdTg1ODhcdTg1ODlcdTg1OGFcdTg1OGJcdTg1OGNcdTg1OGRcdTg1OGVcdTg1OTBcdTg1OTFcdTg1OTJcdTg1OTNcdTg1OTRcdTg1OTVcdTg1OTZcdTg1OTdcdTg1OThcdTg1OTlcdTg1OWFcdTg1OWRcdTg1OWVcdTg1OWZcdTg1YTBcdTg1YTFcdTg1YTJcdTg1YTNcdTg1YTVcdTg1''@;'; put 'put ''YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjFcdTg1YjJcdTg1YjNcdTg1YjRcdTg1YjVcdTg1YjZcdTg1YjhcdTg1YmFcdTg1YmJcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzBcdTg1YzJcdTg1YzNcdTg1YzRcdTg1YzVcdTg1YzZcdTg1YzdcdTg1YzhcdTg1Y2Fc''@;'; put 'put ''dTg1Y2JcdTg1Y2NcdTg1Y2RcdTg1Y2VcdTg1ZDFcdTg1ZDJcdWZmZmRcdTg1ZDRcdTg1ZDZcdTg1ZDdcdTg1ZDhcdTg1ZDlcdTg1ZGFcdTg1ZGJcdTg1ZGRcdTg1ZGVcdTg1ZGZcdTg1ZTBcdTg1ZTFcdTg1ZTJcdTg1ZTNcdTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWFcdTg1ZWJcdTg1''@;'; put 'put ''ZWNcdTg1ZWRcdTg1ZWVcdTg1ZWZcdTg1ZjBcdTg1ZjFcdTg1ZjJcdTg1ZjNcdTg1ZjRcdTg1ZjVcdTg1ZjZcdTg1ZjdcdTg1ZjhcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFc''@;'; put 'put ''dTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYw''@;'; put 'put ''MDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZc''@;'; put 'put ''dTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9X1syMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW2ddXT01MTk2OCtnLHlbNTE5NjgrZ109X1syMDNdW2ddKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTg1ZjlcdTg1ZmFcdTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDBcdTg2MDFcdTg2MDJcdTg2MDNcdTg2MDRcdTg2MDZcdTg2MDdcdTg2MDhcdTg2MDlcdTg2MGFcdTg2MGJcdTg2MGNcdTg2MGRcdTg2MGVcdTg2MGZcdTg2MTBcdTg2MTJcdTg2MTNcdTg2MTRcdTg2MTVcdTg2MTdcdTg2MThcdTg2''@;'; put 'put ''MTlcdTg2MWFcdTg2MWJcdTg2MWNcdTg2MWRcdTg2MWVcdTg2MWZcdTg2MjBcdTg2MjFcdTg2MjJcdTg2MjNcdTg2MjRcdTg2MjVcdTg2MjZcdTg2MjhcdTg2MmFcdTg2MmJcdTg2MmNcdTg2MmRcdTg2MmVcdTg2MmZcdTg2MzBcdTg2MzFcdTg2MzJcdTg2MzNcdTg2MzRcdTg2MzVcdTg2MzZc''@;'; put 'put ''dTg2MzdcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDBcdWZmZmRcdTg2NDFcdTg2NDJcdTg2NDNcdTg2NDRcdTg2NDVcdTg2NDZcdTg2NDdcdTg2NDhcdTg2NDlcdTg2NGFcdTg2NGJcdTg2NGNcdTg2NTJcdTg2NTNcdTg2NTVcdTg2NTZcdTg2NTdcdTg2NThcdTg2''@;'; put 'put ''NTlcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2NjFcdTg2NjNcdTg2NjRcdTg2NjVcdTg2NjZcdTg2NjdcdTg2NjhcdTg2NjlcdTg2NmFcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBc''@;'; put 'put ''dTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThl''@;'; put 'put ''YmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2Nc''@;'; put 'put ''dTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9X1syMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW2ddXT01MjIyNCtnLHlbNTIyMjQrZ109X1syMDRdW2ddKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTg2NmRcdTg2NmZcdTg2NzBcdTg2NzJcdTg2NzNcdTg2NzRcdTg2NzVcdTg2NzZcdTg2NzdcdTg2NzhcdTg2ODNcdTg2ODRcdTg2ODVcdTg2ODZcdTg2ODdcdTg2ODhcdTg2ODlcdTg2OGVcdTg2OGZcdTg2OTBcdTg2OTFcdTg2OTJcdTg2OTRcdTg2OTZcdTg2OTdcdTg2''@;'; put 'put ''OThcdTg2OTlcdTg2OWFcdTg2OWJcdTg2OWVcdTg2OWZcdTg2YTBcdTg2YTFcdTg2YTJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmJcdTg2YmNcdTg2YmRcdTg2YmVcdTg2YmZcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVc''@;'; put 'put ''dTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGNcdWZmZmRcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2''@;'; put 'put ''ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNc''@;'; put 'put ''dTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4''@;'; put 'put ''OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZc''@;'; put 'put ''dThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVh''@;'; put 'put ''MDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW2ddXT01MjQ4MCtnLHlbNTI0ODArZ109X1syMDVdW2ddKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3''@;'; put 'put ''M2RcdTg3NDBcdTg3NDFcdTg3NDJcdTg3NDNcdTg3NDRcdTg3NDVcdTg3NDZcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWFcdTg3NWJcdTg3NWNcdTg3NWRcdTg3NWVcdTg3NWZcdTg3NjFcdTg3NjJcdTg3NjZc''@;'; put 'put ''dTg3NjdcdTg3NjhcdTg3NjlcdTg3NmFcdTg3NmJcdTg3NmNcdTg3NmRcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzVcdWZmZmRcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGVcdTg3''@;'; put 'put ''OGZcdTg3OTBcdTg3OTFcdTg3OTJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OThcdTg3OTlcdTg3OWFcdTg3OWJcdTg3OWNcdTg3OWRcdTg3OWVcdTg3YTBcdTg3YTFcdTg3YTJcdTg3YTNcdTg3YTRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZc''@;'; put 'put ''dTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1''@;'; put 'put ''ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdc''@;'; put 'put ''dTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0''@;'; put 'put ''MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW2ddXT01MjczNitnLHlbNTI3MzYrZ109X1syMDZdW2ddKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YTVcdTg3YTZcdTg3YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3YjBcdTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzJcdTg3YzNcdTg3''@;'; put 'put ''YzRcdTg3YzVcdTg3YzdcdTg3YzhcdTg3YzlcdTg3Y2NcdTg3Y2RcdTg3Y2VcdTg3Y2ZcdTg3ZDBcdTg3ZDRcdTg3ZDVcdTg3ZDZcdTg3ZDdcdTg3ZDhcdTg3ZDlcdTg3ZGFcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThc''@;'; put 'put ''dTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWZcdTg3ZjBcdTg3ZjFcdTg3ZjJcdTg3ZjNcdTg3ZjRcdTg3ZjVcdTg3ZjZcdTg3ZjdcdTg3ZjhcdWZmZmRcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDRcdTg4MDVcdTg4MDZcdTg4MDdcdTg4''@;'; put 'put ''MDhcdTg4MDlcdTg4MGJcdTg4MGNcdTg4MGRcdTg4MGVcdTg4MGZcdTg4MTBcdTg4MTFcdTg4MTJcdTg4MTRcdTg4MTdcdTg4MThcdTg4MTlcdTg4MWFcdTg4MWNcdTg4MWRcdTg4MWVcdTg4MWZcdTg4MjBcdTg4MjNcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNc''@;'; put 'put ''dTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUz''@;'; put 'put ''YTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBc''@;'; put 'put ''dTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1''@;'; put 'put ''MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW2ddXT01Mjk5MitnLHlbNTI5OTIrZ109X1syMDddW2ddKTtmb3IoX1syMDhdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjRcdTg4MjVcdTg4MjZcdTg4MjdcdTg4MjhcdTg4MjlcdTg4MmFcdTg4MmJcdTg4MmNcdTg4MmRcdTg4MmVcdTg4MmZcdTg4MzBcdTg4MzFcdTg4MzNcdTg4MzRcdTg4MzVcdTg4MzZcdTg4MzdcdTg4''@;'; put 'put ''MzhcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDZcdTg4NDdcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NGZcdTg4NTBcdTg4NTFcdTg4NTJcdTg4NTNcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWJcdTg4NWNcdTg4NWRc''@;'; put 'put ''dTg4NWVcdTg4NWZcdTg4NjBcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2FcdWZmZmRcdTg4N2JcdTg4N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4''@;'; put 'put ''OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTdcdTg4OThcdTg4OTlcdTg4OWFcdTg4OWJcdTg4OWRcdTg4OWVcdTg4OWZcdTg4YTBcdTg4YTFcdTg4YTNcdTg4YTVcdTg4YTZcdTg4YTdcdTg4YThcdTg4YTlcdTg4YWFcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1Nzhc''@;'; put 'put ''dTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThm''@;'; put 'put ''OWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFc''@;'; put 'put ''dTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdl''@;'; put 'put ''ZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDhdW2ddXT01MzI0OCtnLHlbNTMyNDgrZ109X1syMDhdW2ddKTtmb3IoX1sy''@;'; put 'put ''MDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjJcdTg4YjNcdTg4YjRcdTg4YjVcdTg4YjZcdTg4YjhcdTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4''@;'; put 'put ''YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGFcdTg4ZGJcdTg4ZGNcdTg4ZGRcdTg4ZGVcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTlcdTg4ZWFcdTg4ZWJcdTg4ZWNcdTg4ZWRc''@;'; put 'put ''dTg4ZWVcdTg4ZWZcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDNcdTg5MDRcdTg5MDVcdTg5MDZcdTg5MDdcdTg5MDhcdWZmZmRcdTg5MDlcdTg5MGJcdTg5MGNcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTFcdTg5MTRcdTg5''@;'; put 'put ''MTVcdTg5MTZcdTg5MTdcdTg5MThcdTg5MWNcdTg5MWRcdTg5MWVcdTg5MWZcdTg5MjBcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3Mjlc''@;'; put 'put ''dTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgy''@;'; put 'put ''YmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlc''@;'; put 'put ''dTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRl''@;'; put 'put ''ZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMDldW2ddXT01MzUwNCtnLHlbNTM1MDQrZ109X1syMDld''@;'; put 'put ''W2ddKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5MzhcdTg5MzlcdTg5M2FcdTg5M2JcdTg5M2NcdTg5M2RcdTg5M2VcdTg5M2ZcdTg5NDBcdTg5NDJcdTg5NDNcdTg5NDVcdTg5NDZcdTg5NDdcdTg5NDhcdTg5''@;'; put 'put ''NDlcdTg5NGFcdTg5NGJcdTg5NGNcdTg5NGRcdTg5NGVcdTg5NGZcdTg5NTBcdTg5NTFcdTg5NTJcdTg5NTNcdTg5NTRcdTg5NTVcdTg5NTZcdTg5NTdcdTg5NThcdTg5NTlcdTg5NWFcdTg5NWJcdTg5NWNcdTg5NWRcdTg5NjBcdTg5NjFcdTg5NjJcdTg5NjNcdTg5NjRcdTg5NjVcdTg5Njdc''@;'; put 'put ''dTg5NjhcdTg5NjlcdTg5NmFcdTg5NmJcdTg5NmNcdTg5NmRcdTg5NmVcdTg5NmZcdTg5NzBcdTg5NzFcdTg5NzJcdTg5NzNcdTg5NzRcdTg5NzVcdTg5NzZcdTg5NzdcdTg5NzhcdTg5NzlcdTg5N2FcdTg5N2NcdWZmZmRcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5ODRcdTg5ODVcdTg5''@;'; put 'put ''ODdcdTg5ODhcdTg5ODlcdTg5OGFcdTg5OGJcdTg5OGNcdTg5OGRcdTg5OGVcdTg5OGZcdTg5OTBcdTg5OTFcdTg5OTJcdTg5OTNcdTg5OTRcdTg5OTVcdTg5OTZcdTg5OTdcdTg5OThcdTg5OTlcdTg5OWFcdTg5OWJcdTg5OWNcdTg5OWRcdTg5OWVcdTg5OWZcdTg5YTBcdTg5YTFcdTY0NDdc''@;'; put 'put ''dTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUz''@;'; put 'put ''M2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFc''@;'; put 'put ''dTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3''@;'; put 'put ''ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW2ddXT01Mzc2MCtnLHlbNTM3''@;'; put 'put ''NjArZ109X1syMTBdW2ddKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5YTJcdTg5YTNcdTg5YTRcdTg5YTVcdTg5YTZcdTg5YTdcdTg5YThcdTg5YTlcdTg5YWFcdTg5YWJcdTg5YWNcdTg5YWRcdTg5YWVcdTg5''@;'; put 'put ''YWZcdTg5YjBcdTg5YjFcdTg5YjJcdTg5YjNcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YjhcdTg5YjlcdTg5YmFcdTg5YmJcdTg5YmNcdTg5YmRcdTg5YmVcdTg5YmZcdTg5YzBcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRc''@;'; put 'put ''dTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjRcdTg5ZjVcdTg5ZjZcdTg5ZjdcdTg5ZjhcdTg5ZjlcdTg5ZmFcdWZmZmRcdTg5ZmJcdTg5ZmNcdTg5ZmRcdTg5ZmVcdTg5''@;'; put 'put ''ZmZcdThhMDFcdThhMDJcdThhMDNcdThhMDRcdThhMDVcdThhMDZcdThhMDhcdThhMDlcdThhMGFcdThhMGJcdThhMGNcdThhMGRcdThhMGVcdThhMGZcdThhMTBcdThhMTFcdThhMTJcdThhMTNcdThhMTRcdThhMTVcdThhMTZcdThhMTdcdThhMThcdThhMTlcdThhMWFcdThhMWJcdThhMWNc''@;'; put 'put ''dThhMWRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThl''@;'; put 'put ''MGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhc''@;'; put 'put ''dTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3''@;'; put 'put ''ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW2ddXT01''@;'; put 'put ''NDAxNitnLHlbNTQwMTYrZ109X1syMTFdW2ddKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhMWVcdThhMWZcdThhMjBcdThhMjFcdThhMjJcdThhMjNcdThhMjRcdThhMjVcdThhMjZcdThhMjdcdThhMjhcdThh''@;'; put 'put ''MjlcdThhMmFcdThhMmJcdThhMmNcdThhMmRcdThhMmVcdThhMmZcdThhMzBcdThhMzFcdThhMzJcdThhMzNcdThhMzRcdThhMzVcdThhMzZcdThhMzdcdThhMzhcdThhMzlcdThhM2FcdThhM2JcdThhM2NcdThhM2RcdThhM2ZcdThhNDBcdThhNDFcdThhNDJcdThhNDNcdThhNDRcdThhNDVc''@;'; put 'put ''dThhNDZcdThhNDdcdThhNDlcdThhNGFcdThhNGJcdThhNGNcdThhNGRcdThhNGVcdThhNGZcdThhNTBcdThhNTFcdThhNTJcdThhNTNcdThhNTRcdThhNTVcdThhNTZcdThhNTdcdThhNThcdThhNTlcdThhNWFcdThhNWJcdThhNWNcdThhNWRcdThhNWVcdWZmZmRcdThhNWZcdThhNjBcdThh''@;'; put 'put ''NjFcdThhNjJcdThhNjNcdThhNjRcdThhNjVcdThhNjZcdThhNjdcdThhNjhcdThhNjlcdThhNmFcdThhNmJcdThhNmNcdThhNmRcdThhNmVcdThhNmZcdThhNzBcdThhNzFcdThhNzJcdThhNzNcdThhNzRcdThhNzVcdThhNzZcdThhNzdcdThhNzhcdThhN2FcdThhN2JcdThhN2NcdThhN2Rc''@;'; put 'put ''dThhN2VcdThhN2ZcdThhODBcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYw''@;'; put 'put ''MjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2Rc''@;'; put 'put ''dTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThk''@;'; put 'put ''MjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1syMTJdW2ddXT01NDI3MitnLHlbNTQyNzIrZ109X1syMTJdW2ddKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhODFcdThhODJcdThhODNcdThhODRcdThhODVcdThhODZcdThhODdcdThhODhcdThhOGJcdThh''@;'; put 'put ''OGNcdThhOGRcdThhOGVcdThhOGZcdThhOTBcdThhOTFcdThhOTJcdThhOTRcdThhOTVcdThhOTZcdThhOTdcdThhOThcdThhOTlcdThhOWFcdThhOWJcdThhOWNcdThhOWRcdThhOWVcdThhOWZcdThhYTBcdThhYTFcdThhYTJcdThhYTNcdThhYTRcdThhYTVcdThhYTZcdThhYTdcdThhYThc''@;'; put 'put ''dThhYTlcdThhYWFcdThhYWJcdThhYWNcdThhYWRcdThhYWVcdThhYWZcdThhYjBcdThhYjFcdThhYjJcdThhYjNcdThhYjRcdThhYjVcdThhYjZcdThhYjdcdThhYjhcdThhYjlcdThhYmFcdThhYmJcdThhYmNcdThhYmRcdThhYmVcdThhYmZcdThhYzBcdThhYzFcdThhYzJcdWZmZmRcdThh''@;'; put 'put ''YzNcdThhYzRcdThhYzVcdThhYzZcdThhYzdcdThhYzhcdThhYzlcdThhY2FcdThhY2JcdThhY2NcdThhY2RcdThhY2VcdThhY2ZcdThhZDBcdThhZDFcdThhZDJcdThhZDNcdThhZDRcdThhZDVcdThhZDZcdThhZDdcdThhZDhcdThhZDlcdThhZGFcdThhZGJcdThhZGNcdThhZGRcdThhZGVc''@;'; put 'put ''dThhZGZcdThhZTBcdThhZTFcdThhZTJcdThhZTNcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThm''@;'; put 'put ''OTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2Vc''@;'; put 'put ''dTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1''@;'; put 'put ''YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxM11bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1syMTNdW2ddXT01NDUyOCtnLHlbNTQ1MjgrZ109X1syMTNdW2ddKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTRcdThhZTVcdThhZTZcdThhZTdcdThhZThcdThhZTlcdThhZWFcdThh''@;'; put 'put ''ZWJcdThhZWNcdThhZWRcdThhZWVcdThhZWZcdThhZjBcdThhZjFcdThhZjJcdThhZjNcdThhZjRcdThhZjVcdThhZjZcdThhZjdcdThhZjhcdThhZjlcdThhZmFcdThhZmJcdThhZmNcdThhZmRcdThhZmVcdThhZmZcdThiMDBcdThiMDFcdThiMDJcdThiMDNcdThiMDRcdThiMDVcdThiMDZc''@;'; put 'put ''dThiMDhcdThiMDlcdThiMGFcdThiMGJcdThiMGNcdThiMGRcdThiMGVcdThiMGZcdThiMTBcdThiMTFcdThiMTJcdThiMTNcdThiMTRcdThiMTVcdThiMTZcdThiMTdcdThiMThcdThiMTlcdThiMWFcdThiMWJcdThiMWNcdThiMWRcdThiMWVcdThiMWZcdThiMjBcdThiMjFcdThiMjJcdThi''@;'; put 'put ''MjNcdWZmZmRcdThiMjRcdThiMjVcdThiMjdcdThiMjhcdThiMjlcdThiMmFcdThiMmJcdThiMmNcdThiMmRcdThiMmVcdThiMmZcdThiMzBcdThiMzFcdThiMzJcdThiMzNcdThiMzRcdThiMzVcdThiMzZcdThiMzdcdThiMzhcdThiMzlcdThiM2FcdThiM2JcdThiM2NcdThiM2RcdThiM2Vc''@;'; put 'put ''dThiM2ZcdThiNDBcdThiNDFcdThiNDJcdThiNDNcdThiNDRcdThiNDVcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUw''@;'; put 'put ''M2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRc''@;'; put 'put ''dTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3''@;'; put 'put ''MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIx''@;'; put 'put ''NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW2ddXT01NDc4NCtnLHlbNTQ3ODQrZ109X1syMTRdW2ddKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNDZcdThiNDdcdThiNDhcdThiNDlcdThiNGFcdThi''@;'; put 'put ''NGJcdThiNGNcdThiNGRcdThiNGVcdThiNGZcdThiNTBcdThiNTFcdThiNTJcdThiNTNcdThiNTRcdThiNTVcdThiNTZcdThiNTdcdThiNThcdThiNTlcdThiNWFcdThiNWJcdThiNWNcdThiNWRcdThiNWVcdThiNWZcdThiNjBcdThiNjFcdThiNjJcdThiNjNcdThiNjRcdThiNjVcdThiNjdc''@;'; put 'put ''dThiNjhcdThiNjlcdThiNmFcdThiNmJcdThiNmRcdThiNmVcdThiNmZcdThiNzBcdThiNzFcdThiNzJcdThiNzNcdThiNzRcdThiNzVcdThiNzZcdThiNzdcdThiNzhcdThiNzlcdThiN2FcdThiN2JcdThiN2NcdThiN2RcdThiN2VcdThiN2ZcdThiODBcdThiODFcdThiODJcdThiODNcdThi''@;'; put 'put ''ODRcdThiODVcdThiODZcdWZmZmRcdThiODdcdThiODhcdThiODlcdThiOGFcdThiOGJcdThiOGNcdThiOGRcdThiOGVcdThiOGZcdThiOTBcdThiOTFcdThiOTJcdThiOTNcdThiOTRcdThiOTVcdThiOTZcdThiOTdcdThiOThcdThiOTlcdThiOWFcdThiOWJcdThiOWNcdThiOWRcdThiOWVc''@;'; put 'put ''dThiOWZcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4''@;'; put 'put ''ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNc''@;'; put 'put ''dTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0''@;'; put 'put ''YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTVdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT1fWzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW2ddXT01NTA0MCtnLHlbNTUwNDArZ109X1syMTVdW2ddKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMzhcdThjMzlcdThjM2FcdThj''@;'; put 'put ''M2JcdThjM2NcdThjM2RcdThjM2VcdThjM2ZcdThjNDBcdThjNDJcdThjNDNcdThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThjNGRcdThjNGVcdThjNGZcdThjNTBcdThjNTFcdThjNTJcdThjNTNcdThjNTRcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWJcdThjNWNcdThjNWRc''@;'; put 'put ''dThjNWVcdThjNWZcdThjNjBcdThjNjNcdThjNjRcdThjNjVcdThjNjZcdThjNjdcdThjNjhcdThjNjlcdThjNmNcdThjNmRcdThjNmVcdThjNmZcdThjNzBcdThjNzFcdThjNzJcdThjNzRcdThjNzVcdThjNzZcdThjNzdcdThjN2JcdThjN2NcdThjN2RcdThjN2VcdThjN2ZcdThjODBcdThj''@;'; put 'put ''ODFcdThjODNcdThjODRcdThjODZcdThjODdcdWZmZmRcdThjODhcdThjOGJcdThjOGRcdThjOGVcdThjOGZcdThjOTBcdThjOTFcdThjOTJcdThjOTNcdThjOTVcdThjOTZcdThjOTdcdThjOTlcdThjOWFcdThjOWJcdThjOWNcdThjOWRcdThjOWVcdThjOWZcdThjYTBcdThjYTFcdThjYTJc''@;'; put 'put ''dThjYTNcdThjYTRcdThjYTVcdThjYTZcdThjYTdcdThjYThcdThjYTlcdThjYWFcdThjYWJcdThjYWNcdThjYWRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRl''@;'; put 'put ''NDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVc''@;'; put 'put ''dThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdm''@;'; put 'put ''NTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTZd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW2ddXT01NTI5NitnLHlbNTUyOTYrZ109X1syMTZdW2ddKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWVcdThj''@;'; put 'put ''YWZcdThjYjBcdThjYjFcdThjYjJcdThjYjNcdThjYjRcdThjYjVcdThjYjZcdThjYjdcdThjYjhcdThjYjlcdThjYmFcdThjYmJcdThjYmNcdThjYmRcdThjYmVcdThjYmZcdThjYzBcdThjYzFcdThjYzJcdThjYzNcdThjYzRcdThjYzVcdThjYzZcdThjYzdcdThjYzhcdThjYzlcdThjY2Fc''@;'; put 'put ''dThjY2JcdThjY2NcdThjY2RcdThjY2VcdThjY2ZcdThjZDBcdThjZDFcdThjZDJcdThjZDNcdThjZDRcdThjZDVcdThjZDZcdThjZDdcdThjZDhcdThjZDlcdThjZGFcdThjZGJcdThjZGNcdThjZGRcdThjZGVcdThjZGZcdThjZTBcdThjZTFcdThjZTJcdThjZTNcdThjZTRcdThjZTVcdThj''@;'; put 'put ''ZTZcdThjZTdcdThjZThcdThjZTlcdThjZWFcdThjZWJcdThjZWNcdWZmZmRcdThjZWRcdThjZWVcdThjZWZcdThjZjBcdThjZjFcdThjZjJcdThjZjNcdThjZjRcdThjZjVcdThjZjZcdThjZjdcdThjZjhcdThjZjlcdThjZmFcdThjZmJcdThjZmNcdThjZmRcdThjZmVcdThjZmZcdThkMDBc''@;'; put 'put ''dThkMDFcdThkMDJcdThkMDNcdThkMDRcdThkMDVcdThkMDZcdThkMDdcdThkMDhcdThkMDlcdThkMGFcdThkMGJcdThkMGNcdThkMGRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRm''@;'; put 'put ''YWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhc''@;'; put 'put ''dTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUx''@;'; put 'put ''ODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9X1syMTddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW2ddXT01NTU1MitnLHlbNTU1NTIrZ109X1syMTddW2ddKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdThkMGVcdThkMGZcdThkMTBcdThkMTFcdThkMTJcdThkMTNcdThkMTRcdThkMTVcdThkMTZcdThkMTdcdThkMThcdThkMTlcdThkMWFcdThkMWJcdThkMWNcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZc''@;'; put 'put ''dThkNzFcdThkNzJcdThkNzhcdThkNzlcdThkN2FcdThkN2JcdThkN2NcdThkN2RcdThkN2VcdThkN2ZcdThkODBcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGNcdThkOGRcdThkOGVcdThkOGZcdThkOTBcdThkOTJcdThkOTNcdThkOTVcdThkOTZcdThkOTdcdThk''@;'; put 'put ''OThcdThkOTlcdThkOWFcdThkOWJcdThkOWNcdThkOWRcdThkOWVcdThkYTBcdThkYTFcdWZmZmRcdThkYTJcdThkYTRcdThkYTVcdThkYTZcdThkYTdcdThkYThcdThkYTlcdThkYWFcdThkYWJcdThkYWNcdThkYWRcdThkYWVcdThkYWZcdThkYjBcdThkYjJcdThkYjZcdThkYjdcdThkYjlc''@;'; put 'put ''dThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThi''@;'; put 'put ''YzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNc''@;'; put 'put ''dThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2''@;'; put 'put ''MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9X1syMThdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW2ddXT01NTgwOCtnLHlbNTU4MDgrZ109X1syMThdW2ddKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdThkZDVcdThkZDhcdThkZDlcdThkZGNcdThkZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThkZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZcdThkZmNcdThkZmVcdThkZmZcdThlMDBcdThlMDFcdThlMDJcdThlMDNc''@;'; put 'put ''dThlMDRcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThlMGVcdThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTVcdThlMTZcdThlMTdcdThlMThcdThlMTlcdThlMWFcdThlMWJcdThlMWNcdThlMjBcdThlMjFcdThlMjRcdThlMjVcdThlMjZcdThlMjdcdThlMjhcdThlMmJcdThl''@;'; put 'put ''MmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdcdThlMzhcdThlM2JcdThlM2NcdThlM2VcdWZmZmRcdThlM2ZcdThlNDNcdThlNDVcdThlNDZcdThlNGNcdThlNGRcdThlNGVcdThlNGZcdThlNTBcdThlNTNcdThlNTRcdThlNTVcdThlNTZcdThlNTdcdThlNThcdThlNWFc''@;'; put 'put ''dThlNWJcdThlNWNcdThlNWRcdThlNWVcdThlNWZcdThlNjBcdThlNjFcdThlNjJcdThlNjNcdThlNjRcdThlNjVcdThlNjdcdThlNjhcdThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkw''@;'; put 'put ''ZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVc''@;'; put 'put ''dTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3''@;'; put 'put ''ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRc''@;'; put 'put ''dTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMTldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW2ddXT01NjA2NCtnLHlbNTYwNjQrZ109X1syMTldW2ddKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNzNcdThlNzVcdThlNzdcdThlNzhcdThlNzlcdThlN2FcdThlN2JcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODhcdThlODlcdThlOGFcdThlOGJcdThlOGNcdThlOGRcdThlOGVcdThlOTFcdThlOTJc''@;'; put 'put ''dThlOTNcdThlOTVcdThlOTZcdThlOTdcdThlOThcdThlOTlcdThlOWFcdThlOWJcdThlOWRcdThlOWZcdThlYTBcdThlYTFcdThlYTJcdThlYTNcdThlYTRcdThlYTVcdThlYTZcdThlYTdcdThlYThcdThlYTlcdThlYWFcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjNcdThlYjRcdThl''@;'; put 'put ''YjVcdThlYjZcdThlYjdcdThlYjhcdThlYjlcdThlYmJcdThlYmNcdThlYmRcdThlYmVcdThlYmZcdThlYzBcdThlYzFcdThlYzJcdWZmZmRcdThlYzNcdThlYzRcdThlYzVcdThlYzZcdThlYzdcdThlYzhcdThlYzlcdThlY2FcdThlY2JcdThlY2NcdThlY2RcdThlY2ZcdThlZDBcdThlZDFc''@;'; put 'put ''dThlZDJcdThlZDNcdThlZDRcdThlZDVcdThlZDZcdThlZDdcdThlZDhcdThlZDlcdThlZGFcdThlZGJcdThlZGNcdThlZGRcdThlZGVcdThlZGZcdThlZTBcdThlZTFcdThlZTJcdThlZTNcdThlZTRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4''@;'; put 'put ''MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNc''@;'; put 'put ''dTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgz''@;'; put 'put ''MTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2Fc''@;'; put 'put ''dTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW2ddXT01NjMyMCtnLHlbNTYzMjArZ109X1syMjBdW2ddKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZTVcdThlZTZcdThlZTdcdThlZThcdThlZTlcdThlZWFcdThlZWJcdThlZWNcdThlZWRcdThlZWVcdThlZWZcdThlZjBcdThlZjFcdThlZjJcdThlZjNcdThlZjRcdThlZjVcdThlZjZcdThlZjdcdThlZjhcdThlZjlc''@;'; put 'put ''dThlZmFcdThlZmJcdThlZmNcdThlZmRcdThlZmVcdThlZmZcdThmMDBcdThmMDFcdThmMDJcdThmMDNcdThmMDRcdThmMDVcdThmMDZcdThmMDdcdThmMDhcdThmMDlcdThmMGFcdThmMGJcdThmMGNcdThmMGRcdThmMGVcdThmMGZcdThmMTBcdThmMTFcdThmMTJcdThmMTNcdThmMTRcdThm''@;'; put 'put ''MTVcdThmMTZcdThmMTdcdThmMThcdThmMTlcdThmMWFcdThmMWJcdThmMWNcdThmMWRcdThmMWVcdThmMWZcdThmMjBcdThmMjFcdThmMjJcdThmMjNcdWZmZmRcdThmMjRcdThmMjVcdThmMjZcdThmMjdcdThmMjhcdThmMjlcdThmMmFcdThmMmJcdThmMmNcdThmMmRcdThmMmVcdThmMmZc''@;'; put 'put ''dThmMzBcdThmMzFcdThmMzJcdThmMzNcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmMzhcdThmMzlcdThmM2FcdThmM2JcdThmM2NcdThmM2RcdThmM2VcdThmM2ZcdThmNDBcdThmNDFcdThmNDJcdThmNDNcdThmNDRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgz''@;'; put 'put ''NmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJc''@;'; put 'put ''dTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0''@;'; put 'put ''ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRc''@;'; put 'put ''dTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjFdW2ddXT01NjU3NitnLHlbNTY1NzYrZ109X1syMjFdW2ddKTtmb3IoX1syMjJdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmNDVcdThmNDZcdThmNDdcdThmNDhcdThmNDlcdThmNGFcdThmNGJcdThmNGNcdThmNGRcdThmNGVcdThmNGZcdThmNTBcdThmNTFcdThmNTJcdThmNTNcdThmNTRcdThmNTVcdThmNTZcdThmNTdc''@;'; put 'put ''dThmNThcdThmNTlcdThmNWFcdThmNWJcdThmNWNcdThmNWRcdThmNWVcdThmNWZcdThmNjBcdThmNjFcdThmNjJcdThmNjNcdThmNjRcdThmNjVcdThmNmFcdThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBcdThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThm''@;'; put 'put ''YWNcdThmYWRcdThmYWVcdThmYWZcdThmYjJcdThmYjNcdThmYjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThmYmZcdThmYzBcdThmYzNcdThmYzZcdWZmZmRcdThmYzlcdThmY2FcdThmY2JcdThmY2NcdThmY2RcdThmY2ZcdThmZDJcdThmZDZcdThmZDdcdThmZGFc''@;'; put 'put ''dThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNcdThmZWZcdThmZjFcdThmZjJcdThmZjRcdThmZjVcdThmZjZcdThmZmFcdThmZmJcdThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkwMTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1''@;'; put 'put ''NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2Mjlc''@;'; put 'put ''dTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYz''@;'; put 'put ''NDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBc''@;'; put 'put ''dTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjJdW2ddXT01NjgzMitnLHlbNTY4MzIrZ109X1syMjJdW2ddKTtmb3Io''@;'; put 'put ''X1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjdcdTkwMjhcdTkwMjlcdTkwMmFcdTkwMmJcdTkwMmNcdTkwMzBcdTkwMzFcdTkwMzJcdTkwMzNcdTkwMzRcdTkwMzdc''@;'; put 'put ''dTkwMzlcdTkwM2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDhcdTkwNDlcdTkwNGFcdTkwNGJcdTkwNGNcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWNcdTkwNWRcdTkwNWVcdTkwNWZcdTkwNjBcdTkwNjFcdTkwNjRcdTkwNjZcdTkw''@;'; put 'put ''NjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmZcdTkwNzBcdTkwNzFcdTkwNzJcdTkwNzNcdTkwNzZcdTkwNzdcdTkwNzhcdTkwNzlcdTkwN2FcdTkwN2JcdTkwN2NcdTkwN2VcdTkwODFcdWZmZmRcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGNcdTkwOGRc''@;'; put 'put ''dTkwOGVcdTkwOGZcdTkwOTBcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0''@;'; put 'put ''YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRc''@;'; put 'put ''dTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0''@;'; put 'put ''NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1Njdc''@;'; put 'put ''dTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjNdW2ddXT01NzA4OCtnLHlbNTcwODgrZ109X1sy''@;'; put 'put ''MjNdW2ddKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFc''@;'; put 'put ''dTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDVcdTkxMDZcdTkx''@;'; put 'put ''MDdcdTkxMDhcdTkxMDlcdTkxMGFcdTkxMGJcdTkxMGNcdTkxMGRcdTkxMGVcdTkxMGZcdTkxMTBcdTkxMTFcdTkxMTJcdTkxMTNcdTkxMTRcdTkxMTVcdTkxMTZcdTkxMTdcdTkxMThcdTkxMWFcdTkxMWJcdTkxMWNcdWZmZmRcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjRcdTkxMjVc''@;'; put 'put ''dTkxMjZcdTkxMjdcdTkxMjhcdTkxMjlcdTkxMmFcdTkxMmJcdTkxMmNcdTkxMmRcdTkxMmVcdTkxMzBcdTkxMzJcdTkxMzNcdTkxMzRcdTkxMzVcdTkxMzZcdTkxMzdcdTkxMzhcdTkxM2FcdTkxM2JcdTkxM2NcdTkxM2RcdTkxM2VcdTkxM2ZcdTkxNDBcdTkxNDFcdTkxNDJcdTkxNDRcdTU1''@;'; put 'put ''MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1Yzlc''@;'; put 'put ''dTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2''@;'; put 'put ''MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZc''@;'; put 'put ''dTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW2ddXT01NzM0NCtnLHlb''@;'; put 'put ''NTczNDQrZ109X1syMjRdW2ddKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNDVcdTkxNDdcdTkxNDhcdTkxNTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZcdTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZc''@;'; put 'put ''dTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkxNmRcdTkxNzNcdTkxN2FcdTkxN2JcdTkxN2NcdTkxODBcdTkxODFcdTkxODJcdTkxODNcdTkxODRcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkxOGZcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOTZcdTkxOTdcdTkxOThcdTkxOTlcdTkx''@;'; put 'put ''OWNcdTkxOWRcdTkxOWVcdTkxOWZcdTkxYTBcdTkxYTFcdTkxYTRcdTkxYTVcdTkxYTZcdTkxYTdcdTkxYThcdTkxYTlcdTkxYWJcdTkxYWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmJcdWZmZmRcdTkxYmNcdTkxYmRcdTkxYmVcdTkxYmZc''@;'; put 'put ''dTkxYzBcdTkxYzFcdTkxYzJcdTkxYzNcdTkxYzRcdTkxYzVcdTkxYzZcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDJcdTkxZDNcdTkxZDRcdTkxZDVcdTkxZDZcdTkxZDdcdTkxZDhcdTkxZDlcdTkxZGFcdTkxZGJcdTkxZGRcdTkxZGVcdTkxZGZcdTkxZTBcdTkxZTFcdTkxZTJcdTkxZTNcdTkx''@;'; put 'put ''ZTRcdTkxZTVcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdc''@;'; put 'put ''dTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVk''@;'; put 'put ''ODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFc''@;'; put 'put ''dTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW2dd''@;'; put 'put ''XT01NzYwMCtnLHlbNTc2MDArZ109X1syMjVdW2ddKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZTZcdTkxZTdcdTkxZThcdTkxZTlcdTkxZWFcdTkxZWJcdTkxZWNcdTkxZWRcdTkxZWVcdTkxZWZcdTkxZjBc''@;'; put 'put ''dTkxZjFcdTkxZjJcdTkxZjNcdTkxZjRcdTkxZjVcdTkxZjZcdTkxZjdcdTkxZjhcdTkxZjlcdTkxZmFcdTkxZmJcdTkxZmNcdTkxZmRcdTkxZmVcdTkxZmZcdTkyMDBcdTkyMDFcdTkyMDJcdTkyMDNcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDhcdTkyMDlcdTkyMGFcdTkyMGJcdTky''@;'; put 'put ''MGNcdTkyMGRcdTkyMGVcdTkyMGZcdTkyMTBcdTkyMTFcdTkyMTJcdTkyMTNcdTkyMTRcdTkyMTVcdTkyMTZcdTkyMTdcdTkyMThcdTkyMTlcdTkyMWFcdTkyMWJcdTkyMWNcdTkyMWRcdTkyMWVcdTkyMWZcdTkyMjBcdTkyMjFcdTkyMjJcdTkyMjNcdTkyMjRcdWZmZmRcdTkyMjVcdTkyMjZc''@;'; put 'put ''dTkyMjdcdTkyMjhcdTkyMjlcdTkyMmFcdTkyMmJcdTkyMmNcdTkyMmRcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzFcdTkyMzJcdTkyMzNcdTkyMzRcdTkyMzVcdTkyMzZcdTkyMzdcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2JcdTkyM2NcdTkyM2RcdTkyM2VcdTkyM2ZcdTkyNDBcdTkyNDFcdTky''@;'; put 'put ''NDJcdTkyNDNcdTkyNDRcdTkyNDVcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdc''@;'; put 'put ''dTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVl''@;'; put 'put ''YTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlc''@;'; put 'put ''dTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyNl1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMjZdW2ddXT01Nzg1NitnLHlbNTc4NTYrZ109X1syMjZdW2ddKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyNDZcdTkyNDdcdTkyNDhcdTkyNDlcdTkyNGFcdTkyNGJcdTkyNGNcdTkyNGRcdTkyNGVc''@;'; put 'put ''dTkyNGZcdTkyNTBcdTkyNTFcdTkyNTJcdTkyNTNcdTkyNTRcdTkyNTVcdTkyNTZcdTkyNTdcdTkyNThcdTkyNTlcdTkyNWFcdTkyNWJcdTkyNWNcdTkyNWRcdTkyNWVcdTkyNWZcdTkyNjBcdTkyNjFcdTkyNjJcdTkyNjNcdTkyNjRcdTkyNjVcdTkyNjZcdTkyNjdcdTkyNjhcdTkyNjlcdTky''@;'; put 'put ''NmFcdTkyNmJcdTkyNmNcdTkyNmRcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzFcdTkyNzJcdTkyNzNcdTkyNzVcdTkyNzZcdTkyNzdcdTkyNzhcdTkyNzlcdTkyN2FcdTkyN2JcdTkyN2NcdTkyN2RcdTkyN2VcdTkyN2ZcdTkyODBcdTkyODFcdTkyODJcdTkyODNcdTkyODRcdTkyODVcdWZmZmRc''@;'; put 'put ''dTkyODZcdTkyODdcdTkyODhcdTkyODlcdTkyOGFcdTkyOGJcdTkyOGNcdTkyOGRcdTkyOGZcdTkyOTBcdTkyOTFcdTkyOTJcdTkyOTNcdTkyOTRcdTkyOTVcdTkyOTZcdTkyOTdcdTkyOThcdTkyOTlcdTkyOWFcdTkyOWJcdTkyOWNcdTkyOWRcdTkyOWVcdTkyOWZcdTkyYTBcdTkyYTFcdTky''@;'; put 'put ''YTJcdTkyYTNcdTkyYTRcdTkyYTVcdTkyYTZcdTkyYTdcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNc''@;'; put 'put ''dTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2''@;'; put 'put ''MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlc''@;'; put 'put ''dTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIyN11bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syMjddW2ddXT01ODExMitnLHlbNTgxMTIrZ109X1syMjddW2ddKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYThcdTkyYTlcdTkyYWFcdTkyYWJcdTkyYWNcdTkyYWRcdTkyYWZc''@;'; put 'put ''dTkyYjBcdTkyYjFcdTkyYjJcdTkyYjNcdTkyYjRcdTkyYjVcdTkyYjZcdTkyYjdcdTkyYjhcdTkyYjlcdTkyYmFcdTkyYmJcdTkyYmNcdTkyYmRcdTkyYmVcdTkyYmZcdTkyYzBcdTkyYzFcdTkyYzJcdTkyYzNcdTkyYzRcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzlcdTkyY2FcdTkyY2JcdTky''@;'; put 'put ''Y2NcdTkyY2RcdTkyY2VcdTkyY2ZcdTkyZDBcdTkyZDFcdTkyZDJcdTkyZDNcdTkyZDRcdTkyZDVcdTkyZDZcdTkyZDdcdTkyZDhcdTkyZDlcdTkyZGFcdTkyZGJcdTkyZGNcdTkyZGRcdTkyZGVcdTkyZGZcdTkyZTBcdTkyZTFcdTkyZTJcdTkyZTNcdTkyZTRcdTkyZTVcdTkyZTZcdTkyZTdc''@;'; put 'put ''dTkyZThcdWZmZmRcdTkyZTlcdTkyZWFcdTkyZWJcdTkyZWNcdTkyZWRcdTkyZWVcdTkyZWZcdTkyZjBcdTkyZjFcdTkyZjJcdTkyZjNcdTkyZjRcdTkyZjVcdTkyZjZcdTkyZjdcdTkyZjhcdTkyZjlcdTkyZmFcdTkyZmJcdTkyZmNcdTkyZmRcdTkyZmVcdTkyZmZcdTkzMDBcdTkzMDFcdTkz''@;'; put 'put ''MDJcdTkzMDNcdTkzMDRcdTkzMDVcdTkzMDZcdTkzMDdcdTkzMDhcdTkzMDlcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZc''@;'; put 'put ''dTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZl''@;'; put 'put ''NmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZc''@;'; put 'put ''dTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT1f''@;'; put 'put ''WzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW2ddXT01ODM2OCtnLHlbNTgzNjgrZ109X1syMjhdW2ddKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGFcdTkzMGJcdTkzMGNcdTkzMGRcdTkzMGVc''@;'; put 'put ''dTkzMGZcdTkzMTBcdTkzMTFcdTkzMTJcdTkzMTNcdTkzMTRcdTkzMTVcdTkzMTZcdTkzMTdcdTkzMThcdTkzMTlcdTkzMWFcdTkzMWJcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjBcdTkzMjFcdTkzMjJcdTkzMjNcdTkzMjRcdTkzMjVcdTkzMjZcdTkzMjdcdTkzMjhcdTkzMjlcdTkz''@;'; put 'put ''MmFcdTkzMmJcdTkzMmNcdTkzMmRcdTkzMmVcdTkzMmZcdTkzMzBcdTkzMzFcdTkzMzJcdTkzMzNcdTkzMzRcdTkzMzVcdTkzMzZcdTkzMzdcdTkzMzhcdTkzMzlcdTkzM2FcdTkzM2JcdTkzM2NcdTkzM2RcdTkzM2ZcdTkzNDBcdTkzNDFcdTkzNDJcdTkzNDNcdTkzNDRcdTkzNDVcdTkzNDZc''@;'; put 'put ''dTkzNDdcdTkzNDhcdTkzNDlcdWZmZmRcdTkzNGFcdTkzNGJcdTkzNGNcdTkzNGRcdTkzNGVcdTkzNGZcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTNcdTkzNTRcdTkzNTVcdTkzNTZcdTkzNTdcdTkzNThcdTkzNTlcdTkzNWFcdTkzNWJcdTkzNWNcdTkzNWRcdTkzNWVcdTkzNWZcdTkzNjBcdTkz''@;'; put 'put ''NjFcdTkzNjJcdTkzNjNcdTkzNjRcdTkzNjVcdTkzNjZcdTkzNjdcdTkzNjhcdTkzNjlcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBc''@;'; put 'put ''dTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkw''@;'; put 'put ''MjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThc''@;'; put 'put ''dTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMjldLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT1fWzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW2ddXT01ODYyNCtnLHlbNTg2MjQrZ109X1syMjldW2ddKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzNmNcdTkzNmRcdTkzNmVc''@;'; put 'put ''dTkzNmZcdTkzNzBcdTkzNzFcdTkzNzJcdTkzNzNcdTkzNzRcdTkzNzVcdTkzNzZcdTkzNzdcdTkzNzhcdTkzNzlcdTkzN2FcdTkzN2JcdTkzN2NcdTkzN2RcdTkzN2VcdTkzN2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODNcdTkzODRcdTkzODVcdTkzODZcdTkzODdcdTkzODhcdTkzODlcdTkz''@;'; put 'put ''OGFcdTkzOGJcdTkzOGNcdTkzOGRcdTkzOGVcdTkzOTBcdTkzOTFcdTkzOTJcdTkzOTNcdTkzOTRcdTkzOTVcdTkzOTZcdTkzOTdcdTkzOThcdTkzOTlcdTkzOWFcdTkzOWJcdTkzOWNcdTkzOWRcdTkzOWVcdTkzOWZcdTkzYTBcdTkzYTFcdTkzYTJcdTkzYTNcdTkzYTRcdTkzYTVcdTkzYTZc''@;'; put 'put ''dTkzYTdcdTkzYThcdTkzYTlcdTkzYWFcdTkzYWJcdWZmZmRcdTkzYWNcdTkzYWRcdTkzYWVcdTkzYWZcdTkzYjBcdTkzYjFcdTkzYjJcdTkzYjNcdTkzYjRcdTkzYjVcdTkzYjZcdTkzYjdcdTkzYjhcdTkzYjlcdTkzYmFcdTkzYmJcdTkzYmNcdTkzYmRcdTkzYmVcdTkzYmZcdTkzYzBcdTkz''@;'; put 'put ''YzFcdTkzYzJcdTkzYzNcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzhcdTkzYzlcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhc''@;'; put 'put ''dTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVh''@;'; put 'put ''ZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFc''@;'; put 'put ''dTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sy''@;'; put 'put ''MzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW2ddXT01ODg4MCtnLHlbNTg4ODArZ109X1syMzBdW2ddKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzY2Vc''@;'; put 'put ''dTkzY2ZcdTkzZDBcdTkzZDFcdTkzZDJcdTkzZDNcdTkzZDRcdTkzZDVcdTkzZDdcdTkzZDhcdTkzZDlcdTkzZGFcdTkzZGJcdTkzZGNcdTkzZGRcdTkzZGVcdTkzZGZcdTkzZTBcdTkzZTFcdTkzZTJcdTkzZTNcdTkzZTRcdTkzZTVcdTkzZTZcdTkzZTdcdTkzZThcdTkzZTlcdTkzZWFcdTkz''@;'; put 'put ''ZWJcdTkzZWNcdTkzZWRcdTkzZWVcdTkzZWZcdTkzZjBcdTkzZjFcdTkzZjJcdTkzZjNcdTkzZjRcdTkzZjVcdTkzZjZcdTkzZjdcdTkzZjhcdTkzZjlcdTkzZmFcdTkzZmJcdTkzZmNcdTkzZmRcdTkzZmVcdTkzZmZcdTk0MDBcdTk0MDFcdTk0MDJcdTk0MDNcdTk0MDRcdTk0MDVcdTk0MDZc''@;'; put 'put ''dTk0MDdcdTk0MDhcdTk0MDlcdTk0MGFcdTk0MGJcdTk0MGNcdTk0MGRcdWZmZmRcdTk0MGVcdTk0MGZcdTk0MTBcdTk0MTFcdTk0MTJcdTk0MTNcdTk0MTRcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MThcdTk0MTlcdTk0MWFcdTk0MWJcdTk0MWNcdTk0MWRcdTk0MWVcdTk0MWZcdTk0MjBcdTk0''@;'; put 'put ''MjFcdTk0MjJcdTk0MjNcdTk0MjRcdTk0MjVcdTk0MjZcdTk0MjdcdTk0MjhcdTk0MjlcdTk0MmFcdTk0MmJcdTk0MmNcdTk0MmRcdTk0MmVcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBc''@;'; put 'put ''dTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdm''@;'; put 'put ''MjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2Zc''@;'; put 'put ''dTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9X1syMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW2ddXT01OTEzNitnLHlbNTkxMzYrZ109X1syMzFdW2ddKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTk0MmZcdTk0MzBcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0MzVcdTk0MzZcdTk0MzdcdTk0MzhcdTk0MzlcdTk0M2FcdTk0M2JcdTk0M2NcdTk0M2RcdTk0M2ZcdTk0NDBcdTk0NDFcdTk0NDJcdTk0NDNcdTk0NDRcdTk0NDVcdTk0NDZcdTk0NDdcdTk0NDhcdTk0NDlcdTk0''@;'; put 'put ''NGFcdTk0NGJcdTk0NGNcdTk0NGRcdTk0NGVcdTk0NGZcdTk0NTBcdTk0NTFcdTk0NTJcdTk0NTNcdTk0NTRcdTk0NTVcdTk0NTZcdTk0NTdcdTk0NThcdTk0NTlcdTk0NWFcdTk0NWJcdTk0NWNcdTk0NWRcdTk0NWVcdTk0NWZcdTk0NjBcdTk0NjFcdTk0NjJcdTk0NjNcdTk0NjRcdTk0NjVc''@;'; put 'put ''dTk0NjZcdTk0NjdcdTk0NjhcdTk0NjlcdTk0NmFcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmZcdWZmZmRcdTk0NzBcdTk0NzFcdTk0NzJcdTk0NzNcdTk0NzRcdTk0NzVcdTk0NzZcdTk0NzdcdTk0NzhcdTk0NzlcdTk0N2FcdTk0N2JcdTk0N2NcdTk0N2RcdTk0N2VcdTk0N2ZcdTk0ODBcdTk0''@;'; put 'put ''ODFcdTk0ODJcdTk0ODNcdTk0ODRcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVc''@;'; put 'put ''dTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3''@;'; put 'put ''OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFc''@;'; put 'put ''dTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW2ddXT01OTM5MitnLHlbNTkzOTIrZ109X1syMzJdW2ddKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzdcdTk1NzhcdTk1NzlcdTk1N2FcdTk1N2JcdTk1N2NcdTk1N2RcdTk1N2VcdTk1ODBcdTk1ODFcdTk1ODJcdTk1ODNcdTk1''@;'; put 'put ''ODRcdTk1ODVcdTk1ODZcdTk1ODdcdTk1ODhcdTk1ODlcdTk1OGFcdTk1OGJcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OGZcdTk1OTBcdTk1OTFcdTk1OTJcdTk1OTNcdTk1OTRcdTk1OTVcdTk1OTZcdTk1OTdcdTk1OThcdTk1OTlcdTk1OWFcdTk1OWJcdTk1OWNcdTk1OWRcdTk1OWVcdTk1OWZc''@;'; put 'put ''dTk1YTBcdTk1YTFcdTk1YTJcdTk1YTNcdTk1YTRcdTk1YTVcdTk1YTZcdTk1YTdcdTk1YThcdTk1YTlcdTk1YWFcdWZmZmRcdTk1YWJcdTk1YWNcdTk1YWRcdTk1YWVcdTk1YWZcdTk1YjBcdTk1YjFcdTk1YjJcdTk1YjNcdTk1YjRcdTk1YjVcdTk1YjZcdTk1YjdcdTk1YjhcdTk1YjlcdTk1''@;'; put 'put ''YmFcdTk1YmJcdTk1YmNcdTk1YmRcdTk1YmVcdTk1YmZcdTk1YzBcdTk1YzFcdTk1YzJcdTk1YzNcdTk1YzRcdTk1YzVcdTk1YzZcdTk1YzdcdTk1YzhcdTk1YzlcdTk1Y2FcdTk1Y2JcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBc''@;'; put 'put ''dTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5''@;'; put 'put ''ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJc''@;'; put 'put ''dTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThm''@;'; put 'put ''ODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW2ddXT01OTY0OCtnLHlbNTk2NDgrZ109X1syMzNdW2ddKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1Y2NcdTk1Y2RcdTk1Y2VcdTk1Y2ZcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDRcdTk1ZDVcdTk1ZDZcdTk1ZDdcdTk1ZDhcdTk1ZDlcdTk1ZGFcdTk1ZGJcdTk1ZGNcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTFcdTk1''@;'; put 'put ''ZTJcdTk1ZTNcdTk1ZTRcdTk1ZTVcdTk1ZTZcdTk1ZTdcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2MjBcdTk2MjNcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MjdcdTk2MjhcdTk2MjlcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2Mzhc''@;'; put 'put ''dTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFcdTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTdcdWZmZmRcdTk2NThcdTk2NTlcdTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmRcdTk2NmVcdTk2''@;'; put 'put ''NmZcdTk2NzBcdTk2NzFcdTk2NzNcdTk2NzhcdTk2NzlcdTk2N2FcdTk2N2JcdTk2N2NcdTk2N2RcdTk2N2VcdTk2N2ZcdTk2ODBcdTk2ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODdcdTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdc''@;'; put 'put ''dTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2''@;'; put 'put ''MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBc''@;'; put 'put ''dThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcy''@;'; put 'put ''OTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW2ddXT01OTkwNCtnLHlbNTk5MDQrZ109X1syMzRdW2ddKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFcdTk2OWJcdTk2OWRcdTk2OWVcdTk2OWZcdTk2YTBcdTk2YTFcdTk2YTJcdTk2YTNcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YThcdTk2''@;'; put 'put ''YTlcdTk2YWFcdTk2YWJcdTk2YWNcdTk2YWRcdTk2YWVcdTk2YWZcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDZcdTk2ZDdcdTk2ZDhc''@;'; put 'put ''dTk2ZDlcdTk2ZGFcdTk2ZGJcdTk2ZGNcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTFcdTk2ZTJcdTk2ZTNcdTk2ZTRcdTk2ZTVcdTk2ZTZcdTk2ZTdcdTk2ZWJcdWZmZmRcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2''@;'; put 'put ''ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVcdTk3MTdcdTk3MThcdTk3MTlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRc''@;'; put 'put ''dTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgw''@;'; put 'put ''YmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNc''@;'; put 'put ''dTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgx''@;'; put 'put ''YTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzVdW2ddXT02MDE2MCtnLHlbNjAxNjArZ109X1syMzVdW2ddKTtmb3IoX1syMzZdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjRcdTk3MjVcdTk3MjZcdTk3MjdcdTk3MjhcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzNcdTk3MzRcdTk3MzVcdTk3MzZcdTk3''@;'; put 'put ''MzdcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2ZcdTk3NDBcdTk3NDFcdTk3NDJcdTk3NDNcdTk3NDRcdTk3NDVcdTk3NDZcdTk3NDdcdTk3NDhcdTk3NDlcdTk3NGFcdTk3NGJcdTk3NGNcdTk3NGRcdTk3NGVcdTk3NGZcdTk3NTBcdTk3NTFcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThc''@;'; put 'put ''dTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmFcdTk3NmJcdTk3NmNcdTk3NmRcdTk3NmVcdTk3NmZcdTk3NzBcdTk3NzFcdWZmZmRcdTk3NzJcdTk3NzVcdTk3NzdcdTk3NzhcdTk3NzlcdTk3N2FcdTk3N2JcdTk3N2RcdTk3N2VcdTk3''@;'; put 'put ''N2ZcdTk3ODBcdTk3ODFcdTk3ODJcdTk3ODNcdTk3ODRcdTk3ODZcdTk3ODdcdTk3ODhcdTk3ODlcdTk3OGFcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNcdTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWJcdTk3OWNcdTk3OWRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdc''@;'; put 'put ''dTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcw''@;'; put 'put ''OTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBc''@;'; put 'put ''dTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5''@;'; put 'put ''N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzZdW2ddXT02MDQxNitnLHlbNjA0MTYrZ109X1syMzZdW2ddKTtm''@;'; put 'put ''b3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWZcdTk3YTFcdTk3YTJcdTk3YTRcdTk3YTVcdTk3YTZcdTk3YTdcdTk3YThcdTk3YTlcdTk3YWFcdTk3YWNcdTk3YWVcdTk3YjBcdTk3YjFcdTk3YjNcdTk3''@;'; put 'put ''YjVcdTk3YjZcdTk3YjdcdTk3YjhcdTk3YjlcdTk3YmFcdTk3YmJcdTk3YmNcdTk3YmRcdTk3YmVcdTk3YmZcdTk3YzBcdTk3YzFcdTk3YzJcdTk3YzNcdTk3YzRcdTk3YzVcdTk3YzZcdTk3YzdcdTk3YzhcdTk3YzlcdTk3Y2FcdTk3Y2JcdTk3Y2NcdTk3Y2RcdTk3Y2VcdTk3Y2ZcdTk3ZDBc''@;'; put 'put ''dTk3ZDFcdTk3ZDJcdTk3ZDNcdTk3ZDRcdTk3ZDVcdTk3ZDZcdTk3ZDdcdTk3ZDhcdTk3ZDlcdTk3ZGFcdTk3ZGJcdTk3ZGNcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk3ZTBcdTk3ZTFcdTk3ZTJcdTk3ZTNcdWZmZmRcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWVcdTk3ZWZcdTk3ZjBcdTk3ZjFcdTk3''@;'; put 'put ''ZjJcdTk3ZjRcdTk3ZjdcdTk3ZjhcdTk3ZjlcdTk3ZmFcdTk3ZmJcdTk3ZmNcdTk3ZmRcdTk3ZmVcdTk3ZmZcdTk4MDBcdTk4MDFcdTk4MDJcdTk4MDNcdTk4MDRcdTk4MDVcdTk4MDZcdTk4MDdcdTk4MDhcdTk4MDlcdTk4MGFcdTk4MGJcdTk4MGNcdTk4MGRcdTk4MGVcdTYwM2NcdTYwNWRc''@;'; put 'put ''dTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4''@;'; put 'put ''MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNc''@;'; put 'put ''dTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3''@;'; put 'put ''MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW2ddXT02MDY3MitnLHlbNjA2NzIrZ109''@;'; put 'put ''X1syMzddW2ddKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4MGZcdTk4MTBcdTk4MTFcdTk4MTJcdTk4MTNcdTk4MTRcdTk4MTVcdTk4MTZcdTk4MTdcdTk4MThcdTk4MTlcdTk4MWFcdTk4MWJcdTk4MWNcdTk4''@;'; put 'put ''MWRcdTk4MWVcdTk4MWZcdTk4MjBcdTk4MjFcdTk4MjJcdTk4MjNcdTk4MjRcdTk4MjVcdTk4MjZcdTk4MjdcdTk4MjhcdTk4MjlcdTk4MmFcdTk4MmJcdTk4MmNcdTk4MmRcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzFcdTk4MzJcdTk4MzNcdTk4MzRcdTk4MzVcdTk4MzZcdTk4MzdcdTk4Mzhc''@;'; put 'put ''dTk4MzlcdTk4M2FcdTk4M2JcdTk4M2NcdTk4M2RcdTk4M2VcdTk4M2ZcdTk4NDBcdTk4NDFcdTk4NDJcdTk4NDNcdTk4NDRcdTk4NDVcdTk4NDZcdTk4NDdcdTk4NDhcdTk4NDlcdTk4NGFcdTk4NGJcdTk4NGNcdTk4NGRcdWZmZmRcdTk4NGVcdTk4NGZcdTk4NTBcdTk4NTFcdTk4NTJcdTk4''@;'; put 'put ''NTNcdTk4NTRcdTk4NTVcdTk4NTZcdTk4NTdcdTk4NThcdTk4NTlcdTk4NWFcdTk4NWJcdTk4NWNcdTk4NWRcdTk4NWVcdTk4NWZcdTk4NjBcdTk4NjFcdTk4NjJcdTk4NjNcdTk4NjRcdTk4NjVcdTk4NjZcdTk4NjdcdTk4NjhcdTk4NjlcdTk4NmFcdTk4NmJcdTk4NmNcdTk4NmRcdTk4NmVc''@;'; put 'put ''dTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdm''@;'; put 'put ''NzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRc''@;'; put 'put ''dTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0''@;'; put 'put ''ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW2ddXT02MDkyOCtn''@;'; put 'put ''LHlbNjA5MjgrZ109X1syMzhdW2ddKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NmZcdTk4NzBcdTk4NzFcdTk4NzJcdTk4NzNcdTk4NzRcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4''@;'; put 'put ''YThcdTk4YTlcdTk4YWFcdTk4YWJcdTk4YWNcdTk4YWRcdTk4YWVcdTk4YWZcdTk4YjBcdTk4YjFcdTk4YjJcdTk4YjNcdTk4YjRcdTk4YjVcdTk4YjZcdTk4YjdcdTk4YjhcdTk4YjlcdTk4YmFcdTk4YmJcdTk4YmNcdTk4YmRcdTk4YmVcdTk4YmZcdTk4YzBcdTk4YzFcdTk4YzJcdTk4YzNc''@;'; put 'put ''dTk4YzRcdTk4YzVcdTk4YzZcdTk4YzdcdTk4YzhcdTk4YzlcdTk4Y2FcdTk4Y2JcdTk4Y2NcdTk4Y2RcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdcdTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTBcdTk4ZTFcdTk4ZTJcdTk4ZTNcdTk4ZTRcdWZmZmRcdTk4ZTVcdTk4ZTZcdTk4ZTlcdTk4''@;'; put 'put ''ZWFcdTk4ZWJcdTk4ZWNcdTk4ZWRcdTk4ZWVcdTk4ZWZcdTk4ZjBcdTk4ZjFcdTk4ZjJcdTk4ZjNcdTk4ZjRcdTk4ZjVcdTk4ZjZcdTk4ZjdcdTk4ZjhcdTk4ZjlcdTk4ZmFcdTk4ZmJcdTk4ZmNcdTk4ZmRcdTk4ZmVcdTk4ZmZcdTk5MDBcdTk5MDFcdTk5MDJcdTk5MDNcdTk5MDRcdTk5MDVc''@;'; put 'put ''dTk5MDZcdTk5MDdcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1''@;'; put 'put ''MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVc''@;'; put 'put ''dTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1''@;'; put 'put ''M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syMzldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syMzld''@;'; put 'put ''W2ddXT02MTE4NCtnLHlbNjExODQrZ109X1syMzldW2ddKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5MDhcdTk5MDlcdTk5MGFcdTk5MGJcdTk5MGNcdTk5MGVcdTk5MGZcdTk5MTFcdTk5MTJcdTk5MTNcdTk5''@;'; put 'put ''MTRcdTk5MTVcdTk5MTZcdTk5MTdcdTk5MThcdTk5MTlcdTk5MWFcdTk5MWJcdTk5MWNcdTk5MWRcdTk5MWVcdTk5MWZcdTk5MjBcdTk5MjFcdTk5MjJcdTk5MjNcdTk5MjRcdTk5MjVcdTk5MjZcdTk5MjdcdTk5MjhcdTk5MjlcdTk5MmFcdTk5MmJcdTk5MmNcdTk5MmRcdTk5MmZcdTk5MzBc''@;'; put 'put ''dTk5MzFcdTk5MzJcdTk5MzNcdTk5MzRcdTk5MzVcdTk5MzZcdTk5MzdcdTk5MzhcdTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5M2RcdTk5M2VcdTk5M2ZcdTk5NDBcdTk5NDFcdTk5NDJcdTk5NDNcdTk5NDRcdTk5NDVcdTk5NDZcdTk5NDdcdTk5NDhcdTk5NDlcdWZmZmRcdTk5NGFcdTk5''@;'; put 'put ''NGJcdTk5NGNcdTk5NGRcdTk5NGVcdTk5NGZcdTk5NTBcdTk5NTFcdTk5NTJcdTk5NTNcdTk5NTZcdTk5NTdcdTk5NThcdTk5NTlcdTk5NWFcdTk5NWJcdTk5NWNcdTk5NWRcdTk5NWVcdTk5NWZcdTk5NjBcdTk5NjFcdTk5NjJcdTk5NjRcdTk5NjZcdTk5NzNcdTk5NzhcdTk5NzlcdTk5N2Jc''@;'; put 'put ''dTk5N2VcdTk5ODJcdTk5ODNcdTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTll''@;'; put 'put ''MzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlc''@;'; put 'put ''dTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1''@;'; put 'put ''ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MF1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syNDBdW2ddXT02MTQ0MCtnLHlbNjE0NDArZ109X1syNDBdW2ddKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5OGNcdTk5OGVcdTk5OWFcdTk5OWJcdTk5OWNcdTk5OWRcdTk5OWVcdTk5OWZcdTk5''@;'; put 'put ''YTBcdTk5YTFcdTk5YTJcdTk5YTNcdTk5YTRcdTk5YTZcdTk5YTdcdTk5YTlcdTk5YWFcdTk5YWJcdTk5YWNcdTk5YWRcdTk5YWVcdTk5YWZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjNcdTk5YjRcdTk5YjVcdTk5YjZcdTk5YjdcdTk5YjhcdTk5YjlcdTk5YmFcdTk5YmJcdTk5YmNcdTk5YmRc''@;'; put 'put ''dTk5YmVcdTk5YmZcdTk5YzBcdTk5YzFcdTk5YzJcdTk5YzNcdTk5YzRcdTk5YzVcdTk5YzZcdTk5YzdcdTk5YzhcdTk5YzlcdTk5Y2FcdTk5Y2JcdTk5Y2NcdTk5Y2RcdTk5Y2VcdTk5Y2ZcdTk5ZDBcdTk5ZDFcdTk5ZDJcdTk5ZDNcdTk5ZDRcdTk5ZDVcdTk5ZDZcdTk5ZDdcdTk5ZDhcdWZm''@;'; put 'put ''ZmRcdTk5ZDlcdTk5ZGFcdTk5ZGJcdTk5ZGNcdTk5ZGRcdTk5ZGVcdTk5ZGZcdTk5ZTBcdTk5ZTFcdTk5ZTJcdTk5ZTNcdTk5ZTRcdTk5ZTVcdTk5ZTZcdTk5ZTdcdTk5ZThcdTk5ZTlcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5ZWRcdTk5ZWVcdTk5ZWZcdTk5ZjBcdTk5ZjFcdTk5ZjJcdTk5ZjNc''@;'; put 'put ''dTk5ZjRcdTk5ZjVcdTk5ZjZcdTk5ZjdcdTk5ZjhcdTk5ZjlcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdh''@;'; put 'put ''NzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFc''@;'; put 'put ''dTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgw''@;'; put 'put ''MjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0MV1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syNDFdW2ddXT02MTY5NitnLHlbNjE2OTYrZ109X1syNDFdW2ddKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmFcdTk5ZmJcdTk5ZmNcdTk5ZmRcdTk5ZmVcdTk5ZmZcdTlh''@;'; put 'put ''MDBcdTlhMDFcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMDVcdTlhMDZcdTlhMDdcdTlhMDhcdTlhMDlcdTlhMGFcdTlhMGJcdTlhMGNcdTlhMGRcdTlhMGVcdTlhMGZcdTlhMTBcdTlhMTFcdTlhMTJcdTlhMTNcdTlhMTRcdTlhMTVcdTlhMTZcdTlhMTdcdTlhMThcdTlhMTlcdTlhMWFcdTlhMWJc''@;'; put 'put ''dTlhMWNcdTlhMWRcdTlhMWVcdTlhMWZcdTlhMjBcdTlhMjFcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjVcdTlhMjZcdTlhMjdcdTlhMjhcdTlhMjlcdTlhMmFcdTlhMmJcdTlhMmNcdTlhMmRcdTlhMmVcdTlhMmZcdTlhMzBcdTlhMzFcdTlhMzJcdTlhMzNcdTlhMzRcdTlhMzVcdTlhMzZcdTlh''@;'; put 'put ''MzdcdTlhMzhcdWZmZmRcdTlhMzlcdTlhM2FcdTlhM2JcdTlhM2NcdTlhM2RcdTlhM2VcdTlhM2ZcdTlhNDBcdTlhNDFcdTlhNDJcdTlhNDNcdTlhNDRcdTlhNDVcdTlhNDZcdTlhNDdcdTlhNDhcdTlhNDlcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGRcdTlhNGVcdTlhNGZcdTlhNTBcdTlhNTFc''@;'; put 'put ''dTlhNTJcdTlhNTNcdTlhNTRcdTlhNTVcdTlhNTZcdTlhNTdcdTlhNThcdTlhNTlcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2''@;'; put 'put ''N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNc''@;'; put 'put ''dTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3''@;'; put 'put ''ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDJdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT1fWzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW2ddXT02MTk1MitnLHlbNjE5NTIrZ109X1syNDJdW2ddKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNWFcdTlhNWJcdTlhNWNcdTlhNWRcdTlh''@;'; put 'put ''NWVcdTlhNWZcdTlhNjBcdTlhNjFcdTlhNjJcdTlhNjNcdTlhNjRcdTlhNjVcdTlhNjZcdTlhNjdcdTlhNjhcdTlhNjlcdTlhNmFcdTlhNmJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlhOTVcdTlhOTlcdTlhYTZcdTlhYTlcdTlhYWFcdTlhYWJcdTlhYWNcdTlhYWRc''@;'; put 'put ''dTlhYWVcdTlhYWZcdTlhYjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJcdTlhYmRcdTlhYmVcdTlhYmZcdTlhYzNcdTlhYzRcdTlhYzZcdTlhYzdcdTlhYzhcdTlhYzlcdTlhY2FcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVcdTlhZDZcdTlhZDdcdTlh''@;'; put 'put ''ZDlcdTlhZGFcdTlhZGJcdTlhZGNcdWZmZmRcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjBcdTlhZjFcdTlhZjJcdTlhZjNcdTlhZjRcdTlhZjVcdTlhZjZcdTlhZjdcdTlhZjhcdTlhZmFc''@;'; put 'put ''dTlhZmNcdTlhZmRcdTlhZmVcdTlhZmZcdTliMDBcdTliMDFcdTliMDJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3''@;'; put 'put ''ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhc''@;'; put 'put ''dTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdi''@;'; put 'put ''OWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDNdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT1fWzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW2ddXT02MjIwOCtnLHlbNjIyMDgrZ109X1syNDNdW2ddKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliMDdcdTliMDlcdTli''@;'; put 'put ''MGFcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTFcdTliMTJcdTliMTRcdTliMTVcdTliMTZcdTliMTdcdTliMThcdTliMTlcdTliMWFcdTliMWJcdTliMWNcdTliMWRcdTliMWVcdTliMjBcdTliMjFcdTliMjJcdTliMjRcdTliMjVcdTliMjZcdTliMjdcdTliMjhcdTliMjlc''@;'; put 'put ''dTliMmFcdTliMmJcdTliMmNcdTliMmRcdTliMmVcdTliMzBcdTliMzFcdTliMzNcdTliMzRcdTliMzVcdTliMzZcdTliMzdcdTliMzhcdTliMzlcdTliM2FcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTli''@;'; put 'put ''NTVcdTliNTZcdTliNTdcdTliNThcdTliNTlcdTliNWFcdWZmZmRcdTliNWJcdTliNWNcdTliNWRcdTliNWVcdTliNWZcdTliNjBcdTliNjFcdTliNjJcdTliNjNcdTliNjRcdTliNjVcdTliNjZcdTliNjdcdTliNjhcdTliNjlcdTliNmFcdTliNmJcdTliNmNcdTliNmRcdTliNmVcdTliNmZc''@;'; put 'put ''dTliNzBcdTliNzFcdTliNzJcdTliNzNcdTliNzRcdTliNzVcdTliNzZcdTliNzdcdTliNzhcdTliNzlcdTliN2FcdTliN2JcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgy''@;'; put 'put ''MmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJc''@;'; put 'put ''dTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdm''@;'; put 'put ''ZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''X1syNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW2ddXT02MjQ2NCtnLHlbNjI0NjQrZ109X1syNDRdW2ddKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTli''@;'; put 'put ''N2NcdTliN2RcdTliN2VcdTliN2ZcdTliODBcdTliODFcdTliODJcdTliODNcdTliODRcdTliODVcdTliODZcdTliODdcdTliODhcdTliODlcdTliOGFcdTliOGJcdTliOGNcdTliOGRcdTliOGVcdTliOGZcdTliOTBcdTliOTFcdTliOTJcdTliOTNcdTliOTRcdTliOTVcdTliOTZcdTliOTdc''@;'; put 'put ''dTliOThcdTliOTlcdTliOWFcdTliOWJcdTliOWNcdTliOWRcdTliOWVcdTliOWZcdTliYTBcdTliYTFcdTliYTJcdTliYTNcdTliYTRcdTliYTVcdTliYTZcdTliYTdcdTliYThcdTliYTlcdTliYWFcdTliYWJcdTliYWNcdTliYWRcdTliYWVcdTliYWZcdTliYjBcdTliYjFcdTliYjJcdTli''@;'; put 'put ''YjNcdTliYjRcdTliYjVcdTliYjZcdTliYjdcdTliYjhcdTliYjlcdTliYmFcdWZmZmRcdTliYmJcdTliYmNcdTliYmRcdTliYmVcdTliYmZcdTliYzBcdTliYzFcdTliYzJcdTliYzNcdTliYzRcdTliYzVcdTliYzZcdTliYzdcdTliYzhcdTliYzlcdTliY2FcdTliY2JcdTliY2NcdTliY2Rc''@;'; put 'put ''dTliY2VcdTliY2ZcdTliZDBcdTliZDFcdTliZDJcdTliZDNcdTliZDRcdTliZDVcdTliZDZcdTliZDdcdTliZDhcdTliZDlcdTliZGFcdTliZGJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkx''@;'; put 'put ''OGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2Vc''@;'; put 'put ''dThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThl''@;'; put 'put ''NDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9X1syNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW2ddXT02MjcyMCtnLHlbNjI3MjArZ109X1syNDVdW2ddKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTliZGNcdTliZGRcdTliZGVcdTliZGZcdTliZTBcdTliZTFcdTliZTJcdTliZTNcdTliZTRcdTliZTVcdTliZTZcdTliZTdcdTliZThcdTliZTlcdTliZWFcdTliZWJcdTliZWNcdTliZWRcdTliZWVcdTliZWZcdTliZjBcdTliZjFcdTliZjJcdTliZjNcdTliZjRcdTliZjVc''@;'; put 'put ''dTliZjZcdTliZjdcdTliZjhcdTliZjlcdTliZmFcdTliZmJcdTliZmNcdTliZmRcdTliZmVcdTliZmZcdTljMDBcdTljMDFcdTljMDJcdTljMDNcdTljMDRcdTljMDVcdTljMDZcdTljMDdcdTljMDhcdTljMDlcdTljMGFcdTljMGJcdTljMGNcdTljMGRcdTljMGVcdTljMGZcdTljMTBcdTlj''@;'; put 'put ''MTFcdTljMTJcdTljMTNcdTljMTRcdTljMTVcdTljMTZcdTljMTdcdTljMThcdTljMTlcdTljMWFcdWZmZmRcdTljMWJcdTljMWNcdTljMWRcdTljMWVcdTljMWZcdTljMjBcdTljMjFcdTljMjJcdTljMjNcdTljMjRcdTljMjVcdTljMjZcdTljMjdcdTljMjhcdTljMjlcdTljMmFcdTljMmJc''@;'; put 'put ''dTljMmNcdTljMmRcdTljMmVcdTljMmZcdTljMzBcdTljMzFcdTljMzJcdTljMzNcdTljMzRcdTljMzVcdTljMzZcdTljMzdcdTljMzhcdTljMzlcdTljM2FcdTljM2JcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3''@;'; put 'put ''MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVc''@;'; put 'put ''dTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTlj''@;'; put 'put ''YTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2Jc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW2ddXT02Mjk3NitnLHlbNjI5NzYrZ109X1syNDZdW2ddKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljM2NcdTljM2RcdTljM2VcdTljM2ZcdTljNDBcdTljNDFcdTljNDJcdTljNDNcdTljNDRcdTljNDVcdTljNDZcdTljNDdcdTljNDhcdTljNDlcdTljNGFcdTljNGJcdTljNGNcdTljNGRcdTljNGVcdTljNGZcdTljNTBcdTljNTFcdTljNTJcdTljNTNc''@;'; put 'put ''dTljNTRcdTljNTVcdTljNTZcdTljNTdcdTljNThcdTljNTlcdTljNWFcdTljNWJcdTljNWNcdTljNWRcdTljNWVcdTljNWZcdTljNjBcdTljNjFcdTljNjJcdTljNjNcdTljNjRcdTljNjVcdTljNjZcdTljNjdcdTljNjhcdTljNjlcdTljNmFcdTljNmJcdTljNmNcdTljNmRcdTljNmVcdTlj''@;'; put 'put ''NmZcdTljNzBcdTljNzFcdTljNzJcdTljNzNcdTljNzRcdTljNzVcdTljNzZcdTljNzdcdTljNzhcdTljNzlcdTljN2FcdWZmZmRcdTljN2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlc''@;'; put 'put ''dTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmVcdTljYmZcdTljYzBcdTljYzFcdTljYzJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTlj''@;'; put 'put ''ZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2Jc''@;'; put 'put ''dTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTll''@;'; put 'put ''YmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2Rc''@;'; put 'put ''dTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDddLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW2ddXT02MzIzMitnLHlbNjMyMzIrZ109X1syNDddW2ddKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljZTNcdTljZTRcdTljZTVcdTljZTZcdTljZTdcdTljZThcdTljZTlcdTljZWFcdTljZWJcdTljZWNcdTljZWRcdTljZWVcdTljZWZcdTljZjBcdTljZjFcdTljZjJcdTljZjNcdTljZjRcdTljZjVcdTljZjZcdTljZjdcdTljZjhc''@;'; put 'put ''dTljZjlcdTljZmFcdTljZmJcdTljZmNcdTljZmRcdTljZmVcdTljZmZcdTlkMDBcdTlkMDFcdTlkMDJcdTlkMDNcdTlkMDRcdTlkMDVcdTlkMDZcdTlkMDdcdTlkMDhcdTlkMDlcdTlkMGFcdTlkMGJcdTlkMGNcdTlkMGRcdTlkMGVcdTlkMGZcdTlkMTBcdTlkMTFcdTlkMTJcdTlkMTNcdTlk''@;'; put 'put ''MTRcdTlkMTVcdTlkMTZcdTlkMTdcdTlkMThcdTlkMTlcdTlkMWFcdTlkMWJcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMWZcdTlkMjBcdTlkMjFcdWZmZmRcdTlkMjJcdTlkMjNcdTlkMjRcdTlkMjVcdTlkMjZcdTlkMjdcdTlkMjhcdTlkMjlcdTlkMmFcdTlkMmJcdTlkMmNcdTlkMmRcdTlkMmVc''@;'; put 'put ''dTlkMmZcdTlkMzBcdTlkMzFcdTlkMzJcdTlkMzNcdTlkMzRcdTlkMzVcdTlkMzZcdTlkMzdcdTlkMzhcdTlkMzlcdTlkM2FcdTlkM2JcdTlkM2NcdTlkM2RcdTlkM2VcdTlkM2ZcdTlkNDBcdTlkNDFcdTlkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDhdW2ddXT02MzQ4OCtnLHlbNjM0ODgrZ109X1syNDhdW2ddKTtmb3IoX1syNDldPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDNcdTlkNDRcdTlkNDVcdTlkNDZcdTlkNDdcdTlkNDhcdTlkNDlcdTlkNGFcdTlkNGJcdTlkNGNcdTlkNGRcdTlkNGVcdTlkNGZcdTlkNTBcdTlkNTFcdTlkNTJcdTlkNTNcdTlkNTRcdTlkNTVcdTlkNTZc''@;'; put 'put ''dTlkNTdcdTlkNThcdTlkNTlcdTlkNWFcdTlkNWJcdTlkNWNcdTlkNWRcdTlkNWVcdTlkNWZcdTlkNjBcdTlkNjFcdTlkNjJcdTlkNjNcdTlkNjRcdTlkNjVcdTlkNjZcdTlkNjdcdTlkNjhcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNmNcdTlkNmRcdTlkNmVcdTlkNmZcdTlkNzBcdTlkNzFcdTlk''@;'; put 'put ''NzJcdTlkNzNcdTlkNzRcdTlkNzVcdTlkNzZcdTlkNzdcdTlkNzhcdTlkNzlcdTlkN2FcdTlkN2JcdTlkN2NcdTlkN2RcdTlkN2VcdTlkN2ZcdTlkODBcdTlkODFcdWZmZmRcdTlkODJcdTlkODNcdTlkODRcdTlkODVcdTlkODZcdTlkODdcdTlkODhcdTlkODlcdTlkOGFcdTlkOGJcdTlkOGNc''@;'; put 'put ''dTlkOGRcdTlkOGVcdTlkOGZcdTlkOTBcdTlkOTFcdTlkOTJcdTlkOTNcdTlkOTRcdTlkOTVcdTlkOTZcdTlkOTdcdTlkOThcdTlkOTlcdTlkOWFcdTlkOWJcdTlkOWNcdTlkOWRcdTlkOWVcdTlkOWZcdTlkYTBcdTlkYTFcdTlkYTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNDldLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNDldW2ddXT02Mzc0NCtnLHlbNjM3NDQrZ109X1syNDldW2ddKTtmb3IoX1syNTBd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTNcdTlkYTRcdTlkYTVcdTlkYTZcdTlkYTdcdTlkYThcdTlkYTlcdTlkYWFcdTlkYWJcdTlkYWNcdTlkYWRcdTlkYWVcdTlkYWZcdTlkYjBcdTlkYjFcdTlkYjJcdTlkYjNcdTlkYjRc''@;'; put 'put ''dTlkYjVcdTlkYjZcdTlkYjdcdTlkYjhcdTlkYjlcdTlkYmFcdTlkYmJcdTlkYmNcdTlkYmRcdTlkYmVcdTlkYmZcdTlkYzBcdTlkYzFcdTlkYzJcdTlkYzNcdTlkYzRcdTlkYzVcdTlkYzZcdTlkYzdcdTlkYzhcdTlkYzlcdTlkY2FcdTlkY2JcdTlkY2NcdTlkY2RcdTlkY2VcdTlkY2ZcdTlk''@;'; put 'put ''ZDBcdTlkZDFcdTlkZDJcdTlkZDNcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZDhcdTlkZDlcdTlkZGFcdTlkZGJcdTlkZGNcdTlkZGRcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTFcdWZmZmRcdTlkZTJcdTlkZTNcdTlkZTRcdTlkZTVcdTlkZTZcdTlkZTdcdTlkZThcdTlkZTlcdTlkZWFc''@;'; put 'put ''dTlkZWJcdTlkZWNcdTlkZWRcdTlkZWVcdTlkZWZcdTlkZjBcdTlkZjFcdTlkZjJcdTlkZjNcdTlkZjRcdTlkZjVcdTlkZjZcdTlkZjdcdTlkZjhcdTlkZjlcdTlkZmFcdTlkZmJcdTlkZmNcdTlkZmRcdTlkZmVcdTlkZmZcdTllMDBcdTllMDFcdTllMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1syNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzI1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1syNTBdW2ddXT02NGUzK2cseVs2NGUzK2ddPV9bMjUwXVtnXSk7''@;'; put 'put ''Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZTAzXHU5ZTA0XHU5ZTA1XHU5ZTA2XHU5ZTA3XHU5ZTA4XHU5ZTA5XHU5ZTBhXHU5ZTBiXHU5ZTBjXHU5ZTBkXHU5ZTBlXHU5ZTBmXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5''@;'; put 'put ''ZTEzXHU5ZTE0XHU5ZTE1XHU5ZTE2XHU5ZTE3XHU5ZTE4XHU5ZTE5XHU5ZTFhXHU5ZTFiXHU5ZTFjXHU5ZTFkXHU5ZTFlXHU5ZTI0XHU5ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVk''@;'; put 'put ''XHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0XHU5ZTc1XHU5ZTc2XHU5ZTc3XHU5ZTc4XHU5ZTc5XHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTdkXHU5ZTgwXHVmZmZkXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5''@;'; put 'put ''ZThjXHU5ZThkXHU5ZThlXHU5ZThmXHU5ZTkwXHU5ZTkxXHU5ZTk0XHU5ZTk1XHU5ZTk2XHU5ZTk3XHU5ZTk4XHU5ZTk5XHU5ZTlhXHU5ZTliXHU5ZTljXHU5ZTllXHU5ZWEwXHU5ZWExXHU5ZWEyXHU5ZWEzXHU5ZWE0XHU5ZWE1XHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUxXVtnXV09NjQyNTYrZyx5WzY0MjU2K2dd''@;'; put 'put ''PV9bMjUxXVtnXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZWFiXHU5ZWFjXHU5ZWFkXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIxXHU5ZWIyXHU5ZWIzXHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5''@;'; put 'put ''ZWJjXHU5ZWJmXHU5ZWMwXHU5ZWMxXHU5ZWMyXHU5ZWMzXHU5ZWM1XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUzXHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWVi''@;'; put 'put ''XHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWYzXHU5ZWY0XHU5ZWY1XHU5ZWY2XHU5ZWY3XHU5ZWY4XHU5ZWZhXHU5ZWZkXHU5ZWZmXHU5ZjAwXHU5ZjAxXHU5ZjAyXHU5ZjAzXHU5ZjA0XHU5ZjA1XHVmZmZkXHU5ZjA2XHU5ZjA3XHU5ZjA4XHU5ZjA5XHU5ZjBhXHU5''@;'; put 'put ''ZjBjXHU5ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5ZjE2XHU5ZjE4XHU5ZjFhXHU5ZjFiXHU5ZjFjXHU5ZjFkXHU5ZjFlXHU5ZjFmXHU5ZjIxXHU5ZjIzXHU5ZjI0XHU5ZjI1XHU5ZjI2XHU5ZjI3XHU5ZjI4XHU5ZjI5XHU5ZjJhXHU5ZjJiXHU5ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMx''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtnXV09NjQ1MTIr''@;'; put 'put ''Zyx5WzY0NTEyK2ddPV9bMjUyXVtnXSk7Zm9yKF9bMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjMyXHU5ZjMzXHU5ZjM0XHU5ZjM1XHU5ZjM2XHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmXHU5ZjQwXHU5ZjQxXHU5ZjQyXHU5''@;'; put 'put ''ZjQzXHU5ZjQ1XHU5ZjQ2XHU5ZjQ3XHU5ZjQ4XHU5ZjQ5XHU5ZjRhXHU5ZjRiXHU5ZjRjXHU5ZjRkXHU5ZjRlXHU5ZjRmXHU5ZjUyXHU5ZjUzXHU5ZjU0XHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU5ZjU5XHU5ZjVhXHU5ZjViXHU5ZjVjXHU5ZjVkXHU5ZjVlXHU5ZjVmXHU5ZjYwXHU5ZjYx''@;'; put 'put ''XHU5ZjYyXHU5ZjYzXHU5ZjY0XHU5ZjY1XHU5ZjY2XHU5ZjY3XHU5ZjY4XHU5ZjY5XHU5ZjZhXHU5ZjZiXHU5ZjZjXHU5ZjZkXHU5ZjZlXHU5ZjZmXHU5ZjcwXHU5ZjcxXHU5ZjcyXHU5ZjczXHU5Zjc0XHU5Zjc1XHU5Zjc2XHU5Zjc3XHU5Zjc4XHVmZmZkXHU5Zjc5XHU5ZjdhXHU5ZjdiXHU5''@;'; put 'put ''ZjdjXHU5ZjdkXHU5ZjdlXHU5ZjgxXHU5ZjgyXHU5ZjhkXHU5ZjhlXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5ZjkzXHU5Zjk0XHU5Zjk1XHU5Zjk2XHU5Zjk3XHU5Zjk4XHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE0XHU5ZmE1XHVmOTJjXHVmOTc5XHVmOTk1''@;'; put 'put ''XHVmOWU3XHVmOWYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjUzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUz''@;'; put 'put ''XVtnXV09NjQ3NjgrZyx5WzY0NzY4K2ddPV9bMjUzXVtnXSk7Zm9yKF9bMjU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVm''@;'; put 'put ''YTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjU0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTRdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjU0XVtnXV09NjUwMjQrZyx5WzY1MDI0K2ddPV9bMjU0XVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzk0OV09ZnVuY3Rpb24oKXt2YXIgZyx5PVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgw''@;'; put 'put ''ZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9''@;'; put 'put ''flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1swXS5sZW5ndGg7KytnKTY1NTMzIT09X1swXVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzBdW2ddXT0wK2cseVswK2ddPV9bMF1bZ10pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYlx1YWMwY1x1YWMwZFx1YWMw''@;'; put 'put ''ZVx1YWMwZlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNVx1YWMyNlx1YWMyN1x1YWMyOFx1YWMyOVx1YWMyYVx1YWMyYlx1YWMyZVx1YWMzMlx1YWMzM1x1YWMzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMzNVx1YWMzNlx1YWMzN1x1''@;'; put 'put ''YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MVx1YWM0Mlx1YWM0M1x1YWM0NFx1YWM0NVx1YWM0Nlx1YWM0N1x1YWM0OFx1YWM0OVx1YWM0YVx1YWM0Y1x1YWM0ZVx1YWM0Zlx1YWM1MFx1YWM1MVx1YWM1Mlx1YWM1M1x1YWM1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZFx1YWM1ZVx1YWM1Zlx1YWM2MFx1YWM2MVx1YWM2Mlx1YWM2M1x1YWM2NFx1YWM2NVx1YWM2Nlx1YWM2N1x1YWM2OFx1YWM2OVx1YWM2YVx1YWM2Ylx1YWM2Y1x1YWM2ZFx1YWM2ZVx1YWM2Zlx1YWM3Mlx1YWM3M1x1''@;'; put 'put ''YWM3NVx1YWM3Nlx1YWM3OVx1YWM3Ylx1YWM3Y1x1YWM3ZFx1YWM3ZVx1YWM3Zlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NVx1YWM5Nlx1YWM5N1x1YWM5OFx1YWM5OVx1YWM5YVx1YWM5Ylx1YWM5ZVx1YWNhMlx1YWNhM1x1YWNh''@;'; put 'put ''NFx1YWNhNVx1YWNhNlx1YWNhN1x1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMVx1YWNiMlx1YWNiM1x1YWNiNFx1YWNiNVx1YWNiNlx1YWNiN1x1YWNiYVx1YWNiZVx1YWNiZlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZFx1YWNjZVx1''@;'; put 'put ''YWNjZlx1YWNkMFx1YWNkMVx1YWNkMlx1YWNkM1x1YWNkNFx1YWNkNlx1YWNkOFx1YWNkOVx1YWNkYVx1YWNkYlx1YWNkY1x1YWNkZFx1YWNkZVx1YWNkZlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmN1x1YWNmOFx1YWNm''@;'; put 'put ''OVx1YWNmYVx1YWNmYlx1YWNmZVx1YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwN1x1YWQwOFx1YWQwOVx1YWQwYVx1YWQwYlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTI5XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzEyOV1bZ11dPTMzMDI0K2cseVszMzAyNCtnXT1fWzEyOV1bZ10pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQx''@;'; put 'put ''YVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMVx1YWQyMlx1YWQyM1x1YWQyNFx1YWQyNVx1YWQyNlx1YWQyN1x1YWQyOFx1YWQyYVx1YWQyYlx1YWQyZVx1YWQyZlx1YWQzMFx1YWQzMVx1YWQzMlx1YWQzM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQzNlx1''@;'; put 'put ''YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZFx1YWQzZVx1YWQzZlx1YWQ0MFx1YWQ0MVx1YWQ0Mlx1YWQ0M1x1YWQ0Nlx1YWQ0OFx1YWQ0YVx1YWQ0Ylx1YWQ0Y1x1YWQ0ZFx1YWQ0ZVx1YWQ0Zlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1N1x1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQ1OVx1YWQ1YVx1YWQ1Ylx1YWQ1Y1x1YWQ1ZFx1YWQ1ZVx1YWQ1Zlx1YWQ2MFx1YWQ2Mlx1YWQ2NFx1YWQ2NVx1YWQ2Nlx1YWQ2N1x1YWQ2OFx1YWQ2OVx1YWQ2YVx1YWQ2Ylx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1''@;'; put 'put ''YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4M1x1YWQ4NFx1YWQ4NVx1YWQ4Nlx1YWQ4N1x1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MVx1YWQ5Mlx1YWQ5M1x1YWQ5NFx1YWQ5NVx1YWQ5Nlx1YWQ5N1x1YWQ5OFx1YWQ5OVx1YWQ5YVx1YWQ5Ylx1YWQ5ZVx1YWQ5Zlx1YWRhMFx1YWRh''@;'; put 'put ''MVx1YWRhMlx1YWRhM1x1YWRhNVx1YWRhNlx1YWRhN1x1YWRhOFx1YWRhOVx1YWRhYVx1YWRhYlx1YWRhY1x1YWRhZFx1YWRhZVx1YWRhZlx1YWRiMFx1YWRiMVx1YWRiMlx1YWRiM1x1YWRiNFx1YWRiNVx1YWRiNlx1YWRiOFx1YWRiOVx1YWRiYVx1YWRiYlx1YWRiY1x1YWRiZFx1YWRiZVx1''@;'; put 'put ''YWRiZlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOVx1YWRjYVx1YWRjYlx1YWRjY1x1YWRjZFx1YWRjZVx1YWRjZlx1YWRkMlx1YWRkNFx1YWRkNVx1YWRkNlx1YWRkN1x1YWRkOFx1YWRkOVx1YWRkYVx1YWRkYlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRl''@;'; put 'put ''M1x1YWRlNVx1YWRlNlx1YWRlN1x1YWRlOFx1YWRlOVx1YWRlYVx1YWRlYlx1YWRlY1x1YWRlZFx1YWRlZVx1YWRlZlx1YWRmMFx1YWRmMVx1YWRmMlx1YWRmM1x1YWRmNFx1YWRmNVx1YWRmNlx1YWRmN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMF0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMF1bZ11dPTMzMjgwK2cseVszMzI4MCtnXT1fWzEzMF1bZ10pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWRmYVx1YWRmYlx1YWRmZFx1YWRm''@;'; put 'put ''ZVx1YWUwMlx1YWUwM1x1YWUwNFx1YWUwNVx1YWUwNlx1YWUwN1x1YWUwYVx1YWUwY1x1YWUwZVx1YWUwZlx1YWUxMFx1YWUxMVx1YWUxMlx1YWUxM1x1YWUxNVx1YWUxNlx1YWUxN1x1YWUxOFx1YWUxOVx1YWUxYVx1YWUxYlx1YWUxY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1YWUxZFx1YWUxZVx1YWUxZlx1YWUyMFx1YWUyMVx1YWUyMlx1YWUyM1x1YWUyNFx1YWUyNVx1YWUyNlx1YWUyN1x1YWUyOFx1YWUyOVx1YWUyYVx1YWUyYlx1YWUyY1x1YWUyZFx1YWUyZVx1YWUyZlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzY1x1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1YWU1M1x1YWU1NVx1YWU1N1x1YWU1OFx1YWU1OVx1YWU1YVx1YWU1Ylx1YWU1ZVx1YWU2Mlx1YWU2M1x1''@;'; put 'put ''YWU2NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1YWU2Zlx1YWU3MVx1YWU3Mlx1YWU3M1x1YWU3NFx1YWU3NVx1YWU3Nlx1YWU3N1x1YWU3YVx1YWU3ZVx1YWU3Zlx1YWU4MFx1YWU4MVx1YWU4Mlx1YWU4M1x1YWU4Nlx1YWU4N1x1YWU4OFx1YWU4OVx1YWU4YVx1YWU4''@;'; put 'put ''Ylx1YWU4ZFx1YWU4ZVx1YWU4Zlx1YWU5MFx1YWU5MVx1YWU5Mlx1YWU5M1x1YWU5NFx1YWU5NVx1YWU5Nlx1YWU5N1x1YWU5OFx1YWU5OVx1YWU5YVx1YWU5Ylx1YWU5Y1x1YWU5ZFx1YWU5ZVx1YWU5Zlx1YWVhMFx1YWVhMVx1YWVhMlx1YWVhM1x1YWVhNFx1YWVhNVx1YWVhNlx1YWVhN1x1''@;'; put 'put ''YWVhOFx1YWVhOVx1YWVhYVx1YWVhYlx1YWVhY1x1YWVhZFx1YWVhZVx1YWVhZlx1YWViMFx1YWViMVx1YWViMlx1YWViM1x1YWViNFx1YWViNVx1YWViNlx1YWViN1x1YWViOFx1YWViOVx1YWViYVx1YWViYlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNVx1YWVjNlx1YWVjN1x1YWVj''@;'; put 'put ''OFx1YWVjOVx1YWVjYVx1YWVjYlx1YWVjZVx1YWVkMlx1YWVkM1x1YWVkNFx1YWVkNVx1YWVkNlx1YWVkN1x1YWVkYVx1YWVkYlx1YWVkZFx1YWVkZVx1YWVkZlx1YWVlMFx1YWVlMVx1YWVlMlx1YWVlM1x1YWVlNFx1YWVlNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzMV0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMV1bZ11dPTMzNTM2K2cseVszMzUzNitnXT1fWzEzMV1bZ10pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWVlNlx1YWVl''@;'; put 'put ''N1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZVx1YWVlZlx1YWVmMFx1YWVmMVx1YWVmMlx1YWVmM1x1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZFx1YWVmZVx1YWVmZlx1YWYwMFx1YWYwMVx1YWYwMlx1YWYwM1x1YWYwNFx1YWYwNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYwZlx1YWYxMVx1YWYxMlx1YWYxM1x1YWYxNFx1YWYxNVx1YWYxNlx1YWYxN1x1YWYxOFx1YWYxOVx1YWYxYVx1YWYxYlx1YWYxY1x1YWYxZFx1YWYxZVx1YWYxZlx1YWYyMFx1YWYyMVx1YWYy''@;'; put 'put ''Mlx1YWYyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYyNFx1YWYyNVx1YWYyNlx1YWYyN1x1YWYyOFx1YWYyOVx1YWYyYVx1YWYyYlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYzNVx1YWYzNlx1YWYzN1x1YWYzOFx1YWYzOVx1YWYzYVx1YWYzYlx1YWYzZVx1''@;'; put 'put ''YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YVx1YWY0Ylx1YWY0Y1x1YWY0ZFx1YWY0ZVx1YWY0Zlx1YWY1MVx1YWY1Mlx1YWY1M1x1YWY1NFx1YWY1NVx1YWY1Nlx1YWY1N1x1YWY1OFx1YWY1OVx1YWY1YVx1YWY1Ylx1YWY1ZVx1YWY1Zlx1YWY2MFx1YWY2MVx1YWY2Mlx1YWY2''@;'; put 'put ''M1x1YWY2Nlx1YWY2N1x1YWY2OFx1YWY2OVx1YWY2YVx1YWY2Ylx1YWY2Y1x1YWY2ZFx1YWY2ZVx1YWY2Zlx1YWY3MFx1YWY3MVx1YWY3Mlx1YWY3M1x1YWY3NFx1YWY3NVx1YWY3Nlx1YWY3N1x1YWY3OFx1YWY3YVx1YWY3Ylx1YWY3Y1x1YWY3ZFx1YWY3ZVx1YWY3Zlx1YWY4MVx1YWY4Mlx1''@;'; put 'put ''YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OVx1YWY4YVx1YWY4Ylx1YWY4Y1x1YWY4ZFx1YWY4ZVx1YWY4Zlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5Nlx1YWY5N1x1YWY5OFx1YWY5OVx1YWY5YVx1YWY5Ylx1YWY5ZFx1YWY5ZVx1YWY5Zlx1YWZhMFx1YWZhMVx1YWZhMlx1YWZhM1x1YWZh''@;'; put 'put ''NFx1YWZhNVx1YWZhNlx1YWZhN1x1YWZhOFx1YWZhOVx1YWZhYVx1YWZhYlx1YWZhY1x1YWZhZFx1YWZhZVx1YWZhZlx1YWZiMFx1YWZiMVx1YWZiMlx1YWZiM1x1YWZiNFx1YWZiNVx1YWZiNlx1YWZiN1x1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzEzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMl1bZ11dPTMzNzkyK2cseVszMzc5MitnXT1fWzEzMl1bZ10pO2ZvcihfWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1YWZiZlx1YWZjMVx1YWZjMlx1YWZjM1x1YWZjNFx1YWZjNVx1YWZjNlx1YWZjYVx1YWZjY1x1YWZjZlx1YWZkMFx1YWZkMVx1YWZkMlx1YWZkM1x1YWZkNVx1YWZkNlx1YWZkN1x1YWZkOFx1YWZkOVx1YWZkYVx1YWZkYlx1YWZkZFx1YWZkZVx1YWZkZlx1YWZlMFx1YWZlMVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZlMlx1YWZlM1x1YWZlNFx1YWZlNVx1YWZlNlx1YWZlN1x1YWZlYVx1YWZlYlx1YWZlY1x1YWZlZFx1YWZlZVx1YWZlZlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOVx1YWZmYVx1YWZmYlx1YWZmY1x1YWZmZFx1YWZm''@;'; put 'put ''ZVx1YWZmZlx1YjAwMlx1YjAwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjAwNVx1YjAwNlx1YjAwN1x1YjAwOFx1YjAwOVx1YjAwYVx1YjAwYlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAxNVx1YjAxNlx1YjAxN1x1YjAxOFx1YjAxOVx1''@;'; put 'put ''YjAxYVx1YjAxYlx1YjAxZVx1YjAxZlx1YjAyMFx1YjAyMVx1YjAyMlx1YjAyM1x1YjAyNFx1YjAyNVx1YjAyNlx1YjAyN1x1YjAyOVx1YjAyYVx1YjAyYlx1YjAyY1x1YjAyZFx1YjAyZVx1YjAyZlx1YjAzMFx1YjAzMVx1YjAzMlx1YjAzM1x1YjAzNFx1YjAzNVx1YjAzNlx1YjAzN1x1YjAz''@;'; put 'put ''OFx1YjAzOVx1YjAzYVx1YjAzYlx1YjAzY1x1YjAzZFx1YjAzZVx1YjAzZlx1YjA0MFx1YjA0MVx1YjA0Mlx1YjA0M1x1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZVx1YjA1Zlx1''@;'; put 'put ''YjA2MFx1YjA2MVx1YjA2Mlx1YjA2M1x1YjA2NFx1YjA2NVx1YjA2Nlx1YjA2N1x1YjA2OFx1YjA2OVx1YjA2YVx1YjA2Ylx1YjA2Y1x1YjA2ZFx1YjA2ZVx1YjA2Zlx1YjA3MFx1YjA3MVx1YjA3Mlx1YjA3M1x1YjA3NFx1YjA3NVx1YjA3Nlx1YjA3N1x1YjA3OFx1YjA3OVx1YjA3YVx1YjA3''@;'; put 'put ''Ylx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NVx1YjA4Nlx1YjA4N1x1YjA4OFx1YjA4OVx1YjA4YVx1YjA4Ylx1YjA4ZVx1YjA5MFx1YjA5Mlx1YjA5M1x1YjA5NFx1YjA5NVx1YjA5Nlx1YjA5N1x1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzEzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzM11bZ11dPTM0MDQ4K2cseVszNDA0OCtnXT1fWzEzM11bZ10pO2ZvcihfWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1YjBhNVx1YjBhNlx1YjBhN1x1YjBhYVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBiYlx1YjBiZFx1YjBiZVx1YjBiZlx1YjBjMFx1YjBjMVx1YjBjMlx1YjBjM1x1YjBjNlx1YjBjYVx1YjBjYlx1YjBjY1x1YjBjZFx1YjBjZVx1YjBjZlx1''@;'; put 'put ''YjBkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOVx1YjBkYVx1YjBkYlx1YjBkY1x1YjBkZFx1YjBkZVx1YjBkZlx1YjBlMVx1YjBlMlx1YjBlM1x1YjBlNFx1YjBlNlx1YjBlN1x1YjBlOFx1YjBlOVx1YjBlYVx1YjBl''@;'; put 'put ''Ylx1YjBlY1x1YjBlZFx1YjBlZVx1YjBlZlx1YjBmMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBmMVx1YjBmMlx1YjBmM1x1YjBmNFx1YjBmNVx1YjBmNlx1YjBmN1x1YjBmOFx1YjBmOVx1YjBmYVx1YjBmYlx1YjBmY1x1YjBmZFx1YjBmZVx1YjBmZlx1YjEwMFx1''@;'; put 'put ''YjEwMVx1YjEwMlx1YjEwM1x1YjEwNFx1YjEwNVx1YjEwNlx1YjEwN1x1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZVx1YjExZlx1YjEyMFx1YjEyMVx1YjEyMlx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEyYlx1YjEy''@;'; put 'put ''ZFx1YjEyZVx1YjEyZlx1YjEzMFx1YjEzMVx1YjEzMlx1YjEzM1x1YjEzNlx1YjEzYVx1YjEzYlx1YjEzY1x1YjEzZFx1YjEzZVx1YjEzZlx1YjE0Mlx1YjE0M1x1YjE0NVx1YjE0Nlx1YjE0N1x1YjE0OVx1YjE0YVx1YjE0Ylx1YjE0Y1x1YjE0ZFx1YjE0ZVx1YjE0Zlx1YjE1Mlx1YjE1M1x1''@;'; put 'put ''YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2MVx1YjE2Mlx1YjE2M1x1YjE2NFx1YjE2NVx1YjE2Nlx1YjE2N1x1YjE2OFx1YjE2OVx1YjE2YVx1YjE2Ylx1YjE2Y1x1YjE2ZFx1YjE2ZVx1YjE2Zlx1YjE3MFx1YjE3MVx1YjE3Mlx1YjE3M1x1YjE3''@;'; put 'put ''NFx1YjE3NVx1YjE3Nlx1YjE3N1x1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4M1x1YjE4NFx1YjE4NVx1YjE4Nlx1YjE4N1x1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5Ylx1YjE5ZFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNF1bZ11dPTM0MzA0K2cseVszNDMwNCtnXT1fWzEzNF1bZ10pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjE5ZVx1YjE5Zlx1YjFhMFx1YjFhMVx1YjFhMlx1YjFhM1x1YjFhNFx1YjFhNVx1YjFhNlx1YjFhN1x1YjFhOVx1YjFhYVx1YjFhYlx1YjFhY1x1YjFhZFx1YjFhZVx1YjFhZlx1YjFiMFx1YjFiMVx1YjFiMlx1YjFiM1x1YjFiNFx1YjFiNVx1''@;'; put 'put ''YjFiNlx1YjFiN1x1YjFiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFiOVx1YjFiYVx1YjFiYlx1YjFiY1x1YjFiZFx1YjFiZVx1YjFiZlx1YjFjMFx1YjFjMVx1YjFjMlx1YjFjM1x1YjFjNFx1YjFjNVx1YjFjNlx1YjFjN1x1YjFjOFx1YjFjOVx1YjFjYVx1YjFj''@;'; put 'put ''Ylx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFkNlx1YjFkN1x1YjFkOFx1YjFkOVx1YjFkYVx1YjFkYlx1YjFkZVx1YjFlMFx1YjFlMVx1YjFlMlx1YjFlM1x1YjFlNFx1YjFlNVx1YjFlNlx1''@;'; put 'put ''YjFlN1x1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMVx1YjFmMlx1YjFmM1x1YjFmNFx1YjFmNVx1YjFmNlx1YjFmN1x1YjFmOFx1YjFmYVx1YjFmY1x1YjFmZVx1YjFmZlx1YjIwMFx1YjIwMVx1YjIwMlx1YjIwM1x1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZFx1YjIw''@;'; put 'put ''ZVx1YjIwZlx1YjIxMFx1YjIxMVx1YjIxMlx1YjIxM1x1YjIxNlx1YjIxOFx1YjIxYVx1YjIxYlx1YjIxY1x1YjIxZFx1YjIxZVx1YjIxZlx1YjIyMVx1YjIyMlx1YjIyM1x1YjIyNFx1YjIyNVx1YjIyNlx1YjIyN1x1YjIyOFx1YjIyOVx1YjIyYVx1YjIyYlx1YjIyY1x1YjIyZFx1YjIyZVx1''@;'; put 'put ''YjIyZlx1YjIzMFx1YjIzMVx1YjIzMlx1YjIzM1x1YjIzNVx1YjIzNlx1YjIzN1x1YjIzOFx1YjIzOVx1YjIzYVx1YjIzYlx1YjIzZFx1YjIzZVx1YjIzZlx1YjI0MFx1YjI0MVx1YjI0Mlx1YjI0M1x1YjI0NFx1YjI0NVx1YjI0Nlx1YjI0N1x1YjI0OFx1YjI0OVx1YjI0YVx1YjI0Ylx1YjI0''@;'; put 'put ''Y1x1YjI0ZFx1YjI0ZVx1YjI0Zlx1YjI1MFx1YjI1MVx1YjI1Mlx1YjI1M1x1YjI1NFx1YjI1NVx1YjI1Nlx1YjI1N1x1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MVx1YjI2Mlx1YjI2M1x1YjI2NFx1YjI2NVx1YjI2Nlx1YjI2N1x1YjI2YVx1YjI2Ylx1YjI2Y1x1''@;'; put 'put ''YjI2ZFx1YjI2ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNV1bZ11dPTM0NTYwK2cseVszNDU2MCtnXT1fWzEzNV1bZ10pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI2Zlx1YjI3MFx1YjI3MVx1YjI3Mlx1YjI3M1x1YjI3Nlx1YjI3N1x1YjI3OFx1YjI3OVx1YjI3YVx1YjI3Ylx1YjI3ZFx1YjI3ZVx1YjI3Zlx1YjI4MFx1YjI4MVx1YjI4Mlx1YjI4M1x1YjI4Nlx1YjI4N1x1YjI4OFx1''@;'; put 'put ''YjI4YVx1YjI4Ylx1YjI4Y1x1YjI4ZFx1YjI4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5Ylx1YjI5Y1x1YjI5ZFx1YjI5ZVx1YjI5Zlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJh''@;'; put 'put ''Ylx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjJiOFx1YjJiOVx1YjJiYVx1YjJiYlx1YjJiY1x1YjJiZFx1YjJiZVx1YjJiZlx1YjJjMFx1YjJjMVx1YjJjMlx1YjJjM1x1''@;'; put 'put ''YjJjNFx1YjJjNVx1YjJjNlx1YjJjN1x1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkM1x1YjJkNFx1YjJkNVx1YjJkNlx1YjJkN1x1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJm''@;'; put 'put ''Mlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOVx1YjMwYVx1YjMwYlx1YjMwY1x1YjMwZFx1YjMwZVx1YjMwZlx1YjMxMlx1YjMxNlx1YjMxN1x1YjMxOFx1YjMxOVx1YjMxYVx1YjMxYlx1YjMxZFx1YjMxZVx1YjMxZlx1YjMyMFx1''@;'; put 'put ''YjMyMVx1YjMyMlx1YjMyM1x1YjMyNFx1YjMyNVx1YjMyNlx1YjMyN1x1YjMyOFx1YjMyOVx1YjMyYVx1YjMyYlx1YjMyY1x1YjMyZFx1YjMyZVx1YjMyZlx1YjMzMFx1YjMzMVx1YjMzMlx1YjMzM1x1YjMzNFx1YjMzNVx1YjMzNlx1YjMzN1x1YjMzOFx1YjMzOVx1YjMzYVx1YjMzYlx1YjMz''@;'; put 'put ''Y1x1YjMzZFx1YjMzZVx1YjMzZlx1YjM0MFx1YjM0MVx1YjM0Mlx1YjM0M1x1YjM0NFx1YjM0NVx1YjM0Nlx1YjM0N1x1YjM0OFx1YjM0OVx1YjM0YVx1YjM0Ylx1YjM0Y1x1YjM0ZFx1YjM0ZVx1YjM0Zlx1YjM1MFx1YjM1MVx1YjM1Mlx1YjM1M1x1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1''@;'; put 'put ''YjM2MFx1YjM2MVx1YjM2Mlx1YjM2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNl1bZ11dPTM0ODE2K2cseVszNDgxNitnXT1fWzEzNl1bZ10pO2ZvcihfWzEzN109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OVx1YjM3YVx1YjM3Ylx1YjM3Y1x1YjM3ZFx1YjM3ZVx1YjM3Zlx1YjM4Mlx1''@;'; put 'put ''YjM4Nlx1YjM4N1x1YjM4OFx1YjM4OVx1YjM4YVx1YjM4Ylx1YjM4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NVx1YjM5Nlx1YjM5N1x1YjM5OFx1YjM5OVx1YjM5YVx1YjM5Ylx1YjM5Y1x1YjM5ZFx1YjM5''@;'; put 'put ''ZVx1YjM5Zlx1YjNhMlx1YjNhM1x1YjNhNFx1YjNhNVx1YjNhNlx1YjNhN1x1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjNhZVx1YjNhZlx1YjNiMFx1YjNiMVx1YjNiMlx1YjNiM1x1YjNiNFx1YjNiNVx1YjNiNlx1YjNiN1x1''@;'; put 'put ''YjNiOFx1YjNiOVx1YjNiYVx1YjNiYlx1YjNiY1x1YjNiZFx1YjNiZVx1YjNiZlx1YjNjMFx1YjNjMVx1YjNjMlx1YjNjM1x1YjNjNlx1YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1YjNkZlx1YjNl''@;'; put 'put ''MVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOVx1YjNlYVx1YjNlYlx1YjNlY1x1YjNlZFx1YjNlZVx1YjNlZlx1YjNmMFx1YjNmMVx1YjNmMlx1YjNmM1x1YjNmNFx1YjNmNVx1YjNmNlx1YjNmN1x1YjNmOFx1YjNmOVx1YjNmYVx1YjNmYlx1YjNmZFx1YjNmZVx1YjNmZlx1''@;'; put 'put ''YjQwMFx1YjQwMVx1YjQwMlx1YjQwM1x1YjQwNFx1YjQwNVx1YjQwNlx1YjQwN1x1YjQwOFx1YjQwOVx1YjQwYVx1YjQwYlx1YjQwY1x1YjQwZFx1YjQwZVx1YjQwZlx1YjQxMVx1YjQxMlx1YjQxM1x1YjQxNFx1YjQxNVx1YjQxNlx1YjQxN1x1YjQxOVx1YjQxYVx1YjQxYlx1YjQxZFx1YjQx''@;'; put 'put ''ZVx1YjQxZlx1YjQyMVx1YjQyMlx1YjQyM1x1YjQyNFx1YjQyNVx1YjQyNlx1YjQyN1x1YjQyYVx1YjQyY1x1YjQyZFx1YjQyZVx1YjQyZlx1YjQzMFx1YjQzMVx1YjQzMlx1YjQzM1x1YjQzNVx1YjQzNlx1YjQzN1x1YjQzOFx1YjQzOVx1YjQzYVx1YjQzYlx1YjQzY1x1YjQzZFx1YjQzZVx1''@;'; put 'put ''YjQzZlx1YjQ0MFx1YjQ0MVx1YjQ0Mlx1YjQ0M1x1YjQ0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzN11bZ11dPTM1MDcyK2cseVszNTA3MitnXT1fWzEzN11bZ10pO2ZvcihfWzEzOF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ0NVx1YjQ0Nlx1YjQ0N1x1YjQ0OFx1YjQ0OVx1YjQ0YVx1YjQ0Ylx1YjQ0Y1x1YjQ0ZFx1YjQ0ZVx1YjQ0Zlx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OVx1''@;'; put 'put ''YjQ1YVx1YjQ1Ylx1YjQ1Y1x1YjQ1ZFx1YjQ1ZVx1YjQ1Zlx1YjQ2Mlx1YjQ2NFx1YjQ2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ2N1x1YjQ2OFx1YjQ2OVx1YjQ2YVx1YjQ2Ylx1YjQ2ZFx1YjQ2ZVx1YjQ2Zlx1YjQ3MFx1YjQ3MVx1YjQ3Mlx1YjQ3M1x1YjQ3''@;'; put 'put ''NFx1YjQ3NVx1YjQ3Nlx1YjQ3N1x1YjQ3OFx1YjQ3OVx1YjQ3YVx1YjQ3Ylx1YjQ3Y1x1YjQ3ZFx1YjQ3ZVx1YjQ3Zlx1YjQ4MVx1YjQ4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ4M1x1YjQ4NFx1YjQ4NVx1YjQ4Nlx1YjQ4N1x1YjQ4OVx1YjQ4YVx1YjQ4Ylx1''@;'; put 'put ''YjQ4Y1x1YjQ4ZFx1YjQ4ZVx1YjQ4Zlx1YjQ5MFx1YjQ5MVx1YjQ5Mlx1YjQ5M1x1YjQ5NFx1YjQ5NVx1YjQ5Nlx1YjQ5N1x1YjQ5OFx1YjQ5OVx1YjQ5YVx1YjQ5Ylx1YjQ5Y1x1YjQ5ZVx1YjQ5Zlx1YjRhMFx1YjRhMVx1YjRhMlx1YjRhM1x1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRh''@;'; put 'put ''YVx1YjRhYlx1YjRhZFx1YjRhZVx1YjRhZlx1YjRiMFx1YjRiMVx1YjRiMlx1YjRiM1x1YjRiNFx1YjRiNlx1YjRiOFx1YjRiYVx1YjRiYlx1YjRiY1x1YjRiZFx1YjRiZVx1YjRiZlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOVx1YjRjYVx1YjRjYlx1YjRjY1x1''@;'; put 'put ''YjRjZFx1YjRjZVx1YjRjZlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNlx1YjRkN1x1YjRkOFx1YjRkOVx1YjRkYVx1YjRkYlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlN1x1YjRlOFx1YjRlOVx1YjRlYVx1YjRlYlx1YjRlZVx1YjRmMFx1YjRmMlx1YjRmM1x1YjRm''@;'; put 'put ''NFx1YjRmNVx1YjRmNlx1YjRmN1x1YjRmOVx1YjRmYVx1YjRmYlx1YjRmY1x1YjRmZFx1YjRmZVx1YjRmZlx1YjUwMFx1YjUwMVx1YjUwMlx1YjUwM1x1YjUwNFx1YjUwNVx1YjUwNlx1YjUwN1x1YjUwOFx1YjUwOVx1YjUwYVx1YjUwYlx1YjUwY1x1YjUwZFx1YjUwZVx1YjUwZlx1YjUxMFx1''@;'; put 'put ''YjUxMVx1YjUxMlx1YjUxM1x1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOF1bZ11dPTM1MzI4K2cseVszNTMyOCtnXT1fWzEzOF1bZ10p''@;'; put 'put ''O2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjUxZVx1YjUxZlx1YjUyMFx1YjUyMVx1YjUyMlx1YjUyM1x1YjUyNlx1YjUyYlx1YjUyY1x1YjUyZFx1YjUyZVx1YjUyZlx1YjUzMlx1YjUzM1x1YjUzNVx1''@;'; put 'put ''YjUzNlx1YjUzN1x1YjUzOVx1YjUzYVx1YjUzYlx1YjUzY1x1YjUzZFx1YjUzZVx1YjUzZlx1YjU0Mlx1YjU0Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NVx1YjU1''@;'; put 'put ''Nlx1YjU1N1x1YjU1OFx1YjU1OVx1YjU1YVx1YjU1Ylx1YjU1ZVx1YjU2Mlx1YjU2M1x1YjU2NFx1YjU2NVx1YjU2Nlx1YjU2N1x1YjU2OFx1YjU2OVx1YjU2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU2Ylx1YjU2Y1x1YjU2ZFx1YjU2ZVx1YjU2Zlx1YjU3MFx1''@;'; put 'put ''YjU3MVx1YjU3Mlx1YjU3M1x1YjU3NFx1YjU3NVx1YjU3Nlx1YjU3N1x1YjU3OFx1YjU3OVx1YjU3YVx1YjU3Ylx1YjU3Y1x1YjU3ZFx1YjU3ZVx1YjU3Zlx1YjU4MFx1YjU4MVx1YjU4Mlx1YjU4M1x1YjU4NFx1YjU4NVx1YjU4Nlx1YjU4N1x1YjU4OFx1YjU4OVx1YjU4YVx1YjU4Ylx1YjU4''@;'; put 'put ''Y1x1YjU4ZFx1YjU4ZVx1YjU4Zlx1YjU5MFx1YjU5MVx1YjU5Mlx1YjU5M1x1YjU5NFx1YjU5NVx1YjU5Nlx1YjU5N1x1YjU5OFx1YjU5OVx1YjU5YVx1YjU5Ylx1YjU5Y1x1YjU5ZFx1YjU5ZVx1YjU5Zlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVhY1x1YjVhZFx1''@;'; put 'put ''YjVhZVx1YjVhZlx1YjViMlx1YjViNlx1YjViN1x1YjViOFx1YjViOVx1YjViYVx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1YjVjNVx1YjVjNlx1YjVjN1x1YjVjOFx1YjVjOVx1YjVjYVx1YjVjYlx1YjVjZVx1YjVkMlx1YjVkM1x1YjVkNFx1YjVkNVx1YjVkNlx1YjVkN1x1YjVk''@;'; put 'put ''OVx1YjVkYVx1YjVkYlx1YjVkY1x1YjVkZFx1YjVkZVx1YjVkZlx1YjVlMFx1YjVlMVx1YjVlMlx1YjVlM1x1YjVlNFx1YjVlNVx1YjVlNlx1YjVlN1x1YjVlOFx1YjVlOVx1YjVlYVx1YjVlYlx1YjVlZFx1YjVlZVx1YjVlZlx1YjVmMFx1YjVmMVx1YjVmMlx1YjVmM1x1YjVmNFx1YjVmNVx1''@;'; put 'put ''YjVmNlx1YjVmN1x1YjVmOFx1YjVmOVx1YjVmYVx1YjVmYlx1YjVmY1x1YjVmZFx1YjVmZVx1YjVmZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzEzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOV1bZ11dPTM1NTg0K2cseVszNTU4NCtn''@;'; put 'put ''XT1fWzEzOV1bZ10pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYwMFx1YjYwMVx1YjYwMlx1YjYwM1x1YjYwNFx1YjYwNVx1YjYwNlx1YjYwN1x1YjYwOFx1YjYwOVx1YjYwYVx1YjYwYlx1YjYwY1x1''@;'; put 'put ''YjYwZFx1YjYwZVx1YjYwZlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYxNlx1YjYxN1x1YjYxOVx1YjYxYVx1YjYxYlx1YjYxY1x1YjYxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYxZVx1YjYxZlx1YjYyMFx1YjYyMVx1YjYyMlx1YjYyM1x1YjYyNFx1YjYyNlx1YjYy''@;'; put 'put ''N1x1YjYyOFx1YjYyOVx1YjYyYVx1YjYyYlx1YjYyZFx1YjYyZVx1YjYyZlx1YjYzMFx1YjYzMVx1YjYzMlx1YjYzM1x1YjYzNVx1YjYzNlx1YjYzN1x1YjYzOFx1YjYzOVx1YjYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYzYlx1YjYzY1x1YjYzZFx1YjYzZVx1''@;'; put 'put ''YjYzZlx1YjY0MFx1YjY0MVx1YjY0Mlx1YjY0M1x1YjY0NFx1YjY0NVx1YjY0Nlx1YjY0N1x1YjY0OVx1YjY0YVx1YjY0Ylx1YjY0Y1x1YjY0ZFx1YjY0ZVx1YjY0Zlx1YjY1MFx1YjY1MVx1YjY1Mlx1YjY1M1x1YjY1NFx1YjY1NVx1YjY1Nlx1YjY1N1x1YjY1OFx1YjY1OVx1YjY1YVx1YjY1''@;'; put 'put ''Ylx1YjY1Y1x1YjY1ZFx1YjY1ZVx1YjY1Zlx1YjY2MFx1YjY2MVx1YjY2Mlx1YjY2M1x1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OVx1YjY2YVx1YjY2Ylx1YjY2Y1x1YjY2ZFx1YjY2ZVx1YjY2Zlx1YjY3MFx1YjY3MVx1YjY3Mlx1YjY3M1x1YjY3NFx1YjY3NVx1YjY3Nlx1YjY3N1x1YjY3OFx1''@;'; put 'put ''YjY3OVx1YjY3YVx1YjY3Ylx1YjY3Y1x1YjY3ZFx1YjY3ZVx1YjY3Zlx1YjY4MFx1YjY4MVx1YjY4Mlx1YjY4M1x1YjY4NFx1YjY4NVx1YjY4Nlx1YjY4N1x1YjY4OFx1YjY4OVx1YjY4YVx1YjY4Ylx1YjY4Y1x1YjY4ZFx1YjY4ZVx1YjY4Zlx1YjY5MFx1YjY5MVx1YjY5Mlx1YjY5M1x1YjY5''@;'; put 'put ''NFx1YjY5NVx1YjY5Nlx1YjY5N1x1YjY5OFx1YjY5OVx1YjY5YVx1YjY5Ylx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZhNVx1YjZhNlx1YjZhN1x1YjZhOFx1YjZhOVx1YjZhYVx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMlx1YjZiM1x1YjZiNFx1YjZiNVx1YjZiNlx1''@;'; put 'put ''YjZiN1x1YjZiOFx1YjZiOVx1YjZiYVx1YjZiYlx1YjZiY1x1YjZiZFx1YjZiZVx1YjZiZlx1YjZjMFx1YjZjMVx1YjZjMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0MF1bZ11dPTM1ODQw''@;'; put 'put ''K2cseVszNTg0MCtnXT1fWzE0MF1bZ10pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZjM1x1YjZjNFx1YjZjNVx1YjZjNlx1YjZjN1x1YjZjOFx1YjZjOVx1YjZjYVx1YjZjYlx1YjZjY1x1YjZjZFx1''@;'; put 'put ''YjZjZVx1YjZjZlx1YjZkMFx1YjZkMVx1YjZkMlx1YjZkM1x1YjZkNVx1YjZkNlx1YjZkN1x1YjZkOFx1YjZkOVx1YjZkYVx1YjZkYlx1YjZkY1x1YjZkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZkZVx1YjZkZlx1YjZlMFx1YjZlMVx1YjZlMlx1YjZlM1x1YjZl''@;'; put 'put ''NFx1YjZlNVx1YjZlNlx1YjZlN1x1YjZlOFx1YjZlOVx1YjZlYVx1YjZlYlx1YjZlY1x1YjZlZFx1YjZlZVx1YjZlZlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZmYlx1YjZmY1x1''@;'; put 'put ''YjZmZFx1YjZmZVx1YjZmZlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNlx1YjcwN1x1YjcwOFx1YjcwOVx1YjcwYVx1YjcwYlx1YjcwY1x1YjcwZFx1YjcwZVx1YjcwZlx1YjcxMFx1YjcxMVx1YjcxMlx1YjcxM1x1YjcxNFx1YjcxNVx1YjcxNlx1YjcxN1x1YjcxOFx1YjcxOVx1YjcxYVx1Yjcx''@;'; put 'put ''Ylx1YjcxY1x1YjcxZFx1YjcxZVx1YjcxZlx1YjcyMFx1YjcyMVx1YjcyMlx1YjcyM1x1YjcyNFx1YjcyNVx1YjcyNlx1YjcyN1x1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMVx1YjczMlx1YjczM1x1YjczNFx1YjczNVx1YjczNlx1YjczN1x1YjczYVx1YjczY1x1YjczZFx1YjczZVx1''@;'; put 'put ''YjczZlx1Yjc0MFx1Yjc0MVx1Yjc0Mlx1Yjc0M1x1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZFx1Yjc0ZVx1Yjc0Zlx1Yjc1MFx1Yjc1MVx1Yjc1Mlx1Yjc1M1x1Yjc1Nlx1Yjc1N1x1Yjc1OFx1Yjc1OVx1Yjc1YVx1Yjc1Ylx1Yjc1Y1x1Yjc1ZFx1Yjc1ZVx1Yjc1''@;'; put 'put ''Zlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OVx1Yjc2YVx1Yjc2Ylx1Yjc2Y1x1Yjc2ZFx1Yjc2ZVx1Yjc2Zlx1Yjc3Mlx1Yjc3NFx1Yjc3Nlx1Yjc3N1x1Yjc3OFx1Yjc3OVx1Yjc3YVx1Yjc3Ylx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NVx1''@;'; put 'put ''Yjc4Nlx1Yjc4N1x1Yjc4OFx1Yjc4OVx1Yjc4YVx1Yjc4Ylx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0''@;'; put 'put ''MV1bZ11dPTM2MDk2K2cseVszNjA5NitnXT1fWzE0MV1bZ10pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjc5Zlx1YjdhMVx1YjdhMlx1YjdhM1x1YjdhNFx1YjdhNVx1YjdhNlx1YjdhN1x1YjdhYVx1''@;'; put 'put ''YjdhZVx1YjdhZlx1YjdiMFx1YjdiMVx1YjdiMlx1YjdiM1x1YjdiNlx1YjdiN1x1YjdiOVx1YjdiYVx1YjdiYlx1YjdiY1x1YjdiZFx1YjdiZVx1YjdiZlx1YjdjMFx1YjdjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdjMlx1YjdjM1x1YjdjNFx1YjdjNVx1Yjdj''@;'; put 'put ''Nlx1YjdjOFx1YjdjYVx1YjdjYlx1YjdjY1x1YjdjZFx1YjdjZVx1YjdjZlx1YjdkMFx1YjdkMVx1YjdkMlx1YjdkM1x1YjdkNFx1YjdkNVx1YjdkNlx1YjdkN1x1YjdkOFx1YjdkOVx1YjdkYVx1YjdkYlx1YjdkY1x1YjdkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''YjdkZVx1YjdkZlx1YjdlMFx1YjdlMVx1YjdlMlx1YjdlM1x1YjdlNFx1YjdlNVx1YjdlNlx1YjdlN1x1YjdlOFx1YjdlOVx1YjdlYVx1YjdlYlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNVx1YjdmNlx1YjdmN1x1YjdmOFx1YjdmOVx1YjdmYVx1YjdmYlx1YjdmZVx1Yjgw''@;'; put 'put ''Mlx1YjgwM1x1YjgwNFx1YjgwNVx1YjgwNlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMVx1YjgxMlx1YjgxM1x1YjgxNFx1YjgxNVx1YjgxNlx1YjgxN1x1YjgxYVx1YjgxY1x1YjgxZVx1YjgxZlx1YjgyMFx1YjgyMVx1YjgyMlx1YjgyM1x1YjgyNlx1YjgyN1x1YjgyOVx1''@;'; put 'put ''YjgyYVx1YjgyYlx1YjgyZFx1YjgyZVx1YjgyZlx1YjgzMFx1YjgzMVx1YjgzMlx1YjgzM1x1YjgzNlx1YjgzYVx1YjgzYlx1YjgzY1x1YjgzZFx1YjgzZVx1YjgzZlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NVx1Yjg0Nlx1Yjg0N1x1Yjg0OFx1Yjg0OVx1Yjg0YVx1Yjg0Ylx1Yjg0Y1x1Yjg0''@;'; put 'put ''ZFx1Yjg0ZVx1Yjg0Zlx1Yjg1MFx1Yjg1Mlx1Yjg1NFx1Yjg1NVx1Yjg1Nlx1Yjg1N1x1Yjg1OFx1Yjg1OVx1Yjg1YVx1Yjg1Ylx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NVx1Yjg2Nlx1Yjg2N1x1Yjg2OFx1Yjg2OVx1Yjg2YVx1Yjg2Ylx1Yjg2ZVx1Yjg3MFx1Yjg3Mlx1''@;'; put 'put ''Yjg3M1x1Yjg3NFx1Yjg3NVx1Yjg3Nlx1Yjg3N1x1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZFx1Yjg3ZVx1Yjg3Zlx1Yjg4MFx1Yjg4MVx1Yjg4Mlx1Yjg4M1x1Yjg4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQyXVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE0Ml1bZ11dPTM2MzUyK2cseVszNjM1MitnXT1fWzE0Ml1bZ10pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjg4NVx1Yjg4Nlx1Yjg4N1x1Yjg4OFx1Yjg4OVx1Yjg4YVx1Yjg4Ylx1''@;'; put 'put ''Yjg4Y1x1Yjg4ZVx1Yjg4Zlx1Yjg5MFx1Yjg5MVx1Yjg5Mlx1Yjg5M1x1Yjg5NFx1Yjg5NVx1Yjg5Nlx1Yjg5N1x1Yjg5OFx1Yjg5OVx1Yjg5YVx1Yjg5Ylx1Yjg5Y1x1Yjg5ZFx1Yjg5ZVx1Yjg5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjhhMFx1YjhhMVx1Yjhh''@;'; put 'put ''Mlx1YjhhM1x1YjhhNFx1YjhhNVx1YjhhNlx1YjhhN1x1YjhhOVx1YjhhYVx1YjhhYlx1YjhhY1x1YjhhZFx1YjhhZVx1YjhhZlx1YjhiMVx1YjhiMlx1YjhiM1x1YjhiNVx1YjhiNlx1YjhiN1x1YjhiOVx1YjhiYVx1YjhiYlx1YjhiY1x1YjhiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNlx1YjhjN1x1YjhjOFx1YjhjOVx1YjhjYVx1YjhjYlx1YjhjZFx1YjhjZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNVx1YjhkNlx1YjhkN1x1YjhkOFx1YjhkOVx1YjhkYVx1YjhkYlx1YjhkY1x1YjhkZVx1Yjhl''@;'; put 'put ''MFx1YjhlMlx1YjhlM1x1YjhlNFx1YjhlNVx1YjhlNlx1YjhlN1x1YjhlYVx1YjhlYlx1YjhlZFx1YjhlZVx1YjhlZlx1YjhmMVx1YjhmMlx1YjhmM1x1YjhmNFx1YjhmNVx1YjhmNlx1YjhmN1x1YjhmYVx1YjhmY1x1YjhmZVx1YjhmZlx1YjkwMFx1YjkwMVx1YjkwMlx1YjkwM1x1YjkwNVx1''@;'; put 'put ''YjkwNlx1YjkwN1x1YjkwOFx1YjkwOVx1YjkwYVx1YjkwYlx1YjkwY1x1YjkwZFx1YjkwZVx1YjkwZlx1YjkxMFx1YjkxMVx1YjkxMlx1YjkxM1x1YjkxNFx1YjkxNVx1YjkxNlx1YjkxN1x1YjkxOVx1YjkxYVx1YjkxYlx1YjkxY1x1YjkxZFx1YjkxZVx1YjkxZlx1YjkyMVx1YjkyMlx1Yjky''@;'; put 'put ''M1x1YjkyNFx1YjkyNVx1YjkyNlx1YjkyN1x1YjkyOFx1YjkyOVx1YjkyYVx1YjkyYlx1YjkyY1x1YjkyZFx1YjkyZVx1YjkyZlx1YjkzMFx1YjkzMVx1YjkzMlx1YjkzM1x1YjkzNFx1YjkzNVx1YjkzNlx1YjkzN1x1YjkzOFx1YjkzOVx1YjkzYVx1YjkzYlx1YjkzZVx1YjkzZlx1Yjk0MVx1''@;'; put 'put ''Yjk0Mlx1Yjk0M1x1Yjk0NVx1Yjk0Nlx1Yjk0N1x1Yjk0OFx1Yjk0OVx1Yjk0YVx1Yjk0Ylx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1Mlx1Yjk1M1x1Yjk1NFx1Yjk1NVx1Yjk1Nlx1Yjk1N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQzXVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0M11bZ11dPTM2NjA4K2cseVszNjYwOCtnXT1fWzE0M11bZ10pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1''@;'; put 'put ''Yjk2MVx1Yjk2Mlx1Yjk2M1x1Yjk2NFx1Yjk2NVx1Yjk2Nlx1Yjk2N1x1Yjk2YVx1Yjk2Y1x1Yjk2ZVx1Yjk2Zlx1Yjk3MFx1Yjk3MVx1Yjk3Mlx1Yjk3M1x1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk3''@;'; put 'put ''ZVx1Yjk3Zlx1Yjk4MFx1Yjk4MVx1Yjk4Mlx1Yjk4M1x1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4Zlx1Yjk5MFx1Yjk5MVx1Yjk5Mlx1Yjk5M1x1Yjk5NFx1Yjk5NVx1Yjk5Nlx1Yjk5N1x1Yjk5OFx1Yjk5OVx1Yjk5YVx1Yjk5Ylx1Yjk5Y1x1Yjk5ZFx1Yjk5ZVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk5Zlx1YjlhMFx1YjlhMVx1YjlhMlx1YjlhM1x1YjlhNFx1YjlhNVx1YjlhNlx1YjlhN1x1YjlhOFx1YjlhOVx1YjlhYVx1YjlhYlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNVx1YjliNlx1YjliN1x1YjliOFx1YjliOVx1Yjli''@;'; put 'put ''YVx1YjliYlx1YjliZVx1YjljMFx1YjljMlx1YjljM1x1YjljNFx1YjljNVx1YjljNlx1YjljN1x1YjljYVx1YjljYlx1YjljZFx1YjlkM1x1YjlkNFx1YjlkNVx1YjlkNlx1YjlkN1x1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1''@;'; put 'put ''YjllZFx1YjllZVx1YjllZlx1YjlmMFx1YjlmMVx1YjlmMlx1YjlmM1x1YjlmNlx1YjlmYlx1YjlmY1x1YjlmZFx1YjlmZVx1YjlmZlx1YmEwMlx1YmEwM1x1YmEwNFx1YmEwNVx1YmEwNlx1YmEwN1x1YmEwOVx1YmEwYVx1YmEwYlx1YmEwY1x1YmEwZFx1YmEwZVx1YmEwZlx1YmExMFx1YmEx''@;'; put 'put ''MVx1YmExMlx1YmExM1x1YmExNFx1YmExNlx1YmExN1x1YmExOFx1YmExOVx1YmExYVx1YmExYlx1YmExY1x1YmExZFx1YmExZVx1YmExZlx1YmEyMFx1YmEyMVx1YmEyMlx1YmEyM1x1YmEyNFx1YmEyNVx1YmEyNlx1YmEyN1x1YmEyOFx1YmEyOVx1YmEyYVx1YmEyYlx1YmEyY1x1YmEyZFx1''@;'; put 'put ''YmEyZVx1YmEyZlx1YmEzMFx1YmEzMVx1YmEzMlx1YmEzM1x1YmEzNFx1YmEzNVx1YmEzNlx1YmEzN1x1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0NF0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMTQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NF1bZ11dPTM2ODY0K2cseVszNjg2NCtnXT1fWzE0NF1bZ10pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE0N1x1YmE0YVx1YmE0Y1x1''@;'; put 'put ''YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZFx1YmE1ZVx1YmE1Zlx1YmE2MFx1YmE2MVx1YmE2Mlx1YmE2M1x1YmE2Nlx1YmE2YVx1YmE2Ylx1YmE2Y1x1YmE2ZFx1YmE2ZVx1YmE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OVx1YmE3YVx1YmE3Ylx1YmE3Y1x1YmE3ZFx1YmE3ZVx1YmE3Zlx1YmE4MFx1YmE4MVx1YmE4Mlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZFx1YmE4ZVx1YmE4Zlx1YmE5MFx1YmE5MVx1YmE5Mlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE5M1x1YmE5NFx1YmE5NVx1YmE5Nlx1YmE5N1x1YmE5OFx1YmE5OVx1YmE5YVx1YmE5Ylx1YmE5Y1x1YmE5ZFx1YmE5ZVx1YmE5Zlx1YmFhMFx1YmFhMVx1YmFhMlx1YmFhM1x1YmFhNFx1YmFhNVx1YmFhNlx1YmFhN1x1YmFh''@;'; put 'put ''YVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiM1x1YmFiNFx1YmFiNVx1YmFiNlx1YmFiN1x1YmFiYVx1YmFiY1x1YmFiZVx1YmFiZlx1YmFjMFx1YmFjMVx1YmFjMlx1YmFjM1x1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOVx1YmFjYVx1YmFjYlx1YmFjY1x1YmFjZFx1YmFjZVx1YmFjZlx1''@;'; put 'put ''YmFkMFx1YmFkMVx1YmFkMlx1YmFkM1x1YmFkNFx1YmFkNVx1YmFkNlx1YmFkN1x1YmFkYVx1YmFkYlx1YmFkY1x1YmFkZFx1YmFkZVx1YmFkZlx1YmFlMFx1YmFlMVx1YmFlMlx1YmFlM1x1YmFlNFx1YmFlNVx1YmFlNlx1YmFlN1x1YmFlOFx1YmFlOVx1YmFlYVx1YmFlYlx1YmFlY1x1YmFl''@;'; put 'put ''ZFx1YmFlZVx1YmFlZlx1YmFmMFx1YmFmMVx1YmFmMlx1YmFmM1x1YmFmNFx1YmFmNVx1YmFmNlx1YmFmN1x1YmFmOFx1YmFmOVx1YmFmYVx1YmFmYlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNVx1YmIwNlx1YmIwN1x1YmIwOFx1YmIwOVx1YmIwYVx1YmIwYlx1''@;'; put 'put ''YmIwY1x1YmIwZVx1YmIxMFx1YmIxMlx1YmIxM1x1YmIxNFx1YmIxNVx1YmIxNlx1YmIxN1x1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIxZlx1YmIyMVx1YmIyMlx1YmIyM1x1YmIyNFx1YmIyNVx1YmIyNlx1YmIyN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0NV0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMTQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NV1bZ11dPTM3MTIwK2cseVszNzEyMCtnXT1fWzE0NV1bZ10pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmIyOFx1''@;'; put 'put ''YmIyYVx1YmIyY1x1YmIyZFx1YmIyZVx1YmIyZlx1YmIzMFx1YmIzMVx1YmIzMlx1YmIzM1x1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZlx1YmI0MFx1YmI0MVx1YmI0Mlx1YmI0M1x1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1YmI1Mlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1N1x1YmI1OVx1YmI1YVx1YmI1Ylx1YmI1Y1x1YmI1ZFx1YmI1ZVx1YmI1Zlx1YmI2MFx1YmI2Mlx1YmI2NFx1YmI2NVx1YmI2Nlx1YmI2N1x1YmI2OFx1YmI2OVx1YmI2YVx1YmI2Ylx1YmI2ZFx1YmI2ZVx1YmI2Zlx1''@;'; put 'put ''YmI3MFx1YmI3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmI3Mlx1YmI3M1x1YmI3NFx1YmI3NVx1YmI3Nlx1YmI3N1x1YmI3OFx1YmI3OVx1YmI3YVx1YmI3Ylx1YmI3Y1x1YmI3ZFx1YmI3ZVx1YmI3Zlx1YmI4MFx1YmI4MVx1YmI4Mlx1YmI4M1x1YmI4NFx1YmI4''@;'; put 'put ''NVx1YmI4Nlx1YmI4N1x1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MVx1YmI5Mlx1YmI5M1x1YmI5NFx1YmI5NVx1YmI5Nlx1YmI5N1x1YmI5OFx1YmI5OVx1YmI5YVx1YmI5Ylx1YmI5Y1x1YmI5ZFx1YmI5ZVx1YmI5Zlx1YmJhMFx1YmJhMVx1YmJhMlx1YmJhM1x1''@;'; put 'put ''YmJhNVx1YmJhNlx1YmJhN1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZFx1YmJhZVx1YmJhZlx1YmJiMFx1YmJiMVx1YmJiMlx1YmJiM1x1YmJiNVx1YmJiNlx1YmJiOFx1YmJiOVx1YmJiYVx1YmJiYlx1YmJiY1x1YmJiZFx1YmJiZVx1YmJiZlx1YmJjMVx1YmJjMlx1YmJjM1x1YmJjNVx1YmJj''@;'; put 'put ''Nlx1YmJjN1x1YmJjOVx1YmJjYVx1YmJjYlx1YmJjY1x1YmJjZFx1YmJjZVx1YmJjZlx1YmJkMVx1YmJkMlx1YmJkNFx1YmJkNVx1YmJkNlx1YmJkN1x1YmJkOFx1YmJkOVx1YmJkYVx1YmJkYlx1YmJkY1x1YmJkZFx1YmJkZVx1YmJkZlx1YmJlMFx1YmJlMVx1YmJlMlx1YmJlM1x1YmJlNFx1''@;'; put 'put ''YmJlNVx1YmJlNlx1YmJlN1x1YmJlOFx1YmJlOVx1YmJlYVx1YmJlYlx1YmJlY1x1YmJlZFx1YmJlZVx1YmJlZlx1YmJmMFx1YmJmMVx1YmJmMlx1YmJmM1x1YmJmNFx1YmJmNVx1YmJmNlx1YmJmN1x1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzE0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Nl1bZ11dPTM3Mzc2K2cseVszNzM3NitnXT1fWzE0Nl1bZ10pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1YmMwM1x1YmMwNFx1YmMwNVx1YmMwNlx1YmMwN1x1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMzNlx1YmMzN1x1YmMzOVx1YmMzYVx1YmMzYlx1YmMzY1x1YmMzZFx1YmMzZVx1YmMzZlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MVx1YmM1Mlx1YmM1M1x1YmM1NFx1YmM1NVx1''@;'; put 'put ''YmM1Nlx1YmM1N1x1YmM1OFx1YmM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZVx1YmM1Zlx1YmM2MFx1YmM2MVx1YmM2Mlx1YmM2M1x1YmM2NFx1YmM2NVx1YmM2Nlx1YmM2N1x1YmM2OFx1YmM2OVx1YmM2YVx1YmM2Ylx1YmM2''@;'; put 'put ''Y1x1YmM2ZFx1YmM2ZVx1YmM2Zlx1YmM3MFx1YmM3MVx1YmM3Mlx1YmM3M1x1YmM3NFx1YmM3NVx1YmM3Nlx1YmM3N1x1YmM3OFx1YmM3OVx1YmM3YVx1YmM3Ylx1YmM3Y1x1YmM3ZFx1YmM3ZVx1YmM3Zlx1YmM4MFx1YmM4MVx1YmM4Mlx1YmM4M1x1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1''@;'; put 'put ''YmM4ZFx1YmM4Zlx1YmM5MFx1YmM5MVx1YmM5Mlx1YmM5M1x1YmM5Nlx1YmM5OFx1YmM5Ylx1YmM5Y1x1YmM5ZFx1YmM5ZVx1YmM5Zlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOVx1YmNhYVx1YmNhYlx1YmNhY1x1YmNhZFx1YmNhZVx1YmNhZlx1YmNiMlx1YmNiNlx1YmNiN1x1YmNi''@;'; put 'put ''OFx1YmNiOVx1YmNiYVx1YmNiYlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNVx1YmNjNlx1YmNjN1x1YmNjOFx1YmNjOVx1YmNjYVx1YmNjYlx1YmNjY1x1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNkYlx1YmNkZFx1YmNkZVx1''@;'; put 'put ''YmNkZlx1YmNlMFx1YmNlMVx1YmNlMlx1YmNlM1x1YmNlNFx1YmNlNVx1YmNlNlx1YmNlN1x1YmNlOFx1YmNlOVx1YmNlYVx1YmNlYlx1YmNlY1x1YmNlZFx1YmNlZVx1YmNlZlx1YmNmMFx1YmNmMVx1YmNmMlx1YmNmM1x1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzE0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0N11bZ11dPTM3NjMyK2cseVszNzYzMitnXT1fWzE0N11bZ10pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1YmNmZVx1YmNmZlx1YmQwMFx1YmQwMVx1YmQwMlx1YmQwM1x1YmQwNlx1YmQwOFx1YmQwYVx1YmQwYlx1YmQwY1x1YmQwZFx1YmQwZVx1YmQwZlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNVx1YmQxNlx1YmQxN1x1YmQxOFx1YmQxOVx1YmQxYVx1YmQxYlx1YmQx''@;'; put 'put ''Y1x1YmQxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQxZVx1YmQxZlx1YmQyMFx1YmQyMVx1YmQyMlx1YmQyM1x1YmQyNVx1YmQyNlx1YmQyN1x1YmQyOFx1YmQyOVx1YmQyYVx1YmQyYlx1YmQyZFx1YmQyZVx1YmQyZlx1YmQzMFx1YmQzMVx1YmQzMlx1YmQzM1x1''@;'; put 'put ''YmQzNFx1YmQzNVx1YmQzNlx1YmQzN1x1YmQzOFx1YmQzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQzYVx1YmQzYlx1YmQzY1x1YmQzZFx1YmQzZVx1YmQzZlx1YmQ0MVx1YmQ0Mlx1YmQ0M1x1YmQ0NFx1YmQ0NVx1YmQ0Nlx1YmQ0N1x1YmQ0YVx1YmQ0Ylx1YmQ0''@;'; put 'put ''ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MVx1YmQ1Mlx1YmQ1M1x1YmQ1NFx1YmQ1NVx1YmQ1Nlx1YmQ1N1x1YmQ1YVx1YmQ1Ylx1YmQ1Y1x1YmQ1ZFx1YmQ1ZVx1YmQ1Zlx1YmQ2MFx1YmQ2MVx1YmQ2Mlx1YmQ2M1x1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OVx1YmQ2YVx1YmQ2Ylx1YmQ2Y1x1YmQ2ZFx1''@;'; put 'put ''YmQ2ZVx1YmQ2Zlx1YmQ3MFx1YmQ3MVx1YmQ3Mlx1YmQ3M1x1YmQ3NFx1YmQ3NVx1YmQ3Nlx1YmQ3N1x1YmQ3OFx1YmQ3OVx1YmQ3YVx1YmQ3Ylx1YmQ3Y1x1YmQ3ZFx1YmQ3ZVx1YmQ3Zlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4Ylx1YmQ4Y1x1YmQ4ZFx1YmQ4ZVx1YmQ4Zlx1YmQ5''@;'; put 'put ''Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZFx1YmQ5ZVx1YmQ5Zlx1YmRhMFx1YmRhMVx1YmRhMlx1YmRhM1x1YmRhNVx1YmRhNlx1YmRhN1x1YmRhOFx1YmRhOVx1YmRhYVx1YmRhYlx1YmRhY1x1YmRhZFx1YmRhZVx1YmRhZlx1YmRiMVx1YmRiMlx1YmRiM1x1YmRiNFx1''@;'; put 'put ''YmRiNVx1YmRiNlx1YmRiN1x1YmRiOVx1YmRiYVx1YmRiYlx1YmRiY1x1YmRiZFx1YmRiZVx1YmRiZlx1YmRjMFx1YmRjMVx1YmRjMlx1YmRjM1x1YmRjNFx1YmRjNVx1YmRjNlx1YmRjN1x1YmRjOFx1YmRjOVx1YmRjYVx1YmRjYlx1YmRjY1x1YmRjZFx1YmRjZVx1YmRjZlx1YmRkMFx1YmRk''@;'; put 'put ''MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OF1bZ11dPTM3ODg4K2cseVszNzg4OCtnXT1fWzE0OF1bZ10pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZFx1YmRkZVx1YmRkZlx1YmRlMFx1YmRlMVx1YmRlMlx1YmRlM1x1YmRlNFx1YmRlNVx1YmRlNlx1YmRlN1x1YmRlOFx1YmRlYVx1YmRlYlx1YmRlY1x1YmRl''@;'; put 'put ''ZFx1YmRlZVx1YmRlZlx1YmRmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmRmMlx1YmRmM1x1YmRmNVx1YmRmNlx1YmRmN1x1YmRmOVx1YmRmYVx1YmRmYlx1YmRmY1x1YmRmZFx1YmRmZVx1YmRmZlx1YmUwMVx1YmUwMlx1YmUwNFx1YmUwNlx1YmUwN1x1YmUwOFx1''@;'; put 'put ''YmUwOVx1YmUwYVx1YmUwYlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmUxNVx1YmUxNlx1YmUxN1x1YmUxOFx1YmUxOVx1YmUxYVx1YmUxYlx1YmUxZVx1YmUyMFx1YmUyMVx1YmUyMlx1YmUyM1x1YmUyNFx1YmUy''@;'; put 'put ''NVx1YmUyNlx1YmUyN1x1YmUyOFx1YmUyOVx1YmUyYVx1YmUyYlx1YmUyY1x1YmUyZFx1YmUyZVx1YmUyZlx1YmUzMFx1YmUzMVx1YmUzMlx1YmUzM1x1YmUzNFx1YmUzNVx1YmUzNlx1YmUzN1x1YmUzOFx1YmUzOVx1YmUzYVx1YmUzYlx1YmUzY1x1YmUzZFx1YmUzZVx1YmUzZlx1YmU0MFx1''@;'; put 'put ''YmU0MVx1YmU0Mlx1YmU0M1x1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0Zlx1YmU1MFx1YmU1MVx1YmU1Mlx1YmU1M1x1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1YmU2NVx1YmU2Nlx1YmU2N1x1YmU2OVx1YmU2Ylx1YmU2''@;'; put 'put ''Y1x1YmU2ZFx1YmU2ZVx1YmU2Zlx1YmU3Mlx1YmU3Nlx1YmU3N1x1YmU3OFx1YmU3OVx1YmU3YVx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4Mlx1YmU4M1x1YmU4NVx1YmU4Nlx1YmU4N1x1YmU4OFx1YmU4OVx1YmU4YVx1YmU4Ylx1YmU4ZVx1YmU5Mlx1YmU5M1x1YmU5NFx1YmU5NVx1YmU5Nlx1''@;'; put 'put ''YmU5N1x1YmU5YVx1YmU5Ylx1YmU5Y1x1YmU5ZFx1YmU5ZVx1YmU5Zlx1YmVhMFx1YmVhMVx1YmVhMlx1YmVhM1x1YmVhNFx1YmVhNVx1YmVhNlx1YmVhN1x1YmVhOVx1YmVhYVx1YmVhYlx1YmVhY1x1YmVhZFx1YmVhZVx1YmVhZlx1YmViMFx1YmViMVx1YmViMlx1YmViM1x1YmViNFx1YmVi''@;'; put 'put ''NVx1YmViNlx1YmViN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OV1bZ11dPTM4MTQ0K2cseVszODE0NCtnXT1fWzE0OV1bZ10pO2ZvcihfWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmViOFx1YmViOVx1YmViYVx1YmViYlx1YmViY1x1YmViZFx1YmViZVx1YmViZlx1YmVjMFx1YmVjMVx1YmVjMlx1YmVjM1x1YmVjNFx1YmVjNVx1YmVjNlx1YmVjN1x1YmVjOFx1YmVjOVx1YmVjYVx1YmVjYlx1YmVj''@;'; put 'put ''Y1x1YmVjZFx1YmVjZVx1YmVjZlx1YmVkMlx1YmVkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVkNVx1YmVkNlx1YmVkOVx1YmVkYVx1YmVkYlx1YmVkY1x1YmVkZFx1YmVkZVx1YmVkZlx1YmVlMVx1YmVlMlx1YmVlNlx1YmVlN1x1YmVlOFx1YmVlOVx1YmVlYVx1''@;'; put 'put ''YmVlYlx1YmVlZFx1YmVlZVx1YmVlZlx1YmVmMFx1YmVmMVx1YmVmMlx1YmVmM1x1YmVmNFx1YmVmNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVmNlx1YmVmN1x1YmVmOFx1YmVmOVx1YmVmYVx1YmVmYlx1YmVmY1x1YmVmZFx1YmVmZVx1YmVmZlx1YmYwMFx1YmYw''@;'; put 'put ''Mlx1YmYwM1x1YmYwNFx1YmYwNVx1YmYwNlx1YmYwN1x1YmYwYVx1YmYwYlx1YmYwY1x1YmYwZFx1YmYwZVx1YmYwZlx1YmYxMFx1YmYxMVx1YmYxMlx1YmYxM1x1YmYxNFx1YmYxNVx1YmYxNlx1YmYxN1x1YmYxYVx1YmYxZVx1YmYxZlx1YmYyMFx1YmYyMVx1YmYyMlx1YmYyM1x1YmYyNFx1''@;'; put 'put ''YmYyNVx1YmYyNlx1YmYyN1x1YmYyOFx1YmYyOVx1YmYyYVx1YmYyYlx1YmYyY1x1YmYyZFx1YmYyZVx1YmYyZlx1YmYzMFx1YmYzMVx1YmYzMlx1YmYzM1x1YmYzNFx1YmYzNVx1YmYzNlx1YmYzN1x1YmYzOFx1YmYzOVx1YmYzYVx1YmYzYlx1YmYzY1x1YmYzZFx1YmYzZVx1YmYzZlx1YmY0''@;'; put 'put ''Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OVx1YmY0YVx1YmY0Ylx1YmY0Y1x1YmY0ZFx1YmY0ZVx1YmY0Zlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1Nlx1YmY1N1x1YmY1OFx1YmY1OVx1YmY1YVx1YmY1Ylx1YmY1Y1x1YmY1ZFx1YmY1ZVx1YmY1Zlx1YmY2MFx1YmY2MVx1YmY2Mlx1''@;'; put 'put ''YmY2M1x1YmY2NFx1YmY2NVx1YmY2Nlx1YmY2N1x1YmY2OFx1YmY2OVx1YmY2YVx1YmY2Ylx1YmY2Y1x1YmY2ZFx1YmY2ZVx1YmY2Zlx1YmY3MFx1YmY3MVx1YmY3Mlx1YmY3M1x1YmY3NFx1YmY3NVx1YmY3Nlx1YmY3N1x1YmY3OFx1YmY3OVx1YmY3YVx1YmY3Ylx1YmY3Y1x1YmY3ZFx1YmY3''@;'; put 'put ''ZVx1YmY3Zlx1YmY4MFx1YmY4MVx1YmY4Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MF1bZ11dPTM4NDAwK2cseVszODQwMCtnXT1fWzE1MF1bZ10pO2ZvcihfWzE1MV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY4M1x1YmY4NFx1YmY4NVx1YmY4Nlx1YmY4N1x1YmY4OFx1YmY4OVx1YmY4YVx1YmY4Ylx1YmY4Y1x1YmY4ZFx1YmY4ZVx1YmY4Zlx1YmY5MFx1YmY5MVx1YmY5Mlx1YmY5M1x1YmY5NVx1YmY5''@;'; put 'put ''Nlx1YmY5N1x1YmY5OFx1YmY5OVx1YmY5YVx1YmY5Ylx1YmY5Y1x1YmY5ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY5ZVx1YmY5Zlx1YmZhMFx1YmZhMVx1YmZhMlx1YmZhM1x1YmZhNFx1YmZhNVx1YmZhNlx1YmZhN1x1YmZhOFx1YmZhOVx1YmZhYVx1YmZhYlx1''@;'; put 'put ''YmZhY1x1YmZhZFx1YmZhZVx1YmZhZlx1YmZiMVx1YmZiMlx1YmZiM1x1YmZiNFx1YmZiNVx1YmZiNlx1YmZiN1x1YmZiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmZiOVx1YmZiYVx1YmZiYlx1YmZiY1x1YmZiZFx1YmZiZVx1YmZiZlx1YmZjMFx1YmZjMVx1YmZj''@;'; put 'put ''Mlx1YmZjM1x1YmZjNFx1YmZjNlx1YmZjN1x1YmZjOFx1YmZjOVx1YmZjYVx1YmZjYlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZkNVx1YmZkNlx1YmZkN1x1YmZkOFx1YmZkOVx1YmZkYVx1YmZkYlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMlx1YmZlM1x1YmZlNFx1YmZlNVx1''@;'; put 'put ''YmZlNlx1YmZlN1x1YmZlOFx1YmZlOVx1YmZlYVx1YmZlYlx1YmZlY1x1YmZlZFx1YmZlZVx1YmZlZlx1YmZmMFx1YmZmMVx1YmZmMlx1YmZmM1x1YmZmNFx1YmZmNVx1YmZmNlx1YmZmN1x1YmZmOFx1YmZmOVx1YmZmYVx1YmZmYlx1YmZmY1x1YmZmZFx1YmZmZVx1YmZmZlx1YzAwMFx1YzAw''@;'; put 'put ''MVx1YzAwMlx1YzAwM1x1YzAwNFx1YzAwNVx1YzAwNlx1YzAwN1x1YzAwOFx1YzAwOVx1YzAwYVx1YzAwYlx1YzAwY1x1YzAwZFx1YzAwZVx1YzAwZlx1YzAxMFx1YzAxMVx1YzAxMlx1YzAxM1x1YzAxNFx1YzAxNVx1YzAxNlx1YzAxN1x1YzAxOFx1YzAxOVx1YzAxYVx1YzAxYlx1YzAxY1x1''@;'; put 'put ''YzAxZFx1YzAxZVx1YzAxZlx1YzAyMFx1YzAyMVx1YzAyMlx1YzAyM1x1YzAyNFx1YzAyNVx1YzAyNlx1YzAyN1x1YzAyOFx1YzAyOVx1YzAyYVx1YzAyYlx1YzAyY1x1YzAyZFx1YzAyZVx1YzAyZlx1YzAzMFx1YzAzMVx1YzAzMlx1YzAzM1x1YzAzNFx1YzAzNVx1YzAzNlx1YzAzN1x1YzAz''@;'; put 'put ''OFx1YzAzOVx1YzAzYVx1YzAzYlx1YzAzZFx1YzAzZVx1YzAzZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MV1bZ11dPTM4NjU2K2cseVszODY1NitnXT1fWzE1MV1bZ10pO2ZvcihfWzE1''@;'; put 'put ''Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA0MFx1YzA0MVx1YzA0Mlx1YzA0M1x1YzA0NFx1YzA0NVx1YzA0Nlx1YzA0N1x1YzA0OFx1YzA0OVx1YzA0YVx1YzA0Ylx1YzA0Y1x1YzA0ZFx1YzA0ZVx1YzA0Zlx1YzA1''@;'; put 'put ''MFx1YzA1Mlx1YzA1M1x1YzA1NFx1YzA1NVx1YzA1Nlx1YzA1N1x1YzA1OVx1YzA1YVx1YzA1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MVx1YzA2Mlx1YzA2M1x1YzA2NFx1YzA2NVx1YzA2Nlx1YzA2N1x1YzA2YVx1YzA2Ylx1''@;'; put 'put ''YzA2Y1x1YzA2ZFx1YzA2ZVx1YzA2Zlx1YzA3MFx1YzA3MVx1YzA3Mlx1YzA3M1x1YzA3NFx1YzA3NVx1YzA3Nlx1YzA3N1x1YzA3OFx1YzA3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA3YVx1YzA3Ylx1YzA3Y1x1YzA3ZFx1YzA3ZVx1YzA3Zlx1YzA4MFx1YzA4''@;'; put 'put ''MVx1YzA4Mlx1YzA4M1x1YzA4NFx1YzA4NVx1YzA4Nlx1YzA4N1x1YzA4OFx1YzA4OVx1YzA4YVx1YzA4Ylx1YzA4Y1x1YzA4ZFx1YzA4ZVx1YzA4Zlx1YzA5Mlx1YzA5M1x1YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OVx1YzA5YVx1YzA5Ylx1YzA5Y1x1YzA5ZFx1YzA5ZVx1YzA5Zlx1YzBhMlx1''@;'; put 'put ''YzBhNFx1YzBhNlx1YzBhN1x1YzBhOFx1YzBhOVx1YzBhYVx1YzBhYlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiN1x1YzBiOFx1YzBiOVx1YzBiYVx1YzBiYlx1YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBjZFx1YzBjZVx1YzBjZlx1YzBkMVx1YzBk''@;'; put 'put ''Mlx1YzBkM1x1YzBkNFx1YzBkNVx1YzBkNlx1YzBkN1x1YzBkYVx1YzBkZVx1YzBkZlx1YzBlMFx1YzBlMVx1YzBlMlx1YzBlM1x1YzBlNlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZFx1YzBlZVx1YzBlZlx1YzBmMFx1YzBmMVx1YzBmMlx1YzBmM1x1YzBmNlx1YzBmOFx1YzBmYVx1''@;'; put 'put ''YzBmYlx1YzBmY1x1YzBmZFx1YzBmZVx1YzBmZlx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOVx1YzEwYVx1YzEwYlx1YzEwY1x1YzEwZFx1YzEwZVx1YzEwZlx1YzExMVx1YzExMlx1YzExM1x1YzExNFx1YzExNlx1YzExN1x1YzExOFx1YzExOVx1YzExYVx1YzEx''@;'; put 'put ''Ylx1YzEyMVx1YzEyMlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Ml1bZ11dPTM4OTEyK2cseVszODkxMitnXT1fWzE1Ml1b''@;'; put 'put ''Z10pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MVx1YzE0Mlx1YzE0M1x1YzE0NFx1YzE0''@;'; put 'put ''NVx1YzE0Nlx1YzE0N1x1YzE0YVx1YzE0ZVx1YzE0Zlx1YzE1MFx1YzE1MVx1YzE1Mlx1YzE1M1x1YzE1Nlx1YzE1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZFx1YzE1ZVx1YzE1Zlx1YzE2MFx1YzE2MVx1YzE2Mlx1YzE2M1x1''@;'; put 'put ''YzE2Nlx1YzE2YVx1YzE2Ylx1YzE2Y1x1YzE2ZFx1YzE2ZVx1YzE2Zlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE3Y1x1YzE3ZFx1YzE3ZVx1YzE3Zlx1YzE4MFx1YzE4''@;'; put 'put ''MVx1YzE4Mlx1YzE4M1x1YzE4NFx1YzE4Nlx1YzE4N1x1YzE4OFx1YzE4OVx1YzE4YVx1YzE4Ylx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5N1x1YzE5OFx1YzE5OVx1YzE5YVx1YzE5Ylx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1''@;'; put 'put ''YzFhYlx1YzFhZFx1YzFhZVx1YzFhZlx1YzFiMVx1YzFiMlx1YzFiM1x1YzFiNFx1YzFiNVx1YzFiNlx1YzFiN1x1YzFiOFx1YzFiOVx1YzFiYVx1YzFiYlx1YzFiY1x1YzFiZVx1YzFiZlx1YzFjMFx1YzFjMVx1YzFjMlx1YzFjM1x1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFj''@;'; put 'put ''Ylx1YzFjZFx1YzFjZVx1YzFjZlx1YzFkMFx1YzFkMVx1YzFkMlx1YzFkM1x1YzFkNVx1YzFkNlx1YzFkOVx1YzFkYVx1YzFkYlx1YzFkY1x1YzFkZFx1YzFkZVx1YzFkZlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOVx1YzFlYVx1YzFlYlx1YzFlY1x1YzFlZFx1''@;'; put 'put ''YzFlZVx1YzFlZlx1YzFmMlx1YzFmNFx1YzFmNVx1YzFmNlx1YzFmN1x1YzFmOFx1YzFmOVx1YzFmYVx1YzFmYlx1YzFmZVx1YzFmZlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNVx1YzIwNlx1YzIwN1x1YzIwOFx1YzIwOVx1YzIwYVx1YzIwYlx1YzIwZVx1YzIxMFx1YzIxMlx1YzIxM1x1YzIx''@;'; put 'put ''NFx1YzIxNVx1YzIxNlx1YzIxN1x1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1M11bZ11dPTM5MTY4K2cseVszOTE2''@;'; put 'put ''OCtnXT1fWzE1M11bZ10pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNVx1YzIzNlx1YzIzN1x1YzIz''@;'; put 'put ''OFx1YzIzOVx1YzIzYVx1YzIzYlx1YzIzY1x1YzIzZFx1YzIzZVx1YzIzZlx1YzI0MFx1YzI0MVx1YzI0Mlx1YzI0M1x1YzI0NFx1YzI0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI0Nlx1YzI0N1x1YzI0OVx1YzI0YVx1YzI0Ylx1YzI0Y1x1YzI0ZFx1YzI0ZVx1''@;'; put 'put ''YzI0Zlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OVx1YzI1YVx1YzI1Ylx1YzI1Y1x1YzI1ZFx1YzI1ZVx1YzI1Zlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI2N1x1YzI2OFx1YzI2OVx1YzI2''@;'; put 'put ''YVx1YzI2Ylx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NVx1YzI3Nlx1YzI3N1x1YzI3OFx1YzI3OVx1YzI3YVx1YzI3Ylx1YzI3ZVx1YzI4MFx1YzI4Mlx1YzI4M1x1YzI4NFx1YzI4NVx1YzI4Nlx1YzI4N1x1YzI4YVx1YzI4Ylx1YzI4Y1x1YzI4ZFx1YzI4ZVx1YzI4Zlx1''@;'; put 'put ''YzI5MVx1YzI5Mlx1YzI5M1x1YzI5NFx1YzI5NVx1YzI5Nlx1YzI5N1x1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZVx1YzI5Zlx1YzJhMFx1YzJhMVx1YzJhMlx1YzJhM1x1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZVx1YzJhZlx1YzJiMFx1YzJiMVx1YzJiMlx1YzJiM1x1YzJi''@;'; put 'put ''Nlx1YzJiOFx1YzJiYVx1YzJiYlx1YzJiY1x1YzJiZFx1YzJiZVx1YzJiZlx1YzJjMFx1YzJjMVx1YzJjMlx1YzJjM1x1YzJjNFx1YzJjNVx1YzJjNlx1YzJjN1x1YzJjOFx1YzJjOVx1YzJjYVx1YzJjYlx1YzJjY1x1YzJjZFx1YzJjZVx1YzJjZlx1YzJkMFx1YzJkMVx1YzJkMlx1YzJkM1x1''@;'; put 'put ''YzJkNFx1YzJkNVx1YzJkNlx1YzJkN1x1YzJkOFx1YzJkOVx1YzJkYVx1YzJkYlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNVx1YzJlNlx1YzJlN1x1YzJlOFx1YzJlOVx1YzJlYVx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJm''@;'; put 'put ''ZVx1YzJmZlx1YzMwMVx1YzMwMlx1YzMwM1x1YzMwNFx1YzMwNVx1YzMwNlx1YzMwN1x1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1NF1bZ11dPTM5''@;'; put 'put ''NDI0K2cseVszOTQyNCtnXT1fWzE1NF1bZ10pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzMxMFx1YzMxMVx1YzMxMlx1YzMxNlx1YzMxN1x1YzMxOVx1YzMxYVx1YzMxYlx1YzMxZFx1YzMxZVx1YzMx''@;'; put 'put ''Zlx1YzMyMFx1YzMyMVx1YzMyMlx1YzMyM1x1YzMyNlx1YzMyN1x1YzMyYVx1YzMyYlx1YzMyY1x1YzMyZFx1YzMyZVx1YzMyZlx1YzMzMFx1YzMzMVx1YzMzMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzMzM1x1YzMzNFx1YzMzNVx1YzMzNlx1YzMzN1x1YzMzOFx1''@;'; put 'put ''YzMzOVx1YzMzYVx1YzMzYlx1YzMzY1x1YzMzZFx1YzMzZVx1YzMzZlx1YzM0MFx1YzM0MVx1YzM0Mlx1YzM0M1x1YzM0NFx1YzM0Nlx1YzM0N1x1YzM0OFx1YzM0OVx1YzM0YVx1YzM0Ylx1YzM0Y1x1YzM0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzM0ZVx1YzM0''@;'; put 'put ''Zlx1YzM1MFx1YzM1MVx1YzM1Mlx1YzM1M1x1YzM1NFx1YzM1NVx1YzM1Nlx1YzM1N1x1YzM1OFx1YzM1OVx1YzM1YVx1YzM1Ylx1YzM1Y1x1YzM1ZFx1YzM1ZVx1YzM1Zlx1YzM2MFx1YzM2MVx1YzM2Mlx1YzM2M1x1YzM2NFx1YzM2NVx1YzM2Nlx1YzM2N1x1YzM2YVx1YzM2Ylx1YzM2ZFx1''@;'; put 'put ''YzM2ZVx1YzM2Zlx1YzM3MVx1YzM3M1x1YzM3NFx1YzM3NVx1YzM3Nlx1YzM3N1x1YzM3YVx1YzM3Ylx1YzM3ZVx1YzM3Zlx1YzM4MFx1YzM4MVx1YzM4Mlx1YzM4M1x1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZFx1YzM4ZVx1YzM4Zlx1YzM5MFx1YzM5MVx1YzM5''@;'; put 'put ''Mlx1YzM5M1x1YzM5NFx1YzM5NVx1YzM5Nlx1YzM5N1x1YzM5OFx1YzM5OVx1YzM5YVx1YzM5Ylx1YzM5Y1x1YzM5ZFx1YzM5ZVx1YzM5Zlx1YzNhMFx1YzNhMVx1YzNhMlx1YzNhM1x1YzNhNFx1YzNhNVx1YzNhNlx1YzNhN1x1YzNhOFx1YzNhOVx1YzNhYVx1YzNhYlx1YzNhY1x1YzNhZFx1''@;'; put 'put ''YzNhZVx1YzNhZlx1YzNiMFx1YzNiMVx1YzNiMlx1YzNiM1x1YzNiNFx1YzNiNVx1YzNiNlx1YzNiN1x1YzNiOFx1YzNiOVx1YzNiYVx1YzNiYlx1YzNiY1x1YzNiZFx1YzNiZVx1YzNiZlx1YzNjMVx1YzNjMlx1YzNjM1x1YzNjNFx1YzNjNVx1YzNjNlx1YzNjN1x1YzNjOFx1YzNjOVx1YzNj''@;'; put 'put ''YVx1YzNjYlx1YzNjY1x1YzNjZFx1YzNjZVx1YzNjZlx1YzNkMFx1YzNkMVx1YzNkMlx1YzNkM1x1YzNkNFx1YzNkNVx1YzNkNlx1YzNkN1x1YzNkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE1NV1bZ11dPTM5NjgwK2cseVszOTY4MCtnXT1fWzE1NV1bZ10pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlM1x1YzNlNFx1YzNlNVx1YzNlNlx1YzNl''@;'; put 'put ''N1x1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZVx1YzNlZlx1YzNmMFx1YzNmMVx1YzNmMlx1YzNmM1x1YzNmNlx1YzNmN1x1YzNmOVx1YzNmYVx1YzNmYlx1YzNmY1x1YzNmZFx1YzNmZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNmZlx1YzQwMFx1YzQwMVx1YzQwMlx1''@;'; put 'put ''YzQwM1x1YzQwNFx1YzQwNVx1YzQwNlx1YzQwN1x1YzQwOVx1YzQwYVx1YzQwYlx1YzQwY1x1YzQwZFx1YzQwZVx1YzQwZlx1YzQxMVx1YzQxMlx1YzQxM1x1YzQxNFx1YzQxNVx1YzQxNlx1YzQxN1x1YzQxOFx1YzQxOVx1YzQxYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1YzQxYlx1YzQxY1x1YzQxZFx1YzQxZVx1YzQxZlx1YzQyMFx1YzQyMVx1YzQyMlx1YzQyM1x1YzQyNVx1YzQyNlx1YzQyN1x1YzQyOFx1YzQyOVx1YzQyYVx1YzQyYlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNVx1YzQzNlx1YzQzN1x1YzQzOFx1YzQzOVx1''@;'; put 'put ''YzQzYVx1YzQzYlx1YzQzZVx1YzQzZlx1YzQ0MFx1YzQ0MVx1YzQ0Mlx1YzQ0M1x1YzQ0NFx1YzQ0NVx1YzQ0Nlx1YzQ0N1x1YzQ0OVx1YzQ0YVx1YzQ0Ylx1YzQ0Y1x1YzQ0ZFx1YzQ0ZVx1YzQ0Zlx1YzQ1MFx1YzQ1MVx1YzQ1Mlx1YzQ1M1x1YzQ1NFx1YzQ1NVx1YzQ1Nlx1YzQ1N1x1YzQ1''@;'; put 'put ''OFx1YzQ1OVx1YzQ1YVx1YzQ1Ylx1YzQ1Y1x1YzQ1ZFx1YzQ1ZVx1YzQ1Zlx1YzQ2MFx1YzQ2MVx1YzQ2Mlx1YzQ2M1x1YzQ2Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZFx1YzQ2ZVx1YzQ2Zlx1YzQ3MFx1YzQ3MVx1YzQ3Mlx1YzQ3M1x1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YVx1''@;'; put 'put ''YzQ3Ylx1YzQ3Y1x1YzQ3ZFx1YzQ3ZVx1YzQ3Zlx1YzQ4MVx1YzQ4Mlx1YzQ4M1x1YzQ4NFx1YzQ4NVx1YzQ4Nlx1YzQ4N1x1YzQ4OFx1YzQ4OVx1YzQ4YVx1YzQ4Ylx1YzQ4Y1x1YzQ4ZFx1YzQ4ZVx1YzQ4Zlx1YzQ5MFx1YzQ5MVx1YzQ5Mlx1YzQ5M1x1YzQ5NVx1YzQ5Nlx1YzQ5N1x1YzQ5''@;'; put 'put ''OFx1YzQ5OVx1YzQ5YVx1YzQ5Ylx1YzQ5ZFx1YzQ5ZVx1YzQ5Zlx1YzRhMFx1YzRhMVx1YzRhMlx1YzRhM1x1YzRhNFx1YzRhNVx1YzRhNlx1YzRhN1x1YzRhOFx1YzRhOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU2XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE1Nl1bZ11dPTM5OTM2K2cseVszOTkzNitnXT1fWzE1Nl1bZ10pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRhYVx1YzRhYlx1YzRhY1x1YzRhZFx1YzRhZVx1YzRhZlx1YzRi''@;'; put 'put ''MFx1YzRiMVx1YzRiMlx1YzRiM1x1YzRiNFx1YzRiNVx1YzRiNlx1YzRiN1x1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZFx1YzRiZVx1YzRiZlx1YzRjMFx1YzRjMVx1YzRjMlx1YzRjM1x1YzRjNFx1YzRjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRjNlx1YzRjN1x1''@;'; put 'put ''YzRjOFx1YzRjOVx1YzRjYVx1YzRjYlx1YzRjY1x1YzRjZFx1YzRjZVx1YzRjZlx1YzRkMFx1YzRkMVx1YzRkMlx1YzRkM1x1YzRkNFx1YzRkNVx1YzRkNlx1YzRkN1x1YzRkOFx1YzRkOVx1YzRkYVx1YzRkYlx1YzRkY1x1YzRkZFx1YzRkZVx1YzRkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1YzRlMFx1YzRlMVx1YzRlMlx1YzRlM1x1YzRlNFx1YzRlNVx1YzRlNlx1YzRlN1x1YzRlOFx1YzRlYVx1YzRlYlx1YzRlY1x1YzRlZFx1YzRlZVx1YzRlZlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1''@;'; put 'put ''YzUwMlx1YzUwM1x1YzUwNFx1YzUwNVx1YzUwNlx1YzUwN1x1YzUwOFx1YzUwOVx1YzUwYVx1YzUwYlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNVx1YzUxNlx1YzUxN1x1YzUxOFx1YzUxOVx1YzUxYVx1YzUxYlx1YzUxZFx1YzUxZVx1YzUxZlx1YzUyMFx1YzUy''@;'; put 'put ''MVx1YzUyMlx1YzUyM1x1YzUyNFx1YzUyNVx1YzUyNlx1YzUyN1x1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMVx1YzUzMlx1YzUzM1x1YzUzNFx1YzUzNVx1YzUzNlx1YzUzN1x1YzUzYVx1YzUzY1x1YzUzZVx1YzUzZlx1YzU0MFx1YzU0MVx1YzU0Mlx1YzU0M1x1YzU0Nlx1''@;'; put 'put ''YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OVx1YzU2YVx1YzU2Ylx1YzU2Y1x1YzU2ZFx1YzU2ZVx1YzU2Zlx1YzU3Mlx1YzU3Nlx1YzU3N1x1YzU3OFx1YzU3''@;'; put 'put ''OVx1YzU3YVx1YzU3Ylx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU3''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1N11bZ11dPTQwMTkyK2cseVs0MDE5MitnXT1fWzE1N11bZ10pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5Ylx1YzU5''@;'; put 'put ''ZFx1YzU5ZVx1YzU5Zlx1YzVhMVx1YzVhMlx1YzVhM1x1YzVhNFx1YzVhNVx1YzVhNlx1YzVhN1x1YzVhOFx1YzVhYVx1YzVhYlx1YzVhY1x1YzVhZFx1YzVhZVx1YzVhZlx1YzViMFx1YzViMVx1YzViMlx1YzViM1x1YzViNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''YzViN1x1YzViYVx1YzViZlx1YzVjMFx1YzVjMVx1YzVjMlx1YzVjM1x1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1YzVkNlx1YzVkN1x1YzVkOVx1YzVkYVx1YzVkYlx1YzVkY1x1YzVkZFx1YzVkZVx1YzVkZlx1YzVlMlx1YzVlNFx1YzVlNlx1YzVlN1x1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzVlOFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1YzVmM1x1YzVmNVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMVx1''@;'; put 'put ''YzYxMlx1YzYxM1x1YzYxNFx1YzYxNVx1YzYxNlx1YzYxN1x1YzYxYVx1YzYxZFx1YzYxZVx1YzYxZlx1YzYyMFx1YzYyMVx1YzYyMlx1YzYyM1x1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYzNlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYz''@;'; put 'put ''ZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OVx1YzY0YVx1YzY0Ylx1YzY0Y1x1YzY0ZFx1YzY0ZVx1YzY0Zlx1YzY1Mlx1YzY1Nlx1YzY1N1x1YzY1OFx1YzY1OVx1YzY1YVx1YzY1Ylx1YzY1ZVx1YzY1Zlx1YzY2MVx1YzY2Mlx1YzY2M1x1YzY2NFx1YzY2NVx1''@;'; put 'put ''YzY2Nlx1YzY2N1x1YzY2OFx1YzY2OVx1YzY2YVx1YzY2Ylx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3Mlx1YzY3M1x1YzY3NFx1YzY3NVx1YzY3Nlx1YzY3N1x1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MVx1YzY4Mlx1YzY4M1x1YzY4NFx1YzY4NVx1YzY4Nlx1YzY4N1x1YzY4''@;'; put 'put ''YVx1YzY4Y1x1YzY4ZVx1YzY4Zlx1YzY5MFx1YzY5MVx1YzY5Mlx1YzY5M1x1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5ZFx1YzY5ZVx1YzY5Zlx1YzZhMFx1YzZhMVx1YzZhMlx1YzZhM1x1YzZhNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1OF0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTU4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OF1bZ11dPTQwNDQ4K2cseVs0MDQ0OCtnXT1fWzE1OF1bZ10pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZhOFx1YzZhYVx1YzZh''@;'; put 'put ''Ylx1YzZhY1x1YzZhZFx1YzZhZVx1YzZhZlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYlx1YzZiY1x1YzZiZFx1YzZiZVx1YzZiZlx1YzZjMlx1YzZjNFx1YzZjNlx1YzZjN1x1YzZjOFx1YzZjOVx1YzZjYVx1YzZjYlx1YzZjZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNVx1YzZkNlx1YzZkN1x1YzZkOFx1YzZkOVx1YzZkYVx1YzZkYlx1YzZkZVx1YzZkZlx1YzZlMlx1YzZlM1x1YzZlNFx1YzZlNVx1YzZlNlx1YzZlN1x1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZm''@;'; put 'put ''Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZmM1x1YzZmNFx1YzZmNVx1YzZmNlx1YzZmN1x1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZVx1YzZmZlx1YzcwMFx1YzcwMVx1YzcwMlx1YzcwM1x1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZFx1YzcwZVx1''@;'; put 'put ''YzcwZlx1YzcxMFx1YzcxMVx1YzcxMlx1YzcxM1x1YzcxNlx1YzcxOFx1YzcxYVx1YzcxYlx1YzcxY1x1YzcxZFx1YzcxZVx1YzcxZlx1YzcyMlx1YzcyM1x1YzcyNVx1YzcyNlx1YzcyN1x1YzcyOVx1YzcyYVx1YzcyYlx1YzcyY1x1YzcyZFx1YzcyZVx1YzcyZlx1YzczMlx1YzczNFx1Yzcz''@;'; put 'put ''Nlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NVx1Yzc0Nlx1Yzc0N1x1Yzc0OFx1Yzc0OVx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MVx1Yzc2Mlx1Yzc2M1x1Yzc2NFx1''@;'; put 'put ''Yzc2NVx1Yzc2Nlx1Yzc2N1x1Yzc2OVx1Yzc2YVx1Yzc2Y1x1Yzc2ZFx1Yzc2ZVx1Yzc2Zlx1Yzc3MFx1Yzc3MVx1Yzc3Mlx1Yzc3M1x1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5''@;'; put 'put ''Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5Ylx1Yzc5Y1x1Yzc5ZFx1Yzc5ZVx1Yzc5Zlx1YzdhMlx1YzdhN1x1YzdhOFx1YzdhOVx1YzdhYVx1YzdhYlx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE1OV0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTU5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OV1bZ11dPTQwNzA0K2cseVs0MDcwNCtnXT1fWzE1OV1bZ10pO2ZvcihfWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzdi''@;'; put 'put ''OFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMlx1YzdjM1x1YzdjNFx1YzdjNVx1YzdjNlx1YzdjN1x1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMVx1YzdkMlx1YzdkM1x1YzdkNFx1YzdkNVx1YzdkNlx1YzdkN1x1YzdkOVx1YzdkYVx1YzdkYlx1YzdkY1x1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdkZVx1YzdkZlx1YzdlMFx1YzdlMVx1YzdlMlx1YzdlM1x1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZFx1YzdlZVx1YzdlZlx1YzdmMFx1YzdmMVx1YzdmMlx1YzdmM1x1YzdmNFx1YzdmNVx1YzdmNlx1YzdmN1x1Yzdm''@;'; put 'put ''OFx1YzdmOVx1YzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdmYlx1YzdmY1x1YzdmZFx1YzdmZVx1YzdmZlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYlx1YzgwY1x1YzgwZFx1YzgwZVx1YzgwZlx1YzgxMlx1YzgxNFx1YzgxN1x1''@;'; put 'put ''YzgxOFx1YzgxOVx1YzgxYVx1YzgxYlx1YzgxZVx1YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNVx1YzgyNlx1YzgyN1x1YzgyOFx1YzgyOVx1YzgyYVx1YzgyYlx1YzgyZVx1YzgzMFx1YzgzMlx1YzgzM1x1YzgzNFx1YzgzNVx1YzgzNlx1YzgzN1x1YzgzOVx1YzgzYVx1YzgzYlx1Yzgz''@;'; put 'put ''ZFx1YzgzZVx1YzgzZlx1Yzg0MVx1Yzg0Mlx1Yzg0M1x1Yzg0NFx1Yzg0NVx1Yzg0Nlx1Yzg0N1x1Yzg0YVx1Yzg0Ylx1Yzg0ZVx1Yzg0Zlx1Yzg1MFx1Yzg1MVx1Yzg1Mlx1Yzg1M1x1Yzg1NVx1Yzg1Nlx1Yzg1N1x1Yzg1OFx1Yzg1OVx1Yzg1YVx1Yzg1Ylx1Yzg1Y1x1Yzg1ZFx1Yzg1ZVx1''@;'; put 'put ''Yzg1Zlx1Yzg2MFx1Yzg2MVx1Yzg2Mlx1Yzg2M1x1Yzg2NFx1Yzg2NVx1Yzg2Nlx1Yzg2N1x1Yzg2OFx1Yzg2OVx1Yzg2YVx1Yzg2Ylx1Yzg2Y1x1Yzg2ZFx1Yzg2ZVx1Yzg2Zlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3Ylx1Yzg3Y1x1Yzg3ZFx1Yzg3ZVx1Yzg3''@;'; put 'put ''Zlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZVx1Yzg4Zlx1Yzg5MFx1Yzg5MVx1Yzg5Mlx1Yzg5M1x1Yzg5NVx1Yzg5Nlx1Yzg5N1x1Yzg5OFx1Yzg5OVx1Yzg5YVx1Yzg5Ylx1Yzg5Y1x1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE2MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MF1bZ11dPTQwOTYwK2cseVs0MDk2MCtnXT1fWzE2MF1bZ10pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOVx1YzhhYVx1YzhhYlx1YzhhY1x1YzhhZFx1YzhhZVx1YzhhZlx1YzhiMFx1YzhiMVx1YzhiMlx1YzhiM1x1YzhiNFx1YzhiNVx1YzhiNlx1YzhiN1x1YzhiOFx1YzhiOVx1YzhiYVx1YzhiYlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1YzhjYVx1YzhjYlx1YzhjZFx1YzhjZVx1YzhjZlx1YzhkMFx1YzhkMVx1YzhkMlx1YzhkM1x1YzhkNlx1YzhkOFx1YzhkYVx1YzhkYlx1YzhkY1x1YzhkZFx1Yzhk''@;'; put 'put ''ZVx1YzhkZlx1YzhlMlx1YzhlM1x1YzhlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhlNlx1YzhlN1x1YzhlOFx1YzhlOVx1YzhlYVx1YzhlYlx1YzhlY1x1YzhlZFx1YzhlZVx1YzhlZlx1YzhmMFx1YzhmMVx1YzhmMlx1YzhmM1x1YzhmNFx1YzhmNlx1YzhmN1x1''@;'; put 'put ''YzhmOFx1YzhmOVx1YzhmYVx1YzhmYlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1YzkwM1x1YzkwN1x1YzkwOFx1YzkwOVx1YzkwYVx1YzkwYlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVcdTIwMjZceGE4XHUzMDAzXHhhZFx1MjAxNVx1MjIyNVx1ZmYzY1x1MjIzY1x1MjAx''@;'; put 'put ''OFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZm''@;'; put 'put ''ZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUyMDNiXHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUy''@;'; put 'put ''MTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUyMjI4XHVmZmUyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtnXV09NDEyMTYrZyx5WzQxMjE2K2ddPV9bMTYxXVtnXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVjOTEwXHVjOTEyXHVjOTEzXHVjOTE0XHVjOTE1XHVjOTE2XHVjOTE3XHVjOTE5XHVjOTFhXHVjOTFiXHVjOTFjXHVjOTFkXHVjOTFlXHVjOTFmXHVjOTIwXHVjOTIxXHVjOTIyXHVjOTIzXHVjOTI0XHVjOTI1XHVjOTI2XHVjOTI3XHVjOTI4XHVjOTI5XHVjOTJhXHVjOTJiXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTJkXHVjOTJlXHVjOTJmXHVjOTMwXHVjOTMxXHVjOTMyXHVjOTMzXHVjOTM1XHVjOTM2XHVjOTM3XHVjOTM4XHVjOTM5XHVjOTNhXHVjOTNiXHVjOTNjXHVjOTNkXHVjOTNlXHVjOTNmXHVjOTQwXHVjOTQxXHVjOTQyXHVjOTQzXHVj''@;'; put 'put ''OTQ0XHVjOTQ1XHVjOTQ2XHVjOTQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTQ4XHVjOTQ5XHVjOTRhXHVjOTRiXHVjOTRjXHVjOTRkXHVjOTRlXHVjOTRmXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5XHVjOTVhXHVjOTViXHVjOTVjXHVjOTVk''@;'; put 'put ''XHVjOTVlXHVjOTVmXHVjOTYyXHVjOTY0XHVjOTY1XHVjOTY2XHVjOTY3XHVjOTY4XHVjOTY5XHVjOTZhXHVjOTZiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhi''@;'; put 'put ''Zlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1''@;'; put 'put ''YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhh''@;'; put 'put ''ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bZ11dPTQxNDcyK2cseVs0MTQ3MitnXT1fWzE2Ml1bZ10pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NVx1Yzk3Nlx1Yzk3N1x1Yzk3OFx1Yzk3OVx1Yzk3YVx1Yzk3Ylx1Yzk3ZFx1Yzk3ZVx1Yzk3Zlx1Yzk4MFx1Yzk4MVx1Yzk4Mlx1Yzk4M1x1Yzk4NFx1Yzk4NVx1Yzk4Nlx1Yzk4N1x1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4Zlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk5MVx1Yzk5Mlx1Yzk5M1x1Yzk5NFx1Yzk5NVx1Yzk5Nlx1Yzk5N1x1Yzk5YVx1Yzk5Y1x1Yzk5ZVx1Yzk5Zlx1YzlhMFx1YzlhMVx1YzlhMlx1YzlhM1x1YzlhNFx1YzlhNVx1YzlhNlx1YzlhN1x1YzlhOFx1YzlhOVx1YzlhYVx1Yzlh''@;'; put 'put ''Ylx1YzlhY1x1YzlhZFx1YzlhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlhZlx1YzliMFx1YzliMVx1YzliMlx1YzliM1x1YzliNFx1YzliNVx1YzliNlx1YzliN1x1YzliOFx1YzliOVx1YzliYVx1YzliYlx1YzliY1x1YzliZFx1YzliZVx1YzliZlx1YzljMlx1''@;'; put 'put ''YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYlx1YzljY1x1YzljZFx1YzljZVx1YzljZlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmYwNFx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYw''@;'; put 'put ''ZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1''@;'; put 'put ''ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmZlNlx1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0''@;'; put 'put ''NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bZ11dPTQxNzI4K2cseVs0MTcyOCtnXT1fWzE2M11bZ10pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1YzllZVx1YzlmMlx1YzlmM1x1YzlmNFx1YzlmNVx1YzlmNlx1YzlmN1x1YzlmYVx1YzlmYlx1YzlmZFx1YzlmZVx1YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1''@;'; put 'put ''Y2EwNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZVx1Y2EwZlx1Y2ExMFx1Y2ExMVx1Y2ExMlx1Y2ExM1x1Y2ExNVx1Y2ExNlx1Y2ExN1x1Y2ExOVx1Y2ExYVx1Y2ExYlx1Y2ExY1x1Y2ExZFx1Y2ExZVx1Y2ExZlx1Y2Ey''@;'; put 'put ''MFx1Y2EyMVx1Y2EyMlx1Y2EyM1x1Y2EyNFx1Y2EyNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2EyNlx1Y2EyN1x1Y2EyOFx1Y2EyYVx1Y2EyYlx1Y2EyY1x1Y2EyZFx1Y2EyZVx1Y2EyZlx1Y2EzMFx1Y2EzMVx1Y2EzMlx1Y2EzM1x1Y2EzNFx1Y2EzNVx1Y2EzNlx1''@;'; put 'put ''Y2EzN1x1Y2EzOFx1Y2EzOVx1Y2EzYVx1Y2EzYlx1Y2EzY1x1Y2EzZFx1Y2EzZVx1Y2EzZlx1Y2E0MFx1Y2E0MVx1Y2E0Mlx1Y2E0M1x1Y2E0NFx1Y2E0NVx1Y2E0Nlx1MzEzMVx1MzEzMlx1MzEzM1x1MzEzNFx1MzEzNVx1MzEzNlx1MzEzN1x1MzEzOFx1MzEzOVx1MzEzYVx1MzEzYlx1MzEz''@;'; put 'put ''Y1x1MzEzZFx1MzEzZVx1MzEzZlx1MzE0MFx1MzE0MVx1MzE0Mlx1MzE0M1x1MzE0NFx1MzE0NVx1MzE0Nlx1MzE0N1x1MzE0OFx1MzE0OVx1MzE0YVx1MzE0Ylx1MzE0Y1x1MzE0ZFx1MzE0ZVx1MzE0Zlx1MzE1MFx1MzE1MVx1MzE1Mlx1MzE1M1x1MzE1NFx1MzE1NVx1MzE1Nlx1MzE1N1x1''@;'; put 'put ''MzE1OFx1MzE1OVx1MzE1YVx1MzE1Ylx1MzE1Y1x1MzE1ZFx1MzE1ZVx1MzE1Zlx1MzE2MFx1MzE2MVx1MzE2Mlx1MzE2M1x1MzE2NFx1MzE2NVx1MzE2Nlx1MzE2N1x1MzE2OFx1MzE2OVx1MzE2YVx1MzE2Ylx1MzE2Y1x1MzE2ZFx1MzE2ZVx1MzE2Zlx1MzE3MFx1MzE3MVx1MzE3Mlx1MzE3''@;'; put 'put ''M1x1MzE3NFx1MzE3NVx1MzE3Nlx1MzE3N1x1MzE3OFx1MzE3OVx1MzE3YVx1MzE3Ylx1MzE3Y1x1MzE3ZFx1MzE3ZVx1MzE3Zlx1MzE4MFx1MzE4MVx1MzE4Mlx1MzE4M1x1MzE4NFx1MzE4NVx1MzE4Nlx1MzE4N1x1MzE4OFx1MzE4OVx1MzE4YVx1MzE4Ylx1MzE4Y1x1MzE4ZFx1MzE4ZVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bZ11dPTQxOTg0K2cseVs0MTk4NCtnXT1fWzE2NF1bZ10pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E0N1x1Y2E0OFx1Y2E0OVx1Y2E0YVx1Y2E0Ylx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NVx1Y2E1Nlx1Y2E1N1x1Y2E1OFx1Y2E1OVx1Y2E1YVx1Y2E1Ylx1Y2E1ZVx1Y2E2Mlx1Y2E2M1x1Y2E2NFx1Y2E2NVx1Y2E2Nlx1''@;'; put 'put ''Y2E2N1x1Y2E2OVx1Y2E2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E2Ylx1Y2E2Y1x1Y2E2ZFx1Y2E2ZVx1Y2E2Zlx1Y2E3MFx1Y2E3MVx1Y2E3Mlx1Y2E3M1x1Y2E3NFx1Y2E3NVx1Y2E3Nlx1Y2E3N1x1Y2E3OFx1Y2E3OVx1Y2E3YVx1Y2E3Ylx1Y2E3Y1x1Y2E3''@;'; put 'put ''ZVx1Y2E3Zlx1Y2E4MFx1Y2E4MVx1Y2E4Mlx1Y2E4M1x1Y2E4NVx1Y2E4Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E4N1x1Y2E4OFx1Y2E4OVx1Y2E4YVx1Y2E4Ylx1Y2E4Y1x1Y2E4ZFx1Y2E4ZVx1Y2E4Zlx1Y2E5MFx1Y2E5MVx1Y2E5Mlx1Y2E5M1x1Y2E5NFx1''@;'; put 'put ''Y2E5NVx1Y2E5Nlx1Y2E5N1x1Y2E5OVx1Y2E5YVx1Y2E5Ylx1Y2E5Y1x1Y2E5ZFx1Y2E5ZVx1Y2E5Zlx1Y2FhMFx1Y2FhMVx1Y2FhMlx1Y2FhM1x1Y2FhNFx1Y2FhNVx1Y2FhNlx1Y2FhN1x1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3''@;'; put 'put ''OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1''@;'; put 'put ''MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNi''@;'; put 'put ''MVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bZ11dPTQyMjQwK2cseVs0MjI0MCtnXT1fWzE2NV1bZ10pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FhOFx1Y2FhOVx1Y2FhYVx1Y2FhYlx1Y2FhY1x1Y2FhZFx1Y2FhZVx1Y2FhZlx1Y2FiMFx1Y2FiMVx1Y2FiMlx1Y2FiM1x1Y2FiNFx1Y2FiNVx1Y2FiNlx1Y2FiN1x1Y2FiOFx1Y2FiOVx1Y2FiYVx1Y2FiYlx1Y2FiZVx1''@;'; put 'put ''Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FjNlx1Y2FjN1x1Y2FjOFx1Y2FjOVx1Y2FjYVx1Y2FjYlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYVx1Y2FkYlx1Y2FkY1x1Y2Fk''@;'; put 'put ''ZFx1Y2FkZVx1Y2FkZlx1Y2FlMVx1Y2FlMlx1Y2FlM1x1Y2FlNFx1Y2FlNVx1Y2FlNlx1Y2FlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZFx1Y2FlZVx1Y2FlZlx1Y2FmMFx1Y2FmMVx1Y2FmMlx1Y2FmM1x1Y2FmNVx1''@;'; put 'put ''Y2FmNlx1Y2FmN1x1Y2FmOFx1Y2FmOVx1Y2FmYVx1Y2FmYlx1Y2FmY1x1Y2FmZFx1Y2FmZVx1Y2FmZlx1Y2IwMFx1Y2IwMVx1Y2IwMlx1Y2IwM1x1Y2IwNFx1Y2IwNVx1Y2IwNlx1Y2IwN1x1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUy''@;'; put 'put ''Y1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1''@;'; put 'put ''MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0M1x1MjU0NFx1MjU0''@;'; put 'put ''NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Nl1bZ11dPTQyNDk2K2cseVs0MjQ5NitnXT1fWzE2Nl1bZ10pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2IwYlx1Y2IwY1x1Y2IwZFx1Y2IwZVx1Y2IwZlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOVx1Y2IxYVx1Y2IxYlx1Y2IxY1x1Y2IxZFx1Y2IxZVx1Y2IxZlx1Y2IyMlx1''@;'; put 'put ''Y2IyM1x1Y2IyNFx1Y2IyNVx1Y2IyNlx1Y2IyN1x1Y2IyOFx1Y2IyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2IyYVx1Y2IyYlx1Y2IyY1x1Y2IyZFx1Y2IyZVx1Y2IyZlx1Y2IzMFx1Y2IzMVx1Y2IzMlx1Y2IzM1x1Y2IzNFx1Y2IzNVx1Y2IzNlx1Y2IzN1x1Y2Iz''@;'; put 'put ''OFx1Y2IzOVx1Y2IzYVx1Y2IzYlx1Y2IzY1x1Y2IzZFx1Y2IzZVx1Y2IzZlx1Y2I0MFx1Y2I0Mlx1Y2I0M1x1Y2I0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0YVx1Y2I0Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MVx1Y2I1Mlx1''@;'; put 'put ''Y2I1M1x1Y2I1NFx1Y2I1NVx1Y2I1Nlx1Y2I1N1x1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZVx1Y2I1Zlx1Y2I2MFx1Y2I2MVx1Y2I2Mlx1Y2I2M1x1Y2I2NVx1Y2I2Nlx1Y2I2N1x1Y2I2OFx1Y2I2OVx1Y2I2YVx1Y2I2Ylx1Y2I2Y1x1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNj''@;'; put 'put ''NFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OVx1MzM5YVx1MzM5Ylx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM5Zlx1MzNhMFx1MzNhMVx1MzNhMlx1MzNjYVx1MzM4ZFx1MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMFx1MzNiMVx1MzNiMlx1''@;'; put 'put ''MzNiM1x1MzNiNFx1MzNiNVx1MzNiNlx1MzNiN1x1MzNiOFx1MzNiOVx1MzM4MFx1MzM4MVx1MzM4Mlx1MzM4M1x1MzM4NFx1MzNiYVx1MzNiYlx1MzNiY1x1MzNiZFx1MzNiZVx1MzNiZlx1MzM5MFx1MzM5MVx1MzM5Mlx1MzM5M1x1MzM5NFx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4''@;'; put 'put ''Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNhYlx1MzNhY1x1MzNkZFx1MzNkMFx1MzNkM1x1MzNjM1x1MzNjOVx1MzNkY1x1MzNjNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2N11bZ11dPTQyNzUyK2cseVs0Mjc1MitnXT1fWzE2N11bZ10pO2ZvcihfWzE2OF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I2ZFx1Y2I2ZVx1Y2I2Zlx1Y2I3MFx1Y2I3MVx1Y2I3Mlx1Y2I3M1x1Y2I3NFx1Y2I3NVx1Y2I3Nlx1Y2I3N1x1Y2I3YVx1Y2I3Ylx1Y2I3Y1x1Y2I3ZFx1Y2I3ZVx1Y2I3Zlx1''@;'; put 'put ''Y2I4MFx1Y2I4MVx1Y2I4Mlx1Y2I4M1x1Y2I4NFx1Y2I4NVx1Y2I4Nlx1Y2I4N1x1Y2I4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I4OVx1Y2I4YVx1Y2I4Ylx1Y2I4Y1x1Y2I4ZFx1Y2I4ZVx1Y2I4Zlx1Y2I5MFx1Y2I5MVx1Y2I5Mlx1Y2I5M1x1Y2I5NFx1Y2I5''@;'; put 'put ''NVx1Y2I5Nlx1Y2I5N1x1Y2I5OFx1Y2I5OVx1Y2I5YVx1Y2I5Ylx1Y2I5ZFx1Y2I5ZVx1Y2I5Zlx1Y2JhMFx1Y2JhMVx1Y2JhMlx1Y2JhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JhNFx1Y2JhNVx1Y2JhNlx1Y2JhN1x1Y2JhOFx1Y2JhOVx1Y2JhYVx1Y2JhYlx1''@;'; put 'put ''Y2JhY1x1Y2JhZFx1Y2JhZVx1Y2JhZlx1Y2JiMFx1Y2JiMVx1Y2JiMlx1Y2JiM1x1Y2JiNFx1Y2JiNVx1Y2JiNlx1Y2JiN1x1Y2JiOVx1Y2JiYVx1Y2JiYlx1Y2JiY1x1Y2JiZFx1Y2JiZVx1Y2JiZlx1Y2JjMFx1Y2JjMVx1Y2JjMlx1Y2JjM1x1Y2JjNFx4YzZceGQwXHhhYVx1MDEyNlx1ZmZm''@;'; put 'put ''ZFx1MDEzMlx1ZmZmZFx1MDEzZlx1MDE0MVx4ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YVx1ZmZmZFx1MzI2MFx1MzI2MVx1MzI2Mlx1MzI2M1x1MzI2NFx1MzI2NVx1MzI2Nlx1MzI2N1x1MzI2OFx1MzI2OVx1MzI2YVx1MzI2Ylx1MzI2Y1x1MzI2ZFx1MzI2ZVx1MzI2Zlx1MzI3MFx1''@;'; put 'put ''MzI3MVx1MzI3Mlx1MzI3M1x1MzI3NFx1MzI3NVx1MzI3Nlx1MzI3N1x1MzI3OFx1MzI3OVx1MzI3YVx1MzI3Ylx1MjRkMFx1MjRkMVx1MjRkMlx1MjRkM1x1MjRkNFx1MjRkNVx1MjRkNlx1MjRkN1x1MjRkOFx1MjRkOVx1MjRkYVx1MjRkYlx1MjRkY1x1MjRkZFx1MjRkZVx1MjRkZlx1MjRl''@;'; put 'put ''MFx1MjRlMVx1MjRlMlx1MjRlM1x1MjRlNFx1MjRlNVx1MjRlNlx1MjRlN1x1MjRlOFx1MjRlOVx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx4YmRcdTIxNTNcdTIxNTRceGJj''@;'; put 'put ''XHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bZ11dPTQzMDA4K2cseVs0MzAwOCtnXT1fWzE2OF1bZ10pO2ZvcihfWzE2OV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JjNVx1Y2JjNlx1Y2JjN1x1Y2JjOFx1Y2JjOVx1Y2JjYVx1Y2JjYlx1Y2JjY1x1Y2JjZFx1Y2JjZVx1Y2JjZlx1Y2JkMFx1Y2JkMVx1Y2JkMlx1Y2JkM1x1Y2JkNVx1Y2JkNlx1Y2JkN1x1''@;'; put 'put ''Y2JkOFx1Y2JkOVx1Y2JkYVx1Y2JkYlx1Y2JkY1x1Y2JkZFx1Y2JkZVx1Y2JkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYVx1Y2JlYlx1Y2JlY1x1Y2JlZFx1Y2JlZVx1Y2JlZlx1Y2Jm''@;'; put 'put ''MFx1Y2JmMVx1Y2JmMlx1Y2JmM1x1Y2JmNFx1Y2JmNVx1Y2JmNlx1Y2JmN1x1Y2JmOFx1Y2JmOVx1Y2JmYVx1Y2JmYlx1Y2JmY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JmZFx1Y2JmZVx1Y2JmZlx1Y2MwMFx1Y2MwMVx1Y2MwMlx1Y2MwM1x1Y2MwNFx1Y2MwNVx1''@;'; put 'put ''Y2MwNlx1Y2MwN1x1Y2MwOFx1Y2MwOVx1Y2MwYVx1Y2MwYlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNVx1Y2MxNlx1Y2MxN1x1Y2MxOFx1Y2MxOVx1Y2MxYVx1Y2MxYlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUw''@;'; put 'put ''MTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwXHUzMjAxXHUzMjAyXHUzMjAzXHUzMjA0XHUzMjA1XHUzMjA2XHUzMjA3XHUzMjA4XHUzMjA5XHUzMjBhXHUzMjBiXHUzMjBjXHUzMjBkXHUzMjBlXHUzMjBmXHUzMjEwXHUzMjEx''@;'; put 'put ''XHUzMjEyXHUzMjEzXHUzMjE0XHUzMjE1XHUzMjE2XHUzMjE3XHUzMjE4XHUzMjE5XHUzMjFhXHUzMjFiXHUyNDljXHUyNDlkXHUyNDllXHUyNDlmXHUyNGEwXHUyNGExXHUyNGEyXHUyNGEzXHUyNGE0XHUyNGE1XHUyNGE2XHUyNGE3XHUyNGE4XHUyNGE5XHUyNGFhXHUyNGFiXHUyNGFjXHUy''@;'; put 'put ''NGFkXHUyNGFlXHUyNGFmXHUyNGIwXHUyNGIxXHUyNGIyXHUyNGIzXHUyNGI0XHUyNGI1XHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdm''@;'; put 'put ''XHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtnXV09NDMyNjQrZyx5WzQzMjY0K2ddPV9bMTY5XVtnXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVjYzJkXHVjYzJmXHVjYzMxXHVjYzMyXHVjYzMzXHVjYzM0XHVjYzM1XHVjYzM2XHVjYzM3XHVjYzNhXHVjYzNmXHVjYzQwXHVjYzQxXHVjYzQyXHVjYzQz''@;'; put 'put ''XHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzRmXHVjYzUwXHVjYzUxXHVjYzUyXHVjYzUzXHVjYzU2XHVjYzVhXHVjYzViXHVjYzVjXHVjYzVkXHVjYzVlXHVjYzVmXHVjYzYxXHVjYzYyXHVj''@;'; put 'put ''YzYzXHVjYzY1XHVjYzY3XHVjYzY5XHVjYzZhXHVjYzZiXHVjYzZjXHVjYzZkXHVjYzZlXHVjYzZmXHVjYzcxXHVjYzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzczXHVjYzc0XHVjYzc2XHVjYzc3XHVjYzc4XHVjYzc5XHVjYzdhXHVjYzdiXHVjYzdjXHVjYzdk''@;'; put 'put ''XHVjYzdlXHVjYzdmXHVjYzgwXHVjYzgxXHVjYzgyXHVjYzgzXHVjYzg0XHVjYzg1XHVjYzg2XHVjYzg3XHVjYzg4XHVjYzg5XHVjYzhhXHVjYzhiXHVjYzhjXHVjYzhkXHVjYzhlXHVjYzhmXHVjYzkwXHVjYzkxXHVjYzkyXHVjYzkzXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUz''@;'; put 'put ''MDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYx''@;'; put 'put ''XHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUz''@;'; put 'put ''MDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcwXVtnXV09NDM1MjArZyx5WzQzNTIwK2ddPV9bMTcwXVtnXSk7Zm9yKF9bMTcx''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExXHVjY2EyXHVjY2EzXHVjY2E0XHVjY2E1XHVjY2E2XHVjY2E3XHVjY2Fh''@;'; put 'put ''XHVjY2FlXHVjY2FmXHVjY2IwXHVjY2IxXHVjY2IyXHVjY2IzXHVjY2I2XHVjY2I3XHVjY2I5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2JhXHVjY2JiXHVjY2JkXHVjY2JlXHVjY2JmXHVjY2MwXHVjY2MxXHVjY2MyXHVjY2MzXHVjY2M2XHVjY2M4XHVjY2NhXHVj''@;'; put 'put ''Y2NiXHVjY2NjXHVjY2NkXHVjY2NlXHVjY2NmXHVjY2QxXHVjY2QyXHVjY2QzXHVjY2Q1XHVjY2Q2XHVjY2Q3XHVjY2Q4XHVjY2Q5XHVjY2RhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2RiXHVjY2RjXHVjY2RkXHVjY2RlXHVjY2RmXHVjY2UwXHVjY2UxXHVjY2Uy''@;'; put 'put ''XHVjY2UzXHVjY2U1XHVjY2U2XHVjY2U3XHVjY2U4XHVjY2U5XHVjY2VhXHVjY2ViXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxXHVjY2YyXHVjY2YzXHVjY2Y0XHVjY2Y1XHVjY2Y2XHVjY2Y3XHVjY2Y4XHVjY2Y5XHVjY2ZhXHVjY2ZiXHVjY2ZjXHVjY2ZkXHUzMGExXHUzMGEyXHUzMGEzXHUz''@;'; put 'put ''MGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJm''@;'; put 'put ''XHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUz''@;'; put 'put ''MGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcxXVtnXV09NDM3NzYrZyx5WzQzNzc2K2ddPV9bMTcxXVtn''@;'; put 'put ''XSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyXHVjZDAzXHVjZDA0XHVjZDA1XHVjZDA2XHVjZDA3XHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDEx''@;'; put 'put ''XHVjZDEyXHVjZDEzXHVjZDE0XHVjZDE1XHVjZDE2XHVjZDE3XHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkXHVj''@;'; put 'put ''ZDJlXHVjZDJmXHVjZDMwXHVjZDMxXHVjZDMyXHVjZDMzXHVjZDM0XHVjZDM1XHVjZDM2XHVjZDM3XHVjZDM4XHVjZDNhXHVjZDNiXHVjZDNjXHVjZDNkXHVjZDNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDNmXHVjZDQwXHVjZDQxXHVjZDQyXHVjZDQzXHVjZDQ0''@;'; put 'put ''XHVjZDQ1XHVjZDQ2XHVjZDQ3XHVjZDQ4XHVjZDQ5XHVjZDRhXHVjZDRiXHVjZDRjXHVjZDRkXHVjZDRlXHVjZDRmXHVjZDUwXHVjZDUxXHVjZDUyXHVjZDUzXHVjZDU0XHVjZDU1XHVjZDU2XHVjZDU3XHVjZDU4XHVjZDU5XHVjZDVhXHVjZDViXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwXHUw''@;'; put 'put ''NDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJi''@;'; put 'put ''XHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUw''@;'; put 'put ''NDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcyXVtnXV09NDQwMzIrZyx5WzQ0MDMy''@;'; put 'put ''K2ddPV9bMTcyXVtnXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1XHVjZDY2XHVjZDY3XHVjZDY4XHVjZDY5XHVjZDZhXHVjZDZiXHVjZDZlXHVjZDcwXHVjZDcy''@;'; put 'put ''XHVjZDczXHVjZDc0XHVjZDc1XHVjZDc2XHVjZDc3XHVjZDc5XHVjZDdhXHVjZDdiXHVjZDdjXHVjZDdkXHVjZDdlXHVjZDdmXHVjZDgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDgxXHVjZDgyXHVjZDgzXHVjZDg0XHVjZDg1XHVjZDg2XHVjZDg3XHVjZDg5XHVj''@;'; put 'put ''ZDhhXHVjZDhiXHVjZDhjXHVjZDhkXHVjZDhlXHVjZDhmXHVjZDkwXHVjZDkxXHVjZDkyXHVjZDkzXHVjZDk2XHVjZDk3XHVjZDk5XHVjZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEz''@;'; put 'put ''XHVjZGE2XHVjZGE4XHVjZGFhXHVjZGFiXHVjZGFjXHVjZGFkXHVjZGFlXHVjZGFmXHVjZGIxXHVjZGIyXHVjZGIzXHVjZGI0XHVjZGI1XHVjZGI2XHVjZGI3XHVjZGI4XHVjZGI5XHVjZGJhXHVjZGJiXHVjZGJjXHVjZGJkXHVjZGJlXHVjZGJmXHVjZGMwXHVjZGMxXHVjZGMyXHVjZGMzXHVj''@;'; put 'put ''ZGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTczXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTczXVtnXV09NDQy''@;'; put 'put ''ODgrZyx5WzQ0Mjg4K2ddPV9bMTczXVtnXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGM2XHVjZGM3XHVjZGM4XHVjZGM5XHVjZGNhXHVjZGNiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxXHVjZGQy''@;'; put 'put ''XHVjZGQzXHVjZGQ0XHVjZGQ1XHVjZGQ2XHVjZGQ3XHVjZGQ4XHVjZGQ5XHVjZGRhXHVjZGRiXHVjZGRjXHVjZGRkXHVjZGRlXHVjZGRmXHVjZGUwXHVjZGUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGUyXHVjZGUzXHVjZGU0XHVjZGU1XHVjZGU2XHVjZGU3XHVj''@;'; put 'put ''ZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxXHVjZGYyXHVjZGYzXHVjZGY0XHVjZGY1XHVjZGY2XHVjZGY3XHVjZGZhXHVjZGZjXHVjZGZlXHVjZGZmXHVjZTAwXHVjZTAxXHVjZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTAzXHVjZTA1''@;'; put 'put ''XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkXHVjZTBlXHVjZTBmXHVjZTEwXHVjZTExXHVjZTEyXHVjZTEzXHVjZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhXHVjZTFiXHVjZTFjXHVjZTFkXHVjZTFlXHVjZTFmXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVj''@;'; put 'put ''ZTI5XHVjZTJhXHVjZTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTc0XVtnXV09NDQ1NDQrZyx5WzQ0NTQ0K2ddPV9bMTc0XVtnXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2XHVjZTM3XHVjZTM4''@;'; put 'put ''XHVjZTM5XHVjZTNhXHVjZTNiXHVjZTNjXHVjZTNkXHVjZTNlXHVjZTNmXHVjZTQwXHVjZTQxXHVjZTQyXHVjZTQzXHVjZTQ0XHVjZTQ1XHVjZTQ2XHVjZTQ3XHVjZTQ4XHVjZTQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTRhXHVjZTRiXHVjZTRjXHVjZTRkXHVj''@;'; put 'put ''ZTRlXHVjZTRmXHVjZTUwXHVjZTUxXHVjZTUyXHVjZTUzXHVjZTU0XHVjZTU1XHVjZTU2XHVjZTU3XHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyXHVjZTYzXHVjZTY0XHVjZTY1XHVjZTY2XHVjZTY3XHVjZTZhXHVjZTZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVjZTZlXHVjZTZmXHVjZTcwXHVjZTcxXHVjZTcyXHVjZTczXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkXHVjZTdlXHVjZTdmXHVjZTgwXHVjZTgxXHVjZTgyXHVjZTgzXHVjZTg2XHVjZTg4XHVjZThhXHVjZThiXHVjZThjXHVjZThkXHVjZThlXHVjZThmXHVjZTkyXHVj''@;'; put 'put ''ZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzVdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTc1XVtnXV09NDQ4MDArZyx5WzQ0ODAwK2ddPV9bMTc1XVtnXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTlhXHVjZTliXHVjZTljXHVjZTlkXHVjZTllXHVjZTlmXHVjZWEy''@;'; put 'put ''XHVjZWE2XHVjZWE3XHVjZWE4XHVjZWE5XHVjZWFhXHVjZWFiXHVjZWFlXHVjZWFmXHVjZWIwXHVjZWIxXHVjZWIyXHVjZWIzXHVjZWI0XHVjZWI1XHVjZWI2XHVjZWI3XHVjZWI4XHVjZWI5XHVjZWJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZWJiXHVjZWJjXHVj''@;'; put 'put ''ZWJkXHVjZWJlXHVjZWJmXHVjZWMwXHVjZWMyXHVjZWMzXHVjZWM0XHVjZWM1XHVjZWM2XHVjZWM3XHVjZWM4XHVjZWM5XHVjZWNhXHVjZWNiXHVjZWNjXHVjZWNkXHVjZWNlXHVjZWNmXHVjZWQwXHVjZWQxXHVjZWQyXHVjZWQzXHVjZWQ0XHVjZWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVjZWQ2XHVjZWQ3XHVjZWQ4XHVjZWQ5XHVjZWRhXHVjZWRiXHVjZWRjXHVjZWRkXHVjZWRlXHVjZWRmXHVjZWUwXHVjZWUxXHVjZWUyXHVjZWUzXHVjZWU2XHVjZWU3XHVjZWU5XHVjZWVhXHVjZWVkXHVjZWVlXHVjZWVmXHVjZWYwXHVjZWYxXHVjZWYyXHVjZWYzXHVj''@;'; put 'put ''ZWY2XHVjZWZhXHVjZWZiXHVjZWZjXHVjZWZkXHVjZWZlXHVjZWZmXHVhYzAwXHVhYzAxXHVhYzA0XHVhYzA3XHVhYzA4XHVhYzA5XHVhYzBhXHVhYzEwXHVhYzExXHVhYzEyXHVhYzEzXHVhYzE0XHVhYzE1XHVhYzE2XHVhYzE3XHVhYzE5XHVhYzFhXHVhYzFiXHVhYzFjXHVhYzFkXHVhYzIw''@;'; put 'put ''XHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRkXHVhYzU0XHVhYzU4XHVhYzVjXHVhYzcwXHVhYzcxXHVhYzc0XHVhYzc3XHVhYzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVh''@;'; put 'put ''Yzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVhY2E5XHVhY2FhXHVhY2FjXHVhY2FmXHVhY2IwXHVhY2I4XHVhY2I5XHVhY2JiXHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3''@;'; put 'put ''XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1XHVhY2Y2XHVhY2ZjXHVhY2ZkXHVhZDAwXHVhZDA0XHVhZDA2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzZd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtnXV09NDUwNTYrZyx5WzQ1MDU2K2ddPV9bMTc2XVtnXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3''@;'; put 'put ''XHVjZjA5XHVjZjBhXHVjZjBiXHVjZjBjXHVjZjBkXHVjZjBlXHVjZjBmXHVjZjEyXHVjZjE0XHVjZjE2XHVjZjE3XHVjZjE4XHVjZjE5XHVjZjFhXHVjZjFiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj''@;'; put 'put ''ZjI1XHVjZjI2XHVjZjI3XHVjZjI4XHVjZjI5XHVjZjJhXHVjZjJiXHVjZjJlXHVjZjMyXHVjZjMzXHVjZjM0XHVjZjM1XHVjZjM2XHVjZjM3XHVjZjM5XHVjZjNhXHVjZjNiXHVjZjNjXHVjZjNkXHVjZjNlXHVjZjNmXHVjZjQwXHVjZjQxXHVjZjQyXHVjZjQzXHVjZjQ0XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjQ1XHVjZjQ2XHVjZjQ3XHVjZjQ4XHVjZjQ5XHVjZjRhXHVjZjRiXHVjZjRjXHVjZjRkXHVjZjRlXHVjZjRmXHVjZjUwXHVjZjUxXHVjZjUyXHVjZjUzXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkXHVjZjVlXHVjZjVmXHVj''@;'; put 'put ''ZjYwXHVjZjYxXHVjZjYyXHVjZjYzXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUw''@;'; put 'put ''XHVhZDU0XHVhZDU4XHVhZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVh''@;'; put 'put ''ZGM0XHVhZGM4XHVhZGQwXHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQz''@;'; put 'put ''XHVhZTQ1XHVhZTQ2XHVhZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc3XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtnXV09NDUzMTIrZyx5WzQ1MzEyK2ddPV9bMTc3XVtnXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjZkXHVjZjZlXHVjZjZm''@;'; put 'put ''XHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5XHVjZjdhXHVjZjdiXHVjZjdjXHVjZjdkXHVjZjdlXHVjZjdmXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2XHVjZjg3XHVjZjg4XHVjZjg5XHVjZjhhXHVjZjhiXHVjZjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVjZjhlXHVjZjhmXHVjZjkwXHVjZjkxXHVjZjkyXHVjZjkzXHVjZjk0XHVjZjk1XHVjZjk2XHVjZjk3XHVjZjk4XHVjZjk5XHVjZjlhXHVjZjliXHVjZjljXHVjZjlkXHVjZjllXHVjZjlmXHVjZmEwXHVjZmEyXHVjZmEzXHVjZmE0XHVjZmE1XHVjZmE2XHVjZmE3XHVjZmE5''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmFhXHVjZmFiXHVjZmFjXHVjZmFkXHVjZmFlXHVjZmFmXHVjZmIxXHVjZmIyXHVjZmIzXHVjZmI0XHVjZmI1XHVjZmI2XHVjZmI3XHVjZmI4XHVjZmI5XHVjZmJhXHVjZmJiXHVjZmJjXHVjZmJkXHVjZmJlXHVjZmJmXHVj''@;'; put 'put ''ZmMwXHVjZmMxXHVjZmMyXHVjZmMzXHVjZmM1XHVjZmM2XHVjZmM3XHVjZmM4XHVjZmM5XHVjZmNhXHVjZmNiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQx''@;'; put 'put ''XHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVh''@;'; put 'put ''ZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYx''@;'; put 'put ''XHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc4XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1sxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtnXV09NDU1NjgrZyx5WzQ1NTY4K2ddPV9bMTc4XVtnXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmNj''@;'; put 'put ''XHVjZmNkXHVjZmNlXHVjZmNmXHVjZmQwXHVjZmQxXHVjZmQyXHVjZmQzXHVjZmQ0XHVjZmQ1XHVjZmQ2XHVjZmQ3XHVjZmQ4XHVjZmQ5XHVjZmRhXHVjZmRiXHVjZmRjXHVjZmRkXHVjZmRlXHVjZmRmXHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmVhXHVjZmViXHVjZmVjXHVjZmVkXHVjZmVlXHVjZmVmXHVjZmYyXHVjZmY0XHVjZmY2XHVjZmY3XHVjZmY4XHVjZmY5XHVjZmZhXHVjZmZiXHVjZmZkXHVjZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1XHVkMDA2XHVkMDA3XHVkMDA4''@;'; put 'put ''XHVkMDA5XHVkMDBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDBiXHVkMDBjXHVkMDBkXHVkMDBlXHVkMDBmXHVkMDEwXHVkMDEyXHVkMDEzXHVkMDE0XHVkMDE1XHVkMDE2XHVkMDE3XHVkMDE5XHVkMDFhXHVkMDFiXHVkMDFjXHVkMDFkXHVkMDFlXHVkMDFmXHVk''@;'; put 'put ''MDIwXHVkMDIxXHVkMDIyXHVkMDIzXHVkMDI0XHVkMDI1XHVkMDI2XHVkMDI3XHVkMDI4XHVkMDI5XHVkMDJhXHVkMDJiXHVkMDJjXHViMDVkXHViMDdjXHViMDdkXHViMDgwXHViMDg0XHViMDhjXHViMDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEw''@;'; put 'put ''XHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiXHViMGFjXHViMGFkXHViMGFlXHViMGFmXHViMGIxXHViMGIzXHViMGI0XHViMGI1XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4XHViMGM5XHViMGQwXHViMGQxXHViMGQ0XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHVi''@;'; put 'put ''MTA5XHViMTBiXHViMTBjXHViMTEwXHViMTEyXHViMTEzXHViMTE4XHViMTE5XHViMTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHViMTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHViMTM4XHViMTM5XHViMTQwXHViMTQxXHViMTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0''@;'; put 'put ''XHViMTU1XHViMTU4XHViMTVjXHViMTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgwXHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThkXHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4XHViMWNjXHViMWQwXHViMWQ0XHViMWRjXHViMWRkXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMTc5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtnXV09NDU4MjQrZyx5WzQ1ODI0K2ddPV9bMTc5XVtnXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVkMDJlXHVkMDJmXHVkMDMwXHVkMDMxXHVkMDMyXHVkMDMzXHVkMDM2XHVkMDM3XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNkXHVkMDNlXHVkMDNmXHVkMDQwXHVkMDQxXHVkMDQyXHVkMDQzXHVkMDQ2XHVkMDQ4XHVkMDRhXHVkMDRiXHVkMDRjXHVkMDRkXHVkMDRlXHVkMDRmXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5XHVkMDVhXHVkMDViXHVkMDVjXHVkMDVkXHVkMDVlXHVkMDVmXHVkMDYxXHVkMDYyXHVkMDYzXHVkMDY0XHVkMDY1XHVkMDY2XHVkMDY3XHVkMDY4XHVkMDY5''@;'; put 'put ''XHVkMDZhXHVkMDZiXHVkMDZlXHVkMDZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1XHVkMDc2XHVkMDc3XHVkMDc4XHVkMDc5XHVkMDdhXHVkMDdiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyXHVkMDgzXHVkMDg0XHVkMDg1XHVk''@;'; put 'put ''MDg2XHVkMDg3XHVkMDg4XHVkMDg5XHVkMDhhXHVkMDhiXHVkMDhjXHVkMDhkXHVkMDhlXHVkMDhmXHVkMDkwXHVkMDkxXHVkMDkyXHVkMDkzXHVkMDk0XHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBiXHViMjBj''@;'; put 'put ''XHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHViMmEzXHVi''@;'; put 'put ''MmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViXHViMmVjXHViMmVkXHViMmVlXHViMmVmXHViMmYzXHViMmY0XHViMmY1''@;'; put 'put ''XHViMmY3XHViMmY4XHViMmY5XHViMmZhXHViMmZiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtnXV09NDYwODArZyx5WzQ2MDgwK2ddPV9bMTgwXVtnXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVkMDk1XHVkMDk2XHVkMDk3XHVkMDk4XHVkMDk5XHVkMDlhXHVkMDliXHVkMDljXHVkMDlkXHVkMDllXHVkMDlmXHVkMGEwXHVkMGExXHVkMGEyXHVkMGEzXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkXHVkMGFlXHVkMGFmXHVkMGIwXHVk''@;'; put 'put ''MGIxXHVkMGIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhXHVkMGJiXHVkMGJjXHVkMGJkXHVkMGJlXHVkMGJmXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhXHVkMGNiXHVkMGNjXHVkMGNkXHVkMGNlXHVkMGNm''@;'; put 'put ''XHVkMGQyXHVkMGQ2XHVkMGQ3XHVkMGQ4XHVkMGQ5XHVkMGRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1XHVkMGU2XHVkMGU3XHVkMGU4XHVkMGU5XHVkMGVhXHVkMGViXHVkMGVlXHVkMGYyXHVk''@;'; put 'put ''MGYzXHVkMGY0XHVkMGY1XHVkMGY2XHVkMGY3XHVkMGY5XHVkMGZhXHVkMGZiXHVkMGZjXHVkMGZkXHVkMGZlXHVkMGZmXHVkMTAwXHVkMTAxXHVkMTAyXHVkMTAzXHVkMTA0XHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgz''@;'; put 'put ''XHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHVi''@;'; put 'put ''NDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4''@;'; put 'put ''XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHVi''@;'; put 'put ''NTM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtnXV09NDYzMzYrZyx5WzQ2MzM2K2ddPV9bMTgxXVtnXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTA1XHVkMTA2XHVkMTA3XHVkMTA4XHVkMTA5XHVkMTBhXHVkMTBiXHVkMTBjXHVkMTBlXHVkMTBmXHVkMTEwXHVkMTExXHVkMTEyXHVkMTEzXHVkMTE0XHVkMTE1XHVkMTE2XHVkMTE3XHVkMTE4XHVkMTE5XHVkMTFhXHVkMTFiXHVk''@;'; put 'put ''MTFjXHVkMTFkXHVkMTFlXHVkMTFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTIwXHVkMTIxXHVkMTIyXHVkMTIzXHVkMTI0XHVkMTI1XHVkMTI2XHVkMTI3XHVkMTI4XHVkMTI5XHVkMTJhXHVkMTJiXHVkMTJjXHVkMTJkXHVkMTJlXHVkMTJmXHVkMTMyXHVkMTMz''@;'; put 'put ''XHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTNmXHVkMTQyXHVkMTQ2XHVkMTQ3XHVkMTQ4XHVkMTQ5XHVkMTRhXHVkMTRiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVk''@;'; put 'put ''MTU1XHVkMTU2XHVkMTU3XHVkMTU4XHVkMTU5XHVkMTVhXHVkMTViXHVkMTVlXHVkMTYwXHVkMTYyXHVkMTYzXHVkMTY0XHVkMTY1XHVkMTY2XHVkMTY3XHVkMTY5XHVkMTZhXHVkMTZiXHVkMTZkXHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUw''@;'; put 'put ''XHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHViNWFhXHViNWFiXHViNWIwXHViNWIxXHViNWIzXHViNWI0XHViNWI1XHViNWJiXHViNWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHVi''@;'; put 'put ''NWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0XHViNjY4XHViNjljXHViNjlkXHViNmEwXHViNmE0XHViNmFiXHViNmFjXHViNmIxXHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5''@;'; put 'put ''XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHViNzU1XHViNzYwXHViNzY0XHViNzY4XHViNzcwXHViNzcxXHViNzczXHViNzc1XHViNzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHVi''@;'; put 'put ''NzkyXHViNzk2XHViNzk3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtnXV09NDY1OTIrZyx5WzQ2NTkyK2ddPV9bMTgyXVtnXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTZlXHVkMTZmXHVkMTcwXHVkMTcxXHVkMTcyXHVkMTczXHVkMTc0XHVkMTc1XHVkMTc2XHVkMTc3XHVkMTc4XHVkMTc5XHVkMTdhXHVkMTdiXHVkMTdkXHVkMTdlXHVkMTdmXHVkMTgwXHVkMTgxXHVkMTgyXHVk''@;'; put 'put ''MTgzXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMThiXHVkMThjXHVkMThkXHVkMThlXHVkMThmXHVkMTkwXHVkMTkxXHVkMTkyXHVkMTkzXHVkMTk0XHVkMTk1XHVkMTk2XHVkMTk3XHVkMTk4XHVkMTk5XHVkMTlh''@;'; put 'put ''XHVkMTliXHVkMTljXHVkMTlkXHVkMTllXHVkMTlmXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWE5XHVkMWFhXHVkMWFiXHVkMWFjXHVkMWFkXHVkMWFlXHVkMWFmXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVk''@;'; put 'put ''MWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxXHVkMWMyXHVkMWMzXHVkMWM0XHVkMWM1XHVkMWM2XHVkMWM3XHVkMWM4XHVkMWM5XHVkMWNhXHVkMWNiXHVkMWNjXHVkMWNkXHVkMWNlXHVkMWNmXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2Fi''@;'; put 'put ''XHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHVi''@;'; put 'put ''ODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMx''@;'; put 'put ''XHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHVi''@;'; put 'put ''OTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtnXV09NDY4NDgrZyx5WzQ2ODQ4K2ddPV9bMTgzXVtnXSk7Zm9yKF9bMTg0XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWQwXHVkMWQxXHVkMWQyXHVkMWQzXHVkMWQ0XHVkMWQ1XHVkMWQ2XHVkMWQ3XHVkMWQ5XHVkMWRhXHVkMWRiXHVkMWRjXHVkMWRkXHVkMWRlXHVkMWRmXHVkMWUwXHVkMWUxXHVkMWUyXHVk''@;'; put 'put ''MWUzXHVkMWU0XHVkMWU1XHVkMWU2XHVkMWU3XHVkMWU4XHVkMWU5XHVkMWVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWViXHVkMWVjXHVkMWVkXHVkMWVlXHVkMWVmXHVkMWYwXHVkMWYxXHVkMWYyXHVkMWYzXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5XHVkMWZh''@;'; put 'put ''XHVkMWZiXHVkMWZjXHVkMWZkXHVkMWZlXHVkMWZmXHVkMjAwXHVkMjAxXHVkMjAyXHVkMjAzXHVkMjA0XHVkMjA1XHVkMjA2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjA4XHVkMjBhXHVkMjBiXHVkMjBjXHVkMjBkXHVkMjBlXHVkMjBmXHVkMjExXHVkMjEyXHVk''@;'; put 'put ''MjEzXHVkMjE0XHVkMjE1XHVkMjE2XHVkMjE3XHVkMjE4XHVkMjE5XHVkMjFhXHVkMjFiXHVkMjFjXHVkMjFkXHVkMjFlXHVkMjFmXHVkMjIwXHVkMjIxXHVkMjIyXHVkMjIzXHVkMjI0XHVkMjI1XHVkMjI2XHVkMjI3XHVkMjI4XHVkMjI5XHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4''@;'; put 'put ''XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlXHViOWNmXHViOWQwXHViOWQxXHViOWQyXHViOWQ4XHViOWQ5XHViOWRiXHVi''@;'; put 'put ''OWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRl''@;'; put 'put ''XHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHVi''@;'; put 'put ''YWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtnXV09NDcxMDQrZyx5WzQ3MTA0K2ddPV9bMTg0XVtnXSk7Zm9yKF9b''@;'; put 'put ''MTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjJhXHVkMjJiXHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMzXHVkMjM1XHVkMjM2XHVkMjM3XHVkMjM4XHVkMjM5XHVkMjNhXHVkMjNiXHVkMjNlXHVkMjQwXHVk''@;'; put 'put ''MjQyXHVkMjQzXHVkMjQ0XHVkMjQ1XHVkMjQ2XHVkMjQ3XHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjRkXHVkMjRlXHVkMjRmXHVkMjUwXHVkMjUxXHVkMjUyXHVkMjUzXHVkMjU0XHVkMjU1XHVkMjU2XHVkMjU3XHVkMjU4''@;'; put 'put ''XHVkMjU5XHVkMjVhXHVkMjViXHVkMjVkXHVkMjVlXHVkMjVmXHVkMjYwXHVkMjYxXHVkMjYyXHVkMjYzXHVkMjY1XHVkMjY2XHVkMjY3XHVkMjY4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY5XHVkMjZhXHVkMjZiXHVkMjZjXHVkMjZkXHVkMjZlXHVkMjZmXHVk''@;'; put 'put ''MjcwXHVkMjcxXHVkMjcyXHVkMjczXHVkMjc0XHVkMjc1XHVkMjc2XHVkMjc3XHVkMjc4XHVkMjc5XHVkMjdhXHVkMjdiXHVkMjdjXHVkMjdkXHVkMjdlXHVkMjdmXHVkMjgyXHVkMjgzXHVkMjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHViYjAwXHViYjA0XHViYjBk''@;'; put 'put ''XHViYjBmXHViYjExXHViYjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNjXHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYxXHViYjYzXHViYjZjXHVi''@;'; put 'put ''Yjg4XHViYjhjXHViYjkwXHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHViYmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHViYzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHViYzExXHViYzE0XHViYzE1''@;'; put 'put ''XHViYzE2XHViYzE3XHViYzE4XHViYzFiXHViYzFjXHViYzFkXHViYzFlXHViYzFmXHViYzI0XHViYzI1XHViYzI3XHViYzI5XHViYzJkXHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQwXHViYzQxXHViYzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHViYzRkXHViYzUwXHViYzVkXHVi''@;'; put 'put ''Yzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg1XVtnXV09NDczNjArZyx5WzQ3MzYwK2ddPV9bMTg1''@;'; put 'put ''XVtnXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2XHVkMjk3XHVkMjk4XHVkMjk5XHVkMjlhXHVkMjliXHVkMjlkXHVkMjllXHVk''@;'; put 'put ''MjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1XHVkMmE2XHVkMmE3XHVkMmE4XHVkMmE5XHVkMmFhXHVkMmFiXHVkMmFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyXHVkMmIzXHVkMmI0XHVkMmI1XHVkMmI2XHVkMmI3XHVkMmJh''@;'; put 'put ''XHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzXHVkMmM0XHVkMmM1XHVkMmM2XHVkMmM3XHVkMmNhXHVkMmNjXHVkMmNkXHVkMmNlXHVkMmNmXHVkMmQwXHVkMmQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVk''@;'; put 'put ''MmQ5XHVkMmRhXHVkMmRiXHVkMmRkXHVkMmRlXHVkMmRmXHVkMmUwXHVkMmUxXHVkMmUyXHVkMmUzXHVkMmU2XHVkMmU3XHVkMmU4XHVkMmU5XHVkMmVhXHVkMmViXHVkMmVjXHVkMmVkXHVkMmVlXHVkMmVmXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZhXHViYzk5''@;'; put 'put ''XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHViY2ZjXHVi''@;'; put 'put ''ZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkzXHViZDk1''@;'; put 'put ''XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHViZTQ4XHVi''@;'; put 'put ''ZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg2XVtnXV09NDc2MTYrZyx5WzQ3''@;'; put 'put ''NjE2K2ddPV9bMTg2XVtnXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmZiXHVkMmZjXHVkMmZkXHVkMmZlXHVkMmZmXHVkMzAyXHVkMzA0XHVkMzA2XHVkMzA3XHVkMzA4XHVkMzA5XHVkMzBhXHVk''@;'; put 'put ''MzBiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3XHVkMzE4XHVkMzE5XHVkMzFhXHVkMzFiXHVkMzFlXHVkMzIyXHVkMzIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJm''@;'; put 'put ''XHVkMzMxXHVkMzMyXHVkMzMzXHVkMzM0XHVkMzM1XHVkMzM2XHVkMzM3XHVkMzNhXHVkMzNlXHVkMzNmXHVkMzQwXHVkMzQxXHVkMzQyXHVkMzQzXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzRhXHVkMzRiXHVkMzRjXHVk''@;'; put 'put ''MzRkXHVkMzRlXHVkMzRmXHVkMzUwXHVkMzUxXHVkMzUyXHVkMzUzXHVkMzU0XHVkMzU1XHVkMzU2XHVkMzU3XHVkMzU4XHVkMzU5XHVkMzVhXHVkMzViXHVkMzVjXHVkMzVkXHVkMzVlXHVkMzVmXHVkMzYwXHVkMzYxXHVkMzYyXHVkMzYzXHVkMzY0XHVkMzY1XHVkMzY2XHVkMzY3XHVkMzY4''@;'; put 'put ''XHVkMzY5XHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHVi''@;'; put 'put ''ZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRm''@;'; put 'put ''XHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVj''@;'; put 'put ''MGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtnXV09''@;'; put 'put ''NDc4NzIrZyx5WzQ3ODcyK2ddPV9bMTg3XVtnXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzZhXHVkMzZiXHVkMzZjXHVkMzZkXHVkMzZlXHVkMzZmXHVkMzcwXHVkMzcxXHVkMzcyXHVkMzczXHVk''@;'; put 'put ''Mzc0XHVkMzc1XHVkMzc2XHVkMzc3XHVkMzc4XHVkMzc5XHVkMzdhXHVkMzdiXHVkMzdlXHVkMzdmXHVkMzgxXHVkMzgyXHVkMzgzXHVkMzg1XHVkMzg2XHVkMzg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzky''@;'; put 'put ''XHVkMzkzXHVkMzk0XHVkMzk1XHVkMzk2XHVkMzk3XHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExXHVkM2EyXHVkM2EzXHVkM2E0XHVkM2E1XHVkM2E2XHVkM2E3XHVkM2FhXHVkM2FjXHVkM2FlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2FmXHVk''@;'; put 'put ''M2IwXHVkM2IxXHVkM2IyXHVkM2IzXHVkM2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkXHVkM2JlXHVkM2JmXHVkM2MwXHVkM2MxXHVkM2MyXHVkM2MzXHVkM2M2XHVkM2M3XHVkM2NhXHVkM2NiXHVkM2NjXHVkM2NkXHVkM2NlXHVkM2NmXHVkM2QxXHVkM2QyXHVkM2Qz''@;'; put 'put ''XHVkM2Q0XHVkM2Q1XHVkM2Q2XHVjMGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0XHVjMTA4XHVjMTEwXHVjMTE1XHVjMTFjXHVjMTFkXHVjMTFlXHVjMTFmXHVjMTIwXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVj''@;'; put 'put ''MTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5XHVjMTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVjMTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThl''@;'; put 'put ''XHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVjMTlkXHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJkXHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVjMWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVj''@;'; put 'put ''MjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBmXHVjMjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVjMjJiXHVjMjJkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTg4XVtnXV09NDgxMjgrZyx5WzQ4MTI4K2ddPV9bMTg4XVtnXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Q3XHVkM2Q5XHVkM2RhXHVkM2RiXHVkM2RjXHVkM2RkXHVkM2RlXHVkM2RmXHVk''@;'; put 'put ''M2UwXHVkM2UyXHVkM2U0XHVkM2U1XHVkM2U2XHVkM2U3XHVkM2U4XHVkM2U5XHVkM2VhXHVkM2ViXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2Zi''@;'; put 'put ''XHVkM2ZlXHVkNDAwXHVkNDAyXHVkNDAzXHVkNDA0XHVkNDA1XHVkNDA2XHVkNDA3XHVkNDA5XHVkNDBhXHVkNDBiXHVkNDBjXHVkNDBkXHVkNDBlXHVkNDBmXHVkNDEwXHVkNDExXHVkNDEyXHVkNDEzXHVkNDE0XHVkNDE1XHVkNDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVkNDE3XHVkNDE4XHVkNDE5XHVkNDFhXHVkNDFiXHVkNDFjXHVkNDFlXHVkNDFmXHVkNDIwXHVkNDIxXHVkNDIyXHVkNDIzXHVkNDI0XHVkNDI1XHVkNDI2XHVkNDI3XHVkNDI4XHVkNDI5XHVkNDJhXHVkNDJiXHVkNDJjXHVkNDJkXHVkNDJlXHVkNDJmXHVkNDMwXHVkNDMxXHVkNDMy''@;'; put 'put ''XHVkNDMzXHVkNDM0XHVkNDM1XHVkNDM2XHVkNDM3XHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVj''@;'; put 'put ''Mjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAw''@;'; put 'put ''XHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVj''@;'; put 'put ''M2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODldW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTg5XVtnXV09NDgzODQrZyx5WzQ4Mzg0K2ddPV9bMTg5XVtnXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDM4XHVkNDM5XHVkNDNhXHVkNDNiXHVkNDNjXHVkNDNkXHVk''@;'; put 'put ''NDNlXHVkNDNmXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1XHVkNDQ2XHVkNDQ3XHVkNDQ4XHVkNDQ5XHVkNDRhXHVkNDRiXHVkNDRjXHVkNDRkXHVkNDRlXHVkNDRmXHVkNDUwXHVkNDUxXHVkNDUyXHVkNDUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDU0XHVkNDU1''@;'; put 'put ''XHVkNDU2XHVkNDU3XHVkNDU4XHVkNDU5XHVkNDVhXHVkNDViXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1XHVkNDY2XHVkNDY3XHVkNDY4XHVkNDY5XHVkNDZhXHVkNDZiXHVkNDZjXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVkNDczXHVkNDc0XHVkNDc1XHVkNDc2XHVkNDc3XHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzXHVkNDg0XHVkNDg1XHVkNDg2XHVkNDg3XHVkNDhhXHVkNDhjXHVkNDhlXHVkNDhmXHVkNDkwXHVkNDkxXHVkNDkyXHVkNDkzXHVkNDk1XHVkNDk2''@;'; put 'put ''XHVkNDk3XHVkNDk4XHVkNDk5XHVkNDlhXHVkNDliXHVkNDljXHVkNDlkXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVj''@;'; put 'put ''NGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1''@;'; put 'put ''XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVj''@;'; put 'put ''NWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0XHVjNWM1XHVjNWM2XHVjNWM3XHVjNWM4XHVjNWM5XHVjNWNhXHVjNWNjXHVjNWNlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sx''@;'; put 'put ''OTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtnXV09NDg2NDArZyx5WzQ4NjQwK2ddPV9bMTkwXVtnXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDllXHVkNDlmXHVkNGEwXHVkNGExXHVk''@;'; put 'put ''NGEyXHVkNGEzXHVkNGE0XHVkNGE1XHVkNGE2XHVkNGE3XHVkNGE4XHVkNGFhXHVkNGFiXHVkNGFjXHVkNGFkXHVkNGFlXHVkNGFmXHVkNGIwXHVkNGIxXHVkNGIyXHVkNGIzXHVkNGI0XHVkNGI1XHVkNGI2XHVkNGI3XHVkNGI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVkNGI5XHVkNGJhXHVkNGJiXHVkNGJjXHVkNGJkXHVkNGJlXHVkNGJmXHVkNGMwXHVkNGMxXHVkNGMyXHVkNGMzXHVkNGM0XHVkNGM1XHVkNGM2XHVkNGM3XHVkNGM4XHVkNGM5XHVkNGNhXHVkNGNiXHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGQ2XHVkNGQ3XHVkNGQ4XHVkNGQ5XHVkNGRhXHVkNGRiXHVkNGRkXHVkNGRlXHVkNGUwXHVkNGUxXHVkNGUyXHVkNGUzXHVkNGU0XHVkNGU1XHVkNGU2XHVkNGU3XHVkNGU5XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYx''@;'; put 'put ''XHVkNGYyXHVkNGYzXHVkNGY0XHVkNGY1XHVkNGY2XHVkNGY3XHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVjNWQxXHVjNWQ0XHVjNWQ4XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjXHVjNWZkXHVjNWZlXHVj''@;'; put 'put ''NWZmXHVjNjAwXHVjNjAxXHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVjNjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVjNjJkXHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVjNjM5XHVjNjNiXHVjNjQwXHVjNjQx''@;'; put 'put ''XHVjNjQ0XHVjNjQ4XHVjNjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcxXHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgwXHVjNjg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4XHVjNjljXHVjNmE0XHVjNmE1XHVj''@;'; put 'put ''NmE3XHVjNmE5XHVjNmIwXHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVjNmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVjNmRkXHVjNmUwXHVjNmUxXHVjNmU4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkxXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1sxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtnXV09NDg4OTYrZyx5WzQ4ODk2K2ddPV9bMTkxXVtnXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGZlXHVkNGZmXHVk''@;'; put 'put ''NTAwXHVkNTAxXHVkNTAyXHVkNTAzXHVkNTA1XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkXHVkNTBlXHVkNTBmXHVkNTEwXHVkNTExXHVkNTEyXHVkNTEzXHVkNTE2XHVkNTE4XHVkNTE5XHVkNTFhXHVkNTFiXHVkNTFjXHVkNTFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVkNTFlXHVkNTFmXHVkNTIwXHVkNTIxXHVkNTIyXHVkNTIzXHVkNTI0XHVkNTI1XHVkNTI2XHVkNTI3XHVkNTI4XHVkNTI5XHVkNTJhXHVkNTJiXHVkNTJjXHVkNTJkXHVkNTJlXHVkNTJmXHVkNTMwXHVkNTMxXHVkNTMyXHVkNTMzXHVkNTM0XHVkNTM1XHVkNTM2XHVk''@;'; put 'put ''NTM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1XHVkNTQ2XHVkNTQ3XHVkNTQ4XHVkNTQ5XHVkNTRhXHVkNTRiXHVkNTRlXHVkNTUwXHVkNTUyXHVkNTUzXHVkNTU0''@;'; put 'put ''XHVkNTU1XHVkNTU2XHVkNTU3XHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVj''@;'; put 'put ''NzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRkXHVjNzRmXHVjNzUxXHVjNzUyXHVjNzUzXHVjNzU0XHVjNzU1XHVjNzU2XHVjNzU3XHVjNzU4XHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0''@;'; put 'put ''XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVj''@;'; put 'put ''N2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTky''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtnXV09NDkxNTIrZyx5WzQ5MTUyK2ddPV9bMTkyXVtnXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk''@;'; put 'put ''NTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlXHVkNTZmXHVkNTcwXHVkNTcxXHVkNTcyXHVkNTczXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdhXHVkNTdiXHVkNTdkXHVkNTdlXHVkNTdmXHVkNTgwXHVkNTgxXHVkNTgyXHVkNTgzXHVkNTg2XHVkNThhXHVkNThiXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxXHVkNTkyXHVkNTkzXHVkNTk0XHVkNTk1XHVkNTk2XHVkNTk3XHVkNTk4XHVkNTk5XHVkNTlhXHVkNTliXHVkNTljXHVkNTlkXHVkNTllXHVkNTlmXHVkNWEwXHVkNWExXHVkNWEyXHVkNWEzXHVk''@;'; put 'put ''NWE0XHVkNWE2XHVkNWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWE4XHVkNWE5XHVkNWFhXHVkNWFiXHVkNWFjXHVkNWFkXHVkNWFlXHVkNWFmXHVkNWIwXHVkNWIxXHVkNWIyXHVkNWIzXHVkNWI0XHVkNWI1XHVkNWI2XHVkNWI3XHVkNWI4XHVkNWI5XHVkNWJh''@;'; put 'put ''XHVkNWJiXHVkNWJjXHVkNWJkXHVkNWJlXHVkNWJmXHVkNWMwXHVkNWMxXHVkNWMyXHVkNWMzXHVkNWM0XHVkNWM1XHVkNWM2XHVkNWM3XHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVj''@;'; put 'put ''ODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJk''@;'; put 'put ''XHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVj''@;'; put 'put ''OTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtnXV09NDk0MDgrZyx5WzQ5NDA4K2ddPV9bMTkzXVtnXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQxXHVkNWQzXHVkNWQ0XHVkNWQ1XHVkNWQ2XHVkNWQ3XHVkNWRhXHVkNWRjXHVkNWRlXHVkNWRmXHVkNWUwXHVkNWUxXHVkNWUyXHVkNWUzXHVkNWU2XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVl''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWVmXHVkNWYwXHVkNWYxXHVkNWYyXHVkNWYzXHVkNWY2XHVkNWY4XHVkNWZhXHVkNWZiXHVkNWZjXHVkNWZkXHVkNWZlXHVkNWZmXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5XHVkNjBhXHVkNjBiXHVk''@;'; put 'put ''NjBjXHVkNjBkXHVkNjBlXHVkNjBmXHVkNjEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjE2XHVkNjE3XHVkNjE4XHVkNjE5XHVkNjFhXHVkNjFiXHVkNjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1XHVkNjI2XHVkNjI3XHVkNjI4XHVkNjI5''@;'; put 'put ''XHVkNjJhXHVkNjJiXHVkNjJjXHVkNjJlXHVkNjJmXHVkNjMwXHVkNjMxXHVkNjMyXHVkNjMzXHVkNjM0XHVkNjM1XHVkNjM2XHVkNjM3XHVkNjNhXHVkNjNiXHVjOWQ1XHVjOWQ2XHVjOWQ5XHVjOWRhXHVjOWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVj''@;'; put 'put ''OWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZjXHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVjYTE4XHVjYTI5XHVjYTRjXHVjYTRkXHVjYTUwXHVjYTU0XHVjYTVjXHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4''@;'; put 'put ''XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVjYWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVjXHVjYWY0XHVjYjA4XHVjYjEwXHVjYjE0XHVjYjE4XHVjYjIwXHVjYjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVj''@;'; put 'put ''YjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVjYzE0XHVjYzFjXHVjYzFkXHVjYzIxXHVjYzIyXHVjYzI3XHVjYzI4XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtnXV09NDk2NjQrZyx5WzQ5NjY0K2ddPV9bMTk0XVtnXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkXHVkNjVlXHVkNjVm''@;'; put 'put ''XHVkNjYwXHVkNjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjYyXHVkNjYzXHVkNjY0XHVkNjY1XHVkNjY2XHVkNjY4XHVkNjZhXHVkNjZiXHVkNjZjXHVkNjZkXHVkNjZlXHVkNjZmXHVkNjcyXHVkNjczXHVkNjc1XHVkNjc2XHVkNjc3XHVkNjc4XHVkNjc5XHVk''@;'; put 'put ''NjdhXHVkNjdiXHVkNjdjXHVkNjdkXHVkNjdlXHVkNjdmXHVkNjgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2XHVkNjg3XHVkNjg4XHVkNjg5XHVkNjhhXHVkNjhiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1''@;'; put 'put ''XHVkNjk2XHVkNjk3XHVkNjk4XHVkNjk5XHVkNjlhXHVkNjliXHVkNjljXHVkNjllXHVkNmEwXHVkNmEyXHVkNmEzXHVkNmE0XHVkNmE1XHVkNmE2XHVkNmE3XHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVj''@;'; put 'put ''YzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0''@;'; put 'put ''XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVj''@;'; put 'put ''ZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMz''@;'; put 'put ''XHVjZTM1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtnXV09NDk5MjArZyx5WzQ5OTIwK2ddPV9bMTk1XVtnXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxXHVkNmIyXHVkNmIzXHVkNmI0XHVkNmI1XHVkNmI2XHVkNmI3XHVkNmI4XHVkNmJhXHVkNmJjXHVkNmJkXHVkNmJlXHVkNmJmXHVkNmMwXHVkNmMxXHVkNmMyXHVkNmMzXHVkNmM2''@;'; put 'put ''XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhXHVkNmRiXHVkNmRjXHVkNmRkXHVkNmRlXHVkNmRmXHVkNmUxXHVkNmUyXHVk''@;'; put 'put ''NmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5XHVkNmVhXHVkNmViXHVkNmVjXHVkNmVkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2XHVkNmY3XHVkNmY4XHVkNmY5XHVkNmZhXHVkNmZiXHVkNmZl''@;'; put 'put ''XHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1XHVkNzA2XHVkNzA3XHVkNzA4XHVkNzA5XHVkNzBhXHVkNzBiXHVkNzBjXHVkNzBkXHVkNzBlXHVkNzBmXHVkNzEwXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVj''@;'; put 'put ''ZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0''@;'; put 'put ''XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVj''@;'; put 'put ''ZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0''@;'; put 'put ''XHVkMDM1XHVkMDM4XHVkMDNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtnXV09NTAxNzYrZyx5WzUwMTc2K2ddPV9bMTk2XVtnXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVkNzFkXHVkNzFlXHVkNzFmXHVkNzIxXHVkNzIyXHVkNzIzXHVkNzI0XHVkNzI1XHVkNzI2XHVkNzI3XHVkNzJhXHVkNzJjXHVkNzJlXHVkNzJmXHVkNzMw''@;'; put 'put ''XHVkNzMxXHVkNzMyXHVkNzMzXHVkNzM2XHVkNzM3XHVkNzM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzNhXHVkNzNiXHVkNzNkXHVkNzNlXHVkNzNmXHVkNzQwXHVkNzQxXHVkNzQyXHVkNzQzXHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhXHVkNzRiXHVkNzRjXHVk''@;'; put 'put ''NzRkXHVkNzRlXHVkNzRmXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhXHVkNzViXHVkNzVjXHVkNzVkXHVkNzVlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzVmXHVkNzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZm''@;'; put 'put ''XHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1XHVkNzc2XHVkNzc3XHVkNzc4XHVkNzc5XHVkNzdhXHVkNzdiXHVkNzdlXHVkNzdmXHVkNzgwXHVkNzgyXHVkNzgzXHVkNzg0XHVkNzg1XHVkNzg2XHVkNzg3XHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVk''@;'; put 'put ''MDU4XHVkMDYwXHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVkMGE1XHVkMGE4XHVkMGFjXHVkMGI0XHVkMGI1XHVkMGI3XHVkMGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRj''@;'; put 'put ''XHVkMGRkXHVkMGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBkXHVkMTMwXHVkMTMxXHVkMTM0XHVkMTM4XHVkMTNhXHVkMTQwXHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVk''@;'; put 'put ''MTYxXHVkMTY4XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVkMWIwXHVkMWIxXHVkMWIzXHVkMWI1XHVkMWJhXHVkMWJjXHVkMWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNj''@;'; put 'put ''XHVkMjNkXHVkMjNmXHVkMjQxXHVkMjQ4XHVkMjVjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtnXV09NTA0MzIrZyx5WzUwNDMyK2ddPV9bMTk3XVtnXSk7Zm9yKF9bMTk4XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzhkXHVkNzhlXHVkNzhmXHVkNzkxXHVkNzkyXHVkNzkzXHVkNzk0XHVkNzk1XHVkNzk2XHVkNzk3XHVkNzlhXHVkNzljXHVkNzllXHVkNzlmXHVkN2EwXHVkN2ExXHVkN2EyXHVkN2Ez''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVk''@;'; put 'put ''Mjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAw''@;'; put 'put ''XHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVk''@;'; put 'put ''MzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2Vj''@;'; put 'put ''XHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4XVtnXV09NTA2ODgrZyx5WzUwNjg4K2ddPV9bMTk4XVtnXSk7Zm9y''@;'; put 'put ''KF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDA4XHVkNDFkXHVk''@;'; put 'put ''NDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4''@;'; put 'put ''XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVk''@;'; put 'put ''NTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAx''@;'; put 'put ''XHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk5XVtnXV09NTA5NDQrZyx5WzUwOTQ0K2ddPV9b''@;'; put 'put ''MTk5XVtnXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk''@;'; put 'put ''NjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0XHVkNjU1XHVkNjU4XHVkNjVjXHVkNjY3XHVkNjY5XHVkNjcwXHVkNjcxXHVkNjc0XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVkNjkwXHVkNjk0XHVkNjlk''@;'; put 'put ''XHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVkNmQ0XHVkNmQ3XHVkNmQ5XHVkNmUwXHVkNmU0XHVkNmU4XHVkNmYwXHVkNmY1XHVkNmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzExXHVkNzE4XHVkNzE5XHVk''@;'; put 'put ''NzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5XHVkNzUwXHVkNzUxXHVkNzU0XHVkNzU2XHVkNzU3XHVkNzU4XHVkNzU5XHVkNzYwXHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVkNzZjXHVkNzcwXHVkNzc0''@;'; put 'put ''XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAwXVtnXV09NTEyMDArZyx5''@;'; put 'put ''WzUxMjAwK2ddPV9bMjAwXVtnXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNm''@;'; put 'put ''XHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3''@;'; put 'put ''NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIx''@;'; put 'put ''XHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAyXVtn''@;'; put 'put ''XV09NTE3MTIrZyx5WzUxNzEyK2ddPV9bMjAyXVtnXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIx''@;'; put 'put ''XHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1''@;'; put 'put ''YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZh''@;'; put 'put ''XHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDNdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMjAzXVtnXV09NTE5NjgrZyx5WzUxOTY4K2ddPV9bMjAzXVtnXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1MDQ4XHU2MWE5XHU2M2VkXHU2NGNhXHU2ODNjXHU2YTg0XHU2ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZk''@;'; put 'put ''XHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdjXHU2MTRhXHU3YjlkXHU4YjE5XHU5MjU3XHU5MzhjXHU0ZWFjXHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1''@;'; put 'put ''ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZjXHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3MGYxXHU3NDlmXHU3NGE1XHU3NGNhXHU3NWQ5XHU3ODZjXHU3OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2''@;'; put 'put ''XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYzXHU1YzQ2XHU2MGI4XHU2MjEyXHU2ODQyXHU2OGIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDRdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjA0XVtnXV09NTIyMjQrZyx5WzUyMjI0K2ddPV9bMjA0XVtnXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQx''@;'; put 'put ''XHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4''@;'; put 'put ''ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZj''@;'; put 'put ''XHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA1XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1syMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtnXV09NTI0ODArZyx5WzUyNDgwK2ddPV9bMjA1XVtnXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZh''@;'; put 'put ''XHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5''@;'; put 'put ''NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRi''@;'; put 'put ''XHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA2XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1syMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtnXV09NTI3MzYrZyx5WzUyNzM2K2ddPV9bMjA2XVtnXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzQwXHU1M2UzXHU1M2U1XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2N2U5XHU2OWNi''@;'; put 'put ''XHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlkXHU3MDc4XHU3MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5XHU3YTc2XHU3ZDdmXHU4MDA5XHU4MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2XHU5OWQyXHU5''@;'; put 'put ''YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1YzQwXHU4M2NhXHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3YTk4XHU3ZmE0XHU4OGQ5XHU4ZWNkXHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1MDI2XHU1MjM4''@;'; put 'put ''XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2MzcyXHU2YjBhXHU2ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4XHU4ZTc2XHU5NWQ1XHU2NzNhXHU2YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MjA3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtnXV09NTI5OTIrZyx5WzUyOTkyK2ddPV9bMjA3XVtnXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThm''@;'; put 'put ''XHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4''@;'; put 'put ''MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2''@;'; put 'put ''XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtnXV09NTMyNDgrZyx5WzUzMjQ4K2ddPV9bMjA4XVtnXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4''@;'; put 'put ''XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5''@;'; put 'put ''YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlXHVmOTBmXHVmOTEwXHVmOTExXHVmOTEyXHVmOTEzXHU5MGEzXHVmOTE0XHVmOTE1''@;'; put 'put ''XHVmOTE2XHVmOTE3XHVmOTE4XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtnXV09NTM1MDQrZyx5WzUzNTA0K2ddPV9bMjA5XVtnXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDBkXHVmOTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4XHVmOTI4XHVmOTI5XHVmOTJhXHVmOTJi''@;'; put 'put ''XHVmOTJjXHU0ZTQzXHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1OTczXHU1ZTc0XHU2NDlhXHU3OWNhXHU1ZmY1XHU2MDZjXHU2MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVm''@;'; put 'put ''OTMzXHVmOTM0XHVmOTM1XHVmOTM2XHVmOTM3XHVmOTM4XHU5OWQxXHVmOTM5XHVmOTNhXHVmOTNiXHVmOTNjXHVmOTNkXHVmOTNlXHVmOTNmXHVmOTQwXHVmOTQxXHVmOTQyXHVmOTQzXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2MGYxXHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4''@;'; put 'put ''XHVmOTQ5XHU1YzNmXHVmOTRhXHVmOTRiXHVmOTRjXHVmOTRkXHVmOTRlXHVmOTRmXHVmOTUwXHVmOTUxXHU1YWU5XHU4YTI1XHU2NzdiXHU3ZDEwXHVmOTUyXHVmOTUzXHVmOTU0XHVmOTU1XHVmOTU2XHVmOTU3XHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1MzNmXHU2ZWJhXHU1''@;'; put 'put ''OTFhXHU4MzM2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtnXV09NTM3NjArZyx5WzUzNzYwK2ddPV9bMjEwXVtnXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3''@;'; put 'put ''XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4''@;'; put 'put ''MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBk''@;'; put 'put ''XHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2''@;'; put 'put ''MzExXHU2Mzg5XHU2NDE3XHU2ODQzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjExXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtnXV09NTQwMTYrZyx5WzU0MDE2K2ddPV9bMjExXVtnXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0''@;'; put 'put ''XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1''@;'; put 'put ''OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYz''@;'; put 'put ''XHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5''@;'; put 'put ''YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEyXVtnXV09NTQyNzIrZyx5WzU0MjcyK2ddPV9bMjEyXVtnXSk7Zm9yKF9bMjEzXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjNmXHU4N2JhXHU4OGY4XHU5MDhm''@;'; put 'put ''XHVmOTVjXHU2ZDFiXHU3MGQ5XHU3M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0XHU2YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmViXHU3YzQzXHU3ZTljXHU4''@;'; put 'put ''NWNkXHU4OTY0XHU4OWJkXHU2MmM5XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5MGRlXHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2ODgxXHU2YTExXHU3Y2Fl''@;'; put 'put ''XHU3Y2IxXHU3Y2U3XHU4MjZmXHU4YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNlXHU2NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1MjliXHU2NmM2XHU2Yjc3XHU3''@;'; put 'put ''MDFkXHU3OTJiXHU4ZjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEzXVtnXV09NTQ1MjgrZyx5WzU0NTI4K2ddPV9bMjEzXVtnXSk7''@;'; put 'put ''Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ5XHU3NDg5''@;'; put 'put ''XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3''@;'; put 'put ''ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1''@;'; put 'put ''XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0''@;'; put 'put ''ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtnXV09NTQ3ODQrZyx5WzU0Nzg0K2dd''@;'; put 'put ''PV9bMjE0XVtnXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3''@;'; put 'put ''ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5''@;'; put 'put ''XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3''@;'; put 'put ''NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtnXV09NTUwNDAr''@;'; put 'put ''Zyx5WzU1MDQwK2ddPV9bMjE1XVtnXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5YjU0XHU5ZWJiXHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2FiXHU5MDg4XHU0ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRlXHU2MTYyXHU2MzNkXHU2NjY5XHU2''@;'; put 'put ''NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFjXHU2MmI5XHU2NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0ZWExXHU1OTg0XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3ZjU0XHU4MjkyXHU4MzJiXHU4M2Jk''@;'; put 'put ''XHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3Zjc1XHU4Y2I3XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4YzhhXHU5NjRjXHU5YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFiXHU3NmYyXHU3NmRmXHU4NDBjXHU1''@;'; put 'put ''MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWI1XHU2ZWM1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE2''@;'; put 'put ''XVtnXV09NTUyOTYrZyx5WzU1Mjk2K2ddPV9bMjE2XVtnXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2''@;'; put 'put ''NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIy''@;'; put 'put ''XHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3''@;'; put 'put ''NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTddW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjE3XVtnXV09NTU1NTIrZyx5WzU1NTUyK2ddPV9bMjE3XVtnXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3''@;'; put 'put ''NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBm''@;'; put 'put ''XHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3''@;'; put 'put ''NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMThdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtnXV09NTU4MDgrZyx5WzU1ODA4K2ddPV9bMjE4XVtnXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjdjXHU4ZGNiXHU5MWIxXHU5MjYyXHU5YWVlXHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRhXHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2''@;'; put 'put ''OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFhXHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4YjE3XHU5MGE2XHU5NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVmOTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRh''@;'; put 'put ''XHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2NmXHU2ODIyXHU3NjdkXHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBhXHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3''@;'; put 'put ''ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2Y2Q1XHU3NDNhXHU1MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2YTk3XHU3NGE3XHU3NjU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE5XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1syMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtnXV09NTYwNjQrZyx5WzU2MDY0K2ddPV9bMjE5XVtnXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1''@;'; put 'put ''MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRj''@;'; put 'put ''XHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2''@;'; put 'put ''MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIwXS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1syMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtnXV09NTYzMjArZyx5WzU2MzIwK2ddPV9bMjIwXVtnXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4''@;'; put 'put ''MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEw''@;'; put 'put ''XHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1''@;'; put 'put ''ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtnXV09NTY1NzYrZyx5WzU2NTc2K2ddPV9bMjIxXVtnXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRiXHU5ZjNiXHU1NmFjXHU1''@;'; put 'put ''YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2YmFmXHU2ZDVjXHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4Y2E3XHU4Y2QzXHU5ODNiXHU2MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1MGZmXHU1M2YyXHU1M2Y4''@;'; put 'put ''XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGViXHU1OTYyXHU1YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYzXHU1ZTJiXHU1Zjk5XHU2MDFkXHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNlXHU3''@;'; put 'put ''OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3ZDE3XHU3ZDcyXHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4NmM3XHU4OGRmXHU4YTUwXHU4YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVmOTZhXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtnXV09NTY4MzIrZyx5WzU2ODMyK2ddPV9bMjIyXVtnXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5''@;'; put 'put ''NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2Uw''@;'; put 'put ''XHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3''@;'; put 'put ''ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3Zjcy''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtnXV09NTcwODgrZyx5WzU3MDg4K2ddPV9bMjIzXVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1''@;'; put 'put ''OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0''@;'; put 'put ''XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4''@;'; put 'put ''OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRi''@;'; put 'put ''XHU3NzAxXHU3YjZjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5MTkyXHU0ZTE2XHU1MmUyXHU2''@;'; put 'put ''YjcyXHU2ZDE3XHU3YTA1XHU3YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBmXHU1YzExXHU1ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQyXHU3NTI2XHU3NThmXHU3NThl''@;'; put 'put ''XHU3NjE5XHU3YjExXHU3YmUwXHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5MDYxXHU5MGI1XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZjXHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5MDFmXHU1YjZiXHU1ZGZkXHU2''@;'; put 'put ''NDBkXHU4NGMwXHU5MDVjXHU5OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAxXHU5ODBjXHU1MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1NzgyXHU1OGZkXHU1YWMyXHU1Yjg4''@;'; put 'put ''XHU1Y2FiXHU1Y2MwXHU1ZTI1XHU2MTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2''@;'; put 'put ''NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIw''@;'; put 'put ''XHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4''@;'; put 'put ''M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0''@;'; put 'put ''XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtnXSk7Zm9yKF9bMjI3''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDY5XHU3NDVmXHU4MTlkXHU4''@;'; put 'put ''NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJk''@;'; put 'put ''XHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4''@;'; put 'put ''YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1''@;'; put 'put ''XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEyK2ddPV9bMjI3XVtn''@;'; put 'put ''XSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTcyXHU2''@;'; put 'put ''ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0ZmM0XHU1MTUyXHU1NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5XHU4MmJkXHU4M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNmXHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVk''@;'; put 'put ''XHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0XHU5ODRlXHU5YzEwXHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2NjRmXHU2ODQ4XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5''@;'; put 'put ''NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3MmNlXHU5ZDI4XHU0ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2YjgzXHU3OWU3XHU5ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhk''@;'; put 'put ''XHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgzNjgrZyx5WzU4MzY4''@;'; put 'put ''K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4''@;'; put 'put ''XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5''@;'; put 'put ''OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0''@;'; put 'put ''XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtnXV09NTg2''@;'; put 'put ''MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFi''@;'; put 'put ''XHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3''@;'; put 'put ''MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIx''@;'; put 'put ''XHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3XHU3MWMxXHU4NDQ5XHVmOWE4XHVmOWE5XHU1ODRiXHVmOWFhXHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2''@;'; put 'put ''XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJmXHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3NGQ0XHU3NmM4XHU3YTRlXHU3ZTkzXHVmOWFmXHVmOWIwXHU4MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVm''@;'; put 'put ''OWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRkXHU4NjAyXHVmOWI2XHU4OGQ0XHU4YTYzXHU4YjdkXHU4YzZiXHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNl''@;'; put 'put ''XHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJhXHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2NTU2XHU2NWZmXHU2NjY0XHU2OGE3XHU2YzVhXHU2ZmIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1''@;'; put 'put ''XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3''@;'; put 'put ''ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJk''@;'; put 'put ''XHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzJd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1''@;'; put 'put ''XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1''@;'; put 'put ''MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1''@;'; put 'put ''XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDRiXHU5Njk1XHU5NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEyXHU1N2EzXHU1YTliXHU1YWM0''@;'; put 'put ''XHU1YmMzXHU2MDI4XHU2MTNmXHU2M2Y0XHU2Yzg1XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3MzNmXHU3NDU3XHU4MmQxXHU4ODgxXHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1MGRlXHU1MzcxXHU1NzBkXHU1''@;'; put 'put ''OWQ0XHU1YTAxXHU1YzA5XHU2MTcwXHU2NjkwXHU2ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMzXHU4NDBlXHU4NDY2XHU4NTNmXHU4NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3XHU1NTJmXHU1NWE5XHU1Yjdh''@;'; put 'put ''XHU1YmE1XHU1ZTdjXHU1ZTdkXHU1ZWJlXHU2MGEwXHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2NTM4XHU2NzA5XHVmOWM4XHU2N2Q0XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM0XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0XVtnXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4''@;'; put 'put ''XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4''@;'; put 'put ''ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVl''@;'; put 'put ''XHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtnXV09NjAxNjArZyx5WzYwMTYwK2ddPV9bMjM1XVtnXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjVi''@;'; put 'put ''XHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVm''@;'; put 'put ''OWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYx''@;'; put 'put ''XHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtnXV09NjA0MTYrZyx5WzYwNDE2K2ddPV9bMjM2XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOWY3XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0ZWQ0XHU1MjNhXHU1NGE4XHU1OWM5''@;'; put 'put ''XHU1OWZmXHU1YjUwXHU1YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3Mzg2XHU3NGY3XHU3NWI1XHU3OGMxXHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZhXHU1NmJjXHU2NWFiXHU2NjI4XHU3''@;'; put 'put ''MDdjXHU3MGI4XHU3MjM1XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJhXHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1OGJiXHU1OGVmXHU1OTZjXHU1YzA3''@;'; put 'put ''XHU1ZTMzXHU1ZTg0XHU1ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2ZjNmXHU3MjQ2XHVmOWZhXHU3MzUwXHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNmXHU4OGRkXHU4ZDEzXHU5MWFjXHU5''@;'; put 'put ''NTc3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkz''@;'; put 'put ''XHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3''@;'; put 'put ''NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNl''@;'; put 'put ''XHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2''@;'; put 'put ''YmJmXHU2YzA4XHU2ZmIxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRj''@;'; put 'put ''XHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3''@;'; put 'put ''MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2Zl''@;'; put 'put ''XHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5''@;'; put 'put ''MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtnXV09NjExODQrZyx5WzYxMTg0K2ddPV9bMjM5XVtnXSk7Zm9yKF9bMjQwXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1Mjkx''@;'; put 'put ''XHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZkXHU3YjJjXHU4MWNkXHU4NWJhXHU4OGZkXHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0XHU5NjliXHU5NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1''@;'; put 'put ''ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2OGQ3XHU2OWZkXHU2ZjE1XHU2ZjZlXHU3MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3NzNhXHU3OTU2XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3''@;'; put 'put ''XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUzXHU5NjNiXHU5NmQ1XHU5Y2U1XHU2NWNmXHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4XHU1YzBhXHU1MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2''@;'; put 'put ''ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQwXVtnXV09NjE0NDArZyx5WzYxNDQwK2ddPV9bMjQwXVtnXSk7Zm9yKF9b''@;'; put 'put ''MjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTJhXHU4ZTM1XHU5Mzdl''@;'; put 'put ''XHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2''@;'; put 'put ''ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2Zi''@;'; put 'put ''XHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3''@;'; put 'put ''MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQxXVtnXV09NjE2OTYrZyx5WzYxNjk2K2ddPV9bMjQx''@;'; put 'put ''XVtnXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFi''@;'; put 'put ''XHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVm''@;'; put 'put ''OWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFl''@;'; put 'put ''XHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4''@;'; put 'put ''NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtnXV09NjE5NTIrZyx5WzYx''@;'; put 'put ''OTUyK2ddPV9bMjQyXVtnXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5M2Y2XHU5NmM2XHU1ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1MDFmXHU1M2M5XHU1NWRmXHU1ZDZmXHU1ZGVlXHU2YjIxXHU2YjY0XHU3OGNiXHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5''@;'; put 'put ''ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgyXHU3Y2IyXHU3ZTk4XHU4YjlhXHU4ZDBhXHU5NDdkXHU5OTEwXHU5OTRjXHU1MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFj''@;'; put 'put ''XHU3YWQ5XHU4YjkyXHU4Yjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1ZWUwXHU1ZjcwXHU2MTM0XHU2NTVlXHU2NjBjXHU2NjM2XHU2NmEyXHU2OWNkXHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1''@;'; put 'put ''YmMwXHU1YmU4XHU1ZjY5XHU2M2ExXHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3XHU5MWY1XHU1MThhXHU2N2Y1XHU3YjU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQzXVtnXV09''@;'; put 'put ''NjIyMDgrZyx5WzYyMjA4K2ddPV9bMjQzXVtnXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1''@;'; put 'put ''ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2Jl''@;'; put 'put ''XHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2''@;'; put 'put ''NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjQ0XVtnXV09NjI0NjQrZyx5WzYyNDY0K2ddPV9bMjQ0XVtnXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3''@;'; put 'put ''MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFl''@;'; put 'put ''XHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4''@;'; put 'put ''ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDVdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjQ1XVtnXV09NjI3MjArZyx5WzYyNzIwK2ddPV9bMjQ1XVtnXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDA1XHU1M2Q2XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMxXHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0XHU1M2EwXHU2MGZiXHU2ZTJjXHU1''@;'; put 'put ''YzY0XHU0Zjg4XHU1MDI0XHU1NWU0XHU1Y2Q5XHU1ZTVmXHU2MDY1XHU2ODk0XHU2Y2JiXHU2ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5ZjUyXHU1MjQ3XHU1MmM1XHU5OGVk''@;'; put 'put ''XHU4OWFhXHU0ZTAzXHU2N2QyXHU2ZjA2XHU0ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4XHU2ZDc4XHU3NDFiXHU3ODI3XHU5MWRkXHU5MzdjXHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUzXHU2MmQ2XHU2NzM2XHU2OTU1XHU4''@;'; put 'put ''MjM1XHU5NjQwXHU5OWIxXHU5OWRkXHU1MDJjXHU1MzUzXHU1NTQ0XHU1NzdjXHVmYTAxXHU2MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sy''@;'; put 'put ''NDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtnXV09NjI5NzYrZyx5WzYyOTc2K2ddPV9bMjQ2XVtnXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2''@;'; put 'put ''NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEw''@;'; put 'put ''XHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2''@;'; put 'put ''MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjExXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ3XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1syNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtnXV09NjMyMzIrZyx5WzYzMjMyK2ddPV9bMjQ3XVtnXSk7Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2''@;'; put 'put ''ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNk''@;'; put 'put ''XHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5''@;'; put 'put ''MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ4''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ4XVtnXV09NjM0ODgrZyx5WzYzNDg4K2ddPV9bMjQ4XVtnXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3NmFlXHU4OGFiXHU5MDdmXHU5NjQyXHU1''@;'; put 'put ''MzM5XHU1ZjNjXHU1ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUwXHU5NzFlXHU5YzE1XHU1OGQxXHU1Yjc4''@;'; put 'put ''XHU4NjUwXHU4YjE0XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N2QzXHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1NThhXHU2YWJiXHU2ZGI1XHU3ZGQ4XHU4''@;'; put 'put ''MjY2XHU5MjljXHU5Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDliXHU4MjJhXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMjQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ5XVtnXV09NjM3NDQrZyx5WzYzNzQ0K2ddPV9bMjQ5XVtnXSk7Zm9yKF9bMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2''@;'; put 'put ''ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjVi''@;'; put 'put ''XHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4''@;'; put 'put ''MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMjUwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtnXV09NjRlMytnLHlbNjRlMytnXT1fWzI1MF1bZ10pO2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdh''@;'; put 'put ''Mlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1''@;'; put 'put ''NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2''@;'; put 'put ''NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1''@;'; put 'put ''NzU3NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bZ11dPTY0MjU2K2cseVs2NDI1NitnXT1fWzI1MV1bZ10pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEw''@;'; put 'put ''Ylx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5YVx1NTk1MFx1NWJhNlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1NzRiMFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQzYlx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1''@;'; put 'put ''NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1NjY0M1x1NjY0NFx1NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2JjMVx1N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4''@;'; put 'put ''YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRlZVx1NmZhZVx1NzA3MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMzNFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1NzM3Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1''@;'; put 'put ''Njg5Zlx1NmQ4ZFx1NmRjNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bZ11dPTY0NTEyK2cseVs2NDUxMitnXT1fWzI1Ml1bZ10pO2ZvcihfWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5''@;'; put 'put ''YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1''@;'; put 'put ''NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQw''@;'; put 'put ''M1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1''@;'; put 'put ''NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI1M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1M11bZ11dPTY0NzY4K2cseVs2NDc2OCtnXT1fWzI1M11bZ10pO3JldHVybntlbmM6SSxkZWM6''@;'; put 'put ''eX19KCksWFs5NTBdPWZ1bmN0aW9uKCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFl''@;'; put 'put ''XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1swXVtnXV09MCtnLHlbMCtnXT1fWzBdW2ddKTtmb3IoX1sxNjFdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdWZmMGNcdTMwMDFcdTMwMDJcdWZmMGVcdTIwMjdcdWZmMWJcdWZmMWFcdWZmMWZcdWZmMDFcdWZlMzBcdTIwMjZcdTIwMjVcdWZlNTBcdWZlNTFcdWZlNTJceGI3XHVmZTU0XHVmZTU1XHVmZTU2''@;'; put 'put ''XHVmZTU3XHVmZjVjXHUyMDEzXHVmZTMxXHUyMDE0XHVmZTMzXHUyNTc0XHVmZTM0XHVmZTRmXHVmZjA4XHVmZjA5XHVmZTM1XHVmZTM2XHVmZjViXHVmZjVkXHVmZTM3XHVmZTM4XHUzMDE0XHUzMDE1XHVmZTM5XHVmZTNhXHUzMDEwXHUzMDExXHVmZTNiXHVmZTNjXHUzMDBhXHUzMDBiXHVm''@;'; put 'put ''ZTNkXHVmZTNlXHUzMDA4XHUzMDA5XHVmZTNmXHVmZTQwXHUzMDBjXHUzMDBkXHVmZTQxXHVmZTQyXHUzMDBlXHUzMDBmXHVmZTQzXHVmZTQ0XHVmZTU5XHVmZTVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHUyMDE4XHUy''@;'; put 'put ''MDE5XHUyMDFjXHUyMDFkXHUzMDFkXHUzMDFlXHUyMDM1XHUyMDMyXHVmZjAzXHVmZjA2XHVmZjBhXHUyMDNiXHhhN1x1MzAwM1x1MjVjYlx1MjVjZlx1MjViM1x1MjViMlx1MjVjZVx1MjYwNlx1MjYwNVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViZFx1MjViY1x1MzJhM1x1MjEwNVx4''@;'; put 'put ''YWZcdWZmZTNcdWZmM2ZcdTAyY2RcdWZlNDlcdWZlNGFcdWZlNGRcdWZlNGVcdWZlNGJcdWZlNGNcdWZlNWZcdWZlNjBcdWZlNjFcdWZmMGJcdWZmMGRceGQ3XHhmN1x4YjFcdTIyMWFcdWZmMWNcdWZmMWVcdWZmMWRcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMWVcdTIyNTJcdTIyNjFcdWZlNjJc''@;'; put 'put ''dWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZmNWVcdTIyMjlcdTIyMmFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIx''@;'; put 'put ''OTlcdTIxOThcdTIyMjVcdTIyMjNcdWZmMGZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9X1sxNjFdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW2ddXT00MTIxNitnLHlbNDEyMTYrZ109X1sxNjFdW2ddKTtmb3IoX1sxNjJdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMz''@;'; put 'put ''Y2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4XHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUy''@;'; put 'put ''NThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUy''@;'; put 'put ''NTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4''@;'; put 'put ''XHUyMTY5XHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVm''@;'; put 'put ''ZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUw''@;'; put 'put ''XHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtnXV09NDE0NzIrZyx5WzQxNDcyK2ddPV9bMTYyXVtnXSk7Zm9yKF9bMTYz''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzll''@;'; put 'put ''XHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUw''@;'; put 'put ''M2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTEwXHUzMTExXHUzMTEyXHUz''@;'; put 'put ''MTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNi''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtnXV09NDE3MjgrZyx5WzQxNzI4K2ddPV9bMTYzXVtn''@;'; put 'put ''XSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1Mjli''@;'; put 'put ''XHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1''@;'; put 'put ''OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTExXHU0''@;'; put 'put ''ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMxXHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZj''@;'; put 'put ''XHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1''@;'; put 'put ''YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0''@;'; put 'put ''XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0ZTE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtnXV09NDE5ODQrZyx5WzQxOTg0''@;'; put 'put ''K2ddPV9bMTY0XVtnXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3''@;'; put 'put ''XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1''@;'; put 'put ''M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJj''@;'; put 'put ''XHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3''@;'; put 'put ''NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYy''@;'; put 'put ''XHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtnXV09NDIy''@;'; put 'put ''NDArZyx5WzQyMjQwK2ddPV9bMTY1XVtnXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIw''@;'; put 'put ''XHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1''@;'; put 'put ''OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0''@;'; put 'put ''XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4''@;'; put 'put ''MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVl''@;'; put 'put ''XHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTY2XVtnXV09NDI0OTYrZyx5WzQyNDk2K2ddPV9bMTY2XVtnXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRj''@;'; put 'put ''XHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1''@;'; put 'put ''NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1NzUxXHU1NzQwXHU1NzRkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVh''@;'; put 'put ''XHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1''@;'; put 'put ''ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2''@;'; put 'put ''XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjddW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTY3XVtnXV09NDI3NTIrZyx5WzQyNzUyK2ddPV9bMTY3XVtnXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2Yzgx''@;'; put 'put ''XHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3''@;'; put 'put ''MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4Mjky''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUx''@;'; put 'put ''XHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0''@;'; put 'put ''ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMw''@;'; put 'put ''XHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNjhd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtnXV09NDMwMDgrZyx5WzQzMDA4K2ddPV9bMTY4XVtnXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3''@;'; put 'put ''XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1''@;'; put 'put ''OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFh''@;'; put 'put ''XHU1YzQ4XHU1YzQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1''@;'; put 'put ''XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2''@;'; put 'put ''MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIx''@;'; put 'put ''XHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTY5XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1sxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtnXV09NDMyNjQrZyx5WzQzMjY0K2ddPV9bMTY5XVtnXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZk''@;'; put 'put ''XHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2''@;'; put 'put ''Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2Fj''@;'; put 'put ''XHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5''@;'; put 'put ''XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4''@;'; put 'put ''MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJl''@;'; put 'put ''XHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTcwXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1sxNzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcwXVtnXV09NDM1MjArZyx5WzQzNTIwK2ddPV9bMTcwXVtnXSk7Zm9yKF9bMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjQyXHU5NmI5''@;'; put 'put ''XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0''@;'; put 'put ''ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2''@;'; put 'put ''XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2Ey''@;'; put 'put ''XHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1''@;'; put 'put ''YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1''@;'; put 'put ''XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3XHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMTcxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcxXVtnXV09NDM3NzYrZyx5WzQzNzc2K2ddPV9bMTcxXVtnXSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2''@;'; put 'put ''N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBi''@;'; put 'put ''XHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBl''@;'; put 'put ''XHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3''@;'; put 'put ''NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBj''@;'; put 'put ''XHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMTcyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTcyXVtnXV09NDQwMzIrZyx5WzQ0MDMyK2ddPV9bMTcyXVtnXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU4MDEwXHU4MDBkXHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4''@;'; put 'put ''MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2Ew''@;'; put 'put ''XHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNkXHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4ZmVhXHU4ZmU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNk''@;'; put 'put ''XHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRiXHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1''@;'; put 'put ''MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNj''@;'; put 'put ''XHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1''@;'; put 'put ''NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTczXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTczXVtnXV09NDQyODgrZyx5WzQ0Mjg4K2ddPV9bMTczXVtnXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1''@;'; put 'put ''YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAx''@;'; put 'put ''XHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlm''@;'; put 'put ''XHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2''@;'; put 'put ''NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRj''@;'; put 'put ''XHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2''@;'; put 'put ''ZDc3XHU2ZDU5XHU2ZDkzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc0XVtnXV09NDQ1NDQrZyx5WzQ0NTQ0K2ddPV9bMTc0XVtnXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3''@;'; put 'put ''MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIw''@;'; put 'put ''XHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUw''@;'; put 'put ''XHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3''@;'; put 'put ''ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYz''@;'; put 'put ''XHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4''@;'; put 'put ''MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc1XVtnXV09NDQ4MDArZyx5WzQ0ODAwK2ddPV9bMTc1XVtnXSk7Zm9yKF9bMTc2XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4YTBjXHU4''@;'; put 'put ''YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1XHU4ZmY4''@;'; put 'put ''XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5NjYyXHU5NjYzXHU5NjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4XHU5NjVl''@;'; put 'put ''XHU5NmJiXHU5OGUyXHU5OWFjXHU5YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1MDZmXHU1''@;'; put 'put ''MDZkXHU1MTVjXHU1MTk1XHU1MWYwXHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMxXHU1NTU2''@;'; put 'put ''XHU1NTRmXHU1NTU1XHU1NTJmXHU1NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1OTIwXHU1''@;'; put 'put ''OTYyXHU1YTM2XHU1YTQxXHU1YTQ5XHU1YTY2XHU1YTZhXHU1YTQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtnXV09NDUwNTYrZyx5WzQ1MDU2K2ddPV9bMTc2XVtnXSk7Zm9yKF9b''@;'; put 'put ''MTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1''@;'; put 'put ''YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZj''@;'; put 'put ''XHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGM1XHU2MGJiXHU2MGI1''@;'; put 'put ''XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2''@;'; put 'put ''MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNm''@;'; put 'put ''XHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2''@;'; put 'put ''ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtnXV09NDUzMTIrZyx5WzQ1MzEyK2ddPV9bMTc3''@;'; put 'put ''XVtnXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2''@;'; put 'put ''ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5''@;'; put 'put ''XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGY3''@;'; put 'put ''XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3''@;'; put 'put ''OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMy''@;'; put 'put ''XHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4''@;'; put 'put ''Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtnXV09NDU1NjgrZyx5WzQ1''@;'; put 'put ''NTY4K2ddPV9bMTc4XVtnXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Mzg2XHU4M2E3XHU4NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4''@;'; put 'put ''NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFkXHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3''@;'; put 'put ''XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5''@;'; put 'put ''ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1''@;'; put 'put ''XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1''@;'; put 'put ''NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTc5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtnXV09''@;'; put 'put ''NDU4MjQrZyx5WzQ1ODI0K2ddPV9bMTc5XVtnXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1''@;'; put 'put ''YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUw''@;'; put 'put ''XHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2''@;'; put 'put ''Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEy''@;'; put 'put ''XHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2''@;'; put 'put ''ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTgwXVtnXV09NDYwODArZyx5WzQ2MDgwK2ddPV9bMTgwXVtnXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3''@;'; put 'put ''MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2''@;'; put 'put ''XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3''@;'; put 'put ''ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4''@;'; put 'put ''XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4''@;'; put 'put ''NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODFdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTgxXVtnXV09NDYzMzYrZyx5WzQ2MzM2K2ddPV9bMTgxXVtnXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4''@;'; put 'put ''YTU2XHU4YzYxXHU4YzgyXHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4''@;'; put 'put ''XHU4ZWZjXHU4ZjljXHU5MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5''@;'; put 'put ''NTkxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5NjhlXHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5''@;'; put 'put ''ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3''@;'; put 'put ''XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNlXHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1''@;'; put 'put ''ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sx''@;'; put 'put ''ODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtnXV09NDY1OTIrZyx5WzQ2NTkyK2ddPV9bMTgyXVtnXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1''@;'; put 'put ''ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIx''@;'; put 'put ''XHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2''@;'; put 'put ''NzAzXHU2OTk0XHU2OTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2''@;'; put 'put ''YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRl''@;'; put 'put ''XHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3''@;'; put 'put ''NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTgzXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1sxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtnXV09NDY4NDgrZyx5WzQ2ODQ4K2ddPV9bMTgzXVtnXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzc5XHU3NzZhXHU3NzZjXHU3''@;'; put 'put ''NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEw''@;'; put 'put ''XHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4''@;'; put 'put ''MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4''@;'; put 'put ''NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUx''@;'; put 'put ''XHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4''@;'; put 'put ''Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg0''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtnXV09NDcxMDQrZyx5WzQ3MTA0K2ddPV9bMTg0XVtnXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjlmXHU4''@;'; put 'put ''ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNkXHU5MjQwXHU5MjNl''@;'; put 'put ''XHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5Nzc2XHU5ODEwXHU5''@;'; put 'put ''ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1MGVlXHU1MGU1XHU1''@;'; put 'put ''MGQ2XHU1MGVkXHU1MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3XHU1NjE2XHU1NjFm''@;'; put 'put ''XHU1NjA4XHU1NjEwXHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1YWUzXHU1Yjc1XHU1''@;'; put 'put ''YmRlXHU1YmU3XHU1YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg1XVtnXV09NDczNjArZyx5WzQ3MzYwK2ddPV9bMTg1XVtnXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEy''@;'; put 'put ''XHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2''@;'; put 'put ''ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2''@;'; put 'put ''ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEz''@;'; put 'put ''XHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3''@;'; put 'put ''Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg2XVtnXV09NDc2MTYrZyx5WzQ3NjE2K2ddPV9bMTg2XVtnXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5''@;'; put 'put ''XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4''@;'; put 'put ''OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4''@;'; put 'put ''Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0''@;'; put 'put ''XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5''@;'; put 'put ''ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1''@;'; put 'put ''XHU1MWRjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg3XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtnXV09NDc4NzIrZyx5WzQ3ODcyK2ddPV9bMTg3XVtnXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2IyXHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMyXHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlm''@;'; put 'put ''XHU1ODllXHU1OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1''@;'; put 'put ''ZWRkXHU1ZWUzXHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1XHU2MTgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTdjXHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2''@;'; put 'put ''MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkzXHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1''@;'; put 'put ''XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2''@;'; put 'put ''ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3''@;'; put 'put ''XHU3NDY5XHU3NDhiXHU3NDgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg4XVtnXV09NDgxMjgrZyx5WzQ4MTI4K2ddPV9bMTg4XVtnXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJh''@;'; put 'put ''XHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3''@;'; put 'put ''ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4''@;'; put 'put ''MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUz''@;'; put 'put ''XHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4''@;'; put 'put ''YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFm''@;'; put 'put ''XHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxODldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTg5XVtnXV09NDgzODQrZyx5WzQ4Mzg0K2ddPV9bMTg5XVtnXSk7Zm9yKF9bMTkwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFj''@;'; put 'put ''XHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5''@;'; put 'put ''OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1''@;'; put 'put ''OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMx''@;'; put 'put ''XHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2''@;'; put 'put ''NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVm''@;'; put 'put ''XHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtnXV09NDg2NDArZyx5WzQ4NjQwK2ddPV9bMTkwXVtnXSk7Zm9y''@;'; put 'put ''KF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1''@;'; put 'put ''XHU3MWI5XHU3MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3''@;'; put 'put ''OGU3XHU3OWE2XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTExXHU3ZTA4XHU3''@;'; put 'put ''ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZh''@;'; put 'put ''XHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJiXHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4''@;'; put 'put ''YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIw''@;'; put 'put ''XHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5MzJiXHU5MzA0XHU5MzFhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkxXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtnXV09NDg4OTYrZyx5WzQ4ODk2K2ddPV9b''@;'; put 'put ''MTkxXVtnXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBk''@;'; put 'put ''XHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5''@;'; put 'put ''YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1''@;'; put 'put ''NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4''@;'; put 'put ''XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2''@;'; put 'put ''ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5''@;'; put 'put ''XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkyXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtnXV09NDkxNTIrZyx5''@;'; put 'put ''WzQ5MTUyK2ddPV9bMTkyXVtnXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3''@;'; put 'put ''XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3''@;'; put 'put ''ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNk''@;'; put 'put ''XHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4''@;'; put 'put ''ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNj''@;'; put 'put ''XHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtn''@;'; put 'put ''XV09NDk0MDgrZyx5WzQ5NDA4K2ddPV9bMTkzXVtnXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZmXHU5YmFlXHU5YmFiXHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRj''@;'; put 'put ''XHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2YWFjXHU2YWMzXHU2YWJiXHU2''@;'; put 'put ''YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYx''@;'; put 'put ''XHU3ZTUyXHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4OWIyXHU4OWY0XHU4YjI4XHU4''@;'; put 'put ''YjM5XHU4YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2IzXHU5M2FlXHU5M2FjXHU5M2Iw''@;'; put 'put ''XHU5Mzk4XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTRdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTk0XVtnXV09NDk2NjQrZyx5WzQ5NjY0K2ddPV9bMTk0XVtnXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNl''@;'; put 'put ''XHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1''@;'; put 'put ''YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5''@;'; put 'put ''XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4''@;'; put 'put ''YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2Rj''@;'; put 'put ''XHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOTVdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMTk1XVtnXV09NDk5MjArZyx5WzQ5OTIwK2ddPV9bMTk1XVtnXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5''@;'; put 'put ''XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2''@;'; put 'put ''MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdk''@;'; put 'put ''XHU3ZTdjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZj''@;'; put 'put ''XHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5''@;'; put 'put ''ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3''@;'; put 'put ''XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''X1sxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtnXV09NTAxNzYrZyx5WzUwMTc2K2ddPV9bMTk2XVtnXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThk''@;'; put 'put ''XHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5''@;'; put 'put ''YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNhXHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0''@;'; put 'put ''XHU3NThhXHU3NjZlXHU3NjZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdkXHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUx''@;'; put 'put ''XHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2''@;'; put 'put ''NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4YjhhXHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0''@;'; put 'put ''XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4YjkzXHU4YjkyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMTk3XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09X1sxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtnXV09NTA0MzIrZyx5WzUwNDMyK2ddPV9bMTk3XVtnXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjk2XHU4Mjc3XHU4ZDFi''@;'; put 'put ''XHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5''@;'; put 'put ''NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4''@;'; put 'put ''XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9b''@;'; put 'put ''MTk4XS5sZW5ndGg7KytnKTY1NTMzIT09X1sxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4XVtnXV09NTA2ODgrZyx5WzUwNjg4K2ddPV9bMTk4XVtnXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTQy''@;'; put 'put ''XHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1''@;'; put 'put ''YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1Yzcz''@;'; put 'put ''XHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1''@;'; put 'put ''XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1''@;'; put 'put ''NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0''@;'; put 'put ''XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPV9bMjAxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAxXVtnXV09NTE0NTYrZyx5WzUxNDU2K2ddPV9bMjAxXVtnXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4MjgwXHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0''@;'; put 'put ''ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1Mzhm''@;'; put 'put ''XHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDNkXHU1NDRmXHU1NDQxXHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRj''@;'; put 'put ''XHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1''@;'; put 'put ''YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZi''@;'; put 'put ''XHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAyXVtnXV09NTE3MTIrZyx5WzUxNzEyK2ddPV9bMjAyXVtnXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2''@;'; put 'put ''YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0''@;'; put 'put ''XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDll''@;'; put 'put ''XHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0''@;'; put 'put ''Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZi''@;'; put 'put ''XHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1''@;'; put 'put ''Nzc0XHU1NzYyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjAzXVtnXV09NTE5NjgrZyx5WzUxOTY4K2ddPV9bMjAzXVtnXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1''@;'; put 'put ''YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIy''@;'; put 'put ''XHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIy''@;'; put 'put ''XHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2''@;'; put 'put ''NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2Nzdh''@;'; put 'put ''XHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2''@;'; put 'put ''Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtnXV09NTIyMjQrZyx5WzUyMjI0K2ddPV9bMjA0XVtnXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2QyXHU2Y2RkXHU2Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3MDkzXHU3''@;'; put 'put ''MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRkXHU3NGU4''@;'; put 'put ''XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdi''@;'; put 'put ''XHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4''@;'; put 'put ''MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNkXHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNk''@;'; put 'put ''XHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1''@;'; put 'put ''Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtnXV09NTI0ODArZyx5WzUyNDgwK2ddPV9bMjA1XVtnXSk7Zm9yKF9bMjA2XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1''@;'; put 'put ''NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYy''@;'; put 'put ''XHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3''@;'; put 'put ''XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2''@;'; put 'put ''MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5''@;'; put 'put ''XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2''@;'; put 'put ''NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtnXV09NTI3MzYrZyx5WzUyNzM2K2ddPV9bMjA2XVtnXSk7''@;'; put 'put ''Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2''@;'; put 'put ''N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIw''@;'; put 'put ''XHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDAxXHU2ZDE4''@;'; put 'put ''XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3''@;'; put 'put ''MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJl''@;'; put 'put ''XHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3''@;'; put 'put ''OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtnXV09NTI5OTIrZyx5WzUyOTkyK2dd''@;'; put 'put ''PV9bMjA3XVtnXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4XHU3''@;'; put 'put ''ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4MjIx''@;'; put 'put ''XHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1XHU5''@;'; put 'put ''MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1MDFj''@;'; put 'put ''XHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3XHU1''@;'; put 'put ''NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtnXV09NTMyNDgr''@;'; put 'put ''Zyx5WzUzMjQ4K2ddPV9bMjA4XVtnXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1''@;'; put 'put ''N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFk''@;'; put 'put ''XHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2''@;'; put 'put ''MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3''@;'; put 'put ''XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2''@;'; put 'put ''ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5''@;'; put 'put ''XVtnXV09NTM1MDQrZyx5WzUzNTA0K2ddPV9bMjA5XVtnXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2''@;'; put 'put ''ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgz''@;'; put 'put ''XHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3''@;'; put 'put ''M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzEx''@;'; put 'put ''XHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3''@;'; put 'put ''OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTBdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjEwXVtnXV09NTM3NjArZyx5WzUzNzYwK2ddPV9bMjEwXVtnXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3''@;'; put 'put ''YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMz''@;'; put 'put ''XHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAxXHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4''@;'; put 'put ''MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4NjlkXHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZk''@;'; put 'put ''XHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4''@;'; put 'put ''ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjExXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTFdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtnXV09NTQwMTYrZyx5WzU0MDE2K2ddPV9bMjExXVtnXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5''@;'; put 'put ''NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0''@;'; put 'put ''XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1''@;'; put 'put ''NTUyXHU1NTQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1''@;'; put 'put ''N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4''@;'; put 'put ''XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1''@;'; put 'put ''YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEyXS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09X1syMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEyXVtnXV09NTQyNzIrZyx5WzU0MjcyK2ddPV9bMjEyXVtnXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1''@;'; put 'put ''ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRi''@;'; put 'put ''XHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2''@;'; put 'put ''MzdjXHU2M2E0XHU2MzNiXHU2MzlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2''@;'; put 'put ''ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEw''@;'; put 'put ''XHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2''@;'; put 'put ''ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjEzXS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09X1syMTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjEzXVtnXV09NTQ1MjgrZyx5WzU0NTI4K2ddPV9bMjEzXVtnXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZGQwXHU2ZGYyXHU2''@;'; put 'put ''ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3Mjdi''@;'; put 'put ''XHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3''@;'; put 'put ''NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3NWQyXHU3NWNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWNiXHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3''@;'; put 'put ''NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1''@;'; put 'put ''XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJkXHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3''@;'; put 'put ''ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PV9bMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtnXV09NTQ3ODQrZyx5WzU0Nzg0K2ddPV9bMjE0XVtnXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4''@;'; put 'put ''MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4''@;'; put 'put ''XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4''@;'; put 'put ''Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4''@;'; put 'put ''NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMw''@;'; put 'put ''XHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5''@;'; put 'put ''MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPV9bMjE1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtnXV09NTUwNDArZyx5WzU1MDQwK2ddPV9bMjE1XVtnXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhl''@;'; put 'put ''XHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1''@;'; put 'put ''NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1''@;'; put 'put ''ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThi''@;'; put 'put ''XHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1''@;'; put 'put ''ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE2XVtnXV09NTUyOTYrZyx5WzU1Mjk2K2ddPV9bMjE2XVtnXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2M2U1XHU2M2U4''@;'; put 'put ''XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2NiXHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5XHU2NTMyXHU2''@;'; put 'put ''NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2NjcyXHU2NzAxXHU2''@;'; put 'put ''OTBjXHU2OGQzXHU2OTA0XHU2OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2OTE0XHU2OGY4''@;'; put 'put ''XHU2OGQwXHU2OGZkXHU2OGZjXHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3XHU2Yjk5XHU2''@;'; put 'put ''Yjk1XHU2YmJkXHU2YmYwXHU2YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2ZTNiXHU2ZTAz''@;'; put 'put ''XHU2ZTJlXHU2ZTVlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE3XVtnXV09NTU1NTIrZyx5WzU1NTUyK2ddPV9bMjE3XVtnXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1''@;'; put 'put ''XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3''@;'; put 'put ''MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3''@;'; put 'put ''NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2Rl''@;'; put 'put ''XHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3''@;'; put 'put ''YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVm''@;'; put 'put ''XHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtnXV09NTU4MDgrZyx5WzU1ODA4K2ddPV9bMjE4XVtnXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVl''@;'; put 'put ''XHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4''@;'; put 'put ''M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4''@;'; put 'put ''NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2''@;'; put 'put ''XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4''@;'; put 'put ''YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5''@;'; put 'put ''XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjE5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtnXV09NTYwNjQrZyx5WzU2MDY0K2ddPV9bMjE5XVtnXSk7Zm9yKF9bMjIw''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWY5XHU4ZWU2XHU4ZWVlXHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJj''@;'; put 'put ''XHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5''@;'; put 'put ''MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThkXHU5NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5Njg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg5XHU5NjgzXHU5NjgwXHU5''@;'; put 'put ''NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNhXHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJh''@;'; put 'put ''XHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1''@;'; put 'put ''NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYzXHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJh''@;'; put 'put ''XHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtnXV09NTYzMjArZyx5WzU2MzIwK2ddPV9bMjIwXVtn''@;'; put 'put ''XSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRh''@;'; put 'put ''XHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2''@;'; put 'put ''MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDMzXHU2''@;'; put 'put ''NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTky''@;'; put 'put ''XHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2''@;'; put 'put ''OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNj''@;'; put 'put ''XHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtnXV09NTY1NzYrZyx5WzU2NTc2''@;'; put 'put ''K2ddPV9bMjIxXVtnXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5''@;'; put 'put ''XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2''@;'; put 'put ''ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQy''@;'; put 'put ''XHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3''@;'; put 'put ''NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdi''@;'; put 'put ''XHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtnXV09NTY4''@;'; put 'put ''MzIrZyx5WzU2ODMyK2ddPV9bMjIyXVtnXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3Yjcy''@;'; put 'put ''XHU3YjY1XHU3YjczXHU3YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3''@;'; put 'put ''ZjZkXHU3ZjZiXHU3ZjY3XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5''@;'; put 'put ''XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMyXHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4''@;'; put 'put ''NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1''@;'; put 'put ''XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRmXHU4OWU1XHU4OWU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjIzXVtnXV09NTcwODgrZyx5WzU3MDg4K2ddPV9bMjIzXVtnXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNm''@;'; put 'put ''XHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4''@;'; put 'put ''ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJl''@;'; put 'put ''XHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5''@;'; put 'put ''NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgw''@;'; put 'put ''XHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1MGVmXHU1MGUzXHU1MGUwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjRdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjI0XVtnXV09NTczNDQrZyx5WzU3MzQ0K2ddPV9bMjI0XVtnXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3''@;'; put 'put ''XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1''@;'; put 'put ''ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUw''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4''@;'; put 'put ''XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2''@;'; put 'put ''MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUw''@;'; put 'put ''XHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjVd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtnXV09NTc2MDArZyx5WzU3NjAwK2ddPV9bMjI1XVtnXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OWEwXHU2OWNlXHU2OTk2XHU2OWIwXHU2OWFjXHU2OWJj''@;'; put 'put ''XHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWExXHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkwXHU2OWMyXHU2OWI1XHU2''@;'; put 'put ''OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2ZjE4XHU2ZjNiXHU2ZjEy''@;'; put 'put ''XHU2ZWVkXHU2ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2ZjM5XHU2ZjFjXHU2ZWZj''@;'; put 'put ''XHU2ZjNhXHU2ZjFmXHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUxXHU3MzRjXHU3NDYyXHU3''@;'; put 'put ''NDczXHU3NDcxXHU3NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3NzZmXHU3NzdlXHU3Nzgz''@;'; put 'put ''XHU3OGIyXHU3OGFhXHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI2XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09X1syMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI2XVtnXV09NTc4NTYrZyx5WzU3ODU2K2ddPV9bMjI2XVtnXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkw''@;'; put 'put ''XHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3''@;'; put 'put ''Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3Zjcz''@;'; put 'put ''XHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNl''@;'; put 'put ''XHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4''@;'; put 'put ''NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNj''@;'; put 'put ''XHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjI3XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09X1syMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI3XVtnXV09NTgxMTIrZyx5WzU4MTEyK2ddPV9bMjI3XVtnXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGYwXHU4OGVj''@;'; put 'put ''XHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4''@;'; put 'put ''ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2''@;'; put 'put ''XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmEx''@;'; put 'put ''XHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5''@;'; put 'put ''ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZm''@;'; put 'put ''XHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4XHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPV9bMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtnXV09NTgzNjgrZyx5WzU4MzY4K2ddPV9bMjI4XVtnXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1''@;'; put 'put ''YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEyXHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDljXHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5''@;'; put 'put ''XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTliXHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTkyXHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZl''@;'; put 'put ''XHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2''@;'; put 'put ''NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZlXHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZj''@;'; put 'put ''XHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPV9bMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtnXV09NTg2MjQrZyx5WzU4NjI0K2ddPV9bMjI5XVtnXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2''@;'; put 'put ''ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3Mjlh''@;'; put 'put ''XHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5''@;'; put 'put ''XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3''@;'; put 'put ''OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2Ni''@;'; put 'put ''XHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4''@;'; put 'put ''MTlmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMwXVtnXV09NTg4ODArZyx5WzU4ODgwK2ddPV9bMjMwXVtnXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4''@;'; put 'put ''NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2''@;'; put 'put ''XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzVi''@;'; put 'put ''XHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4''@;'; put 'put ''OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4''@;'; put 'put ''XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4''@;'; put 'put ''ZTE5XHU4ZTI2XHU4ZTI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtnXV09NTkxMzYrZyx5WzU5MTM2K2ddPV9bMjMxXVtnXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5''@;'; put 'put ''MTJiXHU5MTI5XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVm''@;'; put 'put ''XHU5MmMyXHU5MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFi''@;'; put 'put ''XHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5NzhlXHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5''@;'; put 'put ''OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2''@;'; put 'put ''XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1''@;'; put 'put ''MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtnXV09NTkzOTIrZyx5WzU5MzkyK2ddPV9bMjMyXVtnXSk7Zm9yKF9bMjMzXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1''@;'; put 'put ''YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZm''@;'; put 'put ''XHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2''@;'; put 'put ''XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2''@;'; put 'put ''YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRl''@;'; put 'put ''XHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2''@;'; put 'put ''ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtnXV09NTk2NDgrZyx5WzU5NjQ4K2ddPV9bMjMzXVtnXSk7Zm9yKF9b''@;'; put 'put ''MjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3''@;'; put 'put ''MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJk''@;'; put 'put ''XHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzk3XHU3OGRkXHU3OGU5''@;'; put 'put ''XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3''@;'; put 'put ''YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2''@;'; put 'put ''XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4''@;'; put 'put ''MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtnXV09NTk5MDQrZyx5WzU5OTA0K2ddPV9bMjM0''@;'; put 'put ''XVtnXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcxXHU4NTRlXHU4NTZlXHU4NTc1XHU4''@;'; put 'put ''NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4Nzg1XHU4NzkwXHU4NzkxXHU4Nzlk''@;'; put 'put ''XHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWUy''@;'; put 'put ''XHU4YWYyXHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZjXHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4''@;'; put 'put ''ZTMzXHU4ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5MTMzXHU5MTM1XHU5MTM2XHU5MTkz''@;'; put 'put ''XHU5MTkwXHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZhXHU5MzI1XHU5MzEzXHU5MmY5XHU5''@;'; put 'put ''MmY3XHU5MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtnXV09NjAxNjArZyx5WzYw''@;'; put 'put ''MTYwK2ddPV9bMjM1XVtnXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5''@;'; put 'put ''NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5''@;'; put 'put ''XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1''@;'; put 'put ''MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJl''@;'; put 'put ''XHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2''@;'; put 'put ''NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtnXV09''@;'; put 'put ''NjA0MTYrZyx5WzYwNDE2K2ddPV9bMjM2XVtnXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2''@;'; put 'put ''YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3''@;'; put 'put ''XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3''@;'; put 'put ''YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4''@;'; put 'put ''XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4''@;'; put 'put ''MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjM3XVtnXV09NjA2NzIrZyx5WzYwNjcyK2ddPV9bMjM3XVtnXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4''@;'; put 'put ''NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2My''@;'; put 'put ''XHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4''@;'; put 'put ''Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlhXHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWExXHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3''@;'; put 'put ''XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5''@;'; put 'put ''NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5NzlhXHU5N2ExXHU5NzljXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syMzhdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjM4XVtnXV09NjA5MjgrZyx5WzYwOTI4K2ddPV9bMjM4XVtnXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5''@;'; put 'put ''ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZj''@;'; put 'put ''XHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5''@;'; put 'put ''ZDMwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5''@;'; put 'put ''ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5''@;'; put 'put ''XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3''@;'; put 'put ''MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09X1sy''@;'; put 'put ''MzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtnXV09NjExODQrZyx5WzYxMTg0K2ddPV9bMjM5XVtnXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3''@;'; put 'put ''NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVm''@;'; put 'put ''XHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4''@;'; put 'put ''MDc1XHU4MWQxXHU4MWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4''@;'; put 'put ''NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAx''@;'; put 'put ''XHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4''@;'; put 'put ''YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQwXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09X1syNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQwXVtnXV09NjE0NDArZyx5WzYxNDQwK2ddPV9bMjQwXVtnXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4''@;'; put 'put ''ZTVkXHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2''@;'; put 'put ''XHU5Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5''@;'; put 'put ''N2FlXHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5''@;'; put 'put ''YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0''@;'; put 'put ''XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5''@;'; put 'put ''ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQx''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQxXVtnXV09NjE2OTYrZyx5WzYxNjk2K2ddPV9bMjQxXVtnXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZmJmXHU2''@;'; put 'put ''MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5''@;'; put 'put ''XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3''@;'; put 'put ''NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3''@;'; put 'put ''ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUx''@;'; put 'put ''XHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4''@;'; put 'put ''N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPV9bMjQyXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtnXV09NjE5NTIrZyx5WzYxOTUyK2ddPV9bMjQyXVtnXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUz''@;'; put 'put ''XHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5''@;'; put 'put ''NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5''@;'; put 'put ''OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmVi''@;'; put 'put ''XHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5''@;'; put 'put ''ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPV9bMjQzXS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQzXVtnXV09NjIyMDgrZyx5WzYyMjA4K2ddPV9bMjQzXVtnXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYx''@;'; put 'put ''XHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJhXHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3''@;'; put 'put ''N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3''@;'; put 'put ''Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODEx''@;'; put 'put ''XHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5''@;'; put 'put ''MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBh''@;'; put 'put ''XHU5M2ZmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ0XVtnXV09NjI0NjQrZyx5WzYyNDY0K2ddPV9bMjQ0XVtnXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5''@;'; put 'put ''XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5''@;'; put 'put ''YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5''@;'; put 'put ''ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMz''@;'; put 'put ''XHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3''@;'; put 'put ''N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIw''@;'; put 'put ''XHU4NjI5XHU4NjFlXHU4NjI1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtnXV09NjI3MjArZyx5WzYyNzIwK2ddPV9bMjQ1XVtnXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFm''@;'; put 'put ''XHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5''@;'; put 'put ''N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5''@;'; put 'put ''YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4''@;'; put 'put ''XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1''@;'; put 'put ''ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcx''@;'; put 'put ''XHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ2XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtnXV09NjI5NzYrZyx5WzYyOTc2K2ddPV9bMjQ2XVtnXSk7Zm9yKF9bMjQ3XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcx''@;'; put 'put ''XHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5''@;'; put 'put ''NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRjXHU5YTRmXHU5YTQ4XHU5YTRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5''@;'; put 'put ''YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRiXHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5''@;'; put 'put ''XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2''@;'; put 'put ''NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3MzgzXHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMw''@;'; put 'put ''XHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ3XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtnXV09NjMyMzIrZyx5WzYzMjMyK2ddPV9bMjQ3XVtnXSk7Zm9y''@;'; put 'put ''KF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1''@;'; put 'put ''XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5''@;'; put 'put ''ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjcxXHU5ZjcwXHU5''@;'; put 'put ''ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3''@;'; put 'put ''XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5''@;'; put 'put ''YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYy''@;'; put 'put ''XHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ4XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ4XVtnXV09NjM0ODgrZyx5WzYzNDg4K2ddPV9b''@;'; put 'put ''MjQ4XVtnXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5''@;'; put 'put ''XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5''@;'; put 'put ''Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5''@;'; put 'put ''ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3''@;'; put 'put ''XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4''@;'; put 'put ''OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZi''@;'; put 'put ''XHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPV9bMjQ5XS5sZW5ndGg7KytnKTY1NTMzIT09X1syNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ5XVtnXV09NjM3NDQrZyx5''@;'; put 'put ''WzYzNzQ0K2ddPV9bMjQ5XVtnXSk7cmV0dXJue2VuYzpJLGRlYzp5fX0oKSxYWzEyNTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlc''@;'; put 'put ''eDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAy''@;'; put 'put ''MFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAy''@;'; put 'put ''ZDhcdTAxNDFceGE0XHUwMTA0XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhj''@;'; put 'put ''NFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAx''@;'; put 'put ''M2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUz''@;'; put 'put ''MyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTFdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc''@;'; put 'put ''eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQw''@;'; put 'put ''Mlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1''@;'; put 'put ''MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1''@;'; put 'put ''OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1''@;'; put 'put ''MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0''@;'; put 'put ''M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1''@;'; put 'put ''cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAh''@;'; put 'put ''XCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYw''@;'; put 'put ''XHUyMDM5XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhh''@;'; put 'put ''OVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQy''@;'; put 'put ''XHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJc''@;'; put 'put ''eGZjXHhmZFx4ZmVceGZmIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUzXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgw''@;'; put 'put ''Mlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla''@;'; put 'put ''W1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIw''@;'; put 'put ''MWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhi''@;'; put 'put ''NVx4YjZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZm''@;'; put 'put ''ZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRc''@;'; put 'put ''dTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQiLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5j''@;'; put 'put ''aGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3''@;'; put 'put ''XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1''@;'; put 'put ''MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBc''@;'; put 'put ''eGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4''@;'; put 'put ''Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhm''@;'; put 'put ''MVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVj''@;'; put 'put ''Okl9fSgpLFhbMTI1NV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKiss''@;'; put 'put ''LS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJc''@;'; put 'put ''eGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1ZmZmZFx1MDViYlx1MDViY1x1MDViZFx1''@;'; put 'put ''MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVk''@;'; put 'put ''OVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMz''@;'; put 'put ''IT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1Nl09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4''@;'; put 'put ''MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFj''@;'; put 'put ''XHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUw''@;'; put 'put ''MTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1''@;'; put 'put ''MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBc''@;'; put 'put ''dTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1''@;'; put 'put ''MjAwZVx1MjAwZlx1MDZkMiIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1N109ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4''@;'; put 'put ''MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ''@;'; put 'put ''WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3''@;'; put 'put ''XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdc''@;'; put 'put ''dTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1''@;'; put 'put ''XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5IixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCks''@;'; put 'put ''WFsxMjU4XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz''@;'; put 'put ''NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4''@;'; put 'put ''YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUw''@;'; put 'put ''MWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZh''@;'; put 'put ''XHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIixJPVtdLF89e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxZTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJc''@;'; put 'put ''MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS''@;'; put 'put ''U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZh''@;'; put 'put ''XHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhm''@;'; put 'put ''OFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1''@;'; put 'put ''ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsST1b''@;'; put 'put ''XSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTAwMDZdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4''@;'; put 'put ''MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamts''@;'; put 'put ''bW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGI5XHhiMlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAy''@;'; put 'put ''MFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAz''@;'; put 'put ''YThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNh''@;'; put 'put ''ZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1''@;'; put 'put ''MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNiMFx1ZmZmZCIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhb''@;'; put 'put ''MTAwMDddPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0''@;'; put 'put ''NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1''@;'; put 'put ''MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJc''@;'; put 'put ''dTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1''@;'; put 'put ''MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCIsST1bXSxf''@;'; put 'put ''PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChnKV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTAwMDhdPWZ1bmN0aW9uKCl7dmFyIGcseT1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJc''@;'; put 'put ''eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc''@;'; put 'put ''XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx1ZjhkOFx1ZjhkOVx1ZjhkYVx1ZjhkYlx1ZjhkY1x1ZjhkZFx1ZjhkZVx1ZjhkZlx1ZjhlMFx1ZjhlMVx1ZjhlMlx1ZjhlM1x1ZjhlNFx1ZjhlNVx1ZjhlNlx1ZjhlN1x1ZjhlOFx1ZjhlOVx1ZjhlYVx1ZjhlYlx1''@;'; put 'put ''ZjhlY1x1ZjhlZFx1ZjhlZVx1ZjhlZlx1ZjhmMFx1ZjhmMVx1ZjhmMlx1ZjhmM1x1ZjhmNFx1ZjhmNVx1ZjhmNlx1ZjhmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjhmOFx1ZjhmOVx1ZjhmYVx1ZjhmYlx1ZjhmY1x1ZjhmZFx1ZjhmZVx1ZjhmZiIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzBdLmxlbmd0aDsrK2cpNjU1MzMhPT1fWzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bZ11dPTArZyx5WzArZ109X1swXVtnXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHUzMGZiXHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNVx1ZmY1ZVx1ZmZmZFx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1''@;'; put 'put ''MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVm''@;'; put 'put ''ZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2MV0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MV1bZ11dPTQxMjE2K2cseVs0MTIxNitnXT1fWzE2MV1bZ10pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4''@;'; put 'put ''OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1''@;'; put 'put ''MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIy''@;'; put 'put ''M1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Ml0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bZ11dPTQxNDcyK2cseVs0MTQ3MitnXT1fWzE2Ml1bZ10pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYw''@;'; put 'put ''Zlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1''@;'; put 'put ''ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0''@;'; put 'put ''Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bZ11dPTQxNzI4K2cseVs0MTcyOCtnXT1fWzE2M11bZ10pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0''@;'; put 'put ''ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1''@;'; put 'put ''MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4''@;'; put 'put ''NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bZ11dPTQxOTg0K2cseVs0MTk4NCtnXT1fWzE2NF1bZ10pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBh''@;'; put 'put ''Ylx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1''@;'; put 'put ''MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBl''@;'; put 'put ''Mlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bZ11dPTQyMjQwK2cseVs0MjI0MCtnXT1fWzE2NV1bZ10pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5''@;'; put 'put ''OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1''@;'; put 'put ''MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Nl1bZ11dPTQyNDk2K2cseVs0MjQ5NitnXT1fWzE2Nl1bZ10pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQw''@;'; put 'put ''MVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQz''@;'; put 'put ''Y1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2N11bZ11dPTQyNzUyK2cseVs0Mjc1MitnXT1fWzE2N11bZ10pO2ZvcihfWzE2OF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhl''@;'; put 'put ''OVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEy''@;'; put 'put ''MFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bZ11dPTQzMDA4K2cseVs0MzAwOCtnXT1fWzE2OF1bZ10pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUw''@;'; put 'put ''M1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1''@;'; put 'put ''MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUz''@;'; put 'put ''YVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bZ11dPTQzMjY0K2cseVs0MzI2NCtnXT1fWzE2OV1bZ10pO2ZvcihfWzE3Nl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRj''@;'; put 'put ''ZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1''@;'; put 'put ''NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQy''@;'; put 'put ''NVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1''@;'; put 'put ''NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bZ11dPTQ1MDU2K2cseVs0NTA1NitnXT1fWzE3Nl1bZ10pO2Zvcihf''@;'; put 'put ''WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1OTZmOVx1NGZk''@;'; put 'put ''ZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1''@;'; put 'put ''N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThj''@;'; put 'put ''MVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1''@;'; put 'put ''NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bZ11dPTQ1MzEyK2cseVs0NTMxMitnXT1fWzE3''@;'; put 'put ''N11bZ10pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVj''@;'; put 'put ''NVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1''@;'; put 'put ''NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVj''@;'; put 'put ''Zlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1''@;'; put 'put ''NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bZ11dPTQ1NTY4K2cseVs0''@;'; put 'put ''NTU2OCtnXT1fWzE3OF1bZ10pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1''@;'; put 'put ''OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMw''@;'; put 'put ''MVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1''@;'; put 'put ''Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bZ11d''@;'; put 'put ''PTQ1ODI0K2cseVs0NTgyNCtnXT1fWzE3OV1bZ10pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1''@;'; put 'put ''NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUx''@;'; put 'put ''Ylx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1''@;'; put 'put ''N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzE4MF1bZ11dPTQ2MDgwK2cseVs0NjA4MCtnXT1fWzE4MF1bZ10pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1''@;'; put 'put ''NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJj''@;'; put 'put ''NFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1''@;'; put 'put ''NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTgxXVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzE4MV1bZ11dPTQ2MzM2K2cseVs0NjMzNitnXT1fWzE4MV1bZ10pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1''@;'; put 'put ''NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2Yw''@;'; put 'put ''ZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1''@;'; put 'put ''OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bZ11dPTQ2NTkyK2cseVs0NjU5MitnXT1fWzE4Ml1bZ10pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1''@;'; put 'put ''NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBi''@;'; put 'put ''YVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1''@;'; put 'put ''OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4M10ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bZ11dPTQ2ODQ4K2cseVs0Njg0OCtnXT1fWzE4M11bZ10pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1''@;'; put 'put ''NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1Njdk''@;'; put 'put ''MVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1''@;'; put 'put ''NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4''@;'; put 'put ''NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bZ11dPTQ3MTA0K2cseVs0NzEwNCtnXT1fWzE4NF1bZ10pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1''@;'; put 'put ''NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0''@;'; put 'put ''NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1''@;'; put 'put ''ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bZ11dPTQ3MzYwK2cseVs0NzM2MCtnXT1fWzE4NV1bZ10pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1''@;'; put 'put ''NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5''@;'; put 'put ''ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1''@;'; put 'put ''OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bZ11dPTQ3NjE2K2cseVs0NzYxNitnXT1fWzE4Nl1bZ10pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1''@;'; put 'put ''NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVj''@;'; put 'put ''NFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1''@;'; put 'put ''NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1Nzll''@;'; put 'put ''Zlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bZ11dPTQ3ODcyK2cseVs0Nzg3MitnXT1fWzE4N11bZ10pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1''@;'; put 'put ''N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJj''@;'; put 'put ''NFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1''@;'; put 'put ''NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODlj''@;'; put 'put ''MVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bZ11dPTQ4MTI4K2cseVs0ODEyOCtnXT1fWzE4OF1bZ10pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1''@;'; put 'put ''NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRm''@;'; put 'put ''MFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1''@;'; put 'put ''Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3''@;'; put 'put ''M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bZ11dPTQ4Mzg0K2cseVs0ODM4NCtnXT1fWzE4OV1bZ10pO2ZvcihfWzE5MF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1''@;'; put 'put ''ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2Vh''@;'; put 'put ''MFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1''@;'; put 'put ''NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJj''@;'; put 'put ''MFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bZ11dPTQ4NjQwK2cseVs0ODY0MCtnXT1fWzE5MF1bZ10pO2Zv''@;'; put 'put ''cihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZjYVx1N2FlM1x1''@;'; put 'put ''NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBl''@;'; put 'put ''NFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1''@;'; put 'put ''NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVm''@;'; put 'put ''N1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bZ11dPTQ4ODk2K2cseVs0ODg5NitnXT1f''@;'; put 'put ''WzE5MV1bZ10pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3''@;'; put 'put ''MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1''@;'; put 'put ''OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1''@;'; put 'put ''NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bZ11dPTQ5MTUyK2cs''@;'; put 'put ''eVs0OTE1MitnXT1fWzE5Ml1bZ10pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4''@;'; put 'put ''MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1''@;'; put 'put ''Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1Njli''@;'; put 'put ''NFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11b''@;'; put 'put ''Z11dPTQ5NDA4K2cseVs0OTQwOCtnXT1fWzE5M11bZ10pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0''@;'; put 'put ''Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1''@;'; put 'put ''NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYx''@;'; put 'put ''Ylx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk0XVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE5NF1bZ11dPTQ5NjY0K2cseVs0OTY2NCtnXT1fWzE5NF1bZ10pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5''@;'; put 'put ''YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1''@;'; put 'put ''OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5''@;'; put 'put ''OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk1XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bZ11dPTQ5OTIwK2cseVs0OTkyMCtnXT1fWzE5NV1bZ10pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJj''@;'; put 'put ''N1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1''@;'; put 'put ''NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1Nzhi''@;'; put 'put ''ZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PV9bMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bZ11dPTUwMTc2K2cseVs1MDE3NitnXT1fWzE5Nl1bZ10pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMy''@;'; put 'put ''YVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1''@;'; put 'put ''NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1Nzgz''@;'; put 'put ''MFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzE5N10ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PV9bMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bZ11dPTUwNDMyK2cseVs1MDQzMitnXT1fWzE5N11bZ10pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRl''@;'; put 'put ''Mlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1''@;'; put 'put ''OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2''@;'; put 'put ''N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1f''@;'; put 'put ''WzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bZ11dPTUwNjg4K2cseVs1MDY4OCtnXT1fWzE5OF1bZ10pO2ZvcihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRi''@;'; put 'put ''MVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1''@;'; put 'put ''OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUw''@;'; put 'put ''NVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT1fWzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bZ11dPTUwOTQ0K2cseVs1MDk0NCtnXT1fWzE5OV1bZ10pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVj''@;'; put 'put ''YVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1''@;'; put 'put ''NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMz''@;'; put 'put ''OVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bZ11dPTUxMjAwK2cseVs1MTIwMCtnXT1fWzIwMF1bZ10pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1''@;'; put 'put ''Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1''@;'; put 'put ''NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIw''@;'; put 'put ''ZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1''@;'; put 'put ''NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bZ11dPTUxNDU2K2cseVs1MTQ1NitnXT1fWzIwMV1bZ10pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJl''@;'; put 'put ''ZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1''@;'; put 'put ''OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUy''@;'; put 'put ''Y1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1''@;'; put 'put ''NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bZ11dPTUxNzEyK2cseVs1MTcxMitnXT1fWzIwMl1bZ10pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUy''@;'; put 'put ''OVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1''@;'; put 'put ''NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVh''@;'; put 'put ''Zlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1''@;'; put 'put ''NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bZ11dPTUxOTY4K2cseVs1MTk2OCtnXT1fWzIwM11bZ10pO2ZvcihfWzIwNF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUw''@;'; put 'put ''Zlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1''@;'; put 'put ''NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzVi''@;'; put 'put ''Y1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1''@;'; put 'put ''NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bZ11dPTUyMjI0K2cseVs1MjIyNCtnXT1fWzIwNF1bZ10p''@;'; put 'put ''O2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0MFx1NWVm''@;'; put 'put ''N1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1''@;'; put 'put ''OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUz''@;'; put 'put ''ZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1''@;'; put 'put ''NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bZ11dPTUyNDgwK2cseVs1MjQ4MCtn''@;'; put 'put ''XT1fWzIwNV1bZ10pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1''@;'; put 'put ''NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRl''@;'; put 'put ''Ylx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1''@;'; put 'put ''OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bZ11dPTUyNzM2''@;'; put 'put ''K2cseVs1MjczNitnXT1fWzIwNl1bZ10pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1''@;'; put 'put ''ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2''@;'; put 'put ''OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1''@;'; put 'put ''NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIw''@;'; put 'put ''N11bZ11dPTUyOTkyK2cseVs1Mjk5MitnXT1fWzIwN11bZ10pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1''@;'; put 'put ''NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0''@;'; put 'put ''Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1''@;'; put 'put ''OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA4XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIwOF1bZ11dPTUzMjQ4K2cseVs1MzI0OCtnXT1fWzIwOF1bZ10pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1''@;'; put 'put ''OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcx''@;'; put 'put ''Mlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1''@;'; put 'put ''NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjA5XVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bZ11dPTUzNTA0K2cseVs1MzUwNCtnXT1fWzIwOV1bZ10pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1''@;'; put 'put ''NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4''@;'; put 'put ''MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1''@;'; put 'put ''OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMF0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PV9bMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bZ11dPTUzNzYwK2cseVs1Mzc2MCtnXT1fWzIxMF1bZ10pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1''@;'; put 'put ''Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNi''@;'; put 'put ''OVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1''@;'; put 'put ''NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxMV0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PV9bMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bZ11dPTU0MDE2K2cseVs1NDAxNitnXT1fWzIxMV1bZ10pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1''@;'; put 'put ''NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZk''@;'; put 'put ''MFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1''@;'; put 'put ''NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT1fWzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bZ11dPTU0MjcyK2cseVs1NDI3MitnXT1fWzIxMl1bZ10pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1''@;'; put 'put ''NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUw''@;'; put 'put ''OFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1''@;'; put 'put ''NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT1fWzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bZ11dPTU0NTI4K2cseVs1NDUyOCtnXT1fWzIxM11bZ10pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1''@;'; put 'put ''ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3''@;'; put 'put ''YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1''@;'; put 'put ''NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1''@;'; put 'put ''MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bZ11dPTU0Nzg0K2cseVs1NDc4NCtnXT1fWzIxNF1bZ10pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1''@;'; put 'put ''OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0''@;'; put 'put ''MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1''@;'; put 'put ''NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bZ11dPTU1MDQwK2cseVs1NTA0MCtnXT1fWzIxNV1bZ10pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1''@;'; put 'put ''NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1''@;'; put 'put ''Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1''@;'; put 'put ''NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1''@;'; put 'put ''ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bZ11dPTU1Mjk2K2cseVs1NTI5NitnXT1fWzIxNl1bZ10pO2ZvcihfWzIxN109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1''@;'; put 'put ''NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAy''@;'; put 'put ''ZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1''@;'; put 'put ''NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIz''@;'; put 'put ''NFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bZ11dPTU1NTUyK2cseVs1NTU1MitnXT1fWzIxN11bZ10pO2ZvcihfWzIx''@;'; put 'put ''OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFjN1x1NTE5Nlx1NTFhMlx1''@;'; put 'put ''NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJm''@;'; put 'put ''M1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1''@;'; put 'put ''OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5''@;'; put 'put ''Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bZ11dPTU1ODA4K2cseVs1NTgwOCtnXT1fWzIxOF1b''@;'; put 'put ''Z10pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1''@;'; put 'put ''OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJh''@;'; put 'put ''Mlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1''@;'; put 'put ''NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdk''@;'; put 'put ''NVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bZ11dPTU2MDY0K2cseVs1NjA2''@;'; put 'put ''NCtnXT1fWzIxOV1bZ10pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5''@;'; put 'put ''MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1''@;'; put 'put ''ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMy''@;'; put 'put ''Zlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bZ11dPTU2''@;'; put 'put ''MzIwK2cseVs1NjMyMCtnXT1fWzIyMF1bZ10pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNh''@;'; put 'put ''OFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1''@;'; put 'put ''ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRi''@;'; put 'put ''YVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzIyMV1bZ11dPTU2NTc2K2cseVs1NjU3NitnXT1fWzIyMV1bZ10pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODVi''@;'; put 'put ''OVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1''@;'; put 'put ''NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNk''@;'; put 'put ''ZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIyXVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIyMl1bZ11dPTU2ODMyK2cseVs1NjgzMitnXT1fWzIyMl1bZ10pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNl''@;'; put 'put ''OVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1''@;'; put 'put ''NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRm''@;'; put 'put ''ZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjIz''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bZ11dPTU3MDg4K2cseVs1NzA4OCtnXT1fWzIyM11bZ10pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5''@;'; put 'put ''MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1''@;'; put 'put ''NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5''@;'; put 'put ''M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNF0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PV9bMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bZ11dPTU3MzQ0K2cseVs1NzM0NCtnXT1fWzIyNF1bZ10pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5''@;'; put 'put ''Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1''@;'; put 'put ''NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZi''@;'; put 'put ''Y1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyNV0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bZ11dPTU3NjAwK2cseVs1NzYwMCtnXT1fWzIyNV1bZ10pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1''@;'; put 'put ''MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1''@;'; put 'put ''OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAw''@;'; put 'put ''NFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT1fWzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bZ11dPTU3ODU2K2cseVs1Nzg1NitnXT1fWzIyNl1bZ10pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBi''@;'; put 'put ''MVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1''@;'; put 'put ''OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4''@;'; put 'put ''NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT1fWzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bZ11dPTU4MTEyK2cseVs1ODExMitnXT1fWzIyN11bZ10pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0''@;'; put 'put ''ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1''@;'; put 'put ''NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmVi''@;'; put 'put ''Ylx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1''@;'; put 'put ''NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bZ11dPTU4MzY4K2cseVs1ODM2OCtnXT1fWzIyOF1bZ10pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZl''@;'; put 'put ''MFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1''@;'; put 'put ''OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3''@;'; put 'put ''NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1''@;'; put 'put ''NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bZ11dPTU4NjI0K2cseVs1ODYyNCtnXT1fWzIyOV1bZ10pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTli''@;'; put 'put ''Mlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1''@;'; put 'put ''NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1''@;'; put 'put ''M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1''@;'; put 'put ''N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bZ11dPTU4ODgwK2cseVs1ODg4MCtnXT1fWzIzMF1bZ10pO2ZvcihfWzIzMV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2Vj''@;'; put 'put ''MVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1''@;'; put 'put ''N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3''@;'; put 'put ''Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1''@;'; put 'put ''NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bZ11dPTU5MTM2K2cseVs1OTEzNitnXT1fWzIzMV1bZ10pO2Zvcihf''@;'; put 'put ''WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYlx1NzQxYVx1NzQ0''@;'; put 'put ''MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1''@;'; put 'put ''Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1Njdj''@;'; put 'put ''M1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1''@;'; put 'put ''Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bZ11dPTU5MzkyK2cseVs1OTM5MitnXT1fWzIz''@;'; put 'put ''Ml1bZ10pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njky''@;'; put 'put ''NFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1''@;'; put 'put ''NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEy''@;'; put 'put ''OFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1''@;'; put 'put ''OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bZ11dPTU5NjQ4K2cseVs1''@;'; put 'put ''OTY0OCtnXT1fWzIzM11bZ10pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1''@;'; put 'put ''NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZk''@;'; put 'put ''Ylx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1''@;'; put 'put ''NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bZ11d''@;'; put 'put ''PTU5OTA0K2cseVs1OTkwNCtnXT1fWzIzNF1bZ10pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1''@;'; put 'put ''NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1Njcx''@;'; put 'put ''MFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1''@;'; put 'put ''ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIzNV1bZ11dPTYwMTYwK2cseVs2MDE2MCtnXT1fWzIzNV1bZ10pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1''@;'; put 'put ''NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3''@;'; put 'put ''Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1''@;'; put 'put ''Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM2XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIzNl1bZ11dPTYwNDE2K2cseVs2MDQxNitnXT1fWzIzNl1bZ10pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1''@;'; put 'put ''NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0''@;'; put 'put ''N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1''@;'; put 'put ''NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PV9b''@;'; put 'put ''MjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bZ11dPTYwNjcyK2cseVs2MDY3MitnXT1fWzIzN11bZ10pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1''@;'; put 'put ''NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5''@;'; put 'put ''N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1''@;'; put 'put ''OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIzOF0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PV9bMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bZ11dPTYwOTI4K2cseVs2MDkyOCtnXT1fWzIzOF1bZ10pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1''@;'; put 'put ''OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUz''@;'; put 'put ''ZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1''@;'; put 'put ''OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzIz''@;'; put 'put ''OV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bZ11dPTYxMTg0K2cseVs2MTE4NCtnXT1fWzIzOV1bZ10pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1''@;'; put 'put ''OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1''@;'; put 'put ''N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1''@;'; put 'put ''NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT1fWzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bZ11dPTYxNDQwK2cseVs2MTQ0MCtnXT1fWzI0MF1bZ10pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1''@;'; put 'put ''NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhh''@;'; put 'put ''Mlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1''@;'; put 'put ''NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bZ11dPTYxNjk2K2cseVs2MTY5NitnXT1fWzI0MV1bZ10pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1''@;'; put 'put ''OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZi''@;'; put 'put ''MVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1''@;'; put 'put ''ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdh''@;'; put 'put ''OFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bZ11dPTYxOTUyK2cseVs2MTk1MitnXT1fWzI0Ml1bZ10pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1''@;'; put 'put ''ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2Fm''@;'; put 'put ''ZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1''@;'; put 'put ''N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2Jm''@;'; put 'put ''Y1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bZ11dPTYyMjA4K2cseVs2MjIwOCtnXT1fWzI0M11bZ10pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1''@;'; put 'put ''ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4''@;'; put 'put ''OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1''@;'; put 'put ''ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0''@;'; put 'put ''OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bZ11dPTYyNDY0K2cseVs2MjQ2NCtnXT1fWzI0NF1bZ10pO2ZvcihfWzI0NV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1''@;'; put 'put ''OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRi''@;'; put 'put ''NVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1''@;'; put 'put ''OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4''@;'; put 'put ''NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bZ11dPTYyNzIwK2cseVs2MjcyMCtnXT1fWzI0NV1bZ10pO2Zv''@;'; put 'put ''cihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllNVx1ODllYlx1''@;'; put 'put ''ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYw''@;'; put 'put ''ZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1''@;'; put 'put ''OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNi''@;'; put 'put ''YVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bZ11dPTYyOTc2K2cseVs2Mjk3NitnXT1f''@;'; put 'put ''WzI0Nl1bZ10pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFi''@;'; put 'put ''N1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1''@;'; put 'put ''OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVl''@;'; put 'put ''N1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT1fWzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PV9bMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bZ11dPTYzMjMyK2cs''@;'; put 'put ''eVs2MzIzMitnXT1fWzI0N11bZ10pO3JldHVybntlbmM6SSxkZWM6eX19KCksWFsxMDAyOV09ZnVuY3Rpb24oKXtmb3IodmFyIHk9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgx''@;'; put 'put ''OVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFc''@;'; put 'put ''dTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4''@;'; put 'put ''YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEyZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRc''@;'; put 'put ''dTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAxNTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1''@;'; put 'put ''MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRcdTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzci''@;'; put 'put ''LEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hhckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDc5XT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4''@;'; put 'put ''MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdo''@;'; put 'put ''aWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhh''@;'; put 'put ''Mlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTky''@;'; put 'put ''XHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhj''@;'; put 'put ''Mlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PXkuY2hh''@;'; put 'put ''ckNvZGVBdChnKSYmKF9beS5jaGFyQXQoZyldPWcpLElbZ109eS5jaGFyQXQoZyk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDgxXT1mdW5jdGlvbigpe2Zvcih2YXIgeT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJc''@;'; put 'put ''eDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4Yzdc''@;'; put 'put ''eGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIy''@;'; put 'put ''XHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhj''@;'; put 'put ''M1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNl''@;'; put 'put ''XHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsST1bXSxfPXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09eS5jaGFyQ29kZUF0KGcpJiYoX1t5LmNoYXJBdChn''@;'; put 'put ''KV09ZyksSVtnXT15LmNoYXJBdChnKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMjg1OTFdPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4''@;'; put 'put ''MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4''@;'; put 'put ''ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhi''@;'; put 'put ''Mlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRi''@;'; put 'put ''XHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIixJPVtdLF89e30sZz0wOzI1NiE9''@;'; put 'put ''ZzsrK2cpNjU1MzMhPT15LmNoYXJDb2RlQXQoZykmJihfW3kuY2hhckF0KGcpXT1nKSxJW2ddPXkuY2hhckF0KGcpO3JldHVybntlbmM6XyxkZWM6SX19KCksdWUuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBBR0U+InUiJiYodWUuZXhwb3J0cz1YKSxmdW5jdGlvbih5LEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgWD4idSIpe3ZhciBfPVg7dWUuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBBR0U+InUiP3VlLmV4cG9ydHM9SShfKTp5LmNwdGFibGU9SShfKX1lbHNlIFg9SShYKX0odGhpcyxmdW5jdGlvbih5KXsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''ezEyMDA6InV0ZjE2bGUiLDEyMDE6InV0ZjE2YmUiLDEyZTM6InV0ZjMybGUiLDEyMDAxOiJ1dGYzMmJlIiwxNjk2OToidXRmNjRsZSIsMjAxMjc6ImFzY2lpIiw2NWUzOiJ1dGY3Iiw2NTAwMToidXRmOCJ9LF89Wzg3NCwxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1NSwxMjU2LDFlNF0s''@;'; put 'put ''Zz1bOTMyLDkzNiw5NDksOTUwXSxCPVs2NTAwMV0sdz17fSxQPXt9LEY9e30sTz17fSx6PWZ1bmN0aW9uKGope3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGopfSxOPWZ1bmN0aW9uKGope3JldHVybiBqLmNoYXJDb2RlQXQoMCl9LEw9dHlwZW9mIEJ1ZmZlcjwidSIsSz1mdW5jdGlvbigp''@;'; put 'put ''e307aWYoTCl7dmFyIFU9IUJ1ZmZlci5mcm9tO2lmKCFVKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe1U9ITB9Sz1VP2Z1bmN0aW9uKEgsail7cmV0dXJuIGo/bmV3IEJ1ZmZlcihILGopOm5ldyBCdWZmZXIoSCl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIu''@;'; put 'put ''YWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oSCl7cmV0dXJuIG5ldyBCdWZmZXIoSCl9KTt2YXIgVz0xMDI0LFk9QnVmZmVyLmFsbG9jVW5zYWZlKFcpLGVlPWZ1bmN0aW9uKGope3ZhciBFPWZ1bmN0aW9uKGope2Zvcih2YXIgRT1CdWZmZXIuYWxsb2NVbnNhZmUo''@;'; put 'put ''NjU1MzYpLG09MDttPDY1NTM2OysrbSlFW21dPTA7Zm9yKHZhciBBPU9iamVjdC5rZXlzKGopLGFlPUEubGVuZ3RoLHRlPTAsc2U9QVt0ZV07dGU8YWU7Kyt0ZSkoc2U9QVt0ZV0pJiYoRVtzZS5jaGFyQ29kZUF0KDApXT1qW3NlXSk7cmV0dXJuIEV9KHlbal0uZW5jKTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oQSxhZSl7dmFyIHNlLHRlPUEubGVuZ3RoLHdlPTAsVWU9MCxKZT0wLG90PTA7aWYoInN0cmluZyI9PXR5cGVvZiBBKWZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUodGUpLHdlPTA7d2U8dGU7Kyt3ZSlzZVt3ZV09RVtBLmNoYXJDb2RlQXQod2UpXTtlbHNlIGlmKEJ1ZmZlci5pc0J1ZmZl''@;'; put 'put ''cihBKSl7Zm9yKHNlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKnRlKSxVZT0wLHdlPTA7d2U8dGU7Kyt3ZSkoSmU9QVt3ZV0pPDEyOD9zZVtVZSsrXT1FW0plXTpKZTwyMjQ/KHNlW1VlKytdPUVbKCgzMSZKZSk8PDYpKyg2MyZBW3dlKzFdKV0sKyt3ZSk6SmU8MjQwPyhzZVtVZSsrXT1FWygoMTUm''@;'; put 'put ''SmUpPDwxMikrKCg2MyZBW3dlKzFdKTw8NikrKDYzJkFbd2UrMl0pXSx3ZSs9Mik6KG90PSgoNyZKZSk8PDE4KSsoKDYzJkFbd2UrMV0pPDwxMikrKCg2MyZBW3dlKzJdKTw8NikrKDYzJkFbd2UrM10pLHdlKz0zLG90PDY1NTM2P3NlW1VlKytdPUVbb3RdOihzZVtVZSsrXT1FWzU1Mjk2Kygo''@;'; put 'put ''b3QtPTY1NTM2KT4+MTAmMTAyMyldLHNlW1VlKytdPUVbNTYzMjArKDEwMjMmb3QpXSkpO3NlPXNlLnNsaWNlKDAsVWUpfWVsc2UgZm9yKHNlPUJ1ZmZlci5hbGxvY1Vuc2FmZSh0ZSksd2U9MDt3ZTx0ZTsrK3dlKXNlW3dlXT1FW0Fbd2VdLmNoYXJDb2RlQXQoMCldO3JldHVybiBhZSYmImJ1''@;'; put 'put ''ZiIhPT1hZT8iYXJyIiE9PWFlP3NlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHNlKTpzZX19LEo9ZnVuY3Rpb24oail7dmFyIEU9eVtqXS5kZWMsbT1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxBPTAsYWU9IiI7Zm9yKEE9MDtBPEUubGVuZ3RoOysrQSlpZihhZT1FW0Fd''@;'; put 'put ''KXt2YXIgdGU9YWUuY2hhckNvZGVBdCgwKTttWzIqQV09MjU1JnRlLG1bMipBKzFdPXRlPj44fXJldHVybiBmdW5jdGlvbih3ZSl7dmFyIFVlPXdlLmxlbmd0aCxKZT0wLG90PTA7aWYoMipVZT5XJiYoVz0yKlVlLFk9QnVmZmVyLmFsbG9jVW5zYWZlKFcpKSxCdWZmZXIuaXNCdWZmZXIod2Up''@;'; put 'put ''KWZvcihKZT0wO0plPFVlO0plKyspWVsyKkplXT1tW290PTIqd2VbSmVdXSxZWzIqSmUrMV09bVtvdCsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygd2UpZm9yKEplPTA7SmU8VWU7SmUrKylvdD0yKndlLmNoYXJDb2RlQXQoSmUpLFlbMipKZV09bVtvdF0sWVsyKkplKzFdPW1bb3QrMV07''@;'; put 'put ''ZWxzZSBmb3IoSmU9MDtKZTxVZTtKZSsrKVlbMipKZV09bVtvdD0yKndlW0plXV0sWVsyKkplKzFdPW1bb3QrMV07cmV0dXJuIFkuc2xpY2UoMCwyKlVlKS50b1N0cmluZygidWNzMiIpfX0sbmU9ZnVuY3Rpb24oail7Zm9yKHZhciBFPXlbal0uZW5jLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEz''@;'; put 'put ''MTA3MiksQT0wO0E8MTMxMDcyOysrQSltW0FdPTA7Zm9yKHZhciBhZT1PYmplY3Qua2V5cyhFKSx0ZT0wLHNlPWFlW3RlXTt0ZTxhZS5sZW5ndGg7Kyt0ZSlpZihzZT1hZVt0ZV0pe3ZhciB3ZT1zZS5jaGFyQ29kZUF0KDApO21bMip3ZV09MjU1JkVbc2VdLG1bMip3ZSsxXT1FW3NlXT4+OH1y''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oSmUsb3Qpe3ZhciBNZT1KZS5sZW5ndGgsdmU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqTWUpLFhlPTAsamU9MCxEZT0wLEZlPTAsUmU9MDtpZigic3RyaW5nIj09dHlwZW9mIEplKXtmb3IoWGU9RmU9MDtYZTxNZTsrK1hlKWplPTIqSmUuY2hhckNvZGVBdChYZSksdmVb''@;'; put 'put ''RmUrK109bVtqZSsxXXx8bVtqZV0sbVtqZSsxXT4wJiYodmVbRmUrK109bVtqZV0pO3ZlPXZlLnNsaWNlKDAsRmUpfWVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKEplKSl7Zm9yKFhlPUZlPTA7WGU8TWU7KytYZSkoUmU9SmVbWGVdKTwxMjg/amU9UmU6UmU8MjI0PyhqZT0oKDMxJlJlKTw8Nikr''@;'; put 'put ''KDYzJkplW1hlKzFdKSwrK1hlKTpSZTwyNDA/KGplPSgoMTUmUmUpPDwxMikrKCg2MyZKZVtYZSsxXSk8PDYpKyg2MyZKZVtYZSsyXSksWGUrPTIpOihqZT0oKDcmUmUpPDwxOCkrKCg2MyZKZVtYZSsxXSk8PDEyKSsoKDYzJkplW1hlKzJdKTw8NikrKDYzJkplW1hlKzNdKSxYZSs9MyksamU8''@;'; put 'put ''NjU1MzY/KHZlW0ZlKytdPW1bMSsoamUqPTIpXXx8bVtqZV0sbVtqZSsxXT4wJiYodmVbRmUrK109bVtqZV0pKToodmVbRmUrK109bVsxKyhqZT0yKig1NTI5NisoKERlPWplLTY1NTM2KT4+MTAmMTAyMykpKV18fG1bamVdLG1bamUrMV0+MCYmKHZlW0ZlKytdPW1bamVdKSx2ZVtGZSsrXT1t''@;'; put 'put ''WzErKGplPTIqKDU2MzIwKygxMDIzJkRlKSkpXXx8bVtqZV0sbVtqZSsxXT4wJiYodmVbRmUrK109bVtqZV0pKTt2ZT12ZS5zbGljZSgwLEZlKX1lbHNlIGZvcihYZT1GZT0wO1hlPE1lO1hlKyspamU9MipKZVtYZV0uY2hhckNvZGVBdCgwKSx2ZVtGZSsrXT1tW2plKzFdfHxtW2plXSxtW2pl''@;'; put 'put ''KzFdPjAmJih2ZVtGZSsrXT1tW2plXSk7cmV0dXJuIG90JiYiYnVmIiE9PW90PyJhcnIiIT09b3Q/dmUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwodmUpOnZlfX0saWU9ZnVuY3Rpb24oail7dmFyIGFlLEU9eVtqXS5kZWMsbT1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxB''@;'; put 'put ''PTAsdGU9MCxzZT0wLHdlPTA7Zm9yKHdlPTA7d2U8NjU1MzY7Kyt3ZSltWzIqd2VdPTI1NSxtWzIqd2UrMV09MjUzO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpKGFlPUVbQV0pJiYodGU9YWUuY2hhckNvZGVBdCgwKSxtW3NlPTIqQV09MjU1JnRlLG1bc2UrMV09dGU+PjgpO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihKZSl7dmFyIG90PUplLmxlbmd0aCxNZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipvdCksdmU9MCxYZT0wLGplPTA7aWYoQnVmZmVyLmlzQnVmZmVyKEplKSlmb3IodmU9MDt2ZTxvdDt2ZSsrKTI1NT09PW1bWGU9MipKZVt2ZV1dJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplW3ZlXTw8''@;'; put 'put ''OCkrSmVbdmUrMV0pLCsrdmUpLE1lW2plKytdPW1bWGVdLE1lW2plKytdPW1bWGUrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIEplKWZvcih2ZT0wO3ZlPG90O3ZlKyspWGU9MipKZS5jaGFyQ29kZUF0KHZlKSwyNTU9PT1tW1hlXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZS5jaGFy''@;'; put 'put ''Q29kZUF0KHZlKTw8OCkrSmUuY2hhckNvZGVBdCh2ZSsxKSksKyt2ZSksTWVbamUrK109bVtYZV0sTWVbamUrK109bVtYZSsxXTtlbHNlIGZvcih2ZT0wO3ZlPG90O3ZlKyspMjU1PT09bVtYZT0yKkplW3ZlXV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmVbdmVdPDw4KStKZVt2ZSsxXSks''@;'; put 'put ''Kyt2ZSksTWVbamUrK109bVtYZV0sTWVbamUrK109bVtYZSsxXTtyZXR1cm4gTWUuc2xpY2UoMCxqZSkudG9TdHJpbmcoInVjczIiKX19O3dbNjUwMDFdPWZ1bmN0aW9uIEgoail7aWYoInN0cmluZyI9PXR5cGVvZiBqKXJldHVybiBIKGouc3BsaXQoIiIpLm1hcChOKSk7dmFyIEU9ai5sZW5n''@;'; put 'put ''dGgsbT0wLEE9MDs0KkU+VyYmKFc9NCpFLFk9QnVmZmVyLmFsbG9jVW5zYWZlKFcpKTt2YXIgYWU9MDtFPj0zJiYyMzk9PWpbMF0mJjE4Nz09alsxXSYmMTkxPT1qWzJdJiYoYWU9Myk7Zm9yKHZhciB0ZT0xLHNlPTAsd2U9MDthZTxFO2FlKz10ZSl0ZT0xLCh3ZT1qW2FlXSk8MTI4P209d2U6''@;'; put 'put ''d2U8MjI0PyhtPTY0KigzMSZ3ZSkrKDYzJmpbYWUrMV0pLHRlPTIpOndlPDI0MD8obT0oKDE1JndlKTw8MTIpKzY0Kig2MyZqW2FlKzFdKSsoNjMmalthZSsyXSksdGU9Myk6KG09MjYyMTQ0Kig3JndlKSsoKDYzJmpbYWUrMV0pPDwxMikrNjQqKDYzJmpbYWUrMl0pKyg2MyZqW2FlKzNdKSx0''@;'; put 'put ''ZT00KSxtPDY1NTM2PyhZW3NlKytdPTI1NSZtLFlbc2UrK109bT4+OCk6KEE9NTUyOTYrKChtLT02NTUzNik+PjEwJjEwMjMpLG09NTYzMjArKDEwMjMmbSksWVtzZSsrXT0yNTUmQSxZW3NlKytdPUE+Pj44LFlbc2UrK109MjU1Jm0sWVtzZSsrXT1tPj4+OCYyNTUpO3JldHVybiBZLnNsaWNl''@;'; put 'put ''KDAsc2UpLnRvU3RyaW5nKCJ1Y3MyIil9LFBbNjUwMDFdPWZ1bmN0aW9uKGosRSl7aWYoTCYmQnVmZmVyLmlzQnVmZmVyKGopKXJldHVybiBFJiYiYnVmIiE9PUU/ImFyciIhPT1FP2oudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoaik6ajt2YXIgbT1qLmxlbmd0aCxBPTAsYWU9''@;'; put 'put ''MCx0ZT0wLHNlPSJzdHJpbmciPT10eXBlb2Ygajs0Km0+VyYmKFc9NCptLFk9QnVmZmVyLmFsbG9jVW5zYWZlKFcpKTtmb3IodmFyIHdlPTA7d2U8bTsrK3dlKShBPXNlP2ouY2hhckNvZGVBdCh3ZSk6alt3ZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9ZW3RlKytdPUE6QTw9MjA0Nz8oWVt0ZSsr''@;'; put 'put ''XT0xOTIrKEE+PjYpLFlbdGUrK109MTI4Kyg2MyZBKSk6QT49NTUyOTYmJkE8PTU3MzQzPyhBLT01NTI5NiwrK3dlLGFlPShzZT9qLmNoYXJDb2RlQXQod2UpOmpbd2VdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyhBPDwxMCksWVt0ZSsrXT0yNDArKGFlPj4+MTgmNyksWVt0ZSsrXT0xNDQrKGFl''@;'; put 'put ''Pj4+MTImNjMpLFlbdGUrK109MTI4KyhhZT4+PjYmNjMpLFlbdGUrK109MTI4Kyg2MyZhZSkpOihZW3RlKytdPTIyNCsoQT4+MTIpLFlbdGUrK109MTI4KyhBPj42JjYzKSxZW3RlKytdPTEyOCsoNjMmQSkpO3JldHVybiBFJiYiYnVmIiE9PUU/ImFyciIhPT1FP1kuc2xpY2UoMCx0ZSkudG9T''@;'; put 'put ''dHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoWSwwLHRlKTpZLnNsaWNlKDAsdGUpfX12YXIgbGU9ZnVuY3Rpb24oKXtpZihMKXtpZihGW19bMF1dKXJldHVybjt2YXIgaj0wLEU9MDtmb3Ioaj0wO2o8Xy5sZW5ndGg7KytqKXlbRT1fW2pdXSYmKEZbRV09SihFKSxPW0VdPWVlKEUpKTtm''@;'; put 'put ''b3Ioaj0wO2o8Zy5sZW5ndGg7KytqKXlbRT1nW2pdXSYmKEZbRV09aWUoRSksT1tFXT1uZShFKSk7Zm9yKGo9MDtqPEIubGVuZ3RoOysrail3W0U9QltqXV0mJihGW0VdPXdbRV0pLFBbRV0mJihPW0VdPVBbRV0pfX0sbWU9ZnVuY3Rpb24oSCxqKXtyZXR1cm4iIn0sX2U9ZnVuY3Rpb24oail7''@;'; put 'put ''ZGVsZXRlIEZbal0sZGVsZXRlIE9bal19LFNlPXtlbmNhY2hlOmxlLGRlY2FjaGU6ZnVuY3Rpb24oKXtpZihMKXtpZighRltfWzBdXSlyZXR1cm47Xy5mb3JFYWNoKF9lKSxnLmZvckVhY2goX2UpLEIuZm9yRWFjaChfZSl9cD1tZSxiPTB9LHNiY3M6XyxkYmNzOmd9O2xlKCk7dmFyIHplPSJB''@;'; put 'put ''QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixwPW1lLGI9MDtyZXR1cm4geS51dGlscz17ZGVjb2RlOmZ1bmN0aW9uIEgoaixFKXt2YXIgbTtpZihtPUZbal0pcmV0dXJuIG0oRSk7aWYoInN0cmluZyI9PXR5cGVvZiBFKXJl''@;'; put 'put ''dHVybiBIKGosRS5zcGxpdCgiIikubWFwKE4pKTt2YXIgdmUsQT1FLmxlbmd0aCxhZT1uZXcgQXJyYXkoQSksdGU9IiIsc2U9MCx3ZT0wLFVlPTEsSmU9MCxvdD0wLE1lPXlbal0sWGU9IiI7aWYoTWUmJih2ZT1NZS5kZWMpKWZvcih3ZT0wO3dlPEE7d2UrPVVlKXtpZihVZT0yLCh0ZT12ZVso''@;'; put 'put ''RVt3ZV08PDgpK0Vbd2UrMV1dKXx8KFVlPTEsdGU9dmVbRVt3ZV1dKSwhdGUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgY29kZTogIitFW3dlXSsiICIrRVt3ZStVZS0xXSsiICIrd2UrIiAiK1VlKyIgIit2ZVtFW3dlXV0pO2FlW0plKytdPXRlfWVsc2V7aWYoIShYZT1JW2pdKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitqKTtzd2l0Y2goWGUpe2Nhc2UidXRmOCI6Zm9yKEE+PTMmJjIzOT09RVswXSYmMTg3PT1FWzFdJiYxOTE9PUVbMl0mJih3ZT0zKTt3ZTxBO3dlKz1VZSlVZT0xLEVbd2VdPDEyOD9zZT1FW3dlXTpFW3dlXTwyMjQ/KHNlPTY0Kigz''@;'; put 'put ''MSZFW3dlXSkrKDYzJkVbd2UrMV0pLFVlPTIpOkVbd2VdPDI0MD8oc2U9KCgxNSZFW3dlXSk8PDEyKSs2NCooNjMmRVt3ZSsxXSkrKDYzJkVbd2UrMl0pLFVlPTMpOihzZT0yNjIxNDQqKDcmRVt3ZV0pKygoNjMmRVt3ZSsxXSk8PDEyKSs2NCooNjMmRVt3ZSsyXSkrKDYzJkVbd2UrM10pLFVl''@;'; put 'put ''PTQpLHNlPDY1NTM2fHwob3Q9NTUyOTYrKChzZS09NjU1MzYpPj4xMCYxMDIzKSxzZT01NjMyMCsoMTAyMyZzZSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShvdCkpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKEwmJkJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcihFKSlyZXR1cm4gRS50b1N0cmluZyhYZSk7Zm9yKHdlPTA7d2U8QTt3ZSsrKWFlW3dlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2VdKTtKZT1BO2JyZWFrO2Nhc2UidXRmMTZsZSI6aWYoQT49MiYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJih3ZT0yKSxMJiZCdWZmZXIuaXNCdWZm''@;'; put 'put ''ZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoWGUpO2ZvcihVZT0yO3dlKzE8QTt3ZSs9VWUpYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoRVt3ZSsxXTw8OCkrRVt3ZV0pO2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKEE+PTImJjI1ND09RVswXSYmMjU1PT1FWzFdJiYod2U9MiksVWU9Mjt3''@;'; put 'put ''ZSsxPEE7d2UrPVVlKWFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKEVbd2VdPDw4KStFW3dlKzFdKTticmVhaztjYXNlInV0ZjMybGUiOmZvcihBPj00JiYyNTU9PUVbMF0mJjI1ND09RVsxXSYmMD09PUVbMl0mJjA9PT1FWzNdJiYod2U9NCksVWU9NDt3ZTxBO3dlKz1VZSkoc2U9KEVb''@;'; put 'put ''d2UrM108PDI0KSsoRVt3ZSsyXTw8MTYpKyhFW3dlKzFdPDw4KStFW3dlXSk+NjU1MzU/KHNlLT02NTUzNixhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhzZT4+MTAmMTAyMykpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmc2UpKSk6YWVbSmUr''@;'; put 'put ''K109U3RyaW5nLmZyb21DaGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3IoQT49NCYmMjU1PT1FWzNdJiYyNTQ9PUVbMl0mJjA9PT1FWzFdJiYwPT09RVswXSYmKHdlPTQpLFVlPTQ7d2U8QTt3ZSs9VWUpKHNlPShFW3dlXTw8MjQpKyhFW3dlKzFdPDwxNikrKEVbd2UrMl08PDgp''@;'; put 'put ''K0Vbd2UrM10pPjY1NTM1PyhzZS09NjU1MzYsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisoc2U+PjEwJjEwMjMpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnNlKSkpOmFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nh''@;'; put 'put ''c2UidXRmNyI6Zm9yKEE+PTQmJjQzPT1FWzBdJiY0Nz09RVsxXSYmMTE4PT1FWzJdJiYoQT49NSYmNTY9PUVbM10mJjQ1PT1FWzRdP3dlPTU6KDU2PT1FWzNdfHw1Nz09RVszXXx8NDM9PUVbM118fDQ3PT1FWzNdKSYmKHdlPTQpKTt3ZTxBO3dlKz1VZSlpZig0Mz09PUVbd2VdKWlmKFVlPTEs''@;'; put 'put ''NDUhPT1FW3dlKzFdKXtmb3IoO1N0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStVZV0pLm1hdGNoKC9bQS1aYS16MC05K1wvXS8pOylVZSsrO3ZhciBqZT0wOzQ1PT09RVt3ZStVZV0mJigrK1VlLGplPTEpO2Zvcih2YXIgRGU9W10sRmU9IiIsa2U9MCxBZT0wLF90PTAsbnQ9MCxRZT0xO1FlPFVl''@;'; put 'put ''LWplJiYoa2U9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSxBZT16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStRZSsrXSkpLERlLnB1c2goa2U8PDJ8QWU+PjQpLC0xIT09KF90PXplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dl''@;'; put 'put ''K1FlKytdKSkpJiYoRGUucHVzaCgoMTUmQWUpPDw0fF90Pj4yKSwtMSE9PShudD16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStRZSsrXSkpKSkpOyludDw2NCYmRGUucHVzaCgoMyZfdCk8PDZ8bnQpO2ZvcihGZT1IKDEyMDEsRGUpLFFlPTA7UWU8RmUubGVuZ3RoOysrUWUp''@;'; put 'put ''YWVbSmUrK109RmUuY2hhckF0KFFlKX1lbHNlIFVlPTIsYWVbSmUrK109IisiO2Vsc2UgVWU9MSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2VdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIraisiICIrSVtqXSl9fXJldHVybiBh''@;'; put 'put ''ZS5zbGljZSgwLEplKS5qb2luKCIiKX0sZW5jb2RlOmZ1bmN0aW9uIEgoaixFLG0pe2lmKGo9PT1iJiZwKXJldHVybiBwKEUsbSk7aWYoT1tqXSlyZXR1cm4ocD1PW2I9al0pKEUsbSk7TCYmQnVmZmVyLmlzQnVmZmVyKEUpJiYoRT1FLnRvU3RyaW5nKCJ1dGY4IikpO3ZhciBvdCxBPUUubGVu''@;'; put 'put ''Z3RoLGFlPUw/QnVmZmVyLmFsbG9jVW5zYWZlKDQqQSk6W10sdGU9MCxzZT0wLHdlPTAsVWU9MCxKZT15W2pdLE1lPSIiLHZlPSJzdHJpbmciPT10eXBlb2YgRTtpZihKZSYmKG90PUplLmVuYykpZm9yKHNlPTA7c2U8QTsrK3NlLCsrd2UpKHRlPW90W3ZlP0UuY2hhckF0KHNlKTpFW3NlXV0p''@;'; put 'put ''PjI1NT8oYWVbd2VdPXRlPj44LGFlWysrd2VdPTI1NSZ0ZSk6YWVbd2VdPTI1NSZ0ZTtlbHNle2lmKCEoTWU9SVtqXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIraik7c3dpdGNoKE1lKXtjYXNlInV0ZjgiOmlmKEwmJnZlKXt3ZT0oYWU9SyhFLE1lKSkubGVuZ3RoO2Jy''@;'; put 'put ''ZWFrfWZvcihzZT0wO3NlPEE7KytzZSwrK3dlKSh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/YWVbd2VdPXRlOnRlPD0yMDQ3PyhhZVt3ZV09MTkyKyh0ZT4+NiksYWVbKyt3ZV09MTI4Kyg2MyZ0ZSkpOnRlPj01NTI5NiYmdGU8PTU3MzQzPyh0ZS09''@;'; put 'put ''NTUyOTYsVWU9KHZlP0UuY2hhckNvZGVBdCgrK3NlKTpFWysrc2VdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyh0ZTw8MTApLGFlW3dlXT0yNDArKFVlPj4+MTgmNyksYWVbKyt3ZV09MTQ0KyhVZT4+PjEyJjYzKSxhZVsrK3dlXT0xMjgrKFVlPj4+NiY2MyksYWVbKyt3ZV09MTI4Kyg2MyZVZSkp''@;'; put 'put ''OihhZVt3ZV09MjI0Kyh0ZT4+MTIpLGFlWysrd2VdPTEyOCsodGU+PjYmNjMpLGFlWysrd2VdPTEyOCsoNjMmdGUpKTticmVhaztjYXNlImFzY2lpIjppZihMJiYic3RyaW5nIj09dHlwZW9mIEUpe3dlPShhZT1LKEUsTWUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlLCsrd2Up''@;'; put 'put ''e2lmKCEoKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk8PTEyNykpdGhyb3cgbmV3IEVycm9yKCJiYWQgYXNjaWkgIit0ZSk7YWVbd2VdPXRlfWJyZWFrO2Nhc2UidXRmMTZsZSI6aWYoTCYmInN0cmluZyI9PXR5cGVvZiBFKXt3ZT0oYWU9SyhFLE1lKSkubGVu''@;'; put 'put ''Z3RoO2JyZWFrfWZvcihzZT0wO3NlPEE7KytzZSl0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCksYWVbd2UrK109MjU1JnRlLGFlW3dlKytdPXRlPj44O2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKHNlPTA7c2U8QTsrK3NlKXRlPXZlP0UuY2hhckNvZGVBdChzZSk6''@;'; put 'put ''RVtzZV0uY2hhckNvZGVBdCgwKSxhZVt3ZSsrXT10ZT4+OCxhZVt3ZSsrXT0yNTUmdGU7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3Ioc2U9MDtzZTxBOysrc2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ0ZTw9NTczNDMmJih0ZT02NTUzNiso''@;'; put 'put ''dGUtNTUyOTY8PDEwKSsoRVsrK3NlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksYWVbd2UrK109MjU1JnRlLGFlW3dlKytdPTI1NSYodGU+Pj04KSxhZVt3ZSsrXT0yNTUmKHRlPj49OCksYWVbd2UrK109MjU1Jih0ZT4+PTgpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKHNlPTA7c2U8QTsrK3Nl''@;'; put 'put ''KSh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdGU8PTU3MzQzJiYodGU9NjU1MzYrKHRlLTU1Mjk2PDwxMCkrKEVbKytzZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLGFlW3dlKzNdPTI1NSZ0ZSxhZVt3ZSsyXT0yNTUmKHRlPj49OCksYWVbd2Ur''@;'; put 'put ''MV09MjU1Jih0ZT4+PTgpLGFlW3dlXT0yNTUmKHRlPj49OCksd2UrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3Ioc2U9MDtzZTxBO3NlKyspe3ZhciBYZT12ZT9FLmNoYXJBdChzZSk6RVtzZV0uY2hhckF0KDApO2lmKCIrIiE9PVhlKWlmKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2Rl''@;'; put 'put ''ZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86PyIuaW5kZXhPZihYZSk+LTEpYWVbd2UrK109WGUuY2hhckNvZGVBdCgwKTtlbHNle3ZhciBqZT1IKDEyMDEsWGUpO2FlW3dlKytdPTQzLGFlW3dlKytdPXplLmNoYXJDb2RlQXQoamVbMF0+PjIpLGFlW3dlKytdPXplLmNo''@;'; put 'put ''YXJDb2RlQXQoKCgzJmplWzBdKTw8NCkrKChqZVsxXXx8MCk+PjQpKSxhZVt3ZSsrXT16ZS5jaGFyQ29kZUF0KCgoMTUmamVbMV0pPDwyKSsoKGplWzJdfHwwKT4+NikpLGFlW3dlKytdPTQ1fWVsc2UgYWVbd2UrK109NDMsYWVbd2UrK109NDV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK2orIiAiK0lbal0pfX1yZXR1cm4gYWU9YWUuc2xpY2UoMCx3ZSksTD9tJiYiYnVmIiE9PW0/ImFyciIhPT1tP2FlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGFlKTphZToic3RyIj09bT9hZS5tYXAoeikuam9pbigiIik6YWV9LGhh''@;'; put 'put ''c2NwOmZ1bmN0aW9uKGope3JldHVybiEoIXlbal0mJiFJW2pdKX0sbWFnaWM6SSxjYWNoZTpTZX0seX0pfSwzMTc5Oih1ZSxYKT0+e3ZhciB5LEksXzshZnVuY3Rpb24oZyl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKXVlLmV4cG9ydHM9ZygpO2Vsc2UgaWYodHlwZW9mIERP''@;'; put 'put ''X05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1nKCksST1bXSx2b2lkIDAhPT0oXz0iZnVuY3Rpb24iPT10eXBlb2YoeT1nKT95LmFwcGx5KFgsSSk6eSkmJih1ZS5leHBvcnRzPV8pO2Vsc2V7dmFyIEI7dHlwZW9mIGdsb2JhbFRoaXM8InUiP0I9Z2xvYmFsVGhpczp0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1Ij9CPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9CPWdsb2JhbDp0eXBlb2YgJDwidSImJiQuZ2xvYmFsP0I9JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYoQj1zZWxmKSxCLkpTWmlwU3luYz1nKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBQKEYsTyx6KXtmdW5jdGlv''@;'; put 'put ''biBOKFUsVyl7aWYoIU9bVV0pe2lmKCFGW1VdKXtpZihMKXJldHVybiBMKFUsITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK1UrIiciKX12YXIgcT1PW1VdPXtleHBvcnRzOnt9fTtGW1VdWzBdLmNhbGwocS5leHBvcnRzLGZ1bmN0aW9uKGVlKXtyZXR1cm4gTihG''@;'; put 'put ''W1VdWzFdW2VlXXx8ZWUpfSxxLHEuZXhwb3J0cyxQLEYsTyx6KX1yZXR1cm4gT1tVXS5leHBvcnRzfWZvcih2YXIgTD12b2lkIDAsSz0wO0s8ei5sZW5ndGg7SysrKU4oeltLXSk7cmV0dXJuIE59KHsxOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PSJBQkNERUZHSElKS0xN''@;'; put 'put ''Tk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7Ty5lbmNvZGU9ZnVuY3Rpb24oTixMKXtmb3IodmFyIFUsVyxZLHEsZWUsSixuZSxLPSIiLGllPTA7aWU8Ti5sZW5ndGg7KXE9KFU9Ti5jaGFyQ29kZUF0KGllKyspKT4+MixlZT0oMyZVKTw8NHwo''@;'; put 'put ''Vz1OLmNoYXJDb2RlQXQoaWUrKykpPj40LEo9KDE1JlcpPDwyfChZPU4uY2hhckNvZGVBdChpZSsrKSk+PjYsbmU9NjMmWSxpc05hTihXKT9KPW5lPTY0OmlzTmFOKFkpJiYobmU9NjQpLEs9Syt6LmNoYXJBdChxKSt6LmNoYXJBdChlZSkrei5jaGFyQXQoSikrei5jaGFyQXQobmUpO3JldHVy''@;'; put 'put ''biBLfSxPLmRlY29kZT1mdW5jdGlvbihOLEwpe3ZhciBXLFkscSxlZSxKLG5lLEs9IiIsaWU9MDtmb3IoTj1OLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtpZTxOLmxlbmd0aDspcT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpLFc9KDE1JihlZT16LmluZGV4T2YoTi5jaGFy''@;'; put 'put ''QXQoaWUrKykpKSk8PDR8KEo9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSk+PjIsWT0oMyZKKTw8NnwobmU9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSksSys9U3RyaW5nLmZyb21DaGFyQ29kZShxPDwyfGVlPj40KSw2NCE9SiYmKEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoVykpLDY0IT1u''@;'; put 'put ''ZSYmKEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSkpO3JldHVybiBLfX0se31dLDI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geigpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lv''@;'; put 'put ''bk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH16LnByb3RvdHlwZT17Z2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sRi5leHBvcnRzPXp9LHt9XSwzOltmdW5jdGlvbihQ''@;'; put 'put ''LEYsTyl7InVzZSBzdHJpY3QiO08uU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpmdW5jdGlvbih6KXtyZXR1cm4gen0sdW5jb21wcmVzczpmdW5jdGlvbih6KXtyZXR1cm4gen0sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LE8uREVGTEFURT1Q''@;'; put 'put ''KCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpLE49WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2''@;'; put 'put ''ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYz''@;'; put 'put ''OSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwy''@;'; put 'put ''NzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUx''@;'; put 'put ''MTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1''@;'; put 'put ''LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1''@;'; put 'put ''MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3''@;'; put 'put ''MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3''@;'; put 'put ''NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1''@;'; put 'put ''NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQw''@;'; put 'put ''NzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgs''@;'; put 'put ''OTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2''@;'; put 'put ''MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcx''@;'; put 'put ''OTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIy''@;'; put 'put ''NjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIy''@;'; put 'put ''OTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2''@;'; put 'put ''Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1''@;'; put 'put ''MTAzMzQyMzUsNzU1MTY3MTE3XTtGLmV4cG9ydHM9ZnVuY3Rpb24oSyxVKXtpZih0eXBlb2YgSz4idSJ8fCFLLmxlbmd0aClyZXR1cm4gMDt2YXIgVz0ic3RyaW5nIiE9PXouZ2V0VHlwZU9mKEspO3R5cGVvZiBVPiJ1IiYmKFU9MCk7dmFyIGVlPTA7VT1+VTtmb3IodmFyIEo9MCxuZT1LLmxl''@;'; put 'put ''bmd0aDtKPG5lO0orKyllZT1XP0tbSl06Sy5jaGFyQ29kZUF0KEopLFU9VT4+PjheTlsyNTUmKFVeZWUpXTtyZXR1cm5+VX19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKTtmdW5jdGlvbiBOKEwpe3RoaXMuZGF0YT1u''@;'; put 'put ''dWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfU4ucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihMKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtMKX0sY2hlY2tJbmRleDpmdW5jdGlvbihMKXtpZih0aGlzLmxlbmd0aDxMfHxMPDApdGhyb3cgbmV3IEVycm9yKCJFbmQg''@;'; put 'put ''b2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK0wrIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihMKXt0aGlzLmNoZWNrSW5kZXgoTCksdGhpcy5pbmRleD1MfSxza2lwOmZ1bmN0aW9uKEwpe3RoaXMu''@;'; put 'put ''c2V0SW5kZXgodGhpcy5pbmRleCtMKX0sYnl0ZUF0OmZ1bmN0aW9uKEwpe30scmVhZEludDpmdW5jdGlvbihMKXt2YXIgVSxLPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoTCksVT10aGlzLmluZGV4K0wtMTtVPj10aGlzLmluZGV4O1UtLSlLPShLPDw4KSt0aGlzLmJ5dGVBdChVKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbmRleCs9TCxLfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKEwpe3JldHVybiB6LnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoTCkpfSxyZWFkRGF0YTpmdW5jdGlvbihMKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKEwpe30scmVhZERhdGU6ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTD10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKEw+PjI1JjEyNyksKEw+PjIxJjE1KS0xLEw+PjE2JjMxLEw+PjExJjMxLEw+PjUmNjMsKDMxJkwpPDwxKX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPLmJhc2U2ND0hMSxPLmJpbmFyeT0hMSxPLmRpcj0hMSxPLmNyZWF0ZUZvbGRlcnM9ITEsTy5kYXRlPW51bGwsTy5jb21wcmVzc2lvbj1udWxsLE8uY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIik7Ty5zdHJp''@;'; put 'put ''bmcyYmluYXJ5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnN0cmluZzJiaW5hcnkoTil9LE8uc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oTil7cmV0dXJuIHoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLE4pfSxPLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB6LnRyYW5z''@;'; put 'put ''Zm9ybVRvKCJzdHJpbmciLE4pfSxPLnN0cmluZzJCbG9iPWZ1bmN0aW9uKE4pe3ZhciBMPXoudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixOKTtyZXR1cm4gei5hcnJheUJ1ZmZlcjJCbG9iKEwpfSxPLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oTil7cmV0dXJuIHouYXJyYXlCdWZmZXIy''@;'; put 'put ''QmxvYihOKX0sTy50cmFuc2Zvcm1Ubz1mdW5jdGlvbihOLEwpe3JldHVybiB6LnRyYW5zZm9ybVRvKE4sTCl9LE8uZ2V0VHlwZU9mPWZ1bmN0aW9uKE4pe3JldHVybiB6LmdldFR5cGVPZihOKX0sTy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oTil7cmV0dXJuIHouY2hlY2tTdXBwb3J0KE4pfSxP''@;'; put 'put ''Lk1BWF9WQUxVRV8xNkJJVFM9ei5NQVhfVkFMVUVfMTZCSVRTLE8uTUFYX1ZBTFVFXzMyQklUUz16Lk1BWF9WQUxVRV8zMkJJVFMsTy5wcmV0dHk9ZnVuY3Rpb24oTil7cmV0dXJuIHoucHJldHR5KE4pfSxPLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihOKXtyZXR1cm4gei5maW5kQ29tcHJl''@;'; put 'put ''c3Npb24oTil9LE8uaXNSZWdFeHA9ZnVuY3Rpb24oTil7cmV0dXJuIHouaXNSZWdFeHAoTil9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBV''@;'; put 'put ''aW50MzJBcnJheTwidSIsTj1QKCJwYWtvIik7Ty51bmNvbXByZXNzSW5wdXRUeXBlPXo/InVpbnQ4YXJyYXkiOiJhcnJheSIsTy5jb21wcmVzc0lucHV0VHlwZT16PyJ1aW50OGFycmF5IjoiYXJyYXkiLE8ubWFnaWM9IlxiXDAiLE8uY29tcHJlc3M9ZnVuY3Rpb24oTCl7cmV0dXJuIE4uZGVm''@;'; put 'put ''bGF0ZVJhdyhMKX0sTy51bmNvbXByZXNzPWZ1bmN0aW9uKEwpe3JldHVybiBOLmluZmxhdGVSYXcoTCl9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9iYXNlNjQiKTtmdW5jdGlvbiBOKEwsSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikp''@;'; put 'put ''cmV0dXJuIG5ldyBOKEwsSyk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsTCYmdGhpcy5sb2FkKEwsSyksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBVPW5ldyBOO2Zvcih2YXIgVyBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW1ddJiYoVVtX''@;'; put 'put ''XT10aGlzW1ddKTtyZXR1cm4gVX19KE4ucHJvdG90eXBlPVAoIi4vb2JqZWN0IikpLmxvYWQ9UCgiLi9sb2FkIiksTi5zdXBwb3J0PVAoIi4vc3VwcG9ydCIpLE4uZGVmYXVsdHM9UCgiLi9kZWZhdWx0cyIpLE4udXRpbHM9UCgiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxOLmJhc2U2ND17''@;'; put 'put ''ZW5jb2RlOmZ1bmN0aW9uKEwpe3JldHVybiB6LmVuY29kZShMKX0sZGVjb2RlOmZ1bmN0aW9uKEwpe3JldHVybiB6LmRlY29kZShMKX19LE4uY29tcHJlc3Npb25zPVAoIi4vY29tcHJlc3Npb25zIiksRi5leHBvcnRzPU59LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2Rl''@;'; put 'put ''ZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9iYXNlNjQiKSxOPVAoIi4vemlwRW50cmllcyIpO0YuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihMLEspe3ZhciBVLFcsWSxxO2ZvcigoSz1LfHx7fSkuYmFzZTY0JiYoTD16LmRlY29kZShMKSksVT0oVz1uZXcgTihMLEspKS5maWxlcyxZPTA7WTxVLmxlbmd0aDtZKyspdGhpcy5maWxlKChxPVVbWV0pLmZpbGVOYW1lLHEuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1p''@;'; put 'put ''emVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6cS5kYXRlLGRpcjpxLmRpcixjb21tZW50OnEuZmlsZUNvbW1lbnQubGVuZ3RoP3EuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOksuY3JlYXRlRm9sZGVyc30pO3JldHVybiBXLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PVcu''@;'; put 'put ''emlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVuY3Rpb24oUCxGLE8peyhmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7dmFyIE49ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiB6PCJ1Iil7dmFyIEw9IXouZnJvbTtpZighTCl0cnl7ei5mcm9t''@;'; put 'put ''KCJmb28iLCJ1dGY4Iil9Y2F0Y2h7TD0hMH1OPUw/ZnVuY3Rpb24oSyxVKXtyZXR1cm4gVT9uZXcgeihLLFUpOm5ldyB6KEspfTp6LmZyb20uYmluZCh6KSx6LmFsbG9jfHwoei5hbGxvYz1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IHooSyl9KX1GLmV4cG9ydHM9ZnVuY3Rpb24oSyxVKXtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIj09dHlwZW9mIEs/ei5hbGxvYyhLKTpOKEssVSl9LEYuZXhwb3J0cy50ZXN0PWZ1bmN0aW9uKEspe3JldHVybiB6LmlzQnVmZmVyKEspfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihQLEYsTyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB6PVAoIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIE4oTCl7dGhpcy5kYXRhPUwsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KE4ucHJvdG90eXBlPW5ldyB6KS5yZWFkRGF0YT1mdW5jdGlvbihMKXt0aGlzLmNoZWNrT2Zmc2V0KEwp''@;'; put 'put ''O3ZhciBLPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTCk7cmV0dXJuIHRoaXMuaW5kZXgrPUwsS30sRi5leHBvcnRzPU59LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3VwcG9ydCIp''@;'; put 'put ''LE49UCgiLi91dGlscyIpLEw9UCgiLi9jcmMzMiIpLEs9UCgiLi9zaWduYXR1cmUiKSxVPVAoIi4vZGVmYXVsdHMiKSxXPVAoIi4vYmFzZTY0IiksWT1QKCIuL2NvbXByZXNzaW9ucyIpLHE9UCgiLi9jb21wcmVzc2VkT2JqZWN0IiksZWU9UCgiLi9ub2RlQnVmZmVyIiksSj1QKCIuL3V0Zjgi''@;'; put 'put ''KSxuZT1QKCIuL3N0cmluZ1dyaXRlciIpLGllPVAoIi4vdWludDhBcnJheVdyaXRlciIpLGxlPWZ1bmN0aW9uKGope2lmKGouX2RhdGEgaW5zdGFuY2VvZiBxJiYoai5fZGF0YT1qLl9kYXRhLmdldENvbnRlbnQoKSxqLm9wdGlvbnMuYmluYXJ5PSEwLGoub3B0aW9ucy5iYXNlNjQ9ITEsInVp''@;'; put 'put ''bnQ4YXJyYXkiPT09Ti5nZXRUeXBlT2Yoai5fZGF0YSkpKXt2YXIgRT1qLl9kYXRhO2ouX2RhdGE9bmV3IFVpbnQ4QXJyYXkoRS5sZW5ndGgpLDAhPT1FLmxlbmd0aCYmai5fZGF0YS5zZXQoRSwwKX1yZXR1cm4gai5fZGF0YX0sbWU9ZnVuY3Rpb24oail7dmFyIEU9bGUoaik7cmV0dXJuInN0''@;'; put 'put ''cmluZyI9PT1OLmdldFR5cGVPZihFKT8hai5vcHRpb25zLmJpbmFyeSYmei5ub2RlYnVmZmVyP2VlKEUsInV0Zi04Iik6ai5hc0JpbmFyeSgpOkV9LF9lPWZ1bmN0aW9uKGope3ZhciBFPWxlKHRoaXMpO3JldHVybiBudWxsPT09RXx8dHlwZW9mIEU+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFz''@;'; put 'put ''ZTY0JiYoRT1XLmRlY29kZShFKSksRT1qJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0gudXRmOGRlY29kZShFKTpOLnRyYW5zZm9ybVRvKCJzdHJpbmciLEUpLCFqJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKEU9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixILnV0ZjhlbmNvZGUoRSkpKSxFKX0sVGU9''@;'; put 'put ''ZnVuY3Rpb24oaixFLG0pe3RoaXMubmFtZT1qLHRoaXMuZGlyPW0uZGlyLHRoaXMuZGF0ZT1tLmRhdGUsdGhpcy5jb21tZW50PW0uY29tbWVudCx0aGlzLl9kYXRhPUUsdGhpcy5vcHRpb25zPW0sdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6bS5kaXIsZGF0ZTptLmRhdGV9fTtUZS5wcm90''@;'; put 'put ''b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBfZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpmdW5jdGlvbigpe3JldHVybiBfZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgaj1tZSh0aGlzKTtyZXR1cm4gTi50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZl''@;'; put 'put ''ciIsail9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBqPW1lKHRoaXMpO3JldHVybiBOLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixqKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciBTZT1mdW5jdGlvbihqLEUp''@;'; put 'put ''e3ZhciBBLG09IiI7Zm9yKEE9MDtBPEU7QSsrKW0rPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmopLGo+Pj49ODtyZXR1cm4gbX0semU9ZnVuY3Rpb24oKXt2YXIgRSxtLGo9e307Zm9yKEU9MDtFPGFyZ3VtZW50cy5sZW5ndGg7RSsrKWZvcihtIGluIGFyZ3VtZW50c1tFXSlhcmd1bWVudHNb''@;'; put 'put ''RV0uaGFzT3duUHJvcGVydHkobSkmJnR5cGVvZiBqW21dPiJ1IiYmKGpbbV09YXJndW1lbnRzW0VdW21dKTtyZXR1cm4gan0scD1mdW5jdGlvbihqLEUsbSl7dmFyIGFlLEE9Ti5nZXRUeXBlT2YoRSk7aWYobT1mdW5jdGlvbihqKXtyZXR1cm4hMD09PShqPWp8fHt9KS5iYXNlNjQmJm51bGw9''@;'; put 'put ''PWouYmluYXJ5JiYoai5iaW5hcnk9ITApLChqPXplKGosVSkpLmRhdGU9ai5kYXRlfHxuZXcgRGF0ZSxudWxsIT09ai5jb21wcmVzc2lvbiYmKGouY29tcHJlc3Npb249ai5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxqfShtKSxtLmNyZWF0ZUZvbGRlcnMmJihhZT1iKGopKSYmeC5jYWxs''@;'; put 'put ''KHRoaXMsYWUsITApLG0uZGlyfHxudWxsPT09RXx8dHlwZW9mIEU+InUiKW0uYmFzZTY0PSExLG0uYmluYXJ5PSExLEU9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09QSltLmJpbmFyeSYmIW0uYmFzZTY0JiYhMCE9PW0ub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYoRT1OLnN0cmluZzJiaW5hcnko''@;'; put 'put ''RSkpO2Vsc2V7aWYobS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITAsIShBfHxFIGluc3RhbmNlb2YgcSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitqKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PUEmJihFPU4udHJhbnNmb3JtVG8oInVp''@;'; put 'put ''bnQ4YXJyYXkiLEUpKX12YXIgdGU9bmV3IFRlKGosRSxtKTtyZXR1cm4gdGhpcy5maWxlc1tqXT10ZSx0ZX0sYj1mdW5jdGlvbihqKXsiLyI9PWouc2xpY2UoLTEpJiYoaj1qLnN1YnN0cmluZygwLGoubGVuZ3RoLTEpKTt2YXIgRT1qLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIEU+MD9qLnN1''@;'; put 'put ''YnN0cmluZygwLEUpOiIifSx4PWZ1bmN0aW9uKGosRSl7cmV0dXJuIi8iIT1qLnNsaWNlKC0xKSYmKGorPSIvIiksRT10eXBlb2YgRTwidSImJkUsdGhpcy5maWxlc1tqXXx8cC5jYWxsKHRoaXMsaixudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczpFfSksdGhpcy5maWxlc1tqXX0sQz1mdW5j''@;'; put 'put ''dGlvbihqLEUpe3ZhciBBLG09bmV3IHE7cmV0dXJuIGouX2RhdGEgaW5zdGFuY2VvZiBxPyhtLnVuY29tcHJlc3NlZFNpemU9ai5fZGF0YS51bmNvbXByZXNzZWRTaXplLG0uY3JjMzI9ai5fZGF0YS5jcmMzMiwwPT09bS51bmNvbXByZXNzZWRTaXplfHxqLmRpcj8oRT1ZLlNUT1JFLG0uY29t''@;'; put 'put ''cHJlc3NlZENvbnRlbnQ9IiIsbS5jcmMzMj0wKTpqLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09RS5tYWdpYz9tLmNvbXByZXNzZWRDb250ZW50PWouX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooQT1qLl9kYXRhLmdldENvbnRlbnQoKSxtLmNvbXByZXNzZWRDb250ZW50PUUuY29t''@;'; put 'put ''cHJlc3MoTi50cmFuc2Zvcm1UbyhFLmNvbXByZXNzSW5wdXRUeXBlLEEpKSkpOigoIShBPW1lKGopKXx8MD09PUEubGVuZ3RofHxqLmRpcikmJihFPVkuU1RPUkUsQT0iIiksbS51bmNvbXByZXNzZWRTaXplPUEubGVuZ3RoLG0uY3JjMzI9TChBKSxtLmNvbXByZXNzZWRDb250ZW50PUUuY29t''@;'; put 'put ''cHJlc3MoTi50cmFuc2Zvcm1UbyhFLmNvbXByZXNzSW5wdXRUeXBlLEEpKSksbS5jb21wcmVzc2VkU2l6ZT1tLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxtLmNvbXByZXNzaW9uTWV0aG9kPUUubWFnaWMsbX0sVD1mdW5jdGlvbihqLEUsbSxBKXt2YXIgTWUsdmUsRmUsUmUsdGU9Ti50cmFu''@;'; put 'put ''c2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoRS5uYW1lKSksc2U9RS5jb21tZW50fHwiIix3ZT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShzZSkpLFVlPXRlLmxlbmd0aCE9PUUubmFtZS5sZW5ndGgsSmU9d2UubGVuZ3RoIT09c2UubGVuZ3RoLG90PUUub3B0aW9u''@;'; put 'put ''cyxYZT0iIixqZT0iIixEZT0iIjtGZT1FLl9pbml0aWFsTWV0YWRhdGEuZGlyIT09RS5kaXI/RS5kaXI6b3QuZGlyLE1lPShSZT1FLl9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PUUuZGF0ZT9FLmRhdGU6b3QuZGF0ZSkuZ2V0SG91cnMoKSxNZTw8PTYsTWV8PVJlLmdldE1pbnV0ZXMoKSxNZTw8''@;'; put 'put ''PTUsTWV8PVJlLmdldFNlY29uZHMoKS8yLHZlPVJlLmdldEZ1bGxZZWFyKCktMTk4MCx2ZTw8PTQsdmV8PVJlLmdldE1vbnRoKCkrMSx2ZTw8PTUsdmV8PVJlLmdldERhdGUoKSxVZSYmKGplPVNlKDEsMSkrU2UoTCh0ZSksNCkrdGUsWGUrPSJ1cCIrU2UoamUubGVuZ3RoLDIpK2plKSxKZSYm''@;'; put 'put ''KERlPVNlKDEsMSkrU2UodGhpcy5jcmMzMih3ZSksNCkrd2UsWGUrPSJ1YyIrU2UoRGUubGVuZ3RoLDIpK0RlKTt2YXIgSWU9IiI7cmV0dXJuIEllKz0iXG5cMCIsSWUrPVVlfHxKZT8iXDBcYiI6IlwwXDAiLEllKz1tLmNvbXByZXNzaW9uTWV0aG9kLEllKz1TZShNZSwyKSxJZSs9U2UodmUs''@;'; put 'put ''MiksSWUrPVNlKG0uY3JjMzIsNCksSWUrPVNlKG0uY29tcHJlc3NlZFNpemUsNCksSWUrPVNlKG0udW5jb21wcmVzc2VkU2l6ZSw0KSxJZSs9U2UodGUubGVuZ3RoLDIpLEllKz1TZShYZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6Sy5MT0NBTF9GSUxFX0hFQURFUitJZSt0ZStYZSxkaXJSZWNv''@;'; put 'put ''cmQ6Sy5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK0llK1NlKHdlLmxlbmd0aCwyKSsiXDBcMFwwXDAiKyghMD09PUZlPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKStTZShBLDQpK3RlK1hlK3dlLGNvbXByZXNzZWRPYmplY3Q6bX19LEg9e2xvYWQ6ZnVuY3Rpb24oaixFKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKGope3ZhciBtLEEsYWUsdGUsRT1bXTtmb3IobSBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkobSkm''@;'; put 'put ''Jih0ZT1uZXcgVGUoKGFlPXRoaXMuZmlsZXNbbV0pLm5hbWUsYWUuX2RhdGEsemUoYWUub3B0aW9ucykpLEE9bS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLG0ubGVuZ3RoKSxtLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJmooQSx0ZSkmJkUucHVzaCh0ZSkpO3JldHVy''@;'; put 'put ''biBFfSxmaWxlOmZ1bmN0aW9uKGosRSxtKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoTi5pc1JlZ0V4cChqKSl7dmFyIEE9ajtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsdGUpe3JldHVybiF0ZS5kaXImJkEudGVzdChhZSl9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rp''@;'; put 'put ''b24oYWUsdGUpe3JldHVybiF0ZS5kaXImJmFlPT09an0pWzBdfHxudWxsfXJldHVybiBwLmNhbGwodGhpcyxqPXRoaXMucm9vdCtqLEUsbSksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKGope2lmKCFqKXJldHVybiB0aGlzO2lmKE4uaXNSZWdFeHAoaikpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0''@;'; put 'put ''aW9uKGFlLHRlKXtyZXR1cm4gdGUuZGlyJiZqLnRlc3QoYWUpfSk7dmFyIG09eC5jYWxsKHRoaXMsdGhpcy5yb290K2opLEE9dGhpcy5jbG9uZSgpO3JldHVybiBBLnJvb3Q9bS5uYW1lLEF9LHJlbW92ZTpmdW5jdGlvbihqKXt2YXIgRT10aGlzLmZpbGVzW2o9dGhpcy5yb290K2pdO2lmKEV8''@;'; put 'put ''fCgiLyIhPWouc2xpY2UoLTEpJiYoais9Ii8iKSxFPXRoaXMuZmlsZXNbal0pLEUmJiFFLmRpcilkZWxldGUgdGhpcy5maWxlc1tqXTtlbHNlIGZvcih2YXIgbT10aGlzLmZpbHRlcihmdW5jdGlvbihhZSx0ZSl7cmV0dXJuIHRlLm5hbWUuc2xpY2UoMCxqLmxlbmd0aCk9PT1qfSksQT0wO0E8''@;'; put 'put ''bS5sZW5ndGg7QSsrKWRlbGV0ZSB0aGlzLmZpbGVzW21bQV0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKGope2o9emUoanx8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksTi5jaGVja1N1cHBvcnQoai50''@;'; put 'put ''eXBlKTt2YXIgYWUsdGUsWGUsRT1bXSxtPTAsQT0wLHNlPU4udHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy51dGY4ZW5jb2RlKGouY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgd2UgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KHdlKSl7dmFy''@;'; put 'put ''IFVlPXRoaXMuZmlsZXNbd2VdLEplPVVlLm9wdGlvbnMuY29tcHJlc3Npb258fGouY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxvdD1ZW0plXTtpZighb3QpdGhyb3cgbmV3IEVycm9yKEplKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgTWU9Qy5jYWxsKHRo''@;'; put 'put ''aXMsVWUsb3QpLHZlPVQuY2FsbCh0aGlzLHdlLFVlLE1lLG0pO20rPXZlLmZpbGVSZWNvcmQubGVuZ3RoK01lLmNvbXByZXNzZWRTaXplLEErPXZlLmRpclJlY29yZC5sZW5ndGgsRS5wdXNoKHZlKX1YZT1LLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK1NlKEUubGVuZ3RoLDIp''@;'; put 'put ''K1NlKEUubGVuZ3RoLDIpK1NlKEEsNCkrU2UobSw0KStTZShzZS5sZW5ndGgsMikrc2U7dmFyIGplPWoudHlwZS50b0xvd2VyQ2FzZSgpO2ZvcihhZT0idWludDhhcnJheSI9PT1qZXx8ImFycmF5YnVmZmVyIj09PWplfHwiYmxvYiI9PT1qZXx8Im5vZGVidWZmZXIiPT09amU/bmV3IGllKG0r''@;'; put 'put ''QStYZS5sZW5ndGgpOm5ldyBuZShtK0ErWGUubGVuZ3RoKSx0ZT0wO3RlPEUubGVuZ3RoO3RlKyspYWUuYXBwZW5kKEVbdGVdLmZpbGVSZWNvcmQpLGFlLmFwcGVuZChFW3RlXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtmb3IodGU9MDt0ZTxFLmxlbmd0aDt0ZSsrKWFl''@;'; put 'put ''LmFwcGVuZChFW3RlXS5kaXJSZWNvcmQpO2FlLmFwcGVuZChYZSk7dmFyIERlPWFlLmZpbmFsaXplKCk7c3dpdGNoKGoudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIE4udHJhbnNmb3JtVG8oai50''@;'; put 'put ''eXBlLnRvTG93ZXJDYXNlKCksRGUpO2Nhc2UiYmxvYiI6cmV0dXJuIE4uYXJyYXlCdWZmZXIyQmxvYihOLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsRGUpKTtjYXNlImJhc2U2NCI6cmV0dXJuIGouYmFzZTY0P1cuZW5jb2RlKERlKTpEZTtkZWZhdWx0OnJldHVybiBEZX19LGNyYzMyOmZ1''@;'; put 'put ''bmN0aW9uKGosRSl7cmV0dXJuIEwoaixFKX0sdXRmOGVuY29kZTpmdW5jdGlvbihqKXtyZXR1cm4gTi50cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoaikpfSx1dGY4ZGVjb2RlOmZ1bmN0aW9uKGope3JldHVybiBKLnV0ZjhkZWNvZGUoail9fTtGLmV4cG9ydHM9SH0seyIuL2Jh''@;'; put 'put ''c2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6MywiLi9jcmMzMiI6NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVdyaXRl''@;'; put 'put ''ciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ty5MT0NBTF9GSUxFX0hFQURFUj0iUEtceDAzXHgwNCIsTy5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQS1x4MDFceDAyIixPLkNFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA1''@;'; put 'put ''XHgwNiIsTy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQS1x4MDZceDA3IixPLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA2XHgwNiIsTy5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDE1OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciB6PVAoIi4vZGF0YVJlYWRlciIpLE49UCgiLi91dGlscyIpO2Z1bmN0aW9uIEwoSyxVKXt0aGlzLmRhdGE9SyxVfHwodGhpcy5kYXRhPU4uc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oTC5wcm90b3R5cGU9bmV3''@;'; put 'put ''IHopLmJ5dGVBdD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoSyl9LEwucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoSyl9LEwucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEsp''@;'; put 'put ''e3RoaXMuY2hlY2tPZmZzZXQoSyk7dmFyIFU9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCtLKTtyZXR1cm4gdGhpcy5pbmRleCs9SyxVfSxGLmV4cG9ydHM9TH0seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHo9UCgiLi91dGlscyIpLE49ZnVuY3Rpb24oKXt0aGlzLmRhdGE9W119O04ucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oTCl7TD16LnRyYW5zZm9ybVRvKCJzdHJpbmciLEwpLHRoaXMuZGF0YS5wdXNoKEwpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRh''@;'; put 'put ''dGEuam9pbigiIil9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDE3OltmdW5jdGlvbihQLEYsTyl7KGZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0IjtpZihPLmJhc2U2ND0hMCxPLmFycmF5PSEwLE8uc3RyaW5nPSEwLE8uYXJyYXlidWZmZXI9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYm''@;'; put 'put ''dHlwZW9mIFVpbnQ4QXJyYXk8InUiLE8ubm9kZWJ1ZmZlcj10eXBlb2YgejwidSIsTy51aW50OGFycmF5PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKU8uYmxvYj0hMTtlbHNle3ZhciBOPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7Ty5ibG9iPTA9PT1uZXcg''@;'; put 'put ''QmxvYihbTl0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplfWNhdGNoe3RyeXt2YXIgSz1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO0suYXBwZW5kKE4pLE8u''@;'; put 'put ''YmxvYj0wPT09Sy5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNhdGNoe08uYmxvYj0hMX19fX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDE4OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vZGF0YVJlYWRl''@;'; put 'put ''ciIpO2Z1bmN0aW9uIE4oTCl7TCYmKHRoaXMuZGF0YT1MLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wKX0oTi5wcm90b3R5cGU9bmV3IHopLmJ5dGVBdD1mdW5jdGlvbihMKXtyZXR1cm4gdGhpcy5kYXRhW0xdfSxOLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25h''@;'; put 'put ''dHVyZT1mdW5jdGlvbihMKXtmb3IodmFyIEs9TC5jaGFyQ29kZUF0KDApLFU9TC5jaGFyQ29kZUF0KDEpLFc9TC5jaGFyQ29kZUF0KDIpLFk9TC5jaGFyQ29kZUF0KDMpLHE9dGhpcy5sZW5ndGgtNDtxPj0wOy0tcSlpZih0aGlzLmRhdGFbcV09PT1LJiZ0aGlzLmRhdGFbcSsxXT09PVUmJnRo''@;'; put 'put ''aXMuZGF0YVtxKzJdPT09VyYmdGhpcy5kYXRhW3ErM109PT1ZKXJldHVybiBxO3JldHVybi0xfSxOLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihMKXtpZih0aGlzLmNoZWNrT2Zmc2V0KEwpLDA9PT1MKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgSz10aGlzLmRhdGEuc3ViYXJy''@;'; put 'put ''YXkodGhpcy5pbmRleCx0aGlzLmluZGV4K0wpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LEYuZXhwb3J0cz1OfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPWZ1bmN0aW9uKEwpe3RoaXMuZGF0YT1uZXcg''@;'; put 'put ''VWludDhBcnJheShMKSx0aGlzLmluZGV4PTB9O04ucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oTCl7MCE9PUwubGVuZ3RoJiYoTD16LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixMKSx0aGlzLmRhdGEuc2V0KEwsdGhpcy5pbmRleCksdGhpcy5pbmRleCs9TC5sZW5ndGgpfSxmaW5hbGl6''@;'; put 'put ''ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDIwOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO2Zvcih2YXIgej1QKCIuL3V0aWxzIiksTj1QKCIuL3N1cHBvcnQiKSxMPVAoIi4vbm9kZUJ1ZmZlciIpLEs9bmV3IEFycmF5''@;'; put 'put ''KDI1NiksVT0wO1U8MjU2O1UrKylLW1VdPVU+PTI1Mj82OlU+PTI0OD81OlU+PTI0MD80OlU+PTIyND8zOlU+PTE5Mj8yOjE7S1syNTRdPUtbMjU0XT0xO3ZhciBZPWZ1bmN0aW9uKGVlLEope3ZhciBuZTtmb3IoKEo9Snx8ZWUubGVuZ3RoKT5lZS5sZW5ndGgmJihKPWVlLmxlbmd0aCksbmU9''@;'; put 'put ''Si0xO25lPj0wJiYxMjg9PSgxOTImZWVbbmVdKTspbmUtLTtyZXR1cm4gbmU8MHx8MD09PW5lP0o6bmUrS1tlZVtuZV1dPko/bmU6Sn0scT1mdW5jdGlvbihlZSl7dmFyIG5lLGllLGxlLG1lLF9lPWVlLmxlbmd0aCxUZT1uZXcgQXJyYXkoMipfZSk7Zm9yKGllPTAsbmU9MDtuZTxfZTspaWYo''@;'; put 'put ''KGxlPWVlW25lKytdKTwxMjgpVGVbaWUrK109bGU7ZWxzZSBpZigobWU9S1tsZV0pPjQpVGVbaWUrK109NjU1MzMsbmUrPW1lLTE7ZWxzZXtmb3IobGUmPTI9PT1tZT8zMTozPT09bWU/MTU6NzttZT4xJiZuZTxfZTspbGU9bGU8PDZ8NjMmZWVbbmUrK10sbWUtLTttZT4xP1RlW2llKytdPTY1''@;'; put 'put ''NTMzOmxlPDY1NTM2P1RlW2llKytdPWxlOihUZVtpZSsrXT01NTI5NnwobGUtPTY1NTM2KT4+MTAmMTAyMyxUZVtpZSsrXT01NjMyMHwxMDIzJmxlKX1yZXR1cm4gVGUubGVuZ3RoIT09aWUmJihUZS5zdWJhcnJheT9UZT1UZS5zdWJhcnJheSgwLGllKTpUZS5sZW5ndGg9aWUpLHouYXBwbHlG''@;'; put 'put ''cm9tQ2hhckNvZGUoVGUpfTtPLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oSil7cmV0dXJuIE4ubm9kZWJ1ZmZlcj9MKEosInV0Zi04Iik6ZnVuY3Rpb24oZWUpe3ZhciBKLG5lLGllLGxlLG1lLF9lPWVlLmxlbmd0aCxUZT0wO2ZvcihsZT0wO2xlPF9lO2xlKyspNTUyOTY9PSg2NDUxMiYobmU9ZWUu''@;'; put 'put ''Y2hhckNvZGVBdChsZSkpKSYmbGUrMTxfZSYmNTYzMjA9PSg2NDUxMiYoaWU9ZWUuY2hhckNvZGVBdChsZSsxKSkpJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwxMCkrKGllLTU2MzIwKSxsZSsrKSxUZSs9bmU8MTI4PzE6bmU8MjA0OD8yOm5lPDY1NTM2PzM6NDtmb3IoSj1OLnVpbnQ4YXJyYXk/''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkoVGUpOm5ldyBBcnJheShUZSksbWU9MCxsZT0wO21lPFRlO2xlKyspNTUyOTY9PSg2NDUxMiYobmU9ZWUuY2hhckNvZGVBdChsZSkpKSYmbGUrMTxfZSYmNTYzMjA9PSg2NDUxMiYoaWU9ZWUuY2hhckNvZGVBdChsZSsxKSkpJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwx''@;'; put 'put ''MCkrKGllLTU2MzIwKSxsZSsrKSxuZTwxMjg/SlttZSsrXT1uZTpuZTwyMDQ4PyhKW21lKytdPTE5MnxuZT4+PjYsSlttZSsrXT0xMjh8NjMmbmUpOm5lPDY1NTM2PyhKW21lKytdPTIyNHxuZT4+PjEyLEpbbWUrK109MTI4fG5lPj4+NiY2MyxKW21lKytdPTEyOHw2MyZuZSk6KEpbbWUrK109''@;'; put 'put ''MjQwfG5lPj4+MTgsSlttZSsrXT0xMjh8bmU+Pj4xMiY2MyxKW21lKytdPTEyOHxuZT4+PjYmNjMsSlttZSsrXT0xMjh8NjMmbmUpO3JldHVybiBKfShKKX0sTy51dGY4ZGVjb2RlPWZ1bmN0aW9uKEope2lmKE4ubm9kZWJ1ZmZlcilyZXR1cm4gei50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIs''@;'; put 'put ''SikudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciBuZT1bXSxpZT0wLGxlPShKPXoudHJhbnNmb3JtVG8oTi51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLEopKS5sZW5ndGg7aWU8bGU7KXt2YXIgX2U9WShKLE1hdGgubWluKGllKzY1NTM2LGxlKSk7bmUucHVzaChxKE4udWludDhh''@;'; put 'put ''cnJheT9KLnN1YmFycmF5KGllLF9lKTpKLnNsaWNlKGllLF9lKSkpLGllPV9lfXJldHVybiBuZS5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N1cHBv''@;'; put 'put ''cnQiKSxOPVAoIi4vY29tcHJlc3Npb25zIiksTD1QKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBLKGVlKXtyZXR1cm4gZWV9ZnVuY3Rpb24gVShlZSxKKXtmb3IodmFyIG5lPTA7bmU8ZWUubGVuZ3RoOysrbmUpSltuZV09MjU1JmVlLmNoYXJDb2RlQXQobmUpO3JldHVybiBKfWZ1bmN0aW9u''@;'; put 'put ''IFcoZWUpe3ZhciBKPTY1NTM2LG5lPVtdLGllPWVlLmxlbmd0aCxsZT1PLmdldFR5cGVPZihlZSksbWU9MCxfZT0hMDt0cnl7c3dpdGNoKGxlKXtjYXNlInVpbnQ4YXJyYXkiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgwKSk7YnJlYWs7Y2FzZSJub2Rl''@;'; put 'put ''YnVmZmVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTCgwKSl9fWNhdGNoe19lPSExfWlmKCFfZSl7Zm9yKHZhciBUZT0iIixTZT0wO1NlPGVlLmxlbmd0aDtTZSsrKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVlW1NlXSk7cmV0dXJuIFRlfWZvcig7bWU8aWUmJko+MTspdHJ5''@;'; put 'put ''e25lLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT1sZXx8Im5vZGVidWZmZXIiPT09bGU/ZWUuc2xpY2UobWUsTWF0aC5taW4obWUrSixpZSkpOmVlLnN1YmFycmF5KG1lLE1hdGgubWluKG1lK0osaWUpKSkpLG1lKz1KfWNhdGNoe0o9TWF0aC5mbG9vcihK''@;'; put 'put ''LzIpfXJldHVybiBuZS5qb2luKCIiKX1mdW5jdGlvbiBZKGVlLEope2Zvcih2YXIgbmU9MDtuZTxlZS5sZW5ndGg7bmUrKylKW25lXT1lZVtuZV07cmV0dXJuIEp9Ty5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKGVlKXtmb3IodmFyIEo9IiIsbmU9MDtuZTxlZS5sZW5ndGg7bmUrKylKKz1TdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKDI1NSZlZS5jaGFyQ29kZUF0KG5lKSk7cmV0dXJuIEp9LE8uYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihlZSl7Ty5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtlZV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KX1jYXRjaHt0cnl7''@;'; put 'put ''dmFyIG5lPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7cmV0dXJuIG5lLmFwcGVuZChlZSksbmUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2h7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sTy5hcHBseUZyb21DaGFyQ29kZT1XO3ZhciBxPXt9O3Euc3RyaW5nPXtzdHJpbmc6SyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFUoZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpm''@;'; put 'put ''dW5jdGlvbihlZSl7cmV0dXJuIHEuc3RyaW5nLnVpbnQ4YXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFUoZWUsbmV3IFVpbnQ4QXJyYXkoZWUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLEwoZWUubGVuZ3RoKSl9''@;'; put 'put ''fSxxLmFycmF5PXtzdHJpbmc6VyxhcnJheTpLLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0''@;'; put 'put ''dXJuIEwoZWUpfX0scS5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKGVlKXtyZXR1cm4gVyhuZXcgVWludDhBcnJheShlZSkpfSxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFkobmV3IFVpbnQ4QXJyYXkoZWUpLG5ldyBBcnJheShlZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkss''@;'; put 'put ''dWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIEwobmV3IFVpbnQ4QXJyYXkoZWUpKX19LHEudWludDhhcnJheT17c3RyaW5nOlcsYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBB''@;'; put 'put ''cnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBlZS5idWZmZXJ9LHVpbnQ4YXJyYXk6Syxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTChlZSl9fSxxLm5vZGVidWZmZXI9e3N0cmluZzpXLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShl''@;'; put 'put ''ZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gcS5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFkoZWUsbmV3IFVpbnQ4QXJyYXkoZWUubGVuZ3RoKSl9LG5vZGVidWZm''@;'; put 'put ''ZXI6S30sTy50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlZSxKKXtpZihKfHwoSj0iIiksIWVlKXJldHVybiBKO08uY2hlY2tTdXBwb3J0KGVlKTt2YXIgbmU9Ty5nZXRUeXBlT2YoSik7cmV0dXJuIHFbbmVdW2VlXShKKX0sTy5nZXRUeXBlT2Y9ZnVuY3Rpb24oZWUpe3JldHVybiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgZWU/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlZSk/ImFycmF5Ijp6Lm5vZGVidWZmZXImJkwudGVzdChlZSk/Im5vZGVidWZmZXIiOnoudWludDhhcnJheSYmZWUgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFy''@;'; put 'put ''cmF5Ijp6LmFycmF5YnVmZmVyJiZlZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSxPLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlZSl7aWYoIXpbZWUudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKGVlKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlz''@;'; put 'put ''IGJyb3dzZXIiKX0sTy5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LE8uTUFYX1ZBTFVFXzMyQklUUz0tMSxPLnByZXR0eT1mdW5jdGlvbihlZSl7dmFyIG5lLGllLEo9IiI7Zm9yKGllPTA7aWU8KGVlfHwiIikubGVuZ3RoO2llKyspSis9IlxceCIrKChuZT1lZS5jaGFyQ29kZUF0KGllKSk8MTY/''@;'; put 'put ''IjAiOiIiKStuZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gSn0sTy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oZWUpe2Zvcih2YXIgSiBpbiBOKWlmKE4uaGFzT3duUHJvcGVydHkoSikmJk5bSl0ubWFnaWM9PT1lZSlyZXR1cm4gTltKXTtyZXR1cm4gbnVsbH0sTy5pc1Jl''@;'; put 'put ''Z0V4cD1mdW5jdGlvbihlZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB6PVAoIi4vc3RyaW5nUmVhZGVyIiksTj1QKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxMPVAoIi4vdWludDhBcnJheVJlYWRlciIpLEs9UCgiLi91dGlscyIpLFU9UCgiLi9zaWduYXR1cmUiKSxXPVAoIi4vemlwRW50cnkiKSxZPVAoIi4vc3VwcG9ydCIpLHE9UCgiLi9vYmplY3Qi''@;'; put 'put ''KTtmdW5jdGlvbiBlZShKLG5lKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9bmUsSiYmdGhpcy5sb2FkKEopfWVlLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oSil7dmFyIG5lPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYobmUhPT1KKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitLLnByZXR0eShuZSkrIiwgZXhwZWN0ZWQgIitLLnByZXR0eShKKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZElu''@;'; put 'put ''dCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5j''@;'; put 'put ''ZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5n''@;'; put 'put ''KHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PXEudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52''@;'; put 'put ''ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFk''@;'; put 'put ''SW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxE''@;'; put 'put ''aXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBpZSxsZSxtZSxKPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8SjspaWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSxsZT10aGlzLnJlYWRlci5yZWFkSW50KDQp''@;'; put 'put ''LG1lPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcobGUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtpZV09e2lkOmllLGxlbmd0aDpsZSx2YWx1ZTptZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJT''@;'; put 'put ''dGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgSixuZTtmb3IoSj0wO0o8dGhpcy5maWxlcy5sZW5ndGg7SisrKXRoaXMucmVhZGVyLnNldEluZGV4KChuZT10aGlzLmZpbGVzW0pdKS5sb2NhbEhlYWRlck9mZnNldCks''@;'; put 'put ''dGhpcy5jaGVja1NpZ25hdHVyZShVLkxPQ0FMX0ZJTEVfSEVBREVSKSxuZS5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSxuZS5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIEo7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNl''@;'; put 'put ''dCk7dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PVUuQ0VOVFJBTF9GSUxFX0hFQURFUjspKEo9bmV3IFcoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChKKX0scmVhZEVuZE9mQ2VudHJh''@;'; put 'put ''bDpmdW5jdGlvbigpe3ZhciBKPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKFUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PUopdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTtpZih0aGlz''@;'; put 'put ''LnJlYWRlci5zZXRJbmRleChKKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PUsu''@;'; put 'put ''TUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1LLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMu''@;'; put 'put ''Y2VudHJhbERpck9mZnNldD09PUsuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09PShKPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKFUuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6''@;'; put 'put ''IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoSiksdGhpcy5jaGVja1NpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRy''@;'; put 'put ''YWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9fSxwcmVw''@;'; put 'put ''YXJlUmVhZGVyOmZ1bmN0aW9uKEope3ZhciBuZT1LLmdldFR5cGVPZihKKTt0aGlzLnJlYWRlcj0ic3RyaW5nIiE9PW5lfHxZLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09bmU/bmV3IE4oSik6bmV3IEwoSy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsSikpOm5ldyB6KEosdGhpcy5sb2Fk''@;'; put 'put ''T3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKEope3RoaXMucHJlcGFyZVJlYWRlcihKKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sRi5leHBvcnRzPWVlfSx7Ii4vbm9kZUJ1''@;'; put 'put ''ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB6PVAoIi4vc3RyaW5nUmVhZGVyIiksTj1QKCIuL3V0aWxzIiksTD1QKCIuL2NvbXByZXNzZWRPYmplY3QiKSxLPVAoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gVShXLFkpe3RoaXMub3B0aW9ucz1XLHRoaXMubG9hZE9wdGlvbnM9WX1VLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4hKDIwNDgmfnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbihXLFkscSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGVlPVcuaW5kZXg7Vy5zZXRJbmRl''@;'; put 'put ''eChZKTt2YXIgSj1XLnJlYWREYXRhKHEpO3JldHVybiBXLnNldEluZGV4KGVlKSxKfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oVyxZLHEsZWUsSil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG5lPU4udHJhbnNmb3JtVG8oZWUudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNz''@;'; put 'put ''ZWRDb250ZW50KCkpLGllPWVlLnVuY29tcHJlc3MobmUpO2lmKGllLmxlbmd0aCE9PUopdGhyb3cgbmV3IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoIik7cmV0dXJuIGllfX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihXKXt2YXIgWSxxO2lmKFcuc2tpcCgy''@;'; put 'put ''MiksdGhpcy5maWxlTmFtZUxlbmd0aD1XLnJlYWRJbnQoMikscT1XLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1XLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksVy5za2lwKHEpLC0xPT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYobnVsbD09PShZPU4uZmluZENv''@;'; put 'put ''bXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK04ucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsiKSIpO2lmKHRo''@;'; put 'put ''aXMuZGVjb21wcmVzc2VkPW5ldyBMLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9dGhpcy5jcmMz''@;'; put 'put ''Mix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9kLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KFcsVy5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLFkpLHRo''@;'; put 'put ''aXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChXLFcuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxZLHRoaXMudW5jb21wcmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5jaGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9Ti50cmFuc2Zvcm1Ubygi''@;'; put 'put ''c3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLEsuY3JjMzIodGhpcy5kZWNvbXByZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIgbWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKFcpe2lmKHRo''@;'; put 'put ''aXMudmVyc2lvbk1hZGVCeT1XLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPVcucmVhZEludCgyKSx0aGlzLmJpdEZsYWc9Vy5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9Vy5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1XLnJlYWREYXRlKCksdGhpcy5jcmMzMj1X''@;'; put 'put ''LnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPVcucmVhZEludCg0KSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVcucmVhZEludCgyKSx0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPVcucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50''@;'; put 'put ''TGVuZ3RoPVcucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1XLnJlYWRJbnQoMiksdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPVcucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9Vy5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Vy5yZWFk''@;'; put 'put ''SW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1lPVcucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhXKSx0aGlzLnBhcnNlWklQNjRF''@;'; put 'put ''eHRyYUZpZWxkKFcpLHRoaXMuZmlsZUNvbW1lbnQ9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpLHRoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKFcpe2lmKHRoaXMuZXh0cmFGaWVsZHNb''@;'; put 'put ''MV0pe3ZhciBZPW5ldyB6KHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2VkU2l6ZT09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1ZLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1OLk1BWF9WQUxVRV8zMkJJVFMm''@;'; put 'put ''Jih0aGlzLmNvbXByZXNzZWRTaXplPVkucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9WS5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRo''@;'; put 'put ''aXMuZGlza051bWJlclN0YXJ0PVkucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24oVyl7dmFyIHEsZWUsSixZPVcuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307Vy5pbmRleDxZK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KXE9Vy5y''@;'; put 'put ''ZWFkSW50KDIpLGVlPVcucmVhZEludCgyKSxKPVcucmVhZFN0cmluZyhlZSksdGhpcy5leHRyYUZpZWxkc1txXT17aWQ6cSxsZW5ndGg6ZWUsdmFsdWU6Sn19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUsudXRmOGRlY29kZSh0aGlzLmZp''@;'; put 'put ''bGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUsudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBXPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1XJiYodGhpcy5maWxlTmFtZT1XKTt2YXIgWT10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1l''@;'; put 'put ''bnQoKTtudWxsIT09WSYmKHRoaXMuZmlsZUNvbW1lbnQ9WSl9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoVyl7dmFyIFk9bmV3IHooVy52YWx1ZSk7cmV0dXJuIDEhPT1ZLnJlYWRJbnQoMSl8fEsuY3JjMzIo''@;'; put 'put ''dGhpcy5maWxlTmFtZSkhPT1ZLnJlYWRJbnQoNCk/bnVsbDpLLnV0ZjhkZWNvZGUoWS5yZWFkU3RyaW5nKFcubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBXPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFcpe3Zh''@;'; put 'put ''ciBZPW5ldyB6KFcudmFsdWUpO3JldHVybiAxIT09WS5yZWFkSW50KDEpfHxLLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09WS5yZWFkSW50KDQpP251bGw6Sy51dGY4ZGVjb2RlKFkucmVhZFN0cmluZyhXLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxGLmV4cG9ydHM9VX0seyIuL2NvbXBy''@;'; put 'put ''ZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciBVPXt9OygwLFAoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoVSxQKCIuL2xpYi9kZWZsYXRlIiksUCgi''@;'; put 'put ''Li9saWIvaW5mbGF0ZSIpLFAoIi4vbGliL3psaWIvY29uc3RhbnRzIikpLEYuZXhwb3J0cz1VfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKFAsRixP''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi96bGliL2RlZmxhdGUuanMiKSxOPVAoIi4vdXRpbHMvY29tbW9uIiksTD1QKCIuL3V0aWxzL3N0cmluZ3MiKSxLPVAoIi4vemxpYi9tZXNzYWdlcyIpLFU9UCgiLi96bGliL3pzdHJlYW0iKSxsZT1mdW5jdGlvbihTZSl7dGhpcy5vcHRpb25zPU4u''@;'; put 'put ''YXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LFNlfHx7fSk7dmFyIHplPXRoaXMub3B0aW9uczt6ZS5yYXcmJnplLndpbmRvd0JpdHM+MD96ZS53aW5kb3dCaXRzPS16ZS53aW5kb3dCaXRz''@;'; put 'put ''OnplLmd6aXAmJnplLndpbmRvd0JpdHM+MCYmemUud2luZG93Qml0czwxNiYmKHplLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBVLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgVj16LmRl''@;'; put 'put ''ZmxhdGVJbml0Mih0aGlzLnN0cm0semUubGV2ZWwsemUubWV0aG9kLHplLndpbmRvd0JpdHMsemUubWVtTGV2ZWwsemUuc3RyYXRlZ3kpO2lmKDAhPT1WKXRocm93IG5ldyBFcnJvcihLW1ZdKTt6ZS5oZWFkZXImJnouZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0semUuaGVhZGVyKX07ZnVu''@;'; put 'put ''Y3Rpb24gbWUoU2UsemUpe3ZhciBWPW5ldyBsZSh6ZSk7aWYoVi5wdXNoKFNlLCEwKSxWLmVycil0aHJvdyBWLm1zZztyZXR1cm4gVi5yZXN1bHR9bGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oU2UsemUpe3ZhciBiLHgsVj10aGlzLnN0cm0scD10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lm''@;'; put 'put ''KHRoaXMuZW5kZWQpcmV0dXJuITE7eD16ZT09PX5+emU/emU6ITA9PT16ZT80OjAsVi5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIFNlP0wuc3RyaW5nMmJ1ZihTZSk6U2UsVi5uZXh0X2luPTAsVi5hdmFpbF9pbj1WLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Vi5hdmFpbF9vdXQmJihWLm91dHB1''@;'; put 'put ''dD1uZXcgTi5CdWY4KHApLFYubmV4dF9vdXQ9MCxWLmF2YWlsX291dD1wKSwxIT09KGI9ei5kZWZsYXRlKFYseCkpJiYwIT09YilyZXR1cm4gdGhpcy5vbkVuZChiKSx0aGlzLmVuZGVkPSEwLCExOygwPT09Vi5hdmFpbF9vdXR8fDA9PT1WLmF2YWlsX2luJiY0PT09eCkmJnRoaXMub25EYXRh''@;'; put 'put ''KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP0wuYnVmMmJpbnN0cmluZyhOLnNocmlua0J1ZihWLm91dHB1dCxWLm5leHRfb3V0KSk6Ti5zaHJpbmtCdWYoVi5vdXRwdXQsVi5uZXh0X291dCkpfXdoaWxlKChWLmF2YWlsX2luPjB8fDA9PT1WLmF2YWlsX291dCkmJjEhPT1iKTtyZXR1cm4g''@;'; put 'put ''NCE9PXh8fChiPXouZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoYiksdGhpcy5lbmRlZD0hMCwwPT09Yil9LGxlLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oU2Upe3RoaXMuY2h1bmtzLnB1c2goU2UpfSxsZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oU2UpezA9PT1TZSYm''@;'; put 'put ''KHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOk4uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPVNlLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LE8uRGVmbGF0ZT1sZSxPLmRlZmxhdGU9''@;'; put 'put ''bWUsTy5kZWZsYXRlUmF3PWZ1bmN0aW9uIF9lKFNlLHplKXtyZXR1cm4oemU9emV8fHt9KS5yYXc9ITAsbWUoU2UsemUpfSxPLmd6aXA9ZnVuY3Rpb24gVGUoU2UsemUpe3JldHVybih6ZT16ZXx8e30pLmd6aXA9ITAsbWUoU2UsemUpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMv''@;'; put 'put ''c3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi96bGliL2luZmxhdGUuanMiKSxOPVAoIi4vdXRpbHMvY29tbW9uIiksTD1Q''@;'; put 'put ''KCIuL3V0aWxzL3N0cmluZ3MiKSxLPVAoIi4vemxpYi9jb25zdGFudHMiKSxVPVAoIi4vemxpYi9tZXNzYWdlcyIpLFc9UCgiLi96bGliL3pzdHJlYW0iKSxZPVAoIi4vemxpYi9nemhlYWRlciIpLHE9ZnVuY3Rpb24obmUpe3RoaXMub3B0aW9ucz1OLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0''@;'; put 'put ''LHdpbmRvd0JpdHM6MCx0bzoiIn0sbmV8fHt9KTt2YXIgaWU9dGhpcy5vcHRpb25zO2llLnJhdyYmaWUud2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmKGllLndpbmRvd0JpdHM9LWllLndpbmRvd0JpdHMsMD09PWllLndpbmRvd0JpdHMmJihpZS53aW5kb3dCaXRzPS0xNSkpLGll''@;'; put 'put ''LndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJiEobmUmJm5lLndpbmRvd0JpdHMpJiYoaWUud2luZG93Qml0cys9MzIpLGllLndpbmRvd0JpdHM+MTUmJmllLndpbmRvd0JpdHM8NDgmJigxNSZpZS53aW5kb3dCaXRzfHwoaWUud2luZG93Qml0c3w9MTUpKSx0aGlzLmVycj0wLHRo''@;'; put 'put ''aXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBXLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbGU9ei5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGllLndpbmRvd0JpdHMpO2lmKGxlIT09Sy5aX09LKXRocm93IG5ldyBFcnJvcihVW2xlXSk7dGhp''@;'; put 'put ''cy5oZWFkZXI9bmV3IFksei5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9O2Z1bmN0aW9uIGVlKG5lLGllKXt2YXIgbGU9bmV3IHEoaWUpO2lmKGxlLnB1c2gobmUsITApLGxlLmVycil0aHJvdyBsZS5tc2c7cmV0dXJuIGxlLnJlc3VsdH1xLnByb3RvdHlwZS5wdXNo''@;'; put 'put ''PWZ1bmN0aW9uKG5lLGllKXt2YXIgX2UsVGUsU2UsemUsVixsZT10aGlzLnN0cm0sbWU9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO1RlPWllPT09fn5pZT9pZTohMD09PWllP0suWl9GSU5JU0g6Sy5aX05PX0ZMVVNILGxlLmlucHV0PSJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgbmU/TC5iaW5zdHJpbmcyYnVmKG5lKTpuZSxsZS5uZXh0X2luPTAsbGUuYXZhaWxfaW49bGUuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1sZS5hdmFpbF9vdXQmJihsZS5vdXRwdXQ9bmV3IE4uQnVmOChtZSksbGUubmV4dF9vdXQ9MCxsZS5hdmFpbF9vdXQ9bWUpLChfZT16LmluZmxh''@;'; put 'put ''dGUobGUsSy5aX05PX0ZMVVNIKSkhPT1LLlpfU1RSRUFNX0VORCYmX2UhPT1LLlpfT0spcmV0dXJuIHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsITE7bGUubmV4dF9vdXQmJigwPT09bGUuYXZhaWxfb3V0fHxfZT09PUsuWl9TVFJFQU1fRU5EfHwwPT09bGUuYXZhaWxfaW4mJlRlPT09''@;'; put 'put ''Sy5aX0ZJTklTSCkmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz8oU2U9TC51dGY4Ym9yZGVyKGxlLm91dHB1dCxsZS5uZXh0X291dCksemU9bGUubmV4dF9vdXQtU2UsVj1MLmJ1ZjJzdHJpbmcobGUub3V0cHV0LFNlKSxsZS5uZXh0X291dD16ZSxsZS5hdmFpbF9vdXQ9bWUtemUsemUm''@;'; put 'put ''Jk4uYXJyYXlTZXQobGUub3V0cHV0LGxlLm91dHB1dCxTZSx6ZSwwKSx0aGlzLm9uRGF0YShWKSk6dGhpcy5vbkRhdGEoTi5zaHJpbmtCdWYobGUub3V0cHV0LGxlLm5leHRfb3V0KSkpfXdoaWxlKGxlLmF2YWlsX2luPjAmJl9lIT09Sy5aX1NUUkVBTV9FTkQpO3JldHVybiBfZT09PUsuWl9T''@;'; put 'put ''VFJFQU1fRU5EJiYoVGU9Sy5aX0ZJTklTSCksVGUhPT1LLlpfRklOSVNIfHwoX2U9ei5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChfZSksdGhpcy5lbmRlZD0hMCxfZT09PUsuWl9PSyl9LHEucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihuZSl7dGhpcy5jaHVua3MucHVzaChu''@;'; put 'put ''ZSl9LHEucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKG5lKXtuZT09PUsuWl9PSyYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOk4uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPW5l''@;'; put 'put ''LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LE8uSW5mbGF0ZT1xLE8uaW5mbGF0ZT1lZSxPLmluZmxhdGVSYXc9ZnVuY3Rpb24gSihuZSxpZSl7cmV0dXJuKGllPWllfHx7fSkucmF3PSEwLGVlKG5lLGllKX0sTy51bmd6aXA9ZWV9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmlu''@;'; put 'put ''Z3MiOjI4LCIuL3psaWIvY29uc3RhbnRzIjozMCwiLi96bGliL2d6aGVhZGVyIjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgVWlu''@;'; put 'put ''dDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1IjtPLmFzc2lnbj1mdW5jdGlvbihLKXtmb3IodmFyIFU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO1UubGVuZ3RoOyl7dmFyIFc9VS5zaGlmdCgpO2lmKFcpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgVyl0aHJvdyBuZXcgVHlwZUVycm9yKFcrIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgWSBpbiBXKVcuaGFzT3duUHJvcGVydHkoWSkmJihLW1ldPVdbWV0pfX1yZXR1cm4gS30sTy5zaHJpbmtCdWY9ZnVuY3Rpb24oSyxVKXtyZXR1cm4gSy5sZW5ndGg9''@;'; put 'put ''PT1VP0s6Sy5zdWJhcnJheT9LLnN1YmFycmF5KDAsVSk6KEsubGVuZ3RoPVUsSyl9O3ZhciBOPXthcnJheVNldDpmdW5jdGlvbihLLFUsVyxZLHEpe2lmKFUuc3ViYXJyYXkmJksuc3ViYXJyYXkpSy5zZXQoVS5zdWJhcnJheShXLFcrWSkscSk7ZWxzZSBmb3IodmFyIGVlPTA7ZWU8WTtlZSsr''@;'; put 'put ''KUtbcStlZV09VVtXK2VlXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihLKXt2YXIgVSxXLFkscSxlZSxKO2ZvcihZPTAsVT0wLFc9Sy5sZW5ndGg7VTxXO1UrKylZKz1LW1VdLmxlbmd0aDtmb3IoSj1uZXcgVWludDhBcnJheShZKSxxPTAsVT0wLFc9Sy5sZW5ndGg7VTxXO1UrKylKLnNldChl''@;'; put 'put ''ZT1LW1VdLHEpLHErPWVlLmxlbmd0aDtyZXR1cm4gSn19LEw9e2FycmF5U2V0OmZ1bmN0aW9uKEssVSxXLFkscSl7Zm9yKHZhciBlZT0wO2VlPFk7ZWUrKylLW3ErZWVdPVVbVytlZV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oSyl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLEspfX07Ty5z''@;'; put 'put ''ZXRUeXBlZD1mdW5jdGlvbihLKXtLPyhPLkJ1Zjg9VWludDhBcnJheSxPLkJ1ZjE2PVVpbnQxNkFycmF5LE8uQnVmMzI9SW50MzJBcnJheSxPLmFzc2lnbihPLE4pKTooTy5CdWY4PUFycmF5LE8uQnVmMTY9QXJyYXksTy5CdWYzMj1BcnJheSxPLmFzc2lnbihPLEwpKX0sTy5zZXRUeXBlZCh6''@;'; put 'put ''KX0se31dLDI4OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vY29tbW9uIiksTj0hMCxMPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaHtOPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoMSkpfWNhdGNoe0w9ITF9Zm9yKHZhciBLPW5ldyB6LkJ1ZjgoMjU2KSxVPTA7VTwyNTY7VSsrKUtbVV09VT49MjUyPzY6VT49MjQ4PzU6VT49MjQwPzQ6VT49MjI0PzM6VT49MTkyPzI6MTtmdW5jdGlvbiBXKFkscSl7aWYocTw2NTUzNyYmKFkuc3ViYXJyYXkmJkx8fCFZLnN1YmFy''@;'; put 'put ''cmF5JiZOKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHouc2hyaW5rQnVmKFkscSkpO2Zvcih2YXIgZWU9IiIsSj0wO0o8cTtKKyspZWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWVtKXSk7cmV0dXJuIGVlfUtbMjU0XT1LWzI1NF09MSxPLnN0cmluZzJidWY9ZnVuY3Rp''@;'; put 'put ''b24oWSl7dmFyIHEsZWUsSixuZSxpZSxsZT1ZLmxlbmd0aCxtZT0wO2ZvcihuZT0wO25lPGxlO25lKyspNTUyOTY9PSg2NDUxMiYoZWU9WS5jaGFyQ29kZUF0KG5lKSkpJiZuZSsxPGxlJiY1NjMyMD09KDY0NTEyJihKPVkuY2hhckNvZGVBdChuZSsxKSkpJiYoZWU9NjU1MzYrKGVlLTU1Mjk2''@;'; put 'put ''PDwxMCkrKEotNTYzMjApLG5lKyspLG1lKz1lZTwxMjg/MTplZTwyMDQ4PzI6ZWU8NjU1MzY/Mzo0O2ZvcihxPW5ldyB6LkJ1ZjgobWUpLGllPTAsbmU9MDtpZTxtZTtuZSsrKTU1Mjk2PT0oNjQ1MTImKGVlPVkuY2hhckNvZGVBdChuZSkpKSYmbmUrMTxsZSYmNTYzMjA9PSg2NDUxMiYoSj1Z''@;'; put 'put ''LmNoYXJDb2RlQXQobmUrMSkpKSYmKGVlPTY1NTM2KyhlZS01NTI5Njw8MTApKyhKLTU2MzIwKSxuZSsrKSxlZTwxMjg/cVtpZSsrXT1lZTplZTwyMDQ4PyhxW2llKytdPTE5MnxlZT4+PjYscVtpZSsrXT0xMjh8NjMmZWUpOmVlPDY1NTM2PyhxW2llKytdPTIyNHxlZT4+PjEyLHFbaWUrK109''@;'; put 'put ''MTI4fGVlPj4+NiY2MyxxW2llKytdPTEyOHw2MyZlZSk6KHFbaWUrK109MjQwfGVlPj4+MTgscVtpZSsrXT0xMjh8ZWU+Pj4xMiY2MyxxW2llKytdPTEyOHxlZT4+PjYmNjMscVtpZSsrXT0xMjh8NjMmZWUpO3JldHVybiBxfSxPLmJ1ZjJiaW5zdHJpbmc9ZnVuY3Rpb24oWSl7cmV0dXJuIFco''@;'; put 'put ''WSxZLmxlbmd0aCl9LE8uYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbihZKXtmb3IodmFyIHE9bmV3IHouQnVmOChZLmxlbmd0aCksZWU9MCxKPXEubGVuZ3RoO2VlPEo7ZWUrKylxW2VlXT1ZLmNoYXJDb2RlQXQoZWUpO3JldHVybiBxfSxPLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oWSxxKXt2YXIgZWUs''@;'; put 'put ''SixuZSxpZSxsZT1xfHxZLmxlbmd0aCxtZT1uZXcgQXJyYXkoMipsZSk7Zm9yKEo9MCxlZT0wO2VlPGxlOylpZigobmU9WVtlZSsrXSk8MTI4KW1lW0orK109bmU7ZWxzZSBpZigoaWU9S1tuZV0pPjQpbWVbSisrXT02NTUzMyxlZSs9aWUtMTtlbHNle2ZvcihuZSY9Mj09PWllPzMxOjM9PT1p''@;'; put 'put ''ZT8xNTo3O2llPjEmJmVlPGxlOyluZT1uZTw8Nnw2MyZZW2VlKytdLGllLS07aWU+MT9tZVtKKytdPTY1NTMzOm5lPDY1NTM2P21lW0orK109bmU6KG1lW0orK109NTUyOTZ8KG5lLT02NTUzNik+PjEwJjEwMjMsbWVbSisrXT01NjMyMHwxMDIzJm5lKX1yZXR1cm4gVyhtZSxKKX0sTy51dGY4''@;'; put 'put ''Ym9yZGVyPWZ1bmN0aW9uKFkscSl7dmFyIGVlO2ZvcigocT1xfHxZLmxlbmd0aCk+WS5sZW5ndGgmJihxPVkubGVuZ3RoKSxlZT1xLTE7ZWU+PTAmJjEyOD09KDE5MiZZW2VlXSk7KWVlLS07cmV0dXJuIGVlPDB8fDA9PT1lZT9xOmVlK0tbWVtlZV1dPnE/ZWU6cX19LHsiLi9jb21tb24iOjI3''@;'; put 'put ''fV0sMjk6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uIHooTixMLEssVSl7Zm9yKHZhciBXPTY1NTM1Jk4sWT1OPj4+MTYmNjU1MzUscT0wOzAhPT1LOyl7Sy09cT1LPjJlMz8yZTM6Sztkb3tZPVkrKFc9VytMW1UrK118MCl8MH13aGlsZSgtLXEpO1cl''@;'; put 'put ''PTY1NTIxLFklPTY1NTIxfXJldHVybiBXfFk8PDE2fX0se31dLDMwOltmdW5jdGlvbihQLEYsTyl7Ri5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6''@;'; put 'put ''MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJ''@;'; put 'put ''T046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sMzE6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIE49''@;'; put 'put ''ZnVuY3Rpb24geigpe2Zvcih2YXIgSyxVPVtdLFc9MDtXPDI1NjtXKyspe0s9Vztmb3IodmFyIFk9MDtZPDg7WSsrKUs9MSZLPzM5ODgyOTIzODReSz4+PjE6Sz4+PjE7VVtXXT1LfXJldHVybiBVfSgpO0YuZXhwb3J0cz1mdW5jdGlvbiBMKEssVSxXLFkpe3ZhciBxPU4sZWU9WStXO0s9fks7''@;'; put 'put ''Zm9yKHZhciBKPVk7SjxlZTtKKyspSz1LPj4+OF5xWzI1NSYoS15VW0pdKV07cmV0dXJufkt9fSx7fV0sMzI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIiksTj1QKCIuL3RyZWVzIiksTD1QKCIuL2FkbGVyMzIiKSxLPVAoIi4vY3JjMzIi''@;'; put 'put ''KSxVPVAoIi4vbWVzc2FnZXMiKSxXPTAsbmU9MCxsZT0tMix4PTIsQz04LEE9Mjg2LGFlPTMwLHRlPTE5LHNlPTIqQSsxLHdlPTE1LFVlPTMsSmU9MjU4LG90PUplK1VlKzEsdmU9NDIsUmU9MTEzO2Z1bmN0aW9uIFFlKFdlLFR0KXtyZXR1cm4gV2UubXNnPVVbVHRdLFR0fWZ1bmN0aW9uIHVu''@;'; put 'put ''KFdlKXtyZXR1cm4oV2U8PDEpLShXZT40Pzk6MCl9ZnVuY3Rpb24geXQoV2Upe2Zvcih2YXIgVHQ9V2UubGVuZ3RoOy0tVHQ+PTA7KVdlW1R0XT0wfWZ1bmN0aW9uIE10KFdlKXt2YXIgVHQ9V2Uuc3RhdGUsbnI9VHQucGVuZGluZztucj5XZS5hdmFpbF9vdXQmJihucj1XZS5hdmFpbF9vdXQp''@;'; put 'put ''LDAhPT1uciYmKHouYXJyYXlTZXQoV2Uub3V0cHV0LFR0LnBlbmRpbmdfYnVmLFR0LnBlbmRpbmdfb3V0LG5yLFdlLm5leHRfb3V0KSxXZS5uZXh0X291dCs9bnIsVHQucGVuZGluZ19vdXQrPW5yLFdlLnRvdGFsX291dCs9bnIsV2UuYXZhaWxfb3V0LT1ucixUdC5wZW5kaW5nLT1uciwwPT09''@;'; put 'put ''VHQucGVuZGluZyYmKFR0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiBEdChXZSxUdCl7Ti5fdHJfZmx1c2hfYmxvY2soV2UsV2UuYmxvY2tfc3RhcnQ+PTA/V2UuYmxvY2tfc3RhcnQ6LTEsV2Uuc3Ryc3RhcnQtV2UuYmxvY2tfc3RhcnQsVHQpLFdlLmJsb2NrX3N0YXJ0PVdlLnN0cnN0YXJ0''@;'; put 'put ''LE10KFdlLnN0cm0pfWZ1bmN0aW9uIGl0KFdlLFR0KXtXZS5wZW5kaW5nX2J1ZltXZS5wZW5kaW5nKytdPVR0fWZ1bmN0aW9uICRlKFdlLFR0KXtXZS5wZW5kaW5nX2J1ZltXZS5wZW5kaW5nKytdPVR0Pj4+OCYyNTUsV2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT0yNTUmVHR9ZnVuY3Rp''@;'; put 'put ''b24gdHQoV2UsVHQsbnIsaHQpe3ZhciB4dD1XZS5hdmFpbF9pbjtyZXR1cm4geHQ+aHQmJih4dD1odCksMD09PXh0PzA6KFdlLmF2YWlsX2luLT14dCx6LmFycmF5U2V0KFR0LFdlLmlucHV0LFdlLm5leHRfaW4seHQsbnIpLDE9PT1XZS5zdGF0ZS53cmFwP1dlLmFkbGVyPUwoV2UuYWRsZXIs''@;'; put 'put ''VHQseHQsbnIpOjI9PT1XZS5zdGF0ZS53cmFwJiYoV2UuYWRsZXI9SyhXZS5hZGxlcixUdCx4dCxucikpLFdlLm5leHRfaW4rPXh0LFdlLnRvdGFsX2luKz14dCx4dCl9ZnVuY3Rpb24gSGUoV2UsVHQpe3ZhciB4dCxqbixucj1XZS5tYXhfY2hhaW5fbGVuZ3RoLGh0PVdlLnN0cnN0YXJ0LHJu''@;'; put 'put ''PVdlLnByZXZfbGVuZ3RoLHp0PVdlLm5pY2VfbWF0Y2gsaGk9V2Uuc3Ryc3RhcnQ+V2Uud19zaXplLW90P1dlLnN0cnN0YXJ0LShXZS53X3NpemUtb3QpOjAsY249V2Uud2luZG93LGZuPVdlLndfbWFzayxJaT1XZS5wcmV2LFh0PVdlLnN0cnN0YXJ0K0plLGVuPWNuW2h0K3JuLTFdLHVhPWNu''@;'; put 'put ''W2h0K3JuXTtXZS5wcmV2X2xlbmd0aD49V2UuZ29vZF9tYXRjaCYmKG5yPj49MiksenQ+V2UubG9va2FoZWFkJiYoenQ9V2UubG9va2FoZWFkKTtkb3tpZihjblsoeHQ9VHQpK3JuXT09PXVhJiZjblt4dCtybi0xXT09PWVuJiZjblt4dF09PT1jbltodF0mJmNuWysreHRdPT09Y25baHQrMV0p''@;'; put 'put ''e2h0Kz0yLHh0Kys7ZG97fXdoaWxlKGNuWysraHRdPT09Y25bKyt4dF0mJmNuWysraHRdPT09Y25bKyt4dF0mJmNuWysraHRdPT09Y25bKyt4dF0mJmNuWysraHRdPT09Y25bKyt4dF0mJmNuWysraHRdPT09Y25bKyt4dF0mJmNuWysraHRdPT09Y25bKyt4dF0mJmNuWysraHRdPT09Y25bKyt4''@;'; put 'put ''dF0mJmNuWysraHRdPT09Y25bKyt4dF0mJmh0PFh0KTtpZihqbj1KZS0oWHQtaHQpLGh0PVh0LUplLGpuPnJuKXtpZihXZS5tYXRjaF9zdGFydD1UdCxybj1qbixqbj49enQpYnJlYWs7ZW49Y25baHQrcm4tMV0sdWE9Y25baHQrcm5dfX19d2hpbGUoKFR0PUlpW1R0JmZuXSk+aGkmJjAhPS0t''@;'; put 'put ''bnIpO3JldHVybiBybjw9V2UubG9va2FoZWFkP3JuOldlLmxvb2thaGVhZH1mdW5jdGlvbiB1dChXZSl7dmFyIG5yLGh0LHh0LGpuLHJuLFR0PVdlLndfc2l6ZTtkb3tpZihqbj1XZS53aW5kb3dfc2l6ZS1XZS5sb29rYWhlYWQtV2Uuc3Ryc3RhcnQsV2Uuc3Ryc3RhcnQ+PVR0KyhUdC1vdCkp''@;'; put 'put ''e3ouYXJyYXlTZXQoV2Uud2luZG93LFdlLndpbmRvdyxUdCxUdCwwKSxXZS5tYXRjaF9zdGFydC09VHQsV2Uuc3Ryc3RhcnQtPVR0LFdlLmJsb2NrX3N0YXJ0LT1UdCxucj1odD1XZS5oYXNoX3NpemU7ZG97eHQ9V2UuaGVhZFstLW5yXSxXZS5oZWFkW25yXT14dD49VHQ/eHQtVHQ6MH13aGls''@;'; put 'put ''ZSgtLWh0KTtucj1odD1UdDtkb3t4dD1XZS5wcmV2Wy0tbnJdLFdlLnByZXZbbnJdPXh0Pj1UdD94dC1UdDowfXdoaWxlKC0taHQpO2puKz1UdH1pZigwPT09V2Uuc3RybS5hdmFpbF9pbilicmVhaztpZihodD10dChXZS5zdHJtLFdlLndpbmRvdyxXZS5zdHJzdGFydCtXZS5sb29rYWhlYWQs''@;'; put 'put ''am4pLFdlLmxvb2thaGVhZCs9aHQsV2UubG9va2FoZWFkK1dlLmluc2VydD49VWUpZm9yKFdlLmluc19oPVdlLndpbmRvd1tybj1XZS5zdHJzdGFydC1XZS5pbnNlcnRdLFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbcm4rMV0pJldlLmhhc2hfbWFzaztXZS5p''@;'; put 'put ''bnNlcnQmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W3JuK1VlLTFdKSZXZS5oYXNoX21hc2ssV2UucHJldltybiZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPXJuLHJuKyssV2UuaW5zZXJ0LS0sIShXZS5sb29rYWhl''@;'; put 'put ''YWQrV2UuaW5zZXJ0PFVlKSk7KTt9d2hpbGUoV2UubG9va2FoZWFkPG90JiYwIT09V2Uuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gUnQoV2UsVHQpe2Zvcih2YXIgbnIsaHQ7Oyl7aWYoV2UubG9va2FoZWFkPG90KXtpZih1dChXZSksV2UubG9va2FoZWFkPG90JiZUdD09PVcpcmV0dXJuIDE7''@;'; put 'put ''aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihucj0wLFdlLmxvb2thaGVhZD49VWUmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2ssbnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdl''@;'; put 'put ''LmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0cnN0YXJ0KSwwIT09bnImJldlLnN0cnN0YXJ0LW5yPD1XZS53X3NpemUtb3QmJihXZS5tYXRjaF9sZW5ndGg9SGUoV2UsbnIpKSxXZS5tYXRjaF9sZW5ndGg+PVVlKWlmKGh0PU4uX3RyX3RhbGx5KFdlLFdlLnN0cnN0YXJ0''@;'; put 'put ''LVdlLm1hdGNoX3N0YXJ0LFdlLm1hdGNoX2xlbmd0aC1VZSksV2UubG9va2FoZWFkLT1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPD1XZS5tYXhfbGF6eV9tYXRjaCYmV2UubG9va2FoZWFkPj1VZSl7V2UubWF0Y2hfbGVuZ3RoLS07ZG97V2Uuc3Ryc3RhcnQrKyxXZS5pbnNfaD0o''@;'; put 'put ''V2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2ssbnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0cnN0YXJ0fXdoaWxlKDAhPS0tV2UubWF0''@;'; put 'put ''Y2hfbGVuZ3RoKTtXZS5zdHJzdGFydCsrfWVsc2UgV2Uuc3Ryc3RhcnQrPVdlLm1hdGNoX2xlbmd0aCxXZS5tYXRjaF9sZW5ndGg9MCxXZS5pbnNfaD1XZS53aW5kb3dbV2Uuc3Ryc3RhcnRdLFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQr''@;'; put 'put ''MV0pJldlLmhhc2hfbWFzaztlbHNlIGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0XSksV2UubG9va2FoZWFkLS0sV2Uuc3Ryc3RhcnQrKztpZihodCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9V2Uu''@;'; put 'put ''c3Ryc3RhcnQ8VWUtMT9XZS5zdHJzdGFydDpVZS0xLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQpOldlLmxhc3RfbGl0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIFB0KFdlLFR0KXtmb3IodmFyIG5yLGh0LHh0Ozsp''@;'; put 'put ''e2lmKFdlLmxvb2thaGVhZDxvdCl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDxvdCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9aWYobnI9MCxXZS5sb29rYWhlYWQ+PVVlJiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5z''@;'; put 'put ''dHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydCksV2UucHJldl9sZW5ndGg9V2UubWF0Y2hfbGVuZ3RoLFdlLnByZXZfbWF0Y2g9V2UubWF0Y2hf''@;'; put 'put ''c3RhcnQsV2UubWF0Y2hfbGVuZ3RoPVVlLTEsMCE9PW5yJiZXZS5wcmV2X2xlbmd0aDxXZS5tYXhfbGF6eV9tYXRjaCYmV2Uuc3Ryc3RhcnQtbnI8PVdlLndfc2l6ZS1vdCYmKFdlLm1hdGNoX2xlbmd0aD1IZShXZSxuciksV2UubWF0Y2hfbGVuZ3RoPD01JiYoMT09PVdlLnN0cmF0ZWd5fHxX''@;'; put 'put ''ZS5tYXRjaF9sZW5ndGg9PT1VZSYmV2Uuc3Ryc3RhcnQtV2UubWF0Y2hfc3RhcnQ+NDA5NikmJihXZS5tYXRjaF9sZW5ndGg9VWUtMSkpLFdlLnByZXZfbGVuZ3RoPj1VZSYmV2UubWF0Y2hfbGVuZ3RoPD1XZS5wcmV2X2xlbmd0aCl7eHQ9V2Uuc3Ryc3RhcnQrV2UubG9va2FoZWFkLVVlLGh0''@;'; put 'put ''PU4uX3RyX3RhbGx5KFdlLFdlLnN0cnN0YXJ0LTEtV2UucHJldl9tYXRjaCxXZS5wcmV2X2xlbmd0aC1VZSksV2UubG9va2FoZWFkLT1XZS5wcmV2X2xlbmd0aC0xLFdlLnByZXZfbGVuZ3RoLT0yO2RveysrV2Uuc3Ryc3RhcnQ8PXh0JiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3No''@;'; put 'put ''aWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydCl9d2hpbGUoMCE9LS1XZS5wcmV2X2xlbmd0aCk7aWYoV2UubWF0''@;'; put 'put ''Y2hfYXZhaWxhYmxlPTAsV2UubWF0Y2hfbGVuZ3RoPVVlLTEsV2Uuc3Ryc3RhcnQrKyxodCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYoV2UubWF0Y2hfYXZhaWxhYmxlKXtpZigoaHQ9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ry''@;'; put 'put ''c3RhcnQtMV0pKSYmRHQoV2UsITEpLFdlLnN0cnN0YXJ0KyssV2UubG9va2FoZWFkLS0sMD09PVdlLnN0cm0uYXZhaWxfb3V0KXJldHVybiAxfWVsc2UgV2UubWF0Y2hfYXZhaWxhYmxlPTEsV2Uuc3Ryc3RhcnQrKyxXZS5sb29rYWhlYWQtLX1yZXR1cm4gV2UubWF0Y2hfYXZhaWxhYmxlJiYo''@;'; put 'put ''aHQ9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnQtMV0pLFdlLm1hdGNoX2F2YWlsYWJsZT0wKSxXZS5pbnNlcnQ9V2Uuc3Ryc3RhcnQ8VWUtMT9XZS5zdHJzdGFydDpVZS0xLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQpOldlLmxhc3Rf''@;'; put 'put ''bGl0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfXZhciBSaSxzbj1mdW5jdGlvbihXZSxUdCxucixodCx4dCl7dGhpcy5nb29kX2xlbmd0aD1XZSx0aGlzLm1heF9sYXp5PVR0LHRoaXMubmljZV9sZW5ndGg9bnIsdGhpcy5tYXhfY2hhaW49aHQsdGhpcy5mdW5jPXh0''@;'; put 'put ''fTtmdW5jdGlvbiBmdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRl''@;'; put 'put ''eD0wLHRoaXMubWV0aG9kPUMsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhh''@;'; put 'put ''c2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1h''@;'; put 'put ''dGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5k''@;'; put 'put ''eW5fbHRyZWU9bmV3IHouQnVmMTYoMipzZSksdGhpcy5keW5fZHRyZWU9bmV3IHouQnVmMTYoMiooMiphZSsxKSksdGhpcy5ibF90cmVlPW5ldyB6LkJ1ZjE2KDIqKDIqdGUrMSkpLHl0KHRoaXMuZHluX2x0cmVlKSx5dCh0aGlzLmR5bl9kdHJlZSkseXQodGhpcy5ibF90cmVlKSx0aGlzLmxf''@;'; put 'put ''ZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgei5CdWYxNih3ZSsxKSx0aGlzLmhlYXA9bmV3IHouQnVmMTYoMipBKzEpLHl0KHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5l''@;'; put 'put ''dyB6LkJ1ZjE2KDIqQSsxKSx5dCh0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1''@;'; put 'put ''Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBPcihXZSl7dmFyIFR0O3JldHVybiBXZSYmV2Uuc3RhdGU/KFdlLnRvdGFsX2luPVdlLnRvdGFsX291dD0wLFdlLmRhdGFfdHlwZT14LChUdD1XZS5zdGF0ZSkucGVuZGluZz0wLFR0LnBlbmRpbmdfb3V0PTAsVHQud3JhcDwwJiYoVHQud3Jh''@;'; put 'put ''cD0tVHQud3JhcCksVHQuc3RhdHVzPVR0LndyYXA/dmU6UmUsV2UuYWRsZXI9Mj09PVR0LndyYXA/MDoxLFR0Lmxhc3RfZmx1c2g9VyxOLl90cl9pbml0KFR0KSxuZSk6UWUoV2UsbGUpfWZ1bmN0aW9uIFd0KFdlKXt2YXIgVHQ9T3IoV2UpO3JldHVybiBUdD09PW5lJiZmdW5jdGlvbiBobihX''@;'; put 'put ''ZSl7V2Uud2luZG93X3NpemU9MipXZS53X3NpemUseXQoV2UuaGVhZCksV2UubWF4X2xhenlfbWF0Y2g9UmlbV2UubGV2ZWxdLm1heF9sYXp5LFdlLmdvb2RfbWF0Y2g9UmlbV2UubGV2ZWxdLmdvb2RfbGVuZ3RoLFdlLm5pY2VfbWF0Y2g9UmlbV2UubGV2ZWxdLm5pY2VfbGVuZ3RoLFdlLm1h''@;'; put 'put ''eF9jaGFpbl9sZW5ndGg9UmlbV2UubGV2ZWxdLm1heF9jaGFpbixXZS5zdHJzdGFydD0wLFdlLmJsb2NrX3N0YXJ0PTAsV2UubG9va2FoZWFkPTAsV2UuaW5zZXJ0PTAsV2UubWF0Y2hfbGVuZ3RoPVdlLnByZXZfbGVuZ3RoPVVlLTEsV2UubWF0Y2hfYXZhaWxhYmxlPTAsV2UuaW5zX2g9MH0o''@;'; put 'put ''V2Uuc3RhdGUpLFR0fWZ1bmN0aW9uIFJuKFdlLFR0LG5yLGh0LHh0LGpuKXtpZighV2UpcmV0dXJuIGxlO3ZhciBybj0xO2lmKC0xPT09VHQmJihUdD02KSxodDwwPyhybj0wLGh0PS1odCk6aHQ+MTUmJihybj0yLGh0LT0xNikseHQ8MXx8eHQ+OXx8bnIhPT1DfHxodDw4fHxodD4xNXx8VHQ8''@;'; put 'put ''MHx8VHQ+OXx8am48MHx8am4+NClyZXR1cm4gUWUoV2UsbGUpOzg9PT1odCYmKGh0PTkpO3ZhciB6dD1uZXcgZnQ7cmV0dXJuIFdlLnN0YXRlPXp0LHp0LnN0cm09V2UsenQud3JhcD1ybix6dC5nemhlYWQ9bnVsbCx6dC53X2JpdHM9aHQsenQud19zaXplPTE8PHp0LndfYml0cyx6dC53X21h''@;'; put 'put ''c2s9enQud19zaXplLTEsenQuaGFzaF9iaXRzPXh0KzcsenQuaGFzaF9zaXplPTE8PHp0Lmhhc2hfYml0cyx6dC5oYXNoX21hc2s9enQuaGFzaF9zaXplLTEsenQuaGFzaF9zaGlmdD1+figoenQuaGFzaF9iaXRzK1VlLTEpL1VlKSx6dC53aW5kb3c9bmV3IHouQnVmOCgyKnp0Lndfc2l6ZSks''@;'; put 'put ''enQuaGVhZD1uZXcgei5CdWYxNih6dC5oYXNoX3NpemUpLHp0LnByZXY9bmV3IHouQnVmMTYoenQud19zaXplKSx6dC5saXRfYnVmc2l6ZT0xPDx4dCs2LHp0LnBlbmRpbmdfYnVmX3NpemU9NCp6dC5saXRfYnVmc2l6ZSx6dC5wZW5kaW5nX2J1Zj1uZXcgei5CdWY4KHp0LnBlbmRpbmdfYnVm''@;'; put 'put ''X3NpemUpLHp0LmRfYnVmPXp0LmxpdF9idWZzaXplPj4xLHp0LmxfYnVmPTMqenQubGl0X2J1ZnNpemUsenQubGV2ZWw9VHQsenQuc3RyYXRlZ3k9am4senQubWV0aG9kPW5yLFd0KFdlKX1SaT1bbmV3IHNuKDAsMCwwLDAsZnVuY3Rpb24gcXQoV2UsVHQpe3ZhciBucj02NTUzNTtmb3IobnI+''@;'; put 'put ''V2UucGVuZGluZ19idWZfc2l6ZS01JiYobnI9V2UucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihXZS5sb29rYWhlYWQ8PTEpe2lmKHV0KFdlKSwwPT09V2UubG9va2FoZWFkJiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31XZS5zdHJzdGFydCs9V2UubG9va2Fo''@;'; put 'put ''ZWFkLFdlLmxvb2thaGVhZD0wO3ZhciBodD1XZS5ibG9ja19zdGFydCtucjtpZigoMD09PVdlLnN0cnN0YXJ0fHxXZS5zdHJzdGFydD49aHQpJiYoV2UubG9va2FoZWFkPVdlLnN0cnN0YXJ0LWh0LFdlLnN0cnN0YXJ0PWh0LER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpfHxXZS5z''@;'; put 'put ''dHJzdGFydC1XZS5ibG9ja19zdGFydD49V2Uud19zaXplLW90JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD0wLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQpOihXZS5zdHJzdGFydD5XZS5ibG9j''@;'; put 'put ''a19zdGFydCYmRHQoV2UsITEpLDEpfSksbmV3IHNuKDQsNCw4LDQsUnQpLG5ldyBzbig0LDUsMTYsOCxSdCksbmV3IHNuKDQsNiwzMiwzMixSdCksbmV3IHNuKDQsNCwxNiwxNixQdCksbmV3IHNuKDgsMTYsMzIsMzIsUHQpLG5ldyBzbig4LDE2LDEyOCwxMjgsUHQpLG5ldyBzbig4LDMyLDEy''@;'; put 'put ''OCwyNTYsUHQpLG5ldyBzbigzMiwxMjgsMjU4LDEwMjQsUHQpLG5ldyBzbigzMiwyNTgsMjU4LDQwOTYsUHQpXSxPLmRlZmxhdGVJbml0PWZ1bmN0aW9uIHN0KFdlLFR0KXtyZXR1cm4gUm4oV2UsVHQsQywxNSw4LDApfSxPLmRlZmxhdGVJbml0Mj1SbixPLmRlZmxhdGVSZXNldD1XdCxPLmRl''@;'; put 'put ''ZmxhdGVSZXNldEtlZXA9T3IsTy5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uIEF0KFdlLFR0KXtyZXR1cm4gV2UmJldlLnN0YXRlJiYyPT09V2Uuc3RhdGUud3JhcD8oV2Uuc3RhdGUuZ3poZWFkPVR0LG5lKTpsZX0sTy5kZWZsYXRlPWZ1bmN0aW9uIFV0KFdlLFR0KXt2YXIgbnIsaHQseHQs''@;'; put 'put ''am47aWYoIVdlfHwhV2Uuc3RhdGV8fFR0PjV8fFR0PDApcmV0dXJuIFdlP1FlKFdlLGxlKTpsZTtpZihodD1XZS5zdGF0ZSwhV2Uub3V0cHV0fHwhV2UuaW5wdXQmJjAhPT1XZS5hdmFpbF9pbnx8NjY2PT09aHQuc3RhdHVzJiY0IT09VHQpcmV0dXJuIFFlKFdlLDA9PT1XZS5hdmFpbF9vdXQ/''@;'; put 'put ''LTU6bGUpO2lmKGh0LnN0cm09V2UsbnI9aHQubGFzdF9mbHVzaCxodC5sYXN0X2ZsdXNoPVR0LGh0LnN0YXR1cz09PXZlKWlmKDI9PT1odC53cmFwKVdlLmFkbGVyPTAsaXQoaHQsMzEpLGl0KGh0LDEzOSksaXQoaHQsOCksaHQuZ3poZWFkPyhpdChodCwoaHQuZ3poZWFkLnRleHQ/MTowKSso''@;'; put 'put ''aHQuZ3poZWFkLmhjcmM/MjowKSsoaHQuZ3poZWFkLmV4dHJhPzQ6MCkrKGh0Lmd6aGVhZC5uYW1lPzg6MCkrKGh0Lmd6aGVhZC5jb21tZW50PzE2OjApKSxpdChodCwyNTUmaHQuZ3poZWFkLnRpbWUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj44JjI1NSksaXQoaHQsaHQuZ3poZWFkLnRpbWU+''@;'; put 'put ''PjE2JjI1NSksaXQoaHQsaHQuZ3poZWFkLnRpbWU+PjI0JjI1NSksaXQoaHQsOT09PWh0LmxldmVsPzI6aHQuc3RyYXRlZ3k+PTJ8fGh0LmxldmVsPDI/NDowKSxpdChodCwyNTUmaHQuZ3poZWFkLm9zKSxodC5nemhlYWQuZXh0cmEmJmh0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihpdChodCwy''@;'; put 'put ''NTUmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCksaXQoaHQsaHQuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxodC5nemhlYWQuaGNyYyYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZywwKSksaHQuZ3ppbmRleD0wLGh0LnN0YXR1cz02OSk6KGl0KGh0''@;'; put 'put ''LDApLGl0KGh0LDApLGl0KGh0LDApLGl0KGh0LDApLGl0KGh0LDApLGl0KGh0LDk9PT1odC5sZXZlbD8yOmh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzQ6MCksaXQoaHQsMyksaHQuc3RhdHVzPVJlKTtlbHNle3ZhciBybj1DKyhodC53X2JpdHMtODw8NCk8PDg7cm58PShodC5zdHJhdGVn''@;'; put 'put ''eT49Mnx8aHQubGV2ZWw8Mj8wOmh0LmxldmVsPDY/MTo2PT09aHQubGV2ZWw/MjozKTw8NiwwIT09aHQuc3Ryc3RhcnQmJihybnw9MzIpLHJuKz0zMS1ybiUzMSxodC5zdGF0dXM9UmUsJGUoaHQscm4pLDAhPT1odC5zdHJzdGFydCYmKCRlKGh0LFdlLmFkbGVyPj4+MTYpLCRlKGh0LDY1NTM1''@;'; put 'put ''JldlLmFkbGVyKSksV2UuYWRsZXI9MX1pZig2OT09PWh0LnN0YXR1cylpZihodC5nemhlYWQuZXh0cmEpe2Zvcih4dD1odC5wZW5kaW5nO2h0Lmd6aW5kZXg8KDY1NTM1Jmh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoaHQucGVuZGluZyE9PWh0LnBlbmRpbmdfYnVmX3NpemV8fChodC5nemhl''@;'; put 'put ''YWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLE10KFdlKSx4dD1odC5wZW5kaW5nLGh0LnBlbmRpbmchPT1odC5wZW5kaW5nX2J1Zl9zaXplKSk7KWl0KGh0LDI1NSZodC5nemhlYWQuZXh0cmFbaHQu''@;'; put 'put ''Z3ppbmRleF0pLGh0Lmd6aW5kZXgrKztodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLGh0Lmd6aW5kZXg9PT1odC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaHQuZ3ppbmRleD0wLGh0LnN0''@;'; put 'put ''YXR1cz03Myl9ZWxzZSBodC5zdGF0dXM9NzM7aWYoNzM9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLm5hbWUpe3h0PWh0LnBlbmRpbmc7ZG97aWYoaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUmJihodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2Uu''@;'; put 'put ''YWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLE10KFdlKSx4dD1odC5wZW5kaW5nLGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplKSl7am49MTticmVha31qbj1odC5nemluZGV4PGh0Lmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmaHQuZ3poZWFkLm5hbWUuY2hh''@;'; put 'put ''ckNvZGVBdChodC5nemluZGV4KyspOjAsaXQoaHQsam4pfXdoaWxlKDAhPT1qbik7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSwwPT09am4mJihodC5nemluZGV4PTAsaHQuc3RhdHVz''@;'; put 'put ''PTkxKX1lbHNlIGh0LnN0YXR1cz05MTtpZig5MT09PWh0LnN0YXR1cylpZihodC5nemhlYWQuY29tbWVudCl7eHQ9aHQucGVuZGluZztkb3tpZihodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSYmKGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5h''@;'; put 'put ''ZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUpKXtqbj0xO2JyZWFrfWpuPWh0Lmd6aW5kZXg8aHQuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZodC5nemhlYWQuY29tbWVu''@;'; put 'put ''dC5jaGFyQ29kZUF0KGh0Lmd6aW5kZXgrKyk6MCxpdChodCxqbil9d2hpbGUoMCE9PWpuKTtodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLDA9PT1qbiYmKGh0LnN0YXR1cz0xMDMpfWVs''@;'; put 'put ''c2UgaHQuc3RhdHVzPTEwMztpZigxMDM9PT1odC5zdGF0dXMmJihodC5nemhlYWQuaGNyYz8oaHQucGVuZGluZysyPmh0LnBlbmRpbmdfYnVmX3NpemUmJk10KFdlKSxodC5wZW5kaW5nKzI8PWh0LnBlbmRpbmdfYnVmX3NpemUmJihpdChodCwyNTUmV2UuYWRsZXIpLGl0KGh0LFdlLmFkbGVy''@;'; put 'put ''Pj44JjI1NSksV2UuYWRsZXI9MCxodC5zdGF0dXM9UmUpKTpodC5zdGF0dXM9UmUpLDAhPT1odC5wZW5kaW5nKXtpZihNdChXZSksMD09PVdlLmF2YWlsX291dClyZXR1cm4gaHQubGFzdF9mbHVzaD0tMSxuZX1lbHNlIGlmKDA9PT1XZS5hdmFpbF9pbiYmdW4oVHQpPD11bihucikmJjQhPT1U''@;'; put 'put ''dClyZXR1cm4gUWUoV2UsLTUpO2lmKDY2Nj09PWh0LnN0YXR1cyYmMCE9PVdlLmF2YWlsX2luKXJldHVybiBRZShXZSwtNSk7aWYoMCE9PVdlLmF2YWlsX2lufHwwIT09aHQubG9va2FoZWFkfHxUdCE9PVcmJjY2NiE9PWh0LnN0YXR1cyl7dmFyIGhpPTI9PT1odC5zdHJhdGVneT9mdW5jdGlv''@;'; put 'put ''biBRdChXZSxUdCl7Zm9yKHZhciBucjs7KXtpZigwPT09V2UubG9va2FoZWFkJiYodXQoV2UpLDA9PT1XZS5sb29rYWhlYWQpKXtpZihUdD09PVcpcmV0dXJuIDE7YnJlYWt9aWYoV2UubWF0Y2hfbGVuZ3RoPTAsbnI9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxX''@;'; put 'put ''ZS5sb29rYWhlYWQtLSxXZS5zdHJzdGFydCsrLG5yJiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD0wLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQpOldlLmxhc3RfbGl0JiYoRHQoV2UsITEpLDA9''@;'; put 'put ''PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfShodCxUdCk6Mz09PWh0LnN0cmF0ZWd5P2Z1bmN0aW9uIHNpKFdlLFR0KXtmb3IodmFyIG5yLGh0LHh0LGpuLHJuPVdlLndpbmRvdzs7KXtpZihXZS5sb29rYWhlYWQ8PUplKXtpZih1dChXZSksV2UubG9va2FoZWFkPD1KZSYmVHQ9PT1XKXJldHVy''@;'; put 'put ''biAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9aWYoV2UubWF0Y2hfbGVuZ3RoPTAsV2UubG9va2FoZWFkPj1VZSYmV2Uuc3Ryc3RhcnQ+MCYmKGh0PXJuW3h0PVdlLnN0cnN0YXJ0LTFdKT09PXJuWysreHRdJiZodD09PXJuWysreHRdJiZodD09PXJuWysreHRdKXtqbj1XZS5zdHJzdGFy''@;'; put 'put ''dCtKZTtkb3t9d2hpbGUoaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmeHQ8am4pO1dlLm1hdGNoX2xlbmd0aD1KZS0oam4t''@;'; put 'put ''eHQpLFdlLm1hdGNoX2xlbmd0aD5XZS5sb29rYWhlYWQmJihXZS5tYXRjaF9sZW5ndGg9V2UubG9va2FoZWFkKX1pZihXZS5tYXRjaF9sZW5ndGg+PVVlPyhucj1OLl90cl90YWxseShXZSwxLFdlLm1hdGNoX2xlbmd0aC1VZSksV2UubG9va2FoZWFkLT1XZS5tYXRjaF9sZW5ndGgsV2Uuc3Ry''@;'; put 'put ''c3RhcnQrPVdlLm1hdGNoX2xlbmd0aCxXZS5tYXRjaF9sZW5ndGg9MCk6KG5yPU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0XSksV2UubG9va2FoZWFkLS0sV2Uuc3Ryc3RhcnQrKyksbnImJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1y''@;'; put 'put ''ZXR1cm4gV2UuaW5zZXJ0PTAsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGh0LFR0KTpSaVtodC5sZXZlbF0uZnVuYyhodCxUdCk7aWYoKDM9PT1oaXx8ND09PWhp''@;'; put 'put ''KSYmKGh0LnN0YXR1cz02NjYpLDE9PT1oaXx8Mz09PWhpKXJldHVybiAwPT09V2UuYXZhaWxfb3V0JiYoaHQubGFzdF9mbHVzaD0tMSksbmU7aWYoMj09PWhpJiYoMT09PVR0P04uX3RyX2FsaWduKGh0KTo1IT09VHQmJihOLl90cl9zdG9yZWRfYmxvY2soaHQsMCwwLCExKSwzPT09VHQmJih5''@;'; put 'put ''dChodC5oZWFkKSwwPT09aHQubG9va2FoZWFkJiYoaHQuc3Ryc3RhcnQ9MCxodC5ibG9ja19zdGFydD0wLGh0Lmluc2VydD0wKSkpLE10KFdlKSwwPT09V2UuYXZhaWxfb3V0KSlyZXR1cm4gaHQubGFzdF9mbHVzaD0tMSxuZX1yZXR1cm4gNCE9PVR0P25lOmh0LndyYXA8PTA/MTooMj09PWh0''@;'; put 'put ''LndyYXA/KGl0KGh0LDI1NSZXZS5hZGxlciksaXQoaHQsV2UuYWRsZXI+PjgmMjU1KSxpdChodCxXZS5hZGxlcj4+MTYmMjU1KSxpdChodCxXZS5hZGxlcj4+MjQmMjU1KSxpdChodCwyNTUmV2UudG90YWxfaW4pLGl0KGh0LFdlLnRvdGFsX2luPj44JjI1NSksaXQoaHQsV2UudG90YWxfaW4+''@;'; put 'put ''PjE2JjI1NSksaXQoaHQsV2UudG90YWxfaW4+PjI0JjI1NSkpOigkZShodCxXZS5hZGxlcj4+PjE2KSwkZShodCw2NTUzNSZXZS5hZGxlcikpLE10KFdlKSxodC53cmFwPjAmJihodC53cmFwPS1odC53cmFwKSwwIT09aHQucGVuZGluZz9uZToxKX0sTy5kZWZsYXRlRW5kPWZ1bmN0aW9uIHJp''@;'; put 'put ''KFdlKXt2YXIgVHQ7cmV0dXJuIFdlJiZXZS5zdGF0ZT8oVHQ9V2Uuc3RhdGUuc3RhdHVzKSE9PXZlJiY2OSE9PVR0JiY3MyE9PVR0JiY5MSE9PVR0JiYxMDMhPT1UdCYmVHQhPT1SZSYmNjY2IT09VHQ/UWUoV2UsbGUpOihXZS5zdGF0ZT1udWxsLFR0PT09UmU/UWUoV2UsLTMpOm5lKTpsZX0s''@;'; put 'put ''Ty5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vbWVzc2FnZXMiOjM3LCIuL3RyZWVzIjozOH1dLDMzOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O0YuZXhwb3J0cz1mdW5jdGlvbiB6KCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0s''@;'; put 'put ''MzQ6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uKEssVSl7dmFyIFcsWSxxLGVlLEosbmUsaWUsbGUsbWUsX2UsVGUsU2UsemUsVixwLGIseCxDLFQsSCxqLEUsbSxBLGFlO0E9Sy5pbnB1dCxxPShZPUsubmV4dF9pbikrKEsuYXZhaWxfaW4tNSksYWU9''@;'; put 'put ''Sy5vdXRwdXQsSj0oZWU9Sy5uZXh0X291dCktKFUtSy5hdmFpbF9vdXQpLG5lPWVlKyhLLmF2YWlsX291dC0yNTcpLGllPShXPUsuc3RhdGUpLmRtYXgsbGU9Vy53c2l6ZSxtZT1XLndoYXZlLF9lPVcud25leHQsVGU9Vy53aW5kb3csU2U9Vy5ob2xkLHplPVcuYml0cyxWPVcubGVuY29kZSxw''@;'; put 'put ''PVcuZGlzdGNvZGUsYj0oMTw8Vy5sZW5iaXRzKS0xLHg9KDE8PFcuZGlzdGJpdHMpLTE7ZTpkb3t6ZTwxNSYmKFNlKz1BW1krK108PHplLFNlKz1BW1krK108PCh6ZSs9OCksemUrPTgpLEM9VltTZSZiXTt0OmZvcig7Oyl7aWYoU2U+Pj49VD1DPj4+MjQsemUtPVQsMD09KFQ9Qz4+PjE2JjI1''@;'; put 'put ''NSkpYWVbZWUrK109NjU1MzUmQztlbHNle2lmKCEoMTYmVCkpe2lmKDY0JlQpe2lmKDMyJlQpe1cubW9kZT0xMjticmVhayBlfUsubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLFcubW9kZT0zMDticmVhayBlfUM9VlsoNjU1MzUmQykrKFNlJigxPDxUKS0xKV07Y29udGludWUg''@;'; put 'put ''dH1mb3IoSD02NTUzNSZDLChUJj0xNSkmJih6ZTxUJiYoU2UrPUFbWSsrXTw8emUsemUrPTgpLEgrPVNlJigxPDxUKS0xLFNlPj4+PVQsemUtPVQpLHplPDE1JiYoU2UrPUFbWSsrXTw8emUsU2UrPUFbWSsrXTw8KHplKz04KSx6ZSs9OCksQz1wW1NlJnhdOzspe2lmKFNlPj4+PVQ9Qz4+PjI0''@;'; put 'put ''LHplLT1ULDE2JihUPUM+Pj4xNiYyNTUpKXtpZihqPTY1NTM1JkMsemU8KFQmPTE1KSYmKFNlKz1BW1krK108PHplLCh6ZSs9OCk8VCYmKFNlKz1BW1krK108PHplLHplKz04KSksKGorPVNlJigxPDxUKS0xKT5pZSl7Sy5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixXLm1v''@;'; put 'put ''ZGU9MzA7YnJlYWsgZX1pZihTZT4+Pj1ULHplLT1ULGo+KFQ9ZWUtSikpe2lmKChUPWotVCk+bWUmJlcuc2FuZSl7Sy5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixXLm1vZGU9MzA7YnJlYWsgZX1pZihFPTAsbT1UZSwwPT09X2Upe2lmKEUrPWxlLVQsVDxIKXtILT1UO2Rv''@;'; put 'put ''e2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPWVlLWosbT1hZX19ZWxzZSBpZihfZTxUKXtpZihFKz1sZStfZS1ULChULT1fZSk8SCl7SC09VDtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7aWYoRT0wLF9lPEgpe0gtPVQ9X2U7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgt''@;'; put 'put ''LVQpO0U9ZWUtaixtPWFlfX19ZWxzZSBpZihFKz1fZS1ULFQ8SCl7SC09VDtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9Zm9yKDtIPjI7KWFlW2VlKytdPW1bRSsrXSxhZVtlZSsrXT1tW0UrK10sYWVbZWUrK109bVtFKytdLEgtPTM7SCYmKGFlW2VlKytdPW1b''@;'; put 'put ''RSsrXSxIPjEmJihhZVtlZSsrXT1tW0UrK10pKX1lbHNle0U9ZWUtajtkb3thZVtlZSsrXT1hZVtFKytdLGFlW2VlKytdPWFlW0UrK10sYWVbZWUrK109YWVbRSsrXSxILT0zfXdoaWxlKEg+Mik7SCYmKGFlW2VlKytdPWFlW0UrK10sSD4xJiYoYWVbZWUrK109YWVbRSsrXSkpfWJyZWFrfWlm''@;'; put 'put ''KDY0JlQpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLFcubW9kZT0zMDticmVhayBlfUM9cFsoNjU1MzUmQykrKFNlJigxPDxUKS0xKV19fWJyZWFrfX13aGlsZShZPHEmJmVlPG5lKTtTZSY9KDE8PCh6ZS09KEg9emU+PjMpPDwzKSktMSxLLm5leHRfaW49WS09SCxLLm5leHRfb3V0''@;'; put 'put ''PWVlLEsuYXZhaWxfaW49WTxxP3EtWSs1OjUtKFktcSksSy5hdmFpbF9vdXQ9ZWU8bmU/bmUtZWUrMjU3OjI1Ny0oZWUtbmUpLFcuaG9sZD1TZSxXLmJpdHM9emV9fSx7fV0sMzU6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIiksTj1QKCIu''@;'; put 'put ''L2FkbGVyMzIiKSxMPVAoIi4vY3JjMzIiKSxLPVAoIi4vaW5mZmFzdCIpLFU9UCgiLi9pbmZ0cmVlcyIpLGllPTAsX2U9LTIscD0xLHl0PTg1MixNdD01OTI7ZnVuY3Rpb24gJGUoQXQpe3JldHVybihBdD4+PjI0JjI1NSkrKEF0Pj4+OCY2NTI4MCkrKCg2NTI4MCZBdCk8PDgpKygoMjU1JkF0''@;'; put 'put ''KTw8MjQpfWZ1bmN0aW9uIHR0KCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9''@;'; put 'put ''MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhp''@;'; put 'put ''cy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyB6LkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyB6LkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVs''@;'; put 'put ''bCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIEhlKEF0KXt2YXIgUm47cmV0dXJuIEF0JiZBdC5zdGF0ZT8oQXQudG90YWxfaW49QXQudG90YWxfb3V0PShSbj1BdC5zdGF0ZSkudG90YWw9MCxBdC5tc2c9IiIsUm4ud3JhcCYmKEF0LmFkbGVyPTEmUm4ud3Jh''@;'; put 'put ''cCksUm4ubW9kZT1wLFJuLmxhc3Q9MCxSbi5oYXZlZGljdD0wLFJuLmRtYXg9MzI3NjgsUm4uaGVhZD1udWxsLFJuLmhvbGQ9MCxSbi5iaXRzPTAsUm4ubGVuY29kZT1Sbi5sZW5keW49bmV3IHouQnVmMzIoeXQpLFJuLmRpc3Rjb2RlPVJuLmRpc3RkeW49bmV3IHouQnVmMzIoTXQpLFJuLnNh''@;'; put 'put ''bmU9MSxSbi5iYWNrPS0xLGllKTpfZX1mdW5jdGlvbiB1dChBdCl7dmFyIFJuO3JldHVybiBBdCYmQXQuc3RhdGU/KChSbj1BdC5zdGF0ZSkud3NpemU9MCxSbi53aGF2ZT0wLFJuLnduZXh0PTAsSGUoQXQpKTpfZX1mdW5jdGlvbiBxdChBdCxSbil7dmFyIHN0LFV0O3JldHVybiFBdHx8IUF0''@;'; put 'put ''LnN0YXRlfHwoVXQ9QXQuc3RhdGUsUm48MD8oc3Q9MCxSbj0tUm4pOihzdD0xKyhSbj4+NCksUm48NDgmJihSbiY9MTUpKSxSbiYmKFJuPDh8fFJuPjE1KSk/X2U6KG51bGwhPT1VdC53aW5kb3cmJlV0LndiaXRzIT09Um4mJihVdC53aW5kb3c9bnVsbCksVXQud3JhcD1zdCxVdC53Yml0cz1S''@;'; put 'put ''bix1dChBdCkpfWZ1bmN0aW9uIFJ0KEF0LFJuKXt2YXIgc3QsVXQ7cmV0dXJuIEF0PyhVdD1uZXcgdHQsQXQuc3RhdGU9VXQsVXQud2luZG93PW51bGwsKHN0PXF0KEF0LFJuKSkhPT1pZSYmKEF0LnN0YXRlPW51bGwpLHN0KTpfZX12YXIgUXQsc24sc2k9ITA7ZnVuY3Rpb24gUmkoQXQpe2lm''@;'; put 'put ''KHNpKXt2YXIgUm47Zm9yKFF0PW5ldyB6LkJ1ZjMyKDUxMiksc249bmV3IHouQnVmMzIoMzIpLFJuPTA7Um48MTQ0OylBdC5sZW5zW1JuKytdPTg7Zm9yKDtSbjwyNTY7KUF0LmxlbnNbUm4rK109OTtmb3IoO1JuPDI4MDspQXQubGVuc1tSbisrXT03O2Zvcig7Um48Mjg4OylBdC5sZW5zW1Ju''@;'; put 'put ''KytdPTg7Zm9yKFUoMSxBdC5sZW5zLDAsMjg4LFF0LDAsQXQud29yayx7Yml0czo5fSksUm49MDtSbjwzMjspQXQubGVuc1tSbisrXT01O1UoMixBdC5sZW5zLDAsMzIsc24sMCxBdC53b3JrLHtiaXRzOjV9KSxzaT0hMX1BdC5sZW5jb2RlPVF0LEF0LmxlbmJpdHM9OSxBdC5kaXN0Y29kZT1z''@;'; put 'put ''bixBdC5kaXN0Yml0cz01fU8uaW5mbGF0ZVJlc2V0PXV0LE8uaW5mbGF0ZVJlc2V0Mj1xdCxPLmluZmxhdGVSZXNldEtlZXA9SGUsTy5pbmZsYXRlSW5pdD1mdW5jdGlvbiBQdChBdCl7cmV0dXJuIFJ0KEF0LDE1KX0sTy5pbmZsYXRlSW5pdDI9UnQsTy5pbmZsYXRlPWZ1bmN0aW9uIGZ0KEF0''@;'; put 'put ''LFJuKXt2YXIgc3QsVXQscmksV2UsVHQsbnIsaHQseHQsam4scm4senQsaGksY24sZm4sWHQsZW4sdWEsRWksdnIsV24sJGksZWksVmksTmksSWk9MCxRcj1uZXcgei5CdWY4KDQpLERhPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighQXR8fCFB''@;'; put 'put ''dC5zdGF0ZXx8IUF0Lm91dHB1dHx8IUF0LmlucHV0JiYwIT09QXQuYXZhaWxfaW4pcmV0dXJuIF9lOzEyPT09KHN0PUF0LnN0YXRlKS5tb2RlJiYoc3QubW9kZT0xMyksVHQ9QXQubmV4dF9vdXQscmk9QXQub3V0cHV0LFdlPUF0Lm5leHRfaW4sVXQ9QXQuaW5wdXQseHQ9c3QuaG9sZCxqbj1z''@;'; put 'put ''dC5iaXRzLHJuPW5yPUF0LmF2YWlsX2luLHp0PWh0PUF0LmF2YWlsX291dCxlaT1pZTtlOmZvcig7Oylzd2l0Y2goc3QubW9kZSl7Y2FzZSBwOmlmKDA9PT1zdC53cmFwKXtzdC5tb2RlPTEzO2JyZWFrfWZvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8''@;'; put 'put ''am4sam4rPTh9aWYoMiZzdC53cmFwJiYzNTYxNT09PXh0KXtzdC5jaGVjaz0wLFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSx4dD0wLGpuPTAsc3QubW9kZT0yO2JyZWFrfWlmKHN0LmZsYWdzPTAsc3QuaGVhZCYmKHN0LmhlYWQuZG9u''@;'; put 'put ''ZT0hMSksISgxJnN0LndyYXApfHwoKCgyNTUmeHQpPDw4KSsoeHQ+PjgpKSUzMSl7QXQubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZ4dCkpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHN0Lm1vZGU9MzA7YnJlYWt9''@;'; put 'put ''aWYoam4tPTQsJGk9OCsoMTUmKHh0Pj4+PTQpKSwwPT09c3Qud2JpdHMpc3Qud2JpdHM9JGk7ZWxzZSBpZigkaT5zdC53Yml0cyl7QXQubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixzdC5tb2RlPTMwO2JyZWFrfXN0LmRtYXg9MTw8JGksQXQuYWRsZXI9c3QuY2hlY2s9MSxzdC5tb2RlPTUx''@;'; put 'put ''MiZ4dD8xMDoxMix4dD0wLGpuPTA7YnJlYWs7Y2FzZSAyOmZvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoc3QuZmxhZ3M9eHQsOCE9KDI1NSZzdC5mbGFncykpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHN0''@;'; put 'put ''Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmc3QuZmxhZ3Mpe0F0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixzdC5tb2RlPTMwO2JyZWFrfXN0LmhlYWQmJihzdC5oZWFkLnRleHQ9eHQ+PjgmMSksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3Qu''@;'; put 'put ''Y2hlY2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLGpuPTAsc3QubW9kZT0zO2Nhc2UgMzpmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0LmhlYWQmJihzdC5oZWFkLnRpbWU9eHQpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4''@;'; put 'put ''dCxRclsxXT14dD4+PjgmMjU1LFFyWzJdPXh0Pj4+MTYmMjU1LFFyWzNdPXh0Pj4+MjQmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsNCwwKSkseHQ9MCxqbj0wLHN0Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixq''@;'; put 'put ''bis9OH1zdC5oZWFkJiYoc3QuaGVhZC54ZmxhZ3M9MjU1Jnh0LHN0LmhlYWQub3M9eHQ+PjgpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxqbj0wLHN0Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZz''@;'; put 'put ''dC5mbGFncyl7Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5sZW5ndGg9eHQsc3QuaGVhZCYmKHN0LmhlYWQuZXh0cmFfbGVuPXh0KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVj''@;'; put 'put ''az1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsam49MH1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLmV4dHJhPW51bGwpO3N0Lm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZzdC5mbGFncyYmKChoaT1zdC5sZW5ndGgpPm5yJiYoaGk9bnIpLGhpJiYoc3QuaGVhZCYmKCRpPXN0LmhlYWQuZXh0cmFfbGVu''@;'; put 'put ''LXN0Lmxlbmd0aCxzdC5oZWFkLmV4dHJhfHwoc3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoc3QuaGVhZC5leHRyYV9sZW4pKSx6LmFycmF5U2V0KHN0LmhlYWQuZXh0cmEsVXQsV2UsaGksJGkpKSw1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdl''@;'; put 'put ''Kz1oaSxzdC5sZW5ndGgtPWhpKSxzdC5sZW5ndGgpKWJyZWFrIGU7c3QubGVuZ3RoPTAsc3QubW9kZT03O2Nhc2UgNzppZigyMDQ4JnN0LmZsYWdzKXtpZigwPT09bnIpYnJlYWsgZTtoaT0wO2RveyRpPVV0W1dlK2hpKytdLHN0LmhlYWQmJiRpJiZzdC5sZW5ndGg8NjU1MzYmJihzdC5oZWFk''@;'; put 'put ''Lm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoJGkpKX13aGlsZSgkaSYmaGk8bnIpO2lmKDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssVXQsaGksV2UpKSxuci09aGksV2UrPWhpLCRpKWJyZWFrIGV9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5uYW1lPW51bGwpO3N0Lmxlbmd0''@;'; put 'put ''aD0wLHN0Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZzdC5mbGFncyl7aWYoMD09PW5yKWJyZWFrIGU7aGk9MDtkb3skaT1VdFtXZStoaSsrXSxzdC5oZWFkJiYkaSYmc3QubGVuZ3RoPDY1NTM2JiYoc3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRpKSl9d2hpbGUoJGkmJmhp''@;'; put 'put ''PG5yKTtpZig1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdlKz1oaSwkaSlicmVhayBlfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQuY29tbWVudD1udWxsKTtzdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZzdC5mbGFncyl7Zm9yKDtqbjwxNjspe2lm''@;'; put 'put ''KDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZih4dCE9PSg2NTUzNSZzdC5jaGVjaykpe0F0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsc3QubW9kZT0zMDticmVha314dD0wLGpuPTB9c3QuaGVhZCYmKHN0LmhlYWQuaGNyYz1zdC5mbGFncz4+OSYxLHN0''@;'; put 'put ''LmhlYWQuZG9uZT0hMCksQXQuYWRsZXI9c3QuY2hlY2s9MCxzdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1BdC5hZGxlcj1zdC5jaGVjaz0kZSh4dCkseHQ9MCxqbj0wLHN0Lm1vZGU9MTE7''@;'; put 'put ''Y2FzZSAxMTppZigwPT09c3QuaGF2ZWRpY3QpcmV0dXJuIEF0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1odCxBdC5uZXh0X2luPVdlLEF0LmF2YWlsX2luPW5yLHN0LmhvbGQ9eHQsc3QuYml0cz1qbiwyO0F0LmFkbGVyPXN0LmNoZWNrPTEsc3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1S''@;'; put 'put ''bnx8Nj09PVJuKWJyZWFrIGU7Y2FzZSAxMzppZihzdC5sYXN0KXt4dD4+Pj03JmpuLGpuLT03JmpuLHN0Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtqbjwzOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN3aXRjaChzdC5sYXN0PTEmeHQsam4tPTEsMyYoeHQ+''@;'; put 'put ''Pj49MSkpe2Nhc2UgMDpzdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihSaShzdCksc3QubW9kZT0yMCw2PT09Um4pe3h0Pj4+PTIsam4tPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6c3QubW9kZT0xNzticmVhaztjYXNlIDM6QXQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHN0Lm1vZGU9MzB9''@;'; put 'put ''eHQ+Pj49Mixqbi09MjticmVhaztjYXNlIDE0OmZvcih4dD4+Pj03JmpuLGpuLT03JmpuO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKCg2NTUzNSZ4dCkhPSh4dD4+PjE2XjY1NTM1KSl7QXQubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9j''@;'; put 'put ''ayBsZW5ndGhzIixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0Lmxlbmd0aD02NTUzNSZ4dCx4dD0wLGpuPTAsc3QubW9kZT0xNSw2PT09Um4pYnJlYWsgZTtjYXNlIDE1OnN0Lm1vZGU9MTY7Y2FzZSAxNjppZihoaT1zdC5sZW5ndGgpe2lmKGhpPm5yJiYoaGk9bnIpLGhpPmh0JiYoaGk9aHQpLDA9''@;'; put 'put ''PT1oaSlicmVhayBlO3ouYXJyYXlTZXQocmksVXQsV2UsaGksVHQpLG5yLT1oaSxXZSs9aGksaHQtPWhpLFR0Kz1oaSxzdC5sZW5ndGgtPWhpO2JyZWFrfXN0Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO2puPDE0Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpu''@;'; put 'put ''LGpuKz04fWlmKHN0Lm5sZW49MjU3KygzMSZ4dCksam4tPTUsc3QubmRpc3Q9MSsoMzEmKHh0Pj4+PTUpKSxqbi09NSxzdC5uY29kZT00KygxNSYoeHQ+Pj49NSkpLHh0Pj4+PTQsam4tPTQsc3Qubmxlbj4yODZ8fHN0Lm5kaXN0PjMwKXtBdC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0''@;'; put 'put ''YW5jZSBzeW1ib2xzIixzdC5tb2RlPTMwO2JyZWFrfXN0LmhhdmU9MCxzdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtzdC5oYXZlPHN0Lm5jb2RlOyl7Zm9yKDtqbjwzOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0LmxlbnNbRGFbc3QuaGF2ZSsrXV09''@;'; put 'put ''NyZ4dCx4dD4+Pj0zLGpuLT0zfWZvcig7c3QuaGF2ZTwxOTspc3QubGVuc1tEYVtzdC5oYXZlKytdXT0wO2lmKHN0LmxlbmNvZGU9c3QubGVuZHluLHN0LmxlbmJpdHM9NyxlaT1VKDAsc3QubGVucywwLDE5LHN0LmxlbmNvZGUsMCxzdC53b3JrLFZpPXtiaXRzOnN0LmxlbmJpdHN9KSxzdC5s''@;'; put 'put ''ZW5iaXRzPVZpLmJpdHMsZWkpe0F0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfXN0LmhhdmU9MCxzdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtzdC5oYXZlPHN0Lm5sZW4rc3QubmRpc3Q7KXtmb3IoO2VuPShJaT1zdC5sZW5jb2RlW3h0JigxPDxzdC5s''@;'; put 'put ''ZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksISgoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZih1YTwxNil4dD4+Pj1YdCxqbi09WHQsc3QubGVuc1tzdC5oYXZlKytdPXVhO2Vsc2V7aWYoMTY9PT11YSl7''@;'; put 'put ''Zm9yKE5pPVh0KzI7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoeHQ+Pj49WHQsam4tPVh0LDA9PT1zdC5oYXZlKXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHN0Lm1vZGU9MzA7YnJlYWt9JGk9c3QubGVuc1tzdC5o''@;'; put 'put ''YXZlLTFdLGhpPTMrKDMmeHQpLHh0Pj4+PTIsam4tPTJ9ZWxzZSBpZigxNz09PXVhKXtmb3IoTmk9WHQrMztqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1qbi09WHQsJGk9MCxoaT0zKyg3Jih4dD4+Pj1YdCkpLHh0Pj4+PTMsam4tPTN9ZWxz''@;'; put 'put ''ZXtmb3IoTmk9WHQrNztqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1qbi09WHQsJGk9MCxoaT0xMSsoMTI3Jih4dD4+Pj1YdCkpLHh0Pj4+PTcsam4tPTd9aWYoc3QuaGF2ZStoaT5zdC5ubGVuK3N0Lm5kaXN0KXtBdC5tc2c9ImludmFsaWQg''@;'; put 'put ''Yml0IGxlbmd0aCByZXBlYXQiLHN0Lm1vZGU9MzA7YnJlYWt9Zm9yKDtoaS0tOylzdC5sZW5zW3N0LmhhdmUrK109JGl9fWlmKDMwPT09c3QubW9kZSlicmVhaztpZigwPT09c3QubGVuc1syNTZdKXtBdC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsc3QubW9k''@;'; put 'put ''ZT0zMDticmVha31pZihzdC5sZW5iaXRzPTksZWk9VSgxLHN0LmxlbnMsMCxzdC5ubGVuLHN0LmxlbmNvZGUsMCxzdC53b3JrLFZpPXtiaXRzOnN0LmxlbmJpdHN9KSxzdC5sZW5iaXRzPVZpLmJpdHMsZWkpe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixzdC5tb2RlPTMw''@;'; put 'put ''O2JyZWFrfWlmKHN0LmRpc3RiaXRzPTYsc3QuZGlzdGNvZGU9c3QuZGlzdGR5bixlaT1VKDIsc3QubGVucyxzdC5ubGVuLHN0Lm5kaXN0LHN0LmRpc3Rjb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5kaXN0Yml0c30pLHN0LmRpc3RiaXRzPVZpLmJpdHMsZWkpe0F0Lm1zZz0iaW52YWxpZCBk''@;'; put 'put ''aXN0YW5jZXMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0Lm1vZGU9MjAsNj09PVJuKWJyZWFrIGU7Y2FzZSAyMDpzdC5tb2RlPTIxO2Nhc2UgMjE6aWYobnI+PTYmJmh0Pj0yNTgpe0F0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1odCxBdC5uZXh0X2luPVdlLEF0LmF2YWlsX2luPW5y''@;'; put 'put ''LHN0LmhvbGQ9eHQsc3QuYml0cz1qbixLKEF0LHp0KSxUdD1BdC5uZXh0X291dCxyaT1BdC5vdXRwdXQsaHQ9QXQuYXZhaWxfb3V0LFdlPUF0Lm5leHRfaW4sVXQ9QXQuaW5wdXQsbnI9QXQuYXZhaWxfaW4seHQ9c3QuaG9sZCxqbj1zdC5iaXRzLDEyPT09c3QubW9kZSYmKHN0LmJhY2s9LTEp''@;'; put 'put ''O2JyZWFrfWZvcihzdC5iYWNrPTA7ZW49KElpPXN0LmxlbmNvZGVbeHQmKDE8PHN0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKChYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKGVuJiYhKDI0MCZl''@;'; put 'put ''bikpe2ZvcihFaT1YdCx2cj1lbixXbj11YTtlbj0oSWk9c3QubGVuY29kZVtXbisoKHh0JigxPDxFaSt2ciktMSk+PkVpKV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoRWkrKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9''@;'; put 'put ''eHQ+Pj49RWksam4tPUVpLHN0LmJhY2srPUVpfWlmKHh0Pj4+PVh0LGpuLT1YdCxzdC5iYWNrKz1YdCxzdC5sZW5ndGg9dWEsMD09PWVuKXtzdC5tb2RlPTI2O2JyZWFrfWlmKDMyJmVuKXtzdC5iYWNrPS0xLHN0Lm1vZGU9MTI7YnJlYWt9aWYoNjQmZW4pe0F0Lm1zZz0iaW52YWxpZCBsaXRl''@;'; put 'put ''cmFsL2xlbmd0aCBjb2RlIixzdC5tb2RlPTMwO2JyZWFrfXN0LmV4dHJhPTE1JmVuLHN0Lm1vZGU9MjI7Y2FzZSAyMjppZihzdC5leHRyYSl7Zm9yKE5pPXN0LmV4dHJhO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0Lmxlbmd0aCs9eHQm''@;'; put 'put ''KDE8PHN0LmV4dHJhKS0xLHh0Pj4+PXN0LmV4dHJhLGpuLT1zdC5leHRyYSxzdC5iYWNrKz1zdC5leHRyYX1zdC53YXM9c3QubGVuZ3RoLHN0Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoO2VuPShJaT1zdC5kaXN0Y29kZVt4dCYoMTw8c3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx1YT02NTUzNSZJ''@;'; put 'put ''aSwhKChYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKCEoMjQwJmVuKSl7Zm9yKEVpPVh0LHZyPWVuLFduPXVhO2VuPShJaT1zdC5kaXN0Y29kZVtXbisoKHh0JigxPDxFaSt2ciktMSk+PkVpKV0pPj4+MTYmMjU1LHVh''@;'; put 'put ''PTY1NTM1JklpLCEoRWkrKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9eHQ+Pj49RWksam4tPUVpLHN0LmJhY2srPUVpfWlmKHh0Pj4+PVh0LGpuLT1YdCxzdC5iYWNrKz1YdCw2NCZlbil7QXQubXNnPSJpbnZhbGlkIGRp''@;'; put 'put ''c3RhbmNlIGNvZGUiLHN0Lm1vZGU9MzA7YnJlYWt9c3Qub2Zmc2V0PXVhLHN0LmV4dHJhPTE1JmVuLHN0Lm1vZGU9MjQ7Y2FzZSAyNDppZihzdC5leHRyYSl7Zm9yKE5pPXN0LmV4dHJhO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0Lm9m''@;'; put 'put ''ZnNldCs9eHQmKDE8PHN0LmV4dHJhKS0xLHh0Pj4+PXN0LmV4dHJhLGpuLT1zdC5leHRyYSxzdC5iYWNrKz1zdC5leHRyYX1pZihzdC5vZmZzZXQ+c3QuZG1heCl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3QubW9kZT0zMDticmVha31zdC5tb2RlPTI1O2Nhc2Ug''@;'; put 'put ''MjU6aWYoMD09PWh0KWJyZWFrIGU7aWYoc3Qub2Zmc2V0PihoaT16dC1odCkpe2lmKChoaT1zdC5vZmZzZXQtaGkpPnN0LndoYXZlJiZzdC5zYW5lKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixzdC5tb2RlPTMwO2JyZWFrfWNuPWhpPnN0LnduZXh0P3N0LndzaXpl''@;'; put 'put ''LShoaS09c3Qud25leHQpOnN0LnduZXh0LWhpLGhpPnN0Lmxlbmd0aCYmKGhpPXN0Lmxlbmd0aCksZm49c3Qud2luZG93fWVsc2UgZm49cmksY249VHQtc3Qub2Zmc2V0LGhpPXN0Lmxlbmd0aDtoaT5odCYmKGhpPWh0KSxodC09aGksc3QubGVuZ3RoLT1oaTtkb3tyaVtUdCsrXT1mbltjbisr''@;'; put 'put ''XX13aGlsZSgtLWhpKTswPT09c3QubGVuZ3RoJiYoc3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09aHQpYnJlYWsgZTtyaVtUdCsrXT1zdC5sZW5ndGgsaHQtLSxzdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoc3Qud3JhcCl7Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBl''@;'; put 'put ''O25yLS0seHR8PVV0W1dlKytdPDxqbixqbis9OH1pZihBdC50b3RhbF9vdXQrPXp0LT1odCxzdC50b3RhbCs9enQsenQmJihBdC5hZGxlcj1zdC5jaGVjaz1zdC5mbGFncz9MKHN0LmNoZWNrLHJpLHp0LFR0LXp0KTpOKHN0LmNoZWNrLHJpLHp0LFR0LXp0KSksenQ9aHQsKHN0LmZsYWdzP3h0''@;'; put 'put ''OiRlKHh0KSkhPT1zdC5jaGVjayl7QXQubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsc3QubW9kZT0zMDticmVha314dD0wLGpuPTB9c3QubW9kZT0yODtjYXNlIDI4OmlmKHN0LndyYXAmJnN0LmZsYWdzKXtmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2Ur''@;'; put 'put ''K108PGpuLGpuKz04fWlmKHh0IT09KDQyOTQ5NjcyOTUmc3QudG90YWwpKXtBdC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxqbj0wfXN0Lm1vZGU9Mjk7Y2FzZSAyOTplaT0xO2JyZWFrIGU7Y2FzZSAzMDplaT0tMzticmVhayBlO2Nhc2UgMzE6''@;'; put 'put ''cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gX2V9cmV0dXJuIEF0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1odCxBdC5uZXh0X2luPVdlLEF0LmF2YWlsX2luPW5yLHN0LmhvbGQ9eHQsc3QuYml0cz1qbiwoc3Qud3NpemV8fHp0IT09QXQuYXZhaWxfb3V0JiZzdC5tb2RlPDMwJiYoc3QubW9k''@;'; put 'put ''ZTwyN3x8NCE9PVJuKSkmJmZ1bmN0aW9uIGhuKEF0LFJuLHN0LFV0KXt2YXIgcmksV2U9QXQuc3RhdGU7cmV0dXJuIG51bGw9PT1XZS53aW5kb3cmJihXZS53c2l6ZT0xPDxXZS53Yml0cyxXZS53bmV4dD0wLFdlLndoYXZlPTAsV2Uud2luZG93PW5ldyB6LkJ1ZjgoV2Uud3NpemUpKSxVdD49''@;'; put 'put ''V2Uud3NpemU/KHouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVdlLndzaXplLFdlLndzaXplLDApLFdlLnduZXh0PTAsV2Uud2hhdmU9V2Uud3NpemUpOigocmk9V2Uud3NpemUtV2Uud25leHQpPlV0JiYocmk9VXQpLHouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVV0LHJpLFdlLnduZXh0''@;'; put 'put ''KSwoVXQtPXJpKT8oei5hcnJheVNldChXZS53aW5kb3csUm4sc3QtVXQsVXQsMCksV2Uud25leHQ9VXQsV2Uud2hhdmU9V2Uud3NpemUpOihXZS53bmV4dCs9cmksV2Uud25leHQ9PT1XZS53c2l6ZSYmKFdlLnduZXh0PTApLFdlLndoYXZlPFdlLndzaXplJiYoV2Uud2hhdmUrPXJpKSkpLDB9''@;'; put 'put ''KEF0LEF0Lm91dHB1dCxBdC5uZXh0X291dCx6dC1BdC5hdmFpbF9vdXQpPyhzdC5tb2RlPTMxLC00KTooenQtPUF0LmF2YWlsX291dCxBdC50b3RhbF9pbis9cm4tPUF0LmF2YWlsX2luLEF0LnRvdGFsX291dCs9enQsc3QudG90YWwrPXp0LHN0LndyYXAmJnp0JiYoQXQuYWRsZXI9c3QuY2hl''@;'; put 'put ''Y2s9c3QuZmxhZ3M/TChzdC5jaGVjayxyaSx6dCxBdC5uZXh0X291dC16dCk6TihzdC5jaGVjayxyaSx6dCxBdC5uZXh0X291dC16dCkpLEF0LmRhdGFfdHlwZT1zdC5iaXRzKyhzdC5sYXN0PzY0OjApKygxMj09PXN0Lm1vZGU/MTI4OjApKygyMD09PXN0Lm1vZGV8fDE1PT09c3QubW9kZT8y''@;'; put 'put ''NTY6MCksKDA9PT1ybiYmMD09PXp0fHw0PT09Um4pJiZlaT09PWllJiYoZWk9LTUpLGVpKX0sTy5pbmZsYXRlRW5kPWZ1bmN0aW9uIE9yKEF0KXtpZighQXR8fCFBdC5zdGF0ZSlyZXR1cm4gX2U7dmFyIFJuPUF0LnN0YXRlO3JldHVybiBSbi53aW5kb3cmJihSbi53aW5kb3c9bnVsbCksQXQu''@;'; put 'put ''c3RhdGU9bnVsbCxpZX0sTy5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uIFd0KEF0LFJuKXt2YXIgc3Q7cmV0dXJuIEF0JiZBdC5zdGF0ZSYmMiYoc3Q9QXQuc3RhdGUpLndyYXA/KHN0LmhlYWQ9Um4sUm4uZG9uZT0hMSxpZSk6X2V9LE8uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJv''@;'; put 'put ''bSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2luZnRyZWVzIjozNn1dLDM2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLHE9''@;'; put 'put ''WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxlZT1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAs''@;'; put 'put ''MjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLEo9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLG5lPVsxNiwxNiwxNiwxNiwxNywx''@;'; put 'put ''NywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF07Ri5leHBvcnRzPWZ1bmN0aW9uKGxlLG1lLF9lLFRlLFNlLHplLFYscCl7dmFyIHNlLHdlLFVlLEplLG90LFhlLEllLFZlLGtlLGI9cC5iaXRzLHg9''@;'; put 'put ''MCxDPTAsVD0wLEg9MCxqPTAsRT0wLG09MCxBPTAsYWU9MCx0ZT0wLE1lPW51bGwsdmU9MCxqZT1uZXcgei5CdWYxNigxNiksRGU9bmV3IHouQnVmMTYoMTYpLEZlPW51bGwsUmU9MDtmb3IoeD0wO3g8PTE1O3grKylqZVt4XT0wO2ZvcihDPTA7QzxUZTtDKyspamVbbWVbX2UrQ11dKys7Zm9y''@;'; put 'put ''KGo9YixIPTE1O0g+PTEmJjA9PT1qZVtIXTtILS0pO2lmKGo+SCYmKGo9SCksMD09PUgpcmV0dXJuIFNlW3plKytdPTIwOTcxNTIwLFNlW3plKytdPTIwOTcxNTIwLHAuYml0cz0xLDA7Zm9yKFQ9MTtUPEgmJjA9PT1qZVtUXTtUKyspO2ZvcihqPFQmJihqPVQpLEE9MSx4PTE7eDw9MTU7eCsr''@;'; put 'put ''KWlmKEE8PD0xLChBLT1qZVt4XSk8MClyZXR1cm4tMTtpZihBPjAmJigwPT09bGV8fDEhPT1IKSlyZXR1cm4tMTtmb3IoRGVbMV09MCx4PTE7eDwxNTt4KyspRGVbeCsxXT1EZVt4XStqZVt4XTtmb3IoQz0wO0M8VGU7QysrKTAhPT1tZVtfZStDXSYmKFZbRGVbbWVbX2UrQ11dKytdPUMpO2lm''@;'; put 'put ''KDA9PT1sZT8oTWU9RmU9VixYZT0xOSk6MT09PWxlPyhNZT1xLHZlLT0yNTcsRmU9ZWUsUmUtPTI1NyxYZT0yNTYpOihNZT1KLEZlPW5lLFhlPS0xKSx0ZT0wLEM9MCx4PVQsb3Q9emUsRT1qLG09MCxVZT0tMSxKZT0oYWU9MTw8aiktMSwxPT09bGUmJmFlPjg1Mnx8Mj09PWxlJiZhZT41OTIp''@;'; put 'put ''cmV0dXJuIDE7Zm9yKDs7KXtJZT14LW0sVltDXTxYZT8oVmU9MCxrZT1WW0NdKTpWW0NdPlhlPyhWZT1GZVtSZStWW0NdXSxrZT1NZVt2ZStWW0NdXSk6KFZlPTk2LGtlPTApLHNlPTE8PHgtbSxUPXdlPTE8PEU7ZG97U2Vbb3QrKHRlPj5tKSsod2UtPXNlKV09SWU8PDI0fFZlPDwxNnxrZX13''@;'; put 'put ''aGlsZSgwIT09d2UpO2ZvcihzZT0xPDx4LTE7dGUmc2U7KXNlPj49MTtpZigwIT09c2U/KHRlJj1zZS0xLHRlKz1zZSk6dGU9MCxDKyssMD09LS1qZVt4XSl7aWYoeD09PUgpYnJlYWs7eD1tZVtfZStWW0NdXX1pZih4PmomJih0ZSZKZSkhPT1VZSl7Zm9yKDA9PT1tJiYobT1qKSxvdCs9VCxB''@;'; put 'put ''PTE8PChFPXgtbSk7RSttPEgmJiEoKEEtPWplW0UrbV0pPD0wKTspRSsrLEE8PD0xO2lmKGFlKz0xPDxFLDE9PT1sZSYmYWU+ODUyfHwyPT09bGUmJmFlPjU5MilyZXR1cm4gMTtTZVtVZT10ZSZKZV09ajw8MjR8RTw8MTZ8b3QtemV9fXJldHVybiAwIT09dGUmJihTZVtvdCt0ZV09eC1tPDwy''@;'; put 'put ''NHw2NDw8MTYpLHAuYml0cz1qLDB9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzNzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJy''@;'; put 'put ''b3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0se31dLDM4OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpO2Z1''@;'; put 'put ''bmN0aW9uIFcoZnQpe2Zvcih2YXIgT3I9ZnQubGVuZ3RoOy0tT3I+PTA7KWZ0W09yXT0wfXZhciB6ZT0xNSxWPTE2LEg9WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0saj1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3''@;'; put 'put ''LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sRT1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10sbT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sYWU9bmV3IEFycmF5KDU3Nik7VyhhZSk7dmFyIHRlPW5ldyBB''@;'; put 'put ''cnJheSg2MCk7Vyh0ZSk7dmFyIHNlPW5ldyBBcnJheSg1MTIpO1coc2UpO3ZhciB3ZT1uZXcgQXJyYXkoMjU2KTtXKHdlKTt2YXIgVWU9bmV3IEFycmF5KDI5KTtXKFVlKTt2YXIgSmU9bmV3IEFycmF5KDMwKTtXKEplKTt2YXIgTWUsdmUsWGUsb3Q9ZnVuY3Rpb24oZnQsT3IsV3QsQXQsUm4p''@;'; put 'put ''e3RoaXMuc3RhdGljX3RyZWU9ZnQsdGhpcy5leHRyYV9iaXRzPU9yLHRoaXMuZXh0cmFfYmFzZT1XdCx0aGlzLmVsZW1zPUF0LHRoaXMubWF4X2xlbmd0aD1Sbix0aGlzLmhhc19zdHJlZT1mdCYmZnQubGVuZ3RofSxqZT1mdW5jdGlvbihmdCxPcil7dGhpcy5keW5fdHJlZT1mdCx0aGlzLm1h''@;'; put 'put ''eF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9T3J9O2Z1bmN0aW9uIERlKGZ0KXtyZXR1cm4gZnQ8MjU2P3NlW2Z0XTpzZVsyNTYrKGZ0Pj4+NyldfWZ1bmN0aW9uIEZlKGZ0LE9yKXtmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZPcixmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytd''@;'; put 'put ''PU9yPj4+OCYyNTV9ZnVuY3Rpb24gUmUoZnQsT3IsV3Qpe2Z0LmJpX3ZhbGlkPlYtV3Q/KGZ0LmJpX2J1Znw9T3I8PGZ0LmJpX3ZhbGlkJjY1NTM1LEZlKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPU9yPj5WLWZ0LmJpX3ZhbGlkLGZ0LmJpX3ZhbGlkKz1XdC1WKTooZnQuYmlfYnVmfD1Pcjw8''@;'; put 'put ''ZnQuYmlfdmFsaWQmNjU1MzUsZnQuYmlfdmFsaWQrPVd0KX1mdW5jdGlvbiBJZShmdCxPcixXdCl7UmUoZnQsV3RbMipPcl0sV3RbMipPcisxXSl9ZnVuY3Rpb24gVmUoZnQsT3Ipe3ZhciBXdD0wO2Rve1d0fD0xJmZ0LGZ0Pj4+PTEsV3Q8PD0xfXdoaWxlKC0tT3I+MCk7cmV0dXJuIFd0Pj4+''@;'; put 'put ''MX1mdW5jdGlvbiBfdChmdCxPcixXdCl7dmFyIHN0LFV0LEF0PW5ldyBBcnJheSh6ZSsxKSxSbj0wO2ZvcihzdD0xO3N0PD16ZTtzdCsrKUF0W3N0XT1Sbj1SbitXdFtzdC0xXTw8MTtmb3IoVXQ9MDtVdDw9T3I7VXQrKyl7dmFyIHJpPWZ0WzIqVXQrMV07MCE9PXJpJiYoZnRbMipVdF09VmUo''@;'; put 'put ''QXRbcmldKysscmkpKX19ZnVuY3Rpb24gUWUoZnQpe3ZhciBPcjtmb3IoT3I9MDtPcjwyODY7T3IrKylmdC5keW5fbHRyZWVbMipPcl09MDtmb3IoT3I9MDtPcjwzMDtPcisrKWZ0LmR5bl9kdHJlZVsyKk9yXT0wO2ZvcihPcj0wO09yPDE5O09yKyspZnQuYmxfdHJlZVsyKk9yXT0wO2Z0LmR5''@;'; put 'put ''bl9sdHJlZVs1MTJdPTEsZnQub3B0X2xlbj1mdC5zdGF0aWNfbGVuPTAsZnQubGFzdF9saXQ9ZnQubWF0Y2hlcz0wfWZ1bmN0aW9uIHVuKGZ0KXtmdC5iaV92YWxpZD44P0ZlKGZ0LGZ0LmJpX2J1Zik6ZnQuYmlfdmFsaWQ+MCYmKGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109ZnQuYmlf''@;'; put 'put ''YnVmKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wfWZ1bmN0aW9uIE10KGZ0LE9yLFd0LEF0KXt2YXIgUm49MipPcixzdD0yKld0O3JldHVybiBmdFtSbl08ZnRbc3RdfHxmdFtSbl09PT1mdFtzdF0mJkF0W09yXTw9QXRbV3RdfWZ1bmN0aW9uIER0KGZ0LE9yLFd0KXtmb3IodmFyIEF0PWZ0''@;'; put 'put ''LmhlYXBbV3RdLFJuPVd0PDwxO1JuPD1mdC5oZWFwX2xlbiYmKFJuPGZ0LmhlYXBfbGVuJiZNdChPcixmdC5oZWFwW1JuKzFdLGZ0LmhlYXBbUm5dLGZ0LmRlcHRoKSYmUm4rKywhTXQoT3IsQXQsZnQuaGVhcFtSbl0sZnQuZGVwdGgpKTspZnQuaGVhcFtXdF09ZnQuaGVhcFtSbl0sV3Q9Um4s''@;'; put 'put ''Um48PD0xO2Z0LmhlYXBbV3RdPUF0fWZ1bmN0aW9uIGl0KGZ0LE9yLFd0KXt2YXIgQXQsUm4sVXQscmksc3Q9MDtpZigwIT09ZnQubGFzdF9saXQpZG97QXQ9ZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipzdF08PDh8ZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipzdCsxXSxSbj1mdC5wZW5k''@;'; put 'put ''aW5nX2J1ZltmdC5sX2J1ZitzdF0sc3QrKywwPT09QXQ/SWUoZnQsUm4sT3IpOihJZShmdCwoVXQ9d2VbUm5dKSsyNTYrMSxPciksMCE9PShyaT1IW1V0XSkmJlJlKGZ0LFJuLT1VZVtVdF0scmkpLEllKGZ0LFV0PURlKC0tQXQpLFd0KSwwIT09KHJpPWpbVXRdKSYmUmUoZnQsQXQtPUplW1V0''@;'; put 'put ''XSxyaSkpfXdoaWxlKHN0PGZ0Lmxhc3RfbGl0KTtJZShmdCwyNTYsT3IpfWZ1bmN0aW9uICRlKGZ0LE9yKXt2YXIgVXQscmksVHQsV3Q9T3IuZHluX3RyZWUsQXQ9T3Iuc3RhdF9kZXNjLnN0YXRpY190cmVlLFJuPU9yLnN0YXRfZGVzYy5oYXNfc3RyZWUsc3Q9T3Iuc3RhdF9kZXNjLmVsZW1z''@;'; put 'put ''LFdlPS0xO2ZvcihmdC5oZWFwX2xlbj0wLGZ0LmhlYXBfbWF4PTU3MyxVdD0wO1V0PHN0O1V0KyspMCE9PVd0WzIqVXRdPyhmdC5oZWFwWysrZnQuaGVhcF9sZW5dPVdlPVV0LGZ0LmRlcHRoW1V0XT0wKTpXdFsyKlV0KzFdPTA7Zm9yKDtmdC5oZWFwX2xlbjwyOylXdFsyKihUdD1mdC5oZWFw''@;'; put 'put ''WysrZnQuaGVhcF9sZW5dPVdlPDI/KytXZTowKV09MSxmdC5kZXB0aFtUdF09MCxmdC5vcHRfbGVuLS0sUm4mJihmdC5zdGF0aWNfbGVuLT1BdFsyKlR0KzFdKTtmb3IoT3IubWF4X2NvZGU9V2UsVXQ9ZnQuaGVhcF9sZW4+PjE7VXQ+PTE7VXQtLSlEdChmdCxXdCxVdCk7VHQ9c3Q7ZG97VXQ9''@;'; put 'put ''ZnQuaGVhcFsxXSxmdC5oZWFwWzFdPWZ0LmhlYXBbZnQuaGVhcF9sZW4tLV0sRHQoZnQsV3QsMSkscmk9ZnQuaGVhcFsxXSxmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPVV0LGZ0LmhlYXBbLS1mdC5oZWFwX21heF09cmksV3RbMipUdF09V3RbMipVdF0rV3RbMipyaV0sZnQuZGVwdGhbVHRdPShm''@;'; put 'put ''dC5kZXB0aFtVdF0+PWZ0LmRlcHRoW3JpXT9mdC5kZXB0aFtVdF06ZnQuZGVwdGhbcmldKSsxLFd0WzIqVXQrMV09V3RbMipyaSsxXT1UdCxmdC5oZWFwWzFdPVR0KyssRHQoZnQsV3QsMSl9d2hpbGUoZnQuaGVhcF9sZW4+PTIpO2Z0LmhlYXBbLS1mdC5oZWFwX21heF09ZnQuaGVhcFsxXSxm''@;'; put 'put ''dW5jdGlvbiBBZShmdCxPcil7dmFyIFR0LG5yLGh0LHh0LGpuLHJuLFd0PU9yLmR5bl90cmVlLEF0PU9yLm1heF9jb2RlLFJuPU9yLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxzdD1Pci5zdGF0X2Rlc2MuaGFzX3N0cmVlLFV0PU9yLnN0YXRfZGVzYy5leHRyYV9iaXRzLHJpPU9yLnN0YXRfZGVz''@;'; put 'put ''Yy5leHRyYV9iYXNlLFdlPU9yLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHp0PTA7Zm9yKHh0PTA7eHQ8PXplO3h0KyspZnQuYmxfY291bnRbeHRdPTA7Zm9yKFd0WzIqZnQuaGVhcFtmdC5oZWFwX21heF0rMV09MCxUdD1mdC5oZWFwX21heCsxO1R0PDU3MztUdCsrKSh4dD1XdFsyKld0WzIqKG5y''@;'; put 'put ''PWZ0LmhlYXBbVHRdKSsxXSsxXSsxKT5XZSYmKHh0PVdlLHp0KyspLFd0WzIqbnIrMV09eHQsIShucj5BdCkmJihmdC5ibF9jb3VudFt4dF0rKyxqbj0wLG5yPj1yaSYmKGpuPVV0W25yLXJpXSksZnQub3B0X2xlbis9KHJuPVd0WzIqbnJdKSooeHQram4pLHN0JiYoZnQuc3RhdGljX2xlbis9''@;'; put 'put ''cm4qKFJuWzIqbnIrMV0ram4pKSk7aWYoMCE9PXp0KXtkb3tmb3IoeHQ9V2UtMTswPT09ZnQuYmxfY291bnRbeHRdOyl4dC0tO2Z0LmJsX2NvdW50W3h0XS0tLGZ0LmJsX2NvdW50W3h0KzFdKz0yLGZ0LmJsX2NvdW50W1dlXS0tLHp0LT0yfXdoaWxlKHp0PjApO2Zvcih4dD1XZTswIT09eHQ7''@;'; put 'put ''eHQtLSlmb3IobnI9ZnQuYmxfY291bnRbeHRdOzAhPT1ucjspISgoaHQ9ZnQuaGVhcFstLVR0XSk+QXQpJiYoV3RbMipodCsxXSE9PXh0JiYoZnQub3B0X2xlbis9KHh0LVd0WzIqaHQrMV0pKld0WzIqaHRdLFd0WzIqaHQrMV09eHQpLG5yLS0pfX0oZnQsT3IpLF90KFd0LFdlLGZ0LmJsX2Nv''@;'; put 'put ''dW50KX1mdW5jdGlvbiB0dChmdCxPcixXdCl7dmFyIEF0LHN0LFJuPS0xLFV0PU9yWzFdLHJpPTAsV2U9NyxUdD00O2ZvcigwPT09VXQmJihXZT0xMzgsVHQ9MyksT3JbMiooV3QrMSkrMV09NjU1MzUsQXQ9MDtBdDw9V3Q7QXQrKylzdD1VdCxVdD1PclsyKihBdCsxKSsxXSwhKCsrcmk8V2Um''@;'; put 'put ''JnN0PT09VXQpJiYocmk8VHQ/ZnQuYmxfdHJlZVsyKnN0XSs9cmk6MCE9PXN0PyhzdCE9PVJuJiZmdC5ibF90cmVlWzIqc3RdKyssZnQuYmxfdHJlZVszMl0rKyk6cmk8PTEwP2Z0LmJsX3RyZWVbMzRdKys6ZnQuYmxfdHJlZVszNl0rKyxyaT0wLFJuPXN0LDA9PT1VdD8oV2U9MTM4LFR0PTMp''@;'; put 'put ''OnN0PT09VXQ/KFdlPTYsVHQ9Myk6KFdlPTcsVHQ9NCkpfWZ1bmN0aW9uIEhlKGZ0LE9yLFd0KXt2YXIgQXQsc3QsUm49LTEsVXQ9T3JbMV0scmk9MCxXZT03LFR0PTQ7Zm9yKDA9PT1VdCYmKFdlPTEzOCxUdD0zKSxBdD0wO0F0PD1XdDtBdCsrKWlmKHN0PVV0LFV0PU9yWzIqKEF0KzEpKzFd''@;'; put 'put ''LCEoKytyaTxXZSYmc3Q9PT1VdCkpe2lmKHJpPFR0KWRve0llKGZ0LHN0LGZ0LmJsX3RyZWUpfXdoaWxlKDAhPS0tcmkpO2Vsc2UgMCE9PXN0PyhzdCE9PVJuJiYoSWUoZnQsc3QsZnQuYmxfdHJlZSkscmktLSksSWUoZnQsMTYsZnQuYmxfdHJlZSksUmUoZnQscmktMywyKSk6cmk8PTEwPyhJ''@;'; put 'put ''ZShmdCwxNyxmdC5ibF90cmVlKSxSZShmdCxyaS0zLDMpKTooSWUoZnQsMTgsZnQuYmxfdHJlZSksUmUoZnQscmktMTEsNykpO3JpPTAsUm49c3QsMD09PVV0PyhXZT0xMzgsVHQ9Myk6c3Q9PT1VdD8oV2U9NixUdD0zKTooV2U9NyxUdD00KX19dmFyIFB0PSExO2Z1bmN0aW9uIFF0KGZ0LE9y''@;'; put 'put ''LFd0LEF0KXtSZShmdCwwKyhBdD8xOjApLDMpLGZ1bmN0aW9uIHl0KGZ0LE9yLFd0LEF0KXt1bihmdCksQXQmJihGZShmdCxXdCksRmUoZnQsfld0KSksei5hcnJheVNldChmdC5wZW5kaW5nX2J1ZixmdC53aW5kb3csT3IsV3QsZnQucGVuZGluZyksZnQucGVuZGluZys9V3R9KGZ0LE9yLFd0''@;'; put 'put ''LCEwKX1PLl90cl9pbml0PWZ1bmN0aW9uIHNpKGZ0KXtQdHx8KGZ1bmN0aW9uIG50KCl7dmFyIGZ0LE9yLFd0LEF0LFJuLHN0PW5ldyBBcnJheSh6ZSsxKTtmb3IoV3Q9MCxBdD0wO0F0PDI4O0F0KyspZm9yKFVlW0F0XT1XdCxmdD0wO2Z0PDE8PEhbQXRdO2Z0Kyspd2VbV3QrK109QXQ7Zm9y''@;'; put 'put ''KHdlW1d0LTFdPUF0LFJuPTAsQXQ9MDtBdDwxNjtBdCsrKWZvcihKZVtBdF09Um4sZnQ9MDtmdDwxPDxqW0F0XTtmdCsrKXNlW1JuKytdPUF0O2ZvcihSbj4+PTc7QXQ8MzA7QXQrKylmb3IoSmVbQXRdPVJuPDw3LGZ0PTA7ZnQ8MTw8altBdF0tNztmdCsrKXNlWzI1NitSbisrXT1BdDtmb3Io''@;'; put 'put ''T3I9MDtPcjw9emU7T3IrKylzdFtPcl09MDtmb3IoZnQ9MDtmdDw9MTQzOylhZVsyKmZ0KzFdPTgsZnQrKyxzdFs4XSsrO2Zvcig7ZnQ8PTI1NTspYWVbMipmdCsxXT05LGZ0Kyssc3RbOV0rKztmb3IoO2Z0PD0yNzk7KWFlWzIqZnQrMV09NyxmdCsrLHN0WzddKys7Zm9yKDtmdDw9Mjg3Oylh''@;'; put 'put ''ZVsyKmZ0KzFdPTgsZnQrKyxzdFs4XSsrO2ZvcihfdChhZSwyODcsc3QpLGZ0PTA7ZnQ8MzA7ZnQrKyl0ZVsyKmZ0KzFdPTUsdGVbMipmdF09VmUoZnQsNSk7TWU9bmV3IG90KGFlLEgsMjU3LDI4Nix6ZSksdmU9bmV3IG90KHRlLGosMCwzMCx6ZSksWGU9bmV3IG90KG5ldyBBcnJheSgwKSxF''@;'; put 'put ''LDAsMTksNyl9KCksUHQ9ITApLGZ0LmxfZGVzYz1uZXcgamUoZnQuZHluX2x0cmVlLE1lKSxmdC5kX2Rlc2M9bmV3IGplKGZ0LmR5bl9kdHJlZSx2ZSksZnQuYmxfZGVzYz1uZXcgamUoZnQuYmxfdHJlZSxYZSksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCxRZShmdCl9LE8uX3RyX3N0b3Jl''@;'; put 'put ''ZF9ibG9jaz1RdCxPLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbiBSaShmdCxPcixXdCxBdCl7dmFyIFJuLHN0LFV0PTA7ZnQubGV2ZWw+MD8oMj09PWZ0LnN0cm0uZGF0YV90eXBlJiYoZnQuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24gUnQoZnQpe3ZhciBXdCxPcj00MDkzNjI0NDQ3O2ZvcihX''@;'; put 'put ''dD0wO1d0PD0zMTtXdCsrLE9yPj4+PTEpaWYoMSZPciYmMCE9PWZ0LmR5bl9sdHJlZVsyKld0XSlyZXR1cm4gMDtpZigwIT09ZnQuZHluX2x0cmVlWzE4XXx8MCE9PWZ0LmR5bl9sdHJlZVsyMF18fDAhPT1mdC5keW5fbHRyZWVbMjZdKXJldHVybiAxO2ZvcihXdD0zMjtXdDwyNTY7V3QrKylp''@;'; put 'put ''ZigwIT09ZnQuZHluX2x0cmVlWzIqV3RdKXJldHVybiAxO3JldHVybiAwfShmdCkpLCRlKGZ0LGZ0LmxfZGVzYyksJGUoZnQsZnQuZF9kZXNjKSxVdD1mdW5jdGlvbiB1dChmdCl7dmFyIE9yO2Zvcih0dChmdCxmdC5keW5fbHRyZWUsZnQubF9kZXNjLm1heF9jb2RlKSx0dChmdCxmdC5keW5f''@;'; put 'put ''ZHRyZWUsZnQuZF9kZXNjLm1heF9jb2RlKSwkZShmdCxmdC5ibF9kZXNjKSxPcj0xODtPcj49MyYmMD09PWZ0LmJsX3RyZWVbMiptW09yXSsxXTtPci0tKTtyZXR1cm4gZnQub3B0X2xlbis9MyooT3IrMSkrNSs1KzQsT3J9KGZ0KSwoc3Q9ZnQuc3RhdGljX2xlbiszKzc+Pj4zKTw9KFJuPWZ0''@;'; put 'put ''Lm9wdF9sZW4rMys3Pj4+MykmJihSbj1zdCkpOlJuPXN0PVd0KzUsV3QrNDw9Um4mJi0xIT09T3I/UXQoZnQsT3IsV3QsQXQpOjQ9PT1mdC5zdHJhdGVneXx8c3Q9PT1Sbj8oUmUoZnQsMisoQXQ/MTowKSwzKSxpdChmdCxhZSx0ZSkpOihSZShmdCw0KyhBdD8xOjApLDMpLGZ1bmN0aW9uIHF0''@;'; put 'put ''KGZ0LE9yLFd0LEF0KXt2YXIgUm47Zm9yKFJlKGZ0LE9yLTI1Nyw1KSxSZShmdCxXdC0xLDUpLFJlKGZ0LEF0LTQsNCksUm49MDtSbjxBdDtSbisrKVJlKGZ0LGZ0LmJsX3RyZWVbMiptW1JuXSsxXSwzKTtIZShmdCxmdC5keW5fbHRyZWUsT3ItMSksSGUoZnQsZnQuZHluX2R0cmVlLFd0LTEp''@;'; put 'put ''fShmdCxmdC5sX2Rlc2MubWF4X2NvZGUrMSxmdC5kX2Rlc2MubWF4X2NvZGUrMSxVdCsxKSxpdChmdCxmdC5keW5fbHRyZWUsZnQuZHluX2R0cmVlKSksUWUoZnQpLEF0JiZ1bihmdCl9LE8uX3RyX3RhbGx5PWZ1bmN0aW9uIGhuKGZ0LE9yLFd0KXtyZXR1cm4gZnQucGVuZGluZ19idWZbZnQu''@;'; put 'put ''ZF9idWYrMipmdC5sYXN0X2xpdF09T3I+Pj44JjI1NSxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0KzFdPTI1NSZPcixmdC5wZW5kaW5nX2J1ZltmdC5sX2J1ZitmdC5sYXN0X2xpdF09MjU1Jld0LGZ0Lmxhc3RfbGl0KyssMD09PU9yP2Z0LmR5bl9sdHJlZVsyKld0XSsr''@;'; put 'put ''OihmdC5tYXRjaGVzKyssT3ItLSxmdC5keW5fbHRyZWVbMiood2VbV3RdKzI1NisxKV0rKyxmdC5keW5fZHRyZWVbMipEZShPcildKyspLGZ0Lmxhc3RfbGl0PT09ZnQubGl0X2J1ZnNpemUtMX0sTy5fdHJfYWxpZ249ZnVuY3Rpb24gc24oZnQpe1JlKGZ0LDIsMyksSWUoZnQsMjU2LGFlKSxm''@;'; put 'put ''dW5jdGlvbiBrZShmdCl7MTY9PT1mdC5iaV92YWxpZD8oRmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wKTpmdC5iaV92YWxpZD49OCYmKGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZ0LmJpX2J1ZixmdC5iaV9idWY+Pj04LGZ0LmJpX3ZhbGlkLT04''@;'; put 'put ''KX0oZnQpfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzk6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uIHooKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1u''@;'; put 'put ''dWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dfSx7fSxbOV0pKDkpfSl9LDYzNTc4Oih1ZSxYLHkpPT57IWZ1bmN0aW9uIF8odyl7''@;'; put 'put ''dy52ZXJzaW9uPSIxLjIwMjExMTIyLjEiO3ZhciBQPTEyMDAsRj0xMjUyO3R5cGVvZiBjcHRhYmxlPiJ1IiYmKHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbC5jcHRhYmxlPXkoNDI5MjQpOnR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93LmNwdGFibGU9eSg0MjkyNCkpKTtmb3IodmFyIE89Wzg3''@;'; put 'put ''NCw5MzIsOTM2LDk0OSw5NTAsMWU0XSx6PTA7ejw9ODsrK3opTy5wdXNoKDEyNTAreik7dmFyIE49ezA6MTI1MiwxOjY1MDAxLDI6NjUwMDEsNzc6MWU0LDEyODo5MzIsMTI5Ojk0OSwxMzA6MTM2MSwxMzQ6OTM2LDEzNjo5NTAsMTYxOjEyNTMsMTYyOjEyNTQsMTYzOjEyNTgsMTc3OjEyNTUs''@;'; put 'put ''MTc4OjEyNTYsMTg2OjEyNTcsMjA0OjEyNTEsMjIyOjg3NCwyMzg6MTI1MCwyNTU6MTI1Miw2OTo2OTY5fSxMPWZ1bmN0aW9uKFMpey0xIT1PLmluZGV4T2YoUykmJihGPU5bMF09Uyl9LFU9ZnVuY3Rpb24oUyl7UD1TLEwoUyl9O2Z1bmN0aW9uIFcoKXtVKDEyMDApLGZ1bmN0aW9uIEsoKXtM''@;'; put 'put ''KDEyNTIpfSgpfWZ1bmN0aW9uIFkoUyl7Zm9yKHZhciBSPVtdLGs9MCxHPVMubGVuZ3RoO2s8RzsrK2spUltrXT1TLmNoYXJDb2RlQXQoayk7cmV0dXJuIFJ9dmFyIEo9ZnVuY3Rpb24oUyl7dmFyIFI9Uy5jaGFyQ29kZUF0KDApLGs9Uy5jaGFyQ29kZUF0KDEpO3JldHVybiAyNTU9PVImJjI1''@;'; put 'put ''ND09az9mdW5jdGlvbiBxKFMpe2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aD4+MTsrK2spUltrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFMuY2hhckNvZGVBdCgyKmspKyhTLmNoYXJDb2RlQXQoMiprKzEpPDw4KSk7cmV0dXJuIFIuam9pbigiIil9KFMuc2xpY2UoMikpOjI1ND09UiYmMjU1''@;'; put 'put ''PT1rP2Z1bmN0aW9uIGVlKFMpe2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aD4+MTsrK2spUltrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFMuY2hhckNvZGVBdCgyKmsrMSkrKFMuY2hhckNvZGVBdCgyKmspPDw4KSk7cmV0dXJuIFIuam9pbigiIil9KFMuc2xpY2UoMikpOjY1Mjc5PT1SP1Mu''@;'; put 'put ''c2xpY2UoMSk6U30sbmU9ZnVuY3Rpb24oUil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUil9LGllPWZ1bmN0aW9uKFIpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpfTt0eXBlb2YgY3B0YWJsZTwidSImJihVPWZ1bmN0aW9uKFMpe1A9UyxMKFMpfSxKPWZ1bmN0aW9uKFMpe3Jl''@;'; put 'put ''dHVybiAyNTU9PT1TLmNoYXJDb2RlQXQoMCkmJjI1ND09PVMuY2hhckNvZGVBdCgxKT9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFkoUy5zbGljZSgyKSkpOlN9LG5lPWZ1bmN0aW9uKFIpe3JldHVybiAxMjAwPT09UD9TdHJpbmcuZnJvbUNoYXJDb2RlKFIpOmNwdGFibGUudXRpbHMuZGVj''@;'; put 'put ''b2RlKFAsWzI1NSZSLFI+PjhdKVswXX0saWU9ZnVuY3Rpb24oUil7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKEYsW1JdKVswXX0pO3ZhciBsZT1udWxsLF9lPWZ1bmN0aW9uKCl7dmFyIFI9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXow''@;'; put 'put ''MTIzNDU2Nzg5Ky89IjtyZXR1cm57ZW5jb2RlOmZ1bmN0aW9uKGspe2Zvcih2YXIgRz0iIixRPTAsb2U9MCxnZT0wLHBlPTAseWU9MCxQZT0wLE5lPTAsWWU9MDtZZTxrLmxlbmd0aDspcGU9KFE9ay5jaGFyQ29kZUF0KFllKyspKT4+Mix5ZT0oMyZRKTw8NHwob2U9ay5jaGFyQ29kZUF0KFll''@;'; put 'put ''KyspKT4+NCxQZT0oMTUmb2UpPDwyfChnZT1rLmNoYXJDb2RlQXQoWWUrKykpPj42LE5lPTYzJmdlLGlzTmFOKG9lKT9QZT1OZT02NDppc05hTihnZSkmJihOZT02NCksRys9Ui5jaGFyQXQocGUpK1IuY2hhckF0KHllKStSLmNoYXJBdChQZSkrUi5jaGFyQXQoTmUpO3JldHVybiBHfSxkZWNv''@;'; put 'put ''ZGU6ZnVuY3Rpb24oRyl7dmFyIFE9IiIseWU9MCxQZT0wLE5lPTAsWWU9MDtHPUcucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBldD0wO2V0PEcubGVuZ3RoOyl5ZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpLFBlPVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSksUSs9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSh5ZTw8MnxQZT4+NCksNjQhPT0oTmU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSkmJihRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZQZSk8PDR8TmU+PjIpKSw2NCE9PShZZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpKSYmKFErPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoKDMmTmUpPDw2fFllKSk7cmV0dXJuIFF9fX0oKSxUZT10eXBlb2YgQnVmZmVyPCJ1IiYmdHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uczwidSImJiEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLFNlPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgQnVmZmVyPCJ1''@;'; put 'put ''Iil7dmFyIHplPSFCdWZmZXIuZnJvbTtpZighemUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7emU9ITB9U2U9emU/ZnVuY3Rpb24oUyxSKXtyZXR1cm4gUj9uZXcgQnVmZmVyKFMsUik6bmV3IEJ1ZmZlcihTKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5h''@;'; put 'put ''bGxvY3x8KEJ1ZmZlci5hbGxvYz1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEJ1ZmZlcihTKX0pLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEJ1ZmZlcihTKX0pfWZ1bmN0aW9uIFYoUyl7cmV0dXJuIFRlP0J1ZmZlci5hbGxv''@;'; put 'put ''YyhTKTpuZXcgQXJyYXkoUyl9ZnVuY3Rpb24gcChTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jVW5zYWZlKFMpOm5ldyBBcnJheShTKX12YXIgYj1mdW5jdGlvbihSKXtyZXR1cm4gVGU/U2UoUiwiYmluYXJ5Iik6Ui5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKGspe3JldHVybiAyNTUmay5jaGFy''@;'; put 'put ''Q29kZUF0KDApfSl9O2Z1bmN0aW9uIHgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1IilyZXR1cm4gYihTKTtmb3IodmFyIFI9bmV3IEFycmF5QnVmZmVyKFMubGVuZ3RoKSxrPW5ldyBVaW50OEFycmF5KFIpLEc9MDtHIT1TLmxlbmd0aDsrK0cpa1tHXT0yNTUmUy5jaGFyQ29kZUF0KEcp''@;'; put 'put ''O3JldHVybiBSfWZ1bmN0aW9uIEMoUyl7aWYoQXJyYXkuaXNBcnJheShTKSlyZXR1cm4gUy5tYXAoZnVuY3Rpb24oRyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoRyl9KS5qb2luKCIiKTtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZShTW2tdKTtyZXR1cm4gUi5qb2luKCIiKX1mdW5jdGlvbiBIKFMpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKFMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gSChuZXcgVWludDhBcnJheShTKSk7Zm9yKHZhciBSPW5l''@;'; put 'put ''dyBBcnJheShTLmxlbmd0aCksaz0wO2s8Uy5sZW5ndGg7KytrKVJba109U1trXTtyZXR1cm4gUn12YXIgaj1mdW5jdGlvbihTKXt2YXIgUj1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe0FycmF5LmlzQXJyYXkoayk/Uj1SLmNvbmNhdChrKToodHlwZW9mIFVpbnQ4QXJyYXk8InUi''@;'; put 'put ''JiZrIGluc3RhbmNlb2YgVWludDhBcnJheXx8dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmayBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKFI9Ui5jb25jYXQoSChrKSkpfSksUn0sRT0vXHUwMDAwL2csbT0vW1x1MDAwMS1cdTAwMDZdL2csQT17fSxhZT1mdW5jdGlvbihSKXtmdW5jdGlvbiBr''@;'; put 'put ''KGxuKXtmb3IodmFyIEVuPSIiLFVuPWxuLmxlbmd0aC0xO1VuPj0wOylFbis9bG4uY2hhckF0KFVuLS0pO3JldHVybiBFbn1mdW5jdGlvbiBHKGxuLEVuKXtmb3IodmFyIFVuPSIiO1VuLmxlbmd0aDxFbjspVW4rPWxuO3JldHVybiBVbn1mdW5jdGlvbiBRKGxuLEVuKXt2YXIgVW49IiIrbG47''@;'; put 'put ''cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46RygiMCIsRW4tVW4ubGVuZ3RoKStVbn1mdW5jdGlvbiBvZShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIiAiLEVuLVVuLmxlbmd0aCkrVW59ZnVuY3Rpb24gZ2UobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4g''@;'; put 'put ''VW4ubGVuZ3RoPj1Fbj9VbjpVbitHKCIgIixFbi1Vbi5sZW5ndGgpfVIudmVyc2lvbj0iMS4yMDIxMDcyNi4xIjt2YXIgUGU9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gTmUobG4sRW4pe3JldHVybiBsbj5QZXx8bG48LVBlP2Z1bmN0aW9uIHBlKGxuLEVuKXt2YXIgVW49IiIrTWF0aC5yb3Vu''@;'; put 'put ''ZChsbik7cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46RygiMCIsRW4tVW4ubGVuZ3RoKStVbn0obG4sRW4pOmZ1bmN0aW9uIHllKGxuLEVuKXt2YXIgVW49IiIrbG47cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46RygiMCIsRW4tVW4ubGVuZ3RoKStVbn0oTWF0aC5yb3VuZChsbiksRW4pfWZ1bmN0''@;'; put 'put ''aW9uIFllKGxuLEVuKXtyZXR1cm4gbG4ubGVuZ3RoPj03KyhFbj1Fbnx8MCkmJjEwMz09KDMyfGxuLmNoYXJDb2RlQXQoRW4pKSYmMTAxPT0oMzJ8bG4uY2hhckNvZGVBdChFbisxKSkmJjExMD09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMikpJiYxMDE9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzMp''@;'; put 'put ''KSYmMTE0PT0oMzJ8bG4uY2hhckNvZGVBdChFbis0KSkmJjk3PT0oMzJ8bG4uY2hhckNvZGVBdChFbis1KSkmJjEwOD09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNikpfWZ1bmN0aW9uIGV0KGxuKXtmb3IodmFyIEVuPVtdLFVuPU9iamVjdC5rZXlzKGxuKSx4aT0wO3hpIT09VW4ubGVuZ3RoOysr''@;'; put 'put ''eGkpRW5bbG5bVW5beGldXV09VW5beGldO3JldHVybiBFbn12YXIgY3Q9W1siU3VuIiwiU3VuZGF5Il0sWyJNb24iLCJNb25kYXkiXSxbIlR1ZSIsIlR1ZXNkYXkiXSxbIldlZCIsIldlZG5lc2RheSJdLFsiVGh1IiwiVGh1cnNkYXkiXSxbIkZyaSIsIkZyaWRheSJdLFsiU2F0IiwiU2F0dXJk''@;'; put 'put ''YXkiXV0sRXQ9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXByIiwiQXByaWwiXSxbIk0iLCJNYXkiLCJNYXkiXSxbIkoiLCJKdW4iLCJKdW5lIl0sWyJKIiwiSnVsIiwiSnVseSJdLFsiQSIsIkF1ZyIsIkF1''@;'; put 'put ''Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRlYyIsIkRlY2VtYmVyIl1dO2Z1bmN0aW9uIGF0KGxuKXtsblswXT0iR2VuZXJhbCIsbG5bMV09IjAiLGxuWzJdPSIwLjAwIixsblszXT0iIywj''@;'; put 'put ''IzAiLGxuWzRdPSIjLCMjMC4wMCIsbG5bOV09IjAlIixsblsxMF09IjAuMDAlIixsblsxMV09IjAuMDBFKzAwIixsblsxMl09IiMgPy8/IixsblsxM109IiMgPz8vPz8iLGxuWzE0XT0ibS9kL3l5IixsblsxNV09ImQtbW1tLXl5IixsblsxNl09ImQtbW1tIixsblsxN109Im1tbS15eSIsbG5b''@;'; put 'put ''MThdPSJoOm1tIEFNL1BNIixsblsxOV09Img6bW06c3MgQU0vUE0iLGxuWzIwXT0iaDptbSIsbG5bMjFdPSJoOm1tOnNzIixsblsyMl09Im0vZC95eSBoOm1tIixsblszN109IiMsIyMwIDsoIywjIzApIixsblszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGxuWzM5XT0iIywjIzAuMDA7KCMs''@;'; put 'put ''IyMwLjAwKSIsbG5bNDBdPSIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLGxuWzQ1XT0ibW06c3MiLGxuWzQ2XT0iW2hdOm1tOnNzIixsbls0N109Im1tc3MuMCIsbG5bNDhdPSIjIzAuMEUrMCIsbG5bNDldPSJAIixsbls1Nl09JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2''@;'; put 'put ''NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJyxGbihsbil9dmFyIGJ0PXt9O2F0KGJ0KTt2YXIganQ9W10sa3Q9MDtmb3Ioa3Q9NTtrdDw9ODsrK2t0KWp0W2t0XT0zMitrdDtmb3Ioa3Q9MjM7a3Q8PTI2Oysra3QpanRba3RdPTA7Zm9yKGt0PTI3O2t0PD0zMTsrK2t0KWp0W2t0XT0xNDtmb3Io''@;'; put 'put ''a3Q9NTA7a3Q8PTU4Oysra3QpanRba3RdPTE0O2ZvcihrdD01OTtrdDw9NjI7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KWp0W2t0XT1rdC01ODtmb3Ioa3Q9NzI7a3Q8PTc1Oysra3QpanRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClqdFtrdF09a3Qt''@;'; put 'put ''NTc7Zm9yKGt0PTc2O2t0PD03ODsrK2t0KWp0W2t0XT1rdC01Njtmb3Ioa3Q9Nzk7a3Q8PTgxOysra3QpanRba3RdPWt0LTM0O3ZhciBPdD1bXTtmdW5jdGlvbiBLdChsbixFbixVbil7Zm9yKHZhciB4aT1sbjwwPy0xOjEsb3I9bG4qeGksT2k9MCxTcj0xLFBpPTAsWmE9MSxIaT0wLG1hPTAs''@;'; put 'put ''RGk9TWF0aC5mbG9vcihvcik7SGk8RW4mJihQaT0oRGk9TWF0aC5mbG9vcihvcikpKlNyK09pLG1hPURpKkhpK1phLCEob3ItRGk8NWUtOCkpOylvcj0xLyhvci1EaSksT2k9U3IsU3I9UGksWmE9SGksSGk9bWE7aWYobWE+RW4mJihIaT5Fbj8obWE9WmEsUGk9T2kpOihtYT1IaSxQaT1Tcikp''@;'; put 'put ''LCFVbilyZXR1cm5bMCx4aSpQaSxtYV07dmFyIGNzPU1hdGguZmxvb3IoeGkqUGkvbWEpO3JldHVybltjcyx4aSpQaS1jcyptYSxtYV19ZnVuY3Rpb24gVG4obG4sRW4sVW4pe2lmKGxuPjI5NTg0NjV8fGxuPDApcmV0dXJuIG51bGw7dmFyIHhpPTB8bG4sb3I9TWF0aC5mbG9vcig4NjQwMCoo''@;'; put 'put ''bG4teGkpKSxPaT0wLFNyPVtdLFBpPXtEOnhpLFQ6b3IsdTo4NjQwMCoobG4teGkpLW9yLHk6MCxtOjAsZDowLEg6MCxNOjAsUzowLHE6MH07aWYoTWF0aC5hYnMoUGkudSk8MWUtNiYmKFBpLnU9MCksRW4mJkVuLmRhdGUxOTA0JiYoeGkrPTE0NjIpLFBpLnU+Ljk5OTkmJihQaS51PTAsODY0''@;'; put 'put ''MDA9PSsrb3ImJihQaS5UPW9yPTAsKyt4aSwrK1BpLkQpKSw2MD09PXhpKVNyPVVuP1sxMzE3LDEwLDI5XTpbMTkwMCwyLDI5XSxPaT0zO2Vsc2UgaWYoMD09PXhpKVNyPVVuP1sxMzE3LDgsMjldOlsxOTAwLDEsMF0sT2k9NjtlbHNle3hpPjYwJiYtLXhpO3ZhciBaYT1uZXcgRGF0ZSgxOTAw''@;'; put 'put ''LDAsMSk7WmEuc2V0RGF0ZShaYS5nZXREYXRlKCkreGktMSksU3I9W1phLmdldEZ1bGxZZWFyKCksWmEuZ2V0TW9udGgoKSsxLFphLmdldERhdGUoKV0sT2k9WmEuZ2V0RGF5KCkseGk8NjAmJihPaT0oT2krNiklNyksVW4mJihPaT1mdW5jdGlvbiBzbyhsbixFbil7RW5bMF0tPTU4MTt2YXIg''@;'; put 'put ''VW49bG4uZ2V0RGF5KCk7cmV0dXJuIGxuPDYwJiYoVW49KFVuKzYpJTcpLFVufShaYSxTcikpfXJldHVybiBQaS55PVNyWzBdLFBpLm09U3JbMV0sUGkuZD1TclsyXSxQaS5TPW9yJTYwLG9yPU1hdGguZmxvb3Iob3IvNjApLFBpLk09b3IlNjAsb3I9TWF0aC5mbG9vcihvci82MCksUGkuSD1v''@;'; put 'put ''cixQaS5xPU9pLFBpfU90WzVdPU90WzYzXT0nIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsT3RbNl09T3RbNjRdPSciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLE90WzddPU90WzY1XT0nIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsT3RbOF09T3RbNjZdPSciJCIj''@;'; put 'put ''LCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLE90WzQxXT0nXygqICMsIyMwXyk7XygqIFxcKCMsIyMwXFwpO18oKiAiLSJfKTtfKEBfKScsT3RbNDJdPSdfKCIkIiogIywjIzBfKTtfKCIkIiogXFwoIywjIzBcXCk7XygiJCIqICItIl8pO18oQF8pJyxPdFs0M109J18oKiAjLCMj''@;'; put 'put ''MC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsT3RbNDRdPSdfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogXFwoIywjIzAuMDBcXCk7XygiJCIqICItIj8/Xyk7XyhAXyknLFIucGFyc2VfZGF0ZV9jb2RlPVRuO3ZhciBycj1uZXcgRGF0ZSgxODk5LDExLDMxLDAs''@;'; put 'put ''MCwwKSxTbj1yci5nZXRUaW1lKCksbHI9bmV3IERhdGUoMTkwMCwyLDEsMCwwLDApO2Z1bmN0aW9uIFhuKGxuLEVuKXt2YXIgVW49bG4uZ2V0VGltZSgpO3JldHVybiBFbj9Vbi09MTI2MjMwNGU1OmxuPj1sciYmKFVuKz04NjRlNSksKFVuLShTbis2ZTQqKGxuLmdldFRpbWV6b25lT2Zmc2V0''@;'; put 'put ''KCktcnIuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgQm49IiIsZnI9eyJlbi11cyI6e3k6InkiLGQ6ImQiLCIsIjoiLCIsIi4iOiIuIixkYXRlOiJfLyJ9LCJkZS1kZSI6e3k6ImoiLGQ6InQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLiJ9LCJpdC1pdCI6e3k6InkiLGQ6ImQi''@;'; put 'put ''LCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLyJ9fSxicj1mcltCbi50b0xvd2VyQ2FzZSgpXXx8ZnJbImVuLXVzIl0sZXI9ZXQoYnIpLE1pPSIkIixGaT0iIixMaT0iLCIsa3I9Ii4iLFZuPSIvIjtmdW5jdGlvbiBGbihsbil7c3dpdGNoKChCbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2Uiemgt''@;'; put 'put ''dHciOmxuWzI3XT0iWyQtNDA0XWUvbS9kIixsblsyOF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzI5XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzBdPSdtIi8iZCIvInl5JyxsblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQi''@;'; put 'put ''XHU2NWU1IicsbG5bMzJdPSdoaCJcdTY2NDIibW0iXHU1MjA2IicsbG5bMzNdPSdoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsbG5bMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1''@;'; put 'put ''MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzZdPSJbJC00MDRdZS9tL2QiLGxuWzUwXT0iWyQtNDA0XWUvbS9kIixsbls1MV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2''@;'; put 'put ''NDIibW0iXHU1MjA2IicsbG5bNTNdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bNTRdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2''@;'; put 'put ''NjQyIm1tIlx1NTIwNiInLGxuWzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU3XT0iWyQtNDA0XWUvbS9kIixsbls1OF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiemgtY24i''@;'; put 'put ''OmxuWzI3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsblsyOF09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bMjldPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSItImQiLSJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naCJcdTY1ZjYi''@;'; put 'put ''bW0iXHU1MjA2IicsbG5bMzNdPSdoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLGxuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3''@;'; put 'put ''OWQyIicsbG5bMzZdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzUwXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1MV09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NF09J20i''@;'; put 'put ''XHU2NzA4ImQiXHU2NWU1IicsbG5bNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLGxuWzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bNTddPSd5eXl5Ilx1NWU3NCJtIlx1Njcw''@;'; put 'put ''OCInLGxuWzU4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImphLWpwIjpsblsyN109J1skLTQxMV1nZSIuIm0iLiJkJyxsblsyOF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzI5XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2''@;'; put 'put ''NWU1IicsbG5bMzBdPSdtIi8iZCIvInl5JyxsblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzJdPSdoIlx1NjY0MiJtbSJcdTUyMDYiJyxsblszM109J2giXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4Iics''@;'; put 'put ''bG5bMzVdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzM2XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzUwXT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzUxXT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzUz''@;'; put 'put ''XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1Nl09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTddPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bNThdPSdb''@;'; put 'put ''JC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImtvLWtyIjpsblsyN109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzI4XT0ibW0tZGQiLGxuWzI5XT0ibW0tZGQiLGxuWzMwXT0ibW0tZGQteXkiLGxuWzMxXT0neXl5eSJcdWIx''@;'; put 'put ''NDQiIG1tIlx1YzZkNCIgZGQiXHVjNzdjIicsbG5bMzJdPSdoIlx1YzJkYyIgbW0iXHViZDg0IicsbG5bMzNdPSdoIlx1YzJkYyIgbW0iXHViZDg0IiBzcyJcdWNkMDgiJyxsblszNF09Inl5eXktbW0tZGQiLGxuWzM1XT0ieXl5eS1tbS1kZCIsbG5bMzZdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2''@;'; put 'put ''NzA4IiBkZCJcdTY1ZTUiJyxsbls1MF09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzUxXT0ibW0tZGQiLGxuWzUyXT0ieXl5eS1tbS1kZCIsbG5bNTNdPSJ5eXl5LW1tLWRkIixsbls1NF09Im1tLWRkIixsbls1NV09Inl5eXktbW0tZGQiLGxuWzU2XT0ieXl5eS1t''@;'; put 'put ''bS1kZCIsbG5bNTddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsbls1OF09Im1tLWRkIjticmVhaztjYXNlInRoLXRoIjpsbls1OV09JyJ0IjAnLGxuWzYwXT0nInQiMC4wMCcsbG5bNjFdPScidCIjLCMjMCcsbG5bNjJdPScidCIjLCMjMC4wMCcsbG5bNjddPSJ0MCUi''@;'; put 'put ''LGxuWzY4XT0idDAuMDAlIixsbls2OV09InQjID8vPyIsbG5bNzBdPSJ0IyA/Py8/PyIsbG5bNzFdPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWInLGxuWzcyXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxsbls3M109J1x1''@;'; put 'put ''MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCcsbG5bNzRdPSdcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGxuWzc1XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5Jyxsbls3Nl09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsbG5bNzddPSdcdTBlMjciLyJc''@;'; put 'put ''dTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWIgXHUwZTBhIjoiXHUwZTE5XHUwZTE5Jyxsbls3OF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsbG5bNzldPSdbXHUwZTBhXVx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsbG5bODBdPSdcdTBlMTlcdTBlMTkiOiJcdTBl''@;'; put 'put ''MTdcdTBlMTcuMCcsbG5bODFdPSJkL20vYmIifX1SLl9nZW5lcmFsX2ludD1mdW5jdGlvbiBaaShsbil7cmV0dXJuIGxuLnRvU3RyaW5nKDEwKX07dmFyIHlpPWZ1bmN0aW9uKCl7dmFyIEVuPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKSQvO2Z1bmN0aW9uIFVuKEhpKXtyZXR1cm4tMT09SGku''@;'; put 'put ''aW5kZXhPZigiLiIpP0hpOkhpLnJlcGxhY2UoRW4sIiQxIil9dmFyIHhpPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKVtFZV0vLG9yPS8oRVsrLV0pKFxkKSQvO3JldHVybiBmdW5jdGlvbihtYSl7dmFyIERpPWZ1bmN0aW9uIFphKEhpKXt2YXIgRGksbWE9TWF0aC5mbG9vcihNYXRoLmxvZyhN''@;'; put 'put ''YXRoLmFicyhIaSkpKk1hdGguTE9HMTBFKTtyZXR1cm4gRGk9bWE+PS00JiZtYTw9LTE/SGkudG9QcmVjaXNpb24oMTArbWEpOk1hdGguYWJzKG1hKTw9OT9mdW5jdGlvbiBTcihIaSl7dmFyIG1hPUhpPDA/MTI6MTEsRGk9VW4oSGkudG9GaXhlZCgxMikpO3JldHVybiBEaS5sZW5ndGg8PW1h''@;'; put 'put ''fHwoRGk9SGkudG9QcmVjaXNpb24oMTApKS5sZW5ndGg8PW1hP0RpOkhpLnRvRXhwb25lbnRpYWwoNSl9KEhpKToxMD09PW1hP0hpLnRvRml4ZWQoMTApLnN1YnN0cigwLDEyKTpmdW5jdGlvbiBQaShIaSl7dmFyIG1hPVVuKEhpLnRvRml4ZWQoMTEpKTtyZXR1cm4gbWEubGVuZ3RoPihIaTww''@;'; put 'put ''PzEyOjExKXx8IjAiPT09bWF8fCItMCI9PT1tYT9IaS50b1ByZWNpc2lvbig2KTptYX0oSGkpLFVuKGZ1bmN0aW9uIE9pKEhpKXtyZXR1cm4tMT09SGkuaW5kZXhPZigiRSIpP0hpOkhpLnJlcGxhY2UoeGksIiQxRSIpLnJlcGxhY2Uob3IsIiQxMCQyIil9KERpLnRvVXBwZXJDYXNlKCkpKX0o''@;'; put 'put ''bWEpO3JldHVybiIsIj09PUxpJiYiLiI9PT1rcj9EaTpEaS5yZXBsYWNlKC9bLC5dL2csZnVuY3Rpb24oY3Mpe3JldHVybiIsIj09Y3M/TGk6a3J9KX19KCk7ZnVuY3Rpb24gX2EobG4sRW4pe3N3aXRjaCh0eXBlb2YgbG4pe2Nhc2Uic3RyaW5nIjpyZXR1cm4gbG47Y2FzZSJib29sZWFuIjpy''@;'; put 'put ''ZXR1cm4gbG4/IlRSVUUiOiJGQUxTRSI7Y2FzZSJudW1iZXIiOnJldHVybigwfGxuKT09PWxuP2xuLnRvU3RyaW5nKDEwKTp5aShsbik7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1sbilyZXR1cm4iIjtpZihsbiBpbnN0YW5jZW9mIERhdGUpcmV0dXJu''@;'; put 'put ''IHl1KDE0LFhuKGxuLEVuJiZFbi5kYXRlMTkwNCksRW4pfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6ICIrbG4pfVIuX2dlbmVyYWxfbnVtPXlpLFIuX2dlbmVyYWw9X2E7dmFyIGlhPSJcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRc''@;'; put 'put ''dTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTkiLnNwbGl0KCIiKTtmdW5jdGlvbiBMbyhsbixFbixVbix4aSl7dmFyIFphLG9yPSIiLE9pPTAsU3I9MCxQaT1Vbi55LEhpPTA7c3dpdGNoKGxuKXtjYXNlIDk4OlBpPVVuLnkrNTQzO2Nhc2UgMTIxOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2Ug''@;'; put 'put ''MTpjYXNlIDI6WmE9UGklMTAwLEhpPTI7YnJlYWs7ZGVmYXVsdDpaYT1QaSUxZTQsSGk9NH1icmVhaztjYXNlIDEwOTpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVVuLm0sSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gRXRbVW4ubS0xXVsxXTtjYXNlIDU6cmV0''@;'; put 'put ''dXJuIEV0W1VuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gRXRbVW4ubS0xXVsyXX1icmVhaztjYXNlIDEwMDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVVuLmQsSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gY3RbVW4ucV1bMF07ZGVmYXVsdDpyZXR1cm4gY3Rb''@;'; put 'put ''VW4ucV1bMV19YnJlYWs7Y2FzZSAxMDQ6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT0xKyhVbi5IKzExKSUxMixIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSA3Mjpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNl''@;'; put 'put ''IDE6Y2FzZSAyOlphPVVuLkgsSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2UgNzc6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5NLEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBt''@;'; put 'put ''aW51dGUgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2UgMTE1OmlmKCJzIiE9RW4mJiJzcyIhPUVuJiYiLjAiIT1FbiYmIi4wMCIhPUVuJiYiLjAwMCIhPUVuKXRocm93ImJhZCBzZWNvbmQgZm9ybWF0OiAiK0VuO3JldHVybiAwIT09VW4udXx8InMiIT1FbiYmInNzIiE9RW4/KFNyPXhpPj0yPzM9''@;'; put 'put ''PT14aT8xZTM6MTAwOjE9PT14aT8xMDoxLChPaT1NYXRoLnJvdW5kKFNyKihVbi5TK1VuLnUpKSk+PTYwKlNyJiYoT2k9MCksInMiPT09RW4/MD09PU9pPyIwIjoiIitPaS9Tcjoob3I9UShPaSwyK3hpKSwic3MiPT09RW4/b3Iuc3Vic3RyKDAsMik6Ii4iK29yLnN1YnN0cigyLEVuLmxlbmd0''@;'; put 'put ''aC0xKSkpOlEoVW4uUyxFbi5sZW5ndGgpO2Nhc2UgOTA6c3dpdGNoKEVuKXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjpaYT0yNCpVbi5EK1VuLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Y2FzZSJbXHUwZTE5XSI6Y2FzZSJb''@;'; put 'put ''XHUwZTE5XHUwZTE5XSI6WmE9NjAqKDI0KlVuLkQrVW4uSCkrVW4uTTticmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjpaYT02MCooNjAqKDI0KlVuLkQrVW4uSCkrVW4uTSkrTWF0aC5yb3VuZChVbi5TK1VuLnUpO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAiK0VufUhpPTM9PT1Fbi5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOlphPVBpLEhpPTE7YnJlYWs7Y2FzZSAzNjIzOlphPVVuLmQsSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2Fz''@;'; put 'put ''ZSAyOlphPVVuLm0sSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gRXRbVW4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIEV0W1VuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gRXRbVW4ubS0xXVsyXX1icmVhaztjYXNlIDM2MTE6c3dpdGNoKFBpPVVuLnkrNTQzLEVuLmxlbmd0aCl7Y2Fz''@;'; put 'put ''ZSAxOmNhc2UgMjpaYT1QaSUxMDAsSGk9MjticmVhaztkZWZhdWx0OlphPVBpJTFlNCxIaT00fWJyZWFrO2Nhc2UgMzU5NDpaYT1Vbi5ILEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDk6WmE9VW4uTSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA3OlphPVVuLlMsSGk9RW4ubGVuZ3Ro''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbG4udG9TdHJpbmcoMTYpfXZhciBtYT1IaT4wP1EoWmEsSGkpOiIiO3JldHVybig5MD09bG4/RW4uY2hhckNvZGVBdCgxKTwzNTg0OmxuPDM1ODQpP21hOm1hLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oRGkpe3JldHVybiBpYVsrRGldfSl9ZnVuY3Rp''@;'; put 'put ''b24gT2EobG4pe2lmKGxuLmxlbmd0aDw9MylyZXR1cm4gbG47Zm9yKHZhciBVbj1sbi5sZW5ndGglMyx4aT1sbi5zdWJzdHIoMCxVbik7VW4hPWxuLmxlbmd0aDtVbis9Myl4aSs9KHhpLmxlbmd0aD4wPyIsIjoiIikrbG4uc3Vic3RyKFVuLDMpO3JldHVybiB4aX12YXIgaG89ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgRW49LyUvZztmdW5jdGlvbiBvcih3bixadCl7dmFyIG5uLHhuPXduLmluZGV4T2YoIkUiKS13bi5pbmRleE9mKCIuIiktMTtpZih3bi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09WnQpcmV0dXJuIjAuMEUrMCI7aWYoWnQ8MClyZXR1cm4iLSIrb3Iod24sLVp0KTt2YXIgem49''@;'; put 'put ''d24uaW5kZXhPZigiLiIpOy0xPT09em4mJih6bj13bi5pbmRleE9mKCJFIikpO3ZhciB5cj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSklem47aWYoeXI8MCYmKHlyKz16biksLTE9PT0obm49KFp0L01hdGgucG93KDEwLHlyKSkudG9QcmVjaXNpb24oeG4rMSsoem4reXIp''@;'; put 'put ''JXpuKSkuaW5kZXhPZigiZSIpKXt2YXIgV3I9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpO2ZvcigtMT09PW5uLmluZGV4T2YoIi4iKT9ubj1ubi5jaGFyQXQoMCkrIi4iK25uLnN1YnN0cigxKSsiRSsiKyhXci1ubi5sZW5ndGgreXIpOm5uKz0iRSsiKyhXci15cik7IjAu''@;'; put 'put ''Ij09PW5uLnN1YnN0cigwLDIpOylubj0obm49bm4uY2hhckF0KDApK25uLnN1YnN0cigyLHpuKSsiLiIrbm4uc3Vic3RyKDIrem4pKS5yZXBsYWNlKC9eMCsoWzEtOV0pLywiJDEiKS5yZXBsYWNlKC9eMCtcLi8sIjAuIik7bm49bm4ucmVwbGFjZSgvXCstLywiLSIpfW5uPW5uLnJlcGxhY2Uo''@;'; put 'put ''L14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24ob2ksbmksWGksVWkpe3JldHVybiBuaStYaStVaS5zdWJzdHIoMCwoem4reXIpJXpuKSsiLiIrVWkuc3Vic3RyKHlyKSsiRSJ9KX1lbHNlIG5uPVp0LnRvRXhwb25lbnRpYWwoeG4pO3JldHVybiB3bi5tYXRjaCgvRVwrMDAkLykm''@;'; put 'put ''Jm5uLm1hdGNoKC9lWystXVxkJC8pJiYobm49bm4uc3Vic3RyKDAsbm4ubGVuZ3RoLTEpKyIwIitubi5jaGFyQXQobm4ubGVuZ3RoLTEpKSx3bi5tYXRjaCgvRVwtLykmJm5uLm1hdGNoKC9lXCsvKSYmKG5uPW5uLnJlcGxhY2UoL2VcKy8sImUiKSksbm4ucmVwbGFjZSgiZSIsIkUiKX12YXIg''@;'; put 'put ''T2k9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLFphPS9eIyowKlwuKFswI10rKS8sSGk9L1wpLipbMCNdLyxtYT0vXCgjIyNcKSAjIyNcXD8tIyMjIy87ZnVuY3Rpb24gRGkod24pe2Zvcih2YXIgbm4sWnQ9IiIseG49MDt4biE9d24ubGVuZ3RoOysreG4pc3dpdGNoKG5uPXduLmNoYXJDb2Rl''@;'; put 'put ''QXQoeG4pKXtjYXNlIDM1OmJyZWFrO2Nhc2UgNjM6WnQrPSIgIjticmVhaztjYXNlIDQ4Olp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDpadCs9U3RyaW5nLmZyb21DaGFyQ29kZShubil9cmV0dXJuIFp0fWZ1bmN0aW9uIGNzKHduLFp0KXt2YXIgbm49TWF0aC5wb3coMTAsWnQpO3JldHVybiIiK01h''@;'; put 'put ''dGgucm91bmQod24qbm4pL25ufWZ1bmN0aW9uIFlvKHduLFp0KXtpZihadD4xMSlyZXR1cm4gWW8od24sMTEpKk1hdGgucG93KDEwLFp0LTExKTt2YXIgbm49d24tTWF0aC5mbG9vcih3bikseG49TWF0aC5wb3coMTAsWnQpO3JldHVybiBadDwoIiIrTWF0aC5yb3VuZChubip4bikpLmxlbmd0''@;'; put 'put ''aD8wOk1hdGgucm91bmQobm4qeG4pfWZ1bmN0aW9uIEVsKHduLFp0LG5uKXtpZig0MD09PXduLmNoYXJDb2RlQXQoMCkmJiFadC5tYXRjaChIaSkpe3ZhciB4bj1adC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gbm4+PTA/RWwo''@;'; put 'put ''Im4iLHhuLG5uKToiKCIrRWwoIm4iLHhuLC1ubikrIikifWlmKDQ0PT09WnQuY2hhckNvZGVBdChadC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHhpKHduLFp0LG5uKXtmb3IodmFyIHhuPVp0Lmxlbmd0aC0xOzQ0PT09WnQuY2hhckNvZGVBdCh4bi0xKTspLS14bjtyZXR1cm4gaG8od24s''@;'; put 'put ''WnQuc3Vic3RyKDAseG4pLG5uL01hdGgucG93KDEwLDMqKFp0Lmxlbmd0aC14bikpKX0od24sWnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBVbih3bixadCxubil7dmFyIHhuPVp0LnJlcGxhY2UoRW4sIiIpLHpuPVp0Lmxlbmd0aC14bi5sZW5ndGg7cmV0''@;'; put 'put ''dXJuIGhvKHduLHhuLG5uKk1hdGgucG93KDEwLDIqem4pKStHKCIlIix6bil9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIkUiKSlyZXR1cm4gb3IoWnQsbm4pO2lmKDM2PT09WnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIrRWwod24sWnQuc3Vic3RyKCIgIj09WnQuY2hhckF0KDEp''@;'; put 'put ''PzI6MSksbm4pO3ZhciB6bix5cixXcixvaSxuaT1NYXRoLmFicyhubiksWGk9bm48MD8iLSI6IiI7aWYoWnQubWF0Y2goL14wMCskLykpcmV0dXJuIFhpK05lKG5pLFp0Lmxlbmd0aCk7aWYoWnQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0oem49TmUobm4sMCkpJiYoem49IiIpLHpu''@;'; put 'put ''Lmxlbmd0aD5adC5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKE9pKSlyZXR1cm4gZnVuY3Rpb24gU3Iod24sWnQsbm4pe3ZhciB4bj1wYXJzZUludCh3bls0XSwxMCksem49TWF0aC5yb3VuZChadCp4bikseXI9TWF0aC5m''@;'; put 'put ''bG9vcih6bi94biksV3I9em4teXIqeG4sb2k9eG47cmV0dXJuIG5uKygwPT09eXI/IiI6IiIreXIpKyIgIisoMD09PVdyP0coIiAiLHduWzFdLmxlbmd0aCsxK3duWzRdLmxlbmd0aCk6b2UoV3Isd25bMV0ubGVuZ3RoKSt3blsyXSsiLyIrd25bM10rUShvaSx3bls0XS5sZW5ndGgpKX0oeXIs''@;'; put 'put ''bmksWGkpO2lmKFp0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gWGkrTmUobmksWnQubGVuZ3RoLVp0LmluZGV4T2YoIjAiKSk7aWYoeXI9WnQubWF0Y2goWmEpKXJldHVybiB6bj1jcyhubix5clsxXS5sZW5ndGgpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK0RpKHlyWzFdKSkucmVwbGFj''@;'; put 'put ''ZSgvXC4kLywiLiIrRGkoeXJbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVG8seHMpe3JldHVybiIuIit4cytHKCIwIixEaSh5clsxXSkubGVuZ3RoLXhzLmxlbmd0aCl9KSwtMSE9PVp0LmluZGV4T2YoIjAuIik/em46em4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihadD1adC5y''@;'; put 'put ''ZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLHlyPVp0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gWGkrY3MobmkseXJbMl0ubGVuZ3RoKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyx5clsxXS5s''@;'; put 'put ''ZW5ndGg/IjAuIjoiLiIpO2lmKHlyPVp0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBYaStPYShOZShuaSwwKSk7aWYoeXI9WnQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIG5uPDA/Ii0iK0VsKHduLFp0LC1ubik6T2EoIiIrKE1hdGguZmxvb3Iobm4pK2Z1''@;'; put 'put ''bmN0aW9uIHhsKHduLFp0KXtyZXR1cm4gWnQ8KCIiK01hdGgucm91bmQoKHduLU1hdGguZmxvb3Iod24pKSpNYXRoLnBvdygxMCxadCkpKS5sZW5ndGg/MTowfShubix5clsxXS5sZW5ndGgpKSkrIi4iK1EoWW8obm4seXJbMV0ubGVuZ3RoKSx5clsxXS5sZW5ndGgpO2lmKHlyPVp0Lm1hdGNo''@;'; put 'put ''KC9eIywjKiwjMC8pKXJldHVybiBFbCh3bixadC5yZXBsYWNlKC9eIywjKiwvLCIiKSxubik7aWYoeXI9WnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIHpuPWsoRWwod24sWnQucmVwbGFjZSgvW1xcLV0vZywiIiksbm4pKSxXcj0wLGsoayhadC5yZXBsYWNlKC9c''@;'; put 'put ''XC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFRvKXtyZXR1cm4gV3I8em4ubGVuZ3RoP3puLmNoYXJBdChXcisrKToiMCI9PT1Ubz8iMCI6IiJ9KSk7aWYoWnQubWF0Y2gobWEpKXJldHVybiIoIisoem49RWwod24sIiMjIyMjIyMjIyMiLG5uKSkuc3Vic3RyKDAsMykrIikgIit6''@;'; put 'put ''bi5zdWJzdHIoMywzKSsiLSIrem4uc3Vic3RyKDYpO3ZhciBVaT0iIjtpZih5cj1adC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKHlyWzRdLmxlbmd0aCw3KSxvaT1LdChuaSxNYXRoLnBvdygxMCxXciktMSwhMSksem49IiIrWGksIiAi''@;'; put 'put ''PT0oVWk9aG8oIm4iLHlyWzFdLG9pWzFdKSkuY2hhckF0KFVpLmxlbmd0aC0xKSYmKFVpPVVpLnN1YnN0cigwLFVpLmxlbmd0aC0xKSsiMCIpLHpuKz1VaSt5clsyXSsiLyIreXJbM10sKFVpPWdlKG9pWzJdLFdyKSkubGVuZ3RoPHlyWzRdLmxlbmd0aCYmKFVpPURpKHlyWzRdLnN1YnN0cih5''@;'; put 'put ''cls0XS5sZW5ndGgtVWkubGVuZ3RoKSkrVWkpLHpuKz1VaTtpZih5cj1adC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oTWF0aC5tYXgoeXJbMV0ubGVuZ3RoLHlyWzRdLmxlbmd0aCksNyksWGkrKChvaT1LdChuaSxNYXRoLnBvdygx''@;'; put 'put ''MCxXciktMSwhMCkpWzBdfHwob2lbMV0/IiI6IjAiKSkrIiAiKyhvaVsxXT9vZShvaVsxXSxXcikreXJbMl0rIi8iK3lyWzNdK2dlKG9pWzJdLFdyKTpHKCIgIiwyKldyKzEreXJbMl0ubGVuZ3RoK3lyWzNdLmxlbmd0aCkpO2lmKHlyPVp0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiB6bj1O''@;'; put 'put ''ZShubiwwKSxadC5sZW5ndGg8PXpuLmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkrem47aWYoeXI9WnQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7em49IiIrbm4udG9GaXhlZChNYXRoLm1pbih5clsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8o''@;'; put 'put ''W14wXSkwKyQvLCIkMSIpLFdyPXpuLmluZGV4T2YoIi4iKTt2YXIgbm89WnQuaW5kZXhPZigiLiIpLVdyLGphPVp0Lmxlbmd0aC16bi5sZW5ndGgtbm87cmV0dXJuIERpKFp0LnN1YnN0cigwLG5vKSt6bitadC5zdWJzdHIoWnQubGVuZ3RoLWphKSl9aWYoeXI9WnQubWF0Y2goL14wMCwwMDBc''@;'; put 'put ''LihbIzBdKjApJC8pKXJldHVybiBXcj1Zbyhubix5clsxXS5sZW5ndGgpLG5uPDA/Ii0iK0VsKHduLFp0LC1ubik6T2EoZnVuY3Rpb24gX3Uod24pe3JldHVybiB3bjwyMTQ3NDgzNjQ3JiZ3bj4tMjE0NzQ4MzY0OD8iIisod24+PTA/MHx3bjp3bi0xfDApOiIiK01hdGguZmxvb3Iod24pfShu''@;'; put 'put ''bikpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oVG8pe3JldHVybiIwMCwiKyhUby5sZW5ndGg8Mz9RKDAsMy1Uby5sZW5ndGgpOiIiKStUb30pKyIuIitRKFdyLHlyWzFdLmxlbmd0aCk7c3dpdGNoKFp0KXtjYXNlIiMjIywjIzAuMDAiOnJl''@;'; put 'put ''dHVybiBFbCh3biwiIywjIzAuMDAiLG5uKTtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjp2YXIgdmE9T2EoTmUobmksMCkpO3JldHVybiIwIiE9PXZhP1hpK3ZhOiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJuIEVsKHduLCIjIyMsIyMwLjAwIixubikucmVwbGFjZSgv''@;'; put 'put ''XjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gRWwod24sIiMsIyMwLjAwIixubikucmVwbGFjZSgvXjBcLi8sIi4iKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitadCsifCIpfWZ1bmN0aW9uIGduKHduLFp0KXt2YXIgbm4seG49d24uaW5kZXhPZigiRSIp''@;'; put 'put ''LXduLmluZGV4T2YoIi4iKS0xO2lmKHduLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1adClyZXR1cm4iMC4wRSswIjtpZihadDwwKXJldHVybiItIitnbih3biwtWnQpO3ZhciB6bj13bi5pbmRleE9mKCIuIik7LTE9PT16biYmKHpuPXduLmluZGV4T2YoIkUiKSk7dmFyIHlyPU1hdGgu''@;'; put 'put ''Zmxvb3IoTWF0aC5sb2coWnQpKk1hdGguTE9HMTBFKSV6bjtpZih5cjwwJiYoeXIrPXpuKSwhKG5uPShadC9NYXRoLnBvdygxMCx5cikpLnRvUHJlY2lzaW9uKHhuKzErKHpuK3lyKSV6bikpLm1hdGNoKC9bRWVdLykpe3ZhciBXcj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEw''@;'; put 'put ''RSk7LTE9PT1ubi5pbmRleE9mKCIuIik/bm49bm4uY2hhckF0KDApKyIuIitubi5zdWJzdHIoMSkrIkUrIisoV3Itbm4ubGVuZ3RoK3lyKTpubis9IkUrIisoV3IteXIpLG5uPW5uLnJlcGxhY2UoL1wrLS8sIi0iKX1ubj1ubi5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1''@;'; put 'put ''bmN0aW9uKG9pLG5pLFhpLFVpKXtyZXR1cm4gbmkrWGkrVWkuc3Vic3RyKDAsKHpuK3lyKSV6bikrIi4iK1VpLnN1YnN0cih5cikrIkUifSl9ZWxzZSBubj1adC50b0V4cG9uZW50aWFsKHhuKTtyZXR1cm4gd24ubWF0Y2goL0VcKzAwJC8pJiZubi5tYXRjaCgvZVsrLV1cZCQvKSYmKG5uPW5u''@;'; put 'put ''LnN1YnN0cigwLG5uLmxlbmd0aC0xKSsiMCIrbm4uY2hhckF0KG5uLmxlbmd0aC0xKSksd24ubWF0Y2goL0VcLS8pJiZubi5tYXRjaCgvZVwrLykmJihubj1ubi5yZXBsYWNlKC9lXCsvLCJlIikpLG5uLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24ga24od24sWnQsbm4pe2lmKDQwPT09d24u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmIVp0Lm1hdGNoKEhpKSl7dmFyIHhuPVp0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBubj49MD9rbigibiIseG4sbm4pOiIoIitrbigibiIseG4sLW5uKSsiKSJ9aWYoNDQ9PT1adC5jaGFyQ29kZUF0''@;'; put 'put ''KFp0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gRmYod24sWnQsbm4pe2Zvcih2YXIgeG49WnQubGVuZ3RoLTE7NDQ9PT1adC5jaGFyQ29kZUF0KHhuLTEpOyktLXhuO3JldHVybiBobyh3bixadC5zdWJzdHIoMCx4biksbm4vTWF0aC5wb3coMTAsMyooWnQubGVuZ3RoLXhuKSkpfSh3bixa''@;'; put 'put ''dCxubik7aWYoLTEhPT1adC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIHlkKHduLFp0LG5uKXt2YXIgeG49WnQucmVwbGFjZShFbiwiIiksem49WnQubGVuZ3RoLXhuLmxlbmd0aDtyZXR1cm4gaG8od24seG4sbm4qTWF0aC5wb3coMTAsMip6bikpK0coIiUiLHpuKX0od24sWnQsbm4p''@;'; put 'put ''O2lmKC0xIT09WnQuaW5kZXhPZigiRSIpKXJldHVybiBnbihadCxubik7aWYoMzY9PT1adC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitrbih3bixadC5zdWJzdHIoIiAiPT1adC5jaGFyQXQoMSk/MjoxKSxubik7dmFyIHpuLHlyLFdyLG9pLG5pPU1hdGguYWJzKG5uKSxYaT1ubjwwPyItIjoi''@;'; put 'put ''IjtpZihadC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gWGkrUShuaSxadC5sZW5ndGgpO2lmKFp0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIHpuPSIiK25uLDA9PT1ubiYmKHpuPSIiKSx6bi5sZW5ndGg+WnQubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6''@;'; put 'put ''bjtpZih5cj1adC5tYXRjaChPaSkpcmV0dXJuIGZ1bmN0aW9uIFBpKHduLFp0LG5uKXtyZXR1cm4gbm4rKDA9PT1adD8iIjoiIitadCkrRygiICIsd25bMV0ubGVuZ3RoKzIrd25bNF0ubGVuZ3RoKX0oeXIsbmksWGkpO2lmKFp0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gWGkrUShuaSxadC5s''@;'; put 'put ''ZW5ndGgtWnQuaW5kZXhPZigiMCIpKTtpZih5cj1adC5tYXRjaChaYSkpcmV0dXJuIHpuPSh6bj0oIiIrbm4pLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK0RpKHlyWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrRGkoeXJbMV0pKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFRvLHhz''@;'; put 'put ''KXtyZXR1cm4iLiIreHMrRygiMCIsRGkoeXJbMV0pLmxlbmd0aC14cy5sZW5ndGgpfSksLTEhPT1adC5pbmRleE9mKCIwLiIpP3puOnpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWnQ9WnQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSx5cj1adC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0''@;'; put 'put ''dXJuIFhpKygiIituaSkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8seXJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZih5cj1adC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gWGkrT2EoIiIr''@;'; put 'put ''bmkpO2lmKHlyPVp0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitrbih3bixadCwtbm4pOk9hKCIiK25uKSsiLiIrRygiMCIseXJbMV0ubGVuZ3RoKTtpZih5cj1adC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4ga24od24sWnQucmVwbGFjZSgvXiMsIyosLywi''@;'; put 'put ''Iiksbm4pO2lmKHlyPVp0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiB6bj1rKGtuKHduLFp0LnJlcGxhY2UoL1tcXC1dL2csIiIpLG5uKSksV3I9MCxrKGsoWnQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihUbyl7cmV0dXJuIFdy''@;'; put 'put ''PHpuLmxlbmd0aD96bi5jaGFyQXQoV3IrKyk6IjAiPT09VG8/IjAiOiIifSkpO2lmKFp0Lm1hdGNoKG1hKSlyZXR1cm4iKCIrKHpuPWtuKHduLCIjIyMjIyMjIyMjIixubikpLnN1YnN0cigwLDMpKyIpICIrem4uc3Vic3RyKDMsMykrIi0iK3puLnN1YnN0cig2KTt2YXIgVWk9IiI7aWYoeXI9''@;'; put 'put ''WnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbih5cls0XS5sZW5ndGgsNyksb2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITEpLHpuPSIiK1hpLCIgIj09KFVpPWhvKCJuIix5clsxXSxvaVsxXSkpLmNoYXJBdChVaS5sZW5ndGgtMSkm''@;'; put 'put ''JihVaT1VaS5zdWJzdHIoMCxVaS5sZW5ndGgtMSkrIjAiKSx6bis9VWkreXJbMl0rIi8iK3lyWzNdLChVaT1nZShvaVsyXSxXcikpLmxlbmd0aDx5cls0XS5sZW5ndGgmJihVaT1EaSh5cls0XS5zdWJzdHIoeXJbNF0ubGVuZ3RoLVVpLmxlbmd0aCkpK1VpKSx6bis9VWk7aWYoeXI9WnQubWF0''@;'; put 'put ''Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKE1hdGgubWF4KHlyWzFdLmxlbmd0aCx5cls0XS5sZW5ndGgpLDcpLFhpKygob2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITApKVswXXx8KG9pWzFdPyIiOiIwIikpKyIgIisob2lbMV0/b2Uo''@;'; put 'put ''b2lbMV0sV3IpK3lyWzJdKyIvIit5clszXStnZShvaVsyXSxXcik6RygiICIsMipXcisxK3lyWzJdLmxlbmd0aCt5clszXS5sZW5ndGgpKTtpZih5cj1adC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gWnQubGVuZ3RoPD0oem49IiIrbm4pLmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5s''@;'; put 'put ''ZW5ndGgtem4ubGVuZ3RoKSkrem47aWYoeXI9WnQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXt6bj0iIitubi50b0ZpeGVkKE1hdGgubWluKHlyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksV3I9em4uaW5kZXhPZigiLiIpO3ZhciBubz1adC5pbmRleE9m''@;'; put 'put ''KCIuIiktV3IsamE9WnQubGVuZ3RoLXpuLmxlbmd0aC1ubztyZXR1cm4gRGkoWnQuc3Vic3RyKDAsbm8pK3puK1p0LnN1YnN0cihadC5sZW5ndGgtamEpKX1pZih5cj1adC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIG5uPDA/Ii0iK2tuKHduLFp0LC1ubik6T2EoIiIrbm4p''@;'; put 'put ''LnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oVG8pe3JldHVybiIwMCwiKyhUby5sZW5ndGg8Mz9RKDAsMy1Uby5sZW5ndGgpOiIiKStUb30pKyIuIitRKDAseXJbMV0ubGVuZ3RoKTt2YXIgdmE9T2EoIiIrbmkpO3N3aXRjaChadCl7Y2FzZSIj''@;'; put 'put ''IyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6cmV0dXJuIjAiIT09dmE/WGkrdmE6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PSh2YT1RKHZhLDIpKT9YaSt2YToiIjtkZWZhdWx0OmlmKFp0Lm1hdGNoKC9cLlswIz9dKiQvKSlyZXR1cm4ga24od24sWnQuc2xpY2UoMCxadC5s''@;'; put 'put ''YXN0SW5kZXhPZigiLiIpKSxubikrRGkoWnQuc2xpY2UoWnQubGFzdEluZGV4T2YoIi4iKSkpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1p0KyJ8Iil9cmV0dXJuIGZ1bmN0aW9uKFp0LG5uLHhuKXtyZXR1cm4iMCwwIj09bm4mJihubj0iIywjMDAiKSwoMHx4bik9''@;'; put 'put ''PT14bj9rbihadCxubix4bik6RWwoWnQsbm4seG4pfX0oKTtmdW5jdGlvbiBKYShsbil7Zm9yKHZhciBFbj1bXSxVbj0hMSx4aT0wLG9yPTA7eGk8bG4ubGVuZ3RoOysreGkpc3dpdGNoKGxuLmNoYXJDb2RlQXQoeGkpKXtjYXNlIDM0OlVuPSFVbjticmVhaztjYXNlIDk1OmNhc2UgNDI6Y2Fz''@;'; put 'put ''ZSA5MjorK3hpO2JyZWFrO2Nhc2UgNTk6RW5bRW4ubGVuZ3RoXT1sbi5zdWJzdHIob3IseGktb3IpLG9yPXhpKzF9aWYoRW5bRW4ubGVuZ3RoXT1sbi5zdWJzdHIob3IpLCEwPT09VW4pdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrbG4rInwgdW50ZXJtaW5hdGVkIHN0cmluZyAiKTtyZXR1''@;'; put 'put ''cm4gRW59Ui5fc3BsaXQ9SmE7dmFyIEJpPS9cW1tIaE1tU3NcdTBFMEFcdTBFMTlcdTBFMTddKlxdLztmdW5jdGlvbiBJcyhsbil7Zm9yKHZhciBFbj0wLFVuPSIiLHhpPSIiO0VuPGxuLmxlbmd0aDspc3dpdGNoKFVuPWxuLmNoYXJBdChFbikpe2Nhc2UiRyI6WWUobG4sRW4pJiYoRW4rPTYp''@;'; put 'put ''LEVuKys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09bG4uY2hhckNvZGVBdCgrK0VuKSYmRW48bG4ubGVuZ3RoOyk7KytFbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOkVuKz0yO2JyZWFrO2Nhc2UiQCI6KytFbjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09bG4uY2hhckF0KEVuKzEp''@;'; put 'put ''fHwiMiI9PT1sbi5jaGFyQXQoRW4rMSkpcmV0dXJuITA7Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpyZXR1cm4hMDtjYXNlIkEiOmNhc2UiYSI6Y2Fz''@;'; put 'put ''ZSJcdTRlMGEiOmlmKCJBL1AiPT09bG4uc3Vic3RyKEVuLDMpLnRvVXBwZXJDYXNlKCl8fCJBTS9QTSI9PT1sbi5zdWJzdHIoRW4sNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09bG4uc3Vic3RyKEVuLDUpLnRvVXBwZXJDYXNlKCkpcmV0dXJuITA7KytF''@;'; put 'put ''bjticmVhaztjYXNlIlsiOmZvcih4aT1VbjsiXSIhPT1sbi5jaGFyQXQoRW4rKykmJkVuPGxuLmxlbmd0aDspeGkrPWxuLmNoYXJBdChFbik7aWYoeGkubWF0Y2goQmkpKXJldHVybiEwO2JyZWFrO2Nhc2UiLiI6Y2FzZSIwIjpjYXNlIiMiOmZvcig7RW48bG4ubGVuZ3RoJiYoIjAjPy4sRSst''@;'; put 'put ''JSIuaW5kZXhPZihVbj1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT1VbiYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKTspO2JyZWFrO2Nhc2UiPyI6Zm9yKDtsbi5jaGFyQXQoKytFbik9PT1VbjspO2JyZWFrO2Nhc2UiKiI6KytFbiwo''@;'; put 'put ''IiAiPT1sbi5jaGFyQXQoRW4pfHwiKiI9PWxuLmNoYXJBdChFbikpJiYrK0VuO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjorK0VuO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7RW48bG4ubGVu''@;'; put 'put ''Z3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKytFbikpPi0xOyk7YnJlYWs7ZGVmYXVsdDorK0VufXJldHVybiExfWZ1bmN0aW9uIFBuKGxuLEVuLFVuLHhpKXtmb3IodmFyIEhpLG1hLERpLG9yPVtdLE9pPSIiLFNyPTAsUGk9IiIsWmE9InQiLGNzPSJIIjtTcjxsbi5sZW5n''@;'; put 'put ''dGg7KXN3aXRjaChQaT1sbi5jaGFyQXQoU3IpKXtjYXNlIkciOmlmKCFZZShsbixTcikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrUGkrIiBpbiAiK2xuKTtvcltvci5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0sU3IrPTc7YnJlYWs7Y2FzZSciJzpmb3Io''@;'; put 'put ''T2k9IiI7MzQhPT0oRGk9bG4uY2hhckNvZGVBdCgrK1NyKSkmJlNyPGxuLmxlbmd0aDspT2krPVN0cmluZy5mcm9tQ2hhckNvZGUoRGkpO29yW29yLmxlbmd0aF09e3Q6InQiLHY6T2l9LCsrU3I7YnJlYWs7Y2FzZSJcXCI6dmFyIFlvPWxuLmNoYXJBdCgrK1NyKTtvcltvci5sZW5ndGhdPXt0''@;'; put 'put ''OiIoIj09PVlvfHwiKSI9PT1Zbz9ZbzoidCIsdjpZb30sKytTcjticmVhaztjYXNlIl8iOm9yW29yLmxlbmd0aF09e3Q6InQiLHY6IiAifSxTcis9MjticmVhaztjYXNlIkAiOm9yW29yLmxlbmd0aF09e3Q6IlQiLHY6RW59LCsrU3I7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWxu''@;'; put 'put ''LmNoYXJBdChTcisxKXx8IjIiPT09bG4uY2hhckF0KFNyKzEpKXtpZihudWxsPT1IaSYmbnVsbD09KEhpPVRuKEVuLFVuLCIyIj09PWxuLmNoYXJBdChTcisxKSkpKXJldHVybiIiO29yW29yLmxlbmd0aF09e3Q6IlgiLHY6bG4uc3Vic3RyKFNyLDIpfSxaYT1QaSxTcis9MjticmVha31jYXNl''@;'; put 'put ''Ik0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpQaT1QaS50b0xvd2VyQ2FzZSgpO2Nhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJc''@;'; put 'put ''dTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6aWYoRW48MHx8bnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbikpKXJldHVybiIiO2ZvcihPaT1QaTsrK1NyPGxuLmxlbmd0aCYmbG4uY2hhckF0KFNyKS50b0xvd2VyQ2FzZSgpPT09UGk7KU9pKz1QaTsibSI9PT1QaSYmImgiPT09''@;'; put 'put ''WmEudG9Mb3dlckNhc2UoKSYmKFBpPSJNIiksImgiPT09UGkmJihQaT1jcyksb3Jbb3IubGVuZ3RoXT17dDpQaSx2Ok9pfSxaYT1QaTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciBfdT17dDpQaSx2OlBpfTtpZihudWxsPT1IaSYmKEhpPVRuKEVuLFVuKSksIkEvUCI9''@;'; put 'put ''PT1sbi5zdWJzdHIoU3IsMykudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJihfdS52PUhpLkg+PTEyPyJQIjoiQSIpLF91LnQ9IlQiLGNzPSJoIixTcis9Myk6IkFNL1BNIj09PWxuLnN1YnN0cihTciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKF91LnY9SGkuSD49MTI/IlBNIjoiQU0i''@;'; put 'put ''KSxfdS50PSJUIixTcis9NSxjcz0iaCIpOiJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWxuLnN1YnN0cihTciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKF91LnY9SGkuSD49MTI/Ilx1NGUwYlx1NTM0OCI6Ilx1NGUwYVx1NTM0OCIpLF91LnQ9IlQiLFNyKz01LGNzPSJoIik6''@;'; put 'put ''KF91LnQ9InQiLCsrU3IpLG51bGw9PUhpJiYiVCI9PT1fdS50KXJldHVybiIiO29yW29yLmxlbmd0aF09X3UsWmE9UGk7YnJlYWs7Y2FzZSJbIjpmb3IoT2k9UGk7Il0iIT09bG4uY2hhckF0KFNyKyspJiZTcjxsbi5sZW5ndGg7KU9pKz1sbi5jaGFyQXQoU3IpO2lmKCJdIiE9PU9pLnNsaWNl''@;'; put 'put ''KC0xKSl0aHJvdyd1bnRlcm1pbmF0ZWQgIlsiIGJsb2NrOiB8JytPaSsifCI7aWYoT2kubWF0Y2goQmkpKXtpZihudWxsPT1IaSYmbnVsbD09KEhpPVRuKEVuLFVuKSkpcmV0dXJuIiI7b3Jbb3IubGVuZ3RoXT17dDoiWiIsdjpPaS50b0xvd2VyQ2FzZSgpfSxaYT1PaS5jaGFyQXQoMSl9ZWxz''@;'; put 'put ''ZSBPaS5pbmRleE9mKCIkIik+LTEmJihPaT0oT2kubWF0Y2goL1wkKFteLVxbXF1dKikvKXx8W10pWzFdfHwiJCIsSXMobG4pfHwob3Jbb3IubGVuZ3RoXT17dDoidCIsdjpPaX0pKTticmVhaztjYXNlIi4iOmlmKG51bGwhPUhpKXtmb3IoT2k9UGk7KytTcjxsbi5sZW5ndGgmJiIwIj09PShQ''@;'; put 'put ''aT1sbi5jaGFyQXQoU3IpKTspT2krPVBpO29yW29yLmxlbmd0aF09e3Q6InMiLHY6T2l9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoT2k9UGk7KytTcjxsbi5sZW5ndGgmJiIwIz8uLEUrLSUiLmluZGV4T2YoUGk9bG4uY2hhckF0KFNyKSk+LTE7KU9pKz1QaTtvcltvci5sZW5ndGhdPXt0''@;'; put 'put ''OiJuIix2Ok9pfTticmVhaztjYXNlIj8iOmZvcihPaT1QaTtsbi5jaGFyQXQoKytTcik9PT1QaTspT2krPVBpO29yW29yLmxlbmd0aF09e3Q6UGksdjpPaX0sWmE9UGk7YnJlYWs7Y2FzZSIqIjorK1NyLCgiICI9PWxuLmNoYXJBdChTcil8fCIqIj09bG4uY2hhckF0KFNyKSkmJisrU3I7YnJl''@;'; put 'put ''YWs7Y2FzZSIoIjpjYXNlIikiOm9yW29yLmxlbmd0aF09e3Q6MT09PXhpPyJ0IjpQaSx2OlBpfSwrK1NyO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihPaT1QaTtTcjxsbi5sZW5ndGgmJiIw''@;'; put 'put ''MTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK1NyKSk+LTE7KU9pKz1sbi5jaGFyQXQoU3IpO29yW29yLmxlbmd0aF09e3Q6IkQiLHY6T2l9O2JyZWFrO2Nhc2UiICI6b3Jbb3IubGVuZ3RoXT17dDpQaSx2OlBpfSwrK1NyO2JyZWFrO2Nhc2UiJCI6b3Jbb3IubGVuZ3RoXT17dDoidCIs''@;'; put 'put ''djpNaX0sKytTcjticmVhaztjYXNlIi8iOm9yW29yLmxlbmd0aF09b3IubGVuZ3RoPjAmJklzKG9yW29yLmxlbmd0aC0xXS52KT97dDoidCIsdjpWbn06e3Q6InQiLHY6Ii8ifSwrK1NyO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PT0iLCQtKy8oKTohXiYnfnt9PD49XHUyMGFjYWNmaWprbG9wcXJ0''@;'; put 'put ''dXZ3eHpQIi5pbmRleE9mKFBpKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitQaSsiIGluICIrbG4pO29yW29yLmxlbmd0aF09e3Q6InQiLHY6UGl9LCsrU3J9dmFyIHlkLEVsPTAsRmY9MDtmb3IoU3I9b3IubGVuZ3RoLTEsWmE9InQiO1NyPj0wOy0tU3Ipc3dp''@;'; put 'put ''dGNoKG9yW1NyXS50KXtjYXNlImgiOmNhc2UiSCI6b3JbU3JdLnQ9Y3MsWmE9ImgiLEVsPDEmJihFbD0xKTticmVhaztjYXNlInMiOih5ZD1vcltTcl0udi5tYXRjaCgvXC4wKyQvKSkmJihGZj1NYXRoLm1heChGZix5ZFswXS5sZW5ndGgtMSkpLEVsPDMmJihFbD0zKTtjYXNlImQiOmNhc2Ui''@;'; put 'put ''eSI6Y2FzZSJNIjpjYXNlImUiOlphPW9yW1NyXS50O2JyZWFrO2Nhc2UibSI6InMiPT09WmEmJihvcltTcl0udD0iTSIsRWw8MiYmKEVsPTIpKTticmVhaztjYXNlIlgiOmJyZWFrO2Nhc2UiWiI6RWw8MSYmb3JbU3JdLnYubWF0Y2goL1tIaF0vKSYmKEVsPTEpLEVsPDImJm9yW1NyXS52Lm1h''@;'; put 'put ''dGNoKC9bTW1dLykmJihFbD0yKSxFbDwzJiZvcltTcl0udi5tYXRjaCgvW1NzXS8pJiYoRWw9Myl9c3dpdGNoKEVsKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOkhpLnU+PS41JiYoSGkudT0wLCsrSGkuUyksSGkuUz49NjAmJihIaS5TPTAsKytIaS5NKSxIaS5NPj02MCYmKEhpLk09MCwrK0hpLkgp''@;'; put 'put ''O2JyZWFrO2Nhc2UgMjpIaS51Pj0uNSYmKEhpLnU9MCwrK0hpLlMpLEhpLlM+PTYwJiYoSGkuUz0wLCsrSGkuTSl9dmFyIGtuLGduPSIiO2ZvcihTcj0wO1NyPG9yLmxlbmd0aDsrK1NyKXN3aXRjaChvcltTcl0udCl7Y2FzZSJ0IjpjYXNlIlQiOmNhc2UiICI6Y2FzZSJEIjpicmVhaztjYXNl''@;'; put 'put ''IlgiOm9yW1NyXS52PSIiLG9yW1NyXS50PSI7IjticmVhaztjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UiSCI6Y2FzZSJNIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJiIjpjYXNlIloiOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBh''@;'; put 'put ''IjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOm9yW1NyXS52PUxvKG9yW1NyXS50LmNoYXJDb2RlQXQoMCksb3JbU3JdLnYsSGksRmYpLG9yW1NyXS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKGtuPVNyKzE7bnVsbCE9b3Jba25dJiYoIj8iPT09KFBpPW9yW2tuXS50KXx8IkQi''@;'; put 'put ''PT09UGl8fCgiICI9PT1QaXx8InQiPT09UGkpJiZudWxsIT1vcltrbisxXSYmKCI/Ij09PW9yW2tuKzFdLnR8fCJ0Ij09PW9yW2tuKzFdLnQmJiIvIj09PW9yW2tuKzFdLnYpfHwiKCI9PT1vcltTcl0udCYmKCIgIj09PVBpfHwibiI9PT1QaXx8IikiPT09UGkpfHwidCI9PT1QaSYmKCIvIj09''@;'; put 'put ''PW9yW2tuXS52fHwiICI9PT1vcltrbl0udiYmbnVsbCE9b3Jba24rMV0mJiI/Ij09b3Jba24rMV0udCkpOylvcltTcl0udis9b3Jba25dLnYsb3Jba25dPXt2OiIiLHQ6IjsifSwrK2tuO2duKz1vcltTcl0udixTcj1rbi0xO2JyZWFrO2Nhc2UiRyI6b3JbU3JdLnQ9InQiLG9yW1NyXS52PV9h''@;'; put 'put ''KEVuLFVuKX12YXIgWnQsbm4sd249IiI7aWYoZ24ubGVuZ3RoPjApezQwPT1nbi5jaGFyQ29kZUF0KDApPyhadD1FbjwwJiY0NT09PWduLmNoYXJDb2RlQXQoMCk/LUVuOkVuLG5uPWhvKCJuIixnbixadCkpOihubj1obygibiIsZ24sWnQ9RW48MCYmeGk+MT8tRW46RW4pLFp0PDAmJm9yWzBd''@;'; put 'put ''JiYidCI9PW9yWzBdLnQmJihubj1ubi5zdWJzdHIoMSksb3JbMF0udj0iLSIrb3JbMF0udikpLGtuPShubj1ubi5yZXBsYWNlKC9bLFwuXS9nLGZ1bmN0aW9uKFdyKXtyZXR1cm4iLiI9PVdyP2tyOkxpfSkpLmxlbmd0aC0xO3ZhciB4bj1vci5sZW5ndGg7Zm9yKFNyPTA7U3I8b3IubGVuZ3Ro''@;'; put 'put ''OysrU3IpaWYobnVsbCE9b3JbU3JdJiYidCIhPW9yW1NyXS50JiZvcltTcl0udi5pbmRleE9mKCIuIik+LTEpe3huPVNyO2JyZWFrfXZhciB6bj1vci5sZW5ndGg7aWYoeG49PT1vci5sZW5ndGgmJi0xPT09bm4uaW5kZXhPZigiRSIpKXtmb3IoU3I9b3IubGVuZ3RoLTE7U3I+PTA7LS1Tcilu''@;'; put 'put ''dWxsPT1vcltTcl18fC0xPT09Im4/Ii5pbmRleE9mKG9yW1NyXS50KXx8KGtuPj1vcltTcl0udi5sZW5ndGgtMT9vcltTcl0udj1ubi5zdWJzdHIoMSsoa24tPW9yW1NyXS52Lmxlbmd0aCksb3JbU3JdLnYubGVuZ3RoKTprbjwwP29yW1NyXS52PSIiOihvcltTcl0udj1ubi5zdWJzdHIoMCxr''@;'; put 'put ''bisxKSxrbj0tMSksb3JbU3JdLnQ9InQiLHpuPVNyKTtrbj49MCYmem48b3IubGVuZ3RoJiYob3Jbem5dLnY9bm4uc3Vic3RyKDAsa24rMSkrb3Jbem5dLnYpfWVsc2UgaWYoeG4hPT1vci5sZW5ndGgmJi0xPT09bm4uaW5kZXhPZigiRSIpKXtmb3Ioa249bm4uaW5kZXhPZihrciktMSxTcj14''@;'; put 'put ''bjtTcj49MDstLVNyKWlmKG51bGwhPW9yW1NyXSYmLTEhPT0ibj8iLmluZGV4T2Yob3JbU3JdLnQpKXtmb3IobWE9b3JbU3JdLnYuaW5kZXhPZigiLiIpPi0xJiZTcj09PXhuP29yW1NyXS52LmluZGV4T2YoIi4iKS0xOm9yW1NyXS52Lmxlbmd0aC0xLHduPW9yW1NyXS52LnN1YnN0cihtYSsx''@;'; put 'put ''KTttYT49MDstLW1hKWtuPj0wJiYoIjAiPT09b3JbU3JdLnYuY2hhckF0KG1hKXx8IiMiPT09b3JbU3JdLnYuY2hhckF0KG1hKSkmJih3bj1ubi5jaGFyQXQoa24tLSkrd24pO29yW1NyXS52PXduLG9yW1NyXS50PSJ0Iix6bj1Tcn1mb3Ioa24+PTAmJnpuPG9yLmxlbmd0aCYmKG9yW3puXS52''@;'; put 'put ''PW5uLnN1YnN0cigwLGtuKzEpK29yW3puXS52KSxrbj1ubi5pbmRleE9mKGtyKSsxLFNyPXhuO1NyPG9yLmxlbmd0aDsrK1NyKWlmKG51bGwhPW9yW1NyXSYmKC0xIT09Im4/KCIuaW5kZXhPZihvcltTcl0udCl8fFNyPT09eG4pKXtmb3IobWE9b3JbU3JdLnYuaW5kZXhPZihrcik+LTEmJlNy''@;'; put 'put ''PT09eG4/b3JbU3JdLnYuaW5kZXhPZihrcikrMTowLHduPW9yW1NyXS52LnN1YnN0cigwLG1hKTttYTxvcltTcl0udi5sZW5ndGg7KyttYSlrbjxubi5sZW5ndGgmJih3bis9bm4uY2hhckF0KGtuKyspKTtvcltTcl0udj13bixvcltTcl0udD0idCIsem49U3J9fX1mb3IoU3I9MDtTcjxvci5s''@;'; put 'put ''ZW5ndGg7KytTciludWxsIT1vcltTcl0mJiJuPyIuaW5kZXhPZihvcltTcl0udCk+LTEmJihvcltTcl0udj1obyhvcltTcl0udCxvcltTcl0udixadD14aT4xJiZFbjwwJiZTcj4wJiYiLSI9PT1vcltTci0xXS52Py1FbjpFbikucmVwbGFjZSgvXC4vZyxrcikucmVwbGFjZSgvLC8sTGkpLG9y''@;'; put 'put ''W1NyXS50PSJ0Iik7dmFyIHlyPSIiO2ZvcihTcj0wO1NyIT09b3IubGVuZ3RoOysrU3IpbnVsbCE9b3JbU3JdJiYoeXIrPW9yW1NyXS52KTtyZXR1cm4geXJ9Ui5pc19kYXRlPUlzLFIuX2V2YWw9UG47dmFyIGhyPS9cW1s9PD5dLyxRbD0vXFsoPXw+Wz1dP3w8Wz49XT8pKC0/XGQrKD86XC5c''@;'; put 'put ''ZCopPylcXS87ZnVuY3Rpb24gWWwobG4sRW4pe2lmKG51bGw9PUVuKXJldHVybiExO3ZhciBVbj1wYXJzZUZsb2F0KEVuWzJdKTtzd2l0Y2goRW5bMV0pe2Nhc2UiPSI6aWYobG49PVVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPiI6aWYobG4+VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8IjppZihs''@;'; put 'put ''bjxVbilyZXR1cm4hMDticmVhaztjYXNlIjw+IjppZihsbiE9VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+PSI6aWYobG4+PVVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGxuPD1VbilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB5dShsbixFbixVbil7bnVsbD09VW4mJihVbj17fSk7''@;'; put 'put ''dmFyIHhpPSIiO3N3aXRjaCh0eXBlb2YgbG4pe2Nhc2Uic3RyaW5nIjp4aT0ibS9kL3l5Ij09bG4mJlVuLmRhdGVORj9Vbi5kYXRlTkY6bG47YnJlYWs7Y2FzZSJudW1iZXIiOm51bGw9PSh4aT0xND09bG4mJlVuLmRhdGVORj9Vbi5kYXRlTkY6KG51bGwhPVVuLnRhYmxlP1VuLnRhYmxlOmJ0''@;'; put 'put ''KVtsbl0pJiYoeGk9VW4udGFibGUmJlVuLnRhYmxlW2p0W2xuXV18fGJ0W2p0W2xuXV0pLG51bGw9PXhpJiYoeGk9T3RbbG5dfHwiR2VuZXJhbCIpfWlmKFllKHhpLDApKXJldHVybiBfYShFbixVbik7RW4gaW5zdGFuY2VvZiBEYXRlJiYoRW49WG4oRW4sVW4uZGF0ZTE5MDQpKTt2YXIgb3I9''@;'; put 'put ''ZnVuY3Rpb24gR2wobG4sRW4pe3ZhciBVbj1KYShsbikseGk9VW4ubGVuZ3RoLG9yPVVuW3hpLTFdLmluZGV4T2YoIkAiKTtpZih4aTw0JiZvcj4tMSYmLS14aSxVbi5sZW5ndGg+NCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmaW5kIHJpZ2h0IGZvcm1hdCBmb3IgfCIrVW4uam9pbigifCIp''@;'; put 'put ''KyJ8Iik7aWYoIm51bWJlciIhPXR5cGVvZiBFbilyZXR1cm5bNCw0PT09VW4ubGVuZ3RofHxvcj4tMT9VbltVbi5sZW5ndGgtMV06IkAiXTtzd2l0Y2goVW4ubGVuZ3RoKXtjYXNlIDE6VW49b3I+LTE/WyJHZW5lcmFsIiwiR2VuZXJhbCIsIkdlbmVyYWwiLFVuWzBdXTpbVW5bMF0sVW5bMF0s''@;'; put 'put ''VW5bMF0sIkAiXTticmVhaztjYXNlIDI6VW49b3I+LTE/W1VuWzBdLFVuWzBdLFVuWzBdLFVuWzFdXTpbVW5bMF0sVW5bMV0sVW5bMF0sIkAiXTticmVhaztjYXNlIDM6VW49b3I+LTE/W1VuWzBdLFVuWzFdLFVuWzBdLFVuWzJdXTpbVW5bMF0sVW5bMV0sVW5bMl0sIkAiXX12YXIgT2k9RW4+''@;'; put 'put ''MD9VblswXTpFbjwwP1VuWzFdOlVuWzJdO2lmKC0xPT09VW5bMF0uaW5kZXhPZigiWyIpJiYtMT09PVVuWzFdLmluZGV4T2YoIlsiKSlyZXR1cm5beGksT2ldO2lmKG51bGwhPVVuWzBdLm1hdGNoKGhyKXx8bnVsbCE9VW5bMV0ubWF0Y2goaHIpKXt2YXIgU3I9VW5bMF0ubWF0Y2goUWwpLFBp''@;'; put 'put ''PVVuWzFdLm1hdGNoKFFsKTtyZXR1cm4gWWwoRW4sU3IpP1t4aSxVblswXV06WWwoRW4sUGkpP1t4aSxVblsxXV06W3hpLFVuW251bGwhPVNyJiZudWxsIT1QaT8yOjFdXX1yZXR1cm5beGksT2ldfSh4aSxFbik7aWYoWWUob3JbMV0pKXJldHVybiBfYShFbixVbik7aWYoITA9PT1FbilFbj0i''@;'; put 'put ''VFJVRSI7ZWxzZSBpZighMT09PUVuKUVuPSJGQUxTRSI7ZWxzZSBpZigiIj09PUVufHxudWxsPT1FbilyZXR1cm4iIjtyZXR1cm4gUG4ob3JbMV0sRW4sVW4sb3JbMF0pfWZ1bmN0aW9uIE1sKGxuLEVuKXtpZigibnVtYmVyIiE9dHlwZW9mIEVuKXtFbj0rRW58fC0xO2Zvcih2YXIgVW49MDtV''@;'; put 'put ''bjwzOTI7KytVbilpZihudWxsIT1idFtVbl0pe2lmKGJ0W1VuXT09bG4pe0VuPVVuO2JyZWFrfX1lbHNlIEVuPDAmJihFbj1Vbik7RW48MCYmKEVuPTM5MSl9cmV0dXJuIGJ0W0VuXT1sbixFbn1SLmxvYWQ9TWwsUi5fdGFibGU9YnQsUi5nZXRfdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYnR9''@;'; put 'put ''LFIubG9hZF90YWJsZT1mdW5jdGlvbihFbil7Zm9yKHZhciBVbj0wOzM5MiE9VW47KytVbil2b2lkIDAhPT1FbltVbl0mJk1sKEVuW1VuXSxVbil9LFIuaW5pdF90YWJsZT1hdCxSLmZvcm1hdD15dSxSLmdldGxvY2FsZT1mdW5jdGlvbiBCcigpe3JldHVybiBCbnx8ImVuLVVTIn0sUi5zZXRs''@;'; put 'put ''b2NhbGU9ZnVuY3Rpb24gX3IobG4pe2lmKGZ1bmN0aW9uIGpyKGxuKXt2YXIgRW49MDtzd2l0Y2goKEJufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6Y2FzZSJ6aC1jbiI6Y2FzZSJqYS1qcCI6Y2FzZSJrby1rciI6Zm9yKEVuPTI3O0VuPD0zNjsrK0VuKWRlbGV0ZSBsbltFbl07''@;'; put 'put ''Zm9yKEVuPTUwO0VuPD01ODsrK0VuKWRlbGV0ZSBsbltFbl07YnJlYWs7Y2FzZSJ0aC10aCI6Zm9yKEVuPTU5O0VuPD02MjsrK0VuKWRlbGV0ZSBsbltFbl07Zm9yKEVuPTY3O0VuPD04MTsrK0VuKWRlbGV0ZSBsbltFbl19fShidCksQm49bG4sRm4oYnQpLHR5cGVvZiBJbnRsPCJ1Iil7dmFy''@;'; put 'put ''IEVuPUludGwuRGF0ZVRpbWVGb3JtYXQobG4pO2lmKEVuLmZvcm1hdFRvUGFydHMpe2Zvcih2YXIgVW49RW4uZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSwwLDAsMCkpLHhpPTA7eGk8NzsrK3hpKWN0W3hpXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuLHt3ZWVrZGF5OiJsb25n''@;'; put 'put ''In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUreGksMCwwLDApKVswXS52YWx1ZSxjdFt4aV1bMF09SW50bC5EYXRlVGltZUZvcm1hdChsbix7d2Vla2RheToic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSt4aSwwLDAsMCkpWzBdLnZhbHVlO2Zvcih2''@;'; put 'put ''YXIgb3I9MDtvcjwxMjsrK29yKUV0W29yXVsyXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuLHttb250aDoibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsb3IsMiwwLDAsMCkpWzBdLnZhbHVlLEV0W29yXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuLHttb250aDoic2hvcnQi''@;'; put 'put ''fSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLG9yLDIsMCwwLDApKVswXS52YWx1ZSxFdFtvcl1bMF09RXRbb3JdWzFdLnNsaWNlKDAsMSk7Zm9yKHZhciBPaT0iIixTcj0wO1NyPFVuLmxlbmd0aDsrK1NyKXt2YXIgUGk9VW5bU3JdLnZhbHVlO3N3aXRjaChVbltTcl0udHlwZSl7Y2Fz''@;'; put 'put ''ZSJ5ZWFyIjpPaSs9Mj09UGkubGVuZ3RoPyJ5eSI6Inl5eXkiO2JyZWFrO2Nhc2UibW9udGgiOk9pKz0iMSI9PVBpPyJtIjoiMDEiPT1QaT8ibW0iOlBpPT1FdFswXVsxXT8ibW1tIjpQaT09RXRbMF1bMl0/Im1tbW0iOlBpPT1FdFswXVswXT8ibW1tbW0iOiJtbSI7YnJlYWs7Y2FzZSJkYXki''@;'; put 'put ''Ok9pKz0iNSI9PVBpPyJkIjoiMDUiPT1QaT8iZGQiOlBpPT1jdFswXVswXT8iZGRkIjpQaT09Y3RbMF1bMV0/ImRkZGQiOiJkZCI7YnJlYWs7Y2FzZSJsaXRlcmFsIjpPaSs9UGkucmVwbGFjZSgvLi9nLCJcXCQmIiksMT09UGkubGVuZ3RoJiYoVm49UGkpfX0obG4ubWF0Y2goL2VuL2kpJiZs''@;'; put 'put ''bi5tYXRjaCgvdXMvaSl8fCFsbikmJihPaT0ibS9kL3l5IiksYnRbMTRdPU9pfWVsc2UiamEtanAiPT1sbi50b0xvd2VyQ2FzZSgpJiYoYnRbMTRdPSJ5eXl5XFwvbVxcL2QiKTt2YXIgWmE9SW50bC5OdW1iZXJGb3JtYXQobG4se30pLmZvcm1hdCgxMjM0NTY3Ljg5KTtaYSYmKExpPShaYS5t''@;'; put 'put ''YXRjaCgvMSguKikyLyl8fFtdKVsxXSxrcj0oWmEubWF0Y2goLzcoLiopOC8pfHxbXSlbMV0pfWZyW2xuLnRvTG93ZXJDYXNlKCldfHwoZnJbbG4udG9Mb3dlckNhc2UoKV09eyIuIjprciwiLCI6TGl9KSxlcj1ldChicj1mcltsbi50b0xvd2VyQ2FzZSgpXXx8ZnJbImVuLXVzIl0pfSxSLm5v''@;'; put 'put ''cm1hbGl6ZT1mdW5jdGlvbiBXbyhsbil7Zm9yKHZhciBFbj0wLFVuPTAseGk9IiIsb3I9IiIsT2k9IiIsU3I9YnIueXx8InkiLFBpPVNyLnRvVXBwZXJDYXNlKCksWmE9YnIuZHx8ImQiLEhpPVphLnRvVXBwZXJDYXNlKCksbWE9YnJbIi4iXSxEaT1iclsiLCJdLGNzPSIwIz9FKy0lIiticlsi''@;'; put 'put ''LCJdK21hO0VuPGxuLmxlbmd0aDspc3dpdGNoKHhpPWxuLmNoYXJBdChFbikpe2Nhc2UiRyI6RW4rKyxPaSs9eGk7YnJlYWs7Y2FzZSciJzpmb3IoT2krPXhpOzM0IT09KFVuPWxuLmNoYXJDb2RlQXQoKytFbikpJiZFbjxsbi5sZW5ndGg7KU9pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFVuKTtP''@;'; put 'put ''aSs9JyInLCsrRW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpPaSs9bG4uc2xpY2UoRW4sRW4rMiksRW4rPTI7YnJlYWs7Y2FzZSJAIjpPaSs9eGksKytFbjticmVhaztjYXNlIkIiOmNhc2UiYiI6KytFbixPaSs9eGk7YnJlYWs7Y2FzZSBTcjpjYXNlIFBpOmNhc2UgWmE6Y2FzZSBIaTpPaSs9''@;'; put 'put ''ZXJbeGkudG9Mb3dlckNhc2UoKV0sKytFbjticmVhaztjYXNlIk0iOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIkEiOmNhc2UiYSI6T2krPXhpLCsrRW47YnJlYWs7Y2FzZSJbIjpmb3Iob3I9eGk7Il0iIT09bG4u''@;'; put 'put ''Y2hhckF0KEVuKyspJiZFbjxsbi5sZW5ndGg7KW9yKz1sbi5jaGFyQXQoRW4pO09pKz1vcjticmVhaztjYXNlIERpOk9pKz0nIicreGkrJyInLCsrRW47YnJlYWs7Y2FzZSBtYTppZighKEVuPGxuLmxlbmd0aCYmKGNzLmluZGV4T2YoeGk9bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09eGkm''@;'; put 'put ''JiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSkpKXtPaSs9JyInK21hKyciJzticmVha314aT1tYSwtLUVuO2Nhc2UiMCI6Y2FzZSIjIjpmb3IoT2krPWVyW3hpLnRvTG93ZXJDYXNlKCldfHx4aTtFbjxsbi5sZW5ndGgmJihjcy5pbmRleE9m''@;'; put 'put ''KHhpPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PXhpJiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpOylPaSs9ZXJbeGkudG9Mb3dlckNhc2UoKV18fHhpO2JyZWFrO2Nhc2UiPyI6Zm9yKE9pKz14aTtsbi5jaGFyQXQoKytFbik9PT14''@;'; put 'put ''aTspT2krPXhpO2JyZWFrO2Nhc2UiKiI6T2krPXhpLCsrRW4sKCIgIj09bG4uY2hhckF0KEVuKXx8IioiPT1sbi5jaGFyQXQoRW4pKSYmKE9pKz1sbi5jaGFyQXQoRW4pLCsrRW4pO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpPaSs9eGksKytFbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIz''@;'; put 'put ''IjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoT2krPXhpO0VuPGxuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrRW4pKT4tMTspT2krPWxuLmNoYXJBdChFbik7YnJlYWs7ZGVmYXVsdDpPaSs9eGksKytFbn1yZXR1''@;'; put 'put ''cm4gT2l9LFIuZ2V0Y3VycmVuY3k9ZnVuY3Rpb24gbmEoKXtyZXR1cm4gRml8fCJVU0QifSxSLnNldGN1cnJlbmN5PWZ1bmN0aW9uIGNhKGxuKXtGaT1sbixNaT10eXBlb2YgSW50bDwidSI/SW50bC5OdW1iZXJGb3JtYXQoQm4se3N0eWxlOiJjdXJyZW5jeSIsY3VycmVuY3lEaXNwbGF5OiJz''@;'; put 'put ''eW1ib2wiLGN1cnJlbmN5OmxufSkuZm9ybWF0KDApLnJlcGxhY2UoL1swXC5cLFxzXS9nLCIiKToiJCJ9fTthZShBKTt2YXIgTWUsdGU9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOkEuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5''@;'; put 'put ''eSIsIk1lZGl1bSBEYXRlIjpBLl90YWJsZVsxNV0sIlNob3J0IERhdGUiOkEuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjpBLl90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjpBLl90YWJsZVsxOF0sIlNob3J0IFRpbWUiOkEuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxc''@;'; put 'put ''KCIkIiMsIyMwLjAwXFwpJyxGaXhlZDpBLl90YWJsZVsyXSxTdGFuZGFyZDpBLl90YWJsZVs0XSxQZXJjZW50OkEuX3RhYmxlWzEwXSxTY2llbnRpZmljOkEuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNl''@;'; put 'put ''IjtAJywiT24vT2ZmIjonIlllcyI7IlllcyI7Ik5vIjtAJ30sc2U9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxc''@;'; put 'put ''KCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpz''@;'; put 'put ''cyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCog''@;'; put 'put ''Ii0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1Nzoi''@;'; put 'put ''bS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCkn''@;'; put 'put ''LDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1t''@;'; put 'put ''OnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LHdlPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2c7IWZ1bmN0aW9uKFMpe1MudmVyc2lvbj0iMS4yLjAiO3ZhciBrPWZ1bmN0aW9uIFIoKXtmb3IodmFyIHBlPTAseWU9''@;'; put 'put ''bmV3IEFycmF5KDI1NiksUGU9MDsyNTYhPVBlOysrUGUpeWVbUGVdPXBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPVBlKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6''@;'; put 'put ''cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MTtyZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUi''@;'; put 'put ''P25ldyBJbnQzMkFycmF5KHllKTp5ZX0oKTtTLnRhYmxlPWssUy5ic3RyPWZ1bmN0aW9uIEcocGUseWUpe2Zvcih2YXIgUGU9fnllLE5lPXBlLmxlbmd0aC0xLFllPTA7WWU8TmU7KVBlPShQZT1QZT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQoWWUrKykpXSk+Pj44XmtbMjU1JihQZV5w''@;'; put 'put ''ZS5jaGFyQ29kZUF0KFllKyspKV07cmV0dXJuIFllPT09TmUmJihQZT1QZT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQoWWUpKV0pLH5QZX0sUy5idWY9ZnVuY3Rpb24gUShwZSx5ZSl7aWYocGUubGVuZ3RoPjFlNClyZXR1cm4gZnVuY3Rpb24gb2UocGUseWUpe2Zvcih2YXIgUGU9fnll''@;'; put 'put ''LE5lPXBlLmxlbmd0aC03LFllPTA7WWU8TmU7KVBlPShQZT0oUGU9KFBlPShQZT0oUGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0p''@;'; put 'put ''Pj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtmb3IoO1llPE5lKzc7KVBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtyZXR1cm5+UGV9KHBlLHll''@;'; put 'put ''KTtmb3IodmFyIFBlPX55ZSxOZT1wZS5sZW5ndGgtMyxZZT0wO1llPE5lOylQZT0oUGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07''@;'; put 'put ''Zm9yKDtZZTxOZSszOylQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07cmV0dXJuflBlfSxTLnN0cj1mdW5jdGlvbiBnZShwZSx5ZSl7Zm9yKHZhciBldCxjdCxQZT1+eWUsTmU9MCxZZT1wZS5sZW5ndGg7TmU8WWU7KShldD1wZS5jaGFyQ29kZUF0KE5lKyspKTwxMjg/UGU9UGU+Pj44''@;'; put 'put ''XmtbMjU1JihQZV5ldCldOmV0PDIwNDg/UGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVeKDE5MnxldD4+NiYzMSkpXSk+Pj44XmtbMjU1JihQZV4oMTI4fDYzJmV0KSldOmV0Pj01NTI5NiYmZXQ8NTczNDQ/KGV0PTY0KygxMDIzJmV0KSxjdD0xMDIzJnBlLmNoYXJDb2RlQXQoTmUrKyksUGU9KFBl''@;'; put 'put ''PShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMjQwfGV0Pj44JjcpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHxldD4+MiY2MykpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGN0Pj42JjE1fCgzJmV0KTw8NCkpXSk+Pj44XmtbMjU1JihQZV4oMTI4fDYzJmN0KSldKTpQZT0oUGU9KFBlPVBlPj4+OF5r''@;'; put 'put ''WzI1NSYoUGVeKDIyNHxldD4+MTImMTUpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHxldD4+NiY2MykpXSk+Pj44XmtbMjU1JihQZV4oMTI4fDYzJmV0KSldO3JldHVybn5QZX19KE1lPXt9KTt2YXIgWGUsdmU9ZnVuY3Rpb24oKXt2YXIgeWUsUj17fTtmdW5jdGlvbiBHKGduKXtpZigiLyI9PWdu''@;'; put 'put ''LmNoYXJBdChnbi5sZW5ndGgtMSkpcmV0dXJuLTE9PT1nbi5zbGljZSgwLC0xKS5pbmRleE9mKCIvIik/Z246Ryhnbi5zbGljZSgwLC0xKSk7dmFyIGtuPWduLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1rbj9nbjpnbi5zbGljZSgwLGtuKzEpfWZ1bmN0aW9uIFEoZ24pe2lmKCIvIj09''@;'; put 'put ''Z24uY2hhckF0KGduLmxlbmd0aC0xKSlyZXR1cm4gUShnbi5zbGljZSgwLC0xKSk7dmFyIGtuPWduLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1rbj9nbjpnbi5zbGljZShrbisxKX1mdW5jdGlvbiBvZShnbixrbil7InN0cmluZyI9PXR5cGVvZiBrbiYmKGtuPW5ldyBEYXRlKGtuKSk7''@;'; put 'put ''dmFyIHduPWtuLmdldEhvdXJzKCk7d249KHduPXduPDw2fGtuLmdldE1pbnV0ZXMoKSk8PDV8a24uZ2V0U2Vjb25kcygpPj4+MSxnbi53cml0ZV9zaGlmdCgyLHduKTt2YXIgWnQ9a24uZ2V0RnVsbFllYXIoKS0xOTgwO1p0PShadD1adDw8NHxrbi5nZXRNb250aCgpKzEpPDw1fGtuLmdldERh''@;'; put 'put ''dGUoKSxnbi53cml0ZV9zaGlmdCgyLFp0KX1mdW5jdGlvbiBwZShnbil7bW4oZ24sMCk7Zm9yKHZhciBrbj17fSx3bj0wO2duLmw8PWduLmxlbmd0aC00Oyl7dmFyIFp0PWduLnJlYWRfc2hpZnQoMiksbm49Z24ucmVhZF9zaGlmdCgyKSx4bj1nbi5sK25uLHpuPXt9OzIxNTg5PT09WnQmJigx''@;'; put 'put ''Jih3bj1nbi5yZWFkX3NoaWZ0KDEpKSYmKHpuLm10aW1lPWduLnJlYWRfc2hpZnQoNCkpLG5uPjUmJigyJnduJiYoem4uYXRpbWU9Z24ucmVhZF9zaGlmdCg0KSksNCZ3biYmKHpuLmN0aW1lPWduLnJlYWRfc2hpZnQoNCkpKSx6bi5tdGltZSYmKHpuLm10PW5ldyBEYXRlKDFlMyp6bi5tdGlt''@;'; put 'put ''ZSkpKSxnbi5sPXhuLGtuW1p0XT16bn1yZXR1cm4ga259ZnVuY3Rpb24gUGUoKXtyZXR1cm4geWV8fCh5ZT15KDgzMzM3KSl9ZnVuY3Rpb24gTmUoZ24sa24pe2lmKDgwPT1nblswXSYmNzU9PWduWzFdKXJldHVybiBEaShnbixrbik7aWYoZ24ubGVuZ3RoPDUxMil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkNGQiBmaWxlIHNpemUgIitnbi5sZW5ndGgrIiA8IDUxMiIpO3ZhciB3bixubix4bix6bix5cixXcixadD01MTIsb2k9W10sbmk9Z24uc2xpY2UoMCw1MTIpO21uKG5pLDApO3ZhciBYaT1mdW5jdGlvbiBZZShnbil7aWYoODA9PWduW2duLmxdJiY3NT09Z25bZ24ubCsxXSlyZXR1cm5bMCww''@;'; put 'put ''XTtnbi5jaGsoTWksIkhlYWRlciBTaWduYXR1cmU6ICIpLGduLmwrPTE2O3ZhciBrbj1nbi5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bZ24ucmVhZF9zaGlmdCgyLCJ1Iiksa25dfShuaSk7c3dpdGNoKHduPVhpWzBdKXtjYXNlIDM6WnQ9NTEyO2JyZWFrO2Nhc2UgNDpadD00MDk2O2JyZWFr''@;'; put 'put ''O2Nhc2UgMDppZigwPT1YaVsxXSlyZXR1cm4gRGkoZ24sa24pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJNYWpvciBWZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIrd24pfTUxMiE9PVp0JiZtbihuaT1nbi5zbGljZSgwLFp0KSwyOCk7dmFyIFVpPWduLnNsaWNlKDAsWnQpOyFmdW5j''@;'; put 'put ''dGlvbiBldChnbixrbil7dmFyIHduO3N3aXRjaChnbi5sKz0yLHduPWduLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1rbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgIit3bik7YnJlYWs7Y2FzZSAxMjppZig0IT1rbil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrd24pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIgc2F3ICIrd24pfWduLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxnbi5jaGsoIjAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIlJlc2VydmVkOiAiKX0obmksd24pO3ZhciBubz1uaS5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09d24mJjAhPT1ubyl0aHJvdyBuZXcgRXJyb3IoIiMgRGlyZWN0b3J5IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICIrbm8pO25pLmwrPTQsem49bmkucmVhZF9zaGlmdCg0LCJpIiksbmku''@;'; put 'put ''bCs9NCxuaS5jaGsoIjAwMTAwMDAwIiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLHlyPW5pLnJlYWRfc2hpZnQoNCwiaSIpLG5uPW5pLnJlYWRfc2hpZnQoNCwiaSIpLFdyPW5pLnJlYWRfc2hpZnQoNCwiaSIpLHhuPW5pLnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgamE9LTEsdmE9''@;'; put 'put ''MDt2YTwxMDkmJiEoKGphPW5pLnJlYWRfc2hpZnQoNCwiaSIpKTwwKTsrK3ZhKW9pW3ZhXT1qYTt2YXIgVG89ZnVuY3Rpb24gY3QoZ24sa24pe2Zvcih2YXIgd249TWF0aC5jZWlsKGduLmxlbmd0aC9rbiktMSxadD1bXSxubj0xO25uPHduOysrbm4pWnRbbm4tMV09Z24uc2xpY2Uobm4qa24s''@;'; put 'put ''KG5uKzEpKmtuKTtyZXR1cm4gWnRbd24tMV09Z24uc2xpY2Uod24qa24pLFp0fShnbixadCk7YnQoV3IseG4sVG8sWnQsb2kpO3ZhciB4cz1mdW5jdGlvbiBrdChnbixrbix3bixadCl7dmFyIG5uPWduLmxlbmd0aCx4bj1bXSx6bj1bXSx5cj1bXSxXcj1bXSxvaT1adC0xLG5pPTAsWGk9MCxV''@;'; put 'put ''aT0wLG5vPTA7Zm9yKG5pPTA7bmk8bm47KytuaSlpZih5cj1bXSwoVWk9bmkra24pPj1ubiYmKFVpLT1ubiksIXpuW1VpXSl7V3I9W107dmFyIGphPVtdO2ZvcihYaT1VaTtYaT49MDspe2phW1hpXT0hMCx6bltYaV09ITAseXJbeXIubGVuZ3RoXT1YaSxXci5wdXNoKGduW1hpXSk7dmFyIHZh''@;'; put 'put ''PXduW01hdGguZmxvb3IoNCpYaS9adCldO2lmKFp0PDQrKG5vPTQqWGkmb2kpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrWGkrIiA0ICIrWnQpO2lmKCFnblt2YV18fGphW1hpPVZzKGduW3ZhXSxubyldKWJyZWFrfXhuW1VpXT17bm9kZXM6eXIsZGF0YTp5MChb''@;'; put 'put ''V3JdKX19cmV0dXJuIHhufShUbyx6bixvaSxadCk7eHNbem5dLm5hbWU9IiFEaXJlY3RvcnkiLG5uPjAmJnlyIT09ZXImJih4c1t5cl0ubmFtZT0iIU1pbmlGQVQiKSx4c1tvaVswXV0ubmFtZT0iIUZBVCIseHMuZmF0X2FkZHJzPW9pLHhzLnNzej1adDt2YXIgYzA9W10sYTE9W10sQjg9W107''@;'; put 'put ''KGZ1bmN0aW9uIE90KGduLGtuLHduLFp0LG5uLHhuLHpuLHlyKXtmb3IodmFyIG5vLFdyPTAsb2k9WnQubGVuZ3RoPzI6MCxuaT1rbltnbl0uZGF0YSxYaT0wLFVpPTA7WGk8bmkubGVuZ3RoO1hpKz0xMjgpe3ZhciBqYT1uaS5zbGljZShYaSxYaSsxMjgpO21uKGphLDY0KSxVaT1qYS5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLG5vPU9sKGphLDAsVWktb2kpLFp0LnB1c2gobm8pO3ZhciB2YT17bmFtZTpubyx0eXBlOmphLnJlYWRfc2hpZnQoMSksY29sb3I6amEucmVhZF9zaGlmdCgxKSxMOmphLnJlYWRfc2hpZnQoNCwiaSIpLFI6amEucmVhZF9zaGlmdCg0LCJpIiksQzpqYS5yZWFkX3NoaWZ0KDQs''@;'; put 'put ''ImkiKSxjbHNpZDpqYS5yZWFkX3NoaWZ0KDE2KSxzdGF0ZTpqYS5yZWFkX3NoaWZ0KDQsImkiKSxzdGFydDowLHNpemU6MH07MCE9PWphLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikmJih2YS5jdD1LdChqYSxqYS5sLTgp''@;'; put 'put ''KSwwIT09amEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKSYmKHZhLm10PUt0KGphLGphLmwtOCkpLHZhLnN0YXJ0PWphLnJlYWRfc2hpZnQoNCwiaSIpLHZhLnNpemU9amEucmVhZF9zaGlmdCg0LCJpIiksdmEuc2l6ZTww''@;'; put 'put ''JiZ2YS5zdGFydDwwJiYodmEuc2l6ZT12YS50eXBlPTAsdmEuc3RhcnQ9ZXIsdmEubmFtZT0iIiksNT09PXZhLnR5cGU/KFdyPXZhLnN0YXJ0LG5uPjAmJldyIT09ZXImJihrbltXcl0ubmFtZT0iIVN0cmVhbURhdGEiKSk6dmEuc2l6ZT49NDA5Nj8odmEuc3RvcmFnZT0iZmF0Iix2b2lkIDA9''@;'; put 'put ''PT1rblt2YS5zdGFydF0mJihrblt2YS5zdGFydF09anQod24sdmEuc3RhcnQsa24uZmF0X2FkZHJzLGtuLnNzeikpLGtuW3ZhLnN0YXJ0XS5uYW1lPXZhLm5hbWUsdmEuY29udGVudD1rblt2YS5zdGFydF0uZGF0YS5zbGljZSgwLHZhLnNpemUpKToodmEuc3RvcmFnZT0ibWluaWZhdCIsdmEu''@;'; put 'put ''c2l6ZTwwP3ZhLnNpemU9MDpXciE9PWVyJiZ2YS5zdGFydCE9PWVyJiZrbltXcl0mJih2YS5jb250ZW50PWF0KHZhLGtuW1dyXS5kYXRhLChrblt5cl18fHt9KS5kYXRhKSkpLHZhLmNvbnRlbnQmJm1uKHZhLmNvbnRlbnQsMCkseG5bbm9dPXZhLHpuLnB1c2godmEpfX0pKHpuLHhzLFRvLGMw''@;'; put 'put ''LG5uLHt9LGExLHlyKSxmdW5jdGlvbiBFdChnbixrbix3bil7Zm9yKHZhciBadD0wLG5uPTAseG49MCx6bj0wLHlyPTAsV3I9d24ubGVuZ3RoLG9pPVtdLG5pPVtdO1p0PFdyOysrWnQpb2lbWnRdPW5pW1p0XT1adCxrbltadF09d25bWnRdO2Zvcig7eXI8bmkubGVuZ3RoOysreXIpbm49Z25b''@;'; put 'put ''WnQ9bmlbeXJdXS5MLHhuPWduW1p0XS5SLHpuPWduW1p0XS5DLG9pW1p0XT09PVp0JiYoLTEhPT1ubiYmb2lbbm5dIT09bm4mJihvaVtadF09b2lbbm5dKSwtMSE9PXhuJiZvaVt4bl0hPT14biYmKG9pW1p0XT1vaVt4bl0pKSwtMSE9PXpuJiYob2lbem5dPVp0KSwtMSE9PW5uJiZadCE9b2lb''@;'; put 'put ''WnRdJiYob2lbbm5dPW9pW1p0XSxuaS5sYXN0SW5kZXhPZihubik8eXImJm5pLnB1c2gobm4pKSwtMSE9PXhuJiZadCE9b2lbWnRdJiYob2lbeG5dPW9pW1p0XSxuaS5sYXN0SW5kZXhPZih4bik8eXImJm5pLnB1c2goeG4pKTtmb3IoWnQ9MTtadDxXcjsrK1p0KW9pW1p0XT09PVp0JiYoLTEh''@;'; put 'put ''PT14biYmb2lbeG5dIT09eG4/b2lbWnRdPW9pW3huXTotMSE9PW5uJiZvaVtubl0hPT1ubiYmKG9pW1p0XT1vaVtubl0pKTtmb3IoWnQ9MTtadDxXcjsrK1p0KWlmKDAhPT1nbltadF0udHlwZSl7aWYoKHlyPVp0KSE9b2lbeXJdKWRve2tuW1p0XT1rblt5cj1vaVt5cl1dKyIvIitrbltadF19''@;'; put 'put ''d2hpbGUoMCE9PXlyJiYtMSE9PW9pW3lyXSYmeXIhPW9pW3lyXSk7b2lbWnRdPS0xfWZvcihrblswXSs9Ii8iLFp0PTE7WnQ8V3I7KytadCkyIT09Z25bWnRdLnR5cGUmJihrbltadF0rPSIvIil9KGExLEI4LGMwKSxjMC5zaGlmdCgpO3ZhciBYZz17RmlsZUluZGV4OmExLEZ1bGxQYXRoczpC''@;'; put 'put ''OH07cmV0dXJuIGtuJiZrbi5yYXcmJihYZy5yYXc9e2hlYWRlcjpVaSxzZWN0b3JzOlRvfSksWGd9ZnVuY3Rpb24gYXQoZ24sa24sd24pe2Zvcih2YXIgbm49Z24uc2l6ZSx4bj1bXSx6bj1nbi5zdGFydDt3biYmbm4+MCYmem4+PTA7KXhuLnB1c2goa24uc2xpY2Uoem4qYnIsem4qYnIrYnIp''@;'; put 'put ''KSxubi09YnIsem49VnMod24sNCp6bik7cmV0dXJuIDA9PT14bi5sZW5ndGg/Ym4oMCk6aih4bikuc2xpY2UoMCxnbi5zaXplKX1mdW5jdGlvbiBidChnbixrbix3bixadCxubil7dmFyIHhuPWVyO2lmKGduPT09ZXIpe2lmKDAhPT1rbil0aHJvdyBuZXcgRXJyb3IoIkRJRkFUIGNoYWluIHNo''@;'; put 'put ''b3J0ZXIgdGhhbiBleHBlY3RlZCIpfWVsc2UgaWYoLTEhPT1nbil7dmFyIHpuPXduW2duXSx5cj0oWnQ+Pj4yKS0xO2lmKCF6bilyZXR1cm47Zm9yKHZhciBXcj0wO1dyPHlyJiYoeG49VnMoem4sNCpXcikpIT09ZXI7KytXcilubi5wdXNoKHhuKTtidChWcyh6bixadC00KSxrbi0xLHduLFp0''@;'; put 'put ''LG5uKX19ZnVuY3Rpb24ganQoZ24sa24sd24sWnQsbm4pe3ZhciB4bj1bXSx6bj1bXTtubnx8KG5uPVtdKTt2YXIgeXI9WnQtMSxXcj0wLG9pPTA7Zm9yKFdyPWtuO1dyPj0wOyl7bm5bV3JdPSEwLHhuW3huLmxlbmd0aF09V3Isem4ucHVzaChnbltXcl0pO3ZhciBuaT13bltNYXRoLmZsb29y''@;'; put 'put ''KDQqV3IvWnQpXTtpZihadDw0KyhvaT00KldyJnlyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1dyKyIgNCAiK1p0KTtpZighZ25bbmldKWJyZWFrO1dyPVZzKGduW25pXSxvaSl9cmV0dXJue25vZGVzOnhuLGRhdGE6eTAoW3puXSl9fWZ1bmN0aW9uIEt0KGdu''@;'; put 'put ''LGtuKXtyZXR1cm4gbmV3IERhdGUoMWUzKih6byhnbixrbis0KS8xZTcqTWF0aC5wb3coMiwzMikrem8oZ24sa24pLzFlNy0xMTY0NDQ3MzYwMCkpfWZ1bmN0aW9uIFNuKGduLGtuKXt2YXIgd249a258fHt9LFp0PXduLnJvb3R8fCJSb290IEVudHJ5IjtpZihnbi5GdWxsUGF0aHN8fChnbi5G''@;'; put 'put ''dWxsUGF0aHM9W10pLGduLkZpbGVJbmRleHx8KGduLkZpbGVJbmRleD1bXSksZ24uRnVsbFBhdGhzLmxlbmd0aCE9PWduLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1nbi5GdWxsUGF0aHMubGVuZ3RoJiYoZ24uRnVs''@;'; put 'put ''bFBhdGhzWzBdPVp0KyIvIixnbi5GaWxlSW5kZXhbMF09e25hbWU6WnQsdHlwZTo1fSksd24uQ0xTSUQmJihnbi5GaWxlSW5kZXhbMF0uY2xzaWQ9d24uQ0xTSUQpLGZ1bmN0aW9uIGxyKGduKXt2YXIga249Ilx4MDFTaDMzdEo1IjtpZighdmUuZmluZChnbiwiLyIra24pKXt2YXIgd249Ym4o''@;'; put 'put ''NCk7d25bMF09NTUsd25bMV09d25bM109NTAsd25bMl09NTQsZ24uRmlsZUluZGV4LnB1c2goe25hbWU6a24sdHlwZToyLGNvbnRlbnQ6d24sc2l6ZTo0LEw6NjksUjo2OSxDOjY5fSksZ24uRnVsbFBhdGhzLnB1c2goZ24uRnVsbFBhdGhzWzBdK2tuKSxYbihnbil9fShnbil9ZnVuY3Rpb24g''@;'; put 'put ''WG4oZ24sa24pe1NuKGduKTtmb3IodmFyIHduPSExLFp0PSExLG5uPWduLkZ1bGxQYXRocy5sZW5ndGgtMTtubj49MDstLW5uKXt2YXIgeG49Z24uRmlsZUluZGV4W25uXTtzd2l0Y2goeG4udHlwZSl7Y2FzZSAwOlp0P3duPSEwOihnbi5GaWxlSW5kZXgucG9wKCksZ24uRnVsbFBhdGhzLnBv''@;'; put 'put ''cCgpKTticmVhaztjYXNlIDE6Y2FzZSAyOmNhc2UgNTpadD0hMCxpc05hTih4bi5SKnhuLkwqeG4uQykmJih3bj0hMCkseG4uUj4tMSYmeG4uTD4tMSYmeG4uUj09eG4uTCYmKHduPSEwKTticmVhaztkZWZhdWx0OnduPSEwfX1pZih3bnx8a24pe3ZhciB6bj1uZXcgRGF0ZSgxOTg3LDEsMTkp''@;'; put 'put ''LHlyPTAsV3I9W107Zm9yKG5uPTA7bm48Z24uRnVsbFBhdGhzLmxlbmd0aDsrK25uKTAhPT1nbi5GaWxlSW5kZXhbbm5dLnR5cGUmJldyLnB1c2goW2duLkZ1bGxQYXRoc1tubl0sZ24uRmlsZUluZGV4W25uXV0pO2Zvcihubj0wO25uPFdyLmxlbmd0aDsrK25uKXt2YXIgb2k9RyhXcltubl1b''@;'; put 'put ''MF0pO2ZvcihadD0hMSx5cj0wO3lyPFdyLmxlbmd0aDsrK3lyKVdyW3lyXVswXT09PW9pJiYoWnQ9ITApO1p0fHxXci5wdXNoKFtvaSx7bmFtZTpRKG9pKS5yZXBsYWNlKCIvIiwiIiksdHlwZToxLGNsc2lkOm5hLGN0OnpuLG10OnpuLGNvbnRlbnQ6bnVsbH1dKX1mb3IoV3Iuc29ydChmdW5j''@;'; put 'put ''dGlvbihVaSxubyl7cmV0dXJuIGZ1bmN0aW9uIGsoZ24sa24pe2Zvcih2YXIgd249Z24uc3BsaXQoIi8iKSxadD1rbi5zcGxpdCgiLyIpLG5uPTAseG49MCx6bj1NYXRoLm1pbih3bi5sZW5ndGgsWnQubGVuZ3RoKTtubjx6bjsrK25uKXtpZih4bj13bltubl0ubGVuZ3RoLVp0W25uXS5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIHhuO2lmKHduW25uXSE9WnRbbm5dKXJldHVybiB3bltubl08WnRbbm5dPy0xOjF9cmV0dXJuIHduLmxlbmd0aC1adC5sZW5ndGh9KFVpWzBdLG5vWzBdKX0pLGduLkZ1bGxQYXRocz1bXSxnbi5GaWxlSW5kZXg9W10sbm49MDtubjxXci5sZW5ndGg7Kytubilnbi5GdWxsUGF0''@;'; put 'put ''aHNbbm5dPVdyW25uXVswXSxnbi5GaWxlSW5kZXhbbm5dPVdyW25uXVsxXTtmb3Iobm49MDtubjxXci5sZW5ndGg7Kytubil7dmFyIG5pPWduLkZpbGVJbmRleFtubl0sWGk9Z24uRnVsbFBhdGhzW25uXTtpZihuaS5uYW1lPVEoWGkpLnJlcGxhY2UoIi8iLCIiKSxuaS5MPW5pLlI9bmkuQz0t''@;'; put 'put ''KG5pLmNvbG9yPTEpLG5pLnNpemU9bmkuY29udGVudD9uaS5jb250ZW50Lmxlbmd0aDowLG5pLnN0YXJ0PTAsbmkuY2xzaWQ9bmkuY2xzaWR8fG5hLDA9PT1ubiluaS5DPVdyLmxlbmd0aD4xPzE6LTEsbmkuc2l6ZT0wLG5pLnR5cGU9NTtlbHNlIGlmKCIvIj09WGkuc2xpY2UoLTEpKXtmb3Io''@;'; put 'put ''eXI9bm4rMTt5cjxXci5sZW5ndGgmJkcoZ24uRnVsbFBhdGhzW3lyXSkhPVhpOysreXIpO2ZvcihuaS5DPXlyPj1Xci5sZW5ndGg/LTE6eXIseXI9bm4rMTt5cjxXci5sZW5ndGgmJkcoZ24uRnVsbFBhdGhzW3lyXSkhPUcoWGkpOysreXIpO25pLlI9eXI+PVdyLmxlbmd0aD8tMTp5cixuaS50''@;'; put 'put ''eXBlPTF9ZWxzZSBHKGduLkZ1bGxQYXRoc1tubisxXXx8IiIpPT1HKFhpKSYmKG5pLlI9bm4rMSksbmkudHlwZT0yfX19ZnVuY3Rpb24gQm4oZ24sa24pe3ZhciB3bj1rbnx8e307aWYoWG4oZ24pLCJ6aXAiPT13bi5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24gWW8oZ24sa24pe3ZhciB3bj1r''@;'; put 'put ''bnx8e30sWnQ9W10sbm49W10seG49Ym4oMSksem49d24uY29tcHJlc3Npb24/ODowLHlyPTAsb2k9MCxuaT0wLFhpPTAsVWk9MCxubz1nbi5GdWxsUGF0aHNbMF0samE9bm8sdmE9Z24uRmlsZUluZGV4WzBdLFRvPVtdLHhzPTA7Zm9yKG9pPTE7b2k8Z24uRnVsbFBhdGhzLmxlbmd0aDsrK29p''@;'; put 'put ''KWlmKGphPWduLkZ1bGxQYXRoc1tvaV0uc2xpY2Uobm8ubGVuZ3RoKSwodmE9Z24uRmlsZUluZGV4W29pXSkuc2l6ZSYmdmEuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9amEpe3ZhciByMT1YaSxjMD1ibihqYS5sZW5ndGgpO2ZvcihuaT0wO25pPGphLmxlbmd0aDsrK25pKWMwLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMTI3JmphLmNoYXJDb2RlQXQobmkpKTtjMD1jMC5zbGljZSgwLGMwLmwpLFRvW1VpXT1NZS5idWYodmEuY29udGVudCwwKTt2YXIgYTE9dmEuY29udGVudDs4PT16biYmKGExPWpyKGExKSksKHhuPWJuKDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1MikseG4ud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwyMCkseG4ud3JpdGVfc2hpZnQoMix5cikseG4ud3JpdGVfc2hpZnQoMix6biksdmEubXQ/b2UoeG4sdmEubXQpOnhuLndyaXRlX3NoaWZ0KDQsMCkseG4ud3JpdGVfc2hpZnQoLTQsOCZ5cj8wOlRvW1VpXSkseG4ud3JpdGVfc2hpZnQoNCw4JnlyPzA6YTEubGVuZ3RoKSx4bi53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDgmeXI/MDp2YS5jb250ZW50Lmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoMixjMC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsMCksWGkrPXhuLmxlbmd0aCxadC5wdXNoKHhuKSxYaSs9YzAubGVuZ3RoLFp0LnB1c2goYzApLFhpKz1hMS5sZW5ndGgsWnQucHVzaChhMSksOCZ5ciYm''@;'; put 'put ''KCh4bj1ibigxMikpLndyaXRlX3NoaWZ0KC00LFRvW1VpXSkseG4ud3JpdGVfc2hpZnQoNCxhMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDQsdmEuY29udGVudC5sZW5ndGgpLFhpKz14bi5sLFp0LnB1c2goeG4pKSwoeG49Ym4oNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSx4bi53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMjApLHhuLndyaXRlX3NoaWZ0KDIseXIpLHhuLndyaXRlX3NoaWZ0KDIsem4pLHhuLndyaXRlX3NoaWZ0KDQsMCkseG4ud3JpdGVfc2hpZnQoLTQsVG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LGExLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQo''@;'; put 'put ''NCx2YS5jb250ZW50Lmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoMixjMC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoNCwwKSx4bi53cml0ZV9zaGlmdCg0''@;'; put 'put ''LHIxKSx4cys9eG4ubCxubi5wdXNoKHhuKSx4cys9YzAubGVuZ3RoLG5uLnB1c2goYzApLCsrVWl9cmV0dXJuKHhuPWJuKDIyKSkud3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLFVpKSx4bi53''@;'; put 'put ''cml0ZV9zaGlmdCgyLFVpKSx4bi53cml0ZV9zaGlmdCg0LHhzKSx4bi53cml0ZV9zaGlmdCg0LFhpKSx4bi53cml0ZV9zaGlmdCgyLDApLGooW2ooWnQpLGoobm4pLHhuXSl9KGduLHduKTt2YXIgWnQ9ZnVuY3Rpb24obm8pe2Zvcih2YXIgamE9MCx2YT0wLFRvPTA7VG88bm8uRmlsZUluZGV4''@;'; put 'put ''Lmxlbmd0aDsrK1RvKXt2YXIgeHM9bm8uRmlsZUluZGV4W1RvXTtpZih4cy5jb250ZW50KXt2YXIgcjE9eHMuY29udGVudC5sZW5ndGg7cjE+MCYmKHIxPDQwOTY/amErPXIxKzYzPj42OnZhKz1yMSs1MTE+PjkpfX1mb3IodmFyIGMwPW5vLkZ1bGxQYXRocy5sZW5ndGgrMz4+MixCOD1qYSsx''@;'; put 'put ''Mjc+PjcsWGc9KGphKzc+PjMpK3ZhK2MwK0I4LEpnPVhnKzEyNz4+Nyx4ZT1KZzw9MTA5PzA6TWF0aC5jZWlsKChKZy0xMDkpLzEyNyk7WGcrSmcreGUrMTI3Pj43PkpnOyl4ZT0rK0pnPD0xMDk/MDpNYXRoLmNlaWwoKEpnLTEwOSkvMTI3KTt2YXIgaGg9WzEseGUsSmcsQjgsYzAsdmEsamEs''@;'; put 'put ''MF07cmV0dXJuIG5vLkZpbGVJbmRleFswXS5zaXplPWphPDw2LGhoWzddPShuby5GaWxlSW5kZXhbMF0uc3RhcnQ9aGhbMF0raGhbMV0raGhbMl0raGhbM10raGhbNF0raGhbNV0pKyhoaFs2XSs3Pj4zKSxoaH0oZ24pLG5uPWJuKFp0WzddPDw5KSx4bj0wLHpuPTA7Zm9yKHhuPTA7eG48ODsr''@;'; put 'put ''K3huKW5uLndyaXRlX3NoaWZ0KDEsRmlbeG5dKTtmb3IoeG49MDt4bjw4OysreG4pbm4ud3JpdGVfc2hpZnQoMiwwKTtmb3Iobm4ud3JpdGVfc2hpZnQoMiw2Miksbm4ud3JpdGVfc2hpZnQoMiwzKSxubi53cml0ZV9zaGlmdCgyLDY1NTM0KSxubi53cml0ZV9zaGlmdCgyLDkpLG5uLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsNikseG49MDt4bjwzOysreG4pbm4ud3JpdGVfc2hpZnQoMiwwKTtmb3Iobm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LFp0WzJdKSxubi53cml0ZV9zaGlmdCg0LFp0WzBdK1p0WzFdK1p0WzJdK1p0WzNdLTEpLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCw0MDk2KSxubi53cml0ZV9zaGlmdCg0LFp0WzNdP1p0WzBdK1p0WzFdK1p0WzJdLTE6ZXIpLG5uLndyaXRlX3NoaWZ0KDQsWnRbM10pLG5uLndyaXRlX3NoaWZ0KC00LFp0WzFdP1p0WzBdLTE6ZXIpLG5uLndyaXRlX3NoaWZ0KDQsWnRbMV0pLHhuPTA7eG48MTA5OysreG4p''@;'; put 'put ''bm4ud3JpdGVfc2hpZnQoLTQseG48WnRbMl0/WnRbMV0reG46LTEpO2lmKFp0WzFdKWZvcih6bj0wO3puPFp0WzFdOysrem4pe2Zvcig7eG48MjM2KzEyNyp6bjsrK3huKW5uLndyaXRlX3NoaWZ0KC00LHhuPFp0WzJdP1p0WzFdK3huOi0xKTtubi53cml0ZV9zaGlmdCgtNCx6bj09PVp0WzFd''@;'; put 'put ''LTE/ZXI6em4rMSl9dmFyIHlyPWZ1bmN0aW9uKG5vKXtmb3Ioem4rPW5vO3huPHpuLTE7Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bisxKTtubyYmKCsreG4sbm4ud3JpdGVfc2hpZnQoLTQsZXIpKX07Zm9yKHpuPXhuPTAsem4rPVp0WzFdO3huPHpuOysreG4pbm4ud3JpdGVfc2hpZnQoLTQs''@;'; put 'put ''Y2EuRElGU0VDVCk7Zm9yKHpuKz1adFsyXTt4bjx6bjsrK3huKW5uLndyaXRlX3NoaWZ0KC00LGNhLkZBVFNFQ1QpO3lyKFp0WzNdKSx5cihadFs0XSk7Zm9yKHZhciBXcj0wLG9pPTAsbmk9Z24uRmlsZUluZGV4WzBdO1dyPGduLkZpbGVJbmRleC5sZW5ndGg7KytXcikobmk9Z24uRmlsZUlu''@;'; put 'put ''ZGV4W1dyXSkuY29udGVudCYmISgob2k9bmkuY29udGVudC5sZW5ndGgpPDQwOTYpJiYobmkuc3RhcnQ9em4seXIob2krNTExPj45KSk7Zm9yKHlyKFp0WzZdKzc+PjMpOzUxMSZubi5sOylubi53cml0ZV9zaGlmdCgtNCxjYS5FTkRPRkNIQUlOKTtmb3Ioem49eG49MCxXcj0wO1dyPGduLkZp''@;'; put 'put ''bGVJbmRleC5sZW5ndGg7KytXcikobmk9Z24uRmlsZUluZGV4W1dyXSkuY29udGVudCYmKG9pPW5pLmNvbnRlbnQubGVuZ3RoKSYmIShvaT49NDA5NikmJihuaS5zdGFydD16bix5cihvaSs2Mz4+NikpO2Zvcig7NTExJm5uLmw7KW5uLndyaXRlX3NoaWZ0KC00LGNhLkVORE9GQ0hBSU4pO2Zv''@;'; put 'put ''cih4bj0wO3huPFp0WzRdPDwyOysreG4pe3ZhciBYaT1nbi5GdWxsUGF0aHNbeG5dO2lmKFhpJiYwIT09WGkubGVuZ3RoKXtuaT1nbi5GaWxlSW5kZXhbeG5dLDA9PT14biYmKG5pLnN0YXJ0PW5pLnNpemU/bmkuc3RhcnQtMTplcik7dmFyIFVpPTA9PT14biYmd24ucm9vdHx8bmkubmFtZTtp''@;'; put 'put ''ZihvaT0yKihVaS5sZW5ndGgrMSksbm4ud3JpdGVfc2hpZnQoNjQsVWksInV0ZjE2bGUiKSxubi53cml0ZV9zaGlmdCgyLG9pKSxubi53cml0ZV9zaGlmdCgxLG5pLnR5cGUpLG5uLndyaXRlX3NoaWZ0KDEsbmkuY29sb3IpLG5uLndyaXRlX3NoaWZ0KC00LG5pLkwpLG5uLndyaXRlX3NoaWZ0''@;'; put 'put ''KC00LG5pLlIpLG5uLndyaXRlX3NoaWZ0KC00LG5pLkMpLG5pLmNsc2lkKW5uLndyaXRlX3NoaWZ0KDE2LG5pLmNsc2lkLCJoZXgiKTtlbHNlIGZvcihXcj0wO1dyPDQ7KytXcilubi53cml0ZV9zaGlmdCg0LDApO25uLndyaXRlX3NoaWZ0KDQsbmkuc3RhdGV8fDApLG5uLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCxuaS5zdGFydCksbm4ud3JpdGVfc2hpZnQoNCxuaS5zaXplKSxubi53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9yKFdyPTA7V3I8MTc7KytXcilu''@;'; put 'put ''bi53cml0ZV9zaGlmdCg0LDApO2ZvcihXcj0wO1dyPDM7KytXcilubi53cml0ZV9zaGlmdCg0LC0xKTtmb3IoV3I9MDtXcjwxMjsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsMCl9fWZvcih4bj0xO3huPGduLkZpbGVJbmRleC5sZW5ndGg7Kyt4bilpZigobmk9Z24uRmlsZUluZGV4W3huXSkuc2l6''@;'; put 'put ''ZT49NDA5Nil7Zm9yKG5uLmw9bmkuc3RhcnQrMTw8OSxXcj0wO1dyPG5pLnNpemU7KytXcilubi53cml0ZV9zaGlmdCgxLG5pLmNvbnRlbnRbV3JdKTtmb3IoOzUxMSZXcjsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKHhuPTE7eG48Z24uRmlsZUluZGV4Lmxlbmd0aDsrK3huKWlmKChu''@;'; put 'put ''aT1nbi5GaWxlSW5kZXhbeG5dKS5zaXplPjAmJm5pLnNpemU8NDA5Nil7Zm9yKFdyPTA7V3I8bmkuc2l6ZTsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsbmkuY29udGVudFtXcl0pO2Zvcig7NjMmV3I7KytXcilubi53cml0ZV9zaGlmdCgxLDApfWZvcig7bm4ubDxubi5sZW5ndGg7KW5uLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsMCk7cmV0dXJuIG5ufVIudmVyc2lvbj0iMS4xLjQiO3ZhciBCcixicj02NCxlcj0tMixNaT0iZDBjZjExZTBhMWIxMWFlMSIsRmk9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYsMjI1XSxuYT0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLGNhPXtNQVhSRUdT''@;'; put 'put ''RUNUOi02LERJRlNFQ1Q6LTQsRkFUU0VDVDotMyxFTkRPRkNIQUlOOmVyLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6TWksSEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJRDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6bmEsRW50cnlUeXBlczpbInVua25vd24i''@;'; put 'put ''LCJzdG9yYWdlIiwic3RyZWFtIiwibG9ja2J5dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIGtyKGduKXtmb3IodmFyIGtuPW5ldyBBcnJheShnbi5sZW5ndGgpLHduPTA7d248Z24ubGVuZ3RoOysrd24pa25bd25dPVN0cmluZy5mcm9tQ2hhckNvZGUoZ25bd25dKTtyZXR1cm4g''@;'; put 'put ''a24uam9pbigiIil9ZnVuY3Rpb24ganIoZ24pe3JldHVybiBCcj9Cci5kZWZsYXRlUmF3U3luYyhnbik6R2woZ24pfWZvcih2YXIgZ24sa24sWmk9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLHlpPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3''@;'; put 'put ''LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxfYT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2''@;'; put 'put ''Mzg1LDI0NTc3XSxpYT10eXBlb2YgVWludDhBcnJheTwidSIsTG89aWE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxPYT0wO09hPDI1NjsrK09hKUxvW09hXT0odm9pZCAwLDI1NSYoKGtuPTEzOTUzNiYoKGduPU9hKTw8MXxnbjw8MTEpfDU1ODE0NCYoZ248PDV8Z248PDE1KSk+PjE2fGtuPj44''@;'; put 'put ''fGtuKSk7ZnVuY3Rpb24gaG8oZ24sa24pe3ZhciB3bj1Mb1syNTUmZ25dO3JldHVybiBrbjw9OD93bj4+Pjgta246KHduPXduPDw4fExvW2duPj44JjI1NV0sa248PTE2P3duPj4+MTYta246KHduPXduPDw4fExvW2duPj4xNiYyNTVdKT4+PjI0LWtuKX1mdW5jdGlvbiBKYShnbixrbil7dmFy''@;'; put 'put ''IHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD02PzA6Z25bWnQrMV08PDgpKT4+PnduJjN9ZnVuY3Rpb24gQmkoZ24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9NT8wOmduW1p0KzFdPDw4KSk+Pj53biY3fWZ1bmN0aW9uIFBuKGduLGtu''@;'; put 'put ''KXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTM/MDpnbltadCsxXTw8OCkpPj4+d24mMzF9ZnVuY3Rpb24gV28oZ24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9MT8wOmduW1p0KzFdPDw4KSk+Pj53biYxMjd9ZnVuY3Rpb24g''@;'; put 'put ''aHIoZ24sa24sd24pe3ZhciBadD03JmtuLG5uPWtuPj4+Myx6bj1nbltubl0+Pj5adDtyZXR1cm4gd248OC1adHx8KHpufD1nbltubisxXTw8OC1adCx3bjwxNi1adCl8fCh6bnw9Z25bbm4rMl08PDE2LVp0LHduPDI0LVp0KXx8KHpufD1nbltubiszXTw8MjQtWnQpLHpuJigxPDx3biktMX1m''@;'; put 'put ''dW5jdGlvbiBRbChnbixrbil7dmFyIHduPWduLmxlbmd0aCxadD0yKnduPmtuPzIqd246a24rNSxubj0wO2lmKHduPj1rbilyZXR1cm4gZ247aWYoVGUpe3ZhciB4bj1wKFp0KTtpZihnbi5jb3B5KWduLmNvcHkoeG4pO2Vsc2UgZm9yKDtubjxnbi5sZW5ndGg7Kytubil4bltubl09Z25bbm5d''@;'; put 'put ''O3JldHVybiB4bn1pZihpYSl7dmFyIHpuPW5ldyBVaW50OEFycmF5KFp0KTtpZih6bi5zZXQpem4uc2V0KGduKTtlbHNlIGZvcig7bm48Z24ubGVuZ3RoOysrbm4pem5bbm5dPWduW25uXTtyZXR1cm4gem59cmV0dXJuIGduLmxlbmd0aD1adCxnbn1mdW5jdGlvbiBZbChnbil7Zm9yKHZhciBr''@;'; put 'put ''bj1uZXcgQXJyYXkoZ24pLHduPTA7d248Z247Kyt3bilrblt3bl09MDtyZXR1cm4ga259dmFyIEdsPWZ1bmN0aW9uKCl7dmFyIGduPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHduLFp0KXtmb3IodmFyIG5uPTA7bm48d24ubGVuZ3RoOyl7dmFyIHhuPU1hdGgubWluKDY1NTM1LHduLmxl''@;'; put 'put ''bmd0aC1ubik7Zm9yKFp0LndyaXRlX3NoaWZ0KDEsKyhubit4bj09d24ubGVuZ3RoKSksWnQud3JpdGVfc2hpZnQoMix4biksWnQud3JpdGVfc2hpZnQoMiw2NTUzNSZ+eG4pO3huLS0gPjA7KVp0W1p0LmwrK109d25bbm4rK119cmV0dXJuIFp0Lmx9fSgpO3JldHVybiBmdW5jdGlvbihrbil7''@;'; put 'put ''dmFyIHduPWJuKDUwK01hdGguZmxvb3IoMS4xKmtuLmxlbmd0aCkpLFp0PWduKGtuLHduKTtyZXR1cm4gd24uc2xpY2UoMCxadCl9fSgpO2Z1bmN0aW9uIHl1KGduLGtuLHduKXt2YXIgWnQ9MSxubj0wLHhuPTAsem49MCx5cj0wLFdyPWduLmxlbmd0aCxvaT1pYT9uZXcgVWludDE2QXJyYXko''@;'; put 'put ''MzIpOllsKDMyKTtmb3IoeG49MDt4bjwzMjsrK3huKW9pW3huXT0wO2Zvcih4bj1Xcjt4bjx3bjsrK3huKWduW3huXT0wO1dyPWduLmxlbmd0aDt2YXIgbmk9aWE/bmV3IFVpbnQxNkFycmF5KFdyKTpZbChXcik7Zm9yKHhuPTA7eG48V3I7Kyt4bilvaVtubj1nblt4bl1dKyssWnQ8bm4mJiha''@;'; put 'put ''dD1ubiksbmlbeG5dPTA7Zm9yKG9pWzBdPTAseG49MTt4bjw9WnQ7Kyt4bilvaVt4bisxNl09eXI9eXIrb2lbeG4tMV08PDE7Zm9yKHhuPTA7eG48V3I7Kyt4bikwIT0oeXI9Z25beG5dKSYmKG5pW3huXT1vaVt5cisxNl0rKyk7dmFyIFhpPTA7Zm9yKHhuPTA7eG48V3I7Kyt4bilpZigwIT0o''@;'; put 'put ''WGk9Z25beG5dKSlmb3IoeXI9aG8obmlbeG5dLFp0KT4+WnQtWGksem49KDE8PFp0KzQtWGkpLTE7em4+PTA7LS16bilrblt5cnx6bjw8WGldPTE1JlhpfHhuPDw0O3JldHVybiBadH12YXIgTWw9aWE/bmV3IFVpbnQxNkFycmF5KDUxMik6WWwoNTEyKSxsbj1pYT9uZXcgVWludDE2QXJyYXko''@;'; put 'put ''MzIpOllsKDMyKTtpZighaWEpe2Zvcih2YXIgRW49MDtFbjw1MTI7KytFbilNbFtFbl09MDtmb3IoRW49MDtFbjwzMjsrK0VuKWxuW0VuXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgZ249W10sa249MDtrbjwzMjtrbisrKWduLnB1c2goNSk7eXUoZ24sbG4sMzIpO3ZhciB3bj1bXTtmb3Ioa249''@;'; put 'put ''MDtrbjw9MTQzO2tuKyspd24ucHVzaCg4KTtmb3IoO2tuPD0yNTU7a24rKyl3bi5wdXNoKDkpO2Zvcig7a248PTI3OTtrbisrKXduLnB1c2goNyk7Zm9yKDtrbjw9Mjg3O2tuKyspd24ucHVzaCg4KTt5dSh3bixNbCwyODgpfSgpO3ZhciBVbj1pYT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOlls''@;'; put 'put ''KDMyNzY4KSx4aT1pYT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOllsKDMyNzY4KSxvcj1pYT9uZXcgVWludDE2QXJyYXkoMTI4KTpZbCgxMjgpLE9pPTEsU3I9MTtmdW5jdGlvbiBQaShnbixrbil7dmFyIHduPVBuKGduLGtuKSsyNTcsWnQ9UG4oZ24sa24rPTUpKzEsbm49ZnVuY3Rpb24gSXMo''@;'; put 'put ''Z24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9ND8wOmduW1p0KzFdPDw4KSk+Pj53biYxNX0oZ24sa24rPTUpKzQ7a24rPTQ7Zm9yKHZhciB4bj0wLHpuPWlhP25ldyBVaW50OEFycmF5KDE5KTpZbCgxOSkseXI9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDBdLFdyPTEsb2k9aWE/bmV3IFVpbnQ4QXJyYXkoOCk6WWwoOCksbmk9aWE/bmV3IFVpbnQ4QXJyYXkoOCk6WWwoOCksWGk9em4ubGVuZ3RoLFVpPTA7VWk8bm47KytVaSl6bltaaVtVaV1dPXhuPUJpKGduLGtuKSxXcjx4biYmKFdyPXhuKSxvaVt4bl0rKyxrbis9Mzt2''@;'; put 'put ''YXIgbm89MDtmb3Iob2lbMF09MCxVaT0xO1VpPD1XcjsrK1VpKW5pW1VpXT1ubz1ubytvaVtVaS0xXTw8MTtmb3IoVWk9MDtVaTxYaTsrK1VpKTAhPShubz16bltVaV0pJiYoeXJbVWldPW5pW25vXSsrKTt2YXIgamE9MDtmb3IoVWk9MDtVaTxYaTsrK1VpKWlmKDAhPShqYT16bltVaV0pKXtu''@;'; put 'put ''bz1Mb1t5cltVaV1dPj44LWphO2Zvcih2YXIgdmE9KDE8PDctamEpLTE7dmE+PTA7LS12YSlvcltub3x2YTw8amFdPTcmamF8VWk8PDN9dmFyIFRvPVtdO2ZvcihXcj0xO1RvLmxlbmd0aDx3bitadDspc3dpdGNoKG5vPW9yW1dvKGduLGtuKV0sa24rPTcmbm8sbm8+Pj49Myl7Y2FzZSAxNjpm''@;'; put 'put ''b3IoeG49MytKYShnbixrbiksa24rPTIsbm89VG9bVG8ubGVuZ3RoLTFdO3huLS0gPjA7KVRvLnB1c2gobm8pO2JyZWFrO2Nhc2UgMTc6Zm9yKHhuPTMrQmkoZ24sa24pLGtuKz0zO3huLS0gPjA7KVRvLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoeG49MTErV28oZ24sa24pLGtuKz03O3hu''@;'; put 'put ''LS0gPjA7KVRvLnB1c2goMCk7YnJlYWs7ZGVmYXVsdDpUby5wdXNoKG5vKSxXcjxubyYmKFdyPW5vKX12YXIgeHM9VG8uc2xpY2UoMCx3bikscjE9VG8uc2xpY2Uod24pO2ZvcihVaT13bjtVaTwyODY7KytVaSl4c1tVaV09MDtmb3IoVWk9WnQ7VWk8MzA7KytVaSlyMVtVaV09MDtyZXR1cm4g''@;'; put 'put ''T2k9eXUoeHMsVW4sMjg2KSxTcj15dShyMSx4aSwzMCksa259ZnVuY3Rpb24gSGkoZ24sa24pe3ZhciBadD1mdW5jdGlvbiBaYShnbixrbil7aWYoMz09Z25bMF0mJiEoMyZnblsxXSkpcmV0dXJuW1Yoa24pLDJdO2Zvcih2YXIgd249MCxadD0wLG5uPXAoa258fDE8PDE4KSx4bj0wLHpuPW5u''@;'; put 'put ''Lmxlbmd0aD4+PjAseXI9MCxXcj0wOyEoMSZadCk7KWlmKFp0PUJpKGduLHduKSx3bis9MyxadD4+PjEpZm9yKFp0Pj4+MT09MT8oeXI9OSxXcj01KTood249UGkoZ24sd24pLHlyPU9pLFdyPVNyKSwha24mJnpuPHhuKzMyNzY3JiYoem49KG5uPVFsKG5uLHhuKzMyNzY3KSkubGVuZ3RoKTs7''@;'; put 'put ''KXt2YXIgbmk9aHIoZ24sd24seXIpLFhpPVp0Pj4+MT09MT9NbFtuaV06VW5bbmldO2lmKHduKz0xNSZYaSwoWGk+Pj49NCk+Pj44JjI1NSl7aWYoMjU2PT1YaSlicmVhazt2YXIgVWk9KFhpLT0yNTcpPDg/MDpYaS00Pj4yO1VpPjUmJihVaT0wKTt2YXIgbm89eG4reWlbWGldO1VpPjAmJihu''@;'; put 'put ''bys9aHIoZ24sd24sVWkpLHduKz1VaSksbmk9aHIoZ24sd24sV3IpLHduKz0xNSYoWGk9WnQ+Pj4xPT0xP2xuW25pXTp4aVtuaV0pO3ZhciBqYT0oWGk+Pj49NCk8ND8wOlhpLTI+PjEsdmE9X2FbWGldO2ZvcihqYT4wJiYodmErPWhyKGduLHduLGphKSx3bis9amEpLCFrbiYmem48bm8mJih6''@;'; put 'put ''bj0obm49UWwobm4sbm8pKS5sZW5ndGgpO3huPG5vOylublt4bl09bm5beG4tdmFdLCsreG59ZWxzZSBublt4bisrXT1YaX1lbHNlezcmd24mJih3bis9OC0oNyZ3bikpO3ZhciBvaT1nblt3bj4+PjNdfGduWzErKHduPj4+MyldPDw4O2lmKHduKz0zMiwha24mJnpuPHhuK29pJiYoem49KG5u''@;'; put 'put ''PVFsKG5uLHhuK29pKSkubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgZ24uY29weSlnbi5jb3B5KG5uLHhuLHduPj4+Mywod24+Pj4zKStvaSkseG4rPW9pLHduKz04Km9pO2Vsc2UgZm9yKDtvaS0tID4wOylublt4bisrXT1nblt3bj4+PjNdLHduKz04fXJldHVybltrbj9ubjpubi5zbGlj''@;'; put 'put ''ZSgwLHhuKSx3bis3Pj4+M119KGduLnNsaWNlKGduLmx8fDApLGtuKTtyZXR1cm4gZ24ubCs9WnRbMV0sWnRbMF19ZnVuY3Rpb24gbWEoZ24sa24pe2lmKCFnbil0aHJvdyBuZXcgRXJyb3Ioa24pO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihrbil9ZnVuY3Rpb24gRGkoZ24s''@;'; put 'put ''a24pe3ZhciB3bj1nbjttbih3biwwKTt2YXIgeG49e0ZpbGVJbmRleDpbXSxGdWxsUGF0aHM6W119O1NuKHhuLHtyb290OmtuLnJvb3R9KTtmb3IodmFyIHpuPXduLmxlbmd0aC00Oyg4MCE9d25bem5dfHw3NSE9d25bem4rMV18fDUhPXduW3puKzJdfHw2IT13blt6biszXSkmJnpuPj0wOykt''@;'; put 'put ''LXpuO3duLmw9em4rNCx3bi5sKz00O3ZhciB5cj13bi5yZWFkX3NoaWZ0KDIpO3duLmwrPTY7dmFyIFdyPXduLnJlYWRfc2hpZnQoNCk7Zm9yKHduLmw9V3Isem49MDt6bjx5cjsrK3puKXt3bi5sKz0yMDt2YXIgb2k9d24ucmVhZF9zaGlmdCg0KSxuaT13bi5yZWFkX3NoaWZ0KDQpLFhpPXdu''@;'; put 'put ''LnJlYWRfc2hpZnQoMiksVWk9d24ucmVhZF9zaGlmdCgyKSxubz13bi5yZWFkX3NoaWZ0KDIpO3duLmwrPTg7dmFyIGphPXduLnJlYWRfc2hpZnQoNCksdmE9cGUod24uc2xpY2Uod24ubCtYaSx3bi5sK1hpK1VpKSk7d24ubCs9WGkrVWkrbm87dmFyIFRvPXduLmw7d24ubD1qYSs0LGNzKHdu''@;'; put 'put ''LG9pLG5pLHhuLHZhKSx3bi5sPVRvfXJldHVybiB4bn1mdW5jdGlvbiBjcyhnbixrbix3bixadCxubil7Z24ubCs9Mjt2YXIgeG49Z24ucmVhZF9zaGlmdCgyKSx6bj1nbi5yZWFkX3NoaWZ0KDIpLHlyPWZ1bmN0aW9uIGdlKGduKXt2YXIga249NjU1MzUmZ24ucmVhZF9zaGlmdCgyKSx3bj02''@;'; put 'put ''NTUzNSZnbi5yZWFkX3NoaWZ0KDIpLFp0PW5ldyBEYXRlLG5uPTMxJnduLHhuPTE1Jih3bj4+Pj01KTt3bj4+Pj00LFp0LnNldE1pbGxpc2Vjb25kcygwKSxadC5zZXRGdWxsWWVhcih3bisxOTgwKSxadC5zZXRNb250aCh4bi0xKSxadC5zZXREYXRlKG5uKTt2YXIgem49MzEma24seXI9NjMm''@;'; put 'put ''KGtuPj4+PTUpO3JldHVybiBadC5zZXRIb3Vycyhrbj4+Pj02KSxadC5zZXRNaW51dGVzKHlyKSxadC5zZXRTZWNvbmRzKHpuPDwxKSxadH0oZ24pO2lmKDgyNTcmeG4pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZW5jcnlwdGlvbiIpO2Zvcih2YXIgV3I9Z24ucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxvaT1nbi5yZWFkX3NoaWZ0KDQpLG5pPWduLnJlYWRfc2hpZnQoNCksWGk9Z24ucmVhZF9zaGlmdCgyKSxVaT1nbi5yZWFkX3NoaWZ0KDIpLG5vPSIiLGphPTA7amE8WGk7KytqYSlubys9U3RyaW5nLmZyb21DaGFyQ29kZShnbltnbi5sKytdKTtpZihVaSl7dmFyIHZhPXBlKGduLnNs''@;'; put 'put ''aWNlKGduLmwsZ24ubCtVaSkpOyh2YVsyMTU4OV18fHt9KS5tdCYmKHlyPXZhWzIxNTg5XS5tdCksKChubnx8e30pWzIxNTg5XXx8e30pLm10JiYoeXI9bm5bMjE1ODldLm10KX1nbi5sKz1VaTt2YXIgVG89Z24uc2xpY2UoZ24ubCxnbi5sK29pKTtzd2l0Y2goem4pe2Nhc2UgODpUbz1mdW5j''@;'; put 'put ''dGlvbiBGbihnbixrbil7aWYoIUJyKXJldHVybiBIaShnbixrbik7dmFyIFp0PW5ldygwLEJyLkluZmxhdGVSYXcpLG5uPVp0Ll9wcm9jZXNzQ2h1bmsoZ24uc2xpY2UoZ24ubCksWnQuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIGduLmwrPVp0LmJ5dGVzUmVhZCxubn0oZ24sbmkpO2JyZWFr''@;'; put 'put ''O2Nhc2UgMDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIENvbXByZXNzaW9uIG1ldGhvZCAiK3puKX12YXIgeHM9ITE7OCZ4biYmKDEzNDY5NTc2MD09KFdyPWduLnJlYWRfc2hpZnQoNCkpJiYoV3I9Z24ucmVhZF9zaGlmdCg0KSx4cz0hMCksb2k9Z24u''@;'; put 'put ''cmVhZF9zaGlmdCg0KSxuaT1nbi5yZWFkX3NoaWZ0KDQpKSxvaSE9a24mJm1hKHhzLCJCYWQgY29tcHJlc3NlZCBzaXplOiAiK2tuKyIgIT0gIitvaSksbmkhPXduJiZtYSh4cywiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK3duKyIgIT0gIituaSk7dmFyIHIxPU1lLmJ1ZihUbywwKTsoMHxX''@;'; put 'put ''cikhPSgwfHIxKSYmbWEoeHMsIkJhZCBDUkMzMiBjaGVja3N1bTogIitXcisiICE9ICIrcjEpLF91KFp0LG5vLFRvLHt1bnNhZmU6ITAsbXQ6eXJ9KX1mdW5jdGlvbiBfdShnbixrbix3bixadCl7dmFyIG5uPVp0JiZadC51bnNhZmU7bm58fFNuKGduKTt2YXIgeG49IW5uJiZ2ZS5maW5kKGdu''@;'; put 'put ''LGtuKTtpZigheG4pe3ZhciB6bj1nbi5GdWxsUGF0aHNbMF07a24uc2xpY2UoMCx6bi5sZW5ndGgpPT16bj96bj1rbjooIi8iIT16bi5zbGljZSgtMSkmJih6bis9Ii8iKSx6bj0oem4ra24pLnJlcGxhY2UoIi8vIiwiLyIpKSx4bj17bmFtZTpRKGtuKSx0eXBlOjJ9LGduLkZpbGVJbmRleC5w''@;'; put 'put ''dXNoKHhuKSxnbi5GdWxsUGF0aHMucHVzaCh6biksbm58fHZlLnV0aWxzLmNmYl9nYyhnbil9cmV0dXJuIHhuLmNvbnRlbnQ9d24seG4uc2l6ZT13bj93bi5sZW5ndGg6MCxadCYmKFp0LkNMU0lEJiYoeG4uY2xzaWQ9WnQuQ0xTSUQpLFp0Lm10JiYoeG4ubXQ9WnQubXQpLFp0LmN0JiYoeG4u''@;'; put 'put ''Y3Q9WnQuY3QpKSx4bn1yZXR1cm4gUi5maW5kPWZ1bmN0aW9uIGZyKGduLGtuKXt2YXIgd249Z24uRnVsbFBhdGhzLm1hcChmdW5jdGlvbihXcil7cmV0dXJuIFdyLnRvVXBwZXJDYXNlKCl9KSxadD13bi5tYXAoZnVuY3Rpb24oV3Ipe3ZhciBvaT1Xci5zcGxpdCgiLyIpO3JldHVybiBvaVtv''@;'; put 'put ''aS5sZW5ndGgtKCIvIj09V3Iuc2xpY2UoLTEpPzI6MSldfSksbm49ITE7NDc9PT1rbi5jaGFyQ29kZUF0KDApPyhubj0hMCxrbj13blswXS5zbGljZSgwLC0xKStrbik6bm49LTEhPT1rbi5pbmRleE9mKCIvIik7dmFyIHhuPWtuLnRvVXBwZXJDYXNlKCksem49ITA9PT1ubj93bi5pbmRleE9m''@;'; put 'put ''KHhuKTpadC5pbmRleE9mKHhuKTtpZigtMSE9PXpuKXJldHVybiBnbi5GaWxlSW5kZXhbem5dO3ZhciB5cj0heG4ubWF0Y2gobSk7Zm9yKHhuPXhuLnJlcGxhY2UoRSwiIikseXImJih4bj14bi5yZXBsYWNlKG0sIiEiKSksem49MDt6bjx3bi5sZW5ndGg7Kyt6bilpZigoeXI/d25bem5dLnJl''@;'; put 'put ''cGxhY2UobSwiISIpOnduW3puXSkucmVwbGFjZShFLCIiKT09eG58fCh5cj9adFt6bl0ucmVwbGFjZShtLCIhIik6WnRbem5dKS5yZXBsYWNlKEUsIiIpPT14bilyZXR1cm4gZ24uRmlsZUluZGV4W3puXTtyZXR1cm4gbnVsbH0sUi5yZWFkPWZ1bmN0aW9uIHJyKGduLGtuKXtzd2l0Y2goa24m''@;'; put 'put ''JmtuLnR5cGV8fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBmdW5jdGlvbiBUbihnbixrbil7cmV0dXJuIFBlKCksTmUoeWUucmVhZEZpbGVTeW5jKGduKSxrbil9KGduLGtuKTtjYXNlImJhc2U2NCI6cmV0dXJuIE5lKGIoX2UuZGVjb2RlKGduKSksa24pO2Nhc2UiYmluYXJ5IjpyZXR1''@;'; put 'put ''cm4gTmUoYihnbiksa24pfXJldHVybiBOZShnbixrbil9LFIucGFyc2U9TmUsUi53cml0ZT1mdW5jdGlvbiBWbihnbixrbil7dmFyIHduPUJuKGduLGtuKTtzd2l0Y2goa24mJmtuLnR5cGUpe2Nhc2UiZmlsZSI6cmV0dXJuIFBlKCkseWUud3JpdGVGaWxlU3luYyhrbi5maWxlbmFtZSx3biks''@;'; put 'put ''d247Y2FzZSJiaW5hcnkiOnJldHVybiBrcih3bik7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoa3Iod24pKX1yZXR1cm4gd259LFIud3JpdGVGaWxlPWZ1bmN0aW9uIExpKGduLGtuLHduKXtQZSgpO3ZhciBadD1Cbihnbix3bik7eWUud3JpdGVGaWxlU3luYyhrbixadCl9LFIudXRp''@;'; put 'put ''bHM9e2NmYl9uZXc6ZnVuY3Rpb24geGwoZ24pe3ZhciBrbj17fTtyZXR1cm4gU24oa24sZ24pLGtufSxjZmJfYWRkOl91LGNmYl9kZWw6ZnVuY3Rpb24gRWwoZ24sa24pe1NuKGduKTt2YXIgd249dmUuZmluZChnbixrbik7aWYod24pZm9yKHZhciBadD0wO1p0PGduLkZpbGVJbmRleC5sZW5n''@;'; put 'put ''dGg7KytadClpZihnbi5GaWxlSW5kZXhbWnRdPT13bilyZXR1cm4gZ24uRmlsZUluZGV4LnNwbGljZShadCwxKSxnbi5GdWxsUGF0aHMuc3BsaWNlKFp0LDEpLCEwO3JldHVybiExfSxjZmJfbW92OmZ1bmN0aW9uIEZmKGduLGtuLHduKXtTbihnbik7dmFyIFp0PXZlLmZpbmQoZ24sa24pO2lm''@;'; put 'put ''KFp0KWZvcih2YXIgbm49MDtubjxnbi5GaWxlSW5kZXgubGVuZ3RoOysrbm4paWYoZ24uRmlsZUluZGV4W25uXT09WnQpcmV0dXJuIGduLkZpbGVJbmRleFtubl0ubmFtZT1RKHduKSxnbi5GdWxsUGF0aHNbbm5dPXduLCEwO3JldHVybiExfSxjZmJfZ2M6ZnVuY3Rpb24geWQoZ24pe1huKGdu''@;'; put 'put ''LCEwKX0sUmVhZFNoaWZ0OmpsLENoZWNrRmllbGQ6X24scHJlcF9ibG9iOm1uLGJjb25jYXQ6aix1c2VfemxpYjpmdW5jdGlvbiBfcihnbil7dHJ5e3ZhciB3bj1uZXcoMCxnbi5JbmZsYXRlUmF3KTtpZih3bi5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSx3bi5fZmluaXNo''@;'; put 'put ''Rmx1c2hGbGFnKSwhd24uYnl0ZXNSZWFkKXRocm93IG5ldyBFcnJvcigiemxpYiBkb2VzIG5vdCBleHBvc2UgYnl0ZXNSZWFkIik7QnI9Z259Y2F0Y2goWnQpe2NvbnNvbGUuZXJyb3IoImNhbm5vdCB1c2UgbmF0aXZlIHpsaWI6ICIrKFp0Lm1lc3NhZ2V8fFp0KSl9fSxfZGVmbGF0ZVJhdzpH''@;'; put 'put ''bCxfaW5mbGF0ZVJhdzpIaSxjb25zdHM6Y2F9LFJ9KCk7dHJ5e1hlPXkoODMzMzcpfWNhdGNoe31mdW5jdGlvbiBqZShTKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFM/eChTKTpBcnJheS5pc0FycmF5KFMpP2Z1bmN0aW9uIFQoUyl7aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoUyl9KFMpOlN9ZnVuY3Rpb24gRGUoUyxSLGspe2lmKHR5cGVvZiBYZTwidSImJlhlLndyaXRlRmlsZVN5bmMpcmV0dXJuIGs/WGUud3JpdGVGaWxlU3luYyhTLFIsayk6WGUud3JpdGVGaWxlU3luYyhTLFIpO3Zh''@;'; put 'put ''ciBHPSJ1dGY4Ij09az9OcyhSKTpSO2lmKHR5cGVvZiBJRV9TYXZlRmlsZTwidSIpcmV0dXJuIElFX1NhdmVGaWxlKEcsUyk7aWYodHlwZW9mIEJsb2I8InUiKXt2YXIgUT1uZXcgQmxvYihbamUoRyldLHt0eXBlOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSk7aWYodHlwZW9mIG5hdmln''@;'; put 'put ''YXRvcjwidSImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihRLFMpO2lmKHR5cGVvZiBzYXZlQXM8InUiKXJldHVybiBzYXZlQXMoUSxTKTtpZih0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCYmVVJMLmNyZWF0ZU9iamVjdFVSTCl7dmFyIG9lPVVSTC5jcmVhdGVPYmplY3RVUkwoUSk7aWYoIm9iamVjdCI9PXR5cGVvZiBjaHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJvbWUuZG93bmxvYWRzfHx7fSkuZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVv''@;'; put 'put ''ZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwob2UpfSw2ZTQpLGNocm9tZS5kb3dubG9hZHMuZG93bmxvYWQoe3VybDpvZSxmaWxlbmFtZTpTLHNhdmVBczohMH0pO3ZhciBnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYo''@;'; put 'put ''bnVsbCE9Z2UuZG93bmxvYWQpcmV0dXJuIGdlLmRvd25sb2FkPVMsZ2UuaHJlZj1vZSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGdlKSxnZS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZ2UpLFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYm''@;'; put 'put ''c2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwob2UpfSw2ZTQpLG9lfX1pZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBwZT1GaWxlKFMpO3JldHVybiBwZS5vcGVuKCJ3IikscGUuZW5jb2Rpbmc9ImJpbmFy''@;'; put 'put ''eSIsQXJyYXkuaXNBcnJheShSKSYmKFI9QyhSKSkscGUud3JpdGUoUikscGUuY2xvc2UoKSxSfWNhdGNoKHllKXtpZigheWUubWVzc2FnZXx8IXllLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgeWV9dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2F2ZSBmaWxlICIrUyl9ZnVuY3Rp''@;'; put 'put ''b24gUmUoUyl7Zm9yKHZhciBSPU9iamVjdC5rZXlzKFMpLGs9W10sRz0wO0c8Ui5sZW5ndGg7KytHKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLFJbR10pJiZrLnB1c2goUltHXSk7cmV0dXJuIGt9ZnVuY3Rpb24gSWUoUyxSKXtmb3IodmFyIGs9W10sRz1SZShTKSxR''@;'; put 'put ''PTA7USE9PUcubGVuZ3RoOysrUSludWxsPT1rW1NbR1tRXV1bUl1dJiYoa1tTW0dbUV1dW1JdXT1HW1FdKTtyZXR1cm4ga31mdW5jdGlvbiBWZShTKXtmb3IodmFyIFI9W10saz1SZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRylSW1Nba1tHXV1dPWtbR107cmV0dXJuIFJ9ZnVuY3Rpb24ga2Uo''@;'; put 'put ''Uyl7Zm9yKHZhciBSPVtdLGs9UmUoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpUltTW2tbR11dXT1wYXJzZUludChrW0ddLDEwKTtyZXR1cm4gUn12YXIgUWUsdW4sX3Q9bmV3IERhdGUoMTg5OSwxMSwzMCwwLDAsMCksbnQ9MDtmdW5jdGlvbiB5dCgpe250PV90LmdldFRpbWUoKSs2ZTQqKChu''@;'; put 'put ''ZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKSxRZT1mdW5jdGlvbihSLGspe3ZhciBHPVIuZ2V0VGltZSgpO3JldHVybiBrJiYoRy09MTI2MzE2OGU1KSwoRy1udCkvODY0ZTV9LHVuPWZ1bmN0aW9uKFIpe3ZhciBrPW5ldyBEYXRlO3JldHVybiBr''@;'; put 'put ''LnNldFRpbWUoMjQqUio2MCo2MCoxZTMrbnQpLGt9fWZ1bmN0aW9uIGl0KFMpe3ZhciBSPTAsaz0wLEc9ITEsUT1TLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFRKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigifCIrUysifCBpcyBub3QgYW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgb2U9MTtvZSE9US5sZW5ndGg7KytvZSlpZihRW29lXSl7c3dpdGNoKGs9MSxvZT4zJiYoRz0hMCksUVtvZV0uc2xpY2UoUVtvZV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK1Fbb2VdLnNsaWNlKFFbb2VdLmxlbmd0aC0xKSk7Y2FzZSJEIjprKj0yNDtjYXNlIkgiOmsqPTYwO2Nhc2UiTSI6aWYoIUcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtrKj02MH1S''@;'; put 'put ''Kz1rKnBhcnNlSW50KFFbb2VdLDEwKX1yZXR1cm4gUn15dCgpO3ZhciAkZT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4oJGUuZ2V0RnVsbFllYXIoKSkmJigkZT1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgdHQ9MjAxNz09JGUuZ2V0RnVsbFllYXIoKTtmdW5j''@;'; put 'put ''dGlvbiBIZShTLFIpe3ZhciBrPW5ldyBEYXRlKFMpO2lmKHR0KXJldHVybiBSPjA/ay5zZXRUaW1lKGsuZ2V0VGltZSgpKzYwKmsuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOlI8MCYmay5zZXRUaW1lKGsuZ2V0VGltZSgpLTYwKmsuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLGs7aWYoUyBp''@;'; put 'put ''bnN0YW5jZW9mIERhdGUpcmV0dXJuIFM7aWYoMTkxNz09JGUuZ2V0RnVsbFllYXIoKSYmIWlzTmFOKGsuZ2V0RnVsbFllYXIoKSkpe3ZhciBHPWsuZ2V0RnVsbFllYXIoKTtyZXR1cm4gUy5pbmRleE9mKCIiK0cpPi0xfHxrLnNldEZ1bGxZZWFyKGsuZ2V0RnVsbFllYXIoKSsxMDApLGt9dmFy''@;'; put 'put ''IFE9Uy5tYXRjaCgvXGQrL2cpfHxbIjIwMTciLCIyIiwiMTkiLCIwIiwiMCIsIjAiXSxvZT1uZXcgRGF0ZSgrUVswXSwrUVsxXS0xLCtRWzJdLCtRWzNdfHwwLCtRWzRdfHwwLCtRWzVdfHwwKTtyZXR1cm4gUy5pbmRleE9mKCJaIik+LTEmJihvZT1uZXcgRGF0ZShvZS5nZXRUaW1lKCktNjAq''@;'; put 'put ''b2UuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpKSxvZX1mdW5jdGlvbiB1dChTKXtmb3IodmFyIFI9IiIsaz0wO2shPVMubGVuZ3RoOysraylSKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBSfWZ1bmN0aW9uIHF0KFMpe2lmKCJvYmplY3QiIT10eXBlb2YgU3x8bnVsbD09Uyly''@;'; put 'put ''ZXR1cm4gUztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoUy5nZXRUaW1lKCkpO2lmKEFycmF5LmlzQXJyYXkoUykpcmV0dXJuIGZ1bmN0aW9uIFJ0KFMpe2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aDsrK2spe3ZhciBHPVNba107Im9iamVjdCI9PXR5cGVvZiBHP1Jb''@;'; put 'put ''a109cXQoRyk6bnVsbCE9RyYmKFJba109Ryl9cmV0dXJuIFJ9KFMpO3ZhciBSPXt9O2Zvcih2YXIgayBpbiBTKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLGspJiYoUltrXT1xdChTW2tdKSk7cmV0dXJuIFJ9ZnVuY3Rpb24gUHQoUyxSKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIFJ8fG51bGw9PVIpcmV0dXJuIFM7Zm9yKHZhciBrIGluIFIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsaykmJihTW2tdPXF0KFJba10pKTtyZXR1cm4gU31mdW5jdGlvbiBzaShTLFIpe2Zvcih2YXIgaz0iIjtrLmxlbmd0aDxSOylrKz1TO3JldHVybiBrfWZ1''@;'; put 'put ''bmN0aW9uIFF0KFMpe3ZhciBSPU51bWJlcihTKTtpZighaXNOYU4oUikpcmV0dXJuIGlzRmluaXRlKFIpP1I6TmFOO2lmKCEvXGQvLnRlc3QoUykpcmV0dXJuIFI7dmFyIGs9MSxHPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLCIkMSQyIikucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2Uo''@;'; put 'put ''L1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIGsqPTEwMCwiIn0pO3JldHVybiBpc05hTihSPU51bWJlcihHKSkmJihHPUcucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oUSxvZSl7cmV0dXJuIGs9LWssb2V9KSxpc05hTihSPU51bWJlcihHKSkpP1I6Ui9rfWZ1bmN0aW9uIHNuKFMpe3Zh''@;'; put 'put ''ciBSPW5ldyBEYXRlKFMpLGs9bmV3IERhdGUoTmFOKSxHPVIuZ2V0WWVhcigpLFE9Ui5nZXRNb250aCgpLG9lPVIuZ2V0RGF0ZSgpO3JldHVybiBpc05hTihvZSl8fEc8MHx8Rz44MDk5P2s6KFE+MHx8b2U+MSkmJjEwMSE9R3x8Uy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxh''@;'; put 'put ''cHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pP1I6Uy5tYXRjaCgvW14tMC05OixcL1xcXS8pP2s6Un1mdW5jdGlvbiBSaShTLFIpe2lmKFImJlIucmF3KXJldHVybnt0OiJzIix2OlN9O2lmKCFTKXJldHVybnt0OiJ6In07aWYoIlRSVUUiPT09UylyZXR1cm57dDoiYiIsdjoh''@;'; put 'put ''MH07aWYoIkZBTFNFIj09PVMpcmV0dXJue3Q6ImIiLHY6ITF9O3ZhciBrPSIiLEc9TnVtYmVyKFMpO2lmKGlzRmluaXRlKEcpKXJldHVybnt0OiJuIix2Okd9O2lmKGlzTmFOKEcpJiYvXGQvLnRlc3QoUykpe3ZhciBRPTEsb2U9Uy5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csZnVuY3Rpb24o''@;'; put 'put ''ZXQsY3QsRXQpe3JldHVybiBrfHwoaz0iIywjIzAiKSxjdCtFdH0pLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9cLlxkKi8sZnVuY3Rpb24oZXQpe2t8fChrPSIwIiksays9Ii4iO2Zvcih2YXIgY3Q9MjtjdDw9ZXQubGVuZ3RoOysrY3Qpays9IjAiO3JldHVybiBldH0pLnJlcGxhY2Uo''@;'; put 'put ''L1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIFEqPTEwMCxrfHwoaz0iMCIpLGsrPSIlIiwiIn0pO2lmKCFpc05hTihHPU51bWJlcihvZSkpKXJldHVybnt0OiJuIix2OkcvUSx6Omt9O2lmKG9lPW9lLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKGV0LGN0KXtyZXR1cm4gUT0tUSxjdH0p''@;'; put 'put ''LCFpc05hTihHPU51bWJlcihvZSkpKXJldHVybnt0OiJuIix2OkcvUSx6OihrfHwiMCIpKyJfKTsoIisoa3x8IjAiKSsiKTtAIn19ZTppZighUnx8IVIucmF3RGF0ZXMpe3ZhciBnZT1SJiZSLmNlbGxEYXRlcyxwZT1uZXcgRGF0ZShTKSxQZT1wZS5nZXRZZWFyKCksTmU9cGUuZ2V0TW9udGgo''@;'; put 'put ''KSxZZT1wZS5nZXREYXRlKCk7aWYoaXNOYU4oWWUpfHxQZTwwfHxQZT44MDk5KWJyZWFrIGU7aWYoKE5lPjB8fFllPjEpJiYxMDEhPVBlKXJldHVybnt0OmdlPyJkIjoibiIsdjpnZT9wZTpRZShwZSksejpSLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLnRvTG93ZXJDYXNlKCkubWF0Y2go''@;'; put 'put ''L2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLykpcmV0dXJue3Q6Z2U/ImQiOiJuIix2OmdlP3BlOlFlKHBlKSx6OlIuZGF0ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMubWF0Y2goL1teLTAtOTosXC9cXF0vKSlicmVhayBlO3JldHVybiBwZX1yZXR1cm57''@;'; put 'put ''dDoicyIsdjpTfX12YXIgenQsaG49NT09ImFiYWNhYmEiLnNwbGl0KC8oOj9iKS9pKS5sZW5ndGg7ZnVuY3Rpb24gV3QoUyl7cmV0dXJuIG51bGwhPVMmJiFTfWZ1bmN0aW9uIEF0KFMpe3JldHVybiBTLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Muc2xpY2UoMSl9ZnVuY3Rpb24gUm4oUyl7''@;'; put 'put ''cmV0dXJuIFM/Uy5kYXRhP0ooUy5kYXRhKTpTLmFzTm9kZUJ1ZmZlciYmVGU/SihTLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6Uy5hc0JpbmFyeT9KKFMuYXNCaW5hcnkoKSk6Uy5fZGF0YSYmUy5fZGF0YS5nZXRDb250ZW50P0oodXQoQXJyYXkucHJvdG90eXBlLnNsaWNl''@;'; put 'put ''LmNhbGwoUy5fZGF0YS5nZXRDb250ZW50KCksMCkpKTpTLmNvbnRlbnQmJlMudHlwZT9KKHV0KFMuY29udGVudCkpOm51bGw6bnVsbH1mdW5jdGlvbiBzdChTKXtpZighUylyZXR1cm4gbnVsbDtpZihTLmRhdGEpcmV0dXJuIFkoUy5kYXRhKTtpZihTLmFzTm9kZUJ1ZmZlciYmVGUpcmV0dXJu''@;'; put 'put ''IFMuYXNOb2RlQnVmZmVyKCk7aWYoUy5fZGF0YSYmUy5fZGF0YS5nZXRDb250ZW50KXt2YXIgUj1TLl9kYXRhLmdldENvbnRlbnQoKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFI/WShSKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChSKX1yZXR1cm4gUy5jb250ZW50JiZTLnR5cGU/Uy5j''@;'; put 'put ''b250ZW50Om51bGx9ZnVuY3Rpb24gcmkoUyxSKXtmb3IodmFyIGs9Uy5GdWxsUGF0aHN8fFJlKFMuZmlsZXMpLEc9Ui50b0xvd2VyQ2FzZSgpLFE9Ry5yZXBsYWNlKC9cLy9nLCJcXCIpLG9lPTA7b2U8ay5sZW5ndGg7KytvZSl7dmFyIGdlPWtbb2VdLnRvTG93ZXJDYXNlKCk7aWYoRz09Z2V8''@;'; put 'put ''fFE9PWdlKXJldHVybiBTLmZpbGVzW2tbb2VdXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBXZShTLFIpe3ZhciBrPXJpKFMsUik7aWYobnVsbD09ayl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIitSKyIgaW4gemlwIik7cmV0dXJuIGt9ZnVuY3Rpb24gVHQoUyxSLGspe2lmKCFr''@;'; put 'put ''KXJldHVybiBmdW5jdGlvbiBVdChTKXtyZXR1cm4gUyYmIi5iaW4iPT09Uy5uYW1lLnNsaWNlKC00KT9zdChTKTpSbihTKX0oV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBUdChTLFIpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBucihTLFIsayl7aWYoIWspcmV0''@;'; put 'put ''dXJuIFJuKFdlKFMsUikpO2lmKCFSKXJldHVybiBudWxsO3RyeXtyZXR1cm4gbnIoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gaHQoUyxSLGspe2lmKCFrKXJldHVybiBzdChXZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGh0KFMsUil9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IG51bGx9fWZ1bmN0aW9uIGpuKFMsUixrKXtTLkZ1bGxQYXRocz92ZS51dGlscy5jZmJfYWRkKFMsUixrKTpTLmZpbGUoUixrKX1mdW5jdGlvbiBoaSgpe3JldHVybiB6dD9uZXcgenQ6dmUudXRpbHMuY2ZiX25ldygpfWZ1bmN0aW9uIGNuKFMsUil7dmFyIGs7aWYoenQpc3dpdGNoKFIudHlw''@;'; put 'put ''ZSl7Y2FzZSJiYXNlNjQiOms9bmV3IHp0KFMse2Jhc2U2NDohMH0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlImFycmF5IjprPW5ldyB6dChTLHtiYXNlNjQ6ITF9KTticmVhaztjYXNlImJ1ZmZlciI6az1uZXcgenQoUyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2du''@;'; put 'put ''aXplZCB0eXBlICIrUi50eXBlKX1lbHNlIHN3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjprPXZlLnJlYWQoUyx7dHlwZToiYmFzZTY0In0pO2JyZWFrO2Nhc2UiYmluYXJ5IjprPXZlLnJlYWQoUyx7dHlwZToiYmluYXJ5In0pO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjprPXZl''@;'; put 'put ''LnJlYWQoUyx7dHlwZToiYnVmZmVyIn0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9cmV0dXJuIGt9ZnVuY3Rpb24gZm4oUyxSKXtpZigiLyI9PVMuY2hhckF0KDApKXJldHVybiBTLnNsaWNlKDEpO3ZhciBrPVIuc3BsaXQoIi8i''@;'; put 'put ''KTsiLyIhPVIuc2xpY2UoLTEpJiZrLnBvcCgpO2Zvcih2YXIgRz1TLnNwbGl0KCIvIik7MCE9PUcubGVuZ3RoOyl7dmFyIFE9Ry5zaGlmdCgpOyIuLiI9PT1RP2sucG9wKCk6Ii4iIT09USYmay5wdXNoKFEpfXJldHVybiBrLmpvaW4oIi8iKX10eXBlb2YgSlNaaXBTeW5jPCJ1IiYmKHp0PUpT''@;'; put 'put ''WmlwU3luYyksdWUuZXhwb3J0cyYmdHlwZW9mIHp0PiJ1IiYmKHp0PXkoMzE3OSkpO3ZhciBJaT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLFh0PS8oPzpbXiJccz8+XC9dKylccyo9XHMqKCg/OiIpKD86W14iXSo/KSg/OiIp''@;'; put 'put ''fCg/OicpKD86W14nXSo/KSg/OicpfCg/OlteJyI+XHNdKykpL2csZW49LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO0lpLm1hdGNoKGVuKXx8KGVuPS88W14+XSo+L2cp''@;'; put 'put ''O3ZhciB1YT0vPFx3KjovLEVpPS88KFwvPylcdys6LztmdW5jdGlvbiB2cihTLFIsayl7Zm9yKHZhciBHPXt9LFE9MCxvZT0wO1EhPT1TLmxlbmd0aCYmMzIhPT0ob2U9Uy5jaGFyQ29kZUF0KFEpKSYmMTAhPT1vZSYmMTMhPT1vZTsrK1EpO2lmKFJ8fChHWzBdPVMuc2xpY2UoMCxRKSksUT09''@;'; put 'put ''PVMubGVuZ3RoKXJldHVybiBHO3ZhciBnZT1TLm1hdGNoKFh0KSxwZT0wLHllPSIiLFBlPTAsTmU9IiIsWWU9IiIsZXQ9MTtpZihnZSlmb3IoUGU9MDtQZSE9Z2UubGVuZ3RoOysrUGUpe2ZvcihZZT1nZVtQZV0sb2U9MDtvZSE9WWUubGVuZ3RoJiY2MSE9PVllLmNoYXJDb2RlQXQob2UpOysr''@;'; put 'put ''b2UpO2ZvcihOZT1ZZS5zbGljZSgwLG9lKS50cmltKCk7MzI9PVllLmNoYXJDb2RlQXQob2UrMSk7KSsrb2U7Zm9yKGV0PTM0PT0oUT1ZZS5jaGFyQ29kZUF0KG9lKzEpKXx8Mzk9PVE/MTowLHllPVllLnNsaWNlKG9lKzErZXQsWWUubGVuZ3RoLWV0KSxwZT0wO3BlIT1OZS5sZW5ndGgmJjU4''@;'; put 'put ''IT09TmUuY2hhckNvZGVBdChwZSk7KytwZSk7aWYocGU9PT1OZS5sZW5ndGgpTmUuaW5kZXhPZigiXyIpPjAmJihOZT1OZS5zbGljZSgwLE5lLmluZGV4T2YoIl8iKSkpLEdbTmVdPXllLGt8fChHW05lLnRvTG93ZXJDYXNlKCldPXllKTtlbHNle3ZhciBjdD0oNT09PXBlJiYieG1sbnMiPT09''@;'; put 'put ''TmUuc2xpY2UoMCw1KT8ieG1sbnMiOiIiKStOZS5zbGljZShwZSsxKTtpZihHW2N0XSYmImV4dCI9PU5lLnNsaWNlKHBlLTMscGUpKWNvbnRpbnVlO0dbY3RdPXllLGt8fChHW2N0LnRvTG93ZXJDYXNlKCldPXllKX19cmV0dXJuIEd9ZnVuY3Rpb24gV24oUyl7cmV0dXJuIFMucmVwbGFjZShF''@;'; put 'put ''aSwiPCQxIil9dmFyICRpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sZWk9VmUoJGkpLFFyPWZ1bmN0aW9uKCl7dmFyIFM9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSxSPS9feChbXGRh''@;'; put 'put ''LWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIGsoRyl7dmFyIFE9RysiIixvZT1RLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lmKC0xPT1vZSlyZXR1cm4gUS5yZXBsYWNlKFMsZnVuY3Rpb24ocGUseWUpe3JldHVybiAkaVtwZV18fFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoeWUs''@;'; put 'put ''cGUuaW5kZXhPZigieCIpPi0xPzE2OjEwKSl8fHBlfSkucmVwbGFjZShSLGZ1bmN0aW9uKHBlLHllKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh5ZSwxNikpfSk7dmFyIGdlPVEuaW5kZXhPZigiXV0+Iik7cmV0dXJuIGsoUS5zbGljZSgwLG9lKSkrUS5zbGljZShvZSs5''@;'; put 'put ''LGdlKStrKFEuc2xpY2UoZ2UrMykpfX0oKSxWaT0vWyY8PiciXS9nLE5pPS9bXHUwMDAwLVx1MDAwOFx1MDAwYi1cdTAwMWZdL2csRGE9L194WzAtOWEtZkEtRl17NH1fL2c7ZnVuY3Rpb24gTHIoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2UoRGEsIl94MDA1RiQmIikucmVwbGFjZShWaSxmdW5j''@;'; put 'put ''dGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKE5pLGZ1bmN0aW9uKGspe3JldHVybiJfeCIrKCIwMDAiK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiXyJ9KX1mdW5jdGlvbiBXaShTKXtyZXR1cm4gTHIoUykucmVwbGFjZSgvXG4vZywiX3gwMDBhXyIpfWZ1''@;'; put 'put ''bmN0aW9uIHBhKFMpe3JldHVybiBMcihTKS5yZXBsYWNlKC8gL2csIl94MDAyMF8iKX12YXIgUW49L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uIGxhKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKFZpLGZ1bmN0aW9uKGspe3JldHVybiBlaVtrXX0pLnJlcGxhY2UoL1xuL2csIjxici8+Iiku''@;'; put 'put ''cmVwbGFjZShRbixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IisoIjAwMCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfWZ1bmN0aW9uIHlhKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKFZpLGZ1bmN0aW9uKGspe3JldHVybiBlaVtrXX0pLnJlcGxhY2UoUW4s''@;'; put 'put ''ZnVuY3Rpb24oayl7cmV0dXJuIiYjeCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0pfXZhciBMYT1mdW5jdGlvbigpe3ZhciBTPS8mIyhcZCspOy9nO2Z1bmN0aW9uIFIoayxHKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChHLDEw''@;'; put 'put ''KSl9cmV0dXJuIGZ1bmN0aW9uKEcpe3JldHVybiBHLnJlcGxhY2UoUyxSKX19KCksRmE9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfX0oKTtmdW5jdGlvbiB0aShTKXtzd2l0Y2goUyl7Y2FzZSAxOmNhc2Uh''@;'; put 'put ''MDpjYXNlIjEiOmNhc2UidHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgZ289ZnVuY3Rpb24oUil7Zm9yKHZhciBrPSIiLEc9MCxRPTAsb2U9MCxnZT0wLHBlPTAseWU9MDtHPFIubGVuZ3RoOykoUT1SLmNoYXJDb2RlQXQoRysrKSk8MTI4P2srPVN0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUoUSk6KG9lPVIuY2hhckNvZGVBdChHKyspLFE+MTkxJiZRPDIyND8ocGU9KDMxJlEpPDw2LHBlfD02MyZvZSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBlKSk6KGdlPVIuY2hhckNvZGVBdChHKyspLFE8MjQwP2srPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JlEpPDwx''@;'; put 'put ''MnwoNjMmb2UpPDw2fDYzJmdlKTooeWU9KCg3JlEpPDwxOHwoNjMmb2UpPDwxMnwoNjMmZ2UpPDw2fDYzJihwZT1SLmNoYXJDb2RlQXQoRysrKSkpLTY1NTM2LGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHllPj4+MTAmMTAyMykpLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjAr''@;'; put 'put ''KDEwMjMmeWUpKSkpKTtyZXR1cm4ga30sTnM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBSPVtdLGs9MCxHPTAsUT0wO2s8Uy5sZW5ndGg7KXN3aXRjaChHPVMuY2hhckNvZGVBdChrKyspLCEwKXtjYXNlIEc8MTI4OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKEcpKTticmVhaztjYXNlIEc8MjA0''@;'; put 'put ''ODpSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKEc+PjYpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZHKSkpO2JyZWFrO2Nhc2UgRz49NTUyOTYmJkc8NTczNDQ6Ry09NTUyOTYsUT1TLmNoYXJDb2RlQXQoaysrKS01NjMyMCsoRzw8MTApLFIucHVzaChTdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKDI0MCsoUT4+MTgmNykpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKFE+PjEyJjYzKSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoUT4+NiY2MykpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlEpKSk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDpSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKEc+PjEyKSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoRz4+NiY2MykpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkcpKSl9cmV0dXJuIFIuam9pbigiIil9O2lmKFRlKXt2YXIgYmw9''@;'; put 'put ''ZnVuY3Rpb24oUil7dmFyIEcsUSx5ZSxrPUJ1ZmZlci5hbGxvYygyKlIubGVuZ3RoKSxvZT0xLGdlPTAscGU9MDtmb3IoUT0wO1E8Ui5sZW5ndGg7USs9b2Upb2U9MSwoeWU9Ui5jaGFyQ29kZUF0KFEpKTwxMjg/Rz15ZTp5ZTwyMjQ/KEc9NjQqKDMxJnllKSsoNjMmUi5jaGFyQ29kZUF0KFEr''@;'; put 'put ''MSkpLG9lPTIpOnllPDI0MD8oRz00MDk2KigxNSZ5ZSkrNjQqKDYzJlIuY2hhckNvZGVBdChRKzEpKSsoNjMmUi5jaGFyQ29kZUF0KFErMikpLG9lPTMpOihvZT00LEc9MjYyMTQ0Kig3JnllKSs0MDk2Kig2MyZSLmNoYXJDb2RlQXQoUSsxKSkrNjQqKDYzJlIuY2hhckNvZGVBdChRKzIpKSso''@;'; put 'put ''NjMmUi5jaGFyQ29kZUF0KFErMykpLHBlPTU1Mjk2KygoRy09NjU1MzYpPj4+MTAmMTAyMyksRz01NjMyMCsoMTAyMyZHKSksMCE9PXBlJiYoa1tnZSsrXT0yNTUmcGUsa1tnZSsrXT1wZT4+PjgscGU9MCksa1tnZSsrXT1HJTI1NixrW2dlKytdPUc+Pj44O3JldHVybiBrLnNsaWNlKDAsZ2Up''@;'; put 'put ''LnRvU3RyaW5nKCJ1Y3MyIil9LHB1PSJmb28gYmFyIGJhelx4ZTJceDk4XHg4M1x4ZjBceDlmXHg4ZFx4YTMiO2dvKHB1KT09YmwocHUpJiYoZ289YmwpO3ZhciBMYz1mdW5jdGlvbihSKXtyZXR1cm4gU2UoUiwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX07Z28ocHUpPT1MYyhwdSkmJihn''@;'; put 'put ''bz1MYyksTnM9ZnVuY3Rpb24oUyl7cmV0dXJuIFNlKFMsInV0ZjgiKS50b1N0cmluZygiYmluYXJ5Iil9fXZhciBTLEQwPWZ1bmN0aW9uKCl7dmFyIFM9e307cmV0dXJuIGZ1bmN0aW9uKGssRyl7dmFyIFE9aysifCIrKEd8fCIiKTtyZXR1cm4gU1tRXT9TW1FdOlNbUV09bmV3IFJlZ0V4cCgi''@;'; put 'put ''PCg/Olxcdys6KT8iK2srJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycraysiPiIsR3x8IiIpfX0oKSxpcj0oUz1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxbImFwb3MiLCInIl0sWyJndCIs''@;'; put 'put ''Ij4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oUil7cmV0dXJuW25ldyBSZWdFeHAoIiYiK1JbMF0rIjsiLCJpZyIpLFJbMV1dfSksZnVuY3Rpb24oayl7Zm9yKHZhciBHPWsucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rJC8sIiIp''@;'; put 'put ''LnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLFE9MDtRPFMubGVuZ3RoOysrUSlHPUcucmVwbGFjZShTW1FdWzBdLFNbUV1bMV0pO3JldHVybiBHfSkseGE9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Uz17fTtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIHZvaWQgMCE9PVNba10/U1trXTpTW2tdPW5ldyBSZWdFeHAoIjwoPzp2dDopPyIraysiPihbXFxzXFxTXSo/KTwvKD86dnQ6KT8iK2srIj4iLCJnIil9fSgpLGxpPS88XC8/KD86dnQ6KT92YXJpYW50Pi9nLFZ0PS88KD86dnQ6KShbXj5d''@;'; put 'put ''Kik+KFtcc1xTXSopPC87ZnVuY3Rpb24gSnIoUyxSKXt2YXIgaz12cihTKSxHPVMubWF0Y2goeGEoay5iYXNlVHlwZSkpfHxbXSxRPVtdO2lmKEcubGVuZ3RoIT1rLnNpemUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3IgbGVuZ3RoICIrRy5sZW5ndGgrIiAh''@;'; put 'put ''PSAiK2suc2l6ZSk7cmV0dXJuIFF9cmV0dXJuIEcuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPW9lLnJlcGxhY2UobGksIiIpLm1hdGNoKFZ0KTtnZSYmUS5wdXNoKHt2OmdvKGdlWzJdKSx0OmdlWzFdfSl9KSxRfXZhciBiMD0vKF5cc3xccyR8XG4pLztmdW5jdGlvbiBIYShTLFIpe3Jl''@;'; put 'put ''dHVybiI8IitTKyhSLm1hdGNoKGIwKT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK1IrIjwvIitTKyI+In1mdW5jdGlvbiBSdShTKXtyZXR1cm4gUmUoUykubWFwKGZ1bmN0aW9uKFIpe3JldHVybiIgIitSKyc9IicrU1tSXSsnIid9KS5qb2luKCIiKX1mdW5jdGlvbiBQcihTLFIs''@;'; put 'put ''ayl7cmV0dXJuIjwiK1MrKG51bGwhPWs/UnUoayk6IiIpKyhudWxsIT1SPyhSLm1hdGNoKGIwKT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK1IrIjwvIitTOiIvIikrIj4ifWZ1bmN0aW9uIGNmKFMsUil7dHJ5e3JldHVybiBTLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCov''@;'; put 'put ''LCIiKX1jYXRjaChrKXtpZihSKXRocm93IGt9cmV0dXJuIiJ9dmFyICRoLEtoLFlpPXtkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixt''@;'; put 'put ''eDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2Ui''@;'; put 'put ''LHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLG1haW46WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRzaGVldG1sL21haW4iLCJodHRwOi8vc2No''@;'; put 'put ''ZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2LzIiXX0seWw9e286InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIseDoidXJuOnNjaGVtYXMtbWljcm9z''@;'; put 'put ''b2Z0LWNvbTpvZmZpY2U6ZXhjZWwiLHNzOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRzaGVldCIsZHQ6InV1aWQ6QzJGNDEwMTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIixtdjoiaHR0cDovL21hY1ZtbFNjaGVtYVVyaSIsdjoidXJuOnNjaGVtYXMtbWlj''@;'; put 'put ''cm9zb2Z0LWNvbTp2bWwiLGh0bWw6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSx5MD1mdW5jdGlvbihTKXtmb3IodmFyIFI9W10sRz0wO0c8U1swXS5sZW5ndGg7KytHKWlmKFNbMF1bR10pZm9yKHZhciBRPTAsb2U9U1swXVtHXS5sZW5ndGg7UTxvZTtRKz0xMDI0MClSLnB1''@;'; put 'put ''c2guYXBwbHkoUixTWzBdW0ddLnNsaWNlKFEsUSsxMDI0MCkpO3JldHVybiBSfSxpZz15MCxPbD1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPVtdLFE9UjtRPGs7USs9MilHLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlbyhTLFEpKSk7cmV0dXJuIEcuam9pbigiIikucmVwbGFjZShFLCIi''@;'; put 'put ''KX0sdWY9T2wsc2Q9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxSK2s7KytRKUcucHVzaCgoIjAiK1NbUV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBHLmpvaW4oIiIpfSxkZj1zZCxrMT1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPVtdLFE9UjtRPGs7USsr''@;'; put 'put ''KUcucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFBvKFMsUSkpKTtyZXR1cm4gRy5qb2luKCIiKX0saGY9azEsZWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9LGZmPWVoLEdoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTty''@;'; put 'put ''ZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrLTEpOiIifSxPYz1HaCxOYT1mdW5jdGlvbihTLFIpe3ZhciBrPTIqem8oUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrLTEpOiIifSxEMz1OYTskaD1LaD1mdW5jdGlvbihSLGspe3ZhciBHPXpvKFIsayk7cmV0dXJuIEc+MD9PbChSLGsrNCxr''@;'; put 'put ''KzQrRyk6IiJ9O3ZhciBhbix2aSxxaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQrayk6IiJ9LEFuPXFoO2FuPXZpPWZ1bmN0aW9uKFMsUil7cmV0dXJuIGZ1bmN0aW9uIFFjKFMsUil7Zm9yKHZhciBrPTEtMiooU1tSKzddPj4+NyksRz0oKDEy''@;'; put 'put ''NyZTW1IrN10pPDw0KSsoU1tSKzZdPj4+NCYxNSksUT0xNSZTW1IrNl0sb2U9NTtvZT49MDstLW9lKVE9MjU2KlErU1tSK29lXTtyZXR1cm4gMjA0Nz09Rz8wPT1RP2sqKDEvMCk6TmFOOigwPT1HP0c9LTEwMjI6KEctPTEwMjMsUSs9TWF0aC5wb3coMiw1MikpLGsqTWF0aC5wb3coMixHLTUy''@;'; put 'put ''KSpRKX0oUyxSKX07dmFyIEFyPWZ1bmN0aW9uKFIpe3JldHVybiBBcnJheS5pc0FycmF5KFIpfTtUZSYmKE9sPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFMpP1MudG9TdHJpbmcoInV0ZjE2bGUiLFIsaykucmVwbGFjZShFLCIiKTp1ZihTLFIsayl9LHNkPWZ1bmN0''@;'; put 'put ''aW9uKFMsUixrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFMpP1MudG9TdHJpbmcoImhleCIsUixSK2spOmRmKFMsUixrKX0sZWg9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBmZihSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBHPjA/Ui50''@;'; put 'put ''b1N0cmluZygidXRmOCIsays0LGsrNCtHLTEpOiIifSxHaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIE9jKFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIEc+MD9SLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0ctMSk6IiJ9LE5hPWZ1bmN0''@;'; put 'put ''aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gRDMoUixrKTt2YXIgRz0yKlIucmVhZFVJbnQzMkxFKGspO3JldHVybiBSLnRvU3RyaW5nKCJ1dGYxNmxlIixrKzQsays0K0ctMSl9LCRoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gS2go''@;'; put 'put ''UixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmluZygidXRmMTZsZSIsays0LGsrNCtHKX0scWg9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBBbihSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBSLnRvU3RyaW5n''@;'; put 'put ''KCJ1dGY4IixrKzQsays0K0cpfSxrMT1mdW5jdGlvbihSLGssRyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihSKT9SLnRvU3RyaW5nKCJ1dGY4IixrLEcpOmhmKFIsayxHKX0seTA9ZnVuY3Rpb24oUyl7cmV0dXJuIFNbMF0ubGVuZ3RoPjAmJkJ1ZmZlci5pc0J1ZmZlcihTWzBdWzBdKT9CdWZm''@;'; put 'put ''ZXIuY29uY2F0KFNbMF0pOmlnKFMpfSxqPWZ1bmN0aW9uKFMpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoU1swXSk/QnVmZmVyLmNvbmNhdChTKTpbXS5jb25jYXQuYXBwbHkoW10sUyl9LGFuPWZ1bmN0aW9uKFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihSKT9SLnJlYWREb3VibGVMRShr''@;'; put 'put ''KTp2aShSLGspfSxBcj1mdW5jdGlvbihSKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpfHxBcnJheS5pc0FycmF5KFIpfSksdHlwZW9mIGNwdGFibGU8InUiJiYoT2w9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUixrKSkucmVwbGFj''@;'; put 'put ''ZShFLCIiKX0sazE9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKFIsaykpfSxlaD1mdW5jdGlvbihTLFIpe3ZhciBrPXpvKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShGLFMuc2xpY2UoUis0LFIrNCtrLTEpKToi''@;'; put 'put ''In0sR2g9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoUCxTLnNsaWNlKFIrNCxSKzQray0xKSk6IiJ9LE5hPWZ1bmN0aW9uKFMsUil7dmFyIGs9Mip6byhTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxT''@;'; put 'put ''LnNsaWNlKFIrNCxSKzQray0xKSk6IiJ9LCRoPWZ1bmN0aW9uKFMsUil7dmFyIGs9em8oUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShSKzQsUis0K2spKToiIn0scWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16byhTLFIpO3JldHVybiBrPjA/Y3B0YWJs''@;'; put 'put ''ZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShSKzQsUis0K2spKToiIn0pO3ZhciBQbz1mdW5jdGlvbihTLFIpe3JldHVybiBTW1JdfSxlbz1mdW5jdGlvbihTLFIpe3JldHVybiAyNTYqU1tSKzFdK1NbUl19LG9sPWZ1bmN0aW9uKFMsUil7dmFyIGs9MjU2KlNbUisxXStTW1JdO3JldHVy''@;'; put 'put ''biBrPDMyNzY4P2s6LTEqKDY1NTM1LWsrMSl9LHpvPWZ1bmN0aW9uKFMsUil7cmV0dXJuIFNbUiszXSooMTw8MjQpKyhTW1IrMl08PDE2KSsoU1tSKzFdPDw4KStTW1JdfSxWcz1mdW5jdGlvbihTLFIpe3JldHVybiBTW1IrM108PDI0fFNbUisyXTw8MTZ8U1tSKzFdPDw4fFNbUl19LFNzPWZ1''@;'; put 'put ''bmN0aW9uKFMsUil7cmV0dXJuIFNbUl08PDI0fFNbUisxXTw8MTZ8U1tSKzJdPDw4fFNbUiszXX07ZnVuY3Rpb24gamwoUyxSKXt2YXIgRyxRLGdlLHBlLHllLFBlLGs9IiIsb2U9W107c3dpdGNoKFIpe2Nhc2UiZGJjcyI6aWYoUGU9dGhpcy5sLFRlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykp''@;'; put 'put ''az10aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipTKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKHllPTA7eWU8UzsrK3llKWsrPVN0cmluZy5mcm9tQ2hhckNvZGUoZW8odGhpcyxQZSkpLFBlKz0yO1MqPTI7YnJlYWs7Y2FzZSJ1dGY4IjprPWsxKHRoaXMsdGhpcy5sLHRoaXMubCtT''@;'; put 'put ''KTticmVhaztjYXNlInV0ZjE2bGUiOms9T2wodGhpcyx0aGlzLmwsdGhpcy5sKyhTKj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIGpsLmNhbGwodGhpcyxTLCJkYmNzIik7az1jcHRhYmxlLnV0aWxzLmRlY29kZShQLHRoaXMuc2xpY2UodGhp''@;'; put 'put ''cy5sLHRoaXMubCsyKlMpKSxTKj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6az1laCh0aGlzLHRoaXMubCksUz00K3pvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjprPUdoKHRoaXMsdGhpcy5sKSxTPTQrem8odGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjprPU5h''@;'; put 'put ''KHRoaXMsdGhpcy5sKSxTPTQrMip6byh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0IjpTPTQrem8odGhpcyx0aGlzLmwpLGs9JGgodGhpcyx0aGlzLmwpLDImUyYmKFMrPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOlM9NCt6byh0aGlzLHRoaXMubCksaz1xaCh0aGlzLHRoaXMubCksMyZTJiYo''@;'; put 'put ''Uys9NC0oMyZTKSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoUz0wLGs9IiI7MCE9PShnZT1Qbyh0aGlzLHRoaXMubCtTKyspKTspb2UucHVzaChuZShnZSkpO2s9b2Uuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0oZ2U9ZW8odGhpcyx0aGlzLmwrUykpOylvZS5w''@;'; put 'put ''dXNoKG5lKGdlKSksUys9MjtTKz0yLGs9b2Uuam9pbigiIik7YnJlYWs7Y2FzZSJkYmNzLWNvbnQiOmZvcihrPSIiLFBlPXRoaXMubCx5ZT0wO3llPFM7Kyt5ZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKFBlKSlyZXR1cm4gZ2U9UG8odGhpcyxQZSksdGhpcy5sPVBl''@;'; put 'put ''KzEscGU9amwuY2FsbCh0aGlzLFMteWUsZ2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLG9lLmpvaW4oIiIpK3BlO29lLnB1c2gobmUoZW8odGhpcyxQZSkpKSxQZSs9Mn1rPW9lLmpvaW4oIiIpLFMqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtrPWNwdGFi''@;'; put 'put ''bGUudXRpbHMuZGVjb2RlKFAsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK1MpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKGs9IiIsUGU9dGhpcy5sLHllPTA7eWUhPVM7Kyt5ZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKFBlKSlyZXR1cm4gZ2U9UG8odGhpcyxQ''@;'; put 'put ''ZSksdGhpcy5sPVBlKzEscGU9amwuY2FsbCh0aGlzLFMteWUsZ2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLG9lLmpvaW4oIiIpK3BlO29lLnB1c2gobmUoUG8odGhpcyxQZSkpKSxQZSs9MX1rPW9lLmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKFMpe2Nhc2UgMTpyZXR1cm4gRz1Q''@;'; put 'put ''byh0aGlzLHRoaXMubCksdGhpcy5sKyssRztjYXNlIDI6cmV0dXJuIEc9KCJpIj09PVI/b2w6ZW8pKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTIsRztjYXNlIDQ6Y2FzZS00OnJldHVybiJpIiE9PVImJjEyOCZ0aGlzW3RoaXMubCszXT8oUT16byh0aGlzLHRoaXMubCksdGhpcy5sKz00LFEpOihH''@;'; put 'put ''PShTPjA/VnM6U3MpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsRyk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT1SKXJldHVybiBRPTg9PVM/YW4odGhpcyx0aGlzLmwpOmFuKFt0aGlzW3RoaXMubCs3XSx0aGlzW3RoaXMubCs2XSx0aGlzW3RoaXMubCs1XSx0aGlzW3RoaXMubCs0XSx0aGlzW3Ro''@;'; put 'put ''aXMubCszXSx0aGlzW3RoaXMubCsyXSx0aGlzW3RoaXMubCsxXSx0aGlzW3RoaXMubCswXV0sMCksdGhpcy5sKz04LFE7Uz04O2Nhc2UgMTY6az1zZCh0aGlzLHRoaXMubCxTKX19cmV0dXJuIHRoaXMubCs9UyxrfXZhciBIbz1mdW5jdGlvbihTLFIsayl7U1trXT0yNTUmUixTW2srMV09Uj4+''@;'; put 'put ''PjgmMjU1LFNbaysyXT1SPj4+MTYmMjU1LFNbayszXT1SPj4+MjQmMjU1fSxrbz1mdW5jdGlvbihTLFIsayl7U1trXT0yNTUmUixTW2srMV09Uj4+OCYyNTUsU1trKzJdPVI+PjE2JjI1NSxTW2srM109Uj4+MjQmMjU1fSxTdD1mdW5jdGlvbihTLFIsayl7U1trXT0yNTUmUixTW2srMV09Uj4+''@;'; put 'put ''PjgmMjU1fTtmdW5jdGlvbiBCdChTLFIsayl7dmFyIEc9MCxRPTA7aWYoImRiY3MiPT09ayl7Zm9yKFE9MDtRIT1SLmxlbmd0aDsrK1EpU3QodGhpcyxSLmNoYXJDb2RlQXQoUSksdGhpcy5sKzIqUSk7Rz0yKlIubGVuZ3RofWVsc2UgaWYoInNiY3MiPT09ayl7aWYodHlwZW9mIGNwdGFibGU8''@;'; put 'put ''InUiJiY4NzQ9PUYpZm9yKFE9MDtRIT1SLmxlbmd0aDsrK1Epe3ZhciBvZT1jcHRhYmxlLnV0aWxzLmVuY29kZShGLFIuY2hhckF0KFEpKTt0aGlzW3RoaXMubCtRXT1vZVswXX1lbHNlIGZvcihSPVIucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxRPTA7USE9Ui5sZW5ndGg7KytRKXRo''@;'; put 'put ''aXNbdGhpcy5sK1FdPTI1NSZSLmNoYXJDb2RlQXQoUSk7Rz1SLmxlbmd0aH1lbHNle2lmKCJoZXgiPT09ayl7Zm9yKDtRPFM7KytRKXRoaXNbdGhpcy5sKytdPXBhcnNlSW50KFIuc2xpY2UoMipRLDIqUSsyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09ayl7dmFyIGdlPU1h''@;'; put 'put ''dGgubWluKHRoaXMubCtTLHRoaXMubGVuZ3RoKTtmb3IoUT0wO1E8TWF0aC5taW4oUi5sZW5ndGgsUyk7KytRKXt2YXIgcGU9Ui5jaGFyQ29kZUF0KFEpO3RoaXNbdGhpcy5sKytdPTI1NSZwZSx0aGlzW3RoaXMubCsrXT1wZT4+OH1mb3IoO3RoaXMubDxnZTspdGhpc1t0aGlzLmwrK109MDty''@;'; put 'put ''ZXR1cm4gdGhpc31zd2l0Y2goUyl7Y2FzZSAxOkc9MSx0aGlzW3RoaXMubF09MjU1JlI7YnJlYWs7Y2FzZSAyOkc9Mix0aGlzW3RoaXMubF09MjU1JlIsdGhpc1t0aGlzLmwrMV09MjU1JihSPj4+PTgpO2JyZWFrO2Nhc2UgMzpHPTMsdGhpc1t0aGlzLmxdPTI1NSZSLHRoaXNbdGhpcy5sKzFd''@;'; put 'put ''PTI1NSYoUj4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKFI+Pj49OCk7YnJlYWs7Y2FzZSA0Okc9NCxIbyh0aGlzLFIsdGhpcy5sKTticmVhaztjYXNlIDg6aWYoRz04LCJmIj09PWspeyFmdW5jdGlvbiByZyhTLFIsayl7dmFyIEc9KFI8MHx8MS9SPT0tMS8wPzE6MCk8PDcsUT0wLG9lPTAs''@;'; put 'put ''Z2U9Rz8tUjpSO2lzRmluaXRlKGdlKT8wPT1nZT9RPW9lPTA6KFE9TWF0aC5mbG9vcihNYXRoLmxvZyhnZSkvTWF0aC5MTjIpLG9lPWdlKk1hdGgucG93KDIsNTItUSksUTw9LTEwMjMmJighaXNGaW5pdGUob2UpfHxvZTxNYXRoLnBvdygyLDUyKSk/UT0tMTAyMjoob2UtPU1hdGgucG93KDIs''@;'; put 'put ''NTIpLFErPTEwMjMpKTooUT0yMDQ3LG9lPWlzTmFOKFIpPzI2OTg1OjApO2Zvcih2YXIgcGU9MDtwZTw9NTsrK3BlLG9lLz0yNTYpU1trK3BlXT0yNTUmb2U7U1trKzZdPSgxNSZRKTw8NHwxNSZvZSxTW2srN109UT4+NHxHfSh0aGlzLFIsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nh''@;'; put 'put ''c2UtNDpHPTQsa28odGhpcyxSLHRoaXMubCl9fXJldHVybiB0aGlzLmwrPUcsdGhpc31mdW5jdGlvbiBfbihTLFIpe3ZhciBrPXNkKHRoaXMsdGhpcy5sLFMubGVuZ3RoPj4xKTtpZihrIT09Uyl0aHJvdyBuZXcgRXJyb3IoUisiRXhwZWN0ZWQgIitTKyIgc2F3ICIrayk7dGhpcy5sKz1TLmxl''@;'; put 'put ''bmd0aD4+MX1mdW5jdGlvbiBtbihTLFIpe1MubD1SLFMucmVhZF9zaGlmdD1qbCxTLmNoaz1fbixTLndyaXRlX3NoaWZ0PUJ0fWZ1bmN0aW9uIEluKFMsUil7Uy5sKz1SfWZ1bmN0aW9uIGJuKFMpe3ZhciBSPVYoUyk7cmV0dXJuIG1uKFIsMCksUn1mdW5jdGlvbiB1cihTLFIsayl7aWYoUyl7''@;'; put 'put ''dmFyIEcsUSxvZTttbihTLFMubHx8MCk7Zm9yKHZhciBnZT1TLmxlbmd0aCxwZT0wLHllPTA7Uy5sPGdlOyl7MTI4JihwZT1TLnJlYWRfc2hpZnQoMSkpJiYocGU9KDEyNyZwZSkrKCgxMjcmUy5yZWFkX3NoaWZ0KDEpKTw8NykpO3ZhciBQZT1MOFtwZV18fEw4WzY1NTM1XTtmb3Iob2U9MTI3''@;'; put 'put ''JihHPVMucmVhZF9zaGlmdCgxKSksUT0xO1E8NCYmMTI4Jkc7KytRKW9lKz0oMTI3JihHPVMucmVhZF9zaGlmdCgxKSkpPDw3KlE7eWU9Uy5sK29lO3ZhciBOZT0oUGUuZnx8SW4pKFMsb2Usayk7aWYoUy5sPXllLFIoTmUsUGUubixwZSkpcmV0dXJufX19ZnVuY3Rpb24gYmkoKXt2YXIgUz1b''@;'; put 'put ''XSxSPVRlPzI1NjoyMDQ4LGs9ZnVuY3Rpb24oUGUpe3ZhciBOZT1ibihQZSk7cmV0dXJuIG1uKE5lLDApLE5lfSxHPWsoUiksUT1mdW5jdGlvbigpe0cmJihHLmxlbmd0aD5HLmwmJigoRz1HLnNsaWNlKDAsRy5sKSkubD1HLmxlbmd0aCksRy5sZW5ndGg+MCYmUy5wdXNoKEcpLEc9bnVsbCl9''@;'; put 'put ''LG9lPWZ1bmN0aW9uKFBlKXtyZXR1cm4gRyYmUGU8Ry5sZW5ndGgtRy5sP0c6KFEoKSxHPWsoTWF0aC5tYXgoUGUrMSxSKSkpfTtyZXR1cm57bmV4dDpvZSxwdXNoOmZ1bmN0aW9uKFBlKXtRKCksbnVsbD09KEc9UGUpLmwmJihHLmw9Ry5sZW5ndGgpLG9lKFIpfSxlbmQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gUSgpLHkwKFtTXSl9LF9idWZzOlN9fWZ1bmN0aW9uIEZyKFMsUixrLEcpe3ZhciBvZSxRPStIeltSXTtpZighaXNOYU4oUSkpe0d8fChHPUw4W1FdLnB8fChrfHxbXSkubGVuZ3RofHwwKSxvZT0xKyhRPj0xMjg/MTowKSsxLEc+PTEyOCYmKytvZSxHPj0xNjM4NCYmKytvZSxHPj0y''@;'; put 'put ''MDk3MTUyJiYrK29lO3ZhciBnZT1TLm5leHQob2UpO1E8PTEyNz9nZS53cml0ZV9zaGlmdCgxLFEpOihnZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JlEpKSxnZS53cml0ZV9zaGlmdCgxLFE+PjcpKTtmb3IodmFyIHBlPTA7NCE9cGU7KytwZSl7aWYoIShHPj0xMjgpKXtnZS53cml0ZV9zaGlm''@;'; put 'put ''dCgxLEcpO2JyZWFrfWdlLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmRykpLEc+Pj03fUc+MCYmQXIoaykmJlMucHVzaChrKX19ZnVuY3Rpb24gdGEoUyxSLGspe3ZhciBHPXF0KFMpO2lmKFIucz8oRy5jUmVsJiYoRy5jKz1SLnMuYyksRy5yUmVsJiYoRy5yKz1SLnMucikpOihHLmNSZWwmJihH''@;'; put 'put ''LmMrPVIuYyksRy5yUmVsJiYoRy5yKz1SLnIpKSwha3x8ay5iaWZmPDEyKXtmb3IoO0cuYz49MjU2OylHLmMtPTI1Njtmb3IoO0cucj49NjU1MzY7KUcuci09NjU1MzZ9cmV0dXJuIEd9ZnVuY3Rpb24gb2EoUyxSLGspe3ZhciBHPXF0KFMpO3JldHVybiBHLnM9dGEoRy5zLFIucyxrKSxHLmU9''@;'; put 'put ''dGEoRy5lLFIucyxrKSxHfWZ1bmN0aW9uIFZhKFMsUil7aWYoUy5jUmVsJiZTLmM8MClmb3IoUz1xdChTKTtTLmM8MDspUy5jKz1SPjg/MTYzODQ6MjU2O2lmKFMuclJlbCYmUy5yPDApZm9yKFM9cXQoUyk7Uy5yPDA7KVMucis9Uj44PzEwNDg1NzY6Uj41PzY1NTM2OjE2Mzg0O2lmKFMuY1Jl''@;'; put 'put ''bCYmUy5jPj0oUj44PzE2Mzg0OjI1NikpZm9yKFM9cXQoUyk7Uy5jPj0oUj44PzE2Mzg0OjI1Nik7KVMuYy09Uj44PzE2Mzg0OjI1NjtpZihTLnJSZWwmJlMucj49MTA0ODU3Nilmb3IoUz1xdChTKTtTLnI+PTEwNDg1NzY7KVMuci09MTA0ODU3Njt2YXIgaz1xaShTKTtyZXR1cm4hUy5jUmVs''@;'; put 'put ''JiZudWxsIT1TLmNSZWwmJihrPWZ1bmN0aW9uIFhoKFMpe3JldHVybiBTLnJlcGxhY2UoL14oW0EtWl0pLywiJCQkMSIpfShrKSksIVMuclJlbCYmbnVsbCE9Uy5yUmVsJiYoaz1mdW5jdGlvbiBQYyhTKXtyZXR1cm4gUy5yZXBsYWNlKC8oW0EtWl18XikoXGQrKSQvLCIkMSQkJDIiKX0oaykp''@;'; put 'put ''LGt9ZnVuY3Rpb24gJG8oUyxSKXtyZXR1cm4gMCE9Uy5zLnJ8fFMucy5yUmVsfHxTLmUuciE9KFIuYmlmZj49MTI/MTA0ODU3NTpSLmJpZmY+PTg/NjU1MzY6MTYzODQpfHxTLmUuclJlbD8wIT1TLnMuY3x8Uy5zLmNSZWx8fFMuZS5jIT0oUi5iaWZmPj0xMj8xNjM4MzoyNTUpfHxTLmUuY1Jl''@;'; put 'put ''bD9WYShTLnMsUi5iaWZmKSsiOiIrVmEoUy5lLFIuYmlmZik6KFMucy5yUmVsPyIiOiIkIikramkoUy5zLnIpKyI6IisoUy5lLnJSZWw/IiI6IiQiKStqaShTLmUucik6KFMucy5jUmVsPyIiOiIkIikrVGEoUy5zLmMpKyI6IisoUy5lLmNSZWw/IiI6IiQiKStUYShTLmUuYyl9dmFyIFhsPXt9''@;'; put 'put ''O2Z1bmN0aW9uIF9vKFMpe3JldHVybiBwYXJzZUludChmdW5jdGlvbiB6bChTKXtyZXR1cm4gUy5yZXBsYWNlKC9cJChcZCspJC8sIiQxIil9KFMpLDEwKS0xfWZ1bmN0aW9uIGppKFMpe3JldHVybiIiKyhTKzEpfWZ1bmN0aW9uIENhKFMpe2Zvcih2YXIgUj1mdW5jdGlvbiBHMChTKXtyZXR1''@;'; put 'put ''cm4gUy5yZXBsYWNlKC9eXCQoW0EtWl0pLywiJDEiKX0oUyksaz0wLEc9MDtHIT09Ui5sZW5ndGg7KytHKWs9MjYqaytSLmNoYXJDb2RlQXQoRyktNjQ7cmV0dXJuIGstMX1mdW5jdGlvbiBUYShTKXtpZihTPDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbHVtbiAiK1MpO3ZhciBSPSIi''@;'; put 'put ''O2ZvcigrK1M7UztTPU1hdGguZmxvb3IoKFMtMSkvMjYpKVI9U3RyaW5nLmZyb21DaGFyQ29kZSgoUy0xKSUyNis2NSkrUjtyZXR1cm4gUn1mdW5jdGlvbiBObyhTKXtmb3IodmFyIFI9MCxrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIgUT1TLmNoYXJDb2RlQXQoRyk7UT49NDgmJlE8PTU3''@;'; put 'put ''P1I9MTAqUisoUS00OCk6UT49NjUmJlE8PTkwJiYoaz0yNiprKyhRLTY0KSl9cmV0dXJue2M6ay0xLHI6Ui0xfX1mdW5jdGlvbiBxaShTKXtmb3IodmFyIFI9Uy5jKzEsaz0iIjtSO1I9KFItMSkvMjZ8MClrPVN0cmluZy5mcm9tQ2hhckNvZGUoKFItMSklMjYrNjUpK2s7cmV0dXJuIGsrKFMu''@;'; put 'put ''cisxKX1mdW5jdGlvbiBNcyhTKXt2YXIgUj1TLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09Uj97czpObyhTKSxlOk5vKFMpfTp7czpObyhTLnNsaWNlKDAsUikpLGU6Tm8oUy5zbGljZShSKzEpKX19ZnVuY3Rpb24gcmEoUyxSKXtyZXR1cm4gdHlwZW9mIFI+InUifHwibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IFI/cmEoUy5zLFMuZSk6KCJzdHJpbmciIT10eXBlb2YgUyYmKFM9cWkoUykpLCJzdHJpbmciIT10eXBlb2YgUiYmKFI9cWkoUikpLFM9PVI/UzpTKyI6IitSKX1mdW5jdGlvbiBvbyhTKXt2YXIgUj1KU09OLnBhcnNlKCd7InMiOnsiYyI6MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19Jyks''@;'; put 'put ''az0wLEc9MCxRPTAsb2U9Uy5sZW5ndGg7Zm9yKGs9MDtHPG9lJiYhKChRPVMuY2hhckNvZGVBdChHKS02NCk8MXx8UT4yNik7KytHKWs9MjYqaytRO2ZvcihSLnMuYz0tLWssaz0wO0c8b2UmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTQ4KTwwfHxRPjkpOysrRylrPTEwKmsrUTtpZihSLnMucj0t''@;'; put 'put ''LWssRz09PW9lfHw1OD09PVMuY2hhckNvZGVBdCgrK0cpKXJldHVybiBSLmUuYz1SLnMuYyxSLmUucj1SLnMucixSO2ZvcihrPTA7RyE9b2UmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTY0KTwxfHxRPjI2KTsrK0cpaz0yNiprK1E7Zm9yKFIuZS5jPS0tayxrPTA7RyE9b2UmJiEoKFE9Uy5jaGFy''@;'; put 'put ''Q29kZUF0KEcpLTQ4KTwwfHxRPjkpOysrRylrPTEwKmsrUTtyZXR1cm4gUi5lLnI9LS1rLFJ9ZnVuY3Rpb24gYWcoUyxSKXt2YXIgaz0iZCI9PVMudCYmUiBpbnN0YW5jZW9mIERhdGU7aWYobnVsbCE9Uy56KXRyeXtyZXR1cm4gUy53PUEuZm9ybWF0KFMueixrP1FlKFIpOlIpfWNhdGNoe310''@;'; put 'put ''cnl7cmV0dXJuIFMudz1BLmZvcm1hdCgoUy5YRnx8e30pLm51bUZtdElkfHwoaz8xNDowKSxrP1FlKFIpOlIpfWNhdGNoe3JldHVybiIiK1J9fWZ1bmN0aW9uIF9sKFMsUixrKXtyZXR1cm4gbnVsbD09U3x8bnVsbD09Uy50fHwieiI9PVMudD8iIjp2b2lkIDAhPT1TLnc/Uy53OigiZCI9PVMu''@;'; put 'put ''dCYmIVMueiYmayYmay5kYXRlTkYmJihTLno9ay5kYXRlTkYpLCJlIj09Uy50P01jW1Mudl18fFMudjphZyhTLG51bGw9PVI/Uy52OlIpKX1mdW5jdGlvbiB0aChTLFIpe3ZhciBrPVImJlIuc2hlZXQ/Ui5zaGVldDoiU2hlZXQxIixHPXt9O3JldHVybiBHW2tdPVMse1NoZWV0TmFtZXM6W2td''@;'; put 'put ''LFNoZWV0czpHfX1mdW5jdGlvbiBmNChTLFIsayl7dmFyIEc9a3x8e30sUT1TP0FycmF5LmlzQXJyYXkoUyk6Ry5kZW5zZTtudWxsIT1sZSYmbnVsbD09USYmKFE9bGUpO3ZhciBvZT1TfHwoUT9bXTp7fSksZ2U9MCxwZT0wO2lmKG9lJiZudWxsIT1HLm9yaWdpbil7aWYoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBHLm9yaWdpbilnZT1HLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIEcub3JpZ2luP05vKEcub3JpZ2luKTpHLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9b2VbIiFyZWYiXXx8KG9lWyIhcmVmIl09IkExOkExIil9dmFyIFBlPXtzOntjOjFlNyxyOjFlN30sZTp7Yzow''@;'; put 'put ''LHI6MH19O2lmKG9lWyIhcmVmIl0pe3ZhciBOZT1vbyhvZVsiIXJlZiJdKTtQZS5zLmM9TmUucy5jLFBlLnMucj1OZS5zLnIsUGUuZS5jPU1hdGgubWF4KFBlLmUuYyxOZS5lLmMpLFBlLmUucj1NYXRoLm1heChQZS5lLnIsTmUuZS5yKSwtMT09Z2UmJihQZS5lLnI9Z2U9TmUuZS5yKzEpfWZv''@;'; put 'put ''cih2YXIgWWU9MDtZZSE9Ui5sZW5ndGg7KytZZSlpZihSW1llXSl7aWYoIUFycmF5LmlzQXJyYXkoUltZZV0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMgYW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciBldD0wO2V0IT1SW1llXS5sZW5ndGg7KytldClpZighKHR5''@;'; put 'put ''cGVvZiBSW1llXVtldF0+InUiKSl7dmFyIGN0PXt2OlJbWWVdW2V0XX0sRXQ9Z2UrWWUsYXQ9cGUrZXQ7aWYoUGUucy5yPkV0JiYoUGUucy5yPUV0KSxQZS5zLmM+YXQmJihQZS5zLmM9YXQpLFBlLmUucjxFdCYmKFBlLmUucj1FdCksUGUuZS5jPGF0JiYoUGUuZS5jPWF0KSwhUltZZV1bZXRd''@;'; put 'put ''fHwib2JqZWN0IiE9dHlwZW9mIFJbWWVdW2V0XXx8QXJyYXkuaXNBcnJheShSW1llXVtldF0pfHxSW1llXVtldF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShjdC52KSYmKGN0LmY9UltZZV1bZXRdWzFdLGN0LnY9Y3QudlswXSksbnVsbD09PWN0LnYpaWYoY3QuZiljdC50PSJu''@;'; put 'put ''IjtlbHNlIGlmKEcubnVsbEVycm9yKWN0LnQ9ImUiLGN0LnY9MDtlbHNle2lmKCFHLnNoZWV0U3R1YnMpY29udGludWU7Y3QudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgY3Qudj9jdC50PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBjdC52P2N0LnQ9ImIiOmN0LnYgaW5zdGFuY2VvZiBEYXRl''@;'; put 'put ''PyhjdC56PUcuZGF0ZU5GfHxBLl90YWJsZVsxNF0sRy5jZWxsRGF0ZXM/KGN0LnQ9ImQiLGN0Lnc9QS5mb3JtYXQoY3QueixRZShjdC52KSkpOihjdC50PSJuIixjdC52PVFlKGN0LnYpLGN0Lnc9QS5mb3JtYXQoY3QueixjdC52KSkpOmN0LnQ9InMiO2Vsc2UgY3Q9UltZZV1bZXRdO2lmKGN0''@;'; put 'put ''JiZjdC5oKXRyeXtjdC5SPW1kLmh0bWxfdG9fcnMoY3QuaCksY3Qudj0iIjtmb3IodmFyIGJ0PTA7YnQ8Y3QuUi5sZW5ndGg7KytidCljdC52Kz1jdC5SW2J0XS52fHwiIn1jYXRjaHt9aWYoUSlvZVtFdF18fChvZVtFdF09W10pLG9lW0V0XVthdF0mJm9lW0V0XVthdF0ucyYmKGN0LnM9b2Vb''@;'; put 'put ''RXRdW2F0XS5zKSxvZVtFdF1bYXRdJiZvZVtFdF1bYXRdLnomJihjdC56PW9lW0V0XVthdF0ueiksb2VbRXRdW2F0XT1jdDtlbHNle3ZhciBqdD1xaSh7YzphdCxyOkV0fSk7b2VbanRdJiZvZVtqdF0ucyYmKGN0LnM9b2VbanRdLnMpLG9lW2p0XSYmb2VbanRdLnomJihjdC56PW9lW2p0XS56''@;'; put 'put ''KSxvZVtqdF09Y3R9fX1yZXR1cm4gUGUucy5jPDFlNyYmKG9lWyIhcmVmIl09cmEoUGUpKSxvZX1mdW5jdGlvbiBwNChTLFIpe3JldHVybiBmNChudWxsLFMsUil9ZnVuY3Rpb24gSzAoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoNCxTKSxSfWZ1bmN0aW9uIGd1KFMp''@;'; put 'put ''e3ZhciBSPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsImRiY3MiKX1mdW5jdGlvbiBGYyhTLFIpe3ZhciBrPSExO3JldHVybiBudWxsPT1SJiYoaz0hMCxSPWJuKDQrMipTLmxlbmd0aCkpLFIud3JpdGVfc2hpZnQoNCxTLmxlbmd0aCksUy5sZW5ndGg+''@;'; put 'put ''MCYmUi53cml0ZV9zaGlmdCgwLFMsImRiY3MiKSxrP1Iuc2xpY2UoMCxSLmwpOlJ9ZnVuY3Rpb24gUncoUyl7cmV0dXJue2ljaDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHNsKFMsUil7dmFyIGs9Uy5sLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9Z3UoUyks''@;'; put 'put ''b2U9W10sZ2U9e3Q6USxoOlF9O2lmKDEmRyl7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCkseWU9MDt5ZSE9cGU7Kyt5ZSlvZS5wdXNoKFJ3KFMpKTtnZS5yPW9lfWVsc2UgZ2Uucj1be2ljaDowLGlmbnQ6MH1dO3JldHVybiBTLmw9aytSLGdlfSFmdW5jdGlvbihTLFIpe3ZhciBrO2lmKHR5''@;'; put 'put ''cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilrPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgUjwidSIpaz1SO2Vsc2UgdHJ5e2s9eSg5MTQyNil9Y2F0Y2h7az1udWxsfVMucmM0PWZ1bmN0aW9uKEcsUSl7dmFyIG9lPW5ldyBBcnJheSgyNTYpLGdlPTAscGU9MCx5ZT0wLFBlPTA7''@;'; put 'put ''Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKW9lW3BlXT1wZTtmb3IocGU9MDsyNTYhPXBlOysrcGUpeWU9eWUrb2VbcGVdK0dbcGUlRy5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1LFBlPW9lW3BlXSxvZVtwZV09b2VbeWVdLG9lW3llXT1QZTtwZT15ZT0wO3ZhciBOZT1WKFEubGVuZ3RoKTtmb3Io''@;'; put 'put ''Z2U9MDtnZSE9US5sZW5ndGg7KytnZSlQZT1vZVtwZT1wZSsxJjI1NV0sb2VbcGVdPW9lW3llPSh5ZStvZVtwZV0pJTI1Nl0sb2VbeWVdPVBlLE5lW2dlXT1RW2dlXV5vZVtvZVtwZV0rb2VbeWVdJjI1NV07cmV0dXJuIE5lfSxTLm1kNT1mdW5jdGlvbihHKXtpZighayl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIGNyeXB0byIpO3JldHVybiBrLmNyZWF0ZUhhc2goIm1kNSIpLnVwZGF0ZShCdWZmZXIuZnJvbShHKSkuZGlnZXN0KCJoZXgiKX19KFhsLHR5cGVvZiBjcnlwdG88InUiP2NyeXB0bzp2b2lkIDApO3ZhciBMdz1zbDtmdW5jdGlvbiBEMShTKXt2YXIgUj1TLnJlYWRf''@;'; put 'put ''c2hpZnQoNCksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsrPVMucmVhZF9zaGlmdCgxKTw8MTYsUy5sKysse2M6UixpU3R5bGVSZWY6a319ZnVuY3Rpb24geHIoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oOCkpLFIud3JpdGVfc2hpZnQoLTQsUy5jKSxSLndyaXRlX3NoaWZ0KDMsUy5p''@;'; put 'put ''U3R5bGVSZWZ8fFMucyksUi53cml0ZV9zaGlmdCgxLDApLFJ9ZnVuY3Rpb24gSmgoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBSKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOi0xLGlTdHlsZVJlZjpSfX1mdW5jdGlvbiBmaShTLFIpe3JldHVybiBudWxsPT1SJiYoUj1i''@;'; put 'put ''big0KSksUi53cml0ZV9zaGlmdCgzLFMuaVN0eWxlUmVmfHxTLnMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfXZhciBvZz1ndSxzZz1GYztmdW5jdGlvbiB0MChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1SfHw0Mjk0OTY3Mjk1PT09Uj8iIjpTLnJlYWRfc2hpZnQoUiwiZGJj''@;'; put 'put ''cyIpfWZ1bmN0aW9uIHBmKFMsUil7dmFyIGs9ITE7cmV0dXJuIG51bGw9PVImJihrPSEwLFI9Ym4oMTI3KSksUi53cml0ZV9zaGlmdCg0LFMubGVuZ3RoPjA/Uy5sZW5ndGg6NDI5NDk2NzI5NSksUy5sZW5ndGg+MCYmUi53cml0ZV9zaGlmdCgwLFMsImRiY3MiKSxrP1Iuc2xpY2UoMCxSLmwp''@;'; put 'put ''OlJ9dmFyIGxnPWd1LGc0PXQwLGNnPXBmO2Z1bmN0aW9uIEkxKFMpe3ZhciBSPVMuc2xpY2UoUy5sLFMubCs0KSxrPTEmUlswXSxHPTImUlswXTtTLmwrPTQsUlswXSY9MjUyO3ZhciBRPTA9PT1HP2FuKFswLDAsMCwwLFJbMF0sUlsxXSxSWzJdLFJbM11dLDApOlZzKFIsMCk+PjI7cmV0dXJu''@;'; put 'put ''IGs/US8xMDA6UX1mdW5jdGlvbiBjdihTLFIpe251bGw9PVImJihSPWJuKDQpKTt2YXIgaz0wLEc9MCxRPTEwMCpTO2lmKFM9PSgwfFMpJiZTPj0tKDE8PDI5KSYmUzwxPDwyOT9HPTE6UT09KDB8USkmJlE+PS0oMTw8MjkpJiZRPDE8PDI5JiYoRz0xLGs9MSksIUcpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK1MpO1Iud3JpdGVfc2hpZnQoLTQsKChrP1E6Uyk8PDIpKyhrKzIpKX1mdW5jdGlvbiBsZChTKXt2YXIgUj17czp7fSxlOnt9fTtyZXR1cm4gUi5zLnI9Uy5yZWFkX3NoaWZ0KDQpLFIuZS5yPVMucmVhZF9zaGlmdCg0KSxSLnMuYz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksUi5lLmM9Uy5yZWFkX3NoaWZ0KDQpLFJ9dmFyIG11PWxkLGdmPWZ1bmN0aW9uIFQ2KFMsUil7cmV0dXJuIFJ8fChSPWJuKDE2KSksUi53cml0ZV9zaGlmdCg0LFMucy5yKSxSLndyaXRlX3NoaWZ0KDQsUy5lLnIpLFIud3JpdGVfc2hpZnQoNCxTLnMuYyksUi53cml0ZV9zaGlmdCg0''@;'; put 'put ''LFMuZS5jKSxSfTtmdW5jdGlvbiBuMChTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0c8UjsrK0cpe3ZhciBRPW11KFMpO2sucHVzaChyYShRKSl9cmV0dXJuIGsuam9pbigiLCIpfWZ1bmN0aW9uIFBsKFMpe2lmKFMubGVuZ3RoLVMubDw4KXRocm93IlhMUyBYbnVtIEJ1''@;'; put 'put ''ZmZlciB1bmRlcmZsb3ciO3JldHVybiBTLnJlYWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9uIEx1KFMsUil7cmV0dXJuKFJ8fGJuKDgpKS53cml0ZV9zaGlmdCg4LFMsImYiKX1mdW5jdGlvbiBRaChTKXt2YXIgUj17fSxHPVMucmVhZF9zaGlmdCgxKT4+PjEsUT1TLnJlYWRfc2hpZnQoMSksb2U9''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDIsImkiKSxnZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KDEpLHllPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goUy5sKyssRyl7Y2FzZSAwOlIuYXV0bz0xO2JyZWFrO2Nhc2UgMTpSLmluZGV4PVE7dmFyIFBlPXIwW1FdO1BlJiYoUi5yZ2I9aGQoUGUpKTti''@;'; put 'put ''cmVhaztjYXNlIDI6Ui5yZ2I9aGQoW2dlLHBlLHllXSk7YnJlYWs7Y2FzZSAzOlIudGhlbWU9UX1yZXR1cm4gMCE9b2UmJihSLnRpbnQ9b2U+MD9vZS8zMjc2NzpvZS8zMjc2OCksUn1mdW5jdGlvbiBtZihTLFIpe2lmKFJ8fChSPWJuKDgpKSwhU3x8Uy5hdXRvKXJldHVybiBSLndyaXRlX3No''@;'; put 'put ''aWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFI7bnVsbCE9Uy5pbmRleD8oUi53cml0ZV9zaGlmdCgxLDIpLFIud3JpdGVfc2hpZnQoMSxTLmluZGV4KSk6bnVsbCE9Uy50aGVtZT8oUi53cml0ZV9zaGlmdCgxLDYpLFIud3JpdGVfc2hpZnQoMSxTLnRoZW1lKSk6KFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MSw1KSxSLndyaXRlX3NoaWZ0KDEsMCkpO3ZhciBrPVMudGludHx8MDtpZihrPjA/ayo9MzI3Njc6azwwJiYoayo9MzI3NjgpLFIud3JpdGVfc2hpZnQoMixrKSxTLnJnYiYmbnVsbD09Uy50aGVtZSl7dmFyIEc9Uy5yZ2J8fCJGRkZGRkYiOyJudW1iZXIiPT10eXBlb2YgRyYmKEc9KCIwMDAw''@;'; put 'put ''MDAiK0cudG9TdHJpbmcoMTYpKS5zbGljZSgtNikpLFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDAsMiksMTYpKSxSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSgyLDQpLDE2KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoNCw2KSwxNikpLFIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwyNTUpfWVsc2UgUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFJ9ZnVuY3Rpb24gT3coUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmwrKyx7ZkJvbGQ6MSZSLGZJdGFsaWM6MiZSLGZVbmRl''@;'; put 'put ''cmxpbmU6NCZSLGZTdHJpa2VvdXQ6OCZSLGZPdXRsaW5lOjE2JlIsZlNoYWRvdzozMiZSLGZDb25kZW5zZTo2NCZSLGZFeHRlbmQ6MTI4JlJ9fWZ1bmN0aW9uIFB3KFMsUil7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpO3N3aXRjaChHKXtjYXNlIDA6cmV0dXJuIiI7Y2FzZSA0Mjk0OTY3Mjk1OmNh''@;'; put 'put ''c2UgNDI5NDk2NzI5NDpyZXR1cm57MjoiQklUTUFQIiwzOiJNRVRBRklMRVBJQ1QiLDg6IkRJQiIsMTQ6IkVOSE1FVEFGSUxFIn1bUy5yZWFkX3NoaWZ0KDQpXXx8IiJ9aWYoRz40MDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDbGlwYm9hcmQ6ICIrRy50b1N0cmluZygxNikpO3Jl''@;'; put 'put ''dHVybiBTLmwtPTQsUy5yZWFkX3NoaWZ0KDAsMT09Uj8ibHBzdHIiOiJscHdzdHIiKX12YXIgZTI9MixKbD0zLEkwPTEyLE5uPTgxLEZ3PVs4MCxObl0sbTQ9ezE6e246IkNvZGVQYWdlIix0OmUyfSwyOntuOiJDYXRlZ29yeSIsdDo4MH0sMzp7bjoiUHJlc2VudGF0aW9uRm9ybWF0Iix0Ojgw''@;'; put 'put ''fSw0OntuOiJCeXRlQ291bnQiLHQ6Smx9LDU6e246IkxpbmVDb3VudCIsdDpKbH0sNjp7bjoiUGFyYWdyYXBoQ291bnQiLHQ6Smx9LDc6e246IlNsaWRlQ291bnQiLHQ6Smx9LDg6e246Ik5vdGVDb3VudCIsdDpKbH0sOTp7bjoiSGlkZGVuQ291bnQiLHQ6Smx9LDEwOntuOiJNdWx0aW1lZGlh''@;'; put 'put ''Q2xpcENvdW50Iix0OkpsfSwxMTp7bjoiU2NhbGVDcm9wIix0OjExfSwxMjp7bjoiSGVhZGluZ1BhaXJzIix0OjQwOTZ8STB9LDEzOntuOiJUaXRsZXNPZlBhcnRzIix0OjQxMjZ9LDE0OntuOiJNYW5hZ2VyIix0OjgwfSwxNTp7bjoiQ29tcGFueSIsdDo4MH0sMTY6e246IkxpbmtzVXBUb0Rh''@;'; put 'put ''dGUiLHQ6MTF9LDE3OntuOiJDaGFyYWN0ZXJDb3VudCIsdDpKbH0sMTk6e246IlNoYXJlZERvYyIsdDoxMX0sMjI6e246Ikh5cGVybGlua3NDaGFuZ2VkIix0OjExfSwyMzp7bjoiQXBwVmVyc2lvbiIsdDpKbCxwOiJ2ZXJzaW9uIn0sMjQ6e246IkRpZ1NpZyIsdDo2NX0sMjY6e246IkNvbnRl''@;'; put 'put ''bnRUeXBlIix0OjgwfSwyNzp7bjoiQ29udGVudFN0YXR1cyIsdDo4MH0sMjg6e246Ikxhbmd1YWdlIix0OjgwfSwyOTp7bjoiVmVyc2lvbiIsdDo4MH0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6''@;'; put 'put ''e319LGRnPXsxOntuOiJDb2RlUGFnZSIsdDplMn0sMjp7bjoiVGl0bGUiLHQ6ODB9LDM6e246IlN1YmplY3QiLHQ6ODB9LDQ6e246IkF1dGhvciIsdDo4MH0sNTp7bjoiS2V5d29yZHMiLHQ6ODB9LDY6e246IkNvbW1lbnRzIix0OjgwfSw3OntuOiJUZW1wbGF0ZSIsdDo4MH0sODp7bjoiTGFz''@;'; put 'put ''dEF1dGhvciIsdDo4MH0sOTp7bjoiUmV2TnVtYmVyIix0OjgwfSwxMDp7bjoiRWRpdFRpbWUiLHQ6NjR9LDExOntuOiJMYXN0UHJpbnRlZCIsdDo2NH0sMTI6e246IkNyZWF0ZWREYXRlIix0OjY0fSwxMzp7bjoiTW9kaWZpZWREYXRlIix0OjY0fSwxNDp7bjoiUGFnZUNvdW50Iix0OkpsfSwx''@;'; put 'put ''NTp7bjoiV29yZENvdW50Iix0OkpsfSwxNjp7bjoiQ2hhckNvdW50Iix0OkpsfSwxNzp7bjoiVGh1bWJuYWlsIix0OjcxfSwxODp7bjoiQXBwbGljYXRpb24iLHQ6ODB9LDE5OntuOiJEb2NTZWN1cml0eSIsdDpKbH0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4''@;'; put 'put ''MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LGhnPUllKG00LCJuIiksdmY9SWUoZGcsIm4iKSxENj17MToiVVMiLDI6IkNBIiwzOiIiLDc6IlJVIiwyMDoiRUciLDMwOiJHUiIsMzE6Ik5MIiwzMjoiQkUiLDMzOiJGUiIsMzQ6IkVTIiwzNjoiSFUiLDM5OiJJVCIsNDE6''@;'; put 'put ''IkNIIiw0MzoiQVQiLDQ0OiJHQiIsNDU6IkRLIiw0NjoiU0UiLDQ3OiJOTyIsNDg6IlBMIiw0OToiREUiLDUyOiJNWCIsNTU6IkJSIiw2MToiQVUiLDY0OiJOWiIsNjY6IlRIIiw4MToiSlAiLDgyOiJLUiIsODQ6IlZOIiw4NjoiQ04iLDkwOiJUUiIsMTA1OiJKUyIsMjEzOiJEWiIsMjE2OiJN''@;'; put 'put ''QSIsMjE4OiJMWSIsMzUxOiJQVCIsMzU0OiJJUyIsMzU4OiJGSSIsNDIwOiJDWiIsODg2OiJUVyIsOTYxOiJMQiIsOTYyOiJKTyIsOTYzOiJTWSIsOTY0OiJJUSIsOTY1OiJLVyIsOTY2OiJTQSIsOTcxOiJBRSIsOTcyOiJJTCIsOTc0OiJRQSIsOTgxOiJJUiIsNjU1MzU6IlVTIn0sZHY9W251''@;'; put 'put ''bGwsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHRE''@;'; put 'put ''b3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdO2Z1bmN0aW9uIEk2KFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihSKXtyZXR1cm5bUj4+MTYmMjU1LFI+PjgmMjU1LDI1NSZSXX0pfXZhciB2ND1JNihbMCwxNjc3NzIxNSwxNjcx''@;'; put 'put ''MTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsODM4ODYwOCwzMjc2OCwxMjgsODQyMTM3Niw4Mzg4NzM2LDMyODk2LDEyNjMyMjU2LDg0MjE1MDQsMTAwNjY0MzEsMTAwNDAx''@;'; put 'put ''NjYsMTY3NzcxNjQsMTM0MzQ4NzksNjY4NDc3NCwxNjc0NDU3NiwyNjMxNiwxMzQyMTgyMywxMjgsMTY3MTE5MzUsMTY3NzY5NjAsNjU1MzUsODM4ODczNiw4Mzg4NjA4LDMyODk2LDI1NSw1MjQ3OSwxMzQzNDg3OSwxMzQzNDgyOCwxNjc3NzExMywxMDA3OTQ4NywxNjc1MTA1MiwxMzQwODc2''@;'; put 'put ''NywxNjc2NDA1NywzMzY4NzAzLDMzOTQ3NjQsMTAwNzkyMzIsMTY3NjM5MDQsMTY3NTA4NDgsMTY3Mzc3OTIsNjcxMDkzNyw5ODY4OTUwLDEzMTU4LDMzODE2MDYsMTMwNTYsMzM1NTM5MiwxMDA0MDA2NCwxMDA0MDE2NiwzMzU1NTQ1LDMzNTU0NDMsMCwxNjc3NzIxNSwwLDAsMCwwLDAsMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDAsMCwwXSkscjA9cXQodjQpLEh3PUk2KFsxMjYzMjI1Niw5ODY4OTUwLDg0MjE1MDQsNjcxMDg4NiwzMzU1NDQzLDE2NzExNjgwLDMyNzY4LDEzMzY5NDk3LDEyOCwzMzk0NTYwLDI2MzY3LDEwMDI3MjEyLDEwMDUzMTcxLDEyOCwzMjc2OCw4Mzg4NjA4LDMyODk2LDgz''@;'; put 'put ''ODg3MzYsODQyMTM3NiwxMzYzMTQ4OCwxNDUzOTk5NCwxMzA2ODg1MCwxMzkyNDM1Miw5OTY3NDk2LDkxNzUyNjcsOTE5NTAwOCwzNjgzNTM3LDEwNjkyNTgsODg4MDg5OSw3NDk0NjQsMjg5MzQ3NiwxMTc0NTczMCwzNzUwMjAxLDE1NTU5NTAzLDE4Mzc5NDEsMTIwODQzNTksNzYzMjI1MCw3''@;'; put 'put ''MzYzMzI4LDk1MTQ1ODgsODI4ODYxNywzMDM2ODE0LDExMTg0ODEwXSksTWM9ezA6IiNOVUxMISIsNzoiI0RJVi8wISIsMTU6IiNWQUxVRSEiLDIzOiIjUkVGISIsMjk6IiNOQU1FPyIsMzY6IiNOVU0hIiw0MjoiI04vQSIsNDM6IiNHRVRUSU5HX0RBVEEiLDI1NToiI1dURj8ifSxQMz1rZShN''@;'; put 'put ''YyksYjQ9eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleFdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC5pbnRsbWFjcm9zaGVldCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhNcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sIjoiY29yZXByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbCI6ImN1c3Rwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbCI6ImV4dHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbVhtbFByb3BlcnRpZXMreG1sIjoiY3VzdG9teG1scHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jdXN0b21Qcm9wZXJ0eSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQubXMtZXhjZWwucGl2b3RUYWJsZSI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50''@;'; put 'put ''LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJjaGFydG9ianMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0Y29sb3JzdHlsZSt4bWwiOiJjaGFydGNvbG9ycyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJjaGFydHN0eWxlcyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5tcy1vZmZpY2UuY2hhcnRleCt4bWwiOiJjaGFydGV4cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jYWxjQ2hhaW4iOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY0NoYWluK3htbCI6''@;'; put 'put ''ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5wcmludGVyU2V0dGluZ3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZp''@;'; put 'put ''Y2UuYWN0aXZlWCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmF0dGFjaGVkVG9vbGJhcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l''@;'; put 'put ''bnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4''@;'; put 'put ''bWwiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldE1ldGFkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwu''@;'; put 'put ''cGl2b3RDYWNoZURlZmluaXRpb24reG1sIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwu''@;'; put 'put ''cXVlcnlUYWJsZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeVRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudXNlck5hbWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5yZXZpc2lvbkhlYWRlcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uTG9nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uSGVhZGVycyt4bWwiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25Mb2creG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJOYW1lcyt4bWwiOiJU''@;'; put 'put ''T0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlU2luZ2xlQ2VsbHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVTaW5nbGVDZWxscyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1z''@;'; put 'put ''LWV4Y2VsLnNsaWNlciI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlcit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlK3htbCI6IlRPRE8iLCJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQubXMtZXhjZWwud3NTb3J0TWFwIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6InRhYmxlcyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWwiOiJ0aGVtZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVPdmVycmlkZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LlRpbWVsaW5lK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmVDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IjoidmJhIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0U2lnbmF0dXJl''@;'; put 'put ''IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2Uudm9sYXRpbGVEZXBlbmRlbmNpZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVEZXBlbmRlbmNpZXMreG1sIjoiVE9ETyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1leGNlbC5jb250cm9scHJvcGVydGllcyt4bWwiOiJjdHJscHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSI6ImRhdGFtb2RlbHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuU3VydmV5K3htbCI6''@;'; put 'put ''IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwiOiJkcmF3aW5ncyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sIjoiVE9ETyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWwiOiJUT0RPIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwiOiJyZWxzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50Lm9sZU9iamVjdCI6IlRPRE8iLCJpbWFnZS9wbmciOiJUT0RPIixzaGVldDoianMifSxodj1mdW5jdGlvbigpe3ZhciBTPXt3b3JrYm9va3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4r''@;'; put 'put ''eG1sIix4bHNtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIix4bGFtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4u''@;'; put 'put ''bWFjcm9FbmFibGVkLm1haW4reG1sIix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbCJ9LHN0cnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5zcHJlYWRzaGVldG1sLnNoYXJlZFN0cmluZ3MreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyJ9LGNvbW1lbnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50''@;'; put 'put ''cyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb21tZW50cyJ9LHNoZWV0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4''@;'; put 'put ''Y2VsLndvcmtzaGVldCJ9LGNoYXJ0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2hhcnRzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0In0sZGlhbG9nczp7eGxzeDoi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hlZXQifSxtYWNyb3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNy''@;'; put 'put ''b3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQifSx0YWJsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1z''@;'; put 'put ''LWV4Y2VsLnRhYmxlIn0scGl2b3RzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUifSxwaXZvdGNhY2hlczp7eGxz''@;'; put 'put ''eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24ifSxwaXZvdHJlY29yZHM6e3hsc3g6ImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIn0sY29ubnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIn0sbGlua3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJl''@;'; put 'put ''YWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsifSxzdHlsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwiLHhsc2I6''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zdHlsZXMifX07cmV0dXJuIFJlKFMpLmZvckVhY2goZnVuY3Rpb24oUil7WyJ4bHNtIiwieGxhbSJdLmZvckVhY2goZnVuY3Rpb24oayl7U1tSXVtrXXx8KFNbUl1ba109U1tSXS54bHN4KX0pfSksUmUoUykuZm9yRWFjaChmdW5jdGlvbihSKXtS''@;'; put 'put ''ZShTW1JdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe2I0W1NbUl1ba11dPVJ9KX0pLFN9KCksZnY9ZnVuY3Rpb24gQWUoUyl7Zm9yKHZhciBSPVtdLGs9UmUoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpbnVsbD09UltTW2tbR11dXSYmKFJbU1trW0ddXV09W10pLFJbU1trW0ddXV0ucHVzaChrW0dd''@;'; put 'put ''KTtyZXR1cm4gUn0oYjQpO1lpLkNUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiO3ZhciBndj1QcigiVHlwZXMiLG51bGwse3htbG5zOllpLkNULCJ4bWxuczp4c2QiOllpLnhzZCwieG1sbnM6eHNpIjpZaS54c2l9KSxWdz1b''@;'; put 'put ''WyJ4bWwiLCJhcHBsaWNhdGlvbi94bWwiXSxbImJpbiIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iXSxbInZtbCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIl0sWyJkYXRh''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiXSxbImJtcCIsImltYWdlL2JtcCJdLFsicG5nIiwiaW1hZ2UvcG5nIl0sWyJnaWYiLCJpbWFnZS9naWYiXSxbImVtZiIsImltYWdlL3gtZW1mIl0sWyJ3bWYiLCJpbWFnZS94LXdtZiJd''@;'; put 'put ''LFsianBnIiwiaW1hZ2UvanBlZyJdLFsianBlZyIsImltYWdlL2pwZWciXSxbInRpZiIsImltYWdlL3RpZmYiXSxbInRpZmYiLCJpbWFnZS90aWZmIl0sWyJwZGYiLCJhcHBsaWNhdGlvbi9wZGYiXSxbInJlbHMiLGZ2LnJlbHNbMF1dXS5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFByKCJEZWZh''@;'; put 'put ''dWx0IixudWxsLHtFeHRlbnNpb246U1swXSxDb250ZW50VHlwZTpTWzFdfSl9KSxLYT17V0I6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFNIRUVUOiJodHRwOi8vc2hlZXRqcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixITElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLFZNTDoiaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixYUEFUSDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmtQYXRoIixY''@;'; put 'put ''TUlTUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsRXh0ZXJuYWxMaW5rUGF0aC94bFBhdGhNaXNzaW5nIixYTElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25z''@;'; put 'put ''aGlwcy9leHRlcm5hbExpbmsiLENYTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sIixDWE1MUDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYv''@;'; put 'put ''cmVsYXRpb25zaGlwcy9jdXN0b21YbWxQcm9wcyIsVkJBOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMvdmJhUHJvamVjdCJ9O2Z1bmN0aW9uIFZyKFMpe3ZhciBSPVMubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gUy5zbGljZSgwLFIrMSkr''@;'; put 'put ''Il9yZWxzLyIrUy5zbGljZShSKzEpKyIucmVscyJ9ZnVuY3Rpb24gYmYoUyxSKXt2YXIgaz17IiFpZCI6e319O2lmKCFTKXJldHVybiBrOyIvIiE9PVIuY2hhckF0KDApJiYoUj0iLyIrUik7dmFyIEc9e307cmV0dXJuKFMubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIg''@;'; put 'put ''b2U9dnIoUSk7aWYoIjxSZWxhdGlvbnNoaXAiPT09b2VbMF0pe3ZhciBnZT17fTtnZS5UeXBlPW9lLlR5cGUsZ2UuVGFyZ2V0PW9lLlRhcmdldCxnZS5JZD1vZS5JZCxnZS5UYXJnZXRNb2RlPW9lLlRhcmdldE1vZGU7dmFyIHBlPSJFeHRlcm5hbCI9PT1vZS5UYXJnZXRNb2RlP29lLlRhcmdl''@;'; put 'put ''dDpmbihvZS5UYXJnZXQsUik7a1twZV09Z2UsR1tvZS5JZF09Z2V9fSksa1siIWlkIl09RyxrfVlpLlJFTFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI7dmFyIGZnPVByKCJSZWxhdGlvbnNoaXBzIixudWxsLHt4bWxuczpZ''@;'; put 'put ''aS5SRUxTfSk7ZnVuY3Rpb24ga2koUyl7dmFyIFI9W0lpLGZnXTtyZXR1cm4gUmUoU1siIWlkIl0pLmZvckVhY2goZnVuY3Rpb24oayl7UltSLmxlbmd0aF09UHIoIlJlbGF0aW9uc2hpcCIsbnVsbCxTWyIhaWQiXVtrXSl9KSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvUmVsYXRpb25z''@;'; put 'put ''aGlwcz4iLFJbMV09UlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX12YXIgeTQ9W0thLkhMSU5LLEthLlhQQVRILEthLlhNSVNTXTtmdW5jdGlvbiBFcihTLFIsayxHLFEsb2Upe2lmKFF8fChRPXt9KSxTWyIhaWQiXXx8KFNbIiFpZCJdPXt9KSxSPDApZm9yKFI9MTtTWyIhaWQi''@;'; put 'put ''XVsicklkIitSXTsrK1IpO2lmKFEuSWQ9InJJZCIrUixRLlR5cGU9RyxRLlRhcmdldD1rLG9lP1EuVGFyZ2V0TW9kZT1vZTp5NC5pbmRleE9mKFEuVHlwZSk+LTEmJihRLlRhcmdldE1vZGU9IkV4dGVybmFsIiksU1siIWlkIl1bUS5JZF0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmV3cml0''@;'; put 'put ''ZSBySWQgIitSKTtyZXR1cm4gU1siIWlkIl1bUS5JZF09USxTWygiLyIrUS5UYXJnZXQpLnJlcGxhY2UoIi8vIiwiLyIpXT1RLFJ9dmFyIGxsPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IjtmdW5jdGlvbiBldShTLFIsayl7cmV0dXJuWycgIDxyZGY6''@;'; put 'put ''RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPHJkZjp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycrKGt8fCJvZGYiKSsiIyIrUisnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9p''@;'; put 'put ''bigiIil9ZnVuY3Rpb24gbjIoUyxSKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrUysnIj5cbicsJyAgICA8bnMwOmhhc1BhcnQgeG1sbnM6bnMwPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvcGtnIyIgcmRmOnJlc291cmNl''@;'; put 'put ''PSInK1IrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfXZhciBSNj1mdW5jdGlvbigpe3ZhciBTPSc8b2ZmaWNlOmRvY3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiIHhtbG5z''@;'; put 'put ''Om1ldGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxv''@;'; put 'put ''ZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+U2hlZXRKUyAnK3cudmVyc2lvbisiPC9tZXRhOmdlbmVyYXRvcj48L29mZmljZTptZXRhPjwvb2ZmaWNlOmRvY3VtZW50LW1ldGE+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU319KCksUjA9W1siY3A6Y2F0ZWdvcnkiLCJDYXRlZ29yeSJd''@;'; put 'put ''LFsiY3A6Y29udGVudFN0YXR1cyIsIkNvbnRlbnRTdGF0dXMiXSxbImNwOmtleXdvcmRzIiwiS2V5d29yZHMiXSxbImNwOmxhc3RNb2RpZmllZEJ5IiwiTGFzdEF1dGhvciJdLFsiY3A6bGFzdFByaW50ZWQiLCJMYXN0UHJpbnRlZCJdLFsiY3A6cmV2aXNpb24iLCJSZXZOdW1iZXIiXSxbImNw''@;'; put 'put ''OnZlcnNpb24iLCJWZXJzaW9uIl0sWyJkYzpjcmVhdG9yIiwiQXV0aG9yIl0sWyJkYzpkZXNjcmlwdGlvbiIsIkNvbW1lbnRzIl0sWyJkYzppZGVudGlmaWVyIiwiSWRlbnRpZmllciJdLFsiZGM6bGFuZ3VhZ2UiLCJMYW5ndWFnZSJdLFsiZGM6c3ViamVjdCIsIlN1YmplY3QiXSxbImRjOnRp''@;'; put 'put ''dGxlIiwiVGl0bGUiXSxbImRjdGVybXM6Y3JlYXRlZCIsIkNyZWF0ZWREYXRlIiwiZGF0ZSJdLFsiZGN0ZXJtczptb2RpZmllZCIsIk1vZGlmaWVkRGF0ZSIsImRhdGUiXV07WWkuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRh''@;'; put 'put ''ZGF0YS9jb3JlLXByb3BlcnRpZXMiLEthLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiO3ZhciBwZz1mdW5jdGlvbigpe2Zvcih2YXIgUz1uZXcgQXJyYXkoUjAu''@;'; put 'put ''bGVuZ3RoKSxSPTA7UjxSMC5sZW5ndGg7KytSKXt2YXIgaz1SMFtSXSxHPSIoPzoiK2tbMF0uc2xpY2UoMCxrWzBdLmluZGV4T2YoIjoiKSkrIjopIitrWzBdLnNsaWNlKGtbMF0uaW5kZXhPZigiOiIpKzEpO1NbUl09bmV3IFJlZ0V4cCgiPCIrRysiW14+XSo+KFtcXHNcXFNdKj8pPC8iK0cr''@;'; put 'put ''Ij4iKX1yZXR1cm4gU30oKTtmdW5jdGlvbiBtdihTKXt2YXIgUj17fTtTPWdvKFMpO2Zvcih2YXIgaz0wO2s8UjAubGVuZ3RoOysrayl7dmFyIEc9UjBba10sUT1TLm1hdGNoKHBnW2tdKTtudWxsIT1RJiZRLmxlbmd0aD4wJiYoUltHWzFdXT1RcihRWzFdKSksImRhdGUiPT09R1syXSYmUltH''@;'; put 'put ''WzFdXSYmKFJbR1sxXV09SGUoUltHWzFdXSkpfXJldHVybiBSfXZhciBqdz1QcigiY3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4bWxuczpjcCI6WWkuQ09SRV9QUk9QUywieG1sbnM6ZGMiOllpLmRjLCJ4bWxuczpkY3Rlcm1zIjpZaS5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6WWkuZGNt''@;'; put 'put ''aXR5cGUsInhtbG5zOnhzaSI6WWkueHNpfSk7ZnVuY3Rpb24geWYoUyxSLGssRyxRKXtudWxsIT1RW1NdfHxudWxsPT1SfHwiIj09PVJ8fChRW1NdPVIsUj1McihSKSxHW0cubGVuZ3RoXT1rP1ByKFMsUixrKTpIYShTLFIpKX12YXIgcmg9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIs''@;'; put 'put ''InN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZlcnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21wYW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5n''@;'; put 'put ''ZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wiXSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wiXSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1Bh''@;'; put 'put ''aXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiBfNChTLFIsayxHKXt2YXIgUT1bXTtpZigic3RyaW5nIj09dHlwZW9mIFMpUT1KcihTLEcpO2Vsc2UgZm9yKHZhciBvZT0wO29lPFMubGVuZ3RoOysrb2UpUT1RLmNvbmNhdChTW29l''@;'; put 'put ''XS5tYXAoZnVuY3Rpb24oTmUpe3JldHVybnt2Ok5lfX0pKTt2YXIgZ2U9InN0cmluZyI9PXR5cGVvZiBSP0pyKFIsRykubWFwKGZ1bmN0aW9uKE5lKXtyZXR1cm4gTmUudn0pOlIscGU9MCx5ZT0wO2lmKGdlLmxlbmd0aD4wKWZvcih2YXIgUGU9MDtQZSE9PVEubGVuZ3RoO1BlKz0yKXtzd2l0''@;'; put 'put ''Y2goeWU9K1FbUGUrMV0udixRW1BlXS52KXtjYXNlIldvcmtzaGVldHMiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjpjYXNlIlx1MDQxYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQ0YiI6Y2FzZSJcdTA2MjNcdTA2NDhcdTA2MzFcdTA2MjdcdTA2NDIgXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ1''@;'; put 'put ''XHUwNjQ0IjpjYXNlIlx1MzBlZlx1MzBmY1x1MzBhZlx1MzBiN1x1MzBmY1x1MzBjOCI6Y2FzZSJcdTA1ZDJcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWUyXHUwNWQxXHUwNWQ1XHUwNWQzXHUwNWQ0IjpjYXNlIkFyYmVpdHNibFx4ZTR0dGVyIjpjYXNlIlx4Yzdh''@;'; put 'put ''bFx1MDEzMVx1MDE1Zm1hIFNheWZhbGFyXHUwMTMxIjpjYXNlIkZldWlsbGVzIGRlIGNhbGN1bCI6Y2FzZSJGb2dsaSBkaSBsYXZvcm8iOmNhc2UiRm9saGFzIGRlIGNceGUxbGN1bG8iOmNhc2UiUGxhbmlsaGFzIjpjYXNlIlJlZ25lYXJrIjpjYXNlIkhvamFzIGRlIGNceGUxbGN1bG8iOmNh''@;'; put 'put ''c2UiV2Vya2JsYWRlbiI6ay5Xb3Jrc2hlZXRzPXllLGsuU2hlZXROYW1lcz1nZS5zbGljZShwZSxwZSt5ZSk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3IjpjYXNlIkJlbmFu''@;'; put 'put ''bnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjprLk5hbWVkUmFuZ2VzPXllLGsuRGVmaW5lZE5hbWVzPWdlLnNsaWNlKHBlLHBlK3llKTticmVhaztjYXNlIkNoYXJ0cyI6Y2FzZSJEaWFncmFtbWUiOmsuQ2hhcnRzaGVldHM9eWUsay5DaGFydE5hbWVzPWdlLnNsaWNl''@;'; put 'put ''KHBlLHBlK3llKX1wZSs9eWV9fVlpLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZXh0ZW5kZWQtcHJvcGVydGllcyIsS2EuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9j''@;'; put 'put ''dW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiO3ZhciBMNj1QcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6WWkuRVhUX1BST1BTLCJ4bWxuczp2dCI6WWkudnR9KTtZaS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2Zm''@;'; put 'put ''aWNlRG9jdW1lbnQvMjAwNi9jdXN0b20tcHJvcGVydGllcyIsS2EuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyI7dmFyIE82PS88W14+XSs+W148XSovZyx5dj1Q''@;'; put 'put ''cigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6WWkuQ1VTVF9QUk9QUywieG1sbnM6dnQiOllpLnZ0fSk7dmFyIFA2PXtUaXRsZToiVGl0bGUiLFN1YmplY3Q6IlN1YmplY3QiLEF1dGhvcjoiQXV0aG9yIixLZXl3b3JkczoiS2V5d29yZHMiLENvbW1lbnRzOiJEZXNjcmlwdGlvbiIsTGFzdEF1''@;'; put 'put ''dGhvcjoiTGFzdEF1dGhvciIsUmV2TnVtYmVyOiJSZXZpc2lvbiIsQXBwbGljYXRpb246IkFwcE5hbWUiLExhc3RQcmludGVkOiJMYXN0UHJpbnRlZCIsQ3JlYXRlZERhdGU6IkNyZWF0ZWQiLE1vZGlmaWVkRGF0ZToiTGFzdFNhdmVkIixDYXRlZ29yeToiQ2F0ZWdvcnkiLE1hbmFnZXI6Ik1h''@;'; put 'put ''bmFnZXIiLENvbXBhbnk6IkNvbXBhbnkiLEFwcFZlcnNpb246IlZlcnNpb24iLENvbnRlbnRTdGF0dXM6IkNvbnRlbnRTdGF0dXMiLElkZW50aWZpZXI6IklkZW50aWZpZXIiLExhbmd1YWdlOiJMYW5ndWFnZSJ9LEY2PVZlKFA2KTtmdW5jdGlvbiBGMyhTLFIsayl7U1tSPUY2W1JdfHxSXT1r''@;'; put 'put ''fWZ1bmN0aW9uIEgzKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gbmV3IERhdGUoMWUzKihrLzFlNypNYXRoLnBvdygyLDMyKStSLzFlNy0xMTY0NDQ3MzYwMCkpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC4wMDAvLCIiKX1mdW5jdGlvbiBjZChT''@;'; put 'put ''LFIsayl7dmFyIEc9Uy5sLFE9Uy5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIik7aWYoaylmb3IoO1MubC1HJjM7KSsrUy5sO3JldHVybiBRfWZ1bmN0aW9uIGdnKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIGsmJihTLmwrPTQtKEcubGVuZ3RoKzEmMykmMyks''@;'; put 'put ''R31mdW5jdGlvbiBfdihTLFIsayl7cmV0dXJuIDMxPT09Uj9nZyhTKTpjZChTLDAsayl9ZnVuY3Rpb24gTjYoUyxSLGspe3JldHVybiBfdihTLFIsITE9PT1rPzA6NCl9ZnVuY3Rpb24gQ3YoUyl7dmFyIFI9Uy5sLGs9d2YoUyxObik7cmV0dXJuIDA9PVNbUy5sXSYmMD09U1tTLmwrMV0mJlMu''@;'; put 'put ''bC1SJjImJihTLmwrPTIpLFtrLHdmKFMsSmwpXX1mdW5jdGlvbiBtZyhTLFIpe2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCksRz17fSxRPTA7USE9azsrK1Epe3ZhciBvZT1TLnJlYWRfc2hpZnQoNCksZ2U9Uy5yZWFkX3NoaWZ0KDQpO0dbb2VdPVMucmVhZF9zaGlmdChnZSwxMjAwPT09Uj8i''@;'; put 'put ''dXRmMTZsZSI6InV0ZjgiKS5yZXBsYWNlKEUsIiIpLnJlcGxhY2UobSwiISIpLDEyMDA9PT1SJiZnZSUyJiYoUy5sKz0yKX1yZXR1cm4gMyZTLmwmJihTLmw9Uy5sPj4zPDwyKSxHfWZ1bmN0aW9uIHEwKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMuc2xpY2UoUy5sLFMubCtSKTtyZXR1''@;'; put 'put ''cm4gUy5sKz1SLCgzJlIpPjAmJihTLmwrPTQtKDMmUikmMyksa31mdW5jdGlvbiB3ZihTLFIsayl7dmFyIFEsRz1TLnJlYWRfc2hpZnQoMiksb2U9a3x8e307aWYoUy5sKz0yLFIhPT1JMCYmRyE9PVImJi0xPT09RncuaW5kZXhPZihSKSYmKDQxMjYhPSg2NTUzNCZSKXx8NDEyNiE9KDY1NTM0''@;'; put 'put ''JkcpKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHR5cGUgIitSKyIgc2F3ICIrRyk7c3dpdGNoKFI9PT1JMD9HOlIpe2Nhc2UgMjpyZXR1cm4gUT1TLnJlYWRfc2hpZnQoMiwiaSIpLG9lLnJhd3x8KFMubCs9MiksUTtjYXNlIDM6cmV0dXJuIFMucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAx''@;'; put 'put ''MTpyZXR1cm4gMCE9PVMucmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBTLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gY2QoUywwLDQpLnJlcGxhY2UoRSwiIik7Y2FzZSAzMTpyZXR1cm4gZ2coUyk7Y2FzZSA2NDpyZXR1cm4gSDMoUyk7Y2FzZSA2NTpyZXR1cm4gcTAoUyk7Y2Fz''@;'; put 'put ''ZSA3MTpyZXR1cm4gZnVuY3Rpb24gU3YoUyl7dmFyIFI9e307cmV0dXJuIFIuU2l6ZT1TLnJlYWRfc2hpZnQoNCksUy5sKz1SLlNpemUrMy0oUi5TaXplLTEpJTQsUn0oUyk7Y2FzZSA4MDpyZXR1cm4gTjYoUyxHLCFvZS5yYXcpLnJlcGxhY2UoRSwiIik7Y2FzZSA4MTpyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gd3YoUyxSKXtpZighUil0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5nIG11c3QgaGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gX3YoUyxSLDApfShTLEcpLnJlcGxhY2UoRSwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBZdyhTKXtmb3IodmFyIFI9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLGs9W10sRz0wO0c8Ui8yOysrRylrLnB1c2goQ3YoUykpO3JldHVybiBrfShTKTtjYXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1HP2Z1bmN0aW9uIE4zKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RyE9UjsrK0cpe3ZhciBRPVMubDtrW0dd''@;'; put 'put ''PVMucmVhZF9zaGlmdCgwLCJscHdzdHIiKS5yZXBsYWNlKEUsIiIpLFMubC1RJjImJihTLmwrPTIpfXJldHVybiBrfShTKTpmdW5jdGlvbiBXdyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0chPVI7KytHKWtbR109Uy5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVw''@;'; put 'put ''bGFjZShFLCIiKTtyZXR1cm4ga30oUyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK1IrIiAiK0cpfX1mdW5jdGlvbiBDZihTLFIpe3ZhciBrPWJuKDQpLEc9Ym4oNCk7c3dpdGNoKGsud3JpdGVfc2hpZnQoNCw4MD09Uz8z''@;'; put 'put ''MTpTKSxTKXtjYXNlIDM6Ry53cml0ZV9zaGlmdCgtNCxSKTticmVhaztjYXNlIDU6KEc9Ym4oOCkpLndyaXRlX3NoaWZ0KDgsUiwiZiIpO2JyZWFrO2Nhc2UgMTE6Ry53cml0ZV9zaGlmdCg0LFI/MTowKTticmVhaztjYXNlIDY0Okc9ZnVuY3Rpb24gaGMoUyl7dmFyIGs9KCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgUz9uZXcgRGF0ZShEYXRlLnBhcnNlKFMpKTpTKS5nZXRUaW1lKCkvMWUzKzExNjQ0NDczNjAwLEc9ayVNYXRoLnBvdygyLDMyKSxRPShrLUcpL01hdGgucG93KDIsMzIpO1EqPTFlNzt2YXIgb2U9KEcqPTFlNykvTWF0aC5wb3coMiwzMil8MDtvZT4wJiYoRyU9TWF0aC5wb3coMiwz''@;'; put 'put ''MiksUSs9b2UpO3ZhciBnZT1ibig4KTtyZXR1cm4gZ2Uud3JpdGVfc2hpZnQoNCxHKSxnZS53cml0ZV9zaGlmdCg0LFEpLGdlfShSKTticmVhaztjYXNlIDMxOmNhc2UgODA6Zm9yKChHPWJuKDQrMiooUi5sZW5ndGgrMSkrKFIubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsUi5sZW5n''@;'; put 'put ''dGgrMSksRy53cml0ZV9zaGlmdCgwLFIsImRiY3MiKTtHLmwhPUcubGVuZ3RoOylHLndyaXRlX3NoaWZ0KDEsMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK1MrIiAiK1IpfXJldHVybiBqKFtrLEddKX1mdW5j''@;'; put 'put ''dGlvbiBpaChTLFIpe3ZhciBrPVMubCxHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlmdCg0KSxvZT1bXSxnZT0wLHBlPTAseWU9LTEsUGU9e307Zm9yKGdlPTA7Z2UhPVE7KytnZSl7dmFyIE5lPVMucmVhZF9zaGlmdCg0KSxZZT1TLnJlYWRfc2hpZnQoNCk7b2VbZ2VdPVtOZSxZZStr''@;'; put 'put ''XX1vZS5zb3J0KGZ1bmN0aW9uKGt0LE90KXtyZXR1cm4ga3RbMV0tT3RbMV19KTt2YXIgZXQ9e307Zm9yKGdlPTA7Z2UhPVE7KytnZSl7aWYoUy5sIT09b2VbZ2VdWzFdKXt2YXIgY3Q9ITA7aWYoZ2U+MCYmUilzd2l0Y2goUltvZVtnZS0xXVswXV0udCl7Y2FzZSAyOlMubCsyPT09b2VbZ2Vd''@;'; put 'put ''WzFdJiYoUy5sKz0yLGN0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODpTLmw8PW9lW2dlXVsxXSYmKFMubD1vZVtnZV1bMV0sY3Q9ITEpfWlmKCghUnx8MD09Z2UpJiZTLmw8PW9lW2dlXVsxXSYmKGN0PSExLFMubD1vZVtnZV1bMV0pLGN0KXRocm93IG5ldyBFcnJvcigiUmVhZCBFcnJv''@;'; put 'put ''cjogRXhwZWN0ZWQgYWRkcmVzcyAiK29lW2dlXVsxXSsiIGF0ICIrUy5sKyIgOiIrZ2UpfWlmKFIpe3ZhciBFdD1SW29lW2dlXVswXV07aWYoZXRbRXQubl09d2YoUyxFdC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT1FdC5wJiYoZXRbRXQubl09U3RyaW5nKGV0W0V0Lm5dPj4xNikrIi4iKygi''@;'; put 'put ''MDAwMCIrU3RyaW5nKDY1NTM1JmV0W0V0Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2UiPT1FdC5uKXN3aXRjaChldFtFdC5uXSl7Y2FzZSAwOmV0W0V0Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6Y2FzZSAxMjUwOmNhc2UgMTI1MTpjYXNl''@;'; put 'put ''IDEyNTM6Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNhc2UgMTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTpVKHBlPWV0W0V0Lm5dPj4+MCY2NTUzNSk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK2V0W0V0Lm5dKX19ZWxzZSBpZigxPT09b2VbZ2VdWzBdKXtpZihwZT1ldC5Db2RlUGFnZT13ZihTLGUyKSxVKHBlKSwtMSE9PXllKXt2YXIgYXQ9Uy5sO1MubD1vZVt5ZV1bMV0sUGU9bWcoUyxwZSksUy5s''@;'; put 'put ''PWF0fX1lbHNlIGlmKDA9PT1vZVtnZV1bMF0pe2lmKDA9PT1wZSl7eWU9Z2UsUy5sPW9lW2dlKzFdWzFdO2NvbnRpbnVlfVBlPW1nKFMscGUpfWVsc2V7dmFyIGp0LGJ0PVBlW29lW2dlXVswXV07c3dpdGNoKFNbUy5sXSl7Y2FzZSA2NTpTLmwrPTQsanQ9cTAoUyk7YnJlYWs7Y2FzZSAzMDpj''@;'; put 'put ''YXNlIDMxOlMubCs9NCxqdD1ONihTLFNbUy5sLTRdKS5yZXBsYWNlKC9cdTAwMDArJC8sIiIpO2JyZWFrO2Nhc2UgMzpTLmwrPTQsanQ9Uy5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OlMubCs9NCxqdD1TLnJlYWRfc2hpZnQoNCk7YnJlYWs7Y2FzZSA1OlMubCs9NCxqdD1TLnJl''@;'; put 'put ''YWRfc2hpZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6Uy5sKz00LGp0PXVvKFMsNCk7YnJlYWs7Y2FzZSA2NDpTLmwrPTQsanQ9SGUoSDMoUykpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIitTW1MubF0pfWV0W2J0XT1qdH19cmV0dXJuIFMubD1rK0cs''@;'; put 'put ''ZXR9dmFyIFY2PVsiQ29kZVBhZ2UiLCJUaHVtYm5haWwiLCJfUElEX0xJTktCQVNFIiwiX1BJRF9ITElOS1MiLCJTeXN0ZW1JZGVudGlmaWVyIiwiRk1USUQiXS5jb25jYXQoWyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyIsIk5hbWVkUmFuZ2VzIiwiRGVmaW5lZE5hbWVzIiwiQ2hhcnRzaGVl''@;'; put 'put ''dHMiLCJDaGFydE5hbWVzIl0pO2Z1bmN0aW9uIEhjKFMpe3N3aXRjaCh0eXBlb2YgUyl7Y2FzZSJib29sZWFuIjpyZXR1cm4gMTE7Y2FzZSJudW1iZXIiOnJldHVybigwfFMpPT1TPzM6NTtjYXNlInN0cmluZyI6cmV0dXJuIDMxO2Nhc2Uib2JqZWN0IjppZihTIGluc3RhbmNlb2YgRGF0ZSly''@;'; put 'put ''ZXR1cm4gNjR9cmV0dXJuLTF9ZnVuY3Rpb24gQjYoUyxSLGspe3ZhciBHPWJuKDgpLFE9W10sb2U9W10sZ2U9OCxwZT0wLHllPWJuKDgpLFBlPWJuKDgpO2lmKHllLndyaXRlX3NoaWZ0KDQsMikseWUud3JpdGVfc2hpZnQoNCwxMjAwKSxQZS53cml0ZV9zaGlmdCg0LDEpLG9lLnB1c2goeWUp''@;'; put 'put ''LFEucHVzaChQZSksZ2UrPTgreWUubGVuZ3RoLCFSKXsoUGU9Ym4oOCkpLndyaXRlX3NoaWZ0KDQsMCksUS51bnNoaWZ0KFBlKTt2YXIgTmU9W2JuKDQpXTtmb3IoTmVbMF0ud3JpdGVfc2hpZnQoNCxTLmxlbmd0aCkscGU9MDtwZTxTLmxlbmd0aDsrK3BlKXt2YXIgWWU9U1twZV1bMF07Zm9y''@;'; put 'put ''KCh5ZT1ibig4KzIqKFllLmxlbmd0aCsxKSsoWWUubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQscGUrMikseWUud3JpdGVfc2hpZnQoNCxZZS5sZW5ndGgrMSkseWUud3JpdGVfc2hpZnQoMCxZZSwiZGJjcyIpO3llLmwhPXllLmxlbmd0aDspeWUud3JpdGVfc2hpZnQoMSwwKTtOZS5w''@;'; put 'put ''dXNoKHllKX15ZT1qKE5lKSxvZS51bnNoaWZ0KHllKSxnZSs9OCt5ZS5sZW5ndGh9Zm9yKHBlPTA7cGU8Uy5sZW5ndGg7KytwZSlpZigoIVJ8fFJbU1twZV1bMF1dKSYmIShWNi5pbmRleE9mKFNbcGVdWzBdKT4tMSkmJm51bGwhPVNbcGVdWzFdKXt2YXIgZXQ9U1twZV1bMV0sY3Q9MDtpZihS''@;'; put 'put ''KXt2YXIgRXQ9a1tjdD0rUltTW3BlXVswXV1dO2lmKCJ2ZXJzaW9uIj09RXQucCYmInN0cmluZyI9PXR5cGVvZiBldCl7dmFyIGF0PWV0LnNwbGl0KCIuIik7ZXQ9KCthdFswXTw8MTYpKygrYXRbMV18fDApfXllPUNmKEV0LnQsZXQpfWVsc2V7dmFyIGJ0PUhjKGV0KTstMT09YnQmJihidD0z''@;'; put 'put ''MSxldD1TdHJpbmcoZXQpKSx5ZT1DZihidCxldCl9b2UucHVzaCh5ZSksKFBlPWJuKDgpKS53cml0ZV9zaGlmdCg0LFI/Y3Q6MitwZSksUS5wdXNoKFBlKSxnZSs9OCt5ZS5sZW5ndGh9dmFyIGp0PTgqKG9lLmxlbmd0aCsxKTtmb3IocGU9MDtwZTxvZS5sZW5ndGg7KytwZSlRW3BlXS53cml0''@;'; put 'put ''ZV9zaGlmdCg0LGp0KSxqdCs9b2VbcGVdLmxlbmd0aDtyZXR1cm4gRy53cml0ZV9zaGlmdCg0LGdlKSxHLndyaXRlX3NoaWZ0KDQsb2UubGVuZ3RoKSxqKFtHXS5jb25jYXQoUSkuY29uY2F0KG9lKSl9ZnVuY3Rpb24gajYoUyxSLGspe3ZhciBHPVMuY29udGVudDtpZighRylyZXR1cm57fTtt''@;'; put 'put ''bihHLDApO3ZhciBRLG9lLGdlLHBlLHllPTA7Ry5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxHLnJlYWRfc2hpZnQoMik7dmFyIFBlPUcucmVhZF9zaGlmdCg0KSxOZT1HLnJlYWRfc2hpZnQoMTYpO2lmKE5lIT09dmUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCYmTmUhPT1rKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQmFkIFByb3BlcnR5U2V0IENMU0lEICIrTmUpO2lmKDEhPT0oUT1HLnJlYWRfc2hpZnQoNCkpJiYyIT09USl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAjU2V0czogIitRKTtpZihvZT1HLnJlYWRfc2hpZnQoMTYpLHBlPUcucmVhZF9zaGlmdCg0KSwxPT09USYm''@;'; put 'put ''cGUhPT1HLmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2g6ICIrcGUrIiAhPT0gIitHLmwpOzI9PT1RJiYoZ2U9Ry5yZWFkX3NoaWZ0KDE2KSx5ZT1HLnJlYWRfc2hpZnQoNCkpO3ZhciBFdCxZZT1paChHLFIpLGV0PXtTeXN0ZW1JZGVudGlmaWVyOlBlfTtmb3IodmFyIGN0IGlu''@;'; put 'put ''IFllKWV0W2N0XT1ZZVtjdF07aWYoZXQuRk1USUQ9b2UsMT09PVEpcmV0dXJuIGV0O2lmKHllLUcubD09MiYmKEcubCs9MiksRy5sIT09eWUpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2ggMjogIitHLmwrIiAhPT0gIit5ZSk7dHJ5e0V0PWloKEcsbnVsbCl9Y2F0Y2h7fWZvcihj''@;'; put 'put ''dCBpbiBFdClldFtjdF09RXRbY3RdO3JldHVybiBldC5GTVRJRD1bb2UsZ2VdLGV0fWZ1bmN0aW9uIHppKFMsUixrLEcsUSxvZSl7dmFyIGdlPWJuKFE/Njg6NDgpLHBlPVtnZV07Z2Uud3JpdGVfc2hpZnQoMiw2NTUzNCksZ2Uud3JpdGVfc2hpZnQoMiwwKSxnZS53cml0ZV9zaGlmdCg0LDg0''@;'; put 'put ''MjQxMjU5OSksZ2Uud3JpdGVfc2hpZnQoMTYsdmUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4IiksZ2Uud3JpdGVfc2hpZnQoNCxRPzI6MSksZ2Uud3JpdGVfc2hpZnQoMTYsUiwiaGV4IiksZ2Uud3JpdGVfc2hpZnQoNCxRPzY4OjQ4KTt2YXIgeWU9QjYoUyxrLEcpO2lmKHBlLnB1''@;'; put 'put ''c2goeWUpLFEpe3ZhciBQZT1CNihRLG51bGwsbnVsbCk7Z2Uud3JpdGVfc2hpZnQoMTYsb2UsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsNjgreWUubGVuZ3RoKSxwZS5wdXNoKFBlKX1yZXR1cm4gaihwZSl9ZnVuY3Rpb24gcjIoUyxSKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIpLG51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gdW8oUyxSKXtyZXR1cm4gMT09PVMucmVhZF9zaGlmdChSKX1mdW5jdGlvbiB0dShTLFIpe3JldHVybiBSfHwoUj1ibigyKSksUi53cml0ZV9zaGlmdCgyLCshIVMpLFJ9ZnVuY3Rpb24gRWMoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyLCJ1Iil9ZnVuY3Rpb24gYTAoUyxSKXtyZXR1''@;'; put 'put ''cm4gUnx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMixTKSxSfWZ1bmN0aW9uIHc0KFMsUil7cmV0dXJuIGZ1bmN0aW9uIE12KFMsUixrKXtmb3IodmFyIEc9W10sUT1TLmwrUjtTLmw8UTspRy5wdXNoKGsoUyxRLVMubCkpO2lmKFEhPT1TLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJv''@;'; put 'put ''ciIpO3JldHVybiBHfShTLFIsRWMpfWZ1bmN0aW9uIEtpKFMsUixrKXtyZXR1cm4ga3x8KGs9Ym4oMikpLGsud3JpdGVfc2hpZnQoMSwiZSI9PVI/K1M6KyEhUyksay53cml0ZV9zaGlmdCgxLCJlIj09Uj8xOjApLGt9ZnVuY3Rpb24gVWEoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdChrJiZr''@;'; put 'put ''LmJpZmY+PTEyPzI6MSksUT0ic2Jjcy1jb250IixvZT1QO2smJmsuYmlmZj49OCYmKFA9MTIwMCksayYmOCE9ay5iaWZmPzEyPT1rLmJpZmYmJihRPSJ3c3RyIik6Uy5yZWFkX3NoaWZ0KDEpJiYoUT0iZGJjcy1jb250Iiksay5iaWZmPj0yJiZrLmJpZmY8PTUmJihRPSJjcHN0ciIpO3ZhciBw''@;'; put 'put ''ZT1HP1MucmVhZF9zaGlmdChHLFEpOiIiO3JldHVybiBQPW9lLHBlfWZ1bmN0aW9uIGZjKFMpe3ZhciBSPVA7UD0xMjAwO3ZhciB5ZSxrPVMucmVhZF9zaGlmdCgyKSxHPVMucmVhZF9zaGlmdCgxKSxRPTQmRyxvZT04JkcsZ2U9MSsoMSZHKSxwZT0wLFBlPXt9O29lJiYocGU9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpKSxRJiYoeWU9Uy5yZWFkX3NoaWZ0KDQpKTt2YXIgWWU9MD09PWs/IiI6Uy5yZWFkX3NoaWZ0KGssMj09Z2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpO2lmKG9lKWZvcihQZS5fUj1bXTtwZS0tID4wOylQZS5fUi5wdXNoKHtpZHg6Uy5yZWFkX3NoaWZ0KDIpLGlmbnQ6Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpfSk7cmV0dXJuIFEmJihTLmwrPXllKSxQZS50PVllLG9lfHwoUGUucj0iPHQ+IitQZS50KyI8L3Q+IiksUD1SLFBlfWZ1bmN0aW9uIE5jKFMsUil7dmFyIGs9Uy5SJiZTLlIubGVuZ3RofHxTLnI7Uy5yJiYoUy5SPXdnKFMucikpO3ZhciBHPSIiLFE9MDtrP1MuUi5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKEV0KXtRKyssRys9RXQudnx8IiJ9KTooRz1TLnR8fCIiLFE9MSk7dmFyIG9lPWJuKDMrKFE+MT8yOjApKTtvZS53cml0ZV9zaGlmdCgyLEcubGVuZ3RoKSxvZS53cml0ZV9zaGlmdCgxLDF8KFE+MT84OjApKSxRPjEmJm9lLndyaXRlX3NoaWZ0KDIsUSk7dmFyIGdlPWJuKDIq''@;'; put 'put ''Ry5sZW5ndGgpO2dlLndyaXRlX3NoaWZ0KDIqRy5sZW5ndGgsRywidXRmMTZsZSIpO3ZhciBwZT1bb2UsZ2VdO2lmKGspe3ZhciB5ZT1ibig0KlMuUi5sZW5ndGgpLFBlPTA7cGUucHVzaCh5ZSk7Zm9yKHZhciBOZT0wO05lPFMuUi5sZW5ndGg7KytOZSl7dmFyIFllPVMuUltOZV07eWUud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixQZSksUGUrPShZZS52fHwiIikubGVuZ3RoO3ZhciBldD1ZZS5zP2wwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6WWUuc30sUik6MCxjdD1SLmNlbGxYZnNbZXRdLmZvbnRJZDt5ZS53cml0ZV9zaGlmdCgyLGN0PDQ/Y3Q6Y3QrMSl9fXJldHVybiBq''@;'; put 'put ''KHBlKX1mdW5jdGlvbiByYyhTLFIsayl7aWYoayl7aWYoay5iaWZmPj0yJiZrLmJpZmY8PTUpcmV0dXJuIFMucmVhZF9zaGlmdChSLCJjcHN0ciIpO2lmKGsuYmlmZj49MTIpcmV0dXJuIFMucmVhZF9zaGlmdChSLCJkYmNzLWNvbnQiKX12YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMu''@;'; put 'put ''cmVhZF9zaGlmdChSLDA9PT1RPyJzYmNzLWNvbnQiOiJkYmNzLWNvbnQiKX1mdW5jdGlvbiBudShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpO3JldHVybiAwPT09Rz8oUy5sKyssIiIpOnJjKFMsRyxrKX1mdW5jdGlvbiBYMChTLFIsayl7aWYoay5iaWZmPjUp''@;'; put 'put ''cmV0dXJuIG51KFMsMCxrKTt2YXIgRz1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1HPyhTLmwrKywiIik6Uy5yZWFkX3NoaWZ0KEcsay5iaWZmPD00fHwhUy5sZW5zPyJjcHN0ciI6InNiY3MtY29udCIpfWZ1bmN0aW9uIGNsKFMsUixrKXtyZXR1cm4ga3x8KGs9Ym4oMysyKlMubGVuZ3Ro''@;'; put 'put ''KSksay53cml0ZV9zaGlmdCgyLFMubGVuZ3RoKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9zaGlmdCgzMSxTLCJ1dGYxNmxlIiksa31mdW5jdGlvbiBDNChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIFI+MD9TLnJlYWRfc2hpZnQoUiwidXRmMTZsZSIpLnJlcGxhY2UoRSwi''@;'; put 'put ''Iik6IiJ9ZnVuY3Rpb24gbzAoUyxSKXtSfHwoUj1ibig2KzIqUy5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDQsMStTLmxlbmd0aCk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgyLFMuY2hhckNvZGVBdChrKSk7cmV0dXJuIFIud3JpdGVfc2hpZnQoMiwwKSxSfWZ1''@;'; put 'put ''bmN0aW9uIFM0KFMpe3ZhciBSPWJuKDUxMiksaz0wLEc9Uy5UYXJnZXQ7ImZpbGU6Ly8iPT1HLnNsaWNlKDAsNykmJihHPUcuc2xpY2UoNykpO3ZhciBRPUcuaW5kZXhPZigiIyIpLG9lPVE+LTE/MzE6MjM7c3dpdGNoKEcuY2hhckF0KDApKXtjYXNlIiMiOm9lPTI4O2JyZWFrO2Nhc2UiLiI6''@;'; put 'put ''b2UmPS0zfVIud3JpdGVfc2hpZnQoNCwyKSxSLndyaXRlX3NoaWZ0KDQsb2UpO3ZhciBnZT1bOCw2ODE1ODI3LDY2MTkyMzcsNDg0OTc4MCw4M107Zm9yKGs9MDtrPGdlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCg0LGdlW2tdKTtpZigyOD09b2UpbzAoRz1HLnNsaWNlKDEpLFIpO2Vsc2Ug''@;'; put 'put ''aWYoMiZvZSl7Zm9yKGdlPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChnZVtrXSwxNikpO3ZhciBwZT1RPi0xP0cuc2xpY2UoMCxRKTpHO2ZvcihS''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMioocGUubGVuZ3RoKzEpKSxrPTA7azxwZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMixwZS5jaGFyQ29kZUF0KGspKTtSLndyaXRlX3NoaWZ0KDIsMCksOCZvZSYmbzAoUT4tMT9HLnNsaWNlKFErMSk6IiIsUil9ZWxzZXtmb3IoZ2U9IjAzIDAzIDAwIDAwIDAw''@;'; put 'put ''IDAwIDAwIDAwIGMwIDAwIDAwIDAwIDAwIDAwIDAwIDQ2Ii5zcGxpdCgiICIpLGs9MDtrPGdlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KGdlW2tdLDE2KSk7Zm9yKHZhciB5ZT0wOyIuLi8iPT1HLnNsaWNlKDMqeWUsMyp5ZSszKXx8Ii4uXFwiPT1HLnNsaWNlKDMqeWUs''@;'; put 'put ''Myp5ZSszKTspKyt5ZTtmb3IoUi53cml0ZV9zaGlmdCgyLHllKSxSLndyaXRlX3NoaWZ0KDQsRy5sZW5ndGgtMyp5ZSsxKSxrPTA7azxHLmxlbmd0aC0zKnllOysraylSLndyaXRlX3NoaWZ0KDEsMjU1JkcuY2hhckNvZGVBdChrKzMqeWUpKTtmb3IoUi53cml0ZV9zaGlmdCgxLDApLFIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiw2NTUzNSksUi53cml0ZV9zaGlmdCgyLDU3MDA1KSxrPTA7azw2OysraylSLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFIuc2xpY2UoMCxSLmwpfWZ1bmN0aW9uIE1mKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxT''@;'; put 'put ''LnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIHVkKFMsUil7dmFyIGs9TWYoUyk7cmV0dXJuIGtbM109MCxrfWZ1bmN0aW9uIHcwKFMpe3JldHVybntyOlMucmVhZF9zaGlmdCgyKSxjOlMucmVhZF9zaGlmdCgyKSxpeGZlOlMucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gYTIoUyxSLGssRyl7cmV0''@;'; put 'put ''dXJuIEd8fChHPWJuKDYpKSxHLndyaXRlX3NoaWZ0KDIsUyksRy53cml0ZV9zaGlmdCgyLFIpLEcud3JpdGVfc2hpZnQoMixrfHwwKSxHfWZ1bmN0aW9uIHhmKFMsUixrKXt2YXIgRz1rLmJpZmY+OD80OjI7cmV0dXJuW1MucmVhZF9zaGlmdChHKSxTLnJlYWRfc2hpZnQoRywiaSIpLFMucmVh''@;'; put 'put ''ZF9zaGlmdChHLCJpIildfWZ1bmN0aW9uIHdvKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMiksSTEoUyldfWZ1bmN0aW9uIHMyKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7YzpTLnJlYWRfc2hpZnQoMikscjpSfSxlOntjOlMucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxyOmt9fX1mdW5jdGlvbiB2dShTLFIpe3JldHVybiBSfHwoUj1ibig4KSksUi53cml0ZV9zaGlmdCgyLFMucy5yKSxSLndyaXRlX3NoaWZ0KDIsUy5lLnIpLFIud3JpdGVfc2hpZnQoMixTLnMuYyksUi53cml0ZV9zaGlmdCgyLFMuZS5jKSxSfWZ1bmN0aW9uIE00KFMpe3ZhciBSPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7YzpTLnJlYWRfc2hpZnQoMSkscjpSfSxlOntjOlMucmVhZF9zaGlmdCgxKSxyOmt9fX12YXIgZ2M9TTQ7ZnVuY3Rpb24gYmcoUyl7Uy5sKz00O3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxH''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0xMixbayxSLEddfWZ1bmN0aW9uIHJ1KFMpe1MubCs9MixTLmwrPVMucmVhZF9zaGlmdCgyKX12YXIgRWY9ezA6cnUsNDpydSw1OnJ1LDY6cnUsNzpmdW5jdGlvbiBGdShTKXtyZXR1cm4gUy5sKz00LFMuY2Y9Uy5yZWFkX3NoaWZ0KDIpLHt9''@;'; put 'put ''fSw4OnJ1LDk6cnUsMTA6cnUsMTE6cnUsMTI6cnUsMTM6ZnVuY3Rpb24gUHUoUyl7dmFyIFI9e307cmV0dXJuIFMubCs9NCxTLmwrPTE2LFIuZlNoYXJlZE5vdGU9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9NCxSfSwxNDpydSwxNTpydSwxNjpydSwxNzpydSwxODpydSwxOTpydSwyMDpydSwyMTpi''@;'; put 'put ''Z307ZnVuY3Rpb24gVmMoUyxSKXt2YXIgaz17QklGRlZlcjowLGR0OjB9O3N3aXRjaChrLkJJRkZWZXI9Uy5yZWFkX3NoaWZ0KDIpLChSLT0yKT49MiYmKGsuZHQ9Uy5yZWFkX3NoaWZ0KDIpLFMubC09Miksay5CSUZGVmVyKXtjYXNlIDE1MzY6Y2FzZSAxMjgwOmNhc2UgMTAyNDpjYXNlIDc2''@;'; put 'put ''ODpjYXNlIDUxMjpjYXNlIDI6Y2FzZSA3OmJyZWFrO2RlZmF1bHQ6aWYoUj42KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBCSUZGIFZlciAiK2suQklGRlZlcil9cmV0dXJuIFMucmVhZF9zaGlmdChSKSxrfWZ1bmN0aW9uIHg0KFMsUixrKXt2YXIgRz0xNTM2LFE9MTY7c3dpdGNoKGsu''@;'; put 'put ''Ym9va1R5cGUpe2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpicmVhaztjYXNlImJpZmY1IjpHPTEyODAsUT04O2JyZWFrO2Nhc2UiYmlmZjQiOkc9NCxRPTY7YnJlYWs7Y2FzZSJiaWZmMyI6Rz0zLFE9NjticmVhaztjYXNlImJpZmYyIjpHPTIsUT00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb24iKX12YXIgb2U9Ym4oUSk7cmV0dXJuIG9lLndyaXRlX3NoaWZ0KDIsRyksb2Uud3JpdGVfc2hpZnQoMixSKSxRPjQmJm9lLndyaXRlX3NoaWZ0KDIsMjkyODIpLFE+NiYmb2Uud3JpdGVfc2hpZnQoMiwxOTk3KSxRPjgmJihvZS53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDQ5MTYxKSxvZS53cml0ZV9zaGlmdCgyLDEpLG9lLndyaXRlX3NoaWZ0KDIsMTc5OCksb2Uud3JpdGVfc2hpZnQoMiwwKSksb2V9ZnVuY3Rpb24gbDIoUyxSKXt2YXIgaz0hUnx8Ui5iaWZmPj04PzI6MSxHPWJuKDgraypTLm5hbWUubGVuZ3RoKTtHLndyaXRlX3NoaWZ0KDQsUy5w''@;'; put 'put ''b3MpLEcud3JpdGVfc2hpZnQoMSxTLmhzfHwwKSxHLndyaXRlX3NoaWZ0KDEsUy5kdCksRy53cml0ZV9zaGlmdCgxLFMubmFtZS5sZW5ndGgpLFIuYmlmZj49OCYmRy53cml0ZV9zaGlmdCgxLDEpLEcud3JpdGVfc2hpZnQoaypTLm5hbWUubGVuZ3RoLFMubmFtZSxSLmJpZmY8OD8ic2JjcyI6''@;'; put 'put ''InV0ZjE2bGUiKTt2YXIgUT1HLnNsaWNlKDAsRy5sKTtyZXR1cm4gUS5sPUcubCxRfWZ1bmN0aW9uIGlpKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCksbXUoUyl9ZnVuY3Rpb24gU28oUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxuMChTKX1mdW5jdGlvbiBIdShTLFIsayl7cmV0dXJuIFMu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSxYQihTLDAsayl9ZnVuY3Rpb24gYzIoUyxSLGspe3ZhciBHPTA7ayYmMj09ay5iaWZmfHwoRz1TLnJlYWRfc2hpZnQoMikpO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gayYmMj09ay5iaWZmJiYoRz0xLShRPj4xNSksUSY9MzI3NjcpLFt7VW5zeW5jZWQ6MSZH''@;'; put 'put ''LER5WmVybzooMiZHKT4+MSxFeEFzYzooNCZHKT4+MixFeERzYzooOCZHKT4+M30sUV19ZnVuY3Rpb24gYVYoUyxSLGssRyl7dmFyIFE9ayYmNT09ay5iaWZmO0d8fChHPWJuKFE/MytSLmxlbmd0aDo1KzIqUi5sZW5ndGgpKSxHLndyaXRlX3NoaWZ0KDIsUyksRy53cml0ZV9zaGlmdChRPzE6''@;'; put 'put ''MixSLmxlbmd0aCksUXx8Ry53cml0ZV9zaGlmdCgxLDEpLEcud3JpdGVfc2hpZnQoKFE/MToyKSpSLmxlbmd0aCxSLFE/InNiY3MiOiJ1dGYxNmxlIik7dmFyIG9lPUcubGVuZ3RoPkcubD9HLnNsaWNlKDAsRy5sKTpHO3JldHVybiBudWxsPT1vZS5sJiYob2UubD1vZS5sZW5ndGgpLG9lfXZh''@;'; put 'put ''ciB1Mj1YMDtmdW5jdGlvbiBYdyhTLFIsayl7dmFyIEc9Uy5sK1IsUT04IT1rLmJpZmYmJmsuYmlmZj8yOjQsb2U9Uy5yZWFkX3NoaWZ0KFEpLGdlPVMucmVhZF9zaGlmdChRKSxwZT1TLnJlYWRfc2hpZnQoMikseWU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmw9Ryx7czp7cjpvZSxjOnBl''@;'; put 'put ''fSxlOntyOmdlLGM6eWV9fX1mdW5jdGlvbiB5ZyhTLFIsayxHKXt2YXIgb2U9IWt8fCFrLmJpZmZ8fDg9PWsuYmlmZjtHfHwoRz1ibihrJiY1PT1rLmJpZmY/MTY6MjApKSxHLndyaXRlX3NoaWZ0KDIsb2UmJmsuY2VsbFN0eWxlcyYmUy5mb250SWQmJihTLmZvbnRJZDw0P1MuZm9udElkOlMu''@;'; put 'put ''Zm9udElkKzEpfHwwKTt2YXIgZ2U9MTtTLnByb3RlY3Rpb24mJihTLnByb3RlY3Rpb24uZWRpdGFibGUmJihnZSY9LTIpLFMucHJvdGVjdGlvbi5oaWRkZW4mJihnZXw9MikpLFMuc3R5bGU/KEcud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxHLndyaXRlX3NoaWZ0KDIsNjU1MjR8Z2Up''@;'; put 'put ''KTooRy53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLEcud3JpdGVfc2hpZnQoMixSPDw0fGdlKSk7dmFyIHBlPVMuYWxpZ25tZW50fHx7fTtpZihvZSl7dmFyIHllPTAsUGU9MDtEZy5pbmRleE9mKHBlLmhvcml6b250YWwpPi0xJiYoeWV8PURnLmluZGV4T2YocGUuaG9yaXpvbnRhbCkp''@;'; put 'put ''LHBlLndyYXBUZXh0JiYoeWV8PTgpLHQ4LmluZGV4T2YocGUudmVydGljYWwpPi0xP3llfD10OC5pbmRleE9mKHBlLnZlcnRpY2FsKTw8NDpudWxsPT1wZS52ZXJ0aWNhbCYmKHllfD0zMiksRy53cml0ZV9zaGlmdCgxLHllKSxHLndyaXRlX3NoaWZ0KDEsMCkscGUuc2hyaW5rVG9GaXQmJihQ''@;'; put 'put ''ZXw9MTYpLEcud3JpdGVfc2hpZnQoMixQZSk7dmFyIE5lPW51bGw7bnVsbCE9Uy5ib3JkZXJJZCYmKE5lPWsuQm9yZGVycyYmay5Cb3JkZXJzW1MuYm9yZGVySWR8fDBdfHx7fSk7dmFyIFllPTAsZXQ9MCxjdD0wO05lJiYobnVsbCE9TmUubGVmdCYmTmUubGVmdC5zdHlsZSYmKFllfD0oY3Q9''@;'; put 'put ''cGQuaW5kZXhPZihOZS5sZWZ0LnN0eWxlKSk+LTE/Y3Q6MCksbnVsbCE9TmUucmlnaHQmJk5lLnJpZ2h0LnN0eWxlJiYoWWV8PSgoY3Q9cGQuaW5kZXhPZihOZS5yaWdodC5zdHlsZSkpPi0xP2N0OjApPDw0KSxudWxsIT1OZS50b3AmJk5lLnRvcC5zdHlsZSYmKGV0fD0oY3Q9cGQuaW5kZXhP''@;'; put 'put ''ZihOZS50b3Auc3R5bGUpKT4tMT9jdDowKSxudWxsIT1OZS5ib3R0b20mJk5lLmJvdHRvbS5zdHlsZSYmKGV0fD0oKGN0PXBkLmluZGV4T2YoTmUuYm90dG9tLnN0eWxlKSk+LTE/Y3Q6MCk8PDQpKSxHLndyaXRlX3NoaWZ0KDEsWWUpLEcud3JpdGVfc2hpZnQoMSxldCksRy53cml0ZV9zaGlm''@;'; put 'put ''dCgyLDApLEcud3JpdGVfc2hpZnQoMiwwKSxHLndyaXRlX3NoaWZ0KDEsMCk7dmFyIEV0PTAsYXQ9ay5GaWxscyYmay5GaWxsc1tTLmZpbGxJZHx8MF18fHt9OyhhdC5mZ0NvbG9yfHxhdC5iZ0NvbG9yKSYmKEV0fD00KSxHLndyaXRlX3NoaWZ0KDEsRXQpO3ZhciBidD0wO2J0fD1QNChhdC5m''@;'; put 'put ''Z0NvbG9yLDY1KSxidHw9UDQoYXQuYmdDb2xvciw2NSk8PDcsRy53cml0ZV9zaGlmdCgyLGJ0KX1lbHNlIEcud3JpdGVfc2hpZnQoNCwwKSxHLndyaXRlX3NoaWZ0KDQsMCksRy53cml0ZV9zaGlmdCgyLDApO3JldHVybiBHfWZ1bmN0aW9uIEU0KFMsUixrKXt2YXIgRz13MChTKTsoMj09ay5i''@;'; put 'put ''aWZmfHw5PT1SKSYmKytTLmw7dmFyIFE9ZnVuY3Rpb24gVWwoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAxPT09Uy5yZWFkX3NoaWZ0KDEpP1I6MT09PVJ9KFMpO3JldHVybiBHLnZhbD1RLEcudD0hMD09PVF8fCExPT09UT8iYiI6ImUiLEd9dmFyIFhBPWZ1bmN0aW9uIHZnKFMs''@;'; put 'put ''UixrKXtyZXR1cm4gMD09PVI/IiI6WDAoUywwLGspfTtmdW5jdGlvbiBlQyhTLFIsayl7dmFyIFEsRz1TLnJlYWRfc2hpZnQoMiksb2U9e2ZCdWlsdEluOjEmRyxmV2FudEFkdmlzZTpHPj4+MSYxLGZXYW50UGljdDpHPj4+MiYxLGZPbGU6Rz4+PjMmMSxmT2xlTGluazpHPj4+NCYxLGNmOkc+''@;'; put 'put ''Pj41JjEwMjMsZkljb246Rz4+PjE1JjF9O3JldHVybiAxNDg0OT09PWsuc2JjY2gmJihRPWZ1bmN0aW9uIHo2KFMsUixrKXtTLmwrPTQ7dmFyIEc9Uy5sKyhSLT00KSxRPVVhKFMsMCxrKSxvZT1TLnJlYWRfc2hpZnQoMik7aWYob2UhPT0oRy09Uy5sKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZv''@;'; put 'put ''cm1lZCBBZGRpblVkZjogcGFkZGluZyA9ICIrRysiICE9ICIrb2UpO3JldHVybiBTLmwrPW9lLFF9KFMsUi0yLGspKSxvZS5ib2R5PVF8fFMucmVhZF9zaGlmdChSLTIpLCJzdHJpbmciPT10eXBlb2YgUSYmKG9lLk5hbWU9USksb2V9dmFyIGNWPVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIs''@;'; put 'put ''Il94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJhc2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94''@;'; put 'put ''bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIHRDKFMsUixrKXt2YXIgRz1TLmwrUixRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMSksZ2U9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLHBlPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSx5ZT0wOygha3x8ay5iaWZmPj01KSYmKDUhPWsuYmlmZiYmKFMubCs9MikseWU9Uy5yZWFkX3NoaWZ0KDIpLDU9PWsuYmlmZiYmKFMubCs9MiksUy5sKz00KTt2YXIgUGU9cmMoUyxnZSxrKTszMiZRJiYoUGU9Y1Zb''@;'; put 'put ''UGUuY2hhckNvZGVBdCgwKV0pO3ZhciBOZT1HLVMubDtrJiYyPT1rLmJpZmYmJi0tTmU7dmFyIFllPUchPVMubCYmMCE9PXBlJiZOZT4wP2Z1bmN0aW9uIEFuZShTLFIsayxHKXt2YXIgZ2UsUT1TLmwrUixvZT1saChTLEcsayk7cmV0dXJuIFEhPT1TLmwmJihnZT1CNChTLFEtUy5sLG9lLGsp''@;'; put 'put ''KSxbb2UsZ2VdfShTLE5lLGsscGUpOltdO3JldHVybntjaEtleTpvZSxOYW1lOlBlLGl0YWI6eWUscmdjZTpZZX19ZnVuY3Rpb24gRXYoUyxSLGspe2lmKGsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBuQyhTLFIsayl7Mz09U1tTLmwrMV0mJlNbUy5sXSsrO3ZhciBHPVVhKFMsMCxrKTtyZXR1''@;'; put 'put ''cm4gMz09Ry5jaGFyQ29kZUF0KDApP0cuc2xpY2UoMSk6R30oUywwLGspO2Zvcih2YXIgRz1bXSxRPVMubCtSLG9lPVMucmVhZF9zaGlmdChrLmJpZmY+OD80OjIpOzAhPW9lLS07KUcucHVzaCh4ZihTLDAsaykpO2lmKFMubCE9USl0aHJvdyBuZXcgRXJyb3IoIkJhZCBFeHRlcm5TaGVldDog''@;'; put 'put ''IitTLmwrIiAhPSAiK1EpO3JldHVybiBHfWZ1bmN0aW9uIEF2KFMsUixrKXt2YXIgRz1nYyhTLDYpO3N3aXRjaChrLmJpZmYpe2Nhc2UgMjpTLmwrKyxSLT03O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Uy5sKz0yLFItPTg7YnJlYWs7ZGVmYXVsdDpTLmwrPTYsUi09MTJ9cmV0dXJuW0csbEQoUyxS''@;'; put 'put ''LGspXX12YXIgUUE9W107ZnVuY3Rpb24gZlYoUyl7dmFyIFI9Ym4oMjQpLGs9Tm8oU1swXSk7Ui53cml0ZV9zaGlmdCgyLGsuciksUi53cml0ZV9zaGlmdCgyLGsuciksUi53cml0ZV9zaGlmdCgyLGsuYyksUi53cml0ZV9zaGlmdCgyLGsuYyk7Zm9yKHZhciBHPSJkMCBjOSBlYSA3OSBmOSBi''@;'; put 'put ''YSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxRPTA7UTwxNjsrK1EpUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEdbUV0sMTYpKTtyZXR1cm4gaihbUixTNChTWzFdKV0pfWZ1bmN0aW9uIGdWKFMpe3ZhciBSPVNbMV0uVG9vbHRpcCxrPWJuKDEwKzIqKFIubGVu''@;'; put 'put ''Z3RoKzEpKTtrLndyaXRlX3NoaWZ0KDIsMjA0OCk7dmFyIEc9Tm8oU1swXSk7ay53cml0ZV9zaGlmdCgyLEcuciksay53cml0ZV9zaGlmdCgyLEcuciksay53cml0ZV9zaGlmdCgyLEcuYyksay53cml0ZV9zaGlmdCgyLEcuYyk7Zm9yKHZhciBRPTA7UTxSLmxlbmd0aDsrK1Epay53cml0ZV9z''@;'; put 'put ''aGlmdCgyLFIuY2hhckNvZGVBdChRKSk7cmV0dXJuIGsud3JpdGVfc2hpZnQoMiwwKSxrfWZ1bmN0aW9uIHJDKFMsUixrKXtpZighay5jZWxsU3R5bGVzKXJldHVybiBJbihTLFIpO3ZhciBHPWsmJmsuYmlmZj49MTI/NDoyLFE9Uy5yZWFkX3NoaWZ0KEcpLG9lPVMucmVhZF9zaGlmdChHKSxn''@;'; put 'put ''ZT1TLnJlYWRfc2hpZnQoRykscGU9Uy5yZWFkX3NoaWZ0KEcpLHllPVMucmVhZF9zaGlmdCgyKTsyPT1HJiYoUy5sKz0yKTt2YXIgUGU9e3M6USxlOm9lLHc6Z2UsaXhmZTpwZSxmbGFnczp5ZX07cmV0dXJuKGsuYmlmZj49NXx8IWsuYmlmZikmJihQZS5sZXZlbD15ZT4+OCY3KSxQZX1RQVs4''@;'; put 'put ''XT1mdW5jdGlvbihTLFIpe3ZhciBrPVMubCtSO1MubCs9MTA7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NCxTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmwrPVEsUy5sPWsse2ZtdDpHfX07dmFyIFF0ZT13MCx0az13NCxPMD1u''@;'; put 'put ''dTt2YXIgQjM9ZnVuY3Rpb24oKXt2YXIgUz17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUs''@;'; put 'put ''MTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAsMTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAs''@;'; put 'put ''MjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5''@;'; put 'put ''OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LFI9VmUoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6''@;'; put 'put ''OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtmdW5jdGlvbiBRKHllLFBlKXt2YXIgTmU9UGV8fHt9O3JldHVybiBOZS5k''@;'; put 'put ''YXRlTkZ8fChOZS5kYXRlTkY9Inl5eXltbWRkIikscDQoZnVuY3Rpb24gRyh5ZSxQZSl7dmFyIE5lPVtdLFllPVYoMSk7c3dpdGNoKFBlLnR5cGUpe2Nhc2UiYmFzZTY0IjpZZT1iKF9lLmRlY29kZSh5ZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpZZT1iKHllKTticmVhaztjYXNlImJ1ZmZlciI6''@;'; put 'put ''Y2FzZSJhcnJheSI6WWU9eWV9bW4oWWUsMCk7dmFyIGV0PVllLnJlYWRfc2hpZnQoMSksY3Q9ISEoMTM2JmV0KSxFdD0hMSxhdD0hMTtzd2l0Y2goZXQpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OkV0PSEwLGN0PSEwO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTQwOmF0PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitldC50b1N0cmluZygxNikpfXZhciBidD0wLGp0PTUyMTsyPT1ldCYmKGJ0PVllLnJlYWRfc2hpZnQoMikpLFllLmwrPTMsMiE9ZXQmJihidD1ZZS5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpKSxidD4xMDQ4NTc2JiYoYnQ9MWU2KSwyIT1ldCYmKGp0PVllLnJlYWRfc2hpZnQoMikpO3ZhciBrdD1ZZS5yZWFkX3NoaWZ0KDIpLE90PVBlLmNvZGVwYWdlfHwxMjUyOzIhPWV0JiYoWWUubCs9MTYsWWUucmVhZF9zaGlmdCgxKSwwIT09WWVbWWUubF0mJihPdD1TW1llW1ll''@;'; put 'put ''LmxdXSksWWUubCs9MSxZZS5sKz0yKSxhdCYmKFllLmwrPTM2KTtmb3IodmFyIEt0PVtdLFRuPXt9LHJyPU1hdGgubWluKFllLmxlbmd0aCwyPT1ldD81MjE6anQtMTAtKEV0PzI2NDowKSksU249YXQ/MzI6MTE7WWUubDxyciYmMTMhPVllW1llLmxdOylzd2l0Y2goVG49e30sVG4ubmFtZT1j''@;'; put 'put ''cHRhYmxlLnV0aWxzLmRlY29kZShPdCxZZS5zbGljZShZZS5sLFllLmwrU24pKS5yZXBsYWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIiksWWUubCs9U24sVG4udHlwZT1TdHJpbmcuZnJvbUNoYXJDb2RlKFllLnJlYWRfc2hpZnQoMSkpLDIhPWV0JiYhYXQmJihUbi5vZmZzZXQ9WWUucmVhZF9z''@;'; put 'put ''aGlmdCg0KSksVG4ubGVuPVllLnJlYWRfc2hpZnQoMSksMj09ZXQmJihUbi5vZmZzZXQ9WWUucmVhZF9zaGlmdCgyKSksVG4uZGVjPVllLnJlYWRfc2hpZnQoMSksVG4ubmFtZS5sZW5ndGgmJkt0LnB1c2goVG4pLDIhPWV0JiYoWWUubCs9YXQ/MTM6MTQpLFRuLnR5cGUpe2Nhc2UiQiI6KCFF''@;'; put 'put ''dHx8OCE9VG4ubGVuKSYmUGUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitUbi5uYW1lKyI6IitUbi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6UGUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitUbi5uYW1lKyI6IitUbi50eXBlKTticmVhaztjYXNlIisiOmNhc2UiMCI6''@;'; put 'put ''Y2FzZSJAIjpjYXNlIkMiOmNhc2UiRCI6Y2FzZSJGIjpjYXNlIkkiOmNhc2UiTCI6Y2FzZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrVG4udHlwZSl9aWYoMTMhPT1ZZVtZZS5s''@;'; put 'put ''XSYmKFllLmw9anQtMSksMTMhPT1ZZS5yZWFkX3NoaWZ0KDEpKXRocm93IG5ldyBFcnJvcigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrWWUubCsiICIrWWVbWWUubF0pO1llLmw9anQ7dmFyIGxyPTAsWG49MDtmb3IoTmVbMF09W10sWG49MDtYbiE9S3QubGVuZ3RoOysrWG4pTmVbMF1b''@;'; put 'put ''WG5dPUt0W1huXS5uYW1lO2Zvcig7YnQtLSA+MDspaWYoNDIhPT1ZZVtZZS5sXSlmb3IoKytZZS5sLE5lWysrbHJdPVtdLFhuPTAsWG49MDtYbiE9S3QubGVuZ3RoOysrWG4pe3ZhciBCbj1ZZS5zbGljZShZZS5sLFllLmwrS3RbWG5dLmxlbik7WWUubCs9S3RbWG5dLmxlbixtbihCbiwwKTt2''@;'; put 'put ''YXIgZnI9Y3B0YWJsZS51dGlscy5kZWNvZGUoT3QsQm4pO3N3aXRjaChLdFtYbl0udHlwZSl7Y2FzZSJDIjpmci50cmltKCkubGVuZ3RoJiYoTmVbbHJdW1huXT1mci5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6TmVbbHJdW1huXT04PT09ZnIubGVuZ3RoP25ldyBEYXRlKCtm''@;'; put 'put ''ci5zbGljZSgwLDQpLCtmci5zbGljZSg0LDYpLTEsK2ZyLnNsaWNlKDYsOCkpOmZyO2JyZWFrO2Nhc2UiRiI6TmVbbHJdW1huXT1wYXJzZUZsb2F0KGZyLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOk5lW2xyXVtYbl09YXQ/MjE0NzQ4MzY0OF5Cbi5yZWFkX3NoaWZ0KC00LCJpIik6''@;'; put 'put ''Qm4ucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goZnIudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpOZVtscl1bWG5dPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpOZVtscl1bWG5dPSExO2JyZWFrO2Nhc2UiIjpjYXNlIj8iOmJyZWFrO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5yZWNvZ25pemVkIEw6fCIrZnIrInwiKX1icmVhaztjYXNlIk0iOmlmKCFjdCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitldC50b1N0cmluZygxNikpO05lW2xyXVtYbl09IiMjTUVNTyMjIisoYXQ/cGFy''@;'; put 'put ''c2VJbnQoZnIudHJpbSgpLDEwKTpCbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4iOihmcj1mci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1mciYmKE5lW2xyXVtYbl09K2ZyfHwwKTticmVhaztjYXNlIkAiOk5lW2xyXVtYbl09bmV3IERhdGUoQm4ucmVhZF9zaGlm''@;'; put 'put ''dCgtOCwiZiIpLTYyMTM1NjgzMmU1KTticmVhaztjYXNlIlQiOk5lW2xyXVtYbl09bmV3IERhdGUoODY0ZTUqKEJuLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkrQm4ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJZIjpOZVtscl1bWG5dPUJuLnJlYWRfc2hpZnQoNCwiaSIpLzFlNDticmVhaztj''@;'; put 'put ''YXNlIk8iOk5lW2xyXVtYbl09LUJuLnJlYWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNlIkIiOmlmKEV0JiY4PT1LdFtYbl0ubGVuKXtOZVtscl1bWG5dPUJuLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjpCbi5sKz1LdFtYbl0ubGVuO2JyZWFrO2Nhc2UiMCI6aWYo''@;'; put 'put ''Il9OdWxsRmxhZ3MiPT09S3RbWG5dLm5hbWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitLdFtYbl0udHlwZSl9fWVsc2UgWWUubCs9a3Q7aWYoMiE9ZXQmJlllLmw8WWUubGVuZ3RoJiYyNiE9WWVbWWUubCsrXSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkRCRiBFT0YgTWFya2VyIG1pc3NpbmcgIisoWWUubC0xKSsiIG9mICIrWWUubGVuZ3RoKyIgIitZZVtZZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFBlJiZQZS5zaGVldFJvd3MmJihOZT1OZS5zbGljZSgwLFBlLnNoZWV0Um93cykpLE5lfSh5ZSxOZSksTmUpfXZhciBnZT17''@;'; put 'put ''Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAsIiI6MH07cmV0dXJue3ZlcnNpb25zOlsyLDMsNDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBvZSh5ZSxQZSl7dHJ5e3JldHVybiB0aChRKHllLFBlKSxQZSl9Y2F0Y2goTmUpe2lmKFBlJiZQZS5XVEYpdGhyb3cgTmV9''@;'; put 'put ''cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6USxmcm9tX3NoZWV0OmZ1bmN0aW9uIHBlKHllLFBlKXt2YXIgTmU9UGV8fHt9O2lmKCtOZS5jb2RlcGFnZT49MCYmVSgrTmUuY29kZXBhZ2UpLCJzdHJpbmciPT1OZS50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90''@;'; put 'put ''IHdyaXRlIERCRiB0byBKUyBzdHJpbmciKTt2YXIgWWU9YmkoKSxldD1LNCh5ZSx7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLGN0PWV0WzBdLEV0PWV0LnNsaWNlKDEpLGF0PTAsYnQ9MCxqdD0wLGt0PTE7Zm9yKGF0PTA7YXQ8Y3QubGVuZ3RoOysrYXQpaWYobnVsbCE9YXQpe2lm''@;'; put 'put ''KCsranQsIm51bWJlciI9PXR5cGVvZiBjdFthdF0mJihjdFthdF09Y3RbYXRdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiBjdFthdF0pdGhyb3cgbmV3IEVycm9yKCJEQkYgSW52YWxpZCBjb2x1bW4gbmFtZSAiK2N0W2F0XSsiIHwiK3R5cGVvZiBjdFthdF0rInwiKTtpZihjdC5p''@;'; put 'put ''bmRleE9mKGN0W2F0XSkhPT1hdClmb3IoYnQ9MDtidDwxMDI0OysrYnQpaWYoLTE9PWN0LmluZGV4T2YoY3RbYXRdKyJfIitidCkpe2N0W2F0XSs9Il8iK2J0O2JyZWFrfX12YXIgT3Q9b28oeWVbIiFyZWYiXSksS3Q9W107Zm9yKGF0PTA7YXQ8PU90LmUuYy1PdC5zLmM7KythdCl7dmFyIFRu''@;'; put 'put ''PVtdO2ZvcihidD0wO2J0PEV0Lmxlbmd0aDsrK2J0KW51bGwhPUV0W2J0XVthdF0mJlRuLnB1c2goRXRbYnRdW2F0XSk7aWYoMCE9VG4ubGVuZ3RoJiZudWxsIT1jdFthdF0pe3ZhciBycj0iIixTbj0iIjtmb3IoYnQ9MDtidDxUbi5sZW5ndGg7KytidCl7c3dpdGNoKHR5cGVvZiBUbltidF0p''@;'; put 'put ''e2Nhc2UibnVtYmVyIjpTbj0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6U249IkMiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6U249IkwiO2JyZWFrO2Nhc2Uib2JqZWN0IjpTbj1UbltidF1pbnN0YW5jZW9mIERhdGU/IkQiOiJDIn1pZigiQyI9PShycj1yciYmcnIhPVNuPyJDIjpTbikp''@;'; put 'put ''YnJlYWt9a3QrPWdlW3JyXXx8MCxLdFthdF09cnJ9ZWxzZSBLdFthdF09Ij8ifXZhciBscj1ZZS5uZXh0KDMyKTtmb3IobHIud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLGxyLndyaXRlX3NoaWZ0KDQsRXQubGVuZ3RoKSxsci53cml0ZV9zaGlmdCgyLDI5NiszMipqdCksbHIud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixrdCksYXQ9MDthdDw0OysrYXQpbHIud3JpdGVfc2hpZnQoNCwwKTtmb3IobHIud3JpdGVfc2hpZnQoNCwoK1JbRl18fDMpPDw4KSxhdD0wLGJ0PTA7YXQ8Y3QubGVuZ3RoOysrYXQpaWYobnVsbCE9Y3RbYXRdKXt2YXIgWG49WWUubmV4dCgzMiksQm49KGN0W2F0XS5zbGljZSgtMTAp''@;'; put 'put ''KyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7WG4ud3JpdGVfc2hpZnQoMSxCbiwic2JjcyIpLFhuLndyaXRlX3NoaWZ0KDEsIj8iPT1LdFthdF0/IkMiOkt0W2F0XSwic2JjcyIpLFhuLndyaXRlX3NoaWZ0KDQsYnQpLFhuLndyaXRlX3NoaWZ0KDEsZ2VbS3RbYXRdXXx8''@;'; put 'put ''MCksWG4ud3JpdGVfc2hpZnQoMSwwKSxYbi53cml0ZV9zaGlmdCgxLDIpLFhuLndyaXRlX3NoaWZ0KDQsMCksWG4ud3JpdGVfc2hpZnQoMSwwKSxYbi53cml0ZV9zaGlmdCg0LDApLFhuLndyaXRlX3NoaWZ0KDQsMCksYnQrPWdlW0t0W2F0XV18fDB9dmFyIGZyPVllLm5leHQoMjY0KTtmb3Io''@;'; put 'put ''ZnIud3JpdGVfc2hpZnQoNCwxMyksYXQ9MDthdDw2NTsrK2F0KWZyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGF0PTA7YXQ8RXQubGVuZ3RoOysrYXQpe3ZhciBicj1ZZS5uZXh0KGt0KTtmb3IoYnIud3JpdGVfc2hpZnQoMSwwKSxidD0wO2J0PGN0Lmxlbmd0aDsrK2J0KWlmKG51bGwhPWN0W2J0''@;'; put 'put ''XSlzd2l0Y2goS3RbYnRdKXtjYXNlIkwiOmJyLndyaXRlX3NoaWZ0KDEsbnVsbD09RXRbYXRdW2J0XT82MzpFdFthdF1bYnRdPzg0OjcwKTticmVhaztjYXNlIkIiOmJyLndyaXRlX3NoaWZ0KDgsRXRbYXRdW2J0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6RXRbYXRdW2J0XT8oYnIud3JpdGVf''@;'; put 'put ''c2hpZnQoNCwoIjAwMDAiK0V0W2F0XVtidF0uZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTQpLCJzYmNzIiksYnIud3JpdGVfc2hpZnQoMiwoIjAwIisoRXRbYXRdW2J0XS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSxici53cml0ZV9zaGlmdCgyLCgiMDAiK0V0W2F0XVtidF0uZ2V0''@;'; put 'put ''RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6YnIud3JpdGVfc2hpZnQoOCwiMDAwMDAwMDAiLCJzYmNzIik7YnJlYWs7Y2FzZSJDIjp2YXIgZXI9U3RyaW5nKEV0W2F0XVtidF18fCIiKTtmb3IoYnIud3JpdGVfc2hpZnQoMSxlciwic2JjcyIpLGp0PTA7anQ8MjUwLWVyLmxlbmd0aDsrK2p0''@;'; put 'put ''KWJyLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gWWUubmV4dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxZZS5lbmQoKX19fSgpLGNDPWZ1bmN0aW9uKCl7dmFyIFM9e0FBOiJceGMwIixCQToiXHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhj''@;'; put 'put ''OSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIsQkk6Ilx4Y2QiLENJOiJceGNlIixISToiXHhjZiIsQU86Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJc''@;'; put 'put ''eGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixKYToyMjksQWU6Ilx4ZTgiLEJlOiJceGU5IixDZToiXHhlYSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUiLEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYi''@;'; put 'put ''LEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1OiJceGZjIixLQzoiXHhjNyIsS2M6Ilx4ZTciLHE6Ilx4ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDksRG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3''@;'; put 'put ''OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxrOjE4NixiOjIwOCxpOjIxNixsOjIyMixzOjI0MCx5OjI0OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUsIiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAs''@;'; put 'put ''Ij8iOjE5MSwieyI6MjIzfSxSPW5ldyBSZWdFeHAoIlx4MWJOKCIrUmUoUykuam9pbigifCIpLnJlcGxhY2UoL1x8XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIpKyJ8XFx8KSIsImdtIiksaz1mdW5jdGlvbihldCxjdCl7dmFyIEV0PVNbY3RdO3JldHVybiJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgRXQ/aWUoRXQpOkV0fSxHPWZ1bmN0aW9uKGV0LGN0LEV0KXt2YXIgYXQ9Y3QuY2hhckNvZGVBdCgwKS0zMjw8NHxFdC5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09YXQ/ZXQ6aWUoYXQpfTtmdW5jdGlvbiBvZShldCxjdCl7dmFyIGZyLEV0PWV0LnNwbGl0KC9bXG5c''@;'; put 'put ''cl0rLyksYXQ9LTEsYnQ9LTEsanQ9MCxrdD0wLE90PVtdLEt0PVtdLFRuPW51bGwscnI9e30sU249W10sbHI9W10sWG49W10sQm49MDtmb3IoK2N0LmNvZGVwYWdlPj0wJiZVKCtjdC5jb2RlcGFnZSk7anQhPT1FdC5sZW5ndGg7KytqdCl7Qm49MDt2YXIgRmksYnI9RXRbanRdLnRyaW0oKS5y''@;'; put 'put ''ZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxHKS5yZXBsYWNlKFIsayksZXI9YnIucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihaaSl7cmV0dXJuIFppLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZihici5sZW5ndGg+MClzd2l0''@;'; put 'put ''Y2goZXJbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PWVyWzFdLmNoYXJBdCgwKSYmS3QucHVzaChici5zbGljZSgzKS5yZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIG5hPSExLGNhPSExLExpPSExLGty''@;'; put 'put ''PSExLFZuPS0xLEJyPS0xO2ZvcihrdD0xO2t0PGVyLmxlbmd0aDsrK2t0KXN3aXRjaChlcltrdF0uY2hhckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsY2E9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoYXQ9cGFyc2VJbnQo''@;'; put 'put ''ZXJba3RdLnNsaWNlKDEpKS0xLGNhfHwoYnQ9MCksZnI9T3QubGVuZ3RoO2ZyPD1hdDsrK2ZyKU90W2ZyXT1bXTticmVhaztjYXNlIksiOiciJz09PShGaT1lcltrdF0uc2xpY2UoMSkpLmNoYXJBdCgwKT9GaT1GaS5zbGljZSgxLEZpLmxlbmd0aC0xKToiVFJVRSI9PT1GaT9GaT0hMDoiRkFM''@;'; put 'put ''U0UiPT09Rmk/Rmk9ITE6aXNOYU4oUXQoRmkpKT9pc05hTihzbihGaSkuZ2V0RGF0ZSgpKXx8KEZpPUhlKEZpKSk6KEZpPVF0KEZpKSxudWxsIT09VG4mJkEuaXNfZGF0ZShUbikmJihGaT11bihGaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2YgRmkmJiJzdHJpbmci''@;'; put 'put ''IT0oY3R8fHt9KS50eXBlJiYoY3R8fHt9KS5jb2RlcGFnZSYmKEZpPWNwdGFibGUudXRpbHMuZGVjb2RlKGN0LmNvZGVwYWdlLEZpKSksbmE9ITA7YnJlYWs7Y2FzZSJFIjprcj0hMDt2YXIgX3I9SGcoZXJba3RdLnNsaWNlKDEpLHtyOmF0LGM6YnR9KTtPdFthdF1bYnRdPVtPdFthdF1bYnRd''@;'; put 'put ''LF9yXTticmVhaztjYXNlIlMiOkxpPSEwLE90W2F0XVtidF09W090W2F0XVtidF0sIlM1UyJdO2JyZWFrO2Nhc2UiUiI6Vm49cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6QnI9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYoY3Qm''@;'; put 'put ''JmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX1pZihuYSYmKE90W2F0XVtidF0mJjI9PU90W2F0XVtidF0ubGVuZ3RoP090W2F0XVtidF1bMF09Rmk6T3RbYXRdW2J0XT1GaSxUbj1udWxsKSxMaSl7aWYoa3IpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJl''@;'; put 'put ''ZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIEZuPVZuPi0xJiZPdFtWbl1bQnJdO2lmKCFGbnx8IUZuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgZmluZCBiYXNlIik7T3RbYXRdW2J0XVsxXT1ZayhGblsxXSx7cjphdC1Wbixj''@;'; put 'put ''OmJ0LUJyfSl9YnJlYWs7Y2FzZSJGIjp2YXIganI9MDtmb3Ioa3Q9MTtrdDxlci5sZW5ndGg7KytrdClzd2l0Y2goZXJba3RdLmNoYXJBdCgwKSl7Y2FzZSJYIjpidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsKytqcjticmVhaztjYXNlIlkiOmZvcihhdD1wYXJzZUludChlcltrdF0u''@;'; put 'put ''c2xpY2UoMSkpLTEsZnI9T3QubGVuZ3RoO2ZyPD1hdDsrK2ZyKU90W2ZyXT1bXTticmVhaztjYXNlIk0iOkJuPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6VG49S3RbcGFyc2VJ''@;'; put 'put ''bnQoZXJba3RdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3IoWG49ZXJba3RdLnNsaWNlKDEpLnNwbGl0KCIgIiksZnI9cGFyc2VJbnQoWG5bMF0sMTApO2ZyPD1wYXJzZUludChYblsxXSwxMCk7KytmcilCbj1wYXJzZUludChYblsyXSwxMCksbHJbZnItMV09MD09PUJuP3toaWRkZW46''@;'; put 'put ''ITB9Ont3Y2g6Qm59LFEwKGxyW2ZyLTFdKTticmVhaztjYXNlIkMiOmxyW2J0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMV18fChscltidF09e30pO2JyZWFrO2Nhc2UiUiI6U25bYXQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xXXx8KFNuW2F0XT17fSksQm4+MD8oU25bYXRdLmhw''@;'; put 'put ''dD1CbixTblthdF0uaHB4PXNoKEJuKSk6MD09PUJuJiYoU25bYXRdLmhpZGRlbj0hMCk7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfWpyPDEmJihUbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGN0JiZjdC5XVEYpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIiticil9fXJldHVybiBTbi5sZW5ndGg+MCYmKHJyWyIhcm93cyJdPVNuKSxsci5sZW5ndGg+MCYmKHJyWyIhY29scyJdPWxyKSxjdCYmY3Quc2hlZXRSb3dzJiYoT3Q9T3Quc2xpY2UoMCxjdC5zaGVldFJvd3MpKSxbT3QscnJdfWZ1bmN0''@;'; put 'put ''aW9uIGdlKGV0LGN0KXt2YXIgRXQ9ZnVuY3Rpb24gUShldCxjdCl7c3dpdGNoKGN0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gb2UoX2UuZGVjb2RlKGV0KSxjdCk7Y2FzZSJiaW5hcnkiOnJldHVybiBvZShldCxjdCk7Y2FzZSJidWZmZXIiOnJldHVybiBvZShldC50b1N0cmluZygiYmlu''@;'; put 'put ''YXJ5IiksY3QpO2Nhc2UiYXJyYXkiOnJldHVybiBvZSh1dChldCksY3QpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitjdC50eXBlKX0oZXQsY3QpLGJ0PUV0WzFdLGp0PXA0KEV0WzBdLGN0KTtyZXR1cm4gUmUoYnQpLmZvckVhY2goZnVuY3Rpb24oa3Qpe2p0W2t0XT1i''@;'; put 'put ''dFtrdF19KSxqdH1mdW5jdGlvbiB5ZShldCxjdCxFdCxhdCl7dmFyIGJ0PSJDO1kiKyhFdCsxKSsiO1giKyhhdCsxKSsiO0siO3N3aXRjaChldC50KXtjYXNlIm4iOmJ0Kz1ldC52fHwwLGV0LmYmJiFldC5GJiYoYnQrPSI7RSIrSDQoZXQuZix7cjpFdCxjOmF0fSkpO2JyZWFrO2Nhc2UiYiI6''@;'; put 'put ''YnQrPWV0LnY/IlRSVUUiOiJGQUxTRSI7YnJlYWs7Y2FzZSJlIjpidCs9ZXQud3x8ZXQudjticmVhaztjYXNlImQiOmJ0Kz0nIicrKGV0Lnd8fGV0LnYpKyciJzticmVhaztjYXNlInMiOmJ0Kz0nIicrZXQudi5yZXBsYWNlKC8iL2csIiIpKyciJ31yZXR1cm4gYnR9cmV0dXJuIFNbInwiXT0y''@;'; put 'put ''NTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIHBlKGV0LGN0KXtyZXR1cm4gdGgoZ2UoZXQsY3QpLGN0KX0sdG9fc2hlZXQ6Z2UsZnJvbV9zaGVldDpmdW5jdGlvbiBZZShldCxjdCl7dmFyIGp0LEV0PVsiSUQ7UFNoZWV0SlM7TjtFIl0sYXQ9W10sYnQ9b28oZXRbIiFyZWYiXSksa3Q9QXJyYXku''@;'; put 'put ''aXNBcnJheShldCksT3Q9IlxyXG4iO0V0LnB1c2goIlA7UEdlbmVyYWwiKSxFdC5wdXNoKCJGO1AwO0RHMEc4O00yNTUiKSxldFsiIWNvbHMiXSYmZnVuY3Rpb24gUGUoZXQsY3Qpe2N0LmZvckVhY2goZnVuY3Rpb24oRXQsYXQpe3ZhciBidD0iRjtXIisoYXQrMSkrIiAiKyhhdCsxKSsiICI7''@;'; put 'put ''RXQuaGlkZGVuP2J0Kz0iMCI6KCJudW1iZXIiPT10eXBlb2YgRXQud2lkdGgmJiFFdC53cHgmJihFdC53cHg9TWcoRXQud2lkdGgpKSwibnVtYmVyIj09dHlwZW9mIEV0LndweCYmIUV0LndjaCYmKEV0LndjaD14ZyhFdC53cHgpKSwibnVtYmVyIj09dHlwZW9mIEV0LndjaCYmKGJ0Kz1NYXRo''@;'; put 'put ''LnJvdW5kKEV0LndjaCkpKSwiICIhPWJ0LmNoYXJBdChidC5sZW5ndGgtMSkmJmV0LnB1c2goYnQpfSl9KEV0LGV0WyIhY29scyJdKSxldFsiIXJvd3MiXSYmZnVuY3Rpb24gTmUoZXQsY3Qpe2N0LmZvckVhY2goZnVuY3Rpb24oRXQsYXQpe3ZhciBidD0iRjsiO0V0LmhpZGRlbj9idCs9Ik0w''@;'; put 'put ''OyI6RXQuaHB0P2J0Kz0iTSIrMjAqRXQuaHB0KyI7IjpFdC5ocHgmJihidCs9Ik0iKzIwKlUzKEV0LmhweCkrIjsiKSxidC5sZW5ndGg+MiYmZXQucHVzaChidCsiUiIrKGF0KzEpKX0pfShFdCxldFsiIXJvd3MiXSksRXQucHVzaCgiQjtZIisoYnQuZS5yLWJ0LnMucisxKSsiO1giKyhidC5l''@;'; put 'put ''LmMtYnQucy5jKzEpKyI7RCIrW2J0LnMuYyxidC5zLnIsYnQuZS5jLGJ0LmUucl0uam9pbigiICIpKTtmb3IodmFyIEt0PWJ0LnMucjtLdDw9YnQuZS5yOysrS3QpZm9yKHZhciBUbj1idC5zLmM7VG48PWJ0LmUuYzsrK1RuKXt2YXIgcnI9cWkoe3I6S3QsYzpUbn0pOyhqdD1rdD8oZXRbS3Rd''@;'; put 'put ''fHxbXSlbVG5dOmV0W3JyXSkmJihudWxsIT1qdC52fHxqdC5mJiYhanQuRikmJmF0LnB1c2goeWUoanQsMCxLdCxUbikpfXJldHVybiBFdC5qb2luKE90KStPdCthdC5qb2luKE90KStPdCsiRSIrT3R9fX0oKSxrdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFIob2UsZ2Upe2Zvcih2YXIgcGU9b2Uu''@;'; put 'put ''c3BsaXQoIlxuIikseWU9LTEsUGU9LTEsTmU9MCxZZT1bXTtOZSE9PXBlLmxlbmd0aDsrK05lKWlmKCJCT1QiIT09cGVbTmVdLnRyaW0oKSl7aWYoISh5ZTwwKSl7Zm9yKHZhciBldD1wZVtOZV0udHJpbSgpLnNwbGl0KCIsIiksY3Q9ZXRbMF0sRXQ9ZXRbMV0sYXQ9cGVbKytOZV18fCIiOzEm''@;'; put 'put ''KGF0Lm1hdGNoKC9bIl0vZyl8fFtdKS5sZW5ndGgmJk5lPHBlLmxlbmd0aC0xOylhdCs9IlxuIitwZVsrK05lXTtzd2l0Y2goYXQ9YXQudHJpbSgpLCtjdCl7Y2FzZS0xOmlmKCJCT1QiPT09YXQpe1llWysreWVdPVtdLFBlPTA7Y29udGludWV9aWYoIkVPRCIhPT1hdCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVucmVjb2duaXplZCBESUYgc3BlY2lhbCBjb21tYW5kICIrYXQpO2JyZWFrO2Nhc2UgMDpZZVt5ZV1bUGVdPSJUUlVFIj09PWF0fHwiRkFMU0UiIT09YXQmJihpc05hTihRdChFdCkpP2lzTmFOKHNuKEV0KS5nZXREYXRlKCkpP0V0OkhlKEV0KTpRdChFdCkpLCsrUGU7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAxOihhdD0oYXQ9YXQuc2xpY2UoMSxhdC5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJmF0Lm1hdGNoKC9ePSIuKiIkLykmJihhdD1hdC5zbGljZSgyLC0xKSksWWVbeWVdW1BlKytdPSIiIT09YXQ/YXQ6bnVsbH1pZigiRU9EIj09PWF0KWJyZWFrfX1lbHNlIFllWysreWVdPVtd''@;'; put 'put ''LFBlPTA7cmV0dXJuIGdlJiZnZS5zaGVldFJvd3MmJihZZT1ZZS5zbGljZSgwLGdlLnNoZWV0Um93cykpLFllfWZ1bmN0aW9uIGsob2UsZ2Upe3JldHVybiBwNChmdW5jdGlvbiBTKG9lLGdlKXtzd2l0Y2goZ2UudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBSKF9lLmRlY29kZShvZSksZ2Up''@;'; put 'put ''O2Nhc2UiYmluYXJ5IjpyZXR1cm4gUihvZSxnZSk7Y2FzZSJidWZmZXIiOnJldHVybiBSKG9lLnRvU3RyaW5nKCJiaW5hcnkiKSxnZSk7Y2FzZSJhcnJheSI6cmV0dXJuIFIodXQob2UpLGdlKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrZ2UudHlwZSl9KG9lLGdlKSxn''@;'; put 'put ''ZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEcob2UsZ2Upe3JldHVybiB0aChrKG9lLGdlKSxnZSl9LHRvX3NoZWV0OmssZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBvZT1mdW5jdGlvbih5ZSxQZSxOZSxZZSxldCl7eWUucHVzaChQZSkseWUucHVzaChOZSsiLCIrWWUpLHllLnB1''@;'; put 'put ''c2goJyInK2V0LnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxnZT1mdW5jdGlvbih5ZSxQZSxOZSxZZSl7eWUucHVzaChQZSsiLCIrTmUpLHllLnB1c2goMT09UGU/JyInK1llLnJlcGxhY2UoLyIvZywnIiInKSsnIic6WWUpfTtyZXR1cm4gZnVuY3Rpb24oeWUpe3ZhciBZZSxQZT1bXSxOZT1v''@;'; put 'put ''byh5ZVsiIXJlZiJdKSxldD1BcnJheS5pc0FycmF5KHllKTtvZShQZSwiVEFCTEUiLDAsMSwic2hlZXRqcyIpLG9lKFBlLCJWRUNUT1JTIiwwLE5lLmUuci1OZS5zLnIrMSwiIiksb2UoUGUsIlRVUExFUyIsMCxOZS5lLmMtTmUucy5jKzEsIiIpLG9lKFBlLCJEQVRBIiwwLDAsIiIpO2Zvcih2''@;'; put 'put ''YXIgY3Q9TmUucy5yO2N0PD1OZS5lLnI7KytjdCl7Z2UoUGUsLTEsMCwiQk9UIik7Zm9yKHZhciBFdD1OZS5zLmM7RXQ8PU5lLmUuYzsrK0V0KXt2YXIgYXQ9cWkoe3I6Y3QsYzpFdH0pO2lmKFllPWV0Pyh5ZVtjdF18fFtdKVtFdF06eWVbYXRdKXN3aXRjaChZZS50KXtjYXNlIm4iOnZhciBi''@;'; put 'put ''dD1ZZS53OyFidCYmbnVsbCE9WWUudiYmKGJ0PVllLnYpLG51bGw9PWJ0P2dlKFBlLDEsMCxZZS5mJiYhWWUuRj8iPSIrWWUuZjoiIik6Z2UoUGUsMCxidCwiViIpO2JyZWFrO2Nhc2UiYiI6Z2UoUGUsMCxZZS52PzE6MCxZZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOmdlKFBl''@;'; put 'put ''LDEsMCxpc05hTihZZS52KT9ZZS52Oic9IicrWWUudisnIicpO2JyZWFrO2Nhc2UiZCI6WWUud3x8KFllLnc9QS5mb3JtYXQoWWUuenx8QS5fdGFibGVbMTRdLFFlKEhlKFllLnYpKSkpLGdlKFBlLDAsWWUudywiViIpO2JyZWFrO2RlZmF1bHQ6Z2UoUGUsMSwwLCIiKX1lbHNlIGdlKFBlLDEs''@;'; put 'put ''MCwiIil9fXJldHVybiBnZShQZSwtMSwwLCJFT0QiKSxQZS5qb2luKCJcclxuIil9fSgpfX0oKSxLNj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoWWUpe3JldHVybiBZZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9u''@;'; put 'put ''IFIoWWUpe3JldHVybiBZZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIEcoWWUsZXQpe3JldHVybiBwNChmdW5jdGlvbiBrKFllLGV0KXtmb3IodmFyIGN0PVllLnNwbGl0KCJcbiIpLEV0PS0xLGF0PS0xLGJ0''@;'; put 'put ''PTAsanQ9W107YnQhPT1jdC5sZW5ndGg7KytidCl7dmFyIGt0PWN0W2J0XS50cmltKCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9PT1rdFswXSl7dmFyIE90PU5vKGt0WzFdKTtpZihqdC5sZW5ndGg8PU90LnIpZm9yKEV0PWp0Lmxlbmd0aDtFdDw9T3QucjsrK0V0KWp0W0V0XXx8KGp0W0V0XT1b''@;'; put 'put ''XSk7c3dpdGNoKEV0PU90LnIsYXQ9T3QuYyxrdFsyXSl7Y2FzZSJ0IjpqdFtFdF1bYXRdPVMoa3RbM10pO2JyZWFrO2Nhc2UidiI6anRbRXRdW2F0XT0ra3RbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBLdD1rdFtrdC5sZW5ndGgtMV07Y2FzZSJ2dGMiOmp0W0V0XVthdF09Im5sIj09PWt0WzNd''@;'; put 'put ''PyEhK2t0WzRdOitrdFs0XSwidnRmIj09a3RbMl0mJihqdFtFdF1bYXRdPVtqdFtFdF1bYXRdLEt0XSl9fX1yZXR1cm4gZXQmJmV0LnNoZWV0Um93cyYmKGp0PWp0LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksanR9KFllLGV0KSxldCl9dmFyIG9lPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIs''@;'; put 'put ''Ik1JTUUtVmVyc2lvbjogMS4wIiwiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxnZT1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRl''@;'; put 'put ''eHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIscGU9WyIjIFNvY2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxuIikseWU9Ii0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gUGUo''@;'; put 'put ''WWUpe2lmKCFZZXx8IVllWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciBFdCxldD1bXSxjdD1bXSxhdD0iIixidD1NcyhZZVsiIXJlZiJdKSxqdD1BcnJheS5pc0FycmF5KFllKSxrdD1idC5zLnI7a3Q8PWJ0LmUucjsrK2t0KWZvcih2YXIgT3Q9YnQucy5jO090PD1idC5lLmM7KytPdClpZihh''@;'; put 'put ''dD1xaSh7cjprdCxjOk90fSksKEV0PWp0PyhZZVtrdF18fFtdKVtPdF06WWVbYXRdKSYmbnVsbCE9RXQudiYmInoiIT09RXQudCl7c3dpdGNoKGN0PVsiY2VsbCIsYXQsInQiXSxFdC50KXtjYXNlInMiOmNhc2Uic3RyIjpjdC5wdXNoKFIoRXQudikpO2JyZWFrO2Nhc2UibiI6RXQuZj8oY3Rb''@;'; put 'put ''Ml09InZ0ZiIsY3RbM109Im4iLGN0WzRdPUV0LnYsY3RbNV09UihFdC5mKSk6KGN0WzJdPSJ2IixjdFszXT1FdC52KTticmVhaztjYXNlImIiOmN0WzJdPSJ2dCIrKEV0LmY/ImYiOiJjIiksY3RbM109Im5sIixjdFs0XT1FdC52PyIxIjoiMCIsY3RbNV09UihFdC5mfHwoRXQudj8iVFJVRSI6''@;'; put 'put ''IkZBTFNFIikpO2JyZWFrO2Nhc2UiZCI6dmFyIEt0PVFlKEhlKEV0LnYpKTtjdFsyXT0idnRjIixjdFszXT0ibmQiLGN0WzRdPSIiK0t0LGN0WzVdPUV0Lnd8fEEuZm9ybWF0KEV0Lnp8fEEuX3RhYmxlWzE0XSxLdCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1ldC5wdXNoKGN0LmpvaW4oIjoi''@;'; put 'put ''KSl9cmV0dXJuIGV0LnB1c2goInNoZWV0OmM6IisoYnQuZS5jLWJ0LnMuYysxKSsiOnI6IisoYnQuZS5yLWJ0LnMucisxKSsiOnR2ZjoxIiksZXQucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0LXdpa2kiKSxldC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBRKFllLGV0''@;'; put 'put ''KXtyZXR1cm4gdGgoRyhZZSxldCksZXQpfSx0b19zaGVldDpHLGZyb21fc2hlZXQ6ZnVuY3Rpb24gTmUoWWUpe3JldHVybltvZSxnZSxwZSxnZSxQZShZZSkseWVdLmpvaW4oIlxuIil9fX0oKSxqMz1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoTmUsWWUsZXQsY3QsRXQpe0V0LnJhdz9ZZVtldF1b''@;'; put 'put ''Y3RdPU5lOiIiPT09TmV8fChZZVtldF1bY3RdPVJpKE5lLEV0KT9SaShOZSxFdCkudjpOZSl9dmFyIGs9ezQ0OiIsIiw5OiJcdCIsNTk6IjsifSxHPXs0NDozLDk6Miw1OToxfTtmdW5jdGlvbiBRKE5lKXtmb3IodmFyIFllPXt9LGV0PSExLGN0PTAsRXQ9MDtjdDxOZS5sZW5ndGg7KytjdCkz''@;'; put 'put ''ND09KEV0PU5lLmNoYXJDb2RlQXQoY3QpKT9ldD0hZXQ6IWV0JiZFdCBpbiBrJiYoWWVbRXRdPShZZVtFdF18fDApKzEpO2ZvcihjdCBpbiBFdD1bXSxZZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWWUsY3QpJiZFdC5wdXNoKFtZZVtjdF0sY3RdKTtpZighRXQubGVu''@;'; put 'put ''Z3RoKWZvcihjdCBpbiBZZT1HKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChZZSxjdCkmJkV0LnB1c2goW1llW2N0XSxjdF0pO3JldHVybiBFdC5zb3J0KGZ1bmN0aW9uKGF0LGJ0KXtyZXR1cm4gYXRbMF0tYnRbMF18fEdbYXRbMV1dLUdbYnRbMV1dfSksa1tFdC5wb3Ao''@;'; put 'put ''KVsxXV19ZnVuY3Rpb24gZ2UoTmUsWWUpe3JldHVybiFZZXx8IVllLlBSTnx8InNlcD0iPT1OZS5zbGljZSgwLDQpfHxOZS5pbmRleE9mKCJcdCIpPj0wfHxOZS5pbmRleE9mKCIsIik+PTB8fE5lLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBvZShOZSxZZSl7dmFyIGV0PVllfHx7fSxjdD0i''@;'; put 'put ''IjtudWxsIT1sZSYmbnVsbD09ZXQuZGVuc2UmJihldC5kZW5zZT1sZSk7dmFyIEV0PWV0LmRlbnNlP1tdOnt9LGF0PXtzOntjOjAscjowfSxlOntjOjAscjowfX07InNlcD0iPT1OZS5zbGljZSgwLDQpPzEzPT1OZS5jaGFyQ29kZUF0KDUpJiYxMD09TmUuY2hhckNvZGVBdCg2KT8oY3Q9TmUu''@;'; put 'put ''Y2hhckF0KDQpLE5lPU5lLnNsaWNlKDcpKToxMz09TmUuY2hhckNvZGVBdCg1KXx8MTA9PU5lLmNoYXJDb2RlQXQoNSk/KGN0PU5lLmNoYXJBdCg0KSxOZT1OZS5zbGljZSg2KSk6Y3Q9UShOZS5zbGljZSgwLDEwMjQpKTpjdD1RKE5lLnNsaWNlKDAsMTAyNCkpO3ZhciBidD0wLGp0PTAsa3Q9''@;'; put 'put ''MCxPdD0wLEt0PTAsVG49Y3QuY2hhckNvZGVBdCgwKSxycj0hMSxTbj0wLGxyPU5lLmNoYXJDb2RlQXQoMCk7TmU9TmUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKTt2YXIgWG49bnVsbCE9ZXQuZGF0ZU5GP2Z1bmN0aW9uIFVlKFMpe3ZhciBSPSJudW1iZXIiPT10eXBlb2YgUz9BLl90YWJsZVtT''@;'; put 'put ''XTpTO3JldHVybiBSPVIucmVwbGFjZSh3ZSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrUisiJCIpfShldC5kYXRlTkYpOm51bGw7ZnVuY3Rpb24gQm4oKXt2YXIgZnI9TmUuc2xpY2UoT3QsS3QpLGJyPXt9O2lmKCciJz09ZnIuY2hhckF0KDApJiYnIic9PWZyLmNoYXJBdChmci5sZW5ndGgt''@;'; put 'put ''MSkmJihmcj1mci5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1mci5sZW5ndGgpYnIudD0ieiI7ZWxzZSBpZihldC5yYXcpYnIudD0icyIsYnIudj1mcjtlbHNlIGlmKDA9PT1mci50cmltKCkubGVuZ3RoKWJyLnQ9InMiLGJyLnY9ZnI7ZWxzZSBpZig2MT09ZnIuY2hhckNv''@;'; put 'put ''ZGVBdCgwKSkzND09ZnIuY2hhckNvZGVBdCgxKSYmMzQ9PWZyLmNoYXJDb2RlQXQoZnIubGVuZ3RoLTEpPyhici50PSJzIixici52PWZyLnNsaWNlKDIsLTEpLnJlcGxhY2UoLyIiL2csJyInKSk6ZnVuY3Rpb24gaG5lKFMpe3JldHVybiAxIT1TLmxlbmd0aH0oZnIpPyhici50PSJuIixici5m''@;'; put 'put ''PWZyLnNsaWNlKDEpKTooYnIudD0icyIsYnIudj1mcik7ZWxzZSBpZigiVFJVRSI9PWZyKWJyLnQ9ImIiLGJyLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1mcilici50PSJiIixici52PSExO2Vsc2UgaWYoaXNOYU4oa3Q9UXQoZnIpKSlpZighaXNOYU4oc24oZnIpLmdldERhdGUoKSl8fFhuJiZm''@;'; put 'put ''ci5tYXRjaChYbikpe2JyLno9ZXQuZGF0ZU5GfHxBLl90YWJsZVsxNF07dmFyIGVyPTA7WG4mJmZyLm1hdGNoKFhuKSYmKGZyPWZ1bmN0aW9uIEplKFMsUixrKXt2YXIgRz0tMSxRPS0xLG9lPS0xLGdlPS0xLHBlPS0xLHllPS0xOyhSLm1hdGNoKHdlKXx8W10pLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''WWUsZXQpe3ZhciBjdD1wYXJzZUludChrW2V0KzFdLDEwKTtzd2l0Y2goWWUudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkpe2Nhc2UieSI6Rz1jdDticmVhaztjYXNlImQiOm9lPWN0O2JyZWFrO2Nhc2UiaCI6Z2U9Y3Q7YnJlYWs7Y2FzZSJzIjp5ZT1jdDticmVhaztjYXNlIm0iOmdlPj0wP3Bl''@;'; put 'put ''PWN0OlE9Y3R9fSkseWU+PTAmJi0xPT1wZSYmUT49MCYmKHBlPVEsUT0tMSk7dmFyIFBlPSgiIisoRz49MD9HOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIwMCIrKFE+PTE/UToxKSkuc2xpY2UoLTIpKyItIisoIjAwIisob2U+PTE/b2U6MSkpLnNsaWNlKC0y''@;'; put 'put ''KTs3PT1QZS5sZW5ndGgmJihQZT0iMCIrUGUpLDg9PVBlLmxlbmd0aCYmKFBlPSIyMCIrUGUpO3ZhciBOZT0oIjAwIisoZ2U+PTA/Z2U6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKHBlPj0wP3BlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyh5ZT49MD95ZTowKSkuc2xpY2UoLTIpO3JldHVy''@;'; put 'put ''bi0xPT1nZSYmLTE9PXBlJiYtMT09eWU/UGU6LTE9PUcmJi0xPT1RJiYtMT09b2U/TmU6UGUrIlQiK05lfSgwLGV0LmRhdGVORixmci5tYXRjaChYbil8fFtdKSxlcj0xKSxldC5jZWxsRGF0ZXM/KGJyLnQ9ImQiLGJyLnY9SGUoZnIsZXIpKTooYnIudD0ibiIsYnIudj1RZShIZShmcixlcikp''@;'; put 'put ''KSwhMSE9PWV0LmNlbGxUZXh0JiYoYnIudz1BLmZvcm1hdChici56LGJyLnYgaW5zdGFuY2VvZiBEYXRlP1FlKGJyLnYpOmJyLnYpKSxldC5jZWxsTkZ8fGRlbGV0ZSBici56fWVsc2UgYnIudD0icyIsYnIudj1mcjtlbHNlIGJyLnQ9Im4iLCExIT09ZXQuY2VsbFRleHQmJihici53PWZyKSxi''@;'; put 'put ''ci52PWt0O2lmKCJ6Ij09YnIudHx8KGV0LmRlbnNlPyhFdFtidF18fChFdFtidF09W10pLEV0W2J0XVtqdF09YnIpOkV0W3FpKHtjOmp0LHI6YnR9KV09YnIpLGxyPU5lLmNoYXJDb2RlQXQoT3Q9S3QrMSksYXQuZS5jPGp0JiYoYXQuZS5jPWp0KSxhdC5lLnI8YnQmJihhdC5lLnI9YnQpLFNu''@;'; put 'put ''PT1UbikrK2p0O2Vsc2UgaWYoanQ9MCwrK2J0LGV0LnNoZWV0Um93cyYmZXQuc2hlZXRSb3dzPD1idClyZXR1cm4hMH1lOmZvcig7S3Q8TmUubGVuZ3RoOysrS3Qpc3dpdGNoKFNuPU5lLmNoYXJDb2RlQXQoS3QpKXtjYXNlIDM0OjM0PT09bHImJihycj0hcnIpO2JyZWFrO2Nhc2UgVG46Y2Fz''@;'; put 'put ''ZSAxMDpjYXNlIDEzOmlmKCFyciYmQm4oKSlicmVhayBlfXJldHVybiBLdC1PdD4wJiZCbigpLEV0WyIhcmVmIl09cmEoYXQpLEV0fShOZSxZZSk6cDQoZnVuY3Rpb24gUihOZSxZZSl7dmFyIGV0PVllfHx7fSxjdD1bXTtpZighTmV8fDA9PT1OZS5sZW5ndGgpcmV0dXJuIGN0O2Zvcih2YXIg''@;'; put 'put ''RXQ9TmUuc3BsaXQoL1tcclxuXS8pLGF0PUV0Lmxlbmd0aC0xO2F0Pj0wJiYwPT09RXRbYXRdLmxlbmd0aDspLS1hdDtmb3IodmFyIGJ0PTEwLGp0PTAsa3Q9MDtrdDw9YXQ7KytrdCktMT09KGp0PUV0W2t0XS5pbmRleE9mKCIgIikpP2p0PUV0W2t0XS5sZW5ndGg6anQrKyxidD1NYXRoLm1h''@;'; put 'put ''eChidCxqdCk7Zm9yKGt0PTA7a3Q8PWF0Oysra3Qpe2N0W2t0XT1bXTt2YXIgT3Q9MDtmb3IoUyhFdFtrdF0uc2xpY2UoMCxidCkudHJpbSgpLGN0LGt0LE90LGV0KSxPdD0xO090PD0oRXRba3RdLmxlbmd0aC1idCkvMTArMTsrK090KVMoRXRba3RdLnNsaWNlKGJ0KzEwKihPdC0xKSxidCsx''@;'; put 'put ''MCpPdCkudHJpbSgpLGN0LGt0LE90LGV0KX1yZXR1cm4gZXQuc2hlZXRSb3dzJiYoY3Q9Y3Quc2xpY2UoMCxldC5zaGVldFJvd3MpKSxjdH0oTmUsWWUpLFllKX1mdW5jdGlvbiBwZShOZSxZZSl7dmFyIGV0PSIiLGN0PSJzdHJpbmciPT1ZZS50eXBlP1swLDAsMCwwXTpRUyhOZSxZZSk7c3dp''@;'; put 'put ''dGNoKFllLnR5cGUpe2Nhc2UiYmFzZTY0IjpldD1fZS5kZWNvZGUoTmUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6ZXQ9TmU7YnJlYWs7Y2FzZSJidWZmZXIiOmV0PTY1MDAxPT1ZZS5jb2RlcGFnZT9OZS50b1N0cmluZygidXRmOCIpOlllLmNvZGVwYWdlJiZ0eXBlb2YgY3B0''@;'; put 'put ''YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoWWUuY29kZXBhZ2UsTmUpOk5lLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpldD11dChOZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrWWUudHlwZSl9cmV0dXJuIDIz''@;'; put 'put ''OT09Y3RbMF0mJjE4Nz09Y3RbMV0mJjE5MT09Y3RbMl0/ZXQ9Z28oZXQuc2xpY2UoMykpOiJiaW5hcnkiPT1ZZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJlllLmNvZGVwYWdlJiYoZXQ9Y3B0YWJsZS51dGlscy5kZWNvZGUoWWUuY29kZXBhZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMjg1''@;'; put 'put ''OTEsZXQpKSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT1ldC5zbGljZSgwLDE5KT9LNi50b19zaGVldCgic3RyaW5nIj09WWUudHlwZT9ldDpnbyhldCksWWUpOmdlKGV0LFllKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24geWUoTmUsWWUpe3JldHVybiB0aChwZShOZSxZZSksWWUpfSx0''@;'; put 'put ''b19zaGVldDpwZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFBlKE5lKXtmb3IodmFyIGN0LFllPVtdLGV0PW9vKE5lWyIhcmVmIl0pLEV0PUFycmF5LmlzQXJyYXkoTmUpLGF0PWV0LnMucjthdDw9ZXQuZS5yOysrYXQpe2Zvcih2YXIgYnQ9W10sanQ9ZXQucy5jO2p0PD1ldC5lLmM7KytqdCl7dmFy''@;'; put 'put ''IGt0PXFpKHtyOmF0LGM6anR9KTtpZigoY3Q9RXQ/KE5lW2F0XXx8W10pW2p0XTpOZVtrdF0pJiZudWxsIT1jdC52KXtmb3IodmFyIE90PShjdC53fHwoX2woY3QpLGN0LncpfHwiIikuc2xpY2UoMCwxMCk7T3QubGVuZ3RoPDEwOylPdCs9IiAiO2J0LnB1c2goT3QrKDA9PT1qdD8iICI6IiIp''@;'; put 'put ''KX1lbHNlIGJ0LnB1c2goIiAgICAgICAgICAiKX1ZZS5wdXNoKGJ0LmpvaW4oIiIpKX1yZXR1cm4gWWUuam9pbigiXG4iKX19fSgpLER2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhWbixCcixfcil7aWYoVm4pe21uKFZuLFZuLmx8fDApO2Zvcih2YXIgRm49X3IuRW51bXx8TGk7Vm4ubDxWbi5s''@;'; put 'put ''ZW5ndGg7KXt2YXIganI9Vm4ucmVhZF9zaGlmdCgyKSxaaT1Gbltqcl18fEZuWzY1NTM1XSx5aT1Wbi5yZWFkX3NoaWZ0KDIpLF9hPVZuLmwreWksc289WmkuZiYmWmkuZihWbix5aSxfcik7aWYoVm4ubD1fYSxCcihzbyxaaSxqcikpcmV0dXJufX19ZnVuY3Rpb24gayhWbixCcil7aWYoIVZu''@;'; put 'put ''KXJldHVybiBWbjt2YXIgX3I9QnJ8fHt9O251bGwhPWxlJiZudWxsPT1fci5kZW5zZSYmKF9yLmRlbnNlPWxlKTt2YXIgRm49X3IuZGVuc2U/W106e30sanI9IlNoZWV0MSIsWmk9MCx5aT17fSxfYT1banJdLHNvPVtdLGlhPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sTG89X3Iuc2hlZXRS''@;'; put 'put ''b3dzfHwwO2lmKDI9PVZuWzJdKV9yLkVudW09TGksUyhWbixmdW5jdGlvbihCaSxJcyxQbil7c3dpdGNoKFBuKXtjYXNlIDA6X3IudmVycz1CaSxCaT49NDA5NiYmKF9yLnFwcm89ITApO2JyZWFrO2Nhc2UgNjppYT1CaTticmVhaztjYXNlIDE1OmNhc2UgNTE6X3IucXByb3x8KEJpWzFdLnY9''@;'; put 'put ''QmlbMV0udi5zbGljZSgxKSk7Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTY6MTQ9PVBuJiYhKDExMiZ+QmlbMl0pJiYoMTUmQmlbMl0pPjEmJigxNSZCaVsyXSk8MTUmJihCaVsxXS56PV9yLmRhdGVORnx8QS5fdGFibGVbMTRdLF9yLmNlbGxEYXRlcyYmKEJpWzFdLnQ9ImQiLEJpWzFdLnY9dW4o''@;'; put 'put ''QmlbMV0udikpKTt2YXIgV289X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHxbXSlbQmlbMF0uY106Rm5bcWkoQmlbMF0pXTtpZihXbyl7V28udD1CaVsxXS50LFdvLnY9QmlbMV0udixudWxsIT1CaVsxXS56JiYoV28uej1CaVsxXS56KSxudWxsIT1CaVsxXS5mJiYoV28uZj1CaVsxXS5mKTticmVh''@;'; put 'put ''a31fci5kZW5zZT8oRm5bQmlbMF0ucl18fChGbltCaVswXS5yXT1bXSksRm5bQmlbMF0ucl1bQmlbMF0uY109QmlbMV0pOkZuW3FpKEJpWzBdKV09QmlbMV19fSxfcik7ZWxzZXtpZigyNiE9Vm5bMl0mJjE0IT1WblsyXSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBMT1RVUyBCT0Yg''@;'; put 'put ''IitWblsyXSk7X3IuRW51bT1rciwxND09Vm5bMl0mJihfci5xcHJvPSEwLFZuLmw9MCksUyhWbixmdW5jdGlvbihCaSxJcyxQbil7c3dpdGNoKFBuKXtjYXNlIDIyOkJpWzFdLnY9QmlbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0''@;'; put 'put ''MDppZihCaVszXT5aaSYmKEZuWyIhcmVmIl09cmEoaWEpLHlpW2pyXT1GbixGbj1fci5kZW5zZT9bXTp7fSxpYT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LF9hLnB1c2goanI9IlNoZWV0IisoKFppPUJpWzNdKSsxKSkpLExvPjAmJkJpWzBdLnI+PUxvKWJyZWFrO19yLmRlbnNlPyhGbltC''@;'; put 'put ''aVswXS5yXXx8KEZuW0JpWzBdLnJdPVtdKSxGbltCaVswXS5yXVtCaVswXS5jXT1CaVsxXSk6Rm5bcWkoQmlbMF0pXT1CaVsxXSxpYS5lLmM8QmlbMF0uYyYmKGlhLmUuYz1CaVswXS5jKSxpYS5lLnI8QmlbMF0uciYmKGlhLmUucj1CaVswXS5yKTticmVhaztjYXNlIDI3OkJpWzE0ZTNdJiYo''@;'; put 'put ''c29bQmlbMTRlM11bMF1dPUJpWzE0ZTNdWzFdKX19LF9yKX1pZihGblsiIXJlZiJdPXJhKGlhKSx5aVtqcl09Rm4sIXNvLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpfYSxTaGVldHM6eWl9O2Zvcih2YXIgT2E9e30saG89W10sSmE9MDtKYTxzby5sZW5ndGg7KytKYSl5aVtfYVtKYV1dJiYo''@;'; put 'put ''aG8ucHVzaChzb1tKYV0pLE9hW3NvW0phXV09eWlbX2FbSmFdXSk7cmV0dXJue1NoZWV0TmFtZXM6aG8sU2hlZXRzOk9hfX1mdW5jdGlvbiBQZShWbixCcixfcil7dmFyIEZuPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIF9yLnFwcm8mJjIwNzY4IT1fci52ZXJzPyhGblswXS5j''@;'; put 'put ''PVZuLnJlYWRfc2hpZnQoMSksVm4ubCsrLEZuWzBdLnI9Vm4ucmVhZF9zaGlmdCgyKSxWbi5sKz0yKTooRm5bMl09Vm4ucmVhZF9zaGlmdCgxKSxGblswXS5jPVZuLnJlYWRfc2hpZnQoMiksRm5bMF0ucj1Wbi5yZWFkX3NoaWZ0KDIpKSxGbn1mdW5jdGlvbiBOZShWbixCcixfcil7dmFyIEZu''@;'; put 'put ''PVZuLmwrQnIsanI9UGUoVm4sMCxfcik7aWYoanJbMV0udD0icyIsMjA3Njg9PV9yLnZlcnMpe1ZuLmwrKzt2YXIgWmk9Vm4ucmVhZF9zaGlmdCgxKTtyZXR1cm4ganJbMV0udj1Wbi5yZWFkX3NoaWZ0KFppLCJ1dGY4IiksanJ9cmV0dXJuIF9yLnFwcm8mJlZuLmwrKyxqclsxXS52PVZuLnJl''@;'; put 'put ''YWRfc2hpZnQoRm4tVm4ubCwiY3N0ciIpLGpyfWZ1bmN0aW9uIFllKFZuLEJyLF9yKXt2YXIgRm49Ym4oNytfci5sZW5ndGgpO0ZuLndyaXRlX3NoaWZ0KDEsMjU1KSxGbi53cml0ZV9zaGlmdCgyLEJyKSxGbi53cml0ZV9zaGlmdCgyLFZuKSxGbi53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFy''@;'; put 'put ''IGpyPTA7anI8Rm4ubGVuZ3RoOysranIpe3ZhciBaaT1fci5jaGFyQ29kZUF0KGpyKTtGbi53cml0ZV9zaGlmdCgxLFppPj0xMjg/OTU6WmkpfXJldHVybiBGbi53cml0ZV9zaGlmdCgxLDApLEZufWZ1bmN0aW9uIGN0KFZuLEJyLF9yKXt2YXIgRm49Ym4oNyk7cmV0dXJuIEZuLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMjU1KSxGbi53cml0ZV9zaGlmdCgyLEJyKSxGbi53cml0ZV9zaGlmdCgyLFZuKSxGbi53cml0ZV9zaGlmdCgyLF9yLCJpIiksRm59ZnVuY3Rpb24gYXQoVm4sQnIsX3Ipe3ZhciBGbj1ibigxMyk7cmV0dXJuIEZuLndyaXRlX3NoaWZ0KDEsMjU1KSxGbi53cml0ZV9zaGlmdCgyLEJy''@;'; put 'put ''KSxGbi53cml0ZV9zaGlmdCgyLFZuKSxGbi53cml0ZV9zaGlmdCg4LF9yLCJmIiksRm59ZnVuY3Rpb24ganQoVm4sQnIsX3Ipe3ZhciBGbj0zMjc2OCZCcjtyZXR1cm4gQnI9KEZuP1ZuOjApKygoQnImPS0zMjc2OSk+PTgxOTI/QnItMTYzODQ6QnIpLChGbj8iIjoiJCIpKyhfcj9UYShCcik6''@;'; put 'put ''amkoQnIpKX12YXIgT3Q9ezUxOlsiRkFMU0UiLDBdLDUyOlsiVFJVRSIsMF0sNzA6WyJMRU4iLDFdLDgwOlsiU1VNIiw2OV0sODE6WyJBVkVSQUdFQSIsNjldLDgyOlsiQ09VTlRBIiw2OV0sODM6WyJNSU5BIiw2OV0sODQ6WyJNQVhBIiw2OV0sMTExOlsiVCIsMV19LEt0PVsiIiwiIiwiIiwi''@;'; put 'put ''IiwiIiwiIiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gcnIoVm4pe3ZhciBCcj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBCclswXS5y''@;'; put 'put ''PVZuLnJlYWRfc2hpZnQoMiksQnJbM109Vm5bVm4ubCsrXSxCclswXS5jPVZuW1ZuLmwrK10sQnJ9ZnVuY3Rpb24gbHIoVm4sQnIsX3IsRm4pe3ZhciBqcj1ibig2K0ZuLmxlbmd0aCk7anIud3JpdGVfc2hpZnQoMixWbiksanIud3JpdGVfc2hpZnQoMSxfciksanIud3JpdGVfc2hpZnQoMSxC''@;'; put 'put ''ciksanIud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBaaT0wO1ppPEZuLmxlbmd0aDsrK1ppKXt2YXIgeWk9Rm4uY2hhckNvZGVBdChaaSk7anIud3JpdGVfc2hpZnQoMSx5aT49MTI4Pzk1OnlpKX1yZXR1cm4ganIud3JpdGVfc2hpZnQoMSwwKSxqcn1mdW5jdGlvbiBCbihWbixCcil7dmFy''@;'; put 'put ''IF9yPXJyKFZuKSxGbj1Wbi5yZWFkX3NoaWZ0KDQpLGpyPVZuLnJlYWRfc2hpZnQoNCksWmk9Vm4ucmVhZF9zaGlmdCgyKTtpZig2NTUzNT09WmkpcmV0dXJuIDA9PT1GbiYmMzIyMTIyNTQ3Mj09PWpyPyhfclsxXS50PSJlIixfclsxXS52PTE1KTowPT09Rm4mJjM0ODk2NjA5Mjg9PT1qcj8o''@;'; put 'put ''X3JbMV0udD0iZSIsX3JbMV0udj00Mik6X3JbMV0udj0wLF9yO3ZhciB5aT0zMjc2OCZaaTtyZXR1cm4gWmk9KDMyNzY3JlppKS0xNjQ0NixfclsxXS52PSgxLTIqeWkpKihqcipNYXRoLnBvdygyLFppKzMyKStGbipNYXRoLnBvdygyLFppKSksX3J9ZnVuY3Rpb24gZnIoVm4sQnIsX3IsRm4p''@;'; put 'put ''e3ZhciBqcj1ibigxNCk7aWYoanIud3JpdGVfc2hpZnQoMixWbiksanIud3JpdGVfc2hpZnQoMSxfciksanIud3JpdGVfc2hpZnQoMSxCciksMD09Rm4pcmV0dXJuIGpyLndyaXRlX3NoaWZ0KDQsMCksanIud3JpdGVfc2hpZnQoNCwwKSxqci53cml0ZV9zaGlmdCgyLDY1NTM1KSxqcjt2YXIg''@;'; put 'put ''Wmk9MCx5aT0wLHNvPTA7cmV0dXJuIEZuPDAmJihaaT0xLEZuPS1GbikseWk9MHxNYXRoLmxvZzIoRm4pLDIxNDc0ODM2NDgmKHNvPShGbi89TWF0aC5wb3coMix5aS0zMSkpPj4+MCl8fCgrK3lpLHNvPShGbi89Mik+Pj4wKSxGbi09c28sc298PTIxNDc0ODM2NDgsc28+Pj49MCxGbio9TWF0''@;'; put 'put ''aC5wb3coMiwzMiksanIud3JpdGVfc2hpZnQoNCxGbj4+PjApLGpyLndyaXRlX3NoaWZ0KDQsc28pLGpyLndyaXRlX3NoaWZ0KDIseWkrPTE2MzgzKyhaaT8zMjc2ODowKSksanJ9ZnVuY3Rpb24gTWkoVm4sQnIpe3ZhciBfcj1ycihWbiksRm49Vm4ucmVhZF9zaGlmdCg4LCJmIik7cmV0dXJu''@;'; put 'put ''IF9yWzFdLnY9Rm4sX3J9ZnVuY3Rpb24gY2EoVm4sQnIpe3ZhciBfcj1ibig1K1ZuLmxlbmd0aCk7X3Iud3JpdGVfc2hpZnQoMiwxNGUzKSxfci53cml0ZV9zaGlmdCgyLEJyKTtmb3IodmFyIEZuPTA7Rm48Vm4ubGVuZ3RoOysrRm4pe3ZhciBqcj1Wbi5jaGFyQ29kZUF0KEZuKTtfcltfci5s''@;'; put 'put ''KytdPWpyPjEyNz85NTpqcn1yZXR1cm4gX3JbX3IubCsrXT0wLF9yfXZhciBMaT17MDp7bjoiQk9GIixmOkVjfSwxOntuOiJFT0YifSwyOntuOiJDQUxDTU9ERSJ9LDM6e246IkNBTENPUkRFUiJ9LDQ6e246IlNQTElUIn0sNTp7bjoiU1lOQyJ9LDY6e246IlJBTkdFIixmOmZ1bmN0aW9uIHBl''@;'; put 'put ''KFZuKXt2YXIgQnI9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gQnIucy5jPVZuLnJlYWRfc2hpZnQoMiksQnIucy5yPVZuLnJlYWRfc2hpZnQoMiksQnIuZS5jPVZuLnJlYWRfc2hpZnQoMiksQnIuZS5yPVZuLnJlYWRfc2hpZnQoMiksNjU1MzU9PUJyLnMuYyYmKEJyLnMuYz1C''@;'; put 'put ''ci5lLmM9QnIucy5yPUJyLmUucj0wKSxCcn19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDExOntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24gZXQoVm4sQnIsX3Ipe3ZhciBGbj1Q''@;'; put 'put ''ZShWbiwwLF9yKTtyZXR1cm4gRm5bMV0udj1Wbi5yZWFkX3NoaWZ0KDIsImkiKSxGbn19LDE0OntuOiJOVU1CRVIiLGY6ZnVuY3Rpb24gRXQoVm4sQnIsX3Ipe3ZhciBGbj1QZShWbiwwLF9yKTtyZXR1cm4gRm5bMV0udj1Wbi5yZWFkX3NoaWZ0KDgsImYiKSxGbn19LDE1OntuOiJMQUJFTCIs''@;'; put 'put ''ZjpOZX0sMTY6e246IkZPUk1VTEEiLGY6ZnVuY3Rpb24gYnQoVm4sQnIsX3Ipe3ZhciBGbj1Wbi5sK0JyLGpyPVBlKFZuLDAsX3IpO2lmKGpyWzFdLnY9Vm4ucmVhZF9zaGlmdCg4LCJmIiksX3IucXBybylWbi5sPUZuO2Vsc2V7dmFyIFppPVZuLnJlYWRfc2hpZnQoMik7KGZ1bmN0aW9uIFRu''@;'; put 'put ''KFZuLEJyKXttbihWbiwwKTtmb3IodmFyIF9yPVtdLEZuPTAsanI9IiIsWmk9IiI7Vm4ubDxWbi5sZW5ndGg7KXt2YXIgeWk9Vm5bVm4ubCsrXTtzd2l0Y2goeWkpe2Nhc2UgMDpfci5wdXNoKFZuLnJlYWRfc2hpZnQoOCwiZiIpKTticmVhaztjYXNlIDE6Wmk9anQoQnJbMF0uYyxWbi5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLCEwKSxqcj1qdChCclswXS5yLFZuLnJlYWRfc2hpZnQoMiksITEpLF9yLnB1c2goWmkranIpO2JyZWFrO2Nhc2UgMjp2YXIgX2E9anQoQnJbMF0uYyxWbi5yZWFkX3NoaWZ0KDIpLCEwKSxzbz1qdChCclswXS5yLFZuLnJlYWRfc2hpZnQoMiksITEpO1ppPWp0KEJyWzBdLmMs''@;'; put 'put ''Vm4ucmVhZF9zaGlmdCgyKSwhMCksanI9anQoQnJbMF0ucixWbi5yZWFkX3NoaWZ0KDIpLCExKSxfci5wdXNoKF9hK3NvKyI6IitaaStqcik7YnJlYWs7Y2FzZSAzOmlmKFZuLmw8Vm4ubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBwcmVtYXR1cmUgZm9ybXVsYSBlbmQi''@;'; put 'put ''KTticmVhaztjYXNlIDQ6X3IucHVzaCgiKCIrX3IucG9wKCkrIikiKTticmVhaztjYXNlIDU6X3IucHVzaChWbi5yZWFkX3NoaWZ0KDIpKTticmVhaztjYXNlIDY6Zm9yKHZhciBpYT0iIjt5aT1WbltWbi5sKytdOylpYSs9U3RyaW5nLmZyb21DaGFyQ29kZSh5aSk7X3IucHVzaCgnIicraWEu''@;'; put 'put ''cmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSA4Ol9yLnB1c2goIi0iK19yLnBvcCgpKTticmVhaztjYXNlIDIzOl9yLnB1c2goIisiK19yLnBvcCgpKTticmVhaztjYXNlIDIyOl9yLnB1c2goIk5PVCgiK19yLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnZhciBM''@;'; put 'put ''bz1fci5wb3AoKSxPYT1fci5wb3AoKTtfci5wdXNoKFsiQU5EIiwiT1IiXVt5aS0yMF0rIigiK09hKyIsIitMbysiKSIpO2JyZWFrO2RlZmF1bHQ6aWYoeWk8MzImJkt0W3lpXSlMbz1fci5wb3AoKSxPYT1fci5wb3AoKSxfci5wdXNoKE9hK0t0W3lpXStMbyk7ZWxzZXtpZighT3RbeWldKXJl''@;'; put 'put ''dHVybiB5aTw9Nz9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIit5aS50b1N0cmluZygxNikpOnlpPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIit5aS50b1N0cmluZygxNikpOnlpPD0zMD9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUg''@;'; put 'put ''Iit5aS50b1N0cmluZygxNikpOnlpPD0xMTU/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIG9wY29kZSAiK3lpLnRvU3RyaW5nKDE2KSk6Y29uc29sZS5lcnJvcigiV0sxIHVucmVjb2duaXplZCBvcGNvZGUgIit5aS50b1N0cmluZygxNikpO2lmKDY5PT0oRm49T3Rb''@;'; put 'put ''eWldWzFdKSYmKEZuPVZuW1ZuLmwrK10pLEZuPl9yLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgMHgiK3lpLnRvU3RyaW5nKDE2KSsiOnwiK19yLmpvaW4oInwiKSsifCIpO3ZhciBobz1fci5zbGljZSgtRm4pO19yLmxlbmd0aC09Rm4s''@;'; put 'put ''X3IucHVzaChPdFt5aV1bMF0rIigiK2hvLmpvaW4oIiwiKSsiKSIpfX19MT09X3IubGVuZ3RoP0JyWzFdLmY9IiIrX3JbMF06Y29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIHwiK19yLmpvaW4oInwiKSsifCIpfSkoVm4uc2xpY2UoVm4ubCxWbi5sK1ppKSxqciksVm4ubCs9''@;'; put 'put ''Wml9cmV0dXJuIGpyfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdFIn0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3Ontu''@;'; put 'put ''OiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQifSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4Ontu''@;'; put 'put ''OiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpOZX0sNTU6e246IlBBU1NXT1JEIn0sNTY6e246IkxPQ0tFRCJ9LDYwOntuOiJRVUVSWSJ9LDYxOntuOiJRVUVSWU5BTUUifSw2Mjp7bjoiUFJJTlQifSw2Mzp7bjoiUFJJ''@;'; put 'put ''TlROQU1FIn0sNjQ6e246IkdSQVBIMiJ9LDY1OntuOiJHUkFQSE5BTUUifSw2Njp7bjoiWk9PTSJ9LDY3OntuOiJTWU1TUExJVCJ9LDY4OntuOiJOU1JPV1MifSw2OTp7bjoiTlNDT0xTIn0sNzA6e246IlJVTEVSIn0sNzE6e246Ik5OQU1FIn0sNzI6e246IkFDT01NIn0sNzM6e246IkFNQUNS''@;'; put 'put ''TyJ9LDc0OntuOiJQQVJTRSJ9LDEwMjp7bjoiUFJBTkdFUz8/In0sMTAzOntuOiJSUkFOR0VTPz8ifSwxMDQ6e246IkZOQU1FPz8ifSwxMDU6e246Ik1SQU5HRVM/PyJ9LDY1NTM1OntuOiIifX0sa3I9ezA6e246IkJPRiJ9LDE6e246IkVPRiJ9LDI6e246IlBBU1NXT1JEIn0sMzp7bjoiQ0FM''@;'; put 'put ''Q1NFVCJ9LDQ6e246IldJTkRPV1NFVCJ9LDU6e246IlNIRUVUQ0VMTFBUUiJ9LDY6e246IlNIRUVUTEFZT1VUIn0sNzp7bjoiQ09MVU1OV0lEVEgifSw4OntuOiJISURERU5DT0xVTU4ifSw5OntuOiJVU0VSUkFOR0UifSwxMDp7bjoiU1lTVEVNUkFOR0UifSwxMTp7bjoiWkVST0ZPUkNFIn0s''@;'; put 'put ''MTI6e246IlNPUlRLRVlESVIifSwxMzp7bjoiRklMRVNFQUwifSwxNDp7bjoiREFUQUZJTExOVU1TIn0sMTU6e246IlBSSU5UTUFJTiJ9LDE2OntuOiJQUklOVFNUUklORyJ9LDE3OntuOiJHUkFQSE1BSU4ifSwxODp7bjoiR1JBUEhTVFJJTkcifSwxOTp7bjoiPz8ifSwyMDp7bjoiRVJSQ0VM''@;'; put 'put ''TCJ9LDIxOntuOiJOQUNFTEwifSwyMjp7bjoiTEFCRUwxNiIsZjpmdW5jdGlvbiBTbihWbixCcil7dmFyIF9yPXJyKFZuKTtyZXR1cm4gX3JbMV0udD0icyIsX3JbMV0udj1Wbi5yZWFkX3NoaWZ0KEJyLTQsImNzdHIiKSxfcn19LDIzOntuOiJOVU1CRVIxNyIsZjpCbn0sMjQ6e246Ik5VTUJF''@;'; put 'put ''UjE4IixmOmZ1bmN0aW9uIFhuKFZuLEJyKXt2YXIgX3I9cnIoVm4pO19yWzFdLnY9Vm4ucmVhZF9zaGlmdCgyKTt2YXIgRm49X3JbMV0udj4+MTtpZigxJl9yWzFdLnYpc3dpdGNoKDcmRm4pe2Nhc2UgMDpGbj01ZTMqKEZuPj4zKTticmVhaztjYXNlIDE6Rm49NTAwKihGbj4+Myk7YnJlYWs7''@;'; put 'put ''Y2FzZSAyOkZuPShGbj4+MykvMjA7YnJlYWs7Y2FzZSAzOkZuPShGbj4+MykvMjAwO2JyZWFrO2Nhc2UgNDpGbj0oRm4+PjMpLzJlMzticmVhaztjYXNlIDU6Rm49KEZuPj4zKS8yZTQ7YnJlYWs7Y2FzZSA2OkZuPShGbj4+MykvMTY7YnJlYWs7Y2FzZSA3OkZuPShGbj4+MykvNjR9cmV0dXJu''@;'; put 'put ''IF9yWzFdLnY9Rm4sX3J9fSwyNTp7bjoiRk9STVVMQTE5IixmOmZ1bmN0aW9uIGJyKFZuLEJyKXt2YXIgX3I9Qm4oVm4pO3JldHVybiBWbi5sKz1Cci0xNCxfcn19LDI2OntuOiJGT1JNVUxBMUEifSwyNzp7bjoiWEZPUk1BVCIsZjpmdW5jdGlvbiBuYShWbixCcil7Zm9yKHZhciBfcj17fSxG''@;'; put 'put ''bj1Wbi5sK0JyO1ZuLmw8Rm47KXt2YXIganI9Vm4ucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qcil7Zm9yKF9yW2pyXT1bMCwiIl0sX3JbanJdWzBdPVZuLnJlYWRfc2hpZnQoMik7Vm5bVm4ubF07KV9yW2pyXVsxXSs9U3RyaW5nLmZyb21DaGFyQ29kZShWbltWbi5sXSksVm4ubCsrO1ZuLmwr''@;'; put 'put ''K319cmV0dXJuIF9yfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/In0sMzc6e246Ik5V''@;'; put 'put ''TUJFUjI1IixmOmZ1bmN0aW9uIGVyKFZuLEJyKXt2YXIgX3I9cnIoVm4pLEZuPVZuLnJlYWRfc2hpZnQoNCk7cmV0dXJuIF9yWzFdLnY9Rm4+PjYsX3J9fSwzODp7bjoiPz8ifSwzOTp7bjoiTlVNQkVSMjciLGY6TWl9LDQwOntuOiJGT1JNVUxBMjgiLGY6ZnVuY3Rpb24gRmkoVm4sQnIpe3Zh''@;'; put 'put ''ciBfcj1NaShWbik7cmV0dXJuIFZuLmwrPUJyLTEwLF9yfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9''@;'; put 'put ''LDE3NDp7bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA1OntuOiI/PyJ9LDIwNjp7bjoi''@;'; put 'put ''Pz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/PyJ9LDI2ODp7bjoiPz8ifSwyNzA6''@;'; put 'put ''e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7bjoiPz8ifSw2NDA6e246Ij8/In0s''@;'; put 'put ''NjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2NjE6e246Ij8/In0sNjYyOntuOiI/''@;'; put 'put ''PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246Ij8/''@;'; put 'put ''In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIEcoVm4sQnIpe3ZhciBfcj1C''@;'; put 'put ''cnx8e307aWYoK19yLmNvZGVwYWdlPj0wJiZVKCtfci5jb2RlcGFnZSksInN0cmluZyI9PV9yLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBGbj1iaSgpLGpyPW9vKFZuWyIhcmVmIl0pLFppPUFycmF5LmlzQXJyYXkoVm4pLHlpPVtd''@;'; put 'put ''O0dpKEZuLDAsZnVuY3Rpb24gb2UoVm4pe3ZhciBCcj1ibigyKTtyZXR1cm4gQnIud3JpdGVfc2hpZnQoMixWbiksQnJ9KDEwMzApKSxHaShGbiw2LGZ1bmN0aW9uIHllKFZuKXt2YXIgQnI9Ym4oOCk7cmV0dXJuIEJyLndyaXRlX3NoaWZ0KDIsVm4ucy5jKSxCci53cml0ZV9zaGlmdCgyLFZu''@;'; put 'put ''LnMuciksQnIud3JpdGVfc2hpZnQoMixWbi5lLmMpLEJyLndyaXRlX3NoaWZ0KDIsVm4uZS5yKSxCcn0oanIpKTtmb3IodmFyIF9hPWpyLnMucjtfYTw9anIuZS5yOysrX2EpZm9yKHZhciBzbz1qaShfYSksaWE9anIucy5jO2lhPD1qci5lLmM7KytpYSl7X2E9PT1qci5zLnImJih5aVtpYV09''@;'; put 'put ''VGEoaWEpKTt2YXIgT2E9Wmk/KFZuW19hXXx8W10pW2lhXTpWblt5aVtpYV0rc29dO09hJiYieiIhPU9hLnQmJigibiI9PU9hLnQ/KDB8T2Eudik9PU9hLnYmJk9hLnY+PS0zMjc2OCYmT2Eudjw9MzI3Njc/R2koRm4sMTMsY3QoX2EsaWEsT2EudikpOkdpKEZuLDE0LGF0KF9hLGlhLE9hLnYp''@;'; put 'put ''KTpHaShGbiwxNSxZZShfYSxpYSxfbChPYSkuc2xpY2UoMCwyMzkpKSkpfXJldHVybiBHaShGbiwxKSxGbi5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gUShWbixCcil7dmFyIF9yPUJyfHx7fTtpZigrX3IuY29kZXBhZ2U+PTAmJlUoK19yLmNvZGVwYWdlKSwic3RyaW5nIj09X3IudHlw''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFyIEZuPWJpKCk7R2koRm4sMCxmdW5jdGlvbiBnZShWbil7dmFyIEJyPWJuKDI2KTtCci53cml0ZV9zaGlmdCgyLDQwOTYpLEJyLndyaXRlX3NoaWZ0KDIsNCksQnIud3JpdGVfc2hpZnQoNCwwKTtm''@;'; put 'put ''b3IodmFyIF9yPTAsRm49MCxqcj0wLFppPTA7Wmk8Vm4uU2hlZXROYW1lcy5sZW5ndGg7KytaaSl7dmFyIF9hPVZuLlNoZWV0c1tWbi5TaGVldE5hbWVzW1ppXV07aWYoX2EmJl9hWyIhcmVmIl0peysranI7dmFyIHNvPU1zKF9hWyIhcmVmIl0pO19yPHNvLmUuciYmKF9yPXNvLmUuciksRm48''@;'; put 'put ''c28uZS5jJiYoRm49c28uZS5jKX19cmV0dXJuIEJyLndyaXRlX3NoaWZ0KDIsX3IpLEJyLndyaXRlX3NoaWZ0KDEsanIpLEJyLndyaXRlX3NoaWZ0KDEsRm4pLEJyLndyaXRlX3NoaWZ0KDIsMCksQnIud3JpdGVfc2hpZnQoMiwwKSxCci53cml0ZV9zaGlmdCgxLDEpLEJyLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsMiksQnIud3JpdGVfc2hpZnQoNCwwKSxCci53cml0ZV9zaGlmdCg0LDApLEJyfShWbikpO2Zvcih2YXIganI9MCxaaT0wO2pyPFZuLlNoZWV0TmFtZXMubGVuZ3RoOysranIpKFZuLlNoZWV0c1tWbi5TaGVldE5hbWVzW2pyXV18fHt9KVsiIXJlZiJdJiZHaShGbiwyNyxjYShWbi5TaGVl''@;'; put 'put ''dE5hbWVzW2pyXSxaaSsrKSk7dmFyIHlpPTA7Zm9yKGpyPTA7anI8Vm4uU2hlZXROYW1lcy5sZW5ndGg7Kytqcil7dmFyIF9hPVZuLlNoZWV0c1tWbi5TaGVldE5hbWVzW2pyXV07aWYoX2EmJl9hWyIhcmVmIl0pe2Zvcih2YXIgc289b28oX2FbIiFyZWYiXSksaWE9QXJyYXkuaXNBcnJheShf''@;'; put 'put ''YSksTG89W10sT2E9c28ucy5yO09hPD1zby5lLnI7KytPYSlmb3IodmFyIGhvPWppKE9hKSxKYT1zby5zLmM7SmE8PXNvLmUuYzsrK0phKXtPYT09PXNvLnMuciYmKExvW0phXT1UYShKYSkpO3ZhciBJcz1pYT8oX2FbT2FdfHxbXSlbSmFdOl9hW0xvW0phXStob107SXMmJiJ6IiE9SXMudCYm''@;'; put 'put ''KCJuIj09SXMudD9HaShGbiwyMyxmcihPYSxKYSx5aSxJcy52KSk6R2koRm4sMjIsbHIoT2EsSmEseWksX2woSXMpLnNsaWNlKDAsMjM5KSkpKX0rK3lpfX1yZXR1cm4gR2koRm4sMSksRm4uZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIFIoVm4sQnIpe3N3aXRjaChCci50eXBlKXtjYXNl''@;'; put 'put ''ImJhc2U2NCI6cmV0dXJuIGsoYihfZS5kZWNvZGUoVm4pKSxCcik7Y2FzZSJiaW5hcnkiOnJldHVybiBrKGIoVm4pLEJyKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIGsoVm4sQnIpfXRocm93IlVuc3VwcG9ydGVkIHR5cGUgIitCci50eXBlfX19KCksd2c9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgUz1EMCgidCIpLFI9RDAoInJQciIpO2Z1bmN0aW9uIGsob2Upe3ZhciBnZT1vZS5tYXRjaChTKTtpZighZ2UpcmV0dXJue3Q6InMiLHY6IiJ9O3ZhciBwZT17dDoicyIsdjpRcihnZVsxXSl9LHllPW9lLm1hdGNoKFIpO3JldHVybiB5ZSYmKHBlLnM9ZnVuY3Rpb24gYWsoUyl7dmFyIFI9''@;'; put 'put ''e30saz1TLm1hdGNoKGVuKSxHPTAsUT0hMTtpZihrKWZvcig7RyE9ay5sZW5ndGg7KytHKXt2YXIgb2U9dnIoa1tHXSk7c3dpdGNoKG9lWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRlbmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIW9lLnZhbCli''@;'; put 'put ''cmVhaztjYXNlIjxzaGFkb3c+IjpjYXNlIjxzaGFkb3cvPiI6Ui5zaGFkb3c9MTticmVhaztjYXNlIjwvc2hhZG93PiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1vZS52YWwpYnJlYWs7Ui5jcD1OW3BhcnNlSW50KG9lLnZhbCwxMCldO2JyZWFrO2Nhc2UiPG91dGxpbmUiOmlmKCFv''@;'; put 'put ''ZS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6Ui5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6Ui5uYW1lPW9lLnZhbDticmVhaztjYXNlIjxzeiI6Ui5zej1vZS52YWw7YnJlYWs7Y2FzZSI8c3RyaWtlIjppZigh''@;'; put 'put ''b2UudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+IjpSLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighb2UudmFsKWJyZWFrO3N3aXRjaChvZS52YWwpe2Nhc2UiZG91YmxlIjpSLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2lu''@;'; put 'put ''Z2xlQWNjb3VudGluZyI6Ui51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpSLnVuZGVybGluZT0zNH1jYXNlIjx1PiI6Y2FzZSI8dS8+IjpSLnVuZGVybGluZXx8KFIudW5kZXJsaW5lPTEpO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8YiI6aWYoIjAiPT1v''@;'; put 'put ''ZS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6Ui5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PW9lLnZhbClicmVhaztjYXNlIjxpPiI6Y2FzZSI8aS8+IjpSLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOm9l''@;'; put 'put ''LnJnYiYmKFIuY29sb3I9e3JnYjo4PT1vZS5yZ2IubGVuZ3RoP29lLnJnYi5zbGljZSgyLDgpOigiMDAwMDAwIitvZS5yZ2IpLnNsaWNlKC02KX0pO2JyZWFrO2Nhc2UiPGZhbWlseSI6Ui5mYW1pbHk9b2UudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUiIT0ob2UudmFsfHwibm9u''@;'; put 'put ''ZSIpJiYoUi52YWxpZ249b2UudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjxzY2hlbWUiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZh''@;'; put 'put ''dWx0OmlmKDQ3IT09b2VbMF0uY2hhckNvZGVBdCgxKSYmIVEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgcmljaCBmb3JtYXQgIitvZVswXSl9fXJldHVybiBSfSh5ZVsxXSkpLHBlfXZhciBHPS88KD86XHcrOik/cj4vZyxRPS88XC8oPzpcdys6KT9yPi87cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGdlKXtyZXR1cm4gZ2UucmVwbGFjZShHLCIiKS5zcGxpdChRKS5tYXAoaykuZmlsdGVyKGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGUudn0pfX0oKSx3Vj17MToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGUtYWNjb3VudGluZyIsMzQ6ImRvdWJsZS1hY2NvdW50aW5nIn0sTnU9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgUj0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gRyhRKXt2YXIgb2U9W1tdLFEudixbXV07cmV0dXJuIFEudj8oUS5zJiZmdW5jdGlvbiBrKFEsb2UsZ2Upe3ZhciBwZT1bXTtRLnVuZGVybGluZSYmcGUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiksUS51bmRlcmxp''@;'; put 'put ''bmU+MSYmcGUucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6Iit3VltRLnVuZGVybGluZV0rIjsiKSxRLnN6JiZwZS5wdXNoKCJmb250LXNpemU6IitRLnN6KyJwdDsiKSxRLm91dGxpbmUmJnBlLnB1c2goInRleHQtZWZmZWN0OiBvdXRsaW5lOyIpLFEuc2hhZG93JiZwZS5wdXNoKCJ0ZXh0''@;'; put 'put ''LXNoYWRvdzogYXV0bzsiKSxRLmNvbG9yJiZRLmNvbG9yLnJnYiYmcGUucHVzaCgiY29sb3I6ICMiK1AwKFEuY29sb3IucmdiKSsiOyIpLG9lLnB1c2goJzxzcGFuIHN0eWxlPSInK3BlLmpvaW4oIiIpKyciPicpLFEuYm9sZCYmKG9lLnB1c2goIjxiPiIpLGdlLnB1c2goIjwvYj4iKSksUS5p''@;'; put 'put ''dGFsaWMmJihvZS5wdXNoKCI8aT4iKSxnZS5wdXNoKCI8L2k+IikpLFEuc3RyaWtlJiYob2UucHVzaCgiPHM+IiksZ2UucHVzaCgiPC9zPiIpKTt2YXIgeWU9US52YWxpZ258fCIiOyJzdXBlcnNjcmlwdCI9PXllfHwic3VwZXIiPT15ZT95ZT0ic3VwIjoic3Vic2NyaXB0Ij09eWUmJih5ZT0i''@;'; put 'put ''c3ViIiksIiIhPXllJiYob2UucHVzaCgiPCIreWUrIj4iKSxnZS5wdXNoKCI8LyIreWUrIj4iKSksZ2UucHVzaCgiPC9zcGFuPiIpfShRLnMsb2VbMF0sb2VbMl0pLG9lWzBdLmpvaW4oIiIpK29lWzFdLnJlcGxhY2UoUiwiPGJyLz4iKStvZVsyXS5qb2luKCIiKSk6IiJ9cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKG9lKXtyZXR1cm4gb2UubWFwKEcpLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBKcyhTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uIEE0KFMpe3ZhciBSPSIiLGs9W107cmV0dXJuIFMucyYmKFMucy5ib2xkJiZrLnB1c2goIjxiLz4iKSxTLnMuaXRhbGljJiZr''@;'; put 'put ''LnB1c2goIjxpLz4iKSxTLnMuc3RyaWtlJiZrLnB1c2goIjxzdHJpa2UvPiIpLFMucy51bmRlcmxpbmUmJmsucHVzaCgnPHUgdmFsPSInKyhBZ1tTLnMudW5kZXJsaW5lXXx8InNpbmdsZSIpKyciLz4nKSxTLnMuY29sb3ImJmsucHVzaChnZChTLnMuY29sb3IpKSxTLnMuc3omJmsucHVzaCgn''@;'; put 'put ''PHN6IHZhbD0iJytTLnMuc3orJyIvPicpLFMucy5uYW1lJiZrLnB1c2goJzxyRm9udCB2YWw9IicrUy5zLm5hbWUrJyIvPicpLCgic3VwZXIiPT1TLnMudmFsaWdufHwic3ViIj09Uy5zLnZhbGlnbikmJmsucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrUy5zLnZhbGlnbisnc2NyaXB0Ii8+Jykp''@;'; put 'put ''LGsubGVuZ3RoJiYoUis9IjxyUHI+IitrLmpvaW4oIiIpKyI8L3JQcj4iKSwiPHI+IisoUis9UHIoInQiLExyKFMudiksbnVsbCkpKyI8L3I+In0oayl9KS5qb2luKCIiKX12YXIgQ1Y9LzwoPzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3KzopP3Q+L2csU1Y9LzwoPzpcdys6KT9yXGJb''@;'; put 'put ''Xj5dKj4vLE1WPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gdUMoUyxSKXt2YXIgaz0hUnx8Ui5jZWxsSFRNTCxHPXt9O3JldHVybiBTPyhTLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oRy50PVFyKGdvKFMuc2xpY2UoUy5p''@;'; put 'put ''bmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksRy5yPWdvKFMpLGsmJihHLmg9bGEoRy50KSkpOlMubWF0Y2goU1YpJiYoRy5yPWdvKFMpLEcudD1RcihnbygoUy5yZXBsYWNlKE1WLCIiKS5tYXRjaChDVil8fFtdKS5qb2luKCIiKS5yZXBsYWNlKGVuLCIi''@;'; put 'put ''KSkpLEcuUj13ZyhHLnIpLGsmJihHLmg9TnUoRy5SKSkpLEcpOnt0OiIifX12YXIgb2s9LzwoPzpcdys6KT9zc3QoW14+XSopPihbXHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLHNrPS88KD86XHcrOik/KD86c2l8c3N0SXRlbSk+L2cscTY9LzxcLyg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi87''@;'; put 'put ''S2EuU1NUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiO3ZhciB4Vj0vXlxzfFxzJHxbXHRcblxyXS87ZnVuY3Rpb24gSXYoUyxSKXtpZighUi5ib29rU1NUKXJldHVybiIiO3ZhciBrPVtJ''@;'; put 'put ''aV07a1trLmxlbmd0aF09UHIoInNzdCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSxjb3VudDpTLkNvdW50LHVuaXF1ZUNvdW50OlMuVW5pcXVlfSk7Zm9yKHZhciBHPTA7RyE9Uy5sZW5ndGg7KytHKWlmKG51bGwhPVNbR10pe3ZhciBRPVNbR10sb2U9IjxzaT4iO1Eucj9vZSs9US5yOihvZSs9''@;'; put 'put ''Ijx0IixRLnR8fChRLnQ9IiIpLFEudC5tYXRjaCh4VikmJihvZSs9JyB4bWw6c3BhY2U9InByZXNlcnZlIicpLG9lKz0iPiIrTHIoUS50KSsiPC90PiIpLGtbay5sZW5ndGhdPW9lKz0iPC9zaT4ifXJldHVybiBrLmxlbmd0aD4yJiYoa1trLmxlbmd0aF09Ijwvc3N0PiIsa1sxXT1rWzFdLnJl''@;'; put 'put ''cGxhY2UoIi8+IiwiPiIpKSxrLmpvaW4oIiIpfXZhciBsaz1mdW5jdGlvbiBJMyhTLFIsayl7dmFyIEc9MTMrNCpTLnQubGVuZ3RoLFE9Uy5SJiZTLlIubGVuZ3RofHxTLnI7Uy5yJiYoUy5SPXdnKFMucikpLFEmJihHKz00KzQqUy5SLmxlbmd0aCk7dmFyIG9lPSExO2lmKG51bGw9PWsmJihv''@;'; put 'put ''ZT0hMCxrPWJuKEcpKSxrLndyaXRlX3NoaWZ0KDEsUT8xOjApLEZjKFMudCxrKSxRKXtrLndyaXRlX3NoaWZ0KDQsUy5SLmxlbmd0aCk7Zm9yKHZhciBnZT0wLHBlPTA7cGU8Uy5SLmxlbmd0aDsrK3BlKXt2YXIgeWU9Uy5SW3BlXTtrLndyaXRlX3NoaWZ0KDIsZ2UpLGdlKz0oeWUudnx8IiIp''@;'; put 'put ''Lmxlbmd0aDt2YXIgUGU9eWUucz9sMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOnllLnN9LFIpOjA7ay53cml0ZV9zaGlmdCgyLFIuY2VsbFhmc1tQZV0uZm9udElkKX19cmV0dXJuIG9lP2suc2xpY2UoMCxrLmwpOmt9O2Z1bmN0aW9uIGNrKFMsUil7dmFyIGs9Ymko''@;'; put 'put ''KTtGcihrLCJCcnRCZWdpblNzdCIsZnVuY3Rpb24gZEMoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oOCkpLFIud3JpdGVfc2hpZnQoNCxTLkNvdW50KSxSLndyaXRlX3NoaWZ0KDQsUy5VbmlxdWUpLFJ9KFMpKTtmb3IodmFyIEc9MDtHPFMubGVuZ3RoOysrRylGcihrLCJCcnRTU1RJdGVtIixsayhT''@;'; put 'put ''W0ddLFIpKTtyZXR1cm4gRnIoaywiQnJ0RW5kU3N0Iiksay5lbmQoKX1mdW5jdGlvbiBrNChTKXtpZih0eXBlb2YgY3B0YWJsZTwidSIpcmV0dXJuIGNwdGFibGUudXRpbHMuZW5jb2RlKEYsUyk7Zm9yKHZhciBSPVtdLGs9Uy5zcGxpdCgiIiksRz0wO0c8ay5sZW5ndGg7KytHKVJbR109a1tH''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApO3JldHVybiBSfWZ1bmN0aW9uIFAxKFMsUil7dmFyIGs9e307cmV0dXJuIGsuTWFqb3I9Uy5yZWFkX3NoaWZ0KDIpLGsuTWlub3I9Uy5yZWFkX3NoaWZ0KDIpLFI+PTQmJihTLmwrPVItNCksa31mdW5jdGlvbiBoQyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LGs9Uy5sK1ItNCxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPVtdO1EtLSA+MDspb2UucHVzaCh7dDpTLnJlYWRfc2hpZnQoNCksdjpTLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoRy5uYW1lPVMucmVhZF9zaGlmdCgwLCJscHA0IiksRy5jb21wcz1vZSxTLmwhPWspdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJCYWQgRGF0YVNwYWNlTWFwRW50cnk6ICIrUy5sKyIgIT0gIitrKTtyZXR1cm4gR31mdW5jdGlvbiBJVihTLFIpe3ZhciBrPVMubCtSLEc9e307Ry5GbGFncz02MyZTLnJlYWRfc2hpZnQoNCksUy5sKz00LEcuQWxnSUQ9Uy5yZWFkX3NoaWZ0KDQpO3ZhciBRPSExO3N3aXRjaChHLkFs''@;'; put 'put ''Z0lEKXtjYXNlIDI2MTI2OmNhc2UgMjYxMjc6Y2FzZSAyNjEyODpRPTM2PT1HLkZsYWdzO2JyZWFrO2Nhc2UgMjY2MjU6UT00PT0oNTImRy5GbGFncyk7YnJlYWs7Y2FzZSAwOlE9MTY9PUcuRmxhZ3N8fDQ9PUcuRmxhZ3N8fDM2PT1HLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNv''@;'; put 'put ''Z25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK0cuQWxnSUR9aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIEcuQWxnSURIYXNoPVMucmVhZF9zaGlmdCg0KSxHLktleVNpemU9Uy5yZWFkX3NoaWZ0KDQpLEcuUHJvdmlk''@;'; put 'put ''ZXJUeXBlPVMucmVhZF9zaGlmdCg0KSxTLmwrPTgsRy5DU1BOYW1lPVMucmVhZF9zaGlmdChrLVMubD4+MSwidXRmMTZsZSIpLFMubD1rLEd9ZnVuY3Rpb24gT3YoUyxSKXt2YXIgaz17fSxHPVMubCtSO3JldHVybiBTLmwrPTQsay5TYWx0PVMuc2xpY2UoUy5sLFMubCsxNiksUy5sKz0xNixr''@;'; put 'put ''LlZlcmlmaWVyPVMuc2xpY2UoUy5sLFMubCsxNiksUy5sKz0xNixTLnJlYWRfc2hpZnQoNCksay5WZXJpZmllckhhc2g9Uy5zbGljZShTLmwsRyksUy5sPUcsa31mdW5jdGlvbiBSVihTKXtpZigzNiE9KDYzJlMucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5m''@;'; put 'put ''byBtaXNtYXRjaCIpO3ZhciBrPVMucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOklWKFMsayksdjpPdihTLFMubGVuZ3RoLVMubCl9fWZ1bmN0aW9uIEo2KCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1''@;'; put 'put ''bmN0aW9uIGZDKFMpe3ZhciBSPVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtTLmwrPTQ7dmFyIGs9Uy5yZWFkX3NoaWZ0KFMubGVuZ3RoLVMu''@;'; put 'put ''bCwidXRmOCIpLEc9e307cmV0dXJuIGsucmVwbGFjZShlbixmdW5jdGlvbihvZSl7dmFyIGdlPXZyKG9lKTtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVu''@;'; put 'put ''Y3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOlIuZm9yRWFjaChmdW5jdGlvbihwZSl7R1twZV09Z2VbcGVdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVncml0eSI6Ry5lbmNyeXB0ZWRIbWFjS2V5PWdlLmVuY3J5cHRlZEhtYWNLZXksRy5lbmNyeXB0ZWRIbWFjVmFsdWU9Z2UuZW5jcnlw''@;'; put 'put ''dGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjpHLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjpHLnVyaT1nZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlwdGVkS2V5IjpHLmVuY3MucHVzaChnZSk7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDp0aHJvdyBnZVswXX19KSxHfWZ1bmN0aW9uIEZ2KFMpe3ZhciBrLG9lLFI9MCxHPWs0KFMpLFE9Ry5sZW5ndGgrMTtmb3IoKGs9VihRKSlbMF09Ry5sZW5ndGgsb2U9MTtvZSE9UTsrK29lKWtbb2VdPUdbb2UtMV07Zm9yKG9lPVEtMTtvZT49MDstLW9lKVI9KCgxNjM4NCZSPzE6MCl8Ujw8''@;'; put 'put ''MSYzMjc2Nylea1tvZV07cmV0dXJuIDUyODExXlJ9dmFyIHBDPWZ1bmN0aW9uKCl7dmFyIFM9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sUj1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1''@;'; put 'put ''Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10saz1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3''@;'; put 'put ''NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2''@;'; put 'put ''Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5''@;'; put 'put ''NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sUT1mdW5jdGlvbihnZSxwZSl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGdlKXtyZXR1cm4gMjU1JihnZT4+MXxnZTw8Nyl9KGdlXnBlKX07cmV0dXJuIGZ1bmN0aW9uKHBlKXtmb3IodmFyIHllPWs0KHBlKSxQZT1mdW5jdGlvbihnZSl7Zm9yKHZhciBwZT1SW2dlLmxlbmd0aC0xXSx5ZT0xMDQsUGU9Z2UubGVuZ3RoLTE7UGU+PTA7LS1QZSlm''@;'; put 'put ''b3IodmFyIE5lPWdlW1BlXSxZZT0wOzchPVllOysrWWUpNjQmTmUmJihwZV49a1t5ZV0pLE5lKj0yLC0teWU7cmV0dXJuIHBlfSh5ZSksTmU9eWUubGVuZ3RoLFllPVYoMTYpLGV0PTA7MTYhPWV0OysrZXQpWWVbZXRdPTA7dmFyIGF0O2ZvcighKDEmfk5lKSYmKFllW05lXT1RKFNbMF0sUGU+''@;'; put 'put ''PjgpLFllWy0tTmVdPVEoeWVbeWUubGVuZ3RoLTFdLDI1NSZQZSkpO05lPjA7KVllWy0tTmVdPVEoeWVbTmVdLFBlPj44KSxZZVstLU5lXT1RKHllW05lXSwyNTUmUGUpO2ZvcihOZT0xNSxhdD0xNS15ZS5sZW5ndGg7YXQ+MDspWWVbTmVdPVEoU1thdF0sUGU+PjgpLC0tYXQsWWVbLS1OZV09''@;'; put 'put ''USh5ZVtOZV0sMjU1JlBlKSwtLU5lLC0tYXQ7cmV0dXJuIFllfX0oKTt2YXIgTnY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFEsb2Upe3N3aXRjaChvZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFIoX2UuZGVjb2RlKFEpLG9lKTtjYXNlImJpbmFyeSI6cmV0dXJuIFIoUSxvZSk7Y2FzZSJi''@;'; put 'put ''dWZmZXIiOnJldHVybiBSKFEudG9TdHJpbmcoImJpbmFyeSIpLG9lKTtjYXNlImFycmF5IjpyZXR1cm4gUih1dChRKSxvZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK29lLnR5cGUpfWZ1bmN0aW9uIFIoUSxvZSl7dmFyIHBlPShvZXx8e30pLmRlbnNlP1tdOnt9O2lm''@;'; put 'put ''KCFRLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiBwZVsiIXJlZiJdPXJhKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHBlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBrKFEsb2Upe3JldHVybiB0aChTKFEsb2UpLG9l''@;'; put 'put ''KX0sdG9fc2hlZXQ6Uyxmcm9tX3NoZWV0OmZ1bmN0aW9uIEcoUSl7Zm9yKHZhciBwZSxvZT1bIntcXHJ0ZjFcXGFuc2kiXSxnZT1vbyhRWyIhcmVmIl0pLHllPUFycmF5LmlzQXJyYXkoUSksUGU9Z2Uucy5yO1BlPD1nZS5lLnI7KytQZSl7b2UucHVzaCgiXFx0cm93ZFxcdHJhdXRvZml0MSIp''@;'; put 'put ''O2Zvcih2YXIgTmU9Z2Uucy5jO05lPD1nZS5lLmM7KytOZSlvZS5wdXNoKCJcXGNlbGx4IisoTmUrMSkpO2ZvcihvZS5wdXNoKCJcXHBhcmRcXGludGJsIiksTmU9Z2Uucy5jO05lPD1nZS5lLmM7KytOZSl7dmFyIFllPXFpKHtyOlBlLGM6TmV9KTsocGU9eWU/KFFbUGVdfHxbXSlbTmVdOlFb''@;'; put 'put ''WWVdKSYmKG51bGwhPXBlLnZ8fHBlLmYmJiFwZS5GKSYmKG9lLnB1c2goIiAiKyhwZS53fHwoX2wocGUpLHBlLncpKSksb2UucHVzaCgiXFxjZWxsIikpfW9lLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBvZS5qb2luKCIiKSsifSJ9fX0oKTtmdW5jdGlvbiBDZyhTKXt2YXIg''@;'; put 'put ''Uj1TLnNsaWNlKCIjIj09PVNbMF0/MTowKS5zbGljZSgwLDYpO3JldHVybltwYXJzZUludChSLnNsaWNlKDAsMiksMTYpLHBhcnNlSW50KFIuc2xpY2UoMiw0KSwxNikscGFyc2VJbnQoUi5zbGljZSg0LDYpLDE2KV19ZnVuY3Rpb24gaGQoUyl7Zm9yKHZhciBSPTAsaz0xOzMhPVI7KytSKWs9''@;'; put 'put ''MjU2KmsrKFNbUl0+MjU1PzI1NTpTW1JdPDA/MDpTW1JdKTtyZXR1cm4gay50b1N0cmluZygxNikudG9VcHBlckNhc2UoKS5zbGljZSgxKX1mdW5jdGlvbiBvaChTLFIpe2lmKG51bGw9PVMpcmV0dXJuIG51bGwhPVI7aWYobnVsbD09UilyZXR1cm4hMDtpZigxPT1TLmF1dG8mJjE9PVIuYXV0''@;'; put 'put ''bylyZXR1cm4hMTtpZighIVMuYXV0byE9ISFSLmF1dG98fG51bGw9PVMudGhlbWUhPShudWxsPT1SLnRoZW1lKSlyZXR1cm4hMDtpZihudWxsIT1TLnRoZW1lKXJldHVybiBTLnRoZW1lIT1SLnRoZW1lfHxTLnRpbnQhPVIudGludDtpZihudWxsPT1TLnJnYiYmbnVsbD09Ui5yZ2IpcmV0dXJu''@;'; put 'put ''ITE7dmFyIGs9Uy5yZ2I7Im51bWJlciI9PXR5cGVvZiBrJiYoaz1rLnRvU3RyaW5nKDE2KSksaz1rLnNsaWNlKC02KTt2YXIgRz1SLnJnYjtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEcmJihHPUcudG9TdHJpbmcoMTYpKSxHPUcuc2xpY2UoLTYpLGsudG9Mb3dlckNhc2UoKSE9Ry50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpfWZ1bmN0aW9uIGRrKFMsUil7cmV0dXJuIG51bGw9PVM/bnVsbCE9UjpudWxsPT1SP251bGwhPVM6Uy5zdHlsZSE9Ui5zdHlsZXx8b2goUy5jb2xvcixSLmNvbG9yKX1mdW5jdGlvbiBTZyhTLFIpe2lmKDA9PT1SKXJldHVybiBTO3ZhciBrPWZ1bmN0aW9uIFBWKFMpe3ZhciBSPVNb''@;'; put 'put ''MF0vMjU1LGs9U1sxXS8yNTUsRz1TWzJdLzI1NSxRPU1hdGgubWF4KFIsayxHKSxvZT1NYXRoLm1pbihSLGssRyksZ2U9US1vZTtpZigwPT09Z2UpcmV0dXJuWzAsMCxSXTt2YXIgeWUscGU9MCxQZT1RK29lO3N3aXRjaCh5ZT1nZS8oUGU+MT8yLVBlOlBlKSxRKXtjYXNlIFI6cGU9KChrLUcp''@;'; put 'put ''L2dlKzYpJTY7YnJlYWs7Y2FzZSBrOnBlPShHLVIpL2dlKzI7YnJlYWs7Y2FzZSBHOnBlPShSLWspL2dlKzR9cmV0dXJuW3BlLzYseWUsUGUvMl19KENnKFMpKTtyZXR1cm4ga1syXT1SPDA/a1syXSooMStSKToxLSgxLWtbMl0pKigxLVIpLGhkKGZ1bmN0aW9uIHVrKFMpe3ZhciB5ZSxrPVNb''@;'; put 'put ''MV0sRz1TWzJdLFE9MiprKihHPC41P0c6MS1HKSxvZT1HLVEvMixnZT1bb2Usb2Usb2VdLHBlPTYqU1swXTtpZigwIT09aylzd2l0Y2goMHxwZSl7Y2FzZSAwOmNhc2UgNjp5ZT1RKnBlLGdlWzBdKz1RLGdlWzFdKz15ZTticmVhaztjYXNlIDE6Z2VbMF0rPXllPVEqKDItcGUpLGdlWzFdKz1R''@;'; put 'put ''O2JyZWFrO2Nhc2UgMjp5ZT1RKihwZS0yKSxnZVsxXSs9USxnZVsyXSs9eWU7YnJlYWs7Y2FzZSAzOmdlWzFdKz15ZT1RKig0LXBlKSxnZVsyXSs9UTticmVhaztjYXNlIDQ6eWU9USoocGUtNCksZ2VbMl0rPVEsZ2VbMF0rPXllO2JyZWFrO2Nhc2UgNTpnZVsyXSs9eWU9USooNi1wZSksZ2Vb''@;'; put 'put ''MF0rPVF9Zm9yKHZhciBQZT0wOzMhPVBlOysrUGUpZ2VbUGVdPU1hdGgucm91bmQoMjU1KmdlW1BlXSk7cmV0dXJuIGdlfShrKSl9dmFyIGhrPTYsVGM9aGs7ZnVuY3Rpb24gTWcoUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMrTWF0aC5yb3VuZCgxMjgvVGMpLzI1NikqVGMpfWZ1bmN0aW9uIHhn''@;'; put 'put ''KFMpe3JldHVybiBNYXRoLmZsb29yKChTLTUpL1RjKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIGtmKFMpe3JldHVybiBNYXRoLnJvdW5kKChTKlRjKzUpL1RjKjI1NikvMjU2fWZ1bmN0aW9uIFEwKFMpe1MuYmVzdEZpdCYmZGVsZXRlIFMuYmVzdEZpdCxTLndpZHRoPyhTLndweD1NZyhTLndpZHRo''@;'; put 'put ''KSxTLndjaD14ZyhTLndweCksUy5NRFc9VGMpOlMud3B4PyhTLndjaD14ZyhTLndweCksUy53aWR0aD1rZihTLndjaCksUy5NRFc9VGMpOiJudW1iZXIiPT10eXBlb2YgUy53Y2gmJihTLndpZHRoPWtmKFMud2NoKSxTLndweD1NZyhTLndpZHRoKSxTLk1EVz1UYyksUy5jdXN0b21XaWR0aCYm''@;'; put 'put ''ZGVsZXRlIFMuY3VzdG9tV2lkdGh9dmFyIFdzPTk2LERmPVdzO2Z1bmN0aW9uIFUzKFMpe3JldHVybiA3MipTL0RmfWZ1bmN0aW9uIHNoKFMpe3JldHVybiBTKkRmLzcyfWZ1bmN0aW9uIElmKFMpe0RmPVM9e29zeDo3Mix3aW46OTYsd2luMTAwOjk2LHdpbjEyNToxMjAsd2luMTUwOjE0NH1b''@;'; put 'put ''U118fFN8fFdzLGJDPVRnW1NdfWZ1bmN0aW9uIEJ2KFMpe1MuaHB4P1MuaHB0PVUzKFMuaHB4KTpTLmhwdCYmKFMuaHB4PXNoKFMuaHB0KSl9dmFyIG1DPXtOb25lOiJub25lIixTb2xpZDoic29saWQiLEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdo''@;'; put 'put ''dEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFnQ3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5I''@;'; put 'put ''b3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRHcmlkIn0sdkM9VmUobUMpLFE2PXtvcmFuZ2U6MTY3NTM5MjAsYmxhY2s6MCxuYXZ5OjEy''@;'; put 'put ''OCxibHVlOjI1NSxncmVlbjozMjc2OCx0ZWFsOjMyODk2LGxpbWU6NjUyODAsYXF1YTo2NTUzNSxzaWx2ZXI6MTI2MzIyNTYsbWFyb29uOjgzODg2MDgscHVycGxlOjgzODg3MzYsb2xpdmU6ODQyMTM3NixncmF5Ojg0MjE1MDQscmVkOjE2NzExNjgwLGZ1Y2hzaWE6MTY3MTE5MzUseWVsbG93''@;'; put 'put ''OjE2Nzc2OTYwLHdoaXRlOjE2Nzc3MjE1fTtmdW5jdGlvbiBFZyhTLFIpe2lmKFMucmVwbGFjZSgiIyIsIiIpLm1hdGNoKC9eWzAtOWEtZkEtRl17Nn0kLykpcmV0dXJuIHBhcnNlSW50KFMucmVwbGFjZSgiIyIsIiIpLDE2KTtpZihRNltTXSlyZXR1cm4gUTZbU107dmFyIGs9Uy5tYXRjaCgv''@;'; put 'put ''cmdiXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKlwpLyk7aWYoaylyZXR1cm4oK2tbMV08PDE2KSsoK2tbMl08PDgpKyAra1szXTtpZihrPVMubWF0Y2goL3JnYmFcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqKFxkKikvKSlyZXR1cm4gMCE9KGtbNF0m''@;'; put 'put ''JmtbNF0ubGVuZ3RoPjAmJitrWzRdfHwwKXx8K2tbMV0+MHx8K2tbMl0+MHx8K2tbM10+MD8oK2tbMV08PDE2KSsoK2tbMl08PDgpKyAra1szXTpSPy0xOjE2Nzc3MjE1O3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBIVE1MIGNvbG9yICIrUyl9dmFyIFRnPXt9O2Z1bmN0aW9uIGp2KFMpe1M9''@;'; put 'put ''U3x8OTY7dmFyIFI9e0NhbGlicmk6W10sQXJpYWw6W10sIlNwYXJrYXNzZSBSZyI6W10sXHU1YjhiXHU0ZjUzOltdLFx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZjpbXSwiQ2VudHVyeSBHb3RoaWMiOltdfTtyZXR1cm4gUi5DYWxpYnJpWzExXT03LFIuQ2FsaWJyaVsxMl09ezcyOjYs''@;'; put 'put ''OTY6OCwxMjA6MTAsMTQ0OjEyfVtTXXx8OCxSLkNhbGlicmlbMTNdPTEwLFIuQ2FsaWJyaVsxNF09MTEsUi5DYWxpYnJpWzE2XT0xMixSLkNhbGlicmlbMThdPTE0LFIuQ2FsaWJyaVsyMF09MTYsUi5cdTViOGJcdTRmNTNbMTFdPTgsUi5cdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWZb''@;'; put 'put ''MTFdPTgsUlsiU3Bhcmthc3NlIFJnIl1bMTFdPTcsUi5BcmlhbFsxMF09NyxSWyJDZW50dXJ5IEdvdGhpYyJdWzEyXT05LFJ9VGdbNzJdPWp2KDcyKSxUZ1s5Nl09anYoOTYpLFRnWzEyMF09anYoMTIwKSxUZ1sxNDRdPWp2KDE0NCk7dmFyIGJDPVRnWzk2XTtmdW5jdGlvbiB5QyhTKXtyZXR1''@;'; put 'put ''cm4oYkNbUy5uYW1lfHxTLkZvbnROYW1lXXx8W10pW1Muc3p8fFMuU2l6ZV19ZnVuY3Rpb24gSTQoUyl7aWYoUyl7dmFyIFI9eUMoUyk7aWYoUilyZXR1cm4gVGM9Un1yZXR1cm4gVGM9Nn1mdW5jdGlvbiBfQyhTLFIsayl7cmV0dXJuIGhkKGZ1bmN0aW9uIGZrKFMsUixrKXtyZXR1cm5bTWF0''@;'; put 'put ''aC5yb3VuZChSWzBdKmsrU1swXSooMS1rKSksTWF0aC5yb3VuZChSWzFdKmsrU1sxXSooMS1rKSksTWF0aC5yb3VuZChSWzJdKmsrU1syXSooMS1rKSldfShDZygibnVtYmVyIj09dHlwZW9mIFMucmdiPygiMDAwMDAiK1MudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6Uy5yZ2IpLENnKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgUi5yZ2I/KCIwMDAwMCIrUi50b1N0cmluZygxNikpLnNsaWNlKC02KTpSLnJnYiksaykpfWZ1bmN0aW9uIHp2KFMsUixrKXtpZihrKXN3aXRjaCgrUyl7Y2FzZSA2NDpTPTY1O2JyZWFrO2Nhc2UgNjU6Uz02NH12YXIgRz1SJiZSWytTXXx8cjBbK1NdfHxId1srUy0yMDBd''@;'; put 'put ''O2lmKDgxPT0rUyYmKEc9cjBbMV0pLEd8fChHPXIwWzFdKSwhRyl0aHJvdyBuZXcgRXJyb3IoImJhZCBJQ1YgaW5kZXggIitTKTtyZXR1cm4gaGQoRyl9ZnVuY3Rpb24gcGsoUyxSLGspe3ZhciBHPXt9O3JldHVybiBudWxsIT1TLmluZGV4ZWQmJihHLmluZGV4PXBhcnNlSW50KFMuaW5kZXhl''@;'; put 'put ''ZCwxMCksRy5yZ2I9enYoRy5pbmRleCxSLkluZGV4ZWQpKSxudWxsIT1TLnRoZW1lJiYoRy50aGVtZT1wYXJzZUludChTLnRoZW1lLDEwKSksbnVsbCE9Uy50aW50JiYoRy50aW50PXBhcnNlRmxvYXQoUy50aW50KSksbnVsbCE9Uy5yZ2ImJihHLnJnYj1TLnJnYi5zbGljZSgtNikpLG51bGwh''@;'; put 'put ''PUcudGhlbWUmJiFHLnJnYiYmay50aGVtZUVsZW1lbnRzJiYoRy5yZ2I9U2coay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHLnRoZW1lXS5yZ2IsRy50aW50fHwwKSxHLnJhd19yZ2I9ay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHLnRoZW1lXS5yZ2IpLEd9ZnVuY3Rpb24gd0MoUyxSLGss''@;'; put 'put ''Ryl7Ui5Cb3JkZXJzPVtdO3ZhciBRPXt9LG9lPXt9LGdlPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT12cihwZSk7c3dpdGNoKFduKHllWzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2FzZSI8Ym9yZGVycz4iOmNhc2UiPC9ib3JkZXJzPiI6Y2FzZSI8''@;'; put 'put ''L2JvcmRlcj4iOmNhc2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRvbS8+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2FzZSI8''@;'; put 'put ''ZGlhZ29uYWwvPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2FzZSI8dmVydGljYWwvPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2Fz''@;'; put 'put ''ZSI8L3N0YXJ0PiI6Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRlciI6Y2FzZSI8Ym9y''@;'; put 'put ''ZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOlE9e30seWUuZGlhZ29uYWxVcCYmKFEuZGlhZ29uYWxVcD10aSh5ZS5kaWFnb25hbFVwKSkseWUuZGlhZ29uYWxEb3duJiYoUS5kaWFnb25hbERvd249dGkoeWUuZGlhZ29uYWxEb3duKSksUi5Cb3JkZXJzLnB1c2goUSk7YnJlYWs7Y2FzZSI8bGVmdCI6''@;'; put 'put ''Y2FzZSI8bGVmdD4iOm9lPVEubGVmdD17fSx5ZS5zdHlsZSYmKG9lLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjxyaWdodCI6Y2FzZSI8cmlnaHQ+IjpvZT1RLnJpZ2h0PXt9LHllLnN0eWxlJiYob2Uuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPHRvcCI6Y2FzZSI8dG9wPiI6b2U9''@;'; put 'put ''US50b3A9e30seWUuc3R5bGUmJihvZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpvZT1RLmJvdHRvbT17fSx5ZS5zdHlsZSYmKG9lLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjwvZGlhZ29uYWw+IjpRLmRpYWdvbmFsPW9lLG9lPXt9O2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPC9ob3Jpem9udGFsPiI6US5ob3Jpem9udGFsPW9lLG9lPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOlEudmVydGljYWw9b2Usb2U9e307YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6b2UuY29sb3J8fChvZS5jb2xvcj17fSkseWUuYXV0byYmKG9lLmNvbG9y''@;'; put 'put ''LmF1dG89dGkoeWUuYXV0bykpLG51bGwhPXllLnJnYj9vZS5jb2xvci5yZ2I9eWUucmdiLnNsaWNlKC02KTp5ZS5pbmRleGVkPyhvZS5jb2xvci5pbmRleD1wYXJzZUludCh5ZS5pbmRleGVkLDEwKSxvZS5jb2xvci5yZ2I9enYob2UuY29sb3IuaW5kZXgsUi5JbmRleGVkLCExKSk6eWUudGhl''@;'; put 'put ''bWUmJihvZS5jb2xvci50aGVtZT1wYXJzZUludCh5ZS50aGVtZSwxMCkseWUudGludCYmKG9lLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdCh5ZS50aW50KSkseWUudGhlbWUmJmsudGhlbWVFbGVtZW50cyYmay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKG9lLmNvbG9yLnJnYj1TZyhrLnRoZW1l''@;'; put 'put ''RWxlbWVudHMuY2xyU2NoZW1lW29lLmNvbG9yLnRoZW1lXS5yZ2Isb2UuY29sb3IudGludHx8MCkpKSwheWUuYXV0byYmbnVsbD09eWUucmdiJiYheWUuaW5kZXhlZCYmZGVsZXRlIG9lLmNvbG9yO2JyZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3llWzBdKyIgaW4gYm9yZGVycyIpfX0pfWZ1bmN0aW9uIFI0KFMsUil7dmFyIGs9WyI8IitSXTtyZXR1cm4gUyYmUy5zdHlsZT8oay5wdXNoKCcgc3R5bGU9IicrUy5zdHlsZSsnIicpLFMu''@;'; put 'put ''Y29sb3I/KGsucHVzaCgiPiIpLGsucHVzaChnZChTLmNvbG9yLCEwKSksay5qb2luKCIiKSsiPC8iK1IrIj4iKTprLmpvaW4oIiIpKyIvPiIpOmtbMF0rIi8+In1mdW5jdGlvbiBGVihTLFIsayxHKXtSLkZpbGxzPVtdO3ZhciBRPXt9LG9lPXt9LGdlPSExLHBlPSExOyhTWzBdLm1hdGNoKGVu''@;'; put 'put ''KXx8W10pLmZvckVhY2goZnVuY3Rpb24oeWUpe3ZhciBQZT12cih5ZSk7c3dpdGNoKFduKFBlWzBdKSl7Y2FzZSI8ZmlsbHMiOmNhc2UiPGZpbGxzPiI6Y2FzZSI8L2ZpbGxzPiI6Y2FzZSI8L2ZpbGw+IjpjYXNlIjwvZ3JhZGllbnRGaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdD''@;'; put 'put ''b2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxzdG9wLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNl''@;'; put 'put ''IjxmaWxsLz4iOlIuRmlsbHMucHVzaChRPXt9KTticmVhaztjYXNlIjxncmFkaWVudEZpbGw+IjpRLnN0b3BzPVtdO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbCI6US5zdG9wcz1bXSxQZS5kZWdyZWUmJihRLmFuZ2xlPStQZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNl''@;'; put 'put ''IjxwYXR0ZXJuRmlsbD4iOlBlLnBhdHRlcm5UeXBlJiYoUS5wYXR0ZXJuVHlwZT1QZS5wYXR0ZXJuVHlwZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6aWYoZ2UpdGhyb3cgbmV3IEVycm9yKCJiYWQgc3RvcCIpO2JyZWFrO2Nhc2UiPGNvbG9yIjpj''@;'; put 'put ''YXNlIjxiZ0NvbG9yIjpjYXNlIjxmZ0NvbG9yIjp2YXIgTmU9V24oUGVbMF0pLnNsaWNlKDEpOyJjb2xvciIhPU5lJiYhUVtOZV0mJihRW05lXT17fSk7dmFyIFllPWdlP29lOlFbTmVdO251bGwhPVBlLmluZGV4ZWQmJihZZS5pbmRleD1wYXJzZUludChQZS5pbmRleGVkLDEwKSxZZS5yZ2I9''@;'; put 'put ''enYoWWUuaW5kZXgsUi5JbmRleGVkKSksbnVsbCE9UGUudGhlbWUmJihZZS50aGVtZT1wYXJzZUludChQZS50aGVtZSwxMCkpLG51bGwhPVBlLnRpbnQmJihZZS50aW50PXBhcnNlRmxvYXQoUGUudGludCkpLG51bGwhPVBlLnJnYiYmKFllLnJnYj1QZS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1Q''@;'; put 'put ''ZS5hdXRvJiZkZWxldGUgUVtOZV0sbnVsbCE9WWUudGhlbWUmJiFZZS5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKFllLnJnYj1TZyhrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1llLnRoZW1lXS5yZ2IsWWUudGludHx8MCksRy5XVEYmJihZZS5yYXdfcmdiPWsudGhlbWVFbGVtZW50cy5jbHJT''@;'; put 'put ''Y2hlbWVbWWUudGhlbWVdLnJnYikpO2JyZWFrO2Nhc2UiPHN0b3A+IjpnZT0hMCxvZT17fTticmVhaztjYXNlIjxzdG9wIjpnZT0hMCxvZT17fSxudWxsIT1QZS5wb3NpdGlvbiYmKG9lLnY9cGFyc2VGbG9hdChQZS5wb3NpdGlvbikpO2JyZWFrO2Nhc2UiPC9zdG9wPiI6Z2U9ITEsUS5zdG9w''@;'; put 'put ''cy5wdXNoKG9lKTticmVhaztjYXNlIjxleHQiOnBlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpwZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhcGUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitQZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24gSFYoUyxSLGssRyl7''@;'; put 'put ''Ui5Gb250cz1bXTt2YXIgUT17fSxvZT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgcGU9dnIoZ2UpO3N3aXRjaChXbihwZVswXSkpe2Nhc2UiPGZvbnRzIjpjYXNlIjxmb250cz4iOmNhc2UiPC9mb250cz4iOmJyZWFrO2Nhc2UiPGZvbnQiOmNhc2Ui''@;'; put 'put ''PGZvbnQ+IjppZigiLz4iIT1nZS5zbGljZSgtMikpYnJlYWs7Y2FzZSI8L2ZvbnQ+IjpjYXNlIjxmb250Lz4iOlIuRm9udHMucHVzaChRKSxRPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnBlLnZhbCYmKFEubmFtZT1nbyhwZS52YWwpKTticmVhaztjYXNlIjxuYW1lLz4iOmNhc2UiPC9uYW1lPiI6''@;'; put 'put ''YnJlYWs7Y2FzZSI8YiI6US5ib2xkPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Yi8+IjpjYXNlIjxiPiI6US5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjpRLml0YWxpYz1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6Y2FzZSI8aT4i''@;'; put 'put ''OlEuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjx1Ijpzd2l0Y2gocGUudmFsKXtjYXNlIm5vbmUiOlEudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOlEudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSJkb3VibGUiOlEudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5n''@;'; put 'put ''bGVBY2NvdW50aW5nIjpRLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlEudW5kZXJsaW5lPTM0fWJyZWFrO2Nhc2UiPHUvPiI6Y2FzZSI8dT4iOlEudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxzdHJpa2UiOlEuc3RyaWtlPXBlLnZh''@;'; put 'put ''bD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOlEuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGluZSI6US5vdXRsaW5lPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8b3V0bGluZS8+IjpRLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOlEuc2hhZG93PXBl''@;'; put 'put ''LnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8c2hhZG93Lz4iOlEuc2hhZG93PTE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UiOlEuY29uZGVuc2U9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpRLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpRLmV4''@;'; put 'put ''dGVuZD1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGV4dGVuZC8+IjpRLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6IjpwZS52YWwmJihRLnN6PStwZS52YWwpO2JyZWFrO2Nhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmJyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUiIT0ocGUudmFs''@;'; put 'put ''fHwibm9uZSIpJiYoUS52YWxpZ249cGUudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8L3ZlcnRBbGlnbj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6cGUudmFsJiYoUS5mYW1pbHk9cGFyc2VJbnQocGUudmFsLDEwKSk7YnJlYWs7Y2FzZSI8''@;'; put 'put ''ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnBlLnZhbCYmKFEuc2NoZW1lPXBlLnZhbCk7YnJlYWs7Y2FzZSI8c2NoZW1lLz4iOmNhc2UiPC9zY2hlbWU+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PXBlLnZhbClicmVhaztwZS5jb2RlcGFnZT1O''@;'; put 'put ''W3BhcnNlSW50KHBlLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjpRLmNvbG9yfHwoUS5jb2xvcj17fSkscGUuYXV0byYmKFEuY29sb3IuYXV0bz10aShwZS5hdXRvKSkscGUucmdiP1EuY29sb3IucmdiPXBlLnJnYi5zbGljZSgtNik6cGUuaW5kZXhlZD8oUS5jb2xvci5pbmRleD1wYXJz''@;'; put 'put ''ZUludChwZS5pbmRleGVkLDEwKSxRLmNvbG9yLnJnYj16dihRLmNvbG9yLmluZGV4LFIuSW5kZXhlZCkpOnBlLnRoZW1lJiYoUS5jb2xvci50aGVtZT1wYXJzZUludChwZS50aGVtZSwxMCkscGUudGludCYmKFEuY29sb3IudGludD1wYXJzZUZsb2F0KHBlLnRpbnQpKSxwZS50aGVtZSYmay50''@;'; put 'put ''aGVtZUVsZW1lbnRzJiZrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYoUS5jb2xvci5yZ2I9U2coay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtRLmNvbG9yLnRoZW1lXS5yZ2IsUS5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPEFsdGVybmF0ZUNvbnRlbnQiOm9lPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6b2U9ITE7YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpvZT0hMDticmVhaztjYXNlIjwvZXh0PiI6b2U9ITE7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIW9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBmb250cyIpfX0pfXZhciBBZz17MDoibm9uZSIsMToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGVBY2NvdW50aW5nIiwzNDoiZG91YmxlQWNjb3VudGlu''@;'; put 'put ''ZyJ9LFozPVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJib3JkZXJJZCIsInhmSWQiXSxXMz1bImFwcGx5QWxpZ25tZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQiLCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5UHJvdGVjdGlvbiIsInBpdm90QnV0dG9u''@;'; put 'put ''IiwicXVvdGVQcmVmaXgiXSxMND1mdW5jdGlvbigpe3ZhciBTPS88KD86XHcrOik/Zm9udChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250Pi8sUj0vPCg/Olx3KzopP251bUZtdChbXj5dKilcLz4vLGs9LzwoPzpcdys6KT9maWxsKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2Zp''@;'; put 'put ''bGw+LyxRPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcj4vO3JldHVybiBmdW5jdGlvbihwZSx5ZSxQZSxOZSl7dmFyIGN0LEV0LFllPXt9LGV0PXt9O3JldHVybihjdD1wZS5tYXRjaChTKSkmJihIVihjdCxZZSxQZSxOZSksKFllLkZvbnRzfHxb''@;'; put 'put ''XSlbMF0mJlB0KGV0LFllLkZvbnRzWzBdKSksKGN0PXBlLm1hdGNoKFIpKSYmKEV0PXZyKGdvKGN0WzBdKSksZXQuej1FdC5mb3JtYXRDb2RlP1FyKEV0LmZvcm1hdENvZGUpOih5ZS5OdW1iZXJGbXR8fFtdKVsrRXQubnVtRm10SWRdfHwiR2VuZXJhbCIpLChjdD1wZS5tYXRjaChrKSkmJihG''@;'; put 'put ''VihjdCxZZSxQZSxOZSksKFllLkZpbGxzfHxbXSlbMF0mJlB0KGV0LFllLkZpbGxzWzBdKSksKGN0PXBlLm1hdGNoKFEpKSYmKHdDKGN0LFllLFBlLE5lKSwoWWUuQm9yZGVyc3x8W10pWzBdJiZQdChldCxZZS5Cb3JkZXJzWzBdKSksZXR9fSgpLEppPS88KD86XHcrOik/ZHhmPltcU1xzXSo/''@;'; put 'put ''PFwvKD86XHcrOik/ZHhmPi9nLEtyPS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgeWs9ZnVuY3Rpb24oKXt2YXIgUj0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLGs9''@;'; put 'put ''LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sRz0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLFE9LzwoPzpcdys6KT9jZWxsWGZzKFtePl0qKT5bXFNcc10q''@;'; put 'put ''PzxcLyg/Olx3KzopP2NlbGxYZnM+LyxvZT0vPCg/Olx3KzopP2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sZ2U9LzwoPzpcdys6KT9mb250cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250cz4vLHBlPS88KD86XHcrOik/Ym9yZGVycyhbXj5dKik+W1xT''@;'; put 'put ''XHNdKj88XC8oPzpcdys6KT9ib3JkZXJzPi8seWU9LzwoPzpcdys6KT9pbmRleGVkQ29sb3JzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2luZGV4ZWRDb2xvcnM+LyxQZT0vPCg/Olx3KzopP3RhYmxlU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGVzPi8s''@;'; put 'put ''TmU9LzwoPzpcdys6KT9keGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2R4ZnM+LztyZXR1cm4gZnVuY3Rpb24oZXQsY3QsRXQpe3ZhciBidCxhdD17fTtyZXR1cm4gZXQ/KChidD0oZXQ9ZXQucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQ''@;'; put 'put ''RVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKSkubWF0Y2goeWUpKSYmZnVuY3Rpb24gTlYoUyxSLGspe1IuSW5kZXhlZHx8KFIuSW5kZXhlZD1bXSk7dmFyIEc9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgb2U9dnIoUSk7c3dpdGNoKFduKG9lWzBdKSl7''@;'; put 'put ''Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxy''@;'; put 'put ''Z2JDb2xvciI6ZGVsZXRlIG9lWzBdO3ZhciBnZT1wYXJzZUludChvZS5yZ2Iuc2xpY2UoLTYpLDE2KTtSLkluZGV4ZWQucHVzaChbZ2U+PjE2JjI1NSxnZT4+OCYyNTUsMjU1JmdlXSk7YnJlYWs7Y2FzZSI8ZXh0IjpHPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpHPSExO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''aWYoayYmay5XVEYmJiFHKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb2VbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goUikpJiZmdW5jdGlvbiBtayhTLFIsayl7Ui5OdW1iZXJGbXQ9W107Zm9yKHZhciBHPVJlKEEuX3RhYmxlKSxRPTA7''@;'; put 'put ''UTxHLmxlbmd0aDsrK1EpUi5OdW1iZXJGbXRbR1tRXV09QS5fdGFibGVbR1tRXV07dmFyIG9lPVNbMF0ubWF0Y2goZW4pO2lmKG9lKWZvcihRPTA7UTxvZS5sZW5ndGg7KytRKXt2YXIgZ2U9dnIob2VbUV0pO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRz''@;'; put 'put ''PiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51bUZtdCI6dmFyIHBlPVFyKGdvKGdlLmZvcm1hdENvZGUpKSx5ZT1wYXJzZUludChnZS5udW1GbXRJZCwxMCk7aWYoUi5OdW1iZXJGbXRbeWVdPXBlLHllPjApe2lmKHllPjM5''@;'; put 'put ''Mil7Zm9yKHllPTM5Mjt5ZT42MCYmbnVsbCE9Ui5OdW1iZXJGbXRbeWVdOy0teWUpO1IuTnVtYmVyRm10W3llXT1wZX1BLmxvYWQocGUseWUpfWJyZWFrO2RlZmF1bHQ6aWYoay5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIG51bUZtdHMiKX19fShidCxh''@;'; put 'put ''dCxFdCksKGJ0PWV0Lm1hdGNoKGdlKSkmJkhWKGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2gob2UpKSYmRlYoYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChwZSkpJiZ3QyhidCxhdCxjdCxFdCksKGJ0PWV0Lm1hdGNoKGspKSYmZnVuY3Rpb24gcm5lKFMsUixrKXtSLkNlbGxTdHlsZVhmPVtd''@;'; put 'put ''O3ZhciBHLFE9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihvZSl7dmFyIGdlPXZyKG9lKSxwZT0wO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPGNlbGxTdHlsZVhmcyI6Y2FzZSI8Y2VsbFN0eWxlWGZzPiI6Y2FzZSI8Y2VsbFN0eWxlWGZzLz4iOmNhc2UiPC9jZWxs''@;'; put 'put ''U3R5bGVYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRl''@;'; put 'put ''KEc9Z2UpWzBdLHBlPTA7cGU8WjMubGVuZ3RoOysrcGUpR1taM1twZV1dJiYoR1taM1twZV1dPXBhcnNlSW50KEdbWjNbcGVdXSwxMCkpO2ZvcihwZT0wO3BlPFczLmxlbmd0aDsrK3BlKUdbVzNbcGVdXSYmKEdbVzNbcGVdXT10aShHW1czW3BlXV0pKTtpZihSLk51bWJlckZtdCYmRy5udW1G''@;'; put 'put ''bXRJZD4zOTIpZm9yKHBlPTM5MjtwZT42MDstLXBlKWlmKFIuTnVtYmVyRm10W0cubnVtRm10SWRdPT1SLk51bWJlckZtdFtwZV0pe0cubnVtRm10SWQ9cGU7YnJlYWt9Ui5DZWxsU3R5bGVYZi5wdXNoKEcpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciB5''@;'; put 'put ''ZT17fTtnZS52ZXJ0aWNhbCYmKHllLnZlcnRpY2FsPWdlLnZlcnRpY2FsKSxnZS5ob3Jpem9udGFsJiYoeWUuaG9yaXpvbnRhbD1nZS5ob3Jpem9udGFsKSxudWxsIT1nZS50ZXh0Um90YXRpb24mJih5ZS50ZXh0Um90YXRpb249Z2UudGV4dFJvdGF0aW9uKSxnZS5pbmRlbnQmJih5ZS5pbmRl''@;'; put 'put ''bnQ9Z2UuaW5kZW50KSxnZS53cmFwVGV4dCYmKHllLndyYXBUZXh0PWdlLndyYXBUZXh0KSxnZS5zaHJpbmtUb0ZpdCYmKHllLnNocmlua1RvRml0PXRpKGdlLnNocmlua1RvRml0KSksRy5hbGlnbm1lbnQ9eWU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6Ry5wcm90ZWN0aW9uPXt9LHRpKGdl''@;'; put 'put ''LmhpZGRlbikmJihHLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1nZS5sb2NrZWQmJihHLnByb3RlY3Rpb24uZWRpdGFibGU9IXRpKGdlLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYh''@;'; put 'put ''USl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2VsbFN0eWxlWGZzIil9fSl9KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goRykpJiZmdW5jdGlvbiBhbmUoUyxSLGspe1IuQ2VsbFN0eWxlWGZ8fChSLkNlbGxTdHlsZVhmPVtdKTt2YXIgRz0hMTsoU1swXS5tYXRj''@;'; put 'put ''aChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT12cihRKTtzd2l0Y2goV24ob2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVzIjpjYXNlIjxjZWxsU3R5bGVzPiI6Y2FzZSI8Y2VsbFN0eWxlcy8+IjpjYXNlIjwvY2VsbFN0eWxlcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9jZWxsU3R5''@;'; put 'put ''bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxjZWxsU3R5bGUiOmNhc2UiPGNlbGxTdHlsZS8+IjpkZWxldGUgb2VbMF07dmFyIGdlPStvZS54ZklkO2lmKFIuQ2VsbFN0eWxlWGZbZ2VdKVIuQ2VsbFN0eWxlWGZbZ2VdLnN0eWxl''@;'; put 'put ''PWdvKG9lLm5hbWUpO2Vsc2UgaWYoIW9lLmJ1aWx0aW5JZCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK2dlKTticmVhaztjYXNlIjxleHQiOkc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOkc9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIUcpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitvZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChRKSkmJmZ1bmN0aW9uIHZrKFMsUixrKXtSLkNlbGxYZj1bXTt2YXIgRyxRPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Up''@;'; put 'put ''e3ZhciBnZT12cihvZSkscGU9MDtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3Rl''@;'; put 'put ''Y3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoRz1nZSlbMF0scGU9MDtwZTxaMy5sZW5ndGg7KytwZSlHW1ozW3BlXV0mJihHW1ozW3BlXV09cGFyc2VJbnQoR1taM1twZV1d''@;'; put 'put ''LDEwKSk7Zm9yKHBlPTA7cGU8VzMubGVuZ3RoOysrcGUpR1tXM1twZV1dJiYoR1tXM1twZV1dPXRpKEdbVzNbcGVdXSkpO2lmKFIuTnVtYmVyRm10JiZHLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoUi5OdW1iZXJGbXRbRy5udW1GbXRJZF09PVIuTnVtYmVyRm10W3Bl''@;'; put 'put ''XSl7Ry5udW1GbXRJZD1wZTticmVha31SLkNlbGxTdHlsZVhmJiZHLnhmSWQmJlIuQ2VsbFN0eWxlWGZbRy54ZklkXSYmUi5DZWxsU3R5bGVYZltHLnhmSWRdLnN0eWxlJiYoRy5zdHlsZT1SLkNlbGxTdHlsZVhmW0cueGZJZF0uc3R5bGUpLFIuQ2VsbFhmLnB1c2goRyk7YnJlYWs7Y2FzZSI8''@;'; put 'put ''YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIHllPXt9O2dlLnZlcnRpY2FsJiYoeWUudmVydGljYWw9Z2UudmVydGljYWwpLGdlLmhvcml6b250YWwmJih5ZS5ob3Jpem9udGFsPWdlLmhvcml6b250YWwpLG51bGwhPWdlLnRleHRSb3RhdGlvbiYmKHllLnRleHRSb3RhdGlvbj1n''@;'; put 'put ''ZS50ZXh0Um90YXRpb24pLGdlLmluZGVudCYmKHllLmluZGVudD1nZS5pbmRlbnQpLGdlLndyYXBUZXh0JiYoeWUud3JhcFRleHQ9dGkoZ2Uud3JhcFRleHQpKSxnZS5zaHJpbmtUb0ZpdCYmKHllLnNocmlua1RvRml0PXRpKGdlLnNocmlua1RvRml0KSksRy5hbGlnbm1lbnQ9eWU7YnJlYWs7''@;'; put 'put ''Y2FzZSI8cHJvdGVjdGlvbiI6Ry5wcm90ZWN0aW9uPXt9LHRpKGdlLmhpZGRlbikmJihHLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1nZS5sb2NrZWQmJihHLnByb3RlY3Rpb24uZWRpdGFibGU9IXRpKGdlLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2Ui''@;'; put 'put ''PGV4dCI6UT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGJ0LGF0LEV0KSwoYnQ9ZXQu''@;'; put 'put ''bWF0Y2goTmUpKSYmZnVuY3Rpb24gYmsoUyxSLGssRyl7Ui5EWEZ8fChSLkRYRj1bXSksKFNbMF0ubWF0Y2goSmkpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXtSLkRYRi5wdXNoKEw0KFEsUixrLEcpKX0pfShidCxhdCxjdCxFdCksKGJ0PWV0Lm1hdGNoKFBlKSkmJmZ1bmN0aW9uIEJWKFMs''@;'; put 'put ''UixrLEcpe1IuVGFibGV8fChSLlRhYmxlPVtdKSwoU1swXS5tYXRjaChLcil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1IuVGFibGUucHVzaChmdW5jdGlvbiBWVihTLFIsayxHKXt2YXIgUT0hMSxvZT17fTtyZXR1cm4oUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2''@;'; put 'put ''YXIgcGU9dnIoZ2UpO3N3aXRjaChXbihwZVswXSkpe2Nhc2UiPHRhYmxlU3R5bGU+IjpjYXNlIjx0YWJsZVN0eWxlIjpvZS5uYW1lPXBlLm5hbWUucmVwbGFjZSgvXihUYWJsZXxQaXZvdClTdHlsZS8sIiIpLG9lLnJhd25hbWU9cGUubmFtZSxvZS5waXZvdD0hcGUucGl2b3R8fHRpKHBlLnBp''@;'; put 'put ''dm90KSxvZS50YWJsZT0hcGUudGFibGV8fHRpKHBlLnRhYmxlKTticmVhaztjYXNlIjx0YWJsZVN0eWxlLz4iOmNhc2UiPC90YWJsZVN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUVsZW1lbnQiOmlmKHBl''@;'; put 'put ''LnR5cGUmJnBlLmR4ZklkKXtpZighUi5EWEZ8fCFSLkRYRlsrcGUuZHhmSWRdKXRocm93IG5ldyBFcnJvcihnZSsiIGNhbm5vdCBmaW5kIERYRiIpO29lW3BlLnR5cGVdPVIuRFhGWytwZS5keGZJZF19YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksb2V9KFEsUiwwLEcpKX0pfShidCxhdCwwLEV0KSwoYXQuRm9udHN8fFtdKVswXSYmSTQoYXQuRm9udHNbMF0pLGF0KTphdH19KCksX2s9UHIo''@;'; put 'put ''InN0eWxlU2hlZXQiLG51bGwse3htbG5zOllpLm1haW5bMF0sInhtbG5zOnZ0IjpZaS52dH0pO2Z1bmN0aW9uIFV2KFMsUil7dmFyIEcsaz1bSWksX2tdO1MuU1NGJiZudWxsIT0oRz1mdW5jdGlvbiBrZyhTKXt2YXIgUj1bIjxudW1GbXRzPiJdO3JldHVybltbNSw4XSxbMjMsMjZdLFs0MSw0''@;'; put 'put ''NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oayl7Zm9yKHZhciBHPWtbMF07Rzw9a1sxXTsrK0cpbnVsbCE9U1tHXSYmKFJbUi5sZW5ndGhdPVByKCJudW1GbXQiLG51bGwse251bUZtdElkOkcsZm9ybWF0Q29kZTpMcihTW0ddKX0pKX0pLDE9PT1SLmxlbmd0aD8iIjooUltSLmxlbmd0''@;'; put 'put ''aF09IjwvbnVtRm10cz4iLFJbMF09UHIoIm51bUZtdHMiLG51bGwse2NvdW50OlIubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxSLmpvaW4oIiIpKX0oUy5TU0YpKSYmKGtbay5sZW5ndGhdPUcpLGtbay5sZW5ndGhdPWZ1bmN0aW9uIGcyKFMpe3ZhciBSPVtdO3JldHVybiBTLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oayl7dmFyIEc9WyI8Zm9udD4iXTtrLmJvbGQmJkcucHVzaCgiPGIvPiIpLGsuaXRhbGljJiZHLnB1c2goIjxpLz4iKSxrLnN0cmlrZSYmRy5wdXNoKCI8c3RyaWtlLz4iKSxrLnNoYWRvdyYmRy5wdXNoKCI8c2hhZG93Lz4iKSxBZ1sray51bmRlcmxpbmVdJiZHLnB1c2go''@;'; put 'put ''Jzx1IHZhbD0iJytBZ1sray51bmRlcmxpbmVdKyciLz4nKSxrLnN6JiZHLnB1c2goJzxzeiB2YWw9Iicray5zeisnIi8+Jyksay5jb2xvciYmRy5wdXNoKGdkKGsuY29sb3IsITApKSxrLm5hbWUmJkcucHVzaCgnPG5hbWUgdmFsPSInK2submFtZSsnIi8+Jyksay5mYW1pbHkmJkcucHVzaCgn''@;'; put 'put ''PGZhbWlseSB2YWw9Iicray5mYW1pbHkrJyIvPicpLGsuc2NoZW1lJiZHLnB1c2goJzxzY2hlbWUgdmFsPSInK2suc2NoZW1lKyciLz4nKSxrLnZhbGlnbiYmRy5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytrLnZhbGlnbisoInN1YiI9PWsudmFsaWdufHwic3VwZXIiPT1rLnZhbGlnbj8ic2Ny''@;'; put 'put ''aXB0IjoiIikrJyIvPicpLFIucHVzaChHLmpvaW4oIiIpKyI8L2ZvbnQ+Iil9KSwnPGZvbnRzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9mb250cz4ifSgoUy5TdHlsZXN8fHt9KS5Gb250c3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIGdrKFMpe3ZhciBSPVtdO3Jl''@;'; put 'put ''dHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9bnVsbDtpZihrLnN0b3BzJiZrLnN0b3BzLmxlbmd0aCl7dmFyIFE9e307ay5hbmdsZSYmKFEuZGVncmVlPU1hdGgucm91bmQoay5hbmdsZSkpLEc9ay5zdG9wcy5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiBQcigic3RvcCIsZ2Qob2Us''@;'; put 'put ''ImNvbG9yIiwhMCksbnVsbCE9b2Uudj97cG9zaXRpb246b2Uudn06e30pfSksUi5wdXNoKCI8ZmlsbD4iK1ByKCJncmFkaWVudEZpbGwiLEcuam9pbigiIiksUSkrIjwvZmlsbD4iKX1lbHNle2lmKGsuZmdDb2xvcil7aWYoRz0oR3x8IiIpKyI8ZmdDb2xvciAiLGsuZmdDb2xvci50aGVtZSlH''@;'; put 'put ''Kz0ndGhlbWU9Iicray5mZ0NvbG9yLnRoZW1lKyciJysoay5mZ0NvbG9yLnRpbnQ/JyB0aW50PSInK2suZmdDb2xvci50aW50KyciJzoiIikrIi8+IjtlbHNlIGlmKG51bGwhPWsuZmdDb2xvci5pbmRleCYmbnVsbD09ay5mZ0NvbG9yLnJnYilHKz0naW5kZXhlZD0iJytrLmZnQ29sb3IuaW5k''@;'; put 'put ''ZXgrJyIvPic7ZWxzZSBpZihrLmZnQ29sb3IuYXV0bylHKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1rLmZnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrUmUoay5mZ0NvbG9yKS5qb2luKCJ8IikpO0crPSdyZ2I9IkZGJytQMChrLmZnQ29sb3IucmdiKSsnIi8+''@;'; put 'put ''J30ic29saWQiPT1rLnBhdHRlcm5UeXBlJiYhay5iZ0NvbG9yJiYoay5iZ0NvbG9yPXtpbmRleDo2NH0pfWlmKGsuYmdDb2xvcilpZihHPShHfHwiIikrIjxiZ0NvbG9yICIsay5iZ0NvbG9yLnRoZW1lKUcrPSd0aGVtZT0iJytrLmJnQ29sb3IudGhlbWUrJyIvPic7ZWxzZSBpZihudWxsIT1r''@;'; put 'put ''LmJnQ29sb3IuaW5kZXgmJm51bGw9PWsuYmdDb2xvci5yZ2IpRys9J2luZGV4ZWQ9Iicray5iZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoay5iZ0NvbG9yLmF1dG8pRys9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5iZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xv''@;'; put 'put ''ciAiK1JlKGsuYmdDb2xvcikuam9pbigifCIpKTtHKz0ncmdiPSJGRicrUDAoay5iZ0NvbG9yLnJnYikrJyIvPid9Ui5wdXNoKCI8ZmlsbD4iK1ByKCJwYXR0ZXJuRmlsbCIsRyx7cGF0dGVyblR5cGU6ay5wYXR0ZXJuVHlwZX0pKyI8L2ZpbGw+Iil9fSksJzxmaWxscyBjb3VudD0iJytSLmxl''@;'; put 'put ''bmd0aCsnIj4nK1Iuam9pbigiIikrIjwvZmlsbHM+In0oKFMuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBEcyhTKXt2YXIgUj1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPVtdO0cucHVzaChSNChrLmxlZnQsImxlZnQiKSksRy5wdXNo''@;'; put 'put ''KFI0KGsucmlnaHQsInJpZ2h0IikpLEcucHVzaChSNChrLnRvcCwidG9wIikpLEcucHVzaChSNChrLmJvdHRvbSwiYm90dG9tIikpLEcucHVzaChSNChrLmRpYWdvbmFsLCJkaWFnb25hbCIpKSxSLnB1c2goIjxib3JkZXI+IitHLmpvaW4oIiIpKyI8L2JvcmRlcj4iKX0pLCc8Ym9yZGVycyBj''@;'; put 'put ''b3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvYm9yZGVycz4ifSgoUy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gaW5lKFMpe3ZhciBSPVsnPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiLz4n''@;'; put 'put ''XTtpZihTKWZvcih2YXIgaz0xO2s8Uy5sZW5ndGg7KytrKVIucHVzaChQcigieGYiLG51bGwse251bUZtdElkOlNba10ubnVtRm10SWR8fDAsZm9udElkOlNba10uZm9udElkfHwwLGZpbGxJZDpTW2tdLmZpbGxJZHx8MCxib3JkZXJJZDpTW2tdLmJvcmRlcklkfHwwfSkpO3JldHVybic8Y2Vs''@;'; put 'put ''bFN0eWxlWGZzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9jZWxsU3R5bGVYZnM+In0oUi5jZWxsU3R5bGVYZnMpLChHPWZ1bmN0aW9uIG5uZShTKXt2YXIgUj1bXTtyZXR1cm4gUltSLmxlbmd0aF09UHIoImNlbGxYZnMiLG51bGwpLFMuZm9yRWFjaChmdW5jdGlvbihr''@;'; put 'put ''KXt2YXIgRz1rLmFsaWdubWVudDtkZWxldGUgay5hbGlnbm1lbnQ7dmFyIFE9ay5wcm90ZWN0aW9uO2RlbGV0ZSBrLnByb3RlY3Rpb247dmFyIG9lPUc/UHIoImFsaWdubWVudCIsbnVsbCxHKToiIjtvZSs9UT9QcigicHJvdGVjdGlvbiIsbnVsbCx7aGlkZGVuOlEuaGlkZGVuPzE6MCxsb2Nr''@;'; put 'put ''ZWQ6US5lZGl0YWJsZT8wOjF9KToiIixSW1IubGVuZ3RoXT1QcigieGYiLG9lfHxudWxsLGspLEcmJihrLmFsaWdubWVudD1HKSxRJiYoay5wcm90ZWN0aW9uPVEpfSksUltSLmxlbmd0aF09IjwvY2VsbFhmcz4iLDI9PT1SLmxlbmd0aD8iIjooUlswXT1QcigiY2VsbFhmcyIsbnVsbCx7Y291''@;'; put 'put ''bnQ6Ui5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFIuam9pbigiIikpfShSLmNlbGxYZnMpKSYmKGtbay5sZW5ndGhdPUcpLGtbay5sZW5ndGhdPWZ1bmN0aW9uIG9uZShTKXt2YXIgUj1bJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiLz4nXTtp''@;'; put 'put ''ZihTKWZvcih2YXIgaz0xO2s8Uy5sZW5ndGg7KytrKVIucHVzaChQcigiY2VsbFN0eWxlIixudWxsLHtuYW1lOlNba10ubmFtZSx4ZklkOmt9KSk7cmV0dXJuJzxjZWxsU3R5bGVzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9jZWxsU3R5bGVzPiJ9KFIuY2VsbFN0eWxl''@;'; put 'put ''WGZzKSxTLlN0eWxlcy5EWEZ8fChTLlN0eWxlcy5EWEY9W10pO3ZhciBRPWZ1bmN0aW9uIGZkKFMsUixrKXt2YXIgRz1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoU3x8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxl''@;'; put 'put ''PSJQaXZvdFN0eWxlTWVkaXVtNCInXTtyZXR1cm4gUyYmUy5sZW5ndGg/KEdbMF0rPSI+IixTLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGZ1bmN0aW9uIENDKFMsUixrKXt2YXIgRz1bXTtbIndob2xlVGFibGUiLCJoZWFkZXJSb3ciLCJ0b3RhbFJvdyIsImZpcnN0Q29sdW1uIiwibGFz''@;'; put 'put ''dENvbHVtbiIsImZpcnN0Um93U3RyaXBlIiwic2Vjb25kUm93U3RyaXBlIiwiZmlyc3RDb2x1bW5TdHJpcGUiLCJzZWNvbmRDb2x1bW5TdHJpcGUiLCJmaXJzdEhlYWRlckNlbGwiLCJsYXN0SGVhZGVyQ2VsbCIsImZpcnN0VG90YWxDZWxsIiwibGFzdFRvdGFsQ2VsbCIsImZpcnN0U3VidG90''@;'; put 'put ''YWxDb2x1bW4iLCJzZWNvbmRTdWJ0b3RhbENvbHVtbiIsInRoaXJkU3VidG90YWxDb2x1bW4iLCJmaXJzdFN1YnRvdGFsUm93Iiwic2Vjb25kU3VidG90YWxSb3ciLCJ0aGlyZFN1YnRvdGFsUm93IiwiYmxhbmtSb3ciLCJmaXJzdENvbHVtblN1YmhlYWRpbmciLCJzZWNvbmRDb2x1bW5TdWJo''@;'; put 'put ''ZWFkaW5nIiwidGhpcmRDb2x1bW5TdWJoZWFkaW5nIiwiZmlyc3RSb3dTdWJoZWFkaW5nIiwic2Vjb25kUm93U3ViaGVhZGluZyIsInRoaXJkUm93U3ViaGVhZGluZyIsInBhZ2VGaWVsZExhYmVscyIsInBhZ2VGaWVsZFZhbHVlcyJdLmZvckVhY2goZnVuY3Rpb24ob2Upe2lmKFNbb2VdKXt2''@;'; put 'put ''YXIgZ2U9bFMoUixTW29lXSk7Ry5wdXNoKCc8dGFibGVTdHlsZUVsZW1lbnQgZHhmSWQ9IicrZ2UrJyIgdHlwZT0iJytvZSsnIi8+Jyl9fSk7dmFyIFE9Jzx0YWJsZVN0eWxlIGNvdW50PSInK0cubGVuZ3RoKyciIHBpdm90PSInKyArISFTLnBpdm90KyciIG5hbWU9IicrUy5uYW1lKyciJzty''@;'; put 'put ''ZXR1cm4gRy5sZW5ndGg/USsiPiIrRy5qb2luKCIiKSsiPC90YWJsZVN0eWxlPiI6USsiLz4ifShRLFIpKX0pLEcuam9pbigiIikrIjwvdGFibGVTdHlsZXM+Iik6R1swXSsiLz4ifSgoUy5TdHlsZXN8fHt9KS5UYWJsZXx8W10sUy5TdHlsZXMuRFhGKTtyZXR1cm4ga1trLmxlbmd0aF09ZnVu''@;'; put 'put ''Y3Rpb24galYoUyxSKXtpZighUy5sZW5ndGgpcmV0dXJuJzxkeGZzIGNvdW50PSIwIi8+Jzt2YXIgaz1bJzxkeGZzIGNvdW50PSInK1MubGVuZ3RoKyciPiddO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oRyl7ay5wdXNoKGZ1bmN0aW9uIGU4KFMsUil7dmFyIGs9e2JvbGQ6ImIiLGl0YWxp''@;'; put 'put ''YzoiaSIsdmFsaWduOiJ2ZXJ0QWxpZ24ifSxHPVsiPGR4Zj4iXSxRPVtdLG9lPVtdLGdlPVtdLHllPVtdO3JldHVybiBSZShTKS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2FzZSJj''@;'; put 'put ''b2xvciI6Y2FzZSJ2YWxpZ24iOmNhc2Uic3oiOmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFyc2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjpRLnB1c2goTmUpO2JyZWFrO2Nhc2UiYmdDb2xvciI6''@;'; put 'put ''Y2FzZSJmZ0NvbG9yIjpnZS5wdXNoKE5lKTticmVhaztjYXNlInoiOm9lLnB1c2goTmUpO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImRpYWdvbmFsIjpjYXNlInZlcnRpY2FsIjpjYXNlImhvcml6b250YWwiOnllLnB1c2goTmUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UicGF0dGVyblR5cGUiOmNhc2UiZGlhZ29uYWxEb3duIjpjYXNlImRpYWdvbmFsVXAiOmNhc2Uic3RvcHMiOmNhc2UiZGVncmVlIjpicmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCAiK05lKyIgaW4gRFhGIn19KSxRLmxlbmd0aD4wJiYoRy5wdXNoKCI8Zm9udD4iKSxR''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oTmUpe3N3aXRjaChOZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpHLnB1c2goIjwiKyhrW05lXXx8TmUpKycgdmFsPSInKyhTW05lXT8i''@;'; put 'put ''MSI6IjAiKSsnIi8+Jyk7YnJlYWs7Y2FzZSJjb2xvciI6Ry5wdXNoKGdkKFNbTmVdLE5lLCEwKSk7YnJlYWs7Y2FzZSJmYW1pbHkiOmNhc2UibmFtZSI6Y2FzZSJzeiI6Y2FzZSJzY2hlbWUiOkcucHVzaCgiPCIrKGtbTmVdfHxOZSkrJyB2YWw9IicrU1tOZV0rJyIvPicpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''dW5kZXJsaW5lIjpHLnB1c2goJzx1IHZhbD0iJytBZ1tTW05lXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFsaWduIjpHLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK1MudmFsaWduKygic3ViIj09Uy52YWxpZ258fCJzdXBlciI9PVMudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK05lKyIgOiBmb250IERYRiJ9fSksRy5wdXNoKCI8L2ZvbnQ+IikpLG9lLmxlbmd0aD4wJiZHLnB1c2goJzxudW1GbXQgZm9ybWF0Q29kZT0iJytMcihTLnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIHNTKFMsUil7aWYoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBTKXJldHVybiBTO3ZhciBrPVIucmV2c3NmW1M/PyJHZW5lcmFsIl0sRz02MDtpZihudWxsPT1rKWZvcig7RzwzOTI7KytHKWlmKG51bGw9PVIuc3NmW0ddKXJldHVybiBBLmxvYWQoUyxHKSxSLnNzZltHXT1TLFIucmV2c3NmW1NdPUcsRztyZXR1cm4ga30oUy56LFIpKyciLz4nKSxn''@;'; put 'put ''ZS5sZW5ndGg+MCYmKEcucHVzaCgiPGZpbGw+IiksRy5wdXNoKCI8cGF0dGVybkZpbGwiKyhTLnBhdHRlcm5UeXBlPycgcGF0dGVyblR5cGU9IicrUy5wYXR0ZXJuVHlwZSsnIj4nOiI+IikpLGdlLmZvckVhY2goZnVuY3Rpb24oTmUpe3N3aXRjaChOZSl7Y2FzZSJwYXR0ZXJuVHlwZSI6YnJl''@;'; put 'put ''YWs7Y2FzZSJmZ0NvbG9yIjpjYXNlImJnQ29sb3IiOkcucHVzaChnZChTW05lXSxOZSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitOZSsiIDogZmlsbCBEWEYifX0pLEcucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxHLnB1c2goIjwvZmlsbD4iKSkseWUubGVuZ3RoPjA/''@;'; put 'put ''KEcucHVzaChbIjxib3JkZXIiLG51bGwhPVMuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISFTLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Uy5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEhUy5kaWFnb25hbFVwKyciJzoiIiwiPiJdLmpvaW4oIiIpKSx5ZS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKE5lKXtHLnB1c2goUjQoU1tOZV0sTmUpKX0pLEcucHVzaCgiPC9ib3JkZXI+IikpOihudWxsIT1TLmRpYWdvbmFsRG93bnx8bnVsbCE9Uy5kaWFnb25hbFVwKSYmRy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICsh''@;'; put 'put ''IVMuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFTLmRpYWdvbmFsVXArJyInOiIiLCIvPiJdLmpvaW4oIiIpKSwxPT1HLmxlbmd0aD8iPGR4Zi8+IjpHLmpvaW4oIiIpKyI8L2R4Zj4ifShHLFIpKX0pLGsuam9pbigiIikrIjwvZHhm''@;'; put 'put ''cz4ifShTLlN0eWxlcy5EWEYsUiksa1trLmxlbmd0aF09USxrLmxlbmd0aD4yJiYoa1trLmxlbmd0aF09Ijwvc3R5bGVTaGVldD4iLGtbMV09a1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksay5qb2luKCIiKX1mdW5jdGlvbiBTQyhTLFIsayl7a3x8KGs9Ym4oNis0KlIubGVuZ3RoKSksay53cml0''@;'; put 'put ''ZV9zaGlmdCgyLFMpLEZjKFIsayk7dmFyIEc9ay5sZW5ndGg+ay5sP2suc2xpY2UoMCxrLmwpOms7cmV0dXJuIG51bGw9PWsubCYmKGsubD1rLmxlbmd0aCksR31mdW5jdGlvbiBaVihTKXtyZXR1cm57Y29sb3I6UWgoUykscG9zOlBsKFMpfX1LYS5TVFk9Imh0dHA6Ly9zY2hlbWFzLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIjt2YXIgTUM9WyJub25lIiwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1Vw''@;'; put 'put ''IiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il0sV1Y9VmUoTUMpLERnPVsiZ2VuZXJhbCIsImxlZnQiLCJj''@;'; put 'put ''ZW50ZXIiLCJyaWdodCIsImZpbGwiLCJqdXN0aWZ5IiwiY2VudGVyQ29udGludW91cyIsImRpc3RyaWJ1dGVkIl0sdDg9WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iLCJqdXN0aWZ5IiwiZGlzdHJpYnV0ZWQiXTtmdW5jdGlvbiBCdShTLFIsayl7a3x8KGs9Ym4oMTYpKSxrLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsUnx8MCksay53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZvbnRJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuZmlsbElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5ib3JkZXJJZHx8MCksay53cml0ZV9zaGlmdCgxLFMuYWxpZ25tZW50JiZTLmFsaWdu''@;'; put 'put ''bWVudC50ZXh0Um90YXRpb258fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdubWVudCYmUy5hbGlnbm1lbnQuaW5kZW50fHwwKTt2YXIgRz0wLFE9MDtpZihTLmFsaWdubWVudCl7aWYoUy5hbGlnbm1lbnQuaG9yaXpvbnRhbCl7dmFyIG9lPURnLmluZGV4T2YoUy5hbGlnbm1lbnQuaG9yaXpv''@;'; put 'put ''bnRhbCk7b2U8MCYmKG9lPTApLEd8PW9lfWlmKFMuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIgZ2U9dDguaW5kZXhPZihTLmFsaWdubWVudC52ZXJ0aWNhbCk7Z2U8MCYmKGdlPTIpLEd8PWdlPDwzfVMuYWxpZ25tZW50LndyYXBUZXh0JiYoR3w9NjQpLFMuYWxpZ25tZW50LnNocmlua1RvRml0''@;'; put 'put ''JiYoUXw9MSl9cmV0dXJuIGsud3JpdGVfc2hpZnQoMSxHKSxrLndyaXRlX3NoaWZ0KDEsUSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrfXZhciBwZD1bIm5vbmUiLCJ0aGluIiwibWVkaXVtIiwiZGFzaGVkIiwiZG90dGVkIiwidGhpY2siLCJkb3VibGUiLCJoYWly''@;'; put 'put ''IiwibWVkaXVtRGFzaGVkIiwiZGFzaERvdCIsIm1lZGl1bURhc2hEb3QiLCJkYXNoRG90RG90IiwibWVkaXVtRGFzaERvdERvdCIsInNsYW50RGFzaERvdCJdO2Z1bmN0aW9uIElnKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtTLmwrPTE7dmFyIGs9UWgoUyk7cmV0dXJue3N0eWxlOnBkW1Jd''@;'; put 'put ''LGNvbG9yOmt9fWZ1bmN0aW9uIFJnKFMsUil7cmV0dXJuIFJ8fChSPWJuKDEwKSksUyYmUy5zdHlsZSYmIiIhPVMuc3R5bGUmJiJub25lIiE9Uy5zdHlsZSYmLTEhPT1wZC5pbmRleE9mKFMuc3R5bGUpPyhSLndyaXRlX3NoaWZ0KDEscGQuaW5kZXhPZihTLnN0eWxlKSksUi53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDApLFMuY29sb3I/bWYoUy5jb2xvcixSKTooUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSkpOihSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCkpLFJ9ZnVuY3Rpb24gQ2soUyxS''@;'; put 'put ''KXtyZXR1cm4gUnx8KFI9Ym4oNTIpKSxSLndyaXRlX3NoaWZ0KDQsUy54ZklkKSxSLndyaXRlX3NoaWZ0KDIsMSksUi53cml0ZV9zaGlmdCgxLCtTLmJ1aWx0aW5JZCksUi53cml0ZV9zaGlmdCgxLDApLHBmKFMubmFtZXx8IiIsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9ZnVu''@;'; put 'put ''Y3Rpb24gV3YoUyxSKXshUnx8IVIudGhlbWVFbGVtZW50c3x8IVIudGhlbWVFbGVtZW50cy5jbHJTY2hlbWV8fG51bGwhPVMudGhlbWUmJihTLnJnYj1TZyhSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1MudGhlbWVdLnJnYixTLnRpbnR8fDApKX1mdW5jdGlvbiBrayhTLFIpe3ZhciBrPWJp''@;'; put 'put ''KCk7cmV0dXJuIEZyKGssIkJydEJlZ2luU3R5bGVTaGVldCIpLGZ1bmN0aW9uICRWKFMsUil7aWYoUil7dmFyIGs9MDtbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT1HWzBdO1E8PUdbMV07KytRKW51bGwhPVJbUV0mJisra30p''@;'; put 'put ''LDAhPWsmJihGcihTLCJCcnRCZWdpbkZtdHMiLEswKGspKSxbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT1HWzBdO1E8PUdbMV07KytRKW51bGwhPVJbUV0mJkZyKFMsIkJydEZtdCIsU0MoUSxSW1FdKSl9KSxGcihTLCJCcnRF''@;'; put 'put ''bmRGbXRzIikpfX0oayxTLlNTRiksZnVuY3Rpb24gS1YoUyxSKXt2YXIgaz1SLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0QmVnaW5Gb250cyIsSzAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtGcihTLCJCcnRGb250IixmdW5jdGlvbiBVVihTLFIpe1J8fChSPWJuKDE1MykpLFIud3JpdGVf''@;'; put 'put ''c2hpZnQoMiwyMCpTLnN6KSxmdW5jdGlvbiB1dihTLFIpe1J8fChSPWJuKDIpKSxSLndyaXRlX3NoaWZ0KDEsKFMuaXRhbGljPzI6MCl8KFMuc3RyaWtlPzg6MCl8KFMub3V0bGluZT8xNjowKXwoUy5zaGFkb3c/MzI6MCl8KFMuY29uZGVuc2U/NjQ6MCl8KFMuZXh0ZW5kPzEyODowKSksUi53''@;'; put 'put ''cml0ZV9zaGlmdCgxLDApfShTLFIpLFIud3JpdGVfc2hpZnQoMixTLmJvbGQ/NzAwOjQwMCk7dmFyIGs9MDsic3VwZXIiPT1TLnZhbGlnbj9rPTE6InN1YiI9PVMudmFsaWduJiYoaz0yKSxSLndyaXRlX3NoaWZ0KDIsayksUi53cml0ZV9zaGlmdCgxLFMudW5kZXJsaW5lfHwwKSxSLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsUy5mYW1pbHl8fDApLFIud3JpdGVfc2hpZnQoMSxTLmNoYXJzZXR8fDApLFIud3JpdGVfc2hpZnQoMSwwKSxtZihTLmNvbG9yLFIpO3ZhciBHPTA7cmV0dXJuIm1ham9yIj09Uy5zY2hlbWUmJihHPTEpLCJtaW5vciI9PVMuc2NoZW1lJiYoRz0yKSxSLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''RyksRmMoUy5uYW1lLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShHKSl9KSxGcihTLCJCcnRFbmRGb250cyIpKX0oaywoUy5TdHlsZXN8fHt9KS5Gb250c3x8W10pLGZ1bmN0aW9uIHFWKFMsUil7dmFyIGs9Ui5sZW5ndGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luRmlsbHMiLEsw''@;'; put 'put ''KGspKSxSLmZvckVhY2goZnVuY3Rpb24oRyl7RnIoUywiQnJ0RmlsbCIsZnVuY3Rpb24gZTEoUyxSKXtSfHwoUj1ibig4NCkpO3ZhciBrPVdWW1MucGF0dGVyblR5cGVdO251bGw9PWsmJihrPTQwKSxSLndyaXRlX3NoaWZ0KDQsaz0rayk7dmFyIEc9MDtpZig0MCE9aylmb3IobWYoUy5mZ0Nv''@;'; put 'put ''bG9yfHx7aW5kZXg6NjR9LFIpLG1mKFMuYmdDb2xvcnx8e2luZGV4OjY1fSxSKTtHPDEyOysrRylSLndyaXRlX3NoaWZ0KDQsMCk7ZWxzZXtmb3IoO0c8NDsrK0cpUi53cml0ZV9zaGlmdCg0LDApO2Zvcig7RzwxMjsrK0cpUi53cml0ZV9zaGlmdCg0LDApfXJldHVybiBSLmxlbmd0aD5SLmw/''@;'; put 'put ''Ui5zbGljZSgwLFIubCk6Un0oRykpfSksRnIoUywiQnJ0RW5kRmlsbHMiKSl9KGssKFMuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxmdW5jdGlvbiBYVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdpbkJvcmRlcnMiLEswKGspKSxSLmZvckVhY2goZnVuY3Rpb24oRyl7''@;'; put 'put ''RnIoUywiQnJ0Qm9yZGVyIixmdW5jdGlvbiB3ayhTLFIpe3JldHVybiBSfHwoUj1ibig1MSkpLFIud3JpdGVfc2hpZnQoMSwwKSxSZyhTLnRvcCxSKSxSZyhTLmJvdHRvbSxSKSxSZyhTLmxlZnQsUiksUmcoUy5yaWdodCxSKSxSZyhudWxsLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5s''@;'; put 'put ''KTpSfShHKSl9KSxGcihTLCJCcnRFbmRCb3JkZXJzIikpfShrLChTLlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxmdW5jdGlvbiB4ayhTLFIpe3ZhciBrPTE7aWYoUiYmKGs9Ui5sZW5ndGgpLEZyKFMsIkJydEJlZ2luQ2VsbFN0eWxlWEZzIixLMChrKSksRnIoUywiQnJ0WEYiLEJ1KHtudW1G''@;'; put 'put ''bXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjB9LDY1NTM1KSksUilmb3IodmFyIEc9MTtHPFIubGVuZ3RoOysrRylGcihTLCJCcnRYRiIsQnUoe251bUZtdElkOlJbR10ubnVtRm10SWR8fDAsZm9udElkOlJbR10uZm9udElkfHwwLGZpbGxJZDpSW0ddLmZpbGxJZHx8MCxib3Jk''@;'; put 'put ''ZXJJZDpSW0ddLmJvcmRlcklkfHwwfSw2NTUzNSkpO0ZyKFMsIkJydEVuZENlbGxTdHlsZVhGcyIpfShrLFIuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBFayhTLFIpe0ZyKFMsIkJydEJlZ2luQ2VsbFhGcyIsSzAoUi5sZW5ndGgpKSxSLmZvckVhY2goZnVuY3Rpb24oayl7RnIoUywiQnJ0WEYi''@;'; put 'put ''LEJ1KGssMCkpfSksRnIoUywiQnJ0RW5kQ2VsbFhGcyIpfShrLFIuY2VsbFhmcyksZnVuY3Rpb24gVGsoUyxSKXt2YXIgaz0xO2lmKFImJihrPVIubGVuZ3RoKSxGcihTLCJCcnRCZWdpblN0eWxlcyIsSzAoaykpLEZyKFMsIkJydFN0eWxlIixDayh7eGZJZDowLGJ1aWx0aW5JZDowLG5hbWU6''@;'; put 'put ''Ik5vcm1hbCJ9KSksUilmb3IodmFyIEc9MTtHPFIubGVuZ3RoOysrRylGcihTLCJCcnRTdHlsZSIsQ2soe3hmSWQ6RyxidWlsdGluSWQ6MCxuYW1lOlJbR10ubmFtZX0pKTtGcihTLCJCcnRFbmRTdHlsZXMiKX0oayxSLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24gWXYoUyl7RnIoUywiQnJ0QmVn''@;'; put 'put ''aW5EWEZzIixLMCgwKSksRnIoUywiQnJ0RW5kRFhGcyIpfShrKSxmdW5jdGlvbiBBayhTKXtGcihTLCJCcnRCZWdpblRhYmxlU3R5bGVzIixmdW5jdGlvbiBTayhTLFIsayl7dmFyIEc9Ym4oMjA1Mik7cmV0dXJuIEcud3JpdGVfc2hpZnQoNCxTKSxwZihSLEcpLHBmKGssRyksRy5sZW5ndGg+''@;'; put 'put ''Ry5sP0cuc2xpY2UoMCxHLmwpOkd9KDAsIlRhYmxlU3R5bGVNZWRpdW05IiwiUGl2b3RTdHlsZU1lZGl1bTQiKSksRnIoUywiQnJ0RW5kVGFibGVTdHlsZXMiKX0oayksRnIoaywiQnJ0RW5kU3R5bGVTaGVldCIpLGsuZW5kKCl9S2EuVEhFTUU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt''@;'; put 'put ''YXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGhlbWUiO3ZhciBEaz1bIjwvYTpsdDE+IiwiPC9hOmRrMT4iLCI8L2E6bHQyPiIsIjwvYTpkazI+IiwiPC9hOmFjY2VudDE+IiwiPC9hOmFjY2VudDI+IiwiPC9hOmFjY2VudDM+IiwiPC9hOmFjY2VudDQ+IiwiPC9h''@;'; put 'put ''OmFjY2VudDU+IiwiPC9hOmFjY2VudDY+IiwiPC9hOmhsaW5rPiIsIjwvYTpmb2xIbGluaz4iXTtmdW5jdGlvbiBRVihTLFIsayl7Ui50aGVtZUVsZW1lbnRzLmNsclNjaGVtZT1bXTt2YXIgRz17fTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT12cihR''@;'; put 'put ''KTtzd2l0Y2gob2VbMF0pe2Nhc2UiPGE6Y2xyU2NoZW1lIjpjYXNlIjwvYTpjbHJTY2hlbWU+IjpjYXNlIjwvYTpzcmdiQ2xyPiI6Y2FzZSI8L2E6c3lzQ2xyPiI6YnJlYWs7Y2FzZSI8YTpzcmdiQ2xyIjpHLnJnYj1vZS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOkcucmdiPW9lLmxhc3RD''@;'; put 'put ''bHI7YnJlYWs7Y2FzZSI8YTpkazE+IjpjYXNlIjwvYTpkazE+IjpjYXNlIjxhOmx0MT4iOmNhc2UiPC9hOmx0MT4iOmNhc2UiPGE6ZGsyPiI6Y2FzZSI8L2E6ZGsyPiI6Y2FzZSI8YTpsdDI+IjpjYXNlIjwvYTpsdDI+IjpjYXNlIjxhOmFjY2VudDE+IjpjYXNlIjwvYTphY2NlbnQxPiI6Y2Fz''@;'; put 'put ''ZSI8YTphY2NlbnQyPiI6Y2FzZSI8L2E6YWNjZW50Mj4iOmNhc2UiPGE6YWNjZW50Mz4iOmNhc2UiPC9hOmFjY2VudDM+IjpjYXNlIjxhOmFjY2VudDQ+IjpjYXNlIjwvYTphY2NlbnQ0PiI6Y2FzZSI8YTphY2NlbnQ1PiI6Y2FzZSI8L2E6YWNjZW50NT4iOmNhc2UiPGE6YWNjZW50Nj4iOmNh''@;'; put 'put ''c2UiPC9hOmFjY2VudDY+IjpjYXNlIjxhOmhsaW5rPiI6Y2FzZSI8L2E6aGxpbms+IjpjYXNlIjxhOmZvbEhsaW5rPiI6Y2FzZSI8L2E6Zm9sSGxpbms+IjoiLyI9PT1vZVswXS5jaGFyQXQoMSk/KFIudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRGsuaW5kZXhPZihvZVswXSldPUcsRz17fSk6''@;'; put 'put ''Ry5uYW1lPW9lWzBdLnNsaWNlKDMsb2VbMF0ubGVuZ3RoLTEpO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgIitvZVswXSsiIGluIGNsclNjaGVtZSIpfX0pfWZ1bmN0aW9uIGVCKCl7fWZ1bmN0aW9uIHRCKCl7fXZhciBuQj0vPGE6Y2xy''@;'; put 'put ''U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxJaz0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLHNuZT0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxyQj0vPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+''@;'; put 'put ''W1xzXFNdKjxcL2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIEVDKFMsUil7aWYoIVN8fDA9PT1TLmxlbmd0aClyZXR1cm4gRUMoaUIoKSk7dmFyIGssRz17fTtpZighKGs9Uy5tYXRjaChyQikpKXRocm93IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gUmsoUyxSLGspe3ZhciBHO1IudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLG5CLFFWXSxbImZvbnRTY2hlbWUiLElrLGVCXSxbImZtdFNjaGVtZSIsc25lLHRCXV0uZm9yRWFjaChmdW5jdGlvbihRKXtpZighKEc9Uy5tYXRjaChRWzFdKSkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKFFbMF0rIiBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cyIpO1FbMl0oRyxSLGspfSl9KGtbMF0sRyxSKSxHLnJhdz1TLEd9ZnVuY3Rpb24gaUIoUyxSKXtpZihSJiZSLnRoZW1lWExTWClyZXR1cm4gUi50aGVtZVhMU1g7aWYoUyYmInN0cmluZyI9PXR5cGVvZiBTLnJhdylyZXR1''@;'; put 'put ''cm4gUy5yYXc7dmFyIGs9W0lpXTtyZXR1cm4ga1trLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsa1trLmxlbmd0aF09IjxhOnRoZW1lRWxlbWVudHM+''@;'; put 'put ''IixrW2subGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxrW2subGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFz''@;'; put 'put ''dENscj0iRkZGRkZGIi8+PC9hOmx0MT4nLGtbay5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxrW2subGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsa1trLmxlbmd0aF09JzxhOmFjY2VudDE+PGE6c3Jn''@;'; put 'put ''YkNsciB2YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsa1trLmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsa1trLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQzPicsa1trLmxl''@;'; put 'put ''bmd0aF09JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0Picsa1trLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1Picsa1trLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9IkY3OTY0''@;'; put 'put ''NiIvPjwvYTphY2NlbnQ2Picsa1trLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxrW2subGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLGtbay5sZW5ndGhdPSI8L2E6Y2xyU2No''@;'; put 'put ''ZW1lPiIsa1trLmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixrW2subGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLGtbay5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3Ro''@;'; put 'put ''XT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHVi''@;'; put 'put ''OWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLGtb''@;'; put 'put ''ay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5''@;'; put 'put ''cGVmYWNlPSJUYWhvbWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIg''@;'; put 'put ''dHlwZWZhY2U9IlNocnV0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJH''@;'; put 'put ''dXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsa1trLmxlbmd0aF09''@;'; put 'put ''JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZh''@;'; put 'put ''Y2U9Ik1WIEJvbGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0''@;'; put 'put ''eXBlZmFjZT0iTGF0aGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9''@;'; put 'put ''Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLGtbay5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsa1trLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLGtbay5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFj''@;'; put 'put ''ZT0iQ2FsaWJyaSIvPicsa1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMz''@;'; put 'put ''XHUzMGFmIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLGtbay5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEi''@;'; put 'put ''Lz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1''@;'; put 'put ''bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9''@;'; put 'put ''IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsa1tr''@;'; put 'put ''Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZh''@;'; put 'put ''Y2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5o''@;'; put 'put ''IiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxrW2subGVuZ3RoXT0nPGE6''@;'; put 'put ''Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxrW2subGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLGtbay5sZW5ndGhdPSI8L2E6Zm9udFNjaGVtZT4i''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8YTpncmFkRmls''@;'; put 'put ''bCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPics''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1l''@;'; put 'put ''Q2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+JyxrW2subGVu''@;'; put 'put ''Z3RoXT0iPC9hOmdyYWRGaWxsPiIsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEwMDAwMCIvPjxh''@;'; put 'put ''OnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAw''@;'; put 'put ''MCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsa1trLmxlbmd0aF09''@;'; put 'put ''IjwvYTpmaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUw''@;'; put 'put ''MDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxs''@;'; put 'put ''PjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZh''@;'; put 'put ''bD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0i''@;'; put 'put ''PGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91''@;'; put 'put ''dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQw''@;'; put 'put ''MDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0i''@;'; put 'put ''PC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6''@;'; put 'put ''c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+PGE6cm90''@;'; put 'put ''IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLGtbay5sZW5ndGhdPSc8YTpzcDNkPjxhOmJldmVs''@;'; put 'put ''VCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hl''@;'; put 'put ''bWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZh''@;'; put 'put ''bD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1v''@;'; put 'put ''ZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPics''@;'; put 'put ''a1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVt''@;'; put 'put ''ZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIs''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxrW2subGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsa1trLmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHlsZUxzdD4iLGtb''@;'; put 'put ''ay5sZW5ndGhdPSI8L2E6Zm10U2NoZW1lPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsa1trLmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsa1trLmxlbmd0aF09IjxhOnNwRGVmPiIsa1trLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxh''@;'; put 'put ''OnN0eWxlPjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2Vu''@;'; put 'put ''dDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsa1trLmxlbmd0aF09IjwvYTpzcERlZj4iLGtbay5sZW5ndGhdPSI8YTpsbkRlZj4iLGtbay5sZW5ndGhdPSc8YTpzcFByLz48YTpi''@;'; put 'put ''b2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48''@;'; put 'put ''YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLGtbay5sZW5ndGhdPSI8L2E6bG5EZWY+IixrW2subGVuZ3RoXT0iPC9hOm9iamVjdERlZmF1''@;'; put 'put ''bHRzPiIsa1trLmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLGtbay5sZW5ndGhdPSI8L2E6dGhlbWU+IixrLmpvaW4oIiIpfWZ1bmN0aW9uIEd2KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKS00LEc9W1JdO3N3aXRjaChSKXtjYXNlIDQ6Y2FzZSA1''@;'; put 'put ''OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOkdbMV09ZnVuY3Rpb24gVEMoUyl7dmFyIFI9e307c3dpdGNoKFIueGNsclR5cGU9Uy5yZWFkX3NoaWZ0KDIpLFIublRpbnRTaGFkZT1TLnJlYWRfc2hpZnQoMiksUi54Y2xyVHlwZSl7Y2FzZSAwOmNhc2UgNDpT''@;'; put 'put ''LmwrPTQ7YnJlYWs7Y2FzZSAxOlIueGNsclZhbHVlPWZ1bmN0aW9uIG9CKFMsUil7cmV0dXJuIEluKFMsUil9KFMsNCk7YnJlYWs7Y2FzZSAyOlIueGNsclZhbHVlPU1mKFMpO2JyZWFrO2Nhc2UgMzpSLnhjbHJWYWx1ZT1mdW5jdGlvbiBMayhTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpfShT''@;'; put 'put ''KX1yZXR1cm4gUy5sKz04LFJ9KFMpO2JyZWFrO2Nhc2UgNjpHWzFdPWZ1bmN0aW9uIFkzKFMsUil7cmV0dXJuIEluKFMsUil9KFMsayk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OkdbMV09Uy5yZWFkX3NoaWZ0KDE9PT1rPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVj''@;'; put 'put ''b2duaXplZCBFeHRQcm9wIHR5cGU6ICIrUisiICIrayl9cmV0dXJuIEd9ZnVuY3Rpb24gT2soUyxSKXtSLmZvckVhY2goZnVuY3Rpb24oayl7c3dpdGNoKGtbMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDE0OmNhc2Ug''@;'; put 'put ''MTU6YnJlYWs7Y2FzZSAxMzpTLmZvbnQmJlMuZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShrWzFdLnhjbHJWYWx1ZSkmJihTLmZvbnQuY29sb3IucmdiPWhkKGtbMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gaW8oUyl7cmV0dXJuIFMvOTE0NDAwKkRmfWZ1bmN0aW9uIFBrKFMsUil7dmFy''@;'; put 'put ''IGs9e307aWYoUy5wb3Mpay54PWlvKFMucG9zLngpLGsueT1pbyhTLnBvcy55KTtlbHNle2lmKCFTLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7ay5yPVMuZnJvbS5yfHwwLGsuYz1TLmZyb20uY3x8MCxTLmZyb20uY09mZiYmKGsueD1pbyhTLmZyb20uY09mZikpLFMuZnJvbS5yT2Zm''@;'; put 'put ''JiYoay55PWlvKFMuZnJvbS5yT2ZmKSl9aWYoUy5leHQpay53PWlvKFMuZXh0LngpLGsuaD1pbyhTLmV4dC55KTtlbHNle2lmKCFTLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtrLkM9Uy50by5jLGsuUj1TLnRvLnIsUy50by5jT2ZmJiYoay5YPWlvKFMudG8uY09mZikpLFMudG8uck9mZiYm''@;'; put 'put ''KGsuWT1pbyhTLnRvLnJPZmYpKX1yZXR1cm4ga31mdW5jdGlvbiBMZyhTLFIpe3ZhciBrPXt4Oi0xLHk6LTEsdzotMSxoOi0xfTtpZihTLnBvcylrLng9aW8oUy5wb3MueCksay55PWlvKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtrLng9T2coUixT''@;'; put 'put ''LmZyb20uYywiQyIpK2lvKFMuZnJvbS5jT2ZmKSxrLnk9T2coUixTLmZyb20uciwiUiIpK2lvKFMuZnJvbS5yT2ZmKX1pZihTLmV4dClrLnc9aW8oUy5leHQueCksay5oPWlvKFMuZXh0LnkpO2Vsc2V7aWYoIVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2sudz1PZyhSLFMudG8uYywiQyIp''@;'; put 'put ''K2lvKFMudG8uY09mZiktay54LGsuaD1PZyhSLFMudG8uciwiUiIpK2lvKFMudG8uck9mZiktay55fXJldHVybiBrfWZ1bmN0aW9uIEFDKFMsUil7dmFyIGs9e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKFMudHlwZSl7Y2FzZSJ0d29DZWxsQW5jaG9y''@;'; put 'put ''IjprLnI9Uy5mcm9tLnIsay55PWlvKFMuZnJvbS5yT2ZmKSxrLlI9Uy50by5yLGsuWT1pbyhTLnRvLnJPZmYpLGsuYz1TLmZyb20uYyxrLng9aW8oUy5mcm9tLmNPZmYpLGsuQz1TLnRvLmMsay5YPWlvKFMudG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5jaG9yIjprLnI9Uy5mcm9tLnIs''@;'; put 'put ''ay55PWlvKFMuZnJvbS5yT2ZmKTt2YXIgRz1SZihSLGsucixrLnkraW8oUy5leHQueSkpO2suUj1HWzBdLGsuWT1HWzFdLGsuYz1TLmZyb20uYyxrLng9aW8oUy5mcm9tLmNPZmYpO3ZhciBRPUczKFIsay5jLGsueCtpbyhTLmV4dC54KSk7ay5DPVFbMF0say5YPVFbMV07YnJlYWs7Y2FzZSJh''@;'; put 'put ''YnNvbHV0ZUFuY2hvciI6dmFyIG9lPVJmKFIsMCxpbyhTLnBvcy55KSk7ay5yPW9lWzBdLGsueT1vZVsxXTt2YXIgZ2U9UmYoUixrLnIsay55K2lvKFMuZXh0LnkpKTtrLlI9Z2VbMF0say5ZPWdlWzFdO3ZhciBwZT1SZihSLDAsaW8oUy5wb3MueCkpO2suYz1wZVswXSxrLng9cGVbMV07dmFy''@;'; put 'put ''IHllPVJmKFIsay5jLGsueCtpbyhTLmV4dC54KSk7ay5DPXllWzBdLGsuWD15ZVsxXTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3IgdHlwZSAiK1MudHlwZX1yZXR1cm4ga31mdW5jdGlvbiBGayhTLFIpe3ZhciBrPVMudHJpbSgpLnNwbGl0KC9ccyosXHMqLyk7UlsiIXBvcyJdPXtj''@;'; put 'put ''OitrWzBdLHg6K2tbMV0scjora1syXSx5OitrWzNdLEM6K2tbNF0sWDora1s1XSxSOitrWzZdLFk6K2tbN119fWZ1bmN0aW9uIGxCKFMsUixrKXt2YXIgRz0tMTtpZihudWxsIT1TLlJ8fG51bGwhPVMuQylHPTA7ZWxzZXtpZihudWxsPT1TLnh8fG51bGw9PVMueXx8bnVsbD09Uy53fHxudWxs''@;'; put 'put ''PT1TLmgpdGhyb3ciY2Fubm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KFMpO0c9MSsyKiEoUy5jfHxTLnIpfWlmKEchPVIpe3N3aXRjaChSKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPUcpYnJlYWs7dmFyIFE9RzMoayxTLmN8fDAsUy54fHwwKTtTLmM9UVswXSxTLng9UVsxXTt2YXIg''@;'; put 'put ''b2U9UmYoayxTLnJ8fDAsUy55fHwwKTtTLnI9b2VbMF0sUy55PW9lWzFdO2JyZWFrO2Nhc2UgMzppZigzPT1HKWJyZWFrO3ZhciBnZT1TLmN8fDAscGU9Uy54fHwwO2RlbGV0ZSBTLmMsZGVsZXRlIFMueCxTLng9KGdlPyR2KGssZ2UpOjApK3BlO3ZhciB5ZT1TLnJ8fDAsUGU9Uy55fHwwO2Rl''@;'; put 'put ''bGV0ZSBTLnIsZGVsZXRlIFMueSxTLnk9KHllP080KGsseWUpOjApK1BlO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitSfXN3aXRjaChSKXtjYXNlIDA6aWYoMD09RylicmVhazt2YXIgTmU9RzMoayxTLmN8fDAsKFMueHx8MCkrUy53KTtk''@;'; put 'put ''ZWxldGUgUy53LFMuQz1OZVswXSxTLlg9TmVbMV07dmFyIFllPVJmKGssUy5yfHwwLChTLnl8fDApK1MuaCk7ZGVsZXRlIFMuaCxTLlI9WWVbMF0sUy5ZPVllWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9RylicmVhazt2YXIgZXQ9Uy5DfHwwLGN0PVMuWHx8MDtkZWxldGUgUy5DLGRl''@;'; put 'put ''bGV0ZSBTLlgsUy53PSR2KGssZXQpK2N0LShTLmM/JHYoayxTLmMpOjApLShTLnh8fDApO3ZhciBFdD1TLlJ8fDAsYXQ9Uy5ZfHwwO2RlbGV0ZSBTLlIsZGVsZXRlIFMuWSxTLmg9TzQoayxFdCkrYXQtKFMucj9PNChrLFMucik6MCktKFMueXx8MCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252''@;'; put 'put ''ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1J9fX1mdW5jdGlvbiBjQihTKXt2YXIgUj1bUy5jfHwwLE1hdGgucm91bmQoUy54fHwwKSxTLnJ8fDAsTWF0aC5yb3VuZChTLnl8fDApXTtyZXR1cm4oUj1SLmNvbmNhdChTLmgmJlMudz9bUlswXSxNYXRoLnJvdW5kKFJbMV0rUy53KSxS''@;'; put 'put ''WzJdLE1hdGgucm91bmQoUlszXStTLmgpXTpbUy5DfHwwLE1hdGgucm91bmQoUy5YfHwwKSxTLlJ8fDAsTWF0aC5yb3VuZChTLll8fDApXSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gTzQoUyxSKXtpZighUylyZXR1cm4gMDtmb3IodmFyIGs9MDstLVI+PTA7KXt2YXIgRz0oKFNbIiFyb3dzIl18''@;'; put 'put ''fFtdKVtSXXx8e30pLmhweDtudWxsPT1HJiYoRz0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1HJiYoRz0yNCksays9R31yZXR1cm4ga31mdW5jdGlvbiAkdihTLFIpe2lmKCFTKXJldHVybiAwO2Zvcih2YXIgaz0wOy0tUj49MDspe3ZhciBHPSgoU1siIWNv''@;'; put 'put ''bHMiXXx8W10pW1JdfHx7fSkud3B4O2lmKG51bGw9PUcmJihHPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PUcpe3ZhciBRPXt3Y2g6OC40M307UTAoUSksU1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bUl09USksRz1RLndweH1rKz1HfXJldHVybiBrfWZ1bmN0''@;'; put 'put ''aW9uIE9nKFMsUixrKXtyZXR1cm4iQyI9PWs/JHYoUyxSKTpPNChTLFIpfWZ1bmN0aW9uIFJmKFMsUixrKXt2YXIgRz1bUixrXTtpZighUylyZXR1cm4gRztmb3IoOzspe3ZhciBRPShTWyIhcm93cyJdfHxbXSlbR1swXV18fHt9O2lmKFEuaGlkZGVuKSsrR1swXTtlbHNle3ZhciBvZT1RLmhw''@;'; put 'put ''eDtpZihudWxsPT1vZSYmKG9lPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PW9lJiYob2U9c2goMTUpKSxHWzFdPG9lKWJyZWFrO0dbMF0rKyxHWzFdLT1vZX19cmV0dXJuIEd9ZnVuY3Rpb24gRzMoUyxSLGspe3ZhciBHPVtSLGtdO2lmKCFTKXJldHVybiBH''@;'; put 'put ''O2Zvcig7Oyl7dmFyIFE9KFNbIiFjb2xzIl18fFtdKVtHWzBdXXx8e307aWYoUS5oaWRkZW58fDA9PT1RLndweCkrK0dbMF07ZWxzZXt2YXIgb2U9US53cHg7aWYobnVsbD09b2UmJihvZT0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1vZSl7dmFyIGdlPXt3''@;'; put 'put ''Y2g6OC40M307UTAoZ2UpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW0dbMF1dPWdlKSxvZT1nZS53cHh9aWYoR1sxXTxvZSlicmVhaztHWzBdKyssR1sxXS09b2V9fXJldHVybiBHfWZ1bmN0aW9uIFAwKFMpe3JldHVybigiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBTP1MudG9TdHJpbmco''@;'; put 'put ''MTYpOlMpKS5zbGljZSgtNil9ZnVuY3Rpb24gZ2QoUyxSLGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgUj8hIWs6ISFSOyJzdHJpbmciIT10eXBlb2YgUiYmKFI9ImNvbG9yIik7dmFyIFE9IjwiK1IrIiAiO3JldHVybiBTLmF1dG8/USsnYXV0bz0iMSIvPic6Uy5pbmRleCYmbnVsbD09Uy5y''@;'; put 'put ''Z2I/USsnaW5kZXhlZD0iJytTLmluZGV4KyciLz4nOm51bGwhPVMudGhlbWU/USsndGhlbWU9IicrUy50aGVtZSsnIicrKFMudGludD8nIHRpbnQ9IicrUy50aW50KyciJzoiIikrIi8+IjpudWxsIT1TLnJnYj9RKydyZ2I9IicrKEc/IkZGIjoiIikrUDAoUy5yZ2IpKyciLz4nOlErIi8+In1m''@;'; put 'put ''dW5jdGlvbiBQNChTLFIpe2lmKCFTfHxudWxsPT1TLnJnYilyZXR1cm4gUjtmb3IodmFyIGs9KCIwMDAwMDAiK1MucmdiLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpLEc9W2suc2xpY2UoMCwyKSxrLnNsaWNlKDIsNCksay5zbGljZSg0LDYpXS5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBwYXJz''@;'; put 'put ''ZUludChnZSwxNil9KSxRPTA7UTxyMC5sZW5ndGg7KytRKXt2YXIgb2U9cjBbUV07aWYob2VbMF09PUdbMF0mJm9lWzFdPT1HWzFdJiZvZVsyXT09R1syXSlyZXR1cm4gUX1yZXR1cm4gcjAubGVuZ3RoPDY0PyhyMC5wdXNoKFtHWzBdLEdbMV0sR1syXV0pLHIwLmxlbmd0aC0xKTpSfWZ1bmN0''@;'; put 'put ''aW9uIHQxKFMpe3ZhciBSPVsiIiwiIiwiIl07aWYoIVMpcmV0dXJuW107dmFyIGs9IiIsRz1TJiZTLnM/ZnVuY3Rpb24gS3YoUyl7dmFyIFI9WyIiLCIiXTtpZighUylyZXR1cm4gUjtpZihTLnN6JiYoUlswXSs9IiYiK1Muc3osUlsxXT0iJjEyIitSWzFdKSxTLm5hbWUmJihSWzBdKz0nJiIn''@;'; put 'put ''K1MubmFtZSsnLFJlZ3VsYXIiJyxSWzFdPScmIi0sUmVndWxhciInK1JbMV0pLFMuYm9sZCYmKFJbMF0rPSImQiIsUlsxXT0iJkIiK1JbMV0pLFMudW5kZXJsaW5lKXt2YXIgaz0yPT1TLnVuZGVybGluZT8iJkUiOiImVSI7UlswXSs9ayxSWzFdPWsrUlsxXX1yZXR1cm4gUy5pdGFsaWMmJihS''@;'; put 'put ''WzBdKz0iJkkiLFJbMV09IiZJIitSWzFdKSxTLmNvbG9yJiZudWxsIT1TLmNvbG9yLnJnYiYmKFJbMF0rPSImSyIrUDAoUy5jb2xvci5yZ2IpLFJbMV0rPSImSzAwMDAwMCIpLFMuc3RyaWtlJiYoUlswXSs9IiZTIixSWzFdPSImUyIrUlsxXSksInN1cGVyIj09Uy52YWxpZ24mJihSWzBdKz0i''@;'; put 'put ''JlgiLFJbMV09IiZYIitSWzFdKSwic3ViIj09Uy52YWxpZ24mJihSWzBdKz0iJlkiLFJbMV09IiZZIitSWzFdKSxSfShTLnMpOlsiIiwiIl07cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP1tTLFMsU106bnVsbCE9Uy5maXJzdHx8bnVsbCE9Uy5ldmVufHxudWxsIT1TLm9kZD8obnVsbCE9Uy5v''@;'; put 'put ''ZGQmJihSWzBdPXQxKFMub2RkKVswXSksdm9pZCAwPT09Uy5maXJzdCYmUlswXSYmKFJbMV09UlswXSksbnVsbCE9Uy5maXJzdCYmKFJbMV09dDEoUy5maXJzdClbMF0pLG51bGwhPVMuZXZlbiYmKFJbMl09dDEoUy5ldmVuKVswXSksUik6Uy5sZWZ0fHxTLmNlbnRlcnx8Uy5yaWdodD8oUy5s''@;'; put 'put ''ZWZ0JiYoays9IiZMIit0MShTLmxlZnQpWzBdKSxTLmNlbnRlciYmKGsrPSImQyIrdDEoUy5jZW50ZXIpWzBdKSxTLnJpZ2h0JiYoays9IiZSIit0MShTLnJpZ2h0KVswXSksW2ssayxrXSk6bnVsbCE9Uy52P1trPUdbMF0rUy52LnJlcGxhY2UoLyYvZywiJiYiKStHWzFdLGssa106bnVsbCE9''@;'; put 'put ''Uy53P1trPUdbMF0rUy53K0dbMV0sayxrXTpBcnJheS5pc0FycmF5KFMuUik/KFMuUi5mb3JFYWNoKGZ1bmN0aW9uKFEpe2srPXQxKFEpWzBdfSksW2ssayxrXSk6W119dmFyIG44PXsxOiJMZXR0ZXIiLDM6IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJFeGVjdXRpdmUiLDg6IkEzIiw5OiJBNCIs''@;'; put 'put ''MTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIsMTQ6IkZvbGlvIiwyMDoiRW52ZWxvcGUiLDM3OiJNb25hcmNoIiw3MDoiQTYifSx1Qj1WZShuOCk7S2EuQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb25uZWN0''@;'; put 'put ''aW9ucyI7dmFyIGhCPVByKCJleHRlcm5hbExpbmsiLG51bGwse3htbG5zOllpLm1haW5bMF19KTtLYS5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLEthLkRSQVc9Imh0dHA6Ly9zY2hlbWFzLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZyI7dmFyIHBCPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoidG9wIn0sUGc9e2N0cjoiY2VudGVyIixkaXN0OiJjZW50ZXIiLGp1c3Q6ImNlbnRl''@;'; put 'put ''ciIsanVzdExvdzoiY2VudGVyIixsOiJsZWZ0IixyOiJyaWdodCIsdGhhaURpc3Q6ImNlbnRlciJ9O2Z1bmN0aW9uIG1CKCl7dmFyIFM9W0lpXTtyZXR1cm4gUy5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIw''@;'; put 'put ''MDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLFMuam9pbigiIil9ZnVuY3Rpb24gY25lKFMpe3ZhciBrLFI9U1siIWRhdGEiXTtyZXR1cm4iYmFzZTY0Ij09PVNbIiFkYXRhdHlw''@;'; put 'put ''ZSJdPygoaz1SLm1hdGNoKC9eZGF0YTouKiwvKSkmJihSPVIuc2xpY2Uoa1swXS5sZW5ndGgpKSxfZS5kZWNvZGUoUikpOlJ9S2EuVEFCTEU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGFibGUiO3ZhciBiQj0v''@;'; put 'put ''PCg/Olx3KzopP3NoYXBlKD86W15cd11bXj5dKik/PihbXHNcU10qPyk8XC8oPzpcdys6KT9zaGFwZT4vZztmdW5jdGlvbiBPQyhTLFIsayxHKXt2YXIgUT1bMjE2MDAsMjE2MDBdLG9lPVsibTAsMGwwIixRWzFdLFFbMF0sUVsxXSxRWzBdLCIweGUiXS5qb2luKCIsIiksZ2U9W1ByKCJ4bWwi''@;'; put 'put ''LG51bGwseyJ4bWxuczp2Ijp5bC52LCJ4bWxuczpvIjp5bC5vLCJ4bWxuczp4Ijp5bC54LCJ4bWxuczptdiI6eWwubXZ9KS5yZXBsYWNlKC9cLz4vLCI+IiksUHIoIm86c2hhcGVsYXlvdXQiLFByKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0In0pLHsidjpleHQiOiJlZGl0In0pXSxw''@;'; put 'put ''ZT0xMDI0KlMseWU9a3x8W107eWUubGVuZ3RoPjAmJmdlLnB1c2goUHIoInY6c2hhcGV0eXBlIixbUHIoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLFByKCJ2OnBhdGgiLG51bGwse3NoYWRvd29rOiJmIixleHRydXNpb25vazoiZiIsc3Ryb2tlb2s6ImYiLGZpbGxvazoi''@;'; put 'put ''ZiIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pLFByKCJvOmxvY2siLG51bGwseyJ2OmV4dCI6ImVkaXQiLHNoYXBldHlwZToidCJ9KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMSIsY29vcmRzaXplOlEuam9pbigiLCIpLCJvOnNwdCI6MjAxLHBhdGg6b2V9KSkseWUuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihOZSl7KytwZSxnZT1nZS5jb25jYXQoZnVuY3Rpb24gaTgoUyxSKXt2YXIgaz17aWQ6Il94MDAwMF9zIitSLHR5cGU6IiNfeDAwMDBfdDIwMSIsc3R5bGU6Im1zby13cmFwLXN0eWxlOnRpZ2h0In07KCJSYWRpbyI9PVNbIiF0eXBlIl18fCJDaGVja2JveCI9PVNbIiF0eXBlIl18fCJM''@;'; put 'put ''aXN0Ij09U1siIXR5cGUiXXx8IkRyb3AiPT1TWyIhdHlwZSJdKSYmKGsuc3Ryb2tlZD0iZiIpLCJMYWJlbCI9PVNbIiF0eXBlIl0mJihrLmZpbGxlZD0iZiIpO3ZhciBHPSIiO1MudCYmUENbU1siIXR5cGUiXV0mJihHPVBDW1NbIiF0eXBlIl1dLnJlcGxhY2UoLyMjIyMvLExyKFMudCkpKTt2''@;'; put 'put ''YXIgUT1bXTtyZXR1cm4gUy5tYWNybyYmUS5wdXNoKEhhKCJ4OkZtbGFNYWNybyIsUy5tYWNybykpLFMubGluayYmUS5wdXNoKEhhKCJ4OkZtbGFMaW5rIixTLmxpbmspKSxTLnZhbCYmUS5wdXNoKEhhKCJSYWRpbyI9PVNbIiF0eXBlIl18fCJDaGVja2JveCI9PVNbIiF0eXBlIl0/Ing6Q2hl''@;'; put 'put ''Y2tlZCI6Ing6VmFsIixTdHJpbmcoUy52YWwpKSksUy5yZWYmJlEucHVzaChIYSgieDpGbWxhUmFuZ2UiLFMucmVmKSksUy5zZWwmJiJMaXN0Ij09U1siIXR5cGUiXSYmUS5wdXNoKEhhKCJ4OlNlbFR5cGUiLFMuc2VsKSksUy5taW4mJlEucHVzaChIYSgieDpNaW4iLFN0cmluZyhTLm1pbikp''@;'; put 'put ''KSxTLm1heCYmUS5wdXNoKEhhKCJ4Ok1heCIsU3RyaW5nKFMubWF4KSkpLFMuc3RlcCYmUS5wdXNoKEhhKCJ4OkluYyIsU3RyaW5nKFMuc3RlcCkpKSxTLnBhZ2UmJlEucHVzaChIYSgieDpQYWdlIixTdHJpbmcoUy5wYWdlKSkpLFtdLmNvbmNhdChbIjx2OnNoYXBlIitSdShrKSsiPiJdKS5j''@;'; put 'put ''b25jYXQoRkNbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoW0ddKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicrU1siIXR5cGUiXSsnIj4nLEhhKCJ4OkFuY2hvciIsY0IoU1siIXBvcyJdKSksSGEoIng6UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KFEpLmNvbmNh''@;'; put 'put ''dCh5QltTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXSl9KE5lLHBlKSl9KTt2YXIgUGU9Unx8W107cmV0dXJuIFBlLmxlbmd0aD4wJiZnZS5wdXNoKFByKCJ2OnNoYXBldHlwZSIsW1ByKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJt''@;'; put 'put ''aXRlciJ9KSxQcigidjpwYXRoIixudWxsLHtncmFkaWVudHNoYXBlb2s6InQiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMiIsY29vcmRzaXplOlEuam9pbigiLCIpLCJvOnNwdCI6MjAyLHBhdGg6b2V9KSksUGUuZm9yRWFjaChmdW5jdGlvbihO''@;'; put 'put ''ZSl7KytwZSxnZT1nZS5jb25jYXQoZnVuY3Rpb24gWHYoUyxSLGspe3ZhciBHPU5vKFNbMF0pLFE9U1sxXS5maWxsfHx7fTtTWzFdLnMmJihRPXt0eXBlOlNbMV0ucy5wYXR0ZXJuVHlwZXx8InNvbGlkIn0sU1sxXS5zLmZnQ29sb3ImJihRLmNvbG9yMj1RLmNvbG9yMT0iIyIrUDAoU1sxXS5z''@;'; put 'put ''LmZnQ29sb3IucmdiKSksU1sxXS5zLmJnQ29sb3ImJihRLmNvbG9yMj0iIyIrUDAoU1sxXS5zLmJnQ29sb3IucmdiKSkpO3ZhciBvZT17Y29sb3IyOlEuY29sb3IyfHwiI0JFRkY4MiIsdHlwZTpRLnR5cGV8fCJncmFkaWVudCJ9OyJncmFkaWVudCI9PW9lLnR5cGUmJihvZS5hbmdsZT0iLTE4''@;'; put 'put ''MCIpO3ZhciBnZT0iZ3JhZGllbnQiPT1vZS50eXBlP1ByKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVsbCxwZT1QcigidjpmaWxsIixnZSxvZSkseWU9e307U1sxXS5zaGFkb3cmJihTWzFdLnNoYWRvdy5jb2xvciYmKHllLmNvbG9y''@;'; put 'put ''PVNbMV0uc2hhZG93LmNvbG9yKSxTWzFdLnNoYWRvdy5vbiYmKHllLm9uPVNbMV0uc2hhZG93Lm9uKSkseWUub2JzY3VyZWQ9InQiO3ZhciBQZT0hMCxOZT0hMCxZZT1TWzFdWyIhcG9zIl0/cXQoU1sxXVsiIXBvcyJdKTpudWxsO3JldHVybiBZZSYmKE5lPW51bGw9PVllLlImJm51bGw9PVll''@;'; put 'put ''LkMmJm51bGw9PVllLlgmJm51bGw9PVllLlksUGU9IVllLnImJiFZZS5jLGxCKFllLDAsaykpLFsiPHY6c2hhcGUiK1J1KHtpZDoiX3gwMDAwX3MiK1IsdHlwZToiI194MDAwMF90MjAyIixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7''@;'; put 'put ''d2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRleDoxMCIrKFNbMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6US5jb2xvcjF8fCIjRUNGQUQ0IixzdHJva2Vjb2xvcjooU1sxXS5zdHJva2V8fHt9KS5jb2xvcnx8IiNlZGVhYTEifSkrIj4iLHBlLFByKCJ2''@;'; put 'put ''OnNoYWRvdyIsbnVsbCx5ZSksUHIoInY6cGF0aCIsbnVsbCx7Im86Y29ubmVjdHR5cGUiOiJub25lIn0pLCc8djp0ZXh0Ym94PjxkaXYgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC9kaXY+PC92OnRleHRib3g+JywnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSJOb3RlIj4nLFBlPyI8eDpN''@;'; put 'put ''b3ZlV2l0aENlbGxzLz4iOiIiLE5lPyI8eDpTaXplV2l0aENlbGxzLz4iOiIiLEhhKCJ4OkFuY2hvciIsWWU/Y0IoWWUpOlNbMV0ucmF3YW5jaG9yfHxbRy5jKzEsMCxHLnIrMSwwLEcuYyszLDIwLEcucis1LDIwXS5qb2luKCIsIikpLEhhKCJ4OkF1dG9GaWxsIiwiRmFsc2UiKSxIYSgieDpS''@;'; put 'put ''b3ciLFN0cmluZyhHLnIpKSxIYSgieDpDb2x1bW4iLFN0cmluZyhHLmMpKSxTWzFdLmhpZGRlbj8iIjoiPHg6VmlzaWJsZS8+IiwiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdfShOZSxwZSxHKSl9KSxnZS5wdXNoKCI8L3htbD4iKSxnZS5qb2luKCIiKX12YXIgeUI9e0J1dHRvbjpb''@;'; put 'put ''Ijx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OlRleHRIQWxpZ24+Q2VudGVyPC94OlRleHRIQWxpZ24+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iXSxHQm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0Zp''@;'; put 'put ''bGw+IiwiPHg6Tm9UaHJlZUQvPiJdLExhYmVsOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Il0sUmFkaW86WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRv''@;'; put 'put ''TGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxDaGVja2JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94''@;'; put 'put ''OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLERyb3A6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OlNlbFR5cGU+U2luZ2xlPC94''@;'; put 'put ''OlNlbFR5cGU+IiwiPHg6RHJvcFN0eWxlPkNvbWJvPC94OkRyb3BTdHlsZT4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpEcm9wTGluZXM+NDwveDpEcm9wTGluZXM+Il0sTGlzdDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4''@;'; put 'put ''Ok5vVGhyZWVEMi8+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6VmFsPjA8L3g6VmFsPiIsIjx4Ok1pbj4wPC94Ok1pbj4iLCI8eDpNYXg+NTwveDpNYXg+IiwiPHg6SW5jPjE8L3g6SW5jPiIsIjx4OlBhZ2U+NDwveDpQYWdlPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNjcm9sbDpbIjx4''@;'; put 'put ''OlNpemVXaXRoQ2VsbHMvPiIsIjx4Okhvcml6Lz4iLCI8eDpEeD4xNTwveDpEeD4iXSxTcGluOlsiPHg6RHg+MTU8L3g6RHg+Il19LFBDPXtCdXR0b246Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyJz48Zm9udCBmYWNlPSdDYWxpYnJpJyBzaXplPScyNDAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsR0JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBz''@;'; put 'put ''dHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsUmFkaW86Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xl''@;'; put 'put ''Y2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nYXV0byc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLExhYmVsOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDph''@;'; put 'put ''dXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixDaGVja2JveDoiPHY6dGV4dGJveCBzdHlsZT0n''@;'; put 'put ''bXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsc2hlZXRqczoi''@;'; put 'put ''ZGFmdXEifSxGQz17QnV0dG9uOlsnPHY6ZmlsbCBjb2xvcjI9IiNmMGYwZjAgWzY3XSIgbzpkZXRlY3Rtb3VzZWNsaWNrPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxHQm94OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxEcm9w''@;'; put 'put ''OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMaXN0OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTcGluOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTY3JvbGw6''@;'; put 'put ''Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExhYmVsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxSYWRpbzpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0''@;'; put 'put ''PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLENoZWNrYm94OlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sc2hlZXRqczpbXX07ZnVuY3Rpb24gVmsoUyxSLGssRyl7dmFyIFE9eyIh''@;'; put 'put ''aWQiOnt9fSxvZT1bUHIoInhtbCIsbnVsbCx7InhtbG5zOnYiOnlsLnYsInhtbG5zOm8iOnlsLm8sInhtbG5zOngiOnlsLnh9KS5yZXBsYWNlKC9cLz4vLCI+IiksUHIoIm86c2hhcGVsYXlvdXQiLFByKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0IixkYXRhOjF9KSx7InY6ZXh0Ijoi''@;'; put 'put ''ZWRpdCJ9KSwnPHY6c2hhcGV0eXBlIGlkPSJfeDAwMDBfdDc1IiBjb29yZHNpemU9IjIxNjAwLDIxNjAwIiBvOnNwdD0iNzUiIG86cHJlZmVycmVsYXRpdmU9InQiIHBhdGg9Im1ANEA1bEA0QDExQDlAMTFAOUA1eGUiIGZpbGxlZD0iZiIgc3Ryb2tlZD0iZiI+JywnPHY6c3Ryb2tlIGpvaW5z''@;'; put 'put ''dHlsZT0ibWl0ZXIiLz4nLCI8djpmb3JtdWxhcz4iLCc8djpmIGVxbj0iaWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDEgMCIvPicsJzx2OmYgZXFuPSJzdW0gMCAwIEAxIi8+JywnPHY6ZiBlcW49InByb2QgQDIgMSAyIi8+JywnPHY6ZiBlcW49''@;'; put 'put ''InByb2QgQDMgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMCAwIDEiLz4nLCc8djpmIGVxbj0icHJvZCBANiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbFdpZHRoIi8+Jywn''@;'; put 'put ''PHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAxMCAyMTYwMCAwIi8+JywiPC92OmZvcm11bGFzPiIsJzx2OnBhdGggbzpleHRydXNpb25vaz0iZiIgZ3JhZGllbnRzaGFwZW9rPSJ0IiBv''@;'; put 'put ''OmNvbm5lY3R0eXBlPSJyZWN0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgYXNwZWN0cmF0aW89InQiLz4nLCI8L3Y6c2hhcGV0eXBlPiJdLGdlPTE7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtHW3BlXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKHllKXtHW3BlXVt5ZV0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihQZSl7aWYoQXJyYXkuaXNBcnJheShHW3BlXVt5ZV1bUGVdKSlmb3IodmFyIE5lPTA7TmU8R1twZV1beWVdW1BlXS5sZW5ndGg7KytOZSlpZihHW3BlXVt5ZV1bUGVdW05l''@;'; put 'put ''XSl7dmFyIFllPUdbcGVdW3llXVtQZV1bTmVdO2lmKCJyZW1vdGUiPT1ZZVsiIWRhdGF0eXBlIl0pdGhyb3ciQ2Fubm90IHVzZSBsaW5rZWQgaW1hZ2UgaW4gaGVhZGVyIG9yIGZvb3RlciI7Zm9yKDtyaShTLCJ4bC9tZWRpYS9pbWFnZSIrZ2UrIi5qcGciKTspKytnZTtTLmZpbGUoInhsL21l''@;'; put 'put ''ZGlhL2ltYWdlIitnZSsiLmpwZyIsY25lKFllKSx7YmluYXJ5OiEwfSksRXIoUSwtMSwiLi4vbWVkaWEvaW1hZ2UiK2dlKyIuanBnIixLYS5JTUcpO3ZhciBldD0iX3gwMDAwX3MiKygxMDI1K1llLl9jbnQpLGN0PSJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6''@;'; put 'put ''MDt6LWluZGV4OiIrKFllLl9jbnQrMSkrIjsiO2N0Kz0id2lkdGg6IitZZVsiIXBvcyJdLncrInB4OyIsY3QrPSJoZWlnaHQ6IitZZVsiIXBvcyJdLmgrInB4OyI7dmFyIEV0PVBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3BlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyJvZGQiIT09eWUm''@;'; put 'put ''JihFdCs9eWUudG9VcHBlckNhc2UoKSksR1twZV1beWVdW1BlXS5sZW5ndGg+MSYmKEV0Kz1OZSksb2UucHVzaChQcigidjpzaGFwZSIsWyc8djppbWFnZWRhdGEgbzpyZWxpZD0icklkJysoWWUuX2NudCsxKSsnIiBvOnRpdGxlPSJzaGVldGpzIi8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIg''@;'; put 'put ''cm90YXRpb249InQiLz4nXS5qb2luKCIiKSx7aWQ6RXQsIm86c3BpZCI6ZXQsdHlwZToiI194MDAwMF90NzUiLHN0eWxlOmN0fSkpfX0pfSl9KSxvZS5wdXNoKCI8L3htbD4iKSxTLmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK2srIkhGLnZtbCIsb2Uuam9pbigiIikpLFMuZmlsZSgi''@;'; put 'put ''eGwvZHJhd2luZ3MvX3JlbHMvdm1sRHJhd2luZyIraysiSEYudm1sLnJlbHMiLGtpKFEpKX1LYS5DTU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgSnY9UHIoImNvbW1lbnRzIixudWxs''@;'; put 'put ''LHt4bWxuczpZaS5tYWluWzBdfSk7ZnVuY3Rpb24gSEMoUyl7dmFyIFI9W0lpLEp2XSxrPVtdO3JldHVybiBSLnB1c2goIjxhdXRob3JzPiIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIG9lPUxyKFEuYSk7ay5pbmRleE9mKG9lKT4tMXx8KGsu''@;'; put 'put ''cHVzaChvZSksUi5wdXNoKCI8YXV0aG9yPiIrb2UrIjwvYXV0aG9yPiIpKX0pfSksUi5wdXNoKCI8L2F1dGhvcnM+IiksUi5wdXNoKCI8Y29tbWVudExpc3Q+IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXtSLnB1c2goJzxjb21tZW50IHJlZj0iJytH''@;'; put 'put ''WzBdKyciIGF1dGhvcklkPSInK2suaW5kZXhPZihMcihRLmEpKSsnIj48dGV4dD4nKSxSLnB1c2goUS5SP0pzKFEuUik6SGEoInQiLG51bGw9PVEudD8iIjpMcihRLnQpKSksUi5wdXNoKCI8L3RleHQ+PC9jb21tZW50PiIpfSl9KSxSLnB1c2goIjwvY29tbWVudExpc3Q+IiksUi5sZW5ndGg+''@;'; put 'put ''MiYmKFJbUi5sZW5ndGhdPSI8L2NvbW1lbnRzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfXZhciB3Qj1ndTtmdW5jdGlvbiBOQyhTKXt2YXIgUj1iaSgpLGs9W107cmV0dXJuIEZyKFIsIkJydEJlZ2luQ29tbWVudHMiKSxGcihSLCJCcnRCZWdpbkNvbW1lbnRB''@;'; put 'put ''dXRob3JzIiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXtrLmluZGV4T2YoUS5hKT4tMXx8KGsucHVzaChRLmEuc2xpY2UoMCw1NCkpLEZyKFIsIkJydENvbW1lbnRBdXRob3IiLGZ1bmN0aW9uIHVuZShTKXtyZXR1cm4gRmMoUy5zbGljZSgwLDU0KSl9''@;'; put 'put ''KFEuYSkpKX0pfSksRnIoUiwiQnJ0RW5kQ29tbWVudEF1dGhvcnMiKSxGcihSLCJCcnRCZWdpbkNvbW1lbnRMaXN0IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXtRLmlhdXRob3I9ay5pbmRleE9mKFEuYSk7dmFyIG9lPXtzOk5vKEdbMF0pLGU6Tm8o''@;'; put 'put ''R1swXSl9O0ZyKFIsIkJydEJlZ2luQ29tbWVudCIsZnVuY3Rpb24gX0IoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oMzYpKSxSLndyaXRlX3NoaWZ0KDQsU1sxXS5pYXV0aG9yKSxnZihTWzBdLFIpLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSfShbb2UsUV0pKSxRLnQmJlEudC5sZW5ndGg+MCYmRnIoUiwiQnJ0Q29tbWVudFRleHQiLGZ1bmN0aW9uIG5oKFMsUil7dmFyIGs9ITE7cmV0dXJuIG51bGw9PVImJihrPSEwLFI9Ym4oMjMrNCpTLnQubGVuZ3RoKSksUi53cml0ZV9zaGlmdCgx''@;'; put 'put ''LDEpLEZjKFMudCxSKSxSLndyaXRlX3NoaWZ0KDQsMSksZnVuY3Rpb24gbHYoUyxSKXtSfHwoUj1ibig0KSksUi53cml0ZV9zaGlmdCgyLFMuaWNofHwwKSxSLndyaXRlX3NoaWZ0KDIsUy5pZm50fHwwKX0oe2ljaDowLGlmbnQ6MH0sUiksaz9SLnNsaWNlKDAsUi5sKTpSfShRKSksRnIoUiwi''@;'; put 'put ''QnJ0RW5kQ29tbWVudCIpLGRlbGV0ZSBRLmlhdXRob3J9KX0pLEZyKFIsIkJydEVuZENvbW1lbnRMaXN0IiksRnIoUiwiQnJ0RW5kQ29tbWVudHMiKSxSLmVuZCgpfXZhciB6az0iYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IixXaz1bInhsc2IiLCJ4bHNtIiwieGxhbSIs''@;'; put 'put ''ImJpZmY4IiwieGxhIl07S2EuRFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZGlhbG9nc2hlZXQiLEthLk1TPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMv''@;'; put 'put ''eGxNYWNyb3NoZWV0Ijt2YXIgSGc9ZnVuY3Rpb24oKXt2YXIgUz0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLFI9e3I6MCxjOjB9O2Z1bmN0aW9uIGsoRyxRLG9lLGdlKXt2YXIgcGU9ITEseWU9''@;'; put 'put ''ITE7MD09b2UubGVuZ3RoP3llPSEwOiJbIj09b2UuY2hhckF0KDApJiYoeWU9ITAsb2U9b2Uuc2xpY2UoMSwtMSkpLDA9PWdlLmxlbmd0aD9wZT0hMDoiWyI9PWdlLmNoYXJBdCgwKSYmKHBlPSEwLGdlPWdlLnNsaWNlKDEsLTEpKTt2YXIgUGU9b2UubGVuZ3RoPjA/MHxwYXJzZUludChvZSwx''@;'; put 'put ''MCk6MCxOZT1nZS5sZW5ndGg+MD8wfHBhcnNlSW50KGdlLDEwKTowO3JldHVybiBwZT9OZSs9Ui5jOi0tTmUseWU/UGUrPVIucjotLVBlLFErKHBlPyIiOiIkIikrVGEoTmUpKyh5ZT8iIjoiJCIpK2ppKFBlKX1yZXR1cm4gZnVuY3Rpb24oUSxvZSl7cmV0dXJuIFI9b2UsUS5yZXBsYWNlKFMs''@;'; put 'put ''ayl9fSgpLG0yPS8oXnxbXi5fQS1aMC05XSkoWyRdPykoW0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0p''@;'; put 'put ''KD8hW18uXChBLVphLXowLTldKS9nLEg0PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKFIsayl7cmV0dXJuIFIucmVwbGFjZShtMixmdW5jdGlvbihHLFEsb2UsZ2UscGUseWUpe3ZhciBQZT1DYShnZSktKG9lPzA6ay5jKSxOZT1fbyh5ZSktKHBlPzA6ay5yKTtyZXR1cm4gUSsiUiIrKDA9''@;'; put 'put ''PU5lPyIiOnBlP05lKzE6IlsiK05lKyJdIikrIkMiKygwPT1QZT8iIjpvZT9QZSsxOiJbIitQZSsiXSIpfSl9fSgpO2Z1bmN0aW9uIFlrKFMsUil7cmV0dXJuIFMucmVwbGFjZShtMixmdW5jdGlvbihrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIEcrKCIkIj09UT9RK29lOlRhKENhKG9lKStSLmMp''@;'; put 'put ''KSsoIiQiPT1nZT9nZStwZTpqaShfbyhwZSkrUi5yKSl9KS5yZXBsYWNlKC8oXGQrKTooXGQrKS9nLGZ1bmN0aW9uKGssRyxRKXtyZXR1cm4gamkoX28oRykrUi5yKSsiOiIramkoX28oUSkrUi5yKX0pfWZ1bmN0aW9uIGRuZShTLFIsayl7dmFyIFE9TXMoUikucyxvZT1ObyhrKTtyZXR1cm4g''@;'; put 'put ''WWsoUyx7cjpvZS5yLVEucixjOm9lLmMtUS5jfSl9ZnVuY3Rpb24gRUIoUyl7cmV0dXJuIFMucmVwbGFjZSgvX3hsZm5cLi9nLCIiKX1mdW5jdGlvbiBidShTKXtTLmwrPTF9ZnVuY3Rpb24gTjQoUyxSKXt2YXIgaz1TLnJlYWRfc2hpZnQoMT09Uj8xOjIpO3JldHVyblsxNjM4MyZrLGs+PjE0''@;'; put 'put ''JjEsaz4+MTUmMV19ZnVuY3Rpb24gVkMoUyxSLGspe3ZhciBHPTI7aWYoayl7aWYoay5iaWZmPj0yJiZrLmJpZmY8PTUpcmV0dXJuIEdrKFMpOzEyPT1rLmJpZmYmJihHPTQpfXZhciBRPVMucmVhZF9zaGlmdChHKSxvZT1TLnJlYWRfc2hpZnQoRyksZ2U9TjQoUywyKSxwZT1ONChTLDIpO3Jl''@;'; put 'put ''dHVybntzOntyOlEsYzpnZVswXSxjUmVsOmdlWzFdLHJSZWw6Z2VbMl19LGU6e3I6b2UsYzpwZVswXSxjUmVsOnBlWzFdLHJSZWw6cGVbMl19fX1mdW5jdGlvbiBHayhTKXt2YXIgUj1ONChTLDIpLGs9TjQoUywyKSxHPVMucmVhZF9zaGlmdCgxKSxRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm57''@;'; put 'put ''czp7cjpSWzBdLGM6RyxjUmVsOlJbMV0sclJlbDpSWzJdfSxlOntyOmtbMF0sYzpRLGNSZWw6a1sxXSxyUmVsOmtbMl19fX1mdW5jdGlvbiAkayhTLFIsayl7aWYoayYmay5iaWZmPj0yJiZrLmJpZmY8PTUpcmV0dXJuIGZ1bmN0aW9uIEFCKFMpe3ZhciBSPU40KFMsMiksaz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMSk7cmV0dXJue3I6UlswXSxjOmssY1JlbDpSWzFdLHJSZWw6UlsyXX19KFMpO3ZhciBHPVMucmVhZF9zaGlmdChrJiYxMj09ay5iaWZmPzQ6MiksUT1ONChTLDIpO3JldHVybntyOkcsYzpRWzBdLGNSZWw6UVsxXSxyUmVsOlFbMl19fWZ1bmN0aW9uIEJDKFMpe3ZhciBSPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57cjpSLGM6MjU1JmssZlF1b3RlZDohISgxNjM4NCZrKSxjUmVsOms+PjE1LHJSZWw6az4+MTV9fWZ1bmN0aW9uIFFrKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBaQyhTLFIpe3ZhciBr''@;'; put 'put ''PVtTLnJlYWRfc2hpZnQoMSldO2lmKDEyPT1SKXN3aXRjaChrWzBdKXtjYXNlIDI6a1swXT00O2JyZWFrO2Nhc2UgNDprWzBdPTE2O2JyZWFrO2Nhc2UgMDprWzBdPTE7YnJlYWs7Y2FzZSAxOmtbMF09Mn1zd2l0Y2goa1swXSl7Y2FzZSA0OmtbMV09dW8oUywxKT8iVFJVRSI6IkZBTFNFIiwx''@;'; put 'put ''MiE9UiYmKFMubCs9Nyk7YnJlYWs7Y2FzZSAzNzpjYXNlIDE2OmtbMV09TWNbU1tTLmxdXSxTLmwrPTEyPT1SPzQ6ODticmVhaztjYXNlIDA6Uy5sKz04O2JyZWFrO2Nhc2UgMTprWzFdPVBsKFMpO2JyZWFrO2Nhc2UgMjprWzFdPVgwKFMsMCx7YmlmZjpSPjAmJlI8OD8yOlJ9KTticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIFNlckFyOiAiK2tbMF0pfXJldHVybiBrfWZ1bmN0aW9uIHJEKFMsUixrKXtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxRPVtdLG9lPTA7b2UhPUc7KytvZSlRLnB1c2goKDEyPT1rLmJpZmY/bXU6czIpKFMsOCkpO3Jl''@;'; put 'put ''dHVybiBRfWZ1bmN0aW9uIE5CKFMsUixrKXt2YXIgRz0wLFE9MDsxMj09ay5iaWZmPyhHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlmdCg0KSk6KFE9MStTLnJlYWRfc2hpZnQoMSksRz0xK1MucmVhZF9zaGlmdCgyKSksay5iaWZmPj0yJiZrLmJpZmY8OCYmKC0tRywwPT0tLVEmJihR''@;'; put 'put ''PTI1NikpO2Zvcih2YXIgb2U9MCxnZT1bXTtvZSE9RyYmKGdlW29lXT1bXSk7KytvZSlmb3IodmFyIHBlPTA7cGUhPVE7KytwZSlnZVtvZV1bcGVdPVpDKFMsay5iaWZmKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gVmcoUyxSLGspe3JldHVybiBTLmwrPTIsW0JDKFMpXX1mdW5jdGlvbiBXQyhTKXty''@;'; put 'put ''ZXR1cm4gUy5sKz02LFtdfXZhciBXQj1WZyxZQj1XQyxHQj1XQywkQj1WZztmdW5jdGlvbiBhRChTKXtyZXR1cm4gUy5sKz0yLFtFYyhTKSwxJlMucmVhZF9zaGlmdCgyKV19dmFyIFlDPVZnLF9uZT1hRCx3bmU9V0MsR0M9VmcsQ25lPVZnLFNuZT1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwi''@;'; put 'put ''Pz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLHJiPXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gUEIoUyxSLGspe3JldHVybiBTLmwrKyxrJiYxMj09ay5i''@;'; put 'put ''aWZmP1tTLnJlYWRfc2hpZnQoNCwiaSIpLDBdOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjpJbn0sMzp7bjoiUHRnQWRkIixmOmJ1fSw0OntuOiJQdGdTdWIiLGY6YnV9LDU6e246IlB0Z011bCIsZjpidX0sNjp7bjoi''@;'; put 'put ''UHRnRGl2IixmOmJ1fSw3OntuOiJQdGdQb3dlciIsZjpidX0sODp7bjoiUHRnQ29uY2F0IixmOmJ1fSw5OntuOiJQdGdMdCIsZjpidX0sMTA6e246IlB0Z0xlIixmOmJ1fSwxMTp7bjoiUHRnRXEiLGY6YnV9LDEyOntuOiJQdGdHZSIsZjpidX0sMTM6e246IlB0Z0d0IixmOmJ1fSwxNDp7bjoi''@;'; put 'put ''UHRnTmUiLGY6YnV9LDE1OntuOiJQdGdJc2VjdCIsZjpidX0sMTY6e246IlB0Z1VuaW9uIixmOmJ1fSwxNzp7bjoiUHRnUmFuZ2UiLGY6YnV9LDE4OntuOiJQdGdVcGx1cyIsZjpidX0sMTk6e246IlB0Z1VtaW51cyIsZjpidX0sMjA6e246IlB0Z1BlcmNlbnQiLGY6YnV9LDIxOntuOiJQdGdQ''@;'; put 'put ''YXJlbiIsZjpidX0sMjI6e246IlB0Z01pc3NBcmciLGY6YnV9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gSEIoUyxSLGspe3JldHVybiBTLmwrKyxVYShTLDAsayl9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gRW5lKFMsUixrKXtyZXR1cm4gUy5sKz01LFMubCs9MixTLmwrPTI9''@;'; put 'put ''PWsuYmlmZj8xOjQsWyJQVEdTSEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIEtCKFMsUixrKXtyZXR1cm4gUy5sKz0yPT1rLmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rpb24gVUMoUyl7cmV0dXJuIFMubCsrLE1jW1MucmVh''@;'; put 'put ''ZF9zaGlmdCgxKV19fSwyOTp7bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiBOZyhTKXtyZXR1cm4gUy5sKyssMCE9PVMucmVhZF9zaGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gRkIoUyl7cmV0dXJuIFMubCsrLFMucmVhZF9zaGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVu''@;'; put 'put ''Y3Rpb24gVjQoUyl7cmV0dXJuIFMubCsrLFBsKFMpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIGduZShTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4gUy5sKz0yPT1rLmJpZmY/NjoxMj09ay5iaWZmPzE0OjcsW0ddfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rp''@;'; put 'put ''b24gTEIoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoayYmay5iaWZmPD0zPzE6Mik7cmV0dXJuW2VqW1FdLGZEW1FdLEddfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gT0IoUyxSLGspe3ZhciBHPVNbUy5sKytdLFE9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLG9lPWsmJmsuYmlmZjw9Mz9bODg9PUc/LTE6MCxTLnJlYWRfc2hpZnQoMSldOmZ1bmN0aW9uIG5EKFMpe3JldHVybltTW1MubCsxXT4+NywzMjc2NyZTLnJlYWRfc2hpZnQoMildfShTKTtyZXR1cm5bUSwoMD09PW9lWzBdP2ZEOnJTKVtvZVsxXV1dfX0sMzU6e246IlB0Z05h''@;'; put 'put ''bWUiLGY6ZnVuY3Rpb24gVkIoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMyxvZT1TLnJlYWRfc2hpZnQoIWt8fGsuYmlmZj49OD80OjIpO3N3aXRjaChrLmJpZmYpe2Nhc2UgMjpTLmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTg7YnJlYWs7Y2FzZSA1OlMubCs9MTJ9''@;'; put 'put ''cmV0dXJuW0csMCxvZV19fSwzNjp7bjoiUHRnUmVmIixmOmZ1bmN0aW9uIFJCKFMsUixrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtyZXR1cm4gUy5sKz0xLFtHLCRrKFMsMCxrKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBLayhTLFIsayl7cmV0dXJuWyg5NiZTW1MubCsrXSk+PjUs''@;'; put 'put ''VkMoUywwLGspXX19LDM4OntuOiJQdGdNZW1BcmVhIixmOmZ1bmN0aW9uIGlEKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbRyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMzk6e246IlB0Z01lbUVyciIs''@;'; put 'put ''ZjpJbn0sNDA6e246IlB0Z01lbU5vTWVtIixmOklufSw0MTp7bjoiUHRnTWVtRnVuYyIsZjpmdW5jdGlvbiBibmUoUyxSLGspe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24g''@;'; put 'put ''eW5lKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIFMubCs9NCxrLmJpZmY8OCYmUy5sLS0sMTI9PWsuYmlmZiYmKFMubCs9MiksW0ddfX0sNDM6e246IlB0Z0FyZWFFcnIiLGY6ZnVuY3Rpb24gWGsoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJu''@;'; put 'put ''IFMubCs9ayYmay5iaWZmPjg/MTI6ay5iaWZmPDg/Njo4LFtHXX19LDQ0OntuOiJQdGdSZWZOIixmOmZ1bmN0aW9uIGVEKFMsUixrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIFE9ZnVuY3Rpb24gTGYoUyxSLGspe3ZhciBHPWsmJmsuYmlmZj9rLmJpZmY6ODtpZihHPj0yJiZH''@;'; put 'put ''PD01KXJldHVybiBmdW5jdGlvbiBhOChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMSksRz0oMzI3NjgmUik+PjE1LFE9KDE2Mzg0JlIpPj4xNDtyZXR1cm4gUiY9MTYzODMsMT09RyYmUj49ODE5MiYmKFItPTE2Mzg0KSwxPT1RJiZrPj0xMjgmJihrLT0yNTYpLHty''@;'; put 'put ''OlIsYzprLGNSZWw6USxyUmVsOkd9fShTKTt2YXIgUT1TLnJlYWRfc2hpZnQoRz49MTI/NDoyKSxvZT1TLnJlYWRfc2hpZnQoMiksZ2U9KDE2Mzg0Jm9lKT4+MTQscGU9KDMyNzY4Jm9lKT4+MTU7aWYob2UmPTE2MzgzLDE9PXBlKWZvcig7UT41MjQyODc7KVEtPTEwNDg1NzY7aWYoMT09Z2Up''@;'; put 'put ''Zm9yKDtvZT44MTkxOylvZS09MTYzODQ7cmV0dXJue3I6USxjOm9lLGNSZWw6Z2UsclJlbDpwZX19KFMsMCxrKTtyZXR1cm5bRyxRXX19LDQ1OntuOiJQdGdBcmVhTiIsZjpmdW5jdGlvbiBwbmUoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1mdW5jdGlvbiBUQihTLFIsayl7aWYo''@;'; put 'put ''ay5iaWZmPDgpcmV0dXJuIEdrKFMpO3ZhciBHPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksUT1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLG9lPU40KFMsMiksZ2U9TjQoUywyKTtyZXR1cm57czp7cjpHLGM6b2VbMF0sY1JlbDpvZVsxXSxyUmVsOm9lWzJdfSxlOntyOlEsYzpn''@;'; put 'put ''ZVswXSxjUmVsOmdlWzFdLHJSZWw6Z2VbMl19fX0oUywwLGspO3JldHVybltHLFFdfX0sNDY6e246IlB0Z01lbUFyZWFOIixmOmZ1bmN0aW9uIHRiKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpXX19LDQ3OntuOiJQdGdNZW1Ob01lbU4iLGY6ZnVuY3Rp''@;'; put 'put ''b24gbmIoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMildfX0sNTc6e246IlB0Z05hbWVYIixmOmZ1bmN0aW9uIEJCKFMsUixrKXtyZXR1cm4gNT09ay5iaWZmP2Z1bmN0aW9uIGpCKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKT4+PjUmMyxrPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyLCJpIik7Uy5sKz04O3ZhciBHPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0xMixbUixrLEddfShTKTpbUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCldfX0sNTg6e246IlB0Z1JlZjNkIixmOmZ1bmN0aW9uIHREKFMsUixrKXt2''@;'; put 'put ''YXIgRz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrJiY1PT1rLmJpZmYmJihTLmwrPTEyKSxbRyxRLCRrKFMsMCxrKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIHFrKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIsImkiKTtpZihrJiY1PT09ay5iaWZmKVMubCs9MTI7cmV0dXJuW0csUSxWQyhTLDAsayldfX0sNjA6e246IlB0Z1JlZkVycjNkIixmOmZ1bmN0aW9uIG84KFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5yZWFkX3NoaWZ0KDIpLG9lPTQ7aWYoaylzd2l0Y2go''@;'; put 'put ''ay5iaWZmKXtjYXNlIDU6b2U9MTU7YnJlYWs7Y2FzZSAxMjpvZT02fXJldHVybiBTLmwrPW9lLFtHLFFdfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBmbmUoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiksb2U9ODtpZihrKXN3aXRjaChr''@;'; put 'put ''LmJpZmYpe2Nhc2UgNTpTLmwrPTEyLG9lPTY7YnJlYWs7Y2FzZSAxMjpvZT0xMn1yZXR1cm4gUy5sKz1vZSxbRyxRXX19LDI1NTp7fX0sS0M9ezY0OjMyLDk2OjMyLDY1OjMzLDk3OjMzLDY2OjM0LDk4OjM0LDY3OjM1LDk5OjM1LDY4OjM2LDEwMDozNiw2OTozNywxMDE6MzcsNzA6MzgsMTAy''@;'; put 'put ''OjM4LDcxOjM5LDEwMzozOSw3Mjo0MCwxMDQ6NDAsNzM6NDEsMTA1OjQxLDc0OjQyLDEwNjo0Miw3NTo0MywxMDc6NDMsNzY6NDQsMTA4OjQ0LDc3OjQ1LDEwOTo0NSw3ODo0NiwxMTA6NDYsNzk6NDcsMTExOjQ3LDg4OjM0LDEyMDozNCw4OTo1NywxMjE6NTcsOTA6NTgsMTIyOjU4LDkxOjU5''@;'; put 'put ''LDEyMzo1OSw5Mjo2MCwxMjQ6NjAsOTM6NjEsMTI1OjYxfTshZnVuY3Rpb24oKXtmb3IodmFyIFMgaW4gS0MpcmJbU109cmJbS0NbU11dfSgpO3ZhciBxQz17MTp7bjoiUHRnRWxmTGVsIixmOmFEfSwyOntuOiJQdGdFbGZSdyIsZjpHQ30sMzp7bjoiUHRnRWxmQ29sIixmOldCfSw2OntuOiJQ''@;'; put 'put ''dGdFbGZSd1YiLGY6Q25lfSw3OntuOiJQdGdFbGZDb2xWIixmOiRCfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpZQ30sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOnduZX0sMTM6e246IlB0Z0VsZkNvbFMiLGY6WUJ9LDE1OntuOiJQdGdFbGZDb2xTViIsZjpHQn0sMTY6e246IlB0Z0VsZlJh''@;'; put 'put ''ZGljYWxMZWwiLGY6X25lfSwyNTp7bjoiUHRnTGlzdCIsZjpmdW5jdGlvbiBNbmUoUyl7Uy5sKz0yO3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6''@;'; put 'put ''Uixjb2x0eXBlOjMmayxydDpTbmVbaz4+MiYzMV0saWR4OkcsYzpRLEM6b2V9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiB4bmUoUyl7cmV0dXJuIFMubCs9MixbUy5yZWFkX3NoaWZ0KDQpXX19LDI1NTp7fX0sJDM9ezA6e246IlB0Z0F0dHJOb29wIixmOmZ1bmN0aW9uICRDKFMp''@;'; put 'put ''e3JldHVybiBTLmwrPTQsWzAsMF19fSwxOntuOiJQdGdBdHRyU2VtaSIsZjpmdW5jdGlvbiBrQihTLFIsayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz1rJiYyPT1rLmJpZmY/Mzo0LFtHXX19LDI6e246IlB0Z0F0dHJJZiIsZjpmdW5jdGlvbiB2bmUoUyxSLGspe3ZhciBH''@;'; put 'put ''PTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9MixbRyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sNDp7bjoiUHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiB6QyhTLFIsayl7Uy5sKz0yO2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MiksUT1bXSxv''@;'; put 'put ''ZT0wO29lPD1HOysrb2UpUS5wdXNoKFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSk7cmV0dXJuIFF9fSw4OntuOiJQdGdBdHRyR290byIsZjpmdW5jdGlvbiBtbmUoUyxSLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9MixbRyxTLnJlYWRfc2hpZnQoayYmMj09''@;'; put 'put ''ay5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJTdW0iLGY6ZnVuY3Rpb24gZWIoUyxSLGspe1MubCs9ayYmMj09ay5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOmZ1bmN0aW9uIGpDKFMpe3ZhciBSPTEmU1tTLmwrMV07cmV0dXJuIFMubCs9NCxbUiwxXX19LDY0OntuOiJQ''@;'; put 'put ''dGdBdHRyU3BhY2UiLGY6ZnVuY3Rpb24gREIoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxRayhTKX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1pIixmOmZ1bmN0aW9uIElCKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksUWsoUyl9fSwxMjg6e246IlB0Z0F0dHJJZkVycm9yIixmOmZ1bmN0''@;'; put 'put ''aW9uIEprKFMpe3ZhciBSPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9MixbUixTLnJlYWRfc2hpZnQoMildfX0sMjU1Ont9fTtmdW5jdGlvbiBCNChTLFIsayxHLFEpe2lmKEcuYmlmZjw4KXJldHVybiBJbihTLFIpO2Zvcih2YXIgb2U9Uy5sK1IsZ2U9W10scGU9MDtwZSE9PWsubGVu''@;'; put 'put ''Z3RoOysrcGUpc3dpdGNoKGtbcGVdWzBdKXtjYXNlIlB0Z0FycmF5IjprW3BlXVsxXT1OQihTLDAsRyksZ2UucHVzaChrW3BlXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjprW3BlXVsyXT1yRChTLDAsRyksZ2UucHVzaChrW3BlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOkcmJjEyPT1H''@;'; put 'put ''LmJpZmYmJihrW3BlXVsxXVsxXT1TLnJlYWRfc2hpZnQoNCksZ2UucHVzaChrW3BlXVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK2tbcGVdWzBdfXJldHVy''@;'; put 'put ''biBSPW9lLVMubCwhUSYmMCE9PVImJmdlLnB1c2goSW4oUyxSKSksZ2V9ZnVuY3Rpb24gbGgoUyxSLGspe2Zvcih2YXIgUSxvZSxHPVMubCtSLGdlPVtdO0chPVMubDspUj1HLVMubCxRPXJiW29lPVNbUy5sXV0sKDI0PT09b2V8fDI1PT09b2UpJiYoUT0oMjQ9PT1vZT9xQzokMylbU1tTLmwr''@;'; put 'put ''MV1dKSxRJiZRLmY/Z2UucHVzaChbUS5uLFEuZihTLFIsayldKTpJbihTLFIpO3JldHVybiBnZX1mdW5jdGlvbiBGMShTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg7KytrKXtmb3IodmFyIEc9U1trXSxRPVtdLG9lPTA7b2U8Ry5sZW5ndGg7KytvZSl7dmFyIGdlPUdbb2VdO1EucHVz''@;'; put 'put ''aChnZT8yPT09Z2VbMF0/JyInK2dlWzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Z2VbMV06IiIpfVIucHVzaChRLmpvaW4oIiwiKSl9cmV0dXJuIFIuam9pbigiOyIpfSQzWzMzXT0kM1szMl07dmFyIGNoPXtQdGdBZGQ6IisiLFB0Z0NvbmNhdDoiJiIsUHRnRGl2OiIvIixQdGdFcToiPSIs''@;'; put 'put ''UHRnR2U6Ij49IixQdGdHdDoiPiIsUHRnTGU6Ijw9IixQdGdMdDoiPCIsUHRnTXVsOiIqIixQdGdOZToiPD4iLFB0Z1Bvd2VyOiJeIixQdGdTdWI6Ii0ifSxvRD1uZXcgUmVnRXhwKC9bXlx3XHU0RTAwLVx1OUZGRlx1MzA0MC1cdTMwRkZdLyk7ZnVuY3Rpb24gc0QoUyxSLGspe2lmKCFTKXJl''@;'; put 'put ''dHVybiJTSDMzVEpTRVJSMCI7aWYoay5iaWZmPjgmJighUy5YVEl8fCFTLlhUSVtSXSkpcmV0dXJuIFMuU2hlZXROYW1lc1tSXTtpZighUy5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgRz1TLlhUSVtSXTtpZihrLmJpZmY8OClyZXR1cm4gUj4xZTQmJihSLT02NTUzNiksUjwwJiYoUj0t''@;'; put 'put ''UiksMD09Uj8iIjpTLlhUSVtSLTFdO2lmKCFHKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIFE9IiI7aWYoay5iaWZmPjgpc3dpdGNoKFNbR1swXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBRPS0xPT1HWzFdPyIjUkVGIjpTLlNoZWV0TmFtZXNbR1sxXV0sR1sxXT09R1syXT9ROlErIjoiK1MuU2hl''@;'; put 'put ''ZXROYW1lc1tHWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ay5TSUQ/Uy5TaGVldE5hbWVzW2suU0lEXToiU0gzM1RKU1NBTUUiK1NbR1swXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrU1tHWzBdXVswXX1zd2l0Y2goU1tHWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiBR''@;'; put 'put ''PS0xPT1HWzFdPyIjUkVGIjpTLlNoZWV0TmFtZXNbR1sxXV18fCJTSDMzVEpTRVJSMyIsR1sxXT09R1syXT9ROlErIjoiK1MuU2hlZXROYW1lc1tHWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBTW0dbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLk5hbWV9KS5qb2luKCI7''@;'; put 'put ''OyIpO2RlZmF1bHQ6cmV0dXJuIFNbR1swXV1bMF1bM10/KFE9LTE9PUdbMV0/IiNSRUYiOlNbR1swXV1bMF1bM11bR1sxXV18fCJTSDMzVEpTRVJSNCIsR1sxXT09R1syXT9ROlErIjoiK1NbR1swXV1bMF1bM11bR1syXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIHFCKFMsUixrKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gVG5lKFMsUil7aWYoIShTfHxSJiZSLmJpZmY8PTUmJlIuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuLyNSRUYvLnRlc3QoUyk/UzpvRC50ZXN0KFMpPyInIitTKyInIjpTfShzRChTLFIsayksayl9ZnVuY3Rpb24gczAoUyxS''@;'; put 'put ''LGssRyxRLG9lKXt2YXIgUGUsTmUsWWUsRXQsZ2U9USYmUS5iaWZmfHw4LHBlPW9lJiZudWxsIT1SP1I6e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSx5ZT1bXSxldD0wLGN0PTAsYXQ9IiI7aWYoIVNbMF18fCFTWzBdWzBdKXJldHVybiIiO2Zvcih2YXIgYnQ9LTEsanQ9IiIsa3Q9MCxPdD1T''@;'; put 'put ''WzBdLmxlbmd0aDtrdDxPdDsrK2t0KXt2YXIgS3Q9U1swXVtrdF07c3dpdGNoKEt0WzBdKXtjYXNlIlB0Z1VtaW51cyI6eWUucHVzaCgiLSIreWUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOnllLnB1c2goIisiK3llLnBvcCgpKTticmVhaztjYXNlIlB0Z1BlcmNlbnQiOnllLnB1c2go''@;'; put 'put ''eWUucG9wKCkrIiUiKTticmVhaztjYXNlIlB0Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dlIjpjYXNlIlB0Z0d0IjpjYXNlIlB0Z0xlIjpjYXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dlciI6Y2Fz''@;'; put 'put ''ZSJQdGdTdWIiOmlmKFBlPXllLnBvcCgpLE5lPXllLnBvcCgpLGJ0Pj0wKXtzd2l0Y2goU1swXVtidF1bMV1bMF0pe2Nhc2UgMDpqdD1zaSgiICIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpqdD1zaSgiXHIiLFNbMF1bYnRdWzFdWzFdKTticmVhaztkZWZhdWx0OmlmKGp0PSIiLFEu''@;'; put 'put ''V1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrU1swXVtidF1bMV1bMF0pfU5lKz1qdCxidD0tMX15ZS5wdXNoKE5lK2NoW0t0WzBdXStQZSk7YnJlYWs7Y2FzZSJQdGdJc2VjdCI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiICIr''@;'; put 'put ''UGUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOlBlPXllLnBvcCgpLE5lPXllLnBvcCgpLHllLnB1c2goTmUrIiwiK1BlKTticmVhaztjYXNlIlB0Z1JhbmdlIjpQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSx5ZS5wdXNoKE5lKyI6IitQZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0''@;'; put 'put ''Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01lbUFyZWEiOmNhc2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01l''@;'; put 'put ''bU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7Y2FzZSJQdGdSZWYiOlllPXRhKEt0WzFdWzFdLHBlLFEpLHllLnB1c2goVmEoWWUsZ2UpKTticmVhaztjYXNlIlB0Z1Jl''@;'; put 'put ''Zk4iOlllPWs/dGEoS3RbMV1bMV0sayxRKTpLdFsxXVsxXSx5ZS5wdXNoKFZhKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdSZWYzZCI6ZXQ9S3RbMV1bMV0sWWU9dGEoS3RbMV1bMl0scGUsUSksYXQ9cUIoRyxldCxRKSx5ZS5wdXNoKGF0KyIhIitWYShZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnRnVu''@;'; put 'put ''YyI6Y2FzZSJQdGdGdW5jVmFyIjp2YXIgcnI9S3RbMV1bMF0sU249S3RbMV1bMV07cnJ8fChycj0wKTt2YXIgbHI9MD09KHJyJj0xMjcpP1tdOnllLnNsaWNlKC1ycik7eWUubGVuZ3RoLT1yciwiVXNlciI9PT1TbiYmKFNuPWxyLnNoaWZ0KCkpLHllLnB1c2goU24rIigiK2xyLmpvaW4oIiwi''@;'; put 'put ''KSsiKSIpO2JyZWFrO2Nhc2UiUHRnQm9vbCI6eWUucHVzaChLdFsxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNhc2UiUHRnTnVtIjp5ZS5wdXNoKFN0cmluZyhLdFsxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjp5ZS5wdXNoKCciJytLdFsxXS5yZXBsYWNlKC8iL2csJyIi''@;'; put 'put ''JykrJyInKTticmVhaztjYXNlIlB0Z0VyciI6eWUucHVzaChLdFsxXSk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6RXQ9b2EoS3RbMV1bMV0saz97czprfTpwZSxRKSx5ZS5wdXNoKCRvKEV0LFEpKTticmVhaztjYXNlIlB0Z0FyZWEiOkV0PW9hKEt0WzFdWzFdLHBlLFEpLHllLnB1c2goJG8oRXQs''@;'; put 'put ''USkpO2JyZWFrO2Nhc2UiUHRnQXJlYTNkIjpldD1LdFsxXVsxXSxFdD1vYShLdFsxXVsyXSxwZSxRKSxhdD1xQihHLGV0LFEpLHllLnB1c2goYXQrIiEiKyRvKEV0LFEpKTticmVhaztjYXNlIlB0Z0F0dHJTdW0iOnllLnB1c2goIlNVTSgiK3llLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSJQdGdO''@;'; put 'put ''YW1lIjp2YXIgWG49KEcubmFtZXN8fFtdKVsoY3Q9S3RbMV1bMl0pLTFdfHwoR1swXXx8W10pW2N0XSxCbj1Ybj9Ybi5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKGN0KTtCbiBpbiBpYiYmKEJuPWliW0JuXSkseWUucHVzaChCbik7YnJlYWs7Y2FzZSJQdGdOYW1lWCI6dmFyIGJyLGZyPUt0''@;'; put 'put ''WzFdWzFdO2lmKGN0PUt0WzFdWzJdLCEoUS5iaWZmPD01KSl7dmFyIGVyPSIiO2lmKDE0ODQ5PT0oKEdbZnJdfHxbXSlbMF18fFtdKVswXXx8KDEwMjU9PSgoR1tmcl18fFtdKVswXXx8W10pWzBdP0dbZnJdW2N0XSYmR1tmcl1bY3RdLml0YWI+MCYmKGVyPUcuU2hlZXROYW1lc1tHW2ZyXVtj''@;'; put 'put ''dF0uaXRhYi0xXSsiISIpOmVyPUcuU2hlZXROYW1lc1tjdC0xXSsiISIpLEdbZnJdJiZHW2ZyXVtjdF0pZXIrPUdbZnJdW2N0XS5OYW1lO2Vsc2UgaWYoR1swXSYmR1swXVtjdF0pZXIrPUdbMF1bY3RdLk5hbWU7ZWxzZXt2YXIgRmk9KHNEKEcsZnIsUSl8fCIiKS5zcGxpdCgiOzsiKTtGaVtj''@;'; put 'put ''dC0xXT9lcj1GaVtjdC0xXTplcis9IlNIMzNUSlNFUlJYIn15ZS5wdXNoKGVyKTticmVha31mcjwwJiYoZnI9LWZyKSxHW2ZyXSYmKGJyPUdbZnJdW2N0XSksYnJ8fChicj17TmFtZToiU0gzM1RKU0VSUlkifSkseWUucHVzaChici5OYW1lKTticmVhaztjYXNlIlB0Z1BhcmVuIjp2YXIgbmE9''@;'; put 'put ''IigiLGNhPSIpIjtpZihidD49MCl7c3dpdGNoKGp0PSIiLFNbMF1bYnRdWzFdWzBdKXtjYXNlIDI6bmE9c2koIiAiLFNbMF1bYnRdWzFdWzFdKStuYTticmVhaztjYXNlIDM6bmE9c2koIlxyIixTWzBdW2J0XVsxXVsxXSkrbmE7YnJlYWs7Y2FzZSA0OmNhPXNpKCIgIixTWzBdW2J0XVsxXVsx''@;'; put 'put ''XSkrY2E7YnJlYWs7Y2FzZSA1OmNhPXNpKCJcciIsU1swXVtidF1bMV1bMV0pK2NhO2JyZWFrO2RlZmF1bHQ6aWYoUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9YnQ9LTF9eWUucHVzaChuYSt5ZS5wb3AoKStjYSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJQdGdSZWZFcnIiOmNhc2UiUHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOnllLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBrcj17YzprLmMscjprLnJ9O2lmKEcuc2hhcmVkZltxaShZZT17YzpLdFsxXVsxXSxy''@;'; put 'put ''Okt0WzFdWzBdfSldKXt2YXIgVm49Ry5zaGFyZWRmW3FpKFllKV07eWUucHVzaChzMChWbixwZSxrcixHLFEpKX1lbHNle3ZhciBCcj0hMTtmb3IoUGU9MDtQZSE9Ry5hcnJheWYubGVuZ3RoOysrUGUpaWYoIShZZS5jPChOZT1HLmFycmF5ZltQZV0pWzBdLnMuY3x8WWUuYz5OZVswXS5lLmN8''@;'; put 'put ''fFllLnI8TmVbMF0ucy5yfHxZZS5yPk5lWzBdLmUucikpe3llLnB1c2goczAoTmVbMV0scGUsa3IsRyxRKSksQnI9ITA7YnJlYWt9QnJ8fHllLnB1c2goS3RbMV0pfWJyZWFrO2Nhc2UiUHRnQXJyYXkiOnllLnB1c2goInsiK0YxKEt0WzFdKSsifSIpO2JyZWFrO2Nhc2UiUHRnQXR0clNwYWNl''@;'; put 'put ''IjpjYXNlIlB0Z0F0dHJTcGFjZVNlbWkiOmJ0PWt0O2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6eWUucHVzaCgiIik7YnJlYWs7Y2FzZSJQdGdMaXN0Ijp5ZS5wdXNoKCJUYWJsZSIrS3RbMV0uaWR4KyJbIyIrS3RbMV0ucnQrIl0iKTticmVhaztjYXNlIlB0Z0VsZkNvbCI6Y2FzZSJQdGdFbGZD''@;'; put 'put ''b2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjpjYXNlIlB0Z0VsZkNvbFYiOmNhc2UiUHRnRWxmTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWwiOmNhc2UiUHRnRWxmUmFkaWNhbExlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZSdyI6Y2FzZSJQdGdFbGZSd1YiOnRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5zdXBwb3J0ZWQgRUxGcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogIitTdHJpbmcoS3QpKX1pZigzIT1RLmJpZmYmJmJ0Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5p''@;'; put 'put ''bmRleE9mKFNbMF1ba3RdWzBdKSl7dmFyIEZuPSEwO3N3aXRjaCgoS3Q9U1swXVtidF0pWzFdWzBdKXtjYXNlIDQ6Rm49ITE7Y2FzZSAwOmp0PXNpKCIgIixLdFsxXVsxXSk7YnJlYWs7Y2FzZSA1OkZuPSExO2Nhc2UgMTpqdD1zaSgiXHIiLEt0WzFdWzFdKTticmVhaztkZWZhdWx0OmlmKGp0''@;'; put 'put ''PSIiLFEuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrS3RbMV1bMF0pfXllLnB1c2goKEZuP2p0OiIiKSt5ZS5wb3AoKSsoRm4/IiI6anQpKSxidD0tMX19aWYoeWUubGVuZ3RoPjEmJlEuV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEg''@;'; put 'put ''c3RhY2siKTtyZXR1cm4geWVbMF19ZnVuY3Rpb24gbEQoUyxSLGspe3ZhciBvZSxHPVMubCtSLFE9Mj09ay5iaWZmPzE6MixnZT1TLnJlYWRfc2hpZnQoUSk7aWYoNjU1MzU9PWdlKXJldHVybltbXSxJbihTLFItMildO3ZhciBwZT1saChTLGdlLGspO3JldHVybiBSIT09Z2UrUSYmKG9lPUI0''@;'; put 'put ''KFMsUi1nZS1RLHBlLGspKSxTLmw9RyxbcGUsb2VdfWZ1bmN0aW9uIEszKFMsUixrKXt2YXIgUSxHPVMubCtSLG9lPVMucmVhZF9zaGlmdCgyKSxnZT1saChTLG9lLGspO3JldHVybiA2NTUzNT09b2U/W1tdLEluKFMsUi0yKV06KFIhPT1vZSsyJiYoUT1CNChTLEctb2UtMixnZSxrKSksW2dl''@;'; put 'put ''LFFdKX1mdW5jdGlvbiBRQyhTLFIsayl7dmFyIEc9Uy5sK1IsUT13MChTKTsyPT1rLmJpZmYmJisrUy5sO3ZhciBvZT1mdW5jdGlvbiBYQyhTKXt2YXIgUjtpZig2NTUzNSE9PWVvKFMsUy5sKzYpKXJldHVybltQbChTKSwibiJdO3N3aXRjaChTW1MubF0pe2Nhc2UgMDpyZXR1cm4gUy5sKz04''@;'; put 'put ''LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gUj0xPT09U1tTLmwrMl0sUy5sKz04LFtSLCJiIl07Y2FzZSAyOnJldHVybiBSPVNbUy5sKzJdLFMubCs9OCxbUiwiZSJdO2Nhc2UgMzpyZXR1cm4gUy5sKz04LFsiIiwicyJdfXJldHVybltdfShTKSxnZT1TLnJlYWRfc2hpZnQoMSk7MiE9''@;'; put 'put ''ay5iaWZmJiYoUy5yZWFkX3NoaWZ0KDEpLGsuYmlmZj49NSYmUy5yZWFkX3NoaWZ0KDQpKTt2YXIgcGU9ZnVuY3Rpb24gY0QoUyxSLGspe3ZhciBvZSxHPVMubCtSLFE9Mj09ay5iaWZmPzE6MixnZT1TLnJlYWRfc2hpZnQoUSk7aWYoNjU1MzU9PWdlKXJldHVybltbXSxJbihTLFItMildO3Zh''@;'; put 'put ''ciBwZT1saChTLGdlLGspO3JldHVybiBSIT09Z2UrUSYmKG9lPUI0KFMsUi1nZS1RLHBlLGspKSxTLmw9RyxbcGUsb2VdfShTLEctUy5sLGspO3JldHVybntjZWxsOlEsdmFsOm9lWzBdLGZvcm11bGE6cGUsc2hhcmVkOmdlPj4zJjEsdHQ6b2VbMV19fWZ1bmN0aW9uIGo0KFMsUixrKXt2YXIg''@;'; put 'put ''Rz1TLnJlYWRfc2hpZnQoNCksUT1saChTLEcsayksb2U9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybltRLG9lPjA/QjQoUyxvZSxRLGssITApOm51bGxdfXZhciBlUz1qNCx6ND1qNCxkRD1qNCxYQj1mdW5jdGlvbiB1RChTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLG9lPWxoKFMsRyxrKTtyZXR1cm5bb2UsUT4wP0I0KFMsUSxvZSxrLCEwKTpudWxsXX0saEQ9ajQsSkI9ajQ7ZnVuY3Rpb24gdFMoUyl7aWYoKDB8Uyk9PVMmJlM8TWF0aC5wb3coMiwxNikmJlM+PTApe3ZhciBSPWJuKDExKTtyZXR1cm4gUi53cml0ZV9zaGlmdCg0LDMpLFIud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwzMCksUi53cml0ZV9zaGlmdCgyLFMpLFIud3JpdGVfc2hpZnQoNCwwKSxSfXZhciBrPWJuKDE3KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDExKSxrLndyaXRlX3NoaWZ0KDEsMzEpLGsud3JpdGVfc2hpZnQoOCxTKSxrLndyaXRlX3NoaWZ0KDQsMCksa31mdW5jdGlvbiBuUyhT''@;'; put 'put ''KXt2YXIgUj1ibig3KTtSLndyaXRlX3NoaWZ0KDQsMysyKlMubGVuZ3RoKSxSLndyaXRlX3NoaWZ0KDEsMjMpLFIud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7dmFyIGs9Ym4oMipTLmxlbmd0aCk7ay53cml0ZV9zaGlmdCgyKlMubGVuZ3RoLFMsInV0ZjE2bGUiKTt2YXIgRz1ibig0KTtyZXR1''@;'; put 'put ''cm4gRy53cml0ZV9zaGlmdCg0LDApLGooW1IsayxHXSl9ZnVuY3Rpb24gVTQoUyl7aWYoUy5tYXRjaCgvXiMoRElWXC8wIXxHRVRUSU5HX0RBVEF8TlwvQXxOQU1FXD98TlVMTCF8TlVNIXxSRUYhfFZBTFVFISkkLykpcmV0dXJuIGZ1bmN0aW9uIFFCKFMpe3ZhciBSPWJuKDEwKTtyZXR1cm4g''@;'; put 'put ''Ui53cml0ZV9zaGlmdCg0LDIpLFIud3JpdGVfc2hpZnQoMSwyOCksUi53cml0ZV9zaGlmdCgxLFMpLFIud3JpdGVfc2hpZnQoNCwwKSxSfSgrUDNbU10pO2lmKFMubWF0Y2goL15cJD8oPzpbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF18W0EtWl17MSwyfSlcJD8oPzoxMFswLTNd''@;'; put 'put ''XGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSQvKSlyZXR1cm4gZnVuY3Rpb24gczgoUyl7dmFyIFI9Tm8oUyksaz1ibigxNSk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCw3KSxrLndyaXRlX3NoaWZ0KDEsMzYp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoNCxSLnIpLGsud3JpdGVfc2hpZnQoMixSLmN8KCIkIj09Uy5jaGFyQXQoMCk/MDoxKTw8MTR8KFMubWF0Y2goL1wkXGQvKT8wOjEpPDwxNSksay53cml0ZV9zaGlmdCg0LDApLGt9KFMpO2lmKFMubWF0Y2goL14iLioiJC8pKXJldHVybiBuUyhTKTt0aHJvdyJGb3Jt''@;'; put 'put ''dWxhIHwiK1MrInwgbm90IHN1cHBvcnRlZCBmb3IgWExTQiJ9dmFyIHJTPXswOiJCRUVQIiwxOiJPUEVOIiwyOiJPUEVOLkxJTktTIiwzOiJDTE9TRS5BTEwiLDQ6IlNBVkUiLDU6IlNBVkUuQVMiLDY6IkZJTEUuREVMRVRFIiw3OiJQQUdFLlNFVFVQIiw4OiJQUklOVCIsOToiUFJJTlRFUi5T''@;'; put 'put ''RVRVUCIsMTA6IlFVSVQiLDExOiJORVcuV0lORE9XIiwxMjoiQVJSQU5HRS5BTEwiLDEzOiJXSU5ET1cuU0laRSIsMTQ6IldJTkRPVy5NT1ZFIiwxNToiRlVMTCIsMTY6IkNMT1NFIiwxNzoiUlVOIiwyMjoiU0VULlBSSU5ULkFSRUEiLDIzOiJTRVQuUFJJTlQuVElUTEVTIiwyNDoiU0VULlBB''@;'; put 'put ''R0UuQlJFQUsiLDI1OiJSRU1PVkUuUEFHRS5CUkVBSyIsMjY6IkZPTlQiLDI3OiJESVNQTEFZIiwyODoiUFJPVEVDVC5ET0NVTUVOVCIsMjk6IlBSRUNJU0lPTiIsMzA6IkExLlIxQzEiLDMxOiJDQUxDVUxBVEUuTk9XIiwzMjoiQ0FMQ1VMQVRJT04iLDM0OiJEQVRBLkZJTkQiLDM1OiJFWFRS''@;'; put 'put ''QUNUIiwzNjoiREFUQS5ERUxFVEUiLDM3OiJTRVQuREFUQUJBU0UiLDM4OiJTRVQuQ1JJVEVSSUEiLDM5OiJTT1JUIiw0MDoiREFUQS5TRVJJRVMiLDQxOiJUQUJMRSIsNDI6IkZPUk1BVC5OVU1CRVIiLDQzOiJBTElHTk1FTlQiLDQ0OiJTVFlMRSIsNDU6IkJPUkRFUiIsNDY6IkNFTEwuUFJP''@;'; put 'put ''VEVDVElPTiIsNDc6IkNPTFVNTi5XSURUSCIsNDg6IlVORE8iLDQ5OiJDVVQiLDUwOiJDT1BZIiw1MToiUEFTVEUiLDUyOiJDTEVBUiIsNTM6IlBBU1RFLlNQRUNJQUwiLDU0OiJFRElULkRFTEVURSIsNTU6IklOU0VSVCIsNTY6IkZJTEwuUklHSFQiLDU3OiJGSUxMLkRPV04iLDYxOiJERUZJ''@;'; put 'put ''TkUuTkFNRSIsNjI6IkNSRUFURS5OQU1FUyIsNjM6IkZPUk1VTEEuR09UTyIsNjQ6IkZPUk1VTEEuRklORCIsNjU6IlNFTEVDVC5MQVNULkNFTEwiLDY2OiJTSE9XLkFDVElWRS5DRUxMIiw2NzoiR0FMTEVSWS5BUkVBIiw2ODoiR0FMTEVSWS5CQVIiLDY5OiJHQUxMRVJZLkNPTFVNTiIsNzA6''@;'; put 'put ''IkdBTExFUlkuTElORSIsNzE6IkdBTExFUlkuUElFIiw3MjoiR0FMTEVSWS5TQ0FUVEVSIiw3MzoiQ09NQklOQVRJT04iLDc0OiJQUkVGRVJSRUQiLDc1OiJBREQuT1ZFUkxBWSIsNzY6IkdSSURMSU5FUyIsNzc6IlNFVC5QUkVGRVJSRUQiLDc4OiJBWEVTIiw3OToiTEVHRU5EIiw4MDoiQVRU''@;'; put 'put ''QUNILlRFWFQiLDgxOiJBREQuQVJST1ciLDgyOiJTRUxFQ1QuQ0hBUlQiLDgzOiJTRUxFQ1QuUExPVC5BUkVBIiw4NDoiUEFUVEVSTlMiLDg1OiJNQUlOLkNIQVJUIiw4NjoiT1ZFUkxBWSIsODc6IlNDQUxFIiw4ODoiRk9STUFULkxFR0VORCIsODk6IkZPUk1BVC5URVhUIiw5MDoiRURJVC5S''@;'; put 'put ''RVBFQVQiLDkxOiJQQVJTRSIsOTI6IkpVU1RJRlkiLDkzOiJISURFIiw5NDoiVU5ISURFIiw5NToiV09SS1NQQUNFIiw5NjoiRk9STVVMQSIsOTc6IkZPUk1VTEEuRklMTCIsOTg6IkZPUk1VTEEuQVJSQVkiLDk5OiJEQVRBLkZJTkQuTkVYVCIsMTAwOiJEQVRBLkZJTkQuUFJFViIsMTAxOiJG''@;'; put 'put ''T1JNVUxBLkZJTkQuTkVYVCIsMTAyOiJGT1JNVUxBLkZJTkQuUFJFViIsMTAzOiJBQ1RJVkFURSIsMTA0OiJBQ1RJVkFURS5ORVhUIiwxMDU6IkFDVElWQVRFLlBSRVYiLDEwNjoiVU5MT0NLRUQuTkVYVCIsMTA3OiJVTkxPQ0tFRC5QUkVWIiwxMDg6IkNPUFkuUElDVFVSRSIsMTA5OiJTRUxF''@;'; put 'put ''Q1QiLDExMDoiREVMRVRFLk5BTUUiLDExMToiREVMRVRFLkZPUk1BVCIsMTEyOiJWTElORSIsMTEzOiJITElORSIsMTE0OiJWUEFHRSIsMTE1OiJIUEFHRSIsMTE2OiJWU0NST0xMIiwxMTc6IkhTQ1JPTEwiLDExODoiQUxFUlQiLDExOToiTkVXIiwxMjA6IkNBTkNFTC5DT1BZIiwxMjE6IlNI''@;'; put 'put ''T1cuQ0xJUEJPQVJEIiwxMjI6Ik1FU1NBR0UiLDEyNDoiUEFTVEUuTElOSyIsMTI1OiJBUFAuQUNUSVZBVEUiLDEyNjoiREVMRVRFLkFSUk9XIiwxMjc6IlJPVy5IRUlHSFQiLDEyODoiRk9STUFULk1PVkUiLDEyOToiRk9STUFULlNJWkUiLDEzMDoiRk9STVVMQS5SRVBMQUNFIiwxMzE6IlNF''@;'; put 'put ''TkQuS0VZUyIsMTMyOiJTRUxFQ1QuU1BFQ0lBTCIsMTMzOiJBUFBMWS5OQU1FUyIsMTM0OiJSRVBMQUNFLkZPTlQiLDEzNToiRlJFRVpFLlBBTkVTIiwxMzY6IlNIT1cuSU5GTyIsMTM3OiJTUExJVCIsMTM4OiJPTi5XSU5ET1ciLDEzOToiT04uREFUQSIsMTQwOiJESVNBQkxFLklOUFVUIiwx''@;'; put 'put ''NDI6Ik9VVExJTkUiLDE0MzoiTElTVC5OQU1FUyIsMTQ0OiJGSUxFLkNMT1NFIiwxNDU6IlNBVkUuV09SS0JPT0siLDE0NjoiREFUQS5GT1JNIiwxNDc6IkNPUFkuQ0hBUlQiLDE0ODoiT04uVElNRSIsMTQ5OiJXQUlUIiwxNTA6IkZPUk1BVC5GT05UIiwxNTE6IkZJTEwuVVAiLDE1MjoiRklM''@;'; put 'put ''TC5MRUZUIiwxNTM6IkRFTEVURS5PVkVSTEFZIiwxNTU6IlNIT1JULk1FTlVTIiwxNTk6IlNFVC5VUERBVEUuU1RBVFVTIiwxNjE6IkNPTE9SLlBBTEVUVEUiLDE2MjoiREVMRVRFLlNUWUxFIiwxNjM6IldJTkRPVy5SRVNUT1JFIiwxNjQ6IldJTkRPVy5NQVhJTUlaRSIsMTY2OiJDSEFOR0Uu''@;'; put 'put ''TElOSyIsMTY3OiJDQUxDVUxBVEUuRE9DVU1FTlQiLDE2ODoiT04uS0VZIiwxNjk6IkFQUC5SRVNUT1JFIiwxNzA6IkFQUC5NT1ZFIiwxNzE6IkFQUC5TSVpFIiwxNzI6IkFQUC5NSU5JTUlaRSIsMTczOiJBUFAuTUFYSU1JWkUiLDE3NDoiQlJJTkcuVE8uRlJPTlQiLDE3NToiU0VORC5UTy5C''@;'; put 'put ''QUNLIiwxODU6Ik1BSU4uQ0hBUlQuVFlQRSIsMTg2OiJPVkVSTEFZLkNIQVJULlRZUEUiLDE4NzoiU0VMRUNULkVORCIsMTg4OiJPUEVOLk1BSUwiLDE4OToiU0VORC5NQUlMIiwxOTA6IlNUQU5EQVJELkZPTlQiLDE5MToiQ09OU09MSURBVEUiLDE5MjoiU09SVC5TUEVDSUFMIiwxOTM6IkdB''@;'; put 'put ''TExFUlkuM0QuQVJFQSIsMTk0OiJHQUxMRVJZLjNELkNPTFVNTiIsMTk1OiJHQUxMRVJZLjNELkxJTkUiLDE5NjoiR0FMTEVSWS4zRC5QSUUiLDE5NzoiVklFVy4zRCIsMTk4OiJHT0FMLlNFRUsiLDE5OToiV09SS0dST1VQIiwyMDA6IkZJTEwuR1JPVVAiLDIwMToiVVBEQVRFLkxJTksiLDIw''@;'; put 'put ''MjoiUFJPTU9URSIsMjAzOiJERU1PVEUiLDIwNDoiU0hPVy5ERVRBSUwiLDIwNjoiVU5HUk9VUCIsMjA3OiJPQkpFQ1QuUFJPUEVSVElFUyIsMjA4OiJTQVZFLk5FVy5PQkpFQ1QiLDIwOToiU0hBUkUiLDIxMDoiU0hBUkUuTkFNRSIsMjExOiJEVVBMSUNBVEUiLDIxMjoiQVBQTFkuU1RZTEUi''@;'; put 'put ''LDIxMzoiQVNTSUdOLlRPLk9CSkVDVCIsMjE0OiJPQkpFQ1QuUFJPVEVDVElPTiIsMjE1OiJISURFLk9CSkVDVCIsMjE2OiJTRVQuRVhUUkFDVCIsMjE3OiJDUkVBVEUuUFVCTElTSEVSIiwyMTg6IlNVQlNDUklCRS5UTyIsMjE5OiJBVFRSSUJVVEVTIiwyMjA6IlNIT1cuVE9PTEJBUiIsMjIy''@;'; put 'put ''OiJQUklOVC5QUkVWSUVXIiwyMjM6IkVESVQuQ09MT1IiLDIyNDoiU0hPVy5MRVZFTFMiLDIyNToiRk9STUFULk1BSU4iLDIyNjoiRk9STUFULk9WRVJMQVkiLDIyNzoiT04uUkVDQUxDIiwyMjg6IkVESVQuU0VSSUVTIiwyMjk6IkRFRklORS5TVFlMRSIsMjQwOiJMSU5FLlBSSU5UIiwyNDM6''@;'; put 'put ''IkVOVEVSLkRBVEEiLDI0OToiR0FMTEVSWS5SQURBUiIsMjUwOiJNRVJHRS5TVFlMRVMiLDI1MToiRURJVElPTi5PUFRJT05TIiwyNTI6IlBBU1RFLlBJQ1RVUkUiLDI1MzoiUEFTVEUuUElDVFVSRS5MSU5LIiwyNTQ6IlNQRUxMSU5HIiwyNTY6IlpPT00iLDI1OToiSU5TRVJULk9CSkVDVCIs''@;'; put 'put ''MjYwOiJXSU5ET1cuTUlOSU1JWkUiLDI2NToiU09VTkQuTk9URSIsMjY2OiJTT1VORC5QTEFZIiwyNjc6IkZPUk1BVC5TSEFQRSIsMjY4OiJFWFRFTkQuUE9MWUdPTiIsMjY5OiJGT1JNQVQuQVVUTyIsMjcyOiJHQUxMRVJZLjNELkJBUiIsMjczOiJHQUxMRVJZLjNELlNVUkZBQ0UiLDI3NDoi''@;'; put 'put ''RklMTC5BVVRPIiwyNzY6IkNVU1RPTUlaRS5UT09MQkFSIiwyNzc6IkFERC5UT09MIiwyNzg6IkVESVQuT0JKRUNUIiwyNzk6Ik9OLkRPVUJMRUNMSUNLIiwyODA6Ik9OLkVOVFJZIiwyODE6IldPUktCT09LLkFERCIsMjgyOiJXT1JLQk9PSy5NT1ZFIiwyODM6IldPUktCT09LLkNPUFkiLDI4''@;'; put 'put ''NDoiV09SS0JPT0suT1BUSU9OUyIsMjg1OiJTQVZFLldPUktTUEFDRSIsMjg4OiJDSEFSVC5XSVpBUkQiLDI4OToiREVMRVRFLlRPT0wiLDI5MDoiTU9WRS5UT09MIiwyOTE6IldPUktCT09LLlNFTEVDVCIsMjkyOiJXT1JLQk9PSy5BQ1RJVkFURSIsMjkzOiJBU1NJR04uVE8uVE9PTCIsMjk1''@;'; put 'put ''OiJDT1BZLlRPT0wiLDI5NjoiUkVTRVQuVE9PTCIsMjk3OiJDT05TVFJBSU4uTlVNRVJJQyIsMjk4OiJQQVNURS5UT09MIiwzMDI6IldPUktCT09LLk5FVyIsMzA1OiJTQ0VOQVJJTy5DRUxMUyIsMzA2OiJTQ0VOQVJJTy5ERUxFVEUiLDMwNzoiU0NFTkFSSU8uQUREIiwzMDg6IlNDRU5BUklP''@;'; put 'put ''LkVESVQiLDMwOToiU0NFTkFSSU8uU0hPVyIsMzEwOiJTQ0VOQVJJTy5TSE9XLk5FWFQiLDMxMToiU0NFTkFSSU8uU1VNTUFSWSIsMzEyOiJQSVZPVC5UQUJMRS5XSVpBUkQiLDMxMzoiUElWT1QuRklFTEQuUFJPUEVSVElFUyIsMzE0OiJQSVZPVC5GSUVMRCIsMzE1OiJQSVZPVC5JVEVNIiwz''@;'; put 'put ''MTY6IlBJVk9ULkFERC5GSUVMRFMiLDMxODoiT1BUSU9OUy5DQUxDVUxBVElPTiIsMzE5OiJPUFRJT05TLkVESVQiLDMyMDoiT1BUSU9OUy5WSUVXIiwzMjE6IkFERElOLk1BTkFHRVIiLDMyMjoiTUVOVS5FRElUT1IiLDMyMzoiQVRUQUNILlRPT0xCQVJTIiwzMjQ6IlZCQUFjdGl2YXRlIiwz''@;'; put 'put ''MjU6Ik9QVElPTlMuQ0hBUlQiLDMyODoiVkJBLklOU0VSVC5GSUxFIiwzMzA6IlZCQS5QUk9DRURVUkUuREVGSU5JVElPTiIsMzM2OiJST1VUSU5HLlNMSVAiLDMzODoiUk9VVEUuRE9DVU1FTlQiLDMzOToiTUFJTC5MT0dPTiIsMzQyOiJJTlNFUlQuUElDVFVSRSIsMzQzOiJFRElULlRPT0wi''@;'; put 'put ''LDM0NDoiR0FMTEVSWS5ET1VHSE5VVCIsMzUwOiJDSEFSVC5UUkVORCIsMzUyOiJQSVZPVC5JVEVNLlBST1BFUlRJRVMiLDM1NDoiV09SS0JPT0suSU5TRVJUIiwzNTU6Ik9QVElPTlMuVFJBTlNJVElPTiIsMzU2OiJPUFRJT05TLkdFTkVSQUwiLDM3MDoiRklMVEVSLkFEVkFOQ0VEIiwzNzM6''@;'; put 'put ''Ik1BSUwuQURELk1BSUxFUiIsMzc0OiJNQUlMLkRFTEVURS5NQUlMRVIiLDM3NToiTUFJTC5SRVBMWSIsMzc2OiJNQUlMLlJFUExZLkFMTCIsMzc3OiJNQUlMLkZPUldBUkQiLDM3ODoiTUFJTC5ORVhULkxFVFRFUiIsMzc5OiJEQVRBLkxBQkVMIiwzODA6IklOU0VSVC5USVRMRSIsMzgxOiJG''@;'; put 'put ''T05ULlBST1BFUlRJRVMiLDM4MjoiTUFDUk8uT1BUSU9OUyIsMzgzOiJXT1JLQk9PSy5ISURFIiwzODQ6IldPUktCT09LLlVOSElERSIsMzg1OiJXT1JLQk9PSy5ERUxFVEUiLDM4NjoiV09SS0JPT0suTkFNRSIsMzg4OiJHQUxMRVJZLkNVU1RPTSIsMzkwOiJBREQuQ0hBUlQuQVVUT0ZPUk1B''@;'; put 'put ''VCIsMzkxOiJERUxFVEUuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkyOiJDSEFSVC5BREQuREFUQSIsMzkzOiJBVVRPLk9VVExJTkUiLDM5NDoiVEFCLk9SREVSIiwzOTU6IlNIT1cuRElBTE9HIiwzOTY6IlNFTEVDVC5BTEwiLDM5NzoiVU5HUk9VUC5TSEVFVFMiLDM5ODoiU1VCVE9UQUwuQ1JFQVRF''@;'; put 'put ''IiwzOTk6IlNVQlRPVEFMLlJFTU9WRSIsNDAwOiJSRU5BTUUuT0JKRUNUIiw0MTI6IldPUktCT09LLlNDUk9MTCIsNDEzOiJXT1JLQk9PSy5ORVhUIiw0MTQ6IldPUktCT09LLlBSRVYiLDQxNToiV09SS0JPT0suVEFCLlNQTElUIiw0MTY6IkZVTEwuU0NSRUVOIiw0MTc6IldPUktCT09LLlBS''@;'; put 'put ''T1RFQ1QiLDQyMDoiU0NST0xMQkFSLlBST1BFUlRJRVMiLDQyMToiUElWT1QuU0hPVy5QQUdFUyIsNDIyOiJURVhULlRPLkNPTFVNTlMiLDQyMzoiRk9STUFULkNIQVJUVFlQRSIsNDI0OiJMSU5LLkZPUk1BVCIsNDI1OiJUUkFDRVIuRElTUExBWSIsNDMwOiJUUkFDRVIuTkFWSUdBVEUiLDQz''@;'; put 'put ''MToiVFJBQ0VSLkNMRUFSIiw0MzI6IlRSQUNFUi5FUlJPUiIsNDMzOiJQSVZPVC5GSUVMRC5HUk9VUCIsNDM0OiJQSVZPVC5GSUVMRC5VTkdST1VQIiw0MzU6IkNIRUNLQk9YLlBST1BFUlRJRVMiLDQzNjoiTEFCRUwuUFJPUEVSVElFUyIsNDM3OiJMSVNUQk9YLlBST1BFUlRJRVMiLDQzODoi''@;'; put 'put ''RURJVEJPWC5QUk9QRVJUSUVTIiw0Mzk6IlBJVk9ULlJFRlJFU0giLDQ0MDoiTElOSy5DT01CTyIsNDQxOiJPUEVOLlRFWFQiLDQ0MjoiSElERS5ESUFMT0ciLDQ0MzoiU0VULkRJQUxPRy5GT0NVUyIsNDQ0OiJFTkFCTEUuT0JKRUNUIiw0NDU6IlBVU0hCVVRUT04uUFJPUEVSVElFUyIsNDQ2''@;'; put 'put ''OiJTRVQuRElBTE9HLkRFRkFVTFQiLDQ0NzoiRklMVEVSIiw0NDg6IkZJTFRFUi5TSE9XLkFMTCIsNDQ5OiJDTEVBUi5PVVRMSU5FIiw0NTA6IkZVTkNUSU9OLldJWkFSRCIsNDUxOiJBREQuTElTVC5JVEVNIiw0NTI6IlNFVC5MSVNULklURU0iLDQ1MzoiUkVNT1ZFLkxJU1QuSVRFTSIsNDU0''@;'; put 'put ''OiJTRUxFQ1QuTElTVC5JVEVNIiw0NTU6IlNFVC5DT05UUk9MLlZBTFVFIiw0NTY6IlNBVkUuQ09QWS5BUyIsNDU4OiJPUFRJT05TLkxJU1RTLkFERCIsNDU5OiJPUFRJT05TLkxJU1RTLkRFTEVURSIsNDYwOiJTRVJJRVMuQVhFUyIsNDYxOiJTRVJJRVMuWCIsNDYyOiJTRVJJRVMuWSIsNDYz''@;'; put 'put ''OiJFUlJPUkJBUi5YIiw0NjQ6IkVSUk9SQkFSLlkiLDQ2NToiRk9STUFULkNIQVJUIiw0NjY6IlNFUklFUy5PUkRFUiIsNDY3OiJNQUlMLkxPR09GRiIsNDY4OiJDTEVBUi5ST1VUSU5HLlNMSVAiLDQ2OToiQVBQLkFDVElWQVRFLk1JQ1JPU09GVCIsNDcwOiJNQUlMLkVESVQuTUFJTEVSIiw0''@;'; put 'put ''NzE6Ik9OLlNIRUVUIiw0NzI6IlNUQU5EQVJELldJRFRIIiw0NzM6IlNDRU5BUklPLk1FUkdFIiw0NzQ6IlNVTU1BUlkuSU5GTyIsNDc1OiJGSU5ELkZJTEUiLDQ3NjoiQUNUSVZFLkNFTEwuRk9OVCIsNDc3OiJFTkFCTEUuVElQV0laQVJEIiw0Nzg6IlZCQS5NQUtFLkFERElOIiw0ODA6IklO''@;'; put 'put ''U0VSVERBVEFUQUJMRSIsNDgxOiJXT1JLR1JPVVAuT1BUSU9OUyIsNDgyOiJNQUlMLlNFTkQuTUFJTEVSIiw0ODU6IkFVVE9DT1JSRUNUIiw0ODk6IlBPU1QuRE9DVU1FTlQiLDQ5MToiUElDS0xJU1QiLDQ5MzoiVklFVy5TSE9XIiw0OTQ6IlZJRVcuREVGSU5FIiw0OTU6IlZJRVcuREVMRVRF''@;'; put 'put ''Iiw1MDk6IlNIRUVULkJBQ0tHUk9VTkQiLDUxMDoiSU5TRVJULk1BUC5PQkpFQ1QiLDUxMToiT1BUSU9OUy5NRU5PTk8iLDUxNzoiTVNPQ0hFQ0tTIiw1MTg6Ik5PUk1BTCIsNTE5OiJMQVlPVVQiLDUyMDoiUk0uUFJJTlQuQVJFQSIsNTIxOiJDTEVBUi5QUklOVC5BUkVBIiw1MjI6IkFERC5Q''@;'; put 'put ''UklOVC5BUkVBIiw1MjM6Ik1PVkUuQlJLIiw1NDU6IkhJREVDVVJSLk5PVEUiLDU0NjoiSElERUFMTC5OT1RFUyIsNTQ3OiJERUxFVEUuTk9URSIsNTQ4OiJUUkFWRVJTRS5OT1RFUyIsNTQ5OiJBQ1RJVkFURS5OT1RFUyIsNjIwOiJQUk9URUNULlJFVklTSU9OUyIsNjIxOiJVTlBST1RFQ1Qu''@;'; put 'put ''UkVWSVNJT05TIiw2NDc6Ik9QVElPTlMuTUUiLDY1MzoiV0VCLlBVQkxJU0giLDY2NzoiTkVXV0VCUVVFUlkiLDY3MzoiUElWT1QuVEFCTEUuQ0hBUlQiLDc1MzoiT1BUSU9OUy5TQVZFIiw3NTU6Ik9QVElPTlMuU1BFTEwiLDgwODoiSElERUFMTC5JTktBTk5PVFMifSxmRD17MDoiQ09VTlQi''@;'; put 'put ''LDE6IklGIiwyOiJJU05BIiwzOiJJU0VSUk9SIiw0OiJTVU0iLDU6IkFWRVJBR0UiLDY6Ik1JTiIsNzoiTUFYIiw4OiJST1ciLDk6IkNPTFVNTiIsMTA6Ik5BIiwxMToiTlBWIiwxMjoiU1RERVYiLDEzOiJET0xMQVIiLDE0OiJGSVhFRCIsMTU6IlNJTiIsMTY6IkNPUyIsMTc6IlRBTiIsMTg6''@;'; put 'put ''IkFUQU4iLDE5OiJQSSIsMjA6IlNRUlQiLDIxOiJFWFAiLDIyOiJMTiIsMjM6IkxPRzEwIiwyNDoiQUJTIiwyNToiSU5UIiwyNjoiU0lHTiIsMjc6IlJPVU5EIiwyODoiTE9PS1VQIiwyOToiSU5ERVgiLDMwOiJSRVBUIiwzMToiTUlEIiwzMjoiTEVOIiwzMzoiVkFMVUUiLDM0OiJUUlVFIiwz''@;'; put 'put ''NToiRkFMU0UiLDM2OiJBTkQiLDM3OiJPUiIsMzg6Ik5PVCIsMzk6Ik1PRCIsNDA6IkRDT1VOVCIsNDE6IkRTVU0iLDQyOiJEQVZFUkFHRSIsNDM6IkRNSU4iLDQ0OiJETUFYIiw0NToiRFNUREVWIiw0NjoiVkFSIiw0NzoiRFZBUiIsNDg6IlRFWFQiLDQ5OiJMSU5FU1QiLDUwOiJUUkVORCIs''@;'; put 'put ''NTE6IkxPR0VTVCIsNTI6IkdST1dUSCIsNTM6IkdPVE8iLDU0OiJIQUxUIiw1NToiUkVUVVJOIiw1NjoiUFYiLDU3OiJGViIsNTg6Ik5QRVIiLDU5OiJQTVQiLDYwOiJSQVRFIiw2MToiTUlSUiIsNjI6IklSUiIsNjM6IlJBTkQiLDY0OiJNQVRDSCIsNjU6IkRBVEUiLDY2OiJUSU1FIiw2Nzoi''@;'; put 'put ''REFZIiw2ODoiTU9OVEgiLDY5OiJZRUFSIiw3MDoiV0VFS0RBWSIsNzE6IkhPVVIiLDcyOiJNSU5VVEUiLDczOiJTRUNPTkQiLDc0OiJOT1ciLDc1OiJBUkVBUyIsNzY6IlJPV1MiLDc3OiJDT0xVTU5TIiw3ODoiT0ZGU0VUIiw3OToiQUJTUkVGIiw4MDoiUkVMUkVGIiw4MToiQVJHVU1FTlQi''@;'; put 'put ''LDgyOiJTRUFSQ0giLDgzOiJUUkFOU1BPU0UiLDg0OiJFUlJPUiIsODU6IlNURVAiLDg2OiJUWVBFIiw4NzoiRUNITyIsODg6IlNFVC5OQU1FIiw4OToiQ0FMTEVSIiw5MDoiREVSRUYiLDkxOiJXSU5ET1dTIiw5MjoiU0VSSUVTIiw5MzoiRE9DVU1FTlRTIiw5NDoiQUNUSVZFLkNFTEwiLDk1''@;'; put 'put ''OiJTRUxFQ1RJT04iLDk2OiJSRVNVTFQiLDk3OiJBVEFOMiIsOTg6IkFTSU4iLDk5OiJBQ09TIiwxMDA6IkNIT09TRSIsMTAxOiJITE9PS1VQIiwxMDI6IlZMT09LVVAiLDEwMzoiTElOS1MiLDEwNDoiSU5QVVQiLDEwNToiSVNSRUYiLDEwNjoiR0VULkZPUk1VTEEiLDEwNzoiR0VULk5BTUUi''@;'; put 'put ''LDEwODoiU0VULlZBTFVFIiwxMDk6IkxPRyIsMTEwOiJFWEVDIiwxMTE6IkNIQVIiLDExMjoiTE9XRVIiLDExMzoiVVBQRVIiLDExNDoiUFJPUEVSIiwxMTU6IkxFRlQiLDExNjoiUklHSFQiLDExNzoiRVhBQ1QiLDExODoiVFJJTSIsMTE5OiJSRVBMQUNFIiwxMjA6IlNVQlNUSVRVVEUiLDEy''@;'; put 'put ''MToiQ09ERSIsMTIyOiJOQU1FUyIsMTIzOiJESVJFQ1RPUlkiLDEyNDoiRklORCIsMTI1OiJDRUxMIiwxMjY6IklTRVJSIiwxMjc6IklTVEVYVCIsMTI4OiJJU05VTUJFUiIsMTI5OiJJU0JMQU5LIiwxMzA6IlQiLDEzMToiTiIsMTMyOiJGT1BFTiIsMTMzOiJGQ0xPU0UiLDEzNDoiRlNJWkUi''@;'; put 'put ''LDEzNToiRlJFQURMTiIsMTM2OiJGUkVBRCIsMTM3OiJGV1JJVEVMTiIsMTM4OiJGV1JJVEUiLDEzOToiRlBPUyIsMTQwOiJEQVRFVkFMVUUiLDE0MToiVElNRVZBTFVFIiwxNDI6IlNMTiIsMTQzOiJTWUQiLDE0NDoiRERCIiwxNDU6IkdFVC5ERUYiLDE0NjoiUkVGVEVYVCIsMTQ3OiJURVhU''@;'; put 'put ''UkVGIiwxNDg6IklORElSRUNUIiwxNDk6IlJFR0lTVEVSIiwxNTA6IkNBTEwiLDE1MToiQURELkJBUiIsMTUyOiJBREQuTUVOVSIsMTUzOiJBREQuQ09NTUFORCIsMTU0OiJFTkFCTEUuQ09NTUFORCIsMTU1OiJDSEVDSy5DT01NQU5EIiwxNTY6IlJFTkFNRS5DT01NQU5EIiwxNTc6IlNIT1cu''@;'; put 'put ''QkFSIiwxNTg6IkRFTEVURS5NRU5VIiwxNTk6IkRFTEVURS5DT01NQU5EIiwxNjA6IkdFVC5DSEFSVC5JVEVNIiwxNjE6IkRJQUxPRy5CT1giLDE2MjoiQ0xFQU4iLDE2MzoiTURFVEVSTSIsMTY0OiJNSU5WRVJTRSIsMTY1OiJNTVVMVCIsMTY2OiJGSUxFUyIsMTY3OiJJUE1UIiwxNjg6IlBQ''@;'; put 'put ''TVQiLDE2OToiQ09VTlRBIiwxNzA6IkNBTkNFTC5LRVkiLDE3MToiRk9SIiwxNzI6IldISUxFIiwxNzM6IkJSRUFLIiwxNzQ6Ik5FWFQiLDE3NToiSU5JVElBVEUiLDE3NjoiUkVRVUVTVCIsMTc3OiJQT0tFIiwxNzg6IkVYRUNVVEUiLDE3OToiVEVSTUlOQVRFIiwxODA6IlJFU1RBUlQiLDE4''@;'; put 'put ''MToiSEVMUCIsMTgyOiJHRVQuQkFSIiwxODM6IlBST0RVQ1QiLDE4NDoiRkFDVCIsMTg1OiJHRVQuQ0VMTCIsMTg2OiJHRVQuV09SS1NQQUNFIiwxODc6IkdFVC5XSU5ET1ciLDE4ODoiR0VULkRPQ1VNRU5UIiwxODk6IkRQUk9EVUNUIiwxOTA6IklTTk9OVEVYVCIsMTkxOiJHRVQuTk9URSIs''@;'; put 'put ''MTkyOiJOT1RFIiwxOTM6IlNUREVWUCIsMTk0OiJWQVJQIiwxOTU6IkRTVERFVlAiLDE5NjoiRFZBUlAiLDE5NzoiVFJVTkMiLDE5ODoiSVNMT0dJQ0FMIiwxOTk6IkRDT1VOVEEiLDIwMDoiREVMRVRFLkJBUiIsMjAxOiJVTlJFR0lTVEVSIiwyMDQ6IlVTRE9MTEFSIiwyMDU6IkZJTkRCIiwy''@;'; put 'put ''MDY6IlNFQVJDSEIiLDIwNzoiUkVQTEFDRUIiLDIwODoiTEVGVEIiLDIwOToiUklHSFRCIiwyMTA6Ik1JREIiLDIxMToiTEVOQiIsMjEyOiJST1VORFVQIiwyMTM6IlJPVU5ERE9XTiIsMjE0OiJBU0MiLDIxNToiREJDUyIsMjE2OiJSQU5LIiwyMTk6IkFERFJFU1MiLDIyMDoiREFZUzM2MCIs''@;'; put 'put ''MjIxOiJUT0RBWSIsMjIyOiJWREIiLDIyMzoiRUxTRSIsMjI0OiJFTFNFLklGIiwyMjU6IkVORC5JRiIsMjI2OiJGT1IuQ0VMTCIsMjI3OiJNRURJQU4iLDIyODoiU1VNUFJPRFVDVCIsMjI5OiJTSU5IIiwyMzA6IkNPU0giLDIzMToiVEFOSCIsMjMyOiJBU0lOSCIsMjMzOiJBQ09TSCIsMjM0''@;'; put 'put ''OiJBVEFOSCIsMjM1OiJER0VUIiwyMzY6IkNSRUFURS5PQkpFQ1QiLDIzNzoiVk9MQVRJTEUiLDIzODoiTEFTVC5FUlJPUiIsMjM5OiJDVVNUT00uVU5ETyIsMjQwOiJDVVNUT00uUkVQRUFUIiwyNDE6IkZPUk1VTEEuQ09OVkVSVCIsMjQyOiJHRVQuTElOSy5JTkZPIiwyNDM6IlRFWFQuQk9Y''@;'; put 'put ''IiwyNDQ6IklORk8iLDI0NToiR1JPVVAiLDI0NjoiR0VULk9CSkVDVCIsMjQ3OiJEQiIsMjQ4OiJQQVVTRSIsMjUxOiJSRVNVTUUiLDI1MjoiRlJFUVVFTkNZIiwyNTM6IkFERC5UT09MQkFSIiwyNTQ6IkRFTEVURS5UT09MQkFSIiwyNTU6IlVzZXIiLDI1NjoiUkVTRVQuVE9PTEJBUiIsMjU3''@;'; put 'put ''OiJFVkFMVUFURSIsMjU4OiJHRVQuVE9PTEJBUiIsMjU5OiJHRVQuVE9PTCIsMjYwOiJTUEVMTElORy5DSEVDSyIsMjYxOiJFUlJPUi5UWVBFIiwyNjI6IkFQUC5USVRMRSIsMjYzOiJXSU5ET1cuVElUTEUiLDI2NDoiU0FWRS5UT09MQkFSIiwyNjU6IkVOQUJMRS5UT09MIiwyNjY6IlBSRVNT''@;'; put 'put ''LlRPT0wiLDI2NzoiUkVHSVNURVIuSUQiLDI2ODoiR0VULldPUktCT09LIiwyNjk6IkFWRURFViIsMjcwOiJCRVRBRElTVCIsMjcxOiJHQU1NQUxOIiwyNzI6IkJFVEFJTlYiLDI3MzoiQklOT01ESVNUIiwyNzQ6IkNISURJU1QiLDI3NToiQ0hJSU5WIiwyNzY6IkNPTUJJTiIsMjc3OiJDT05G''@;'; put 'put ''SURFTkNFIiwyNzg6IkNSSVRCSU5PTSIsMjc5OiJFVkVOIiwyODA6IkVYUE9ORElTVCIsMjgxOiJGRElTVCIsMjgyOiJGSU5WIiwyODM6IkZJU0hFUiIsMjg0OiJGSVNIRVJJTlYiLDI4NToiRkxPT1IiLDI4NjoiR0FNTUFESVNUIiwyODc6IkdBTU1BSU5WIiwyODg6IkNFSUxJTkciLDI4OToi''@;'; put 'put ''SFlQR0VPTURJU1QiLDI5MDoiTE9HTk9STURJU1QiLDI5MToiTE9HSU5WIiwyOTI6Ik5FR0JJTk9NRElTVCIsMjkzOiJOT1JNRElTVCIsMjk0OiJOT1JNU0RJU1QiLDI5NToiTk9STUlOViIsMjk2OiJOT1JNU0lOViIsMjk3OiJTVEFOREFSRElaRSIsMjk4OiJPREQiLDI5OToiUEVSTVVUIiwz''@;'; put 'put ''MDA6IlBPSVNTT04iLDMwMToiVERJU1QiLDMwMjoiV0VJQlVMTCIsMzAzOiJTVU1YTVkyIiwzMDQ6IlNVTVgyTVkyIiwzMDU6IlNVTVgyUFkyIiwzMDY6IkNISVRFU1QiLDMwNzoiQ09SUkVMIiwzMDg6IkNPVkFSIiwzMDk6IkZPUkVDQVNUIiwzMTA6IkZURVNUIiwzMTE6IklOVEVSQ0VQVCIs''@;'; put 'put ''MzEyOiJQRUFSU09OIiwzMTM6IlJTUSIsMzE0OiJTVEVZWCIsMzE1OiJTTE9QRSIsMzE2OiJUVEVTVCIsMzE3OiJQUk9CIiwzMTg6IkRFVlNRIiwzMTk6IkdFT01FQU4iLDMyMDoiSEFSTUVBTiIsMzIxOiJTVU1TUSIsMzIyOiJLVVJUIiwzMjM6IlNLRVciLDMyNDoiWlRFU1QiLDMyNToiTEFS''@;'; put 'put ''R0UiLDMyNjoiU01BTEwiLDMyNzoiUVVBUlRJTEUiLDMyODoiUEVSQ0VOVElMRSIsMzI5OiJQRVJDRU5UUkFOSyIsMzMwOiJNT0RFIiwzMzE6IlRSSU1NRUFOIiwzMzI6IlRJTlYiLDMzNDoiTU9WSUUuQ09NTUFORCIsMzM1OiJHRVQuTU9WSUUiLDMzNjoiQ09OQ0FURU5BVEUiLDMzNzoiUE9X''@;'; put 'put ''RVIiLDMzODoiUElWT1QuQURELkRBVEEiLDMzOToiR0VULlBJVk9ULlRBQkxFIiwzNDA6IkdFVC5QSVZPVC5GSUVMRCIsMzQxOiJHRVQuUElWT1QuSVRFTSIsMzQyOiJSQURJQU5TIiwzNDM6IkRFR1JFRVMiLDM0NDoiU1VCVE9UQUwiLDM0NToiU1VNSUYiLDM0NjoiQ09VTlRJRiIsMzQ3OiJD''@;'; put 'put ''T1VOVEJMQU5LIiwzNDg6IlNDRU5BUklPLkdFVCIsMzQ5OiJPUFRJT05TLkxJU1RTLkdFVCIsMzUwOiJJU1BNVCIsMzUxOiJEQVRFRElGIiwzNTI6IkRBVEVTVFJJTkciLDM1MzoiTlVNQkVSU1RSSU5HIiwzNTQ6IlJPTUFOIiwzNTU6Ik9QRU4uRElBTE9HIiwzNTY6IlNBVkUuRElBTE9HIiwz''@;'; put 'put ''NTc6IlZJRVcuR0VUIiwzNTg6IkdFVFBJVk9UREFUQSIsMzU5OiJIWVBFUkxJTksiLDM2MDoiUEhPTkVUSUMiLDM2MToiQVZFUkFHRUEiLDM2MjoiTUFYQSIsMzYzOiJNSU5BIiwzNjQ6IlNUREVWUEEiLDM2NToiVkFSUEEiLDM2NjoiU1RERVZBIiwzNjc6IlZBUkEiLDM2ODoiQkFIVFRFWFQi''@;'; put 'put ''LDM2OToiVEhBSURBWU9GV0VFSyIsMzcwOiJUSEFJRElHSVQiLDM3MToiVEhBSU1PTlRIT0ZZRUFSIiwzNzI6IlRIQUlOVU1TT1VORCIsMzczOiJUSEFJTlVNU1RSSU5HIiwzNzQ6IlRIQUlTVFJJTkdMRU5HVEgiLDM3NToiSVNUSEFJRElHSVQiLDM3NjoiUk9VTkRCQUhURE9XTiIsMzc3OiJS''@;'; put 'put ''T1VOREJBSFRVUCIsMzc4OiJUSEFJWUVBUiIsMzc5OiJSVEQiLDM4MDoiQ1VCRVZBTFVFIiwzODE6IkNVQkVNRU1CRVIiLDM4MjoiQ1VCRU1FTUJFUlBST1BFUlRZIiwzODM6IkNVQkVSQU5LRURNRU1CRVIiLDM4NDoiSEVYMkJJTiIsMzg1OiJIRVgyREVDIiwzODY6IkhFWDJPQ1QiLDM4Nzoi''@;'; put 'put ''REVDMkJJTiIsMzg4OiJERUMySEVYIiwzODk6IkRFQzJPQ1QiLDM5MDoiT0NUMkJJTiIsMzkxOiJPQ1QySEVYIiwzOTI6Ik9DVDJERUMiLDM5MzoiQklOMkRFQyIsMzk0OiJCSU4yT0NUIiwzOTU6IkJJTjJIRVgiLDM5NjoiSU1TVUIiLDM5NzoiSU1ESVYiLDM5ODoiSU1QT1dFUiIsMzk5OiJJ''@;'; put 'put ''TUFCUyIsNDAwOiJJTVNRUlQiLDQwMToiSU1MTiIsNDAyOiJJTUxPRzIiLDQwMzoiSU1MT0cxMCIsNDA0OiJJTVNJTiIsNDA1OiJJTUNPUyIsNDA2OiJJTUVYUCIsNDA3OiJJTUFSR1VNRU5UIiw0MDg6IklNQ09OSlVHQVRFIiw0MDk6IklNQUdJTkFSWSIsNDEwOiJJTVJFQUwiLDQxMToiQ09N''@;'; put 'put ''UExFWCIsNDEyOiJJTVNVTSIsNDEzOiJJTVBST0RVQ1QiLDQxNDoiU0VSSUVTU1VNIiw0MTU6IkZBQ1RET1VCTEUiLDQxNjoiU1FSVFBJIiw0MTc6IlFVT1RJRU5UIiw0MTg6IkRFTFRBIiw0MTk6IkdFU1RFUCIsNDIwOiJJU0VWRU4iLDQyMToiSVNPREQiLDQyMjoiTVJPVU5EIiw0MjM6IkVS''@;'; put 'put ''RiIsNDI0OiJFUkZDIiw0MjU6IkJFU1NFTEoiLDQyNjoiQkVTU0VMSyIsNDI3OiJCRVNTRUxZIiw0Mjg6IkJFU1NFTEkiLDQyOToiWElSUiIsNDMwOiJYTlBWIiw0MzE6IlBSSUNFTUFUIiw0MzI6IllJRUxETUFUIiw0MzM6IklOVFJBVEUiLDQzNDoiUkVDRUlWRUQiLDQzNToiRElTQyIsNDM2''@;'; put 'put ''OiJQUklDRURJU0MiLDQzNzoiWUlFTERESVNDIiw0Mzg6IlRCSUxMRVEiLDQzOToiVEJJTExQUklDRSIsNDQwOiJUQklMTFlJRUxEIiw0NDE6IlBSSUNFIiw0NDI6IllJRUxEIiw0NDM6IkRPTExBUkRFIiw0NDQ6IkRPTExBUkZSIiw0NDU6Ik5PTUlOQUwiLDQ0NjoiRUZGRUNUIiw0NDc6IkNV''@;'; put 'put ''TVBSSU5DIiw0NDg6IkNVTUlQTVQiLDQ0OToiRURBVEUiLDQ1MDoiRU9NT05USCIsNDUxOiJZRUFSRlJBQyIsNDUyOiJDT1VQREFZQlMiLDQ1MzoiQ09VUERBWVMiLDQ1NDoiQ09VUERBWVNOQyIsNDU1OiJDT1VQTkNEIiw0NTY6IkNPVVBOVU0iLDQ1NzoiQ09VUFBDRCIsNDU4OiJEVVJBVElP''@;'; put 'put ''TiIsNDU5OiJNRFVSQVRJT04iLDQ2MDoiT0RETFBSSUNFIiw0NjE6Ik9ERExZSUVMRCIsNDYyOiJPRERGUFJJQ0UiLDQ2MzoiT0RERllJRUxEIiw0NjQ6IlJBTkRCRVRXRUVOIiw0NjU6IldFRUtOVU0iLDQ2NjoiQU1PUkRFR1JDIiw0Njc6IkFNT1JMSU5DIiw0Njg6IkNPTlZFUlQiLDcyNDoi''@;'; put 'put ''U0hFRVRKUyIsNDY5OiJBQ0NSSU5UIiw0NzA6IkFDQ1JJTlRNIiw0NzE6IldPUktEQVkiLDQ3MjoiTkVUV09SS0RBWVMiLDQ3MzoiR0NEIiw0NzQ6Ik1VTFRJTk9NSUFMIiw0NzU6IkxDTSIsNDc2OiJGVlNDSEVEVUxFIiw0Nzc6IkNVQkVLUElNRU1CRVIiLDQ3ODoiQ1VCRVNFVCIsNDc5OiJD''@;'; put 'put ''VUJFU0VUQ09VTlQiLDQ4MDoiSUZFUlJPUiIsNDgxOiJDT1VOVElGUyIsNDgyOiJTVU1JRlMiLDQ4MzoiQVZFUkFHRUlGIiw0ODQ6IkFWRVJBR0VJRlMifSxlaj17MjoxLDM6MSwxMDowLDE1OjEsMTY6MSwxNzoxLDE4OjEsMTk6MCwyMDoxLDIxOjEsMjI6MSwyMzoxLDI0OjEsMjU6MSwyNjox''@;'; put 'put ''LDI3OjIsMzA6MiwzMTozLDMyOjEsMzM6MSwzNDowLDM1OjAsMzg6MSwzOToyLDQwOjMsNDE6Myw0MjozLDQzOjMsNDQ6Myw0NTozLDQ3OjMsNDg6Miw1MzoxLDYxOjMsNjM6MCw2NTozLDY2OjMsNjc6MSw2ODoxLDY5OjEsNzA6MSw3MToxLDcyOjEsNzM6MSw3NDowLDc1OjEsNzY6MSw3Nzox''@;'; put 'put ''LDc5OjIsODA6Miw4MzoxLDg1OjAsODY6MSw4OTowLDkwOjEsOTQ6MCw5NTowLDk3OjIsOTg6MSw5OToxLDEwMTozLDEwMjozLDEwNToxLDEwNjoxLDEwODoyLDExMToxLDExMjoxLDExMzoxLDExNDoxLDExNzoyLDExODoxLDExOTo0LDEyMToxLDEyNjoxLDEyNzoxLDEyODoxLDEyOToxLDEz''@;'; put 'put ''MDoxLDEzMToxLDEzMzoxLDEzNDoxLDEzNToxLDEzNjoyLDEzNzoyLDEzODoyLDE0MDoxLDE0MToxLDE0MjozLDE0Mzo0LDE0NDo0LDE2MToxLDE2MjoxLDE2MzoxLDE2NDoxLDE2NToyLDE3MjoxLDE3NToyLDE3NjoyLDE3NzozLDE3ODoyLDE3OToxLDE4NDoxLDE4NjoxLDE4OTozLDE5MDox''@;'; put 'put ''LDE5NTozLDE5NjozLDE5NzoxLDE5ODoxLDE5OTozLDIwMToxLDIwNzo0LDIxMDozLDIxMToxLDIxMjoyLDIxMzoyLDIxNDoxLDIxNToxLDIyNTowLDIyOToxLDIzMDoxLDIzMToxLDIzMjoxLDIzMzoxLDIzNDoxLDIzNTozLDI0NDoxLDI0Nzo0LDI1MjoyLDI1NzoxLDI2MToxLDI3MToxLDI3''@;'; put 'put ''Mzo0LDI3NDoyLDI3NToyLDI3NjoyLDI3NzozLDI3ODozLDI3OToxLDI4MDozLDI4MTozLDI4MjozLDI4MzoxLDI4NDoxLDI4NToyLDI4Njo0LDI4NzozLDI4ODoyLDI4OTo0LDI5MDozLDI5MTozLDI5MjozLDI5Mzo0LDI5NDoxLDI5NTozLDI5NjoxLDI5NzozLDI5ODoxLDI5OToyLDMwMDoz''@;'; put 'put ''LDMwMTozLDMwMjo0LDMwMzoyLDMwNDoyLDMwNToyLDMwNjoyLDMwNzoyLDMwODoyLDMwOTozLDMxMDoyLDMxMToyLDMxMjoyLDMxMzoyLDMxNDoyLDMxNToyLDMxNjo0LDMyNToyLDMyNjoyLDMyNzoyLDMyODoyLDMzMToyLDMzMjoyLDMzNzoyLDM0MjoxLDM0MzoxLDM0NjoyLDM0NzoxLDM1''@;'; put 'put ''MDo0LDM1MTozLDM1MjoxLDM1MzoyLDM2MDoxLDM2ODoxLDM2OToxLDM3MDoxLDM3MToxLDM3MjoxLDM3MzoxLDM3NDoxLDM3NToxLDM3NjoxLDM3NzoxLDM3ODoxLDM4MjozLDM4NToxLDM5MjoxLDM5MzoxLDM5NjoyLDM5NzoyLDM5ODoyLDM5OToxLDQwMDoxLDQwMToxLDQwMjoxLDQwMzox''@;'; put 'put ''LDQwNDoxLDQwNToxLDQwNjoxLDQwNzoxLDQwODoxLDQwOToxLDQxMDoxLDQxNDo0LDQxNToxLDQxNjoxLDQxNzoyLDQyMDoxLDQyMToxLDQyMjoyLDQyNDoxLDQyNToyLDQyNjoyLDQyNzoyLDQyODoyLDQzMDozLDQzODozLDQzOTozLDQ0MDozLDQ0MzoyLDQ0NDoyLDQ0NToyLDQ0NjoyLDQ0''@;'; put 'put ''Nzo2LDQ0ODo2LDQ0OToyLDQ1MDoyLDQ2NDoyLDQ2ODozLDQ3NjoyLDQ3OToxLDQ4MDoyLDY1NTM1OjB9LGliPXsiX3hsZm4uQUNPVCI6IkFDT1QiLCJfeGxmbi5BQ09USCI6IkFDT1RIIiwiX3hsZm4uQUdHUkVHQVRFIjoiQUdHUkVHQVRFIiwiX3hsZm4uQVJBQklDIjoiQVJBQklDIiwiX3hs''@;'; put 'put ''Zm4uQVZFUkFHRUlGIjoiQVZFUkFHRUlGIiwiX3hsZm4uQVZFUkFHRUlGUyI6IkFWRVJBR0VJRlMiLCJfeGxmbi5CQVNFIjoiQkFTRSIsIl94bGZuLkJFVEEuRElTVCI6IkJFVEEuRElTVCIsIl94bGZuLkJFVEEuSU5WIjoiQkVUQS5JTlYiLCJfeGxmbi5CSU5PTS5ESVNUIjoiQklOT00uRElT''@;'; put 'put ''VCIsIl94bGZuLkJJTk9NLkRJU1QuUkFOR0UiOiJCSU5PTS5ESVNULlJBTkdFIiwiX3hsZm4uQklOT00uSU5WIjoiQklOT00uSU5WIiwiX3hsZm4uQklUQU5EIjoiQklUQU5EIiwiX3hsZm4uQklUTFNISUZUIjoiQklUTFNISUZUIiwiX3hsZm4uQklUT1IiOiJCSVRPUiIsIl94bGZuLkJJVFJT''@;'; put 'put ''SElGVCI6IkJJVFJTSElGVCIsIl94bGZuLkJJVFhPUiI6IkJJVFhPUiIsIl94bGZuLkNFSUxJTkcuTUFUSCI6IkNFSUxJTkcuTUFUSCIsIl94bGZuLkNFSUxJTkcuUFJFQ0lTRSI6IkNFSUxJTkcuUFJFQ0lTRSIsIl94bGZuLkNISVNRLkRJU1QiOiJDSElTUS5ESVNUIiwiX3hsZm4uQ0hJU1Eu''@;'; put 'put ''RElTVC5SVCI6IkNISVNRLkRJU1QuUlQiLCJfeGxmbi5DSElTUS5JTlYiOiJDSElTUS5JTlYiLCJfeGxmbi5DSElTUS5JTlYuUlQiOiJDSElTUS5JTlYuUlQiLCJfeGxmbi5DSElTUS5URVNUIjoiQ0hJU1EuVEVTVCIsIl94bGZuLkNPTUJJTkEiOiJDT01CSU5BIiwiX3hsZm4uQ09OQ0FUIjoi''@;'; put 'put ''Q09OQ0FUIiwiX3hsZm4uQ09ORklERU5DRS5OT1JNIjoiQ09ORklERU5DRS5OT1JNIiwiX3hsZm4uQ09ORklERU5DRS5UIjoiQ09ORklERU5DRS5UIiwiX3hsZm4uQ09UIjoiQ09UIiwiX3hsZm4uQ09USCI6IkNPVEgiLCJfeGxmbi5DT1VOVElGUyI6IkNPVU5USUZTIiwiX3hsZm4uQ09WQVJJ''@;'; put 'put ''QU5DRS5QIjoiQ09WQVJJQU5DRS5QIiwiX3hsZm4uQ09WQVJJQU5DRS5TIjoiQ09WQVJJQU5DRS5TIiwiX3hsZm4uQ1NDIjoiQ1NDIiwiX3hsZm4uQ1NDSCI6IkNTQ0giLCJfeGxmbi5EQVlTIjoiREFZUyIsIl94bGZuLkRFQ0lNQUwiOiJERUNJTUFMIiwiX3hsZm4uRUNNQS5DRUlMSU5HIjoi''@;'; put 'put ''RUNNQS5DRUlMSU5HIiwiX3hsZm4uRVJGLlBSRUNJU0UiOiJFUkYuUFJFQ0lTRSIsIl94bGZuLkVSRkMuUFJFQ0lTRSI6IkVSRkMuUFJFQ0lTRSIsIl94bGZuLkVYUE9OLkRJU1QiOiJFWFBPTi5ESVNUIiwiX3hsZm4uRi5ESVNUIjoiRi5ESVNUIiwiX3hsZm4uRi5ESVNULlJUIjoiRi5ESVNU''@;'; put 'put ''LlJUIiwiX3hsZm4uRi5JTlYiOiJGLklOViIsIl94bGZuLkYuSU5WLlJUIjoiRi5JTlYuUlQiLCJfeGxmbi5GLlRFU1QiOiJGLlRFU1QiLCJfeGxmbi5GSUxURVJYTUwiOiJGSUxURVJYTUwiLCJfeGxmbi5GTE9PUi5NQVRIIjoiRkxPT1IuTUFUSCIsIl94bGZuLkZMT09SLlBSRUNJU0UiOiJG''@;'; put 'put ''TE9PUi5QUkVDSVNFIiwiX3hsZm4uRk9SRUNBU1QuRVRTIjoiRk9SRUNBU1QuRVRTIiwiX3hsZm4uRk9SRUNBU1QuRVRTLkNPTkZJTlQiOiJGT1JFQ0FTVC5FVFMuQ09ORklOVCIsIl94bGZuLkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSI6IkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSIsIl94''@;'; put 'put ''bGZuLkZPUkVDQVNULkVUUy5TVEFUIjoiRk9SRUNBU1QuRVRTLlNUQVQiLCJfeGxmbi5GT1JFQ0FTVC5MSU5FQVIiOiJGT1JFQ0FTVC5MSU5FQVIiLCJfeGxmbi5GT1JNVUxBVEVYVCI6IkZPUk1VTEFURVhUIiwiX3hsZm4uR0FNTUEiOiJHQU1NQSIsIl94bGZuLkdBTU1BLkRJU1QiOiJHQU1N''@;'; put 'put ''QS5ESVNUIiwiX3hsZm4uR0FNTUEuSU5WIjoiR0FNTUEuSU5WIiwiX3hsZm4uR0FNTUFMTi5QUkVDSVNFIjoiR0FNTUFMTi5QUkVDSVNFIiwiX3hsZm4uR0FVU1MiOiJHQVVTUyIsIl94bGZuLkhZUEdFT00uRElTVCI6IkhZUEdFT00uRElTVCIsIl94bGZuLklGRVJST1IiOiJJRkVSUk9SIiwi''@;'; put 'put ''X3hsZm4uSUZOQSI6IklGTkEiLCJfeGxmbi5JRlMiOiJJRlMiLCJfeGxmbi5JTUNPU0giOiJJTUNPU0giLCJfeGxmbi5JTUNPVCI6IklNQ09UIiwiX3hsZm4uSU1DU0MiOiJJTUNTQyIsIl94bGZuLklNQ1NDSCI6IklNQ1NDSCIsIl94bGZuLklNU0VDIjoiSU1TRUMiLCJfeGxmbi5JTVNFQ0gi''@;'; put 'put ''OiJJTVNFQ0giLCJfeGxmbi5JTVNJTkgiOiJJTVNJTkgiLCJfeGxmbi5JTVRBTiI6IklNVEFOIiwiX3hsZm4uSVNGT1JNVUxBIjoiSVNGT1JNVUxBIiwiX3hsZm4uSVNPLkNFSUxJTkciOiJJU08uQ0VJTElORyIsIl94bGZuLklTT1dFRUtOVU0iOiJJU09XRUVLTlVNIiwiX3hsZm4uTE9HTk9S''@;'; put 'put ''TS5ESVNUIjoiTE9HTk9STS5ESVNUIiwiX3hsZm4uTE9HTk9STS5JTlYiOiJMT0dOT1JNLklOViIsIl94bGZuLk1BWElGUyI6Ik1BWElGUyIsIl94bGZuLk1JTklGUyI6Ik1JTklGUyIsIl94bGZuLk1PREUuTVVMVCI6Ik1PREUuTVVMVCIsIl94bGZuLk1PREUuU05HTCI6Ik1PREUuU05HTCIs''@;'; put 'put ''Il94bGZuLk1VTklUIjoiTVVOSVQiLCJfeGxmbi5ORUdCSU5PTS5ESVNUIjoiTkVHQklOT00uRElTVCIsIl94bGZuLk5FVFdPUktEQVlTLklOVEwiOiJORVRXT1JLREFZUy5JTlRMIiwiX3hsZm4uTklHQklOT00iOiJOSUdCSU5PTSIsIl94bGZuLk5PUk0uRElTVCI6Ik5PUk0uRElTVCIsIl94''@;'; put 'put ''bGZuLk5PUk0uSU5WIjoiTk9STS5JTlYiLCJfeGxmbi5OT1JNLlMuRElTVCI6Ik5PUk0uUy5ESVNUIiwiX3hsZm4uTk9STS5TLklOViI6Ik5PUk0uUy5JTlYiLCJfeGxmbi5OVU1CRVJWQUxVRSI6Ik5VTUJFUlZBTFVFIiwiX3hsZm4uUERVUkFUSU9OIjoiUERVUkFUSU9OIiwiX3hsZm4uUEVS''@;'; put 'put ''Q0VOVElMRS5FWEMiOiJQRVJDRU5USUxFLkVYQyIsIl94bGZuLlBFUkNFTlRJTEUuSU5DIjoiUEVSQ0VOVElMRS5JTkMiLCJfeGxmbi5QRVJDRU5UUkFOSy5FWEMiOiJQRVJDRU5UUkFOSy5FWEMiLCJfeGxmbi5QRVJDRU5UUkFOSy5JTkMiOiJQRVJDRU5UUkFOSy5JTkMiLCJfeGxmbi5QRVJN''@;'; put 'put ''VVRBVElPTkEiOiJQRVJNVVRBVElPTkEiLCJfeGxmbi5QSEkiOiJQSEkiLCJfeGxmbi5QT0lTU09OLkRJU1QiOiJQT0lTU09OLkRJU1QiLCJfeGxmbi5RVUFSVElMRS5FWEMiOiJRVUFSVElMRS5FWEMiLCJfeGxmbi5RVUFSVElMRS5JTkMiOiJRVUFSVElMRS5JTkMiLCJfeGxmbi5RVUVSWVNU''@;'; put 'put ''UklORyI6IlFVRVJZU1RSSU5HIiwiX3hsZm4uUkFOSy5BVkciOiJSQU5LLkFWRyIsIl94bGZuLlJBTksuRVEiOiJSQU5LLkVRIiwiX3hsZm4uUlJJIjoiUlJJIiwiX3hsZm4uU0VDIjoiU0VDIiwiX3hsZm4uU0VDSCI6IlNFQ0giLCJfeGxmbi5TSEVFVCI6IlNIRUVUIiwiX3hsZm4uU0hFRVRT''@;'; put 'put ''IjoiU0hFRVRTIiwiX3hsZm4uU0tFVy5QIjoiU0tFVy5QIiwiX3hsZm4uU1RERVYuUCI6IlNUREVWLlAiLCJfeGxmbi5TVERFVi5TIjoiU1RERVYuUyIsIl94bGZuLlNVTUlGUyI6IlNVTUlGUyIsIl94bGZuLlNXSVRDSCI6IlNXSVRDSCIsIl94bGZuLlQuRElTVCI6IlQuRElTVCIsIl94bGZu''@;'; put 'put ''LlQuRElTVC4yVCI6IlQuRElTVC4yVCIsIl94bGZuLlQuRElTVC5SVCI6IlQuRElTVC5SVCIsIl94bGZuLlQuSU5WIjoiVC5JTlYiLCJfeGxmbi5ULklOVi4yVCI6IlQuSU5WLjJUIiwiX3hsZm4uVC5URVNUIjoiVC5URVNUIiwiX3hsZm4uVEVYVEpPSU4iOiJURVhUSk9JTiIsIl94bGZuLlVO''@;'; put 'put ''SUNIQVIiOiJVTklDSEFSIiwiX3hsZm4uVU5JQ09ERSI6IlVOSUNPREUiLCJfeGxmbi5WQVIuUCI6IlZBUi5QIiwiX3hsZm4uVkFSLlMiOiJWQVIuUyIsIl94bGZuLldFQlNFUlZJQ0UiOiJXRUJTRVJWSUNFIiwiX3hsZm4uV0VJQlVMTC5ESVNUIjoiV0VJQlVMTC5ESVNUIiwiX3hsZm4uV09S''@;'; put 'put ''S0RBWS5JTlRMIjoiV09SS0RBWS5JTlRMIiwiX3hsZm4uWE9SIjoiWE9SIiwiX3hsZm4uWi5URVNUIjoiWi5URVNUIn07ZnVuY3Rpb24gaVMoUyl7cmV0dXJuIm9mOiI9PVMuc2xpY2UoMCwzKSYmKFM9Uy5zbGljZSgzKSksNjE9PVMuY2hhckNvZGVBdCgwKSYmNjE9PShTPVMuc2xpY2UoMSkp''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihTPVMuc2xpY2UoMSkpLChTPShTPShTPVMucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbihSLGspe3JldHVybiBrLnJlcGxhY2UoL1wu''@;'; put 'put ''L2csIiIpfSkpLnJlcGxhY2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gWjQoUyl7cmV0dXJuKCJvZjo9IitTLnJlcGxhY2UobTIsIiQxWy4kMiQzJDQkNV0iKS5yZXBsYWNlKC9cXTpcWy9nLCI6''@;'; put 'put ''IikpLnJlcGxhY2UoLzsvZywifCIpLnJlcGxhY2UoLywvZywiOyIpfWZ1bmN0aW9uIGFiKFMpe3ZhciBSPVMuc3BsaXQoIjoiKTtyZXR1cm5bUlswXS5zcGxpdCgiLiIpWzBdLFJbMF0uc3BsaXQoIi4iKVsxXSsoUi5sZW5ndGg+MT8iOiIrKFJbMV0uc3BsaXQoIi4iKVsxXXx8UlsxXS5zcGxp''@;'; put 'put ''dCgiLiIpWzBdKToiIildfWZ1bmN0aW9uIHBEKFMpe3JldHVybiBTLnJlcGxhY2UoL1wuLywiISIpfXZhciBsOD17fSxjOD17fTtLYS5XUz1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiwiaHR0''@;'; put 'put ''cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiXTt2YXIgcTM9dHlwZW9mIE1hcDwidSI7ZnVuY3Rpb24gYVMoUyxSLGssRyl7dmFyIFE9MCxvZT1TLmxlbmd0aDtpZihHKXtpZihxMz9HLmhhcyhSKTpPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoRyxSKSlmb3IodmFyIGdlPXEzP0cuZ2V0KFIpOkdbUl07UTxnZS5sZW5ndGg7KytRKWlmKFNbZ2VbUV1dLnQ9PT1SJiYoIVNbZ2VbUV1dLnImJiFrfHxTW2dlW1FdXS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLGdlW1FdfWVsc2UgZm9yKDtRPG9lOysrUSlp''@;'; put 'put ''ZihTW1FdLnQ9PT1SJiYoIVNbUV0uciYmIWt8fFNbUV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxRO3JldHVybiBTW29lXT17dDpSLHI6a30sUy5Db3VudCsrLFMuVW5pcXVlKyssRyYmKHEzPyhHLmhhcyhSKXx8Ry5zZXQoUixbXSksRy5nZXQoUikucHVzaChvZSkpOihPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLmhhc093blByb3BlcnR5LmNhbGwoRyxSKXx8KEdbUl09W10pLEdbUl0ucHVzaChvZSkpKSxvZX1mdW5jdGlvbiB1OChTLFIpe3ZhciBrPXttaW46UysxLG1heDpTKzF9LEc9VGM7aWYoIVIpcmV0dXJuIFI7dmFyIFE9LTE7cmV0dXJuIFIuYXV0byYmKGsuYmVzdEZpdD0xLFIuYmVzdHdp''@;'; put 'put ''ZHRoJiYoUT1SLmJlc3R3aWR0aCksZGVsZXRlIFIuYmVzdHdpZHRoKSxudWxsIT1SLndweD9RPXhnKFIud3B4KTpudWxsIT1SLndjaD9RPVIud2NoOm51bGwhPVIud2lkdGgmJihrLmN1c3RvbVdpZHRoPTEpLFE+LTE/KGsud2lkdGg9a2YoUSksay5jdXN0b21XaWR0aD0xKTpudWxsIT1SLndp''@;'; put 'put ''ZHRoJiYoay53aWR0aD1SLndpZHRoKSxSLmhpZGRlbiYmKGsuaGlkZGVuPSEwKSxrLmJlc3RGaXQmJmRlbGV0ZSBrLmN1c3RvbVdpZHRoLFRjPUcsbnVsbCE9Ui5sZXZlbCYmKGsub3V0bGluZUxldmVsPWsubGV2ZWw9Ui5sZXZlbCksbnVsbCE9Ui5zdHlsZSYmKGsuc3R5bGU9Ui5zdHlsZSks''@;'; put 'put ''a31mdW5jdGlvbiBvUyhTLFIsayl7dmFyIEc9TXMoU1siIXJlZiJdKSxRPTAsb2U9U1siIW1lcmdlcyJdfHxbXSxnZT1BcnJheS5pc0FycmF5KFMpO2U6Zm9yKHZhciBwZT0wO3BlPD1HLmUucjsrK3BlKXtmb3IodmFyIHllPTA7eWU8b2UubGVuZ3RoOysreWUpaWYob2VbeWVdLnMucjw9cGUm''@;'; put 'put ''JnBlPD1vZVt5ZV0uZS5yJiZvZVt5ZV0ucy5jPD1rJiZrPD1vZVt5ZV0uZS5jKWNvbnRpbnVlIGU7dmFyIFBlPWdlPyhTW3BlXXx8W10pW2tdOlNbcWkoe3I6cGUsYzprfSldO2lmKFBlKXt2YXIgTmU9MTtpZihQZS5zJiYoTmU9eUMoUGUucykvYkMuQ2FsaWJyaVsxMl18fDEpLFBlLncpUT1N''@;'; put 'put ''YXRoLm1heChRLFBlLncubGVuZ3RoKk5lKTtlbHNlIHN3aXRjaChQZS50KXtjYXNlImIiOmNhc2UiZSI6UT1NYXRoLm1heChRLDUqTmUpO2JyZWFrO2Nhc2UicyI6UT1NYXRoLm1heChRLFBlLnYubGVuZ3RoKk5lKjEuMnwwKTticmVhaztjYXNlIm4iOmFnKFBlLFBlLnYpLFE9TWF0aC5tYXgo''@;'; put 'put ''USxTdHJpbmcoUGUud3x8UGUudikubGVuZ3RoKk5lKTticmVhaztjYXNlImQiOlE9TWF0aC5tYXgoUSw4Kk5lKX19fVE8MSYmKFE9MSksUi5iZXN0d2lkdGg9UX1mdW5jdGlvbiBYMyhTLFIpe2lmKFMpe3ZhciBrPVsuNywuNywuNzUsLjc1LC4zLC4zXTsieGxtbCI9PVImJihrPVsxLDEsMSwx''@;'; put 'put ''LC41LC41XSksbnVsbD09Uy5sZWZ0JiYoUy5sZWZ0PWtbMF0pLG51bGw9PVMucmlnaHQmJihTLnJpZ2h0PWtbMV0pLG51bGw9PVMudG9wJiYoUy50b3A9a1syXSksbnVsbD09Uy5ib3R0b20mJihTLmJvdHRvbT1rWzNdKSxudWxsPT1TLmhlYWRlciYmKFMuaGVhZGVyPWtbNF0pLG51bGw9PVMu''@;'; put 'put ''Zm9vdGVyJiYoUy5mb290ZXI9a1s1XSl9fWZ1bmN0aW9uIGxTKFMsUil7Zm9yKHZhciBrPVJlKFIpLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9ITAsb2U9U1tHXTtpZihvZSYmay5sZW5ndGg9PVJlKG9lKS5sZW5ndGgmJihrLmZvckVhY2goZnVuY3Rpb24oZ2Upe2lmKFEpe2lmKG51bGw9''@;'; put 'put ''PT1SW2dlXSE9KG51bGw9PT1vZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpO2lmKCJvYmplY3QiPT10eXBlb2YgUltnZV0paWYoWyJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uaW5kZXhPZihnZSk+LTEpe2lmKG9oKFJbZ2VdLG9lW2dlXSkpcmV0dXJuIHZvaWQoUT0hMSl9ZWxzZXtpZigh''@;'; put 'put ''KFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uaW5kZXhPZihnZSk+LTEpKXJldHVybiB2b2lkKFE9ITEpO2lmKGRrKFJbZ2VdLG9lW2dlXSkpcmV0dXJuIHZvaWQoUT0hMSl9aWYoUltnZV0hPW9lW2dlXSlyZXR1cm4gdm9pZChRPSExKX19KSxRKSlyZXR1cm4gR31yZXR1cm4gU1tT''@;'; put 'put ''Lmxlbmd0aF09cXQoUiksUy5sZW5ndGgtMX1mdW5jdGlvbiBsMChTLFIsayxHKXt2YXIgUT1HLnJldnNzZltudWxsIT1rLno/ay56OiJHZW5lcmFsIl0sb2U9NjAsZ2U9Uy5sZW5ndGg7aWYobnVsbD09USYmRy5zc2YpZm9yKDtvZTwzOTI7KytvZSlpZihudWxsPT1HLnNzZltvZV0pe0EubG9h''@;'; put 'put ''ZChrLnosb2UpLEcuc3NmW29lXT1rLnosRy5yZXZzc2Zbay56XT1RPW9lO2JyZWFrfXZhciBwZT0wLHllPTAsUGU9MCxOZT0wO2lmKEcuY2VsbFN0eWxlcyl7aWYoay5zKXtpZihHLkZvbnRzKXtrLnMuY29sb3J8fChrLnMuY29sb3I9e3RoZW1lOjEscmdiOiIwMDAwMDAifSk7Zm9yKHZhciBZ''@;'; put 'put ''ZT0oay5zLmJvbGQ/MTowKXwoay5zLml0YWxpYz8yOjApfChrLnMuc3RyaWtlPzQ6MCl8KGsucy5zaGFkb3c/ODowKTtwZTxHLkZvbnRzLmxlbmd0aDsrK3BlKXt2YXIgZXQ9Ry5Gb250c1twZV07aWYobnVsbD09ZXQuZm9udGhhc2gmJihldC5mb250aGFzaD0oZXQuYm9sZD8xOjApfChldC5p''@;'; put 'put ''dGFsaWM/MjowKXwoZXQuc3RyaWtlPzQ6MCl8KGV0LnNoYWRvdz84OjApKSwhKFllIT1ldC5mb250aGFzaHx8ISFrLnMuY29sb3IhPSEhZXQuY29sb3J8fGsucy52YWxpZ24hPWV0LnZhbGlnbnx8KGsucy5zenx8ZXQuc3opJiYoay5zLnN6fHwxMikhPShldC5zenx8MTIpfHxrLnMubmFtZSYm''@;'; put 'put ''ay5zLm5hbWUhPWV0Lm5hbWV8fChrLnMudW5kZXJsaW5lfHwwKSE9KGV0LnVuZGVybGluZXx8MCl8fGsucy5jb2xvciYmb2goay5zLmNvbG9yLGV0LmNvbG9yKSkpYnJlYWt9cGU9PUcuRm9udHMubGVuZ3RoJiYoRy5Gb250cy5wdXNoKHtzejprLnMuc3p8fDEyLGNvbG9yOmsucy5jb2xvcnx8''@;'; put 'put ''e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOmsucy5uYW1lfHwiQ2FsaWJyaSIsZmFtaWx5Omsucy5mYW1pbHl8fDIsc2NoZW1lOmsucy5zY2hlbWUsYm9sZDprLnMuYm9sZCxpdGFsaWM6ay5zLml0YWxpYyxzdHJpa2U6ay5zLnN0cmlrZSxzaGFkb3c6ay5zLnNoYWRvdyx2YWxpZ246ay5z''@;'; put 'put ''LnZhbGlnbix1bmRlcmxpbmU6ay5zLnVuZGVybGluZX0pLDE9PUcuRm9udHMubGVuZ3RoJiZJNChHLkZvbnRzWzBdKSl9aWYoRy5GaWxscyl7Zm9yKDt5ZTxHLkZpbGxzLmxlbmd0aDsrK3llKXt2YXIgY3Q9Ry5GaWxsc1t5ZV07aWYoISFrLnMuc3RvcHM9PSEhY3Quc3RvcHMpe2lmKGsucy5z''@;'; put 'put ''dG9wcyl7aWYoay5zLmFuZ2xlIT1jdC5hbmdsZSljb250aW51ZTt2YXIgRXQ9ITA7aWYoay5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3QsT3Qpe29oKGt0LGN0LnN0b3BzW090XSkmJihFdD0hMSksa3QudiE9Y3Quc3RvcHNbT3RdLnYmJihFdD0hMSl9KSwhRXQpY29udGludWV9ZWxzZXtp''@;'; put 'put ''ZihudWxsPT1rLnMucGF0dGVyblR5cGUmJmsucy5mZ0NvbG9yJiYoay5zLnBhdHRlcm5UeXBlPSJzb2xpZCIpLG51bGw9PWsucy5wYXR0ZXJuVHlwZSlicmVhaztpZihrLnMucGF0dGVyblR5cGUhPWN0LnBhdHRlcm5UeXBlfHxvaChrLnMuZmdDb2xvcixjdC5mZ0NvbG9yKXx8b2goay5zLmJn''@;'; put 'put ''Q29sb3IsY3QuYmdDb2xvcikpY29udGludWV9YnJlYWt9fWlmKHllPT1HLkZpbGxzLmxlbmd0aCl7dmFyIGF0PXt9O2sucy5zdG9wcz8obnVsbCE9ay5zLmFuZ2xlJiYoYXQuYW5nbGU9ay5zLmFuZ2xlKSxhdC5zdG9wcz1bXSxrLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihrdCl7YXQuc3Rv''@;'; put 'put ''cHMucHVzaChxdChrdCkpfSkpOmF0PXtwYXR0ZXJuVHlwZTprLnMucGF0dGVyblR5cGUsZmdDb2xvcjprLnMuZmdDb2xvcixiZ0NvbG9yOmsucy5iZ0NvbG9yfSxHLkZpbGxzLnB1c2goYXQpfX1pZihHLkJvcmRlcnMpe2Zvcig7UGU8Ry5Cb3JkZXJzLmxlbmd0aDsrK1BlKXt2YXIgYnQ9Ry5C''@;'; put 'put ''b3JkZXJzW1BlXSxqdD0idG9wIjtpZihrLnNbanRdKXtpZighYnRbanRdfHxrLnNbanRdLnN0eWxlIT1idFtqdF0uc3R5bGV8fG9oKGsuc1tqdF0uY29sb3IsYnRbanRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W2p0XSljb250aW51ZTtpZihrLnNbanQ9ImJvdHRvbSJdKXtp''@;'; put 'put ''ZighYnRbanRdfHxrLnNbanRdLnN0eWxlIT1idFtqdF0uc3R5bGV8fG9oKGsuc1tqdF0uY29sb3IsYnRbanRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W2p0XSljb250aW51ZTtpZihrLnNbanQ9ImxlZnQiXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0''@;'; put 'put ''eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJyaWdodCJdKXtpZighYnRbanRdfHxrLnNbanRdLnN0eWxlIT1idFtqdF0uc3R5bGV8fG9oKGsuc1tqdF0uY29sb3IsYnRbanRdLmNvbG9y''@;'; put 'put ''KSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W2p0XSljb250aW51ZTticmVha31QZT09Ry5Cb3JkZXJzLmxlbmd0aCYmRy5Cb3JkZXJzLnB1c2goe3RvcDprLnMudG9wJiZxdChrLnMudG9wKXx8dm9pZCAwLGJvdHRvbTprLnMuYm90dG9tJiZxdChrLnMuYm90dG9tKXx8dm9pZCAwLGxlZnQ6''@;'; put 'put ''ay5zLmxlZnQmJnF0KGsucy5sZWZ0KXx8dm9pZCAwLHJpZ2h0Omsucy5yaWdodCYmcXQoay5zLnJpZ2h0KXx8dm9pZCAwfSl9aWYoUiYmay5zLnN0eWxlJiYiTm9ybWFsIiE9PWsucy5zdHlsZSl7Zm9yKE5lPTE7TmU8Ui5sZW5ndGgmJlJbTmVdLm5hbWUhPWsucy5zdHlsZTsrK05lKTtOZT09''@;'; put 'put ''Ui5sZW5ndGgmJlIucHVzaCh7bmFtZTprLnMuc3R5bGUsbnVtRm10SWQ6USxmb250SWQ6cGUsZmlsbElkOnllLGJvcmRlcklkOlBlfSl9fWZvcihvZT0wO29lIT1nZTsrK29lKWlmKFNbb2VdLm51bUZtdElkPT1RJiZTW29lXS5mb250SWQ9PXBlJiZTW29lXS5maWxsSWQ9PXllJiZTW29lXS5i''@;'; put 'put ''b3JkZXJJZD09UGUmJlNbb2VdLnhmSWQ9PU5lKXtpZihrLnMmJmsucy5hbGlnbm1lbnQpe2lmKCFTW29lXS5hbGlnbm1lbnQpY29udGludWU7aWYoay5zLmFsaWdubWVudC5ob3Jpem9udGFsIT1TW29lXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8ay5zLmFsaWdubWVudC52ZXJ0aWNhbCE9U1tv''@;'; put 'put ''ZV0uYWxpZ25tZW50LnZlcnRpY2FsfHxrLnMuYWxpZ25tZW50LndyYXBUZXh0IT1TW29lXS5hbGlnbm1lbnQud3JhcFRleHR8fGsucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPVNbb2VdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8ay5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPVNbb2VdLmFs''@;'; put 'put ''aWdubWVudC50ZXh0Um90YXRpb258fGsucy5hbGlnbm1lbnQuaW5kZW50IT1TW29lXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoU1tvZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucyl7aWYoISFrLnMuaGlkZGVuPT0oIVNbb2VdLnByb3RlY3Rpb258fCFTW29lXS5wcm90''@;'; put 'put ''ZWN0aW9uLmhpZGRlbil8fCEhay5zLmVkaXRhYmxlPT0oIVNbb2VdLnByb3RlY3Rpb258fCFTW29lXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKFNbb2VdLnByb3RlY3Rpb24pY29udGludWU7cmV0dXJuIG9lfX1lbHNlIGZvcihvZT0wO29lIT1nZTsrK29lKWlmKFNb''@;'; put 'put ''b2VdLm51bUZtdElkPT09USlyZXR1cm4gb2U7cmV0dXJuIFNbZ2VdPXtudW1GbXRJZDpRLGZvbnRJZDpwZSxmaWxsSWQ6eWUsYm9yZGVySWQ6UGUseGZJZDpOZSxhcHBseU51bWJlckZvcm1hdDoxfSxwZT4wJiYoU1tnZV0uYXBwbHlGb250PTEpLHllPjAmJihTW2dlXS5hcHBseUZpbGw9MSks''@;'; put 'put ''UGU+MCYmKFNbZ2VdLmFwcGx5Qm9yZGVyPTEpLCFSJiZrLnMmJmsucy5zdHlsZSYmIk5vcm1hbCIhPWsucy5zdHlsZSYmKFNbZ2VdLnN0eWxlPWsucy5zdHlsZSksay5zJiZrLnMuYWxpZ25tZW50JiYoU1tnZV0uYWxpZ25tZW50PXt9LFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwid3JhcFRl''@;'; put 'put ''eHQiLCJzaHJpbmtUb0ZpdCIsImluZGVudCIsInRleHRSb3RhdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oa3Qpe251bGwhPWsucy5hbGlnbm1lbnRba3RdJiYoU1tnZV0uYWxpZ25tZW50W2t0XT1rLnMuYWxpZ25tZW50W2t0XSl9KSksay5zJiZrLnMuaGlkZGVuJiYoU1tnZV0ucHJvdGVjdGlv''@;'; put 'put ''bnx8KFNbZ2VdLnByb3RlY3Rpb249e30pLFNbZ2VdLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxrLnMmJmsucy5lZGl0YWJsZSYmKFNbZ2VdLnByb3RlY3Rpb258fChTW2dlXS5wcm90ZWN0aW9uPXt9KSxTW2dlXS5wcm90ZWN0aW9uLmVkaXRhYmxlPSEwKSxnZX1mdW5jdGlvbiBKMyhTLFIsayxH''@;'; put 'put ''LFEsb2UsZ2UscGUpeyJkIj09PVMudCYmInN0cmluZyI9PXR5cGVvZiBTLnYmJihTLnY9SGUoUy52KSk7dHJ5e29lLmNlbGxORiYmKFMuej1BLl90YWJsZVtSXSl9Y2F0Y2goUGUpe2lmKG9lLldURil0aHJvdyBQZX1pZigoIW9lfHwhMSE9PW9lLmNlbGxUZXh0KSYmInoiIT1TLnQpdHJ5e2lm''@;'; put 'put ''KG51bGw9PUEuX3RhYmxlW1JdJiZBLmxvYWQoc2VbUl18fCJHZW5lcmFsIixSKSwiZSI9PT1TLnQpUy53PVMud3x8TWNbUy52XTtlbHNlIGlmKDA9PT1SKWlmKCJuIj09PVMudClTLnc9KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik7ZWxzZSBp''@;'; put 'put ''ZigiZCI9PT1TLnQpe3ZhciB5ZT1RZShTLnYpO1Mudz0oMHx5ZSk9PT15ZT9BLl9nZW5lcmFsX2ludCh5ZSk6QS5fZ2VuZXJhbF9udW0oeWUpfWVsc2V7aWYodm9pZCAwPT09Uy52KXJldHVybiIiO1Mudz1BLl9nZW5lcmFsKFMudixjOCl9ZWxzZSBTLnc9QS5mb3JtYXQoUiwiZCI9PT1TLnQ/''@;'; put 'put ''UWUoUy52KTpTLnYsYzgpfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYob2UuY2VsbFN0eWxlcyYmcGUpe2lmKFMucz17fSxudWxsIT1rJiZwZS5GaWxscyl0cnl7UHQoUy5zLHBlLkZpbGxzW2tdKX1jYXRjaChQZSl7aWYob2UuV1RGKXRocm93IFBlfWlmKG51bGwhPUcmJnBlLkZv''@;'; put 'put ''bnRzKXRyeXtQdChTLnMscGUuRm9udHNbR10pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9aWYobnVsbCE9USYmcGUuQm9yZGVycyl0cnl7UHQoUy5zLHBlLkJvcmRlcnNbUV0pfWNhdGNoKFBlKXtpZihvZS5XVEYpdGhyb3cgUGV9fX1mdW5jdGlvbiBnRChTLFIsayl7aWYoUyYmU1si''@;'; put 'put ''IXJlZiJdKXt2YXIgRz1vbyhTWyIhcmVmIl0pO2lmKEcuZS5jPEcucy5jfHxHLmUucjxHLnMucil0aHJvdyBuZXcgRXJyb3IoIkJhZCByYW5nZSAoIitrKyIpOiAiK1NbIiFyZWYiXSl9fXZhciBkOD0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxtRD0v''@;'; put 'put ''PCg/Olx3KzopP3NoZWV0RGF0YVtePl0qPihbXHNcU10qKTxcLyg/Olx3KzopP3NoZWV0RGF0YT4vLHVTPS88KD86XHc6KT9oeXBlcmxpbmsgW14+XSo+L2dtLG9iPS8iKFx3KjpcdyopIi8sdGo9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyx2RD0vPCg/Olx3Oik/Y29udHJvbFxiW14+''@;'; put 'put ''XSpbXC9dPz4vZyxuaj0vPCg/Olx3Oik/YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0b0ZpbHRlcik+L2csYkQ9LzwoPzpcdzopP3BhZ2VNYXJnaW5zW14+XSpcLz4vZyx5RD0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLF9EPS88''@;'; put 'put ''KD86XHc6KT9zaGVldFByb3RlY3Rpb25cYig/OltePmEtel1bXj5dKik/XC8+Lyx3RD0vPCg/Olx3Oik/c2hlZXRQcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFByKT4vLFJvPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpc''@;'; put 'put ''dzopP3NoZWV0Vmlld3MpPi8sZmU9LzwoPzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9kYXRhVmFsaWRhdGlvbnMpPi8sZFM9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxc''@;'; put 'put ''Lyg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZyk+L2csR2U9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwvPi8sQ0Q9LzwoPzpcdys6KT90YWJsZVBhcnRzLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sU0Q9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+''@;'; put 'put ''Lyxyaj0vPCg/Olx3Oik/cm93QnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+LyxzYj0vPCg/Olx3Oik/Y29sQnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxqZz0vPCg/Olx3Oik/aGVhZGVyRm9vdGVy''@;'; put 'put ''W14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2hlYWRlckZvb3Rlcik+LyxoUz0vPCg/Olx3Oik/cHJpbnRPcHRpb25zXGJbXj5cL10qXC8+Lzt2YXIgZlM9LzwoPzpcdzopP3RhYmxlUGFydFxiW15cLz5dKltcL10/Pi9nO2Z1bmN0aW9uIGxiKFMsUixrLEcpe3ZhciBRPXZyKFMp''@;'; put 'put ''O2suU2hlZXRzW0ddfHwoay5TaGVldHNbR109e30pLFEuY29kZU5hbWUmJihrLlNoZWV0c1tHXS5Db2RlTmFtZT1RLmNvZGVOYW1lKX12YXIgbVM9LzwoPzpcdzopP3RhYkNvbG9yW14+XSpbXC9dPz4vLGlqPS88KD86XHc6KT9wYWdlU2V0VXBQcltePl0qW1wvXT8+Lyxhaj0vPCg/Olx3Oik/''@;'; put 'put ''b3V0bGluZVByW14+XSpbXC9dPz4vLEVEPXtkaXNwbGF5ZWQ6ImFzRGlzcGxheWVkIixlbmQ6ImF0RW5kIixub25lOiJub25lIn0sVEQ9VmUoRUQpLEFEPXtkaXNwbGF5ZWQ6ImRpc3BsYXllZCIsbm9uZToiYmxhbmsiLGRhc2g6ImRhc2giLCJuL2EiOiJOQSJ9LGtEPVZlKEFEKSxGMD0vPCg/''@;'; put 'put ''Olx3Oik/YnJrW14+XSpcLz4vZyxiUz1bIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJzZWxlY3RMb2NrZWRDZWxscyIsInNlbGVjdFVubG9ja2VkQ2VsbHMiXSxSRD1bImZvcm1hdENvbHVtbnMiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Q2VsbHMiLCJpbnNlcnRDb2x1bW5zIiwiaW5zZXJ0Um93cyIs''@;'; put 'put ''Imluc2VydEh5cGVybGlua3MiLCJkZWxldGVDb2x1bW5zIiwiZGVsZXRlUm93cyIsInNvcnQiLCJhdXRvRmlsdGVyIiwicGl2b3RUYWJsZXMiXTtmdW5jdGlvbiBPRChTKXt2YXIgUj17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oayl7U1trXSYmKFJba109cGFyc2VGbG9hdChTW2tdKSl9KSxSfXZhciB1aD17Q3VzdG9tOiJjdXN0b20iLERhdGU6ImRhdGUiLFRpbWU6InRpbWUiLExlbmd0aDoidGV4dExlbmd0aCIsTGlzdDoibGlzdCIsRGVjaW1hbDoiZGVjaW1hbCIsV2hvbGU6Indob2xlIixB''@;'; put 'put ''bnk6Im5vbmUifSxfUz1WZSh1aCksY2I9e0lOOiJiZXR3ZWVuIixPVDoibm90QmV0d2VlbiIsRVE6ImVxdWFsIixORToibm90RXF1YWwiLEdUOiJncmVhdGVyVGhhbiIsTFQ6Imxlc3NUaGFuIixHRToiZ3JlYXRlclRoYW5PckVxdWFsIixMRToibGVzc1RoYW5PckVxdWFsIn0sUEQ9VmUoY2Ip''@;'; put 'put ''O2Z1bmN0aW9uIHdTKFMsUixrKXt2YXIgRz1bXSxRPXt9LG9lPSIiLGdlPSExLHBlPTAseWU9MDtyZXR1cm4gUy5yZXBsYWNlKGVuLGZ1bmN0aW9uKFBlLE5lKXt2YXIgWWU9dnIoUGUpO3N3aXRjaChXbihZZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRp''@;'; put 'put ''b25zPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjpRPXt0Ol9TW1llLnR5cGV8fCJub25lIl0scmVmOihvZT1ZZS5zcXJlZik/b2UuaW5kZXhPZigiICIpPi0xP29lOm9vKG9lKToiIn0sWWUub3BlcmF0b3ImJihRLm9wPVBEW1llLm9wZXJh''@;'; put 'put ''dG9yXSksUS5ibGFuaz0hIVllLmFsbG93QmxhbmsmJnRpKFllLmFsbG93QmxhbmspLCghWWUuc2hvd0lucHV0TWVzc2FnZXx8IXRpKFllLnNob3dJbnB1dE1lc3NhZ2UpKSYmKFEuaW5wdXQ9ITEpLFllLnByb21wdFRpdGxlJiYoKFEuaW5wdXR8fChRLmlucHV0PXt9KSkudGl0bGU9UXIoWWUu''@;'; put 'put ''cHJvbXB0VGl0bGUpKSxZZS5wcm9tcHQmJigoUS5pbnB1dHx8KFEuaW5wdXQ9e30pKS5tZXNzYWdlPVFyKFllLnByb21wdCkpLCghWWUuc2hvd0Vycm9yTWVzc2FnZXx8IXRpKFllLnNob3dFcnJvck1lc3NhZ2UpKSYmKFEuZXJyb3I9ITEpLFllLmVycm9yVGl0bGUmJigoUS5lcnJvcnx8KFEu''@;'; put 'put ''ZXJyb3I9e30pKS50aXRsZT1RcihZZS5lcnJvclRpdGxlKSksWWUuZXJyb3ImJigoUS5lcnJvcnx8KFEuZXJyb3I9e30pKS5tZXNzYWdlPVFyKFllLmVycm9yKSksUS5lcnJvcj9RLmVycm9yLnN0eWxlPVllLmVycm9yU3R5bGV8fCJzdG9wIjpZZS5lcnJvclN0eWxlJiYoUS5lcnJvcj17c3R5''@;'; put 'put ''bGU6WWUuZXJyb3JTdHlsZX0pLFEudCYmRy5wdXNoKFEpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6eWU9TmUrUGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOm9lPVMuc2xpY2UoeWUsTmUpLFEu''@;'; put 'put ''cmVmPW9lP29lLmluZGV4T2YoIiAiKT4tMT9vZTpvbyhvZSk6IiI7YnJlYWs7Y2FzZSI8Zj4iOmNhc2UiPGZvcm11bGExIjpjYXNlIjxmb3JtdWxhMT4iOmNhc2UiPGZvcm11bGEyIjpjYXNlIjxmb3JtdWxhMj4iOnBlPU5lK1BlLmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYTE+IjpjYXNl''@;'; put 'put ''IjwvZm9ybXVsYTI+IjppZihrKWJyZWFrO2Nhc2UiPC9mPiI6dmFyIGV0PVFyKGdvKFMuc2xpY2UocGUsTmUpKSk7c3dpdGNoKFEudCl7Y2FzZSJMaXN0IjppZihRLmx8fFEuZilicmVhaztpZigzND09ZXQuY2hhckNvZGVBdCgwKSl7US5sPWV0LnNsaWNlKDEsLTEpLnNwbGl0KCIsIik7YnJl''@;'; put 'put ''YWt9Y2FzZSJDdXN0b20iOm51bGw9PVEuZiYmKFEuZj1ldCk7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIlRpbWUiOmNhc2UiV2hvbGUiOlEub3B8fChRLm9wPSJJTiIpLG51bGw9PVEudj9RLnY9aXNOYU4oK2V0KT9ldDorZXQ6KFEubWluPVEudixR''@;'; put 'put ''Lm1heD1pc05hTigrZXQpP2V0OitldCxkZWxldGUgUS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpnZT0hMTticmVhaztkZWZhdWx0OmlmKFImJlIuV1RGJiYhZ2Up''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitZZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBQZX0pLEd9dmFyIGY4PXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0sdWI9VmUoZjgpLHlq''@;'; put 'put ''PXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LEhEPVZlKHlqKTtmdW5jdGlvbiBw''@;'; put 'put ''OChTKXt2YXIgUj17fTtyZXR1cm4gbnVsbCE9Uy52YWwmJihpc05hTigrUy52YWwpP1IuZj1TLnZhbDpSLnY9K1MudmFsKSxSLnQ9Uy50eXBlLFJ9ZnVuY3Rpb24gVzQoUyl7cmV0dXJuIFByKCJjZnZvIixudWxsLHt0eXBlOlMudCx2YWw6bnVsbCE9Uy52P1MudjpMcihTLmYpfSl9ZnVuY3Rp''@;'; put 'put ''b24gemcoUyxSLGssRyl7dmFyIFE9cDgoUyk7cmV0dXJuIFEuY29sb3I9cGsoUixrLEcpLFF9ZnVuY3Rpb24gdjIoUyxSLGssRyxRKXt2YXIgb2U9KFMubWF0Y2goL3NxcmVmPSIoW1x3OiQgXSopIi8pfHxbXSlbMV07cmV0dXJuIGZ1bmN0aW9uIENTKFMsUixrLEcsUSxvZSl7dmFyIGdlPSEx''@;'; put 'put ''LHBlPVtdLHllPXtmOltdfSxQZT0wLE5lPTAsWWU9e2Nmdm9zOltdLGNvbG9yczpbXX0sZXQ9e30sY3Q9LTEsRXQ9MCxhdD0iIjtyZXR1cm4gUy5yZXBsYWNlKGVuLGZ1bmN0aW9uKGJ0LGp0KXt2YXIga3Q9dnIoYnQpO3N3aXRjaChXbihrdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0''@;'; put 'put ''dGluZyI6Y2FzZSI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4iOmJyZWFrO2Nhc2UiPGNmUnVsZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoTmU9anQsZXQ9a3QseWU9e3JlZjpSLGY6W119LCFidC5tYXRjaCgvXC8+LykpYnJlYWs7Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChldC5keGZJZCYmUSYmUS5E''@;'; put 'put ''WEYmJih5ZS5zPVEuRFhGWytldC5keGZJZF0pLGV0LnR5cGUpe2Nhc2UiZHVwbGljYXRlVmFsdWVzIjp5ZS50PSJkdXAiO2JyZWFrO2Nhc2UidW5pcXVlVmFsdWVzIjp5ZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29udGFpbnNCbGFua3MiOnllLnQ9ImJsYW5rIix5ZS52PSEwO2JyZWFrO2Nh''@;'; put 'put ''c2Uibm90Q29udGFpbnNCbGFua3MiOnllLnQ9ImJsYW5rIix5ZS52PSExO2JyZWFrO2Nhc2UiY29udGFpbnNFcnJvcnMiOnllLnQ9ImVycm9yIix5ZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOnllLnQ9ImVycm9yIix5ZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0''@;'; put 'put ''Y2goZXQub3BlcmF0b3Ipe2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zIjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKHllLnQ9InRleHQiLHllLm9wPXViW2V0Lm9wZXJhdG9yXSxudWxsPT1ldC50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxl''@;'; put 'put ''ICIreWUub3ArIiBtaXNzaW5nIHRleHQiKTt5ZS52PWV0LnRleHQseWUuZj15ZS5mWzBdLG51bGw9PXllLmYmJmRlbGV0ZSB5ZS5mO2JyZWFrO2RlZmF1bHQ6eWUudD0idmFsIix5ZS5vcD1QRFtldC5vcGVyYXRvcl0sMT09eWUuZi5sZW5ndGg/aXNOYU4oK3llLmZbMF0pP3llLmY9eWUuZlsw''@;'; put 'put ''XTooeWUudj0reWUuZlswXSxkZWxldGUgeWUuZik6KHllLm1pbj1pc05hTigreWUuZlswXSk/eWUuZlswXToreWUuZlswXSx5ZS5tYXg9aXNOYU4oK3llLmZbMV0pP3llLmZbMV06K3llLmZbMV0sZGVsZXRlIHllLmYpfWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6eWUudD0iZm9ybXVsYSIseWUu''@;'; put 'put ''Zj15ZS5mWzBdO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zVGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZih5ZS50PSJ0ZXh0Iix5ZS5vcD11YltldC50eXBlXSxudWxsPT1ldC50ZXh0JiZ5ZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiQ0YgVGV4dCBSdWxlICIreWUub3ArIiBtaXNzaW5nIHRleHQiKTt5ZS52PW51bGwhPWV0LnRleHQ/ZXQudGV4dDp5ZS5mWzFdLm1hdGNoKC8iLioiLyk/eWUuZlsxXS5zbGljZSgxLC0xKTp5ZS5mWzFdLHllLmY9eWUuZlswXSxudWxsPT15ZS5mJiZkZWxldGUgeWUuZjticmVhaztjYXNl''@;'; put 'put ''ImNvbG9yU2NhbGUiOmlmKHllLnQ9InNjYWxlIiwheWUuY29sb3JTY2FsZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2FsZSIpO3llLmNtaW49emcoKFllPXllLmNvbG9yU2NhbGUpLmNmdm9zWzBdLFllLmNvbG9yc1swXSxRLEcpLDM9PVllLmNmdm9zLmxlbmd0aCYmKHllLmNt''@;'; put 'put ''aWQ9emcoWWUuY2Z2b3NbMV0sWWUuY29sb3JzWzFdLFEsRykpLHllLmNtYXg9emcoWWUuY2Z2b3NbWWUuY2Z2b3MubGVuZ3RoLTFdLFllLmNvbG9yc1tZZS5jZnZvcy5sZW5ndGgtMV0sUSxHKTticmVhaztjYXNlImRhdGFCYXIiOmlmKHllLnQ9ImJhciIsIXllLmRhdGFCYXIpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJtaXNzaW5nIGRhdGFCYXIiKTsoWWU9eWUuZGF0YUJhcikuY29sb3JzWzBdJiYoeWUuY29sb3I9cGsoWWUuY29sb3JzWzBdLFEsRykpLHllLmNtaW49cDgoWWUuY2Z2b3NbMF0pLHllLmNtYXg9cDgoWWUuY2Z2b3NbMV0pO2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoeWUudD0iaWNv''@;'; put 'put ''biIsIXllLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTt5ZS50aHJlc2g9KFllPXllLmljb25TZXQpLmNmdm9zLm1hcChmdW5jdGlvbihPdCl7cmV0dXJuIHA4KE90KX0pLHllLnY9WWUudGFnJiZZZS50YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIseWUu''@;'; put 'put ''cmV2PXRpKFllLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSx5ZS5wY3Q9dGkoWWUudGFnLnBlcmNlbnR8fCJ0cnVlIikseWUuaGlkZGVuPSF0aShZZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6eWUudD0iZGF0ZSIseWUub3A9SERbZXQudGltZVBlcmlvZF07''@;'; put 'put ''YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOnllLnQ9ImF2ZyIseWUub3A9IjAiPT1ldC5hYm92ZUF2ZXJhZ2U/IkwiOiJHIix5ZS5vcCs9ZXQuc3RkRGV2P2V0LnN0ZERldjp0aShldC5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjticmVhaztjYXNlInRvcDEwIjp5ZS50PSJyYW5rIix5ZS5v''@;'; put 'put ''cD0odGkoZXQuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyh0aShldC5wZXJjZW50fHwiMCIpPyJQIjoiViIpLHllLnY9K2V0LnJhbms7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrZXQudHlwZX1pZihkZWxldGUgeWUuY29sb3JTY2FsZSxkZWxldGUgeWUuZGF0YUJh''@;'; put 'put ''cixkZWxldGUgeWUuaWNvblNldCwheWUudCl0aHJvdyBjb25zb2xlLmxvZyhTLnNsaWNlKE5lLGp0K2J0Lmxlbmd0aCkpLCJiYWQgQ0YgcnVsZSI7bnVsbCE9eWUuZiYmIXllLmYubGVuZ3RoJiZkZWxldGUgeWUuZix5ZS5kZWx8fHBlLnB1c2goeWUpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNh''@;'; put 'put ''c2UiPGZvcm11bGE+IjpQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+Ijp5ZS5mLnB1c2goUXIoUy5zbGljZShQZSxqdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6UGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mPiI6eWUuZi5wdXNoKFFyKFMuc2xpY2UoUGUs''@;'; put 'put ''anQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjpFdD1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6YXQ9Uy5zbGljZShFdCxqdCksUj1hdD9hdC5pbmRleE9mKCIgIik+LTE/YXQ6b28oYXQpOiIiLHllLnJlZj1SLHBlLmZvckVhY2goZnVuY3Rpb24oT3Qpe090LnJlZj1SfSk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6WWU9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6a3R9LFBlPWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvY29s''@;'; put 'put ''b3JTY2FsZT4iOnllLmNvbG9yU2NhbGU9WWU7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+Ijp5ZS5kYXRhQmFyPVllO2JyZWFrO2Nhc2UiPC9pY29uU2V0PiI6eWUuaWNvblNldD1ZZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4iOlllLmNmdm9zLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9j''@;'; put 'put ''ZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOlllLmNvbG9ycy5wdXNoKGt0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpnZT0hMTticmVhaztj''@;'; put 'put ''YXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjp5ZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6Z2U9ITAsY3Q9anQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOmdlPSEx''@;'; put 'put ''LHllLnM9TDQoUy5zbGljZShjdCxqdCtidC5sZW5ndGgpLFEsRyxrKTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGKXtpZihvZSlicmVhaztpZighZ2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitrdFswXSsiIGluIGNvbmRmbXQiKX19cmV0dXJuIGJ0fSkscGV9KFMsb2UsUixr''@;'; put 'put ''LEcsUSl9dmFyIFNTPS88KD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiBtOChTLFIpe3ZhciBrPTAsRz0wLFE9MCxvZT0wO2lmKCFSfHwhUi5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIGdlPVIuQ2VsbFhmW1NdO251bGwhPWdlJiYobnVsbCE9Z2UubnVt''@;'; put 'put ''Rm10SWQmJihrPWdlLm51bUZtdElkKSxudWxsIT1nZS5maWxsSWQmJihHPWdlLmZpbGxJZCksbnVsbCE9Z2UuZm9udElkJiYoUT1nZS5mb250SWQpLG51bGwhPWdlLmJvcmRlcklkJiYob2U9Z2UuYm9yZGVySWQpKTt2YXIgcGU9e3Q6InoifTt0cnl7SjMocGUsayxHLFEsb2Use1dURjoxLGNl''@;'; put 'put ''bGxTdHlsZXM6ITB9LDAsUil9Y2F0Y2h7fXJldHVybiBwZS5zfWZ1bmN0aW9uIFVnKFMsUixrLEcpe2lmKHZvaWQgMD09PVMudiYmdm9pZCAwPT09Uy5mJiZudWxsPT1TLnMmJiFTLmN8fCJ6Ij09PVMudCYmIVMuYyYmIUcuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgUT0iIixvZT1TLnQsZ2U9''@;'; put 'put ''Uy52O2lmKCJ6IiE9PVMudClzd2l0Y2goUy50KXtjYXNlImIiOlE9Uy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJuIjpRPSIiK1MudjticmVhaztjYXNlImUiOlE9TWNbUy52XTticmVhaztjYXNlImQiOkcmJkcuY2VsbERhdGVzP1E9SGUoUy52LC0xKS50b0lTT1N0cmluZygpOigoUz1xdChTKSku''@;'; put 'put ''dD0ibiIsUT0iIisoUy52PVFlKEhlKFMudikpKSksdHlwZW9mIFMuej4idSImJihTLno9QS5fdGFibGVbMTRdKTticmVhaztkZWZhdWx0OlE9Uy52fXZhciBwZT0ieiI9PVMudD8iIjpIYSgidiIsTHIoUSkpLHllPXtyOlJ9LFBlPUc/bDAoRy5jZWxsWGZzLEcuY2VsbFN0eWxlWGZzLFMsRyk6''@;'; put 'put ''MDtzd2l0Y2goMCE9PVBlJiYoeWUucz1QZSksUy50KXtjYXNlIm4iOmNhc2UieiI6YnJlYWs7Y2FzZSJkIjp5ZS50PSJkIjticmVhaztjYXNlImIiOnllLnQ9ImIiO2JyZWFrO2Nhc2UiZSI6eWUudD0iZSI7YnJlYWs7ZGVmYXVsdDppZihudWxsPT1TLnYpe2RlbGV0ZSBTLnQ7YnJlYWt9aWYo''@;'; put 'put ''RyYmRy5ib29rU1NUKXtwZT1IYSgidiIsIiIrYVMoRy5TdHJpbmdzLFMudixTLlI/Uy5yPUpzKFMuUik6bnVsbCxHLnJldlN0cmluZ3MpKSx5ZS50PSJzIjticmVha31BcnJheS5pc0FycmF5KFMuUik/KHBlPSI8aXM+IitKcyhTLlIpKyI8L2lzPiIseWUudD0iaW5saW5lU3RyIik6eWUudD0i''@;'; put 'put ''c3RyIn1pZihTLnQhPW9lJiYoUy50PW9lLFMudj1nZSksUy5mKXt2YXIgTmU9Uy5GJiZTLkYuc2xpY2UoMCxSLmxlbmd0aCk9PVI/e3Q6ImFycmF5IixyZWY6Uy5GfTpudWxsO3BlPVByKCJmIixMcihTLmYpLE5lKSsobnVsbCE9Uy52P3BlOiIiKX1yZXR1cm4gUy5sJiZrWyIhbGlua3MiXS5w''@;'; put 'put ''dXNoKFtSLFMubF0pLFMuYyYma1siIWNvbW1lbnRzIl0ucHVzaChbUixTLmNdKSxQcigiYyIscGUseWUpfXZhciB2OD1mdW5jdGlvbigpe3ZhciBTPS88KD86XHcrOik/Y1sgXC8+XS8sUj0vPFwvKD86XHcrOik/cm93Pi8saz0vcj1bIiddKFteIiddKilbIiddLyxHPS88KD86XHcrOik/aXM+''@;'; put 'put ''KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sUT0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLG9lPUQwKCJ2IiksZ2U9RDAoImYiKTtyZXR1cm4gZnVuY3Rpb24oeWUsUGUsTmUsWWUsZXQsY3QsRXQpe2Zvcih2YXIgU24sbHIsZnIsYnIsTGksYXQ9MCxidD0iIixqdD1bXSxrdD1bXSxPdD0wLEt0''@;'; put 'put ''PTAsVG49MCxycj0iIixYbj0wLEJuPTAsZXI9MCxNaT0wLEZpPTAsbmE9MCxjYT1BcnJheS5pc0FycmF5KEV0LkNlbGxYZiksa3I9W10sVm49W10sQnI9QXJyYXkuaXNBcnJheShOZSksX3I9W10sRm49e30sanI9ITEsWmk9eWUuc3BsaXQoUikseWk9ISFZZS5zaGVldFN0dWJzLF9hPSEhWWUu''@;'; put 'put ''Y2VsbEhUTUwsc289ISghMT09PVllLmNlbGxUZXh0JiYhWWUuY2VsbE5GJiYhWWUuY2VsbFN0eWxlcyksaWE9MCxMbz1aaS5sZW5ndGg7aWEhPUxvOysraWEpe3ZhciBPYT0oYnQ9WmlbaWFdLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1PYSl7dmFyIGhvPTA7ZTpmb3IoYXQ9MDthdDxPYTsrK2F0''@;'; put 'put ''KXN3aXRjaChidFthdF0pe2Nhc2UiPiI6aWYoIi8iIT1idFthdC0xXSl7KythdDticmVhayBlfVllLmNlbGxTdHlsZXMmJm51bGwhPShscj12cihidC5zbGljZShobyxhdCksITApKS5yJiZwYXJzZUludChsci5yLDEwKSYmKFhuPXBhcnNlSW50KGxyLnIsMTApLEZuPXt9LGpyPSExLGxyLmh0''@;'; put 'put ''JiYoanI9ITAsRm4uaHB0PXBhcnNlRmxvYXQobHIuaHQpLEZuLmhweD1zaChGbi5ocHQpKSxsci5keURlc2NlbnQmJihqcj0hMCxGbi5keURlc2NlbnQ9bHIuZHlEZXNjZW50KSwiMSI9PWxyLmhpZGRlbiYmKGpyPSEwLEZuLmhpZGRlbj0hMCksbnVsbCE9bHIub3V0bGluZUxldmVsJiYoanI9''@;'; put 'put ''ITAsRm4ubGV2ZWw9K2xyLm91dGxpbmVMZXZlbCksbHIucyYmRXQmJkV0LkNlbGxYZiYmKGpyPSEwLEZuLnM9bTgobHIucyxFdCkpLGpyJiYoX3JbWG4tMV09Rm4pKTticmVhaztjYXNlIjwiOmhvPWF0fWlmKGhvPj1hdClicmVhaztpZihYbj1udWxsIT0obHI9dnIoYnQuc2xpY2UoaG8sYXQp''@;'; put 'put ''LCEwKSkucj9wYXJzZUludChsci5yLDEwKTpYbisxLEJuPS0xLCEoWWUuc2hlZXRSb3dzJiZZZS5zaGVldFJvd3M8WG4pKXtZZS5ub2RpbXx8KGV0LnMucj5Ybi0xJiYoZXQucy5yPVhuLTEpLGV0LmUucjxYbi0xJiYoZXQuZS5yPVhuLTEpKTt2YXIgSmE9e3Q6InJvdyIscm93OltdLFI6WG4t''@;'; put 'put ''MSxpZHg6UGV9O1llLmNlbGxTdHlsZXMmJihGbj17fSxqcj0hMSxsci5odCYmKGpyPSEwLEZuLmhwdD1wYXJzZUZsb2F0KGxyLmh0KSxGbi5ocHg9c2goRm4uaHB0KSksbHIuZHlEZXNjZW50JiYoanI9ITAsRm4uZHlEZXNjZW50PWxyLmR5RGVzY2VudCksIjEiPT1sci5oaWRkZW4mJihqcj0h''@;'; put 'put ''MCxGbi5oaWRkZW49ITApLG51bGwhPWxyLm91dGxpbmVMZXZlbCYmKGpyPSEwLEZuLmxldmVsPStsci5vdXRsaW5lTGV2ZWwpLGxyLnMmJihqcj0hMCxGbi5zPW04KGxyLnMsRXQpKSxqciYmKFllLmNhbGxiYWNrP0phLnByb3BzPUZuOl9yW1huLTFdPUZuKSksanQ9YnQuc2xpY2UoYXQpLnNw''@;'; put 'put ''bGl0KFMpO2Zvcih2YXIgQmk9MDtCaSE9anQubGVuZ3RoJiYiPCI9PWp0W0JpXS50cmltKCkuY2hhckF0KDApOysrQmkpO2ZvcihqdD1qdC5zbGljZShCaSksYXQ9MDthdCE9anQubGVuZ3RoOysrYXQpaWYoMCE9PShidD1qdFthdF0udHJpbSgpKS5sZW5ndGgpe2lmKGt0PWJ0Lm1hdGNoKGsp''@;'; put 'put ''LE90PWF0LEt0PTAsVG49MCxidD0iPGMgIisoIjwiPT1idC5zbGljZSgwLDEpPyI+IjoiIikrYnQsbnVsbCE9a3QmJjI9PT1rdC5sZW5ndGgpe2ZvcihPdD0wLHJyPWt0WzFdLEt0PTA7S3QhPXJyLmxlbmd0aCYmISgoVG49cnIuY2hhckNvZGVBdChLdCktNjQpPDF8fFRuPjI2KTsrK0t0KU90''@;'; put 'put ''PTI2Kk90K1RuO0JuPS0tT3R9ZWxzZSsrQm47Zm9yKEt0PTA7S3QhPWJ0Lmxlbmd0aCYmNjIhPT1idC5jaGFyQ29kZUF0KEt0KTsrK0t0KTtpZigrK0t0LChscj12cihidC5zbGljZSgwLEt0KSwhMCkpLnJ8fChsci5yPXFpKHtyOlhuLTEsYzpCbn0pKSxTbj17dDoiIn0sbnVsbCE9KGt0PShy''@;'; put 'put ''cj1idC5zbGljZShLdCkpLm1hdGNoKG9lKSkmJiIiIT09a3RbMV0mJihTbi52PVFyKGt0WzFdKSksWWUuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrdD1yci5tYXRjaChnZSkpJiYiIiE9PWt0WzFdKXtpZihTbi5mPVFyKGdvKGt0WzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLFllLnhsZm58''@;'; put 'put ''fChTbi5mPUVCKFNuLmYpKSxrdFswXS5pbmRleE9mKCd0PSJhcnJheSInKT4tMSlTbi5GPShyci5tYXRjaChRKXx8W10pWzFdLFNuLkYuaW5kZXhPZigiOiIpPi0xJiZrci5wdXNoKFtvbyhTbi5GKSxTbi5GXSk7ZWxzZSBpZihrdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe2JyPXZy''@;'; put 'put ''KGt0WzBdKTt2YXIgSXM9UXIoZ28oa3RbMV0pKTtZZS54bGZufHwoSXM9RUIoSXMpKSxWbltwYXJzZUludChici5zaSwxMCldPVticixJcyxsci5yXX19ZWxzZShrdD1yci5tYXRjaCgvPGZbXj5dKlwvPi8pKSYmVm5bKGJyPXZyKGt0WzBdKSkuc2ldJiYoU24uZj1kbmUoVm5bYnIuc2ldWzFd''@;'; put 'put ''LFZuW2JyLnNpXVsyXSxsci5yKSk7dmFyIFBuPU5vKGxyLnIpO2ZvcihLdD0wO0t0PGtyLmxlbmd0aDsrK0t0KVBuLnI+PWtyW0t0XVswXS5zLnImJlBuLnI8PWtyW0t0XVswXS5lLnImJlBuLmM+PWtyW0t0XVswXS5zLmMmJlBuLmM8PWtyW0t0XVswXS5lLmMmJihTbi5GPWtyW0t0XVsxXSl9''@;'; put 'put ''aWYobnVsbD09bHIudCYmdm9pZCAwPT09U24udilpZihTbi5mfHxTbi5GKVNuLnY9MCxTbi50PSJuIjtlbHNle2lmKCF5aSljb250aW51ZTtTbi50PSJ6In1lbHNlIFNuLnQ9bHIudHx8Im4iO3N3aXRjaChldC5zLmM+Qm4mJihldC5zLmM9Qm4pLGV0LmUuYzxCbiYmKGV0LmUuYz1CbiksU24u''@;'; put 'put ''dCl7Y2FzZSJuIjppZigiIj09U24udnx8bnVsbD09U24udil7aWYoIXlpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgU24udj1wYXJzZUZsb2F0KFNuLnYpO2JyZWFrO2Nhc2UicyI6aWYodHlwZW9mIFNuLnY+InUiKXtpZigheWkpY29udGludWU7U24udD0ieiJ9ZWxzZSBmcj1sOFtwYXJzZUlu''@;'; put 'put ''dChTbi52LDEwKV0sU24udj1mci50LFNuLnI9ZnIucixmci5SJiYoU24uUj1mci5SKSxfYSYmKFNuLmg9ZnIuaCk7YnJlYWs7Y2FzZSJzdHIiOlNuLnQ9InMiLFNuLnY9bnVsbCE9U24udj9nbyhTbi52KToiIixfYSYmKFNuLmg9bGEoU24udikpO2JyZWFrO2Nhc2UiaW5saW5lU3RyIjprdD1y''@;'; put 'put ''ci5tYXRjaChHKSxTbi50PSJzIixudWxsIT1rdCYmKGZyPXVDKGt0WzFdKSk/KFNuLnY9ZnIudCxmci5SJiYoU24uUj1mci5SKSxfYSYmKFNuLmg9ZnIuaCkpOlNuLnY9IiI7YnJlYWs7Y2FzZSJiIjpTbi52PXRpKFNuLnYpO2JyZWFrO2Nhc2UiZCI6WWUuY2VsbERhdGVzP1NuLnY9SGUoU24u''@;'; put 'put ''diwxKTooU24udj1RZShIZShTbi52LDEpKSxTbi50PSJuIik7YnJlYWs7Y2FzZSJlIjohMSE9PVllLmNlbGxUZXh0JiYoU24udz1Tbi52KSxTbi52PVAzW1NuLnZdfWlmKHNvKXtlcj1NaT1GaT1uYT0wLExpPW51bGwsY2EmJnZvaWQgMCE9PWxyLnMmJm51bGwhPShMaT1FdC5DZWxsWGZbbHIu''@;'; put 'put ''c10pJiYobnVsbCE9TGkubnVtRm10SWQmJihlcj1MaS5udW1GbXRJZCksWWUuY2VsbFN0eWxlcyYmKG51bGwhPUxpLmZpbGxJZCYmKE1pPUxpLmZpbGxJZCksbnVsbCE9TGkuZm9udElkJiYoRmk9TGkuZm9udElkKSxudWxsIT1MaS5ib3JkZXJJZCYmKG5hPUxpLmJvcmRlcklkKSkpO3RyeXtK''@;'; put 'put ''MyhTbixlcixNaSxGaSxuYSxZZSwwLEV0KX1jYXRjaHt9WWUuY2VsbFN0eWxlcyYmU24ucyYmKExpJiZMaS5hbGlnbm1lbnQmJihTbi5zLmFsaWdubWVudD1xdChMaS5hbGlnbm1lbnQpKSxMaSYmTGkucHJvdGVjdGlvbiYmKG51bGwhPUxpLnByb3RlY3Rpb24uaGlkZGVuJiYoU24ucy5oaWRk''@;'; put 'put ''ZW49TGkucHJvdGVjdGlvbi5oaWRkZW4pLG51bGwhPUxpLnByb3RlY3Rpb24uZWRpdGFibGUmJihTbi5zLmVkaXRhYmxlPUxpLnByb3RlY3Rpb24uZWRpdGFibGUpKSxMaSYmTGkuc3R5bGUmJihTbi5zLnN0eWxlPUxpLnN0eWxlKSksWWUuY2VsbERhdGVzJiZjYSYmIm4iPT1Tbi50JiZBLmlz''@;'; put 'put ''X2RhdGUoQS5fdGFibGVbZXJdKSYmKFNuLnQ9ImQiLFNuLnY9dW4oU24udikpfXZhciBXbztZZS5ub2RpbSYmKFdvPU5vKGxyLnIpLGV0LnMucj5Xby5yJiYoZXQucy5yPVdvLnIpLGV0LmUucjxXby5yJiYoZXQuZS5yPVdvLnIpKSxZZS5jYWxsYmFjaz8oV289Tm8obHIuciksSmEucm93W1dv''@;'; put 'put ''LmNdPVNuKTpCcj8oTmVbKFdvPU5vKGxyLnIpKS5yXXx8KE5lW1dvLnJdPVtdKSxOZVtXby5yXVtXby5jXT1Tbik6TmVbbHIucl09U259WWUuY2FsbGJhY2smJlllLmNhbGxiYWNrKEphKX19fXlpJiYhWWUuY2FsbGJhY2smJm04KDAsRXQpLF9yLmxlbmd0aD4wJiYoTmVbIiFyb3dzIl09X3Ip''@;'; put 'put ''fX0oKSxiOD1Qcigid29ya3NoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczpyIjpZaS5yLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIn0pO2Z1bmN0aW9uIE5EKFMsUixrLEcpe3ZhciBnZSxRPVtJaSxiOF0scGU9IiIseWU9ay5TaGVldHNbay5TaGVldE5hbWVzW1NdXTtudWxsPT15ZSYmKHllPXt9KTt2YXIg''@;'; put 'put ''UGU9eWVbIiFyZWYiXXx8IkExIixOZT1vbyhQZSk7aWYoTmUuZS5jPjE2MzgzfHxOZS5lLnI+MTA0ODU3NSl7aWYoUi5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiK1BlKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO05lLmUuYz1NYXRoLm1pbihOZS5lLmMsMTYz''@;'; put 'put ''ODMpLE5lLmUucj1NYXRoLm1pbihOZS5lLmMsMTA0ODU3NSksUGU9cmEoTmUpfUd8fChHPXt9KSx5ZVsiIWNvbW1lbnRzIl09W107dmFyIFllPVtdLGV0PXllWyIhcHJpbnQiXTtpZihmdW5jdGlvbiB4RChTLFIsayxHLFEpe3ZhciBvZT0hMSxnZT17fSxwZT1udWxsO2lmKCJ4bHN4IiE9PUcu''@;'; put 'put ''Ym9va1R5cGUmJlIudmJhcmF3KXt2YXIgeWU9Ui5TaGVldE5hbWVzW2tdO3RyeXtSLldvcmtib29rJiYoeWU9Ui5Xb3JrYm9vay5TaGVldHNba10uQ29kZU5hbWV8fHllKX1jYXRjaHt9b2U9ITAsZ2UuY29kZU5hbWU9THIoeWUpfVMmJlNbIiFjb25kZm10Il0mJihnZS5lbmFibGVGb3JtYXRD''@;'; put 'put ''b25kaXRpb25zQ2FsY3VsYXRpb249IjEiKSxTJiZTWyIhdGFiY29sb3IiXSYmKHBlPShwZXx8IiIpKyc8dGFiQ29sb3IgcmdiPSJGRicrUDAoU1siIXRhYmNvbG9yIl0ucmdiKSsnIi8+Jyk7dmFyIFBlPSExLE5lPXt9O2lmKCgoKFN8fHt9KVsiIXByaW50Il18fHt9KS5wcm9wc3x8e30pLmZp''@;'; put 'put ''dCYmKFBlPSEwLE5lLmZpdFRvUGFnZT0xKSxQZSYmKHBlPShwZXx8IiIpK1ByKCJwYWdlU2V0VXBQciIsbnVsbCxOZSkpLFMmJlNbIiFvdXRsaW5lIl0pe3ZhciBZZT17c3VtbWFyeUJlbG93OjEsc3VtbWFyeVJpZ2h0OjF9O1NbIiFvdXRsaW5lIl0uYWJvdmUmJihZZS5zdW1tYXJ5QmVsb3c9''@;'; put 'put ''MCksU1siIW91dGxpbmUiXS5sZWZ0JiYoWWUuc3VtbWFyeVJpZ2h0PTApLHBlPShwZXx8IiIpK1ByKCJvdXRsaW5lUHIiLG51bGwsWWUpfSFvZSYmIXBlfHwoUVtRLmxlbmd0aF09UHIoInNoZWV0UHIiLHBlLGdlKSl9KHllLGssUyxSLFEpLFFbUS5sZW5ndGhdPVByKCJkaW1lbnNpb24iLG51''@;'; put 'put ''bGwse3JlZjpQZX0pLFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGc4KFMsUixrLEcpe3ZhciBRPXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKEd8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSkubGVuZ3RoKXt2YXIgb2U9Ry5Xb3JrYm9vay5WaWV3cyxnZT1vZVtrXXx8b2VbMF07US5yaWdo''@;'; put 'put ''dFRvTGVmdD1nZS5SVEw/IjEiOiIwIixnZS56b29tJiYoUS56b29tU2NhbGU9Z2Uuem9vbSksbnVsbCE9Z2UuZ3JpZCYmKFEuc2hvd0dyaWRMaW5lcz1nZS5ncmlkKSxnZS52aWV3JiYoUS52aWV3PWdlLnZpZXcpfW51bGwhPVNbIiFncmlkbGluZXMiXSYmKFEuc2hvd0dyaWRMaW5lcz0hIVNb''@;'; put 'put ''IiFncmlkbGluZXMiXSk7dmFyIHBlPSIiLHllPXtyOjAsYzowfTtpZihTWyIhc2VsIl0pe2lmKCEoeWU9U1siIXNlbCJdLmNlbGwpKXtpZighU1siIXNlbCJdLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTt5ZT1NcyhTWyIh''@;'; put 'put ''c2VsIl0ucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkuc30ic3RyaW5nIj09dHlwZW9mIHllJiYoeWU9Tm8oeWUpKX12YXIgTmU9U1siIWZyZWV6ZSJdPyJzdHJpbmciPT10eXBlb2YgU1siIWZyZWV6ZSJdP05vKFNbIiFmcmVlemUiXSk6U1siIWZyZWV6ZSJdOntjOjAscjowfTtpZihTWyIh''@;'; put 'put ''ZnJlZXplIl0pe3ZhciBZZT1xaShOZSksZXQ9e3N0YXRlOiJmcm96ZW4iLHhTcGxpdDpOZS5jLHlTcGxpdDpOZS5yLHRvcExlZnRDZWxsOlllfTtTWyIhc2VsIl0mJihldC5hY3RpdmVQYW5lPSh5ZS5yPj1OZS5yJiZOZS5yPjA/ImJvdHRvbSI6InRvcCIpKyh5ZS5jPj1OZS5jJiZOZS5jPjA/''@;'; put 'put ''IlJpZ2h0IjoiTGVmdCIpKSxwZT1QcigicGFuZSIsbnVsbCxldCl9aWYoU1siIXNlbCJdKXt2YXIgY3Q9e2FjdGl2ZUNlbGw6InN0cmluZyI9PXR5cGVvZiB5ZT95ZTpxaSh5ZSl9O2N0LnNxcmVmPVNbIiFzZWwiXS5yYW5nZT9TWyIhc2VsIl0ucmFuZ2U6Y3QuYWN0aXZlQ2VsbCsiOiIrY3Qu''@;'; put 'put ''YWN0aXZlQ2VsbCxwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCksU1siIWZyZWV6ZSJdJiYoTmUuYz4wJiYoY3QucGFuZT0idG9wUmlnaHQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSksTmUucj4wJiYoY3QucGFuZT0iYm90dG9tTGVmdCIscGUrPVByKCJzZWxlY3Rpb24iLG51bGws''@;'; put 'put ''Y3QpKSxOZS5jPjAmJk5lLnI+MCYmKGN0LnBhbmU9ImJvdHRvbVJpZ2h0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpKX1yZXR1cm4gUHIoInNoZWV0Vmlld3MiLFByKCJzaGVldFZpZXciLHBlfHxudWxsLFEpLHt9KX0oeWUsMCxTLGspLFIuc2hlZXRGb3JtYXQpe3ZhciBjdD17ZGVm''@;'; put 'put ''YXVsdFJvd0hlaWdodDpSLnNoZWV0Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8fCIxNiIsYmFzZUNvbFdpZHRoOlIuc2hlZXRGb3JtYXQuYmFzZUNvbFdpZHRofHwiMTAifTtudWxsIT1SLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyYmKGN0Lm91dGxpbmVMZXZlbFJvdz1SLnNoZWV0Rm9y''@;'; put 'put ''bWF0Lm91dGxpbmVMZXZlbFJvdyksUVtRLmxlbmd0aF09UHIoInNoZWV0Rm9ybWF0UHIiLG51bGwsY3QpfWVsc2UgaWYoeWVbIiFzaGVldEZvcm1hdCJdKXt2YXIgRXQ9e30sYXQ9ITE7eWVbIiFzaGVldEZvcm1hdCJdLnJvdyYmKHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0PyhhdD0hMCxF''@;'; put 'put ''dC5kZWZhdWx0Um93SGVpZ2h0PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0LEV0LmN1c3RvbUhlaWdodD0xKTp5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweD8oYXQ9ITAsRXQuZGVmYXVsdFJvd0hlaWdodD1VMyh5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweCksRXQuY3VzdG9tSGVpZ2h0''@;'; put 'put ''PTEpOigwPT09eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHR8fDA9PT15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweHx8eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5oaWRkZW4pJiYoYXQ9ITAsRXQuZGVmYXVsdFJvd0hlaWdodD1FdC5kZWZhdWx0Um93SGVpZ2h0fHwxNixFdC5jdXN0b21IZWln''@;'; put 'put ''aHQ9MSxFdC56ZXJvSGVpZ2h0PTEpLHllWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQmJihFdFsieDE0YWM6ZHlEZXNjZW50Il09eWVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCkpLHllWyIhc2hlZXRGb3JtYXQiXS5jb2wmJih5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaHx8UTAoeWVb''@;'; put 'put ''IiFzaGVldEZvcm1hdCJdLmNvbCksRXQuZGVmYXVsdENvbFdpZHRoPXllWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NoKzUvVGN8fDAsYXQ9ITApLG51bGw9PUV0LmRlZmF1bHRSb3dIZWlnaHQmJihFdC5kZWZhdWx0Um93SGVpZ2h0PTE2KSxudWxsPT1FdC5kZWZhdWx0Q29sV2lkdGgmJihFdC5k''@;'; put 'put ''ZWZhdWx0Q29sV2lkdGg9MTApLEV0Lm91dGxpbmVMZXZlbFJvdz1FdC5vdXRsaW5lTGV2ZWxSb3d8fDcsYXQmJihRW1EubGVuZ3RoXT1Qcigic2hlZXRGb3JtYXRQciIsbnVsbCxFdCkpfW51bGwhPXllWyIhY29scyJdJiZ5ZVsiIWNvbHMiXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPWZ1bmN0''@;'; put 'put ''aW9uIHBqKFMsUixrKXtmb3IodmFyIFEsRz1bIjxjb2xzPiJdLG9lPTA7b2UhPVIubGVuZ3RoOysrb2UpaWYoUT1SW29lXSl7aWYoUS5hdXRvJiZvUyhTLFEsb2UpLFEuc3x8US56KXt2YXIgZ2U9e3Q6InoifTtudWxsIT1RLnMmJihnZS5zPVEucyksbnVsbCE9US56JiYoZ2Uuej1RLnopLFEu''@;'; put 'put ''c3R5bGU9bDAoay5jZWxsWGZzLGsuY2VsbFN0eWxlWGZzLGdlLGspfUdbRy5sZW5ndGhdPVByKCJjb2wiLG51bGwsdTgob2UsUSkpfXJldHVybiBHW0cubGVuZ3RoXT0iPC9jb2xzPiIsRy5qb2luKCIiKX0oeWUseWVbIiFjb2xzIl0sUikpLFFbZ2U9US5sZW5ndGhdPSI8c2hlZXREYXRhLz4i''@;'; put 'put ''LHllWyIhbGlua3MiXT1bXSxudWxsIT15ZVsiIXJlZiJdJiYocGU9ZnVuY3Rpb24gTVMoUyxSLGssRyl7dmFyIHllLGJ0LFE9W10sb2U9W10sZ2U9b28oU1siIXJlZiJdKSxwZT0iIixQZT0iIixOZT1bXSxZZT0wLGV0PTAsY3Q9U1siIXJvd3MiXSxFdD1BcnJheS5pc0FycmF5KFMpLGF0PXty''@;'; put 'put ''OlBlfSxqdD0tMTtmb3IoZXQ9Z2Uucy5jO2V0PD1nZS5lLmM7KytldClOZVtldF09VGEoZXQpO2ZvcihZZT1nZS5zLnI7WWU8PWdlLmUucjsrK1llKXtmb3Iob2U9W10sUGU9amkoWWUpLGV0PWdlLnMuYztldDw9Z2UuZS5jOysrZXQpe3llPU5lW2V0XStQZTt2YXIga3Q9RXQ/KFNbWWVdfHxb''@;'; put 'put ''XSlbZXRdOlNbeWVdO3ZvaWQgMCE9PWt0JiZudWxsIT0ocGU9VWcoa3QseWUsUyxSKSkmJm9lLnB1c2gocGUpfShvZS5sZW5ndGg+MHx8Y3QmJmN0W1llXSkmJihhdD17cjpQZX0sY3QmJmN0W1llXSYmKChidD1jdFtZZV0pLmhpZGRlbiYmKGF0LmhpZGRlbj0xKSxqdD0tMSxidC5ocHg/anQ9''@;'; put 'put ''VTMoYnQuaHB4KTpidC5ocHQmJihqdD1idC5ocHQpLGp0Pi0xJiYoYXQuaHQ9anQsYXQuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoYXQub3V0bGluZUxldmVsPWJ0LmxldmVsKSxidC5keURlc2NlbnQmJihhdFsieDE0YWM6ZHlEZXNjZW50Il09YnQuZHlEZXNjZW50KSxidC5zJiYoYXQu''@;'; put 'put ''cz1sMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6InoiLHM6YnQuc30sUiksYXQuY3VzdG9tRm9ybWF0PTEpKSxRW1EubGVuZ3RoXT1Qcigicm93IixvZS5qb2luKCIiKSxhdCkpfWlmKGN0KWZvcig7WWU8Y3QubGVuZ3RoOysrWWUpY3QmJmN0W1llXSYmKGF0PXtyOlllKzF9LChidD1j''@;'; put 'put ''dFtZZV0pLmhpZGRlbiYmKGF0LmhpZGRlbj0xKSxqdD0tMSxidC5ocHg/anQ9VTMoYnQuaHB4KTpidC5ocHQmJihqdD1idC5ocHQpLGp0Pi0xJiYoYXQuaHQ9anQsYXQuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoYXQub3V0bGluZUxldmVsPWJ0LmxldmVsKSxRW1EubGVuZ3RoXT1Qcigi''@;'; put 'put ''cm93IiwiIixhdCkpO3JldHVybiBRLmpvaW4oIiIpfSh5ZSxSKSxwZS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPXBlKSksUS5sZW5ndGg+Z2UrMSYmKFFbUS5sZW5ndGhdPSI8L3NoZWV0RGF0YT4iLFFbZ2VdPVFbZ2VdLnJlcGxhY2UoIi8+IiwiPiIpKSx5ZVsiIXByb3RlY3QiXSYmKFFbUS5s''@;'; put 'put ''ZW5ndGhdPWZ1bmN0aW9uIGRqKFMpe3ZhciBSPXtzaGVldDoxfTtyZXR1cm4gYlMuZm9yRWFjaChmdW5jdGlvbihrKXtudWxsIT1TW2tdJiZTW2tdJiYoUltrXT0iMSIpfSksUkQuZm9yRWFjaChmdW5jdGlvbihrKXtudWxsIT1TW2tdJiYhU1trXSYmKFJba109IjAiKX0pLFMucGFzc3dvcmQ/''@;'; put 'put ''Ui5wYXNzd29yZD1GdihTLnBhc3N3b3JkKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTpTLmVuY3J5cHRpb24mJihSLmFsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28sUi5oYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gsUi5zYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQsUi5z''@;'; put 'put ''cGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pLFByKCJzaGVldFByb3RlY3Rpb24iLG51bGwsUil9KHllWyIhcHJvdGVjdCJdKSksbnVsbCE9eWVbIiFhdXRvZmlsdGVyIl0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBtaihTLFIsayxHKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1Mu''@;'; put 'put ''cmVmOnJhKFMucmVmKTtrLldvcmtib29rfHwoay5Xb3JrYm9vaz17U2hlZXRzOltdfSksay5Xb3JrYm9vay5OYW1lc3x8KGsuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBvZT1rLldvcmtib29rLk5hbWVzLGdlPU1zKFEpO2dlLnMucj09Z2UuZS5yJiYoZ2UuZS5yPU1zKFJbIiFyZWYiXSkuZS5y''@;'; put 'put ''LFE9cmEoZ2UpKTtmb3IodmFyIHBlPTA7cGU8b2UubGVuZ3RoOysrcGUpe3ZhciB5ZT1vZVtwZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PXllLk5hbWUmJnllLlNoZWV0PT1HKXt5ZS5SZWY9IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK1E7YnJlYWt9fXJldHVybiBwZT09b2UubGVu''@;'; put 'put ''Z3RoJiZvZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkcsUmVmOiInIitrLlNoZWV0TmFtZXNbR10rIichIitRfSksUHIoImF1dG9GaWx0ZXIiLG51bGwse3JlZjpRfSl9KHllWyIhYXV0b2ZpbHRlciJdLHllLGssUykpLG51bGwhPXllWyIhbWVyZ2VzIl0mJnll''@;'; put 'put ''WyIhbWVyZ2VzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBnUyhTKXtpZigwPT09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPSc8bWVyZ2VDZWxscyBjb3VudD0iJytTLmxlbmd0aCsnIj4nLGs9MDtrIT1TLmxlbmd0aDsrK2spUis9JzxtZXJnZUNlbGwgcmVmPSInK3Jh''@;'; put 'put ''KFNba10pKyciLz4nO3JldHVybiBSKyI8L21lcmdlQ2VsbHM+In0oeWVbIiFtZXJnZXMiXSkpLHllWyIhY29uZGZtdCJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gd2ooUyxSKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oayxHKXtyZXR1cm4gZnVuY3Rpb24gX2ooUyxSLGspe3ZhciBHPVMucz9s''@;'; put 'put ''UyhrLkRYRixTLnMpOi0xLFE9InN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpyYShTLnJlZiksZ2U9b28oUS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zO2dlLnI8MCYmKGdlLnI9MCksZ2UuYzwwJiYoZ2UuYz0wKTt2YXIgcGU9IiIseWU9e3ByaW9yaXR5OlIrMX07c3dpdGNoKEc+LTEmJih5''@;'; put 'put ''ZS5keGZJZD1HKSxTLnQpe2Nhc2UidW5pcXVlIjp5ZS50eXBlPSJ1bmlxdWVWYWx1ZXMiO2JyZWFrO2Nhc2UiZHVwIjp5ZS50eXBlPSJkdXBsaWNhdGVWYWx1ZXMiO2JyZWFrO2Nhc2UiYmxhbmsiOnllLnR5cGU9KFMudj8iYyI6Im5vdEMiKSsib250YWluc0JsYW5rcyIscGU9Ijxmb3JtdWxh''@;'; put 'put ''PkxFTihUUklNKCIrcWkoZ2UpKyIpKSIrKFMudj8iPSI6IiZndDsiKSsiMDwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiZXJyb3IiOnllLnR5cGU9KFMudj8iYyI6Im5vdEMiKSsib250YWluc0Vycm9ycyI7YnJlYWs7Y2FzZSJmb3JtdWxhIjp5ZS50eXBlPSJleHByZXNzaW9uIixwZT1QcigiZm9y''@;'; put 'put ''bXVsYSIsTHIoUy5mKSx7fSk7YnJlYWs7Y2FzZSJkYXRlIjp5ZS50eXBlPSJ0aW1lUGVyaW9kIix5ZS50aW1lUGVyaW9kPXlqW1Mub3BdO2JyZWFrO2Nhc2UidGV4dCI6c3dpdGNoKHllLnR5cGU9eWUub3BlcmF0b3I9ZjhbUy5vcF0seWUudGV4dD1TLnYsUy5vcCl7Y2FzZSJJTiI6cGU9Jzxm''@;'; put 'put ''b3JtdWxhPk5PVChJU0VSUk9SKFNFQVJDSCgiJytMcihTLnYpKyciLCcrcWkoZ2UpKyIpKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIk9UIjpwZT0nPGZvcm11bGE+SVNFUlJPUihTRUFSQ0goIicrTHIoUy52KSsnIiwnK3FpKGdlKSsiKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIlNUIjpwZT0i''@;'; put 'put ''PGZvcm11bGE+TEVGVCgiK3FpKGdlKSsnLExFTigiJytMcihTLnYpKyciKSk9IicrTHIoUy52KSsnIjwvZm9ybXVsYT4nO2JyZWFrO2Nhc2UiTkQiOnBlPSI8Zm9ybXVsYT5SSUdIVCgiK3FpKGdlKSsnLExFTigiJytMcihTLnYpKyciKSk9IicrTHIoUy52KSsnIjwvZm9ybXVsYT4nfWJyZWFr''@;'; put 'put ''O2Nhc2UidmFsIjp5ZS50eXBlPSJjZWxsSXMiLHllLm9wZXJhdG9yPWNiW1Mub3BdLHBlPW51bGwhPVMubWluP1ByKCJmb3JtdWxhIixMcihTdHJpbmcoUy5taW4pKSx7fSkrUHIoImZvcm11bGEiLExyKFN0cmluZyhTLm1heCkpLHt9KTpQcigiZm9ybXVsYSIsTHIobnVsbCE9Uy52P1N0cmlu''@;'; put 'put ''Zygic3RyaW5nIj09dHlwZW9mIFMudj8nIicrUy52LnJlcGxhY2UoLyIvZywnIiInKSsnIic6Uy52KTpTLmYpLHt9KTticmVhaztjYXNlImF2ZyI6c3dpdGNoKHllLnR5cGU9ImFib3ZlQXZlcmFnZSIseWUuYWJvdmVBdmVyYWdlPSJMIj09Uy5vcC5jaGFyQXQoMCk/IjAiOiIxIixTLm9wLmNo''@;'; put 'put ''YXJBdCgxKSl7Y2FzZSJUIjp5ZS5lcXVhbEF2ZXJhZ2U9IjAiO2JyZWFrO2Nhc2UiRSI6eWUuZXF1YWxBdmVyYWdlPSIxIjticmVhaztkZWZhdWx0OnllLnN0ZERldj1TLm9wLmNoYXJBdCgxKX1icmVhaztjYXNlInJhbmsiOnllLnR5cGU9InRvcDEwIix5ZS5ib3R0b209IkIiPT1TLm9wLmNo''@;'; put 'put ''YXJBdCgwKT8iMSI6IjAiLHllLnBlcmNlbnQ9IlAiPT1TLm9wLmNoYXJBdCgxKT8iMSI6IjAiLHllLnJhbms9Uy52O2JyZWFrO2Nhc2UiaWNvbiI6eWUudHlwZT0iaWNvblNldCI7dmFyIFBlPXtpY29uU2V0OlMudixwZXJjZW50OlMucGN0PyJ0cnVlIjoiZmFsc2UifTtTLnJldiYmKFBlLnJl''@;'; put 'put ''dmVyc2U9InRydWUiKSxTLmhpZGRlbiYmKFBlLnNob3dWYWx1ZT0iZmFsc2UiKSxwZT1QcigiaWNvblNldCIsUy50aHJlc2gubWFwKFc0KS5qb2luKCIiKSxQZSk7YnJlYWs7Y2FzZSJzY2FsZSI6eWUudHlwZT0iY29sb3JTY2FsZSIscGUrPVc0KFMuY21pbiksUy5jbWlkJiYocGUrPVc0KFMu''@;'; put 'put ''Y21pZCkpLHBlKz1XNChTLmNtYXgpLHBlKz1nZChTLmNtaW4uY29sb3IpLFMuY21pZCYmKHBlKz1nZChTLmNtaWQuY29sb3IpKSxwZT1QcigiY29sb3JTY2FsZSIscGUrPWdkKFMuY21heC5jb2xvcikse30pO2JyZWFrO2Nhc2UiYmFyIjp5ZS50eXBlPSJkYXRhQmFyIixwZSs9VzQoUy5jbWlu''@;'; put 'put ''KSxwZSs9VzQoUy5jbWF4KSxwZT1QcigiZGF0YUJhciIscGUrPWdkKFMuY29sb3IpLHt9KTticmVhaztkZWZhdWx0OnRocm93IGNvbnNvbGUubG9nKFMpLCJDRiBtaXNzaW5nIHR5cGUgIitTLnR9cmV0dXJuJzxjb25kaXRpb25hbEZvcm1hdHRpbmcgc3FyZWY9IicrUSsnIj4nK1ByKCJjZlJ1''@;'; put 'put ''bGUiLCIiPT1wZT9udWxsOnBlLHllKSsiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+In0oayxHLFIpfSkuam9pbigiIil9KHllWyIhY29uZGZtdCJdLFIpKSx5ZVsiIXZhbGlkYXRpb25zIl0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBGRChTKXtpZighU3x8MD09Uy5sZW5ndGgpcmV0dXJuIiI7''@;'; put 'put ''Zm9yKHZhciBSPVtdLGs9MCxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPVNbR10sb2U9dWhbUS50XTtpZihRLnJlZiYmKCJzdHJpbmciIT10eXBlb2YgUS5yZWZ8fC0xIT1RLnJlZi5pbmRleE9mKCIgIil8fChRLnJlZj1vbyhRLnJlZiksUS5yZWYucyYmIShRLnJlZi5zLmM8MCkpKSl7Kytr''@;'; put 'put ''O3ZhciBnZT17dHlwZTpvZSxhbGxvd0JsYW5rOisoMCE9US5ibGFuayksc2hvd0lucHV0TWVzc2FnZTorKDAhPVEuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1RLmVycm9yKSxzcXJlZjoic3RyaW5nIj09dHlwZW9mIFEucmVmP1EucmVmOnJhKFEucmVmKX07aWYoUS5pbnB1dCYmKFEu''@;'; put 'put ''aW5wdXQudGl0bGUmJihnZS5wcm9tcHRUaXRsZT1XaShRLmlucHV0LnRpdGxlKSksUS5pbnB1dC5tZXNzYWdlJiYoZ2UucHJvbXB0PVdpKFEuaW5wdXQubWVzc2FnZSkpKSxRLmVycm9yJiYoUS5lcnJvci50aXRsZSYmKGdlLmVycm9yVGl0bGU9V2koUS5lcnJvci50aXRsZSkpLFEuZXJyb3Iu''@;'; put 'put ''bWVzc2FnZSYmKGdlLmVycm9yPVdpKFEuZXJyb3IubWVzc2FnZSkpLFEuZXJyb3Iuc3R5bGUmJihnZS5lcnJvclN0eWxlPVEuZXJyb3Iuc3R5bGUpKSwhb2UpdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIitRLnQpO3ZhciBwZT0iIjtzd2l0Y2go''@;'; put 'put ''US50KXtjYXNlIkFueSI6YnJlYWs7Y2FzZSJMaXN0IjpjYXNlIkN1c3RvbSI6aWYoUS5sKXtpZihRLmwuam9pbigiLCIpLmxlbmd0aD4yNTApdGhyb3cgbmV3IEVycm9yKCJEViBsZW5ndGggPiAyNTAgdHJpZ2dlcnMgY29ycnVwdGlvbiBlcnJvcnMgaW4gRXhjZWwuICBVc2UgYSBsb29rdXAg''@;'; put 'put ''dGFibGUiKTtwZT0nPGZvcm11bGExPiInK0xyKFEubC5qb2luKCIsIikpKyciPC9mb3JtdWxhMT4nfWVsc2UgcGU9Ijxmb3JtdWxhMT4iK0xyKFEuZikrIjwvZm9ybXVsYTE+IjticmVhaztjYXNlIkRhdGUiOmNhc2UiVGltZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9s''@;'; put 'put ''ZSI6aWYoIWNiW1Eub3BdKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUS5vcCsiIGZvciAiK1EudCk7aWYoZ2Uub3BlcmF0b3I9Y2JbUS5vcF0sbnVsbCE9US52KXBlPSI8Zm9ybXVsYTE+IitMcihTdHJpbmcoUS52IGluc3RhbmNlb2YgRGF0ZT9RZShRLnYp''@;'; put 'put ''OlEudikpKyI8L2Zvcm11bGExPiI7ZWxzZXtpZihudWxsPT1RLm1pbnx8bnVsbD09US5tYXgpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIitRLnQpO3BlPSI8Zm9ybXVsYTE+IitMcihTdHJpbmcoUS5t''@;'; put 'put ''aW4gaW5zdGFuY2VvZiBEYXRlP1FlKFEubWluKTpRLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK0xyKFN0cmluZyhRLm1heCBpbnN0YW5jZW9mIERhdGU/UWUoUS5tYXgpOlEubWF4KSkrIjwvZm9ybXVsYTI+In19Ui5wdXNoKFByKCJkYXRhVmFsaWRhdGlvbiIscGV8fG51bGwsZ2Up''@;'; put 'put ''KX19cmV0dXJuIGs+MD8nPGRhdGFWYWxpZGF0aW9ucyBjb3VudD0iJytrKyciPicrUi5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0oeWVbIiF2YWxpZGF0aW9ucyJdKSk7dmFyIGp0LGJ0PS0xLGt0PS0xO2lmKHllWyIhbGlua3MiXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPSI8''@;'; put 'put ''aHlwZXJsaW5rcz4iLHllWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtTblsxXS5UYXJnZXQmJihqdD17cmVmOlNuWzBdfSwiIyIhPVNuWzFdLlRhcmdldC5jaGFyQXQoMCkmJihrdD1FcihHLC0xLExyKFNuWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8sIiIpLEthLkhMSU5LKSxq''@;'; put 'put ''dFsicjppZCJdPSJySWQiK2t0KSwoYnQ9U25bMV0uVGFyZ2V0LmluZGV4T2YoIiMiKSk+LTEmJihqdC5sb2NhdGlvbj1McihTblsxXS5UYXJnZXQuc2xpY2UoYnQrMSkpKSxTblsxXS5Ub29sdGlwJiYoanQudG9vbHRpcD1McihTblsxXS5Ub29sdGlwKSksUVtRLmxlbmd0aF09UHIoImh5cGVy''@;'; put 'put ''bGluayIsbnVsbCxqdCkpfSksUVtRLmxlbmd0aF09IjwvaHlwZXJsaW5rcz4iKSxkZWxldGUgeWVbIiFsaW5rcyJdLGV0KXt2YXIgT3Q9ZnVuY3Rpb24gbGooUyl7aWYoUy5wcm9wcyl7dmFyIFI9e30saz1TLnByb3BzO3JldHVybiBrLmdyaWRsaW5lcyYmKFIuZ3JpZExpbmVzPVIuZ3JpZExp''@;'; put 'put ''bmVzU2V0PTEpLGsuaGVhZGluZ3MmJihSLmhlYWRpbmdzPTEpLGsuY2VudGVyWCYmKFIuaG9yaXpvbnRhbENlbnRlcmVkPTEpLGsuY2VudGVyWSYmKFIudmVydGljYWxDZW50ZXJlZD0xKSxQcigicHJpbnRPcHRpb25zIixudWxsLFIpfXJldHVybiIifShldCk7T3QubGVuZ3RoJiYoUVtRLmxl''@;'; put 'put ''bmd0aF09T3QpfWlmKChudWxsIT15ZVsiIW1hcmdpbnMiXXx8ZXQmJmV0Lm1hcmdpbnMpJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gZmooUyl7cmV0dXJuIFgzKFMpLFByKCJwYWdlTWFyZ2lucyIsbnVsbCxTKX0oeWVbIiFtYXJnaW5zIl18fGV0Lm1hcmdpbnMpKSxldCl7dmFyIEt0PWZ1bmN0''@;'; put 'put ''aW9uIElEKFMpe2lmKFMucHJvcHMpe3ZhciBSPXt9LGs9Uy5wcm9wcztpZihrLm9yaWVudGF0aW9uJiYoUi5vcmllbnRhdGlvbj1rLm9yaWVudGF0aW9uKSxrLnNjYWxlJiYoUi5zY2FsZT1rLnNjYWxlKSxrLmZpdCYmKG51bGwhPWsuZml0LmhlaWdodCYmKFIuZml0VG9IZWlnaHQ9ay5maXQu''@;'; put 'put ''aGVpZ2h0KSxudWxsIT1rLmZpdC53aWR0aCYmKFIuZml0VG9XaWR0aD1rLmZpdC53aWR0aCkpLGsuZHBpJiYoUi5ob3Jpem9udGFsRHBpPVIudmVydGljYWxEcGk9ay5kcGkpLG51bGwhPWsuZmlyc3QmJihSLmZpcnN0UGFnZU51bWJlcj1rLmZpcnN0LFIudXNlRmlyc3RQYWdlTnVtYmVyPTEp''@;'; put 'put ''LGsuYncmJihSLmJsYWNrQW5kV2hpdGU9MSksay5kcmFmdCYmKFIuZHJhZnQ9MSksay5jb21tZW50cyYmKFIuY2VsbENvbW1lbnRzPUVEW2suY29tbWVudHNdfHwibm9uZSIpLGsuZXJyb3JzJiYoUi5lcnJvcnM9QURbay5lcnJvcnNdfHwibm9uZSIpLGsucGFwZXIpc3dpdGNoKHR5cGVvZiBr''@;'; put 'put ''LnBhcGVyKXtjYXNlIm51bWJlciI6Ui5wYXBlclNpemU9ay5wYXBlcjticmVhaztjYXNlInN0cmluZyI6dUJbay5wYXBlcl0/Ui5wYXBlclNpemU9dUJbay5wYXBlcl06K2sucGFwZXImJihSLnBhcGVyU2l6ZT0ray5wYXBlcik7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCFrLnBhcGVyLmhlaWdo''@;'; put 'put ''dHx8IWsucGFwZXIud2lkdGgpdGhyb3ciQ3VzdG9tIFBhcGVyIFNpemUgbXVzdCBpbmNsdWRlIHdpZHRoIGFuZCBoZWlnaHQhIjtSLnBhcGVySGVpZ2h0PWsucGFwZXIuaGVpZ2h0LFIucGFwZXJXaWR0aD1rLnBhcGVyLndpZHRofXJldHVyblsxLCEwLCJ0cnVlIiwib3ZlciJdLmluZGV4T2Yo''@;'; put 'put ''ay5vcmRlcik+LTEmJihSLnBhZ2VPcmRlcj0ib3ZlclRoZW5Eb3duIiksUHIoInBhZ2VTZXR1cCIsbnVsbCxSKX1yZXR1cm4iIn0oZXQpO0t0Lmxlbmd0aCYmKFFbUS5sZW5ndGhdPUt0KSxLdD1mdW5jdGlvbiBiaihTKXt2YXIgUj1bXSxrPSIiLEc9IiIsUT0iIixvZT0iIixnZT0iIixwZT0i''@;'; put 'put ''Iix5ZT0iIixQZT10MShTLmhlYWRlcik7UGUubGVuZ3RoJiYoRz1QZVswXSxwZT1QZVsxXSxvZT1QZVsyXSk7dmFyIE5lPXQxKFMuZm9vdGVyKTtyZXR1cm4gTmUubGVuZ3RoJiYoUT1OZVswXSx5ZT1OZVsxXSxnZT1OZVsyXSksRyYmUi5wdXNoKCI8b2RkSGVhZGVyPiIrTHIoRykrIjwvb2Rk''@;'; put 'put ''SGVhZGVyPiIpLFEmJlIucHVzaCgiPG9kZEZvb3Rlcj4iK0xyKFEpKyI8L29kZEZvb3Rlcj4iKSwoZ2UhPVF8fG9lIT1HKSYmKGsrPScgZGlmZmVyZW50T2RkRXZlbj0iMSInLFIucHVzaCgiPGV2ZW5IZWFkZXI+IitMcihvZSkrIjwvZXZlbkhlYWRlcj4iKSxSLnB1c2goIjxldmVuRm9vdGVy''@;'; put 'put ''PiIrTHIoZ2UpKyI8L2V2ZW5Gb290ZXI+IikpLCh5ZSE9UXx8cGUhPUcpJiYoays9JyBkaWZmZXJlbnRGaXJzdD0iMSInLFIucHVzaCgiPGZpcnN0SGVhZGVyPiIrTHIocGUpKyI8L2ZpcnN0SGVhZGVyPiIpLFIucHVzaCgiPGZpcnN0Rm9vdGVyPiIrTHIoeWUpKyI8L2ZpcnN0Rm9vdGVyPiIp''@;'; put 'put ''KSxSLmxlbmd0aD8iPGhlYWRlckZvb3RlciIraysiPiIrUi5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0oZXQpLEt0Lmxlbmd0aCYmKFFbUS5sZW5ndGhdPUt0KX1pZigobnVsbCE9eWVbIiFyb3dCcmVha3MiXXx8ZXQmJmV0LnJvd0JyZWFrcykmJihRW1EubGVuZ3RoXT1mdW5jdGlv''@;'; put 'put ''biB1aihTKXtpZigwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9Wyc8cm93QnJlYWtzIGNvdW50PSInK1MubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKVIucHVzaCgnPGJyayBpZD0iJytTW2tdLlIrJyIgbWFuPSIx''@;'; put 'put ''Ii8+Jyk7cmV0dXJuIFIuam9pbigiIikrIjwvcm93QnJlYWtzPiJ9KHllWyIhcm93QnJlYWtzIl18fGV0LnJvd0JyZWFrcykpLChudWxsIT15ZVsiIWNvbEJyZWFrcyJdfHxldCYmZXQuY29sQnJlYWtzKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIHZTKFMpe2lmKDA9PVMubGVuZ3RoKXJldHVy''@;'; put 'put ''biIiO2Zvcih2YXIgUj1bJzxjb2xCcmVha3MgY291bnQ9IicrUy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytTLmxlbmd0aCsnIj4nXSxrPTA7azxTLmxlbmd0aDsrK2spUi5wdXNoKCc8YnJrIGlkPSInK1Nba10uQysnIiBtYW49IjEiLz4nKTtyZXR1cm4gUi5qb2luKCIiKSsiPC9j''@;'; put 'put ''b2xCcmVha3M+In0oeWVbIiFjb2xCcmVha3MiXXx8ZXQuY29sQnJlYWtzKSksKCFSfHxSLmlnbm9yZUVDfHxudWxsPT1SLmlnbm9yZUVDKSYmKFFbUS5sZW5ndGhdPUhhKCJpZ25vcmVkRXJyb3JzIixQcigiaWdub3JlZEVycm9yIixudWxsLHtudW1iZXJTdG9yZWRBc1RleHQ6MSxzcXJlZjpQ''@;'; put 'put ''ZX0pKSkseWVbIiFjaGFydHMiXSYmWWUucHVzaC5hcHBseShZZSx5ZVsiIWNoYXJ0cyJdKSx5ZVsiIWltYWdlcyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhaW1hZ2VzIl0pLHllWyIhc2hhcGVzIl0mJlllLnB1c2guYXBwbHkoWWUseWVbIiFzaGFwZXMiXSksWWUubGVuZ3RoPjAmJihrdD1F''@;'; put 'put ''cihHLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoUysxKSsiLnhtbCIsS2EuRFJBVyksUVtRLmxlbmd0aF09UHIoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitrdH0pLHllWyIhZHJhd2luZyJdPVllKSwoeWVbIiFjb21tZW50cyJdLmxlbmd0aD4wfHwoeWVbIiFjb250cm9scyJdfHxb''@;'; put 'put ''XSkubGVuZ3RoPjApJiYoa3Q9RXIoRywtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKFMrMSkrIi52bWwiLEthLlZNTCksUVtRLmxlbmd0aF09UHIoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitrdH0pLHllWyIhbGVnYWN5Il09a3QpLHllWyIhcHJpbnQiXSYmeWVbIiFw''@;'; put 'put ''cmludCJdLmltYWdlcyl7dmFyIFRuPXllWyIhcHJpbnQiXS5pbWFnZXMscnI9MDtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24oU24pe1RuW1NuXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKGxyKXtUbltTbl1bbHJdJiZbImxlZnQiLCJyaWdo''@;'; put 'put ''dCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oWG4pe2lmKEFycmF5LmlzQXJyYXkoVG5bU25dW2xyXVtYbl0pKWZvcih2YXIgQm49MDtCbjxUbltTbl1bbHJdW1huXS5sZW5ndGg7KytCbilUbltTbl1bbHJdW1huXVtCbl0mJihUbltTbl1bbHJdW1huXVtCbl0uX2NudD1ycisrKX0pfSl9''@;'; put 'put ''KSxycj4wJiYoa3Q9RXIoRywtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKFMrMSkrIkhGLnZtbCIsS2EuVk1MKSxRW1EubGVuZ3RoXT1QcigibGVnYWN5RHJhd2luZ0hGIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWxlZ2FjeUhGIl09a3QpfXJldHVybih5ZVsiIXRhYmxlcyJd''@;'; put 'put ''fHxbXSkubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT0nPHRhYmxlUGFydHMgY291bnQ9IicreWVbIiF0YWJsZXMiXS5sZW5ndGgrJyI+Jyx5ZVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24oU24sbHIpe2t0PUVyKEcsLTEsIi4uL3RhYmxlcy90YWJsZSIrKFMrMSkrIl8iK2xyKyIueG1sIixL''@;'; put 'put ''YS5UQUJMRSksUVtRLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytrdCsnIi8+J30pLFFbUS5sZW5ndGhdPSI8L3RhYmxlUGFydHM+IiksUS5sZW5ndGg+MSYmKFFbUS5sZW5ndGhdPSI8L3dvcmtzaGVldD4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX1m''@;'; put 'put ''dW5jdGlvbiBNaihTLFIsayxHKXt2YXIgUT1mdW5jdGlvbiBTaihTLFIsayl7dmFyIEc9Ym4oMTQ1KSxRPShrWyIhcm93cyJdfHxbXSlbU118fHt9O0cud3JpdGVfc2hpZnQoNCxTKSxHLndyaXRlX3NoaWZ0KDQsMCk7dmFyIG9lPTMyMDtRLmhweD9vZT0yMCpVMyhRLmhweCk6US5ocHQmJihv''@;'; put 'put ''ZT0yMCpRLmhwdCksRy53cml0ZV9zaGlmdCgyLG9lKSxHLndyaXRlX3NoaWZ0KDEsMCk7dmFyIGdlPTA7US5sZXZlbCYmKGdlfD1RLmxldmVsKSxRLmhpZGRlbiYmKGdlfD0xNiksKFEuaHB4fHxRLmhwdCkmJihnZXw9MzIpLEcud3JpdGVfc2hpZnQoMSxnZSksRy53cml0ZV9zaGlmdCgxLDAp''@;'; put 'put ''O3ZhciBwZT0wLHllPUcubDtHLmwrPTQ7Zm9yKHZhciBQZT17cjpTLGM6MH0sTmU9MDtOZTwxNjsrK05lKWlmKCEoUi5zLmM+TmUrMTw8MTB8fFIuZS5jPE5lPDwxMCkpe2Zvcih2YXIgWWU9LTEsZXQ9LTEsY3Q9TmU8PDEwO2N0PE5lKzE8PDEwOysrY3QpUGUuYz1jdCwoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShrKT8oa1tQZS5yXXx8W10pW1BlLmNdOmtbcWkoUGUpXSkmJihZZTwwJiYoWWU9Y3QpLGV0PWN0KTtZZTwwfHwoKytwZSxHLndyaXRlX3NoaWZ0KDQsWWUpLEcud3JpdGVfc2hpZnQoNCxldCkpfXZhciBhdD1HLmw7cmV0dXJuIEcubD15ZSxHLndyaXRlX3NoaWZ0KDQscGUpLEcubD1hdCxH''@;'; put 'put ''Lmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6R30oRyxrLFIpOyhRLmxlbmd0aD4xN3x8KFJbIiFyb3dzIl18fFtdKVtHXSkmJkZyKFMsIkJydFJvd0hkciIsUSl9dmFyIHhqPW11LEVqPWdmO2Z1bmN0aW9uIEZqKFMpe3JldHVybltKaChTKSxQbChTKSwibiJdfXZhciBaRD1tdSxDOD1nZiwk''@;'; put 'put ''RD1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLEtEPVsiQW55IiwiV2hvbGUiLCJEZWNpbWFsIiwiTGlzdCIsIkRhdGUiLCJUaW1lIiwiTGVuZ3RoIiwiQ3VzdG9tIl0sRFM9WyJJTiIsIk9UIiwiRVEiLCJORSIsIkdUIiwiTFQiLCJHRSIsIkxFIl07''@;'; put 'put ''ZnVuY3Rpb24gcUQoUyl7dmFyIFI9Ym4oNCksaz1bUl0sRz1LRC5pbmRleE9mKFMudCk7aWYoRzwwKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrUy50KTt2YXIgb2U9RFMuaW5kZXhPZihTLm9wKTtzd2l0Y2goRyl7Y2FzZSAwOmNhc2UgMzpj''@;'; put 'put ''YXNlIDc6b2U9MDticmVhaztkZWZhdWx0OmlmKC0xPT1vZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1Mub3ArIiBmb3IgIitTLnQpfVIud3JpdGVfc2hpZnQoMSwwfEcpLFIud3JpdGVfc2hpZnQoMSwxKSxSLndyaXRlX3NoaWZ0KDEsMTJ8b2U8PDQpLFIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKSxrLnB1c2goZnVuY3Rpb24gUjMoUyl7dmFyIFI9Uy5zcGxpdCgvXHMqLFxzKi8pLGs9Ym4oNCk7ay53cml0ZV9zaGlmdCg0LFIubGVuZ3RoKTt2YXIgRz1ba107cmV0dXJuIFIuZm9yRWFjaChmdW5jdGlvbihRKXtHLnB1c2goZ2Yob28oUSkpKX0pLGooRyl9KCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6cmEoUy5yZWYpKSk7dmFyIGdlPWJuKDE2KTtnZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxnZS53cml0ZV9zaGlmdCg0LDQyOTQ5Njcy''@;'; put 'put ''OTUpLGsucHVzaChnZSk7dmFyIHBlPWJuKDgpO3BlLndyaXRlX3NoaWZ0KDQsMCkscGUud3JpdGVfc2hpZnQoNCwwKTt2YXIgeWU9MTtzd2l0Y2goUy50KXtjYXNlIkFueSI6ay5wdXNoKHBlKSxrLnB1c2gocGUpO2JyZWFrO2Nhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUi''@;'; put 'put ''OmlmKG51bGwhPVMudnx8bnVsbCE9Uy5mKWsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMudj90UyhTLnYpOlU0KG51bGw9PVMudj9TLmY6Uy52KSk7ZWxzZXtpZihudWxsPT1TLm1pbnx8bnVsbD09Uy5tYXgpdGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmAr''@;'; put 'put ''YG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIitTLnQ7ay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy5taW4/dFMoUy5taW4pOlU0KFMubWluKSksay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy5tYXg/dFMoUy5tYXgpOlU0KFMubWF4KSkseWU9Mn1icmVhaztjYXNlIkxpc3QiOmlmKG51bGwhPVMu''@;'; put 'put ''bCl7ay5wdXNoKG5TKFMubC5qb2luKCIsIikpKTticmVha31jYXNlIkN1c3RvbSI6aWYoIm51bGwiIT1TLmYpe2sucHVzaChVNChTLmYpKTticmVha310aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGBmYCIrKCJMaXN0Ij09Uy50PyIgb3IgYGxgIjoiIikrIiByZXF1aXJlZCBm''@;'; put 'put ''b3IgVHlwZSAiK1MudDtkZWZhdWx0OnRocm93IlhMU0IgZG9lcyBub3Qgc3VwcG9ydCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1MudH1yZXR1cm4gMT09eWUmJmsucHVzaChwZSksaihrKX1mdW5jdGlvbiBleihTLFIsayxHLFEsb2UsZ2Upe2lmKHZvaWQgMD09PVIudiYmbnVsbD09Ui5zfHwi''@;'; put 'put ''eiI9PT1SLnQmJiFRLnNoZWV0U3R1YnMpcmV0dXJuITE7dmFyIHBlPSIiO3N3aXRjaChSLnQpe2Nhc2UiYiI6cGU9Ui52PyIxIjoiMCI7YnJlYWs7Y2FzZSJkIjooUj1xdChSKSkuej1SLnp8fEEuX3RhYmxlWzE0XSxSLnY9UWUoSGUoUi52KSksUi50PSJuIjticmVhaztjYXNlIm4iOmNhc2Ui''@;'; put 'put ''ZSI6cGU9IiIrUi52O2JyZWFrO2RlZmF1bHQ6cGU9Ui52fXZhciB5ZT17cjprLGM6R307c3dpdGNoKHllLnM9bDAoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZzLFIsUSksUi5sJiZvZVsiIWxpbmtzIl0ucHVzaChbcWkoeWUpLFIubF0pLFIuYyYmb2VbIiFjb21tZW50cyJdLnB1c2goW3FpKHll''@;'; put 'put ''KSxSLmNdKSxSLnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmlmKFEuYm9va1NTVCl7aWYocGU9YVMoUS5TdHJpbmdzLFIudixSLlI/Ui5yPUpzKFIuUik6bnVsbCxRLnJldlN0cmluZ3MpLFIuUilmb3IodmFyIFBlPTA7UGU8Ui5SLmxlbmd0aDsrK1BlKVIuUltQZV0ucyYmbDAoUS5jZWxsWGZzLFEu''@;'; put 'put ''Y2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpSLlJbUGVdLnN9LFEpO3llLnQ9InMiLHllLnY9cGUsZ2U/RnIoUywiQnJ0U2hvcnRJc3N0IixmdW5jdGlvbiBoYihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDgpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoNCxSLnYpLGt9KDAseWUpKTpG''@;'; put 'put ''cihTLCJCcnRDZWxsSXNzdCIsZnVuY3Rpb24gTGooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMikpLHhyKFIsayksay53cml0ZV9zaGlmdCg0LFIudiksa30oMCx5ZSkpfWVsc2UgeWUudD0ic3RyIixnZT9GcihTLCJCcnRTaG9ydFN0IixmdW5jdGlvbiB6aihTLFIsayl7cmV0dXJu''@;'; put 'put ''IG51bGw9PWsmJihrPWJuKDgrNCpTLnYubGVuZ3RoKSksZmkoUixrKSxGYyhTLnYsayksay5sZW5ndGg+ay5sP2suc2xpY2UoMCxrLmwpOmt9KFIseWUpKTpGcihTLCJCcnRDZWxsU3QiLGZ1bmN0aW9uIEJqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIrNCpTLnYubGVuZ3RoKSks''@;'; put 'put ''eHIoUixrKSxGYyhTLnYsayksay5sZW5ndGg+ay5sP2suc2xpY2UoMCxrLmwpOmt9KFIseWUpKTtyZXR1cm4hMDtjYXNlIm4iOnJldHVybiBSLnY9PSgwfFIudikmJlIudj4tMWUzJiZSLnY8MWUzP2dlP0ZyKFMsIkJydFNob3J0UmsiLGZ1bmN0aW9uIFZqKFMsUixrKXtyZXR1cm4gbnVsbD09''@;'; put 'put ''ayYmKGs9Ym4oOCkpLGZpKFIsayksY3YoUy52LGspLGt9KFIseWUpKTpGcihTLCJCcnRDZWxsUmsiLGZ1bmN0aW9uIE5qKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSx4cihSLGspLGN2KFMudixrKSxrfShSLHllKSk6Z2U/RnIoUywiQnJ0U2hvcnRSZWFsIixmdW5jdGlvbiBJ''@;'; put 'put ''bmUoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMikpLGZpKFIsayksTHUoUy52LGspLGt9KFIseWUpKTpGcihTLCJCcnRDZWxsUmVhbCIsZnVuY3Rpb24gUGooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxNikpLHhyKFIsayksTHUoUy52LGspLGt9KFIseWUpKSwhMDtjYXNl''@;'; put 'put ''ImIiOnJldHVybiB5ZS50PSJiIixnZT9GcihTLCJCcnRTaG9ydEJvb2wiLGZ1bmN0aW9uIHhTKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oNSkpLGZpKFIsayksay53cml0ZV9zaGlmdCgxLFMudj8xOjApLGt9KFIseWUpKTpGcihTLCJCcnRDZWxsQm9vbCIsZnVuY3Rpb24gSWooUyxS''@;'; put 'put ''LGspe3JldHVybiBudWxsPT1rJiYoaz1ibig5KSkseHIoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52PzE6MCksa30oUix5ZSkpLCEwO2Nhc2UiZSI6cmV0dXJuIHllLnQ9ImUiLGdlP0ZyKFMsIkJydFNob3J0RXJyb3IiLGZ1bmN0aW9uIFNsKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4o''@;'; put 'put ''OCkpLGZpKFIsayksay53cml0ZV9zaGlmdCgxLFMudiksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbEVycm9yIixmdW5jdGlvbiB5OChTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDkpKSx4cihSLGspLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSxTLnYpLGt9KFIseWUpKSwhMH1yZXR1cm4gZ2U/RnIoUywiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gakQoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig0KSksZmkoUixrKX0oMCx5ZSkpOkZyKFMsIkJydENlbGxCbGFuayIsZnVuY3Rpb24gQWooUyxSLGspe3JldHVybiBudWxs''@;'; put 'put ''PT1rJiYoaz1ibig4KSkseHIoUixrKX0oMCx5ZSkpLCEwfWZ1bmN0aW9uIFdnKFMsUixrLEcpe3ZhciBRPWJpKCksb2U9ay5TaGVldE5hbWVzW1NdLGdlPWsuU2hlZXRzW29lXXx8e30scGU9b2U7dHJ5e2smJmsuV29ya2Jvb2smJihwZT1rLldvcmtib29rLlNoZWV0c1tTXS5Db2RlTmFtZXx8''@;'; put 'put ''cGUpfWNhdGNoe312YXIgeWU9b28oZ2VbIiFyZWYiXXx8IkExIik7aWYoeWUuZS5jPjE2MzgzfHx5ZS5lLnI+MTA0ODU3NSl7aWYoUi5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhnZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTt5''@;'; put 'put ''ZS5lLmM9TWF0aC5taW4oeWUuZS5jLDE2MzgzKSx5ZS5lLnI9TWF0aC5taW4oeWUuZS5jLDEwNDg1NzUpfXJldHVybiBnZVsiIWxpbmtzIl09W10sZ2VbIiFjb21tZW50cyJdPVtdLEZyKFEsIkJydEJlZ2luU2hlZXQiKSwoay52YmFyYXd8fGdlWyIhb3V0bGluZSJdKSYmRnIoUSwiQnJ0V3NQ''@;'; put 'put ''cm9wIixmdW5jdGlvbiBUaihTLFIsayl7bnVsbD09ayYmKGs9Ym4oODQrNCpTLmxlbmd0aCkpO3ZhciBHPTE5MjtSJiYoUi5hYm92ZSYmKEcmPS02NSksUi5sZWZ0JiYoRyY9LTEyOSkpLGsud3JpdGVfc2hpZnQoMSxHKTtmb3IodmFyIFE9MTtRPDM7KytRKWsud3JpdGVfc2hpZnQoMSwwKTty''@;'; put 'put ''ZXR1cm4gbWYoe2F1dG86MX0sayksay53cml0ZV9zaGlmdCgtNCwtMSksay53cml0ZV9zaGlmdCgtNCwtMSksc2coUyxrKSxrLnNsaWNlKDAsay5sKX0ocGUsZ2VbIiFvdXRsaW5lIl0pKSxGcihRLCJCcnRXc0RpbSIsRWooeWUpKSxmdW5jdGlvbiBpeihTLFIsayl7RnIoUywiQnJ0QmVnaW5X''@;'; put 'put ''c1ZpZXdzIiksRnIoUywiQnJ0QmVnaW5Xc1ZpZXciLGZ1bmN0aW9uIE04KFMsUixrKXtudWxsPT1rJiYoaz1ibigzMCkpO3ZhciBHPTkyNDtyZXR1cm4oKChSfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmKEd8PTMyKSxXdChTWyIhZ3JpZGxpbmVzIl0pJiYoRyY9LTUpLFd0KCgoKFJ8''@;'; put 'put ''fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuZ3JpZCkmJihHJj0tNSksay53cml0ZV9zaGlmdCgyLEcpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlm''@;'; put 'put ''dCgyLDApLGsud3JpdGVfc2hpZnQoMiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrfShSLGspKSxSWyIhZnJlZXplIl0mJkZyKFMsIkJydFBhbmUiLGZ1bmN0aW9uIFpqKFMpe3ZhciBSPU5v''@;'; put 'put ''KFNbIiFmcmVlemUiXSksaz1ibigyOSk7cmV0dXJuIGsud3JpdGVfc2hpZnQoOCxSLmMsImYiKSxrLndyaXRlX3NoaWZ0KDgsUi5yLCJmIiksay53cml0ZV9zaGlmdCg0LFIuciksay53cml0ZV9zaGlmdCg0LFIuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwzKSxrfShS''@;'; put 'put ''KSksUlsiIXNlbCJdJiZGcihTLCJCcnRTZWwiLGZ1bmN0aW9uIFdqKFMsUil7dmFyIGs9Ym4oMzYpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Rz1xaShNcyhTLnJhbmdlLnJlcGxh''@;'; put 'put ''Y2UoL1xzLiokLywiIikpLnMpfXZhciBRPSJzdHJpbmciPT10eXBlb2YgRz9ObyhHKTpHO2lmKFIpe3ZhciBvZT0ic3RyaW5nIj09dHlwZW9mIFI/Tm8oUik6UjtrLndyaXRlX3NoaWZ0KDQsUS5yPj1vZS5yJiZRLmM+PW9lLmM/MDpRLnI+PW9lLnImJlEuYzxvZS5jPzI6US5yPG9lLnImJlEu''@;'; put 'put ''Yz49b2UuYz8xOjMpfWVsc2Ugay53cml0ZV9zaGlmdCg0LDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDEpLGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLnIp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoNCxRLmMpLGsud3JpdGVfc2hpZnQoNCxRLmMpLGt9KFJbIiFzZWwiXSxSWyIhZnJlZXplIl0pKSxGcihTLCJCcnRFbmRXc1ZpZXciKSxGcihTLCJCcnRFbmRXc1ZpZXdzIil9KFEsZ2Usay5Xb3JrYm9vayksZnVuY3Rpb24gbnooUyxSKXshUnx8IVJbIiFjb2xzIl18''@;'; put 'put ''fChGcihTLCJCcnRCZWdpbkNvbEluZm9zIiksUlsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7ayYmRnIoUywiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gR2ooUyxSLGspe251bGw9PWsmJihrPWJuKDE4KSk7dmFyIEc9dTgoUyxSKTtrLndyaXRlX3NoaWZ0KC00LFMpLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoLTQsUyksay53cml0ZV9zaGlmdCg0LDI1NiooRy53aWR0aHx8MTApKSxrLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gUi5oaWRkZW4mJihRfD0xKSwibnVtYmVyIj09dHlwZW9mIEcud2lkdGgmJihRfD0yKSxSLmxldmVsJiYoUXw9Ui5sZXZlbDw8OCksay53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFEpLGt9KEcsaykpfSksRnIoUywiQnJ0RW5kQ29sSW5mb3MiKSl9KFEsZ2UpLGZ1bmN0aW9uIFhEKFMsUixrLEcpe3ZhciBRPW9vKFJbIiFyZWYiXXx8IkExIiksZ2U9IiIscGU9W107RnIoUywiQnJ0QmVnaW5TaGVldERhdGEiKTt2YXIgeWU9QXJyYXkuaXNBcnJheShSKSxQZT1RLmUu''@;'; put 'put ''cjtSWyIhcm93cyJdJiYoUGU9TWF0aC5tYXgoUS5lLnIsUlsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgTmU9US5zLnI7TmU8PVBlOysrTmUpe2dlPWppKE5lKSxNaihTLFIsUSxOZSk7dmFyIFllPSExO2lmKE5lPD1RLmUucilmb3IodmFyIGV0PVEucy5jO2V0PD1RLmUuYzsrK2V0KXtO''@;'; put 'put ''ZT09PVEucy5yJiYocGVbZXRdPVRhKGV0KSk7dmFyIGN0PXllPyhSW05lXXx8W10pW2V0XTpSW3BlW2V0XStnZV07WWU9ISFjdCYmZXooUyxjdCxOZSxldCxHLFIsWWUpfX1GcihTLCJCcnRFbmRTaGVldERhdGEiKX0oUSxnZSwwLFIpLGZ1bmN0aW9uIE9uZShTLFIpe1JbIiFwcm90ZWN0Il0m''@;'; put 'put ''JkZyKFMsIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gZ2IoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oNjYpKSxSLndyaXRlX3NoaWZ0KDIsUy5wYXNzd29yZD9GdihTLnBhc3N3b3JkKTowKSxSLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwh''@;'; put 'put ''MV0sWyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBdLFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsi''@;'; put 'put ''c2VsZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oayl7Ui53cml0ZV9zaGlmdCg0LGtbMV0/bnVsbD09U1trWzBdXXx8U1trWzBdXT8w''@;'; put 'put ''OjE6bnVsbCE9U1trWzBdXSYmU1trWzBdXT8wOjEpfSksUn0oUlsiIXByb3RlY3QiXSkpfShRLGdlKSxmdW5jdGlvbiBKRChTLFIsayxHKXtpZihSWyIhYXV0b2ZpbHRlciJdKXt2YXIgUT1SWyIhYXV0b2ZpbHRlciJdLG9lPSJzdHJpbmciPT10eXBlb2YgUS5yZWY/US5yZWY6cmEoUS5yZWYp''@;'; put 'put ''O2suV29ya2Jvb2t8fChrLldvcmtib29rPXtTaGVldHM6W119KSxrLldvcmtib29rLk5hbWVzfHwoay5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIGdlPWsuV29ya2Jvb2suTmFtZXMscGU9TXMob2UpO3BlLnMucj09cGUuZS5yJiYocGUuZS5yPU1zKFJbIiFyZWYiXSkuZS5yLG9lPXJhKHBlKSk7''@;'; put 'put ''Zm9yKHZhciB5ZT0wO3llPGdlLmxlbmd0aDsrK3llKXt2YXIgUGU9Z2VbeWVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1QZS5OYW1lJiZQZS5TaGVldD09Ryl7UGUuUmVmPSInIitrLlNoZWV0TmFtZXNbR10rIichIitvZTticmVha319eWU9PWdlLmxlbmd0aCYmZ2UucHVzaCh7TmFt''@;'; put 'put ''ZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpHLFJlZjoiJyIray5TaGVldE5hbWVzW0ddKyInISIrb2V9KSxGcihTLCJCcnRCZWdpbkFGaWx0ZXIiLGdmKG9vKG9lKSkpLEZyKFMsIkJydEVuZEFGaWx0ZXIiKX19KFEsZ2UsayxTKSxmdW5jdGlvbiB0eihTLFIpeyFSfHwhUlsiIW1l''@;'; put 'put ''cmdlcyJdfHwoRnIoUywiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBXRChTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig0KSksUi53cml0ZV9zaGlmdCg0LFMpLFJ9KFJbIiFtZXJnZXMiXS5sZW5ndGgpKSxSWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihrKXtGcihTLCJCcnRN''@;'; put 'put ''ZXJnZUNlbGwiLEM4KGspKX0pLEZyKFMsIkJydEVuZE1lcmdlQ2VsbHMiKSl9KFEsZ2UpLGZ1bmN0aW9uIG96KFMsUil7aWYoUil7RnIoUywiQnJ0QmVnaW5EVmFscyIsZnVuY3Rpb24gbWIoUyxSKXtudWxsPT1SJiYoUj1ibigxOCkpLFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIGs9MCxHPTA7RzxTLmxlbmd0aDsrK0cpKChTW0ddfHx7fSkucmVmfHx7fSkucyYmU1tHXS5yZWYucy5jPDB8fCsraztyZXR1cm4gUi53cml0ZV9zaGlmdCg0LGspLFJ9KFIpKTtmb3IodmFyIGs9MDtr''@;'; put 'put ''PFIubGVuZ3RoOysraykoKFJba118fHt9KS5yZWZ8fHt9KS5zJiZSW2tdLnJlZi5zLmM8MHx8RnIoUywiQnJ0RFZhbCIscUQoUltrXSkpO0ZyKFMsIkJydEVuZERWYWxzIil9fShRLGdlWyIhdmFsaWRhdGlvbnMiXSksZnVuY3Rpb24gdmIoUyxSLGspe1JbIiFsaW5rcyJdLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oRyl7aWYoR1sxXS5UYXJnZXQpe3ZhciBRPUVyKGssLTEsR1sxXS5UYXJnZXQucmVwbGFjZSgvIy4qJC8sIiIpLEthLkhMSU5LKTtGcihTLCJCcnRITGluayIsZnVuY3Rpb24gUzgoUyxSKXt2YXIgaz1ibig1MCs0KihTWzFdLlRhcmdldC5sZW5ndGgrKFNbMV0uVG9vbHRpcHx8IiIp''@;'; put 'put ''Lmxlbmd0aCkpO2dmKHtzOk5vKFNbMF0pLGU6Tm8oU1swXSl9LGspLGNnKCJySWQiK1Isayk7dmFyIEc9U1sxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBGYygoLTE9PUc/IiI6U1sxXS5UYXJnZXQuc2xpY2UoRysxKSl8fCIiLGspLEZjKFNbMV0uVG9vbHRpcHx8IiIsayksRmMoIiIs''@;'; put 'put ''ayksay5zbGljZSgwLGsubCl9KEcsUSkpfX0pLGRlbGV0ZSBSWyIhbGlua3MiXX0oUSxnZSxHKSxnZVsiIW1hcmdpbnMiXSYmRnIoUSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gS2ooUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oNDgpKSxYMyhTKSwkRC5mb3JFYWNoKGZ1bmN0aW9uKGspe0x1''@;'; put 'put ''KFNba10sUil9KSxSfShnZVsiIW1hcmdpbnMiXSkpLCghUnx8Ui5pZ25vcmVFQ3x8bnVsbD09Ui5pZ25vcmVFQykmJmZ1bmN0aW9uIFpnKFMsUil7IVJ8fCFSWyIhcmVmIl18fChGcihTLCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSxGcihTLCJCcnRDZWxsSWdub3JlRUMiLGZ1bmN0aW9uIHFq''@;'; put 'put ''KFMpe3ZhciBSPWJuKDI0KTtyZXR1cm4gUi53cml0ZV9zaGlmdCg0LDQpLFIud3JpdGVfc2hpZnQoNCwxKSxnZihTLFIpLFJ9KG9vKFJbIiFyZWYiXSkpKSxGcihTLCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShRLGdlKSxmdW5jdGlvbiByeihTLFIsayxHKXtpZihSWyIhY29tbWVudHMiXS5s''@;'; put 'put ''ZW5ndGg+MCl7dmFyIFE9RXIoRywtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKGsrMSkrIi52bWwiLEthLlZNTCk7RnIoUywiQnJ0TGVnYWN5RHJhd2luZyIsY2coInJJZCIrUSkpLFJbIiFsZWdhY3kiXT1RfX0oUSxnZSxTLEcpLEZyKFEsIkJydEVuZFNoZWV0IiksUS5lbmQoKX1mdW5j''@;'; put 'put ''dGlvbiB4OChTKXt2YXIgRyxSPVtdLGs9Uy5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhTLm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Upe3ZhciBnZT1vZS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4q''@;'; put 'put ''KTxcL2M6dj48XC9jOnB0Pi8pO2dlJiYoUlsrZ2VbMV1dPWs/K2dlWzJdOmdlWzJdKX0pO3ZhciBRPVFyKChTLm1hdGNoKC88Yzpmb3JtYXRDb2RlPihbXHNcU10qPyk8XC9jOmZvcm1hdENvZGU+Lyl8fFsiIiwiR2VuZXJhbCJdKVsxXSk7cmV0dXJuKFMubWF0Y2goLzxjOmY+KC4qPyk8XC9j''@;'; put 'put ''OmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ob2Upe0c9b2UucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbUixRLEddfUthLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0IixLYS5DSEFSVEVY''@;'; put 'put ''PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIGx6PS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8sUlM9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/''@;'; put 'put ''cGxvdEFyZWE+LyxQbmU9LzwoPzpcdys6KT9sZWdlbmQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2xlZ2VuZD4vLFFEPS88KD86XHcrOik/dGl0bGU+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RpdGxlPi87ZnVuY3Rpb24gYjIoUyxSLGssRyxRLG9lLGdlLHBlKXt2YXIgeWU9b2V8fHsiIXR5cGUi''@;'; put 'put ''OiJjaGFydCJ9O2lmKCFTKXJldHVybiBvZTtnZSYmZ2UuQW5jaG9yJiYoeWVbIiFwb3MiXT1MZyhnZS5BbmNob3IscGUpLHllWyIhcG9zVHlwZSJdPWdlLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLHllWyIhYWJzcG9zIl09TGcoZ2UuQW5jaG9yLHBlKSx5ZVsiIXJlbHBvcyJd''@;'; put 'put ''PUFDKGdlLkFuY2hvcixwZSkpLHllWyIhcGxvdCJdPVtdO3ZhciBQZT0iIixOZT0iIixZZT1TLm1hdGNoKGx6KTtZZT8oUGU9Uy5zbGljZSgwLFllLmluZGV4KSxOZT1TLnNsaWNlKFllLmluZGV4K1llWzBdLmxlbmd0aCkpOlBlPU5lPVM7dmFyIGV0PVtdLGN0PVBlLm1hdGNoKC88YzpsYW5n''@;'; put 'put ''Lio/Pi8pfHxTLm1hdGNoKC88YzpsYW5nLio/Pi8pfHxOZS5tYXRjaCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gY3QmJih5ZVsiIWxhbmciXT0odnIoY3RbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxZZSYmKChldD1ZZVsxXS5tYXRjaChRRCkpJiZmdW5jdGlvbiBzeihTLFIpe3ZhciBrPSIiO1Mu''@;'; put 'put ''bWF0Y2goLzxjOnJpY2g+LykmJlMucmVwbGFjZSgvPGE6dD4oW1xzXFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKEcsUSl7ays9UX0pLFJbIiF0aXRsZSJdPWt8fCJDaGFydCBUaXRsZSJ9KGV0WzFdLHllKSxmdW5jdGlvbiBGbmUoUyxSKXtpZihTKXt2YXIgaz0wLEc9MCxRPSJBIixvZT17czp7''@;'; put 'put ''cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fTtTLnJlcGxhY2UoZUksZnVuY3Rpb24oZ2UscGUpe3ZhciB5ZT17dDpwZSxjOmssdzowLHNlcjpbXX0sUGU9W10sTmU9KGdlLm1hdGNoKC88YzpzZXIvKXx8W10pLmluZGV4LFllPU5lP2dlLnNsaWNlKDAsTmUpOmdlOyJzY2F0dGVyIj09cGUmJihQ''@;'; put 'put ''ZT1nZS5tYXRjaCgvPGM6c2NhdHRlclN0eWxlKFteXC8+XSopXC8+L20pKSYmdnIoUGVbMF0pLCJiYXIiPT1wZSYmKFBlPWdlLm1hdGNoKC88YzpiYXJEaXIoW15cLz5dKilcLz4vbSkpJiYoeWUuYmFyRGlyPSJiYXIiPT12cihQZVswXSkudmFsPyJoIjoidiIpLChQZT1ZZS5tYXRjaCgvPGM6''@;'; put 'put ''Z3JvdXBpbmcoW15cLz5dKilcLz4vbSkpJiYoeWUuZ3JvdXBpbmc9dnIoUGVbMF0pLnZhbHx8InN0YW5kYXJkIiksKGdlLm1hdGNoKGN6KXx8W10pLmZvckVhY2goZnVuY3Rpb24oY3Qpe3ZhciBFdD1bXSxhdD17fSxidD1bXTtpZihjdC5tYXRjaCgvPGM6dHg+Lykpe3ZhciBqdD14OCgoY3Qu''@;'; put 'put ''bWF0Y2goLzxjOnR4PihbXHNcU10qPyk8XC9jOnR4Pi8pfHxbXSlbMV18fCIiKXx8W107anRbMF0mJmp0WzBdWzBdJiYoYXQubmFtZT1qdFswXVswXSksanRbMl0mJihhdC5uYW1lcmVmPWp0WzJdKX1bInhWYWwiLCJ5VmFsIiwiY2F0IiwidmFsIiwiYnViYmxlU2l6ZSJdLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oa3Qpe3ZhciBLdCxPdD1jdC5tYXRjaChuZXcgUmVnRXhwKCI8YzoiK2t0KyI+W1xcc1xcU10qPzxcXC9jOiIra3QrIj4iLCJnbSIpKTtPdCYmKChPdFswXS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7S3Q9VG4ucmVwbGFjZSgv''@;'; put 'put ''PC4qPz4vZywiIil9KSwoT3RbMF0ubWF0Y2goLzxjOig/Olx3KilDYWNoZT5bXHNcU10qPzxcL2M6KD86XHcqKUNhY2hlPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFRuKXt2YXIgcnI9eDgoVG4pO29lLnMucj1vZS5zLmM9MCxvZS5lLmM9ayxRPVRhKGspLHJyWzBdLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oU24sbHIpe1JbUStqaShscildPXt0OiJudW1iZXIiPT10eXBlb2YgU24/Im4iOiJzIix2OlNuLHo6cnJbMV19LEc9bHJ9KSxvZS5lLnI8RyYmKG9lLmUucj1HKSwrK2sseWUudysrLEV0LnB1c2goa3QpLChyclsyXXx8S3QpJiZidC5wdXNoKHJyWzJdfHxLdCksInZhbCI9PWt0JiYo''@;'; put 'put ''YXQuej1yclsxXXx8IkdlbmVyYWwiKX0pKX0pLChQZT1nZS5tYXRjaCgvPGM6c21vb3RoKFteXC8+XSopXC8+L20pKSYmKGF0LnNtb290aD1udWxsPT12cihQZVswXSkudmFsfHx0aSh2cihQZVswXSkudmFsKSksYXQuY29scz1FdCxhdC5yYW5nZXM9YnQseWUuc2VyLnB1c2goYXQpfSksImRv''@;'; put 'put ''dWdobnV0Ij09cGUmJihQZT1nZS5tYXRjaCgvPGM6aG9sZVNpemUoW15cLz5dKilcLz4vbSkpJiYoeWUuaG9sZT0odnIoUGVbMF0pLnZhbHx8MTApLzEwMCksUlsiIXBsb3QiXS5wdXNoKHllKX0pLGs+MCYmKFJbIiFyZWYiXT1yYShvZSkpfX0oKFllWzFdLm1hdGNoKFJTKXx8W10pWzFdLHll''@;'; put 'put ''KSxudWxsIT0oZXQ9WWVbMV0ubWF0Y2goUG5lKSkmJmZ1bmN0aW9uIEVvKFMsUil7dmFyIGs7UlsiIWxlZ2VuZCJdPXtwb3M6InIifSwoaz1TLm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYoUlsiIWxlZ2VuZCJdLnBvcz12cihrWzBdKS52YWx8fCJyIil9KGV0WzBdLHll''@;'; put 'put ''KSkseWV9dmFyIGVJPS88YzooKD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxcL2M6KD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdo''@;'; put 'put ''bnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/Q2hhcnQ+L2dtLGN6PS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtLYS5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0''@;'; put 'put ''Ijt2YXIgV2E9UHIoImNoYXJ0c2hlZXQiLG51bGwse3htbG5zOllpLm1haW5bMF0sInhtbG5zOnIiOllpLnJ9KTtmdW5jdGlvbiBMUyhTLFIsayxHKXt2YXIgUT1bSWksV2FdO3JldHVybiBRLnB1c2goIjxzaGVldFByLz4iKSxRLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNj''@;'; put 'put ''YWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIwIiB6b29tVG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+JyksUVtRLmxlbmd0aF09UHIoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkMSJ9KSxFcihHLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoUysxKSsiLnhtbCIsS2EuRFJBVyksUS5sZW5n''@;'; put 'put ''dGg+MiYmKFFbUS5sZW5ndGhdPSI8L2NoYXJ0c2hlZXQ+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9ZnVuY3Rpb24gT1MoKXt2YXIgUz1iaSgpO3JldHVybiBGcihTLCJCcnRCZWdpblNoZWV0IiksRnIoUywiQnJ0RW5kU2hlZXQiKSxTLmVuZCgpfXZhciBiYj1b''@;'; put 'put ''WyJhbGxvd1JlZnJlc2hRdWVyeSIsITEsImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxb''@;'; put 'put ''ImRlZmF1bHRUaGVtZVZlcnNpb24iLDAsImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENv''@;'; put 'put ''bm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsic2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90''@;'; put 'put ''Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0sWyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sdEk9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNo''@;'; put 'put ''b3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwiYm9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbkk9W10sZno9W1siY2FsY0NvbXBsZXRl''@;'; put 'put ''ZCIsInRydWUiXSxbImNhbGNNb2RlIiwiYXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50''@;'; put 'put ''IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEiLCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIHJJKFMsUil7Zm9yKHZhciBrPTA7ayE9Uy5sZW5ndGg7KytrKWZvcih2YXIgRz1TW2tdLFE9MDtRIT1SLmxlbmd0aDsrK1Epe3ZhciBvZT1SW1FdO2lmKG51bGw9PUdbb2VbMF1dKUdb''@;'; put 'put ''b2VbMF1dPW9lWzFdO2Vsc2Ugc3dpdGNoKG9lWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgR1tvZVswXV0mJihHW29lWzBdXT10aShHW29lWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIEdbb2VbMF1dJiYoR1tvZVswXV09cGFyc2VJbnQoR1tvZVswXV0s''@;'; put 'put ''MTApKX19fWZ1bmN0aW9uIFEzKFMsUil7Zm9yKHZhciBrPTA7ayE9Ui5sZW5ndGg7KytrKXt2YXIgRz1SW2tdO2lmKG51bGw9PVNbR1swXV0pU1tHWzBdXT1HWzFdO2Vsc2Ugc3dpdGNoKEdbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBTW0dbMF1dJiYoU1tHWzBdXT10aShTW0db''@;'; put 'put ''MF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgU1tHWzBdXSYmKFNbR1swXV09cGFyc2VJbnQoU1tHWzBdXSwxMCkpfX19ZnVuY3Rpb24gUFMoUyl7UTMoUy5XQlByb3BzLGJiKSxRMyhTLkNhbGNQcixmeiksckkoUy5XQlZpZXcsdEkpLHJJKFMuU2hlZXRzLG5JKSxjOC5k''@;'; put 'put ''YXRlMTkwND10aShTLldCUHJvcHMuZGF0ZTE5MDQpfXZhciBwej0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIHliKFMsUil7aWYoUy5sZW5ndGg+MzEpe2lmKFIpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIGs9''@;'; put 'put ''ITA7cmV0dXJuIHB6LmZvckVhY2goZnVuY3Rpb24oRyl7aWYoLTEhPVMuaW5kZXhPZihHKSl7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7az0hMX19KSxrfXZhciBFOD0vPFx3Kzp3b3JrYm9vay8sb0k9UHIoIndvcmti''@;'; put 'put ''b29rIixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczpyIjpZaS5yfSk7ZnVuY3Rpb24gVDgoUyxSKXt2YXIgaz1SfHx7fSxHPVtJaV07R1tHLmxlbmd0aF09b0k7dmFyIFE9Uy5Xb3JrYm9vayYmKFMuV29ya2Jvb2suTmFtZXN8fFtdKS5sZW5ndGg+MDtTLldvcmtib29rJiZTLldvcmti''@;'; put 'put ''b29rLk1vZGlmeSYmKEdbRy5sZW5ndGhdPWZ1bmN0aW9uIGVwKFMpe3ZhciBSPXt9O3JldHVybiBTLndhcm4mJihSLnJlYWRPbmx5UmVjb21tZW5kZWQ9MSksUi51c2VyTmFtZT1TLnVzZXJ8fCJTaGVldCBKUyIsUy5lbmNyeXB0aW9uJiYoUy5lbmNyeXB0aW9uLmFsZ28mJihSLmFsZ29yaXRo''@;'; put 'put ''bU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMuZW5jcnlwdGlvbi5oYXNoJiYoUi5oYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gpLFMuZW5jcnlwdGlvbi5zYWx0JiYoUi5zYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQpLFMuZW5jcnlwdGlvbi5zcGluJiYoUi5zcGluQ291bnQ9Uy5lbmNy''@;'; put 'put ''eXB0aW9uLnNwaW4pKSxQcigiZmlsZVNoYXJpbmciLG51bGwsUil9KFMuV29ya2Jvb2suTW9kaWZ5KSk7dmFyIG9lPXtjb2RlTmFtZToiVGhpc1dvcmtib29rIn07Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzJiYoYmIuZm9yRWFjaChmdW5jdGlvbihQZSl7bnVsbCE9Uy5Xb3JrYm9v''@;'; put 'put ''ay5XQlByb3BzW1BlWzBdXSYmUy5Xb3JrYm9vay5XQlByb3BzW1BlWzBdXSE9UGVbMV0mJihvZVtQZVswXV09Uy5Xb3JrYm9vay5XQlByb3BzW1BlWzBdXSl9KSxTLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUmJihvZS5jb2RlTmFtZT1TLldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUsZGVs''@;'; put 'put ''ZXRlIG9lLkNvZGVOYW1lKSksR1tHLmxlbmd0aF09UHIoIndvcmtib29rUHIiLG51bGwsb2UpLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suUHJvdGVjdGlvbiYmKEdbRy5sZW5ndGhdPWZ1bmN0aW9uIF9iKFMpe3ZhciBSPXt9O3JldHVybiBTLmxvY2tTdHJ1Y3R1cmUmJihSLmxvY2tTdHJ1Y3R1''@;'; put 'put ''cmU9MSksUy5sb2NrV2luZG93cyYmKFIubG9ja1dpbmRvd3M9MSksUy5lbmNyeXB0aW9uJiYoUy5lbmNyeXB0aW9uLmFsZ28mJihSLndvcmtib29rQWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyksUy5lbmNyeXB0aW9uLmhhc2gmJihSLndvcmtib29rSGFzaFZhbHVlPVMuZW5jcnlw''@;'; put 'put ''dGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2FsdCYmKFIud29ya2Jvb2tTYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQpLFMuZW5jcnlwdGlvbi5zcGluJiYoUi53b3JrYm9va1NwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbikpLFByKCJ3b3JrYm9va1Byb3RlY3Rpb24iLG51bGwsUil9KFMu''@;'; put 'put ''V29ya2Jvb2suUHJvdGVjdGlvbikpO3ZhciBnZT1TLldvcmtib29rJiZTLldvcmtib29rLlNoZWV0c3x8W10scGU9MDtpZihnZSYmZ2VbMF0mJmdlWzBdLkhpZGRlbil7Zm9yKEdbRy5sZW5ndGhdPSI8Ym9va1ZpZXdzPiIscGU9MDtwZSE9Uy5TaGVldE5hbWVzLmxlbmd0aCYmZ2VbcGVdJiZn''@;'; put 'put ''ZVtwZV0uSGlkZGVuOysrcGUpO3BlPT1TLlNoZWV0TmFtZXMubGVuZ3RoJiYocGU9MCksR1tHLmxlbmd0aF09Jzx3b3JrYm9va1ZpZXcgZmlyc3RTaGVldD0iJytwZSsnIiBhY3RpdmVUYWI9IicrcGUrJyIvPicsR1tHLmxlbmd0aF09IjwvYm9va1ZpZXdzPiJ9Zm9yKEdbRy5sZW5ndGhdPSI8''@;'; put 'put ''c2hlZXRzPiIscGU9MDtwZSE9Uy5TaGVldE5hbWVzLmxlbmd0aDsrK3BlKXt2YXIgeWU9e25hbWU6THIoUy5TaGVldE5hbWVzW3BlXS5zbGljZSgwLDMxKSl9O2lmKHllLnNoZWV0SWQ9IiIrKHBlKzEpLHllWyJyOmlkIl09InJJZCIrKHBlKzEpLGdlW3BlXSlzd2l0Y2goZ2VbcGVdLkhpZGRl''@;'; put 'put ''bil7Y2FzZSAxOnllLnN0YXRlPSJoaWRkZW4iO2JyZWFrO2Nhc2UgMjp5ZS5zdGF0ZT0idmVyeUhpZGRlbiJ9R1tHLmxlbmd0aF09UHIoInNoZWV0IixudWxsLHllKX1yZXR1cm4gR1tHLmxlbmd0aF09Ijwvc2hlZXRzPiIsUy5FeHRlcm5hbFdCJiZTLkV4dGVybmFsV0IubGVuZ3RoJiYoR1tH''@;'; put 'put ''Lmxlbmd0aF09IjxleHRlcm5hbFJlZmVyZW5jZXM+IiwoUy5FeHRlcm5hbFdCfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQZSxOZSl7dmFyIFllPUVyKGsud2JyZWxzLC0xLCJleHRlcm5hbExpbmtzL2V4dGVybmFsTGluayIrKE5lKzEpKyIueG1sIixLYS5YTElOSyk7R1tHLmxlbmd0aF09Jzxl''@;'; put 'put ''eHRlcm5hbFJlZmVyZW5jZSByOmlkPSJySWQnK1llKyciLz4nfSksR1tHLmxlbmd0aF09IjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiIpLFEmJihHW0cubGVuZ3RoXT0iPGRlZmluZWROYW1lcz4iLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suTmFtZXMmJlMuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihQZSl7dmFyIE5lPXtuYW1lOlBlLk5hbWV9O1BlLkNvbW1lbnQmJihOZS5jb21tZW50PVBlLkNvbW1lbnQpLG51bGwhPVBlLlNoZWV0JiYoTmUubG9jYWxTaGVldElkPSIiK1BlLlNoZWV0KSxQZS5IaWRkZW4mJihOZS5oaWRkZW49IjEiKSxQZS5SZWYmJihHW0cubGVuZ3RoXT1Q''@;'; put 'put ''cigiZGVmaW5lZE5hbWUiLExyKFBlLlJlZiksTmUpKX0pLEdbRy5sZW5ndGhdPSI8L2RlZmluZWROYW1lcz4iKSxrJiZrLnBpdm90cyYmay5waXZvdHMubGVuZ3RoPjAmJihHLnB1c2goIjxwaXZvdENhY2hlcz4iKSxrLnBpdm90cy5mb3JFYWNoKGZ1bmN0aW9uKFBlLE5lKXtHLnB1c2goJzxw''@;'; put 'put ''aXZvdENhY2hlIGNhY2hlSWQ9IicrKE5lKzEpKyciIHI6aWQ9InJJZCcrUGVbMl0rJyIvPicpfSksRy5wdXNoKCI8L3Bpdm90Q2FjaGVzPiIpKSxHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09Ijwvd29ya2Jvb2s+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcuam9pbigiIil9ZnVu''@;'; put 'put ''Y3Rpb24gbXooUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMTI3KSksUi53cml0ZV9zaGlmdCg0LFMuSGlkZGVuKSxSLndyaXRlX3NoaWZ0KDQsUy5pVGFiSUQpLGNnKFMuc3RyUmVsSUQsUiksRmMoUy5uYW1lLnNsaWNlKDAsMzEpLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfWZ1bmN0''@;'; put 'put ''aW9uIHRwKFMsUil7dmFyIGs9e307cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxrLkFyY2hJRD1TLnJlYWRfc2hpZnQoNCksUy5sKz1SLTgsa31mdW5jdGlvbiBDYihTLFIpe3ZhciBrPWJpKCk7cmV0dXJuIEZyKGssIkJydEJlZ2luQm9vayIpLEZyKGssIkJydEZpbGVWZXJzaW9uIixmdW5jdGlv''@;'; put 'put ''biBsSShTLFIpe1J8fChSPWJuKDEyNykpO2Zvcih2YXIgaz0wOzQhPWs7KytrKVIud3JpdGVfc2hpZnQoNCwwKTtyZXR1cm4gRmMoIlNoZWV0SlMiLFIpLEZjKHcudmVyc2lvbixSKSxGYyh3LnZlcnNpb24sUiksRmMoIjcyNjIiLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfSgp''@;'; put 'put ''KSxGcihrLCJCcnRXYlByb3AiLGZ1bmN0aW9uIHNJKFMsUil7Unx8KFI9Ym4oNzIpKTt2YXIgaz0wO3JldHVybiBTJiZTLmZpbHRlclByaXZhY3kmJihrfD04KSxSLndyaXRlX3NoaWZ0KDQsayksUi53cml0ZV9zaGlmdCg0LDApLHNnKFMmJlMuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siLFIp''@;'; put 'put ''LFIuc2xpY2UoMCxSLmwpfShTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHN8fG51bGwpKSxmdW5jdGlvbiB2eihTLFIpe2lmKFIuV29ya2Jvb2smJlIuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIGs9Ui5Xb3JrYm9vay5TaGVldHMsRz0wLFE9LTEsb2U9LTE7RzxrLmxlbmd0aDsrK0cp''@;'; put 'put ''IWtbR118fCFrW0ddLkhpZGRlbiYmLTE9PVE/UT1HOjE9PWtbR10uSGlkZGVuJiYtMT09b2UmJihvZT1HKTtvZT5RfHwoRnIoUywiQnJ0QmVnaW5Cb29rVmlld3MiKSxGcihTLCJCcnRCb29rVmlldyIsZnVuY3Rpb24gY0koUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMjkpKSxSLndyaXRlX3NoaWZ0''@;'; put 'put ''KC00LDApLFIud3JpdGVfc2hpZnQoLTQsNDYwKSxSLndyaXRlX3NoaWZ0KDQsMjg4MDApLFIud3JpdGVfc2hpZnQoNCwxNzYwMCksUi53cml0ZV9zaGlmdCg0LDUwMCksUi53cml0ZV9zaGlmdCg0LFMpLFIud3JpdGVfc2hpZnQoNCxTKSxSLndyaXRlX3NoaWZ0KDEsMTIwKSxSLmxlbmd0aD5S''@;'; put 'put ''Lmw/Ui5zbGljZSgwLFIubCk6Un0oUSkpLEZyKFMsIkJydEVuZEJvb2tWaWV3cyIpKX19KGssUyksZnVuY3Rpb24gd2IoUyxSKXtGcihTLCJCcnRCZWdpbkJ1bmRsZVNocyIpO2Zvcih2YXIgaz0wO2shPVIuU2hlZXROYW1lcy5sZW5ndGg7KytrKUZyKFMsIkJydEJ1bmRsZVNoIixteih7SGlk''@;'; put 'put ''ZGVuOlIuV29ya2Jvb2smJlIuV29ya2Jvb2suU2hlZXRzJiZSLldvcmtib29rLlNoZWV0c1trXSYmUi5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVufHwwLGlUYWJJRDprKzEsc3RyUmVsSUQ6InJJZCIrKGsrMSksbmFtZTpSLlNoZWV0TmFtZXNba119KSk7RnIoUywiQnJ0RW5kQnVuZGxlU2hz''@;'; put 'put ''Iil9KGssUyksRnIoaywiQnJ0RW5kQm9vayIpLGsuZW5kKCl9ZnVuY3Rpb24gdUkoUyxSLGssRyxRKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/V2c6TkQpKFMsayxHLFEpfWZ1bmN0aW9uIGRJKFMsUixrLEcsUSl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP09TOkxTKShTLGss''@;'; put 'put ''RyxRKX1mdW5jdGlvbiBoSShTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP2NrOkl2KShTLGspfWZ1bmN0aW9uIEF6KFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/TkM6SEMpKFMsayl9dmFyIEJTPS8oW1x3Ol0rKT0oKD86IikoW14iXSopKD86Iil8KD86Jyko''@;'; put 'put ''W14nXSopKD86JykpL2csU2I9LyhbXHc6XSspPSgoPzoiKSg/OlteIl0qKSg/OiIpfCg/OicpKD86W14nXSopKD86JykpLztmdW5jdGlvbiBIMChTLFIpe3ZhciBrPVMuc3BsaXQoL1xzKy8pLEc9W107aWYoUnx8KEdbMF09a1swXSksMT09PWsubGVuZ3RoKXJldHVybiBHO3ZhciBvZSxnZSx5''@;'; put 'put ''ZSxRPVMubWF0Y2goQlMpO2lmKFEpZm9yKHllPTA7eWUhPVEubGVuZ3RoOysreWUpLTE9PT0oZ2U9KG9lPVFbeWVdLm1hdGNoKFNiKSlbMV0uaW5kZXhPZigiOiIpKT9HW29lWzFdXT1vZVsyXS5zbGljZSgxLG9lWzJdLmxlbmd0aC0xKTpHWyJ4bWxuczoiPT09b2VbMV0uc2xpY2UoMCw2KT8i''@;'; put 'put ''eG1sbnMiK29lWzFdLnNsaWNlKDYpOm9lWzFdLnNsaWNlKGdlKzEpXT1vZVsyXS5zbGljZSgxLG9lWzJdLmxlbmd0aC0xKTtyZXR1cm4gR31mdW5jdGlvbiBqUyhTKXt2YXIgaz17fTtpZigxPT09Uy5zcGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBrO3ZhciBRLG9lLHBlLEc9Uy5tYXRjaChC''@;'; put 'put ''Uyk7aWYoRylmb3IocGU9MDtwZSE9Ry5sZW5ndGg7KytwZSktMT09PShvZT0oUT1HW3BlXS5tYXRjaChTYikpWzFdLmluZGV4T2YoIjoiKSk/a1tRWzFdXT1RWzJdLnNsaWNlKDEsUVsyXS5sZW5ndGgtMSk6a1sieG1sbnM6Ij09PVFbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK1FbMV0uc2xpY2Uo''@;'; put 'put ''Nik6UVsxXS5zbGljZShvZSsxKV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpO3JldHVybiBrfWZ1bmN0aW9uIGt6KFMpe3ZhciBSPXt9O2lmKFMuRGVmYXVsdFJvd0hlaWdodCl7dmFyIGs9e2hweDo0KnBhcnNlSW50KFMuRGVmYXVsdFJvd0hlaWdodCkvM307QnYoayksUi5yb3c9a31p''@;'; put 'put ''ZihTLkRlZmF1bHRDb2xXaWR0aCl7dmFyIEc9e3dweDo0KnBhcnNlSW50KFMuRGVmYXVsdENvbFdpZHRoKS8zfTtRMChHKSxSLmNvbD1HfXJldHVybiBSfWZ1bmN0aW9uIEl6KFMsUixrLEcpe3ZhciBRPUc7c3dpdGNoKChrWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0p''@;'; put 'put ''WzFdKXtjYXNlImJvb2xlYW4iOlE9dGkoRyk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOlE9cGFyc2VJbnQoRywxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6UT1wYXJzZUZsb2F0KEcpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6UT1IZShHKTticmVhaztjYXNl''@;'; put 'put ''Imk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IitrWzBdKX1TW1FyKFIpXT1RfXZhciBNYj17MDoiTm9uZSIsMToiU2luZ2xlIiwyOiJEb3VibGUiLDMzOiJT''@;'; put 'put ''aW5nbGVBY2NvdW50aW5nIiwzNDoiRG91YmxlQWNjb3VudGluZyJ9LGZJPWtlKE1iKTtmdW5jdGlvbiBVUyhTLFIsayxHKXtpZihHLmNlbGxTdHlsZXMpe2lmKGs9ay5yZXBsYWNlKC9ccysvZywiICIpLFIuSW50ZXJpb3Ipe3ZhciBRPVIuSW50ZXJpb3I7US5QYXR0ZXJuJiYoUS5wYXR0ZXJu''@;'; put 'put ''VHlwZT1tQ1tRLlBhdHRlcm5dfHxRLlBhdHRlcm4pLFEuQ29sb3ImJlEuQ29sb3IubWF0Y2goLyNbMC05QS1GYS1mXSovKSYmKFEuZmdDb2xvcj17cmdiOlEuQ29sb3Iuc2xpY2UoMSl9KX0hZnVuY3Rpb24gUnooUyl7Uy5Cb3JkZXJzJiYoUy5Cb3JkZXJzLmZvckVhY2goZnVuY3Rpb24oUil7''@;'; put 'put ''dmFyIGs9Ui5Qb3NpdGlvbi50b0xvd2VyQ2FzZSgpO1Nba109e3N0eWxlOlpTKFIuTGluZVN0eWxlLCtSLldlaWdodCksY29sb3I6e3JnYjooUi5Db2xvcnx8IiMwMDAwMDAiKS5zbGljZSgxKX19fSksZGVsZXRlIFMuQm9yZGVycyl9KFIpO3ZhciBnZSxvZT1rLm1hdGNoKC88KD86XHcrOik/''@;'; put 'put ''Rm9udFxzW14+XSo+Lyk7b2UmJih0aSgoZ2U9dnIob2VbMF0pKS5Cb2xkKSYmKFIuQm9sZD0hMCksdGkoZ2UuSXRhbGljKSYmKFIuSXRhbGljPSEwKSx0aShnZS5TdHJpa2VUaHJvdWdoKSYmKFIuU3RyaWtlPSEwKSxnZS5TaXplJiYoUi5TaXplPStnZS5TaXplKSxSLkZvbnROYW1lPWdlLkZv''@;'; put 'put ''bnROYW1lP2dlLkZvbnROYW1lOiJBcmlhbCIsZ2UuVW5kZXJsaW5lJiYoUi5VbmRlcmxpbmU9ZklbZ2UuVW5kZXJsaW5lXSksZ2UuQ29sb3ImJihSLlJHQj1nZS5Db2xvci5zbGljZSgtNikpKSxSLkFsaWdubWVudCYmKFIuYWxpZ25tZW50PXt9LFIuQWxpZ25tZW50LlZlcnRpY2FsJiYoUi5h''@;'; put 'put ''bGlnbm1lbnQudmVydGljYWw9Ui5BbGlnbm1lbnQuVmVydGljYWwudG9Mb3dlckNhc2UoKSksUi5BbGlnbm1lbnQuSG9yaXpvbnRhbCYmKFIuYWxpZ25tZW50Lmhvcml6b250YWw9Ui5BbGlnbm1lbnQuSG9yaXpvbnRhbC50b0xvd2VyQ2FzZSgpKSx0aShSLkFsaWdubWVudC5XcmFwVGV4dHx8''@;'; put 'put ''IjAiKT9SLmFsaWdubWVudC53cmFwVGV4dD0hMDpudWxsPT1SLkFsaWdubWVudC5XcmFwVGV4dCYmZGVsZXRlIFIuYWxpZ25tZW50LndyYXBUZXh0LHRpKFIuQWxpZ25tZW50LlNocmlua1RvRml0fHwiMCIpJiYoUi5hbGlnbm1lbnQuc2hyaW5rVG9GaXQ9ITApLCtSLkFsaWdubWVudC5JbmRl''@;'; put 'put ''bnQmJihSLmFsaWdubWVudC5pbmRlbnQ9K1IuQWxpZ25tZW50LkluZGVudHx8MCksK1IuQWxpZ25tZW50LlJvdGF0ZSYmKFIuYWxpZ25tZW50LnRleHRSb3RhdGlvbj0rUi5BbGlnbm1lbnQuUm90YXRlfHwwKSl9U1tSLklEXT1SLCgiRGVmYXVsdCI9PVIuSUR8fCJOb3JtYWwiPT1SLk5hbWUp''@;'; put 'put ''JiZJNChSKX1mdW5jdGlvbiBaUyhTLFIpe3N3aXRjaChTKXtjYXNlIk5vbmUiOnJldHVybiJub25lIjtjYXNlIkRhc2giOnJldHVybiJkYXNoZWQiO2Nhc2UiRG90IjpyZXR1cm4iZG90dGVkIjtjYXNlIkRhc2hEb3QiOnJldHVybiJkYXNoRG90IjtjYXNlIkRhc2hEb3REb3QiOnJldHVybiJk''@;'; put 'put ''YXNoRG90RG90IjtjYXNlIlNsYW50RGFzaERvdCI6cmV0dXJuInNsYW50RGFzaERvdCI7Y2FzZSJEb3VibGUiOnJldHVybiJkb3VibGUiO2Nhc2UiQ29udGludW91cyI6c3dpdGNoKCtSfHwwKXtjYXNlIDA6cmV0dXJuImhhaXIiO2Nhc2UgMTpyZXR1cm4idGhpbiI7Y2FzZSAyOnJldHVybiJt''@;'; put 'put ''ZWRpdW0iO2Nhc2UgMzpyZXR1cm4idGhpY2sifXJldHVybiJ0aGluIn1yZXR1cm4gU31mdW5jdGlvbiBwSShTLFIsayxHLFEsb2UsZ2UscGUseWUsUGUpe3ZhciBOZT0iR2VuZXJhbCIsWWU9Ry5TdHlsZUlELGV0PXt9O1BlPVBlfHx7fTt2YXIgY3Q9W10sRXQ9MDtmb3Iodm9pZCAwPT09WWUm''@;'; put 'put ''JnBlJiYoWWU9cGUuU3R5bGVJRCksdm9pZCAwPT09WWUmJmdlJiYoWWU9Z2UuU3R5bGVJRCk7dm9pZCAwIT09b2VbWWVdOyl7dmFyIGF0PW9lW1llXTtpZigiR2VuZXJhbCI9PU5lJiZhdC5uZiYmKE5lPW9lW1llXS5uZiksYXQuSW50ZXJpb3ImJmN0LnB1c2gob2VbWWVdLkludGVyaW9yKSxh''@;'; put 'put ''dC5hbGlnbm1lbnQmJihldC5hbGlnbm1lbnR8fChldC5hbGlnbm1lbnQ9cXQoYXQuYWxpZ25tZW50KSkpLG51bGw9PWV0LmJvbGQmJmF0LkJvbGQmJihldC5ib2xkPSEwKSxudWxsPT1ldC5pdGFsaWMmJmF0Lkl0YWxpYyYmKGV0Lml0YWxpYz0hMCksbnVsbD09ZXQuc3RyaWtlJiZhdC5TdHJp''@;'; put 'put ''a2UmJihldC5zdHJpa2U9ITApLG51bGw9PWV0LnN6JiZhdC5TaXplJiYoZXQuc3o9YXQuU2l6ZSksbnVsbD09ZXQubmFtZSYmYXQuRm9udE5hbWUmJihldC5uYW1lPWF0LkZvbnROYW1lKSxudWxsPT1ldC51bmRlcmxpbmUmJmF0LlVuZGVybGluZSYmKGV0LnVuZGVybGluZT1hdC5VbmRlcmxp''@;'; put 'put ''bmUpLG51bGw9PWV0LmNvbG9yJiZhdC5SR0ImJihldC5jb2xvcj17cmdiOmF0LlJHQn0pLFsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihPdCl7bnVsbD09ZXRbT3RdJiZhdFtPdF0mJihldFtPdF09cXQoYXRbT3RdKSl9KSwiRGVmYXVsdCI9PVllKWJy''@;'; put 'put ''ZWFrO1llPWF0LlBhcmVudHx8IkRlZmF1bHQifWV0Lm5hbWV8fChldC5uYW1lPW9lLkRlZmF1bHQmJm9lLkRlZmF1bHQuRm9udE5hbWV8fCJBcmlhbCIpLGV0LnN6fHwoZXQuc3o9b2UuRGVmYXVsdCYmb2UuRGVmYXVsdC5TaXplfHwxMik7dmFyIGJ0PSIiO2lmKFN8fEcuRm9ybXVsYXx8IlN0''@;'; put 'put ''cmluZyI9PWsuVHlwZXx8Ik51bWJlciI9PWsuVHlwZSlzd2l0Y2goay5UeXBlKXtjYXNlIkJvb2xlYW4iOkcudD0iYiIsRy52PXRpKFMpO2JyZWFrO2Nhc2UiU3RyaW5nIjpHLnQ9InMiLGJ0PUxhKFFyKFMpKSxHLnY9Uy5pbmRleE9mKCI8Iik+LTE/UXIoUnx8UykucmVwbGFjZSgvPFteXSo/''@;'; put 'put ''Pi9nLCIiKTpidCxTLmluZGV4T2YoIjwiKT4tMSYmKEcuUj1tZC5odG1sX3RvX3JzKFFyKFMpKSk7YnJlYWs7Y2FzZSJEYXRlVGltZSI6IloiIT1TLnNsaWNlKC0xKSYmKFMrPSJaIiksRy52PShIZShTKS1uZXcgRGF0ZShEYXRlLlVUQygxODk5LDExLDMwKSkpLzg2NGU1LEcudiE9Ry52P0cu''@;'; put 'put ''dj1RcihTKTpHLnY8NjAmJihHLnY9Ry52LTEpLCghTmV8fCJHZW5lcmFsIj09TmUpJiYoTmU9Inl5eXktbW0tZGQiKTtjYXNlIk51bWJlciI6dm9pZCAwPT09Ry52JiYoRy52PStTKSxHLnR8fChHLnQ9Im4iKTticmVhaztjYXNlIkVycm9yIjpHLnQ9ImUiLEcudj1QM1tTXSwhMSE9PVBlLmNl''@;'; put 'put ''bGxUZXh0JiYoRy53PVMpO2JyZWFrO2RlZmF1bHQ6IiI9PVMmJiIiPT1SP0cudD0ieiI6KEcudD0icyIsYnQ9TGEoUXIoUykpLEcudj1TLmluZGV4T2YoIjwiKT4tMT9RcihSfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoRy5SPW1kLmh0bWxfdG9f''@;'; put 'put ''cnMoUXIoUykpKSl9ZWxzZSBHLnQ9InoiLGRlbGV0ZSBHLnY7aWYoZnVuY3Rpb24gelMoUyxSLGspe2lmKCJ6IiE9PVMudCl7aWYoIWt8fCExIT09ay5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fE1jW1Mudl06IkdlbmVyYWwiPT09Uj8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9B''@;'; put 'put ''Ll9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOmZ1bmN0aW9uIER6KFMsUil7dmFyIGs9dGVbU118fFFyKFMpO3JldHVybiJHZW5lcmFsIj09PWs/QS5fZ2VuZXJhbChSKTpBLmZvcm1hdChrLFIpfShSfHwiR2VuZXJhbCIsUy52KX1jYXRjaChv''@;'; put 'put ''ZSl7aWYoay5XVEYpdGhyb3cgb2V9dHJ5e3ZhciBHPXRlW1JdfHxSfHwiR2VuZXJhbCI7aWYoay5jZWxsTkYmJihTLno9Ryksay5jZWxsRGF0ZXMmJiJuIj09Uy50JiZBLmlzX2RhdGUoRykpe3ZhciBRPUEucGFyc2VfZGF0ZV9jb2RlKFMudik7USYmKFMudD0iZCIsUy52PW5ldyBEYXRlKFEu''@;'; put 'put ''eSxRLm0tMSxRLmQsUS5ILFEuTSxRLlMsUS51KSl9fWNhdGNoKG9lKXtpZihrLldURil0aHJvdyBvZX19fShHLE5lLFBlKSwhMSE9PVBlLmNlbGxGb3JtdWxhKWlmKEcuRm9ybXVsYSl7dmFyIGp0PVFyKEcuRm9ybXVsYSk7NjE9PWp0LmNoYXJDb2RlQXQoMCkmJihqdD1qdC5zbGljZSgxKSks''@;'; put 'put ''Ry5mPUhnKGp0LFEpLGRlbGV0ZSBHLkZvcm11bGEsIlJDIj09Ry5BcnJheVJhbmdlP0cuRj1IZygiUkM6UkMiLFEpOkcuQXJyYXlSYW5nZSYmKEcuRj1IZyhHLkFycmF5UmFuZ2UsUSkseWUucHVzaChbb28oRy5GKSxHLkZdKSl9ZWxzZSBmb3IoRXQ9MDtFdDx5ZS5sZW5ndGg7KytFdClRLnI+''@;'; put 'put ''PXllW0V0XVswXS5zLnImJlEucjw9eWVbRXRdWzBdLmUuciYmUS5jPj15ZVtFdF1bMF0ucy5jJiZRLmM8PXllW0V0XVswXS5lLmMmJihHLkY9eWVbRXRdWzFdKTtpZihQZS5jZWxsU3R5bGVzJiYoY3QuZm9yRWFjaChmdW5jdGlvbihPdCl7IWV0LnBhdHRlcm5UeXBlJiZPdC5wYXR0ZXJuVHlw''@;'; put 'put ''ZSYmKGV0LnBhdHRlcm5UeXBlPU90LnBhdHRlcm5UeXBlKSwhZXQuZmdDb2xvciYmT3QuZmdDb2xvciYmKGV0LmZnQ29sb3I9T3QuZmdDb2xvcil9KSxHLnM9ZXQpLHZvaWQgMCE9PUcuU3R5bGVJRCYmKEcuaXhmZT1HLlN0eWxlSUQpLEcuUiYmRy5zKXt2YXIga3Q9cXQoRy5zKTtkZWxldGUg''@;'; put 'put ''a3QuYm9sZCxkZWxldGUga3QuaXRhbGljLGRlbGV0ZSBrdC51bmRlcmxpbmUsZGVsZXRlIGt0LnN0cmlrZSxHLlIuZm9yRWFjaChmdW5jdGlvbihPdCl7T3Qucz1QdChxdChrdCksT3Qucyl9KX19ZnVuY3Rpb24gTHooUyl7Uy50PVMudnx8IiIsUy50PVMudC5yZXBsYWNlKC9cclxuL2csIlxu''@;'; put 'put ''IikucmVwbGFjZSgvXHIvZywiXG4iKSxTLnY9Uy53PVMuaXhmZT12b2lkIDB9ZnVuY3Rpb24gV1MoUyl7aWYoVGUmJkJ1ZmZlci5pc0J1ZmZlcihTKSlyZXR1cm4gUy50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgUylyZXR1cm4gUztpZih0eXBlb2YgVWludDhBcnJheTwi''@;'; put 'put ''dSImJlMgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBnbyhDKEgoUykpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgWWc9LzwoXC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86''@;'; put 'put ''PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIEQ4KFMsUil7dmFyIGs9Unx8e30sRz1KKFdTKFMpKTsoImJpbmFyeSI9PWsudHlwZXx8ImFycmF5Ij09ay50eXBlfHwiYmFzZTY0Ij09ay50eXBlKSYmKEc9dHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFkoRykp''@;'; put 'put ''OmdvKEcpKTt2YXIgUT1HLnNsaWNlKDAsMTAyNCkudG9Mb3dlckNhc2UoKSxvZT0hMTtpZigoMTAyMyZRLmluZGV4T2YoIj4iKSk+TWF0aC5taW4oMTAyMyZRLmluZGV4T2YoIiwiKSwxMDIzJlEuaW5kZXhPZigiOyIpKSl7dmFyIGdlPXF0KGspO3JldHVybiBnZS50eXBlPSJzdHJpbmciLGoz''@;'; put 'put ''LnRvX3dvcmtib29rKEcsZ2UpfWlmKC0xPT1RLmluZGV4T2YoIjw/eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJzY3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVuY3Rpb24oeXUpe1EuaW5kZXhPZigiPCIreXUpPj0wJiYob2U9ITApfSksb2UpcmV0dXJuIG1k''@;'; put 'put ''LnRvX3dvcmtib29rKEcsayk7dmFyIHBlLFBlLHllPVtdO251bGwhPWxlJiZudWxsPT1rLmRlbnNlJiYoay5kZW5zZT1sZSk7dmFyIGtyLE5lPXt9LFllPVtdLGV0PWsuZGVuc2U/W106e30sY3Q9IiIsRXQ9e30sYXQ9e30sYnQ9e30sanQ9SDAoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+Jyks''@;'; put 'put ''a3Q9MCxPdD0wLEt0PTAsVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0scnI9e30sU249e30sbHI9IiIsWG49MCxCbj1bXSxmcj17fSxicj17fSxlcj0wLE1pPVtdLEZpPXt9LG5hPVtdLGNhPXt9LExpPVtdLFZuPSExLEJyPVtdLF9yPVtdLEZuPXt9LGpyPTAsWmk9MCx5aT17U2hl''@;'; put 'put ''ZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sX2E9e307WWcubGFzdEluZGV4PTAsRz1HLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIHNvPSIiO3BlPVlnLmV4ZWMoRyk7KXN3aXRjaChwZVszXT0oc289cGVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0''@;'; put 'put ''YSI6aWYoImRhdGEiPT1zbyl7aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtwZVszXSwhMF0p''@;'; put 'put ''O2JyZWFrfWlmKHllW3llLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT1wZVsxXT9wSShHLnNsaWNlKGt0LHBlLmluZGV4KSxscixqdCwiY29tbWVudCI9PXllW3llLmxlbmd0aC0xXVswXT9jYTphdCx7YzpPdCxyOkt0fSxycixMaVtPdF0sYnQsQnIsayk6KGxyPSIiLGp0PUgwKHBlWzBdKSxr''@;'; put 'put ''dD1wZS5pbmRleCtwZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09cGVbMV18fCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2lmKChhdD1qUyhwZVswXSkpLkluZGV4JiYoT3Q9K2F0LkluZGV4LTEpLE90PFRuLnMuYyYmKFRu''@;'; put 'put ''LnMuYz1PdCksT3Q+VG4uZS5jJiYoVG4uZS5jPU90KSxuYT1bXSwhay5zaGVldFN0dWJzKXsrK090O2JyZWFrfXBJKCIiLCIiLHt9LCJjb21tZW50Ij09eWVbeWUubGVuZ3RoLTFdWzBdP2NhOmF0LHtjOk90LHI6S3R9LHJyLExpW090XSxidCxCcixrKX1pZihuYS5sZW5ndGg+MCYmKGF0LmM9''@;'; put 'put ''bmEpLCghay5zaGVldFJvd3N8fGsuc2hlZXRSb3dzPkt0KSYmKHZvaWQgMCE9PWF0LnZ8fGsuc2hlZXRTdHVicykmJihrLmRlbnNlPyhldFtLdF18fChldFtLdF09W10pLGV0W0t0XVtPdF09YXQpOmV0W1RhKE90KStqaShLdCldPWF0KSxhdC5IUmVmJiYoYXQubD17VGFyZ2V0OlFyKGF0LkhS''@;'; put 'put ''ZWYpfSxhdC5IUmVmU2NyZWVuVGlwJiYoYXQubC5Ub29sdGlwPWF0LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSBhdC5IUmVmLGRlbGV0ZSBhdC5IUmVmU2NyZWVuVGlwKSwoYXQuTWVyZ2VBY3Jvc3N8fGF0Lk1lcmdlRG93bikmJihqcj1PdCsoMHxwYXJzZUludChhdC5NZXJnZUFjcm9zcywxMCkp''@;'; put 'put ''LFppPUt0KygwfHBhcnNlSW50KGF0Lk1lcmdlRG93biwxMCkpLChqcj5PdHx8Wmk+S3QpJiZCbi5wdXNoKHtzOntjOk90LHI6S3R9LGU6e2M6anIscjpaaX19KSksay5zaGVldFN0dWJzKWlmKGF0Lk1lcmdlQWNyb3NzfHxhdC5NZXJnZURvd24pe2Zvcih2YXIgaWE9T3Q7aWE8PWpyOysraWEp''@;'; put 'put ''Zm9yKHZhciBMbz1LdDtMbzw9Wmk7KytMbykoaWE+T3R8fExvPkt0KSYmKGsuZGVuc2U/KGV0W0xvXXx8KGV0W0xvXT1bXSksZXRbTG9dW2lhXT17dDoieiJ9KTpldFtUYShpYSkramkoTG8pXT17dDoieiJ9KTtPdD1qcisxfWVsc2UrK090O2Vsc2UgYXQuTWVyZ2VBY3Jvc3M/T3Q9anIrMTor''@;'; put 'put ''K090fWVsc2UoYXQ9alMocGVbMF0pKS5JbmRleCYmKE90PSthdC5JbmRleC0xKSxPdDxUbi5zLmMmJihUbi5zLmM9T3QpLE90PlRuLmUuYyYmKFRuLmUuYz1PdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKytPdCxuYT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09cGVbMV18fCIvPiI9PT1w''@;'; put 'put ''ZVswXS5zbGljZSgtMik/KEt0PFRuLnMuciYmKFRuLnMucj1LdCksS3Q+VG4uZS5yJiYoVG4uZS5yPUt0KSwiLz4iPT09cGVbMF0uc2xpY2UoLTIpJiYoYnQ9SDAocGVbMF0pKS5JbmRleCYmKEt0PStidC5JbmRleC0xKSxPdD0wLCsrS3QpOigoYnQ9SDAocGVbMF0pKS5JbmRleCYmKEt0PSti''@;'; put 'put ''dC5JbmRleC0xKSxGbj17fSwoIjAiPT1idC5BdXRvRml0SGVpZ2h0fHxidC5IZWlnaHQpJiYoRm4uaHB0PXBhcnNlRmxvYXQoYnQuSGVpZ2h0KSxGbi5ocHg9c2goRm4uaHB0KSxfcltLdF09Rm4pLCIxIj09YnQuSGlkZGVuJiYoRm4uaGlkZGVuPSEwLF9yW0t0XT1GbikpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''d29ya3NoZWV0IjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSk7WWUucHVzaChjdCksVG4ucy5yPD1Ubi5lLnImJlRuLnMuYzw9VG4uZS5jJiYoZXRbIiFyZWYiXT1yYShUbiksay5z''@;'; put 'put ''aGVldFJvd3MmJmsuc2hlZXRSb3dzPD1Ubi5lLnImJihldFsiIWZ1bGxyZWYiXT1ldFsiIXJlZiJdLFRuLmUucj1rLnNoZWV0Um93cy0xLGV0WyIhcmVmIl09cmEoVG4pKSksQm4ubGVuZ3RoJiYoZXRbIiFtZXJnZXMiXT1CbiksTGkubGVuZ3RoPjAmJihldFsiIWNvbHMiXT1MaSksX3IubGVu''@;'; put 'put ''Z3RoPjAmJihldFsiIXJvd3MiXT1fciksRXQmJihldFsiIXNoZWV0Rm9ybWF0Il09a3ooRXQpKSxOZVtjdF09ZXR9ZWxzZSBUbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxLdD1PdD0wLHllLnB1c2goW3BlWzNdLCExXSksUGU9SDAocGVbMF0pLGN0PVFyKFBlLk5hbWUpLGV0PWsu''@;'; put 'put ''ZGVuc2U/W106e30sQm49W10sQnI9W10sX3I9W10seWkuU2hlZXRzLnB1c2goX2E9e25hbWU6Y3QsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpv''@;'; put 'put ''aW4oInwiKSl9ZWxzZXtpZigiLz4iPT1wZVswXS5zbGljZSgtMikpYnJlYWs7RXQ9SDAocGVbMF0pLHllLnB1c2goW3BlWzNdLCExXSksTGk9W10sVm49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09cGVbMV0/VVMocnIsU24sbHIsayk6KFNuPUgwKHBlWzBdKSxscj0iIik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJudW1iZXJmb3JtYXQiOlNuLm5mPVFyKEgwKHBlWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiksdGVbU24ubmZdJiYoU24ubmY9dGVbU24ubmZdKTtmb3IodmFyIE9hPTA7MzkyIT1PYSYmQS5fdGFibGVbT2FdIT1Tbi5uZjsrK09hKTtpZigzOTI9PU9hKWZvcihPYT01NzszOTIhPU9hOysrT2Ep''@;'; put 'put ''aWYobnVsbD09QS5fdGFibGVbT2FdKXtBLmxvYWQoU24ubmYsT2EpO2JyZWFrfWJyZWFrO2Nhc2UiY29sdW1uIjppZigidGFibGUiIT09eWVbeWUubGVuZ3RoLTFdWzBdfHwiLyI9PT1wZVsxXSlicmVhaztpZigoa3I9SDAocGVbMF0pKS5IaWRkZW4mJihrci5oaWRkZW49ITAsZGVsZXRlIGty''@;'; put 'put ''LkhpZGRlbiksa3IuV2lkdGg/a3Iud3B4PTQqcGFyc2VJbnQoa3IuV2lkdGgsMTApLzM6K2tyLkF1dG9GaXRXaWR0aCYmKGtyLmF1dG89MSksIVZuJiZrci53cHg+MTApe1ZuPSEwLFRjPWhrO2Zvcih2YXIgaG89MDtobzxMaS5sZW5ndGg7KytobylMaVtob10mJlEwKExpW2hvXSl9Vm4mJlEw''@;'; put 'put ''KGtyKSxMaVtrci5JbmRleC0xfHxMaS5sZW5ndGhdPWtyO2Zvcih2YXIgSmE9MDtKYTwra3IuU3BhbjsrK0phKUxpW0xpLmxlbmd0aF09cXQoa3IpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09cGVbMV0pYnJlYWs7eWkuTmFtZXN8fCh5aS5OYW1lcz1bXSk7dmFyIEJpPXZyKHBl''@;'; put 'put ''WzBdKSxJcz17TmFtZTpCaS5OYW1lLFJlZjpIZyhCaS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTt5aS5TaGVldHMubGVuZ3RoPjAmJihJcy5TaGVldD15aS5TaGVldHMubGVuZ3RoLTEpLHlpLk5hbWVzLnB1c2goSXMpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2Ui''@;'; put 'put ''aSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8i''@;'; put 'put ''PT09cGVbMV0pYnJlYWs7U24uQWxpZ25tZW50PUgwKHBlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PXBlWzFdJiYoU24uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXBlWzFdKWJyZWFrO1NuLkJvcmRlcnN8fChTbi5Cb3JkZXJzPVtdKSxTbi5Cb3JkZXJz''@;'; put 'put ''LnB1c2goSDAocGVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2xyKz1wZVswXTticmVha30iLyI9PT1wZVsxXT9scis9Ry5zbGljZShYbixwZS5pbmRleCtwZVswXS5sZW5ndGgpOlhuPXBlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFr''@;'; put 'put ''LmNlbGxTdHlsZXN8fCIvIj09PXBlWzFdKWJyZWFrO1NuLkludGVyaW9yPUgwKHBlWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2Ui''@;'; put 'put ''Y29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJp''@;'; put 'put ''ZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09cGVbMV0/RjMoZnIsc28sRy5zbGljZShlcixwZS5pbmRleCkpOmVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3''@;'; put 'put ''b3JrYm9vayI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UgeWUucHVzaChbcGVbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9''@;'; put 'put ''eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKTtMeihjYSksbmEucHVzaChjYSl9ZWxzZSB5ZS5wdXNoKFtwZVszXSwhMV0pLGNhPXthOihQZT1IMChwZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigi''@;'; put 'put ''LyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpKXt2YXIgUG49SDAocGVbMF0pO2V0WyIhYXV0b2ZpbHRlciJdPXty''@;'; put 'put ''ZWY6SGcoUG4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSx5ZS5wdXNoKFtwZVszXSwhMF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKGV0WyIhdmFsaWRhdGlvbnMiXXx8KGV0WyIhdmFsaWRhdGlvbnMiXT1bXSksIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1w''@;'; put 'put ''ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtwZVszXSwhMF0pLEZpPXt9O2JyZWFrO2Nhc2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09cGVbMV0pe3ZhciBXbz0r''@;'; put 'put ''Ry5zbGljZShrdCxwZS5pbmRleCk7KDcyPT1Xb3x8OTY9PVdvKSYmSWYoV28pfWVsc2Uga3Q9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNl''@;'; put 'put ''Im9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9y''@;'; put 'put ''bWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PXllLmxlbmd0aCYmImRvY3VtZW50Ij09cGVbM118fDA9PXllLmxlbmd0aCYmInVvZiI9PXBl''@;'; put 'put ''WzNdKXJldHVybiBESShHLGspO3ZhciBocj0hMDtzd2l0Y2goeWVbeWUubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaChwZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9u''@;'; put 'put ''ZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImNvbXBv''@;'; put 'put ''bmVudG9wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIi''@;'; put 'put ''OmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2gocGVbM10pe2Nhc2UiZGF0ZTE5MDQiOnlpLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3''@;'; put 'put ''aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9v''@;'; put 'put ''ayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2Ui''@;'; put 'put ''bWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6''@;'; put 'put ''Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxh''@;'; put 'put ''dGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2Fz''@;'; put 'put ''ZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09cGVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXBlWzFdKXN3aXRjaChHLnNsaWNlKGVyLHBlLmluZGV4KSl7Y2FzZSJTaGVl''@;'; put 'put ''dEhpZGRlbiI6X2EuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOl9hLkhpZGRlbj0yfWVsc2UgZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpldFsiIW1hcmdpbnMiXXx8WDMoZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxldFsiIW1hcmdp''@;'; put 'put ''bnMiXS5oZWFkZXI9dnIocGVbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJnaW5zIl0uZm9vdGVyPXZyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIFFsPXZy''@;'; put 'put ''KHBlWzBdKTtldFsiIW1hcmdpbnMiXXx8WDMoZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxRbC5Ub3AmJihldFsiIW1hcmdpbnMiXS50b3A9UWwuVG9wKSxRbC5MZWZ0JiYoZXRbIiFtYXJnaW5zIl0ubGVmdD1RbC5MZWZ0KSxRbC5SaWdodCYmKGV0WyIhbWFyZ2lucyJdLnJpZ2h0PVFsLlJp''@;'; put 'put ''Z2h0KSxRbC5Cb3R0b20mJihldFsiIW1hcmdpbnMiXS5ib3R0b209UWwuQm90dG9tKTticmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6eWkuVmlld3N8fCh5aS5WaWV3cz1bXSkseWkuVmlld3NbMF18fCh5aS5WaWV3c1swXT17fSkseWkuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJw''@;'; put 'put ''YW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJp''@;'; put 'put ''bnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2Ui''@;'; put 'put ''cmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0''@;'; put 'put ''dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5''@;'; put 'put ''cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6''@;'; put 'put ''Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmll''@;'; put 'put ''d2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09cGVbMF0uc2xpY2UoLTIpKWlmKCIvIj09cGVbMV0pe2V0WyIhZnJlZXplIl18fChldFsiIWZyZWV6''@;'; put 'put ''ZSJdPSJBMSIpO3ZhciBZbD1ObyhldFsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09cGVbM10/WWwucj0rRy5zbGljZShlcixwZS5pbmRleCk6WWwuYz0rRy5zbGljZShlcixwZS5pbmRleCksZXRbIiFmcmVlemUiXT1xaShZbCl9ZWxzZSBlcj1wZS5pbmRleCtwZVswXS5sZW5ndGg7''@;'; put 'put ''YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOmV0WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOmV0WyIhb3V0bGluZSJdfHwoZXRbIiFvdXRsaW5lIl09e30pLGV0WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9z''@;'; put 'put ''dW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaChwZVszXSl7Y2FzZSJp''@;'; put 'put ''bW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9j''@;'; put 'put ''YXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2Fz''@;'; put 'put ''ZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5v''@;'; put 'put ''cm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2Ui''@;'; put 'put ''bWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1p''@;'; put 'put ''biI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2gocGVbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVh''@;'; put 'put ''ayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHBlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVy''@;'; put 'put ''YW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaChwZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5''@;'; put 'put ''cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpj''@;'; put 'put ''YXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdt''@;'; put 'put ''aW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKHBlWzNdKXtjYXNlInJhbmdlIjpGaS5yZWY9cGU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5z''@;'; put 'put ''aXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFs''@;'; put 'put ''aWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2gocGVbM10pe2Nh''@;'; put 'put ''c2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUi''@;'; put 'put ''OmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2Fz''@;'; put 'put ''ZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2gocGVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2Ui''@;'; put 'put ''ZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpj''@;'; put 'put ''YXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1pZihocnx8cGVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIXllW3llLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3BlWzNdKyJ8''@;'; put 'put ''Iit5ZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT15ZVt5ZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09cGVbMV0/SXooYnIsc28sTWksRy5zbGljZShlcixwZS5pbmRleCkpOihNaT1wZSxlcj1wZS5pbmRleCtw''@;'; put 'put ''ZVswXS5sZW5ndGgpO2JyZWFrfWlmKGsuV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrcGVbM10rInwiK3llLmpvaW4oInwiKX12YXIgR2w9e307cmV0dXJuIWsuYm9va1NoZWV0cyYmIWsuYm9va1Byb3BzJiYoR2wuU2hlZXRzPU5lKSxHbC5TaGVldE5hbWVzPVllLEdsLldvcmtib29r''@;'; put 'put ''PXlpLEdsLlNTRj1BLmdldF90YWJsZSgpLEdsLlByb3BzPWZyLEdsLkN1c3Rwcm9wcz1icixHbC5TaGVldHMmJkdsLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbih5dSl7dmFyIE1sPUdsLlNoZWV0c1t5dV07TWxbIiFtZXJnZXMiXSYmTWxbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KGxuKXsic3RyaW5nIj09dHlwZW9mIGxuJiYobG49dy51dGlscy5kZWNvZGVfcmFuZ2UobG4pKTt2YXIgRW49dy51dGlscy5lbmNvZGVfY2VsbChsbi5zKSxVbj1BcnJheS5pc0FycmF5KE1sKT8oTWxbbG4ucy5yXXx8W10pW2xuLnMuY106TWxbRW5dO1VuJiZVbi5zJiYobnVsbCE9VW4ucy50''@;'; put 'put ''b3AmJmp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7dG9wOlVuLnMudG9wfSksbnVsbCE9VW4ucy5ib3R0b20mJmp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7Ym90dG9tOlVuLnMuYm90dG9tfSksbnVsbCE9VW4ucy5sZWZ0JiZqdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUo''@;'; put 'put ''TWwsbG4se2xlZnQ6VW4ucy5sZWZ0fSksbnVsbCE9VW4ucy5yaWdodCYmanUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGxuLHtyaWdodDpVbi5zLnJpZ2h0fSkpfSl9KSxHbH1mdW5jdGlvbiBJOChTLFIpe3N3aXRjaChISShSPVJ8fHt9KSxSLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2''@;'; put 'put ''NCI6cmV0dXJuIEQ4KF9lLmRlY29kZShTKSxSKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmV0dXJuIEQ4KFMsUik7Y2FzZSJhcnJheSI6cmV0dXJuIEQ4KEMoUyksUil9fWZ1bmN0aW9uIGJJKFMpe3JldHVybiBQcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUi''@;'; put 'put ''OlMuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitINChTLlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24gTm5lKFMsUixrLEcsUSxvZSxnZSl7aWYoIVN8fG51bGw9PVMudiYmbnVsbD09Uy5mJiYhRy5zaGVldFN0dWJzKXJldHVybiIiO3ZhciBwZT17fTtpZihTLmYmJihwZVsic3M6Rm9ybXVsYSJd''@;'; put 'put ''PSI9IitMcihINChTLmYsZ2UpKSksUy5GJiZTLkYuc2xpY2UoMCxSLmxlbmd0aCk9PVIpe3ZhciB5ZT1ObyhTLkYuc2xpY2UoUi5sZW5ndGgrMSkpO3BlWyJzczpBcnJheVJhbmdlIl09IlJDOlIiKyh5ZS5yPT1nZS5yPyIiOiJbIisoeWUuci1nZS5yKSsiXSIpKyJDIisoeWUuYz09Z2UuYz8i''@;'; put 'put ''IjoiWyIrKHllLmMtZ2UuYykrIl0iKX1pZihTLmwmJlMubC5UYXJnZXQmJihwZVsic3M6SFJlZiJdPUxyKFMubC5UYXJnZXQpLFMubC5Ub29sdGlwJiYocGVbIng6SFJlZlNjcmVlblRpcCJdPUxyKFMubC5Ub29sdGlwKSkpLGtbIiFtZXJnZXMiXSlmb3IodmFyIFBlPWtbIiFtZXJnZXMiXSxO''@;'; put 'put ''ZT0wO05lIT1QZS5sZW5ndGg7KytOZSlQZVtOZV0ucy5jIT1nZS5jfHxQZVtOZV0ucy5yIT1nZS5yfHwoUGVbTmVdLmUuYz5QZVtOZV0ucy5jJiYocGVbInNzOk1lcmdlQWNyb3NzIl09UGVbTmVdLmUuYy1QZVtOZV0ucy5jKSxQZVtOZV0uZS5yPlBlW05lXS5zLnImJihwZVsic3M6TWVyZ2VE''@;'; put 'put ''b3duIl09UGVbTmVdLmUuci1QZVtOZV0ucy5yKSk7dmFyIFllPSIiLGV0PSIiO3N3aXRjaChTLnQpe2Nhc2UieiI6aWYoIUcuc2hlZXRTdHVicylyZXR1cm4iIjticmVhaztjYXNlIm4iOlllPSJOdW1iZXIiLGV0PVN0cmluZyhTLnYpO2JyZWFrO2Nhc2UiYiI6WWU9IkJvb2xlYW4iLGV0PVMu''@;'; put 'put ''dj8iMSI6IjAiO2JyZWFrO2Nhc2UiZSI6WWU9IkVycm9yIixldD1NY1tTLnZdO2JyZWFrO2Nhc2UiZCI6WWU9IkRhdGVUaW1lIixldD1uZXcgRGF0ZShTLnYpLnRvSVNPU3RyaW5nKCksbnVsbD09Uy56JiYoUy56PVMuenx8QS5fdGFibGVbMTRdKTticmVhaztjYXNlInMiOlllPSJTdHJpbmci''@;'; put 'put ''LGV0PXlhKFMudnx8IiIpfXZhciBjdD1sMChHLmNlbGxYZnMsbnVsbCxTLEcpO3BlWyJzczpTdHlsZUlEIl09InMiKygyMStjdCkscGVbInNzOkluZGV4Il09Z2UuYysxO3ZhciBFdD1udWxsIT1TLnY/ZXQ6IiIsYXQ9InoiPT1TLnQ/IiI6Uy5SP2Z1bmN0aW9uIHhiKFMpe3JldHVybic8c3M6''@;'; put 'put ''RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4nK1MubWFwKGZ1bmN0aW9uKGspe3ZhciBHPXlhKGsudik7cmV0dXJuIGsucyYmKGsucy5ib2xkJiYoRz0iPEI+IitHKyI8L0I+Iiksay5zLml0YWxpYyYmKEc9IjxJPiIrRysiPC9J''@;'; put 'put ''PiIpLGsucy5zdHJpa2UmJihHPSI8Uz4iK0crIjwvUz4iKSxrLnMudW5kZXJsaW5lJiYoRz0iPFU+IitHKyI8L1U+IiksInN1cGVyIj09ay5zLnZhbGlnbiYmKEc9IjxTdXA+IitHKyI8L1N1cD4iKSwic3ViIj09ay5zLnZhbGlnbiYmKEc9IjxTdWI+IitHKyI8L1N1Yj4iKSwoay5zLm5hbWV8''@;'; put 'put ''fGsucy5zenx8ay5zLmNvbG9yJiZudWxsIT1rLnMuY29sb3IucmdiKSYmKEc9WyI8Rm9udCIsay5zLm5hbWU/JyBodG1sOkZhY2U9Iicray5zLm5hbWUrJyInOiIiLGsucy5zej8nIGh0bWw6U2l6ZT0iJytrLnMuc3orJyInOiIiLGsucy5jb2xvcj8nIGh0bWw6Q29sb3I9IiMnKygiMDAwMDAw''@;'; put 'put ''IisoIm51bWJlciI9PXR5cGVvZiBrLnMuY29sb3IucmdiP2sucy5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOmsucy5jb2xvci5yZ2IpKS5zbGljZSgtNikrJyInOiIiLCI+IixHLCI8L0ZvbnQ+Il0uam9pbigiIikpKSxHfSkuam9pbigiIikrIjwvRGF0YT4ifShTLlIpOic8RGF0YSBzczpUeXBl''@;'; put 'put ''PSInK1llKyciPicrRXQrIjwvRGF0YT4iO3JldHVybihTLmN8fFtdKS5sZW5ndGg+MCYmKGF0Kz1mdW5jdGlvbiBfSShTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oUil7dmFyIEc9UHIoInNzOkRhdGEiLEZhKFIudHx8IiIpLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0''@;'; put 'put ''MCJ9KTtyZXR1cm4gUHIoIkNvbW1lbnQiLEcseyJzczpBdXRob3IiOlIuYX0pfSkuam9pbigiIil9KFMuYykpLFByKCJDZWxsIixhdCxwZSl9ZnVuY3Rpb24gVm5lKFMsUil7dmFyIGs9JzxSb3cgc3M6SW5kZXg9IicrKFMrMSkrJyInO3JldHVybiBSJiYoUi5ocHgmJiFSLmhwdCYmKFIuaHB0''@;'; put 'put ''PVUzKFIuaHB4KSksUi5ocHQmJihrKz0nIHNzOkF1dG9GaXRIZWlnaHQ9IjAiIHNzOkhlaWdodD0iJytSLmhwdCsnIicpLFIuaGlkZGVuJiYoays9JyBzczpIaWRkZW49IjEiJykpLGsrIj4ifWZ1bmN0aW9uIHdJKFMsUixrKXt2YXIgRz1bXSxvZT1rLlNoZWV0c1trLlNoZWV0TmFtZXNbU11d''@;'; put 'put ''LGdlPW9lP2Z1bmN0aW9uIE96KFMsUixrLEcpe2lmKCFTfHwhKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIFE9Ry5Xb3JrYm9vay5OYW1lcyxvZT1bXSxnZT0wO2dlPFEubGVuZ3RoOysrZ2Upe3ZhciBwZT1RW2dlXTtwZS5TaGVldD09ayYmKHBlLk5hbWUu''@;'; put 'put ''bWF0Y2goL15feGxmblwuLyl8fG9lLnB1c2goYkkocGUpKSl9cmV0dXJuIG9lLmpvaW4oIiIpfShvZSwwLFMsayk6IiI7cmV0dXJuIGdlLmxlbmd0aD4wJiZHLnB1c2goIjxOYW1lcz4iK2dlKyI8L05hbWVzPiIpLGdlPW9lP2Z1bmN0aW9uIFB6KFMsUixrLEcpe2lmKCFTWyIhcmVmIl0pcmV0''@;'; put 'put ''dXJuIiI7dmFyIFE9b28oU1siIXJlZiJdKSxvZT1TWyIhbWVyZ2VzIl18fFtdLGdlPTAscGU9W107U1siIWNvbHMiXSYmU1siIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0LGp0KXtRMChidCk7dmFyIGt0PSEhYnQud2lkdGgsT3Q9dTgoanQsYnQpLEt0PXsic3M6SW5kZXgiOmp0KzF9O2t0''@;'; put 'put ''JiYoS3RbInNzOldpZHRoIl09TWcoT3Qud2lkdGgpKSxidC5oaWRkZW4mJihLdFsic3M6SGlkZGVuIl09IjEiKSxwZS5wdXNoKFByKCJDb2x1bW4iLG51bGwsS3QpKX0pO2Zvcih2YXIgeWU9QXJyYXkuaXNBcnJheShTKSxQZT1RLnMucjtQZTw9US5lLnI7KytQZSl7Zm9yKHZhciBOZT1bVm5l''@;'; put 'put ''KFBlLChTWyIhcm93cyJdfHxbXSlbUGVdKV0sWWU9US5zLmM7WWU8PVEuZS5jOysrWWUpe3ZhciBldD0hMTtmb3IoZ2U9MDtnZSE9b2UubGVuZ3RoOysrZ2UpaWYoIShvZVtnZV0ucy5jPlllfHxvZVtnZV0ucy5yPlBlfHxvZVtnZV0uZS5jPFllfHxvZVtnZV0uZS5yPFBlKSl7KG9lW2dlXS5z''@;'; put 'put ''LmMhPVllfHxvZVtnZV0ucy5yIT1QZSkmJihldD0hMCk7YnJlYWt9aWYoIWV0KXt2YXIgY3Q9e3I6UGUsYzpZZX0sRXQ9cWkoY3QpO05lLnB1c2goTm5lKHllPyhTW1BlXXx8W10pW1llXTpTW0V0XSxFdCxTLFIsMCwwLGN0KSl9fU5lLnB1c2goIjwvUm93PiIpLE5lLmxlbmd0aD4yJiZwZS5w''@;'; put 'put ''dXNoKE5lLmpvaW4oIiIpKX1yZXR1cm4gcGUuam9pbigiIil9KG9lLFIpOiIiLGdlLmxlbmd0aD4wJiZHLnB1c2goIjxUYWJsZT4iK2dlKyI8L1RhYmxlPiIpLEcucHVzaChmdW5jdGlvbiBZUyhTLFIsayxHKXtpZighUylyZXR1cm4iIjt2YXIgUT1bXTtpZihTWyIhbWFyZ2lucyJdJiYoUS5w''@;'; put 'put ''dXNoKCI8UGFnZVNldHVwPiIpLFNbIiFtYXJnaW5zIl0uaGVhZGVyJiZRLnB1c2goUHIoIkhlYWRlciIsbnVsbCx7Ing6TWFyZ2luIjpTWyIhbWFyZ2lucyJdLmhlYWRlcn0pKSxTWyIhbWFyZ2lucyJdLmZvb3RlciYmUS5wdXNoKFByKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6U1siIW1h''@;'; put 'put ''cmdpbnMiXS5mb290ZXJ9KSksUS5wdXNoKFByKCJQYWdlTWFyZ2lucyIsbnVsbCx7Ing6Qm90dG9tIjpTWyIhbWFyZ2lucyJdLmJvdHRvbXx8IjAuNzUiLCJ4OkxlZnQiOlNbIiFtYXJnaW5zIl0ubGVmdHx8IjAuNyIsIng6UmlnaHQiOlNbIiFtYXJnaW5zIl0ucmlnaHR8fCIwLjciLCJ4OlRv''@;'; put 'put ''cCI6U1siIW1hcmdpbnMiXS50b3B8fCIwLjc1In0pKSxRLnB1c2goIjwvUGFnZVNldHVwPiIpKSxHJiZHLldvcmtib29rJiZHLldvcmtib29rLlNoZWV0cyYmRy5Xb3JrYm9vay5TaGVldHNba10paWYoRy5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVuKVEucHVzaChQcigiVmlzaWJsZSIsMT09''@;'; put 'put ''Ry5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNle2Zvcih2YXIgb2U9MDtvZTxrJiYoIUcuV29ya2Jvb2suU2hlZXRzW29lXXx8Ry5Xb3JrYm9vay5TaGVldHNbb2VdLkhpZGRlbik7KytvZSk7b2U9PWsmJlEucHVzaCgi''@;'; put 'put ''PFNlbGVjdGVkLz4iKX1pZigoKCgoR3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmUS5wdXNoKCI8RGlzcGxheVJpZ2h0VG9MZWZ0Lz4iKSxXdChTWyIhZ3JpZGxpbmVzIl0pJiZRLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLFNbIiFmcmVlemUi''@;'; put 'put ''XSl7US5wdXNoKCI8RnJlZXplUGFuZXMvPiIpLFEucHVzaCgiPEZyb3plbk5vU3BsaXQvPiIpO3ZhciBnZT1ObyhTWyIhZnJlZXplIl0pO2dlLnI+MCYmKFEucHVzaChIYSgiU3BsaXRIb3Jpem9udGFsIiwiIitnZS5yKSksUS5wdXNoKEhhKCJUb3BSb3dCb3R0b21QYW5lIiwiIitnZS5yKSkp''@;'; put 'put ''LGdlLmM+MCYmKFEucHVzaChIYSgiU3BsaXRWZXJ0aWNhbCIsIiIrZ2UuYykpLFEucHVzaChIYSgiTGVmdENvbHVtblJpZ2h0UGFuZSIsIiIrZ2UuYykpKX1yZXR1cm4gU1siIXByb3RlY3QiXSYmKFEucHVzaChIYSgiUHJvdGVjdENvbnRlbnRzIiwiVHJ1ZSIpKSxTWyIhcHJvdGVjdCJdLm9i''@;'; put 'put ''amVjdHMmJlEucHVzaChIYSgiUHJvdGVjdE9iamVjdHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0uc2NlbmFyaW9zJiZRLnB1c2goSGEoIlByb3RlY3RTY2VuYXJpb3MiLCJUcnVlIikpLG51bGw9PVNbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fFNbIiFwcm90ZWN0Il0uc2VsZWN0''@;'; put 'put ''TG9ja2VkQ2VsbHM/bnVsbCE9U1siIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYhU1siIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiZRLnB1c2goSGEoIkVuYWJsZVNlbGVjdGlvbiIsIlVubG9ja2VkQ2VsbHMiKSk6US5wdXNoKEhhKCJFbmFibGVTZWxlY3Rpb24iLCJO''@;'; put 'put ''b1NlbGVjdGlvbiIpKSxbWyJmb3JtYXRDZWxscyIsIkFsbG93Rm9ybWF0Q2VsbHMiXSxbImZvcm1hdENvbHVtbnMiLCJBbGxvd1NpemVDb2xzIl0sWyJmb3JtYXRSb3dzIiwiQWxsb3dTaXplUm93cyJdLFsiaW5zZXJ0Q29sdW1ucyIsIkFsbG93SW5zZXJ0Q29scyJdLFsiaW5zZXJ0Um93cyIs''@;'; put 'put ''IkFsbG93SW5zZXJ0Um93cyJdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsIkFsbG93SW5zZXJ0SHlwZXJsaW5rcyJdLFsiZGVsZXRlQ29sdW1ucyIsIkFsbG93RGVsZXRlQ29scyJdLFsiZGVsZXRlUm93cyIsIkFsbG93RGVsZXRlUm93cyJdLFsic29ydCIsIkFsbG93U29ydCJdLFsiYXV0b0ZpbHRl''@;'; put 'put ''ciIsIkFsbG93RmlsdGVyIl0sWyJwaXZvdFRhYmxlcyIsIkFsbG93VXNlUGl2b3RUYWJsZXMiXV0uZm9yRWFjaChmdW5jdGlvbihwZSl7U1siIXByb3RlY3QiXVtwZVswXV0mJlEucHVzaCgiPCIrcGVbMV0rIi8+Iil9KSksMD09US5sZW5ndGg/IiI6UHIoIldvcmtzaGVldE9wdGlvbnMiLFEu''@;'; put 'put ''am9pbigiIikse3htbG5zOnlsLnh9KX0ob2UsMCxTLGspKSxHLmpvaW4oIiIpfWZ1bmN0aW9uIENJKFMsUil7Unx8KFI9e30pLFMuU1NGfHwoUy5TU0Y9QS5nZXRfdGFibGUoKSksUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLFIucmV2c3NmPWtlKFMuU1NGKSxSLnJldnNzZltT''@;'; put 'put ''LlNTRls2NTUzNV1dPTAsUi5zc2Y9Uy5TU0YsUy5TdHlsZXM9e0ZvbnRzOlIuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6Ui5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0s''@;'; put 'put ''e3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6Ui5Cb3JkZXJzPVt7fV19LFIuY2VsbFhmcz1bXSxSLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxsMChSLmNlbGxYZnMsbnVsbCx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkpO3ZhciBrPVtdO2sucHVzaChmdW5jdGlvbiBn''@;'; put 'put ''SShTLFIpe3ZhciBrPVtdO3JldHVybiBTLlByb3BzJiZrLnB1c2goZnVuY3Rpb24gWncoUyxSKXt2YXIgaz1bXTtyZXR1cm4gUmUoUDYpLm1hcChmdW5jdGlvbihHKXtmb3IodmFyIFE9MDtRPFIwLmxlbmd0aDsrK1EpaWYoUjBbUV1bMV09PUcpcmV0dXJuIFIwW1FdO2ZvcihRPTA7UTxyaC5s''@;'; put 'put ''ZW5ndGg7KytRKWlmKHJoW1FdWzFdPT1HKXJldHVybiByaFtRXTt0aHJvdyBHfSkuZm9yRWFjaChmdW5jdGlvbihHKXtpZihudWxsIT1TW0dbMV1dKXt2YXIgUT1SJiZSLlByb3BzJiZudWxsIT1SLlByb3BzW0dbMV1dP1IuUHJvcHNbR1sxXV06U1tHWzFdXTsiZGF0ZSI9PT1HWzJdJiYoUT1u''@;'; put 'put ''ZXcgRGF0ZShRKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIloiKSksIm51bWJlciI9PXR5cGVvZiBRP1E9U3RyaW5nKFEpOiEwPT09UXx8ITE9PT1RP1E9UT8iMSI6IjAiOlEgaW5zdGFuY2VvZiBEYXRlJiYoUT1uZXcgRGF0ZShRKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wu''@;'; put 'put ''XGQqWi8sIiIpKSxrLnB1c2goSGEoUDZbR1sxXV18fEdbMV0sUSkpfX0pLFByKCJEb2N1bWVudFByb3BlcnRpZXMiLGsuam9pbigiIikse3htbG5zOnlsLm99KX0oUy5Qcm9wcyxSKSksUy5DdXN0cHJvcHMmJmsucHVzaChmdW5jdGlvbiBINihTLFIpe3ZhciBrPVsiV29ya3NoZWV0cyIsIlNo''@;'; put 'put ''ZWV0TmFtZXMiXSxHPSJDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMiLFE9W107cmV0dXJuIFMmJlJlKFMpLmZvckVhY2goZnVuY3Rpb24ob2Upe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLG9lKSl7Zm9yKHZhciBnZT0wO2dlPFIwLmxlbmd0aDsrK2dlKWlmKG9l''@;'; put 'put ''PT1SMFtnZV1bMV0pcmV0dXJuO2ZvcihnZT0wO2dlPHJoLmxlbmd0aDsrK2dlKWlmKG9lPT1yaFtnZV1bMV0pcmV0dXJuO2ZvcihnZT0wO2dlPGsubGVuZ3RoOysrZ2UpaWYob2U9PWtbZ2VdKXJldHVybjt2YXIgcGU9U1tvZV0seWU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBwZT8oeWU9''@;'; put 'put ''ImZsb2F0IixwZT1TdHJpbmcocGUpKTohMD09PXBlfHwhMT09PXBlPyh5ZT0iYm9vbGVhbiIscGU9cGU/IjEiOiIwIik6cGU9U3RyaW5nKHBlKSxRLnB1c2goUHIocGEob2UpLHBlLHsiZHQ6ZHQiOnllfSkpfX0pLFImJlJlKFIpLmZvckVhY2goZnVuY3Rpb24ob2Upe2lmKE9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLG9lKSYmKCFTfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsb2UpKSl7dmFyIGdlPVJbb2VdLHBlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgZ2U/KHBlPSJmbG9hdCIsZ2U9U3RyaW5nKGdlKSk6ITA9PT1nZXx8''@;'; put 'put ''ITE9PT1nZT8ocGU9ImJvb2xlYW4iLGdlPWdlPyIxIjoiMCIpOmdlIGluc3RhbmNlb2YgRGF0ZT8ocGU9ImRhdGVUaW1lLnR6IixnZT1nZS50b0lTT1N0cmluZygpKTpnZT1TdHJpbmcoZ2UpLFEucHVzaChQcihwYShvZSksZ2UseyJkdDpkdCI6cGV9KSl9fSksIjwiK0crJyB4bWxucz0iJyt5''@;'; put 'put ''bC5vKyciPicrUS5qb2luKCIiKSsiPC8iK0crIj4ifShTLlByb3BzLFMuQ3VzdHByb3BzKSksay5qb2luKCIiKX0oUyxSKSksay5wdXNoKCIiKSxrLnB1c2goIiIpLGsucHVzaCgiIik7Zm9yKHZhciBHPTA7RzxTLlNoZWV0TmFtZXMubGVuZ3RoOysrRylrLnB1c2goUHIoIldvcmtzaGVldCIs''@;'; put 'put ''d0koRyxSLFMpLHsic3M6TmFtZSI6THIoUy5TaGVldE5hbWVzW0ddKX0pKTtyZXR1cm4ga1syXT1mdW5jdGlvbiB2SShTLFIpe3ZhciBHPVtbJzxTdHlsZSBzczpJRD0iRGVmYXVsdCIgc3M6TmFtZT0iTm9ybWFsIj4nLCc8QWxpZ25tZW50IHNzOlZlcnRpY2FsPSJCb3R0b20iLz4nLCI8Qm9y''@;'; put 'put ''ZGVycy8+IiwnPEZvbnQgc3M6Rm9udE5hbWU9IkNhbGlicmkiIHg6RmFtaWx5PSJTd2lzcyIgc3M6U2l6ZT0iMTIiIHNzOkNvbG9yPSIjMDAwMDAwIi8+JywiPEludGVyaW9yLz4iLCI8TnVtYmVyRm9ybWF0Lz4iLCI8UHJvdGVjdGlvbi8+IiwiPC9TdHlsZT4iXS5qb2luKCIiKV07cmV0dXJu''@;'; put 'put ''IFIuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKFEsb2Upe3ZhciBnZT1bXTtpZihRLmFsaWdubWVudCl7dmFyIHBlPXt9O1EuYWxpZ25tZW50LnNocmlua1RvRml0JiYocGVbInNzOlNocmlua1RvRml0Il09IjEiKSxRLmFsaWdubWVudC53cmFwVGV4dCYmKHBlWyJzczpXcmFwVGV4dCJdPSIx''@;'; put 'put ''IiksUS5hbGlnbm1lbnQudmVydGljYWwmJihwZVsic3M6VmVydGljYWwiXT1BdChRLmFsaWdubWVudC52ZXJ0aWNhbCkpLFEuYWxpZ25tZW50Lmhvcml6b250YWwmJihwZVsic3M6SG9yaXpvbnRhbCJdPUF0KFEuYWxpZ25tZW50Lmhvcml6b250YWwpKSxRLmFsaWdubWVudC5pbmRlbnQmJihw''@;'; put 'put ''ZVsic3M6SW5kZW50Il09US5hbGlnbm1lbnQuaW5kZW50KSxRLmFsaWdubWVudC50ZXh0Um90YXRpb24mJihwZVsic3M6Um90YXRlIl09US5hbGlnbm1lbnQudGV4dFJvdGF0aW9uKSxnZS5wdXNoKFByKCJBbGlnbm1lbnQiLG51bGwscGUpKX1lOmlmKG51bGwhPVEuZm9udElkKXt2YXIgeWU9''@;'; put 'put ''Ui5Gb250c1tRLmZvbnRJZF07aWYoIXllKWJyZWFrIGU7dmFyIFBlPXsic3M6Rm9udE5hbWUiOiJDYWxpYnJpIiwic3M6U2l6ZSI6IjEyIn0sTmU9ITE7eWUuYm9sZCYmKE5lPSEwLFBlWyJzczpCb2xkIl09IjEiKSx5ZS5pdGFsaWMmJihOZT0hMCxQZVsic3M6SXRhbGljIl09IjEiKSx5ZS5z''@;'; put 'put ''dHJpa2UmJihOZT0hMCxQZVsic3M6U3RyaWtlVGhyb3VnaCJdPSIxIiksbnVsbCE9eWUudW5kZXJsaW5lJiYoTmU9ITAsUGVbInNzOlVuZGVybGluZSJdPU1iW3llLnVuZGVybGluZV18fCh5ZS51bmRlcmxpbmU/IlNpbmdsZSI6Ik5vbmUiKSksbnVsbCE9eWUuc3omJihOZT0hMCxQZVsic3M6''@;'; put 'put ''U2l6ZSJdPXllLnN6KSxudWxsIT15ZS5uYW1lJiYoTmU9ITAsUGVbInNzOkZvbnROYW1lIl09eWUubmFtZSkseWUuY29sb3ImJm51bGwhPXllLmNvbG9yLnJnYiYmKE5lPSEwLFBlWyJzczpDb2xvciJdPSIjIisoIm51bWJlciI9PXR5cGVvZiB5ZS5jb2xvci5yZ2I/IjAwMDAwMCIreWUuY29s''@;'; put 'put ''b3IucmdiLnRvU3RyaW5nKDE2KTp5ZS5jb2xvci5yZ2IpLnNsaWNlKC02KSksWyJzdWIiLCJzdXBlciJdLmluZGV4T2YoeWUudmFsaWduKT4tMSYmKFBlWyJzczpWZXJ0aWNhbEFsaWduIl09QXQoeWUudmFsaWduKSsic2NyaXB0IiksTmUmJmdlLnB1c2goUHIoIkZvbnQiLG51bGwsUGUpKX1l''@;'; put 'put ''OmlmKFEuZmlsbElkPjApe3ZhciBZZT1SLkZpbGxzW1EuZmlsbElkXTtpZighWWV8fCFZZS5mZ0NvbG9yfHxudWxsPT1ZZS5mZ0NvbG9yLnJnYilicmVhayBlO2dlLnB1c2goUHIoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6dkNbWWUucGF0dGVyblR5cGVdfHwiU29saWQiLCJzczpD''@;'; put 'put ''b2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIFllLmZnQ29sb3IucmdiPyIwMCIrWWUuZmdDb2xvci5yZ2IudG9TdHJpbmcoMTYpOlllLmZnQ29sb3IucmdiKS5zbGljZSgtNil9KSl9Z2UucHVzaChQcigiTnVtYmVyRm9ybWF0IixudWxsLHsic3M6Rm9ybWF0IjpMcihBLl90YWJsZVtRLm51''@;'; put 'put ''bUZtdElkXSl9KSk7dmFyIGV0PXsic3M6SUQiOiJzIisoMjErb2UpfTtRLnN0eWxlJiYoZXRbInNzOk5hbWUiXT1RLnN0eWxlKSxHLnB1c2goUHIoIlN0eWxlIixnZS5qb2luKCIiKSxldCkpfSksUHIoIlN0eWxlcyIsRy5qb2luKCIiKSl9KDAsUiksa1szXT1mdW5jdGlvbiB5SShTKXtpZigh''@;'; put 'put ''KChTfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIFI9Uy5Xb3JrYm9vay5OYW1lcyxrPVtdLEc9MDtHPFIubGVuZ3RoOysrRyl7dmFyIFE9UltHXTtudWxsPT1RLlNoZWV0JiYoUS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxrLnB1c2goYkkoUSkpKX1yZXR1cm4g''@;'; put 'put ''UHIoIk5hbWVzIixrLmpvaW4oIiIpKX0oUyksSWkrUHIoIldvcmtib29rIixrLmpvaW4oIiIpLHt4bWxuczp5bC5zcywieG1sbnM6byI6eWwubywieG1sbnM6eCI6eWwueCwieG1sbnM6c3MiOnlsLnNzLCJ4bWxuczpkdCI6eWwuZHQsInhtbG5zOmh0bWwiOnlsLmh0bWx9KX1mdW5jdGlvbiBT''@;'; put 'put ''SShTLFIsayxHKXt2YXIgUT1rLG9lPVtdLGdlPVIuc2xpY2UoUi5sLFIubCtRKTtpZihHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZnZS5sZW5ndGg+MClzd2l0Y2goUy5uKXtjYXNlIkJPRiI6Y2FzZSJGaWxlUGFzcyI6Y2FzZSJGaWxlTG9jayI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiUlJE''@;'; put 'put ''SW5mbyI6Y2FzZSJSUkRIZWFkIjpjYXNlIlVzckV4Y2wiOmNhc2UiRU9GIjpHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDpnZS5sZW5ndGh9KSwic2tpcCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjR9KSwic2tpcCIpLGdlPUJ1ZmZlci5jb25jYXQo''@;'; put 'put ''W0J1ZmZlci5mcm9tKGdlLnNsaWNlKDAsNCkpLEJ1ZmZlci5mcm9tKEcuZW5jLmluc2l0dShnZS5zbGljZSg0KSkpXSk7YnJlYWs7ZGVmYXVsdDpnZT1HLmVuYy5pbnNpdHUoZ2UpfUFycmF5LmlzQXJyYXkoUikmJiFBcnJheS5pc0FycmF5KGdlKSYmKGdlPUFycmF5LmZyb20oZ2UpKSxvZS5w''@;'; put 'put ''dXNoKGdlKSxSLmwrPVE7Zm9yKHZhciBwZT1LU1tlbyhSLFIubCldLHllPTA7bnVsbCE9cGUmJiJDb250aW51ZSI9PT1wZS5uLnNsaWNlKDAsOCk7KVE9ZW8oUixSLmwrMikseWU9Ui5sKzQsRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmRy5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6NH0pLCJza2lw''@;'; put 'put ''IiksIkNvbnRpbnVlRnJ0Ij09cGUubj95ZSs9NDoiQ29udGludWVGcnQiPT1wZS5uLnNsaWNlKDAsMTEpJiYoeWUrPTEyLEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjh9KSwic2tpcCIpKSxnZT1SLnNsaWNlKHllLFIubCs0K1EpLEcmJkcuZW5jJiZH''@;'; put 'put ''LmVuYy5pbnNpdHUmJmdlLmxlbmd0aD4wJiYoZ2U9Ry5lbmMuaW5zaXR1KGdlKSksb2UucHVzaChnZSksUi5sKz00K1EscGU9S1NbZW8oUixSLmwpXTt2YXIgUGU9aihvZSk7bW4oUGUsMCk7dmFyIE5lPTA7UGUubGVucz1bXTtmb3IodmFyIFllPTA7WWU8b2UubGVuZ3RoOysrWWUpUGUubGVu''@;'; put 'put ''cy5wdXNoKE5lKSxOZSs9b2VbWWVdLmxlbmd0aDtpZihQZS5sZW5ndGg8ayl0aHJvdyJYTFMgUmVjb3JkICIrKFMmJlMubnx8Ij8/IikrIiBUcnVuY2F0ZWQ6ICIrUGUubGVuZ3RoKyIgPCAiK2s7cmV0dXJuIFMuZihQZSxQZS5sZW5ndGgsRyl9ZnVuY3Rpb24gZGgoUyxSLGspe2lmKCJ6IiE9''@;'; put 'put ''PVMudCYmUy5YRil7dmFyIEc9MDt0cnl7Rz1TLnp8fFMuWEYubnVtRm10SWR8fDAsUi5jZWxsTkYmJihTLno9QS5fdGFibGVbR10pfWNhdGNoKG9lKXtpZihSLldURil0aHJvdyBvZX1pZighUnx8ITEhPT1SLmNlbGxUZXh0KXRyeXtTLnc9ImUiPT09Uy50P1Mud3x8TWNbUy52XTowPT09R3x8''@;'; put 'put ''IkdlbmVyYWwiPT1HPyJuIj09PVMudD8oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6QS5mb3JtYXQoRyxTLnYse2RhdGUxOTA0OiEhayxkYXRlTkY6UiYmUi5kYXRlTkZ9KX1jYXRjaChvZSl7aWYoUi5XVEYpdGhy''@;'; put 'put ''b3cgb2V9aWYoUi5jZWxsRGF0ZXMmJkcmJiJuIj09Uy50JiZBLmlzX2RhdGUoQS5fdGFibGVbR118fFN0cmluZyhHKSkpe3ZhciBRPUEucGFyc2VfZGF0ZV9jb2RlKFMudik7USYmKFMudD0iZCIsUy52PW5ldyBEYXRlKFEueSxRLm0tMSxRLmQsUS5ILFEuTSxRLlMsUS51KSl9fX1mdW5jdGlv''@;'; put 'put ''biBSOChTLFIsayl7cmV0dXJue3Y6UyxpeGZlOlIsdDprfX12YXIgTUk9ZnVuY3Rpb24oUyxSLGspe1JbIiFvYmplY3RzIl09U30sRWI9e1NJOiJlMDg1OWZmMmY5NGY2ODEwYWI5MTA4MDAyYjI3YjNkOSIsRFNJOiIwMmQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSIsVURJOiIwNWQ1''@;'; put 'put ''Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSJ9O2Z1bmN0aW9uICRTKFMsUil7dmFyIGssRyxRLG9lO2lmKFJ8fChSPXt9KSxISShSKSxXKCksUi5jb2RlcGFnZSYmTChSLmNvZGVwYWdlKSxTLkZ1bGxQYXRocyl7aWYodmUuZmluZChTLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtrPXZlLmZpbmQoUywiIUNvbXBPYmoiKSxHPXZlLmZpbmQoUywiL1dvcmtib29rIil8fHZlLmZpbmQoUywiL0Jvb2siKX1lbHNle3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjpTPWIoX2UuZGVjb2RlKFMpKTticmVhaztjYXNlImJp''@;'; put 'put ''bmFyeSI6Uz1iKFMpO2JyZWFrO2Nhc2UiYnVmZmVyIjpicmVhaztjYXNlImFycmF5IjpBcnJheS5pc0FycmF5KFMpfHwoUz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChTKSl9bW4oUywwKSxHPXtjb250ZW50OlN9fWlmKGsmJmZ1bmN0aW9uIEdTKFMpe3ZhciBSPXt9LGs9Uy5jb250ZW50''@;'; put 'put ''O2lmKGsubD0yOCxSLkFuc2lVc2VyVHlwZT1rLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLFIuQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBfMChTKXtyZXR1cm4gUHcoUywxKX0oayksay5sZW5ndGgtay5sPD00KXJldHVybiBSO3ZhciBHPWsucmVhZF9zaGlmdCg0KTtpZigwPT1H''@;'; put 'put ''fHxHPjQwfHwoay5sLT00LFIuUmVzZXJ2ZWQxPWsucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksay5sZW5ndGgtay5sPD00KXx8MTkwNzUwNTY1MiE9PShHPWsucmVhZF9zaGlmdCg0KSl8fChSLlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gQTYoUyl7cmV0dXJuIFB3KFMsMil9''@;'; put 'put ''KGspLDA9PShHPWsucmVhZF9zaGlmdCg0KSl8fEc+NDApKXJldHVybiBSO2subC09NCxSLlJlc2VydmVkMj1rLnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KGspLFIuYm9va1Byb3BzJiYhUi5ib29rU2hlZXRzKVE9e307ZWxzZXt2YXIgZ2U9VGU/ImJ1ZmZlciI6ImFycmF5IjtpZihHJiZHLmNv''@;'; put 'put ''bnRlbnQpUT1mdW5jdGlvbiBGeihTLFIpe3ZhciBrPXtvcHRzOnt9fSxHPXt9O251bGwhPWxlJiZudWxsPT1SLmRlbnNlJiYoUi5kZW5zZT1sZSk7dmFyIFllLGN0LGF0LGJ0LE90LEt0LFE9Ui5kZW5zZT9bXTp7fSxvZT17fSxnZT17fSxwZT1udWxsLHllPVtdLFBlPSIiLE5lPXt9LGV0PSIi''@;'; put 'put ''LGp0PXt9LGt0PVtdLFRuPVtdLHJyPVtdLFNuPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LGxyPXt9LFhuPXtGb250czpbXX0sQm49ZnVuY3Rpb24oRGkpe3JldHVybiBEaTw4P3IwW0RpXTpEaTw2NCYmcnJbRGktOF18fHIwW0RpXX0sZnI9ZnVuY3Rpb24o''@;'; put 'put ''RGksY3Mpe3ZhciB4bCxZbz1EaS5YRi5kYXRhO1lvJiYoWW8ucGF0dGVyblR5cGV8fG51bGwhPVlvLmljdkZvcmUpJiZjcyYmY3MuY2VsbFN0eWxlcyYmKERpLnM9e30sRGkucy5wYXR0ZXJuVHlwZT1Zby5wYXR0ZXJuVHlwZSxEaS5YRi5mb250JiZQdChEaS5zLERpLlhGLmZvbnQpLFlvLmZX''@;'; put 'put ''cmFwJiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS53cmFwVGV4dD0hMCksWW8uZlNocmlua1RvRml0JiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS5zaHJpbmtUb0ZpdD0hMCksWW8uaGFsaWduJiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5h''@;'; put 'put ''bGlnbm1lbnQ9e30pKS5ob3Jpem9udGFsPVlvLmhhbGlnbiksWW8udmFsaWduJiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS52ZXJ0aWNhbD1Zby52YWxpZ24pLFlvLmNJbmRlbnQmJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLmluZGVudD1Z''@;'; put 'put ''by5jSW5kZW50KSw2NCE9WW8uaWN2Rm9yZSYmNjUhPVlvLmljdkJhY2smJigoeGw9aGQoQm4oWW8uaWN2Rm9yZSkpKSYmKERpLnMuZmdDb2xvcj17cmdiOnhsfSksKHhsPWhkKEJuKFlvLmljdkJhY2spKSkmJihEaS5zLmJnQ29sb3I9e3JnYjp4bH0pKSxbIkxlZnQiLCJSaWdodCIsIlRvcCIs''@;'; put 'put ''IkJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24oX3Upe1lvWyJkZyIrX3VdJiYoRGkuc1tfdS50b0xvd2VyQ2FzZSgpXT17c3R5bGU6cGRbWW9bImRnIitfdV1dLGNvbG9yOntyZ2I6aGQoQm4oWW9bImljdiIrX3VdKSl9fSl9KSl9LGJyPWZ1bmN0aW9uKERpLGNzLFlvKXtpZighKFppPjF8fFlv''@;'; put 'put ''LnNoZWV0Um93cyYmRGkucj49WW8uc2hlZXRSb3dzKSl7aWYoWW8uY2VsbFN0eWxlcyYmY3MuWEYmJmNzLlhGLmRhdGEmJmZyKGNzLFlvKSxkZWxldGUgY3MuaXhmZSxkZWxldGUgY3MuWEYsWWU9RGksZXQ9cWkoRGkpLCghZ2V8fCFnZS5zfHwhZ2UuZSkmJihnZT17czp7cjowLGM6MH0sZTp7''@;'; put 'put ''cjowLGM6MH19KSxEaS5yPGdlLnMuciYmKGdlLnMucj1EaS5yKSxEaS5jPGdlLnMuYyYmKGdlLnMuYz1EaS5jKSxEaS5yKzE+Z2UuZS5yJiYoZ2UuZS5yPURpLnIrMSksRGkuYysxPmdlLmUuYyYmKGdlLmUuYz1EaS5jKzEpLFlvLmNlbGxGb3JtdWxhJiZjcy5mKWZvcih2YXIgeGw9MDt4bDxr''@;'; put 'put ''dC5sZW5ndGg7Kyt4bClpZighKGt0W3hsXVswXS5zLmM+RGkuY3x8a3RbeGxdWzBdLnMucj5EaS5yfHxrdFt4bF1bMF0uZS5jPERpLmN8fGt0W3hsXVswXS5lLnI8RGkucikpe2NzLkY9cmEoa3RbeGxdWzBdKSwoa3RbeGxdWzBdLnMuYyE9RGkuY3x8a3RbeGxdWzBdLnMuciE9RGkucikmJmRl''@;'; put 'put ''bGV0ZSBjcy5mLGNzLmYmJihjcy5mPSIiK3MwKGt0W3hsXVsxXSxnZSxEaSxGbixlcikpO2JyZWFrfVlvLmRlbnNlPyhRW0RpLnJdfHwoUVtEaS5yXT1bXSksUVtEaS5yXVtEaS5jXT1jcyk6UVtldF09Y3N9fSxlcj17ZW5jOiExLHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6anQsYXJyYXlm''@;'; put 'put ''Omt0LHJydGFiaWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIVImJiEhUi5jZWxsU3R5bGVzLFdURjohIVImJiEhUi53dGZ9O2VyLnBhc3N3b3JkPVIucGFzc3dvcmQ/Ui5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgRmks''@;'; put 'put ''TWk9bnVsbCxuYT1bXSxjYT1bXSxMaT1bXSxrcj1bXSxfcj0hMSxGbj1bXTtGbi5TaGVldE5hbWVzPWVyLnNuYW1lcyxGbi5zaGFyZWRmPWVyLnNoYXJlZGYsRm4uYXJyYXlmPWVyLmFycmF5ZixGbi5uYW1lcz1bXSxGbi5YVEk9W107dmFyIGlhLGpyPSIiLFppPTAseWk9MCxfYT1bXSxzbz1b''@;'; put 'put ''XTtlci5jb2RlcGFnZT0xMjAwLFUoMTIwMCk7Zm9yKHZhciBMbz0hMTtTLmw8Uy5sZW5ndGgtMTspe3ZhciBPYT1TLmwsaG89Uy5yZWFkX3NoaWZ0KDIpO2lmKGVyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2UoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT1obyYmIkVP''@;'; put 'put ''RiI9PT1qcilicmVhazt2YXIgSmE9Uy5sPT09Uy5sZW5ndGg/MDpTLnJlYWRfc2hpZnQoMik7ZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSksImxlbmd0aC0wIik7dmFyIEJpPUtTW2hvXTtpZihCaSYmQmkuZil7aWYoUi5ib29rU2hlZXRzJiYiQm91''@;'; put 'put ''bmRTaGVldDgiPT09anImJiJCb3VuZFNoZWV0OCIhPT1CaS5uKWJyZWFrO2lmKGpyPUJpLm4sMj09PUJpLnJ8fDEyPT1CaS5yKXt2YXIgSXM9Uy5yZWFkX3NoaWZ0KDIpO2lmKEphLT0yLGVyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2UoWzAsMF0pKSwhZXIuZW5j''@;'; put 'put ''JiZJcyE9PWhvJiYoKDI1NSZJcyk8PDh8SXM+PjgpIT09aG8pdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitJcysiIT0iK2hvKTsxMj09QmkuciYmKFMubCs9MTAsSmEtPTEwLGVyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2UoWzAsMCwwLDAsMCwwLDAs''@;'; put 'put ''MCwwLDBdKSkpfXZhciBQbj1TSShCaSxTLEphLGVyKSxXbz1CaS5uO2lmKDA9PVppJiYiQk9GIiE9V28pY29udGludWU7c3dpdGNoKFdvKXtjYXNlIkRhdGUxOTA0IjprLm9wdHMuRGF0ZTE5MDQ9U24uV0JQcm9wcy5kYXRlMTkwND1QbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6ay5vcHRz''@;'; put 'put ''LldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIkZpbGVQYXNzIjppZihlci5lbmN8fChTLmw9MCxaaT0wKSxlci5lbmM9UG4sIVIucGFzc3dvcmQmJm51bGw9PVBuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Qbi52YWxpZCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIVBuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSJXcml0ZUFjY2VzcyI6ZXIubGFzdHVzZXI9UG47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6''@;'; put 'put ''Y2FzZSJUZW1wbGF0ZSI6Y2FzZSJCb29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1QiOmNhc2UiQm9va0V4dCI6Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2FzZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6''@;'; put 'put ''Y2FzZSJQcm90NFJldlBhc3MiOmJyZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciBocj1OdW1iZXIoUG4pO3N3aXRjaChocil7Y2FzZSAyMTAxMDpocj0xMjAwO2JyZWFrO2Nhc2UgMzI3Njg6aHI9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6aHI9MTI1Mn1VKGVyLmNvZGVwYWdlPWhyKSxMbz0hMDticmVh''@;'; put 'put ''aztjYXNlIlJSVGFiSWQiOmVyLnJydGFiaWQ9UG47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0Ijplci53aW5sb2NrZWQ9UG47YnJlYWs7Y2FzZSJSZWZyZXNoQWxsIjpjYXNlIkNhbGNDb3VudCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2UiQ2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1By''@;'; put 'put ''ZWNpc2lvbiI6Y2FzZSJDYWxjU2F2ZVJlY2FsYyI6ay5vcHRzW1dvXT1QbjticmVhaztjYXNlIkNhbGNSZWZNb2RlIjplci5DYWxjUmVmTW9kZT1QbjticmVhaztjYXNlIkZvcmNlRnVsbENhbGN1bGF0aW9uIjprLm9wdHMuRnVsbENhbGM9UG47YnJlYWs7Y2FzZSJXc0Jvb2wiOlBuLmZEaWFs''@;'; put 'put ''b2cmJihRWyIhdHlwZSJdPSJkaWFsb2ciKSxQbi5mQmVsb3d8fCgoUVsiIW91dGxpbmUiXXx8KFFbIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksUG4uZlJpZ2h0fHwoKFFbIiFvdXRsaW5lIl18fChRWyIhb3V0bGluZSJdPXt9KSkubGVmdD0hMCk7YnJlYWs7Y2FzZSJYRiI6UG4uZm9udD1Y''@;'; put 'put ''bi5Gb250c1tQbi5pZm50PDQ/UG4uaWZudDpQbi5pZm50LTFdLFRuLnB1c2goUG4pO2JyZWFrO2Nhc2UiU3VwQm9vayI6Rm4ucHVzaChbUG5dKSxGbltGbi5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UiRXh0ZXJuTmFtZSI6Rm5bRm4ubGVuZ3RoLTFdLnB1c2goUG4pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''TGJsIjppYT17TmFtZTpQbi5OYW1lLFJlZjpzMChQbi5yZ2NlLGdlLG51bGwsRm4sZXIpfSxQbi5pdGFiPjAmJihpYS5TaGVldD1Qbi5pdGFiLTEpLEZuLm5hbWVzLnB1c2goaWEpLEZuWzBdfHwoRm5bMF09W10sRm5bMF0uWFRJPVtdKSxGbltGbi5sZW5ndGgtMV0ucHVzaChQbiksIl94bG5t''@;'; put 'put ''Ll9GaWx0ZXJEYXRhYmFzZSI9PVBuLk5hbWUmJlBuLml0YWI+MCYmUG4ucmdjZSYmUG4ucmdjZVswXSYmUG4ucmdjZVswXVswXSYmIlB0Z0FyZWEzZCI9PVBuLnJnY2VbMF1bMF1bMF0mJihzb1tQbi5pdGFiLTFdPXtyZWY6cmEoUG4ucmdjZVswXVswXVsxXVsyXSl9KTticmVhaztjYXNlIkV4''@;'; put 'put ''dGVybkNvdW50Ijplci5FeHRlcm5Db3VudD1QbjticmVhaztjYXNlIkV4dGVyblNoZWV0IjowPT1Gbi5sZW5ndGgmJihGblswXT1bXSxGblswXS5YVEk9W10pLEZuW0ZuLmxlbmd0aC0xXS5YVEk9Rm5bRm4ubGVuZ3RoLTFdLlhUSS5jb25jYXQoUG4pLEZuLlhUST1Gbi5YVEkuY29uY2F0KFBu''@;'; put 'put ''KTticmVhaztjYXNlIk5hbWVDbXQiOmlmKGVyLmJpZmY8OClicmVhaztudWxsIT1pYSYmKGlhLkNvbW1lbnQ9UG5bMV0pO2JyZWFrO2Nhc2UiUHJvdGVjdCI6UVsiIXByb3RlY3QiXT1QbjticmVhaztjYXNlIlBhc3N3b3JkIjowIT09UG4mJmVyLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dv''@;'; put 'put ''cmQgdmVyaWZpZXI6ICIrUG4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOm9lW1BuLnBvc109UG4sZXIuc25hbWVzLnB1c2goUG4ubmFtZSk7YnJlYWs7Y2FzZSJFT0YiOmlmKFFbIiFncmlkbGluZXMiXT0hTWl8fE1pLmdyaWQsTWk9bnVsbCwtLVppKWJyZWFrO2lmKGdlLmUpe2lmKGdlLmUu''@;'; put 'put ''cj4wJiZnZS5lLmM+MCl7aWYoZ2UuZS5yLS0sZ2UuZS5jLS0sUVsiIXJlZiJdPXJhKGdlKSxSLnNoZWV0Um93cyYmUi5zaGVldFJvd3M8PWdlLmUucil7dmFyIFFsPWdlLmUucjtnZS5lLnI9Ui5zaGVldFJvd3MtMSxRWyIhZnVsbHJlZiJdPVFbIiFyZWYiXSxRWyIhcmVmIl09cmEoZ2UpLGdl''@;'; put 'put ''LmUucj1RbH1nZS5lLnIrKyxnZS5lLmMrK31uYS5sZW5ndGg+MCYmKFFbIiFtZXJnZXMiXT1uYSksY2EubGVuZ3RoPjAmJk1JKGNhLFEsWG4pLExpLmxlbmd0aD4wJiYoUVsiIWNvbHMiXT1MaSksa3IubGVuZ3RoPjAmJihRWyIhcm93cyJdPWtyKSxTbi5TaGVldHMucHVzaChscil9IiI9PT1Q''@;'; put 'put ''ZT9OZT1ROkdbUGVdPVEsUT1SLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9GIjppZig4PT09ZXIuYmlmZiYmKGVyLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W2hvXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W1BuLkJJRkZWZXJdfHw4KSxlci5iaWZmZ3Vl''@;'; put 'put ''c3M9MD09UG4uQklGRlZlciwwPT1Qbi5CSUZGVmVyJiY0MDk2PT1Qbi5kdCYmKGVyLmJpZmY9NSxMbz0hMCxVKGVyLmNvZGVwYWdlPTI4NTkxKSksOD09ZXIuYmlmZiYmMD09UG4uQklGRlZlciYmMTY9PVBuLmR0JiYoZXIuYmlmZj0yKSxaaSsrKWJyZWFrO2lmKFE9Ui5kZW5zZT9bXTp7fSxl''@;'; put 'put ''ci5iaWZmPDgmJiFMbyYmKExvPSEwLFUoZXIuY29kZXBhZ2U9Ui5jb2RlcGFnZXx8MTI1MikpLGVyLmJpZmY8NXx8MD09UG4uQklGRlZlciYmNDA5Nj09UG4uZHQpeyIiPT09UGUmJihQZT0iU2hlZXQxIiksZ2U9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgWWw9e3BvczpTLmwtSmEs''@;'; put 'put ''bmFtZTpQZX07b2VbWWwucG9zXT1ZbCxlci5zbmFtZXMucHVzaChQZSl9ZWxzZSBQZT0ob2VbT2FdfHx7bmFtZToiIn0pLm5hbWU7MzI9PVBuLmR0JiYoUVsiIXR5cGUiXT0iY2hhcnQiKSw2ND09UG4uZHQmJihRWyIhdHlwZSJdPSJtYWNybyIpLG5hPVtdLGNhPVtdLGVyLmFycmF5Zj1rdD1b''@;'; put 'put ''XSxMaT1bXSxrcj1bXSxfcj0hMSxscj17SGlkZGVuOihvZVtPYV18fHtoczowfSkuaHMsbmFtZTpQZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2UiQklGRjJOVU0iOmNhc2UiQklGRjJJTlQiOiJjaGFydCI9PVFbIiF0eXBlIl0mJihSLmRlbnNlPyhRW1BuLnJdfHxbXSlbUG4uY106UVtxaSh7''@;'; put 'put ''YzpQbi5jLHI6UG4ucn0pXSkmJisrUG4uYyxPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdfHx7fSx2OlBuLnZhbCx0OiJuIn0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUik7YnJlYWs7''@;'; put 'put ''Y2FzZSJCb29sRXJyIjpPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHY6UG4udmFsLHQ6UG4udH0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUik7YnJlYWs7Y2FzZSJSSyI6T3Q9e2l4''@;'; put 'put ''ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXSx2OlBuLnJrbnVtLHQ6Im4ifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIEdsPVBuLmM7R2w8PVBu''@;'; put 'put ''LkM7KytHbCl7dmFyIHl1PVBuLnJrcmVjW0dsLVBuLmNdWzBdO090PXtpeGZlOnl1LFhGOlRuW3l1XSx2OlBuLnJrcmVjW0dsLVBuLmNdWzFdLHQ6Im4ifSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOkdsLHI6UG4ucn0sT3Qs''@;'; put 'put ''Uil9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09UG4udmFsKXtwZT1QbjticmVha31pZigoT3Q9UjgoUG4udmFsLFBuLmNlbGwuaXhmZSxQbi50dCkpLlhGPVRuW090Lml4ZmVdLFIuY2VsbEZvcm11bGEpe3ZhciBNbD1Qbi5mb3JtdWxhO2lmKE1sJiZNbFswXSYmTWxbMF1bMF0m''@;'; put 'put ''JiJQdGdFeHAiPT1NbFswXVswXVswXSl7dmFyIGxuPU1sWzBdWzBdWzFdWzBdLEVuPU1sWzBdWzBdWzFdWzFdLFVuPXFpKHtyOmxuLGM6RW59KTtqdFtVbl0/T3QuZj0iIitzMChQbi5mb3JtdWxhLGdlLFBuLmNlbGwsRm4sZXIpOk90LkY9KChSLmRlbnNlPyhRW2xuXXx8W10pW0VuXTpRW1Vu''@;'; put 'put ''XSl8fHt9KS5GfWVsc2UgT3QuZj0iIitzMChQbi5mb3JtdWxhLGdlLFBuLmNlbGwsRm4sZXIpfXlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoUG4uY2VsbCxPdCxSKSxwZT1QbjticmVhaztjYXNlIlN0cmluZyI6aWYoIXBlKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtwZS52YWw9UG4sKE90PVI4KFBuLHBlLmNlbGwuaXhmZSwicyIpKS5YRj1UbltPdC5peGZlXSxSLmNlbGxGb3JtdWxhJiYoT3QuZj0iIitzMChwZS5mb3JtdWxhLGdlLHBlLmNlbGwsRm4sZXIpKSx5aT4wJiYoT3Qu''@;'; put 'put ''ej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHBlLmNlbGwsT3QsUikscGU9bnVsbDticmVhaztjYXNlIkFycmF5IjprdC5wdXNoKFBuKTt2YXIgeGk9cWkoUG5bMF0ucyk7aWYoY3Q9Ui5kZW5zZT8oUVtQblswXS5zLnJdfHxbXSlbUG5bMF0ucy5jXTpR''@;'; put 'put ''W3hpXSxSLmNlbGxGb3JtdWxhJiZjdCl7aWYoIXBlfHwheGl8fCFjdClicmVhaztjdC5mPSIiK3MwKFBuWzFdLGdlLFBuWzBdLEZuLGVyKSxjdC5GPXJhKFBuWzBdKX1icmVhaztjYXNlIlNockZtbGEiOmlmKCFSLmNlbGxGb3JtdWxhKWJyZWFrO2lmKGV0KXtpZighcGUpYnJlYWs7anRbcWko''@;'; put 'put ''cGUuY2VsbCldPVBuWzBdLCgoY3Q9Ui5kZW5zZT8oUVtwZS5jZWxsLnJdfHxbXSlbcGUuY2VsbC5jXTpRW3FpKHBlLmNlbGwpXSl8fHt9KS5mPSIiK3MwKFBuWzBdLGdlLFllLEZuLGVyKX1icmVhaztjYXNlIkxhYmVsU3N0IjpPdD1SOCh5ZVtQbi5pc3N0XS50LFBuLml4ZmUsInMiKSx5ZVtQ''@;'; put 'put ''bi5pc3N0XS5oJiYoT3QuaD15ZVtQbi5pc3N0XS5oKSxPdC5YRj1UbltPdC5peGZlXSx5aT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKSx5ZVtQbi5pc3N0XS5SJiYoT3QuUj15ZVtQbi5pc3N0XS5S''@;'; put 'put ''Lm1hcChmdW5jdGlvbihtYSl7dmFyIERpPXF0KG1hKTtyZXR1cm4gbWEucz09WG4uRm9udHNbMF0mJihEaS5zPU90LnMpLERpfSkpO2JyZWFrO2Nhc2UiQmxhbmsiOlIuc2hlZXRTdHVicyYmKE90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdDoieiJ9LHlpPjAmJihPdC56PV9hW090''@;'; put 'put ''Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpKTticmVhaztjYXNlIk11bEJsYW5rIjppZihSLnNoZWV0U3R1YnMpZm9yKHZhciBvcj1Qbi5jO29yPD1Qbi5DOysrb3Ipe3ZhciBPaT1Qbi5peGZlW29yLVBuLmNdO090PXtpeGZl''@;'; put 'put ''Ok9pLFhGOlRuW09pXSx0OiJ6In0seWk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpvcixyOlBuLnJ9LE90LFIpfWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6KE90PVI4KFBuLnZhbCxQbi5p''@;'; put 'put ''eGZlLCJzIikpLlhGPVRuW090Lml4ZmVdLHlpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PVppJiYoZ2U9UG4pO2JyZWFrO2Nhc2UiU1NUIjooeWU9''@;'; put 'put ''UG4pLmZvckVhY2goZnVuY3Rpb24obWEpe21hLl9SPyhtYS5fUlswXSYmbWEuX1JbMF0uaWR4PjAmJm1hLl9SLnVuc2hpZnQoe2lkeDowLGlmbnQ6MH0pLG1hLlI9bWEuX1IubWFwKGZ1bmN0aW9uKERpLGNzKXtyZXR1cm57dDoicyIsdjptYS50LnNsaWNlKERpLmlkeCwobWEuX1JbY3MrMV18''@;'; put 'put ''fHt9KS5pZHgpLHM6WG4uRm9udHNbRGkuaWZudDw0P0RpLmlmbnQ6RGkuaWZudC0xXX19KSxSLmNlbGxIVE1MJiYobWEuaD1OdShtYS5SKSkpOlIuY2VsbEhUTUwmJihtYS5oPWxhKG1hLnQpKSxkZWxldGUgbWEuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYoND09ZXIuYmlmZil7X2FbeWkr''@;'; put 'put ''K109UG5bMV07Zm9yKHZhciBTcj0wO1NyPHlpKzE2MyYmQS5fdGFibGVbU3JdIT1QblsxXTsrK1NyKTtTcj49MTYzJiZBLmxvYWQoUG5bMV0seWkrMTYzKX1lbHNlIEEubG9hZChQblsxXSxQblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6X2FbeWkrK109UG47Zm9yKHZhciBQaT0wO1Bp''@;'; put 'put ''PHlpKzE2MyYmQS5fdGFibGVbUGldIT1QbjsrK1BpKTtQaT49MTYzJiZBLmxvYWQoUG4seWkrMTYzKTticmVhaztjYXNlIk1lcmdlQ2VsbHMiOm5hPW5hLmNvbmNhdChQbik7YnJlYWs7Y2FzZSJPYmoiOmNhW1BuLmNtb1swXV09ZXIubGFzdG9iaj1QbjticmVhaztjYXNlIlR4TyI6ZXIubGFz''@;'; put 'put ''dG9iai5UeE89UG47YnJlYWs7Y2FzZSJJbURhdGEiOmVyLmxhc3RvYmouSW1EYXRhPVBuO2JyZWFrO2Nhc2UiSExpbmsiOmZvcihidD1QblswXS5zLnI7YnQ8PVBuWzBdLmUucjsrK2J0KWZvcihhdD1QblswXS5zLmM7YXQ8PVBuWzBdLmUuYzsrK2F0KShjdD1SLmRlbnNlPyhRW2J0XXx8W10p''@;'; put 'put ''W2F0XTpRW3FpKHtjOmF0LHI6YnR9KV0pJiYoY3QubD1QblsxXSk7YnJlYWs7Y2FzZSJITGlua1Rvb2x0aXAiOmZvcihidD1QblswXS5zLnI7YnQ8PVBuWzBdLmUucjsrK2J0KWZvcihhdD1QblswXS5zLmM7YXQ8PVBuWzBdLmUuYzsrK2F0KShjdD1SLmRlbnNlPyhRW2J0XXx8W10pW2F0XTpR''@;'; put 'put ''W3FpKHtjOmF0LHI6YnR9KV0pJiZjdC5sJiYoY3QubC5Ub29sdGlwPVBuWzFdKTticmVhaztjYXNlIk5vdGUiOmlmKGVyLmJpZmY8PTUmJmVyLmJpZmY+PTIpYnJlYWs7Y3Q9Ui5kZW5zZT8oUVtQblswXS5yXXx8W10pW1BuWzBdLmNdOlFbcWkoUG5bMF0pXTt2YXIgWmE9Y2FbUG5bMl1dO2N0''@;'; put 'put ''fHwoUi5kZW5zZT8oUVtQblswXS5yXXx8KFFbUG5bMF0ucl09W10pLGN0PVFbUG5bMF0ucl1bUG5bMF0uY109e3Q6InoifSk6Y3Q9UVtxaShQblswXSldPXt0OiJ6In0sZ2UuZS5yPU1hdGgubWF4KGdlLmUucixQblswXS5yKSxnZS5zLnI9TWF0aC5taW4oZ2Uucy5yLFBuWzBdLnIpLGdlLmUu''@;'; put 'put ''Yz1NYXRoLm1heChnZS5lLmMsUG5bMF0uYyksZ2Uucy5jPU1hdGgubWluKGdlLnMuYyxQblswXS5jKSksY3QuY3x8KGN0LmM9W10pLGN0LmMucHVzaCh7YTpQblsxXSx0OlphLlR4Ty50fSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goQmkubil7Y2FzZSJDbHJ0Q2xpZW50IjpjYXNlIkhlYWRlciI6''@;'; put 'put ''Y2FzZSJGb290ZXIiOmNhc2UiSENlbnRlciI6Y2FzZSJWQ2VudGVyIjpjYXNlIlBscyI6Y2FzZSJHQ1ciOmNhc2UiTEhSZWNvcmQiOmNhc2UiREJDZWxsIjpjYXNlIkVudEV4VTIiOmNhc2UiU3hWaWV3IjpjYXNlIlN4dmQiOmNhc2UiU1hWSSI6Y2FzZSJTWFZERXgiOmNhc2UiU3hJdmQiOmNh''@;'; put 'put ''c2UiU1hTdHJpbmciOmNhc2UiU3luYyI6Y2FzZSJBZGRpbiI6Y2FzZSJTWERJIjpjYXNlIlNYTEkiOmNhc2UiU1hFeCI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJGZWF0IjpjYXNlIkZlYXRIZHIiOmNhc2UiRmVhdEhkcjExIjpjYXNlIkZlYXR1cmUxMSI6Y2FzZSJGZWF0dXJlMTIiOmNhc2UiTGlz''@;'; put 'put ''dDEyIjpjYXNlIlJlY2FsY0lkIjpjYXNlIkR4R0NvbCI6Y2FzZSJGYmkiOmNhc2UiRmJpMiI6Y2FzZSJHZWxGcmFtZSI6Y2FzZSJYRkNSQyI6Y2FzZSJTdHlsZSI6Y2FzZSJTdHlsZUV4dCI6Y2FzZSJTY2VuYXJpb1Byb3RlY3QiOmNhc2UiT2JqUHJvdGVjdCI6Y2FzZSJDb25kRm10MTIiOmNh''@;'; put 'put ''c2UiVGFibGUiOmNhc2UiVGFibGVTdHlsZXMiOmNhc2UiVGFibGVTdHlsZSI6Y2FzZSJUYWJsZVN0eWxlRWxlbWVudCI6Y2FzZSJTWFN0cmVhbUlEIjpjYXNlIlNYVlMiOmNhc2UiRENvblJlZiI6Y2FzZSJTWEFkZGwiOmNhc2UiRENvbkJpbiI6Y2FzZSJEQ29uTmFtZSI6Y2FzZSJTWFBJIjpj''@;'; put 'put ''YXNlIlN4Rm9ybWF0IjpjYXNlIlN4U2VsZWN0IjpjYXNlIlN4UnVsZSI6Y2FzZSJTeEZpbHQiOmNhc2UiU3hJdG0iOmNhc2UiU3hEWEYiOmNhc2UiU2Nlbk1hbiI6Y2FzZSJEQ29uIjpjYXNlIkNlbGxXYXRjaCI6Y2FzZSJQcmludFJvd0NvbCI6Y2FzZSJQcmludEdyaWQiOmNhc2UiUHJpbnRT''@;'; put 'put ''aXplIjpjYXNlIlhDVCI6Y2FzZSJDUk4iOmNhc2UiU2NsIjpjYXNlIlNoZWV0RXh0IjpjYXNlIlNoZWV0RXh0T3B0aW9uYWwiOmNhc2UiT2JOb01hY3JvcyI6Y2FzZSJPYlByb2oiOmNhc2UiR1VJRFR5cGVMaWIiOmNhc2UiV09wdCI6Y2FzZSJQaG9uZXRpY0luZm8iOmNhc2UiT2xlT2JqZWN0''@;'; put 'put ''U2l6ZSI6Y2FzZSJEWEYiOmNhc2UiRFhGTiI6Y2FzZSJEWEZOMTIiOmNhc2UiRFhGTjEyTGlzdCI6Y2FzZSJEWEZOMTJOb0NCIjpjYXNlIkR2IjpjYXNlIkRWYWwiOmNhc2UiQlJBSSI6Y2FzZSJTZXJpZXMiOmNhc2UiU2VyaWVzVGV4dCI6Y2FzZSJEQ29ubiI6Y2FzZSJEYk9yUGFyYW1Rcnki''@;'; put 'put ''OmNhc2UiREJRdWVyeUV4dCI6Y2FzZSJPbGVEYkNvbm4iOmNhc2UiRXh0U3RyaW5nIjpjYXNlIklGbXRSZWNvcmQiOmNhc2UiQ29uZEZtdCI6Y2FzZSJDRiI6Y2FzZSJDRjEyIjpjYXNlIkNGRXgiOmNhc2UiRXhjZWw5RmlsZSI6Y2FzZSJVbml0cyI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2Ui''@;'; put 'put ''TW1zIjpjYXNlIkludGVyZmFjZUVuZCI6Y2FzZSJEU0YiOmNhc2UiQnVpbHRJbkZuR3JvdXBDb3VudCI6Y2FzZSJXaW5kb3cxIjpjYXNlIkhpZGVPYmoiOmNhc2UiR3JpZFNldCI6Y2FzZSJHdXRzIjpjYXNlIlVzZXJCVmlldyI6Y2FzZSJVc2VyU1ZpZXdCZWdpbiI6Y2FzZSJVc2VyU1ZpZXdF''@;'; put 'put ''bmQiOmNhc2UiRGVmQ29sV2lkdGgiOmNhc2UiRGVmYXVsdFJvd0hlaWdodCI6YnJlYWs7Y2FzZSJYRkV4dCI6T2soVG5bUG4uaXhmZV0sUG4uZXh0KTticmVhaztjYXNlIkNvbEluZm8iOmlmKCFlci5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7UG4uZT49UG4uczspTGlbUG4uZS0tXT17d2lkdGg6''@;'; put 'put ''UG4udy8yNTYsbGV2ZWw6UG4ubGV2ZWx8fDAsaGlkZGVuOiEhKDEmUG4uZmxhZ3MpfSxfcnx8KF9yPSEwKSxRMChMaVtQbi5lKzFdKTticmVhaztjYXNlIlJvdyI6dmFyIEhpPXt9O251bGwhPVBuLmxldmVsJiYoa3JbUG4ucl09SGksSGkubGV2ZWw9UG4ubGV2ZWwpLFBuLmhpZGRlbiYmKGty''@;'; put 'put ''W1BuLnJdPUhpLEhpLmhpZGRlbj0hMCksUG4uaHB0JiYoa3JbUG4ucl09SGksSGkuaHB0PVBuLmhwdCxIaS5ocHg9c2goUG4uaHB0KSksUG4uaXhmZSYmKGtyW1BuLnJdPUhpLGZyKE90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV18fHt9LHY6MCx0OiJuIn0sUiksSGkucz1PdC5zKTti''@;'; put 'put ''cmVhaztjYXNlIkxlZnRNYXJnaW4iOmNhc2UiUmlnaHRNYXJnaW4iOmNhc2UiVG9wTWFyZ2luIjpjYXNlIkJvdHRvbU1hcmdpbiI6UVsiIW1hcmdpbnMiXXx8WDMoUVsiIW1hcmdpbnMiXT17fSksUVsiIW1hcmdpbnMiXVtXby5zbGljZSgwLC02KS50b0xvd2VyQ2FzZSgpXT1QbjticmVhaztj''@;'; put 'put ''YXNlIlNlbGVjdGlvbiI6UVsiIXNlbCJdPVBuO2JyZWFrO2Nhc2UiU2V0dXAiOlFbIiFtYXJnaW5zIl18fFgzKFFbIiFtYXJnaW5zIl09e30pLFFbIiFtYXJnaW5zIl0uaGVhZGVyPVBuLmhlYWRlcixRWyIhbWFyZ2lucyJdLmZvb3Rlcj1Qbi5mb290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpQ''@;'; put 'put ''bi5SVEwmJihTbi5WaWV3c1swXS5SVEw9ITApLE1pPVBuO2JyZWFrO2Nhc2UiQ291bnRyeSI6S3Q9UG47YnJlYWs7Y2FzZSJGb250IjpQbi5pY3YmJkJuKFBuLmljdikmJihQbi5jb2xvcj17cmdiOmhkKEJuKFBuLmljdikpfSksZGVsZXRlIFBuLmljdiwwPT1Ybi5Gb250cy5sZW5ndGgmJkk0''@;'; put 'put ''KFBuKSxYbi5Gb250cy5wdXNoKFBuKTticmVhaztjYXNlIlBhbGV0dGUiOnJyPVBuO2JyZWFrO2Nhc2UiVGhlbWUiOkZpPVBuO2JyZWFrO2Nhc2UiQ29kZU5hbWUiOlBlP2xyLkNvZGVOYW1lPVBufHxsci5uYW1lOlNuLldCUHJvcHMuQ29kZU5hbWU9UG58fCJUaGlzV29ya2Jvb2siO2JyZWFr''@;'; put 'put ''O2Nhc2UiUGFuZSI6KE1pfHx7fSkuZnJvemVuJiYoUVsiIWZyZWV6ZSJdPXFpKHtyOlBuLnl8fDAsYzpQbi54fHwwfSkpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiRGF0IjpjYXNlIkJlZ2luIjpjYXNlIkVuZCI6Y2FzZSJTdGFydEJsb2NrIjpjYXNlIkVuZEJsb2NrIjpjYXNl''@;'; put 'put ''IkZyYW1lIjpjYXNlIkFyZWEiOmNhc2UiQXhpcyI6Y2FzZSJBeGlzTGluZSI6Y2FzZSJUaWNrIjpjYXNlIkF4ZXNVc2VkIjpjYXNlIkNydExheW91dDEyIjpjYXNlIkNydExheW91dDEyQSI6Y2FzZSJDcnRMaW5rIjpjYXNlIkNydExpbmUiOmNhc2UiQ3J0TWxGcnQiOmNhc2UiQ3J0TWxGcnRD''@;'; put 'put ''b250aW51ZSI6Y2FzZSJMaW5lRm9ybWF0IjpjYXNlIkFyZWFGb3JtYXQiOmNhc2UiQ2hhcnQiOmNhc2UiQ2hhcnQzZCI6Y2FzZSJDaGFydDNEQmFyU2hhcGUiOmNhc2UiQ2hhcnRGb3JtYXQiOmNhc2UiQ2hhcnRGcnRJbmZvIjpjYXNlIlBsb3RBcmVhIjpjYXNlIlBsb3RHcm93dGgiOmNhc2Ui''@;'; put 'put ''U2VyaWVzTGlzdCI6Y2FzZSJTZXJQYXJlbnQiOmNhc2UiU2VyQXV4VHJlbmQiOmNhc2UiRGF0YUZvcm1hdCI6Y2FzZSJTZXJUb0NydCI6Y2FzZSJGb250WCI6Y2FzZSJDYXRTZXJSYW5nZSI6Y2FzZSJBeGNFeHQiOmNhc2UiU2VyRm10IjpjYXNlIlNodFByb3BzIjpjYXNlIkRlZmF1bHRUZXh0''@;'; put 'put ''IjpjYXNlIlRleHQiOmNhc2UiQ2F0TGFiIjpjYXNlIkRhdGFMYWJFeHRDb250ZW50cyI6Y2FzZSJMZWdlbmQiOmNhc2UiTGVnZW5kRXhjZXB0aW9uIjpjYXNlIlBpZSI6Y2FzZSJTY2F0dGVyIjpjYXNlIlBpZUZvcm1hdCI6Y2FzZSJNYXJrZXJGb3JtYXQiOmNhc2UiU3RhcnRPYmplY3QiOmNh''@;'; put 'put ''c2UiRW5kT2JqZWN0IjpjYXNlIkFsUnVucyI6Y2FzZSJPYmplY3RMaW5rIjpjYXNlIlNJSW5kZXgiOmNhc2UiQXR0YWNoZWRMYWJlbCI6Y2FzZSJZTXVsdCI6Y2FzZSJMaW5lIjpjYXNlIkJhciI6Y2FzZSJTdXJmIjpjYXNlIkF4aXNQYXJlbnQiOmNhc2UiUG9zIjpjYXNlIlZhbHVlUmFuZ2Ui''@;'; put 'put ''OmNhc2UiU1hWaWV3RXg5IjpjYXNlIlNYVmlld0xpbmsiOmNhc2UiUGl2b3RDaGFydEJpdHMiOmNhc2UiU0Jhc2VSZWYiOmNhc2UiVGV4dFByb3BzU3RyZWFtIjpjYXNlIkxuRXh0IjpjYXNlIk1rckV4dCI6Y2FzZSJDcnRDb29wdCI6Y2FzZSJRc2kiOmNhc2UiUXNpZiI6Y2FzZSJRc2lyIjpj''@;'; put 'put ''YXNlIlFzaVNYVGFnIjpjYXNlIlR4dFFyeSI6Y2FzZSJGaWx0ZXJNb2RlIjpjYXNlIkF1dG9GaWx0ZXIiOmNhc2UiQXV0b0ZpbHRlckluZm8iOmNhc2UiQXV0b0ZpbHRlcjEyIjpjYXNlIkRyb3BEb3duT2JqSWRzIjpjYXNlIlNvcnQiOmNhc2UiU29ydERhdGEiOmNhc2UiU2hhcGVQcm9wc1N0''@;'; put 'put ''cmVhbSI6Y2FzZSJNc29EcmF3aW5nIjpjYXNlIk1zb0RyYXdpbmdHcm91cCI6Y2FzZSJNc29EcmF3aW5nU2VsZWN0aW9uIjpjYXNlIldlYlB1YiI6Y2FzZSJBdXRvV2ViUHViIjpjYXNlIkhlYWRlckZvb3RlciI6Y2FzZSJIRlBpY3R1cmUiOmNhc2UiUExWIjpjYXNlIkhvcml6b250YWxQYWdl''@;'; put 'put ''QnJlYWtzIjpjYXNlIlZlcnRpY2FsUGFnZUJyZWFrcyI6Y2FzZSJCYWNrdXAiOmNhc2UiQ29tcHJlc3NQaWN0dXJlcyI6Y2FzZSJDb21wYXQxMiI6Y2FzZSJDb250aW51ZSI6Y2FzZSJDb250aW51ZUZydDEyIjpjYXNlIkZydEZvbnRMaXN0IjpjYXNlIkZydFdyYXBwZXIiOmJyZWFrO2RlZmF1''@;'; put 'put ''bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiVGFiSWRDb25mIjpjYXNlIlJhZGFyIjpjYXNlIlJhZGFyQXJlYSI6Y2FzZSJEcm9wQmFyIjpjYXNlIkludGwiOmNhc2UiQ29vcmRMaXN0IjpjYXNlIlNlckF1eEVyckJhciI6Y2FzZSJCSUZGMkZPTlRDTFIiOmNhc2UiQklGRjJGTVRDTlQiOmNhc2UiQklG''@;'; put 'put ''RjJGT05UWFRSQSI6Y2FzZSJCSUZGMlhGIjpjYXNlIkJJRkYzWEYiOmNhc2UiQklGRjRYRiI6Y2FzZSJCSUZGMlhGSU5ERVgiOmNhc2UiQklGRjRGTVRDTlQiOmNhc2UiQklGRjJST1ciOmNhc2UiQklGRjJXSU5ET1cyIjpjYXNlIlNDRU5BUklPIjpjYXNlIkRDb25CaW4iOmNhc2UiUGljRiI6''@;'; put 'put ''Y2FzZSJEYXRhTGFiRXh0IjpjYXNlIkxlbCI6Y2FzZSJCb3BQb3AiOmNhc2UiQm9wUG9wQ3VzdG9tIjpjYXNlIlJlYWxUaW1lRGF0YSI6Y2FzZSJOYW1lIjpjYXNlIkxITkdyYXBoIjpjYXNlIkZuR3JvdXBOYW1lIjpjYXNlIkFkZE1lbnUiOmNhc2UiTFByIjpjYXNlIkxpc3RPYmoiOmNhc2Ui''@;'; put 'put ''TGlzdEZpZWxkIjpjYXNlIlJSU29ydCI6Y2FzZSJCaWdOYW1lIjpjYXNlIlRvb2xiYXJIZHIiOmNhc2UiVG9vbGJhckVuZCI6Y2FzZSJEREVPYmpOYW1lIjpjYXNlIkZSVEFyY2hJZCQiOmJyZWFrO2RlZmF1bHQ6aWYoUi5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIFJlY29yZCAiK0JpLm59fX19''@;'; put 'put ''fWVsc2UgUy5sKz1KYSxlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6SmF9KSl9cmV0dXJuIGsuU2hlZXROYW1lcz1SZShvZSkuc29ydChmdW5jdGlvbihtYSxEaSl7cmV0dXJuIE51bWJlcihtYSktTnVtYmVyKERpKX0pLm1hcChmdW5jdGlvbiht''@;'; put 'put ''YSl7cmV0dXJuIG9lW21hXS5uYW1lfSksUi5ib29rU2hlZXRzfHwoay5TaGVldHM9RyksIWsuU2hlZXROYW1lcy5sZW5ndGgmJk5lWyIhcmVmIl0/KGsuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxrLlNoZWV0cyYmKGsuU2hlZXRzLlNoZWV0MT1OZSkpOmsuUHJlYW1ibGU9TmUsay5TaGVl''@;'; put 'put ''dHMmJnNvLmZvckVhY2goZnVuY3Rpb24obWEsRGkpe2suU2hlZXRzW2suU2hlZXROYW1lc1tEaV1dWyIhYXV0b2ZpbHRlciJdPW1hfSksay5TdHJpbmdzPXllLGsuU1NGPUEuZ2V0X3RhYmxlKCksZXIuZW5jJiYoay5FbmNyeXB0aW9uPWVyLmVuYyksRmkmJihrLlRoZW1lcz1GaSksay5NZXRh''@;'; put 'put ''ZGF0YT17fSx2b2lkIDAhPT1LdCYmKGsuTWV0YWRhdGEuQ291bnRyeT1LdCksRm4ubmFtZXMubGVuZ3RoPjAmJihTbi5OYW1lcz1Gbi5uYW1lcyksay5Xb3JrYm9vaz1TbixrfShHLmNvbnRlbnQsUik7ZWxzZSBpZigob2U9dmUuZmluZChTLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJm9lLmNv''@;'; put 'put ''bnRlbnQpUT1Edi50b193b3JrYm9vayhvZS5jb250ZW50LChSLnR5cGU9Z2UsUikpO2Vsc2V7aWYoIShvZT12ZS5maW5kKFMsIk5hdGl2ZUNvbnRlbnRfTUFJTiIpKXx8IW9lLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtRPUR2LnRvX3dv''@;'; put 'put ''cmtib29rKG9lLmNvbnRlbnQsKFIudHlwZT1nZSxSKSl9Ui5ib29rVkJBJiZTLkZ1bGxQYXRocyYmdmUuZmluZChTLCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihRLnZiYXJhdz1mdW5jdGlvbiBVayhTKXt2YXIgUj12ZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pO3JldHVybiBT''@;'; put 'put ''LkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7aWYoIi8iIT09ay5zbGljZSgtMSkmJmsubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSl7dmFyIFE9ay5yZXBsYWNlKC9eW15cL10qLywiUiIpLnJlcGxhY2UoL1wvX1ZCQV9QUk9KRUNUX0NVUlx1MDAwMCovLCIiKTt2ZS51dGlscy5j''@;'; put 'put ''ZmJfYWRkKFIsUSxTLkZpbGVJbmRleFtHXS5jb250ZW50KX19KSx2ZS53cml0ZShSKX0oUykpfXZhciBwZT17fTtyZXR1cm4gUy5GdWxsUGF0aHMmJmZ1bmN0aW9uIEJuZShTLFIsayl7dmFyIEc9dmUuZmluZChTLCIhRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihHJiZHLnNpemU+''@;'; put 'put ''MCl0cnl7dmFyIFE9ajYoRyxtNCxFYi5EU0kpO2Zvcih2YXIgb2UgaW4gUSlSW29lXT1RW29lXX1jYXRjaChQZSl7aWYoay5XVEYpdGhyb3cgUGV9dmFyIGdlPXZlLmZpbmQoUywiIVN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKGdlJiZnZS5zaXplPjApdHJ5e3ZhciBwZT1qNihnZSxkZyxFYi5T''@;'; put 'put ''SSk7Zm9yKHZhciB5ZSBpbiBwZSludWxsPT1SW3llXSYmKFJbeWVdPXBlW3llXSl9Y2F0Y2goUGUpe2lmKGsuV1RGKXRocm93IFBlfVIuSGVhZGluZ1BhaXJzJiZSLlRpdGxlc09mUGFydHMmJihfNChSLkhlYWRpbmdQYWlycyxSLlRpdGxlc09mUGFydHMsUixrKSxkZWxldGUgUi5IZWFkaW5n''@;'; put 'put ''UGFpcnMsZGVsZXRlIFIuVGl0bGVzT2ZQYXJ0cyl9KFMscGUsUiksUS5Qcm9wcz1RLkN1c3Rwcm9wcz1wZSxSLmJvb2tGaWxlcyYmKFEuY2ZiPVMpLFF9dmFyIEw4PXswOntuOiJCcnRSb3dIZHIiLGY6ZnVuY3Rpb24gVkQoUyxSKXt2YXIgaz17fSxHPVMubCtSO2sucj1TLnJlYWRfc2hpZnQo''@;'; put 'put ''NCksUy5sKz00O3ZhciBRPVMucmVhZF9zaGlmdCgyKTtTLmwrPTE7dmFyIG9lPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sPUcsNyZvZSYmKGsubGV2ZWw9NyZvZSksMTYmb2UmJihrLmhpZGRlbj0hMCksMzImb2UmJihrLmhwdD1RLzIwKSxrfX0sMTp7bjoiQnJ0Q2VsbEJsYW5rIixmOmZ1''@;'; put 'put ''bmN0aW9uIERuZShTKXtyZXR1cm5bRDEoUyldfX0sMjp7bjoiQnJ0Q2VsbFJrIixmOmZ1bmN0aW9uIEhqKFMpe3JldHVybltEMShTKSxJMShTKSwibiJdfX0sMzp7bjoiQnJ0Q2VsbEVycm9yIixmOmZ1bmN0aW9uIFVEKFMpe3JldHVybltEMShTKSxTLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6''@;'; put 'put ''e246IkJydENlbGxCb29sIixmOmZ1bmN0aW9uIERqKFMpe3JldHVybltEMShTKSxTLnJlYWRfc2hpZnQoMSksImIiXX19LDU6e246IkJydENlbGxSZWFsIixmOmZ1bmN0aW9uIEVTKFMpe3JldHVybltEMShTKSxQbChTKSwibiJdfX0sNjp7bjoiQnJ0Q2VsbFN0IixmOmZ1bmN0aW9uIExuZShT''@;'; put 'put ''KXtyZXR1cm5bRDEoUyksZ3UoUyksInN0ciJdfX0sNzp7bjoiQnJ0Q2VsbElzc3QiLGY6ZnVuY3Rpb24gUmooUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0cmluZyIsZjpmdW5jdGlvbiBmYihTLFIsayl7dmFyIEc9Uy5sK1IsUT1EMShTKTtR''@;'; put 'put ''LnI9a1siIXJvdyJdO3ZhciBnZT1bUSxndShTKSwic3RyIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPXMwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sOTp7bjoiQnJ0Rm1sYU51bSIsZjpmdW5jdGlv''@;'; put 'put ''biBBUyhTLFIsayl7dmFyIEc9Uy5sK1IsUT1EMShTKTtRLnI9a1siIXJvdyJdO3ZhciBnZT1bUSxQbChTKSwibiJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1zMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBn''@;'; put 'put ''ZX19LDEwOntuOiJCcnRGbWxhQm9vbCIsZjpmdW5jdGlvbiBUUyhTLFIsayl7dmFyIEc9Uy5sK1IsUT1EMShTKTtRLnI9a1siIXJvdyJdO3ZhciBnZT1bUSxTLnJlYWRfc2hpZnQoMSksImIiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109czAo''@;'; put 'put ''cGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIHc4KFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLFMucmVhZF9zaGlmdCgxKSwiZSJdO2lmKGsuY2VsbEZv''@;'; put 'put ''cm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1zMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDEyOntuOiJCcnRTaG9ydEJsYW5rIixmOmZ1bmN0aW9uIGtqKFMpe3JldHVybltKaChTKV19fSwxMzp7bjoiQnJ0U2hvcnRSayIs''@;'; put 'put ''ZjpmdW5jdGlvbiBSbmUoUyl7cmV0dXJuW0poKFMpLEkxKFMpLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBfOChTKXtyZXR1cm5bSmgoUyksUy5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0aW9uIHpEKFMpe3JldHVybltK''@;'; put 'put ''aChTKSxTLnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntuOiJCcnRTaG9ydFJlYWwiLGY6Rmp9LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIGpqKFMpe3JldHVybltKaChTKSxndShTKSwic3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0aW9uIE9qKFMpe3JldHVybltK''@;'; put 'put ''aChTKSxTLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntuOiJCcnRTU1RJdGVtIixmOnNsfSwyMDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIyOntuOiJCcnRQQ0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwyNDp7bjoiQnJ0UENESVN0cmlu''@;'; put 'put ''ZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwyNjp7bjoiQnJ0UENESUluZGV4In0sMjc6e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5OntuOiJCcnRQQ0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9LDMxOntuOiJCcnRQQ0RJQVN0''@;'; put 'put ''cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1lIn0sMzM6e246IkJydFBDUlJlY29yZCJ9LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2OntuOiJCcnRGUlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJCcnRBQ0VuZCJ9LDM5OntuOiJC''@;'; put 'put ''cnROYW1lIixmOmZ1bmN0aW9uIEE4KFMsUixrKXt2YXIgRz1TLmwrUjtTLmwrPTQsUy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCg0KSxvZT1sZyhTKSxnZT1oRChTLDAsaykscGU9dDAoUyk7Uy5sPUc7dmFyIHllPXtOYW1lOm9lLFB0ZzpnZX07cmV0dXJuIFE8MjY4NDM1NDU1JiYoeWUuU2hl''@;'; put 'put ''ZXQ9USkscGUmJih5ZS5Db21tZW50PXBlKSx5ZX19LDQwOntuOiJCcnRJbmRleFJvd0Jsb2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpmdW5jdGlvbiB6VihTLFIsayl7dmFyIEc9e307Ry5zej1TLnJlYWRfc2hpZnQoMikvMjA7dmFyIFE9T3coUyk7c3dp''@;'; put 'put ''dGNoKFEuZkJvbGQmJihHLmJvbGQ9MSksUS5mSXRhbGljJiYoRy5pdGFsaWM9MSksUS5mVW5kZXJsaW5lJiYoRy51bmRlcmxpbmU9MSksUS5mQ29uZGVuc2UmJihHLmNvbmRlbnNlPTEpLFEuZkV4dGVuZCYmKEcuZXh0ZW5kPTEpLFEuZlNoYWRvdyYmKEcuc2hhZG93PTEpLFEuZk91dGxpbmUm''@;'; put 'put ''JihHLm91dGxpbmU9MSksUS5mU3RyaWtlb3V0JiYoRy5zdHJpa2U9MSksNzAwPT09Uy5yZWFkX3NoaWZ0KDIpJiYoRy5ib2xkPTEpLFMucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOkcudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOkcudmFsaWduPSJzdWIifXZhciBnZT1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MSk7MCE9Z2UmJihHLnVuZGVybGluZT1nZSk7dmFyIHBlPVMucmVhZF9zaGlmdCgxKTtwZT4wJiYoRy5mYW1pbHk9cGUpO3ZhciB5ZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKHllPjAmJihHLmNoYXJzZXQ9eWUpLFMubCsrLEcuY29sb3I9UWgoUyksUy5yZWFkX3NoaWZ0KDEpKXtjYXNlIDE6''@;'; put 'put ''Ry5zY2hlbWU9Im1ham9yIjticmVhaztjYXNlIDI6Ry5zY2hlbWU9Im1pbm9yIn1yZXR1cm4gRy5uYW1lPWd1KFMpLEd9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1bmN0aW9uIFp2KFMsUil7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxndShTKV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiBZ''@;'; put 'put ''VihTLFIpe3ZhciBrPVMubCtSLEc9e30sUT1TLnJlYWRfc2hpZnQoNCk7aWYoNDAhPVEpe0cucGF0dGVyblR5cGU9TUNbUV07dmFyIG9lPVFoKFMpOzY0IT1vZS5pbmRleCYmKEcuZmdDb2xvcj1vZSk7dmFyIGdlPVFoKFMpOzY1IT1nZS5pbmRleCYmKEcuYmdDb2xvcj1nZSl9ZWxzZXtTLmwr''@;'; put 'put ''PTE2LFMucmVhZF9zaGlmdCg0KSxQbChTKSxQbChTKSxQbChTKSxQbChTKSxQbChTKTtmb3IodmFyIHBlPVMucmVhZF9zaGlmdCg0KSx5ZT1bXSxQZT0wO1BlPHBlOysrUGUpeWUucHVzaChaVihTKSl9cmV0dXJuIFMubD1rLEd9fSw0Njp7bjoiQnJ0Qm9yZGVyIixmOmZ1bmN0aW9uIEdWKFMp''@;'; put 'put ''e3ZhciBSPXt9O1MucmVhZF9zaGlmdCgxKTt2YXIgaz1JZyhTKTsibm9uZSIhPWsuc3R5bGUmJihSLnRvcD1rKTt2YXIgRz1JZyhTKTsibm9uZSIhPUcuc3R5bGUmJihSLmJvdHRvbT1HKTt2YXIgUT1JZyhTKTsibm9uZSIhPVEuc3R5bGUmJihSLmxlZnQ9USk7dmFyIG9lPUlnKFMpOyJub25l''@;'; put 'put ''IiE9b2Uuc3R5bGUmJihSLnJpZ2h0PW9lKTt2YXIgZ2U9SWcoUyk7cmV0dXJuIm5vbmUiIT1nZS5zdHlsZSYmKFIuZGlhZz1nZSksUn19LDQ3OntuOiJCcnRYRiIsZjpmdW5jdGlvbiB4QyhTLFIpe3ZhciBrPVMubCtSLEc9e30sUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LGdlPVMucmVhZF9zaGlmdCgyKSxwZT1TLnJlYWRfc2hpZnQoMikseWU9Uy5yZWFkX3NoaWZ0KDIpLFBlPVMucmVhZF9zaGlmdCgxKTtTLnJlYWRfc2hpZnQoMSk7dmFyIE5lPVMucmVhZF9zaGlmdCgyKSxZZT1TLnJlYWRfc2hpZnQoMSk7Uy5sPWssRy54ZklkPVEsRy5udW1GbXRJZD1vZSxH''@;'; put 'put ''LmZvbnRJZD1nZSxHLmZpbGxJZD1wZSxHLmJvcmRlcklkPXllLDEmWWUmJjAhPUcubnVtRm10SWQmJihHLmFwcGx5TnVtYmVyRm9ybWF0PSEwKSxHLmFsaWdubWVudD17fSxQZT4wJiYoRy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPVBlKTt2YXIgZXQ9ITE7cmV0dXJuIDcmTmUmJihldD0hMCxH''@;'; put 'put ''LmFsaWdubWVudC5ob3Jpem9udGFsPURnWzcmTmVdKSxHLmFsaWdubWVudC52ZXJ0aWNhbD10OFtOZT4+PjMmN10sRy5hbGlnbm1lbnQudmVydGljYWwmJihldD0hMCksTmU+Pj42JjEmJihHLmFsaWdubWVudC53cmFwVGV4dD0hMCksTmU+Pj44JjEmJihHLmFsaWdubWVudC5zaHJpbmtUb0Zp''@;'; put 'put ''dD0hMCksZXR8fGRlbGV0ZSBHLmFsaWdubWVudCw0JlllJiZldCYmKEcuYXBwbHlBbGlnbm1lbnQ9ITApLEd9fSw0ODp7bjoiQnJ0U3R5bGUifSw0OTp7bjoiQnJ0Q2VsbE1ldGEifSw1MDp7bjoiQnJ0VmFsdWVNZXRhIn0sNTE6e246IkJydE1kYiJ9LDUyOntuOiJCcnRCZWdpbkZtZCJ9LDUz''@;'; put 'put ''OntuOiJCcnRFbmRGbWQifSw1NDp7bjoiQnJ0QmVnaW5NZHgifSw1NTp7bjoiQnJ0RW5kTWR4In0sNTY6e246IkJydEJlZ2luTWR4VHVwbGUifSw1Nzp7bjoiQnJ0RW5kTWR4VHVwbGUifSw1ODp7bjoiQnJ0TWR4TWJySXN0ciJ9LDU5OntuOiJCcnRTdHIifSw2MDp7bjoiQnJ0Q29sSW5mbyIs''@;'; put 'put ''ZjpyQ30sNjI6e246IkJydENlbGxSU3RyaW5nIn0sNjM6e246IkJydENhbGNDaGFpbkl0ZW0kIixmOmZ1bmN0aW9uIHI4KFMpe3ZhciBSPXt9O1IuaT1TLnJlYWRfc2hpZnQoNCk7dmFyIGs9e307ay5yPVMucmVhZF9zaGlmdCg0KSxrLmM9Uy5yZWFkX3NoaWZ0KDQpLFIucj1xaShrKTt2YXIg''@;'; put 'put ''Rz1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImRyYmKFIubD0iMSIpLDgmRyYmKFIuYT0iMSIpLFJ9fSw2NDp7bjoiQnJ0RFZhbCIsZjpmdW5jdGlvbiBYaihTLFIsayl7dmFyIEc9Uy5sK1IsUT1TLnJlYWRfc2hpZnQoNCksb2U9bjAoUyksZ2U9dDAoUykscGU9dDAoUykseWU9dDAoUyksUGU9''@;'; put 'put ''dDAoUyksTmU9ZEQoUyxSLGspLFllPVMubDxHP2REKFMsUixrKTpudWxsLGV0PTE1JlEsY3Q9e3Q6S0RbZXRdLHNxcmZ4Om9lLHM6W2dlLHBlLHllLFBlXX07cmV0dXJuIE5lJiYoY3QuZjE9TmUpLFllJiYoY3QuZjI9WWUpLDA9PWV0fHwzPT1ldHx8Nz09ZXR8fChjdC5vcD1EU1tRPj4yMCYx''@;'; put 'put ''NV0pLGN0fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9vbCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0sNzA6e246IkJydFN4dmNlbGxOaWwifSwxMjg6e246IkJydEZpbGVW''@;'; put 'put ''ZXJzaW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29rIixmOkluLHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldzVmlld3MifSwxMzQ6e246IkJydEVuZFdzVmlld3MifSwxMzU6e246''@;'; put 'put ''IkJydEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1bmN0aW9uIGtTKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0yOCx7UlRMOjMyJlIsZ3JpZDohISg0JlIpfX19LDEzODp7bjoiQnJ0RW5k''@;'; put 'put ''V3NWaWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2luQ3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVuZGxlU2hzIn0sMTQ0OntuOiJCcnRFbmRCdW5kbGVTaHMifSwxNDU6''@;'; put 'put ''e246IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5jdGlvbiBkYihTLFIpe3ZhciBrPXt9LEc9U1tTLmxdO3JldHVybisrUy5sLGsuYWJvdmU9ISg2NCZHKSxrLmxlZnQ9ISgxMjgmRyksUy5sKz0xOCxrLm5hbWU9''@;'; put 'put ''b2coUyxSLTE5KSxrfX0sMTQ4OntuOiJCcnRXc0RpbSIsZjp4aixwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24gWUQoUyxSKXt2YXIgaz1TLmwrUjtQbChTKSxQbChTKTt2YXIgRz1TLnJlYWRfc2hpZnQoNCwiaSIpLFE9Uy5yZWFkX3NoaWZ0KDQsImkiKTtpZihTLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksUy5yZWFkX3NoaWZ0KDEpLGshPVMubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK2srIiAhPSAiK1MubCk7cmV0dXJuW3FpKHtyOkcsYzpRfSldfX0sMTUyOntuOiJCcnRTZWwiLGY6ZnVuY3Rpb24gR0QoUyxSKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLHtjZWxsOnFp''@;'; put 'put ''KHtyOlMucmVhZF9zaGlmdCg0KSxjOlMucmVhZF9zaGlmdCg0KX0pfX19LDE1Mzp7bjoiQnJ0V2JQcm9wIixmOmZ1bmN0aW9uIE5TKFMsUil7dmFyIGs9e30sRz1TLnJlYWRfc2hpZnQoNCk7ay5kZWZhdWx0VGhlbWVWZXJzaW9uPVMucmVhZF9zaGlmdCg0KTt2YXIgUT1SPjg/Z3UoUyk6IiI7''@;'; put 'put ''cmV0dXJuIFEubGVuZ3RoPjAmJihrLkNvZGVOYW1lPVEpLGsuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmRyksay5iYWNrdXBGaWxlPSEhKDY0JkcpLGsuY2hlY2tDb21wYXRpYmlsaXR5PSEhKDQwOTYmRyksay5kYXRlMTkwND0hISgxJkcpLGsuZmlsdGVyUHJpdmFjeT0hISg4Jkcp''@;'; put 'put ''LGsuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmRyksay5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZHKSxrLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JkcpLGsucmVmcmVzaEFsbENvbm5lY3Rpb25zPSEhKDI2MjE0NCZHKSxrLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JkcpLGsuc2hv''@;'; put 'put ''d0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZHKSxrLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJkcpLGsuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25lIl1bRz4+MTMmM10say5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZHKSxrLnVwZGF0ZUxpbmtzPVsi''@;'; put 'put ''dXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bRz4+OCYzXSxrfX0sMTU0OntuOiJCcnRXYkZhY3RvaWQifSwxNTU6e246IkJydEZpbGVSZWNvdmVyIn0sMTU2OntuOiJCcnRCdW5kbGVTaCIsZjpmdW5jdGlvbiBneihTLFIpe3ZhciBrPXt9O3JldHVybiBrLkhpZGRlbj1TLnJlYWRfc2hpZnQo''@;'; put 'put ''NCksay5pVGFiSUQ9Uy5yZWFkX3NoaWZ0KDQpLGsuc3RyUmVsSUQ9ZzQoUyxSLTgpLGsubmFtZT1ndShTKSxrfX0sMTU3OntuOiJCcnRDYWxjUHJvcCJ9LDE1ODp7bjoiQnJ0Qm9va1ZpZXcifSwxNTk6e246IkJydEJlZ2luU3N0IixmOmZ1bmN0aW9uIFJ2KFMpe3JldHVybltTLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksUy5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7bjoiQnJ0RW5kU3N0In0sMTYxOntuOiJCcnRCZWdpbkFGaWx0ZXIiLGY6bXV9LDE2Mjp7bjoiQnJ0RW5kQUZpbHRlciJ9LDE2Mzp7bjoiQnJ0QmVnaW5GaWx0ZXJDb2x1bW4ifSwxNjQ6e246IkJydEVuZEZpbHRlckNvbHVtbiJ9LDE2NTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5GaWx0ZXJzIn0sMTY2OntuOiJCcnRFbmRGaWx0ZXJzIn0sMTY3OntuOiJCcnRGaWx0ZXIifSwxNjg6e246IkJydENvbG9yRmlsdGVyIn0sMTY5OntuOiJCcnRJY29uRmlsdGVyIn0sMTcwOntuOiJCcnRUb3AxMEZpbHRlciJ9LDE3MTp7bjoiQnJ0RHluYW1pY0ZpbHRlciJ9''@;'; put 'put ''LDE3Mjp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzIn0sMTczOntuOiJCcnRFbmRDdXN0b21GaWx0ZXJzIn0sMTc0OntuOiJCcnRDdXN0b21GaWx0ZXIifSwxNzU6e246IkJydEFGaWx0ZXJEYXRlR3JvdXBJdGVtIn0sMTc2OntuOiJCcnRNZXJnZUNlbGwiLGY6WkR9LDE3Nzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5NZXJnZUNlbGxzIn0sMTc4OntuOiJCcnRFbmRNZXJnZUNlbGxzIn0sMTc5OntuOiJCcnRCZWdpblBpdm90Q2FjaGVEZWYifSwxODA6e246IkJydEVuZFBpdm90Q2FjaGVEZWYifSwxODE6e246IkJydEJlZ2luUENERmllbGRzIn0sMTgyOntuOiJCcnRFbmRQQ0RGaWVsZHMifSwxODM6e246''@;'; put 'put ''IkJydEJlZ2luUENERmllbGQifSwxODQ6e246IkJydEVuZFBDREZpZWxkIn0sMTg1OntuOiJCcnRCZWdpblBDRFNvdXJjZSJ9LDE4Njp7bjoiQnJ0RW5kUENEU291cmNlIn0sMTg3OntuOiJCcnRCZWdpblBDRFNSYW5nZSJ9LDE4ODp7bjoiQnJ0RW5kUENEU1JhbmdlIn0sMTg5OntuOiJCcnRC''@;'; put 'put ''ZWdpblBDREZBdGJsIn0sMTkwOntuOiJCcnRFbmRQQ0RGQXRibCJ9LDE5MTp7bjoiQnJ0QmVnaW5QQ0RJUnVuIn0sMTkyOntuOiJCcnRFbmRQQ0RJUnVuIn0sMTkzOntuOiJCcnRCZWdpblBpdm90Q2FjaGVSZWNvcmRzIn0sMTk0OntuOiJCcnRFbmRQaXZvdENhY2hlUmVjb3JkcyJ9LDE5NTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaGllcyJ9LDE5Njp7bjoiQnJ0RW5kUENESGllcmFyY2hpZXMifSwxOTc6e246IkJydEJlZ2luUENESGllcmFyY2h5In0sMTk4OntuOiJCcnRFbmRQQ0RIaWVyYXJjaHkifSwxOTk6e246IkJydEJlZ2luUENESEZpZWxkc1VzYWdlIn0sMjAwOntuOiJCcnRF''@;'; put 'put ''bmRQQ0RIRmllbGRzVXNhZ2UifSwyMDE6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbiJ9LDIwMjp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbiJ9LDIwMzp7bjoiQnJ0QmVnaW5FQ0RiUHJvcHMifSwyMDQ6e246IkJydEVuZEVDRGJQcm9wcyJ9LDIwNTp7bjoiQnJ0QmVnaW5FQ09sYXBQcm9wcyJ9''@;'; put 'put ''LDIwNjp7bjoiQnJ0RW5kRUNPbGFwUHJvcHMifSwyMDc6e246IkJydEJlZ2luUENEU0NvbnNvbCJ9LDIwODp7bjoiQnJ0RW5kUENEU0NvbnNvbCJ9LDIwOTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2VzIn0sMjEwOntuOiJCcnRFbmRQQ0RTQ1BhZ2VzIn0sMjExOntuOiJCcnRCZWdpblBDRFNDUGFn''@;'; put 'put ''ZSJ9LDIxMjp7bjoiQnJ0RW5kUENEU0NQYWdlIn0sMjEzOntuOiJCcnRCZWdpblBDRFNDUEl0ZW0ifSwyMTQ6e246IkJydEVuZFBDRFNDUEl0ZW0ifSwyMTU6e246IkJydEJlZ2luUENEU0NTZXRzIn0sMjE2OntuOiJCcnRFbmRQQ0RTQ1NldHMifSwyMTc6e246IkJydEJlZ2luUENEU0NTZXQi''@;'; put 'put ''fSwyMTg6e246IkJydEVuZFBDRFNDU2V0In0sMjE5OntuOiJCcnRCZWdpblBDREZHcm91cCJ9LDIyMDp7bjoiQnJ0RW5kUENERkdyb3VwIn0sMjIxOntuOiJCcnRCZWdpblBDREZHSXRlbXMifSwyMjI6e246IkJydEVuZFBDREZHSXRlbXMifSwyMjM6e246IkJydEJlZ2luUENERkdSYW5nZSJ9''@;'; put 'put ''LDIyNDp7bjoiQnJ0RW5kUENERkdSYW5nZSJ9LDIyNTp7bjoiQnJ0QmVnaW5QQ0RGR0Rpc2NyZXRlIn0sMjI2OntuOiJCcnRFbmRQQ0RGR0Rpc2NyZXRlIn0sMjI3OntuOiJCcnRCZWdpblBDRFNEVHVwbGVDYWNoZSJ9LDIyODp7bjoiQnJ0RW5kUENEU0RUdXBsZUNhY2hlIn0sMjI5OntuOiJC''@;'; put 'put ''cnRCZWdpblBDRFNEVENFbnRyaWVzIn0sMjMwOntuOiJCcnRFbmRQQ0RTRFRDRW50cmllcyJ9LDIzMTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnMifSwyMzI6e246IkJydEVuZFBDRFNEVENFTWVtYmVycyJ9LDIzMzp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlciJ9LDIzNDp7bjoiQnJ0''@;'; put 'put ''RW5kUENEU0RUQ0VNZW1iZXIifSwyMzU6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJpZXMifSwyMzY6e246IkJydEVuZFBDRFNEVENRdWVyaWVzIn0sMjM3OntuOiJCcnRCZWdpblBDRFNEVENRdWVyeSJ9LDIzODp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJ5In0sMjM5OntuOiJCcnRCZWdpblBDRFNE''@;'; put 'put ''VENTZXRzIn0sMjQwOntuOiJCcnRFbmRQQ0RTRFRDU2V0cyJ9LDI0MTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0In0sMjQyOntuOiJCcnRFbmRQQ0RTRFRDU2V0In0sMjQzOntuOiJCcnRCZWdpblBDRENhbGNJdGVtcyJ9LDI0NDp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW1zIn0sMjQ1OntuOiJCcnRC''@;'; put 'put ''ZWdpblBDRENhbGNJdGVtIn0sMjQ2OntuOiJCcnRFbmRQQ0RDYWxjSXRlbSJ9LDI0Nzp7bjoiQnJ0QmVnaW5QUnVsZSJ9LDI0ODp7bjoiQnJ0RW5kUFJ1bGUifSwyNDk6e246IkJydEJlZ2luUFJGaWx0ZXJzIn0sMjUwOntuOiJCcnRFbmRQUkZpbHRlcnMifSwyNTE6e246IkJydEJlZ2luUFJG''@;'; put 'put ''aWx0ZXIifSwyNTI6e246IkJydEVuZFBSRmlsdGVyIn0sMjUzOntuOiJCcnRCZWdpblBOYW1lcyJ9LDI1NDp7bjoiQnJ0RW5kUE5hbWVzIn0sMjU1OntuOiJCcnRCZWdpblBOYW1lIn0sMjU2OntuOiJCcnRFbmRQTmFtZSJ9LDI1Nzp7bjoiQnJ0QmVnaW5QTlBhaXJzIn0sMjU4OntuOiJCcnRF''@;'; put 'put ''bmRQTlBhaXJzIn0sMjU5OntuOiJCcnRCZWdpblBOUGFpciJ9LDI2MDp7bjoiQnJ0RW5kUE5QYWlyIn0sMjYxOntuOiJCcnRCZWdpbkVDV2ViUHJvcHMifSwyNjI6e246IkJydEVuZEVDV2ViUHJvcHMifSwyNjM6e246IkJydEJlZ2luRWNXcFRhYmxlcyJ9LDI2NDp7bjoiQnJ0RW5kRUNXUFRh''@;'; put 'put ''YmxlcyJ9LDI2NTp7bjoiQnJ0QmVnaW5FQ1BhcmFtcyJ9LDI2Njp7bjoiQnJ0RW5kRUNQYXJhbXMifSwyNjc6e246IkJydEJlZ2luRUNQYXJhbSJ9LDI2ODp7bjoiQnJ0RW5kRUNQYXJhbSJ9LDI2OTp7bjoiQnJ0QmVnaW5QQ0RLUElzIn0sMjcwOntuOiJCcnRFbmRQQ0RLUElzIn0sMjcxOntu''@;'; put 'put ''OiJCcnRCZWdpblBDREtQSSJ9LDI3Mjp7bjoiQnJ0RW5kUENES1BJIn0sMjczOntuOiJCcnRCZWdpbkRpbXMifSwyNzQ6e246IkJydEVuZERpbXMifSwyNzU6e246IkJydEJlZ2luRGltIn0sMjc2OntuOiJCcnRFbmREaW0ifSwyNzc6e246IkJydEluZGV4UGFydEVuZCJ9LDI3ODp7bjoiQnJ0''@;'; put 'put ''QmVnaW5TdHlsZVNoZWV0In0sMjc5OntuOiJCcnRFbmRTdHlsZVNoZWV0In0sMjgwOntuOiJCcnRCZWdpblNYVmlldyJ9LDI4MTp7bjoiQnJ0RW5kU1hWSSJ9LDI4Mjp7bjoiQnJ0QmVnaW5TWFZJIn0sMjgzOntuOiJCcnRCZWdpblNYVklzIn0sMjg0OntuOiJCcnRFbmRTWFZJcyJ9LDI4NTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5TWFZEIn0sMjg2OntuOiJCcnRFbmRTWFZEIn0sMjg3OntuOiJCcnRCZWdpblNYVkRzIn0sMjg4OntuOiJCcnRFbmRTWFZEcyJ9LDI4OTp7bjoiQnJ0QmVnaW5TWFBJIn0sMjkwOntuOiJCcnRFbmRTWFBJIn0sMjkxOntuOiJCcnRCZWdpblNYUElzIn0sMjkyOntuOiJCcnRF''@;'; put 'put ''bmRTWFBJcyJ9LDI5Mzp7bjoiQnJ0QmVnaW5TWERJIn0sMjk0OntuOiJCcnRFbmRTWERJIn0sMjk1OntuOiJCcnRCZWdpblNYRElzIn0sMjk2OntuOiJCcnRFbmRTWERJcyJ9LDI5Nzp7bjoiQnJ0QmVnaW5TWExJIn0sMjk4OntuOiJCcnRFbmRTWExJIn0sMjk5OntuOiJCcnRCZWdpblNYTElS''@;'; put 'put ''d3MifSwzMDA6e246IkJydEVuZFNYTElSd3MifSwzMDE6e246IkJydEJlZ2luU1hMSUNvbHMifSwzMDI6e246IkJydEVuZFNYTElDb2xzIn0sMzAzOntuOiJCcnRCZWdpblNYRm9ybWF0In0sMzA0OntuOiJCcnRFbmRTWEZvcm1hdCJ9LDMwNTp7bjoiQnJ0QmVnaW5TWEZvcm1hdHMifSwzMDY6''@;'; put 'put ''e246IkJydEVuZFN4Rm9ybWF0cyJ9LDMwNzp7bjoiQnJ0QmVnaW5TeFNlbGVjdCJ9LDMwODp7bjoiQnJ0RW5kU3hTZWxlY3QifSwzMDk6e246IkJydEJlZ2luSVNYVkRSd3MifSwzMTA6e246IkJydEVuZElTWFZEUndzIn0sMzExOntuOiJCcnRCZWdpbklTWFZEQ29scyJ9LDMxMjp7bjoiQnJ0''@;'; put 'put ''RW5kSVNYVkRDb2xzIn0sMzEzOntuOiJCcnRFbmRTWExvY2F0aW9uIn0sMzE0OntuOiJCcnRCZWdpblNYTG9jYXRpb24ifSwzMTU6e246IkJydEVuZFNYVmlldyJ9LDMxNjp7bjoiQnJ0QmVnaW5TWFRIcyJ9LDMxNzp7bjoiQnJ0RW5kU1hUSHMifSwzMTg6e246IkJydEJlZ2luU1hUSCJ9LDMx''@;'; put 'put ''OTp7bjoiQnJ0RW5kU1hUSCJ9LDMyMDp7bjoiQnJ0QmVnaW5JU1hUSFJ3cyJ9LDMyMTp7bjoiQnJ0RW5kSVNYVEhSd3MifSwzMjI6e246IkJydEJlZ2luSVNYVEhDb2xzIn0sMzIzOntuOiJCcnRFbmRJU1hUSENvbHMifSwzMjQ6e246IkJydEJlZ2luU1hURE1QUyJ9LDMyNTp7bjoiQnJ0RW5k''@;'; put 'put ''U1hURE1QcyJ9LDMyNjp7bjoiQnJ0QmVnaW5TWFRETVAifSwzMjc6e246IkJydEVuZFNYVERNUCJ9LDMyODp7bjoiQnJ0QmVnaW5TWFRISXRlbXMifSwzMjk6e246IkJydEVuZFNYVEhJdGVtcyJ9LDMzMDp7bjoiQnJ0QmVnaW5TWFRISXRlbSJ9LDMzMTp7bjoiQnJ0RW5kU1hUSEl0ZW0ifSwz''@;'; put 'put ''MzI6e246IkJydEJlZ2luTWV0YWRhdGEifSwzMzM6e246IkJydEVuZE1ldGFkYXRhIn0sMzM0OntuOiJCcnRCZWdpbkVzbWR0aW5mbyJ9LDMzNTp7bjoiQnJ0TWR0aW5mbyJ9LDMzNjp7bjoiQnJ0RW5kRXNtZHRpbmZvIn0sMzM3OntuOiJCcnRCZWdpbkVzbWRiIn0sMzM4OntuOiJCcnRFbmRF''@;'; put 'put ''c21kYiJ9LDMzOTp7bjoiQnJ0QmVnaW5Fc2ZtZCJ9LDM0MDp7bjoiQnJ0RW5kRXNmbWQifSwzNDE6e246IkJydEJlZ2luU2luZ2xlQ2VsbHMifSwzNDI6e246IkJydEVuZFNpbmdsZUNlbGxzIn0sMzQzOntuOiJCcnRCZWdpbkxpc3QifSwzNDQ6e246IkJydEVuZExpc3QifSwzNDU6e246IkJy''@;'; put 'put ''dEJlZ2luTGlzdENvbHMifSwzNDY6e246IkJydEVuZExpc3RDb2xzIn0sMzQ3OntuOiJCcnRCZWdpbkxpc3RDb2wifSwzNDg6e246IkJydEVuZExpc3RDb2wifSwzNDk6e246IkJydEJlZ2luTGlzdFhtbENQciJ9LDM1MDp7bjoiQnJ0RW5kTGlzdFhtbENQciJ9LDM1MTp7bjoiQnJ0TGlzdEND''@;'; put 'put ''Rm1sYSJ9LDM1Mjp7bjoiQnJ0TGlzdFRyRm1sYSJ9LDM1Mzp7bjoiQnJ0QmVnaW5FeHRlcm5hbHMifSwzNTQ6e246IkJydEVuZEV4dGVybmFscyJ9LDM1NTp7bjoiQnJ0U3VwQm9va1NyYyIsZjpnNH0sMzU3OntuOiJCcnRTdXBTZWxmIn0sMzU4OntuOiJCcnRTdXBTYW1lIn0sMzU5OntuOiJC''@;'; put 'put ''cnRTdXBUYWJzIn0sMzYwOntuOiJCcnRCZWdpblN1cEJvb2sifSwzNjE6e246IkJydFBsYWNlaG9sZGVyTmFtZSJ9LDM2Mjp7bjoiQnJ0RXh0ZXJuU2hlZXQiLGY6RXZ9LDM2Mzp7bjoiQnJ0RXh0ZXJuVGFibGVTdGFydCJ9LDM2NDp7bjoiQnJ0RXh0ZXJuVGFibGVFbmQifSwzNjY6e246IkJy''@;'; put 'put ''dEV4dGVyblJvd0hkciJ9LDM2Nzp7bjoiQnJ0RXh0ZXJuQ2VsbEJsYW5rIn0sMzY4OntuOiJCcnRFeHRlcm5DZWxsUmVhbCJ9LDM2OTp7bjoiQnJ0RXh0ZXJuQ2VsbEJvb2wifSwzNzA6e246IkJydEV4dGVybkNlbGxFcnJvciJ9LDM3MTp7bjoiQnJ0RXh0ZXJuQ2VsbFN0cmluZyJ9LDM3Mjp7''@;'; put 'put ''bjoiQnJ0QmVnaW5Fc21keCJ9LDM3Mzp7bjoiQnJ0RW5kRXNtZHgifSwzNzQ6e246IkJydEJlZ2luTWR4U2V0In0sMzc1OntuOiJCcnRFbmRNZHhTZXQifSwzNzY6e246IkJydEJlZ2luTWR4TWJyUHJvcCJ9LDM3Nzp7bjoiQnJ0RW5kTWR4TWJyUHJvcCJ9LDM3ODp7bjoiQnJ0QmVnaW5NZHhL''@;'; put 'put ''UEkifSwzNzk6e246IkJydEVuZE1keEtQSSJ9LDM4MDp7bjoiQnJ0QmVnaW5Fc3N0ciJ9LDM4MTp7bjoiQnJ0RW5kRXNzdHIifSwzODI6e246IkJydEJlZ2luUFJGSXRlbSJ9LDM4Mzp7bjoiQnJ0RW5kUFJGSXRlbSJ9LDM4NDp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSURzIn0sMzg1OntuOiJC''@;'; put 'put ''cnRFbmRQaXZvdENhY2hlSURzIn0sMzg2OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRCJ9LDM4Nzp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEIn0sMzg4OntuOiJCcnRCZWdpbklTWFZJcyJ9LDM4OTp7bjoiQnJ0RW5kSVNYVklzIn0sMzkwOntuOiJCcnRCZWdpbkNvbEluZm9zIn0sMzkxOntuOiJC''@;'; put 'put ''cnRFbmRDb2xJbmZvcyJ9LDM5Mjp7bjoiQnJ0QmVnaW5Sd0JyayJ9LDM5Mzp7bjoiQnJ0RW5kUndCcmsifSwzOTQ6e246IkJydEJlZ2luQ29sQnJrIn0sMzk1OntuOiJCcnRFbmRDb2xCcmsifSwzOTY6e246IkJydEJyayJ9LDM5Nzp7bjoiQnJ0VXNlckJvb2tWaWV3In0sMzk4OntuOiJCcnRJ''@;'; put 'put ''bmZvIn0sMzk5OntuOiJCcnRDVXNyIn0sNDAwOntuOiJCcnRVc3IifSw0MDE6e246IkJydEJlZ2luVXNlcnMifSw0MDM6e246IkJydEVPRiJ9LDQwNDp7bjoiQnJ0VUNSIn0sNDA1OntuOiJCcnRSUkluc0RlbCJ9LDQwNjp7bjoiQnJ0UlJFbmRJbnNEZWwifSw0MDc6e246IkJydFJSTW92ZSJ9''@;'; put 'put ''LDQwODp7bjoiQnJ0UlJFbmRNb3ZlIn0sNDA5OntuOiJCcnRSUkNoZ0NlbGwifSw0MTA6e246IkJydFJSRW5kQ2hnQ2VsbCJ9LDQxMTp7bjoiQnJ0UlJIZWFkZXIifSw0MTI6e246IkJydFJSVXNlclZpZXcifSw0MTM6e246IkJydFJSUmVuU2hlZXQifSw0MTQ6e246IkJydFJSSW5zZXJ0U2gi''@;'; put 'put ''fSw0MTU6e246IkJydFJSRGVmTmFtZSJ9LDQxNjp7bjoiQnJ0UlJOb3RlIn0sNDE3OntuOiJCcnRSUkNvbmZsaWN0In0sNDE4OntuOiJCcnRSUlRRU0lGIn0sNDE5OntuOiJCcnRSUkZvcm1hdCJ9LDQyMDp7bjoiQnJ0UlJFbmRGb3JtYXQifSw0MjE6e246IkJydFJSQXV0b0ZtdCJ9LDQyMjp7''@;'; put 'put ''bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3cyJ9LDQyMzp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3In0sNDI0OntuOiJCcnRFbmRVc2VyU2hWaWV3In0sNDI1OntuOiJCcnRFbmRVc2VyU2hWaWV3cyJ9LDQyNjp7bjoiQnJ0QXJyRm1sYSIsZjpmdW5jdGlvbiBwYihTLFIsayl7dmFyIEc9Uy5sK1IsUT1s''@;'; put 'put ''ZChTKSxvZT1TLnJlYWRfc2hpZnQoMSksZ2U9W1FdO2lmKGdlWzJdPW9lLGsuY2VsbEZvcm11bGEpe3ZhciBwZT1lUyhTLEctUy5sLGspO2dlWzFdPXBlfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIFlqKFMsUixrKXt2YXIgRz1TLmwrUixv''@;'; put 'put ''ZT1bbXUoUywxNildO2lmKGsuY2VsbEZvcm11bGEpe3ZhciBnZT1KQihTLEctUy5sLGspO29lWzFdPWdlLFMubD1HfWVsc2UgUy5sPUc7cmV0dXJuIG9lfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVj''@;'; put 'put ''dGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVu''@;'; put 'put ''ZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6''@;'; put 'put ''e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdp''@;'; put 'put ''blFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6''@;'; put 'put ''e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9T''@;'; put 'put ''b3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2''@;'; put 'put ''Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZh''@;'; put 'put ''bHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uICRqKFMpe3ZhciBSPXt9O3JldHVybiAkRC5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKGspe1Jba109UGwoUyl9KSxSfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4''@;'; put 'put ''Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBCRChTKXt2YXIgUj17fSxrPXt9LEc9e30sUT1TLnJlYWRfc2hpZnQoNCksb2U9''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDIpO0cud2NoPVE8PTY1NTM2P1EvMjU2Om9lO3ZhciBnZT1TLnJlYWRfc2hpZnQoMik7ay5ocHQ9Z2UvMjA7dmFyIHBlPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZwZSYmKGsuaGlkZGVuPSEwKSw0JnBlJiYoUi50b3B0aGljaz0hMCksOCZwZSYmKFIuYm90dGhpY2s9''@;'; put 'put ''ITApLFIucm93b3V0bGluZT1TLnJlYWRfc2hpZnQoMSksUi5jb2xvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxCdihrKSxSLnJvdz1rLFEwKEcpLFIuY29sPUcsUn19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0ODk6''@;'; put 'put ''e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJlZ2luTWFwIn0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIFVqKFMsUil7dmFyIGs9Uy5sK1IsRz1tdShTLDE2KSxRPXQw''@;'; put 'put ''KFMpLG9lPWd1KFMpLGdlPWd1KFMpLHBlPWd1KFMpO1MubD1rO3ZhciB5ZT17cmZ4OkcscmVsSWQ6USxsb2M6b2UsZGlzcGxheTpwZX07cmV0dXJuIGdlJiYoeWUuVG9vbHRpcD1nZSkseWV9fSw0OTU6e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0RW5kRENvbiJ9LDQ5Nzp7bjoiQnJ0''@;'; put 'put ''QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJydEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9LDUwNDp7bjoiQnJ0U2xjIn0sNTA1''@;'; put 'put ''OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUwOTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMifSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9LDUxMTp7bjoiQnJ0RW5kVGFibGVT''@;'; put 'put ''dHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGllbnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVwcyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVwcyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0sNTE3OntuOiJCcnRFbmRWb2xUeXBl''@;'; put 'put ''In0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJydEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJydEVuZFZvbFRvcGljIn0sNTIyOntuOiJCcnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9sUmVmIn0sNTI0OntuOiJCcnRWb2xO''@;'; put 'put ''dW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29sIn0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFpbiQifSw1Mjk6e246IkJydEVuZENhbGNDaGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0YXRlIn0sNTMxOntuOiJCcnRFbmRT''@;'; put 'put ''b3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0sNTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rpb24ifSw1Mzc6e246IkJydFBob25l''@;'; put 'put ''dGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QifSw1NDE6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVDVHdGbGRJbmZvIn0sNTQ4OntuOiJC''@;'; put 'put ''cnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjpnNH0sNTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0sNTUyOntuOiJCcnRMZWdhY3lEcmF3aW5nSEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVt''@;'; put 'put ''cyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQifSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2MDp7bjoiQnJ0QmVnaW5TWENvbmRG''@;'; put 'put ''bXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5kZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0QmVnaW5NUlVDb2xvcnMifSw1NzA6''@;'; put 'put ''e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZhbHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0sNTc3OntuOiJCcnRTdXBOYW1lU3RhcnQifSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0In0sNTc5OntuOiJCcnRTdXBOYW1l''@;'; put 'put ''VmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoiQnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoiQnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1cE5hbWVGbWxhIn0sNTg2OntuOiJC''@;'; put 'put ''cnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJvcGVydHkifSw1OTA6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRDZWxsU21hcnRUYWcifSw1OTI6e246''@;'; put 'put ''IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoiQnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJCcnRCZWdpblNtYXJ0VGFnVHlwZXMi''@;'; put 'put ''fSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAwOntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6e246IkJydEJlZ2luU1hGSUxURVIifSw2MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntuOiJCcnRCZWdpbkZpbGxzIn0sNjA0''@;'; put 'put ''OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5kQ2VsbFdhdGNoZXMifSw2MDc6e246IkJydENlbGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVnaW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJycyJ9LDYxMDp7bjoiQnJ0Q3Jhc2hS''@;'; put 'put ''ZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJCcnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJydEVuZEJvcmRlcnMifSw2MTU6e246IkJydEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10cyJ9LDYxNzp7bjoiQnJ0QmVnaW5D''@;'; put 'put ''ZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJCcnRCaWdOYW1lIn0sNjI2OntuOiJCcnRCZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0RW5kQ2VsbFN0eWxlWEZzIn0sNjI4''@;'; put 'put ''OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoiQnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6d0J9LDYzMzp7bjoiQnJ0QmVnaW5Db21t''@;'; put 'put ''ZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIsZjpmdW5jdGlvbiBGZyhTKXt2YXIgUj17fTtSLmlhdXRob3I9Uy5yZWFkX3NoaWZ0KDQpO3ZhciBrPW11KFMsMTYpO3JldHVybiBSLnJmeD1rLnMsUi5yZWY9cWkoay5zKSxTLmwr''@;'; put 'put ''PTE2LFJ9fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOkx3fSw2Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0sNjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQxOntuOiJCcnRCZWdpblN4cnVsZXMi''@;'; put 'put ''fSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJCcnRFbmRBY3RpdmVYQ29udHJvbHMifSw2NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5In0sNjQ4OntuOiJCcnRC''@;'; put 'put ''ZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQcm9wIixmOmZ1bmN0aW9uIGR6KFMsUil7cmV0dXJuIFMubCs9MTAse25hbWU6Z3UoUyl9fX0sNjUyOntuOiJCcnRDc1BhZ2VTZXR1''@;'; put 'put ''cCJ9LDY1Mzp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3cyJ9LDY1NDp7bjoiQnJ0RW5kVXNlckNzVmlld3MifSw2NTU6e246IkJydEJlZ2luVXNlckNzVmlldyJ9LDY1Njp7bjoiQnJ0RW5kVXNlckNzVmlldyJ9LDY1Nzp7bjoiQnJ0QmVnaW5QY2RTRkNJRW50cmllcyJ9LDY1ODp7bjoiQnJ0RW5k''@;'; put 'put ''UENEU0ZDSUVudHJpZXMifSw2NTk6e246IkJydFBDRFNGQ0lFbnRyeSJ9LDY2MDp7bjoiQnJ0QmVnaW5MaXN0UGFydHMifSw2NjE6e246IkJydExpc3RQYXJ0In0sNjYyOntuOiJCcnRFbmRMaXN0UGFydHMifSw2NjM6e246IkJydFNoZWV0Q2FsY1Byb3AifSw2NjQ6e246IkJydEJlZ2luRm5H''@;'; put 'put ''cm91cCJ9LDY2NTp7bjoiQnJ0Rm5Hcm91cCJ9LDY2Njp7bjoiQnJ0RW5kRm5Hcm91cCJ9LDY2Nzp7bjoiQnJ0U3VwQWRkaW4ifSw2Njg6e246IkJydFNYVERNUE9yZGVyIn0sNjY5OntuOiJCcnRDc1Byb3RlY3Rpb24ifSw2NzE6e246IkJydEJlZ2luV3NTb3J0TWFwIn0sNjcyOntuOiJCcnRF''@;'; put 'put ''bmRXc1NvcnRNYXAifSw2NzM6e246IkJydEJlZ2luUlJTb3J0In0sNjc0OntuOiJCcnRFbmRSUlNvcnQifSw2NzU6e246IkJydFJSU29ydEl0ZW0ifSw2NzY6e246IkJydEZpbGVTaGFyaW5nSXNvIn0sNjc3OntuOiJCcnRCb29rUHJvdGVjdGlvbklzbyJ9LDY3ODp7bjoiQnJ0U2hlZXRQcm90''@;'; put 'put ''ZWN0aW9uSXNvIn0sNjc5OntuOiJCcnRDc1Byb3RlY3Rpb25Jc28ifSw2ODA6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbyJ9LDY4MTp7bjoiQnJ0RFZhbExpc3QifSwxMDI0OntuOiJCcnRSd0Rlc2NlbnQifSwxMDI1OntuOiJCcnRLbm93bkZvbnRzIn0sMTAyNjp7bjoiQnJ0QmVnaW5TWFR1''@;'; put 'put ''cGxlU2V0In0sMTAyNzp7bjoiQnJ0RW5kU1hUdXBsZVNldCJ9LDEwMjg6e246IkJydEJlZ2luU1hUdXBsZVNldEhlYWRlciJ9LDEwMjk6e246IkJydEVuZFNYVHVwbGVTZXRIZWFkZXIifSwxMDMwOntuOiJCcnRTWFR1cGxlU2V0SGVhZGVySXRlbSJ9LDEwMzE6e246IkJydEJlZ2luU1hUdXBs''@;'; put 'put ''ZVNldERhdGEifSwxMDMyOntuOiJCcnRFbmRTWFR1cGxlU2V0RGF0YSJ9LDEwMzM6e246IkJydEJlZ2luU1hUdXBsZVNldFJvdyJ9LDEwMzQ6e246IkJydEVuZFNYVHVwbGVTZXRSb3cifSwxMDM1OntuOiJCcnRTWFR1cGxlU2V0Um93SXRlbSJ9LDEwMzY6e246IkJydE5hbWVFeHQifSwxMDM3''@;'; put 'put ''OntuOiJCcnRQQ0RIMTQifSwxMDM4OntuOiJCcnRCZWdpblBDRENhbGNNZW0xNCJ9LDEwMzk6e246IkJydEVuZFBDRENhbGNNZW0xNCJ9LDEwNDA6e246IkJydFNYVEgxNCJ9LDEwNDE6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXAifSwxMDQyOntuOiJCcnRFbmRTcGFya2xpbmVHcm91cCJ9''@;'; put 'put ''LDEwNDM6e246IkJydFNwYXJrbGluZSJ9LDEwNDQ6e246IkJydFNYREkxNCJ9LDEwNDU6e246IkJydFdzRm10SW5mb0V4MTQifSwxMDQ2OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0Nzp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ4Ontu''@;'; put 'put ''OiJCcnRCZWdpbkNGUnVsZTE0In0sMTA0OTp7bjoiQnJ0RW5kQ0ZSdWxlMTQifSwxMDUwOntuOiJCcnRDRlZPMTQifSwxMDUxOntuOiJCcnRCZWdpbkRhdGFiYXIxNCJ9LDEwNTI6e246IkJydEJlZ2luSWNvblNldDE0In0sMTA1Mzp7bjoiQnJ0RFZhbDE0IixmOmZ1bmN0aW9uIElTKFMsUixr''@;'; put 'put ''KXt2YXIgRz1mdW5jdGlvbiBkbihTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9e307cmV0dXJuIDEmRyYmKFEucmVmcz1mdW5jdGlvbiBxbihTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W107Ui0tID4wOylrLnB1c2goaWkoUykpO3JldHVybiBrfShTKSksMiZHJiYoUS5z''@;'; put 'put ''cXJlZnM9ZnVuY3Rpb24gSWEoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdO1ItLSA+MDspay5wdXNoKFNvKFMpKTtyZXR1cm4ga30oUykpLDQmRyYmKFEuZm9ybXVsYXM9ZnVuY3Rpb24gZnMoUyxSLGspe2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1bXTtHLS0gPjA7KVEu''@;'; put 'put ''cHVzaChIdShTLDAsaykpO3JldHVybiBRfShTLDAsaykpLDgmRyYmKFEucmVsSUQ9ZnVuY3Rpb24gc3YoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiAwPT09Uj8iIjpTLnJlYWRfc2hpZnQoUiwidXRmMTZsZSIpfShTKSksUX0oUywwLGspLFE9Uy5yZWFkX3NoaWZ0KDQpLG9lPXQw''@;'; put 'put ''KFMpLGdlPXQwKFMpLHBlPXQwKFMpLHllPXQwKFMpLFBlPShHLmZvcm11bGFzfHxbXSlbMF0sTmU9KEcuZm9ybXVsYXN8fFtdKVsxXSxZZT0xNSZRLGV0PXt0OktEW1llXSxzcXJmeDpHLnNxcmVmc1swXSxzOltvZSxnZSxwZSx5ZV19O3JldHVybiBQZSYmKGV0LmYxPVBlKSxOZSYmKGV0LmYy''@;'; put 'put ''PU5lKSwwPT1ZZXx8Mz09WWV8fDc9PVllfHwoZXQub3A9RFNbUT4+MjAmMTVdKSxldH19LDEwNTQ6e246IkJydEJlZ2luRFZhbHMxNCJ9LDEwNTU6e246IkJydENvbG9yMTQifSwxMDU2OntuOiJCcnRCZWdpblNwYXJrbGluZXMifSwxMDU3OntuOiJCcnRFbmRTcGFya2xpbmVzIn0sMTA1ODp7''@;'; put 'put ''bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cHMifSwxMDU5OntuOiJCcnRFbmRTcGFya2xpbmVHcm91cHMifSwxMDYxOntuOiJCcnRTWFZEMTQifSwxMDYyOntuOiJCcnRCZWdpblNYVmlldzE0In0sMTA2Mzp7bjoiQnJ0RW5kU1hWaWV3MTQifSwxMDY0OntuOiJCcnRCZWdpblNYVmlldzE2In0s''@;'; put 'put ''MTA2NTp7bjoiQnJ0RW5kU1hWaWV3MTYifSwxMDY2OntuOiJCcnRCZWdpblBDRDE0In0sMTA2Nzp7bjoiQnJ0RW5kUENEMTQifSwxMDY4OntuOiJCcnRCZWdpbkV4dENvbm4xNCJ9LDEwNjk6e246IkJydEVuZEV4dENvbm4xNCJ9LDEwNzA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRHMifSwx''@;'; put 'put ''MDcxOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEcyJ9LDEwNzI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRCJ9LDEwNzM6e246IkJydEVuZFNsaWNlckNhY2hlSUQifSwxMDc1OntuOiJCcnRCZWdpblNsaWNlckNhY2hlIn0sMTA3Njp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGUifSwxMDc3OntuOiJC''@;'; put 'put ''cnRCZWdpblNsaWNlckNhY2hlRGVmIn0sMTA3ODp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVEZWYifSwxMDc5OntuOiJCcnRCZWdpblNsaWNlcnNFeCJ9LDEwODA6e246IkJydEVuZFNsaWNlcnNFeCJ9LDEwODE6e246IkJydEJlZ2luU2xpY2VyRXgifSwxMDgyOntuOiJCcnRFbmRTbGljZXJFeCJ9''@;'; put 'put ''LDEwODM6e246IkJydEJlZ2luU2xpY2VyIn0sMTA4NDp7bjoiQnJ0RW5kU2xpY2VyIn0sMTA4NTp7bjoiQnJ0U2xpY2VyQ2FjaGVQaXZvdFRhYmxlcyJ9LDEwODY6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODc6e246IkJydEVuZFNsaWNlckNhY2hlT2xhcEltcGwifSwx''@;'; put 'put ''MDg4OntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwODk6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwOTA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkxOntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTI6e246''@;'; put 'put ''IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTM6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDk0OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTU6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTY6e246IkJydFNsaWNlckNhY2hl''@;'; put 'put ''T2xhcEl0ZW0ifSwxMDk3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDEwOTg6e246IkJydFNsaWNlckNhY2hlU2VsZWN0aW9uIn0sMTA5OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTEwMDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU5hdGl2ZSJ9LDEx''@;'; put 'put ''MDE6e246IkJydEVuZFNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMjp7bjoiQnJ0U2xpY2VyQ2FjaGVOYXRpdmVJdGVtIn0sMTEwMzp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uMTQifSwxMTA0OntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28xNCJ9LDExMDU6e246IkJydENlbGxJZ25vcmVFQzE0In0s''@;'; put 'put ''MTExMTp7bjoiQnJ0TGlzdDE0In0sMTExMjp7bjoiQnJ0Q0ZJY29uIn0sMTExMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTU6e246IkJydEJlZ2luU2xpY2VycyJ9LDExMTY6e246''@;'; put 'put ''IkJydEVuZFNsaWNlcnMifSwxMTE3OntuOiJCcnRXYlByb3AxNCJ9LDExMTg6e246IkJydEJlZ2luU1hFZGl0In0sMTExOTp7bjoiQnJ0RW5kU1hFZGl0In0sMTEyMDp7bjoiQnJ0QmVnaW5TWEVkaXRzIn0sMTEyMTp7bjoiQnJ0RW5kU1hFZGl0cyJ9LDExMjI6e246IkJydEJlZ2luU1hDaGFu''@;'; put 'put ''Z2UifSwxMTIzOntuOiJCcnRFbmRTWENoYW5nZSJ9LDExMjQ6e246IkJydEJlZ2luU1hDaGFuZ2VzIn0sMTEyNTp7bjoiQnJ0RW5kU1hDaGFuZ2VzIn0sMTEyNjp7bjoiQnJ0U1hUdXBsZUl0ZW1zIn0sMTEyODp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZSJ9LDExMjk6e246IkJydEVuZFNsaWNl''@;'; put 'put ''clN0eWxlIn0sMTEzMDp7bjoiQnJ0U2xpY2VyU3R5bGVFbGVtZW50In0sMTEzMTp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0RXh0MTQifSwxMTMyOntuOiJCcnRFbmRTdHlsZVNoZWV0RXh0MTQifSwxMTMzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzQ6e246IkJy''@;'; put 'put ''dEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzU6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzY6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM3OntuOiJCcnRCZWdpblBDRENhbGNNZW1FeHQifSwxMTM4OntuOiJCcnRFbmRQQ0RD''@;'; put 'put ''YWxjTWVtRXh0In0sMTEzOTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtc0V4dCJ9LDExNDA6e246IkJydEVuZFBDRENhbGNNZW1zRXh0In0sMTE0MTp7bjoiQnJ0UENERmllbGQxNCJ9LDExNDI6e246IkJydEJlZ2luU2xpY2VyU3R5bGVzIn0sMTE0Mzp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVzIn0s''@;'; put 'put ''MTE0NDp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0NTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDY6e246IkJydENGUnVsZUV4dCJ9LDExNDc6e246IkJydEJlZ2luU1hDb25kRm10MTQifSwxMTQ4OntuOiJCcnRFbmRTWENvbmRGbXQxNCJ9LDExNDk6''@;'; put 'put ''e246IkJydEJlZ2luU1hDb25kRm10czE0In0sMTE1MDp7bjoiQnJ0RW5kU1hDb25kRm10czE0In0sMTE1Mjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZDE0In0sMTE1Mzp7bjoiQnJ0RW5kU29ydENvbmQxNCJ9LDExNTQ6e246IkJydEVuZERWYWxzMTQifSwxMTU1OntuOiJCcnRFbmRJY29uU2V0MTQi''@;'; put 'put ''fSwxMTU2OntuOiJCcnRFbmREYXRhYmFyMTQifSwxMTU3OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUxNCJ9LDExNTg6e246IkJydEVuZENvbG9yU2NhbGUxNCJ9LDExNTk6e246IkJydEJlZ2luU3hydWxlczE0In0sMTE2MDp7bjoiQnJ0RW5kU3hydWxlczE0In0sMTE2MTp7bjoiQnJ0QmVnaW5Q''@;'; put 'put ''UnVsZTE0In0sMTE2Mjp7bjoiQnJ0RW5kUFJ1bGUxNCJ9LDExNjM6e246IkJydEJlZ2luUFJGaWx0ZXJzMTQifSwxMTY0OntuOiJCcnRFbmRQUkZpbHRlcnMxNCJ9LDExNjU6e246IkJydEJlZ2luUFJGaWx0ZXIxNCJ9LDExNjY6e246IkJydEVuZFBSRmlsdGVyMTQifSwxMTY3OntuOiJCcnRC''@;'; put 'put ''ZWdpblBSRkl0ZW0xNCJ9LDExNjg6e246IkJydEVuZFBSRkl0ZW0xNCJ9LDExNjk6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDczE0In0sMTE3MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDczE0In0sMTE3MTp7bjoiQnJ0RHhmMTQifSwxMTcyOntuOiJCcnRCZWdpbkR4RjE0cyJ9LDExNzM6e246''@;'; put 'put ''IkJydEVuZER4ZjE0cyJ9LDExNzc6e246IkJydEZpbHRlcjE0In0sMTE3ODp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzMTQifSwxMTgwOntuOiJCcnRDdXN0b21GaWx0ZXIxNCJ9LDExODE6e246IkJydEljb25GaWx0ZXIxNCJ9LDExODI6e246IkJydFBpdm90Q2FjaGVDb25uZWN0aW9uTmFt''@;'; put 'put ''ZSJ9LDIwNDg6e246IkJydEJlZ2luRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNDk6e246IkJydEVuZERlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDUwOntuOiJCcnREZWNvdXBsZWRQaXZvdENhY2hlSUQifSwyMDUxOntuOiJCcnRCZWdpblBpdm90VGFibGVSZWZzIn0sMjA1Mjp7bjoi''@;'; put 'put ''QnJ0RW5kUGl2b3RUYWJsZVJlZnMifSwyMDUzOntuOiJCcnRQaXZvdFRhYmxlUmVmIn0sMjA1NDp7bjoiQnJ0U2xpY2VyQ2FjaGVCb29rUGl2b3RUYWJsZXMifSwyMDU1OntuOiJCcnRCZWdpblN4dmNlbGxzIn0sMjA1Njp7bjoiQnJ0RW5kU3h2Y2VsbHMifSwyMDU3OntuOiJCcnRCZWdpblN4''@;'; put 'put ''Um93In0sMjA1ODp7bjoiQnJ0RW5kU3hSb3cifSwyMDYwOntuOiJCcnRQY2RDYWxjTWVtMTUifSwyMDY3OntuOiJCcnRRc2kxNSJ9LDIwNjg6e246IkJydEJlZ2luV2ViRXh0ZW5zaW9ucyJ9LDIwNjk6e246IkJydEVuZFdlYkV4dGVuc2lvbnMifSwyMDcwOntuOiJCcnRXZWJFeHRlbnNpb24i''@;'; put 'put ''fSwyMDcxOntuOiJCcnRBYnNQYXRoMTUifSwyMDcyOntuOiJCcnRCZWdpblBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3Mzp7bjoiQnJ0RW5kUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDc1OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSURzIn0sMjA3Njp7bjoiQnJ0VGFibGVTbGljZXJDYWNo''@;'; put 'put ''ZUlEIn0sMjA3Nzp7bjoiQnJ0QmVnaW5UYWJsZVNsaWNlckNhY2hlIn0sMjA3ODp7bjoiQnJ0RW5kVGFibGVTbGljZXJDYWNoZSJ9LDIwNzk6e246IkJydFN4RmlsdGVyMTUifSwyMDgwOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4MTp7bjoiQnJ0RW5kVGlt''@;'; put 'put ''ZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgyOntuOiJCcnRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEIn0sMjA4Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSURzIn0sMjA4NDp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEcyJ9LDIwODU6e246IkJydEJlZ2luVGltZWxpbmVDYWNo''@;'; put 'put ''ZUlEIn0sMjA4Njp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEIn0sMjA4Nzp7bjoiQnJ0QmVnaW5UaW1lbGluZXNFeCJ9LDIwODg6e246IkJydEVuZFRpbWVsaW5lc0V4In0sMjA4OTp7bjoiQnJ0QmVnaW5UaW1lbGluZUV4In0sMjA5MDp7bjoiQnJ0RW5kVGltZWxpbmVFeCJ9LDIwOTE6e246''@;'; put 'put ''IkJydFdvcmtCb29rUHIxNSJ9LDIwOTI6e246IkJydFBDREgxNSJ9LDIwOTM6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZSJ9LDIwOTQ6e246IkJydEVuZFRpbWVsaW5lU3R5bGUifSwyMDk1OntuOiJCcnRUaW1lbGluZVN0eWxlRWxlbWVudCJ9LDIwOTY6e246IkJydEJlZ2luVGltZWxpbmVT''@;'; put 'put ''dHlsZXNoZWV0RXh0MTUifSwyMDk3OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTg6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXMifSwyMDk5OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlcyJ9LDIxMDA6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0s''@;'; put 'put ''MjEwMTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMjp7bjoiQnJ0RHhmMTUifSwyMTAzOntuOiJCcnRCZWdpbkR4ZnMxNSJ9LDIxMDQ6e246ImJydEVuZER4ZnMxNSJ9LDIxMDU6e246IkJydFNsaWNlckNhY2hlSGlkZUl0ZW1zV2l0aE5vRGF0YSJ9LDIxMDY6e246IkJy''@;'; put 'put ''dEJlZ2luSXRlbVVuaXF1ZU5hbWVzIn0sMjEwNzp7bjoiQnJ0RW5kSXRlbVVuaXF1ZU5hbWVzIn0sMjEwODp7bjoiQnJ0SXRlbVVuaXF1ZU5hbWUifSwyMTA5OntuOiJCcnRCZWdpbkV4dENvbm4xNSJ9LDIxMTA6e246IkJydEVuZEV4dENvbm4xNSJ9LDIxMTE6e246IkJydEJlZ2luT2xlZGJQ''@;'; put 'put ''cjE1In0sMjExMjp7bjoiQnJ0RW5kT2xlZGJQcjE1In0sMjExMzp7bjoiQnJ0QmVnaW5EYXRhRmVlZFByMTUifSwyMTE0OntuOiJCcnRFbmREYXRhRmVlZFByMTUifSwyMTE1OntuOiJCcnRUZXh0UHIxNSJ9LDIxMTY6e246IkJydFJhbmdlUHIxNSJ9LDIxMTc6e246IkJydERiQ29tbWFuZDE1''@;'; put 'put ''In0sMjExODp7bjoiQnJ0QmVnaW5EYlRhYmxlczE1In0sMjExOTp7bjoiQnJ0RW5kRGJUYWJsZXMxNSJ9LDIxMjA6e246IkJydERiVGFibGUxNSJ9LDIxMjE6e246IkJydEJlZ2luRGF0YU1vZGVsIn0sMjEyMjp7bjoiQnJ0RW5kRGF0YU1vZGVsIn0sMjEyMzp7bjoiQnJ0QmVnaW5Nb2RlbFRh''@;'; put 'put ''YmxlcyJ9LDIxMjQ6e246IkJydEVuZE1vZGVsVGFibGVzIn0sMjEyNTp7bjoiQnJ0TW9kZWxUYWJsZSJ9LDIxMjY6e246IkJydEJlZ2luTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyNzp7bjoiQnJ0RW5kTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyODp7bjoiQnJ0TW9kZWxSZWxhdGlvbnNoaXAi''@;'; put 'put ''fSwyMTI5OntuOiJCcnRCZWdpbkVDVHh0V2l6MTUifSwyMTMwOntuOiJCcnRFbmRFQ1R4dFdpejE1In0sMjEzMTp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdDE1In0sMjEzMjp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzM6e246IkJydEJlZ2luRUNUV0ZsZEluZm8xNSJ9LDIx''@;'; put 'put ''MzQ6e246IkJydEZpZWxkTGlzdEFjdGl2ZUl0ZW0ifSwyMTM1OntuOiJCcnRQaXZvdENhY2hlSWRWZXJzaW9uIn0sMjEzNjp7bjoiQnJ0U1hESTE1In0sMjEzNzp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZ3MifSwyMTM4OntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZ3MifSwyMTM5''@;'; put 'put ''OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MDp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQxOntuOiJCcnRNb2RlbFRpbWVHcm91cGluZ0NhbGNDb2wifSwzMDcyOntuOiJCcnRVaWQifSwzMDczOntuOiJCcnRSZXZpc2lvblB0ciJ9LDUwOTU6e246IkJydEJl''@;'; put 'put ''Z2luQ2FsY0ZlYXR1cmVzIn0sNTA5Njp7bjoiQnJ0RW5kQ2FsY0ZlYXR1cmVzIn0sNTA5Nzp7bjoiQnJ0Q2FsY0ZlYXR1cmUifSw2NTUzNTp7bjoiIn19LEh6PUllKEw4LCJuIik7SHouQnJ0RlJUQXJjaElEJD0xNjt2YXIgS1M9ezY6e246IkZvcm11bGEiLGY6UUN9LDEwOntuOiJFT0YiLGY6''@;'; put 'put ''cjJ9LDEyOntuOiJDYWxjQ291bnQiLGY6RWN9LDEzOntuOiJDYWxjTW9kZSIsZjpFY30sMTQ6e246IkNhbGNQcmVjaXNpb24iLGY6dW99LDE1OntuOiJDYWxjUmVmTW9kZSIsZjp1b30sMTY6e246IkNhbGNEZWx0YSIsZjpQbH0sMTc6e246IkNhbGNJdGVyIixmOnVvfSwxODp7bjoiUHJvdGVj''@;'; put 'put ''dCIsZjp1b30sMTk6e246IlBhc3N3b3JkIixmOkVjfSwyMDp7bjoiSGVhZGVyIixmOlhBfSwyMTp7bjoiRm9vdGVyIixmOlhBfSwyMzp7bjoiRXh0ZXJuU2hlZXQiLGY6RXZ9LDI0OntuOiJMYmwiLGY6dEN9LDI1OntuOiJXaW5Qcm90ZWN0IixmOnVvfSwyNjp7bjoiVmVydGljYWxQYWdlQnJl''@;'; put 'put ''YWtzIn0sMjc6e246Ikhvcml6b250YWxQYWdlQnJlYWtzIn0sMjg6e246Ik5vdGUiLGY6ZnVuY3Rpb24gSkEoUyxSLGspe3JldHVybiBmdW5jdGlvbiBDbyhTLFIsayl7aWYoIShrLmJpZmY8OCkpe3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKSxvZT1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksZ2U9Uy5yZWFkX3NoaWZ0KDIpLHBlPVgwKFMsMCxrKTtyZXR1cm4gay5iaWZmPDgmJlMucmVhZF9zaGlmdCgxKSxbe3I6RyxjOlF9LHBlLGdlLG9lXX19KFMsMCxrKX19LDI5OntuOiJTZWxlY3Rpb24iLGY6ZnVuY3Rpb24gVGYoUyxSLGspe3JldHVybiBrJiZrLmJpZmY8NT8oUy5s''@;'; put 'put ''Kz1SLHtjZWxsOntyOjAsYzowfX0pOihTLnJlYWRfc2hpZnQoMSkse2NlbGw6cWkoe3I6Uy5yZWFkX3NoaWZ0KDIpLGM6Uy5yZWFkX3NoaWZ0KDIpfSl9KX19LDM0OntuOiJEYXRlMTkwNCIsZjp1b30sMzU6e246IkV4dGVybk5hbWUiLGY6ZUN9LDM4OntuOiJMZWZ0TWFyZ2luIixmOlBsfSwz''@;'; put 'put ''OTp7bjoiUmlnaHRNYXJnaW4iLGY6UGx9LDQwOntuOiJUb3BNYXJnaW4iLGY6UGx9LDQxOntuOiJCb3R0b21NYXJnaW4iLGY6UGx9LDQyOntuOiJQcmludFJvd0NvbCIsZjp1b30sNDM6e246IlByaW50R3JpZCIsZjp1b30sNDc6e246IkZpbGVQYXNzIixmOmZ1bmN0aW9uIGdDKFMsUixrKXtp''@;'; put 'put ''ZihrLmVuYylyZXR1cm4gay5lbmM7dmFyIEc9e1R5cGU6ay5iaWZmPj04P1MucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gRy5UeXBlP2Z1bmN0aW9uIEh2KFMsUixrLEcpe3ZhciBRPUd8fHt9O2lmKFEuSW5mbz1TLnJlYWRfc2hpZnQoMiksUy5sLT0yLDE9PT1RLkluZm8pe2lmKFEuRGF0YT1m''@;'; put 'put ''dW5jdGlvbiB0bmUoUyl7dmFyIFI9e30saz1SLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1QMShTLDQpO2lmKDEhPWsuTWFqb3J8fDEhPWsuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK2suTWFqb3IrIiA6ICIray5NaW5vcjtyZXR1cm4gUi5TYWx0PVMucmVhZF9zaGlm''@;'; put 'put ''dCgxNiksUi5FbmNyeXB0ZWRWZXJpZmllcj1TLnJlYWRfc2hpZnQoMTYpLFIuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPVMucmVhZF9zaGlmdCgxNiksUn0oUyksay5wYXNzd29yZCYmdHlwZW9mIEc0PCJ1Iil7dmFyIG9lPUc0KGsucGFzc3dvcmQsUS5EYXRhLlNhbHQsIjAwMDAwMDAwIiksZ2U9''@;'; put 'put ''U2UoUS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVyK1EuRGF0YS5FbmNyeXB0ZWRWZXJpZmllckhhc2gsImhleCIpLHBlPVhsLnJjNChTZShvZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpLGdlKTtHLnZhbGlkPVhsLm1kNShwZS5zbGljZSgwLDE2KSk9PUJ1ZmZlci5mcm9tKHBlLnNsaWNlKDE2''@;'; put 'put ''KSkudG9TdHJpbmcoImhleCIpLFEuRGF0YS5LZXk9b2UsRy5pbnNpdHU9ZnVuY3Rpb24gcXooUyxSKXt2YXIgaz1uZXcgQXJyYXkoMjU2KSxHPTAsUT0wLG9lPTAsZ2U9MDtmdW5jdGlvbiBwZShldCl7Zm9yKEc9MCxRPTAsb2U9MCxnZT0wLFE9MDsyNTYhPVE7KytRKWtbUV09UTtmb3Iob2U9''@;'; put 'put ''MCxRPTA7MjU2IT1ROysrUSl7dHJ5e29lPW9lK2tbUV0rZXRbUSVldC5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1fWNhdGNoKGN0KXt0aHJvdyBjb25zb2xlLmxvZyhRLGV0W1ElZXQubGVuZ3RoXSksY3R9Z2U9a1tRXSxrW1FdPWtbb2VdLGtbb2VdPWdlfVE9b2U9MH1mdW5jdGlvbiB5ZShl''@;'; put 'put ''dCl7dmFyIGN0PVYoZXQubGVuZ3RoKTtmb3IoRz0wO0chPWV0Lmxlbmd0aDsrK0cpZ2U9a1tRPVErMSYyNTVdLGtbUV09a1tvZT0ob2Ura1tRXSklMjU2XSxrW29lXT1nZSxjdFtHXT1ldFtHXV5rW2tbUV0ra1tvZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oY3QpfXZhciBQZT1TLktleSxO''@;'; put 'put ''ZT0wO3BlKFNlKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBZZT0wO3JldHVybiBmdW5jdGlvbihldCl7aWYoWWUrZXQubGVuZ3RoPDEwMjQpcmV0dXJuIFllKz1ldC5sZW5ndGgseWUoZXQpO3ZhciBhdD0wLGJ0PVNlKGV0LnNsaWNlKGF0LGF0KyhFdD0xMDI0LVllKSkpO2F0''@;'; put 'put ''Kz1FdCxZZT0wO3ZhciBqdD15ZShidCk7Zm9yKGF0PT1ldC5sZW5ndGgmJigrK05lLFBlPUc0KFIsUy5TYWx0LEY4KE5lKSkscGUoU2UoUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2F0PGV0Lmxlbmd0aDspeysrTmUsUGU9RzQoUixTLlNhbHQsRjgoTmUpKSxwZShCdWZmZXIuZnJv''@;'; put 'put ''bShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgRXQ9TWF0aC5taW4oMTAyNCxldC5sZW5ndGgtYXQpO2J0PVNlKGV0LnNsaWNlKGF0LGF0K0V0KSksYXQrPUV0LFllPUV0LGp0PUJ1ZmZlci5jb25jYXQoW2p0LHllKGJ0KV0pfXJldHVybiBqdH19KFEuRGF0YSxrLnBhc3N3b3Jk''@;'; put 'put ''KX19ZWxzZSBpZihRLkRhdGE9ZnVuY3Rpb24gUHYoUyxSKXt2YXIgaz17fSxHPWsuRW5jcnlwdGlvblZlcnNpb25JbmZvPVAxKFMsNCk7aWYoUi09NCwyIT1HLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIitHLk1pbm9yKTtpZihHLk1h''@;'; put 'put ''am9yPjR8fEcuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrRy5NYWpvcik7ay5GbGFncz1TLnJlYWRfc2hpZnQoNCksUi09NDt2YXIgUT1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIFItPTQsay5FbmNyeXB0aW9uSGVhZGVyPUlWKFMs''@;'; put 'put ''USksay5FbmNyeXB0aW9uVmVyaWZpZXI9T3YoUyxSLT1RKSxrfShTLFIpLFEuRGF0YSYmUS5EYXRhLkVuY3J5cHRpb25IZWFkZXImJjI2NjI1PT09US5EYXRhLkVuY3J5cHRpb25IZWFkZXIuQWxnSUQmJmsucGFzc3dvcmQmJnR5cGVvZiAkNDwidSIpe3ZhciB5ZT0kNChrLnBhc3N3b3JkLFEu''@;'; put 'put ''RGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdC50b1N0cmluZygiaGV4IiksIjAwMDAwMDAwIiksUGU9US5EYXRhLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7NT09UGV8fFBlPHllLmxlbmd0aCYmKHllPXllLnNsaWNlKDAsUGUpKTt2YXIgTmU9U2UoUS5EYXRhLkVuY3J5cHRpb25W''@;'; put 'put ''ZXJpZmllci5WZXJpZmllci50b1N0cmluZygiaGV4IikrUS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmllckhhc2gudG9TdHJpbmcoImhleCIpLCJoZXgiKSxZZT1YbC5yYzQoeWUudG9TdHJpbmcoImJpbmFyeSIpLE5lKTtHLnZhbGlkPW1jKFllLnNsaWNlKDAsUGUpLCJTSEExIiku''@;'; put 'put ''dG9TdHJpbmcoImhleCIpPT1ZZS5zbGljZShQZSkudG9TdHJpbmcoImhleCIpLFEuRGF0YS5LZXk9eWUsRy52YWxpZCYmKEcuaW5zaXR1PWZ1bmN0aW9uIHRyZShTLFIpe3ZhciBrPW5ldyBBcnJheSgyNTYpLEc9MCxRPTAsb2U9MCxnZT0wLHBlPVMuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXpl''@;'; put 'put ''Pj4+MztmdW5jdGlvbiB5ZShjdCl7Zm9yKGN0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKDAscGUpKSxHPTAsUT0wLG9lPTAsZ2U9MCxRPTA7MjU2IT1ROysrUSlrW1FdPVE7Zm9yKG9lPTAsUT0wOzI1NiE9UTsrK1Epe3ZhciBFdD1jdFtRJWN0Lmxlbmd0aF07b2U9b2Ura1tRXSsoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBFdD9FdC5jaGFyQ29kZUF0KDApOkV0KSYyNTUsZ2U9a1tRXSxrW1FdPWtbb2VdLGtbb2VdPWdlfVE9b2U9MH1mdW5jdGlvbiBQZShjdCl7dmFyIEV0PVYoY3QubGVuZ3RoKTtmb3IoRz0wO0chPWN0Lmxlbmd0aDsrK0cpZ2U9a1tRPVErMSYyNTVdLGtbUV09a1tvZT0ob2Ura1tR''@;'; put 'put ''XSklMjU2XSxrW29lXT1nZSxFdFtHXT1jdFtHXV5rW2tbUV0ra1tvZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oRXQpfXZhciBOZT1TLktleSxZZT0wO3llKFNlKE5lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBldD0wO3JldHVybiBmdW5jdGlvbihjdCl7aWYoZXQrY3QubGVu''@;'; put 'put ''Z3RoPDEwMjQpcmV0dXJuIGV0Kz1jdC5sZW5ndGgsUGUoY3QpO3ZhciBhdD0xMDI0LWV0LGJ0PTAsanQ9QnVmZmVyLmZyb20oY3Quc2xpY2UoYnQsYnQrYXQpKTtidCs9YXQsZXQ9MDt2YXIga3Q9UGUoanQpO2ZvcihidD09Y3QubGVuZ3RoJiYoKytZZSxOZT0kNChSLFMuRW5jcnlwdGlvblZl''@;'; put 'put ''cmlmaWVyLlNhbHQsRjgoWWUpKSx5ZShCdWZmZXIuZnJvbShOZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7YnQ8Y3QubGVuZ3RoOykrK1llLE5lPSQ0KFIsUy5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxGOChZZSkpLHllKEJ1ZmZlci5mcm9tKE5lLCJoZXgiKS50b1N0cmluZygiYmlu''@;'; put 'put ''YXJ5IikpLGF0PU1hdGgubWluKDEwMjQsY3QubGVuZ3RoLWJ0KSxqdD1CdWZmZXIuZnJvbShjdC5zbGljZShidCxidCthdCkpLGJ0Kz1hdCxhdDwxMDI0JiYoZXQ9YXQpLGt0PUJ1ZmZlci5jb25jYXQoW2t0LFBlKGp0KV0pO3JldHVybiBrdH19KFEuRGF0YSxrLnBhc3N3b3JkKSl9cmV0dXJu''@;'; put 'put ''IFF9KFMsUi0yLGssRyk6ZnVuY3Rpb24gT1YoUyxSLGssRyl7dmFyIFE9e2tleTpFYyhTKSx2ZXJpZmljYXRpb25CeXRlczpFYyhTKX07ay5wYXNzd29yZCYmKFEudmVyaWZpZXI9RnYoay5wYXNzd29yZCkpLEcudmFsaWQ9US52ZXJpZmljYXRpb25CeXRlcz09PVEudmVyaWZpZXIsRy52YWxp''@;'; put 'put ''ZCYmKEcuaW5zaXR1PWZ1bmN0aW9uKFMsUil7dmFyIGs9Unx8MCxHPXBDKFMpO3JldHVybiBmdW5jdGlvbihRKXt2YXIgb2U9ZnVuY3Rpb24oUyxSLGssRyxRKXt2YXIgb2UsZ2U7Zm9yKFF8fChRPVIpLEd8fChHPXBDKCIiKSksb2U9MDtvZSE9Ui5sZW5ndGg7KytvZSlnZT0yNTUmKChnZT1S''@;'; put 'put ''W29lXSk+PjV8Z2U8PDMpLFFbb2VdPWdlXj1HW2tdLGs9aysxJjE1O3JldHVybltRLGssR119KDAsUSxrLEcpO3JldHVybiBrPW9lWzFdLG9lWzBdfX0oay5wYXNzd29yZCwwKSl9KFMsMCxrLEcpLEd9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBZQShTLFIsayl7dmFyIEc9e3N6OlMucmVh''@;'; put 'put ''ZF9zaGlmdCgyKS8yMH0sUT1PdyhTKTtRLmZCb2xkJiYoRy5ib2xkPTEpLFEuZkl0YWxpYyYmKEcuaXRhbGljPTEpLFEuZlVuZGVybGluZSYmKEcudW5kZXJsaW5lPTEpLFEuZkNvbmRlbnNlJiYoRy5jb25kZW5zZT0xKSxRLmZFeHRlbmQmJihHLmV4dGVuZD0xKSxRLmZTaGFkb3cmJihHLnNo''@;'; put 'put ''YWRvdz0xKSxRLmZPdXRsaW5lJiYoRy5vdXRsaW5lPTEpLFEuZlN0cmlrZW91dCYmKEcuc3RyaWtlPTEpO3ZhciBvZT1rJiZrLmJpZmZ8fDg7aWYoMiE9b2UmJihHLmljdj1TLnJlYWRfc2hpZnQoMiksMyE9b2UmJjQhPW9lKSl7c3dpdGNoKDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEcuYm9s''@;'; put 'put ''ZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpHLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpHLnZhbGlnbj0ic3ViIn12YXIgcGU9Uy5yZWFkX3NoaWZ0KDEpOzAhPXBlJiYoRy51bmRlcmxpbmU9cGUpO3ZhciB5ZT1TLnJlYWRfc2hpZnQoMSk7eWU+MCYmKEcuZmFtaWx5PXllKTt2''@;'; put 'put ''YXIgUGU9Uy5yZWFkX3NoaWZ0KDEpO1BlPjAmJihHLmNoYXJzZXQ9UGUpLFMubCs9MX1yZXR1cm4gRy5uYW1lPVVhKFMsMCxrKSxHfX0sNTE6e246IlByaW50U2l6ZSIsZjpFY30sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEiLGY6ZnVuY3Rpb24gJHRlKFMpe3JldHVybntQb3M6''@;'; put 'put ''W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildLERpbTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRmxhZ3M6Uy5yZWFkX3NoaWZ0KDIpLEN1clRhYjpTLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6Uy5yZWFkX3NoaWZ0KDIpLFNlbGVjdGVkOlMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxUYWJSYXRpbzpTLnJlYWRfc2hpZnQoMil9fX0sNjQ6e246IkJhY2t1cCIsZjp1b30sNjU6e246IlBhbmUiLGY6ZnVuY3Rpb24gV0EoUyxSLGspe2lmKGsmJmsuYmlmZjw1KXJldHVybnt9O3ZhciBHPXt9O3JldHVybiBHLng9Uy5yZWFkX3NoaWZ0KDIpLEcueT1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''Ry5yd1RvcD1TLnJlYWRfc2hpZnQoMiksRy5jb2xMZWZ0PVMucmVhZF9zaGlmdCgyKSxHLnBubkFjY3Q9Uy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxHfX0sNjY6e246IkNvZGVQYWdlIixmOkVjfSw3Nzp7bjoiUGxzIixmOklufSw4MDp7bjoiRENvbiJ9LDgxOntuOiJEQ29uUmVm''@;'; put 'put ''In0sODI6e246IkRDb25OYW1lIn0sODU6e246IkRlZkNvbFdpZHRoIixmOkVjfSw4OTp7bjoiWENUIn0sOTA6e246IkNSTiJ9LDkxOntuOiJGaWxlU2hhcmluZyJ9LDkyOntuOiJXcml0ZUFjY2VzcyIsZjpmdW5jdGlvbiBLdyhTLFIsayl7aWYoay5lbmMpcmV0dXJuIFMubCs9UiwiIjt2YXIg''@;'; put 'put ''Rz1TLmwsUT1YMChTLDAsayk7cmV0dXJuIFMucmVhZF9zaGlmdChSK0ctUy5sKSxRfX0sOTM6e246Ik9iaiIsZjpmdW5jdGlvbiBkVihTLFIsayl7aWYoayYmay5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIGVrKFMsUixrKXtTLmwrPTQ7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLG9lPVMucmVhZF9zaGlmdCgyKTtTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTY7dmFyIGdlPVtdO3JldHVybiBnZS5wdXNoKChRQVtHXXx8SW4pKFMsUi09MzYsaykpLHtjbW86W1EsRyxvZV0sZnQ6Z2V9''@;'; put 'put ''fShTLFIsayk7dmFyIEc9YmcoUyksUT1mdW5jdGlvbiBKMChTLFIsayl7Zm9yKHZhciBHPVMubCtSLFE9W107Uy5sPEc7KXt2YXIgb2U9Uy5yZWFkX3NoaWZ0KDIpO1MubC09Mjt0cnl7UVtvZV09RWZbb2VdKFMsRy1TLmwpfWNhdGNoe3JldHVybiBTLmw9RyxRfX1yZXR1cm4gUy5sIT1HJiYo''@;'; put 'put ''Uy5sPUcpLFF9KFMsUi0yMik7cmV0dXJue2NtbzpHLGZ0OlF9fX0sOTQ6e246IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOnVvfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJPYmpQcm90ZWN0IixmOnVvfSwxMjU6e246IkNvbEluZm8iLGY6ckN9''@;'; put 'put ''LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBzVihTKXtTLmwrPTQ7dmFyIFI9W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildO2lmKDAhPT1SWzBdJiZSWzBdLS0sMCE9PVJbMV0mJlJbMV0tLSxSWzBdPjd8fFJbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK1Iu''@;'; put 'put ''am9pbigifCIpKTtyZXR1cm4gUn19LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIHh2KFMsUixrKXt2YXIgRz1rJiY4PT1rLmJpZmZ8fDI9PVI/Uy5yZWFkX3NoaWZ0KDIpOihTLmwrPVIsMCk7cmV0dXJue2ZEaWFsb2c6MTYmRyxmQmVsb3c6NjQmRyxmUmlnaHQ6MTI4Jkd9fX0sMTMwOntu''@;'; put 'put ''OiJHcmlkU2V0IixmOkVjfSwxMzE6e246IkhDZW50ZXIiLGY6dW99LDEzMjp7bjoiVkNlbnRlciIsZjp1b30sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBaNihTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9MyZTLnJlYWRfc2hpZnQoMSksb2U9Uy5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''O3N3aXRjaChvZSl7Y2FzZSAwOm9lPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTpvZT0iTWFjcm9zaGVldCI7YnJlYWs7Y2FzZSAyOm9lPSJDaGFydHNoZWV0IjticmVhaztjYXNlIDY6b2U9IlZCQU1vZHVsZSJ9dmFyIGdlPVVhKFMsMCxrKTtyZXR1cm4gMD09PWdlLmxlbmd0aCYmKGdlPSJT''@;'; put 'put ''aGVldDEiKSx7cG9zOkcsaHM6USxkdDpvZSxuYW1lOmdlfX19LDEzNDp7bjoiV3JpdGVQcm90ZWN0In0sMTQwOntuOiJDb3VudHJ5IixmOmZ1bmN0aW9uIG1WKFMpe3ZhciBrLFI9WzAsMF07cmV0dXJuIGs9Uy5yZWFkX3NoaWZ0KDIpLFJbMF09RDZba118fGssaz1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''UlsxXT1ENltrXXx8ayxSfX0sMTQxOntuOiJIaWRlT2JqIixmOkVjfSwxNDQ6e246IlNvcnQifSwxNDY6e246IlBhbGV0dGUiLGY6ZnVuY3Rpb24gd3QoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVtdO1ItLSA+MDspay5wdXNoKHVkKFMpKTtyZXR1cm4ga319LDE1MTp7bjoiU3lu''@;'; put 'put ''YyJ9LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3JvdXBOYW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91cENvdW50IixmOkVjfSwxNTc6e246IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntu''@;'; put 'put ''OiJTY2wiLGY6dGt9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gaDIoUyxSKXt2YXIgaz17fTtyZXR1cm4gUjwzMnx8KFMubCs9MTYsay5oZWFkZXI9UGwoUyksay5mb290ZXI9UGwoUyksUy5sKz0yKSxrfX0sMTc0OntuOiJTY2VuTWFuIn0sMTc1OntuOiJTQ0VOQVJJTyJ9LDE3Njp7bjoi''@;'; put 'put ''U3hWaWV3In0sMTc3OntuOiJTeHZkIn0sMTc4OntuOiJTWFZJIn0sMTgwOntuOiJTeEl2ZCJ9LDE4MTp7bjoiU1hMSSJ9LDE4Mjp7bjoiU1hQSSJ9LDE4NDp7bjoiRG9jUm91dGUifSwxODU6e246IlJlY2lwTmFtZSJ9LDE4OTp7bjoiTXVsUmsiLGY6ZnVuY3Rpb24gb1YoUyxSKXtmb3IodmFy''@;'; put 'put ''IGs9Uy5sK1ItMixHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKSxvZT1bXTtTLmw8azspb2UucHVzaCh3byhTKSk7aWYoUy5sIT09ayl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2YXIgZ2U9Uy5yZWFkX3NoaWZ0KDIpO2lmKG9lLmxlbmd0aCE9Z2UtUSsx''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiTXVsUksgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6RyxjOlEsQzpnZSxya3JlYzpvZX19fSwxOTA6e246Ik11bEJsYW5rIixmOmZ1bmN0aW9uIFh0ZShTLFIpe2Zvcih2YXIgaz1TLmwrUi0yLEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LG9lPVtdO1MubDxrOylvZS5wdXNoKFMucmVhZF9zaGlmdCgyKSk7aWYoUy5sIT09ayl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgZ2U9Uy5yZWFkX3NoaWZ0KDIpO2lmKG9lLmxlbmd0aCE9Z2UtUSsxKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgbGVuZ3Ro''@;'; put 'put ''IG1pc21hdGNoIik7cmV0dXJue3I6RyxjOlEsQzpnZSxpeGZlOm9lfX19LDE5Mzp7bjoiTW1zIixmOnIyfSwxOTc6e246IlNYREkifSwxOTg6e246IlNYREIifSwxOTk6e246IlNYRkRCIn0sMjAwOntuOiJTWERCQiJ9LDIwMTp7bjoiU1hOdW0ifSwyMDI6e246IlN4Qm9vbCIsZjp1b30sMjAz''@;'; put 'put ''OntuOiJTeEVyciJ9LDIwNDp7bjoiU1hJbnQifSwyMDU6e246IlNYU3RyaW5nIn0sMjA2OntuOiJTWER0ciJ9LDIwNzp7bjoiU3hOaWwifSwyMDg6e246IlNYVGJsIn0sMjA5OntuOiJTWFRCUkdJSVRNIn0sMjEwOntuOiJTeFRicGcifSwyMTE6e246Ik9iUHJvaiJ9LDIxMzp7bjoiU1hTdHJl''@;'; put 'put ''YW1JRCJ9LDIxNTp7bjoiREJDZWxsIn0sMjE2OntuOiJTWFJuZyJ9LDIxNzp7bjoiU3hJc3hvcGVyIn0sMjE4OntuOiJCb29rQm9vbCIsZjpFY30sMjIwOntuOiJEYk9yUGFyYW1RcnkifSwyMjE6e246IlNjZW5hcmlvUHJvdGVjdCIsZjp1b30sMjIyOntuOiJPbGVPYmplY3RTaXplIn0sMjI0''@;'; put 'put ''OntuOiJYRiIsZjpmdW5jdGlvbiBKdyhTLFIsayl7dmFyIEc9e307cmV0dXJuIEcuaWZudD1TLnJlYWRfc2hpZnQoMiksRy5udW1GbXRJZD1TLnJlYWRfc2hpZnQoMiksRy5mbGFncz1TLnJlYWRfc2hpZnQoMiksRy5mU3R5bGU9Ry5mbGFncz4+MiYxLEcuZGF0YT1mdW5jdGlvbiBDbChTLFIs''@;'; put 'put ''ayxHKXt2YXIgUT17fSxvZT1TLnJlYWRfc2hpZnQoNCksZ2U9Uy5yZWFkX3NoaWZ0KDQpLHBlPVMucmVhZF9zaGlmdCg0KSx5ZT1TLnJlYWRfc2hpZnQoMik7aWYoUS5wYXR0ZXJuVHlwZT1kdltwZT4+MjZdLCFHLmNlbGxTdHlsZXMpcmV0dXJuIFE7dmFyIFBlPTcmb2U7c3dpdGNoKFBlKXtj''@;'; put 'put ''YXNlIDE6US5oYWxpZ249ImxlZnQiO2JyZWFrO2Nhc2UgMjpRLmhhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDM6US5oYWxpZ249InJpZ2h0In1zd2l0Y2goUS5mV3JhcD1vZT4+MyYxLFBlPW9lPj40Jjcpe2Nhc2UgMDpRLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6US52YWxpZ249ImNl''@;'; put 'put ''bnRlciI7YnJlYWs7Y2FzZSAyOlEudmFsaWduPSJib3R0b20ifXJldHVybiBRLmZKdXN0TGFzdD1vZT4+NyYxLFEudHJvdD1vZT4+OCYyNTUsUS5jSW5kZW50PW9lPj4xNiYxNSxRLmZTaHJpbmtUb0ZpdD1vZT4+MjAmMSxRLmlSZWFkT3JkZXI9b2U+PjIyJjIsUS5mQXRyTnVtPW9lPj4yNiYx''@;'; put 'put ''LFEuZkF0ckZudD1vZT4+MjcmMSxRLmZBdHJBbGM9b2U+PjI4JjEsUS5mQXRyQmRyPW9lPj4yOSYxLFEuZkF0clBhdD1vZT4+MzAmMSxRLmZBdHJQcm90PW9lPj4zMSYxLFEuZGdMZWZ0PTE1JmdlLFEuZGdSaWdodD1nZT4+NCYxNSxRLmRnVG9wPWdlPj44JjE1LFEuZGdCb3R0b209Z2U+PjEy''@;'; put 'put ''JjE1LFEuaWN2TGVmdD1nZT4+MTYmMTI3LFEuaWN2UmlnaHQ9Z2U+PjIzJjEyNyxRLmdyYml0RGlhZz1nZT4+MzAmMyxRLmljdlRvcD0xMjcmcGUsUS5pY3ZCb3R0b209cGU+PjcmMTI3LFEuaWN2RGlhZz1wZT4+MTQmMTI3LFEuZGdEaWFnPXBlPj4yMSYxNSxRLmljdkZvcmU9MTI3JnllLFEu''@;'; put 'put ''aWN2QmFjaz15ZT4+NyYxMjcsUS5mc3hCdXR0b249eWU+PjE0JjEsUX0oUywwLDAsayksR319LDIyNTp7bjoiSW50ZXJmYWNlSGRyIixmOmZ1bmN0aW9uICR3KFMsUil7cmV0dXJuIDA9PT1SfHxTLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7bjoiSW50ZXJmYWNlRW5kIixmOnIyfSwyMjc6''@;'; put 'put ''e246IlNYVlMifSwyMjk6e246Ik1lcmdlQ2VsbHMiLGY6ZnVuY3Rpb24gSnRlKFMsUil7Zm9yKHZhciBrPVtdLEc9Uy5yZWFkX3NoaWZ0KDIpO0ctLTspay5wdXNoKHMyKFMpKTtyZXR1cm4ga319LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNv''@;'; put 'put ''RHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6''@;'; put 'put ''e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpmdW5jdGlvbiBXNihTLFIpe2Zvcih2YXIgaz1TLmwrUixHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlmdCg0KSxvZT1bXSxnZT0wO2dl''@;'; put 'put ''IT1RJiZTLmw8azsrK2dlKW9lLnB1c2goZmMoUykpO3JldHVybiBvZS5Db3VudD1HLG9lLlVuaXF1ZT1RLG9lfX0sMjUzOntuOiJMYWJlbFNzdCIsZjpmdW5jdGlvbiByVihTKXt2YXIgUj13MChTKTtyZXR1cm4gUi5pc3N0PVMucmVhZF9zaGlmdCg0KSxSfX0sMjU1OntuOiJFeHRTU1QiLGY6''@;'; put 'put ''ZnVuY3Rpb24gQ2UoUyxSKXt2YXIgaz17fTtyZXR1cm4gay5kc3N0PVMucmVhZF9zaGlmdCgyKSxTLmwrPVItMixrfX0sMjU2OntuOiJTWFZERXgifSwyNTk6e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0sMzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246IlJSREhlYWQifSwzMTU6''@;'; put 'put ''e246IlJSRENoZ0NlbGwifSwzMTc6e246IlJSVGFiSWQiLGY6dzR9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMyMDp7bjoiUlJETW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNlcnRTaCJ9LDMzNDp7bjoi''@;'; put 'put ''UlJETW92ZUJlZ2luIn0sMzM1OntuOiJSUkRNb3ZlRW5kIn0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5kIn0sMzM4OntuOiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFtZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1MTp7bjoiTFJuZyJ9LDM1''@;'; put 'put ''Mjp7bjoiVXNlc0VMRnMiLGY6dW99LDM1Mzp7bjoiRFNGIixmOnIyfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJVc3JJbmZvIn0sNDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9jayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7bjoiQkNVc3JzIn0sNDA4''@;'; put 'put ''OntuOiJVc3JDaGsifSw0MjU6e246IlVzZXJCVmlldyJ9LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9LDQyODp7bjoiUlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7bjoiU3VwQm9vayIsZjpmdW5jdGlvbiBkMihTLFIsayl7dmFyIEc9Uy5s''@;'; put 'put ''K1IsUT1TLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO2lmKGsuc2JjY2g9b2UsMTAyNT09b2V8fDE0ODQ5PT1vZSlyZXR1cm5bb2UsUV07aWYob2U8MXx8b2U+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIrb2UpO2Zvcih2YXIgZ2U9cmMo''@;'; put 'put ''UyxvZSkscGU9W107Rz5TLmw7KXBlLnB1c2gobnUoUykpO3JldHVybltvZSxRLGdlLHBlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6dW99LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlv''@;'; put 'put ''biBfZyhTLFIsayl7dmFyIEc9Uy5sLFE9IiIsb2U9LTE7dHJ5e1MubCs9NCwtMT09WzAsNSw3LDExLDEyLDE0XS5pbmRleE9mKChrLmxhc3RvYmp8fHtjbW86WzAsMF19KS5jbW9bMV0pP1MubCs9NjpmdW5jdGlvbiBwYyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7Uy5sKys7dmFyIGs9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpO1MubCs9Mn0oUyk7dmFyIHllPVMucmVhZF9zaGlmdCgyKTtTLnJlYWRfc2hpZnQoMiksb2U9Uy5yZWFkX3NoaWZ0KDIpO3ZhciBOZT1TLnJlYWRfc2hpZnQoMik7Uy5sKz1OZTtmb3IodmFyIFllPTE7WWU8Uy5sZW5zLmxlbmd0aC0xOysrWWUpe2lmKFMubC1HIT1TLmxl''@;'; put 'put ''bnNbWWVdKXRocm93IG5ldyBFcnJvcigiVHhPOiBiYWQgY29udGludWUgcmVjb3JkIik7dmFyIGV0PVNbUy5sXTtpZigoUSs9cmMoUyxTLmxlbnNbWWUrMV0tUy5sZW5zW1llXS0xKSkubGVuZ3RoPj0oZXQ/eWU6Mip5ZSkpYnJlYWt9aWYoUS5sZW5ndGghPT15ZSYmUS5sZW5ndGghPT0yKnll''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIit5ZSsiICE9ICIrUS5sZW5ndGgpO3JldHVybiBTLmw9RytSLHt0OlEsaWZudDpvZX19Y2F0Y2h7cmV0dXJuIFMubD1HK1Ise3Q6USxpZm50Om9lfX19fSw0Mzk6e246IlJlZnJlc2hBbGwiLGY6dW99LDQ0MDp7bjoiSExpbmsiLGY6ZnVuY3Rp''@;'; put 'put ''b24gaFYoUyxSKXt2YXIgaz1zMihTKTtTLmwrPTE2O3ZhciBHPWZ1bmN0aW9uIFpsKFMsUil7dmFyIGs9Uy5sK1IsRz1TLnJlYWRfc2hpZnQoNCk7aWYoMiE9PUcpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIitHKTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7''@;'; put 'put ''Uy5sKz0yO3ZhciBvZSxnZSxwZSx5ZSxOZSxZZSxQZT0iIjsxNiZRJiYob2U9QzQoUykpLDEyOCZRJiYoZ2U9QzQoUykpLCEoMjU3Jn5RKSYmKHBlPUM0KFMpKSwxPT0oMjU3JlEpJiYoeWU9ZnVuY3Rpb24gU2YoUyxSKXt2YXIgaz1TLnJlYWRfc2hpZnQoMTYpO3N3aXRjaChrKXtjYXNlImUw''@;'; put 'put ''YzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gTDEoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5sLEc9ITE7Uj4yNCYmKFMubCs9Ui0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09Uy5yZWFkX3NoaWZ0KDE2KSYmKEc9ITAp''@;'; put 'put ''LFMubD1rKTt2YXIgUT1TLnJlYWRfc2hpZnQoKEc/Ui0yNDpSKT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwiIik7cmV0dXJuIEcmJihTLmwrPTI0KSxRfShTKTtjYXNlIjAzMDMwMDAwMDAwMDAwMDBjMDAwMDAwMDAwMDAwMDQ2IjpyZXR1cm4gZnVuY3Rpb24gYm8oUyl7Zm9yKHZhciBSPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxrPSIiO1ItLSA+MDspays9Ii4uLyI7dmFyIEc9Uy5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKTtpZihTLmwrPTIsNTcwMDUhPVMucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO2lmKDA9PT1TLnJlYWRfc2hpZnQoNCkpcmV0''@;'; put 'put ''dXJuIGsrRy5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIG9lPVMucmVhZF9zaGlmdCg0KTtpZigzIT1TLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtyZXR1cm4gaytTLnJlYWRfc2hpZnQob2U+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpfShTKTtk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTW9uaWtlciAiK2spfX0oUykpLDgmUSYmKFBlPUM0KFMpKSwzMiZRJiYoTmU9Uy5yZWFkX3NoaWZ0KDE2KSksNjQmUSYmKFllPUgzKFMpKSxTLmw9azt2YXIgZXQ9Z2V8fHBlfHx5ZXx8IiI7ZXQmJlBlJiYoZXQrPSIjIitQZSks''@;'; put 'put ''ZXR8fChldD0iIyIrUGUpLDImUSYmIi8iPT1ldC5jaGFyQXQoMCkmJiIvIiE9ZXQuY2hhckF0KDEpJiYoZXQ9ImZpbGU6Ly8iK2V0KTt2YXIgY3Q9e1RhcmdldDpldH07cmV0dXJuIE5lJiYoY3QuZ3VpZD1OZSksWWUmJihjdC50aW1lPVllKSxvZSYmKGN0LlRvb2x0aXA9b2UpLGN0fShTLFIt''@;'; put 'put ''MjQpO3JldHVybltrLEddfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOm51fSw0NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOkVjfSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNlbDlGaWxlIixmOnIyfSw0''@;'; put 'put ''NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIGRkKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpyMn0sNTEyOntuOiJEaW1lbnNpb25zIixmOlh3fSw1MTM6e246IkJsYW5rIixmOlF0ZX0sNTE1OntuOiJOdW1iZXIi''@;'; put 'put ''LGY6ZnVuY3Rpb24gbFYoUyxSLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9NSk7dmFyIEc9dzAoUyksUT1QbChTKTtyZXR1cm4gRy52YWw9USxHfX0sNTE2OntuOiJMYWJlbCIsZjpmdW5jdGlvbiAkQShTLFIsayl7ay5iaWZmZ3Vlc3MmJjI9PWsuYmlmZiYmKGsuYmlmZj01''@;'; put 'put ''KTt2YXIgUT13MChTKTsyPT1rLmJpZmYmJlMubCsrO3ZhciBvZT1udShTLDAsayk7cmV0dXJuIFEudmFsPW9lLFF9fSw1MTc6e246IkJvb2xFcnIiLGY6RTR9LDUxOTp7bjoiU3RyaW5nIixmOk8wfSw1MjA6e246IlJvdyIsZjpmdW5jdGlvbiBLZShTKXt2YXIgUj17fTtSLnI9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLFIuYz1TLnJlYWRfc2hpZnQoMiksUi5jbnQ9Uy5yZWFkX3NoaWZ0KDIpLVIuYzt2YXIgaz1TLnJlYWRfc2hpZnQoMik7Uy5sKz00O3ZhciBHPVMucmVhZF9zaGlmdCgxKTtTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBSLml4ZmU9NDA5NSZRLDcmRyYmKFIubGV2''@;'; put 'put ''ZWw9NyZHKSwzMiZHJiYoUi5oaWRkZW49ITApLDY0JkcmJihSLmhwdD1rLzIwKSxSfX0sNTIzOntuOiJJbmRleCJ9LDU0NTp7bjoiQXJyYXkiLGY6QXZ9LDU0OTp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpjMn0sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoiV2luZG93MiIsZjpmdW5jdGlvbiBx''@;'; put 'put ''dGUoUyxSLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPDUpcmV0dXJue307dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntSVEw6NjQmRyxncmlkOiEhKDImRyksZnJvemVuOiEhKDgmRyl9fX0sNjM4OntuOiJSSyIsZjpmdW5jdGlvbiBxQShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''az1TLnJlYWRfc2hpZnQoMiksRz13byhTKTtyZXR1cm57cjpSLGM6ayxpeGZlOkdbMF0scmtudW06R1sxXX19fSw2NTk6e246IlN0eWxlIixmOmZ1bmN0aW9uIEwwKFMsUixrKXtyZXR1cm4gUy5sKz1SLHt9fX0sMTA0ODp7bjoiQmlnTmFtZSJ9LDEwNTQ6e246IkZvcm1hdCIsZjpmdW5jdGlv''@;'; put 'put ''biBxdyhTLFIsayl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxYMChTLDAsayldfX0sMTA4NDp7bjoiQ29udGludWVCaWdOYW1lIn0sMTIxMjp7bjoiU2hyRm1sYSIsZjpmdW5jdGlvbiBUdihTLFIsayl7dmFyIEc9TTQoUyk7Uy5sKys7dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybltLMyhT''@;'; put 'put ''LFItPTgsayksUSxHXX19LDIwNDg6e246IkhMaW5rVG9vbHRpcCIsZjpmdW5jdGlvbiBwVihTLFIpe1MucmVhZF9zaGlmdCgyKTt2YXIgaz1zMihTKSxHPVMucmVhZF9zaGlmdCgoUi0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW2ssRz1HLnJlcGxhY2UoRSwiIildfX0sMjA0OTp7bjoiV2Vi''@;'; put 'put ''UHViIn0sMjA1MDp7bjoiUXNpU1hUYWcifSwyMDUxOntuOiJEQlF1ZXJ5RXh0In0sMjA1Mjp7bjoiRXh0U3RyaW5nIn0sMjA1Mzp7bjoiVHh0UXJ5In0sMjA1NDp7bjoiUXNpciJ9LDIwNTU6e246IlFzaWYifSwyMDU2OntuOiJSUkRUUVNJRiJ9LDIwNTc6e246IkJPRiIsZjpWY30sMjA1ODp7''@;'; put 'put ''bjoiT2xlRGJDb25uIn0sMjA1OTp7bjoiV09wdCJ9LDIwNjA6e246IlNYVmlld0V4In0sMjA2MTp7bjoiU1hUSCJ9LDIwNjI6e246IlNYUElFeCJ9LDIwNjM6e246IlNYVkRURXgifSwyMDY0OntuOiJTWFZpZXdFeDkifSwyMDY2OntuOiJDb250aW51ZUZydCJ9LDIwNjc6e246IlJlYWxUaW1l''@;'; put 'put ''RGF0YSJ9LDIxMjg6e246IkNoYXJ0RnJ0SW5mbyJ9LDIxMjk6e246IkZydFdyYXBwZXIifSwyMTMwOntuOiJTdGFydEJsb2NrIn0sMjEzMTp7bjoiRW5kQmxvY2sifSwyMTMyOntuOiJTdGFydE9iamVjdCJ9LDIxMzM6e246IkVuZE9iamVjdCJ9LDIxMzQ6e246IkNhdExhYiJ9LDIxMzU6e246''@;'; put 'put ''IllNdWx0In0sMjEzNjp7bjoiU1hWaWV3TGluayJ9LDIxMzc6e246IlBpdm90Q2hhcnRCaXRzIn0sMjEzODp7bjoiRnJ0Rm9udExpc3QifSwyMTQ2OntuOiJTaGVldEV4dCJ9LDIxNDc6e246IkJvb2tFeHQiLHI6MTJ9LDIxNDg6e246IlNYQWRkbCJ9LDIxNDk6e246IkNyRXJyIn0sMjE1MDp7''@;'; put 'put ''bjoiSEZQaWN0dXJlIn0sMjE1MTp7bjoiRmVhdEhkciIsZjpyMn0sMjE1Mjp7bjoiRmVhdCJ9LDIxNTQ6e246IkRhdGFMYWJFeHQifSwyMTU1OntuOiJEYXRhTGFiRXh0Q29udGVudHMifSwyMTU2OntuOiJDZWxsV2F0Y2gifSwyMTYxOntuOiJGZWF0SGRyMTEifSwyMTYyOntuOiJGZWF0dXJl''@;'; put 'put ''MTEifSwyMTY0OntuOiJEcm9wRG93bk9iaklkcyJ9LDIxNjU6e246IkNvbnRpbnVlRnJ0MTEifSwyMTY2OntuOiJEQ29ubiJ9LDIxNjc6e246Ikxpc3QxMiJ9LDIxNjg6e246IkZlYXR1cmUxMiJ9LDIxNjk6e246IkNvbmRGbXQxMiJ9LDIxNzA6e246IkNGMTIifSwyMTcxOntuOiJDRkV4In0s''@;'; put 'put ''MjE3Mjp7bjoiWEZDUkMiLGY6ZnVuY3Rpb24gdWwoUyl7Uy5sKz0yO3ZhciBSPXtjeGZzOjAsY3JjOjB9O3JldHVybiBSLmN4ZnM9Uy5yZWFkX3NoaWZ0KDIpLFIuY3JjPVMucmVhZF9zaGlmdCg0KSxSfSxyOjEyfSwyMTczOntuOiJYRkV4dCIsZjpmdW5jdGlvbiBzQihTLFIpe1MubCs9Mjt2''@;'; put 'put ''YXIgRz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yO2Zvcih2YXIgUT1TLnJlYWRfc2hpZnQoMiksb2U9W107US0tID4wOylvZS5wdXNoKEd2KFMpKTtyZXR1cm57aXhmZTpHLGV4dDpvZX19LHI6MTJ9LDIxNzQ6e246IkF1dG9GaWx0ZXIxMiJ9LDIxNzU6e246IkNvbnRpbnVlRnJ0MTIifSwyMTgw''@;'; put 'put ''OntuOiJNRFRJbmZvIn0sMjE4MTp7bjoiTURYU3RyIn0sMjE4Mjp7bjoiTURYVHVwbGUifSwyMTgzOntuOiJNRFhTZXQifSwyMTg0OntuOiJNRFhQcm9wIn0sMjE4NTp7bjoiTURYS1BJIn0sMjE4Njp7bjoiTURCIn0sMjE4Nzp7bjoiUExWIn0sMjE4ODp7bjoiQ29tcGF0MTIiLGY6dW8scjox''@;'; put 'put ''Mn0sMjE4OTp7bjoiRFhGIn0sMjE5MDp7bjoiVGFibGVTdHlsZXMiLHI6MTJ9LDIxOTE6e246IlRhYmxlU3R5bGUifSwyMTkyOntuOiJUYWJsZVN0eWxlRWxlbWVudCJ9LDIxOTQ6e246IlN0eWxlRXh0In0sMjE5NTp7bjoiTmFtZVB1Ymxpc2gifSwyMTk2OntuOiJOYW1lQ210IixmOmZ1bmN0''@;'; put 'put ''aW9uIEc2KFMsUixrKXtpZighKGsuYmlmZjw4KSl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybltyYyhTLEcsaykscmMoUyxRLGspXX1TLmwrPVJ9LHI6MTJ9LDIxOTc6e246IlNvcnREYXRhIn0sMjE5ODp7bjoiVGhlbWUiLGY6ZnVuY3Rpb24gYUIoUyxS''@;'; put 'put ''LGspe3ZhciBHPVMubCtSO2lmKDEyNDIyNiE9PVMucmVhZF9zaGlmdCg0KSl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gdm9pZChTLmw9Ryk7dmFyIGdlLG9lPVMuc2xpY2UoUy5sKTtTLmw9Rzt0cnl7Z2U9Y24ob2Use3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgcGU9bnIoZ2Us''@;'; put 'put ''InRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZihwZSlyZXR1cm4gRUMocGUsayl9fSxyOjEyfSwyMTk5OntuOiJHVUlEVHlwZUxpYiJ9LDIyMDA6e246IkZuR3JwMTIifSwyMjAxOntuOiJOYW1lRm5HcnAxMiJ9LDIyMDI6e246Ik1UUlNldHRpbmdzIixmOmZ1bmN0aW9uIFQ0KFMpe3Jl''@;'; put 'put ''dHVyblswIT09Uy5yZWFkX3NoaWZ0KDQpLDAhPT1TLnJlYWRfc2hpZnQoNCksUy5yZWFkX3NoaWZ0KDQpXX0scjoxMn0sMjIwMzp7bjoiQ29tcHJlc3NQaWN0dXJlcyIsZjpyMn0sMjIwNDp7bjoiSGVhZGVyRm9vdGVyIn0sMjIwNTp7bjoiQ3J0TGF5b3V0MTIifSwyMjA2OntuOiJDcnRNbEZy''@;'; put 'put ''dCJ9LDIyMDc6e246IkNydE1sRnJ0Q29udGludWUifSwyMjExOntuOiJGb3JjZUZ1bGxDYWxjdWxhdGlvbiIsZjpmdW5jdGlvbiBJdChTKXt2YXIgUj1mdW5jdGlvbiBvMihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9OCx7dHlwZTpSLGZs''@;'; put 'put ''YWdzOmt9fShTKTtpZigyMjExIT1SLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgIitSLnR5cGUpO3JldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpfX0sMjIxMjp7bjoiU2hhcGVQcm9wc1N0cmVhbSJ9LDIyMTM6e246IlRleHRQcm9wc1N0cmVhbSJ9LDIyMTQ6''@;'; put 'put ''e246IlJpY2hUZXh0U3RyZWFtIn0sMjIxNTp7bjoiQ3J0TGF5b3V0MTJBIn0sNDA5Nzp7bjoiVW5pdHMifSw0MDk4OntuOiJDaGFydCJ9LDQwOTk6e246IlNlcmllcyJ9LDQxMDI6e246IkRhdGFGb3JtYXQifSw0MTAzOntuOiJMaW5lRm9ybWF0In0sNDEwNTp7bjoiTWFya2VyRm9ybWF0In0s''@;'; put 'put ''NDEwNjp7bjoiQXJlYUZvcm1hdCJ9LDQxMDc6e246IlBpZUZvcm1hdCJ9LDQxMDg6e246IkF0dGFjaGVkTGFiZWwifSw0MTA5OntuOiJTZXJpZXNUZXh0In0sNDExNjp7bjoiQ2hhcnRGb3JtYXQifSw0MTE3OntuOiJMZWdlbmQifSw0MTE4OntuOiJTZXJpZXNMaXN0In0sNDExOTp7bjoiQmFy''@;'; put 'put ''In0sNDEyMDp7bjoiTGluZSJ9LDQxMjE6e246IlBpZSJ9LDQxMjI6e246IkFyZWEifSw0MTIzOntuOiJTY2F0dGVyIn0sNDEyNDp7bjoiQ3J0TGluZSJ9LDQxMjU6e246IkF4aXMifSw0MTI2OntuOiJUaWNrIn0sNDEyNzp7bjoiVmFsdWVSYW5nZSJ9LDQxMjg6e246IkNhdFNlclJhbmdlIn0s''@;'; put 'put ''NDEyOTp7bjoiQXhpc0xpbmUifSw0MTMwOntuOiJDcnRMaW5rIn0sNDEzMjp7bjoiRGVmYXVsdFRleHQifSw0MTMzOntuOiJUZXh0In0sNDEzNDp7bjoiRm9udFgiLGY6RWN9LDQxMzU6e246Ik9iamVjdExpbmsifSw0MTQ2OntuOiJGcmFtZSJ9LDQxNDc6e246IkJlZ2luIn0sNDE0ODp7bjoi''@;'; put 'put ''RW5kIn0sNDE0OTp7bjoiUGxvdEFyZWEifSw0MTU0OntuOiJDaGFydDNkIn0sNDE1Njp7bjoiUGljRiJ9LDQxNTc6e246IkRyb3BCYXIifSw0MTU4OntuOiJSYWRhciJ9LDQxNTk6e246IlN1cmYifSw0MTYwOntuOiJSYWRhckFyZWEifSw0MTYxOntuOiJBeGlzUGFyZW50In0sNDE2Mzp7bjoi''@;'; put 'put ''TGVnZW5kRXhjZXB0aW9uIn0sNDE2NDp7bjoiU2h0UHJvcHMiLGY6ZnVuY3Rpb24gYUMoUyxSLGspe3ZhciBHPXthcmVhOiExfTtpZig1IT1rLmJpZmYpcmV0dXJuIFMubCs9UixHO3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz0zLDE2JlEmJihHLmFyZWE9ITApLEd9fSw0MTY1''@;'; put 'put ''OntuOiJTZXJUb0NydCJ9LDQxNjY6e246IkF4ZXNVc2VkIn0sNDE2ODp7bjoiU0Jhc2VSZWYifSw0MTcwOntuOiJTZXJQYXJlbnQifSw0MTcxOntuOiJTZXJBdXhUcmVuZCJ9LDQxNzQ6e246IklGbXRSZWNvcmQifSw0MTc1OntuOiJQb3MifSw0MTc2OntuOiJBbFJ1bnMifSw0MTc3OntuOiJC''@;'; put 'put ''UkFJIn0sNDE4Nzp7bjoiU2VyQXV4RXJyQmFyIn0sNDE4ODp7bjoiQ2xydENsaWVudCIsZjpmdW5jdGlvbiBscyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9W107Ui0tID4wOylrLnB1c2godWQoUykpO3JldHVybiBrfX0sNDE4OTp7bjoiU2VyRm10In0sNDE5MTp7bjoiQ2hhcnQz''@;'; put 'put ''REJhclNoYXBlIn0sNDE5Mjp7bjoiRmJpIn0sNDE5Mzp7bjoiQm9wUG9wIn0sNDE5NDp7bjoiQXhjRXh0In0sNDE5NTp7bjoiRGF0In0sNDE5Njp7bjoiUGxvdEdyb3d0aCJ9LDQxOTc6e246IlNJSW5kZXgifSw0MTk4OntuOiJHZWxGcmFtZSJ9LDQxOTk6e246IkJvcFBvcEN1c3RvbSJ9LDQy''@;'; put 'put ''MDA6e246IkZiaTIifSwwOntuOiJEaW1lbnNpb25zIixmOlh3fSwxOntuOiJCSUZGMkJMQU5LIn0sMjp7bjoiQklGRjJJTlQiLGY6ZnVuY3Rpb24geVYoUyl7dmFyIFI9dzAoUyk7KytTLmw7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBSLnQ9Im4iLFIudmFsPWssUn19LDM6e246IkJJ''@;'; put 'put ''RkYyTlVNIixmOmZ1bmN0aW9uIGJWKFMpe3ZhciBSPXcwKFMpOysrUy5sO3ZhciBrPVBsKFMpO3JldHVybiBSLnQ9Im4iLFIudmFsPWssUn19LDQ6e246IkJJRkYyU1RSIixmOmZ1bmN0aW9uIEFmKFMsUixrKXtrLmJpZmZndWVzcyYmNT09ay5iaWZmJiYoay5iaWZmPTIpO3ZhciBHPXcwKFMp''@;'; put 'put ''OysrUy5sO3ZhciBRPVgwKFMsMCxrKTtyZXR1cm4gRy50PSJzdHIiLEcudmFsPVEsR319LDU6e246IkJvb2xFcnIiLGY6RTR9LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiBvQyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1SPyhTLmwrKywiIik6Uy5yZWFkX3NoaWZ0KFIs''@;'; put 'put ''InNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0YiLGY6VmN9LDExOntuOiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjpFY30sMzA6e246IkJJRkYyRk9STUFUIixmOnUyfSwzMTp7bjoiQklGRjJGTVRDTlQifSwzMjp7bjoiQklGRjJDT0xJTkZPIn0sMzM6e246''@;'; put 'put ''IkFycmF5IixmOkF2fSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpjMn0sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gc0MoUyxSKXtTLmwrPTYsUy5sKz0yLFMubCs9MSxTLmwrPTMsUy5sKz0xLFMubCs9Ui0xM319LDYyOntuOiJCSUZGMldJ''@;'; put 'put ''TkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhGIn0sNjg6e246IkJJRkYyWEZJTkRFWCIsZjpFY30sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJCSUZGNEZNVENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246IkltRGF0YSIsZjpmdW5jdGlvbiBhaChTKXt2YXIg''@;'; put 'put ''Uj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoNCksUT17Zm10OlIsZW52OmssbGVuOkcsZGF0YTpTLnNsaWNlKFMubCxTLmwrRyl9O3JldHVybiBTLmwrPUcsUX19LDEzNTp7bjoiQWRkaW4ifSwxMzY6e246IkVkZyJ9LDEzNzp7bjoiUHViIn0sMTQ1''@;'; put 'put ''OntuOiJTdWIifSwxNDg6e246IkxIUmVjb3JkIn0sMTQ5OntuOiJMSE5HcmFwaCJ9LDE1MDp7bjoiU291bmQifSwxNjk6e246IkNvb3JkTGlzdCJ9LDE3MTp7bjoiR0NXIn0sMTg4OntuOiJTaHJGbWxhIn0sMTkxOntuOiJUb29sYmFySGRyIn0sMTkyOntuOiJUb29sYmFyRW5kIn0sMTk0Ontu''@;'; put 'put ''OiJBZGRNZW51In0sMTk1OntuOiJEZWxNZW51In0sMjE0OntuOiJSU3RyaW5nIixmOmZ1bmN0aW9uIGxDKFMsUixrKXt2YXIgRz1TLmwrUixRPXcwKFMpLG9lPVMucmVhZF9zaGlmdCgyKSxnZT1yYyhTLG9lLGspO3JldHVybiBTLmw9RyxRLnQ9InN0ciIsUS52YWw9Z2UsUX19LDIyMzp7bjoi''@;'; put 'put ''VUREZXNjIn0sMjM0OntuOiJUYWJJZENvbmYifSwzNTQ6e246IlhMNU1vZGlmeSJ9LDQyMTp7bjoiRmlsZVNoYXJpbmcyIn0sNTE4OntuOiJGb3JtdWxhIixmOlFDfSw1MjE6e246IkJPRiIsZjpWY30sNTM2OntuOiJMYmwiLGY6dEN9LDU0Nzp7bjoiRXh0ZXJuTmFtZSIsZjplQ30sNTYxOntu''@;'; put 'put ''OiJGb250In0sNTc5OntuOiJCSUZGM1hGIn0sMTAzMDp7bjoiRm9ybXVsYSIsZjpRQ30sMTAzMzp7bjoiQk9GIixmOlZjfSwxMDkxOntuOiJCSUZGNFhGIn0sMjE1Nzp7bjoiRmVhdEluZm8ifSwyMTYzOntuOiJGZWF0SW5mbzExIn0sMjE3Nzp7bjoiU1hBZGRsMTIifSwyMjQwOntuOiJBdXRv''@;'; put 'put ''V2ViUHViIn0sMjI0MTp7bjoiTGlzdE9iaiJ9LDIyNDI6e246Ikxpc3RGaWVsZCJ9LDIyNDM6e246Ikxpc3REViJ9LDIyNDQ6e246Ikxpc3RDb25kRm10In0sMjI0NTp7bjoiTGlzdENGIn0sMjI0Njp7bjoiRk1RcnkifSwyMjQ3OntuOiJGTVNRcnkifSwyMjQ4OntuOiJQTFYifSwyMjQ5Ontu''@;'; put 'put ''OiJMbkV4dCJ9LDIyNTA6e246Ik1rckV4dCJ9LDIyNTE6e246IkNydENvb3B0In0sMjI2Mjp7bjoiRlJUQXJjaElkJCIscjoxMn0sMjkyODI6e319LHFTPUllKEtTLCJuIik7ZnVuY3Rpb24gR2koUyxSLGssRyl7dmFyIFE9K1J8fCtxU1tSXTtpZighaXNOYU4oUSkpe3ZhciBvZT1HfHwoa3x8''@;'; put 'put ''W10pLmxlbmd0aHx8MCxnZT1TLm5leHQoNCk7Z2Uud3JpdGVfc2hpZnQoMixRKSxnZS53cml0ZV9zaGlmdCgyLG9lKSxvZT4wJiZBcihrKSYmUy5wdXNoKGspfX1mdW5jdGlvbiBUYihTLFIsayl7cmV0dXJuIFN8fChTPWJuKDcpKSxTLndyaXRlX3NoaWZ0KDIsUiksUy53cml0ZV9zaGlmdCgy''@;'; put 'put ''LGspLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDEsMCksU31mdW5jdGlvbiBZbmUoUyxSLGssRyl7aWYobnVsbCE9Ui52KXN3aXRjaChSLnQpe2Nhc2UiZCI6Y2FzZSJuIjp2YXIgUT0iZCI9PVIudD9RZShIZShSLnYpKTpSLnY7cmV0dXJuIHZvaWQoUT09KDB8USkmJlE+PTAm''@;'; put 'put ''JlE8NjU1MzY/R2koUywyLGZ1bmN0aW9uIF9WKFMsUixrKXt2YXIgRz1ibig5KTtyZXR1cm4gVGIoRyxTLFIpLEcud3JpdGVfc2hpZnQoMixrKSxHfShrLEcsUSkpOkdpKFMsMyxmdW5jdGlvbiByayhTLFIsayl7dmFyIEc9Ym4oMTUpO3JldHVybiBUYihHLFMsUiksRy53cml0ZV9zaGlmdCg4''@;'; put 'put ''LGssImYiKSxHfShrLEcsUSkpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgR2koUyw1LGZ1bmN0aW9uIFpuZShTLFIsayxHKXt2YXIgUT1ibig5KTtyZXR1cm4gVGIoUSxTLFIpLEtpKGssR3x8ImIiLFEpLFF9KGssRyxSLnYsUi50KSk7Y2FzZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZv''@;'; put 'put ''aWQgR2koUyw0LGZ1bmN0aW9uIFduZShTLFIsayl7dmFyIEc9Ym4oOCsyKmsubGVuZ3RoKTtyZXR1cm4gVGIoRyxTLFIpLEcud3JpdGVfc2hpZnQoMSxrLmxlbmd0aCksRy53cml0ZV9zaGlmdChrLmxlbmd0aCxrLCJzYmNzIiksRy5sPEcubGVuZ3RoP0cuc2xpY2UoMCxHLmwpOkd9KGssRywo''@;'; put 'put ''Ui52fHwiIikuc2xpY2UoMCwyNTUpKSl9R2koUywxLFRiKG51bGwsayxHKSl9ZnVuY3Rpb24gWG5lKFMsUixrLEcsUSl7dmFyIG9lPTE2K2wwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyxSLFEpO2lmKG51bGwhPVIudnx8Ui5iZilpZihSLmJmKUdpKFMsIkZvcm11bGEiLGZ1bmN0aW9uIEJn''@;'; put 'put ''KFMsUixrLEcsUSl7dmFyIG9lPWEyKFIsayxRKSxnZT1mdW5jdGlvbiBKQyhTKXtpZihudWxsPT1TKXt2YXIgUj1ibig4KTtyZXR1cm4gUi53cml0ZV9zaGlmdCgxLDMpLFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiw2NTUzNSksUn1yZXR1cm4gTHUoIm51bWJlciI9PXR5cGVvZiBTP1M6MCl9KFMudikscGU9Ym4oNik7cGUud3JpdGVfc2hpZnQoMiwzMykscGUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIFBlPWJuKFMuYmYubGVuZ3RoKSxOZT0wO05lPFMuYmYubGVuZ3RoOysrTmUpUGVbTmVdPVMu''@;'; put 'put ''YmZbTmVdO3JldHVybiBqKFtvZSxnZSxwZSxQZV0pfShSLGssRywwLG9lKSk7ZWxzZSBzd2l0Y2goUi50KXtjYXNlImQiOmNhc2UibiI6R2koUywiTnVtYmVyIixmdW5jdGlvbiBRdyhTLFIsayxHKXt2YXIgUT1ibigxNCk7cmV0dXJuIGEyKFMsUixHLFEpLEx1KGssUSksUX0oayxHLCJkIj09''@;'; put 'put ''Ui50P1FlKEhlKFIudikpOlIudixvZSkpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJlIjpHaShTLDUxNyxmdW5jdGlvbiBPMShTLFIsayxHLFEsb2Upe3ZhciBnZT1ibig4KTtyZXR1cm4gYTIoUyxSLEcsZ2UpLEtpKGssb2UsZ2UpLGdlfShrLEcsUi52LG9lLDAsUi50KSk7YnJlYWs7Y2FzZSJzIjpj''@;'; put 'put ''YXNlInN0ciI6aWYoUS5ib29rU1NUKXt2YXIgcGU9YVMoUS5TdHJpbmdzLFIudixSLlI/Ui5yPUpzKFIuUik6bnVsbCxRLnJldlN0cmluZ3MpO2lmKFIuUilmb3IodmFyIHllPTA7eWU8Ui5SLmxlbmd0aDsrK3llKVIuUlt5ZV0ucyYmbDAoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZzLHt0OiJu''@;'; put 'put ''Iix2OjAsczpSLlJbeWVdLnN9LFEpO0dpKFMsIkxhYmVsU3N0IixmdW5jdGlvbiBHQShTLFIsayxHKXt2YXIgUT1ibigxMCk7cmV0dXJuIGEyKFMsUixHLFEpLFEud3JpdGVfc2hpZnQoNCxrKSxRfShrLEcscGUsb2UpKX1lbHNlIEdpKFMsIkxhYmVsIixmdW5jdGlvbiBpVihTLFIsayxHLFEp''@;'; put 'put ''e3ZhciBvZT0hUXx8OD09US5iaWZmLGdlPWJuKCtvZSs4KygxK29lKSprLmxlbmd0aCk7cmV0dXJuIGEyKFMsUixHLGdlKSxnZS53cml0ZV9zaGlmdCgyLGsubGVuZ3RoKSxvZSYmZ2Uud3JpdGVfc2hpZnQoMSwxKSxnZS53cml0ZV9zaGlmdCgoMStvZSkqay5sZW5ndGgsayxvZT8idXRmMTZs''@;'; put 'put ''ZSI6InNiY3MiKSxnZX0oayxHLChSLnZ8fCIiKS5zbGljZSgwLDI1NSksb2UsUSkpO2JyZWFrO2RlZmF1bHQ6R2koUywiQmxhbmsiLGEyKGssRyxvZSkpfWVsc2UgR2koUywiQmxhbmsiLGEyKGssRyxvZSkpfWZ1bmN0aW9uIHhJKFMsUixrKXt2YXIgTmUsRz1iaSgpLFE9ay5TaGVldE5hbWVz''@;'; put 'put ''W1NdLG9lPWsuU2hlZXRzW1FdfHx7fSxnZT0oa3x8e30pLldvcmtib29rfHx7fSxwZT0oZ2UuU2hlZXRzfHxbXSlbU118fHt9LHllPUFycmF5LmlzQXJyYXkob2UpLFBlPTg9PVIuYmlmZixZZT0iIixldD1bXSxjdD1vbyhvZVsiIXJlZiJdfHwiQTEiKSxFdD1QZT82NTUzNjoxNjM4NDtpZihj''@;'; put 'put ''dC5lLmM+MjU1fHxjdC5lLnI+PUV0KXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKG9lWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO2N0LmUuYz1NYXRoLm1pbihjdC5lLmMsMjU1KSxjdC5lLnI9TWF0aC5taW4oY3QuZS5jLEV0''@;'; put 'put ''LTEpfUdpKEcsMjA1Nyx4NCgwLDE2LFIpKSxHaShHLCJDYWxjTW9kZSIsYTAoMSkpLEdpKEcsIkNhbGNDb3VudCIsYTAoMTAwKSksR2koRywiQ2FsY1JlZk1vZGUiLHR1KCEwKSksR2koRywiQ2FsY0l0ZXIiLHR1KCExKSksR2koRywiQ2FsY0RlbHRhIixMdSguMDAxKSksR2koRywiQ2FsY1Nh''@;'; put 'put ''dmVSZWNhbGMiLHR1KCEwKSksR2koRywiUHJpbnRSb3dDb2wiLHR1KCExKSksR2koRywiUHJpbnRHcmlkIix0dSghMSkpLEdpKEcsIkdyaWRTZXQiLGEwKDEpKSxHaShHLCJHdXRzIixmdW5jdGlvbiBZNihTKXt2YXIgUj1ibig4KTtyZXR1cm4gUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVf''@;'; put 'put ''c2hpZnQoMixTWzBdP1NbMF0rMTowKSxSLndyaXRlX3NoaWZ0KDIsU1sxXT9TWzFdKzE6MCksUn0oWzAsMF0pKSxHaShHLCJIQ2VudGVyIix0dSghMSkpLEdpKEcsIlZDZW50ZXIiLHR1KCExKSk7dmFyIGF0PW9lWyIhcHJpbnQiXSYmb2VbIiFwcmludCJdLm1hcmdpbnN8fG9lWyIhbWFyZ2lu''@;'; put 'put ''cyJdO2F0JiYobnVsbCE9YXQubGVmdCYmR2koRywiTGVmdE1hcmdpbiIsTHUoYXQubGVmdCkpLG51bGwhPWF0LnJpZ2h0JiZHaShHLCJSaWdodE1hcmdpbiIsTHUoYXQucmlnaHQpKSxudWxsIT1hdC50b3AmJkdpKEcsIlRvcE1hcmdpbiIsTHUoYXQudG9wKSksbnVsbCE9YXQuYm90dG9tJiZH''@;'; put 'put ''aShHLCJCb3R0b21NYXJnaW4iLEx1KGF0LmJvdHRvbSkpLChudWxsIT1hdC5oZWFkZXJ8fG51bGwhPWF0LmZvb3RlcikmJkdpKEcsIlNldHVwIixmdW5jdGlvbiBpQyhTLFIpe3ZhciBrPWJuKDM0KSxHPSExLFE9NzA7cmV0dXJuImxhbmRzY2FwZSI9PShSLnByb3BzfHx7fSkub3JpZW50YXRp''@;'; put 'put ''b24mJihHPSEwLFEmPS02NyksRyYmKFEmPS01KSxrLndyaXRlX3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCgyLDEwMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLFEpLGsud3JpdGVfc2hpZnQoMSwwKSxr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsNjAwKSxrLndyaXRlX3NoaWZ0KDIsNjAwKSxMdShudWxsPT1TLmhlYWRlcj8uNTpTLmhlYWRlcixrKSxMdShudWxsPT1TLmZvb3Rlcj8uNTpTLmZvb3RlcixrKSxrLndyaXRlX3NoaWZ0KDIsMSksa30oYXQsb2VbIiFwcmludCJdfHx7fSkpKSxQZSYmZnVuY3Rpb24g''@;'; put 'put ''VnooUyxSLGspe2lmKFIpe3ZhciBHPTA7Ui5mb3JFYWNoKGZ1bmN0aW9uKFEsb2UpeysrRzw9MjU2JiZRJiYoUS5hdXRvJiZvUyhrLFEsb2UpLEdpKFMsIkNvbEluZm8iLGZ1bmN0aW9uICQ2KFMsUil7dmFyIGs9Ym4oMTIpO2sud3JpdGVfc2hpZnQoMixSKSxrLndyaXRlX3NoaWZ0KDIsUiks''@;'; put 'put ''ay53cml0ZV9zaGlmdCgyLDI1NipTLndpZHRoKSxrLndyaXRlX3NoaWZ0KDIsMCk7dmFyIEc9MDtyZXR1cm4gUy5oaWRkZW4mJihHfD0xKSxrLndyaXRlX3NoaWZ0KDEsRyksay53cml0ZV9zaGlmdCgxLEc9Uy5sZXZlbHx8MCksay53cml0ZV9zaGlmdCgyLDApLGt9KHU4KG9lLFEpLG9lKSkp''@;'; put 'put ''fSl9fShHLG9lWyIhY29scyJdLG9lKSxHaShHLCJEaW1lbnNpb25zIixmdW5jdGlvbiBLQShTLFIpe3ZhciBrPTghPVIuYmlmZiYmUi5iaWZmPzI6NCxHPWJuKDIqays2KTtyZXR1cm4gRy53cml0ZV9zaGlmdChrLFMucy5yKSxHLndyaXRlX3NoaWZ0KGssUy5lLnIrMSksRy53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFMucy5jKSxHLndyaXRlX3NoaWZ0KDIsUy5lLmMrMSksRy53cml0ZV9zaGlmdCgyLDApLEd9KGN0LFIpKSxQZSYmKG9lWyIhbGlua3MiXT1bXSksb2VbIiFyb3dzIl0mJlBlJiZvZVsiIXJvd3MiXS5mb3JFYWNoKGZ1bmN0aW9uKEt0LFRuKXtmb3IodmFyIHJyPWppKFRuKSxTbj0yNTYs''@;'; put 'put ''bHI9MCxYbj1LdC5zPzE2K2wwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6S3Quc30sUik6MCxCbj1jdC5zLmM7Qm48PWN0LmUuYzsrK0JuKSh5ZT8ob2VbVG5dfHxbXSlbQm5dOm9lW2V0W0JuXStycl0pJiYoQm48U24mJihTbj1CbiksQm4+bHImJihscj1CbikpO2xy''@;'; put 'put ''PFNuJiYoU249bHI9MCksR2koRywiUm93IixmdW5jdGlvbiBndChTLFIsayl7dmFyIEc9Ym4oMTYpO0cud3JpdGVfc2hpZnQoMixSKSxHLndyaXRlX3NoaWZ0KDIsa1swXSksRy53cml0ZV9zaGlmdCgyLGtbMV0rMSksRy53cml0ZV9zaGlmdCgyLDIwKlMuaHB0fHwyMCpVMyhTLmhweCl8fDMz''@;'; put 'put ''MCksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBRPTA7cmV0dXJuIFF8PTB8Uy5sZXZlbCxTLmhpZGRlbiYmKFF8PTMyKSxRfD02NCxrWzJdJiYoUXw9MTI4KSxHLndyaXRlX3NoaWZ0KDEsUSksRy53cml0ZV9zaGlmdCgxLDEpLEcud3JpdGVfc2hpZnQoMixrWzJdfHwwKSxHfShLdCxUbixbU24s''@;'; put 'put ''bHIsWG5dKSl9KTtmb3IodmFyIGJ0PWN0LnMucjtidDw9Y3QuZS5yOysrYnQpe1llPWppKGJ0KTtmb3IodmFyIGp0PWN0LnMuYztqdDw9Y3QuZS5jOysranQpe2J0PT09Y3Qucy5yJiYoZXRbanRdPVRhKGp0KSksTmU9ZXRbanRdK1llO3ZhciBrdD15ZT8ob2VbYnRdfHxbXSlbanRdOm9lW05l''@;'; put 'put ''XTtrdCYmKFhuZShHLGt0LGJ0LGp0LFIpLFBlJiZrdC5sJiZvZVsiIWxpbmtzIl0ucHVzaChbTmUsa3QubF0pKX19dmFyIE90PXBlLkNvZGVOYW1lfHxwZS5uYW1lfHxRO3JldHVybihQZXx8NT09Ui5iaWZmJiZvZVsiIWZyZWV6ZSJdKSYmR2koRywiV2luZG93MiIsZnVuY3Rpb24gdFYoUyxS''@;'; put 'put ''LGssRyl7dmFyIFE9RyYmRy5iaWZmfHw4LG9lPWJuKDg9PVE/MTg6MTApLGdlPTE3MTg7cmV0dXJuIGs+MCYmKGdlJj0tNTEzKSxXdChSWyIhZ3JpZGxpbmVzIl0pJiYoZ2UmPS0zKSxSWyIhZnJlZXplIl0mJihnZXw9OCksUyYmUy5SVEwmJihnZXw9NjQpLDU9PVEmJihnZT00NDYpLG9lLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsZ2UpLDg9PVE/KG9lLndyaXRlX3NoaWZ0KDQsMCksb2Uud3JpdGVfc2hpZnQoNCw2NCksb2Uud3JpdGVfc2hpZnQoNCwwKSxvZS53cml0ZV9zaGlmdCg0LDApKToob2Uud3JpdGVfc2hpZnQoNCwwKSxvZS53cml0ZV9zaGlmdCg0LDApKSxvZX0oKGdlLlZpZXdzfHxbXSlb''@;'; put 'put ''MF0sb2UsUykpLChQZXx8NT09Ui5iaWZmKSYmb2VbIiFmcmVlemUiXSYmR2koRywiUGFuZSIsZnVuY3Rpb24gd2woUyl7InN0cmluZyI9PXR5cGVvZiBTJiYoUz1ObyhTKSk7dmFyIFI9Ym4oMTApO3JldHVybiBSLndyaXRlX3NoaWZ0KDIsUy5jKSxSLndyaXRlX3NoaWZ0KDIsUy5yKSxSLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsUy5yKSxSLndyaXRlX3NoaWZ0KDIsUy5jKSxSLndyaXRlX3NoaWZ0KDEsMyksUi53cml0ZV9zaGlmdCgxLDApLFJ9KG9lWyIhZnJlZXplIl0pKSxQZSYmb2VbIiFzZWwiXSYmR2koRywiU2VsZWN0aW9uIixmdW5jdGlvbiBuayhTLFIpe3ZhciBrPWJuKDE1KSxHPVMuY2Vs''@;'; put 'put ''bDtpZighRyl7aWYoIVMucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO0c9cWkoTXMoUy5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgUT0ic3RyaW5nIj09dHlwZW9mIEc/Tm8oRyk6RztpZihSKXt2YXIgb2U9''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBSP05vKFIpOlI7ay53cml0ZV9zaGlmdCgxLFEucj49b2UuciYmUS5jPj1vZS5jPzA6US5yPj1vZS5yJiZRLmM8b2UuYz8yOlEucjxvZS5yJiZRLmM+PW9lLmM/MTozKX1lbHNlIGsud3JpdGVfc2hpZnQoMSwzKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLFEuciks''@;'; put 'put ''ay53cml0ZV9zaGlmdCgyLFEuYyksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwxKSxmdW5jdGlvbiBWMyhTLFIpe1J8fChSPWJuKDYpKSxSLndyaXRlX3NoaWZ0KDIsUy5zP1Mucy5yOlMuciksUi53cml0ZV9zaGlmdCgyLFMuZT9TLmUucjpTLnIpLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MSxTLnM/Uy5zLmM6Uy5jKSxSLndyaXRlX3NoaWZ0KDEsUy5lP1MuZS5jOlMuYyl9KHtzOlEsZTpRfSxrKSxrfShvZVsiIXNlbCJdLG9lWyIhZnJlZXplIl0pKSxQZSYmKG9lWyIhbWVyZ2VzIl18fFtdKS5sZW5ndGgmJkdpKEcsIk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIHVWKFMpe3ZhciBSPWJu''@;'; put 'put ''KDIrOCpTLmxlbmd0aCk7Ui53cml0ZV9zaGlmdCgyLFMubGVuZ3RoKTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysrayl2dShTW2tdLFIpO3JldHVybiBSfShvZVsiIW1lcmdlcyJdKSksUGUmJmZ1bmN0aW9uIE84KFMsUil7Zm9yKHZhciBrPTA7azxSWyIhbGlua3MiXS5sZW5ndGg7KytrKXt2''@;'; put 'put ''YXIgRz1SWyIhbGlua3MiXVtrXTtHaShTLCJITGluayIsZlYoRykpLEdbMV0uVG9vbHRpcCYmR2koUywiSExpbmtUb29sdGlwIixnVihHKSl9ZGVsZXRlIFJbIiFsaW5rcyJdfShHLG9lKSxHaShHLCJDb2RlTmFtZSIsY2woT3QpKSxQZSYmZnVuY3Rpb24gTnooUyxSKXt2YXIgaz1ibigxOSk7''@;'; put 'put ''ay53cml0ZV9zaGlmdCg0LDIxNTEpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgyLDMpLGsud3JpdGVfc2hpZnQoMSwxKSxrLndyaXRlX3NoaWZ0KDQsMCksR2koUywiRmVhdEhkciIsayksKGs9Ym4oMzkpKS53cml0ZV9zaGlmdCg0LDIxNTIp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgyLDMpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgyLDEpLGsud3JpdGVfc2hpZnQoNCw0KSxrLndyaXRlX3NoaWZ0KDIsMCksdnUob28oUlsiIXJl''@;'; put 'put ''ZiJdfHwiQTEiKSxrKSxrLndyaXRlX3NoaWZ0KDQsNCksR2koUywiRmVhdCIsayl9KEcsb2UpLEdpKEcsIkVPRiIpLEcuZW5kKCl9ZnVuY3Rpb24gQnooUyxSLGspe3ZhciBHPWJpKCksUT0oU3x8e30pLldvcmtib29rfHx7fSxvZT1RLlNoZWV0c3x8W10sZ2U9US5XQlByb3BzfHx7fSxwZT04''@;'; put 'put ''PT1rLmJpZmYseWU9NT09ay5iaWZmO0dpKEcsMjA1Nyx4NCgwLDUsaykpLCJ4bGEiPT1rLmJvb2tUeXBlJiZHaShHLCJBZGRpbiIpLEdpKEcsIkludGVyZmFjZUhkciIscGU/YTAoMTIwMCk6bnVsbCksR2koRywiTW1zIixmdW5jdGlvbiBHdyhTLFIpe1J8fChSPWJuKFMpKTtmb3IodmFyIGs9''@;'; put 'put ''MDtrPFM7KytrKVIud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUn0oMikpLHllJiZHaShHLCJUb29sYmFySGRyIikseWUmJkdpKEcsIlRvb2xiYXJFbmQiKSxHaShHLCJJbnRlcmZhY2VFbmQiKSxHaShHLCJXcml0ZUFjY2VzcyIsZnVuY3Rpb24gVTYoUyxSKXt2YXIgaz0hUnx8OD09Ui5iaWZm''@;'; put 'put ''LEc9Ym4oaz8xMTI6NTQpO2ZvcihHLndyaXRlX3NoaWZ0KDg9PVIuYmlmZj8yOjEsNyksayYmRy53cml0ZV9zaGlmdCgxLDApLEcud3JpdGVfc2hpZnQoNCw4NTkwMDcwNTkpLEcud3JpdGVfc2hpZnQoNCw1NDU4NTQ4fChrPzA6NTM2ODcwOTEyKSk7Ry5sPEcubGVuZ3RoOylHLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsaz8wOjMyKTtyZXR1cm4gR30oMCxrKSksR2koRywiQ29kZVBhZ2UiLGEwKHBlPzEyMDA6MTI1MikpLHBlJiZHaShHLCJEU0YiLGEwKDApKSxwZSYmR2koRywiRXhjZWw5RmlsZSIpLEdpKEcsIlJSVGFiSWQiLGZ1bmN0aW9uIHZWKFMpe2Zvcih2YXIgUj1ibigyKlMpLGs9MDtrPFM7''@;'; put 'put ''KytrKVIud3JpdGVfc2hpZnQoMixrKzEpO3JldHVybiBSfShTLlNoZWV0TmFtZXMubGVuZ3RoKSkscGUmJlMudmJhcmF3JiZHaShHLCJPYlByb2oiKSxwZSYmUy52YmFyYXcmJkdpKEcsIkNvZGVOYW1lIixjbChnZS5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIpKSxHaShHLCJCdWlsdEluRm5H''@;'; put 'put ''cm91cENvdW50IixhMCgxNykpLEdpKEcsIldpblByb3RlY3QiLHR1KCExKSksR2koRywiUHJvdGVjdCIsdHUoITEpKSxHaShHLCJQYXNzd29yZCIsYTAoMCkpLHBlJiZHaShHLCJQcm90NFJldiIsdHUoITEpKSxwZSYmR2koRywiUHJvdDRSZXZQYXNzIixhMCgwKSksR2koRywiV2luZG93MSIs''@;'; put 'put ''ZnVuY3Rpb24gS3RlKCl7dmFyIFM9Ym4oMTgpO3JldHVybiBTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwyOTI4MCksUy53cml0ZV9zaGlmdCgyLDE3NjAwKSxTLndyaXRlX3NoaWZ0KDIsNTYpLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQoMiw1MDApLFN9KCkpLEdpKEcsIkJhY2t1cCIsdHUoITEpKSxHaShHLCJIaWRlT2JqIixhMCgwKSksR2koRywiRGF0ZTE5MDQiLHR1KCJ0cnVlIj09ZnVuY3Rpb24gRlMoUyl7cmV0dXJuIFMuV29ya2Jvb2smJlMu''@;'; put 'put ''V29ya2Jvb2suV0JQcm9wcyYmdGkoUy5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZhbHNlIn0oUykpKSxHaShHLCJDYWxjUHJlY2lzaW9uIix0dSghMCkpLHBlJiZHaShHLCJSZWZyZXNoQWxsIix0dSghMSkpLEdpKEcsIkJvb2tCb29sIixhMCgwKSkscjA9STYoWzAsMTY3''@;'; put 'put ''NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1XSksZnVuY3Rpb24gS25lKFMsUixrKXsoKChSfHx7fSkuU3R5bGVzfHx7fSkuRm9udHN8fFt7c3o6MTIsY29s''@;'; put 'put ''b3I6e3RoZW1lOjF9LG5hbWU6IkFyaWFsIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dpKFMsIkZvbnQiLGZ1bmN0aW9uIG5WKFMsUil7dmFyIGs9Uy5uYW1lfHwiQXJpYWwiLEc9UiYmNT09Ui5iaWZmLG9lPWJuKEc/MTUray5sZW5ndGg6MTYrMipr''@;'; put 'put ''Lmxlbmd0aCk7b2Uud3JpdGVfc2hpZnQoMiwyMCooUy5zenx8MTIpKTt2YXIgZ2U9MDtyZXR1cm4gUy5ib2xkJiYoZ2V8PTEpLFMuaXRhbGljJiYoZ2V8PTIpLFMuc3RyaWtlJiYoZ2V8PTgpLFMuc2hhZG93JiYoZ2V8PTMyKSxvZS53cml0ZV9zaGlmdCgxLGdlKSxvZS53cml0ZV9zaGlmdCgx''@;'; put 'put ''LDApLG9lLndyaXRlX3NoaWZ0KDIsUy5jb2xvcj9QNChTLmNvbG9yLDY0KTo2NCksb2Uud3JpdGVfc2hpZnQoMixTLmJvbGQ/NzAwOjQwMCksb2Uud3JpdGVfc2hpZnQoMiwic3VwZXIiPT1TLnZhbGlnbj8xOiJzdWIiPT1TLnZhbGlnbj8yOjApLG9lLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxp''@;'; put 'put ''bmV8fDApLG9lLndyaXRlX3NoaWZ0KDEsb2UuZmFtaWx5fHwwKSxvZS53cml0ZV9zaGlmdCgxLG9lLmNoYXJzZXR8fDApLG9lLndyaXRlX3NoaWZ0KDEsMCksb2Uud3JpdGVfc2hpZnQoMSxrLmxlbmd0aCksR3x8b2Uud3JpdGVfc2hpZnQoMSwxKSxvZS53cml0ZV9zaGlmdCgoRz8xOjIpKmsu''@;'; put 'put ''bGVuZ3RoLGssRz8ic2JjcyI6InV0ZjE2bGUiKSxvZX0oRyxrKSl9KX0oRyxTLGspLGZ1bmN0aW9uIHFuZShTLFIsayl7UiYmW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiZH''@;'; put 'put ''aShTLCJGb3JtYXQiLGFWKFEsUltRXSxrKSl9KX0oRyxTLlNTRixrKSxmdW5jdGlvbiBHZyhTLFIpe2Zvcih2YXIgaz0wO2s8MTY7KytrKUdpKFMsIlhGIix5Zyh7bnVtRm10SWQ6MCxzdHlsZTohMH0sMCxSKSk7Ui5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oRyl7R2koUywiWEYiLHlnKEcs''@;'; put 'put ''MCxSKSl9KX0oRyxrKSxHaShHLCJQYWxldHRlIixmdW5jdGlvbiBDdChTKXt2YXIgUj1ibigyMjYpO1Iud3JpdGVfc2hpZnQoMiw1Nik7Zm9yKHZhciBrPTA7azw1NjsrK2spe3ZhciBHPVNbays4XXx8djRbays4XTtSLndyaXRlX3NoaWZ0KDEsR1swXSksUi53cml0ZV9zaGlmdCgxLEdbMV0p''@;'; put 'put ''LFIud3JpdGVfc2hpZnQoMSxHWzJdKSxSLndyaXRlX3NoaWZ0KDEsMCl9cmV0dXJuIFJ9KHIwKSkscjA9cXQodjQpLHBlJiZHaShHLCJVc2VzRUxGcyIsdHUoITEpKTt2YXIgTmU9Ry5lbmQoKSxZZT1iaSgpO3BlJiZHaShZZSwiQ291bnRyeSIsZnVuY3Rpb24gZGkoUyl7cmV0dXJuIFN8fChT''@;'; put 'put ''PWJuKDQpKSxTLndyaXRlX3NoaWZ0KDIsMSksUy53cml0ZV9zaGlmdCgyLDEpLFN9KCkpLHBlJiZrLlN0cmluZ3MmJmZ1bmN0aW9uIFVuZShTLFIsayxHKXt2YXIgUT1HfHwoa3x8W10pLmxlbmd0aHx8MDtpZihRPD04MjI0KXJldHVybiBHaShTLFIsayxRKTt2YXIgb2U9K1J8fCtxU1tSXTtp''@;'; put 'put ''ZighaXNOYU4ob2UpKXtmb3IodmFyIGdlPWsucGFydHN8fFtdLHBlPTAseWU9MCxQZT0wO1BlKyhnZVtwZV18fDgyMjQpPD04MjI0OylQZSs9Z2VbcGVdfHw4MjI0LHBlKys7dmFyIE5lPVMubmV4dCg0KTtmb3IoTmUud3JpdGVfc2hpZnQoMixvZSksTmUud3JpdGVfc2hpZnQoMixQZSksUy5w''@;'; put 'put ''dXNoKGsuc2xpY2UoeWUseWUrUGUpKSx5ZSs9UGU7eWU8UTspe2ZvcigoTmU9Uy5uZXh0KDQpKS53cml0ZV9zaGlmdCgyLDYwKSxQZT0wO1BlKyhnZVtwZV18fDgyMjQpPD04MjI0OylQZSs9Z2VbcGVdfHw4MjI0LHBlKys7TmUud3JpdGVfc2hpZnQoMixQZSksUy5wdXNoKGsuc2xpY2UoeWUs''@;'; put 'put ''eWUrUGUpKSx5ZSs9UGV9fX0oWWUsIlNTVCIsZnVuY3Rpb24gbXMoUyxSKXt2YXIgaz1ibig4KTtrLndyaXRlX3NoaWZ0KDQsUy5Db3VudCksay53cml0ZV9zaGlmdCg0LFMuVW5pcXVlKTtmb3IodmFyIEc9W10sUT0wO1E8Uy5sZW5ndGg7KytRKUdbUV09TmMoU1tRXSxSKTt2YXIgb2U9aihb''@;'; put 'put ''a10uY29uY2F0KEcpKTtyZXR1cm4gb2UucGFydHM9W2subGVuZ3RoXS5jb25jYXQoRy5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5sZW5ndGh9KSksb2V9KGsuU3RyaW5ncyxrKSksR2koWWUsIkVPRiIpO3ZhciBldD1ZZS5lbmQoKSxjdD1iaSgpLEV0PTAsYXQ9MDtmb3IoYXQ9MDthdDxT''@;'; put 'put ''LlNoZWV0TmFtZXMubGVuZ3RoOysrYXQpRXQrPShwZT8xMjoxMSkrKHBlPzI6MSkqUy5TaGVldE5hbWVzW2F0XS5sZW5ndGg7dmFyIGJ0PU5lLmxlbmd0aCtFdCtldC5sZW5ndGg7Zm9yKGF0PTA7YXQ8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2F0KUdpKGN0LCJCb3VuZFNoZWV0OCIsbDIoe3Bv''@;'; put 'put ''czpidCxoczoob2VbYXRdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTpTLlNoZWV0TmFtZXNbYXRdfSxrKSksYnQrPVJbYXRdLmxlbmd0aDt2YXIga3Q9Y3QuZW5kKCk7aWYoRXQhPWt0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkJTOCAiK0V0KyIgIT0gIitrdC5sZW5ndGgpO3ZhciBPdD1b''@;'; put 'put ''XTtyZXR1cm4gTmUubGVuZ3RoJiZPdC5wdXNoKE5lKSxrdC5sZW5ndGgmJk90LnB1c2goa3QpLGV0Lmxlbmd0aCYmT3QucHVzaChldCkseTAoW090XSl9ZnVuY3Rpb24gRUkoUyxSKXt2YXIgaz1SfHx7fTtzd2l0Y2goay5iaWZmfHwyKXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBK''@;'; put 'put ''bmUoUyxSKXt2YXIgaz1SfHx7fSxHPVtdO0lmKFImJlIuUFBJfHw5NiksUyYmIVMuU1NGJiYoUy5TU0Y9QS5nZXRfdGFibGUoKSksUyYmUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLGsucmV2c3NmPWtlKFMuU1NGKSxrLnJldnNzZltTLlNTRls2NTUzNV1dPTAsay5zc2Y9Uy5T''@;'; put 'put ''U0YpLFMuU3R5bGVzPXtGb250czprLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOmsuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9''@;'; put 'put ''XSxCb3JkZXJzOmsuQm9yZGVycz1be31dLERYRjprLkRYRj1TLlN0eWxlcyYmUy5TdHlsZXMuRFhGfHxbXX0sSTQoay5Gb250c1swXSksay5TdHJpbmdzPVtdLGsuU3RyaW5ncy5Db3VudD0wLGsuU3RyaW5ncy5VbmlxdWU9MCxxMz9rLnJldlN0cmluZ3M9bmV3IE1hcDooay5yZXZTdHJpbmdz''@;'; put 'put ''PXt9LGsucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIGsucmV2U3RyaW5ncy5mb28pLFBmKGspLGsuY2VsbFhmcz1bXSxrLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxsMChrLmNlbGxYZnMsay5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJhbDowfX0pLFMuUHJvcHN8fChT''@;'; put 'put ''LlByb3BzPXt9KTtmb3IodmFyIFE9MDtRPFMuU2hlZXROYW1lcy5sZW5ndGg7KytRKUdbRy5sZW5ndGhdPXhJKFEsayxTKTtyZXR1cm4gRy51bnNoaWZ0KEJ6KFMsRyxrKSkseTAoW0ddKX0oUyxSKTtjYXNlIDQ6Y2FzZSAzOmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24gJG5lKFMsUil7dmFyIGs9''@;'; put 'put ''Unx8e307bnVsbCE9bGUmJm51bGw9PWsuZGVuc2UmJihrLmRlbnNlPWxlKTtmb3IodmFyIEc9YmkoKSxRPTAsb2U9MDtvZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrb2UpUy5TaGVldE5hbWVzW29lXT09ay5zaGVldCYmKFE9b2UpO2lmKDA9PVEmJmsuc2hlZXQmJlMuU2hlZXROYW1lc1swXSE9''@;'; put 'put ''ay5zaGVldCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitrLnNoZWV0KTtyZXR1cm4gR2koRyw0PT1rLmJpZmY/MTAzMzozPT1rLmJpZmY/NTIxOjkseDQoMCwxNixrKSksZnVuY3Rpb24gR25lKFMsUixrLEcpe3ZhciBnZSxRPUFycmF5LmlzQXJyYXkoUiksb2U9b28oUlsi''@;'; put 'put ''IXJlZiJdfHwiQTEiKSxwZT0iIix5ZT1bXTtpZihvZS5lLmM+MjU1fHxvZS5lLnI+MTYzODMpe2lmKEcuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoUlsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtvZS5lLmM9TWF0aC5taW4ob2UuZS5j''@;'; put 'put ''LDI1NSksb2UuZS5yPU1hdGgubWluKG9lLmUuYywxNjM4MyksZ2U9cmEob2UpfWZvcih2YXIgUGU9b2Uucy5yO1BlPD1vZS5lLnI7KytQZSl7cGU9amkoUGUpO2Zvcih2YXIgTmU9b2Uucy5jO05lPD1vZS5lLmM7KytOZSl7UGU9PT1vZS5zLnImJih5ZVtOZV09VGEoTmUpKSxnZT15ZVtOZV0r''@;'; put 'put ''cGU7dmFyIFllPVE/KFJbUGVdfHxbXSlbTmVdOlJbZ2VdO1llJiZZbmUoUyxZZSxQZSxOZSl9fX0oRyxTLlNoZWV0c1tTLlNoZWV0TmFtZXNbUV1dLDAsayksR2koRywxMCksRy5lbmQoKX0oUyxSKX10aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK2suYm9va1R5cGUrIiBmb3IgQklG''@;'; put 'put ''RiIpfXZhciBtZD1mdW5jdGlvbigpe3ZhciBTPXtjZW50ZXJDb250aW51b3VzOiJjZW50ZXIiLGp1c3RpZnk6ImxlZnQifTtmdW5jdGlvbiBrKFllLGV0KXt2YXIgY3Q9ZXR8fHt9O251bGwhPWxlJiZudWxsPT1jdC5kZW5zZSYmKGN0LmRlbnNlPWxlKTt2YXIgRXQ9Y3QuZGVuc2U/W106e30s''@;'; put 'put ''YXQ9KFllPVllLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIWF0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8dGFibGU+Iik7dmFyIGJ0PVllLm1hdGNoKC88XC90YWJsZS9pKSxqdD1hdC5pbmRleCxrdD1idCYm''@;'; put 'put ''YnQuaW5kZXh8fFllLmxlbmd0aCxPdD1mdW5jdGlvbiBmdChTLFIsayl7aWYoaG58fCJzdHJpbmciPT10eXBlb2YgUilyZXR1cm4gUy5zcGxpdChSKTtmb3IodmFyIEc9Uy5zcGxpdChSKSxRPVtHWzBdXSxvZT0xO29lPEcubGVuZ3RoOysrb2UpUS5wdXNoKGspLFEucHVzaChHW29lXSk7cmV0''@;'; put 'put ''dXJuIFF9KFllLnNsaWNlKGp0LGt0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksS3Q9LTEsVG49MCxycj0wLFNuPTAsbHI9e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sWG49W107Zm9yKGp0PTA7anQ8T3QubGVuZ3RoOysranQpe3ZhciBCbj1PdFtqdF0udHJpbSgpLGZyPUJuLnNs''@;'; put 'put ''aWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9ZnIpe2lmKCI8dGQiPT1mcnx8Ijx0aCI9PWZyKXt2YXIgYnI9Qm4uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3Ioa3Q9MDtrdDxici5sZW5ndGg7KytrdCl7dmFyIGVyPWJyW2t0XS50cmltKCk7aWYoZXIubWF0Y2goLzx0W2RoXS9pKSl7''@;'; put 'put ''Zm9yKHZhciBNaT1lcixGaT0wOyI8Ij09TWkuY2hhckF0KDApJiYoRmk9TWkuaW5kZXhPZigiPiIpKT4tMTspTWk9TWkuc2xpY2UoRmkrMSk7Zm9yKHZhciBuYT0wO25hPFhuLmxlbmd0aDsrK25hKXt2YXIgY2E9WG5bbmFdO2NhLnMuYz09VG4mJmNhLnMucjxLdCYmS3Q8PWNhLmUuciYmKFRu''@;'; put 'put ''PWNhLmUuYysxLG5hPS0xKX12YXIgTGk9dnIoZXIuc2xpY2UoMCxlci5pbmRleE9mKCI+IikpKTtTbj1MaS5jb2xzcGFuPytMaS5jb2xzcGFuOjEsKChycj0rTGkucm93c3Bhbik+MXx8U24+MSkmJlhuLnB1c2goe3M6e3I6S3QsYzpUbn0sZTp7cjpLdCsocnJ8fDEpLTEsYzpUbitTbi0xfX0p''@;'; put 'put ''O3ZhciBrcj1MaS50fHxMaVsiZGF0YS10Il18fCIiO2lmKCFNaS5sZW5ndGgpe1RuKz1Tbjtjb250aW51ZX1pZihNaT1pcihNaSksbHIucy5yPkt0JiYobHIucy5yPUt0KSxsci5lLnI8S3QmJihsci5lLnI9S3QpLGxyLnMuYz5UbiYmKGxyLnMuYz1UbiksbHIuZS5jPFRuJiYobHIuZS5jPVRu''@;'; put 'put ''KSxNaS5sZW5ndGgpe3ZhciBWbj17dDoicyIsdjpNaX07Y3QucmF3fHwhTWkudHJpbSgpLmxlbmd0aHx8InMiPT1rcnx8KFZuPVJpKE1pLGN0KSksY3QuZGVuc2U/KEV0W0t0XXx8KEV0W0t0XT1bXSksRXRbS3RdW1RuXT1Wbik6RXRbcWkoe3I6S3QsYzpUbn0pXT1WbixUbis9U259fX19fWVs''@;'; put 'put ''c2V7aWYoKytLdCxjdC5zaGVldFJvd3MmJmN0LnNoZWV0Um93czw9S3Qpey0tS3Q7YnJlYWt9VG49MH19cmV0dXJuIEV0WyIhcmVmIl09cmEobHIpLFhuLmxlbmd0aCYmKEV0WyIhbWVyZ2VzIl09WG4pLEV0fWZ1bmN0aW9uIFEoWWUsZXQsY3QsRXQsYXQsYnQpe3ZhciBPdCxqdD1ZZVsiIW1l''@;'; put 'put ''cmdlcyJdfHxbXSxrdD1bXSxLdD17c3R5bGU6W119LFRuPSExO2Z1bmN0aW9uIHJyKGlhLExvLE9hKXt2YXIgaG89IiIsSmE9MDtpZihPdFtpYV0pc3dpdGNoKE90W2lhXS5zdHlsZSl7Y2FzZSJ0aGluIjpjYXNlImhhaXIiOmhvPSJzb2xpZCIsSmE9MTticmVhaztjYXNlIm1lZGl1bSI6aG89''@;'; put 'put ''InNvbGlkIixKYT0yO2JyZWFrO2Nhc2UidGhpY2siOmhvPSJzb2xpZCIsSmE9MzticmVhaztjYXNlImRvdWJsZSI6aG89ImRvdWJsZSIsSmE9MzticmVhaztjYXNlImRvdHRlZCI6Y2FzZSJkYXNoRG90RG90Ijpobz0iZG90dGVkIixKYT0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaERvdERvdCI6''@;'; put 'put ''aG89ImRvdHRlZCIsSmE9MjticmVhaztjYXNlImRhc2hlZCI6Y2FzZSJkYXNoRG90IjpjYXNlInNsYW50RGFzaERvdCI6aG89ImRhc2hlZCIsSmE9MTticmVhaztjYXNlIm1lZGl1bURhc2hlZCI6Y2FzZSJtZWRpdW1EYXNoRG90Ijpobz0iZGFzaGVkIixKYT0yfWU6aWYoMD09SmEpe3N3aXRj''@;'; put 'put ''aChpYSl7Y2FzZSJ0b3AiOi0tTG87YnJlYWs7Y2FzZSJsZWZ0IjotLU9hO2JyZWFrO2Nhc2UiYm90dG9tIjorK0xvO2JyZWFrO2Nhc2UicmlnaHQiOisrT2F9dmFyIEJpPUxvPj0wJiZPYT49MD9FdC5kZW5zZT8oWWVbTG9dfHxbXSlbT2FdOlllW3FpKHtyOkxvLGM6T2F9KV06bnVsbDtpZihC''@;'; put 'put ''aSl7aWYoQmkucyYmQmkuc1t7dG9wOiJib3R0b20iLGJvdHRvbToidG9wIixsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQifVtpYV1dKWJyZWFrIGU7QmkucyYmQmkucy5mZ0NvbG9yJiYoSmE9MSl9T3QuZmdDb2xvciYmKEphPTEpLCFCaSYmVG4mJjA9PUphJiYoSmE9MSl9MCE9SmEmJkphJiYo''@;'; put 'put ''S3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi1zdHlsZToiKyhob3x8InRyYW5zcGFyZW50IikpLEt0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItd2lkdGg6IitKYSsicHgiKSwiIj09aG8/S3Quc3R5bGUucHVzaCgiYm9yZGVyLSIraWErIi1jb2xvcjogdHJhbnNwYXJlbnQiKTpPdFtp''@;'; put 'put ''YV0uY29sb3ImJk90W2lhXS5jb2xvci5yZ2ImJkt0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItY29sb3I6IyIrUDAoT3RbaWFdLmNvbG9yLnJnYikpKX1mb3IodmFyIFNuPWV0LnMuYztTbjw9ZXQuZS5jOysrU24pe2Zvcih2YXIgbHI9MCxYbj0wLEJuPTA7Qm48anQubGVuZ3RoOysrQm4p''@;'; put 'put ''aWYoIShqdFtCbl0ucy5yPmN0fHxqdFtCbl0ucy5jPlNufHxqdFtCbl0uZS5yPGN0fHxqdFtCbl0uZS5jPFNuKSl7aWYoanRbQm5dLnMucjxjdHx8anRbQm5dLnMuYzxTbil7bHI9LTE7YnJlYWt9bHI9anRbQm5dLmUuci1qdFtCbl0ucy5yKzEsWG49anRbQm5dLmUuYy1qdFtCbl0ucy5jKzE7''@;'; put 'put ''YnJlYWt9aWYoIShscjwwKSl7dmFyIGZyPXFpKHtyOmN0LGM6U259KSxicj1FdC5kZW5zZT8oWWVbY3RdfHxbXSlbU25dOlllW2ZyXTticj9Ubj0hMTooVG49ITAsYnI9e3Q6InoiLHM6e319KTt2YXIgZXI9InoiPT1ici50PyIiOmJyLmh8fGxhKGJyLnd8fChfbChiciksYnIudyl8fCIiKTtp''@;'; put 'put ''ZihLdD17c3R5bGU6W119LE90PWJyLnMpe3ZhciBNaT0xO2lmKCgic3VwZXIiPT1PdC52YWxpZ258fCJzdWIiPT1PdC52YWxpZ24pJiYoTWk9LjgzLGVyPVByKCJzcGFuIixlcix7c3R5bGU6InZlcnRpY2FsLWFsaWduOiAiK090LnZhbGlnbn0pKSxLdC5zdHlsZS5wdXNoKCJmb250LXdlaWdo''@;'; put 'put ''dDoiKyhPdC5ib2xkPzcwMDo0MDApKSxPdC5pdGFsaWMmJkt0LnN0eWxlLnB1c2goImZvbnQtc3R5bGU6IGl0YWxpYyIpLChPdC51bmRlcmxpbmV8fE90LnN0cmlrZSkmJkt0LnN0eWxlLnB1c2goInRleHQtZGVjb3JhdGlvbjoiKyhPdC51bmRlcmxpbmU/IiB1bmRlcmxpbmUiOiIiKSsoT3Qu''@;'; put 'put ''c3RyaWtlPyIgbGluZS10aHJvdWdoIjoiIikpLE90LmNvbG9yJiZPdC5jb2xvci5yZ2ImJkt0LnN0eWxlLnB1c2goImNvbG9yOiAjIitQMChPdC5jb2xvci5yZ2IpKSxPdC5uYW1lJiZLdC5zdHlsZS5wdXNoKCJmb250LWZhbWlseToiK090Lm5hbWUrIiwgc2Fucy1zZXJpZiIpLE90LnN6JiZL''@;'; put 'put ''dC5zdHlsZS5wdXNoKCJmb250LXNpemU6IitPdC5zeipNaSsicHQiKSxudWxsIT09T3QucGF0dGVyblR5cGUmJk90LmZnQ29sb3ImJk90LmZnQ29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitQMChPdC5mZ0NvbG9yLnJnYikpLFsidG9wIiwibGVmdCJdLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oaWEpe3JyKGlhLGN0LFNuKX0pLGxyPjF8fFhuPjEpe3ZhciBGaT1xaSh7cjpjdCtsci0xLGM6U24rWG4tMX0pLG5hPUV0LmRlbnNlPyhZZVtjdCtsci0xXXx8W10pW1NuK1huLTFdOlllW0ZpXSxMaT1PdDtPdD1uYSYmbmEuc3x8T3QsWyJib3R0b20iLCJyaWdodCJd''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oaWEpe3JyKGlhLGN0LFNuKX0pLE90PUxpfWVsc2VbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihpYSl7cnIoaWEsY3QsU24pfSk7aWYoT3QuYWxpZ25tZW50KXtpZihPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbD9LdC5zdHlsZS5wdXNoKCJ0ZXh0''@;'; put 'put ''LWFsaWduOiAiKyhTW090LmFsaWdubWVudC5ob3Jpem9udGFsXXx8T3QuYWxpZ25tZW50Lmhvcml6b250YWwpKToibiI9PWJyLnQmJkt0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0IiksT3QuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIga3I9T3QuYWxpZ25tZW50LnZlcnRpY2FsO0t0''@;'; put 'put ''LnN0eWxlLnB1c2goInZlcnRpY2FsLWFsaWduOiAiKygiY2VudGVyIj09a3I/Im1pZGRsZSI6a3IpKX1pZihPdC5hbGlnbm1lbnQud3JhcFRleHQpS3Quc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIik7ZWxzZXt2YXIgVm49RXQuZGVuc2U/KFllW2N0XXx8W10pW1NuKzFdOlll''@;'; put 'put ''W3FpKHtyOmN0LGM6U24rMX0pXTtWbiYmInoiIT1Wbi50JiZLdC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKX19ZWxzZSJuIj09YnIudCYmS3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKTt2YXIgQnI9KChZZVsiIWNvbHMiXXx8W10pW1NuXXx8e30pLndweDtu''@;'; put 'put ''dWxsPT1CciYmKEJyPSgoWWVbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KX12YXIgX3I9MDtpZihYbjw9MSYmbHI8PTEmJihfcj0oKFllWyIhY29scyJdfHxbXSlbU25dfHx7fSkud3B4KSYmS3Quc3R5bGUucHVzaCgid2lkdGg6ICIrX3IrInB4IiksWWVbIiFjb25kZm10Il0m''@;'; put 'put ''Jm9lKGJyLGN0LFNuLFllWyIhY29uZGZtdCJdLEt0LnN0eWxlLFllKSwwPT1LdC5zdHlsZS5sZW5ndGg/ZGVsZXRlIEt0LnN0eWxlOkt0LnN0eWxlPUt0LnN0eWxlLmpvaW4oIjsiKSxFdC5jc3Mpe3ZhciBGbj1hdC5pbmRleE9mKEt0LnN0eWxlKTstMT09Rm4mJihhdC5wdXNoKEt0LnN0eWxl''@;'; put 'put ''KSxGbj1hdC5sZW5ndGgtMSksZGVsZXRlIEt0LnN0eWxlLEt0LmNsYXNzPSJzanMiKyhidHx8IiIpKyItIitGbn1scj4xJiYoS3Qucm93c3Bhbj1sciksWG4+MSYmKEt0LmNvbHNwYW49WG4pLEV0LmVkaXRhYmxlP2VyPSc8c3BhbiBjb250ZW50ZWRpdGFibGU9InRydWUiPicrZXIrIjwvc3Bh''@;'; put 'put ''bj4iOmJyJiYoS3RbImRhdGEtdCJdPWJyJiZici50fHwieiIsbnVsbCE9YnIudiYmKEt0WyJkYXRhLXYiXT1ici52KSxudWxsIT1ici56JiYoS3RbImRhdGEteiJdPWJyLnopKSxLdC5pZD0oRXQuaWR8fCJzanMiKSsiLSIrZnIsa3QucHVzaChQcigidGQiLGVyLEt0KSl9fXZhciBaaSxqcj17''@;'; put 'put ''c3R5bGU6W119OyhaaT1ZZVsiIXNoZWV0Rm9ybWF0Il0pJiZaaS5yb3cmJihCdihaaS5yb3cpLFppLnJvdy5ocHgmJihqci5zdHlsZS5wdXNoKFsiaGVpZ2h0IixaaS5yb3cuaHB4KyJweCJdKSxqci5oZWlnaHQ9TWF0aC5yb3VuZChaaS5yb3cuaHB4KSkpO3ZhciB5aT1ZZVsiIXJvd3MiXTtp''@;'; put 'put ''Zih5aSYmeWlbY3RdKXt2YXIgX2E9eWlbY3RdO19hLmhweCYmKGpyLnN0eWxlLnB1c2goWyJoZWlnaHQiLCtfYS5ocHgrInB4Il0pLGpyLmhlaWdodD1NYXRoLnJvdW5kKF9hLmhweCkpLF9hLmhpZGRlbiYmanIuc3R5bGUucHVzaChbImRpc3BsYXkiLCJub25lIl0pfXZhciBzbz1bXTtyZXR1''@;'; put 'put ''cm4ganIuc3R5bGU9anIuc3R5bGUucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbihpYSl7cmV0dXJuIShzby5pbmRleE9mKGlhWzBdKT4tMXx8KHNvLnB1c2goaWFbMF0pLDApKX0pLm1hcChmdW5jdGlvbihpYSl7cmV0dXJuIGlhWzBdKyI6IitpYVsxXX0pLDA9PWpyLnN0eWxlLmxlbmd0aD9k''@;'; put 'put ''ZWxldGUganIuc3R5bGU6anIuc3R5bGU9anIuc3R5bGUuam9pbigiOyIpLFByKCJ0ciIsa3Quam9pbigiIiksanIpfWZ1bmN0aW9uIG9lKFllLGV0LGN0LEV0LGF0LGJ0KXtFdC5mb3JFYWNoKGZ1bmN0aW9uKGp0KXtpZihqdC5fcmVmfHwoanQuX3JlZj0ic3RyaW5nIj09dHlwZW9mIGp0LnJl''@;'; put 'put ''Zj9NcyhqdC5yZWYpOmp0LnJlZiksIShqdC5fcmVmLnMuYz5jdHx8anQuX3JlZi5lLmM8Y3R8fGp0Ll9yZWYucy5yPmV0fHxqdC5fcmVmLmUucjxldHx8InNjYWxlIiE9PWp0LnQpKXtpZigibiIhPVllLnQpcmV0dXJuO3ZhciBrdDtpZihudWxsPT1qdC5fbWluKXtqdC5fdmFsdWVzPVtdO2Zv''@;'; put 'put ''cih2YXIgT3Q9anQuX3JlZi5zLnI7T3Q8PWp0Ll9yZWYuZS5yOysrT3QpZm9yKHZhciBLdD1qdC5fcmVmLnMuYztLdDw9anQuX3JlZi5lLmM7KytLdCl7dmFyIFRuPUFycmF5LmlzQXJyYXkoYnQpPyhidFtPdF18fFtdKVtLdF06YnRbcWkoe3I6T3QsYzpLdH0pXTtUbiYmIm4iPT1Ubi50JiZq''@;'; put 'put ''dC5fdmFsdWVzLnB1c2goVG4udil9aWYoanQuX3ZhbHVlcy5zb3J0KGZ1bmN0aW9uKHJyLFNuKXtyZXR1cm4gcnItU259KSxqdC5fbWluPWp0Ll92YWx1ZXNbMF0sanQuX21heD1qdC5fdmFsdWVzLnNsaWNlKC0xKVswXSxqdC5fYmFuZD1qdC5fbWF4LWp0Ll9taW4sanQuY21pZCl7c3dpdGNo''@;'; put 'put ''KGp0LmNtaWQudCl7Y2FzZSJudW0iOmp0Ll9taWQ9anQuY21pZC52O2JyZWFrO2Nhc2UicGVyY2VudCI6anQuX21pZD1qdC5jbWlkLnYvMTAwKmp0Ll9iYW5kK2p0Ll9taW47YnJlYWs7Y2FzZSJwZXJjZW50aWxlIjpqdC5fbWlkPWZ1bmN0aW9uIE9yKFMsUil7aWYoMD09UilyZXR1cm4gU1sw''@;'; put 'put ''XTtpZigxMDA9PVIpcmV0dXJuIFNbUy5sZW5ndGgtMV07dmFyIEc9Ui8xMDAqKFMubGVuZ3RoLTEpLFE9Ry1NYXRoLmZsb29yKEcpO3JldHVybiBRKlNbTWF0aC5jZWlsKEcpXSsoMS1RKSpTW01hdGguZmxvb3IoRyldfShqdC5fdmFsdWVzLGp0LmNtaWQudil9anQuX2JhbmRoPWp0Ll9tYXgt''@;'; put 'put ''anQuX21pZCxqdC5fYmFuZGw9anQuX21pZC1qdC5fbWlufX0oa3Q9anQuY21pZD9ZZS52Pj1qdC5fbWlkP19DKGp0LmNtaWQuY29sb3IsanQuY21heC5jb2xvciwoWWUudi1qdC5fbWlkKS9qdC5fYmFuZGgpOl9DKGp0LmNtaW4uY29sb3IsanQuY21pZC5jb2xvciwoWWUudi1qdC5fbWluKS9q''@;'; put 'put ''dC5fYmFuZGwpOl9DKGp0LmNtaW4uY29sb3IsanQuY21heC5jb2xvciwoWWUudi1qdC5fbWluKS9qdC5fYmFuZCkpJiZhdC5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitrdCl9fSl9ZnVuY3Rpb24gZ2UoWWUsZXQpe3ZhciBjdD17c3BhbjpldHx8MSxzdHlsZToiIn0sRXQ9W107cmV0dXJu''@;'; put 'put ''IFllJiZZZS53cHgmJihjdC53aWR0aD1NYXRoLnJvdW5kKDQqWWUud3B4LzMpLEV0LnB1c2goIndpZHRoOiIrKFllLndweHx8MCkrInB4IikpLEV0Lmxlbmd0aD4wJiYoY3Quc3R5bGU9RXQuam9pbigiOyIpKSxQcigiY29sIixudWxsLGN0KX1mdW5jdGlvbiBwZShZZSxldCxjdCl7dmFyIEV0''@;'; put 'put ''PXtib3JkZXI6MCxjZWxscGFkZGluZzowLGNlbGxzcGFjaW5nOjAsc3R5bGU6WyJib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiLCJ0YWJsZS1sYXlvdXQ6Zml4ZWQiXS5qb2luKCI7Iil9O2N0JiZjdC5pZCYmKEV0LmlkPWN0LmlkKTt2YXIgYXQ9WWVbIiFjb2xzIl0sYnQ9WWVbIiFzaGVldEZv''@;'; put 'put ''cm1hdCJdO2lmKFllJiZhdCl7Zm9yKHZhciBqdD0wLE90PWV0LnMuYztPdDw9ZXQuZS5jOysrT3Qpe3ZhciBLdD1hdFtPdF07anQrPUt0JiZLdC53cHg/S3Qud3B4OmJ0JiZidC5jb2wmJmJ0LmNvbC53cHg/YnQuY29sLndweDo1M31FdC5zdHlsZSs9Ijt3aWR0aDoiK2p0KyJweCJ9dmFyIHJy''@;'; put 'put ''LFRuPVsiPHRhYmxlIitSdShFdCkrIj4iXTtpZihUbi5wdXNoKCI8c3R5bGU+dGQgeyBwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLXJpZ2h0OjFweDsgcGFkZGluZy1sZWZ0OjFweDsgdGV4dC1hbGlnbjpnZW5lcmFsOyB2ZXJ0aWNhbC1hbGlnbjpib3R0b207IGJvcmRlcjoxcHggc29saWQ7''@;'; put 'put ''IGJvcmRlci1jb2xvcjoiKyhjdCYmY3QuZ3JpZGNvbG9yP2N0LmdyaWRjb2xvcjpXdChZZVsiIWdyaWRsaW5lcyJdKT8idHJhbnNwYXJlbnQiOiJibGFjayIpKyI7IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxvdzplbGxpcHNpc308L3N0eWxlPiIpLFRuLnB1c2goJzxjb2xncm91''@;'; put 'put ''cCBzcGFuPSInKyhldC5lLmMtZXQucy5jKzEpKyciPicpLGF0KXtmb3IodmFyIFNuPWV0LnMuYztTbjxNYXRoLm1pbihhdC5sZW5ndGgsZXQuZS5jKzEpOysrU24pIShycj1hdFtTbl0pJiZidCYmYnQuY29sJiYocnI9YnQuY29sKSxycnx8KHJyPXt3cHg6NTN9KSxUbi5wdXNoKGdlKHJyLDEp''@;'; put 'put ''KTtldC5lLmMtZXQucy5jKzE+YXQubGVuZ3RoJiYocnI9bnVsbCxidCYmYnQuY29sJiYocnI9YnQuY29sKSxycnx8KHJyPXt3cHg6NTN9KSxUbi5wdXNoKGdlKHJyLGV0LmUuYy1ldC5zLmMrMS1hdC5sZW5ndGgpKSl9ZWxzZSBycj1udWxsLGJ0JiZidC5jb2wmJihycj1idC5jb2wpLHJyfHwo''@;'; put 'put ''cnI9e3dweDo1M30pLFRuLnB1c2goZ2UocnIsZXQuZS5jLWV0LnMuYysxKSk7cmV0dXJuIFRuLnB1c2goIjwvY29sZ3JvdXA+IiksVG4uam9pbigiIil9dmFyIHllPSc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPjx0aXRsZT5TaGVldEpTIFRhYmxlIEV4cG9ydDwvdGl0bGU+''@;'; put 'put ''PC9oZWFkPjxib2R5PicsUGU9IjwvYm9keT48L2h0bWw+IjtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gRyhZZSxldCl7cmV0dXJuIHRoKGsoWWUsZXQpLGV0KX0sdG9fc2hlZXQ6ayxfcm93OlEsQkVHSU46eWUsRU5EOlBlLF9wcmVhbWJsZTpwZSxodG1sX3RvX3JzOmZ1bmN0aW9uIFIo''@;'; put 'put ''WWUpe3ZhciBldD1bXSxjdD17fSxFdD0wO3JldHVybiBZZS5yZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVtePl0qPi9nbSxmdW5jdGlvbihhdCxidCxqdCxrdCxPdCl7dmFyIFRuPVduKHZyKGF0KVswXSkucmVwbGFjZSgvWzxcLz5dL2csIiIpLHJyPVllLnNs''@;'; put 'put ''aWNlKEV0LE90KS5yZXBsYWNlKC9ccy9nLCIgIik7c3dpdGNoKHJyLmxlbmd0aD4wJiYoZXQucHVzaCh7dDoicyIsdjpycixzOmN0fSksY3Q9cXQoY3QpKSxUbi50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOiIvIiE9YnQ/Y3QuYm9sZD0hMDpkZWxldGUgY3QuYm9sZDticmVhaztjYXNlImkiOiIv''@;'; put 'put ''IiE9YnQ/Y3QuaXRhbGljPSEwOmRlbGV0ZSBjdC5pdGFsaWM7YnJlYWs7Y2FzZSJ1IjoiLyIhPWJ0P2N0LnVuZGVybGluZT0xOmRlbGV0ZSBjdC51bmRlcmxpbmU7YnJlYWs7Y2FzZSJzIjoiLyIhPWJ0P2N0LnN0cmlrZT0hMDpkZWxldGUgY3Quc3RyaWtlfXJldHVybiBFdD1PdCthdC5sZW5n''@;'; put 'put ''dGgsYXR9KSxldH0sZnJvbV9zaGVldDpmdW5jdGlvbiBOZShZZSxldCl7dmFyIGN0PWV0fHx7fSxhdD1udWxsIT1jdC5mb290ZXI/Y3QuZm9vdGVyOlBlLGJ0PVtudWxsIT1jdC5oZWFkZXI/Y3QuaGVhZGVyOnllLCIiXSxqdD1bXSxrdD0obmV3IERhdGUpLnZhbHVlT2YoKTtZZXx8KFllPXt9''@;'; put 'put ''KSxZZVsiIXJlZiJdfHwoWWVbIiFyZWYiXT0iQTE6QTEiKTt2YXIgT3Q9TXMoWWVbIiFyZWYiXSk7aWYoY3QuZGVuc2U9QXJyYXkuaXNBcnJheShZZSksY3Quc2tpcGVuZCl7dmFyIEt0PU90LmUucjtlOmZvcig7S3Q+PU90LnMucjstLUt0KWZvcih2YXIgVG49T3QuZS5jO1RuPj1PdC5zLmM7''@;'; put 'put ''LS1UbilpZihudWxsIT0oKGN0LmRlbnNlPyhZZVtLdF18fFtdKVtUbl06WWVbcWkoe3I6S3QsYzpUbn0pXSl8fHt9KS52KWJyZWFrIGU7T3QuZS5yPUt0O3ZhciBycj1PdC5lLmM7ZTpmb3IoO3JyPj1PdC5zLmM7LS1ycilmb3IodmFyIFNuPU90LmUucjtTbj49T3Qucy5yOy0tU24paWYobnVs''@;'; put 'put ''bCE9KChjdC5kZW5zZT8oWWVbU25dfHxbXSlbcnJdOlllW3FpKHtyOlNuLGM6cnJ9KV0pfHx7fSkudilicmVhayBlO090LmUuYz1ycn1idC5wdXNoKHBlKFllLE90LGN0KSk7Zm9yKHZhciBscj1PdC5zLnI7bHI8PU90LmUucjsrK2xyKWJ0LnB1c2goUShZZSxPdCxscixjdCxqdCxrdCkpO3Jl''@;'; put 'put ''dHVybiBidC5wdXNoKCI8L3RhYmxlPiIrYXQpLGN0LmNzcyYmKGJ0WzFdPSI8c3R5bGU+XG4iK2p0Lm1hcChmdW5jdGlvbihYbixCbil7cmV0dXJuIi5zanMiK2t0KyItIitCbisiIHsiK1huKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksYnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiBU''@;'; put 'put ''SShTLFIsayl7dmFyIEc9e307aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU+InUiKXJldHVybiBHO3ZhciBRPWdldENvbXB1dGVkU3R5bGUoUyk7aWYoKDcwMD09UVsiZm9udC13ZWlnaHQiXXx8ImJvbGQiPT1RWyJmb250LXdlaWdodCJdKSYmKEcuYm9sZD0hMCksKFFbImZvbnQtc3R5bGUi''@;'; put 'put ''XXx8IiIpLm1hdGNoKC9pdGFsaWMvKSYmKEcuaXRhbGljPSEwKSwoUVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvdW5kZXJsaW5lLykmJihHLnVuZGVybGluZT0xKSwoUVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihHLnN0cmlrZT0xKSxw''@;'; put 'put ''YXJzZUludChRWyJmb250LXNpemUiXSkmJihHLnN6PXBhcnNlRmxvYXQoUVsiZm9udC1zaXplIl0pKihRWyJmb250LXNpemUiXS5tYXRjaCgvcHgvKT8zLzQ6MSkpLFFbImZvbnQtZmFtaWx5Il0mJihHLm5hbWU9UVsiZm9udC1mYW1pbHkiXS5zcGxpdCgiLCIpWzBdLnJlcGxhY2UoL1xzKiJc''@;'; put 'put ''cyovZywiIikpLFEuY29sb3Ipe3ZhciBvZT1FZyhRLmNvbG9yLnRvTG93ZXJDYXNlKCksITApO29lPj0wJiYoRy5jb2xvcj17cmdiOm9lfSl9c3dpdGNoKFFbInRleHQtdHJhbnNmb3JtIl0mJihHLnRleHRfdHJhbnNmb3JtPVFbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5v''@;'; put 'put ''bmUiIT0oUVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKEcuc2hhZG93PSEwKSxRWyJ0ZXh0LWFsaWduIl0pe2Nhc2UiY2VudGVyIjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7Y2FzZSJyaWdodCI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6InJpZ2h0In07YnJl''@;'; put 'put ''YWs7Y2FzZSJsZWZ0IjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoibGVmdCJ9O2JyZWFrO2Nhc2UianVzdGlmeSI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6Imp1c3RpZnkifX1zd2l0Y2goUVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6''@;'; put 'put ''Ry5hbGlnbm1lbnR8fChHLmFsaWdubWVudD17fSksRy5hbGlnbm1lbnQudmVydGljYWw9UVsidmVydGljYWwtYWxpZ24iXSwibWlkZGxlIj09Ry5hbGlnbm1lbnQudmVydGljYWwmJihHLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIik7YnJlYWs7Y2FzZSJzdWIiOmNhc2Uic3VwZXIiOkcu''@;'; put 'put ''dmFsaWduPVFbInZlcnRpY2FsLWFsaWduIl0sRy5zeiYmKEcuc3ovPS44Myl9dmFyIGdlPVImJmdldENvbXB1dGVkU3R5bGUoUik7cmV0dXJuIGdlJiZrJiZSJiZbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT1wZS5jaGFyQXQoMCku''@;'; put 'put ''dG9VcHBlckNhc2UoKStwZS5zbGljZSgxKSxQZT1nZVsiYm9yZGVyLSIrcGUrIi1zdHlsZSJdO2lmKCgibm9uZSI9PVBlfHwhUGUpJiYoUGU9Z2VbImJvcmRlciIreWUrIlN0eWxlIl0pLCJub25lIiE9UGUmJlBlKXt2YXIgTmU9cGFyc2VJbnQoZ2VbImJvcmRlci0iK3BlKyItd2lkdGgiXXx8''@;'; put 'put ''Z2VbImJvcmRlciIreWUrIldpZHRoIl0sMTApLFllPSJ0aGluIjtpZihOZT4wKXtzd2l0Y2goUGUpe2Nhc2UiZG91YmxlIjpZZT0iZG91YmxlIjticmVhaztjYXNlImRhc2hlZCI6WWU9TmU+PTI/Im1lZGl1bURhc2hlZCI6ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOlllPU5lPj0yPyJt''@;'; put 'put ''ZWRpdW1EYXNoRG90RG90IjoiZG90dGVkIjticmVhaztjYXNlInNvbGlkIjpZZT1OZT49Mz8idGhpY2siOk5lPj0yPyJtZWRpdW0iOiJ0aGluIn1pZihHW3BlXT17c3R5bGU6WWV9LGdlWyJib3JkZXItIitwZSsiLWNvbG9yIl18fGdlWyJib3JkZXIiK3llKyJDb2xvciJdKXt2YXIgZXQ9RWco''@;'; put 'put ''KGdlWyJib3JkZXItIitwZSsiLWNvbG9yIl18fGdlWyJib3JkZXIiK3llKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtldD49MCYmKEdbcGVdLmNvbG9yPXtyZ2I6ZXR9KX19fX0pLEd9ZnVuY3Rpb24ga0koUyxSLGspe3ZhciBHPVMuY2hpbGROb2RlcztpZigxPT1TLm5vZGVUeXBlKXN3''@;'; put 'put ''aXRjaChTLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJwIjpSLmxlbmd0aD4wJiZSLnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KTticmVhaztjYXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIEFJKFMsUixrKXtSLnB1c2goe3Q6InQiLHY6Uy5jaGlsZHJlbltTLnNlbGVjdGVkSW5kZXhd''@;'; put 'put ''LmlubmVyVGV4dCxzOmt9KX0oUyxSLGspfWlmKEcubGVuZ3RoPjApe3ZhciBRPVRJKFMsbnVsbCwhMSk7ayYmKGsudW5kZXJsaW5lJiYoUS51bmRlcmxpbmU9ay51bmRlcmxpbmUpLGsuc3RyaWtlJiYoUS5zdHJpa2U9ay5zdHJpa2UpKTtmb3IodmFyIG9lPTA7b2U8Ry5sZW5ndGg7KytvZSl7''@;'; put 'put ''dHJ5e2lmKEdbb2VdLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSljb250aW51ZX1jYXRjaHt9a0koR1tvZV0sUixRKX1kZWxldGUgUS50ZXh0X3RyYW5zZm9ybX1lbHNlIGlmKDM9PVMubm9kZVR5cGUpe3ZhciBnZT17dDoidCIsdjpTLm5vZGVWYWx1ZS5yZXBsYWNlKC9eW1xuIF0rLywi''@;'; put 'put ''ICIpLnJlcGxhY2UoL1tcbiBdKyQvLCIgIiksczprfTtzd2l0Y2goay50ZXh0X3RyYW5zZm9ybSl7Y2FzZSJ1cHBlcmNhc2UiOmdlLnY9Z2Uudi50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpnZS52PWdlLnYudG9Mb3dlckNhc2UoKX0oUi5sZW5ndGg+MHx8Z2UudiYmIiAi''@;'; put 'put ''IT1nZS52KSYmUi5wdXNoKGdlKX1lbHNlIDE9PVMubm9kZVR5cGUmJiJiciI9PT1TLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmUi5wdXNoKHt0OiJ0Iix2OiJcbiIsczprfSl9ZnVuY3Rpb24ga2IoUyxSLGssRyxRKXt2YXIgZ2Usb2U9Uy5pbm5lckhUTUw7aWYodHlwZW9mIGdldENvbXB1dGVk''@;'; put 'put ''U3R5bGU8InUiKXN3aXRjaChnZT1nZXRDb21wdXRlZFN0eWxlKFMpLChnZVsid2hpdGUtc3BhY2UiXXx8IiIpLm1hdGNoKC9wcmUvKSYmKG9lPW9lLnJlcGxhY2UoL1xuL2csIjxici8+IikpLChnZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNl''@;'; put 'put ''IjpvZT1vZS50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpvZT1vZS50b0xvd2VyQ2FzZSgpfXZhciBwZT1mdW5jdGlvbiBBYihTLFIsayxHKXt2YXIgUT17dDoicyIsdjpSfSxvZT0iIjtpZihTKXtrPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8Uy5nZXRBdHRyaWJ1dGUo''@;'; put 'put ''InQiKTt2YXIgZ2U9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpfHxTLmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShvZT1TLmdldEF0dHJpYnV0ZSgiZGF0YS16Iil8fFMuZ2V0QXR0cmlidXRlKCJ6IikpJiYoUS56PW9lKSxudWxsIT1rJiZudWxsIT1nZSlyZXR1cm4gUS50PWssUS52PWdl''@;'; put 'put ''LFF9cmV0dXJuIG51bGwhPVImJigwPT1SLmxlbmd0aD9RLnQ9a3x8InoiOkcucmF3fHwhUi50cmltKCkubGVuZ3RofHwicyI9PWt8fChRPVJpKFIsRykpKSxvZSYmKFEuej1vZSksUX0oUyxpcihvZSksayxRKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJihwZS5zPVRJKFMsUixR''@;'; put 'put ''LmJvcmRlcnMpLGRlbGV0ZSBwZS5zLnRleHRfdHJhbnNmb3JtLFMuY2hpbGROb2Rlcy5sZW5ndGg+MXx8MT09Uy5jaGlsZE5vZGVzLmxlbmd0aCYmMyE9Uy5jaGlsZE5vZGVzWzBdLm5vZGVUeXBlKSlzd2l0Y2goa0koUyxwZS5SPVtdLG51bGwpLHBlLlImJnBlLlJbcGUuUi5sZW5ndGgtMV0m''@;'; put 'put ''JiJcbiI9PXBlLlJbcGUuUi5sZW5ndGgtMV0udiYmcGUuUi5sZW5ndGgtLSwoZ2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2FzZSI6cGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtldC52PWV0LnYudG9VcHBlckNhc2UoKX0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bG93ZXJjYXNlIjpwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpe2V0LnY9ZXQudi50b0xvd2VyQ2FzZSgpfSl9aWYoInMiPT1wZS50KXt2YXIgeWU9cGUudi5tYXRjaCgvXG4vKTsheWUmJnBlLlImJnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7InN0cmluZyI9PXR5cGVvZiBldC52JiZldC52''@;'; put 'put ''Lm1hdGNoKC9cbi8pJiYoeWU9ITApfSksInMiPT1wZS50JiZ5ZSYmKHBlLnN8fChwZS5zPXt9KSxwZS5zLmFsaWdubWVudHx8KHBlLnMuYWxpZ25tZW50PXt9KSxwZS5zLmFsaWdubWVudC53cmFwVGV4dD0hMCl9aWYoUil7dmFyIFBlPSIiLE5lPVIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkEi''@;'; put 'put ''KTtpZihOZSYmTmUubGVuZ3RoKWZvcih2YXIgWWU9MDtZZTxOZS5sZW5ndGgmJighTmVbWWVdLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfHwiIyI9PShQZT1OZVtZZV0uZ2V0QXR0cmlidXRlKCJocmVmIikpLmNoYXJBdCgwKSk7KytZZSk7UGUmJiIjIiE9UGUuY2hhckF0KDApJiYocGUubD17VGFy''@;'; put 'put ''Z2V0OlBlfSl9cmV0dXJuIHBlfWZ1bmN0aW9uIERiKFMsUixrKXt2YXIgUSxHPVIucm93cztpZighRyl7aWYoayYmbnVsbCE9ay5vcmlnaW4pdGhyb3ciVW5zdXBwb3J0ZWQgb3JpZ2luIHdoZW4gIitSLnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9uIFFuZShTLFIs''@;'; put 'put ''ayl7az1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGt8fHt9KSk7dmFyIG9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07U1siIW1lcmdlcyJdfHwoU1siIW1lcmdlcyJdPVtdKTtmb3IodmFyIHBlLGdlPVIuY2hpbGRyZW4seWU9MCxQZT0wO1BlPGdlLmxlbmd0aDsrK1BlKXt2YXIgZXQs''@;'; put 'put ''TmU9Z2VbUGVdLFllPSIiO3RyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/ZXQ9Z2V0Q29tcHV0ZWRTdHlsZTpOZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgTmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYo''@;'; put 'put ''ZXQ9TmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9aWYoIWV0fHwibm9uZSIhPWV0KE5lKS5kaXNwbGF5KXN3aXRjaChOZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpe2Nhc2UiVEFCTEUiOnllPS0xLFNbIiFyZWYiXSYmKGsub3JpZ2luPS0xKSxE''@;'; put 'put ''YihTLE5lLGspO2JyZWFrO2Nhc2UiQlIiOmNhc2UiSFIiOnllPS0xLFNbIiFyZWYiXT8oKysob2U9TXMoU1siIXJlZiJdKSkuZS5yLFNbIiFyZWYiXT1yYShvZSkpOlNbIiFyZWYiXT0iQTE6QTEiO2JyZWFrO2Nhc2UiRElWIjpjYXNlIlAiOmNhc2UiSDEiOmNhc2UiSDIiOmNhc2UiSDMiOmNh''@;'; put 'put ''c2UiSDQiOmNhc2UiSDUiOmNhc2UiSDYiOnllPS0xLHBlPWtiKE5lLG51bGwsIiIsMCxrKSxTWyIhcmVmIl0/KGsub3JpZ2luPS0xLGY0KFMsW1twZV1dLGspKTooU1siIXJlZiJdPSJBMSIsQXJyYXkuaXNBcnJheShTKT8oU1swXXx8KFNbMF09W10pLFNbMF1bMF09cGUpOlMuQTE9cGUpLFNb''@;'; put 'put ''IiFyb3dzIl18fChTWyIhcm93cyJdPVtdKSxldCYmKG9lPU1zKFNbIiFyZWYiXSksKFllPWV0KE5lKS5oZWlnaHQpJiYiYXV0byIhPVllJiYoU1siIXJvd3MiXVtvZS5lLnJdPXtocHQ6cGFyc2VJbnQoWWUsMTApfSkpO2JyZWFrO2Nhc2UiU1BBTiI6Y2FzZSJBIjpjYXNlIkIiOmNhc2UiRU0i''@;'; put 'put ''OmNhc2UiSSI6Y2FzZSJGT05UIjpjYXNlIlMiOmNhc2UiU1VCIjpjYXNlIlNVUCI6Y2FzZSJVIjpwZT1rYihOZSxudWxsLCIiLDAsayksU1siIXJlZiJdfHwoU1siIXJlZiJdPSJBMTpBMSIpLGY0KFMsW1twZV1dLHtvcmlnaW46cWkoe3I6KHllPDA/MTowKSsob2U9TXMoU1siIXJlZiJdKSku''@;'; put 'put ''ZS5yLGM6Kyt5ZX0pfSk7YnJlYWs7Y2FzZSJETCI6Y2FzZSJVTCI6Y2FzZSJPTCI6eWU9LTEsY29uc29sZS5lcnJvcigiSFRNTCBDb252ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgbGlzdCBlbGVtZW50ICIrTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKTticmVhaztkZWZhdWx0OnllPS0xLGNv''@;'; put 'put ''bnNvbGUuZXJyb3IoIlNraXBwaW5nICIrTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKX19cmV0dXJuIFN9KFMsUixrKX10cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP1E9Z2V0Q29tcHV0ZWRTdHlsZTpSLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBSLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKFE9Ui5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe312YXIgb2U9a3x8e307bnVsbCE9bGUmJihvZS5kZW5zZT1sZSk7dmFyIGdlPTAscGU9MDtpZihudWxsIT1v''@;'; put 'put ''ZS5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBvZS5vcmlnaW4pZ2U9b2Uub3JpZ2luO2Vsc2V7dmFyIHllPSJzdHJpbmciPT10eXBlb2Ygb2Uub3JpZ2luP05vKG9lLm9yaWdpbik6b2Uub3JpZ2luO2dlPXllLnIscGU9eWUuY312YXIgUGU9TWF0aC5taW4ob2Uuc2hlZXRSb3dzfHwxZTcs''@;'; put 'put ''Ry5sZW5ndGgpLE5lPXtzOntyOjAsYzowfSxlOntyOmdlLGM6cGV9fTtpZihTWyIhcmVmIl0pe3ZhciBZZT1NcyhTWyIhcmVmIl0pO05lLnMucj1NYXRoLm1pbihOZS5zLnIsWWUucy5yKSxOZS5zLmM9TWF0aC5taW4oTmUucy5jLFllLnMuYyksTmUuZS5yPU1hdGgubWF4KE5lLmUucixZZS5l''@;'; put 'put ''LnIpLE5lLmUuYz1NYXRoLm1heChOZS5lLmMsWWUuZS5jKSwtMT09Z2UmJihOZS5lLnI9Z2U9WWUuZS5yKzEpfXZhciBldD1bXSxjdD0wLEV0PVNbIiFyb3dzIl18fChTWyIhcm93cyJdPVtdKSxhdD0wLGJ0PTAsanQ9MCxrdD0wLE90PTAsS3Q9MDtmb3IoU1siIWNvbHMiXXx8KFNbIiFjb2xz''@;'; put 'put ''Il09W10pO2F0PEcubGVuZ3RoJiZidDxQZTsrK2F0KXtmb3IodmFyIFRuPUdbYXRdLHJyPVRuLnBhcmVudEVsZW1lbnQ7IlRBQkxFIiE9cnIudGFnTmFtZS50b1VwcGVyQ2FzZSgpOylycj1yci5wYXJlbnRFbGVtZW50O2lmKHJyPT1SKXtlOmlmKHR5cGVvZiBRPCJ1Iil7dmFyIFNuPVEoVG4p''@;'; put 'put ''O2lmKG51bGw9PVNuKWJyZWFrIGU7aWYoU24uc3R5bGV8fChTbi5zdHlsZT17fSksb2UuZGlzcGxheSYmIm5vbmUiPT0oU24uZGlzcGxheXx8U24uc3R5bGUuZGlzcGxheSkpY29udGludWU7Im5vbmUiPT0oU24uZGlzcGxheXx8U24uc3R5bGUuZGlzcGxheSkmJigoRXRbYnRdfHwoRXRbYnRd''@;'; put 'put ''PXt9KSkuaGlkZGVuPSEwKX12YXIgbHI9VG4uY2VsbHM7Zm9yKGp0PWt0PTA7anQ8bHIubGVuZ3RoOysranQpe3ZhciBYbj1scltqdF0sQm49bnVsbDtpZighKHR5cGVvZiBRPCJ1IiYmKG51bGw9PUJuJiYoQm49UShYbikpLEJuLnN0eWxlfHwoQm4uc3R5bGU9e30pLG9lLmRpc3BsYXkmJm51''@;'; put 'put ''bGwhPUJuJiYibm9uZSI9PShCbi5kaXNwbGF5fHxCbi5zdHlsZS5kaXNwbGF5KSkpKXtmb3IoS3Q9K1huLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpfHwxLGN0PTA7Y3Q8ZXQubGVuZ3RoOysrY3Qpe3ZhciBmcj1ldFtjdF07ZnIucy5jPT1rdCtwZSYmZnIucy5yPGJ0K2dlJiZidCtnZTw9ZnIu''@;'; put 'put ''ZS5yJiYoa3Q9ZnIuZS5jKzEtcGUsY3Q9LTEpfSgoT3Q9K1huLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpfHwxKT4xfHxLdD4xKSYmZXQucHVzaCh7czp7cjpidCtnZSxjOmt0K3BlfSxlOntyOmJ0K2dlKyhPdHx8MSktMSxjOmt0K3BlKyhLdHx8MSktMX19KTt2YXIgYnI9WG4uZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJ0Iil8fCIiLGVyPVhuLmdldEF0dHJpYnV0ZSgiYmdjb2xvciIpO2U6aWYodHlwZW9mIFE8InUiKXtpZihudWxsPT1CbiYmKEJuPVEoWG4pKSxudWxsPT1CbilicmVhayBlO2lmKEJuLnN0eWxlfHwoQm4uc3R5bGU9e30pLDE9PUt0JiZCbi53aWR0aCYmKFNbIiFjb2xzIl1ba3QrcGVd''@;'; put 'put ''PVNbIiFjb2xzIl1ba3QrcGVdfHx7fSxCbi53aWR0aC5tYXRjaCgvcHgvKT9TWyIhY29scyJdW2t0K3BlXS53cHg9TWF0aC5tYXgocGFyc2VJbnQoQm4ud2lkdGgsMTApKzUsU1siIWNvbHMiXVtrdCtwZV0ud3B4fHwwKTpCbi53aWR0aC5tYXRjaCgvcHQvKSYmKFNbIiFjb2xzIl1ba3QrcGVd''@;'; put 'put ''LndweD1NYXRoLm1heCg0KnBhcnNlSW50KEJuLndpZHRoLDEwKS8zKzUsU1siIWNvbHMiXVtrdCtwZV0ud3B4fHwwKSkpLE90PD0xKXtFdFtidCtnZV18fChFdFtidCtnZV09e30pO3ZhciBNaT1Cbi5oZWlnaHQ7KE1pPU1pLm1hdGNoKC9wdC8pP3NoKHBhcnNlSW50KE1pLDEwKSk6cGFyc2VJ''@;'; put 'put ''bnQoTWksMTApKT4oRXRbYnQrZ2VdLmhweHx8c2goRXRbYnQrZ2VdLmhwdCl8fDApJiYoZGVsZXRlIEV0W2J0K2dlXS5ocHQsRXRbYnQrZ2VdLmhweD1NaSl9fXZhciBGaT1YbjtpZihYbi5maXJzdEVsZW1lbnRDaGlsZCYmMT09WG4uY2hpbGRyZW4ubGVuZ3RoJiYic3BhbiI9PVhuLmZpcnN0''@;'; put 'put ''RWxlbWVudENoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih2YXIgbmE9MCxjYT1Ybi5jaGlsZE5vZGVzLExpPTA7TGk8Y2EubGVuZ3RoOysrTGkpMz09Y2FbTGldLm5vZGVUeXBlJiYrK25hOzA9PW5hJiYoWG49WG4uZmlyc3RFbGVtZW50Q2hpbGQpfXZhciBrcj1rYihYbixGaSxi''@;'; put 'put ''ciwwLG9lKTtpZihCbil7dmFyIFZuPVEoWG4pO2lmKFZuJiYhVm4uc3R5bGUmJihWbi5zdHlsZT17fSksKFZuJiZWblsiYmFja2dyb3VuZC1jb2xvciJdfHxCblsiYmFja2dyb3VuZC1jb2xvciJdKSYmKGtyLnN8fChrci5zPXt9KSwha3Iucy5mZ0NvbG9yKSl0cnl7dmFyIEJyPVZuJiZWblsi''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvciJdfHxCblsiYmFja2dyb3VuZC1jb2xvciJdO0JyLm1hdGNoKC9yZ2JhWyhdXHMqMC4qWyldL2kpJiYoQnI9Qm5bImJhY2tncm91bmQtY29sb3IiXSk7dmFyIF9yPUVnKEJyLnRvTG93ZXJDYXNlKCksITApO19yPj0wJiYoa3Iucy5mZ0NvbG9yPXtyZ2I6X3J9KX1j''@;'; put 'put ''YXRjaHt9c3dpdGNoKEJuWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlIm1pZGRsZSI6Y2FzZSJiYXNlbGluZSI6a3Iuc3x8KGtyLnM9e30pLGtyLnMuYWxpZ25tZW50fHwoa3Iucy5hbGlnbm1lbnQ9e30pLGtyLnMuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIifX1pZihlciYmKGtyLnN8fChr''@;'; put 'put ''ci5zPXt9KSwha3Iucy5mZ0NvbG9yKSl0cnl7dmFyIEZuPUVnKGVyLnRvTG93ZXJDYXNlKCksITApO0ZuPj0wJiYoa3Iucy5mZ0NvbG9yPXtyZ2I6Rm59KX1jYXRjaHt9aWYob2UuZGVuc2U/KFNbYnQrZ2VdfHwoU1tidCtnZV09W10pLFNbYnQrZ2VdW2t0K3BlXT1rcik6U1txaSh7YzprdCtw''@;'; put 'put ''ZSxyOmJ0K2dlfSldPWtyLE90PjF8fEt0PjEpZm9yKHZhciBqcj1idDtqcjxidCtPdDsrK2pyKWZvcih2YXIgWmk9a3Q7Wmk8a3QrS3Q7KytaaSlidD09anImJmt0PT1aaXx8KG9lLmRlbnNlPyhTW2pyK2dlXXx8KFNbanIrZ2VdPVtdKSxTW2pyK2dlXVtaaStwZV09e3Q6InoiLHM6cXQoa3Iu''@;'; put 'put ''c3x8e30pfSk6U1txaSh7YzpaaStwZSxyOmpyK2dlfSldPXt0OiJ6IixzOnF0KGtyLnN8fHt9KX0pO05lLmUuYzxrdCtwZSYmKE5lLmUuYz1rdCtwZSksa3QrPUt0fX0rK2J0fX1pZihldC5sZW5ndGgmJihTWyIhbWVyZ2VzIl09KFNbIiFtZXJnZXMiXXx8W10pLmNvbmNhdChldCkpLE5lLmUu''@;'; put 'put ''cj1NYXRoLm1heChOZS5lLnIsYnQtMStnZSksU1siIXJlZiJdPXJhKE5lKSxidD49UGUmJihTWyIhZnVsbHJlZiJdPXJhKChOZS5lLnI9Ry5sZW5ndGgtYXQrYnQtMStnZSxOZSkpKSxvZS5ib3JkZXJzKWZvcihidD1OZS5zLnI7YnQ8PU5lLmUucjsrK2J0KWZvcihrdD1OZS5zLmM7a3Q8PU5l''@;'; put 'put ''LmUuYzsrK2t0KWlmKCFvZS5kZW5zZSl7dmFyIHlpPVNbcWkoe3I6YnQsYzprdH0pXTtpZigheWl8fCF5aS5zKWNvbnRpbnVlO2lmKGJ0PjApe3ZhciBfYT1TW3FpKHtyOmJ0LTEsYzprdH0pXTtfYSYmX2EucyYmX2Eucy5ib3R0b20mJmRlbGV0ZSB5aS5zLnRvcH1pZihrdD4wKXt2YXIgc289''@;'; put 'put ''U1txaSh7cjpidCxjOmt0LTF9KV07c28mJnNvLnMmJnNvLnMuYm90dG9tJiZkZWxldGUgeWkucy5sZWZ0fX1yZXR1cm4gU31mdW5jdGlvbiBqeihTLFIpe3JldHVybiBEYigoUnx8e30pLmRlbnNlP1tdOnt9LFMsUil9dmFyIFhTPWZ1bmN0aW9uKCl7dmFyIFM9ZnVuY3Rpb24oRyxRLG9lKXt2''@;'; put 'put ''YXIgZ2U9Ry5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5yZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oTmUsWWUpe3JldHVybiBBcnJheShwYXJzZUludChZZSwx''@;'; put 'put ''MCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIikscGU9UXIoZ2UucmVwbGFjZSgvPFtePl0qPi9nLCIiKSkseWU9W10sUGU9MDtyZXR1cm4gZ2UucmVwbGFjZSgvKDx0ZXh0OnNwYW4u''@;'; put 'put ''Kj8+KSguKj8pPFtcL110ZXh0OnNwYW4+L2csZnVuY3Rpb24oTmUsWWUsZXQsY3Qpe2N0IT1QZSYmeWUucHVzaCh7dDoicyIsdjpRcihnZS5zbGljZShQZSxjdCkpfSk7dmFyIEV0PXt0OiJzIix2OlFyKGV0KX0sYXQ9dnIoWWUpWyJzdHlsZS1uYW1lIl07cmV0dXJuIGF0JiZvZVthdF0mJihF''@;'; put 'put ''dC5zPXF0KG9lW2F0XSkpLHllLnB1c2goRXQpLFBlPWN0K05lLmxlbmd0aCwiIn0pLFBlPGdlLmxlbmd0aCYmeWUucHVzaCh7dDoicyIsdjpRcihnZS5zbGljZShQZSkpfSksW3BlLHllXX0sUj17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6''@;'; put 'put ''WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpbInMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX0saz1mdW5jdGlvbihH''@;'; put 'put ''LFEpe3ZhciBvZT12cihHLnNsaWNlKDAsRy5pbmRleE9mKCI+IikpKSxnZT1HLnNsaWNlKEcuaW5kZXhPZigiPiIpKzEpLHBlPXtuYW1lOm9lLm5hbWUsZmFtaWx5Om9lLmZhbWlseX07W1sicGFyZW50IiwicGFyZW50LXN0eWxlLW5hbWUiXSxbImRhdGFuYW1lIiwiZGF0YS1zdHlsZS1uYW1l''@;'; put 'put ''Il0sWyJtcG5hbWUiLCJtYXN0ZXItcGFnZS1uYW1lIl1dLmZvckVhY2goZnVuY3Rpb24oUGUpe29lW1BlWzFdXSYmKHBlW1BlWzBdXT1vZVtQZVsxXV0pfSk7dmFyIHllPXt9O2dlLnJlcGxhY2UoZW4sZnVuY3Rpb24oUGUpe3ZhciBOZT12cihQZSk7aWYoIjxzdHlsZTp0ZXh0LXByb3BlcnRp''@;'; put 'put ''ZXMiPT09TmVbMF0pe2lmKE5lWyJmb250LXdlaWdodCJdJiYoeWUuYm9sZD0rKCJib2xkIj09TmVbImZvbnQtd2VpZ2h0Il18fCI3MDAiPT1OZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09TmVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1OZVsiZm9udC1zdHlsZSJdKSYmKHllLml0''@;'; put 'put ''YWxpYz0xKSwibm9uZSIhPShOZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT95ZS51bmRlcmxpbmU9ImRvdWJsZSI9PU5lWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihOZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1OZVsidGV4dC11bmRlcmxpbmUtdHlw''@;'; put 'put ''ZSJdKSYmKHllLnVuZGVybGluZT0wKSwoTmVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8pJiYoeWUuc3o9K05lWyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShOZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYmKHllLnN0cmlrZT0xKSxO''@;'; put 'put ''ZVsiZm9udC1uYW1lIl0mJih5ZS5uYW1lPU5lWyJmb250LW5hbWUiXSksTmUuY29sb3Ipe3ZhciBZZT1FZyhOZS5jb2xvciwhMCk7WWU+PTAmJih5ZS5jb2xvcj1ZZSl9c3dpdGNoKE5lWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOnllLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''c3ViIjp5ZS52YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooTmVbInRleHQtcG9zaXRpb24iXXx8IiIpLm1hdGNoKC8lLykmJih5ZS52YWxpZ249Ii0iPT1OZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShOZVsidGV4dC1zaGFkb3ciXXx8Im5v''@;'; put 'put ''bmUiKSYmKHllLnNoYWRvdz0xKX1yZXR1cm4iIn0pLFFbb2UubmFtZV09eWV9O3JldHVybiBmdW5jdGlvbihRLG9lKXt2YXIgZ2U9b2V8fHt9O251bGwhPWxlJiZudWxsPT1nZS5kZW5zZSYmKGdlLmRlbnNlPWxlKTt2YXIgUGUsTmUsRXQsYXQsT3QsS3QscGU9V1MoUSkseWU9W10sWWU9e25h''@;'; put 'put ''bWU6IiJ9LGV0PSIiLGN0PTAsYnQ9e30sanQ9W10sa3Q9Z2UuZGVuc2U/W106e30sVG49e3ZhbHVlOiIifSxycj0iIixTbj0wLFhuPVtdLEJuPS0xLGZyPS0xLGJyPXtzOntyOjFlNixjOjFlN30sZTp7cjowLGM6MH19LGVyPTAsTWk9e30sRmk9W10sbmE9e30sY2E9MCxMaT0wLGtyPVtdLFZu''@;'; put 'put ''PTEsQnI9MSxfcj1bXSxGbj17TmFtZXM6W119LGpyPXt9LFppPVsiIiwiIl0seWk9W10sX2E9e30sc289e30saWE9MCxMbz0iIixPYT0wLGhvPSExLEphPSExLEJpPTA7Zm9yKFlnLmxhc3RJbmRleD0wLHBlPXBlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88''@;'; put 'put ''IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIik7T3Q9WWcuZXhlYyhwZSk7KXN3aXRjaChPdFszXT1PdFszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT1PdFsxXT8oa3RbIiFyZWYiXT1ici5lLmM+PWJyLnMuYyYm''@;'; put 'put ''YnIuZS5yPj1ici5zLnI/cmEoYnIpOiJBMTpBMSIsZ2Uuc2hlZXRSb3dzPjAmJmdlLnNoZWV0Um93czw9YnIuZS5yJiYoa3RbIiFmdWxscmVmIl09a3RbIiFyZWYiXSxici5lLnI9Z2Uuc2hlZXRSb3dzLTEsa3RbIiFyZWYiXT1yYShicikpLEZpLmxlbmd0aCYmKGt0WyIhbWVyZ2VzIl09Rmkp''@;'; put 'put ''LGtyLmxlbmd0aCYmKGt0WyIhcm93cyJdPWtyKSxFdC5uYW1lPUV0Llx1NTQwZFx1NzlmMHx8RXQubmFtZSx0eXBlb2YgSlNPTjwidSImJkpTT04uc3RyaW5naWZ5KEV0KSxqdC5wdXNoKEV0Lm5hbWUpLGJ0W0V0Lm5hbWVdPWt0LEphPSExKToiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVu''@;'; put 'put ''Z3RoLTIpJiYoRXQ9dnIoT3RbMF0sITEpLEJuPWZyPS0xLGJyLnMucj1ici5zLmM9MWU3LGJyLmUucj1ici5lLmM9MCxrdD1nZS5kZW5zZT9bXTp7fSxGaT1bXSxrcj1bXSxKYT0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PU90WzFdPy0tZXI6KytlcjticmVhaztjYXNl''@;'; put 'put ''InRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PU90WzFdKXtCbis9Vm4sVm49MTticmVha31pZigoYXQ9dnIoT3RbMF0sITEpKS5cdTg4NGNcdTUzZjc/Qm49YXQuXHU4ODRjXHU1M2Y3LTE6LTE9PUJuJiYoQm49MCksKFZuPSthdFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8''@;'; put 'put ''MTApZm9yKEJpPTA7Qmk8Vm47KytCaSllcj4wJiYoa3JbQm4rQmldPXtsZXZlbDplcn0pO2ZyPS0xO2JyZWFrO2Nhc2UiY292ZXJlZC10YWJsZS1jZWxsIjoiLyIhPT1PdFsxXSYmKytmcixnZS5zaGVldFN0dWJzJiYoZ2UuZGVuc2U/KGt0W0JuXXx8KGt0W0JuXT1bXSksa3RbQm5dW2ZyXT17''@;'; put 'put ''dDoieiJ9KTprdFtxaSh7cjpCbixjOmZyfSldPXt0OiJ6In0pLHJyPSIiLFhuPVtdO2JyZWFrO2Nhc2UidGFibGUtY2VsbCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikpKytmcixUbj12cihPdFswXSwhMSksQnI9cGFyc2VJbnQoVG5b''@;'; put 'put ''Im51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksS3Q9e3Q6InoiLHY6bnVsbH0sVG4uZm9ybXVsYSYmMCE9Z2UuY2VsbEZvcm11bGEmJihLdC5mPWlTKFFyKFRuLmZvcm11bGEpKSksInN0cmluZyI9PShUbi5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fFRuWyJ2YWx1ZS10eXBl''@;'; put 'put ''Il0pJiYoS3QudD0icyIsS3Qudj1RcihUblsic3RyaW5nLXZhbHVlIl18fCIiKSxnZS5kZW5zZT8oa3RbQm5dfHwoa3RbQm5dPVtdKSxrdFtCbl1bZnJdPUt0KTprdFtxaSh7cjpCbixjOmZyfSldPUt0KSxmcis9QnItMTtlbHNlIGlmKCIvIiE9PU90WzFdKXtCcj0xO3ZhciBJcz1Wbj9CbitW''@;'; put 'put ''bi0xOkJuO2lmKCsrZnI+YnIuZS5jJiYoYnIuZS5jPWZyKSxmcjxici5zLmMmJihici5zLmM9ZnIpLEJuPGJyLnMuciYmKGJyLnMucj1CbiksSXM+YnIuZS5yJiYoYnIuZS5yPUlzKSx5aT1bXSxfYT17fSxLdD17dDooVG49dnIoT3RbMF0sITEpKS5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8''@;'; put 'put ''fFRuWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxnZS5jZWxsRm9ybXVsYSlpZihUbi5mb3JtdWxhJiYoVG4uZm9ybXVsYT1RcihUbi5mb3JtdWxhKSksVG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0mJlRuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoY2E9cGFyc2VJ''@;'; put 'put ''bnQoVG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0sMTApfHwwLExpPXBhcnNlSW50KFRuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxLdC5GPXJhKG5hPXtzOntyOkJuLGM6ZnJ9LGU6e3I6Qm4rY2EtMSxjOmZyK0xpLTF9fSksX3IucHVzaChbbmEsS3Qu''@;'; put 'put ''Rl0pKSxUbi5mb3JtdWxhKUt0LmY9aVMoVG4uZm9ybXVsYSk7ZWxzZSBmb3IoQmk9MDtCaTxfci5sZW5ndGg7KytCaSlCbj49X3JbQmldWzBdLnMuciYmQm48PV9yW0JpXVswXS5lLnImJmZyPj1fcltCaV1bMF0ucy5jJiZmcjw9X3JbQmldWzBdLmUuYyYmKEt0LkY9X3JbQmldWzFdKTtzd2l0''@;'; put 'put ''Y2goKFRuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fFRuWyJudW1iZXItcm93cy1zcGFubmVkIl0pJiYoY2E9cGFyc2VJbnQoVG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsTGk9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsRmkucHVzaChu''@;'; put 'put ''YT17czp7cjpCbixjOmZyfSxlOntyOkJuK2NhLTEsYzpmcitMaS0xfX0pKSxUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSYmKEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdLDEwKSksS3QudCl7Y2FzZSJib29sZWFuIjpLdC50PSJiIixLdC52PXRpKFRuWyJi''@;'; put 'put ''b29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6S3QudD0ibiIsS3Qudj1wYXJzZUZsb2F0KFRuLnZhbHVlKTticmVhaztjYXNlImRhdGUiOkt0LnQ9ImQiLEt0LnY9SGUoVG5bImRhdGUtdmFsdWUiXSksZ2UuY2VsbERhdGVz''@;'; put 'put ''fHwoS3QudD0ibiIsS3Qudj1RZShLdC52KSksS3Quej0ibS9kL3l5IjticmVhaztjYXNlInRpbWUiOkt0LnQ9Im4iLEt0LnY9aXQoVG5bInRpbWUtdmFsdWUiXSkvODY0MDAsZ2UuY2VsbERhdGVzJiYoS3QudD0iZCIsS3Qudj11bihLdC52KSksS3Quej0iSEg6TU06U1MiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bnVtYmVyIjpLdC50PSJuIixLdC52PXBhcnNlRmxvYXQoVG4uXHU2NTcwXHU2MzZlXHU2NTcwXHU1MDNjKTticmVhaztkZWZhdWx0OmlmKCJzdHJpbmciIT09S3QudCYmInRleHQiIT09S3QudCYmS3QudCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgIitLdC50KTtL''@;'; put 'put ''dC50PSJzIixudWxsIT1Ublsic3RyaW5nLXZhbHVlIl0mJihycj1RcihUblsic3RyaW5nLXZhbHVlIl0pLFhuPVtdKX19ZWxzZXtpZihobz0hMSwicyI9PT1LdC50JiYoS3Qudj1ycnx8IiIsWG4ubGVuZ3RoJiYoS3QuUj1YbiksaG89MD09U24pLGpyLlRhcmdldCYmKEt0Lmw9anIpLHlpLmxl''@;'; put 'put ''bmd0aD4wJiYoS3QuYz15aSx5aT1bXSkscnImJiExIT09Z2UuY2VsbFRleHQmJihLdC53PXJyKSxobyYmKEt0LnQ9InoiLGRlbGV0ZSBLdC52KSxnZS5jZWxsSFRNTCYmKEt0Lmg9S3QuUj9OdShLdC5SKTpsYSgiIitLdC52KSksKCFob3x8Z2Uuc2hlZXRTdHVicykmJiEoZ2Uuc2hlZXRSb3dz''@;'; put 'put ''JiZnZS5zaGVldFJvd3M8PUJuKSlmb3IodmFyIFBuPTA7UG48Vm47KytQbil7aWYoQnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksZ2UuZGVuc2UpZm9yKGt0W0JuK1BuXXx8KGt0W0JuK1BuXT1bXSksa3RbQm4rUG5dW2ZyXT0wPT1Qbj9LdDpxdChL''@;'; put 'put ''dCk7LS1Ccj4wOylrdFtCbitQbl1bZnIrQnJdPXF0KEt0KTtlbHNlIGZvcihrdFtxaSh7cjpCbitQbixjOmZyfSldPUt0Oy0tQnI+MDspa3RbcWkoe3I6Qm4rUG4sYzpmcitCcn0pXT1xdChLdCk7YnIuZS5jPD1mciYmKGJyLmUuYz1mcil9ZnIrPShCcj1wYXJzZUludChUblsibnVtYmVyLWNv''@;'; put 'put ''bHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSktMSxCcj0wLEt0PXt9LHJyPSIiLFhuPVtdfWpyPXt9O2JyZWFrO2Nhc2UiZG9jdW1lbnQiOmNhc2UiZG9jdW1lbnQtY29udGVudCI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2NcdTY1ODdcdTY4NjMiOmNhc2Uic3ByZWFkc2hlZXQiOmNh''@;'; put 'put ''c2UiXHU0ZTNiXHU0ZjUzIjpjYXNlInNjcmlwdHMiOmNhc2Uic3R5bGVzIjpjYXNlImZvbnQtZmFjZS1kZWNscyI6Y2FzZSJtYXN0ZXItc3R5bGVzIjppZigiLyI9PT1PdFsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZX1lbHNlIi8iIT09T3Rb''@;'; put 'put ''MF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmeWUucHVzaChbT3RbM10sITBdKTticmVhaztjYXNlImFubm90YXRpb24iOmlmKCIvIj09PU90WzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlO19hLnQ9cnIsWG4ubGVuZ3RoJiYoX2EuUj1Ybiks''@;'; put 'put ''X2EuYT1Mbyx5aS5wdXNoKF9hKX1lbHNlIi8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmeWUucHVzaChbT3RbM10sITFdKTtMbz0iIixPYT0wLHJyPSIiLFNuPTAsWG49W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT1PdFsxXT9Mbz1wZS5zbGljZShPYSxPdC5pbmRleCk6''@;'; put 'put ''T2E9T3QuaW5kZXgrT3RbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibWV0YSI6Y2FzZSJcdTUxNDNcdTY1NzBcdTYzNmUiOmNhc2Uic2V0dGluZ3MiOmNhc2UiY29uZmlnLWl0ZW0tc2V0IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1pbmRleGVkIjpjYXNlImNvbmZpZy1pdGVtLW1hcC1lbnRyeSI6Y2Fz''@;'; put 'put ''ZSJjb25maWctaXRlbS1tYXAtbmFtZWQiOmNhc2Uic2hhcGVzIjpjYXNlImZyYW1lIjpjYXNlInRleHQtYm94IjpjYXNlImltYWdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGVzIjpjYXNlImxpc3Qtc3R5bGUiOmNhc2UiZm9ybSI6Y2FzZSJkZGUtbGlua3MiOmNhc2UiZXZlbnQtbGlzdGVuZXJz''@;'; put 'put ''IjpjYXNlImNoYXJ0IjppZigiLyI9PT1PdFsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZX1lbHNlIi8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmeWUucHVzaChbT3RbM10sITFdKTtycj0iIixTbj0wLFhuPVtdO2JyZWFrO2Nh''@;'; put 'put ''c2Uic2NpZW50aWZpYy1udW1iZXIiOmNhc2UiY3VycmVuY3ktc3ltYm9sIjpjYXNlImN1cnJlbmN5LXN0eWxlIjpjYXNlInNjcmlwdCI6Y2FzZSJsaWJyYXJpZXMiOmNhc2UiYXV0b21hdGljLXN0eWxlcyI6Y2FzZSJkZWZhdWx0LXN0eWxlIjpjYXNlInBhZ2UtbGF5b3V0IjpjYXNlIm1hcCI6''@;'; put 'put ''Y2FzZSJmb250LWZhY2UiOmNhc2UicGFyYWdyYXBoLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jb2x1bW4tcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1yb3ctcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jZWxsLXByb3BlcnRpZXMiOmNhc2UiZnJhY3Rpb24i''@;'; put 'put ''OmNhc2UiYm9vbGVhbi1zdHlsZSI6Y2FzZSJib29sZWFuIjpjYXNlInRleHQtc3R5bGUiOmNhc2UidGV4dC1jb250ZW50IjpjYXNlInRleHQtcHJvcGVydGllcyI6Y2FzZSJlbWJlZGRlZC10ZXh0IjpjYXNlImJvZHkiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjIjpjYXNlImZvcm1z''@;'; put 'put ''IjpjYXNlInRhYmxlLWNvbHVtbiI6Y2FzZSJ0YWJsZS1oZWFkZXItcm93cyI6Y2FzZSJ0YWJsZS1yb3dzIjpjYXNlInRhYmxlLWNvbHVtbi1ncm91cCI6Y2FzZSJ0YWJsZS1oZWFkZXItY29sdW1ucyI6Y2FzZSJ0YWJsZS1jb2x1bW5zIjpjYXNlIm51bGwtZGF0ZSI6Y2FzZSJncmFwaGljLXBy''@;'; put 'put ''b3BlcnRpZXMiOmNhc2UiY2FsY3VsYXRpb24tc2V0dGluZ3MiOmNhc2UibmFtZWQtZXhwcmVzc2lvbnMiOmNhc2UibGFiZWwtcmFuZ2UiOmNhc2UibGFiZWwtcmFuZ2VzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb24iOmNhc2Uic29ydCI6Y2FzZSJzb3J0LWJ5IjpjYXNlInNvcnQtZ3JvdXBzIjpj''@;'; put 'put ''YXNlInRhYiI6Y2FzZSJsaW5lLWJyZWFrIjpjYXNlInNwYW4iOmNhc2UicyI6Y2FzZSJkYXRlIjpjYXNlIm9iamVjdCI6Y2FzZSJ0aXRsZSI6Y2FzZSJcdTY4MDdcdTk4OTgiOmNhc2UiZGVzYyI6Y2FzZSJiaW5hcnktZGF0YSI6Y2FzZSJ0YWJsZS1zb3VyY2UiOmNhc2Uic2NlbmFyaW8iOmNh''@;'; put 'put ''c2UiaXRlcmF0aW9uIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbnMiOmNhc2UiY29udGVudC12YWxpZGF0aW9uIjpjYXNlImhlbHAtbWVzc2FnZSI6Y2FzZSJlcnJvci1tZXNzYWdlIjpjYXNlImRhdGFiYXNlLXJhbmdlcyI6Y2FzZSJmaWx0ZXIiOmNhc2UiZmlsdGVyLWFuZCI6Y2FzZSJmaWx0''@;'; put 'put ''ZXItb3IiOmNhc2UiZmlsdGVyLWNvbmRpdGlvbiI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLWJ1bGxldCI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLW51bWJlciI6Y2FzZSJsaXN0LWxldmVsLXByb3BlcnRpZXMiOmNhc2Uic2VuZGVyLWZpcnN0bmFtZSI6Y2FzZSJzZW5kZXItbGFzdG5hbWUiOmNh''@;'; put 'put ''c2Uic2VuZGVyLWluaXRpYWxzIjpjYXNlInNlbmRlci10aXRsZSI6Y2FzZSJzZW5kZXItcG9zaXRpb24iOmNhc2Uic2VuZGVyLWVtYWlsIjpjYXNlInNlbmRlci1waG9uZS1wcml2YXRlIjpjYXNlInNlbmRlci1mYXgiOmNhc2Uic2VuZGVyLWNvbXBhbnkiOmNhc2Uic2VuZGVyLXBob25lLXdv''@;'; put 'put ''cmsiOmNhc2Uic2VuZGVyLXN0cmVldCI6Y2FzZSJzZW5kZXItY2l0eSI6Y2FzZSJzZW5kZXItcG9zdGFsLWNvZGUiOmNhc2Uic2VuZGVyLWNvdW50cnkiOmNhc2Uic2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlIjpjYXNlImF1dGhvci1uYW1lIjpjYXNlImF1dGhvci1pbml0aWFscyI6Y2FzZSJj''@;'; put 'put ''aGFwdGVyIjpjYXNlImZpbGUtbmFtZSI6Y2FzZSJ0ZW1wbGF0ZS1uYW1lIjpjYXNlInNoZWV0LW5hbWUiOmNhc2UiZXZlbnQtbGlzdGVuZXIiOmNhc2UiaW5pdGlhbC1jcmVhdG9yIjpjYXNlImNyZWF0aW9uLWRhdGUiOmNhc2UicHJpbnQtZGF0ZSI6Y2FzZSJnZW5lcmF0b3IiOmNhc2UiZG9j''@;'; put 'put ''dW1lbnQtc3RhdGlzdGljIjpjYXNlInVzZXItZGVmaW5lZCI6Y2FzZSJlZGl0aW5nLWR1cmF0aW9uIjpjYXNlImVkaXRpbmctY3ljbGVzIjpjYXNlImNvbmZpZy1pdGVtIjpjYXNlInBhZ2UtbnVtYmVyIjpjYXNlInBhZ2UtY291bnQiOmNhc2UidGltZSI6Y2FzZSJjZWxsLXJhbmdlLXNvdXJj''@;'; put 'put ''ZSI6Y2FzZSJkZXRlY3RpdmUiOmNhc2Uib3BlcmF0aW9uIjpjYXNlImhpZ2hsaWdodGVkLXJhbmdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGUiOmNhc2Uic291cmNlLWNlbGwtcmFuZ2UiOmNhc2Uic291cmNlLXNlcnZpY2UiOmNhc2UiZGF0YS1waWxvdC1maWVsZCI6Y2FzZSJkYXRhLXBpbG90''@;'; put 'put ''LWxldmVsIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWxzIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWwiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXJzIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVyIjpjYXNlImRhdGEtcGlsb3QtZGlzcGxheS1pbmZvIjpjYXNlImRhdGEtcGlsb3Qtc29ydC1pbmZv''@;'; put 'put ''IjpjYXNlImRhdGEtcGlsb3QtbGF5b3V0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1maWVsZC1yZWZlcmVuY2UiOmNhc2UiZGF0YS1waWxvdC1ncm91cHMiOmNhc2UiZGF0YS1waWxvdC1ncm91cCI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwLW1lbWJlciI6Y2FzZSJyZWN0IjpjYXNlImRkZS1jb25u''@;'; put 'put ''ZWN0aW9uLWRlY2xzIjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2wiOmNhc2UiZGRlLWxpbmsiOmNhc2UiZGRlLXNvdXJjZSI6Y2FzZSJwcm9wZXJ0aWVzIjpjYXNlInByb3BlcnR5IjpjYXNlInRhYmxlLXByb3RlY3Rpb24iOmNhc2UiZGF0YS1waWxvdC1ncmFuZC10b3RhbCI6Y2FzZSJvZmZp''@;'; put 'put ''Y2UtZG9jdW1lbnQtY29tbW9uLWF0dHJzIjpicmVhaztjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJwZXJjZW50YWdlLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6aWYoIi8iPT09T3RbMV0pe2lmKE1pW1llLm5hbWVdPWV0LChQZT15ZS5wb3AoKSlbMF0hPT1PdFsz''@;'; put 'put ''XSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJihldD0iIixZZT12cihPdFswXSwhMSkseWUucHVzaChbT3RbM10sITBdKSk7YnJlYWs7Y2FzZSJzdHlsZSI6Ii8+Ij09PU90WzBdLnNsaWNlKC0yKT9rKE90WzBdLHNvKToiLyI9''@;'; put 'put ''PU90WzFdP2socGUuc2xpY2UoaWEsT3QuaW5kZXgrT3RbMF0ubGVuZ3RoKSxzbyk6aWE9T3QuaW5kZXg7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiZGF5IjpjYXNlIm1vbnRoIjpjYXNlInllYXIiOmNhc2UiZXJhIjpjYXNlImRheS1vZi13ZWVrIjpjYXNlIndlZWstb2YteWVhciI6Y2FzZSJx''@;'; put 'put ''dWFydGVyIjpjYXNlImhvdXJzIjpjYXNlIm1pbnV0ZXMiOmNhc2Uic2Vjb25kcyI6Y2FzZSJhbS1wbSI6c3dpdGNoKHllW3llLmxlbmd0aC0xXVswXSl7Y2FzZSJ0aW1lLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOk5lPXZyKE90WzBdLCExKSxldCs9UltPdFszXV1bImxvbmciPT09TmUuc3R5''@;'; put 'put ''bGU/MTowXX1icmVhaztjYXNlInRleHQiOmlmKCIvPiI9PT1PdFswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09T3RbMV0pc3dpdGNoKHllW3llLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpldCs9cGUuc2xpY2Uo''@;'; put 'put ''Y3QsT3QuaW5kZXgpfWVsc2UgY3Q9T3QuaW5kZXgrT3RbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibmFtZWQtcmFuZ2UiOlppPWFiKChOZT12cihPdFswXSwhMSkpWyJjZWxsLXJhbmdlLWFkZHJlc3MiXSk7dmFyIFdvPXtOYW1lOk5lLm5hbWUsUmVmOlppWzBdKyIhIitaaVsxXX07SmEmJihXby5T''@;'; put 'put ''aGVldD1qdC5sZW5ndGgpLEZuLk5hbWVzLnB1c2goV28pO2JyZWFrO2Nhc2UicCI6Y2FzZSJcdTY1ODdcdTY3MmNcdTRlMzIiOmlmKFsibWFzdGVyLXN0eWxlcyJdLmluZGV4T2YoeWVbeWUubGVuZ3RoLTFdWzBdKT4tMSlicmVhaztpZigiLyIhPT1PdFsxXXx8VG4mJlRuWyJzdHJpbmctdmFs''@;'; put 'put ''dWUiXSl2cihPdFswXSwhMSksU249T3QuaW5kZXgrT3RbMF0ubGVuZ3RoO2Vsc2V7dmFyIGhyPVMocGUuc2xpY2UoU24sT3QuaW5kZXgpLDAsc28pO3JyPShyci5sZW5ndGg+MD9ycisiXG4iOiIiKStoclswXSxYbj1oclsxXX1icmVhaztjYXNlImRhdGFiYXNlLXJhbmdlIjppZigiLyI9PT1P''@;'; put 'put ''dFsxXSlicmVhazt0cnl7YnRbKFppPWFiKHZyKE90WzBdKVsidGFyZ2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOlppWzFdfX1jYXRjaHt9YnJlYWs7Y2FzZSJhIjppZigiLyIhPT1PdFsxXSl7aWYoIShqcj12cihPdFswXSwhMSkpLmhyZWYpYnJlYWs7anIu''@;'; put 'put ''VGFyZ2V0PVFyKGpyLmhyZWYpLGRlbGV0ZSBqci5ocmVmLCIjIj09anIuVGFyZ2V0LmNoYXJBdCgwKSYmanIuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oWmk9YWIoanIuVGFyZ2V0LnNsaWNlKDEpKSxqci5UYXJnZXQ9IiMiK1ppWzBdKyIhIitaaVsxXSk6anIuVGFyZ2V0Lm1hdGNoKC9eXC5c''@;'; put 'put ''LltcXFwvXS8pJiYoanIuVGFyZ2V0PWpyLlRhcmdldC5zbGljZSgzKSl9YnJlYWs7ZGVmYXVsdDpzd2l0Y2goT3RbMl0pe2Nhc2UiZGM6IjpjYXNlImNhbGNleHQ6IjpjYXNlImxvZXh0OiI6Y2FzZSJvb286IjpjYXNlImNoYXJ0b29vOiI6Y2FzZSJkcmF3OiI6Y2FzZSJzdHlsZToiOmNhc2Ui''@;'; put 'put ''Y2hhcnQ6IjpjYXNlImZvcm06IjpjYXNlInVvZjoiOmNhc2UiXHU4ODY4OiI6Y2FzZSJcdTViNTc6IjpicmVhaztkZWZhdWx0OmlmKGdlLldURil0aHJvdyBuZXcgRXJyb3IoT3QpfX12YXIgUWw9e1NoZWV0czpidCxTaGVldE5hbWVzOmp0LFdvcmtib29rOkZufTtyZXR1cm4gZ2UuYm9va1No''@;'; put 'put ''ZWV0cyYmZGVsZXRlIFFsLlNoZWV0cyxRbH19KCk7ZnVuY3Rpb24gREkoUyxSKXtyZXR1cm4gWFMoUyxSKX12YXIgVXo9ZnVuY3Rpb24oKXt2YXIgUz1bIiAgPG9mZmljZTptYXN0ZXItc3R5bGVzPiIsJyAgICA8c3R5bGU6bWFzdGVyLXBhZ2Ugc3R5bGU6bmFtZT0ibXAxIiBzdHlsZTpwYWdl''@;'; put 'put ''LWxheW91dC1uYW1lPSJtcDEiPicsIiAgICAgIDxzdHlsZTpoZWFkZXIvPiIsJyAgICAgIDxzdHlsZTpoZWFkZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICAgIDxzdHlsZTpmb290ZXIvPiIsJyAgICAgIDxzdHlsZTpmb290ZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxz''@;'; put 'put ''ZSIvPicsIiAgICA8L3N0eWxlOm1hc3Rlci1wYWdlPiIsIiAgPC9vZmZpY2U6bWFzdGVyLXN0eWxlcz4iXS5qb2luKCJcbiIpLFI9IjxvZmZpY2U6ZG9jdW1lbnQtc3R5bGVzICIrUnUoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmlj''@;'; put 'put ''ZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6''@;'; put 'put ''dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6''@;'; put 'put ''MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIs''@;'; put 'put ''InhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pKyI+XG4iK1MrIlxu''@;'; put 'put ''PC9vZmZpY2U6ZG9jdW1lbnQtc3R5bGVzPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIElpK1J9fSgpLFA4PWZ1bmN0aW9uKCl7dmFyIFM9ZnVuY3Rpb24ocGUseWUpe3JldHVybiBMcihwZSkucmVwbGFjZSgvICArL2csZnVuY3Rpb24oUGUpe3JldHVybic8dGV4dDpzIHRleHQ6Yz0iJytQ''@;'; put 'put ''ZS5sZW5ndGgrJyIvPid9KS5yZXBsYWNlKC9cdC9nLCI8dGV4dDp0YWIvPiIpLnJlcGxhY2UoL1xuL2cseWU/Ijx0ZXh0OmxpbmUtYnJlYWsvPiI6IjwvdGV4dDpwPjx0ZXh0OnA+IikucmVwbGFjZSgvXiAvLCI8dGV4dDpzLz4iKS5yZXBsYWNlKC8gJC8sIjx0ZXh0OnMvPiIpfSxSPWZ1bmN0''@;'; put 'put ''aW9uKHBlKXtyZXR1cm4gcGUubWFwKGZ1bmN0aW9uKHllKXt2YXIgUGU9IiI7cmV0dXJuIG51bGwhPXllLm9kcyYmKFBlKz0nIHRleHQ6c3R5bGUtbmFtZT0iVCcreWUub2RzKyciJykseWUudj8iPHRleHQ6c3BhbiIrUGUrIj4iK1MoeWUudiwhMCkrIjwvdGV4dDpzcGFuPiI6IiJ9KS5qb2lu''@;'; put 'put ''KCIiKX0saz0iICAgICAgICAgIDx0YWJsZTp0YWJsZS1jZWxsIC8+XG4iLFE9ZnVuY3Rpb24ocGUseWUsUGUpe3ZhciBOZT1bXTtOZS5wdXNoKCcgICAgICA8dGFibGU6dGFibGUgdGFibGU6bmFtZT0iJytMcih5ZS5TaGVldE5hbWVzW1BlXSkrJyIgdGFibGU6c3R5bGUtbmFtZT0idGExIj5c''@;'; put 'put ''bicpO3ZhciBZZT0wLGV0PTAsY3Q9TXMocGVbIiFyZWYiXXx8IkExIiksRXQ9cGVbIiFtZXJnZXMiXXx8W10sYXQ9MCxidD1BcnJheS5pc0FycmF5KHBlKTtpZihwZVsiIWNvbHMiXSlmb3IoZXQ9MDtldDw9Y3QuZS5jOysrZXQpTmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtY29sdW1u''@;'; put 'put ''IisocGVbIiFjb2xzIl1bZXRdPycgdGFibGU6c3R5bGUtbmFtZT0iY28nK3BlWyIhY29scyJdW2V0XS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtY29sdW1uPlxuIik7dmFyIGt0PXBlWyIhcm93cyJdfHxbXTtmb3IoWWU9MDtZZTxjdC5zLnI7KytZZSlOZS5wdXNoKCIgICAgICAgIDx0''@;'; put 'put ''YWJsZTp0YWJsZS1yb3ciKyhrdFtZZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycra3RbWWVdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1yb3c+XG4iKTtmb3IoO1llPD1jdC5lLnI7KytZZSl7Zm9yKE5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W1llXT8nIHRh''@;'; put 'put ''YmxlOnN0eWxlLW5hbWU9InJvJytrdFtZZV0ub2RzKyciJzoiIikrIj5cbiIpLGV0PTA7ZXQ8Y3Qucy5jOysrZXQpTmUucHVzaChrKTtmb3IoO2V0PD1jdC5lLmM7KytldCl7dmFyIE90PSExLEt0PXt9LFRuPSIiO2ZvcihhdD0wO2F0IT1FdC5sZW5ndGg7KythdClpZighKEV0W2F0XS5zLmM+''@;'; put 'put ''ZXR8fEV0W2F0XS5zLnI+WWV8fEV0W2F0XS5lLmM8ZXR8fEV0W2F0XS5lLnI8WWUpKXsoRXRbYXRdLnMuYyE9ZXR8fEV0W2F0XS5zLnIhPVllKSYmKE90PSEwKSxLdFsidGFibGU6bnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdPUV0W2F0XS5lLmMtRXRbYXRdLnMuYysxLEt0WyJ0YWJsZTpudW1i''@;'; put 'put ''ZXItcm93cy1zcGFubmVkIl09RXRbYXRdLmUuci1FdFthdF0ucy5yKzE7YnJlYWt9aWYoT3QpTmUucHVzaCgiICAgICAgICAgIDx0YWJsZTpjb3ZlcmVkLXRhYmxlLWNlbGwvPlxuIik7ZWxzZXt2YXIgcnI9cWkoe3I6WWUsYzpldH0pLFNuPWJ0PyhwZVtZZV18fFtdKVtldF06cGVbcnJdO2lm''@;'; put 'put ''KFNuJiZTbi5mJiYoS3RbInRhYmxlOmZvcm11bGEiXT1McihaNChTbi5mKSksU24uRiYmU24uRi5zbGljZSgwLHJyLmxlbmd0aCk9PXJyKSl7dmFyIGxyPU1zKFNuLkYpO0t0WyJ0YWJsZTpudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdPWxyLmUuYy1sci5zLmMrMSxLdFsidGFibGU6''@;'; put 'put ''bnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXT1sci5lLnItbHIucy5yKzF9aWYoU24pe3N3aXRjaChTbi50KXtjYXNlImIiOlRuPVNuLnY/IlRSVUUiOiJGQUxTRSIsS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09ImJvb2xlYW4iLEt0WyJvZmZpY2U6Ym9vbGVhbi12YWx1ZSJdPVNuLnY/InRy''@;'; put 'put ''dWUiOiJmYWxzZSI7YnJlYWs7Y2FzZSJuIjpUbj1Tbi53fHxTdHJpbmcoU24udnx8MCksS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09ImZsb2F0IixLdFsib2ZmaWNlOnZhbHVlIl09U24udnx8MDticmVhaztjYXNlInMiOmNhc2Uic3RyIjpUbj1Tbi52LEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJd''@;'; put 'put ''PSJzdHJpbmciO2JyZWFrO2Nhc2UiZCI6VG49U24ud3x8SGUoU24udikudG9JU09TdHJpbmcoKSxLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZGF0ZSIsS3RbIm9mZmljZTpkYXRlLXZhbHVlIl09SGUoU24udikudG9JU09TdHJpbmcoKSxLdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZTEiO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6TmUucHVzaChrKTtjb250aW51ZX1udWxsIT1Tbi5vZHMmJiFLdFsidGFibGU6c3R5bGUtbmFtZSJdJiYoS3RbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UiK1NuLm9kcyk7dmFyIFhuPSFTbi5SfHxTbi5sJiZTbi5sLlRhcmdldD9TKFRuKTpSKFNuLlIpO2lmKFNuLmwmJlNu''@;'; put 'put ''LmwuVGFyZ2V0KXt2YXIgQm49U24ubC5UYXJnZXQ7IiMiIT0oQm49IiMiPT1Cbi5jaGFyQXQoMCk/IiMiK3BEKEJuLnNsaWNlKDEpKTpCbikuY2hhckF0KDApJiYhQm4ubWF0Y2goL15cdys6LykmJihCbj0iLi4vIitCbiksWG49UHIoInRleHQ6YSIsWG4seyJ4bGluazpocmVmIjpCbi5yZXBs''@;'; put 'put ''YWNlKC8mL2csIiZhbXA7Iil9KX1OZS5wdXNoKCIgICAgICAgICAgIitQcigidGFibGU6dGFibGUtY2VsbCIsUHIoInRleHQ6cCIsWG4se30pLEt0KSsiXG4iKX1lbHNlIE5lLnB1c2goayl9fU5lLnB1c2goIiAgICAgICAgPC90YWJsZTp0YWJsZS1yb3c+XG4iKX1yZXR1cm4gTmUucHVzaCgi''@;'; put 'put ''ICAgICAgPC90YWJsZTp0YWJsZT5cbiIpLE5lLmpvaW4oIiIpfSxvZT17Y2VudGVyOiJjZW50ZXIiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07cmV0dXJuIGZ1bmN0aW9uKHllLFBlKXt2YXIgTmU9W0lpXSxZZT1SdSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVu''@;'; put 'put ''ZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4''@;'; put 'put ''dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxu''@;'; put 'put ''czp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bWV0YSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1s''@;'; put 'put ''bnM6bWV0YToxLjAiLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpwcmVzZW50YXRpb24iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnByZXNlbnRhdGlvbjoxLjAiLCJ4bWxu''@;'; put 'put ''czpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOmNoYXJ0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjaGFydDoxLjAiLCJ4bWxuczpkcjNkIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9w''@;'; put 'put ''ZW5kb2N1bWVudDp4bWxuczpkcjNkOjEuMCIsInhtbG5zOm1hdGgiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwieG1sbnM6Zm9ybSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpzY3JpcHQiOiJ1cm46b2FzaXM6''@;'; put 'put ''bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnNjcmlwdDoxLjAiLCJ4bWxuczpvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9vZmZpY2UiLCJ4bWxuczpvb293IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvd3JpdGVyIiwieG1sbnM6b29vYyI6Imh0dHA6Ly9vcGVub2Zm''@;'; put 'put ''aWNlLm9yZy8yMDA0L2NhbGMiLCJ4bWxuczpkb20iOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiLCJ4bWxuczp4Zm9ybXMiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAyL3hmb3JtcyIsInhtbG5zOnhzZCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwieG1s''@;'; put 'put ''bnM6eHNpIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLCJ4bWxuczpzaGVldCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6c2gzM3RqczoxLjAiLCJ4bWxuczpycHQiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNS9yZXBvcnQiLCJ4bWxu''@;'; put 'put ''czpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwieG1sbnM6eGh0bWwiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwieG1sbnM6Z3JkZGwiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAzL2cvZGF0YS12aWV3IyIsInhtbG5zOnRhYmxlb29v''@;'; put 'put ''IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDkvdGFibGUiLCJ4bWxuczpkcmF3b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMTAvZHJhdyIsInhtbG5zOmNhbGNleHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6Y2FsYzp4bWxuczpjYWxj''@;'; put 'put ''ZXh0OjEuMCIsInhtbG5zOmxvZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOm9mZmljZTp4bWxuczpsb2V4dDoxLjAiLCJ4bWxuczpmaWVsZCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb28tbXMtaW50ZXJvcDp4bWxuczpm''@;'; put 'put ''aWVsZDoxLjAiLCJ4bWxuczpmb3JteCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb3htbC1vZGYtaW50ZXJvcDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOmNzczN0IjoiaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10ZXh0LyIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0p''@;'; put 'put ''LGV0PVJ1KHsieG1sbnM6Y29uZmlnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjb25maWc6MS4wIiwib2ZmaWNlOm1pbWV0eXBlIjoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCJ9KTsiZm9kcyI9PVBlLmJvb2tUeXBlPyhO''@;'; put 'put ''ZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50IitZZStldCsiPlxuIiksTmUucHVzaChSNigpLnJlcGxhY2UoL29mZmljZTpkb2N1bWVudC1tZXRhL2csIm9mZmljZTptZXRhIikpKTpOZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQiK1llKyI+XG4iKSxmdW5jdGlvbihwZSx5ZSl7dmFy''@;'; put 'put ''IFBlPVtdLE5lPXt9O1BlLnB1c2goIiA8b2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKSxQZS5wdXNoKCcgIDxudW1iZXI6ZGF0ZS1zdHlsZSBzdHlsZTpuYW1lPSJOMzciIG51bWJlcjphdXRvbWF0aWMtb3JkZXI9InRydWUiPlxuJyksUGUucHVzaCgnICAgPG51bWJlcjptb250aCBudW1i''@;'; put 'put ''ZXI6c3R5bGU9ImxvbmciLz5cbicpLFBlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLFBlLnB1c2goJyAgIDxudW1iZXI6ZGF5IG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksUGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksUGUu''@;'; put 'put ''cHVzaCgiICAgPG51bWJlcjp5ZWFyLz5cbiIpLFBlLnB1c2goIiAgPC9udW1iZXI6ZGF0ZS1zdHlsZT5cbiIpO3ZhciBZZT0wO3llLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4geWUuU2hlZXRzW2F0XX0pLmZvckVhY2goZnVuY3Rpb24oYXQpe2lmKGF0JiZhdFsiIWNvbHMi''@;'; put 'put ''XSlmb3IodmFyIGJ0PTA7YnQ8YXRbIiFjb2xzIl0ubGVuZ3RoOysrYnQpaWYoYXRbIiFjb2xzIl1bYnRdKXt2YXIganQ9YXRbIiFjb2xzIl1bYnRdO2lmKG51bGw9PWp0LndpZHRoJiZudWxsPT1qdC53cHgmJm51bGw9PWp0LndjaCljb250aW51ZTtRMChqdCksanQub2RzPVllO3ZhciBrdD1h''@;'; put 'put ''dFsiIWNvbHMiXVtidF0ud3B4KyJweCI7UGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY28nK1llKyciIHN0eWxlOmZhbWlseT0idGFibGUtY29sdW1uIj5cbicpLFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1jb2x1bW4tcHJvcGVydGllcyBmbzpicmVhay1iZWZvcmU9ImF1''@;'; put 'put ''dG8iIHN0eWxlOmNvbHVtbi13aWR0aD0iJytrdCsnIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK1llfX0pO3ZhciBldD0wO3llLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4geWUuU2hlZXRzW2F0XX0pLmZvckVhY2goZnVuY3Rpb24oYXQpe2lmKGF0''@;'; put 'put ''JiZhdFsiIXJvd3MiXSlmb3IodmFyIGJ0PTA7YnQ8YXRbIiFyb3dzIl0ubGVuZ3RoOysrYnQpaWYoYXRbIiFyb3dzIl1bYnRdKXthdFsiIXJvd3MiXVtidF0ub2RzPWV0O3ZhciBqdD1hdFsiIXJvd3MiXVtidF0uaHB4KyJweCI7UGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0i''@;'; put 'put ''cm8nK2V0KyciIHN0eWxlOmZhbWlseT0idGFibGUtcm93Ij5cbicpLFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1yb3ctcHJvcGVydGllcyBmbzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxlOnJvdy1oZWlnaHQ9IicranQrJyIvPlxuJyksUGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiks''@;'; put 'put ''KytldH19KSxQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJ0YTEiIHN0eWxlOmZhbWlseT0idGFibGUiIHN0eWxlOm1hc3Rlci1wYWdlLW5hbWU9Im1wMSI+XG4nKSxQZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcHJvcGVydGllcyB0YWJsZTpkaXNwbGF5PSJ0cnVlIiBzdHls''@;'; put 'put ''ZTp3cml0aW5nLW1vZGU9ImxyLXRiIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSxQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjZTEiIHN0eWxlOmZhbWlseT0idGFibGUtY2VsbCIgc3R5bGU6cGFyZW50LXN0eWxlLW5hbWU9IkRlZmF1bHQiIHN0eWxl''@;'; put 'put ''OmRhdGEtc3R5bGUtbmFtZT0iTjM3Ii8+XG4nKTt2YXIgY3Q9MjtldD0wLHllLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4geWUuU2hlZXRzW2F0XX0pLmZvckVhY2goZnVuY3Rpb24oYXQpe2lmKGF0KWZvcih2YXIgYnQ9MCxqdD0wLGt0PU1zKGF0WyIhcmVmIl0pLE90PUFy''@;'; put 'put ''cmF5LmlzQXJyYXkoYXQpO2J0PD1rdC5lLnI7KytidClmb3IoanQ9MDtqdDw9a3QuZS5jOysranQpe3ZhciBLdD1xaSh7cjpidCxjOmp0fSksVG49T3Q/KGF0W2J0XXx8W10pW2p0XTphdFtLdF07aWYoVG4mJihUbi5zfHxUbi5SKSl7dmFyIHJyPVtdO1RuLnMmJnJyLnB1c2goW1RuLCEwXSks''@;'; put 'put ''VG4uUiYmVG4uUi5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtTbiYmU24ucyYmcnIucHVzaChbU24sITFdKX0pLHJyLmZvckVhY2goZnVuY3Rpb24oU24pe3ZhciBscj1TblswXSxYbj1sci5zLEJuPSIiLGZyPXsic3R5bGU6bmFtZSI6KFNuWzFdPyJjZSI6IlQiKStjdCwic3R5bGU6ZmFtaWx5IjpT''@;'; put 'put ''blsxXT8idGFibGUtY2VsbCI6InRleHQifTtTblsxXSYmKGZyWyJzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZSJdPSJEZWZhdWx0Iixmclsic3R5bGU6ZGF0YS1zdHlsZS1uYW1lIl09Ik4wIik7dmFyIGJyPXt9LGVyPSExLE1pPXt9LEZpPSExLG5hPXt9LGNhPSExO2lmKFhuLmNvbG9yJiYoTWlb''@;'; put 'put ''ImZvOmNvbG9yIl09IiMiK1AwKFhuLmNvbG9yLnJnYiksRmk9ITApLFhuLnN6JiYoTWlbImZvOmZvbnQtc2l6ZSJdPVhuLnN6KyJwdCIsRmk9ITApLFhuLmJvbGQmJihNaVsiZm86Zm9udC13ZWlnaHQiXT0iYm9sZCIsRmk9ITApLFhuLml0YWxpYyYmKE1pWyJmbzpmb250LXN0eWxlIl09Iml0''@;'; put 'put ''YWxpYyIsRmk9ITApLFhuLm5hbWUmJihOZVtYbi5uYW1lXXx8KE5lW1huLm5hbWVdPVhuLm5hbWUubWF0Y2goLyAvKT8iJmFwb3M7IitYbi5uYW1lKyImYXBvczsiOlhuLm5hbWUpLE1pWyJzdHlsZTpmb250LW5hbWUiXT1Ybi5uYW1lLEZpPSEwKSxYbi5zdHJpa2UmJihNaVsic3R5bGU6dGV4''@;'; put 'put ''dC1saW5lLXRocm91Z2gtc3R5bGUiXT0ic29saWQiLE1pWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC10eXBlIl09InNpbmdsZSIsRmk9ITApLFhuLnVuZGVybGluZSYmKE1pWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1zdHlsZSJdPSJzb2xpZCIsTWlbInN0eWxlOnRleHQtdW5kZXJsaW5lLXdp''@;'; put 'put ''ZHRoIl09ImF1dG8iLE1pWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1jb2xvciJdPSJmb250LWNvbG9yIixGaT0hMCksU25bMV0pe2lmKFhuLmFsaWdubWVudCl7dmFyIExpPVhuLmFsaWdubWVudDtMaS53cmFwVGV4dCYmKGJyWyJmbzp3cmFwLW9wdGlvbiJdPSJ3cmFwIixlcj0hMCksTGkudmVy''@;'; put 'put ''dGljYWwmJihiclsic3R5bGU6dmVydGljYWwtYWxpZ24iXT0iY2VudGVyIj09TGkudmVydGljYWw/Im1pZGRsZSI6TGkudmVydGljYWwsZXI9ITApLG9lW0xpLmhvcml6b250YWxdJiYobmFbImZvOnRleHQtYWxpZ24iXT1vZVtMaS5ob3Jpem9udGFsXSxjYT0hMCl9WG4uZmdDb2xvciYmKGJy''@;'; put 'put ''WyJmbzpiYWNrZ3JvdW5kLWNvbG9yIl09IiMiK1AwKFhuLmZnQ29sb3IucmdiKSxlcj0hMCl9ZXImJihCbis9UHIoInN0eWxlOnRhYmxlLWNlbGwtcHJvcGVydGllcyIsbnVsbCxicikpLEZpJiYoQm4rPVByKCJzdHlsZTp0ZXh0LXByb3BlcnRpZXMiLG51bGwsTWkpKSxjYSYmKEJuKz1Qcigi''@;'; put 'put ''c3R5bGU6cGFyYWdyYXBoLXByb3BlcnRpZXMiLG51bGwsbmEpKSxQZS5wdXNoKCIgICIrUHIoInN0eWxlOnN0eWxlIixCbixmcikrIlxuIiksbHIub2RzPWN0LCsrY3R9KX19fSksUGUucHVzaCgiIDwvb2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKTt2YXIgRXQ9IiA8b2ZmaWNlOmZvbnQt''@;'; put 'put ''ZmFjZS1kZWNscz5cbiIrUmUoTmUpLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuJyAgPHN0eWxlOmZvbnQtZmFjZSBzdHlsZTpuYW1lPSInK2F0KyciIHN2Zzpmb250LWZhbWlseT0iJytOZVthdF0rJyIvPlxuJ30pLmpvaW4oIiIpKyIgPC9vZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIjtwZS5w''@;'; put 'put ''dXNoKEV0KSxwZS5wdXNoKFBlLmpvaW4oIiIpKX0oTmUseWUpLE5lLnB1c2goIiAgPG9mZmljZTpib2R5PlxuIiksTmUucHVzaCgiICAgIDxvZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKTtmb3IodmFyIGN0PTA7Y3QhPXllLlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpTmUucHVzaChRKHllLlNoZWV0''@;'; put 'put ''c1t5ZS5TaGVldE5hbWVzW2N0XV0seWUsY3QpKTtyZXR1cm4gTmUucHVzaCgiICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksTmUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksTmUucHVzaCgiZm9kcyI9PVBlLmJvb2tUeXBlPyI8L29mZmljZTpkb2N1bWVudD4iOiI8L29mZmljZTpk''@;'; put 'put ''b2N1bWVudC1jb250ZW50PiIpLE5lLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBJSShTLFIpe2lmKCJmb2RzIj09Ui5ib29rVHlwZSlyZXR1cm4gUDgoUyxSKTt2YXIgaz1oaSgpLEc9IiIsUT1bXSxvZT1bXTtyZXR1cm4gam4oayxHPSJtaW1ldHlwZSIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5v''@;'; put 'put ''cGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxqbihrLEc9ImNvbnRlbnQueG1sIixQOChTLFIpKSxRLnB1c2goW0csInRleHQveG1sIl0pLG9lLnB1c2goW0csIkNvbnRlbnRGaWxlIl0pLGpuKGssRz0ic3R5bGVzLnhtbCIsVXooUyxSKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxvZS5wdXNo''@;'; put 'put ''KFtHLCJTdHlsZXNGaWxlIl0pLGpuKGssRz0ibWV0YS54bWwiLElpK1I2KCkpLFEucHVzaChbRywidGV4dC94bWwiXSksb2UucHVzaChbRywiTWV0YWRhdGFGaWxlIl0pLGpuKGssRz0ibWFuaWZlc3QucmRmIixmdW5jdGlvbiBPdShTKXt2YXIgUj1bSWldO1IucHVzaCgnPHJkZjpSREYgeG1s''@;'; put 'put ''bnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj5cbicpO2Zvcih2YXIgaz0wO2shPVMubGVuZ3RoOysraylSLnB1c2goZXUoU1trXVswXSxTW2tdWzFdKSksUi5wdXNoKG4yKCIiLFNba11bMF0pKTtyZXR1cm4gUi5wdXNoKGV1KCIiLCJEb2N1bWVu''@;'; put 'put ''dCIsInBrZyIpKSxSLnB1c2goIjwvcmRmOlJERj4iKSxSLmpvaW4oIiIpfShvZSkpLFEucHVzaChbRywiYXBwbGljYXRpb24vcmRmK3htbCJdKSxqbihrLEc9Ik1FVEEtSU5GL21hbmlmZXN0LnhtbCIsZnVuY3Rpb24geGMoUyl7dmFyIFI9W0lpXTtSLnB1c2goJzxtYW5pZmVzdDptYW5pZmVz''@;'; put 'put ''dCB4bWxuczptYW5pZmVzdD0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptYW5pZmVzdDoxLjAiIG1hbmlmZXN0OnZlcnNpb249IjEuMiI+XG4nKSxSLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSIvIiBtYW5pZmVzdDp2ZXJz''@;'; put 'put ''aW9uPSIxLjIiIG1hbmlmZXN0Om1lZGlhLXR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiLz5cbicpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKVIucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Iicr''@;'; put 'put ''U1trXVswXSsnIiBtYW5pZmVzdDptZWRpYS10eXBlPSInK1Nba11bMV0rJyIvPlxuJyk7cmV0dXJuIFIucHVzaCgiPC9tYW5pZmVzdDptYW5pZmVzdD4iKSxSLmpvaW4oIiIpfShRKSksa31mdW5jdGlvbiBPZihTKXtyZXR1cm4gZnVuY3Rpb24oayxHKXt2YXIgUT1mdW5jdGlvbiBaeihTLFIp''@;'; put 'put ''e2lmKCFSKXJldHVybiAwO3ZhciBrPVMuU2hlZXROYW1lcy5pbmRleE9mKFIpO2lmKC0xPT1rKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK1IpO3JldHVybiBrfShrLEcuc2hlZXQpO3JldHVybiBTLmZyb21fc2hlZXQoay5TaGVldHNbay5TaGVldE5hbWVzW1FdXSxHLGsp''@;'; put 'put ''fX12YXIgV3o9T2YobWQpLFl6PU9mKHtmcm9tX3NoZWV0OkMwfSksR3o9T2YodHlwZW9mIGNDPCJ1Ij9jQzp7fSksdmQ9T2YodHlwZW9mIGt2PCJ1Ij9rdjp7fSksUkk9T2YodHlwZW9mIGozPCJ1Ij9qMzp7fSksTEk9T2YodHlwZW9mIE52PCJ1Ij9Odjp7fSksJHo9T2Yoe2Zyb21fc2hlZXQ6''@;'; put 'put ''Qkl9KSxlcmU9T2YodHlwZW9mIEIzPCJ1Ij9CMzp7fSksT0k9T2YodHlwZW9mIEs2PCJ1Ij9LNjp7fSksV2w9eSg5MTQyNil8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZighV2wpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0ZW5z''@;'; put 'put ''aW9ucyEiKTt2YXIgbnA9e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1NiIsU0hBMzg0OiJzaGEzODQiLFNIQTE6InNoYTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiBtYyhTLFIpe3N3aXRjaChSPShSfHwiIikucmVwbGFjZSgvLS9nLCIiKSl7Y2FzZSJT''@;'; put 'put ''SEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKCJzaGE1MTIiKS51cGRhdGUoUykuZGlnZXN0KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IFdsLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoUykuZGlnZXN0KCk7Y2FzZSJNRDIiOnJldHVy''@;'; put 'put ''biBuZXcgV2wuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKFMpLmRpZ2VzdCgpO2RlZmF1bHQ6aWYobnBbUl0pcmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKG5wW1JdKS51cGRhdGUoUykuZGlnZXN0KCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK1IpfX1m''@;'; put 'put ''dW5jdGlvbiBZNChTLFIsayl7aWYoInJjMiI9PWspdGhyb3ciVW5zdXBwb3J0ZWQgUkMyIjt2YXIgRz1XbC5jcmVhdGVEZWNpcGhlcml2KGt8fCJhZXMtMjU2LWNiYyIsUyxSKTtyZXR1cm4gRy5zZXRBdXRvUGFkZGluZyghMSksR31mdW5jdGlvbiBGOChTKXtyZXR1cm5bKCIwMCIrKDI1NSZT''@;'; put 'put ''KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoUz4+PjgmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoUz4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj4yNCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXS5qb2luKCIiKX12''@;'; put 'put ''YXIgRzQ9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz0ic3RyaW5nIj09dHlwZW9mIFI/QnVmZmVyLmZyb20oUiwiaGV4Iik6UixRPSJzdHJpbmciPT10eXBlb2YgUz9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMpKTpTLG9lPSJzdHJpbmciPT10eXBlb2Ygaz9CdWZm''@;'; put 'put ''ZXIuZnJvbShrLCJoZXgiKTprLGdlPW1jKFEsIk1ENSIpLHBlPUJ1ZmZlci5jb25jYXQoW2dlLnNsaWNlKDAsNSksR10pLHllPTA7eWU8NDsrK3llKXBlPUJ1ZmZlci5jb25jYXQoW3BlLHBlXSk7dmFyIFBlPW1jKHBlLCJNRDUiKTtyZXR1cm4obWMoQnVmZmVyLmNvbmNhdChbUGUuc2xpY2Uo''@;'; put 'put ''MCw1KSxvZV0pLCJNRDUiKS50b1N0cmluZygiaGV4IikrIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikuc2xpY2UoMCwzMil9LCQ0PWZ1bmN0aW9uKFMsUixrKXt2YXIgRz0ic3RyaW5nIj09dHlwZW9mIFI/QnVmZmVyLmZyb20oUiwiaGV4Iik6UixRPSJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgUz9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMpKTpTLG9lPSJzdHJpbmciPT10eXBlb2Ygaz9CdWZmZXIuZnJvbShrLCJoZXgiKTprLGdlPW1jKEJ1ZmZlci5jb25jYXQoW0csUV0pLCJTSEExIik7cmV0dXJuIG1jKEJ1ZmZlci5jb25jYXQoW2dlLG9lXSksIlNI''@;'; put 'put ''QTEiKX0sWHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBSKCl7fVIucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKGF0KXt0aGlzLl9pPTA7dmFyIGJ0PXRoaXMuX2J1aWxkKGF0LCIiKTtyZXR1cm4iIj09PWJ0PyIiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9u''@;'; put 'put ''ZT0ieWVzIj8+JytidH0sUi5wcm90b3R5cGUuX2J1aWxkPWZ1bmN0aW9uKGF0LGJ0KXtpZih0aGlzLl9pKyslMWU2PT0wJiYodGhpcy5fYz1idFswXSksbnVsbD09YXR8fCJvYmplY3QiIT10eXBlb2YgYXQmJiJmdW5jdGlvbiIhPXR5cGVvZiBhdCludWxsIT1hdCYmKGJ0Kz1mdW5jdGlvbiBT''@;'; put 'put ''KGF0LGJ0KXtyZXR1cm4gbnVsbD09YXR8fChhdD1hdC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxidCYmKGF0PWF0LnJlcGxhY2UoLyIvZywiJnF1b3Q7IikpKSxhdH0oYXQpKTtlbHNle2lmKCFhdC5u''@;'; put 'put ''YW1lKXRocm93IG5ldyBFcnJvcigiWE1MIG5vZGUgZG9lcyBub3QgaGF2ZSBuYW1lOiAiK0pTT04uc3RyaW5naWZ5KGF0KSk7YnQrPSI8IithdC5uYW1lO3ZhciBqdD10aGlzO2J0Kz1hdC5hdHRyaWJ1dGVzJiZSdShhdC5hdHRyaWJ1dGVzKXx8IiIsQXJyYXkuaXNBcnJheShhdC5jaGlsZHJl''@;'; put 'put ''bikmJjAhPWF0LmNoaWxkcmVuLmxlbmd0aD8oYnQrPSI+IixhdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtidD1qdC5fYnVpbGQoa3QsYnQpfSksYnQrPSI8LyIrYXQubmFtZSsiPiIpOmJ0Kz0iLz4ifXJldHVybiBidH07dmFyIGs9QnVmZmVyLmZyb20oWzQsMCw0LDAsNjQsMCww''@;'; put 'put ''LDBdKSxvZT17ZGF0YUludGVncml0eTp7aG1hY0tleTpCdWZmZXIuZnJvbShbOTUsMTc4LDE3MywxLDEyLDE4NSwyMjUsMjQ2XSksaG1hY1ZhbHVlOkJ1ZmZlci5mcm9tKFsxNjAsMTAzLDEyNywyLDE3OCw0NCwxMzIsNTFdKX0sa2V5OkJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwx''@;'; put 'put ''NzIsMjA4LDIxNF0pLHZlcmlmaWVySGFzaDp7aW5wdXQ6QnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSksdmFsdWU6QnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSl9fTtmdW5jdGlvbiBnZShhdCxidCxqdCxrdCxPdCxLdCl7dmFyIFRu''@;'; put 'put ''PWJ0LnRvTG93ZXJDYXNlKCkrIi0iKzgqa3QubGVuZ3RoO2lmKCJDaGFpbmluZ01vZGVDQkMiIT09anQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNpcGhlciBjaGFpbmluZzogIitqdCk7dmFyIHJyPVdsW2F0PyJjcmVhdGVDaXBoZXJpdiI6ImNyZWF0ZURlY2lwaGVyaXYiXShUbis9Ii1j''@;'; put 'put ''YmMiLGt0LE90KTtyci5zZXRBdXRvUGFkZGluZyghMSk7dmFyIFNuPXJyLnVwZGF0ZShLdCksbHI9W1NuXTt0cnl7dmFyIFhuPXJyLmZpbmFsKCk7bHIucHVzaChYbil9Y2F0Y2h7fXJldHVybiBCdWZmZXIuY29uY2F0KGxyKX1mdW5jdGlvbiBwZShhdCl7YXQ9YXQudG9Mb3dlckNhc2UoKTt2''@;'; put 'put ''YXIgYnQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7aWYoV2wuZ2V0SGFzaGVzKCkuaW5kZXhPZihhdCk8MCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrYXQpO3ZhciBrdD1XbC5jcmVhdGVIYXNoKGF0KTtyZXR1cm4ga3QudXBkYXRlKEJ1ZmZlci5j''@;'; put 'put ''b25jYXQoYnQpKSxrdC5kaWdlc3QoKX1mdW5jdGlvbiB5ZShhdCxidCxqdCxrdCl7Im51bWJlciI9PXR5cGVvZiBrdCYmKGt0PVBlKGt0KSk7dmFyIE90PXBlKGF0LGJ0LGt0KTtpZihPdC5sZW5ndGg8anQpe3ZhciBLdD1CdWZmZXIuYWxsb2MoanQsNTQpO090LmNvcHkoS3QpLE90PUt0fWVs''@;'; put 'put ''c2UgT3QubGVuZ3RoPmp0JiYoT3Q9T3Quc2xpY2UoMCxqdCkpO3JldHVybiBPdH1mdW5jdGlvbiBQZShhdCxidCl7dmFyIGp0PUJ1ZmZlci5hbGxvYyhidHx8NCk7cmV0dXJuIGp0LndyaXRlVUludDMyTEUoYXQsMCksanR9ZnVuY3Rpb24gTmUoYXQsYnQsanQsa3QsT3QsS3Qpe2Zvcih2YXIg''@;'; put 'put ''cnI9cGUoYnQsanQsQnVmZmVyLmZyb20oYXQsInV0ZjE2bGUiKSksU249MDtTbjxrdDtTbisrKXJyPXBlKGJ0LFBlKFNuKSxycik7dmFyIFhuPU90Lzg7aWYoKHJyPXBlKGJ0LHJyLEt0KSkubGVuZ3RoPFhuKXt2YXIgQm49QnVmZmVyLmFsbG9jKFhuLDU0KTtyci5jb3B5KEJuKSxycj1Cbn1l''@;'; put 'put ''bHNlIHJyLmxlbmd0aD5YbiYmKHJyPXJyLnNsaWNlKDAsWG4pKTtyZXR1cm4gcnJ9cmV0dXJuIFdsLnJhbmRvbUJ5dGVzfHwoV2wucmFuZG9tQnl0ZXM9ZnVuY3Rpb24oYXQpe2Zvcih2YXIgYnQ9QnVmZmVyLmFsbG9jKGF0KSxqdD0wO2p0PGF0OysranQpYnRbanRdPU1hdGguZmxvb3IoMjU2''@;'; put 'put ''Kk1hdGgucmFuZG9tKCkpO3JldHVybiBidH0pLGZ1bmN0aW9uIEV0KGF0LGJ0KXtpZigic3RyaW5nIj09dHlwZW9mIGF0KXJldHVybiBFdChCdWZmZXIuZnJvbShhdCwiYmluYXJ5IiksYnQpO3ZhciBqdD1XbC5yYW5kb21CeXRlcygzMiksa3Q9e3BhY2thZ2U6e2NpcGhlckFsZ29yaXRobToi''@;'; put 'put ''QUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6V2wucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LGtleUJpdHM6OCpqdC5sZW5ndGh9LGtleTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNp''@;'; put 'put ''cGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpXbC5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsc3BpbkNvdW50OjEsa2V5Qml0czoyNTZ9fSxPdD1mdW5jdGlvbiBZZShhdCxidCxqdCxrdCxPdCxL''@;'; put 'put ''dCxUbixycil7Zm9yKHZhciBTbj1bXSxscj1hdD8wOjgsWG49MCxCbj0wLGZyPTA7ZnI8cnIubGVuZ3RoOyl7KGZyPShCbj1mcikrNDA5Nik+cnIubGVuZ3RoJiYoZnI9cnIubGVuZ3RoKTt2YXIgYnI9cnIuc2xpY2UoQm4rbHIsZnIrbHIpLGVyPWJyLmxlbmd0aCVPdDtlciYmKGJyPUJ1ZmZl''@;'; put 'put ''ci5jb25jYXQoW2JyLEJ1ZmZlci5hbGxvYyhPdC1lcildKSk7dmFyIEZpPWdlKGF0LGJ0LGp0LFRuLHllKGt0LEt0LE90LFhuKSxicik7U24ucHVzaChGaSksWG4rK312YXIgbmE9QnVmZmVyLmNvbmNhdChTbik7aWYoYXQpbmE9QnVmZmVyLmNvbmNhdChbUGUocnIubGVuZ3RoLDgpLG5hXSk7''@;'; put 'put ''ZWxzZXt2YXIgY2E9cnIucmVhZFVJbnQzMkxFKDApO25hPW5hLnNsaWNlKDAsY2EpfXJldHVybiBuYX0oITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5ibG9ja1NpemUsa3Qu''@;'; put 'put ''cGFja2FnZS5zYWx0VmFsdWUsanQsYXQpLEt0PVdsLnJhbmRvbUJ5dGVzKDY0KSxUbj15ZShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5zYWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsb2UuZGF0YUludGVncml0eS5obWFjS2V5KSxycj1nZSghMCxrdC5wYWNrYWdl''@;'; put 'put ''LmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGp0LFRuLEt0KSxTbj1mdW5jdGlvbiBldChhdCxidCl7YXQ9YXQudG9Mb3dlckNhc2UoKTt2YXIganQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7aWYoV2wuZ2V0SGFzaGVzKCkuaW5kZXhPZihhdCk8MCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkhNQUMgYWxnb3JpdGhtICciK2F0KyInIG5vdCBzdXBwb3J0ZWQhIik7dmFyIE90PVdsLmNyZWF0ZUhtYWMoYXQsYnQpO3JldHVybiBPdC51cGRhdGUoQnVmZmVyLmNvbmNhdChqdCkpLE90LmRpZ2VzdCgpfShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sS3QsT3QpLGxy''@;'; put 'put ''PXllKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxvZS5kYXRhSW50ZWdyaXR5LmhtYWNWYWx1ZSksWG49Z2UoITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxqdCxs''@;'; put 'put ''cixTbik7a3QuZGF0YUludGVncml0eT17ZW5jcnlwdGVkSG1hY0tleTpycixlbmNyeXB0ZWRIbWFjVmFsdWU6WG59O3ZhciBCbj1OZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsb2Uua2V5KTtrdC5rZXku''@;'; put 'put ''ZW5jcnlwdGVkS2V5VmFsdWU9Z2UoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsQm4sa3Qua2V5LnNhbHRWYWx1ZSxqdCk7dmFyIGZyPVdsLnJhbmRvbUJ5dGVzKDE2KSxicj1OZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVl''@;'; put 'put ''LGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsb2UudmVyaWZpZXJIYXNoLmlucHV0KTtrdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ9Z2UoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsYnIsa3Qua2V5LnNhbHRWYWx1ZSxmcik7''@;'; put 'put ''dmFyIGVyPXBlKGt0LmtleS5oYXNoQWxnb3JpdGhtLGZyKSxNaT1OZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsb2UudmVyaWZpZXJIYXNoLnZhbHVlKTtrdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNo''@;'; put 'put ''VmFsdWU9Z2UoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsTWksa3Qua2V5LnNhbHRWYWx1ZSxlcik7dmFyIEZpPWZ1bmN0aW9uIGN0KGF0KXt2YXIgYnQ9e25hbWU6ImVuY3J5cHRpb24iLGF0dHJpYnV0ZXM6e3htbG5zOiJodHRwOi8vc2NoZW1hcy5t''@;'; put 'put ''aWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2VuY3J5cHRpb24iLCJ4bWxuczpwIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiLCJ4bWxuczpjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9r''@;'; put 'put ''ZXlFbmNyeXB0b3IvY2VydGlmaWNhdGUifSxjaGlsZHJlbjpbe25hbWU6ImtleURhdGEiLGF0dHJpYnV0ZXM6e3NhbHRTaXplOmF0LnBhY2thZ2Uuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6YXQucGFja2FnZS5ibG9ja1NpemUsa2V5Qml0czphdC5wYWNrYWdlLmtleUJpdHMsaGFzaFNp''@;'; put 'put ''emU6YXQucGFja2FnZS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06YXQucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sY2lwaGVyQ2hhaW5pbmc6YXQucGFja2FnZS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmF0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6YXQucGFja2Fn''@;'; put 'put ''ZS5zYWx0VmFsdWUudG9TdHJpbmcoImJhc2U2NCIpfX0se25hbWU6ImRhdGFJbnRlZ3JpdHkiLGF0dHJpYnV0ZXM6e2VuY3J5cHRlZEhtYWNLZXk6YXQuZGF0YUludGVncml0eS5lbmNyeXB0ZWRIbWFjS2V5LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRIbWFjVmFsdWU6YXQuZGF0YUlu''@;'; put 'put ''dGVncml0eS5lbmNyeXB0ZWRIbWFjVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpfX0se25hbWU6ImtleUVuY3J5cHRvcnMiLGNoaWxkcmVuOlt7bmFtZToia2V5RW5jcnlwdG9yIixhdHRyaWJ1dGVzOnt1cmk6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5j''@;'; put 'put ''cnlwdG9yL3Bhc3N3b3JkIn0sY2hpbGRyZW46W3tuYW1lOiJwOmVuY3J5cHRlZEtleSIsYXR0cmlidXRlczp7c3BpbkNvdW50OmF0LmtleS5zcGluQ291bnQsc2FsdFNpemU6YXQua2V5LnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmF0LmtleS5ibG9ja1NpemUsa2V5Qml0czphdC5rZXku''@;'; put 'put ''a2V5Qml0cyxoYXNoU2l6ZTphdC5rZXkuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmF0LmtleS5jaXBoZXJBbGdvcml0aG0sY2lwaGVyQ2hhaW5pbmc6YXQua2V5LmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06YXQua2V5Lmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmF0LmtleS5zYWx0''@;'; put 'put ''VmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0OmF0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dC50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWU6YXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVl''@;'; put 'put ''LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRLZXlWYWx1ZTphdC5rZXkuZW5jcnlwdGVkS2V5VmFsdWUudG9TdHJpbmcoImJhc2U2NCIpfX1dfV19XX0sa3Q9KG5ldyBSKS5idWlsZChidCk7cmV0dXJuIEJ1ZmZlci5jb25jYXQoW2ssQnVmZmVyLmZyb20oa3QsInV0ZjgiKV0pfShrdCks''@;'; put 'put ''bmE9dmUudXRpbHMuY2ZiX25ldygpO3JldHVybiB2ZS51dGlscy5jZmJfYWRkKG5hLCJFbmNyeXB0aW9uSW5mbyIsRmkpLHZlLnV0aWxzLmNmYl9hZGQobmEsIkVuY3J5cHRlZFBhY2thZ2UiLE90KSxuYX19KCk7ZnVuY3Rpb24gRkkoUyl7cmV0dXJuIGZ1bmN0aW9uKGspe2Zvcih2YXIgRz0w''@;'; put 'put ''O0chPVMubGVuZ3RoOysrRyl7dmFyIFE9U1tHXTt2b2lkIDA9PT1rW1FbMF1dJiYoa1tRWzBdXT1RWzFdKSwibiI9PT1RWzJdJiYoa1tRWzBdXT1OdW1iZXIoa1tRWzBdXSkpfX19dmFyIEhJPWZ1bmN0aW9uKFMpe0ZJKFtbImNlbGxORiIsITFdLFsiY2VsbEhUTUwiLCEwXSxbImNlbGxGb3Jt''@;'; put 'put ''dWxhIiwhMF0sWyJjZWxsU3R5bGVzIiwhMV0sWyJjZWxsVGV4dCIsITBdLFsiY2VsbERhdGVzIiwhMV0sWyJzaGVldFN0dWJzIiwhMV0sWyJzaGVldFJvd3MiLDAsIm4iXSxbImJvb2tEZXBzIiwhMV0sWyJib29rU2hlZXRzIiwhMV0sWyJib29rUHJvcHMiLCExXSxbImJvb2tGaWxlcyIsITFd''@;'; put 'put ''LFsiYm9va1ZCQSIsITFdLFsicGFzc3dvcmQiLCIiXSxbIldURiIsITFdXSkoUyksUy5ib29rSW1hZ2VzJiYoUy5jZWxsU3R5bGVzPSEwKX0sUGY9RkkoW1siY2VsbERhdGVzIiwhMV0sWyJib29rU1NUIiwhMV0sWyJib29rVHlwZSIsInhsc3giXSxbImNvbXByZXNzaW9uIiwhMV0sWyJXVEYi''@;'; put 'put ''LCExXV0pO2Z1bmN0aW9uIG5yZShTKXtyZXR1cm4gS2EuV1MuaW5kZXhPZihTKT4tMT8ic2hlZXQiOkthLkNTJiZTPT1LYS5DUz8iY2hhcnQiOkthLkRTJiZTPT1LYS5EUz8iZGlhbG9nIjpLYS5NUyYmUz09S2EuTVM/Im1hY3JvIjpTJiZTLmxlbmd0aD9TOiJzaGVldCJ9dmFyIE9iPVtdO2Z1''@;'; put 'put ''bmN0aW9uIHkyKFMsUixrLEcsUSxvZSxnZSxwZSx5ZSxQZSxOZSxZZSl7dHJ5e29lW0ddPWJmKG5yKFMsaywhMCksUik7dmFyIGN0LGV0PVR0KFMsUik7c3dpdGNoKHBlKXtjYXNlInNoZWV0IjpjdD1mdW5jdGlvbiBieihTLFIsayxHLFEsb2UsZ2UscGUpe3JldHVybiIuYmluIj09PVIuc2xp''@;'; put 'put ''Y2UoLTQpP2Z1bmN0aW9uIFFqKFMsUixrLEcsUSxvZSxnZSl7aWYoIVMpcmV0dXJuIFM7dmFyIHBlPVJ8fHt9O0d8fChHPXsiIWlkIjp7fX0pLG51bGwhPWxlJiZudWxsPT1wZS5kZW5zZSYmKHBlLmRlbnNlPWxlKTt2YXIgUGUsRXQsYXQsYnQsanQsa3QsT3QsS3QsVG4scnIseWU9cGUuZGVu''@;'; put 'put ''c2U/W106e30sTmU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sWWU9W10sZXQ9ITEsY3Q9ITEsU249W107cGUuYmlmZj0xMixwZVsiIXJvdyJdPTA7dmFyIGxyPTAsWG49ITEsQm49W10sZnI9e30sYnI9cGUuc3VwYm9va3N8fFEuc3VwYm9va3N8fFtbXV07aWYoYnIuc2hhcmVkZj1m''@;'; put 'put ''cixici5hcnJheWY9Qm4sYnIuU2hlZXROYW1lcz1RLlNoZWV0TmFtZXN8fFEuU2hlZXRzLm1hcChmdW5jdGlvbihMaSl7cmV0dXJuIExpLm5hbWV9KSwhcGUuc3VwYm9va3MmJihwZS5zdXBib29rcz1icixRLk5hbWVzKSlmb3IodmFyIGVyPTA7ZXI8US5OYW1lcy5sZW5ndGg7Kytlciliclsw''@;'; put 'put ''XVtlcisxXT1RLk5hbWVzW2VyXTt2YXIgTWk9W10sRmk9W10sbmE9ITE7aWYoTDhbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6Rmp9LHVyKFMsZnVuY3Rpb24oa3IsVm4sQnIpe2lmKCFjdClzd2l0Y2goQnIpe2Nhc2UgMTQ4OlBlPWtyO2JyZWFrO2Nhc2UgMDpFdD1rcixwZS5zaGVldFJvd3Mm''@;'; put 'put ''JnBlLnNoZWV0Um93czw9RXQuciYmKGN0PSEwKSxUbj1qaShqdD1FdC5yKSxwZVsiIXJvdyJdPUV0LnIsKGtyLmhpZGRlbnx8a3IuaHB0fHxudWxsIT1rci5sZXZlbCkmJihrci5ocHQmJihrci5ocHg9c2goa3IuaHB0KSksRmlba3Iucl09a3IpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA0''@;'; put 'put ''OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OnN3aXRjaChhdD17dDprclsyXX0sa3JbMl0pe2Nhc2UibiI6YXQudj1rclsxXTticmVhaztjYXNlInMiOmF0LnY9''@;'; put 'put ''KEt0PWw4W2tyWzFdXSkudCxwZS5jZWxsU3R5bGVzJiYoYXQuUj1mdW5jdGlvbiBFVihTLFIpe2lmKFMuUilyZXR1cm4gUy5SO2lmKFImJlIuRm9udHMmJigxIT1TLnIubGVuZ3RofHwwIT1TLnJbMF0uaWNoKSl7Uy5SPVtdO3ZhciBrPTAsRz1TLnJba10sUT1TLnJbaysxXTtmb3IoRy5pY2g+''@;'; put 'put ''MCYmUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKDAsRy5pY2gpfSk7azxTLnIubGVuZ3RoLTE7KytrKVMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoRz1TLnJba10pLmljaCwoUT1TLnJbaysxXSkuaWNoKSxzOlIuRm9udHNbRy5pZm50XX0pO3JldHVybiBTLlIucHVzaCh7dDoicyIs''@;'; put 'put ''djpTLnQuc2xpY2UoKFF8fEcpLmljaCksczpSLkZvbnRzWyhRfHxHKS5pZm50XX0pLFMuUn19KEt0LGdlKSk7YnJlYWs7Y2FzZSJiIjphdC52PSEha3JbMV07YnJlYWs7Y2FzZSJlIjphdC52PWtyWzFdLCExIT09cGUuY2VsbFRleHQmJihhdC53PU1jW2F0LnZdKTticmVhaztjYXNlInN0ciI6''@;'; put 'put ''YXQudD0icyIsYXQudj1rclsxXX1pZigoYnQ9Z2UuQ2VsbFhmW2tyWzBdLmlTdHlsZVJlZl0pJiZKMyhhdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHBlLDAsZ2UpLHBlLmNlbGxTdHlsZXMmJmF0LnMmJmJ0LmFsaWdubWVudCYmKGF0LnMuYWxpZ25tZW50''@;'; put 'put ''PXF0KGJ0LmFsaWdubWVudCkpLGt0PS0xPT1rclswXS5jP2t0KzE6a3JbMF0uYyxwZS5kZW5zZT8oeWVbanRdfHwoeWVbanRdPVtdKSx5ZVtqdF1ba3RdPWF0KTp5ZVtUYShrdCkrVG5dPWF0LHBlLmNlbGxGb3JtdWxhKXtmb3IoWG49ITEsbHI9MDtscjxCbi5sZW5ndGg7Kytscil7dmFyIF9y''@;'; put 'put ''PUJuW2xyXTtFdC5yPj1fclswXS5zLnImJkV0LnI8PV9yWzBdLmUuciYma3Q+PV9yWzBdLnMuYyYma3Q8PV9yWzBdLmUuYyYmKGF0LkY9cmEoX3JbMF0pLFhuPSEwKX0hWG4mJmtyLmxlbmd0aD4zJiYoYXQuZj1rclszXSl9aWYoTmUucy5yPkV0LnImJihOZS5zLnI9RXQuciksTmUucy5jPmt0''@;'; put 'put ''JiYoTmUucy5jPWt0KSxOZS5lLnI8RXQuciYmKE5lLmUucj1FdC5yKSxOZS5lLmM8a3QmJihOZS5lLmM9a3QpLHBlLmNlbGxEYXRlcyYmYnQmJiJuIj09YXQudCYmQS5pc19kYXRlKEEuX3RhYmxlW2J0Lm51bUZtdElkXSkpe3ZhciBGbj1BLnBhcnNlX2RhdGVfY29kZShhdC52KTtGbiYmKGF0''@;'; put 'put ''LnQ9ImQiLGF0LnY9bmV3IERhdGUoRm4ueSxGbi5tLTEsRm4uZCxGbi5ILEZuLk0sRm4uUyxGbi51KSl9YnJlYWs7Y2FzZSAxOmNhc2UgMTI6aWYoIXBlLnNoZWV0U3R1YnN8fGV0KWJyZWFrO2F0PXt0OiJ6Iix2OnZvaWQgMH0sa3Q9LTE9PWtyWzBdLmM/a3QrMTprclswXS5jLChidD1nZS5D''@;'; put 'put ''ZWxsWGZba3JbMF0uaVN0eWxlUmVmXSkmJkozKGF0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxnZSkscGUuY2VsbFN0eWxlcyYmYXQucyYmYnQuYWxpZ25tZW50JiYoYXQucy5hbGlnbm1lbnQ9cXQoYnQuYWxpZ25tZW50KSkscGUuZGVuc2U/KHll''@;'; put 'put ''W2p0XXx8KHllW2p0XT1bXSkseWVbanRdW2t0XT1hdCk6eWVbVGEoa3QpK1RuXT1hdCxOZS5zLnI+RXQuciYmKE5lLnMucj1FdC5yKSxOZS5zLmM+a3QmJihOZS5zLmM9a3QpLE5lLmUucjxFdC5yJiYoTmUuZS5yPUV0LnIpLE5lLmUuYzxrdCYmKE5lLmUuYz1rdCk7YnJlYWs7Y2FzZSAxNzY6''@;'; put 'put ''U24ucHVzaChrcik7YnJlYWs7Y2FzZSA0OTQ6dmFyIGpyPUdbIiFpZCJdW2tyLnJlbElkXTtmb3IoanI/KGtyLlRhcmdldD1qci5UYXJnZXQsa3IubG9jJiYoa3IuVGFyZ2V0Kz0iIyIra3IubG9jKSxrci5SZWw9anIpOiIiPT1rci5yZWxJZCYmKGtyLlRhcmdldD0iIyIra3IubG9jKSxqdD1r''@;'; put 'put ''ci5yZngucy5yO2p0PD1rci5yZnguZS5yOysranQpZm9yKGt0PWtyLnJmeC5zLmM7a3Q8PWtyLnJmeC5lLmM7KytrdClwZS5kZW5zZT8oeWVbanRdfHwoeWVbanRdPVtdKSx5ZVtqdF1ba3RdfHwoeWVbanRdW2t0XT17dDoieiIsdjp2b2lkIDB9KSx5ZVtqdF1ba3RdLmw9a3IpOihPdD1xaSh7''@;'; put 'put ''YzprdCxyOmp0fSkseWVbT3RdfHwoeWVbT3RdPXt0OiJ6Iix2OnZvaWQgMH0pLHllW090XS5sPWtyKTticmVhaztjYXNlIDQyNjppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7Qm4ucHVzaChrciksKHJyPXBlLmRlbnNlP3llW2p0XVtrdF06eWVbVGEoa3QpK1RuXSkuZj1zMChrclsxXSxOZSx7''@;'; put 'put ''cjpFdC5yLGM6a3R9LGJyLHBlKSxyci5GPXJhKGtyWzBdKTticmVhaztjYXNlIDQyNzppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7ZnJbcWkoa3JbMF0ucyldPWtyWzFdLChycj1wZS5kZW5zZT95ZVtqdF1ba3RdOnllW1RhKGt0KStUbl0pLmY9czAoa3JbMV0sTmUse3I6RXQucixjOmt0fSxi''@;'; put 'put ''cixwZSk7YnJlYWs7Y2FzZSA2MDppZighcGUuY2VsbFN0eWxlcylicmVhaztmb3IoO2tyLmU+PWtyLnM7KU1pW2tyLmUtLV09e3dpZHRoOmtyLncvMjU2LGhpZGRlbjohISgxJmtyLmZsYWdzKSxsZXZlbDprci5sZXZlbH0sbmF8fChuYT0hMCksUTAoTWlba3IuZSsxXSk7YnJlYWs7Y2FzZSAx''@;'; put 'put ''NjE6eWVbIiFhdXRvZmlsdGVyIl09e3JlZjpyYShrcil9O2JyZWFrO2Nhc2UgNDc2OnllWyIhbWFyZ2lucyJdPWtyO2JyZWFrO2Nhc2UgMTQ3OlEuU2hlZXRzW2tdfHwoUS5TaGVldHNba109e30pLGtyLm5hbWUmJihRLlNoZWV0c1trXS5Db2RlTmFtZT1rci5uYW1lKSwoa3IuYWJvdmV8fGty''@;'; put 'put ''LmxlZnQpJiYoeWVbIiFvdXRsaW5lIl09e2Fib3ZlOmtyLmFib3ZlLGxlZnQ6a3IubGVmdH0pO2JyZWFrO2Nhc2UgMTM3OlEuVmlld3N8fChRLlZpZXdzPVt7fV0pLFEuVmlld3NbMF18fChRLlZpZXdzWzBdPXt9KSxrci5SVEwmJihRLlZpZXdzWzBdLlJUTD0hMCksa3IuZ3JpZHx8KFEuVmll''@;'; put 'put ''d3NbMF0uZ3JpZD0hMSx5ZVsiIWdyaWRsaW5lcyJdPSExKTticmVhaztjYXNlIDQ4NTp5ZVsiIXNoZWV0Rm9ybWF0Il09a3I7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0aW9uIEpqKFMsUixrLEcpe2lmKFIpe3ZhciBRPXtyZWY6Ui5zcXJmeCx0OlIudH07Ui5vcCYmKFEub3A9Ui5v''@;'; put 'put ''cCk7dmFyIG9lPSIiLGdlPSIiLHBlPVIuc3FyZng/InN0cmluZyI9PXR5cGVvZiBSLnNxcmZ4P29vKFIuc3FyZnguc3BsaXQoIiwiKVswXSk6Ui5zcXJmeDpudWxsO2lmKFIuZjEmJihvZT1zMChSLmYxLHBlLG51bGwsayxHLCEwKSksUi5mMiYmKGdlPXMwKFIuZjIscGUsbnVsbCxrLEcsITAp''@;'; put 'put ''KSxSLm9wJiZbIklOIiwiT1QiXS5pbmRleE9mKFIub3ApPj0tMSlRLm1pbj1vZSxRLm1heD1nZTtlbHNlIGlmKFIub3ApUS52PW9lO2Vsc2UgdHJ5e3N3aXRjaChSLnQpe2Nhc2UiTGlzdCI6aWYoIlB0Z1N0ciI9PT1SLmYxWzBdWzBdWzBdJiYxPT1SLmYxWzBdLmxlbmd0aCl7US5sPVIuZjFb''@;'; put 'put ''MF1bMF1bMV0uc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6US5mPW9lfX1jYXRjaHt9U1siIXZhbGlkYXRpb25zIl18fChTWyIhdmFsaWRhdGlvbnMiXT1bXSksU1siIXZhbGlkYXRpb25zIl0ucHVzaChRKX19KHllLGtyLGJyLHBlKTticmVhaztjYXNlIDE1MTp5ZVsiIWZyZWV6ZSJd''@;'; put 'put ''PWtyWzBdO2JyZWFrO2Nhc2UgMTUyOnllWyIhc2VsIl09a3I7YnJlYWs7Y2FzZSAxNzU6Y2FzZSA2NDQ6Y2FzZSA2MjU6Y2FzZSA1NjI6Y2FzZSAzOTY6Y2FzZSAxMTEyOmNhc2UgMTE0NjpjYXNlIDQ3MTpjYXNlIDEwNTA6Y2FzZSA2NDk6Y2FzZSAxMTA1OmNhc2UgNDk6Y2FzZSA1ODk6Y2Fz''@;'; put 'put ''ZSA2MDc6Y2FzZSA1NjQ6Y2FzZSAxMDU1OmNhc2UgMTY4OmNhc2UgMTc0OmNhc2UgMTE4MDpjYXNlIDQ5OTpjYXNlIDUwNzpjYXNlIDU1MDpjYXNlIDE3MTpjYXNlIDE2NzpjYXNlIDExNzc6Y2FzZSAxNjk6Y2FzZSAxMTgxOmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNjYxOmNhc2UgNjM5OmNh''@;'; put 'put ''c2UgNDc4OmNhc2UgNTM3OmNhc2UgNDc3OmNhc2UgNTM2OmNhc2UgMTEwMzpjYXNlIDY4MDpjYXNlIDExMDQ6Y2FzZSAxMDI0OmNhc2UgNjYzOmNhc2UgNTM1OmNhc2UgNjc4OmNhc2UgNTA0OmNhc2UgMTA0MzpjYXNlIDQyODpjYXNlIDE3MDpjYXNlIDMwNzI6Y2FzZSA1MDpjYXNlIDIwNzA6''@;'; put 'put ''Y2FzZSAxMDQ1OmJyZWFrO2Nhc2UgMzU6ZXQ9ITA7YnJlYWs7Y2FzZSAzNjpldD0hMTticmVhaztjYXNlIDM3OlllLnB1c2goVm4pLGV0PSEwO2JyZWFrO2Nhc2UgMzg6WWUucG9wKCksZXQ9ITE7YnJlYWs7ZGVmYXVsdDppZighKChWbnx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFZu''@;'; put 'put ''fHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighZXR8fHBlLldURiYmIkJydEFDQmVnaW4iIT1ZZVtZZS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitCcisiICIrVm4pfX0scGUpLGRlbGV0ZSBwZS5zdXBib29rcyxkZWxldGUgcGVbIiFyb3ciXSwheWVb''@;'; put 'put ''IiFyZWYiXSYmKE5lLnMucjwyZTZ8fFBlJiYoUGUuZS5yPjB8fFBlLmUuYz4wfHxQZS5zLnI+MHx8UGUucy5jPjApKSYmKHllWyIhcmVmIl09cmEoUGV8fE5lKSkscGUuc2hlZXRSb3dzJiZ5ZVsiIXJlZiJdKXt2YXIgY2E9b28oeWVbIiFyZWYiXSk7cGUuc2hlZXRSb3dzPD0rY2EuZS5yJiYo''@;'; put 'put ''Y2EuZS5yPXBlLnNoZWV0Um93cy0xLGNhLmUucj5OZS5lLnImJihjYS5lLnI9TmUuZS5yKSxjYS5lLnI8Y2Eucy5yJiYoY2Eucy5yPWNhLmUuciksY2EuZS5jPk5lLmUuYyYmKGNhLmUuYz1OZS5lLmMpLGNhLmUuYzxjYS5zLmMmJihjYS5zLmM9Y2EuZS5jKSx5ZVsiIWZ1bGxyZWYiXT15ZVsi''@;'; put 'put ''IXJlZiJdLHllWyIhcmVmIl09cmEoY2EpKX1yZXR1cm4gU24ubGVuZ3RoPjAmJih5ZVsiIW1lcmdlcyJdPVNuKSxNaS5sZW5ndGg+MCYmKHllWyIhY29scyJdPU1pKSxGaS5sZW5ndGg+MCYmKHllWyIhcm93cyJdPUZpKSx5ZX0oUyxHLGssUSxvZSwwLHBlKTpmdW5jdGlvbiBoOChTLFIsayxH''@;'; put 'put ''LFEsb2UsZ2Upe2lmKCFTKXJldHVybiBTO0d8fChHPXsiIWlkIjp7fX0pLG51bGwhPWxlJiZudWxsPT1SLmRlbnNlJiYoUi5kZW5zZT1sZSk7dmFyIHBlPVIuZGVuc2U/W106e30seWU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sUGU9IiIsTmU9IiIsWWU9Uy5tYXRjaChtRCk7WWU/''@;'; put 'put ''KFBlPVMuc2xpY2UoMCxZZS5pbmRleCksTmU9Uy5zbGljZShZZS5pbmRleCtZZVswXS5sZW5ndGgpKTpQZT1OZT1TO3ZhciBldD1OZS5sYXN0SW5kZXhPZigiZXh0THN0IiksRXQ9KC0xPT1ldHx8TmUuc2xpY2UoZXQpLFBlLm1hdGNoKHlEKSk7RXQ/bGIoRXRbMF0sMCxRLGspOihFdD1QZS5t''@;'; put 'put ''YXRjaCh3RCkpJiZmdW5jdGlvbiBvaihTLFIsayxHLFEsb2UsZ2Upe2xiKFMuc2xpY2UoMCxTLmluZGV4T2YoIj4iKSksMCxHLFEpO3ZhciBwZT1SLm1hdGNoKG1TKTtpZihwZSl7dmFyIFBlPXBrKHZyKHBlWzBdKSxvZSxnZSk7a1siIXRhYmNvbG9yIl09UGV9aWYoKHBlPVIubWF0Y2goaWop''@;'; put 'put ''KSYmdnIocGVbMF0pLmZpdFRvUGFnZSYmKGtbIiFwcmludCJdfHwoa1siIXByaW50Il09e30pLGtbIiFwcmludCJdLnByb3BzfHwoa1siIXByaW50Il0ucHJvcHM9e30pLGtbIiFwcmludCJdLnByb3BzLmZpdHx8KGtbIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09a1siIXByaW50Il0u''@;'; put 'put ''cHJvcHMuZml0LmhlaWdodCYmKGtbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09a1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoa1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSxwZT1SLm1hdGNoKGFqKSl7a1siIW91dGxpbmUiXT17fTt2YXIgWWU9dnIocGVb''@;'; put 'put ''MF0pO1llLnN1bW1hcnlCZWxvdyYmKGtbIiFvdXRsaW5lIl0uYWJvdmU9IXRpKFllLnN1bW1hcnlCZWxvdykpLFllLnN1bW1hcnlSaWdodCYmKGtbIiFvdXRsaW5lIl0ubGVmdD0hdGkoWWUuc3VtbWFyeVJpZ2h0KSl9fShFdFswXSxFdFsxXXx8IiIscGUsUSxrLGdlLG9lKTt2YXIgYXQ9KFBl''@;'; put 'put ''Lm1hdGNoKC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGF0PjApe3ZhciBidD1QZS5zbGljZShhdCxhdCs1MCkubWF0Y2gob2IpO2J0JiYoIVJ8fCFSLm5vZGltKSYmZnVuY3Rpb24gY1MoUyxSKXt2YXIgaz1vbyhSKTtrLnMucjw9ay5lLnImJmsucy5jPD1r''@;'; put 'put ''LmUuYyYmay5zLnI+PTAmJmsucy5jPj0wJiYoU1siIXJlZiJdPXJhKGspKX0ocGUsYnRbMV0pfXZhciBqdD1QZS5tYXRjaChSbyk7anQmJmp0WzFdJiZmdW5jdGlvbiBDaihTLFIsayxHKXtrLlZpZXdzfHwoay5WaWV3cz1be31dKTt2YXIgUT0wO1MucmVwbGFjZShTUyxmdW5jdGlvbihvZSxn''@;'; put 'put ''ZSl7dmFyIHBlPXZyKG9lKTtpZihrLlZpZXdzW0ddfHwoay5WaWV3c1tHXT17fSksdGkocGUucmlnaHRUb0xlZnQpJiYoay5WaWV3c1tHXS5SVEw9ITApLHBlLnNob3dHcmlkTGluZXMmJihrLlZpZXdzW0ddLmdyaWQ9dGkocGUuc2hvd0dyaWRMaW5lcyksbnVsbD09UlsiIWdyaWRsaW5lcyJd''@;'; put 'put ''JiYoUlsiIWdyaWRsaW5lcyJdPXRpKHBlLnNob3dHcmlkTGluZXMpKSksK3BlLnpvb21TY2FsZSYmKGsuVmlld3NbR10uem9vbT0rcGUuem9vbVNjYWxlKSxwZS52aWV3JiYoay5WaWV3c1tHXS52aWV3PXBlLnZpZXcpLDE9PSsrUSYmIi8+IiE9b2Uuc2xpY2UoLTIpKXt2YXIgeWU9Uy5zbGlj''@;'; put 'put ''ZShnZStvZS5sZW5ndGgpLFBlPXllLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFQZSlyZXR1cm4iIjt2YXIgTmU9KHllPXllLnNsaWNlKDAsUGUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/Pi8p''@;'; put 'put ''O2lmKE5lKXt2YXIgWWU9dnIoTmVbMF0pOyJmcm96ZW4iPT1ZZS5zdGF0ZT9SWyIhZnJlZXplIl09VGEoK1llLnhTcGxpdHx8MCkramkoK1llLnlTcGxpdHx8MCk6WWUudG9wTGVmdENlbGwmJihSWyIhZnJlZXplIl09WWUudG9wTGVmdENlbGwpfXZhciBldD15ZS5tYXRjaCgvPCg/Olx3Oik/''@;'; put 'put ''c2VsZWN0aW9uKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoZXQpe3ZhciBjdD12cihldFswXSk7aWYoY3QuYWN0aXZlQ2VsbCYmKFJbIiFzZWwiXT17Y2VsbDpjdC5hY3RpdmVDZWxsfSksY3Quc3FyZWYpe3ZhciBFdD1jdC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO1JbIiFzZWwiXXx8''@;'; put 'put ''KFJbIiFzZWwiXT17Y2VsbDpxaShNcyhFdCkucyl9KSxSWyIhc2VsIl0ucmFuZ2U9Y3Quc3FyZWZ9fX1yZXR1cm4iIn0pfShqdFsxXSxwZSxRLGspO3ZhciBrdD1QZS5tYXRjaChHZSksT3Q9W107aWYoUi5jZWxsU3R5bGVzKXt2YXIgS3Q9UGUubWF0Y2godGopO0t0JiZmdW5jdGlvbiB5UyhT''@;'; put 'put ''LFIsayl7Zm9yKHZhciBHPSExLFE9MDtRIT1SLmxlbmd0aDsrK1Epe3ZhciBvZT12cihSW1FdLCEwKTtvZS5oaWRkZW4mJihvZS5oaWRkZW49dGkob2UuaGlkZGVuKSk7dmFyIGdlPXBhcnNlSW50KG9lLm1pbiwxMCktMSxwZT1wYXJzZUludChvZS5tYXgsMTApLTE7Zm9yKG9lLm91dGxpbmVM''@;'; put 'put ''ZXZlbCYmKG9lLmxldmVsPStvZS5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBvZS5taW4sZGVsZXRlIG9lLm1heCxvZS53aWR0aD0rb2Uud2lkdGgsIUcmJm9lLndpZHRoJiYoRz0hMCksUTAob2UpLG9lLnN0eWxlJiYob2Uucz1tOChvZS5zdHlsZSxrKSk7Z2U8PXBlOylTW2dlKytdPXF0KG9l''@;'; put 'put ''KX19KE90LEt0LGdlKX1pZihZZSYmdjgoWWVbMV0sayxwZSxSLHllLG9lLGdlKSxSLmNhbGxiYWNrKXJldHVybiBwZTt2YXIgVG49TmUubWF0Y2goX0QpO1RuJiYocGVbIiFwcm90ZWN0Il09ZnVuY3Rpb24gaGooUyl7dmFyIFI9dnIoUywhMCwhMCksaz17fTtpZih0aShSLnNoZWV0KSlyZXR1''@;'; put 'put ''cm4gYlMuZm9yRWFjaChmdW5jdGlvbihHKXtrW0ddPW51bGwhPVJbR10mJnRpKFJbR10pfSksUkQuZm9yRWFjaChmdW5jdGlvbihHKXtrW0ddPW51bGw9PVJbR118fHRpKFJbR10pfSksUi5hbGdvcml0aG1OYW1lJiYoay5lbmNyeXB0aW9uPXthbGdvOlIuYWxnb3JpdGhtTmFtZSxoYXNoOlIu''@;'; put 'put ''aGFzaFZhbHVlLHNhbHQ6Ui5zYWx0VmFsdWUsc3BpbjorUi5zcGluQ291bnR8fDFlNX0pLGt9KFRuWzBdKSk7dmFyIHJyPU5lLm1hdGNoKG5qKTtyciYmKHBlWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIGdqKFMpe3JldHVybntyZWY6KFMubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFd''@;'; put 'put ''fX0ocnJbMF0pKTt2YXIgU249W10sbHI9TmUubWF0Y2goZDgpO2lmKGxyKWZvcihhdD0wO2F0IT1sci5sZW5ndGg7KythdClTblthdF09b28obHJbYXRdLnNsaWNlKGxyW2F0XS5pbmRleE9mKCciJykrMSkpO3ZhciBYbj0oLTE9PWV0P05lOk5lLnNsaWNlKDAsZXQpKS5tYXRjaChkUyk7WG4m''@;'; put 'put ''JihwZVsiIWNvbmRmbXQiXT1bXS5jb25jYXQuYXBwbHkoW10sWG4ubWFwKGZ1bmN0aW9uKFZuKXtyZXR1cm4gdjIoVm4sUixvZSxnZSl9KSkpLGV0Pi0xJiYoWG49TmUuc2xpY2UoZXQpLm1hdGNoKGRTKSkmJihwZVsiIWNvbmRmbXQiXXx8KHBlWyIhY29uZGZtdCJdPVtdKSxwZVsiIWNvbmRm''@;'; put 'put ''bXQiXT1wZVsiIWNvbmRmbXQiXS5jb25jYXQuYXBwbHkocGVbIiFjb25kZm10Il0sWG4ubWFwKGZ1bmN0aW9uKFZuKXtyZXR1cm4gdjIoVm4sUixvZSxnZSwhMCl9KSkpO3ZhciBCbj0oLTE9PWV0P05lOk5lLnNsaWNlKDAsZXQpKS5tYXRjaChmZSk7Qm4mJihwZVsiIXZhbGlkYXRpb25zIl09''@;'; put 'put ''d1MoQm5bMF0sUikpLGV0Pi0xJiYoQm49TmUuc2xpY2UoZXQpLm1hdGNoKGZlKSkmJihwZVsiIXZhbGlkYXRpb25zIl18fChwZVsiIXZhbGlkYXRpb25zIl09W10pLHBlWyIhdmFsaWRhdGlvbnMiXT1wZVsiIXZhbGlkYXRpb25zIl0uY29uY2F0KHdTKEJuWzBdLFIsITApKSk7dmFyIGZyPU5l''@;'; put 'put ''Lm1hdGNoKHVTKTtmciYmZnVuY3Rpb24gTEQoUyxSLGspe2Zvcih2YXIgRz1BcnJheS5pc0FycmF5KFMpLFE9MDtRIT1SLmxlbmd0aDsrK1Epe3ZhciBvZT12cihnbyhSW1FdKSwhMCk7aWYoIW9lLnJlZilyZXR1cm47dmFyIGdlPSgoa3x8e30pWyIhaWQiXXx8W10pW29lLmlkXTtnZT8ob2Uu''@;'; put 'put ''VGFyZ2V0PWdlLlRhcmdldCxvZS5sb2NhdGlvbiYmKG9lLlRhcmdldCs9IiMiK1FyKG9lLmxvY2F0aW9uKSkpOihvZS5UYXJnZXQ9IiMiK1FyKG9lLmxvY2F0aW9uKSxnZT17VGFyZ2V0Om9lLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxvZS5SZWw9Z2Usb2UudG9vbHRpcCYmKG9l''@;'; put 'put ''LlRvb2x0aXA9b2UudG9vbHRpcCxkZWxldGUgb2UudG9vbHRpcCk7Zm9yKHZhciBwZT1vbyhvZS5yZWYpLHllPXBlLnMucjt5ZTw9cGUuZS5yOysreWUpZm9yKHZhciBQZT1wZS5zLmM7UGU8PXBlLmUuYzsrK1BlKXt2YXIgTmU9cWkoe2M6UGUscjp5ZX0pO0c/KFNbeWVdfHwoU1t5ZV09W10p''@;'; put 'put ''LFNbeWVdW1BlXXx8KFNbeWVdW1BlXT17dDoieiIsdjp2b2lkIDB9KSxTW3llXVtQZV0ubD1vZSk6KFNbTmVdfHwoU1tOZV09e3Q6InoiLHY6dm9pZCAwfSksU1tOZV0ubD1vZSl9fX0ocGUsZnIsRyk7dmFyIGJyPU5lLm1hdGNoKGhTKTticiYmZnVuY3Rpb24gc2ooUyxSKXt2YXIgaz12cihT''@;'; put 'put ''LCExLCEwKTtSWyIhcHJpbnQiXXx8KFJbIiFwcmludCJdPXt9KSxSWyIhcHJpbnQiXS5wcm9wc3x8KFJbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgRz1SWyIhcHJpbnQiXS5wcm9wcztrLmdyaWRMaW5lcyYmKEcuZ3JpZGxpbmVzPXRpKGsuZ3JpZExpbmVzKSksbnVsbCE9ay5ob3Jpem9udGFs''@;'; put 'put ''Q2VudGVyZWQmJihHLmNlbnRlclg9dGkoay5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1rLnZlcnRpY2FsQ2VudGVyZWQmJihHLmNlbnRlclk9dGkoay52ZXJ0aWNhbENlbnRlcmVkKSl9KGJyWzBdLHBlKTt2YXIgZXI9TmUubWF0Y2goYkQpO2VyJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIh''@;'; put 'put ''cHJpbnQiXT17fSkpLm1hcmdpbnM9cGVbIiFtYXJnaW5zIl09T0QodnIoZXJbMF0pKSk7dmFyIE1pPU5lLm1hdGNoKFNEKTtNaSYmZnVuY3Rpb24gREQoUyxSKXt2YXIgaz12cihTLCExLCEwKTtkZWxldGUgay5pZCxkZWxldGUga1swXSxSWyIhcHJpbnQiXXx8KFJbIiFwcmludCJdPXt9KSxS''@;'; put 'put ''WyIhcHJpbnQiXS5wcm9wc3x8KFJbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgRz1SWyIhcHJpbnQiXS5wcm9wcztrLm9yaWVudGF0aW9uJiYoRy5vcmllbnRhdGlvbj1rLm9yaWVudGF0aW9uKSxrLnNjYWxlJiYoRy5zY2FsZT0ray5zY2FsZSksK2suZml0VG9IZWlnaHQ+PTAmJigoRy5maXR8''@;'; put 'put ''fChHLmZpdD17fSkpLmhlaWdodD0ray5maXRUb0hlaWdodCksK2suZml0VG9XaWR0aD49MCYmKChHLmZpdHx8KEcuZml0PXt9KSkud2lkdGg9K2suZml0VG9XaWR0aCksay5wYXBlckhlaWdodCYmay5wYXBlcldpZHRoP0cucGFwZXI9e3dpZHRoOmsucGFwZXJXaWR0aCxoZWlnaHQ6ay5wYXBl''@;'; put 'put ''ckhlaWdodH06ay5wYXBlclNpemUmJihHLnBhcGVyPW44W0cucGFwZXI9K2sucGFwZXJTaXplXXx8Ry5wYXBlciksay5ob3Jpem9udGFsRHBpP0cuZHBpPStrLmhvcml6b250YWxEcGk6ay52ZXJ0aWNhbERwaSYmKEcuZHBpPStrLnZlcnRpY2FsRHBpKSwiYXV0b21hdGljIiE9KGsuZmlyc3RQ''@;'; put 'put ''YWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihHLmZpcnN0PStrLmZpcnN0UGFnZU51bWJlciksdGkoay5ibGFja0FuZFdoaXRlKSYmKEcuYnc9ITApLHRpKGsuZHJhZnQpJiYoRy5kcmFmdD0hMCksIm92ZXJUaGVuRG93biI9PWsucGFnZU9yZGVyJiYoRy5vcmRlcj0ib3ZlciIpLFREW2suY2Vs''@;'; put 'put ''bENvbW1lbnRzXSYmKEcuY29tbWVudHM9VERbay5jZWxsQ29tbWVudHNdKSxrRFtrLmVycm9yc10mJihHLmVycm9ycz1rRFtrLmVycm9yc10pfShNaVswXSxwZSk7dmFyIEZpPU5lLm1hdGNoKGpnKTtGaSYmZnVuY3Rpb24gdmooUyxSKXtpZihSWyIhcHJpbnQiXXx8KFJbIiFwcmludCJdPXt9''@;'; put 'put ''KSxTWzFdKXt2YXIgaz0iIixHPTA7U1sxXS5yZXBsYWNlKGVuLGZ1bmN0aW9uKFEsb2Upe2lmKCIvIiE9US5jaGFyQXQoMSkpaz1RLnNsaWNlKDEsLTEpLEc9b2UrUS5sZW5ndGg7ZWxzZSBpZihrKXt2YXIgZ2U9ay5tYXRjaCgvSGVhZGVyLyk/ImhlYWRlciI6ImZvb3RlciIscGU9ay5yZXBs''@;'; put 'put ''YWNlKC9IZWFkZXJ8Rm9vdGVyLywiIik7az0iIixSWyIhcHJpbnQiXVtnZV18fChSWyIhcHJpbnQiXVtnZV09e30pLFJbIiFwcmludCJdW2dlXVtwZV09UXIoZ28oU1sxXS5zbGljZShHLG9lKSkpfX0pfX0oRmkscGUpO3ZhciBuYT1OZS5tYXRjaChyaik7bmEmJigocGVbIiFwcmludCJdfHwo''@;'; put 'put ''cGVbIiFwcmludCJdPXt9KSkucm93QnJlYWtzPXBlWyIhcm93QnJlYWtzIl09ZnVuY3Rpb24gY2ooUyl7dmFyIFI9W107cmV0dXJuKFMubWF0Y2goRjApfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz12cihrKTtSLnB1c2goe1I6K0cuaWR9KX0pLFJ9KG5hWzBdKSk7dmFyIGNhPU5l''@;'; put 'put ''Lm1hdGNoKHNiKTtjYSYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5jb2xCcmVha3M9cGVbIiFjb2xCcmVha3MiXT1mdW5jdGlvbiBrbmUoUyl7dmFyIFI9W107cmV0dXJuKFMubWF0Y2goRjApfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz12cihrKTtSLnB1c2go''@;'; put 'put ''e0M6K0cuaWR9KX0pLFJ9KGNhWzBdKSk7dmFyIExpPVtdO2lmKChMaT1OZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihwZVsiIXJlbCJdPUxpWzFdKSwoTGk9TmUubWF0Y2goL2xlZ2FjeURyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFsZWdyZWwiXT1MaVsxXSksKExp''@;'; put 'put ''PU5lLm1hdGNoKHZEKSkmJihwZVsiIWN0cmxpZCJdPUxpLm1hcChmdW5jdGlvbihWbil7cmV0dXJuIHZyKFZuKX0pKSwoTGk9TmUubWF0Y2goQ0QpKSYmZnVuY3Rpb24gcFMoUyxSKXtTWyIhdGFibGVyZWZzIl18fChTWyIhdGFibGVyZWZzIl09W10pLChSLm1hdGNoKGZTKXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oayl7U1siIXRhYmxlcmVmcyJdLnB1c2godnIoaykuaWQpfSl9KHBlLExpWzFdKSxSJiZSLm5vZGltJiYoeWUucy5jPXllLnMucj0wKSwhcGVbIiFyZWYiXSYmeWUuZS5jPj15ZS5zLmMmJnllLmUucj49eWUucy5yJiYocGVbIiFyZWYiXT1yYSh5ZSkpLFIuc2hlZXRSb3dz''@;'; put 'put ''PjAmJnBlWyIhcmVmIl0pe3ZhciBrcj1vbyhwZVsiIXJlZiJdKTtSLnNoZWV0Um93czw9K2tyLmUuciYmKGtyLmUucj1SLnNoZWV0Um93cy0xLGtyLmUucj55ZS5lLnImJihrci5lLnI9eWUuZS5yKSxrci5lLnI8a3Iucy5yJiYoa3Iucy5yPWtyLmUuciksa3IuZS5jPnllLmUuYyYmKGtyLmUu''@;'; put 'put ''Yz15ZS5lLmMpLGtyLmUuYzxrci5zLmMmJihrci5zLmM9a3IuZS5jKSxwZVsiIWZ1bGxyZWYiXT1wZVsiIXJlZiJdLHBlWyIhcmVmIl09cmEoa3IpKX1yZXR1cm4ga3QmJihwZVsiIXNoZWV0Rm9ybWF0Il09ZnVuY3Rpb24gTUQoUyl7dmFyIFI9e30saz17fSxHPSExLFE9e30sb2U9ITE7cmV0''@;'; put 'put ''dXJuIFMuZGVmYXVsdFJvd0hlaWdodCYmKEc9ITAsay5ocHQ9cGFyc2VGbG9hdChTLmRlZmF1bHRSb3dIZWlnaHQpKSxTLnplcm9IZWlnaHQmJihHPSEwLGsuaGlkZGVuPXRpKFMuemVyb0hlaWdodCkpLFMuYmFzZUNvbFdpZHRoPyhvZT0hMCxRLndjaD1wYXJzZUZsb2F0KFMuYmFzZUNvbFdp''@;'; put 'put ''ZHRoKSk6Uy5kZWZhdWx0Q29sV2lkdGgmJihvZT0hMCxRLndjaD1wYXJzZUZsb2F0KFMuZGVmYXVsdENvbFdpZHRoKS01L1RjKSxTLm91dGxpbmVMZXZlbENvbCYmKFIuY29sb3V0bGluZT1wYXJzZUludChTLm91dGxpbmVMZXZlbENvbCkpLFMub3V0bGluZUxldmVsUm93JiYoUi5yb3dvdXRs''@;'; put 'put ''aW5lPXBhcnNlSW50KFMub3V0bGluZUxldmVsUm93KSksUy50aGlja0JvdHRvbSYmKFIuYm90dGhpY2s9dGkoUy50aGlja0JvdHRvbSkpLFMudGhpY2tUb3AmJihSLnRvcHRoaWNrPXRpKFMudGhpY2tUb3ApKSxTLmR5RGVzY2VudCYmKFIuZHlEZXNjZW50PXBhcnNlRmxvYXQoUy5keURlc2Nl''@;'; put 'put ''bnQpKSxHJiYoQnYoayksUi5yb3c9ayksb2UmJihRMChRKSxSLmNvbD1RKSxSfSh2cihrdFswXSkpKSxPdC5sZW5ndGg+MCYmKHBlWyIhY29scyJdPU90KSxTbi5sZW5ndGg+MCYmKHBlWyIhbWVyZ2VzIl09U24pLEdbIiFpZCJdW3BlWyIhcmVsIl1dJiYocGVbIiFkcmF3ZWwiXT1HWyIhaWQi''@;'; put 'put ''XVtwZVsiIXJlbCJdXSksR1siIWlkIl1bcGVbIiFsZWdyZWwiXV0mJihwZVsiIWxlZ2RyYXdlbCJdPUdbIiFpZCJdW3BlWyIhbGVncmVsIl1dKSwocGVbIiFjdHJsaWQiXXx8W10pLmZvckVhY2goZnVuY3Rpb24oVm4pe1ZuLnJlbD1HWyIhaWQiXVtWbi5pZF19KSxudWxsPT1wZVsiIWdyaWRs''@;'; put 'put ''aW5lcyJdJiYocGVbIiFncmlkbGluZXMiXT0hMCkscGV9KFMsRyxrLFEsb2UsZ2UscGUpfShldCxSLFEseWUsb2VbR10sUGUsTmUsWWUpO2JyZWFrO2Nhc2UiY2hhcnQiOmN0PWZ1bmN0aW9uIHl6KFMsUixrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rp''@;'; put 'put ''b24gaHooUyxSLGssRyxRKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KTt2YXIgb2U9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LGdlPVtdLHBlPSExO3JldHVybiB1cihTLGZ1bmN0aW9uKFBlLE5lLFllKXtzd2l0Y2goWWUpe2Nhc2UgNTUwOm9l''@;'; put 'put ''WyIhcmVsIl09UGU7YnJlYWs7Y2FzZSA2NTE6US5TaGVldHNba118fChRLlNoZWV0c1trXT17fSksUGUubmFtZSYmKFEuU2hlZXRzW2tdLkNvZGVOYW1lPVBlLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2''@;'; put 'put ''OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OnBlPSEwO2JyZWFrO2Nhc2UgMzY6cGU9ITE7YnJlYWs7Y2FzZSAzNzpnZS5wdXNoKE5lKTticmVhaztjYXNlIDM4OmdlLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKE5lfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKWdlLnB1c2goTmUpO2Vsc2UgaWYo''@;'; put 'put ''KE5lfHwiIikuaW5kZXhPZigiRW5kIik+MClnZS5wb3AoKTtlbHNlIGlmKCFwZXx8Ui5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1llKyIgIitOZSl9fSxSKSxHWyIhaWQiXVtvZVsiIXJlbCJdXSYmKG9lWyIhZHJhd2VsIl09R1siIWlkIl1bb2VbIiFyZWwiXV0p''@;'; put 'put ''LG9lfShTLEcsayxRLG9lKTpmdW5jdGlvbiB1eihTLFIsayxHLFEpe2lmKCFTKXJldHVybiBTO0d8fChHPXsiIWlkIjp7fX0pO3ZhciBnZSxvZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0scGU9Uy5tYXRjaCh5RCk7cGUmJmxiKHBlWzBdLDAsUSxrKTt2YXIg''@;'; put 'put ''eWU9Uy5tYXRjaChiRCk7cmV0dXJuIHllJiYob2VbIiFtYXJnaW5zIl09T0QodnIoeWVbMF0pKSksKGdlPVMubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYob2VbIiFyZWwiXT1nZVsxXSksR1siIWlkIl1bb2VbIiFyZWwiXV0mJihvZVsiIWRyYXdlbCJdPUdbIiFpZCJdW29lWyIh''@;'; put 'put ''cmVsIl1dKSxvZX0oUywwLGssUSxvZSl9KGV0LFIsUSx5ZSxvZVtHXSxQZSk7YnJlYWs7Y2FzZSJtYWNybyI6Y3Q9ZnVuY3Rpb24gX3ooUyxSLGssRyxRLG9lLGdlLHBlKXtyZXR1cm4gUi5zbGljZSgtNCkseyIhdHlwZSI6Im1hY3JvIn19KDAsUik7YnJlYWs7Y2FzZSJkaWFsb2ciOmN0PWZ1''@;'; put 'put ''bmN0aW9uIHd6KFMsUixrLEcsUSxvZSxnZSxwZSl7cmV0dXJuIFIuc2xpY2UoLTQpLHsiIXR5cGUiOiJkaWFsb2cifX0oMCxSKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHNoZWV0IHR5cGUgIitwZSl9aWYoeWUuY2FsbGJhY2spcmV0dXJuO2dlW0ddPWN0''@;'; put 'put ''LGZ1bmN0aW9uIEp6KFMsUixrLEcsUSxvZSxnZSxwZSl7aWYoUyYmU1siIWRyYXdlbCJdKXt2YXIgeWU9Zm4oU1siIWRyYXdlbCJdLlRhcmdldCxHKSxQZT1Wcih5ZSksTmU9ZnVuY3Rpb24gTEMoUyxSLGssRyxRKXt2YXIgb2U9e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZigh''@;'; put 'put ''UylyZXR1cm4gb2U7dmFyIGdlPVF8fHt9O3JldHVybihTLm1hdGNoKC88W148XSo/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPz4vZyl8fFtdKS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKHBlKXt2YXIgeWU9IiIsUGU9e3R5cGU6IiJ9LE5lPXt9LFllPSEwLGV0PSExLGN0PSExLEV0PSExLGF0PXtzOnt9fSxidD0tMSxqdD1bXSxrdD1bXSxPdD17czp7YWxpZ25tZW50Ontob3Jpem9udGFsOiJjZW50ZXIiLHZlcnRpY2FsOiJjZW50ZXIifX19LEt0PSIiLFRuPS0xLFNuPXt9''@;'; put 'put ''O3BlLnJlcGxhY2UoZW4sZnVuY3Rpb24obHIsWG4pe2p0PW51bGw7dmFyIEJuPXZyKGxyKSxmcj1XbihCblswXSkucmVwbGFjZSgvW1wvXT8+JC8sIiIpO3N3aXRjaChmcil7Y2FzZSI8Y2xpZW50RGF0YSI6YnJlYWs7Y2FzZSI8YWJzb2x1dGVBbmNob3IiOmNhc2UiPG9uZUNlbGxBbmNob3Ii''@;'; put 'put ''OmNhc2UiPHR3b0NlbGxBbmNob3IiOlBlLnR5cGU9V24oQm5bMF0pLnJlcGxhY2UoL1s8Pl0vZywiIik7YnJlYWs7Y2FzZSI8L2Fic29sdXRlQW5jaG9yIjpjYXNlIjwvb25lQ2VsbEFuY2hvciI6Y2FzZSI8L3R3b0NlbGxBbmNob3IiOmJyZWFrO2Nhc2UiPHBvcyI6UGUucG9zPXt4OitCbi54''@;'; put 'put ''LHk6K0JuLnl9O2JyZWFrO2Nhc2UiPGV4dCI6WWUmJihQZS5leHQ9e3g6K0JuLmN4LHk6K0JuLmN5fSk7YnJlYWs7Y2FzZSI8ZnJvbSI6Y2FzZSI8dG8iOk5lPXt9O2JyZWFrO2Nhc2UiPC9mcm9tIjpZZSYmKFBlLmZyb209TmUpO2JyZWFrO2Nhc2UiPC90byI6WWUmJihQZS50bz1OZSk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8Y29sIjpjYXNlIjxjb2xPZmYiOmNhc2UiPHJvdyI6Y2FzZSI8cm93T2ZmIjpidD1Ybitsci5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbCI6TmUuYz0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2UiPC9jb2xPZmYiOk5lLmNPZmY9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNl''@;'; put 'put ''Ijwvcm93IjpOZS5yPStwZS5zbGljZShidCxYbik7YnJlYWs7Y2FzZSI8L3Jvd09mZiI6TmUuck9mZj0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2UiPHNwIjp5ZT0ic2hhcGUiLE90LkFuY2hvcj1QZSxvZS5zaGFwZXMucHVzaChPdCksWWU9ITE7YnJlYWs7Y2FzZSI8L3NwIjpZZT0hMDti''@;'; put 'put ''cmVhaztjYXNlIjxncmFwaGljRnJhbWUiOnllPSJncmFwaGljIixZZT0hMTticmVhaztjYXNlIjwvZ3JhcGhpY0ZyYW1lIjpZZT0hMDticmVhaztjYXNlIjxwaWMiOnllPSJwaWN0dXJlIixZZT0hMTticmVhaztjYXNlIjwvcGljIjpZZT0hMDticmVhaztjYXNlIjxncnBTcCI6eWU9Imdyb3Vw''@;'; put 'put ''c2hhcGUiLFllPSExO2JyZWFrO2Nhc2UiPC9ncnBTcCI6WWU9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpYyI6Y2FzZSI8L2dyYXBoaWMiOmNhc2UiPHhmcm0iOmNhc2UiPC94ZnJtIjpjYXNlIjxvZmYiOmJyZWFrO2Nhc2UiPGdyYXBoaWNEYXRhIjpldD0hMDticmVhaztjYXNlIjwvZ3JhcGhpY0Rh''@;'; put 'put ''dGEiOmV0PSExO2JyZWFrO2Nhc2UiPGJsaXBGaWxsIjpldD0hMDticmVhaztjYXNlIjwvYmxpcEZpbGwiOmV0PSExO2JyZWFrO2Nhc2UiPC9ibGlwIjpicmVhaztjYXNlIjxzcmNSZWN0IjpldD0hMDticmVhaztjYXNlIjwvc3JjUmVjdCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bm9GaWxsIjppZihj''@;'; put 'put ''dClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMSlbMF0mJihPdC5zLmZnQ29sb3I9bnVsbCk7YnJlYWs7Y2FzZSI8L3NvbGlkRmlsbCI6aWYoY3R8fEV0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0yKVswXT9PdC5zLmZnQ29sb3I9U246IjxyUHIiPT1rdC5zbGljZSgtMilbMF0mJmt0Lmlu''@;'; put 'put ''ZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMuY29sb3I9U24pLFNuPXt9LEV0PSExO2JyZWFrO2Nhc2UiPHByc3RHZW9tIjoic2hhcGUiPT15ZSYmKE90WyIhc2hhcGUiXT1Cbi5wcnN0KTticmVhaztjYXNlIjwvcHJzdEdlb20iOmNhc2UiPGF2THN0IjpicmVhaztjYXNlIjx0eEJvZHkiOmV0''@;'; put 'put ''PSEwLE90LlI9W107YnJlYWs7Y2FzZSI8L3R4Qm9keSI6ZXQ9ITE7YnJlYWs7Y2FzZSI8Ym9keVByIjpPdC5zLmFsaWdubWVudC52ZXJ0aWNhbD1wQltCbi5hbmNob3J8fCJ0Il18fCJ0b3AiO2JyZWFrO2Nhc2UiPGxzdFN0eWxlIjpicmVhaztjYXNlIjx0IjpUbj1Ybitsci5sZW5ndGg7YnJl''@;'; put 'put ''YWs7Y2FzZSI8YnIiOmNhc2UiPGJyLz4iOkt0Kz0iXG4iO2JyZWFrO2Nhc2UiPC90IjpLdCs9cGUuc2xpY2UoVG4sWG4pO2JyZWFrO2Nhc2UiPHBQciI6T3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8KE90LnMuYWxpZ25tZW50Lmhvcml6b250YWw9UGdbQm4uYWxnbnx8ImwiXXx8ImxlZnQi''@;'; put 'put ''KSxrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihhdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPVBnW0JuLmFsZ258fCJsIl18fCJsZWZ0Iik7YnJlYWs7Y2FzZSI8clByIjpCbi5zeiYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoT3Qucy5zej1hdC5zLnN6PStCbi5zei8xMDApO2JyZWFr''@;'; put 'put ''O2Nhc2UiPHAiOkt0PSIiLGF0PXt0OiJzIix2OiIiLHM6e2FsaWdubWVudDp7fX19O2JyZWFrO2Nhc2UiPC9wIjoic2hhcGUiPT15ZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoT3Qudj0oT3Qudnx8IiIpK0t0LGF0LnY9S3QsT3QuUi5wdXNoKGF0KSk7YnJlYWs7Y2FzZSI8bGF0aW4i''@;'; put 'put ''OkJuLnR5cGVmYWNlJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihhdC5zLm5hbWU9Qm4udHlwZWZhY2UpO2JyZWFrO2Nhc2UiPHN0eWxlIjpldD0hMCxjdD0hMDticmVhaztjYXNlIjwvc3R5bGUiOmV0PSExLGN0PSExO2JyZWFrO2Nhc2UiPGxuUmVmIjpjYXNlIjxmaWxsUmVmIjpjYXNl''@;'; put 'put ''IjxlZmZlY3RSZWYiOmNhc2UiPGZvbnRSZWYiOmJyZWFrO2Nhc2UiPC9maWxsUmVmIjohY3QmJiJzaGFwZSI9PXllJiYoT3Qucy5mZ0NvbG9yPVNuKSxTbj17fTticmVhaztjYXNlIjwvZm9udFJlZiI6IWN0JiYic2hhcGUiPT15ZSYmKE90LnMuY29sb3I9U24pLFNuPXt9O2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHNjaGVtZUNsciI6dmFyIGJyPXtiZzE6Imx0MSIsYmcyOiJsdDIiLHR4MToiZGsxIix0eDI6ImRrMiJ9W0JuLnZhbF18fEJuLnZhbCxlcj0oKEcudGhlbWVFbGVtZW50c3x8e30pLmNsclNjaGVtZXx8W10pLmZpbmQoZnVuY3Rpb24oRmkpe3JldHVybiBGaS5uYW1lPT1icn0pO2VyP1NuLnJn''@;'; put 'put ''Yj1lci5yZ2I6RXQ9ITA7YnJlYWs7Y2FzZSI8c2NyZ2JDbHIiOkV0PSEwO2JyZWFrO2Nhc2UiPHNyZ2JDbHIiOlNuLnJnYj1Cbi52YWwuc2xpY2UoLTYpO2JyZWFrO2Nhc2UiPGhzbENsciI6Y2FzZSI8c3lzQ2xyIjpjYXNlIjxwcnN0Q2xyIjpFdD0hMDticmVhaztjYXNlIjxjaGFydCI6anQ9''@;'; put 'put ''b2UuY2hhcnRzO3ZhciBNaT1Cbi5pZDtjYXNlIjxibGlwIjpqdHx8KGp0PW9lLmltYWdlcyxNaT1Cbi5lbWJlZCksanQucHVzaCh7QW5jaG9yOlBlLFRhcmdldDooUlsiIWlkIl1bTWldfHx7fSkuVGFyZ2V0fSksQm4ubGluayYmKGp0W2p0Lmxlbmd0aC0xXS5MaW5rPShSWyIhaWQiXVtCbi5s''@;'; put 'put ''aW5rXXx8e30pLlRhcmdldCk7YnJlYWs7Y2FzZSI8Z3JwU3BQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2dycFNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPG52R3JwU3BQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L252R3JwU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8c3BQciI6ZXQ9ITA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L3NwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPHN0cmV0Y2giOmNhc2UiPC9zdHJldGNoIjpjYXNlIjxmaWxsUmVjdCI6Y2FzZSI8bnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L252R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGNOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvY052R3JhcGhpY0ZyYW1l''@;'; put 'put ''UHIiOmNhc2UiPGdyYXBoaWNGcmFtZUxvY2tzIjpjYXNlIjxudlBpY1ByIjpjYXNlIjwvbnZQaWNQciI6Y2FzZSI8Y052UGljUHIiOmNhc2UiPC9jTnZQaWNQciI6Y2FzZSI8cGljTG9ja3MiOmNhc2UiPGNOdkdycFNwUHIiOmNhc2UiPC9jTnZHcnBTcFByIjpjYXNlIjxncnBTcExvY2tzIjpj''@;'; put 'put ''YXNlIjxudlNwUHIiOmNhc2UiPC9udlNwUHIiOmNhc2UiPGNOdlNwUHIiOmNhc2UiPC9jTnZTcFByIjpjYXNlIjxzcExvY2tzIjpicmVhaztjYXNlIjxjTnZQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2NOdlByIjpldD0hMTticmVhaztjYXNlIjxjeG5TcCI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2N4''@;'; put 'put ''blNwIjpldD0hMTticmVhaztjYXNlIjxjTnZDeG5TcFByIjpldD0hMDticmVhaztjYXNlIjwvY052Q3huU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bnZDeG5TcFByIjpjYXNlIjwvbnZDeG5TcFByIjpicmVhaztjYXNlIjxleHRMc3QiOmV0PSEwLGN0PSEwO2JyZWFrO2Nhc2UiPC9leHRMc3Qi''@;'; put 'put ''OmV0PSExLGN0PSExO2JyZWFrO2Nhc2UiPC9leHQiOmJyZWFrO2RlZmF1bHQ6aWYoZ2UmJmdlLldURiYmIWV0KXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrQm5bMF0rIiBpbiBkcmF3aW5nIil9cmV0dXJuIjwvIj09ZnIuc2xpY2UoMCwyKT9rdC5wb3AoKToiLz4iIT1sci5zbGlj''@;'; put 'put ''ZShsci5sZW5ndGgtMikmJmt0LnB1c2goZnIpLCIifSl9KSxvZX0obnIoayx5ZSwhMCksYmYobnIoayxQZSwhMCkseWUpLDAscGUsUSk7aWYoTmUpe2lmKE5lLmNoYXJ0cylmb3IodmFyIFllPTA7WWU8TmUuY2hhcnRzLmxlbmd0aDsrK1llKXt2YXIgZXQ9TmUuY2hhcnRzW1llXSxjdD1mbihl''@;'; put 'put ''dC5UYXJnZXQseWUpLEV0PVZyKGN0KSxhdD0iY2hhcnQiPT1SJiYwPT1ZZSxidD1iMihucihrLGN0LCEwKSwwLDAsYmYobnIoayxFdCwhMCksY3QpLDAsYXQ/UzpudWxsLGV0LGF0P251bGw6Uyk7YXR8fChTWyIhY2hhcnRzIl18fChTWyIhY2hhcnRzIl09W10pLFNbIiFjaGFydHMiXS5wdXNo''@;'; put 'put ''KGJ0KSl9aWYoUS5ib29rSW1hZ2VzJiZOZS5pbWFnZXMpZm9yKHZhciBqdD0wO2p0PE5lLmltYWdlcy5sZW5ndGg7KytqdCl7dmFyIGt0PU5lLmltYWdlc1tqdF0sT3Q9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6UGsoa3QuQW5jaG9yKSwiIXBvc1R5cGUiOmt0LkFuY2hvci50eXBlLnJlcGxh''@;'; put 'put ''Y2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpMZyhrdC5BbmNob3IsUyksIiFyZWxwb3MiOkFDKGt0LkFuY2hvcixTKX07aWYoa3QuVGFyZ2V0JiYoT3RbIiFwYXRoIl09Zm4oa3QuVGFyZ2V0LHllKSxPdFsiIWRhdGEiXT1UdChrLE90WyIhcGF0aCJdKSxPdFsiIWRhdGF0eXBlIl09InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBPdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiksa3QuTGluayYmKE90WyIhZGF0YXR5cGUiXXx8KE90WyIhZGF0YXR5cGUiXT0icmVtb3RlIiksT3RbIiFsaW5rIl09a3QuTGluayksIU90WyIhZGF0YXR5cGUiXSl0aHJvdyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3Vu''@;'; put 'put ''ZCI7U1siIWltYWdlcyJdfHwoU1siIWltYWdlcyJdPVtdKSxTWyIhaW1hZ2VzIl0ucHVzaChPdCl9dmFyIEt0LFRuO2lmKE5lLnNoYXBlcylmb3IodmFyIFNuPTA7U248TmUuc2hhcGVzLmxlbmd0aDsrK1NuKVRuPXsiIXR5cGUiOiJzaGFwZSIsIiFwb3MiOkxnKChLdD1OZS5zaGFwZXNbU25d''@;'; put 'put ''KS5BbmNob3IsUyksIiFwb3NUeXBlIjpLdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6TGcoS3QuQW5jaG9yLFMpLCIhcmVscG9zIjpBQyhLdC5BbmNob3IsUyl9LFsidiIsIiFzaGFwZSIsInMiLCJSIl0uZm9yRWFjaChyciksU1siIXNoYXBlcyJdfHwoU1si''@;'; put 'put ''IXNoYXBlcyJdPVtdKSxTWyIhc2hhcGVzIl0ucHVzaChUbil9fWZ1bmN0aW9uIHJyKGxyKXtLdFtscl0mJihUbltscl09S3RbbHJdKX19KGN0LHBlLFMsUix5ZSwwLDAsTmUpO3ZhciBFdD1bXTtyZXR1cm4gb2UmJm9lW0ddJiZSZShvZVtHXSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYob2Vb''@;'; put 'put ''R11bYXRdLlR5cGU9PUthLkNNTlQpe3ZhciBidD1mbihvZVtHXVthdF0uVGFyZ2V0LFIpO2lmKCEoRXQ9ZnVuY3Rpb24geHooUyxSLGspe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIFF2KFMsUil7dmFyIGs9W10sRz1bXSxRPXt9LG9lPSExO3JldHVybiB1cihTLGZ1bmN0''@;'; put 'put ''aW9uKHBlLHllLFBlKXtzd2l0Y2goUGUpe2Nhc2UgNjMyOkcucHVzaChwZSk7YnJlYWs7Y2FzZSA2MzU6UT1wZTticmVhaztjYXNlIDYzNzpRLnQ9cGUudCxRLmg9cGUuaCxRLnI9cGUucjticmVhaztjYXNlIDYzNjppZihRLmF1dGhvcj1HW1EuaWF1dGhvcl0sZGVsZXRlIFEuaWF1dGhvcixS''@;'; put 'put ''LnNoZWV0Um93cyYmUS5yZngmJlIuc2hlZXRSb3dzPD1RLnJmeC5yKWJyZWFrO1EudHx8KFEudD0iIiksZGVsZXRlIFEucmZ4LGsucHVzaChRKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6b2U9ITA7YnJlYWs7Y2FzZSAzNjpvZT0hMTticmVhaztkZWZh''@;'; put 'put ''dWx0OmlmKCEoKHllfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoeWV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFvZXx8Ui5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitQZSsiICIreWUpfX0pLGt9KFMsayk6ZnVuY3Rpb24gamsoUyxSKXtpZihTLm1h''@;'; put 'put ''dGNoKC88KD86XHcrOik/Y29tbWVudHMgKlwvPi8pKXJldHVybltdO3ZhciBrPVtdLEc9W10sUT1TLm1hdGNoKC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNdKik8XC8oPzpcdys6KT9hdXRob3JzPi8pO1EmJlFbMV0mJlFbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oZ2Upe2lmKCIiIT09Z2UmJiIiIT09Z2UudHJpbSgpKXt2YXIgcGU9Z2UubWF0Y2goLzwoPzpcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7cGUmJmsucHVzaChwZVsxXSl9fSk7dmFyIG9lPVMubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9j''@;'; put 'put ''b21tZW50TGlzdD4vKTtyZXR1cm4gb2UmJm9lWzFdJiZvZVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVhY2goZnVuY3Rpb24oZ2Upe2lmKCIiIT09Z2UmJiIiIT09Z2UudHJpbSgpKXt2YXIgcGU9Z2UubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYocGUpe3Zh''@;'; put 'put ''ciB5ZT12cihwZVswXSksUGU9e2F1dGhvcjp5ZS5hdXRob3JJZCYma1t5ZS5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjp5ZS5yZWYsZ3VpZDp5ZS5ndWlkfSxOZT1Obyh5ZS5yZWYpO2lmKCEoUi5zaGVldFJvd3MmJlIuc2hlZXRSb3dzPD1OZS5yKSl7dmFyIFllPWdlLm1hdGNoKC88''@;'; put 'put ''KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLGV0PSEhWWUmJiEhWWVbMV0mJnVDKFllWzFdKXx8e3I6IiIsdDoiIixoOiIifTtQZS5yPWV0LnIsIjx0PjwvdD4iPT1ldC5yJiYoZXQudD1ldC5oPSIiKSxQZS50PShldC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJc''@;'; put 'put ''biIpLnJlcGxhY2UoL1xyL2csIlxuIiksUi5jZWxsSFRNTCYmKFBlLmg9ZXQuaCksRy5wdXNoKFBlKX19fX0pLEd9KFMsayl9KFR0KFMsYnQsITApLGJ0LHllKSl8fCFFdC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlvbiBCayhTLFIpe3ZhciBHLGs9QXJyYXkuaXNBcnJheShTKTtSLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUSl7dmFyIG9lPU5vKFEucmVmKTtpZihrPyhTW29lLnJdfHwoU1tvZS5yXT1bXSksRz1TW29lLnJdW29lLmNdKTpHPVNbUS5yZWZdLCFHKXtHPXt0OiJ6In0saz9TW29lLnJdW29lLmNdPUc6U1tRLnJlZl09Rzt2YXIgZ2U9b28oU1siIXJlZiJdfHwiQkRXR08xMDAwMDAxOkEx''@;'; put 'put ''Iik7Z2Uucy5yPm9lLnImJihnZS5zLnI9b2UuciksZ2UuZS5yPG9lLnImJihnZS5lLnI9b2UuciksZ2Uucy5jPm9lLmMmJihnZS5zLmM9b2UuYyksZ2UuZS5jPG9lLmMmJihnZS5lLmM9b2UuYyk7dmFyIHBlPXJhKGdlKTtwZSE9PVNbIiFyZWYiXSYmKFNbIiFyZWYiXT1wZSl9Ry5jfHwoRy5j''@;'; put 'put ''PVtdKTt2YXIgeWU9e2E6US5hdXRob3IsdDpRLnQscjpRLnJ9O3llLnImJiJzdHJpbmciPT10eXBlb2YgeWUuciYmKHllLlI9d2coeWUucikpLFEuaCYmKHllLmg9US5oKSxHLmMucHVzaCh5ZSl9KX0oY3QsRXQpfX0pLGZ1bmN0aW9uIEpTKFMsUixrLEcsUSxvZSxnZSl7IVN8fCFTWyIhdGFi''@;'; put 'put ''bGVyZWZzIl18fCFrfHwha1siIWlkIl18fChTWyIhdGFibGVzIl09W10sU1siIXRhYmxlcmVmcyJdLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT1rWyIhaWQiXVtwZV07aWYoeWUmJnllLlRhcmdldCl7dmFyIFBlPWZuKHllLlRhcmdldCxHKTshZnVuY3Rpb24gdkIoUyxSLGssRyxRKXt2''@;'; put 'put ''YXIgb2U9e3N0eWxlOnt9LGhlYWRlcjowfSxnZT0hMTtTLnJlcGxhY2UoZW4sZnVuY3Rpb24ocGUpe3ZhciB5ZT12cihwZSk7c3dpdGNoKFduKHllWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRT''@;'; put 'put ''dGF0ZT4iOmNhc2UiPC9zb3J0U3RhdGU+IjpjYXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1''@;'; put 'put ''bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29y''@;'; put 'put ''dENvbmRpdGlvbj4iOmNhc2UiPHNvcnRDb25kaXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0YWJsZSI6eWUucmVmJiYob2UucmVmPXllLnJlZikseWUubmFtZT9vZS5uYW1lPXllLm5hbWU6eWUu''@;'; put 'put ''ZGlzcGxheU5hbWUmJihvZS5uYW1lPXllLmRpc3BsYXlOYW1lKSxudWxsIT15ZS5oZWFkZXJyb3djb3VudCYmMSE9K3llLmhlYWRlcnJvd2NvdW50P29lLmhlYWRlcj0reWUuaGVhZGVycm93Y291bnQ6bnVsbD09eWUuaGVhZGVycm93Y291bnQmJihvZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8''@;'; put 'put ''YXV0b0ZpbHRlciI6Y2FzZSI8YXV0b0ZpbHRlcj4iOm9lLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4iOm9lLmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOnllLnNob3dSb3dTdHJpcGVzJiYob2Uuc3R5bGUucm93c3Ry''@;'; put 'put ''aXBlPXRpKHllLnNob3dSb3dTdHJpcGVzKSkseWUuc2hvd0NvbHVtblN0cmlwZXMmJihvZS5zdHlsZS5jb2xzdHJpcGU9dGkoeWUuc2hvd0NvbHVtblN0cmlwZXMpKSx5ZS5zaG93Rmlyc3RDb2x1bW4mJihvZS5zdHlsZS5jb2xmaXJzdD10aSh5ZS5zaG93Rmlyc3RDb2x1bW4pKSx5ZS5zaG93''@;'; put 'put ''TGFzdENvbHVtbiYmKG9lLnN0eWxlLmNvbGxhc3Q9dGkoeWUuc2hvd0xhc3RDb2x1bW4pKSx5ZS5uYW1lJiYob2Uuc3R5bGUubmFtZT15ZS5uYW1lLnJlcGxhY2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOm9lLmNvbHMu''@;'; put 'put ''cHVzaCh7aWQ6K3llLmlkLG5hbWU6eWUubmFtZX0pO2JyZWFrO2Nhc2UiPGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6Y2FzZSI8Y3VzdG9tRmlsdGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4i''@;'; put 'put ''OmNhc2UiPC9jdXN0b21GaWx0ZXJzPiI6Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIWdlJiZRLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3llWzBdKyIgaW4gdGFibGUiKX1yZXR1cm4gcGV9KSxvZS5maWx0ZXJ8fChvZS5maWx0ZXI9ITEpLG9lLnN0''@;'; put 'put ''eWxlLm5hbWUmJiFvZS5zdHlsZS5uYW1lLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKSYmay5UYWJsZSYmay5UYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXsocGUubmFtZT09b2Uuc3R5bGUubmFtZXx8cGUucmF3bmFtZT09b2Uuc3R5bGUubmFtZSkmJihvZS5zdHlsZS5yYXc9''@;'; put 'put ''cXQocGUpKX0pLFJbIiF0YWJsZXMiXS5wdXNoKG9lKX0oVHQoUixQZSwhMCksUyxRLDAsZ2UpfX0pLGRlbGV0ZSBTWyIhdGFibGVyZWZzIl0pfShjdCxTLG9lW0ddLFIsWWUsMCx5ZSksdHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1IiYmT2IucHVzaChbY3QsUyxvZVtHXSxSLHtTaGVldHM6''@;'; put 'put ''Z2V9LFllLHllXSksZnVuY3Rpb24gUXooUyxSLGssRyxRLG9lLGdlLHBlKXtpZihTJiZTWyIhbGVnZHJhd2VsIl0pe3ZhciB5ZT1mbihTWyIhbGVnZHJhd2VsIl0uVGFyZ2V0LEcpLFBlPW5yKGsseWUsITApO1BlJiZmdW5jdGlvbiBxdihTLFIsayl7dmFyIEc9MDsoUy5tYXRjaChiQil8fFtd''@;'; put 'put ''KS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBqdCxrdCxPdCxLdCxUbixycixTbixscixvZT0iIixnZT0hMCxwZT0iIix5ZT0tMSxQZT17fSxOZT17fSxZZT17fSxldD0tMSxjdD0tMSxFdD0iIixhdD0iIixidD0iIixYbj0hMSxCbj0hMTtzd2l0Y2goUS5yZXBsYWNlKGVuLGZ1bmN0aW9uKGVy''@;'; put 'put ''LE1pKXt2YXIgRmk9dnIoZXIpO3N3aXRjaChXbihGaVswXSkpe2Nhc2UiPHNoYXBlIjpGaS5maWxsY29sb3ImJihQZS5jb2xvcjE9RmkuZmlsbGNvbG9yKSxGaS5zdHJva2Vjb2xvciYmKFllLmNvbG9yPUZpLnN0cm9rZWNvbG9yKTticmVhaztjYXNlIjxmaWxsIjpjYXNlIjxmaWxsPiI6Ijx2''@;'; put 'put ''OmZpbGwiPT1GaVswXSYmKEZpLmNvbG9yMiYmKFBlLmNvbG9yMj1GaS5jb2xvcjIpLEZpLnR5cGUmJihQZS50eXBlPUZpLnR5cGUpKTticmVhaztjYXNlIjwvZmlsbD4iOmNhc2UiPGxvY2siOmNhc2UiPGxvY2svPiI6YnJlYWs7Y2FzZSI8c2hhZG93IjpGaS5jb2xvciYmKE5lLmNvbG9yPUZp''@;'; put 'put ''LmNvbG9yKSxGaS5vbiYmKE5lLm9uPUZpLm9uKTticmVhaztjYXNlIjxDbGllbnREYXRhIjpGaS5PYmplY3RUeXBlJiYob2U9RmkuT2JqZWN0VHlwZSk7YnJlYWs7Y2FzZSI8VmlzaWJsZSI6Y2FzZSI8VmlzaWJsZS8+IjpnZT0hMTticmVhaztjYXNlIjxBbmNob3IiOmNhc2UiPEFuY2hvcj4i''@;'; put 'put ''OmNhc2UiPFJvdyI6Y2FzZSI8Um93PiI6Y2FzZSI8Q29sdW1uIjpjYXNlIjxDb2x1bW4+IjpjYXNlIjxGbWxhTWFjcm8iOmNhc2UiPEZtbGFNYWNybz4iOmNhc2UiPEZtbGFMaW5rIjpjYXNlIjxGbWxhTGluaz4iOmNhc2UiPEZtbGFSYW5nZSI6Y2FzZSI8Rm1sYVJhbmdlPiI6Y2FzZSI8U2Vs''@;'; put 'put ''VHlwZSI6Y2FzZSI8U2VsVHlwZT4iOmNhc2UiPFZhbCI6Y2FzZSI8VmFsPiI6Y2FzZSI8TWluIjpjYXNlIjxNaW4+IjpjYXNlIjxNYXgiOmNhc2UiPE1heD4iOmNhc2UiPEluYyI6Y2FzZSI8SW5jPiI6Y2FzZSI8UGFnZSI6Y2FzZSI8UGFnZT4iOmNhc2UiPENoZWNrZWQiOmNhc2UiPENoZWNr''@;'; put 'put ''ZWQ+IjpjYXNlIjx0ZXh0Ym94IjpjYXNlIjx0ZXh0Ym94PiI6eWU9TWkrZXIubGVuZ3RoO2JyZWFrO2Nhc2UiPC9BbmNob3I+IjpwZT1RLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L1Jvdz4iOmV0PStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4i''@;'; put 'put ''OmN0PStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFNYWNybz4iOkV0PVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYUxpbms+IjphdD1RLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOlNuPVEuc2xpY2UoeWUs''@;'; put 'put ''TWkpLnRyaW0oKTticmVhaztjYXNlIjwvU2VsVHlwZT4iOmxyPVEuc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvVmFsPiI6anQ9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6a3Q9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvTWF4''@;'; put 'put ''PiI6T3Q9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvSW5jPiI6S3Q9K1Euc2xpY2UoeWUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvUGFnZT4iOlRuPStRLnNsaWNlKHllLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NoZWNrZWQ+Ijpycj0rUS5zbGljZSh5ZSxNaSkudHJp''@;'; put 'put ''bSgpO2JyZWFrO2Nhc2UiPC90ZXh0Ym94PiI6YnQ9US5zbGljZSh5ZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92ZVdpdGhDZWxscz4iOlhuPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOkJuPSEw''@;'; put 'put ''fXJldHVybiIifSksb2Upe2Nhc2UiTm90ZSI6dmFyIGZyPWp1LnNoZWV0X2dldF9jZWxsKFIsZXQ+PTAmJmN0Pj0wP3FpKHtyOmV0LGM6Y3R9KTprW0ddLnJlZik7ZnIuYyYmKGZyLmMuaGlkZGVuPWdlLHBlJiYoZnIuYy5yYXdhbmNob3I9cGUsRmsocGUsZnIuYyksbEIoZnIuY1siIXBvcyJd''@;'; put 'put ''LDIqISFYbishIUJuLFIpKSxQZS5jb2xvcjEmJihmci5jLmZpbGw9UGUpLE5lLmNvbG9yJiYoZnIuYy5zaGFkb3c9TmUpLFllLmNvbG9yJiYoZnIuYy5zdHJva2U9WWUpKSwrK0c7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNr''@;'; put 'put ''Ym94IjpjYXNlIlNjcm9sbCI6Y2FzZSJMaXN0IjpjYXNlIlJhZGlvIjpjYXNlIlNwaW4iOmNhc2UiRWRpdCI6UlsiIWNvbnRyb2xzIl18fChSWyIhY29udHJvbHMiXT1bXSk7dmFyIGJyPXsiIXR5cGUiOm9lfTtwZSYmRmsocGUsYnIpLEV0JiYoYnIubWFjcm89RXQucmVwbGFjZSgiWzBdISIs''@;'; put 'put ''IiIpKSxhdCYmKGJyLmxpbms9YXQpLCJTY3JvbGwiPT1vZXx8IlNwaW4iPT1vZT8obnVsbD09anQmJihqdD0wKSxudWxsPT1rdCYmKGt0PTApLG51bGw9PU90JiYoT3Q9M2U0KSxudWxsPT1LdCYmKEt0PTEpLCJTY3JvbGwiPT1vZSYmbnVsbD09VG4mJihUbj0xMCkpOiJSYWRpbyI9PW9lfHwi''@;'; put 'put ''Q2hlY2tib3giPT1vZT8obnVsbD09cnImJihycj0wKSxqdD1ycik6KCJMaXN0Ij09b2V8fCJEcm9wIj09b2UpJiYobnVsbCE9U24mJihici5yZWY9U24pLG51bGw9PWxyJiYobHI9IlNpbmdsZSIpLCJMaXN0Ij09b2UmJihici5zZWw9bHIpKSxudWxsIT1qdCYmKGJyLnZhbD1qdCksbnVsbCE9''@;'; put 'put ''a3QmJihici5taW49a3QpLG51bGwhPU90JiYoYnIubWF4PU90KSxudWxsIT1LdCYmKGJyLnN0ZXA9S3QpLG51bGwhPVRuJiYoYnIucGFnZT1UbiksYnQmJihici50PWJ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLFJbIiFjb250cm9scyJdLnB1c2goYnIpfX0pfShnbyhQZSks''@;'; put 'put ''UyxwZXx8W10pLFNbIiFMRFAiXT15ZSxTWyIhY3RybGlkIl0mJlNbIiFjdHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtpZihOZS5yZWwmJk5lLnJlbC5UYXJnZXQpe3ZhciBZZT1mbihOZS5yZWwuVGFyZ2V0LEcpO05lLnBhdGg9WWUsZGVsZXRlIE5lLnJlbH19KX19KGN0LDAsUyxSLDAs''@;'; put 'put ''MCwwLEV0KSxjdH1jYXRjaChhdCl7aWYoeWUuV1RGKXRocm93IGF0fX1mdW5jdGlvbiBBYyhTKXtyZXR1cm4iLyI9PVMuY2hhckF0KDApP1Muc2xpY2UoMSk6U312YXIgQmM9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHJwKFMsUil7aWYoT2I9W10sSEkoUj1SfHx7fSkscmkoUywiTUVUQS1JTkYv''@;'; put 'put ''bWFuaWZlc3QueG1sIil8fHJpKFMsIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIHdhKFMsUil7Uj1SfHx7fSxyaShTLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gVm8oUyxSKXtmb3IodmFyIEcsUSxrPVdTKFMpO0c9WWcuZXhlYyhrKTspc3dpdGNoKEdbM10p''@;'; put 'put ''e2Nhc2UibWFuaWZlc3QiOmJyZWFrO2Nhc2UiZmlsZS1lbnRyeSI6aWYoIi8iPT0oUT12cihHWzBdLCExKSkucGF0aCYmUS50eXBlIT09bGwpdGhyb3cgbmV3IEVycm9yKCJUaGlzIE9wZW5Eb2N1bWVudCBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2JyZWFrO2Nhc2UiZW5jcnlwdGlvbi1kYXRh''@;'; put 'put ''IjpjYXNlImFsZ29yaXRobSI6Y2FzZSJzdGFydC1rZXktZ2VuZXJhdGlvbiI6Y2FzZSJrZXktZGVyaXZhdGlvbiI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBPRFMgRW5jcnlwdGlvbiIpO2RlZmF1bHQ6aWYoUiYmUi5XVEYpdGhyb3cgR319KFR0KFMsIk1FVEEtSU5GL21hbmlmZXN0''@;'; put 'put ''LnhtbCIpLFIpO3ZhciBrPW5yKFMsImNvbnRlbnQueG1sIik7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGNvbnRlbnQueG1sIGluIE9EUyAvIFVPRiBmaWxlIik7dmFyIEc9WFMoZ28oayksUik7cmV0dXJuIHJpKFMsIm1ldGEueG1sIikmJihHLlByb3BzPW12KFR0KFMsIm1ldGEu''@;'; put 'put ''eG1sIikpKSxHfShTLFIpO2lmKHJpKFMsIkluZGV4L0RvY3VtZW50Lml3YSIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyBmaWxlIik7dmFyIG9lLGdlLGs9ZnVuY3Rpb24geHQoUyl7Zm9yKHZhciBSPVMuRnVsbFBhdGhzfHxSZShTLmZpbGVzKSxrPVtdLEc9MDtHPFIu''@;'; put 'put ''bGVuZ3RoOysrRykiLyIhPVJbR10uc2xpY2UoLTEpJiZrLnB1c2goUltHXSk7cmV0dXJuIGsuc29ydCgpfShTKSxHPWZ1bmN0aW9uIE53KFMpe3ZhciBSPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVu''@;'; put 'put ''dHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFy''@;'; put 'put ''dG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtpZighU3x8IVMubWF0Y2gpcmV0dXJuIFI7dmFyIGs9e307aWYoKFMubWF0Y2go''@;'; put 'put ''ZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihHKXt2YXIgUT12cihHKTtzd2l0Y2goUVswXS5yZXBsYWNlKHVhLCI8Iikpe2Nhc2UiPD94bWwiOmJyZWFrO2Nhc2UiPFR5cGVzIjpSLnhtbG5zPVFbInhtbG5zIisoUVswXS5tYXRjaCgvPChcdyspOi8pfHxbIiIsIiJdKVsxXV07YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8RGVmYXVsdCI6a1tRLkV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpXT1RLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT1SW2I0W1EuQ29udGVudFR5cGVdXSYmUltiNFtRLkNvbnRlbnRUeXBlXV0ucHVzaChRLlBhcnROYW1lKX19KSxSLnhtbG5zIT09WWkuQ1Qp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitSLnhtbG5zKTtyZXR1cm4gUi5jYWxjY2hhaW49Ui5jYWxjY2hhaW5zLmxlbmd0aD4wP1IuY2FsY2NoYWluc1swXToiIixSLnNzdD1SLnN0cnMubGVuZ3RoPjA/Ui5zdHJzWzBdOiIiLFIuc3R5bGU9Ui5zdHlsZXMubGVuZ3Ro''@;'; put 'put ''PjA/Ui5zdHlsZXNbMF06IiIsUi5jb25uPVIuY29ubnMubGVuZ3RoPjA/Ui5jb25uc1swXToiIixSLmRlZmF1bHRzPWssZGVsZXRlIFIuY2FsY2NoYWlucyxSfShucihTLCJbQ29udGVudF9UeXBlc10ueG1sIikpLFE9ITE7aWYoMD09PUcud29ya2Jvb2tzLmxlbmd0aCYmVHQoUyxnZT0ieGwv''@;'; put 'put ''d29ya2Jvb2sueG1sIiwhMCkmJkcud29ya2Jvb2tzLnB1c2goZ2UpLDA9PT1HLndvcmtib29rcy5sZW5ndGgpe2lmKCFUdChTLGdlPSJ4bC93b3JrYm9vay5iaW4iLCEwKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHdvcmtib29rIik7Ry53b3JrYm9va3MucHVzaChnZSksUT0h''@;'; put 'put ''MH0iYmluIj09Ry53b3JrYm9va3NbMF0uc2xpY2UoLTMpJiYoUT0hMCk7dmFyIHBlPXt9LHllPXt9O2lmKCFSLmJvb2tTaGVldHMmJiFSLmJvb2tQcm9wcyl7aWYobDg9W10sRy5zc3QpdHJ5e2w4PWZ1bmN0aW9uIE16KFMsUixrKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlv''@;'; put 'put ''biBMdihTLFIpe3ZhciBrPVtdLEc9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24ob2UsZ2UscGUpe3N3aXRjaChwZSl7Y2FzZSAxNTk6ay5Db3VudD1vZVswXSxrLlVuaXF1ZT1vZVsxXTticmVhaztjYXNlIDE5OmsucHVzaChvZSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTpHPSEw''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzY6Rz0hMTticmVhaztkZWZhdWx0OmlmKGdlLmluZGV4T2YoIkJlZ2luIik+MHx8Z2UuaW5kZXhPZigiRW5kIiksIUd8fFIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitwZSsiICIrZ2UpfX0pLGt9KFMsayk6ZnVuY3Rpb24gZjIoUyxSKXt2''@;'; put 'put ''YXIgaz1bXSxHPSIiO2lmKCFTKXJldHVybiBrO3ZhciBRPVMubWF0Y2gob2spO2lmKFEpe0c9UVsyXS5yZXBsYWNlKHNrLCIiKS5zcGxpdChxNik7Zm9yKHZhciBvZT0wO29lIT1HLmxlbmd0aDsrK29lKXt2YXIgZ2U9dUMoR1tvZV0udHJpbSgpLFIpO251bGwhPWdlJiYoa1trLmxlbmd0aF09''@;'; put 'put ''Z2UpfVE9dnIoUVsxXSksay5Db3VudD1RLmNvdW50LGsuVW5pcXVlPVEudW5pcXVlQ291bnR9cmV0dXJuIGt9KFMsayl9KFR0KFMsQWMoRy5zc3QpKSxHLnNzdCxSKX1jYXRjaChfcil7aWYoUi5XVEYpdGhyb3cgX3J9Ui5jZWxsU3R5bGVzJiZHLnRoZW1lcy5sZW5ndGgmJihwZT1mdW5jdGlv''@;'; put 'put ''biBTeihTLFIsayl7cmV0dXJuIEVDKFMsayl9KG5yKFMsRy50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLFIpKSxHLnN0eWxlJiYoeWU9ZnVuY3Rpb24gQ3ooUyxSLGssRyl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gTWsoUyxSLGspe3ZhciBHPXtO''@;'; put 'put ''dW1iZXJGbXQ6W119O2Zvcih2YXIgUSBpbiBBLl90YWJsZSlHLk51bWJlckZtdFtRXT1BLl90YWJsZVtRXTtHLkNlbGxYZj1bXSxHLkZvbnRzPVtdLEcuRmlsbHM9W10sRy5Cb3JkZXJzPVtdO3ZhciBvZT1bXSxnZT0hMTtyZXR1cm4gdXIoUyxmdW5jdGlvbih5ZSxQZSxOZSl7c3dpdGNoKE5l''@;'; put 'put ''KXtjYXNlIDQ0OkcuTnVtYmVyRm10W3llWzBdXT15ZVsxXSxBLmxvYWQoeWVbMV0seWVbMF0pO2JyZWFrO2Nhc2UgNDM6V3YoeWUuY29sb3IsUiksRy5Gb250cy5wdXNoKHllKTticmVhaztjYXNlIDEwMjU6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNlIDQ3NTpjYXNlIDExNzE6Y2Fz''@;'; put 'put ''ZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDU6eWUuZmdDb2xvciYmV3YoeWUuZmdDb2xvcixSKSx5ZS5iZ0NvbG9yJiZXdih5ZS5iZ0NvbG9yLFIpLEcuRmlsbHMucHVzaCh5ZSk7YnJlYWs7Y2FzZSA0NjpbInRvcCIsImJvdHRvbSIs''@;'; put 'put ''ImxlZnQiLCJyaWdodCIsImRpYWciXS5mb3JFYWNoKGZ1bmN0aW9uKFllKXt5ZVtZZV0mJnllW1llXS5jb2xvciYmV3YoeWVbWWVdLmNvbG9yLFIpfSksRy5Cb3JkZXJzLnB1c2goeWUpO2JyZWFrO2Nhc2UgNDc6IkJydEJlZ2luQ2VsbFhGcyI9PW9lW29lLmxlbmd0aC0xXSYmRy5DZWxsWGYu''@;'; put 'put ''cHVzaCh5ZSk7YnJlYWs7Y2FzZSAzNTpnZT0hMDticmVhaztjYXNlIDM2OmdlPSExO2JyZWFrO2Nhc2UgMzc6b2UucHVzaChQZSksZ2U9ITA7YnJlYWs7Y2FzZSAzODpvZS5wb3AoKSxnZT0hMTticmVhaztkZWZhdWx0OmlmKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClvZS5wdXNoKFBl''@;'; put 'put ''KTtlbHNlIGlmKChQZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApb2UucG9wKCk7ZWxzZSBpZighZ2V8fGsuV1RGJiYiQnJ0QUNCZWdpbiIhPW9lW29lLmxlbmd0aC0xXSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUrIiAiK1BlKX19KSwoRy5Gb250c3x8W10pWzBdJiZJ''@;'; put 'put ''NChHLkZvbnRzWzBdKSxHfShTLGssRyk6eWsoUyxrLEcpfShUdChTLEFjKEcuc3R5bGUpKSxHLnN0eWxlLHBlLFIpKX12YXIgUGU9Ry5saW5rcy5tYXAoZnVuY3Rpb24oX3Ipe3RyeXt2YXIgRm49YmYobnIoUyxWcihBYyhfcikpKSxfcik7cmV0dXJuIGZ1bmN0aW9uIEV6KFMsUixrLEcpe3Jl''@;'; put 'put ''dHVybiIuYmluIj09PWsuc2xpY2UoLTQpP2Z1bmN0aW9uIE5rKFMsUixrLEcpe2lmKCFTKXJldHVybiBTO3ZhciBRPUd8fHt9LG9lPSExO3VyKFMsZnVuY3Rpb24oeWUsUGUsTmUpe3N3aXRjaChOZSl7Y2FzZSAzNTk6Y2FzZSAzNjM6Y2FzZSAzNjQ6Y2FzZSAzNjY6Y2FzZSAzNjc6Y2FzZSAz''@;'; put 'put ''Njg6Y2FzZSAzNjk6Y2FzZSAzNzA6Y2FzZSAzNzE6Y2FzZSA0NzI6Y2FzZSA1Nzc6Y2FzZSA1Nzg6Y2FzZSA1Nzk6Y2FzZSA1ODA6Y2FzZSA1ODE6Y2FzZSA1ODI6Y2FzZSA1ODM6Y2FzZSA1ODQ6Y2FzZSA1ODU6Y2FzZSA1ODY6Y2FzZSA1ODc6YnJlYWs7Y2FzZSAzNTpvZT0hMDticmVhaztj''@;'; put 'put ''YXNlIDM2Om9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoUGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChQZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIW9lfHxRLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK05lLnRvU3RyaW5nKDE2KSsiICIrUGUp''@;'; put 'put ''fX0sUSl9KFMsMCwwLEcpOmZ1bmN0aW9uIEhrKFMsUixrLEcpe3ZhciBRPUd8fHt9LG9lPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX0scGU9ITEseWU9e30sUGU9LTEsTmU9LTEsWWU9e3M6e3I6MCxjOjB9LGU6e3I6LTEsYzotMX19LGV0PXt9LGN0PTA7cmV0dXJuKFN8fCIiKS5yZXBsYWNl''@;'; put 'put ''KGVuLGZ1bmN0aW9uKEV0LGF0KXt2YXIgYnQ9dnIoRXQpO3N3aXRjaChXbihidFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGV4dGVybmFsTGluayI6Y2FzZSI8L2V4dGVybmFsTGluaz4iOmNhc2UiPC9leHRlcm5hbEJvb2s+IjpjYXNlIjxzaGVldE5hbWVzIjpjYXNlIjxzaGVldE5hbWVzPiI6''@;'; put 'put ''Y2FzZSI8L3NoZWV0TmFtZXM+IjpjYXNlIjxzaGVldERhdGFTZXQ+IjpjYXNlIjxzaGVldERhdGFTZXQvPiI6Y2FzZSI8L3NoZWV0RGF0YVNldD4iOmNhc2UiPC9yb3c+IjpicmVhaztjYXNlIjxleHRlcm5hbEJvb2siOmNhc2UiPGV4dGVybmFsQm9vaz4iOm9lLlRhcmdldD1SWyIhaWQiXVti''@;'; put 'put ''dC5pZF0uVGFyZ2V0LG9lLk1pc3Npbmc9UlsiIWlkIl1bYnQuaWRdLlR5cGU9PUthLlhNSVNTO2JyZWFrO2Nhc2UiPHNoZWV0TmFtZSI6b2UuU2hlZXROYW1lcy5wdXNoKFFyKGdvKGJ0LnZhbCkpKTticmVhaztjYXNlIjxzaGVldERhdGEiOnllPXt9LG9lLlNoZWV0c1tvZS5TaGVldE5hbWVz''@;'; put 'put ''W2J0LnNoZWV0SWRdXT10aShidC5yZWZyZXNoRXJyb3J8fCIwIik/bnVsbDp5ZTticmVhaztjYXNlIjwvc2hlZXREYXRhPiI6WWUuZS5jPj0wJiYoeWVbIiFyZWYiXT1yYShZZSkpO2JyZWFrO2Nhc2UiPHJvdyI6Y2FzZSI8cm93PiI6YnQucj9QZT1wYXJzZUludChidC5yLDEwKS0xOlBlKyss''@;'; put 'put ''TmU9LTE7YnJlYWs7Y2FzZSI8Y2VsbCI6Y2FzZSI8Y2VsbD4iOmJ0LnI/TmU9Tm8oYnQucikuYzorK05lLGV0LnQ9YnQudHx8Im4iLCJzdHIiPT1ldC50JiYoZXQudD0icyIpO2JyZWFrO2Nhc2UiPC9jZWxsPiI6WWUuZS5yPFBlJiYoWWUuZS5yPVBlKSxZZS5lLmM8TmUmJihZZS5lLmM9TmUp''@;'; put 'put ''LHllW3FpKHtyOlBlLGM6TmV9KV09ZXQsZXQ9e307YnJlYWs7Y2FzZSI8diI6Y2FzZSI8dj4iOmN0PUV0Lmxlbmd0aCthdDticmVhaztjYXNlIjwvdj4iOnZhciBqdD1RcihTLnNsaWNlKGN0LGF0KSk7ZXQudj0ibiI9PWV0LnQ/cGFyc2VGbG9hdChqdCk6anQ7YnJlYWs7Y2FzZSI8di8+Ijpl''@;'; put 'put ''dC52PSIiO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOnBlPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpwZT0hMTticmVhaztkZWZhdWx0OmlmKCFwZSYmUS5XVEYpdGhyb3cidW5yZWNvZ25pemVkICIrYnRbMF0rIiBpbiBleHRlcm5hbCBsaW5rIn19KSxvZX0oUyxSLDAsRyl9''@;'; put 'put ''KFR0KFMsQWMoX3IpKSxGbixfcixSKX1jYXRjaHt9fSksTmU9ZnVuY3Rpb24gazgoUyxSLGspe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIEhuZShTLFIpe3ZhciBrPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30seG1s''@;'; put 'put ''bnM6IiJ9LEc9W10sUT0hMTtSfHwoUj17fSksUi5iaWZmPTEyO3ZhciBvZT1bXSxnZT1bW11dO3JldHVybiBnZS5TaGVldE5hbWVzPVtdLGdlLlhUST1bXSxMOFsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6dHB9LHVyKFMsZnVuY3Rpb24oeWUsUGUsTmUpe3N3aXRjaChOZSl7Y2FzZSAxNTY6''@;'; put 'put ''Z2UuU2hlZXROYW1lcy5wdXNoKHllLm5hbWUpLGsuU2hlZXRzLnB1c2goeWUpO2JyZWFrO2Nhc2UgMTUzOmsuV0JQcm9wcz15ZTticmVhaztjYXNlIDM5Om51bGwhPXllLlNoZWV0JiYoUi5TSUQ9eWUuU2hlZXQpLHllLlJlZj1zMCh5ZS5QdGcsbnVsbCxudWxsLGdlLFIpLGRlbGV0ZSBSLlNJ''@;'; put 'put ''RCxkZWxldGUgeWUuUHRnLG9lLnB1c2goeWUpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6''@;'; put 'put ''Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2Ug''@;'; put 'put ''MjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OmdlWzBdLmxlbmd0aD9nZS5wdXNoKFtOZSx5ZV0pOmdlWzBdPVtOZSx5ZV0sZ2VbZ2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09Z2UubGVuZ3RoJiYoZ2VbMF09W10sZ2Vb''@;'; put 'put ''MF0uWFRJPVtdKSxnZVtnZS5sZW5ndGgtMV0uWFRJPWdlW2dlLmxlbmd0aC0xXS5YVEkuY29uY2F0KHllKSxnZS5YVEk9Z2UuWFRJLmNvbmNhdCh5ZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OkcucHVzaChQZSksUT0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6Ry5wb3AoKSxRPSExO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoISgoUGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChQZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIVF8fFIuV1RGJiYiQnJ0QUNCZWdpbiIhPUdbRy5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPUdbRy5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5l''@;'; put 'put ''eHBlY3RlZCByZWNvcmQgIitOZSsiICIrUGUpfX0sUiksUFMoayksay5OYW1lcz1vZSxrLnN1cGJvb2tzPWdlLGt9KFMsayk6ZnVuY3Rpb24gSFMoUyxSKXtpZighUyl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgaz17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9''@;'; put 'put ''LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLEV4dGVybjpbXSx4bWxuczoiIn0sRz0hMSxRPSJ4bWxucyIsb2U9e30sZ2U9MDtpZihTLnJlcGxhY2UoZW4sZnVuY3Rpb24oeWUsUGUpe3ZhciBOZT12cih5ZSk7c3dpdGNoKFduKE5lWzBdKSl7Y2FzZSI8P3htbCI6Y2Fz''@;'; put 'put ''ZSI8L3dvcmtib29rPiI6Y2FzZSI8ZmlsZVZlcnNpb24vPiI6Y2FzZSI8L2ZpbGVWZXJzaW9uPiI6Y2FzZSI8ZmlsZVNoYXJpbmcvPiI6Y2FzZSI8L3dvcmtib29rUHI+IjpjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24vPiI6Y2FzZSI8Ym9va1ZpZXdzIjpjYXNlIjxib29rVmlld3M+IjpjYXNl''@;'; put 'put ''IjwvYm9va1ZpZXdzPiI6Y2FzZSI8L3dvcmtib29rVmlldz4iOmNhc2UiPHNoZWV0cyI6Y2FzZSI8c2hlZXRzPiI6Y2FzZSI8L3NoZWV0cz4iOmNhc2UiPC9zaGVldD4iOmNhc2UiPGZ1bmN0aW9uR3JvdXBzIjpjYXNlIjxmdW5jdGlvbkdyb3Vwcy8+IjpjYXNlIjxmdW5jdGlvbkdyb3VwIjpj''@;'; put 'put ''YXNlIjxleHRlcm5hbFJlZmVyZW5jZXMiOmNhc2UiPC9leHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMvPiI6Y2FzZSI8ZGVmaW5lZE5hbWUvPiI6Y2FzZSI8L2NhbGNQcj4iOmNhc2UiPG9sZVNpemUiOmNhc2UiPGN1c3Rv''@;'; put 'put ''bVdvcmtib29rVmlld3M+IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPGN1c3RvbVdvcmtib29rVmlld3MiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlldyI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlldz4iOmNhc2UiPHBpdm90Q2FjaGVzPiI6Y2FzZSI8L3Bpdm90Q2FjaGVz''@;'; put 'put ''PiI6Y2FzZSI8cGl2b3RDYWNoZXMiOmNhc2UiPHBpdm90Q2FjaGUiOmNhc2UiPHNtYXJ0VGFnUHIiOmNhc2UiPHNtYXJ0VGFnUHIvPiI6Y2FzZSI8c21hcnRUYWdUeXBlcyI6Y2FzZSI8c21hcnRUYWdUeXBlcz4iOmNhc2UiPC9zbWFydFRhZ1R5cGVzPiI6Y2FzZSI8c21hcnRUYWdUeXBlIjpj''@;'; put 'put ''YXNlIjx3ZWJQdWJsaXNoaW5nIjpjYXNlIjx3ZWJQdWJsaXNoaW5nLz4iOmNhc2UiPGZpbGVSZWNvdmVyeVByIjpjYXNlIjxmaWxlUmVjb3ZlcnlQci8+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzIjpjYXNlIjwvd2ViUHVibGlzaE9iamVjdHM+''@;'; put 'put ''IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6Y2FzZSI8QXJjaElEIjpjYXNlIjxyZXZpc2lvblB0ciI6YnJlYWs7Y2FzZSI8d29ya2Jvb2siOnllLm1hdGNoKEU4KSYmKFE9InhtbG5z''@;'; put 'put ''Iit5ZS5tYXRjaCgvPChcdyspOi8pWzFdKSxrLnhtbG5zPU5lW1FdO2JyZWFrO2Nhc2UiPGZpbGVWZXJzaW9uIjpkZWxldGUgTmVbMF0say5BcHBWZXJzaW9uPU5lO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjprLk1vZGlmeT17dXNlcjpOZS51c2VyTmFtZSx3YXJuOnRpKE5lLnJlYWRPbmx5''@;'; put 'put ''UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoTmUuYWxnb3JpdGhtTmFtZXx8TmUuaGFzaFZhbHVlfHxOZS5zYWx0VmFsdWV8fE5lLnNwaW5Db3VudCkmJihrLk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOk5lLmFsZ29yaXRobU5hbWUsaGFzaDpOZS5oYXNoVmFsdWUsc2FsdDpOZS5zYWx0VmFsdWUs''@;'; put 'put ''c3BpbjorTmUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3JrYm9va1ByIjpjYXNlIjx3b3JrYm9va1ByLz4iOmJiLmZvckVhY2goZnVuY3Rpb24oZXQpe2lmKG51bGwhPU5lW2V0WzBdXSlzd2l0Y2goZXRbMl0pe2Nhc2UiYm9vbCI6ay5XQlByb3BzW2V0WzBdXT10aShOZVtldFsw''@;'; put 'put ''XV0pO2JyZWFrO2Nhc2UiaW50IjprLldCUHJvcHNbZXRbMF1dPXBhcnNlSW50KE5lW2V0WzBdXSwxMCk7YnJlYWs7ZGVmYXVsdDprLldCUHJvcHNbZXRbMF1dPU5lW2V0WzBdXX19KSxOZS5jb2RlTmFtZSYmKGsuV0JQcm9wcy5Db2RlTmFtZT1nbyhOZS5jb2RlTmFtZSkpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIFllPWsuUHJvdGVjdGlvbnx8e307WWUubG9ja1N0cnVjdHVyZT10aShOZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxZZS5sb2NrV2luZG93cz10aShOZS5sb2NrV2luZG93c3x8ImZhbHNlIiksTmUud29ya2Jvb2tBbGdvcml0aG1OYW1lJiYoWWUu''@;'; put 'put ''ZW5jcnlwdGlvbj17YWxnbzpOZS53b3JrYm9va0FsZ29yaXRobU5hbWUsaGFzaDpOZS53b3JrYm9va0hhc2hWYWx1ZSxzYWx0Ok5lLndvcmtib29rU2FsdFZhbHVlLHNwaW46K05lLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxrLlByb3RlY3Rpb249WWU7YnJlYWs7Y2FzZSI8d29ya2Jvb2tW''@;'; put 'put ''aWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIE5lWzBdLGsuV0JWaWV3LnB1c2goTmUpO2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goTmUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpOZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlIaWRkZW4iOk5lLkhpZGRlbj0yO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6TmUuSGlkZGVuPTB9ZGVsZXRlIE5lLnN0YXRlLE5lLm5hbWU9UXIoZ28oTmUubmFtZSkpLGRlbGV0ZSBOZVswXSxrLlNoZWV0cy5wdXNoKE5lKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6ay5FeHRlcm4ucHVzaChOZS5pZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6''@;'; put 'put ''Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjpHPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpHPSExO2JyZWFrO2Nh''@;'; put 'put ''c2UiPGRlZmluZWROYW1lIjoob2U9e30pLk5hbWU9Z28oTmUubmFtZSksTmUuY29tbWVudCYmKG9lLkNvbW1lbnQ9TmUuY29tbWVudCksTmUubG9jYWxTaGVldElkJiYob2UuU2hlZXQ9K05lLmxvY2FsU2hlZXRJZCksdGkoTmUuaGlkZGVufHwiMCIpJiYob2UuSGlkZGVuPSEwKSxnZT1QZSt5''@;'; put 'put ''ZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lPiI6b2UuUmVmPVFyKGdvKFMuc2xpY2UoZ2UsUGUpKSksay5OYW1lcy5wdXNoKG9lKTticmVhaztjYXNlIjxjYWxjUHIiOmNhc2UiPGNhbGNQci8+IjpkZWxldGUgTmVbMF0say5DYWxjUHI9TmU7YnJlYWs7ZGVmYXVsdDppZighRyYm''@;'; put 'put ''Ui5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitOZVswXSsiIGluIHdvcmtib29rIil9cmV0dXJuIHllfSksLTE9PT1ZaS5tYWluLmluZGV4T2Yoay54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitrLnhtbG5zKTtyZXR1cm4gUFMoayksa30o''@;'; put 'put ''UyxrKX0oVHQoUyxBYyhHLndvcmtib29rc1swXSkpLEcud29ya2Jvb2tzWzBdLFIpLFllPXt9LGV0PSIiO0cuY29yZXByb3BzLmxlbmd0aCYmKChldD1UdChTLEFjKEcuY29yZXByb3BzWzBdKSwhMCkpJiYoWWU9bXYoZXQpKSwwIT09Ry5leHRwcm9wcy5sZW5ndGgmJihldD1UdChTLEFjKEcu''@;'; put 'put ''ZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIFpBKFMsUixrKXt2YXIgRz17fTtSfHwoUj17fSksUz1nbyhTKSxyaC5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBvZT0oUy5tYXRjaChEMChRWzBdKSl8fFtdKVsxXTtzd2l0Y2goUVsyXSl7Y2FzZSJzdHJpbmciOm9lJiYoUltRWzFdXT1Rcihv''@;'; put 'put ''ZSkpO2JyZWFrO2Nhc2UiYm9vbCI6UltRWzFdXT0idHJ1ZSI9PT1vZTticmVhaztjYXNlInJhdyI6dmFyIGdlPVMubWF0Y2gobmV3IFJlZ0V4cCgiPCIrUVswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK1FbMF0rIj4iKSk7Z2UmJmdlLmxlbmd0aD4wJiYoR1tRWzFdXT1nZVsxXSl9fSksRy5I''@;'; put 'put ''ZWFkaW5nUGFpcnMmJkcuVGl0bGVzT2ZQYXJ0cyYmXzQoRy5IZWFkaW5nUGFpcnMsRy5UaXRsZXNPZlBhcnRzLFIsayl9KGV0LFllLFIpKTt2YXIgY3Q9e307KCFSLmJvb2tTaGVldHN8fFIuYm9va1Byb3BzKSYmMCE9PUcuY3VzdHByb3BzLmxlbmd0aCYmKGV0PW5yKFMsQWMoRy5jdXN0cHJv''@;'; put 'put ''cHNbMF0pLCEwKSkmJihjdD1mdW5jdGlvbiBidihTLFIpe3ZhciBrPXt9LEc9IiIsUT1TLm1hdGNoKE82KTtpZihRKWZvcih2YXIgb2U9MDtvZSE9US5sZW5ndGg7KytvZSl7dmFyIGdlPVFbb2VdLHBlPXZyKGdlKTtzd2l0Y2gocGVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPFByb3BlcnRpZXMi''@;'; put 'put ''OmJyZWFrO2Nhc2UiPHByb3BlcnR5IjpHPVFyKHBlLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOkc9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1nZS5pbmRleE9mKCI8dnQ6Iikpe3ZhciB5ZT1nZS5zcGxpdCgiPiIpLFBlPXllWzBdLnNsaWNlKDQpLE5lPXllWzFdO3N3aXRjaChQ''@;'; put 'put ''ZSl7Y2FzZSJscHN0ciI6Y2FzZSJic3RyIjpjYXNlImxwd3N0ciI6Y2FzZSJjeSI6Y2FzZSJlcnJvciI6a1tHXT1RcihOZSk7YnJlYWs7Y2FzZSJib29sIjprW0ddPXRpKE5lKTticmVhaztjYXNlImkxIjpjYXNlImkyIjpjYXNlImk0IjpjYXNlImk4IjpjYXNlImludCI6Y2FzZSJ1aW50Ijpr''@;'; put 'put ''W0ddPXBhcnNlSW50KE5lLDEwKTticmVhaztjYXNlInI0IjpjYXNlInI4IjpjYXNlImRlY2ltYWwiOmtbR109cGFyc2VGbG9hdChOZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjprW0ddPUhlKE5lKTticmVhaztkZWZhdWx0OmlmKCIvIj09UGUuc2xpY2UoLTEpKWJyZWFrO1Iu''@;'; put 'put ''V1RGJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiVW5leHBlY3RlZCIsZ2UsUGUseWUpfX1lbHNlIGlmKCI8LyIhPT1nZS5zbGljZSgwLDIpJiZSLldURil0aHJvdyBuZXcgRXJyb3IoZ2UpfX1yZXR1cm4ga30oZXQsUikpO3ZhciBFdD17fTtpZigoUi5ib29rU2hlZXRzfHxS''@;'; put 'put ''LmJvb2tQcm9wcykmJihOZS5TaGVldHM/b2U9TmUuU2hlZXRzLm1hcChmdW5jdGlvbihGbil7cmV0dXJuIEZuLm5hbWV9KTpZZS5Xb3Jrc2hlZXRzJiZZZS5TaGVldE5hbWVzLmxlbmd0aD4wJiYob2U9WWUuU2hlZXROYW1lcyksUi5ib29rUHJvcHMmJihFdC5Qcm9wcz1ZZSxFdC5DdXN0cHJv''@;'; put 'put ''cHM9Y3QpLFIuYm9va1NoZWV0cyYmdHlwZW9mIG9lPCJ1IiYmKEV0LlNoZWV0TmFtZXM9b2UpLFIuYm9va1NoZWV0cz9FdC5TaGVldE5hbWVzOlIuYm9va1Byb3BzKSlyZXR1cm4gRXQ7b2U9e307dmFyIGF0PXt9O1IuYm9va0RlcHMmJkcuY2FsY2NoYWluJiYoYXQ9ZnVuY3Rpb24gRG8oUyxS''@;'; put 'put ''LGspe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIGRCKFMsUixrKXt2YXIgRz1bXTtyZXR1cm4gdXIoUyxmdW5jdGlvbihnZSxwZSx5ZSl7aWYoNjM9PT15ZSlHLnB1c2goZ2UpO2Vsc2UgaWYoISgocGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fChwZXx8IiIpLmluZGV4''@;'; put 'put ''T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIit5ZSsiICIrcGUpfSksR30oUyk6ZnVuY3Rpb24gSUMoUyl7dmFyIFI9W107aWYoIVMpcmV0dXJuIFI7dmFyIGs9MTtyZXR1cm4oUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBR''@;'; put 'put ''PXZyKEcpO3N3aXRjaChRWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxjYWxjQ2hhaW4iOmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgUVswXSxRLmk/az1RLmk6US5pPWssUi5wdXNoKFEpfX0pLFJ9KFMpfShUdChTLEFjKEcuY2FsY2No''@;'; put 'put ''YWluKSksRy5jYWxjY2hhaW4pKTt2YXIga3QsT3QsYnQ9MCxqdD17fSxLdD1OZS5TaGVldHM7WWUuV29ya3NoZWV0cz1LdC5sZW5ndGgsWWUuU2hlZXROYW1lcz1bXTtmb3IodmFyIFRuPTA7VG4hPUt0Lmxlbmd0aDsrK1RuKVllLlNoZWV0TmFtZXNbVG5dPUt0W1RuXS5uYW1lO3ZhciBycj1R''@;'; put 'put ''PyJiaW4iOiJ4bWwiLFNuPUcud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIiksbHI9KEcud29ya2Jvb2tzWzBdLnNsaWNlKDAsU24rMSkrIl9yZWxzLyIrRy53b3JrYm9va3NbMF0uc2xpY2UoU24rMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7cmkoUyxscil8fChscj0ieGwvX3Jl''@;'; put 'put ''bHMvd29ya2Jvb2suIitycisiLnJlbHMiKTt2YXIgWG49YmYobnIoUyxsciwhMCksbHIpLEJuPVhuLGZyPVtdO1huJiYoTmUmJk5lLkV4dGVybiYmTmUuRXh0ZXJuLmxlbmd0aCYmTmUuRXh0ZXJuLmZvckVhY2goZnVuY3Rpb24oX3IsRm4pe3ZhciBaaT0oIi94bC8iK1huWyIhaWQiXVtfcl0u''@;'; put 'put ''VGFyZ2V0KS5yZXBsYWNlKC9bXC9dW1wvXS9nLCIvIikseWk9Ry5saW5rcy5pbmRleE9mKFppKTt5aT4tMSYmKGZyW0ZuXT1QZVt5aV0pfSksTmUmJmRlbGV0ZSBOZS5FeHRlcm4pLFhuJiYoWG49ZnVuY3Rpb24gTGIoUyxSKXtpZighUylyZXR1cm4gMDt0cnl7Uz1SLm1hcChmdW5jdGlvbihH''@;'; put 'put ''KXtyZXR1cm4gRy5pZHx8KEcuaWQ9Ry5zdHJSZWxJRCksW0cubmFtZSxTWyIhaWQiXVtHLmlkXS5UYXJnZXQsbnJlKFNbIiFpZCJdW0cuaWRdLlR5cGUpXX0pfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBTJiYwIT09Uy5sZW5ndGg/UzpudWxsfShYbixOZS5TaGVldHMpKTt2YXIgYnI9cmko''@;'; put 'put ''UywieGwvd29ya3NoZWV0cy9zaGVldC54bWwiKT8xOjAsZXI9W10sTWk9W107ZTpmb3IoYnQ9MDtidCE9WWUuV29ya3NoZWV0czsrK2J0KXt2YXIgRmk9InNoZWV0IjtpZihYbiYmWG5bYnRdPyhrdD0ieGwvIitYbltidF1bMV0ucmVwbGFjZSgvW1wvXT94bFwvLywiIikscmkoUyxrdCl8fChr''@;'; put 'put ''dD1YbltidF1bMV0pLHJpKFMsa3QpfHwoa3Q9bHIucmVwbGFjZSgvX3JlbHNcLy4qJC8sIiIpK1huW2J0XVsxXSksRmk9WG5bYnRdWzJdKTprdD0oa3Q9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhidCsxLWJyKSsiLiIrcnIpLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksT3Q9a3QucmVw''@;'; put 'put ''bGFjZSgvXiguKikoXC8pKFteXC9dKikkLywiJDEvX3JlbHMvJDMucmVscyIpLGVyLnB1c2goa3QpLFImJm51bGwhPVIuc2hlZXRzKXN3aXRjaCh0eXBlb2YgUi5zaGVldHMpe2Nhc2UibnVtYmVyIjppZihidCE9Ui5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoWWUu''@;'; put 'put ''U2hlZXROYW1lc1tidF0udG9Mb3dlckNhc2UoKSE9Ui5zaGVldHMudG9Mb3dlckNhc2UoKSljb250aW51ZSBlO2JyZWFrO2RlZmF1bHQ6aWYoQXJyYXkuaXNBcnJheSYmQXJyYXkuaXNBcnJheShSLnNoZWV0cykpe2Zvcih2YXIgbmE9MCxjYT0wO2NhIT1SLnNoZWV0cy5sZW5ndGg7KytjYSki''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIFIuc2hlZXRzW2NhXSYmUi5zaGVldHNbY2FdPT1idCYmKG5hPTEpLCJzdHJpbmciPT10eXBlb2YgUi5zaGVldHNbY2FdJiZSLnNoZWV0c1tjYV0udG9Mb3dlckNhc2UoKT09WWUuU2hlZXROYW1lc1tidF0udG9Mb3dlckNhc2UoKSYmKG5hPTEpO2lmKCFuYSljb250''@;'; put 'put ''aW51ZSBlfX1pZighUi5za2lwUGFyc2Upe3ZhciBMaT15MihTLGt0LE90LFllLlNoZWV0TmFtZXNbYnRdLGJ0LGp0LG9lLEZpLFIsTmUscGUseWUpO0xpJiZMaVsiIUxEUCJdJiYoTWlbYnRdPUxpWyIhTERQIl0sZGVsZXRlIExpWyIhTERQIl0pfX1pZih0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2''@;'; put 'put ''b3Q8InUiKWZvcihidD0wO2J0PE9iLmxlbmd0aDsrK2J0KXBhcnNlX3NoZWV0X3Bpdm90LmFwcGx5KG51bGwsT2JbYnRdKTtpZihFdD17RGlyZWN0b3J5OkcsV29ya2Jvb2s6TmUsUHJvcHM6WWUsQ3VzdHByb3BzOmN0LERlcHM6YXQsU2hlZXRzOm9lLFNoZWV0TmFtZXM6WWUuU2hlZXROYW1l''@;'; put 'put ''cyxTdHJpbmdzOmw4LFN0eWxlczp5ZSxUaGVtZXM6cGUsU1NGOkEuZ2V0X3RhYmxlKCl9LCFSLnNraXBQYXJzZSl7aWYoZnVuY3Rpb24ga0MoUyl7IVN8fCFTLldvcmtib29rfHwhUy5Xb3JrYm9vay5OYW1lc3x8Uy5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFIpe2lmKFIuTmFt''@;'; put 'put ''ZSYmIl94bG5tLiI9PVIuTmFtZS5zbGljZSgwLDYpJiYoIl94bG5tLlByaW50X0FyZWEiPT1SLk5hbWV8fCJfeGxubS5QcmludF9UaXRsZXMiPT1SLk5hbWUpKXt2YXIgaz1TLlNoZWV0c1tTLlNoZWV0TmFtZXNbUi5TaGVldF1dO2lmKGspe2tbIiFwcmludCJdfHwoa1siIXByaW50Il09e30p''@;'; put 'put ''LGtbIiFwcmludCJdLnByb3BzfHwoa1siIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPWtbIiFwcmludCJdLFE9Ui5SZWY7aWYoIl94bG5tLlByaW50X0FyZWEiPT1SLk5hbWUpe1EuaW5kZXhPZigiISIpPi0xJiYoUT1RLnNsaWNlKFEuaW5kZXhPZigiISIpKzEpKTt2YXIgb2U9b28oUT1RLnJl''@;'; put 'put ''cGxhY2UoL1skXS9nLCIiKSk7Ry5hcmVhPW9lfWVsc2UiX3hsbm0uUHJpbnRfVGl0bGVzIj09Ui5OYW1lJiYoRy50aXRsZXM9e3M6e3I6LTEsYzotMX0sZTp7cjotMSxjOi0xfX0sUS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciB5ZT1NcyhnZS5zbGljZShnZS5pbmRleE9m''@;'; put 'put ''KCIhIikrMSkucmVwbGFjZSgvWyRdL2csIiIpKTt5ZS5zLmM+LTEmJihHLnRpdGxlcy5zLmM9eWUucy5jKSx5ZS5lLmM+LTEmJihHLnRpdGxlcy5lLmM9eWUuZS5jKSx5ZS5zLnI+LTEmJihHLnRpdGxlcy5zLnI9eWUucy5yKSx5ZS5lLnI+LTEmJihHLnRpdGxlcy5lLnI9eWUuZS5yKX0pKX19''@;'; put 'put ''fSl9KEV0KSxSJiZSLmJvb2tGaWxlcyYmKEV0LmtleXM9ayxFdC5maWxlcz1TLmZpbGVzKSxSJiZSLmJvb2tWQkEmJihHLnZiYS5sZW5ndGg+MD9FdC52YmFyYXc9VHQoUyxBYyhHLnZiYVswXSksITApOkcuZGVmYXVsdHMmJkcuZGVmYXVsdHMuYmluPT09emsmJihFdC52YmFyYXc9VHQoUywi''@;'; put 'put ''eGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLEJuJiZCblsiIWlkIl0pe2Zvcih2YXIga3I9W10sVm49MTtWbjw9MTAyNDsrK1ZuKUJuWyIhaWQiXVsicklkIitWbl0mJkJuWyIhaWQiXVsicklkIitWbl0uVHlwZSYmL2N1c3RvbVhtbCQvLnRlc3QoQm5bIiFpZCJdWyJySWQiK1ZuXS5UeXBlKSYm''@;'; put 'put ''a3IucHVzaChmbihCblsiIWlkIl1bInJJZCIrVm5dLlRhcmdldCxHLndvcmtib29rc1swXSkpO2tyLmxlbmd0aD4wJiYoRXQuQ3VzdG9tWE1MPVtdLGtyLmZvckVhY2goZnVuY3Rpb24oX3Ipe3ZhciBGbj17ZGF0YTpucihTLEFjKF9yKSl9LGpyPVZyKF9yKTt0cnl7dmFyIFppPWJmKG5yKFMs''@;'; put 'put ''QWMoanIpLCEwKSxqcik7aWYoWmkpZm9yKHZhciB5aT0xO3lpPD0xMDI0OysreWkpWmlbIiFpZCJdWyJySWQiK3lpXSYmWmlbIiFpZCJdWyJySWQiK3lpXS5UeXBlJiYvY3VzdG9tWG1sUHJvcHMkLy50ZXN0KFppWyIhaWQiXVsicklkIit5aV0uVHlwZSkmJihGbi5wcm9wcz1ucihTLEFjKGZu''@;'; put 'put ''KFppWyIhaWQiXVsicklkIit5aV0uVGFyZ2V0LF9yKSkpKX1jYXRjaHt9RXQuQ3VzdG9tWE1MLnB1c2goRm4pfSkpfXZhciBCcj1odChTLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTtCciYmKEV0Lm1vZGVsPUJyKSxHLmNvbm4mJihFdC5jb25uPVR0KFMsQWMoRy5jb25uKSwhMCkpLGZyLmxl''@;'; put 'put ''bmd0aCYmKEV0LkV4dGVybmFsV0I9ZnIpLE5lJiYoTmUuUFBJPURmKX1yZXR1cm4gUi50ZW1wbGF0ZSYmKEV0Ll93c3BhdGhzPWVyLEV0Ll9zdHlwYXRoPUFjKEcuc3R5bGV8fCIiKSxFdC5fd2JwYXRoPUFjKEcud29ya2Jvb2tzWzBdfHwieGwvd29ya2Jvb2sueG1sIiksRXQuX3ZtbHBhdGhz''@;'; put 'put ''PU1pLEV0Ll93YnJlbHNwYXRoPWxyLEV0Ll9jdD1ucihTLCJbQ29udGVudF9UeXBlc10ueG1sIiksRXQuZmlsZXM9Uy5maWxlcyxCYyhFdCxTLFIpKSxFdH1mdW5jdGlvbiBQYihTLFIpe3ZhciBrPVJ8fHt9O2sucGFzc3dvcmR8fChrLnBhc3N3b3JkPSJWZWx2ZXRTd2VhdHNob3AiKTt2YXIg''@;'; put 'put ''Rz0iV29ya2Jvb2siLFE9dmUuZmluZChTLEcpO3RyeXtpZighKFE9dmUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9WZXJzaW9uIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO2lmKGZ1bmN0aW9uIFRWKFMpe3ZhciBS''@;'; put 'put ''PXt9O1IuaWQ9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxSLlI9UDEoUyw0KSxSLlU9UDEoUyw0KSxSLlc9UDEoUyw0KX0oUS5jb250ZW50KSwhKFE9dmUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9EYXRhU3BhY2VNYXAiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBF''@;'; put 'put ''bmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7dmFyIG9lPWZ1bmN0aW9uIEFWKFMpe3ZhciBSPVtdO1MubCs9NDtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO2stLSA+MDspUi5wdXNoKGhDKFMpKTtyZXR1cm4gUn0oUS5jb250ZW50KTtpZigxIT09b2UubGVuZ3RofHwxIT09b2VbMF0uY29t''@;'; put 'put ''cHMubGVuZ3RofHwwIT09b2VbMF0uY29tcHNbMF0udHx8IlN0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiIT09b2VbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09b2VbMF0uY29tcHNbMF0udil0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK0cpO2lm''@;'; put 'put ''KCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZUluZm8vU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTt2YXIgZ2U9ZnVuY3Rpb24ga1YoUyl7dmFy''@;'; put 'put ''IFI9W107Uy5sKz00O2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCk7ay0tID4wOylSLnB1c2goUy5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIFJ9KFEuY29udGVudCk7aWYoMSE9Z2UubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPWdlWzBdKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrRyk7aWYoIShRPXZlLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvVHJhbnNmb3JtSW5mby9TdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtLyFQcmltYXJ5IikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlw''@;'; put 'put ''dGVkIGZpbGUgbWlzc2luZyAiK0cpOyFmdW5jdGlvbiBlbmUoUyl7dmFyIFI9ZnVuY3Rpb24gRFYoUyl7dmFyIFI9e307cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxTLmwrPTQsUi5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLFIubmFtZT1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLFIuUj1QMShT''@;'; put 'put ''LDQpLFIuVT1QMShTLDQpLFIuVz1QMShTLDQpLFJ9KFMpO2lmKFIuZW5hbWU9Uy5yZWFkX3NoaWZ0KDAsIjhscHA0IiksUi5ibGtzej1TLnJlYWRfc2hpZnQoNCksUi5jbW9kZT1TLnJlYWRfc2hpZnQoNCksNCE9Uy5yZWFkX3NoaWZ0KDQpKXRocm93IG5ldyBFcnJvcigiQmFkICFQcmltYXJ5''@;'; put 'put ''IHJlY29yZCIpO3JldHVybiBSfShRLmNvbnRlbnQpfWNhdGNoe31pZighKFE9dmUuZmluZChTLEc9Ii9FbmNyeXB0aW9uSW5mbyIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTt2YXIgcGU9ZnVuY3Rpb24gWDYoUyl7''@;'; put 'put ''dmFyIFI9UDEoUyk7c3dpdGNoKFIuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bUi5NaW5vcixSVihTKV07Y2FzZSAzOnJldHVybltSLk1pbm9yLEo2KCldO2Nhc2UgNDpyZXR1cm5bUi5NaW5vcixmQyhTKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6''@;'; put 'put ''ZWQgVmVyc2lvbjogIitSLk1pbm9yKX0oUS5jb250ZW50KTtpZighKFE9dmUuZmluZChTLEc9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO2lmKDQ9PXBlWzBdKXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBSYihTLFIsayxHKXt2YXIgUT12ZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiE9Uy51cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkg''@;'; put 'put ''IitTLnVyaSk7dmFyIG9lPVMuZW5jc1swXSxnZT1vZS5oYXNoQWxnb3JpdGhtLHBlPSJhZXMtMjU2LWNiYyIseWU9QnVmZmVyLmZyb20ob2Uuc2FsdFZhbHVlLCJiYXNlNjQiKSxQZT1CdWZmZXIuZnJvbShTLnNhbHRWYWx1ZSwiYmFzZTY0IiksTmU9K29lLmJsb2NrU2l6ZSxZZT0rb2Uua2V5''@;'; put 'put ''Qml0cz4+MyxldD1tYyhCdWZmZXIuY29uY2F0KFt5ZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGspKV0pLGdlKSxjdD1CdWZmZXIuYWxsb2MoNCk7UShjdCwwKTtmb3IodmFyIEV0PTA7RXQ8b2Uuc3BpbkNvdW50OysrRXQpY3QubD0wLGN0LndyaXRlX3NoaWZ0KDQs''@;'; put 'put ''RXQpLGV0PW1jKEJ1ZmZlci5jb25jYXQoW2N0LGV0XSksZ2UpO3ZhciBhdD1mdW5jdGlvbihicixlcixNaSxGaSl7dmFyIG5hPW1jKEJ1ZmZlci5jb25jYXQoW2JyLEJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwxNzIsMjA4LDIxNF0pXSksRmkpLGNhPW5hLmxlbmd0aD49TWk/bmEu''@;'; put 'put ''c2xpY2UoMCxNaSk6QnVmZmVyLmFsbG9jKE1pKTtpZihuYS5sZW5ndGg8TWkpe2Zvcih2YXIgTGk9MDtMaTxuYS5sZW5ndGg7KytMaSljYVtMaV09bmFbTGldO2Zvcig7TGk8TWk7KytMaSljYVtMaV09NTR9cmV0dXJuIGNhfShldCwwLFllLGdlKTtzd2l0Y2gob2UuY2lwaGVyQWxnb3JpdGht''@;'; put 'put ''KXtjYXNlIkFFUyI6aWYoIkNoYWluaW5nTW9kZUNCQyIhPW9lLmNpcGhlckNoYWluaW5nKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGNoYWluaW5nICIrb2UuY2lwaGVyQ2hhaW5pbmcpO3BlPSJhZXMtIitvZS5rZXlCaXRzKyItY2JjIjticmVhaztjYXNlIlJDMiI6cGU9''@;'; put 'put ''InJjMiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBhbGdvICIrb2UuY2lwaGVyQWxnb3JpdGhtKX15ZT1mdW5jdGlvbihmcil7Zm9yKHZhciBicj1CdWZmZXIuYWxsb2MoTmUpLGVyPTA7ZXI8TmU7Kytlcilicltlcl09ZXI8ZnIubGVuZ3RoP2Zy''@;'; put 'put ''W2VyXTo1NDtyZXR1cm4gYnJ9KHllKTt2YXIgYnQ9QnVmZmVyLmZyb20ob2UuZW5jcnlwdGVkS2V5VmFsdWUsImJhc2U2NCIpLGp0PVk0KGF0LHllLHBlKS51cGRhdGUoYnQpLGt0PVk0KG1jKEJ1ZmZlci5jb25jYXQoW2V0LEJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3''@;'; put 'put ''OF0pXSksZ2UpLnNsaWNlKDAsWWUpLHllLHBlKS51cGRhdGUoQnVmZmVyLmZyb20ob2UuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUsImJhc2U2NCIpKSxPdD1tYyhZNChtYyhCdWZmZXIuY29uY2F0KFtldCxCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKV0p''@;'; put 'put ''LGdlKS5zbGljZSgwLFllKSx5ZSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKG9lLmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LCJiYXNlNjQiKSksZ2UpLEt0PStvZS5oYXNoU2l6ZXx8TWF0aC5taW4oa3QubGVuZ3RoLE90Lmxlbmd0aCk7aWYoMCE9a3Quc2xpY2UoMCxLdCkuY29tcGFyZShP''@;'; put 'put ''dC5zbGljZSgwLEt0KSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtRKFIsMCk7dmFyIFRuPVIucmVhZF9zaGlmdCg0KTtSLmwrPTQ7dmFyIHJyPVtdLFNuPUJ1ZmZlci5jb25jYXQoW1BlLEJ1ZmZlci5hbGxvYyg0KV0pO2ZvcihRKFNuKSxFdD0wO1IubDxSLmxlbmd0''@;'; put 'put ''aDspU24ubD15ZS5sZW5ndGgsU24ud3JpdGVfc2hpZnQoNCxFdCkscnIucHVzaChZNChqdCxtYyhCdWZmZXIuZnJvbShTbiksZ2UpLnNsaWNlKDAsMTYpLHBlKS51cGRhdGUoQnVmZmVyLmZyb20oUi5zbGljZShSLmwsUi5sKzQwOTYpKSkpLFIubCs9NDA5NiwrK0V0O3ZhciBYbj1CdWZmZXIu''@;'; put 'put ''Y29uY2F0KHJyKS5zbGljZSgwLFRuKSxCbj1xdChHKTtyZXR1cm4gQm4udHlwZT0iYnVmZmVyIiwkZyhYbixCbil9KHBlWzFdLFEuY29udGVudCxrLnBhc3N3b3JkfHwiIixrKTtpZigyPT1wZVswXSlyZXR1cm4gZnVuY3Rpb24gUEkoUyxSLGssRyl7dmFyIFE9dmUudXRpbHMucHJlcF9ibG9i''@;'; put 'put ''O2lmKCJTdGQiIT09Uy50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTt2YXIgb2U9Uy52LlNhbHQsZ2U9Uy52LlZlcmlmaWVyLHBlPVMudi5WZXJpZmllckhhc2g7aWYoMzYhPVMuaC5GbGFncyl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IFN0''@;'; put 'put ''YW5kYXJkIEVuY3J5cHRpb24gYmFkIEZsYWdzIik7dmFyIHllPTAsUGU9IiI7c3dpdGNoKFMuaC5BbGdJRCl7Y2FzZSAyNjEyNjp5ZT0xMjgsUGU9ImFlcy0xMjgtZWNiIjticmVhaztjYXNlIDI2MTI3OnllPTE5NixQZT0iYWVzLTE5Mi1lY2IiO2JyZWFrO2Nhc2UgMjYxMjg6eWU9MjU2LFBl''@;'; put 'put ''PSJhZXMtMjU2LWVjYiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIil9aWYoMzI3NzIhPVMuaC5BbGdJREhhc2gpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO2lmKFMuaC5L''@;'; put 'put ''ZXlTaXplIT15ZSl0aHJvdyBuZXcgRXJyb3IoIkFsZ0lEL0tleVNpemUgbWlzbWF0Y2giKTtpZigyNCE9Uy5oLlByb3ZpZGVyVHlwZSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IHVuc3VwcG9ydGVkIFByb3ZpZGVyVHlwZSAiK1MuaC5Qcm92aWRlclR5cGUpO2lmKCJNaWNyb3NvZnQgRW5o''@;'; put 'put ''YW5jZWQgUlNBIGFuZCBBRVMgQ3J5cHRvZ3JhcGhpYyBQcm92aWRlciIhPT1TLmguQ1NQTmFtZS5zbGljZSgwLDUzKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENyeXB0byBQcm92aWRlciAiK1MuaC5DU1BOYW1lKTt2YXIgWWU9IlNIQS0xIixldD15ZT4+MyxjdD1tYyhCdWZmZXIu''@;'; put 'put ''Y29uY2F0KFtvZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGspXSksWWUpLEV0PUJ1ZmZlci5hbGxvYyg0KTtRKEV0LDApO2Zvcih2YXIgYXQ9MDthdDw1ZTQ7KythdClFdC5sPTAsRXQud3JpdGVfc2hpZnQoNCxhdCksY3Q9bWMoQnVmZmVyLmNvbmNhdChbRXQsY3RdKSxZZSk7RXQubD0w''@;'; put 'put ''LEV0LndyaXRlX3NoaWZ0KDQsMCk7dmFyIHJyLFNuLGxyLFhuLEJuLGp0PShYbj0obHI9ZnVuY3Rpb24oYnIsZXIsTWkpe2Zvcih2YXIgRmk9QnVmZmVyLmFsbG9jKDY0KSxuYT0wO25hPEZpLmxlbmd0aDsrK25hKUZpW25hXT1icjtmb3IobmE9MDtuYTxlci5sZW5ndGg7KytuYSlGaVtuYV1e''@;'; put 'put ''PWVyW25hXTtyZXR1cm4gbWMoRmksTWkpfSkoNTQscnI9bWMoQnVmZmVyLmNvbmNhdChbY3QsRXRdKSxZZSksU249WWUpLEJuPWxyKDkyLHJyLFNuKSxCdWZmZXIuY29uY2F0KFtYbixCbl0pLnNsaWNlKDAsZXQpKTtpZihZNChqdCxCdWZmZXIuYWxsb2MoMCksUGUpLnVwZGF0ZShwZSkuc2xp''@;'; put 'put ''Y2UoMCwyMCkuY29tcGFyZShtYyhZNChqdCxCdWZmZXIuYWxsb2MoMCksUGUpLnVwZGF0ZShnZSksWWUpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO1EoUiwwKTt2YXIga3Q9Ui5yZWFkX3NoaWZ0KDQpO1IubCs9NDt2YXIgT3Q9W107Zm9yKGF0PTA7Ui5sPFIubGVu''@;'; put 'put ''Z3RoOylPdC5wdXNoKFk0KGp0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKFIuc2xpY2UoUi5sLFIubCs0MDk2KSkpLFIubCs9NDA5NiwrK2F0O3JldHVybiAkZyhCdWZmZXIuY29uY2F0KE90KS5zbGljZSgwLGt0KSxHKX0ocGVbMV0sUS5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO3Ro''@;'; put 'put ''cm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKX12YXIgYmQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEg4KFMsUil7aWYoUi50ZW1wbGF0ZSlyZXR1cm4gYmQoUyxSKTtpZigib2RzIj09Ui5ib29rVHlwZSlyZXR1cm4gSUkoUyxSKTtJZihSJiZSLlBQSXx8OTYpLFMm''@;'; put 'put ''JiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxSLnJldnNzZj1rZShTLlNTRiksUi5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLFIuc3NmPVMuU1NGKSxTLlN0eWxlcz17Rm9udHM6Ui5Gb250cz1be3N6OjEyLGNvbG9yOnt0''@;'; put 'put ''aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpSLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpSLkJvcmRlcnM9W3t9XSxEWEY6Ui5EWEY9Uy5TdHlsZXMm''@;'; put 'put ''JlMuU3R5bGVzLkRYRnx8W10sVGFibGU6Ui5UYWJsZT1TLlN0eWxlcyYmUy5TdHlsZXMuVGFibGV8fFtdfSxSLm92ZXJyaWRlTURXP1RjPVIub3ZlcnJpZGVNRFc6STQoUi5Gb250c1swXSksUi5yZWxzPXt9LFIud2JyZWxzPXt9LFIuU3RyaW5ncz1bXSxSLlN0cmluZ3MuQ291bnQ9MCxSLlN0''@;'; put 'put ''cmluZ3MuVW5pcXVlPTAscTM/Ui5yZXZTdHJpbmdzPW5ldyBNYXA6KFIucmV2U3RyaW5ncz17fSxSLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBSLnJldlN0cmluZ3MuZm9vKTt2YXIgaz0ieGxzYiI9PVIuYm9va1R5cGU/ImJpbiI6InhtbCIsRz1Xay5pbmRleE9mKFIuYm9va1R5cGUpPi0x''@;'; put 'put ''LFE9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpb''@;'; put 'put ''XSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1''@;'; put 'put ''c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O1BmKFI9Unx8e30pO3ZhciBvZT1oaSgpLGdlPSIiLHBlPTA7aWYoUi5jZWxsWGZzPVtdLFIuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGwwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFs''@;'; put 'put ''OjB9fSksUy5Qcm9wc3x8KFMuUHJvcHM9e30pLGpuKG9lLGdlPSJkb2NQcm9wcy9jb3JlLnhtbCIsZnVuY3Rpb24gencoUyxSKXt2YXIgaz1SfHx7fSxHPVtJaSxqd10sUT17fTtpZighUyYmIWsuUHJvcHMpcmV0dXJuIEcuam9pbigiIik7UyYmKG51bGwhPVMuQ3JlYXRlZERhdGUmJnlmKCJk''@;'; put 'put ''Y3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2YgUy5DcmVhdGVkRGF0ZT9TLkNyZWF0ZWREYXRlOmNmKFMuQ3JlYXRlZERhdGUsay5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LEcsUSksbnVsbCE9Uy5Nb2RpZmllZERhdGUmJnlmKCJkY3Rlcm1zOm1vZGlmaWVkIiwi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFMuTW9kaWZpZWREYXRlP1MuTW9kaWZpZWREYXRlOmNmKFMuTW9kaWZpZWREYXRlLGsuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxHLFEpKTtmb3IodmFyIG9lPTA7b2UhPVIwLmxlbmd0aDsrK29lKXt2YXIgZ2U9UjBbb2VdLHBlPWsuUHJvcHMm''@;'; put 'put ''Jm51bGwhPWsuUHJvcHNbZ2VbMV1dP2suUHJvcHNbZ2VbMV1dOlM/U1tnZVsxXV06bnVsbDshMD09PXBlP3BlPSIxIjohMT09PXBlP3BlPSIwIjoibnVtYmVyIj09dHlwZW9mIHBlJiYocGU9U3RyaW5nKHBlKSksbnVsbCE9cGUmJnlmKGdlWzBdLHBlLG51bGwsRyxRKX1yZXR1cm4gRy5sZW5n''@;'; put 'put ''dGg+MiYmKEdbRy5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfShTLlByb3BzLFIpKSxRLmNvcmVwcm9wcy5wdXNoKGdlKSxFcihSLnJlbHMsMixnZSxLYS5DT1JFX1BST1BTKSxnZT0iZG9jUHJvcHMvYXBwLnht''@;'; put 'put ''bCIsIVMuUHJvcHN8fCFTLlByb3BzLlNoZWV0TmFtZXMpaWYoUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgeWU9W10sUGU9MDtQZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrUGUpMiE9KFMuV29ya2Jvb2suU2hlZXRzW1BlXXx8e30pLkhpZGRlbiYmeWUucHVzaChTLlNo''@;'; put 'put ''ZWV0TmFtZXNbUGVdKTtTLlByb3BzLlNoZWV0TmFtZXM9eWV9ZWxzZSBTLlByb3BzLlNoZWV0TmFtZXM9Uy5TaGVldE5hbWVzO1MuUHJvcHMuV29ya3NoZWV0cz1TLlByb3BzLlNoZWV0TmFtZXMubGVuZ3RoLGpuKG9lLGdlLGZ1bmN0aW9uIFV3KFMpe3ZhciBSPVtdLGs9UHI7cmV0dXJuIFN8''@;'; put 'put ''fChTPXt9KSxTLkFwcGxpY2F0aW9uPSJTaGVldEpTIixSW1IubGVuZ3RoXT1JaSxSW1IubGVuZ3RoXT1MNixyaC5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKHZvaWQgMCE9PVNbR1sxXV0pe3ZhciBRO3N3aXRjaChHWzJdKXtjYXNlInN0cmluZyI6UT1McihTdHJpbmcoU1tHWzFdXSkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYm9vbCI6UT1TW0dbMV1dPyJ0cnVlIjoiZmFsc2UifXZvaWQgMCE9PVEmJihSW1IubGVuZ3RoXT1rKEdbMF0sUSkpfX0pLFJbUi5sZW5ndGhdPWsoIkhlYWRpbmdQYWlycyIsaygidnQ6dmVjdG9yIixrKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3RyPldvcmtzaGVldHM8L3Z0Omxwc3Ry''@;'; put 'put ''PiIpK2soInZ0OnZhcmlhbnQiLGsoInZ0Omk0IixTdHJpbmcoUy5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIsYmFzZVR5cGU6InZhcmlhbnQifSkpLFJbUi5sZW5ndGhdPWsoIlRpdGxlc09mUGFydHMiLGsoInZ0OnZlY3RvciIsUy5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihHKXtyZXR1cm4iPHZ0''@;'; put 'put ''Omxwc3RyPiIrTHIoRykrIjwvdnQ6bHBzdHI+In0pLmpvaW4oIiIpLHtzaXplOlMuV29ya3NoZWV0cyxiYXNlVHlwZToibHBzdHIifSkpLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfShTLlBy''@;'; put 'put ''b3BzKSksUS5leHRwcm9wcy5wdXNoKGdlKSxFcihSLnJlbHMsMyxnZSxLYS5FWFRfUFJPUFMpLFMuQ3VzdHByb3BzIT09Uy5Qcm9wcyYmUmUoUy5DdXN0cHJvcHN8fHt9KS5sZW5ndGg+MCYmKGpuKG9lLGdlPSJkb2NQcm9wcy9jdXN0b20ueG1sIixmdW5jdGlvbiBfZihTKXt2YXIgUj1bSWks''@;'; put 'put ''eXZdO2lmKCFTKXJldHVybiBSLmpvaW4oIiIpO3ZhciBrPTE7cmV0dXJuIFJlKFMpLmZvckVhY2goZnVuY3Rpb24oUSl7KytrLFJbUi5sZW5ndGhdPVByKCJwcm9wZXJ0eSIsZnVuY3Rpb24gQ3MoUyxSKXtzd2l0Y2godHlwZW9mIFMpe2Nhc2Uic3RyaW5nIjp2YXIgaz1QcigidnQ6bHB3c3Ry''@;'; put 'put ''IixMcihTKSk7cmV0dXJuIFImJihrPWsucmVwbGFjZSgvJnF1b3Q7L2csIl94MDAyMl8iKSksaztjYXNlIm51bWJlciI6cmV0dXJuIFByKCgwfFMpPT1TPyJ2dDppNCI6InZ0OnI4IixMcihTdHJpbmcoUykpKTtjYXNlImJvb2xlYW4iOnJldHVybiBQcigidnQ6Ym9vbCIsUz8idHJ1ZSI6ImZh''@;'; put 'put ''bHNlIil9aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFByKCJ2dDpmaWxldGltZSIsY2YoUykpO3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHNlcmlhbGl6ZSAiK1MpfShTW1FdLCEwKSx7Zm10aWQ6IntENUNERDUwNS0yRTlDLTEwMUItOTM5Ny0wODAwMkIyQ0Y5QUV9IixwaWQ6ayxu''@;'; put 'put ''YW1lOkxyKFEpfSl9KSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLFJbMV09UlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX0oUy5DdXN0cHJvcHMpKSxRLmN1c3Rwcm9wcy5wdXNoKGdlKSxFcihSLnJlbHMsNCxnZSxLYS5DVVNUX1BST1BTKSk7dmFy''@;'; put 'put ''IE5lPVtdLFllPVtdO2Z1bmN0aW9uIGV0KFRuLHJyKXtZZS5wdXNoKFtwZS0xLHJyLFRuXSl9ZnVuY3Rpb24gY3QoVG4pe05lLnB1c2goW3BlLTEsVG5dKSxFcihFdCwtMSwiLi4vcGl2b3RUYWJsZXMvcGl2b3RUYWJsZSIrTmUubGVuZ3RoKyIuIitrLEthLlBJVk9UKX1mb3IocGU9MTtwZTw9''@;'; put 'put ''Uy5TaGVldE5hbWVzLmxlbmd0aDsrK3BlKXt2YXIgRXQ9eyIhaWQiOnt9fSxhdD1TLlNoZWV0c1tTLlNoZWV0TmFtZXNbcGUtMV1dLGJ0PShhdHx8e30pWyIhdHlwZSJdfHwic2hlZXQiO3N3aXRjaChidCl7Y2FzZSJjaGFydCI6aWYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Iil7am4ob2Us''@;'; put 'put ''Z2U9InhsL2NoYXJ0c2hlZXRzL3NoZWV0IitwZSsiLiIrayxkSShwZS0xLGdlLFIsUyxFdCkpLFEuY2hhcnRzLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrcGUrIi4iK2ssS2EuQ1MpO2JyZWFrfWRlZmF1bHQ6am4ob2UsZ2U9InhsL3dvcmtzaGVldHMvc2hl''@;'; put 'put ''ZXQiK3BlKyIuIitrLHVJKHBlLTEsZ2UsUixTLEV0KSksUS5zaGVldHMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK3BlKyIuIitrLEthLldTWzBdKX1pZihhdCl7ImNoYXJ0Ij09YnQmJiFhdFsiIXBvcyJdJiYoYXRbIiFwb3MiXT17eDowLHk6MCx3OjkwMCxo''@;'; put 'put ''OjYwMH0pO3ZhciBqdD1hdFsiIWNvbW1lbnRzIl0sa3Q9ITE7aWYoanQmJmp0Lmxlbmd0aD4wKXt2YXIgT3Q9InhsL2NvbW1lbnRzIitwZSsiLiIraztqbihvZSxPdCxBeihqdCxPdCxSKSksUS5jb21tZW50cy5wdXNoKE90KSxFcihFdCwtMSwiLi4vY29tbWVudHMiK3BlKyIuIitrLEthLkNN''@;'; put 'put ''TlQpLGt0PSEwfShhdFsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCYmKGt0PSEwKSxhdFsiIWxlZ2FjeSJdJiZrdCYmam4ob2UsInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK3BlKyIudm1sIixPQyhwZSxhdFsiIWNvbW1lbnRzIl0sYXRbIiFjb250cm9scyJdLGF0KSksYXRbIiFsZWdhY3lI''@;'; put 'put ''RiJdJiZWayhvZSwwLHBlLGF0WyIhcHJpbnQiXS5pbWFnZXMpO3ZhciBLdD0oImNoYXJ0Ij09YXRbIiF0eXBlIl0/W2F0XTphdFsiIWNoYXJ0cyJdfHxbXSkuY29uY2F0KChhdFsiIWltYWdlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKFRuKXtyZXR1cm4gVG5bIiF0eXBlIl18fChUblsiIXR5cGUi''@;'; put 'put ''XT0iaW1hZ2UiKSxUbn0pKS5jb25jYXQoKGF0WyIhc2hhcGVzIl18fFtdKS5tYXAoZnVuY3Rpb24oVG4pe3JldHVybiBUblsiIXR5cGUiXXx8KFRuWyIhdHlwZSJdPSJzaGFwZSIpLFRufSkpO0t0JiZLdC5sZW5ndGgmJih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiP3dyaXRlX2RyYXdpbmdf''@;'; put 'put ''KG9lLFEscGUsYXQsS3QpOihqbihvZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrcGUrIi54bWwiLG1CKCkpLFEuZHJhd2luZ3MucHVzaCgieGwvZHJhd2luZ3MvZHJhd2luZyIrcGUrIi54bWwiKSkpLGRlbGV0ZSBhdFsiIWNvbW1lbnRzIl0sZGVsZXRlIGF0WyIhbGVnYWN5Il0sZGVsZXRlIGF0''@;'; put 'put ''WyIhbGVnYWN5SEYiXX1hdCYmYXRbIiFwaXZvdHMiXSYmInhtbCI9PWsmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZhdFsiIXBpdm90cyJdLmZvckVhY2goY3QpLEV0WyIhaWQiXS5ySWQxJiZqbihvZSxWcihnZSksa2koRXQpKSxhdCYmYXRbIiF0YWJsZXMiXSYmInhtbCI9PWsmJmF0''@;'; put 'put ''WyIhdGFibGVzIl0uZm9yRWFjaChldCl9cmV0dXJuIG51bGwhPVIuU3RyaW5ncyYmUi5TdHJpbmdzLmxlbmd0aD4wJiYoam4ob2UsZ2U9InhsL3NoYXJlZFN0cmluZ3MuIitrLGhJKFIuU3RyaW5ncyxnZSxSKSksUS5zdHJzLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJzaGFyZWRTdHJpbmdz''@;'; put 'put ''LiIrayxLYS5TU1QpKSwieG1sIj09ayYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJndyaXRlX3Bpdm90X3htbChOZSxTLG9lLFEsUiksInhtbCI9PWsmJmZ1bmN0aW9uIEY0KFMsUixrLEcpe1MuZm9yRWFjaChmdW5jdGlvbihRLG9lKXt2YXIgZ2U9Ui5TaGVldHNbUi5TaGVldE5hbWVz''@;'; put 'put ''W1FbMF1dXSxwZT0ieGwvdGFibGVzL3RhYmxlIisoUVswXSsxKSsiXyIrUVsxXSsiLnhtbCI7Ry50YWJsZXMucHVzaChwZSk7dmFyIHllPVFbMl0ucmVmfHxnZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgeWUmJih5ZT1yYSh5ZSkpO3ZhciBQZT1vbyh5ZSksTmU9UVsyXS5uYW1lfHwic2pz''@;'; put 'put ''dGJsXyIrUVswXSsiXyIrUVsxXSxZZT1bSWldLGV0PSFXdChRWzJdLmhlYWRlciksY3Q9ZXQmJiFXdChRWzJdLmZpbHRlcik7WWUucHVzaCgnPHRhYmxlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIGlkPSInKyhvZSsx''@;'; put 'put ''KSsnIiBuYW1lPSInK0xyKE5lKSsnIiBkaXNwbGF5TmFtZT0iJytMcihOZSkrJyIgcmVmPSInK3llKyciICcrKG51bGwhPVFbMl0uaGVhZGVyJiYxIT1RWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKFFbMl0uaGVhZGVyfHwwKSsnIiAnOiIiKSsiPiIpLGN0JiZZZS5wdXNoKCc8YXV0''@;'; put 'put ''b0ZpbHRlciByZWY9IicreWUrJyIvPicpLFllLnB1c2goJzx0YWJsZUNvbHVtbnMgY291bnQ9IicrKFBlLmUuYy1QZS5zLmMrMSkrJyI+Jyk7Zm9yKHZhciBFdD1bXSxhdD1QZS5zLmM7YXQ8PVBlLmUuYzsrK2F0KWlmKGV0KXtmb3IodmFyIGJ0PXFpKHtyOlBlLnMucixjOmF0fSksanQ9Z2Vb''@;'; put 'put ''YnRdLGt0PVFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVBlLnMuY10mJlFbMl0uY29sc1thdC1QZS5zLmNdLm5hbWV8fGp0JiYoanQud3x8anQudil8fCJDb2x1bW4gIisoYXQtUGUucy5jKzEpLE90PWt0LEt0PTE7RXQuaW5kZXhPZihPdCk+LTEmJisrS3Q8MTYzODQ7KU90PWt0K0t0O2lmKE90''@;'; put 'put ''IT1rdCl0aHJvdyJ0YWJsZSBjb2x1bW5zICIrYXQrIiBhbmQgIisoRXQuaW5kZXhPZihrdCkrUGUucy5jKSsiIGhhdmUgdGhlIHNhbWUgaGVhZGVyICciK2t0KyInOyB0cnkgc2V0dGluZyBjZWxsICIrYnQrIiB0byAnIitPdCsiJyI7RXQucHVzaChPdCksWWUucHVzaCgnPHRhYmxlQ29sdW1u''@;'; put 'put ''IGlkPSInKyhRWzJdLmNvbHMmJlFbMl0uY29sc1thdC1QZS5zLmNdJiZudWxsIT1RWzJdLmNvbHNbYXQtUGUucy5jXS5pZD9RWzJdLmNvbHNbYXQtUGUucy5jXS5pZDphdC1QZS5zLmMrMSkrJyIgbmFtZT0iJytMcihPdCkrJyIvPicpfWVsc2UgWWUucHVzaChRWzJdLmNvbHMmJlFbMl0uY29s''@;'; put 'put ''c1thdC1QZS5zLmNdPyc8dGFibGVDb2x1bW4gaWQ9IicrUVsyXS5jb2xzW2F0LVBlLnMuY10uaWQrJyIgbmFtZT0iJytRWzJdLmNvbHNbYXQtUGUucy5jXS5uYW1lKyciLz4nOic8dGFibGVDb2x1bW4gaWQ9IicrKGF0LVBlLnMuYysxKSsnIiB1bmlxdWVOYW1lPSInKyhhdC1QZS5zLmMrMSkr''@;'; put 'put ''JyIgbmFtZT0iJysoYXQtUGUucy5jKzEpKyciLz4nKTtZZS5wdXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2YXIgcnI9KyghMSE9PShRWzJdLnN0eWxlfHx7fSkucm93c3RyaXBlKSxTbj0rISEoUVsyXS5zdHlsZXx8e30pLmNvbHN0cmlwZSxscj0rISEoUVsyXS5zdHlsZXx8e30pLmNvbGZpcnN0''@;'; put 'put ''LFhuPSshIShRWzJdLnN0eWxlfHx7fSkuY29sbGFzdCxCbj0oUVsyXS5zdHlsZXx8e30pLm5hbWV8fCJNZWRpdW05IjtCbj1Cbi5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLyk/IlRhYmxlU3R5bGUiK0JuOkJuLFllLnB1c2goJzx0YWJsZVN0eWxlSW5mbyBuYW1lPSInK0JuKyci''@;'; put 'put ''IHNob3dGaXJzdENvbHVtbj0iJytscisnIiBzaG93TGFzdENvbHVtbj0iJytYbisnIiBzaG93Um93U3RyaXBlcz0iJytycisnIiBzaG93Q29sdW1uU3RyaXBlcz0iJytTbisnIi8+JyksWWUucHVzaCgiPC90YWJsZT4iKSxqbihrLHBlLFllLmpvaW4oIiIpKX0pfShZZSxTLG9lLFEpLCJ4bWwi''@;'; put 'put ''PT1rJiYoUy5FeHRlcm5hbFdCfHxbXSkubGVuZ3RoJiZmdW5jdGlvbiBSQyhTLFIsayl7ay5saW5rc3x8KGsubGlua3M9W10pLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmZvckVhY2goZnVuY3Rpb24oRyxRKXt2YXIgb2U9Ii94bC9leHRlcm5hbExpbmtzL19yZWxzL2V4dGVybmFsTGlu''@;'; put 'put ''ayIrKFErMSkrIi54bWwucmVscyIsZ2U9e307RXIoZ2UsLTEsRy5UYXJnZXQsRy5NaXNzaW5nP0thLlhNSVNTOkthLlhQQVRIKSxqbihSLEFjKG9lKSxraShnZSkpO3ZhciBwZT0iL3hsL2V4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoUSsxKSsiLnhtbCI7ay5saW5rcy5wdXNoKHBlKSxq''@;'; put 'put ''bihSLEFjKHBlKSxmdW5jdGlvbiBmQihTKXt2YXIgUj1bSWksaEJdO3JldHVybihTLlNoZWV0TmFtZXN8fFtdKS5sZW5ndGgmJihSLnB1c2goJzxleHRlcm5hbEJvb2sgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRp''@;'; put 'put ''b25zaGlwcyIgcjppZD0icklkMSI+JyksUi5wdXNoKCI8c2hlZXROYW1lcz4iKSxTLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihrKXtSLnB1c2goJzxzaGVldE5hbWUgdmFsPSInK0xyKGspKyciLz4nKX0pLFIucHVzaCgiPC9zaGVldE5hbWVzPiIpLFIucHVzaCgiPHNoZWV0RGF0YVNl''@;'; put 'put ''dD4iKSxTLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihrLEcpe3ZhciBRPVMuU2hlZXRzW2tdLG9lPXtzaGVldElkOkd9LGdlPW51bGw7aWYobnVsbD09USlvZS5yZWZyZXNoRXJyb3I9MTtlbHNlIGlmKFFbIiFyZWYiXSl7dmFyIHBlPU1zKFFbIiFyZWYiXSk7Z2U9IiI7Zm9yKHZhciB5''@;'; put 'put ''ZT1wZS5zLnI7eWU8PXBlLmUucjsrK3llKXtmb3IodmFyIFBlPSIiLE5lPXBlLnMuYztOZTw9cGUuZS5jOysrTmUpe3ZhciBZZT1xaSh7cjp5ZSxjOk5lfSk7UVtZZV0mJihQZXx8KFBlPSc8cm93IHI9IicrKHllKzEpKyciPicpLFBlKz0nPGNlbGwgcj0iJytZZSsnIicrKFFbWWVdLnQ/JyB0''@;'; put 'put ''PSInK1FbWWVdLnQrJyInOiIiKSsiPjx2PiIrTHIoUVtZZV0udikrIjwvdj48L2NlbGw+Iil9UGUmJihnZSs9UGUrIjwvcm93PiIpfX1SLnB1c2goUHIoInNoZWV0RGF0YSIsZ2Usb2UpKX0pLFIucHVzaCgiPC9zaGVldERhdGFTZXQ+IiksUi5wdXNoKCI8L2V4dGVybmFsQm9vaz4iKSksUi5s''@;'; put 'put ''ZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L2V4dGVybmFsTGluaz4iLFJbMV09UlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX0oRykpfSl9KFMsb2UsUSksInhtbCI9PWsmJmZ1bmN0aW9uIERDKFMpe3ZhciBSLGs7Uy5Xb3JrYm9va3x8KFMuV29ya2Jvb2s9e05hbWVzOltdfSks''@;'; put 'put ''Uy5Xb3JrYm9vay5OYW1lc3x8KFMuV29ya2Jvb2suTmFtZXM9W10pO2Zvcih2YXIgRz1TLldvcmtib29rLk5hbWVzLFE9MDtRPFMuU2hlZXROYW1lcy5sZW5ndGg7KytRKXt2YXIgb2U9Uy5TaGVldE5hbWVzW1FdLGdlPVMuU2hlZXRzW29lXTtpZihnZSYmZ2VbIiFwcmludCJdKXt2YXIgcGU9''@;'; put 'put ''IiciK29lKyInISIseWU9Z2VbIiFwcmludCJdO2lmKHllKXt2YXIgUGU9IShSPXllLmFyZWEpLE5lPSEoaz15ZS50aXRsZXMpLFllPVI/InN0cmluZyI9PXR5cGVvZiBSP1I6cmEoUik6IiI7aWYoUiYmKEcuZm9yRWFjaChmdW5jdGlvbihjdCl7Y3QuU2hlZXQ9PVEmJiFQZSYmIl94bG5tLlBy''@;'; put 'put ''aW50X0FyZWEiPT1jdC5OYW1lJiYoUGU9ITAsY3QuUmVmPXBlK1llKX0pLFBlfHxHLnB1c2goe05hbWU6Il94bG5tLlByaW50X0FyZWEiLFJlZjpwZStZZSxTaGVldDpRfSkpLGspe3ZhciBldD0iIjtrLnMuYz4tMSYmay5lLmM+LTEmJihldCs9cGUrVGEoay5zLmMpKyI6IitUYShrLmUuYykr''@;'; put 'put ''IiwiKSxrLnMucj4tMSYmay5lLnI+LTEmJihldCs9cGUramkoay5zLnIpKyI6IitqaShrLmUucikrIiwiKSxldD1ldC5zbGljZSgwLC0xKSxHLmZvckVhY2goZnVuY3Rpb24oY3Qpe2N0LlNoZWV0PT1RJiYhTmUmJiJfeGxubS5QcmludF9UaXRsZXMiPT1jdC5OYW1lJiYoUGU9ITAsY3QuUmVm''@;'; put 'put ''PWV0KX0pLE5lfHxHLnB1c2goe05hbWU6Il94bG5tLlByaW50X1RpdGxlcyIsUmVmOmV0LFNoZWV0OlF9KX19fX19KFMpLGpuKG9lLGdlPSJ4bC93b3JrYm9vay4iK2ssZnVuY3Rpb24gVHooUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9DYjpUOCkoUyxrKX0oUyxnZSxSKSks''@;'; put 'put ''US53b3JrYm9va3MucHVzaChnZSksRXIoUi5yZWxzLDEsZ2UsS2EuV0IpLGpuKG9lLGdlPSJ4bC90aGVtZS90aGVtZTEueG1sIixpQihTLlRoZW1lcyxSKSksUS50aGVtZXMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsInRoZW1lL3RoZW1lMS54bWwiLEthLlRIRU1FKSxqbihvZSxnZT0ieGwv''@;'; put 'put ''c3R5bGVzLiIrayxmdW5jdGlvbiBWUyhTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP2trOlV2KShTLGspfShTLGdlLFIpKSxRLnN0eWxlcy5wdXNoKGdlKSxFcihSLndicmVscywtMSwic3R5bGVzLiIrayxLYS5TVFkpLFMudmJhcmF3JiZHJiYoam4ob2UsZ2U9InhsL3ZiYVBy''@;'; put 'put ''b2plY3QuYmluIixTLnZiYXJhdyksUS52YmEucHVzaChnZSksRXIoUi53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIixLYS5WQkEpKSxTLm1vZGVsJiZTLm1vZGVsLmxlbmd0aCYmKGpuKG9lLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLFMubW9kZWwpLEVyKFIud2JyZWxzLC0xLCJtb2RlbC9pdGVt''@;'; put 'put ''LmRhdGEiLEthLlBXUlBEKSksUy5jb25uJiYoam4ob2UsInhsL2Nvbm5lY3Rpb25zLnhtbCIsUy5jb25uKSxRLmNvbm5zLnB1c2goIi94bC9jb25uZWN0aW9ucy54bWwiKSxFcihSLndicmVscywtMSwiY29ubmVjdGlvbnMueG1sIixLYS5DT05OKSksUy5DdXN0b21YTUwmJlMuQ3VzdG9tWE1M''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oVG4scnIpe2lmKGpuKG9lLCJjdXN0b21YbWwvaXRlbSIrKHJyKzEpKyIueG1sIixUbi5kYXRhKSxFcihSLndicmVscywtMSwiLi4vY3VzdG9tWG1sL2l0ZW0iKyhycisxKSsiLnhtbCIsS2EuQ1hNTCksVG4ucHJvcHMpe2puKG9lLCJjdXN0b21YbWwvaXRlbVBy''@;'; put 'put ''b3BzIisocnIrMSkrIi54bWwiLFRuLnByb3BzKSxRLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVByb3BzIisocnIrMSkrIi54bWwiKTt2YXIgU249e307RXIoU24sLTEsIml0ZW1Qcm9wcyIrKHJyKzEpKyIueG1sIixLYS5DWE1MUCksam4ob2UsImN1c3RvbVhtbC9fcmVs''@;'; put 'put ''cy9pdGVtIisocnIrMSkrIi54bWwucmVscyIsa2koU24pKX19KSxqbihvZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIsZnVuY3Rpb24gQncoUyxSLGspe3ZhciBRLEc9W107a3x8KEdbRy5sZW5ndGhdPUlpLEdbRy5sZW5ndGhdPWd2LEc9Ry5jb25jYXQoVncpKTt2YXIgb2U9ZnVuY3Rpb24oeWUp''@;'; put 'put ''e1NbeWVdJiZTW3llXS5sZW5ndGg+MCYmKEdbRy5sZW5ndGhdPVByKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KFE9U1t5ZV1bMF0pWzBdPyIiOiIvIikrUSxDb250ZW50VHlwZTpodlt5ZV1bUi5ib29rVHlwZXx8Inhsc3giXX0pKX0sZ2U9ZnVuY3Rpb24oeWUpeyhTW3llXXx8''@;'; put 'put ''W10pLmZvckVhY2goZnVuY3Rpb24oUGUpe0dbRy5sZW5ndGhdPVByKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09UGVbMF0/IiI6Ii8iKStQZSxDb250ZW50VHlwZTpodlt5ZV1bUi5ib29rVHlwZXx8Inhsc3giXX0pfSl9LHBlPWZ1bmN0aW9uKHllKXsoU1t5ZV18fFtdKS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKFBlKXtHW0cubGVuZ3RoXT1QcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PVBlWzBdPyIiOiIvIikrUGUsQ29udGVudFR5cGU6ZnZbeWVdWzBdfSl9KX07cmV0dXJuIG9lKCJ3b3JrYm9va3MiKSxnZSgic2hlZXRzIiksZ2UoImNoYXJ0cyIpLHBlKCJ0aGVt''@;'; put 'put ''ZXMiKSxbInN0cnMiLCJzdHlsZXMiLCJjb25ucyJdLmZvckVhY2gob2UpLFsiY29yZXByb3BzIiwiZXh0cHJvcHMiLCJjdXN0cHJvcHMiXS5mb3JFYWNoKHBlKSxwZSgidmJhIikscGUoImNvbW1lbnRzIikscGUoImRyYXdpbmdzIiksZ2UoInRhYmxlcyIpLGdlKCJwaXZvdHMiKSxnZSgicGl2''@;'; put 'put ''b3RjYWNoZXMiKSxnZSgicGl2b3RyZWNvcmRzIikscGUoImRhdGFtb2RlbHMiKSxwZSgiY3RybHByb3BzIikscGUoImNoYXJ0b2JqcyIpLHBlKCJjaGFydHN0eWxlcyIpLHBlKCJjaGFydGNvbG9ycyIpLHBlKCJjaGFydGV4cyIpLGdlKCJsaW5rcyIpLHBlKCJjdXN0b214bWxwcm9wcyIpLCFr''@;'; put 'put ''JiZHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09IjwvVHlwZXM+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcuam9pbigiIil9KFEsUikpLGpuKG9lLCJfcmVscy8ucmVscyIsa2koUi5yZWxzKSksam4ob2UsInhsL19yZWxzL3dvcmtib29rLiIraysiLnJlbHMiLGtpKFIud2JyZWxz''@;'; put 'put ''KSksZGVsZXRlIFIuRm9udHMsZGVsZXRlIFIuRmlsbHMsZGVsZXRlIFIuQm9yZGVycyxkZWxldGUgUi5yZXZzc2YsZGVsZXRlIFIuc3NmLG9lfWZ1bmN0aW9uIFFTKFMsUil7dmFyIGs9IiI7c3dpdGNoKChSfHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5Ijpy''@;'; put 'put ''ZXR1cm5bU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddXTtjYXNlImJhc2U2NCI6az1fZS5kZWNvZGUoUy5zbGljZSgwLDEyKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9UzticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoUiYm''@;'; put 'put ''Ui50eXBlfHwidW5kZWZpbmVkIikpfXJldHVybltrLmNoYXJDb2RlQXQoMCksay5jaGFyQ29kZUF0KDEpLGsuY2hhckNvZGVBdCgyKSxrLmNoYXJDb2RlQXQoMyksay5jaGFyQ29kZUF0KDQpLGsuY2hhckNvZGVBdCg1KSxrLmNoYXJDb2RlQXQoNiksay5jaGFyQ29kZUF0KDcpXX1mdW5jdGlv''@;'; put 'put ''biBlTShTLFIpe3ZhciBrPTA7ZTpmb3IoO2s8Uy5sZW5ndGg7KXN3aXRjaChTLmNoYXJDb2RlQXQoaykpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOisrazticmVhaztjYXNlIDYwOnJldHVybiBJOChTLnNsaWNlKGspLFIpO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gajMudG9fd29ya2Jvb2so''@;'; put 'put ''UyxSKX1mdW5jdGlvbiBGYihTLFIsayxHKXtyZXR1cm4gRz8oay50eXBlPSJzdHJpbmciLGozLnRvX3dvcmtib29rKFMsaykpOmozLnRvX3dvcmtib29rKFIsayl9ZnVuY3Rpb24gJGcoUyxSKXt2YXIgaz1BLmdldGxvY2FsZSgpO2FlKEEpLEEuc2V0bG9jYWxlKGspLFcoKTt2YXIgRz1SfHx7''@;'; put 'put ''fTtpZih0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZTIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuICRnKG5ldyBVaW50OEFycmF5KFMpLCgoRz1xdChHKSkudHlwZT0iYXJyYXkiLEcpKTt2YXIgb2UsUT1TLGdlPSExO2lmKElmKERmPUcuUFBJfHxXcyksRy5jZWxsU3R5bGVzJiYoRy5j''@;'; put 'put ''ZWxsTkY9ITAsRy5zaGVldFN0dWJzPSEwKSxjOD17fSxHLmRhdGVORiYmKGM4LmRhdGVORj1HLmRhdGVORiksRy50eXBlfHwoRy50eXBlPVRlJiZCdWZmZXIuaXNCdWZmZXIoUyk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09Ry50eXBlJiYoRy50eXBlPVRlPyJidWZmZXIiOiJiaW5hcnki''@;'; put 'put ''LFE9ZnVuY3Rpb24gRmUoUyl7aWYodHlwZW9mIFhlPCJ1IilyZXR1cm4gWGUucmVhZEZpbGVTeW5jKFMpO2lmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIFI9RmlsZShTKTtSLm9wZW4oInIiKSxSLmVuY29kaW5nPSJiaW5hcnkiO3Zh''@;'; put 'put ''ciBrPVIucmVhZCgpO3JldHVybiBSLmNsb3NlKCksa31jYXRjaChHKXtpZighRy5tZXNzYWdlfHwhRy5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IEd9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWNjZXNzIGZpbGUgIitTKX0oUykpLCJzdHJpbmciPT1HLnR5cGUmJihnZT0hMCxH''@;'; put 'put ''LnR5cGU9ImJpbmFyeSIsRy5jb2RlcGFnZT02NTAwMSxRPWZ1bmN0aW9uIGpjKFMpe3JldHVybiBTLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT9OcyhTKTpTfShTKSksImFycmF5Ij09Ry50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJlMgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZ0eXBlb2Yg''@;'; put 'put ''QXJyYXlCdWZmZXI8InUiKXt2YXIgcGU9bmV3IEFycmF5QnVmZmVyKDMpLHllPW5ldyBVaW50OEFycmF5KHBlKTtpZih5ZS5mb289ImJhciIsIXllLmZvbylyZXR1cm4oRz1xdChHKSkudHlwZT0iYXJyYXkiLCRnKEgoUSksRyl9c3dpdGNoKChvZT1RUyhRLEcpKVswXSl7Y2FzZSAyMDg6aWYo''@;'; put 'put ''MjA3PT09b2VbMV0mJjE3PT09b2VbMl0mJjIyND09PW9lWzNdJiYxNjE9PT1vZVs0XSYmMTc3PT09b2VbNV0mJjI2PT09b2VbNl0mJjIyNT09PW9lWzddKXJldHVybiBmdW5jdGlvbiBtdChTLFIpe3JldHVybiB2ZS5maW5kKFMsIkVuY3J5cHRlZFBhY2thZ2UiKT9QYihTLFIpOiRTKFMsUil9''@;'; put 'put ''KHZlLnJlYWQoUSxHKSxHKTticmVhaztjYXNlIDk6aWYob2VbMV08PTgpcmV0dXJuICRTKFEsRyk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gSTgoUSxHKTtjYXNlIDczOmlmKDczPT09b2VbMV0mJjQyPT09b2VbMl0mJjA9PT1vZVszXSl0aHJvdyBuZXcgRXJyb3IoIlRJRkYgSW1hZ2UgRmlsZSBp''@;'; put 'put ''cyBub3QgYSBzcHJlYWRzaGVldCIpO2lmKDY4PT09b2VbMV0pcmV0dXJuIGZ1bmN0aW9uIGlrKFMsUil7dmFyIGs9Unx8e30sRz0hIWsuV1RGO2suV1RGPSEwO3RyeXt2YXIgUT1jQy50b193b3JrYm9vayhTLGspO3JldHVybiBrLldURj1HLFF9Y2F0Y2gob2Upe2lmKGsuV1RGPUcsIW9lLm1l''@;'; put 'put ''c3NhZ2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZHKXRocm93IG9lO3JldHVybiBqMy50b193b3JrYm9vayhTLFIpfX0oUSxHKTticmVhaztjYXNlIDg0OmlmKDY1PT09b2VbMV0mJjY2PT09b2VbMl0mJjc2PT09b2VbM10pcmV0dXJuIGt2LnRvX3dvcmtib29rKFEsRyk7YnJlYWs7''@;'; put 'put ''Y2FzZSA4MDpyZXR1cm4gNzU9PT1vZVsxXSYmb2VbMl08OSYmb2VbM108OT9mdW5jdGlvbiBOSShTLFIpe3ZhciBHPVMsUT1SfHx7fTtyZXR1cm4gUS50eXBlfHwoUS50eXBlPVRlJiZCdWZmZXIuaXNCdWZmZXIoUyk/ImJ1ZmZlciI6ImJhc2U2NCIpLHJwKGNuKEcsUSksUSl9KFEsRyk6RmIo''@;'; put 'put ''UyxRLEcsZ2UpO2Nhc2UgMjM5OnJldHVybiA2MD09PW9lWzNdP0k4KFEsRyk6RmIoUyxRLEcsZ2UpO2Nhc2UgMjU1OmlmKDI1ND09PW9lWzFdKXJldHVybiBmdW5jdGlvbiB0VShTLFIpe3ZhciBrPVM7cmV0dXJuImJhc2U2NCI9PVIudHlwZSYmKGs9X2UuZGVjb2RlKGspKSxrPWNwdGFibGUu''@;'; put 'put ''dXRpbHMuZGVjb2RlKDEyMDAsay5zbGljZSgyKSwic3RyIiksUi50eXBlPSJiaW5hcnkiLGVNKGssUil9KFEsRyk7YnJlYWs7Y2FzZSAwOmlmKDA9PT1vZVsxXSYmb2VbMl0+PTImJjA9PT1vZVszXSlyZXR1cm4gRHYudG9fd29ya2Jvb2soUSxHKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2Fz''@;'; put 'put ''ZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIEIzLnRvX3dvcmtib29rKFEsRyk7Y2FzZSAxMjM6aWYoOTI9PT1vZVsxXSYmMTE0PT09b2VbMl0mJjExNj09PW9lWzNdKXJldHVybiBOdi50b193b3JrYm9vayhRLEcpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBl''@;'; put 'put ''VShTLFIpe3ZhciBrPSIiLEc9UVMoUyxSKTtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6az1fZS5kZWNvZGUoUyk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9UzticmVhaztjYXNlImJ1ZmZlciI6az1TLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjprPXV0KFMpO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9cmV0dXJuIDIzOT09R1swXSYmMTg3PT1HWzFdJiYxOTE9PUdbMl0mJihrPWdvKGspKSxlTShrLFIpfShRLEcpfXJldHVybiBCMy52ZXJzaW9ucy5pbmRleE9mKG9lWzBdKT4tMSYmb2VbMl08PTEy''@;'; put 'put ''JiZvZVszXTw9MzE/QjMudG9fd29ya2Jvb2soUSxHKTpGYihTLFEsRyxnZSl9ZnVuY3Rpb24ga2MoUyxSKXt2YXIgaz1SfHx7fTtyZXR1cm4gay50eXBlPSJmaWxlIiwkZyhTLGspfWZ1bmN0aW9uIEtnKFMsUil7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5IjpicmVh''@;'; put 'put ''aztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6Ui50eXBlPSIiO2JyZWFrO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSx2ZS53cml0ZShTLHt0eXBlOlRlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQg''@;'; put 'put ''Zm9yICciK1IuYm9va1R5cGUrIicgZmlsZXMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfXJldHVybiB2ZS53cml0ZShTLFIpfWZ1bmN0aW9uIG4xKFMsUixrKXtrfHwoaz0iIik7dmFyIEc9aytTO3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFz''@;'; put 'put ''ZTY0IjpyZXR1cm4gX2UuZW5jb2RlKE5zKEcpKTtjYXNlImJpbmFyeSI6cmV0dXJuIE5zKEcpO2Nhc2Uic3RyaW5nIjpyZXR1cm4gUztjYXNlImZpbGUiOnJldHVybiBEZShSLmZpbGUsRywidXRmOCIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gVGU/U2UoRywidXRmOCIpOm4xKEcse3R5cGU6ImJp''@;'; put 'put ''bmFyeSJ9KS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBRLmNoYXJDb2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1mdW5jdGlvbiB0TShTLFIpe3N3aXRjaChSLnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlImJhc2U2NCI6Y2Fz''@;'; put 'put ''ZSJiaW5hcnkiOmZvcih2YXIgaz0iIixHPTA7RzxTLmxlbmd0aDsrK0cpays9U3RyaW5nLmZyb21DaGFyQ29kZShTW0ddKTtyZXR1cm4iYmFzZTY0Ij09Ui50eXBlP19lLmVuY29kZShrKToic3RyaW5nIj09Ui50eXBlP2dvKGspOms7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoUi5maWxlLFMpO2Nh''@;'; put 'put ''c2UiYnVmZmVyIjpyZXR1cm4gUztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfX1mdW5jdGlvbiBOOChTLFIpe1coKSxmdW5jdGlvbiBhSShTKXtpZighU3x8IVMuU2hlZXROYW1lc3x8IVMuU2hlZXRzKXRocm93IG5ldyBFcnJvcigiSW52YWxp''@;'; put 'put ''ZCBXb3JrYm9vayIpO2lmKCFTLlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiV29ya2Jvb2sgaXMgZW1wdHkiKTshZnVuY3Rpb24gaUkoUyxSLGspe1MuZm9yRWFjaChmdW5jdGlvbihHLFEpe3liKEcpO2Zvcih2YXIgb2U9MDtvZTxROysrb2UpaWYoRz09U1tvZV0pdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJEdXBsaWNhdGUgU2hlZXQgTmFtZTogIitHKTtpZihrKXt2YXIgZ2U9UiYmUltRXSYmUltRXS5Db2RlTmFtZXx8RztpZig5NT09Z2UuY2hhckNvZGVBdCgwKSYmZ2UubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigiQmFkIENvZGUgTmFtZTogV29ya3NoZWV0IitnZSl9fSl9''@;'; put 'put ''KFMuU2hlZXROYW1lcyxTLldvcmtib29rJiZTLldvcmtib29rLlNoZWV0c3x8W10sISFTLnZiYXJhdyk7Zm9yKHZhciBrPTA7azxTLlNoZWV0TmFtZXMubGVuZ3RoOysraylnRChTLlNoZWV0c1tTLlNoZWV0TmFtZXNba11dLDAsayl9KFMpO3ZhciBrPVJ8fHt9O2lmKGsuY2VsbFN0eWxlcyYm''@;'; put 'put ''KGsuY2VsbE5GPSEwLGsuc2hlZXRTdHVicz0hMCksImFycmF5Ij09ay50eXBlKXtrLnR5cGU9ImJpbmFyeSI7dmFyIEc9TjgoUyxrKTtyZXR1cm4gay50eXBlPSJhcnJheSIseChHKX1zd2l0Y2goay5ib29rVHlwZXx8Inhsc2IiKXtjYXNlInhtbCI6Y2FzZSJ4bG1sIjpyZXR1cm4gbjEoQ0ko''@;'; put 'put ''UyxrKSxrKTtjYXNlInNsayI6Y2FzZSJzeWxrIjpyZXR1cm4gbjEoR3ooUyxrKSxrKTtjYXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gbjEoV3ooUyxrKSxrKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIE5iKFMsUil7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5l''@;'; put 'put ''bmNvZGUoUyk7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1cm4gUztjYXNlImZpbGUiOnJldHVybiBEZShSLmZpbGUsUywiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBUZT9TZShTLCJiaW5hcnkiKTpTLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIGsuY2hhckNv''@;'; put 'put ''ZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfSgkeihTLGspLGspO2Nhc2UiY3N2IjpyZXR1cm4gbjEoWXooUyxrKSxrLCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIG4xKHZkKFMsayksayk7Y2FzZSJkYmYiOnJldHVybiB0TShlcmUoUyxr''@;'; put 'put ''KSxrKTtjYXNlInBybiI6cmV0dXJuIG4xKFJJKFMsayksayk7Y2FzZSJydGYiOnJldHVybiBuMShMSShTLGspLGspO2Nhc2UiZXRoIjpyZXR1cm4gbjEoT0koUyxrKSxrKTtjYXNlImZvZHMiOnJldHVybiBuMShJSShTLGspLGspO2Nhc2UiYmlmZjIiOmsuYmlmZnx8KGsuYmlmZj0yKTtjYXNl''@;'; put 'put ''ImJpZmYzIjprLmJpZmZ8fChrLmJpZmY9Myk7Y2FzZSJiaWZmNCI6cmV0dXJuIGsuYmlmZnx8KGsuYmlmZj00KSx0TShFSShTLGspLGspO2Nhc2UiYmlmZjUiOmsuYmlmZnx8KGsuYmlmZj01KTtjYXNlImJpZmY4IjpjYXNlInhsYSI6Y2FzZSJ4bHMiOnJldHVybiBrLmJpZmZ8fChrLmJpZmY9''@;'; put 'put ''OCksZnVuY3Rpb24gSGIoUyxSKXt2YXIgaz1SfHx7fTtyZXR1cm4gS2coZnVuY3Rpb24gem5lKFMsUil7dmFyIGs9Unx8e30sRz12ZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pLFE9Ii9Xb3JrYm9vayI7c3dpdGNoKGsuYm9va1R5cGV8fCJ4bHMiKXtjYXNlInhscyI6ay5ib29rVHlwZT0i''@;'; put 'put ''YmlmZjgiO2Nhc2UieGxhIjprLmJvb2tUeXBlfHwoay5ib29rVHlwZT0ieGxhIik7Y2FzZSJiaWZmOCI6UT0iL1dvcmtib29rIixrLmJpZmY9ODticmVhaztjYXNlImJpZmY1IjpRPSIvQm9vayIsay5iaWZmPTU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAi''@;'; put 'put ''K2suYm9va1R5cGUrIiBmb3IgWExTIENGQiIpfXJldHVybiB2ZS51dGlscy5jZmJfYWRkKEcsUSxFSShTLGspKSw4PT1rLmJpZmYmJihTLlByb3BzfHxTLkN1c3Rwcm9wcykmJmZ1bmN0aW9uIGpuZShTLFIpe3ZhciBnZSxrPVtdLEc9W10sUT1bXSxvZT0wO2lmKFMuUHJvcHMpZm9yKGdlPVJl''@;'; put 'put ''KFMuUHJvcHMpLG9lPTA7b2U8Z2UubGVuZ3RoOysrb2UpKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoZyxnZVtvZV0pP2s6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZmLGdlW29lXSk/RzpRKS5wdXNoKFtnZVtvZV0sUy5Qcm9wc1tnZVtvZV1d''@;'; put 'put ''XSk7aWYoUy5DdXN0cHJvcHMpZm9yKGdlPVJlKFMuQ3VzdHByb3BzKSxvZT0wO29lPGdlLmxlbmd0aDsrK29lKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLlByb3BzfHx7fSxnZVtvZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhnLGdl''@;'; put 'put ''W29lXSk/azpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmYsZ2Vbb2VdKT9HOlEpLnB1c2goW2dlW29lXSxTLkN1c3Rwcm9wc1tnZVtvZV1dXSk7dmFyIHBlPVtdO2ZvcihvZT0wO29lPFEubGVuZ3RoOysrb2UpVjYuaW5kZXhPZihRW29lXVswXSk+LTF8fG51bGwhPVFb''@;'; put 'put ''b2VdWzFdJiZwZS5wdXNoKFFbb2VdKTtHLmxlbmd0aCYmdmUudXRpbHMuY2ZiX2FkZChSLCIvXHgwNVN1bW1hcnlJbmZvcm1hdGlvbiIsemkoRyxFYi5TSSx2ZixkZykpLChrLmxlbmd0aHx8cGUubGVuZ3RoKSYmdmUudXRpbHMuY2ZiX2FkZChSLCIvXHgwNURvY3VtZW50U3VtbWFyeUluZm9y''@;'; put 'put ''bWF0aW9uIix6aShrLEViLkRTSSxoZyxtNCxwZS5sZW5ndGg/cGU6bnVsbCxFYi5VREkpKX0oUyxHKSw4PT1rLmJpZmYmJlMudmJhcmF3JiZmdW5jdGlvbiBaayhTLFIpe1IuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oayxHKXtpZigwIT1HKXt2YXIgUT1rLnJlcGxhY2UoL1teXC9dKltc''@;'; put 'put ''L10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1RLnNsaWNlKC0xKSYmdmUudXRpbHMuY2ZiX2FkZChTLFEsUi5GaWxlSW5kZXhbR10uY29udGVudCl9fSl9KEcsdmUucmVhZChTLnZiYXJhdyx7dHlwZToic3RyaW5nIj09dHlwZW9mIFMudmJhcmF3PyJiaW5hcnkiOiJidWZmZXIifSkp''@;'; put 'put ''LEd9KFMsayksayl9KFMsayk7Y2FzZSJ4bHN4IjpjYXNlInhsc20iOmNhc2UieGxhbSI6Y2FzZSJ4bHNiIjpjYXNlIm9kcyI6cmV0dXJuIGZ1bmN0aW9uIHFnKFMsUil7dmFyIGs9Unx8e30sRz1IOChTLGspLFE9e307aWYoay5jb21wcmVzc2lvbiYmKFEuY29tcHJlc3Npb249IkRFRkxBVEUi''@;'; put 'put ''KSxrLnBhc3N3b3JkKVEudHlwZT1UZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7ZWxzZSBzd2l0Y2goay50eXBlKXtjYXNlImJhc2U2NCI6US50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjpRLnR5cGU9InN0cmluZyI7YnJlYWs7Y2FzZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''J3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIray5ib29rVHlwZSsiJyBmaWxlcyIpO2Nhc2UiYnVmZmVyIjpjYXNlImZpbGUiOlEudHlwZT1UZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIr''@;'; put 'put ''ay50eXBlKX12YXIgb2U9Ry5GdWxsUGF0aHM/dmUud3JpdGUoRyx7ZmlsZVR5cGU6InppcCIsdHlwZTp7bm9kZWJ1ZmZlcjoiYnVmZmVyIixzdHJpbmc6ImJpbmFyeSJ9W1EudHlwZV18fFEudHlwZX0pOkcuZ2VuZXJhdGUoUSk7cmV0dXJuIGsucGFzc3dvcmQmJnR5cGVvZiBYejwidSI/S2co''@;'; put 'put ''WHoob2Usay5wYXNzd29yZCksayk6ImZpbGUiPT09ay50eXBlP0RlKGsuZmlsZSxvZSk6InN0cmluZyI9PWsudHlwZT9nbyhvZSk6b2V9KFMsayk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBib29rVHlwZSB8IitrLmJvb2tUeXBlKyJ8Iil9fWZ1bmN0aW9uIG5NKFMp''@;'; put 'put ''e2lmKCFTLmJvb2tUeXBlKXt2YXIgaz1TLmZpbGUuc2xpY2UoUy5maWxlLmxhc3RJbmRleE9mKCIuIikpLnRvTG93ZXJDYXNlKCk7ay5tYXRjaCgvXlwuW2Etel0rJC8pJiYoUy5ib29rVHlwZT1rLnNsaWNlKDEpKSxTLmJvb2tUeXBlPXt4bHM6ImJpZmY4IixodG06Imh0bWwiLHNsazoic3ls''@;'; put 'put ''ayIsc29jaWFsY2FsYzoiZXRoIixTaDMzdEpTOiJXVEYifVtTLmJvb2tUeXBlXXx8Uy5ib29rVHlwZX19ZnVuY3Rpb24gVjgoUyxSLGspe3ZhciBHPWt8fHt9O3JldHVybiBHLnR5cGU9ImZpbGUiLEcuZmlsZT1SLG5NKEcpLE44KFMsRyl9ZnVuY3Rpb24gaU0oUyxSLGssRyxRLG9lLGdlLHBl''@;'; put 'put ''KXt2YXIgeWU9amkoayksUGU9cGUuZGVmdmFsLE5lPXBlLnJhdyxZZT0hMCxldD0xPT09UT9bXTp7fTtpZigxIT09USlpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShldCwiX19yb3dOdW1fXyIse3ZhbHVlOmssZW51bWVyYWJsZTohMX0pfWNhdGNo''@;'; put 'put ''e2V0Ll9fcm93TnVtX189a31lbHNlIGV0Ll9fcm93TnVtX189aztpZighZ2V8fFNba10pZm9yKHZhciBjdD1SLnMuYztjdDw9Ui5lLmM7KytjdCl7dmFyIEV0PWdlP1Nba11bY3RdOlNbR1tjdF0reWVdO2lmKHZvaWQgMCE9PUV0JiZ2b2lkIDAhPT1FdC50KXt2YXIgYXQ9RXQudjtzd2l0Y2go''@;'; put 'put ''RXQudCl7Y2FzZSJ6IjppZihudWxsPT1hdClicmVhaztjb250aW51ZTtjYXNlImUiOmF0PTA9PWF0P251bGw6dm9pZCAwO2JyZWFrO2Nhc2UicyI6Y2FzZSJkIjpjYXNlImIiOmNhc2UibiI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0eXBlICIrRXQudCl9''@;'; put 'put ''aWYobnVsbCE9b2VbY3RdKXtpZihudWxsPT1hdClpZigiZSI9PUV0LnQmJm51bGw9PT1hdClldFtvZVtjdF1dPW51bGw7ZWxzZSBpZih2b2lkIDAhPT1QZSlldFtvZVtjdF1dPVBlO2Vsc2V7aWYoIU5lfHxudWxsIT09YXQpY29udGludWU7ZXRbb2VbY3RdXT1udWxsfWVsc2UgZXRbb2VbY3Rd''@;'; put 'put ''XT1OZT9hdDpfbChFdCxhdCxwZSk7bnVsbCE9YXQmJihZZT0hMSl9fWVsc2V7aWYodm9pZCAwPT09UGUpY29udGludWU7bnVsbCE9b2VbY3RdJiYoZXRbb2VbY3RdXT1QZSl9fXJldHVybntyb3c6ZXQsaXNlbXB0eTpZZX19ZnVuY3Rpb24gSzQoUyxSKXtpZihudWxsPT1TfHxudWxsPT1TWyIh''@;'; put 'put ''cmVmIl0pcmV0dXJuW107dmFyIGs9e3Q6Im4iLHY6MH0sRz0wLFE9MSxvZT1bXSxnZT0wLHBlPSIiLHllPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxQZT1SfHx7fSxOZT1udWxsIT1QZS5yYW5nZT9QZS5yYW5nZTpTWyIhcmVmIl07c3dpdGNo''@;'; put 'put ''KDE9PT1QZS5oZWFkZXI/Rz0xOiJBIj09PVBlLmhlYWRlcj9HPTI6QXJyYXkuaXNBcnJheShQZS5oZWFkZXIpP0c9MzpudWxsPT1QZS5oZWFkZXImJihHPTApLHR5cGVvZiBOZSl7Y2FzZSJzdHJpbmciOnllPW9vKE5lKTticmVhaztjYXNlIm51bWJlciI6KHllPW9vKFNbIiFyZWYiXSkpLnMu''@;'; put 'put ''cj1OZTticmVhaztkZWZhdWx0OnllPU5lfUc+MCYmKFE9MCk7dmFyIFllPWppKHllLnMuciksZXQ9W10sY3Q9W10sRXQ9MCxhdD0wLGJ0PUFycmF5LmlzQXJyYXkoUyksanQ9eWUucy5yLGt0PTAsT3Q9MDtmb3IoYnQmJiFTW2p0XSYmKFNbanRdPVtdKSxrdD15ZS5zLmM7a3Q8PXllLmUuYzsr''@;'; put 'put ''K2t0KXN3aXRjaChldFtrdF09VGEoa3QpLGs9YnQ/U1tqdF1ba3RdOlNbZXRba3RdK1llXSxHKXtjYXNlIDE6b2Vba3RdPWt0LXllLnMuYzticmVhaztjYXNlIDI6b2Vba3RdPWV0W2t0XTticmVhaztjYXNlIDM6b2Vba3RdPVBlLmhlYWRlcltrdC15ZS5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9y''@;'; put 'put ''KG51bGw9PWsmJihrPUpTT04ucGFyc2UoJ3sidyI6ICJfX0VNUFRZIiwgInQiOiAicyJ9JykpLHBlPWdlPV9sKGssbnVsbCxQZSksYXQ9MCxPdD0wO090PG9lLmxlbmd0aDsrK090KW9lW090XT09cGUmJihwZT1nZSsiXyIrICsrYXQpO29lW2t0XT1wZX1mb3IoanQ9eWUucy5yK1E7anQ8PXll''@;'; put 'put ''LmUucjsrK2p0KXt2YXIgS3Q9aU0oUyx5ZSxqdCxldCxHLG9lLGJ0LFBlKTsoITE9PT1LdC5pc2VtcHR5fHwoMT09PUc/ITEhPT1QZS5ibGFua3Jvd3M6UGUuYmxhbmtyb3dzKSkmJihjdFtFdCsrXT1LdC5yb3cpfXJldHVybiBjdC5sZW5ndGg9RXQsY3R9dmFyIF8yPS8iL2c7ZnVuY3Rpb24g''@;'; put 'put ''VkkoUyxSLGssRyxRLG9lLGdlLHBlKXtmb3IodmFyIHllPSEwLFBlPVtdLE5lPSIiLFllPWppKGspLGV0PVIucy5jO2V0PD1SLmUuYzsrK2V0KWlmKEdbZXRdKXt2YXIgY3Q9cGUuZGVuc2U/KFNba118fFtdKVtldF06U1tHW2V0XStZZV07aWYobnVsbD09Y3QpTmU9IiI7ZWxzZSBpZihudWxs''@;'; put 'put ''IT1jdC52KXt5ZT0hMSxOZT0iIitfbChjdCxudWxsLHBlKTtmb3IodmFyIEV0PTAsYXQ9MDtFdCE9PU5lLmxlbmd0aDsrK0V0KWlmKChhdD1OZS5jaGFyQ29kZUF0KEV0KSk9PT1RfHxhdD09PW9lfHwzND09PWF0KXtOZT0nIicrTmUucmVwbGFjZShfMiwnIiInKSsnIic7YnJlYWt9IklEIj09''@;'; put 'put ''TmUmJihOZT0nIklEIicpfWVsc2UgbnVsbD09Y3QuZnx8Y3QuRj9OZT0iIjooeWU9ITEsKE5lPSI9IitjdC5mKS5pbmRleE9mKCIsIik+PTAmJihOZT0nIicrTmUucmVwbGFjZShfMiwnIiInKSsnIicpKTtQZS5wdXNoKE5lKX1yZXR1cm4hMT09PXBlLmJsYW5rcm93cyYmeWU/bnVsbDpQZS5q''@;'; put 'put ''b2luKGdlKX1mdW5jdGlvbiBDMChTLFIpe3ZhciBrPVtdLEc9Uj8/e307aWYobnVsbD09U3x8bnVsbD09U1siIXJlZiJdKXJldHVybiIiO3ZhciBRPW9vKFNbIiFyZWYiXSksb2U9dm9pZCAwIT09Ry5GUz9HLkZTOiIsIixnZT1vZS5jaGFyQ29kZUF0KDApLHBlPXZvaWQgMCE9PUcuUlM/Ry5S''@;'; put 'put ''UzoiXG4iLHllPXBlLmNoYXJDb2RlQXQoMCksUGU9bmV3IFJlZ0V4cCgoInwiPT1vZT8iXFx8IjpvZSkrIiskIiksTmU9IiIsWWU9W107Ry5kZW5zZT1BcnJheS5pc0FycmF5KFMpO2Zvcih2YXIgZXQ9Ry5za2lwSGlkZGVuJiZTWyIhY29scyJdfHxbXSxjdD1HLnNraXBIaWRkZW4mJlNbIiFy''@;'; put 'put ''b3dzIl18fFtdLEV0PVEucy5jO0V0PD1RLmUuYzsrK0V0KShldFtFdF18fHt9KS5oaWRkZW58fChZZVtFdF09VGEoRXQpKTtmb3IodmFyIGF0PVEucy5yO2F0PD1RLmUucjsrK2F0KShjdFthdF18fHt9KS5oaWRkZW58fG51bGwhPShOZT1WSShTLFEsYXQsWWUsZ2UseWUsb2UsRykpJiYoRy5z''@;'; put 'put ''dHJpcCYmKE5lPU5lLnJlcGxhY2UoUGUsIiIpKSxrLnB1c2goTmUrcGUpKTtyZXR1cm4gZGVsZXRlIEcuZGVuc2Usay5qb2luKCIiKX1mdW5jdGlvbiBCSShTLFIpe1J8fChSPXt9KSxSLkZTPSJcdCIsUi5SUz0iXG4iO3ZhciBrPUMwKFMsUik7cmV0dXJuIHR5cGVvZiBjcHRhYmxlPiJ1Inx8''@;'; put 'put ''InN0cmluZyI9PVIudHlwZT9rOiJceGZmXHhmZSIrY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrLCJzdHIiKX1mdW5jdGlvbiBhTShTKXt2YXIgayxSPSIiLEc9IiI7aWYobnVsbD09U3x8bnVsbD09U1siIXJlZiJdKXJldHVybltdO3ZhciBwZSxRPW9vKFNbIiFyZWYiXSksb2U9IiIsZ2U9''@;'; put 'put ''W10seWU9W10sUGU9QXJyYXkuaXNBcnJheShTKTtmb3IocGU9US5zLmM7cGU8PVEuZS5jOysrcGUpZ2VbcGVdPVRhKHBlKTtmb3IodmFyIE5lPVEucy5yO05lPD1RLmUucjsrK05lKWZvcihvZT1qaShOZSkscGU9US5zLmM7cGU8PVEuZS5jOysrcGUpaWYoUj1nZVtwZV0rb2UsRz0iIix2b2lk''@;'; put 'put ''IDAhPT0oaz1QZT8oU1tOZV18fFtdKVtwZV06U1tSXSkpe2lmKG51bGwhPWsuRil7aWYoUj1rLkYsIWsuZiljb250aW51ZTtHPWsuZiwtMT09Ui5pbmRleE9mKCI6IikmJihSPVIrIjoiK1IpfWlmKG51bGwhPWsuZilHPWsuZjtlbHNle2lmKCJ6Ij09ay50KWNvbnRpbnVlO2lmKCJuIj09ay50''@;'; put 'put ''JiZudWxsIT1rLnYpRz0iIitrLnY7ZWxzZSBpZigiYiI9PWsudClHPWsudj8iVFJVRSI6IkZBTFNFIjtlbHNlIGlmKHZvaWQgMCE9PWsudylHPSInIitrLnc7ZWxzZXtpZih2b2lkIDA9PT1rLnYpY29udGludWU7Rz0icyI9PWsudD8iJyIray52OiIiK2sudn19eWVbeWUubGVuZ3RoXT1SKyI9''@;'; put 'put ''IitHfXJldHVybiB5ZX1mdW5jdGlvbiBWYihTLFIsayl7dmFyIEc9a3x8e30sUT0rIUcuc2tpcEhlYWRlcixvZT1TfHx7fSxnZT0wLHBlPTA7aWYob2UmJm51bGwhPUcub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgRy5vcmlnaW4pZ2U9Ry5vcmlnaW47ZWxzZXt2YXIgeWU9InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBHLm9yaWdpbj9ObyhHLm9yaWdpbik6Ry5vcmlnaW47Z2U9eWUucixwZT15ZS5jfXZhciBQZSxOZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7ImMiOjAsICJyIjowfX0nKTtpZihOZS5lLmM9cGUsTmUuZS5yPWdlK1IubGVuZ3RoLTErUSxvZVsiIXJl''@;'; put 'put ''ZiJdKXt2YXIgWWU9b28ob2VbIiFyZWYiXSk7TmUuZS5jPU1hdGgubWF4KE5lLmUuYyxZZS5lLmMpLE5lLmUucj1NYXRoLm1heChOZS5lLnIsWWUuZS5yKSwtMT09Z2UmJihOZS5lLnI9KGdlPVllLmUucisxKStSLmxlbmd0aC0xK1EpfWVsc2UtMT09Z2UmJihnZT0wLE5lLmUucj1SLmxlbmd0''@;'; put 'put ''aC0xK1EpO3ZhciBldD1HLmhlYWRlcnx8W10sY3Q9MDtSLmZvckVhY2goZnVuY3Rpb24oYXQsYnQpe1JlKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKGp0KXstMT09KGN0PWV0LmluZGV4T2YoanQpKSYmKGV0W2N0PWV0Lmxlbmd0aF09anQpO3ZhciBrdD1hdFtqdF0sT3Q9InoiLEt0PSIiLFRuPXFp''@;'; put 'put ''KHtjOnBlK2N0LHI6Z2UrYnQrUX0pO2lmKFBlPWp1LnNoZWV0X2dldF9jZWxsKG9lLFRuKSwha3R8fCJvYmplY3QiIT10eXBlb2Yga3R8fGt0IGluc3RhbmNlb2YgRGF0ZSl7aWYoIm51bWJlciI9PXR5cGVvZiBrdD9PdD0ibiI6ImJvb2xlYW4iPT10eXBlb2Yga3Q/T3Q9ImIiOiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2Yga3Q/T3Q9InMiOmt0IGluc3RhbmNlb2YgRGF0ZT8oT3Q9ImQiLEcuY2VsbERhdGVzfHwoT3Q9Im4iLGt0PVFlKGt0KSksS3Q9UGUueiYmQS5pc19kYXRlKFBlLnopP1BlLno6Ry5kYXRlTkZ8fEEuX3RhYmxlWzE0XSk6bnVsbD09PWt0JiZHLm51bGxFcnJvciYmKE90PSJlIixr''@;'; put 'put ''dD0wKSxQZT8oUGUudD1PdCxQZS52PWt0LGRlbGV0ZSBQZS53LGRlbGV0ZSBQZS5SLEt0JiYoUGUuej1LdCkpOm9lW1RuXT1QZT17dDpPdCx2Omt0fSxLdCYmKFBlLno9S3QpLFBlJiZQZS5oKXRyeXtpZihQZS5SPW1kLmh0bWxfdG9fcnMoUGUuaCksIVBlLnYpe1BlLnY9IiI7Zm9yKHZhciBy''@;'; put 'put ''cj0wO3JyPFBlLlIubGVuZ3RoOysrcnIpUGUudis9UGUuUltycl0udnx8IiJ9fWNhdGNoe319ZWxzZSBvZVtUbl09a3R9KX0pLE5lLmUuYz1NYXRoLm1heChOZS5lLmMscGUrZXQubGVuZ3RoLTEpO3ZhciBFdD1qaShnZSk7aWYoUSlmb3IoY3Q9MDtjdDxldC5sZW5ndGg7KytjdClvZVtUYShj''@;'; put 'put ''dCtwZSkrRXRdPXt0OiJzIix2OmV0W2N0XX07cmV0dXJuIG9lWyIhcmVmIl09cmEoTmUpLG9lfXZhciBqdT17ZW5jb2RlX2NvbDpUYSxlbmNvZGVfcm93OmppLGVuY29kZV9jZWxsOnFpLGVuY29kZV9yYW5nZTpyYSxkZWNvZGVfY29sOkNhLGRlY29kZV9yb3c6X28sc3BsaXRfY2VsbDpmdW5j''@;'; put 'put ''dGlvbiAkMChTKXtyZXR1cm4gUy5yZXBsYWNlKC8oXCQ/W0EtWl0qKShcJD9cZCopLywiJDEsJDIiKS5zcGxpdCgiLCIpfSxkZWNvZGVfY2VsbDpObyxkZWNvZGVfcmFuZ2U6TXMsZm9ybWF0X2NlbGw6X2wsZ2V0X2Zvcm11bGFlOmFNLG1ha2VfY3N2OkMwLG1ha2VfanNvbjpLNCxtYWtlX2Zv''@;'; put 'put ''cm11bGFlOmFNLGh0bWxfdG9fcnM6bWQuaHRtbF90b19ycyxzaGVldF9hZGRfYW9hOmY0LHNoZWV0X2FkZF9qc29uOlZiLHNoZWV0X2FkZF9kb206RGIsYW9hX3RvX3NoZWV0OnA0LGpzb25fdG9fc2hlZXQ6ZnVuY3Rpb24gakkoUyxSKXtyZXR1cm4gVmIobnVsbCxTLFIpfSx0YWJsZV90b19z''@;'; put 'put ''aGVldDpqeix0YWJsZV90b19ib29rOmZ1bmN0aW9uIHp6KFMsUil7cmV0dXJuIHRoKGp6KFMsUiksUil9LHNoZWV0X3RvX2NzdjpDMCxzaGVldF90b190eHQ6Qkksc2hlZXRfdG9fanNvbjpLNCxzaGVldF90b19odG1sOm1kLmZyb21fc2hlZXQsc2hlZXRfdG9fZm9ybXVsYWU6YU0sc2hlZXRf''@;'; put 'put ''dG9fcm93X29iamVjdF9hcnJheTpLNH07ZnVuY3Rpb24gekkoUyxSLGssRyxRKXt2YXIgb2U7aWYoUy5zdHlsZSYmIShTLl9yYW5nZSYmKG9lPSJzdHJpbmciPT10eXBlb2YgUy5fcmFuZ2U/dy51dGlscy5kZWNvZGVfcmFuZ2UoUy5fcmFuZ2UpOlMuX3JhbmdlLGsuYz5vZS5lLmN8fGsuYzxv''@;'; put 'put ''ZS5zLmN8fGsucj5vZS5lLnJ8fGsucjxvZS5zLnIpKSYmb2Upe3ZhciBnZT1TLnN0eWxlLnN0eWxlO2lmKGdlKXtnZS53aG9sZVRhYmxlJiZqdS5hcHBseV9zdHlsZV9kZWx0YShHLGdlLndob2xlVGFibGUpO2U6aWYoZ2UuaGVhZGVyUm93KWlmKFEpe2lmKGsuciE9b2Uucy5yKWJyZWFrIGU7''@;'; put 'put ''V3QoUy5zdHlsZS5jb2xoZWFkKXx8anUuYXBwbHlfc3R5bGVfZGVsdGEoRyxnZS5oZWFkZXJSb3cpfWVsc2V7aWYoay5yIT1vZS5zLnIpYnJlYWsgZTtXdChTLmhlYWRlcil8fGp1LmFwcGx5X3N0eWxlX2RlbHRhKEcsZ2UuaGVhZGVyUm93KX19fX1qdS50ZXN0X3Bhc3N3b3JkPWZ1bmN0aW9u''@;'; put 'put ''IEt6KFMsUil7dmFyIGs9QnVmZmVyLmZyb20oUy5zYWx0LCJiYXNlNjQiKSxHPVMuYWxnbyxRPW1jKEJ1ZmZlci5jb25jYXQoW2ssQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxSKSldKSxHKSxvZT1CdWZmZXIuYWxsb2MoNCk7bW4ob2UsMCk7Zm9yKHZhciBnZT0wO2dl''@;'; put 'put ''PFMuc3BpbjsrK2dlKW9lLmw9MCxvZS53cml0ZV9zaGlmdCg0LGdlKSxRPW1jKEJ1ZmZlci5jb25jYXQoW1Esb2VdKSxHKTt2YXIgcGU9QnVmZmVyLmZyb20oUy5oYXNoLCJiYXNlNjQiKTtyZXR1cm4gMD09US5jb21wYXJlKHBlKX0sanUuaGFzaF9wYXNzd29yZD1mdW5jdGlvbiBJYihTKXt2''@;'; put 'put ''YXIgUj17YWxnbzoiU0hBLTUxMiIsc2FsdDoiVTJobFpYUktVeTVqYjIwdmVHeHplQT09IixzcGluOjFlM30saz1CdWZmZXIuZnJvbShSLnNhbHQsImJhc2U2NCIpLEc9Ui5hbGdvLFE9bWMoQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMp''@;'; put 'put ''KV0pLEcpLG9lPUJ1ZmZlci5hbGxvYyg0KTttbihvZSwwKTtmb3IodmFyIGdlPTA7Z2U8Ui5zcGluOysrZ2Upb2UubD0wLG9lLndyaXRlX3NoaWZ0KDQsZ2UpLFE9bWMoQnVmZmVyLmNvbmNhdChbUSxvZV0pLEcpO3JldHVybiBSLmhhc2g9US50b1N0cmluZygiYmFzZTY0IiksUn0sanUuc2hl''@;'; put 'put ''ZXRfc2V0X3JhbmdlX3N0eWxlPWZ1bmN0aW9uKFMsUixrKXtpZihrKXt2YXIgRz0ic3RyaW5nIj09dHlwZW9mIFI/b28oUik6UjtudWxsIT1HLnImJm51bGwhPUcuYyYmKEc9e3M6RyxlOkd9KTt2YXIgcGUsUT1HLnMucixvZT0wLGdlPSIiLHllPU1zKFNbIiFyZWYiXXx8IkExIik7eWUucy5y''@;'; put 'put ''Pkcucy5yJiYoeWUucy5yPUcucy5yKSx5ZS5zLmM+Ry5zLmMmJih5ZS5zLmM9Ry5zLmMpLHllLmUucjxHLmUuciYmKHllLmUucj1HLmUucikseWUuZS5jPEcuZS5jJiYoeWUuZS5jPUcuZS5jKSxTWyIhcmVmIl09cmEoeWUpO2Zvcih2YXIgTmU9QXJyYXkuaXNBcnJheShTKTtRPD1HLmUucjsr''@;'; put 'put ''K1EpZm9yKG9lPUcucy5jO29lPD1HLmUuYzsrK29lKU5lPyhTW1FdfHwoU1tRXT1bXSksU1tRXVtvZV18fChTW1FdW29lXT17dDoieiJ9KSxwZT1TW1FdW29lXSk6KFNbZ2U9cWkoe3I6USxjOm9lfSldfHwoU1tnZV09e3Q6InoifSkscGU9U1tnZV0pLHBlLnN8fChwZS5zPXt9KSxPYmplY3Qu''@;'; put 'put ''a2V5cyhrKS5mb3JFYWNoKFBlKSxwZS5zLnBhdHRlcm5UeXBlJiYhcGUucy5mZ0NvbG9yJiYoZGVsZXRlIHBlLnMucGF0dGVyblR5cGUsZGVsZXRlIHBlLnMuYmdDb2xvciksKHBlLnMuZmdDb2xvcnx8cGUucy5iZ0NvbG9yKSYmIm5vbmUiPT0ocGUucy5wYXR0ZXJuVHlwZXx8Im5vbmUiKSYm''@;'; put 'put ''KHBlLnMucGF0dGVyblR5cGU9InNvbGlkIik7aWYoUT1HLnMucixrLnRvcHx8bnVsbD09PWsudG9wKWZvcihvZT1HLnMuYztvZTw9Ry5lLmM7KytvZSl7aWYoTmUpe2lmKCFTW1FdKWNvbnRpbnVlO3BlPVNbUV1bb2VdfWVsc2UgZ2U9cWkoe3I6USxjOm9lfSkscGU9U1tnZV07cGUmJihudWxs''@;'; put 'put ''PT09ay50b3A/ZGVsZXRlIHBlLnMudG9wOnBlLnMudG9wPXF0KGsudG9wKSl9aWYoUT1HLmUucixrLmJvdHRvbXx8bnVsbD09PWsuYm90dG9tKWZvcihvZT1HLnMuYztvZTw9Ry5lLmM7KytvZSl7aWYoTmUpe2lmKCFTW1FdKWNvbnRpbnVlO3BlPVNbUV1bb2VdfWVsc2UgZ2U9cWkoe3I6USxj''@;'; put 'put ''Om9lfSkscGU9U1tnZV07cGUmJihudWxsPT09ay5ib3R0b20/ZGVsZXRlIHBlLnMuYm90dG9tOnBlLnMuYm90dG9tPXF0KGsuYm90dG9tKSl9aWYob2U9Ry5zLmMsay5sZWZ0fHxudWxsPT09ay5sZWZ0KWZvcihRPUcucy5yO1E8PUcuZS5yOysrUSl7aWYoTmUpe2lmKCFTW1FdKWNvbnRpbnVl''@;'; put 'put ''O3BlPVNbUV1bb2VdfWVsc2UgZ2U9cWkoe3I6USxjOm9lfSkscGU9U1tnZV07cGUmJihudWxsPT09ay5sZWZ0P2RlbGV0ZSBwZS5zLmxlZnQ6cGUucy5sZWZ0PXF0KGsubGVmdCkpfWlmKG9lPUcuZS5jLGsucmlnaHR8fG51bGw9PT1rLnJpZ2h0KWZvcihRPUcucy5yO1E8PUcuZS5yOysrUSl7''@;'; put 'put ''aWYoTmUpe2lmKCFTW1FdKWNvbnRpbnVlO3BlPVNbUV1bb2VdfWVsc2UgZ2U9cWkoe3I6USxjOm9lfSkscGU9U1tnZV07cGUmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PXF0KGsucmlnaHQpKX19ZnVuY3Rpb24gUGUoWWUpe2lmKCJ0b3AiIT1ZZSYmImJv''@;'; put 'put ''dHRvbSIhPVllJiYibGVmdCIhPVllJiYicmlnaHQiIT1ZZSl7aWYoInoiPT1ZZSlyZXR1cm4gdm9pZChwZS56PWsueik7aWYoImFsaWdubWVudCI9PVllKXJldHVybiB2b2lkKHBlLnNbWWVdP09iamVjdC5rZXlzKGtbWWVdKS5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtwZS5zW1llXVtldF09a1tZ''@;'; put 'put ''ZV1bZXRdfSk6cGUuc1tZZV09cXQoa1tZZV0pKTtpZigiaW5jb2wiPT1ZZSlyZXR1cm4gb2U+Ry5zLmMmJihudWxsPT09ay5sZWZ0P2RlbGV0ZSBwZS5zLmxlZnQ6cGUucy5sZWZ0PSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSx2b2lkKG9lPEcuZS5jJiYobnVsbD09''@;'; put 'put ''PWsucmlnaHQ/ZGVsZXRlIHBlLnMucmlnaHQ6cGUucy5yaWdodD0ib2JqZWN0Ij09dHlwZW9mIGtbWWVdP3F0KGtbWWVdKTprW1llXSkpO2lmKCJpbnJvdyI9PVllKXJldHVybiBRPkcucy5yJiYobnVsbD09PWsudG9wP2RlbGV0ZSBwZS5zLnRvcDpwZS5zLnRvcD0ib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IGtbWWVdP3F0KGtbWWVdKTprW1llXSksdm9pZChRPEcuZS5yJiYobnVsbD09PWsuYm90dG9tP2RlbGV0ZSBwZS5zLmJvdHRvbTpwZS5zLmJvdHRvbT0ib2JqZWN0Ij09dHlwZW9mIGtbWWVdP3F0KGtbWWVdKTprW1llXSkpO251bGw9PT1rW1llXT9kZWxldGUgcGUuc1tZZV06cGUuc1tZZV09''@;'; put 'put ''a1tZZV0mJkFycmF5LmlzQXJyYXkoa1tZZV0pP2tbWWVdLnNsaWNlKCkubWFwKGZ1bmN0aW9uKGV0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGV0P3F0KGV0KTpldH0pOiJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdfX19LGp1LmFwcGx5X3N0eWxlX2RlbHRhPWZ1bmN0''@;'; put 'put ''aW9uKFMsUil7WyJzeiIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2UiLCJuYW1lIiwidmFsaWduIl0uZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1rOyJiZ0NvbG9yIj09az9HPSJmZ0NvbG9yIjoiZmdDb2xvciI9PWsmJihHPSJiZ0NvbG9yIiksT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsaykmJihudWxsPT09UltrXT9kZWxldGUgU1tHXTpudWxsIT1SW2tdJiYoU1tHXT1SW2tdKSl9KSxbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImFsaWdubWVudCIsInByb3RlY3Rpb24iLCJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0u''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihrKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixrKSYmKG51bGw9PT1SW2tdP2RlbGV0ZSBTW2tdOm51bGwhPVJba10mJihTW2tdPXF0KFJba10pKSl9KX0sanUuZ2V0X2NvbXB1dGVkX3N0eWxlPWZ1bmN0aW9uKFMsUil7InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBSJiYoUj13LnV0aWxzLmRlY29kZV9jZWxsKFIpKTt2YXIgaz1BcnJheS5pc0FycmF5KFMpPyhTW1Iucl18fFtdKVtSLmNdOlNbdy51dGlscy5lbmNvZGVfY2VsbChSKV0sRz1xdChrJiZrLnN8fHt9KTtyZXR1cm4gU1siIXRhYmxlcyJdJiZTWyIhdGFibGVzIl0uZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihRKXt6SShRLDAsUixHKX0pLFNbIiFwaXZvdHMiXSYmU1siIXBpdm90cyJdLmZvckVhY2goZnVuY3Rpb24oUSl7ekkoUSwwLFIsRywhMCl9KSxHfTt2YXIgamI9e307anUuY2VsbF9hcnJheV90b19jc3Zfcm93PWZ1bmN0aW9uKFMsUil7dmFyIGs9Uj8/e30sRz12b2lkIDAhPT1r''@;'; put 'put ''LkZTP2suRlM6IiwiLFE9Ry5jaGFyQ29kZUF0KDApLG9lPXZvaWQgMCE9PWsuUlM/ay5SUzoiXG4iLGdlPW9lLmNoYXJDb2RlQXQoMCkscGU9amJbR118fChqYltHXT1uZXcgUmVnRXhwKCgifCI9PUc/IlxcfCI6RykrIiskIikpLHllPWZ1bmN0aW9uIEJiKFMsUixrLEcsUSl7Zm9yKHZhciBv''@;'; put 'put ''ZT0hMCxnZT1bXSxwZT0iIix5ZT0wO3llPD1TLmxlbmd0aC0xOysreWUpe3ZhciBQZT1TW3llXTtpZihudWxsPT1QZSlwZT0iIjtlbHNlIGlmKG51bGwhPVBlLnYpe29lPSExLHBlPSIiK19sKFBlLG51bGwsUSk7Zm9yKHZhciBOZT0wLFllPTA7TmUhPT1wZS5sZW5ndGg7KytOZSlpZigoWWU9''@;'; put 'put ''cGUuY2hhckNvZGVBdChOZSkpPT09Unx8WWU9PT1rfHwzND09PVllKXtwZT0nIicrcGUucmVwbGFjZShfMiwnIiInKSsnIic7YnJlYWt9IklEIj09cGUmJihwZT0nIklEIicpfWVsc2UgbnVsbD09UGUuZnx8UGUuRj9wZT0iIjoob2U9ITEsKHBlPSI9IitQZS5mKS5pbmRleE9mKCIsIik+PTAm''@;'; put 'put ''JihwZT0nIicrcGUucmVwbGFjZShfMiwnIiInKSsnIicpKTtnZS5wdXNoKHBlKX1yZXR1cm4hMT09PVEuYmxhbmtyb3dzJiZvZT9udWxsOmdlLmpvaW4oRyl9KFMsUSxnZSxHLGspO3JldHVybiBrLnN0cmlwJiYoeWU9eWUucmVwbGFjZShwZSwiIikpLHllK29lfSxmdW5jdGlvbihTKXtmdW5j''@;'; put 'put ''dGlvbiBrKG9lLGdlLHBlKXtyZXR1cm4gbnVsbCE9b2VbZ2VdP29lW2dlXTpvZVtnZV09cGV9ZnVuY3Rpb24gRyhvZSxnZSxwZSl7aWYoInN0cmluZyI9PXR5cGVvZiBnZSl7aWYoQXJyYXkuaXNBcnJheShvZSkpe3ZhciB5ZT1ObyhnZSk7cmV0dXJuIG9lW3llLnJdfHwob2VbeWUucl09W10p''@;'; put 'put ''LG9lW3llLnJdW3llLmNdfHwob2VbeWUucl1beWUuY109e3Q6InoifSl9cmV0dXJuIG9lW2dlXXx8KG9lW2dlXT17dDoieiJ9KX1yZXR1cm4gRyhvZSxxaSgibnVtYmVyIiE9dHlwZW9mIGdlP2dlOntyOmdlLGM6cGV8fDB9KSl9Uy5jb25zdHM9Uy5jb25zdHN8fHt9LFMuc2hlZXRfZ2V0X2Nl''@;'; put 'put ''bGw9RyxTLmJvb2tfbmV3PWZ1bmN0aW9uKCl7cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sUy5ib29rX2FwcGVuZF9zaGVldD1mdW5jdGlvbihvZSxnZSxwZSl7aWYoIXBlKWZvcih2YXIgeWU9MTt5ZTw9NjU1MzUmJi0xIT1vZS5TaGVldE5hbWVzLmluZGV4T2YocGU9IlNoZWV0''@;'; put 'put ''Iit5ZSk7Kyt5ZSk7aWYoeWIocGUpLG9lLlNoZWV0TmFtZXMuaW5kZXhPZihwZSk+PTApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc2hlZXQgd2l0aCBuYW1lIHwiK3BlKyJ8IGFscmVhZHkgZXhpc3RzISIpO29lLlNoZWV0TmFtZXMucHVzaChwZSksb2UuU2hlZXRzW3BlXT1nZX0sUy5ib29rX3Nl''@;'; put 'put ''dF9zaGVldF92aXNpYmlsaXR5PWZ1bmN0aW9uKG9lLGdlLHBlKXtrKG9lLCJXb3JrYm9vayIse30pLGsob2UuV29ya2Jvb2ssIlNoZWV0cyIsW10pO3ZhciB5ZT1mdW5jdGlvbiBRKG9lLGdlKXtpZigibnVtYmVyIj09dHlwZW9mIGdlKXtpZihnZT49MCYmb2UuU2hlZXROYW1lcy5sZW5ndGg+''@;'; put 'put ''Z2UpcmV0dXJuIGdlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgIyAiK2dlKX1pZigic3RyaW5nIj09dHlwZW9mIGdlKXt2YXIgcGU9b2UuU2hlZXROYW1lcy5pbmRleE9mKGdlKTtpZihwZT4tMSlyZXR1cm4gcGU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVl''@;'; put 'put ''dCBuYW1lIHwiK2dlKyJ8Iil9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCB8IitnZSsifCIpfShvZSxnZSk7c3dpdGNoKGsob2UuV29ya2Jvb2suU2hlZXRzLHllLHt9KSxwZSl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJh''@;'; put 'put ''ZCBzaGVldCB2aXNpYmlsaXR5IHNldHRpbmcgIitwZSl9b2UuV29ya2Jvb2suU2hlZXRzW3llXS5IaWRkZW49cGV9LGZ1bmN0aW9uIFIob2Upe29lLmZvckVhY2goZnVuY3Rpb24oZ2Upe1MuY29uc3RzW2dlWzBdXT1nZVsxXX0pfShbWyJTSEVFVF9WSVNJQkxFIiwwXSxbIlNIRUVUX0hJRERF''@;'; put 'put ''TiIsMV0sWyJTSEVFVF9WRVJZX0hJRERFTiIsMl1dKSxTLmNlbGxfc2V0X251bWJlcl9mb3JtYXQ9ZnVuY3Rpb24ob2UsZ2Upe3JldHVybiBvZS56PWdlLG9lfSxTLmNlbGxfc2V0X2h5cGVybGluaz1mdW5jdGlvbihvZSxnZSxwZSl7cmV0dXJuIGdlPyhvZS5sPXtUYXJnZXQ6Z2V9LHBlJiYo''@;'; put 'put ''b2UubC5Ub29sdGlwPXBlKSxvZS5zfHwob2Uucz17fSksb2Uucy5jb2xvcj17dGhlbWU6MTB9KTooZGVsZXRlIG9lLmwsb2UucyYmb2Uucy5jb2xvciYmMTA9PW9lLnMuY29sb3IudGhlbWUmJmRlbGV0ZSBvZS5zLmNvbG9yKSxvZX0sUy5jZWxsX3NldF9pbnRlcm5hbF9saW5rPWZ1bmN0aW9u''@;'; put 'put ''KG9lLGdlLHBlKXtyZXR1cm4gUy5jZWxsX3NldF9oeXBlcmxpbmsob2UsIiMiK2dlLHBlKX0sUy5jZWxsX2FkZF9jb21tZW50PWZ1bmN0aW9uKG9lLGdlLHBlKXtvZS5jfHwob2UuYz1bXSksb2UuYy5wdXNoKHt0OmdlLGE6cGV8fCJTaGVldEpTIn0pfSxTLnNoZWV0X3NldF9hcnJheV9mb3Jt''@;'; put 'put ''dWxhPWZ1bmN0aW9uKG9lLGdlLHBlKXtmb3IodmFyIHllPSJzdHJpbmciIT10eXBlb2YgZ2U/Z2U6b28oZ2UpLFBlPSJzdHJpbmciPT10eXBlb2YgZ2U/Z2U6cmEoZ2UpLE5lPXllLnMucjtOZTw9eWUuZS5yOysrTmUpZm9yKHZhciBZZT15ZS5zLmM7WWU8PXllLmUuYzsrK1llKXt2YXIgZXQ9''@;'; put 'put ''RyhvZSxOZSxZZSk7ZXQudD0ibiIsZXQuRj1QZSxkZWxldGUgZXQudixOZT09eWUucy5yJiZZZT09eWUucy5jJiYoZXQuZj1wZSl9cmV0dXJuIG9lfX0oanUpLFRlJiZmdW5jdGlvbigpe3ZhciBTPXkoNzA0NSkuUmVhZGFibGU7dy5zdHJlYW09e3RvX2pzb246ZnVuY3Rpb24oUSxvZSl7dmFy''@;'; put 'put ''IGdlPVMoe29iamVjdE1vZGU6ITB9KTtpZihudWxsPT1RfHxudWxsPT1RWyIhcmVmIl0pcmV0dXJuIGdlLnB1c2gobnVsbCksZ2U7dmFyIHBlPXt0OiJuIix2OjB9LHllPTAsUGU9MSxOZT1bXSxZZT0wLGV0PSIiLGN0PXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sRXQ9b2V8fHt9LGF0PW51''@;'; put 'put ''bGwhPUV0LnJhbmdlP0V0LnJhbmdlOlFbIiFyZWYiXTtzd2l0Y2goMT09PUV0LmhlYWRlcj95ZT0xOiJBIj09PUV0LmhlYWRlcj95ZT0yOkFycmF5LmlzQXJyYXkoRXQuaGVhZGVyKSYmKHllPTMpLHR5cGVvZiBhdCl7Y2FzZSJzdHJpbmciOmN0PW9vKGF0KTticmVhaztjYXNlIm51bWJlciI6''@;'; put 'put ''KGN0PW9vKFFbIiFyZWYiXSkpLnMucj1hdDticmVhaztkZWZhdWx0OmN0PWF0fXllPjAmJihQZT0wKTt2YXIgYnQ9amkoY3Qucy5yKSxqdD1bXSxrdD0wLE90PUFycmF5LmlzQXJyYXkoUSksS3Q9Y3Qucy5yLFRuPTAscnI9MDtmb3IoT3QmJiFRW0t0XSYmKFFbS3RdPVtdKSxUbj1jdC5zLmM7''@;'; put 'put ''VG48PWN0LmUuYzsrK1RuKXN3aXRjaChqdFtUbl09VGEoVG4pLHBlPU90P1FbS3RdW1RuXTpRW2p0W1RuXStidF0seWUpe2Nhc2UgMTpOZVtUbl09VG4tY3Qucy5jO2JyZWFrO2Nhc2UgMjpOZVtUbl09anRbVG5dO2JyZWFrO2Nhc2UgMzpOZVtUbl09RXQuaGVhZGVyW1RuLWN0LnMuY107YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpmb3IobnVsbD09cGUmJihwZT17dzoiX19FTVBUWSIsdDoicyJ9KSxldD1ZZT1fbChwZSxudWxsLEV0KSxrdD0wLHJyPTA7cnI8TmUubGVuZ3RoOysrcnIpTmVbcnJdPT1ldCYmKGV0PVllKyJfIisgKytrdCk7TmVbVG5dPWV0fXJldHVybiBLdD1jdC5zLnIrUGUsZ2UuX3Jl''@;'; put 'put ''YWQ9ZnVuY3Rpb24oKXtpZihLdD5jdC5lLnIpcmV0dXJuIGdlLnB1c2gobnVsbCk7Zm9yKDtLdDw9Y3QuZS5yOyl7dmFyIFNuPWlNKFEsY3QsS3QsanQseWUsTmUsT3QsRXQpO2lmKCsrS3QsITE9PT1Tbi5pc2VtcHR5fHwoMT09PXllPyExIT09RXQuYmxhbmtyb3dzOkV0LmJsYW5rcm93cykp''@;'; put 'put ''e2dlLnB1c2goU24ucm93KTticmVha319fSxnZX0sdG9faHRtbDpmdW5jdGlvbihRLG9lKXt2YXIgZ2U9UygpLHBlPW9lfHx7fSxQZT1udWxsIT1wZS5mb290ZXI/cGUuZm9vdGVyOm1kLkVORDtnZS5wdXNoKG51bGwhPXBlLmhlYWRlcj9wZS5oZWFkZXI6bWQuQkVHSU4pO3ZhciBOZT1NcyhR''@;'; put 'put ''WyIhcmVmIl0pO3BlLmRlbnNlPUFycmF5LmlzQXJyYXkoUSksZ2UucHVzaChtZC5fcHJlYW1ibGUoUSxOZSxwZSkpO3ZhciBZZT1OZS5zLnIsZXQ9ITEsY3Q9W107cmV0dXJuIGdlLl9yZWFkPWZ1bmN0aW9uKCl7aWYoWWU+TmUuZS5yKXJldHVybiBldHx8KGV0PSEwLGdlLnB1c2goIjwvdGFi''@;'; put 'put ''bGU+IitQZSkpLGdlLnB1c2gobnVsbCk7Zm9yKDtZZTw9TmUuZS5yOyl7Z2UucHVzaChtZC5fcm93KFEsTmUsWWUscGUsY3QsIiIpKSwrK1llO2JyZWFrfX0sZ2V9LHRvX2NzdjpmdW5jdGlvbihRLG9lKXt2YXIgZ2U9UygpLHBlPW9lPz97fTtpZihudWxsPT1RfHxudWxsPT1RWyIhcmVmIl0p''@;'; put 'put ''cmV0dXJuIGdlLnB1c2gobnVsbCksZ2U7dmFyIHllPW9vKFFbIiFyZWYiXSksUGU9dm9pZCAwIT09cGUuRlM/cGUuRlM6IiwiLE5lPVBlLmNoYXJDb2RlQXQoMCksWWU9dm9pZCAwIT09cGUuUlM/cGUuUlM6IlxuIixldD1ZZS5jaGFyQ29kZUF0KDApLGN0PW5ldyBSZWdFeHAoKCJ8Ij09UGU/''@;'; put 'put ''IlxcfCI6UGUpKyIrJCIpLEV0PSIiLGF0PVtdO3BlLmRlbnNlPUFycmF5LmlzQXJyYXkoUSk7Zm9yKHZhciBidD1wZS5za2lwSGlkZGVuJiZRWyIhY29scyJdfHxbXSxqdD1wZS5za2lwSGlkZGVuJiZRWyIhcm93cyJdfHxbXSxrdD15ZS5zLmM7a3Q8PXllLmUuYzsrK2t0KShidFtrdF18fHt9''@;'; put 'put ''KS5oaWRkZW58fChhdFtrdF09VGEoa3QpKTt2YXIgT3Q9eWUucy5yLEt0PSExO3JldHVybiBnZS5fcmVhZD1mdW5jdGlvbigpe2lmKCFLdClyZXR1cm4gS3Q9ITAsZ2UucHVzaCgiXHVmZWZmIik7Zm9yKDtPdDw9eWUuZS5yOylpZigrK090LCEoanRbT3QtMV18fHt9KS5oaWRkZW4mJm51bGwh''@;'; put 'put ''PShFdD1WSShRLHllLE90LTEsYXQsTmUsZXQsUGUscGUpKSl7cGUuc3RyaXAmJihFdD1FdC5yZXBsYWNlKGN0LCIiKSksZ2UucHVzaChFdCtZZSk7YnJlYWt9cmV0dXJuIE90PnllLmUucj9nZS5wdXNoKG51bGwpOnZvaWQgMH0sZ2V9fX0oKSx3LnBhcnNlX3hsc2NmYj0kUyx3LnBhcnNlX3pp''@;'; put 'put ''cD1ycCx3LnJlYWQ9JGcsdy5yZWFkRmlsZT1rYyx3LnJlYWRGaWxlU3luYz1rYyx3LndyaXRlPU44LHcud3JpdGVGaWxlPVY4LHcud3JpdGVGaWxlU3luYz1WOCx3LndyaXRlRmlsZUFzeW5jPWZ1bmN0aW9uIHJNKFMsUixrLEcpe3ZhciBRPWt8fHt9O1EudHlwZT0iZmlsZSIsUS5maWxlPVMs''@;'; put 'put ''bk0oUSksUS50eXBlPSJidWZmZXIiO3ZhciBvZT1HO3JldHVybiBvZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwob2U9ayksWGUud3JpdGVGaWxlKFMsTjgoUixRKSxvZSl9LHcuc2V0X2RhdGVfc3R5bGU9ZnVuY3Rpb24gRHQoUyl7c3dpdGNoKFMpe2Nhc2UgMDp5dCgpO2JyZWFrO2Nhc2UgMToh''@;'; put 'put ''ZnVuY3Rpb24gTXQoKXt2YXIgUz1uZXcgRGF0ZTtudD1fdC5nZXRUaW1lKCkrNmU0KihTLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7dmFyIFI9Uy5nZXRUaW1lem9uZU9mZnNldCgpO1FlPWZ1bmN0aW9uKEcsUSl7dmFyIG9lPUcuZ2V0VGltZSgpO3JldHVy''@;'; put 'put ''biBRJiYob2UtPTEyNjMxNjhlNSksKG9lLShfdC5nZXRUaW1lKCkrNmU0KihHLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX0sdW49ZnVuY3Rpb24oRyl7dmFyIFE9bmV3IERhdGU7cmV0dXJuIFEuc2V0VGltZSgyNCpHKjYwKjYwKjFlMytudCks''@;'; put 'put ''US5nZXRUaW1lem9uZU9mZnNldCgpIT09UiYmUS5zZXRUaW1lKFEuZ2V0VGltZSgpKzZlNCooUS5nZXRUaW1lem9uZU9mZnNldCgpLVIpKSxRfX0oKX19LHcudXRpbHM9anUsdy5TU0Y9QSx0eXBlb2YgdmU8InUiJiYody5DRkI9dmUpfShYKX0sNDk2MDk6KHVlLFgseSk9Pnt2YXIgST1YO0ku''@;'; put 'put ''YmlnbnVtPXkoOTY4NjcpLEkuZGVmaW5lPXkoMTY2MjYpLmRlZmluZSxJLmJhc2U9eSgxNTA2NiksSS5jb25zdGFudHM9eSg0Nzc0MCksSS5kZWNvZGVycz15KDkxNTU4KSxJLmVuY29kZXJzPXkoMjI3MTQpfSwxNjYyNjoodWUsWCx5KT0+e3ZhciBJPXkoNDk2MDkpLF89eSg3MTk5Myk7ZnVu''@;'; put 'put ''Y3Rpb24gQih3LFApe3RoaXMubmFtZT13LHRoaXMuYm9keT1QLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1YLmRlZmluZT1mdW5jdGlvbihQLEYpe3JldHVybiBuZXcgQihQLEYpfSxCLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oUCl7dmFyIEY7dHJ5e0Y9eSg4''@;'; put 'put ''NjYxKS5ydW5JblRoaXNDb250ZXh0KCIoZnVuY3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoe0Y9ZnVuY3Rpb24oeil7dGhpcy5faW5pdE5hbWVkKHopfX1yZXR1cm4gXyhGLFApLEYucHJvdG90eXBlLl9pbml0TmFt''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oeil7UC5jYWxsKHRoaXMseil9LG5ldyBGKHRoaXMpfSxCLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShQPVB8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbUF09dGhpcy5fY3JlYXRlTmFtZWQo''@;'; put 'put ''SS5kZWNvZGVyc1tQXSkpLHRoaXMuZGVjb2RlcnNbUF19LEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoRikuZGVjb2RlKFAsTyl9LEIucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmVuY29kZXJz''@;'; put 'put ''Lmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmVuY29kZXJzW1BdKSksdGhpcy5lbmNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihGKS5lbmNv''@;'; put 'put ''ZGUoUCxPKX19LDk3MjkwOih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDE1MDY2KS5SZXBvcnRlcixnPXkoODM4MzgpLkJ1ZmZlcjtmdW5jdGlvbiBCKFAsRil7Xy5jYWxsKHRoaXMsRiksZy5pc0J1ZmZlcihQKT8odGhpcy5iYXNlPVAsdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1Q''@;'; put 'put ''Lmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIHcoUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1QLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHd8fChPPW5ldyB3KE8sRikpLHRoaXMubGVu''@;'; put 'put ''Z3RoKz1PLmxlbmd0aCxPfSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgUCl7aWYoISgwPD1QJiZQPD0yNTUpKXJldHVybiBGLmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFApdGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPWcuYnl0ZUxlbmd0aChQKTtlbHNle2lmKCFnLmlzQnVmZmVyKFApKXJldHVybiBGLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBQKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9UC5sZW5ndGh9fUkoQixfKSxYLnQ9QixC''@;'; put 'put ''LnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjpfLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxCLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKEYpe3ZhciBPPW5ldyBCKHRoaXMuYmFzZSk7cmV0dXJuIE8ub2Zmc2V0PUYu''@;'; put 'put ''b2Zmc2V0LE8ubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PUYub2Zmc2V0LF8ucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLEYucmVwb3J0ZXIpLE99LEIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sQi5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoRnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxCLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9u''@;'; put 'put ''KEYsTyl7aWYoISh0aGlzLm9mZnNldCtGPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoT3x8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO3ZhciB6PW5ldyBCKHRoaXMuYmFzZSk7cmV0dXJuIHouX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx6Lm9mZnNldD10aGlz''@;'; put 'put ''Lm9mZnNldCx6Lmxlbmd0aD10aGlzLm9mZnNldCtGLHRoaXMub2Zmc2V0Kz1GLHp9LEIucHJvdG90eXBlLnJhdz1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKEY/Ri5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxYLmQ9dyx3LnByb3RvdHlwZS5qb2luPWZ1bmN0''@;'; put 'put ''aW9uKEYsTyl7cmV0dXJuIEZ8fChGPW5ldyBnKHRoaXMubGVuZ3RoKSksT3x8KE89MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oeil7ei5qb2luKEYsTyksTys9ei5sZW5ndGh9KTooIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiB0aGlzLnZhbHVlP0ZbT109dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/Ri53cml0ZSh0aGlzLnZhbHVlLE8pOmcuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShGLE8pLE8rPXRoaXMubGVuZ3RoKSksRn19LDE1MDY2Oih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9WDtJLlJlcG9ydGVyPXkoODU2OTcpLmEsSS5EZWNvZGVyQnVmZmVyPXkoOTcyOTApLnQsSS5FbmNvZGVyQnVmZmVyPXkoOTcyOTApLmQsSS5Ob2RlPXkoMzQzMjApfSwzNDMyMDoodWUsWCx5KT0+e3ZhciBJPXkoMTUwNjYpLlJlcG9ydGVyLF89eSgxNTA2NikuRW5jb2RlckJ1ZmZl''@;'; put 'put ''cixnPXkoMTUwNjYpLkRlY29kZXJCdWZmZXIsQj15KDM5MjEwKSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJn''@;'; put 'put ''ZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRl''@;'; put 'put ''ZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIE8oTixMKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PUx8fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdzPW51bGwsSy5yZXZlcnNlQXJncz1udWxs''@;'; put 'put ''LEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRhaW5zPW51bGwsSy5wYXJlbnR8fChLLmNo''@;'; put 'put ''aWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dWUuZXhwb3J0cz1PO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0Iiwi''@;'; put 'put ''ZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ty5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oVyl7S1tXXT1MW1ddfSk7dmFyIFU9bmV3IHRoaXMuY29uc3RydWN0b3IoSy5wYXJlbnQpO3JldHVy''@;'; put 'put ''biBVLl9iYXNlU3RhdGU9SyxVfSxPLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBXPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBMLmNoaWxkcmVuLnB1''@;'; put 'put ''c2goVyksV1tLXS5hcHBseShXLGFyZ3VtZW50cyl9fSx0aGlzKX0sTy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO0IobnVsbD09PUsucGFyZW50KSxMLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihVKXty''@;'; put 'put ''ZXR1cm4gVS5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLEIuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LE8ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUwu''@;'; put 'put ''ZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7TD1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4hKFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVUubGVuZ3RoJiYoQihudWxsPT09Sy5jaGlsZHJl''@;'; put 'put ''biksSy5jaGlsZHJlbj1VLFUuZm9yRWFjaChmdW5jdGlvbihXKXtXLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09TC5sZW5ndGgmJihCKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1MLEsucmV2ZXJzZUFyZ3M9TC5tYXAoZnVuY3Rpb24oVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBX''@;'; put 'put ''fHxXLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBXO3ZhciBZPXt9O3JldHVybiBPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksWVtXW3FdXT1xfSksWX0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIs''@;'; put 'put ''Il9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNv''@;'; put 'put ''ZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdy5mb3JFYWNoKGZ1bmN0aW9uKE4p''@;'; put 'put ''e08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhVKSx0aGlzfX0pLE8ucHJvdG90eXBlLnVzZT1mdW5j''@;'; put 'put ''dGlvbihMKXtCKEwpO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsudXNlPUwsdGhpc30sTy5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmRlZj1mdW5j''@;'; put 'put ''dGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PUwsSy5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhw''@;'; put 'put ''bGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5pbXBsaWNpdD1MLHRoaXN9''@;'; put 'put ''LE8ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEwub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlzfSxPLnByb3RvdHlwZS5rZXk9ZnVuY3Rp''@;'; put 'put ''b24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmtleSksSy5rZXk9TCx0aGlzfSxPLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxPLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oTCl7dmFyIEs9''@;'; put 'put ''dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9TCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKEwpLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gTFtVXX0pKSx0aGlzfSxPLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9i''@;'; put 'put ''YXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPUwsdGhpc30sTy5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09VS5wYXJlbnQpcmV0dXJuIEwud3JhcFJlc3VsdChVLmNoaWxkcmVuWzBdLl9kZWNv''@;'; put 'put ''ZGUoTCxLKSk7dmFyIG5lLFc9VS5kZWZhdWx0LFk9ITAscT1udWxsO2lmKG51bGwhPT1VLmtleSYmKHE9TC5lbnRlcktleShVLmtleSkpLFUub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1VLmV4cGxpY2l0P2VlPVUuZXhwbGljaXQ6bnVsbCE9PVUuaW1wbGljaXQ/ZWU9VS5pbXBs''@;'; put 'put ''aWNpdDpudWxsIT09VS50YWcmJihlZT1VLnRhZyksbnVsbCE9PWVlfHxVLmFueSl7aWYoWT10aGlzLl9wZWVrVGFnKEwsZWUsVS5hbnkpLEwuaXNFcnJvcihZKSlyZXR1cm4gWX1lbHNle3ZhciBKPUwuc2F2ZSgpO3RyeXtudWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRh''@;'; put 'put ''ZyxMLEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspLFk9ITB9Y2F0Y2h7WT0hMX1MLnJlc3RvcmUoSil9fWlmKFUub2JqJiZZJiYobmU9TC5lbnRlck9iamVjdCgpKSxZKXtpZihudWxsIT09VS5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRhZyhMLFUuZXhwbGljaXQpO2lmKEwuaXNF''@;'; put 'put ''cnJvcihpZSkpcmV0dXJuIGllO0w9aWV9dmFyIGxlPUwub2Zmc2V0O2lmKG51bGw9PT1VLnVzZSYmbnVsbD09PVUuY2hvaWNlKXtVLmFueSYmKEo9TC5zYXZlKCkpO3ZhciBtZT10aGlzLl9kZWNvZGVUYWcoTCxudWxsIT09VS5pbXBsaWNpdD9VLmltcGxpY2l0OlUudGFnLFUuYW55KTtpZihM''@;'; put 'put ''LmlzRXJyb3IobWUpKXJldHVybiBtZTtVLmFueT9XPUwucmF3KEopOkw9bWV9aWYoSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLGxlLEwubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09VS50YWcmJksudHJhY2soTC5wYXRoKCksTC5vZmZzZXQs''@;'; put 'put ''TC5sZW5ndGgsImNvbnRlbnQiKSxVLmFueXx8KFc9bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSksTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFVLmFueSYmbnVsbD09PVUuY2hvaWNlJiZudWxsIT09VS5jaGls''@;'; put 'put ''ZHJlbiYmVS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtTZS5fZGVjb2RlKEwsSyl9KSxVLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykpe3ZhciBfZT1uZXcgZyhXKTtXPXRoaXMuX2dldFVzZShVLmNvbnRhaW5zLEwuX3JlcG9ydGVyU3RhdGUu''@;'; put 'put ''b2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gVS5vYmomJlkmJihXPUwubGVhdmVPYmplY3QobmUpKSxudWxsPT09VS5rZXl8fG51bGw9PT1XJiYhMCE9PVk/bnVsbCE9PXEmJkwuZXhpdEtleShxKTpMLmxlYXZlS2V5KHEsVS5rZXksVyksV30sTy5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9''@;'; put 'put ''ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUx8fCJzZXQiPT09TD9udWxsOiJzZXFvZiI9PT1MfHwic2V0b2YiPT09TD90aGlzLl9kZWNvZGVMaXN0KEssTCxXLmFyZ3NbMF0sVSk6L3N0ciQvLnRlc3QoTCk/dGhpcy5fZGVjb2RlU3RyKEssTCxV''@;'; put 'put ''KToib2JqaWQiPT09TCYmVy5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssVy5hcmdzWzBdLFcuYXJnc1sxXSxVKToib2JqaWQiPT09TD90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxVKToiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MP3RoaXMuX2RlY29kZVRpbWUoSyxMLFUpOiJu''@;'; put 'put ''dWxsXyI9PT1MP3RoaXMuX2RlY29kZU51bGwoSyxVKToiYm9vbCI9PT1MP3RoaXMuX2RlY29kZUJvb2woSyxVKToib2JqRGVzYyI9PT1MP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6ImludCI9PT1MfHwiZW51bSI9PT1MP3RoaXMuX2RlY29kZUludChLLFcuYXJncyYmVy5hcmdzWzBdLFUpOm51''@;'; put 'put ''bGwhPT1XLnVzZT90aGlzLl9nZXRVc2UoVy51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxVKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVS51c2VEZWNv''@;'; put 'put ''ZGVyPXRoaXMuX3VzZShMLEspLEIobnVsbD09PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFUuaW1wbGljaXQhPT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKFUudXNlRGVj''@;'; put 'put ''b2Rlcj1VLnVzZURlY29kZXIuY2xvbmUoKSxVLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1VLmltcGxpY2l0KSxVLnVzZURlY29kZXJ9LE8ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGUsVz1udWxsLFk9ITE7cmV0dXJu''@;'; put 'put ''IE9iamVjdC5rZXlzKFUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1MLnNhdmUoKSxKPVUuY2hvaWNlW3FdO3RyeXt2YXIgbmU9Si5fZGVjb2RlKEwsSyk7aWYoTC5pc0Vycm9yKG5lKSlyZXR1cm4hMTtXPXt0eXBlOnEsdmFsdWU6bmV9LFk9ITB9Y2F0Y2h7cmV0dXJuIEwucmVz''@;'; put 'put ''dG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFk/VzpMLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sTy5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBfKEwsdGhpcy5yZXBvcnRlcil9LE8ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rp''@;'; put 'put ''b24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0fHxXLmRlZmF1bHQhPT1MKXt2YXIgWT10aGlzLl9lbmNvZGVWYWx1ZShMLEssVSk7aWYodm9pZCAwIT09WSYmIXRoaXMuX3NraXBEZWZhdWx0KFksSyxVKSlyZXR1cm4gWX19LE8ucHJvdG90eXBlLl9l''@;'; put 'put ''bmNvZGVWYWx1ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLnBhcmVudClyZXR1cm4gVy5jaGlsZHJlblswXS5fZW5jb2RlKEwsS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFcub3B0aW9uYWwmJnZvaWQgMD09PUwpe2lm''@;'; put 'put ''KG51bGw9PT1XLmRlZmF1bHQpcmV0dXJuO0w9Vy5kZWZhdWx0fXZhciBZPW51bGwscT0hMTtpZihXLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7ZWxzZSBpZihXLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShMLEspO2Vsc2UgaWYoVy5jb250YWlucylZPXRoaXMuX2dl''@;'; put 'put ''dFVzZShXLmNvbnRhaW5zLFUpLl9lbmNvZGUoTCxLKSxxPSEwO2Vsc2UgaWYoVy5jaGlsZHJlbilZPVcuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGxlKXtpZigibnVsbF8iPT09bGUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIGxlLl9lbmNvZGUobnVsbCxLLEwpO2lmKG51bGw9PT1sZS5fYmFzZVN0''@;'; put 'put ''YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgbWU9Sy5lbnRlcktleShsZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBMKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3Qi''@;'; put 'put ''KTt2YXIgX2U9bGUuX2VuY29kZShMW2xlLl9iYXNlU3RhdGUua2V5XSxLLEwpO3JldHVybiBLLmxlYXZlS2V5KG1lKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9KSxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWSk7ZWxzZSBpZigic2Vxb2YiPT09Vy50YWd8''@;'; put 'put ''fCJzZXRvZiI9PT1XLnRhZyl7aWYoIVcuYXJnc3x8MSE9PVcuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitXLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXki''@;'; put 'put ''KTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTC5tYXAoZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sTCkuX2VuY29kZShsZSxLKX0sZWUpKX1l''@;'; put 'put ''bHNlIG51bGwhPT1XLnVzZT9KPXRoaXMuX2dldFVzZShXLnVzZSxVKS5fZW5jb2RlKEwsSyk6KFk9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFcudGFnLEwpLHE9ITApO2lmKCFXLmFueSYmbnVsbD09PVcuY2hvaWNlKXt2YXIgbmU9bnVsbCE9PVcuaW1wbGljaXQ/Vy5pbXBsaWNpdDpXLnRhZyxp''@;'; put 'put ''ZT1udWxsPT09Vy5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PW5lP251bGw9PT1XLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVcudXNlJiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUobmUscSxpZSxZKSl9''@;'; put 'put ''cmV0dXJuIG51bGwhPT1XLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVy5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LE8ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGUsVz1VLmNob2ljZVtMLnR5cGVdO3Jl''@;'; put 'put ''dHVybiBXfHxCKCExLEwudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFUuY2hvaWNlKSkpLFcuX2VuY29kZShMLnZhbHVlLEspfSxPLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lm''@;'; put 'put ''KC9zdHIkLy50ZXN0KEwpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTtpZigib2JqaWQiPT09TCYmVS5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxu''@;'; put 'put ''dWxsLG51bGwpO2lmKCJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxMKTtpZigibnVsbF8iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09THx8ImVudW0iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEssVS5h''@;'; put 'put ''cmdzJiZVLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5faXNO''@;'; put 'put ''dW1zdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bMC05IF0qJC8udGVzdChMKX0sTy5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChMKX19LDg1Njk3Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5Myk7''@;'; put 'put ''ZnVuY3Rpb24gXyhCKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6Qnx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBnKEIsdyl7dGhpcy5wYXRoPUIsdGhpcy5yZXRocm93KHcpfVguYT1fLF8ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odyl7cmV0dXJu''@;'; put 'put ''IHcgaW5zdGFuY2VvZiBnfSxfLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOncub2JqLHBhdGhMZW46dy5wYXRoLmxlbmd0aH19LF8ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJT''@;'; put 'put ''dGF0ZTtQLm9iaj13Lm9iaixQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy5wYXRoTGVuKX0sXy5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHcpfSxfLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHcpe3ZhciBQPXRo''@;'; put 'put ''aXMuX3JlcG9ydGVyU3RhdGU7UC5wYXRoPVAucGF0aC5zbGljZSgwLHctMSl9LF8ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHcsUCxGKXt2YXIgTz10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh3KSxudWxsIT09Ty5vYmomJihPLm9ialtQXT1GKX0sXy5wcm90b3R5cGUu''@;'; put 'put ''cGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSxfLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGUsUD13Lm9iajtyZXR1cm4gdy5vYmo9e30sUH0sXy5wcm90b3R5cGUubGVhdmVP''@;'; put 'put ''YmplY3Q9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxGPVAub2JqO3JldHVybiBQLm9iaj13LEZ9LF8ucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHcpe3ZhciBQLEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxPPXcgaW5zdGFuY2VvZiBnO2lmKFA9Tz93Om5ldyBnKEYucGF0''@;'; put 'put ''aC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KHopKyJdIn0pLmpvaW4oIiIpLHcubWVzc2FnZXx8dyx3LnN0YWNrKSwhRi5vcHRpb25zLnBhcnRpYWwpdGhyb3cgUDtyZXR1cm4gT3x8Ri5lcnJvcnMucHVzaChQKSxQfSxfLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1''@;'; put 'put ''bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIFAub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKHcpP251bGw6dyxlcnJvcnM6UC5lcnJvcnN9Ond9LEkoZyxFcnJvciksZy5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbih3KXtpZih0aGlzLm1l''@;'; put 'put ''c3NhZ2U9dysiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxnKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goUCl7dGhpcy5zdGFjaz1Q''@;'; put 'put ''LnN0YWNrfXJldHVybiB0aGlzfX0sMzYyODM6KHVlLFgseSk9Pnt2YXIgST15KDQ3NzQwKTtYLnRhZ0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sWC50YWdDbGFzc0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnQ2xhc3MpLFgudGFn''@;'; put 'put ''PXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3''@;'; put 'put ''OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMw''@;'; put 'put ''OiJibXBzdHIifSxYLnRhZ0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnKX0sNDc3NDA6KHVlLFgseSk9Pnt2YXIgST1YO0kuX3JldmVyc2U9ZnVuY3Rpb24oZyl7dmFyIEI9e307cmV0dXJuIE9iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9PXcmJih3fD0wKSxCW2dbd11d''@;'; put 'put ''PXd9KSxCfSxJLmRlcj15KDM2MjgzKX0sNTU5NDE6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNDk2MDkpLGc9Xy5iYXNlLEI9Xy5iaWdudW0sdz1fLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4s''@;'; put 'put ''dGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Zy5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4sTCl7dmFyIEs9Ti5yZWFkVUludDgoTCk7aWYoTi5pc0Vycm9yKEspKXJldHVybiBLO3ZhciBVPXcudGFnQ2xhc3NbSz4+Nl0s''@;'; put 'put ''Vz0hKDMyJkspO2lmKDMxJn5LKUsmPTMxO2Vsc2V7dmFyIFk9Sztmb3IoSz0wOyEoMTI4Jn5ZKTspe2lmKFk9Ti5yZWFkVUludDgoTCksTi5pc0Vycm9yKFkpKXJldHVybiBZO0s8PD03LEt8PTEyNyZZfX1yZXR1cm57Y2xzOlUscHJpbWl0aXZlOlcsdGFnOkssdGFnU3RyOncudGFnW0tdfX1m''@;'; put 'put ''dW5jdGlvbiB6KE4sTCxLKXt2YXIgVT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IoVSkpcmV0dXJuIFU7aWYoIUwmJjEyOD09PVUpcmV0dXJuIG51bGw7aWYoISgxMjgmVSkpcmV0dXJuIFU7dmFyIFc9MTI3JlU7aWYoVz40KXJldHVybiBOLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRv''@;'; put 'put ''byBsb25nIik7VT0wO2Zvcih2YXIgWT0wO1k8VztZKyspe1U8PD04O3ZhciBxPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihxKSlyZXR1cm4gcTtVfD1xfXJldHVybiBVfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gTCBpbnN0YW5jZW9m''@;'; put 'put ''IGcuRGVjb2RlckJ1ZmZlcnx8KEw9bmV3IGcuRGVjb2RlckJ1ZmZlcihMLEspKSx0aGlzLnRyZWUuX2RlY29kZShMLEspfSxJKEYsZy5Ob2RlKSxGLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihMLEssVSl7aWYoTC5pc0VtcHR5KCkpcmV0dXJuITE7dmFyIFc9TC5zYXZlKCksWT1PKEws''@;'; put 'put ''J0ZhaWxlZCB0byBwZWVrIHRhZzogIicrSysnIicpO3JldHVybiBMLmlzRXJyb3IoWSk/WTooTC5yZXN0b3JlKFcpLFkudGFnPT09S3x8WS50YWdTdHI9PT1LfHxZLnRhZ1N0cisib2YiPT09S3x8VSl9LEYucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPU8oTCwn''@;'; put 'put ''RmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVzt2YXIgWT16KEwsVy5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK0srJyInKTtpZihMLmlzRXJyb3IoWSkpcmV0dXJuIFk7aWYoIVUmJlcudGFnIT09SyYmVy50YWdT''@;'; put 'put ''dHIhPT1LJiZXLnRhZ1N0cisib2YiIT09SylyZXR1cm4gTC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrSysnIicpO2lmKFcucHJpbWl0aXZlfHxudWxsIT09WSlyZXR1cm4gTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJyk7dmFyIHE9TC5zYXZlKCks''@;'; put 'put ''ZWU9dGhpcy5fc2tpcFVudGlsRW5kKEwsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIEwuaXNFcnJvcihlZSk/ZWU6KFk9TC5vZmZzZXQtcS5vZmZzZXQsTC5yZXN0b3JlKHEpLEwuc2tpcChZLCdGYWlsZWQgdG8gbWF0Y2gg''@;'; put 'put ''Ym9keSBvZjogIicrSysnIicpKX0sRi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihMLEspe2Zvcig7Oyl7dmFyIFU9TyhMLEspO2lmKEwuaXNFcnJvcihVKSlyZXR1cm4gVTt2YXIgWSxXPXooTCxVLnByaW1pdGl2ZSxLKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoWT1V''@;'; put 'put ''LnByaW1pdGl2ZXx8bnVsbCE9PVc/TC5za2lwKFcpOnRoaXMuX3NraXBVbnRpbEVuZChMLEspLEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZigiZW5kIj09PVUudGFnU3RyKWJyZWFrfX0sRi5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oTCxLLFUsVyl7Zm9yKHZhciBZPVtdOyFMLmlz''@;'; put 'put ''RW1wdHkoKTspe3ZhciBxPXRoaXMuX3BlZWtUYWcoTCwiZW5kIik7aWYoTC5pc0Vycm9yKHEpKXJldHVybiBxO3ZhciBlZT1VLmRlY29kZShMLCJkZXIiLFcpO2lmKEwuaXNFcnJvcihlZSkmJnEpYnJlYWs7WS5wdXNoKGVlKX1yZXR1cm4gWX0sRi5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5j''@;'; put 'put ''dGlvbihMLEspe2lmKCJiaXRzdHIiPT09Syl7dmFyIFU9TC5yZWFkVUludDgoKTtyZXR1cm4gTC5pc0Vycm9yKFUpP1U6e3VudXNlZDpVLGRhdGE6TC5yYXcoKX19aWYoImJtcHN0ciI9PT1LKXt2YXIgVz1MLnJhdygpO2lmKFcubGVuZ3RoJTI9PTEpcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5n''@;'; put 'put ''IG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7Zm9yKHZhciBZPSIiLHE9MDtxPFcubGVuZ3RoLzI7cSsrKVkrPVN0cmluZy5mcm9tQ2hhckNvZGUoVy5yZWFkVUludDE2QkUoMipxKSk7cmV0dXJuIFl9aWYoIm51bXN0ciI9PT1LKXt2YXIgZWU9TC5yYXcoKS50b1N0''@;'; put 'put ''cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoZWUpP2VlOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09SylyZXR1cm4gTC5yYXcoKTtpZigib2JqRGVzYyI9PT1LKXJldHVybiBM''@;'; put 'put ''LnJhdygpO2lmKCJwcmludHN0ciI9PT1LKXt2YXIgSj1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKEopP0o6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3Ry''@;'; put 'put ''JC8udGVzdChLKT9MLnJhdygpLnRvU3RyaW5nKCk6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrSysiIHVuc3VwcG9ydGVkIil9LEYucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihMLEssVSl7Zm9yKHZhciBXLFk9W10scT0wOyFMLmlzRW1wdHkoKTspe3ZhciBl''@;'; put 'put ''ZT1MLnJlYWRVSW50OCgpO3E8PD03LHF8PTEyNyZlZSwxMjgmZWV8fChZLnB1c2gocSkscT0wKX1pZigxMjgmZWUmJlkucHVzaChxKSxXPVU/WTpbWVswXS80MHwwLFlbMF0lNDBdLmNvbmNhdChZLnNsaWNlKDEpKSxLKXt2YXIgaWU9S1tXLmpvaW4oIiAiKV07dm9pZCAwPT09aWUmJihpZT1L''@;'; put 'put ''W1cuam9pbigiLiIpXSksdm9pZCAwIT09aWUmJihXPWllKX1yZXR1cm4gV30sRi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2YXIgVT1MLnJhdygpLnRvU3RyaW5nKCk7aWYoImdlbnRpbWUiPT09Syl2YXIgVz0wfFUuc2xpY2UoMCw0KSxZPTB8VS5zbGljZSg0LDYpLHE9''@;'; put 'put ''MHxVLnNsaWNlKDYsOCksZWU9MHxVLnNsaWNlKDgsMTApLEo9MHxVLnNsaWNlKDEwLDEyKSxuZT0wfFUuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09SylyZXR1cm4gTC5lcnJvcigiRGVjb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO1c9MHxVLnNsaWNl''@;'; put 'put ''KDAsMiksWT0wfFUuc2xpY2UoMiw0KSxxPTB8VS5zbGljZSg0LDYpLGVlPTB8VS5zbGljZSg2LDgpLEo9MHxVLnNsaWNlKDgsMTApLG5lPTB8VS5zbGljZSgxMCwxMiksVz1XPDcwPzJlMytXOjE5MDArV31yZXR1cm4gRGF0ZS5VVEMoVyxZLTEscSxlZSxKLG5lLDApfSxGLnByb3RvdHlwZS5f''@;'; put 'put ''ZGVjb2RlTnVsbD1mdW5jdGlvbihMKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oTCl7dmFyIEs9TC5yZWFkVUludDgoKTtyZXR1cm4gTC5pc0Vycm9yKEspP0s6MCE9PUt9LEYucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oTCxLKXt2YXIgVT1M''@;'; put 'put ''LnJhdygpLFc9bmV3IEIoVSk7cmV0dXJuIEsmJihXPUtbVy50b1N0cmluZygxMCldfHxXKSxXfSxGLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoSykpLEwuX2dldERlY29kZXIoImRlciIpLnRyZWV9fSw5MTU1ODoodWUsWCx5''@;'; put 'put ''KT0+e3ZhciBJPVg7SS5kZXI9eSg1NTk0MSksSS5wZW09eSg1OTMxNil9LDU5MzE2Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDgzODM4KS5CdWZmZXIsZz15KDU1OTQxKTtmdW5jdGlvbiBCKHcpe2cuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUkoQixnKSx1ZS5leHBvcnRz''@;'; put 'put ''PUIsQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBPPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9VcHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxMPS0xLEs9LTEsVT0wO1U8Ty5sZW5ndGg7VSsr''@;'; put 'put ''KXt2YXIgVz1PW1VdLm1hdGNoKE4pO2lmKG51bGwhPT1XJiZXWzJdPT09eil7aWYoLTEhPT1MKXtpZigiRU5EIiE9PVdbMV0pYnJlYWs7Sz1VO2JyZWFrfWlmKCJCRUdJTiIhPT1XWzFdKWJyZWFrO0w9VX19aWYoLTE9PT1MfHwtMT09PUspdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBu''@;'; put 'put ''b3QgZm91bmQgZm9yOiAiK3opO3ZhciBZPU8uc2xpY2UoTCsxLEspLmpvaW4oIiIpO1kucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhZLCJiYXNlNjQiKTtyZXR1cm4gZy5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxxLEYpfX0sNzIxOTM6KHVlLFgseSk9''@;'; put 'put ''Pnt2YXIgST15KDcxOTkzKSxfPXkoODM4MzgpLkJ1ZmZlcixnPXkoNDk2MDkpLEI9Zy5iYXNlLHc9Zy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQo''@;'; put 'put ''Ti5ib2R5KX1mdW5jdGlvbiBGKE4pe0IuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjwxMD8iMCIrTjpOfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoTCxLKS5qb2luKCl9''@;'; put 'put ''LEkoRixCLk5vZGUpLEYucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oTCxLLFUsVyl7dmFyIEosWT1mdW5jdGlvbiB6KE4sTCxLLFUpe3ZhciBXO2lmKCJzZXFvZiI9PT1OP049InNlcSI6InNldG9mIj09PU4mJihOPSJzZXQiKSx3LnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShOKSlXPXcudGFnQnlOYW1lW05dO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBOfHwoMHxOKSE9PU4pcmV0dXJuIFUuZXJyb3IoIlVua25vd24gdGFnOiAiK04pO1c9Tn1yZXR1cm4gVz49MzE/VS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEx8fChX''@;'; put 'put ''fD0zMiksV3w9dy50YWdDbGFzc0J5TmFtZVtLfHwidW5pdmVyc2FsIl08PDYpfShMLEssVSx0aGlzLnJlcG9ydGVyKTtpZihXLmxlbmd0aDwxMjgpcmV0dXJuKEo9bmV3IF8oMikpWzBdPVksSlsxXT1XLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKTtmb3IodmFyIHE9''@;'; put 'put ''MSxlZT1XLmxlbmd0aDtlZT49MjU2O2VlPj49OClxKys7KEo9bmV3IF8oMitxKSlbMF09WSxKWzFdPTEyOHxxLGVlPTErcTtmb3IodmFyIG5lPVcubGVuZ3RoO25lPjA7ZWUtLSxuZT4+PTgpSltlZV09MjU1Jm5lO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihMLEspe2lmKCJiaXRzdHIiPT09SylyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxMLnVudXNlZCxMLmRhdGFdKTtpZigiYm1wc3RyIj09PUspe2Zvcih2YXIgVT1uZXcgXygyKkwubGVuZ3RoKSxXPTA7VzxMLmxlbmd0aDtX''@;'; put 'put ''KyspVS53cml0ZVVJbnQxNkJFKEwuY2hhckNvZGVBdChXKSwyKlcpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFUpfXJldHVybiJudW1zdHIiPT09Sz90aGlzLl9pc051bXN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVu''@;'; put 'put ''Y29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PUs/dGhpcy5faXNQcmludHN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmlu''@;'; put 'put ''ZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9u''@;'; put 'put ''LCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3QoSyl8fCJvYmpEZXNjIj09PUs/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5''@;'; put 'put ''cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFLKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJu''@;'; put 'put ''IHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7TD1LW0xdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgVz0wO1c8TC5sZW5ndGg7VysrKUxbV118PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KEwpKWZvcihMPUwuc2xpY2UoKSxXPTA7VzxMLmxl''@;'; put 'put ''bmd0aDtXKyspTFtXXXw9MDtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KEwpKTtpZighVSl7aWYoTFsxXT49NDApcmV0dXJuIHRoaXMu''@;'; put 'put ''cmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0wuc3BsaWNlKDAsMiw0MCpMWzBdK0xbMV0pfXZhciBZPTA7Zm9yKFc9MDtXPEwubGVuZ3RoO1crKyl7dmFyIHE9TFtXXTtmb3IoWSsrO3E+PTEyODtxPj49NylZKyt9dmFyIGVlPW5ldyBfKFkpLEo9ZWUubGVu''@;'; put 'put ''Z3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoZWVbSi0tXT0xMjcmKHE9TFtXXSk7KHE+Pj03KT4wOyllZVtKLS1dPTEyOHwxMjcmcTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9LEYucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFy''@;'; put 'put ''IFUsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5q''@;'; put 'put ''b2luKCIiKToidXRjdGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpJTEwMCksTyhXLmdldFVUQ01vbnRoKCkrMSksTyhXLmdldFVUQ0RhdGUoKSksTyhXLmdldFVUQ0hvdXJzKCkpLE8oVy5nZXRVVENNaW51dGVzKCkpLE8oVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhp''@;'; put 'put ''cy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihVLCJvY3RzdHIiKX0sRi5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEYu''@;'; put 'put ''cHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxLKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFLKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0''@;'; put 'put ''dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEwpKTtMPUtbTF19aWYoIm51bWJlciIhPXR5cGVvZiBMJiYhXy5pc0J1ZmZlcihMKSl7dmFyIFU9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JlVbMF0mJlUudW5zaGlm''@;'; put 'put ''dCgwKSxMPW5ldyBfKFUpfWlmKF8uaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9PT1MLmxlbmd0aCYmVysrO3ZhciBxPW5ldyBfKFcpO3JldHVybiBMLmNvcHkocSksMD09PUwubGVuZ3RoJiYocVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEpfWlmKEw8MTI4KXJldHVy''@;'; put 'put ''biB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLExdKTtXPTE7Zm9yKHZhciBZPUw7WT49MjU2O1k+Pj04KVcrKztmb3IoWT0ocT1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1k+PTA7WS0tKXFbWV09MjU1Jkws''@;'; put 'put ''TD4+PTg7cmV0dXJuIDEyOCZxWzBdJiZxLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgXyhxKSl9LEYucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxGLnByb3RvdHlwZS5f''@;'; put 'put ''dXNlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoSykpLEwuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEYucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihMLEssVSl7dmFyIFksVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVs''@;'; put 'put ''dClyZXR1cm4hMTt2YXIgcT1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZmZXImJihXLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVy5kZWZhdWx0LEssVSkuam9pbigpKSxxLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFk9MDtZ''@;'; put 'put ''PHEubGVuZ3RoO1krKylpZihxW1ldIT09Vy5kZWZhdWx0QnVmZmVyW1ldKXJldHVybiExO3JldHVybiEwfX0sMjI3MTQ6KHVlLFgseSk9Pnt2YXIgST1YO0kuZGVyPXkoNzIxOTMpLEkucGVtPXkoMjQ4MTYpfSwyNDgxNjoodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg3MjE5Myk7ZnVu''@;'; put 'put ''Y3Rpb24gZyhCKXtfLmNhbGwodGhpcyxCKSx0aGlzLmVuYz0icGVtIn1JKGcsXyksdWUuZXhwb3J0cz1nLGcucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih3LFApe2Zvcih2YXIgTz1fLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSx6PVsiLS0tLS1C''@;'; put 'put ''RUdJTiAiK1AubGFiZWwrIi0tLS0tIl0sTj0wO048Ty5sZW5ndGg7Tis9NjQpei5wdXNoKE8uc2xpY2UoTixOKzY0KSk7cmV0dXJuIHoucHVzaCgiLS0tLS1FTkQgIitQLmxhYmVsKyItLS0tLSIpLHouam9pbigiXG4iKX19LDk2ODY3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5w''@;'; put 'put ''cm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEw''@;'; put 'put ''KSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnko''@;'; put 'put ''Nzg5ODIpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYs''@;'; put 'put ''Yi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5t''@;'; put 'put ''aW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5p''@;'; put 'put ''dEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNl''@;'; put 'put ''SGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0''@;'; put 'put ''aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAv''@;'; put 'put ''NjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0w''@;'; put 'put ''KXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxq''@;'; put 'put ''PTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxz''@;'; put 'put ''ZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIp''@;'; put 'put ''JTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11''@;'; put 'put ''bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90''@;'; put 'put ''aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVu''@;'; put 'put ''Z3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0''@;'; put 'put ''aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAi''@;'; put 'put ''OiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3Nzcy''@;'; put 'put ''MTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0''@;'; put 'put ''NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRz''@;'; put 'put ''WzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0w''@;'; put 'put ''fHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8''@;'; put 'put ''MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0y''@;'; put 'put ''NixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+''@;'; put 'put ''PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0r''@;'; put 'put ''dGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYm''@;'; put 'put ''ZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9''@;'; put 'put ''dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCks''@;'; put 'put ''QT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1''@;'; put 'put ''NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+''@;'; put 'put ''PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZi''@;'; put 'put ''fHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMu''@;'; put 'put ''bGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJl''@;'; put 'put ''dHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6''@;'; put 'put ''dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9y''@;'; put 'put ''KDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxi''@;'; put 'put ''Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMu''@;'; put 'put ''aXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3Ro''@;'; put 'put ''P3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndv''@;'; put 'put ''cmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9''@;'; put 'put ''cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndv''@;'; put 'put ''cmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9''@;'; put 'put ''dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNb''@;'; put 'put ''SF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgu''@;'; put 'put ''d29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5l''@;'; put 'put ''Z2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2''@;'; put 'put ''YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNb''@;'; put 'put ''al0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3Io''@;'; put 'put ''O2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkx''@;'; put 'put ''Jm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixN''@;'; put 'put ''dD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLHNpPTB8VFsxXSxRdD04MTkxJnNpLHNuPXNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+''@;'; put 'put ''Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMs''@;'; put 'put ''aGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVs''@;'; put 'put ''KHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXww''@;'; put 'put ''LEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZy''@;'; put 'put ''Pj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLFJ0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsV3QpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxS''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEllLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStN''@;'; put 'put ''YXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUs''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5p''@;'; put 'put ''Pj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXww''@;'; put 'put ''LERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''TWUsY24pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxY''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01h''@;'; put 'put ''dGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''QWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChq''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''TXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChr''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxY''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01h''@;'; put 'put ''dGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXww''@;'; put 'put ''LHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExh''@;'; put 'put ''Pj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVu''@;'; put 'put ''KSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhb''@;'; put 'put ''OF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1wYSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChW''@;'; put 'put ''LHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlz''@;'; put 'put ''LHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gcShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFy''@;'; put 'put ''IGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCso''@;'; put 'put ''c2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1''@;'; put 'put ''bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0''@;'; put 'put ''dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRy''@;'; put 'put ''YW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIg''@;'; put 'put ''dGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSxNZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKk1lO01lPXRlKk1lK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUrTWUseFthZSt3ZStqXT1VZS1vdCxD''@;'; put 'put ''W2FlK3dlK2pdPUplLU1lLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8''@;'; put 'put ''VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5v''@;'; put 'put ''cm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEou''@;'; put 'put ''cHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQp''@;'; put 'put ''KX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRo''@;'; put 'put ''aXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29y''@;'; put 'put ''ZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRl''@;'; put 'put ''W3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5u''@;'; put 'put ''ZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8o''@;'; put 'put ''cCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTti''@;'; put 'put ''Pj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5j''@;'; put 'put ''dGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3''@;'; put 'put ''IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhp''@;'; put 'put ''cy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1Qr''@;'; put 'put ''Kyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3Zh''@;'; put 'put ''ciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDtt''@;'; put 'put ''PEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53''@;'; put 'put ''b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5n''@;'; put 'put ''dGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lh''@;'; put 'put ''ZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsr''@;'; put 'put ''O3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBm''@;'; put 'put ''b3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9''@;'; put 'put ''KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5s''@;'; put 'put ''ZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRp''@;'; put 'put ''dmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxu''@;'; put 'put ''c3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9''@;'; put 'put ''PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdh''@;'; put 'put ''dGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhI''@;'; put 'put ''PXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVn''@;'; put 'put ''YXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09''@;'; put 'put ''Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0s''@;'; put 'put ''dy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChD''@;'; put 'put ''KTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgt''@;'; put 'put ''MTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQq''@;'; put 'put ''Yjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVy''@;'; put 'put ''bygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJu''@;'; put 'put ''KDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmYWU8MjY7KythZSx0ZTw8PTEpO2lmKGFlPjApZm9yKGIuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkp''@;'; put 'put ''JiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5p''@;'; put 'put ''YWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9p''@;'; put 'put ''bnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYWUsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+''@;'; put 'put ''MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08''@;'; put 'put ''MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PWIuY21wbigxKT9DOlQpLmNt''@;'; put 'put ''cG4oMCk8MCYmYWUuaWFkZChwKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVn''@;'; put 'put ''YXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBI''@;'; put 'put ''PWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihw''@;'; put 'put ''KXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBq''@;'; put 'put ''PTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9''@;'; put 'put ''PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXti''@;'; put 'put ''JiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFr''@;'; put 'put ''fX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVx''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGco''@;'; put 'put ''MD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMg''@;'; put 'put ''aW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxy''@;'; put 'put ''ZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk''@;'; put 'put ''TXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5y''@;'; put 'put ''ZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5w''@;'; put 'put ''b3codGhpcyxwKX07dmFyIG5lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMu''@;'; put 'put ''bikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNh''@;'; put 'put ''bGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1l''@;'; put 'put ''KFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0''@;'; put 'put ''aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmlu''@;'; put 'put ''di5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMu''@;'; put 'put ''bik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0w''@;'; put 'put ''O1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBq''@;'; put 'put ''PTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1tw''@;'; put 'put ''Lmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5s''@;'; put 'put ''ZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixU''@;'; put 'put ''PTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYobmVbcF0pcmV0dXJuIG5lW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9''@;'; put 'put ''PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gbmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09''@;'; put 'put ''cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpw''@;'; put 'put ''LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5Mihw''@;'; put 'put ''LGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBl''@;'; put 'put ''LmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIg''@;'; put 'put ''Yj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hy''@;'; put 'put ''bigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTsp''@;'; put 'put ''bS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2co''@;'; put 'put ''VWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMu''@;'; put 'put ''bSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEp''@;'; put 'put ''KXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2Zvcigw''@;'; put 'put ''PT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciB0ZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1h''@;'; put 'put ''ZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6''@;'; put 'put ''ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1sw''@;'; put 'put ''XT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5p''@;'; put 'put ''c3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChi''@;'; put 'put ''KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5p''@;'; put 'put ''YWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDU1MTg4Oih1ZSxYKT0+eyFm''@;'; put 'put ''dW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIHk9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEk9bmV3IFVpbnQ4QXJyYXkoMjU2KSxfPTA7Xzw2NDtfKyspSVt5LmNoYXJDb2RlQXQoXyldPV87WC5sPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3ZhciB3LEI9bmV3IFVpbnQ4QXJyYXkoZyksUD1CLmxlbmd0aCxGPSIiO2Zvcih3PTA7dzxQO3crPTMpRis9eVtCW3ddPj4yXSxGKz15WygzJkJbd10pPDw0fEJbdysxXT4+NF0sRis9eVsoMTUmQlt3KzFdKTw8MnxCW3crMl0+PjZdLEYrPXlbNjMmQlt3KzJdXTtyZXR1cm4gUCUz''@;'; put 'put ''PT0yP0Y9Ri5zdWJzdHJpbmcoMCxGLmxlbmd0aC0xKSsiPSI6UCUzPT0xJiYoRj1GLnN1YnN0cmluZygwLEYubGVuZ3RoLTIpKyI9PSIpLEZ9LFguRD1mdW5jdGlvbihnKXt2YXIgUCxPLHosTixMLEI9Ljc1KmcubGVuZ3RoLHc9Zy5sZW5ndGgsRj0wOyI9Ij09PWdbZy5sZW5ndGgtMV0mJihC''@;'; put 'put ''LS0sIj0iPT09Z1tnLmxlbmd0aC0yXSYmQi0tKTt2YXIgSz1uZXcgQXJyYXlCdWZmZXIoQiksVT1uZXcgVWludDhBcnJheShLKTtmb3IoUD0wO1A8dztQKz00KU89SVtnLmNoYXJDb2RlQXQoUCldLHo9SVtnLmNoYXJDb2RlQXQoUCsxKV0sTj1JW2cuY2hhckNvZGVBdChQKzIpXSxMPUlbZy5j''@;'; put 'put ''aGFyQ29kZUF0KFArMyldLFVbRisrXT1PPDwyfHo+PjQsVVtGKytdPSgxNSZ6KTw8NHxOPj4yLFVbRisrXT0oMyZOKTw8Nnw2MyZMO3JldHVybiBLfX0oKX0sMTM5ODE6KHVlLFgpPT57InVzZSBzdHJpY3QiO1guYnl0ZUxlbmd0aD1mdW5jdGlvbiBGKFUpe3ZhciBXPVAoVSkscT1XWzFdO3Jl''@;'; put 'put ''dHVybiAzKihXWzBdK3EpLzQtcX0sWC50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFUpe3ZhciBXLGxlLFk9UChVKSxxPVlbMF0sZWU9WVsxXSxKPW5ldyBfKGZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiAzKihXK1kpLzQtWX0oMCxxLGVlKSksbmU9MCxpZT1lZT4wP3EtNDpxO2ZvcihsZT0wO2xl''@;'; put 'put ''PGllO2xlKz00KVc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MTh8SVtVLmNoYXJDb2RlQXQobGUrMSldPDwxMnxJW1UuY2hhckNvZGVBdChsZSsyKV08PDZ8SVtVLmNoYXJDb2RlQXQobGUrMyldLEpbbmUrK109Vz4+MTYmMjU1LEpbbmUrK109Vz4+OCYyNTUsSltuZSsrXT0yNTUmVztyZXR1cm4g''@;'; put 'put ''Mj09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwyfElbVS5jaGFyQ29kZUF0KGxlKzEpXT4+NCxKW25lKytdPTI1NSZXKSwxPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDEwfElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8NHxJW1UuY2hhckNvZGVBdChsZSsyKV0+PjIsSltuZSsr''@;'; put 'put ''XT1XPj44JjI1NSxKW25lKytdPTI1NSZXKSxKfSxYLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gSyhVKXtmb3IodmFyIFcsWT1VLmxlbmd0aCxxPVklMyxlZT1bXSxKPTE2MzgzLG5lPTAsaWU9WS1xO25lPGllO25lKz1KKWVlLnB1c2goTChVLG5lLG5lK0o+aWU/aWU6bmUrSikpO3JldHVybiAx''@;'; put 'put ''PT09cT9lZS5wdXNoKHlbKFc9VVtZLTFdKT4+Ml0reVtXPDw0JjYzXSsiPT0iKToyPT09cSYmZWUucHVzaCh5WyhXPShVW1ktMl08PDgpK1VbWS0xXSk+PjEwXSt5W1c+PjQmNjNdK3lbVzw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciB5PVtdLEk9W10sXz10eXBlb2YgVWludDhB''@;'; put 'put ''cnJheTwidSI/VWludDhBcnJheTpBcnJheSxnPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixCPTA7Qjw2NDsrK0IpeVtCXT1nW0JdLElbZy5jaGFyQ29kZUF0KEIpXT1CO2Z1bmN0aW9uIFAoVSl7dmFyIFc9VS5sZW5n''@;'; put 'put ''dGg7aWYoVyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFk9VS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1ZJiYoWT1XKSxbWSxZPT09Vz8wOjQtWSU0XX1mdW5jdGlvbiBOKFUpe3JldHVybiB5W1U+PjE4''@;'; put 'put ''JjYzXSt5W1U+PjEyJjYzXSt5W1U+PjYmNjNdK3lbNjMmVV19ZnVuY3Rpb24gTChVLFcsWSl7Zm9yKHZhciBlZT1bXSxKPVc7SjxZO0orPTMpZWUucHVzaChOKChVW0pdPDwxNiYxNjcxMTY4MCkrKFVbSisxXTw8OCY2NTI4MCkrKDI1NSZVW0orMl0pKSk7cmV0dXJuIGVlLmpvaW4oIiIpfUlb''@;'; put 'put ''NDVdPTYyLElbOTVdPTYzfSw5MTc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh4LEMpe2lmKCF4KXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoeCxDKXt4LnN1cGVyXz1DO3ZhciBUPWZ1bmN0''@;'; put 'put ''aW9uKCl7fTtULnByb3RvdHlwZT1DLnByb3RvdHlwZSx4LnByb3RvdHlwZT1uZXcgVCx4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj14fWZ1bmN0aW9uIHcoeCxDLFQpe2lmKHcuaXNCTih4KSlyZXR1cm4geDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhp''@;'; put 'put ''cy5yZWQ9bnVsbCxudWxsIT09eCYmKCgibGUiPT09Q3x8ImJlIj09PUMpJiYoVD1DLEM9MTApLHRoaXMuX2luaXQoeHx8MCxDfHwxMCxUfHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg0Nzc5MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKHgsQyl7dmFyIFQ9eC5jaGFyQ29kZUF0KEMpO3JldHVybiBUPj00OCYmVDw9NTc/VC00ODpUPj02NSYmVDw9NzA/VC01NTpUPj05NyYmVDw9''@;'; put 'put ''MTAyP1QtODc6dm9pZCBnKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3gpfWZ1bmN0aW9uIE8oeCxDLFQpe3ZhciBIPUYoeCxUKTtyZXR1cm4gVC0xPj1DJiYoSHw9Rih4LFQtMSk8PDQpLEh9ZnVuY3Rpb24geih4LEMsVCxIKXtmb3IodmFyIGo9MCxFPTAsbT1NYXRoLm1pbih4Lmxlbmd0''@;'; put 'put ''aCxUKSxBPUM7QTxtO0ErKyl7dmFyIGFlPXguY2hhckNvZGVBdChBKS00ODtqKj1ILEU9YWU+PTQ5P2FlLTQ5KzEwOmFlPj0xNz9hZS0xNysxMDphZSxnKGFlPj0wJiZFPEgsIkludmFsaWQgY2hhcmFjdGVyIiksais9RX1yZXR1cm4gan1mdW5jdGlvbiBOKHgsQyl7eC53b3Jkcz1DLndvcmRz''@;'; put 'put ''LHgubGVuZ3RoPUMubGVuZ3RoLHgubmVnYXRpdmU9Qy5uZWdhdGl2ZSx4LnJlZD1DLnJlZH1pZih3LmlzQk49ZnVuY3Rpb24oQyl7cmV0dXJuIEMgaW5zdGFuY2VvZiB3fHxudWxsIT09QyYmIm9iamVjdCI9PXR5cGVvZiBDJiZDLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYm''@;'; put 'put ''QXJyYXkuaXNBcnJheShDLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk+MD9DOlR9LHcubWluPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPDA/QzpUfSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihDLFQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBD''@;'; put 'put ''KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKEMsVCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShDLFQsSCk7ImhleCI9PT1UJiYoVD0xNiksZyhUPT09KDB8VCkmJlQ+PTImJlQ8PTM2KTt2YXIgaj0wOyItIj09PShDPUMudG9TdHJpbmcoKS5yZXBsYWNl''@;'; put 'put ''KC9ccysvZywiIikpWzBdJiYoaisrLHRoaXMubmVnYXRpdmU9MSksajxDLmxlbmd0aCYmKDE2PT09VD90aGlzLl9wYXJzZUhleChDLGosSCk6KHRoaXMuX3BhcnNlQmFzZShDLFQsaiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpKSl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0TnVtYmVyPWZ1bmN0aW9uKEMsVCxIKXtDPDAmJih0aGlzLm5lZ2F0aXZlPTEsQz0tQyksQzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQ10sdGhpcy5sZW5ndGg9MSk6Qzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcx''@;'; put 'put ''MDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKEM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXRBcnJheT1mdW5jdGlvbihDLFQsSCl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMubGVuZ3RoKSxDLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChDLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBFLG0sQT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTEsRT0wO2o+PTA7ai09Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbai0xXTw8OHxDW2otMl08PDE2KTw8QSY2''@;'; put 'put ''NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKGo9MCxFPTA7ajxDLmxlbmd0aDtqKz0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqKzFdPDw4fENbaisyXTw8MTYpPDxBJjY3MTA4''@;'; put 'put ''ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihDLFQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChDLmxlbmd0aC1UKS82KSx0aGlz''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBBLEU9MCxtPTA7aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMTtqPj1UO2otPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2''@;'; put 'put ''MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7ZWxzZSBmb3Ioaj0oQy5sZW5ndGgtVCklMj09MD9UKzE6VDtqPEMubGVuZ3RoO2orPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20r''@;'; put 'put ''PTFdfD1BPj4+MjYpOkUrPTg7dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihDLFQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxFPTE7RTw9NjcxMDg4NjM7RSo9VClqKys7ai0tLEU9RS9UfDA7Zm9yKHZhciBtPUMubGVu''@;'; put 'put ''Z3RoLUgsQT1tJWosYWU9TWF0aC5taW4obSxtLUEpK0gsdGU9MCxzZT1IO3NlPGFlO3NlKz1qKXRlPXooQyxzZSxzZStqLFQpLHRoaXMuaW11bG4oRSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSk7aWYoMCE9PUEpe3ZhciB3ZT0x''@;'; put 'put ''O2Zvcih0ZT16KEMsc2UsQy5sZW5ndGgsVCksc2U9MDtzZTxBO3NlKyspd2UqPVQ7dGhpcy5pbXVsbih3ZSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSl9dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihD''@;'; put 'put ''KXtDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspQy53b3Jkc1tUXT10aGlzLndvcmRzW1RdO0MubGVuZ3RoPXRoaXMubGVuZ3RoLEMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxDLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuX21v''@;'; put 'put ''dmU9ZnVuY3Rpb24oQyl7TihDLHRoaXMpfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoQyksQ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEM7KXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWdu''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7dy5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0''@;'; put 'put ''aWwuaW5zcGVjdC5jdXN0b20iKV09TH1jYXRjaHt3LnByb3RvdHlwZS5pbnNwZWN0PUx9ZWxzZSB3LnByb3RvdHlwZS5pbnNwZWN0PUw7ZnVuY3Rpb24gTCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBLPVsiIiwiMCIsIjAw''@;'; put 'put ''IiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sVz1bMCwwLDMzNTU0NDMyLDQz''@;'; put 'put ''MDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMy''@;'; put 'put ''LDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZSh4LEMsVCl7VC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXngu''@;'; put 'put ''bmVnYXRpdmU7dmFyIEg9eC5sZW5ndGgrQy5sZW5ndGh8MDtULmxlbmd0aD1ILEg9SC0xfDA7dmFyIGo9MHx4LndvcmRzWzBdLEU9MHxDLndvcmRzWzBdLG09aipFLGFlPW0vNjcxMDg4NjR8MDtULndvcmRzWzBdPTY3MTA4ODYzJm07Zm9yKHZhciB0ZT0xO3RlPEg7dGUrKyl7Zm9yKHZhciBz''@;'; put 'put ''ZT1hZT4+PjI2LHdlPTY3MTA4ODYzJmFlLFVlPU1hdGgubWluKHRlLEMubGVuZ3RoLTEpLEplPU1hdGgubWF4KDAsdGUteC5sZW5ndGgrMSk7SmU8PVVlO0plKyspc2UrPShtPShqPTB8eC53b3Jkc1t0ZS1KZXwwXSkqKEU9MHxDLndvcmRzW0plXSkrd2UpLzY3MTA4ODY0fDAsd2U9NjcxMDg4''@;'; put 'put ''NjMmbTtULndvcmRzW3RlXT0wfHdlLGFlPTB8c2V9cmV0dXJuIDAhPT1hZT9ULndvcmRzW3RlXT0wfGFlOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihDLFQpe3ZhciBIO2lmKFQ9MHxUfHwxLDE2PT09KEM9Q3x8MTApfHwiaGV4Ij09PUMpe0g9''@;'; put 'put ''IiI7Zm9yKHZhciBqPTAsRT0wLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9dGhpcy53b3Jkc1ttXSxhZT0oMTY3NzcyMTUmKEE8PGp8RSkpLnRvU3RyaW5nKDE2KTtFPUE+Pj4yNC1qJjE2Nzc3MjE1LChqKz0yKT49MjYmJihqLT0yNixtLS0pLEg9MCE9PUV8fG0hPT10aGlzLmxlbmd0''@;'; put 'put ''aC0xP0tbNi1hZS5sZW5ndGhdK2FlK0g6YWUrSH1mb3IoMCE9PUUmJihIPUUudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihDPT09KDB8QykmJkM+PTImJkM8PTM2KXt2YXIgdGU9VVtDXSxzZT1X''@;'; put 'put ''W0NdO0g9IiI7dmFyIHdlPXRoaXMuY2xvbmUoKTtmb3Iod2UubmVnYXRpdmU9MDshd2UuaXNaZXJvKCk7KXt2YXIgVWU9d2UubW9kcm4oc2UpLnRvU3RyaW5nKEMpO0g9KHdlPXdlLmlkaXZuKHNlKSkuaXNaZXJvKCk/VWUrSDpLW3RlLVVlLmxlbmd0aF0rVWUrSH1mb3IodGhpcy5pc1plcm8o''@;'; put 'put ''KSYmKEg9IjAiK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy53b3Jkc1sw''@;'; put 'put ''XTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP0MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9DKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5''@;'; put 'put ''IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LUM6Q30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LFAmJih3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLnRv''@;'; put 'put ''QXJyYXlMaWtlKFAsQyxUKX0pLHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxDLFQpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihDLFQsSCl7dGhpcy5fc3RyaXAoKTt2YXIgaj10aGlzLmJ5dGVMZW5ndGgo''@;'; put 'put ''KSxFPUh8fE1hdGgubWF4KDEsaik7ZyhqPD1FLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhFPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBtPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuYWxsb2NVbnNhZmU/Qy5hbGxvY1Vuc2FmZShUKTpu''@;'; put 'put ''ZXcgQyhUKX0oQyxFKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PVQ/IkxFIjoiQkUiKV0obSxqKSxtfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MCxFPTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlz''@;'; put 'put ''LndvcmRzW0VdPDxtfGo7Q1tIKytdPTI1NSZBLEg8Qy5sZW5ndGgmJihDW0grK109QT4+OCYyNTUpLEg8Qy5sZW5ndGgmJihDW0grK109QT4+MTYmMjU1KSw2PT09bT8oSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4yNCYyNTUpLGo9MCxtPTApOihqPUE+Pj4yNCxtKz0yKX1pZihIPEMubGVuZ3Ro''@;'; put 'put ''KWZvcihDW0grK109ajtIPEMubGVuZ3RoOylDW0grK109MH0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9Qy5sZW5ndGgtMSxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSC0tXT0yNTUm''@;'; put 'put ''QSxIPj0wJiYoQ1tILS1dPUE+PjgmMjU1KSxIPj0wJiYoQ1tILS1dPUE+PjE2JjI1NSksNj09PW0/KEg+PTAmJihDW0gtLV09QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSD49MClmb3IoQ1tILS1dPWo7SD49MDspQ1tILS1dPTB9LHcucHJvdG90eXBlLl9jb3VudEJp''@;'; put 'put ''dHM9TWF0aC5jbHozMj9mdW5jdGlvbihDKXtyZXR1cm4gMzItTWF0aC5jbHozMihDKX06ZnVuY3Rpb24oQyl7dmFyIFQ9QyxIPTA7cmV0dXJuIFQ+PTQwOTYmJihIKz0xMyxUPj4+PTEzKSxUPj02NCYmKEgrPTcsVD4+Pj03KSxUPj04JiYoSCs9NCxUPj4+PTQpLFQ+PTImJihIKz0yLFQ+Pj49''@;'; put 'put ''MiksSCtUfSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oQyl7aWYoMD09PUMpcmV0dXJuIDI2O3ZhciBUPUMsSD0wO3JldHVybiA4MTkxJlR8fChIKz0xMyxUPj4+PTEzKSwxMjcmVHx8KEgrPTcsVD4+Pj03KSwxNSZUfHwoSCs9NCxUPj4+PTQpLDMmVHx8KEgrPTIsVD4+Pj0yKSwx''@;'; put 'put ''JlR8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNl''@;'; put 'put ''aWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIHRo''@;'; put 'put ''aXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3Io''@;'; put 'put ''dmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdW9yKEMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''dW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53b3Jkc1tIXTtyZXR1''@;'; put 'put ''cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5n''@;'; put 'put ''dGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClmb3IoO2o8VC5sZW5n''@;'; put 'put ''dGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoQyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhv''@;'; put 'put ''cihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0wO2o8VDtqKyspdGhp''@;'; put 'put ''cy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKEMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tIXSZ+KDE8PGopLHRo''@;'; put 'put ''aXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigw''@;'; put 'put ''PT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0wLG09MDttPGoubGVu''@;'; put 'put ''Z3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+MjY7aWYodGhpcy5s''@;'; put 'put ''ZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDKXt2''@;'; put 'put ''YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhpcyksdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMpO3JldHVybiBDLm5l''@;'; put 'put ''Z2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7''@;'; put 'put ''Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tBXTtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxIKXt2YXIgYWUsdGUs''@;'; put 'put ''c2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLHdlPTB8alswXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxqWzFdLE1lPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfGpbMl0samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8alszXSxSZT04MTkxJkZlLEllPUZlPj4+MTMs''@;'; put 'put ''VmU9MHxqWzRdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfGpbNV0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8als2XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxqWzddLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfGpbOF0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8''@;'; put 'put ''als5XSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsc2k9MHxFWzBdLFF0PTgxOTEmc2ksc249c2k+Pj4xMyxSaT0wfEVbMV0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8RVsyXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxFWzNdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfEVbNF0s''@;'; put 'put ''V2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8RVs1XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxFWzZdLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfEVbN10sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8RVs4XSxYdD04MTkxJklpLGVuPUlpPj4+MTMsdWE9MHxFWzldLEVpPTgx''@;'; put 'put ''OTEmdWEsdnI9dWE+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KEErKGFlPU1hdGguaW11bChVZSxRdCkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChVZSxzbikpK01hdGguaW11bChKZSxRdCl8MCkpPDwxMyl8MDtBPSgoc2U9''@;'; put 'put ''TWF0aC5pbXVsKEplLHNuKSkrKHRlPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxhZT1NYXRoLmltdWwoTWUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoTWUsc24pKStNYXRoLmltdWwodmUsUXQpfDAsc2U9TWF0aC5pbXVsKHZlLHNuKTt2YXIgJGk9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChVZSxobil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmdCl8MCkrKHRlPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoamUs''@;'; put 'put ''UXQpLHRlPSh0ZT1NYXRoLmltdWwoamUsc24pKStNYXRoLmltdWwoRGUsUXQpfDAsc2U9TWF0aC5pbXVsKERlLHNuKSxhZT1hZStNYXRoLmltdWwoTWUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxmdCl8''@;'; put 'put ''MDt2YXIgZWk9KEErKGFlPWFlK01hdGguaW11bChVZSxXdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKHRlPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVp''@;'; put 'put ''Jj02NzEwODg2MyxhZT1NYXRoLmltdWwoUmUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUmUsc24pKStNYXRoLmltdWwoSWUsUXQpfDAsc2U9TWF0aC5pbXVsKEllLHNuKSxhZT1hZStNYXRoLmltdWwoamUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhu''@;'; put 'put ''KXwwLHNlPXNlK01hdGguaW11bChEZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoTWUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxBdCl8MDt2YXIgUXI9KEErKGFlPWFlK01hdGguaW11bChVZSxzdCl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxVdCl8MCkrKHRlPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoa2UsUXQpLHRlPSh0ZT1N''@;'; put 'put ''YXRoLmltdWwoa2Usc24pKStNYXRoLmltdWwoQWUsUXQpfDAsc2U9TWF0aC5pbXVsKEFlLHNuKSxhZT1hZStNYXRoLmltdWwoUmUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLHNlPXNlK01hdGguaW11bChJZSxmdCl8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoamUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoTWUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bCh2ZSxVdCl8MDt2YXIgVmk9KEErKGFlPWFlK01hdGguaW11bChVZSxXZSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxUdCl8MCkrKHRlPj4+''@;'; put 'put ''MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxhZT1NYXRoLmltdWwobnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwobnQsc24pKStNYXRoLmltdWwoUWUsUXQpfDAsc2U9TWF0aC5pbXVsKFFlLHNuKSxhZT1hZStNYXRoLmltdWwoa2UsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLHNlPXNlK01hdGguaW11bChBZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoUmUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLHNlPXNlK01hdGguaW11bChJZSxBdCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''amUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01hdGguaW11bChEZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoTWUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bCh2ZSxUdCl8MDt2YXIgTmk9KEErKGFlPWFlK01hdGguaW11bChVZSxodCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx4dCl8MCkrKHRlPj4+MTMpfDAp''@;'; put 'put ''KyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeXQsc24pKStNYXRoLmltdWwoTXQsUXQpfDAsc2U9TWF0aC5pbXVsKE10LHNuKSxhZT1hZStNYXRoLmltdWwobnQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxmdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxmdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLHNlPXNlK01hdGguaW11bChBZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoUmUsc3Qp''@;'; put 'put ''fDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLHNlPXNlK01hdGguaW11bChJZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoamUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChEZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoTWUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSx4dCl8MDt2YXIgRGE9KEErKGFlPWFlK01hdGguaW11bChVZSxybil8MCl8MCkrKCg4MTkxJih0ZT0odGU9''@;'; put 'put ''dGUrTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6dCl8MCkrKHRlPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoaXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoaXQsc24pKStN''@;'; put 'put ''YXRoLmltdWwoJGUsUXQpfDAsc2U9TWF0aC5pbXVsKCRlLHNuKSxhZT1hZStNYXRoLmltdWwoeXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLHNlPXNlK01hdGguaW11bChNdCxmdCl8MCxhZT1hZStNYXRoLmltdWwobnQsV3QpfDAsdGU9''@;'; put 'put ''KHRlPXRlK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoa2Usc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLHNlPXNlK01hdGguaW11bChBZSxV''@;'; put 'put ''dCl8MCxhZT1hZStNYXRoLmltdWwoUmUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLHNlPXNlK01hdGguaW11bChJZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoamUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLGh0KXwwLHNlPXNlK01hdGguaW11bChEZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoTWUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLHNlPXNlK01hdGguaW11bCh2ZSx6dCl8MDt2YXIgTHI9KEErKGFlPWFlK01hdGguaW11bChV''@;'; put 'put ''ZSxjbil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmbil8MCkrKHRlPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSGUsUXQp''@;'; put 'put ''LHRlPSh0ZT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsc2U9TWF0aC5pbXVsKHV0LHNuKSxhZT1hZStNYXRoLmltdWwoaXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLHNlPXNlK01hdGguaW11bCgkZSxmdCl8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoeXQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLHNlPXNlK01hdGguaW11bChNdCxBdCl8MCxhZT1hZStNYXRoLmltdWwobnQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LHN0KXwwLHNlPXNlK01hdGguaW11bChRZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLHNlPXNlK01hdGguaW11bChBZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoUmUsaHQpfDAsdGU9KHRlPXRl''@;'; put 'put ''K01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLHNlPXNlK01hdGguaW11bChJZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoamUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLHNlPXNlK01hdGguaW11bChEZSx6dCl8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoTWUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxmbil8MDt2YXIgV2k9KEErKGFlPWFlK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxlbil8MCkrKHRlPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsc24pKStNYXRoLmltdWwoUHQs''@;'; put 'put ''UXQpfDAsc2U9TWF0aC5pbXVsKFB0LHNuKSxhZT1hZStNYXRoLmltdWwoSGUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmdCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsV3QpfDAsdGU9KHRlPXRlK01hdGgu''@;'; put 'put ''aW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLHNlPXNlK01hdGguaW11bCgkZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLHNlPXNlK01hdGguaW11bChNdCxVdCl8MCxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwobnQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoa2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChBZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoUmUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLHNlPXNlK01hdGguaW11bChJZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoamUsY24pfDAsdGU9KHRlPXRlK01hdGgu''@;'; put 'put ''aW11bChqZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLHNlPXNlK01hdGguaW11bChEZSxmbil8MCxhZT1hZStNYXRoLmltdWwoTWUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxlbil8MDt2YXIgcGE9''@;'; put 'put ''KEErKGFlPWFlK01hdGguaW11bChVZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHZyKXwwKStNYXRoLmltdWwoSmUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx2cil8MCkrKHRlPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2''@;'; put 'put ''MyxhZT1NYXRoLmltdWwoUnQsaG4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZnQpKStNYXRoLmltdWwoUHQsaG4pfDAsc2U9TWF0aC5pbXVsKFB0LGZ0KSxhZT1hZStNYXRoLmltdWwoSGUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxBdCl8MCkrTWF0aC5pbXVsKHV0LFd0KXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bCh1dCxBdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLHNlPXNlK01hdGguaW11bCgkZSxVdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5''@;'; put 'put ''dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLHNlPXNlK01hdGguaW11bChNdCxUdCl8MCxhZT1hZStNYXRoLmltdWwobnQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLHNlPXNlK01hdGguaW11bChRZSx4dCl8MCxhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwoa2Uscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLHNlPXNlK01hdGguaW11bChBZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoUmUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bChJZSxmbil8MCxhZT1hZStNYXRoLmltdWwoamUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwLHNlPXNlK01hdGguaW11bChEZSxlbil8MDt2YXIgUW49KEErKGFlPWFlK01hdGguaW11bChNZSxFaSl8MCl8MCkrKCg4MTkx''@;'; put 'put ''Jih0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLHZyKXwwKStNYXRoLmltdWwodmUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh2ZSx2cil8MCkrKHRlPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsV3QpLHRlPSh0ZT1NYXRoLmltdWwo''@;'; put 'put ''UnQsQXQpKStNYXRoLmltdWwoUHQsV3QpfDAsc2U9TWF0aC5pbXVsKFB0LEF0KSxhZT1hZStNYXRoLmltdWwoSGUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxVdCl8MCkrTWF0aC5pbXVsKHV0LHN0KXwwLHNlPXNlK01hdGguaW11bCh1dCxVdCl8MCxhZT1hZStNYXRoLmltdWwoaXQs''@;'; put 'put ''V2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLHNlPXNlK01hdGguaW11bCgkZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bChNdCx4dCl8MCxhZT1hZStNYXRoLmltdWwobnQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoa2UsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxmbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLGNuKXwwLHNlPXNlK01hdGguaW11bChBZSxmbil8MCxhZT1hZStNYXRoLmltdWwoUmUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwLHNlPXNlK01hdGguaW11bChJZSxlbil8MDt2YXIgbGE9KEErKGFlPWFlK01h''@;'; put 'put ''dGguaW11bChqZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGplLHZyKXwwKStNYXRoLmltdWwoRGUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSx2cil8MCkrKHRlPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxhZT1NYXRoLmlt''@;'; put 'put ''dWwoUnQsc3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVXQpKStNYXRoLmltdWwoUHQsc3QpfDAsc2U9TWF0aC5pbXVsKFB0LFV0KSxhZT1hZStNYXRoLmltdWwoSGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxUdCl8MCkrTWF0aC5pbXVsKHV0LFdlKXwwLHNlPXNlK01hdGguaW11bCh1''@;'; put 'put ''dCxUdCl8MCxhZT1hZStNYXRoLmltdWwoaXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLHNlPXNlK01hdGguaW11bCgkZSx4dCl8MCxhZT1hZStNYXRoLmltdWwoeXQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE10LHJuKXwwLHNlPXNlK01hdGguaW11bChNdCx6dCl8MCxhZT1hZStNYXRoLmltdWwobnQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLHNlPXNlK01hdGguaW11bChRZSxmbil8MCxhZT1hZStNYXRoLmltdWwoa2UsWHQpfDAs''@;'; put 'put ''dGU9KHRlPXRlK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwLHNlPXNlK01hdGguaW11bChBZSxlbil8MDt2YXIgeWE9KEErKGFlPWFlK01hdGguaW11bChSZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLHZyKXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''RWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChJZSx2cil8MCkrKHRlPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsV2UpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVHQpKStNYXRoLmltdWwoUHQsV2UpfDAsc2U9TWF0aC5pbXVsKFB0LFR0''@;'; put 'put ''KSxhZT1hZStNYXRoLmltdWwoSGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx4dCl8MCkrTWF0aC5pbXVsKHV0LGh0KXwwLHNlPXNlK01hdGguaW11bCh1dCx4dCl8MCxhZT1hZStNYXRoLmltdWwoaXQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KCRlLHJuKXwwLHNlPXNlK01hdGguaW11bCgkZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoeXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLHNlPXNlK01hdGguaW11bChNdCxmbil8MCxhZT1hZStNYXRoLmltdWwobnQsWHQpfDAsdGU9KHRl''@;'; put 'put ''PXRlK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwLHNlPXNlK01hdGguaW11bChRZSxlbil8MDt2YXIgTGE9KEErKGFlPWFlK01hdGguaW11bChrZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHZyKXwwKStNYXRoLmltdWwoQWUsRWkpfDAp''@;'; put 'put ''KTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChBZSx2cil8MCkrKHRlPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsaHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQseHQpKStNYXRoLmltdWwoUHQsaHQpfDAsc2U9TWF0aC5pbXVsKFB0LHh0KSxhZT1h''@;'; put 'put ''ZStNYXRoLmltdWwoSGUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx6dCl8MCkrTWF0aC5pbXVsKHV0LHJuKXwwLHNlPXNlK01hdGguaW11bCh1dCx6dCl8MCxhZT1hZStNYXRoLmltdWwoaXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNu''@;'; put 'put ''KXwwLHNlPXNlK01hdGguaW11bCgkZSxmbil8MCxhZT1hZStNYXRoLmltdWwoeXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwLHNlPXNlK01hdGguaW11bChNdCxlbil8MDt2YXIgRmE9KEErKGFlPWFlK01hdGguaW11bChudCxFaSl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHZyKXwwKStNYXRoLmltdWwoUWUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSx2cil8MCkrKHRlPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQscm4pLHRlPSh0ZT1N''@;'; put 'put ''YXRoLmltdWwoUnQsenQpKStNYXRoLmltdWwoUHQscm4pfDAsc2U9TWF0aC5pbXVsKFB0LHp0KSxhZT1hZStNYXRoLmltdWwoSGUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmbil8MCkrTWF0aC5pbXVsKHV0LGNuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmbil8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoaXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwLHNlPXNlK01hdGguaW11bCgkZSxlbil8MDt2YXIgdGk9KEErKGFlPWFlK01hdGguaW11bCh5dCxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHZyKXww''@;'; put 'put ''KStNYXRoLmltdWwoTXQsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChNdCx2cil8MCkrKHRlPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsY24pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZm4pKStNYXRoLmltdWwoUHQsY24pfDAsc2U9''@;'; put 'put ''TWF0aC5pbXVsKFB0LGZuKSxhZT1hZStNYXRoLmltdWwoSGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKHV0LFh0KXwwLHNlPXNlK01hdGguaW11bCh1dCxlbil8MDt2YXIgZ289KEErKGFlPWFlK01hdGguaW11bChpdCxFaSl8MCl8MCkrKCg4MTkxJih0''@;'; put 'put ''ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHZyKXwwKStNYXRoLmltdWwoJGUsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCgkZSx2cil8MCkrKHRlPj4+MTMpfDApKyhnbz4+PjI2KXwwLGdvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoUnQsWHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQs''@;'; put 'put ''ZW4pKStNYXRoLmltdWwoUHQsWHQpfDAsc2U9TWF0aC5pbXVsKFB0LGVuKTt2YXIgTnM9KEErKGFlPWFlK01hdGguaW11bChIZSxFaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHZyKXwwKStNYXRoLmltdWwodXQsRWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGgu''@;'; put 'put ''aW11bCh1dCx2cil8MCkrKHRlPj4+MTMpfDApKyhOcz4+PjI2KXwwLE5zJj02NzEwODg2Mzt2YXIgYmw9KEErKGFlPU1hdGguaW11bChSdCxFaSkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChSdCx2cikpK01hdGguaW11bChQdCxFaSl8MCkpPDwxMyl8MDtyZXR1cm4gQT0oKHNlPU1h''@;'; put 'put ''dGguaW11bChQdCx2cikpKyh0ZT4+PjEzKXwwKSsoYmw+Pj4yNil8MCxibCY9NjcxMDg4NjMsbVswXT1XbixtWzFdPSRpLG1bMl09ZWksbVszXT1RcixtWzRdPVZpLG1bNV09TmksbVs2XT1EYSxtWzddPUxyLG1bOF09V2ksbVs5XT1wYSxtWzEwXT1RbixtWzExXT1sYSxtWzEyXT15YSxtWzEz''@;'; put 'put ''XT1MYSxtWzE0XT1GYSxtWzE1XT10aSxtWzE2XT1nbyxtWzE3XT1OcyxtWzE4XT1ibCwwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gbmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0MubGVuZ3RoO2Zvcih2''@;'; put 'put ''YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSx0ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7dGU8PWFlO3RlKyspe3ZhciBKZT0oMHx4LndvcmRzW0UtdGVdKSooMHxDLndv''@;'; put 'put ''cmRzW3RlXSksb3Q9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYob3Q9b3QrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsob3Q+Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1IOlQubGVuZ3RoLS0s''@;'; put 'put ''VC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIG5lKHgsQyxUKX1mdW5jdGlvbiBsZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJu''@;'; put 'put ''IDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P25lKHRoaXMsQyxUKTppZSh0aGlzLEMsVCl9LGxlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD13LnByb3RvdHlw''@;'; put 'put ''ZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8PSgxJkMpPDxULUUt''@;'; put 'put ''MSxDPj49MTtyZXR1cm4gan0sbGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sbGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7dGhpcy5wZXJtdXRl''@;'; put 'put ''KG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLHRlPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipNYXRoLlBJL2FlKSx3ZT0wO3dlPEU7d2UrPWFlKWZvcih2YXIgVWU9dGUsSmU9c2Usb3Q9MDtvdDxBO290Kyspe3ZhciBNZT1I''@;'; put 'put ''W3dlK290XSx2ZT1qW3dlK290XSxYZT1IW3dlK290K0FdLGplPWpbd2Urb3QrQV0sRGU9VWUqWGUtSmUqamU7amU9VWUqamUrSmUqWGUsSFt3ZStvdF09TWUrKFhlPURlKSxqW3dlK290XT12ZStqZSxIW3dlK290K0FdPU1lLVhlLGpbd2Urb3QrQV09dmUtamUsb3QhPT1hZSYmKERlPXRlKlVl''@;'; put 'put ''LXNlKkplLEplPXRlKkplK3NlKlVlLFVlPURlKX19LGxlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sbGUucHJvdG90eXBlLmNvbmp1Z2F0''@;'; put 'put ''ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LGxlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oQyxUKXtm''@;'; put 'put ''b3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSxsZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5j''@;'; put 'put ''dGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtnKDA9PT1FKSxnKCEoLTgxOTImRSkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5j''@;'; put 'put ''dGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQoaiksbT10aGlzLnN0''@;'; put 'put ''dWIoaiksQT1uZXcgQXJyYXkoaiksYWU9bmV3IEFycmF5KGopLHRlPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksd2U9bmV3IEFycmF5KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLEEsaiksdGhp''@;'; put 'put ''cy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLHRlLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSx3ZSxVZSxqLEUpO2Zvcih2YXIgb3Q9MDtvdDxqO290Kyspe3ZhciBNZT1hZVtvdF0qd2Vbb3RdLXRlW290XSpVZVtvdF07dGVbb3RdPWFl''@;'; put 'put ''W290XSpVZVtvdF0rdGVbb3RdKndlW290XSxhZVtvdF09TWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLHRlLGopLHRoaXMudHJhbnNmb3JtKGFlLHRlLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRpdmU9Qy5uZWdhdGl2''@;'; put 'put ''ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVsVG8oQyxUKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKEMsdGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09KDY3MTA4ODYzJkUp''@;'; put 'put ''Kyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1DPzE6dGhpcy5sZW5ndGgsVD90aGlzLmluZWcoKTp0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oQyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5j''@;'; put 'put ''bG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMpe3ZhciBUPWZ1bmN0aW9uIHEoeCl7Zm9yKHZhciBDPW5ldyBBcnJheSh4LmJpdExlbmd0aCgpKSxUPTA7VDxDLmxlbmd0aDtUKyspQ1tUXT14LndvcmRzW1QvMjZ8MF0+Pj5UJTI2JjE7cmV0dXJuIEN9KEMpO2lmKDA9PT1ULmxl''@;'; put 'put ''bmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciBIPXRoaXMsaj0wO2o8VC5sZW5ndGgmJjA9PT1UW2pdO2orKyxIPUguc3FyKCkpO2lmKCsrajxULmxlbmd0aClmb3IodmFyIEU9SC5zcXIoKTtqPFQubGVuZ3RoO2orKyxFPUUuc3FyKCkpMCE9PVRbal0mJihIPUgubXVsKEUpKTtyZXR1cm4g''@;'; put 'put ''SH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgRSxUPUMlMjYsSD0oQy1UKS8yNixqPTY3MTA4ODYzPj4+MjYtVDw8MjYtVDtpZigwIT09VCl7dmFyIG09MDtmb3IoRT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlz''@;'; put 'put ''LndvcmRzW0VdJmo7dGhpcy53b3Jkc1tFXT0oMHx0aGlzLndvcmRzW0VdKS1BPDxUfG0sbT1BPj4+MjYtVH1tJiYodGhpcy53b3Jkc1tFXT1tLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKXRoaXMud29yZHNbRStIXT10aGlzLndvcmRzW0Vd''@;'; put 'put ''O2ZvcihFPTA7RTxIO0UrKyl0aGlzLndvcmRzW0VdPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKEMpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihDKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1''@;'; put 'put ''bmN0aW9uKEMsVCxIKXt2YXIgajtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCksaj1UPyhULVQlMjYpLzI2OjA7dmFyIEU9QyUyNixtPU1hdGgubWluKChDLUUpLzI2LHRoaXMubGVuZ3RoKSxBPTY3MTA4ODYzXjY3MTA4ODYzPj4+RTw8RSxhZT1IO2lmKGotPW0saj1NYXRoLm1heCgwLGop''@;'; put 'put ''LGFlKXtmb3IodmFyIHRlPTA7dGU8bTt0ZSsrKWFlLndvcmRzW3RlXT10aGlzLndvcmRzW3RlXTthZS5sZW5ndGg9bX1pZigwIT09bSlpZih0aGlzLmxlbmd0aD5tKWZvcih0aGlzLmxlbmd0aC09bSx0ZT0wO3RlPHRoaXMubGVuZ3RoO3RlKyspdGhpcy53b3Jkc1t0ZV09dGhpcy53b3Jkc1t0''@;'; put 'put ''ZSttXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBzZT0wO2Zvcih0ZT10aGlzLmxlbmd0aC0xO3RlPj0wJiYoMCE9PXNlfHx0ZT49aik7dGUtLSl7dmFyIHdlPTB8dGhpcy53b3Jkc1t0ZV07dGhpcy53b3Jkc1t0ZV09c2U8PDI2LUV8d2U+Pj5FLHNlPXdlJkF9cmV0''@;'; put 'put ''dXJuIGFlJiYwIT09c2UmJihhZS53b3Jkc1thZS5sZW5ndGgrK109c2UpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpLHRoaXMuaXVzaHJuKEMsVCxIKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKEMpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihDKX0sdy5wcm90b3R5cGUuc2hybj1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKEMpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihDKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMl''@;'; put 'put ''MjYsSD0oQy1UKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8VCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PVQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09VCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4''@;'; put 'put ''ODYzPj4+VDw8VCksdGhpcy5fc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKEMpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzww''@;'; put 'put ''P3RoaXMuaXN1Ym4oLUMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PUM/KHRoaXMud29yZHNbMF09Qy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKEMpLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihDKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKEMpe3RoaXMud29yZHNbMF0rPUM7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXT49NjcxMDg4NjQ7VCsrKXRoaXMud29yZHNbVF0tPTY3MTA4ODY0LFQ9PT10''@;'; put 'put ''aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbVCsxXT0xOnRoaXMud29yZHNbVCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxUKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKEMpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4''@;'; put 'put ''NjQpLEM8MClyZXR1cm4gdGhpcy5pYWRkbigtQyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPUMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhp''@;'; put 'put ''cy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPDA7VCsrKXRoaXMud29yZHNbVF0rPTY3MTA4ODY0LHRoaXMud29yZHNbVCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKEMpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oQyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oQyxULEgpe3ZhciBFO3RoaXMuX2V4cGFuZChDLmxlbmd0aCtIKTt2YXIgbSxBPTA7Zm9yKEU9MDtFPEMubGVuZ3RoO0UrKyl7''@;'; put 'put ''bT0oMHx0aGlzLndvcmRzW0UrSF0pK0E7dmFyIGFlPSgwfEMud29yZHNbRV0pKlQ7QT0oKG0tPTY3MTA4ODYzJmFlKT4+MjYpLShhZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0UrSF09NjcxMDg4NjMmbX1mb3IoO0U8dGhpcy5sZW5ndGgtSDtFKyspQT0obT0oMHx0aGlzLndvcmRzW0UrSF0p''@;'; put 'put ''K0EpPj4yNix0aGlzLndvcmRzW0UrSF09NjcxMDg4NjMmbTtpZigwPT09QSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IoZygtMT09PUEpLEE9MCxFPTA7RTx0aGlzLmxlbmd0aDtFKyspQT0obT0tKDB8dGhpcy53b3Jkc1tFXSkrQSk+PjI2LHRoaXMud29yZHNbRV09NjcxMDg4NjMmbTtyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKEMsVCl7dmFyIEgsaj10aGlzLmNsb25lKCksRT1DLG09MHxFLndvcmRzW0UubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhtKSkmJihFPUUudXNobG4oSCksai5p''@;'; put 'put ''dXNobG4oSCksbT0wfEUud29yZHNbRS5sZW5ndGgtMV0pO3ZhciB0ZSxhZT1qLmxlbmd0aC1FLmxlbmd0aDtpZigibW9kIiE9PVQpeyh0ZT1uZXcgdyhudWxsKSkubGVuZ3RoPWFlKzEsdGUud29yZHM9bmV3IEFycmF5KHRlLmxlbmd0aCk7Zm9yKHZhciBzZT0wO3NlPHRlLmxlbmd0aDtzZSsr''@;'; put 'put ''KXRlLndvcmRzW3NlXT0wfXZhciB3ZT1qLmNsb25lKCkuX2lzaGxuc3VibXVsKEUsMSxhZSk7MD09PXdlLm5lZ2F0aXZlJiYoaj13ZSx0ZSYmKHRlLndvcmRzW2FlXT0xKSk7Zm9yKHZhciBVZT1hZS0xO1VlPj0wO1VlLS0pe3ZhciBKZT02NzEwODg2NCooMHxqLndvcmRzW0UubGVuZ3RoK1Vl''@;'; put 'put ''XSkrKDB8ai53b3Jkc1tFLmxlbmd0aCtVZS0xXSk7Zm9yKEplPU1hdGgubWluKEplL218MCw2NzEwODg2Myksai5faXNobG5zdWJtdWwoRSxKZSxVZSk7MCE9PWoubmVnYXRpdmU7KUplLS0sai5uZWdhdGl2ZT0wLGouX2lzaGxuc3VibXVsKEUsMSxVZSksai5pc1plcm8oKXx8KGoubmVnYXRp''@;'; put 'put ''dmVePTEpO3RlJiYodGUud29yZHNbVWVdPUplKX1yZXR1cm4gdGUmJnRlLl9zdHJpcCgpLGouX3N0cmlwKCksImRpdiIhPT1UJiYwIT09SCYmai5pdXNocm4oSCkse2Rpdjp0ZXx8bnVsbCxtb2Q6an19LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIGcoIUMuaXNa''@;'; put 'put ''ZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYm''@;'; put 'put ''MCE9PUUubmVnYXRpdmUmJkUuaWFkZChDKSkse2RpdjpqLG1vZDpFfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlPyhtPXRoaXMuZGl2bW9kKEMubmVnKCksVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSkse2RpdjpqLG1vZDptLm1vZH0pOnRoaXMubmVnYXRpdmUmQy5u''@;'; put 'put ''ZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLm5lZygpLFQpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaXN1YihDKSkse2RpdjptLmRpdixtb2Q6RX0pOkMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChDKTwwP3tkaXY6bmV3IHcoMCks''@;'; put 'put ''bW9kOnRoaXN9OjE9PT1DLmxlbmd0aD8iZGl2Ij09PVQ/e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09VD97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhp''@;'; put 'put ''cy5tb2RybihDLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoQyxUKTt2YXIgaixFLG19LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMs''@;'; put 'put ''Im1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmRpdm1vZChDKTtpZihULm1vZC5pc1plcm8oKSlyZXR1cm4gVC5kaXY7''@;'; put 'put ''dmFyIEg9MCE9PVQuZGl2Lm5lZ2F0aXZlP1QubW9kLmlzdWIoQyk6VC5tb2Qsaj1DLnVzaHJuKDEpLEU9Qy5hbmRsbigxKSxtPUguY21wKGopO3JldHVybiBtPDB8fDE9PT1FJiYwPT09bT9ULmRpdjowIT09VC5kaXYubmVnYXRpdmU/VC5kaXYuaXN1Ym4oMSk6VC5kaXYuaWFkZG4oMSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZyhDPD02NzEwODg2Myk7Zm9yKHZhciBIPSgxPDwyNiklQyxqPTAsRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKWo9KEgqaisoMHx0aGlzLndvcmRzW0VdKSklQztyZXR1cm4gVD8tajpqfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5tb2RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm1vZHJuKEMpfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0wLGo9dGhpcy5sZW5ndGgtMTtqPj0wO2otLSl7dmFyIEU9KDB8dGhpcy53b3Jkc1tq''@;'; put 'put ''XSkrNjcxMDg4NjQqSDt0aGlzLndvcmRzW2pdPUUvQ3wwLEg9RSVDfXJldHVybiB0aGlzLl9zdHJpcCgpLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKEMpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9u''@;'; put 'put ''KEMpe2coMD09PUMubmVnYXRpdmUpLGcoIUMuaXNaZXJvKCkpO3ZhciBUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxFPW5ldyB3KDApLG09bmV3IHcoMCksQT1uZXcgdygxKSxhZT0wO1QuaXNFdmVuKCkm''@;'; put 'put ''JkguaXNFdmVuKCk7KVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrYWU7Zm9yKHZhciB0ZT1ILmNsb25lKCksc2U9VC5jbG9uZSgpOyFULmlzWmVybygpOyl7Zm9yKHZhciB3ZT0wLFVlPTE7IShULndvcmRzWzBdJlVlKSYmd2U8MjY7Kyt3ZSxVZTw8PTEpO2lmKHdlPjApZm9yKFQuaXVzaHJu''@;'; put 'put ''KHdlKTt3ZS0tID4wOykoai5pc09kZCgpfHxFLmlzT2RkKCkpJiYoai5pYWRkKHRlKSxFLmlzdWIoc2UpKSxqLml1c2hybigxKSxFLml1c2hybigxKTtmb3IodmFyIEplPTAsb3Q9MTshKEgud29yZHNbMF0mb3QpJiZKZTwyNjsrK0plLG90PDw9MSk7aWYoSmU+MClmb3IoSC5pdXNocm4oSmUp''@;'; put 'put ''O0plLS0gPjA7KShtLmlzT2RkKCl8fEEuaXNPZGQoKSkmJihtLmlhZGQodGUpLEEuaXN1YihzZSkpLG0uaXVzaHJuKDEpLEEuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKG0pLEUuaXN1YihBKSk6KEguaXN1YihUKSxtLmlzdWIoaiksQS5pc3ViKEUpKX1yZXR1cm57''@;'; put 'put ''YTptLGI6QSxnY2Q6SC5pdXNobG4oYWUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUpLGcoIUMuaXNaZXJvKCkpO3ZhciB3ZSxUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgaj1u''@;'; put 'put ''ZXcgdygxKSxFPW5ldyB3KDApLG09SC5jbG9uZSgpO1QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgQT0wLGFlPTE7IShULndvcmRzWzBdJmFlKSYmQTwyNjsrK0EsYWU8PD0xKTtpZihBPjApZm9yKFQuaXVzaHJuKEEpO0EtLSA+MDspai5pc09kZCgpJiZqLmlhZGQobSksai5p''@;'; put 'put ''dXNocm4oMSk7Zm9yKHZhciB0ZT0wLHNlPTE7IShILndvcmRzWzBdJnNlKSYmdGU8MjY7Kyt0ZSxzZTw8PTEpO2lmKHRlPjApZm9yKEguaXVzaHJuKHRlKTt0ZS0tID4wOylFLmlzT2RkKCkmJkUuaWFkZChtKSxFLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihFKSk6''@;'; put 'put ''KEguaXN1YihUKSxFLmlzdWIoaikpfXJldHVybih3ZT0wPT09VC5jbXBuKDEpP2o6RSkuY21wbigwKTwwJiZ3ZS5pYWRkKEMpLHdlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oQyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gQy5hYnMoKTtpZihDLmlzWmVybygpKXJldHVybiB0aGlzLmFi''@;'; put 'put ''cygpO3ZhciBUPXRoaXMuY2xvbmUoKSxIPUMuY2xvbmUoKTtULm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgaj0wO1QuaXNFdmVuKCkmJkguaXNFdmVuKCk7aisrKVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtULmlzRXZlbigpOylULml1c2hybigxKTtmb3Io''@;'; put 'put ''O0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBFPVQuY21wKEgpO2lmKEU8MCl7dmFyIG09VDtUPUgsSD1tfWVsc2UgaWYoMD09PUV8fDA9PT1ILmNtcG4oMSkpYnJlYWs7VC5pc3ViKEgpfXJldHVybiBILml1c2hsbihqKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5lZ2NkKEMpLmEudW1vZChDKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiB0aGlzLndvcmRzWzBdJkN9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjYsaj0xPDxUO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1q''@;'; put 'put ''LHRoaXM7Zm9yKHZhciBFPWosbT1IOzAhPT1FJiZtPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9MHx0aGlzLndvcmRzW21dO0U9KEErPUUpPj4+MjYsdGhpcy53b3Jkc1ttXT1BJj02NzEwODg2M31yZXR1cm4gMCE9PUUmJih0aGlzLndvcmRzW21dPUUsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oQyl7dmFyIEgsVD1DPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFUKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiZUKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtUJiYoQz0tQyksZyhDPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgaj0wfHRoaXMud29yZHNbMF07SD1qPT09Qz8wOmo8Qz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8w''@;'; put 'put ''fC1IOkh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihDKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBUPXRoaXMudWNtcChDKTtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmU/MHwtVDpUfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKEMpe2lmKHRoaXMubGVuZ3RoPkMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPEMubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgVD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIGo9MHx0aGlzLndvcmRz''@;'; put 'put ''W0hdLEU9MHxDLndvcmRzW0hdO2lmKGohPT1FKXtqPEU/VD0tMTpqPkUmJihUPTEpO2JyZWFrfX1yZXR1cm4gVH0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21w''@;'; put 'put ''KEMpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wbihDKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubHQ9ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPD0wfSx3LnByb3RvdHlwZS5l''@;'; put 'put ''cW49ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXAoQyl9LHcucmVkPWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgcChDKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGco''@;'; put 'put ''IXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxDLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucmVkPUMsdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxDKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElT''@;'; put 'put ''dWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxDKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5tdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihD''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQuaW11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCYmIUMucmVkLCJy''@;'; put 'put ''ZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLEMpfTt2YXIgbWU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBfZSh4LEMpe3RoaXMubmFtZT14LHRoaXMucD1uZXcgdyhDLDE2KSx0''@;'; put 'put ''aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gVGUoKXtfZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFNlKCl7X2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiB6ZSgpe19lLmNhbGwodGhpcywicDE5''@;'; put 'put ''MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVigpe19lLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9''@;'; put 'put ''ZnVuY3Rpb24gcCh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpe3ZhciBDPXcuX3ByaW1lKHgpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgZyh4Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGIo''@;'; put 'put ''eCl7cC5jYWxsKHRoaXMseCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0''@;'; put 'put ''aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1fZS5wcm90b3R5cGUuX3Rt''@;'; put 'put ''cD1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksQ30sX2UucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oQyl7dmFyIEgsVD1DO2Rve3RoaXMuc3BsaXQoVCx0aGlzLnRtcCksSD0oVD0oVD10aGlzLmlt''@;'; put 'put ''dWxLKFQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBqPUg8dGhpcy5uPy0xOlQudWNtcCh0aGlzLnApO3JldHVybiAwPT09aj8oVC53b3Jkc1swXT0wLFQubGVuZ3RoPTEpOmo+MD9ULmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ULnN0cmlwP1Quc3Ry''@;'; put 'put ''aXAoKTpULl9zdHJpcCgpLFR9LF9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe0MuaXVzaHJuKHRoaXMubiwwLFQpfSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaW11bCh0aGlzLmspfSxCKFRlLF9lKSxUZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24o''@;'; put 'put ''QyxUKXtmb3IodmFyIEg9NDE5NDMwMyxqPU1hdGgubWluKEMubGVuZ3RoLDkpLEU9MDtFPGo7RSsrKVQud29yZHNbRV09Qy53b3Jkc1tFXTtpZihULmxlbmd0aD1qLEMubGVuZ3RoPD05KXJldHVybiBDLndvcmRzWzBdPTAsdm9pZChDLmxlbmd0aD0xKTt2YXIgbT1DLndvcmRzWzldO2ZvcihU''@;'; put 'put ''LndvcmRzW1QubGVuZ3RoKytdPW0mSCxFPTEwO0U8Qy5sZW5ndGg7RSsrKXt2YXIgQT0wfEMud29yZHNbRV07Qy53b3Jkc1tFLTEwXT0oQSZIKTw8NHxtPj4+MjIsbT1BfUMud29yZHNbRS0xMF09bT4+Pj0yMixDLmxlbmd0aC09MD09PW0mJkMubGVuZ3RoPjEwPzEwOjl9LFRlLnByb3RvdHlw''@;'; put 'put ''ZS5pbXVsSz1mdW5jdGlvbihDKXtDLndvcmRzW0MubGVuZ3RoXT0wLEMud29yZHNbQy5sZW5ndGgrMV09MCxDLmxlbmd0aCs9Mjtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTB8Qy53b3Jkc1tIXTtDLndvcmRzW0hdPTY3MTA4ODYzJihUKz05NzcqaiksVD02NCpqKyhU''@;'; put 'put ''LzY3MTA4ODY0fDApfXJldHVybiAwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmKEMubGVuZ3RoLS0sMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJkMubGVuZ3RoLS0pLEN9LEIoU2UsX2UpLEIoemUsX2UpLEIoVixfZSksVi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPTAs''@;'; put 'put ''SD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHxDLndvcmRzW0hdKStULEU9NjcxMDg4NjMmajtqPj4+PTI2LEMud29yZHNbSF09RSxUPWp9cmV0dXJuIDAhPT1UJiYoQy53b3Jkc1tDLmxlbmd0aCsrXT1UKSxDfSx3Ll9wcmltZT1mdW5jdGlvbihDKXtpZihtZVtDXSlyZXR1cm4gbWVb''@;'; put 'put ''Q107dmFyIFQ7aWYoImsyNTYiPT09QylUPW5ldyBUZTtlbHNlIGlmKCJwMjI0Ij09PUMpVD1uZXcgU2U7ZWxzZSBpZigicDE5MiI9PT1DKVQ9bmV3IHplO2Vsc2V7aWYoInAyNTUxOSIhPT1DKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK0MpO1Q9bmV3IFZ9cmV0dXJuIG1lW0Nd''@;'; put 'put ''PVQsVH0scC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHAucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKEMs''@;'; put 'put ''VCl7ZyghKEMubmVnYXRpdmV8VC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCYmQy5yZWQ9PT1ULnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxwLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnBy''@;'; put 'put ''aW1lP3RoaXMucHJpbWUuaXJlZHVjZShDKS5fZm9yY2VSZWQodGhpcyk6KE4oQyxDLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLEMpfSxwLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaXNaZXJvKCk/Qy5jbG9uZSgpOnRoaXMubS5zdWIoQykuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxwLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5hZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5f''@;'; put 'put ''dmVyaWZ5MihDLFQpO3ZhciBIPUMuaWFkZChUKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0scC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuc3ViKFQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRo''@;'; put 'put ''aXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pc3ViKFQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0scC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKEMsVCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3ZlcmlmeTEoQyksdGhpcy5pbW9kKEMudXNobG4oVCkpfSxwLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5pbXVsKFQpKX0scC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3Zl''@;'; put 'put ''cmlmeTIoQyxUKSx0aGlzLmltb2QoQy5tdWwoVCkpfSxwLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltdWwoQyxDLmNsb25lKCkpfSxwLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubXVsKEMsQyl9LHAucHJvdG90eXBlLnNxcnQ9ZnVuY3Rp''@;'; put 'put ''b24oQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBUPXRoaXMubS5hbmRsbigzKTtpZihnKFQlMj09MSksMz09PVQpe3ZhciBIPXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coQyxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksRT0w''@;'; put 'put ''OyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspRSsrLGouaXVzaHJuKDEpO2coIWouaXNaZXJvKCkpO3ZhciBtPW5ldyB3KDEpLnRvUmVkKHRoaXMpLEE9bS5yZWROZWcoKSxhZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdGU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih0ZT1uZXcgdygy''@;'; put 'put ''KnRlKnRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codGUsYWUpLmNtcChBKTspdGUucmVkSUFkZChBKTtmb3IodmFyIHNlPXRoaXMucG93KHRlLGopLHdlPXRoaXMucG93KEMsai5hZGRuKDEpLml1c2hybigxKSksVWU9dGhpcy5wb3coQyxqKSxKZT1FOzAhPT1VZS5jbXAobSk7KXtmb3Io''@;'; put 'put ''dmFyIG90PVVlLE1lPTA7MCE9PW90LmNtcChtKTtNZSsrKW90PW90LnJlZFNxcigpO2coTWU8SmUpO3ZhciB2ZT10aGlzLnBvdyhzZSxuZXcgdygxKS5pdXNobG4oSmUtTWUtMSkpO3dlPXdlLnJlZE11bCh2ZSksc2U9dmUucmVkU3FyKCksVWU9VWUucmVkTXVsKHNlKSxKZT1NZX1yZXR1cm4g''@;'; put 'put ''d2V9LHAucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVQubmVnYXRpdmU/KFQubmVnYXRpdmU9MCx0aGlzLmltb2QoVCkucmVkTmVnKCkpOnRoaXMuaW1vZChUKX0scC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMsVCl7aWYoVC5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PVQuY21wbigxKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBqPW5ldyBBcnJheSgxNik7alswXT1uZXcgdygxKS50b1JlZCh0aGlzKSxqWzFdPUM7Zm9yKHZhciBFPTI7RTxqLmxlbmd0aDtFKyspaltFXT10aGlzLm11bChq''@;'; put 'put ''W0UtMV0sQyk7dmFyIG09alswXSxBPTAsYWU9MCx0ZT1ULmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dGUmJih0ZT0yNiksRT1ULmxlbmd0aC0xO0U+PTA7RS0tKXtmb3IodmFyIHNlPVQud29yZHNbRV0sd2U9dGUtMTt3ZT49MDt3ZS0tKXt2YXIgVWU9c2U+PndlJjE7bSE9PWpbMF0mJihtPXRo''@;'; put 'put ''aXMuc3FyKG0pKSwwIT09VWV8fDAhPT1BPyhBPDw9MSxBfD1VZSwoND09KythZXx8MD09PUUmJjA9PT13ZSkmJihtPXRoaXMubXVsKG0saltBXSksYWU9MCxBPTApKTphZT0wfXRlPTI2fXJldHVybiBtfSxwLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7dmFyIFQ9Qy51bW9kKHRo''@;'; put 'put ''aXMubSk7cmV0dXJuIFQ9PT1DP1QuY2xvbmUoKTpUfSxwLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD1DLmNsb25lKCk7cmV0dXJuIFQucmVkPW51bGwsVH0sdy5tb250PWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgYihDKX0sQihiLHApLGIucHJvdG90eXBlLmNvbnZl''@;'; put 'put ''cnRUbz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMudXNobG4odGhpcy5zaGlmdCkpfSxiLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmltb2QoQy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFQucmVkPW51bGwsVH0sYi5wcm90b3R5cGUuaW11bD1m''@;'; put 'put ''dW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIEMud29yZHNbMF09MCxDLmxlbmd0aD0xLEM7dmFyIEg9Qy5pbXVsKFQpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIo''@;'; put 'put ''aikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1DLm11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJu''@;'; put 'put ''IEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sMzUyOTQ6KHVlLFgseSk9Pnt2YXIgSTtmdW5jdGlvbiBfKEIpe3RoaXMucmFuZD1CfWlmKHVlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIEl8fChJPW5ldyBfKG51bGwpKSxJLmdlbmVyYXRlKHcpfSx1ZS5leHBvcnRzLlJh''@;'; put 'put ''bmQ9XyxfLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmFuZCh3KX0sXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXModyk7Zm9yKHZhciBQPW5ldyBVaW50OEFycmF5''@;'; put 'put ''KHcpLEY9MDtGPFAubGVuZ3RoO0YrKylQW0ZdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIFB9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50''@;'; put 'put ''OEFycmF5KHcpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYubXND''@;'; put 'put ''cnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBnPXkoOTE0MjYpO2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBnLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3JldHVybiBnLnJhbmRvbUJ5dGVzKHcpfX1jYXRjaHt9fSwxMjM3NToodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBf''@;'; put 'put ''KE8pe0kuaXNCdWZmZXIoTyl8fChPPUkuZnJvbShPKSk7Zm9yKHZhciB6PU8ubGVuZ3RoLzR8MCxOPW5ldyBBcnJheSh6KSxMPTA7TDx6O0wrKylOW0xdPU8ucmVhZFVJbnQzMkJFKDQqTCk7cmV0dXJuIE59ZnVuY3Rpb24gZyhPKXtmb3IoOzA8Ty5sZW5ndGg7TysrKU9bMF09MH1mdW5jdGlv''@;'; put 'put ''biBCKE8seixOLEwsSyl7Zm9yKHZhciBsZSxtZSxfZSxUZSxVPU5bMF0sVz1OWzFdLFk9TlsyXSxxPU5bM10sZWU9T1swXV56WzBdLEo9T1sxXV56WzFdLG5lPU9bMl1eelsyXSxpZT1PWzNdXnpbM10sU2U9NCx6ZT0xO3plPEs7emUrKylsZT1VW2VlPj4+MjRdXldbSj4+PjE2JjI1NV1eWVtu''@;'; put 'put ''ZT4+PjgmMjU1XV5xWzI1NSZpZV1eeltTZSsrXSxtZT1VW0o+Pj4yNF1eV1tuZT4+PjE2JjI1NV1eWVtpZT4+PjgmMjU1XV5xWzI1NSZlZV1eeltTZSsrXSxfZT1VW25lPj4+MjRdXldbaWU+Pj4xNiYyNTVdXllbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltTZSsrXSxUZT1VW2llPj4+MjRdXldb''@;'; put 'put ''ZWU+Pj4xNiYyNTVdXllbSj4+PjgmMjU1XV5xWzI1NSZuZV1eeltTZSsrXSxlZT1sZSxKPW1lLG5lPV9lLGllPVRlO3JldHVybiBsZT0oTFtlZT4+PjI0XTw8MjR8TFtKPj4+MTYmMjU1XTw8MTZ8TFtuZT4+PjgmMjU1XTw8OHxMWzI1NSZpZV0pXnpbU2UrK10sbWU9KExbSj4+PjI0XTw8MjR8''@;'; put 'put ''TFtuZT4+PjE2JjI1NV08PDE2fExbaWU+Pj44JjI1NV08PDh8TFsyNTUmZWVdKV56W1NlKytdLF9lPShMW25lPj4+MjRdPDwyNHxMW2llPj4+MTYmMjU1XTw8MTZ8TFtlZT4+PjgmMjU1XTw8OHxMWzI1NSZKXSleeltTZSsrXSxUZT0oTFtpZT4+PjI0XTw8MjR8TFtlZT4+PjE2JjI1NV08PDE2''@;'; put 'put ''fExbSj4+PjgmMjU1XTw8OHxMWzI1NSZuZV0pXnpbU2UrK10sW2xlPj4+PTAsbWU+Pj49MCxfZT4+Pj0wLFRlPj4+PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBPPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspT1t6XT16''@;'; put 'put ''PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2YXIgTj1bXSxMPVtdLEs9W1tdLFtdLFtdLFtdXSxVPVtbXSxbXSxbXSxbXV0sVz0wLFk9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9WV5ZPDwxXlk8PDJeWTw8M15ZPDw0O05bV109ZWU9ZWU+Pj44XjI1NSZlZV45OSxMW2VlXT1XO3ZhciBKPU9bV10s''@;'; put 'put ''bmU9T1tKXSxpZT1PW25lXSxsZT0yNTcqT1tlZV1eMTY4NDMwMDgqZWU7S1swXVtXXT1sZTw8MjR8bGU+Pj44LEtbMV1bV109bGU8PDE2fGxlPj4+MTYsS1syXVtXXT1sZTw8OHxsZT4+PjI0LEtbM11bV109bGUsVVswXVtlZV09KGxlPTE2ODQzMDA5KmllXjY1NTM3Km5lXjI1NypKXjE2ODQz''@;'; put 'put ''MDA4KlcpPDwyNHxsZT4+PjgsVVsxXVtlZV09bGU8PDE2fGxlPj4+MTYsVVsyXVtlZV09bGU8PDh8bGU+Pj4yNCxVWzNdW2VlXT1sZSwwPT09Vz9XPVk9MTooVz1KXk9bT1tPW2llXkpdXV0sWV49T1tPW1ldXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpMLFNVQl9NSVg6SyxJTlZfU1VCX01J''@;'; put 'put ''WDpVfX0oKTtmdW5jdGlvbiBGKE8pe3RoaXMuX2tleT1fKE8pLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYsRi5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIE89dGhpcy5fa2V5LHo9Ty5sZW5ndGgsTj16KzYsTD00KihOKzEpLEs9W10sVT0wO1U8ejtVKyspS1tVXT1PW1VdO2ZvcihVPXo7VTxMO1UrKyl7dmFyIFc9S1tVLTFdO1Ulej09MD8oVz1QLlNCT1hbKFc9Vzw8OHxXPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbVz4+''@;'; put 'put ''PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10sV149d1tVL3p8MF08PDI0KTp6PjYmJlUlej09NCYmKFc9UC5TQk9YW1c+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSksS1tVXT1L''@;'; put 'put ''W1Utel1eV31mb3IodmFyIFk9W10scT0wO3E8TDtxKyspe3ZhciBlZT1MLXEsSj1LW2VlLShxJTQ/MDo0KV07WVtxXT1xPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhb''@;'; put 'put ''Ml1bUC5TQk9YW0o+Pj44JjI1NV1dXlAuSU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5kcz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9WX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKE8pe3JldHVybiBCKE89''@;'; put 'put ''XyhPKSx0aGlzLl9rZXlTY2hlZHVsZSxQLlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoTyksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJF''@;'; put 'put ''KHpbMF0sMCksTi53cml0ZVVJbnQzMkJFKHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJbnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihPKXt2YXIgej0oTz1fKE8pKVsxXTtPWzFdPU9bM10sT1szXT16O3ZhciBOPUIo''@;'; put 'put ''Tyx0aGlzLl9pbnZLZXlTY2hlZHVsZSxQLklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTD1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTC53cml0ZVVJbnQzMkJFKE5bMF0sMCksTC53cml0ZVVJbnQzMkJFKE5bM10sNCksTC53cml0ZVVJbnQzMkJFKE5bMl0sOCksTC53''@;'; put 'put ''cml0ZVVJbnQzMkJFKE5bMV0sMTIpLEx9LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7Zyh0aGlzLl9rZXlTY2hlZHVsZSksZyh0aGlzLl9pbnZLZXlTY2hlZHVsZSksZyh0aGlzLl9rZXkpfSx1ZS5leHBvcnRzLkFFUz1GfSwxOTMwNzoodWUsWCx5KT0+e3ZhciBJPXkoMTIzNzUpLF89''@;'; put 'put ''eSgyNzA1NCkuQnVmZmVyLGc9eSgzMjQ3KSxCPXkoNzE5OTMpLHc9eSg4NTkxNyksUD15KDEzNTQ2KSxGPXkoOTU3MjUpO2Z1bmN0aW9uIE4oTCxLLFUsVyl7Zy5jYWxsKHRoaXMpO3ZhciBZPV8uYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEspO3ZhciBxPXRoaXMuX2NpcGhl''@;'; put 'put ''ci5lbmNyeXB0QmxvY2soWSk7dGhpcy5fZ2hhc2g9bmV3IHcocSksVT1mdW5jdGlvbiB6KEwsSyxVKXtpZigxMj09PUsubGVuZ3RoKXJldHVybiBMLl9maW5JRD1fLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDFdKV0pLF8uY29uY2F0KFtLLF8uZnJvbShbMCwwLDAsMl0pXSk7dmFyIFc9bmV3''@;'; put 'put ''IHcoVSksWT1LLmxlbmd0aCxxPVklMTY7Vy51cGRhdGUoSykscSYmVy51cGRhdGUoXy5hbGxvYyhxPTE2LXEsMCkpLFcudXBkYXRlKF8uYWxsb2MoOCwwKSk7dmFyIGVlPTgqWSxKPV8uYWxsb2MoOCk7Si53cml0ZVVJbnRCRShlZSwwLDgpLFcudXBkYXRlKEopLEwuX2ZpbklEPVcuc3RhdGU7''@;'; put 'put ''dmFyIG5lPV8uZnJvbShMLl9maW5JRCk7cmV0dXJuIEYobmUpLG5lfSh0aGlzLFUscSksdGhpcy5fcHJldj1fLmZyb20oVSksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Vyx0aGlzLl9hbGVuPTAsdGhp''@;'; put 'put ''cy5fbGVuPTAsdGhpcy5fbW9kZT1MLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9QihOLGcpLE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIEs9MTYtdGhpcy5fYWxlbiUxNjtLPDE2JiYoSz1fLmFsbG9j''@;'; put 'put ''KEssMCksdGhpcy5fZ2hhc2gudXBkYXRlKEspKX10aGlzLl9jYWxsZWQ9ITA7dmFyIFU9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsTCk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P0w6VSksdGhpcy5fbGVuKz1MLmxlbmd0aCxVfSxOLnByb3RvdHlwZS5fZmluYWw9''@;'; put 'put ''ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBMPVAodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0''@;'; put 'put ''aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24gTyhMLEspe3ZhciBVPTA7TC5sZW5ndGghPT1LLmxlbmd0aCYmVSsrO2Zvcih2YXIgVz1NYXRoLm1pbihMLmxlbmd0aCxLLmxlbmd0aCksWT0wO1k8VzsrK1kpVSs9TFtZXV5L''@;'; put 'put ''W1ldO3JldHVybiBVfShMLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1MLHRoaXMuX2NpcGhlci5zY3J1YigpfSxOLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0''@;'; put 'put ''aW9uKCl7aWYodGhpcy5fZGVjcnlwdHx8IV8uaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxOLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1''@;'; put 'put ''bmN0aW9uKEspe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPUt9LE4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihLKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoSyksdGhpcy5fYWxlbis9Sy5sZW5ndGh9LHVlLmV4cG9ydHM9Tn0sNDMzODg6KHVlLFgseSk9Pnt2YXIgST15KDM1MCksXz15KDYwMTAyKSxnPXkoMzIxOSk7''@;'; put 'put ''WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9SS5jcmVhdGVDaXBoZXIsWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PUkuY3JlYXRlQ2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj1fLmNy''@;'; put 'put ''ZWF0ZURlY2lwaGVyaXYsWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gQigpe3JldHVybiBPYmplY3Qua2V5cyhnKX19LDYwMTAyOih1ZSxYLHkpPT57dmFyIEk9eSgxOTMwNyksXz15KDI3MDU0KS5CdWZmZXIsZz15KDYwNTAzKSxCPXkoOTE4MjEpLHc9eSgzMjQ3KSxQPXko''@;'; put 'put ''MTIzNzUpLEY9eSgxODIxMSk7ZnVuY3Rpb24geihXLFkscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoWSksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEw''@;'; put 'put ''fWZ1bmN0aW9uIE4oKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFkscSl7dmFyIGVlPWdbVy50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1fLmZy''@;'; put 'put ''b20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPV8uZnJvbShZKSksWS5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitZLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1vZHVsZSxZLHEsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFkscSwhMCk6bmV3IHooZWUubW9kdWxlLFkscSl9eSg3MTk5Mykoeix3KSx6LnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFkscSxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXE9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWSksZWUucHVzaChxKTtyZXR1cm4gXy5jb25jYXQoZWUpfSx6''@;'; put 'put ''LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBMKFcpe3ZhciBZPVdbMTVdO2lmKFk8MXx8WT4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtm''@;'; put 'put ''b3IodmFyIHE9LTE7KytxPFk7KWlmKFdbcSsoMTYtWSldIT09WSl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PVkpcmV0dXJuIFcuc2xpY2UoMCwxNi1ZKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVykpO2lmKFcpdGhyb3cgbmV3IEVycm9yKCJk''@;'; put 'put ''YXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1fLmNvbmNhdChbdGhpcy5j''@;'; put 'put ''YWNoZSxXXSl9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihXKXt2YXIgWTtpZihXKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3Ro''@;'; put 'put ''Pj0xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWTtyZXR1cm4gbnVsbH0sTi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sWC5jcmVhdGVEZWNp''@;'; put 'put ''cGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIHE9Z1tXLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFksITEscS5rZXkscS5pdik7cmV0dXJuIEsoVyxlZS5rZXksZWUuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9''@;'; put 'put ''S30sMzUwOih1ZSxYLHkpPT57dmFyIEk9eSg2MDUwMyksXz15KDE5MzA3KSxnPXkoMjcwNTQpLkJ1ZmZlcixCPXkoOTE4MjEpLHc9eSgzMjQ3KSxQPXkoMTIzNzUpLEY9eSgxODIxMSk7ZnVuY3Rpb24geihXLFkscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBMLHRoaXMuX2NpcGhl''@;'; put 'put ''cj1uZXcgUC5BRVMoWSksdGhpcy5fcHJldj1nLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfXkoNzE5OTMpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZLHEsZWU9W107WT10aGlzLl9jYWNo''@;'; put 'put ''ZS5nZXQoKTspcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKSxlZS5wdXNoKHEpO3JldHVybiBnLmNvbmNhdChlZSl9O3ZhciBOPWcuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIEwoKXt0aGlzLmNhY2hlPWcuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFkscSl7dmFyIGVlPUlbVy50b0xv''@;'; put 'put ''d2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1nLmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5n''@;'; put 'put ''dGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Zy5mcm9tKHEpKSwiR0NNIiE9PWVlLm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1vZHVs''@;'; put 'put ''ZSxZLHEpOiJhdXRoIj09PWVlLnR5cGU/bmV3IF8oZWUubW9kdWxlLFkscSk6bmV3IHooZWUubW9kdWxlLFkscSl9ei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gVz10aGlzLl9tb2RlLmVu''@;'; put 'put ''Y3J5cHQodGhpcyxXKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxXO2lmKCFXLmVxdWFscyhOKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihX''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LEwucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPWcuY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBXPXRoaXMu''@;'; put 'put ''Y2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksV31yZXR1cm4gbnVsbH0sTC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFc9MTYtdGhpcy5jYWNoZS5sZW5ndGgsWT1nLmFsbG9jVW5zYWZlKFcpLHE9LTE7KytxPFc7KVku''@;'; put 'put ''d3JpdGVVSW50OChXLHEpO3JldHVybiBnLmNvbmNhdChbdGhpcy5jYWNoZSxZXSl9LFguY3JlYXRlQ2lwaGVyaXY9SyxYLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIHE9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUg''@;'; put 'put ''dHlwZSIpO3ZhciBlZT1GKFksITEscS5rZXkscS5pdik7cmV0dXJuIEsoVyxlZS5rZXksZWUuaXYpfX0sODU5MTc6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz1JLmFsbG9jKDE2LDApO2Z1bmN0aW9uIEIoUCl7dmFyIEY9SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEYud3Jp''@;'; put 'put ''dGVVSW50MzJCRShQWzBdPj4+MCwwKSxGLndyaXRlVUludDMyQkUoUFsxXT4+PjAsNCksRi53cml0ZVVJbnQzMkJFKFBbMl0+Pj4wLDgpLEYud3JpdGVVSW50MzJCRShQWzNdPj4+MCwxMiksRn1mdW5jdGlvbiB3KFApe3RoaXMuaD1QLHRoaXMuc3RhdGU9SS5hbGxvYygxNiwwKSx0aGlzLmNh''@;'; put 'put ''Y2hlPUkuYWxsb2NVbnNhZmUoMCl9dy5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oUCl7Zm9yKHZhciBGPS0xOysrRjxQLmxlbmd0aDspdGhpcy5zdGF0ZVtGXV49UFtGXTt0aGlzLl9tdWx0aXBseSgpfSx3LnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIE8sTixQPWZ1''@;'; put 'put ''bmN0aW9uIGcoUCl7cmV0dXJuW1AucmVhZFVJbnQzMkJFKDApLFAucmVhZFVJbnQzMkJFKDQpLFAucmVhZFVJbnQzMkJFKDgpLFAucmVhZFVJbnQzMkJFKDEyKV19KHRoaXMuaCksRj1bMCwwLDAsMF0sTD0tMTsrK0w8MTI4Oyl7Zm9yKCEhKHRoaXMuc3RhdGVbfn4oTC84KV0mMTw8Ny1MJTgp''@;'; put 'put ''JiYoRlswXV49UFswXSxGWzFdXj1QWzFdLEZbMl1ePVBbMl0sRlszXV49UFszXSksTj0hISgxJlBbM10pLE89MztPPjA7Ty0tKVBbT109UFtPXT4+PjF8KDEmUFtPLTFdKTw8MzE7UFswXT1QWzBdPj4+MSxOJiYoUFswXT1QWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9QihGKX0sdy5wcm90b3R5''@;'; put 'put ''cGUudXBkYXRlPWZ1bmN0aW9uKFApe3RoaXMuY2FjaGU9SS5jb25jYXQoW3RoaXMuY2FjaGUsUF0pO2Zvcih2YXIgRjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KUY9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goRil9LHcu''@;'; put 'put ''cHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKFAsRil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKEkuY29uY2F0KFt0aGlzLmNhY2hlLF9dLDE2KSksdGhpcy5naGFzaChCKFswLFAsMCxGXSkpLHRoaXMuc3RhdGV9LHVlLmV4cG9ydHM9d30sOTU3MjU6dWU9Pnt1ZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIFgoeSl7Zm9yKHZhciBfLEk9eS5sZW5ndGg7SS0tOyl7aWYoMjU1IT09KF89eS5yZWFkVUludDgoSSkpKXtfKysseS53cml0ZVVJbnQ4KF8sSSk7YnJlYWt9eS53cml0ZVVJbnQ4KDAsSSl9fX0sMzQxMzM6KHVlLFgseSk9Pnt2YXIgST15KDEzNTQ2KTtYLmVuY3J5cHQ9''@;'; put 'put ''ZnVuY3Rpb24oXyxnKXt2YXIgQj1JKGcsXy5fcHJldik7cmV0dXJuIF8uX3ByZXY9Xy5fY2lwaGVyLmVuY3J5cHRCbG9jayhCKSxfLl9wcmV2fSxYLmRlY3J5cHQ9ZnVuY3Rpb24oXyxnKXt2YXIgQj1fLl9wcmV2O18uX3ByZXY9Zzt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGcpO3Jl''@;'; put 'put ''dHVybiBJKHcsQil9fSwxNzA5MDoodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoMTM1NDYpO2Z1bmN0aW9uIGcoQix3LFApe3ZhciBGPXcubGVuZ3RoLE89Xyh3LEIuX2NhY2hlKTtyZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2UoRiksQi5fcHJldj1JLmNvbmNhdChb''@;'; put 'put ''Qi5fcHJldixQP3c6T10pLE99WC5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIE8sRj1JLmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYoMD09PUIuX2NhY2hlLmxlbmd0aCYmKEIuX2NhY2hlPUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiksQi5fcHJldj1JLmFsbG9j''@;'; put 'put ''VW5zYWZlKDApKSwhKEIuX2NhY2hlLmxlbmd0aDw9dy5sZW5ndGgpKXtGPUkuY29uY2F0KFtGLGcoQix3LFApXSk7YnJlYWt9Rj1JLmNvbmNhdChbRixnKEIsdy5zbGljZSgwLE89Qi5fY2FjaGUubGVuZ3RoKSxQKV0pLHc9dy5zbGljZShPKX1yZXR1cm4gRn19LDcxMDM5Oih1ZSxYLHkpPT57''@;'; put 'put ''dmFyIEk9eSgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8oQix3LFApe2Zvcih2YXIgTCxLLE89LTEsTj0wOysrTzw4OylOKz0oMTI4JihLPUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldilbMF1eKEw9dyYxPDw3LU8/MTI4OjApKSk+Pk8lOCxCLl9wcmV2PWcoQi5fcHJldixQP0w6Syk7''@;'; put 'put ''cmV0dXJuIE59ZnVuY3Rpb24gZyhCLHcpe3ZhciBQPUIubGVuZ3RoLEY9LTEsTz1JLmFsbG9jVW5zYWZlKEIubGVuZ3RoKTtmb3IoQj1JLmNvbmNhdChbQixJLmZyb20oW3ddKV0pOysrRjxQOylPW0ZdPUJbRl08PDF8QltGKzFdPj43O3JldHVybiBPfVguZW5jcnlwdD1mdW5jdGlvbihCLHcs''@;'; put 'put ''UCl7Zm9yKHZhciBGPXcubGVuZ3RoLE89SS5hbGxvY1Vuc2FmZShGKSx6PS0xOysrejxGOylPW3pdPV8oQix3W3pdLFApO3JldHVybiBPfX0sNzI1NzY6KHVlLFgseSk9Pnt2YXIgST15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gXyhnLEIsdyl7dmFyIEY9Zy5fY2lwaGVyLmVuY3J5cHRCbG9j''@;'; put 'put ''ayhnLl9wcmV2KVswXV5CO3JldHVybiBnLl9wcmV2PUkuY29uY2F0KFtnLl9wcmV2LnNsaWNlKDEpLEkuZnJvbShbdz9COkZdKV0pLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKGcsQix3KXtmb3IodmFyIFA9Qi5sZW5ndGgsRj1JLmFsbG9jVW5zYWZlKFApLE89LTE7KytPPFA7KUZbT109XyhnLEJb''@;'; put 'put ''T10sdyk7cmV0dXJuIEZ9fSw3MDMzNjoodWUsWCx5KT0+e3ZhciBJPXkoMTM1NDYpLF89eSgyNzA1NCkuQnVmZmVyLGc9eSg5NTcyNSk7ZnVuY3Rpb24gQihQKXt2YXIgRj1QLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KFAuX3ByZXYpO3JldHVybiBnKFAuX3ByZXYpLEZ9WC5lbmNyeXB0PWZ1''@;'; put 'put ''bmN0aW9uKFAsRil7dmFyIE89TWF0aC5jZWlsKEYubGVuZ3RoLzE2KSx6PVAuX2NhY2hlLmxlbmd0aDtQLl9jYWNoZT1fLmNvbmNhdChbUC5fY2FjaGUsXy5hbGxvY1Vuc2FmZSgxNipPKV0pO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciBMPUIoUCksSz16KzE2Kk47UC5fY2FjaGUud3JpdGVV''@;'; put 'put ''SW50MzJCRShMWzBdLEsrMCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzFdLEsrNCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzJdLEsrOCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzNdLEsrMTIpfXZhciBVPVAuX2NhY2hlLnNsaWNlKDAsRi5sZW5ndGgpO3JldHVybiBQLl9jYWNo''@;'; put 'put ''ZT1QLl9jYWNoZS5zbGljZShGLmxlbmd0aCksSShGLFUpfX0sMzc1MTM6KHVlLFgpPT57WC5lbmNyeXB0PWZ1bmN0aW9uKHksSSl7cmV0dXJuIHkuX2NpcGhlci5lbmNyeXB0QmxvY2soSSl9LFguZGVjcnlwdD1mdW5jdGlvbih5LEkpe3JldHVybiB5Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKEkp''@;'; put 'put ''fX0sNjA1MDM6KHVlLFgseSk9Pnt2YXIgST17RUNCOnkoMzc1MTMpLENCQzp5KDM0MTMzKSxDRkI6eSgxNzA5MCksQ0ZCODp5KDcyNTc2KSxDRkIxOnkoNzEwMzkpLE9GQjp5KDQ2ODU0KSxDVFI6eSg3MDMzNiksR0NNOnkoNzAzMzYpfSxfPXkoMzIxOSk7Zm9yKHZhciBnIGluIF8pX1tnXS5t''@;'; put 'put ''b2R1bGU9SVtfW2ddLm1vZGVdO3VlLmV4cG9ydHM9X30sNDY4NTQ6KHVlLFgseSk9Pnt2YXIgST15KDEzNTQ2KTtmdW5jdGlvbiBfKGcpe3JldHVybiBnLl9wcmV2PWcuX2NpcGhlci5lbmNyeXB0QmxvY2soZy5fcHJldiksZy5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24oZyxCKXtmb3IoO2cu''@;'; put 'put ''X2NhY2hlLmxlbmd0aDxCLmxlbmd0aDspZy5fY2FjaGU9QnVmZmVyLmNvbmNhdChbZy5fY2FjaGUsXyhnKV0pO3ZhciB3PWcuX2NhY2hlLnNsaWNlKDAsQi5sZW5ndGgpO3JldHVybiBnLl9jYWNoZT1nLl9jYWNoZS5zbGljZShCLmxlbmd0aCksSShCLHcpfX0sOTE4MjE6KHVlLFgseSk9Pnt2''@;'; put 'put ''YXIgST15KDEyMzc1KSxfPXkoMjcwNTQpLkJ1ZmZlcixnPXkoMzI0Nyk7ZnVuY3Rpb24gdyhQLEYsTyx6KXtnLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhGKSx0aGlzLl9wcmV2PV8uZnJvbShPKSx0aGlzLl9jYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hl''@;'; put 'put ''PV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD16LHRoaXMuX21vZGU9UH15KDcxOTkzKSh3LGcpLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFAsdGhpcy5fZGVjcnlwdCl9LHcucHJvdG90eXBlLl9maW5hbD1mdW5j''@;'; put 'put ''dGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSx1ZS5leHBvcnRzPXd9LDg4ODYyOih1ZSxYLHkpPT57dmFyIEk9eSgzOTc5OSksXz15KDQzMzg4KSxnPXkoNjA1MDMpLEI9eSg1OTU3MSksdz15KDE4MjExKTtmdW5jdGlvbiBPKEwsSyxVKXtpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKXJl''@;'; put 'put ''dHVybiBfLmNyZWF0ZUNpcGhlcml2KEwsSyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkx9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiB6KEwsSyxVKXtpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKXJldHVybiBf''@;'; put 'put ''LmNyZWF0ZURlY2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TCxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9ZnVuY3Rpb24gUChMLEspe3ZhciBV''@;'; put 'put ''LFc7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tMXS5pdjtlbHNle2lmKCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJuIE8oTCxZLmtleSxZ''@;'; put 'put ''Lml2KX0sWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PU8sWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPWZ1bmN0aW9uIEYoTCxLKXt2YXIgVSxXO2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtVPTgqQltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiB6KEwsWS5rZXksWS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1YLkRlY2lwaGVyaXY9eixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBOKCl7''@;'; put 'put ''cmV0dXJuIE9iamVjdC5rZXlzKEIpLmNvbmNhdChfLmdldENpcGhlcnMoKSl9fSwzOTc5OToodWUsWCx5KT0+e3ZhciBJPXkoMzI0NyksXz15KDcxNTQ5KSxnPXkoNzE5OTMpLEI9eSgyNzA1NCkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVz''@;'; put 'put ''LWVkZTMiOl8uRURFLCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpfLkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sTz1GLm1vZGUudG9M''@;'; put 'put ''b3dlckNhc2UoKSx6PXdbT107Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTD1GLmtleTtCLmlzQnVmZmVyKEwpfHwoTD1CLmZyb20oTCkpLCgiZGVzLWVkZSI9PT1PfHwiZGVzLWVkZS1jYmMiPT09TykmJihMPUIuY29uY2F0KFtMLEwuc2xpY2UoMCw4KV0pKTt2YXIgSz1G''@;'; put 'put ''Lml2O0IuaXNCdWZmZXIoSyl8fChLPUIuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TCxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sdWUuZXhwb3J0cz1QLGcoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KEYpe3JldHVybiBCLmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBCLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sNTk1NzE6KHVlLFgpPT57WFsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxYWyJkZXMtY2JjIl09WC5kZXM9''@;'; put 'put ''e2tleTo4LGl2Ojh9LFhbImRlcy1lZGUzLWNiYyJdPVguZGVzMz17a2V5OjI0LGl2Ojh9LFhbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxYWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sWFsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDE0MTA1Oih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoOTE3KSxfPXkoMzM0MiksZz15KDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gQihGKXt2YXIgeixPPUYubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97ej1uZXcgSShfKE8pKX13aGlsZSh6LmNtcChGLm1vZHVsdXMpPj0wfHwhei51bW9kKEYucHJpbWUxKXx8IXoudW1vZChGLnBy''@;'; put 'put ''aW1lMikpO3JldHVybiB6fWZ1bmN0aW9uIFAoRixPKXt2YXIgej1mdW5jdGlvbiB3KEYpe3ZhciBPPUIoRik7cmV0dXJue2JsaW5kZXI6Ty50b1JlZChJLm1vbnQoRi5tb2R1bHVzKSkucmVkUG93KG5ldyBJKEYucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOk8uaW52bShG''@;'; put 'put ''Lm1vZHVsdXMpfX0oTyksTj1PLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEw9bmV3IEkoRikubXVsKHouYmxpbmRlcikudW1vZChPLm1vZHVsdXMpLEs9TC50b1JlZChJLm1vbnQoTy5wcmltZTEpKSxVPUwudG9SZWQoSS5tb250KE8ucHJpbWUyKSksVz1PLmNvZWZmaWNpZW50LFk9Ty5wcmltZTEs''@;'; put 'put ''cT1PLnByaW1lMixlZT1LLnJlZFBvdyhPLmV4cG9uZW50MSkuZnJvbVJlZCgpLEo9VS5yZWRQb3coTy5leHBvbmVudDIpLmZyb21SZWQoKSxuZT1lZS5pc3ViKEopLmltdWwoVykudW1vZChZKS5pbXVsKHEpO3JldHVybiBKLmlhZGQobmUpLmltdWwoei51bmJsaW5kZXIpLnVtb2QoTy5tb2R1''@;'; put 'put ''bHVzKS50b0FycmF5TGlrZShnLCJiZSIsTil9UC5nZXRyPUIsdWUuZXhwb3J0cz1QfSw5OTU2MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXkoNjI5NTEpfSw3OTE0MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDY3MjExKSxn''@;'; put 'put ''PXkoNTk0MiksQj15KDcxOTkzKSx3PXkoNDMxNTApLFA9eSg3NDc1NCksRj15KDYyOTUxKTtmdW5jdGlvbiBPKEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgVT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPVUu''@;'; put 'put ''aGFzaCx0aGlzLl9oYXNoPV8oVS5oYXNoKSx0aGlzLl90YWc9VS5pZCx0aGlzLl9zaWduVHlwZT1VLnNpZ259ZnVuY3Rpb24geihLKXtnLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9o''@;'; put 'put ''YXNoPV8oVS5oYXNoKSx0aGlzLl90YWc9VS5pZCx0aGlzLl9zaWduVHlwZT1VLnNpZ259ZnVuY3Rpb24gTihLKXtyZXR1cm4gbmV3IE8oSyl9ZnVuY3Rpb24gTChLKXtyZXR1cm4gbmV3IHooSyl9T2JqZWN0LmtleXMoRikuZm9yRWFjaChmdW5jdGlvbihLKXtGW0tdLmlkPUkuZnJvbShGW0td''@;'; put 'put ''LmlkLCJoZXgiKSxGW0sudG9Mb3dlckNhc2UoKV09RltLXX0pLEIoTyxnLldyaXRhYmxlKSxPLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxXLFkpe3RoaXMuX2hhc2gudXBkYXRlKFUpLFkoKX0sTy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIHRoaXMuX2hhc2gu''@;'; put 'put ''dXBkYXRlKCJzdHJpbmciPT10eXBlb2YgVT9JLmZyb20oVSxXKTpVKSx0aGlzfSxPLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFUsVyl7dGhpcy5lbmQoKTt2YXIgWT10aGlzLl9oYXNoLmRpZ2VzdCgpLHE9dyhZLFUsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTty''@;'; put 'put ''ZXR1cm4gVz9xLnRvU3RyaW5nKFcpOnF9LEIoeixnLldyaXRhYmxlKSx6LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxXLFkpe3RoaXMuX2hhc2gudXBkYXRlKFUpLFkoKX0sei5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgVT9JLmZyb20oVSxXKTpVKSx0aGlzfSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oVSxXLFkpe3ZhciBxPSJzdHJpbmciPT10eXBlb2YgVz9JLmZyb20oVyxZKTpXO3RoaXMuZW5kKCk7dmFyIGVlPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIFAocSxlZSxVLHRo''@;'; put 'put ''aXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LHVlLmV4cG9ydHM9e1NpZ246TixWZXJpZnk6TCxjcmVhdGVTaWduOk4sY3JlYXRlVmVyaWZ5Okx9fSw0MzE1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI3MDU0KS5CdWZmZXIsXz15KDU2NDMyKSxnPXkoMTQxMDUpLEI9eSg5MDUx''@;'; put 'put ''OCkuZWMsdz15KDkxNyksUD15KDY1NjY3KSxGPXkoNjQ1ODkpO2Z1bmN0aW9uIFUoSixuZSxpZSxsZSl7aWYoKEo9SS5mcm9tKEoudG9BcnJheSgpKSkubGVuZ3RoPG5lLmJ5dGVMZW5ndGgoKSl7dmFyIG1lPUkuYWxsb2MobmUuYnl0ZUxlbmd0aCgpLUoubGVuZ3RoKTtKPUkuY29uY2F0KFtt''@;'; put 'put ''ZSxKXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5jdGlvbiBZKEosbmUpe0o9KEo9VyhKLG5lKSkubW9kKG5lKTt2YXIgaWU9SS5mcm9tKEoudG9BcnJheSgpKTtpZihpZS5sZW5ndGg8bmUuYnl0ZUxlbmd0aCgpKXt2YXIgbGU9SS5hbGxvYyhuZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtp''@;'; put 'put ''ZT1JLmNvbmNhdChbbGUsaWVdKX1yZXR1cm4gaWV9KGllLG5lKSxTZT1JLmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciB6ZT1JLmFsbG9jKF9lKTtyZXR1cm4gemU9XyhsZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFswXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLFNl''@;'; put 'put ''PV8obGUsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCkse2s6emU9XyhsZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFsxXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLHY6U2U9XyhsZSx6ZSkudXBkYXRlKFNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9''@;'; put 'put ''bmV3IHcoSiksbGU9KEoubGVuZ3RoPDwzKS1uZS5iaXRMZW5ndGgoKTtyZXR1cm4gbGU+MCYmaWUuaXNocm4obGUpLGllfWZ1bmN0aW9uIHEoSixuZSxpZSl7dmFyIGxlLG1lO2Rve2ZvcihsZT1JLmFsbG9jKDApOzgqbGUubGVuZ3RoPEouYml0TGVuZ3RoKCk7KW5lLnY9XyhpZSxuZS5rKS51''@;'; put 'put ''cGRhdGUobmUudikuZGlnZXN0KCksbGU9SS5jb25jYXQoW2xlLG5lLnZdKTttZT1XKGxlLEopLG5lLms9XyhpZSxuZS5rKS51cGRhdGUobmUudikudXBkYXRlKEkuZnJvbShbMF0pKS5kaWdlc3QoKSxuZS52PV8oaWUsbmUuaykudXBkYXRlKG5lLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09bWUu''@;'; put 'put ''Y21wKEopKTtyZXR1cm4gbWV9ZnVuY3Rpb24gZWUoSixuZSxpZSxsZSl7cmV0dXJuIEoudG9SZWQody5tb250KGllKSkucmVkUG93KG5lKS5mcm9tUmVkKCkubW9kKGxlKX11ZS5leHBvcnRzPWZ1bmN0aW9uIHooSixuZSxpZSxsZSxtZSl7dmFyIF9lPVAobmUpO2lmKF9lLmN1cnZlKXtpZigi''@;'; put 'put ''ZWNkc2EiIT09bGUmJiJlY2RzYS9yc2EiIT09bGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE4oSixuZSl7dmFyIGllPUZbbmUuY3VydmUuam9pbigiLiIpXTtpZighaWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIr''@;'; put 'put ''bmUuY3VydmUuam9pbigiLiIpKTt2YXIgX2U9bmV3IEIoaWUpLmtleUZyb21Qcml2YXRlKG5lLnByaXZhdGVLZXkpLnNpZ24oSik7cmV0dXJuIEkuZnJvbShfZS50b0RFUigpKX0oSixfZSl9aWYoImRzYSI9PT1fZS50eXBlKXtpZigiZHNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3Jvbmcg''@;'; put 'put ''cHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBMKEosbmUsaWUpe2Zvcih2YXIgemUsbGU9bmUucGFyYW1zLnByaXZfa2V5LG1lPW5lLnBhcmFtcy5wLF9lPW5lLnBhcmFtcy5xLFRlPW5lLnBhcmFtcy5nLFNlPW5ldyB3KDApLFY9VyhKLF9lKS5tb2QoX2UpLHA9ITEsYj1VKGxl''@;'; put 'put ''LF9lLEosaWUpOyExPT09cDspU2U9ZWUoVGUsemU9cShfZSxiLGllKSxtZSxfZSksMD09PShwPXplLmludm0oX2UpLmltdWwoVi5hZGQobGUubXVsKFNlKSkpLm1vZChfZSkpLmNtcG4oMCkmJihwPSExLFNlPW5ldyB3KDApKTtyZXR1cm4gZnVuY3Rpb24gSyhKLG5lKXtKPUoudG9BcnJheSgp''@;'; put 'put ''LG5lPW5lLnRvQXJyYXkoKSwxMjgmSlswXSYmKEo9WzBdLmNvbmNhdChKKSksMTI4Jm5lWzBdJiYobmU9WzBdLmNvbmNhdChuZSkpO3ZhciBsZT1bNDgsSi5sZW5ndGgrbmUubGVuZ3RoKzQsMixKLmxlbmd0aF07cmV0dXJuIGxlPWxlLmNvbmNhdChKLFsyLG5lLmxlbmd0aF0sbmUpLEkuZnJv''@;'; put 'put ''bShsZSl9KFNlLHApfShKLF9lLGllKX1pZigicnNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZvaWQgMCE9PW5lLnBhZGRpbmcmJjEhPT1uZS5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1''@;'; put 'put ''bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtKPUkuY29uY2F0KFttZSxKXSk7Zm9yKHZhciBUZT1fZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxTZT1bMCwxXTtKLmxlbmd0aCtTZS5sZW5ndGgrMTxUZTspU2UucHVzaCgyNTUpO1NlLnB1c2goMCk7Zm9yKHZhciB6ZT0tMTsrK3plPEoubGVuZ3Ro''@;'; put 'put ''OylTZS5wdXNoKEpbemVdKTtyZXR1cm4gZyhTZSxfZSl9LHVlLmV4cG9ydHMuZ2V0S2V5PVUsdWUuZXhwb3J0cy5tYWtlS2V5PXF9LDc0NzU0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoOTE3KSxnPXkoOTA1MTgpLmVjLEI9eSg2NTY2Nyksdz15''@;'; put 'put ''KDY0NTg5KTtmdW5jdGlvbiB6KE4sTCl7aWYoTi5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihOLmNtcChMKT49MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIil9dWUuZXhwb3J0cz1mdW5jdGlvbiBQKE4sTCxLLFUsVyl7dmFyIFk9QihLKTtpZigi''@;'; put 'put ''ZWMiPT09WS50eXBlKXtpZigiZWNkc2EiIT09VSYmImVjZHNhL3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEYoTixMLEspe3ZhciBVPXdbSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFVKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IGcoVSkudmVyaWZ5KEwsTixLLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KE4sTCxZKX1pZigiZHNhIj09PVkudHlwZSl7aWYoImRzYSIhPT1VKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE8oTixMLEspe3ZhciBVPUsuZGF0YS5wLFc9Sy5kYXRhLnEsWT1LLmRhdGEuZyxxPUsuZGF0YS5wdWJfa2V5LGVlPUIuc2lnbmF0dXJlLmRlY29kZShOLCJkZXIiKSxKPWVlLnMsbmU9ZWUucjt6KEos''@;'; put 'put ''VykseihuZSxXKTt2YXIgaWU9Xy5tb250KFUpLGxlPUouaW52bShXKTtyZXR1cm4gMD09PVkudG9SZWQoaWUpLnJlZFBvdyhuZXcgXyhMKS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgpLm11bChxLnRvUmVkKGllKS5yZWRQb3cobmUubXVsKGxlKS5tb2QoVykpLmZyb21SZWQoKSkubW9kKFUp''@;'; put 'put ''Lm1vZChXKS5jbXAobmUpfShOLEwsWSl9aWYoInJzYSIhPT1VJiYiZWNkc2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtMPUkuY29uY2F0KFtXLExdKTtmb3IodmFyIHE9WS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxlZT1bMV0sSj0wO0wubGVuZ3Ro''@;'; put 'put ''K2VlLmxlbmd0aCsyPHE7KWVlLnB1c2goMjU1KSxKKz0xO2VlLnB1c2goMCk7Zm9yKHZhciBuZT0tMTsrK25lPEwubGVuZ3RoOyllZS5wdXNoKExbbmVdKTtlZT1JLmZyb20oZWUpO3ZhciBpZT1fLm1vbnQoWS5tb2R1bHVzKTtOPShOPW5ldyBfKE4pLnRvUmVkKGllKSkucmVkUG93KG5ldyBf''@;'; put 'put ''KFkucHVibGljRXhwb25lbnQpKSxOPUkuZnJvbShOLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBsZT1KPDg/MTowO2ZvcihxPU1hdGgubWluKE4ubGVuZ3RoLGVlLmxlbmd0aCksTi5sZW5ndGghPT1lZS5sZW5ndGgmJihsZT0xKSxuZT0tMTsrK25lPHE7KWxlfD1OW25lXV5lZVtuZV07cmV0''@;'; put 'put ''dXJuIDA9PT1sZX19LDEzNTQ2OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2Zvcih2YXIgXz1NYXRoLm1pbih5Lmxlbmd0aCxJLmxlbmd0aCksZz1uZXcgQnVmZmVyKF8pLEI9MDtCPF87KytCKWdbQl09eVtCXV5JW0JdO3JldHVybiBnfX0sODM4Mzg6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSgxMzk4MSksXz15KDIyMDIwKSxnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtYLkJ1ZmZlcj1GLFguU2xvd0J1ZmZlcj1mdW5j''@;'; put 'put ''dGlvbiBKKEllKXtyZXR1cm4rSWUhPUllJiYoSWU9MCksRi5hbGxvYygrSWUpfSxYLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBCPTIxNDc0ODM2NDc7ZnVuY3Rpb24gUChJZSl7aWYoSWU+Qil0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0llKyciIGlzIGludmFsaWQgZm9y''@;'; put 'put ''IG9wdGlvbiAic2l6ZSInKTt2YXIgVmU9bmV3IFVpbnQ4QXJyYXkoSWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoVmUsRi5wcm90b3R5cGUpLFZlfWZ1bmN0aW9uIEYoSWUsVmUsa2Upe2lmKCJudW1iZXIiPT10eXBlb2YgSWUpe2lmKCJzdHJpbmciPT10eXBlb2YgVmUpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIEwoSWUpfXJldHVybiBPKEllLFZlLGtlKX1mdW5jdGlvbiBPKEllLFZlLGtlKXtpZigic3RyaW5nIj09dHlwZW9mIEllKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbiBLKEllLFZlKXtpZigoInN0cmluZyIhPXR5cGVvZiBWZXx8IiI9PT1WZSkmJihWZT0idXRmOCIpLCFGLmlzRW5jb2RpbmcoVmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrVmUpO3ZhciBrZT0wfG5lKEllLFZlKSxBZT1QKGtlKSxfdD1BZS53''@;'; put 'put ''cml0ZShJZSxWZSk7cmV0dXJuIF90IT09a2UmJihBZT1BZS5zbGljZSgwLF90KSksQWV9KEllLFZlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoSWUpKXJldHVybiBmdW5jdGlvbiBXKEllKXtpZihEZShJZSxVaW50OEFycmF5KSl7dmFyIFZlPW5ldyBVaW50OEFycmF5KEllKTtyZXR1cm4gWShW''@;'; put 'put ''ZS5idWZmZXIsVmUuYnl0ZU9mZnNldCxWZS5ieXRlTGVuZ3RoKX1yZXR1cm4gVShJZSl9KEllKTtpZihudWxsPT1JZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBv''@;'; put 'put ''ciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBJZSk7aWYoRGUoSWUsQXJyYXlCdWZmZXIpfHxJZSYmRGUoSWUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKERlKEllLFNoYXJlZEFycmF5QnVmZmVyKXx8SWUmJkRl''@;'; put 'put ''KEllLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBZKEllLFZlLGtlKTtpZigibnVtYmVyIj09dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicp''@;'; put 'put ''O3ZhciBBZT1JZS52YWx1ZU9mJiZJZS52YWx1ZU9mKCk7aWYobnVsbCE9QWUmJkFlIT09SWUpcmV0dXJuIEYuZnJvbShBZSxWZSxrZSk7dmFyIF90PWZ1bmN0aW9uIHEoSWUpe2lmKEYuaXNCdWZmZXIoSWUpKXt2YXIgVmU9MHxlZShJZS5sZW5ndGgpLGtlPVAoVmUpO3JldHVybiAwPT09a2Uu''@;'; put 'put ''bGVuZ3RofHxJZS5jb3B5KGtlLDAsMCxWZSksa2V9cmV0dXJuIHZvaWQgMCE9PUllLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIEllLmxlbmd0aHx8RmUoSWUubGVuZ3RoKT9QKDApOlUoSWUpOiJCdWZmZXIiPT09SWUudHlwZSYmQXJyYXkuaXNBcnJheShJZS5kYXRhKT9VKEllLmRhdGEpOnZv''@;'; put 'put ''aWQgMH0oSWUpO2lmKF90KXJldHVybiBfdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgSWVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gRi5mcm9tKEllW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLFZl''@;'; put 'put ''LGtlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBJZSl9ZnVuY3Rpb24geihJZSl7''@;'; put 'put ''aWYoIm51bWJlciIhPXR5cGVvZiBJZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKEllPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytJZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9''@;'; put 'put ''ZnVuY3Rpb24gTChJZSl7cmV0dXJuIHooSWUpLFAoSWU8MD8wOjB8ZWUoSWUpKX1mdW5jdGlvbiBVKEllKXtmb3IodmFyIFZlPUllLmxlbmd0aDwwPzA6MHxlZShJZS5sZW5ndGgpLGtlPVAoVmUpLEFlPTA7QWU8VmU7QWUrPTEpa2VbQWVdPTI1NSZJZVtBZV07cmV0dXJuIGtlfWZ1bmN0aW9u''@;'; put 'put ''IFkoSWUsVmUsa2Upe2lmKFZlPDB8fEllLmJ5dGVMZW5ndGg8VmUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKEllLmJ5dGVMZW5ndGg8VmUrKGtlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0''@;'; put 'put ''c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIEFlO3JldHVybiBBZT12b2lkIDA9PT1WZSYmdm9pZCAwPT09a2U/bmV3IFVpbnQ4QXJyYXkoSWUpOnZvaWQgMD09PWtlP25ldyBVaW50OEFycmF5KEllLFZlKTpuZXcgVWludDhBcnJheShJZSxWZSxrZSksT2JqZWN0LnNldFByb3RvdHlwZU9m''@;'; put 'put ''KEFlLEYucHJvdG90eXBlKSxBZX1mdW5jdGlvbiBlZShJZSl7aWYoSWU+PUIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK0IudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxJZX1mdW5j''@;'; put 'put ''dGlvbiBuZShJZSxWZSl7aWYoRi5pc0J1ZmZlcihJZSkpcmV0dXJuIEllLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoSWUpfHxEZShJZSxBcnJheUJ1ZmZlcikpcmV0dXJuIEllLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBJZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUg''@;'; put 'put ''InN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgSWUpO3ZhciBrZT1JZS5sZW5ndGgsQWU9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighQWUmJjA9''@;'; put 'put ''PT1rZSlyZXR1cm4gMDtmb3IodmFyIF90PSExOzspc3dpdGNoKFZlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBrZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBvdChJZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYx''@;'; put 'put ''NmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMiprZTtjYXNlImhleCI6cmV0dXJuIGtlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFhlKEllKS5sZW5ndGg7ZGVmYXVsdDppZihfdClyZXR1cm4gQWU/LTE6b3QoSWUpLmxlbmd0aDtWZT0oIiIrVmUpLnRvTG93ZXJDYXNlKCksX3Q9ITB9fWZ1''@;'; put 'put ''bmN0aW9uIGllKEllLFZlLGtlKXt2YXIgQWU9ITE7aWYoKHZvaWQgMD09PVZlfHxWZTwwKSYmKFZlPTApLFZlPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PWtlfHxrZT50aGlzLmxlbmd0aCkmJihrZT10aGlzLmxlbmd0aCksa2U8PTApfHwoa2U+Pj49MCk8PShWZT4+Pj0wKSlyZXR1cm4iIjtm''@;'; put 'put ''b3IoSWV8fChJZT0idXRmOCIpOzspc3dpdGNoKEllKXtjYXNlImhleCI6cmV0dXJuIEUodGhpcyxWZSxrZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4geCh0aGlzLFZlLGtlKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLFZlLGtlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnki''@;'; put 'put ''OnJldHVybiBqKHRoaXMsVmUsa2UpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYih0aGlzLFZlLGtlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIG0odGhpcyxWZSxrZSk7ZGVmYXVsdDppZihBZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJV''@;'; put 'put ''bmtub3duIGVuY29kaW5nOiAiK0llKTtJZT0oSWUrIiIpLnRvTG93ZXJDYXNlKCksQWU9ITB9fWZ1bmN0aW9uIGxlKEllLFZlLGtlKXt2YXIgQWU9SWVbVmVdO0llW1ZlXT1JZVtrZV0sSWVba2VdPUFlfWZ1bmN0aW9uIG1lKEllLFZlLGtlLEFlLF90KXtpZigwPT09SWUubGVuZ3RoKXJldHVy''@;'; put 'put ''bi0xO2lmKCJzdHJpbmciPT10eXBlb2Yga2U/KEFlPWtlLGtlPTApOmtlPjIxNDc0ODM2NDc/a2U9MjE0NzQ4MzY0NzprZTwtMjE0NzQ4MzY0OCYmKGtlPS0yMTQ3NDgzNjQ4KSxGZShrZT0ra2UpJiYoa2U9X3Q/MDpJZS5sZW5ndGgtMSksa2U8MCYmKGtlPUllLmxlbmd0aCtrZSksa2U+PUll''@;'; put 'put ''Lmxlbmd0aCl7aWYoX3QpcmV0dXJuLTE7a2U9SWUubGVuZ3RoLTF9ZWxzZSBpZihrZTwwKXtpZighX3QpcmV0dXJuLTE7a2U9MH1pZigic3RyaW5nIj09dHlwZW9mIFZlJiYoVmU9Ri5mcm9tKFZlLEFlKSksRi5pc0J1ZmZlcihWZSkpcmV0dXJuIDA9PT1WZS5sZW5ndGg/LTE6X2UoSWUsVmUs''@;'; put 'put ''a2UsQWUsX3QpO2lmKCJudW1iZXIiPT10eXBlb2YgVmUpcmV0dXJuIFZlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/X3Q/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKEllLFZlLGtlKTpVaW50OEFycmF5LnByb3RvdHlwZS5s''@;'; put 'put ''YXN0SW5kZXhPZi5jYWxsKEllLFZlLGtlKTpfZShJZSxbVmVdLGtlLEFlLF90KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBfZShJZSxWZSxrZSxBZSxfdCl7dmFyIE10LG50PTEsUWU9SWUubGVuZ3RoLHVuPVZl''@;'; put 'put ''Lmxlbmd0aDtpZih2b2lkIDAhPT1BZSYmKCJ1Y3MyIj09PShBZT1TdHJpbmcoQWUpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09QWV8fCJ1dGYxNmxlIj09PUFlfHwidXRmLTE2bGUiPT09QWUpKXtpZihJZS5sZW5ndGg8Mnx8VmUubGVuZ3RoPDIpcmV0dXJuLTE7bnQ9MixRZS89Mix1bi89''@;'; put 'put ''MixrZS89Mn1mdW5jdGlvbiB5dCh0dCxIZSl7cmV0dXJuIDE9PT1udD90dFtIZV06dHQucmVhZFVJbnQxNkJFKEhlKm50KX1pZihfdCl7dmFyIER0PS0xO2ZvcihNdD1rZTtNdDxRZTtNdCsrKWlmKHl0KEllLE10KT09PXl0KFZlLC0xPT09RHQ/MDpNdC1EdCkpe2lmKC0xPT09RHQmJihEdD1N''@;'; put 'put ''dCksTXQtRHQrMT09PXVuKXJldHVybiBEdCpudH1lbHNlLTEhPT1EdCYmKE10LT1NdC1EdCksRHQ9LTF9ZWxzZSBmb3Ioa2UrdW4+UWUmJihrZT1RZS11biksTXQ9a2U7TXQ+PTA7TXQtLSl7Zm9yKHZhciBpdD0hMCwkZT0wOyRlPHVuOyRlKyspaWYoeXQoSWUsTXQrJGUpIT09eXQoVmUsJGUp''@;'; put 'put ''KXtpdD0hMTticmVha31pZihpdClyZXR1cm4gTXR9cmV0dXJuLTF9ZnVuY3Rpb24gVGUoSWUsVmUsa2UsQWUpe2tlPU51bWJlcihrZSl8fDA7dmFyIF90PUllLmxlbmd0aC1rZTtBZT8oQWU9TnVtYmVyKEFlKSk+X3QmJihBZT1fdCk6QWU9X3Q7dmFyIG50PVZlLmxlbmd0aDtBZT5udC8yJiYo''@;'; put 'put ''QWU9bnQvMik7Zm9yKHZhciBRZT0wO1FlPEFlOysrUWUpe3ZhciB1bj1wYXJzZUludChWZS5zdWJzdHIoMipRZSwyKSwxNik7aWYoRmUodW4pKXJldHVybiBRZTtJZVtrZStRZV09dW59cmV0dXJuIFFlfWZ1bmN0aW9uIFNlKEllLFZlLGtlLEFlKXtyZXR1cm4gamUob3QoVmUsSWUubGVuZ3Ro''@;'; put 'put ''LWtlKSxJZSxrZSxBZSl9ZnVuY3Rpb24gemUoSWUsVmUsa2UsQWUpe3JldHVybiBqZShmdW5jdGlvbiBNZShJZSl7Zm9yKHZhciBWZT1bXSxrZT0wO2tlPEllLmxlbmd0aDsrK2tlKVZlLnB1c2goMjU1JkllLmNoYXJDb2RlQXQoa2UpKTtyZXR1cm4gVmV9KFZlKSxJZSxrZSxBZSl9ZnVuY3Rp''@;'; put 'put ''b24gVihJZSxWZSxrZSxBZSl7cmV0dXJuIGplKFhlKFZlKSxJZSxrZSxBZSl9ZnVuY3Rpb24gcChJZSxWZSxrZSxBZSl7cmV0dXJuIGplKGZ1bmN0aW9uIHZlKEllLFZlKXtmb3IodmFyIGtlLEFlLG50PVtdLFFlPTA7UWU8SWUubGVuZ3RoJiYhKChWZS09Mik8MCk7KytRZSlBZT0oa2U9SWUu''@;'; put 'put ''Y2hhckNvZGVBdChRZSkpPj44LG50LnB1c2goa2UlMjU2KSxudC5wdXNoKEFlKTtyZXR1cm4gbnR9KFZlLEllLmxlbmd0aC1rZSksSWUsa2UsQWUpfWZ1bmN0aW9uIGIoSWUsVmUsa2Upe3JldHVybiBJLmZyb21CeXRlQXJyYXkoMD09PVZlJiZrZT09PUllLmxlbmd0aD9JZTpJZS5zbGljZShW''@;'; put 'put ''ZSxrZSkpfWZ1bmN0aW9uIHgoSWUsVmUsa2Upe2tlPU1hdGgubWluKEllLmxlbmd0aCxrZSk7Zm9yKHZhciBBZT1bXSxfdD1WZTtfdDxrZTspe3ZhciB5dCxNdCxEdCxpdCxudD1JZVtfdF0sUWU9bnVsbCx1bj1udD4yMzk/NDpudD4yMjM/MzpudD4xOTE/MjoxO2lmKF90K3VuPD1rZSlzd2l0''@;'; put 'put ''Y2godW4pe2Nhc2UgMTpudDwxMjgmJihRZT1udCk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoeXQ9SWVbX3QrMV0pKSYmKGl0PSgzMSZudCk8PDZ8NjMmeXQpPjEyNyYmKFFlPWl0KTticmVhaztjYXNlIDM6TXQ9SWVbX3QrMl0sMTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYxMjg9PSgxOTIm''@;'; put 'put ''TXQpJiYoaXQ9KDE1Jm50KTw8MTJ8KDYzJnl0KTw8Nnw2MyZNdCk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0MykmJihRZT1pdCk7YnJlYWs7Y2FzZSA0Ok10PUllW190KzJdLER0PUllW190KzNdLDEyOD09KDE5MiYoeXQ9SWVbX3QrMV0pKSYmMTI4PT0oMTkyJk10KSYmMTI4PT0oMTkyJkR0''@;'; put 'put ''KSYmKGl0PSgxNSZudCk8PDE4fCg2MyZ5dCk8PDEyfCg2MyZNdCk8PDZ8NjMmRHQpPjY1NTM1JiZpdDwxMTE0MTEyJiYoUWU9aXQpfW51bGw9PT1RZT8oUWU9NjU1MzMsdW49MSk6UWU+NjU1MzUmJihBZS5wdXNoKChRZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksUWU9NTYzMjB8MTAyMyZR''@;'; put 'put ''ZSksQWUucHVzaChRZSksX3QrPXVufXJldHVybiBmdW5jdGlvbiBUKEllKXt2YXIgVmU9SWUubGVuZ3RoO2lmKFZlPD1DKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxJZSk7Zm9yKHZhciBrZT0iIixBZT0wO0FlPFZlOylrZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5h''@;'; put 'put ''cHBseShTdHJpbmcsSWUuc2xpY2UoQWUsQWUrPUMpKTtyZXR1cm4ga2V9KEFlKX1YLmtNYXhMZW5ndGg9QiwhKEYuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiB3KCl7dHJ5e3ZhciBJZT1uZXcgVWludDhBcnJheSgxKSxWZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJu''@;'; put 'put ''IE9iamVjdC5zZXRQcm90b3R5cGVPZihWZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKEllLFZlKSw0Mj09PUllLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3Im''@;'; put 'put ''JmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihGLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoRi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLEYucG9vbFNpemU9ODE5MixGLmZyb209ZnVuY3Rpb24oSWUsVmUsa2Upe3JldHVybiBPKEllLFZlLGtlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKEYucHJvdG90eXBlLFVpbnQ4''@;'; put 'put ''QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRixVaW50OEFycmF5KSxGLmFsbG9jPWZ1bmN0aW9uKEllLFZlLGtlKXtyZXR1cm4gZnVuY3Rpb24gTihJZSxWZSxrZSl7cmV0dXJuIHooSWUpLEllPD0wP1AoSWUpOnZvaWQgMCE9PVZlPyJzdHJpbmciPT10eXBlb2Yga2U/''@;'; put 'put ''UChJZSkuZmlsbChWZSxrZSk6UChJZSkuZmlsbChWZSk6UChJZSl9KEllLFZlLGtlKX0sRi5hbGxvY1Vuc2FmZT1mdW5jdGlvbihJZSl7cmV0dXJuIEwoSWUpfSxGLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihJZSl7cmV0dXJuIEwoSWUpfSxGLmlzQnVmZmVyPWZ1bmN0aW9uKFZlKXtyZXR1''@;'; put 'put ''cm4gbnVsbCE9VmUmJiEwPT09VmUuX2lzQnVmZmVyJiZWZSE9PUYucHJvdG90eXBlfSxGLmNvbXBhcmU9ZnVuY3Rpb24oVmUsa2Upe2lmKERlKFZlLFVpbnQ4QXJyYXkpJiYoVmU9Ri5mcm9tKFZlLFZlLm9mZnNldCxWZS5ieXRlTGVuZ3RoKSksRGUoa2UsVWludDhBcnJheSkmJihrZT1GLmZy''@;'; put 'put ''b20oa2Usa2Uub2Zmc2V0LGtlLmJ5dGVMZW5ndGgpKSwhRi5pc0J1ZmZlcihWZSl8fCFGLmlzQnVmZmVyKGtlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihWZT09''@;'; put 'put ''PWtlKXJldHVybiAwO2Zvcih2YXIgQWU9VmUubGVuZ3RoLF90PWtlLmxlbmd0aCxudD0wLFFlPU1hdGgubWluKEFlLF90KTtudDxRZTsrK250KWlmKFZlW250XSE9PWtlW250XSl7QWU9VmVbbnRdLF90PWtlW250XTticmVha31yZXR1cm4gQWU8X3Q/LTE6X3Q8QWU/MTowfSxGLmlzRW5jb2Rp''@;'; put 'put ''bmc9ZnVuY3Rpb24oVmUpe3N3aXRjaChTdHJpbmcoVmUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYx''@;'; put 'put ''NmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sRi5jb25jYXQ9ZnVuY3Rpb24oVmUsa2Upe2lmKCFBcnJheS5pc0FycmF5KFZlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYo''@;'; put 'put ''MD09PVZlLmxlbmd0aClyZXR1cm4gRi5hbGxvYygwKTt2YXIgQWU7aWYodm9pZCAwPT09a2UpZm9yKGtlPTAsQWU9MDtBZTxWZS5sZW5ndGg7KytBZSlrZSs9VmVbQWVdLmxlbmd0aDt2YXIgX3Q9Ri5hbGxvY1Vuc2FmZShrZSksbnQ9MDtmb3IoQWU9MDtBZTxWZS5sZW5ndGg7KytBZSl7dmFy''@;'; put 'put ''IFFlPVZlW0FlXTtpZihEZShRZSxVaW50OEFycmF5KSludCtRZS5sZW5ndGg+X3QubGVuZ3RoP0YuZnJvbShRZSkuY29weShfdCxudCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoX3QsUWUsbnQpO2Vsc2V7aWYoIUYuaXNCdWZmZXIoUWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJs''@;'; put 'put ''aXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtRZS5jb3B5KF90LG50KX1udCs9UWUubGVuZ3RofXJldHVybiBfdH0sRi5ieXRlTGVuZ3RoPW5lLEYucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxGLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgVmU9dGhp''@;'; put 'put ''cy5sZW5ndGg7aWYoVmUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGtlPTA7a2U8VmU7a2UrPTIpbGUodGhpcyxrZSxrZSsxKTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFZlPXRoaXMubGVuZ3RoO2lmKFZlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBrZT0wO2tlPFZlO2tlKz00KWxlKHRoaXMsa2Usa2UrMyksbGUodGhpcyxrZSsxLGtlKzIpO3Jl''@;'; put 'put ''dHVybiB0aGlzfSxGLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5sZW5ndGg7aWYoVmUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGtlPTA7a2U8VmU7a2UrPTgpbGUo''@;'; put 'put ''dGhpcyxrZSxrZSs3KSxsZSh0aGlzLGtlKzEsa2UrNiksbGUodGhpcyxrZSsyLGtlKzUpLGxlKHRoaXMsa2UrMyxrZSs0KTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Ri5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgVmU9dGhpcy5sZW5ndGg7cmV0''@;'; put 'put ''dXJuIDA9PT1WZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD94KHRoaXMsMCxWZSk6aWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxGLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oVmUpe2lmKCFGLmlzQnVmZmVyKFZlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEg''@;'; put 'put ''QnVmZmVyIik7cmV0dXJuIHRoaXM9PT1WZXx8MD09PUYuY29tcGFyZSh0aGlzLFZlKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBWZT0iIixrZT1YLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBWZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsa2UpLnJlcGxhY2UoLyguezJ9''@;'; put 'put ''KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+a2UmJihWZSs9IiAuLi4gIiksIjxCdWZmZXIgIitWZSsiPiJ9LGcmJihGLnByb3RvdHlwZVtnXT1GLnByb3RvdHlwZS5pbnNwZWN0KSxGLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKFZlLGtlLEFlLF90LG50KXtpZihEZShWZSxVaW50''@;'; put 'put ''OEFycmF5KSYmKFZlPUYuZnJvbShWZSxWZS5vZmZzZXQsVmUuYnl0ZUxlbmd0aCkpLCFGLmlzQnVmZmVyKFZlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAn''@;'; put 'put ''K3R5cGVvZiBWZSk7aWYodm9pZCAwPT09a2UmJihrZT0wKSx2b2lkIDA9PT1BZSYmKEFlPVZlP1ZlLmxlbmd0aDowKSx2b2lkIDA9PT1fdCYmKF90PTApLHZvaWQgMD09PW50JiYobnQ9dGhpcy5sZW5ndGgpLGtlPDB8fEFlPlZlLmxlbmd0aHx8X3Q8MHx8bnQ+dGhpcy5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKF90Pj1udCYma2U+PUFlKXJldHVybiAwO2lmKF90Pj1udClyZXR1cm4tMTtpZihrZT49QWUpcmV0dXJuIDE7aWYodGhpcz09PVZlKXJldHVybiAwO2Zvcih2YXIgUWU9KG50Pj4+PTApLShfdD4+Pj0wKSx1bj0oQWU+Pj49''@;'; put 'put ''MCktKGtlPj4+PTApLHl0PU1hdGgubWluKFFlLHVuKSxNdD10aGlzLnNsaWNlKF90LG50KSxEdD1WZS5zbGljZShrZSxBZSksaXQ9MDtpdDx5dDsrK2l0KWlmKE10W2l0XSE9PUR0W2l0XSl7UWU9TXRbaXRdLHVuPUR0W2l0XTticmVha31yZXR1cm4gUWU8dW4/LTE6dW48UWU/MTowfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoVmUsa2UsQWUpfSxGLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gbWUodGhpcyxWZSxrZSxBZSwhMCl9LEYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1''@;'; put 'put ''bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gbWUodGhpcyxWZSxrZSxBZSwhMSl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZih2b2lkIDA9PT1rZSlfdD0idXRmOCIsQWU9dGhpcy5sZW5ndGgsa2U9MDtlbHNlIGlmKHZvaWQgMD09PUFlJiYic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGtlKV90PWtlLEFlPXRoaXMubGVuZ3RoLGtlPTA7ZWxzZXtpZighaXNGaW5pdGUoa2UpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtrZT4+Pj0wLGlzRmluaXRlKEFl''@;'; put 'put ''KT8oQWU+Pj49MCx2b2lkIDA9PT1fdCYmKF90PSJ1dGY4IikpOihfdD1BZSxBZT12b2lkIDApfXZhciBudD10aGlzLmxlbmd0aC1rZTtpZigodm9pZCAwPT09QWV8fEFlPm50KSYmKEFlPW50KSxWZS5sZW5ndGg+MCYmKEFlPDB8fGtlPDApfHxrZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtfdHx8KF90PSJ1dGY4Iik7Zm9yKHZhciBRZT0hMTs7KXN3aXRjaChfdCl7Y2FzZSJoZXgiOnJldHVybiBUZSh0aGlzLFZlLGtlLEFlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBTZSh0aGlz''@;'; put 'put ''LFZlLGtlLEFlKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB6ZSh0aGlzLFZlLGtlLEFlKTtjYXNlImJhc2U2NCI6cmV0dXJuIFYodGhpcyxWZSxrZSxBZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJl''@;'; put 'put ''dHVybiBwKHRoaXMsVmUsa2UsQWUpO2RlZmF1bHQ6aWYoUWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitfdCk7X3Q9KCIiK190KS50b0xvd2VyQ2FzZSgpLFFlPSEwfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIs''@;'; put 'put ''ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgQz00MDk2O2Z1bmN0aW9uIEgoSWUsVmUsa2Upe3ZhciBBZT0iIjtrZT1NYXRoLm1pbihJZS5sZW5ndGgsa2UpO2Zvcih2YXIgX3Q9VmU7X3Q8a2U7KytfdClBZSs9U3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZSgxMjcmSWVbX3RdKTtyZXR1cm4gQWV9ZnVuY3Rpb24gaihJZSxWZSxrZSl7dmFyIEFlPSIiO2tlPU1hdGgubWluKEllLmxlbmd0aCxrZSk7Zm9yKHZhciBfdD1WZTtfdDxrZTsrK190KUFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEllW190XSk7cmV0dXJuIEFlfWZ1bmN0aW9uIEUoSWUs''@;'; put 'put ''VmUsa2Upe3ZhciBBZT1JZS5sZW5ndGg7KCFWZXx8VmU8MCkmJihWZT0wKSwoIWtlfHxrZTwwfHxrZT5BZSkmJihrZT1BZSk7Zm9yKHZhciBfdD0iIixudD1WZTtudDxrZTsrK250KV90Kz1SZVtJZVtudF1dO3JldHVybiBfdH1mdW5jdGlvbiBtKEllLFZlLGtlKXtmb3IodmFyIEFlPUllLnNs''@;'; put 'put ''aWNlKFZlLGtlKSxfdD0iIixudD0wO250PEFlLmxlbmd0aC0xO250Kz0yKV90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEFlW250XSsyNTYqQWVbbnQrMV0pO3JldHVybiBfdH1mdW5jdGlvbiBBKEllLFZlLGtlKXtpZihJZSUxIT0wfHxJZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQg''@;'; put 'put ''aXMgbm90IHVpbnQiKTtpZihJZStWZT5rZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGFlKEllLFZlLGtlLEFlLF90LG50KXtpZighRi5pc0J1ZmZlcihJZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZl''@;'; put 'put ''ciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKFZlPl90fHxWZTxudCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoa2UrQWU+SWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQg''@;'; put 'put ''b2YgcmFuZ2UiKX1mdW5jdGlvbiB0ZShJZSxWZSxrZSxBZSxfdCxudCl7aWYoa2UrQWU+SWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihrZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBz''@;'; put 'put ''ZShJZSxWZSxrZSxBZSxfdCl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLF90fHx0ZShJZSwwLGtlLDQpLF8ud3JpdGUoSWUsVmUsa2UsQWUsMjMsNCksa2UrNH1mdW5jdGlvbiB3ZShJZSxWZSxrZSxBZSxfdCl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLF90fHx0ZShJZSwwLGtlLDgpLF8ud3JpdGUo''@;'; put 'put ''SWUsVmUsa2UsQWUsNTIsOCksa2UrOH1GLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihWZSxrZSl7dmFyIEFlPXRoaXMubGVuZ3RoOyhWZT1+flZlKTwwPyhWZSs9QWUpPDAmJihWZT0wKTpWZT5BZSYmKFZlPUFlKSwoa2U9dm9pZCAwPT09a2U/QWU6fn5rZSk8MD8oa2UrPUFlKTwwJiYoa2U9''@;'; put 'put ''MCk6a2U+QWUmJihrZT1BZSksa2U8VmUmJihrZT1WZSk7dmFyIF90PXRoaXMuc3ViYXJyYXkoVmUsa2UpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3QsRi5wcm90b3R5cGUpLF90fSxGLnByb3RvdHlwZS5yZWFkVWludExFPUYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24o''@;'; put 'put ''VmUsa2UsQWUpe1ZlPj4+PTAsa2U+Pj49MCxBZXx8QShWZSxrZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD10aGlzW1ZlXSxudD0xLFFlPTA7KytRZTxrZSYmKG50Kj0yNTYpOylfdCs9dGhpc1tWZStRZV0qbnQ7cmV0dXJuIF90fSxGLnByb3RvdHlwZS5yZWFkVWludEJFPUYucHJvdG90eXBl''@;'; put 'put ''LnJlYWRVSW50QkU9ZnVuY3Rpb24oVmUsa2UsQWUpe1ZlPj4+PTAsa2U+Pj49MCxBZXx8QShWZSxrZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD10aGlzW1ZlKy0ta2VdLG50PTE7a2U+MCYmKG50Kj0yNTYpOylfdCs9dGhpc1tWZSstLWtlXSpudDtyZXR1cm4gX3R9LEYucHJvdG90eXBlLnJl''@;'; put 'put ''YWRVaW50OD1GLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDEsdGhpcy5sZW5ndGgpLHRoaXNbVmVdfSxGLnByb3RvdHlwZS5yZWFkVWludDE2TEU9Ri5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1''@;'; put 'put ''cm4gVmU+Pj49MCxrZXx8QShWZSwyLHRoaXMubGVuZ3RoKSx0aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4fSxGLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Ri5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSwyLHRoaXMubGVuZ3RoKSx0''@;'; put 'put ''aGlzW1ZlXTw8OHx0aGlzW1ZlKzFdfSxGLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ri5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tWZV18dGhpc1tWZSsxXTw8OHx0aGlzW1ZlKzJdPDwx''@;'; put 'put ''NikrMTY3NzcyMTYqdGhpc1tWZSszXX0sRi5wcm90b3R5cGUucmVhZFVpbnQzMkJFPUYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tWZV0rKHRoaXNbVmUrMV08PDE2fHRo''@;'; put 'put ''aXNbVmUrMl08PDh8dGhpc1tWZSszXSl9LEYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbVmVdLG50PTEsUWU9MDsrK1FlPGtlJiYobnQqPTI1Nik7KV90Kz10aGlz''@;'; put 'put ''W1ZlK1FlXSpudDtyZXR1cm4gX3Q+PShudCo9MTI4KSYmKF90LT1NYXRoLnBvdygyLDgqa2UpKSxfdH0sRi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtWZT4+Pj0wLGtlPj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9a2UsbnQ9MSxRZT10''@;'; put 'put ''aGlzW1ZlKy0tX3RdO190PjAmJihudCo9MjU2KTspUWUrPXRoaXNbVmUrLS1fdF0qbnQ7cmV0dXJuIFFlPj0obnQqPTEyOCkmJihRZS09TWF0aC5wb3coMiw4KmtlKSksUWV9LEYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSwxLHRo''@;'; put 'put ''aXMubGVuZ3RoKSwxMjgmdGhpc1tWZV0/LTEqKDI1NS10aGlzW1ZlXSsxKTp0aGlzW1ZlXX0sRi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oVmUsa2Upe1ZlPj4+PTAsa2V8fEEoVmUsMix0aGlzLmxlbmd0aCk7dmFyIEFlPXRoaXNbVmVdfHRoaXNbVmUrMV08PDg7cmV0dXJuIDMy''@;'; put 'put ''NzY4JkFlPzQyOTQ5MDE3NjB8QWU6QWV9LEYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKFZlLGtlKXtWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpO3ZhciBBZT10aGlzW1ZlKzFdfHRoaXNbVmVdPDw4O3JldHVybiAzMjc2OCZBZT80Mjk0OTAxNzYwfEFlOkFlfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksdGhpc1tWZV18dGhpc1tWZSsxXTw8OHx0aGlzW1ZlKzJdPDwxNnx0aGlzW1ZlKzNdPDwyNH0sRi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oVmUs''@;'; put 'put ''a2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLHRoaXNbVmVdPDwyNHx0aGlzW1ZlKzFdPDwxNnx0aGlzW1ZlKzJdPDw4fHRoaXNbVmUrM119LEYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRo''@;'; put 'put ''aXMubGVuZ3RoKSxfLnJlYWQodGhpcyxWZSwhMCwyMyw0KX0sRi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLFZlLCExLDIzLDQpfSxGLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9''@;'; put 'put ''ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDgsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLFZlLCEwLDUyLDgpfSxGLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDgsdGhpcy5sZW5ndGgpLF8ucmVh''@;'; put 'put ''ZCh0aGlzLFZlLCExLDUyLDgpfSxGLnByb3RvdHlwZS53cml0ZVVpbnRMRT1GLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7VmU9K1ZlLGtlPj4+PTAsQWU+Pj49MCxfdHx8YWUodGhpcyxWZSxrZSxBZSxNYXRoLnBvdygyLDgqQWUpLTEsMCk7dmFyIFFlPTEs''@;'; put 'put ''dW49MDtmb3IodGhpc1trZV09MjU1JlZlOysrdW48QWUmJihRZSo9MjU2KTspdGhpc1trZSt1bl09VmUvUWUmMjU1O3JldHVybiBrZStBZX0sRi5wcm90b3R5cGUud3JpdGVVaW50QkU9Ri5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe1ZlPStWZSxrZT4+Pj0w''@;'; put 'put ''LEFlPj4+PTAsX3R8fGFlKHRoaXMsVmUsa2UsQWUsTWF0aC5wb3coMiw4KkFlKS0xLDApO3ZhciBRZT1BZS0xLHVuPTE7Zm9yKHRoaXNba2UrUWVdPTI1NSZWZTstLVFlPj0wJiYodW4qPTI1Nik7KXRoaXNba2UrUWVdPVZlL3VuJjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90eXBlLndyaXRl''@;'; put 'put ''VWludDg9Ri5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDEsMjU1LDApLHRoaXNba2VdPTI1NSZWZSxrZSsxfSxGLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPUYucHJvdG90eXBlLndyaXRlVUlu''@;'; put 'put ''dDE2TEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSwyLDY1NTM1LDApLHRoaXNba2VdPTI1NSZWZSx0aGlzW2tlKzFdPVZlPj4+OCxrZSsyfSxGLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPUYucHJvdG90eXBlLndyaXRlVUludDE2''@;'; put 'put ''QkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSwyLDY1NTM1LDApLHRoaXNba2VdPVZlPj4+OCx0aGlzW2tlKzFdPTI1NSZWZSxrZSsyfSxGLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPUYucHJvdG90eXBlLndyaXRlVUludDMyTEU9''@;'; put 'put ''ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1trZSszXT1WZT4+PjI0LHRoaXNba2UrMl09VmU+Pj4xNix0aGlzW2tlKzFdPVZlPj4+OCx0aGlzW2tlXT0yNTUmVmUsa2UrNH0sRi5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVVaW50MzJCRT1GLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsNCw0Mjk0OTY3Mjk1LDApLHRoaXNba2VdPVZlPj4+MjQsdGhpc1trZSsxXT1WZT4+PjE2LHRoaXNba2UrMl09VmU+''@;'; put 'put ''Pj44LHRoaXNba2UrM109MjU1JlZlLGtlKzR9LEYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe2lmKFZlPStWZSxrZT4+Pj0wLCFfdCl7dmFyIG50PU1hdGgucG93KDIsOCpBZS0xKTthZSh0aGlzLFZlLGtlLEFlLG50LTEsLW50KX12YXIgUWU9MCx1bj0xLHl0''@;'; put 'put ''PTA7Zm9yKHRoaXNba2VdPTI1NSZWZTsrK1FlPEFlJiYodW4qPTI1Nik7KVZlPDAmJjA9PT15dCYmMCE9PXRoaXNba2UrUWUtMV0mJih5dD0xKSx0aGlzW2tlK1FlXT0oVmUvdW58MCkteXQmMjU1O3JldHVybiBrZStBZX0sRi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihWZSxrZSxB''@;'; put 'put ''ZSxfdCl7aWYoVmU9K1ZlLGtlPj4+PTAsIV90KXt2YXIgbnQ9TWF0aC5wb3coMiw4KkFlLTEpO2FlKHRoaXMsVmUsa2UsQWUsbnQtMSwtbnQpfXZhciBRZT1BZS0xLHVuPTEseXQ9MDtmb3IodGhpc1trZStRZV09MjU1JlZlOy0tUWU+PTAmJih1bio9MjU2KTspVmU8MCYmMD09PXl0JiYwIT09''@;'; put 'put ''dGhpc1trZStRZSsxXSYmKHl0PTEpLHRoaXNba2UrUWVdPShWZS91bnwwKS15dCYyNTU7cmV0dXJuIGtlK0FlfSxGLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSwxLDEyNywtMTI4KSxWZTwwJiYo''@;'; put 'put ''VmU9MjU1K1ZlKzEpLHRoaXNba2VdPTI1NSZWZSxrZSsxfSxGLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSwyLDMyNzY3LC0zMjc2OCksdGhpc1trZV09MjU1JlZlLHRoaXNba2UrMV09VmU+''@;'; put 'put ''Pj44LGtlKzJ9LEYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxhZSh0aGlzLFZlLGtlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2tlXT1WZT4+PjgsdGhpc1trZSsxXT0yNTUmVmUsa2UrMn0sRi5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVJbnQzMkxFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fGFlKHRoaXMsVmUsa2UsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2tlXT0yNTUmVmUsdGhpc1trZSsxXT1WZT4+PjgsdGhpc1trZSsyXT1WZT4+PjE2LHRoaXNba2UrM109VmU+Pj4y''@;'; put 'put ''NCxrZSs0fSxGLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8YWUodGhpcyxWZSxrZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFZlPDAmJihWZT00Mjk0OTY3Mjk1K1ZlKzEpLHRoaXNba2VdPVZlPj4+MjQsdGhp''@;'; put 'put ''c1trZSsxXT1WZT4+PjE2LHRoaXNba2UrMl09VmU+Pj44LHRoaXNba2UrM109MjU1JlZlLGtlKzR9LEYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIHNlKHRoaXMsVmUsa2UsITAsQWUpfSxGLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24o''@;'; put 'put ''VmUsa2UsQWUpe3JldHVybiBzZSh0aGlzLFZlLGtlLCExLEFlKX0sRi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIHdlKHRoaXMsVmUsa2UsITAsQWUpfSxGLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4g''@;'; put 'put ''d2UodGhpcyxWZSxrZSwhMSxBZSl9LEYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe2lmKCFGLmlzQnVmZmVyKFZlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihBZXx8KEFlPTApLCFfdCYmMCE9PV90JiYoX3Q9dGhp''@;'; put 'put ''cy5sZW5ndGgpLGtlPj1WZS5sZW5ndGgmJihrZT1WZS5sZW5ndGgpLGtlfHwoa2U9MCksX3Q+MCYmX3Q8QWUmJihfdD1BZSksX3Q9PT1BZXx8MD09PVZlLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGtlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91''@;'; put 'put ''dCBvZiBib3VuZHMiKTtpZihBZTwwfHxBZT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKF90PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7X3Q+dGhpcy5sZW5ndGgmJihfdD10aGlzLmxl''@;'; put 'put ''bmd0aCksVmUubGVuZ3RoLWtlPF90LUFlJiYoX3Q9VmUubGVuZ3RoLWtlK0FlKTt2YXIgbnQ9X3QtQWU7cmV0dXJuIHRoaXM9PT1WZSYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKGtlLEFlLF90KTpVaW50OEFycmF5''@;'; put 'put ''LnByb3RvdHlwZS5zZXQuY2FsbChWZSx0aGlzLnN1YmFycmF5KEFlLF90KSxrZSksbnR9LEYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe2lmKCJzdHJpbmciPT10eXBlb2YgVmUpe2lmKCJzdHJpbmciPT10eXBlb2Yga2U/KF90PWtlLGtlPTAsQWU9dGhpcy5sZW5ndGgp''@;'; put 'put ''OiJzdHJpbmciPT10eXBlb2YgQWUmJihfdD1BZSxBZT10aGlzLmxlbmd0aCksdm9pZCAwIT09X3QmJiJzdHJpbmciIT10eXBlb2YgX3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgX3QmJiFGLmlzRW5jb2Rpbmco''@;'; put 'put ''X3QpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrX3QpO2lmKDE9PT1WZS5sZW5ndGgpe3ZhciBudD1WZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1fdCYmbnQ8MTI4fHwibGF0aW4xIj09PV90KSYmKFZlPW50KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgVmU/VmUm''@;'; put 'put ''PTI1NToiYm9vbGVhbiI9PXR5cGVvZiBWZSYmKFZlPU51bWJlcihWZSkpO2lmKGtlPDB8fHRoaXMubGVuZ3RoPGtlfHx0aGlzLmxlbmd0aDxBZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoQWU8PWtlKXJldHVybiB0aGlzO3ZhciBRZTtpZihrZT4+Pj0w''@;'; put 'put ''LEFlPXZvaWQgMD09PUFlP3RoaXMubGVuZ3RoOkFlPj4+MCxWZXx8KFZlPTApLCJudW1iZXIiPT10eXBlb2YgVmUpZm9yKFFlPWtlO1FlPEFlOysrUWUpdGhpc1tRZV09VmU7ZWxzZXt2YXIgdW49Ri5pc0J1ZmZlcihWZSk/VmU6Ri5mcm9tKFZlLF90KSx5dD11bi5sZW5ndGg7aWYoMD09PXl0''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytWZSsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKFFlPTA7UWU8QWUta2U7KytRZSl0aGlzW1FlK2tlXT11bltRZSV5dF19cmV0dXJuIHRoaXN9O3ZhciBVZT0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0''@;'; put 'put ''aW9uIG90KEllLFZlKXtWZT1WZXx8MS8wO2Zvcih2YXIga2UsQWU9SWUubGVuZ3RoLF90PW51bGwsbnQ9W10sUWU9MDtRZTxBZTsrK1FlKXtpZigoa2U9SWUuY2hhckNvZGVBdChRZSkpPjU1Mjk1JiZrZTw1NzM0NCl7aWYoIV90KXtpZihrZT41NjMxOSl7KFZlLT0zKT4tMSYmbnQucHVzaCgy''@;'; put 'put ''MzksMTkxLDE4OSk7Y29udGludWV9aWYoUWUrMT09PUFlKXsoVmUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1fdD1rZTtjb250aW51ZX1pZihrZTw1NjMyMCl7KFZlLT0zKT4tMSYmbnQucHVzaCgyMzksMTkxLDE4OSksX3Q9a2U7Y29udGludWV9a2U9NjU1MzYrKF90''@;'; put 'put ''LTU1Mjk2PDwxMHxrZS01NjMyMCl9ZWxzZSBfdCYmKFZlLT0zKT4tMSYmbnQucHVzaCgyMzksMTkxLDE4OSk7aWYoX3Q9bnVsbCxrZTwxMjgpe2lmKChWZS09MSk8MClicmVhaztudC5wdXNoKGtlKX1lbHNlIGlmKGtlPDIwNDgpe2lmKChWZS09Mik8MClicmVhaztudC5wdXNoKGtlPj42fDE5''@;'; put 'put ''Miw2MyZrZXwxMjgpfWVsc2UgaWYoa2U8NjU1MzYpe2lmKChWZS09Myk8MClicmVhaztudC5wdXNoKGtlPj4xMnwyMjQsa2U+PjYmNjN8MTI4LDYzJmtlfDEyOCl9ZWxzZXtpZighKGtlPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKFZlLT00KTww''@;'; put 'put ''KWJyZWFrO250LnB1c2goa2U+PjE4fDI0MCxrZT4+MTImNjN8MTI4LGtlPj42JjYzfDEyOCw2MyZrZXwxMjgpfX1yZXR1cm4gbnR9ZnVuY3Rpb24gWGUoSWUpe3JldHVybiBJLnRvQnl0ZUFycmF5KGZ1bmN0aW9uIEplKEllKXtpZigoSWU9KEllPUllLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5y''@;'; put 'put ''ZXBsYWNlKFVlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtJZS5sZW5ndGglNCE9MDspSWUrPSI9IjtyZXR1cm4gSWV9KEllKSl9ZnVuY3Rpb24gamUoSWUsVmUsa2UsQWUpe2Zvcih2YXIgX3Q9MDtfdDxBZSYmIShfdCtrZT49VmUubGVuZ3RofHxfdD49SWUubGVuZ3RoKTsrK190KVZl''@;'; put 'put ''W190K2tlXT1JZVtfdF07cmV0dXJuIF90fWZ1bmN0aW9uIERlKEllLFZlKXtyZXR1cm4gSWUgaW5zdGFuY2VvZiBWZXx8bnVsbCE9SWUmJm51bGwhPUllLmNvbnN0cnVjdG9yJiZudWxsIT1JZS5jb25zdHJ1Y3Rvci5uYW1lJiZJZS5jb25zdHJ1Y3Rvci5uYW1lPT09VmUubmFtZX1mdW5jdGlv''@;'; put 'put ''biBGZShJZSl7cmV0dXJuIEllIT1JZX12YXIgUmU9ZnVuY3Rpb24oKXtmb3IodmFyIEllPSIwMTIzNDU2Nzg5YWJjZGVmIixWZT1uZXcgQXJyYXkoMjU2KSxrZT0wO2tlPDE2Oysra2UpZm9yKHZhciBBZT0xNiprZSxfdD0wO190PDE2OysrX3QpVmVbQWUrX3RdPUllW2tlXStJZVtfdF07cmV0''@;'; put 'put ''dXJuIFZlfSgpfSwzMjQ3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcixfPXkoNzA0NSkuVHJhbnNmb3JtLGc9eSg3ODQ1NCkuSTtmdW5jdGlvbiB3KHope18uY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygeix0aGlzLmhhc2hN''@;'; put 'put ''b2RlP3RoaXNbel09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9eSg3MTk5''@;'; put 'put ''MykodyxfKTt2YXIgUD10eXBlb2YgVWludDhBcnJheTwidSIsRj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTt3''@;'; put 'put ''LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oeixOLEwpe3ZhciBLPWZ1bmN0aW9uIE8oeixOKXtpZih6IGluc3RhbmNlb2YgSSlyZXR1cm4gejtpZigic3RyaW5nIj09dHlwZW9mIHopcmV0dXJuIEkuZnJvbSh6LE4pO2lmKEYmJkFycmF5QnVmZmVyLmlzVmlldyh6KSl7aWYoMD09PXouYnl0''@;'; put 'put ''ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTD1JLmZyb20oei5idWZmZXIsei5ieXRlT2Zmc2V0LHouYnl0ZUxlbmd0aCk7aWYoTC5ieXRlTGVuZ3RoPT09ei5ieXRlTGVuZ3RoKXJldHVybiBMfWlmKFAmJnogaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKHopJiZ6LmNv''@;'; put 'put ''bnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2Ygei5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmei5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih6KSlyZXR1cm4gSS5mcm9tKHopO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBh''@;'; put 'put ''biBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfSh6LE4pLFU9dGhpcy5fdXBkYXRlKEspO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KEwmJihVPXRoaXMuX3RvU3RyaW5nKFUsTCkpLFUpfSx3LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlv''@;'; put 'put ''bigpe30sdy5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8g''@;'; put 'put ''c2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih6LE4sTCl7''@;'; put 'put ''dmFyIEs7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHopOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoeikpfWNhdGNoKFUpe0s9VX1maW5hbGx5e0woSyl9fSx3LnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oeil7dmFyIE47dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0''@;'; put 'put ''Y2goTCl7Tj1MfXooTil9LHcucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHope3ZhciBOPXRoaXMuX19maW5hbCgpfHxJLmFsbG9jKDApO3JldHVybiB6JiYoTj10aGlzLl90b1N0cmluZyhOLHosITApKSxOfSx3LnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oeixOLEwp''@;'; put 'put ''e2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBnKE4pLHRoaXMuX2VuY29kaW5nPU4pLHRoaXMuX2VuY29kaW5nIT09Til0aHJvdyBuZXcgRXJyb3IoImNhblx1MjAxOXQgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBLPXRoaXMuX2RlY29kZXIud3JpdGUoeik7cmV0dXJuIEwm''@;'; put 'put ''JihLKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxLfSx1ZS5leHBvcnRzPXd9LDI3NjM3Oih1ZSxYLHkpPT57ZnVuY3Rpb24gWShxKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHEpfVguaXNBcnJheT1mdW5jdGlvbiBJKHEpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5''@;'; put 'put ''LmlzQXJyYXkocSk6IltvYmplY3QgQXJyYXldIj09PVkocSl9LFguaXNCb29sZWFuPWZ1bmN0aW9uIF8ocSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgcX0sWC5pc051bGw9ZnVuY3Rpb24gZyhxKXtyZXR1cm4gbnVsbD09PXF9LFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gQihxKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09cX0sWC5pc051bWJlcj1mdW5jdGlvbiB3KHEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgcX0sWC5pc1N0cmluZz1mdW5jdGlvbiBQKHEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgcX0sWC5pc1N5bWJvbD1mdW5jdGlvbiBGKHEpe3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''cX0sWC5pc1VuZGVmaW5lZD1mdW5jdGlvbiBPKHEpe3JldHVybiB2b2lkIDA9PT1xfSxYLmlzUmVnRXhwPWZ1bmN0aW9uIHoocSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1ZKHEpfSxYLmlzT2JqZWN0PWZ1bmN0aW9uIE4ocSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBxJiZudWxsIT09''@;'; put 'put ''cX0sWC5pc0RhdGU9ZnVuY3Rpb24gTChxKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1ZKHEpfSxYLmlzRXJyb3I9ZnVuY3Rpb24gSyhxKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09WShxKXx8cSBpbnN0YW5jZW9mIEVycm9yfSxYLmlzRnVuY3Rpb249ZnVuY3Rpb24gVShxKXtyZXR1cm4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgcX0sWC5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBXKHEpe3JldHVybiBudWxsPT09cXx8ImJvb2xlYW4iPT10eXBlb2YgcXx8Im51bWJlciI9PXR5cGVvZiBxfHwic3RyaW5nIj09dHlwZW9mIHF8fCJzeW1ib2wiPT10eXBlb2YgcXx8dHlwZW9mIHE+InUifSxYLmlz''@;'; put 'put ''QnVmZmVyPXkoODM4MzgpLkJ1ZmZlci5pc0J1ZmZlcn0sODczMDM6KHVlLFgseSk9Pnt2YXIgST15KDkwNTE4KSxfPXkoODk2MDYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7cmV0dXJuIG5ldyBCKEYpfTt2YXIgZz17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9''@;'; put 'put ''LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIx''@;'; put 'put ''OntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBCKFApe3RoaXMuY3VydmVUeXBlPWdbUF0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpQfSksdGhpcy5jdXJ2ZT1uZXcgSS5lYyh0''@;'; put 'put ''aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIHcoUCxGLE8pe0FycmF5LmlzQXJyYXkoUCl8fChQPVAudG9BcnJheSgpKTt2YXIgej1uZXcgQnVmZmVyKFApO2lmKE8mJnoubGVuZ3RoPE8pe3ZhciBOPW5ldyBCdWZmZXIoTy16Lmxlbmd0aCk7Ti5maWxsKDAp''@;'; put 'put ''LHo9QnVmZmVyLmNvbmNhdChbTix6XSl9cmV0dXJuIEY/ei50b1N0cmluZyhGKTp6fWcucDIyND1nLnNlY3AyMjRyMSxnLnAyNTY9Zy5zZWNwMjU2cjE9Zy5wcmltZTI1NnYxLGcucDE5Mj1nLnNlY3AxOTJyMT1nLnByaW1lMTkydjEsZy5wMzg0PWcuc2VjcDM4NHIxLGcucDUyMT1nLnNlY3A1''@;'; put 'put ''MjFyMSxCLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KFAsRil9LEIucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGPUZ8fCJ1''@;'; put 'put ''dGY4IixCdWZmZXIuaXNCdWZmZXIoUCl8fChQPW5ldyBCdWZmZXIoUCxGKSksdyh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoUCkuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxPLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxCLnByb3RvdHlwZS5n''@;'; put 'put ''ZXRQdWJsaWNLZXk9ZnVuY3Rpb24oUCxGKXt2YXIgTz10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PUYsITApO3JldHVybiJoeWJyaWQiPT09RiYmKE9bMF09T1tPLmxlbmd0aC0xXSUyPzc6NiksdyhPLFApfSxCLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFAp''@;'; put 'put ''e3JldHVybiB3KHRoaXMua2V5cy5nZXRQcml2YXRlKCksUCl9LEIucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihQLEYpe3JldHVybiBGPUZ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoUCl8fChQPW5ldyBCdWZmZXIoUCxGKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoUCksdGhp''@;'; put 'put ''c30sQi5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihQLEYpe0Y9Rnx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKTt2YXIgTz1uZXcgXyhQKTtyZXR1cm4gTz1PLnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWly''@;'; put 'put ''KCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKE8pLHRoaXN9fSw4OTYwNjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHAp''@;'; put 'put ''e1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRz''@;'; put 'put ''PW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3Lndv''@;'; put 'put ''cmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDc3OTY1KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3''@;'; put 'put ''JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNo''@;'; put 'put ''YXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3Jk''@;'; put 'put ''U2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5y''@;'; put 'put ''ZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJv''@;'; put 'put ''dG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4''@;'; put 'put ''NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90''@;'; put 'put ''b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5l''@;'; put 'put ''dyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2''@;'; put 'put ''KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxq''@;'; put 'put ''JjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYp''@;'; put 'put ''LHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3''@;'; put 'put ''MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29y''@;'; put 'put ''ZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1w''@;'; put 'put ''Lmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16''@;'; put 'put ''KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7''@;'; put 'put ''dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUz''@;'; put 'put ''NjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4''@;'; put 'put ''OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVu''@;'; put 'put ''Z3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3Ro''@;'; put 'put ''LTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09''@;'; put 'put ''MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRz''@;'; put 'put ''W0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4''@;'; put 'put ''Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3Zh''@;'; put 'put ''ciB0ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0i''@;'; put 'put ''K3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''MT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''SlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJu''@;'; put 'put ''IHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+''@;'; put 'put ''MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDtt''@;'; put 'put ''KyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''MzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8''@;'; put 'put ''dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5''@;'; put 'put ''cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4o''@;'; put 'put ''MSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRz''@;'; put 'put ''W2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAu''@;'; put 'put ''Y2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMu''@;'; put 'put ''bGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5n''@;'; put 'put ''dGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTty''@;'; put 'put ''ZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9u''@;'; put 'put ''KHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVy''@;'; put 'put ''biBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4''@;'; put 'put ''LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4''@;'; put 'put ''PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53''@;'; put 'put ''b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10''@;'; put 'put ''aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8''@;'; put 'put ''Q1swXSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0s''@;'; put 'put ''a2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgx''@;'; put 'put ''OTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJp''@;'; put 'put ''LFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5u''@;'; put 'put ''ZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9''@;'; put 'put ''NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZl''@;'; put 'put ''LFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''SmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+''@;'; put 'put ''PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01h''@;'; put 'put ''dGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXww''@;'; put 'put ''LGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''SmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+''@;'; put 'put ''PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01h''@;'; put 'put ''dGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''amUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''TXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChr''@;'; put 'put ''ZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0''@;'; put 'put ''LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaiso''@;'; put 'put ''RT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11''@;'; put 'put ''bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUs''@;'; put 'put ''QXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJ''@;'; put 'put ''ZSxmbil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9''@;'; put 'put ''NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUs''@;'; put 'put ''VHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaiso''@;'; put 'put ''RT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11''@;'; put 'put ''bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0''@;'; put 'put ''LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRo''@;'; put 'put ''LmltdWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXww''@;'; put 'put ''LEZhJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkm''@;'; put 'put ''PTY3MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsx''@;'; put 'put ''OF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3Ro''@;'; put 'put ''PVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53''@;'; put 'put ''b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRz''@;'; put 'put ''W1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZC''@;'; put 'put ''aW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlv''@;'; put 'put ''bihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1q''@;'; put 'put ''PDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0sTWU9Q1thZSt3ZStqXSx2ZT10ZSpv''@;'; put 'put ''dC1zZSpNZTtNZT10ZSpNZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK01lLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0Nd''@;'; put 'put ''O3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0''@;'; put 'put ''aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhb''@;'; put 'put ''MipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJv''@;'; put 'put ''dG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyks''@;'; put 'put ''YWU9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50''@;'; put 'put ''cmFuc2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3Jt''@;'; put 'put ''KEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''Yj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5s''@;'; put 'put ''ZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9''@;'; put 'put ''MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0''@;'; put 'put ''aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9''@;'; put 'put ''YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXgu''@;'; put 'put ''c3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8''@;'; put 'put ''PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09''@;'; put 'put ''eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVu''@;'; put 'put ''Z3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxt''@;'; put 'put ''PTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhp''@;'; put 'put ''cy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1''@;'; put 'put ''c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihwKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0o''@;'; put 'put ''cC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNb''@;'; put 'put ''dGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0''@;'; put 'put ''aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlzLndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgpe3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxq''@;'; put 'put ''PTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKysp''@;'; put 'put ''aj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMo''@;'; put 'put ''SCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8''@;'; put 'put ''bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5n''@;'; put 'put ''dGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5u''@;'; put 'put ''ZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVy''@;'; put 'put ''bygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAh''@;'; put 'put ''PT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVn''@;'; put 'put ''YXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1v''@;'; put 'put ''ZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5t''@;'; put 'put ''b2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9k''@;'; put 'put ''IiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9kKHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIg''@;'; put 'put ''eD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4''@;'; put 'put ''ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3''@;'; put 'put ''IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkm''@;'; put 'put ''JmFlPDI2OysrYWUsdGU8PD0xKTtpZihhZT4wKWZvcihiLml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2''@;'; put 'put ''Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHgu''@;'; put 'put ''aXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGFlLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0''@;'; put 'put ''aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7''@;'; put 'put ''ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0w''@;'; put 'put ''PyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQocCksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNF''@;'; put 'put ''dmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''bnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFu''@;'; put 'put ''ZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIgeCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJu''@;'; put 'put ''LTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1''@;'; put 'put ''cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAo''@;'; put 'put ''cCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4''@;'; put 'put ''LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''LTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNt''@;'; put 'put ''cChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1Jl''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp''@;'; put 'put ''ZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciBuZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1l''@;'; put 'put ''PVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9u''@;'; put 'put ''IF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRo''@;'; put 'put ''aXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5y''@;'; put 'put ''Mj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIo''@;'; put 'put ''dGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQo''@;'; put 'put ''Yix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhp''@;'; put 'put ''cy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxs''@;'; put 'put ''ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVuZ3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0''@;'; put 'put ''aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAud29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAu''@;'; put 'put ''bGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3''@;'; put 'put ''MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIobWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5p''@;'; put 'put ''bXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWImJihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1''@;'; put 'put ''bmN0aW9uKHApe2lmKG5lW3BdKXJldHVybiBuZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBy''@;'; put 'put ''aW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIG5lW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0''@;'; put 'put ''aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTty''@;'; put 'put ''ZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90''@;'; put 'put ''b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5t''@;'; put 'put ''dWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''Lm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBv''@;'; put 'put ''dyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09''@;'; put 'put ''dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyks''@;'; put 'put ''c2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5y''@;'; put 'put ''ZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''cG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxl''@;'; put 'put ''bmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgdGU9QT4+YWUm''@;'; put 'put ''MTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2Up''@;'; put 'put ''LHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxi''@;'; put 'put ''fSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku''@;'; put 'put ''bXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''cCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4o''@;'; put 'put ''dGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0''@;'; put 'put ''aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw2NzIxMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDcxOTkzKSxfPXkoMzQ3MjUpLGc9eSgzNjYzNiksQj15KDI1NDQzKSx3PXkoMzI0Nyk7ZnVuY3Rpb24gUChGKXt3LmNh''@;'; put 'put ''bGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1GfUkoUCx3KSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gudXBkYXRlKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sdWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihPKXtyZXR1cm4ibWQ1Ij09PShPPU8udG9Mb3dlckNhc2UoKSk/bmV3IF86InJtZDE2MCI9PT1PfHwicmlwZW1kMTYwIj09PU8/bmV3IGc6bmV3IFAoQihPKSl9fSw4MzQwNzoodWUsWCx5KT0+e3ZhciBJPXkoMzQ3MjUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBJ''@;'; put 'put ''KS51cGRhdGUoXykuZGlnZXN0KCl9fSw1NjQzMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDcxOTkzKSxfPXkoOTA1MDkpLGc9eSgzMjQ3KSxCPXkoMjcwNTQpLkJ1ZmZlcix3PXkoODM0MDcpLFA9eSgzNjYzNiksRj15KDI1NDQzKSxPPUIuYWxsb2MoMTI4KTtmdW5jdGlvbiB6''@;'; put 'put ''KE4sTCl7Zy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTCYmKEw9Qi5mcm9tKEwpKTt2YXIgSz0ic2hhNTEyIj09PU58fCJzaGEzODQiPT09Tj8xMjg6NjQ7dGhpcy5fYWxnPU4sdGhpcy5fa2V5PUwsTC5sZW5ndGg+Sz9MPSgicm1kMTYwIj09PU4/bmV3IFA6RihOKSku''@;'; put 'put ''dXBkYXRlKEwpLmRpZ2VzdCgpOkwubGVuZ3RoPEsmJihMPUIuY29uY2F0KFtMLE9dLEspKTtmb3IodmFyIFc9dGhpcy5faXBhZD1CLmFsbG9jVW5zYWZlKEspLFk9dGhpcy5fb3BhZD1CLmFsbG9jVW5zYWZlKEspLHE9MDtxPEs7cSsrKVdbcV09NTReTFtxXSxZW3FdPTkyXkxbcV07dGhpcy5f''@;'; put 'put ''aGFzaD0icm1kMTYwIj09PU4/bmV3IFA6RihOKSx0aGlzLl9oYXNoLnVwZGF0ZShXKX1JKHosZyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9oYXNoLnVwZGF0ZShOKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faGFzaC5kaWdlc3Qo''@;'; put 'put ''KTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IFA6Rih0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKE4pLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7cmV0dXJuInJtZDE2MCI9PT0oTD1MLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09''@;'; put 'put ''PUw/bmV3IHooInJtZDE2MCIsSyk6Im1kNSI9PT1MP25ldyBfKHcsSyk6bmV3IHooTCxLKX19LDkwNTA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE5OTMpLF89eSgyNzA1NCkuQnVmZmVyLGc9eSgzMjQ3KSxCPV8uYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIFAoRixPKXtn''@;'; put 'put ''LmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBPJiYoTz1fLmZyb20oTykpLHRoaXMuX2FsZz1GLHRoaXMuX2tleT1PLE8ubGVuZ3RoPnc/Tz1GKE8pOk8ubGVuZ3RoPHcmJihPPV8uY29uY2F0KFtPLEJdLHcpKTtmb3IodmFyIHo9dGhpcy5faXBhZD1fLmFsbG9jVW5zYWZl''@;'; put 'put ''KHcpLE49dGhpcy5fb3BhZD1fLmFsbG9jVW5zYWZlKHcpLEw9MDtMPHc7TCsrKXpbTF09NTReT1tMXSxOW0xdPTkyXk9bTF07dGhpcy5faGFzaD1bel19SShQLGcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC5wdXNoKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9hbGcoXy5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoXy5jb25jYXQoW3RoaXMuX29wYWQsRl0pKX0sdWUuZXhwb3J0cz1QfSw5MTQyNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnJhbmRvbUJ5dGVzPVgucm5nPVgucHNldWRv''@;'; put 'put ''UmFuZG9tQnl0ZXM9WC5wcm5nPXkoMzM0MiksWC5jcmVhdGVIYXNoPVguSGFzaD15KDY3MjExKSxYLmNyZWF0ZUhtYWM9WC5IbWFjPXkoNTY0MzIpO3ZhciBJPXkoOTk1NjApLF89T2JqZWN0LmtleXMoSSksZz1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJt''@;'; put 'put ''ZDUiLCJybWQxNjAiXS5jb25jYXQoXyk7WC5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZ307dmFyIEI9eSg5MzM5Nyk7WC5wYmtkZjI9Qi5wYmtkZjIsWC5wYmtkZjJTeW5jPUIucGJrZGYyU3luYzt2YXIgdz15KDg4ODYyKTtYLkNpcGhlcj13LkNpcGhlcixYLmNyZWF0ZUNpcGhlcj13''@;'; put 'put ''LmNyZWF0ZUNpcGhlcixYLkNpcGhlcml2PXcuQ2lwaGVyaXYsWC5jcmVhdGVDaXBoZXJpdj13LmNyZWF0ZUNpcGhlcml2LFguRGVjaXBoZXI9dy5EZWNpcGhlcixYLmNyZWF0ZURlY2lwaGVyPXcuY3JlYXRlRGVjaXBoZXIsWC5EZWNpcGhlcml2PXcuRGVjaXBoZXJpdixYLmNyZWF0ZURlY2lw''@;'; put 'put ''aGVyaXY9dy5jcmVhdGVEZWNpcGhlcml2LFguZ2V0Q2lwaGVycz13LmdldENpcGhlcnMsWC5saXN0Q2lwaGVycz13Lmxpc3RDaXBoZXJzO3ZhciBQPXkoNDM3Nyk7WC5EaWZmaWVIZWxsbWFuR3JvdXA9UC5EaWZmaWVIZWxsbWFuR3JvdXAsWC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9UC5j''@;'; put 'put ''cmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsWC5nZXREaWZmaWVIZWxsbWFuPVAuZ2V0RGlmZmllSGVsbG1hbixYLmNyZWF0ZURpZmZpZUhlbGxtYW49UC5jcmVhdGVEaWZmaWVIZWxsbWFuLFguRGlmZmllSGVsbG1hbj1QLkRpZmZpZUhlbGxtYW47dmFyIEY9eSg3OTE0Myk7WC5jcmVhdGVTaWdu''@;'; put 'put ''PUYuY3JlYXRlU2lnbixYLlNpZ249Ri5TaWduLFguY3JlYXRlVmVyaWZ5PUYuY3JlYXRlVmVyaWZ5LFguVmVyaWZ5PUYuVmVyaWZ5LFguY3JlYXRlRUNESD15KDg3MzAzKTt2YXIgTz15KDUyOTY1KTtYLnB1YmxpY0VuY3J5cHQ9Ty5wdWJsaWNFbmNyeXB0LFgucHJpdmF0ZUVuY3J5cHQ9Ty5w''@;'; put 'put ''cml2YXRlRW5jcnlwdCxYLnB1YmxpY0RlY3J5cHQ9Ty5wdWJsaWNEZWNyeXB0LFgucHJpdmF0ZURlY3J5cHQ9Ty5wcml2YXRlRGVjcnlwdDt2YXIgej15KDk2ODIpO1gucmFuZG9tRmlsbD16LnJhbmRvbUZpbGwsWC5yYW5kb21GaWxsU3luYz16LnJhbmRvbUZpbGxTeW5jLFguY3JlYXRlQ3Jl''@;'; put 'put ''ZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XG53ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1xuaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiKX0sWC5j''@;'; put 'put ''b25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElO''@;'; put 'put ''RzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJF''@;'; put 'put ''U1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwxNzY1NjpmdW5jdGlvbih1ZSxYLHkpe3ZhciBJO3VlLmV4cG9ydHM9KEk9SXx8ZnVuY3Rpb24oXyxnKXt2YXIgQjtpZih0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0byYmKEI9d2luZG93LmNyeXB0byksdHlwZW9mIHNl''@;'; put 'put ''bGY8InUiJiZzZWxmLmNyeXB0byYmKEI9c2VsZi5jcnlwdG8pLHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5jcnlwdG8mJihCPWdsb2JhbFRoaXMuY3J5cHRvKSwhQiYmdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tc0NyeXB0byYmKEI9d2luZG93Lm1zQ3J5cHRvKSwhQiYm''@;'; put 'put ''dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbC5jcnlwdG8mJihCPWdsb2JhbC5jcnlwdG8pLCFCKXRyeXtCPXkoOTE0MjYpfWNhdGNoe312YXIgdz1mdW5jdGlvbigpe2lmKEIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBCLmdldFJhbmRvbVZhbHVlcyl0cnl7cmV0dXJuIEIuZ2V0UmFuZG9tVmFs''@;'; put 'put ''dWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF19Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBCLnJhbmRvbUJ5dGVzKXRyeXtyZXR1cm4gQi5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpfWNhdGNoe319dGhyb3cgbmV3IEVycm9yKCJOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBu''@;'; put 'put ''b3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuIil9LFA9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiBKKCl7fXJldHVybiBmdW5jdGlvbihuZSl7dmFyIGllO3JldHVybiBKLnByb3RvdHlwZT1uZSxpZT1uZXcgSixKLnByb3RvdHlwZT1udWxsLGllfX0o''@;'; put 'put ''KSxGPXt9LE89Ri5saWI9e30sej1PLkJhc2U9ZnVuY3Rpb24oKXtyZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKEope3ZhciBuZT1QKHRoaXMpO3JldHVybiBKJiZuZS5taXhJbihKKSwoIW5lLmhhc093blByb3BlcnR5KCJpbml0Iil8fHRoaXMuaW5pdD09PW5lLmluaXQpJiYobmUuaW5pdD1mdW5j''@;'; put 'put ''dGlvbigpe25lLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG5lLmluaXQucHJvdG90eXBlPW5lLG5lLiRzdXBlcj10aGlzLG5lfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLmV4dGVuZCgpO3JldHVybiBKLmluaXQuYXBwbHkoSixhcmd1bWVudHMpLEp9LGluaXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKEope2Zvcih2YXIgbmUgaW4gSilKLmhhc093blByb3BlcnR5KG5lKSYmKHRoaXNbbmVdPUpbbmVdKTtKLmhhc093blByb3BlcnR5KCJ0b1N0cmluZyIpJiYodGhpcy50b1N0cmluZz1KLnRvU3RyaW5nKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSxOPU8uV29yZEFycmF5PXouZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKEosbmUpe0o9dGhpcy53b3Jkcz1KfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPW5lP25lOjQqSi5sZW5ndGh9LHRvU3RyaW5nOmZ1bmN0aW9uKEope3Jl''@;'; put 'put ''dHVybihKfHxLKS5zdHJpbmdpZnkodGhpcyl9LGNvbmNhdDpmdW5jdGlvbihKKXt2YXIgbmU9dGhpcy53b3JkcyxpZT1KLndvcmRzLGxlPXRoaXMuc2lnQnl0ZXMsbWU9Si5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksbGUlNClmb3IodmFyIF9lPTA7X2U8bWU7X2UrKyluZVtsZStfZT4+PjJd''@;'; put 'put ''fD0oaWVbX2U+Pj4yXT4+PjI0LV9lJTQqOCYyNTUpPDwyNC0obGUrX2UpJTQqODtlbHNlIGZvcih2YXIgU2U9MDtTZTxtZTtTZSs9NCluZVtsZStTZT4+PjJdPWllW1NlPj4+Ml07cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPW1lLHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy53b3Jk''@;'; put 'put ''cyxuZT10aGlzLnNpZ0J5dGVzO0pbbmU+Pj4yXSY9NDI5NDk2NzI5NTw8MzItbmUlNCo4LEoubGVuZ3RoPV8uY2VpbChuZS80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgSj16LmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIEoud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxKfSxyYW5kb206ZnVu''@;'; put 'put ''Y3Rpb24oSil7Zm9yKHZhciBuZT1bXSxpZT0wO2llPEo7aWUrPTQpbmUucHVzaCh3KCkpO3JldHVybiBuZXcgTi5pbml0KG5lLEopfX0pLEw9Ri5lbmM9e30sSz1MLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKEope2Zvcih2YXIgbmU9Si53b3JkcyxpZT1KLnNpZ0J5dGVzLGxlPVtdLG1lPTA7''@;'; put 'put ''bWU8aWU7bWUrKyl7dmFyIF9lPW5lW21lPj4+Ml0+Pj4yNC1tZSU0KjgmMjU1O2xlLnB1c2goKF9lPj4+NCkudG9TdHJpbmcoMTYpKSxsZS5wdXNoKCgxNSZfZSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gbGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKEope2Zvcih2YXIgbmU9Si5sZW5ndGgs''@;'; put 'put ''aWU9W10sbGU9MDtsZTxuZTtsZSs9MilpZVtsZT4+PjNdfD1wYXJzZUludChKLnN1YnN0cihsZSwyKSwxNik8PDI0LWxlJTgqNDtyZXR1cm4gbmV3IE4uaW5pdChpZSxuZS8yKX19LFU9TC5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihKKXtmb3IodmFyIG5lPUoud29yZHMsaWU9Si5zaWdC''@;'; put 'put ''eXRlcyxsZT1bXSxtZT0wO21lPGllO21lKyspbGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG5lW21lPj4+Ml0+Pj4yNC1tZSU0KjgmMjU1KSk7cmV0dXJuIGxlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihKKXtmb3IodmFyIG5lPUoubGVuZ3RoLGllPVtdLGxlPTA7bGU8bmU7bGUrKylp''@;'; put 'put ''ZVtsZT4+PjJdfD0oMjU1JkouY2hhckNvZGVBdChsZSkpPDwyNC1sZSU0Kjg7cmV0dXJuIG5ldyBOLmluaXQoaWUsbmUpfX0sVz1MLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihKKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoVS5zdHJpbmdpZnkoSikpKX1jYXRjaHt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihKKXtyZXR1cm4gVS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSikpKX19LFk9Ty5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPXouZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMuX2RhdGE9bmV3IE4uaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oSil7InN0cmluZyI9PXR5cGVvZiBKJiYoSj1XLnBhcnNlKEopKSx0aGlzLl9kYXRhLmNvbmNhdChKKSx0aGlzLl9uRGF0YUJ5dGVzKz1KLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbihK''@;'; put 'put ''KXt2YXIgbmUsaWU9dGhpcy5fZGF0YSxsZT1pZS53b3JkcyxtZT1pZS5zaWdCeXRlcyxfZT10aGlzLmJsb2NrU2l6ZSxTZT1tZS8oNCpfZSksemU9KFNlPUo/Xy5jZWlsKFNlKTpfLm1heCgoMHxTZSktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKSkqX2UsVj1fLm1pbig0KnplLG1lKTtpZih6ZSl7''@;'; put 'put ''Zm9yKHZhciBwPTA7cDx6ZTtwKz1fZSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhsZSxwKTtuZT1sZS5zcGxpY2UoMCx6ZSksaWUuc2lnQnl0ZXMtPVZ9cmV0dXJuIG5ldyBOLmluaXQobmUsVil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIEo9ei5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBKLl9kYXRh''@;'; put 'put ''PXRoaXMuX2RhdGEuY2xvbmUoKSxKfSxfbWluQnVmZmVyU2l6ZTowfSksZWU9KE8uSGFzaGVyPVkuZXh0ZW5kKHtjZmc6ei5leHRlbmQoKSxpbml0OmZ1bmN0aW9uKEope3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZChKKSx0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7WS5yZXNldC5j''@;'; put 'put ''YWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKEope3JldHVybiB0aGlzLl9hcHBlbmQoSiksdGhpcy5fcHJvY2VzcygpLHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKEope3JldHVybiBKJiZ0aGlzLl9hcHBlbmQoSiksdGhpcy5fZG9GaW5hbGl6ZSgpfSxibG9ja1Np''@;'; put 'put ''emU6MTYsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihKKXtyZXR1cm4gZnVuY3Rpb24obmUsaWUpe3JldHVybiBuZXcgSi5pbml0KGllKS5maW5hbGl6ZShuZSl9fSxfY3JlYXRlSG1hY0hlbHBlcjpmdW5jdGlvbihKKXtyZXR1cm4gZnVuY3Rpb24obmUsaWUpe3JldHVybiBuZXcgZWUuSE1BQy5p''@;'; put 'put ''bml0KEosaWUpLmZpbmFsaXplKG5lKX19fSksRi5hbGdvPXt9KTtyZXR1cm4gRn0oTWF0aCksSSl9LDc4ODU1OmZ1bmN0aW9uKHVlLFgseSl7dmFyIEk7dWUuZXhwb3J0cz0oST15KDE3NjU2KSxmdW5jdGlvbihfKXt2YXIgZz1JLEI9Zy5saWIsdz1CLldvcmRBcnJheSxQPUIuSGFzaGVyLEY9''@;'; put 'put ''Zy5hbGdvLE89W107IWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTA7Vzw2NDtXKyspT1tXXT00Mjk0OTY3Mjk2Kl8uYWJzKF8uc2luKFcrMSkpfDB9KCk7dmFyIHo9Ri5NRDU9UC5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgdy5pbml0KFsxNzMyNTg0MTkzLDQwMjMy''@;'; put 'put ''MzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKFcsWSl7Zm9yKHZhciBxPTA7cTwxNjtxKyspe3ZhciBlZT1ZK3EsSj1XW2VlXTtXW2VlXT0xNjcxMTkzNSYoSjw8OHxKPj4+MjQpfDQyNzgyNTUzNjAmKEo8PDI0fEo+Pj44KX12YXIgbmU9dGhp''@;'; put 'put ''cy5faGFzaC53b3JkcyxpZT1XW1krMF0sbGU9V1tZKzFdLG1lPVdbWSsyXSxfZT1XW1krM10sVGU9V1tZKzRdLFNlPVdbWSs1XSx6ZT1XW1krNl0sVj1XW1krN10scD1XW1krOF0sYj1XW1krOV0seD1XW1krMTBdLEM9V1tZKzExXSxUPVdbWSsxMl0sSD1XW1krMTNdLGo9V1tZKzE0XSxFPVdb''@;'; put 'put ''WSsxNV0sbT1uZVswXSxBPW5lWzFdLGFlPW5lWzJdLHRlPW5lWzNdO209TihtLEEsYWUsdGUsaWUsNyxPWzBdKSx0ZT1OKHRlLG0sQSxhZSxsZSwxMixPWzFdKSxhZT1OKGFlLHRlLG0sQSxtZSwxNyxPWzJdKSxBPU4oQSxhZSx0ZSxtLF9lLDIyLE9bM10pLG09TihtLEEsYWUsdGUsVGUsNyxP''@;'; put 'put ''WzRdKSx0ZT1OKHRlLG0sQSxhZSxTZSwxMixPWzVdKSxhZT1OKGFlLHRlLG0sQSx6ZSwxNyxPWzZdKSxBPU4oQSxhZSx0ZSxtLFYsMjIsT1s3XSksbT1OKG0sQSxhZSx0ZSxwLDcsT1s4XSksdGU9Tih0ZSxtLEEsYWUsYiwxMixPWzldKSxhZT1OKGFlLHRlLG0sQSx4LDE3LE9bMTBdKSxBPU4o''@;'; put 'put ''QSxhZSx0ZSxtLEMsMjIsT1sxMV0pLG09TihtLEEsYWUsdGUsVCw3LE9bMTJdKSx0ZT1OKHRlLG0sQSxhZSxILDEyLE9bMTNdKSxhZT1OKGFlLHRlLG0sQSxqLDE3LE9bMTRdKSxtPUwobSxBPU4oQSxhZSx0ZSxtLEUsMjIsT1sxNV0pLGFlLHRlLGxlLDUsT1sxNl0pLHRlPUwodGUsbSxBLGFl''@;'; put 'put ''LHplLDksT1sxN10pLGFlPUwoYWUsdGUsbSxBLEMsMTQsT1sxOF0pLEE9TChBLGFlLHRlLG0saWUsMjAsT1sxOV0pLG09TChtLEEsYWUsdGUsU2UsNSxPWzIwXSksdGU9TCh0ZSxtLEEsYWUseCw5LE9bMjFdKSxhZT1MKGFlLHRlLG0sQSxFLDE0LE9bMjJdKSxBPUwoQSxhZSx0ZSxtLFRlLDIw''@;'; put 'put ''LE9bMjNdKSxtPUwobSxBLGFlLHRlLGIsNSxPWzI0XSksdGU9TCh0ZSxtLEEsYWUsaiw5LE9bMjVdKSxhZT1MKGFlLHRlLG0sQSxfZSwxNCxPWzI2XSksQT1MKEEsYWUsdGUsbSxwLDIwLE9bMjddKSxtPUwobSxBLGFlLHRlLEgsNSxPWzI4XSksdGU9TCh0ZSxtLEEsYWUsbWUsOSxPWzI5XSks''@;'; put 'put ''YWU9TChhZSx0ZSxtLEEsViwxNCxPWzMwXSksbT1LKG0sQT1MKEEsYWUsdGUsbSxULDIwLE9bMzFdKSxhZSx0ZSxTZSw0LE9bMzJdKSx0ZT1LKHRlLG0sQSxhZSxwLDExLE9bMzNdKSxhZT1LKGFlLHRlLG0sQSxDLDE2LE9bMzRdKSxBPUsoQSxhZSx0ZSxtLGosMjMsT1szNV0pLG09SyhtLEEs''@;'; put 'put ''YWUsdGUsbGUsNCxPWzM2XSksdGU9Syh0ZSxtLEEsYWUsVGUsMTEsT1szN10pLGFlPUsoYWUsdGUsbSxBLFYsMTYsT1szOF0pLEE9SyhBLGFlLHRlLG0seCwyMyxPWzM5XSksbT1LKG0sQSxhZSx0ZSxILDQsT1s0MF0pLHRlPUsodGUsbSxBLGFlLGllLDExLE9bNDFdKSxhZT1LKGFlLHRlLG0s''@;'; put 'put ''QSxfZSwxNixPWzQyXSksQT1LKEEsYWUsdGUsbSx6ZSwyMyxPWzQzXSksbT1LKG0sQSxhZSx0ZSxiLDQsT1s0NF0pLHRlPUsodGUsbSxBLGFlLFQsMTEsT1s0NV0pLGFlPUsoYWUsdGUsbSxBLEUsMTYsT1s0Nl0pLG09VShtLEE9SyhBLGFlLHRlLG0sbWUsMjMsT1s0N10pLGFlLHRlLGllLDYs''@;'; put 'put ''T1s0OF0pLHRlPVUodGUsbSxBLGFlLFYsMTAsT1s0OV0pLGFlPVUoYWUsdGUsbSxBLGosMTUsT1s1MF0pLEE9VShBLGFlLHRlLG0sU2UsMjEsT1s1MV0pLG09VShtLEEsYWUsdGUsVCw2LE9bNTJdKSx0ZT1VKHRlLG0sQSxhZSxfZSwxMCxPWzUzXSksYWU9VShhZSx0ZSxtLEEseCwxNSxPWzU0''@;'; put 'put ''XSksQT1VKEEsYWUsdGUsbSxsZSwyMSxPWzU1XSksbT1VKG0sQSxhZSx0ZSxwLDYsT1s1Nl0pLHRlPVUodGUsbSxBLGFlLEUsMTAsT1s1N10pLGFlPVUoYWUsdGUsbSxBLHplLDE1LE9bNThdKSxBPVUoQSxhZSx0ZSxtLEgsMjEsT1s1OV0pLG09VShtLEEsYWUsdGUsVGUsNixPWzYwXSksdGU9''@;'; put 'put ''VSh0ZSxtLEEsYWUsQywxMCxPWzYxXSksYWU9VShhZSx0ZSxtLEEsbWUsMTUsT1s2Ml0pLEE9VShBLGFlLHRlLG0sYiwyMSxPWzYzXSksbmVbMF09bmVbMF0rbXwwLG5lWzFdPW5lWzFdK0F8MCxuZVsyXT1uZVsyXSthZXwwLG5lWzNdPW5lWzNdK3RlfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIFc9dGhpcy5fZGF0YSxZPVcud29yZHMscT04KnRoaXMuX25EYXRhQnl0ZXMsZWU9OCpXLnNpZ0J5dGVzO1lbZWU+Pj41XXw9MTI4PDwyNC1lZSUzMjt2YXIgSj1fLmZsb29yKHEvNDI5NDk2NzI5NiksbmU9cTtZWzE1KyhlZSs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoSjw8OHxKPj4+''@;'; put 'put ''MjQpfDQyNzgyNTUzNjAmKEo8PDI0fEo+Pj44KSxZWzE0KyhlZSs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYobmU8PDh8bmU+Pj4yNCl8NDI3ODI1NTM2MCYobmU8PDI0fG5lPj4+OCksVy5zaWdCeXRlcz00KihZLmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBpZT10aGlzLl9oYXNo''@;'; put 'put ''LGxlPWllLndvcmRzLG1lPTA7bWU8NDttZSsrKXt2YXIgX2U9bGVbbWVdO2xlW21lXT0xNjcxMTkzNSYoX2U8PDh8X2U+Pj4yNCl8NDI3ODI1NTM2MCYoX2U8PDI0fF9lPj4+OCl9cmV0dXJuIGllfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBXPVAuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gVy5f''@;'; put 'put ''aGFzaD10aGlzLl9oYXNoLmNsb25lKCksV319KTtmdW5jdGlvbiBOKFcsWSxxLGVlLEosbmUsaWUpe3ZhciBsZT1XKyhZJnF8flkmZWUpK0oraWU7cmV0dXJuKGxlPDxuZXxsZT4+PjMyLW5lKStZfWZ1bmN0aW9uIEwoVyxZLHEsZWUsSixuZSxpZSl7dmFyIGxlPVcrKFkmZWV8cSZ+ZWUpK0or''@;'; put 'put ''aWU7cmV0dXJuKGxlPDxuZXxsZT4+PjMyLW5lKStZfWZ1bmN0aW9uIEsoVyxZLHEsZWUsSixuZSxpZSl7dmFyIGxlPVcrKFlecV5lZSkrSitpZTtyZXR1cm4obGU8PG5lfGxlPj4+MzItbmUpK1l9ZnVuY3Rpb24gVShXLFkscSxlZSxKLG5lLGllKXt2YXIgbGU9VysocV4oWXx+ZWUpKStKK2ll''@;'; put 'put ''O3JldHVybihsZTw8bmV8bGU+Pj4zMi1uZSkrWX1nLk1ENT1QLl9jcmVhdGVIZWxwZXIoeiksZy5IbWFjTUQ1PVAuX2NyZWF0ZUhtYWNIZWxwZXIoeil9KE1hdGgpLEkuTUQ1KX0sNzE1NDk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7WC51dGlscz15KDg1NjcxKSxYLkNpcGhlcj15KDEwMjE5''@;'; put 'put ''KSxYLkRFUz15KDY0MTY2KSxYLkNCQz15KDg4ODAwKSxYLkVERT15KDYyMTIyKX0sODg4MDA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOTIxMCksXz15KDcxOTkzKSxnPXt9O2Z1bmN0aW9uIEIoUCl7SS5lcXVhbChQLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRo''@;'; put 'put ''aXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgRj0wO0Y8dGhpcy5pdi5sZW5ndGg7RisrKXRoaXMuaXZbRl09UFtGXX1YLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoUCl7ZnVuY3Rpb24gRihMKXtQLmNhbGwodGhpcyxMKSx0aGlzLl9jYmNJbml0KCl9XyhGLFApO2Zvcih2YXIgTz1PYmplY3Qu''@;'; put 'put ''a2V5cyhnKSx6PTA7ejxPLmxlbmd0aDt6Kyspe3ZhciBOPU9bel07Ri5wcm90b3R5cGVbTl09Z1tOXX1yZXR1cm4gRi5jcmVhdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBGKEspfSxGfSxnLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEY9bmV3IEIodGhpcy5vcHRpb25zLml2KTt0aGlzLl9j''@;'; put 'put ''YmNTdGF0ZT1GfSxnLl91cGRhdGU9ZnVuY3Rpb24oRixPLHosTil7dmFyIEs9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddXj1G''@;'; put 'put ''W08rV107Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV109eltOK1ddfWVsc2V7Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsRixPLHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKXpbTitXXV49VVtXXTtmb3IoVz0wO1c8dGhp''@;'; put 'put ''cy5ibG9ja1NpemU7VysrKVVbV109RltPK1ddfX19LDEwMjE5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzkyMTApO2Z1bmN0aW9uIF8oZyl7dGhpcy5vcHRpb25zPWcsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRo''@;'; put 'put ''aXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1nLnBhZGRpbmd9dWUuZXhwb3J0cz1fLF8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxfLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQil7cmV0dXJuIDA9''@;'; put 'put ''PT1CLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChCKTp0aGlzLl91cGRhdGVFbmNyeXB0KEIpfSxfLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBQPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZl''@;'; put 'put ''ck9mZixCLmxlbmd0aC13KSxGPTA7RjxQO0YrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitGXT1CW3crRl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1QLFB9LF8ucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihCLHcpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIs''@;'; put 'put ''MCxCLHcpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LF8ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKEIpe3ZhciB3PTAsUD0wLE89bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTsw''@;'; put 'put ''IT09dGhpcy5idWZmZXJPZmYmJih3Kz10aGlzLl9idWZmZXIoQix3KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKFArPXRoaXMuX2ZsdXNoQnVmZmVyKE8sUCkpKTtmb3IodmFyIHo9Qi5sZW5ndGgtKEIubGVuZ3RoLXcpJXRoaXMuYmxvY2tTaXplO3c8ejt3Kz10aGlz''@;'; put 'put ''LmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoQix3LE8sUCksUCs9dGhpcy5ibG9ja1NpemU7Zm9yKDt3PEIubGVuZ3RoO3crKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1CW3ddO3JldHVybiBPfSxfLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlv''@;'; put 'put ''bihCKXtmb3IodmFyIHc9MCxQPTAsRj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK0IubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxPPW5ldyBBcnJheShGKnRoaXMuYmxvY2tTaXplKTtGPjA7Ri0tKXcrPXRoaXMuX2J1ZmZlcihCLHcpLFArPXRoaXMuX2ZsdXNoQnVmZmVyKE8sUCk7cmV0''@;'; put 'put ''dXJuIHcrPXRoaXMuX2J1ZmZlcihCLHcpLE99LF8ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEIpe3ZhciB3LFA7cmV0dXJuIEImJih3PXRoaXMudXBkYXRlKEIpKSxQPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSx3P3cu''@;'; put 'put ''Y29uY2F0KFApOlB9LF8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oQix3KXtpZigwPT09dylyZXR1cm4hMTtmb3IoO3c8Qi5sZW5ndGg7KUJbdysrXT0wO3JldHVybiEwfSxfLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlz''@;'; put 'put ''LmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQiwwKSxCfSxfLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oQil7cmV0dXJuIEJ9LF8ucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtJLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBCPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEIsMCksdGhpcy5fdW5wYWQoQil9fSw2NDE2NjoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM5MjEwKSxfPXkoNzE5OTMpLGc9eSg4NTY3MSksQj15KDEwMjE5KTtmdW5jdGlvbiB3KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIFAoTyl7Qi5jYWxsKHRoaXMsTyk7dmFyIHo9bmV3IHc7dGhpcy5f''@;'; put 'put ''ZGVzU3RhdGU9eix0aGlzLmRlcml2ZUtleXMoeixPLmtleSl9XyhQLEIpLHVlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IFAoeil9O3ZhciBGPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtQLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9u''@;'; put 'put ''KHosTil7ei5rZXlzPW5ldyBBcnJheSgzMiksSS5lcXVhbChOLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEw9Zy5yZWFkVUludDMyQkUoTiwwKSxLPWcucmVhZFVJbnQzMkJFKE4sNCk7Zy5wYzEoTCxLLHoudG1wLDApLEw9ei50bXBbMF0sSz16LnRt''@;'; put 'put ''cFsxXTtmb3IodmFyIFU9MDtVPHoua2V5cy5sZW5ndGg7VSs9Mil7dmFyIFc9RltVPj4+MV07TD1nLnIyOHNobChMLFcpLEs9Zy5yMjhzaGwoSyxXKSxnLnBjMihMLEssei5rZXlzLFUpfX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih6LE4sTCxLKXt2YXIgVT10aGlzLl9kZXNTdGF0''@;'; put 'put ''ZSxXPWcucmVhZFVJbnQzMkJFKHosTiksWT1nLnJlYWRVSW50MzJCRSh6LE4rNCk7Zy5pcChXLFksVS50bXAsMCksVz1VLnRtcFswXSxZPVUudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KFUsVyxZLFUudG1wLDApOnRoaXMuX2RlY3J5cHQoVSxXLFksVS50bXAs''@;'; put 'put ''MCksWT1VLnRtcFsxXSxnLndyaXRlVUludDMyQkUoTCxXPVUudG1wWzBdLEspLGcud3JpdGVVSW50MzJCRShMLFksSys0KX0sUC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih6LE4pe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgTD16Lmxlbmd0aC1OLEs9TjtLPHoubGVu''@;'; put 'put ''Z3RoO0srKyl6W0tdPUw7cmV0dXJuITB9LFAucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih6KXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gejtmb3IodmFyIE49elt6Lmxlbmd0aC0xXSxMPXoubGVuZ3RoLU47TDx6Lmxlbmd0aDtMKyspSS5lcXVhbCh6W0xdLE4pO3JldHVybiB6LnNs''@;'; put 'put ''aWNlKDAsei5sZW5ndGgtTil9LFAucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKHosTixMLEssVSl7Zm9yKHZhciBXPU4sWT1MLHE9MDtxPHoua2V5cy5sZW5ndGg7cSs9Mil7dmFyIGVlPXoua2V5c1txXSxKPXoua2V5c1txKzFdO2cuZXhwYW5kKFksei50bXAsMCk7dmFyIG5lPWcuc3Vi''@;'; put 'put ''c3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0pLGxlPVk7WT0oV15nLnBlcm11dGUobmUpKT4+PjAsVz1sZX1nLnJpcChZLFcsSyxVKX0sUC5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oeixOLEwsSyxVKXtmb3IodmFyIFc9TCxZPU4scT16LmtleXMubGVuZ3RoLTI7cT49MDtx''@;'; put 'put ''LT0yKXt2YXIgZWU9ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07Zy5leHBhbmQoVyx6LnRtcCwwKTt2YXIgbmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9VztXPShZXmcucGVybXV0ZShuZSkpPj4+MCxZPWxlfWcucmlwKFcsWSxLLFUpfX0sNjIxMjI6KHVlLFgs''@;'; put 'put ''eSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOTIxMCksXz15KDcxOTkzKSxnPXkoMTAyMTkpLEI9eSg2NDE2Nik7ZnVuY3Rpb24gdyhGLE8pe0kuZXF1YWwoTy5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciB6PU8uc2xpY2UoMCw4KSxOPU8uc2xpY2UoOCwxNiksTD1PLnNs''@;'; put 'put ''aWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Rj9bQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTp6fSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpMfSldOltCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIs''@;'; put 'put ''a2V5Okx9KSxCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Onp9KV19ZnVuY3Rpb24gUChGKXtnLmNhbGwodGhpcyxGKTt2YXIgTz1uZXcgdyh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9T31fKFAs''@;'; put 'put ''ZyksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgUChPKX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPLHosTixMKXt2YXIgSz10aGlzLl9lZGVTdGF0ZTtLLmNpcGhlcnNbMF0uX3VwZGF0ZShPLHosTixMKSxLLmNpcGhlcnNbMV0uX3VwZGF0ZShO''@;'; put 'put ''LEwsTixMKSxLLmNpcGhlcnNbMl0uX3VwZGF0ZShOLEwsTixMKX0sUC5wcm90b3R5cGUuX3BhZD1CLnByb3RvdHlwZS5fcGFkLFAucHJvdG90eXBlLl91bnBhZD1CLnByb3RvdHlwZS5fdW5wYWR9LDg1NjcxOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLnJlYWRVSW50MzJCRT1mdW5jdGlvbihC''@;'; put 'put ''LHcpe3JldHVybihCWzArd108PDI0fEJbMSt3XTw8MTZ8QlsyK3ddPDw4fEJbMyt3XSk+Pj4wfSxYLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oQix3LFApe0JbMCtQXT13Pj4+MjQsQlsxK1BdPXc+Pj4xNiYyNTUsQlsyK1BdPXc+Pj44JjI1NSxCWzMrUF09MjU1Jnd9LFguaXA9ZnVuY3Rpb24o''@;'; put 'put ''Qix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49NjtOPj0wO04tPTIpe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD1CPj4+TCtOJjF9Zm9yKE49NjtOPj0wO04tPTIpe2ZvcihMPTE7TDw9MjU7TCs9OCl6PDw9MSx6''@;'; put 'put ''fD13Pj4+TCtOJjE7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PUI+Pj5MK04mMX1QW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnJpcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj0wO048NDtOKyspZm9yKHZhciBMPTI0O0w+PTA7TC09OClPPDw9MSxPfD13Pj4+''@;'; put 'put ''TCtOJjEsTzw8PTEsT3w9Qj4+PkwrTiYxO2ZvcihOPTQ7Tjw4O04rKylmb3IoTD0yNDtMPj0wO0wtPTgpejw8PTEsenw9dz4+PkwrTiYxLHo8PD0xLHp8PUI+Pj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLnBjMT1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAs''@;'; put 'put ''Tj03O04+PTU7Ti0tKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKE49MTtOPD0zO04rKyl7Zm9yKEw9MDtMPD0yNDtMKz04''@;'; put 'put ''KXo8PD0xLHp8PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9Qj4+TCtOJjE7UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0sWC5yMjhzaGw9ZnVuY3Rpb24oQix3KXtyZXR1cm4gQjw8dyYyNjg0MzU0NTV8''@;'; put 'put ''Qj4+PjI4LXd9O3ZhciB5PVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO1gucGMyPWZ1bmN0aW9uKEIsdyxQ''@;'; put 'put ''LEYpe2Zvcih2YXIgTz0wLHo9MCxOPXkubGVuZ3RoPj4+MSxMPTA7TDxOO0wrKylPPDw9MSxPfD1CPj4+eVtMXSYxO2ZvcihMPU47TDx5Lmxlbmd0aDtMKyspejw8PTEsenw9dz4+PnlbTF0mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxYLmV4cGFuZD1mdW5jdGlvbihCLHcsUCl7dmFy''@;'; put 'put ''IEY9MCxPPTA7Rj0oMSZCKTw8NXxCPj4+Mjc7Zm9yKHZhciB6PTIzO3o+PTE1O3otPTQpRjw8PTYsRnw9Qj4+PnomNjM7Zm9yKHo9MTE7ej49Mzt6LT00KU98PUI+Pj56JjYzLE88PD02O098PSgzMSZCKTw8MXxCPj4+MzEsd1tQKzBdPUY+Pj4wLHdbUCsxXT1PPj4+MH07dmFyIEk9WzE0LDAs''@;'; put 'put ''NCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3''@;'; put 'put ''LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2''@;'; put 'put ''LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIs''@;'; put 'put ''Nyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEw''@;'; put 'put ''LDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwz''@;'; put 'put ''LDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwx''@;'; put 'put ''MSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDks''@;'; put 'put ''NCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07WC5zdWJzdGl0dXRlPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBQPTAsRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVs2NCpGKyhCPj4+MTgtNipGJjYzKV07Zm9yKEY9MDtGPDQ7RisrKVA8PD00LFB8''@;'; put 'put ''PUlbMjU2KzY0KkYrKHc+Pj4xOC02KkYmNjMpXTtyZXR1cm4gUD4+PjB9O3ZhciBfPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtYLnBlcm11dGU9ZnVuY3Rpb24oQil7Zm9yKHZh''@;'; put 'put ''ciB3PTAsUD0wO1A8Xy5sZW5ndGg7UCsrKXc8PD0xLHd8PUI+Pj5fW1BdJjE7cmV0dXJuIHc+Pj4wfSxYLnBhZFNwbGl0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9Qi50b1N0cmluZygyKTtGLmxlbmd0aDx3OylGPSIwIitGO2Zvcih2YXIgTz1bXSx6PTA7ejx3O3orPVApTy5wdXNoKEYu''@;'; put 'put ''c2xpY2Uoeix6K1ApKTtyZXR1cm4gTy5qb2luKCIgIil9fSw0Mzc3Oih1ZSxYLHkpPT57dmFyIEk9eSgxMjcyNyksXz15KDIzMjQxKSxnPXkoOTQ1OTMpLHc9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1YLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91''@;'; put 'put ''cD1YLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gQihGKXt2YXIgTz1uZXcgQnVmZmVyKF9bRl0ucHJpbWUsImhleCIpLHo9bmV3IEJ1ZmZlcihfW0ZdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBnKE8seil9LFguY3JlYXRlRGlmZmllSGVsbG1hbj1YLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24g''@;'; put 'put ''UChGLE8seixOKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKE8pfHx2b2lkIDA9PT13W09dP1AoRiwiYmluYXJ5IixPLHopOihPPU98fCJiaW5hcnkiLE49Tnx8ImJpbmFyeSIsej16fHxuZXcgQnVmZmVyKFsyXSksQnVmZmVyLmlzQnVmZmVyKHopfHwoej1uZXcgQnVmZmVyKHosTikpLCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgRj9uZXcgZyhJKEYseikseiwhMCk6KEJ1ZmZlci5pc0J1ZmZlcihGKXx8KEY9bmV3IEJ1ZmZlcihGLE8pKSxuZXcgZyhGLHosITApKSl9fSw5NDU5MzoodWUsWCx5KT0+e3ZhciBJPXkoMzgyODApLGc9bmV3KHkoNTM0NTkpKSxCPW5ldyBJKDI0KSx3PW5ldyBJKDExKSxQ''@;'; put 'put ''PW5ldyBJKDEwKSxGPW5ldyBJKDMpLE89bmV3IEkoNyksej15KDEyNzI3KSxOPXkoMzM0Mik7ZnVuY3Rpb24gTChlZSxKKXtyZXR1cm4gSj1KfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKGVlKXx8KGVlPW5ldyBCdWZmZXIoZWUsSikpLHRoaXMuX3B1Yj1uZXcgSShlZSksdGhpc31mdW5jdGlv''@;'; put 'put ''biBLKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fcHJpdj1uZXcgSShlZSksdGhpc311ZS5leHBvcnRzPVk7dmFyIFU9e307ZnVuY3Rpb24gWShlZSxKLG5lKXt0aGlzLnNldEdlbmVyYXRvcihKKSx0aGlz''@;'; put 'put ''Ll9fcHJpbWU9bmV3IEkoZWUpLHRoaXMuX3ByaW1lPUkubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPWVlLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAsbmU/KHRoaXMuc2V0UHVibGljS2V5PUwsdGhpcy5z''@;'; put 'put ''ZXRQcml2YXRlS2V5PUspOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIHEoZWUsSil7dmFyIG5lPW5ldyBCdWZmZXIoZWUudG9BcnJheSgpKTtyZXR1cm4gSj9uZS50b1N0cmluZyhKKTpuZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoWS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBXKGVlLEope3ZhciBuZT1KLnRvU3RyaW5nKCJoZXgiKSxpZT1bbmUsZWUudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoaWUgaW4g''@;'; put 'put ''VSlyZXR1cm4gVVtpZV07dmFyIG1lLGxlPTA7aWYoZWUuaXNFdmVuKCl8fCF6LnNpbXBsZVNpZXZlfHwhei5mZXJtYXRUZXN0KGVlKXx8IWcudGVzdChlZSkpcmV0dXJuIGxlKz0xLFVbaWVdPWxlKz0iMDIiPT09bmV8fCIwNSI9PT1uZT84OjQsbGU7c3dpdGNoKGcudGVzdChlZS5zaHJuKDEp''@;'; put 'put ''KXx8KGxlKz0yKSxuZSl7Y2FzZSIwMiI6ZWUubW9kKEIpLmNtcCh3KSYmKGxlKz04KTticmVhaztjYXNlIjA1IjoobWU9ZWUubW9kKFApKS5jbXAoRikmJm1lLmNtcChPKSYmKGxlKz04KTticmVhaztkZWZhdWx0OmxlKz00fXJldHVybiBVW2llXT1sZSxsZX0odGhpcy5fX3ByaW1lLHRoaXMu''@;'; put 'put ''X19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksWS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBJKE4odGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93''@;'; put 'put ''KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxZLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKGVlKXt2YXIgSj0oZWU9KGVlPW5ldyBJKGVlKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLG5lPW5ldyBC''@;'; put 'put ''dWZmZXIoSi50b0FycmF5KCkpLGllPXRoaXMuZ2V0UHJpbWUoKTtpZihuZS5sZW5ndGg8aWUubGVuZ3RoKXt2YXIgbGU9bmV3IEJ1ZmZlcihpZS5sZW5ndGgtbmUubGVuZ3RoKTtsZS5maWxsKDApLG5lPUJ1ZmZlci5jb25jYXQoW2xlLG5lXSl9cmV0dXJuIG5lfSxZLnByb3RvdHlwZS5nZXRQ''@;'; put 'put ''dWJsaWNLZXk9ZnVuY3Rpb24oSil7cmV0dXJuIHEodGhpcy5fcHViLEopfSxZLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKEope3JldHVybiBxKHRoaXMuX3ByaXYsSil9LFkucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKGVlKXtyZXR1cm4gcSh0aGlzLl9fcHJpbWUsZWUp''@;'; put 'put ''fSxZLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oZWUpe3JldHVybiBxKHRoaXMuX2dlbixlZSl9LFkucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihlZSxKKXtyZXR1cm4gSj1KfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKGVlKXx8KGVlPW5ldyBCdWZmZXIoZWUsSikp''@;'; put 'put ''LHRoaXMuX19nZW49ZWUsdGhpcy5fZ2VuPW5ldyBJKGVlKSx0aGlzfX0sMTI3Mjc6KHVlLFgseSk9Pnt2YXIgST15KDMzNDIpO3VlLmV4cG9ydHM9bGUsbGUuc2ltcGxlU2lldmU9bmUsbGUuZmVybWF0VGVzdD1pZTt2YXIgXz15KDM4MjgwKSxnPW5ldyBfKDI0KSx3PW5ldyh5KDUzNDU5KSks''@;'; put 'put ''UD1uZXcgXygxKSxGPW5ldyBfKDIpLE89bmV3IF8oNSksTD0obmV3IF8oMTYpLG5ldyBfKDgpLG5ldyBfKDEwKSksSz1uZXcgXygzKSxXPShuZXcgXyg3KSxuZXcgXygxMSkpLFk9bmV3IF8oNCksZWU9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiBuZShtZSl7Zm9yKHZhciBfZT1mdW5jdGlv''@;'; put 'put ''biBKKCl7aWYobnVsbCE9PWVlKXJldHVybiBlZTt2YXIgX2U9W107X2VbMF09Mjtmb3IodmFyIFRlPTEsU2U9MztTZTwxMDQ4NTc2O1NlKz0yKXtmb3IodmFyIHplPU1hdGguY2VpbChNYXRoLnNxcnQoU2UpKSxWPTA7VjxUZSYmX2VbVl08PXplJiZTZSVfZVtWXSE9MDtWKyspO1RlIT09ViYm''@;'; put 'put ''X2VbVl08PXplfHwoX2VbVGUrK109U2UpfXJldHVybiBlZT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKWlmKDA9PT1tZS5tb2RuKF9lW1RlXSkpcmV0dXJuIDA9PT1tZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gaWUobWUpe3ZhciBfZT1fLm1vbnQobWUpO3JldHVy''@;'; put 'put ''biAwPT09Ri50b1JlZChfZSkucmVkUG93KG1lLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIGxlKG1lLF9lKXtpZihtZTwxNilyZXR1cm4gbmV3IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxTZTs7KXtmb3Io''@;'; put 'put ''VGU9bmV3IF8oSShNYXRoLmNlaWwobWUvOCkpKTtUZS5iaXRMZW5ndGgoKT5tZTspVGUuaXNocm4oMSk7aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoUCksVGUudGVzdG4oMSl8fFRlLmlhZGQoRiksX2UuY21wKEYpKXtpZighX2UuY21wKE8pKWZvcig7VGUubW9kKEwpLmNtcChLKTspVGUuaWFk''@;'; put 'put ''ZChZKX1lbHNlIGZvcig7VGUubW9kKGcpLmNtcChXKTspVGUuaWFkZChZKTtpZihuZShTZT1UZS5zaHJuKDEpKSYmbmUoVGUpJiZpZShTZSkmJmllKFRlKSYmdy50ZXN0KFNlKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzgyODA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnBy''@;'; put 'put ''b3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTAp''@;'; put 'put ''LHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg2''@;'; put 'put ''NjA4OSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixi''@;'; put 'put ''LTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1p''@;'; put 'put ''bj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0''@;'; put 'put ''QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VI''@;'; put 'put ''ZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRo''@;'; put 'put ''aXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82''@;'; put 'put ''NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTAp''@;'; put 'put ''cmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9''@;'; put 'put ''MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNl''@;'; put 'put ''IGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tD''@;'; put 'put ''XT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYikl''@;'; put 'put ''Mj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0''@;'; put 'put ''aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVs''@;'; put 'put ''bihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3Ro''@;'; put 'put ''aXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5n''@;'; put 'put ''dGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3Ro''@;'; put 'put ''aXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3Jt''@;'; put 'put ''U2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6''@;'; put 'put ''IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIx''@;'; put 'put ''NiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2''@;'; put 'put ''NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNb''@;'; put 'put ''MF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8''@;'; put 'put ''cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwx''@;'; put 'put ''LDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2''@;'; put 'put ''LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49''@;'; put 'put ''MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0''@;'; put 'put ''ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZn''@;'; put 'put ''KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10''@;'; put 'put ''aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxB''@;'; put 'put ''PXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1''@;'; put 'put ''KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49''@;'; put 'put ''NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8''@;'; put 'put ''fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5s''@;'; put 'put ''ZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0''@;'; put 'put ''dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0''@;'; put 'put ''aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''fSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3Io''@;'; put 'put ''O3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIu''@;'; put 'put ''bGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5p''@;'; put 'put ''dWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29y''@;'; put 'put ''ZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGco''@;'; put 'put ''ISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1w''@;'; put 'put ''JTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29y''@;'; put 'put ''ZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10''@;'; put 'put ''aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3Ro''@;'; put 'put ''Pyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tI''@;'; put 'put ''XT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53''@;'; put 'put ''b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVn''@;'; put 'put ''YXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3Zh''@;'; put 'put ''ciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tq''@;'; put 'put ''XSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7''@;'; put 'put ''ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLE1lPTgxOTEm''@;'; put 'put ''b3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10''@;'; put 'put ''PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsc2k9MHxUWzFdLFF0PTgxOTEmc2ksc249c2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+''@;'; put 'put ''PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxo''@;'; put 'put ''aT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwo''@;'; put 'put ''dGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAs''@;'; put 'put ''RWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+''@;'; put 'put ''Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxR''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01h''@;'; put 'put ''dGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsV3QpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''dmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0''@;'; put 'put ''ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsV3QpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxX''@;'; put 'put ''ZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01h''@;'; put 'put ''dGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxz''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+''@;'; put 'put ''Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxR''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLHJuKXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAs''@;'; put 'put ''RGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUscm4pfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChN''@;'; put 'put ''ZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0''@;'; put 'put ''KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChB''@;'; put 'put ''ZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGpl''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5p''@;'; put 'put ''bXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChu''@;'; put 'put ''dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4p''@;'; put 'put ''fDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChN''@;'; put 'put ''dCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtl''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5p''@;'; put 'put ''bXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChu''@;'; put 'put ''dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0''@;'; put 'put ''KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAs''@;'; put 'put ''eWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+''@;'; put 'put ''Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChp''@;'; put 'put ''dCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4p''@;'; put 'put ''KStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4''@;'; put 'put ''XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxhLEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYs''@;'; put 'put ''cCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMs''@;'; put 'put ''cCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIg''@;'; put 'put ''aj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhz''@;'; put 'put ''ZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1''@;'; put 'put ''cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJh''@;'; put 'put ''bnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0''@;'; put 'put ''ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLE1lPUNbYWUrd2Ural0sdmU9dGUqb3Qtc2UqTWU7TWU9dGUqTWUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZStNZSx4W2FlK3dlK2pdPVVlLW90LENb''@;'; put 'put ''YWUrd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxU''@;'; put 'put ''KzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9y''@;'; put 'put ''bWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5w''@;'; put 'put ''cm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkp''@;'; put 'put ''fSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhp''@;'; put 'put ''cy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3Jk''@;'; put 'put ''cyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVb''@;'; put 'put ''d2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5l''@;'; put 'put ''Z2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9''@;'; put 'put ''LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhw''@;'; put 'put ''LHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+''@;'; put 'put ''Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcg''@;'; put 'put ''dygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5p''@;'; put 'put ''dXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlz''@;'; put 'put ''LndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsr''@;'; put 'put ''KXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFy''@;'; put 'put ''IEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208''@;'; put 'put ''SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndv''@;'; put 'put ''cmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFk''@;'; put 'put ''ZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZv''@;'; put 'put ''cih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0o''@;'; put 'put ''KEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9''@;'; put 'put ''ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxl''@;'; put 'put ''bmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2''@;'; put 'put ''ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5z''@;'; put 'put ''dWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09''@;'; put 'put ''eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0''@;'; put 'put ''aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9''@;'; put 'put ''dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdh''@;'; put 'put ''dGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1i''@;'; put 'put ''P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3''@;'; put 'put ''LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMp''@;'; put 'put ''O3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0x''@;'; put 'put ''O0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpi''@;'; put 'put ''O3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJv''@;'; put 'put ''KCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4o''@;'; put 'put ''MSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkm''@;'; put 'put ''JihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlh''@;'; put 'put ''ZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2lu''@;'; put 'put ''dm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4w''@;'; put 'put ''JiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwy''@;'; put 'put ''NjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21w''@;'; put 'put ''bigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdh''@;'; put 'put ''dGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9''@;'; put 'put ''YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9''@;'; put 'put ''MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09''@;'; put 'put ''PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2Im''@;'; put 'put ''JihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5n''@;'; put 'put ''dGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9''@;'; put 'put ''fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49''@;'; put 'put ''MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygw''@;'; put 'put ''PT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBp''@;'; put 'put ''biByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJl''@;'; put 'put ''YWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3''@;'; put 'put ''LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRT''@;'; put 'put ''dWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRN''@;'; put 'put ''dWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRo''@;'; put 'put ''aXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5y''@;'; put 'put ''ZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBv''@;'; put 'put ''dyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5u''@;'; put 'put ''KS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2Fs''@;'; put 'put ''bCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUo''@;'; put 'put ''Vik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRo''@;'; put 'put ''aXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52''@;'; put 'put ''Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcg''@;'; put 'put ''QXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5u''@;'; put 'put ''KTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7''@;'; put 'put ''VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9''@;'; put 'put ''MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3Au''@;'; put 'put ''bGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxl''@;'; put 'put ''bmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9''@;'; put 'put ''NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09''@;'; put 'put ''PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1w''@;'; put 'put ''Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAu''@;'; put 'put ''dW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAs''@;'; put 'put ''Yik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+''@;'; put 'put ''PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rp''@;'; put 'put ''b24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJv''@;'; put 'put ''dG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''aXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBi''@;'; put 'put ''PXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJu''@;'; put 'put ''KDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOylt''@;'; put 'put ''LnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhV''@;'; put 'put ''ZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5t''@;'; put 'put ''KTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkp''@;'; put 'put ''cmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9''@;'; put 'put ''PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFl''@;'; put 'put ''KSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rp''@;'; put 'put ''b24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHpl''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBd''@;'; put 'put ''PTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlz''@;'; put 'put ''dWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIp''@;'; put 'put ''LEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlh''@;'; put 'put ''ZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sOTA1MTg6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9WDtJLnZlcnNpb249eSgxNjM2KS5yRSxJLnV0aWxzPXkoMzEzNiksSS5yYW5kPXkoMzUyOTQpLEkuY3VydmU9eSg4NzI5KSxJLmN1cnZlcz15KDIzNDAxKSxJLmVjPXkoMjkwNDIpLEkuZWRkc2E9eSg4MzA0NSl9LDk4ODI4Oih1ZSxYLHkpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPXkoODg3MjMpLF89eSgzMTM2KSxnPV8uZ2V0TkFGLEI9Xy5nZXRKU0Ysdz1fLmFzc2VydDtmdW5jdGlvbiBQKE8seil7dGhpcy50eXBlPU8sdGhpcy5wPW5ldyBJKHoucCwxNiksdGhpcy5yZWQ9ei5wcmltZT9JLnJlZCh6LnByaW1lKTpJLm1vbnQodGhpcy5wKSx0aGlzLnpl''@;'; put 'put ''cm89bmV3IEkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBJKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPXoubiYmbmV3IEkoei5uLDE2KSx0aGlzLmc9ei5nJiZ0aGlzLnBvaW50RnJvbUpTT04oei5nLHouZ1JlZCks''@;'; put 'put ''dGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBOPXRoaXMubiYmdGhp''@;'; put 'put ''cy5wLmRpdih0aGlzLm4pOyFOfHxOLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEYoTyx6KXt0aGlzLmN1cnZlPU8sdGhpcy50eXBlPXosdGhpcy5wcmVjb21wdXRlZD1u''@;'; put 'put ''dWxsfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUuX2Zp''@;'; put 'put ''eGVkTmFmTXVsPWZ1bmN0aW9uKHosTil7dyh6LnByZWNvbXB1dGVkKTt2YXIgTD16Ll9nZXREb3VibGVzKCksSz1nKE4sMSx0aGlzLl9iaXRMZW5ndGgpLFU9KDE8PEwuc3RlcCsxKS0oTC5zdGVwJTI9PTA/MjoxKTtVLz0zO3ZhciBZLHEsVz1bXTtmb3IoWT0wO1k8Sy5sZW5ndGg7WSs9TC5z''@;'; put 'put ''dGVwKXtxPTA7Zm9yKHZhciBlZT1ZK0wuc3RlcC0xO2VlPj1ZO2VlLS0pcT0ocTw8MSkrS1tlZV07Vy5wdXNoKHEpfWZvcih2YXIgSj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksbmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPVU7aWU+MDtpZS0tKXtmb3IoWT0wO1k8Vy5s''@;'; put 'put ''ZW5ndGg7WSsrKShxPVdbWV0pPT09aWU/bmU9bmUubWl4ZWRBZGQoTC5wb2ludHNbWV0pOnE9PT0taWUmJihuZT1uZS5taXhlZEFkZChMLnBvaW50c1tZXS5uZWcoKSkpO0o9Si5hZGQobmUpfXJldHVybiBKLnRvUCgpfSxQLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih6LE4pe2Zvcih2''@;'; put 'put ''YXIgTD00LEs9ei5fZ2V0TkFGUG9pbnRzKEwpLFU9Sy5wb2ludHMsVz1nKE4sTD1LLnduZCx0aGlzLl9iaXRMZW5ndGgpLFk9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9Vy5sZW5ndGgtMTtxPj0wO3EtLSl7Zm9yKHZhciBlZT0wO3E+PTAmJjA9PT1XW3FdO3EtLSllZSsrO2lmKHE+''@;'; put 'put ''PTAmJmVlKyssWT1ZLmRibHAoZWUpLHE8MClicmVhazt2YXIgSj1XW3FdO3coMCE9PUopLFk9ImFmZmluZSI9PT16LnR5cGU/WS5taXhlZEFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpOlkuYWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmlu''@;'; put 'put ''ZSI9PT16LnR5cGU/WS50b1AoKTpZfSxQLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih6LE4sTCxLLFUpe3ZhciBKLG5lLGllLFc9dGhpcy5fd25hZlQxLFk9dGhpcy5fd25hZlQyLHE9dGhpcy5fd25hZlQzLGVlPTA7Zm9yKEo9MDtKPEs7SisrKXt2YXIgbGU9KGllPU5bSl0pLl9n''@;'; put 'put ''ZXROQUZQb2ludHMoeik7V1tKXT1sZS53bmQsWVtKXT1sZS5wb2ludHN9Zm9yKEo9Sy0xO0o+PTE7Si09Mil7dmFyIG1lPUotMSxfZT1KO2lmKDE9PT1XW21lXSYmMT09PVdbX2VdKXt2YXIgVGU9W05bbWVdLG51bGwsbnVsbCxOW19lXV07MD09PU5bbWVdLnkuY21wKE5bX2VdLnkpPyhUZVsx''@;'; put 'put ''XT1OW21lXS5hZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk6MD09PU5bbWVdLnkuY21wKE5bX2VdLnkucmVkTmVnKCkpPyhUZVsxXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0uYWRkKE5bX2VdLm5lZygpKSk6KFRlWzFd''@;'; put 'put ''PU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpO3ZhciBTZT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSx6ZT1CKExbbWVdLExbX2VdKTtmb3IoZWU9TWF0aC5tYXgoemVbMF0ubGVuZ3RoLGVlKSxxW21lXT1uZXcgQXJy''@;'; put 'put ''YXkoZWUpLHFbX2VdPW5ldyBBcnJheShlZSksbmU9MDtuZTxlZTtuZSsrKXFbbWVdW25lXT1TZVszKigxKygwfHplWzBdW25lXSkpKygxKygwfHplWzFdW25lXSkpXSxxW19lXVtuZV09MCxZW21lXT1UZX1lbHNlIHFbbWVdPWcoTFttZV0sV1ttZV0sdGhpcy5fYml0TGVuZ3RoKSxxW19lXT1n''@;'; put 'put ''KExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCksZWU9TWF0aC5tYXgocVttZV0ubGVuZ3RoLGVlKSxlZT1NYXRoLm1heChxW19lXS5sZW5ndGgsZWUpfXZhciBiPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx4PXRoaXMuX3duYWZUNDtmb3IoSj1lZTtKPj0wO0otLSl7Zm9yKHZhciBD''@;'; put 'put ''PTA7Sj49MDspe3ZhciBUPSEwO2ZvcihuZT0wO25lPEs7bmUrKyl4W25lXT0wfHFbbmVdW0pdLDAhPT14W25lXSYmKFQ9ITEpO2lmKCFUKWJyZWFrO0MrKyxKLS19aWYoSj49MCYmQysrLGI9Yi5kYmxwKEMpLEo8MClicmVhaztmb3IobmU9MDtuZTxLO25lKyspe3ZhciBIPXhbbmVdOzAhPT1I''@;'; put 'put ''JiYoSD4wP2llPVlbbmVdW0gtMT4+MV06SDwwJiYoaWU9WVtuZV1bLUgtMT4+MV0ubmVnKCkpLGI9ImFmZmluZSI9PT1pZS50eXBlP2IubWl4ZWRBZGQoaWUpOmIuYWRkKGllKSl9fWZvcihKPTA7SjxLO0orKylZW0pdPW51bGw7cmV0dXJuIFU/YjpiLnRvUCgpfSxQLkJhc2VQb2ludD1GLEYu''@;'; put 'put ''cHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sUC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixOKXt6''@;'; put 'put ''PV8udG9BcnJheSh6LE4pO3ZhciBMPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT16WzBdfHw2PT09elswXXx8Nz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT0yKkwpcmV0dXJuIDY9PT16WzBdP3coelt6Lmxlbmd0aC0xXSUyPT0wKTo3PT09elswXSYmdyh6W3oubGVuZ3RoLTFdJTI9PTEpLHRo''@;'; put 'put ''aXMucG9pbnQoei5zbGljZSgxLDErTCksei5zbGljZSgxK0wsMSsyKkwpKTtpZigoMj09PXpbMF18fDM9PT16WzBdKSYmei5sZW5ndGgtMT09PUwpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh6LnNsaWNlKDEsMStMKSwzPT09elswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZv''@;'; put 'put ''cm1hdCIpfSxGLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZSh6LCEwKX0sRi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih6KXt2YXIgTj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEw9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUi''@;'; put 'put ''LE4pO3JldHVybiB6P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChMKTpbNF0uY29uY2F0KEwsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLE4pKX0sRi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHosTil7cmV0dXJuIF8uZW5jb2RlKHRoaXMuX2VuY29kZShOKSx6KX0sRi5w''@;'; put 'put ''cm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBOPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gTi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLE4uZG91Ymxlcz10aGlzLl9nZXREb3VibGVz''@;'; put 'put ''KDQseiksTi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPU4sdGhpc30sRi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oeil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIE49dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhTiYmTi5w''@;'; put 'put ''b2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHouYml0TGVuZ3RoKCkrMSkvTi5zdGVwKX0sRi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oeixOKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxl''@;'; put 'put ''cztmb3IodmFyIEw9W3RoaXNdLEs9dGhpcyxVPTA7VTxOO1UrPXope2Zvcih2YXIgVz0wO1c8ejtXKyspSz1LLmRibCgpO0wucHVzaChLKX1yZXR1cm57c3RlcDp6LHBvaW50czpMfX0sRi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0''@;'; put 'put ''aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBOPVt0aGlzXSxMPSgxPDx6KS0xLEs9MT09PUw/bnVsbDp0aGlzLmRibCgpLFU9MTtVPEw7VSsrKU5bVV09TltVLTFdLmFkZChLKTtyZXR1cm57d25kOnoscG9pbnRzOk59fSxGLnByb3RvdHlw''@;'; put 'put ''ZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLEw9MDtMPHo7TCsrKU49Ti5kYmwoKTtyZXR1cm4gTn19LDU1NTM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzEzNiksXz15KDg4NzIz''@;'; put 'put ''KSxnPXkoNzE5OTMpLEI9eSg5ODgyOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKE8pe3RoaXMudHdpc3RlZD0xIT0oMHxPLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Ty5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsQi5jYWxsKHRoaXMsImVkd2FyZHMiLE8pLHRoaXMu''@;'; put 'put ''YT1uZXcgXyhPLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBfKE8uYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgXyhPLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlz''@;'; put 'put ''LmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSx3KCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxPLmMpfWZ1bmN0aW9uIEYoTyx6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMsTywicHJvamVjdGl2ZSIpLG51bGw9PT16JiZu''@;'; put 'put ''dWxsPT09TiYmbnVsbD09PUw/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgXyh6LDE2KSx0aGlzLnk9bmV3IF8oTiwxNiksdGhp''@;'; put 'put ''cy56PUw/bmV3IF8oTCwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PUsmJm5ldyBfKEssMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVk''@;'; put 'put ''fHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0''@;'; put 'put ''aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfWcoUCxCKSx1ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMubU9uZUE/ei5yZWROZWcoKTp0aGlz''@;'; put 'put ''LmEucmVkTXVsKHopfSxQLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5vbmVDP3o6dGhpcy5jLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHosTixMLEspe3JldHVybiB0aGlzLnBvaW50KHosTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZy''@;'; put 'put ''b21YPWZ1bmN0aW9uKHosTil7KHo9bmV3IF8oeiwxNikpLnJlZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPXoucmVkU3FyKCksSz10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKEwpKSxVPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChMKSks''@;'; put 'put ''Vz1LLnJlZE11bChVLnJlZEludm0oKSksWT1XLnJlZFNxcnQoKTtpZigwIT09WS5yZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIHE9WS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTiYmIXF8fCFOJiZxKSYmKFk9''@;'; put 'put ''WS5yZWROZWcoKSksdGhpcy5wb2ludCh6LFkpfSxQLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKHosTil7KHo9bmV3IF8oeiwxNikpLnJlZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPXoucmVkU3FyKCksSz1MLnJlZFN1Yih0aGlzLmMyKSxVPUwucmVkTXVsKHRoaXMuZCku''@;'; put 'put ''cmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLFc9Sy5yZWRNdWwoVS5yZWRJbnZtKCkpO2lmKDA9PT1XLmNtcCh0aGlzLnplcm8pKXtpZihOKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx6KX12YXIgWT1XLnJlZFNxcnQo''@;'; put 'put ''KTtpZigwIT09WS5yZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIFkuZnJvbVJlZCgpLmlzT2RkKCkhPT1OJiYoWT1ZLnJlZE5lZygpKSx0aGlzLnBvaW50KFkseil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1''@;'; put 'put ''bmN0aW9uKHope2lmKHouaXNJbmZpbml0eSgpKXJldHVybiEwO3oubm9ybWFsaXplKCk7dmFyIE49ei54LnJlZFNxcigpLEw9ei55LnJlZFNxcigpLEs9Ti5yZWRNdWwodGhpcy5hKS5yZWRBZGQoTCksVT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChOKS5y''@;'; put 'put ''ZWRNdWwoTCkpKTtyZXR1cm4gMD09PUsuY21wKFUpfSxnKEYsQi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oeil7cmV0dXJuIEYuZnJvbUpTT04odGhpcyx6KX0sUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyBGKHRo''@;'; put 'put ''aXMseixOLEwsSyl9LEYuZnJvbUpTT049ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3IEYoeixOWzBdLE5bMV0sTlsyXSl9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0''@;'; put 'put ''aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54''@;'; put 'put ''LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxGLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLEw9dGhpcy56LnJlZFNxcigp''@;'; put 'put ''O0w9TC5yZWRJQWRkKEwpO3ZhciBLPXRoaXMuY3VydmUuX211bEEoeiksVT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih6KS5yZWRJU3ViKE4pLFc9Sy5yZWRBZGQoTiksWT1XLnJlZFN1YihMKSxxPUsucmVkU3ViKE4pLGVlPVUucmVkTXVsKFkpLEo9Vy5yZWRNdWwo''@;'; put 'put ''cSksbmU9VS5yZWRNdWwocSksaWU9WS5yZWRNdWwoVyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoZWUsSixpZSxuZSl9LEYucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEssVSxXLFkscSxlZSx6PXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxOPXRoaXMueC5yZWRT''@;'; put 'put ''cXIoKSxMPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBKPShZPXRoaXMuY3VydmUuX211bEEoTikpLnJlZEFkZChMKTt0aGlzLnpPbmU/KEs9ei5yZWRTdWIoTikucmVkU3ViKEwpLnJlZE11bChKLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLFU9Si5yZWRNdWwo''@;'; put 'put ''WS5yZWRTdWIoTCkpLFc9Si5yZWRTcXIoKS5yZWRTdWIoSikucmVkU3ViKEopKToocT10aGlzLnoucmVkU3FyKCksZWU9Si5yZWRTdWIocSkucmVkSVN1YihxKSxLPXoucmVkU3ViKE4pLnJlZElTdWIoTCkucmVkTXVsKGVlKSxVPUoucmVkTXVsKFkucmVkU3ViKEwpKSxXPUoucmVkTXVsKGVl''@;'; put 'put ''KSl9ZWxzZSBZPU4ucmVkQWRkKEwpLHE9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLGVlPVkucmVkU3ViKHEpLnJlZFN1YihxKSxLPXRoaXMuY3VydmUuX211bEMoei5yZWRJU3ViKFkpKS5yZWRNdWwoZWUpLFU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwoTi5yZWRJU3Vi''@;'; put 'put ''KEwpKSxXPVkucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUsVyl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHope3ZhciBOPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoei55LnJlZFN1Yih6LngpKSxMPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoei55LnJlZEFkZCh6LngpKSxLPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVs''@;'; put 'put ''KHoudCksVT10aGlzLnoucmVkTXVsKHouei5yZWRBZGQoei56KSksVz1MLnJlZFN1YihOKSxZPVUucmVkU3ViKEspLHE9VS5yZWRBZGQoSyksZWU9TC5yZWRBZGQoTiksSj1XLnJlZE11bChZKSxuZT1xLnJlZE11bChlZSksaWU9Vy5yZWRNdWwoZWUpLGxlPVkucmVkTXVsKHEpO3JldHVybiB0''@;'; put 'put ''aGlzLmN1cnZlLnBvaW50KEosbmUsbGUsaWUpfSxGLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbih6KXt2YXIgbmUsaWUsTj10aGlzLnoucmVkTXVsKHoueiksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bCh6LngpLFU9dGhpcy55LnJlZE11bCh6LnkpLFc9dGhpcy5jdXJ2ZS5kLnJl''@;'; put 'put ''ZE11bChLKS5yZWRNdWwoVSksWT1MLnJlZFN1YihXKSxxPUwucmVkQWRkKFcpLGVlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoei54LnJlZEFkZCh6LnkpKS5yZWRJU3ViKEspLnJlZElTdWIoVSksSj1OLnJlZE11bChZKS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0''@;'; put 'put ''ZWQ/KG5lPU4ucmVkTXVsKHEpLnJlZE11bChVLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKEspKSksaWU9WS5yZWRNdWwocSkpOihuZT1OLnJlZE11bChxKS5yZWRNdWwoVS5yZWRTdWIoSykpLGllPXRoaXMuY3VydmUuX211bEMoWSkucmVkTXVsKHEpKSx0aGlzLmN1cnZlLnBvaW50KEosbmUs''@;'; put 'put ''aWUpfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3o6ei5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh6KTp0aGlzLl9wcm9qQWRkKHopfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeil7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2hhc0RvdWJsZXMoeik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx6KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMseil9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixM''@;'; put 'put ''XSwyLCExKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixMXSwyLCEwKX0sRi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB6PXRo''@;'; put 'put ''aXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHopLHRoaXMueT10aGlzLnkucmVkTXVsKHopLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHopKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEYucHJvdG90eXBlLm5lZz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90''@;'; put 'put ''eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcz09PXp8fDA9PT10aGlzLmdldFgoKS5jbXAoei5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHouZ2V0WSgp''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHope3ZhciBOPXoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwO2Zvcih2YXIgTD16LmNsb25lKCksSz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7''@;'; put 'put ''aWYoTC5pYWRkKHRoaXMuY3VydmUubiksTC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihOLnJlZElBZGQoSyksMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITB9fSxGLnByb3RvdHlwZS50b1A9Ri5wcm90b3R5cGUubm9ybWFsaXplLEYucHJvdG90eXBlLm1peGVkQWRkPUYucHJv''@;'; put 'put ''dG90eXBlLmFkZH0sODcyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YO0kuYmFzZT15KDk4ODI4KSxJLnNob3J0PXkoNjgwNzUpLEkubW9udD15KDY0OTQ3KSxJLmVkd2FyZHM9eSg1NTUzNyl9LDY0OTQ3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODg3MjMpLF89''@;'; put 'put ''eSg3MTk5MyksZz15KDk4ODI4KSxCPXkoMzEzNik7ZnVuY3Rpb24gdyhGKXtnLmNhbGwodGhpcywibW9udCIsRiksdGhpcy5hPW5ldyBJKEYuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSShGLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBJKDQpLnRvUmVkKHRo''@;'; put 'put ''aXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBQKEYsTyx6KXtnLkJhc2VQb2ludC5jYWxsKHRoaXMsRiwicHJvamVjdGl2ZSIpLG51bGw9PT1P''@;'; put 'put ''JiZudWxsPT09ej8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IEkoTywxNiksdGhpcy56PW5ldyBJKHosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMu''@;'; put 'put ''ej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9Xyh3LGcpLHVlLmV4cG9ydHM9dyx3LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihPKXt2YXIgej1PLm5vcm1hbGl6ZSgpLngsTj16LnJlZFNxcigpLEw9Ti5yZWRNdWwoeikucmVkQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZEFk''@;'; put 'put ''ZCh6KTtyZXR1cm4gMD09PUwucmVkU3FydCgpLnJlZFNxcigpLmNtcChMKX0sXyhQLGcuQmFzZVBvaW50KSx3LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihPLHope3JldHVybiB0aGlzLnBvaW50KEIudG9BcnJheShPLHopLDEpfSx3LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihP''@;'; put 'put ''LHope3JldHVybiBuZXcgUCh0aGlzLE8seil9LHcucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTyl7cmV0dXJuIFAuZnJvbUpTT04odGhpcyxPKX0sUC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sUC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFAuZnJvbUpTT049ZnVuY3Rpb24oTyx6KXtyZXR1cm4gbmV3IFAoTyx6WzBdLHpbMV18fE8ub25lKX0sUC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5p''@;'; put 'put ''dHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxQLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10''@;'; put 'put ''aGlzLnouY21wbigwKX0sUC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEs9ei5yZWRTdWIoTCksVT16LnJlZE11bChMKSxXPUsucmVkTXVsKEwucmVkQWRkKHRoaXMu''@;'; put 'put ''Y3VydmUuYTI0LnJlZE11bChLKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUsVyl9LFAucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oTyx6''@;'; put 'put ''KXt2YXIgTj10aGlzLngucmVkQWRkKHRoaXMueiksTD10aGlzLngucmVkU3ViKHRoaXMueiksSz1PLngucmVkQWRkKE8ueiksVz1PLngucmVkU3ViKE8ueikucmVkTXVsKE4pLFk9Sy5yZWRNdWwoTCkscT16LnoucmVkTXVsKFcucmVkQWRkKFkpLnJlZFNxcigpKSxlZT16LngucmVkTXVsKFcu''@;'; put 'put ''cmVkSVN1YihZKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocSxlZSl9LFAucHJvdG90eXBlLm11bD1mdW5jdGlvbihPKXtmb3IodmFyIHo9Ty5jbG9uZSgpLE49dGhpcyxMPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxVPVtdOzAhPT16LmNtcG4oMCk7ei5pdXNocm4o''@;'; put 'put ''MSkpVS5wdXNoKHouYW5kbG4oMSkpO2Zvcih2YXIgVz1VLmxlbmd0aC0xO1c+PTA7Vy0tKTA9PT1VW1ddPyhOPU4uZGlmZkFkZChMLHRoaXMpLEw9TC5kYmwoKSk6KEw9Ti5kaWZmQWRkKEwsdGhpcyksTj1OLmRibCgpKTtyZXR1cm4gTH0sUC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE8p''@;'; put 'put ''e3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKE8uZ2V0WCgpKX0sUC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxQLnByb3RvdHlwZS5nZXRYPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDY4MDc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzEzNiksXz15KDg4NzIzKSxnPXkoNzE5OTMpLEI9eSg5ODgyOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope0IuY2FsbCh0aGlz''@;'; put 'put ''LCJzaG9ydCIseiksdGhpcy5hPW5ldyBfKHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgXyh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVl''@;'; put 'put ''QT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLEwsSyl7Qi5CYXNl''@;'; put 'put ''UG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IF8oTiwxNiksdGhpcy55PW5ldyBfKEwsMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMu''@;'; put 'put ''eS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gTyh6LE4sTCxLKXtCLkJh''@;'; put 'put ''c2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PUwmJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgXygwKSk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksdGhp''@;'; put 'put ''cy56PW5ldyBfKEssMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQp''@;'; put 'put ''KSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBMLEs7aWYoTi5iZXRh''@;'; put 'put ''KUw9bmV3IF8oTi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgVT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtMPShMPVVbMF0uY21wKFVbMV0pPDA/VVswXTpVWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgXyhOLmxhbWJkYSwxNik7ZWxzZXt2YXIg''@;'; put 'put ''Vz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChXWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpP0s9V1swXTp3KDA9PT10aGlzLmcubXVsKEs9V1sxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEwpKSl9cmV0dXJue2JldGE6TCxsYW1iZGE6SyxiYXNpczpO''@;'; put 'put ''LmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybnthOm5ldyBfKHEuYSwxNiksYjpuZXcgXyhxLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBMPU49PT10aGlzLnA/dGhpcy5yZWQ6Xy5t''@;'; put 'put ''b250KE4pLEs9bmV3IF8oMikudG9SZWQoTCkucmVkSW52bSgpLFU9Sy5yZWROZWcoKSxXPW5ldyBfKDMpLnRvUmVkKEwpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1UucmVkQWRkKFcpLmZyb21SZWQoKSxVLnJlZFN1YihXKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5f''@;'; put 'put ''Z2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2YXIgSixuZSxpZSxsZSxtZSxfZSxUZSx6ZSxWLEw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxLPU4sVT10aGlzLm4uY2xvbmUoKSxXPW5ldyBfKDEpLFk9bmV3IF8oMCkscT1uZXcgXygwKSxlZT1u''@;'; put 'put ''ZXcgXygxKSxTZT0wOzAhPT1LLmNtcG4oMCk7KXt2YXIgcD1VLmRpdihLKTt6ZT1VLnN1YihwLm11bChLKSksVj1xLnN1YihwLm11bChXKSk7dmFyIGI9ZWUuc3ViKHAubXVsKFkpKTtpZighaWUmJnplLmNtcChMKTwwKUo9VGUubmVnKCksbmU9VyxpZT16ZS5uZWcoKSxsZT1WO2Vsc2UgaWYo''@;'; put 'put ''aWUmJjI9PSsrU2UpYnJlYWs7VGU9emUsVT1LLEs9emUscT1XLFc9VixlZT1ZLFk9Yn1tZT16ZS5uZWcoKSxfZT1WO3ZhciB4PWllLnNxcigpLmFkZChsZS5zcXIoKSk7cmV0dXJuIG1lLnNxcigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYobWU9SixfZT1uZSksaWUubmVnYXRpdmUmJihp''@;'; put 'put ''ZT1pZS5uZWcoKSxsZT1sZS5uZWcoKSksbWUubmVnYXRpdmUmJihtZT1tZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6bGV9LHthOm1lLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLmVuZG8uYmFzaXMsSz1MWzBdLFU9TFsxXSxXPVUu''@;'; put 'put ''Yi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxZPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxxPVcubXVsKEsuYSksZWU9WS5tdWwoVS5hKSxKPVcubXVsKEsuYiksbmU9WS5tdWwoVS5iKTtyZXR1cm57azE6Ti5zdWIocSkuc3ViKGVlKSxrMjpKLmFkZChuZSkubmVnKCl9fSxQ''@;'; put 'put ''LnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE4sTCl7KE49bmV3IF8oTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJlZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFU9Sy5yZWRTcXJ0KCk7aWYo''@;'; put 'put ''MCE9PVUucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBXPVUuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihVPVUucmVkTmVnKCkpLHRoaXMucG9pbnQoTixVKX0sUC5wcm90b3R5cGUu''@;'; put 'put ''dmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYpcmV0dXJuITA7dmFyIEw9Ti54LEs9Ti55LFU9dGhpcy5hLnJlZE11bChMKSxXPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9''@;'; put 'put ''LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihOLEwsSyl7Zm9yKHZhciBVPXRoaXMuX2VuZG9XbmFmVDEsVz10aGlzLl9lbmRvV25hZlQyLFk9MDtZPE4ubGVuZ3RoO1krKyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KExbWV0pLGVlPU5bWV0sSj1lZS5fZ2V0QmV0YSgpO3Eu''@;'; put 'put ''azEubmVnYXRpdmUmJihxLmsxLmluZWcoKSxlZT1lZS5uZWcoITApKSxxLmsyLm5lZ2F0aXZlJiYocS5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFVbMipZXT1lZSxVWzIqWSsxXT1KLFdbMipZXT1xLmsxLFdbMipZKzFdPXEuazJ9Zm9yKHZhciBuZT10aGlzLl93bmFmTXVsQWRkKDEsVSxXLDIq''@;'; put 'put ''WSxLKSxpZT0wO2llPDIqWTtpZSsrKVVbaWVdPW51bGwsV1tpZV09bnVsbDtyZXR1cm4gbmV9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVybiBuZXcgRih0aGlzLE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlv''@;'; put 'put ''bihOLEwpe3JldHVybiBGLmZyb21KU09OKHRoaXMsTixMKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlz''@;'; put 'put ''LngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsVT1mdW5jdGlvbihXKXtyZXR1cm4gSy5wb2ludChXLngucmVkTXVsKEsuZW5kby5iZXRhKSxXLnkpfTtOLmJldGE9TCxMLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFm''@;'; put 'put ''JiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGlj''@;'; put 'put ''ZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLEwsSyl7InN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBMJiYoTD1KU09OLnBhcnNlKEwpKTt2YXIgVT1OLnBvaW50KExbMF0sTFsxXSxLKTtpZighTFsyXSlyZXR1cm4gVTtmdW5jdGlvbiBXKHEpe3JldHVybiBOLnBvaW50KHFbMF0scVsxXSxLKX12YXIgWT1MWzJdO3JldHVybiBVLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpZ''@;'; put 'put ''LmRvdWJsZXMmJntzdGVwOlkuZG91Ymxlcy5zdGVwLHBvaW50czpbVV0uY29uY2F0KFkuZG91Ymxlcy5wb2ludHMubWFwKFcpKX0sbmFmOlkubmFmJiZ7d25kOlkubmFmLnduZCxwb2ludHM6W1VdLmNvbmNhdChZLm5hZi5wb2ludHMubWFwKFcpKX19LFV9LEYucHJvdG90eXBlLmluc3BlY3Q9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJ''@;'; put 'put ''bmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4g''@;'; put 'put ''dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLnkucmVkU3ViKE4ueSk7MCE9PUwuY21wbigwKSYmKEw9TC5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0o''@;'; put 'put ''KSkpO3ZhciBLPUwucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxVPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZily''@;'; put 'put ''ZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMuY3VydmUuYSxLPXRoaXMueC5yZWRTcXIoKSxVPU4ucmVkSW52bSgpLFc9Sy5yZWRBZGQoSykucmVkSUFkZChL''@;'; put 'put ''KS5yZWRJQWRkKEwpLnJlZE11bChVKSxZPVcucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHE9Vy5yZWRNdWwodGhpcy54LnJlZFN1YihZKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFkscSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7cmV0dXJuIE49bmV3IF8oTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNE''@;'; put 'put ''b3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIg''@;'; put 'put ''VT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtd''@;'; put 'put ''O3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIsITApfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmlu''@;'; put 'put ''Znx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsVT1mdW5jdGlvbihXKXtyZXR1cm4gVy5uZWcoKX07TC5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVw''@;'; put 'put ''LHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5v''@;'; put 'put ''bmUpfSxnKE8sQi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBPKHRoaXMsTixMLEspfSxPLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwp''@;'; put 'put ''O3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChMKSxVPXRoaXMueS5yZWRNdWwoTCkucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LE8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2lu''@;'; put 'put ''dCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksVT10aGlz''@;'; put 'put ''LngucmVkTXVsKEwpLFc9Ti54LnJlZE11bChLKSxZPXRoaXMueS5yZWRNdWwoTC5yZWRNdWwoTi56KSkscT1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVUucmVkU3ViKFcpLEo9WS5yZWRTdWIocSk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5j''@;'; put 'put ''dXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIG5lPWVlLnJlZFNxcigpLGllPW5lLnJlZE11bChlZSksbGU9VS5yZWRNdWwobmUpLG1lPUoucmVkU3FyKCkucmVkSUFkZChpZSkucmVkSVN1YihsZSkucmVkSVN1YihsZSksX2U9Si5yZWRNdWwobGUucmVkSVN1Yiht''@;'; put 'put ''ZSkpLnJlZElTdWIoWS5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobWUsX2UsVGUpfSxPLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtp''@;'; put 'put ''ZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD10aGlzLnoucmVkU3FyKCksSz10aGlzLngsVT1OLngucmVkTXVsKEwpLFc9dGhpcy55LFk9Ti55LnJlZE11bChMKS5yZWRNdWwodGhpcy56KSxxPUsucmVkU3ViKFUpLGVlPVcucmVkU3ViKFkpO2lmKDA9PT1xLmNtcG4oMCkpcmV0''@;'; put 'put ''dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPXEucmVkU3FyKCksbmU9Si5yZWRNdWwocSksaWU9Sy5yZWRNdWwoSiksbGU9ZWUucmVkU3FyKCkucmVkSUFkZChuZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksbWU9''@;'; put 'put ''ZWUucmVkTXVsKGllLnJlZElTdWIobGUpKS5yZWRJU3ViKFcucmVkTXVsKG5lKSksX2U9dGhpcy56LnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJ''@;'; put 'put ''bmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBMO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihMPTA7TDxOO0wrKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFU9dGhpcy5jdXJ2ZS5hLFc9dGhpcy5j''@;'; put 'put ''dXJ2ZS50aW52LFk9dGhpcy54LHE9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLG5lPXEucmVkQWRkKHEpO2ZvcihMPTA7TDxOO0wrKyl7dmFyIGllPVkucmVkU3FyKCksbGU9bmUucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRk''@;'; put 'put ''KGllKS5yZWRJQWRkKFUucmVkTXVsKEopKSxUZT1ZLnJlZE11bChsZSksU2U9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSx6ZT1UZS5yZWRJU3ViKFNlKSxWPV9lLnJlZE11bCh6ZSk7Vj1WLnJlZElBZGQoVikucmVkSVN1YihtZSk7dmFyIHA9bmUucmVkTXVsKGVlKTtMKzE8''@;'; put 'put ''TiYmKEo9Si5yZWRNdWwobWUpKSxZPVNlLGVlPXAsbmU9Vn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxuZS5yZWRNdWwoVyksZWUpfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9E''@;'; put 'put ''YmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxPLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCkscT10''@;'; put 'put ''aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKSxKPWVlLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKSxuZT1ZLnJlZElBZGQoWSk7bmU9KG5lPW5lLnJlZElBZGQobmUp''@;'; put 'put ''KS5yZWRJQWRkKG5lKSxOPUosTD1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKG5lKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQobGUpLnJl''@;'; put 'put ''ZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIobWUpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLFNlPVRlLnJlZFNxcigpLHplPW1lLnJlZElBZGQobWUpO3plPSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSksTj1TZS5yZWRJU3ViKF9l''@;'; put 'put ''KS5yZWRJU3ViKF9lKSxMPVRlLnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKHplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixM''@;'; put 'put ''LEs7aWYodGhpcy56T25lKXt2YXIgVT10aGlzLngucmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSku''@;'; put 'put ''cmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO049Sjt2YXIgbmU9WS5yZWRJQWRkKFkpO25lPShuZT1uZS5yZWRJQWRkKG5lKSkucmVkSUFkZChuZSksTD1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKG5lKSxLPXRoaXMueS5y''@;'; put 'put ''ZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLnoucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPXRoaXMueC5yZWRNdWwobGUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9''@;'; put 'put ''bWUucmVkSUFkZChtZSksU2U9KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihTZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsZSkucmVkSVN1YihpZSk7dmFyIHplPWxlLnJlZFNxcigpO3plPSh6ZT0oemU9emUu''@;'; put 'put ''cmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSxMPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKHplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLEw9dGhpcy54''@;'; put 'put ''LEs9dGhpcy55LFU9dGhpcy56LFc9VS5yZWRTcXIoKS5yZWRTcXIoKSxZPUwucmVkU3FyKCkscT1LLnJlZFNxcigpLGVlPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChOLnJlZE11bChXKSksSj1MLnJlZEFkZChMKSxuZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChxKSxpZT1lZS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRJU3ViKG5lLnJlZEFkZChuZSkpLGxlPW5lLnJlZElTdWIoaWUpLG1lPXEucmVkU3FyKCk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT1lZS5yZWRNdWwobGUpLnJlZElTdWIobWUpLFRlPUsucmVkQWRkKEspLnJl''@;'; put 'put ''ZE11bChVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxPLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKSxLPXRo''@;'; put 'put ''aXMuei5yZWRTcXIoKSxVPUwucmVkU3FyKCksVz1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFk9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoTCkucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJU3ViKFUpLGVlPShxPShxPShxPXEucmVkSUFkZChxKSkucmVkQWRkKHEpLnJlZElBZGQocSkpLnJl''@;'; put 'put ''ZElTdWIoWSkpLnJlZFNxcigpLEo9VS5yZWRJQWRkKFUpO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciBuZT1XLnJlZElBZGQocSkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPUwucmVkTXVsKG5lKTtpZT0oaWU9''@;'; put 'put ''aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciBsZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTtsZT0obGU9bGUucmVkSUFkZChsZSkpLnJlZElBZGQobGUpO3ZhciBtZT10aGlzLnkucmVkTXVsKG5lLnJlZE11bChKLnJlZElTdWIobmUpKS5yZWRJU3ViKHEucmVkTXVsKGVl''@;'; put 'put ''KSkpO21lPShtZT0obWU9bWUucmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIgX2U9dGhpcy56LnJlZEFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLm11bD1m''@;'; put 'put ''dW5jdGlvbihOLEwpe3JldHVybiBOPW5ldyBfKE4sTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxPLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlwZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTD10aGlz''@;'; put 'put ''LnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBVPUwucmVkTXVsKHRoaXMueiksVz1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3Vi''@;'; put 'put ''KE4ueS5yZWRNdWwoVSkpLmNtcG4oMCl9LE8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBVPU4uY2xvbmUoKSxX''@;'; put 'put ''PXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7aWYoVS5pYWRkKHRoaXMuY3VydmUubiksVS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITB9fSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sTy5wcm90b3R5cGUuaXNJbmZp''@;'; put 'put ''bml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSwyMzQwMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTyxJPVgsXz15KDUyNTI5KSxnPXkoODcyOSksdz15KDMxMzYpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9u''@;'; put 'put ''ZXcgZy5zaG9ydCh6KToiZWR3YXJkcyI9PT16LnR5cGU/bmV3IGcuZWR3YXJkcyh6KTpuZXcgZy5tb250KHopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMu''@;'; put 'put ''Zy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gRih6LE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBQKE4pO3JldHVybiBP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19KX1JLlByZXNldEN1cnZlPVAsRigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlk''@;'; put 'put ''ZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSks''@;'; put 'put ''RigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsi''@;'; put 'put ''YjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxs''@;'; put 'put ''LHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDgg''@;'; put 'put ''YWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpb''@;'; put 'put ''IjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBl''@;'; put 'put ''OiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhh''@;'; put 'put ''MmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJh''@;'; put 'put ''YTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5''@;'; put 'put ''ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1''@;'; put 'put ''MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2''@;'; put 'put ''NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEg''@;'; put 'put ''YTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1''@;'; put 'put ''ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksRigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixw''@;'; put 'put ''cmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5''@;'; put 'put ''NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVk''@;'; put 'put ''NTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e089eSg1MTQxNil9Y2F0Y2h7Tz12b2lkIDB9Rigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6Xy5zaGEyNTYs''@;'; put 'put ''YmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIx''@;'; put 'put ''YTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5''@;'; put 'put ''ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsT119KX0sMjkwNDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg4ODcyMyksXz15KDMzNTU2KSxnPXkoMzEzNiksQj15KDIzNDAxKSx3PXkoMzUyOTQpLFA9Zy5hc3NlcnQsRj15KDYwNTQxKSxPPXkoNDA0ODQpO2Z1bmN0aW9uIHooTil7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KE4pOyJzdHJpbmciPT10eXBlb2YgTiYmKFAoT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTiksIlVua25vd24gY3VydmUgIitOKSxOPUJbTl0pLE4gaW5zdGFuY2VvZiBCLlByZXNldEN1cnZlJiYoTj17Y3VydmU6Tn0pLHRoaXMuY3VydmU9Ti5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhp''@;'; put 'put ''cy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPU4uY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShOLmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPU4uaGFzaHx8Ti5jdXJ2ZS5oYXNofXVlLmV4cG9ydHM9eix6LnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9u''@;'; put 'put ''KEwpe3JldHVybiBuZXcgRih0aGlzLEwpfSx6LnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihMLEspe3JldHVybiBGLmZyb21Qcml2YXRlKHRoaXMsTCxLKX0sei5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihMLEspe3JldHVybiBGLmZyb21QdWJsaWModGhpcyxM''@;'; put 'put ''LEspfSx6LnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKEwpe0x8fChMPXt9KTtmb3IodmFyIEs9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLHBlcnM6TC5wZXJzLHBlcnNFbmM6TC5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpMLmVudHJvcHl8fHcodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCks''@;'; put 'put ''ZW50cm9weUVuYzpMLmVudHJvcHkmJkwuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxVPXRoaXMubi5ieXRlTGVuZ3RoKCksVz10aGlzLm4uc3ViKG5ldyBJKDIpKTs7KXt2YXIgWT1uZXcgSShLLmdlbmVyYXRlKFUpKTtpZighKFkuY21wKFcpPjApKXJldHVy''@;'; put 'put ''biBZLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoWSl9fSx6LnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oTCxLLFUpe3ZhciBXO2lmKEkuaXNCTihMKXx8Im51bWJlciI9PXR5cGVvZiBMKVc9KEw9bmV3IEkoTCwxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgTClXPUwubGVuZ3RoLEw9bmV3IEkoTCwxNik7ZWxzZXt2YXIgWT1MLnRvU3RyaW5nKCk7Vz1ZLmxlbmd0aCsxPj4+MSxMPW5ldyBJKFksMTYpfSJudW1iZXIiIT10eXBlb2YgVSYmKFU9OCpXKTt2YXIgcT1VLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoTD1MLnVz''@;'; put 'put ''aHJuKHEpKSwhSyYmTC5jbXAodGhpcy5uKT49MD9MLnN1Yih0aGlzLm4pOkx9LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTCxLLFUsVyl7aWYoIm9iamVjdCI9PXR5cGVvZiBVJiYoVz1VLFU9bnVsbCksV3x8KFc9e30pLCJzdHJpbmciIT10eXBlb2YgTCYmIm51bWJlciIhPXR5cGVvZiBM''@;'; put 'put ''JiYhSS5pc0JOKEwpKXtQKCJvYmplY3QiPT10eXBlb2YgTCYmTCYmIm51bWJlciI9PXR5cGVvZiBMLmxlbmd0aCwiRXhwZWN0ZWQgbWVzc2FnZSB0byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxQKEwubGVuZ3RoPj4+MD09PUwubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIFk9MDtZPEwubGVuZ3RoO1krKylQKCgyNTUmTFtZXSk9PT1MW1ldKX1LPXRoaXMua2V5RnJvbVByaXZhdGUoSyxVKSxMPXRoaXMuX3RydW5jYXRlVG9OKEwsITEsVy5tc2dCaXRMZW5ndGgpLFAoIUwuaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3Zh''@;'; put 'put ''ciBxPXRoaXMubi5ieXRlTGVuZ3RoKCksZWU9Sy5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLHEpLEo9TC50b0FycmF5KCJiZSIscSk7UChuZXcgSShKKS5lcShMKSwiQ2FuIG5vdCBzaWduIG1lc3NhZ2UiKTtmb3IodmFyIG5lPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmVlLG5v''@;'; put 'put ''bmNlOkoscGVyczpXLnBlcnMscGVyc0VuYzpXLnBlcnNFbmN8fCJ1dGY4In0pLGllPXRoaXMubi5zdWIobmV3IEkoMSkpLGxlPTA7O2xlKyspe3ZhciBtZT1XLms/Vy5rKGxlKTpuZXcgSShuZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgobWU9dGhpcy5fdHJ1bmNhdGVU''@;'; put 'put ''b04obWUsITApKS5jbXBuKDEpPD0wfHxtZS5jbXAoaWUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwobWUpO2lmKCFfZS5pc0luZmluaXR5KCkpe3ZhciBUZT1fZS5nZXRYKCksU2U9VGUudW1vZCh0aGlzLm4pO2lmKDAhPT1TZS5jbXBuKDApKXt2YXIgemU9bWUuaW52bSh0aGlzLm4pLm11bChT''@;'; put 'put ''ZS5tdWwoSy5nZXRQcml2YXRlKCkpLmlhZGQoTCkpO2lmKDAhPT0oemU9emUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgVj0oX2UuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChTZSk/MjowKTtyZXR1cm4gVy5jYW5vbmljYWwmJnplLmNtcCh0aGlzLm5oKT4wJiYoemU9dGhp''@;'; put 'put ''cy5uLnN1Yih6ZSksVl49MSksbmV3IE8oe3I6U2Usczp6ZSxyZWNvdmVyeVBhcmFtOlZ9KX19fX19fSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oTCxLLFUsVyxZKXtZfHwoWT17fSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFkubXNnQml0TGVuZ3RoKSxVPXRoaXMua2V5RnJvbVB1''@;'; put 'put ''YmxpYyhVLFcpO3ZhciBxPShLPW5ldyBPKEssImhleCIpKS5yLGVlPUsucztpZihxLmNtcG4oMSk8MHx8cS5jbXAodGhpcy5uKT49MHx8ZWUuY21wbigxKTwwfHxlZS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgbGUsSj1lZS5pbnZtKHRoaXMubiksbmU9Si5tdWwoTCkudW1vZCh0aGlz''@;'; put 'put ''Lm4pLGllPUoubXVsKHEpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEobGU9dGhpcy5nLmptdWxBZGQobmUsVS5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmbGUuZXFYVG9QKHEpOiEobGU9dGhpcy5nLm11bEFkZChuZSxVLmdldFB1YmxpYygp''@;'; put 'put ''LGllKSkuaXNJbmZpbml0eSgpJiYwPT09bGUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocSl9LHoucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24oTixMLEssVSl7UCgoMyZLKT09PUssIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxMPW5ldyBPKEws''@;'; put 'put ''VSk7dmFyIFc9dGhpcy5uLFk9bmV3IEkoTikscT1MLnIsZWU9TC5zLEo9MSZLLG5lPUs+PjE7aWYocS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJm5lKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7cT10aGlz''@;'; put 'put ''LmN1cnZlLnBvaW50RnJvbVgobmU/cS5hZGQodGhpcy5jdXJ2ZS5uKTpxLEopO3ZhciBpZT1MLnIuaW52bShXKSxsZT1XLnN1YihZKS5tdWwoaWUpLnVtb2QoVyksbWU9ZWUubXVsKGllKS51bW9kKFcpO3JldHVybiB0aGlzLmcubXVsQWRkKGxlLHEsbWUpfSx6LnByb3RvdHlwZS5nZXRLZXlS''@;'; put 'put ''ZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKE4sTCxLLFUpe2lmKG51bGwhPT0oTD1uZXcgTyhMLFUpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBMLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBXPTA7Vzw0O1crKyl7dmFyIFk7dHJ5e1k9dGhpcy5yZWNvdmVyUHViS2V5KE4sTCxXKX1jYXRjaHtjb250aW51''@;'; put 'put ''ZX1pZihZLmVxKEspKXJldHVybiBXfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSw2MDU0MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4NzIzKSxnPXkoMzEzNikuYXNzZXJ0O2Z1bmN0aW9uIEIodyxQKXt0aGlzLmVj''@;'; put 'put ''PXcsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxQLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoUC5wcml2LFAucHJpdkVuYyksUC5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhQLnB1YixQLnB1YkVuYyl9dWUuZXhwb3J0cz1CLEIuZnJvbVB1YmxpYz1mdW5jdGlvbihQLEYsTyl7cmV0''@;'; put 'put ''dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoUCx7cHViOkYscHViRW5jOk99KX0sQi5mcm9tUHJpdmF0ZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoUCx7cHJpdjpGLHByaXZFbmM6T30pfSxCLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBQPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIFAuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpQLnZhbGlkYXRlKCk/UC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDoh''@;'; put 'put ''MSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxCLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFAmJihGPVAsUD1udWxsKSx0aGlzLnB1Ynx8''@;'; put 'put ''KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksRj90aGlzLnB1Yi5lbmNvZGUoRixQKTp0aGlzLnB1Yn0sQi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihQKXtyZXR1cm4iaGV4Ij09PVA/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sQi5wcm90b3R5''@;'; put 'put ''cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oUCxGKXt0aGlzLnByaXY9bmV3IEkoUCxGfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LEIucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtpZihQLnh8fFAueSlyZXR1cm4ibW9udCI9''@;'; put 'put ''PT10aGlzLmVjLmN1cnZlLnR5cGU/ZyhQLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJmcoUC54JiZQLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMu''@;'; put 'put ''cHViPXRoaXMuZWMuY3VydmUucG9pbnQoUC54LFAueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoUCxGKX0sQi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKFApe3JldHVybiBQLnZhbGlkYXRlKCl8fGcoUC52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlk''@;'; put 'put ''YXRlZCIpLFAubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5lYy5zaWduKFAsdGhpcyxGLE8pfSxCLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLmVjLnZlcmlmeShQLEYsdGhpcyx2''@;'; put 'put ''b2lkIDAsTyl9LEIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9fSw0MDQ4NDoodWUsWCx5KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST15KDg4NzIzKSxfPXkoMzEzNiksZz1fLmFzc2VydDtmdW5jdGlvbiBCKHosTil7aWYoeiBpbnN0YW5jZW9mIEIpcmV0dXJuIHo7dGhpcy5faW1wb3J0REVSKHosTil8fChnKHouciYmei5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IEko''@;'; put 'put ''ei5yLDE2KSx0aGlzLnM9bmV3IEkoei5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09ei5yZWNvdmVyeVBhcmFtP251bGw6ei5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiB3KCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIFAoeixOKXt2YXIgTD16W04ucGxhY2UrK107aWYoISgxMjgm''@;'; put 'put ''TCkpcmV0dXJuIEw7dmFyIEs9MTUmTDtpZigwPT09S3x8Sz40fHwwPT09eltOLnBsYWNlXSlyZXR1cm4hMTtmb3IodmFyIFU9MCxXPTAsWT1OLnBsYWNlO1c8SztXKyssWSsrKVU8PD04LFV8PXpbWV0sVT4+Pj0wO3JldHVybiEoVTw9MTI3KSYmKE4ucGxhY2U9WSxVKX1mdW5jdGlvbiBGKHop''@;'; put 'put ''e2Zvcih2YXIgTj0wLEw9ei5sZW5ndGgtMTsheltOXSYmISgxMjgmeltOKzFdKSYmTjxMOylOKys7cmV0dXJuIDA9PT1OP3o6ei5zbGljZShOKX1mdW5jdGlvbiBPKHosTil7aWYoTjwxMjgpei5wdXNoKE4pO2Vsc2V7dmFyIEw9MSsoTWF0aC5sb2coTikvTWF0aC5MTjI+Pj4zKTtmb3Ioei5w''@;'; put 'put ''dXNoKDEyOHxMKTstLUw7KXoucHVzaChOPj4+KEw8PDMpJjI1NSk7ei5wdXNoKE4pfX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbihOLEwpe049Xy50b0FycmF5KE4sTCk7dmFyIEs9bmV3IHc7aWYoNDghPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFU9''@;'; put 'put ''UChOLEspO2lmKCExPT09VXx8VStLLnBsYWNlIT09Ti5sZW5ndGh8fDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFc9UChOLEspO2lmKCExPT09V3x8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIFk9Ti5zbGljZShLLnBsYWNlLFcrSy5wbGFjZSk7aWYoSy5wbGFjZSs9VywyIT09''@;'; put 'put ''TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBxPVAoTixLKTtpZighMT09PXF8fE4ubGVuZ3RoIT09cStLLnBsYWNlfHwxMjgmTltLLnBsYWNlXSlyZXR1cm4hMTt2YXIgZWU9Ti5zbGljZShLLnBsYWNlLHErSy5wbGFjZSk7aWYoMD09PVlbMF0pe2lmKCEoMTI4JllbMV0pKXJldHVybiExO1k9''@;'; put 'put ''WS5zbGljZSgxKX1pZigwPT09ZWVbMF0pe2lmKCEoMTI4JmVlWzFdKSlyZXR1cm4hMTtlZT1lZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBJKFkpLHRoaXMucz1uZXcgSShlZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LEIucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKE4pe3Zh''@;'; put 'put ''ciBMPXRoaXMuci50b0FycmF5KCksSz10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmTFswXSYmKEw9WzBdLmNvbmNhdChMKSksMTI4JktbMF0mJihLPVswXS5jb25jYXQoSykpLEw9RihMKSxLPUYoSyk7IShLWzBdfHwxMjgmS1sxXSk7KUs9Sy5zbGljZSgxKTt2YXIgVT1bMl07TyhVLEwubGVu''@;'; put 'put ''Z3RoKSwoVT1VLmNvbmNhdChMKSkucHVzaCgyKSxPKFUsSy5sZW5ndGgpO3ZhciBXPVUuY29uY2F0KEspLFk9WzQ4XTtyZXR1cm4gTyhZLFcubGVuZ3RoKSxZPVkuY29uY2F0KFcpLF8uZW5jb2RlKFksTil9fSw4MzA0NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDUyNTI5KSxf''@;'; put 'put ''PXkoMjM0MDEpLGc9eSgzMTM2KSxCPWcuYXNzZXJ0LHc9Zy5wYXJzZUJ5dGVzLFA9eSg4NzIyMiksRj15KDU0NTEpO2Z1bmN0aW9uIE8oeil7aWYoQigiZWQyNTUxOSI9PT16LCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5l''@;'; put 'put ''dyBPKHopO3RoaXMuY3VydmU9ej1fW3pdLmN1cnZlLHRoaXMuZz16LmcsdGhpcy5nLnByZWNvbXB1dGUoei5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz16LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoei5uLmJpdExlbmd0aCgpLzgp''@;'; put 'put ''LHRoaXMuaGFzaD1JLnNoYTUxMn11ZS5leHBvcnRzPU8sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihOLEwpe049dyhOKTt2YXIgSz10aGlzLmtleUZyb21TZWNyZXQoTCksVT10aGlzLmhhc2hJbnQoSy5tZXNzYWdlUHJlZml4KCksTiksVz10aGlzLmcubXVsKFUpLFk9dGhpcy5lbmNvZGVQ''@;'; put 'put ''b2ludChXKSxxPXRoaXMuaGFzaEludChZLEsucHViQnl0ZXMoKSxOKS5tdWwoSy5wcml2KCkpLGVlPVUuYWRkKHEpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlcsUzplZSxSZW5jb2RlZDpZfSl9LE8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihO''@;'; put 'put ''LEwsSyl7aWYoTj13KE4pLChMPXRoaXMubWFrZVNpZ25hdHVyZShMKSkuUygpLmd0ZShMLmVkZHNhLmN1cnZlLm4pfHxMLlMoKS5pc05lZygpKXJldHVybiExO3ZhciBVPXRoaXMua2V5RnJvbVB1YmxpYyhLKSxXPXRoaXMuaGFzaEludChMLlJlbmNvZGVkKCksVS5wdWJCeXRlcygpLE4pLFk9''@;'; put 'put ''dGhpcy5nLm11bChMLlMoKSk7cmV0dXJuIEwuUigpLmFkZChVLnB1YigpLm11bChXKSkuZXEoWSl9LE8ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIE49dGhpcy5oYXNoKCksTD0wO0w8YXJndW1lbnRzLmxlbmd0aDtMKyspTi51cGRhdGUoYXJndW1lbnRzW0xdKTtyZXR1''@;'; put 'put ''cm4gZy5pbnRGcm9tTEUoTi5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxPLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21QdWJsaWModGhpcyxOKX0sTy5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihOKXtyZXR1cm4gUC5mcm9t''@;'; put 'put ''U2VjcmV0KHRoaXMsTil9LE8ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYodGhpcyxOKX0sTy5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIEw9Ti5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5j''@;'; put 'put ''b2RpbmdMZW5ndGgpO3JldHVybiBMW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PU4uZ2V0WCgpLmlzT2RkKCk/MTI4OjAsTH0sTy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIEw9KE49Zy5wYXJzZUJ5dGVzKE4pKS5sZW5ndGgtMSxLPU4uc2xpY2UoMCxMKS5jb25jYXQo''@;'; put 'put ''LTEyOSZOW0xdKSxVPSEhKDEyOCZOW0xdKSxXPWcuaW50RnJvbUxFKEspO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoVyxVKX0sTy5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBOLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sTy5wcm90b3R5''@;'; put 'put ''cGUuZGVjb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBnLmludEZyb21MRShOKX0sTy5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDg3MjIyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzEzNiksXz1J''@;'; put 'put ''LmFzc2VydCxnPUkucGFyc2VCeXRlcyxCPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9ZyhGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5fcHViQnl0ZXM9ZyhGLnB1Yil9dy5mcm9tUHVibGlj''@;'; put 'put ''PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7cHViOk99KX0sdy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7c2VjcmV0Ok99KX0sdy5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3NlY3JldH0sQih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLEIodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVz''@;'; put 'put ''KTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLEIodywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRkc2EsTz10aGlzLmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPU8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0m''@;'; put 'put ''PTEyNyxOW3pdfD02NCxOfSksQih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLEIodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgp''@;'; put 'put ''fSksQih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIp''@;'; put 'put ''LHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoRixPLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1''@;'; put 'put ''YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LHVlLmV4cG9ydHM9d30sNTQ1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4NzIz''@;'; put 'put ''KSxfPXkoMzEzNiksZz1fLmFzc2VydCxCPV8uY2FjaGVkUHJvcGVydHksdz1fLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gUChGLE8pe3RoaXMuZWRkc2E9Riwib2JqZWN0IiE9dHlwZW9mIE8mJihPPXcoTykpLEFycmF5LmlzQXJyYXkoTykmJihnKE8ubGVuZ3RoPT09MipGLmVuY29kaW5nTGVuZ3Ro''@;'; put 'put ''LCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLE89e1I6Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpLFM6Ty5zbGljZShGLmVuY29kaW5nTGVuZ3RoKX0pLGcoTy5SJiZPLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEYuaXNQb2ludChPLlIpJiYodGhpcy5fUj1PLlIpLE8u''@;'; put 'put ''UyBpbnN0YW5jZW9mIEkmJih0aGlzLl9TPU8uUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShPLlIpP08uUjpPLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoTy5TKT9PLlM6Ty5TZW5jb2RlZH1CKFAsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2Eu''@;'; put 'put ''ZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxCKFAsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLEIoUCwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSks''@;'; put 'put ''QihQLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksUC5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LFAucHJvdG90eXBlLnRvSGV4PWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIF8uZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx1ZS5leHBvcnRzPVB9LDUxNDE2OnVlPT57dWUuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5''@;'; put 'put ''Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjEx''@;'; put 'put ''ZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1''@;'; put 'put ''ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5''@;'; put 'put ''ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3''@;'; put 'put ''MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4Mzlh''@;'; put 'put ''NTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEw''@;'; put 'put ''MGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5''@;'; put 'put ''ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJk''@;'; put 'put ''YTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIx''@;'; put 'put ''NTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2Fk''@;'; put 'put ''ODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFk''@;'; put 'put ''ZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2''@;'; put 'put ''ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRl''@;'; put 'put ''MGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYw''@;'; put 'put ''ZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMy''@;'; put 'put ''ZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRk''@;'; put 'put ''YmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUz''@;'; put 'put ''MWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5''@;'; put 'put ''MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMy''@;'; put 'put ''NDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRl''@;'; put 'put ''OTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3''@;'; put 'put ''ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJi''@;'; put 'put ''OGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdm''@;'; put 'put ''YWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRl''@;'; put 'put ''MTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNi''@;'; put 'put ''ZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIz''@;'; put 'put ''Y2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThl''@;'; put 'put ''YmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRm''@;'; put 'put ''MzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3''@;'; put 'put ''Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhi''@;'; put 'put ''NWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3''@;'; put 'put ''Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5''@;'; put 'put ''YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIx''@;'; put 'put ''MzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQw''@;'; put 'put ''YjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYy''@;'; put 'put ''NGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQw''@;'; put 'put ''ZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRm''@;'; put 'put ''ZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUy''@;'; put 'put ''NDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4''@;'; put 'put ''OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3''@;'; put 'put ''MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0Njcw''@;'; put 'put ''YzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlh''@;'; put 'put ''MjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3''@;'; put 'put ''ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4''@;'; put 'put ''YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZh''@;'; put 'put ''NzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWEx''@;'; put 'put ''MTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQz''@;'; put 'put ''NmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQw''@;'; put 'put ''NGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFk''@;'; put 'put ''MDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMy''@;'; put 'put ''OGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIz''@;'; put 'put ''YzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3''@;'; put 'put ''ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1''@;'; put 'put ''MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2''@;'; put 'put ''NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2''@;'; put 'put ''MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQx''@;'; put 'put ''NzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJi''@;'; put 'put ''ZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgw''@;'; put 'put ''YTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4''@;'; put 'put ''OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJi''@;'; put 'put ''NGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMz''@;'; put 'put ''MDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNh''@;'; put 'put ''Y2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcx''@;'; put 'put ''YmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQw''@;'; put 'put ''ZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5''@;'; put 'put ''ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIw''@;'; put 'put ''YmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3''@;'; put 'put ''MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIw''@;'; put 'put ''MWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1''@;'; put 'put ''N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVk''@;'; put 'put ''MDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMx''@;'; put 'put ''ODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0''@;'; put 'put ''MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4''@;'; put 'put ''ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZm''@;'; put 'put ''ODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1''@;'; put 'put ''ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIx''@;'; put 'put ''MjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkw''@;'; put 'put ''Zjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgw''@;'; put 'put ''OTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMz''@;'; put 'put ''ODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3''@;'; put 'put ''ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTlj''@;'; put 'put ''OGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIy''@;'; put 'put ''OWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2''@;'; put 'put ''Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2Mz''@;'; put 'put ''Mzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRj''@;'; put 'put ''NjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4''@;'; put 'put ''MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJl''@;'; put 'put ''ZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0''@;'; put 'put ''MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5''@;'; put 'put ''M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2''@;'; put 'put ''MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhi''@;'; put 'put ''OGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdi''@;'; put 'put ''YmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4''@;'; put 'put ''Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcw''@;'; put 'put ''NGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2''@;'; put 'put ''ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRi''@;'; put 'put ''MDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNi''@;'; put 'put ''Il0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1''@;'; put 'put ''NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5''@;'; put 'put ''OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0''@;'; put 'put ''MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZl''@;'; put 'put ''YTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0''@;'; put 'put ''YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQy''@;'; put 'put ''ODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5''@;'; put 'put ''NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1''@;'; put 'put ''NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3''@;'; put 'put ''NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5''@;'; put 'put ''MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkw''@;'; put 'put ''YzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3''@;'; put 'put ''ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFk''@;'; put 'put ''MTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxb''@;'; put 'put ''ImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQw''@;'; put 'put ''Mjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3''@;'; put 'put ''ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJm''@;'; put 'put ''ZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhm''@;'; put 'put ''M2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEz''@;'; put 'put ''ZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0''@;'; put 'put ''N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIy''@;'; put 'put ''Mjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4''@;'; put 'put ''Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5''@;'; put 'put ''NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0''@;'; put 'put ''Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0''@;'; put 'put ''YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3''@;'; put 'put ''OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZi''@;'; put 'put ''OTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3''@;'; put 'put ''NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1''@;'; put 'put ''YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0''@;'; put 'put ''Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBk''@;'; put 'put ''NjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdh''@;'; put 'put ''NzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0''@;'; put 'put ''M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4Yjkz''@;'; put 'put ''MjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZj''@;'; put 'put ''YjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkx''@;'; put 'put ''YWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZj''@;'; put 'put ''NjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZh''@;'; put 'put ''ZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVj''@;'; put 'put ''MTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBl''@;'; put 'put ''ZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkx''@;'; put 'put ''ZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1''@;'; put 'put ''MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZh''@;'; put 'put ''NmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3''@;'; put 'put ''YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFh''@;'; put 'put ''YzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRh''@;'; put 'put ''NDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAw''@;'; put 'put ''N2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5''@;'; put 'put ''MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYy''@;'; put 'put ''ZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1''@;'; put 'put ''YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdi''@;'; put 'put ''NDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2''@;'; put 'put ''ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5''@;'; put 'put ''NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVk''@;'; put 'put ''MGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUw''@;'; put 'put ''ZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIz''@;'; put 'put ''MDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1''@;'; put 'put ''OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMy''@;'; put 'put ''N2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2''@;'; put 'put ''ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWVi''@;'; put 'put ''ZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sMzEzNjoodWUs''@;'; put 'put ''WCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1YLF89eSg4ODcyMyksZz15KDM5MjEwKSxCPXkoMjE4MzIpO0kuYXNzZXJ0PWcsSS50b0FycmF5PUIudG9BcnJheSxJLnplcm8yPUIuemVybzIsSS50b0hleD1CLnRvSGV4LEkuZW5jb2RlPUIuZW5jb2RlLEkuZ2V0TkFGPWZ1bmN0aW9uIHcoTixM''@;'; put 'put ''LEspe3ZhciBXLFU9bmV3IEFycmF5KE1hdGgubWF4KE4uYml0TGVuZ3RoKCksSykrMSk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crPTEpVVtXXT0wO3ZhciBZPTE8PEwrMSxxPU4uY2xvbmUoKTtmb3IoVz0wO1c8VS5sZW5ndGg7VysrKXt2YXIgZWUsSj1xLmFuZGxuKFktMSk7cS5pc09kZCgpP3Eu''@;'; put 'put ''aXN1Ym4oZWU9Sj4oWT4+MSktMT8oWT4+MSktSjpKKTplZT0wLFVbV109ZWUscS5pdXNocm4oMSl9cmV0dXJuIFV9LEkuZ2V0SlNGPWZ1bmN0aW9uIFAoTixMKXt2YXIgSz1bW10sW11dO049Ti5jbG9uZSgpLEw9TC5jbG9uZSgpO2Zvcih2YXIgWSxVPTAsVz0wO04uY21wbigtVSk+MHx8TC5j''@;'; put 'put ''bXBuKC1XKT4wOyl7dmFyIEosbmUscT1OLmFuZGxuKDMpK1UmMyxlZT1MLmFuZGxuKDMpK1cmMzszPT09cSYmKHE9LTEpLDM9PT1lZSYmKGVlPS0xKSxKPTEmcT8zIT0oWT1OLmFuZGxuKDcpK1UmNykmJjUhPT1ZfHwyIT09ZWU/cTotcTowLEtbMF0ucHVzaChKKSxuZT0xJmVlPzMhPShZPUwu''@;'; put 'put ''YW5kbG4oNykrVyY3KSYmNSE9PVl8fDIhPT1xP2VlOi1lZTowLEtbMV0ucHVzaChuZSksMipVPT09SisxJiYoVT0xLVUpLDIqVz09PW5lKzEmJihXPTEtVyksTi5pdXNocm4oMSksTC5pdXNocm4oMSl9cmV0dXJuIEt9LEkuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9''@;'; put 'put ''Il8iK0w7Ti5wcm90b3R5cGVbTF09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tVXT90aGlzW1VdOnRoaXNbVV09Sy5jYWxsKHRoaXMpfX0sSS5wYXJzZUJ5dGVzPWZ1bmN0aW9uIE8oTil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBOP0kudG9BcnJheShOLCJoZXgiKTpOfSxJLmlu''@;'; put 'put ''dEZyb21MRT1mdW5jdGlvbiB6KE4pe3JldHVybiBuZXcgXyhOLCJoZXgiLCJsZSIpfX0sODg3MjM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1''@;'; put 'put ''bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49''@;'; put 'put ''dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6eSg3OTM2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9''@;'; put 'put ''NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0gr''@;'; put 'put ''Kyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3Jk''@;'; put 'put ''U2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1w''@;'; put 'put ''LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCks''@;'; put 'put ''Yix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4''@;'; put 'put ''NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp''@;'; put 'put ''LGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyks''@;'; put 'put ''dGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08''@;'; put 'put ''PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxw''@;'; put 'put ''W0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChw''@;'; put 'put ''Lmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlz''@;'; put 'put ''LndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhU''@;'; put 'put ''LT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8''@;'; put 'put ''MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFy''@;'; put 'put ''IGFlPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspYWUqPWI7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Au''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53''@;'; put 'put ''b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2''@;'; put 'put ''MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwx''@;'; put 'put ''MTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5s''@;'; put 'put ''ZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsdGU9TWF0aC5t''@;'; put 'put ''aW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09''@;'; put 'put ''RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFy''@;'; put 'put ''IGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0''@;'; put 'put ''cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUu''@;'; put 'put ''aXNaZXJvKCk7KXt2YXIgdGU9YWUubW9kbihBKS50b1N0cmluZyhwKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3''@;'; put 'put ''LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQg''@;'; put 'put ''bGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21d''@;'; put 'put ''PUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUu''@;'; put 'put ''X3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5''@;'; put 'put ''cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2''@;'; put 'put ''YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkv''@;'; put 'put ''OCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5u''@;'; put 'put ''b3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDti''@;'; put 'put ''KyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9y''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5n''@;'; put 'put ''dGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25l''@;'; put 'put ''KCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7''@;'; put 'put ''dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1i''@;'; put 'put ''LndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRo''@;'; put 'put ''aXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5u''@;'; put 'put ''ZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09Njcx''@;'; put 'put ''MDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlz''@;'; put 'put ''LndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2''@;'; put 'put ''ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlm''@;'; put 'put ''KDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jk''@;'; put 'put ''c1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2or''@;'; put 'put ''KylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxl''@;'; put 'put ''bmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14Lndv''@;'; put 'put ''cmRzLGo9MCxhZT0wfENbMF0sdGU9ODE5MSZhZSxzZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsb3Q9MHxDWzJdLE1lPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+''@;'; put 'put ''MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0''@;'; put 'put ''PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsc2k9MHxUWzFdLFF0PTgxOTEmc2ksc249c2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRb''@;'; put 'put ''NV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1w''@;'; put 'put ''Lm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKHVh''@;'; put 'put ''Pj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIEVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERl''@;'; put 'put ''LFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChz''@;'; put 'put ''ZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkp''@;'; put 'put ''PDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11''@;'; put 'put ''bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERl''@;'; put 'put ''LGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsV3QpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11''@;'; put 'put ''bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2Up''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkp''@;'; put 'put ''PDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11''@;'; put 'put ''bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFl''@;'; put 'put ''LGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsV3QpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFV0KXwwKStNYXRoLmltdWwoRGUsc3Qp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChz''@;'; put 'put ''ZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3Qp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHJuKXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIERhPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGgu''@;'; put 'put ''aW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUs''@;'; put 'put ''cm4pfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8''@;'; put 'put ''MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1tK01hdGguaW11bChSZSx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''TWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBh''@;'; put 'put ''Pj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''V2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''UmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQs''@;'; put 'put ''cm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8''@;'; put 'put ''MDt2YXIgbGE9KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIHlhPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''bnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHlhPj4+MjYpfDAseWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxB''@;'; put 'put ''PU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0''@;'; put 'put ''aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPXVhLEhbMV09RWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPURhLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPXBhLEhbMTNdPVFuLEhbMTRdPWxhLEhbMTVdPXlhLEhbMTZdPUxh''@;'; put 'put ''LEhbMTddPUZhLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBxKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdh''@;'; put 'put ''dGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7''@;'; put 'put ''dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4g''@;'; put 'put ''MCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyli''@;'; put 'put ''W0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBl''@;'; put 'put ''cm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9''@;'; put 'put ''MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W2FlK3dlXSxKZT1DW2FlK3dlXSxvdD14W2FlK3dlK2pdLE1lPUNbYWUr''@;'; put 'put ''d2Ural0sdmU9dGUqb3Qtc2UqTWU7TWU9dGUqTWUrc2Uqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1KZStNZSx4W2FlK3dlK2pdPVVlLW90LENbYWUrd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVz''@;'; put 'put ''c0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0Mr''@;'; put 'put ''Kyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBb''@;'; put 'put ''MipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYo''@;'; put 'put ''VCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3Jl''@;'; put 'put ''dHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9''@;'; put 'put ''bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUs''@;'; put 'put ''bSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxhZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0''@;'; put 'put ''aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtm''@;'; put 'put ''b3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlz''@;'; put 'put ''LndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PXA/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11''@;'; put 'put ''bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0''@;'; put 'put ''aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3Ro''@;'; put 'put ''KWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9Njcx''@;'; put 'put ''MDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5n''@;'; put 'put ''dGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1U''@;'; put 'put ''KS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhp''@;'; put 'put ''cy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlz''@;'; put 'put ''LndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNo''@;'; put 'put ''cm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0''@;'; put 'put ''aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2''@;'; put 'put ''YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWIm''@;'; put 'put ''Jih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02''@;'; put 'put ''NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rp''@;'; put 'put ''b24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1sw''@;'; put 'put ''XS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53''@;'; put 'put ''b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''YWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5n''@;'; put 'put ''dGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMu''@;'; put 'put ''bGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkr''@;'; put 'put ''aik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhp''@;'; put 'put ''cy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxD''@;'; put 'put ''LndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5p''@;'; put 'put ''c1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1''@;'; put 'put ''cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1v''@;'; put 'put ''ZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2Rp''@;'; put 'put ''djpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9k''@;'; put 'put ''Om5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFk''@;'; put 'put ''ZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24o''@;'; put 'put ''cCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1u''@;'; put 'put ''ZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsdGU9MTshKGIu''@;'; put 'put ''d29yZHNbMF0mdGUpJiZhZTwyNjsrK2FlLHRlPDw9MSk7aWYoYWU+MClmb3IoYi5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNb''@;'; put 'put ''MF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxU''@;'; put 'put ''LmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBhZSxiPXRoaXMseD1wLmNsb25lKCk7''@;'; put 'put ''Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9y''@;'; put 'put ''KGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigx''@;'; put 'put ''KTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihhZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKHApLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''cC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7''@;'; put 'put ''Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jk''@;'; put 'put ''c1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVy''@;'; put 'put ''biB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlz''@;'; put 'put ''LndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6''@;'; put 'put ''QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFy''@;'; put 'put ''IGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxl''@;'; put 'put ''bmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VS''@;'; put 'put ''ZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhp''@;'; put 'put ''cyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3Fy''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQu''@;'; put 'put ''aW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgbmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShW''@;'; put 'put ''LHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAw''@;'; put 'put ''MDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEi''@;'; put 'put ''KSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMu''@;'; put 'put ''c2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWlu''@;'; put 'put ''dj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtk''@;'; put 'put ''b3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpD''@;'; put 'put ''PjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5r''@;'; put 'put ''KX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0w''@;'; put 'put ''LHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5n''@;'; put 'put ''dGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07''@;'; put 'put ''cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxU''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxw''@;'; put 'put ''fSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihuZVtwXSlyZXR1cm4gbmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiBuZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8o''@;'; put 'put ''KT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFy''@;'; put 'put ''IHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMu''@;'; put 'put ''bSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxT''@;'; put 'put ''ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEp''@;'; put 'put ''Lml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10''@;'; put 'put ''aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVk''@;'; put 'put ''U3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2''@;'; put 'put ''YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7''@;'; put 'put ''dmFyIHRlPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89''@;'; put 'put ''ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHpl''@;'; put 'put ''KHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJu''@;'; put 'put ''IGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tu''@;'; put 'put ''KHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUu''@;'; put 'put ''bXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14Lmlz''@;'; put 'put ''dWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmlt''@;'; put 'put ''b2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPXkubm1kKHVlKSx0aGlzKX0sNDQzNTY6dWU9PnsidXNlIHN0cmljdCI7dmFyIEksWD0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLHk9WCYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFguYXBwbHk/WC5hcHBseTpmdW5jdGlvbihpZSxsZSxtZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGllLGxlLG1lKX07ST1YJiYiZnVuY3Rpb24iPT10eXBlb2YgWC5vd25LZXlzP1gub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9u''@;'; put 'put ''KGllKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaWUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGllKSl9OmZ1bmN0aW9uKGllKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaWUpfTt2YXIgZz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9u''@;'; put 'put ''KGllKXtyZXR1cm4gaWUhPWllfTtmdW5jdGlvbiBCKCl7Qi5pbml0LmNhbGwodGhpcyl9dWUuZXhwb3J0cz1CLHVlLmV4cG9ydHMub25jZT1mdW5jdGlvbiBxKG5lLGllKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obGUsbWUpe2Z1bmN0aW9uIF9lKFNlKXtuZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cihpZSxUZSksbWUoU2UpfWZ1bmN0aW9uIFRlKCl7ImZ1bmN0aW9uIj09dHlwZW9mIG5lLnJlbW92ZUxpc3RlbmVyJiZuZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLF9lKSxsZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfUoobmUsaWUsVGUse29uY2U6ITB9KSwiZXJyb3IiIT09aWUmJmZ1''@;'; put 'put ''bmN0aW9uIGVlKG5lLGllLGxlKXsiZnVuY3Rpb24iPT10eXBlb2YgbmUub24mJkoobmUsImVycm9yIixpZSxsZSl9KG5lLF9lLHtvbmNlOiEwfSl9KX0sQi5FdmVudEVtaXR0ZXI9QixCLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxCLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxCLnByb3Rv''@;'; put 'put ''dHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgdz0xMDtmdW5jdGlvbiBQKG5lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbmUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlw''@;'; put 'put ''ZW9mIG5lKX1mdW5jdGlvbiBGKG5lKXtyZXR1cm4gdm9pZCAwPT09bmUuX21heExpc3RlbmVycz9CLmRlZmF1bHRNYXhMaXN0ZW5lcnM6bmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBPKG5lLGllLGxlLG1lKXt2YXIgX2UsVGUsU2U7aWYoUChsZSksdm9pZCAwPT09KFRlPW5lLl9ldmVudHMp''@;'; put 'put ''PyhUZT1uZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksbmUuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1UZS5uZXdMaXN0ZW5lciYmKG5lLmVtaXQoIm5ld0xpc3RlbmVyIixpZSxsZS5saXN0ZW5lcj9sZS5saXN0ZW5lcjpsZSksVGU9bmUuX2V2ZW50cyksU2U9VGVbaWVdKSx2b2lk''@;'; put 'put ''IDA9PT1TZSlTZT1UZVtpZV09bGUsKytuZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgU2U/U2U9VGVbaWVdPW1lP1tsZSxTZV06W1NlLGxlXTptZT9TZS51bnNoaWZ0KGxlKTpTZS5wdXNoKGxlKSwoX2U9RihuZSkpPjAmJlNlLmxlbmd0aD5fZSYmIVNlLndhcm5l''@;'; put 'put ''ZCl7U2Uud2FybmVkPSEwO3ZhciB6ZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitTZS5sZW5ndGgrIiAiK1N0cmluZyhpZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNl''@;'; put 'put ''IGxpbWl0Iik7emUubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIix6ZS5lbWl0dGVyPW5lLHplLnR5cGU9aWUsemUuY291bnQ9U2UubGVuZ3RoLGZ1bmN0aW9uIF8obmUpe2NvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKG5lKX0oemUpfXJldHVybiBuZX1mdW5j''@;'; put 'put ''dGlvbiB6KCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBw''@;'; put 'put ''bHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBOKG5lLGllLGxlKXt2YXIgbWU9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0Om5lLHR5cGU6aWUsbGlzdGVuZXI6bGV9LF9lPXouYmluZChtZSk7cmV0dXJuIF9lLmxpc3RlbmVyPWxlLG1lLndyYXBGbj1fZSxfZX1mdW5j''@;'; put 'put ''dGlvbiBMKG5lLGllLGxlKXt2YXIgbWU9bmUuX2V2ZW50cztpZih2b2lkIDA9PT1tZSlyZXR1cm5bXTt2YXIgX2U9bWVbaWVdO3JldHVybiB2b2lkIDA9PT1fZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgX2U/bGU/W19lLmxpc3RlbmVyfHxfZV06W19lXTpsZT9mdW5jdGlvbiBZKG5lKXtmb3Io''@;'; put 'put ''dmFyIGllPW5ldyBBcnJheShuZS5sZW5ndGgpLGxlPTA7bGU8aWUubGVuZ3RoOysrbGUpaWVbbGVdPW5lW2xlXS5saXN0ZW5lcnx8bmVbbGVdO3JldHVybiBpZX0oX2UpOlUoX2UsX2UubGVuZ3RoKX1mdW5jdGlvbiBLKG5lKXt2YXIgaWU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWllKXt2''@;'; put 'put ''YXIgbGU9aWVbbmVdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1sZSlyZXR1cm4gbGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIFUobmUsaWUpe2Zvcih2YXIgbGU9bmV3IEFycmF5KGllKSxtZT0wO21lPGllOysrbWUpbGVbbWVdPW5lW21lXTtyZXR1''@;'; put 'put ''cm4gbGV9ZnVuY3Rpb24gSihuZSxpZSxsZSxtZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG5lLm9uKW1lLm9uY2U/bmUub25jZShpZSxsZSk6bmUub24oaWUsbGUpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG5lLmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhl''@;'; put 'put ''ICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIG5lKTtuZS5hZGRFdmVudExpc3RlbmVyKGllLGZ1bmN0aW9uIF9lKFRlKXttZS5vbmNlJiZuZS5yZW1vdmVFdmVudExpc3RlbmVyKGllLF9lKSxsZShUZSl9KX19''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3fSxzZXQ6ZnVuY3Rpb24obmUpe2lmKCJudW1iZXIiIT10eXBlb2YgbmV8fG5lPDB8fGcobmUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUg''@;'; put 'put ''dmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrbmUrIi4iKTt3PW5lfX0pLEIuaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09''@;'; put 'put ''PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sQi5wcm90b3R5cGUuc2V0TWF4TGlzdGVu''@;'; put 'put ''ZXJzPWZ1bmN0aW9uKGllKXtpZigibnVtYmVyIiE9dHlwZW9mIGllfHxpZTwwfHxnKGllKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2llKyIuIik7cmV0''@;'; put 'put ''dXJuIHRoaXMuX21heExpc3RlbmVycz1pZSx0aGlzfSxCLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gRih0aGlzKX0sQi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihpZSl7Zm9yKHZhciBsZT1bXSxtZT0xO21lPGFyZ3VtZW50cy5sZW5ndGg7bWUrKylsZS5w''@;'; put 'put ''dXNoKGFyZ3VtZW50c1ttZV0pO3ZhciBfZT0iZXJyb3IiPT09aWUsVGU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PVRlKV9lPV9lJiZ2b2lkIDA9PT1UZS5lcnJvcjtlbHNlIGlmKCFfZSlyZXR1cm4hMTtpZihfZSl7dmFyIFNlO2lmKGxlLmxlbmd0aD4wJiYoU2U9bGVbMF0pLFNlIGluc3Rh''@;'; put 'put ''bmNlb2YgRXJyb3IpdGhyb3cgU2U7dmFyIHplPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKFNlPyIgKCIrU2UubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyB6ZS5jb250ZXh0PVNlLHplfXZhciBWPVRlW2llXTtpZih2b2lkIDA9PT1WKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBWKXkoVix0aGlzLGxlKTtlbHNle3ZhciBwPVYubGVuZ3RoLGI9VShWLHApO2ZvcihtZT0wO21lPHA7KyttZSl5KGJbbWVdLHRoaXMsbGUpfXJldHVybiEwfSxCLnByb3RvdHlwZS5vbj1CLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihpZSxsZSl7cmV0dXJuIE8odGhpcyxpZSxs''@;'; put 'put ''ZSwhMSl9LEIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihpZSxsZSl7cmV0dXJuIE8odGhpcyxpZSxsZSwhMCl9LEIucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oaWUsbGUpe3JldHVybiBQKGxlKSx0aGlzLm9uKGllLE4odGhpcyxpZSxsZSkpLHRoaXN9LEIucHJvdG90eXBl''@;'; put 'put ''LnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oaWUsbGUpe3JldHVybiBQKGxlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihpZSxOKHRoaXMsaWUsbGUpKSx0aGlzfSxCLnByb3RvdHlwZS5vZmY9Qi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oaWUsbGUpe3ZhciBtZSxfZSxU''@;'; put 'put ''ZSxTZSx6ZTtpZihQKGxlKSx2b2lkIDA9PT0oX2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0obWU9X2VbaWVdKSlyZXR1cm4gdGhpcztpZihtZT09PWxlfHxtZS5saXN0ZW5lcj09PWxlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5j''@;'; put 'put ''cmVhdGUobnVsbCk6KGRlbGV0ZSBfZVtpZV0sX2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGllLG1lLmxpc3RlbmVyfHxsZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG1lKXtmb3IoVGU9LTEsU2U9bWUubGVuZ3RoLTE7U2U+PTA7U2UtLSlpZiht''@;'; put 'put ''ZVtTZV09PT1sZXx8bWVbU2VdLmxpc3RlbmVyPT09bGUpe3plPW1lW1NlXS5saXN0ZW5lcixUZT1TZTticmVha31pZihUZTwwKXJldHVybiB0aGlzOzA9PT1UZT9tZS5zaGlmdCgpOmZ1bmN0aW9uIFcobmUsaWUpe2Zvcig7aWUrMTxuZS5sZW5ndGg7aWUrKyluZVtpZV09bmVbaWUrMV07bmUu''@;'; put 'put ''cG9wKCl9KG1lLFRlKSwxPT09bWUubGVuZ3RoJiYoX2VbaWVdPW1lWzBdKSx2b2lkIDAhPT1fZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsaWUsemV8fGxlKX1yZXR1cm4gdGhpc30sQi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGll''@;'; put 'put ''KXt2YXIgbGUsbWUsX2U7aWYodm9pZCAwPT09KG1lPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09bWUucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3Vu''@;'; put 'put ''dD0wKTp2b2lkIDAhPT1tZVtpZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBtZVtpZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBTZSxUZT1PYmplY3Qua2V5cyhtZSk7Zm9yKF9lPTA7X2U8VGUu''@;'; put 'put ''bGVuZ3RoOysrX2UpInJlbW92ZUxpc3RlbmVyIiE9PShTZT1UZVtfZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhTZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50''@;'; put 'put ''c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YobGU9bWVbaWVdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGllLGxlKTtlbHNlIGlmKHZvaWQgMCE9PWxlKWZvcihfZT1sZS5sZW5ndGgtMTtfZT49MDtfZS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoaWUsbGVbX2VdKTtyZXR1cm4gdGhp''@;'; put 'put ''c30sQi5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGllKXtyZXR1cm4gTCh0aGlzLGllLCEwKX0sQi5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGllKXtyZXR1cm4gTCh0aGlzLGllLCExKX0sQi5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKG5lLGllKXtyZXR1cm4iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgbmUubGlzdGVuZXJDb3VudD9uZS5saXN0ZW5lckNvdW50KGllKTpLLmNhbGwobmUsaWUpfSxCLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PUssQi5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP0kodGhpcy5fZXZl''@;'; put 'put ''bnRzKTpbXX19LDE4MjExOih1ZSxYLHkpPT57dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSgzNDcyNSk7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyxQLEYpe2lmKEkuaXNCdWZmZXIoQil8fChCPUkuZnJvbShCLCJiaW5hcnkiKSksdyYmKEkuaXNCdWZmZXIodyl8fCh3PUkuZnJvbSh3LCJi''@;'; put 'put ''aW5hcnkiKSksOCE9PXcubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgTz1QLzgsej1JLmFsbG9jKE8pLE49SS5hbGxvYyhGfHwwKSxMPUkuYWxsb2MoMCk7Tz4wfHxGPjA7KXt2YXIgSz1uZXcg''@;'; put 'put ''XztLLnVwZGF0ZShMKSxLLnVwZGF0ZShCKSx3JiZLLnVwZGF0ZSh3KSxMPUsuZGlnZXN0KCk7dmFyIFU9MDtpZihPPjApe3ZhciBXPXoubGVuZ3RoLU87VT1NYXRoLm1pbihPLEwubGVuZ3RoKSxMLmNvcHkoeixXLDAsVSksTy09VX1pZihVPEwubGVuZ3RoJiZGPjApe3ZhciBZPU4ubGVuZ3Ro''@;'; put 'put ''LUYscT1NYXRoLm1pbihGLEwubGVuZ3RoLVUpO0wuY29weShOLFksVSxVK3EpLEYtPXF9fXJldHVybiBMLmZpbGwoMCkse2tleTp6LGl2Ok59fX0sMTM2ODY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyNzA1NCkuQnVmZmVyLF89eSg3MDQ1KS5UcmFuc2Zvcm07ZnVuY3Rpb24g''@;'; put 'put ''QihPKXtfLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShPKSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfXkoNzE5OTMpKEIsXyksQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1m''@;'; put 'put ''dW5jdGlvbihPLHosTil7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoTyx6KX1jYXRjaChLKXtMPUt9TihMKX0sQi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciB6PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChOKXt6PU59Tyh6KX07dmFyIHc9dHlw''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXk8InUiLFA9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7Qi5wcm90b3R5cGUudXBkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKE8seil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Tz1mdW5jdGlvbiBGKE8seil7aWYoTyBpbnN0YW5jZW9mIEkpcmV0dXJuIE87aWYoInN0cmluZyI9PXR5cGVvZiBPKXJldHVybiBJLmZyb20oTyx6KTtpZihQ''@;'; put 'put ''JiZBcnJheUJ1ZmZlci5pc1ZpZXcoTykpe2lmKDA9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIE49SS5mcm9tKE8uYnVmZmVyLE8uYnl0ZU9mZnNldCxPLmJ5dGVMZW5ndGgpO2lmKE4uYnl0ZUxlbmd0aD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gTn1pZih3JiZPIGluc3Rh''@;'; put 'put ''bmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcihPKSYmTy5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29uc3RydWN0b3IuaXNCdWZmZXImJk8uY29uc3RydWN0b3IuaXNCdWZmZXIoTykpcmV0dXJuIEkuZnJvbShPKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEi''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oTyx6KTtmb3IodmFyIE49dGhpcy5fYmxvY2ssTD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K08ubGVuZ3RoLUw+PXRoaXMuX2Jsb2NrU2l6ZTsp''@;'; put 'put ''e2Zvcih2YXIgSz10aGlzLl9ibG9ja09mZnNldDtLPHRoaXMuX2Jsb2NrU2l6ZTspTltLKytdPU9bTCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7TDxPLmxlbmd0aDspTlt0aGlzLl9ibG9ja09mZnNldCsrXT1PW0wrK107Zm9yKHZhciBVPTAsVz04Kk8ubGVu''@;'; put 'put ''Z3RoO1c+MDsrK1UpdGhpcy5fbGVuZ3RoW1VdKz1XLChXPXRoaXMuX2xlbmd0aFtVXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbVV0tPTQyOTQ5NjcyOTYqVyk7cmV0dXJuIHRoaXN9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRh''@;'; put 'put ''dGUgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIHo9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09''@;'; put 'put ''TyYmKHo9ei50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgTj0wO048NDsrK04pdGhpcy5fbGVuZ3RoW05dPTA7cmV0dXJuIHp9LEIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3Qg''@;'; put 'put ''aXMgbm90IGltcGxlbWVudGVkIil9LHVlLmV4cG9ydHM9Qn0sNTI1Mjk6KHVlLFgseSk9Pnt2YXIgST1YO0kudXRpbHM9eSg2ODI4MyksSS5jb21tb249eSgxMjkwMSksSS5zaGE9eSg3ODUyOCksSS5yaXBlbWQ9eSgxNTI4MyksSS5obWFjPXkoMzcxNjMpLEkuc2hhMT1JLnNoYS5zaGExLEku''@;'; put 'put ''c2hhMjU2PUkuc2hhLnNoYTI1NixJLnNoYTIyND1JLnNoYS5zaGEyMjQsSS5zaGEzODQ9SS5zaGEuc2hhMzg0LEkuc2hhNTEyPUkuc2hhLnNoYTUxMixJLnJpcGVtZDE2MD1JLnJpcGVtZC5yaXBlbWQxNjB9LDEyOTAxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89''@;'; put 'put ''eSgzOTIxMCk7ZnVuY3Rpb24gZygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNv''@;'; put 'put ''bnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9WC5CbG9ja0hhc2g9ZyxnLnBy''@;'; put 'put ''b3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtpZih3PUkudG9BcnJheSh3LFApLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdCh3KTp3LHRoaXMucGVuZGluZ1RvdGFsKz13Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3Zh''@;'; put 'put ''ciBGPSh3PXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dy5zbGljZSh3Lmxlbmd0aC1GLHcubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx3PUkuam9pbjMyKHcsMCx3Lmxlbmd0aC1GLHRoaXMuZW5kaWFu''@;'; put 'put ''KTtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHcsTyxPK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxfKG51bGw9PT10aGlz''@;'; put 'put ''LnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh3KX0sZy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB3PXRoaXMucGVuZGluZ1RvdGFsLFA9dGhpcy5fZGVsdGE4LEY9UC0odyt0aGlzLnBhZExlbmd0aCklUCxPPW5ldyBBcnJheShGK3RoaXMucGFkTGVuZ3RoKTtPWzBdPTEyODtmb3IodmFy''@;'; put 'put ''IHo9MTt6PEY7eisrKU9bel09MDtpZih3PDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109dz4+PjI0JjI1NSxPW3orK109dz4+PjE2JjI1NSxP''@;'; put 'put ''W3orK109dz4+PjgmMjU1LE9beisrXT0yNTUmd31lbHNlIGZvcihPW3orK109MjU1JncsT1t6KytdPXc+Pj44JjI1NSxPW3orK109dz4+PjE2JjI1NSxPW3orK109dz4+PjI0JjI1NSxPW3orK109MCxPW3orK109MCxPW3orK109MCxPW3orK109MCxOPTg7Tjx0aGlzLnBhZExlbmd0aDtOKysp''@;'; put 'put ''T1t6KytdPTA7cmV0dXJuIE99fSwzNzE2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMzkyMTApO2Z1bmN0aW9uIGcoQix3LFApe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhCLHcsUCk7dGhpcy5IYXNoPUIsdGhpcy5ibG9ja1NpemU9''@;'; put 'put ''Qi5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9Qi5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEkudG9BcnJheSh3LFApKX11ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1NpemUm''@;'; put 'put ''Jih3PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLF8ody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIFA9dy5sZW5ndGg7UDx0aGlzLmJsb2NrU2l6ZTtQKyspdy5wdXNoKDApO2ZvcihQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49NTQ7Zm9yKHRoaXMuaW5uZXI9''@;'; put 'put ''KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KSxQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0sZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHcsUCksdGhpc30sZy5w''@;'; put 'put ''cm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDE1MjgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgxMjkwMSksZz1JLnJvdGwzMixC''@;'; put 'put ''PUkuc3VtMzIsdz1JLnN1bTMyXzMsUD1JLnN1bTMyXzQsRj1fLkJsb2NrSGFzaDtmdW5jdGlvbiBPKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPO0YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1''@;'; put 'put ''Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiB6KHEsZWUsSixuZSl7cmV0dXJuIHE8PTE1P2VlXkpebmU6cTw9MzE/ZWUmSnx+ZWUmbmU6cTw9NDc/KGVlfH5KKV5uZTpxPD02Mz9lZSZuZXxKJn5uZTplZV4oSnx+bmUpfWZ1bmN0aW9uIEwocSl7cmV0dXJuIHE8PTE1PzEz''@;'; put 'put ''NTI4Mjk5MjY6cTw9MzE/MTU0ODYwMzY4NDpxPD00Nz8xODM2MDcyNjkxOnE8PTYzPzIwNTM5OTQyMTc6MH1JLmluaGVyaXRzKE8sRiksWC5yaXBlbWQxNjA9TyxPLmJsb2NrU2l6ZT01MTIsTy5vdXRTaXplPTE2MCxPLmhtYWNTdHJlbmd0aD0xOTIsTy5wYWRMZW5ndGg9NjQsTy5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihlZSxKKXtmb3IodmFyIG5lPXRoaXMuaFswXSxpZT10aGlzLmhbMV0sbGU9dGhpcy5oWzJdLG1lPXRoaXMuaFszXSxfZT10aGlzLmhbNF0sVGU9bmUsU2U9aWUsemU9bGUsVj1tZSxwPV9lLGI9MDtiPDgwO2IrKyl7dmFyIHg9QihnKFAobmUseihiLGllLGxl''@;'; put 'put ''LG1lKSxlZVtLW2JdK0pdLChxPWIpPD0xNT8wOnE8PTMxPzE1MTg1MDAyNDk6cTw9NDc/MTg1OTc3NTM5MzpxPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFdbYl0pLF9lKTtuZT1fZSxfZT1tZSxtZT1nKGxlLDEwKSxsZT1pZSxpZT14LHg9QihnKFAoVGUseig3OS1iLFNlLHplLFYpLGVl''@;'; put 'put ''W1VbYl0rSl0sTChiKSksWVtiXSkscCksVGU9cCxwPVYsVj1nKHplLDEwKSx6ZT1TZSxTZT14fXZhciBxO3g9dyh0aGlzLmhbMV0sbGUsViksdGhpcy5oWzFdPXcodGhpcy5oWzJdLG1lLHApLHRoaXMuaFsyXT13KHRoaXMuaFszXSxfZSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzRdLG5lLFNl''@;'; put 'put ''KSx0aGlzLmhbNF09dyh0aGlzLmhbMF0saWUsemUpLHRoaXMuaFswXT14fSxPLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGVlKXtyZXR1cm4iaGV4Ij09PWVlP0kudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOkkuc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgSz1bMCwxLDIsMyw0''@;'; put 'put ''LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwx''@;'; put 'put ''LDMsOCwxMSw2LDE1LDEzXSxVPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3''@;'; put 'put ''LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLFc9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIs''@;'; put 'put ''Nyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMs''@;'; put 'put ''MTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw3ODUyODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtYLnNoYTE9eSgz''@;'; put 'put ''MzQ2OCksWC5zaGEyMjQ9eSg1NTYzKSxYLnNoYTI1Nj15KDI3MTM4KSxYLnNoYTM4ND15KDkzODk4KSxYLnNoYTUxMj15KDEwODI3KX0sMzM0Njg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODI4MyksXz15KDEyOTAxKSxnPXkoOTU1NDIpLEI9SS5yb3RsMzIsdz1JLnN1bTMy''@;'; put 'put ''LFA9SS5zdW0zMl81LEY9Zy5mdF8xLE89Xy5CbG9ja0hhc2gsej1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gTigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTjtPLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkz''@;'; put 'put ''LDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9SS5pbmhlcml0cyhOLE8pLHVlLmV4cG9ydHM9TixOLmJsb2NrU2l6ZT01MTIsTi5vdXRTaXplPTE2MCxOLmhtYWNTdHJlbmd0aD04MCxOLnBhZExlbmd0aD02NCxOLnByb3Rv''@;'; put 'put ''dHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEssVSl7Zm9yKHZhciBXPXRoaXMuVyxZPTA7WTwxNjtZKyspV1tZXT1LW1UrWV07Zm9yKDtZPFcubGVuZ3RoO1krKylXW1ldPUIoV1tZLTNdXldbWS04XV5XW1ktMTRdXldbWS0xNl0sMSk7dmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSxKPXRoaXMu''@;'; put 'put ''aFsyXSxuZT10aGlzLmhbM10saWU9dGhpcy5oWzRdO2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspe3ZhciBsZT1+fihZLzIwKSxtZT1QKEIocSw1KSxGKGxlLGVlLEosbmUpLGllLFdbWV0seltsZV0pO2llPW5lLG5lPUosSj1CKGVlLDMwKSxlZT1xLHE9bWV9dGhpcy5oWzBdPXcodGhpcy5oWzBd''@;'; put 'put ''LHEpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxlZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLEopLHRoaXMuaFszXT13KHRoaXMuaFszXSxuZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLGllKX0sTi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihLKXtyZXR1cm4iaGV4Ij09PUs/SS50b0hleDMy''@;'; put 'put ''KHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw1NTYzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgyNzEzOCk7ZnVuY3Rpb24gZygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZztfLmNhbGwodGhpcyksdGhpcy5o''@;'; put 'put ''PVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcsXyksdWUuZXhwb3J0cz1nLGcuYmxvY2tTaXplPTUxMixnLm91dFNpemU9MjI0LGcuaG1hY1N0cmVuZ3RoPTE5''@;'; put 'put ''MixnLnBhZExlbmd0aD02NCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSwyNzEzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDY4MjgzKSxfPXkoMTI5MDEpLGc9eSg5NTU0MiksQj15KDM5MjEwKSx3PUkuc3VtMzIsUD1JLnN1bTMyXzQsRj1JLnN1bTMyXzUsTz1nLmNoMzIsej1nLm1hajMyLE49Zy5zMF8yNTYsTD1nLnMxXzI1NixLPWcuZzBfMjU2LFU9Zy5nMV8yNTYsVz1fLkJsb2NrSGFzaCxZPVsx''@;'; put 'put ''MTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4''@;'; put 'put ''MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5''@;'; put 'put ''OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQs''@;'; put 'put ''NDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1Njcz''@;'; put 'put ''NDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIHEoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBxKSlyZXR1cm4gbmV3IHE7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQs''@;'; put 'put ''NTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1ZLHRoaXMuVz1uZXcgQXJyYXkoNjQpfUkuaW5oZXJpdHMocSxXKSx1ZS5leHBvcnRzPXEscS5ibG9ja1NpemU9NTEyLHEub3V0U2l6ZT0yNTYscS5obWFjU3RyZW5ndGg9MTkyLHEucGFkTGVuZ3RoPTY0LHEucHJvdG90eXBlLl91cGRhdGU9''@;'; put 'put ''ZnVuY3Rpb24oSixuZSl7Zm9yKHZhciBpZT10aGlzLlcsbGU9MDtsZTwxNjtsZSsrKWllW2xlXT1KW25lK2xlXTtmb3IoO2xlPGllLmxlbmd0aDtsZSsrKWllW2xlXT1QKFUoaWVbbGUtMl0pLGllW2xlLTddLEsoaWVbbGUtMTVdKSxpZVtsZS0xNl0pO3ZhciBtZT10aGlzLmhbMF0sX2U9dGhp''@;'; put 'put ''cy5oWzFdLFRlPXRoaXMuaFsyXSxTZT10aGlzLmhbM10semU9dGhpcy5oWzRdLFY9dGhpcy5oWzVdLHA9dGhpcy5oWzZdLGI9dGhpcy5oWzddO2ZvcihCKHRoaXMuay5sZW5ndGg9PT1pZS5sZW5ndGgpLGxlPTA7bGU8aWUubGVuZ3RoO2xlKyspe3ZhciB4PUYoYixMKHplKSxPKHplLFYscCks''@;'; put 'put ''dGhpcy5rW2xlXSxpZVtsZV0pLEM9dyhOKG1lKSx6KG1lLF9lLFRlKSk7Yj1wLHA9VixWPXplLHplPXcoU2UseCksU2U9VGUsVGU9X2UsX2U9bWUsbWU9dyh4LEMpfXRoaXMuaFswXT13KHRoaXMuaFswXSxtZSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLF9lKSx0aGlzLmhbMl09dyh0aGlzLmhb''@;'; put 'put ''Ml0sVGUpLHRoaXMuaFszXT13KHRoaXMuaFszXSxTZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLHplKSx0aGlzLmhbNV09dyh0aGlzLmhbNV0sViksdGhpcy5oWzZdPXcodGhpcy5oWzZdLHApLHRoaXMuaFs3XT13KHRoaXMuaFs3XSxiKX0scS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihK''@;'; put 'put ''KXtyZXR1cm4iaGV4Ij09PUo/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw5Mzg5ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY4MjgzKSxfPXkoMTA4MjcpO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1''@;'; put 'put ''cm4gbmV3IGc7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAw''@;'; put 'put ''ODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLF8pLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT0xMDI0LGcub3V0U2l6ZT0zODQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVuZ3RoPTEyOCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcp''@;'; put 'put ''e3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDEwODI3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjgyODMpLF89eSgxMjkwMSksZz15KDM5MjEwKSxCPUkucm90''@;'; put 'put ''cjY0X2hpLHc9SS5yb3RyNjRfbG8sUD1JLnNocjY0X2hpLEY9SS5zaHI2NF9sbyxPPUkuc3VtNjQsej1JLnN1bTY0X2hpLE49SS5zdW02NF9sbyxMPUkuc3VtNjRfNF9oaSxLPUkuc3VtNjRfNF9sbyxVPUkuc3VtNjRfNV9oaSxXPUkuc3VtNjRfNV9sbyxZPV8uQmxvY2tIYXNoLHE9WzExMTYz''@;'; put 'put ''NTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5''@;'; put 'put ''NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAs''@;'; put 'put ''MzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2''@;'; put 'put ''MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMy''@;'; put 'put ''NjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUw''@;'; put 'put ''LDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0''@;'; put 'put ''MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0''@;'; put 'put ''MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3''@;'; put 'put ''LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwx''@;'; put 'put ''NzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1''@;'; put 'put ''OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBlZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGVlKSlyZXR1cm4gbmV3IGVlO1kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwz''@;'; put 'put ''MTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1xLHRoaXMu''@;'; put 'put ''Vz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBKKHgsQyxULEgsail7dmFyIEU9eCZUXn54Jmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbmUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5+QyZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIGll''@;'; put 'put ''KHgsQyxULEgsail7dmFyIEU9eCZUXngmal5UJmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbGUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5DJkVeSCZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIG1lKHgsQyl7dmFyIEU9Qih4LEMsMjgp''@;'; put 'put ''XkIoQyx4LDIpXkIoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIF9lKHgsQyl7dmFyIEU9dyh4LEMsMjgpXncoQyx4LDIpXncoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFRlKHgsQyl7dmFyIEU9Qih4LEMsMTQpXkIo''@;'; put 'put ''eCxDLDE4KV5CKEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBTZSh4LEMpe3ZhciBFPXcoeCxDLDE0KV53KHgsQywxOCledyhDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gemUoeCxDKXt2YXIgRT1CKHgsQywxKV5CKHgs''@;'; put 'put ''Qyw4KV5QKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBWKHgsQyl7dmFyIEU9dyh4LEMsMSledyh4LEMsOCleRih4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gcCh4LEMpe3ZhciBFPUIoeCxDLDE5KV5CKEMseCwyOSle''@;'; put 'put ''UCh4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gYih4LEMpe3ZhciBFPXcoeCxDLDE5KV53KEMseCwyOSleRih4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9SS5pbmhlcml0cyhlZSxZKSx1ZS5leHBvcnRzPWVlLGVlLmJsb2NrU2l6ZT0x''@;'; put 'put ''MDI0LGVlLm91dFNpemU9NTEyLGVlLmhtYWNTdHJlbmd0aD0xOTIsZWUucGFkTGVuZ3RoPTEyOCxlZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD10aGlzLlcsaj0wO2o8MzI7aisrKUhbal09Q1tUK2pdO2Zvcig7ajxILmxlbmd0aDtqKz0yKXt2YXIg''@;'; put 'put ''RT1wKEhbai00XSxIW2otM10pLG09YihIW2otNF0sSFtqLTNdKSxBPUhbai0xNF0sYWU9SFtqLTEzXSx0ZT16ZShIW2otMzBdLEhbai0yOV0pLHNlPVYoSFtqLTMwXSxIW2otMjldKSx3ZT1IW2otMzJdLFVlPUhbai0zMV07SFtqXT1MKEUsbSxBLGFlLHRlLHNlLHdlLFVlKSxIW2orMV09SyhF''@;'; put 'put ''LG0sQSxhZSx0ZSxzZSx3ZSxVZSl9fSxlZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihDLFQpe3RoaXMuX3ByZXBhcmVCbG9jayhDLFQpO3ZhciBIPXRoaXMuVyxqPXRoaXMuaFswXSxFPXRoaXMuaFsxXSxtPXRoaXMuaFsyXSxBPXRoaXMuaFszXSxhZT10aGlzLmhbNF0sdGU9dGhpcy5o''@;'; put 'put ''WzVdLHNlPXRoaXMuaFs2XSx3ZT10aGlzLmhbN10sVWU9dGhpcy5oWzhdLEplPXRoaXMuaFs5XSxvdD10aGlzLmhbMTBdLE1lPXRoaXMuaFsxMV0sdmU9dGhpcy5oWzEyXSxYZT10aGlzLmhbMTNdLGplPXRoaXMuaFsxNF0sRGU9dGhpcy5oWzE1XTtnKHRoaXMuay5sZW5ndGg9PT1ILmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBGZT0wO0ZlPEgubGVuZ3RoO0ZlKz0yKXt2YXIgUmU9amUsSWU9RGUsVmU9VGUoVWUsSmUpLGtlPVNlKFVlLEplKSxBZT1KKFVlLDAsb3QsMCx2ZSksX3Q9bmUoMCxKZSwwLE1lLDAsWGUpLG50PXRoaXMua1tGZV0sUWU9dGhpcy5rW0ZlKzFdLHVuPUhbRmVdLHl0PUhbRmUr''@;'; put 'put ''MV0sTXQ9VShSZSxJZSxWZSxrZSxBZSxfdCxudCxRZSx1bix5dCksRHQ9VyhSZSxJZSxWZSxrZSxBZSxfdCxudCxRZSx1bix5dCk7UmU9bWUoaixFKSxJZT1fZShqLEUpLFZlPWllKGosMCxtLDAsYWUpLGtlPWxlKDAsRSwwLEEsMCx0ZSk7dmFyIGl0PXooUmUsSWUsVmUsa2UpLCRlPU4oUmUs''@;'; put 'put ''SWUsVmUsa2UpO2plPXZlLERlPVhlLHZlPW90LFhlPU1lLG90PVVlLE1lPUplLFVlPXooc2Usd2UsTXQsRHQpLEplPU4od2Usd2UsTXQsRHQpLHNlPWFlLHdlPXRlLGFlPW0sdGU9QSxtPWosQT1FLGo9eihNdCxEdCxpdCwkZSksRT1OKE10LER0LGl0LCRlKX1PKHRoaXMuaCwwLGosRSksTyh0''@;'; put 'put ''aGlzLmgsMixtLEEpLE8odGhpcy5oLDQsYWUsdGUpLE8odGhpcy5oLDYsc2Usd2UpLE8odGhpcy5oLDgsVWUsSmUpLE8odGhpcy5oLDEwLG90LE1lKSxPKHRoaXMuaCwxMix2ZSxYZSksTyh0aGlzLmgsMTQsamUsRGUpfSxlZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihDKXtyZXR1cm4i''@;'; put 'put ''aGV4Ij09PUM/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw5NTU0MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDY4MjgzKS5yb3RyMzI7ZnVuY3Rpb24gQihMLEssVSl7cmV0dXJuIEwmS15+TCZVfWZ1bmN0aW9uIHcoTCxLLFUpe3Jl''@;'; put 'put ''dHVybiBMJkteTCZVXksmVX1mdW5jdGlvbiBQKEwsSyxVKXtyZXR1cm4gTF5LXlV9WC5mdF8xPWZ1bmN0aW9uIGcoTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0IoSyxVLFcpOjE9PT1MfHwzPT09TD9QKEssVSxXKToyPT09TD93KEssVSxXKTp2b2lkIDB9LFguY2gzMj1CLFgubWFqMzI9dyxYLnAz''@;'; put 'put ''Mj1QLFguczBfMjU2PWZ1bmN0aW9uIEYoTCl7cmV0dXJuIF8oTCwyKV5fKEwsMTMpXl8oTCwyMil9LFguczFfMjU2PWZ1bmN0aW9uIE8oTCl7cmV0dXJuIF8oTCw2KV5fKEwsMTEpXl8oTCwyNSl9LFguZzBfMjU2PWZ1bmN0aW9uIHooTCl7cmV0dXJuIF8oTCw3KV5fKEwsMTgpXkw+Pj4zfSxY''@;'; put 'put ''LmcxXzI1Nj1mdW5jdGlvbiBOKEwpe3JldHVybiBfKEwsMTcpXl8oTCwxOSleTD4+PjEwfX0sNjgyODM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOTIxMCksXz15KDcxOTkzKTtmdW5jdGlvbiBnKGIseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJmIuY2hhckNvZGVBdCh4KSl8''@;'; put 'put ''fHg8MHx8eCsxPj1iLmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImYi5jaGFyQ29kZUF0KHgrMSkpfWZ1bmN0aW9uIFAoYil7cmV0dXJuKGI+Pj4yNHxiPj4+OCY2NTI4MHxiPDw4JjE2NzExNjgwfCgyNTUmYik8PDI0KT4+PjB9ZnVuY3Rpb24gTyhiKXtyZXR1cm4gMT09PWIubGVuZ3RoPyIwIiti''@;'; put 'put ''OmJ9ZnVuY3Rpb24geihiKXtyZXR1cm4gNz09PWIubGVuZ3RoPyIwIitiOjY9PT1iLmxlbmd0aD8iMDAiK2I6NT09PWIubGVuZ3RoPyIwMDAiK2I6ND09PWIubGVuZ3RoPyIwMDAwIitiOjM9PT1iLmxlbmd0aD8iMDAwMDAiK2I6Mj09PWIubGVuZ3RoPyIwMDAwMDAiK2I6MT09PWIubGVuZ3Ro''@;'; put 'put ''PyIwMDAwMDAwIitiOmJ9WC5pbmhlcml0cz1fLFgudG9BcnJheT1mdW5jdGlvbiBCKGIseCl7aWYoQXJyYXkuaXNBcnJheShiKSlyZXR1cm4gYi5zbGljZSgpO2lmKCFiKXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYilpZih4KXtpZigiaGV4Ij09PXgpZm9yKChiPWIu''@;'; put 'put ''cmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoYj0iMCIrYiksSD0wO0g8Yi5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoYltIXStiW0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIGo9Yi5jaGFyQ29kZUF0KEgpO2o8''@;'; put 'put ''MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8MTkyLENbVCsrXT02MyZqfDEyOCk6ZyhiLEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJmIuY2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1qPj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4''@;'; put 'put ''LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwyMjQsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8Yi5sZW5ndGg7SCsrKUNbSF09MHxiW0hdO3JldHVybiBDfSxYLnRvSGV4PWZ1bmN0aW9uIHcoYil7Zm9yKHZhciB4PSIiLEM9MDtDPGIu''@;'; put 'put ''bGVuZ3RoO0MrKyl4Kz1PKGJbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sWC5odG9ubD1QLFgudG9IZXgzMj1mdW5jdGlvbiBGKGIseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPGIubGVuZ3RoO1QrKyl7dmFyIEg9YltUXTsibGl0dGxlIj09PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygx''@;'; put 'put ''NikpfXJldHVybiBDfSxYLnplcm8yPU8sWC56ZXJvOD16LFguam9pbjMyPWZ1bmN0aW9uIE4oYix4LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00KWpbRV09KCJiaWciPT09VD9iW21dPDwyNHxiW20r''@;'; put 'put ''MV08PDE2fGJbbSsyXTw8OHxiW20rM106YlttKzNdPDwyNHxiW20rMl08PDE2fGJbbSsxXTw8OHxiW21dKT4+PjA7cmV0dXJuIGp9LFguc3BsaXQzMj1mdW5jdGlvbiBMKGIseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KmIubGVuZ3RoKSxUPTAsSD0wO1Q8Yi5sZW5ndGg7VCsrLEgrPTQpe3Zh''@;'; put 'put ''ciBqPWJbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxDW0grMV09aj4+PjE2JjI1NSxDW0grMl09aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hdPTI1NSZqKX1yZXR1cm4gQ30sWC5yb3RyMzI9ZnVu''@;'; put 'put ''Y3Rpb24gSyhiLHgpe3JldHVybiBiPj4+eHxiPDwzMi14fSxYLnJvdGwzMj1mdW5jdGlvbiBVKGIseCl7cmV0dXJuIGI8PHh8Yj4+PjMyLXh9LFguc3VtMzI9ZnVuY3Rpb24gVyhiLHgpe3JldHVybiBiK3g+Pj4wfSxYLnN1bTMyXzM9ZnVuY3Rpb24gWShiLHgsQyl7cmV0dXJuIGIreCtDPj4+''@;'; put 'put ''MH0sWC5zdW0zMl80PWZ1bmN0aW9uIHEoYix4LEMsVCl7cmV0dXJuIGIreCtDK1Q+Pj4wfSxYLnN1bTMyXzU9ZnVuY3Rpb24gZWUoYix4LEMsVCxIKXtyZXR1cm4gYit4K0MrVCtIPj4+MH0sWC5zdW02ND1mdW5jdGlvbiBKKGIseCxDLFQpe3ZhciBFPVQrYlt4KzFdPj4+MDtiW3hdPShFPFQ/''@;'; put 'put ''MTowKStDK2JbeF0+Pj4wLGJbeCsxXT1FfSxYLnN1bTY0X2hpPWZ1bmN0aW9uIG5lKGIseCxDLFQpe3JldHVybih4K1Q+Pj4wPHg/MTowKStiK0M+Pj4wfSxYLnN1bTY0X2xvPWZ1bmN0aW9uIGllKGIseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxYLnN1bTY0XzRfaGk9ZnVuY3Rpb24gbGUoYix4''@;'; put 'put ''LEMsVCxILGosRSxtKXt2YXIgQT0wLGFlPXg7cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAsQSs9KGFlPWFlK2o+Pj4wKTxqPzE6MCxiK0MrSCtFKyhBKz0oYWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LFguc3VtNjRfNF9sbz1mdW5jdGlvbiBtZShiLHgsQyxULEgsaixFLG0pe3JldHVy''@;'; put 'put ''biB4K1QraittPj4+MH0sWC5zdW02NF81X2hpPWZ1bmN0aW9uIF9lKGIseCxDLFQsSCxqLEUsbSxBLGFlKXt2YXIgdGU9MCxzZT14O3JldHVybiB0ZSs9KHNlPXNlK1Q+Pj4wKTx4PzE6MCx0ZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCx0ZSs9KHNlPXNlK20+Pj4wKTxtPzE6MCxiK0MrSCtFK0Er''@;'; put 'put ''KHRlKz0oc2U9c2UrYWU+Pj4wKTxhZT8xOjApPj4+MH0sWC5zdW02NF81X2xvPWZ1bmN0aW9uIFRlKGIseCxDLFQsSCxqLEUsbSxBLGFlKXtyZXR1cm4geCtUK2orbSthZT4+PjB9LFgucm90cjY0X2hpPWZ1bmN0aW9uIFNlKGIseCxDKXtyZXR1cm4oeDw8MzItQ3xiPj4+Qyk+Pj4wfSxYLnJv''@;'; put 'put ''dHI2NF9sbz1mdW5jdGlvbiB6ZShiLHgsQyl7cmV0dXJuKGI8PDMyLUN8eD4+PkMpPj4+MH0sWC5zaHI2NF9oaT1mdW5jdGlvbiBWKGIseCxDKXtyZXR1cm4gYj4+PkN9LFguc2hyNjRfbG89ZnVuY3Rpb24gcChiLHgsQyl7cmV0dXJuKGI8PDMyLUN8eD4+PkMpPj4+MH19LDMzNTU2Oih1ZSxY''@;'; put 'put ''LHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTI1MjkpLF89eSgyMTgzMiksZz15KDM5MjEwKTtmdW5jdGlvbiBCKHcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91''@;'; put 'put ''dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgUD1fLnRvQXJyYXkody5lbnRy''@;'; put 'put ''b3B5LHcuZW50cm9weUVuY3x8ImhleCIpLEY9Xy50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLE89Xy50b0FycmF5KHcucGVycyx3LnBlcnNFbmN8fCJoZXgiKTtnKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAi''@;'; put 'put ''K3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFAsRixPKX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oUCxGLE8pe3ZhciB6PVAuY29uY2F0KEYpLmNvbmNhdChPKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJy''@;'; put 'put ''YXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBOPTA7Tjx0aGlzLlYubGVuZ3RoO04rKyl0aGlzLktbTl09MCx0aGlzLlZbTl09MTt0aGlzLl91cGRhdGUoeiksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LEIucHJvdG90eXBlLl9obWFjPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIG5ldyBJLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7dmFyIEY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1AmJihGPUYudXBkYXRlKFApKSx0aGlzLks9Ri5kaWdlc3QoKSx0aGlzLlY9''@;'; put 'put ''dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFAmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShQKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sQi5wcm90b3R5cGUu''@;'; put 'put ''cmVzZWVkPWZ1bmN0aW9uKFAsRixPLHopeyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxQPV8udG9BcnJheShQLEYpLE89Xy50b0FycmF5KE8seiksZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlz''@;'; put 'put ''Lm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKFAuY29uY2F0KE98fFtdKSksdGhpcy5fcmVzZWVkPTF9LEIucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFAsRixPLHope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVk''@;'; put 'put ''IGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLE8mJihPPV8udG9BcnJheShPLHp8fCJoZXgiKSx0aGlzLl91cGRhdGUoTykpO2Zvcih2YXIgTj1bXTtOLmxlbmd0aDxQOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgp''@;'; put 'put ''LE49Ti5jb25jYXQodGhpcy5WKTt2YXIgTD1OLnNsaWNlKDAsUCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShPKSx0aGlzLl9yZXNlZWQrKyxfLmVuY29kZShMLEYpfX0sOTM2OTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO1guX2RiY3M9ejtmb3IodmFyIF89''@;'; put 'put ''LTEsZz0tMixCPS0xMCx3PS0xZTMsUD1uZXcgQXJyYXkoMjU2KSxPPTA7TzwyNTY7TysrKVBbT109XztmdW5jdGlvbiB6KFUsVyl7aWYodGhpcy5lbmNvZGluZ05hbWU9VS5lbmNvZGluZ05hbWUsIVUpdGhyb3cgbmV3IEVycm9yKCJEQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBk''@;'; put 'put ''YXRhLiIpO2lmKCFVLnRhYmxlKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrdGhpcy5lbmNvZGluZ05hbWUrIicgaGFzIG5vIGRhdGEuIik7dmFyIFk9VS50YWJsZSgpO3RoaXMuZGVjb2RlVGFibGVzPVtdLHRoaXMuZGVjb2RlVGFibGVzWzBdPVAuc2xpY2UoMCksdGhpcy5kZWNvZGVU''@;'; put 'put ''YWJsZVNlcT1bXTtmb3IodmFyIHE9MDtxPFkubGVuZ3RoO3ErKyl0aGlzLl9hZGREZWNvZGVDaHVuayhZW3FdKTt0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1XLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmVuY29kZVRhYmxlPVtdLHRoaXMuZW5jb2RlVGFibGVTZXE9W107dmFyIGVlPXt9O2lm''@;'; put 'put ''KFUuZW5jb2RlU2tpcFZhbHMpZm9yKHE9MDtxPFUuZW5jb2RlU2tpcFZhbHMubGVuZ3RoO3ErKyl7dmFyIEo9VS5lbmNvZGVTa2lwVmFsc1txXTtpZigibnVtYmVyIj09dHlwZW9mIEopZWVbSl09ITA7ZWxzZSBmb3IodmFyIG5lPUouZnJvbTtuZTw9Si50bztuZSsrKWVlW25lXT0hMH1pZih0''@;'; put 'put ''aGlzLl9maWxsRW5jb2RlVGFibGUoMCwwLGVlKSxVLmVuY29kZUFkZClmb3IodmFyIGllIGluIFUuZW5jb2RlQWRkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLmVuY29kZUFkZCxpZSkmJnRoaXMuX3NldEVuY29kZUNoYXIoaWUuY2hhckNvZGVBdCgwKSxVLmVuY29k''@;'; put 'put ''ZUFkZFtpZV0pO2lmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bVy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKV0sdGhpcy5kZWZDaGFyU0I9PT1fJiYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVUYWJsZVswXVsiPyJdKSx0aGlzLmRlZkNoYXJTQj09''@;'; put 'put ''PV8mJih0aGlzLmRlZkNoYXJTQj02MyksImZ1bmN0aW9uIj09dHlwZW9mIFUuZ2IxODAzMCl7dGhpcy5nYjE4MDMwPVUuZ2IxODAzMCgpO3ZhciBsZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsbWU9dGhpcy5kZWNvZGVUYWJsZXNbbGVdPVAuc2xpY2UoMCksX2U9dGhpcy5kZWNvZGVUYWJs''@;'; put 'put ''ZXMubGVuZ3RoLFRlPXRoaXMuZGVjb2RlVGFibGVzW19lXT1QLnNsaWNlKDApO2ZvcihxPTEyOTtxPD0yNTQ7cSsrKXt2YXIgemU9dGhpcy5kZWNvZGVUYWJsZXNbdy10aGlzLmRlY29kZVRhYmxlc1swXVtxXV07Zm9yKG5lPTQ4O25lPD01NztuZSsrKXplW25lXT13LWxlfWZvcihxPTEyOTtx''@;'; put 'put ''PD0yNTQ7cSsrKW1lW3FdPXctX2U7Zm9yKHE9NDg7cTw9NTc7cSsrKVRlW3FdPWd9fWZ1bmN0aW9uIE4oVSxXKXt0aGlzLmxlYWRTdXJyb2dhdGU9LTEsdGhpcy5zZXFPYmo9dm9pZCAwLHRoaXMuZW5jb2RlVGFibGU9Vy5lbmNvZGVUYWJsZSx0aGlzLmVuY29kZVRhYmxlU2VxPVcuZW5jb2Rl''@;'; put 'put ''VGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Vy5kZWZDaGFyU0IsdGhpcy5nYjE4MDMwPVcuZ2IxODAzMH1mdW5jdGlvbiBMKFUsVyl7dGhpcy5ub2RlSWR4PTAsdGhpcy5wcmV2QnVmPUkuYWxsb2MoMCksdGhpcy5kZWNvZGVUYWJsZXM9Vy5kZWNvZGVUYWJsZXMsdGhpcy5k''@;'; put 'put ''ZWNvZGVUYWJsZVNlcT1XLmRlY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPVcuZGVmYXVsdENoYXJVbmljb2RlLHRoaXMuZ2IxODAzMD1XLmdiMTgwMzB9ZnVuY3Rpb24gSyhVLFcpe2lmKFVbMF0+VylyZXR1cm4tMTtmb3IodmFyIFk9MCxxPVUubGVuZ3RoO1k8cS0xOyl7''@;'; put 'put ''dmFyIGVlPVkrTWF0aC5mbG9vcigocS1ZKzEpLzIpO1VbZWVdPD1XP1k9ZWU6cT1lZX1yZXR1cm4gWX16LnByb3RvdHlwZS5lbmNvZGVyPU4sei5wcm90b3R5cGUuZGVjb2Rlcj1MLHoucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZT1mdW5jdGlvbihVKXtmb3IodmFyIFc9W107VT4wO1U+''@;'; put 'put ''Pj04KVcucHVzaCgyNTUmVSk7MD09Vy5sZW5ndGgmJlcucHVzaCgwKTtmb3IodmFyIFk9dGhpcy5kZWNvZGVUYWJsZXNbMF0scT1XLmxlbmd0aC0xO3E+MDtxLS0pe3ZhciBlZT1ZW1dbcV1dO2lmKGVlPT1fKVlbV1txXV09dy10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsdGhpcy5kZWNvZGVU''@;'; put 'put ''YWJsZXMucHVzaChZPVAuc2xpY2UoMCkpO2Vsc2V7aWYoIShlZTw9dykpdGhyb3cgbmV3IEVycm9yKCJPdmVyd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIsIGFkZHI6ICIrVS50b1N0cmluZygxNikpO1k9dGhpcy5kZWNvZGVUYWJsZXNbdy1lZV19fXJldHVybiBZfSx6LnBy''@;'; put 'put ''b3RvdHlwZS5fYWRkRGVjb2RlQ2h1bms9ZnVuY3Rpb24oVSl7dmFyIFc9cGFyc2VJbnQoVVswXSwxNiksWT10aGlzLl9nZXREZWNvZGVUcmllTm9kZShXKTtXJj0yNTU7Zm9yKHZhciBxPTE7cTxVLmxlbmd0aDtxKyspe3ZhciBlZT1VW3FdO2lmKCJzdHJpbmciPT10eXBlb2YgZWUpZm9yKHZh''@;'; put 'put ''ciBKPTA7SjxlZS5sZW5ndGg7KXt2YXIgbmU9ZWUuY2hhckNvZGVBdChKKyspO2lmKDU1Mjk2PD1uZSYmbmU8NTYzMjApe3ZhciBpZT1lZS5jaGFyQ29kZUF0KEorKyk7aWYoISg1NjMyMDw9aWUmJmllPDU3MzQ0KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBp''@;'; put 'put ''biAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitVWzBdKTtZW1crK109NjU1MzYrMTAyNCoobmUtNTUyOTYpKyhpZS01NjMyMCl9ZWxzZSBpZig0MDgwPG5lJiZuZTw9NDA5NSl7Zm9yKHZhciBsZT00MDk1LW5lKzIsbWU9W10sX2U9MDtfZTxsZTtfZSsrKW1lLnB1c2goZWUuY2hh''@;'; put 'put ''ckNvZGVBdChKKyspKTtZW1crK109Qi10aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlU2VxLnB1c2gobWUpfWVsc2UgWVtXKytdPW5lfWVsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBlZSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB0eXBlICciK3R5cGVvZiBl''@;'; put 'put ''ZSsiJyBnaXZlbiBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitVWzBdKTt2YXIgVGU9WVtXLTFdKzE7Zm9yKEo9MDtKPGVlO0orKylZW1crK109VGUrK319aWYoVz4yNTUpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgY2h1bmsgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsi''@;'; put 'put ''IGF0IGFkZHIgIitVWzBdKyI6IHRvbyBsb25nIitXKX0sei5wcm90b3R5cGUuX2dldEVuY29kZUJ1Y2tldD1mdW5jdGlvbihVKXt2YXIgVz1VPj44O3JldHVybiB2b2lkIDA9PT10aGlzLmVuY29kZVRhYmxlW1ddJiYodGhpcy5lbmNvZGVUYWJsZVtXXT1QLnNsaWNlKDApKSx0aGlzLmVuY29k''@;'; put 'put ''ZVRhYmxlW1ddfSx6LnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhcj1mdW5jdGlvbihVLFcpe3ZhciBZPXRoaXMuX2dldEVuY29kZUJ1Y2tldChVKSxxPTI1NSZVO1lbcV08PUI/dGhpcy5lbmNvZGVUYWJsZVNlcVtCLVlbcV1dWy0xXT1XOllbcV09PV8mJihZW3FdPVcpfSx6LnByb3RvdHlwZS5f''@;'; put 'put ''c2V0RW5jb2RlU2VxdWVuY2U9ZnVuY3Rpb24oVSxXKXt2YXIgSixZPVVbMF0scT10aGlzLl9nZXRFbmNvZGVCdWNrZXQoWSksZWU9MjU1Jlk7cVtlZV08PUI/Sj10aGlzLmVuY29kZVRhYmxlU2VxW0ItcVtlZV1dOihKPXt9LHFbZWVdIT09XyYmKEpbLTFdPXFbZWVdKSxxW2VlXT1CLXRoaXMu''@;'; put 'put ''ZW5jb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChKKSk7Zm9yKHZhciBuZT0xO25lPFUubGVuZ3RoLTE7bmUrKyl7dmFyIGllPUpbWV07Im9iamVjdCI9PXR5cGVvZiBpZT9KPWllOihKPUpbWV09e30sdm9pZCAwIT09aWUmJihKWy0xXT1pZSkpfUpbWT1VW1Uu''@;'; put 'put ''bGVuZ3RoLTFdXT1XfSx6LnByb3RvdHlwZS5fZmlsbEVuY29kZVRhYmxlPWZ1bmN0aW9uKFUsVyxZKXtmb3IodmFyIHE9dGhpcy5kZWNvZGVUYWJsZXNbVV0sZWU9MDtlZTwyNTY7ZWUrKyl7dmFyIEo9cVtlZV0sbmU9VytlZTtZW25lXXx8KEo+PTA/dGhpcy5fc2V0RW5jb2RlQ2hhcihKLG5l''@;'; put 'put ''KTpKPD13P3RoaXMuX2ZpbGxFbmNvZGVUYWJsZSh3LUosbmU8PDgsWSk6Sjw9QiYmdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtCLUpdLG5lKSl9fSxOLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihVKXtmb3IodmFyIFc9SS5hbGxvYyhVLmxlbmd0aCoodGhp''@;'; put 'put ''cy5nYjE4MDMwPzQ6MykpLFk9dGhpcy5sZWFkU3Vycm9nYXRlLHE9dGhpcy5zZXFPYmosZWU9LTEsSj0wLG5lPTA7Oyl7aWYoLTE9PT1lZSl7aWYoSj09VS5sZW5ndGgpYnJlYWs7dmFyIGllPVUuY2hhckNvZGVBdChKKyspfWVsc2UgaWU9ZWUsZWU9LTE7aWYoNTUyOTY8PWllJiZpZTw1NzM0''@;'; put 'put ''NClpZihpZTw1NjMyMCl7aWYoLTE9PT1ZKXtZPWllO2NvbnRpbnVlfVk9aWUsaWU9X31lbHNlLTEhPT1ZPyhpZT02NTUzNisxMDI0KihZLTU1Mjk2KSsoaWUtNTYzMjApLFk9LTEpOmllPV87ZWxzZS0xIT09WSYmKGVlPWllLGllPV8sWT0tMSk7dmFyIGxlPV87aWYodm9pZCAwIT09cSYmaWUh''@;'; put 'put ''PV8pe3ZhciBtZT1xW2llXTtpZigib2JqZWN0Ij09dHlwZW9mIG1lKXtxPW1lO2NvbnRpbnVlfSJudW1iZXIiPT10eXBlb2YgbWU/bGU9bWU6bnVsbD09bWUmJnZvaWQgMCE9PShtZT1xWy0xXSkmJihsZT1tZSxlZT1pZSkscT12b2lkIDB9ZWxzZSBpZihpZT49MCl7dmFyIF9lPXRoaXMuZW5j''@;'; put 'put ''b2RlVGFibGVbaWU+PjhdO2lmKHZvaWQgMCE9PV9lJiYobGU9X2VbMjU1JmllXSksbGU8PUIpe3E9dGhpcy5lbmNvZGVUYWJsZVNlcVtCLWxlXTtjb250aW51ZX1pZihsZT09XyYmdGhpcy5nYjE4MDMwKXt2YXIgVGU9Syh0aGlzLmdiMTgwMzAudUNoYXJzLGllKTtpZigtMSE9VGUpe2xlPXRo''@;'; put 'put ''aXMuZ2IxODAzMC5nYkNoYXJzW1RlXSsoaWUtdGhpcy5nYjE4MDMwLnVDaGFyc1tUZV0pLFdbbmUrK109MTI5K01hdGguZmxvb3IobGUvMTI2MDApLGxlJT0xMjYwMCxXW25lKytdPTQ4K01hdGguZmxvb3IobGUvMTI2MCksbGUlPTEyNjAsV1tuZSsrXT0xMjkrTWF0aC5mbG9vcihsZS8xMCks''@;'; put 'put ''V1tuZSsrXT00OCsobGUlPTEwKTtjb250aW51ZX19fWxlPT09XyYmKGxlPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlKSxsZTwyNTY/V1tuZSsrXT1sZTpsZTw2NTUzNj8oV1tuZSsrXT1sZT4+OCxXW25lKytdPTI1NSZsZSk6KFdbbmUrK109bGU+PjE2LFdbbmUrK109bGU+PjgmMjU1LFdb''@;'; put 'put ''bmUrK109MjU1JmxlKX1yZXR1cm4gdGhpcy5zZXFPYmo9cSx0aGlzLmxlYWRTdXJyb2dhdGU9WSxXLnNsaWNlKDAsbmUpfSxOLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZigtMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZXx8dm9pZCAwIT09dGhpcy5zZXFPYmope3ZhciBVPUkuYWxsb2MoMTAp''@;'; put 'put ''LFc9MDtpZih0aGlzLnNlcU9iail7dmFyIFk9dGhpcy5zZXFPYmpbLTFdO3ZvaWQgMCE9PVkmJihZPDI1Nj9VW1crK109WTooVVtXKytdPVk+PjgsVVtXKytdPTI1NSZZKSksdGhpcy5zZXFPYmo9dm9pZCAwfXJldHVybi0xIT09dGhpcy5sZWFkU3Vycm9nYXRlJiYoVVtXKytdPXRoaXMuZGVm''@;'; put 'put ''YXVsdENoYXJTaW5nbGVCeXRlLHRoaXMubGVhZFN1cnJvZ2F0ZT0tMSksVS5zbGljZSgwLFcpfX0sTi5wcm90b3R5cGUuZmluZElkeD1LLEwucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFUpe3ZhciBXPUkuYWxsb2MoMipVLmxlbmd0aCksWT10aGlzLm5vZGVJZHgscT10aGlzLnByZXZCdWYs''@;'; put 'put ''ZWU9dGhpcy5wcmV2QnVmLmxlbmd0aCxKPS10aGlzLnByZXZCdWYubGVuZ3RoO2VlPjAmJihxPUkuY29uY2F0KFtxLFUuc2xpY2UoMCwxMCldKSk7Zm9yKHZhciBpZT0wLGxlPTA7aWU8VS5sZW5ndGg7aWUrKyl7dmFyIG5lLG1lPWllPj0wP1VbaWVdOnFbaWUrZWVdO2lmKCEoKG5lPXRoaXMu''@;'; put 'put ''ZGVjb2RlVGFibGVzW1ldW21lXSk+PTApKWlmKG5lPT09XylpZT1KLG5lPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBpZihuZT09PWcpe3ZhciBfZT1KPj0wP1Uuc2xpY2UoSixpZSsxKTpxLnNsaWNlKEorZWUsaWUrMStlZSksVGU9MTI2MDAqKF9lWzBdLTEy''@;'; put 'put ''OSkrMTI2MCooX2VbMV0tNDgpKzEwKihfZVsyXS0xMjkpKyhfZVszXS00OCksU2U9Syh0aGlzLmdiMTgwMzAuZ2JDaGFycyxUZSk7bmU9dGhpcy5nYjE4MDMwLnVDaGFyc1tTZV0rVGUtdGhpcy5nYjE4MDMwLmdiQ2hhcnNbU2VdfWVsc2V7aWYobmU8PXcpe1k9dy1uZTtjb250aW51ZX1pZigh''@;'; put 'put ''KG5lPD1CKSl0aHJvdyBuZXcgRXJyb3IoImljb252LWxpdGUgaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgZGVjb2RpbmcgdGFibGUgdmFsdWUgIituZSsiIGF0ICIrWSsiLyIrbWUpO2Zvcih2YXIgemU9dGhpcy5kZWNvZGVUYWJsZVNlcVtCLW5lXSxWPTA7Vjx6ZS5sZW5ndGgtMTtWKyspV1ts''@;'; put 'put ''ZSsrXT0yNTUmKG5lPXplW1ZdKSxXW2xlKytdPW5lPj44O25lPXplW3plLmxlbmd0aC0xXX1pZihuZT42NTUzNSl7bmUtPTY1NTM2O3ZhciBwPTU1Mjk2K01hdGguZmxvb3IobmUvMTAyNCk7V1tsZSsrXT0yNTUmcCxXW2xlKytdPXA+PjgsbmU9NTYzMjArbmUlMTAyNH1XW2xlKytdPTI1NSZu''@;'; put 'put ''ZSxXW2xlKytdPW5lPj44LFk9MCxKPWllKzF9cmV0dXJuIHRoaXMubm9kZUlkeD1ZLHRoaXMucHJldkJ1Zj1KPj0wP1Uuc2xpY2UoSik6cS5zbGljZShKK2VlKSxXLnNsaWNlKDAsbGUpLnRvU3RyaW5nKCJ1Y3MyIil9LEwucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2Zvcih2YXIgVT0iIjt0''@;'; put 'put ''aGlzLnByZXZCdWYubGVuZ3RoPjA7KXtVKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZTt2YXIgVz10aGlzLnByZXZCdWYuc2xpY2UoMSk7dGhpcy5wcmV2QnVmPUkuYWxsb2MoMCksdGhpcy5ub2RlSWR4PTAsVy5sZW5ndGg+MCYmKFUrPXRoaXMud3JpdGUoVykpfXJldHVybiB0aGlzLm5vZGVJ''@;'; put 'put ''ZHg9MCxVfX0sNDUyNzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17c2hpZnRqaXM6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiB5KDQwNjc5KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fSxlbmNvZGVTa2lwVmFsczpbe2Zyb206''@;'; put 'put ''NjA3MzYsdG86NjM4MDh9XX0sY3NzaGlmdGppczoic2hpZnRqaXMiLG1za2Fuamk6InNoaWZ0amlzIixzamlzOiJzaGlmdGppcyIsd2luZG93czMxajoic2hpZnRqaXMiLG1zMzFqOiJzaGlmdGppcyIseHNqaXM6InNoaWZ0amlzIix3aW5kb3dzOTMyOiJzaGlmdGppcyIsbXM5MzI6InNoaWZ0''@;'; put 'put ''amlzIiw5MzI6InNoaWZ0amlzIixjcDkzMjoic2hpZnRqaXMiLGV1Y2pwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg1NjQwNil9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn19LGdiMjMxMjoiY3A5MzYiLGdiMjMxMjgwOiJjcDkzNiIsZ2IyMzEy''@;'; put 'put ''MTk4MDoiY3A5MzYiLGNzZ2IyMzEyOiJjcDkzNiIsY3Npc281OGdiMjMxMjgwOiJjcDkzNiIsZXVjY246ImNwOTM2Iix3aW5kb3dzOTM2OiJjcDkzNiIsbXM5MzY6ImNwOTM2Iiw5MzY6ImNwOTM2IixjcDkzNjp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHkoNzQ0ODgp''@;'; put 'put ''fX0sZ2JrOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3NDQ4OCkuY29uY2F0KHkoNTU5MTQpKX19LHhnYms6ImdiayIsaXNvaXI1ODoiZ2JrIixnYjE4MDMwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3NDQ4OCkuY29uY2F0KHkoNTU5''@;'; put 'put ''MTQpKX0sZ2IxODAzMDpmdW5jdGlvbigpe3JldHVybiB5KDk5MTI5KX0sZW5jb2RlU2tpcFZhbHM6WzEyOF0sZW5jb2RlQWRkOnsiXHUyMGFjIjo0MTY5OX19LGNoaW5lc2U6ImdiMTgwMzAiLHdpbmRvd3M5NDk6ImNwOTQ5Iixtczk0OToiY3A5NDkiLDk0OToiY3A5NDkiLGNwOTQ5Ont0eXBl''@;'; put 'put ''OiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSgyMTE2Nil9fSxjc2V1Y2tyOiJjcDk0OSIsY3Nrc2M1NjAxMTk4NzoiY3A5NDkiLGV1Y2tyOiJjcDk0OSIsaXNvaXIxNDk6ImNwOTQ5Iixrb3JlYW46ImNwOTQ5Iixrc2M1NjAxMTk4NzoiY3A5NDkiLGtzYzU2MDExOTg5OiJjcDk0''@;'; put 'put ''OSIsa3NjNTYwMToiY3A5NDkiLHdpbmRvd3M5NTA6ImNwOTUwIixtczk1MDoiY3A5NTAiLDk1MDoiY3A5NTAiLGNwOTUwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4geSg3MjMyNCl9fSxiaWc1OiJiaWc1aGtzY3MiLGJpZzVoa3Njczp7dHlwZToiX2RiY3MiLHRhYmxl''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHkoNzIzMjQpLmNvbmNhdCh5KDQzMjY3KSl9LGVuY29kZVNraXBWYWxzOls0MTY3Nl19LGNuYmlnNToiYmlnNWhrc2NzIixjc2JpZzU6ImJpZzVoa3NjcyIseHhiaWc1OiJiaWc1aGtzY3MifX0sNzI4OTM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7Zm9yKHZh''@;'; put 'put ''ciBJPVt5KDM3NjQwKSx5KDM1MDg5KSx5KDcxNzUpLHkoOTc0NykseSg1ODY3NykseSg3NjIzKSx5KDMwMTg3KSx5KDkzNjk0KSx5KDQ1Mjc4KV0sXz0wO188SS5sZW5ndGg7XysrKXt2YXIgZz1JW19dO2Zvcih2YXIgQiBpbiBnKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChnLEIpJiYoWFtCXT1nW0JdKX19LDM3NjQwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHosTil7dGhpcy5lbmM9ei5lbmNvZGluZ05hbWUsdGhpcy5ib21Bd2FyZT16LmJvbUF3YXJlLCJiYXNlNjQiPT09dGhpcy5lbmM/dGhpcy5l''@;'; put 'put ''bmNvZGVyPVA6ImNlc3U4Ij09PXRoaXMuZW5jJiYodGhpcy5lbmM9InV0ZjgiLHRoaXMuZW5jb2Rlcj1GLCJcdXsxZjRhOX0iIT09SS5mcm9tKCJlZGEwYmRlZGIyYTkiLCJoZXgiKS50b1N0cmluZygpJiYodGhpcy5kZWNvZGVyPU8sdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Ti5kZWZhdWx0''@;'; put 'put ''Q2hhclVuaWNvZGUpKX11ZS5leHBvcnRzPXt1dGY4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSxjZXN1ODp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sdW5pY29kZTExdXRmODoidXRmOCIsdWNzMjp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sdXRmMTZsZToi''@;'; put 'put ''dWNzMiIsYmluYXJ5Ont0eXBlOiJfaW50ZXJuYWwifSxiYXNlNjQ6e3R5cGU6Il9pbnRlcm5hbCJ9LGhleDp7dHlwZToiX2ludGVybmFsIn0sX2ludGVybmFsOl99LF8ucHJvdG90eXBlLmVuY29kZXI9dyxfLnByb3RvdHlwZS5kZWNvZGVyPUI7dmFyIGc9eSg3ODQ1NCkuSTtmdW5jdGlvbiBC''@;'; put 'put ''KHosTil7Zy5jYWxsKHRoaXMsTi5lbmMpfWZ1bmN0aW9uIHcoeixOKXt0aGlzLmVuYz1OLmVuY31mdW5jdGlvbiBQKHosTil7dGhpcy5wcmV2U3RyPSIifWZ1bmN0aW9uIEYoeixOKXt9ZnVuY3Rpb24gTyh6LE4pe3RoaXMuYWNjPTAsdGhpcy5jb250Qnl0ZXM9MCx0aGlzLmFjY0J5dGVzPTAs''@;'; put 'put ''dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Ti5kZWZhdWx0Q2hhclVuaWNvZGV9Zy5wcm90b3R5cGUuZW5kfHwoZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSksQi5wcm90b3R5cGU9Zy5wcm90b3R5cGUsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0dXJuIEkuZnJvbSh6LHRo''@;'; put 'put ''aXMuZW5jKX0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXt2YXIgTj0oej10aGlzLnByZXZTdHIreikubGVuZ3RoLXoubGVuZ3RoJTQ7cmV0dXJuIHRoaXMucHJldlN0cj16LnNsaWNlKE4pLHo9ei5zbGljZSgwLE4pLEkuZnJvbSh6''@;'; put 'put ''LCJiYXNlNjQiKX0sUC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIEkuZnJvbSh0aGlzLnByZXZTdHIsImJhc2U2NCIpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIE49SS5hbGxvYygzKnoubGVuZ3RoKSxMPTAsSz0wO0s8ei5sZW5ndGg7SysrKXt2YXIg''@;'; put 'put ''VT16LmNoYXJDb2RlQXQoSyk7VTwxMjg/TltMKytdPVU6VTwyMDQ4PyhOW0wrK109MTkyKyhVPj4+NiksTltMKytdPTEyOCsoNjMmVSkpOihOW0wrK109MjI0KyhVPj4+MTIpLE5bTCsrXT0xMjgrKFU+Pj42JjYzKSxOW0wrK109MTI4Kyg2MyZVKSl9cmV0dXJuIE4uc2xpY2UoMCxMKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcy5hY2MsTD10aGlzLmNvbnRCeXRlcyxLPXRoaXMuYWNjQnl0ZXMsVT0iIixXPTA7Vzx6Lmxlbmd0aDtXKyspe3ZhciBZPXpbV107MTI4IT0oMTkyJlkpPyhMPjAmJihV''@;'; put 'put ''Kz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSxMPTApLFk8MTI4P1UrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSk6WTwyMjQ/KE49MzEmWSxMPTEsSz0xKTpZPDI0MD8oTj0xNSZZLEw9MixLPTEpOlUrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKTpMPjA/KE49Tjw8Nnw2MyZZLEsrKywwPT0tLUwm''@;'; put 'put ''JihVKz0yPT09SyYmTjwxMjgmJk4+MHx8Mz09PUsmJk48MjA0OD90aGlzLmRlZmF1bHRDaGFyVW5pY29kZTpTdHJpbmcuZnJvbUNoYXJDb2RlKE4pKSk6VSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGV9cmV0dXJuIHRoaXMuYWNjPU4sdGhpcy5jb250Qnl0ZXM9TCx0aGlzLmFjY0J5dGVzPUss''@;'; put 'put ''VX0sTy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHo9MDtyZXR1cm4gdGhpcy5jb250Qnl0ZXM+MCYmKHorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKSx6fX0sNTg2Nzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8odyxQKXtp''@;'; put 'put ''Zighdyl0aHJvdyBuZXcgRXJyb3IoIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIXcuY2hhcnN8fDEyOCE9PXcuY2hhcnMubGVuZ3RoJiYyNTYhPT13LmNoYXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3cudHlwZSsiJyBoYXMgaW5j''@;'; put 'put ''b3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpIik7aWYoMTI4PT09dy5jaGFycy5sZW5ndGgpe2Zvcih2YXIgRj0iIixPPTA7TzwxMjg7TysrKUYrPVN0cmluZy5mcm9tQ2hhckNvZGUoTyk7dy5jaGFycz1GK3cuY2hhcnN9dGhpcy5kZWNvZGVCdWY9SS5mcm9tKHcu''@;'; put 'put ''Y2hhcnMsInVjczIiKTt2YXIgej1JLmFsbG9jKDY1NTM2LFAuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCkpO2ZvcihPPTA7Tzx3LmNoYXJzLmxlbmd0aDtPKyspelt3LmNoYXJzLmNoYXJDb2RlQXQoTyldPU87dGhpcy5lbmNvZGVCdWY9en1mdW5jdGlvbiBnKHcsUCl7dGhp''@;'; put 'put ''cy5lbmNvZGVCdWY9UC5lbmNvZGVCdWZ9ZnVuY3Rpb24gQih3LFApe3RoaXMuZGVjb2RlQnVmPVAuZGVjb2RlQnVmfVguX3NiY3M9XyxfLnByb3RvdHlwZS5lbmNvZGVyPWcsXy5wcm90b3R5cGUuZGVjb2Rlcj1CLGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUD1JLmFs''@;'; put 'put ''bG9jKHcubGVuZ3RoKSxGPTA7Rjx3Lmxlbmd0aDtGKyspUFtGXT10aGlzLmVuY29kZUJ1Zlt3LmNoYXJDb2RlQXQoRildO3JldHVybiBQfSxnLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LEIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUD10aGlzLmRlY29kZUJ1ZixG''@;'; put 'put ''PUkuYWxsb2MoMip3Lmxlbmd0aCksTz0wLHo9MCxOPTA7Tjx3Lmxlbmd0aDtOKyspRlt6PTIqTl09UFtPPTIqd1tOXV0sRlt6KzFdPVBbTysxXTtyZXR1cm4gRi50b1N0cmluZygidWNzMiIpfSxCLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9fSwzMDE4Nzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1''@;'; put 'put ''ZS5leHBvcnRzPXs0Mzc6ImNwNDM3Iiw3Mzc6ImNwNzM3Iiw3NzU6ImNwNzc1Iiw4NTA6ImNwODUwIiw4NTI6ImNwODUyIiw4NTU6ImNwODU1Iiw4NTY6ImNwODU2Iiw4NTc6ImNwODU3Iiw4NTg6ImNwODU4Iiw4NjA6ImNwODYwIiw4NjE6ImNwODYxIiw4NjI6ImNwODYyIiw4NjM6ImNwODYz''@;'; put 'put ''Iiw4NjQ6ImNwODY0Iiw4NjU6ImNwODY1Iiw4NjY6ImNwODY2Iiw4Njk6ImNwODY5Iiw4NzQ6IndpbmRvd3M4NzQiLDkyMjoiY3A5MjIiLDEwNDY6ImNwMTA0NiIsMTEyNDoiY3AxMTI0IiwxMTI1OiJjcDExMjUiLDExMjk6ImNwMTEyOSIsMTEzMzoiY3AxMTMzIiwxMTYxOiJjcDExNjEiLDEx''@;'; put 'put ''NjI6ImNwMTE2MiIsMTE2MzoiY3AxMTYzIiwxMjUwOiJ3aW5kb3dzMTI1MCIsMTI1MToid2luZG93czEyNTEiLDEyNTI6IndpbmRvd3MxMjUyIiwxMjUzOiJ3aW5kb3dzMTI1MyIsMTI1NDoid2luZG93czEyNTQiLDEyNTU6IndpbmRvd3MxMjU1IiwxMjU2OiJ3aW5kb3dzMTI1NiIsMTI1Nzoi''@;'; put 'put ''d2luZG93czEyNTciLDEyNTg6IndpbmRvd3MxMjU4IiwyODU5MToiaXNvODg1OTEiLDI4NTkyOiJpc284ODU5MiIsMjg1OTM6Imlzbzg4NTkzIiwyODU5NDoiaXNvODg1OTQiLDI4NTk1OiJpc284ODU5NSIsMjg1OTY6Imlzbzg4NTk2IiwyODU5NzoiaXNvODg1OTciLDI4NTk4OiJpc284ODU5''@;'; put 'put ''OCIsMjg1OTk6Imlzbzg4NTk5IiwyODYwMDoiaXNvODg1OTEwIiwyODYwMToiaXNvODg1OTExIiwyODYwMzoiaXNvODg1OTEzIiwyODYwNDoiaXNvODg1OTE0IiwyODYwNToiaXNvODg1OTE1IiwyODYwNjoiaXNvODg1OTE2Iix3aW5kb3dzODc0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBh''@;'; put 'put ''Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdc''@;'; put 'put ''dTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBl''@;'; put 'put ''MzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVc''@;'; put 'put ''dTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx3aW44NzQ6IndpbmRvd3M4NzQiLGNwODc0OiJ3aW5kb3dzODc0Iix3aW5kb3dzMTI1MDp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIx''@;'; put 'put ''MjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1''@;'; put 'put ''Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRh''@;'; put 'put ''XHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3''@;'; put 'put ''MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sd2luMTI1MDoid2luZG93czEyNTAiLGNwMTI1MDoid2luZG93czEyNTAiLHdpbmRvd3MxMjUxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQw''@;'; put 'put ''OVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4''@;'; put 'put ''YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQx''@;'; put 'put ''Nlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1''@;'; put 'put ''MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0''@;'; put 'put ''ZFx1MDQ0ZVx1MDQ0ZiJ9LHdpbjEyNTE6IndpbmRvd3MxMjUxIixjcDEyNTE6IndpbmRvd3MxMjUxIix3aW5kb3dzMTI1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlc''@;'; put 'put ''dTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4''@;'; put 'put ''YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhk''@;'; put 'put ''NFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZk''@;'; put 'put ''XHhmZVx4ZmYifSx3aW4xMjUyOiJ3aW5kb3dzMTI1MiIsY3AxMjUyOiJ3aW5kb3dzMTI1MiIsd2luZG93czEyNTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRc''@;'; put 'put ''eGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlh''@;'; put 'put ''XHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUw''@;'; put 'put ''M2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIn0sd2luMTI1Mzoi''@;'; put 'put ''d2luZG93czEyNTMiLGNwMTI1Mzoid2luZG93czEyNTMiLHdpbmRvd3MxMjU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhi''@;'; put 'put ''MVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4''@;'; put 'put ''ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LHdp''@;'; put 'put ''bjEyNTQ6IndpbmRvd3MxMjU0IixjcDEyNTQ6IndpbmRvd3MxMjU0Iix3aW5kb3dzMTI1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4''@;'; put 'put ''YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHUwNWJhXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUw''@;'; put 'put ''NWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRi''@;'; put 'put ''XHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sd2luMTI1NToid2luZG93czEyNTUiLGNwMTI1NToid2luZG93czEyNTUi''@;'; put 'put ''LHdpbmRvd3MxMjU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAy''@;'; put 'put ''Mlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4''@;'; put 'put ''XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVc''@;'; put 'put ''dTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1''@;'; put 'put ''MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIifSx3aW4xMjU2OiJ3aW5kb3dzMTI1NiIsY3AxMjU2OiJ3aW5kb3dzMTI1NiIsd2luZG93czEyNTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFl''@;'; put 'put ''XHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZm''@;'; put 'put ''ZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4''@;'; put 'put ''XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRc''@;'; put 'put ''eGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5In0sd2luMTI1Nzoid2luZG93''@;'; put 'put ''czEyNTciLGNwMTI1Nzoid2luZG93czEyNTciLHdpbmRvd3MxMjU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJc''@;'; put 'put ''eGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5''@;'; put 'put ''XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBh''@;'; put 'put ''Ylx4ZmYifSx3aW4xMjU4OiJ3aW5kb3dzMTI1OCIsY3AxMjU4OiJ3aW5kb3dzMTI1OCIsaXNvODg1OTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0''@;'; put 'put ''XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRc''@;'; put 'put ''eGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4''@;'; put 'put ''ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NTkxOiJpc284ODU5MSIsaXNvODg1OTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4''@;'; put 'put ''M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMmQ4XHUwMTQxXHhhNFx1MDEzZFx1MDE1YVx4YTdceGE4XHUwMTYw''@;'; put 'put ''XHUwMTVlXHUwMTY0XHUwMTc5XHhhZFx1MDE3ZFx1MDE3Ylx4YjBcdTAxMDVcdTAyZGJcdTAxNDJceGI0XHUwMTNlXHUwMTViXHUwMmM3XHhiOFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE3YVx1MDJkZFx1MDE3ZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4Yzdc''@;'; put 'put ''dTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBk''@;'; put 'put ''XHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSxjcDI4NTkyOiJpc284ODU5MiIsaXNvODg1OTM6e3R5cGU6Il9zYmNzIixjaGFy''@;'; put 'put ''czoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTI2XHUwMmQ4XHhhM1x4YTRcdWZmZmRcdTAx''@;'; put 'put ''MjRceGE3XHhhOFx1MDEzMFx1MDE1ZVx1MDExZVx1MDEzNFx4YWRcdWZmZmRcdTAxN2JceGIwXHUwMTI3XHhiMlx4YjNceGI0XHhiNVx1MDEyNVx4YjdceGI4XHUwMTMxXHUwMTVmXHUwMTFmXHUwMTM1XHhiZFx1ZmZmZFx1MDE3Y1x4YzBceGMxXHhjMlx1ZmZmZFx4YzRcdTAxMGFcdTAxMDhc''@;'; put 'put ''eGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdWZmZmRceGQxXHhkMlx4ZDNceGQ0XHUwMTIwXHhkNlx4ZDdcdTAxMWNceGQ5XHhkYVx4ZGJceGRjXHUwMTZjXHUwMTVjXHhkZlx4ZTBceGUxXHhlMlx1ZmZmZFx4ZTRcdTAxMGJcdTAxMDlceGU3XHhlOFx4ZTlceGVhXHhlYlx4''@;'; put 'put ''ZWNceGVkXHhlZVx4ZWZcdWZmZmRceGYxXHhmMlx4ZjNceGY0XHUwMTIxXHhmNlx4ZjdcdTAxMWRceGY5XHhmYVx4ZmJceGZjXHUwMTZkXHUwMTVkXHUwMmQ5In0sY3AyODU5MzoiaXNvODg1OTMiLGlzbzg4NTk0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4''@;'; put 'put ''NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEzOFx1MDE1Nlx4YTRcdTAxMjhcdTAxM2JceGE3XHhhOFx1MDE2MFx1MDExMlx1''@;'; put 'put ''MDEyMlx1MDE2Nlx4YWRcdTAxN2RceGFmXHhiMFx1MDEwNVx1MDJkYlx1MDE1N1x4YjRcdTAxMjlcdTAxM2NcdTAyYzdceGI4XHUwMTYxXHUwMTEzXHUwMTIzXHUwMTY3XHUwMTRhXHUwMTdlXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDEx''@;'; put 'put ''OFx4Y2JcdTAxMTZceGNkXHhjZVx1MDEyYVx1MDExMFx1MDE0NVx1MDE0Y1x1MDEzNlx4ZDRceGQ1XHhkNlx4ZDdceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHUwMTY4XHUwMTZhXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3''@;'; put 'put ''XHhlZFx4ZWVcdTAxMmJcdTAxMTFcdTAxNDZcdTAxNGRcdTAxMzdceGY0XHhmNVx4ZjZceGY3XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x1MDE2OVx1MDE2Ylx1MDJkOSJ9LGNwMjg1OTQ6Imlzbzg4NTk0Iixpc284ODU5NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4''@;'; put 'put ''NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0''@;'; put 'put ''MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUw''@;'; put 'put ''NDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQw''@;'; put 'put ''XHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDUzXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUw''@;'; put 'put ''NDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGNwMjg1OTU6Imlzbzg4NTk1Iixpc284ODU5Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4''@;'; put 'put ''OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdWZmZmRcdWZmZmRceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjBjXHhhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxZlx1ZmZmZFx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1''@;'; put 'put ''MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0''@;'; put 'put ''ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg1OTY6Imlzbzg4NTk2Iixpc284ODU5Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgw''@;'; put 'put ''XHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMThcdTIwMTlceGEzXHUyMGFjXHUyMGFmXHhhNlx4YTdc''@;'; put 'put ''eGE4XHhhOVx1MDM3YVx4YWJceGFjXHhhZFx1ZmZmZFx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRcdTAzODVcdTAzODZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAz''@;'; put 'put ''OTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJc''@;'; put 'put ''dTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAz''@;'; put 'put ''Y2VcdWZmZmQifSxjcDI4NTk3OiJpc284ODU5NyIsaXNvODg1OTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlc''@;'; put 'put ''eDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTIwMTdcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1''@;'; put 'put ''ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSxjcDI4NTk4OiJpc284ODU5OCIsaXNvODg1OTk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBc''@;'; put 'put ''eDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4''@;'; put 'put ''YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFc''@;'; put 'put ''eGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSxjcDI4NTk5OiJpc284ODU5OSIsaXNvODg1OTEwOnt0eXBlOiJf''@;'; put 'put ''c2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDExMlx1MDEyMlx1''@;'; put 'put ''MDEyYVx1MDEyOFx1MDEzNlx4YTdcdTAxM2JcdTAxMTBcdTAxNjBcdTAxNjZcdTAxN2RceGFkXHUwMTZhXHUwMTRhXHhiMFx1MDEwNVx1MDExM1x1MDEyM1x1MDEyYlx1MDEyOVx1MDEzN1x4YjdcdTAxM2NcdTAxMTFcdTAxNjFcdTAxNjdcdTAxN2VcdTIwMTVcdTAxNmJcdTAxNGJcdTAxMDBc''@;'; put 'put ''eGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHhjZlx4ZDBcdTAxNDVcdTAxNGNceGQzXHhkNFx4ZDVceGQ2XHUwMTY4XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1''@;'; put 'put ''XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVceGVmXHhmMFx1MDE0Nlx1MDE0ZFx4ZjNceGY0XHhmNVx4ZjZcdTAxNjlceGY4XHUwMTczXHhmYVx4ZmJceGZjXHhmZFx4ZmVcdTAxMzgifSxjcDI4NjAwOiJpc284ODU5MTAiLGlzbzg4NTkxMTp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBl''@;'; put 'put ''MDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZc''@;'; put 'put ''dTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZc''@;'; put 'put ''dTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NjAxOiJpc284ODU5MTEiLGlzbzg4NTkxMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4''@;'; put 'put ''OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMWRceGEyXHhhM1x4YTRcdTIwMWVceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHUyMDFjXHhi''@;'; put 'put ''NVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1''@;'; put 'put ''XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNc''@;'; put 'put ''dTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUyMDE5In0sY3AyODYwMzoiaXNvODg1OTEzIixpc284ODU5MTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhi''@;'; put 'put ''XHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUxZTAyXHUxZTAzXHhhM1x1MDEwYVx1MDEwYlx1MWUwYVx4YTdcdTFlODBceGE5XHUxZTgyXHUxZTBiXHUxZWYyXHhhZFx4YWVcdTAxNzhc''@;'; put 'put ''dTFlMWVcdTFlMWZcdTAxMjBcdTAxMjFcdTFlNDBcdTFlNDFceGI2XHUxZTU2XHUxZTgxXHUxZTU3XHUxZTgzXHUxZTYwXHUxZWYzXHUxZTg0XHUxZTg1XHUxZTYxXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE3NFx4''@;'; put 'put ''ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx1MWU2YVx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3Nlx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTc1XHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHUxZTZiXHhm''@;'; put 'put ''OFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTc3XHhmZiJ9LGNwMjg2MDQ6Imlzbzg4NTkxNCIsaXNvODg1OTE1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkz''@;'; put 'put ''XHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVcdTAxNjBceGE3XHUwMTYxXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxN2RceGI1XHhiNlx4YjdcdTAxN2VceGI5XHhi''@;'; put 'put ''YVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4''@;'; put 'put ''ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg2MDU6Imlzbzg4NTkxNSIsaXNvODg1OTE2Ont0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEwNVx1MDE0MVx1MjBhY1x1''@;'; put 'put ''MjAxZVx1MDE2MFx4YTdcdTAxNjFceGE5XHUwMjE4XHhhYlx1MDE3OVx4YWRcdTAxN2FcdTAxN2JceGIwXHhiMVx1MDEwY1x1MDE0Mlx1MDE3ZFx1MjAxZFx4YjZceGI3XHUwMTdlXHUwMTBkXHUwMjE5XHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx1MDE3Y1x4YzBceGMxXHhjMlx1MDEwMlx4YzRc''@;'; put 'put ''dTAxMDZceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTEwXHUwMTQzXHhkMlx4ZDNceGQ0XHUwMTUwXHhkNlx1MDE1YVx1MDE3MFx4ZDlceGRhXHhkYlx4ZGNcdTAxMThcdTAyMWFceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx1MDEwN1x4ZTZceGU3XHhlOFx4''@;'; put 'put ''ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMTFcdTAxNDRceGYyXHhmM1x4ZjRcdTAxNTFceGY2XHUwMTViXHUwMTcxXHhmOVx4ZmFceGZiXHhmY1x1MDExOVx1MDIxYlx4ZmYifSxjcDI4NjA2OiJpc284ODU5MTYiLGNwNDM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhl''@;'; put 'put ''OVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4''@;'; put 'put ''YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1''@;'; put 'put ''Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAz''@;'; put 'put ''YzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNDM3''@;'; put 'put ''OiJjcDQzNyIsY3NpYm00Mzc6ImNwNDM3IixjcDczNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAz''@;'; put 'put ''YTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZc''@;'; put 'put ''dTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1''@;'; put 'put ''NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2Fc''@;'; put 'put ''dTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm03Mzc6ImNwNzM3''@;'; put 'put ''Iixjc2libTczNzoiY3A3MzciLGNwNzc1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDEwNlx4ZmNceGU5XHUwMTAxXHhlNFx1MDEyM1x4ZTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMmJcdTAxNzlceGM0XHhjNVx4YzlceGU2XHhjNlx1MDE0ZFx4ZjZcdTAxMjJceGEyXHUw''@;'; put 'put ''MTVhXHUwMTViXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHhhNFx1MDEwMFx1MDEyYVx4ZjNcdTAxN2JcdTAxN2NcdTAxN2FcdTIwMWRceGE2XHhhOVx4YWVceGFjXHhiZFx4YmNcdTAxNDFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDEwNFx1MDEwY1x1MDExOFx1''@;'; put 'put ''MDExNlx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDEyZVx1MDE2MFx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDE3Mlx1MDE2YVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDE3ZFx1MDEwNVx1MDEwZFx1MDExOVx1MDEx''@;'; put 'put ''N1x1MDEyZlx1MDE2MVx1MDE3M1x1MDE2Ylx1MDE3ZVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx4ZDNceGRmXHUwMTRjXHUwMTQzXHhmNVx4ZDVceGI1XHUwMTQ0XHUwMTM2XHUwMTM3XHUwMTNiXHUwMTNjXHUwMTQ2XHUwMTEyXHUwMTQ1XHUyMDE5XHhhZFx4''@;'; put 'put ''YjFcdTIwMWNceGJlXHhiNlx4YTdceGY3XHUyMDFlXHhiMFx1MjIxOVx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtNzc1OiJjcDc3NSIsY3NpYm03NzU6ImNwNzc1IixjcDg1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFc''@;'; put 'put ''eGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1''@;'; put 'put ''MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhh''@;'; put 'put ''NFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4''@;'; put 'put ''YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTA6ImNwODUwIixjc2libTg1MDoiY3A4NTAiLGNwODUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFc''@;'; put 'put ''eGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdh''@;'; put 'put ''XHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1''@;'; put 'put ''YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAx''@;'; put 'put ''NjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCJ9LGlibTg1MjoiY3A4NTIiLGNzaWJtODUyOiJjcDg1MiIs''@;'; put 'put ''Y3A4NTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDUyXHUwNDAyXHUwNDUzXHUwNDAzXHUwNDUxXHUwNDAxXHUwNDU0XHUwNDA0XHUwNDU1XHUwNDA1XHUwNDU2XHUwNDA2XHUwNDU3XHUwNDA3XHUwNDU4XHUwNDA4XHUwNDU5XHUwNDA5XHUwNDVhXHUwNDBhXHUwNDViXHUwNDBiXHUwNDVj''@;'; put 'put ''XHUwNDBjXHUwNDVlXHUwNDBlXHUwNDVmXHUwNDBmXHUwNDRlXHUwNDJlXHUwNDRhXHUwNDJhXHUwNDMwXHUwNDEwXHUwNDMxXHUwNDExXHUwNDQ2XHUwNDI2XHUwNDM0XHUwNDE0XHUwNDM1XHUwNDE1XHUwNDQ0XHUwNDI0XHUwNDMzXHUwNDEzXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNc''@;'; put 'put ''dTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTA0MzlcdTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTA0M2FcdTA0MWFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1''@;'; put 'put ''NmNceGE0XHUwNDNiXHUwNDFiXHUwNDNjXHUwNDFjXHUwNDNkXHUwNDFkXHUwNDNlXHUwNDFlXHUwNDNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwNDFmXHUwNDRmXHUyNTgwXHUwNDJmXHUwNDQwXHUwNDIwXHUwNDQxXHUwNDIxXHUwNDQyXHUwNDIyXHUwNDQzXHUwNDIzXHUwNDM2XHUw''@;'; put 'put ''NDE2XHUwNDMyXHUwNDEyXHUwNDRjXHUwNDJjXHUyMTE2XHhhZFx1MDQ0Ylx1MDQyYlx1MDQzN1x1MDQxN1x1MDQ0OFx1MDQyOFx1MDQ0ZFx1MDQyZFx1MDQ0OVx1MDQyOVx1MDQ0N1x1MDQyN1x4YTdcdTI1YTBceGEwIn0saWJtODU1OiJjcDg1NSIsY3NpYm04NTU6ImNwODU1IixjcDg1Njp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdc''@;'; put 'put ''dTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRceGEzXHVmZmZkXHhkN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWVceGFjXHhiZFx4YmNcdWZmZmRceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1ZmZmZFx1ZmZmZFx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHVmZmZkXHUyNTgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhiNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWZceGI0''@;'; put 'put ''XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTY6ImNwODU2Iixjc2libTg1NjoiY3A4NTYiLGNwODU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhl''@;'; put 'put ''YVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFi''@;'; put 'put ''XHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUy''@;'; put 'put ''NTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1''@;'; put 'put ''ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NzoiY3A4NTciLGNzaWJtODU3OiJjcDg1NyIsY3A4NTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThc''@;'; put 'put ''eGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1''@;'; put 'put ''OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhk''@;'; put 'put ''MFx4Y2FceGNiXHhjOFx1MjBhY1x4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4''@;'; put 'put ''YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU4OiJjcDg1OCIsY3NpYm04NTg6ImNwODU4IixjcDg2MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlM1x4ZTBceGMxXHhlN1x4ZWFceGNhXHhlOFx4Y2RceGQ0XHhlY1x4YzNceGMyXHhj''@;'; put 'put ''OVx4YzBceGM4XHhmNFx4ZjVceGYyXHhkYVx4ZjlceGNjXHhkNVx4ZGNceGEyXHhhM1x4ZDlcdTIwYTdceGQzXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhkMlx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1''@;'; put 'put ''MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2''@;'; put 'put ''NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2''@;'; put 'put ''XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYwOiJjcDg2MCIsY3NpYm04NjA6ImNwODYwIixjcDg2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhm''@;'; put 'put ''Y1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIz''@;'; put 'put ''MTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVc''@;'; put 'put ''dTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkz''@;'; put 'put ''XHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGli''@;'; put 'put ''bTg2MToiY3A4NjEiLGNzaWJtODYxOiJjcDg2MSIsY3A4NjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUx''@;'; put 'put ''XHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUy''@;'; put 'put ''NTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZj''@;'; put 'put ''XHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlc''@;'; put 'put ''dTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjI6ImNwODYyIixjc2libTg2MjoiY3A4NjIiLGNwODYzOnt0eXBlOiJfc2Jj''@;'; put 'put ''cyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGMyXHhlMFx4YjZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTIwMTdceGMwXHhhN1x4YzlceGM4XHhjYVx4ZjRceGNiXHhjZlx4ZmJceGY5XHhhNFx4ZDRceGRjXHhhMlx4YTNceGQ5XHhkYlx1MDE5Mlx4YTZceGI0XHhmM1x4ZmFceGE4XHhi''@;'; put 'put ''OFx4YjNceGFmXHhjZVx1MjMxMFx4YWNceGJkXHhiY1x4YmVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1''@;'; put 'put ''MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4''@;'; put 'put ''MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4''@;'; put 'put ''YjJcdTI1YTBceGEwIn0saWJtODYzOiJjcDg2MyIsY3NpYm04NjM6ImNwODYzIixjcDg2NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlc''@;'; put 'put ''eDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyRcdTA2NmEmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhiMFx4YjdcdTIyMTlcdTIyMWFcdTI1OTJcdTI1MDBcdTI1''@;'; put 'put ''MDJcdTI1M2NcdTI1MjRcdTI1MmNcdTI1MWNcdTI1MzRcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdTAzYjJcdTIyMWVcdTAzYzZceGIxXHhiZFx4YmNcdTIyNDhceGFiXHhiYlx1ZmVmN1x1ZmVmOFx1ZmZmZFx1ZmZmZFx1ZmVmYlx1ZmVmY1x1ZmZmZFx4YTBceGFkXHVmZTgyXHhhM1x4YTRc''@;'; put 'put ''dWZlODRcdWZmZmRcdWZmZmRcdWZlOGVcdWZlOGZcdWZlOTVcdWZlOTlcdTA2MGNcdWZlOWRcdWZlYTFcdWZlYTVcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlZDFcdTA2MWJcdWZlYjFcdWZlYjVcdWZlYjlcdTA2MWZceGEy''@;'; put 'put ''XHVmZTgwXHVmZTgxXHVmZTgzXHVmZTg1XHVmZWNhXHVmZThiXHVmZThkXHVmZTkxXHVmZTkzXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHVmZWE3XHVmZWE5XHVmZWFiXHVmZWFkXHVmZWFmXHVmZWIzXHVmZWI3XHVmZWJiXHVmZWJmXHVmZWMxXHVmZWM1XHVmZWNiXHVmZWNmXHhhNlx4YWNc''@;'; put 'put ''eGY3XHhkN1x1ZmVjOVx1MDY0MFx1ZmVkM1x1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZmVlM1x1ZmVlN1x1ZmVlYlx1ZmVlZFx1ZmVlZlx1ZmVmM1x1ZmViZFx1ZmVjY1x1ZmVjZVx1ZmVjZFx1ZmVlMVx1ZmU3ZFx1MDY1MVx1ZmVlNVx1ZmVlOVx1ZmVlY1x1ZmVmMFx1ZmVmMlx1ZmVkMFx1ZmVkNVx1''@;'; put 'put ''ZmVmNVx1ZmVmNlx1ZmVkZFx1ZmVkOVx1ZmVmMVx1MjVhMFx1ZmZmZCJ9LGlibTg2NDoiY3A4NjQiLGNzaWJtODY0OiJjcDg2NCIsY3A4NjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhj''@;'; put 'put ''NVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0''@;'; put 'put ''XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUy''@;'; put 'put ''NTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIy''@;'; put 'put ''MWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjU6ImNwODY1Iixjc2libTg2NToiY3A4NjUiLGNwODY2Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1''@;'; put 'put ''MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2''@;'; put 'put ''Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1''@;'; put 'put ''MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0''@;'; put 'put ''ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm04NjY6ImNwODY2Iixjc2libTg2NjoiY3A4NjYiLGNwODY5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM4Nlx1ZmZmZFx4YjdceGFjXHhhNlx1MjAxOFx1MjAxOVx1MDM4OFx1MjAxNVx1MDM4OVx1MDM4YVx1MDNhYVx1MDM4Y1x1ZmZmZFx1ZmZmZFx1MDM4ZVx1MDNhYlx4YTlcdTAzOGZceGIyXHhiM1x1MDNhY1x4YTNcdTAzYWRc''@;'; put 'put ''dTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzY2RcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdceGJkXHUwMzk4XHUwMzk5XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTI1NjNcdTI1''@;'; put 'put ''NTFcdTI1NTdcdTI1NWRcdTAzOWVcdTAzOWZcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAzYTBcdTAzYTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlc''@;'; put 'put ''dTAzYjFcdTAzYjJcdTAzYjNcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAzYjRcdTAzYjVcdTI1ODBcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzODRceGFkXHhiMVx1''@;'; put 'put ''MDNjNVx1MDNjNlx1MDNjN1x4YTdcdTAzYzhcdTAzODVceGIwXHhhOFx1MDNjOVx1MDNjYlx1MDNiMFx1MDNjZVx1MjVhMFx4YTAifSxpYm04Njk6ImNwODY5Iixjc2libTg2OToiY3A4NjkiLGNwOTIyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZc''@;'; put 'put ''eDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHUyMDNl''@;'; put 'put ''XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNjBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhk''@;'; put 'put ''OFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTdkXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNjFceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTdlXHhmZiJ9''@;'; put 'put ''LGlibTkyMjoiY3A5MjIiLGNzaWJtOTIyOiJjcDkyMiIsY3AxMDQ2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmU4OFx4ZDdceGY3XHVmOGY2XHVmOGY1XHVmOGY0XHVmOGY3XHVmZTcxXHg4OFx1MjVhMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1ZmU3OVx1ZmU3Ylx1''@;'; put 'put ''ZmU3ZFx1ZmU3Zlx1ZmU3N1x1ZmU4YVx1ZmVmMFx1ZmVmM1x1ZmVmMlx1ZmVjZVx1ZmVjZlx1ZmVkMFx1ZmVmNlx1ZmVmOFx1ZmVmYVx1ZmVmY1x4YTBcdWY4ZmFcdWY4ZjlcdWY4ZjhceGE0XHVmOGZiXHVmZThiXHVmZTkxXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHUwNjBjXHhhZFx1ZmVh''@;'; put 'put ''N1x1ZmViM1x1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmViN1x1MDYxYlx1ZmViYlx1ZmViZlx1ZmVjYVx1MDYxZlx1ZmVjYlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1''@;'; put 'put ''MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1ZmVjN1x1MDYzOVx1MDYzYVx1ZmVjY1x1ZmU4Mlx1ZmU4NFx1ZmU4ZVx1ZmVkM1x1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0''@;'; put 'put ''NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZjhmY1x1ZmVmNVx1ZmVmN1x1ZmVmOVx1ZmVmYlx1ZmVlM1x1ZmVlN1x1ZmVlY1x1ZmVlOVx1ZmZmZCJ9LGlibTEw''@;'; put 'put ''NDY6ImNwMTA0NiIsY3NpYm0xMDQ2OiJjcDEwNDYiLGNwMTEyNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4''@;'; put 'put ''OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0OTBcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUw''@;'; put 'put ''NDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMz''@;'; put 'put ''XHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUw''@;'; put 'put ''NDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkxXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGlibTExMjQ6ImNwMTEyNCIsY3NpYm0xMTI0OiJjcDExMjQiLGNwMTEyNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJc''@;'; put 'put ''dTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0''@;'; put 'put ''MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJc''@;'; put 'put ''dTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1''@;'; put 'put ''NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRc''@;'; put 'put ''dTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdcdTA0NTdceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm0xMTI1OiJjcDExMjUiLGNzaWJtMTEyNToiY3AxMTI1IixjcDExMjk6e3R5cGU6Il9zYmNzIixjaGFy''@;'; put 'put ''czoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x1''@;'; put 'put ''MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2Vc''@;'; put 'put ''eGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYz''@;'; put 'put ''XHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTEyOToiY3AxMTI5Iixjc2libTExMjk6ImNwMTEyOSIsY3AxMTMzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhh''@;'; put 'put ''XHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGVhYVx1MGU4YVx1MGU4ZFx1MGU5NFx1MGU5NVx1MGU5Nlx1MGU5N1x1MGU5''@;'; put 'put ''OVx1MGU5YVx1MGU5Ylx1MGU5Y1x1MGU5ZFx1MGU5ZVx1MGU5Zlx1MGVhMVx1MGVhMlx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYlx1MGVhZFx1MGVhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVhZlx1MGViMFx1MGViMlx1MGViM1x1MGViNFx1MGViNVx1MGViNlx1MGViN1x1MGViOFx1MGViOVx1''@;'; put 'put ''MGViY1x1MGViMVx1MGViYlx1MGViZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVjMFx1MGVjMVx1MGVjMlx1MGVjM1x1MGVjNFx1MGVjOFx1MGVjOVx1MGVjYVx1MGVjYlx1MGVjY1x1MGVjZFx1MGVjNlx1ZmZmZFx1MGVkY1x1MGVkZFx1MjBhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVkMFx1MGVkMVx1MGVkMlx1MGVkM1x1MGVkNFx1MGVkNVx1MGVkNlx1MGVkN1x1MGVkOFx1MGVkOVx1ZmZmZFx1ZmZmZFx4YTJceGFjXHhhNlx1ZmZmZCJ9LGlibTEx''@;'; put 'put ''MzM6ImNwMTEzMyIsY3NpYm0xMTMzOiJjcDExMzMiLGNwMTE2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlNDhcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNc''@;'; put 'put ''dTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBl''@;'; put 'put ''MjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdTBlNDlcdTBlNGFcdTBlNGJcdTIwYWNcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNc''@;'; put 'put ''dTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJceGEyXHhhY1x4YTZceGEwIn0saWJt''@;'; put 'put ''MTE2MToiY3AxMTYxIixjc2libTExNjE6ImNwMTE2MSIsY3AxMTYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x4ODFceDgyXHg4M1x4ODRcdTIwMjZceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1''@;'; put 'put ''MjAxM1x1MjAxNFx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUx''@;'; put 'put ''NFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1''@;'; put 'put ''MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0''@;'; put 'put ''Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlibTExNjI6ImNwMTE2MiIsY3NpYm0xMTYyOiJjcDExNjIiLGNwMTE2''@;'; put 'put ''Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4''@;'; put 'put ''YTNcdTIwYWNceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4Yzlc''@;'; put 'put ''eGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4''@;'; put 'put ''ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExNjM6ImNwMTE2MyIsY3NpYm0xMTYzOiJjcDExNjMiLG1hY2Nyb2F0aWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4Yzlc''@;'; put 'put ''eGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx1MDE2MFx1MjEyMlx4''@;'; put 'put ''YjRceGE4XHUyMjYwXHUwMTdkXHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTIyMDZceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwMTYxXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxN2VceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUwMTA2XHhhYlx1MDEwY1x1MjAyNlx4YTBc''@;'; put 'put ''eGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTAxMTBcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHVmZmZkXHhhOVx1MjA0NFx4YTRcdTIwMzlcdTIwM2FceGM2XHhiYlx1MjAxM1x4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHUwMTA3XHhjMVx1MDEwZFx4YzhceGNk''@;'; put 'put ''XHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdTAxMTFceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDNjMFx4Y2JcdTAyZGFceGI4XHhjYVx4ZTZcdTAyYzcifSxtYWNjeXJpbGxpYzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRc''@;'; put 'put ''dTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIw''@;'; put 'put ''MjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFc''@;'; put 'put ''dTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1''@;'; put 'put ''MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0''@;'; put 'put ''N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxtYWNncmVlazp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEy''@;'; put 'put ''Mlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1''@;'; put 'put ''XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAx''@;'; put 'put ''NVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAz''@;'; put 'put ''YmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQifSxtYWNpY2VsYW5kOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQx''@;'; put 'put ''XHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThc''@;'; put 'put ''dTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAx''@;'; put 'put ''NTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZm''@;'; put 'put ''ZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVc''@;'; put 'put ''eGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1''@;'; put 'put ''MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAx''@;'; put 'put ''MzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuaWE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGVi''@;'; put 'put ''XHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTAyXHUwMTVlXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUy''@;'; put 'put ''MjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxMDNcdTAxNWZceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIw''@;'; put 'put ''MTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdTAxNjJcdTAxNjNcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUw''@;'; put 'put ''MmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN0aGFpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YWJceGJiXHUyMDI2XHVmODhjXHVmODhmXHVmODkyXHVmODk1XHVmODk4XHVmODhiXHVmODhlXHVmODkxXHVmODk0XHVmODk3XHUyMDFjXHUyMDFk''@;'; put 'put ''XHVmODk5XHVmZmZkXHUyMDIyXHVmODg0XHVmODg5XHVmODg1XHVmODg2XHVmODg3XHVmODg4XHVmODhhXHVmODhkXHVmODkwXHVmODkzXHVmODk2XHUyMDE4XHUyMDE5XHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUw''@;'; put 'put ''YVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1''@;'; put 'put ''MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmVmZlx1MjAwYlx1MjAxM1x1MjAxNFx1MGUzZlx1MGU0MFx1MGU0''@;'; put 'put ''MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MjEyMlx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx4YWVceGE5XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIn0sbWFjdHVya2lzaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4''@;'; put 'put ''ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4Zjhc''@;'; put 'put ''eGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1''@;'; put 'put ''MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1h''@;'; put 'put ''Y3VrcmFpbmU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUw''@;'; put 'put ''NDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx1MDQ5MFx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1''@;'; put 'put ''MDQ1Nlx4YjVcdTA0OTFcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUy''@;'; put 'put ''MDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1''@;'; put 'put ''MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxrb2k4cjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBc''@;'; put 'put ''dTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1''@;'; put 'put ''MjU1MVx1MjU1Mlx1MDQ1MVx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2''@;'; put 'put ''YVx1MjU2Ylx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0''@;'; put 'put ''NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFc''@;'; put 'put ''dTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1''@;'; put 'put ''M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1''@;'; put 'put ''N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0''@;'; put 'put ''NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdc''@;'; put 'put ''dTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0''@;'; put 'put ''MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4cnU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkx''@;'; put 'put ''XHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFc''@;'; put 'put ''dTA0NWVcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTA0MGVceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4''@;'; put 'put ''XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUw''@;'; put 'put ''NDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29p''@;'; put 'put ''OHQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDliXHUwNDkzXHUyMDFhXHUwNDkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwNGIzXHUyMDM5XHUwNGIyXHUwNGI3XHUwNGI2XHVmZmZkXHUwNDlhXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUy''@;'; put 'put ''MDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNGVmXHUwNGVlXHUwNDUxXHhhNFx1MDRlM1x4YTZceGE3XHVmZmZkXHVmZmZkXHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1ZmZmZFx4YjBceGIxXHhiMlx1MDQwMVx1ZmZmZFx1MDRlMlx4''@;'; put 'put ''YjZceGI3XHVmZmZkXHUyMTE2XHVmZmZkXHhiYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBc''@;'; put 'put ''dTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0''@;'; put 'put ''MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxhcm1zY2lpODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2''@;'; put 'put ''XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdTA1ODdcdTA1ODkpKFx4YmJceGFiXHUyMDE0Llx1MDU1ZCwtXHUwNThhXHUyMDI2XHUwNTVj''@;'; put 'put ''XHUwNTViXHUwNTVlXHUwNTMxXHUwNTYxXHUwNTMyXHUwNTYyXHUwNTMzXHUwNTYzXHUwNTM0XHUwNTY0XHUwNTM1XHUwNTY1XHUwNTM2XHUwNTY2XHUwNTM3XHUwNTY3XHUwNTM4XHUwNTY4XHUwNTM5XHUwNTY5XHUwNTNhXHUwNTZhXHUwNTNiXHUwNTZiXHUwNTNjXHUwNTZjXHUwNTNkXHUw''@;'; put 'put ''NTZkXHUwNTNlXHUwNTZlXHUwNTNmXHUwNTZmXHUwNTQwXHUwNTcwXHUwNTQxXHUwNTcxXHUwNTQyXHUwNTcyXHUwNTQzXHUwNTczXHUwNTQ0XHUwNTc0XHUwNTQ1XHUwNTc1XHUwNTQ2XHUwNTc2XHUwNTQ3XHUwNTc3XHUwNTQ4XHUwNTc4XHUwNTQ5XHUwNTc5XHUwNTRhXHUwNTdhXHUwNTRi''@;'; put 'put ''XHUwNTdiXHUwNTRjXHUwNTdjXHUwNTRkXHUwNTdkXHUwNTRlXHUwNTdlXHUwNTRmXHUwNTdmXHUwNTUwXHUwNTgwXHUwNTUxXHUwNTgxXHUwNTUyXHUwNTgyXHUwNTUzXHUwNTgzXHUwNTU0XHUwNTg0XHUwNTU1XHUwNTg1XHUwNTU2XHUwNTg2XHUwNTVhXHVmZmZkIn0scmsxMDQ4Ont0eXBl''@;'; put 'put ''OiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQ5YVx1MDRiYVx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZm''@;'; put 'put ''ZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ5Ylx1MDRiYlx1MDQ1Zlx4YTBcdTA0YjBcdTA0YjFcdTA0ZDhceGE0XHUwNGU4XHhhNlx4YTdcdTA0MDFceGE5XHUwNDkyXHhhYlx4YWNceGFkXHhhZVx1MDRhZVx4YjBceGIxXHUwNDA2XHUwNDU2XHUwNGU5XHhiNVx4YjZceGI3XHUwNDUx''@;'; put 'put ''XHUyMTE2XHUwNDkzXHhiYlx1MDRkOVx1MDRhMlx1MDRhM1x1MDRhZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQy''@;'; put 'put ''NFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1''@;'; put 'put ''MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHRjdm46e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceGRhXHUxZWU0XHgwM1x1MWVlYVx1MWVlY1x1MWVlZVx4MDdcYlx0''@;'; put 'put ''XG5cdlxmXHJceDBlXHgwZlx4MTBcdTFlZThcdTFlZjBcdTFlZjJcdTFlZjZcdTFlZjhceGRkXHUxZWY0XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVm''@;'; put 'put ''Z2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzBcdTFlYTJceGMzXHhjMVx1MWVhMFx1MWViNlx1MWVhY1x4YzhcdTFlYmFcdTFlYmNceGM5XHUxZWI4XHUxZWM2XHhjY1x1MWVjOFx1MDEyOFx4Y2RcdTFlY2FceGQyXHUxZWNlXHhkNVx4ZDNcdTFlY2NcdTFlZDhcdTFlZGNcdTFlZGVc''@;'; put 'put ''dTFlZTBcdTFlZGFcdTFlZTJceGQ5XHUxZWU2XHUwMTY4XHhhMFx1MDEwMlx4YzJceGNhXHhkNFx1MDFhMFx1MDFhZlx1MDExMFx1MDEwM1x4ZTJceGVhXHhmNFx1MDFhMVx1MDFiMFx1MDExMVx1MWViMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMwMVx1MDMyM1x4ZTBcdTFlYTNceGUzXHhlMVx1''@;'; put 'put ''MWVhMVx1MWViMlx1MWViMVx1MWViM1x1MWViNVx1MWVhZlx1MWViNFx1MWVhZVx1MWVhNlx1MWVhOFx1MWVhYVx1MWVhNFx1MWVjMFx1MWViN1x1MWVhN1x1MWVhOVx1MWVhYlx1MWVhNVx1MWVhZFx4ZThcdTFlYzJcdTFlYmJcdTFlYmRceGU5XHUxZWI5XHUxZWMxXHUxZWMzXHUxZWM1XHUx''@;'; put 'put ''ZWJmXHUxZWM3XHhlY1x1MWVjOVx1MWVjNFx1MWViZVx1MWVkMlx1MDEyOVx4ZWRcdTFlY2JceGYyXHUxZWQ0XHUxZWNmXHhmNVx4ZjNcdTFlY2RcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZDFcdTFlZDlcdTFlZGRcdTFlZGZcdTFlZTFcdTFlZGJcdTFlZTNceGY5XHUxZWQ2XHUxZWU3XHUwMTY5''@;'; put 'put ''XHhmYVx1MWVlNVx1MWVlYlx1MWVlZFx1MWVlZlx1MWVlOVx1MWVmMVx1MWVmM1x1MWVmN1x1MWVmOVx4ZmRcdTFlZjVcdTFlZDAifSxnZW9yZ2lhbmFjYWRlbXk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZc''@;'; put 'put ''dTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5''@;'; put 'put ''XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBk''@;'; put 'put ''Y1x1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBlZlx1MTBmMFx1MTBmMVx1MTBmMlx1MTBmM1x1MTBmNFx1MTBmNVx1MTBmNlx4ZTdceGU4''@;'; put 'put ''XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxnZW9yZ2lhbnBzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIw''@;'; put 'put ''XHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhh''@;'; put 'put ''Nlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZjFcdTEwZDdcdTEwZDhcdTEw''@;'; put 'put ''ZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZjJcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZjNcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZjRcdTEwZWZcdTEwZjBcdTEwZjVc''@;'; put 'put ''eGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHB0MTU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Nlx1MDQ5Mlx1MDRlZVx1MDQ5M1x1MjAxZVx1''@;'; put 'put ''MjAyNlx1MDRiNlx1MDRhZVx1MDRiMlx1MDRhZlx1MDRhMFx1MDRlMlx1MDRhMlx1MDQ5YVx1MDRiYVx1MDRiOFx1MDQ5N1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRiM1x1MDRiN1x1MDRhMVx1MDRlM1x1MDRhM1x1MDQ5Ylx1MDRiYlx1MDRiOVx4YTBc''@;'; put 'put ''dTA0MGVcdTA0NWVcdTA0MDhcdTA0ZThcdTA0OThcdTA0YjBceGE3XHUwNDAxXHhhOVx1MDRkOFx4YWJceGFjXHUwNGVmXHhhZVx1MDQ5Y1x4YjBcdTA0YjFcdTA0MDZcdTA0NTZcdTA0OTlcdTA0ZTlceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDRkOVx4YmJcdTA0NThcdTA0YWFcdTA0YWJcdTA0''@;'; put 'put ''OWRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFc''@;'; put 'put ''dTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0''@;'; put 'put ''NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx2aXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHUxZWIyXHgwM1x4MDRcdTFlYjRcdTFlYWFceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHUxZWY2''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx1MWVmOFx4MWFceDFiXHgxY1x4MWRcdTFlZjRceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTFlYTBcdTFlYWVcdTFl''@;'; put 'put ''YjBcdTFlYjZcdTFlYTRcdTFlYTZcdTFlYThcdTFlYWNcdTFlYmNcdTFlYjhcdTFlYmVcdTFlYzBcdTFlYzJcdTFlYzRcdTFlYzZcdTFlZDBcdTFlZDJcdTFlZDRcdTFlZDZcdTFlZDhcdTFlZTJcdTFlZGFcdTFlZGNcdTFlZGVcdTFlY2FcdTFlY2VcdTFlY2NcdTFlYzhcdTFlZTZcdTAxNjhc''@;'; put 'put ''dTFlZTRcdTFlZjJceGQ1XHUxZWFmXHUxZWIxXHUxZWI3XHUxZWE1XHUxZWE3XHUxZWE5XHUxZWFkXHUxZWJkXHUxZWI5XHUxZWJmXHUxZWMxXHUxZWMzXHUxZWM1XHUxZWM3XHUxZWQxXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWUwXHUwMWEwXHUxZWQ5XHUxZWRkXHUxZWRmXHUxZWNiXHUxZWYw''@;'; put 'put ''XHUxZWU4XHUxZWVhXHUxZWVjXHUwMWExXHUxZWRiXHUwMWFmXHhjMFx4YzFceGMyXHhjM1x1MWVhMlx1MDEwMlx1MWViM1x1MWViNVx4YzhceGM5XHhjYVx1MWViYVx4Y2NceGNkXHUwMTI4XHUxZWYzXHUwMTEwXHUxZWU5XHhkMlx4ZDNceGQ0XHUxZWExXHUxZWY3XHUxZWViXHUxZWVkXHhk''@;'; put 'put ''OVx4ZGFcdTFlZjlcdTFlZjVceGRkXHUxZWUxXHUwMWIwXHhlMFx4ZTFceGUyXHhlM1x1MWVhM1x1MDEwM1x1MWVlZlx1MWVhYlx4ZThceGU5XHhlYVx1MWViYlx4ZWNceGVkXHUwMTI5XHUxZWM5XHUwMTExXHUxZWYxXHhmMlx4ZjNceGY0XHhmNVx1MWVjZlx1MWVjZFx1MWVlNVx4ZjlceGZh''@;'; put 'put ''XHUwMTY5XHUxZWU3XHhmZFx1MWVlM1x1MWVlZSJ9LGlzbzY0NmNuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4''@;'; put 'put ''MWRceDFlXHgxZiAhXCIjXHhhNSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpc282NDZqcDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXHhhNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxocHJvbWFuODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhc''@;'; put 'put ''eDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGMwXHhjMlx4YzhceGNhXHhjYlx4Y2VceGNmXHhiNFx1MDJjYlx1MDJjNlx4YThcdTAyZGNceGQ5XHhkYlx1MjBhNFx4''@;'; put 'put ''YWZceGRkXHhmZFx4YjBceGM3XHhlN1x4ZDFceGYxXHhhMVx4YmZceGE0XHhhM1x4YTVceGE3XHUwMTkyXHhhMlx4ZTJceGVhXHhmNFx4ZmJceGUxXHhlOVx4ZjNceGZhXHhlMFx4ZThceGYyXHhmOVx4ZTRceGViXHhmNlx4ZmNceGM1XHhlZVx4ZDhceGM2XHhlNVx4ZWRceGY4XHhlNlx4YzRc''@;'; put 'put ''eGVjXHhkNlx4ZGNceGM5XHhlZlx4ZGZceGQ0XHhjMVx4YzNceGUzXHhkMFx4ZjBceGNkXHhjY1x4ZDNceGQyXHhkNVx4ZjVcdTAxNjBcdTAxNjFceGRhXHUwMTc4XHhmZlx4ZGVceGZlXHhiN1x4YjVceGI2XHhiZVx1MjAxNFx4YmNceGJkXHhhYVx4YmFceGFiXHUyNWEwXHhiYlx4YjFcdWZm''@;'; put 'put ''ZmQifSxtYWNpbnRvc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNc''@;'; put 'put ''dTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFj''@;'; put 'put ''XHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhi''@;'; put 'put ''N1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sYXNjaWk6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sdGlzNjIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1''@;'; put 'put ''MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUz''@;'; put 'put ''NFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1''@;'; put 'put ''MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9fX0sNzYyMzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXsxMDAyOToibWFjY2VudGV1cm8iLG1hY2NlbnRldXJv''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhm''@;'; put 'put ''NVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAx''@;'; put 'put ''M2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2Fc''@;'; put 'put ''dTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1''@;'; put 'put ''MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3In0sODA4OiJjcDgwOCIsaWJtODA4OiJjcDgwOCIsY3A4MDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3''@;'; put 'put ''XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUw''@;'; put 'put ''NDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTVi''@;'; put 'put ''XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUy''@;'; put 'put ''NTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3''@;'; put 'put ''XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZcdTIwYWNcdTI1YTBceGEwIn0sbWlrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQx''@;'; put 'put ''ZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1''@;'; put 'put ''MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUw''@;'; put 'put ''MFx1MjUzY1x1MjU2M1x1MjU1MVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjUxMFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjExNlx4YTdcdTI1NTdcdTI1NWRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAz''@;'; put 'put ''YjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUy''@;'; put 'put ''NWEwXHhhMCJ9LGNwNzIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHhlOVx4ZTJceDg0XHhlMFx4ODZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceDhkXHg4ZVx4OGZceDkwXHUwNjUxXHUwNjUyXHhmNFx4YTRcdTA2NDBceGZiXHhmOVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx4''@;'; put 'put ''YTNcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1''@;'; put 'put ''NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1''@;'; put 'put ''MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MVx4YjVcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFc''@;'; put 'put ''dTIyNjFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sYXNjaWk4Yml0OiJhc2NpaSIsdXNhc2NpaToiYXNjaWkiLGFuc2l4MzQ6ImFzY2lpIixhbnNpeDM0MTk2ODoiYXNjaWkiLGFuc2l4''@;'; put 'put ''MzQxOTg2OiJhc2NpaSIsY3Nhc2NpaToiYXNjaWkiLGNwMzY3OiJhc2NpaSIsaWJtMzY3OiJhc2NpaSIsaXNvaXI2OiJhc2NpaSIsaXNvNjQ2dXM6ImFzY2lpIixpc282NDZpcnY6ImFzY2lpIix1czoiYXNjaWkiLGxhdGluMToiaXNvODg1OTEiLGxhdGluMjoiaXNvODg1OTIiLGxhdGluMzoi''@;'; put 'put ''aXNvODg1OTMiLGxhdGluNDoiaXNvODg1OTQiLGxhdGluNToiaXNvODg1OTkiLGxhdGluNjoiaXNvODg1OTEwIixsYXRpbjc6Imlzbzg4NTkxMyIsbGF0aW44OiJpc284ODU5MTQiLGxhdGluOToiaXNvODg1OTE1IixsYXRpbjEwOiJpc284ODU5MTYiLGNzaXNvbGF0aW4xOiJpc284ODU5MSIs''@;'; put 'put ''Y3Npc29sYXRpbjI6Imlzbzg4NTkyIixjc2lzb2xhdGluMzoiaXNvODg1OTMiLGNzaXNvbGF0aW40OiJpc284ODU5NCIsY3Npc29sYXRpbmN5cmlsbGljOiJpc284ODU5NSIsY3Npc29sYXRpbmFyYWJpYzoiaXNvODg1OTYiLGNzaXNvbGF0aW5ncmVlazoiaXNvODg1OTciLGNzaXNvbGF0aW5o''@;'; put 'put ''ZWJyZXc6Imlzbzg4NTk4Iixjc2lzb2xhdGluNToiaXNvODg1OTkiLGNzaXNvbGF0aW42OiJpc284ODU5MTAiLGwxOiJpc284ODU5MSIsbDI6Imlzbzg4NTkyIixsMzoiaXNvODg1OTMiLGw0OiJpc284ODU5NCIsbDU6Imlzbzg4NTk5IixsNjoiaXNvODg1OTEwIixsNzoiaXNvODg1OTEzIixs''@;'; put 'put ''ODoiaXNvODg1OTE0IixsOToiaXNvODg1OTE1IixsMTA6Imlzbzg4NTkxNiIsaXNvaXIxNDoiaXNvNjQ2anAiLGlzb2lyNTc6ImlzbzY0NmNuIixpc29pcjEwMDoiaXNvODg1OTEiLGlzb2lyMTAxOiJpc284ODU5MiIsaXNvaXIxMDk6Imlzbzg4NTkzIixpc29pcjExMDoiaXNvODg1OTQiLGlz''@;'; put 'put ''b2lyMTQ0OiJpc284ODU5NSIsaXNvaXIxMjc6Imlzbzg4NTk2Iixpc29pcjEyNjoiaXNvODg1OTciLGlzb2lyMTM4OiJpc284ODU5OCIsaXNvaXIxNDg6Imlzbzg4NTk5Iixpc29pcjE1NzoiaXNvODg1OTEwIixpc29pcjE2NjoidGlzNjIwIixpc29pcjE3OToiaXNvODg1OTEzIixpc29pcjE5''@;'; put 'put ''OToiaXNvODg1OTE0Iixpc29pcjIwMzoiaXNvODg1OTE1Iixpc29pcjIyNjoiaXNvODg1OTE2IixjcDgxOToiaXNvODg1OTEiLGlibTgxOToiaXNvODg1OTEiLGN5cmlsbGljOiJpc284ODU5NSIsYXJhYmljOiJpc284ODU5NiIsYXJhYmljODoiaXNvODg1OTYiLGVjbWExMTQ6Imlzbzg4NTk2''@;'; put 'put ''Iixhc21vNzA4OiJpc284ODU5NiIsZ3JlZWs6Imlzbzg4NTk3IixncmVlazg6Imlzbzg4NTk3IixlY21hMTE4OiJpc284ODU5NyIsZWxvdDkyODoiaXNvODg1OTciLGhlYnJldzoiaXNvODg1OTgiLGhlYnJldzg6Imlzbzg4NTk4Iix0dXJraXNoOiJpc284ODU5OSIsdHVya2lzaDg6Imlzbzg4''@;'; put 'put ''NTk5Iix0aGFpOiJpc284ODU5MTEiLHRoYWk4OiJpc284ODU5MTEiLGNlbHRpYzoiaXNvODg1OTE0IixjZWx0aWM4OiJpc284ODU5MTQiLGlzb2NlbHRpYzoiaXNvODg1OTE0Iix0aXM2MjAwOiJ0aXM2MjAiLHRpczYyMDI1MjkxOiJ0aXM2MjAiLHRpczYyMDI1MzMwOiJ0aXM2MjAiLDFlNDoi''@;'; put 'put ''bWFjcm9tYW4iLDEwMDA2OiJtYWNncmVlayIsMTAwMDc6Im1hY2N5cmlsbGljIiwxMDA3OToibWFjaWNlbGFuZCIsMTAwODE6Im1hY3R1cmtpc2giLGNzcGM4Y29kZXBhZ2U0Mzc6ImNwNDM3Iixjc3BjNzc1YmFsdGljOiJjcDc3NSIsY3NwYzg1MG11bHRpbGluZ3VhbDoiY3A4NTAiLGNzcGNw''@;'; put 'put ''ODUyOiJjcDg1MiIsY3NwYzg2MmxhdGluaGVicmV3OiJjcDg2MiIsY3BncjoiY3A4NjkiLG1zZWU6ImNwMTI1MCIsbXNjeXJsOiJjcDEyNTEiLG1zYW5zaToiY3AxMjUyIixtc2dyZWVrOiJjcDEyNTMiLG1zdHVyazoiY3AxMjU0Iixtc2hlYnI6ImNwMTI1NSIsbXNhcmFiOiJjcDEyNTYiLHdp''@;'; put 'put ''bmJhbHRyaW06ImNwMTI1NyIsY3AyMDg2Njoia29pOHIiLDIwODY2OiJrb2k4ciIsaWJtODc4OiJrb2k4ciIsY3Nrb2k4cjoia29pOHIiLGNwMjE4NjY6ImtvaTh1IiwyMTg2Njoia29pOHUiLGlibTExNjg6ImtvaTh1IixzdHJrMTA0ODIwMDI6InJrMTA0OCIsdGN2bjU3MTI6InRjdm4iLHRj''@;'; put 'put ''dm41NzEyMToidGN2biIsZ2IxOTg4ODA6ImlzbzY0NmNuIixjbjoiaXNvNjQ2Y24iLGNzaXNvMTRqaXNjNjIyMHJvOiJpc282NDZqcCIsamlzYzYyMjAxOTY5cm86ImlzbzY0NmpwIixqcDoiaXNvNjQ2anAiLGNzaHByb21hbjg6Imhwcm9tYW44IixyODoiaHByb21hbjgiLHJvbWFuODoiaHBy''@;'; put 'put ''b21hbjgiLHhyb21hbjg6Imhwcm9tYW44IixpYm0xMDUxOiJocHJvbWFuOCIsbWFjOiJtYWNpbnRvc2giLGNzbWFjaW50b3NoOiJtYWNpbnRvc2gifX0sNzE3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBnKCl7''@;'; put 'put ''fWZ1bmN0aW9uIEIoKXt0aGlzLm92ZXJmbG93Qnl0ZT0tMX1mdW5jdGlvbiB3KHosTil7dGhpcy5pY29udj1OfWZ1bmN0aW9uIFAoeixOKXt2b2lkIDA9PT0oej16fHx7fSkuYWRkQk9NJiYoei5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1OLmljb252LmdldEVuY29kZXIoInV0Zi0xNmxlIix6''@;'; put 'put ''KX1mdW5jdGlvbiBGKHosTil7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9enx8e30sdGhpcy5pY29udj1OLmljb252fWZ1bmN0aW9uIE8oeixOKXt2YXIgTD1OfHwidXRmLTE2bGUiO2lmKHoubGVuZ3Ro''@;'; put 'put ''Pj0yKWlmKDI1ND09elswXSYmMjU1PT16WzFdKUw9InV0Zi0xNmJlIjtlbHNlIGlmKDI1NT09elswXSYmMjU0PT16WzFdKUw9InV0Zi0xNmxlIjtlbHNle2Zvcih2YXIgSz0wLFU9MCxXPU1hdGgubWluKHoubGVuZ3RoLXoubGVuZ3RoJTIsNjQpLFk9MDtZPFc7WSs9MikwPT09eltZXSYmMCE9''@;'; put 'put ''PXpbWSsxXSYmVSsrLDAhPT16W1ldJiYwPT09eltZKzFdJiZLKys7VT5LP0w9InV0Zi0xNmJlIjpVPEsmJihMPSJ1dGYtMTZsZSIpfXJldHVybiBMfVgudXRmMTZiZT1fLF8ucHJvdG90eXBlLmVuY29kZXI9ZyxfLnByb3RvdHlwZS5kZWNvZGVyPUIsXy5wcm90b3R5cGUuYm9tQXdhcmU9ITAs''@;'; put 'put ''Zy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPUkuZnJvbSh6LCJ1Y3MyIiksTD0wO0w8Ti5sZW5ndGg7TCs9Mil7dmFyIEs9TltMXTtOW0xdPU5bTCsxXSxOW0wrMV09S31yZXR1cm4gTn0sZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxCLnByb3RvdHlwZS53cml0''@;'; put 'put ''ZT1mdW5jdGlvbih6KXtpZigwPT16Lmxlbmd0aClyZXR1cm4iIjt2YXIgTj1JLmFsbG9jKHoubGVuZ3RoKzEpLEw9MCxLPTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihOWzBdPXpbMF0sTlsxXT10aGlzLm92ZXJmbG93Qnl0ZSxMPTEsSz0yKTtMPHoubGVuZ3RoLTE7TCs9MixLKz0y''@;'; put 'put ''KU5bS109eltMKzFdLE5bSysxXT16W0xdO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1MPT16Lmxlbmd0aC0xP3pbei5sZW5ndGgtMV06LTEsTi5zbGljZSgwLEspLnRvU3RyaW5nKCJ1Y3MyIil9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sWC51dGYxNj13LHcucHJvdG90eXBlLmVu''@;'; put 'put ''Y29kZXI9UCx3LnByb3RvdHlwZS5kZWNvZGVyPUYsUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZSh6KX0sUC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVu''@;'; put 'put ''Y3Rpb24oeil7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaCh6KSx0aGlzLmluaXRpYWxCeXRlc0xlbis9ei5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIE49Tyh6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9w''@;'; put 'put ''dGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKHopfSxGLnByb3RvdHlwZS5l''@;'; put 'put ''bmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgej1JLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksTj1PKHosdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihOLHRoaXMub3B0aW9ucyk7dmFyIEw9dGhpcy5k''@;'; put 'put ''ZWNvZGVyLndyaXRlKHopLEs9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBLP0wrSzpMfXJldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSwzNTA4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXyh6LE4pe3RoaXMuaWNvbnY9Tix0aGlz''@;'; put 'put ''LmJvbUF3YXJlPSEwLHRoaXMuaXNMRT16LmlzTEV9ZnVuY3Rpb24gZyh6LE4pe3RoaXMuaXNMRT1OLmlzTEUsdGhpcy5oaWdoU3Vycm9nYXRlPTB9ZnVuY3Rpb24gQih6LE4pe3RoaXMuaXNMRT1OLmlzTEUsdGhpcy5iYWRDaGFyPU4uaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCksdGhpcy5vdmVyZmxvdz1udWxsfWZ1bmN0aW9uIHcoeixOKXt0aGlzLmljb252PU59ZnVuY3Rpb24gUCh6LE4pe3ZvaWQgMD09PSh6PXp8fHt9KS5hZGRCT00mJih6LmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPU4uaWNvbnYuZ2V0RW5jb2Rlcih6LmRlZmF1bHRFbmNvZGluZ3x8InV0''@;'; put 'put ''Zi0zMmxlIix6KX1mdW5jdGlvbiBGKHosTil7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9enx8e30sdGhpcy5pY29udj1OLmljb252fWZ1bmN0aW9uIE8oeixOKXt2YXIgTD1OfHwidXRmLTMybGUiO2lm''@;'; put 'put ''KHoubGVuZ3RoPj00KWlmKDY1Mjc5PT09ei5yZWFkVUludDMyQkUoMCkpTD0idXRmLTMyYmUiO2Vsc2UgaWYoNjUyNzk9PT16LnJlYWRVSW50MzJMRSgwKSlMPSJ1dGYtMzJsZSI7ZWxzZXtmb3IodmFyIEs9MCxVPTAsVz0wLFk9MCxxPU1hdGgubWluKHoubGVuZ3RoLXoubGVuZ3RoJTQsMTI4''@;'; put 'put ''KSxlZT0wO2VlPHE7ZWUrPTQpe3ZhciBKPXpbZWVdLG5lPXpbZWUrMV0saWU9eltlZSsyXSxsZT16W2VlKzNdOygwIT09Snx8bmU+MTYpJiYrK1UsKDAhPT1sZXx8aWU+MTYpJiYrK0ssMD09PUomJjA9PT1uZSYmMD09PWllJiYwIT09bGUmJlkrKywwIT09SiYmMD09PW5lJiYwPT09aWUmJjA9''@;'; put 'put ''PT1sZSYmVysrfVU8Sz9MPSJ1dGYtMzJiZSI6SzxVJiYoTD0idXRmLTMybGUiKSxZPlc/TD0idXRmLTMyYmUiOlk8VyYmKEw9InV0Zi0zMmxlIil9cmV0dXJuIEx9WC5fdXRmMzI9XyxYLnV0ZjMybGU9e3R5cGU6Il91dGYzMiIsaXNMRTohMH0sWC51dGYzMmJlPXt0eXBlOiJfdXRmMzIiLGlz''@;'; put 'put ''TEU6ITF9LFgudWNzNGxlPSJ1dGYzMmxlIixYLnVjczRiZT0idXRmMzJiZSIsXy5wcm90b3R5cGUuZW5jb2Rlcj1nLF8ucHJvdG90eXBlLmRlY29kZXI9QixnLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtmb3IodmFyIE49SS5mcm9tKHosInVjczIiKSxMPUkuYWxsb2MoMipOLmxlbmd0''@;'; put 'put ''aCksSz10aGlzLmlzTEU/TC53cml0ZVVJbnQzMkxFOkwud3JpdGVVSW50MzJCRSxVPTAsVz0wO1c8Ti5sZW5ndGg7Vys9Mil7dmFyIFk9Ti5yZWFkVUludDE2TEUoVykscT01NTI5Njw9WSYmWTw1NjMyMDtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe2lmKCFxJiY1NjMyMDw9WSYmWTw1NzM0NCl7''@;'; put 'put ''Sy5jYWxsKEwsNjU1MzYrKHRoaXMuaGlnaFN1cnJvZ2F0ZS01NTI5Njw8MTB8WS01NjMyMCksVSksVSs9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MDtjb250aW51ZX1LLmNhbGwoTCx0aGlzLmhpZ2hTdXJyb2dhdGUsVSksVSs9NH1xP3RoaXMuaGlnaFN1cnJvZ2F0ZT1ZOihLLmNhbGwoTCxZLFUp''@;'; put 'put ''LFUrPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTApfXJldHVybiBVPEwubGVuZ3RoJiYoTD1MLnNsaWNlKDAsVSkpLEx9LGcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7dmFyIHo9SS5hbGxvYyg0KTtyZXR1cm4gdGhpcy5pc0xFP3oud3JpdGVVSW50MzJM''@;'; put 'put ''RSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCk6ei53cml0ZVVJbnQzMkJFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKSx0aGlzLmhpZ2hTdXJyb2dhdGU9MCx6fX0sQi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7aWYoMD09PXoubGVuZ3RoKXJldHVybiIiO3RoaXMub3ZlcmZsb3cmJih6PUkuY29u''@;'; put 'put ''Y2F0KFt0aGlzLm92ZXJmbG93LHpdKSk7dmFyIE49ei5sZW5ndGgtei5sZW5ndGglNDt6Lmxlbmd0aCE9PU4/KHRoaXMub3ZlcmZsb3c9ei5zbGljZShOKSx6PXouc2xpY2UoMCxOKSk6dGhpcy5vdmVyZmxvdz1udWxsO2Zvcih2YXIgTD1JLmFsbG9jKE4pLEs9MCxVPTA7VTxOO1UrPTQpe3Zh''@;'; put 'put ''ciBXPXRoaXMuaXNMRT96LnJlYWRVSW50MzJMRShVKTp6LnJlYWRVSW50MzJCRShVKTtpZihXPDY1NTM2KUwud3JpdGVVSW50MTZMRShXLEspLEsrPTI7ZWxzZSBpZihXPjExMTQxMTEpTC53cml0ZVVJbnQxNkxFKHRoaXMuYmFkQ2hhcixLKSxLKz0yO2Vsc2V7dmFyIHE9NTYzMjArKDEwMjMm''@;'; put 'put ''KFctPTY1NTM2KSk7TC53cml0ZVVJbnQxNkxFKDU1Mjk2fFc+PjEwLEspLEwud3JpdGVVSW50MTZMRShxLEsrPTIpLEsrPTJ9fXJldHVybiBMLnNsaWNlKDAsSykudG9TdHJpbmcoInVjczIiKX0sQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5vdmVyZmxvdz1udWxsfSxYLnV0ZjMy''@;'; put 'put ''PXcsWC51Y3M0PXcsdy5wcm90b3R5cGUuZW5jb2Rlcj1QLHcucHJvdG90eXBlLmRlY29kZXI9RixQLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHopfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVu''@;'; put 'put ''ZCgpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKHopLHRoaXMuaW5pdGlhbEJ5dGVzTGVuKz16Lmxlbmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwzMilyZXR1cm4iIjt2YXIgTD1PKEkuY29uY2F0KHRo''@;'; put 'put ''aXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEwsdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVy''@;'; put 'put ''LndyaXRlKHopfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgej1JLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksTj1PKHosdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihOLHRo''@;'; put 'put ''aXMub3B0aW9ucyk7dmFyIEw9dGhpcy5kZWNvZGVyLndyaXRlKHopLEs9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBLP0wrSzpMfXJldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw5NzQ3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBf''@;'; put 'put ''KHEsZWUpe3RoaXMuaWNvbnY9ZWV9WC51dGY3PV8sWC51bmljb2RlMTF1dGY3PSJ1dGY3IixfLnByb3RvdHlwZS5lbmNvZGVyPUIsXy5wcm90b3R5cGUuZGVjb2Rlcj13LF8ucHJvdG90eXBlLmJvbUF3YXJlPSEwO3ZhciBnPS9bXkEtWmEtejAtOSdcKFwpLC1cLlwvOlw/IFxuXHJcdF0rL2c7''@;'; put 'put ''ZnVuY3Rpb24gQihxLGVlKXt0aGlzLmljb252PWVlLmljb252fWZ1bmN0aW9uIHcocSxlZSl7dGhpcy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9Qi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7cmV0dXJuIEkuZnJvbShxLnJlcGxhY2Uo''@;'; put 'put ''ZyxmdW5jdGlvbihlZSl7cmV0dXJuIisiKygiKyI9PT1lZT8iIjp0aGlzLmljb252LmVuY29kZShlZSwidXRmMTYtYmUiKS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvPSskLywiIikpKyItIn0uYmluZCh0aGlzKSkpfSxCLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9O2Zvcih2YXIg''@;'; put 'put ''UD0vW0EtWmEtejAtOVwvK10vLEY9W10sTz0wO088MjU2O08rKylGW09dPVAudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKE8pKTt2YXIgTj00NTtmdW5jdGlvbiBLKHEsZWUpe3RoaXMuaWNvbnY9ZWV9ZnVuY3Rpb24gVShxLGVlKXt0aGlzLmljb252PWVlLmljb252LHRoaXMuaW5CYXNlNjQ9''@;'; put 'put ''ITEsdGhpcy5iYXNlNjRBY2N1bT1JLmFsbG9jKDYpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MH1mdW5jdGlvbiBXKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIifXcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIg''@;'; put 'put ''ZWU9IiIsSj0wLG5lPXRoaXMuaW5CYXNlNjQsaWU9dGhpcy5iYXNlNjRBY2N1bSxsZT0wO2xlPHEubGVuZ3RoO2xlKyspaWYobmUpe2lmKCFGW3FbbGVdXSl7aWYobGU9PUomJnFbbGVdPT1OKWVlKz0iKyI7ZWxzZXt2YXIgbWU9aWUrcS5zbGljZShKLGxlKS50b1N0cmluZygpO2VlKz10aGlz''@;'; put 'put ''Lmljb252LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXFbbGVdIT1OJiZsZS0tLEo9bGUrMSxuZT0hMSxpZT0iIn19ZWxzZSA0Mz09cVtsZV0mJihlZSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGljZShKLGxlKSwiYXNjaWkiKSxKPWxlKzEsbmU9ITApO2lmKG5lKXt2''@;'; put 'put ''YXIgX2U9KG1lPWllK3Euc2xpY2UoSikudG9TdHJpbmcoKSkubGVuZ3RoLW1lLmxlbmd0aCU4O2llPW1lLnNsaWNlKF9lKSxtZT1tZS5zbGljZSgwLF9lKSxlZSs9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKG1lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIGVlKz10aGlzLmljb252LmRl''@;'; put 'put ''Y29kZShxLnNsaWNlKEopLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PW5lLHRoaXMuYmFzZTY0QWNjdW09aWUsZWV9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYocT10aGlz''@;'; put 'put ''Lmljb252LmRlY29kZShJLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixxfSxYLnV0ZjdpbWFwPUssSy5wcm90b3R5cGUuZW5jb2Rlcj1VLEsucHJvdG90eXBlLmRlY29kZXI9VyxLLnByb3Rv''@;'; put 'put ''dHlwZS5ib21Bd2FyZT0hMCxVLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXRoaXMuaW5CYXNlNjQsSj10aGlzLmJhc2U2NEFjY3VtLG5lPXRoaXMuYmFzZTY0QWNjdW1JZHgsaWU9SS5hbGxvYyg1KnEubGVuZ3RoKzEwKSxsZT0wLG1lPTA7bWU8cS5sZW5ndGg7bWUr''@;'; put 'put ''Kyl7dmFyIF9lPXEuY2hhckNvZGVBdChtZSk7MzI8PV9lJiZfZTw9MTI2PyhlZSYmKG5lPjAmJihsZSs9aWUud3JpdGUoSi5zbGljZSgwLG5lKS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLnJlcGxhY2UoLz0rJC8sIiIpLGxlKSxuZT0wKSxpZVtsZSsrXT1OLGVlPSEx''@;'; put 'put ''KSxlZXx8KGllW2xlKytdPV9lLDM4PT09X2UmJihpZVtsZSsrXT1OKSkpOihlZXx8KGllW2xlKytdPTM4LGVlPSEwKSxlZSYmKEpbbmUrK109X2U+PjgsSltuZSsrXT0yNTUmX2UsbmU9PUoubGVuZ3RoJiYobGUrPWllLndyaXRlKEoudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2cs''@;'; put 'put ''IiwiKSxsZSksbmU9MCkpKX1yZXR1cm4gdGhpcy5pbkJhc2U2ND1lZSx0aGlzLmJhc2U2NEFjY3VtSWR4PW5lLGllLnNsaWNlKDAsbGUpfSxVLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgcT1JLmFsbG9jKDEwKSxlZT0wO3JldHVybiB0aGlzLmluQmFzZTY0JiYodGhpcy5iYXNlNjRB''@;'; put 'put ''Y2N1bUlkeD4wJiYoZWUrPXEud3JpdGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksZWUpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MCkscVtlZSsrXT1OLHRo''@;'; put 'put ''aXMuaW5CYXNlNjQ9ITEpLHEuc2xpY2UoMCxlZSl9O3ZhciBZPUYuc2xpY2UoKTtZWzQ0XT0hMCxXLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlPSIiLEo9MCxuZT10aGlzLmluQmFzZTY0LGllPXRoaXMuYmFzZTY0QWNjdW0sbGU9MDtsZTxxLmxlbmd0aDtsZSsrKWlm''@;'; put 'put ''KG5lKXtpZighWVtxW2xlXV0pe2lmKGxlPT1KJiZxW2xlXT09TillZSs9IiYiO2Vsc2V7dmFyIG1lPWllK3Euc2xpY2UoSixsZSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKTtlZSs9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKG1lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1xW2xlXSE9''@;'; put 'put ''TiYmbGUtLSxKPWxlKzEsbmU9ITEsaWU9IiJ9fWVsc2UgMzg9PXFbbGVdJiYoZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoSixsZSksImFzY2lpIiksSj1sZSsxLG5lPSEwKTtpZihuZSl7dmFyIF9lPShtZT1pZStxLnNsaWNlKEopLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIikp''@;'; put 'put ''Lmxlbmd0aC1tZS5sZW5ndGglODtpZT1tZS5zbGljZShfZSksbWU9bWUuc2xpY2UoMCxfZSksZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBlZSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGljZShKKSwiYXNjaWkiKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbkJhc2U2ND1uZSx0aGlzLmJhc2U2NEFjY3VtPWllLGVlfSxXLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgcT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKHE9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKHRoaXMuYmFzZTY0QWNj''@;'; put 'put ''dW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIscX19LDI5NDIyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQil7dGhpcy5lbmNvZGVyPWcsdGhpcy5hZGRCT009ITB9ZnVuY3Rpb24gXyhnLEIpe3RoaXMuZGVj''@;'; put 'put ''b2Rlcj1nLHRoaXMucGFzcz0hMSx0aGlzLm9wdGlvbnM9Qnx8e319WC5QcmVwZW5kQk9NPUksSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuYWRkQk9NJiYoZz0iXHVmZWZmIitnLHRoaXMuYWRkQk9NPSExKSx0aGlzLmVuY29kZXIud3JpdGUoZyl9LEkucHJvdG90''@;'; put 'put ''eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LFguU3RyaXBCT009XyxfLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihnKXt2YXIgQj10aGlzLmRlY29kZXIud3JpdGUoZyk7cmV0dXJuIHRoaXMucGFzc3x8IUJ8fCgiXHVmZWZmIj09PUJbMF0mJihCPUIuc2xp''@;'; put 'put ''Y2UoMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zdHJpcEJPTSYmdGhpcy5vcHRpb25zLnN0cmlwQk9NKCkpLHRoaXMucGFzcz0hMCksQn0sXy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDk0MjQ4Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoOTM4MDcpLkJ1ZmZlcixfPXkoMjk0MjIpLGc9dWUuZXhwb3J0cztnLmVuY29kaW5ncz1udWxsLGcuZGVmYXVsdENoYXJVbmljb2RlPSJcdWZmZmQiLGcuZGVmYXVsdENoYXJTaW5nbGVCeXRlPSI/IixnLmVuY29kZT1mdW5jdGlvbihGLE8seil7Rj0iIisoRnx8''@;'; put 'put ''IiIpO3ZhciBOPWcuZ2V0RW5jb2RlcihPLHopLEw9Ti53cml0ZShGKSxLPU4uZW5kKCk7cmV0dXJuIEsmJksubGVuZ3RoPjA/SS5jb25jYXQoW0wsS10pOkx9LGcuZGVjb2RlPWZ1bmN0aW9uKEYsTyx6KXsic3RyaW5nIj09dHlwZW9mIEYmJihnLnNraXBEZWNvZGVXYXJuaW5nfHwoY29uc29s''@;'; put 'put ''ZS5lcnJvcigiSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZyIpLGcuc2tpcERlY29kZVdhcm5p''@;'; put 'put ''bmc9ITApLEY9SS5mcm9tKCIiKyhGfHwiIiksImJpbmFyeSIpKTt2YXIgTj1nLmdldERlY29kZXIoTyx6KSxMPU4ud3JpdGUoRiksSz1OLmVuZCgpO3JldHVybiBLP0wrSzpMfSxnLmVuY29kaW5nRXhpc3RzPWZ1bmN0aW9uKEYpe3RyeXtyZXR1cm4gZy5nZXRDb2RlYyhGKSwhMH1jYXRjaHty''@;'; put 'put ''ZXR1cm4hMX19LGcudG9FbmNvZGluZz1nLmVuY29kZSxnLmZyb21FbmNvZGluZz1nLmRlY29kZSxnLl9jb2RlY0RhdGFDYWNoZT17fSxnLmdldENvZGVjPWZ1bmN0aW9uKEYpe2cuZW5jb2RpbmdzfHwoZy5lbmNvZGluZ3M9eSg3Mjg5MykpO2Zvcih2YXIgTz1nLl9jYW5vbmljYWxpemVFbmNv''@;'; put 'put ''ZGluZyhGKSx6PXt9Ozspe3ZhciBOPWcuX2NvZGVjRGF0YUNhY2hlW09dO2lmKE4pcmV0dXJuIE47dmFyIEw9Zy5lbmNvZGluZ3NbT107c3dpdGNoKHR5cGVvZiBMKXtjYXNlInN0cmluZyI6Tz1MO2JyZWFrO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIEsgaW4gTCl6W0tdPUxbS107ei5lbmNvZGlu''@;'; put 'put ''Z05hbWV8fCh6LmVuY29kaW5nTmFtZT1PKSxPPUwudHlwZTticmVhaztjYXNlImZ1bmN0aW9uIjpyZXR1cm4gei5lbmNvZGluZ05hbWV8fCh6LmVuY29kaW5nTmFtZT1PKSxOPW5ldyBMKHosZyksZy5fY29kZWNEYXRhQ2FjaGVbei5lbmNvZGluZ05hbWVdPU4sTjtkZWZhdWx0OnRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICciK0YrIicgKHNlYXJjaGVkIGFzOiAnIitPKyInKSIpfX19LGcuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nPWZ1bmN0aW9uKFApe3JldHVybigiIitQKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcZHs0fSR8W14wLTlhLXpdL2csIiIp''@;'; put 'put ''fSxnLmdldEVuY29kZXI9ZnVuY3Rpb24oRixPKXt2YXIgej1nLmdldENvZGVjKEYpLE49bmV3IHouZW5jb2RlcihPLHopO3JldHVybiB6LmJvbUF3YXJlJiZPJiZPLmFkZEJPTSYmKE49bmV3IF8uUHJlcGVuZEJPTShOLE8pKSxOfSxnLmdldERlY29kZXI9ZnVuY3Rpb24oRixPKXt2YXIgej1n''@;'; put 'put ''LmdldENvZGVjKEYpLE49bmV3IHouZGVjb2RlcihPLHopO3JldHVybiB6LmJvbUF3YXJlJiYhKE8mJiExPT09Ty5zdHJpcEJPTSkmJihOPW5ldyBfLlN0cmlwQk9NKE4sTykpLE59O3ZhciBCPXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy52ZXJzaW9ucyYmcHJvY2Vzcy52ZXJzaW9ucy5u''@;'; put 'put ''b2RlO2lmKEIpe3ZhciB3PUIuc3BsaXQoIi4iKS5tYXAoTnVtYmVyKTsod1swXT4wfHx3WzFdPj0xMCkmJnkoNjEwOTMpKGcpLHkoMTU3OTEpKGcpfX0sMjIwMjA6KHVlLFgpPT57WC5yZWFkPWZ1bmN0aW9uKHksSSxfLGcsQil7dmFyIHcsUCxGPTgqQi1nLTEsTz0oMTw8RiktMSx6PU8+PjEs''@;'; put 'put ''Tj0tNyxMPV8/Qi0xOjAsSz1fPy0xOjEsVT15W0krTF07Zm9yKEwrPUssdz1VJigxPDwtTiktMSxVPj49LU4sTis9RjtOPjA7dz0yNTYqdyt5W0krTF0sTCs9SyxOLT04KTtmb3IoUD13JigxPDwtTiktMSx3Pj49LU4sTis9ZztOPjA7UD0yNTYqUCt5W0krTF0sTCs9SyxOLT04KTtpZigwPT09''@;'; put 'put ''dyl3PTEtejtlbHNle2lmKHc9PT1PKXJldHVybiBQP05hTjoxLzAqKFU/LTE6MSk7UCs9TWF0aC5wb3coMixnKSx3LT16fXJldHVybihVPy0xOjEpKlAqTWF0aC5wb3coMix3LWcpfSxYLndyaXRlPWZ1bmN0aW9uKHksSSxfLGcsQix3KXt2YXIgUCxGLE8sej04KnctQi0xLE49KDE8PHopLTEs''@;'; put 'put ''TD1OPj4xLEs9MjM9PT1CP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxVPWc/MDp3LTEsVz1nPzE6LTEsWT1JPDB8fDA9PT1JJiYxL0k8MD8xOjA7Zm9yKEk9TWF0aC5hYnMoSSksaXNOYU4oSSl8fEk9PT0xLzA/KEY9aXNOYU4oSSk/MTowLFA9Tik6KFA9TWF0aC5mbG9vcihN''@;'; put 'put ''YXRoLmxvZyhJKS9NYXRoLkxOMiksSSooTz1NYXRoLnBvdygyLC1QKSk8MSYmKFAtLSxPKj0yKSwoSSs9UCtMPj0xP0svTzpLKk1hdGgucG93KDIsMS1MKSkqTz49MiYmKFArKyxPLz0yKSxQK0w+PU4/KEY9MCxQPU4pOlArTD49MT8oRj0oSSpPLTEpKk1hdGgucG93KDIsQiksUCs9TCk6KEY9''@;'; put 'put ''SSpNYXRoLnBvdygyLEwtMSkqTWF0aC5wb3coMixCKSxQPTApKTtCPj04O3lbXytVXT0yNTUmRixVKz1XLEYvPTI1NixCLT04KTtmb3IoUD1QPDxCfEYseis9Qjt6PjA7eVtfK1VdPTI1NSZQLFUrPVcsUC89MjU2LHotPTgpO3lbXytVLVddfD0xMjgqWX19LDcxOTkzOnVlPT57dWUuZXhwb3J0''@;'; put 'put ''cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih5LEkpe0kmJih5LnN1cGVyXz1JLHkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp5LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''fX0pKX06ZnVuY3Rpb24oeSxJKXtpZihJKXt5LnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnByb3RvdHlwZSx5LnByb3RvdHlwZT1uZXcgXyx5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj15fX19LDIwMDUzOnVlPT57dmFyIFg9e30udG9TdHJpbmc7dWUuZXhwb3J0''@;'; put 'put ''cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih5KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1YLmNhbGwoeSl9fSwzNDcyNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDcxOTkzKSxfPXkoMTM2ODYpLGc9eSgyNzA1NCkuQnVmZmVyLEI9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiB3''@;'; put 'put ''KCl7Xy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIFAoTCxLKXtyZXR1cm4gTDw8S3xMPj4+MzItS31mdW5jdGlvbiBGKEwsSyxVLFcsWSxxLGVlKXtyZXR1cm4g''@;'; put 'put ''UChMKyhLJlV8fksmVykrWStxfDAsZWUpK0t8MH1mdW5jdGlvbiBPKEwsSyxVLFcsWSxxLGVlKXtyZXR1cm4gUChMKyhLJld8VSZ+VykrWStxfDAsZWUpK0t8MH1mdW5jdGlvbiB6KEwsSyxVLFcsWSxxLGVlKXtyZXR1cm4gUChMKyhLXlVeVykrWStxfDAsZWUpK0t8MH1mdW5jdGlvbiBOKEws''@;'; put 'put ''SyxVLFcsWSxxLGVlKXtyZXR1cm4gUChMKyhVXihLfH5XKSkrWStxfDAsZWUpK0t8MH1JKHcsXyksdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgTD1CLEs9MDtLPDE2OysrSylMW0tdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqSyk7dmFyIFU9dGhpcy5fYSxXPXRo''@;'; put 'put ''aXMuX2IsWT10aGlzLl9jLHE9dGhpcy5fZDtVPUYoVSxXLFkscSxMWzBdLDM2MTQwOTAzNjAsNykscT1GKHEsVSxXLFksTFsxXSwzOTA1NDAyNzEwLDEyKSxZPUYoWSxxLFUsVyxMWzJdLDYwNjEwNTgxOSwxNyksVz1GKFcsWSxxLFUsTFszXSwzMjUwNDQxOTY2LDIyKSxVPUYoVSxXLFkscSxM''@;'; put 'put ''WzRdLDQxMTg1NDgzOTksNykscT1GKHEsVSxXLFksTFs1XSwxMjAwMDgwNDI2LDEyKSxZPUYoWSxxLFUsVyxMWzZdLDI4MjE3MzU5NTUsMTcpLFc9RihXLFkscSxVLExbN10sNDI0OTI2MTMxMywyMiksVT1GKFUsVyxZLHEsTFs4XSwxNzcwMDM1NDE2LDcpLHE9RihxLFUsVyxZLExbOV0sMjMz''@;'; put 'put ''NjU1Mjg3OSwxMiksWT1GKFkscSxVLFcsTFsxMF0sNDI5NDkyNTIzMywxNyksVz1GKFcsWSxxLFUsTFsxMV0sMjMwNDU2MzEzNCwyMiksVT1GKFUsVyxZLHEsTFsxMl0sMTgwNDYwMzY4Miw3KSxxPUYocSxVLFcsWSxMWzEzXSw0MjU0NjI2MTk1LDEyKSxZPUYoWSxxLFUsVyxMWzE0XSwyNzky''@;'; put 'put ''OTY1MDA2LDE3KSxVPU8oVSxXPUYoVyxZLHEsVSxMWzE1XSwxMjM2NTM1MzI5LDIyKSxZLHEsTFsxXSw0MTI5MTcwNzg2LDUpLHE9TyhxLFUsVyxZLExbNl0sMzIyNTQ2NTY2NCw5KSxZPU8oWSxxLFUsVyxMWzExXSw2NDM3MTc3MTMsMTQpLFc9TyhXLFkscSxVLExbMF0sMzkyMTA2OTk5NCwy''@;'; put 'put ''MCksVT1PKFUsVyxZLHEsTFs1XSwzNTkzNDA4NjA1LDUpLHE9TyhxLFUsVyxZLExbMTBdLDM4MDE2MDgzLDkpLFk9TyhZLHEsVSxXLExbMTVdLDM2MzQ0ODg5NjEsMTQpLFc9TyhXLFkscSxVLExbNF0sMzg4OTQyOTQ0OCwyMCksVT1PKFUsVyxZLHEsTFs5XSw1Njg0NDY0MzgsNSkscT1PKHEs''@;'; put 'put ''VSxXLFksTFsxNF0sMzI3NTE2MzYwNiw5KSxZPU8oWSxxLFUsVyxMWzNdLDQxMDc2MDMzMzUsMTQpLFc9TyhXLFkscSxVLExbOF0sMTE2MzUzMTUwMSwyMCksVT1PKFUsVyxZLHEsTFsxM10sMjg1MDI4NTgyOSw1KSxxPU8ocSxVLFcsWSxMWzJdLDQyNDM1NjM1MTIsOSksWT1PKFkscSxVLFcs''@;'; put 'put ''TFs3XSwxNzM1MzI4NDczLDE0KSxVPXooVSxXPU8oVyxZLHEsVSxMWzEyXSwyMzY4MzU5NTYyLDIwKSxZLHEsTFs1XSw0Mjk0NTg4NzM4LDQpLHE9eihxLFUsVyxZLExbOF0sMjI3MjM5MjgzMywxMSksWT16KFkscSxVLFcsTFsxMV0sMTgzOTAzMDU2MiwxNiksVz16KFcsWSxxLFUsTFsxNF0s''@;'; put 'put ''NDI1OTY1Nzc0MCwyMyksVT16KFUsVyxZLHEsTFsxXSwyNzYzOTc1MjM2LDQpLHE9eihxLFUsVyxZLExbNF0sMTI3Mjg5MzM1MywxMSksWT16KFkscSxVLFcsTFs3XSw0MTM5NDY5NjY0LDE2KSxXPXooVyxZLHEsVSxMWzEwXSwzMjAwMjM2NjU2LDIzKSxVPXooVSxXLFkscSxMWzEzXSw2ODEy''@;'; put 'put ''NzkxNzQsNCkscT16KHEsVSxXLFksTFswXSwzOTM2NDMwMDc0LDExKSxZPXooWSxxLFUsVyxMWzNdLDM1NzI0NDUzMTcsMTYpLFc9eihXLFkscSxVLExbNl0sNzYwMjkxODksMjMpLFU9eihVLFcsWSxxLExbOV0sMzY1NDYwMjgwOSw0KSxxPXoocSxVLFcsWSxMWzEyXSwzODczMTUxNDYxLDEx''@;'; put 'put ''KSxZPXooWSxxLFUsVyxMWzE1XSw1MzA3NDI1MjAsMTYpLFU9TihVLFc9eihXLFkscSxVLExbMl0sMzI5OTYyODY0NSwyMyksWSxxLExbMF0sNDA5NjMzNjQ1Miw2KSxxPU4ocSxVLFcsWSxMWzddLDExMjY4OTE0MTUsMTApLFk9TihZLHEsVSxXLExbMTRdLDI4Nzg2MTIzOTEsMTUpLFc9TihX''@;'; put 'put ''LFkscSxVLExbNV0sNDIzNzUzMzI0MSwyMSksVT1OKFUsVyxZLHEsTFsxMl0sMTcwMDQ4NTU3MSw2KSxxPU4ocSxVLFcsWSxMWzNdLDIzOTk5ODA2OTAsMTApLFk9TihZLHEsVSxXLExbMTBdLDQyOTM5MTU3NzMsMTUpLFc9TihXLFkscSxVLExbMV0sMjI0MDA0NDQ5NywyMSksVT1OKFUsVyxZ''@;'; put 'put ''LHEsTFs4XSwxODczMzEzMzU5LDYpLHE9TihxLFUsVyxZLExbMTVdLDQyNjQzNTU1NTIsMTApLFk9TihZLHEsVSxXLExbNl0sMjczNDc2ODkxNiwxNSksVz1OKFcsWSxxLFUsTFsxM10sMTMwOTE1MTY0OSwyMSksVT1OKFUsVyxZLHEsTFs0XSw0MTQ5NDQ0MjI2LDYpLHE9TihxLFUsVyxZLExb''@;'; put 'put ''MTFdLDMxNzQ3NTY5MTcsMTApLFk9TihZLHEsVSxXLExbMl0sNzE4Nzg3MjU5LDE1KSxXPU4oVyxZLHEsVSxMWzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStVfDAsdGhpcy5fYj10aGlzLl9iK1d8MCx0aGlzLl9jPXRoaXMuX2MrWXwwLHRoaXMuX2Q9dGhpcy5fZCtxfDB9LHcu''@;'; put 'put ''cHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTAp''@;'; put 'put ''LHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgTD1nLmFsbG9jVW5z''@;'; put 'put ''YWZlKDE2KTtyZXR1cm4gTC53cml0ZUludDMyTEUodGhpcy5fYSwwKSxMLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksTC53cml0ZUludDMyTEUodGhpcy5fZCwxMiksTH0sdWUuZXhwb3J0cz13fSw1MzQ1OToodWUsWCx5KT0+e3ZhciBJPXkoNTcy''@;'; put 'put ''MjMpLF89eSgzNTI5NCk7ZnVuY3Rpb24gZyhCKXt0aGlzLnJhbmQ9Qnx8bmV3IF8uUmFuZH11ZS5leHBvcnRzPWcsZy5jcmVhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyBnKHcpfSxnLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKHcpe3ZhciBQPXcuYml0TGVuZ3RoKCksRj1NYXRo''@;'; put 'put ''LmNlaWwoUC84KTtkb3t2YXIgTz1uZXcgSSh0aGlzLnJhbmQuZ2VuZXJhdGUoRikpfXdoaWxlKE8uY21wKHcpPj0wKTtyZXR1cm4gT30sZy5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbih3LFApe3ZhciBGPVAuc3ViKHcpO3JldHVybiB3LmFkZCh0aGlzLl9yYW5kYmVsb3coRikpfSxn''@;'; put 'put ''LnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHcsUCxGKXt2YXIgTz13LmJpdExlbmd0aCgpLHo9SS5tb250KHcpLE49bmV3IEkoMSkudG9SZWQoeik7UHx8KFA9TWF0aC5tYXgoMSxPLzQ4fDApKTtmb3IodmFyIEw9dy5zdWJuKDEpLEs9MDshTC50ZXN0bihLKTtLKyspO2Zvcih2YXIgVT13LnNo''@;'; put 'put ''cm4oSyksVz1MLnRvUmVkKHopO1A+MDtQLS0pe3ZhciBxPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxMKTtGJiZGKHEpO3ZhciBlZT1xLnRvUmVkKHopLnJlZFBvdyhVKTtpZigwIT09ZWUuY21wKE4pJiYwIT09ZWUuY21wKFcpKXtmb3IodmFyIEo9MTtKPEs7SisrKXtpZigwPT09KGVlPWVl''@;'; put 'put ''LnJlZFNxcigpKS5jbXAoTikpcmV0dXJuITE7aWYoMD09PWVlLmNtcChXKSlicmVha31pZihKPT09SylyZXR1cm4hMX19cmV0dXJuITB9LGcucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odyxQKXt2YXIgRj13LmJpdExlbmd0aCgpLE89SS5tb250KHcpLHo9bmV3IEkoMSkudG9SZWQo''@;'; put 'put ''Tyk7UHx8KFA9TWF0aC5tYXgoMSxGLzQ4fDApKTtmb3IodmFyIE49dy5zdWJuKDEpLEw9MDshTi50ZXN0bihMKTtMKyspO2Zvcih2YXIgSz13LnNocm4oTCksVT1OLnRvUmVkKE8pO1A+MDtQLS0pe3ZhciBXPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxOKSxZPXcuZ2NkKFcpO2lmKDAhPT1Z''@;'; put 'put ''LmNtcG4oMSkpcmV0dXJuIFk7dmFyIHE9Vy50b1JlZChPKS5yZWRQb3coSyk7aWYoMCE9PXEuY21wKHopJiYwIT09cS5jbXAoVSkpe2Zvcih2YXIgZWU9MTtlZTxMO2VlKyspe2lmKDA9PT0ocT1xLnJlZFNxcigpKS5jbXAoeikpcmV0dXJuIHEuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpO2lm''@;'; put 'put ''KDA9PT1xLmNtcChVKSlicmVha31pZihlZT09PUwpcmV0dXJuKHE9cS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpfX1yZXR1cm4hMX19LDU3MjIzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxi''@;'; put 'put ''KXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQ''@;'; put 'put ''OyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOnkoNjQ2ODgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3Zh''@;'; put 'put ''ciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIg''@;'; put 'put ''Qz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9''@;'; put 'put ''LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0o''@;'; put 'put ''MHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUi''@;'; put 'put ''PT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpw''@;'; put 'put ''PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxl''@;'; put 'put ''Ij09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRo''@;'; put 'put ''aXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49''@;'; put 'put ''MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0Mr''@;'; put 'put ''PTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAu''@;'; put 'put ''bGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8''@;'; put 'put ''PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9''@;'; put 'put ''MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29y''@;'; put 'put ''ZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKWFlKj1iO3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytd''@;'; put 'put ''PTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49''@;'; put 'put ''WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAs''@;'; put 'put ''MzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0''@;'; put 'put ''MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5u''@;'; put 'put ''ZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9y''@;'; put 'put ''KHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2''@;'; put 'put ''MyZIO2Iud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2''@;'; put 'put ''YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1F''@;'; put 'put ''Lmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBh''@;'; put 'put ''ZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIHRlPWFlLm1vZG4oQSkudG9TdHJpbmcocCk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVu''@;'; put 'put ''Z3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMu''@;'; put 'put ''bGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0''@;'; put 'put ''byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlr''@;'; put 'put ''ZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2co''@;'; put 'put ''Qzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8o''@;'; put 'put ''KTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCks''@;'; put 'put ''Yj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZi''@;'; put 'put ''fHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0''@;'; put 'put ''aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlz''@;'; put 'put ''Lmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkp''@;'; put 'put ''LHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hd''@;'; put 'put ''JnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQo''@;'; put 'put ''dGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09''@;'; put 'put ''Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhv''@;'; put 'put ''cihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBD''@;'; put 'put ''PTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNb''@;'; put 'put ''eF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0w''@;'; put 'put ''LEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+''@;'; put 'put ''MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhp''@;'; put 'put ''cyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHAp''@;'; put 'put ''O3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pd''@;'; put 'put ''PTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tq''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLHRlPTgxOTEmYWUsc2U9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLGplPTgxOTEmWGUsRGU9''@;'; put 'put ''WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsUWU9X3Q+Pj4xMyx1bj0wfENbN10seXQ9ODE5MSZ1bixNdD11bj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+''@;'; put 'put ''MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLHNpPTB8VFsxXSxRdD04MTkxJnNpLHNuPXNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJu''@;'; put 'put ''PTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLGNuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRb''@;'; put 'put ''OV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9''@;'; put 'put ''KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBFaT0oaisoRT1FK01hdGguaW11bCh0''@;'; put 'put ''ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHZyPShqKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHRlLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLFJ0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2UsV3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHRlLFV0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUs''@;'; put 'put ''UnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXww''@;'; put 'put ''KStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDA7dmFyIGVpPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoamUsV3QpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQs''@;'; put 'put ''UnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''c2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFd0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIE5pPShqKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZm4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxobil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''UWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxX''@;'; put 'put ''ZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBEYT0oaisoRT1FK01hdGguaW11bCh0''@;'; put 'put ''ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxX''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsV3QpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGhuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoRGUsZm4pfDA7dmFyIFdpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAs''@;'; put 'put ''V2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFd0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoQWUsZm4pfDA7dmFyIFFuPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAs''@;'; put 'put ''UW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxybil8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwobnQsY24pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIGxhPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LGZuKXwwO3ZhciB5YT0oaisoRT1FK01hdGguaW11bChu''@;'; put 'put ''dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyh5YT4+PjI2KXwwLHlhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxybiksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShqKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNu''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChIZSxmbikpK01hdGguaW11bCh1dCxjbil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBq''@;'; put 'put ''PSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsSFswXT11YSxIWzFdPUVpLEhbMl09dnIsSFszXT1XbixIWzRdPSRpLEhbNV09ZWksSFs2XT1RcixIWzddPVZpLEhbOF09TmksSFs5XT1EYSxIWzEwXT1McixIWzExXT1XaSxIWzEyXT1w''@;'; put 'put ''YSxIWzEzXT1RbixIWzE0XT1sYSxIWzE1XT15YSxIWzE2XT1MYSxIWzE3XT1GYSxIWzE4XT10aSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1w''@;'; put 'put ''fU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24g''@;'; put 'put ''cShWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSks''@;'; put 'put ''bT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9''@;'; put 'put ''NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnBy''@;'; put 'put ''b3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8''@;'; put 'put ''PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJt''@;'; put 'put ''dXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFthZSt3''@;'; put 'put ''ZV0sSmU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStqXSxNZT1DW2FlK3dlK2pdLHZlPXRlKm90LXNlKk1lO01lPXRlKk1lK3NlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09SmUrTWUseFthZSt3ZStqXT1VZS1vdCxDW2FlK3dlK2pdPUplLU1lLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxz''@;'; put 'put ''ZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihw''@;'; put 'put ''LGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9''@;'; put 'put ''MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7''@;'; put 'put ''Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFy''@;'; put 'put ''IGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJh''@;'; put 'put ''eShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3Jk''@;'; put 'put ''cyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qYWVbd2VdLEVb''@;'; put 'put ''d2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2Iu''@;'; put 'put ''bGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5l''@;'; put 'put ''dyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7''@;'; put 'put ''ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndv''@;'; put 'put ''cmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1wPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnBy''@;'; 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 ''bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5z''@;'; 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 ''bCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1h''@;'; put 'put ''c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlz''@;'; put 'put ''Lm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90''@;'; put 'put ''b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT15Lm5tZCh1ZSksdGhpcyl9LDM5MjEwOnVlPT57ZnVuY3Rpb24gWCh5LEkpe2lmKCF5KXRocm93IG5ldyBFcnJvcihJfHwiQXNz''@;'; put 'put ''ZXJ0aW9uIGZhaWxlZCIpfXVlLmV4cG9ydHM9WCxYLmVxdWFsPWZ1bmN0aW9uKEksXyxnKXtpZihJIT1fKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitJKyIgIT0gIitfKX19LDIxODMyOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1YO2Z1bmN0aW9uIF8oQil7''@;'; put 'put ''cmV0dXJuIDE9PT1CLmxlbmd0aD8iMCIrQjpCfWZ1bmN0aW9uIGcoQil7Zm9yKHZhciB3PSIiLFA9MDtQPEIubGVuZ3RoO1ArKyl3Kz1fKEJbUF0udG9TdHJpbmcoMTYpKTtyZXR1cm4gd315LnRvQXJyYXk9ZnVuY3Rpb24gSShCLHcpe2lmKEFycmF5LmlzQXJyYXkoQikpcmV0dXJuIEIuc2xp''@;'; put 'put ''Y2UoKTtpZighQilyZXR1cm5bXTt2YXIgUD1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEIpe2Zvcih2YXIgRj0wO0Y8Qi5sZW5ndGg7RisrKVBbRl09MHxCW0ZdO3JldHVybiBQfWlmKCJoZXgiPT09dylmb3IoKEI9Qi5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihC''@;'; put 'put ''PSIwIitCKSxGPTA7RjxCLmxlbmd0aDtGKz0yKVAucHVzaChwYXJzZUludChCW0ZdK0JbRisxXSwxNikpO2Vsc2UgZm9yKEY9MDtGPEIubGVuZ3RoO0YrKyl7dmFyIE89Qi5jaGFyQ29kZUF0KEYpLHo9Tz4+OCxOPTI1NSZPO3o/UC5wdXNoKHosTik6UC5wdXNoKE4pfXJldHVybiBQfSx5Lnpl''@;'; put 'put ''cm8yPV8seS50b0hleD1nLHkuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7cmV0dXJuImhleCI9PT1QP2codyk6d319LDExNTQ0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYWYiLHttb250aHM6IkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFy''@;'; put 'put ''dF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJT''@;'; put 'put ''b25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0RvbmRlcmRhZ19WcnlkYWdfU2F0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NYV9EaV9Xb19Eb19Wcl9TYSIuc3BsaXQo''@;'; put 'put ''Il8iKSxtZXJpZGllbVBhcnNlOi92bXxubS9pLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuL15ubSQvaS50ZXN0KGcpfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTI/dz8idm0iOiJWTSI6dz8ibm0iOiJOTSJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5leHREYXk6IltNXHhmNHJlIG9tXSBMVCIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQgW29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFhc10gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIsczoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29u''@;'; put 'put ''ZGVzIixtOiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVyZSIsZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVkIG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGcrKDE9PT1nfHw4PT09Z3x8Zz49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDUyMTU1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1mdW5j''@;'; put 'put ''dGlvbihGKXtyZXR1cm4gMD09PUY/MDoxPT09Rj8xOjI9PT1GPzI6RiUxMDA+PTMmJkYlMTAwPD0xMD8zOkYlMTAwPj0xMT80OjV9LGc9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0''@;'; put 'put ''NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1''@;'; put 'put ''MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1''@;'; put 'put ''MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy''@;'; put 'put ''OSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUw''@;'; put 'put ''NjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQg''@;'; put 'put ''XHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1''@;'; put 'put ''MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2''@;'; put 'put ''MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0''@;'; put 'put ''NSJdfSxCPWZ1bmN0aW9uKEYpe3JldHVybiBmdW5jdGlvbihPLHosTixMKXt2YXIgSz1fKE8pLFU9Z1tGXVtfKE8pXTtyZXR1cm4gMj09PUsmJihVPVVbej8wOjFdKSxVLnJlcGxhY2UoLyVkL2ksTyl9fSx3PVsiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhIiwiXHUwNjQxXHUwNjRh''@;'; put 'put ''XHUwNjQxXHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5''@;'; put 'put ''IiwiXHUwNjIzXHUwNjQ4XHUwNjJhIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1''@;'; put 'put ''XHUwNjI4XHUwNjMxIl07SS5kZWZpbmVMb2NhbGUoImFyLWR6Iix7bW9udGhzOncsbW9udGhzU2hvcnQ6dyx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJc''@;'; put 'put ''dTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1''@;'; put 'put ''MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihGKXtyZXR1cm4iXHUwNjQ1Ij09PUZ9LG1lcmlkaWVtOmZ1bmN0aW9uKEYsTyx6KXtyZXR1cm4gRjwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUg''@;'; put 'put ''XHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdl''@;'; put 'put ''ZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpCKCJz''@;'; put 'put ''Iiksc3M6QigicyIpLG06QigibSIpLG1tOkIoIm0iKSxoOkIoImgiKSxoaDpCKCJoIiksZDpCKCJkIiksZGQ6QigiZCIpLE06QigiTSIpLE1NOkIoIk0iKSx5OkIoInkiKSx5eTpCKCJ5Iil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0s''@;'; put 'put ''d2Vlazp7ZG93OjAsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTM1ODM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJhci1rdyIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1''@;'; put 'put ''MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYz''@;'; put 'put ''YVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2''@;'; put 'put ''XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2''@;'; put 'put ''MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYy''@;'; put 'put ''Ylx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2''@;'; put 'put ''MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0''@;'; put 'put ''NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6''@;'; put 'put ''Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNc''@;'; put 'put ''dTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MCxkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sNDE2Mzg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiIxIiwyOiIyIiwzOiIzIiw0OiI0''@;'; put 'put ''Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0sZz1mdW5jdGlvbihPKXtyZXR1cm4gMD09PU8/MDoxPT09Tz8xOjI9PT1PPzI6TyUxMDA+PTMmJk8lMTAwPD0xMD8zOk8lMTAwPj0xMT80OjV9LEI9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYy''@;'; put 'put ''Ylx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUw''@;'; put 'put ''NjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1''@;'; put 'put ''MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJh''@;'; put 'put ''XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYz''@;'; put 'put ''M1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0''@;'; put 'put ''NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVk''@;'; put 'put ''IFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0''@;'; put 'put ''XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0''@;'; put 'put ''NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1''@;'; put 'put ''MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSx3PWZ1bmN0aW9uKE8pe3JldHVybiBmdW5jdGlvbih6LE4sTCxLKXt2YXIgVT1nKHopLFc9QltPXVtnKHopXTtyZXR1cm4gMj09PVUmJihXPVdbTj8wOjFdKSxXLnJlcGxhY2UoLyVkL2kseil9fSxQPVsi''@;'; put 'put ''XHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4IiwiXHUwNjRh''@;'; put 'put ''XHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUw''@;'; put 'put ''NjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07SS5kZWZpbmVMb2NhbGUoImFyLWx5Iix7bW9udGhzOlAsbW9udGhzU2hvcnQ6UCx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJk''@;'; put 'put ''XHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''ZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZf''@;'; put 'put ''XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihPKXtyZXR1cm4iXHUwNjQ1Ij09PU99LG1lcmlkaWVtOmZ1bmN0aW9uKE8seixOKXtyZXR1cm4gTzwxMj8i''@;'; put 'put ''XHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2Mjcg''@;'; put 'put ''XHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYz''@;'; put 'put ''MyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczp3KCJzIiksc3M6dygicyIpLG06dygibSIpLG1tOncoIm0iKSxoOncoImgiKSxoaDp3KCJoIiksZDp3KCJkIiksZGQ6dygiZCIpLE06dygiTSIpLE1NOncoIk0iKSx5OncoInki''@;'; put 'put ''KSx5eTp3KCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbih6KXtyZXR1cm4gX1t6XX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdl''@;'; put 'put ''ZWs6e2Rvdzo2LGRveToxMn19KX0oeSg5NzU4NikpfSw4NzgyMzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLW1hIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUw''@;'; put 'put ''NjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNh''@;'; put 'put ''XHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZc''@;'; put 'put ''dTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYz''@;'; put 'put ''MV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJi''@;'; put 'put ''XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYy''@;'; put 'put ''YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1''@;'; put 'put ''XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQi''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoi''@;'; put 'put ''XHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy''@;'; put 'put ''OSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1''@;'; put 'put ''MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDc3MTI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoi''@;'; put 'put ''XHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxnPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2''@;'; put 'put ''IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJhci1wcyIse21vbnRoczoiXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YV9cdTA2MzRcdTA2''@;'; put 'put ''MjhcdTA2MjdcdTA2MzdfXHUwNjIyXHUwNjMwXHUwNjI3XHUwNjMxX1x1MDY0Nlx1MDY0YVx1MDYzM1x1MDYyN1x1MDY0Nl9cdTA2MjNcdTA2NGFcdTA2NTFcdTA2MjdcdTA2MzFfXHUwNjJkXHUwNjMyXHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2X1x1MDYyYVx1MDY0NVx1MDY1MVx1MDY0OFx1''@;'; put 'put ''MDYzMl9cdTA2MjJcdTA2MjhfXHUwNjIzXHUwNjRhXHUwNjQ0XHUwNjQ4XHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YSBcdTA2MjdcdTA2NDRcdTA2MjNcdTA2NDhcdTA2NTFcdTA2NDRfXHUwNjJhXHUwNjM0XHUwNjMxXHUwNjRhXHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyYlx1MDYy''@;'; put 'put ''N1x1MDY0Nlx1MDY0YV9cdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4XHUwNjUxXHUwNjQ0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NDNcdTA2NjJfXHUwNjM0XHUwNjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1''@;'; put 'put ''MDYzMV9cdTA2NDZcdTA2NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3XHUwNjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhcdTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0''@;'; put 'put ''NFx1MDY0OFx1MDY0NF9cdTA2MmFcdTA2NjFfXHUwNjJhXHUwNjYyX1x1MDY0M1x1MDY2MSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUw''@;'; put 'put ''NjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYy''@;'; put 'put ''N1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2Mzlc''@;'; put 'put ''dTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYz''@;'; put 'put ''OVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUw''@;'; put 'put ''NjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2''@;'; put 'put ''NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3''@;'; put 'put ''XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUw''@;'; put 'put ''NjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pLnNwbGl0KCIiKS5yZXZlcnNl''@;'; put 'put ''KCkuam9pbigiIikucmVwbGFjZSgvW1x1MDY2MVx1MDY2Ml0oPyFbXHUwNjJhXHUwNjQzXSkvZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4g''@;'; put 'put ''dy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sNzgyNjE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2NjEi''@;'; put 'put ''LDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxnPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6''@;'; put 'put ''IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1''@;'; put 'put ''MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYz''@;'; put 'put ''M1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFc''@;'; put 'put ''dTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYy''@;'; put 'put ''OFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2''@;'; put 'put ''XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''Y1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFf''@;'; put 'put ''XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJl''@;'; put 'put ''X1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUw''@;'; put 'put ''NjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1''@;'; put 'put ''MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAg''@;'; put 'put ''JXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2''@;'; put 'put ''MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJc''@;'; put 'put ''dTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1''@;'; put 'put ''bmN0aW9uKFApe3JldHVybiBnW1BdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9''@;'; put 'put ''KHkoOTc1ODYpKX0sNTY3MDM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJhci10biIse21vbnRoczoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2''@;'; put 'put ''MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFc''@;'; put 'put ''dTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDYyY1x1MDYy''@;'; put 'put ''N1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1''@;'; put 'put ''MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRh''@;'; put 'put ''XHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1''@;'; put 'put ''MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1''@;'; put 'put ''MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4''@;'; put 'put ''XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1''@;'; put 'put ''MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIl''@;'; put 'put ''ZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2''@;'; put 'put ''MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzMzEwODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMi''@;'; put 'put ''LDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2''@;'; put 'put ''NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sQj1mdW5jdGlvbih6KXtyZXR1cm4gMD09PXo/MDoxPT09ej8xOjI9PT16PzI6eiUxMDA+PTMmJnolMTAwPD0xMD8zOnolMTAwPj0xMT80OjV9LHc9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUw''@;'; put 'put ''NjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2''@;'; put 'put ''XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2''@;'; put 'put ''IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUw''@;'; put 'put ''NjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUw''@;'; put 'put ''NjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2''@;'; put 'put ''Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1''@;'; put 'put ''MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1''@;'; put 'put ''MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2''@;'; put 'put ''IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1''@;'; put 'put ''MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVk''@;'; put 'put ''IFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxQPWZ1bmN0aW9uKHope3JldHVybiBmdW5jdGlvbihOLEwsSyxVKXt2YXIgVz1CKE4pLFk9d1t6XVtCKE4pXTtyZXR1cm4gMj09PVcmJihZPVlbTD8wOjFdKSxZLnJlcGxhY2UoLyVkL2ks''@;'; put 'put ''Til9fSxGPVsiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4''@;'; put 'put ''IiwiXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4''@;'; put 'put ''XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07SS5kZWZpbmVMb2NhbGUoImFyIix7bW9udGhzOkYsbW9udGhzU2hvcnQ6Rix3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIz''@;'; put 'put ''XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih6KXtyZXR1cm4iXHUwNjQ1Ij09PXp9LG1lcmlkaWVtOmZ1bmN0aW9uKHosTixMKXtyZXR1cm4g''@;'; put 'put ''ejwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJc''@;'; put 'put ''dTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0''@;'; put 'put ''NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpQKCJzIiksc3M6UCgicyIpLG06UCgibSIpLG1tOlAoIm0iKSxoOlAoImgiKSxoaDpQKCJoIiksZDpQKCJkIiksZGQ6UCgiZCIpLE06UCgiTSIpLE1NOlAoIk0iKSx5''@;'; put 'put ''OlAoInkiKSx5eTpQKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKHope3JldHVybiB6LnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oTil7cmV0dXJuIGdbTl19KS5yZXBsYWNlKC9cdTA2MGMv''@;'; put 'put ''ZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHope3JldHVybiB6LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTil7cmV0dXJuIF9bTl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sNDY1MDg6ZnVuY3Rpb24odWUsWCx5KXshZnVu''@;'; put 'put ''Y3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiItaW5jaSIsNToiLWluY2kiLDg6Ii1pbmNpIiw3MDoiLWluY2kiLDgwOiItaW5jaSIsMjoiLW5jaSIsNzoiLW5jaSIsMjA6Ii1uY2kiLDUwOiItbmNpIiwzOiItXHhmY25jXHhmYyIsNDoiLVx4ZmNuY1x4ZmMiLDEwMDoiLVx4ZmNuY1x4''@;'; put 'put ''ZmMiLDY6Ii1uY1x1MDEzMSIsOToiLXVuY3UiLDEwOiItdW5jdSIsMzA6Ii11bmN1Iiw2MDoiLVx1MDEzMW5jXHUwMTMxIiw5MDoiLVx1MDEzMW5jXHUwMTMxIn07SS5kZWZpbmVMb2NhbGUoImF6Iix7bW9udGhzOiJ5YW52YXJfZmV2cmFsX21hcnRfYXByZWxfbWF5X2l5dW5faXl1bF9hdnF1''@;'; put 'put ''c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ5YW5fZmV2X21hcl9hcHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQmF6YXJfQmF6YXIgZXJ0XHUwMjU5c2lfXHhjN1x1MDI1OXJc''@;'; put 'put ''dTAxNWZcdTAyNTluYlx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTlfQ1x4ZmNtXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfQ1x4ZmNtXHUwMjU5X1x1MDE1ZVx1MDI1OW5iXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkJhel9C''@;'; put 'put ''ekVfXHhjN0F4X1x4YzdcdTAyNTlyX0NBeF9DXHhmY21fXHUwMTVlXHUwMjU5biIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQnpfQkVfXHhjN0FfXHhjN1x1MDI1OV9DQV9DXHhmY19cdTAxNWVcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJb''@;'; put 'put ''c2FiYWggc2FhdF0gTFQiLG5leHRXZWVrOiJbZ1x1MDI1OWxcdTAyNTluIGhcdTAyNTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltkXHhmY25cdTAyNTluXSBMVCIsbGFzdFdlZWs6IltrZVx4ZTdcdTAyNTluIGhcdTAyNTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBcdTAyNTl2dlx1MDI1OWwiLHM6ImJpciBuZVx4ZTdcdTAyNTkgc2FuaXlcdTAyNTkiLHNzOiIlZCBzYW5peVx1MDI1OSIsbToiYmlyIGRcdTAyNTlxaXFcdTAyNTkiLG1tOiIlZCBkXHUwMjU5cWlx''@;'; put 'put ''XHUwMjU5IixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgaWwiLHl5OiIlZCBpbCJ9LG1lcmlkaWVtUGFyc2U6L2dlY1x1MDI1OXxzXHUwMjU5aFx1MDI1OXJ8Z1x4ZmNuZFx4ZmN6fGF4''@;'; put 'put ''XHUwMTVmYW0vLGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuL14oZ1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0pJC8udGVzdChCKX0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDQ/ImdlY1x1MDI1OSI6QjwxMj8ic1x1MDI1OWhcdTAyNTlyIjpCPDE3PyJnXHhmY25kXHhmY3oiOiJh''@;'; put 'put ''eFx1MDE1ZmFtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwMTMxbmNcdTAxMzF8aW5jaXxuY2l8XHhmY25jXHhmY3xuY1x1MDEzMXx1bmN1KS8sb3JkaW5hbDpmdW5jdGlvbihCKXtpZigwPT09QilyZXR1cm4gQisiLVx1MDEzMW5jXHUwMTMxIjt2YXIgdz1CJTEwO3Jl''@;'; put 'put ''dHVybiBCKyhfW3ddfHxfW0IlMTAwLXddfHxfW0I+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSwxNjc2NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh3LFAsRil7cmV0dXJuIm0iPT09Rj9QPyJc''@;'; put 'put ''dTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NDMiOiJoIj09PUY/UD8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUw''@;'; put 'put ''NDM3XHUwNDU2XHUwNDNkXHUwNDQzIjp3KyIgIitmdW5jdGlvbiBfKHcsUCl7dmFyIEY9dy5zcGxpdCgiXyIpO3JldHVybiBQJTEwPT0xJiZQJTEwMCE9MTE/RlswXTpQJTEwPj0yJiZQJTEwPD00JiYoUCUxMDA8MTB8fFAlMTAwPj0yMCk/RlsxXTpGWzJdfSh7c3M6UD8iXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06UD8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9c''@;'; put 'put ''dTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCIsaGg6''@;'; put 'put ''UD8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2Rc''@;'; put 'put ''dTA0NDNfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDM3XHUwNDUxXHUwNDNk''@;'; put 'put ''IixNTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ0Yl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBcdTA0NWUiLHl5OiJcdTA0MzNcdTA0M2VcdTA0MzRfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDRi''@;'; put 'put ''X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzZVx1MDQ1ZSJ9W0ZdLCt3KX1JLmRlZmluZUxvY2FsZSgiYmUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF9c''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJc''@;'; put 'put ''dTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQw''@;'; put 'put ''XHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDQy''@;'; put 'put ''XHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQ0Yl9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQ0Mlx1MDQ0''@;'; put 'put ''MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0''@;'; put 'put ''MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0NDFcdTA0M2RcdTA0''@;'; put 'put ''MzVcdTA0MzZcdTA0MzBcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMy''@;'; put 'put ''X1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0NTZcdTA0M2ZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNiIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1''@;'; put 'put ''MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMi''@;'; put 'put ''LnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBc''@;'; put 'put ''dTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0MzBfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxp''@;'; put 'put ''dCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQyM1x1MDQ0M1x1MDQ1ZV0gPyg/Olx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZXxcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0NDNcdTA0NGUpPyA/XF0gP2RkZGQvfSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1''@;'; put 'put ''MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0''@;'; put 'put ''MzMuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQ1MVx1MDQzZFx1MDQzZFx1MDQ0ZiBcdTA0NWVdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDVlXHUwNDQyXHUwNDQwXHUwNDMwIFx1''@;'; put 'put ''MDQ1ZV0gTFQiLGxhc3REYXk6IltcdTA0MjNcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDQyM10gZGRkZCBbXHUwNDVlXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpj''@;'; put 'put ''YXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQgW1x1MDQ1ZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1''@;'; put 'put ''MDQ0Yl0gZGRkZCBbXHUwNDVlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0M2ZcdTA0NDBcdTA0MzBcdTA0MzcgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0MyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDNiXHUwNDRj''@;'; put 'put ''XHUwNDNhXHUwNDU2IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbTpnLG1tOmcsaDpnLGhoOmcsZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjIixkZDpnLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06Zyx5OiJcdTA0MzNcdTA0M2Vc''@;'; put 'put ''dTA0MzQiLHl5Omd9LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YnxcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGJ8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMC8saXNQTTpmdW5jdGlvbih3KXty''@;'; put 'put ''ZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwKSQvLnRlc3Qodyl9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGIiOnc8MTI/Ilx1MDQ0MFx1MDQzMFx1MDQzZFx1''@;'; put 'put ''MDQ1Nlx1MDQ0Nlx1MDQ0YiI6dzwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDU2fFx1MDQ0YnxcdTA0MzNcdTA0MzApLyxvcmRpbmFsOmZ1bmN0aW9uKHcs''@;'; put 'put ''UCl7c3dpdGNoKFApe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB3JTEwIT0yJiZ3JTEwIT0zfHx3JTEwMD09MTJ8fHclMTAwPT0xMz93KyItXHUwNDRiIjp3KyItXHUwNDU2IjtjYXNlIkQiOnJldHVybiB3KyItXHUwNDMzXHUwNDMwIjtkZWZhdWx0''@;'; put 'put ''OnJldHVybiB3fX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMjg1NjQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJiZyIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0''@;'; put 'put ''NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1''@;'; put 'put ''MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1''@;'; put 'put ''MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M19cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0''@;'; put 'put ''M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0NGZc''@;'; put 'put ''dTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDRhXHUwNDQwXHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0NDFcdTA0NGFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUw''@;'; put 'put ''NDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDRhXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0''@;'; put 'put ''MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixM''@;'; put 'put ''TEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMl0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQzMl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMw''@;'; put 'put ''XHUwNDNiXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzhcdTA0NGZdIGRkZGQgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0ICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzggJXMiLHM6Ilx1MDQzZFx1MDQ0Zlx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0''@;'; put 'put ''MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDQ3XHUwNDMwXHUw''@;'; put 'put ''NDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLHc6Ilx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzMCIsd3c6IiVkIFx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''NFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzOCIsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIix5OiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0''@;'; put 'put ''M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFy''@;'; put 'put ''IEI9ZyUxMCx3PWclMTAwO3JldHVybiAwPT09Zz9nKyItXHUwNDM1XHUwNDMyIjowPT09dz9nKyItXHUwNDM1XHUwNDNkIjp3PjEwJiZ3PDIwP2crIi1cdTA0NDJcdTA0MzgiOjE9PT1CP2crIi1cdTA0MzJcdTA0MzgiOjI9PT1CP2crIi1cdTA0NDBcdTA0MzgiOjc9PT1CfHw4PT09Qj9nKyIt''@;'; put 'put ''XHUwNDNjXHUwNDM4IjpnKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sOTc0NjI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJibSIse21vbnRoczoiWmFud3V5ZWthbG9fRmV3dXJ1eWVr''@;'; put 'put ''YWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTVx1MDI1YmthbG9fWnV3XHUwMjVibmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1NcdTAyNWJ0YW5idXJ1a2Fsb19cdTAyNTRrdXRcdTAyNTRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG8iLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilphbl9GZXdfTWFyX0F3aV9NXHUwMjViX1p1d19adWxfVXRpX1NcdTAyNWJ0X1x1MDI1NGt1X05vd19EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkthcmlfTnRcdTAyNWJuXHUwMjVibl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJLYXJfTnRcdTAyNWJfVGFyX0FyYV9BbGFfSnVtX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiS2FfTnRfVGFfQXJfQWxfSnVfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6Ik1NTU0gW3Rp''@;'; put 'put ''bGVdIEQgW3Nhbl0gWVlZWSIsTExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSIsTExMTDoiZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQmkgbFx1MDI1YnJc''@;'; put 'put ''dTAyNWJdIExUIixuZXh0RGF5OiJbU2luaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHRXZWVrOiJkZGRkIFtkb24gbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0RGF5OiJbS3VudSBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3RXZWVrOiJkZGRkIFt0XHUwMjVibVx1MDI1Ym5lbiBsXHUwMjViclx1''@;'; put 'put ''MDI1Yl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGtcdTAyNTRuXHUwMjU0IixwYXN0OiJhIGJcdTAyNWIgJXMgYlx1MDI1NCIsczoic2FuZ2EgZGFtYSBkYW1hIixzczoic2Vrb25kaSAlZCIsbToibWluaXRpIGtlbGVuIixtbToibWluaXRpICVkIixoOiJs''@;'; put 'put ''XHUwMjViclx1MDI1YiBrZWxlbiIsaGg6ImxcdTAyNWJyXHUwMjViICVkIixkOiJ0aWxlIGtlbGVuIixkZDoidGlsZSAlZCIsTToia2FsbyBrZWxlbiIsTU06ImthbG8gJWQiLHk6InNhbiBrZWxlbiIseXk6InNhbiAlZCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDQzNDM4''@;'; put 'put ''OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sZz17''@;'; put 'put ''Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1''@;'; put 'put ''MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1''@;'; put 'put ''MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIw''@;'; put 'put ''X1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5''@;'; put 'put ''OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNc''@;'; put 'put ''dTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFj''@;'; put 'put ''XHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIw''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZf''@;'; put 'put ''XHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1''@;'; put 'put ''MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJE''@;'; put 'put ''RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVk''@;'; put 'put ''IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDlj''@;'; put 'put ''ZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlh''@;'; put 'put ''ZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5''@;'; put 'put ''ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2Jc''@;'; put 'put ''dTA5YjB8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1I''@;'; put 'put ''b3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1QP3c8ND93OncrMTI6Ilx1MDlhZFx1MDljYlx1MDliMCI9PT1QfHwiXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIj09PVA/dzoiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIw''@;'; put 'put ''Ij09PVA/dz49Mz93OncrMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1QfHwiXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA5YjBcdTA5''@;'; put 'put ''YmVcdTA5YTQiOnc8Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjp3PDEyPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MTU/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6dzwxOD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjp3PDIwPyJcdTA5YjhcdTA5YThcdTA5''@;'; put 'put ''Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwxNzEwNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJc''@;'; put 'put ''dTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LGc9eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYi''@;'; put 'put ''LCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoImJuIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUw''@;'; put 'put ''OWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2''@;'; put 'put ''XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFj''@;'; put 'put ''XHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5''@;'; put 'put ''Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2Rc''@;'; put 'put ''dTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNc''@;'; put 'put ''dTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBf''@;'; put 'put ''XHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1''@;'; put 'put ''MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDli''@;'; put 'put ''MFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJk''@;'; put 'put ''ZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBM''@;'; put 'put ''VCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdc''@;'; put 'put ''dTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThc''@;'; put 'put ''dTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5''@;'; put 'put ''YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxw''@;'; put 'put ''cmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVw''@;'; put 'put ''bGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWIw''@;'; put 'put ''XHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PVAmJnc+PTR8fCJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09UCYmdzw1fHwiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUw''@;'; put 'put ''OWIyIj09PVA/dysxMjp3fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwOWIwXHUwOWJlXHUwOWE0Ijp3PDEwPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MTc/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6dzwyMD8iXHUwOWFjXHUwOWJmXHUw''@;'; put 'put ''OTk1XHUwOWJlXHUwOWIyIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sOTAwNDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGYyMSIsMjoiXHUwZjIyIiwzOiJcdTBmMjMiLDQ6Ilx1''@;'; put 'put ''MGYyNCIsNToiXHUwZjI1Iiw2OiJcdTBmMjYiLDc6Ilx1MGYyNyIsODoiXHUwZjI4Iiw5OiJcdTBmMjkiLDA6Ilx1MGYyMCJ9LGc9eyJcdTBmMjEiOiIxIiwiXHUwZjIyIjoiMiIsIlx1MGYyMyI6IjMiLCJcdTBmMjQiOiI0IiwiXHUwZjI1IjoiNSIsIlx1MGYyNiI6IjYiLCJcdTBmMjciOiI3''@;'; put 'put ''IiwiXHUwZjI4IjoiOCIsIlx1MGYyOSI6IjkiLCJcdTBmMjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImJvIix7bW9udGhzOiJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDRcdTBmMGJcdTBmNTRcdTBmN2NfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUw''@;'; put 'put ''ZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY2Nlx1MGY3NFx1MGY1OFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNWVcdTBmNzJcdTBmMGJcdTBmNTRfXHUw''@;'; put 'put ''ZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjYzXHUwZjk0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGZiMlx1MGY3NFx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNTFcdTBm''@;'; put 'put ''NzRcdTBmNTNcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjYyXHUwZjkyXHUwZmIxXHUwZjUxXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGY0Mlx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBm''@;'; put 'put ''YjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1''@;'; put 'put ''Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZjVmXHUwZmIzXHUwZjBiMV9cdTBmNWZcdTBmYjNcdTBmMGIyX1x1MGY1Zlx1MGZiM1x1MGYwYjNfXHUwZjVmXHUwZmIz''@;'; put 'put ''XHUwZjBiNF9cdTBmNWZcdTBmYjNcdTBmMGI1X1x1MGY1Zlx1MGZiM1x1MGYwYjZfXHUwZjVmXHUwZmIzXHUwZjBiN19cdTBmNWZcdTBmYjNcdTBmMGI4X1x1MGY1Zlx1MGZiM1x1MGYwYjlfXHUwZjVmXHUwZmIzXHUwZjBiMTBfXHUwZjVmXHUwZmIzXHUwZjBiMTFfXHUwZjVmXHUwZmIzXHUw''@;'; put 'put ''ZjBiMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnRSZWdleDovXihcdTBmNWZcdTBmYjNcdTBmMGJcZHsxLDJ9KS8sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1''@;'; put 'put ''MGY2MFx1MGYwYlx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUw''@;'; put 'put ''ZjU0XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTRcdTBmMGJcdTBmNjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjY2XHUw''@;'; put 'put ''ZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYy''@;'; put 'put ''XHUwZjBiX1x1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZjQ5XHUwZjcyX1x1MGY1Zlx1MGZiM19cdTBmNThcdTBmNzJcdTBmNDJfXHUwZjYzXHUwZmI3XHUwZjQyX1x1MGY1NVx1MGY3NFx1MGY2Ml9cdTBmNjZcdTBmNDRcdTBmNjZfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzIi5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGY1MVx1MGY3Mlx1''@;'; put 'put ''MGYwYlx1MGY2Mlx1MGY3Mlx1MGY0NF0gTFQiLG5leHREYXk6IltcdTBmNjZcdTBmNDRcdTBmMGJcdTBmNDlcdTBmNzJcdTBmNTNdIExUIixuZXh0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY2Mlx1MGY5N1x1MGY3YVx1''@;'; put 'put ''MGY2Nlx1MGYwYlx1MGY1OF0sIExUIixsYXN0RGF5OiJbXHUwZjQxXHUwZjBiXHUwZjY2XHUwZjQ0XSBMVCIsbGFzdFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNThcdTBmNTBcdTBmNjBcdTBmMGJcdTBmNThdIGRkZGQs''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBmNjNcdTBmMGIiLHBhc3Q6IiVzIFx1MGY2Nlx1MGY5NFx1MGY1M1x1MGYwYlx1MGY2MyIsczoiXHUwZjYzXHUwZjU4XHUwZjBiXHUwZjY2XHUwZjQ0IixzczoiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBi''@;'; put 'put ''XHUwZjQ2XHUwZjBkIixtOiJcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNThcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLG1tOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNTgiLGg6Ilx1MGY0Nlx1MGY3NFx1MGYwYlx1MGY1YVx1MGY3Y1x1MGY1MVx1MGYwYlx1''@;'; put 'put ''MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsaGg6IiVkIFx1MGY0Nlx1MGY3NFx1MGYwYlx1MGY1YVx1MGY3Y1x1MGY1MSIsZDoiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixkZDoiJWQgXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiIixNOiJcdTBmNWZc''@;'; put 'put ''dTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLE1NOiIlZCBcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTYiLHk6Ilx1MGY2M1x1MGY3Y1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIseXk6IiVkIFx1MGY2M1x1MGY3YyJ9LHByZXBhcnNlOmZ1bmN0''@;'; put 'put ''aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBmMjFcdTBmMjJcdTBmMjNcdTBmMjRcdTBmMjVcdTBmMjZcdTBmMjdcdTBmMjhcdTBmMjlcdTBmMjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1''@;'; put 'put ''bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Y3xcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjZ8XHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0fFx1''@;'; put 'put ''MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MnxcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2Mi''@;'; put 'put ''PT09UCYmdz49NHx8Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI9PT1QJiZ3PDV8fCJcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDIiPT09UD93KzEyOnd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTBm''@;'; put 'put ''NThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MiOnc8MTA/Ilx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NiI6dzwxNz8iXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ijp3PDIwPyJcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRc''@;'; put 'put ''dTBmMGJcdTBmNTFcdTBmNDIiOiJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw1MDkyNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhZLHEsZWUpe3JldHVy''@;'; put 'put ''biBZKyIgIitmdW5jdGlvbiB3KFkscSl7cmV0dXJuIDI9PT1xP2Z1bmN0aW9uIFAoWSl7dmFyIHE9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09cVtZLmNoYXJBdCgwKV0/WTpxW1kuY2hhckF0KDApXStZLnN1YnN0cmluZygxKX0oWSk6WX0oe21tOiJtdW51dGVubiIsTU06''@;'; put 'put ''Im1peiIsZGQ6ImRldmV6aCJ9W2VlXSxZKX1mdW5jdGlvbiBCKFkpe3JldHVybiBZPjk/QihZJTEwKTpZfXZhciBGPVsvXmdlbi9pLC9eY1tcdTAyYmNcJ11od2UvaSwvXm1ldS9pLC9eZWJyL2ksL15tYWUvaSwvXihtZXp8ZXZlKS9pLC9eZ291L2ksL15lb3MvaSwvXmd3ZS9pLC9eaGVyL2ks''@;'; put 'put ''L15kdS9pLC9ea2VyL2ldLE89L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2Vy''@;'; put 'put ''KS9pLFU9Wy9eU3UvaSwvXkx1L2ksL15NZShbXnJdfCQpL2ksL15NZXIvaSwvXllhL2ksL15Hdy9pLC9eU2EvaV07SS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJHZW52ZXJfQ1x1MDJiY2h3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19I''@;'; put 'put ''ZXJlX0R1X0tlcnp1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJHZW5fQ1x1MDJiY2h3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VsX0x1bl9NZXVyemhfTWVyY1x1MDJiY2hlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZTpVLGZ1bGxXZWVrZGF5c1BhcnNlOlsvXnN1bC9pLC9ebHVuL2ksL15t''@;'; put 'put ''ZXVyemgvaSwvXm1lcmNbXHUwMmJjXCddaGVyL2ksL155YW91L2ksL15nd2VuZXIvaSwvXnNhZG9ybi9pXSxzaG9ydFdlZWtkYXlzUGFyc2U6Wy9eU3VsL2ksL15MdW4vaSwvXk1ldS9pLC9eTWVyL2ksL15ZYW8vaSwvXkd3ZS9pLC9eU2FkL2ldLG1pbldlZWtkYXlzUGFyc2U6VSxtb250aHNS''@;'; put 'put ''ZWdleDpPLG1vbnRoc1Nob3J0UmVnZXg6Tyxtb250aHNTdHJpY3RSZWdleDovXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGdl''@;'; put 'put ''bnxjW1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxtb250aHNQYXJzZTpGLGxvbmdNb250aHNQYXJzZTpGLHNob3J0TW9udGhzUGFyc2U6Rixsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSIsTExMOiJEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIaXppdiBkYV0gTFQiLG5leHREYXk6IltXYXJjXHUwMmJjaG9hemggZGFdIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbZGFdIExUIixsYXN0RGF5OiJbRGVjXHUwMmJjaCBkYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNldCBkYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImEtYmVubiAlcyIscGFzdDoiJXMgXHUwMmJjem8iLHM6InVuIG5lYmV1ZCBz''@;'; put 'put ''ZWdvbmRlbm5vXHhmOSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOl8saDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOl8sTToidXIgbWl6IixNTTpfLHk6InVyIGJsb2F6Iix5eTpmdW5jdGlvbiBnKFkpe3N3aXRjaChCKFkpKXtjYXNlIDE6Y2FzZSAz''@;'; put 'put ''OmNhc2UgNDpjYXNlIDU6Y2FzZSA5OnJldHVybiBZKyIgYmxvYXoiO2RlZmF1bHQ6cmV0dXJuIFkrIiB2bG9heiJ9fX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShhXHhmMXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKFkpe3JldHVybiBZKygxPT09WT8iYVx4ZjEiOiJ2ZXQiKX0s''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbihZKXtyZXR1cm4iZy5tLiI9PT1ZfSxtZXJpZGllbTpmdW5jdGlvbihZLHEsZWUpe3JldHVybiBZPDEyPyJhLm0uIjoiZy5tLiJ9fSl9KHkoOTc1ODYpKX0sODc3Njg6ZnVuY3Rpb24odWUs''@;'; put 'put ''WCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcodyxQLEYpe3ZhciBPPXcrIiAiO3N3aXRjaChGKXtjYXNlInNzIjpyZXR1cm4gTysoMT09PXc/InNla3VuZGEiOjI9PT13fHwzPT09d3x8ND09PXc/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtbSI6cmV0dXJuIE8r''@;'; put 'put ''KDE9PT13PyJtaW51dGEiOjI9PT13fHwzPT09d3x8ND09PXc/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuImplZGFuIHNhdCI7Y2FzZSJoaCI6cmV0dXJuIE8rKDE9PT13PyJzYXQiOjI9PT13fHwzPT09d3x8ND09PXc/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIE8r''@;'; put 'put ''KDE9PT13PyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIE8rKDE9PT13PyJtamVzZWMiOjI9PT13fHwzPT09d3x8ND09PXc/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIE8rKDE9PT13PyJnb2RpbmEiOjI9PT13fHwzPT09d3x8ND09PXc/ImdvZGluZSI6ImdvZGlu''@;'; put 'put ''YSIpfX1JLmRlZmluZUxvY2FsZSgiYnMiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFq''@;'; put 'put ''Ll9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv''@;'; put 'put ''cnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06''@;'; put 'put ''c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlv''@;'; put 'put ''bigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJu''@;'; put 'put ''Ilt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBkZGRkIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtz''@;'; put 'put ''dWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOmcsbTpmdW5j''@;'; put 'put ''dGlvbiBfKHcsUCxGLE8pe2lmKCJtIj09PUYpcmV0dXJuIFA/ImplZG5hIG1pbnV0YSI6Tz8iamVkbnUgbWludXR1IjoiamVkbmUgbWludXRlIn0sbW06ZyxoOmcsaGg6ZyxkOiJkYW4iLGRkOmcsTToibWplc2VjIixNTTpnLHk6ImdvZGludSIseXk6Z30sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDU2MjkxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiY2EiLHttb250aHM6e3N0YW5kYWxvbmU6ImdlbmVyX2ZlYnJlcl9t''@;'; put 'put ''YXJceGU3X2FicmlsX21haWdfanVueV9qdWxpb2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmVyX2RlIGZlYnJlcl9kZSBtYXJceGU3X2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2Rl''@;'; put 'put ''IHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyXHhlN19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiZGdfZGxfZHRfZGNfZGpfZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoi''@;'; put 'put ''RCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbYXZ1''@;'; put 'put ''aSBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltkZW1ceGUwIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgIisoMSE9PXRo''@;'; put 'put ''aXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2FoaXIgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNzYXQgYSAiKygxIT09dGhpcy5o''@;'; put 'put ''b3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5zIHNlZ29ucyIsc3M6IiVkIHNlZ29ucyIsbToidW4gbWludXQiLG1tOiIlZCBtaW51dHMiLGg6InVuYSBob3JhIixoaDoi''@;'; put 'put ''JWQgaG9yZXMiLGQ6InVuIGRpYSIsZGQ6IiVkIGRpZXMiLE06InVuIG1lcyIsTU06IiVkIG1lc29zIix5OiJ1biBhbnkiLHl5OiIlZCBhbnlzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7dmFyIHc9MT09PWc/''@;'; put 'put ''InIiOjI9PT1nPyJuIjozPT09Zz8iciI6ND09PWc/InQiOiJceGU4IjtyZXR1cm4oInciPT09Qnx8IlciPT09QikmJih3PSJhIiksZyt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4NTMwMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IF89e3N0YW5kYWxvbmU6ImxlZGVuX1x4ZmFub3JfYlx1MDE1OWV6ZW5fZHViZW5fa3ZcdTAxMWJ0ZW5fXHUwMTBkZXJ2ZW5fXHUwMTBkZXJ2ZW5lY19zcnBlbl96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGplbl9saXN0b3BhZF9wcm9zaW5lYyIuc3BsaXQoIl8iKSxmb3JtYXQ6ImxlZG5h''@;'; put 'put ''X1x4ZmFub3JhX2JcdTAxNTllem5hX2R1Ym5hX2t2XHUwMTFidG5hX1x1MDEwZGVydm5hX1x1MDEwZGVydmVuY2Vfc3JwbmFfelx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqbmFfbGlzdG9wYWR1X3Byb3NpbmNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9ERD9bby5dPyhcW1teXFtcXV0qXF18''@;'; put 'put ''XHMpK01NTU0vfSxnPSJsZWRfXHhmYW5vX2JcdTAxNTllX2R1Yl9rdlx1MDExYl9cdTAxMGR2bl9cdTAxMGR2Y19zcnBfelx4ZTFcdTAxNTlfXHUwMTU5XHhlZGpfbGlzX3BybyIuc3BsaXQoIl8iKSxCPVsvXmxlZC9pLC9eXHhmYW5vL2ksL15iXHUwMTU5ZS9pLC9eZHViL2ksL15rdlx1MDEx''@;'; put 'put ''Yi9pLC9eKFx1MDEwZHZufFx1MDEwZGVydmVuJHxcdTAxMGRlcnZuYSkvaSwvXihcdTAxMGR2Y3xcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2UpL2ksL15zcnAvaSwvXnpceGUxXHUwMTU5L2ksL15cdTAxNTlceGVkai9pLC9ebGlzL2ksL15wcm8vaV0sdz0vXihsZWRlbnxceGZhbm9yfGJc''@;'; put 'put ''dTAxNTllemVufGR1YmVufGt2XHUwMTFidGVufFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDEx''@;'; put 'put ''YnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaTtmdW5jdGlvbiBQKHope3JldHVybiB6PjEmJno8NSYmMSE9fn4oei8xMCl9ZnVuY3Rpb24gRih6LE4sTCxLKXt2YXIgVT16KyIgIjtzd2l0Y2goTCl7Y2FzZSJzIjpyZXR1cm4gTnx8Sz8i''@;'; put 'put ''cFx4ZTFyIHNla3VuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBOfHxLP1UrKFAoeik/InNla3VuZHkiOiJzZWt1bmQiKTpVKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIE4/Im1pbnV0YSI6Sz8ibWludXR1IjoibWludXRvdSI7Y2FzZSJtbSI6cmV0dXJuIE58fEs/''@;'; put 'put ''VSsoUCh6KT8ibWludXR5IjoibWludXQiKTpVKyJtaW51dGFtaSI7Y2FzZSJoIjpyZXR1cm4gTj8iaG9kaW5hIjpLPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJob2RpbnkiOiJob2RpbiIpOlUrImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBOfHxL''@;'; put 'put ''PyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJkbnkiOiJkblx4ZWQiKTpVKyJkbnkiO2Nhc2UiTSI6cmV0dXJuIE58fEs/Im1cdTAxMWJzXHhlZGMiOiJtXHUwMTFic1x4ZWRjZW0iO2Nhc2UiTU0iOnJldHVybiBOfHxLP1UrKFAoeik/Im1cdTAxMWJzXHhlZGNl''@;'; put 'put ''IjoibVx1MDExYnNceGVkY1x1MDE2ZiIpOlUrIm1cdTAxMWJzXHhlZGNpIjtjYXNlInkiOnJldHVybiBOfHxLPyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIE58fEs/VSsoUCh6KT8icm9reSI6ImxldCIpOlUrImxldHkifX1JLmRlZmluZUxvY2FsZSgiY3MiLHttb250aHM6Xyxtb250''@;'; put 'put ''aHNTaG9ydDpnLG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGxlZGVufGxlZG5hfFx4ZmFub3JhfFx4ZmFub3J8Ylx1MDE1OWV6ZW58Ylx1MDE1OWV6bmF8ZHViZW58ZHVibmF8a3ZcdTAxMWJ0ZW58a3ZcdTAxMWJ0bmF8XHUwMTBkZXJ2ZW5l''@;'; put 'put ''Y3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHNycG5hfHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufFx1MDE1OVx4ZWRqbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14obGVk''@;'; put 'put ''fFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6Im5lZFx1MDExYmxlX3BvbmRc''@;'; put 'put ''dTAxMWJsXHhlZF9ceGZhdGVyXHhmZF9zdFx1MDE1OWVkYV9cdTAxMGR0dnJ0ZWtfcFx4ZTF0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX1x4ZmF0X3N0X1x1''@;'; put 'put ''MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0iLGw6IkQuIE0uIFlZ''@;'; put 'put ''WVkifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgdl0gTFQiLG5leHREYXk6Ilt6XHhlZHRyYSB2XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRk''@;'; put 'put ''ZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlt2ZSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OnJldHVybiJbdmUgXHUwMTBkdHZydGVrIHZdIExUIjtjYXNlIDU6cmV0dXJuIlt2IHBceGUxdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdlx1''@;'; put 'put ''MDEwZGVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxvdSBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsXHhlOV0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ug''@;'; put 'put ''c3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW3ZdIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bG91IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicFx1MDE1OWVkICVz''@;'; put 'put ''IixzOkYsc3M6RixtOkYsbW06RixoOkYsaGg6RixkOkYsZGQ6RixNOkYsTU06Rix5OkYseXk6Rn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDY2NjY2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1''@;'; put 'put ''bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6Ilx1MDQzYVx1MDRkMVx1MDQ0MFx1MDQzYlx1MDQzMFx1MDQ0N19cdTA0M2RcdTA0MzBcdTA0NDBcdTA0ZDFcdTA0NDFfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2Nc''@;'; put 'put ''dTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwXHUwNDQyXHUwNDNjXHUwNDM1X1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBcdTA0M2JcdTA0MzBfXHUwNDMwXHUwNDMyXHUwNGQxXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUw''@;'; put 'put ''NDQwXHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwXHUwNDMyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0M2FcdTA0ZDFcdTA0NDBfXHUwNDNkXHUwNDMwXHUwNDQwX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRk''@;'; put 'put ''N1x1MDQ0MF9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwX1x1MDQzMFx1MDQzMlx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDMyXHUwNDRiXHUwNDQwXHUw''@;'; put 'put ''NDQxXHUwNDMwXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Mlx1MDQ0M1x1MDQzZFx1MDQ0Mlx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRlXHUwNDNkXHUw''@;'; put 'put ''NDNhXHUwNDQzXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYlx1MDQzZFx1MDQzNVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGRcdTA0NDBcdTA0M2RcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjXHUwNDMwXHUwNDQyXHUwNDNhXHUw''@;'; put 'put ''NDQzXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MF9cdTA0NDJcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJfXHUwNDRkXHUwNDQwXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzYyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQwX1x1MDQ0Mlx1MDQzZF9cdTA0NGJcdTA0NDJfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRhYl9cdTA0NGRcdTA0NDBfXHUwNDQ4XHUwNDNjIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06''@;'; put 'put ''c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSIsTExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2Jc''@;'; put 'put ''dTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUw''@;'; put 'put ''NGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDFmXHUwNDMwXHUwNDRmXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dERheToi''@;'; put 'put ''W1x1MDQyYlx1MDQ0MFx1MDQzMFx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3REYXk6IltcdTA0ZDZcdTA0M2RcdTA0MzVcdTA0NDBdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0''@;'; put 'put ''V2VlazoiW1x1MDRhYVx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQ0MV0gZGRkZCBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NDJcdTA0M2RcdTA0ZDddIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1''@;'; put 'put ''MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcrKC9cdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIkL2kuZXhlYyhnKT8iXHUwNDQwXHUwNDM1XHUwNDNkIjovXHUwNGFiXHUwNDQzXHUwNDNi''@;'; put 'put ''JC9pLmV4ZWMoZyk/Ilx1MDQ0Mlx1MDQzMFx1MDQzZCI6Ilx1MDQ0MFx1MDQzMFx1MDQzZCIpfSxwYXN0OiIlcyBcdTA0M2FcdTA0MzBcdTA0NGZcdTA0M2JcdTA0M2JcdTA0MzAiLHM6Ilx1MDQzZlx1MDRkN1x1MDQ0MC1cdTA0MzhcdTA0M2EgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUw''@;'; put 'put ''NDQzXHUwNDNkXHUwNDQyIixzczoiJWQgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixtOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJc''@;'; put 'put ''dTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixkOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0''@;'; put 'put ''M2ZcdTA0ZDdcdTA0NDAgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1IixNTToiJWQgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1Iix5OiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNGFiXHUwNDQzXHUwNDNiIix5eToiJWQgXHUwNGFiXHUwNDQzXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfS1cdTA0M2NcdTA0ZDdcdTA0NDgvLG9yZGluYWw6IiVkLVx1MDQzY1x1MDRkN1x1MDQ0OCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNTUxNjM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjeSIs''@;'; put 'put ''e21vbnRoczoiSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Iklvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFj''@;'; put 'put ''aF9SaGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0xsX01hX01lX0lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIZWRkaXcgYW1dIExUIixuZXh0RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtk''@;'; put 'put ''aXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24gJXMiLHBhc3Q6IiVzIHluIFx4ZjRsIixzOiJ5Y2h5ZGlnIGVpbGlhZGF1IixzczoiJWQgZWlsaWFkIixtOiJtdW51ZCIsbW06IiVkIG11bnVkIixoOiJhd3IiLGhoOiIlZCBhd3IiLGQ6ImRp''@;'; put 'put ''d3Jub2QiLGRkOiIlZCBkaXdybm9kIixNOiJtaXMiLE1NOiIlZCBtaXMiLHk6ImJsd3lkZHluIix5eToiJWQgZmx5bmVkZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciB3PSIiO3JldHVy''@;'; put 'put ''biBnPjIwP3c9NDA9PT1nfHw1MD09PWd8fDYwPT09Z3x8ODA9PT1nfHwxMDA9PT1nPyJmZWQiOiJhaW4iOmc+MCYmKHc9WyIiLCJhZiIsImlsIiwieWRkIiwieWRkIiwiZWQiLCJlZCIsImVkIiwiZmVkIiwiZmVkIiwiZmVkIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJlZyIs''@;'; put 'put ''ImZlZCIsImVnIiwiZmVkIl1bZ10pLGcrd30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODczNjA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJkYSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxf''@;'; put 'put ''bWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFu''@;'; put 'put ''ZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sXHhmOHIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgi''@;'; put 'put ''XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6InBceGU1IGRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImZceGU1IHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0IG1pbnV0IixtbToiJWQgbWludXR0ZXIiLGg6ImVuIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnZSIsTToiZW4gbVx4ZTVuZWQiLE1NOiIl''@;'; put 'put ''ZCBtXHhlNW5lZGVyIix5OiJldCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDQzMjQ4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltCKyIgVGFnZSIsQisiIFRhZ2VuIl0sdzpbImVpbmUgV29j''@;'; put 'put ''aGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltCKyIgTW9uYXRlIixCKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbQisiIEphaHJlIixCKyIgSmFocmVuIl19O3JldHVybiB3P09bUF1bMF06T1tQXVsxXX1JLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiZGUtYXQiLHttb250aHM6IkpceGU0bm5lcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkpceGU0bi5fRmViLl9NXHhlNHJ6X0Fw''@;'; put 'put ''ci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0u''@;'; put 'put ''WVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0i''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5k''@;'; put 'put ''ZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2Rv''@;'; put 'put ''dzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgzMjIyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUi''@;'; put 'put ''XSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltCKyIgVGFnZSIsQisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltCKyIgTW9uYXRlIixCKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVt''@;'; put 'put ''IEphaHIiXSx5eTpbQisiIEphaHJlIixCKyIgSmFocmVuIl19O3JldHVybiB3P09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZGUtY2giLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92''@;'; put 'put ''ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0''@;'; put 'put ''YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh''@;'; put 'put ''MCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0g''@;'; put 'put ''TFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOl8sbW06IiVkIE1pbnV0ZW4iLGg6XyxoaDoiJWQgU3R1bmRlbiIsZDpfLGRkOl8sdzpfLHd3OiIlZCBXb2NoZW4iLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDU5MzI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e206WyJlaW5lIE1p''@;'; put 'put ''bnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0IrIiBUYWdlIixCKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0''@;'; put 'put ''Il0sTU06W0IrIiBNb25hdGUiLEIrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltCKyIgSmFocmUiLEIrIiBKYWhyZW4iXX07cmV0dXJuIHc/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRy''@;'; put 'put ''el9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExU''@;'; put 'put ''IFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOl8sbW06IiVkIE1pbnV0ZW4iLGg6XyxoaDoiJWQgU3R1''@;'; put 'put ''bmRlbiIsZDpfLGRkOl8sdzpfLHd3OiIlZCBXb2NoZW4iLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjQwNTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7dmFyIF89WyJcdTA3OTZcdTA3YWNcdTA3ODJcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThc''@;'; put 'put ''dTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNcdTA3YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVc''@;'; put 'put ''dTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNcdTA3OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3''@;'; put 'put ''YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxnPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3''@;'; put 'put ''XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2IiwiXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUw''@;'; put 'put ''NzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07SS5kZWZpbmVMb2NhbGUoImR2Iix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Xyx3ZWVrZGF5''@;'; put 'put ''czpnLHdlZWtkYXlzU2hvcnQ6Zyx3ZWVrZGF5c01pbjoiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4X1x1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNl9cdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBfXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2X1x1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN19cdTA3ODBc''@;'; put 'put ''dTA3YWFcdTA3ODZcdTA3YWFfXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA3ODlcdTA3ODZ8XHUwNzg5XHUwNzhhLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA3ODlcdTA3OGEiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA3ODlcdTA3ODYiOiJcdTA3ODlcdTA3''@;'; put 'put ''OGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDc4OVx1MDdhOFx1MDc4N1x1MDdhNlx1MDc4Ylx1MDdhYV0gTFQiLG5leHREYXk6IltcdTA3ODlcdTA3YTdcdTA3OGJcdTA3YTZcdTA3ODlcdTA3YTddIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1x1MDc4N1x1MDdhOFx1MDc4''@;'; put 'put ''N1x1MDdiMFx1MDc5NFx1MDdhY10gTFQiLGxhc3RXZWVrOiJbXHUwNzhhXHUwN2E3XHUwNzg3XHUwN2E4XHUwNzhjXHUwN2FhXHUwNzg4XHUwN2E4XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA3OGNcdTA3YWNcdTA3ODNcdTA3YWRcdTA3OGVcdTA3''@;'; put 'put ''YTZcdTA3ODdcdTA3YTggJXMiLHBhc3Q6Ilx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhOFx1MDc4Mlx1MDdiMCAlcyIsczoiXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhXHUwNzg2XHUwN2FlXHUwNzg1XHUwN2FjXHUwNzg3XHUwN2IwIixzczoiZCUgXHUw''@;'; put 'put ''NzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhIixtOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWNcdTA3ODdcdTA3YjAiLG1tOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWEgJWQiLGg6Ilx1MDc4ZVx1MDdhNlx1MDc5''@;'; put 'put ''MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIsaGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhYSAlZCIsZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixkZDoiXHUwNzhi''@;'; put 'put ''XHUwN2FhXHUwNzg4XHUwN2E2XHUwNzkwXHUwN2IwICVkIixNOiJcdTA3ODlcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLE1NOiJcdTA3ODlcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLHk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIseXk6''@;'; put 'put ''Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhYSAlZCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93Ojcs''@;'; put 'put ''ZG95OjEyfX0pfSh5KDk3NTg2KSl9LDYwNzE4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZWwiLHttb250aHNOb21pbmF0aXZlRWw6Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNi''@;'; put 'put ''Zlx1MDNjMl9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNhZlx1MDNiYlx1MDNiOVx1MDNiZlx1MDNj''@;'; put 'put ''Ml9cdTAzOWNcdTAzYWNcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JkXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiYlx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzY2RcdTAzYjNcdTAzYmZcdTAzYzVcdTAzYzNcdTAzYzRcdTAz''@;'; put 'put ''YmZcdTAzYzJfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjZVx1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWRcdTAzYmZcdTAzYWRcdTAzYmNcdTAzYjJcdTAz''@;'; put 'put ''YzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyIi5zcGxpdCgiXyIpLG1vbnRoc0dlbml0aXZlRWw6Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNi''@;'; put 'put ''Zlx1MDNjNV9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwM2MxXHUwM2M0XHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNj''@;'; put 'put ''NV9cdTAzOWNcdTAzYjFcdTAzOTBcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzVcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYzNcdTAzYzRcdTAz''@;'; put 'put ''YmZcdTAzYzVfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjOVx1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWRcdTAzYmZcdTAzYjVcdTAzYmNcdTAzYjJcdTAz''@;'; put 'put ''YzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1Ii5zcGxpdCgiXyIpLG1vbnRoczpmdW5jdGlvbihCLHcpe3JldHVybiBCPyJzdHJpbmciPT10eXBlb2YgdyYmL0QvLnRlc3Qody5zdWJzdHJpbmco''@;'; put 'put ''MCx3LmluZGV4T2YoIk1NTU0iKSkpP3RoaXMuX21vbnRoc0dlbml0aXZlRWxbQi5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWxbQi5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWx9LG1vbnRoc1Nob3J0OiJcdTAzOTlcdTAzYjFcdTAzYmRfXHUwM2E2XHUwM2I1XHUw''@;'; put 'put ''M2IyX1x1MDM5Y1x1MDNiMVx1MDNjMV9cdTAzOTFcdTAzYzBcdTAzYzFfXHUwMzljXHUwM2IxXHUwM2NhX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZF9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJfXHUwMzkxXHUwM2M1XHUwM2IzX1x1MDNhM1x1MDNiNVx1MDNjMF9cdTAzOWZcdTAzYmFcdTAz''@;'; put 'put ''YzRfXHUwMzlkXHUwM2JmXHUwM2I1X1x1MDM5NFx1MDNiNVx1MDNiYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwMzlhXHUwM2M1XHUwM2MxXHUwM2I5XHUwM2IxXHUwM2JhXHUwM2FlX1x1MDM5NFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNhZFx1MDNjMVx1MDNiMV9cdTAzYTRcdTAzYzFcdTAz''@;'; put 'put ''YWZcdTAzYzRcdTAzYjdfXHUwM2E0XHUwM2I1XHUwM2M0XHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNhZFx1MDNiY1x1MDNjMFx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYjFcdTAzYzFcdTAzYjFcdTAzYzNcdTAzYmFcdTAzYjVcdTAzYzVcdTAzYWVfXHUwM2EzXHUwM2FjXHUw''@;'; put 'put ''M2IyXHUwM2IyXHUwM2IxXHUwM2M0XHUwM2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDM5YVx1MDNjNVx1MDNjMV9cdTAzOTRcdTAzYjVcdTAzYzVfXHUwM2E0XHUwM2MxXHUwM2I5X1x1MDNhNFx1MDNiNVx1MDNjNF9cdTAzYTBcdTAzYjVcdTAzYmNfXHUwM2EwXHUwM2IxXHUw''@;'; put 'put ''M2MxX1x1MDNhM1x1MDNiMVx1MDNiMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMzlhXHUwM2M1X1x1MDM5NFx1MDNiNV9cdTAzYTRcdTAzYzFfXHUwM2E0XHUwM2I1X1x1MDNhMFx1MDNiNV9cdTAzYTBcdTAzYjFfXHUwM2EzXHUwM2IxIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0''@;'; put 'put ''aW9uKEIsdyxQKXtyZXR1cm4gQj4xMT9QPyJcdTAzYmNcdTAzYmMiOiJcdTAzOWNcdTAzOWMiOlA/Ilx1MDNjMFx1MDNiYyI6Ilx1MDNhMFx1MDM5YyJ9LGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuIlx1MDNiYyI9PT0oQisiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW1x1''@;'; put 'put ''MDNhMFx1MDM5Y11cLj9cdTAzOWM/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxl''@;'; put 'put ''bmRhckVsOntzYW1lRGF5OiJbXHUwM2EzXHUwM2FlXHUwM2JjXHUwM2I1XHUwM2MxXHUwM2IxIHt9XSBMVCIsbmV4dERheToiW1x1MDM5MVx1MDNjZFx1MDNjMVx1MDNiOVx1MDNiZiB7fV0gTFQiLG5leHRXZWVrOiJkZGRkIFt7fV0gTFQiLGxhc3REYXk6IltcdTAzYTdcdTAzYjhcdTAzYjVc''@;'; put 'put ''dTAzYzIge31dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiA2PT09dGhpcy5kYXkoKT8iW1x1MDNjNFx1MDNiZiBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYmZdIGRkZGQgW3t9XSBMVCI6IltcdTAzYzRcdTAz''@;'; put 'put ''YjdcdTAzYmQgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2I3XSBkZGRkIFt7fV0gTFQifSxzYW1lRWxzZToiTCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcy5fY2FsZW5kYXJFbFtCXSxGPXcmJncuaG91''@;'; put 'put ''cnMoKTtyZXR1cm4gZnVuY3Rpb24gXyhCKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmQiBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEIpfShQKSYmKFA9UC5hcHBseSh3KSksUC5yZXBsYWNlKCJ7''@;'; put 'put ''fSIsRiUxMj09MT8iXHUwM2MzXHUwM2M0XHUwM2I3IjoiXHUwM2MzXHUwM2M0XHUwM2I5XHUwM2MyIil9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAzYzNcdTAzYjUgJXMiLHBhc3Q6IiVzIFx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiZCIsczoiXHUwM2JiXHUwM2FmXHUwM2IzXHUwM2IxIFx1''@;'; put 'put ''MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsc3M6IiVkIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsbToiXHUwM2FkXHUw''@;'; put 'put ''M2JkXHUwM2IxIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNjYyIsbW06IiVkIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNhYyIsaDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNjZVx1MDNjMVx1MDNiMSIsaGg6IiVkIFx1MDNjZVx1MDNjMVx1MDNiNVx1MDNjMiIsZDoiXHUwM2Jj''@;'; put 'put ''XHUwM2FmXHUwM2IxIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiMSIsZGQ6IiVkIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiNVx1MDNjMiIsTToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiMVx1MDNjMiIsTU06IiVkIFx1MDNiY1x1MDNhZVx1MDNiZFx1''@;'; put 'put ''MDNiNVx1MDNjMiIseToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiZlx1MDNjMiIseXk6IiVkIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiOVx1MDNiMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTAzYjcvLG9y''@;'; put 'put ''ZGluYWw6IiVkXHUwM2I3Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzNjMxOTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWF1Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9K''@;'; put 'put ''dW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVz''@;'; put 'put ''ZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJb''@;'; put 'put ''VG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3''@;'; put 'put ''IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oeSg5''@;'; put 'put ''NzU4NikpfSw4MDU5NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVy''@;'; put 'put ''X0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZWVktTU0t''@;'; put 'put ''REQiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExU''@;'; put 'put ''IixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIs''@;'; put 'put ''bW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfX0pfSh5KDk3NTg2KSl9LDUxODAwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgiZW4tZ2IiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVu''@;'; put 'put ''X0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIs''@;'; put 'put ''TToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09''@;'; put 'put ''Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sODA3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4taWUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlf''@;'; put 'put ''TWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJT''@;'; put 'put ''dW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgi''@;'; put 'put ''XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBh''@;'; put 'put ''Z28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFy''@;'; put 'put ''cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxk''@;'; put 'put ''b3k6NH19KX0oeSg5NzU4NikpfSw5NTk2MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWlsIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3Rv''@;'; put 'put ''YmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlf''@;'; put 'put ''U2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFth''@;'; put 'put ''dF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWlu''@;'; put 'put ''dXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0''@;'; put 'put ''aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9fSl9KHkoOTc1ODYpKX0sODQ0MTg6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1pbiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01h''@;'; put 'put ''eV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJk''@;'; put 'put ''ZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRd''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoi''@;'; put 'put ''JWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/''@;'; put 'put ''InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sNDY4NjU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFy''@;'; put 'put ''eV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJf''@;'; put 'put ''U2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJp''@;'; put 'put ''biAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5''@;'; put 'put ''ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgi''@;'; put 'put ''KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzI2NDc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1zZyIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3Vz''@;'; put 'put ''dF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlf''@;'; put 'put ''VGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs''@;'; put 'put ''TFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBz''@;'; put 'put ''ZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2MTkzMTpmdW5j''@;'; put 'put ''dGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVvIix7bW9udGhzOiJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1bmlvX2p1bGlvX2FcdTAxNmRndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hXHUwMTZkZ19zZXB0X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkaW1hblx1MDEwOW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fXHUwMTM1YVx1MDE2ZGRvX3ZlbmRyZWRvX3NhYmF0''@;'; put 'put ''byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya19cdTAxMzVhXHUwMTZkX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX1x1MDEzNWFfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI''@;'; put 'put ''SDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkiLExMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoiZGRkZFtuXSwgW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsbGxsbDoiZGRkLCBbbGFdIERbLWFuIGRl''@;'; put 'put ''XSBNTU0sIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9bYXBdXC50XC5tL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4icCI9PT1nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc+MTE/dz8icC50Lm0uIjoiUC5ULk0uIjp3PyJh''@;'; put 'put ''LnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRkZGRbbiBqZV0gTFQiLGxhc3REYXk6IltIaWVyYVx1MDE2ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRk''@;'; put 'put ''ZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIsc3M6IiVkIHNla3VuZG9qIixtOiJ1bnUgbWludXRvIixtbToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIl''@;'; put 'put ''ZCBob3JvaiIsZDoidW51IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0o''@;'; put 'put ''eSg5NzU4NikpfSw0MTgwNTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLGc9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVu''@;'; put 'put ''X2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLEI9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJy''@;'; put 'put ''aWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50''@;'; put 'put ''ZXN0KE8pP2dbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVt''@;'; put 'put ''YnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hv''@;'; put 'put ''cnRNb250aHNQYXJzZTpCLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBb''@;'; put 'put ''ZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5''@;'; put 'put ''ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJl''@;'; put 'put ''biAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQg''@;'; put 'put ''c2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4MzQ0NTpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLGc9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGlj''@;'; put 'put ''Ii5zcGxpdCgiXyIpLEI9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29z''@;'; put 'put ''dG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoImVzLW14Iix7bW9udGhzOiJlbmVy''@;'; put 'put ''b19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KE8pP2dbRi5tb250aCgpXTpfW0Yu''@;'; put 'put ''bW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNT''@;'; put 'put ''aG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLHdlZWtkYXlz''@;'; put 'put ''OiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21p''@;'; put 'put ''X2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEh''@;'; put 'put ''PT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoi''@;'; put 'put ''IikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2Vn''@;'; put 'put ''dW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2Vz''@;'; put 'put ''Iix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oeSg5NzU4NikpfSw4MTUxNjpmdW5jdGlv''@;'; put 'put ''bih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLGc9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGlj''@;'; put 'put ''Ii5zcGxpdCgiXyIpLEI9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29z''@;'; put 'put ''dG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoImVzLXVzIix7bW9udGhzOiJlbmVy''@;'; put 'put ''b19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KE8pP2dbRi5tb250aCgpXTpfW0Yu''@;'; put 'put ''bW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNT''@;'; put 'put ''aG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLHdlZWtkYXlz''@;'; put 'put ''OiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21p''@;'; put 'put ''X2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0g''@;'; put 'put ''QSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBh''@;'; put 'put ''IGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJz''@;'; put 'put ''KCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoi''@;'; put 'put ''dW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToi''@;'; put 'put ''JWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw0NjY3OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLGc9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLEI9Wy9eZW5lL2ks''@;'; put 'put ''L15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5v''@;'; put 'put ''dmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoImVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9f''@;'; put 'put ''anVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KE8pP2dbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxt''@;'; put 'put ''b250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xm''@;'; put 'put ''ZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4''@;'; put 'put ''ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZ''@;'; put 'put ''WVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBM''@;'; put 'put ''VCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToi''@;'; put 'put ''dW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhm''@;'; put 'put ''MW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oeSg5NzU4NikpfSw4ODE1MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17czpbIm1ceGY1bmUgc2VrdW5kaSIsIm1ceGY1bmkgc2VrdW5kIiwicGFhciBzZWt1bmRpdCJdLHNzOltCKyJzZWt1bmRpIixCKyJzZWt1bmRpdCJdLG06WyJceGZjaGUgbWludXRpIiwiXHhmY2tzIG1pbnV0Il0sbW06W0IrIiBt''@;'; put 'put ''aW51dGkiLEIrIiBtaW51dGl0Il0saDpbIlx4ZmNoZSB0dW5uaSIsInR1bmQgYWVnYSIsIlx4ZmNrcyB0dW5kIl0saGg6W0IrIiB0dW5uaSIsQisiIHR1bmRpIl0sZDpbIlx4ZmNoZSBwXHhlNGV2YSIsIlx4ZmNrcyBwXHhlNGV2Il0sTTpbImt1dSBhamEiLCJrdXUgYWVnYSIsIlx4ZmNrcyBr''@;'; put 'put ''dXUiXSxNTTpbQisiIGt1dSIsQisiIGt1dWQiXSx5OlsiXHhmY2hlIGFhc3RhIiwiYWFzdGEiLCJceGZja3MgYWFzdGEiXSx5eTpbQisiIGFhc3RhIixCKyIgYWFzdGF0Il19O3JldHVybiB3P09bUF1bMl0/T1tQXVsyXTpPW1BdWzFdOkY/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJldCIse21vbnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1''@;'; put 'put ''bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRldl9lc21hc3BceGU0ZXZfdGVpc2lwXHhlNGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQ''@;'; put 'put ''X0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIsbmV4dFdlZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2FzaSIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOiIlZCBwXHhlNGV2YSIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEs''@;'; put 'put ''Mn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw4MDc1NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFf''@;'; put 'put ''bWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFy''@;'; put 'put ''c2VFeGFjdDohMCx3ZWVrZGF5czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46ImlnX2FsX2FyX2F6X29nX29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVty''@;'; put 'put ''ZW5dIERbYV0gSEg6bW0iLExMTEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlba29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltnYXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiIlcyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToibWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06Imhp''@;'; put 'put ''bGFiZXRlIGJhdCIsTU06IiVkIGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNjU3NDI6ZnVuY3Rpb24odWUsWCx5KXshZnVu''@;'; put 'put ''Y3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2ZjEiLDI6Ilx1MDZmMiIsMzoiXHUwNmYzIiw0OiJcdTA2ZjQiLDU6Ilx1MDZmNSIsNjoiXHUwNmY2Iiw3OiJcdTA2ZjciLDg6Ilx1MDZmOCIsOToiXHUwNmY5IiwwOiJcdTA2ZjAifSxnPXsiXHUwNmYxIjoiMSIsIlx1MDZmMiI6''@;'; put 'put ''IjIiLCJcdTA2ZjMiOiIzIiwiXHUwNmY0IjoiNCIsIlx1MDZmNSI6IjUiLCJcdTA2ZjYiOiI2IiwiXHUwNmY3IjoiNyIsIlx1MDZmOCI6IjgiLCJcdTA2ZjkiOiI5IiwiXHUwNmYwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUw''@;'; put 'put ''NmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3''@;'; put 'put ''X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2''@;'; put 'put ''MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdf''@;'; put 'put ''XHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2''@;'; put 'put ''MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYz''@;'; put 'put ''M1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2''@;'; put 'put ''MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2Mjhc''@;'; put 'put ''dTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYz''@;'; put 'put ''OFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLnRlc3Qodyl9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1''@;'; put 'put ''MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHRE''@;'; put 'put ''YXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5''@;'; put 'put ''XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIscGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUwNjM0IixzOiJc''@;'; put 'put ''dTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNmNjXHUw''@;'; put 'put ''NjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUwNjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2Y2NcdTA2YTkg''@;'; put 'put ''XHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDZmMC1cdTA2Zjld''@;'; put 'put ''L2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRpbmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDMzOTU4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0ibm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqXHhlNCB2''@;'; put 'put ''aWlzaSBrdXVzaSBzZWl0c2VtXHhlNG4ga2FoZGVrc2FuIHloZGVrc1x4ZTRuIi5zcGxpdCgiICIpLGc9WyJub2xsYSIsInloZGVuIiwia2FoZGVuIiwia29sbWVuIiwibmVsalx4ZTRuIiwidmlpZGVuIiwia3V1ZGVuIixfWzddLF9bOF0sX1s5XV07ZnVuY3Rpb24gQihGLE8seixOKXt2YXIg''@;'; put 'put ''TD0iIjtzd2l0Y2goeil7Y2FzZSJzIjpyZXR1cm4gTj8ibXV1dGFtYW4gc2VrdW5uaW4iOiJtdXV0YW1hIHNla3VudGkiO2Nhc2Uic3MiOkw9Tj8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7YnJlYWs7Y2FzZSJtIjpyZXR1cm4gTj8ibWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJtbSI6TD1OPyJt''@;'; put 'put ''aW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpyZXR1cm4gTj8idHVubmluIjoidHVudGkiO2Nhc2UiaGgiOkw9Tj8idHVubmluIjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBOPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNCI7Y2FzZSJkZCI6TD1OPyJwXHhlNGl2''@;'; put 'put ''XHhlNG4iOiJwXHhlNGl2XHhlNFx4ZTQiO2JyZWFrO2Nhc2UiTSI6cmV0dXJuIE4/Imt1dWthdWRlbiI6Imt1dWthdXNpIjtjYXNlIk1NIjpMPU4/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4gTj8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXkiOkw9Tj8idnVv''@;'; put 'put ''ZGVuIjoidnVvdHRhIn1yZXR1cm4gZnVuY3Rpb24gdyhGLE8pe3JldHVybiBGPDEwP08/Z1tGXTpfW0ZdOkZ9KEYsTikrIiAiK0x9SS5kZWZpbmVMb2NhbGUoImZpIix7bW9udGhzOiJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2VzXHhlNGt1dV9oZWlu''@;'; put 'put ''XHhlNGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc1x4ZTRfaGVpblx4ZTRfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXM6InN1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbWFfdGlfa2VfdG9fcGVf''@;'; put 'put ''bGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bdGFdIFlZWVkiLExMTDoiRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLExMTEw6ImRkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9d''@;'; put 'put ''IEhILm1tIixsOiJELk0uWVlZWSIsbGw6IkRvIE1NTSBZWVlZIixsbGw6IkRvIE1NTSBZWVlZLCBba2xvXSBISC5tbSIsbGxsbDoiZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3RceGU0blx4ZTRceGU0bl0gW2tsb10gTFQiLG5leHREYXk6Ilto''@;'; put 'put ''dW9tZW5uYV0gW2tsb10gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9dIExUIixsYXN0RGF5OiJbZWlsZW5dIFtrbG9dIExUIixsYXN0V2VlazoiW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRceGU0c3RceGU0Iixw''@;'; put 'put ''YXN0OiIlcyBzaXR0ZW4iLHM6QixzczpCLG06QixtbTpCLGg6QixoaDpCLGQ6QixkZDpCLE06QixNTTpCLHk6Qix5eTpCfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDY3MjA6ZnVuY3Rp''@;'; put 'put ''b24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExM''@;'; put 'put ''TDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxU''@;'; put 'put ''IFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2Fu''@;'; put 'put ''ZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw5ODM1MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZvIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9t''@;'; put 'put ''YXJzX2Fwclx4ZWRsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''c3VubnVkYWd1cl9tXHhlMW5hZGFndXJfdFx4ZmRzZGFndXJfbWlrdWRhZ3VyX2hceGYzc2RhZ3VyX2ZyXHhlZGdnamFkYWd1cl9sZXlnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX3RceGZkc19taWtfaFx4ZjNzX2ZyXHhlZF9sZXkiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46InN1X21ceGUxX3RceGZkX21pX2hceGYzX2ZyX2xlIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBE''@;'; put 'put ''LiBNTU1NLCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGNkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhjZCBtb3JnaW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGNkIGdqXHhlMXIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4''@;'; put 'put ''ZjBzdHVdIGRkZGQgW2tsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidW0gJXMiLHBhc3Q6IiVzIHNceGVkXHhmMGFuaSIsczoiZlx4ZTEgc2VrdW5kIixzczoiJWQgc2VrdW5kaXIiLG06ImVpbiBtaW51dHR1ciIsbW06IiVkIG1pbnV0dGlyIixoOiJlaW4gdFx4''@;'; put 'put ''ZWRtaSIsaGg6IiVkIHRceGVkbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToiZWluIG1ceGUxbmFceGYwdXIiLE1NOiIlZCBtXHhlMW5hXHhmMGlyIix5OiJlaXR0IFx4ZTFyIix5eToiJWQgXHhlMXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGlu''@;'; put 'put ''YWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNDIwOTY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmci1jYSIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVp''@;'; put 'put ''bGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''ZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBE''@;'; put 'put ''IE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5p''@;'; put 'put ''ZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVk''@;'; put 'put ''IGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2RlZmF1bHQ6Y2Fz''@;'; put 'put ''ZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIGcrKDE9PT1nPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrKDE9PT1nPyJyZSI6ImUiKX19fSl9KHkoOTc1ODYpKX0sOTU3NTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmci1jaCIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9m''@;'; put 'put ''XHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExU''@;'; put 'put ''UzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBc''@;'; put 'put ''eGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1''@;'; put 'put ''ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxk''@;'; put 'put ''YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIGcrKDE9PT1nPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0''@;'; put 'put ''dXJuIGcrKDE9PT1nPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDQwNTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBCPS8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9c''@;'; put 'put ''eGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/fGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSx3PVsvXmphbnYvaSwvXmZceGU5dnIvaSwvXm1hcnMv''@;'; put 'put ''aSwvXmF2ci9pLC9ebWFpL2ksL15qdWluL2ksL15qdWlsL2ksL15hb1x4ZmJ0L2ksL15zZXB0L2ksL15vY3QvaSwvXm5vdi9pLC9eZFx4ZTljL2ldO0kuZGVmaW5lTG9jYWxlKCJmciIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4''@;'; put 'put ''ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNSZWdleDpC''@;'; put 'put ''LG1vbnRoc1Nob3J0UmVnZXg6Qixtb250aHNTdHJpY3RSZWdleDovXihqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKGph''@;'; put 'put ''bnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuPykvaSxtb250aHNQYXJzZTp3LGxvbmdNb250aHNQYXJzZTp3LHNob3J0TW9udGhzUGFyc2U6dyx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlf''@;'; put 'put ''bWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''UGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1''@;'; put 'put ''am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5l''@;'; put 'put ''IHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKEYsTyl7c3dpdGNoKE8pe2Nhc2UiRCI6cmV0dXJuIEYrKDE9''@;'; put 'put ''PT1GPyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBGKygxPT09Rj8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBGKygxPT09Rj8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwxNTk1ODpm''@;'; put 'put ''dW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89Imphbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25v''@;'; put 'put ''dl9kZXMiLnNwbGl0KCJfIik7SS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OmZ1bmN0aW9uKHcsUCl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFApP2dbdy5tb250aCgpXTpfW3cubW9udGgoKV06X30sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0g''@;'; put 'put ''TFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW1x4ZjRmclx4ZmJuZV0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNla29uZGVuIixt''@;'; put 'put ''OiJpZW4gbWluXHhmYXQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06ImllbiBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBh''@;'; put 'put ''cnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrKDE9PT13fHw4PT09d3x8dz49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDk0MTQzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtJLmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIi''@;'; put 'put ''LCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkg''@;'; put 'put ''RG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhl''@;'; put 'put ''OWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6''@;'; put 'put ''ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQi''@;'; put 'put ''LGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKE8pe3JldHVybiBPKygxPT09Tz8iZCI6TyUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NzAyODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImdkIix7bW9u''@;'; put 'put ''dGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2Ft''@;'; put 'put ''aGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtk''@;'; put 'put ''YXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46''@;'; put 'put ''WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkg''@;'; put 'put ''SEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWdd''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoi''@;'; put 'put ''bGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oTyl7cmV0dXJuIE8rKDE9PT1PPyJkIjpP''@;'; put 'put ''JTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgwNDI4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194''@;'; put 'put ''dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJz''@;'; put 'put ''ZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtk''@;'; put 'put ''ZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAi''@;'; put 'put ''KygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIDA9PT1nLmluZGV4T2YoInVuIik/Im4iK2c6ImVuICIrZ30scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVk''@;'; put 'put ''YSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzY4NjE6ZnVu''@;'; put 'put ''Y3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3LFAsRil7dmFyIE89e3M6WyJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIiwiXHUwOTI1''@;'; put 'put ''XHUwOTRiXHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltCKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sbTpbIlx1MDkwZlx1''@;'; put 'put ''MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQyXHUwOTFmIl0sbW06W0IrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MmVc''@;'; put 'put ''dTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDIiXSxoOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzAiXSxoaDpbQisiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQisiIFx1MDkz''@;'; put 'put ''NVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJdLGRkOltCKyIgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixC''@;'; put 'put ''KyIgXHUwOTI2XHUwOTQwXHUwOTM4Il0sTTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRiIl0sTU06W0IrIiBc''@;'; put 'put ''dTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NDciXSx5OlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkyOCIs''@;'; put 'put ''Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzgiXSx5eTpbQisiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQisiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gRj9PW1BdWzBdOk9bUF1b''@;'; put 'put ''MV19SS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFsb25lOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDky''@;'; put 'put ''ZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1''@;'; put 'put ''MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1''@;'; put 'put ''MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBc''@;'; put 'put ''dTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5NDdc''@;'; put 'put ''dTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQyXHUwOTI4XHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRc''@;'; put 'put ''dTA5MWZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMFx1MDkzZVx1''@;'; put 'put ''MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUw''@;'; put 'put ''OTRkXHUwOTJmXHUwOTNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9c''@;'; put 'put ''dTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDAuX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRi''@;'; put 'put ''Ll9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTJmXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1''@;'; put 'put ''MDkyZVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NDFcdTA5MTVc''@;'; put 'put ''dTA5NGRcdTA5MzBcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQ3XHUwOTI4XHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkyZlx1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzMuX1x1MDkyY1x1MDk0''@;'; put 'put ''MVx1MDkyNy5fXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0Ll9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDk0N1x1MDkyOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNl9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1''@;'; put 'put ''MDkyY1x1MDk0MV9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdfXHUwOTM4XHUwOTQxX1x1MDkzNlx1MDk0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExU''@;'; put 'put ''UzoiQSBoOm1tOnNzIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMTExMOiJkZGRkLCBNTU1N''@;'; put 'put ''IERvLCBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MmZcdTA5''@;'; put 'put ''MWNdIExUIixuZXh0RGF5OiJbXHUwOTJiXHUwOTNlXHUwOTMyXHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyXSBMVCIsbmV4dFdlZWs6IltcdTA5MmJcdTA5NDFcdTA5MjFcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W1x1MDkyYlx1MDkzZVx1MDkxZlx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIFx1MDkwNlx1MDkyNlx1MDk0MFx1MDkwMiIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8s''@;'; put 'put ''eTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwOTM1XHUwOTQ3XHUwOTMwKS8sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3JldHVybiJEIj09PXc/QisiXHUwOTM1XHUwOTQ3XHUwOTMwIjpCfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovXHUwOTMw''@;'; put 'put ''XHUwOTNlXHUwOTI0XHUwOTQwfFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMnxcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDJ8XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oQix3KXtyZXR1cm4g''@;'; put 'put ''MTI9PT1CJiYoQj0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIj09PXc/Qjw0P0I6QisxMjoiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIj09PXc/QjoiXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIj09PXc/Qj4xMj9COkIrMTI6Ilx1''@;'; put 'put ''MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT13P0IrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpCPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOkI8MTY/Ilx1MDky''@;'; put 'put ''Nlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI6QjwyMD8iXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oeSg5NzU4NikpfSw1NzcxODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7ZnVuY3Rpb24gXyhCLHcsUCxGKXt2YXIgTz17czpbInRob2RkZWEgc2Vrb25kYW1uaSIsInRob2RkZSBzZWtvbmQiXSxzczpbQisiIHNla29uZGFtbmkiLEIrIiBzZWtvbmQiXSxtOlsiZWthIG1pbnRhbiIsImVrIG1pbnV0Il0sbW06W0IrIiBtaW50YW1uaSIsQisiIG1pbnRhbSJdLGg6''@;'; put 'put ''WyJla2Egdm9yYW4iLCJlayB2b3IiXSxoaDpbQisiIHZvcmFtbmkiLEIrIiB2b3JhbSJdLGQ6WyJla2EgZGlzYW4iLCJlayBkaXMiXSxkZDpbQisiIGRpc2FtbmkiLEIrIiBkaXMiXSxNOlsiZWthIG1ob2luZWFuIiwiZWsgbWhvaW5vIl0sTU06W0IrIiBtaG9pbmVhbW5pIixCKyIgbWhvaW5l''@;'; put 'put ''Il0seTpbImVrYSB2b3JzYW4iLCJlayB2b3JvcyJdLHl5OltCKyIgdm9yc2FtbmkiLEIrIiB2b3JzYW0iXX07cmV0dXJuIEY/T1tQXVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1''@;'; put 'put ''bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVi''@;'; put 'put ''cmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFy''@;'; put 'put ''c2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9T''@;'; put 'put ''bV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDpt''@;'; put 'put ''bSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0ZhbGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBk''@;'; put 'put ''ZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8s''@;'; put 'put ''eXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcikvLG9yZGluYWw6ZnVuY3Rpb24oQix3KXtyZXR1cm4iRCI9PT13P0IrImVyIjpCfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovcmF0aXxzb2thbGxpbXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3Vy''@;'; put 'put ''OmZ1bmN0aW9uKEIsdyl7cmV0dXJuIDEyPT09QiYmKEI9MCksInJhdGkiPT09dz9CPDQ/QjpCKzEyOiJzb2thbGxpbSI9PT13P0I6ImRvbnBhcmFtIj09PXc/Qj4xMj9COkIrMTI6InNhbmplIj09PXc/QisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjw0PyJy''@;'; put 'put ''YXRpIjpCPDEyPyJzb2thbGxpbSI6QjwxNj8iZG9ucGFyYW0iOkI8MjA/InNhbmplIjoicmF0aSJ9fSl9KHkoOTc1ODYpKX0sMjY4Mjc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBhZTciLDI6Ilx1MGFlOCIsMzoiXHUwYWU5Iiw0OiJc''@;'; put 'put ''dTBhZWEiLDU6Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxnPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIiLCJcdTBhZTkiOiIzIiwiXHUwYWVhIjoiNCIsIlx1MGFlYiI6IjUiLCJcdTBhZWMiOiI2IiwiXHUwYWVkIjoi''@;'; put 'put ''NyIsIlx1MGFlZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJndSIse21vbnRoczoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMVx1''@;'; put 'put ''MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmXHUwYWIyX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlXHUwYTg4X1x1MGE5MVx1MGE5N1x1MGFi''@;'; put 'put ''OFx1MGFjZFx1MGE5Zl9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhOFx1MGFiNVx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYTFcdTBh''@;'; put 'put ''YmZcdTBhYjhcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMS5fXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxLl9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2Rc''@;'; put 'put ''dTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmLl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZS5fXHUwYTkxXHUwYTk3Ll9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzcuX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5''@;'; put 'put ''Zlx1MGFjZC5fXHUwYWE4XHUwYWI1XHUwYWM3Ll9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGFiMFx1MGFiNVx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjhcdTBhY2JcdTBhYWVcdTBhYjVcdTBhYmVc''@;'; put 'put ''dTBhYjBfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIw''@;'; put 'put ''XHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhYjBcdTBhYjVcdTBhYmZfXHUwYWI4XHUwYWNiXHUwYWFlX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM19cdTBhYWNcdTBhYzFcdTBhYTdc''@;'; put 'put ''dTBhY2RfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGFiMF9cdTBhYjhcdTBhY2JfXHUwYWFlXHUwYTgyX1x1MGFhY1x1MGFjMV9cdTBhOTdcdTBhYzFf''@;'; put 'put ''XHUwYWI2XHUwYWMxX1x1MGFiNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExUUzoiQSBoOm1tOnNzIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTDoiREQvTU0vWVlZWSIs''@;'; put 'put ''TEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbXHUwYTg2XHUwYTljXSBMVCIsbmV4dERheToiW1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGE5N1x1MGE4N1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLGxhc3RXZWVrOiJbXHUwYWFhXHUwYWJlXHUwYTli''@;'; put 'put ''XHUwYWIyXHUwYWJlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYWFlXHUwYWJlIixwYXN0OiIlcyBcdTBhYWFcdTBhYjlcdTBhYzdcdTBhYjJcdTBhYmUiLHM6Ilx1MGE4NVx1MGFhZVx1MGFjMVx1MGE5NSBcdTBhYWFcdTBhYjNcdTBhY2Ii''@;'; put 'put ''LHNzOiIlZCBcdTBhYjhcdTBhYzdcdTBhOTVcdTBhODJcdTBhYTEiLG06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLG1tOiIlZCBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLGg6Ilx1MGE4Zlx1MGE5NSBcdTBhOTVcdTBhYjJcdTBhYmVcdTBh''@;'; put 'put ''OTUiLGhoOiIlZCBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGQ6Ilx1MGE4Zlx1MGE5NSBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLGRkOiIlZCBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLE06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLE1NOiIl''@;'; put 'put ''ZCBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLHk6Ilx1MGE4Zlx1MGE5NSBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjciLHl5OiIlZCBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYWU3XHUwYWU4XHUw''@;'; put 'put ''YWU5XHUwYWVhXHUwYWViXHUwYWVjXHUwYWVkXHUwYWVlXHUwYWVmXHUwYWU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTBhYjBcdTBhYmVcdTBhYTR8XHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwfFx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMHxcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBhYjBcdTBhYmVcdTBhYTQiPT09''@;'; put 'put ''UD93PDQ/dzp3KzEyOiJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiPT09UD93OiJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiPT09UD93Pj0xMD93OncrMTI6Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJu''@;'; put 'put ''IHc8ND8iXHUwYWIwXHUwYWJlXHUwYWE0Ijp3PDEwPyJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiOnc8MTc/Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI6dzwyMD8iXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIjoiXHUwYWIwXHUwYWJlXHUwYWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9''@;'; put 'put ''KHkoOTc1ODYpKX0sMjE5MzY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJoZSIse21vbnRoczoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZGVc''@;'; put 'put ''dTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWQ5XHUwNWRjX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVkNVx1MDVlMVx1MDVkOF9cdTA1ZTFcdTA1ZTRcdTA1''@;'; put 'put ''ZDhcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWQ4XHUwNWQ1XHUwNWQxXHUwNWU4X1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZDFcdTA1ZTgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDVkOVx1''@;'; put 'put ''MDVlMFx1MDVkNVx1MDVmM19cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1''@;'; put 'put ''ZDVcdTA1ZDJcdTA1ZjNfXHUwNWUxXHUwNWU0XHUwNWQ4XHUwNWYzX1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVmM19cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZjNfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWYzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1ZThcdTA1ZDBcdTA1ZTlcdTA1ZDVcdTA1''@;'; put 'put ''ZGZfXHUwNWU5XHUwNWUwXHUwNWQ5X1x1MDVlOVx1MDVkY1x1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZThcdTA1ZDFcdTA1ZDlcdTA1ZTJcdTA1ZDlfXHUwNWQ3XHUwNWRlXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDFcdTA1ZWEiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNWQwXHUwNWYzX1x1MDVkMVx1MDVmM19cdTA1ZDJcdTA1ZjNfXHUwNWQzXHUwNWYzX1x1MDVkNFx1MDVmM19cdTA1ZDVcdTA1ZjNfXHUwNWU5XHUwNWYzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1ZDBfXHUwNWQxX1x1MDVkMl9cdTA1ZDNf''@;'; put 'put ''XHUwNWQ0X1x1MDVkNV9cdTA1ZTkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkiLExMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbXHUw''@;'; put 'put ''NWQxXU1NTU0gWVlZWSBISDptbSIsbDoiRC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNWQ0XHUwNWQ5XHUwNWQ1XHUwNWRkIFx1MDVkMVx1MDViZV1MVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDVkZVx1MDVkN1x1MDVlOCBcdTA1ZDFcdTA1YmVdTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA1ZDFcdTA1ZTlcdTA1ZTJcdTA1ZDRdIExUIixsYXN0RGF5OiJbXHUwNWQwXHUwNWVhXHUwNWRlXHUwNWQ1XHUwNWRjIFx1MDVkMVx1MDViZV1MVCIsbGFzdFdlZWs6IltcdTA1''@;'; put 'put ''ZDFcdTA1ZDlcdTA1ZDVcdTA1ZGRdIGRkZGQgW1x1MDVkNFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkNVx1MDVkZiBcdTA1ZDFcdTA1ZTlcdTA1ZTJcdTA1ZDRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA1ZDFcdTA1ZTJcdTA1ZDVcdTA1ZDMgJXMiLHBhc3Q6''@;'; put 'put ''Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSAlcyIsczoiXHUwNWRlXHUwNWUxXHUwNWU0XHUwNWU4IFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkNVx1MDVlYSIsc3M6IiVkIFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkNVx1MDVlYSIsbToiXHUwNWQzXHUwNWU3XHUwNWQ0IixtbToiJWQgXHUwNWQz''@;'; put 'put ''XHUwNWU3XHUwNWQ1XHUwNWVhIixoOiJcdTA1ZTlcdTA1ZTJcdTA1ZDQiLGhoOmZ1bmN0aW9uKGcpe3JldHVybiAyPT09Zz8iXHUwNWU5XHUwNWUyXHUwNWVhXHUwNWQ5XHUwNWQ5XHUwNWRkIjpnKyIgXHUwNWU5XHUwNWUyXHUwNWQ1XHUwNWVhIn0sZDoiXHUwNWQ5XHUwNWQ1XHUwNWRkIixk''@;'; put 'put ''ZDpmdW5jdGlvbihnKXtyZXR1cm4gMj09PWc/Ilx1MDVkOVx1MDVkNVx1MDVkZVx1MDVkOVx1MDVkOVx1MDVkZCI6ZysiIFx1MDVkOVx1MDVkZVx1MDVkOVx1MDVkZCJ9LE06Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOSIsTU06ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZDdcdTA1''@;'; put 'put ''ZDVcdTA1ZDNcdTA1ZTlcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmcrIiBcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTlcdTA1ZDlcdTA1ZGQifSx5OiJcdTA1ZTlcdTA1ZTBcdTA1ZDQiLHl5OmZ1bmN0aW9uKGcpe3JldHVybiAyPT09Zz8iXHUwNWU5XHUwNWUwXHUwNWVhXHUwNWQ5XHUwNWQ5XHUwNWRk''@;'; put 'put ''IjpnJTEwPT0wJiYxMCE9PWc/ZysiIFx1MDVlOVx1MDVlMFx1MDVkNCI6ZysiIFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkZCJ9fSxtZXJpZGllbVBhcnNlOi9cdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4''@;'; put 'put ''XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1''@;'; put 'put ''ZTdcdTA1ZTh8XHUwNWQxXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMS9pLGlzUE06ZnVuY3Rpb24oZyl7cmV0dXJuL14oXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUw''@;'; put 'put ''NWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSkkLy50ZXN0KGcpfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8NT8iXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6ZzwxMD8iXHUwNWQx''@;'; put 'put ''XHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjpnPDEyP3c/J1x1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTYnOiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjpnPDE4P3c/J1x1MDVkMFx1MDVkN1x1MDVkNCJc''@;'; put 'put ''dTA1ZTYnOiJcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjoiXHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxIn19KX0oeSg5NzU4NikpfSwzMTMzMjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LGc9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJc''@;'; put 'put ''dTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn0sQj1bL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMHxcdTA5MmJcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkz''@;'; put 'put ''MFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMnxcdTA5Mzhc''@;'; put 'put ''dTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1fFx1MDkyOFx1MDkzNVx1MDkwMi9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyfFx1MDkyNlx1MDkzZlx1MDkzOC9pXTtJLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6e2Zv''@;'; put 'put ''cm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5''@;'; put 'put ''NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1''@;'; put 'put ''MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVc''@;'; put 'put ''dTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5''@;'; put 'put ''M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJc''@;'; put 'put ''dTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5fXHUw''@;'; put 'put ''OTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkz''@;'; put 'put ''NVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5''@;'; put 'put ''MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1MDky''@;'; put 'put ''N19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5''@;'; put 'put ''MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDpt''@;'; put 'put ''bSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOlsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwL2ks''@;'; put 'put ''L15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2Zc''@;'; put 'put ''dTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1L2ksL15cdTA5MjZcdTA5M2ZcdTA5MzgvaV0sbW9udGhzUmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBc''@;'; put 'put ''dTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBc''@;'; put 'put ''dTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5''@;'; put 'put ''MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1''@;'; put 'put ''MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUw''@;'; put 'put ''OTNmXHUwOTM4XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1''@;'; put 'put ''MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1''@;'; put 'put ''MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkz''@;'; put 'put ''OFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUw''@;'; put 'put ''OTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1''@;'; put 'put ''MDk0MD98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzI/fFx1MDkyZVx1MDkwOD98XHUwOTFj''@;'; put 'put ''XHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDg/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyND98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5Mzhc''@;'; put 'put ''dTA5M2ZcdTA5MjQ/XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMD98XHUw''@;'; put 'put ''OTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMD8pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1''@;'; put 'put ''MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZc''@;'; put 'put ''dTA5NDJcLj98XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MTVcdTA5MzJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5MzJdIExUIixs''@;'; put 'put ''YXN0V2VlazoiW1x1MDkyYVx1MDkzZlx1MDkxYlx1MDkzMlx1MDk0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDkyZVx1MDk0N1x1MDkwMiIscGFzdDoiJXMgXHUwOTJhXHUwOTM5XHUwOTMyXHUwOTQ3IixzOiJcdTA5MTVcdTA5NDFcdTA5''@;'; put 'put ''MWIgXHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsaDoiXHUwOTBm''@;'; put 'put ''XHUwOTE1IFx1MDkxOFx1MDkwMlx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkwMlx1MDkxZlx1MDk0NyIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDk0MFx1''@;'; put 'put ''MDkyOFx1MDk0NyIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIseToiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2Uo''@;'; put 'put ''L1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIGdbT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiBfW09dfSl9''@;'; put 'put ''LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNHxcdTA5MzhcdTA5NDFcdTA5MmNcdTA5Mzl8XHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwfFx1MDkzNlx1MDkzZVx1MDkyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEYsTyl7cmV0dXJuIDEyPT09RiYmKEY9MCksIlx1MDkz''@;'; put 'put ''MFx1MDkzZVx1MDkyNCI9PT1PP0Y8ND9GOkYrMTI6Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI9PT1PP0Y6Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI9PT1PP0Y+PTEwP0Y6RisxMjoiXHUwOTM2XHUwOTNlXHUwOTJlIj09PU8/RisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0''@;'; put 'put ''aW9uKEYsTyx6KXtyZXR1cm4gRjw0PyJcdTA5MzBcdTA5M2VcdTA5MjQiOkY8MTA/Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI6RjwxNz8iXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIjpGPDIwPyJcdTA5MzZcdTA5M2VcdTA5MmUiOiJcdTA5MzBcdTA5M2VcdTA5MjQifSx3ZWVr''@;'; put 'put ''Ontkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw5MTk1NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhCLHcsUCl7dmFyIEY9QisiICI7c3dpdGNoKFApe2Nhc2Uic3MiOnJldHVybiBGKygxPT09Qj8ic2VrdW5kYSI6Mj09PUJ8fDM9PT1C''@;'; put 'put ''fHw0PT09Qj8ic2VrdW5kZSI6InNla3VuZGkiKTtjYXNlIm0iOnJldHVybiB3PyJqZWRuYSBtaW51dGEiOiJqZWRuZSBtaW51dGUiO2Nhc2UibW0iOnJldHVybiBGKygxPT09Qj8ibWludXRhIjoyPT09Qnx8Mz09PUJ8fDQ9PT1CPyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiB3''@;'; put 'put ''PyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIEYrKDE9PT1CPyJzYXQiOjI9PT1CfHwzPT09Qnx8ND09PUI/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIEYrKDE9PT1CPyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIEYrKDE9PT1CPyJtamVzZWMi''@;'; put 'put ''OjI9PT1CfHwzPT09Qnx8ND09PUI/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIEYrKDE9PT1CPyJnb2RpbmEiOjI9PT1CfHwzPT09Qnx8ND09PUI/ImdvZGluZSI6ImdvZGluYSIpfX1JLmRlZmluZUxvY2FsZSgiaHIiLHttb250aHM6e2Zvcm1hdDoic2lqZVx1MDEwZG5q''@;'; put 'put ''YV92ZWxqYVx1MDEwZGVfb1x1MDE3ZXVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYSIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzaWplXHUwMTBkYW5qX3ZlbGphXHUwMTBkYV9vXHUwMTdldWpha190''@;'; put 'put ''cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJzaWouX3ZlbGouX29cdTAxN2V1Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJvLiIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1''@;'; put 'put ''Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkRvIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEbyBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0g''@;'; put 'put ''W25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIg''@;'; put 'put ''dV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxl''@;'; put 'put ''XSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczpfLG06''@;'; put 'put ''XyxtbTpfLGg6XyxoaDpfLGQ6ImRhbiIsZGQ6XyxNOiJtamVzZWMiLE1NOl8seToiZ29kaW51Iix5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNDg5Mjg6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJ2YXNceGUxcm5hcCBoXHhlOXRmXHUwMTUxbiBrZWRkZW4gc3plcmRceGUxbiBjc1x4ZmN0XHhmNnJ0XHhmNmtceGY2biBwXHhlOW50ZWtlbiBzem9tYmF0b24iLnNwbGl0KCIgIik7ZnVuY3Rpb24gZyhQLEYsTyx6KXt2YXIgTj1Q''@;'; put 'put ''O3N3aXRjaChPKXtjYXNlInMiOnJldHVybiB6fHxGPyJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjIjoiblx4ZTloXHhlMW55IG1ceGUxc29kcGVyY2UiO2Nhc2Uic3MiOnJldHVybiBOKyh6fHxGKT8iIG1ceGUxc29kcGVyYyI6IiBtXHhlMXNvZHBlcmNlIjtjYXNlIm0iOnJldHVybiJlZ3ki''@;'; put 'put ''Kyh6fHxGPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UibW0iOnJldHVybiBOKyh6fHxGPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UiaCI6cmV0dXJuImVneSIrKHp8fEY/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImhoIjpyZXR1cm4gTisoenx8Rj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFq''@;'; put 'put ''YSIpO2Nhc2UiZCI6cmV0dXJuImVneSIrKHp8fEY/IiBuYXAiOiIgbmFwamEiKTtjYXNlImRkIjpyZXR1cm4gTisoenx8Rj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiTSI6cmV0dXJuImVneSIrKHp8fEY/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJNTSI6cmV0dXJuIE4rKHp8fEY/''@;'; put 'put ''IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJ5IjpyZXR1cm4iZWd5Iisoenx8Rj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpO2Nhc2UieXkiOnJldHVybiBOKyh6fHxGPyIgXHhlOXYiOiIgXHhlOXZlIil9cmV0dXJuIiJ9ZnVuY3Rpb24gQihQKXtyZXR1cm4oUD8iIjoiW21ceGZhbHRdICIp''@;'; put 'put ''KyJbIitfW3RoaXMuZGF5KCldKyJdIExUWy1rb3JdIn1JLmRlZmluZUxvY2FsZSgiaHUiLHttb250aHM6ImphbnVceGUxcl9mZWJydVx4ZTFyX21ceGUxcmNpdXNfXHhlMXByaWxpc19tXHhlMWp1c19qXHhmYW5pdXNfalx4ZmFsaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdFx4ZjNiZXJf''@;'; put 'put ''bm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tXHhlMXJjLl9ceGUxcHIuX21ceGUxai5falx4ZmFuLl9qXHhmYWwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InZh''@;'; put 'put ''c1x4ZTFybmFwX2hceGU5dGZcdTAxNTFfa2VkZF9zemVyZGFfY3NceGZjdFx4ZjZydFx4ZjZrX3BceGU5bnRla19zem9tYmF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InZhc19oXHhlOXRfa2VkZF9zemVfY3NceGZjdF9wXHhlOW5fc3pvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ2''@;'; put 'put ''X2hfa19zemVfY3NfcF9zem8iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWS4gTU1NTSBELiIsTExMOiJZWVlZLiBNTU1NIEQuIEg6bW0iLExMTEw6IllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbSJ9LG1l''@;'; put 'put ''cmlkaWVtUGFyc2U6L2RlfGR1L2ksaXNQTTpmdW5jdGlvbihQKXtyZXR1cm4idSI9PT1QLmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihQLEYsTyl7cmV0dXJuIFA8MTI/ITA9PT1PPyJkZSI6IkRFIjohMD09PU8/ImR1IjoiRFUifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW21hXSBMVFsta29yXSIsbmV4dERheToiW2hvbG5hcF0gTFRbLWtvcl0iLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIEIuY2FsbCh0aGlzLCEwKX0sbGFzdERheToiW3RlZ25hcF0gTFRbLWtvcl0iLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIEIuY2FsbCh0aGlzLCExKX0sc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgbVx4ZmFsdmEiLHBhc3Q6IiVzIixzOmcsc3M6ZyxtOmcsbW06ZyxoOmcsaGg6ZyxkOmcsZGQ6ZyxNOmcsTU06Zyx5OmcseXk6Z30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6''@;'; put 'put ''e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDU2MjE1OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaHktYW0iLHttb250aHM6e2Zvcm1hdDoiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZi''@;'; put 'put ''X1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1N2ZcdTA1NmJfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZjXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1''@;'; put 'put ''NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZFx1MDU2Yl9cdTA1N2RcdTA1NjVcdTA1N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1''@;'; put 'put ''NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NjRcdTA1NjVcdTA1NmZcdTA1N2ZcdTA1''@;'; put 'put ''NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmIiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1''@;'; put 'put ''N2ZfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZjX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1''@;'; put 'put ''MDU3Zlx1MDU3OFx1MDU3ZF9cdTA1N2RcdTA1NjVcdTA1N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTcwXHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1''@;'; put 'put ''MDU2NVx1MDU4MF9cdTA1NjRcdTA1NjVcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA1NzBcdTA1NzZcdTA1N2VfXHUwNTgzXHUwNTdmXHUwNTgwX1x1MDU3NFx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1''@;'; put 'put ''ODBfXHUwNTc0XHUwNTc1XHUwNTdkX1x1MDU3MFx1MDU3Nlx1MDU3ZF9cdTA1NzBcdTA1NmNcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTdkX1x1MDU3ZFx1MDU3YVx1MDU3Zl9cdTA1NzBcdTA1NmZcdTA1N2ZfXHUwNTc2XHUwNTc0XHUwNTYyX1x1MDU2NFx1MDU2Zlx1MDU3ZiIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czoiXHUwNTZmXHUwNTZiXHUwNTgwXHUwNTYxXHUwNTZmXHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2Zlx1MDU3OFx1MDU4Mlx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJf''@;'; put 'put ''XHUwNTc5XHUwNTc4XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3MFx1MDU2Ylx1MDU3Nlx1MDU2M1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJcdTA1NjFcdTA1NjlfXHUwNTc3XHUwNTYx''@;'; put 'put ''XHUwNTYyXHUwNTYxXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYy''@;'; put 'put ''X1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJf''@;'; put 'put ''XHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0g''@;'; put 'put ''WVlZWSBcdTA1NjkuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNTYxXHUwNTc1XHUwNTdkXHUwNTg1XHUwNTgwXSBMVCIsbmV4dERheToiW1x1MDU3ZVx1MDU2MVx1MDU3Mlx1MDU2OF0gTFQiLGxhc3REYXk6IltcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZdIExUIixuZXh0V2Vl''@;'; put 'put ''azpmdW5jdGlvbigpe3JldHVybiJkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA1NjFcdTA1NzZcdTA1ODFcdTA1NjFcdTA1NmVdIGRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1''@;'; put 'put ''NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNTcwXHUwNTY1XHUwNTdmXHUwNTc4IixwYXN0OiIlcyBcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2IiLHM6Ilx1MDU3NFx1MDU2YiBcdTA1ODRcdTA1NjFcdTA1NzZcdTA1''@;'; put 'put ''NmIgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixzczoiJWQgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixtOiJcdTA1ODBcdTA1NzhcdTA1N2FcdTA1NjUiLG1tOiIlZCBcdTA1ODBcdTA1NzhcdTA1N2Fc''@;'; put 'put ''dTA1NjUiLGg6Ilx1MDU2YVx1MDU2MVx1MDU3NCIsaGg6IiVkIFx1MDU2YVx1MDU2MVx1MDU3NCIsZDoiXHUwNTg1XHUwNTgwIixkZDoiJWQgXHUwNTg1XHUwNTgwIixNOiJcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLE1NOiIlZCBcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLHk6Ilx1MDU3''@;'; put 'put ''Zlx1MDU2MVx1MDU4MFx1MDU2YiIseXk6IiVkIFx1MDU3Zlx1MDU2MVx1MDU4MFx1MDU2YiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MXxcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjF8XHUw''@;'; put 'put ''NTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3Ni8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXihcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1''@;'; put 'put ''XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2KSQvLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcpe3JldHVybiBnPDQ/Ilx1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MSI6ZzwxMj8iXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUw''@;'; put 'put ''NTc4XHUwNTdmXHUwNTdlXHUwNTYxIjpnPDE3PyJcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjEiOiJcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9fFxkezEsMn0t''@;'; put 'put ''KFx1MDU2Ylx1MDU3NnxcdTA1ODBcdTA1NjQpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiREREIjpjYXNlInciOmNhc2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PWc/ZysiLVx1MDU2Ylx1MDU3NiI6ZysiLVx1MDU4MFx1MDU2NCI7ZGVmYXVsdDpyZXR1cm4gZ319''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDU4NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImlkIix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0''@;'; put 'put ''ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0FndF9TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9T''@;'; put 'put ''YWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SYWJfS2FtX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRE''@;'; put 'put ''L01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXxzaWFuZ3xzb3JlfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXty''@;'; put 'put ''ZXR1cm4gMTI9PT1nJiYoZz0wKSwicGFnaSI9PT1CP2c6InNpYW5nIj09PUI/Zz49MTE/ZzpnKzEyOiJzb3JlIj09PUJ8fCJtYWxhbSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTE/InBhZ2kiOmc8MTU/InNpYW5nIjpnPDE5PyJzb3JlIjoi''@;'; put 'put ''bWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Jlc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tlbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGFsdSBwdWt1bF0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxhbHUiLHM6ImJlYmVyYXBhIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNlbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhh''@;'; put 'put ''cmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sOTAyMTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8odyl7cmV0dXJuIHclMTAw''@;'; put 'put ''PT0xMXx8dyUxMCE9MX1mdW5jdGlvbiBnKHcsUCxGLE8pe3ZhciB6PXcrIiAiO3N3aXRjaChGKXtjYXNlInMiOnJldHVybiBQfHxPPyJub2trcmFyIHNla1x4ZmFuZHVyIjoibm9ra3J1bSBzZWtceGZhbmR1bSI7Y2FzZSJzcyI6cmV0dXJuIF8odyk/eisoUHx8Tz8ic2VrXHhmYW5kdXIiOiJz''@;'; put 'put ''ZWtceGZhbmR1bSIpOnorInNla1x4ZmFuZGEiO2Nhc2UibSI6cmV0dXJuIFA/Im1ceGVkblx4ZmF0YSI6Im1ceGVkblx4ZmF0dSI7Y2FzZSJtbSI6cmV0dXJuIF8odyk/eisoUHx8Tz8ibVx4ZWRuXHhmYXR1ciI6Im1ceGVkblx4ZmF0dW0iKTpQP3orIm1ceGVkblx4ZmF0YSI6eisibVx4ZWRu''@;'; put 'put ''XHhmYXR1IjtjYXNlImhoIjpyZXR1cm4gXyh3KT96KyhQfHxPPyJrbHVra3VzdHVuZGlyIjoia2x1a2t1c3R1bmR1bSIpOnorImtsdWtrdXN0dW5kIjtjYXNlImQiOnJldHVybiBQPyJkYWd1ciI6Tz8iZGFnIjoiZGVnaSI7Y2FzZSJkZCI6cmV0dXJuIF8odyk/UD96KyJkYWdhciI6eisoTz8i''@;'; put 'put ''ZGFnYSI6ImRceGY2Z3VtIik6UD96KyJkYWd1ciI6eisoTz8iZGFnIjoiZGVnaSIpO2Nhc2UiTSI6cmV0dXJuIFA/Im1ceGUxbnVceGYwdXIiOk8/Im1ceGUxbnVceGYwIjoibVx4ZTFudVx4ZjBpIjtjYXNlIk1NIjpyZXR1cm4gXyh3KT9QP3orIm1ceGUxbnVceGYwaXIiOnorKE8/Im1ceGUx''@;'; put 'put ''bnVceGYwaSI6Im1ceGUxbnVceGYwdW0iKTpQP3orIm1ceGUxbnVceGYwdXIiOnorKE8/Im1ceGUxbnVceGYwIjoibVx4ZTFudVx4ZjBpIik7Y2FzZSJ5IjpyZXR1cm4gUHx8Tz8iXHhlMXIiOiJceGUxcmkiO2Nhc2UieXkiOnJldHVybiBfKHcpP3orKFB8fE8/Ilx4ZTFyIjoiXHhlMXJ1bSIp''@;'; put 'put ''OnorKFB8fE8/Ilx4ZTFyIjoiXHhlMXJpIil9fUkuZGVmaW5lTG9jYWxlKCJpcyIse21vbnRoczoiamFuXHhmYWFyX2ZlYnJceGZhYXJfbWFyc19hcHJceGVkbF9tYVx4ZWRfalx4ZmFuXHhlZF9qXHhmYWxceGVkX1x4ZTFnXHhmYXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25ceGYzdmVtYmVy''@;'; put 'put ''X2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFceGVkX2pceGZhbl9qXHhmYWxfXHhlMWdceGZhX3NlcF9va3Rfblx4ZjN2X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW51ZGFndXJfXHhmZXJpXHhmMGp1ZGFndXJf''@;'; put 'put ''bWlceGYwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2ZceGY2c3R1ZGFndXJfbGF1Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl9ceGZlcmlfbWlceGYwX2ZpbV9mXHhmNnNfbGF1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9NXHhlMV9ceGRlcl9NaV9G''@;'; put 'put ''aV9GXHhmNl9MYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW1x4ZWQgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGUxIG1vcmd1biBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4ZWQgZ1x4ZTZyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwYXN0YV0gZGRkZCBba2wuXSBMVCIs''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZWZ0aXIgJXMiLHBhc3Q6ImZ5cmlyICVzIHNceGVkXHhmMGFuIixzOmcsc3M6ZyxtOmcsbW06ZyxoOiJrbHVra3VzdHVuZCIsaGg6ZyxkOmcsZGQ6ZyxNOmcsTU06Zyx5OmcseXk6Z30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov''@;'; put 'put ''XGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDIyMzQwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXBy''@;'; put 'put ''aWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRv''@;'; put 'put ''bWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lf''@;'; put 'put ''dmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBbYWxsZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQi''@;'; put 'put ''OiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24oZyl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QoZyk/InRyYSI6ImluIikrIiAiK2d9LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNl''@;'; put 'put ''Y29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDcwMTcwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXBy''@;'; put 'put ''aWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRv''@;'; put 'put ''bWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lf''@;'; put 'put ''dmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iW09nZ2kgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0RvbWFuaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAi''@;'; put 'put ''OiJsbCciKSsiXUxUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0llcmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUg''@;'; put 'put ''IjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbTGEgc2NvcnNhXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIjoiW0xvIHNj''@;'; put 'put ''b3Jzb10gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InRyYSAlcyIscGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIs''@;'; put 'put ''bToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsdzoidW5hIHNldHRpbWFuYSIsd3c6IiVkIHNldHRpbWFuZSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5p''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMzk3NzA6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJqYSIse2VyYXM6''@;'; put 'put ''W3tzaW5jZToiMjAxOS0wNS0wMSIsb2Zmc2V0OjEsbmFtZToiXHU0ZWU0XHU1NDhjIixuYXJyb3c6Ilx1MzJmZiIsYWJicjoiUiJ9LHtzaW5jZToiMTk4OS0wMS0wOCIsdW50aWw6IjIwMTktMDQtMzAiLG9mZnNldDoxLG5hbWU6Ilx1NWU3M1x1NjIxMCIsbmFycm93OiJcdTMzN2IiLGFiYnI6''@;'; put 'put ''IkgifSx7c2luY2U6IjE5MjYtMTItMjUiLHVudGlsOiIxOTg5LTAxLTA3IixvZmZzZXQ6MSxuYW1lOiJcdTY2MmRcdTU0OGMiLG5hcnJvdzoiXHUzMzdjIixhYmJyOiJTIn0se3NpbmNlOiIxOTEyLTA3LTMwIix1bnRpbDoiMTkyNi0xMi0yNCIsb2Zmc2V0OjEsbmFtZToiXHU1OTI3XHU2YjYz''@;'; put 'put ''IixuYXJyb3c6Ilx1MzM3ZCIsYWJicjoiVCJ9LHtzaW5jZToiMTg3My0wMS0wMSIsdW50aWw6IjE5MTItMDctMjkiLG9mZnNldDo2LG5hbWU6Ilx1NjYwZVx1NmNiYiIsbmFycm93OiJcdTMzN2UiLGFiYnI6Ik0ifSx7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOiIxODczLTEyLTMxIixvZmZz''@;'; put 'put ''ZXQ6MSxuYW1lOiJcdTg5N2ZcdTY2YTYiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6Ilx1N2QwMFx1NTE0M1x1NTI0ZCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZXJhWWVhck9yZGluYWxSZWdleDovKFx1NTE0''@;'; put 'put ''M3xcZCspXHU1ZTc0LyxlcmFZZWFyT3JkaW5hbFBhcnNlOmZ1bmN0aW9uKGcsQil7cmV0dXJuIlx1NTE0MyI9PT1CWzFdPzE6cGFyc2VJbnQoQlsxXXx8ZywxMCl9LG1vbnRoczoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4''@;'; put 'put ''XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTY1ZTVcdTY2ZGNcdTY1ZTVfXHU2NzA4XHU2NmRjXHU2NWU1X1x1NzA2Ylx1NjZkY1x1NjVlNV9cdTZjMzRcdTY2ZGNcdTY1ZTVfXHU2NzI4XHU2NmRjXHU2NWU1X1x1OTFkMVx1NjZkY1x1NjVlNV9cdTU3MWZcdTY2ZGNcdTY1ZTUiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBkZGRkIEhIOm1tIixsOiJZWVlZL01NL0REIixs''@;'; put 'put ''bDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1KGRkZCkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUzNDhcdTUyNGR8XHU1MzQ4XHU1ZjhjL2ksaXNQTTpmdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4iXHU1MzQ4XHU1ZjhjIj09PWd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj8iXHU1MzQ4XHU1MjRkIjoiXHU1MzQ4XHU1ZjhjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTY1ZTVdIExUIixuZXh0RGF5OiJbXHU2NjBlXHU2NWU1XSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ZnVuY3Rpb24oZyl7cmV0dXJuIGcud2VlaygpIT09dGhpcy53ZWVrKCk/IltcdTY3NjVcdTkwMzFdZGRkZCBMVCI6ImRkZGQgTFQifSxsYXN0RGF5OiJbXHU2NjI4XHU2NWU1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud2VlaygpIT09Zy53ZWVrKCk/''@;'; put 'put ''IltcdTUxNDhcdTkwMzFdZGRkZCBMVCI6ImRkZGQgTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTY1ZTUvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJ5IjpyZXR1cm4gMT09PWc/Ilx1NTE0M1x1NWU3NCI6ZysiXHU1ZTc0''@;'; put 'put ''IjtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTY1NzBcdTc5ZDIiLHNzOiIlZFx1NzlkMiIsbToiMVx1NTIwNiIsbW06IiVkXHU1''@;'; put 'put ''MjA2IixoOiIxXHU2NjQyXHU5NTkzIixoaDoiJWRcdTY2NDJcdTk1OTMiLGQ6IjFcdTY1ZTUiLGRkOiIlZFx1NjVlNSIsTToiMVx1MzBmNlx1NjcwOCIsTU06IiVkXHUzMGY2XHU2NzA4Iix5OiIxXHU1ZTc0Iix5eToiJWRcdTVlNzQifX0pfSh5KDk3NTg2KSl9LDczODc1OmZ1bmN0aW9uKHVl''@;'; put 'put ''LFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgianYiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWdzX1NlcF9Pa3RfTm9wX0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmVi''@;'; put 'put ''X0tlbV9KZW1fU2VwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TcCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1''@;'; put 'put ''a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2VuamluZ3xzaXlhbmd8c29udGVufG5kYWx1LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiZW5qaW5nIj09PUI/Zzoic2l5YW5n''@;'; put 'put ''Ij09PUI/Zz49MTE/ZzpnKzEyOiJzb250ZW4iPT09Qnx8Im5kYWx1Ij09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8iZW5qaW5nIjpnPDE1PyJzaXlhbmciOmc8MTk/InNvbnRlbiI6Im5kYWx1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltEaW50''@;'; put 'put ''ZW4gcHVuaWtvIHB1a3VsXSBMVCIsbmV4dERheToiW01iZW5qYW5nIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0thbGEgd2luZ2kgcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToid29udGVuIGluZyAlcyIscGFzdDoiJXMgaW5na2FuZyBrZXBlbmdrZXIiLHM6InNhd2V0YXdpcyBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZXR1bmdnYWwgbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2V0dW5nZ2FsIGphbSIsaGg6IiVkIGphbSIsZDoic2Vk''@;'; put 'put ''aW50ZW4iLGRkOiIlZCBkaW50ZW4iLE06InNld3VsYW4iLE1NOiIlZCB3dWxhbiIseToic2V0YXVuIix5eToiJWQgdGF1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDc5NDk5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgia2EiLHttb250aHM6Ilx1MTBkOFx1MTBkMFx1MTBkY1x1MTBkNVx1MTBkMFx1MTBlMFx1MTBkOF9cdTEwZDdcdTEwZDRcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDVcdTEwZDBcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGUwXHUxMGUyXHUxMGQ4X1x1MTBkMFx1MTBkZVx1MTBl''@;'; put 'put ''MFx1MTBkOFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkYVx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDBcdTEwZDJcdTEwZDVcdTEwZDhcdTEwZTFcdTEwZTJcdTEw''@;'; put 'put ''ZGRfXHUxMGUxXHUxMGQ0XHUxMGU1XHUxMGUyXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkZFx1MTBlNVx1MTBlMlx1MTBkZFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGNcdTEwZGRcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEw''@;'; put 'put ''ZDhfXHUxMGQzXHUxMGQ0XHUxMGQ5XHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwZDhcdTEwZDBcdTEwZGNfXHUxMGQ3XHUxMGQ0XHUxMGQxX1x1MTBkYlx1MTBkMFx1MTBlMF9cdTEwZDBcdTEwZGVcdTEwZTBfXHUxMGRi''@;'; put 'put ''XHUxMGQwXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY19cdTEwZDhcdTEwZDVcdTEwZGFfXHUxMGQwXHUxMGQyXHUxMGQ1X1x1MTBlMVx1MTBkNFx1MTBlNV9cdTEwZGRcdTEwZTVcdTEwZTJfXHUxMGRjXHUxMGRkXHUxMGQ0X1x1MTBkM1x1MTBkNFx1MTBkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czp7c3RhbmRhbG9uZToiXHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRkXHUxMGQ3XHUx''@;'; put 'put ''MGVlXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZDhfXHUxMGU4XHUxMGQwXHUx''@;'; put 'put ''MGQxXHUxMGQwXHUxMGQ3XHUxMGQ4Ii5zcGxpdCgiXyIpLGZvcm1hdDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwXHUxMGUxX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFc''@;'; put 'put ''dTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlc''@;'; put 'put ''dTEwZDRcdTEwZDVcdTEwZTFfXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi8oXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwfFx1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMikvfSx3ZWVrZGF5c1Nob3J0OiJcdTEwZDlc''@;'; put 'put ''dTEwZDVcdTEwZDhfXHUxMGRkXHUxMGUwXHUxMGU4X1x1MTBlMVx1MTBkMFx1MTBkYl9cdTEwZGRcdTEwZDdcdTEwZWVfXHUxMGVlXHUxMGUzXHUxMGQ3X1x1MTBkZVx1MTBkMFx1MTBlMF9cdTEwZThcdTEwZDBcdTEwZDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTBkOVx1MTBkNV9c''@;'; put 'put ''dTEwZGRcdTEwZTBfXHUxMGUxXHUxMGQwX1x1MTBkZFx1MTBkN19cdTEwZWVcdTEwZTNfXHUxMGRlXHUxMGQwX1x1MTBlOFx1MTBkMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTEwZDNcdTEwZTZcdTEwZDRcdTEwZTFdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0RGF5OiJbXHUxMGVlXHUxMGQ1XHUxMGQwXHUxMGRhXSBMVFstXHUxMGQ2''@;'; put 'put ''XHUxMGQ0XSIsbGFzdERheToiW1x1MTBkMlx1MTBlM1x1MTBlOFx1MTBkOFx1MTBkY10gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHRXZWVrOiJbXHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyXSBkZGRkIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0V2VlazoiW1x1MTBlY1x1MTBk''@;'; put 'put ''OFx1MTBkY1x1MTBkMF0gZGRkZCBMVC1cdTEwZDZcdTEwZDQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVwbGFjZSgvKFx1MTBlY1x1MTBkMFx1MTBkYnxcdTEwZWNcdTEwZTNcdTEwZDd8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3''@;'; put 'put ''fFx1MTBlY1x1MTBkNFx1MTBkYXxcdTEwZDNcdTEwZTZ8XHUxMGQ3XHUxMGQ1KShcdTEwZDh8XHUxMGQ0KS8sZnVuY3Rpb24oQix3LFApe3JldHVybiJcdTEwZDgiPT09UD93KyJcdTEwZThcdTEwZDgiOncrUCsiXHUxMGU4XHUxMGQ4In0pfSxwYXN0OmZ1bmN0aW9uKGcpe3JldHVybi8oXHUx''@;'; put 'put ''MGVjXHUxMGQwXHUxMGRiXHUxMGQ4fFx1MTBlY1x1MTBlM1x1MTBkN1x1MTBkOHxcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDh8XHUxMGQzXHUxMGU2XHUxMGQ0fFx1MTBkN1x1MTBkNVx1MTBkNCkvLnRlc3QoZyk/Zy5yZXBsYWNlKC8oXHUxMGQ4fFx1MTBkNCkkLywiXHUxMGQ4XHUx''@;'; put 'put ''MGUxIFx1MTBlY1x1MTBkOFx1MTBkYyIpOi9cdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgvLnRlc3QoZyk/Zy5yZXBsYWNlKC9cdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgkLywiXHUxMGVjXHUxMGRhXHUxMGQ4XHUxMGUxIFx1MTBlY1x1MTBkOFx1MTBkYyIpOmd9LHM6Ilx1MTBlMFx1MTBkMFx1''@;'; put 'put ''MTBkYlx1MTBkM1x1MTBkNFx1MTBkY1x1MTBkOFx1MTBkYlx1MTBkNCBcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDgiLHNzOiIlZCBcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDgiLG06Ilx1MTBlY1x1MTBlM1x1MTBkN1x1MTBkOCIsbW06IiVkIFx1MTBlY1x1MTBlM1x1MTBkN1x1MTBkOCIsaDoi''@;'; put 'put ''XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4IixoaDoiJWQgXHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4IixkOiJcdTEwZDNcdTEwZTZcdTEwZDQiLGRkOiIlZCBcdTEwZDNcdTEwZTZcdTEwZDQiLE06Ilx1MTBkN1x1MTBkNVx1MTBkNCIsTU06IiVkIFx1MTBkN1x1MTBkNVx1''@;'; put 'put ''MTBkNCIseToiXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Iix5eToiJWQgXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovMHwxLVx1MTBkYVx1MTBkOHxcdTEwZGJcdTEwZDQtXGR7MSwyfXxcZHsxLDJ9LVx1MTBkNC8sb3JkaW5hbDpmdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gMD09PWc/ZzoxPT09Zz9nKyItXHUxMGRhXHUxMGQ4IjpnPDIwfHxnPD0xMDAmJmclMjA9PTB8fGclMTAwPT0wPyJcdTEwZGJcdTEwZDQtIitnOmcrIi1cdTEwZDQifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw5MzU3MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5j''@;'; put 'put ''dGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezA6Ii1cdTA0NDhcdTA0NTYiLDE6Ii1cdTA0NDhcdTA0NTYiLDI6Ii1cdTA0NDhcdTA0NTYiLDM6Ii1cdTA0NDhcdTA0NTYiLDQ6Ii1cdTA0NDhcdTA0NTYiLDU6Ii1cdTA0NDhcdTA0NTYiLDY6Ii1cdTA0NDhcdTA0NGIiLDc6Ii1cdTA0NDhc''@;'; put 'put ''dTA0NTYiLDg6Ii1cdTA0NDhcdTA0NTYiLDk6Ii1cdTA0NDhcdTA0NGIiLDEwOiItXHUwNDQ4XHUwNDRiIiwyMDoiLVx1MDQ0OFx1MDQ0YiIsMzA6Ii1cdTA0NDhcdTA0NGIiLDQwOiItXHUwNDQ4XHUwNDRiIiw1MDoiLVx1MDQ0OFx1MDQ1NiIsNjA6Ii1cdTA0NDhcdTA0NGIiLDcwOiItXHUw''@;'; put 'put ''NDQ4XHUwNDU2Iiw4MDoiLVx1MDQ0OFx1MDQ1NiIsOTA6Ii1cdTA0NDhcdTA0NGIiLDEwMDoiLVx1MDQ0OFx1MDQ1NiJ9O0kuZGVmaW5lTG9jYWxlKCJrayIse21vbnRoczoiXHUwNDliXHUwNDMwXHUwNGEzXHUwNDQyXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQ5Ylx1MDQzZlx1MDQzMFx1MDQz''@;'; put 'put ''ZF9cdTA0M2RcdTA0MzBcdTA0NDNcdTA0NDBcdTA0NGJcdTA0MzdfXHUwNDQxXHUwNGQ5XHUwNDQzXHUwNDU2XHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzY1x1MDQ0Ylx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NDNcdTA0NDFcdTA0NGJcdTA0M2NfXHUwNDQ4XHUwNDU2XHUwNDNiXHUwNDM0XHUw''@;'; put 'put ''NDM1X1x1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0Ylx1MDQzN19cdTA0OWJcdTA0NGJcdTA0NDBcdTA0M2FcdTA0YWZcdTA0MzlcdTA0MzVcdTA0M2FfXHUwNDliXHUwNDMwXHUwNDM3XHUwNDMwXHUwNDNkX1x1MDQ5Ylx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQzMF9cdTA0MzZcdTA0MzVc''@;'; put 'put ''dTA0M2JcdTA0NDJcdTA0M2VcdTA0OWJcdTA0NDFcdTA0MzBcdTA0M2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ5Ylx1MDQzMFx1MDRhM19cdTA0MzBcdTA0OWJcdTA0M2ZfXHUwNDNkXHUwNDMwXHUwNDQzX1x1MDQ0MVx1MDRkOVx1MDQ0M19cdTA0M2NcdTA0MzBcdTA0M2NfXHUw''@;'; put 'put ''NDNjXHUwNDMwXHUwNDQzX1x1MDQ0OFx1MDQ1Nlx1MDQzYl9cdTA0NDJcdTA0MzBcdTA0M2NfXHUwNDliXHUwNDRiXHUwNDQwX1x1MDQ5Ylx1MDQzMFx1MDQzN19cdTA0OWJcdTA0MzBcdTA0NDBfXHUwNDM2XHUwNDM1XHUwNDNiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MzZcdTA0MzVc''@;'; put 'put ''dTA0M2FcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM0XHUwNGFmXHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0ZDlcdTA0NDBcdTA0NDFcdTA0MzVc''@;'; put 'put ''dTA0M2RcdTA0MzFcdTA0NTZfXHUwNDMxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNlx1MDRiMVx1MDQzY1x1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDM2XHUwNDM1XHUw''@;'; put 'put ''NDNhX1x1MDQzNFx1MDRhZlx1MDQzOV9cdTA0NDFcdTA0MzVcdTA0MzlfXHUwNDQxXHUwNGQ5XHUwNDQwX1x1MDQzMVx1MDQzNVx1MDQzOV9cdTA0MzZcdTA0YjFcdTA0M2NfXHUwNDQxXHUwNDM1XHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzZcdTA0M2FfXHUwNDM0XHUw''@;'; put 'put ''NDM5X1x1MDQ0MVx1MDQzOV9cdTA0NDFcdTA0NDBfXHUwNDMxXHUwNDM5X1x1MDQzNlx1MDQzY19cdTA0NDFcdTA0M2QiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1N''@;'; put 'put ''TSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNDU2XHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MTVcdTA0NDBcdTA0NDJcdTA0''@;'; put 'put ''MzVcdTA0YTMgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2FcdTA0MzVcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNGEzXSBkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiIlcyBcdTA0NTZcdTA0NDhcdTA0NTZcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQzMVx1MDRiMVx1MDQ0MFx1MDQ0Ylx1MDQzZCIsczoiXHUwNDMxXHUwNDU2XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQz''@;'; put 'put ''NCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDMxXHUwNDU2XHUwNDQwIFx1''@;'; put 'put ''MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQz''@;'; put 'put ''MFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1MDQzOSIseToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0OFx1MDQ1NnxcdTA0NDhcdTA0NGIpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKEIpe3JldHVybiBCKyhfW0JdfHxfW0IlMTBdfHxfW0I+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw2ODgwNzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MTdlMSIsMjoi''@;'; put 'put ''XHUxN2UyIiwzOiJcdTE3ZTMiLDQ6Ilx1MTdlNCIsNToiXHUxN2U1Iiw2OiJcdTE3ZTYiLDc6Ilx1MTdlNyIsODoiXHUxN2U4Iiw5OiJcdTE3ZTkiLDA6Ilx1MTdlMCJ9LGc9eyJcdTE3ZTEiOiIxIiwiXHUxN2UyIjoiMiIsIlx1MTdlMyI6IjMiLCJcdTE3ZTQiOiI0IiwiXHUxN2U1IjoiNSIs''@;'; put 'put ''Ilx1MTdlNiI6IjYiLCJcdTE3ZTciOiI3IiwiXHUxN2U4IjoiOCIsIlx1MTdlOSI6IjkiLCJcdTE3ZTAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImttIix7bW9udGhzOiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1''@;'; put 'put ''MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2''@;'; put 'put ''X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxNzk4XHUx''@;'; put 'put ''NzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZf''@;'; put 'put ''XHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdi''@;'; put 'put ''Nl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTdhMlx1MTdiNlx1MTc5MVx1MTdiN1x1MTc4Zlx1MTdkMlx1MTc5OV9cdTE3ODVcdTE3ZDBcdTE3OTNcdTE3ZDJcdTE3OTFfXHUxN2EyXHUxNzg0XHUxN2QyXHUxNzgyXHUxN2I2XHUxNzlhX1x1MTc5''@;'; put 'put ''Nlx1MTdiYlx1MTc5Ml9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YTBcdTE3OWZcdTE3ZDJcdTE3OTRcdTE3OGZcdTE3YjdcdTE3Y2RfXHUxNzlmXHUxN2JiXHUxNzgwXHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdjNVx1MTc5YVx1MTdjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTE3YTJc''@;'; put 'put ''dTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1l''@;'; put 'put ''cmlkaWVtUGFyc2U6L1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MHxcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0''@;'; put 'put ''dXJuIHc8MTI/Ilx1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MCI6Ilx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzXHUxNzkzXHUxN2MxXHUxN2M3IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTE3OWZcdTE3ZDJcdTE3YTJcdTE3YzJcdTE3ODAgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3REYXk6IltcdTE3OThcdTE3ZDJcdTE3OWZcdTE3YjdcdTE3OWJcdTE3''@;'; put 'put ''OThcdTE3YjdcdTE3ODkgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MTc5Zlx1MTc5NFx1MTdkMlx1MTc4Zlx1MTdiNlx1MTdhMFx1MTdjZFx1MTc5OFx1MTdiYlx1MTc5M10gW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUxNzkxXHUxN2MwXHUxNzhmIixwYXN0OiIlc1x1MTc5OFx1MTdiYlx1MTc5MyIsczoiXHUxNzk0XHUxN2M5XHUxN2JiXHUxNzkzXHUxN2QyXHUxNzk4XHUxN2I2XHUxNzkzXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4Iixz''@;'; put 'put ''czoiJWQgXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG1tOiIlZCBcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLGg6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5OFx1MTdjOVx1MTdjNFx1''@;'; put 'put ''MTc4NCIsaGg6IiVkIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsZDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixkZDoiJWQgXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixNOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODFcdTE3YzIiLE1NOiIlZCBcdTE3''@;'; put 'put ''ODFcdTE3YzIiLHk6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiIseXk6IiVkIFx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MTc5MVx1MTdiOFxkezEsMn0vLG9yZGluYWw6Ilx1MTc5MVx1''@;'; put 'put ''MTdiOCVkIixwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUxN2UxXHUxN2UyXHUxN2UzXHUxN2U0XHUxN2U1XHUxN2U2XHUxN2U3XHUxN2U4XHUxN2U5XHUxN2UwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0''@;'; put 'put ''dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw2NTA4MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGNlNyIsMjoiXHUwY2U4IiwzOiJcdTBj''@;'; put 'put ''ZTkiLDQ6Ilx1MGNlYSIsNToiXHUwY2ViIiw2OiJcdTBjZWMiLDc6Ilx1MGNlZCIsODoiXHUwY2VlIiw5OiJcdTBjZWYiLDA6Ilx1MGNlNiJ9LGc9eyJcdTBjZTciOiIxIiwiXHUwY2U4IjoiMiIsIlx1MGNlOSI6IjMiLCJcdTBjZWEiOiI0IiwiXHUwY2ViIjoiNSIsIlx1MGNlYyI6IjYiLCJc''@;'; put 'put ''dTBjZWQiOiI3IiwiXHUwY2VlIjoiOCIsIlx1MGNlZiI6IjkiLCJcdTBjZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoImtuIix7bW9udGhzOiJcdTBjOWNcdTBjYThcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwXHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNh''@;'; put 'put ''ZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUw''@;'; put 'put ''Y2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2E4XHUwY2I1XHUwY2M2XHUw''@;'; put 'put ''YzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzljXHUwY2E4X1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMF9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2Rc''@;'; put 'put ''dTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNj''@;'; put 'put ''ZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Ml9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODIiLnNwbGl0KCJfIiksbW9udGhzUGFy''@;'; put 'put ''c2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FjXHUw''@;'; put 'put ''Y2MxXHUwY2E3XHUwY2I1XHUwY2JlXHUwY2IwX1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmXHUwY2I1XHUwY2JlXHUwY2IwIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzX1x1MGNhY1x1MGNjMVx1MGNhN19cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFfXHUwY2I2XHUwY2MxXHUwYzk1XHUw''@;'; put 'put ''Y2NkXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwY2FkXHUwY2JlX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYWVcdTBjODJfXHUwY2FjXHUwY2MxX1x1MGM5N1x1MGNjMV9cdTBjYjZcdTBjYzFfXHUwY2I2Ii5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGM4N1x1MGM4''@;'; put 'put ''Mlx1MGNhNlx1MGNjMV0gTFQiLG5leHREYXk6IltcdTBjYThcdTBjYmVcdTBjYjNcdTBjYzZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBjYThcdTBjYmZcdTBjYThcdTBjY2RcdTBjYThcdTBjYzZdIExUIixsYXN0V2VlazoiW1x1MGM5NVx1MGNjNlx1MGNjMlx1MGNh''@;'; put 'put ''OFx1MGNjNlx1MGNhZl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGNhOFx1MGM4Mlx1MGNhNFx1MGNiMCIscGFzdDoiJXMgXHUwY2I5XHUwY2JmXHUwYzgyXHUwY2E2XHUwY2M2IixzOiJcdTBjOTVcdTBjYzZcdTBjYjJcdTBjYjVcdTBjYzEg''@;'; put 'put ''XHUwYzk1XHUwY2NkXHUwY2I3XHUwY2EzXHUwYzk3XHUwY2IzXHUwY2MxIixzczoiJWQgXHUwY2I4XHUwY2M2XHUwYzk1XHUwY2M2XHUwYzgyXHUwY2ExXHUwY2MxXHUwYzk3XHUwY2IzXHUwY2MxIixtOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2Jm''@;'; put 'put ''XHUwY2I3IixtbToiJWQgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3IixoOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixoaDoiJWQgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixkOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUw''@;'; put 'put ''Y2E2XHUwY2JmXHUwY2E4IixkZDoiJWQgXHUwY2E2XHUwY2JmXHUwY2E4IixNOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIixNTToiJWQgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIix5OiJcdTBjOTJc''@;'; put 'put ''dTBjODJcdTBjYTZcdTBjYzEgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3Iix5eToiJWQgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGNlN1x1MGNlOFx1MGNlOVx1MGNlYVx1MGNlYlx1MGNlY1x1MGNlZFx1MGNl''@;'; put 'put ''ZVx1MGNlZlx1MGNlNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUw''@;'; put 'put ''Y2JmfFx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNnxcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTh8XHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9''@;'; put 'put ''PT13JiYodz0wKSwiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIj09PVA/dzw0P3c6dysxMjoiXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ij09PVA/dzoiXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2Nk''@;'; put 'put ''XHUwY2E4Ij09PVA/dz49MTA/dzp3KzEyOiJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI6dzwxMD8iXHUwY2FjXHUwY2M2XHUw''@;'; put 'put ''Y2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ijp3PDE3PyJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiOnc8MjA/Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI6Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiJ9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwY2E4XHUwY2M2XHUwY2Q1KS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysiXHUwY2E4XHUwY2M2XHUwY2Q1In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KHkoOTc1ODYpKX0sMjAxMzc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJrbyIse21vbnRoczoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6IjFcdWM2ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdWM3N2NcdWM2OTRcdWM3N2NfXHVjNmQ0XHVjNjk0XHVjNzdj''@;'; put 'put ''X1x1ZDY1NFx1YzY5NFx1Yzc3Y19cdWMyMThcdWM2OTRcdWM3N2NfXHViYWE5XHVjNjk0XHVjNzdjX1x1YWUwOFx1YzY5NFx1Yzc3Y19cdWQxYTBcdWM2OTRcdWM3N2MiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhf''@;'; put 'put ''XHVkMWEwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVlcdWIx''@;'; put 'put ''NDQgTU1NTSBEXHVjNzdjIixMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIEEgaDptbSIsTExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0iLGw6IllZWVkuTU0uREQuIixsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLGxsbDoiWVlZWVx1YjE0NCBNTU1NIERc''@;'; put 'put ''dWM3N2MgQSBoOm1tIixsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJcdWM2MjRcdWIyOTggTFQiLG5leHREYXk6Ilx1YjBiNFx1Yzc3YyBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6Ilx1YzViNFx1YzgxYyBMVCIs''@;'; put 'put ''bGFzdFdlZWs6Ilx1YzljMFx1YjA5Y1x1YzhmYyBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdWQ2YzQiLHBhc3Q6IiVzIFx1YzgwNCIsczoiXHViYTg3IFx1Y2QwOCIsc3M6IiVkXHVjZDA4IixtOiIxXHViZDg0IixtbToiJWRcdWJkODQiLGg6Ilx1''@;'; put 'put ''ZDU1YyBcdWMyZGNcdWFjMDQiLGhoOiIlZFx1YzJkY1x1YWMwNCIsZDoiXHVkNTU4XHViOGU4IixkZDoiJWRcdWM3N2MiLE06Ilx1ZDU1YyBcdWIyZWMiLE1NOiIlZFx1YjJlYyIseToiXHVjNzdjIFx1YjE0NCIseXk6IiVkXHViMTQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fShcdWM3N2N8XHVjNmQ0fFx1YzhmYykvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHVjNzdjIjtjYXNlIk0iOnJldHVybiBnKyJcdWM2ZDQiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHVjOGZjIjtkZWZh''@;'; put 'put ''dWx0OnJldHVybiBnfX0sbWVyaWRpZW1QYXJzZTovXHVjNjI0XHVjODA0fFx1YzYyNFx1ZDZjNC8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iXHVjNjI0XHVkNmM0Ij09PWd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj8iXHVjNjI0XHVjODA0IjoiXHVjNjI0XHVkNmM0''@;'; put 'put ''In19KX0oeSg5NzU4NikpfSw2Mzc0NDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyh3LFAsRixPKXt2YXIgej17czpbIlx4ZTdlbmQgc2FuXHhlZXllIiwiXHhlN2VuZCBzYW5ceGVleWV5YW4iXSxzczpbdysiIHNhblx4ZWV5ZSIsdysiIHNh''@;'; put 'put ''blx4ZWV5ZXlhbiJdLG06WyJkZXFceGVlcWV5ZWsiLCJkZXFceGVlcWV5ZWtceGVhIl0sbW06W3crIiBkZXFceGVlcWUiLHcrIiBkZXFceGVlcWV5YW4iXSxoOlsic2FldGVrIiwic2FldGVrXHhlYSJdLGhoOlt3KyIgc2FldCIsdysiIHNhZXRhbiJdLGQ6WyJyb2playIsInJvamVrXHhlYSJd''@;'; put 'put ''LGRkOlt3KyIgcm9qIix3KyIgcm9qYW4iXSx3OlsiaGVmdGV5ZWsiLCJoZWZ0ZXlla1x4ZWEiXSx3dzpbdysiIGhlZnRlIix3KyIgaGVmdGV5YW4iXSxNOlsibWVoZWsiLCJtZWhla1x4ZWEiXSxNTTpbdysiIG1laCIsdysiIG1laGFuIl0seTpbInNhbGVrIiwic2FsZWtceGVhIl0seXk6W3cr''@;'; put 'put ''IiBzYWwiLHcrIiBzYWxhbiJdfTtyZXR1cm4gUD96W0ZdWzBdOnpbRl1bMV19SS5kZWZpbmVMb2NhbGUoImt1LWttciIse21vbnRoczoiUlx4ZWFiZW5kYW5fU2liYXRfQWRhcl9OXHhlZXNhbl9HdWxhbl9IZXpceGVlcmFuX1RceGVlcm1laF9UZWJheF9ceGNlbG9uX0NvdG1laF9NaWpkYXJf''@;'; put 'put ''QmVyZmFuYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJSXHhlYWJfU2liX0FkYV9OXHhlZXNfR3VsX0hlel9UXHhlZXJfVGViX1x4Y2Vsb19Db3RfTWlqX0JlciIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJZZWtcdTAxNWZlbV9EdVx1MDE1ZmVtX1NceGVh''@;'; put 'put ''XHUwMTVmZW1fXHhjN2FyXHUwMTVmZW1fUFx4ZWFuY1x1MDE1ZmVtX1x4Y2VuX1x1MDE1ZWVtXHhlZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJZZWtfRHVfU1x4ZWFfXHhjN2FyX1BceGVhbl9ceGNlbl9cdTAxNWVlbSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWVfRHVfU1x4ZWFf''@;'; put 'put ''XHhjN2FfUFx4ZWFfXHhjZW5fXHUwMTVlZSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Rj8iYm4iOiJCTiI6Rj8icG4iOiJQTiJ9LG1lcmlkaWVtUGFyc2U6L2JufEJOfHBufFBOLyxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTVthXSBZWVlZW2FuXSIsTExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIEhIOm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW2FdIFlZWVlbYW5dIEhIOm1tIixsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIixsbGw6IkRvIE1NTVsuXSBZWVlZW2FuXSBI''@;'; put 'put ''SDptbSIsbGxsbDoiZGRkWy5dLCBEbyBNTU1bLl0gWVlZWVthbl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2VybyBkaSBzYWV0XSBMVCBbZGVdIixuZXh0RGF5OiJbU2liXHhlYSBkaSBzYWV0XSBMVCBbZGVdIixuZXh0V2VlazoiZGRkZCBbZGkgc2FldF0gTFQgW2RlXSIsbGFz''@;'; put 'put ''dERheToiW0R1aCBkaSBzYWV0XSBMVCBbZGVdIixsYXN0V2VlazoiZGRkZFthIGJvclx4ZWUgZGkgc2FldF0gTFQgW2RlXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGkgJXMgZGUiLHBhc3Q6ImJlclx4ZWUgJXMiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6''@;'; put 'put ''XyxkZDpfLHc6Xyx3dzpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KD86eVx4ZWF8XHhlYXxcLikvLG9yZGluYWw6ZnVuY3Rpb24odyxQKXt2YXIgRj1QLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEYuaW5jbHVkZXMoInciKXx8Ri5pbmNsdWRlcygi''@;'; put 'put ''bSIpP3crIi4iOncrZnVuY3Rpb24gZyh3KXt2YXIgUD0odz0iIit3KS5zdWJzdHJpbmcody5sZW5ndGgtMSksRj13Lmxlbmd0aD4xP3cuc3Vic3RyaW5nKHcubGVuZ3RoLTIpOiIiO3JldHVybiAxMj09Rnx8MTM9PUZ8fCIyIiE9UCYmIjMiIT1QJiYiNTAiIT1GJiYiNzAiIT1QJiYiODAiIT1Q''@;'; put 'put ''PyJceGVhIjoieVx4ZWEifSh3KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzAxMTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIs''@;'; put 'put ''NjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxnPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJc''@;'; put 'put ''dTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LEI9WyJcdTA2YTlcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjM0XHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjJhIiwiXHUwNjI2XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwi''@;'; put 'put ''XHUwNjQ2XHUwNmNjXHUwNjMzXHUwNjI3XHUwNjQ2IiwiXHUwNjI2XHUwNjI3XHUwNmNjXHUwNjI3XHUwNjMxIiwiXHUwNjJkXHUwNjQ4XHUwNjMyXHUwNmQ1XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjJhXHUwNmQ1XHUwNjQ1XHUwNjQ1XHUwNjQ4XHUwNjMyIiwiXHUwNjI2XHUw''@;'; put 'put ''NjI3XHUwNjI4IiwiXHUwNjI2XHUwNmQ1XHUwNmNjXHUwNjQ0XHUwNjQ4XHUwNjQ4XHUwNjQ0IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDY0M1x1MDZkNVx1MDY0NSIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBc''@;'; put 'put ''dTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNmE5XHUwNmQ1XHUwNjQ1Il07SS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOkIsbW9udGhzU2hvcnQ6Qix3ZWVrZGF5czoiXHUwNmNjXHUw''@;'; put 'put ''NjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2''@;'; put 'put ''NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNcdTA2''@;'; put 'put ''Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdc''@;'; put 'put ''dTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUyMDBj''@;'; put 'put ''XHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFj''@;'; put 'put ''dDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNlXHUw''@;'; put 'put ''NjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjfFx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihQKXtyZXR1cm4vXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KFApfSxtZXJpZGllbTpmdW5jdGlv''@;'; put 'put ''bihQLEYsTyl7cmV0dXJuIFA8MTI/Ilx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMxXHUw''@;'; put 'put ''NmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6ImRk''@;'; put 'put ''ZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0M1x1''@;'; put 'put ''MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAlcyIscGFzdDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNcdTA2''@;'; put 'put ''NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2NDRc''@;'; put 'put ''dTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIlZCBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1''@;'; put 'put ''MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgiLGRkOiIlZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0''@;'; put 'put ''MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEYp''@;'; put 'put ''e3JldHVybiBnW0ZdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2''@;'; put 'put ''KSl9LDk5MTg3OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoiLVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0N1x1MDQz''@;'; put 'put ''OCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1MDQ0N1x1MDQzOCIsODoiLVx1MDQ0N1x1MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiItXHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUwNDQ3XHUw''@;'; put 'put ''NGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6Ii1cdTA0NDdcdTA0MzgiLDgwOiItXHUwNDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFmIn07SS5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0''@;'; put 'put ''NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVc''@;'; put 'put ''dTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMx''@;'; put 'put ''XHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwX1x1''@;'; put 'put ''MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXM6Ilx1MDQxNlx1MDQzNVx1MDQzYVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTRcdTA0YWZcdTA0MzlcdTA0NDhcdTA0ZTlcdTA0M2NcdTA0MzFcdTA0YWZfXHUwNDI4XHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4''@;'; put 'put ''X1x1MDQyOFx1MDQzMFx1MDQ0MFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTFcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQxOFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOCIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MTZcdTA0MzVcdTA0M2FfXHUwNDE0XHUwNGFmXHUwNDM5X1x1MDQyOFx1MDQzNVx1MDQzOV9cdTA0MjhcdTA0MzBcdTA0NDBfXHUwNDExXHUwNDM1XHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MThcdTA0NDhcdTA0MzUiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNNaW46Ilx1MDQxNlx1MDQzYV9cdTA0MTRcdTA0MzlfXHUwNDI4XHUwNDM5X1x1MDQyOFx1MDQ0MF9cdTA0MTFcdTA0MzlfXHUwNDE2XHUwNDNjX1x1MDQxOFx1MDQ0OCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE''@;'; put 'put ''RC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0YWZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQ0ZFx1MDQ0ZCBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDRlOVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDRhZlx1MDQzZFx1MDRhZl0gW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0''@;'; put 'put ''Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDNjXHUwNDQzXHUwNDQwXHUwNDQzXHUwNDNkIixzOiJcdTA0MzFcdTA0MzhcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDdc''@;'; put 'put ''dTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNGFmXHUw''@;'; put 'put ''NDNkXHUwNGU5XHUwNDQyIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNk''@;'; put 'put ''IixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUw''@;'; put 'put ''NDQ3XHUwNDM4fFx1MDQ0N1x1MDQ0YnxcdTA0NDdcdTA0YWZ8XHUwNDQ3XHUwNDQzKS8sb3JkaW5hbDpmdW5jdGlvbihCKXtyZXR1cm4gQisoX1tCXXx8X1tCJTEwXXx8X1tCPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMzU5Njk6ZnVuY3Rpb24o''@;'; put 'put ''dWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oRixPLHosTil7dmFyIEw9e206WyJlbmcgTWludXR0IiwiZW5nZXIgTWludXR0Il0saDpbImVuZyBTdG9ubiIsImVuZ2VyIFN0b25uIl0sZDpbImVlbiBEYWciLCJlbmdlbSBEYWciXSxNOlsiZWUgTW91bnQiLCJl''@;'; put 'put ''bmdlbSBNb3VudCJdLHk6WyJlZSBKb2VyIiwiZW5nZW0gSm9lciJdfTtyZXR1cm4gTz9MW3pdWzBdOkxbel1bMV19ZnVuY3Rpb24gdyhGKXtpZihGPXBhcnNlSW50KEYsMTApLGlzTmFOKEYpKXJldHVybiExO2lmKEY8MClyZXR1cm4hMDtpZihGPDEwKXJldHVybiA0PD1GJiZGPD03O2lmKEY8''@;'; put 'put ''MTAwKXt2YXIgTz1GJTEwO3JldHVybiB3KDA9PT1PP0YvMTA6Tyl9aWYoRjwxZTQpe2Zvcig7Rj49MTA7KUYvPTEwO3JldHVybiB3KEYpfXJldHVybiB3KEYvPTFlMyl9SS5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVlX0p1''@;'; put 'put ''bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLHdlZWtkYXlzOiJTb25uZGVnX01ceGU5aW5kZWdfRFx4ZWJuc2NoZGVnX01ceGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiU29fTVx4ZTlfRFx4ZWJfTVx4ZWJfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhdXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixsYXN0''@;'; put 'put ''RGF5OiJbR1x4ZWJzY2h0ZXIgdW1dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6ZnVuY3Rpb24gZyhGKXtyZXR1cm4gdyhGLnN1YnN0cigwLEYuaW5kZXhPZigiICIpKSk/ImEgIitGOiJhbiAiK0Z9LHBhc3Q6ZnVuY3Rpb24gQihGKXtyZXR1cm4gdyhGLnN1YnN0cigwLEYuaW5kZXhPZigiICIpKSk/InZpcnUgIitGOiJ2aXJ1biAiK0Z9LHM6ImUgcHVlciBT''@;'; put 'put ''ZWtvbm5lbiIsc3M6IiVkIFNla29ubmVuIixtOl8sbW06IiVkIE1pbnV0dGVuIixoOl8saGg6IiVkIFN0b25uZW4iLGQ6XyxkZDoiJWQgRGVlZyIsTTpfLE1NOiIlZCBNXHhlOWludCIseTpfLHl5OiIlZCBKb2VyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFs''@;'; put 'put ''OiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDMzNTI2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibG8iLHttb250aHM6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBl''@;'; put 'put ''YjhcdTBlYTFcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1''@;'; put 'put ''MGVhNVx1MGViMFx1MGU4MVx1MGViYlx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5''@;'; put 'put ''XHUwZWE3XHUwZWIyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUw''@;'; put 'put ''ZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1''@;'; put 'put ''MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZWFkXHUwZWIyXHUwZTk3XHUwZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1''@;'; put 'put ''MGU5OV9cdTBlYWRcdTBlYjFcdTBlODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGVi''@;'; put 'put ''MiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZTk3X1x1MGU4OF9cdTBlYWRcdTBlODRfXHUwZTllX1x1MGU5ZVx1MGVhYl9cdTBlYWFcdTBlODFfXHUwZWFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6Ilx1MGVhN1x1MGViMVx1MGU5OWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFcdTBlYmJcdTBl''@;'; put 'put ''YzlcdTBlYjJ8XHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODciPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdTBlOTVcdTBlYWRc''@;'; put 'put ''dTBlOTlcdTBlYzBcdTBlOGFcdTBlYmJcdTBlYzlcdTBlYjIiOiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5l''@;'; put 'put ''eHREYXk6IltcdTBlYTFcdTBlYjdcdTBlYzlcdTBlYWRcdTBlYjdcdTBlYzhcdTBlOTlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVkY1x1MGVjOVx1MGViMlx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltcdTBlYTFcdTBlYjdcdTBlYzlcdTBlYTdcdTBlYjJcdTBlOTlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVjMVx1MGVhNVx1MGVjOVx1MGVhN1x1MGU5OVx1MGViNVx1''@;'; put 'put ''MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGVhZFx1MGViNVx1MGU4MSAlcyIscGFzdDoiJXNcdTBlOWNcdTBlYzhcdTBlYjJcdTBlOTlcdTBlYTFcdTBlYjIiLHM6Ilx1MGU5YVx1MGVjZFx1MGVjOFx1MGVj''@;'; put 'put ''MFx1MGU5N1x1MGViYlx1MGVjOFx1MGViMlx1MGVjM1x1MGU5NFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsc3M6IiVkIFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbToiMSBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG1tOiIlZCBcdTBlOTlc''@;'; put 'put ''dTBlYjJcdTBlOTdcdTBlYjUiLGg6IjEgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixoaDoiJWQgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixkOiIxIFx1MGVhMVx1MGViN1x1MGVjOSIsZGQ6IiVkIFx1MGVhMVx1MGViN1x1''@;'; put 'put ''MGVjOSIsTToiMSBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLE1NOiIlZCBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLHk6IjEgXHUwZTliXHUwZWI1Iix5eToiJWQgXHUwZTliXHUwZWI1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovKFx1MGU5N1x1MGViNVx1MGVj''@;'; put 'put ''OClcZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBlOTdcdTBlYjVcdTBlYzgiK2d9fSl9KHkoOTc1ODYpKX0sOTA0MTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXtzczoic2VrdW5kXHUwMTE3X3Nla3VuZFx1MDE3ZWlcdTAx''@;'; put 'put ''NzNfc2VrdW5kZXMiLG06Im1pbnV0XHUwMTE3X21pbnV0XHUwMTE3c19taW51dFx1MDExOSIsbW06Im1pbnV0XHUwMTE3c19taW51XHUwMTBkaVx1MDE3M19taW51dGVzIixoOiJ2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZFx1MDEwNSIsaGg6InZhbGFuZG9zX3ZhbGFuZFx1MDE3M192YWxhbmRh''@;'; put 'put ''cyIsZDoiZGllbmFfZGllbm9zX2RpZW5cdTAxMDUiLGRkOiJkaWVub3NfZGllblx1MDE3M19kaWVuYXMiLE06Im1cdTAxMTdudW9fbVx1MDExN25lc2lvX21cdTAxMTduZXNcdTAxMmYiLE1NOiJtXHUwMTE3bmVzaWFpX21cdTAxMTduZXNpXHUwMTczX21cdTAxMTduZXNpdXMiLHk6Im1ldGFp''@;'; put 'put ''X21ldFx1MDE3M19tZXR1cyIseXk6Im1ldGFpX21ldFx1MDE3M19tZXR1cyJ9O2Z1bmN0aW9uIEIoeixOLEwsSyl7cmV0dXJuIE4/UChMKVswXTpLP1AoTClbMV06UChMKVsyXX1mdW5jdGlvbiB3KHope3JldHVybiB6JTEwPT0wfHx6PjEwJiZ6PDIwfWZ1bmN0aW9uIFAoeil7cmV0dXJuIF9b''@;'; put 'put ''el0uc3BsaXQoIl8iKX1mdW5jdGlvbiBGKHosTixMLEspe3ZhciBVPXorIiAiO3JldHVybiAxPT09ej9VK0IoMCxOLExbMF0sSyk6Tj9VKyh3KHopP1AoTClbMV06UChMKVswXSk6Sz9VK1AoTClbMV06VSsodyh6KT9QKEwpWzFdOlAoTClbMl0pfUkuZGVmaW5lTG9jYWxlKCJsdCIse21vbnRo''@;'; put 'put ''czp7Zm9ybWF0OiJzYXVzaW9fdmFzYXJpb19rb3ZvX2JhbGFuZFx1MDE3ZWlvX2dlZ3VcdTAxN2VcdTAxMTdzX2Jpclx1MDE3ZWVsaW9fbGllcG9zX3J1Z3BqXHUwMTZiXHUwMTBkaW9fcnVnc1x1MDExN2pvX3NwYWxpb19sYXBrcmlcdTAxMGRpb19ncnVvZFx1MDE3ZWlvIi5zcGxpdCgiXyIp''@;'; put 'put ''LHN0YW5kYWxvbmU6InNhdXNpc192YXNhcmlzX2tvdmFzX2JhbGFuZGlzX2dlZ3VcdTAxN2VcdTAxMTdfYmlyXHUwMTdlZWxpc19saWVwYV9ydWdwalx1MDE2YnRpc19ydWdzXHUwMTE3amlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2RpcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxb''@;'; put 'put ''W15cW1xdXSpcXXxccykrTU1NTT98TU1NTT8oXFtbXlxbXF1dKlxdfFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoic2F1X3Zhc19rb3ZfYmFsX2dlZ19iaXJfbGllX3JncF9yZ3Nfc3BhX2xhcF9ncmQiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoic2VrbWFkaWVuXHUwMTJmX3Bpcm1h''@;'; put 'put ''ZGllblx1MDEyZl9hbnRyYWRpZW5cdTAxMmZfdHJlXHUwMTBkaWFkaWVuXHUwMTJmX2tldHZpcnRhZGllblx1MDEyZl9wZW5rdGFkaWVuXHUwMTJmX1x1MDE2MWVcdTAxNjF0YWRpZW5cdTAxMmYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFk''@;'; put 'put ''aWVuaXNfdHJlXHUwMTBkaWFkaWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX1x1MDE2MWVcdTAxNjF0YWRpZW5pcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovZGRkZCBISDptbS99LHdlZWtkYXlzU2hvcnQ6IlNla19QaXJfQW50X1RyZV9LZXRfUGVuX1x1MDE2MGVcdTAxNjEiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46IlNfUF9BX1RfS19Qbl9cdTAxNjAiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLExMTDoi''@;'; put 'put ''WVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0iLExMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dIixsOiJZWVlZLU1NLUREIixsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3Zh''@;'; put 'put ''bC5dIixsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTAxNjBpYW5kaWVuXSBMVCIsbmV4dERheToiW1J5dG9qXSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltWYWthcl0gTFQiLGxhc3RXZWVrOiJb''@;'; put 'put ''UHJhXHUwMTE3anVzXHUwMTJmXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwbyAlcyIscGFzdDoicHJpZVx1MDE2MSAlcyIsczpmdW5jdGlvbiBnKHosTixMLEspe3JldHVybiBOPyJrZWxpb3Mgc2VrdW5kXHUwMTE3cyI6Sz8ia2VsaVx1MDE3MyBzZWt1''@;'; put 'put ''bmRcdTAxN2VpXHUwMTczIjoia2VsaWFzIHNla3VuZGVzIn0sc3M6RixtOkIsbW06RixoOkIsaGg6RixkOkIsZGQ6RixNOkIsTU06Rix5OkIseXk6Rn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1vamkvLG9yZGluYWw6ZnVuY3Rpb24oeil7cmV0dXJuIHorIi1vamkifSx3ZWVr''@;'; put 'put ''Ontkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwzMjYyMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3NzOiJzZWt1bmRlc19zZWt1bmRcdTAxMTNtX3Nla3VuZGVfc2VrdW5kZXMiLnNwbGl0KCJfIiksbToibWluXHUwMTZidGVzX21pblx1MDE2''@;'; put 'put ''YnRcdTAxMTNtX21pblx1MDE2YnRlX21pblx1MDE2YnRlcyIuc3BsaXQoIl8iKSxtbToibWluXHUwMTZidGVzX21pblx1MDE2YnRcdTAxMTNtX21pblx1MDE2YnRlX21pblx1MDE2YnRlcyIuc3BsaXQoIl8iKSxoOiJzdHVuZGFzX3N0dW5kXHUwMTAxbV9zdHVuZGFfc3R1bmRhcyIuc3BsaXQo''@;'; put 'put ''Il8iKSxoaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksZDoiZGllbmFzX2RpZW5cdTAxMDFtX2RpZW5hX2RpZW5hcyIuc3BsaXQoIl8iKSxkZDoiZGllbmFzX2RpZW5cdTAxMDFtX2RpZW5hX2RpZW5hcyIuc3BsaXQoIl8iKSxNOiJtXHUwMTEzbmVc''@;'; put 'put ''dTAxNjFhX21cdTAxMTNuZVx1MDE2MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSxNTToibVx1MDExM25lXHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIikseToiZ2FkYV9nYWRpZW1f''@;'; put 'put ''Z2Fkc19nYWRpIi5zcGxpdCgiXyIpLHl5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIil9O2Z1bmN0aW9uIGcoTyx6LE4pe3JldHVybiBOP3olMTA9PTEmJnolMTAwIT0xMT9PWzJdOk9bM106eiUxMD09MSYmeiUxMDAhPTExP09bMF06T1sxXX1mdW5jdGlvbiBCKE8seixOKXty''@;'; put 'put ''ZXR1cm4gTysiICIrZyhfW05dLE8seil9ZnVuY3Rpb24gdyhPLHosTil7cmV0dXJuIGcoX1tOXSxPLHopfUkuZGVmaW5lTG9jYWxlKCJsdiIse21vbnRoczoiamFudlx1MDEwMXJpc19mZWJydVx1MDEwMXJpc19tYXJ0c19hcHJcdTAxMmJsaXNfbWFpanNfalx1MDE2Ym5panNfalx1MDE2Ymxp''@;'; put 'put ''anNfYXVndXN0c19zZXB0ZW1icmlzX29rdG9icmlzX25vdmVtYnJpc19kZWNlbWJyaXMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWlfalx1MDE2Ym5falx1MDE2YmxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3ZcdTAxMTN0''@;'; put 'put ''ZGllbmFfcGlybWRpZW5hX290cmRpZW5hX3RyZVx1MDE2MWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZLiIsTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NIixMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBISDptbSIsTExMTDoiWVlZWS4gW2dhZGFdIEQu''@;'; put 'put ''IE1NTU0sIGRkZGQsIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTAxNjBvZGllbiBwdWxrc3Rlbl0gTFQiLG5leHREYXk6IltSXHUwMTJidCBwdWxrc3Rlbl0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWxrc3Rlbl0gTFQiLGxhc3REYXk6IltWYWthciBwdWxrc3Rlbl0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJbUGFnXHUwMTAxanVcdTAxNjFcdTAxMDFdIGRkZGQgW3B1bGtzdGVuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicFx1MDExM2MgJXMiLHBhc3Q6InBpcm1zICVzIixzOmZ1bmN0aW9uIFAoTyx6KXtyZXR1cm4gej8iZGFcdTAxN2VhcyBzZWt1bmRlcyI6''@;'; put 'put ''ImRhXHUwMTdlXHUwMTAxbSBzZWt1bmRcdTAxMTNtIn0sc3M6QixtOncsbW06QixoOncsaGg6QixkOncsZGQ6QixNOncsTU06Qix5OncseXk6Qn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9''@;'; put 'put ''LDg1ODY5OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17d29yZHM6e3NzOlsic2VrdW5kIiwic2VrdW5kYSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6''@;'; put 'put ''WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTU06WyJtamVzZWMiLCJtamVzZWNhIiwibWplc2VjaSJdLHl5OlsiZ29kaW5hIiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENh''@;'; put 'put ''c2U6ZnVuY3Rpb24oQix3KXtyZXR1cm4gMT09PUI/d1swXTpCPj0yJiZCPD00P3dbMV06d1syXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKEIsdyxQKXt2YXIgRj1fLndvcmRzW1BdO3JldHVybiAxPT09UC5sZW5ndGg/dz9GWzBdOkZbMV06QisiICIrXy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKEIs''@;'; put 'put ''Ril9fTtJLmRlZmluZUxvY2FsZSgibWUiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9q''@;'; put 'put ''dW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJu''@;'; put 'put ''ZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixM''@;'; put 'put ''OiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzanV0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7''@;'; put 'put ''c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Vd''@;'; put 'put ''IGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRqZWxqZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbdXRvcmth''@;'; put 'put ''XSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmlqZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3RoaXMuZGF5KCldfSxzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0ZSxkOiJkYW4iLGRkOl8udHJh''@;'; put 'put ''bnNsYXRlLE06Im1qZXNlYyIsTU06Xy50cmFuc2xhdGUseToiZ29kaW51Iix5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDM1ODgxOmZ1bmN0aW9uKHVlLFgseSl7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWkiLHttb250aHM6IktvaGktdFx1MDEwMXRlX0h1aS10YW5ndXJ1X1BvdXRcdTAxNmItdGUtcmFuZ2lfUGFlbmdhLXdoXHUwMTAxd2hcdTAxMDFfSGFyYXR1YV9QaXBpcmlfSFx1MDE0ZG5nb2luZ29pX0hlcmUtdHVy''@;'; put 'put ''aS1rXHUwMTRka1x1MDEwMV9NYWh1cnVfV2hpcmluZ2EtXHUwMTAxLW51a3VfV2hpcmluZ2EtXHUwMTAxLXJhbmdpX0hha2loZWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IktvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0hcdTAxNGRuZ29pX0hlcmVfTWFodV9XaGktbnVfV2hpLXJhX0hh''@;'; put 'put ''a2kiLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTRE''@;'; put 'put ''XHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDJ9L2ksd2Vla2RheXM6IlJcdTAxMDF0YXB1X01hbmVfVFx1MDE2YnJlaV9XZW5lcmVpX1RcdTAxMDFpdGVfUGFyYWlyZV9IXHUwMTAxdGFyZWkiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJUYV9NYV9UXHUwMTZiX1dlX1RcdTAxMDFpX1BhX0hcdTAxMDEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtpXSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIHRlaWUgbWFoYW5hLCBpXSBMVCIsbmV4dERheToiW2Fwb3Bv''@;'; put 'put ''IGldIExUIixuZXh0V2VlazoiZGRkZCBbaV0gTFQiLGxhc3REYXk6IltpbmFuYWhpIGldIExUIixsYXN0V2VlazoiZGRkZCBbd2hha2FtdXR1bmdhIGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpIHJvdG8gaSAlcyIscGFzdDoiJXMgaSBtdWEiLHM6InRlIGhc''@;'; put 'put ''dTAxMTNrb25hIHJ1YXJ1YSIsc3M6IiVkIGhcdTAxMTNrb25hIixtOiJoZSBtZW5ldGkiLG1tOiIlZCBtZW5ldGkiLGg6InRlIGhhb3JhIixoaDoiJWQgaGFvcmEiLGQ6ImhlIHJhIixkZDoiJWQgcmEiLE06ImhlIG1hcmFtYSIsTU06IiVkIG1hcmFtYSIseToiaGUgdGF1Iix5eToiJWQgdGF1''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sOTIzOTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtayIse21vbnRo''@;'; put 'put ''czoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1''@;'; put 'put ''MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RcdTA0MzhfXHUwNDU4XHUwNDQzXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQy''@;'; put 'put ''XHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQz''@;'; put 'put ''ZF9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQz''@;'; put 'put ''YVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNh''@;'; put 'put ''X1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0''@;'; put 'put ''MzBcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDM1X1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0''@;'; put 'put ''NDJfXHUwNDQxXHUwNDMwXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RlX1x1MDQzZm9fXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0MzVfXHUwNDNmXHUwNDM1X1x1MDQ0MWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6''@;'; put 'put ''Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzNVx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJcdTA0M2VdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMlx1MDQzZV0gTFQiLG5leHRXZWVrOiJbXHUwNDEyXHUwNDNlXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQzMlx1MDQzZV0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIjtjYXNlIDE6Y2FzZSAyOmNh''@;'; put 'put ''c2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MThcdTA0MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0NDJcdTA0MzhcdTA0M2VcdTA0NDJdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0''@;'; put 'put ''OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzQgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQ0MyBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRc''@;'; put 'put ''dTA0MzgiLG06Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0NDdcdTA0MzBcdTA0NDEi''@;'; put 'put ''LGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLE06Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0''@;'; put 'put ''MzVcdTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiLHk6Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0Mzgi''@;'; put 'put ''fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMCx3PWclMTAwO3JldHVybiAwPT09''@;'; put 'put ''Zz9nKyItXHUwNDM1XHUwNDMyIjowPT09dz9nKyItXHUwNDM1XHUwNDNkIjp3PjEwJiZ3PDIwP2crIi1cdTA0NDJcdTA0MzgiOjE9PT1CP2crIi1cdTA0MzJcdTA0MzgiOjI9PT1CP2crIi1cdTA0NDBcdTA0MzgiOjc9PT1CfHw4PT09Qj9nKyItXHUwNDNjXHUwNDM4IjpnKyItXHUwNDQyXHUw''@;'; put 'put ''NDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sMjExMjY6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtbCIse21vbnRoczoiXHUwZDFjXHUwZDI4XHUwZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyYlx1MGQ0''@;'; put 'put ''Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmVcdTBkM2VcdTBkN2NcdTBkMWFcdTBkNGRcdTBkMWFcdTBkNGRfXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmXHUwZDdkX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBk''@;'; put 'put ''N2FfXHUwZDFjXHUwZDQyXHUwZDMyXHUwZDQ4X1x1MGQxM1x1MGQxN1x1MGQzOFx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZF9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUw''@;'; put 'put ''ZDRiXHUwZDJjXHUwZDdjX1x1MGQyOFx1MGQzNVx1MGQwMlx1MGQyY1x1MGQ3Y19cdTBkMjFcdTBkM2ZcdTBkMzhcdTBkMDJcdTBkMmNcdTBkN2MiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGQxY1x1MGQyOFx1MGQ0MS5fXHUwZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQx''@;'; put 'put ''Ll9cdTBkMmVcdTBkM2VcdTBkN2MuX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1MGQzZi5fXHUwZDJlXHUwZDQ3XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDguX1x1MGQxM1x1MGQxNy5fXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUw''@;'; put 'put ''ZDMxXHUwZDRkXHUwZDMxLl9cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGIuX1x1MGQyOFx1MGQzNVx1MGQwMi5fXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBkMWVcdTBkM2VcdTBkMmZcdTBkMzFcdTBk''@;'; put 'put ''M2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRkXHUwZDE1XHUwZDMzXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQxYVx1MGQ0YVx1MGQzNVx1MGQ0ZFx1MGQzNVx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkMjhcdTBk''@;'; put 'put ''M2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0Nlx1MGQzM1x1MGQ0ZFx1MGQzM1x1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzZcdTBkMjhcdTBkM2ZcdTBk''@;'; put 'put ''MmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDdjX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQ3ZV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRcdTBkMzVfXHUwZDJjXHUwZDQxXHUwZDI3''@;'; put 'put ''XHUwZDdiX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQwMl9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2ZfXHUwZDM2XHUwZDI4XHUwZDNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBkMWVcdTBkM2VfXHUwZDI0XHUwZDNmX1x1MGQxYVx1MGQ0YV9c''@;'; put 'put ''dTBkMmNcdTBkNDFfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlX1x1MGQzNVx1MGQ0Nl9cdTBkMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gLVx1MGQyOFx1MGQ0MSIsTFRTOiJBIGg6bW06c3MgLVx1MGQyOFx1MGQ0MSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1N''@;'; put 'put ''TSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBkMDdcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNGRdIExUIixuZXh0RGF5OiJbXHUw''@;'; put 'put ''ZDI4XHUwZDNlXHUwZDMzXHUwZDQ2XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDMyXHUwZDQ2XSBMVCIsbGFzdFdlZWs6IltcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVdIGRkZGQsIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiLHBhc3Q6IiVzIFx1MGQyZVx1MGQ0MVx1MGQ3Ylx1MGQyYVx1MGQ0ZCIsczoiXHUwZDA1XHUwZDdkXHUwZDJhIFx1MGQyOFx1MGQzZlx1MGQyZVx1MGQzZlx1''@;'; put 'put ''MGQzN1x1MGQxOVx1MGQ0ZFx1MGQxOVx1MGQ3ZSIsc3M6IiVkIFx1MGQzOFx1MGQ0Nlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ3Ylx1MGQyMVx1MGQ0ZCIsbToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQzZlx1MGQyOFx1MGQzZlx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZCIsbW06IiVk''@;'; put 'put ''IFx1MGQyZVx1MGQzZlx1MGQyOFx1MGQzZlx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZCIsaDoiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQyM1x1MGQzZlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ0Mlx1MGQ3YyIsaGg6IiVkIFx1MGQyZVx1MGQyM1x1MGQzZlx1MGQxNVx1MGQ0ZFx1MGQx''@;'; put 'put ''NVx1MGQ0Mlx1MGQ3YyIsZDoiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyNlx1MGQzZlx1MGQzNVx1MGQzOFx1MGQwMiIsZGQ6IiVkIFx1MGQyNlx1MGQzZlx1MGQzNVx1MGQzOFx1MGQwMiIsTToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQzZVx1MGQzOFx1MGQwMiIsTU06IiVkIFx1''@;'; put 'put ''MGQyZVx1MGQzZVx1MGQzOFx1MGQwMiIseToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQzNVx1MGQ3Y1x1MGQzN1x1MGQwMiIseXk6IiVkIFx1MGQzNVx1MGQ3Y1x1MGQzN1x1MGQwMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZnxcdTBkMzBc''@;'; put 'put ''dTBkM2VcdTBkMzVcdTBkM2ZcdTBkMzJcdTBkNDZ8XHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZHxcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDJ8XHUwZDMw''@;'; put 'put ''XHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmL2ksbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI9PT1CJiZnPj00fHwiXHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1''@;'; put 'put ''MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCI9PT1CfHwiXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIj09PUI/ZysxMjpnfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8ND8iXHUwZDMwXHUwZDNl''@;'; put 'put ''XHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmIjpnPDEyPyJcdTBkMzBcdTBkM2VcdTBkMzVcdTBkM2ZcdTBkMzJcdTBkNDYiOmc8MTc/Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiOmc8MjA/Ilx1MGQzNVx1MGQ0OFx1''@;'; put 'put ''MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI6Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiJ9fSl9KHkoOTc1ODYpKX0sNDQ4OTI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oQix3''@;'; put 'put ''LFAsRil7c3dpdGNoKFApe2Nhc2UicyI6cmV0dXJuIHc/Ilx1MDQ0NVx1MDQ0ZFx1MDQzNFx1MDQ0NVx1MDQ0ZFx1MDQzZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2QgXHUwNDQxXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiXHUwNDNkIjtjYXNlInNzIjpyZXR1cm4gQisodz8iIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6IiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJcdTA0M2QiKTtjYXNlIm0iOmNhc2UibW0iOnJl''@;'; put 'put ''dHVybiBCKyh3PyIgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIjoiIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Ylx1MDQzZCIpO2Nhc2UiaCI6Y2FzZSJoaCI6cmV0dXJuIEIrKHc/IiBcdTA0NDZcdTA0MzBcdTA0MzMiOiIgXHUwNDQ2XHUwNDMwXHUwNDMzXHUw''@;'; put 'put ''NDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJkIjpjYXNlImRkIjpyZXR1cm4gQisodz8iIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MCI6IiBcdTA0ZTlcdTA0MzRcdTA0NDBcdTA0MzhcdTA0MzlcdTA0M2QiKTtjYXNlIk0iOmNhc2UiTU0iOnJldHVybiBCKyh3PyIgXHUwNDQxXHUwNDMwXHUwNDQw''@;'; put 'put ''IjoiIFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQ0Ylx1MDQzZCIpO2Nhc2UieSI6Y2FzZSJ5eSI6cmV0dXJuIEIrKHc/IiBcdTA0MzZcdTA0MzhcdTA0M2IiOiIgXHUwNDM2XHUwNDM4XHUwNDNiXHUwNDM4XHUwNDM5XHUwNDNkIik7ZGVmYXVsdDpyZXR1cm4gQn19SS5kZWZpbmVMb2NhbGUoIm1u''@;'; put 'put ''Iix7bW9udGhzOiJcdTA0MWRcdTA0NGRcdTA0MzNcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQyNVx1MDQzZVx1MDQ1MVx1MDQ0MFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBf''@;'; put 'put ''XHUwNDEzXHUwNDQzXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTRcdTA0ZTlcdTA0NDBcdTA0ZTlcdTA0MzJcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDQwX1x1MDQyMlx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE3XHUwNDQzXHUwNDQwXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MF9cdTA0MTRcdTA0M2VcdTA0M2JcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxZFx1MDQzMFx1MDQzOVx1MDQzY1x1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE1XHUw''@;'; put 'put ''NDQxXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMlx1MDQzMFx1''@;'; put 'put ''MDQzZCBcdTA0M2RcdTA0NGRcdTA0MzNcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMlx1MDQzMFx1MDQzZCBcdTA0NDVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBc''@;'; put 'put ''dTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxIFx1MDQ0MVx1MDQzMFx1MDQ0MF8yIFx1MDQ0MVx1MDQzMFx1MDQ0MF8zIFx1MDQ0MVx1MDQzMFx1MDQ0MF80IFx1MDQ0MVx1MDQzMFx1MDQ0MF81IFx1MDQ0MVx1MDQzMFx1MDQ0MF82IFx1MDQ0MVx1''@;'; put 'put ''MDQzMFx1MDQ0MF83IFx1MDQ0MVx1MDQzMFx1MDQ0MF84IFx1MDQ0MVx1MDQzMFx1MDQ0MF85IFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMCBcdTA0NDFcdTA0MzBcdTA0NDBfMTEgXHUwNDQxXHUwNDMwXHUwNDQwXzEyIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLHdlZWtkYXlzOiJcdTA0MWRcdTA0NGZcdTA0M2NfXHUwNDE0XHUwNDMwXHUwNDMyXHUwNDMwXHUwNDMwX1x1MDQxY1x1MDQ0Zlx1MDQzM1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MWJcdTA0NDVcdTA0MzBcdTA0MzNcdTA0MzJcdTA0MzBfXHUwNDFmXHUwNGFmXHUwNDQwXHUwNDRk''@;'; put 'put ''XHUwNDMyX1x1MDQxMVx1MDQzMFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzZF9cdTA0MTFcdTA0NGZcdTA0M2NcdTA0MzFcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMl9cdTA0MWNcdTA0NGZcdTA0MzNfXHUwNDFi''@;'; put 'put ''XHUwNDQ1XHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MF9cdTA0MTFcdTA0MzBcdTA0MzBfXHUwNDExXHUwNDRmXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MWRcdTA0NGZfXHUwNDE0XHUwNDMwX1x1MDQxY1x1MDQ0Zl9cdTA0MWJcdTA0NDVfXHUwNDFmXHUwNGFmX1x1MDQx''@;'; put 'put ''MVx1MDQzMF9cdTA0MTFcdTA0NGYiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQiLExMTDoi''@;'; put 'put ''WVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA0YWVcdTA0ZTh8XHUwNGFlXHUwNDI1L2ksaXNQTTpmdW5j''@;'; put 'put ''dGlvbihCKXtyZXR1cm4iXHUwNGFlXHUwNDI1Ij09PUJ9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQjwxMj8iXHUwNGFlXHUwNGU4IjoiXHUwNGFlXHUwNDI1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0ZThcdTA0M2RcdTA0ZTlcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDBd''@;'; put 'put ''IExUIixuZXh0RGF5OiJbXHUwNDFjXHUwNDMwXHUwNDQwXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQ4XSBMVCIsbmV4dFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NGRcdTA0NDVdIGRkZGQgTFQiLGxhc3REYXk6IltcdTA0ZThcdTA0NDdcdTA0MzhcdTA0MzNcdTA0MzRcdTA0ZTlcdTA0NDBdIExU''@;'; put 'put ''IixsYXN0V2VlazoiW1x1MDRlOFx1MDQzZFx1MDQzM1x1MDRlOVx1MDQ0MFx1MDQ0MVx1MDRlOVx1MDQzZF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM0XHUwNDMwXHUwNDQwXHUwNDMwXHUwNDMwIixwYXN0OiIlcyBcdTA0ZTlcdTA0M2Nc''@;'; put 'put ''dTA0M2RcdTA0ZTkiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MC8sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3N3aXRjaCh3KXtjYXNlImQi''@;'; put 'put ''OmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBCKyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwIjtkZWZhdWx0OnJldHVybiBCfX19KX0oeSg5NzU4NikpfSw1OTA4MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4''@;'; put 'put ''IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LGc9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2''@;'; put 'put ''YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn07ZnVuY3Rpb24gQihQLEYsTyx6KXt2YXIgTj0iIjtpZihGKXN3aXRjaChPKXtjYXNlInMiOk49Ilx1MDkxNVx1MDkzZVx1MDkzOVx1MDk0MCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJc''@;'; put 'put ''dTA5MjYiO2JyZWFrO2Nhc2Uic3MiOk49IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJtIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmIjticmVhaztjYXNlIm1tIjpOPSIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5''@;'; put 'put ''M2ZcdTA5MWZcdTA5NDciO2JyZWFrO2Nhc2UiaCI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyNFx1MDkzZVx1MDkzOCI7YnJlYWs7Y2FzZSJoaCI6Tj0iJWQgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImQiOk49Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzgiO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiZGQiOk49IiVkIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJNIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTNlIjticmVhaztjYXNlIk1NIjpOPSIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NDciO2JyZWFr''@;'; put 'put ''O2Nhc2UieSI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyI7YnJlYWs7Y2FzZSJ5eSI6Tj0iJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTQ3In1lbHNlIHN3aXRjaChPKXtjYXNlInMiOk49Ilx1MDkxNVx1MDkzZVx1MDkzOVx1MDk0MCBcdTA5MzhcdTA5''@;'; put 'put ''NDdcdTA5MTVcdTA5MDJcdTA5MjZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2Uic3MiOk49IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJtIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFm''@;'; put 'put ''XHUwOTNlIjticmVhaztjYXNlIm1tIjpOPSIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiaCI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNFx1MDkzZVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJoaCI6Tj0iJWQgXHUwOTI0XHUw''@;'; put 'put ''OTNlXHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlImQiOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzhcdTA5M2UiO2JyZWFrO2Nhc2UiZGQiOk49IiVkIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJNIjpO''@;'; put 'put ''PSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlIjticmVhaztjYXNlIk1NIjpOPSIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UieSI6Tj0iXHUwOTBmXHUwOTE1''@;'; put 'put ''XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDkzZSI7YnJlYWs7Y2FzZSJ5eSI6Tj0iJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlXHUwOTAyIn1yZXR1cm4gTi5yZXBsYWNlKC8lZC9pLFApfUkuZGVmaW5lTG9jYWxlKCJtciIse21vbnRoczoiXHUwOTFjXHUwOTNl''@;'; put 'put ''XHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmXHUwOTMy''@;'; put 'put ''X1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4X1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUw''@;'; put 'put ''OTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5f''@;'; put 'put ''XHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEuX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTQ3Ll9cdTA5MWNcdTA5NDJcdTA5MjguX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDk0OC5fXHUw''@;'; put 'put ''OTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1''@;'; put 'put ''MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM19cdTA5MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5Mjhc''@;'; put 'put ''dTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MzVcdTA5M2VcdTA5''@;'; put 'put ''MWNcdTA5MjRcdTA5M2UiLExUUzoiQSBoOm1tOnNzIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMTExMOiJkZGRkLCBE''@;'; put 'put ''IE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkwOVx1MDkyNlx1MDk0ZFx1MDkyZlx1MDkzZV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToi''@;'; put 'put ''W1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJlXHUwOTNlXHUwOTE3XHUwOTQwXHUwOTMyXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5MjdcdTA5NGRcdTA5MmZcdTA5NDciLHBhc3Q6IiVzXHUwOTJhXHUw''@;'; put 'put ''OTQyXHUwOTMwXHUwOTRkXHUwOTM1XHUwOTQwIixzOkIsc3M6QixtOkIsbW06QixoOkIsaGg6QixkOkIsZGQ6QixNOkIsTU06Qix5OkIseXk6Qn0scHJlcGFyc2U6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2''@;'; put 'put ''ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihGKXtyZXR1cm4gZ1tGXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFApe3JldHVybiBQLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUw''@;'; put 'put ''OTQ3fFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDB8XHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MC8sbWVyaWRp''@;'; put 'put ''ZW1Ib3VyOmZ1bmN0aW9uKFAsRil7cmV0dXJuIDEyPT09UCYmKFA9MCksIlx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI9PT1GfHwiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIj09PUY/UDoiXHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIj09PUZ8fCJc''@;'; put 'put ''dTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09Rnx8Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCI9PT1GP1A+PTEyP1A6UCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUD49MCYmUDw2PyJcdTA5''@;'; put 'put ''MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDciOlA8MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6UDwxNz8iXHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIjpQPDIwPyJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAi''@;'; put 'put ''OiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwyNTk1MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1zLW15Iix7bW9udGhzOiJKYW51YXJpX0Zl''@;'; put 'put ''YnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''OiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8dGVuZ2Fo''@;'; put 'put ''YXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksInBhZ2kiPT09Qj9nOiJ0ZW5nYWhhcmkiPT09Qj9nPj0xMT9nOmcrMTI6InBldGFuZyI9PT1CfHwibWFsYW0iPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24o''@;'; put 'put ''ZyxCLHcpe3JldHVybiBnPDExPyJwYWdpIjpnPDE1PyJ0ZW5nYWhhcmkiOmc8MTk/InBldGFuZyI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltFc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERh''@;'; put 'put ''eToiW0tlbG1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlcGFzIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGVwYXMiLHM6ImJlYmVyYXBhIHNhYXQiLHNzOiIlZCBzYWF0IixtOiJzZW1pbml0''@;'; put 'put ''IixtbToiJWQgbWluaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDcwMzk5OmZ1bmN0aW9uKHVl''@;'; put 'put ''LFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXMiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1''@;'; put 'put ''bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhI''@;'; put 'put ''Lm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwicGFnaSI9PT1CP2c6InRlbmdhaGFyaSI9PT1C''@;'; put 'put ''P2c+PTExP2c6ZysxMjoicGV0YW5nIj09PUJ8fCJtYWxhbSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc8MTE/InBhZ2kiOmc8MTU/InRlbmdhaGFyaSI6ZzwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5p''@;'; put 'put ''IHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJk''@;'; put 'put ''YWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0''@;'; put 'put ''YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNzk5MDI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtdCIse21vbnRoczoiSmFubmFyX0ZyYXJfTWFyenVfQXByaWxfTWVqanVfXHUw''@;'; put 'put ''MTIwdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpXHUwMTBiZW1icnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GcmFfTWFyX0Fwcl9NZWpfXHUwMTIwdW5fTHVsX0F3d19TZXRfT3R0X05vdl9EaVx1MDEwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiSWwtXHUwMTI2YWRkX0l0LVRuZWpuX0l0LVRsaWV0YV9MLUVyYmdcdTAxMjdhX0lsLVx1MDEyNmFtaXNfSWwtXHUwMTIwaW1nXHUwMTI3YV9Jcy1TaWJ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDEyNmFkX1RuZV9UbGlfRXJiX1x1MDEyNmFtX1x1MDEyMGltX1NpYiIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMTI2YV9Ubl9UbF9Fcl9cdTAxMjZhX1x1MDEyMGlfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWxsdW0gZmlsLV1MVCIsbmV4dERheToiW0dcdTAxMjdhZGEgZmlsLV1MVCIsbmV4dFdlZWs6ImRkZGQgW2ZpbC1dTFQiLGxhc3REYXk6IltJbC1iaWVyYVx1MDEyNyBmaWwtXUxUIixsYXN0V2Vl''@;'; put 'put ''azoiZGRkZCBbbGkgZ1x1MDEyN2FkZGFdIFtmaWwtXUxUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJmXHUyMDE5ICVzIixwYXN0OiIlcyBpbHUiLHM6ImZ0aXQgc2Vrb25kaSIsc3M6IiVkIHNla29uZGkiLG06Im1pbnV0YSIsbW06IiVkIG1pbnV0aSIsaDoic2llZ1x1''@;'; put 'put ''MDEyN2EiLGhoOiIlZCBzaWVnXHUwMTI3YXQiLGQ6Ilx1MDEyMXVybmF0YSIsZGQ6IiVkIFx1MDEyMXJhbmV0IixNOiJ4YWhhciIsTU06IiVkIHhodXIiLHk6InNlbmEiLHl5OiIlZCBzbmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3''@;'; put 'put ''ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3Mjk4NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MTA0MSIsMjoiXHUxMDQyIiwzOiJcdTEwNDMiLDQ6Ilx1MTA0NCIsNToiXHUxMDQ1Iiw2OiJcdTEwNDYiLDc6Ilx1MTA0NyIs''@;'; put 'put ''ODoiXHUxMDQ4Iiw5OiJcdTEwNDkiLDA6Ilx1MTA0MCJ9LGc9eyJcdTEwNDEiOiIxIiwiXHUxMDQyIjoiMiIsIlx1MTA0MyI6IjMiLCJcdTEwNDQiOiI0IiwiXHUxMDQ1IjoiNSIsIlx1MTA0NiI6IjYiLCJcdTEwNDciOiI3IiwiXHUxMDQ4IjoiOCIsIlx1MTA0OSI6IjkiLCJcdTEwNDAiOiIw''@;'; put 'put ''In07SS5kZWZpbmVMb2NhbGUoIm15Iix7bW9udGhzOiJcdTEwMDdcdTEwMTRcdTEwM2FcdTEwMTRcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE2XHUxMDMxXHUxMDE2XHUxMDMxXHUxMDJjXHUxMDNhXHUxMDFkXHUxMDJiXHUxMDFiXHUxMDJlX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEw''@;'; put 'put ''MjdcdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMDdcdTEwMzBcdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjXHUxMDAyXHUxMDJmXHUxMDEwXHUxMDNhX1x1MTAwNVx1MTAwMFx1MTAzYVx1MTAxMFx1''@;'; put 'put ''MTAwNFx1MTAzYVx1MTAxOFx1MTAyY19cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FcdTEwMTBcdTEwMmRcdTEwMmZcdTEwMThcdTEwMmNfXHUxMDE0XHUxMDJkXHUxMDJmXHUxMDFkXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAxMlx1MTAyZVx1MTAwN1x1MTAwNFx1MTAzYVx1''@;'; put 'put ''MTAxOFx1MTAyYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMDA3XHUxMDE0XHUxMDNhX1x1MTAxNlx1MTAzMV9cdTEwMTlcdTEwMTBcdTEwM2FfXHUxMDE1XHUxMDNjXHUxMDJlX1x1MTAxOVx1MTAzMV9cdTEwMDdcdTEwM2RcdTEwMTRcdTEwM2FfXHUxMDFjXHUxMDJkXHUxMDJmXHUx''@;'; put 'put ''MDA0XHUxMDNhX1x1MTAxZVx1MTAzY19cdTEwMDVcdTEwMDBcdTEwM2FfXHUxMDIxXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNhX1x1MTAxNFx1MTAyZFx1MTAyZl9cdTEwMTJcdTEwMmUiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAwMlx1''@;'; put 'put ''MTAxNFx1MTAzZFx1MTAzMV9cdTEwMTBcdTEwMTRcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMWNcdTEwMmNfXHUxMDIxXHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDJiX1x1MTAxN1x1MTAyZlx1MTAxMlx1MTAzOVx1MTAxM1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNc''@;'; put 'put ''dTEwMWVcdTEwMTVcdTEwMTBcdTEwMzFcdTEwMzhfXHUxMDFlXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAwNVx1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDFjXHUxMDJjX1x1MTAwMlx1MTAyYl9cdTEwMWZc''@;'; put 'put ''dTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAxZVx1MTAzMVx1MTAyY19cdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2Nc''@;'; put 'put ''dTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTAxYVx1MTAxNFx1MTAzMS5dIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0RGF5OiJbXHUxMDE5XHUxMDE0XHUxMDAwXHUxMDNhXHUxMDE2XHUxMDNjXHUxMDE0XHUxMDNhXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLGxhc3REYXk6IltcdTEwMTlcdTEwMTRcdTEwMzEuXHUxMDAwXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdFdlZWs6IltcdTEwMTVcdTEwM2NcdTEwMmVcdTEwMzhcdTEwMDFcdTEwMzJcdTEwMzdcdTEwMWVcdTEw''@;'; put 'put ''MzFcdTEwMmNdIGRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MTAxY1x1MTAyY1x1MTAxOVx1MTAwYVx1MTAzYVx1MTAzNyAlcyBcdTEwMTlcdTEwM2VcdTEwMmMiLHBhc3Q6Ilx1MTAxY1x1MTAzZFx1MTAxNFx1MTAz''@;'; put 'put ''YVx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyYyAlcyBcdTEwMDAiLHM6Ilx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzYS5cdTEwMjFcdTEwMTRcdTEwMGFcdTEwM2FcdTEwMzhcdTEwMDRcdTEwMWFcdTEwM2EiLHNzOiIlZCBcdTEwMDVcdTEwMDBcdTEwMzlc''@;'; put 'put ''dTEwMDBcdTEwMTRcdTEwMzdcdTEwM2EiLG06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsbW06IiVkIFx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsaDoiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixo''@;'; put 'put ''aDoiJWQgXHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixkOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMWJcdTEwMDBcdTEwM2EiLGRkOiIlZCBcdTEwMWJcdTEwMDBcdTEwM2EiLE06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYyIsTU06IiVkIFx1MTAxYyIseToiXHUxMDEwXHUxMDA1XHUxMDNh''@;'; put 'put ''XHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIix5eToiJWQgXHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MTA0MVx1MTA0Mlx1MTA0M1x1MTA0NFx1MTA0NVx1MTA0Nlx1MTA0N1x1MTA0OFx1MTA0OVx1MTA0MF0vZyxm''@;'; put 'put ''dW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjc4NTk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJuYiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21h''@;'; put 'put ''cnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJzXHhmOC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sXHhmOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1t''@;'; put 'put ''OnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBISDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHREYXk6IltpIG1vcmdlbiBrbC5d''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQiLGxhc3RXZWVrOiJbZm9ycmlnZV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJub2VuIHNla3Vu''@;'; put 'put ''ZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0dCBtaW51dHQiLG1tOiIlZCBtaW51dHRlciIsaDoiXHhlOW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiJceGU5biBkYWciLGRkOiIlZCBkYWdlciIsdzoiXHhlOW4gdWtlIix3dzoiJWQgdWtlciIsTToiXHhlOW4gbVx4ZTVuZWQiLE1NOiIlZCBt''@;'; put 'put ''XHhlNW5lZGVyIix5OiJldHQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwxMzY0MjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LGc9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMi''@;'; put 'put ''LCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn07SS5kZWZpbmVMb2NhbGUoIm5lIix7bW9udGhzOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3''@;'; put 'put ''XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5''@;'; put 'put ''M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM3XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTJkXHUw''@;'; put 'put ''OTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkz''@;'; put 'put ''ZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDFcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4Ll9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZi5fXHUw''@;'; put 'put ''OTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDcuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0Ny4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTA3XHUwOTI0XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkz''@;'; put 'put ''OFx1MDk0Ylx1MDkyZVx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzJcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5''@;'; put 'put ''MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkwN1x1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MTlcdTA5''@;'; put 'put ''NGRcdTA5MTdcdTA5MzIuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmLl9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDkyOFx1MDkzZi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNi5fXHUwOTM4XHUwOTRiLl9cdTA5''@;'; put 'put ''MmVcdTA5MDIuX1x1MDkyY1x1MDk0MS5fXHUwOTJjXHUwOTNmLl9cdTA5MzZcdTA5NDEuX1x1MDkzNi4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBXHUwOTE1''@;'; put 'put ''XHUwOTRiIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBXHUwOTE1XHUwOTRiIGg6''@;'; put 'put ''bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0''@;'; put 'put ''OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmfFx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOHxcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5Mzhc''@;'; put 'put ''dTA5NGJ8XHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIj09PVA/dzw0P3c6dysxMjoiXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ij09PVA/dzoiXHUw''@;'; put 'put ''OTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4XHUwOTRiIj09PVA/dz49MTA/dzp3KzEyOiJcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDM/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiI6dzwxMj8i''@;'; put 'put ''XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ijp3PDE2PyJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiOnc8MjA/Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUw''@;'; put 'put ''OTFjXSBMVCIsbmV4dERheToiW1x1MDkyZFx1MDk0Ylx1MDkzMlx1MDkzZl0gTFQiLG5leHRXZWVrOiJbXHUwOTA2XHUwOTA5XHUwOTAxXHUwOTI2XHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTM5XHUwOTNmXHUwOTFjXHUwOTRiXSBMVCIsbGFzdFdlZWs6IltcdTA5MTdcdTA5''@;'; put 'put ''MGZcdTA5MTVcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUwOTNlIixwYXN0OiIlcyBcdTA5MDVcdTA5MTdcdTA5M2VcdTA5MjFcdTA5M2YiLHM6Ilx1MDkxNVx1MDk0N1x1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5''@;'; put 'put ''MzdcdTA5MjMiLHNzOiIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5NDdcdTA5MjNcdTA5NGRcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDdcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDdcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBc''@;'; put 'put ''dTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5''@;'; put 'put ''M2ZcdTA5MjhcdTA5M2UiLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLHk6Ilx1MDkwZlx1MDkxNSBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5MzciLHl5OiIlZCBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5MzcifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw5''@;'; put 'put ''OTg3NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBf''@;'; put 'put ''b2t0X25vdl9kZWMiLnNwbGl0KCJfIiksQj1bL15qYW4vaSwvXmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSx3PS9eKGphbnVhcml8ZmVi''@;'; put 'put ''cnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pO0kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJubC1iZSIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0''@;'; put 'put ''KE8pP2dbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxk''@;'; put 'put ''ZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNl''@;'; put 'put ''OkIsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19k''@;'; put 'put ''b192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5''@;'; put 'put ''XHhlOW4gZGFnIixkZDoiJWQgZGFnZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlceGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihGKXtyZXR1cm4gRiso''@;'; put 'put ''MT09PUZ8fDg9PT1GfHxGPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjU0NDE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAu''@;'; put 'put ''X29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLGc9Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLEI9Wy9eamFuL2ksL15mZWIvaSwvXihtYWFydHxtcnRcLj8pJC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1''@;'; put 'put ''bFtpLl0/JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0sdz0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFw''@;'; put 'put ''clwuP3xqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaTtJLmRlZmluZUxvY2FsZSgibmwiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNl''@;'; put 'put ''bWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLE8pe3JldHVybiBGPy8tTU1NLS8udGVzdChPKT9nW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVh''@;'; put 'put ''cml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98bWVpfGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xu''@;'; put 'put ''b3ZcLj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Inpv''@;'; put 'put ''Ll9tYS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29fZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdmFuZGFhZyBvbV0gTFQiLG5leHREYXk6Ilttb3JnZW4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJb''@;'; put 'put ''Z2lzdGVyZW4gb21dIExUIixsYXN0V2VlazoiW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvdmVyICVzIixwYXN0OiIlcyBnZWxlZGVuIixzOiJlZW4gcGFhciBzZWNvbmRlbiIsc3M6IiVkIHNlY29uZGVuIixtOiJceGU5XHhl''@;'; put 'put ''OW4gbWludXV0IixtbToiJWQgbWludXRlbiIsaDoiXHhlOVx4ZTluIHV1ciIsaGg6IiVkIHV1ciIsZDoiXHhlOVx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VuIix3OiJceGU5XHhlOW4gd2VlayIsd3c6IiVkIHdla2VuIixNOiJceGU5XHhlOW4gbWFhbmQiLE1NOiIlZCBtYWFuZGVuIix5OiJceGU5''@;'; put 'put ''XHhlOW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oRil7cmV0dXJuIEYrKDE9PT1GfHw4PT09Rnx8Rj49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgx''@;'; put 'put ''MzExOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibm4iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic3VuZGFnX21ceGU1bmRhZ190eXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFn''@;'; put 'put ''X2xhdXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3UuX21ceGU1Ll90eS5fb24uX3RvLl9mci5fbGF1LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTVfdHlfb25fdG9fZnJfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJIGRhZyBrbG9ra2FdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbSSBtb3Jnb24ga2xva2thXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb2trYV0gTFQiLGxhc3REYXk6IltJIGdceGU1ciBrbG9ra2FdIExUIixsYXN0V2VlazoiW0ZceGY4cmVnXHhlNWFuZGVdIGRkZGQgW2tsb2trYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRhbiIsczoibm9rcmUgc2VrdW5kIixzczoiJWQgc2VrdW5kIixtOiJlaXQgbWludXR0IixtbToiJWQgbWludXR0IixoOiJlaW4gdGltZSIsaGg6IiVkIHRpbWFyIixkOiJlaW4gZGFnIixkZDoiJWQgZGFnYXIiLHc6ImVpIHZla2UiLHd3OiIl''@;'; put 'put ''ZCB2ZWtlciIsTToiZWluIG1ceGU1bmFkIixNTToiJWQgbVx4ZTVuYWRlciIseToiZWl0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNzI1Njc6ZnVu''@;'; put 'put ''Y3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJvYy1sbmMiLHttb250aHM6e3N0YW5kYWxvbmU6ImdlbmlceGU4cl9mZWJyaVx4ZThyX21hclx4ZTdfYWJyaWxfbWFpX2p1bmhfanVsaGV0X2Fnb3N0X3NldGVtYnJlX29jdFx4ZjJicmVfbm92''@;'; put 'put ''ZW1icmVfZGVjZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5pXHhlOHJfZGUgZmVicmlceGU4cl9kZSBtYXJceGU3X2QnYWJyaWxfZGUgbWFpX2RlIGp1bmhfZGUganVsaGV0X2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3RceGYyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlIi5z''@;'; put 'put ''cGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpX2p1bmhfanVsaC5fYWdvLl9zZXQuX29jdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWVuZ2Vf''@;'; put 'put ''ZGlsdW5zX2RpbWFyc19kaW1ceGU4Y3Jlc19kaWpceGYydXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5fZG0uX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZG1fZGNfZGpfZHZfZHMiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoiRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsOiJEIE1NTSBZWVlZ''@;'; put 'put ''LCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt1XHhlOGkgYV0gTFQiLG5leHREYXk6IltkZW1hbiBhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FdIExUIixsYXN0RGF5OiJb''@;'; put 'put ''aVx4ZThyIGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzc2F0IGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bmFzIHNlZ29uZGFzIixzczoiJWQgc2Vnb25kYXMiLG06InVuYSBtaW51dGEiLG1tOiIlZCBt''@;'; put 'put ''aW51dGFzIixoOiJ1bmEgb3JhIixoaDoiJWQgb3JhcyIsZDoidW4gam9ybiIsZGQ6IiVkIGpvcm5zIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24oZyxCKXt2YXIgdz0xPT09Zz8iciI6Mj09PWc/Im4iOjM9PT1nPyJyIjo0PT09Zz8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1CfHwiVyI9PT1CKSYmKHc9ImEiKSxnK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDU2OTYyOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0''@;'; put 'put ''aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwYTY3IiwyOiJcdTBhNjgiLDM6Ilx1MGE2OSIsNDoiXHUwYTZhIiw1OiJcdTBhNmIiLDY6Ilx1MGE2YyIsNzoiXHUwYTZkIiw4OiJcdTBhNmUiLDk6Ilx1MGE2ZiIsMDoiXHUwYTY2In0sZz17Ilx1MGE2NyI6IjEiLCJcdTBhNjgiOiIy''@;'; put 'put ''IiwiXHUwYTY5IjoiMyIsIlx1MGE2YSI6IjQiLCJcdTBhNmIiOiI1IiwiXHUwYTZjIjoiNiIsIlx1MGE2ZCI6IjciLCJcdTBhNmUiOiI4IiwiXHUwYTZmIjoiOSIsIlx1MGE2NiI6IjAifTtJLmRlZmluZUxvY2FsZSgicGEtaW4iLHttb250aHM6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1''@;'; put 'put ''MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEw''@;'; put 'put ''OF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJcdTBhMWNcdTBhMjhcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJiXHUwYTNjXHUwYTMwXHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyZVx1MGEzZVx1MGEzMFx1MGExYV9cdTBhMDVcdTBhMmFcdTBhNGRcdTBhMzBcdTBhNDhcdTBhMzJfXHUwYTJlXHUwYTA4X1x1MGEx''@;'; put 'put ''Y1x1MGE0Mlx1MGEyOF9cdTBhMWNcdTBhNDFcdTBhMzJcdTBhM2VcdTBhMDhfXHUwYTA1XHUwYTE3XHUwYTM4XHUwYTI0X1x1MGEzOFx1MGEyNFx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMDVcdTBhMTVcdTBhMjRcdTBhNDJcdTBhMmNcdTBhMzBfXHUwYTI4XHUwYTM1XHUwYTcwXHUwYTJjXHUw''@;'; put 'put ''YTMwX1x1MGEyNlx1MGEzOFx1MGE3MFx1MGEyY1x1MGEzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwYTEwXHUwYTI0XHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGE0Ylx1MGEyZVx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJcdTBhMzVcdTBhM2VcdTBh''@;'; put 'put ''MzBfXHUwYTJjXHUwYTQxXHUwYTI3XHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzNVx1MGE0MFx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhNzFcdTBhMTVcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwXHUwYTFhXHUw''@;'; put 'put ''YTMwXHUwYTM1XHUwYTNlXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGExMFx1MGEyNF9cdTBhMzhcdTBhNGJcdTBhMmVfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyX1x1MGEyY1x1MGE0MVx1MGEyN19cdTBhMzVcdTBhNDBcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTQxXHUw''@;'; put 'put ''YTE1XHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBh''@;'; put 'put ''M2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTFRTOiJBIGg6bW06c3MgXHUwYTM1XHUwYTFjXHUwYTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBhMDVcdTBhMWNdIExUIixuZXh0RGF5OiJbXHUwYTE1XHUwYTMy''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6IltcdTBhMDVcdTBhMTdcdTBhMzJcdTBhM2VdIGRkZGQsIExUIixsYXN0RGF5OiJbXHUwYTE1XHUwYTMyXSBMVCIsbGFzdFdlZWs6IltcdTBhMmFcdTBhM2ZcdTBhMWJcdTBhMzJcdTBhNDddIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiIlcyBcdTBhMzVcdTBhM2ZcdTBhNzFcdTBhMWEiLHBhc3Q6IiVzIFx1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0NyIsczoiXHUwYTE1XHUwYTQxXHUwYTFkIFx1MGEzOFx1MGExNVx1MGEzZlx1MGE3MFx1MGExZiIsc3M6IiVkIFx1MGEzOFx1MGExNVx1MGEzZlx1MGE3MFx1MGEx''@;'; put 'put ''ZiIsbToiXHUwYTA3XHUwYTE1IFx1MGEyZVx1MGEzZlx1MGE3MFx1MGExZiIsbW06IiVkIFx1MGEyZVx1MGEzZlx1MGE3MFx1MGExZiIsaDoiXHUwYTA3XHUwYTcxXHUwYTE1IFx1MGExOFx1MGE3MFx1MGExZlx1MGEzZSIsaGg6IiVkIFx1MGExOFx1MGE3MFx1MGExZlx1MGE0NyIsZDoiXHUw''@;'; put 'put ''YTA3XHUwYTcxXHUwYTE1IFx1MGEyNlx1MGEzZlx1MGEyOCIsZGQ6IiVkIFx1MGEyNlx1MGEzZlx1MGEyOCIsTToiXHUwYTA3XHUwYTcxXHUwYTE1IFx1MGEyZVx1MGEzOVx1MGE0MFx1MGEyOFx1MGEzZSIsTU06IiVkIFx1MGEyZVx1MGEzOVx1MGE0MFx1MGEyOFx1MGE0NyIseToiXHUwYTA3''@;'; put 'put ''XHUwYTcxXHUwYTE1IFx1MGEzOFx1MGEzZVx1MGEzMiIseXk6IiVkIFx1MGEzOFx1MGEzZVx1MGEzMiJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBhNjdcdTBhNjhcdTBhNjlcdTBhNmFcdTBhNmJcdTBhNmNcdTBhNmRcdTBhNmVcdTBhNmZcdTBhNjZdL2cs''@;'; put 'put ''ZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGEzMFx1MGEzZVx1MGEyNHxcdTBhMzhcdTBhMzVcdTBhNDdcdTBhMzB8XHUwYTI2''@;'; put 'put ''XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwfFx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGEzMFx1MGEzZVx1MGEyNCI9PT1QP3c8ND93OncrMTI6Ilx1MGEzOFx1MGEzNVx1MGE0N1x1MGEz''@;'; put 'put ''MCI9PT1QP3c6Ilx1MGEyNlx1MGE0MVx1MGEyYVx1MGEzOVx1MGEzZlx1MGEzMCI9PT1QP3c+PTEwP3c6dysxMjoiXHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTBhMzBcdTBhM2VcdTBhMjQi''@;'; put 'put ''Onc8MTA/Ilx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMCI6dzwxNz8iXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIjp3PDIwPyJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiOiJcdTBhMzBcdTBhM2VcdTBhMjQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSw2''@;'; put 'put ''MTA2MzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89InN0eWN6ZVx1MDE0NF9sdXR5X21hcnplY19rd2llY2llXHUwMTQ0X21hal9jemVyd2llY19saXBpZWNfc2llcnBpZVx1MDE0NF93cnplc2llXHUwMTQ0X3BhXHUwMTdhZHppZXJuaWtfbGlzdG9w''@;'; put 'put ''YWRfZ3J1ZHppZVx1MDE0NCIuc3BsaXQoIl8iKSxnPSJzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dpZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemVcdTAxNWJuaWFfcGFcdTAxN2Fkemllcm5pa2FfbGlzdG9wYWRhX2dydWRuaWEiLnNwbGl0KCJfIiksQj1bL15zdHkvaSwv''@;'; put 'put ''Xmx1dC9pLC9ebWFyL2ksL15rd2kvaSwvXm1hai9pLC9eY3plL2ksL15saXAvaSwvXnNpZS9pLC9ed3J6L2ksL15wYVx1MDE3YS9pLC9ebGlzL2ksL15ncnUvaV07ZnVuY3Rpb24gdyhPKXtyZXR1cm4gTyUxMDw1JiZPJTEwPjEmJn5+KE8vMTApJTEwIT0xfWZ1bmN0aW9uIFAoTyx6LE4pe3Zh''@;'; put 'put ''ciBMPU8rIiAiO3N3aXRjaChOKXtjYXNlInNzIjpyZXR1cm4gTCsodyhPKT8ic2VrdW5keSI6InNla3VuZCIpO2Nhc2UibSI6cmV0dXJuIHo/Im1pbnV0YSI6Im1pbnV0XHUwMTE5IjtjYXNlIm1tIjpyZXR1cm4gTCsodyhPKT8ibWludXR5IjoibWludXQiKTtjYXNlImgiOnJldHVybiB6PyJn''@;'; put 'put ''b2R6aW5hIjoiZ29kemluXHUwMTE5IjtjYXNlImhoIjpyZXR1cm4gTCsodyhPKT8iZ29kemlueSI6ImdvZHppbiIpO2Nhc2Uid3ciOnJldHVybiBMKyh3KE8pPyJ0eWdvZG5pZSI6InR5Z29kbmkiKTtjYXNlIk1NIjpyZXR1cm4gTCsodyhPKT8ibWllc2lcdTAxMDVjZSI6Im1pZXNpXHUwMTE5''@;'; put 'put ''Y3kiKTtjYXNlInl5IjpyZXR1cm4gTCsodyhPKT8ibGF0YSI6ImxhdCIpfX1JLmRlZmluZUxvY2FsZSgicGwiLHttb250aHM6ZnVuY3Rpb24oTyx6KXtyZXR1cm4gTz8vRCBNTU1NLy50ZXN0KHopP2dbTy5tb250aCgpXTpfW08ubW9udGgoKV06X30sbW9udGhzU2hvcnQ6InN0eV9sdXRfbWFy''@;'; put 'put ''X2t3aV9tYWpfY3plX2xpcF9zaWVfd3J6X3BhXHUwMTdhX2xpc19ncnUiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6Im5pZWR6aWVsYV9wb25pZWR6aWFcdTAxNDJla193dG9yZWtfXHUwMTVicm9kYV9jendh''@;'; put 'put ''cnRla19waVx1MDEwNXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmR6X3Bvbl93dF9cdTAxNWJyX2N6d19wdF9zb2IiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik5kX1BuX1d0X1x1MDE1YXJfQ3pfUHRfU28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRHppXHUwMTViIG9dIExUIixuZXh0RGF5OiJbSnV0cm8gb10g''@;'; put 'put ''TFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1cgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMjpyZXR1cm4iW1dlIHd0b3JlayBvXSBMVCI7Y2FzZSAzOnJldHVybiJbVyBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1''@;'; put 'put ''cm4iW1cgc29ib3RcdTAxMTkgb10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXXSBkZGRkIFtvXSBMVCJ9fSxsYXN0RGF5OiJbV2N6b3JhaiBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IG5pZWR6aWVs''@;'; put 'put ''XHUwMTE5IG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgXHUwMTVicm9kXHUwMTE5IG9dIExUIjtjYXNlIDY6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgc29ib3RcdTAxMTkgb10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXIHplc3pcdTAxNDJ5XSBkZGRkIFtvXSBM''@;'; put 'put ''VCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoiJXMgdGVtdSIsczoia2lsa2Egc2VrdW5kIixzczpQLG06UCxtbTpQLGg6UCxoaDpQLGQ6IjEgZHppZVx1MDE0NCIsZGQ6IiVkIGRuaSIsdzoidHlkemllXHUwMTQ0Iix3dzpQLE06Im1pZXNpXHUw''@;'; put 'put ''MTA1YyIsTU06UCx5OiJyb2siLHl5OlB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw5NzQ3NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoInB0LWJyIix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXJceGU3b19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9q''@;'; put 'put ''dWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9taW5nb19zZWd1bmRhLWZlaXJhX3Rlclx4ZTdhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9zZWdf''@;'; put 'put ''dGVyX3F1YV9xdWlfc2V4X3NceGUxYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fMlx4YWFfM1x4YWFfNFx4YWFfNVx4YWFfNlx4YWFfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbXHhlMHNdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2plIFx4ZTBzXSBM''@;'; put 'put ''VCIsbmV4dERheToiW0FtYW5oXHhlMyBceGUwc10gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwc10gTFQiLGxhc3REYXk6IltPbnRlbSBceGUwc10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpfHw2PT09dGhpcy5kYXkoKT8iW1x4ZGFsdGltb10gZGRkZCBb''@;'; put 'put ''XHhlMHNdIExUIjoiW1x4ZGFsdGltYV0gZGRkZCBbXHhlMHNdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW0gJXMiLHBhc3Q6ImhceGUxICVzIixzOiJwb3Vjb3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRv''@;'; put 'put ''cyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsTToidW0gbVx4ZWFzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIixpbnZh''@;'; put 'put ''bGlkRGF0ZToiRGF0YSBpbnZceGUxbGlkYSJ9KX0oeSg5NzU4NikpfSw3ODcxOTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInB0Iix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXJceGU3b19hYnJpbF9tYWlvX2p1bmhvX2p1''@;'; put 'put ''bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5nb19TZWd1bmRhLWZlaXJhX1Rl''@;'; put 'put ''clx4ZTdhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4dGEtZmVpcmFfU1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1NceGUxYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fMlx4YWFfM1x4YWFfNFx4YWFf''@;'; put 'put ''NVx4YWFfNlx4YWFfU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhI''@;'; put 'put ''Om1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIs''@;'; put 'put ''cGFzdDoiaFx4ZTEgJXMiLHM6InNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVtIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMiLHc6InVtYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1bSBt''@;'; put 'put ''XHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDUxMDA0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQKXt2YXIgTz0iICI7cmV0dXJuKEIlMTAwPj0yMHx8Qj49MTAwJiZCJTEwMD09MCkmJihPPSIgZGUgIiksQitPK3tzczoic2VjdW5kZSIsbW06Im1pbnV0ZSIsaGg6Im9yZSIsZGQ6InppbGUiLHd3OiJzXHUwMTAzcHRcdTAxMDNtXHhl''@;'; put 'put ''Mm5pIixNTToibHVuaSIseXk6ImFuaSJ9W1BdfUkuZGVmaW5lTG9jYWxlKCJybyIse21vbnRoczoiaWFudWFyaWVfZmVicnVhcmllX21hcnRpZV9hcHJpbGllX21haV9pdW5pZV9pdWxpZV9hdWd1c3Rfc2VwdGVtYnJpZV9vY3RvbWJyaWVfbm9pZW1icmllX2RlY2VtYnJpZSIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiaWFuLl9mZWIuX21hcnQuX2Fwci5fbWFpX2l1bi5faXVsLl9hdWcuX3NlcHQuX29jdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImR1bWluaWNcdTAxMDNfbHVuaV9tYXJcdTAyMWJpX21pZXJjdXJpX2pvaV92aW5l''@;'; put 'put ''cmlfc1x4ZTJtYlx1MDEwM3RcdTAxMDMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRHVtX0x1bl9NYXJfTWllX0pvaV9WaW5fU1x4ZTJtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEdV9MdV9NYV9NaV9Kb19WaV9TXHhlMiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6''@;'; put 'put ''bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2F6aSBsYV0gTFQiLG5leHREYXk6IlttXHhlMmluZSBsYV0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJkZGRkIFtsYV0gTFQiLGxhc3REYXk6IltpZXJpIGxhXSBMVCIsbGFzdFdlZWs6Iltmb3N0YV0gZGRkZCBbbGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwZXN0ZSAlcyIscGFzdDoiJXMgXHhlZW4gdXJtXHUwMTAzIixzOiJjXHhlMnRldmEgc2Vj''@;'; put 'put ''dW5kZSIsc3M6XyxtOiJ1biBtaW51dCIsbW06XyxoOiJvIG9yXHUwMTAzIixoaDpfLGQ6Im8gemkiLGRkOl8sdzoibyBzXHUwMTAzcHRcdTAxMDNtXHhlMm5cdTAxMDMiLHd3Ol8sTToibyBsdW5cdTAxMDMiLE1NOl8seToidW4gYW4iLHl5Ol99LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3''@;'; put 'put ''NTg2KSl9LDUxMzI2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFAsRixPKXtyZXR1cm4ibSI9PT1PP0Y/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCI6Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0''@;'; put 'put ''MyI6UCsiICIrZnVuY3Rpb24gXyhQLEYpe3ZhciBPPVAuc3BsaXQoIl8iKTtyZXR1cm4gRiUxMD09MSYmRiUxMDAhPTExP09bMF06RiUxMD49MiYmRiUxMDw9NCYmKEYlMTAwPDEwfHxGJTEwMD49MjApP09bMV06T1syXX0oe3NzOkY/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1''@;'; put 'put ''MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQz''@;'; put 'put ''ZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOkY/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMF9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIjoi''@;'; put 'put ''XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGhoOiJcdTA0NDdcdTA0MzBcdTA0NDFfXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwX1x1MDQ0N1x1MDQz''@;'; put 'put ''MFx1MDQ0MVx1MDQzZVx1MDQzMiIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NGZfXHUwNDM0XHUwNDNkXHUwNDM1XHUwNDM5Iix3dzoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQz''@;'; put 'put ''Ylx1MDQzOF9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGMiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzNVx1MDQzMiIseXk6''@;'; put 'put ''Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzBfXHUwNDNiXHUwNDM1XHUwNDQyIn1bT10sK1ApfXZhciBCPVsvXlx1MDQ0Zlx1MDQzZFx1MDQzMi9pLC9eXHUwNDQ0XHUwNDM1XHUwNDMyL2ksL15cdTA0M2NcdTA0MzBcdTA0NDAvaSwvXlx1MDQzMFx1MDQzZlx1''@;'; put 'put ''MDQ0MC9pLC9eXHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl0vaSwvXlx1MDQzOFx1MDQ0ZVx1MDQzZC9pLC9eXHUwNDM4XHUwNDRlXHUwNDNiL2ksL15cdTA0MzBcdTA0MzJcdTA0MzMvaSwvXlx1MDQ0MVx1MDQzNVx1MDQzZC9pLC9eXHUwNDNlXHUwNDNhXHUwNDQyL2ksL15cdTA0M2RcdTA0''@;'; put 'put ''M2VcdTA0NGYvaSwvXlx1MDQzNFx1MDQzNVx1MDQzYS9pXTtJLmRlZmluZUxvY2FsZSgicnUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRmX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Zl9cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0NDBcdTA0NDJcdTA0MzBfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRmX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQz''@;'; put 'put ''MF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0''@;'; put 'put ''NDBcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUw''@;'; put 'put ''NDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNf''@;'; put 'put ''XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0Ontmb3JtYXQ6Ilx1MDQ0Zlx1''@;'; put 'put ''MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMz''@;'; put 'put ''Ll9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDIuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxLl9cdTA0MzRcdTA0MzVcdTA0M2EuIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwLl9c''@;'; put 'put ''dTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNl''@;'; put 'put ''XHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIil9LHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNcdTA0MzVfXHUw''@;'; put 'put ''NDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUw''@;'; put 'put ''NDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0NDBcdTA0MzVcdTA0NDFc''@;'; put 'put ''dTA0MzVcdTA0M2RcdTA0NGNcdTA0MzVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNf''@;'; put 'put ''XHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDEyXHUw''@;'; put 'put ''NDMyXSA/KD86XHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQ0M1x1MDQ0ZXxcdTA0NGRcdTA0NDJcdTA0NDMpPyA/XSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0''@;'; put 'put ''MV9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1''@;'; put 'put ''MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlOkIsbG9uZ01vbnRoc1BhcnNlOkIsc2hvcnRNb250aHNQYXJzZTpCLG1vbnRoc1JlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0Zlx1MDQz''@;'; put 'put ''ZFx1MDQzMlwuP3xcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC4/fFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDNjXHUwNDMwXHUwNDQwXC4/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1''@;'; put 'put ''MDQzNVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzMFx1MDQzZlx1MDQ0MFwuP3xcdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RcLj98XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUw''@;'; put 'put ''NDM4XHUwNDRlXHUwNDNiXC4/fFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDMyXHUwNDMzXC4/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0''@;'; put 'put ''Mj9cLj98XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNlXHUwNDNhXHUwNDQyXC4/fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLj98XHUwNDM0XHUwNDM1''@;'; put 'put ''XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM0XHUwNDM1XHUwNDNhXC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1''@;'; put 'put ''MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18''@;'; put 'put ''XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMw''@;'; put 'put ''XHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJc''@;'; put 'put ''dTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBb''@;'; put 'put ''XHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Zlx1MDQ0Y118XHUwNDNjXHUw''@;'; put 'put ''NDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRmXHUwNDRjXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0''@;'; put 'put ''MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzZFx1MDQzZVx1MDQ0''@;'; put 'put ''Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXC58XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wufFx1MDQzY1x1''@;'; put 'put ''MDQzMFx1MDQ0MFtcdTA0NDIuXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLnxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmLl18XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zi5dfFx1MDQzMFx1MDQzMlx1MDQzM1wufFx1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzZFx1MDQ0Mj9cLnxcdTA0M2VcdTA0M2FcdTA0NDJcLnxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC58XHUwNDM0XHUwNDM1XHUwNDNhXC4pL2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBc''@;'; put 'put ''dTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ0ZiwgXHUwNDMyXSBMVCIsbmV4dERheToi''@;'; put 'put ''W1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oUCl7aWYoUC53ZWVrKCk9PT10aGlzLndlZWsoKSlyZXR1cm4gMj09PXRo''@;'; put 'put ''aXMuZGF5KCk/IltcdTA0MTJcdTA0M2VdIGRkZGQsIFtcdTA0MzJdIExUIjoiW1x1MDQxMl0gZGRkZCwgW1x1MDQzMl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM1XHUw''@;'; put 'put ''NDM1XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM4XHUwNDM5XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltc''@;'; put 'put ''dTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlXSBkZGRkLCBbXHUwNDMyXSBMVCJ9fSxsYXN0V2VlazpmdW5jdGlvbihQKXtpZihQLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQz''@;'; put 'put ''ZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2Fz''@;'; put 'put ''ZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NGJcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0''@;'; put 'put ''NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDNkXHUwNDMwXHUwNDM3XHUwNDMwXHUwNDM0IixzOiJcdTA0M2RcdTA0MzVcdTA0NDFcdTA0M2Fc''@;'; put 'put ''dTA0M2VcdTA0M2JcdTA0NGNcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpnLG06ZyxtbTpnLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6ZyxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOmcsdzoiXHUwNDNkXHUwNDM1XHUwNDM0''@;'; put 'put ''XHUwNDM1XHUwNDNiXHUwNDRmIix3dzpnLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06Zyx5OiJcdTA0MzNcdTA0M2VcdTA0MzQiLHl5Omd9LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQzOHxcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzB8XHUwNDM0''@;'; put 'put ''XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMC9pLGlzUE06ZnVuY3Rpb24oUCl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCkkLy50ZXN0KFApfSxtZXJpZGllbTpmdW5jdGlvbihQ''@;'; put 'put ''LEYsTyl7cmV0dXJuIFA8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4IjpQPDEyPyJcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzAiOlA8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6''@;'; put 'put ''L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0M2V8XHUwNDRmKS8sb3JkaW5hbDpmdW5jdGlvbihQLEYpe3N3aXRjaChGKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOnJldHVybiBQKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBQKyItXHUwNDMzXHUwNDNlIjtjYXNlInciOmNhc2UiVyI6''@;'; put 'put ''cmV0dXJuIFArIi1cdTA0NGYiO2RlZmF1bHQ6cmV0dXJuIFB9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MjYwODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89WyJcdTA2MmNcdTA2NDZcdTA2NDhcdTA2MzFcdTA2NGEiLCJcdTA2''@;'; put 'put ''NDFcdTA2NGFcdTA2MjhcdTA2MzFcdTA2NDhcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2ODYiLCJcdTA2MjdcdTA2N2VcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjZcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NDRcdTA2''@;'; put 'put ''MjdcdTA2MjFcdTA2NTAiLCJcdTA2MjJcdTA2YWZcdTA2MzNcdTA2N2QiLCJcdTA2MzNcdTA2NGFcdTA2N2VcdTA2N2RcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjJcdTA2YWFcdTA2N2RcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2''@;'; put 'put ''OGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXSxnPVsiXHUwNjIyXHUwNjg2XHUwNjMxIiwiXHUwNjMzXHUwNjQ4XHUwNjQ1XHUwNjMxIiwiXHUwNjI3XHUwNmIxXHUwNjI3XHUwNjMxXHUwNjQ4IiwiXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5IiwiXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMz''@;'; put 'put ''IiwiXHUwNjJjXHUwNjQ1XHUwNjM5IiwiXHUwNjg3XHUwNjQ2XHUwNjg3XHUwNjMxIl07SS5kZWZpbmVMb2NhbGUoInNkIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Xyx3ZWVrZGF5czpnLHdlZWtkYXlzU2hvcnQ6Zyx3ZWVrZGF5c01pbjpnLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExU''@;'; put 'put ''UzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNVx1MDYyOFx1MDYyZHxcdTA2MzRcdTA2MjdcdTA2NDUvLGlzUE06''@;'; put 'put ''ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDYzNFx1MDYyN1x1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDYzNVx1MDYyOFx1MDYyZCI6Ilx1MDYzNFx1MDYyN1x1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjg0XSBMVCIsbmV4''@;'; put 'put ''dERheToiW1x1MDYzM1x1MDY4MFx1MDYyN1x1MDZiYlx1MDY0YV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MjdcdTA2YjNcdTA2NGFcdTA2NDYgXHUwNjQ3XHUwNjQxXHUwNjJhXHUwNjRhIFx1MDYyYVx1MDY0YV0gTFQiLGxhc3REYXk6IltcdTA2YWFcdTA2MjdcdTA2NDRcdTA2NDdcdTA2''@;'; put 'put ''NDddIExUIixsYXN0V2VlazoiW1x1MDZhZlx1MDYzMlx1MDYzMVx1MDY0YVx1MDY0NCBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGFdIGRkZGQgW1x1MDYyYVx1MDY0YV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY3ZVx1MDY0OFx1MDYyMSIscGFzdDoi''@;'; put 'put ''JXMgXHUwNjI3XHUwNmIzIixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjMzXHUwNjRhXHUwNmFhXHUwNjQ2XHUwNjhhIixzczoiJWQgXHUwNjMzXHUwNjRhXHUwNmFhXHUwNjQ2XHUwNjhhIixtOiJcdTA2NDdcdTA2YWEgXHUwNjQ1XHUwNjQ2XHUwNjdkIixtbToiJWQgXHUwNjQ1XHUwNjQ2''@;'; put 'put ''XHUwNjdkIixoOiJcdTA2NDdcdTA2YWEgXHUwNmFhXHUwNjQ0XHUwNjI3XHUwNmFhIixoaDoiJWQgXHUwNmFhXHUwNjQ0XHUwNjI3XHUwNmFhIixkOiJcdTA2NDdcdTA2YWEgXHUwNjhmXHUwNjRhXHUwNjQ2XHUwNjQ3XHUwNjQ2IixkZDoiJWQgXHUwNjhmXHUwNjRhXHUwNjQ2XHUwNjQ3XHUw''@;'; put 'put ''NjQ2IixNOiJcdTA2NDdcdTA2YWEgXHUwNjQ1XHUwNjQ3XHUwNjRhXHUwNjQ2XHUwNjQ4IixNTToiJWQgXHUwNjQ1XHUwNjQ3XHUwNjRhXHUwNjQ2XHUwNjI3Iix5OiJcdTA2NDdcdTA2YWEgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6''@;'; put 'put ''ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwxMzkxMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNlIix7bW9udGhzOiJvXHUwMTExXHUwMTExYWphZ2VtXHhlMW5udV9ndW92dmFtXHhlMW5udV9uanVrXHUwMTBkYW1ceGUxbm51X2N1b1x1MDE0Ym9tXHhlMW5udV9taWVzc2VtXHhlMW5udV9nZWFzc2VtXHhlMW5udV9zdW9pZG5l''@;'; put 'put ''bVx4ZTFubnVfYm9yZ2VtXHhlMW5udV9cdTAxMGRha1x1MDEwZGFtXHhlMW5udV9nb2xnZ290bVx4ZTFubnVfc2tceGUxYm1hbVx4ZTFubnVfanVvdmxhbVx4ZTFubnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Im9cdTAxMTFcdTAxMTFqX2d1b3Zfbmp1a19jdW9fbWllc19nZWFzX3N1b2lf''@;'; put 'put ''Ym9yZ19cdTAxMGRha1x1MDEwZF9nb2xnX3NrXHhlMWJfanVvdiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic290bmFiZWFpdmlfdnVvc3NceGUxcmdhX21hXHUwMTRiXHUwMTRiZWJceGUxcmdhX2dhc2thdmFoa2t1X2R1b3Jhc3RhdF9iZWFyamFkYXRfbFx4ZTF2dmFyZGF0Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6InNvdG5fdnVvc19tYVx1MDE0Yl9nYXNrX2R1b3JfYmVhcl9sXHhlMXYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNfdl9tX2dfZF9iX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIs''@;'; put 'put ''TEw6Ik1NTU0gRC4gW2IuXSBZWVlZIixMTEw6Ik1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3RuZSB0aV0gTFQiLG5leHREYXk6IltpaHR0aW4gdGldIExUIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBbdGldIExUIixsYXN0RGF5OiJbaWt0ZSB0aV0gTFQiLGxhc3RXZWVrOiJbb3ZkZGl0XSBkZGRkIFt0aV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGdlYVx1MDE3ZWVzIixwYXN0OiJtYVx1MDE0Yml0ICVzIixzOiJtb2FkZGUgc2VrdW5k''@;'; put 'put ''ZGF0IixzczoiJWQgc2VrdW5kZGF0IixtOiJva3RhIG1pbnVodGEiLG1tOiIlZCBtaW51aHRhdCIsaDoib2t0YSBkaWltbXUiLGhoOiIlZCBkaWltbXV0IixkOiJva3RhIGJlYWl2aSIsZGQ6IiVkIGJlYWl2dml0IixNOiJva3RhIG1ceGUxbm51IixNTToiJWQgbVx4ZTFudXQiLHk6Im9rdGEg''@;'; put 'put ''amFoa2kiLHl5OiIlZCBqYWdpdCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSwyNTE0NzpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoInNpIix7bW9udGhzOiJcdTBkYTJcdTBkYjFcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI0XHUwZGQ5XHUwZGI2XHUwZGJiXHUwZGMwXHUwZGNmXHUwZGJiXHUwZGQyX1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYVx1MGRhZFx1MGRkNF9cdTBkODVcdTBkYjRcdTBkY2FcdTIwMGRc''@;'; put 'put ''dTBkYmJcdTBkZGFcdTBkYmRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkXHUwZGMzXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRj''@;'; put 'put ''YVx1MGRhZFx1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FcdTBkYWRcdTBkZGRcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGRhZlx1MGRkOVx1MGRj''@;'; put 'put ''M1x1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZGEyXHUwZGIxX1x1MGRiNFx1MGRkOVx1MGRiNl9cdTBkYjhcdTBkY2ZcdTBkYmJcdTBkY2FfXHUwZDg1XHUwZGI0XHUwZGNhX1x1MGRiOFx1MGRkMFx1MGRiYVx1MGRkMl9c''@;'; put 'put ''dTBkYTJcdTBkZDZcdTBkYjFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGJkXHUwZGQyX1x1MGQ4NVx1MGQ5Y1x1MGRkZF9cdTBkYzNcdTBkZDBcdTBkYjRcdTBkY2FfXHUwZDk0XHUwZDlhXHUwZGNhX1x1MGRiMVx1MGRkY1x1MGRjMFx1MGRkMF9cdTBkYWZcdTBkZDlcdTBkYzNcdTBkZDAiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXM6Ilx1MGQ4OVx1MGRiYlx1MGRkMlx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkYjNcdTBkZDRcdTBkYWZcdTBkY2ZfXHUwZDg1XHUwZDlmXHUwZGM0XHUwZGJiXHUwZGQ0XHUwZGMwXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRhZlx1MGRjZlx1MGRhZlx1MGRj''@;'; put 'put ''Zl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRcdTBkYzNcdTBkY2FcdTBkYjRcdTBkYWRcdTBkZDJcdTBkYjFcdTBkY2FcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRkOVx1MGRiMVx1MGRjM1x1MGRk''@;'; put 'put ''NFx1MGRiYlx1MGRjZlx1MGRhZlx1MGRjZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBkODlcdTBkYmJcdTBkZDJfXHUwZGMzXHUwZGIzXHUwZGQ0X1x1MGQ4NVx1MGQ5Zl9cdTBkYjZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGM0X1x1MGRjM1x1MGRk''@;'; put 'put ''Mlx1MGQ5YVx1MGRkNF9cdTBkYzNcdTBkZDlcdTBkYjEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGQ4OV9cdTBkYzNfXHUwZDg1X1x1MGRiNl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJfXHUwZGMzXHUwZGQyX1x1MGRjM1x1MGRkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJhIGg6bW0iLExUUzoiYSBoOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWSBNTU1NIEQiLExMTDoiWVlZWSBNTU1NIEQsIGEgaDptbSIsTExMTDoiWVlZWSBNTU1NIEQgW1x1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMl0gZGRkZCwgYSBoOm1t''@;'; put 'put ''OnNzIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBkODVcdTBkYWZdIExUW1x1MGRhN10iLG5leHREYXk6IltcdTBkYzRcdTBkZDlcdTBkYTddIExUW1x1MGRhN10iLG5leHRXZWVrOiJkZGRkIExUW1x1MGRhN10iLGxhc3REYXk6IltcdTBkOGFcdTBkYmFcdTBkZGFdIExUW1x1MGRhN10iLGxh''@;'; put 'put ''c3RXZWVrOiJbXHUwZGI0XHUwZGMzXHUwZGQ0XHUwZDljXHUwZGQyXHUwZGJhXSBkZGRkIExUW1x1MGRhN10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwZDlhXHUwZGQyXHUwZGIxXHUwZGNhIixwYXN0OiIlc1x1MGQ5YVx1MGRhNyBcdTBkYjRcdTBkZDlcdTBk''@;'; put 'put ''YmIiLHM6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiBcdTBkOWFcdTBkZDJcdTBkYzRcdTBkZDJcdTBkYjRcdTBkYmEiLHNzOiJcdTBkYWRcdTBkYWRcdTBkY2FcdTBkYjRcdTBkYmIgJWQiLG06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRjYVx1MGRhZFx1MGRk''@;'; put 'put ''NFx1MGRjMCIsbW06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRjYVx1MGRhZFx1MGRkNCAlZCIsaDoiXHUwZGI0XHUwZGQwXHUwZGJhIixoaDoiXHUwZGI0XHUwZGQwXHUwZGJhICVkIixkOiJcdTBkYWZcdTBkZDJcdTBkYjFcdTBkYmEiLGRkOiJcdTBkYWZcdTBkZDJcdTBk''@;'; put 'put ''YjEgJWQiLE06Ilx1MGRiOFx1MGRjZlx1MGRjM1x1MGRiYSIsTU06Ilx1MGRiOFx1MGRjZlx1MGRjMyAlZCIseToiXHUwZGMwXHUwZGMzXHUwZGJiIix5eToiXHUwZGMwXHUwZGMzXHUwZGJiICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTBkYzBcdTBkZDBcdTBkYjFc''@;'; put 'put ''dTBkZDIvLG9yZGluYWw6ZnVuY3Rpb24oZyl7cmV0dXJuIGcrIiBcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDIifSxtZXJpZGllbVBhcnNlOi9cdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0fFx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUw''@;'; put 'put ''ZGQ5Llx1MGRjMHxcdTBkYjQuXHUwZGMwLi8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iXHUwZGI0Llx1MGRjMC4iPT09Z3x8Ilx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPjExP3c/Ilx1MGRiNC5c''@;'; put 'put ''dTBkYzAuIjoiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI6dz8iXHUwZGI0XHUwZGQ5Llx1MGRjMC4iOiJcdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0In19KX0oeSg5NzU4NikpfSwyMzc0MTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIF89ImphbnVceGUxcl9mZWJydVx4ZTFyX21hcmVjX2Fwclx4ZWRsX21ceGUxal9qXHhmYW5falx4ZmFsX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21hcl9hcHJfbVx4ZTFqX2pceGZh''@;'; put 'put ''bl9qXHhmYWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKTtmdW5jdGlvbiBCKEYpe3JldHVybiBGPjEmJkY8NX1mdW5jdGlvbiB3KEYsTyx6LE4pe3ZhciBMPUYrIiAiO3N3aXRjaCh6KXtjYXNlInMiOnJldHVybiBPfHxOPyJwXHhlMXIgc2VrXHhmYW5kIjoicFx4ZTFyIHNla3Vu''@;'; put 'put ''ZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE98fE4/TCsoQihGKT8ic2VrdW5keSI6InNla1x4ZmFuZCIpOkwrInNla3VuZGFtaSI7Y2FzZSJtIjpyZXR1cm4gTz8ibWluXHhmYXRhIjpOPyJtaW5ceGZhdHUiOiJtaW5ceGZhdG91IjtjYXNlIm1tIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJtaW5ceGZh''@;'; put 'put ''dHkiOiJtaW5ceGZhdCIpOkwrIm1pblx4ZmF0YW1pIjtjYXNlImgiOnJldHVybiBPPyJob2RpbmEiOk4/ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiBPfHxOP0wrKEIoRik/ImhvZGlueSI6ImhvZFx4ZWRuIik6TCsiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIE98fE4/ImRl''@;'; put 'put ''XHUwMTQ4IjoiZFx1MDE0OG9tIjtjYXNlImRkIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJkbmkiOiJkblx4ZWQiKTpMKyJkXHUwMTQ4YW1pIjtjYXNlIk0iOnJldHVybiBPfHxOPyJtZXNpYWMiOiJtZXNpYWNvbSI7Y2FzZSJNTSI6cmV0dXJuIE98fE4/TCsoQihGKT8ibWVzaWFjZSI6Im1lc2lh''@;'; put 'put ''Y292Iik6TCsibWVzaWFjbWkiO2Nhc2UieSI6cmV0dXJuIE98fE4/InJvayI6InJva29tIjtjYXNlInl5IjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJyb2t5Ijoicm9rb3YiKTpMKyJyb2ttaSJ9fUkuZGVmaW5lTG9jYWxlKCJzayIse21vbnRoczpfLG1vbnRoc1Nob3J0Omcsd2Vla2RheXM6Im5l''@;'; put 'put ''ZGVcdTAxM2VhX3BvbmRlbG9rX3V0b3Jva19zdHJlZGFfXHUwMTYxdHZydG9rX3BpYXRva19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVfcG9fdXRfc3RfXHUwMTYxdF9waV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3RfXHUwMTYxdF9waV9zbyIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyBv''@;'; put 'put ''XSBMVCIsbmV4dERheToiW3phanRyYSBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRlXHUwMTNldSBvXSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlt2IHN0cmVk''@;'; put 'put ''dSBvXSBMVCI7Y2FzZSA0OnJldHVybiJbdm8gXHUwMTYxdHZydG9rIG9dIExUIjtjYXNlIDU6cmV0dXJuIlt2IHBpYXRvayBvXSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgb10gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmEgb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNo''@;'; put 'put ''KHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsXHhmYSBuZWRlXHUwMTNldSBvXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBkZGRkIFtvXSBMVCI7Y2FzZSAzOnJldHVybiJbbWludWxceGZhIHN0cmVkdSBvXSBMVCI7Y2FzZSA2OnJl''@;'; put 'put ''dHVybiJbbWludWxceGZhIHNvYm90dSBvXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlZCAlcyIsczp3LHNzOncsbTp3LG1tOncsaDp3LGhoOncsZDp3LGRkOncsTTp3LE1NOncseTp3LHl5Ond9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw5M2UzOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEIsdyxQLEYpe3ZhciBPPUIrIiAiO3N3aXRjaChQKXtjYXNlInMiOnJldHVy''@;'; put 'put ''biB3fHxGPyJuZWthaiBzZWt1bmQiOiJuZWthaiBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBPKygxPT09Qj93PyJzZWt1bmRvIjoic2VrdW5kaSI6Mj09PUI/d3x8Rj8ic2VrdW5kaSI6InNla3VuZGFoIjpCPDU/d3x8Rj8ic2VrdW5kZSI6InNla3VuZGFoIjoic2VrdW5kIik7Y2FzZSJt''@;'; put 'put ''IjpyZXR1cm4gdz8iZW5hIG1pbnV0YSI6ImVubyBtaW51dG8iO2Nhc2UibW0iOnJldHVybiBPKygxPT09Qj93PyJtaW51dGEiOiJtaW51dG8iOjI9PT1CP3d8fEY/Im1pbnV0aSI6Im1pbnV0YW1hIjpCPDU/d3x8Rj8ibWludXRlIjoibWludXRhbWkiOnd8fEY/Im1pbnV0IjoibWludXRhbWki''@;'; put 'put ''KTtjYXNlImgiOnJldHVybiB3PyJlbmEgdXJhIjoiZW5vIHVybyI7Y2FzZSJoaCI6cmV0dXJuIE8rKDE9PT1CP3c/InVyYSI6InVybyI6Mj09PUI/d3x8Rj8idXJpIjoidXJhbWEiOkI8NT93fHxGPyJ1cmUiOiJ1cmFtaSI6d3x8Rj8idXIiOiJ1cmFtaSIpO2Nhc2UiZCI6cmV0dXJuIHd8fEY/''@;'; put 'put ''ImVuIGRhbiI6ImVuaW0gZG5lbSI7Y2FzZSJkZCI6cmV0dXJuIE8rKDE9PT1CP3d8fEY/ImRhbiI6ImRuZW0iOjI9PT1CP3d8fEY/ImRuaSI6ImRuZXZvbWEiOnd8fEY/ImRuaSI6ImRuZXZpIik7Y2FzZSJNIjpyZXR1cm4gd3x8Rj8iZW4gbWVzZWMiOiJlbmltIG1lc2VjZW0iO2Nhc2UiTU0i''@;'; put 'put ''OnJldHVybiBPKygxPT09Qj93fHxGPyJtZXNlYyI6Im1lc2VjZW0iOjI9PT1CP3d8fEY/Im1lc2VjYSI6Im1lc2VjZW1hIjpCPDU/d3x8Rj8ibWVzZWNlIjoibWVzZWNpIjp3fHxGPyJtZXNlY2V2IjoibWVzZWNpIik7Y2FzZSJ5IjpyZXR1cm4gd3x8Rj8iZW5vIGxldG8iOiJlbmltIGxldG9t''@;'; put 'put ''IjtjYXNlInl5IjpyZXR1cm4gTysoMT09PUI/d3x8Rj8ibGV0byI6ImxldG9tIjoyPT09Qj93fHxGPyJsZXRpIjoibGV0b21hIjpCPDU/d3x8Rj8ibGV0YSI6ImxldGkiOnd8fEY/ImxldCI6ImxldGkiKX19SS5kZWZpbmVMb2NhbGUoInNsIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJl''@;'; put 'put ''Y19hcHJpbF9tYWpfanVuaWpfanVsaWpfYXZndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqZWtfdG9yZWtfc3JlZGFfXHUwMTBkZXRydGVrX3BldGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdG9yLl9zcmUuX1x1MDEwZGV0Ll9wZXQuX3NvYi4iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Im5lX3BvX3RvX3NyX1x1MDEwZGVfcGVfc28iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC4gTU0uIFlZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZ''@;'; put 'put ''IEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5lcyBvYl0gTFQiLG5leHREYXk6IltqdXRyaSBvYl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ZdIFtuZWRlbGpvXSBb''@;'; put 'put ''b2JdIExUIjtjYXNlIDM6cmV0dXJuIlt2XSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ZdIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ZdIGRkZGQgW29iXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYWogb2JdIExUIixs''@;'; put 'put ''YXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBbbmVkZWxqb10gW29iXSBMVCI7Y2FzZSAzOnJldHVybiJbcHJlalx1MDE2MW5qb10gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBb''@;'; put 'put ''c29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcmVqXHUwMTYxbmppXSBkZGRkIFtvYl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwMTBkZXogJXMiLHBhc3Q6InByZWQgJXMiLHM6XyxzczpfLG06XyxtbTpf''@;'; put 'put ''LGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHkoOTc1ODYpKX0sNjA0NTE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0kuZGVmaW5lTG9jYWxlKCJzcSIse21vbnRoczoiSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTlx4ZWJudG9yX0RoamV0b3IiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tv''@;'; put 'put ''cl9HdXNfU2h0X1RldF9OXHhlYm5fRGhqIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJFIERpZWxfRSBIXHhlYm5ceGViX0UgTWFydFx4ZWJfRSBNXHhlYnJrdXJceGViX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1blx4ZWIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRGllX0hceGVibl9NYXJf''@;'; put 'put ''TVx4ZWJyX0Vual9QcmVfU2h0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEX0hfTWFfTVx4ZWJfRV9QX1NoIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9QRHxNRC8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iTSI9PT1nLmNoYXJBdCgwKX0sbWVy''@;'; put 'put ''aWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJQRCI6Ik1EIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbU290IG5ceGViXSBMVCIsbmV4dERheToiW05lc1x4ZWJyIG5ceGViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25ceGViXSBMVCIsbGFzdERheToiW0RqZSBuXHhlYl0gTFQiLGxhc3RXZWVrOiJkZGRkIFtlIGthbHVhciBuXHhlYl0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5ceGViICVzIixwYXN0OiIlcyBtXHhlYiBwYXJceGViIixzOiJkaXNhIHNla29uZGEiLHNzOiIlZCBzZWtvbmRhIixtOiJualx4ZWIgbWludXRceGViIixtbToiJWQgbWludXRhIixoOiJualx4ZWIgb3JceGViIixoaDoiJWQgb3Jc''@;'; put 'put ''eGViIixkOiJualx4ZWIgZGl0XHhlYiIsZGQ6IiVkIGRpdFx4ZWIiLE06Im5qXHhlYiBtdWFqIixNTToiJWQgbXVhaiIseToibmpceGViIHZpdCIseXk6IiVkIHZpdGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9''@;'; put 'put ''fSl9KHkoOTc1ODYpKX0sNDA5MDU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzAiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRc''@;'; put 'put ''dTA0MzUiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiXSxtOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2Nc''@;'; put 'put ''dTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxtbTpbIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLGg6WyJcdTA0NThcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0MzBcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCJdLGhoOlsiXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIiwiXHUwNDQxXHUw''@;'; put 'put ''NDMwXHUwNDQyXHUwNDM4Il0sZDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sZGQ6WyJcdTA0MzRcdTA0MzBcdTA0M2QiLCJc''@;'; put 'put ''dTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiXSxNOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2Nc''@;'; put 'put ''dTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiXSxNTTpbIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCJdLHk6WyJcdTA0NThcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0M2RcdTA0NDMgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDM1IFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSJdLHl5OlsiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDQzIiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM1IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oQix3KXtyZXR1cm4gQiUxMD49MSYmQiUxMDw9NCYmKEIlMTAwPDEwfHxCJTEwMD49''@;'; put 'put ''MjApP0IlMTA9PTE/d1swXTp3WzFdOndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihCLHcsUCxGKXt2YXIgeixPPV8ud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD8ieSI9PT1QJiZ3PyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDMwIjpGfHx3P09bMF06T1sxXTooej1fLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoQixPKSwieXkiPT09UCYmdyYmIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI9PT16P0IrIiBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOkIrIiAiK3op''@;'; put 'put ''fX07SS5kZWZpbmVMb2NhbGUoInNyLWN5cmwiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzFcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQz''@;'; put 'put ''OFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZVx1''@;'; put 'put ''MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0MzJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThc''@;'; put 'put ''dTA0MzBcdTA0M2QuX1x1MDQ0NFx1MDQzNVx1MDQzMS5fXHUwNDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNmLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQzMi5fXHUwNDM0XHUwNDM1XHUwNDQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUw''@;'; put 'put ''NDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwXHUwNDNhX1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQzZlx1MDQzNVx1''@;'; put 'put ''MDQ0Mlx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0Ll9cdTA0M2ZcdTA0M2VcdTA0M2QuX1x1MDQ0M1x1MDQ0Mlx1MDQzZS5fXHUwNDQxXHUwNDQwXHUwNDM1Ll9cdTA0''@;'; put 'put ''NDdcdTA0MzVcdTA0NDIuX1x1MDQzZlx1MDQzNVx1MDQ0Mi5fXHUwNDQxXHUwNDQzXHUwNDMxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM1X1x1MDQzZlx1MDQzZV9cdTA0NDNcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQx''@;'; put 'put ''XHUwNDQzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZ''@;'; put 'put ''LiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzBcdTA0NDEgXHUwNDQzXSBMVCIsbmV4dERheToiW1x1MDQ0MVx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NDNdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtj''@;'; put 'put ''YXNlIDA6cmV0dXJuIltcdTA0NDNdIFtcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDM6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDY6cmV0dXJuIltcdTA0NDNd''@;'; put 'put ''IFtcdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0NDNdIGRkZGQgW1x1MDQ0M10gTFQifX0sbGFzdERheToiW1x1MDQ1OFx1MDQ0M1x1MDQ0N1x1MDQzNSBcdTA0NDNdIExUIixs''@;'; put 'put ''YXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBb''@;'; put 'put ''XHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDNcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExU''@;'; put 'put ''IiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQw''@;'; put 'put ''XHUwNDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0g''@;'; put 'put ''W1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzNV0gW1x1MDQ0M10gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzUgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1''@;'; put 'put ''MDQzYVx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0ZSxkOl8udHJhbnNsYXRl''@;'; put 'put ''LGRkOl8udHJhbnNsYXRlLE06Xy50cmFuc2xhdGUsTU06Xy50cmFuc2xhdGUseTpfLnRyYW5zbGF0ZSx5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDU1MDQ2OmZ1''@;'; put 'put ''bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17d29yZHM6e3NzOlsic2VrdW5kYSIsInNla3VuZGUiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxoOlsiamVkYW4g''@;'; put 'put ''c2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZDpbImplZGFuIGRhbiIsImplZG5vZyBkYW5hIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE06WyJqZWRhbiBtZXNlYyIsImplZG5vZyBtZXNlY2EiXSxNTTpbIm1lc2VjIiwibWVzZWNhIiwibWVzZWNpIl0s''@;'; put 'put ''eTpbImplZG51IGdvZGludSIsImplZG5lIGdvZGluZSJdLHl5OlsiZ29kaW51IiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oQix3KXtyZXR1cm4gQiUxMD49MSYmQiUxMDw9NCYmKEIlMTAwPDEwfHxCJTEwMD49MjApP0IlMTA9PTE/d1swXTp3''@;'; put 'put ''WzFdOndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihCLHcsUCxGKXt2YXIgeixPPV8ud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD8ieSI9PT1QJiZ3PyJqZWRuYSBnb2RpbmEiOkZ8fHc/T1swXTpPWzFdOih6PV8uY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShCLE8pLCJ5eSI9PT1QJiZ3JiYi''@;'; put 'put ''Z29kaW51Ij09PXo/QisiIGdvZGluYSI6QisiICIreil9fTtJLmRlZmluZUxvY2FsZSgic3IiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyZS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuIE0uIFlZWVkuIixMTDoiRC4gTU1NTSBZWVlZLiIsTExMOiJELiBNTU1NIFlZWVkuIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWS4gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRy''@;'; put 'put ''YSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2Ug''@;'; put 'put ''MjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm9cdTAxNjFsZV0gW25lZGVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQi''@;'; put 'put ''LCJbcHJvXHUwMTYxbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0g''@;'; put 'put ''TFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZSAlcyIsczoibmVrb2xpa28gc2VrdW5kaSIsc3M6Xy50cmFuc2xhdGUsbTpfLnRyYW5zbGF0ZSxtbTpfLnRyYW5zbGF0ZSxoOl8udHJhbnNsYXRlLGhoOl8udHJhbnNs''@;'; put 'put ''YXRlLGQ6Xy50cmFuc2xhdGUsZGQ6Xy50cmFuc2xhdGUsTTpfLnRyYW5zbGF0ZSxNTTpfLnRyYW5zbGF0ZSx5Ol8udHJhbnNsYXRlLHl5Ol8udHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KHko''@;'; put 'put ''OTc1ODYpKX0sODU3NjU6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzcyIse21vbnRoczoiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVfTWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0tob2x3YW5lX0lu''@;'; put 'put ''Z2NpX0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29uZ29uaSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28iLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0''@;'; put 'put ''c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9Vc19MYl9MdF9Mc19MaF9VZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW05hbXVobGEg''@;'; put 'put ''bmdhXSBMVCIsbmV4dERheToiW0t1c2FzYSBuZ2FdIExUIixuZXh0V2VlazoiZGRkZCBbbmdhXSBMVCIsbGFzdERheToiW0l0b2xvIG5nYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5nYSAl''@;'; put 'put ''cyIscGFzdDoid2VudGVrYSBuZ2EgJXMiLHM6ImVtaXp1endhbmEgbG9tY2FuZSIsc3M6IiVkIG16dXp3YW5hIixtOiJ1bXp1enUiLG1tOiIlZCBlbWl6dXp1IixoOiJsaWhvcmEiLGhoOiIlZCBlbWFob3JhIixkOiJsaWxhbmdhIixkZDoiJWQgZW1hbGFuZ2EiLE06ImlueWFuZ2EiLE1NOiIl''@;'; put 'put ''ZCB0aW55YW5nYSIseToidW1ueWFrYSIseXk6IiVkIGltaW55YWthIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8iZWt1c2VuaSI6ZzwxNT8iZW1pbmkiOmc8MTk/ImVudHNhbWJh''@;'; put 'put ''bWEiOiJlYnVzdWt1In0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksImVrdXNlbmkiPT09Qj9nOiJlbWluaSI9PT1CP2c+PTExP2c6ZysxMjoiZW50c2FtYmFtYSI9PT1CfHwiZWJ1c3VrdSI9PT1CPzA9PT1nPzA6ZysxMjp2b2lkIDB9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6IiVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw5OTI5MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInN2Iix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJp''@;'; put 'put ''X21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''c1x4ZjZuZGFnX21ceGU1bmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY2cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmNm5fbVx4ZTVuX3Rpc19vbnNfdG9yX2ZyZV9sXHhmNnIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY2X21ceGU1X3RpX29u''@;'; put 'put ''X3RvX2ZyX2xceGY2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbSIs''@;'; put 'put ''bGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWRhZ10gTFQiLG5leHREYXk6IltJbW9yZ29uXSBMVCIsbGFzdERheToiW0lnXHhlNXJdIExUIixuZXh0V2VlazoiW1BceGU1XSBkZGRkIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W0ldIGRkZGRbc10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiJmXHhmNnIgJXMgc2VkYW4iLHM6Im5ceGU1Z3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGho''@;'; put 'put ''OiIlZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixNOiJlbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcOmV8XDphKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/IjplIjoxPT09Qnx8Mj09PUI/IjphIjoiOmUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNTM0NDk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJz''@;'; put 'put ''dyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNoaV9BcHJpbGlfTWVpX0p1bmlfSnVsYWlfQWdvc3RpX1NlcHRlbWJhX09rdG9iYV9Ob3ZlbWJhX0Rlc2VtYmEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3Zf''@;'; put 'put ''RGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJKcGxfSnRhdF9Kbm5lX0p0YW5fQWxoX0lqbV9KbW9zIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJKMl9KM19KNF9KNV9BbF9Jal9KMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoaDptbSBBIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltsZW8gc2FhXSBMVCIsbmV4dERheToiW2tlc2hvIHNhYV0gTFQiLG5leHRXZWVrOiJbd2lraSBpamF5b10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltqYW5hXSBMVCIsbGFzdFdlZWs6Ilt3aWtpIGlsaXlv''@;'; put 'put ''cGl0YV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhYWRheWUiLHBhc3Q6InRva2VhICVzIixzOiJoaXZpIHB1bmRlIixzczoic2VrdW5kZSAlZCIsbToiZGFraWthIG1vamEiLG1tOiJkYWtpa2EgJWQiLGg6InNhYSBsaW1vamEiLGho''@;'; put 'put ''OiJtYXNhYSAlZCIsZDoic2lrdSBtb2phIixkZDoic2lrdSAlZCIsTToibXdlemkgbW1vamEiLE1NOiJtaWV6aSAlZCIseToibXdha2EgbW1vamEiLHl5OiJtaWFrYSAlZCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDcyNjg4OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwYmU3IiwyOiJcdTBiZTgiLDM6Ilx1MGJlOSIsNDoiXHUwYmVhIiw1OiJcdTBiZWIiLDY6Ilx1MGJlYyIsNzoiXHUwYmVkIiw4OiJcdTBiZWUiLDk6Ilx1MGJlZiIsMDoiXHUwYmU2In0sZz17Ilx1MGJlNyI6IjEiLCJcdTBiZTgiOiIyIiwi''@;'; put 'put ''XHUwYmU5IjoiMyIsIlx1MGJlYSI6IjQiLCJcdTBiZWIiOiI1IiwiXHUwYmVjIjoiNiIsIlx1MGJlZCI6IjciLCJcdTBiZWUiOiI4IiwiXHUwYmVmIjoiOSIsIlx1MGJlNiI6IjAifTtJLmRlZmluZUxvY2FsZSgidGEiLHttb250aHM6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9c''@;'; put 'put ''dTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5''@;'; put 'put ''Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJh''@;'; put 'put ''YVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZfXHUw''@;'; put 'put ''YmFhXHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhZVx1MGJiZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjJcdTBiY2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBiOWNc''@;'; put 'put ''dTBiYzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBiYWFc''@;'; put 'put ''dTBiYjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmNkXHUw''@;'; put 'put ''YmIxXHUwYmMxXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGI5Zlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYzZcdTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBi''@;'; put 'put ''YWZcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJh''@;'; put 'put ''ZVx1MGJjOF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYjlhXHUwYmE5XHUwYmJmXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjMV9cdTBiYTRcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUwYmFmXHUwYmNkX1x1MGJhYVx1MGJjMVx1MGJhNFx1MGJhOVx1''@;'; put 'put ''MGJjZF9cdTBiYjVcdTBiYmZcdTBiYWZcdTBiYmVcdTBiYjRcdTBiYTlcdTBiY2RfXHUwYmI1XHUwYmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmX1x1MGI5YVx1MGJhOVx1MGJiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYjllXHUwYmJlX1x1MGJhNFx1MGJiZl9cdTBiOWFcdTBi''@;'; put 'put ''YzZfXHUwYmFhXHUwYmMxX1x1MGJiNVx1MGJiZl9cdTBiYjVcdTBiYzZfXHUwYjlhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQsIEQgTU1NTSBZWVlZLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYjg3XHUwYmE5XHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbmV4dERheToiW1x1MGJhOFx1MGJiZVx1MGJiM1x1MGJjOF0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGJhOFx1MGJj''@;'; put 'put ''N1x1MGJiMVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLGxhc3RXZWVrOiJbXHUwYjk1XHUwYjlmXHUwYmE4XHUwYmNkXHUwYmE0IFx1MGJiNVx1MGJiZVx1MGJiMFx1MGJhZVx1MGJjZF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGI4N1x1MGJi''@;'; put 'put ''Mlx1MGJjZCIscGFzdDoiJXMgXHUwYmFlXHUwYmMxXHUwYmE5XHUwYmNkIixzOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYjlhXHUwYmJmXHUwYmIyIFx1MGJiNVx1MGJiZlx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsc3M6IiVkIFx1MGJiNVx1MGJiZlx1MGJh''@;'; put 'put ''OFx1MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsbToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGJhZVx1MGJjZCIsbW06IiVkIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJi''@;'; put 'put ''M1x1MGJjZCIsaDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJhM1x1MGJiZiBcdTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGhoOiIlZCBcdTBiYWVcdTBiYTNcdTBiYmYgXHUwYmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixkOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUw''@;'; put 'put ''YmE4XHUwYmJlXHUwYmIzXHUwYmNkIixkZDoiJWQgXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixNOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYmFlXHUwYmNkIixNTToiJWQgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYjk5XHUwYmNk''@;'; put 'put ''XHUwYjk1XHUwYmIzXHUwYmNkIix5OiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmI1XHUwYmIwXHUwYmMxXHUwYjlmXHUwYmFlXHUwYmNkIix5eToiJWQgXHUwYjg2XHUwYmEzXHUwYmNkXHUwYjlmXHUwYmMxXHUwYjk1XHUwYmIzXHUwYmNkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7''@;'; put 'put ''MSwyfVx1MGJiNVx1MGJhNFx1MGJjMS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysiXHUwYmI1XHUwYmE0XHUwYmMxIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGJlN1x1MGJlOFx1MGJlOVx1MGJlYVx1MGJlYlx1MGJlY1x1MGJlZFx1MGJlZVx1''@;'; put 'put ''MGJlZlx1MGJlNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkfFx1MGJi''@;'; put 'put ''NVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOHxcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzh8XHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkfFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMXxcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgvLG1l''@;'; put 'put ''cmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwyPyIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIjp3PDY/IiBcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgiOnc8MTA/IiBcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiOnc8MTQ/IiBcdTBiYThcdTBiYTNcdTBiY2Rc''@;'; put 'put ''dTBiYWFcdTBiOTVcdTBiYjJcdTBiY2QiOnc8MTg/IiBcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFcdTBiYmVcdTBiOWZcdTBiYzEiOnc8MjI/IiBcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgiOiIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9u''@;'; put 'put ''KHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCI9PT1QP3c8Mj93OncrMTI6Ilx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI9PT1QfHwiXHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4Ij09PVB8fCJcdTBiYThcdTBiYTNcdTBiY2Rc''@;'; put 'put ''dTBiYWFcdTBiOTVcdTBiYjJcdTBiY2QiPT09UCYmdz49MTA/dzp3KzEyfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oeSg5NzU4NikpfSwzMjA2MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiJcdTBjMWNcdTBj''@;'; put 'put ''MjhcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJiXHUwYzNmXHUwYzJjXHUwYzRkXHUwYzMwXHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMzJcdTBjNGRfXHUwYzJlXHUwYzQ3X1x1''@;'; put 'put ''MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3XHUwYzM4XHUwYzRkXHUwYzFmXHUwYzQxX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZFx1MGMxZlx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMDVcdTBjMTVcdTBjNGRc''@;'; put 'put ''dTBjMWZcdTBjNGJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzI4XHUwYzM1XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzFjXHUwYzI4Ll9cdTBjMmJcdTBj''@;'; put 'put ''M2ZcdTBjMmNcdTBjNGRcdTBjMzAuX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2YuX1x1MGMyZVx1MGM0N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMx''@;'; put 'put ''Ny5fXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkLl9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGIuX1x1MGMyOFx1MGMzNS5fXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBj''@;'; put 'put ''MzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM4XHUwYzRiXHUwYzJlXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMmNcdTBjNDFcdTBjMjdcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzE3XHUw''@;'; put 'put ''YzQxXHUwYzMwXHUwYzQxXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjMjhcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''XHUwYzA2XHUwYzI2XHUwYzNmX1x1MGMzOFx1MGM0Ylx1MGMyZV9cdTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNfXHUwYzJjXHUwYzQxXHUwYzI3X1x1MGMxN1x1MGM0MVx1MGMzMFx1MGM0MV9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBfXHUwYzM2XHUwYzI4XHUwYzNmIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJcdTBjMDZfXHUwYzM4XHUwYzRiX1x1MGMyZVx1MGMwMl9cdTBjMmNcdTBjNDFfXHUwYzE3XHUwYzQxX1x1MGMzNlx1MGM0MV9cdTBjMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzI4XHUwYzQ3XHUwYzIxXHUwYzQxXSBMVCIsbmV4dERheToiW1x1MGMzMFx1MGM0N1x1MGMyYVx1MGM0MV0g''@;'; put 'put ''TFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGMyOFx1MGMzZlx1MGMyOFx1MGM0ZFx1MGMyOF0gTFQiLGxhc3RXZWVrOiJbXHUwYzE3XHUwYzI0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYzMyXHUwYzRiIixwYXN0OiIl''@;'; put 'put ''cyBcdTBjMTVcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMjRcdTBjMDIiLHM6Ilx1MGMxNVx1MGM0YVx1MGMyOFx1MGM0ZFx1MGMyOFx1MGMzZiBcdTBjMTVcdTBjNGRcdTBjMzdcdTBjMjNcdTBjM2VcdTBjMzJcdTBjNDEiLHNzOiIlZCBcdTBjMzhcdTBjNDZcdTBjMTVcdTBjMjhcdTBjNGRcdTBj''@;'; put 'put ''MzJcdTBjNDEiLG06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjMDIiLG1tOiIlZCBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjM2VcdTBjMzJcdTBjNDEiLGg6Ilx1MGMxMlx1MGMxNSBcdTBjMTdcdTBjMDJcdTBjMWYiLGhoOiIlZCBc''@;'; put 'put ''dTBjMTdcdTBjMDJcdTBjMWZcdTBjMzJcdTBjNDEiLGQ6Ilx1MGMxMlx1MGMxNSBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDEiLGRkOiIlZCBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDEiLE06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjNDZcdTBjMzIiLE1NOiIlZCBcdTBj''@;'; put 'put ''MjhcdTBjNDZcdTBjMzJcdTBjMzJcdTBjNDEiLHk6Ilx1MGMxMlx1MGMxNSBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjMDIiLHl5OiIlZCBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjM2VcdTBjMzJcdTBjNDEifSxk''@;'; put 'put ''YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYzM1LyxvcmRpbmFsOiIlZFx1MGMzNSIsbWVyaWRpZW1QYXJzZTovXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmfFx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMnxcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2Vc''@;'; put 'put ''dTBjMzlcdTBjNGRcdTBjMjhcdTBjMDJ8XHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIj09PUI/''@;'; put 'put ''Zzw0P2c6ZysxMjoiXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIj09PUI/ZzoiXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIj09PUI/Zz49MTA/ZzpnKzEyOiJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBj''@;'; put 'put ''MDIiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDQ/Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI6ZzwxMD8iXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIjpnPDE3PyJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2Vc''@;'; put 'put ''dTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiOmc8MjA/Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI6Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfSh5KDk3NTg2KSl9LDkzMjkwOmZ1bmN0''@;'; put 'put ''aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGV0Iix7bW9udGhzOiJKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1XHhmMXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0Ficl9NYWlfSnVuX0p1bF9BZ29fU2V0X091dF9Ob3ZfRGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmd1X1NlZ3VuZGFfVGVyc2FfS3VhcnRhX0tpbnRhX1Nlc3RhX1NhYmFkdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJE''@;'; put 'put ''b21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvX1NlZ19UZV9LdV9LaV9TZXNfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixM''@;'; put 'put ''TEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT2hpbiBpaGFdIExUIixuZXh0RGF5OiJbQWJhbiBpaGFdIExUIixuZXh0V2VlazoiZGRkZCBbaWhhXSBMVCIsbGFzdERheToiW0hvcmlzZWlrIGloYV0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJkZGRkIFtzZW1hbmEga290dWtdIFtpaGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpaGEgJXMiLHBhc3Q6IiVzIGxpdWJhIixzOiJzZWd1bmR1IGJhbHVuIixzczoic2VndW5kdSAlZCIsbToibWludXR1IGlkYSIsbW06Im1pbnV0dSAlZCIs''@;'; put 'put ''aDoib3JhcyBpZGEiLGhoOiJvcmFzICVkIixkOiJsb3JvbiBpZGEiLGRkOiJsb3JvbiAlZCIsTToiZnVsYW4gaWRhIixNTToiZnVsYW4gJWQiLHk6InRpbmFuIGlkYSIseXk6InRpbmFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6''@;'; put 'put ''ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDgyOTQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQzXHUwNDNjIiwxOiItXHUwNDQzXHUwNDNjIiwyOiItXHUwNDRlXHUwNDNjIiwzOiItXHUwNDRlXHUwNDNjIiw0OiItXHUwNDQzXHUwNDNjIiw1OiItXHUwNDQzXHUwNDNjIiw2OiItXHUwNDQzXHUwNDNjIiw3OiItXHUwNDQzXHUwNDNjIiw4OiIt''@;'; put 'put ''XHUwNDQzXHUwNDNjIiw5OiItXHUwNDQzXHUwNDNjIiwxMDoiLVx1MDQ0M1x1MDQzYyIsMTI6Ii1cdTA0NDNcdTA0M2MiLDEzOiItXHUwNDQzXHUwNDNjIiwyMDoiLVx1MDQ0M1x1MDQzYyIsMzA6Ii1cdTA0NGVcdTA0M2MiLDQwOiItXHUwNDQzXHUwNDNjIiw1MDoiLVx1MDQ0M1x1MDQzYyIs''@;'; put 'put ''NjA6Ii1cdTA0NDNcdTA0M2MiLDcwOiItXHUwNDQzXHUwNDNjIiw4MDoiLVx1MDQ0M1x1MDQzYyIsOTA6Ii1cdTA0NDNcdTA0M2MiLDEwMDoiLVx1MDQ0M1x1MDQzYyJ9O0kuZGVmaW5lTG9jYWxlKCJ0ZyIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBc''@;'; put 'put ''dTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzOF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDM5XHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQz''@;'; put 'put ''OF9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUw''@;'; put 'put ''NDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUw''@;'; put 'put ''NDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQz''@;'; put 'put ''NVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1''@;'; put 'put ''MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0NGZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDM0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUw''@;'; put 'put ''NDM1X1x1MDQ0MVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDdcdTA0M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNGI3XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDRiN1x1MDQ0M1x1''@;'; put 'put ''MDQzY1x1MDQ0YVx1MDQzMF9cdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDRmXHUwNDQ4XHUwNDMxX1x1MDQzNFx1MDQ0OFx1MDQzMV9cdTA0NDFcdTA0NDhcdTA0MzFfXHUwNDQ3XHUwNDQ4XHUwNDMxX1x1MDQzZlx1MDQ0OFx1''@;'; put 'put ''MDQzMV9cdTA0YjdcdTA0NDNcdTA0M2NfXHUwNDQ4XHUwNDNkXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0NGZcdTA0NDhfXHUwNDM0XHUwNDQ4X1x1MDQ0MVx1MDQ0OF9cdTA0NDdcdTA0NDhfXHUwNDNmXHUwNDQ4X1x1MDRiN1x1MDQzY19cdTA0NDhcdTA0MzEiLnNwbGl0''@;'; put 'put ''KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE4XHUw''@;'; put 'put ''NDNjXHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHREYXk6IltcdTA0MjRcdTA0MzBcdTA0NDBcdTA0MzRcdTA0M2UgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdERheToiW1x1MDQxNFx1MDQzOFx1MDQ0MFx1''@;'; put 'put ''MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDNlXHUwNDRmXHUwNDNkXHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1''@;'; put 'put ''MDQzOF0gTFQiLGxhc3RXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0MzNcdTA0NDNcdTA0MzdcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDMxXHUwNDMwXHUwNDRhXHUwNDM0XHUwNDM4ICVzIixwYXN0OiIlcyBcdTA0M2ZcdTA0MzVcdTA0NDgiLHM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0N1x1MDQzMFx1MDQzZFx1MDQzNCBcdTA0NDFcdTA0M2VcdTA0M2RcdTA0MzhcdTA0NGYiLG06Ilx1MDQ0''@;'; put 'put ''Zlx1MDQzYSBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLGg6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIi''@;'; put 'put ''LGQ6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDBcdTA0ZWZcdTA0MzciLGRkOiIlZCBcdTA0NDBcdTA0ZWZcdTA0MzciLE06Ilx1MDQ0Zlx1MDQzYSBcdTA0M2NcdTA0M2VcdTA0YjMiLE1NOiIlZCBcdTA0M2NcdTA0M2VcdTA0YjMiLHk6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0M2IiLHl5''@;'; put 'put ''OiIlZCBcdTA0NDFcdTA0M2VcdTA0M2IifSxtZXJpZGllbVBhcnNlOi9cdTA0NDhcdTA0MzBcdTA0MzF8XHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzfFx1MDQ0MFx1MDRlZlx1MDQzN3xcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihCLHcpe3Jl''@;'; put 'put ''dHVybiAxMj09PUImJihCPTApLCJcdTA0NDhcdTA0MzBcdTA0MzEiPT09dz9CPDQ/QjpCKzEyOiJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiPT09dz9COiJcdTA0NDBcdTA0ZWZcdTA0MzciPT09dz9CPj0xMT9COkIrMTI6Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI9PT13P0Ir''@;'; put 'put ''MTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8ND8iXHUwNDQ4XHUwNDMwXHUwNDMxIjpCPDExPyJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiOkI8MTY/Ilx1MDQ0MFx1MDRlZlx1MDQzNyI6QjwxOT8iXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIjoi''@;'; put 'put ''XHUwNDQ4XHUwNDMwXHUwNDMxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQzXHUwNDNjfFx1MDQ0ZVx1MDQzYykvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKF9bQl18fF9bQiUxMF18fF9bQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3''@;'; put 'put ''fX0pfSh5KDk3NTg2KSl9LDEyMzE6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0aCIse21vbnRoczoiXHUwZTIxXHUwZTAxXHUwZTIzXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzOFx1MGUyMVx1MGUyMFx1MGUzMlx1MGUx''@;'; put 'put ''ZVx1MGUzMVx1MGUxOVx1MGUxOFx1MGU0Y19cdTBlMjFcdTBlMzVcdTBlMTlcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTQwXHUwZTIxXHUwZTI5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxZVx1MGUyNFx1MGUyOVx1MGUyMFx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMjFcdTBlMzRcdTBlMTZcdTBl''@;'; put 'put ''MzhcdTBlMTlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBlXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyYVx1MGUzNFx1MGUwN1x1MGUyYlx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzFcdTBlMTlcdTBlMjJcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE1XHUw''@;'; put 'put ''ZTM4XHUwZTI1XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUxZVx1MGUyNFx1MGUyOFx1MGUwOFx1MGUzNFx1MGUwMVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMThcdTBlMzFcdTBlMTlcdTBlMjdcdTBlMzJcdTBlMDRcdTBlMjEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGUyMS5cdTBlMDQu''@;'; put 'put ''X1x1MGUwMS5cdTBlMWUuX1x1MGUyMVx1MGUzNS5cdTBlMDQuX1x1MGU0MFx1MGUyMS5cdTBlMjIuX1x1MGUxZS5cdTBlMDQuX1x1MGUyMVx1MGUzNC5cdTBlMjIuX1x1MGUwMS5cdTBlMDQuX1x1MGUyYS5cdTBlMDQuX1x1MGUwMS5cdTBlMjIuX1x1MGUxNS5cdTBlMDQuX1x1MGUxZS5cdTBl''@;'; put 'put ''MjIuX1x1MGUxOC5cdTBlMDQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0''@;'; put 'put ''XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFcdTBlMWFcdTBlMTRcdTBlMzVfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMx''@;'; put 'put ''XHUwZTJhX1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGUyZFx1MGUzMi5fXHUwZTA4Ll9cdTBlMmQuX1x1MGUxZS5fXHUwZTFlXHUwZTI0Ll9cdTBlMjguX1x1MGUyYS4iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0iLExMTEw6Ilx1MGUyN1x1''@;'; put 'put ''MGUzMVx1MGUxOWRkZGRcdTBlMTdcdTBlMzVcdTBlNDggRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDd8XHUwZTJiXHUwZTI1''@;'; put 'put ''XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcp''@;'; put 'put ''e3JldHVybiBnPDEyPyJcdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciOiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGUy''@;'; put 'put ''N1x1MGUzMVx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0RGF5OiJbXHUwZTFlXHUwZTIzXHUwZTM4XHUwZTQ4XHUwZTA3XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHRXZWVrOiJkZGRk''@;'; put 'put ''W1x1MGUyYlx1MGUxOVx1MGU0OVx1MGUzMiBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0RGF5OiJbXHUwZTQwXHUwZTIxXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTI3XHUwZTMyXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJbXHUwZTI3XHUwZTMxXHUwZTE5XWRkZGRbXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGUyZFx1MGUzNVx1MGUwMSAlcyIs''@;'; put 'put ''cGFzdDoiJXNcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLHM6Ilx1MGU0NFx1MGUyMVx1MGU0OFx1MGUwMVx1MGUzNVx1MGU0OFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsc3M6IiVkIFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUx''@;'; put 'put ''N1x1MGUzNSIsbToiMSBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG1tOiIlZCBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLGg6IjEgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixoaDoiJWQgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIx''@;'; put 'put ''XHUwZTA3IixkOiIxIFx1MGUyN1x1MGUzMVx1MGUxOSIsZGQ6IiVkIFx1MGUyN1x1MGUzMVx1MGUxOSIsdzoiMSBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLHd3OiIlZCBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLE06IjEg''@;'; put 'put ''XHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5IixNTToiJWQgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5Iix5OiIxIFx1MGUxYlx1MGUzNSIseXk6IiVkIFx1MGUxYlx1MGUzNSJ9fSl9KHkoOTc1ODYpKX0sMzc0NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIF89ezE6IidpbmppIiw1OiInaW5qaSIsODoiJ2luamkiLDcwOiInaW5qaSIsODA6IidpbmppIiwyOiInbmppIiw3OiInbmppIiwyMDoiJ25qaSIsNTA6IiduamkiLDM6IidceGZjbmppIiw0OiInXHhmY25qaSIsMTAwOiInXHhmY25qaSIsNjoiJ25qeSIsOToiJ3Vuanki''@;'; put 'put ''LDEwOiIndW5qeSIsMzA6Iid1bmp5Iiw2MDoiJ3luankiLDkwOiIneW5qeSJ9O0kuZGVmaW5lTG9jYWxlKCJ0ayIse21vbnRoczoiXHhkZGFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hXHhmZF9JXHhmZHVuX0lceGZkdWxfQXdndXN0X1NlbnRceGZkYWJyX09rdFx4ZmRhYnJfTm9ceGZkYWJy''@;'; put 'put ''X0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHhkZGFuX0Zld19NYXJfQXByX01hXHhmZF9JXHhmZG5fSVx4ZmRsX0F3Z19TZW5fT2t0X05vXHhmZF9EZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx4ZGRla1x1MDE1ZmVuYmVfRHVcdTAxNWZlbmJlX1NpXHUwMTVmZW5iZV9ceGM3''@;'; put 'put ''YXJcdTAxNWZlbmJlX1Blblx1MDE1ZmVuYmVfQW5uYV9cdTAxNWVlbmJlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx4ZGRla19EdVx1MDE1Zl9TaVx1MDE1Zl9ceGM3YXJfUGVuX0Fubl9cdTAxNWVlbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHhkZGtfRFx1MDE1Zl9TXHUwMTVm''@;'; put 'put ''X1x4YzdyX1BuX0FuX1x1MDE1ZW4iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FnYXRdIExUIixuZXh0RGF5OiJbZXJ0aXIgc2FnYXRdIExUIixuZXh0V2VlazoiW2luZGlraV0gZGRkZCBbc2FnYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNceGZkbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhZ2F0XSBMVCIs''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29cdTAxNDgiLHBhc3Q6IiVzIFx4ZjZcdTAxNDgiLHM6ImJpcm5ceGU0XHhlN2Ugc2VrdW50IixtOiJiaXIgbWludXQiLG1tOiIlZCBtaW51dCIsaDoiYmlyIHNhZ2F0IixoaDoiJWQgc2FnYXQiLGQ6ImJpciBnXHhmY24i''@;'; put 'put ''LGRkOiIlZCBnXHhmY24iLE06ImJpciBhXHhmZCIsTU06IiVkIGFceGZkIix5OiJiaXIgXHhmZHlsIix5eToiJWQgXHhmZHlsIn0sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3N3aXRjaCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIEI7ZGVmYXVsdDppZigwPT09''@;'; put 'put ''QilyZXR1cm4gQisiJ3VuankiO3ZhciBQPUIlMTA7cmV0dXJuIEIrKF9bUF18fF9bQiUxMDAtUF18fF9bQj49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw0OTA0MDpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVu''@;'; put 'put ''X0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1N''@;'; put 'put ''TSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJh''@;'; put 'put ''YW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFz''@;'; put 'put ''IixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZ30s''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMTcxODc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJwYWdoX3dhXHUyMDE5X2NoYVx1MjAxOV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCIuc3BsaXQoIl8iKTtmdW5jdGlv''@;'; put 'put ''biB3KE8seixOLEwpe3ZhciBLPWZ1bmN0aW9uIFAoTyl7dmFyIHo9TWF0aC5mbG9vcihPJTFlMy8xMDApLE49TWF0aC5mbG9vcihPJTEwMC8xMCksTD1PJTEwLEs9IiI7cmV0dXJuIHo+MCYmKEsrPV9bel0rInZhdGxoIiksTj4wJiYoSys9KCIiIT09Sz8iICI6IiIpK19bTl0rIm1hSCIpLEw+''@;'; put 'put ''MCYmKEsrPSgiIiE9PUs/IiAiOiIiKStfW0xdKSwiIj09PUs/InBhZ2giOkt9KE8pO3N3aXRjaChOKXtjYXNlInNzIjpyZXR1cm4gSysiIGx1cCI7Y2FzZSJtbSI6cmV0dXJuIEsrIiB0dXAiO2Nhc2UiaGgiOnJldHVybiBLKyIgcmVwIjtjYXNlImRkIjpyZXR1cm4gSysiIGphaiI7Y2FzZSJN''@;'; put 'put ''TSI6cmV0dXJuIEsrIiBqYXIiO2Nhc2UieXkiOnJldHVybiBLKyIgRElTIn19SS5kZWZpbmVMb2NhbGUoInRsaCIse21vbnRoczoidGVyYVx1MjAxOSBqYXIgd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgY2hhXHUyMDE5X3RlcmFcdTIwMTkgamFyIHdlal90ZXJhXHUyMDE5IGphciBsb1NfdGVy''@;'; put 'put ''YVx1MjAxOSBqYXIgdmFnaF90ZXJhXHUyMDE5IGphciBqYXZfdGVyYVx1MjAxOSBqYXIgU29jaF90ZXJhXHUyMDE5IGphciBjaG9yZ2hfdGVyYVx1MjAxOSBqYXIgSHV0X3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIX3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X3RlcmFc''@;'; put 'put ''dTIwMTkgamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFyIHdhXHUyMDE5X2phciBjaGFcdTIwMTlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YVx1MjAxOW1hSF9qYXIg''@;'; put 'put ''d2FcdTIwMTltYUggd2FcdTIwMTlfamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGFIamFqXSBMVCIsbmV4dERheToi''@;'; put 'put ''W3dhXHUyMDE5bGVTXSBMVCIsbmV4dFdlZWs6IkxMTCIsbGFzdERheToiW3dhXHUyMDE5SHVcdTIwMTldIExUIixsYXN0V2VlazoiTExMIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIGcoTyl7dmFyIHo9TztyZXR1cm4tMSE9PU8uaW5kZXhPZigiamFqIik/''@;'; put 'put ''ei5zbGljZSgwLC0zKSsibGVTIjotMSE9PU8uaW5kZXhPZigiamFyIik/ei5zbGljZSgwLC0zKSsid2FRIjotMSE9PU8uaW5kZXhPZigiRElTIik/ei5zbGljZSgwLC0zKSsibmVtIjp6KyIgcElxIn0scGFzdDpmdW5jdGlvbiBCKE8pe3ZhciB6PU87cmV0dXJuLTEhPT1PLmluZGV4T2YoImph''@;'; put 'put ''aiIpP3ouc2xpY2UoMCwtMykrIkh1XHUyMDE5IjotMSE9PU8uaW5kZXhPZigiamFyIik/ei5zbGljZSgwLC0zKSsid2VuIjotMSE9PU8uaW5kZXhPZigiRElTIik/ei5zbGljZSgwLC0zKSsiYmVuIjp6KyIgcmV0In0sczoicHVTIGx1cCIsc3M6dyxtOiJ3YVx1MjAxOSB0dXAiLG1tOncsaDoi''@;'; put 'put ''d2FcdTIwMTkgcmVwIixoaDp3LGQ6IndhXHUyMDE5IGphaiIsZGQ6dyxNOiJ3YVx1MjAxOSBqYXIiLE1NOncseToid2FcdTIwMTkgRElTIix5eTp3fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYp''@;'; put 'put ''KX0sNjAxNTM6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIs''@;'; put 'put ''NDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07SS5kZWZpbmVMb2NhbGUoInRyIix7bW9udGhzOiJPY2FrX1x1MDE1ZXVi''@;'; put 'put ''YXRfTWFydF9OaXNhbl9NYXlcdTAxMzFzX0hhemlyYW5fVGVtbXV6X0FcdTAxMWZ1c3Rvc19FeWxceGZjbF9Fa2ltX0thc1x1MDEzMW1fQXJhbFx1MDEzMWsiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ik9jYV9cdTAxNWV1Yl9NYXJfTmlzX01heV9IYXpfVGVtX0FcdTAxMWZ1X0V5bF9Fa2lf''@;'; put 'put ''S2FzX0FyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiUGF6YXJfUGF6YXJ0ZXNpX1NhbFx1MDEzMV9ceGM3YXJcdTAxNWZhbWJhX1Blclx1MDE1ZmVtYmVfQ3VtYV9DdW1hcnRlc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUGF6X1B6dF9TYWxfXHhjN2FyX1Blcl9DdW1fQ210Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJQel9QdF9TYV9ceGM3YV9QZV9DdV9DdCIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8MTI/UD8iXHhmNlx4ZjYiOiJceGQ2XHhkNiI6UD8iXHhmNnMiOiJceGQ2UyJ9LG1lcmlkaWVtUGFyc2U6L1x4ZjZceGY2fFx4ZDZc''@;'; put 'put ''eGQ2fFx4ZjZzfFx4ZDZTLyxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJceGY2cyI9PT1CfHwiXHhkNlMiPT09Qn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6Ilt5YXJcdTAxMzFuIHNhYXRdIExUIixuZXh0V2VlazoiW2dlbGVjZWtdIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXSBMVCIsbGFzdFdl''@;'; put 'put ''ZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBceGY2bmNlIixzOiJiaXJrYVx4ZTcgc2FuaXllIixzczoiJWQgc2FuaXllIixtOiJiaXIgZGFraWthIixtbToiJWQgZGFraWthIixoOiJi''@;'; put 'put ''aXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLHc6ImJpciBoYWZ0YSIsd3c6IiVkIGhhZnRhIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIHlcdTAxMzFsIix5eToiJWQgeVx1MDEzMWwifSxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNo''@;'; put 'put ''KHcpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gQjtkZWZhdWx0OmlmKDA9PT1CKXJldHVybiBCKyInXHUwMTMxbmNcdTAxMzEiO3ZhciBQPUIlMTA7cmV0dXJuIEIrKF9bUF18fF9bQiUxMDAtUF18fF9bQj49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxk''@;'; put 'put ''b3k6N319KX0oeSg5NzU4NikpfSw4ODUyMTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz17czpbInZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNzOltCKyIgc2VjdW5kcyIsQisiIHNlY3VuZHMi''@;'; put 'put ''XSxtOlsiJ24gbVx4ZWR1dCIsIidpZW5zIG1ceGVkdXQiXSxtbTpbQisiIG1ceGVkdXRzIixCKyIgbVx4ZWR1dHMiXSxoOlsiJ24gXHhmZW9yYSIsIidpZW5zYSBceGZlb3JhIl0saGg6W0IrIiBceGZlb3JhcyIsQisiIFx4ZmVvcmFzIl0sZDpbIiduIHppdWEiLCInaWVuc2Egeml1YSJdLGRk''@;'; put 'put ''OltCKyIgeml1YXMiLEIrIiB6aXVhcyJdLE06WyInbiBtZXMiLCInaWVucyBtZXMiXSxNTTpbQisiIG1lc2VuIixCKyIgbWVzZW4iXSx5OlsiJ24gYXIiLCInaWVucyBhciJdLHl5OltCKyIgYXJzIixCKyIgYXJzIl19O3JldHVybiBGfHx3P09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgidHpsIix7bW9udGhzOiJKYW51YXJfRmV2cmFnbGhfTWFyXHhlN19BdnJceGVmdV9NYWlfR1x4ZmNuX0p1bGlhX0d1c2NodF9TZXRlbXZhcl9MaXN0b3BceGU0dHNfTm9lbXZhcl9aZWNlbXZhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQXZyX01haV9HXHhmY25f''@;'; put 'put ''SnVsX0d1c19TZXRfTGlzX05vZV9aZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNceGZhbGFkaV9MXHhmYW5lXHhlN2lfTWFpdHppX01ceGUxcmN1cmlfWGhceGZhYWRpX1ZpXHhlOW5lclx4ZTdpX1NceGUxdHVyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTXHhmYWxfTFx4ZmFuX01h''@;'; put 'put ''aV9NXHhlMXJfWGhceGZhX1ZpXHhlOV9TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNceGZhX0xceGZhX01hX01ceGUxX1hoX1ZpX1NceGUxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBN''@;'; put 'put ''TU1NIFtkYWxsYXNdIFlZWVkiLExMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIixMTExMOiJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2RcJ298ZFwnYS9pLGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuImQnbyI9PT1CLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQj4xMT9QPyJkJ28iOiJEJ08iOlA/ImQnYSI6IkQnQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3hoaSBceGUwXSBMVCIsbmV4dERheToiW2RlbVx4ZTAgXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIs''@;'; put 'put ''bGFzdERheToiW2llaXJpIFx4ZTBdIExUIixsYXN0V2VlazoiW3NceGZjciBlbF0gZGRkZCBbbGFzdGV1IFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvc3ByZWkgJXMiLHBhc3Q6ImphJXMiLHM6ZyxzczpnLG06ZyxtbTpnLGg6ZyxoaDpnLGQ6ZyxkZDpn''@;'; put 'put ''LE06ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sMjIyMzQ6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJ0em0tbGF0biIse21vbnRoczoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''YXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJhc2FtYXNf''@;'; put 'put ''YXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRk''@;'; put 'put ''ZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXNka2ggZ10gTFQiLG5leHREYXk6Ilthc2thIGddIExUIixuZXh0V2VlazoiZGRkZCBbZ10gTFQiLGxhc3REYXk6Ilthc3NhbnQgZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiZGFka2ggcyB5YW4gJXMiLHBhc3Q6InlhbiAlcyIsczoiaW1payIsc3M6IiVkIGltaWsiLG06Im1pbnVcdTFlMGQiLG1tOiIlZCBtaW51XHUxZTBkIixoOiJzYVx1MDI1YmEiLGhoOiIlZCB0YXNzYVx1MDI1YmluIixkOiJhc3MiLGRkOiIlZCBvc3NhbiIsTToi''@;'; put 'put ''YXlvd3IiLE1NOiIlZCBpeXlpcm4iLHk6ImFzZ2FzIix5eToiJWQgaXNnYXNuIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfSh5KDk3NTg2KSl9LDE4MDEwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidHptIix7bW9udGhzOiJcdTJk''@;'; put 'put ''NDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1''@;'; put 'put ''MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRm''@;'; put 'put ''XHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUyZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQz''@;'; put 'put ''MFx1MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUy''@;'; put 'put ''ZDYzX1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdc''@;'; put 'put ''dTJkNTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1''@;'; put 'put ''MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUy''@;'; put 'put ''ZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBc''@;'; put 'put ''dTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5''@;'; put 'put ''X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQg''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MmQzMFx1MmQ1OVx1MmQzN1x1MmQ0NSBcdTJkMzRdIExUIixuZXh0RGF5OiJbXHUyZDMwXHUyZDU5XHUyZDNkXHUyZDMwIFx1MmQzNF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixsYXN0RGF5OiJbXHUy''@;'; put 'put ''ZDMwXHUyZDVhXHUyZDMwXHUyZDRmXHUyZDVjIFx1MmQzNF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTJkMzdcdTJkMzBcdTJkMzdcdTJkNDUgXHUyZDU5IFx1MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIscGFzdDoi''@;'; put 'put ''XHUyZDYyXHUyZDMwXHUyZDRmICVzIixzOiJcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLHNzOiIlZCBcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLG06Ilx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsbW06IiVkIFx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsaDoiXHUy''@;'; put 'put ''ZDU5XHUyZDMwXHUyZDQ0XHUyZDMwIixoaDoiJWQgXHUyZDVjXHUyZDMwXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDQ5XHUyZDRmIixkOiJcdTJkMzBcdTJkNTlcdTJkNTkiLGRkOiIlZCBvXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDRmIixNOiJcdTJkMzBcdTJkNjJvXHUyZDUzXHUyZDU0''@;'; put 'put ''IixNTToiJWQgXHUyZDQ5XHUyZDYyXHUyZDYyXHUyZDQ5XHUyZDU0XHUyZDRmIix5OiJcdTJkMzBcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTkiLHl5OiIlZCBcdTJkNDlcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTlcdTJkNGYifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KHkoOTc1ODYpKX0sNjMz''@;'; put 'put ''NDk6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYz''@;'; put 'put ''M1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2''@;'; put 'put ''NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1''@;'; put 'put ''MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2''@;'; put 'put ''XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMx''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2NGFcdTA2ZDVcdTA2NDNcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJmXHUwNmM4XHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYzM1x1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9c''@;'; put 'put ''dTA2ODZcdTA2MjdcdTA2MzFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjdlXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyY1x1MDZjOFx1MDY0NVx1MDZkNV9cdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDUiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1''@;'; put 'put ''MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2''@;'; put 'put ''MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSIsTExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMg''@;'; put 'put ''SEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBjIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjRhXHUwNmQwXHUwNjMx''@;'; put 'put ''XHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNXxcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzF8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NnxcdTA2ODZcdTA2YzhcdTA2MzR8XHUwNjg2XHUw''@;'; put 'put ''NmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NnxcdTA2NDNcdTA2ZDVcdTA2ODYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQz''@;'; put 'put ''XHUwNmQwXHUwNjg2XHUwNmQ1Ij09PUJ8fCJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiPT09Qnx8Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiPT09Qj9nOiJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFc''@;'; put 'put ''dTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2Ij09PUJ8fCJcdTA2NDNcdTA2ZDVcdTA2ODYiPT09Qj9nKzEyOmc+PTExP2c6ZysxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTA2NGFcdTA2ZDBcdTA2MzFc''@;'; put 'put ''dTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1IjpQPDkwMD8iXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIjpQPDExMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiOlA8MTIzMD8iXHUw''@;'; put 'put ''Njg2XHUwNmM4XHUwNjM0IjpQPDE4MDA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiOiJcdTA2NDNcdTA2ZDVcdTA2ODYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyOFx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0''@;'; put 'put ''NiBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjI2XHUwNmQ1XHUwNjJhXHUwNmQ1IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHRXZWVrOiJbXHUwNjQzXHUwNmQwXHUwNjQ0XHUwNmQ1XHUwNjMxXHUwNjQzXHUwNjQ5XSBk''@;'; put 'put ''ZGRkIFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJhXHUwNmM2XHUwNjQ2XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2XSBMVCIsbGFzdFdlZWs6IltcdTA2MjZcdTA2MjdcdTA2NDRcdTA2MmZcdTA2NDlcdTA2NDZcdTA2NDJcdTA2NDldIGRkZGQg''@;'; put 'put ''W1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiIscGFzdDoiJXMgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IixzOiJcdTA2NDZcdTA2ZDVc''@;'; put 'put ''dTA2ODZcdTA2ODZcdTA2ZDUgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixzczoiJWQgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixtOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixtbToiJWQgXHUw''@;'; put 'put ''NjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixoOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixkOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQzXHUwNmM4XHUwNjQ2Iixk''@;'; put 'put ''ZDoiJWQgXHUwNjQzXHUwNmM4XHUwNjQ2IixNOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjI2XHUwNjI3XHUwNjRhIixNTToiJWQgXHUwNjI2XHUwNjI3XHUwNjRhIix5OiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjRhXHUwNjQ5XHUwNjQ0Iix5eToiJWQgXHUwNjRhXHUwNjQ5XHUwNjQ0In0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5fC1cdTA2MjZcdTA2MjdcdTA2NGF8LVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2Ui''@;'; put 'put ''REREIjpyZXR1cm4gZysiLVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyItXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1IjtkZWZhdWx0OnJldHVybiBnfX0scHJlcGFyc2U6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVwbGFjZSgvXHUwNjBj''@;'; put 'put ''L2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oeSg5NzU4NikpfSw2ODQ3OTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhGLE8seil7''@;'; put 'put ''cmV0dXJuIm0iPT09ej9PPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDMiOiJoIj09PXo/Tz8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUw''@;'; put 'put ''NDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIjpGKyIgIitmdW5jdGlvbiBfKEYsTyl7dmFyIHo9Ri5zcGxpdCgiXyIpO3JldHVybiBPJTEwPT0xJiZPJTEwMCE9MTE/elswXTpPJTEwPj0yJiZPJTEwPD00JiYoTyUxMDA8MTB8fE8lMTAwPj0yMCk/elsxXTp6WzJdfSh7c3M6Tz8iXHUwNDQx''@;'; put 'put ''XHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Tz8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1''@;'; put 'put ''MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQz''@;'; put 'put ''ZCIsaGg6Tz8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDNl''@;'; put 'put ''XHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDNkXHUwNDU2XHUwNDMyIixNTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2''@;'; put 'put ''XHUwNDRjX1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nl9cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZcdTA0MzIiLHl5OiJcdTA0NDBcdTA0NTZcdTA0M2FfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDM4X1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQ1Nlx1MDQz''@;'; put 'put ''MiJ9W3pdLCtGKX1mdW5jdGlvbiB3KEYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGKyJcdTA0M2UiKygxMT09PXRoaXMuaG91cnMoKT8iXHUwNDMxIjoiIikrIl0gTFQifX1JLmRlZmluZUxvY2FsZSgidWsiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDNkXHUw''@;'; put 'put ''NDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzZVx1MDQzM1x1MDQzZV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDNkXHUwNDRmX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0NDdc''@;'; put 'put ''dTA0MzVcdTA0NDBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQy''@;'; put 'put ''XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDRj''@;'; put 'put ''X1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzOFx1MDQzOV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0''@;'; put 'put ''Y19cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2RcdTA0NGNfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1No''@;'; put 'put ''b3J0OiJcdTA0NDFcdTA0NTZcdTA0NDdfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQzMVx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0MzhcdTA0M2ZfXHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDQwXHUwNDNmX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czpmdW5jdGlvbiBCKEYsTyl7dmFyIHo9e25vbWluYXRpdmU6''@;'; put 'put ''Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQz''@;'; put 'put ''NVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRmX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxhY2N1c2F0aXZlOiJcdTA0''@;'; put 'put ''M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0ZV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksZ2VuaXRpdmU6Ilx1MDQzZFx1MDQz''@;'; put 'put ''NVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ1Nl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2FcdTA0MzBfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQz''@;'; put 'put ''OF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNcdTA0MzBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDU2X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzOCIuc3BsaXQoIl8iKX07cmV0dXJuITA9PT1GP3ou''@;'; put 'put ''bm9taW5hdGl2ZS5zbGljZSgxLDcpLmNvbmNhdCh6Lm5vbWluYXRpdmUuc2xpY2UoMCwxKSk6Rj96Wy8oXFtbXHUwNDEyXHUwNDMyXHUwNDIzXHUwNDQzXVxdKSA/ZGRkZC8udGVzdChPKT8iYWNjdXNhdGl2ZSI6L1xbPyg/Olx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1''@;'; put 'put ''MDQ1N3xcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0M2VcdTA0NTcpPyA/XF0gP2RkZGQvLnRlc3QoTyk/Imdlbml0aXZlIjoibm9taW5hdGl2ZSJdW0YuZGF5KCldOnoubm9taW5hdGl2ZX0sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1''@;'; put 'put ''MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQz''@;'; put 'put ''Zlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1N''@;'; put 'put ''TSBZWVlZIFx1MDQ0MC4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6dygiW1x1MDQyMVx1MDQ0Y1x1MDQzZVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ1NiAiKSxuZXh0RGF5OncoIltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAgIiksbGFzdERheTp3KCJbXHUw''@;'; put 'put ''NDEyXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwICIpLG5leHRXZWVrOncoIltcdTA0MjNdIGRkZGQgWyIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gdygiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1''@;'; put 'put ''MDQzYlx1MDQzZVx1MDQ1N10gZGRkZCBbIikuY2FsbCh0aGlzKTtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdygiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQzM1x1MDQzZV0gZGRkZCBbIikuY2FsbCh0aGlzKX19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDQzIixzOiJcdTA0MzRcdTA0MzVcdTA0M2FcdTA0NTZcdTA0M2JcdTA0NGNcdTA0M2FcdTA0MzAgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpnLG06Zyxt''@;'; put 'put ''bTpnLGg6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsaGg6ZyxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOmcsTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjIixNTTpnLHk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYSIseXk6Z30sbWVyaWRp''@;'; put 'put ''ZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2fFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0M3xcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKEYpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0''@;'; put 'put ''ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzApJC8udGVzdChGKX0sbWVyaWRpZW06ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NiI6RjwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzIjpGPDE3PyJcdTA0MzRc''@;'; put 'put ''dTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlKS8sb3JkaW5hbDpmdW5jdGlvbihGLE8pe3N3aXRjaChPKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQi''@;'; put 'put ''OmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gRisiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gRisiLVx1MDQzM1x1MDQzZSI7ZGVmYXVsdDpyZXR1cm4gRn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDQzMDI0OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgXz1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0MVx1MDYzMVx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZjY1x1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDZjYyIsIlx1MDYy''@;'; put 'put ''Y1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyNlx1MDZjYyIsIlx1MDYyN1x1MDZhZlx1MDYzM1x1MDYyYSIsIlx1MDYzM1x1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyN1x1MDZhOVx1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0''@;'; put 'put ''OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLGc9WyJcdTA2MjdcdTA2MmFcdTA2NDhcdTA2MjdcdTA2MzEiLCJcdTA2N2VcdTA2Y2NcdTA2MzEiLCJcdTA2NDVcdTA2NDZcdTA2YWZcdTA2NDQiLCJcdTA2MjhcdTA2MmZcdTA2YmUiLCJcdTA2''@;'; put 'put ''MmNcdTA2NDVcdTA2MzlcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2YzEiLCJcdTA2YzFcdTA2NDFcdTA2MmFcdTA2YzEiXTtJLmRlZmluZUxvY2FsZSgidXIiLHttb250aHM6Xyxtb250aHNTaG9ydDpfLHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtk''@;'; put 'put ''YXlzTWluOmcsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1''@;'; put 'put ''XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTA2MjJcdTA2MmMgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDZhOVx1MDY0NCBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdERh''@;'; put 'put ''eToiW1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYyYVx1MDZjMSBcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzFdIGRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDYyOFx1MDYzOVx1MDYyZiIscGFzdDoiJXMgXHUwNjQyXHUwNjI4XHUwNjQ0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjMzXHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixzczoiJWQgXHUwNjMzXHUwNmNjXHUwNmE5''@;'; put 'put ''XHUwNjQ2XHUwNjg4IixtOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjQ2XHUwNjc5IixtbToiJWQgXHUwNjQ1XHUwNjQ2XHUwNjc5IixoOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5XHUwNmMxIixoaDoiJWQgXHUwNmFmXHUwNmJlXHUwNjQ2XHUw''@;'; put 'put ''Njc5XHUwNmQyIixkOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQ2IixkZDoiJWQgXHUwNjJmXHUwNjQ2IixNOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNmMxIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNmMxIix5OiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjMz''@;'; put 'put ''XHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxk''@;'; put 'put ''b3k6NH19KX0oeSg5NzU4NikpfSw3MjM3NjpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInV6LWxhdG4iLHttb250aHM6IllhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9O''@;'; put 'put ''b3lhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9T''@;'; put 'put ''aGFuYmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCdWd1biBzb2F0XSBMVCBbZGFdIixuZXh0RGF5OiJbRXJ0YWdhXSBMVCBbZGFdIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixsYXN0RGF5OiJbS2VjaGEgc29hdF0gTFQgW2RhXSIsbGFzdFdlZWs6IltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiWWFxaW4gJXMgaWNoaWRhIixwYXN0OiJC''@;'; put 'put ''aXIgbmVjaGEgJXMgb2xkaW4iLHM6InNvbml5YSIsc3M6IiVkIHNvbml5YSIsbToiYmlyIGRhcWlxYSIsbW06IiVkIGRhcWlxYSIsaDoiYmlyIHNvYXQiLGhoOiIlZCBzb2F0IixkOiJiaXIga3VuIixkZDoiJWQga3VuIixNOiJiaXIgb3kiLE1NOiIlZCBveSIseToiYmlyIHlpbCIseXk6IiVk''@;'; put 'put ''IHlpbCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDE5ODAwOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidXoiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0''@;'; put 'put ''MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFc''@;'; put 'put ''dTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMz''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNFx1MDQ0M1x1MDQ0OFx1MDQz''@;'; put 'put ''MFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0''@;'; put 'put ''MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0NDNcdTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQzZVx1MDQ0MF9cdTA0MWZcdTA0''@;'; put 'put ''MzBcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0MzVfXHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0NDNfXHUwNDI4XHUwNDMwIi5z''@;'; put 'put ''cGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQx''@;'; put 'put ''MVx1MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVrOiJbXHUwNDIzXHUwNDQyXHUw''@;'; put 'put ''NDMzXHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4XHUwNDNkICVzIFx1MDQzOFx1''@;'; put 'put ''MDQ0N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDExXHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2QiLHM6Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsc3M6IiVkIFx1MDQ0NFx1''@;'; put 'put ''MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1''@;'; put 'put ''MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzZVx1MDQzOSIsTU06IiVkIFx1''@;'; put 'put ''MDQzZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfSh5KDk3NTg2KSl9LDg5MzY2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgidmkiLHttb250aHM6InRoXHhlMW5nIDFfdGhceGUxbmcgMl90aFx4ZTFuZyAzX3RoXHhlMW5nIDRfdGhceGUxbmcgNV90aFx4ZTFuZyA2X3RoXHhlMW5nIDdfdGhceGUxbmcgOF90aFx4ZTFuZyA5X3RoXHhlMW5nIDEwX3RoXHhlMW5nIDExX3RoXHhlMW5nIDEyIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJjaFx1MWVlNyBuaFx1MWVh''@;'; put 'put ''ZHRfdGhcdTFlZTkgaGFpX3RoXHUxZWU5IGJhX3RoXHUxZWU5IHRcdTAxYjBfdGhcdTFlZTkgblx1MDEwM21fdGhcdTFlZTkgc1x4ZTF1X3RoXHUxZWU5IGJcdTFlYTN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybi9eY2gkL2kudGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyP3c/InNh''@;'; put 'put ''IjoiU0EiOnc/ImNoIjoiQ0gifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSIsTExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gW25cdTAx''@;'; put 'put ''MDNtXSBZWVlZIEhIOm1tIixsOiJERC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSFx4ZjRtIG5heSBsXHhmYWNdIExUIixuZXh0RGF5OiJbTmdceGUweSBtYWkg''@;'; put 'put ''bFx4ZmFjXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0XHUxZWRiaSBsXHhmYWNdIExUIixsYXN0RGF5OiJbSFx4ZjRtIHF1YSBsXHhmYWNdIExUIixsYXN0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRyXHUwMWIwXHUxZWRiYyBsXHhmYWNdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiIlcyB0XHUxZWRiaSIscGFzdDoiJXMgdHJcdTAxYjBcdTFlZGJjIixzOiJ2XHhlMGkgZ2lceGUyeSIsc3M6IiVkIGdpXHhlMnkiLG06Im1cdTFlZDl0IHBoXHhmYXQiLG1tOiIlZCBwaFx4ZmF0IixoOiJtXHUxZWQ5dCBnaVx1MWVkZCIsaGg6IiVkIGdpXHUxZWRk''@;'; put 'put ''IixkOiJtXHUxZWQ5dCBuZ1x4ZTB5IixkZDoiJWQgbmdceGUweSIsdzoibVx1MWVkOXQgdHVcdTFlYTduIix3dzoiJWQgdHVcdTFlYTduIixNOiJtXHUxZWQ5dCB0aFx4ZTFuZyIsTU06IiVkIHRoXHhlMW5nIix5OiJtXHUxZWQ5dCBuXHUwMTAzbSIseXk6IiVkIG5cdTAxMDNtIn0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KHkoOTc1ODYpKX0sNjk3MDI6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ4LXBzZXVkbyIs''@;'; put 'put ''e21vbnRoczoiSn5ceGUxXHhmMVx4ZmFceGUxfnJceGZkX0Z+XHhlOWJyXHhmYX5ceGUxclx4ZmRffk1ceGUxcmN+aF9ceGMxcH5yXHhlZGxffk1ceGUxXHhmZF9+Slx4ZmFceGYxXHhlOX5fSlx4ZmFsflx4ZmRfXHhjMVx4ZmF+Z1x4ZmFzdH5fU1x4ZTlwfnRceGU5bWJ+XHhlOXJfXHhkM35j''@;'; put 'put ''dFx4ZjNiflx4ZTlyX1x4ZDF+XHhmM3ZceGU5bX5iXHhlOXJffkRceGU5Y1x4ZTl+bWJceGU5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSn5ceGUxXHhmMV9+Rlx4ZTliX35NXHhlMXJfflx4YzFwcl9+TVx4ZTFceGZkX35KXHhmYVx4ZjFffkpceGZhbF9+XHhjMVx4ZmFnX35TXHhlOXBf''@;'; put 'put ''flx4ZDNjdF9+XHhkMVx4ZjN2X35EXHhlOWMiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU35ceGZhXHhmMWRceGUxflx4ZmRfTVx4ZjN+XHhmMWRceGUxXHhmZH5fVFx4ZmFceGU5fnNkXHhlMVx4ZmR+X1dceGU5ZH5ceGYxXHhlOXNkflx4ZTFceGZkX1R+aFx4''@;'; put 'put ''ZmFyc35kXHhlMVx4ZmRffkZyXHhlZGR+XHhlMVx4ZmRfU35ceGUxdFx4ZmFyfmRceGUxXHhmZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTflx4ZmFceGYxX35NXHhmM1x4ZjFfflRceGZhXHhlOV9+V1x4ZTlkX35UaFx4ZmFffkZyXHhlZF9+U1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzTWluOiJTflx4ZmFfTVx4ZjN+X1RceGZhX35XXHhlOV9UfmhfRnJ+X1NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUflx4ZjNkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbmV4dERheToiW1R+XHhmM21ceGYzfnJyXHhmM353IFx4ZTF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTF0XSBMVCIsbGFzdERheToiW1x4ZGR+''@;'; put 'put ''XHhlOXN0flx4ZTlyZFx4ZTF+XHhmZCBceGUxdF0gTFQiLGxhc3RXZWVrOiJbTH5ceGUxc3RdIGRkZGQgW1x4ZTF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHhlZH5ceGYxICVzIixwYXN0OiIlcyBceGUxfmdceGYzIixzOiJceGUxIH5mXHhlOXcgfnNceGU5''@;'; put 'put ''Y1x4ZjN+XHhmMWRzIixzczoiJWQgc35ceGU5Y1x4ZjNceGYxfmRzIixtOiJceGUxIH5tXHhlZFx4ZjF+XHhmYXRceGU5IixtbToiJWQgbX5ceGVkXHhmMVx4ZmF+dFx4ZTlzIixoOiJceGUxflx4ZjEgaFx4ZjN+XHhmYXIiLGhoOiIlZCBoflx4ZjNceGZhcnMiLGQ6Ilx4ZTEgfmRceGUxXHhm''@;'; put 'put ''ZCIsZGQ6IiVkIGR+XHhlMVx4ZmRzIixNOiJceGUxIH5tXHhmM1x4ZjF+dGgiLE1NOiIlZCBtflx4ZjNceGYxdH5ocyIseToiXHhlMSB+XHhmZFx4ZTlceGUxciIseXk6IiVkIFx4ZmR+XHhlOVx4ZTFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oeSg5NzU4NikpfSw3MjY1NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInlvIix7bW9udGhzOiJTXHUxZWI5XHUwMzAxclx1MWViOVx1MDMwMV9FXHUwMzAwcmVcdTAzMDBsZVx1MDMwMF9cdTFlYjhyXHUxZWI5XHUwMzAwbmFcdTAzMDBfSVx1MDMwMGdiZVx1MDMwMV9FXHUwMzAwYmliaV9PXHUwMzAwa3Vc''@;'; put 'put ''dTAzMDBkdV9BZ1x1MWViOW1vX09cdTAzMDBndVx1MDMwMW5fT3dld2VfXHUxZWNjXHUwMzAwd2FcdTAzMDByYVx1MDMwMF9CZVx1MDMwMWx1XHUwMzAxX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlNcdTFlYjlcdTAzMDFyX0VcdTAz''@;'; put 'put ''MDBybF9cdTFlYjhybl9JXHUwMzAwZ2JfRVx1MDMwMGJpX09cdTAzMDBrdVx1MDMwMF9BZ1x1MWViOV9PXHUwMzAwZ3VcdTAzMDFfT3dlX1x1MWVjY1x1MDMwMHdhXHUwMzAwX0JlXHUwMzAxbF9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJB''@;'; put 'put ''XHUwMzAwaVx1MDMwMGt1XHUwMzAxX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMWd1bl9cdTFlY2NqXHUxZWNkXHUwMzAxcnVcdTAzMDFfXHUxZWNjalx1MWVjZFx1MDMwMWJcdTFlY2RfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxbVx1MWViOVx1MDMwMXRhIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6IkFcdTAzMDBpXHUwMzAwa19BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFfXHUxZWNjanJfXHUxZWNjamJfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBXHUwMzAwaVx1MDMwMF9Bal9JXHUwMzAw''@;'; put 'put ''c19cdTFlY2NyX1x1MWVjY2JfXHUxZWI4dF9BXHUwMzAwYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1N''@;'; put 'put ''TSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT1x1MDMwMG5pXHUwMzAwIG5pXSBMVCIsbmV4dERheToiW1x1MWVjY1x1MDMwMGxhIG5pXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFuJ2JcdTFlY2RdIFtuaV0gTFQiLGxhc3REYXk6''@;'; put 'put ''IltBXHUwMzAwbmEgbmldIExUIixsYXN0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMwMWxcdTFlY2RcdTAzMDFdIFtuaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5pXHUwMzAxICVzIixwYXN0OiIlcyBrXHUxZWNkamFcdTAzMDEiLHM6''@;'; put 'put ''ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEgYWF5YVx1MDMwMSBkaWUiLHNzOiJhYXlhXHUwMzAxICVkIixtOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGthbiIsbW06ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEgJWQiLGg6IndhXHUwMzAxa2F0aSBrYW4iLGhoOiJ3YVx1MDMwMWthdGkgJWQiLGQ6''@;'; put 'put ''Ilx1MWVjZGpcdTFlY2RcdTAzMDEga2FuIixkZDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsTToib3N1XHUwMzAwIGthbiIsTU06Im9zdVx1MDMwMCAlZCIseToiXHUxZWNkZHVcdTAzMDFuIGthbiIseXk6Ilx1MWVjZGR1XHUwMzAxbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1''@;'; put 'put ''MWVjZGpcdTFlY2RcdTAzMDFcc1xkezEsMn0vLG9yZGluYWw6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDU3NTpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInpoLWNuIix7''@;'; put 'put ''bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1''@;'; put 'put ''NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1''@;'; put 'put ''NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTU0NjhcdTY1ZTVf''@;'; put 'put ''XHU1NDY4XHU0ZTAwX1x1NTQ2OFx1NGU4Y19cdTU0NjhcdTRlMDlfXHU1NDY4XHU1NmRiX1x1NTQ2OFx1NGU5NF9cdTU0NjhcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNUFoXHU3MGI5bW1cdTUyMDYiLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRk''@;'; put 'put ''ZGRBaFx1NzBiOW1tXHU1MjA2IixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2Nc''@;'; put 'put ''dTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRl''@;'; put 'put ''MGFcdTUzNDgiPT09Qj9nOiJcdTRlMGJcdTUzNDgiPT09Qnx8Ilx1NjY1YVx1NGUwYSI9PT1CP2crMTI6Zz49MTE/ZzpnKzEyfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1NTFjY1x1NjY2OCI6UDw5MDA/Ilx1NjVlOVx1NGUwYSI6UDwx''@;'; put 'put ''MTMwPyJcdTRlMGFcdTUzNDgiOlA8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XUxUIixuZXh0V2VlazpmdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gZy53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1NGUwYl1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1nLndlZWsoKT8iW1x1NGUwYV1kZGRMVCI6IltcdTY3MmNd''@;'; put 'put ''ZGRkTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTU0NjgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7Y2FzZSJNIjpyZXR1''@;'; put 'put ''cm4gZysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1NTQ2OCI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NTQwZSIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NTFlMFx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0OWYi''@;'; put 'put ''LG1tOiIlZCBcdTUyMDZcdTk0OWYiLGg6IjEgXHU1YzBmXHU2NWY2IixoaDoiJWQgXHU1YzBmXHU2NWY2IixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsdzoiMSBcdTU0NjgiLHd3OiIlZCBcdTU0NjgiLE06IjEgXHU0ZTJhXHU2NzA4IixNTToiJWQgXHU0ZTJhXHU2NzA4Iix5OiIxIFx1''@;'; put 'put ''NWU3NCIseXk6IiVkIFx1NWU3NCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfSh5KDk3NTg2KSl9LDE4MzUxOmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtaGsiLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0''@;'; put 'put ''ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIx''@;'; put 'put ''XHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZc''@;'; put 'put ''dTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUw''@;'; put 'put ''OV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06''@;'; put 'put ''c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1''@;'; put 'put ''NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4''@;'; put 'put ''fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRlMGFcdTUzNDgiPT09Qj9nOiJcdTRlMmRcdTUzNDgiPT09Qj9nPj0xMT9nOmcrMTI6Ilx1NGUwYlx1''@;'; put 'put ''NTM0OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDEyMDA/Ilx1NGUwYVx1NTM0OCI6MTIwMD09PVA/Ilx1''@;'; put 'put ''NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxU''@;'; put 'put ''IixsYXN0V2VlazoiW1x1NGUwYV1kZGRkTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysi''@;'; put 'put ''XHU2NWU1IjtjYXNlIk0iOnJldHVybiBnKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQy''@;'; put 'put ''IixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5''@;'; put 'put ''OiIlZCBcdTVlNzQifX0pfSh5KDk3NTg2KSl9LDUxNjI2OmZ1bmN0aW9uKHVlLFgseSl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtbW8iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRl''@;'; put 'put ''OTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2''@;'; put 'put ''NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0''@;'; put 'put ''ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0''@;'; put 'put ''X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZ''@;'; put 'put ''XHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1Njcw''@;'; put 'put ''OERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3Vy''@;'; put 'put ''OmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRlMGFcdTUzNDgiPT09Qj9nOiJcdTRlMmRcdTUzNDgiPT09Qj9nPj0xMT9nOmcrMTI6Ilx1NGUwYlx1NTM0OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09''@;'; put 'put ''PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1''@;'; put 'put ''MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQg''@;'; put 'put ''TFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBn''@;'; put 'put ''KyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06''@;'; put 'put ''IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfSh5KDk3NTg2''@;'; put 'put ''KSl9LDg4ODc6ZnVuY3Rpb24odWUsWCx5KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ6aC10dyIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0''@;'; put 'put ''ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3''@;'; put 'put ''MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1''@;'; put 'put ''NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExM''@;'; put 'put ''OiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZ''@;'; put 'put ''WVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9''@;'; put 'put ''PT1nJiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUyZFx1NTM0OCI9PT1CP2c+PTExP2c6ZysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06''@;'; put 'put ''ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEiOlA8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldIExUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkIExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XSBMVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlci''@;'; put 'put ''OnJldHVybiBnKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1''@;'; put 'put ''NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KHkoOTc1ODYpKX0sOTc1ODY6ZnVuY3Rpb24odWUsWCx5''@;'; put 'put ''KXsodWU9eS5ubWQodWUpKS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBJLHE7ZnVuY3Rpb24gXygpe3JldHVybiBJLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBCKENlKXtyZXR1cm4gQ2UgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gdyhDZSl7cmV0dXJuIG51bGwhPUNlJiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gUChDZSxLZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFz''@;'; put 'put ''T3duUHJvcGVydHkuY2FsbChDZSxLZSl9ZnVuY3Rpb24gRihDZSl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhDZSkubGVuZ3RoO3ZhciBLZTtmb3IoS2UgaW4gQ2UpaWYoUChDZSxLZSkpcmV0dXJuITE7cmV0dXJu''@;'; put 'put ''ITB9ZnVuY3Rpb24gTyhDZSl7cmV0dXJuIHZvaWQgMD09PUNlfWZ1bmN0aW9uIHooQ2Upe3JldHVybiJudW1iZXIiPT10eXBlb2YgQ2V8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiBOKENlKXtyZXR1cm4gQ2UgaW5zdGFu''@;'; put 'put ''Y2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIEwoQ2UsS2Upe3ZhciBJdCxndD1bXSxkbj1DZS5sZW5ndGg7Zm9yKEl0PTA7SXQ8ZG47KytJdClndC5wdXNoKEtlKENlW0l0XSxJdCkpO3JldHVybiBndH1mdW5j''@;'; put 'put ''dGlvbiBLKENlLEtlKXtmb3IodmFyIGd0IGluIEtlKVAoS2UsZ3QpJiYoQ2VbZ3RdPUtlW2d0XSk7cmV0dXJuIFAoS2UsInRvU3RyaW5nIikmJihDZS50b1N0cmluZz1LZS50b1N0cmluZyksUChLZSwidmFsdWVPZiIpJiYoQ2UudmFsdWVPZj1LZS52YWx1ZU9mKSxDZX1mdW5jdGlvbiBVKENl''@;'; put 'put ''LEtlLGd0LEl0KXtyZXR1cm4gbHYoQ2UsS2UsZ3QsSXQsITApLnV0YygpfWZ1bmN0aW9uIFkoQ2Upe3JldHVybiBudWxsPT1DZS5fcGYmJihDZS5fcGY9e2VtcHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0''@;'; put 'put ''OiExLGludmFsaWRFcmE6bnVsbCxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLGVyYTpudWxsLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSxDZS5fcGZ9ZnVu''@;'; put 'put ''Y3Rpb24gZWUoQ2Upe3ZhciBLZT1udWxsLGd0PSExLEl0PUNlLl9kJiYhaXNOYU4oQ2UuX2QuZ2V0VGltZSgpKTtyZXR1cm4gSXQmJihLZT1ZKENlKSxndD1xLmNhbGwoS2UucGFyc2VkRGF0ZVBhcnRzLGZ1bmN0aW9uKGRuKXtyZXR1cm4gbnVsbCE9ZG59KSxJdD1LZS5vdmVyZmxvdzwwJiYh''@;'; put 'put ''S2UuZW1wdHkmJiFLZS5pbnZhbGlkRXJhJiYhS2UuaW52YWxpZE1vbnRoJiYhS2UuaW52YWxpZFdlZWtkYXkmJiFLZS53ZWVrZGF5TWlzbWF0Y2gmJiFLZS5udWxsSW5wdXQmJiFLZS5pbnZhbGlkRm9ybWF0JiYhS2UudXNlckludmFsaWRhdGVkJiYoIUtlLm1lcmlkaWVtfHxLZS5tZXJpZGll''@;'; put 'put ''bSYmZ3QpLENlLl9zdHJpY3QmJihJdD1JdCYmMD09PUtlLmNoYXJzTGVmdE92ZXImJjA9PT1LZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1LZS5iaWdIb3VyKSksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oQ2UpP0l0OihDZS5faXNWYWxpZD1JdCxDZS5f''@;'; put 'put ''aXNWYWxpZCl9ZnVuY3Rpb24gSihDZSl7dmFyIEtlPVUoTmFOKTtyZXR1cm4gbnVsbCE9Q2U/SyhZKEtlKSxDZSk6WShLZSkudXNlckludmFsaWRhdGVkPSEwLEtlfXE9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24oQ2Upe3ZhciBJdCxLZT1PYmpl''@;'; put 'put ''Y3QodGhpcyksZ3Q9S2UubGVuZ3RoPj4+MDtmb3IoSXQ9MDtJdDxndDtJdCsrKWlmKEl0IGluIEtlJiZDZS5jYWxsKHRoaXMsS2VbSXRdLEl0LEtlKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIG5lPV8ubW9tZW50UHJvcGVydGllcz1bXSxpZT0hMTtmdW5jdGlvbiBsZShDZSxLZSl7dmFyIGd0''@;'; put 'put ''LEl0LGRuLHFuPW5lLmxlbmd0aDtpZihPKEtlLl9pc0FNb21lbnRPYmplY3QpfHwoQ2UuX2lzQU1vbWVudE9iamVjdD1LZS5faXNBTW9tZW50T2JqZWN0KSxPKEtlLl9pKXx8KENlLl9pPUtlLl9pKSxPKEtlLl9mKXx8KENlLl9mPUtlLl9mKSxPKEtlLl9sKXx8KENlLl9sPUtlLl9sKSxPKEtl''@;'; put 'put ''Ll9zdHJpY3QpfHwoQ2UuX3N0cmljdD1LZS5fc3RyaWN0KSxPKEtlLl90em0pfHwoQ2UuX3R6bT1LZS5fdHptKSxPKEtlLl9pc1VUQyl8fChDZS5faXNVVEM9S2UuX2lzVVRDKSxPKEtlLl9vZmZzZXQpfHwoQ2UuX29mZnNldD1LZS5fb2Zmc2V0KSxPKEtlLl9wZil8fChDZS5fcGY9WShLZSkp''@;'; put 'put ''LE8oS2UuX2xvY2FsZSl8fChDZS5fbG9jYWxlPUtlLl9sb2NhbGUpLHFuPjApZm9yKGd0PTA7Z3Q8cW47Z3QrKylPKGRuPUtlW0l0PW5lW2d0XV0pfHwoQ2VbSXRdPWRuKTtyZXR1cm4gQ2V9ZnVuY3Rpb24gbWUoQ2Upe2xlKHRoaXMsQ2UpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9Q2UuX2Q/''@;'; put 'put ''Q2UuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09aWUmJihpZT0hMCxfLnVwZGF0ZU9mZnNldCh0aGlzKSxpZT0hMSl9ZnVuY3Rpb24gX2UoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIG1lfHxudWxsIT1DZSYmbnVsbCE9Q2Uu''@;'; put 'put ''X2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiBUZShDZSl7ITE9PT1fLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIitDZSl9ZnVuY3Rpb24gU2UoQ2UsS2Upe3Zh''@;'; put 'put ''ciBndD0hMDtyZXR1cm4gSyhmdW5jdGlvbigpe2lmKG51bGwhPV8uZGVwcmVjYXRpb25IYW5kbGVyJiZfLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLENlKSxndCl7dmFyIGRuLHFuLGlpLEl0PVtdLElhPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHFuPTA7cW48SWE7cW4rKyl7aWYoZG49IiIsIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBhcmd1bWVudHNbcW5dKXtmb3IoaWkgaW4gZG4rPSJcblsiK3FuKyJdICIsYXJndW1lbnRzWzBdKVAoYXJndW1lbnRzWzBdLGlpKSYmKGRuKz1paSsiOiAiK2FyZ3VtZW50c1swXVtpaV0rIiwgIik7ZG49ZG4uc2xpY2UoMCwtMil9ZWxzZSBkbj1hcmd1bWVudHNbcW5d''@;'; put 'put ''O0l0LnB1c2goZG4pfVRlKENlKyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJdCkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjayksZ3Q9ITF9cmV0dXJuIEtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sS2UpfXZhciBULHplPXt9O2Z1bmN0aW9uIFYo''@;'; put 'put ''Q2UsS2Upe251bGwhPV8uZGVwcmVjYXRpb25IYW5kbGVyJiZfLmRlcHJlY2F0aW9uSGFuZGxlcihDZSxLZSksemVbQ2VdfHwoVGUoS2UpLHplW0NlXT0hMCl9ZnVuY3Rpb24gcChDZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJkNlIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0''@;'; put 'put ''IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIHgoQ2UsS2Upe3ZhciBJdCxndD1LKHt9LENlKTtmb3IoSXQgaW4gS2UpUChLZSxJdCkmJih3KENlW0l0XSkmJncoS2VbSXRdKT8oZ3RbSXRdPXt9LEsoZ3RbSXRdLENlW0l0XSksSyhndFtJ''@;'; put 'put ''dF0sS2VbSXRdKSk6bnVsbCE9S2VbSXRdP2d0W0l0XT1LZVtJdF06ZGVsZXRlIGd0W0l0XSk7Zm9yKEl0IGluIENlKVAoQ2UsSXQpJiYhUChLZSxJdCkmJncoQ2VbSXRdKSYmKGd0W0l0XT1LKHt9LGd0W0l0XSkpO3JldHVybiBndH1mdW5jdGlvbiBDKENlKXtudWxsIT1DZSYmdGhpcy5zZXQo''@;'; put 'put ''Q2UpfV8uc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLF8uZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsVD1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbihDZSl7dmFyIEtlLGd0PVtdO2ZvcihLZSBpbiBDZSlQKENlLEtlKSYmZ3QucHVzaChLZSk7cmV0dXJuIGd0fTtmdW5j''@;'; put 'put ''dGlvbiBFKENlLEtlLGd0KXt2YXIgSXQ9IiIrTWF0aC5hYnMoQ2UpO3JldHVybihDZT49MD9ndD8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLEtlLUl0Lmxlbmd0aCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK0l0fXZhciBtPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNz''@;'; put 'put ''KT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpa''@;'; put 'put ''P3wuKS9nLEE9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csYWU9e30sdGU9e307ZnVuY3Rpb24gc2UoQ2UsS2UsZ3QsSXQpe3ZhciBkbj1JdDsic3RyaW5nIj09dHlwZW9mIEl0JiYoZG49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tJdF0oKX0pLENlJiYodGVb''@;'; put 'put ''Q2VdPWRuKSxLZSYmKHRlW0tlWzBdXT1mdW5jdGlvbigpe3JldHVybiBFKGRuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxLZVsxXSxLZVsyXSl9KSxndCYmKHRlW2d0XT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGRuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxD''@;'; put 'put ''ZSl9KX1mdW5jdGlvbiB3ZShDZSl7cmV0dXJuIENlLm1hdGNoKC9cW1tcc1xTXS8pP0NlLnJlcGxhY2UoL15cW3xcXSQvZywiIik6Q2UucmVwbGFjZSgvXFwvZywiIil9ZnVuY3Rpb24gSmUoQ2UsS2Upe3JldHVybiBDZS5pc1ZhbGlkKCk/KEtlPW90KEtlLENlLmxvY2FsZURhdGEoKSksYWVb''@;'; put 'put ''S2VdPWFlW0tlXXx8ZnVuY3Rpb24gVWUoQ2Upe3ZhciBndCxJdCxLZT1DZS5tYXRjaChtKTtmb3IoZ3Q9MCxJdD1LZS5sZW5ndGg7Z3Q8SXQ7Z3QrKylLZVtndF09dGVbS2VbZ3RdXT90ZVtLZVtndF1dOndlKEtlW2d0XSk7cmV0dXJuIGZ1bmN0aW9uKGRuKXt2YXIgaWkscW49IiI7Zm9yKGlp''@;'; put 'put ''PTA7aWk8SXQ7aWkrKylxbis9cChLZVtpaV0pP0tlW2lpXS5jYWxsKGRuLENlKTpLZVtpaV07cmV0dXJuIHFufX0oS2UpLGFlW0tlXShDZSkpOkNlLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIG90KENlLEtlKXt2YXIgZ3Q9NTtmdW5jdGlvbiBJdChkbil7cmV0dXJuIEtl''@;'; put 'put ''LmxvbmdEYXRlRm9ybWF0KGRuKXx8ZG59Zm9yKEEubGFzdEluZGV4PTA7Z3Q+PTAmJkEudGVzdChDZSk7KUNlPUNlLnJlcGxhY2UoQSxJdCksQS5sYXN0SW5kZXg9MCxndC09MTtyZXR1cm4gQ2V9dmFyIEFlPXtEOiJkYXRlIixkYXRlczoiZGF0ZSIsZGF0ZToiZGF0ZSIsZDoiZGF5IixkYXlz''@;'; put 'put ''OiJkYXkiLGRheToiZGF5IixlOiJ3ZWVrZGF5Iix3ZWVrZGF5czoid2Vla2RheSIsd2Vla2RheToid2Vla2RheSIsRToiaXNvV2Vla2RheSIsaXNvd2Vla2RheXM6Imlzb1dlZWtkYXkiLGlzb3dlZWtkYXk6Imlzb1dlZWtkYXkiLERERDoiZGF5T2ZZZWFyIixkYXlvZnllYXJzOiJkYXlPZlll''@;'; put 'put ''YXIiLGRheW9meWVhcjoiZGF5T2ZZZWFyIixoOiJob3VyIixob3VyczoiaG91ciIsaG91cjoiaG91ciIsbXM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZHM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZDoibWlsbGlzZWNvbmQiLG06Im1pbnV0ZSIsbWludXRlczoibWludXRlIixtaW51dGU6''@;'; put 'put ''Im1pbnV0ZSIsTToibW9udGgiLG1vbnRoczoibW9udGgiLG1vbnRoOiJtb250aCIsUToicXVhcnRlciIscXVhcnRlcnM6InF1YXJ0ZXIiLHF1YXJ0ZXI6InF1YXJ0ZXIiLHM6InNlY29uZCIsc2Vjb25kczoic2Vjb25kIixzZWNvbmQ6InNlY29uZCIsZ2c6IndlZWtZZWFyIix3ZWVreWVhcnM6''@;'; put 'put ''IndlZWtZZWFyIix3ZWVreWVhcjoid2Vla1llYXIiLEdHOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXJzOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXI6Imlzb1dlZWtZZWFyIix3OiJ3ZWVrIix3ZWVrczoid2VlayIsd2Vlazoid2VlayIsVzoiaXNvV2VlayIsaXNvd2Vla3M6Imlzb1dlZWsi''@;'; put 'put ''LGlzb3dlZWs6Imlzb1dlZWsiLHk6InllYXIiLHllYXJzOiJ5ZWFyIix5ZWFyOiJ5ZWFyIn07ZnVuY3Rpb24gX3QoQ2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2U/QWVbQ2VdfHxBZVtDZS50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gbnQoQ2Upe3ZhciBndCxJdCxLZT17fTtm''@;'; put 'put ''b3IoSXQgaW4gQ2UpUChDZSxJdCkmJihndD1fdChJdCkpJiYoS2VbZ3RdPUNlW0l0XSk7cmV0dXJuIEtlfXZhciBRZT17ZGF0ZTo5LGRheToxMSx3ZWVrZGF5OjExLGlzb1dlZWtkYXk6MTEsZGF5T2ZZZWFyOjQsaG91cjoxMyxtaWxsaXNlY29uZDoxNixtaW51dGU6MTQsbW9udGg6OCxxdWFy''@;'; put 'put ''dGVyOjcsc2Vjb25kOjE1LHdlZWtZZWFyOjEsaXNvV2Vla1llYXI6MSx3ZWVrOjUsaXNvV2Vlazo1LHllYXI6MX07dmFyIEF0LHl0PS9cZC8sTXQ9L1xkXGQvLER0PS9cZHszfS8saXQ9L1xkezR9LywkZT0vWystXT9cZHs2fS8sdHQ9L1xkXGQ/LyxIZT0vXGRcZFxkXGQ/Lyx1dD0vXGRcZFxk''@;'; put 'put ''XGRcZFxkPy8scXQ9L1xkezEsM30vLFJ0PS9cZHsxLDR9LyxQdD0vWystXT9cZHsxLDZ9LyxzaT0vXGQrLyxRdD0vWystXT9cZCsvLHNuPS9afFsrLV1cZFxkOj9cZFxkL2dpLFJpPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksZnQ9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1''@;'; put 'put ''MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEsMjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tcdTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxPcj0vXlsxLTldXGQ/LyxXdD0vXihbMS05XVxkfFxkKS87ZnVuY3Rpb24gUm4o''@;'; put 'put ''Q2UsS2UsZ3Qpe0F0W0NlXT1wKEtlKT9LZTpmdW5jdGlvbihJdCxkbil7cmV0dXJuIEl0JiZndD9ndDpLZX19ZnVuY3Rpb24gc3QoQ2UsS2Upe3JldHVybiBQKEF0LENlKT9BdFtDZV0oS2UuX3N0cmljdCxLZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ1bmN0aW9uIFV0KENlKXtyZXR1cm4gcmko''@;'; put 'put ''Q2UucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24oS2UsZ3QsSXQsZG4scW4pe3JldHVybiBndHx8SXR8fGRufHxxbn0pKX0oQ2UpKX1mdW5jdGlvbiByaShDZSl7cmV0dXJuIENlLnJlcGxhY2UoL1stXC9cXF4k''@;'; put 'put ''Kis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gV2UoQ2Upe3JldHVybiBDZTwwP01hdGguY2VpbChDZSl8fDA6TWF0aC5mbG9vcihDZSl9ZnVuY3Rpb24gVHQoQ2Upe3ZhciBLZT0rQ2UsZ3Q9MDtyZXR1cm4gMCE9PUtlJiZpc0Zpbml0ZShLZSkmJihndD1XZShLZSkpLGd0fUF0PXt9''@;'; put 'put ''O3ZhciBucj17fTtmdW5jdGlvbiBodChDZSxLZSl7dmFyIGd0LGRuLEl0PUtlO2Zvcigic3RyaW5nIj09dHlwZW9mIENlJiYoQ2U9W0NlXSkseihLZSkmJihJdD1mdW5jdGlvbihxbixpaSl7aWlbS2VdPVR0KHFuKX0pLGRuPUNlLmxlbmd0aCxndD0wO2d0PGRuO2d0KyspbnJbQ2VbZ3RdXT1J''@;'; put 'put ''dH1mdW5jdGlvbiB4dChDZSxLZSl7aHQoQ2UsZnVuY3Rpb24oZ3QsSXQsZG4scW4pe2RuLl93PWRuLl93fHx7fSxLZShndCxkbi5fdyxkbixxbil9KX1mdW5jdGlvbiBqbihDZSxLZSxndCl7bnVsbCE9S2UmJlAobnIsQ2UpJiZucltDZV0oS2UsZ3QuX2EsZ3QsQ2UpfWZ1bmN0aW9uIHJuKENl''@;'; put 'put ''KXtyZXR1cm4gQ2UlND09MCYmQ2UlMTAwIT0wfHxDZSU0MDA9PTB9dmFyIHp0PTAsaGk9MSxjbj0yLGZuPTMsSWk9NCxYdD01LGVuPTYsdWE9NyxFaT04O2Z1bmN0aW9uIHZyKENlKXtyZXR1cm4gcm4oQ2UpPzM2NjozNjV9c2UoIlkiLDAsMCxmdW5jdGlvbigpe3ZhciBDZT10aGlzLnllYXIo''@;'; put 'put ''KTtyZXR1cm4gQ2U8PTk5OTk/RShDZSw0KToiKyIrQ2V9KSxzZSgwLFsiWVkiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksc2UoMCxbIllZWVkiLDRdLDAsInllYXIiKSxzZSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxzZSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5''@;'; put 'put ''ZWFyIiksUm4oIlkiLFF0KSxSbigiWVkiLHR0LE10KSxSbigiWVlZWSIsUnQsaXQpLFJuKCJZWVlZWSIsUHQsJGUpLFJuKCJZWVlZWVkiLFB0LCRlKSxodChbIllZWVlZIiwiWVlZWVlZIl0senQpLGh0KCJZWVlZIixmdW5jdGlvbihDZSxLZSl7S2VbenRdPTI9PT1DZS5sZW5ndGg/Xy5wYXJz''@;'; put 'put ''ZVR3b0RpZ2l0WWVhcihDZSk6VHQoQ2UpfSksaHQoIllZIixmdW5jdGlvbihDZSxLZSl7S2VbenRdPV8ucGFyc2VUd29EaWdpdFllYXIoQ2UpfSksaHQoIlkiLGZ1bmN0aW9uKENlLEtlKXtLZVt6dF09cGFyc2VJbnQoQ2UsMTApfSksXy5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihDZSl7''@;'; put 'put ''cmV0dXJuIFR0KENlKSsoVHQoQ2UpPjY4PzE5MDA6MmUzKX07dmFyIFdpLFduPWVpKCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIGVpKENlLEtlKXtyZXR1cm4gZnVuY3Rpb24oZ3Qpe3JldHVybiBudWxsIT1ndD8oVmkodGhpcyxDZSxndCksXy51cGRhdGVPZmZzZXQodGhpcyxLZSksdGhpcyk6''@;'; put 'put ''UXIodGhpcyxDZSl9fWZ1bmN0aW9uIFFyKENlLEtlKXtpZighQ2UuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIGd0PUNlLl9kLEl0PUNlLl9pc1VUQztzd2l0Y2goS2Upe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gSXQ/Z3QuZ2V0VVRDTWlsbGlzZWNvbmRzKCk6Z3QuZ2V0TWlsbGlzZWNv''@;'; put 'put ''bmRzKCk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gSXQ/Z3QuZ2V0VVRDU2Vjb25kcygpOmd0LmdldFNlY29uZHMoKTtjYXNlIk1pbnV0ZXMiOnJldHVybiBJdD9ndC5nZXRVVENNaW51dGVzKCk6Z3QuZ2V0TWludXRlcygpO2Nhc2UiSG91cnMiOnJldHVybiBJdD9ndC5nZXRVVENIb3VycygpOmd0''@;'; put 'put ''LmdldEhvdXJzKCk7Y2FzZSJEYXRlIjpyZXR1cm4gSXQ/Z3QuZ2V0VVRDRGF0ZSgpOmd0LmdldERhdGUoKTtjYXNlIkRheSI6cmV0dXJuIEl0P2d0LmdldFVUQ0RheSgpOmd0LmdldERheSgpO2Nhc2UiTW9udGgiOnJldHVybiBJdD9ndC5nZXRVVENNb250aCgpOmd0LmdldE1vbnRoKCk7Y2Fz''@;'; put 'put ''ZSJGdWxsWWVhciI6cmV0dXJuIEl0P2d0LmdldFVUQ0Z1bGxZZWFyKCk6Z3QuZ2V0RnVsbFllYXIoKTtkZWZhdWx0OnJldHVybiBOYU59fWZ1bmN0aW9uIFZpKENlLEtlLGd0KXt2YXIgSXQsZG4scW4saWksSWE7aWYoQ2UuaXNWYWxpZCgpJiYhaXNOYU4oZ3QpKXtzd2l0Y2goSXQ9Q2UuX2Qs''@;'; put 'put ''ZG49Q2UuX2lzVVRDLEtlKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIHZvaWQoZG4/SXQuc2V0VVRDTWlsbGlzZWNvbmRzKGd0KTpJdC5zZXRNaWxsaXNlY29uZHMoZ3QpKTtjYXNlIlNlY29uZHMiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ1NlY29uZHMoZ3QpOkl0LnNldFNlY29uZHMo''@;'; put 'put ''Z3QpKTtjYXNlIk1pbnV0ZXMiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ01pbnV0ZXMoZ3QpOkl0LnNldE1pbnV0ZXMoZ3QpKTtjYXNlIkhvdXJzIjpyZXR1cm4gdm9pZChkbj9JdC5zZXRVVENIb3VycyhndCk6SXQuc2V0SG91cnMoZ3QpKTtjYXNlIkRhdGUiOnJldHVybiB2b2lkKGRuP0l0''@;'; put 'put ''LnNldFVUQ0RhdGUoZ3QpOkl0LnNldERhdGUoZ3QpKTtjYXNlIkZ1bGxZZWFyIjpicmVhaztkZWZhdWx0OnJldHVybn1xbj1ndCxpaT1DZS5tb250aCgpLElhPTI5IT09KElhPUNlLmRhdGUoKSl8fDEhPT1paXx8cm4ocW4pP0lhOjI4LGRuP0l0LnNldFVUQ0Z1bGxZZWFyKHFuLGlpLElhKTpJ''@;'; put 'put ''dC5zZXRGdWxsWWVhcihxbixpaSxJYSl9fWZ1bmN0aW9uIHBhKENlLEtlKXtpZihpc05hTihDZSl8fGlzTmFOKEtlKSlyZXR1cm4gTmFOO3ZhciBndD1mdW5jdGlvbiBMcihDZSxLZSl7cmV0dXJuKENlJUtlK0tlKSVLZX0oS2UsMTIpO3JldHVybiBDZSs9KEtlLWd0KS8xMiwxPT09Z3Q/cm4o''@;'; put 'put ''Q2UpPzI5OjI4OjMxLWd0JTclMn1XaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihDZSl7dmFyIEtlO2ZvcihLZT0wO0tlPHRoaXMubGVuZ3RoOysrS2UpaWYodGhpc1tLZV09PT1DZSlyZXR1cm4gS2U7cmV0dXJuLTF9LHNlKCJNIixb''@;'; put 'put ''Ik1NIiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksc2UoIk1NTSIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyxDZSl9KSxzZSgiTU1NTSIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2Nh''@;'; put 'put ''bGVEYXRhKCkubW9udGhzKHRoaXMsQ2UpfSksUm4oIk0iLHR0LE9yKSxSbigiTU0iLHR0LE10KSxSbigiTU1NIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLm1vbnRoc1Nob3J0UmVnZXgoQ2UpfSksUm4oIk1NTU0iLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2UubW9udGhzUmVnZXgoQ2Up''@;'; put 'put ''fSksaHQoWyJNIiwiTU0iXSxmdW5jdGlvbihDZSxLZSl7S2VbaGldPVR0KENlKS0xfSksaHQoWyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24oQ2UsS2UsZ3QsSXQpe3ZhciBkbj1ndC5fbG9jYWxlLm1vbnRoc1BhcnNlKENlLEl0LGd0Ll9zdHJpY3QpO251bGwhPWRuP0tlW2hpXT1kbjpZKGd0KS5p''@;'; put 'put ''bnZhbGlkTW9udGg9Q2V9KTt2YXIgUW49IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbGE9Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09j''@;'; put 'put ''dF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHlhPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sTGE9ZnQsRmE9ZnQ7ZnVuY3Rpb24gTnMoQ2UsS2UsZ3Qpe3ZhciBJdCxkbixxbixpaT1DZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9u''@;'; put 'put ''dGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10sSXQ9MDtJdDwxMjsrK0l0KXFuPVUoWzJlMyxJdF0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdPXRoaXMubW9udGhzU2hvcnQocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCks''@;'; put 'put ''dGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XT10aGlzLm1vbnRocyhxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gZ3Q/Ik1NTSI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsaWkpKT9kbjpudWxsOi0xIT09KGRuPVdpLmNhbGwodGhpcy5fbG9u''@;'; put 'put ''Z01vbnRoc1BhcnNlLGlpKSk/ZG46bnVsbDoiTU1NIj09PUtlPy0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9sb25nTW9u''@;'; put 'put ''dGhzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLGlpKSk/ZG46bnVsbH1mdW5jdGlvbiBwdShDZSxLZSl7aWYoIUNlLmlzVmFsaWQoKSlyZXR1cm4gQ2U7aWYoInN0cmluZyI9PXR5cGVvZiBLZSlpZigvXlxkKyQvLnRlc3QoS2UpKUtlPVR0KEtl''@;'; put 'put ''KTtlbHNlIGlmKCF6KEtlPUNlLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZShLZSkpKXJldHVybiBDZTt2YXIgZ3Q9S2UsSXQ9Q2UuZGF0ZSgpO3JldHVybiBJdD1JdDwyOT9JdDpNYXRoLm1pbihJdCxwYShDZS55ZWFyKCksZ3QpKSxDZS5faXNVVEM/Q2UuX2Quc2V0VVRDTW9udGgoZ3QsSXQp''@;'; put 'put ''OkNlLl9kLnNldE1vbnRoKGd0LEl0KSxDZX1mdW5jdGlvbiBMYyhDZSl7cmV0dXJuIG51bGwhPUNlPyhwdSh0aGlzLENlKSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpRcih0aGlzLCJNb250aCIpfWZ1bmN0aW9uIGxpKCl7ZnVuY3Rpb24gQ2UoU28sZnMpe3JldHVybiBmcy5sZW5n''@;'; put 'put ''dGgtU28ubGVuZ3RofXZhciBkbixxbixpaSxJYSxLZT1bXSxndD1bXSxJdD1bXTtmb3IoZG49MDtkbjwxMjtkbisrKXFuPVUoWzJlMyxkbl0pLGlpPXJpKHRoaXMubW9udGhzU2hvcnQocW4sIiIpKSxJYT1yaSh0aGlzLm1vbnRocyhxbiwiIikpLEtlLnB1c2goaWkpLGd0LnB1c2goSWEpLEl0''@;'; put 'put ''LnB1c2goSWEpLEl0LnB1c2goaWkpO0tlLnNvcnQoQ2UpLGd0LnNvcnQoQ2UpLEl0LnNvcnQoQ2UpLHRoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250''@;'; put 'put ''aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrZ3Quam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBWdChDZSxLZSxndCxJdCxkbixxbixpaSl7dmFyIElhO3JldHVy''@;'; put 'put ''biBDZTwxMDAmJkNlPj0wPyhJYT1uZXcgRGF0ZShDZSs0MDAsS2UsZ3QsSXQsZG4scW4saWkpLGlzRmluaXRlKElhLmdldEZ1bGxZZWFyKCkpJiZJYS5zZXRGdWxsWWVhcihDZSkpOklhPW5ldyBEYXRlKENlLEtlLGd0LEl0LGRuLHFuLGlpKSxJYX1mdW5jdGlvbiBKcihDZSl7dmFyIEtlLGd0''@;'; put 'put ''O3JldHVybiBDZTwxMDAmJkNlPj0wPygoZ3Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlbMF09Q2UrNDAwLEtlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsZ3QpKSxpc0Zpbml0ZShLZS5nZXRVVENGdWxsWWVhcigpKSYmS2Uuc2V0VVRDRnVsbFllYXIoQ2Up''@;'; put 'put ''KTpLZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLEtlfWZ1bmN0aW9uIGIwKENlLEtlLGd0KXt2YXIgSXQ9NytLZS1ndDtyZXR1cm4tKDcrSnIoQ2UsMCxJdCkuZ2V0VVRDRGF5KCktS2UpJTcrSXQtMX1mdW5jdGlvbiBIYShDZSxLZSxndCxJdCxkbil7dmFyIFNv''@;'; put 'put ''LGZzLElhPTErNyooS2UtMSkrKDcrZ3QtSXQpJTcrYjAoQ2UsSXQsZG4pO3JldHVybiBJYTw9MD9mcz12cihTbz1DZS0xKStJYTpJYT52cihDZSk/KFNvPUNlKzEsZnM9SWEtdnIoQ2UpKTooU289Q2UsZnM9SWEpLHt5ZWFyOlNvLGRheU9mWWVhcjpmc319ZnVuY3Rpb24gUnUoQ2UsS2UsZ3Qp''@;'; put 'put ''e3ZhciBxbixpaSxJdD1iMChDZS55ZWFyKCksS2UsZ3QpLGRuPU1hdGguZmxvb3IoKENlLmRheU9mWWVhcigpLUl0LTEpLzcpKzE7cmV0dXJuIGRuPDE/cW49ZG4rUHIoaWk9Q2UueWVhcigpLTEsS2UsZ3QpOmRuPlByKENlLnllYXIoKSxLZSxndCk/KHFuPWRuLVByKENlLnllYXIoKSxLZSxn''@;'; put 'put ''dCksaWk9Q2UueWVhcigpKzEpOihpaT1DZS55ZWFyKCkscW49ZG4pLHt3ZWVrOnFuLHllYXI6aWl9fWZ1bmN0aW9uIFByKENlLEtlLGd0KXt2YXIgSXQ9YjAoQ2UsS2UsZ3QpLGRuPWIwKENlKzEsS2UsZ3QpO3JldHVybih2cihDZSktSXQrZG4pLzd9c2UoInciLFsid3ciLDJdLCJ3byIsIndl''@;'; put 'put ''ZWsiKSxzZSgiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLFJuKCJ3Iix0dCxPciksUm4oInd3Iix0dCxNdCksUm4oIlciLHR0LE9yKSxSbigiV1ciLHR0LE10KSx4dChbInciLCJ3dyIsIlciLCJXVyJdLGZ1bmN0aW9uKENlLEtlLGd0LEl0KXtLZVtJdC5zdWJzdHIoMCwxKV09VHQoQ2Up''@;'; put 'put ''fSk7ZnVuY3Rpb24geTAoQ2UsS2Upe3JldHVybiBDZS5zbGljZShLZSw3KS5jb25jYXQoQ2Uuc2xpY2UoMCxLZSkpfXNlKCJkIiwwLCJkbyIsImRheSIpLHNlKCJkZCIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyxDZSl9KSxzZSgi''@;'; put 'put ''ZGRkIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsQ2UpfSksc2UoImRkZGQiLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsQ2UpfSksc2UoImUiLDAsMCwid2Vla2RheSIp''@;'; put 'put ''LHNlKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxSbigiZCIsdHQpLFJuKCJlIix0dCksUm4oIkUiLHR0KSxSbigiZGQiLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2Uud2Vla2RheXNNaW5SZWdleChDZSl9KSxSbigiZGRkIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLndlZWtkYXlzU2hvcnRS''@;'; put 'put ''ZWdleChDZSl9KSxSbigiZGRkZCIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS53ZWVrZGF5c1JlZ2V4KENlKX0pLHh0KFsiZGQiLCJkZGQiLCJkZGRkIl0sZnVuY3Rpb24oQ2UsS2UsZ3QsSXQpe3ZhciBkbj1ndC5fbG9jYWxlLndlZWtkYXlzUGFyc2UoQ2UsSXQsZ3QuX3N0cmljdCk7bnVs''@;'; put 'put ''bCE9ZG4/S2UuZD1kbjpZKGd0KS5pbnZhbGlkV2Vla2RheT1DZX0pLHh0KFsiZCIsImUiLCJFIl0sZnVuY3Rpb24oQ2UsS2UsZ3QsSXQpe0tlW0l0XT1UdChDZSl9KTt2YXIgaWc9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxp''@;'; put 'put ''dCgiXyIpLE9sPSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksdWY9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHNkPWZ0LGRmPWZ0LGsxPWZ0O2Z1bmN0aW9uIEdoKENlLEtlLGd0KXt2YXIgSXQsZG4scW4saWk9Q2UudG9Mb2NhbGVMb3dlckNhc2Uo''@;'; put 'put ''KTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxJdD0wO0l0PDc7KytJdClxbj1VKFsyZTMsMV0pLmRheShJdCksdGhpcy5fbWluV2Vla2RheXNQYXJz''@;'; put 'put ''ZVtJdF09dGhpcy53ZWVrZGF5c01pbihxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbSXRdPXRoaXMud2Vla2RheXNTaG9ydChxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0l0XT10aGlzLndlZWtkYXlzKHFu''@;'; put 'put ''LCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBndD8iZGRkZCI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOiJkZGQiPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOi0x''@;'; put 'put ''IT09KGRuPVdpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6ImRkZGQiPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdp''@;'; put 'put ''LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6ImRkZCI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlz''@;'; put 'put ''Ll9taW5XZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDotMSE9PShkbj1XaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlp''@;'; put 'put ''KSk/ZG46bnVsbH1mdW5jdGlvbiBhbigpe2Z1bmN0aW9uIENlKEh1LGRkKXtyZXR1cm4gZGQubGVuZ3RoLUh1Lmxlbmd0aH12YXIgcW4saWksSWEsU28sZnMsS2U9W10sZ3Q9W10sSXQ9W10sZG49W107Zm9yKHFuPTA7cW48NztxbisrKWlpPVUoWzJlMywxXSkuZGF5KHFuKSxJYT1yaSh0aGlz''@;'; put 'put ''LndlZWtkYXlzTWluKGlpLCIiKSksU289cmkodGhpcy53ZWVrZGF5c1Nob3J0KGlpLCIiKSksZnM9cmkodGhpcy53ZWVrZGF5cyhpaSwiIikpLEtlLnB1c2goSWEpLGd0LnB1c2goU28pLEl0LnB1c2goZnMpLGRuLnB1c2goSWEpLGRuLnB1c2goU28pLGRuLnB1c2goZnMpO0tlLnNvcnQoQ2Up''@;'; put 'put ''LGd0LnNvcnQoQ2UpLEl0LnNvcnQoQ2UpLGRuLnNvcnQoQ2UpLHRoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2RuLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRo''@;'; put 'put ''aXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrSXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrZ3Quam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlz''@;'; put 'put ''TWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiB2aSgpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfWZ1bmN0aW9uIFBvKENlLEtlKXtzZShDZSwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRp''@;'; put 'put ''ZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLEtlKX0pfWZ1bmN0aW9uIGVvKENlLEtlKXtyZXR1cm4gS2UuX21lcmlkaWVtUGFyc2V9c2UoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxzZSgiaCIsWyJoaCIsMl0sMCx2aSksc2UoImsiLFsia2siLDJdLDAsZnVuY3Rpb24gQXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3VycygpfHwyNH0pLHNlKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3ZpLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMil9KSxzZSgiaG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3ZpLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMikrRSh0''@;'; put 'put ''aGlzLnNlY29uZHMoKSwyKX0pLHNlKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpfSksc2UoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vj''@;'; put 'put ''b25kcygpLDIpfSksUG8oImEiLCEwKSxQbygiQSIsITEpLFJuKCJhIixlbyksUm4oIkEiLGVvKSxSbigiSCIsdHQsV3QpLFJuKCJoIix0dCxPciksUm4oImsiLHR0LE9yKSxSbigiSEgiLHR0LE10KSxSbigiaGgiLHR0LE10KSxSbigia2siLHR0LE10KSxSbigiaG1tIixIZSksUm4oImhtbXNz''@;'; put 'put ''Iix1dCksUm4oIkhtbSIsSGUpLFJuKCJIbW1zcyIsdXQpLGh0KFsiSCIsIkhIIl0sZm4pLGh0KFsiayIsImtrIl0sZnVuY3Rpb24oQ2UsS2UsZ3Qpe3ZhciBJdD1UdChDZSk7S2VbZm5dPTI0PT09SXQ/MDpJdH0pLGh0KFsiYSIsIkEiXSxmdW5jdGlvbihDZSxLZSxndCl7Z3QuX2lzUG09Z3Qu''@;'; put 'put ''X2xvY2FsZS5pc1BNKENlKSxndC5fbWVyaWRpZW09Q2V9KSxodChbImgiLCJoaCJdLGZ1bmN0aW9uKENlLEtlLGd0KXtLZVtmbl09VHQoQ2UpLFkoZ3QpLmJpZ0hvdXI9ITB9KSxodCgiaG1tIixmdW5jdGlvbihDZSxLZSxndCl7dmFyIEl0PUNlLmxlbmd0aC0yO0tlW2ZuXT1UdChDZS5zdWJz''@;'; put 'put ''dHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQpKSxZKGd0KS5iaWdIb3VyPSEwfSksaHQoImhtbXNzIixmdW5jdGlvbihDZSxLZSxndCl7dmFyIEl0PUNlLmxlbmd0aC00LGRuPUNlLmxlbmd0aC0yO0tlW2ZuXT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIo''@;'; put 'put ''SXQsMikpLEtlW1h0XT1UdChDZS5zdWJzdHIoZG4pKSxZKGd0KS5iaWdIb3VyPSEwfSksaHQoIkhtbSIsZnVuY3Rpb24oQ2UsS2UsZ3Qpe3ZhciBJdD1DZS5sZW5ndGgtMjtLZVtmbl09VHQoQ2Uuc3Vic3RyKDAsSXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3RyKEl0KSl9KSxodCgiSG1tc3MiLGZ1''@;'; put 'put ''bmN0aW9uKENlLEtlLGd0KXt2YXIgSXQ9Q2UubGVuZ3RoLTQsZG49Q2UubGVuZ3RoLTI7S2VbZm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCwyKSksS2VbWHRdPVR0KENlLnN1YnN0cihkbikpfSk7dmFyIFZzPWVpKCJIb3VycyIsITApO3ZhciBTdCxqbD17''@;'; put 'put ''Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6''@;'; put 'put ''IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhv''@;'; put 'put ''dXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLHc6ImEgd2VlayIsd3c6IiVkIHdlZWtzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LG1vbnRoczpRbixtb250aHNTaG9ydDpsYSx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6aWcsd2Vl''@;'; put 'put ''a2RheXNNaW46dWYsd2Vla2RheXNTaG9ydDpPbCxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9cLj8vaX0sSG89e30sa289e307ZnVuY3Rpb24gQnQoQ2UsS2Upe3ZhciBndCxJdD1NYXRoLm1pbihDZS5sZW5ndGgsS2UubGVuZ3RoKTtmb3IoZ3Q9MDtndDxJdDtndCs9MSlpZihDZVtndF0hPT1L''@;'; put 'put ''ZVtndF0pcmV0dXJuIGd0O3JldHVybiBJdH1mdW5jdGlvbiBfbihDZSl7cmV0dXJuIENlJiZDZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIil9ZnVuY3Rpb24gYm4oQ2Upe3ZhciBLZT1udWxsO2lmKHZvaWQgMD09PUhvW0NlXSYmdWUmJnVlLmV4cG9ydHMmJmZ1bmN0aW9uIEluKENl''@;'; put 'put ''KXtyZXR1cm4hKCFDZXx8IUNlLm1hdGNoKCJeW14vXFxcXF0qJCIpKX0oQ2UpKXRyeXtLZT1TdC5fYWJicix5KDM1MzU4KSgiLi8iK0NlKSx1cihLZSl9Y2F0Y2h7SG9bQ2VdPW51bGx9cmV0dXJuIEhvW0NlXX1mdW5jdGlvbiB1cihDZSxLZSl7dmFyIGd0O3JldHVybiBDZSYmKChndD1PKEtl''@;'; put 'put ''KT90YShDZSk6YmkoQ2UsS2UpKT9TdD1ndDp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIitDZSsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksU3QuX2FiYnJ9ZnVuY3Rpb24gYmkoQ2UsS2Upe2lmKG51bGwh''@;'; put 'put ''PT1LZSl7dmFyIGd0LEl0PWpsO2lmKEtlLmFiYnI9Q2UsbnVsbCE9SG9bQ2VdKVYoImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxl''@;'; put 'put ''KGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIiksSXQ9SG9bQ2VdLl9jb25maWc7ZWxzZSBp''@;'; put 'put ''ZihudWxsIT1LZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9SG9bS2UucGFyZW50TG9jYWxlXSlJdD1Ib1tLZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0oZ3Q9Ym4oS2UucGFyZW50TG9jYWxlKSkpcmV0dXJuIGtvW0tlLnBhcmVudExvY2FsZV18fChrb1tLZS5wYXJlbnRM''@;'; put 'put ''b2NhbGVdPVtdKSxrb1tLZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6Q2UsY29uZmlnOktlfSksbnVsbDtJdD1ndC5fY29uZmlnfXJldHVybiBIb1tDZV09bmV3IEMoeChJdCxLZSkpLGtvW0NlXSYma29bQ2VdLmZvckVhY2goZnVuY3Rpb24oZG4pe2JpKGRuLm5hbWUsZG4uY29uZmlnKX0p''@;'; put 'put ''LHVyKENlKSxIb1tDZV19cmV0dXJuIGRlbGV0ZSBIb1tDZV0sbnVsbH1mdW5jdGlvbiB0YShDZSl7dmFyIEtlO2lmKENlJiZDZS5fbG9jYWxlJiZDZS5fbG9jYWxlLl9hYmJyJiYoQ2U9Q2UuX2xvY2FsZS5fYWJiciksIUNlKXJldHVybiBTdDtpZighQihDZSkpe2lmKEtlPWJuKENlKSlyZXR1''@;'; put 'put ''cm4gS2U7Q2U9W0NlXX1yZXR1cm4gZnVuY3Rpb24gbW4oQ2Upe2Zvcih2YXIgZ3QsSXQsZG4scW4sS2U9MDtLZTxDZS5sZW5ndGg7KXtmb3IoZ3Q9KHFuPV9uKENlW0tlXSkuc3BsaXQoIi0iKSkubGVuZ3RoLEl0PShJdD1fbihDZVtLZSsxXSkpP0l0LnNwbGl0KCItIik6bnVsbDtndD4wOyl7''@;'; put 'put ''aWYoZG49Ym4ocW4uc2xpY2UoMCxndCkuam9pbigiLSIpKSlyZXR1cm4gZG47aWYoSXQmJkl0Lmxlbmd0aD49Z3QmJkJ0KHFuLEl0KT49Z3QtMSlicmVhaztndC0tfUtlKyt9cmV0dXJuIFN0fShDZSl9ZnVuY3Rpb24gVmEoQ2Upe3ZhciBLZSxndD1DZS5fYTtyZXR1cm4gZ3QmJi0yPT09WShD''@;'; put 'put ''ZSkub3ZlcmZsb3cmJihLZT1ndFtoaV08MHx8Z3RbaGldPjExP2hpOmd0W2NuXTwxfHxndFtjbl0+cGEoZ3RbenRdLGd0W2hpXSk/Y246Z3RbZm5dPDB8fGd0W2ZuXT4yNHx8MjQ9PT1ndFtmbl0mJigwIT09Z3RbSWldfHwwIT09Z3RbWHRdfHwwIT09Z3RbZW5dKT9mbjpndFtJaV08MHx8Z3Rb''@;'; put 'put ''SWldPjU5P0lpOmd0W1h0XTwwfHxndFtYdF0+NTk/WHQ6Z3RbZW5dPDB8fGd0W2VuXT45OTk/ZW46LTEsWShDZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYoS2U8enR8fEtlPmNuKSYmKEtlPWNuKSxZKENlKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT1LZSYmKEtlPXVhKSxZKENlKS5fb3ZlcmZsb3dX''@;'; put 'put ''ZWVrZGF5JiYtMT09PUtlJiYoS2U9RWkpLFkoQ2UpLm92ZXJmbG93PUtlKSxDZX12YXIgJG89L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8p''@;'; put 'put ''PykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLFhsPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkfCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQp''@;'; put 'put ''P3xccypaKT8pPyQvLHRvPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLF9vPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwv''@;'; put 'put ''XGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9c''@;'; put 'put ''ZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L10sWyJZWVlZTU0iLC9cZHs2fS8sITFdLFsiWVlZWSIsL1xkezR9LywhMV1dLGppPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJI''@;'; put 'put ''SDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9d''@;'; put 'put ''LFsiSEgiLC9cZFxkL11dLFBjPS9eXC8/RGF0ZVwoKC0/XGQrKS9pLHpsPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihc''@;'; put 'put ''ZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLENhPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBUYShD''@;'; put 'put ''ZSl7dmFyIEtlLGd0LHFuLGlpLElhLFNvLEl0PUNlLl9pLGRuPSRvLmV4ZWMoSXQpfHxYbC5leGVjKEl0KSxmcz1fby5sZW5ndGgsSHU9amkubGVuZ3RoO2lmKGRuKXtmb3IoWShDZSkuaXNvPSEwLEtlPTAsZ3Q9ZnM7S2U8Z3Q7S2UrKylpZihfb1tLZV1bMV0uZXhlYyhkblsxXSkpe2lpPV9v''@;'; put 'put ''W0tlXVswXSxxbj0hMSE9PV9vW0tlXVsyXTticmVha31pZihudWxsPT1paSlyZXR1cm4gdm9pZChDZS5faXNWYWxpZD0hMSk7aWYoZG5bM10pe2ZvcihLZT0wLGd0PUh1O0tlPGd0O0tlKyspaWYoamlbS2VdWzFdLmV4ZWMoZG5bM10pKXtJYT0oZG5bMl18fCIgIikramlbS2VdWzBdO2JyZWFr''@;'; put 'put ''fWlmKG51bGw9PUlhKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKX1pZighcW4mJm51bGwhPUlhKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtpZihkbls0XSl7aWYoIXRvLmV4ZWMoZG5bNF0pKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtTbz0iWiJ9Q2UuX2Y9aWkrKElhfHwi''@;'; put 'put ''IikrKFNvfHwiIiksZjQoQ2UpfWVsc2UgQ2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gRzAoQ2Upe3ZhciBLZT1wYXJzZUludChDZSwxMCk7cmV0dXJuIEtlPD00OT8yZTMrS2U6S2U8PTk5OT8xOTAwK0tlOktlfWZ1bmN0aW9uIE1zKENlKXt2YXIgZ3QsS2U9emwuZXhlYyhmdW5jdGlvbiAkMChD''@;'; put 'put ''ZSl7cmV0dXJuIENlLnJlcGxhY2UoL1woW14oKV0qXCl8W1xuXHRdL2csIiAiKS5yZXBsYWNlKC8oXHNccyspL2csIiAiKS5yZXBsYWNlKC9eXHNccyovLCIiKS5yZXBsYWNlKC9cc1xzKiQvLCIiKX0oQ2UuX2kpKTtpZihLZSl7aWYoZ3Q9ZnVuY3Rpb24gWGgoQ2UsS2UsZ3QsSXQsZG4scW4p''@;'; put 'put ''e3ZhciBpaT1bRzAoQ2UpLGxhLmluZGV4T2YoS2UpLHBhcnNlSW50KGd0LDEwKSxwYXJzZUludChJdCwxMCkscGFyc2VJbnQoZG4sMTApXTtyZXR1cm4gcW4mJmlpLnB1c2gocGFyc2VJbnQocW4sMTApKSxpaX0oS2VbNF0sS2VbM10sS2VbMl0sS2VbNV0sS2VbNl0sS2VbN10pLCFmdW5jdGlv''@;'; put 'put ''biBObyhDZSxLZSxndCl7cmV0dXJuIUNlfHxPbC5pbmRleE9mKENlKT09PW5ldyBEYXRlKEtlWzBdLEtlWzFdLEtlWzJdKS5nZXREYXkoKXx8KFkoZ3QpLndlZWtkYXlNaXNtYXRjaD0hMCxndC5faXNWYWxpZD0hMSwhMSl9KEtlWzFdLGd0LENlKSlyZXR1cm47Q2UuX2E9Z3QsQ2UuX3R6bT1m''@;'; put 'put ''dW5jdGlvbiBxaShDZSxLZSxndCl7aWYoQ2UpcmV0dXJuIENhW0NlXTtpZihLZSlyZXR1cm4gMDt2YXIgSXQ9cGFyc2VJbnQoZ3QsMTApLGRuPUl0JTEwMDtyZXR1cm4oSXQtZG4pLzEwMCo2MCtkbn0oS2VbOF0sS2VbOV0sS2VbMTBdKSxDZS5fZD1Kci5hcHBseShudWxsLENlLl9hKSxDZS5f''@;'; put 'put ''ZC5zZXRVVENNaW51dGVzKENlLl9kLmdldFVUQ01pbnV0ZXMoKS1DZS5fdHptKSxZKENlKS5yZmMyODIyPSEwfWVsc2UgQ2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gb28oQ2UsS2UsZ3Qpe3JldHVybiBDZT8/S2U/P2d0fWZ1bmN0aW9uIF9sKENlKXt2YXIgS2UsZ3QsZG4scW4saWksSXQ9W107''@;'; put 'put ''aWYoIUNlLl9kKXtmb3IoZG49ZnVuY3Rpb24gYWcoQ2Upe3ZhciBLZT1uZXcgRGF0ZShfLm5vdygpKTtyZXR1cm4gQ2UuX3VzZVVUQz9bS2UuZ2V0VVRDRnVsbFllYXIoKSxLZS5nZXRVVENNb250aCgpLEtlLmdldFVUQ0RhdGUoKV06W0tlLmdldEZ1bGxZZWFyKCksS2UuZ2V0TW9udGgoKSxL''@;'; put 'put ''ZS5nZXREYXRlKCldfShDZSksQ2UuX3cmJm51bGw9PUNlLl9hW2NuXSYmbnVsbD09Q2UuX2FbaGldJiZmdW5jdGlvbiB0aChDZSl7dmFyIEtlLGd0LEl0LGRuLHFuLGlpLElhLFNvLGZzO251bGwhPShLZT1DZS5fdykuR0d8fG51bGwhPUtlLld8fG51bGwhPUtlLkU/KHFuPTEsaWk9NCxndD1v''@;'; put 'put ''byhLZS5HRyxDZS5fYVt6dF0sUnUoc2woKSwxLDQpLnllYXIpLEl0PW9vKEtlLlcsMSksKChkbj1vbyhLZS5FLDEpKTwxfHxkbj43KSYmKFNvPSEwKSk6KHFuPUNlLl9sb2NhbGUuX3dlZWsuZG93LGlpPUNlLl9sb2NhbGUuX3dlZWsuZG95LGZzPVJ1KHNsKCkscW4saWkpLGd0PW9vKEtlLmdn''@;'; put 'put ''LENlLl9hW3p0XSxmcy55ZWFyKSxJdD1vbyhLZS53LGZzLndlZWspLG51bGwhPUtlLmQ/KChkbj1LZS5kKTwwfHxkbj42KSYmKFNvPSEwKTpudWxsIT1LZS5lPyhkbj1LZS5lK3FuLChLZS5lPDB8fEtlLmU+NikmJihTbz0hMCkpOmRuPXFuKSxJdDwxfHxJdD5QcihndCxxbixpaSk/WShDZSku''@;'; put 'put ''X292ZXJmbG93V2Vla3M9ITA6bnVsbCE9U28/WShDZSkuX292ZXJmbG93V2Vla2RheT0hMDooSWE9SGEoZ3QsSXQsZG4scW4saWkpLENlLl9hW3p0XT1JYS55ZWFyLENlLl9kYXlPZlllYXI9SWEuZGF5T2ZZZWFyKX0oQ2UpLG51bGwhPUNlLl9kYXlPZlllYXImJihpaT1vbyhDZS5fYVt6dF0s''@;'; put 'put ''ZG5benRdKSwoQ2UuX2RheU9mWWVhcj52cihpaSl8fDA9PT1DZS5fZGF5T2ZZZWFyKSYmKFkoQ2UpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksZ3Q9SnIoaWksMCxDZS5fZGF5T2ZZZWFyKSxDZS5fYVtoaV09Z3QuZ2V0VVRDTW9udGgoKSxDZS5fYVtjbl09Z3QuZ2V0VVRDRGF0ZSgpKSxLZT0w''@;'; put 'put ''O0tlPDMmJm51bGw9PUNlLl9hW0tlXTsrK0tlKUNlLl9hW0tlXT1JdFtLZV09ZG5bS2VdO2Zvcig7S2U8NztLZSsrKUNlLl9hW0tlXT1JdFtLZV09bnVsbD09Q2UuX2FbS2VdPzI9PT1LZT8xOjA6Q2UuX2FbS2VdOzI0PT09Q2UuX2FbZm5dJiYwPT09Q2UuX2FbSWldJiYwPT09Q2UuX2FbWHRd''@;'; put 'put ''JiYwPT09Q2UuX2FbZW5dJiYoQ2UuX25leHREYXk9ITAsQ2UuX2FbZm5dPTApLENlLl9kPShDZS5fdXNlVVRDP0pyOlZ0KS5hcHBseShudWxsLEl0KSxxbj1DZS5fdXNlVVRDP0NlLl9kLmdldFVUQ0RheSgpOkNlLl9kLmdldERheSgpLG51bGwhPUNlLl90em0mJkNlLl9kLnNldFVUQ01pbnV0''@;'; put 'put ''ZXMoQ2UuX2QuZ2V0VVRDTWludXRlcygpLUNlLl90em0pLENlLl9uZXh0RGF5JiYoQ2UuX2FbZm5dPTI0KSxDZS5fdyYmdHlwZW9mIENlLl93LmQ8InUiJiZDZS5fdy5kIT09cW4mJihZKENlKS53ZWVrZGF5TWlzbWF0Y2g9ITApfX1mdW5jdGlvbiBmNChDZSl7aWYoQ2UuX2YhPT1fLklTT184''@;'; put 'put ''NjAxKWlmKENlLl9mIT09Xy5SRkNfMjgyMil7Q2UuX2E9W10sWShDZSkuZW1wdHk9ITA7dmFyIGd0LEl0LGRuLHFuLGlpLGZzLEh1LEtlPSIiK0NlLl9pLElhPUtlLmxlbmd0aCxTbz0wO2ZvcihIdT0oZG49b3QoQ2UuX2YsQ2UuX2xvY2FsZSkubWF0Y2gobSl8fFtdKS5sZW5ndGgsZ3Q9MDtn''@;'; put 'put ''dDxIdTtndCsrKShJdD0oS2UubWF0Y2goc3QocW49ZG5bZ3RdLENlKSl8fFtdKVswXSkmJigoaWk9S2Uuc3Vic3RyKDAsS2UuaW5kZXhPZihJdCkpKS5sZW5ndGg+MCYmWShDZSkudW51c2VkSW5wdXQucHVzaChpaSksS2U9S2Uuc2xpY2UoS2UuaW5kZXhPZihJdCkrSXQubGVuZ3RoKSxTbys9''@;'; put 'put ''SXQubGVuZ3RoKSx0ZVtxbl0/KEl0P1koQ2UpLmVtcHR5PSExOlkoQ2UpLnVudXNlZFRva2Vucy5wdXNoKHFuKSxqbihxbixJdCxDZSkpOkNlLl9zdHJpY3QmJiFJdCYmWShDZSkudW51c2VkVG9rZW5zLnB1c2gocW4pO1koQ2UpLmNoYXJzTGVmdE92ZXI9SWEtU28sS2UubGVuZ3RoPjAmJlko''@;'; put 'put ''Q2UpLnVudXNlZElucHV0LnB1c2goS2UpLENlLl9hW2ZuXTw9MTImJiEwPT09WShDZSkuYmlnSG91ciYmQ2UuX2FbZm5dPjAmJihZKENlKS5iaWdIb3VyPXZvaWQgMCksWShDZSkucGFyc2VkRGF0ZVBhcnRzPUNlLl9hLnNsaWNlKDApLFkoQ2UpLm1lcmlkaWVtPUNlLl9tZXJpZGllbSxDZS5f''@;'; put 'put ''YVtmbl09ZnVuY3Rpb24gcDQoQ2UsS2UsZ3Qpe3ZhciBJdDtyZXR1cm4gbnVsbD09Z3Q/S2U6bnVsbCE9Q2UubWVyaWRpZW1Ib3VyP0NlLm1lcmlkaWVtSG91cihLZSxndCk6KG51bGwhPUNlLmlzUE0mJigoSXQ9Q2UuaXNQTShndCkpJiZLZTwxMiYmKEtlKz0xMiksIUl0JiYxMj09PUtlJiYo''@;'; put 'put ''S2U9MCkpLEtlKX0oQ2UuX2xvY2FsZSxDZS5fYVtmbl0sQ2UuX21lcmlkaWVtKSxudWxsIT09KGZzPVkoQ2UpLmVyYSkmJihDZS5fYVt6dF09Q2UuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZnMsQ2UuX2FbenRdKSksX2woQ2UpLFZhKENlKX1lbHNlIE1zKENlKTtlbHNlIFRhKENlKX1mdW5j''@;'; put 'put ''dGlvbiBzdihDZSl7dmFyIEtlPUNlLl9pLGd0PUNlLl9mO3JldHVybiBDZS5fbG9jYWxlPUNlLl9sb2NhbGV8fHRhKENlLl9sKSxudWxsPT09S2V8fHZvaWQgMD09PWd0JiYiIj09PUtlP0ooe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIEtlJiYoQ2UuX2k9S2U9Q2UuX2xvY2Fs''@;'; put 'put ''ZS5wcmVwYXJzZShLZSkpLF9lKEtlKT9uZXcgbWUoVmEoS2UpKTooTihLZSk/Q2UuX2Q9S2U6QihndCk/ZnVuY3Rpb24gSzAoQ2Upe3ZhciBLZSxndCxJdCxkbixxbixpaSxJYT0hMSxTbz1DZS5fZi5sZW5ndGg7aWYoMD09PVNvKXJldHVybiBZKENlKS5pbnZhbGlkRm9ybWF0PSEwLHZvaWQo''@;'; put 'put ''Q2UuX2Q9bmV3IERhdGUoTmFOKSk7Zm9yKGRuPTA7ZG48U287ZG4rKylxbj0wLGlpPSExLEtlPWxlKHt9LENlKSxudWxsIT1DZS5fdXNlVVRDJiYoS2UuX3VzZVVUQz1DZS5fdXNlVVRDKSxLZS5fZj1DZS5fZltkbl0sZjQoS2UpLGVlKEtlKSYmKGlpPSEwKSxxbis9WShLZSkuY2hhcnNMZWZ0''@;'; put 'put ''T3Zlcixxbis9MTAqWShLZSkudW51c2VkVG9rZW5zLmxlbmd0aCxZKEtlKS5zY29yZT1xbixJYT9xbjxJdCYmKEl0PXFuLGd0PUtlKToobnVsbD09SXR8fHFuPEl0fHxpaSkmJihJdD1xbixndD1LZSxpaSYmKElhPSEwKSk7SyhDZSxndHx8S2UpfShDZSk6Z3Q/ZjQoQ2UpOmZ1bmN0aW9uIFJ3''@;'; put 'put ''KENlKXt2YXIgS2U9Q2UuX2k7TyhLZSk/Q2UuX2Q9bmV3IERhdGUoXy5ub3coKSk6TihLZSk/Q2UuX2Q9bmV3IERhdGUoS2UudmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIEtlP2Z1bmN0aW9uIHJhKENlKXt2YXIgS2U9UGMuZXhlYyhDZS5faSk7bnVsbD09PUtlPyhUYShDZSksITE9PT1D''@;'; put 'put ''ZS5faXNWYWxpZCYmKGRlbGV0ZSBDZS5faXNWYWxpZCxNcyhDZSksITE9PT1DZS5faXNWYWxpZCYmKGRlbGV0ZSBDZS5faXNWYWxpZCxDZS5fc3RyaWN0P0NlLl9pc1ZhbGlkPSExOl8uY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soQ2UpKSkpOkNlLl9kPW5ldyBEYXRlKCtLZVsxXSl9KENlKTpC''@;'; put 'put ''KEtlKT8oQ2UuX2E9TChLZS5zbGljZSgwKSxmdW5jdGlvbihndCl7cmV0dXJuIHBhcnNlSW50KGd0LDEwKX0pLF9sKENlKSk6dyhLZSk/ZnVuY3Rpb24gZ3UoQ2Upe2lmKCFDZS5fZCl7dmFyIEtlPW50KENlLl9pKTtDZS5fYT1MKFtLZS55ZWFyLEtlLm1vbnRoLHZvaWQgMD09PUtlLmRheT9L''@;'; put 'put ''ZS5kYXRlOktlLmRheSxLZS5ob3VyLEtlLm1pbnV0ZSxLZS5zZWNvbmQsS2UubWlsbGlzZWNvbmRdLGZ1bmN0aW9uKEl0KXtyZXR1cm4gSXQmJnBhcnNlSW50KEl0LDEwKX0pLF9sKENlKX19KENlKTp6KEtlKT9DZS5fZD1uZXcgRGF0ZShLZSk6Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhD''@;'; put 'put ''ZSl9KENlKSxlZShDZSl8fChDZS5fZD1udWxsKSxDZSkpfWZ1bmN0aW9uIGx2KENlLEtlLGd0LEl0LGRuKXt2YXIgcW49e307cmV0dXJuKCEwPT09S2V8fCExPT09S2UpJiYoSXQ9S2UsS2U9dm9pZCAwKSwoITA9PT1ndHx8ITE9PT1ndCkmJihJdD1ndCxndD12b2lkIDApLCh3KENlKSYmRihD''@;'; put 'put ''ZSl8fEIoQ2UpJiYwPT09Q2UubGVuZ3RoKSYmKENlPXZvaWQgMCkscW4uX2lzQU1vbWVudE9iamVjdD0hMCxxbi5fdXNlVVRDPXFuLl9pc1VUQz1kbixxbi5fbD1ndCxxbi5faT1DZSxxbi5fZj1LZSxxbi5fc3RyaWN0PUl0LGZ1bmN0aW9uIEZjKENlKXt2YXIgS2U9bmV3IG1lKFZhKHN2KENl''@;'; put 'put ''KSkpO3JldHVybiBLZS5fbmV4dERheSYmKEtlLmFkZCgxLCJkIiksS2UuX25leHREYXk9dm9pZCAwKSxLZX0ocW4pfWZ1bmN0aW9uIHNsKENlLEtlLGd0LEl0KXtyZXR1cm4gbHYoQ2UsS2UsZ3QsSXQsITEpfV8uY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9U2UoInZhbHVlIHByb3ZpZGVkIGlz''@;'; put 'put ''IG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCB3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRl''@;'; put 'put ''IGZvcm1hdHMgYXJlIGRpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsZnVuY3Rpb24oQ2Upe0NlLl9kPW5ldyBEYXRlKENlLl9pKyhDZS5fdXNlVVRDPyIgVVRDIjoiIikpfSks''@;'; put 'put ''Xy5JU09fODYwMT1mdW5jdGlvbigpe30sXy5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIEkzPVNlKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgQ2U9c2wuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmQ2UuaXNWYWxpZCgpP0NlPHRoaXM/dGhpczpDZTpKKCl9KSxMdz1TZSgibW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21l''@;'; put 'put ''bnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIENlPXNsLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJkNlLmlzVmFsaWQoKT9DZT50aGlzP3RoaXM6Q2U6SigpfSk7ZnVuY3Rpb24gbmgoQ2UsS2Upe3ZhciBndCxJ''@;'; put 'put ''dDtpZigxPT09S2UubGVuZ3RoJiZCKEtlWzBdKSYmKEtlPUtlWzBdKSwhS2UubGVuZ3RoKXJldHVybiBzbCgpO2ZvcihndD1LZVswXSxJdD0xO0l0PEtlLmxlbmd0aDsrK0l0KSghS2VbSXRdLmlzVmFsaWQoKXx8S2VbSXRdW0NlXShndCkpJiYoZ3Q9S2VbSXRdKTtyZXR1cm4gZ3R9dmFyIGZp''@;'; put 'put ''PVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBwZihDZSl7dmFyIEtlPW50KENlKSxndD1LZS55ZWFyfHwwLEl0PUtlLnF1YXJ0ZXJ8fDAsZG49S2UubW9udGh8fDAscW49S2Uud2Vl''@;'; put 'put ''a3x8S2UuaXNvV2Vla3x8MCxpaT1LZS5kYXl8fDAsSWE9S2UuaG91cnx8MCxTbz1LZS5taW51dGV8fDAsZnM9S2Uuc2Vjb25kfHwwLEh1PUtlLm1pbGxpc2Vjb25kfHwwO3RoaXMuX2lzVmFsaWQ9ZnVuY3Rpb24gb2coQ2Upe3ZhciBLZSxJdCxndD0hMSxkbj1maS5sZW5ndGg7Zm9yKEtlIGlu''@;'; put 'put ''IENlKWlmKFAoQ2UsS2UpJiYoLTE9PT1XaS5jYWxsKGZpLEtlKXx8bnVsbCE9Q2VbS2VdJiZpc05hTihDZVtLZV0pKSlyZXR1cm4hMTtmb3IoSXQ9MDtJdDxkbjsrK0l0KWlmKENlW2ZpW0l0XV0pe2lmKGd0KXJldHVybiExO3BhcnNlRmxvYXQoQ2VbZmlbSXRdXSkhPT1UdChDZVtmaVtJdF1d''@;'; put 'put ''KSYmKGd0PSEwKX1yZXR1cm4hMH0oS2UpLHRoaXMuX21pbGxpc2Vjb25kcz0rSHUrMWUzKmZzKzZlNCpTbysxZTMqSWEqNjAqNjAsdGhpcy5fZGF5cz0raWkrNypxbix0aGlzLl9tb250aHM9K2RuKzMqSXQrMTIqZ3QsdGhpcy5fZGF0YT17fSx0aGlzLl9sb2NhbGU9dGEoKSx0aGlzLl9idWJi''@;'; put 'put ''bGUoKX1mdW5jdGlvbiBsZyhDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgcGZ9ZnVuY3Rpb24gZzQoQ2Upe3JldHVybiBDZTwwPy0xKk1hdGgucm91bmQoLTEqQ2UpOk1hdGgucm91bmQoQ2UpfWZ1bmN0aW9uIEkxKENlLEtlKXtzZShDZSwwLDAsZnVuY3Rpb24oKXt2YXIgZ3Q9dGhpcy51dGNP''@;'; put 'put ''ZmZzZXQoKSxJdD0iKyI7cmV0dXJuIGd0PDAmJihndD0tZ3QsSXQ9Ii0iKSxJdCtFKH5+KGd0LzYwKSwyKStLZStFKH5+Z3QlNjAsMil9KX1JMSgiWiIsIjoiKSxJMSgiWloiLCIiKSxSbigiWiIsUmkpLFJuKCJaWiIsUmkpLGh0KFsiWiIsIlpaIl0sZnVuY3Rpb24oQ2UsS2UsZ3Qpe2d0Ll91''@;'; put 'put ''c2VVVEM9ITAsZ3QuX3R6bT1sZChSaSxDZSl9KTt2YXIgY3Y9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gbGQoQ2UsS2Upe3ZhciBkbixxbixndD0oS2V8fCIiKS5tYXRjaChDZSk7cmV0dXJuIG51bGw9PT1ndD9udWxsOjA9PT0ocW49NjAqKGRuPSgoZ3RbZ3QubGVuZ3RoLTFdfHxbXSkr''@;'; put 'put ''IiIpLm1hdGNoKGN2KXx8WyItIiwwLDBdKVsxXStUdChkblsyXSkpPzA6IisiPT09ZG5bMF0/cW46LXFufWZ1bmN0aW9uIFQ2KENlLEtlKXt2YXIgZ3QsSXQ7cmV0dXJuIEtlLl9pc1VUQz8oZ3Q9S2UuY2xvbmUoKSxJdD0oX2UoQ2UpfHxOKENlKT9DZS52YWx1ZU9mKCk6c2woQ2UpLnZhbHVl''@;'; put 'put ''T2YoKSktZ3QudmFsdWVPZigpLGd0Ll9kLnNldFRpbWUoZ3QuX2QudmFsdWVPZigpK0l0KSxfLnVwZGF0ZU9mZnNldChndCwhMSksZ3QpOnNsKENlKS5sb2NhbCgpfWZ1bmN0aW9uIG11KENlKXtyZXR1cm4tTWF0aC5yb3VuZChDZS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBf''@;'; put 'put ''MCgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fV8udXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgQTY9L14oLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKTooXGQrKSg/OjooXGQrKShcLlxkKik/KT8kLyxlMj0vXigtfFwrKT9QKD86''@;'; put 'put ''KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gSmwo''@;'; put 'put ''Q2UsS2Upe3ZhciBkbixxbixpaSxndD1DZSxJdD1udWxsO3JldHVybiBsZyhDZSk/Z3Q9e21zOkNlLl9taWxsaXNlY29uZHMsZDpDZS5fZGF5cyxNOkNlLl9tb250aHN9OnooQ2UpfHwhaXNOYU4oK0NlKT8oZ3Q9e30sS2U/Z3RbS2VdPStDZTpndC5taWxsaXNlY29uZHM9K0NlKTooSXQ9QTYu''@;'; put 'put ''ZXhlYyhDZSkpPyhkbj0iLSI9PT1JdFsxXT8tMToxLGd0PXt5OjAsZDpUdChJdFtjbl0pKmRuLGg6VHQoSXRbZm5dKSpkbixtOlR0KEl0W0lpXSkqZG4sczpUdChJdFtYdF0pKmRuLG1zOlR0KGc0KDFlMypJdFtlbl0pKSpkbn0pOihJdD1lMi5leGVjKENlKSk/Z3Q9e3k6UjEoSXRbMl0sZG49''@;'; put 'put ''Ii0iPT09SXRbMV0/LTE6MSksTTpSMShJdFszXSxkbiksdzpSMShJdFs0XSxkbiksZDpSMShJdFs1XSxkbiksaDpSMShJdFs2XSxkbiksbTpSMShJdFs3XSxkbiksczpSMShJdFs4XSxkbil9Om51bGw9PWd0P2d0PXt9OiJvYmplY3QiPT10eXBlb2YgZ3QmJigiZnJvbSJpbiBndHx8InRvImlu''@;'; put 'put ''IGd0KSYmKGlpPWZ1bmN0aW9uIHRzKENlLEtlKXt2YXIgZ3Q7cmV0dXJuIENlLmlzVmFsaWQoKSYmS2UuaXNWYWxpZCgpPyhLZT1UNihLZSxDZSksQ2UuaXNCZWZvcmUoS2UpP2d0PUkwKENlLEtlKTooKGd0PUkwKEtlLENlKSkubWlsbGlzZWNvbmRzPS1ndC5taWxsaXNlY29uZHMsZ3QubW9u''@;'; put 'put ''dGhzPS1ndC5tb250aHMpLGd0KTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fShzbChndC5mcm9tKSxzbChndC50bykpLChndD17fSkubXM9aWkubWlsbGlzZWNvbmRzLGd0Lk09aWkubW9udGhzKSxxbj1uZXcgcGYoZ3QpLGxnKENlKSYmUChDZSwiX2xvY2FsZSIpJiYocW4uX2xvY2FsZT1D''@;'; put 'put ''ZS5fbG9jYWxlKSxsZyhDZSkmJlAoQ2UsIl9pc1ZhbGlkIikmJihxbi5faXNWYWxpZD1DZS5faXNWYWxpZCkscW59ZnVuY3Rpb24gUjEoQ2UsS2Upe3ZhciBndD1DZSYmcGFyc2VGbG9hdChDZS5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4oZ3QpPzA6Z3QpKktlfWZ1bmN0aW9uIEkw''@;'; put 'put ''KENlLEtlKXt2YXIgZ3Q9e307cmV0dXJuIGd0Lm1vbnRocz1LZS5tb250aCgpLUNlLm1vbnRoKCkrMTIqKEtlLnllYXIoKS1DZS55ZWFyKCkpLENlLmNsb25lKCkuYWRkKGd0Lm1vbnRocywiTSIpLmlzQWZ0ZXIoS2UpJiYtLWd0Lm1vbnRocyxndC5taWxsaXNlY29uZHM9K0tlLStDZS5jbG9u''@;'; put 'put ''ZSgpLmFkZChndC5tb250aHMsIk0iKSxndH1mdW5jdGlvbiB0MihDZSxLZSl7cmV0dXJuIGZ1bmN0aW9uKGd0LEl0KXt2YXIgcW47cmV0dXJuIG51bGwhPT1JdCYmIWlzTmFOKCtJdCkmJihWKEtlLCJtb21lbnQoKS4iK0tlKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFz''@;'; put 'put ''ZSB1c2UgbW9tZW50KCkuIitLZSsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLHFuPWd0LGd0PUl0LEl0PXFuKSxMMyh0aGlzLEpsKGd0LEl0KSxDZSksdGhpc319''@;'; put 'put ''ZnVuY3Rpb24gTDMoQ2UsS2UsZ3QsSXQpe3ZhciBkbj1LZS5fbWlsbGlzZWNvbmRzLHFuPWc0KEtlLl9kYXlzKSxpaT1nNChLZS5fbW9udGhzKTtDZS5pc1ZhbGlkKCkmJihJdD1JdD8/ITAsaWkmJnB1KENlLFFyKENlLCJNb250aCIpK2lpKmd0KSxxbiYmVmkoQ2UsIkRhdGUiLFFyKENlLCJE''@;'; put 'put ''YXRlIikrcW4qZ3QpLGRuJiZDZS5fZC5zZXRUaW1lKENlLl9kLnZhbHVlT2YoKStkbipndCksSXQmJl8udXBkYXRlT2Zmc2V0KENlLHFufHxpaSkpfUpsLmZuPXBmLnByb3RvdHlwZSxKbC5pbnZhbGlkPWZ1bmN0aW9uIHQwKCl7cmV0dXJuIEpsKE5hTil9O3ZhciBrNj10MigxLCJhZGQiKSx1''@;'; put 'put ''Zz10MigtMSwic3VidHJhY3QiKTtmdW5jdGlvbiBPMyhDZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDZXx8Q2UgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gWHMoQ2Upe3JldHVybiBfZShDZSl8fE4oQ2UpfHxPMyhDZSl8fHooQ2UpfHxmdW5jdGlvbiBGdyhDZSl7dmFyIEtlPUIoQ2Up''@;'; put 'put ''LGd0PSExO3JldHVybiBLZSYmKGd0PTA9PT1DZS5maWx0ZXIoZnVuY3Rpb24oSXQpe3JldHVybiF6KEl0KSYmTzMoQ2UpfSkubGVuZ3RoKSxLZSYmZ3R9KENlKXx8ZnVuY3Rpb24gTm4oQ2Upe3ZhciBkbixLZT13KENlKSYmIUYoQ2UpLGd0PSExLEl0PVsieWVhcnMiLCJ5ZWFyIiwieSIsIm1v''@;'; put 'put ''bnRocyIsIm1vbnRoIiwiTSIsImRheXMiLCJkYXkiLCJkIiwiZGF0ZXMiLCJkYXRlIiwiRCIsImhvdXJzIiwiaG91ciIsImgiLCJtaW51dGVzIiwibWludXRlIiwibSIsInNlY29uZHMiLCJzZWNvbmQiLCJzIiwibWlsbGlzZWNvbmRzIiwibWlsbGlzZWNvbmQiLCJtcyJdLGlpPUl0Lmxlbmd0''@;'; put 'put ''aDtmb3IoZG49MDtkbjxpaTtkbis9MSlndD1ndHx8UChDZSxJdFtkbl0pO3JldHVybiBLZSYmZ3R9KENlKXx8bnVsbD09Q2V9ZnVuY3Rpb24gUDMoQ2UsS2Upe2lmKENlLmRhdGUoKTxLZS5kYXRlKCkpcmV0dXJuLVAzKEtlLENlKTt2YXIgZ3Q9MTIqKEtlLnllYXIoKS1DZS55ZWFyKCkpKyhL''@;'; put 'put ''ZS5tb250aCgpLUNlLm1vbnRoKCkpLEl0PUNlLmNsb25lKCkuYWRkKGd0LCJtb250aHMiKTtyZXR1cm4tKGd0KyhLZS1JdDwwPyhLZS1JdCkvKEl0LUNlLmNsb25lKCkuYWRkKGd0LTEsIm1vbnRocyIpKTooS2UtSXQpLyhDZS5jbG9uZSgpLmFkZChndCsxLCJtb250aHMiKS1JdCkpKXx8MH1m''@;'; put 'put ''dW5jdGlvbiBLYShDZSl7dmFyIEtlO3JldHVybiB2b2lkIDA9PT1DZT90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShLZT10YShDZSkpJiYodGhpcy5fbG9jYWxlPUtlKSx0aGlzKX1fLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixfLmRlZmF1bHRGb3JtYXRVdGM9IllZ''@;'; put 'put ''WVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBWcj1TZSgibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdl''@;'; put 'put ''IGxhbmd1YWdlcy4iLGZ1bmN0aW9uKENlKXtyZXR1cm4gdm9pZCAwPT09Q2U/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUoQ2UpfSk7ZnVuY3Rpb24gYmYoKXtyZXR1cm4gdGhpcy5fbG9jYWxlfXZhciBraT02ZTQseTQ9NjAqa2ksRXI9MzUwNjMyOCp5NDtmdW5jdGlvbiBsbChDZSxL''@;'; put 'put ''ZSl7cmV0dXJuKENlJUtlK0tlKSVLZX1mdW5jdGlvbiBWbyhDZSxLZSxndCl7cmV0dXJuIENlPDEwMCYmQ2U+PTA/bmV3IERhdGUoQ2UrNDAwLEtlLGd0KS1FcjpuZXcgRGF0ZShDZSxLZSxndCkudmFsdWVPZigpfWZ1bmN0aW9uIHhjKENlLEtlLGd0KXtyZXR1cm4gQ2U8MTAwJiZDZT49MD9E''@;'; put 'put ''YXRlLlVUQyhDZSs0MDAsS2UsZ3QpLUVyOkRhdGUuVVRDKENlLEtlLGd0KX1mdW5jdGlvbiBGMyhDZSxLZSl7cmV0dXJuIEtlLmVyYXNBYmJyUmVnZXgoQ2UpfWZ1bmN0aW9uIGhjKCl7dmFyIGRuLHFuLGlpLElhLFNvLENlPVtdLEtlPVtdLGd0PVtdLEl0PVtdLGZzPXRoaXMuZXJhcygpO2Zv''@;'; put 'put ''cihkbj0wLHFuPWZzLmxlbmd0aDtkbjxxbjsrK2RuKWlpPXJpKGZzW2RuXS5uYW1lKSxJYT1yaShmc1tkbl0uYWJiciksU289cmkoZnNbZG5dLm5hcnJvdyksS2UucHVzaChpaSksQ2UucHVzaChJYSksZ3QucHVzaChTbyksSXQucHVzaChpaSksSXQucHVzaChJYSksSXQucHVzaChTbyk7dGhp''@;'; put 'put ''cy5fZXJhc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc05hbWVSZWdleD1uZXcgUmVnRXhwKCJeKCIrS2Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNBYmJyUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0NlLmpvaW4oInwiKSsiKSIsImki''@;'; put 'put ''KSx0aGlzLl9lcmFzTmFycm93UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2d0LmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBjZChDZSxLZSl7c2UoMCxbQ2UsQ2UubGVuZ3RoXSwwLEtlKX1mdW5jdGlvbiBDdihDZSxLZSxndCxJdCxkbil7dmFyIHFuO3JldHVybiBudWxsPT1DZT9SdSh0aGlz''@;'; put 'put ''LEl0LGRuKS55ZWFyOihLZT4ocW49UHIoQ2UsSXQsZG4pKSYmKEtlPXFuKSxZdy5jYWxsKHRoaXMsQ2UsS2UsZ3QsSXQsZG4pKX1mdW5jdGlvbiBZdyhDZSxLZSxndCxJdCxkbil7dmFyIHFuPUhhKENlLEtlLGd0LEl0LGRuKSxpaT1Kcihxbi55ZWFyLDAscW4uZGF5T2ZZZWFyKTtyZXR1cm4g''@;'; put 'put ''dGhpcy55ZWFyKGlpLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoaWkuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKGlpLmdldFVUQ0RhdGUoKSksdGhpc31zZSgiTiIsMCwwLCJlcmFBYmJyIiksc2UoIk5OIiwwLDAsImVyYUFiYnIiKSxzZSgiTk5OIiwwLDAsImVyYUFiYnIiKSxzZSgi''@;'; put 'put ''Tk5OTiIsMCwwLCJlcmFOYW1lIiksc2UoIk5OTk5OIiwwLDAsImVyYU5hcnJvdyIpLHNlKCJ5IixbInkiLDFdLCJ5byIsImVyYVllYXIiKSxzZSgieSIsWyJ5eSIsMl0sMCwiZXJhWWVhciIpLHNlKCJ5IixbInl5eSIsM10sMCwiZXJhWWVhciIpLHNlKCJ5IixbInl5eXkiLDRdLDAsImVyYVll''@;'; put 'put ''YXIiKSxSbigiTiIsRjMpLFJuKCJOTiIsRjMpLFJuKCJOTk4iLEYzKSxSbigiTk5OTiIsZnVuY3Rpb24gWncoQ2UsS2Upe3JldHVybiBLZS5lcmFzTmFtZVJlZ2V4KENlKX0pLFJuKCJOTk5OTiIsZnVuY3Rpb24gSDYoQ2UsS2Upe3JldHVybiBLZS5lcmFzTmFycm93UmVnZXgoQ2UpfSksaHQo''@;'; put 'put ''WyJOIiwiTk4iLCJOTk4iLCJOTk5OIiwiTk5OTk4iXSxmdW5jdGlvbihDZSxLZSxndCxJdCl7dmFyIGRuPWd0Ll9sb2NhbGUuZXJhc1BhcnNlKENlLEl0LGd0Ll9zdHJpY3QpO2RuP1koZ3QpLmVyYT1kbjpZKGd0KS5pbnZhbGlkRXJhPUNlfSksUm4oInkiLHNpKSxSbigieXkiLHNpKSxSbigi''@;'; put 'put ''eXl5IixzaSksUm4oInl5eXkiLHNpKSxSbigieW8iLGZ1bmN0aW9uIEgzKENlLEtlKXtyZXR1cm4gS2UuX2VyYVllYXJPcmRpbmFsUmVnZXh8fHNpfSksaHQoWyJ5IiwieXkiLCJ5eXkiLCJ5eXl5Il0senQpLGh0KFsieW8iXSxmdW5jdGlvbihDZSxLZSxndCxJdCl7dmFyIGRuO2d0Ll9sb2Nh''@;'; put 'put ''bGUuX2VyYVllYXJPcmRpbmFsUmVnZXgmJihkbj1DZS5tYXRjaChndC5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksS2VbenRdPWd0Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZT9ndC5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoQ2UsZG4pOnBhcnNlSW50KENlLDEwKX0p''@;'; put 'put ''LHNlKDAsWyJnZyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSksc2UoMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxjZCgiZ2dnZyIsIndlZWtZZWFyIiksY2QoImdnZ2dnIiwid2Vla1llYXIiKSxjZCgi''@;'; put 'put ''R0dHRyIsImlzb1dlZWtZZWFyIiksY2QoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxSbigiRyIsUXQpLFJuKCJnIixRdCksUm4oIkdHIix0dCxNdCksUm4oImdnIix0dCxNdCksUm4oIkdHR0ciLFJ0LGl0KSxSbigiZ2dnZyIsUnQsaXQpLFJuKCJHR0dHRyIsUHQsJGUpLFJuKCJnZ2dnZyIsUHQs''@;'; put 'put ''JGUpLHh0KFsiZ2dnZyIsImdnZ2dnIiwiR0dHRyIsIkdHR0dHIl0sZnVuY3Rpb24oQ2UsS2UsZ3QsSXQpe0tlW0l0LnN1YnN0cigwLDIpXT1UdChDZSl9KSx4dChbImdnIiwiR0ciXSxmdW5jdGlvbihDZSxLZSxndCxJdCl7S2VbSXRdPV8ucGFyc2VUd29EaWdpdFllYXIoQ2UpfSksc2UoIlEi''@;'; put 'put ''LDAsIlFvIiwicXVhcnRlciIpLFJuKCJRIix5dCksaHQoIlEiLGZ1bmN0aW9uKENlLEtlKXtLZVtoaV09MyooVHQoQ2UpLTEpfSksc2UoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxSbigiRCIsdHQsT3IpLFJuKCJERCIsdHQsTXQpLFJuKCJEbyIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBD''@;'; put 'put ''ZT9LZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8S2UuX29yZGluYWxQYXJzZTpLZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSxodChbIkQiLCJERCJdLGNuKSxodCgiRG8iLGZ1bmN0aW9uKENlLEtlKXtLZVtjbl09VHQoQ2UubWF0Y2godHQpWzBdKX0pO3ZhciBxMD1laSgi''@;'; put 'put ''RGF0ZSIsITApO3NlKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxSbigiREREIixxdCksUm4oIkREREQiLER0KSxodChbIkRERCIsIkREREQiXSxmdW5jdGlvbihDZSxLZSxndCl7Z3QuX2RheU9mWWVhcj1UdChDZSl9KSxzZSgibSIsWyJtbSIsMl0sMCwibWludXRlIiks''@;'; put 'put ''Um4oIm0iLHR0LFd0KSxSbigibW0iLHR0LE10KSxodChbIm0iLCJtbSJdLElpKTt2YXIgd2Y9ZWkoIk1pbnV0ZXMiLCExKTtzZSgicyIsWyJzcyIsMl0sMCwic2Vjb25kIiksUm4oInMiLHR0LFd0KSxSbigic3MiLHR0LE10KSxodChbInMiLCJzcyJdLFh0KTt2YXIgaWgsVjYsQ2Y9ZWkoIlNl''@;'; put 'put ''Y29uZHMiLCExKTtmb3Ioc2UoIlMiLDAsMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMDApfSksc2UoMCxbIlNTIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pLHNlKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiks''@;'; put 'put ''c2UoMCxbIlNTU1MiLDRdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTIiw1XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0''@;'; put 'put ''aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTUyIsN10sMCxmdW5jdGlvbigpe3JldHVybiAxZTQqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTU1NTIiw4XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTU1NT''@;'; put 'put ''Iiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxSbigiUyIscXQseXQpLFJuKCJTUyIscXQsTXQpLFJuKCJTU1MiLHF0LER0KSxpaD0iU1NTUyI7aWgubGVuZ3RoPD05O2loKz0iUyIpUm4oaWgsc2kpO2Z1bmN0aW9uIEhjKENlLEtlKXtLZVtlbl09VHQo''@;'; put 'put ''MWUzKigiMC4iK0NlKSl9Zm9yKGloPSJTIjtpaC5sZW5ndGg8PTk7aWgrPSJTIilodChpaCxIYyk7VjY9ZWkoIk1pbGxpc2Vjb25kcyIsITEpLHNlKCJ6IiwwLDAsInpvbmVBYmJyIiksc2UoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIHppPW1lLnByb3RvdHlwZTtmdW5jdGlvbiBNdihDZSl7''@;'; put 'put ''cmV0dXJuIENlfXppLmFkZD1rNix6aS5jYWxlbmRhcj1mdW5jdGlvbiBoZyhDZSxLZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihhcmd1bWVudHNbMF0/WHMoYXJndW1lbnRzWzBdKT8oQ2U9YXJndW1lbnRzWzBdLEtlPXZvaWQgMCk6ZnVuY3Rpb24gbTQoQ2Upe3ZhciBkbixLZT13KENlKSYm''@;'; put 'put ''IUYoQ2UpLGd0PSExLEl0PVsic2FtZURheSIsIm5leHREYXkiLCJsYXN0RGF5IiwibmV4dFdlZWsiLCJsYXN0V2VlayIsInNhbWVFbHNlIl07Zm9yKGRuPTA7ZG48SXQubGVuZ3RoO2RuKz0xKWd0PWd0fHxQKENlLEl0W2RuXSk7cmV0dXJuIEtlJiZndH0oYXJndW1lbnRzWzBdKSYmKEtlPWFy''@;'; put 'put ''Z3VtZW50c1swXSxDZT12b2lkIDApOihDZT12b2lkIDAsS2U9dm9pZCAwKSk7dmFyIGd0PUNlfHxzbCgpLEl0PVQ2KGd0LHRoaXMpLnN0YXJ0T2YoImRheSIpLGRuPV8uY2FsZW5kYXJGb3JtYXQodGhpcyxJdCl8fCJzYW1lRWxzZSIscW49S2UmJihwKEtlW2RuXSk/S2VbZG5dLmNhbGwodGhp''@;'; put 'put ''cyxndCk6S2VbZG5dKTtyZXR1cm4gdGhpcy5mb3JtYXQocW58fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGRuLHRoaXMsc2woZ3QpKSl9LHppLmNsb25lPWZ1bmN0aW9uIHZmKCl7cmV0dXJuIG5ldyBtZSh0aGlzKX0semkuZGlmZj1mdW5jdGlvbiBNYyhDZSxLZSxndCl7dmFyIEl0LGRu''@;'; put 'put ''LHFuO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO2lmKCEoSXQ9VDYoQ2UsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChkbj02ZTQqKEl0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLEtlPV90KEtlKSl7Y2FzZSJ5ZWFyIjpxbj1QMyh0aGlzLEl0KS8xMjti''@;'; put 'put ''cmVhaztjYXNlIm1vbnRoIjpxbj1QMyh0aGlzLEl0KTticmVhaztjYXNlInF1YXJ0ZXIiOnFuPVAzKHRoaXMsSXQpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOnFuPSh0aGlzLUl0KS8xZTM7YnJlYWs7Y2FzZSJtaW51dGUiOnFuPSh0aGlzLUl0KS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjpxbj0odGhp''@;'; put 'put ''cy1JdCkvMzZlNTticmVhaztjYXNlImRheSI6cW49KHRoaXMtSXQtZG4pLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6cW49KHRoaXMtSXQtZG4pLzYwNDhlNTticmVhaztkZWZhdWx0OnFuPXRoaXMtSXR9cmV0dXJuIGd0P3FuOldlKHFuKX0semkuZW5kT2Y9ZnVuY3Rpb24gbjIoQ2Upe3ZhciBL''@;'; put 'put ''ZSxndDtpZih2b2lkIDA9PT0oQ2U9X3QoQ2UpKXx8Im1pbGxpc2Vjb25kIj09PUNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKGd0PXRoaXMuX2lzVVRDP3hjOlZvLENlKXtjYXNlInllYXIiOktlPWd0KHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRl''@;'; put 'put ''ciI6S2U9Z3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzKzMsMSktMTticmVhaztjYXNlIm1vbnRoIjpLZT1ndCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6S2U9Z3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMu''@;'; put 'put ''ZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjpLZT1ndCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLTE7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6S2U9Z3QodGhpcy55ZWFyKCksdGhp''@;'; put 'put ''cy5tb250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZSs9eTQtbGwoS2UrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpraSkseTQpLTE7YnJlYWs7Y2FzZSJtaW51dGUiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlKz1r''@;'; put 'put ''aS1sbChLZSxraSktMTticmVhaztjYXNlInNlY29uZCI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UrPTFlMy1sbChLZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShLZSksXy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30semkuZm9ybWF0PWZ1bmN0aW9uIHB2KENlKXtDZXx8KENl''@;'; put 'put ''PXRoaXMuaXNVdGMoKT9fLmRlZmF1bHRGb3JtYXRVdGM6Xy5kZWZhdWx0Rm9ybWF0KTt2YXIgS2U9SmUodGhpcyxDZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoS2UpfSx6aS5mcm9tPWZ1bmN0aW9uIE53KENlLEtlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfZShD''@;'; put 'put ''ZSkmJkNlLmlzVmFsaWQoKXx8c2woQ2UpLmlzVmFsaWQoKSk/Smwoe3RvOnRoaXMsZnJvbTpDZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghS2UpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LHppLmZyb21Ob3c9ZnVuY3Rpb24gZ3YoQ2Upe3JldHVybiB0aGlz''@;'; put 'put ''LmZyb20oc2woKSxDZSl9LHppLnRvPWZ1bmN0aW9uIFZ3KENlLEtlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfZShDZSkmJkNlLmlzVmFsaWQoKXx8c2woQ2UpLmlzVmFsaWQoKSk/Smwoe2Zyb206dGhpcyx0bzpDZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghS2UpOnRo''@;'; put 'put ''aXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LHppLnRvTm93PWZ1bmN0aW9uIEJ3KENlKXtyZXR1cm4gdGhpcy50byhzbCgpLENlKX0semkuZ2V0PWZ1bmN0aW9uIE5pKENlKXtyZXR1cm4gcCh0aGlzW0NlPV90KENlKV0pP3RoaXNbQ2VdKCk6dGhpc30semkuaW52YWxpZEF0PWZ1bmN0''@;'; put 'put ''aW9uIHJoKCl7cmV0dXJuIFkodGhpcykub3ZlcmZsb3d9LHppLmlzQWZ0ZXI9ZnVuY3Rpb24gRDYoQ2UsS2Upe3ZhciBndD1fZShDZSk/Q2U6c2woQ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhZ3QuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oS2U9X3QoS2UpfHwibWlsbGlz''@;'; put 'put ''ZWNvbmQiKT90aGlzLnZhbHVlT2YoKT5ndC52YWx1ZU9mKCk6Z3QudmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKEtlKS52YWx1ZU9mKCkpfSx6aS5pc0JlZm9yZT1mdW5jdGlvbiBkdihDZSxLZSl7dmFyIGd0PV9lKENlKT9DZTpzbChDZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8''@;'; put 'put ''fCFndC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShLZT1fdChLZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPGd0LnZhbHVlT2YoKTp0aGlzLmNsb25lKCkuZW5kT2YoS2UpLnZhbHVlT2YoKTxndC52YWx1ZU9mKCkpfSx6aS5pc0JldHdlZW49ZnVuY3Rpb24gSTYoQ2Us''@;'; put 'put ''S2UsZ3QsSXQpe3ZhciBkbj1fZShDZSk/Q2U6c2woQ2UpLHFuPV9lKEtlKT9LZTpzbChLZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmRuLmlzVmFsaWQoKSYmcW4uaXNWYWxpZCgpKSYmKCIoIj09PShJdD1JdHx8IigpIilbMF0/dGhpcy5pc0FmdGVyKGRuLGd0KTohdGhpcy5pc0JlZm9y''@;'; put 'put ''ZShkbixndCkpJiYoIikiPT09SXRbMV0/dGhpcy5pc0JlZm9yZShxbixndCk6IXRoaXMuaXNBZnRlcihxbixndCkpfSx6aS5pc1NhbWU9ZnVuY3Rpb24gdjQoQ2UsS2Upe3ZhciBJdCxndD1fZShDZSk/Q2U6c2woQ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhZ3QuaXNWYWxpZCgpKSYm''@;'; put 'put ''KCJtaWxsaXNlY29uZCI9PT0oS2U9X3QoS2UpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PWd0LnZhbHVlT2YoKTooSXQ9Z3QudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKEtlKS52YWx1ZU9mKCk8PUl0JiZJdDw9dGhpcy5jbG9uZSgpLmVuZE9mKEtlKS52YWx1ZU9m''@;'; put 'put ''KCkpKX0semkuaXNTYW1lT3JBZnRlcj1mdW5jdGlvbiByMChDZSxLZSl7cmV0dXJuIHRoaXMuaXNTYW1lKENlLEtlKXx8dGhpcy5pc0FmdGVyKENlLEtlKX0semkuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24gSHcoQ2UsS2Upe3JldHVybiB0aGlzLmlzU2FtZShDZSxLZSl8fHRoaXMuaXNCZWZv''@;'; put 'put ''cmUoQ2UsS2UpfSx6aS5pc1ZhbGlkPWZ1bmN0aW9uIHlmKCl7cmV0dXJuIGVlKHRoaXMpfSx6aS5sYW5nPVZyLHppLmxvY2FsZT1LYSx6aS5sb2NhbGVEYXRhPWJmLHppLm1heD1Mdyx6aS5taW49STMsemkucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uIHp3KCl7cmV0dXJuIEsoe30sWSh0aGlzKSl9''@;'; put 'put ''LHppLnNldD1mdW5jdGlvbiBEYShDZSxLZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBDZSl7dmFyIEl0LGd0PWZ1bmN0aW9uIHVuKENlKXt2YXIgZ3QsS2U9W107Zm9yKGd0IGluIENlKVAoQ2UsZ3QpJiZLZS5wdXNoKHt1bml0Omd0LHByaW9yaXR5OlFlW2d0XX0pO3JldHVybiBLZS5zb3J0KGZ1''@;'; put 'put ''bmN0aW9uKEl0LGRuKXtyZXR1cm4gSXQucHJpb3JpdHktZG4ucHJpb3JpdHl9KSxLZX0oQ2U9bnQoQ2UpKSxkbj1ndC5sZW5ndGg7Zm9yKEl0PTA7SXQ8ZG47SXQrKyl0aGlzW2d0W0l0XS51bml0XShDZVtndFtJdF0udW5pdF0pfWVsc2UgaWYocCh0aGlzW0NlPV90KENlKV0pKXJldHVybiB0''@;'; put 'put ''aGlzW0NlXShLZSk7cmV0dXJuIHRoaXN9LHppLnN0YXJ0T2Y9ZnVuY3Rpb24gZXUoQ2Upe3ZhciBLZSxndDtpZih2b2lkIDA9PT0oQ2U9X3QoQ2UpKXx8Im1pbGxpc2Vjb25kIj09PUNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKGd0PXRoaXMuX2lzVVRDP3hjOlZvLENl''@;'; put 'put ''KXtjYXNlInllYXIiOktlPWd0KHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjpLZT1ndCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6S2U9Z3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nh''@;'; put 'put ''c2Uid2VlayI6S2U9Z3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOktlPWd0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZGF5IjpjYXNlImRhdGUiOktlPWd0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSk7YnJlYWs7Y2FzZSJob3VyIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09bGwoS2UrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpraSkseTQpO2JyZWFrO2Nhc2UibWludXRl''@;'; put 'put ''IjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09bGwoS2Usa2kpO2JyZWFrO2Nhc2Uic2Vjb25kIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09bGwoS2UsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKEtlKSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSx6aS5zdWJ0cmFjdD11Zyx6''@;'; put 'put ''aS50b0FycmF5PWZ1bmN0aW9uIHBnKCl7dmFyIENlPXRoaXM7cmV0dXJuW0NlLnllYXIoKSxDZS5tb250aCgpLENlLmRhdGUoKSxDZS5ob3VyKCksQ2UubWludXRlKCksQ2Uuc2Vjb25kKCksQ2UubWlsbGlzZWNvbmQoKV19LHppLnRvT2JqZWN0PWZ1bmN0aW9uIG12KCl7dmFyIENlPXRoaXM7''@;'; put 'put ''cmV0dXJue3llYXJzOkNlLnllYXIoKSxtb250aHM6Q2UubW9udGgoKSxkYXRlOkNlLmRhdGUoKSxob3VyczpDZS5ob3VycygpLG1pbnV0ZXM6Q2UubWludXRlcygpLHNlY29uZHM6Q2Uuc2Vjb25kcygpLG1pbGxpc2Vjb25kczpDZS5taWxsaXNlY29uZHMoKX19LHppLnRvRGF0ZT1mdW5jdGlv''@;'; put 'put ''biBSMCgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LHppLnRvSVNPU3RyaW5nPWZ1bmN0aW9uIGh2KENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIEtlPSEwIT09Q2UsZ3Q9S2U/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIGd0LnllYXIoKTww''@;'; put 'put ''fHxndC55ZWFyKCk+OTk5OT9KZShndCxLZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOnAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP0tlP3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlz''@;'; put 'put ''LnZhbHVlT2YoKSs2MCp0aGlzLnV0Y09mZnNldCgpKjFlMykudG9JU09TdHJpbmcoKS5yZXBsYWNlKCJaIixKZShndCwiWiIpKTpKZShndCxLZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LHppLmluc3BlY3Q9ZnVuY3Rpb24g''@;'; put 'put ''ZnYoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIGd0LEl0LENlPSJtb21lbnQiLEtlPSIiO3JldHVybiB0aGlzLmlzTG9jYWwoKXx8KENlPTA9PT10aGlzLnV0Y09mZnNldCgpPyJtb21lbnQudXRjIjoibW9tZW50LnBh''@;'; put 'put ''cnNlWm9uZSIsS2U9IloiKSxndD0iWyIrQ2UrJygiXScsSXQ9MDw9dGhpcy55ZWFyKCkmJnRoaXMueWVhcigpPD05OTk5PyJZWVlZIjoiWVlZWVlZIix0aGlzLmZvcm1hdChndCtJdCsiLU1NLUREW1RdSEg6bW06c3MuU1NTIitLZSsnWyIpXScpfSx0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9''@;'; put 'put ''U3ltYm9sLmZvciYmKHppW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ1bmN0aW9uKCl7cmV0dXJuIk1vbWVudDwiK3RoaXMuZm9ybWF0KCkrIj4ifSksemkudG9KU09OPWZ1bmN0aW9uIGp3KCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJp''@;'; put 'put ''bmcoKTpudWxsfSx6aS50b1N0cmluZz1mdW5jdGlvbiBiNCgpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0semkudW5peD1mdW5jdGlvbiBSNigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVP''@;'; put 'put ''ZigpLzFlMyl9LHppLnZhbHVlT2Y9ZnVuY3Rpb24gT3UoKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSx6aS5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24gdnYoKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9j''@;'; put 'put ''YWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSx6aS5lcmFOYW1lPWZ1bmN0aW9uIFV3KCl7dmFyIENlLEtlLGd0LEl0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1JdC5sZW5ndGg7Q2U8S2U7KytDZSlpZihndD10aGlzLmNsb25lKCkuc3Rh''@;'; put 'put ''cnRPZigiZGF5IikudmFsdWVPZigpLEl0W0NlXS5zaW5jZTw9Z3QmJmd0PD1JdFtDZV0udW50aWx8fEl0W0NlXS51bnRpbDw9Z3QmJmd0PD1JdFtDZV0uc2luY2UpcmV0dXJuIEl0W0NlXS5uYW1lO3JldHVybiIifSx6aS5lcmFOYXJyb3c9ZnVuY3Rpb24gTzYoKXt2YXIgQ2UsS2UsZ3QsSXQ9''@;'; put 'put ''dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihDZT0wLEtlPUl0Lmxlbmd0aDtDZTxLZTsrK0NlKWlmKGd0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksSXRbQ2VdLnNpbmNlPD1ndCYmZ3Q8PUl0W0NlXS51bnRpbHx8SXRbQ2VdLnVudGlsPD1ndCYmZ3Q8PUl0W0Nl''@;'; put 'put ''XS5zaW5jZSlyZXR1cm4gSXRbQ2VdLm5hcnJvdztyZXR1cm4iIn0semkuZXJhQWJicj1mdW5jdGlvbiBidigpe3ZhciBDZSxLZSxndCxJdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9SXQubGVuZ3RoO0NlPEtlOysrQ2UpaWYoZ3Q9dGhpcy5jbG9uZSgpLnN0YXJ0T2Yo''@;'; put 'put ''ImRheSIpLnZhbHVlT2YoKSxJdFtDZV0uc2luY2U8PWd0JiZndDw9SXRbQ2VdLnVudGlsfHxJdFtDZV0udW50aWw8PWd0JiZndDw9SXRbQ2VdLnNpbmNlKXJldHVybiBJdFtDZV0uYWJicjtyZXR1cm4iIn0semkuZXJhWWVhcj1mdW5jdGlvbiB5digpe3ZhciBDZSxLZSxndCxJdCxkbj10aGlz''@;'; put 'put ''LmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9ZG4ubGVuZ3RoO0NlPEtlOysrQ2UpaWYoZ3Q9ZG5bQ2VdLnNpbmNlPD1kbltDZV0udW50aWw/MTotMSxJdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLGRuW0NlXS5zaW5jZTw9SXQmJkl0PD1kbltDZV0udW50''@;'; put 'put ''aWx8fGRuW0NlXS51bnRpbDw9SXQmJkl0PD1kbltDZV0uc2luY2UpcmV0dXJuKHRoaXMueWVhcigpLV8oZG5bQ2VdLnNpbmNlKS55ZWFyKCkpKmd0K2RuW0NlXS5vZmZzZXQ7cmV0dXJuIHRoaXMueWVhcigpfSx6aS55ZWFyPVduLHppLmlzTGVhcFllYXI9ZnVuY3Rpb24gJGkoKXtyZXR1cm4g''@;'; put 'put ''cm4odGhpcy55ZWFyKCkpfSx6aS53ZWVrWWVhcj1mdW5jdGlvbiBnZyhDZSl7cmV0dXJuIEN2LmNhbGwodGhpcyxDZSx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSt0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0''@;'; put 'put ''YSgpLl93ZWVrLmRveSl9LHppLmlzb1dlZWtZZWFyPWZ1bmN0aW9uIF92KENlKXtyZXR1cm4gQ3YuY2FsbCh0aGlzLENlLHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LHppLnF1YXJ0ZXI9emkucXVhcnRlcnM9ZnVuY3Rpb24gbWcoQ2Upe3JldHVybiBudWxsPT1DZT9N''@;'; put 'put ''YXRoLmNlaWwoKHRoaXMubW9udGgoKSsxKS8zKTp0aGlzLm1vbnRoKDMqKENlLTEpK3RoaXMubW9udGgoKSUzKX0semkubW9udGg9TGMsemkuZGF5c0luTW9udGg9ZnVuY3Rpb24gRDAoKXtyZXR1cm4gcGEodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0semkud2Vlaz16aS53ZWVrcz1mdW5j''@;'; put 'put ''dGlvbiBZaShDZSl7dmFyIEtlPXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIG51bGw9PUNlP0tlOnRoaXMuYWRkKDcqKENlLUtlKSwiZCIpfSx6aS5pc29XZWVrPXppLmlzb1dlZWtzPWZ1bmN0aW9uIHlsKENlKXt2YXIgS2U9UnUodGhpcywxLDQpLndlZWs7cmV0dXJuIG51''@;'; put 'put ''bGw9PUNlP0tlOnRoaXMuYWRkKDcqKENlLUtlKSwiZCIpfSx6aS53ZWVrc0luWWVhcj1mdW5jdGlvbiBOMygpe3ZhciBDZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gUHIodGhpcy55ZWFyKCksQ2UuZG93LENlLmRveSl9LHppLndlZWtzSW5XZWVrWWVhcj1mdW5jdGlvbiBXdygp''@;'; put 'put ''e3ZhciBDZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gUHIodGhpcy53ZWVrWWVhcigpLENlLmRvdyxDZS5kb3kpfSx6aS5pc29XZWVrc0luWWVhcj1mdW5jdGlvbiBONigpe3JldHVybiBQcih0aGlzLnllYXIoKSwxLDQpfSx6aS5pc29XZWVrc0luSVNPV2Vla1llYXI9ZnVuY3Rp''@;'; put 'put ''b24gd3YoKXtyZXR1cm4gUHIodGhpcy5pc29XZWVrWWVhcigpLDEsNCl9LHppLmRhdGU9cTAsemkuZGF5PXppLmRheXM9ZnVuY3Rpb24gTmEoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47dmFyIEtlPVFyKHRoaXMsIkRheSIpO3JldHVybiBudWxsIT1D''@;'; put 'put ''ZT8oQ2U9ZnVuY3Rpb24gUWMoQ2UsS2Upe3JldHVybiJzdHJpbmciIT10eXBlb2YgQ2U/Q2U6aXNOYU4oQ2UpPyJudW1iZXIiPT10eXBlb2YoQ2U9S2Uud2Vla2RheXNQYXJzZShDZSkpP0NlOm51bGw6cGFyc2VJbnQoQ2UsMTApfShDZSx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoQ2Ut''@;'; put 'put ''S2UsImQiKSk6S2V9LHppLndlZWtkYXk9ZnVuY3Rpb24gRDMoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47dmFyIEtlPSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1DZT9LZTp0aGlzLmFkZChD''@;'; put 'put ''ZS1LZSwiZCIpfSx6aS5pc29XZWVrZGF5PWZ1bmN0aW9uICRoKENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPUNlP3RoaXM6TmFOO2lmKG51bGwhPUNlKXt2YXIgS2U9ZnVuY3Rpb24gcmcoQ2UsS2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2U/S2Uud2Vla2RheXNQYXJz''@;'; put 'put ''ZShDZSklN3x8Nzppc05hTihDZSk/bnVsbDpDZX0oQ2UsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/S2U6S2UtNyl9cmV0dXJuIHRoaXMuZGF5KCl8fDd9LHppLmRheU9mWWVhcj1mdW5jdGlvbiBTdihDZSl7dmFyIEtlPU1hdGgucm91bmQoKHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQoQ2UtS2UsImQiKX0semkuaG91cj16aS5ob3Vycz1Wcyx6aS5taW51dGU9emkubWludXRlcz13Zix6aS5zZWNvbmQ9emkuc2Vjb25k''@;'; put 'put ''cz1DZix6aS5taWxsaXNlY29uZD16aS5taWxsaXNlY29uZHM9VjYsemkudXRjT2Zmc2V0PWZ1bmN0aW9uIGdmKENlLEtlLGd0KXt2YXIgZG4sSXQ9dGhpcy5fb2Zmc2V0fHwwO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47aWYobnVsbCE9Q2Upe2lmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgQ2Upe2lmKG51bGw9PT0oQ2U9bGQoUmksQ2UpKSlyZXR1cm4gdGhpc31lbHNlIE1hdGguYWJzKENlKTwxNiYmIWd0JiYoQ2UqPTYwKTtyZXR1cm4hdGhpcy5faXNVVEMmJktlJiYoZG49bXUodGhpcykpLHRoaXMuX29mZnNldD1DZSx0aGlzLl9pc1VUQz0hMCxudWxsIT1k''@;'; put 'put ''biYmdGhpcy5hZGQoZG4sIm0iKSxJdCE9PUNlJiYoIUtlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP0wzKHRoaXMsSmwoQ2UtSXQsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlz''@;'; put 'put ''Ll9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfXJldHVybiB0aGlzLl9pc1VUQz9JdDptdSh0aGlzKX0semkudXRjPWZ1bmN0aW9uIFIzKENlKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCxDZSl9LHppLmxvY2FsPWZ1bmN0aW9uIFBsKENlKXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlz''@;'; put 'put ''LnV0Y09mZnNldCgwLENlKSx0aGlzLl9pc1VUQz0hMSxDZSYmdGhpcy5zdWJ0cmFjdChtdSh0aGlzKSwibSIpKSx0aGlzfSx6aS5wYXJzZVpvbmU9ZnVuY3Rpb24gTHUoKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgdGhpcy5faSl7dmFyIENlPWxkKHNuLHRoaXMuX2kpO251bGwhPUNlP3RoaXMudXRjT2Zmc2V0KENlKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30semkuaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24gUWgoQ2Upe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkm''@;'; put 'put ''JihDZT1DZT9zbChDZSkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS1DZSklNjA9PTApfSx6aS5pc0RTVD1mdW5jdGlvbiBtZigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNs''@;'; put 'put ''b25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LHppLmlzTG9jYWw9ZnVuY3Rpb24gdXYoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LHppLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uIFB3KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LHppLmlzVXRj''@;'; put 'put ''PV8wLHppLmlzVVRDPV8wLHppLnpvbmVBYmJyPWZ1bmN0aW9uIEI2KCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJVVEMiOiIifSx6aS56b25lTmFtZT1mdW5jdGlvbiBqNigpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSx6aS5kYXRlcz1TZSgiZGF0''@;'; put 'put ''ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLHEwKSx6aS5tb250aHM9U2UoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsTGMpLHppLnllYXJzPVNlKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2Ug''@;'; put 'put ''eWVhciBpbnN0ZWFkIixXbiksemkuem9uZT1TZSgibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLGZ1bmN0aW9uIG4wKENlLEtlKXtyZXR1cm4gbnVs''@;'; put 'put ''bCE9Q2U/KCJzdHJpbmciIT10eXBlb2YgQ2UmJihDZT0tQ2UpLHRoaXMudXRjT2Zmc2V0KENlLEtlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLHppLmlzRFNUU2hpZnRlZD1TZSgiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8j''@;'; put 'put ''L3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsZnVuY3Rpb24gT3coKXtpZighTyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIEtlLENlPXt9O3JldHVybiBsZShDZSx0aGlzKSwoQ2U9c3YoQ2UpKS5fYT8oS2U9Q2Uu''@;'; put 'put ''X2lzVVRDP1UoQ2UuX2EpOnNsKENlLl9hKSx0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJmZ1bmN0aW9uIGNnKENlLEtlLGd0KXt2YXIgaWksSXQ9TWF0aC5taW4oQ2UubGVuZ3RoLEtlLmxlbmd0aCksZG49TWF0aC5hYnMoQ2UubGVuZ3RoLUtlLmxlbmd0aCkscW49MDtmb3Io''@;'; put 'put ''aWk9MDtpaTxJdDtpaSsrKShndCYmQ2VbaWldIT09S2VbaWldfHwhZ3QmJlR0KENlW2lpXSkhPT1UdChLZVtpaV0pKSYmcW4rKztyZXR1cm4gcW4rZG59KENlLl9hLEtlLnRvQXJyYXkoKSk+MCk6dGhpcy5faXNEU1RTaGlmdGVkPSExLHRoaXMuX2lzRFNUU2hpZnRlZH0pO3ZhciB1bz1DLnBy''@;'; put 'put ''b3RvdHlwZTtmdW5jdGlvbiB0dShDZSxLZSxndCxJdCl7dmFyIGRuPXRhKCkscW49VSgpLnNldChJdCxLZSk7cmV0dXJuIGRuW2d0XShxbixDZSl9ZnVuY3Rpb24gRWMoQ2UsS2UsZ3Qpe2lmKHooQ2UpJiYoS2U9Q2UsQ2U9dm9pZCAwKSxDZT1DZXx8IiIsbnVsbCE9S2UpcmV0dXJuIHR1KENl''@;'; put 'put ''LEtlLGd0LCJtb250aCIpO3ZhciBJdCxkbj1bXTtmb3IoSXQ9MDtJdDwxMjtJdCsrKWRuW0l0XT10dShDZSxJdCxndCwibW9udGgiKTtyZXR1cm4gZG59ZnVuY3Rpb24gYTAoQ2UsS2UsZ3QsSXQpeyJib29sZWFuIj09dHlwZW9mIENlPyh6KEtlKSYmKGd0PUtlLEtlPXZvaWQgMCksS2U9S2V8''@;'; put 'put ''fCIiKTooZ3Q9S2U9Q2UsQ2U9ITEseihLZSkmJihndD1LZSxLZT12b2lkIDApLEtlPUtlfHwiIik7dmFyIGlpLGRuPXRhKCkscW49Q2U/ZG4uX3dlZWsuZG93OjAsSWE9W107aWYobnVsbCE9Z3QpcmV0dXJuIHR1KEtlLChndCtxbiklNyxJdCwiZGF5Iik7Zm9yKGlpPTA7aWk8NztpaSsrKUlh''@;'; put 'put ''W2lpXT10dShLZSwoaWkrcW4pJTcsSXQsImRheSIpO3JldHVybiBJYX11by5jYWxlbmRhcj1mdW5jdGlvbiBqKENlLEtlLGd0KXt2YXIgSXQ9dGhpcy5fY2FsZW5kYXJbQ2VdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gcChJdCk/SXQuY2FsbChLZSxndCk6SXR9LHVvLmxvbmdE''@;'; put 'put ''YXRlRm9ybWF0PWZ1bmN0aW9uIHZlKENlKXt2YXIgS2U9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2VdLGd0PXRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlLnRvVXBwZXJDYXNlKCldO3JldHVybiBLZXx8IWd0P0tlOih0aGlzLl9sb25nRGF0ZUZvcm1hdFtDZV09Z3QubWF0Y2gobSkubWFwKGZ1bmN0''@;'; put 'put ''aW9uKEl0KXtyZXR1cm4iTU1NTSI9PT1JdHx8Ik1NIj09PUl0fHwiREQiPT09SXR8fCJkZGRkIj09PUl0P0l0LnNsaWNlKDEpOkl0fSkuam9pbigiIiksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2VdKX0sdW8uaW52YWxpZERhdGU9ZnVuY3Rpb24gamUoKXtyZXR1cm4gdGhpcy5faW52YWxpZERh''@;'; put 'put ''dGV9LHVvLm9yZGluYWw9ZnVuY3Rpb24gUmUoQ2Upe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoIiVkIixDZSl9LHVvLnByZXBhcnNlPU12LHVvLnBvc3Rmb3JtYXQ9TXYsdW8ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uIFZlKENlLEtlLGd0LEl0KXt2YXIgZG49dGhpcy5fcmVsYXRpdmVU''@;'; put 'put ''aW1lW2d0XTtyZXR1cm4gcChkbik/ZG4oQ2UsS2UsZ3QsSXQpOmRuLnJlcGxhY2UoLyVkL2ksQ2UpfSx1by5wYXN0RnV0dXJlPWZ1bmN0aW9uIGtlKENlLEtlKXt2YXIgZ3Q9dGhpcy5fcmVsYXRpdmVUaW1lW0NlPjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gcChndCk/Z3QoS2UpOmd0LnJl''@;'; put 'put ''cGxhY2UoLyVzL2ksS2UpfSx1by5zZXQ9ZnVuY3Rpb24gYihDZSl7dmFyIEtlLGd0O2ZvcihndCBpbiBDZSlQKENlLGd0KSYmKHAoS2U9Q2VbZ3RdKT90aGlzW2d0XT1LZTp0aGlzWyJfIitndF09S2UpO3RoaXMuX2NvbmZpZz1DZSx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVu''@;'; put 'put ''dD1uZXcgUmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfSx1by5lcmFzPWZ1bmN0aW9uIF80KENlLEtlKXt2YXIgZ3QsSXQsZG4scW49dGhpcy5fZXJhc3x8dGEoImVuIiku''@;'; put 'put ''X2VyYXM7Zm9yKGd0PTAsSXQ9cW4ubGVuZ3RoO2d0PEl0OysrZ3Qpc3dpdGNoKCJzdHJpbmciPT10eXBlb2YgcW5bZ3RdLnNpbmNlJiYoZG49XyhxbltndF0uc2luY2UpLnN0YXJ0T2YoImRheSIpLHFuW2d0XS5zaW5jZT1kbi52YWx1ZU9mKCkpLHR5cGVvZiBxbltndF0udW50aWwpe2Nhc2Ui''@;'; put 'put ''dW5kZWZpbmVkIjpxbltndF0udW50aWw9MS8wO2JyZWFrO2Nhc2Uic3RyaW5nIjpkbj1fKHFuW2d0XS51bnRpbCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLHFuW2d0XS51bnRpbD1kbi52YWx1ZU9mKCl9cmV0dXJuIHFufSx1by5lcmFzUGFyc2U9ZnVuY3Rpb24gWkEoQ2UsS2UsZ3Qpe3Zh''@;'; put 'put ''ciBJdCxkbixpaSxJYSxTbyxxbj10aGlzLmVyYXMoKTtmb3IoQ2U9Q2UudG9VcHBlckNhc2UoKSxJdD0wLGRuPXFuLmxlbmd0aDtJdDxkbjsrK0l0KWlmKGlpPXFuW0l0XS5uYW1lLnRvVXBwZXJDYXNlKCksSWE9cW5bSXRdLmFiYnIudG9VcHBlckNhc2UoKSxTbz1xbltJdF0ubmFycm93LnRv''@;'; put 'put ''VXBwZXJDYXNlKCksZ3Qpc3dpdGNoKEtlKXtjYXNlIk4iOmNhc2UiTk4iOmNhc2UiTk5OIjppZihJYT09PUNlKXJldHVybiBxbltJdF07YnJlYWs7Y2FzZSJOTk5OIjppZihpaT09PUNlKXJldHVybiBxbltJdF07YnJlYWs7Y2FzZSJOTk5OTiI6aWYoU289PT1DZSlyZXR1cm4gcW5bSXRdfWVs''@;'; put 'put ''c2UgaWYoW2lpLElhLFNvXS5pbmRleE9mKENlKT49MClyZXR1cm4gcW5bSXRdfSx1by5lcmFzQ29udmVydFllYXI9ZnVuY3Rpb24gTDYoQ2UsS2Upe3ZhciBndD1DZS5zaW5jZTw9Q2UudW50aWw/MTotMTtyZXR1cm4gdm9pZCAwPT09S2U/XyhDZS5zaW5jZSkueWVhcigpOl8oQ2Uuc2luY2Up''@;'; put 'put ''LnllYXIoKSsoS2UtQ2Uub2Zmc2V0KSpndH0sdW8uZXJhc0FiYnJSZWdleD1mdW5jdGlvbiBQNihDZSl7cmV0dXJuIFAodGhpcywiX2VyYXNBYmJyUmVnZXgiKXx8aGMuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzQWJiclJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sdW8uZXJhc05hbWVSZWdleD1m''@;'; put 'put ''dW5jdGlvbiBfZihDZSl7cmV0dXJuIFAodGhpcywiX2VyYXNOYW1lUmVnZXgiKXx8aGMuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzTmFtZVJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sdW8uZXJhc05hcnJvd1JlZ2V4PWZ1bmN0aW9uIEY2KENlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc05hcnJvd1Jl''@;'; put 'put ''Z2V4Iil8fGhjLmNhbGwodGhpcyksQ2U/dGhpcy5fZXJhc05hcnJvd1JlZ2V4OnRoaXMuX2VyYXNSZWdleH0sdW8ubW9udGhzPWZ1bmN0aW9uIHRpKENlLEtlKXtyZXR1cm4gQ2U/Qih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1tDZS5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21v''@;'; put 'put ''bnRocy5pc0Zvcm1hdHx8eWEpLnRlc3QoS2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bQ2UubW9udGgoKV06Qih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sdW8ubW9udGhzU2hvcnQ9ZnVuY3Rpb24gZ28oQ2UsS2Upe3JldHVybiBDZT9CKHRo''@;'; put 'put ''aXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFtDZS5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFt5YS50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW0NlLm1vbnRoKCldOkIodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1No''@;'; put 'put ''b3J0LnN0YW5kYWxvbmV9LHVvLm1vbnRoc1BhcnNlPWZ1bmN0aW9uIGJsKENlLEtlLGd0KXt2YXIgSXQsZG4scW47aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gTnMuY2FsbCh0aGlzLENlLEtlLGd0KTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1b''@;'; put 'put ''XSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksSXQ9MDtJdDwxMjtJdCsrKXtpZihkbj1VKFsyZTMsSXRdKSxndCYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF0mJih0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3Ro''@;'; put 'put ''aXMubW9udGhzKGRuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHNTaG9ydChkbiwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSwhZ3QmJiF0aGlzLl9tb250aHNQYXJzZVtJdF0mJihx''@;'; put 'put ''bj0iXiIrdGhpcy5tb250aHMoZG4sIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChkbiwiIiksdGhpcy5fbW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAocW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLGd0JiYiTU1NTSI9PT1LZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSly''@;'; put 'put ''ZXR1cm4gSXQ7aWYoZ3QmJiJNTU0iPT09S2UmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZighZ3QmJnRoaXMuX21vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXR9fSx1by5tb250aHNSZWdleD1mdW5jdGlvbiB4YShDZSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX21vbnRoc1BhcnNlRXhhY3Q/KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fGxpLmNhbGwodGhpcyksQ2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihQKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9RmEpLHRoaXMuX21vbnRo''@;'; put 'put ''c1N0cmljdFJlZ2V4JiZDZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LHVvLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24gaXIoQ2Upe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhQKHRoaXMsIl9tb250aHNSZWdleCIpfHxsaS5jYWxsKHRoaXMp''@;'; put 'put ''LENlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KFAodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TGEpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJkNlP3RoaXMuX21vbnRoc1Nob3J0''@;'; put 'put ''U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LHVvLndlZWs9ZnVuY3Rpb24gb2QoQ2Upe3JldHVybiBSdShDZSx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sdW8uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24gQ3MoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9''@;'; put 'put ''LHVvLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIGNmKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSx1by53ZWVrZGF5cz1mdW5jdGlvbiBoZihDZSxLZSl7dmFyIGd0PUIodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW0NlJiYhMCE9PUNlJiZ0aGlzLl93ZWVr''@;'; put 'put ''ZGF5cy5pc0Zvcm1hdC50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09Q2U/eTAoZ3QsdGhpcy5fd2Vlay5kb3cpOkNlP2d0W0NlLmRheSgpXTpndH0sdW8ud2Vla2RheXNNaW49ZnVuY3Rpb24gZmYoQ2Upe3JldHVybiEwPT09Q2U/eTAodGhpcy5fd2Vla2RheXNN''@;'; put 'put ''aW4sdGhpcy5fd2Vlay5kb3cpOkNlP3RoaXMuX3dlZWtkYXlzTWluW0NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0sdW8ud2Vla2RheXNTaG9ydD1mdW5jdGlvbiBlaChDZSl7cmV0dXJuITA9PT1DZT95MCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTpDZT90aGlzLl93''@;'; put 'put ''ZWVrZGF5c1Nob3J0W0NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c1Nob3J0fSx1by53ZWVrZGF5c1BhcnNlPWZ1bmN0aW9uIE9jKENlLEtlLGd0KXt2YXIgSXQsZG4scW47aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiBHaC5jYWxsKHRoaXMsQ2UsS2UsZ3QpO2Zvcih0aGlzLl93''@;'; put 'put ''ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSksSXQ9MDtJdDw3O0l0Kyspe2lmKGRuPVUoWzJlMywxXSkuZGF5KEl0KSxndCYm''@;'; put 'put ''IXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0XSYmKHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzKGRuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cCgi''@;'; put 'put ''XiIrdGhpcy53ZWVrZGF5c1Nob3J0KGRuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oZG4sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIikpLHRoaXMuX3dlZWtk''@;'; put 'put ''YXlzUGFyc2VbSXRdfHwocW49Il4iK3RoaXMud2Vla2RheXMoZG4sIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c1Nob3J0KGRuLCIiKSsifF4iK3RoaXMud2Vla2RheXNNaW4oZG4sIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAocW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLGd0''@;'; put 'put ''JiYiZGRkZCI9PT1LZSYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZihndCYmImRkZCI9PT1LZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYoZ3QmJiJkZCI9PT1LZSYmdGhpcy5fbWluV2Vla2RheXNQ''@;'; put 'put ''YXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKCFndCYmdGhpcy5fd2Vla2RheXNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0fX0sdW8ud2Vla2RheXNSZWdleD1mdW5jdGlvbiBLaChDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNS''@;'; put 'put ''ZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCk6KFAodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzUmVnZXg9c2QpLHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtk''@;'; put 'put ''YXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LHVvLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbiBxaChDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlz''@;'; put 'put ''U2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpOihQKHRoaXMsIl93ZWVrZGF5c1Nob3J0UmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD1kZiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZDZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0''@;'; put 'put ''UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sdW8ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbiBBbihDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzTWluU3Ry''@;'; put 'put ''aWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCk6KFAodGhpcywiX3dlZWtkYXlzTWluUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9azEpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2Rh''@;'; put 'put ''eXNNaW5SZWdleCl9LHVvLmlzUE09ZnVuY3Rpb24gb2woQ2Upe3JldHVybiJwIj09PShDZSsiIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9LHVvLm1lcmlkaWVtPWZ1bmN0aW9uIFNzKENlLEtlLGd0KXtyZXR1cm4gQ2U+MTE/Z3Q/InBtIjoiUE0iOmd0PyJhbSI6IkFNIn0sdXIoImVuIix7''@;'; put 'put ''ZXJhczpbe3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoxLzAsb2Zmc2V0OjEsbmFtZToiQW5ubyBEb21pbmkiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6IkJlZm9yZSBDaHJpc3QiLG5hcnJvdzoiQkMiLGFiYnI6''@;'; put 'put ''IkJDIn1dLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKENlKXt2YXIgS2U9Q2UlMTA7cmV0dXJuIENlKygxPT09VHQoQ2UlMTAwLzEwKT8idGgiOjE9PT1LZT8ic3QiOjI9PT1LZT8ibmQiOjM9PT1LZT8icmQiOiJ0aCIpfX0p''@;'; put 'put ''LF8ubGFuZz1TZSgibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4iLHVyKSxfLmxhbmdEYXRhPVNlKCJtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuIix0YSk7dmFyIE5jPU1hdGgu''@;'; put 'put ''YWJzO2Z1bmN0aW9uIG51KENlLEtlLGd0LEl0KXt2YXIgZG49SmwoS2UsZ3QpO3JldHVybiBDZS5fbWlsbGlzZWNvbmRzKz1JdCpkbi5fbWlsbGlzZWNvbmRzLENlLl9kYXlzKz1JdCpkbi5fZGF5cyxDZS5fbW9udGhzKz1JdCpkbi5fbW9udGhzLENlLl9idWJibGUoKX1mdW5jdGlvbiBwYyhD''@;'; put 'put ''ZSl7cmV0dXJuIENlPDA/TWF0aC5mbG9vcihDZSk6TWF0aC5jZWlsKENlKX1mdW5jdGlvbiBibyhDZSl7cmV0dXJuIDQ4MDAqQ2UvMTQ2MDk3fWZ1bmN0aW9uIFNmKENlKXtyZXR1cm4gMTQ2MDk3KkNlLzQ4MDB9ZnVuY3Rpb24gbzAoQ2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmFzKENlKX19dmFyIFpsPW8wKCJtcyIpLFM0PW8wKCJzIiksTWY9bzAoIm0iKSx1ZD1vMCgiaCIpLHcwPW8wKCJkIiksYTI9bzAoInciKSxvMj1vMCgiTSIpLHZnPW8wKCJRIikseGY9bzAoInkiKSx3bz1abDtmdW5jdGlvbiB2dShDZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aXNWYWxpZCgpP3RoaXMuX2RhdGFbQ2VdOk5hTn19dmFyIE00PXZ1KCJtaWxsaXNlY29uZHMiKSxWMz12dSgic2Vjb25kcyIpLGdjPXZ1KCJtaW51dGVzIiksYmc9dnUoImhvdXJzIiksUHU9dnUoImRheXMiKSxGdT12dSgibW9udGhzIikscnU9dnUoInllYXJzIik7dmFyIEowPU1hdGgucm91''@;'; put 'put ''bmQsVmM9e3NzOjQ0LHM6NDUsbTo0NSxoOjIyLGQ6MjYsdzpudWxsLE06MTF9O2Z1bmN0aW9uIHg0KENlLEtlLGd0LEl0LGRuKXtyZXR1cm4gZG4ucmVsYXRpdmVUaW1lKEtlfHwxLCEhZ3QsQ2UsSXQpfXZhciBaNj1NYXRoLmFicztmdW5jdGlvbiBsMihDZSl7cmV0dXJuKENlPjApLShDZTww''@;'; put 'put ''KXx8K0NlfWZ1bmN0aW9uIFc2KCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBJdCxkbixxbixpaSxTbyxmcyxIdSxkZCxDZT1aNih0aGlzLl9taWxsaXNlY29uZHMpLzFlMyxLZT1aNih0aGlzLl9kYXlzKSxndD1aNih0aGlz''@;'; put 'put ''Ll9tb250aHMpLElhPXRoaXMuYXNTZWNvbmRzKCk7cmV0dXJuIElhPyhJdD1XZShDZS82MCksZG49V2UoSXQvNjApLENlJT02MCxJdCU9NjAscW49V2UoZ3QvMTIpLGd0JT0xMixpaT1DZT9DZS50b0ZpeGVkKDMpLnJlcGxhY2UoL1wuPzArJC8sIiIpOiIiLFNvPUlhPDA/Ii0iOiIiLGZzPWwy''@;'; put 'put ''KHRoaXMuX21vbnRocykhPT1sMihJYSk/Ii0iOiIiLEh1PWwyKHRoaXMuX2RheXMpIT09bDIoSWEpPyItIjoiIixkZD1sMih0aGlzLl9taWxsaXNlY29uZHMpIT09bDIoSWEpPyItIjoiIixTbysiUCIrKHFuP2ZzK3FuKyJZIjoiIikrKGd0P2ZzK2d0KyJNIjoiIikrKEtlP0h1K0tlKyJEIjoi''@;'; put 'put ''IikrKGRufHxJdHx8Q2U/IlQiOiIiKSsoZG4/ZGQrZG4rIkgiOiIiKSsoSXQ/ZGQrSXQrIk0iOiIiKSsoQ2U/ZGQraWkrIlMiOiIiKSk6IlAwRCJ9dmFyIG1zPXBmLnByb3RvdHlwZTtyZXR1cm4gbXMuaXNWYWxpZD1mdW5jdGlvbiBzZygpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxtcy5hYnM9''@;'; put 'put ''ZnVuY3Rpb24gcmMoKXt2YXIgQ2U9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzPU5jKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1OYyh0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9TmModGhpcy5fbW9udGhzKSxDZS5taWxsaXNlY29uZHM9TmMoQ2UubWlsbGlz''@;'; put 'put ''ZWNvbmRzKSxDZS5zZWNvbmRzPU5jKENlLnNlY29uZHMpLENlLm1pbnV0ZXM9TmMoQ2UubWludXRlcyksQ2UuaG91cnM9TmMoQ2UuaG91cnMpLENlLm1vbnRocz1OYyhDZS5tb250aHMpLENlLnllYXJzPU5jKENlLnllYXJzKSx0aGlzfSxtcy5hZGQ9ZnVuY3Rpb24gWDAoQ2UsS2Upe3JldHVy''@;'; put 'put ''biBudSh0aGlzLENlLEtlLDEpfSxtcy5zdWJ0cmFjdD1mdW5jdGlvbiBjbChDZSxLZSl7cmV0dXJuIG51KHRoaXMsQ2UsS2UsLTEpfSxtcy5hcz1mdW5jdGlvbiBDNChDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIEtlLGd0LEl0PXRoaXMuX21pbGxpc2Vjb25kcztpZigi''@;'; put 'put ''bW9udGgiPT09KENlPV90KENlKSl8fCJxdWFydGVyIj09PUNlfHwieWVhciI9PT1DZSlzd2l0Y2goS2U9dGhpcy5fZGF5cytJdC84NjRlNSxndD10aGlzLl9tb250aHMrYm8oS2UpLENlKXtjYXNlIm1vbnRoIjpyZXR1cm4gZ3Q7Y2FzZSJxdWFydGVyIjpyZXR1cm4gZ3QvMztjYXNlInllYXIi''@;'; put 'put ''OnJldHVybiBndC8xMn1lbHNlIHN3aXRjaChLZT10aGlzLl9kYXlzK01hdGgucm91bmQoU2YodGhpcy5fbW9udGhzKSksQ2Upe2Nhc2Uid2VlayI6cmV0dXJuIEtlLzcrSXQvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gS2UrSXQvODY0ZTU7Y2FzZSJob3VyIjpyZXR1cm4gMjQqS2UrSXQvMzZl''@;'; put 'put ''NTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqS2UrSXQvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqS2UrSXQvMWUzO2Nhc2UibWlsbGlzZWNvbmQiOnJldHVybiBNYXRoLmZsb29yKDg2NGU1KktlKStJdDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrQ2Up''@;'; put 'put ''fX0sbXMuYXNNaWxsaXNlY29uZHM9WmwsbXMuYXNTZWNvbmRzPVM0LG1zLmFzTWludXRlcz1NZixtcy5hc0hvdXJzPXVkLG1zLmFzRGF5cz13MCxtcy5hc1dlZWtzPWEyLG1zLmFzTW9udGhzPW8yLG1zLmFzUXVhcnRlcnM9dmcsbXMuYXNZZWFycz14Zixtcy52YWx1ZU9mPXdvLG1zLl9idWJi''@;'; put 'put ''bGU9ZnVuY3Rpb24gTDEoKXt2YXIgZG4scW4saWksSWEsU28sQ2U9dGhpcy5fbWlsbGlzZWNvbmRzLEtlPXRoaXMuX2RheXMsZ3Q9dGhpcy5fbW9udGhzLEl0PXRoaXMuX2RhdGE7cmV0dXJuIENlPj0wJiZLZT49MCYmZ3Q+PTB8fENlPD0wJiZLZTw9MCYmZ3Q8PTB8fChDZSs9ODY0ZTUqcGMo''@;'; put 'put ''U2YoZ3QpK0tlKSxLZT0wLGd0PTApLEl0Lm1pbGxpc2Vjb25kcz1DZSUxZTMsZG49V2UoQ2UvMWUzKSxJdC5zZWNvbmRzPWRuJTYwLHFuPVdlKGRuLzYwKSxJdC5taW51dGVzPXFuJTYwLGlpPVdlKHFuLzYwKSxJdC5ob3Vycz1paSUyNCxLZSs9V2UoaWkvMjQpLGd0Kz1Tbz1XZShibyhLZSkp''@;'; put 'put ''LEtlLT1wYyhTZihTbykpLElhPVdlKGd0LzEyKSxndCU9MTIsSXQuZGF5cz1LZSxJdC5tb250aHM9Z3QsSXQueWVhcnM9SWEsdGhpc30sbXMuY2xvbmU9ZnVuY3Rpb24gejYoKXtyZXR1cm4gSmwodGhpcyl9LG1zLmdldD1mdW5jdGlvbiBzMihDZSl7cmV0dXJuIENlPV90KENlKSx0aGlzLmlz''@;'; put 'put ''VmFsaWQoKT90aGlzW0NlKyJzIl0oKTpOYU59LG1zLm1pbGxpc2Vjb25kcz1NNCxtcy5zZWNvbmRzPVYzLG1zLm1pbnV0ZXM9Z2MsbXMuaG91cnM9YmcsbXMuZGF5cz1QdSxtcy53ZWVrcz1mdW5jdGlvbiBFZigpe3JldHVybiBXZSh0aGlzLmRheXMoKS83KX0sbXMubW9udGhzPUZ1LG1zLnll''@;'; put 'put ''YXJzPXJ1LG1zLmh1bWFuaXplPWZ1bmN0aW9uIHh2KENlLEtlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIGRuLHFuLGd0PSExLEl0PVZjO3JldHVybiJvYmplY3QiPT10eXBlb2YgQ2UmJihLZT1DZSxDZT0hMSksImJvb2xl''@;'; put 'put ''YW4iPT10eXBlb2YgQ2UmJihndD1DZSksIm9iamVjdCI9PXR5cGVvZiBLZSYmKEl0PU9iamVjdC5hc3NpZ24oe30sVmMsS2UpLG51bGwhPUtlLnMmJm51bGw9PUtlLnNzJiYoSXQuc3M9S2Uucy0xKSkscW49ZnVuY3Rpb24gJHcoQ2UsS2UsZ3QsSXQpe3ZhciBkbj1KbChDZSkuYWJzKCkscW49''@;'; put 'put ''SjAoZG4uYXMoInMiKSksaWk9SjAoZG4uYXMoIm0iKSksSWE9SjAoZG4uYXMoImgiKSksU289SjAoZG4uYXMoImQiKSksZnM9SjAoZG4uYXMoIk0iKSksSHU9SjAoZG4uYXMoInciKSksZGQ9SjAoZG4uYXMoInkiKSksYzI9cW48PWd0LnNzJiZbInMiLHFuXXx8cW48Z3QucyYmWyJzcyIscW5d''@;'; put 'put ''fHxpaTw9MSYmWyJtIl18fGlpPGd0Lm0mJlsibW0iLGlpXXx8SWE8PTEmJlsiaCJdfHxJYTxndC5oJiZbImhoIixJYV18fFNvPD0xJiZbImQiXXx8U288Z3QuZCYmWyJkZCIsU29dO3JldHVybiBudWxsIT1ndC53JiYoYzI9YzJ8fEh1PD0xJiZbInciXXx8SHU8Z3QudyYmWyJ3dyIsSHVdKSwo''@;'; put 'put ''YzI9YzJ8fGZzPD0xJiZbIk0iXXx8ZnM8Z3QuTSYmWyJNTSIsZnNdfHxkZDw9MSYmWyJ5Il18fFsieXkiLGRkXSlbMl09S2UsYzJbM109K0NlPjAsYzJbNF09SXQseDQuYXBwbHkobnVsbCxjMil9KHRoaXMsIWd0LEl0LGRuPXRoaXMubG9jYWxlRGF0YSgpKSxndCYmKHFuPWRuLnBhc3RGdXR1''@;'; put 'put ''cmUoK3RoaXMscW4pKSxkbi5wb3N0Zm9ybWF0KHFuKX0sbXMudG9JU09TdHJpbmc9VzYsbXMudG9TdHJpbmc9VzYsbXMudG9KU09OPVc2LG1zLmxvY2FsZT1LYSxtcy5sb2NhbGVEYXRhPWJmLG1zLnRvSXNvU3RyaW5nPVNlKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1''@;'; put 'put ''c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsVzYpLG1zLmxhbmc9VnIsc2UoIlgiLDAsMCwidW5peCIpLHNlKCJ4IiwwLDAsInZhbHVlT2YiKSxSbigieCIsUXQpLFJuKCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxodCgiWCIsZnVuY3Rpb24oQ2Us''@;'; put 'put ''S2UsZ3Qpe2d0Ll9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KENlKSl9KSxodCgieCIsZnVuY3Rpb24oQ2UsS2UsZ3Qpe2d0Ll9kPW5ldyBEYXRlKFR0KENlKSl9KSxfLnZlcnNpb249IjIuMzAuMSIsZnVuY3Rpb24gZyhDZSl7ST1DZX0oc2wpLF8uZm49emksXy5taW49ZnVuY3Rpb24gRDEo''@;'; put 'put ''KXtyZXR1cm4gbmgoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LF8ubWF4PWZ1bmN0aW9uIHhyKCl7cmV0dXJuIG5oKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LF8ubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6''@;'; put 'put ''K25ldyBEYXRlfSxfLnV0Yz1VLF8udW5peD1mdW5jdGlvbiByMihDZSl7cmV0dXJuIHNsKDFlMypDZSl9LF8ubW9udGhzPWZ1bmN0aW9uIHc0KENlLEtlKXtyZXR1cm4gRWMoQ2UsS2UsIm1vbnRocyIpfSxfLmlzRGF0ZT1OLF8ubG9jYWxlPXVyLF8uaW52YWxpZD1KLF8uZHVyYXRpb249Smws''@;'; put 'put ''Xy5pc01vbWVudD1fZSxfLndlZWtkYXlzPWZ1bmN0aW9uIEtpKENlLEtlLGd0KXtyZXR1cm4gYTAoQ2UsS2UsZ3QsIndlZWtkYXlzIil9LF8ucGFyc2Vab25lPWZ1bmN0aW9uIEd3KCl7cmV0dXJuIHNsLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0sXy5sb2NhbGVEYXRhPXRh''@;'; put 'put ''LF8uaXNEdXJhdGlvbj1sZyxfLm1vbnRoc1Nob3J0PWZ1bmN0aW9uIFVsKENlLEtlKXtyZXR1cm4gRWMoQ2UsS2UsIm1vbnRoc1Nob3J0Iil9LF8ud2Vla2RheXNNaW49ZnVuY3Rpb24gZmMoQ2UsS2UsZ3Qpe3JldHVybiBhMChDZSxLZSxndCwid2Vla2RheXNNaW4iKX0sXy5kZWZpbmVMb2Nh''@;'; put 'put ''bGU9YmksXy51cGRhdGVMb2NhbGU9ZnVuY3Rpb24gRnIoQ2UsS2Upe2lmKG51bGwhPUtlKXt2YXIgZ3QsSXQsZG49amw7bnVsbCE9SG9bQ2VdJiZudWxsIT1Ib1tDZV0ucGFyZW50TG9jYWxlP0hvW0NlXS5zZXQoeChIb1tDZV0uX2NvbmZpZyxLZSkpOihudWxsIT0oSXQ9Ym4oQ2UpKSYmKGRu''@;'; put 'put ''PUl0Ll9jb25maWcpLEtlPXgoZG4sS2UpLG51bGw9PUl0JiYoS2UuYWJicj1DZSksKGd0PW5ldyBDKEtlKSkucGFyZW50TG9jYWxlPUhvW0NlXSxIb1tDZV09Z3QpLHVyKENlKX1lbHNlIG51bGwhPUhvW0NlXSYmKG51bGwhPUhvW0NlXS5wYXJlbnRMb2NhbGU/KEhvW0NlXT1Ib1tDZV0ucGFy''@;'; put 'put ''ZW50TG9jYWxlLENlPT09dXIoKSYmdXIoQ2UpKTpudWxsIT1Ib1tDZV0mJmRlbGV0ZSBIb1tDZV0pO3JldHVybiBIb1tDZV19LF8ubG9jYWxlcz1mdW5jdGlvbiBvYSgpe3JldHVybiBUKEhvKX0sXy53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIFVhKENlLEtlLGd0KXtyZXR1cm4gYTAoQ2UsS2Us''@;'; put 'put ''Z3QsIndlZWtkYXlzU2hvcnQiKX0sXy5ub3JtYWxpemVVbml0cz1fdCxfLnJlbGF0aXZlVGltZVJvdW5kaW5nPWZ1bmN0aW9uIEt3KENlKXtyZXR1cm4gdm9pZCAwPT09Q2U/SjA6ImZ1bmN0aW9uIj09dHlwZW9mIENlJiYoSjA9Q2UsITApfSxfLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5j''@;'; put 'put ''dGlvbiBVNihDZSxLZSl7cmV0dXJuIHZvaWQgMCE9PVZjW0NlXSYmKHZvaWQgMD09PUtlP1ZjW0NlXTooVmNbQ2VdPUtlLCJzIj09PUNlJiYoVmMuc3M9S2UtMSksITApKX0sXy5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbiBkZyhDZSxLZSl7dmFyIGd0PUNlLmRpZmYoS2UsImRheXMiLCEwKTty''@;'; put 'put ''ZXR1cm4gZ3Q8LTY/InNhbWVFbHNlIjpndDwtMT8ibGFzdFdlZWsiOmd0PDA/Imxhc3REYXkiOmd0PDE/InNhbWVEYXkiOmd0PDI/Im5leHREYXkiOmd0PDc/Im5leHRXZWVrIjoic2FtZUVsc2UifSxfLnByb3RvdHlwZT16aSxfLkhUTUw1X0ZNVD17REFURVRJTUVfTE9DQUw6IllZWVktTU0t''@;'; put 'put ''RERUSEg6bW0iLERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6IllZWVktTU0tRERUSEg6bW06c3MiLERBVEVUSU1FX0xPQ0FMX01TOiJZWVlZLU1NLUREVEhIOm1tOnNzLlNTUyIsREFURToiWVlZWS1NTS1ERCIsVElNRToiSEg6bW0iLFRJTUVfU0VDT05EUzoiSEg6bW06c3MiLFRJTUVfTVM6IkhI''@;'; put 'put ''Om1tOnNzLlNTUyIsV0VFSzoiR0dHRy1bV11XVyIsTU9OVEg6IllZWVktTU0ifSxffSgpfSw3ODM3NTpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgZ2xvYmFsVGhpczwidSJ8fHR5cGVvZiB3aW5kb3c8InUifHx0eXBlb2YgZ2xvYmFsPCJ1''@;'; put 'put ''IiYmZ2xvYmFsO3ZhciB5PXt9LEk9e2V4cG9ydHM6e319O0kuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6''@;'; put 'put ''ImJnIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDE4IixtaWxsaW9uOiJcdTA0MTAiLGJpbGxpb246Ik0iLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQzYlx1MDQz''@;'; put 'put ''Mi4iLGNvZGU6IkJHTiJ9fSk7dmFyIF89SS5leHBvcnRzLGc9e2V4cG9ydHM6e319O2cuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0''@;'; put 'put ''fSh7bGFuZ3VhZ2VUYWc6ImNzLUNaIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJLXHUwMTBkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1pLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeTohMCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRp''@;'; put 'put ''c3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pO3ZhciBCPWcuZXhwb3J0cyx3PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkYS1ESyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbyIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoi''@;'; put 'put ''YiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiREtLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRp''@;'; put 'put ''c3NhOjB9fX0pfSh3KTt2YXIgUD13LmV4cG9ydHMsRj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIp''@;'; put 'put ''P1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGUtQVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oRik7dmFyIE89Ri5leHBvcnRzLHo9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90''@;'; put 'put ''eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImRlLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MjAxOSIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9u''@;'; put 'put ''OiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9''@;'; put 'put ''KHopO3ZhciBOPXouZXhwb3J0cyxMPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVs''@;'; put 'put ''dDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1ERSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik1pIixiaWxsaW9uOiJNYSIsdHJpbGxpb246IkJpIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0s''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3RvdGFsTGVuZ3RoOjQsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEwpO3ZhciBLPUwuZXhwb3J0cyxVPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1MSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNp''@;'; put 'put ''bWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVu''@;'; put 'put ''Y3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5v''@;'; put 'put ''RGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShVKTt2YXIgVz1VLmV4cG9ydHMsWT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1''@;'; put 'put ''cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZWwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJcdTAzYzciLG1pbGxpb246Ilx1MDNiNSIsYmlsbGlvbjoiXHUwM2I0Iix0cmlsbGlvbjoiXHUwM2M0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShZKTt2YXIgcT1ZLmV4cG9ydHMsZWU9e2V4cG9y''@;'; put 'put ''dHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVuLUFVIixk''@;'; put 'put ''ZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT1+fihWdCUxMDAvMTApPyJ0aCI6MT09PUpy''@;'; put 'put ''PyJzdCI6Mj09PUpyPyJuZCI6Mz09PUpyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQVVEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1h''@;'; put 'put ''bHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShlZSk7dmFyIEo9ZWUuZXhwb3J0cyxuZT17ZXhwb3J0czp7fX07IWZ1bmN0''@;'; put 'put ''aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tR0IiLGRlbGltaXRlcnM6e3Ro''@;'; put 'put ''b3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/''@;'; put 'put ''Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJceGEzIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJHQlAifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZEN1cnJl''@;'; put 'put ''bmN5OiExLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITEsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFu''@;'; put 'put ''dGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFudGlzc2E6MH19fSl9''@;'; put 'put ''KG5lKTt2YXIgaWU9bmUuZXhwb3J0cyxsZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRl''@;'; put 'put ''ZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tSUUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0''@;'; put 'put ''dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVVUiJ9fSl9KGxlKTt2YXIgbWU9bGUuZXhwb3J0cyxfZT17ZXhwb3J0czp7fX07''@;'; put 'put ''IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tTloiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0Ijoy''@;'; put 'put ''PT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJOWkQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1''@;'; put 'put ''cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3Vy''@;'; put 'put ''cmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KF9lKTt2YXIgVGU9X2UuZXhwb3J0cyxTZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGly''@;'; put 'put ''LHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tWkEiLGRlbGltaXRlcnM6e3Rob3VzYW5k''@;'; put 'put ''czoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjoz''@;'; put 'put ''PT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJSIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJaQVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2''@;'; put 'put ''ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRp''@;'; put 'put ''c3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFNlKTt2YXIgemU9U2UuZXhwb3J0cyxWPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1BUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFs''@;'; put 'put ''OiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/''@;'; put 'put ''InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQVJTIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5j''@;'; put 'put ''eTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShW''@;'; put 'put ''KTt2YXIgcD1WLmV4cG9ydHMsYj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6''@;'; put 'put ''VnR9KHtsYW5ndWFnZVRhZzoiZXMtQ0wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAx''@;'; put 'put ''PT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQ0xQIn0sY3VycmVuY3lGb3JtYXQ6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9''@;'; put 'put ''fX0pfShiKTt2YXIgeD1iLmV4cG9ydHMsQz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRl''@;'; put 'put ''ZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtQ08iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3Jl''@;'; put 'put ''dHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iixt''@;'; put 'put ''YW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQyk7dmFyIFQ9Qy5leHBvcnRzLEg9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxs''@;'; put 'put ''aW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhMSIscG9zaXRpb246InBvc3Rm''@;'; put 'put ''aXgiLGNvZGU6IkNSQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSCk7dmFyIGo9SC5leHBvcnRzLEU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6''@;'; put 'put ''IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8i''@;'; put 'put ''dm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3Vy''@;'; put 'put ''cmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19''@;'; put 'put ''KX0oRSk7dmFyIG09RS5leHBvcnRzLEE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZh''@;'; put 'put ''dWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLU1YIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihWdCl7bGV0IEpyPVZ0''@;'; put 'put ''JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik1YTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''bWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEEpO3ZhciBhZT1BLmV4cG9ydHMsdGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLU5JIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRy''@;'; put 'put ''aWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IkMkIixwb3NpdGlvbjoicHJlZml4''@;'; put 'put ''Iixjb2RlOiJOSU8ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHRlKTt2YXIgc2U9dGUuZXhwb3J0cyx3ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtUEUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1h''@;'; put 'put ''bDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpy''@;'; put 'put ''PyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiUy8uIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJQRU4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJl''@;'; put 'put ''bmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9''@;'; put 'put ''KHdlKTt2YXIgVWU9d2UuZXhwb3J0cyxKZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRl''@;'; put 'put ''ZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtUFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3Jl''@;'; put 'put ''dHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6''@;'; put 'put ''e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3Vy''@;'; put 'put ''cmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShKZSk7dmFyIG90PUplLmV4cG9ydHMsTWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9k''@;'; put 'put ''dWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLVNWIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlv''@;'; put 'put ''bjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6''@;'; put 'put ''IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlNWQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFu''@;'; put 'put ''dGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oTWUpO3ZhciB2ZT1NZS5leHBvcnRzLFhlPXtleHBvcnRzOnt9fTshZnVu''@;'; put 'put ''Y3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJldC1FRSIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR1aCIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJ0cmwifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9u''@;'; put 'put ''OiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFhlKTt2YXIgamU9WGUuZXhwb3J0cyxEZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhh''@;'; put 'put ''KXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZmEtSVIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoi''@;'; put 'put ''XHUwNjBjIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDY0N1x1MDYzMlx1MDYyN1x1MDYzMSIsbWlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2IixiaWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2MjdcdTA2MzFc''@;'; put 'put ''dTA2MmYiLHRyaWxsaW9uOiJcdTA2MmFcdTA2MzFcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1MDYyN1x1MDY0NSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1ZmRmYyIsY29kZToiSVJSIn19KX0oRGUpO3ZhciBGZT1EZS5leHBvcnRz''@;'; put 'put ''LFJlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFn''@;'; put 'put ''OiJmaS1GSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUy''@;'; put 'put ''MGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ontt''@;'; put 'put ''YW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShSZSk7dmFyIEllPVJlLmV4cG9ydHMsVmU9e2V4cG9ydHM6e319OyFm''@;'; put 'put ''dW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZpbC1QSCIsZGVsaW1pdGVy''@;'; put 'put ''czp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9''@;'; put 'put ''PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiMSIsY29kZToiUEhQIn19KX0oVmUpO3ZhciBrZT1WZS5leHBvcnRzLEFlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQu''@;'; put 'put ''X19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmci1DQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Imsi''@;'; put 'put ''LG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpWdD0+MT09PVZ0PyJlciI6Ilx4ZThtZSIsc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''bWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEFlKTt2YXIgX3Q9QWUu''@;'; put 'put ''ZXhwb3J0cyxudD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5n''@;'; put 'put ''dWFnZVRhZzoiZnItQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PjE9PT1WdD8iZXIiOiJceGU4bWUiLGN1cnJlbmN5Ontz''@;'; put 'put ''eW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRp''@;'; put 'put ''Z2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJy''@;'; put 'put ''ZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0obnQpO3ZhciBRZT1udC5leHBvcnRzLHVuPXtleHBvcnRz''@;'; put 'put ''Ont9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmci1GUiIsZGVs''@;'; put 'put ''aW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246ImJpbGxpb24ifSxvcmRpbmFsOlZ0PT4xPT09VnQ/ImVyIjoiXHhlOG1lIixieXRlczp7YmluYXJ5U3VmZml4ZXM6''@;'; put 'put ''WyJvIiwiS2lvIiwiTWlvIiwiR2lvIiwiVGlvIiwiUGlvIiwiRWlvIiwiWmlvIiwiWWlvIl0sZGVjaW1hbFN1ZmZpeGVzOlsibyIsIktvIiwiTW8iLCJHbyIsIlRvIiwiUG8iLCJFbyIsIlpvIiwiWW8iXX0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29k''@;'; put 'put ''ZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh1bik7dmFyIHl0PXVuLmV4cG9ydHMsTXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImhlLUlMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4i''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNWQwXHUwNWRjXHUwNWUzIixtaWxsaW9uOiJcdTA1ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLGJpbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkMFx1MDVlOFx1MDVkMyIsdHJpbGxpb246Ilx1MDVkOFx1''@;'; put 'put ''MDVlOFx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYSIscG9zaXRpb246InByZWZpeCIsY29kZToiSUxTIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShNdCk7dmFyIER0PU10LmV4cG9ydHMsaXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blBy''@;'; put 'put ''b3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Imh1LUhVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiRSIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoi''@;'; put 'put ''VCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkZ0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiSFVGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRp''@;'; put 'put ''c3NhOjB9fX0pfShpdCk7dmFyICRlPWl0LmV4cG9ydHMsdHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1''@;'; put 'put ''bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImlkIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiciIsbWlsbGlvbjoiaiIsYmlsbGlvbjoibSIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJScCIsY29kZToiSURSIn19KX0odHQpO3ZhciBIZT10dC5leHBvcnRzLHV0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJpdC1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlv''@;'; put 'put ''bjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YjAifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLGNvZGU6IkNIRiJ9fSl9KHV0KTt2YXIgcXQ9dXQuZXhwb3J0cyxSdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''IGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaXQtSVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lG''@;'; put 'put ''b3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1''@;'; put 'put ''bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShSdCk7dmFyIFB0PVJ0LmV4cG9ydHMsc2k9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0''@;'; put 'put ''dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImphLUpQIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0''@;'; put 'put ''aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkpQWSJ9''@;'; put 'put ''LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVy''@;'; put 'put ''YWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oc2kpO3ZhciBRdD1zaS5leHBvcnRzLHNuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJrby1LUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1Y2M5YyIsbWlsbGlvbjoiXHViYzMxXHViOWNjIixiaWxs''@;'; put 'put ''aW9uOiJcdWMyZWRcdWM1YjUiLHRyaWxsaW9uOiJcdWM3N2NcdWM4NzAifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTkiLGNvZGU6IktQVyJ9fSl9KHNuKTt2YXIgUmk9c24uZXhwb3J0cyxobj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGly''@;'; put 'put ''LHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibHYtTFYiLGRlbGltaXRlcnM6e3Rob3VzYW5k''@;'; put 'put ''czoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0XHUwMTZia3N0LiIsbWlsbGlvbjoibWlsai4iLGJpbGxpb246Im1sanJkLiIsdHJpbGxpb246InRyaWxqLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIs''@;'; put 'put ''cG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxM''@;'; put 'put ''ZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlz''@;'; put 'put ''c2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oaG4pO3ZhciBmdD1obi5leHBvcnRzLE9yPXtleHBvcnRzOnt9fTshZnVuY3Rp''@;'; put 'put ''b24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJuYi1OTyIsZGVsaW1pdGVyczp7dGhv''@;'; put 'put ''dXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTk9LIn0sY3VycmVu''@;'; put 'put ''Y3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5v''@;'; put 'put ''RGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShPcik7dmFyIFd0PU9yLmV4cG9ydHMsQXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7''@;'; put 'put ''cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5iIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0''@;'; put 'put ''aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KEF0KTt2YXIgUm49QXQuZXhwb3J0cyxzdD17ZXhwb3J0czp7fX07IWZ1bmN0''@;'; put 'put ''aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibmwtQkUiLGRlbGltaXRlcnM6e3Ro''@;'; put 'put ''b3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTAwO3JldHVybiAwIT09VnQmJkpyPD0xfHw4PT09SnJ8fEpyPj0yMD8ic3Rl''@;'; put 'put ''IjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRz''@;'; put 'put ''Ont0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5''@;'; put 'put ''OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShzdCk7dmFyIFV0PXN0LmV4cG9ydHMscmk9e2V4cG9ydHM6e319''@;'; put 'put ''OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5sLU5MIixkZWxpbWl0''@;'; put 'put ''ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtcmQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwMDtyZXR1cm4gMCE9PVZ0JiZKcjw9MXx8OD09PUpyfHxKcj49''@;'; put 'put ''MjA/InN0ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHJpKTt2''@;'; put 'put ''YXIgV2U9cmkuZXhwb3J0cyxUdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6''@;'; put 'put ''VnR9KHtsYW5ndWFnZVRhZzoibm4iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJy''@;'; put 'put ''ZW5jeTp7c3ltYm9sOiJrciIsY29kZToiTk9LIn19KX0oVHQpO3ZhciBucj1UdC5leHBvcnRzLGh0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJwbC1QTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR5cy4iLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmls''@;'; put 'put ''bGlvbjoiYmxuIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IiB6XHUwMTQyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUExOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRp''@;'; put 'put ''c3NhOjB9fX0pfShodCk7dmFyIHh0PWh0LmV4cG9ydHMsam49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1''@;'; put 'put ''bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InB0LUJSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsIixtaWxsaW9uOiJtaWxoXHhmNWVzIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6IlIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJCUkwifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRz''@;'; put 'put ''Ontmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1h''@;'; put 'put ''bHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShqbik7dmFyIHJuPWpuLmV4cG9ydHMsenQ9''@;'; put 'put ''e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InB0''@;'; put 'put ''LVBUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIw''@;'; put 'put ''YWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh6dCk7dmFyIGhpPXp0LmV4cG9ydHMsY249e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6Iiwi''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJy''@;'; put 'put ''ZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZToh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''Tm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGNuKTt2YXIgZm49Y24uZXhwb3J0cyxJaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0''@;'; put 'put ''KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlv''@;'; put 'put ''bnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntv''@;'; put 'put ''dXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSWkpO3ZhciBYdD1JaS5leHBvcnRzLGVuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYm''@;'; put 'put ''VnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJydS1SVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6''@;'; put 'put ''Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTA0NDBcdTA0NDNcdTA0MzEuIixwb3NpdGlvbjoicG9zdGZpeCIs''@;'; put 'put ''Y29kZToiUlVCIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0''@;'; put 'put ''aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZW4pO3ZhciB1YT1lbi5leHBvcnRzLEVpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBW''@;'; put 'put ''dCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJydS1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNh''@;'; put 'put ''bmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgi''@;'; put 'put ''fSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1h''@;'; put 'put ''bHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShFaSk7dmFyIHZyPUVpLmV4cG9ydHMsV249e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiBsaShWdCl7cmV0dXJuIFZ0JiZWdC5fX2Vz''@;'; put 'put ''TW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InNrLVNLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlz''@;'; put 'put ''LiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZv''@;'; put 'put ''cm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVs''@;'; put 'put ''bFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNp''@;'; put 'put ''bWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFduKTt2YXIgJGk9V24uZXhwb3J0cyxlaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1''@;'; put 'put ''cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoic2wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oZWkpO3ZhciBRcj1laS5leHBvcnRzLFZpPXtleHBvcnRzOnt9fTshZnVu''@;'; put 'put ''Y3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJzci1DeXJsLVJTIixkZWxpbWl0''@;'; put 'put ''ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9s''@;'; put 'put ''OiJSU0QiLGNvZGU6IlJTRCJ9fSl9KFZpKTt2YXIgTmk9VmkuZXhwb3J0cyxEYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoic3YtU0UiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246InRtZCJ9LG9yZGlu''@;'; put 'put ''YWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiU0VLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7''@;'; put 'put ''dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7''@;'; put 'put ''bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oRGEpO3ZhciBMcj1EYS5leHBvcnRzLFdpPXtleHBvcnRzOnt9fTsh''@;'; put 'put ''ZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ0aC1USCIsZGVsaW1pdGVy''@;'; put 'put ''czp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MGUxZVx1MGUzMVx1MGUxOSIsbWlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5IixiaWxsaW9uOiJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLHRy''@;'; put 'put ''aWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTBlM2YiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUSEIifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShXaSk7dmFyIHBhPVdpLmV4cG9ydHMsUW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbigpe2NvbnN0IFZ0PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoi''@;'; put 'put ''J2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw0MDoiJ1x1MDEzMW5j''@;'; put 'put ''XHUwMTMxIiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07cmV0dXJuIGZ1bmN0aW9uIGxpKEpyKXtyZXR1cm4gSnImJkpyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChKciwiZGVmYXVsdCIpP0pyLmRlZmF1bHQ6SnJ9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoidHItVFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJiaW4iLG1pbGxpb246Im1pbHlvbiIsYmlsbGlvbjoibWlseWFyIix0cmlsbGlvbjoidHJpbHlvbiJ9LG9yZGluYWw6SnI9PntpZigwPT09''@;'; put 'put ''SnIpcmV0dXJuIidcdTAxMzFuY1x1MDEzMSI7bGV0IGIwPUpyJTEwO3JldHVybiBWdFtiMF18fFZ0W0pyJTEwMC1iMF18fFZ0W0pyPj0xMDA/MTAwOm51bGxdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYmEiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUUlkifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KCl9KFFuKTt2YXIgbGE9UW4uZXhwb3J0cyx5YT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIGxpKFZ0KXtyZXR1cm4g''@;'; put 'put ''VnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoidWstVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJcdTA0NDJcdTA0MzhcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQ0MFx1MDQzNCIsdHJpbGxpb246Ilx1MDQzMVx1MDQzYlx1MDQzZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9z''@;'; put 'put ''aXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZl''@;'; put 'put ''cmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1''@;'; put 'put ''bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHlhKTt2YXIgTGE9eWEuZXhwb3J0cyxGYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''IGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiemgtQ04iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIs''@;'; put 'put ''Y29kZToiQ05ZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0''@;'; put 'put ''aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCxtYW50aXNzYTowfX19KX0oRmEpO3ZhciB0aT1GYS5leHBvcnRzLGdvPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs''@;'; put 'put ''KFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ6aC1NTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUx''@;'; put 'put ''MDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJNT1AiLGNvZGU6Ik1PUCJ9fSl9KGdvKTt2YXIgTnM9Z28uZXhwb3J0cyxibD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''IGxpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiemgtU0ciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIsY29kZToiU0dEIn19KX0oYmwpO3Zh''@;'; put 'put ''ciBwdT1ibC5leHBvcnRzLExjPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gbGkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpW''@;'; put 'put ''dH0oe2xhbmd1YWdlVGFnOiJ6aC1UVyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1N2IyYyJ9LGN1cnJlbmN5OntzeW1ib2w6Ik5UJCIsY29kZToiVFdEIn19KX0oTGMpO3ZhciBEMD1MYy5leHBvcnRzO3JldHVybiBmdW5jdGlvbihpcil7aXIuYmc9XyxpclsiY3MtQ1oiXT1CLGlyWyJkYS1ESyJdPVAsaXJbImRlLUFUIl09Tyxpclsi''@;'; put 'put ''ZGUtQ0giXT1OLGlyWyJkZS1ERSJdPUssaXJbImRlLUxJIl09Vyxpci5lbD1xLGlyWyJlbi1BVSJdPUosaXJbImVuLUdCIl09aWUsaXJbImVuLUlFIl09bWUsaXJbImVuLU5aIl09VGUsaXJbImVuLVpBIl09emUsaXJbImVzLUFSIl09cCxpclsiZXMtQ0wiXT14LGlyWyJlcy1DTyJdPVQsaXJb''@;'; put 'put ''ImVzLUNSIl09aixpclsiZXMtRVMiXT1tLGlyWyJlcy1NWCJdPWFlLGlyWyJlcy1OSSJdPXNlLGlyWyJlcy1QRSJdPVVlLGlyWyJlcy1QUiJdPW90LGlyWyJlcy1TViJdPXZlLGlyWyJldC1FRSJdPWplLGlyWyJmYS1JUiJdPUZlLGlyWyJmaS1GSSJdPUllLGlyWyJmaWwtUEgiXT1rZSxpclsi''@;'; put 'put ''ZnItQ0EiXT1fdCxpclsiZnItQ0giXT1RZSxpclsiZnItRlIiXT15dCxpclsiaGUtSUwiXT1EdCxpclsiaHUtSFUiXT0kZSxpci5pZD1IZSxpclsiaXQtQ0giXT1xdCxpclsiaXQtSVQiXT1QdCxpclsiamEtSlAiXT1RdCxpclsia28tS1IiXT1SaSxpclsibHYtTFYiXT1mdCxpclsibmItTk8i''@;'; put 'put ''XT1XdCxpci5uYj1SbixpclsibmwtQkUiXT1VdCxpclsibmwtTkwiXT1XZSxpci5ubj1ucixpclsicGwtUEwiXT14dCxpclsicHQtQlIiXT1ybixpclsicHQtUFQiXT1oaSxpclsicm8tUk8iXT1mbixpci5ybz1YdCxpclsicnUtUlUiXT11YSxpclsicnUtVUEiXT12cixpclsic2stU0siXT0k''@;'; put 'put ''aSxpci5zbD1Rcixpclsic3ItQ3lybC1SUyJdPU5pLGlyWyJzdi1TRSJdPUxyLGlyWyJ0aC1USCJdPXBhLGlyWyJ0ci1UUiJdPWxhLGlyWyJ1ay1VQSJdPUxhLGlyWyJ6aC1DTiJdPXRpLGlyWyJ6aC1NTyJdPU5zLGlyWyJ6aC1TRyJdPXB1LGlyWyJ6aC1UVyJdPUQwfSh5KSxmdW5jdGlvbiBY''@;'; put 'put ''KGlyKXtyZXR1cm4gaXImJmlyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpciwiZGVmYXVsdCIpP2lyLmRlZmF1bHQ6aXJ9KHkpfSgpfSw4MzEzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ5NjA5KTtYLmNlcnRpZmljYXRlPXko''@;'; put 'put ''OTQ3NzIpO3ZhciBfPUkuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0''@;'; put 'put ''ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO1guUlNBUHJp''@;'; put 'put ''dmF0ZUtleT1fO3ZhciBnPUkuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtYLlJTQVB1YmxpY0tleT1nO3ZhciBCPUkuZGVmaW5lKCJBbGdv''@;'; put 'put ''cml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIiku''@;'; put 'put ''c2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0i''@;'; put 'put ''KS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtYLlB1YmxpY0tleT13O3ZhciBQPUkuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0''@;'; put 'put ''aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7WC5Qcml2YXRlS2V5PVA7dmFyIEY9SS5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5v''@;'; put 'put ''YmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRo''@;'; put 'put ''aXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7WC5FbmNyeXB0ZWRQcml2YXRl''@;'; put 'put ''S2V5PUY7dmFyIE89SS5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tl''@;'; put 'put ''eSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO1guRFNBUHJpdmF0ZUtleT1PLFguRFNBcGFyYW09SS5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgej1JLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNl''@;'; put 'put ''KHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksTj1JLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9w''@;'; put 'put ''dGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKHopLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO1guRUNQcml2YXRlS2V5PU4sWC5zaWduYXR1cmU9SS5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlz''@;'; put 'put ''LmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDk0NzcyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDk2MDkpLF89SS5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhp''@;'; put 'put ''cy5nZW50aW1lKCl9KX0pLGc9SS5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksQj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlv''@;'; put 'put ''bigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxQPUkuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YoZyl9KSxGPUkuZGVmaW5l''@;'; put 'put ''KCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKFApfSksTz1JLmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoRil9KX0pLHo9SS5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMu''@;'; put 'put ''a2V5KCJub3RCZWZvcmUiKS51c2UoXyksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKF8pKX0pLE49SS5kZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCEx''@;'; put 'put ''KSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksTD1JLmRlZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5p''@;'; put 'put ''bnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKEIpLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoTyksdGhpcy5rZXkoInZhbGlkaXR5IikudXNlKHopLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKE8pLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZSh3KSx0aGlzLmtleSgi''@;'; put 'put ''aXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoTikub3B0aW9uYWwoKSl9''@;'; put 'put ''KSxLPUkuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKEwpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkp''@;'; put 'put ''fSk7dWUuZXhwb3J0cz1LfSw4OTQ3MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtc''@;'; put 'put ''blxyXSsvbSxfPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxnPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLEI9eSgxODIxMSksdz15KDQzMzg4KSxQPXko''@;'; put 'put ''MjcwNTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIEwsej1GLnRvU3RyaW5nKCksTj16Lm1hdGNoKEkpO2lmKE4pe3ZhciBVPSJhZXMiK05bMV0sVz1QLmZyb20oTlsyXSwiaGV4IiksWT1QLmZyb20oTlszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLHE9''@;'; put 'put ''QihPLFcuc2xpY2UoMCw4KSxwYXJzZUludChOWzFdLDEwKSkua2V5LGVlPVtdLEo9dy5jcmVhdGVEZWNpcGhlcml2KFUscSxXKTtlZS5wdXNoKEoudXBkYXRlKFkpKSxlZS5wdXNoKEouZmluYWwoKSksTD1QLmNvbmNhdChlZSl9ZWxzZXt2YXIgSz16Lm1hdGNoKGcpO0w9UC5mcm9tKEtbMl0u''@;'; put 'put ''cmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOnoubWF0Y2goXylbMV0sZGF0YTpMfX19LDY1NjY3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODMxMzgpLF89eSgxNTU3OSksZz15KDg5NDcyKSxCPXkoNDMzODgpLHc9eSg5MzM5NyksUD15KDI3MDU0''@;'; put 'put ''KS5CdWZmZXI7ZnVuY3Rpb24gTyh6KXt2YXIgTjsib2JqZWN0Ij09dHlwZW9mIHomJiFQLmlzQnVmZmVyKHopJiYoTj16LnBhc3NwaHJhc2Usej16LmtleSksInN0cmluZyI9PXR5cGVvZiB6JiYoej1QLmZyb20oeikpO3ZhciBXLFksTD1nKHosTiksSz1MLnRhZyxVPUwuZGF0YTtzd2l0Y2go''@;'; put 'put ''Syl7Y2FzZSJDRVJUSUZJQ0FURSI6WT1JLmNlcnRpZmljYXRlLmRlY29kZShVLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChZfHwoWT1JLlB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIikpLFc9WS5hbGdvcml0aG0uYWxn''@;'; put 'put ''b3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFkuc3ViamVjdFByaXZhdGVLZXk9WS5zdWJqZWN0''@;'; put 'put ''UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpZfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gWS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoWS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6WS5hbGdvcml0aG0u''@;'; put 'put ''cGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6VT1mdW5jdGlvbiBGKHosTil7dmFyIEw9ei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsSz1wYXJzZUludCh6LmFsZ29yaXRo''@;'; put 'put ''bS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksVT1fW3ouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxXPXouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LFk9ei5zdWJqZWN0UHJpdmF0ZUtleSxxPXBhcnNlSW50KFUuc3BsaXQo''@;'; put 'put ''Ii0iKVsxXSwxMCkvOCxlZT13LnBia2RmMlN5bmMoTixMLEsscSwic2hhMSIpLEo9Qi5jcmVhdGVEZWNpcGhlcml2KFUsZWUsVyksbmU9W107cmV0dXJuIG5lLnB1c2goSi51cGRhdGUoWSkpLG5lLnB1c2goSi5maW5hbCgpKSxQLmNvbmNhdChuZSl9KFU9SS5FbmNyeXB0ZWRQcml2YXRlS2V5''@;'; put 'put ''LmRlY29kZShVLCJkZXIiKSxOKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goVz0oWT1JLlByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNv''@;'; put 'put ''ZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOlkuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4y''@;'; put 'put ''Ljg0MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlkuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25v''@;'; put 'put ''d24ga2V5IGlkICIrVyl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0''@;'; put 'put ''eXBlOiJkc2EiLHBhcmFtczpJLkRTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KFU9SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6VS5wcml2YXRlS2V5fTtkZWZh''@;'; put 'put ''dWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK0spfX1PLnNpZ25hdHVyZT1JLnNpZ25hdHVyZSx1ZS5leHBvcnRzPU99LDkzMzk3Oih1ZSxYLHkpPT57WC5wYmtkZjI9eSg4MjY4NSksWC5wYmtkZjJTeW5jPXkoNTkxMTEpfSw4MjY4NToodWUsWCx5KT0+e3ZhciBQLEws''@;'; put 'put ''ST15KDI3MDU0KS5CdWZmZXIsXz15KDg2MTExKSxnPXkoNDUzOTIpLEI9eSg1OTExMSksdz15KDc2NjQzKSxGPWdsb2JhbC5jcnlwdG8mJmdsb2JhbC5jcnlwdG8uc3VidGxlLE89e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hh''@;'; put 'put ''LTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LHo9W107ZnVuY3Rpb24gSygpe3JldHVybiBMfHwoTD1nbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2s/Z2xv''@;'; put 'put ''YmFsLnByb2Nlc3MubmV4dFRpY2s6Z2xvYmFsLnF1ZXVlTWljcm90YXNrP2dsb2JhbC5xdWV1ZU1pY3JvdGFzazpnbG9iYWwuc2V0SW1tZWRpYXRlP2dsb2JhbC5zZXRJbW1lZGlhdGU6Z2xvYmFsLnNldFRpbWVvdXQpfWZ1bmN0aW9uIFUoWSxxLGVlLEosbmUpe3JldHVybiBGLmltcG9ydEtl''@;'; put 'put ''eSgicmF3IixZLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEYuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnEsaXRlcmF0aW9uczplZSxoYXNoOntuYW1lOm5lfX0saWUsSjw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXty''@;'; put 'put ''ZXR1cm4gSS5mcm9tKGllKX0pfXVlLmV4cG9ydHM9ZnVuY3Rpb24oWSxxLGVlLEosbmUsaWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBuZSYmKGllPW5lLG5lPXZvaWQgMCk7dmFyIGxlPU9bKG5lPW5lfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKGxlJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2xv''@;'; put 'put ''YmFsLlByb21pc2Upe2lmKF8oZWUsSiksWT13KFksZywiUGFzc3dvcmQiKSxxPXcocSxnLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIGllKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIFcoWSxxKXtZLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''ZWUpe0soKShmdW5jdGlvbigpe3EobnVsbCxlZSl9KX0sZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe3EoZWUpfSl9KX0oZnVuY3Rpb24gTihZKXtpZihnbG9iYWwucHJvY2VzcyYmIWdsb2JhbC5wcm9jZXNzLmJyb3dzZXJ8fCFGfHwhRi5pbXBvcnRLZXl8fCFGLmRlcml2ZUJpdHMpcmV0''@;'; put 'put ''dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09eltZXSlyZXR1cm4geltZXTt2YXIgcT1VKFA9UHx8SS5hbGxvYyg4KSxQLDEwLDEyOCxZKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIHpbWV09cSxxfShsZSku''@;'; put 'put ''dGhlbihmdW5jdGlvbihtZSl7cmV0dXJuIG1lP1UoWSxxLGVlLEosbGUpOkIoWSxxLGVlLEosbmUpfSksaWUpfWVsc2UgSygpKGZ1bmN0aW9uKCl7dmFyIG1lO3RyeXttZT1CKFkscSxlZSxKLG5lKX1jYXRjaChfZSl7cmV0dXJuIGllKF9lKX1pZShudWxsLG1lKX0pfX0sNDUzOTI6dWU9Pnt2''@;'; put 'put ''YXIgWDtYPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6''@;'; put 'put ''InV0Zi04Iix1ZS5leHBvcnRzPVh9LDg2MTExOnVlPT57dmFyIFg9TWF0aC5wb3coMiwzMCktMTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksSSl7aWYoIm51bWJlciIhPXR5cGVvZiB5KXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoeTwwKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSTwwfHxJPlh8fEkhPUkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDU5MTExOih1''@;'; put 'put ''ZSxYLHkpPT57dmFyIEk9eSg4MzQwNyksXz15KDM2NjM2KSxnPXkoMjU0NDMpLEI9eSgyNzA1NCkuQnVmZmVyLHc9eSg4NjExMSksUD15KDQ1MzkyKSxGPXkoNzY2NDMpLE89Qi5hbGxvYygxMjgpLHo9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUx''@;'; put 'put ''Mjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBOKFUsVyxZKXt2YXIgcT1mdW5jdGlvbiBMKFUpe3JldHVybiJybWQxNjAiPT09VXx8InJpcGVtZDE2MCI9PT1VP2Z1bmN0aW9uIFkocSl7cmV0dXJuKG5ldyBfKS51cGRhdGUocSkuZGlnZXN0KCl9OiJtZDUiPT09VT9JOmZ1''@;'; put 'put ''bmN0aW9uIFcocSl7cmV0dXJuIGcoVSkudXBkYXRlKHEpLmRpZ2VzdCgpfX0oVSksZWU9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O1cubGVuZ3RoPmVlP1c9cShXKTpXLmxlbmd0aDxlZSYmKFc9Qi5jb25jYXQoW1csT10sZWUpKTtmb3IodmFyIEo9Qi5hbGxvY1Vuc2FmZShl''@;'; put 'put ''ZSt6W1VdKSxuZT1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLGllPTA7aWU8ZWU7aWUrKylKW2llXT01NF5XW2llXSxuZVtpZV09OTJeV1tpZV07dmFyIGxlPUIuYWxsb2NVbnNhZmUoZWUrWSs0KTtKLmNvcHkobGUsMCwwLGVlKSx0aGlzLmlwYWQxPWxlLHRoaXMuaXBhZDI9Six0aGlzLm9wYWQ9''@;'; put 'put ''bmUsdGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1lZSx0aGlzLmhhc2g9cSx0aGlzLnNpemU9eltVXX1OLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVSxXKXtyZXR1cm4gVS5jb3B5KFcsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChXKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSks''@;'; put 'put ''dGhpcy5oYXNoKHRoaXMub3BhZCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24gSyhVLFcsWSxxLGVlKXt3KFkscSk7dmFyIEo9bmV3IE4oZWU9ZWV8fCJzaGExIixVPUYoVSxQLCJQYXNzd29yZCIpLChXPUYoVyxQLCJTYWx0IikpLmxlbmd0aCksbmU9Qi5hbGxvY1Vuc2FmZShxKSxpZT1CLmFsbG9j''@;'; put 'put ''VW5zYWZlKFcubGVuZ3RoKzQpO1cuY29weShpZSwwLDAsVy5sZW5ndGgpO2Zvcih2YXIgbGU9MCxtZT16W2VlXSxfZT1NYXRoLmNlaWwocS9tZSksVGU9MTtUZTw9X2U7VGUrKyl7aWUud3JpdGVVSW50MzJCRShUZSxXLmxlbmd0aCk7Zm9yKHZhciBTZT1KLnJ1bihpZSxKLmlwYWQxKSx6ZT1T''@;'; put 'put ''ZSxWPTE7VjxZO1YrKyl7emU9Si5ydW4oemUsSi5pcGFkMik7Zm9yKHZhciBwPTA7cDxtZTtwKyspU2VbcF1ePXplW3BdfVNlLmNvcHkobmUsbGUpLGxlKz1tZX1yZXR1cm4gbmV9fSw3NjY0MzoodWUsWCx5KT0+e3ZhciBJPXkoMjcwNTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8s''@;'; put 'put ''ZyxCKXtpZihJLmlzQnVmZmVyKF8pKXJldHVybiBfO2lmKCJzdHJpbmciPT10eXBlb2YgXylyZXR1cm4gSS5mcm9tKF8sZyk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KF8pKXJldHVybiBJLmZyb20oXy5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IoQisiIG11c3QgYmUgYSBzdHJpbmcsIGEg''@;'; put 'put ''QnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDk2NTY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBlb2YgcHJvY2Vzcz4idSJ8fCFwcm9jZXNzLnZlcnNpb258fDA9PT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1wcm9jZXNzLnZlcnNp''@;'; put 'put ''b24uaW5kZXhPZigidjEuIikmJjAhPT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT97bmV4dFRpY2s6ZnVuY3Rpb24gWCh5LEksXyxnKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgeSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5j''@;'; put 'put ''dGlvbicpO3ZhciB3LFAsQj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChCKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKHkpO2Nhc2UgMjpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3kuY2FsbChudWxsLEkpfSk7Y2FzZSAzOnJldHVybiBwcm9jZXNz''@;'; put 'put ''Lm5leHRUaWNrKGZ1bmN0aW9uKCl7eS5jYWxsKG51bGwsSSxfKX0pO2Nhc2UgNDpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3kuY2FsbChudWxsLEksXyxnKX0pO2RlZmF1bHQ6Zm9yKHc9bmV3IEFycmF5KEItMSksUD0wO1A8dy5sZW5ndGg7KXdbUCsrXT1hcmd1bWVudHNb''@;'; put 'put ''UF07cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXt5LmFwcGx5KG51bGwsdyl9KX19fTpwcm9jZXNzfSw1Mjk2NToodWUsWCx5KT0+e1gucHVibGljRW5jcnlwdD15KDg3MjY3KSxYLnByaXZhdGVEZWNyeXB0PXkoOTg2MTMpLFgucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oXyxn''@;'; put 'put ''KXtyZXR1cm4gWC5wdWJsaWNFbmNyeXB0KF8sZywhMCl9LFgucHVibGljRGVjcnlwdD1mdW5jdGlvbihfLGcpe3JldHVybiBYLnByaXZhdGVEZWNyeXB0KF8sZywhMCl9fSwzMDcxNToodWUsWCx5KT0+e3ZhciBJPXkoNjcyMTEpLF89eSgyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIGcoQil7dmFy''@;'; put 'put ''IHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKEIsMCksd311ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBPLFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspTz1nKEYrKyksUD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKEIpLnVwZGF0ZShP''@;'; put 'put ''KS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwxNjUwODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yu''@;'; put 'put ''c3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51''@;'; put 'put ''bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRT''@;'; put 'put ''aXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjp5KDUxMDY5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZi''@;'; put 'put ''PD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJD''@;'; put 'put ''b2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6''@;'; put 'put ''ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBs''@;'; put 'put ''YWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90''@;'; put 'put ''eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQm''@;'; put 'put ''NjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5''@;'; put 'put ''cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBB''@;'; put 'put ''cnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8''@;'; put 'put ''aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3''@;'; put 'put ''MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRo''@;'; put 'put ''aXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4''@;'; put 'put ''ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNb''@;'; put 'put ''SCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxl''@;'; put 'put ''bmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KHAs''@;'; put 'put ''QSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylhZSo9Yjt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9''@;'; put 'put ''bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhp''@;'; put 'put ''cy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3''@;'; put 'put ''LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3''@;'; put 'put ''LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3Ro''@;'; put 'put ''PXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEp''@;'; put 'put ''LHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxF''@;'; put 'put ''OmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hd''@;'; put 'put ''LEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxl''@;'; put 'put ''bmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciB0''@;'; put 'put ''ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gp''@;'; put 'put ''LHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09''@;'; put 'put ''PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNP''@;'; put 'put ''Tj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwi''@;'; put 'put ''UmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKysp''@;'; put 'put ''alttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzIt''@;'; put 'put ''TWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rp''@;'; put 'put ''b24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhp''@;'; put 'put ''cy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSku''@;'; put 'put ''aW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2Jd''@;'; put 'put ''PXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xv''@;'; put 'put ''bmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1''@;'; put 'put ''cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBw''@;'; put 'put ''Lm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4Lndv''@;'; put 'put ''cmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25l''@;'; put 'put ''KCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/''@;'; put 'put ''KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jk''@;'; put 'put ''c1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlz''@;'; put 'put ''JiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1sw''@;'; put 'put ''XSx0ZT04MTkxJmFlLHNlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9''@;'; put 'put ''ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEm''@;'; put 'put ''cXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0''@;'; put 'put ''PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdh''@;'; put 'put ''dGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgRWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXww''@;'; put 'put ''KStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVp''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''aHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGgu''@;'; put 'put ''aW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxV''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgRGE9KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNu''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChI''@;'; put 'put ''ZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''SWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQp''@;'; put 'put ''KStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''a2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxm''@;'; put 'put ''bil8MDt2YXIgcGE9KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''UWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQp''@;'; put 'put ''KStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBsYT0oaisoRT1F''@;'; put 'put ''K01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChI''@;'; put 'put ''ZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgeWE9KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoeWE+Pj4yNil8MCx5YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXww''@;'; put 'put ''KStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwodXQsZm4pO3ZhciBGYT0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZh''@;'; put 'put ''Jj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3''@;'; put 'put ''MTA4ODYzLEhbMF09dWEsSFsxXT1FaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09RGEsSFsxMF09THIsSFsxMV09V2ksSFsxMl09cGEsSFsxM109UW4sSFsxNF09bGEsSFsxNV09eWEsSFsxNl09TGEsSFsxN109RmEsSFsxOF09''@;'; put 'put ''dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFy''@;'; put 'put ''IHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIHEoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYu''@;'; put 'put ''bGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jk''@;'; put 'put ''c1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1Rd''@;'; put 'put ''PXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4o''@;'; put 'put ''Qyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihw''@;'; put 'put ''LGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwx''@;'; put 'put ''LG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLEplPUNbYWUrd2VdLG90PXhbYWUrd2Ural0sTWU9Q1thZSt3ZStqXSx2ZT10ZSpvdC1z''@;'; put 'put ''ZSpNZTtNZT10ZSpNZStzZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPUplK01lLHhbYWUrd2Ural09VWUtb3QsQ1thZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3Bb''@;'; put 'put ''Q109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5y''@;'; put 'put ''b3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipI''@;'; put 'put ''KzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90''@;'; put 'put ''eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9''@;'; put 'put ''bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFu''@;'; put 'put ''c2Zvcm0oQSxILGFlLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUs''@;'; put 'put ''bSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5n''@;'; put 'put ''dGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4''@;'; put 'put ''PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlz''@;'; put 'put ''Lmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09cD8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3Rv''@;'; 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 ''cHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10''@;'; 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/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2UpLHpl''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhp''@;'; put 'put ''cy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlz''@;'; put 'put ''Lm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9eS5ubWQodWUpLHRoaXMpfSw5ODYxMzoodWUsWCx5KT0+e3ZhciBJPXkoNjU2NjcpLF89eSgzMDcxNSksZz15KDM3MTk2KSxCPXkoMTY1MDgpLHc9eSgxNDEwNSksUD15KDY3MjExKSxGPXkoMTA1NjgpLE89eSgyNzA1NCku''@;'; put 'put ''QnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVSxXLFkpe3ZhciBxO3E9VS5wYWRkaW5nP1UucGFkZGluZzpZPzE6NDt2YXIgbmUsZWU9SShVKSxKPWVlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFcubGVuZ3RoPkp8fG5ldyBCKFcpLmNtcChlZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImRlY3J5cHRpb24gZXJyb3IiKTtuZT1ZP0YobmV3IEIoVyksZWUpOncoVyxlZSk7dmFyIGllPU8uYWxsb2MoSi1uZS5sZW5ndGgpO2lmKG5lPU8uY29uY2F0KFtpZSxuZV0sSiksND09PXEpcmV0dXJuIGZ1bmN0aW9uIHooSyxVKXt2YXIgVz1LLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9''@;'; put 'put ''UCgic2hhMSIpLnVwZGF0ZShPLmFsbG9jKDApKS5kaWdlc3QoKSxxPVkubGVuZ3RoO2lmKDAhPT1VWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBlZT1VLnNsaWNlKDEscSsxKSxKPVUuc2xpY2UocSsxKSxuZT1nKGVlLF8oSixxKSksaWU9ZyhKLF8obmUsVy1x''@;'; put 'put ''LTEpKTtpZihmdW5jdGlvbiBMKEssVSl7Sz1PLmZyb20oSyksVT1PLmZyb20oVSk7dmFyIFc9MCxZPUsubGVuZ3RoO0subGVuZ3RoIT09VS5sZW5ndGgmJihXKyssWT1NYXRoLm1pbihLLmxlbmd0aCxVLmxlbmd0aCkpO2Zvcih2YXIgcT0tMTsrK3E8WTspVys9S1txXV5VW3FdO3JldHVybiBX''@;'; put 'put ''fShZLGllLnNsaWNlKDAscSkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgbGU9cTswPT09aWVbbGVdOylsZSsrO2lmKDEhPT1pZVtsZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2UobGUpfShlZSxuZSk7''@;'; put 'put ''aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uIE4oSyxVLFcpe2Zvcih2YXIgWT1VLnNsaWNlKDAsMikscT0yLGVlPTA7MCE9PVVbcSsrXTspaWYocT49VS5sZW5ndGgpe2VlKys7YnJlYWt9dmFyIEo9VS5zbGljZSgyLHEtMSk7aWYoKCIwMDAyIiE9PVkudG9TdHJpbmcoImhleCIpJiYhV3x8IjAw''@;'; put 'put ''MDEiIT09WS50b1N0cmluZygiaGV4IikmJlcpJiZlZSsrLEoubGVuZ3RoPDgmJmVlKyssZWUpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFUuc2xpY2UocSl9KDAsbmUsWSk7aWYoMz09PXEpcmV0dXJuIG5lO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRk''@;'; put 'put ''aW5nIil9fSw4NzI2NzoodWUsWCx5KT0+e3ZhciBJPXkoNjU2NjcpLF89eSgzMzQyKSxnPXkoNjcyMTEpLEI9eSgzMDcxNSksdz15KDM3MTk2KSxQPXkoMTY1MDgpLEY9eSgxMDU2OCksTz15KDE0MTA1KSx6PXkoMjcwNTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFcsWSxxKXt2YXIg''@;'; put 'put ''ZWU7ZWU9Vy5wYWRkaW5nP1cucGFkZGluZzpxPzE6NDt2YXIgbmUsSj1JKFcpO2lmKDQ9PT1lZSluZT1mdW5jdGlvbiBOKFUsVyl7dmFyIFk9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxxPVcubGVuZ3RoLGVlPWcoInNoYTEiKS51cGRhdGUoei5hbGxvYygwKSkuZGlnZXN0KCksSj1lZS5sZW5n''@;'; put 'put ''dGgsbmU9MipKO2lmKHE+WS1uZS0yKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBpZT16LmFsbG9jKFktcS1uZS0yKSxsZT1ZLUotMSxtZT1fKEopLF9lPXcoei5jb25jYXQoW2VlLGllLHouYWxsb2MoMSwxKSxXXSxsZSksQihtZSxsZSkpLFRlPXcobWUsQihfZSxK''@;'; put 'put ''KSk7cmV0dXJuIG5ldyBQKHouY29uY2F0KFt6LmFsbG9jKDEpLFRlLF9lXSxZKSl9KEosWSk7ZWxzZSBpZigxPT09ZWUpbmU9ZnVuY3Rpb24gTChVLFcsWSl7dmFyIEoscT1XLmxlbmd0aCxlZT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKHE+ZWUtMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNz''@;'; put 'put ''YWdlIHRvbyBsb25nIik7cmV0dXJuIEo9WT96LmFsbG9jKGVlLXEtMywyNTUpOmZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBKLFc9ei5hbGxvY1Vuc2FmZShVKSxZPTAscT1fKDIqVSksZWU9MDtZPFU7KWVlPT09cS5sZW5ndGgmJihxPV8oMipVKSxlZT0wKSwoSj1xW2VlKytdKSYmKFdbWSsrXT1K''@;'; put 'put ''KTtyZXR1cm4gV30oZWUtcS0zKSxuZXcgUCh6LmNvbmNhdChbei5mcm9tKFswLFk/MToyXSksSix6LmFsbG9jKDEpLFddLGVlKSl9KEosWSxxKTtlbHNle2lmKDMhPT1lZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKChuZT1uZXcgUChZKSkuY21wKEoubW9kdWx1cyk+''@;'; put 'put ''PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHE/TyhuZSxKKTpGKG5lLEopfX0sMTA1Njg6KHVlLFgseSk9Pnt2YXIgST15KDE2NTA4KSxfPXkoMjcwNTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3KXtyZXR1cm4gXy5mcm9t''@;'; put 'put ''KEIudG9SZWQoSS5tb250KHcubW9kdWx1cykpLnJlZFBvdyhuZXcgSSh3LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSwzNzE5Njp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxJKXtmb3IodmFyIF89eS5sZW5ndGgsZz0tMTsrK2c8XzspeVtnXV49SVtnXTtyZXR1''@;'; put 'put ''cm4geX19LDMzNDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9NjU1MzYsQj15KDI3MDU0KS5CdWZmZXIsdz1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG87dWUuZXhwb3J0cz13JiZ3LmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBQKEYsTyl7aWYoRj40Mjk0OTY3Mjk1KXRo''@;'; put 'put ''cm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHo9Qi5hbGxvY1Vuc2FmZShGKTtpZihGPjApaWYoRj5JKWZvcih2YXIgTj0wO048RjtOKz1JKXcuZ2V0UmFuZG9tVmFsdWVzKHouc2xpY2UoTixOK0kpKTtlbHNlIHcuZ2V0UmFuZG9tVmFs''@;'; put 'put ''dWVzKHopO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPP3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtPKG51bGwseil9KTp6fTpmdW5jdGlvbiBnKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBi''@;'; put 'put ''cm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sOTY4MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkg''@;'; put 'put ''dGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIF89eSgyNzA1NCksZz15KDMzNDIpLEI9Xy5CdWZmZXIsdz1fLmtNYXhMZW5ndGgsUD1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG8sRj1NYXRoLnBvdygyLDMyKS0xO2Z1''@;'; put 'put ''bmN0aW9uIE8oVSxXKXtpZigibnVtYmVyIiE9dHlwZW9mIFV8fFUhPVUpdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihVPkZ8fFU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKFU+d3x8VT5XKXRocm93''@;'; put 'put ''IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24geihVLFcsWSl7aWYoIm51bWJlciIhPXR5cGVvZiBVfHxVIT1VKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKFU+Rnx8VTwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNp''@;'; put 'put ''emUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKFUrVz5ZfHxVPncpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImJ1ZmZlciB0b28gc21hbGwiKX1mdW5jdGlvbiBMKFUsVyxZLHEpe2lmKHByb2Nlc3MuYnJvd3Nlcil7dmFyIEo9bmV3IFVpbnQ4QXJyYXkoVS5idWZmZXIsVyxZKTtyZXR1cm4gUC5nZXRS''@;'; put 'put ''YW5kb21WYWx1ZXMoSikscT92b2lkIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtxKG51bGwsVSl9KTpVfWlmKCFxKXJldHVybiBnKFkpLmNvcHkoVSxXKSxVO2coWSxmdW5jdGlvbihpZSxsZSl7aWYoaWUpcmV0dXJuIHEoaWUpO2xlLmNvcHkoVSxXKSxxKG51bGwsVSl9KX1QJiZQLmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlc3x8IXByb2Nlc3MuYnJvd3Nlcj8oWC5yYW5kb21GaWxsPWZ1bmN0aW9uIE4oVSxXLFkscSl7aWYoIShCLmlzQnVmZmVyKFUpfHxVIGluc3RhbmNlb2YgZ2xvYmFsLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBC''@;'; put 'put ''dWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBXKXE9VyxXPTAsWT1VLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBZKXE9WSxZPVUubGVuZ3RoLVc7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgcSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2Ii''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiBPKFcsVS5sZW5ndGgpLHooWSxXLFUubGVuZ3RoKSxMKFUsVyxZLHEpfSxYLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uIEsoVSxXLFkpe2lmKHR5cGVvZiBXPiJ1IiYmKFc9MCksIShCLmlzQnVmZmVyKFUpfHxVIGluc3RhbmNl''@;'; put 'put ''b2YgZ2xvYmFsLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiBPKFcsVS5sZW5ndGgpLHZvaWQgMD09PVkmJihZPVUubGVuZ3RoLVcpLHooWSxXLFUubGVuZ3RoKSxMKFUsVyxZKX0p''@;'; put 'put ''OihYLnJhbmRvbUZpbGw9SSxYLnJhbmRvbUZpbGxTeW5jPUkpfSw3NDA3NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk2NTYpLF89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEspe3ZhciBVPVtdO2Zvcih2YXIgVyBpbiBLKVUucHVzaChXKTtyZXR1cm4gVX07dWUuZXhwb3J0cz16''@;'; put 'put ''O3ZhciBnPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO2cuaW5oZXJpdHM9eSg3MTk5Myk7dmFyIEI9eSgxOTYwOSksdz15KDQ3ODQ5KTtnLmluaGVyaXRzKHosQik7Zm9yKHZhciBQPV8ody5wcm90b3R5cGUpLEY9MDtGPFAubGVuZ3RoO0YrKyl7dmFyIE89UFtGXTt6LnByb3RvdHlwZVtPXXx8''@;'; put 'put ''KHoucHJvdG90eXBlW09dPXcucHJvdG90eXBlW09dKX1mdW5jdGlvbiB6KEspe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgeihLKTtCLmNhbGwodGhpcyxLKSx3LmNhbGwodGhpcyxLKSxLJiYhMT09PUsucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxLJiYhMT09PUsu''@;'; put 'put ''d3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsSyYmITE9PT1LLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixOKX1mdW5jdGlvbiBOKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlLmVuZGVkfHxJLm5leHRUaWNrKEwsdGhpcyl9ZnVuY3Rpb24gTChLKXtLLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEspe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1LLHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZGVzdHJveWVkPUspfX0pLHoucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEssVSl7dGhpcy5wdXNoKG51bGwpLHRoaXMuZW5kKCksSS5uZXh0VGljayhVLEspfX0sMTg4MjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1nO3ZhciBJPXkoMjkwOSks''@;'; put 'put ''Xz1PYmplY3QuY3JlYXRlKHkoMjc2MzcpKTtmdW5jdGlvbiBnKEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhCKTtJLmNhbGwodGhpcyxCKX1fLmluaGVyaXRzPXkoNzE5OTMpLF8uaW5oZXJpdHMoZyxJKSxnLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEIs''@;'; put 'put ''dyxQKXtQKG51bGwsQil9fSwxOTYwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk2NTYpO3VlLmV4cG9ydHM9aWU7dmFyIGcsXz15KDIwMDUzKTtpZS5SZWFkYWJsZVN0YXRlPW5lLHkoNDQzNTYpO3ZhciB3PWZ1bmN0aW9uKE1lLHZlKXtyZXR1cm4gTWUubGlzdGVuZXJzKHZl''@;'; put 'put ''KS5sZW5ndGh9LFA9eSgxODM0MiksRj15KDI2NTUpLkJ1ZmZlcixPPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTD1PYmplY3QuY3JlYXRlKHkoMjc2Mzcp''@;'; put 'put ''KTtMLmluaGVyaXRzPXkoNzE5OTMpO3ZhciBLPXkoNzk4MzgpLFU9dm9pZCAwO1U9SyYmSy5kZWJ1Z2xvZz9LLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIHEsVz15KDI3ODA5KSxZPXkoMjE1MDkpO0wuaW5oZXJpdHMoaWUsUCk7dmFyIGVlPVsiZXJyb3IiLCJjbG9zZSIs''@;'; put 'put ''ImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIG5lKE1lLHZlKXt2YXIgWGU9dmUgaW5zdGFuY2VvZihnPWd8fHkoNzQwNzUpKTt0aGlzLm9iamVjdE1vZGU9ISEoTWU9TWV8fHt9KS5vYmplY3RNb2RlLFhlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFN''@;'; put 'put ''ZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBqZT1NZS5oaWdoV2F0ZXJNYXJrLERlPU1lLnJlYWRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9amV8fDA9PT1qZT9qZTpYZSYmKERlfHwwPT09RGUpP0RlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRl''@;'; put 'put ''ck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuYnVmZmVyPW5ldyBXLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGlu''@;'; put 'put ''Zz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1NZS5kZWZhdWx0RW5j''@;'; put 'put ''b2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxNZS5lbmNvZGluZyYmKHF8fChxPXkoNzg0NTQpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgcShNZS5lbmNvZGluZyksdGhpcy5lbmNvZGlu''@;'; put 'put ''Zz1NZS5lbmNvZGluZyl9ZnVuY3Rpb24gaWUoTWUpe2lmKGc9Z3x8eSg3NDA3NSksISh0aGlzIGluc3RhbmNlb2YgaWUpKXJldHVybiBuZXcgaWUoTWUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IG5lKE1lLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsTWUmJigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''TWUucmVhZCYmKHRoaXMuX3JlYWQ9TWUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIE1lLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PU1lLmRlc3Ryb3kpKSxQLmNhbGwodGhpcyl9ZnVuY3Rpb24gbGUoTWUsdmUsWGUsamUsRGUpe3ZhciBSZSxGZT1NZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4g''@;'; put 'put ''bnVsbD09PXZlPyhGZS5yZWFkaW5nPSExLGZ1bmN0aW9uIHAoTWUsdmUpe2lmKCF2ZS5lbmRlZCl7aWYodmUuZGVjb2Rlcil7dmFyIFhlPXZlLmRlY29kZXIuZW5kKCk7WGUmJlhlLmxlbmd0aCYmKHZlLmJ1ZmZlci5wdXNoKFhlKSx2ZS5sZW5ndGgrPXZlLm9iamVjdE1vZGU/MTpYZS5sZW5n''@;'; put 'put ''dGgpfXZlLmVuZGVkPSEwLGIoTWUpfX0oTWUsRmUpKTooRGV8fChSZT1mdW5jdGlvbiBfZShNZSx2ZSl7dmFyIFhlO3JldHVybiFmdW5jdGlvbiBOKE1lKXtyZXR1cm4gRi5pc0J1ZmZlcihNZSl8fE1lIGluc3RhbmNlb2YgT30odmUpJiYic3RyaW5nIiE9dHlwZW9mIHZlJiZ2b2lkIDAhPT12''@;'; put 'put ''ZSYmIU1lLm9iamVjdE1vZGUmJihYZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLFhlfShGZSx2ZSkpLFJlP01lLmVtaXQoImVycm9yIixSZSk6RmUub2JqZWN0TW9kZXx8dmUmJnZlLmxlbmd0aD4wPygic3RyaW5nIiE9dHlwZW9mIHZlJiYhRmUu''@;'; put 'put ''b2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHZlKSE9PUYucHJvdG90eXBlJiYodmU9ZnVuY3Rpb24geihNZSl7cmV0dXJuIEYuZnJvbShNZSl9KHZlKSksamU/RmUuZW5kRW1pdHRlZD9NZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVu''@;'; put 'put ''ZCBldmVudCIpKTptZShNZSxGZSx2ZSwhMCk6RmUuZW5kZWQ/TWUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk6KEZlLnJlYWRpbmc9ITEsRmUuZGVjb2RlciYmIVhlPyh2ZT1GZS5kZWNvZGVyLndyaXRlKHZlKSxGZS5vYmplY3RNb2RlfHwwIT09''@;'; put 'put ''dmUubGVuZ3RoP21lKE1lLEZlLHZlLCExKTpDKE1lLEZlKSk6bWUoTWUsRmUsdmUsITEpKSk6amV8fChGZS5yZWFkaW5nPSExKSksZnVuY3Rpb24gVGUoTWUpe3JldHVybiFNZS5lbmRlZCYmKE1lLm5lZWRSZWFkYWJsZXx8TWUubGVuZ3RoPE1lLmhpZ2hXYXRlck1hcmt8fDA9PT1NZS5sZW5n''@;'; put 'put ''dGgpfShGZSl9ZnVuY3Rpb24gbWUoTWUsdmUsWGUsamUpe3ZlLmZsb3dpbmcmJjA9PT12ZS5sZW5ndGgmJiF2ZS5zeW5jPyhNZS5lbWl0KCJkYXRhIixYZSksTWUucmVhZCgwKSk6KHZlLmxlbmd0aCs9dmUub2JqZWN0TW9kZT8xOlhlLmxlbmd0aCxqZT92ZS5idWZmZXIudW5zaGlmdChYZSk6''@;'; put 'put ''dmUuYnVmZmVyLnB1c2goWGUpLHZlLm5lZWRSZWFkYWJsZSYmYihNZSkpLEMoTWUsdmUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKE1lKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9TWUpfX0pLGllLnByb3RvdHlwZS5kZXN0cm95PVkuZGVzdHJveSxpZS5wcm90b3R5cGUuX3VuZGVzdHJveT1ZLnVuZGVzdHJveSxpZS5w''@;'; put 'put ''cm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTWUsdmUpe3RoaXMucHVzaChudWxsKSx2ZShNZSl9LGllLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKE1lLHZlKXt2YXIgamUsWGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gWGUub2JqZWN0TW9kZT9qZT0hMDoic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IE1lJiYoKHZlPXZlfHxYZS5kZWZhdWx0RW5jb2RpbmcpIT09WGUuZW5jb2RpbmcmJihNZT1GLmZyb20oTWUsdmUpLHZlPSIiKSxqZT0hMCksbGUodGhpcyxNZSx2ZSwhMSxqZSl9LGllLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKE1lKXtyZXR1cm4gbGUodGhpcyxNZSxudWxsLCEwLCEx''@;'; put 'put ''KX0saWUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGllLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihNZSl7cmV0dXJuIHF8fChxPXkoNzg0NTQpLkkpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rl''@;'; put 'put ''cj1uZXcgcShNZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz1NZSx0aGlzfTtmdW5jdGlvbiBWKE1lLHZlKXtyZXR1cm4gTWU8PTB8fDA9PT12ZS5sZW5ndGgmJnZlLmVuZGVkPzA6dmUub2JqZWN0TW9kZT8xOk1lIT1NZT92ZS5mbG93aW5nJiZ2ZS5sZW5ndGg/dmUuYnVmZmVyLmhl''@;'; put 'put ''YWQuZGF0YS5sZW5ndGg6dmUubGVuZ3RoOihNZT52ZS5oaWdoV2F0ZXJNYXJrJiYodmUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiB6ZShNZSl7cmV0dXJuIE1lPj04Mzg4NjA4P01lPTgzODg2MDg6KE1lLS0sTWV8PU1lPj4+MSxNZXw9TWU+Pj4yLE1lfD1NZT4+PjQsTWV8PU1lPj4+OCxNZXw9''@;'; put 'put ''TWU+Pj4xNixNZSsrKSxNZX0oTWUpKSxNZTw9dmUubGVuZ3RoP01lOnZlLmVuZGVkP3ZlLmxlbmd0aDoodmUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBiKE1lKXt2YXIgdmU9TWUuX3JlYWRhYmxlU3RhdGU7dmUubmVlZFJlYWRhYmxlPSExLHZlLmVtaXR0ZWRSZWFkYWJsZXx8KFUo''@;'; put 'put ''ImVtaXRSZWFkYWJsZSIsdmUuZmxvd2luZyksdmUuZW1pdHRlZFJlYWRhYmxlPSEwLHZlLnN5bmM/SS5uZXh0VGljayh4LE1lKTp4KE1lKSl9ZnVuY3Rpb24geChNZSl7VSgiZW1pdCByZWFkYWJsZSIpLE1lLmVtaXQoInJlYWRhYmxlIiksQShNZSl9ZnVuY3Rpb24gQyhNZSx2ZSl7dmUucmVh''@;'; put 'put ''ZGluZ01vcmV8fCh2ZS5yZWFkaW5nTW9yZT0hMCxJLm5leHRUaWNrKFQsTWUsdmUpKX1mdW5jdGlvbiBUKE1lLHZlKXtmb3IodmFyIFhlPXZlLmxlbmd0aDshdmUucmVhZGluZyYmIXZlLmZsb3dpbmcmJiF2ZS5lbmRlZCYmdmUubGVuZ3RoPHZlLmhpZ2hXYXRlck1hcmsmJihVKCJtYXliZVJl''@;'; put 'put ''YWRNb3JlIHJlYWQgMCIpLE1lLnJlYWQoMCksWGUhPT12ZS5sZW5ndGgpOylYZT12ZS5sZW5ndGg7dmUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gaihNZSl7VSgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksTWUucmVhZCgwKX1mdW5jdGlvbiBtKE1lLHZlKXt2ZS5yZWFkaW5nfHwoVSgi''@;'; put 'put ''cmVzdW1lIHJlYWQgMCIpLE1lLnJlYWQoMCkpLHZlLnJlc3VtZVNjaGVkdWxlZD0hMSx2ZS5hd2FpdERyYWluPTAsTWUuZW1pdCgicmVzdW1lIiksQShNZSksdmUuZmxvd2luZyYmIXZlLnJlYWRpbmcmJk1lLnJlYWQoMCl9ZnVuY3Rpb24gQShNZSl7dmFyIHZlPU1lLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''O2ZvcihVKCJmbG93Iix2ZS5mbG93aW5nKTt2ZS5mbG93aW5nJiZudWxsIT09TWUucmVhZCgpOyk7fWZ1bmN0aW9uIGFlKE1lLHZlKXtyZXR1cm4gMD09PXZlLmxlbmd0aD9udWxsOih2ZS5vYmplY3RNb2RlP1hlPXZlLmJ1ZmZlci5zaGlmdCgpOiFNZXx8TWU+PXZlLmxlbmd0aD8oWGU9dmUu''@;'; put 'put ''ZGVjb2Rlcj92ZS5idWZmZXIuam9pbigiIik6MT09PXZlLmJ1ZmZlci5sZW5ndGg/dmUuYnVmZmVyLmhlYWQuZGF0YTp2ZS5idWZmZXIuY29uY2F0KHZlLmxlbmd0aCksdmUuYnVmZmVyLmNsZWFyKCkpOlhlPWZ1bmN0aW9uIHRlKE1lLHZlLFhlKXt2YXIgamU7cmV0dXJuIE1lPHZlLmhlYWQu''@;'; put 'put ''ZGF0YS5sZW5ndGg/KGplPXZlLmhlYWQuZGF0YS5zbGljZSgwLE1lKSx2ZS5oZWFkLmRhdGE9dmUuaGVhZC5kYXRhLnNsaWNlKE1lKSk6amU9TWU9PT12ZS5oZWFkLmRhdGEubGVuZ3RoP3ZlLnNoaWZ0KCk6WGU/ZnVuY3Rpb24gc2UoTWUsdmUpe3ZhciBYZT12ZS5oZWFkLGplPTEsRGU9WGUu''@;'; put 'put ''ZGF0YTtmb3IoTWUtPURlLmxlbmd0aDtYZT1YZS5uZXh0Oyl7dmFyIEZlPVhlLmRhdGEsUmU9TWU+RmUubGVuZ3RoP0ZlLmxlbmd0aDpNZTtpZihEZSs9UmU9PT1GZS5sZW5ndGg/RmU6RmUuc2xpY2UoMCxNZSksMD09KE1lLT1SZSkpe1JlPT09RmUubGVuZ3RoPygrK2plLHZlLmhlYWQ9WGUu''@;'; put 'put ''bmV4dD9YZS5uZXh0OnZlLnRhaWw9bnVsbCk6KHZlLmhlYWQ9WGUsWGUuZGF0YT1GZS5zbGljZShSZSkpO2JyZWFrfSsramV9cmV0dXJuIHZlLmxlbmd0aC09amUsRGV9KE1lLHZlKTpmdW5jdGlvbiB3ZShNZSx2ZSl7dmFyIFhlPUYuYWxsb2NVbnNhZmUoTWUpLGplPXZlLmhlYWQsRGU9MTtm''@;'; put 'put ''b3IoamUuZGF0YS5jb3B5KFhlKSxNZS09amUuZGF0YS5sZW5ndGg7amU9amUubmV4dDspe3ZhciBGZT1qZS5kYXRhLFJlPU1lPkZlLmxlbmd0aD9GZS5sZW5ndGg6TWU7aWYoRmUuY29weShYZSxYZS5sZW5ndGgtTWUsMCxSZSksMD09KE1lLT1SZSkpe1JlPT09RmUubGVuZ3RoPygrK0RlLHZl''@;'; put 'put ''LmhlYWQ9amUubmV4dD9qZS5uZXh0OnZlLnRhaWw9bnVsbCk6KHZlLmhlYWQ9amUsamUuZGF0YT1GZS5zbGljZShSZSkpO2JyZWFrfSsrRGV9cmV0dXJuIHZlLmxlbmd0aC09RGUsWGV9KE1lLHZlKSxqZX0oTWUsdmUuYnVmZmVyLHZlLmRlY29kZXIpLFhlKTt2YXIgWGV9ZnVuY3Rpb24gVWUo''@;'; put 'put ''TWUpe3ZhciB2ZT1NZS5fcmVhZGFibGVTdGF0ZTtpZih2ZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO3ZlLmVuZEVtaXR0ZWR8fCh2ZS5lbmRlZD0hMCxJLm5leHRUaWNrKEplLHZlLE1lKSl9ZnVuY3Rpb24g''@;'; put 'put ''SmUoTWUsdmUpeyFNZS5lbmRFbWl0dGVkJiYwPT09TWUubGVuZ3RoJiYoTWUuZW5kRW1pdHRlZD0hMCx2ZS5yZWFkYWJsZT0hMSx2ZS5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24gb3QoTWUsdmUpe2Zvcih2YXIgWGU9MCxqZT1NZS5sZW5ndGg7WGU8amU7WGUrKylpZihNZVtYZV09PT12ZSlyZXR1''@;'; put 'put ''cm4gWGU7cmV0dXJuLTF9aWUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oTWUpe1UoInJlYWQiLE1lKSxNZT1wYXJzZUludChNZSwxMCk7dmFyIHZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWGU9TWU7aWYoMCE9PU1lJiYodmUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09TWUmJnZlLm5lZWRSZWFk''@;'; put 'put ''YWJsZSYmKHZlLmxlbmd0aD49dmUuaGlnaFdhdGVyTWFya3x8dmUuZW5kZWQpKXJldHVybiBVKCJyZWFkOiBlbWl0UmVhZGFibGUiLHZlLmxlbmd0aCx2ZS5lbmRlZCksMD09PXZlLmxlbmd0aCYmdmUuZW5kZWQ/VWUodGhpcyk6Yih0aGlzKSxudWxsO2lmKDA9PT0oTWU9VihNZSx2ZSkpJiZ2''@;'; put 'put ''ZS5lbmRlZClyZXR1cm4gMD09PXZlLmxlbmd0aCYmVWUodGhpcyksbnVsbDt2YXIgRGUsamU9dmUubmVlZFJlYWRhYmxlO3JldHVybiBVKCJuZWVkIHJlYWRhYmxlIixqZSksKDA9PT12ZS5sZW5ndGh8fHZlLmxlbmd0aC1NZTx2ZS5oaWdoV2F0ZXJNYXJrKSYmVSgibGVuZ3RoIGxlc3MgdGhh''@;'; put 'put ''biB3YXRlcm1hcmsiLGplPSEwKSx2ZS5lbmRlZHx8dmUucmVhZGluZz9VKCJyZWFkaW5nIG9yIGVuZGVkIixqZT0hMSk6amUmJihVKCJkbyByZWFkIiksdmUucmVhZGluZz0hMCx2ZS5zeW5jPSEwLDA9PT12ZS5sZW5ndGgmJih2ZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQodmUuaGln''@;'; put 'put ''aFdhdGVyTWFyayksdmUuc3luYz0hMSx2ZS5yZWFkaW5nfHwoTWU9VihYZSx2ZSkpKSxudWxsPT09KERlPU1lPjA/YWUoTWUsdmUpOm51bGwpPyh2ZS5uZWVkUmVhZGFibGU9ITAsTWU9MCk6dmUubGVuZ3RoLT1NZSwwPT09dmUubGVuZ3RoJiYodmUuZW5kZWR8fCh2ZS5uZWVkUmVhZGFibGU9''@;'; put 'put ''ITApLFhlIT09TWUmJnZlLmVuZGVkJiZVZSh0aGlzKSksbnVsbCE9PURlJiZ0aGlzLmVtaXQoImRhdGEiLERlKSxEZX0saWUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKE1lKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxpZS5w''@;'; put 'put ''cm90b3R5cGUucGlwZT1mdW5jdGlvbihNZSx2ZSl7dmFyIFhlPXRoaXMsamU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goamUucGlwZXNDb3VudCl7Y2FzZSAwOmplLnBpcGVzPU1lO2JyZWFrO2Nhc2UgMTpqZS5waXBlcz1bamUucGlwZXMsTWVdO2JyZWFrO2RlZmF1bHQ6amUucGlwZXMu''@;'; put 'put ''cHVzaChNZSl9amUucGlwZXNDb3VudCs9MSxVKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGplLnBpcGVzQ291bnQsdmUpO3ZhciBGZT12ZSYmITE9PT12ZS5lbmR8fE1lPT09cHJvY2Vzcy5zdGRvdXR8fE1lPT09cHJvY2Vzcy5zdGRlcnI/TXQ6SWU7ZnVuY3Rpb24gSWUoKXtVKCJvbmVuZCIp''@;'; put 'put ''LE1lLmVuZCgpfWplLmVuZEVtaXR0ZWQ/SS5uZXh0VGljayhGZSk6WGUub25jZSgiZW5kIixGZSksTWUub24oInVucGlwZSIsZnVuY3Rpb24gUmUoRHQsaXQpe1UoIm9udW5waXBlIiksRHQ9PT1YZSYmaXQmJiExPT09aXQuaGFzVW5waXBlZCYmKGl0Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24g''@;'; put 'put ''QWUoKXtVKCJjbGVhbnVwIiksTWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix1biksTWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIseXQpLE1lLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsVmUpLE1lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsUWUpLE1lLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUi''@;'; put 'put ''LFJlKSxYZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixJZSksWGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsTXQpLFhlLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixudCksa2U9ITAsamUuYXdhaXREcmFpbiYmKCFNZS5fd3JpdGFibGVTdGF0ZXx8TWUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmVmUo''@;'; put 'put ''KX0oKSl9KTt2YXIgVmU9ZnVuY3Rpb24gSChNZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHZlPU1lLl9yZWFkYWJsZVN0YXRlO1UoInBpcGVPbkRyYWluIix2ZS5hd2FpdERyYWluKSx2ZS5hd2FpdERyYWluJiZ2ZS5hd2FpdERyYWluLS0sMD09PXZlLmF3YWl0RHJhaW4mJncoTWUsImRhdGEi''@;'; put 'put ''KSYmKHZlLmZsb3dpbmc9ITAsQShNZSkpfX0oWGUpO01lLm9uKCJkcmFpbiIsVmUpO3ZhciBrZT0hMSxfdD0hMTtmdW5jdGlvbiBudChEdCl7VSgib25kYXRhIiksX3Q9ITEsITE9PT1NZS53cml0ZShEdCkmJiFfdCYmKCgxPT09amUucGlwZXNDb3VudCYmamUucGlwZXM9PT1NZXx8amUucGlw''@;'; put 'put ''ZXNDb3VudD4xJiYtMSE9PW90KGplLnBpcGVzLE1lKSkmJiFrZSYmKFUoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsamUuYXdhaXREcmFpbiksamUuYXdhaXREcmFpbisrLF90PSEwKSxYZS5wYXVzZSgpKX1mdW5jdGlvbiBRZShEdCl7VSgib25lcnJvciIsRHQpLE10KCksTWUucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImVycm9yIixRZSksMD09PXcoTWUsImVycm9yIikmJk1lLmVtaXQoImVycm9yIixEdCl9ZnVuY3Rpb24gdW4oKXtNZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix5dCksTXQoKX1mdW5jdGlvbiB5dCgpe1UoIm9uZmluaXNoIiksTWUucmVtb3ZlTGlzdGVuZXIoImNsb3Nl''@;'; put 'put ''Iix1biksTXQoKX1mdW5jdGlvbiBNdCgpe1UoInVucGlwZSIpLFhlLnVucGlwZShNZSl9cmV0dXJuIFhlLm9uKCJkYXRhIixudCksZnVuY3Rpb24gSihNZSx2ZSxYZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE1lLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gTWUucHJlcGVuZExpc3RlbmVyKHZl''@;'; put 'put ''LFhlKTtNZS5fZXZlbnRzJiZNZS5fZXZlbnRzW3ZlXT9fKE1lLl9ldmVudHNbdmVdKT9NZS5fZXZlbnRzW3ZlXS51bnNoaWZ0KFhlKTpNZS5fZXZlbnRzW3ZlXT1bWGUsTWUuX2V2ZW50c1t2ZV1dOk1lLm9uKHZlLFhlKX0oTWUsImVycm9yIixRZSksTWUub25jZSgiY2xvc2UiLHVuKSxNZS5v''@;'; put 'put ''bmNlKCJmaW5pc2giLHl0KSxNZS5lbWl0KCJwaXBlIixYZSksamUuZmxvd2luZ3x8KFUoInBpcGUgcmVzdW1lIiksWGUucmVzdW1lKCkpLE1lfSxpZS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKE1lKXt2YXIgdmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxYZT17aGFzVW5waXBlZDohMX07aWYo''@;'; put 'put ''MD09PXZlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PXZlLnBpcGVzQ291bnQpcmV0dXJuIE1lJiZNZSE9PXZlLnBpcGVzfHwoTWV8fChNZT12ZS5waXBlcyksdmUucGlwZXM9bnVsbCx2ZS5waXBlc0NvdW50PTAsdmUuZmxvd2luZz0hMSxNZSYmTWUuZW1pdCgidW5waXBlIix0aGlz''@;'; put 'put ''LFhlKSksdGhpcztpZighTWUpe3ZhciBqZT12ZS5waXBlcyxEZT12ZS5waXBlc0NvdW50O3ZlLnBpcGVzPW51bGwsdmUucGlwZXNDb3VudD0wLHZlLmZsb3dpbmc9ITE7Zm9yKHZhciBGZT0wO0ZlPERlO0ZlKyspamVbRmVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3Jl''@;'; put 'put ''dHVybiB0aGlzfXZhciBSZT1vdCh2ZS5waXBlcyxNZSk7cmV0dXJuLTE9PT1SZXx8KHZlLnBpcGVzLnNwbGljZShSZSwxKSx2ZS5waXBlc0NvdW50LT0xLDE9PT12ZS5waXBlc0NvdW50JiYodmUucGlwZXM9dmUucGlwZXNbMF0pLE1lLmVtaXQoInVucGlwZSIsdGhpcyxYZSkpLHRoaXN9LGll''@;'; put 'put ''LnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1pZS5wcm90b3R5cGUub249ZnVuY3Rpb24oTWUsdmUpe3ZhciBYZT1QLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsTWUsdmUpO2lmKCJkYXRhIj09PU1lKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYo''@;'; put 'put ''InJlYWRhYmxlIj09PU1lKXt2YXIgamU9dGhpcy5fcmVhZGFibGVTdGF0ZTshamUuZW5kRW1pdHRlZCYmIWplLnJlYWRhYmxlTGlzdGVuaW5nJiYoamUucmVhZGFibGVMaXN0ZW5pbmc9amUubmVlZFJlYWRhYmxlPSEwLGplLmVtaXR0ZWRSZWFkYWJsZT0hMSxqZS5yZWFkaW5nP2plLmxlbmd0''@;'; put 'put ''aCYmYih0aGlzKTpJLm5leHRUaWNrKGosdGhpcykpfXJldHVybiBYZX0saWUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBNZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBNZS5mbG93aW5nfHwoVSgicmVzdW1lIiksTWUuZmxvd2luZz0hMCxmdW5jdGlvbiBFKE1lLHZlKXt2''@;'; put 'put ''ZS5yZXN1bWVTY2hlZHVsZWR8fCh2ZS5yZXN1bWVTY2hlZHVsZWQ9ITAsSS5uZXh0VGljayhtLE1lLHZlKSl9KHRoaXMsTWUpKSx0aGlzfSxpZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVSgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZs''@;'; put 'put ''b3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVSgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxpZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihNZSl7dmFyIHZlPXRoaXMsWGU9dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZSxqZT0hMTtmb3IodmFyIERlIGluIE1lLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoVSgid3JhcHBlZCBlbmQiKSxYZS5kZWNvZGVyJiYhWGUuZW5kZWQpe3ZhciBSZT1YZS5kZWNvZGVyLmVuZCgpO1JlJiZSZS5sZW5ndGgmJnZlLnB1c2goUmUpfXZlLnB1c2gobnVsbCl9KSxN''@;'; put 'put ''ZS5vbigiZGF0YSIsZnVuY3Rpb24oUmUpe1UoIndyYXBwZWQgZGF0YSIpLFhlLmRlY29kZXImJihSZT1YZS5kZWNvZGVyLndyaXRlKFJlKSksWGUub2JqZWN0TW9kZSYmbnVsbD09UmV8fCEoWGUub2JqZWN0TW9kZXx8UmUmJlJlLmxlbmd0aCl8fHZlLnB1c2goUmUpfHwoamU9ITAsTWUucGF1''@;'; put 'put ''c2UoKSl9KSxNZSl2b2lkIDA9PT10aGlzW0RlXSYmImZ1bmN0aW9uIj09dHlwZW9mIE1lW0RlXSYmKHRoaXNbRGVdPWZ1bmN0aW9uKFJlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWVbUmVdLmFwcGx5KE1lLGFyZ3VtZW50cyl9fShEZSkpO2Zvcih2YXIgRmU9MDtGZTxlZS5sZW5ndGg7''@;'; put 'put ''RmUrKylNZS5vbihlZVtGZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxlZVtGZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihSZSl7VSgid3JhcHBlZCBfcmVhZCIsUmUpLGplJiYoamU9ITEsTWUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUucHJvdG90eXBl''@;'; put 'put ''LCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksaWUuX2Zyb21MaXN0PWFlfSwyOTA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Qjt2YXIgST15''@;'; put 'put ''KDc0MDc1KSxfPU9iamVjdC5jcmVhdGUoeSgyNzYzNykpO2Z1bmN0aW9uIGcoRixPKXt2YXIgej10aGlzLl90cmFuc2Zvcm1TdGF0ZTt6LnRyYW5zZm9ybWluZz0hMTt2YXIgTj16LndyaXRlY2I7aWYoIU4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigid3JpdGUgY2FsbGJh''@;'; put 'put ''Y2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikpO3oud3JpdGVjaHVuaz1udWxsLHoud3JpdGVjYj1udWxsLG51bGwhPU8mJnRoaXMucHVzaChPKSxOKEYpO3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7TC5yZWFkaW5nPSExLChMLm5lZWRSZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJN''@;'; put 'put ''YXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIEIoRil7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKEYpO0kuY2FsbCh0aGlzLEYpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpnLmJpbmQodGhpcyksbmVlZFRyYW5zZm9y''@;'; put 'put ''bTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxGJiYoImZ1bmN0aW9uIj09dHlwZW9mIEYudHJhbnNm''@;'; put 'put ''b3JtJiYodGhpcy5fdHJhbnNmb3JtPUYudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRi5mbHVzaCYmKHRoaXMuX2ZsdXNoPUYuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHcpfWZ1bmN0aW9uIHcoKXt2YXIgRj10aGlzOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9mbHVzaD90''@;'; put 'put ''aGlzLl9mbHVzaChmdW5jdGlvbihPLHope1AoRixPLHopfSk6UCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gUChGLE8seil7aWYoTylyZXR1cm4gRi5lbWl0KCJlcnJvciIsTyk7aWYobnVsbCE9eiYmRi5wdXNoKHopLEYuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Q2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoRi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBGLnB1c2gobnVsbCl9''@;'; put 'put ''Xy5pbmhlcml0cz15KDcxOTkzKSxfLmluaGVyaXRzKEIsSSksQi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEYsTyl9LEIucHJvdG90eXBlLl90cmFuc2Zv''@;'; put 'put ''cm09ZnVuY3Rpb24oRixPLHope3Rocm93IG5ldyBFcnJvcigiX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oRixPLHope3ZhciBOPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKE4ud3JpdGVjYj16LE4ud3JpdGVjaHVuaz1GLE4u''@;'; put 'put ''d3JpdGVlbmNvZGluZz1PLCFOLnRyYW5zZm9ybWluZyl7dmFyIEw9dGhpcy5fcmVhZGFibGVTdGF0ZTsoTi5uZWVkVHJhbnNmb3JtfHxMLm5lZWRSZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfX0sQi5wcm90b3R5cGUuX3Jl''@;'; put 'put ''YWQ9ZnVuY3Rpb24oRil7dmFyIE89dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PU8ud3JpdGVjaHVuayYmTy53cml0ZWNiJiYhTy50cmFuc2Zvcm1pbmc/KE8udHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShPLndyaXRlY2h1bmssTy53cml0ZWVuY29kaW5nLE8uYWZ0ZXJUcmFu''@;'; put 'put ''c2Zvcm0pKTpPLm5lZWRUcmFuc2Zvcm09ITB9LEIucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEYsTyl7dmFyIHo9dGhpcztJLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsRixmdW5jdGlvbihOKXtPKE4pLHouZW1pdCgiY2xvc2UiKX0pfX0sNDc4NDk6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9eSg5NjU2KTtmdW5jdGlvbiBnKEUpe3ZhciBtPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGooRSxtLEEpe3ZhciBhZT1FLmVudHJ5O2ZvcihFLmVudHJ5PW51bGw7YWU7KXt2YXIgdGU9''@;'; put 'put ''YWUuY2FsbGJhY2s7bS5wZW5kaW5nY2ItLSx0ZShBKSxhZT1hZS5uZXh0fW0uY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9RX0obSxFKX19dWUuZXhwb3J0cz1lZTt2YXIgdyxCPSFwcm9jZXNzLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNl''@;'; put 'put ''KDAsNSkpPi0xP3NldEltbWVkaWF0ZTpJLm5leHRUaWNrO2VlLldyaXRhYmxlU3RhdGU9WTt2YXIgUD1PYmplY3QuY3JlYXRlKHkoMjc2MzcpKTtQLmluaGVyaXRzPXkoNzE5OTMpO3ZhciBxLEY9e2RlcHJlY2F0ZTp5KDMzOTgpfSxPPXkoMTgzNDIpLHo9eSgyNjU1KS5CdWZmZXIsTj0odHlw''@;'; put 'put ''ZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFU9eSgyMTUwOSk7ZnVuY3Rpb24gVygpe31mdW5jdGlvbiBZKEUsbSl7dz13fHx5KDc0MDc1KTt2YXIgQT1tIGluc3Rh''@;'; put 'put ''bmNlb2Ygdzt0aGlzLm9iamVjdE1vZGU9ISEoRT1FfHx7fSkub2JqZWN0TW9kZSxBJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFFLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIGFlPUUuaGlnaFdhdGVyTWFyayx0ZT1FLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhp''@;'; put 'put ''Z2hXYXRlck1hcms9YWV8fDA9PT1hZT9hZTpBJiYodGV8fDA9PT10ZSk/dGU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVu''@;'; put 'put ''ZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1FLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPUUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihVZSl7IWZ1bmN0aW9uIFNlKEUsbSl7dmFyIEE9RS5fd3JpdGFibGVTdGF0ZSxhZT1BLnN5bmMsdGU9QS53cml0ZWNiO2lmKGZ1bmN0aW9u''@;'; put 'put ''IFRlKEUpe0Uud3JpdGluZz0hMSxFLndyaXRlY2I9bnVsbCxFLmxlbmd0aC09RS53cml0ZWxlbixFLndyaXRlbGVuPTB9KEEpLG0pIWZ1bmN0aW9uIF9lKEUsbSxBLGFlLHRlKXstLW0ucGVuZGluZ2NiLEE/KEkubmV4dFRpY2sodGUsYWUpLEkubmV4dFRpY2soVCxFLG0pLEUuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZXJyb3JFbWl0dGVkPSEwLEUuZW1pdCgiZXJyb3IiLGFlKSk6KHRlKGFlKSxFLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxFLmVtaXQoImVycm9yIixhZSksVChFLG0pKX0oRSxBLGFlLG0sdGUpO2Vsc2V7dmFyIHNlPWIoQSk7IXNlJiYhQS5jb3JrZWQmJiFBLmJ1ZmZl''@;'; put 'put ''clByb2Nlc3NpbmcmJkEuYnVmZmVyZWRSZXF1ZXN0JiZwKEUsQSksYWU/Qih6ZSxFLEEsc2UsdGUpOnplKEUsQSxzZSx0ZSl9fShtLFVlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0''@;'; put 'put ''PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh0aGlzKX1mdW5jdGlvbiBlZShFKXtpZih3PXd8fHkoNzQwNzUpLCEocS5j''@;'; put 'put ''YWxsKGVlLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyBlZShFKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBZKEUsdGhpcyksdGhpcy53cml0YWJsZT0hMCxFJiYoImZ1bmN0aW9uIj09dHlwZW9mIEUud3JpdGUmJih0aGlzLl93cml0ZT1FLndyaXRlKSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgRS53cml0ZXYmJih0aGlzLl93cml0ZXY9RS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIEUuZmluYWwmJih0aGlzLl9maW5hbD1FLmZpbmFsKSksTy5jYWxsKHRoaXMpfWZ1''@;'; put 'put ''bmN0aW9uIG1lKEUsbSxBLGFlLHRlLHNlLHdlKXttLndyaXRlbGVuPWFlLG0ud3JpdGVjYj13ZSxtLndyaXRpbmc9ITAsbS5zeW5jPSEwLEE/RS5fd3JpdGV2KHRlLG0ub253cml0ZSk6RS5fd3JpdGUodGUsc2UsbS5vbndyaXRlKSxtLnN5bmM9ITF9ZnVuY3Rpb24gemUoRSxtLEEsYWUpe0F8''@;'; put 'put ''fGZ1bmN0aW9uIFYoRSxtKXswPT09bS5sZW5ndGgmJm0ubmVlZERyYWluJiYobS5uZWVkRHJhaW49ITEsRS5lbWl0KCJkcmFpbiIpKX0oRSxtKSxtLnBlbmRpbmdjYi0tLGFlKCksVChFLG0pfWZ1bmN0aW9uIHAoRSxtKXttLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIEE9bS5idWZmZXJlZFJl''@;'; put 'put ''cXVlc3Q7aWYoRS5fd3JpdGV2JiZBJiZBLm5leHQpe3ZhciB0ZT1uZXcgQXJyYXkobS5idWZmZXJlZFJlcXVlc3RDb3VudCksc2U9bS5jb3JrZWRSZXF1ZXN0c0ZyZWU7c2UuZW50cnk9QTtmb3IodmFyIHdlPTAsVWU9ITA7QTspdGVbd2VdPUEsQS5pc0J1Znx8KFVlPSExKSxBPUEubmV4dCx3''@;'; put 'put ''ZSs9MTt0ZS5hbGxCdWZmZXJzPVVlLG1lKEUsbSwhMCxtLmxlbmd0aCx0ZSwiIixzZS5maW5pc2gpLG0ucGVuZGluZ2NiKyssbS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsc2UubmV4dD8obS5jb3JrZWRSZXF1ZXN0c0ZyZWU9c2UubmV4dCxzZS5uZXh0PW51bGwpOm0uY29ya2VkUmVxdWVz''@;'; put 'put ''dHNGcmVlPW5ldyBnKG0pLG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7QTspe3ZhciBKZT1BLmNodW5rO2lmKG1lKEUsbSwhMSxtLm9iamVjdE1vZGU/MTpKZS5sZW5ndGgsSmUsQS5lbmNvZGluZyxBLmNhbGxiYWNrKSxBPUEubmV4dCxtLmJ1ZmZlcmVkUmVxdWVzdENvdW50''@;'; put 'put ''LS0sbS53cml0aW5nKWJyZWFrfW51bGw9PT1BJiYobS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfW0uYnVmZmVyZWRSZXF1ZXN0PUEsbS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIEUuZW5kaW5nJiYwPT09RS5sZW5ndGgmJm51bGw9PT1FLmJ1ZmZlcmVkUmVx''@;'; put 'put ''dWVzdCYmIUUuZmluaXNoZWQmJiFFLndyaXRpbmd9ZnVuY3Rpb24geChFLG0pe0UuX2ZpbmFsKGZ1bmN0aW9uKEEpe20ucGVuZGluZ2NiLS0sQSYmRS5lbWl0KCJlcnJvciIsQSksbS5wcmVmaW5pc2hlZD0hMCxFLmVtaXQoInByZWZpbmlzaCIpLFQoRSxtKX0pfWZ1bmN0aW9uIFQoRSxtKXt2''@;'; put 'put ''YXIgQT1iKG0pO3JldHVybiBBJiYoZnVuY3Rpb24gQyhFLG0peyFtLnByZWZpbmlzaGVkJiYhbS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBFLl9maW5hbD8obS5wZW5kaW5nY2IrKyxtLmZpbmFsQ2FsbGVkPSEwLEkubmV4dFRpY2soeCxFLG0pKToobS5wcmVmaW5pc2hlZD0h''@;'; put 'put ''MCxFLmVtaXQoInByZWZpbmlzaCIpKSl9KEUsbSksMD09PW0ucGVuZGluZ2NiJiYobS5maW5pc2hlZD0hMCxFLmVtaXQoImZpbmlzaCIpKSksQX1QLmluaGVyaXRzKGVlLE8pLFkucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgbT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxB''@;'; put 'put ''PVtdO207KUEucHVzaChtKSxtPW0ubmV4dDtyZXR1cm4gQX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFkucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Ri5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1''@;'; put 'put ''ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5''@;'; put 'put ''cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8ocT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihFKXtyZXR1cm4hIXEuY2FsbCh0aGlzLEUpfHx0aGlzPT09ZWUmJkUm''@;'; put 'put ''JkUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBZfX0pKTpxPWZ1bmN0aW9uKEUpe3JldHVybiBFIGluc3RhbmNlb2YgdGhpc30sZWUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LGVl''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihFLG0sQSl7dmFyIGFlPXRoaXMuX3dyaXRhYmxlU3RhdGUsdGU9ITEsc2U9IWFlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIEsoRSl7cmV0dXJuIHouaXNCdWZmZXIoRSl8fEUgaW5zdGFuY2VvZiBOfShFKTtyZXR1cm4gc2UmJiF6LmlzQnVmZmVyKEUp''@;'; put 'put ''JiYoRT1mdW5jdGlvbiBMKEUpe3JldHVybiB6LmZyb20oRSl9KEUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9bSxtPW51bGwpLHNlP209ImJ1ZmZlciI6bXx8KG09YWUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgQSYmKEE9VyksYWUuZW5kZWQ/ZnVuY3Rpb24gSihF''@;'; put 'put ''LG0pe3ZhciBBPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5kIik7RS5lbWl0KCJlcnJvciIsQSksSS5uZXh0VGljayhtLEEpfSh0aGlzLEEpOihzZXx8ZnVuY3Rpb24gbmUoRSxtLEEsYWUpe3ZhciB0ZT0hMCxzZT0hMTtyZXR1cm4gbnVsbD09PUE/c2U9bmV3IFR5cGVFcnJvcigiTWF5IG5v''@;'; put 'put ''dCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIEEmJnZvaWQgMCE9PUEmJiFtLm9iamVjdE1vZGUmJihzZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHNlJiYoRS5lbWl0KCJlcnJvciIsc2UpLEkubmV4dFRp''@;'; put 'put ''Y2soYWUsc2UpLHRlPSExKSx0ZX0odGhpcyxhZSxFLEEpKSYmKGFlLnBlbmRpbmdjYisrLHRlPWZ1bmN0aW9uIGxlKEUsbSxBLGFlLHRlLHNlKXtpZighQSl7dmFyIHdlPWZ1bmN0aW9uIGllKEUsbSxBKXtyZXR1cm4hRS5vYmplY3RNb2RlJiYhMSE9PUUuZGVjb2RlU3RyaW5ncyYmInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBtJiYobT16LmZyb20obSxBKSksbX0obSxhZSx0ZSk7YWUhPT13ZSYmKEE9ITAsdGU9ImJ1ZmZlciIsYWU9d2UpfXZhciBVZT1tLm9iamVjdE1vZGU/MTphZS5sZW5ndGg7bS5sZW5ndGgrPVVlO3ZhciBKZT1tLmxlbmd0aDxtLmhpZ2hXYXRlck1hcms7aWYoSmV8fChtLm5l''@;'; put 'put ''ZWREcmFpbj0hMCksbS53cml0aW5nfHxtLmNvcmtlZCl7dmFyIG90PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDttLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOmFlLGVuY29kaW5nOnRlLGlzQnVmOkEsY2FsbGJhY2s6c2UsbmV4dDpudWxsfSxvdD9vdC5uZXh0PW0ubGFzdEJ1ZmZlcmVkUmVx''@;'; put 'put ''dWVzdDptLmJ1ZmZlcmVkUmVxdWVzdD1tLmxhc3RCdWZmZXJlZFJlcXVlc3QsbS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIG1lKEUsbSwhMSxVZSxhZSx0ZSxzZSk7cmV0dXJuIEplfSh0aGlzLGFlLHNlLEUsbSxBKSksdGV9LGVlLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sZWUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBFPXRoaXMuX3dyaXRhYmxlU3RhdGU7RS5jb3JrZWQmJihFLmNvcmtlZC0tLCFFLndyaXRpbmcmJiFFLmNvcmtlZCYmIUUuYnVmZmVyUHJvY2Vzc2luZyYmRS5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3QmJnAodGhpcyxFKSl9LGVlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24obSl7aWYoInN0cmluZyI9PXR5cGVvZiBtJiYobT1tLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3Mt''@;'; put 'put ''MiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKG0rIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK20pO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1tLHRoaXN9LE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShlZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxlZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEUsbSxBKXtB''@;'; put 'put ''KG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxlZS5wcm90b3R5cGUuX3dyaXRldj1udWxsLGVlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oRSxtLEEpe3ZhciBhZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBFPyhBPUUsRT1udWxsLG09''@;'; put 'put ''bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIG0mJihBPW0sbT1udWxsKSxudWxsIT1FJiZ0aGlzLndyaXRlKEUsbSksYWUuY29ya2VkJiYoYWUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksYWUuZW5kaW5nfHxmdW5jdGlvbiBIKEUsbSxBKXttLmVuZGluZz0hMCxUKEUsbSksQSYmKG0uZmluaXNo''@;'; put 'put ''ZWQ/SS5uZXh0VGljayhBKTpFLm9uY2UoImZpbmlzaCIsQSkpLG0uZW5kZWQ9ITAsRS53cml0YWJsZT0hMX0odGhpcyxhZSxBKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oRSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUUpfX0pLGVlLnByb3RvdHlwZS5kZXN0cm95PVUuZGVzdHJveSxlZS5wcm90b3R5cGUuX3VuZGVz''@;'; put 'put ''dHJveT1VLnVuZGVzdHJveSxlZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRSxtKXt0aGlzLmVuZCgpLG0oRSl9fSwyNzgwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz15KDI2NTUpLkJ1ZmZlcixnPXkoMTUzNDApO2Z1bmN0aW9uIEIodyxQLEYpe3cuY29weShQLEYpfXVl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KCl7KGZ1bmN0aW9uIEkodyxQKXtpZighKHcgaW5zdGFuY2VvZiBQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsdyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51''@;'; put 'put ''bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1POnRoaXMuaGVhZD1PLHRoaXMudGFpbD1PLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnVuc2hp''@;'; put 'put ''ZnQ9ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPU8pLHRoaXMuaGVhZD1PLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgRj10aGlzLmhl''@;'; put 'put ''YWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLEZ9fSx3LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5qb2luPWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIE89dGhpcy5oZWFkLHo9IiIrTy5kYXRhO089Ty5uZXh0Oyl6Kz1GK08uZGF0YTtyZXR1cm4gen0sdy5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gXy5hbGxvYygwKTtmb3IodmFyIE89Xy5hbGxvY1Vuc2FmZShGPj4+MCksej10aGlzLmhlYWQsTj0wO3o7KUIoei5kYXRhLE8sTiksTis9ei5kYXRhLmxlbmd0aCx6PXoubmV4dDtyZXR1cm4gT30sd30oKSxnJiZnLmluc3BlY3QmJmcuaW5zcGVjdC5jdXN0b20mJih1ZS5leHBvcnRz''@;'; put 'put ''LnByb3RvdHlwZVtnLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciB3PWcuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrd30pfSwyMTUwOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk2NTYpO2Z1bmN0''@;'; put 'put ''aW9uIEIodyxQKXt3LmVtaXQoImVycm9yIixQKX11ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQix0aGlzLHcpKTpJLm5leHRUaWNrKEIsdGhpcyx3''@;'; put 'put ''KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQixGLE4pKTpJLm5leHRUaWNrKEIsRixOKTpQJiZQKE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBnKCl7dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDE4MzQyOih1ZSxYLHkpPT57dWUuZXhwb3J0cz15KDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDI2NTU6KHVlLFgseSk9Pnt2YXIgST15KDgzODM4KSxfPUkuQnVmZmVyO2Z1bmN0''@;'; put 'put ''aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEksWCksWC5CdWZmZXI9QiksZyhfLEIpLEIuZnJv''@;'; put 'put ''bT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJl''@;'; put 'put ''ciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw1OTQyOih1ZSxYLHkpPT57KFg9dWUuZXhwb3J0cz15KDE5NjA5KSkuU3RyZWFtPVgsWC5SZWFkYWJsZT1YLFguV3JpdGFibGU9eSg0Nzg0OSksWC5EdXBsZXg9eSg3NDA3NSksWC5UcmFuc2Zvcm09eSgyOTA5KSxYLlBhc3NUaHJvdWdoPXko''@;'; put 'put ''MTg4MjMpfSwzNjYzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDgzODM4KS5CdWZmZXIsXz15KDcxOTkzKSxnPXkoMTM2ODYpLEI9bmV3IEFycmF5KDE2KSx3PVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDks''@;'; put 'put ''NSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFA9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMs''@;'; put 'put ''MTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sRj1bMTEsMTQs''@;'; put 'put ''MTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2''@;'; put 'put ''LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sTz1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0''@;'; put 'put ''LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sej1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxOPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3''@;'; put 'put ''LDBdO2Z1bmN0aW9uIEwoKXtnLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIEsoSixuZSl7cmV0dXJuIEo8PG5lfEo+Pj4zMi1u''@;'; put 'put ''ZX1mdW5jdGlvbiBVKEosbmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKG5lXmllXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIFcoSixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmUmaWV8fm5lJmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIFko''@;'; put 'put ''SixuZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisoKG5lfH5pZSlebGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gcShKLG5lLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhuZSZsZXxpZSZ+bGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gZWUoSixuZSxpZSxs''@;'; put 'put ''ZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisobmVeKGllfH5sZSkpK19lK1RlfDAsU2UpK21lfDB9XyhMLGcpLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEo9QixuZT0wO25lPDE2OysrbmUpSltuZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpuZSk7Zm9yKHZh''@;'; put 'put ''ciBpZT0wfHRoaXMuX2EsbGU9MHx0aGlzLl9iLG1lPTB8dGhpcy5fYyxfZT0wfHRoaXMuX2QsVGU9MHx0aGlzLl9lLFNlPTB8dGhpcy5fYSx6ZT0wfHRoaXMuX2IsVj0wfHRoaXMuX2MscD0wfHRoaXMuX2QsYj0wfHRoaXMuX2UseD0wO3g8ODA7eCs9MSl7dmFyIEMsVDt4PDE2PyhDPVUoaWUs''@;'; put 'put ''bGUsbWUsX2UsVGUsSlt3W3hdXSx6WzBdLEZbeF0pLFQ9ZWUoU2UsemUsVixwLGIsSltQW3hdXSxOWzBdLE9beF0pKTp4PDMyPyhDPVcoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzFdLEZbeF0pLFQ9cShTZSx6ZSxWLHAsYixKW1BbeF1dLE5bMV0sT1t4XSkpOng8NDg/KEM9WShpZSxsZSxt''@;'; put 'put ''ZSxfZSxUZSxKW3dbeF1dLHpbMl0sRlt4XSksVD1ZKFNlLHplLFYscCxiLEpbUFt4XV0sTlsyXSxPW3hdKSk6eDw2ND8oQz1xKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selszXSxGW3hdKSxUPVcoU2UsemUsVixwLGIsSltQW3hdXSxOWzNdLE9beF0pKTooQz1lZShpZSxsZSxtZSxfZSxUZSxK''@;'; put 'put ''W3dbeF1dLHpbNF0sRlt4XSksVD1VKFNlLHplLFYscCxiLEpbUFt4XV0sTls0XSxPW3hdKSksaWU9VGUsVGU9X2UsX2U9SyhtZSwxMCksbWU9bGUsbGU9QyxTZT1iLGI9cCxwPUsoViwxMCksVj16ZSx6ZT1UfXZhciBIPXRoaXMuX2IrbWUrcHwwO3RoaXMuX2I9dGhpcy5fYytfZStifDAsdGhp''@;'; put 'put ''cy5fYz10aGlzLl9kK1RlK1NlfDAsdGhpcy5fZD10aGlzLl9lK2llK3plfDAsdGhpcy5fZT10aGlzLl9hK2xlK1Z8MCx0aGlzLl9hPUh9LEwucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+''@;'; put 'put ''NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0s''@;'; put 'put ''NTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgSj1JLmFsbG9jP0kuYWxsb2MoMjApOm5ldyBJKDIwKTtyZXR1cm4gSi53cml0ZUludDMyTEUodGhpcy5fYSwwKSxKLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEoud3Jp''@;'; put 'put ''dGVJbnQzMkxFKHRoaXMuX2MsOCksSi53cml0ZUludDMyTEUodGhpcy5fZCwxMiksSi53cml0ZUludDMyTEUodGhpcy5fZSwxNiksSn0sdWUuZXhwb3J0cz1MfSwyNzA1NDoodWUsWCx5KT0+e3ZhciBJPXkoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3''@;'; put 'put ''KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxYKSxYLkJ1ZmZlcj1CKSxCLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8ucHJvdG90eXBl''@;'; put 'put ''KSxnKF8sQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBl''@;'; put 'put ''b2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lm''@;'; put 'put ''KCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBt''@;'; put 'put ''dXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDkzODA3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9eSg4MzgzOCksXz1JLkJ1ZmZlcixnPXt9O2ZvcihCIGluIEkpSS5oYXNPd25Qcm9wZXJ0eShCKSYmKCJTbG93QnVmZmVyIj09PUJ8fCJCdWZmZXIi''@;'; put 'put ''PT09Qnx8KGdbQl09SVtCXSkpO3ZhciB3PWcuQnVmZmVyPXt9O2ZvcihCIGluIF8pXy5oYXNPd25Qcm9wZXJ0eShCKSYmKCJhbGxvY1Vuc2FmZSI9PT1CfHwiYWxsb2NVbnNhZmVTbG93Ij09PUJ8fCh3W0JdPV9bQl0pKTtpZihnLkJ1ZmZlci5wcm90b3R5cGU9Xy5wcm90b3R5cGUsKCF3LmZy''@;'; put 'put ''b218fHcuZnJvbT09PVVpbnQ4QXJyYXkuZnJvbSkmJih3LmZyb209ZnVuY3Rpb24oUCxGLE8pe2lmKCJudW1iZXIiPT10eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5''@;'; put 'put ''cGVvZiBQKTtpZihQJiZ0eXBlb2YgUC5sZW5ndGg+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBl''@;'; put 'put ''ICIrdHlwZW9mIFApO3JldHVybiBfKFAsRixPKX0pLHcuYWxsb2N8fCh3LmFsbG9jPWZ1bmN0aW9uKFAsRixPKXtpZigibnVtYmVyIiE9dHlwZW9mIFApdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBl''@;'; put 'put ''ICcrdHlwZW9mIFApO2lmKFA8MHx8UD49MiooMTw8MzApKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrUCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIHo9XyhQKTtyZXR1cm4gRiYmMCE9PUYubGVuZ3RoPyJzdHJpbmciPT10eXBlb2YgTz96LmZpbGwo''@;'; put 'put ''RixPKTp6LmZpbGwoRik6ei5maWxsKDApLHp9KSwhZy5rU3RyaW5nTWF4TGVuZ3RoKXRyeXtnLmtTdHJpbmdNYXhMZW5ndGg9cHJvY2Vzcy5iaW5kaW5nKCJidWZmZXIiKS5rU3RyaW5nTWF4TGVuZ3RofWNhdGNoe31nLmNvbnN0YW50c3x8KGcuY29uc3RhbnRzPXtNQVhfTEVOR1RIOmcua01h''@;'; put 'put ''eExlbmd0aH0sZy5rU3RyaW5nTWF4TGVuZ3RoJiYoZy5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9Zy5rU3RyaW5nTWF4TGVuZ3RoKSksdWUuZXhwb3J0cz1nfSw5ODA4MzoodWUsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7IWZ1bmN0aW9uKCl7dmFyIF89WHx8e307dm9pZCAwIT09KEk9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gX30uYXBwbHkoWCxbXSkpJiYodWUuZXhwb3J0cz1JKSxfLmRlZmF1bHQ9Xzt2YXIgZz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixGPS91cmxcKFsiJ10/KC4rPylbIiddP1wpLyxPPXt3b2Zm''@;'; put 'put ''MjoiZm9udC93b2ZmMiIsd29mZjoiZm9udC93b2ZmIixvdGY6ImFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSIsdHRmOiJhcHBsaWNhdGlvbi94LWZvbnQtdHRmIixlb3Q6ImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IixzZm50OiJhcHBsaWNhdGlvbi9mb250LXNmbnQiLHN2Zzoi''@;'; put 'put ''aW1hZ2Uvc3ZnK3htbCJ9LHo9ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8YiBpbnN0YW5jZW9mIFNWR0VsZW1lbnR9LE49ZnVuY3Rpb24oYil7aWYoIXooYikpdGhyb3cgbmV3IEVycm9yKCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVp''@;'; put 'put ''cmVkOyBnb3QgIitiKX0sTD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeCxDKXt6KGIpP3goYik6QyhuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK2IpKX0pfSxVPWZ1bmN0aW9uKGIpe3ZhciB4PU9iamVj''@;'; put 'put ''dC5rZXlzKE8pLmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gYi5pbmRleE9mKCIuIitDKT4wfSkubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBPW0NdfSk7cmV0dXJuIHg/eFswXTooY29uc29sZS5lcnJvcigiVW5rbm93biBmb250IGZvcm1hdCBmb3IgIitiKyIuIEZvbnRzIG1heSBub3QgYmUg''@;'; put 'put ''d29ya2luZyBjb3JyZWN0bHkuIiksImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpfSxZPWZ1bmN0aW9uKGIseCxDKXt2YXIgVD1iLnZpZXdCb3gmJmIudmlld0JveC5iYXNlVmFsJiZiLnZpZXdCb3guYmFzZVZhbFtDXXx8bnVsbCE9PXguZ2V0QXR0cmlidXRlKEMpJiYheC5nZXRBdHRyaWJ1''@;'; put 'put ''dGUoQykubWF0Y2goLyUkLykmJnBhcnNlSW50KHguZ2V0QXR0cmlidXRlKEMpKXx8Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtDXXx8cGFyc2VJbnQoeC5zdHlsZVtDXSl8fHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGIpLmdldFByb3BlcnR5VmFsdWUoQykpO3JldHVybiB0''@;'; put 'put ''eXBlb2YgVD4idSJ8fG51bGw9PT1UfHxpc05hTihwYXJzZUZsb2F0KFQpKT8wOlR9LEo9ZnVuY3Rpb24oYil7Zm9yKHZhciB4PXdpbmRvdy5hdG9iKGIuc3BsaXQoIiwiKVsxXSksQz1iLnNwbGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLFQ9bmV3IEFycmF5QnVmZmVy''@;'; put 'put ''KHgubGVuZ3RoKSxIPW5ldyBVaW50OEFycmF5KFQpLGo9MDtqPHgubGVuZ3RoO2orKylIW2pdPXguY2hhckNvZGVBdChqKTtyZXR1cm4gbmV3IEJsb2IoW1RdLHt0eXBlOkN9KX0sbWU9e30sVGU9bnVsbCx6ZT1mdW5jdGlvbihiLHgpe3ZhciBDPXh8fHt9LFQ9Qy5zZWxlY3RvclJlbWFwLEg9''@;'; put 'put ''Qy5tb2RpZnlTdHlsZSxFPUMuZm9udHMsbT1DLmV4Y2x1ZGVVbnVzZWRDc3MsQT1DLm1vZGlmeUNzc3x8ZnVuY3Rpb24od2UsVWUpe3JldHVybihUP1Qod2UpOndlKSsieyIrKEg/SChVZSk6VWUpKyJ9XG4ifSxhZT1bXSx0ZT10eXBlb2YgRT4idSIsc2U9RXx8W107cmV0dXJuKFRlfHwoVGU9''@;'; put 'put ''QXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0cykubWFwKGZ1bmN0aW9uKGIpe3RyeXtyZXR1cm57cnVsZXM6Yi5jc3NSdWxlcyxocmVmOmIuaHJlZn19Y2F0Y2goeCl7cmV0dXJuIGNvbnNvbGUud2FybigiU3R5bGVzaGVldCBjb3VsZCBub3QgYmUgbG9hZGVkOiAiK2IuaHJlZix4KSx7''@;'; put 'put ''fX19KSkpLmZvckVhY2goZnVuY3Rpb24od2Upe3ZhciBVZT13ZS5ydWxlcyxKZT13ZS5ocmVmO1VlJiZBcnJheS5mcm9tKFVlKS5mb3JFYWNoKGZ1bmN0aW9uKG90KXtpZih0eXBlb2Ygb3Quc3R5bGU8InUiKWlmKGZ1bmN0aW9uKGIseCl7aWYoeCl0cnl7cmV0dXJuIGIucXVlcnlTZWxlY3Rv''@;'; put 'put ''cih4KXx8Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucXVlcnlTZWxlY3Rvcih4KX1jYXRjaChDKXtjb25zb2xlLndhcm4oJ0ludmFsaWQgQ1NTIHNlbGVjdG9yICInK3grJyInLEMpfX0oYixvdC5zZWxlY3RvclRleHQpKWFlLnB1c2goQShvdC5zZWxlY3RvclRleHQsb3Quc3R5bGUuY3Nz''@;'; put 'put ''VGV4dCkpO2Vsc2UgaWYodGUmJm90LmNzc1RleHQubWF0Y2goL15AZm9udC1mYWNlLykpe3ZhciBNZT1mdW5jdGlvbihiLHgpe3ZhciBDPWIuY3NzVGV4dC5tYXRjaChGKSxUPUMmJkNbMV18fCIiO2lmKFQmJiFULm1hdGNoKC9eZGF0YTovKSYmImFib3V0OmJsYW5rIiE9PVQpe3ZhciBIPVQu''@;'; put 'put ''c3RhcnRzV2l0aCgiLi4vIik/eCsiLy4uLyIrVDpULnN0YXJ0c1dpdGgoIi4vIik/eCsiLy4iK1Q6VDtyZXR1cm57dGV4dDpiLmNzc1RleHQsZm9ybWF0OlUoSCksdXJsOkh9fX0ob3QsSmUpO01lJiZzZS5wdXNoKE1lKX1lbHNlIG18fGFlLnB1c2gob3QuY3NzVGV4dCl9KX0pLGZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiBQcm9taXNlLmFsbChiLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oQyxUKXtpZihtZVt4LnVybF0pcmV0dXJuIEMobWVbeC51cmxdKTt2YXIgSD1uZXcgWE1MSHR0cFJlcXVlc3Q7SC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBqPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD0iIixDPW5ldyBVaW50OEFycmF5KGIpLFQ9MDtUPEMuYnl0ZUxlbmd0aDtUKyspeCs9U3RyaW5nLmZyb21DaGFyQ29kZShDW1RdKTtyZXR1cm4gd2luZG93LmJ0b2EoeCl9KEgucmVzcG9uc2UpLEU9eC50ZXh0LnJlcGxhY2UoRiwndXJs''@;'; put 'put ''KCJkYXRhOicreC5mb3JtYXQrIjtiYXNlNjQsIitqKyciKScpKyJcbiI7bWVbeC51cmxdPUUsQyhFKX0pLEguYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGope2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgZm9udCBmcm9tOiAiK3gudXJsLGopLG1lW3gudXJsXT1udWxs''@;'; put 'put ''LEMobnVsbCl9KSxILmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmdW5jdGlvbihqKXtjb25zb2xlLndhcm4oIkFib3J0ZWQgbG9hZGluZyBmb250IGZyb206ICIreC51cmwsaiksQyhudWxsKX0pLEgub3BlbigiR0VUIix4LnVybCksSC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixILnNl''@;'; put 'put ''bmQoKX0pfSkpLnRoZW4oZnVuY3Rpb24oeCl7cmV0dXJuIHguZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBDfSkuam9pbigiIil9KX0oc2UpLnRoZW4oZnVuY3Rpb24od2Upe3JldHVybiBhZS5qb2luKCJcbiIpK3dlfSl9LFY9ZnVuY3Rpb24oKXtpZighbmF2aWdhdG9yLm1zU2F2ZU9yT3Bl''@;'; put 'put ''bkJsb2ImJiEoImRvd25sb2FkImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkpcmV0dXJue3BvcHVwOndpbmRvdy5vcGVuKCl9fTtfLnByZXBhcmVTdmc9ZnVuY3Rpb24ocCxiLHgpe04ocCk7dmFyIEM9Ynx8e30sVD1DLmxlZnQsSD12b2lkIDA9PT1UPzA6VCxqPUMudG9wLEU9dm9p''@;'; put 'put ''ZCAwPT09aj8wOmosbT1DLndpZHRoLEE9Qy5oZWlnaHQsYWU9Qy5zY2FsZSx0ZT12b2lkIDA9PT1hZT8xOmFlLHNlPUMucmVzcG9uc2l2ZSx3ZT12b2lkIDAhPT1zZSYmc2UsVWU9Qy5leGNsdWRlQ3NzLEplPXZvaWQgMCE9PVVlJiZVZTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIFByb21p''@;'; put 'put ''c2UuYWxsKEFycmF5LmZyb20oYi5xdWVyeVNlbGVjdG9yQWxsKCJpbWFnZSIpKS5tYXAoZnVuY3Rpb24oeCl7dmFyIEM9eC5nZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhyZWYiKXx8eC5nZXRBdHRyaWJ1dGUoImhyZWYiKTtyZXR1cm4gQz8oZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIGImJjA9PT1iLmxhc3RJbmRleE9mKCJodHRwIiwwKSYmLTE9PT1iLmxhc3RJbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0KX0oQykmJihDKz0oLTE9PT1DLmluZGV4T2YoIj8iKT8iPyI6IiYiKSsidD0iKyhuZXcgRGF0ZSkudmFsdWVPZigpKSxuZXcgUHJvbWlzZShm''@;'; put 'put ''dW5jdGlvbihULEgpe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLEU9bmV3IEltYWdlO0UuY3Jvc3NPcmlnaW49ImFub255bW91cyIsRS5zcmM9QyxFLm9uZXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gSChuZXcgRXJyb3IoIkNvdWxkIG5vdCBsb2FkICIrQykpfSxFLm9u''@;'; put 'put ''bG9hZD1mdW5jdGlvbigpe2oud2lkdGg9RS53aWR0aCxqLmhlaWdodD1FLmhlaWdodCxqLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwKSx4LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwiaHJlZiIsai50b0RhdGFVUkwoImltYWdlL3BuZyIp''@;'; put 'put ''KSxUKCEwKX19KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSkpfShwKS50aGVuKGZ1bmN0aW9uKCl7dmFyIG90PXAuY2xvbmVOb2RlKCEwKTtvdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9KGJ8fHt9KS5iYWNrZ3JvdW5kQ29sb3J8fHAuc3R5bGUuYmFja2dyb3VuZENvbG9yO3ZhciBNZT1mdW5j''@;'; put 'put ''dGlvbihiLHgsQyxUKXtpZigic3ZnIj09PWIudGFnTmFtZSlyZXR1cm57d2lkdGg6Q3x8WShiLHgsIndpZHRoIiksaGVpZ2h0OlR8fFkoYix4LCJoZWlnaHQiKX07aWYoYi5nZXRCQm94KXt2YXIgSD1iLmdldEJCb3goKTtyZXR1cm57d2lkdGg6SC54K0gud2lkdGgsaGVpZ2h0OkgueStILmhl''@;'; put 'put ''aWdodH19fShwLG90LG0sQSksdmU9TWUud2lkdGgsWGU9TWUuaGVpZ2h0O2lmKCJzdmciIT09cC50YWdOYW1lKXtpZighcC5nZXRCQm94KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIkF0dGVtcHRlZCB0byByZW5kZXIgbm9uLVNWRyBlbGVtZW50IixwKTtudWxsIT1vdC5nZXRBdHRyaWJ1''@;'; put 'put ''dGUoInRyYW5zZm9ybSIpJiZvdC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsb3QuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKS5yZXBsYWNlKC90cmFuc2xhdGVcKC4qP1wpLywiIikpO3ZhciBqZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn''@;'; put 'put ''Iiwic3ZnIik7amUuYXBwZW5kQ2hpbGQob3QpLG90PWplfWlmKG90LnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsIjEuMSIpLG90LnNldEF0dHJpYnV0ZSgidmlld0JveCIsW0gsRSx2ZSxYZV0uam9pbigiICIpKSxvdC5nZXRBdHRyaWJ1dGUoInhtbG5zIil8fG90LnNldEF0dHJpYnV0ZU5TKGcs''@;'; put 'put ''InhtbG5zIix3KSxvdC5nZXRBdHRyaWJ1dGUoInhtbG5zOnhsaW5rIil8fG90LnNldEF0dHJpYnV0ZU5TKGcsInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLHdlPyhvdC5yZW1vdmVBdHRyaWJ1dGUoIndpZHRoIiksb3QucmVtb3ZlQXR0cmlidXRlKCJoZWln''@;'; put 'put ''aHQiKSxvdC5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0IikpOihvdC5zZXRBdHRyaWJ1dGUoIndpZHRoIix2ZSp0ZSksb3Quc2V0QXR0cmlidXRlKCJoZWlnaHQiLFhlKnRlKSksQXJyYXkuZnJvbShvdC5xdWVyeVNlbGVjdG9yQWxsKCJmb3JlaWdu''@;'; put 'put ''T2JqZWN0ID4gKiIpKS5mb3JFYWNoKGZ1bmN0aW9uKFJlKXtSZS5zZXRBdHRyaWJ1dGVOUyhnLCJ4bWxucyIsInN2ZyI9PT1SZS50YWdOYW1lP3c6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKX0pLCFKZSlyZXR1cm4gemUocCxiKS50aGVuKGZ1bmN0aW9uKFJlKXt2YXIgSWU9ZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtJZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLEllLmlubmVySFRNTD0iPCFbQ0RBVEFbXG4iK1JlKyJcbl1dPiI7dmFyIFZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZnMiKTtWZS5hcHBlbmRDaGlsZChJZSksb3QuaW5z''@;'; put 'put ''ZXJ0QmVmb3JlKFZlLG90LmZpcnN0Q2hpbGQpO3ZhciBrZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrZS5hcHBlbmRDaGlsZChvdCk7dmFyIEFlPWtlLmlubmVySFRNTC5yZXBsYWNlKC9OU1xkKzpocmVmL2dpLCd4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94''@;'; put 'put ''bGluayIgeGxpbms6aHJlZicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4KXJldHVybntzcmM6QWUsd2lkdGg6dmUsaGVpZ2h0OlhlfTt4KEFlLHZlLFhlKX0pO3ZhciBEZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtEZS5hcHBlbmRDaGlsZChvdCk7dmFyIEZlPURlLmlubmVySFRN''@;'; put 'put ''TDtpZigiZnVuY3Rpb24iIT10eXBlb2YgeClyZXR1cm57c3JjOkZlLHdpZHRoOnZlLGhlaWdodDpYZX07eChGZSx2ZSxYZSl9KX0sXy5zdmdBc0RhdGFVcmk9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBOKHApLF8ucHJlcGFyZVN2ZyhwLGIpLnRoZW4oZnVuY3Rpb24oQyl7dmFyIEg9Qy53aWR0''@;'; put 'put ''aCxqPUMuaGVpZ2h0LEU9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsIit3aW5kb3cuYnRvYShmdW5jdGlvbihiKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChiKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLGZ1bmN0aW9uKHgsQyl7dmFyIFQ9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSgiMHgiK0MpO3JldHVybiIlIj09PVQ/IiUyNSI6VH0pKX0oJzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9T''@;'; put 'put ''VkcvMS4xL0RURC9zdmcxMS5kdGQiIFs8IUVOVElUWSBuYnNwICImIzE2MDsiPl0+JytDLnNyYykpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4KEUsSCxqKSxFfSl9LF8uc3ZnQXNQbmdVcmk9ZnVuY3Rpb24ocCxiLHgpe04ocCk7dmFyIEM9Ynx8e30sVD1DLmVuY29kZXJUeXBlLEg9''@;'; put 'put ''dm9pZCAwPT09VD8iaW1hZ2UvcG5nIjpULGo9Qy5lbmNvZGVyT3B0aW9ucyxFPXZvaWQgMD09PWo/Ljg6aixtPUMuY2FudmcsQT1mdW5jdGlvbih0ZSl7dmFyIHNlPXRlLnNyYyx3ZT10ZS53aWR0aCxVZT10ZS5oZWlnaHQsSmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksb3Q9''@;'; put 'put ''SmUuZ2V0Q29udGV4dCgiMmQiKSxNZT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtKZS53aWR0aD13ZSpNZSxKZS5oZWlnaHQ9VWUqTWUsSmUuc3R5bGUud2lkdGg9SmUud2lkdGgrInB4IixKZS5zdHlsZS5oZWlnaHQ9SmUuaGVpZ2h0KyJweCIsb3Quc2V0VHJhbnNmb3JtKE1lLDAsMCxN''@;'; put 'put ''ZSwwLDApLG0/bShKZSxzZSk6b3QuZHJhd0ltYWdlKHNlLDAsMCk7dmFyIHZlPXZvaWQgMDt0cnl7dmU9SmUudG9EYXRhVVJMKEgsRSl9Y2F0Y2goWGUpe2lmKHR5cGVvZiBTZWN1cml0eUVycm9yPCJ1IiYmWGUgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yfHwiU2VjdXJpdHlFcnJvciI9PT1Y''@;'; put 'put ''ZS5uYW1lKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlJlbmRlcmVkIFNWRyBpbWFnZXMgY2Fubm90IGJlIGRvd25sb2FkZWQgaW4gdGhpcyBicm93c2VyLiIpO3Rocm93IFhlfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4KHZlLEplLndpZHRoLEplLmhlaWdodCksUHJvbWlzZS5y''@;'; put 'put ''ZXNvbHZlKHZlKX07cmV0dXJuIG0/Xy5wcmVwYXJlU3ZnKHAsYikudGhlbihBKTpfLnN2Z0FzRGF0YVVyaShwLGIpLnRoZW4oZnVuY3Rpb24oYWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0ZSxzZSl7dmFyIHdlPW5ldyBJbWFnZTt3ZS5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGUoQSh7c3JjOndlLHdpZHRoOndlLndpZHRoLGhlaWdodDp3ZS5oZWlnaHR9KSl9LHdlLm9uZXJyb3I9ZnVuY3Rpb24oKXtzZSgiVGhlcmUgd2FzIGFuIGVycm9yIGxvYWRpbmcgdGhlIGRhdGEgVVJJIGFzIGFuIGltYWdlIG9uIHRoZSBmb2xsb3dpbmcgU1ZHXG4iK3dpbmRvdy5hdG9iKGFl''@;'; put 'put ''LnNsaWNlKDI2KSkrIk9wZW4gdGhlIGZvbGxvd2luZyBsaW5rIHRvIHNlZSBicm93c2VyJ3MgZGlhZ25vc2lzXG4iK2FlKX0sd2Uuc3JjPWFlfSl9KX0sXy5kb3dubG9hZD1mdW5jdGlvbihwLGIseCl7aWYobmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpbmF2aWdhdG9yLm1zU2F2ZU9yT3Bl''@;'; put 'put ''bkJsb2IoSihiKSxwKTtlbHNle3ZhciBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZigiZG93bmxvYWQiaW4gQyl7Qy5kb3dubG9hZD1wLEMuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChDKTt0cnl7dmFyIFQ9SihiKSxIPVVSTC5jcmVhdGVP''@;'; put 'put ''YmplY3RVUkwoVCk7Qy5ocmVmPUgsQy5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMKEgpfSl9fWNhdGNoKGope2NvbnNvbGUuZXJyb3IoaiksY29uc29sZS53YXJuKCJFcnJvciB3aGls''@;'; put 'put ''ZSBnZXR0aW5nIG9iamVjdCBVUkwuIEZhbGxpbmcgYmFjayB0byBzdHJpbmcgVVJMLiIpLEMuaHJlZj1ifUMuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKEMpfWVsc2UgeCYmeC5wb3B1cCYmKHgucG9wdXAuZG9jdW1lbnQudGl0bGU9cCx4LnBvcHVwLmxvY2F0aW9uLnJlcGxh''@;'; put 'put ''Y2UoYikpfX0sXy5zYXZlU3ZnPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz1WKCk7cmV0dXJuIEwocCkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5zdmdBc0RhdGFVcmkoVCx4fHx7fSl9KS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLmRvd25sb2FkKGIsVCxDKX0pfSxfLnNhdmVTdmdBc1Bu''@;'; put 'put ''Zz1mdW5jdGlvbihwLGIseCl7dmFyIEM9VigpO3JldHVybiBMKHApLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uc3ZnQXNQbmdVcmkoVCx4fHx7fSl9KS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLmRvd25sb2FkKGIsVCxDKX0pfX0oKX0sNzA0NjM6KHVlLFgseSk9Pnt2YXIgST15KDI3''@;'; put 'put ''MDU0KS5CdWZmZXI7ZnVuY3Rpb24gXyhnLEIpe3RoaXMuX2Jsb2NrPUkuYWxsb2MoZyksdGhpcy5fZmluYWxTaXplPUIsdGhpcy5fYmxvY2tTaXplPWcsdGhpcy5fbGVuPTB9Xy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGcsQil7InN0cmluZyI9PXR5cGVvZiBnJiYoZz1JLmZyb20oZyxC''@;'; put 'put ''PUJ8fCJ1dGY4IikpO2Zvcih2YXIgdz10aGlzLl9ibG9jayxQPXRoaXMuX2Jsb2NrU2l6ZSxGPWcubGVuZ3RoLE89dGhpcy5fbGVuLHo9MDt6PEY7KXtmb3IodmFyIE49TyVQLEw9TWF0aC5taW4oRi16LFAtTiksSz0wO0s8TDtLKyspd1tOK0tdPWdbeitLXTt6Kz1MLChPKz1MKSVQPT0wJiZ0''@;'; put 'put ''aGlzLl91cGRhdGUodyl9cmV0dXJuIHRoaXMuX2xlbis9Rix0aGlzfSxfLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZyl7dmFyIEI9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tCXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLEIrMSksQj49dGhpcy5fZmluYWxTaXpl''@;'; put 'put ''JiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgdz04KnRoaXMuX2xlbjtpZih3PD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodyx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgUD0oNDI5NDk2NzI5NSZ3KT4+PjA7dGhp''@;'; put 'put ''cy5fYmxvY2sud3JpdGVVSW50MzJCRSgody1QKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKFAsdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIE89dGhpcy5faGFzaCgpO3JldHVybiBnP08udG9T''@;'; put 'put ''dHJpbmcoZyk6T30sXy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LHVlLmV4cG9ydHM9X30sMjU0NDM6KHVlLFgseSk9Pnt2YXIgST11ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2c9''@;'; put 'put ''Zy50b0xvd2VyQ2FzZSgpO3ZhciBCPUlbZ107aWYoIUIpdGhyb3cgbmV3IEVycm9yKGcrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEJ9O0kuc2hhPXkoNDg1ODUpLEkuc2hhMT15KDIxMjcwKSxJLnNoYTIyND15KDQyNzA5KSxJLnNo''@;'; put 'put ''YTI1Nj15KDMyMTQ4KSxJLnNoYTM4ND15KDUxODU2KSxJLnNoYTUxMj15KDMxMjEpfSw0ODU4NToodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg3MDQ2MyksZz15KDI3MDU0KS5CdWZmZXIsQj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3''@;'; put 'put ''IEFycmF5KDgwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKE4pe3JldHVybiBOPDw1fE4+Pj4yN31mdW5jdGlvbiBPKE4pe3JldHVybiBOPDwzMHxOPj4+Mn1mdW5jdGlvbiB6KE4sTCxLLFUpe3JldHVybiAwPT09Tj9M''@;'; put 'put ''Jkt8fkwmVToyPT09Tj9MJkt8TCZVfEsmVTpMXkteVX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1''@;'; put 'put ''MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXtmb3IodmFyIEw9dGhpcy5fdyxLPTB8dGhpcy5fYSxVPTB8dGhpcy5fYixXPTB8dGhpcy5fYyxZPTB8dGhpcy5fZCxxPTB8dGhpcy5fZSxlZT0wO2VlPDE2OysrZWUpTFtlZV09Ti5yZWFkSW50MzJCRSg0KmVlKTtmb3Io''@;'; put 'put ''O2VlPDgwOysrZWUpTFtlZV09TFtlZS0zXV5MW2VlLThdXkxbZWUtMTRdXkxbZWUtMTZdO2Zvcih2YXIgSj0wO0o8ODA7KytKKXt2YXIgbmU9fn4oSi8yMCksaWU9RihLKSt6KG5lLFUsVyxZKStxK0xbSl0rQltuZV18MDtxPVksWT1XLFc9TyhVKSxVPUssSz1pZX10aGlzLl9hPUsrdGhpcy5f''@;'; put 'put ''YXwwLHRoaXMuX2I9VSt0aGlzLl9ifDAsdGhpcy5fYz1XK3RoaXMuX2N8MCx0aGlzLl9kPVkrdGhpcy5fZHwwLHRoaXMuX2U9cSt0aGlzLl9lfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIE49Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIE4ud3JpdGVJbnQzMkJFKDB8dGhp''@;'; put 'put ''cy5fYSwwKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTi53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxOfSx1ZS5leHBvcnRzPVB9LDIxMjcwOih1ZSxYLHkpPT57dmFyIEk9eSg3''@;'; put 'put ''MTk5MyksXz15KDcwNDYzKSxnPXkoMjcwNTQpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYo''@;'; put 'put ''TCl7cmV0dXJuIEw8PDF8TD4+PjMxfWZ1bmN0aW9uIE8oTCl7cmV0dXJuIEw8PDV8TD4+PjI3fWZ1bmN0aW9uIHooTCl7cmV0dXJuIEw8PDMwfEw+Pj4yfWZ1bmN0aW9uIE4oTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0smVXx+SyZXOjI9PT1MP0smVXxLJld8VSZXOkteVV5XfUkoUCxfKSxQLnBy''@;'; put 'put ''b3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2Zv''@;'; put 'put ''cih2YXIgSz10aGlzLl93LFU9MHx0aGlzLl9hLFc9MHx0aGlzLl9iLFk9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1MLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysrSilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0p''@;'; put 'put ''O2Zvcih2YXIgbmU9MDtuZTw4MDsrK25lKXt2YXIgaWU9fn4obmUvMjApLGxlPU8oVSkrTihpZSxXLFkscSkrZWUrS1tuZV0rQltpZV18MDtlZT1xLHE9WSxZPXooVyksVz1VLFU9bGV9dGhpcy5fYT1VK3RoaXMuX2F8MCx0aGlzLl9iPVcrdGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9jfDAs''@;'; put 'put ''dGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTD1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxMLndyaXRl''@;'; put 'put ''SW50MzJCRSgwfHRoaXMuX2MsOCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEx9LHVlLmV4cG9ydHM9UH0sNDI3MDk6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoMzIxNDgpLGc9eSg3MDQ2MyksQj15KDI3MDU0KS5CdWZm''@;'; put 'put ''ZXIsdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsNjQsNTYpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcw''@;'; put 'put ''Mjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9Qi5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJu''@;'; put 'put ''IEYud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksRi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxGLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEYud3Jp''@;'; put 'put ''dGVJbnQzMkJFKHRoaXMuX2csMjQpLEZ9LHVlLmV4cG9ydHM9UH0sMzIxNDg6KHVlLFgseSk9Pnt2YXIgST15KDcxOTkzKSxfPXkoNzA0NjMpLGc9eSgyNzA1NCkuQnVmZmVyLEI9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5''@;'; put 'put ''OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEy''@;'; put 'put ''NDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4''@;'; put 'put ''MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4Nzcs''@;'; put 'put ''OTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlz''@;'; put 'put ''LmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoVSxXLFkpe3JldHVybiBZXlUmKFdeWSl9ZnVuY3Rpb24gTyhVLFcsWSl7cmV0dXJuIFUmV3xZJihVfFcpfWZ1bmN0aW9uIHooVSl7cmV0dXJuKFU+Pj4yfFU8PDMwKV4oVT4+PjEzfFU8PDE5KV4oVT4+PjIy''@;'; put 'put ''fFU8PDEwKX1mdW5jdGlvbiBOKFUpe3JldHVybihVPj4+NnxVPDwyNileKFU+Pj4xMXxVPDwyMSleKFU+Pj4yNXxVPDw3KX1mdW5jdGlvbiBMKFUpe3JldHVybihVPj4+N3xVPDwyNSleKFU+Pj4xOHxVPDwxNCleVT4+PjN9ZnVuY3Rpb24gSyhVKXtyZXR1cm4oVT4+PjE3fFU8PDE1KV4oVT4+''@;'; put 'put ''PjE5fFU8PDEzKV5VPj4+MTB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2''@;'; put 'put ''MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPXRoaXMuX3csWT0wfHRoaXMuX2EscT0wfHRoaXMuX2IsZWU9MHx0aGlzLl9jLEo9MHx0aGlzLl9kLG5lPTB8dGhpcy5fZSxp''@;'; put 'put ''ZT0wfHRoaXMuX2YsbGU9MHx0aGlzLl9nLG1lPTB8dGhpcy5faCxfZT0wO19lPDE2OysrX2UpV1tfZV09VS5yZWFkSW50MzJCRSg0Kl9lKTtmb3IoO19lPDY0OysrX2UpV1tfZV09SyhXW19lLTJdKStXW19lLTddK0woV1tfZS0xNV0pK1dbX2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0Oysr''@;'; put 'put ''VGUpe3ZhciBTZT1tZStOKG5lKStGKG5lLGllLGxlKStCW1RlXStXW1RlXXwwLHplPXooWSkrTyhZLHEsZWUpfDA7bWU9bGUsbGU9aWUsaWU9bmUsbmU9SitTZXwwLEo9ZWUsZWU9cSxxPVksWT1TZSt6ZXwwfXRoaXMuX2E9WSt0aGlzLl9hfDAsdGhpcy5fYj1xK3RoaXMuX2J8MCx0aGlzLl9j''@;'; put 'put ''PWVlK3RoaXMuX2N8MCx0aGlzLl9kPUordGhpcy5fZHwwLHRoaXMuX2U9bmUrdGhpcy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9bGUrdGhpcy5fZ3wwLHRoaXMuX2g9bWUrdGhpcy5faHwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBVPWcuYWxsb2NVbnNh''@;'; put 'put ''ZmUoMzIpO3JldHVybiBVLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFUud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksVS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxVLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxVLndyaXRlSW50MzJCRSh0aGlz''@;'; put 'put ''Ll9mLDIwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxVLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxVfSx1ZS5leHBvcnRzPVB9LDUxODU2Oih1ZSxYLHkpPT57dmFyIEk9eSg3MTk5MyksXz15KDMxMjEpLGc9eSg3MDQ2MyksQj15KDI3MDU0KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYw''@;'; put 'put ''KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDEyOCwxMTIpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMu''@;'; put 'put ''X2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0''@;'; put 'put ''OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBPKHosTixMKXtG''@;'; put 'put ''LndyaXRlSW50MzJCRSh6LEwpLEYud3JpdGVJbnQzMkJFKE4sTCs0KX1yZXR1cm4gTyh0aGlzLl9haCx0aGlzLl9hbCwwKSxPKHRoaXMuX2JoLHRoaXMuX2JsLDgpLE8odGhpcy5fY2gsdGhpcy5fY2wsMTYpLE8odGhpcy5fZGgsdGhpcy5fZGwsMjQpLE8odGhpcy5fZWgsdGhpcy5fZWwsMzIp''@;'; put 'put ''LE8odGhpcy5fZmgsdGhpcy5fZmwsNDApLEZ9LHVlLmV4cG9ydHM9UH0sMzEyMToodWUsWCx5KT0+e3ZhciBJPXkoNzE5OTMpLF89eSg3MDQ2MyksZz15KDI3MDU0KS5CdWZmZXIsQj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4''@;'; put 'put ''NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3''@;'; put 'put ''OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwy''@;'; put 'put ''NjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3''@;'; put 'put ''ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEy''@;'; put 'put ''LDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAs''@;'; put 'put ''MjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAw''@;'; put 'put ''ODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIy''@;'; put 'put ''MjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3''@;'; put 'put ''LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2''@;'; put 'put ''MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2''@;'; put 'put ''LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBGKHEsZWUsSil7cmV0dXJuIEpecSYoZWVeSil9ZnVuY3Rpb24gTyhxLGVlLEope3JldHVybiBxJmVlfEomKHF8ZWUpfWZ1''@;'; put 'put ''bmN0aW9uIHoocSxlZSl7cmV0dXJuKHE+Pj4yOHxlZTw8NCleKGVlPj4+MnxxPDwzMCleKGVlPj4+N3xxPDwyNSl9ZnVuY3Rpb24gTihxLGVlKXtyZXR1cm4ocT4+PjE0fGVlPDwxOCleKHE+Pj4xOHxlZTw8MTQpXihlZT4+Pjl8cTw8MjMpfWZ1bmN0aW9uIEwocSxlZSl7cmV0dXJuKHE+Pj4x''@;'; put 'put ''fGVlPDwzMSleKHE+Pj44fGVlPDwyNClecT4+Pjd9ZnVuY3Rpb24gSyhxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV4ocT4+Pjd8ZWU8PDI1KX1mdW5jdGlvbiBVKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV5xPj4+Nn1mdW5jdGlv''@;'; put 'put ''biBXKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV4ocT4+PjZ8ZWU8PDI2KX1mdW5jdGlvbiBZKHEsZWUpe3JldHVybiBxPj4+MDxlZT4+PjA/MTowfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMs''@;'; put 'put ''dGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5f''@;'; put 'put ''Ymw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bihxKXtmb3IodmFyIGVlPXRoaXMuX3csSj0wfHRoaXMuX2FoLG5lPTB8dGhpcy5fYmgsaWU9MHx0aGlzLl9jaCxsZT0wfHRoaXMuX2RoLG1lPTB8dGhpcy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMuX2doLFNlPTB8dGhpcy5faGgsemU9MHx0aGlzLl9hbCxWPTB8dGhpcy5fYmwscD0w''@;'; put 'put ''fHRoaXMuX2NsLGI9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRoaXMuX2ZsLFQ9MHx0aGlzLl9nbCxIPTB8dGhpcy5faGwsaj0wO2o8MzI7ais9MillZVtqXT1xLnJlYWRJbnQzMkJFKDQqaiksZWVbaisxXT1xLnJlYWRJbnQzMkJFKDQqais0KTtmb3IoO2o8MTYwO2orPTIpe3ZhciBF''@;'; put 'put ''PWVlW2otMzBdLG09ZWVbai0zMCsxXSxBPUwoRSxtKSxhZT1LKG0sRSksdGU9VShFPWVlW2otNF0sbT1lZVtqLTQrMV0pLHNlPVcobSxFKSxKZT1lZVtqLTMyXSxvdD1lZVtqLTMyKzFdLE1lPWFlK2VlW2otMTQrMV18MCx2ZT1BK2VlW2otMTRdK1koTWUsYWUpfDA7dmU9KHZlPXZlK3RlK1ko''@;'; put 'put ''TWU9TWUrc2V8MCxzZSl8MCkrSmUrWShNZT1NZStvdHwwLG90KXwwLGVlW2pdPXZlLGVlW2orMV09TWV9Zm9yKHZhciBYZT0wO1hlPDE2MDtYZSs9Mil7dmU9ZWVbWGVdLE1lPWVlW1hlKzFdO3ZhciBqZT1PKEosbmUsaWUpLERlPU8oemUsVixwKSxGZT16KEosemUpLFJlPXooemUsSiksSWU9''@;'; put 'put ''TihtZSx4KSxWZT1OKHgsbWUpLGtlPUJbWGVdLEFlPUJbWGUrMV0sX3Q9RihtZSxfZSxUZSksbnQ9Rih4LEMsVCksUWU9SCtWZXwwLHVuPVNlK0llK1koUWUsSCl8MDt1bj0odW49KHVuPXVuK190K1koUWU9UWUrbnR8MCxudCl8MCkra2UrWShRZT1RZStBZXwwLEFlKXwwKSt2ZStZKFFlPVFl''@;'; put 'put ''K01lfDAsTWUpfDA7dmFyIHl0PVJlK0RlfDAsTXQ9RmUramUrWSh5dCxSZSl8MDtTZT1UZSxIPVQsVGU9X2UsVD1DLF9lPW1lLEM9eCxtZT1sZSt1bitZKHg9YitRZXwwLGIpfDAsbGU9aWUsYj1wLGllPW5lLHA9VixuZT1KLFY9emUsSj11bitNdCtZKHplPVFlK3l0fDAsUWUpfDB9dGhpcy5f''@;'; put 'put ''YWw9dGhpcy5fYWwremV8MCx0aGlzLl9ibD10aGlzLl9ibCtWfDAsdGhpcy5fY2w9dGhpcy5fY2wrcHwwLHRoaXMuX2RsPXRoaXMuX2RsK2J8MCx0aGlzLl9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhpcy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9o''@;'; put 'put ''bCtIfDAsdGhpcy5fYWg9dGhpcy5fYWgrSitZKHRoaXMuX2FsLHplKXwwLHRoaXMuX2JoPXRoaXMuX2JoK25lK1kodGhpcy5fYmwsVil8MCx0aGlzLl9jaD10aGlzLl9jaCtpZStZKHRoaXMuX2NsLHApfDAsdGhpcy5fZGg9dGhpcy5fZGgrbGUrWSh0aGlzLl9kbCxiKXwwLHRoaXMuX2VoPXRo''@;'; put 'put ''aXMuX2VoK21lK1kodGhpcy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9maCtfZStZKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grVGUrWSh0aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2hoK1NlK1kodGhpcy5faGwsSCl8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcT1nLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBlZShKLG5lLGllKXtxLndyaXRlSW50MzJCRShKLGllKSxxLndyaXRlSW50MzJCRShuZSxpZSs0KX1yZXR1cm4gZWUodGhpcy5fYWgsdGhpcy5fYWwsMCksZWUodGhpcy5fYmgsdGhpcy5fYmwsOCksZWUodGhpcy5fY2gsdGhpcy5f''@;'; put 'put ''Y2wsMTYpLGVlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxlZSh0aGlzLl9laCx0aGlzLl9lbCwzMiksZWUodGhpcy5fZmgsdGhpcy5fZmwsNDApLGVlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxlZSh0aGlzLl9oaCx0aGlzLl9obCw1NikscX0sdWUuZXhwb3J0cz1QfSw3MDQ1Oih1ZSxYLHkpPT57''@;'; put 'put ''dWUuZXhwb3J0cz1nO3ZhciBJPXkoNDQzNTYpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBnKCl7SS5jYWxsKHRoaXMpfXkoNzE5OTMpKGcsSSksZy5SZWFkYWJsZT15KDYxMDkyKSxnLldyaXRhYmxlPXkoMTU0OTIpLGcuRHVwbGV4PXkoMTAzMCksZy5UcmFuc2Zvcm09eSg0MzQxMCksZy5QYXNz''@;'; put 'put ''VGhyb3VnaD15KDgzODI0KSxnLmZpbmlzaGVkPXkoNTc4NTQpLGcucGlwZWxpbmU9eSg2ODQ2KSxnLlN0cmVhbT1nLGcucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oQix3KXt2YXIgUD10aGlzO2Z1bmN0aW9uIEYoVyl7Qi53cml0YWJsZSYmITE9PT1CLndyaXRlKFcpJiZQLnBhdXNlJiZQLnBh''@;'; put 'put ''dXNlKCl9ZnVuY3Rpb24gTygpe1AucmVhZGFibGUmJlAucmVzdW1lJiZQLnJlc3VtZSgpfVAub24oImRhdGEiLEYpLEIub24oImRyYWluIixPKSwhQi5faXNTdGRpbyYmKCF3fHwhMSE9PXcuZW5kKSYmKFAub24oImVuZCIsTiksUC5vbigiY2xvc2UiLEwpKTt2YXIgej0hMTtmdW5jdGlvbiBO''@;'; put 'put ''KCl7enx8KHo9ITAsQi5lbmQoKSl9ZnVuY3Rpb24gTCgpe3p8fCh6PSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBCLmRlc3Ryb3kmJkIuZGVzdHJveSgpKX1mdW5jdGlvbiBLKFcpe2lmKFUoKSwwPT09SS5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgV31mdW5jdGlvbiBVKCl7UC5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiZGF0YSIsRiksQi5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLE8pLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTiksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxCLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksUC5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiZW5kIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVSksQi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFUpfXJldHVybiBQLm9uKCJlcnJvciIsSyksQi5vbigiZXJyb3IiLEspLFAub24oImVuZCIsVSksUC5vbigiY2xvc2UiLFUpLEIub24oImNsb3NlIixVKSxC''@;'; put 'put ''LmVtaXQoInBpcGUiLFApLEJ9fSwzMDQ2NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT17fTtmdW5jdGlvbiBJKFAsRixPKXtPfHwoTz1FcnJvcik7dmFyIE49ZnVuY3Rpb24oTCl7ZnVuY3Rpb24gSyhVLFcsWSl7cmV0dXJuIEwuY2FsbCh0aGlzLGZ1bmN0aW9uIHooTCxLLFUpe3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgRj9GOkYoTCxLLFUpfShVLFcsWSkpfHx0aGlzfXJldHVybiBmdW5jdGlvbiBYKFAsRil7UC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShGLnByb3RvdHlwZSksUC5wcm90b3R5cGUuY29uc3RydWN0b3I9UCxQLl9fcHJvdG9fXz1GfShLLEwpLEt9KE8pO04ucHJvdG90''@;'; put 'put ''eXBlLm5hbWU9Ty5uYW1lLE4ucHJvdG90eXBlLmNvZGU9UCx5W1BdPU59ZnVuY3Rpb24gXyhQLEYpe2lmKEFycmF5LmlzQXJyYXkoUCkpe3ZhciBPPVAubGVuZ3RoO3JldHVybiBQPVAubWFwKGZ1bmN0aW9uKHope3JldHVybiBTdHJpbmcoeil9KSxPPjI/Im9uZSBvZiAiLmNvbmNhdChGLCIg''@;'; put 'put ''IikuY29uY2F0KFAuc2xpY2UoMCxPLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrUFtPLTFdOjI9PT1PPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdLCIgb3IgIikuY29uY2F0KFBbMV0pOiJvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFBbMF0pfXJldHVybiJvZiAiLmNvbmNh''@;'; put 'put ''dChGLCIgIikuY29uY2F0KFN0cmluZyhQKSl9SSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihQLEYpe3JldHVybidUaGUgdmFsdWUgIicrRisnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrUCsnIid9LFR5cGVFcnJvciksSSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0''@;'; put 'put ''aW9uKFAsRixPKXt2YXIgeixOO2lmKCJzdHJpbmciPT10eXBlb2YgRiYmZnVuY3Rpb24gZyhQLEYsTyl7cmV0dXJuIFAuc3Vic3RyKCFPfHxPPDA/MDorTyxGLmxlbmd0aCk9PT1GfShGLCJub3QgIik/KHo9Im11c3Qgbm90IGJlIixGPUYucmVwbGFjZSgvXm5vdCAvLCIiKSk6ej0ibXVzdCBi''@;'; put 'put ''ZSIsZnVuY3Rpb24gQihQLEYsTyl7cmV0dXJuKHZvaWQgMD09PU98fE8+UC5sZW5ndGgpJiYoTz1QLmxlbmd0aCksUC5zdWJzdHJpbmcoTy1GLmxlbmd0aCxPKT09PUZ9KFAsIiBhcmd1bWVudCIpKU49IlRoZSAiLmNvbmNhdChQLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQoXyhGLCJ0eXBl''@;'; put 'put ''IikpO2Vsc2V7dmFyIEw9ZnVuY3Rpb24gdyhQLEYsTyl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBPJiYoTz0wKSwhKE8rRi5sZW5ndGg+UC5sZW5ndGgpJiYtMSE9PVAuaW5kZXhPZihGLE8pfShQLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO049J1RoZSAiJy5jb25jYXQoUCwnIiAnKS5j''@;'; put 'put ''b25jYXQoTCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKX1yZXR1cm4gTisiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHR5cGVvZiBPKX0sVHlwZUVycm9yKSxJKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxJKCJF''@;'; put 'put ''UlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIlRoZSAiK1ArIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLEkoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIiksSSgiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1bmN0''@;'; put 'put ''aW9uKFApe3JldHVybiJDYW5ub3QgY2FsbCAiK1ArIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLEkoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLEkoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwg''@;'; put 'put ''bm90IHJlYWRhYmxlIiksSSgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxJKCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksSSgiRVJSX1VOS05PV05fRU5DT0RJTkci''@;'; put 'put ''LGZ1bmN0aW9uKFApe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK1B9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksdWUuZXhwb3J0cy5GPXl9LDEwMzA6KHVlLFgseSk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKE4pe3ZhciBMPVtdO2Zvcih2YXIgSyBpbiBOKUwucHVzaChLKTtyZXR1cm4gTH07dWUuZXhwb3J0cz1GO3ZhciBfPXkoNjEwOTIpLGc9eSgxNTQ5Mik7eSg3MTk5MykoRixfKTtmb3IodmFyIEI9SShnLnByb3RvdHlwZSksdz0w''@;'; put 'put ''O3c8Qi5sZW5ndGg7dysrKXt2YXIgUD1CW3ddO0YucHJvdG90eXBlW1BdfHwoRi5wcm90b3R5cGVbUF09Zy5wcm90b3R5cGVbUF0pfWZ1bmN0aW9uIEYoTil7aWYoISh0aGlzIGluc3RhbmNlb2YgRikpcmV0dXJuIG5ldyBGKE4pO18uY2FsbCh0aGlzLE4pLGcuY2FsbCh0aGlzLE4pLHRoaXMu''@;'; put 'put ''YWxsb3dIYWxmT3Blbj0hMCxOJiYoITE9PT1OLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1OLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1OLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLE8pKSl9ZnVuY3Rp''@;'; put 'put ''b24gTygpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHByb2Nlc3MubmV4dFRpY2soeix0aGlzKX1mdW5jdGlvbiB6KE4pe04uZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShGLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oTCl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUwsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9TCl9fSl9''@;'; put 'put ''LDgzODI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Xzt2YXIgST15KDQzNDEwKTtmdW5jdGlvbiBfKGcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIF8pKXJldHVybiBuZXcgXyhnKTtJLmNhbGwodGhpcyxnKX15KDcxOTkzKShfLEkpLF8ucHJvdG90eXBlLl90cmFuc2Zvcm09''@;'; put 'put ''ZnVuY3Rpb24oZyxCLHcpe3cobnVsbCxnKX19LDYxMDkyOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJO3VlLmV4cG9ydHM9VixWLlJlYWRhYmxlU3RhdGU9emUseSg0NDM1Nik7dmFyIE4sZz1mdW5jdGlvbihGZSxSZSl7cmV0dXJuIEZlLmxpc3RlbmVycyhSZSkubGVuZ3RofSxCPXko''@;'; put 'put ''MTI2MDEpLHc9eSg4MzgzOCkuQnVmZmVyLFA9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSx6PXkoNzcxOTkpO049eiYmei5kZWJ1Z2xvZz96LmRlYnVnbG9n''@;'; put 'put ''KCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGllLGxlLG1lLEw9eSg3NTIyNSksSz15KDg4MTUyKSxXPXkoMjI4MjcpLmdldEhpZ2hXYXRlck1hcmssWT15KDMwNDY0KS5GLHE9WS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxlZT1ZLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsSj1ZLkVSUl9N''@;'; put 'put ''RVRIT0RfTk9UX0lNUExFTUVOVEVELG5lPVkuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDt5KDcxOTkzKShWLEIpO3ZhciBfZT1LLmVycm9yT3JEZXN0cm95LFRlPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIHplKERlLEZl''@;'; put 'put ''LFJlKXtJPUl8fHkoMTAzMCksImJvb2xlYW4iIT10eXBlb2YgUmUmJihSZT1GZSBpbnN0YW5jZW9mIEkpLHRoaXMub2JqZWN0TW9kZT0hIShEZT1EZXx8e30pLm9iamVjdE1vZGUsUmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIURlLnJlYWRhYmxlT2JqZWN0TW9kZSks''@;'; put 'put ''dGhpcy5oaWdoV2F0ZXJNYXJrPVcodGhpcyxEZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixSZSksdGhpcy5idWZmZXI9bmV3IEwsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVt''@;'; put 'put ''aXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSEx''@;'; put 'put ''IT09RGUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFEZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1EZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rl''@;'; put 'put ''cj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxEZS5lbmNvZGluZyYmKGllfHwoaWU9eSg3ODQ1NCkuSSksdGhpcy5kZWNvZGVyPW5ldyBpZShEZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1EZS5lbmNvZGluZyl9ZnVuY3Rpb24gVihEZSl7aWYoST1JfHx5KDEwMzApLCEodGhpcyBpbnN0YW5j''@;'; put 'put ''ZW9mIFYpKXJldHVybiBuZXcgVihEZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgemUoRGUsdGhpcyx0aGlzIGluc3RhbmNlb2YgSSksdGhpcy5yZWFkYWJsZT0hMCxEZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5yZWFkJiYodGhpcy5fcmVhZD1EZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgRGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9RGUuZGVzdHJveSkpLEIuY2FsbCh0aGlzKX1mdW5jdGlvbiBwKERlLEZlLFJlLEllLFZlKXtOKCJyZWFkYWJsZUFkZENodW5rIixGZSk7dmFyIEFlLGtlPURlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1GZSlrZS5yZWFkaW5nPSExLGZ1''@;'; put 'put ''bmN0aW9uIGooRGUsRmUpe2lmKE4oIm9uRW9mQ2h1bmsiKSwhRmUuZW5kZWQpe2lmKEZlLmRlY29kZXIpe3ZhciBSZT1GZS5kZWNvZGVyLmVuZCgpO1JlJiZSZS5sZW5ndGgmJihGZS5idWZmZXIucHVzaChSZSksRmUubGVuZ3RoKz1GZS5vYmplY3RNb2RlPzE6UmUubGVuZ3RoKX1GZS5lbmRl''@;'; put 'put ''ZD0hMCxGZS5zeW5jP0UoRGUpOihGZS5uZWVkUmVhZGFibGU9ITEsRmUuZW1pdHRlZFJlYWRhYmxlfHwoRmUuZW1pdHRlZFJlYWRhYmxlPSEwLG0oRGUpKSl9fShEZSxrZSk7ZWxzZSBpZihWZXx8KEFlPWZ1bmN0aW9uIHgoRGUsRmUpe3ZhciBSZTtyZXR1cm4hZnVuY3Rpb24gTyhEZSl7cmV0''@;'; put 'put ''dXJuIHcuaXNCdWZmZXIoRGUpfHxEZSBpbnN0YW5jZW9mIFB9KEZlKSYmInN0cmluZyIhPXR5cGVvZiBGZSYmdm9pZCAwIT09RmUmJiFEZS5vYmplY3RNb2RlJiYoUmU9bmV3IHEoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxGZSkpLFJlfShrZSxGZSkpLEFlKV9l''@;'; put 'put ''KERlLEFlKTtlbHNlIGlmKGtlLm9iamVjdE1vZGV8fEZlJiZGZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIEZlJiYha2Uub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKEZlKSE9PXcucHJvdG90eXBlJiYoRmU9ZnVuY3Rpb24gRihEZSl7cmV0dXJuIHcuZnJvbShEZSl9''@;'; put 'put ''KEZlKSksSWUpa2UuZW5kRW1pdHRlZD9fZShEZSxuZXcgbmUpOmIoRGUsa2UsRmUsITApO2Vsc2UgaWYoa2UuZW5kZWQpX2UoRGUsbmV3IGVlKTtlbHNle2lmKGtlLmRlc3Ryb3llZClyZXR1cm4hMTtrZS5yZWFkaW5nPSExLGtlLmRlY29kZXImJiFSZT8oRmU9a2UuZGVjb2Rlci53cml0ZShG''@;'; put 'put ''ZSksa2Uub2JqZWN0TW9kZXx8MCE9PUZlLmxlbmd0aD9iKERlLGtlLEZlLCExKTpBKERlLGtlKSk6YihEZSxrZSxGZSwhMSl9ZWxzZSBJZXx8KGtlLnJlYWRpbmc9ITEsQShEZSxrZSkpO3JldHVybiFrZS5lbmRlZCYmKGtlLmxlbmd0aDxrZS5oaWdoV2F0ZXJNYXJrfHwwPT09a2UubGVuZ3Ro''@;'; put 'put ''KX1mdW5jdGlvbiBiKERlLEZlLFJlLEllKXtGZS5mbG93aW5nJiYwPT09RmUubGVuZ3RoJiYhRmUuc3luYz8oRmUuYXdhaXREcmFpbj0wLERlLmVtaXQoImRhdGEiLFJlKSk6KEZlLmxlbmd0aCs9RmUub2JqZWN0TW9kZT8xOlJlLmxlbmd0aCxJZT9GZS5idWZmZXIudW5zaGlmdChSZSk6RmUu''@;'; put 'put ''YnVmZmVyLnB1c2goUmUpLEZlLm5lZWRSZWFkYWJsZSYmRShEZSkpLEEoRGUsRmUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihGZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUZlKX19KSxWLnByb3RvdHlwZS5kZXN0cm95PUsuZGVzdHJveSxWLnByb3RvdHlwZS5fdW5kZXN0cm95PUsudW5kZXN0''@;'; put 'put ''cm95LFYucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKERlLEZlKXtGZShEZSl9LFYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRGUsRmUpe3ZhciBJZSxSZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBSZS5vYmplY3RNb2RlP0llPSEwOiJzdHJpbmciPT10eXBlb2YgRGUmJigoRmU9''@;'; put 'put ''RmV8fFJlLmRlZmF1bHRFbmNvZGluZykhPT1SZS5lbmNvZGluZyYmKERlPXcuZnJvbShEZSxGZSksRmU9IiIpLEllPSEwKSxwKHRoaXMsRGUsRmUsITEsSWUpfSxWLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKERlKXtyZXR1cm4gcCh0aGlzLERlLG51bGwsITAsITEpfSxWLnByb3RvdHlw''@;'; put 'put ''ZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxWLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihEZSl7aWV8fChpZT15KDc4NDU0KS5JKTt2YXIgRmU9bmV3IGllKERlKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9''@;'; put 'put ''RmUsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBSZT10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLEllPSIiO251bGwhPT1SZTspSWUrPUZlLndyaXRlKFJlLmRhdGEpLFJlPVJlLm5leHQ7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1JZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChJZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9SWUubGVuZ3RoLHRoaXN9O3ZhciBDPTEwNzM3NDE4MjQ7ZnVuY3Rpb24gSChEZSxGZSl7cmV0''@;'; put 'put ''dXJuIERlPD0wfHwwPT09RmUubGVuZ3RoJiZGZS5lbmRlZD8wOkZlLm9iamVjdE1vZGU/MTpEZSE9RGU/RmUuZmxvd2luZyYmRmUubGVuZ3RoP0ZlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOkZlLmxlbmd0aDooRGU+RmUuaGlnaFdhdGVyTWFyayYmKEZlLmhpZ2hXYXRlck1hcms9ZnVuY3Rp''@;'; put 'put ''b24gVChEZSl7cmV0dXJuIERlPj1DP0RlPUM6KERlLS0sRGV8PURlPj4+MSxEZXw9RGU+Pj4yLERlfD1EZT4+PjQsRGV8PURlPj4+OCxEZXw9RGU+Pj4xNixEZSsrKSxEZX0oRGUpKSxEZTw9RmUubGVuZ3RoP0RlOkZlLmVuZGVkP0ZlLmxlbmd0aDooRmUubmVlZFJlYWRhYmxlPSEwLDApKX1m''@;'; put 'put ''dW5jdGlvbiBFKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7TigiZW1pdFJlYWRhYmxlIixGZS5uZWVkUmVhZGFibGUsRmUuZW1pdHRlZFJlYWRhYmxlKSxGZS5uZWVkUmVhZGFibGU9ITEsRmUuZW1pdHRlZFJlYWRhYmxlfHwoTigiZW1pdFJlYWRhYmxlIixGZS5mbG93aW5nKSxGZS5l''@;'; put 'put ''bWl0dGVkUmVhZGFibGU9ITAscHJvY2Vzcy5uZXh0VGljayhtLERlKSl9ZnVuY3Rpb24gbShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0YXRlO04oImVtaXRSZWFkYWJsZV8iLEZlLmRlc3Ryb3llZCxGZS5sZW5ndGgsRmUuZW5kZWQpLCFGZS5kZXN0cm95ZWQmJihGZS5sZW5ndGh8fEZlLmVu''@;'; put 'put ''ZGVkKSYmKERlLmVtaXQoInJlYWRhYmxlIiksRmUuZW1pdHRlZFJlYWRhYmxlPSExKSxGZS5uZWVkUmVhZGFibGU9IUZlLmZsb3dpbmcmJiFGZS5lbmRlZCYmRmUubGVuZ3RoPD1GZS5oaWdoV2F0ZXJNYXJrLG90KERlKX1mdW5jdGlvbiBBKERlLEZlKXtGZS5yZWFkaW5nTW9yZXx8KEZlLnJl''@;'; put 'put ''YWRpbmdNb3JlPSEwLHByb2Nlc3MubmV4dFRpY2soYWUsRGUsRmUpKX1mdW5jdGlvbiBhZShEZSxGZSl7Zm9yKDshRmUucmVhZGluZyYmIUZlLmVuZGVkJiYoRmUubGVuZ3RoPEZlLmhpZ2hXYXRlck1hcmt8fEZlLmZsb3dpbmcmJjA9PT1GZS5sZW5ndGgpOyl7dmFyIFJlPUZlLmxlbmd0aDtp''@;'; put 'put ''ZihOKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLERlLnJlYWQoMCksUmU9PT1GZS5sZW5ndGgpYnJlYWt9RmUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gc2UoRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtGZS5yZWFkYWJsZUxpc3RlbmluZz1EZS5saXN0ZW5lckNvdW50KCJyZWFkYWJs''@;'; put 'put ''ZSIpPjAsRmUucmVzdW1lU2NoZWR1bGVkJiYhRmUucGF1c2VkP0ZlLmZsb3dpbmc9ITA6RGUubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJkRlLnJlc3VtZSgpfWZ1bmN0aW9uIHdlKERlKXtOKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxEZS5yZWFkKDApfWZ1bmN0aW9uIEplKERlLEZl''@;'; put 'put ''KXtOKCJyZXN1bWUiLEZlLnJlYWRpbmcpLEZlLnJlYWRpbmd8fERlLnJlYWQoMCksRmUucmVzdW1lU2NoZWR1bGVkPSExLERlLmVtaXQoInJlc3VtZSIpLG90KERlKSxGZS5mbG93aW5nJiYhRmUucmVhZGluZyYmRGUucmVhZCgwKX1mdW5jdGlvbiBvdChEZSl7dmFyIEZlPURlLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlO2ZvcihOKCJmbG93IixGZS5mbG93aW5nKTtGZS5mbG93aW5nJiZudWxsIT09RGUucmVhZCgpOyk7fWZ1bmN0aW9uIE1lKERlLEZlKXtyZXR1cm4gMD09PUZlLmxlbmd0aD9udWxsOihGZS5vYmplY3RNb2RlP1JlPUZlLmJ1ZmZlci5zaGlmdCgpOiFEZXx8RGU+PUZlLmxlbmd0aD8o''@;'; put 'put ''UmU9RmUuZGVjb2Rlcj9GZS5idWZmZXIuam9pbigiIik6MT09PUZlLmJ1ZmZlci5sZW5ndGg/RmUuYnVmZmVyLmZpcnN0KCk6RmUuYnVmZmVyLmNvbmNhdChGZS5sZW5ndGgpLEZlLmJ1ZmZlci5jbGVhcigpKTpSZT1GZS5idWZmZXIuY29uc3VtZShEZSxGZS5kZWNvZGVyKSxSZSk7dmFyIFJl''@;'; put 'put ''fWZ1bmN0aW9uIHZlKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7TigiZW5kUmVhZGFibGUiLEZlLmVuZEVtaXR0ZWQpLEZlLmVuZEVtaXR0ZWR8fChGZS5lbmRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKFhlLEZlLERlKSl9ZnVuY3Rpb24gWGUoRGUsRmUpe2lmKE4oImVuZFJlYWRhYmxl''@;'; put 'put ''TlQiLERlLmVuZEVtaXR0ZWQsRGUubGVuZ3RoKSwhRGUuZW5kRW1pdHRlZCYmMD09PURlLmxlbmd0aCYmKERlLmVuZEVtaXR0ZWQ9ITAsRmUucmVhZGFibGU9ITEsRmUuZW1pdCgiZW5kIiksRGUuYXV0b0Rlc3Ryb3kpKXt2YXIgUmU9RmUuX3dyaXRhYmxlU3RhdGU7KCFSZXx8UmUuYXV0b0Rl''@;'; put 'put ''c3Ryb3kmJlJlLmZpbmlzaGVkKSYmRmUuZGVzdHJveSgpfX1mdW5jdGlvbiBqZShEZSxGZSl7Zm9yKHZhciBSZT0wLEllPURlLmxlbmd0aDtSZTxJZTtSZSsrKWlmKERlW1JlXT09PUZlKXJldHVybiBSZTtyZXR1cm4tMX1WLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKERlKXtOKCJyZWFkIixE''@;'; put 'put ''ZSksRGU9cGFyc2VJbnQoRGUsMTApO3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlLFJlPURlO2lmKDAhPT1EZSYmKEZlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PURlJiZGZS5uZWVkUmVhZGFibGUmJigoMCE9PUZlLmhpZ2hXYXRlck1hcms/RmUubGVuZ3RoPj1GZS5oaWdoV2F0ZXJNYXJr''@;'; put 'put ''OkZlLmxlbmd0aD4wKXx8RmUuZW5kZWQpKXJldHVybiBOKCJyZWFkOiBlbWl0UmVhZGFibGUiLEZlLmxlbmd0aCxGZS5lbmRlZCksMD09PUZlLmxlbmd0aCYmRmUuZW5kZWQ/dmUodGhpcyk6RSh0aGlzKSxudWxsO2lmKDA9PT0oRGU9SChEZSxGZSkpJiZGZS5lbmRlZClyZXR1cm4gMD09PUZl''@;'; put 'put ''Lmxlbmd0aCYmdmUodGhpcyksbnVsbDt2YXIgVmUsSWU9RmUubmVlZFJlYWRhYmxlO3JldHVybiBOKCJuZWVkIHJlYWRhYmxlIixJZSksKDA9PT1GZS5sZW5ndGh8fEZlLmxlbmd0aC1EZTxGZS5oaWdoV2F0ZXJNYXJrKSYmTigibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLEllPSEwKSxG''@;'; put 'put ''ZS5lbmRlZHx8RmUucmVhZGluZz9OKCJyZWFkaW5nIG9yIGVuZGVkIixJZT0hMSk6SWUmJihOKCJkbyByZWFkIiksRmUucmVhZGluZz0hMCxGZS5zeW5jPSEwLDA9PT1GZS5sZW5ndGgmJihGZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoRmUuaGlnaFdhdGVyTWFyayksRmUuc3luYz0h''@;'; put 'put ''MSxGZS5yZWFkaW5nfHwoRGU9SChSZSxGZSkpKSxudWxsPT09KFZlPURlPjA/TWUoRGUsRmUpOm51bGwpPyhGZS5uZWVkUmVhZGFibGU9RmUubGVuZ3RoPD1GZS5oaWdoV2F0ZXJNYXJrLERlPTApOihGZS5sZW5ndGgtPURlLEZlLmF3YWl0RHJhaW49MCksMD09PUZlLmxlbmd0aCYmKEZlLmVu''@;'; put 'put ''ZGVkfHwoRmUubmVlZFJlYWRhYmxlPSEwKSxSZSE9PURlJiZGZS5lbmRlZCYmdmUodGhpcykpLG51bGwhPT1WZSYmdGhpcy5lbWl0KCJkYXRhIixWZSksVmV9LFYucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKERlKXtfZSh0aGlzLG5ldyBKKCJfcmVhZCgpIikpfSxWLnByb3RvdHlwZS5waXBl''@;'; put 'put ''PWZ1bmN0aW9uKERlLEZlKXt2YXIgUmU9dGhpcyxJZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChJZS5waXBlc0NvdW50KXtjYXNlIDA6SWUucGlwZXM9RGU7YnJlYWs7Y2FzZSAxOkllLnBpcGVzPVtJZS5waXBlcyxEZV07YnJlYWs7ZGVmYXVsdDpJZS5waXBlcy5wdXNoKERlKX1JZS5w''@;'; put 'put ''aXBlc0NvdW50Kz0xLE4oInBpcGUgY291bnQ9JWQgb3B0cz0laiIsSWUucGlwZXNDb3VudCxGZSk7dmFyIGtlPUZlJiYhMT09PUZlLmVuZHx8RGU9PT1wcm9jZXNzLnN0ZG91dHx8RGU9PT1wcm9jZXNzLnN0ZGVycj8kZTpfdDtmdW5jdGlvbiBfdCgpe04oIm9uZW5kIiksRGUuZW5kKCl9SWUu''@;'; put 'put ''ZW5kRW1pdHRlZD9wcm9jZXNzLm5leHRUaWNrKGtlKTpSZS5vbmNlKCJlbmQiLGtlKSxEZS5vbigidW5waXBlIixmdW5jdGlvbiBBZSh0dCxIZSl7Tigib251bnBpcGUiKSx0dD09PVJlJiZIZSYmITE9PT1IZS5oYXNVbnBpcGVkJiYoSGUuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiB1bigpe04o''@;'; put 'put ''ImNsZWFudXAiKSxEZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLER0KSxEZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixpdCksRGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixudCksRGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixNdCksRGUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsQWUpLFJl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyKCJlbmQiLF90KSxSZS5yZW1vdmVMaXN0ZW5lcigiZW5kIiwkZSksUmUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHl0KSxRZT0hMCxJZS5hd2FpdERyYWluJiYoIURlLl93cml0YWJsZVN0YXRlfHxEZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZudCgpfSgpKX0p''@;'; put 'put ''O3ZhciBudD1mdW5jdGlvbiB0ZShEZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFJlPURlLl9yZWFkYWJsZVN0YXRlO04oInBpcGVPbkRyYWluIixSZS5hd2FpdERyYWluKSxSZS5hd2FpdERyYWluJiZSZS5hd2FpdERyYWluLS0sMD09PVJlLmF3YWl0RHJhaW4mJmcoRGUsImRhdGEiKSYmKFJl''@;'; put 'put ''LmZsb3dpbmc9ITAsb3QoRGUpKX19KFJlKTtEZS5vbigiZHJhaW4iLG50KTt2YXIgUWU9ITE7ZnVuY3Rpb24geXQodHQpe04oIm9uZGF0YSIpO3ZhciBIZT1EZS53cml0ZSh0dCk7TigiZGVzdC53cml0ZSIsSGUpLCExPT09SGUmJigoMT09PUllLnBpcGVzQ291bnQmJkllLnBpcGVzPT09RGV8''@;'; put 'put ''fEllLnBpcGVzQ291bnQ+MSYmLTEhPT1qZShJZS5waXBlcyxEZSkpJiYhUWUmJihOKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLEllLmF3YWl0RHJhaW4pLEllLmF3YWl0RHJhaW4rKyksUmUucGF1c2UoKSl9ZnVuY3Rpb24gTXQodHQpe04oIm9uZXJyb3IiLHR0KSwkZSgpLERlLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJlcnJvciIsTXQpLDA9PT1nKERlLCJlcnJvciIpJiZfZShEZSx0dCl9ZnVuY3Rpb24gRHQoKXtEZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixpdCksJGUoKX1mdW5jdGlvbiBpdCgpe04oIm9uZmluaXNoIiksRGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixEdCksJGUo''@;'; put 'put ''KX1mdW5jdGlvbiAkZSgpe04oInVucGlwZSIpLFJlLnVucGlwZShEZSl9cmV0dXJuIFJlLm9uKCJkYXRhIix5dCksZnVuY3Rpb24gU2UoRGUsRmUsUmUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIERlLnByZXBlbmRMaXN0ZW5lcihGZSxSZSk7RGUu''@;'; put 'put ''X2V2ZW50cyYmRGUuX2V2ZW50c1tGZV0/QXJyYXkuaXNBcnJheShEZS5fZXZlbnRzW0ZlXSk/RGUuX2V2ZW50c1tGZV0udW5zaGlmdChSZSk6RGUuX2V2ZW50c1tGZV09W1JlLERlLl9ldmVudHNbRmVdXTpEZS5vbihGZSxSZSl9KERlLCJlcnJvciIsTXQpLERlLm9uY2UoImNsb3NlIixEdCks''@;'; put 'put ''RGUub25jZSgiZmluaXNoIixpdCksRGUuZW1pdCgicGlwZSIsUmUpLEllLmZsb3dpbmd8fChOKCJwaXBlIHJlc3VtZSIpLFJlLnJlc3VtZSgpKSxEZX0sVi5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKERlKXt2YXIgRmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxSZT17aGFzVW5waXBlZDohMX07''@;'; put 'put ''aWYoMD09PUZlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PUZlLnBpcGVzQ291bnQpcmV0dXJuIERlJiZEZSE9PUZlLnBpcGVzfHwoRGV8fChEZT1GZS5waXBlcyksRmUucGlwZXM9bnVsbCxGZS5waXBlc0NvdW50PTAsRmUuZmxvd2luZz0hMSxEZSYmRGUuZW1pdCgidW5waXBlIix0''@;'; put 'put ''aGlzLFJlKSksdGhpcztpZighRGUpe3ZhciBJZT1GZS5waXBlcyxWZT1GZS5waXBlc0NvdW50O0ZlLnBpcGVzPW51bGwsRmUucGlwZXNDb3VudD0wLEZlLmZsb3dpbmc9ITE7Zm9yKHZhciBrZT0wO2tlPFZlO2tlKyspSWVba2VdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0p''@;'; put 'put ''O3JldHVybiB0aGlzfXZhciBBZT1qZShGZS5waXBlcyxEZSk7cmV0dXJuLTE9PT1BZXx8KEZlLnBpcGVzLnNwbGljZShBZSwxKSxGZS5waXBlc0NvdW50LT0xLDE9PT1GZS5waXBlc0NvdW50JiYoRmUucGlwZXM9RmUucGlwZXNbMF0pLERlLmVtaXQoInVucGlwZSIsdGhpcyxSZSkpLHRoaXN9''@;'; put 'put ''LFYucHJvdG90eXBlLmFkZExpc3RlbmVyPVYucHJvdG90eXBlLm9uPWZ1bmN0aW9uKERlLEZlKXt2YXIgUmU9Qi5wcm90b3R5cGUub24uY2FsbCh0aGlzLERlLEZlKSxJZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PURlPyhJZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxp''@;'; put 'put ''c3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PUllLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1EZSYmIUllLmVuZEVtaXR0ZWQmJiFJZS5yZWFkYWJsZUxpc3RlbmluZyYmKEllLnJlYWRhYmxlTGlzdGVuaW5nPUllLm5lZWRSZWFkYWJsZT0hMCxJZS5mbG93aW5n''@;'; put 'put ''PSExLEllLmVtaXR0ZWRSZWFkYWJsZT0hMSxOKCJvbiByZWFkYWJsZSIsSWUubGVuZ3RoLEllLnJlYWRpbmcpLEllLmxlbmd0aD9FKHRoaXMpOkllLnJlYWRpbmd8fHByb2Nlc3MubmV4dFRpY2sod2UsdGhpcykpLFJlfSxWLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihEZSxG''@;'; put 'put ''ZSl7dmFyIFJlPUIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxEZSxGZSk7cmV0dXJuInJlYWRhYmxlIj09PURlJiZwcm9jZXNzLm5leHRUaWNrKHNlLHRoaXMpLFJlfSxWLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oRGUpe3ZhciBGZT1CLnByb3Rv''@;'; put 'put ''dHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09RGV8fHZvaWQgMD09PURlKSYmcHJvY2Vzcy5uZXh0VGljayhzZSx0aGlzKSxGZX0sVi5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIERlPXRoaXMuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGU7cmV0dXJuIERlLmZsb3dpbmd8fChOKCJyZXN1bWUiKSxEZS5mbG93aW5nPSFEZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbiBVZShEZSxGZSl7RmUucmVzdW1lU2NoZWR1bGVkfHwoRmUucmVzdW1lU2NoZWR1bGVkPSEwLHByb2Nlc3MubmV4dFRpY2soSmUsRGUsRmUpKX0odGhp''@;'; put 'put ''cyxEZSkpLERlLnBhdXNlZD0hMSx0aGlzfSxWLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBOKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihOKCJwYXVzZSIpLHRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LFYucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oRGUpe3ZhciBGZT10aGlzLFJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9ITE7Zm9yKHZhciBW''@;'; put 'put ''ZSBpbiBEZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKE4oIndyYXBwZWQgZW5kIiksUmUuZGVjb2RlciYmIVJlLmVuZGVkKXt2YXIgQWU9UmUuZGVjb2Rlci5lbmQoKTtBZSYmQWUubGVuZ3RoJiZGZS5wdXNoKEFlKX1GZS5wdXNoKG51bGwpfSksRGUub24oImRhdGEiLGZ1bmN0aW9uKEFlKXtO''@;'; put 'put ''KCJ3cmFwcGVkIGRhdGEiKSxSZS5kZWNvZGVyJiYoQWU9UmUuZGVjb2Rlci53cml0ZShBZSkpLFJlLm9iamVjdE1vZGUmJm51bGw9PUFlfHwhKFJlLm9iamVjdE1vZGV8fEFlJiZBZS5sZW5ndGgpfHxGZS5wdXNoKEFlKXx8KEllPSEwLERlLnBhdXNlKCkpfSksRGUpdm9pZCAwPT09dGhpc1tW''@;'; put 'put ''ZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBEZVtWZV0mJih0aGlzW1ZlXT1mdW5jdGlvbihfdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIERlW190XS5hcHBseShEZSxhcmd1bWVudHMpfX0oVmUpKTtmb3IodmFyIGtlPTA7a2U8VGUubGVuZ3RoO2tlKyspRGUub24oVGVba2VdLHRoaXMuZW1p''@;'; put 'put ''dC5iaW5kKHRoaXMsVGVba2VdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oQWUpe04oIndyYXBwZWQgX3JlYWQiLEFlKSxJZSYmKEllPSExLERlLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFYucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9y''@;'; put 'put ''XT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1sZSYmKGxlPXkoMTI2ODMpKSxsZSh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKEZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5mbG93aW5nPUZlKX19KSxWLl9mcm9tTGlzdD1NZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmKFYuZnJvbT1mdW5jdGlvbihEZSxGZSl7cmV0dXJuIHZvaWQgMD09PW1lJiYobWU9eSg0Nzc2NSkpLG1lKFYsRGUsRmUpfSl9LDQzNDEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Tzt2YXIgST15KDMwNDY0KS5GLF89SS5FUlJfTUVU''@;'; put 'put ''SE9EX05PVF9JTVBMRU1FTlRFRCxnPUkuRVJSX01VTFRJUExFX0NBTExCQUNLLEI9SS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHc9SS5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsUD15KDEwMzApO2Z1bmN0aW9uIEYoTCxLKXt2YXIgVT10aGlzLl90cmFuc2Zvcm1T''@;'; put 'put ''dGF0ZTtVLnRyYW5zZm9ybWluZz0hMTt2YXIgVz1VLndyaXRlY2I7aWYobnVsbD09PVcpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBnKTtVLndyaXRlY2h1bms9bnVsbCxVLndyaXRlY2I9bnVsbCxudWxsIT1LJiZ0aGlzLnB1c2goSyksVyhMKTt2YXIgWT10aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlO1kucmVhZGluZz0hMSwoWS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBPKEwpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyhMKTtQLmNhbGwodGhpcyxMKSx0aGlzLl90''@;'; put 'put ''cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Ri5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlz''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsTCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBMLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1MLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIEwuZmx1c2gmJih0aGlzLl9mbHVzaD1MLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix6KX1m''@;'; put 'put ''dW5jdGlvbiB6KCl7dmFyIEw9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP04odGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKGZ1bmN0aW9uKEssVSl7TihMLEssVSl9KX1mdW5jdGlvbiBOKEwsSyxVKXtpZihLKXJl''@;'; put 'put ''dHVybiBMLmVtaXQoImVycm9yIixLKTtpZihudWxsIT1VJiZMLnB1c2goVSksTC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHc7aWYoTC5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBCO3JldHVybiBMLnB1c2gobnVsbCl9eSg3MTk5MykoTyxQKSxPLnBy''@;'; put 'put ''b3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsUC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsTCxLKX0sTy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihMLEssVSl7VShuZXcgXygiX3RyYW5zZm9ybSgp''@;'; put 'put ''IikpfSxPLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKFcud3JpdGVjYj1VLFcud3JpdGVjaHVuaz1MLFcud3JpdGVlbmNvZGluZz1LLCFXLnRyYW5zZm9ybWluZyl7dmFyIFk9dGhpcy5fcmVhZGFibGVTdGF0ZTsoVy5uZWVk''@;'; put 'put ''VHJhbnNmb3JtfHxZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZLmhpZ2hXYXRlck1hcmspfX0sTy5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PUsud3JpdGVjaHVua3x8Sy50''@;'; put 'put ''cmFuc2Zvcm1pbmc/Sy5uZWVkVHJhbnNmb3JtPSEwOihLLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oSy53cml0ZWNodW5rLEsud3JpdGVlbmNvZGluZyxLLmFmdGVyVHJhbnNmb3JtKSl9LE8ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEwsSyl7UC5wcm90b3R5cGUuX2Rl''@;'; put 'put ''c3Ryb3kuY2FsbCh0aGlzLEwsZnVuY3Rpb24oVSl7SyhVKX0pfX0sMTU0OTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhvdCl7dmFyIE1lPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIEplKG90''@;'; put 'put ''LE1lLHZlKXt2YXIgWGU9b3QuZW50cnk7Zm9yKG90LmVudHJ5PW51bGw7WGU7KXt2YXIgamU9WGUuY2FsbGJhY2s7TWUucGVuZGluZ2NiLS0samUodmUpLFhlPVhlLm5leHR9TWUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9b3R9KE1lLG90KX19dmFyIGc7dWUuZXhwb3J0cz16ZSx6ZS5Xcml0''@;'; put 'put ''YWJsZVN0YXRlPVRlO3ZhciBTZSxCPXtkZXByZWNhdGU6eSgzMzk4KX0sdz15KDEyNjAxKSxQPXkoODM4MzgpLkJ1ZmZlcixGPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5j''@;'; put 'put ''dGlvbigpe30sTj15KDg4MTUyKSxLPXkoMjI4MjcpLmdldEhpZ2hXYXRlck1hcmssVT15KDMwNDY0KS5GLFc9VS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxZPVUuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQscT1VLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxlZT1VLkVSUl9TVFJFQU1fQ0FOTk9U''@;'; put 'put ''X1BJUEUsSj1VLkVSUl9TVFJFQU1fREVTVFJPWUVELG5lPVUuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxpZT1VLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELGxlPVUuRVJSX1VOS05PV05fRU5DT0RJTkcsbWU9Ti5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBfZSgpe31mdW5jdGlvbiBUZShv''@;'; put 'put ''dCxNZSx2ZSl7Zz1nfHx5KDEwMzApLCJib29sZWFuIiE9dHlwZW9mIHZlJiYodmU9TWUgaW5zdGFuY2VvZiBnKSx0aGlzLm9iamVjdE1vZGU9ISEob3Q9b3R8fHt9KS5vYmplY3RNb2RlLHZlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFvdC53cml0YWJsZU9iamVjdE1v''@;'; put 'put ''ZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1LKHRoaXMsb3QsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsdmUpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRo''@;'; put 'put ''aXMuZGVjb2RlU3RyaW5ncz0hKCExPT09b3QuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9b3QuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNz''@;'; put 'put ''aW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihqZSl7IWZ1bmN0aW9uIGoob3QsTWUpe3ZhciB2ZT1vdC5fd3JpdGFibGVTdGF0ZSxYZT12ZS5zeW5jLGplPXZlLndyaXRlY2I7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGplKXRocm93IG5ldyBxO2lmKGZ1bmN0aW9uIEgob3Qpe290LndyaXRp''@;'; put 'put ''bmc9ITEsb3Qud3JpdGVjYj1udWxsLG90Lmxlbmd0aC09b3Qud3JpdGVsZW4sb3Qud3JpdGVsZW49MH0odmUpLE1lKSFmdW5jdGlvbiBUKG90LE1lLHZlLFhlLGplKXstLU1lLnBlbmRpbmdjYix2ZT8ocHJvY2Vzcy5uZXh0VGljayhqZSxYZSkscHJvY2Vzcy5uZXh0VGljayh3ZSxvdCxNZSks''@;'; put 'put ''b3QuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG1lKG90LFhlKSk6KGplKFhlKSxvdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbWUob3QsWGUpLHdlKG90LE1lKSl9KG90LHZlLFhlLE1lLGplKTtlbHNle3ZhciBEZT1hZSh2ZSl8fG90LmRlc3Ryb3llZDshRGUmJiF2''@;'; put 'put ''ZS5jb3JrZWQmJiF2ZS5idWZmZXJQcm9jZXNzaW5nJiZ2ZS5idWZmZXJlZFJlcXVlc3QmJkEob3QsdmUpLFhlP3Byb2Nlc3MubmV4dFRpY2soRSxvdCx2ZSxEZSxqZSk6RShvdCx2ZSxEZSxqZSl9fShNZSxqZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZl''@;'; put 'put ''cmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PW90LmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhb3QuYXV0b0Rl''@;'; put 'put ''c3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBfKHRoaXMpfWZ1bmN0aW9uIHplKG90KXt2YXIgTWU9dGhpcyBpbnN0YW5jZW9mKGc9Z3x8eSgxMDMwKSk7aWYoIU1lJiYhU2UuY2FsbCh6ZSx0aGlzKSlyZXR1cm4gbmV3IHplKG90''@;'; put 'put ''KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBUZShvdCx0aGlzLE1lKSx0aGlzLndyaXRhYmxlPSEwLG90JiYoImZ1bmN0aW9uIj09dHlwZW9mIG90LndyaXRlJiYodGhpcy5fd3JpdGU9b3Qud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBvdC53cml0ZXYmJih0aGlzLl93cml0ZXY9b3Qud3Jp''@;'; put 'put ''dGV2KSwiZnVuY3Rpb24iPT10eXBlb2Ygb3QuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9b3QuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIG90LmZpbmFsJiYodGhpcy5fZmluYWw9b3QuZmluYWwpKSx3LmNhbGwodGhpcyl9ZnVuY3Rpb24gQyhvdCxNZSx2ZSxYZSxqZSxEZSxGZSl7TWUu''@;'; put 'put ''d3JpdGVsZW49WGUsTWUud3JpdGVjYj1GZSxNZS53cml0aW5nPSEwLE1lLnN5bmM9ITAsTWUuZGVzdHJveWVkP01lLm9ud3JpdGUobmV3IEooIndyaXRlIikpOnZlP290Ll93cml0ZXYoamUsTWUub253cml0ZSk6b3QuX3dyaXRlKGplLERlLE1lLm9ud3JpdGUpLE1lLnN5bmM9ITF9ZnVuY3Rp''@;'; put 'put ''b24gRShvdCxNZSx2ZSxYZSl7dmV8fGZ1bmN0aW9uIG0ob3QsTWUpezA9PT1NZS5sZW5ndGgmJk1lLm5lZWREcmFpbiYmKE1lLm5lZWREcmFpbj0hMSxvdC5lbWl0KCJkcmFpbiIpKX0ob3QsTWUpLE1lLnBlbmRpbmdjYi0tLFhlKCksd2Uob3QsTWUpfWZ1bmN0aW9uIEEob3QsTWUpe01lLmJ1''@;'; put 'put ''ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHZlPU1lLmJ1ZmZlcmVkUmVxdWVzdDtpZihvdC5fd3JpdGV2JiZ2ZSYmdmUubmV4dCl7dmFyIGplPW5ldyBBcnJheShNZS5idWZmZXJlZFJlcXVlc3RDb3VudCksRGU9TWUuY29ya2VkUmVxdWVzdHNGcmVlO0RlLmVudHJ5PXZlO2Zvcih2YXIgRmU9MCxS''@;'; put 'put ''ZT0hMDt2ZTspamVbRmVdPXZlLHZlLmlzQnVmfHwoUmU9ITEpLHZlPXZlLm5leHQsRmUrPTE7amUuYWxsQnVmZmVycz1SZSxDKG90LE1lLCEwLE1lLmxlbmd0aCxqZSwiIixEZS5maW5pc2gpLE1lLnBlbmRpbmdjYisrLE1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxEZS5uZXh0PyhNZS5j''@;'; put 'put ''b3JrZWRSZXF1ZXN0c0ZyZWU9RGUubmV4dCxEZS5uZXh0PW51bGwpOk1lLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgXyhNZSksTWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7dmU7KXt2YXIgSWU9dmUuY2h1bms7aWYoQyhvdCxNZSwhMSxNZS5vYmplY3RNb2RlPzE6SWUubGVu''@;'; put 'put ''Z3RoLEllLHZlLmVuY29kaW5nLHZlLmNhbGxiYWNrKSx2ZT12ZS5uZXh0LE1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sTWUud3JpdGluZylicmVha31udWxsPT09dmUmJihNZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfU1lLmJ1ZmZlcmVkUmVxdWVzdD12ZSxNZS5idWZmZXJQcm9jZXNz''@;'; put 'put ''aW5nPSExfWZ1bmN0aW9uIGFlKG90KXtyZXR1cm4gb3QuZW5kaW5nJiYwPT09b3QubGVuZ3RoJiZudWxsPT09b3QuYnVmZmVyZWRSZXF1ZXN0JiYhb3QuZmluaXNoZWQmJiFvdC53cml0aW5nfWZ1bmN0aW9uIHRlKG90LE1lKXtvdC5fZmluYWwoZnVuY3Rpb24odmUpe01lLnBlbmRpbmdjYi0t''@;'; put 'put ''LHZlJiZtZShvdCx2ZSksTWUucHJlZmluaXNoZWQ9ITAsb3QuZW1pdCgicHJlZmluaXNoIiksd2Uob3QsTWUpfSl9ZnVuY3Rpb24gd2Uob3QsTWUpe3ZhciB2ZT1hZShNZSk7aWYodmUmJihmdW5jdGlvbiBzZShvdCxNZSl7IU1lLnByZWZpbmlzaGVkJiYhTWUuZmluYWxDYWxsZWQmJigiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2Ygb3QuX2ZpbmFsfHxNZS5kZXN0cm95ZWQ/KE1lLnByZWZpbmlzaGVkPSEwLG90LmVtaXQoInByZWZpbmlzaCIpKTooTWUucGVuZGluZ2NiKyssTWUuZmluYWxDYWxsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayh0ZSxvdCxNZSkpKX0ob3QsTWUpLDA9PT1NZS5wZW5kaW5n''@;'; put 'put ''Y2ImJihNZS5maW5pc2hlZD0hMCxvdC5lbWl0KCJmaW5pc2giKSxNZS5hdXRvRGVzdHJveSkpKXt2YXIgWGU9b3QuX3JlYWRhYmxlU3RhdGU7KCFYZXx8WGUuYXV0b0Rlc3Ryb3kmJlhlLmVuZEVtaXR0ZWQpJiZvdC5kZXN0cm95KCl9cmV0dXJuIHZlfXkoNzE5OTMpKHplLHcpLFRlLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIE1lPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LHZlPVtdO01lOyl2ZS5wdXNoKE1lKSxNZT1NZS5uZXh0O3JldHVybiB2ZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFRlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0''@;'; put 'put ''OkIuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KFNlPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZSxTeW1ib2wu''@;'; put 'put ''aGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKE1lKXtyZXR1cm4hIVNlLmNhbGwodGhpcyxNZSl8fHRoaXM9PT16ZSYmTWUmJk1lLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgVGV9fSkpOlNlPWZ1bmN0aW9uKE1lKXtyZXR1cm4gTWUgaW5zdGFuY2VvZiB0aGlzfSx6ZS5wcm90b3R5cGUu''@;'; put 'put ''cGlwZT1mdW5jdGlvbigpe21lKHRoaXMsbmV3IGVlKX0semUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG90LE1lLHZlKXt2YXIgWGU9dGhpcy5fd3JpdGFibGVTdGF0ZSxqZT0hMSxEZT0hWGUub2JqZWN0TW9kZSYmZnVuY3Rpb24geihvdCl7cmV0dXJuIFAuaXNCdWZmZXIob3QpfHxvdCBp''@;'; put 'put ''bnN0YW5jZW9mIEZ9KG90KTtyZXR1cm4gRGUmJiFQLmlzQnVmZmVyKG90KSYmKG90PWZ1bmN0aW9uIE8ob3Qpe3JldHVybiBQLmZyb20ob3QpfShvdCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBNZSYmKHZlPU1lLE1lPW51bGwpLERlP01lPSJidWZmZXIiOk1lfHwoTWU9WGUuZGVmYXVsdEVuY29k''@;'; put 'put ''aW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgdmUmJih2ZT1fZSksWGUuZW5kaW5nP2Z1bmN0aW9uIFYob3QsTWUpe3ZhciB2ZT1uZXcgaWU7bWUob3QsdmUpLHByb2Nlc3MubmV4dFRpY2soTWUsdmUpfSh0aGlzLHZlKTooRGV8fGZ1bmN0aW9uIHAob3QsTWUsdmUsWGUpe3ZhciBqZTtyZXR1cm4g''@;'; put 'put ''bnVsbD09PXZlP2plPW5ldyBuZToic3RyaW5nIiE9dHlwZW9mIHZlJiYhTWUub2JqZWN0TW9kZSYmKGplPW5ldyBXKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSx2ZSkpLCFqZXx8KG1lKG90LGplKSxwcm9jZXNzLm5leHRUaWNrKFhlLGplKSwhMSl9KHRoaXMsWGUsb3QsdmUpKSYmKFhl''@;'; put 'put ''LnBlbmRpbmdjYisrLGplPWZ1bmN0aW9uIHgob3QsTWUsdmUsWGUsamUsRGUpe2lmKCF2ZSl7dmFyIEZlPWZ1bmN0aW9uIGIob3QsTWUsdmUpe3JldHVybiFvdC5vYmplY3RNb2RlJiYhMSE9PW90LmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgTWUmJihNZT1QLmZyb20oTWUsdmUp''@;'; put 'put ''KSxNZX0oTWUsWGUsamUpO1hlIT09RmUmJih2ZT0hMCxqZT0iYnVmZmVyIixYZT1GZSl9dmFyIFJlPU1lLm9iamVjdE1vZGU/MTpYZS5sZW5ndGg7TWUubGVuZ3RoKz1SZTt2YXIgSWU9TWUubGVuZ3RoPE1lLmhpZ2hXYXRlck1hcms7aWYoSWV8fChNZS5uZWVkRHJhaW49ITApLE1lLndyaXRp''@;'; put 'put ''bmd8fE1lLmNvcmtlZCl7dmFyIFZlPU1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q7TWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6WGUsZW5jb2Rpbmc6amUsaXNCdWY6dmUsY2FsbGJhY2s6RGUsbmV4dDpudWxsfSxWZT9WZS5uZXh0PU1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6TWUuYnVmZmVy''@;'; put 'put ''ZWRSZXF1ZXN0PU1lLmxhc3RCdWZmZXJlZFJlcXVlc3QsTWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBDKG90LE1lLCExLFJlLFhlLGplLERlKTtyZXR1cm4gSWV9KHRoaXMsWGUsRGUsb3QsTWUsdmUpKSxqZX0semUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmNvcmtlZCsrfSx6ZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG90PXRoaXMuX3dyaXRhYmxlU3RhdGU7b3QuY29ya2VkJiYob3QuY29ya2VkLS0sIW90LndyaXRpbmcmJiFvdC5jb3JrZWQmJiFvdC5idWZmZXJQcm9jZXNzaW5nJiZvdC5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3QmJkEodGhpcyxvdCkpfSx6ZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKE1lKXtpZigic3RyaW5nIj09dHlwZW9mIE1lJiYoTWU9TWUudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIs''@;'; put 'put ''InVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoTWUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgbGUoTWUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1NZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUu''@;'; put 'put ''cHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSwid3JpdGFibGVI''@;'; put 'put ''aWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHplLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24ob3QsTWUsdmUpe3ZlKG5ldyBZKCJfd3JpdGUoKSIpKX0semUucHJvdG90eXBlLl93''@;'; put 'put ''cml0ZXY9bnVsbCx6ZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKG90LE1lLHZlKXt2YXIgWGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygb3Q/KHZlPW90LG90PW51bGwsTWU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiYodmU9TWUsTWU9bnVsbCks''@;'; put 'put ''bnVsbCE9b3QmJnRoaXMud3JpdGUob3QsTWUpLFhlLmNvcmtlZCYmKFhlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLFhlLmVuZGluZ3x8ZnVuY3Rpb24gVWUob3QsTWUsdmUpe01lLmVuZGluZz0hMCx3ZShvdCxNZSksdmUmJihNZS5maW5pc2hlZD9wcm9jZXNzLm5leHRUaWNrKHZlKTpvdC5v''@;'; put 'put ''bmNlKCJmaW5pc2giLHZlKSksTWUuZW5kZWQ9ITAsb3Qud3JpdGFibGU9ITF9KHRoaXMsWGUsdmUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNl''@;'; put 'put ''dDpmdW5jdGlvbihNZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPU1lKX19KSx6ZS5wcm90b3R5cGUuZGVzdHJveT1OLmRlc3Ryb3ksemUucHJvdG90eXBlLl91bmRlc3Ryb3k9Ti51bmRlc3Ryb3ksemUucHJvdG90eXBlLl9kZXN0cm95PWZ1''@;'; put 'put ''bmN0aW9uKG90LE1lKXtNZShvdCl9fSwxMjY4MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtmdW5jdGlvbiBfKGllLGxlLG1lKXtyZXR1cm4gbGU9ZnVuY3Rpb24gZyhpZSl7dmFyIGxlPWZ1bmN0aW9uIEIoaWUsbGUpe2lmKCJvYmplY3QiIT10eXBlb2YgaWV8fG51bGw9PT1pZSly''@;'; put 'put ''ZXR1cm4gaWU7dmFyIG1lPWllW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bWUpe3ZhciBfZT1tZS5jYWxsKGllLGxlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgX2UpcmV0dXJuIF9lO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bGU/U3RyaW5nOk51bWJlcikoaWUpfShpZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsZT9sZTpTdHJpbmcobGUpfShsZSksbGUgaW4gaWU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGllLGxlLHt2YWx1''@;'; put 'put ''ZTptZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmllW2xlXT1tZSxpZX12YXIgdz15KDU3ODU0KSxQPVN5bWJvbCgibGFzdFJlc29sdmUiKSxGPVN5bWJvbCgibGFzdFJlamVjdCIpLE89U3ltYm9sKCJlcnJvciIpLHo9U3ltYm9sKCJlbmRlZCIpLE49U3lt''@;'; put 'put ''Ym9sKCJsYXN0UHJvbWlzZSIpLEw9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksSz1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIFUoaWUsbGUpe3JldHVybnt2YWx1ZTppZSxkb25lOmxlfX1mdW5jdGlvbiBXKGllKXt2YXIgbGU9aWVbUF07aWYobnVsbCE9PWxlKXt2YXIgbWU9aWVbS10ucmVh''@;'; put 'put ''ZCgpO251bGwhPT1tZSYmKGllW05dPW51bGwsaWVbUF09bnVsbCxpZVtGXT1udWxsLGxlKFUobWUsITEpKSl9fWZ1bmN0aW9uIFkoaWUpe3Byb2Nlc3MubmV4dFRpY2soVyxpZSl9dmFyIGVlPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLEo9T2JqZWN0LnNldFByb3RvdHlw''@;'; put 'put ''ZU9mKChfKEk9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tLXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBsZT10aGlzLG1lPXRoaXNbT107aWYobnVsbCE9PW1lKXJldHVybiBQcm9taXNlLnJlamVjdChtZSk7aWYodGhpc1t6XSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFUodm9pZCAwLCEwKSk7''@;'; put 'put ''aWYodGhpc1tLXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHplLFYpe3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtsZVtPXT9WKGxlW09dKTp6ZShVKHZvaWQgMCwhMCkpfSl9KTt2YXIgVGUsX2U9dGhpc1tOXTtpZihfZSlUZT1uZXcgUHJvbWlzZShmdW5jdGlv''@;'; put 'put ''biBxKGllLGxlKXtyZXR1cm4gZnVuY3Rpb24obWUsX2Upe2llLnRoZW4oZnVuY3Rpb24oKXtsZVt6XT9tZShVKHZvaWQgMCwhMCkpOmxlW0xdKG1lLF9lKX0sX2UpfX0oX2UsdGhpcykpO2Vsc2V7dmFyIFNlPXRoaXNbS10ucmVhZCgpO2lmKG51bGwhPT1TZSlyZXR1cm4gUHJvbWlzZS5yZXNv''@;'; put 'put ''bHZlKFUoU2UsITEpKTtUZT1uZXcgUHJvbWlzZSh0aGlzW0xdKX1yZXR1cm4gdGhpc1tOXT1UZSxUZX19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxfKEksInJldHVybiIsZnVuY3Rpb24oKXt2YXIgbGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVu''@;'; put 'put ''Y3Rpb24obWUsX2Upe2xlW0tdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihUZSl7VGU/X2UoVGUpOm1lKFUodm9pZCAwLCEwKSl9KX0pfSksSSksZWUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24obGUpe3ZhciBtZSxfZT1PYmplY3QuY3JlYXRlKEosKF8obWU9e30sSyx7dmFsdWU6bGUsd3JpdGFibGU6''@;'; put 'put ''ITB9KSxfKG1lLFAse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKG1lLEYse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKG1lLE8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKG1lLHose3ZhbHVlOmxlLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxfKG1l''@;'; put 'put ''LEwse3ZhbHVlOmZ1bmN0aW9uKFNlLHplKXt2YXIgVj1fZVtLXS5yZWFkKCk7Vj8oX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsU2UoVShWLCExKSkpOihfZVtQXT1TZSxfZVtGXT16ZSl9LHdyaXRhYmxlOiEwfSksbWUpKTtyZXR1cm4gX2VbTl09bnVsbCx3KGxlLGZ1bmN0aW9u''@;'; put 'put ''KFRlKXtpZihUZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVRlLmNvZGUpe3ZhciBTZT1fZVtGXTtyZXR1cm4gbnVsbCE9PVNlJiYoX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsU2UoVGUpKSx2b2lkKF9lW09dPVRlKX12YXIgemU9X2VbUF07bnVsbCE9PXplJiYo''@;'; put 'put ''X2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsemUoVSh2b2lkIDAsITApKSksX2Vbel09ITB9KSxsZS5vbigicmVhZGFibGUiLFkuYmluZChudWxsLF9lKSksX2V9fSw3NTIyNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKFkscSl7dmFyIGVlPU9iamVjdC5rZXlz''@;'; put 'put ''KFkpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoWSk7cSYmKEo9Si5maWx0ZXIoZnVuY3Rpb24obmUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFksbmUpLmVudW1lcmFibGV9KSksZWUu''@;'; put 'put ''cHVzaC5hcHBseShlZSxKKX1yZXR1cm4gZWV9ZnVuY3Rpb24gXyhZKXtmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9bnVsbCE9YXJndW1lbnRzW3FdP2FyZ3VtZW50c1txXTp7fTtxJTI/SShPYmplY3QoZWUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKEope2coWSxK''@;'; put 'put ''LGVlW0pdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZWUpKTpJKE9iamVjdChlZSkpLmZvckVhY2goZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFks''@;'; put 'put ''SixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVlLEopKX0pfXJldHVybiBZfWZ1bmN0aW9uIGcoWSxxLGVlKXtyZXR1cm4ocT1GKHEpKWluIFk/T2JqZWN0LmRlZmluZVByb3BlcnR5KFkscSx7dmFsdWU6ZWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpZW3FdPWVlLFl9ZnVuY3Rpb24gdyhZLHEpe2Zvcih2YXIgZWU9MDtlZTxxLmxlbmd0aDtlZSsrKXt2YXIgSj1xW2VlXTtKLmVudW1lcmFibGU9Si5lbnVtZXJhYmxlfHwhMSxKLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSiYmKEoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShZLEYoSi5rZXkpLEopfX1mdW5jdGlvbiBGKFkpe3ZhciBxPWZ1bmN0aW9uIE8oWSxxKXtpZigib2JqZWN0IiE9dHlwZW9mIFl8fG51bGw9PT1ZKXJldHVybiBZO3ZhciBlZT1ZW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciBKPWVlLmNhbGwoWSxxfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4gSjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXE/U3RyaW5nOk51bWJlcikoWSl9KFksInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgcT9xOlN0cmluZyhxKX12YXIgTj15KDgzODM4KS5CdWZmZXIsSz15KDYzNzc5KS5pbnNwZWN0LFU9SyYmSy5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBXKFkscSxlZSl7Ti5wcm90b3R5cGUuY29weS5jYWxsKFkscSxlZSl9dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bigpe2Z1bmN0aW9uIFkoKXsoZnVuY3Rpb24gQihZLHEpe2lmKCEoWSBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0w''@;'; put 'put ''fXJldHVybiBmdW5jdGlvbiBQKFkscSxlZSl7cSYmdyhZLnByb3RvdHlwZSxxKSxlZSYmdyhZLGVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oWSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6''@;'; put 'put ''bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1KOnRoaXMuaGVhZD1KLHRoaXMudGFpbD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMu''@;'; put 'put ''dGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFk''@;'; put 'put ''Lm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBK''@;'; put 'put ''PXRoaXMuaGVhZCxuZT0iIitKLmRhdGE7Sj1KLm5leHQ7KW5lKz1lZStKLmRhdGE7cmV0dXJuIG5lfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBOLmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCksbmU9''@;'; put 'put ''dGhpcy5oZWFkLGllPTA7bmU7KVcobmUuZGF0YSxKLGllKSxpZSs9bmUuZGF0YS5sZW5ndGgsbmU9bmUubmV4dDtyZXR1cm4gSn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciBuZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhuZT10aGlzLmhlYWQu''@;'; put 'put ''ZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOm5lPWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxuZX19LHtrZXk6ImZpcnN0Iix2YWx1''@;'; put 'put ''ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlzLmhlYWQsbmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5ndGg7Sj1KLm5leHQ7KXt2YXIgbGU9Si5kYXRhLG1lPWVlPmxlLmxlbmd0aD9s''@;'; put 'put ''ZS5sZW5ndGg6ZWU7aWYoaWUrPW1lPT09bGUubGVuZ3RoP2xlOmxlLnNsaWNlKDAsZWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytuZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT1sZS5zbGljZShtZSkpO2JyZWFr''@;'; put 'put ''fSsrbmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1uZSxpZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9jVW5zYWZlKGVlKSxuZT10aGlzLmhlYWQsaWU9MTtmb3IobmUuZGF0YS5jb3B5KEopLGVlLT1uZS5kYXRhLmxlbmd0aDtuZT1uZS5uZXh0Oyl7''@;'; put 'put ''dmFyIGxlPW5lLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihsZS5jb3B5KEosSi5sZW5ndGgtZWUsMCxtZSksMD09KGVlLT1tZSkpe21lPT09bGUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1uZS5uZXh0P25lLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9bmUs''@;'; put 'put ''bmUuZGF0YT1sZS5zbGljZShtZSkpO2JyZWFrfSsraWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0se2tleTpVLHZhbHVlOmZ1bmN0aW9uKGVlLEope3JldHVybiBLKHRoaXMsXyhfKHt9LEopLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFl9KCl9LDg4MTUyOnVlPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkodyxQKXtnKHcsUCksSSh3KX1mdW5jdGlvbiBJKHcpe3cuX3dyaXRhYmxlU3RhdGUmJiF3Ll93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8dy5fcmVhZGFibGVTdGF0ZSYmIXcuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHx3LmVtaXQoImNsb3NlIil9''@;'; put 'put ''ZnVuY3Rpb24gZyh3LFApe3cuZW1pdCgiZXJyb3IiLFApfXVlLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24gWCh3LFApe3ZhciBGPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oUD9QKHcpOncmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhnLHRoaXMsdykpOnByb2Nlc3Mu''@;'; put 'put ''bmV4dFRpY2soZyx0aGlzLHcpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kod3x8bnVsbCxmdW5j''@;'; put 'put ''dGlvbihOKXshUCYmTj9GLl93cml0YWJsZVN0YXRlP0YuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soSSxGKTooRi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayh5LEYsTikpOnByb2Nlc3MubmV4dFRpY2soeSxGLE4p''@;'; put 'put ''OlA/KHByb2Nlc3MubmV4dFRpY2soSSxGKSxQKE4pKTpwcm9jZXNzLm5leHRUaWNrKEksRil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIF8oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFk''@;'; put 'put ''aW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9y''@;'; put 'put ''T3JEZXN0cm95OmZ1bmN0aW9uIEIodyxQKXt2YXIgRj13Ll9yZWFkYWJsZVN0YXRlLE89dy5fd3JpdGFibGVTdGF0ZTtGJiZGLmF1dG9EZXN0cm95fHxPJiZPLmF1dG9EZXN0cm95P3cuZGVzdHJveShQKTp3LmVtaXQoImVycm9yIixQKX19fSw1Nzg1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST15KDMwNDY0KS5GLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIGcoKXt9dWUuZXhwb3J0cz1mdW5jdGlvbiB3KFAsRixPKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRilyZXR1cm4gdyhQLG51bGwsRik7Rnx8KEY9e30pLE89ZnVuY3Rpb24gXyhQKXt2YXIgRj0h''@;'; put 'put ''MTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRil7Rj0hMDtmb3IodmFyIE89YXJndW1lbnRzLmxlbmd0aCx6PW5ldyBBcnJheShPKSxOPTA7TjxPO04rKyl6W05dPWFyZ3VtZW50c1tOXTtQLmFwcGx5KHRoaXMseil9fX0oT3x8Zyk7dmFyIHo9Ri5yZWFkYWJsZXx8ITEhPT1GLnJlYWRhYmxlJiZQ''@;'; put 'put ''LnJlYWRhYmxlLE49Ri53cml0YWJsZXx8ITEhPT1GLndyaXRhYmxlJiZQLndyaXRhYmxlLEw9ZnVuY3Rpb24oKXtQLndyaXRhYmxlfHxVKCl9LEs9UC5fd3JpdGFibGVTdGF0ZSYmUC5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Tj0hMSxLPSEwLHp8fE8uY2FsbChQKX0s''@;'; put 'put ''Vz1QLl9yZWFkYWJsZVN0YXRlJiZQLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsWT1mdW5jdGlvbigpe3o9ITEsVz0hMCxOfHxPLmNhbGwoUCl9LHE9ZnVuY3Rpb24oaWUpe08uY2FsbChQLGllKX0sZWU9ZnVuY3Rpb24oKXt2YXIgaWU7cmV0dXJuIHomJiFXPygoIVAuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGV8fCFQLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkpOk4mJiFLPygoIVAuX3dyaXRhYmxlU3RhdGV8fCFQLl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkpOnZvaWQgMH0sSj1mdW5jdGlvbigpe1AucmVxLm9uKCJm''@;'; put 'put ''aW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24gQihQKXtyZXR1cm4gUC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBQLmFib3J0fShQKT8oUC5vbigiY29tcGxldGUiLFUpLFAub24oImFib3J0IixlZSksUC5yZXE/SigpOlAub24oInJlcXVlc3QiLEopKTpOJiYhUC5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZSYmKFAub24oImVuZCIsTCksUC5vbigiY2xvc2UiLEwpKSxQLm9uKCJlbmQiLFkpLFAub24oImZpbmlzaCIsVSksITEhPT1GLmVycm9yJiZQLm9uKCJlcnJvciIscSksUC5vbigiY2xvc2UiLGVlKSxmdW5jdGlvbigpe1AucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxQLnJlbW92''@;'; put 'put ''ZUxpc3RlbmVyKCJhYm9ydCIsZWUpLFAucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLEopLFAucmVxJiZQLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJm''@;'; put 'put ''aW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHEpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixlZSl9fX0sNDc3NjU6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5v''@;'; put 'put ''dCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDY4NDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEksZz15KDMwNDY0KS5GLEI9Zy5FUlJfTUlTU0lOR19BUkdTLHc9Zy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBQKFUpe2lmKFUpdGhyb3cgVX1mdW5jdGlvbiB6KFUp''@;'; put 'put ''e1UoKX1mdW5jdGlvbiBOKFUsVyl7cmV0dXJuIFUucGlwZShXKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEsoKXtmb3IodmFyIFU9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShVKSxZPTA7WTxVO1krKylXW1ldPWFyZ3VtZW50c1tZXTt2YXIgcT1mdW5jdGlvbiBMKFUpe3JldHVybiBVLmxl''@;'; put 'put ''bmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFVbVS5sZW5ndGgtMV0/VS5wb3AoKTpQfShXKTtpZihBcnJheS5pc0FycmF5KFdbMF0pJiYoVz1XWzBdKSxXLmxlbmd0aDwyKXRocm93IG5ldyBCKCJzdHJlYW1zIik7dmFyIGVlLEo9Vy5tYXAoZnVuY3Rpb24obmUsaWUpe3ZhciBsZT1pZTxXLmxl''@;'; put 'put ''bmd0aC0xO3JldHVybiBmdW5jdGlvbiBPKFUsVyxZLHEpe3E9ZnVuY3Rpb24gXyhVKXt2YXIgVz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtXfHwoVz0hMCxVLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KHEpO3ZhciBlZT0hMTtVLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlZT0hMH0pLHZvaWQg''@;'; put 'put ''MD09PUkmJihJPXkoNTc4NTQpKSxJKFUse3JlYWRhYmxlOlcsd3JpdGFibGU6WX0sZnVuY3Rpb24obmUpe2lmKG5lKXJldHVybiBxKG5lKTtlZT0hMCxxKCl9KTt2YXIgSj0hMTtyZXR1cm4gZnVuY3Rpb24obmUpe2lmKCFlZSYmIUope2lmKEo9ITAsZnVuY3Rpb24gRihVKXtyZXR1cm4gVS5z''@;'; put 'put ''ZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVLmFib3J0fShVKSlyZXR1cm4gVS5hYm9ydCgpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLmRlc3Ryb3kpcmV0dXJuIFUuZGVzdHJveSgpO3EobmV8fG5ldyB3KCJwaXBlIikpfX19KG5lLGxlLGllPjAsZnVuY3Rpb24oX2Upe2VlfHwoZWU9''@;'; put 'put ''X2UpLF9lJiZKLmZvckVhY2goeiksIWxlJiYoSi5mb3JFYWNoKHopLHEoZWUpKX0pfSk7cmV0dXJuIFcucmVkdWNlKE4pfX0sMjI4Mjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMDQ2NCkuRi5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7dWUuZXhwb3J0cz17Z2V0SGlnaFdhdGVy''@;'; put 'put ''TWFyazpmdW5jdGlvbiBnKEIsdyxQLEYpe3ZhciBPPWZ1bmN0aW9uIF8oQix3LFApe3JldHVybiBudWxsIT1CLmhpZ2hXYXRlck1hcms/Qi5oaWdoV2F0ZXJNYXJrOnc/QltQXTpudWxsfSh3LEYsUCk7aWYobnVsbCE9Tyl7aWYoIWlzRmluaXRlKE8pfHxNYXRoLmZsb29yKE8pIT09T3x8Tzww''@;'; put 'put ''KXRocm93IG5ldyBJKEY/UDoiaGlnaFdhdGVyTWFyayIsTyk7cmV0dXJuIE1hdGguZmxvb3IoTyl9cmV0dXJuIEIub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwxMjYwMToodWUsWCx5KT0+e3VlLmV4cG9ydHM9eSg0NDM1NikuRXZlbnRFbWl0dGVyfSw3ODQ1NDoodWUsWCx5KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST15KDU0MjcyKS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2Ui''@;'; put 'put ''dWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIG5lO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIG5lPWZ1bmN0aW9uIGcoSil7aWYo''@;'; put 'put ''IUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgbmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5h''@;'; put 'put ''cnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihuZSlyZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxuZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgbmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhK''@;'; put 'put ''KSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiBuZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLG5lPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXosbmU9NDticmVhaztjYXNl''@;'; put 'put ''ImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9WSxuZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUobmUpfWZ1bmN0aW9uIFAo''@;'; put 'put ''Sil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciBuZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIE8oSixuZSxpZSl7aWYoMTI4IT0oMTkyJm5lWzBdKSlyZXR1cm4g''@;'; put 'put ''Si5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmbmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZuZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJm5lLmxlbmd0aD4yJiYxMjghPSgxOTImbmVbMl0pKXJldHVybiBKLmxhc3ROZWVk''@;'; put 'put ''PTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIsbmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkp''@;'; put 'put ''OihKLmNvcHkodGhpcy5sYXN0Q2hhcixuZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLG5lKXtpZigoSi5sZW5ndGgtbmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29k''@;'; put 'put ''ZUF0KGllLmxlbmd0aC0xKTtpZihsZT49NTUyOTYmJmxlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4g''@;'; put 'put ''aWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxlIixuZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBVKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVy''@;'; put 'put ''biB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6bmV9ZnVuY3Rpb24gVyhKLG5lKXt2YXIgaWU9KEoubGVuZ3RoLW5lKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixuZSk6''@;'; put 'put ''KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIsbmUsSi5s''@;'; put 'put ''ZW5ndGgtaWUpKX1mdW5jdGlvbiBZKEope3ZhciBuZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP25lK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOm5lfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9T''@;'; put 'put ''dHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5JPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciBuZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2''@;'; put 'put ''b2lkIDA9PT0obmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxKLmxlbmd0aD9uZT9uZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOm5lfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1''@;'; put 'put ''bmN0aW9uIEwoSil7dmFyIG5lPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/bmUrIlx1ZmZmZCI6bmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLG5lKXt2YXIgaWU9ZnVuY3Rpb24gRihKLG5lLGllKXt2YXIgbGU9bmUubGVuZ3RoLTE7''@;'; put 'put ''aWYobGU8aWUpcmV0dXJuIDA7dmFyIG1lPVAobmVbbGVdKTtyZXR1cm4gbWU+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAobmVbbGVdKSk+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1l''@;'; put 'put ''PVAobmVbbGVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpKLmxhc3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEosbmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixuZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3RO''@;'; put 'put ''ZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCxsZSksSi50b1N0cmluZygidXRmOCIsbmUsbGUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90''@;'; put 'put ''YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQt''@;'; put 'put ''PUoubGVuZ3RofX0sNTQyNzI6KHVlLFgseSk9Pnt2YXIgST15KDgzODM4KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5h''@;'; put 'put ''bGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEksWCksWC5CdWZmZXI9QiksZyhfLEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQ''@;'; put 'put ''LEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmls''@;'; put 'put ''bChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw3ODc1NToodWUsWCx5KT0+e3ZhciBJPXkoNjQzMTgpO3VlLmV4cG9ydHM9e1RleHRFbmNvZGVyOkkuVGV4dEVuY29kZXIsVGV4dERl''@;'; put 'put ''Y29kZXI6SS5UZXh0RGVjb2Rlcn19LDY3OTUxOmZ1bmN0aW9uKHVlKXshZnVuY3Rpb24oWCl7InVzZSBzdHJpY3QiO3VlLmV4cG9ydHMmJih1ZS5leHBvcnRzPVgpLFhbImVuY29kaW5nLWluZGV4ZXMiXT17YmlnNTpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1''@;'; put 'put ''OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYy''@;'; put 'put ''Nzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwx''@;'; put 'put ''MzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywy''@;'; put 'put ''MjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUs''@;'; put 'put ''MjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3''@;'; put 'put ''NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4''@;'; put 'put ''NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgz''@;'; put 'put ''ODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwy''@;'; put 'put ''MzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcx''@;'; put 'put ''OCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4''@;'; put 'put ''LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0''@;'; put 'put ''LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIx''@;'; put 'put ''Njg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQw''@;'; put 'put ''MzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4''@;'; put 'put ''NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2''@;'; put 'put ''MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQx''@;'; put 'put ''OTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2Mywy''@;'; put 'put ''MjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMs''@;'; put 'put ''MTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0''@;'; put 'put ''ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0Mywx''@;'; put 'put ''NjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1''@;'; put 'put ''MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAs''@;'; put 'put ''MTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUx''@;'; put 'put ''NCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4''@;'; put 'put ''MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxN2U0LDQwMDYwLDQwNDc5LDQwNjQ0LDI3NTAzLDYzNzUxLDIwMDIzLDEzMTIwNywzODQyOSwyNTE0MywzODA1MCxudWxsLDIwNTM5LDI4MTU4LDE3MTEyMyw0MDg3MCwxNTgxNywzNDk1OSwxNDc3''@;'; put 'put ''OTAsMjg3OTEsMjM3OTcsMTkyMzIsMTUyMDEzLDEzNjU3LDE1NDkyOCwyNDg2NiwxNjY0NTAsMzY3NzUsMzczNjYsMjkwNzMsMjYzOTMsMjk2MjYsMTQ0MDAxLDE3MjI5NSwxNTQ5OSwxMzc2MDAsMTkyMTYsMzA5NDgsMjk2OTgsMjA5MTAsMTY1NjQ3LDE2MzkzLDI3MjM1LDE3MjczMCwxNjkz''@;'; put 'put ''MSwzNDMxOSwxMzM3NDMsMzEyNzQsMTcwMzExLDE2NjYzNCwzODc0MSwyODc0OSwyMTI4NCwxMzkzOTAsMzc4NzYsMzA0MjUsMTY2MzcxLDQwODcxLDMwNjg1LDIwMTMxLDIwNDY0LDIwNjY4LDIwMDE1LDIwMjQ3LDQwODcyLDIxNTU2LDMyMTM5LDIyNjc0LDIyNzM2LDEzODY3OCwyNDIxMCwy''@;'; put 'put ''NDIxNywyNDUxNCwxNDEwNzQsMjU5OTUsMTQ0Mzc3LDI2OTA1LDI3MjAzLDE0NjUzMSwyNzkwMyxudWxsLDI5MTg0LDE0ODc0MSwyOTU4MCwxNjA5MSwxNTAwMzUsMjMzMTcsMjk4ODEsMzU3MTUsMTU0Nzg4LDE1MzIzNywzMTM3OSwzMTcyNCwzMTkzOSwzMjM2NCwzMzUyOCwzNDE5OSw0MDg3''@;'; put 'put ''MywzNDk2MCw0MDg3NCwzNjUzNyw0MDg3NSwzNjgxNSwzNDE0MywzOTM5MiwzNzQwOSw0MDg3NiwxNjczNTMsMTM2MjU1LDE2NDk3LDE3MDU4LDIzMDY2LG51bGwsbnVsbCxudWxsLDM5MDE2LDI2NDc1LDE3MDE0LDIyMzMzLG51bGwsMzQyNjIsMTQ5ODgzLDMzNDcxLDE2MDAxMywxOTU4NSwx''@;'; put 'put ''NTkwOTIsMjM5MzEsMTU4NDg1LDE1OTY3OCw0MDg3Nyw0MDg3OCwyMzQ0Niw0MDg3OSwyNjM0MywzMjM0NywyODI0NywzMTE3OCwxNTc1MiwxNzYwMywxNDM5NTgsMTQxMjA2LDE3MzA2LDE3NzE4LG51bGwsMjM3NjUsMTQ2MjAyLDM1NTc3LDIzNjcyLDE1NjM0LDE0NDcyMSwyMzkyOCw0MDg4''@;'; put 'put ''MiwyOTAxNSwxNzc1MiwxNDc2OTIsMTM4Nzg3LDE5NTc1LDE0NzEyLDEzMzg2LDEzMTQ5MiwxNTg3ODUsMzU1MzIsMjA0MDQsMTMxNjQxLDIyOTc1LDMzMTMyLDM4OTk4LDE3MDIzNCwyNDM3OSwxMzQwNDcsbnVsbCwxMzk3MTMsMTY2MjUzLDE2NjQyLDE4MTA3LDE2ODA1NywxNjEzNSw0MDg4''@;'; put 'put ''MywxNzI0NjksMTY2MzIsMTQyOTQsMTgxNjcsMTU4NzkwLDE2NzY0LDE2NTU1NCwxNjA3NjcsMTc3NzMsMTQ1NDgsMTUyNzMwLDE3NzYxLDE3NjkxLDE5ODQ5LDE5NTc5LDE5ODMwLDE3ODk4LDE2MzI4LDE1MDI4NywxMzkyMSwxNzYzMCwxNzU5NywxNjg3NywyMzg3MCwyMzg4MCwyMzg5NCwx''@;'; put 'put ''NTg2OCwxNDM1MSwyMzk3MiwyMzk5MywxNDM2OCwxNDM5MiwyNDEzMCwyNDI1MywyNDM1NywyNDQ1MSwxNDYwMCwxNDYxMiwxNDY1NSwxNDY2OSwyNDc5MSwyNDg5MywyMzc4MSwxNDcyOSwyNTAxNSwyNTAxNywyNTAzOSwxNDc3NiwyNTEzMiwyNTIzMiwyNTMxNywyNTM2OCwxNDg0MCwyMjE5''@;'; put 'put ''MywxNDg1MSwyNTU3MCwyNTU5NSwyNTYwNywyNTY5MCwxNDkyMywyNTc5MiwyMzgyOSwyMjA0OSw0MDg2MywxNDk5OSwyNTk5MCwxNTAzNywyNjExMSwyNjE5NSwxNTA5MCwyNjI1OCwxNTEzOCwyNjM5MCwxNTE3MCwyNjUzMiwyNjYyNCwxNTE5MiwyNjY5OCwyNjc1NiwxNTIxOCwxNTIxNywx''@;'; put 'put ''NTIyNywyNjg4OSwyNjk0NywyOTI3NiwyNjk4MCwyNzAzOSwyNzAxMywxNTI5MiwyNzA5NCwxNTMyNSwyNzIzNywyNzI1MiwyNzI0OSwyNzI2NiwxNTM0MCwyNzI4OSwxNTM0NiwyNzMwNywyNzMxNywyNzM0OCwyNzM4MiwyNzUyMSwyNzU4NSwyNzYyNiwyNzc2NSwyNzgxOCwxNTU2MywyNzkw''@;'; put 'put ''NiwyNzkxMCwyNzk0MiwyODAzMywxNTU5OSwyODA2OCwyODA4MSwyODE4MSwyODE4NCwyODIwMSwyODI5NCwxNjYzMzYsMjgzNDcsMjgzODYsMjgzNzgsNDA4MzEsMjgzOTIsMjgzOTMsMjg0NTIsMjg0NjgsMTU2ODYsMTQ3MjY1LDI4NTQ1LDI4NjA2LDE1NzIyLDE1NzMzLDI5MTExLDIzNzA1''@;'; put 'put ''LDE1NzU0LDI4NzE2LDE1NzYxLDI4NzUyLDI4NzU2LDI4NzgzLDI4Nzk5LDI4ODA5LDEzMTg3NywxNzM0NSwxMzgwOSwxMzQ4NzIsMTQ3MTU5LDIyNDYyLDE1OTQ0MywyODk5MCwxNTM1NjgsMTM5MDIsMjcwNDIsMTY2ODg5LDIzNDEyLDMxMzA1LDE1MzgyNSwxNjkxNzcsMzEzMzMsMzEzNTcs''@;'; put 'put ''MTU0MDI4LDMxNDE5LDMxNDA4LDMxNDI2LDMxNDI3LDI5MTM3LDE1NjgxMywxNjg0MiwzMTQ1MCwzMTQ1MywzMTQ2NiwxNjg3OSwyMTY4MiwxNTQ2MjUsMzE0OTksMzE1NzMsMzE1MjksMTUyMzM0LDE1NDg3OCwzMTY1MCwzMTU5OSwzMzY5MiwxNTQ1NDgsMTU4ODQ3LDMxNjk2LDMzODI1LDMx''@;'; put 'put ''NjM0LDMxNjcyLDE1NDkxMiwxNTc4OSwxNTQ3MjUsMzM5MzgsMzE3MzgsMzE3NTAsMzE3OTcsMTU0ODE3LDMxODEyLDMxODc1LDE0OTYzNCwzMTkxMCwyNjIzNywxNDg4NTYsMzE5NDUsMzE5NDMsMzE5NzQsMzE4NjAsMzE5ODcsMzE5ODksMzE5NTAsMzIzNTksMTc2OTMsMTU5MzAwLDMyMDkz''@;'; put 'put ''LDE1OTQ0NiwyOTgzNywzMjEzNywzMjE3MSwyODk4MSwzMjE3OSwzMjIxMCwxNDc1NDMsMTU1Njg5LDMyMjI4LDE1NjM1LDMyMjQ1LDEzNzIwOSwzMjIyOSwxNjQ3MTcsMzIyODUsMTU1OTM3LDE1NTk5NCwzMjM2NiwzMjQwMiwxNzE5NSwzNzk5NiwzMjI5NSwzMjU3NiwzMjU3NywzMjU4Mywz''@;'; put 'put ''MTAzMCwxNTYzNjgsMzkzOTMsMzI2NjMsMTU2NDk3LDMyNjc1LDEzNjgwMSwxMzExNzYsMTc3NTYsMTQ1MjU0LDE3NjY3LDE2NDY2NiwzMjc2MiwxNTY4MDksMzI3NzMsMzI3NzYsMzI3OTcsMzI4MDgsMzI4MTUsMTcyMTY3LDE1ODkxNSwzMjgyNywzMjgyOCwzMjg2NSwxNDEwNzYsMTg4MjUs''@;'; put 'put ''MTU3MjIyLDE0NjkxNSwxNTc0MTYsMjY0MDUsMzI5MzUsMTY2NDcyLDMzMDMxLDMzMDUwLDIyNzA0LDE0MTA0NiwyNzc3NSwxNTY4MjQsMTUxNDgwLDI1ODMxLDEzNjMzMCwzMzMwNCwxMzczMTAsMjcyMTksMTUwMTE3LDE1MDE2NSwxNzUzMCwzMzMyMSwxMzM5MDEsMTU4MjkwLDE0NjgxNCwy''@;'; put 'put ''MDQ3MywxMzY0NDUsMzQwMTgsMzM2MzQsMTU4NDc0LDE0OTkyNywxNDQ2ODgsMTM3MDc1LDE0NjkzNiwzMzQ1MCwyNjkwNywxOTQ5NjQsMTY4NTksMzQxMjMsMzM0ODgsMzM1NjIsMTM0Njc4LDEzNzE0MCwxNDAxNywxNDM3NDEsMTQ0NzMwLDMzNDAzLDMzNTA2LDMzNTYwLDE0NzA4MywxNTkx''@;'; put 'put ''MzksMTU4NDY5LDE1ODYxNSwxNDQ4NDYsMTU4MDcsMzM1NjUsMjE5OTYsMzM2NjksMTc2NzUsMTU5MTQxLDMzNzA4LDMzNzI5LDMzNzQ3LDEzNDM4LDE1OTQ0NCwyNzIyMywzNDEzOCwxMzQ2MiwxNTkyOTgsMTQzMDg3LDMzODgwLDE1NDU5NiwzMzkwNSwxNTgyNywxNzYzNiwyNzMwMywzMzg2''@;'; put 'put ''NiwxNDY2MTMsMzEwNjQsMzM5NjAsMTU4NjE0LDE1OTM1MSwxNTkyOTksMzQwMTQsMzM4MDcsMzM2ODEsMTc1NjgsMzM5MzksMzQwMjAsMTU0NzY5LDE2OTYwLDE1NDgxNiwxNzczMSwzNDEwMCwyMzI4MiwxNTkzODUsMTc3MDMsMzQxNjMsMTc2ODYsMjY1NTksMzQzMjYsMTY1NDEzLDE2NTQz''@;'; put 'put ''NSwzNDI0MSwxNTk4ODAsMzQzMDYsMTM2NTc4LDE1OTk0OSwxOTQ5OTQsMTc3NzAsMzQzNDQsMTM4OTYsMTM3Mzc4LDIxNDk1LDE2MDY2NiwzNDQzMCwzNDY3MywxNzIyODAsMzQ3OTgsMTQyMzc1LDM0NzM3LDM0Nzc4LDM0ODMxLDIyMTEzLDM0NDEyLDI2NzEwLDE3OTM1LDM0ODg1LDM0ODg2''@;'; put 'put ''LDE2MTI0OCwxNDY4NzMsMTYxMjUyLDM0OTEwLDM0OTcyLDE4MDExLDM0OTk2LDM0OTk3LDI1NTM3LDM1MDEzLDMwNTgzLDE2MTU1MSwzNTIwNywzNTIxMCwzNTIzOCwzNTI0MSwzNTIzOSwzNTI2MCwxNjY0MzcsMzUzMDMsMTYyMDg0LDE2MjQ5MywzNTQ4NCwzMDYxMSwzNzM3NCwzNTQ3Miwx''@;'; put 'put ''NjIzOTMsMzE0NjUsMTYyNjE4LDE0NzM0MywxODE5NSwxNjI2MTYsMjkwNTIsMzU1OTYsMzU2MTUsMTUyNjI0LDE1MjkzMywzNTY0NywzNTY2MCwzNTY2MSwzNTQ5NywxNTAxMzgsMzU3MjgsMzU3MzksMzU1MDMsMTM2OTI3LDE3OTQxLDM0ODk1LDM1OTk1LDE2MzE1NiwxNjMyMTUsMTk1MDI4''@;'; put 'put ''LDE0MTE3LDE2MzE1NSwzNjA1NCwxNjMyMjQsMTYzMjYxLDM2MTE0LDM2MDk5LDEzNzQ4OCwzNjA1OSwyODc2NCwzNjExMywxNTA3MjksMTYwODAsMzYyMTUsMzYyNjUsMTYzODQyLDEzNTE4OCwxNDk4OTgsMTUyMjgsMTY0Mjg0LDE2MDAxMiwzMTQ2MywzNjUyNSwzNjUzNCwzNjU0NywzNzU4''@;'; put 'put ''OCwzNjYzMywzNjY1MywxNjQ3MDksMTY0ODgyLDM2NzczLDM3NjM1LDE3MjcwMywxMzM3MTIsMzY3ODcsMTg3MzAsMTY2MzY2LDE2NTE4MSwxNDY4NzUsMjQzMTIsMTQzOTcwLDM2ODU3LDE3MjA1MiwxNjU1NjQsMTY1MTIxLDE0MDA2OSwxNDcyMCwxNTk0NDcsMzY5MTksMTY1MTgwLDE2MjQ5''@;'; put 'put ''NCwzNjk2MSwxNjUyMjgsMTY1Mzg3LDM3MDMyLDE2NTY1MSwzNzA2MCwxNjU2MDYsMzcwMzgsMzcxMTcsMzcyMjMsMTUwODgsMzcyODksMzczMTYsMzE5MTYsMTY2MTk1LDEzODg4OSwzNzM5MCwyNzgwNywzNzQ0MSwzNzQ3NCwxNTMwMTcsMzc1NjEsMTY2NTk4LDE0NjU4NywxNjY2NjgsMTUz''@;'; put 'put ''MDUxLDEzNDQ0OSwzNzY3NiwzNzczOSwxNjY2MjUsMTY2ODkxLDI4ODE1LDIzMjM1LDE2NjYyNiwxNjY2MjksMTg3ODksMzc0NDQsMTY2ODkyLDE2Njk2OSwxNjY5MTEsMzc3NDcsMzc5NzksMzY1NDAsMzgyNzcsMzgzMTAsMzc5MjYsMzgzMDQsMjg2NjIsMTcwODEsMTQwOTIyLDE2NTU5Miwx''@;'; put 'put ''MzU4MDQsMTQ2OTkwLDE4OTExLDI3Njc2LDM4NTIzLDM4NTUwLDE2NzQ4LDM4NTYzLDE1OTQ0NSwyNTA1MCwzODU4MiwzMDk2NSwxNjY2MjQsMzg1ODksMjE0NTIsMTg4NDksMTU4OTA0LDEzMTcwMCwxNTY2ODgsMTY4MTExLDE2ODE2NSwxNTAyMjUsMTM3NDkzLDE0NDEzOCwzODcwNSwzNDM3''@;'; put 'put ''MCwzODcxMCwxODk1OSwxNzcyNSwxNzc5NywxNTAyNDksMjg3ODksMjMzNjEsMzg2ODMsMzg3NDgsMTY4NDA1LDM4NzQzLDIzMzcwLDE2ODQyNywzODc1MSwzNzkyNSwyMDY4OCwxNDM1NDMsMTQzNTQ4LDM4NzkzLDM4ODE1LDM4ODMzLDM4ODQ2LDM4ODQ4LDM4ODY2LDM4ODgwLDE1MjY4NCwz''@;'; put 'put ''ODg5NCwyOTcyNCwxNjkwMTEsMzg5MTEsMzg5MDEsMTY4OTg5LDE2MjE3MCwxOTE1MywzODk2NCwzODk2MywzODk4NywzOTAxNCwxNTExOCwxNjAxMTcsMTU2OTcsMTMyNjU2LDE0NzgwNCwxNTMzNTAsMzkxMTQsMzkwOTUsMzkxMTIsMzkxMTEsMTkxOTksMTU5MDE1LDEzNjkxNSwyMTkzNiwz''@;'; put 'put ''OTEzNywzOTE0MiwzOTE0OCwzNzc1MiwzOTIyNSwxNTAwNTcsMTkzMTQsMTcwMDcxLDE3MDI0NSwzOTQxMywzOTQzNiwzOTQ4MywzOTQ0MCwzOTUxMiwxNTMzODEsMTQwMjAsMTY4MTEzLDE3MDk2NSwzOTY0OCwzOTY1MCwxNzA3NTcsMzk2NjgsMTk0NzAsMzk3MDAsMzk3MjUsMTY1Mzc2LDIw''@;'; put 'put ''NTMyLDM5NzMyLDE1ODEyMCwxNDUzMSwxNDM0ODUsMzk3NjAsMzk3NDQsMTcxMzI2LDIzMTA5LDEzNzMxNSwzOTgyMiwxNDgwNDMsMzk5MzgsMzk5MzUsMzk5NDgsMTcxNjI0LDQwNDA0LDE3MTk1OSwxNzI0MzQsMTcyNDU5LDE3MjI1NywxNzIzMjMsMTcyNTExLDQwMzE4LDQwMzIzLDE3MjM0''@;'; put 'put ''MCw0MDQ2MiwyNjc2MCw0MDM4OCwxMzk2MTEsMTcyNDM1LDE3MjU3NiwxMzc1MzEsMTcyNTk1LDQwMjQ5LDE3MjIxNywxNzI3MjQsNDA1OTIsNDA1OTcsNDA2MDYsNDA2MTAsMTk3NjQsNDA2MTgsNDA2MjMsMTQ4MzI0LDQwNjQxLDE1MjAwLDE0ODIxLDE1NjQ1LDIwMjc0LDE0MjcwLDE2Njk1''@;'; put 'put ''NSw0MDcwNiw0MDcxMiwxOTM1MCwzNzkyNCwxNTkxMzgsNDA3MjcsNDA3MjYsNDA3NjEsMjIxNzUsMjIxNTQsNDA3NzMsMzkzNTIsMTY4MDc1LDM4ODk4LDMzOTE5LDQwODAyLDQwODA5LDMxNDUyLDQwODQ2LDI5MjA2LDE5MzkwLDE0OTg3NywxNDk5NDcsMjkwNDcsMTUwMDA4LDE0ODI5Niwx''@;'; put 'put ''NTAwOTcsMjk1OTgsMTY2ODc0LDEzNzQ2NiwzMTEzNSwxNjYyNzAsMTY3NDc4LDM3NzM3LDM3ODc1LDE2NjQ2OCwzNzYxMiwzNzc2MSwzNzgzNSwxNjYyNTIsMTQ4NjY1LDI5MjA3LDE2MTA3LDMwNTc4LDMxMjk5LDI4ODgwLDE0ODU5NSwxNDg0NzIsMjkwNTQsMTM3MTk5LDI4ODM1LDEzNzQw''@;'; put 'put ''NiwxNDQ3OTMsMTYwNzEsMTM3MzQ5LDE1MjYyMywxMzcyMDgsMTQxMTQsMTM2OTU1LDEzNzI3MywxNDA0OSwxMzcwNzYsMTM3NDI1LDE1NTQ2NywxNDExNSwxMzY4OTYsMjIzNjMsMTUwMDUzLDEzNjE5MCwxMzU4NDgsMTM2MTM0LDEzNjM3NCwzNDA1MSwxNDUwNjIsMzQwNTEsMzM4NzcsMTQ5''@;'; put 'put ''OTA4LDE2MDEwMSwxNDY5OTMsMTUyOTI0LDE0NzE5NSwxNTk4MjYsMTc2NTIsMTQ1MTM0LDE3MDM5NywxNTk1MjYsMjY2MTcsMTQxMzEsMTUzODEsMTU4NDcsMjI2MzYsMTM3NTA2LDI2NjQwLDE2NDcxLDE0NTIxNSwxNDc2ODEsMTQ3NTk1LDE0NzcyNywxNTg3NTMsMjE3MDcsMjIxNzQsMTU3''@;'; put 'put ''MzYxLDIyMTYyLDEzNTEzNSwxMzQwNTYsMTM0NjY5LDM3ODMwLDE2NjY3NSwzNzc4OCwyMDIxNiwyMDc3OSwxNDM2MSwxNDg1MzQsMjAxNTYsMTMyMTk3LDEzMTk2NywyMDI5OSwyMDM2MiwxNTMxNjksMjMxNDQsMTMxNDk5LDEzMjA0MywxNDc0NSwxMzE4NTAsMTMyMTE2LDEzMzY1LDIwMjY1''@;'; put 'put ''LDEzMTc3NiwxNjc2MDMsMTMxNzAxLDM1NTQ2LDEzMTU5NiwyMDEyMCwyMDY4NSwyMDc0OSwyMDM4NiwyMDIyNywxNTAwMzAsMTQ3MDgyLDIwMjkwLDIwNTI2LDIwNTg4LDIwNjA5LDIwNDI4LDIwNDUzLDIwNTY4LDIwNzMyLDIwODI1LDIwODI3LDIwODI5LDIwODMwLDI4Mjc4LDE0NDc4OSwx''@;'; put 'put ''NDcwMDEsMTQ3MTM1LDI4MDE4LDEzNzM0OCwxNDcwODEsMjA5MDQsMjA5MzEsMTMyNTc2LDE3NjI5LDEzMjI1OSwxMzIyNDIsMTMyMjQxLDM2MjE4LDE2NjU1NiwxMzI4NzgsMjEwODEsMjExNTYsMTMzMjM1LDIxMjE3LDM3NzQyLDE4MDQyLDI5MDY4LDE0ODM2NCwxMzQxNzYsMTQ5OTMyLDEz''@;'; put 'put ''NTM5NiwyNzA4OSwxMzQ2ODUsMjk4MTcsMTYwOTQsMjk4NDksMjk3MTYsMjk3ODIsMjk1OTIsMTkzNDIsMTUwMjA0LDE0NzU5NywyMTQ1NiwxMzcwMCwyOTE5OSwxNDc2NTcsMjE5NDAsMTMxOTA5LDIxNzA5LDEzNDA4NiwyMjMwMSwzNzQ2OSwzODY0NCwzNzczNCwyMjQ5MywyMjQxMywyMjM5''@;'; put 'put ''OSwxMzg4NiwyMjczMSwyMzE5MywxNjY0NzAsMTM2OTU0LDEzNzA3MSwxMzY5NzYsMjMwODQsMjI5NjgsMzc1MTksMjMxNjYsMjMyNDcsMjMwNTgsMTUzOTI2LDEzNzcxNSwxMzczMTMsMTQ4MTE3LDE0MDY5LDI3OTA5LDI5NzYzLDIzMDczLDE1NTI2NywyMzE2OSwxNjY4NzEsMTMyMTE1LDM3''@;'; put 'put ''ODU2LDI5ODM2LDEzNTkzOSwyODkzMywxODgwMiwzNzg5NiwxNjYzOTUsMzc4MjEsMTQyNDAsMjM1ODIsMjM3MTAsMjQxNTgsMjQxMzYsMTM3NjIyLDEzNzU5NiwxNDYxNTgsMjQyNjksMjMzNzUsMTM3NDc1LDEzNzQ3NiwxNDA4MSwxMzczNzYsMTQwNDUsMTM2OTU4LDE0MDM1LDMzMDY2LDE2''@;'; put 'put ''NjQ3MSwxMzg2ODIsMTQ0NDk4LDE2NjMxMiwyNDMzMiwyNDMzNCwxMzc1MTEsMTM3MTMxLDIzMTQ3LDEzNzAxOSwyMzM2NCwzNDMyNCwxNjEyNzcsMzQ5MTIsMjQ3MDIsMTQxNDA4LDE0MDg0MywyNDUzOSwxNjA1NiwxNDA3MTksMTQwNzM0LDE2ODA3MiwxNTk2MDMsMjUwMjQsMTMxMTM0LDEz''@;'; put 'put ''MTE0MiwxNDA4MjcsMjQ5ODUsMjQ5ODQsMjQ2OTMsMTQyNDkxLDE0MjU5OSwxNDkyMDQsMTY4MjY5LDI1NzEzLDE0OTA5MywxNDIxODYsMTQ4ODksMTQyMTE0LDE0NDQ2NCwxNzAyMTgsMTQyOTY4LDI1Mzk5LDE3MzE0NywyNTc4MiwyNTM5MywyNTU1MywxNDk5ODcsMTQyNjk1LDI1MjUyLDE0''@;'; put 'put ''MjQ5NywyNTY1OSwyNTk2MywyNjk5NCwxNTM0OCwxNDM1MDIsMTQ0MDQ1LDE0OTg5NywxNDQwNDMsMjE3NzMsMTQ0MDk2LDEzNzQzMywxNjkwMjMsMjYzMTgsMTQ0MDA5LDE0Mzc5NSwxNTA3MiwxNjc4NCwxNTI5NjQsMTY2NjkwLDE1Mjk3NSwxMzY5NTYsMTUyOTIzLDE1MjYxMywzMDk1OCwx''@;'; put 'put ''NDM2MTksMTM3MjU4LDE0MzkyNCwxMzQxMiwxNDM4ODcsMTQzNzQ2LDE0ODE2OSwyNjI1NCwxNTkwMTIsMjYyMTksMTkzNDcsMjYxNjAsMTYxOTA0LDEzODczMSwyNjIxMSwxNDQwODIsMTQ0MDk3LDI2MTQyLDE1MzcxNCwxNDU0NSwxNDU0NjYsMTQ1MzQwLDE1MjU3LDE0NTMxNCwxNDQzODIs''@;'; put 'put ''Mjk5MDQsMTUyNTQsMjY1MTEsMTQ5MDM0LDI2ODA2LDI2NjU0LDE1MzAwLDI3MzI2LDE0NDM1LDE0NTM2NSwxNDg2MTUsMjcxODcsMjcyMTgsMjczMzcsMjczOTcsMTM3NDkwLDI1ODczLDI2Nzc2LDI3MjEyLDE1MzE5LDI3MjU4LDI3NDc5LDE0NzM5MiwxNDY1ODYsMzc3OTIsMzc2MTgsMTY2''@;'; put 'put ''ODkwLDE2NjYwMywzNzUxMywxNjM4NzAsMTY2MzY0LDM3OTkxLDI4MDY5LDI4NDI3LDE0OTk5NiwyODAwNywxNDczMjcsMTU3NTksMjgxNjQsMTQ3NTE2LDIzMTAxLDI4MTcwLDIyNTk5LDI3OTQwLDMwNzg2LDI4OTg3LDE0ODI1MCwxNDgwODYsMjg5MTMsMjkyNjQsMjkzMTksMjkzMzIsMTQ5''@;'; put 'put ''MzkxLDE0OTI4NSwyMDg1NywxNTAxODAsMTMyNTg3LDI5ODE4LDE0NzE5MiwxNDQ5OTEsMTUwMDkwLDE0OTc4MywxNTU2MTcsMTYxMzQsMTYwNDksMTUwMjM5LDE2Njk0NywxNDcyNTMsMjQ3NDMsMTYxMTUsMjk5MDAsMjk3NTYsMzc3NjcsMjk3NTEsMTc1NjcsMTU5MjEwLDE3NzQ1LDMwMDgz''@;'; put 'put ''LDE2MjI3LDE1MDc0NSwxNTA3OTAsMTYyMTYsMzAwMzcsMzAzMjMsMTczNTEwLDE1MTI5LDI5ODAwLDE2NjYwNCwxNDk5MzEsMTQ5OTAyLDE1MDk5LDE1ODIxLDE1MDA5NCwxNjEyNywxNDk5NTcsMTQ5NzQ3LDM3MzcwLDIyMzIyLDM3Njk4LDE2NjYyNywxMzczMTYsMjA3MDMsMTUyMDk3LDE1''@;'; put 'put ''MjAzOSwzMDU4NCwxNDM5MjIsMzA0NzgsMzA0NzksMzA1ODcsMTQ5MTQzLDE0NTI4MSwxNDk0MiwxNDk3NDQsMjk3NTIsMjk4NTEsMTYwNjMsMTUwMjAyLDE1MDIxNSwxNjU4NCwxNTAxNjYsMTU2MDc4LDM3NjM5LDE1Mjk2MSwzMDc1MCwzMDg2MSwzMDg1NiwzMDkzMCwyOTY0OCwzMTA2NSwx''@;'; put 'put ''NjE2MDEsMTUzMzE1LDE2NjU0LDMxMTMxLDMzOTQyLDMxMTQxLDI3MTgxLDE0NzE5NCwzMTI5MCwzMTIyMCwxNjc1MCwxMzY5MzQsMTY2OTAsMzc0MjksMzEyMTcsMTM0NDc2LDE0OTkwMCwxMzE3MzcsMTQ2ODc0LDEzNzA3MCwxMzcxOSwyMTg2NywxMzY4MCwxMzk5NCwxMzE1NDAsMTM0MTU3''@;'; put 'put ''LDMxNDU4LDIzMTI5LDE0MTA0NSwxNTQyODcsMTU0MjY4LDIzMDUzLDEzMTY3NSwzMDk2MCwyMzA4MiwxNTQ1NjYsMzE0ODYsMTY4ODksMzE4MzcsMzE4NTMsMTY5MTMsMTU0NTQ3LDE1NTMyNCwxNTUzMDIsMzE5NDksMTUwMDA5LDEzNzEzNiwzMTg4NiwzMTg2OCwzMTkxOCwyNzMxNCwzMjIy''@;'; put 'put ''MCwzMjI2MywzMjIxMSwzMjU5MCwxNTYyNTcsMTU1OTk2LDE2MjYzMiwzMjE1MSwxNTUyNjYsMTcwMDIsMTU4NTgxLDEzMzM5OCwyNjU4MiwxMzExNTAsMTQ0ODQ3LDIyNDY4LDE1NjY5MCwxNTY2NjQsMTQ5ODU4LDMyNzMzLDMxNTI3LDEzMzE2NCwxNTQzNDUsMTU0OTQ3LDMxNTAwLDE1NTE1''@;'; put 'put ''MCwzOTM5OCwzNDM3MywzOTUyMywyNzE2NCwxNDQ0NDcsMTQ4MTgsMTUwMDA3LDE1NzEwMSwzOTQ1NSwxNTcwODgsMzM5MjAsMTYwMDM5LDE1ODkyOSwxNzY0MiwzMzA3OSwxNzQxMCwzMjk2NiwzMzAzMywzMzA5MCwxNTc2MjAsMzkxMDcsMTU4Mjc0LDMzMzc4LDMzMzgxLDE1ODI4OSwzMzg3''@;'; put 'put ''NSwxNTkxNDMsMzQzMjAsMTYwMjgzLDIzMTc0LDE2NzY3LDEzNzI4MCwyMzMzOSwxMzczNzcsMjMyNjgsMTM3NDMyLDM0NDY0LDE5NTAwNCwxNDY4MzEsMzQ4NjEsMTYwODAyLDIzMDQyLDM0OTI2LDIwMjkzLDM0OTUxLDM1MDA3LDM1MDQ2LDM1MTczLDM1MTQ5LDE1MzIxOSwzNTE1NiwxNjE2''@;'; put 'put ''NjksMTYxNjY4LDE2NjkwMSwxNjY4NzMsMTY2ODEyLDE2NjM5MywxNjA0NSwzMzk1NSwxODE2NSwxODEyNywxNDMyMiwzNTM4OSwzNTM1NiwxNjkwMzIsMjQzOTcsMzc0MTksMTQ4MTAwLDI2MDY4LDI4OTY5LDI4ODY4LDEzNzI4NSw0MDMwMSwzNTk5OSwzNjA3MywxNjMyOTIsMjI5MzgsMzA2''@;'; put 'put ''NTksMjMwMjQsMTcyNjIsMTQwMzYsMzYzOTQsMzY1MTksMTUwNTM3LDM2NjU2LDM2NjgyLDE3MTQwLDI3NzM2LDI4NjAzLDE0MDA2NSwxODU4NywyODUzNywyODI5OSwxMzcxNzgsMzk5MTMsMTQwMDUsMTQ5ODA3LDM3MDUxLDM3MDE1LDIxODczLDE4Njk0LDM3MzA3LDM3ODkyLDE2NjQ3NSwx''@;'; put 'put ''NjQ4MiwxNjY2NTIsMzc5MjcsMTY2OTQxLDE2Njk3MSwzNDAyMSwzNTM3MSwzODI5NywzODMxMSwzODI5NSwzODI5NCwxNjcyMjAsMjk3NjUsMTYwNjYsMTQ5NzU5LDE1MDA4MiwxNDg0NTgsMTYxMDMsMTQzOTA5LDM4NTQzLDE2NzY1NSwxNjc1MjYsMTY3NTI1LDE2MDc2LDE0OTk5NywxNTAx''@;'; put 'put ''MzYsMTQ3NDM4LDI5NzE0LDI5ODAzLDE2MTI0LDM4NzIxLDE2ODExMiwyNjY5NSwxODk3MywxNjgwODMsMTUzNTY3LDM4NzQ5LDM3NzM2LDE2NjI4MSwxNjY5NTAsMTY2NzAzLDE1NjYwNiwzNzU2MiwyMzMxMywzNTY4OSwxODc0OCwyOTY4OSwxNDc5OTUsMzg4MTEsMzg3NjksMzkyMjQsMTM0''@;'; put 'put ''OTUwLDI0MDAxLDE2Njg1MywxNTAxOTQsMzg5NDMsMTY5MTc4LDM3NjIyLDE2OTQzMSwzNzM0OSwxNzYwMCwxNjY3MzYsMTUwMTE5LDE2Njc1NiwzOTEzMiwxNjY0NjksMTYxMjgsMzc0MTgsMTg3MjUsMzM4MTIsMzkyMjcsMzkyNDUsMTYyNTY2LDE1ODY5LDM5MzIzLDE5MzExLDM5MzM4LDM5''@;'; put 'put ''NTE2LDE2Njc1NywxNTM4MDAsMjcyNzksMzk0NTcsMjMyOTQsMzk0NzEsMTcwMjI1LDE5MzQ0LDE3MDMxMiwzOTM1NiwxOTM4OSwxOTM1MSwzNzc1NywyMjY0MiwxMzU5MzgsMjI1NjIsMTQ5OTQ0LDEzNjQyNCwzMDc4OCwxNDEwODcsMTQ2ODcyLDI2ODIxLDE1NzQxLDM3OTc2LDE0NjMxLDI0''@;'; put 'put ''OTEyLDE0MTE4NSwxNDE2NzUsMjQ4MzksNDAwMTUsNDAwMTksNDAwNTksMzk5ODksMzk5NTIsMzk4MDcsMzk4ODcsMTcxNTY1LDM5ODM5LDE3MjUzMywxNzIyODYsNDAyMjUsMTk2MzAsMTQ3NzE2LDQwNDcyLDE5NjMyLDQwMjA0LDE3MjQ2OCwxNzIyNjksMTcyMjc1LDE3MDI4Nyw0MDM1Nywz''@;'; put 'put ''Mzk4MSwxNTkyNTAsMTU5NzExLDE1ODU5NCwzNDMwMCwxNzcxNSwxNTkxNDAsMTU5MzY0LDE1OTIxNiwzMzgyNCwzNDI4NiwxNTkyMzIsMTQ1MzY3LDE1NTc0OCwzMTIwMiwxNDQ3OTYsMTQ0OTYwLDE4NzMzLDE0OTk4MiwxNTcxNCwzNzg1MSwzNzU2NiwzNzcwNCwxMzE3NzUsMzA5MDUsMzc0''@;'; put 'put ''OTUsMzc5NjUsMjA0NTIsMTMzNzYsMzY5NjQsMTUyOTI1LDMwNzgxLDMwODA0LDMwOTAyLDMwNzk1LDEzNzA0NywxNDM4MTcsMTQ5ODI1LDEzOTc4LDIwMzM4LDI4NjM0LDI4NjMzLDI4NzAyLDI4NzAyLDIxNTI0LDE0Nzg5MywyMjQ1OSwyMjc3MSwyMjQxMCw0MDIxNCwyMjQ4NywyODk4MCwx''@;'; put 'put ''MzQ4NywxNDc4ODQsMjkxNjMsMTU4Nzg0LDE1MTQ0NywyMzMzNiwxMzcxNDEsMTY2NDczLDI0ODQ0LDIzMjQ2LDIzMDUxLDE3MDg0LDE0ODYxNiwxNDEyNCwxOTMyMywxNjYzOTYsMzc4MTksMzc4MTYsMTM3NDMwLDEzNDk0MSwzMzkwNiwxNTg5MTIsMTM2MjExLDE0ODIxOCwxNDIzNzQsMTQ4''@;'; put 'put ''NDE3LDIyOTMyLDE0Njg3MSwxNTc1MDUsMzIxNjgsMTU1OTk1LDE1NTgxMiwxNDk5NDUsMTQ5ODk5LDE2NjM5NCwzNzYwNSwyOTY2NiwxNjEwNSwyOTg3NiwxNjY3NTUsMTM3Mzc1LDE2MDk3LDE1MDE5NSwyNzM1MiwyOTY4MywyOTY5MSwxNjA4NiwxNTAwNzgsMTUwMTY0LDEzNzE3NywxNTAx''@;'; put 'put ''MTgsMTMyMDA3LDEzNjIyOCwxNDk5ODksMjk3NjgsMTQ5NzgyLDI4ODM3LDE0OTg3OCwzNzUwOCwyOTY3MCwzNzcyNywxMzIzNTAsMzc2ODEsMTY2NjA2LDE2NjQyMiwzNzc2NiwxNjY4ODcsMTUzMDQ1LDE4NzQxLDE2NjUzMCwyOTAzNSwxNDk4MjcsMTM0Mzk5LDIyMTgwLDEzMjYzNCwxMzQx''@;'; put 'put ''MjMsMTM0MzI4LDIxNzYyLDMxMTcyLDEzNzIxMCwzMjI1NCwxMzY4OTgsMTUwMDk2LDEzNzI5OCwxNzcxMCwzNzg4OSwxNDA5MCwxNjY1OTIsMTQ5OTMzLDIyOTYwLDEzNzQwNywxMzczNDcsMTYwOTAwLDIzMjAxLDE0MDUwLDE0Njc3OSwxNGUzLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQs''@;'; put 'put ''Mzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwz''@;'; put 'put ''MDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMs''@;'; put 'put ''MTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjky''@;'; put 'put ''MSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwy''@;'; put 'put ''MDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3''@;'; put 'put ''LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5''@;'; put 'put ''NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYy''@;'; put 'put ''NTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0''@;'; put 'put ''LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwx''@;'; put 'put ''Njg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4''@;'; put 'put ''MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEs''@;'; put 'put ''MTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQx''@;'; put 'put ''MzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0''@;'; put 'put ''LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3''@;'; put 'put ''NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1''@;'; put 'put ''LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5''@;'; put 'put ''NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEw''@;'; put 'put ''OCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMmUzLDI2OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwxMzY4OTAsMjIzNTksMjkwNDMsMTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0''@;'; put 'put ''NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2NSwzOTk4MywzNDcyNSwxMzQ2NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3''@;'; put 'put ''LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgsMTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUsMTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMzOTY1LDEzNTkwNywxMzYwNTMsMTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3''@;'; put 'put ''MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMzLDI3MTEzLDE0MDI0LDEzOTkwMCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUs''@;'; put 'put ''MTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwxNDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAwLDE0MjYwMCwxNDI2MTAsMTQyNzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMw''@;'; put 'put ''OCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIyNzA5LDI2MzgyLDI2OTA0LDE0NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcx''@;'; put 'put ''MjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgyMzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUwMDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIwLDE1Mjk0LDE0NjY4NywxNDg0ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0Nywx''@;'; put 'put ''NDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5ODUsMzY1NzAsMTUxNTk2LDIxMTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEs''@;'; put 'put ''MTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywxNTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwxNTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIwNTgyLDEzNTYzLDE0NDMzMiwyNDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4''@;'; put 'put ''NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIsMTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2ODA0LDEzNzUwMCwzNTU2MiwxNTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkz''@;'; put 'put ''OTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4NDgsMzUxOTEsMTU3NTkzLDE1NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5''@;'; put 'put ''NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIsMTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwxNTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4NTIsMTQ0NjY1LDMzNzQzLDE1ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcs''@;'; put 'put ''MTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwxNjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwzNzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0OCwxMzQ5MDQsMzQ4NTUsMzUwNjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQs''@;'; put 'put ''MTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzExODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwxNjQwNzIsMTM2MTMzLDI5MTAxLDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2''@;'; put 'put ''MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMxNTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywyNjY3OCwzODc0OSwxNjQyMDcsMTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2''@;'; put 'put ''MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgxLDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2NDE0MiwxMzkxNjksMTY0MTc1LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwx''@;'; put 'put ''NjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMwNzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYzNzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIsMTY2OTIxLDM2NjE5LDE2Nzg3NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1Miwx''@;'; put 'put ''NTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcxMzU0LDE3MTQxOSwzMjQxNSwxNzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5''@;'; put 'put ''MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwyMTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUwMTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEzNTQwLDE2NjcwMCwxNjE5NDksMTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3''@;'; put 'put ''NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUzOTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIyMDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYsMjU1NjYsMjUyOTYsMTM3MjA2LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1''@;'; put 'put ''MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIsMjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEzNTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIwLDMwMjY3LDQwMDA1LDMwMjg2LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3''@;'; put 'put ''LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgxMywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1MywxNjQ1NzgsMTM4NjksMzAwMDQsMjJlMywyMTk0NiwyMTY1NSwyMTg3NCwxMzQyMDksMTM0Mjk0LDI0MjcyLDE1MTg4MCwxMzQ3NzQsMTQyNDM0LDEz''@;'; put 'put ''NDgxOCw0MDYxOSwzMjA5MCwyMTk4MiwxMzUyODUsMjUyNDUsMzg3NjUsMjE2NTIsMzYwNDUsMjkxNzQsMzcyMzgsMjU1OTYsMjU1MjksMjU1OTgsMjE4NjUsMTQyMTQ3LDQwMDUwLDE0MzAyNywyMDg5MCwxMzUzNSwxMzQ1NjcsMjA5MDMsMjE1ODEsMjE3OTAsMjE3NzksMzAzMTAsMzYzOTcs''@;'; put 'put ''MTU3ODM0LDMwMTI5LDMyOTUwLDM0ODIwLDM0Njk0LDM1MDE1LDMzMjA2LDMzODIwLDEzNTM2MSwxNzY0NCwyOTQ0NCwxNDkyNTQsMjM0NDAsMzM1NDcsMTU3ODQzLDIyMTM5LDE0MTA0NCwxNjMxMTksMTQ3ODc1LDE2MzE4NywxNTk0NDAsMTYwNDM4LDM3MjMyLDEzNTY0MSwzNzM4NCwxNDY2''@;'; put 'put ''ODQsMTczNzM3LDEzNDgyOCwxMzQ5MDUsMjkyODYsMTM4NDAyLDE4MjU0LDE1MTQ5MCwxNjM4MzMsMTM1MTQ3LDE2NjM0LDQwMDI5LDI1ODg3LDE0Mjc1MiwxODY3NSwxNDk0NzIsMTcxMzg4LDEzNTE0OCwxMzQ2NjYsMjQ2NzQsMTYxMTg3LDEzNTE0OSxudWxsLDE1NTcyMCwxMzU1NTksMjkw''@;'; put 'put ''OTEsMzIzOTgsNDAyNzIsMTk5OTQsMTk5NzIsMTM2ODcsMjMzMDksMjc4MjYsMjEzNTEsMTM5OTYsMTQ4MTIsMjEzNzMsMTM5ODksMTQ5MDE2LDIyNjgyLDE1MDM4MiwzMzMyNSwyMTU3OSwyMjQ0MiwxNTQyNjEsMTMzNDk3LG51bGwsMTQ5MzAsMTQwMzg5LDI5NTU2LDE3MTY5MiwxOTcyMSwz''@;'; put 'put ''OTkxNywxNDY2ODYsMTcxODI0LDE5NTQ3LDE1MTQ2NSwxNjkzNzQsMTcxOTk4LDMzODg0LDE0Njg3MCwxNjA0MzQsMTU3NjE5LDE0NTE4NCwyNTM5MCwzMjAzNywxNDcxOTEsMTQ2OTg4LDE0ODkwLDM2ODcyLDIxMTk2LDE1OTg4LDEzOTQ2LDE3ODk3LDEzMjIzOCwzMDI3MiwyMzI4MCwxMzQ4''@;'; put 'put ''MzgsMzA4NDIsMTYzNjMwLDIyNjk1LDE2NTc1LDIyMTQwLDM5ODE5LDIzOTI0LDMwMjkyLDE3MzEwOCw0MDU4MSwxOTY4MSwzMDIwMSwxNDMzMSwyNDg1NywxNDM1NzgsMTQ4NDY2LG51bGwsMjIxMDksMTM1ODQ5LDIyNDM5LDE0OTg1OSwxNzE1MjYsMjEwNDQsMTU5OTE4LDEzNzQxLDI3NzIy''@;'; put 'put ''LDQwMzE2LDMxODMwLDM5NzM3LDIyNDk0LDEzNzA2OCwyMzYzNSwyNTgxMSwxNjkxNjgsMTU2NDY5LDE2MDEwMCwzNDQ3NywxMzQ0NDAsMTU5MDEwLDE1MDI0MiwxMzQ1MTMsbnVsbCwyMDk5MCwxMzkwMjMsMjM5NTAsMzg2NTksMTM4NzA1LDQwNTc3LDM2OTQwLDMxNTE5LDM5NjgyLDIzNzYx''@;'; put 'put ''LDMxNjUxLDI1MTkyLDI1Mzk3LDM5Njc5LDMxNjk1LDM5NzIyLDMxODcwLDM5NzI2LDMxODEwLDMxODc4LDM5OTU3LDMxNzQwLDM5Njg5LDQwNzI3LDM5OTYzLDE0OTgyMiw0MDc5NCwyMTg3NSwyMzQ5MSwyMDQ3Nyw0MDYwMCwyMDQ2NiwyMTA4OCwxNTg3OCwyMTIwMSwyMjM3NSwyMDU2Niwy''@;'; put 'put ''Mjk2NywyNDA4MiwzODg1Niw0MDM2MywzNjcwMCwyMTYwOSwzODgzNiwzOTIzMiwzODg0MiwyMTI5MiwyNDg4MCwyNjkyNCwyMTQ2NiwzOTk0Niw0MDE5NCwxOTUxNSwzODQ2NSwyNzAwOCwyMDY0NiwzMDAyMiwxMzcwNjksMzkzODYsMjExMDcsbnVsbCwzNzIwOSwzODUyOSwzNzIxMixudWxs''@;'; put 'put ''LDM3MjAxLDE2NzU3NSwyNTQ3MSwxNTkwMTEsMjczMzgsMjIwMzMsMzcyNjIsMzAwNzQsMjUyMjEsMTMyMDkyLDI5NTE5LDMxODU2LDE1NDY1NywxNDY2ODUsbnVsbCwxNDk3ODUsMzA0MjIsMzk4MzcsMjAwMTAsMTM0MzU2LDMzNzI2LDM0ODgyLG51bGwsMjM2MjYsMjcwNzIsMjA3MTcsMjIz''@;'; put 'put ''OTQsMjEwMjMsMjQwNTMsMjAxNzQsMjc2OTcsMTMxNTcwLDIwMjgxLDIxNjYwLDIxNzIyLDIxMTQ2LDM2MjI2LDEzODIyLDI0MzMyLDEzODExLG51bGwsMjc0NzQsMzcyNDQsNDA4NjksMzk4MzEsMzg5NTgsMzkwOTIsMzk2MTAsNDA2MTYsNDA1ODAsMjkwNTAsMzE1MDgsbnVsbCwyNzY0Miwz''@;'; put 'put ''NDg0MCwzMjYzMixudWxsLDIyMDQ4LDE3MzY0MiwzNjQ3MSw0MDc4NyxudWxsLDM2MzA4LDM2NDMxLDQwNDc2LDM2MzUzLDI1MjE4LDE2NDczMywzNjM5MiwzNjQ2OSwzMTQ0MywxNTAxMzUsMzEyOTQsMzA5MzYsMjc4ODIsMzU0MzEsMzAyMTUsMTY2NDkwLDQwNzQyLDI3ODU0LDM0Nzc0LDMw''@;'; put 'put ''MTQ3LDE3MjcyMiwzMDgwMywxOTQ2MjQsMzYxMDgsMjk0MTAsMjk1NTMsMzU2MjksMjk0NDIsMjk5MzcsMzYwNzUsMTUwMjAzLDM0MzUxLDI0NTA2LDM0OTc2LDE3NTkxLG51bGwsMTM3Mjc1LDE1OTIzNyxudWxsLDM1NDU0LDE0MDU3MSxudWxsLDI0ODI5LDMwMzExLDM5NjM5LDQwMjYwLDM3''@;'; put 'put ''NzQyLDM5ODIzLDM0ODA1LG51bGwsMzQ4MzEsMzYwODcsMjk0ODQsMzg2ODksMzk4NTYsMTM3ODIsMjkzNjIsMTk0NjMsMzE4MjUsMzkyNDIsMTU1OTkzLDI0OTIxLDE5NDYwLDQwNTk4LDI0OTU3LG51bGwsMjIzNjcsMjQ5NDMsMjUyNTQsMjUxNDUsMjUyOTQsMTQ5NDAsMjUwNTgsMjE0MTgs''@;'; put 'put ''MTQ0MzczLDI1NDQ0LDI2NjI2LDEzNzc4LDIzODk1LDE2Njg1MCwzNjgyNiwxNjc0ODEsbnVsbCwyMDY5NywxMzg1NjYsMzA5ODIsMjEyOTgsMzg0NTYsMTM0OTcxLDE2NDg1LG51bGwsMzA3MTgsbnVsbCwzMTkzOCwxNTU0MTgsMzE5NjIsMzEyNzcsMzI4NzAsMzI4NjcsMzIwNzcsMjk5NTcs''@;'; put 'put ''Mjk5MzgsMzUyMjAsMzMzMDYsMjYzODAsMzI4NjYsMTYwOTAyLDMyODU5LDI5OTM2LDMzMDI3LDMwNTAwLDM1MjA5LDE1NzY0NCwzMDAzNSwxNTk0NDEsMzQ3MjksMzQ3NjYsMzMyMjQsMzQ3MDAsMzU0MDEsMzYwMTMsMzU2NTEsMzA1MDcsMjk5NDQsMzQwMTAsMTM4NzcsMjcwNTgsMzYyNjIs''@;'; put 'put ''bnVsbCwzNTI0MSwyOTgwMCwyODA4OSwzNDc1MywxNDc0NzMsMjk5MjcsMTU4MzUsMjkwNDYsMjQ3NDAsMjQ5ODgsMTU1NjksMjkwMjYsMjQ2OTUsbnVsbCwzMjYyNSwxNjY3MDEsMjkyNjQsMjQ4MDksMTkzMjYsMjEwMjQsMTUzODQsMTQ2NjMxLDE1NTM1MSwxNjEzNjYsMTUyODgxLDEzNzU0''@;'; put 'put ''MCwxMzU5MzQsMTcwMjQzLDE1OTE5NiwxNTk5MTcsMjM3NDUsMTU2MDc3LDE2NjQxNSwxNDUwMTUsMTMxMzEwLDE1Nzc2NiwxNTEzMTAsMTc3NjIsMjMzMjcsMTU2NDkyLDQwNzg0LDQwNjE0LDE1NjI2NywxMjI4OCw2NTI5MiwxMjI4OSwxMjI5MCw2NTI5NCw4MjMxLDY1MzA3LDY1MzA2LDY1''@;'; put 'put ''MzExLDY1MjgxLDY1MDcyLDgyMzAsODIyOSw2NTEwNCw2NTEwNSw2NTEwNiwxODMsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUzNzIsODIxMSw2NTA3Myw4MjEyLDY1MDc1LDk1ODgsNjUwNzYsNjUxMDMsNjUyODgsNjUyODksNjUwNzcsNjUwNzgsNjUzNzEsNjUzNzMsNjUwNzksNjUwODAs''@;'; put 'put ''MTIzMDgsMTIzMDksNjUwODEsNjUwODIsMTIzMDQsMTIzMDUsNjUwODMsNjUwODQsMTIyOTgsMTIyOTksNjUwODUsNjUwODYsMTIyOTYsMTIyOTcsNjUwODcsNjUwODgsMTIzMDAsMTIzMDEsNjUwODksNjUwOTAsMTIzMDIsMTIzMDMsNjUwOTEsNjUwOTIsNjUxMTMsNjUxMTQsNjUxMTUsNjUx''@;'; put 'put ''MTYsNjUxMTcsNjUxMTgsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMxNywxMjMxOCw4MjQ1LDgyNDIsNjUyODMsNjUyODYsNjUyOTAsODI1MSwxNjcsMTIyOTEsOTY3NSw5Njc5LDk2NTEsOTY1MCw5Njc4LDk3MzQsOTczMyw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NjEsOTY2MCwxMjk2Myw4NDUz''@;'; put 'put ''LDE3NSw2NTUwNyw2NTM0Myw3MTcsNjUwOTcsNjUwOTgsNjUxMDEsNjUxMDIsNjUwOTksNjUxMDAsNjUxMTksNjUxMjAsNjUxMjEsNjUyOTEsNjUyOTMsMjE1LDI0NywxNzcsODczMCw2NTMwOCw2NTMxMCw2NTMwOSw4ODA2LDg4MDcsODgwMCw4NzM0LDg3ODYsODgwMSw2NTEyMiw2NTEyMyw2''@;'; put 'put ''NTEyNCw2NTEyNSw2NTEyNiw2NTM3NCw4NzQ1LDg3NDYsODg2OSw4NzM2LDg3MzUsODg5NSwxMzI2NiwxMzI2NSw4NzQ3LDg3NTAsODc1Nyw4NzU2LDk3OTIsOTc5NCw4ODUzLDg4NTcsODU5Myw4NTk1LDg1OTIsODU5NCw4NTk4LDg1OTksODYwMSw4NjAwLDg3NDEsODczOSw2NTI5NSw2NTM0''@;'; put 'put ''MCw4NzI1LDY1MTI4LDY1Mjg0LDY1NTA5LDEyMzA2LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MzEyLDg0NTEsODQ1Nyw2NTEyOSw2NTEzMCw2NTEzMSwxMzI2OSwxMzIxMiwxMzIxMywxMzIxNCwxMzI2MiwxMzIxNywxMzE5OCwxMzE5OSwxMzI1MiwxNzYsMjA4MjUsMjA4MjcsMjA4MzAsMjA4Mjks''@;'; put 'put ''MjA4MzMsMjA4MzUsMjE5OTEsMjk5MjksMzE5NTAsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MTUsOTYxNCw5NjEzLDk2MTIsOTYxMSw5NjEwLDk2MDksOTUzMiw5NTI0LDk1MTYsOTUwOCw5NTAwLDk2MjAsOTQ3Miw5NDc0LDk2MjEsOTQ4NCw5NDg4LDk0OTIs''@;'; put 'put ''OTQ5Niw5NTgxLDk1ODIsOTU4NCw5NTgzLDk1NTIsOTU2Niw5NTc4LDk1NjksOTY5OCw5Njk5LDk3MDEsOTcwMCw5NTg1LDk1ODYsOTU4Nyw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgs''@;'; put 'put ''ODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDIxMzEzLDIxMzE2LDIxMzE3LDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1''@;'; put 'put ''MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3''@;'; put 'put ''LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkz''@;'; put 'put ''NSw5MzYsOTM3LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4''@;'; put 'put ''LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDcy''@;'; put 'put ''OSw3MTMsNzE0LDcxMSw3MTUsOTIxNiw5MjE3LDkyMTgsOTIxOSw5MjIwLDkyMjEsOTIyMiw5MjIzLDkyMjQsOTIyNSw5MjI2LDkyMjcsOTIyOCw5MjI5LDkyMzAsOTIzMSw5MjMyLDkyMzMsOTIzNCw5MjM1LDkyMzYsOTIzNyw5MjM4LDkyMzksOTI0MCw5MjQxLDkyNDIsOTI0Myw5MjQ0LDky''@;'; put 'put ''NDUsOTI0Niw5MjQ3LDkyNDksODM2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsMTk5NjgsMjAwNTcsMTk5NjksMTk5NzEsMjAwMzUsMjAwNjEsMjAxMDIsMjAxMDgsMjAxNTQsMjA3OTksMjA4MzcsMjA4NDMsMjA5NjAsMjA5OTIsMjA5OTMsMjExNDcsMjEyNjksMjEzMTMsMjEzNDAsMjE0NDgsMTk5NzcsMTk5NzksMTk5NzYsMTk5NzgsMjAwMTEsMjAwMjQsMjA5NjEs''@;'; put 'put ''MjAwMzcsMjAwNDAsMjAwNjMsMjAwNjIsMjAxMTAsMjAxMjksMjA4MDAsMjA5OTUsMjEyNDIsMjEzMTUsMjE0NDksMjE0NzUsMjIzMDMsMjI3NjMsMjI4MDUsMjI4MjMsMjI4OTksMjMzNzYsMjMzNzcsMjMzNzksMjM1NDQsMjM1NjcsMjM1ODYsMjM2MDgsMjM2NjUsMjQwMjksMjQwMzcsMjQw''@;'; put 'put ''NDksMjQwNTAsMjQwNTEsMjQwNjIsMjQxNzgsMjQzMTgsMjQzMzEsMjQzMzksMjUxNjUsMTk5ODUsMTk5ODQsMTk5ODEsMjAwMTMsMjAwMTYsMjAwMjUsMjAwNDMsMjM2MDksMjAxMDQsMjAxMTMsMjAxMTcsMjAxMTQsMjAxMTYsMjAxMzAsMjAxNjEsMjAxNjAsMjAxNjMsMjAxNjYsMjAxNjcs''@;'; put 'put ''MjAxNzMsMjAxNzAsMjAxNzEsMjAxNjQsMjA4MDMsMjA4MDEsMjA4MzksMjA4NDUsMjA4NDYsMjA4NDQsMjA4ODcsMjA5ODIsMjA5OTgsMjA5OTksMjFlMywyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1''@;'; put 'put ''MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1Miwy''@;'; put 'put ''NjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0''@;'; put 'put ''NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwy''@;'; put 'put ''MTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgw''@;'; put 'put ''NiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwy''@;'; put 'put ''NjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzZTQsMzAwMDEsMzAwMDIsMzAwMDMsMzAwOTEsMzAzMzMsMzAzODIsMzAzOTks''@;'; put 'put ''MzA0NDYsMzA2ODMsMzA2OTAsMzA3MDcsMzEwMzQsMzExNjYsMzEzNDgsMzE0MzUsMTk5OTgsMTk5OTksMjAwNTAsMjAwNTEsMjAwNzMsMjAxMjEsMjAxMzIsMjAxMzQsMjAxMzMsMjAyMjMsMjAyMzMsMjAyNDksMjAyMzQsMjAyNDUsMjAyMzcsMjAyNDAsMjAyNDEsMjAyMzksMjAyMTAsMjAy''@;'; put 'put ''MTQsMjAyMTksMjAyMDgsMjAyMTEsMjAyMjEsMjAyMjUsMjAyMzUsMjA4MDksMjA4MDcsMjA4MDYsMjA4MDgsMjA4NDAsMjA4NDksMjA4NzcsMjA5MTIsMjEwMTUsMjEwMDksMjEwMTAsMjEwMDYsMjEwMTQsMjExNTUsMjEyNTYsMjEyODEsMjEyODAsMjEzNjAsMjEzNjEsMjE1MTMsMjE1MTks''@;'; put 'put ''MjE1MTYsMjE1MTQsMjE1MjAsMjE1MDUsMjE1MTUsMjE1MDgsMjE1MjEsMjE1MTcsMjE1MTIsMjE1MDcsMjE1MTgsMjE1MTAsMjE1MjIsMjIyNDAsMjIyMzgsMjIyMzcsMjIzMjMsMjIzMjAsMjIzMTIsMjIzMTcsMjIzMTYsMjIzMTksMjIzMTMsMjI4MDksMjI4MTAsMjI4MzksMjI4NDAsMjI5''@;'; put 'put ''MTYsMjI5MDQsMjI5MTUsMjI5MDksMjI5MDUsMjI5MTQsMjI5MTMsMjMzODMsMjMzODQsMjM0MzEsMjM0MzIsMjM0MjksMjM0MzMsMjM1NDYsMjM1NzQsMjM2NzMsMjQwMzAsMjQwNzAsMjQxODIsMjQxODAsMjQzMzUsMjQzNDcsMjQ1MzcsMjQ1MzQsMjUxMDIsMjUxMDAsMjUxMDEsMjUxMDQs''@;'; put 'put ''MjUxODcsMjUxNzksMjUxNzYsMjU5MTAsMjYwODksMjYwODgsMjYwOTIsMjYwOTMsMjYzNTQsMjYzNTUsMjYzNzcsMjY0MjksMjY0MjAsMjY0MTcsMjY0MjEsMjc0MjUsMjc0OTIsMjc1MTUsMjc2NzAsMjc3NDEsMjc3MzUsMjc3MzcsMjc3NDMsMjc3NDQsMjc3MjgsMjc3MzMsMjc3NDUsMjc3''@;'; put 'put ''MzksMjc3MjUsMjc3MjYsMjg3ODQsMjkyNzksMjkyNzcsMzAzMzQsMzE0ODEsMzE4NTksMzE5OTIsMzI1NjYsMzI2NTAsMzI3MDEsMzI3NjksMzI3NzEsMzI3ODAsMzI3ODYsMzI4MTksMzI4OTUsMzI5MDUsMzI5MDcsMzI5MDgsMzMyNTEsMzMyNTgsMzMyNjcsMzMyNzYsMzMyOTIsMzMzMDcs''@;'; put 'put ''MzMzMTEsMzMzOTAsMzMzOTQsMzM0MDYsMzQ0MTEsMzQ4ODAsMzQ4OTIsMzQ5MTUsMzUxOTksMzg0MzMsMjAwMTgsMjAxMzYsMjAzMDEsMjAzMDMsMjAyOTUsMjAzMTEsMjAzMTgsMjAyNzYsMjAzMTUsMjAzMDksMjAyNzIsMjAzMDQsMjAzMDUsMjAyODUsMjAyODIsMjAyODAsMjAyOTEsMjAz''@;'; put 'put ''MDgsMjAyODQsMjAyOTQsMjAzMjMsMjAzMTYsMjAzMjAsMjAyNzEsMjAzMDIsMjAyNzgsMjAzMTMsMjAzMTcsMjAyOTYsMjAzMTQsMjA4MTIsMjA4MTEsMjA4MTMsMjA4NTMsMjA5MTgsMjA5MTksMjEwMjksMjEwMjgsMjEwMzMsMjEwMzQsMjEwMzIsMjExNjMsMjExNjEsMjExNjIsMjExNjQs''@;'; put 'put ''MjEyODMsMjEzNjMsMjEzNjUsMjE1MzMsMjE1NDksMjE1MzQsMjE1NjYsMjE1NDIsMjE1ODIsMjE1NDMsMjE1NzQsMjE1NzEsMjE1NTUsMjE1NzYsMjE1NzAsMjE1MzEsMjE1NDUsMjE1NzgsMjE1NjEsMjE1NjMsMjE1NjAsMjE1NTAsMjE1NTcsMjE1NTgsMjE1MzYsMjE1NjQsMjE1NjgsMjE1''@;'; put 'put ''NTMsMjE1NDcsMjE1MzUsMjE1NDgsMjIyNTAsMjIyNTYsMjIyNDQsMjIyNTEsMjIzNDYsMjIzNTMsMjIzMzYsMjIzNDksMjIzNDMsMjIzNTAsMjIzMzQsMjIzNTIsMjIzNTEsMjIzMzEsMjI3NjcsMjI4NDYsMjI5NDEsMjI5MzAsMjI5NTIsMjI5NDIsMjI5NDcsMjI5MzcsMjI5MzQsMjI5MjUs''@;'; put 'put ''MjI5NDgsMjI5MzEsMjI5MjIsMjI5NDksMjMzODksMjMzODgsMjMzODYsMjMzODcsMjM0MzYsMjM0MzUsMjM0MzksMjM1OTYsMjM2MTYsMjM2MTcsMjM2MTUsMjM2MTQsMjM2OTYsMjM2OTcsMjM3MDAsMjM2OTIsMjQwNDMsMjQwNzYsMjQyMDcsMjQxOTksMjQyMDIsMjQzMTEsMjQzMjQsMjQz''@;'; put 'put ''NTEsMjQ0MjAsMjQ0MTgsMjQ0MzksMjQ0NDEsMjQ1MzYsMjQ1MjQsMjQ1MzUsMjQ1MjUsMjQ1NjEsMjQ1NTUsMjQ1NjgsMjQ1NTQsMjUxMDYsMjUxMDUsMjUyMjAsMjUyMzksMjUyMzgsMjUyMTYsMjUyMDYsMjUyMjUsMjUxOTcsMjUyMjYsMjUyMTIsMjUyMTQsMjUyMDksMjUyMDMsMjUyMzQs''@;'; put 'put ''MjUxOTksMjUyNDAsMjUxOTgsMjUyMzcsMjUyMzUsMjUyMzMsMjUyMjIsMjU5MTMsMjU5MTUsMjU5MTIsMjYwOTcsMjYzNTYsMjY0NjMsMjY0NDYsMjY0NDcsMjY0NDgsMjY0NDksMjY0NjAsMjY0NTQsMjY0NjIsMjY0NDEsMjY0MzgsMjY0NjQsMjY0NTEsMjY0NTUsMjc0OTMsMjc1OTksMjc3''@;'; put 'put ''MTQsMjc3NDIsMjc4MDEsMjc3NzcsMjc3ODQsMjc3ODUsMjc3ODEsMjc4MDMsMjc3NTQsMjc3NzAsMjc3OTIsMjc3NjAsMjc3ODgsMjc3NTIsMjc3OTgsMjc3OTQsMjc3NzMsMjc3NzksMjc3NjIsMjc3NzQsMjc3NjQsMjc3ODIsMjc3NjYsMjc3ODksMjc3OTYsMjc4MDAsMjc3NzgsMjg3OTAs''@;'; put 'put ''Mjg3OTYsMjg3OTcsMjg3OTIsMjkyODIsMjkyODEsMjkyODAsMjkzODAsMjkzNzgsMjk1OTAsMjk5OTYsMjk5OTUsMzAwMDcsMzAwMDgsMzAzMzgsMzA0NDcsMzA2OTEsMzExNjksMzExNjgsMzExNjcsMzEzNTAsMzE5OTUsMzI1OTcsMzI5MTgsMzI5MTUsMzI5MjUsMzI5MjAsMzI5MjMsMzI5''@;'; put 'put ''MjIsMzI5NDYsMzMzOTEsMzM0MjYsMzM0MTksMzM0MjEsMzUyMTEsMzUyODIsMzUzMjgsMzU4OTUsMzU5MTAsMzU5MjUsMzU5OTcsMzYxOTYsMzYyMDgsMzYyNzUsMzY1MjMsMzY1NTQsMzY3NjMsMzY3ODQsMzY4MDIsMzY4MDYsMzY4MDUsMzY4MDQsMjQwMzMsMzcwMDksMzcwMjYsMzcwMzQs''@;'; put 'put ''MzcwMzAsMzcwMjcsMzcxOTMsMzczMTgsMzczMjQsMzg0NTAsMzg0NDYsMzg0NDksMzg0NDIsMzg0NDQsMjAwMDYsMjAwNTQsMjAwODMsMjAxMDcsMjAxMjMsMjAxMjYsMjAxMzksMjAxNDAsMjAzMzUsMjAzODEsMjAzNjUsMjAzMzksMjAzNTEsMjAzMzIsMjAzNzksMjAzNjMsMjAzNTgsMjAz''@;'; put 'put ''NTUsMjAzMzYsMjAzNDEsMjAzNjAsMjAzMjksMjAzNDcsMjAzNzQsMjAzNTAsMjAzNjcsMjAzNjksMjAzNDYsMjA4MjAsMjA4MTgsMjA4MjEsMjA4NDEsMjA4NTUsMjA4NTQsMjA4NTYsMjA5MjUsMjA5ODksMjEwNTEsMjEwNDgsMjEwNDcsMjEwNTAsMjEwNDAsMjEwMzgsMjEwNDYsMjEwNTcs''@;'; put 'put ''MjExODIsMjExNzksMjEzMzAsMjEzMzIsMjEzMzEsMjEzMjksMjEzNTAsMjEzNjcsMjEzNjgsMjEzNjksMjE0NjIsMjE0NjAsMjE0NjMsMjE2MTksMjE2MjEsMjE2NTQsMjE2MjQsMjE2NTMsMjE2MzIsMjE2MjcsMjE2MjMsMjE2MzYsMjE2NTAsMjE2MzgsMjE2MjgsMjE2NDgsMjE2MTcsMjE2''@;'; put 'put ''MjIsMjE2NDQsMjE2NTgsMjE2MDIsMjE2MDgsMjE2NDMsMjE2MjksMjE2NDYsMjIyNjYsMjI0MDMsMjIzOTEsMjIzNzgsMjIzNzcsMjIzNjksMjIzNzQsMjIzNzIsMjIzOTYsMjI4MTIsMjI4NTcsMjI4NTUsMjI4NTYsMjI4NTIsMjI4NjgsMjI5NzQsMjI5NzEsMjI5OTYsMjI5NjksMjI5NTgs''@;'; put 'put ''MjI5OTMsMjI5ODIsMjI5OTIsMjI5ODksMjI5ODcsMjI5OTUsMjI5ODYsMjI5NTksMjI5NjMsMjI5OTQsMjI5ODEsMjMzOTEsMjMzOTYsMjMzOTUsMjM0NDcsMjM0NTAsMjM0NDgsMjM0NTIsMjM0NDksMjM0NTEsMjM1NzgsMjM2MjQsMjM2MjEsMjM2MjIsMjM3MzUsMjM3MTMsMjM3MzYsMjM3''@;'; put 'put ''MjEsMjM3MjMsMjM3MjksMjM3MzEsMjQwODgsMjQwOTAsMjQwODYsMjQwODUsMjQwOTEsMjQwODEsMjQxODQsMjQyMTgsMjQyMTUsMjQyMjAsMjQyMTMsMjQyMTQsMjQzMTAsMjQzNTgsMjQzNTksMjQzNjEsMjQ0NDgsMjQ0NDksMjQ0NDcsMjQ0NDQsMjQ1NDEsMjQ1NDQsMjQ1NzMsMjQ1NjUs''@;'; put 'put ''MjQ1NzUsMjQ1OTEsMjQ1OTYsMjQ2MjMsMjQ2MjksMjQ1OTgsMjQ2MTgsMjQ1OTcsMjQ2MDksMjQ2MTUsMjQ2MTcsMjQ2MTksMjQ2MDMsMjUxMTAsMjUxMDksMjUxNTEsMjUxNTAsMjUxNTIsMjUyMTUsMjUyODksMjUyOTIsMjUyODQsMjUyNzksMjUyODIsMjUyNzMsMjUyOTgsMjUzMDcsMjUy''@;'; put 'put ''NTksMjUyOTksMjUzMDAsMjUyOTEsMjUyODgsMjUyNTYsMjUyNzcsMjUyNzYsMjUyOTYsMjUzMDUsMjUyODcsMjUyOTMsMjUyNjksMjUzMDYsMjUyNjUsMjUzMDQsMjUzMDIsMjUzMDMsMjUyODYsMjUyNjAsMjUyOTQsMjU5MTgsMjYwMjMsMjYwNDQsMjYxMDYsMjYxMzIsMjYxMzEsMjYxMjQs''@;'; put 'put ''MjYxMTgsMjYxMTQsMjYxMjYsMjYxMTIsMjYxMjcsMjYxMzMsMjYxMjIsMjYxMTksMjYzODEsMjYzNzksMjY0NzcsMjY1MDcsMjY1MTcsMjY0ODEsMjY1MjQsMjY0ODMsMjY0ODcsMjY1MDMsMjY1MjUsMjY1MTksMjY0NzksMjY0ODAsMjY0OTUsMjY1MDUsMjY0OTQsMjY1MTIsMjY0ODUsMjY1''@;'; put 'put ''MjIsMjY1MTUsMjY0OTIsMjY0NzQsMjY0ODIsMjc0MjcsMjc0OTQsMjc0OTUsMjc1MTksMjc2NjcsMjc2NzUsMjc4NzUsMjc4ODAsMjc4OTEsMjc4MjUsMjc4NTIsMjc4NzcsMjc4MjcsMjc4MzcsMjc4MzgsMjc4MzYsMjc4NzQsMjc4MTksMjc4NjEsMjc4NTksMjc4MzIsMjc4NDQsMjc4MzMs''@;'; put 'put ''Mjc4NDEsMjc4MjIsMjc4NjMsMjc4NDUsMjc4ODksMjc4MzksMjc4MzUsMjc4NzMsMjc4NjcsMjc4NTAsMjc4MjAsMjc4ODcsMjc4NjgsMjc4NjIsMjc4NzIsMjg4MjEsMjg4MTQsMjg4MTgsMjg4MTAsMjg4MjUsMjkyMjgsMjkyMjksMjkyNDAsMjkyNTYsMjkyODcsMjkyODksMjkzNzYsMjkz''@;'; put 'put ''OTAsMjk0MDEsMjkzOTksMjkzOTIsMjk2MDksMjk2MDgsMjk1OTksMjk2MTEsMjk2MDUsMzAwMTMsMzAxMDksMzAxMDUsMzAxMDYsMzAzNDAsMzA0MDIsMzA0NTAsMzA0NTIsMzA2OTMsMzA3MTcsMzEwMzgsMzEwNDAsMzEwNDEsMzExNzcsMzExNzYsMzEzNTQsMzEzNTMsMzE0ODIsMzE5OTgs''@;'; put 'put ''MzI1OTYsMzI2NTIsMzI2NTEsMzI3NzMsMzI5NTQsMzI5MzMsMzI5MzAsMzI5NDUsMzI5MjksMzI5MzksMzI5MzcsMzI5NDgsMzI5MzgsMzI5NDMsMzMyNTMsMzMyNzgsMzMyOTMsMzM0NTksMzM0MzcsMzM0MzMsMzM0NTMsMzM0NjksMzM0MzksMzM0NjUsMzM0NTcsMzM0NTIsMzM0NDUsMzM0''@;'; put 'put ''NTUsMzM0NjQsMzM0NDMsMzM0NTYsMzM0NzAsMzM0NjMsMzQzODIsMzQ0MTcsMjEwMjEsMzQ5MjAsMzY1NTUsMzY4MTQsMzY4MjAsMzY4MTcsMzcwNDUsMzcwNDgsMzcwNDEsMzcwNDYsMzczMTksMzczMjksMzgyNjMsMzgyNzIsMzg0MjgsMzg0NjQsMzg0NjMsMzg0NTksMzg0NjgsMzg0NjYs''@;'; put 'put ''Mzg1ODUsMzg2MzIsMzg3MzgsMzg3NTAsMjAxMjcsMjAxNDEsMjAxNDIsMjA0NDksMjA0MDUsMjAzOTksMjA0MTUsMjA0NDgsMjA0MzMsMjA0MzEsMjA0NDUsMjA0MTksMjA0MDYsMjA0NDAsMjA0NDcsMjA0MjYsMjA0MzksMjAzOTgsMjA0MzIsMjA0MjAsMjA0MTgsMjA0NDIsMjA0MzAsMjA0''@;'; put 'put ''NDYsMjA0MDcsMjA4MjMsMjA4ODIsMjA4ODEsMjA4OTYsMjEwNzAsMjEwNTksMjEwNjYsMjEwNjksMjEwNjgsMjEwNjcsMjEwNjMsMjExOTEsMjExOTMsMjExODcsMjExODUsMjEyNjEsMjEzMzUsMjEzNzEsMjE0MDIsMjE0NjcsMjE2NzYsMjE2OTYsMjE2NzIsMjE3MTAsMjE3MDUsMjE2ODgs''@;'; put 'put ''MjE2NzAsMjE2ODMsMjE3MDMsMjE2OTgsMjE2OTMsMjE2NzQsMjE2OTcsMjE3MDAsMjE3MDQsMjE2NzksMjE2NzUsMjE2ODEsMjE2OTEsMjE2NzMsMjE2NzEsMjE2OTUsMjIyNzEsMjI0MDIsMjI0MTEsMjI0MzIsMjI0MzUsMjI0MzQsMjI0NzgsMjI0NDYsMjI0MTksMjI4NjksMjI4NjUsMjI4''@;'; put 'put ''NjMsMjI4NjIsMjI4NjQsMjMwMDQsMjNlMywyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2Miwy''@;'; put 'put ''NDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3''@;'; put 'put ''NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywy''@;'; put 'put ''NjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5''@;'; put 'put ''NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2Mywy''@;'; put 'put ''Nzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQw''@;'; put 'put ''OCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwz''@;'; put 'put ''MDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAw''@;'; put 'put ''MiwzMjAwNSwzMmUzLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAzLDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMyODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMyOTcyLDMyOTkzLDMyOTg3LDMyOTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMz''@;'; put 'put ''MzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMzNTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIxLDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkxLDMzNTAzLDMzNTE5LDMzNTQyLDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkz''@;'; put 'put ''LDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2ZTMsMzYyMTIsMzYyMTEsMzYyNzYsMzY1NTcsMzY1NTYsMzY4NDgsMzY4MzgsMzY4MzQsMzY4NDIsMzY4MzcsMzY4NDUsMzY4NDMsMzY4MzYsMzY4NDAsMzcwNjYsMzcwNzAsMzcwNTcsMzcwNTksMzcxOTUsMzcx''@;'; put 'put ''OTQsMzczMjUsMzgyNzQsMzg0ODAsMzg0NzUsMzg0NzYsMzg0NzcsMzg3NTQsMzg3NjEsMzg4NTksMzg4OTMsMzg4OTksMzg5MTMsMzkwODAsMzkxMzEsMzkxMzUsMzkzMTgsMzkzMjEsMjAwNTYsMjAxNDcsMjA0OTIsMjA0OTMsMjA1MTUsMjA0NjMsMjA1MTgsMjA1MTcsMjA0NzIsMjA1MjEs''@;'; put 'put ''MjA1MDIsMjA0ODYsMjA1NDAsMjA1MTEsMjA1MDYsMjA0OTgsMjA0OTcsMjA0NzQsMjA0ODAsMjA1MDAsMjA1MjAsMjA0NjUsMjA1MTMsMjA0OTEsMjA1MDUsMjA1MDQsMjA0NjcsMjA0NjIsMjA1MjUsMjA1MjIsMjA0NzgsMjA1MjMsMjA0ODksMjA4NjAsMjA5MDAsMjA5MDEsMjA4OTgsMjA5''@;'; put 'put ''NDEsMjA5NDAsMjA5MzQsMjA5MzksMjEwNzgsMjEwODQsMjEwNzYsMjEwODMsMjEwODUsMjEyOTAsMjEzNzUsMjE0MDcsMjE0MDUsMjE0NzEsMjE3MzYsMjE3NzYsMjE3NjEsMjE4MTUsMjE3NTYsMjE3MzMsMjE3NDYsMjE3NjYsMjE3NTQsMjE3ODAsMjE3MzcsMjE3NDEsMjE3MjksMjE3Njks''@;'; put 'put ''MjE3NDIsMjE3MzgsMjE3MzQsMjE3OTksMjE3NjcsMjE3NTcsMjE3NzUsMjIyNzUsMjIyNzYsMjI0NjYsMjI0ODQsMjI0NzUsMjI0NjcsMjI1MzcsMjI3OTksMjI4NzEsMjI4NzIsMjI4NzQsMjMwNTcsMjMwNjQsMjMwNjgsMjMwNzEsMjMwNjcsMjMwNTksMjMwMjAsMjMwNzIsMjMwNzUsMjMw''@;'; put 'put ''ODEsMjMwNzcsMjMwNTIsMjMwNDksMjM0MDMsMjM2NDAsMjM0NzIsMjM0NzUsMjM0NzgsMjM0NzYsMjM0NzAsMjM0NzcsMjM0ODEsMjM0ODAsMjM1NTYsMjM2MzMsMjM2MzcsMjM2MzIsMjM3ODksMjM4MDUsMjM4MDMsMjM3ODYsMjM3ODQsMjM3OTIsMjM3OTgsMjM4MDksMjM3OTYsMjQwNDYs''@;'; put 'put ''MjQxMDksMjQxMDcsMjQyMzUsMjQyMzcsMjQyMzEsMjQzNjksMjQ0NjYsMjQ0NjUsMjQ0NjQsMjQ2NjUsMjQ2NzUsMjQ2NzcsMjQ2NTYsMjQ2NjEsMjQ2ODUsMjQ2ODEsMjQ2ODcsMjQ3MDgsMjQ3MzUsMjQ3MzAsMjQ3MTcsMjQ3MjQsMjQ3MTYsMjQ3MDksMjQ3MjYsMjUxNTksMjUzMzEsMjUz''@;'; put 'put ''NTIsMjUzNDMsMjU0MjIsMjU0MDYsMjUzOTEsMjU0MjksMjU0MTAsMjU0MTQsMjU0MjMsMjU0MTcsMjU0MDIsMjU0MjQsMjU0MDUsMjUzODYsMjUzODcsMjUzODQsMjU0MjEsMjU0MjAsMjU5MjgsMjU5MjksMjYwMDksMjYwNDksMjYwNTMsMjYxNzgsMjYxODUsMjYxOTEsMjYxNzksMjYxOTQs''@;'; put 'put ''MjYxODgsMjYxODEsMjYxNzcsMjYzNjAsMjYzODgsMjYzODksMjYzOTEsMjY2NTcsMjY2ODAsMjY2OTYsMjY2OTQsMjY3MDcsMjY2ODEsMjY2OTAsMjY3MDgsMjY2NjUsMjY4MDMsMjY2NDcsMjY3MDAsMjY3MDUsMjY2ODUsMjY2MTIsMjY3MDQsMjY2ODgsMjY2ODQsMjY2OTEsMjY2NjYsMjY2''@;'; put 'put ''OTMsMjY2NDMsMjY2NDgsMjY2ODksMjc1MzAsMjc1MjksMjc1NzUsMjc2ODMsMjc2ODcsMjc2ODgsMjc2ODYsMjc2ODQsMjc4ODgsMjgwMTAsMjgwNTMsMjgwNDAsMjgwMzksMjgwMDYsMjgwMjQsMjgwMjMsMjc5OTMsMjgwNTEsMjgwMTIsMjgwNDEsMjgwMTQsMjc5OTQsMjgwMjAsMjgwMDks''@;'; put 'put ''MjgwNDQsMjgwNDIsMjgwMjUsMjgwMzcsMjgwMDUsMjgwNTIsMjg4NzQsMjg4ODgsMjg5MDAsMjg4ODksMjg4NzIsMjg4NzksMjkyNDEsMjkzMDUsMjk0MzYsMjk0MzMsMjk0MzcsMjk0MzIsMjk0MzEsMjk1NzQsMjk2NzcsMjk3MDUsMjk2NzgsMjk2NjQsMjk2NzQsMjk2NjIsMzAwMzYsMzAw''@;'; put 'put ''NDUsMzAwNDQsMzAwNDIsMzAwNDEsMzAxNDIsMzAxNDksMzAxNTEsMzAxMzAsMzAxMzEsMzAxNDEsMzAxNDAsMzAxMzcsMzAxNDYsMzAxMzYsMzAzNDcsMzAzODQsMzA0MTAsMzA0MTMsMzA0MTQsMzA1MDUsMzA0OTUsMzA0OTYsMzA1MDQsMzA2OTcsMzA3NjgsMzA3NTksMzA3NzYsMzA3NDks''@;'; put 'put ''MzA3NzIsMzA3NzUsMzA3NTcsMzA3NjUsMzA3NTIsMzA3NTEsMzA3NzAsMzEwNjEsMzEwNTYsMzEwNzIsMzEwNzEsMzEwNjIsMzEwNzAsMzEwNjksMzEwNjMsMzEwNjYsMzEyMDQsMzEyMDMsMzEyMDcsMzExOTksMzEyMDYsMzEyMDksMzExOTIsMzEzNjQsMzEzNjgsMzE0NDksMzE0OTQsMzE1''@;'; put 'put ''MDUsMzE4ODEsMzIwMzMsMzIwMjMsMzIwMTEsMzIwMTAsMzIwMzIsMzIwMzQsMzIwMjAsMzIwMTYsMzIwMjEsMzIwMjYsMzIwMjgsMzIwMTMsMzIwMjUsMzIwMjcsMzI1NzAsMzI2MDcsMzI2NjAsMzI3MDksMzI3MDUsMzI3NzQsMzI3OTIsMzI3ODksMzI3OTMsMzI3OTEsMzI4MjksMzI4MzEs''@;'; put 'put ''MzMwMDksMzMwMjYsMzMwMDgsMzMwMjksMzMwMDUsMzMwMTIsMzMwMzAsMzMwMTYsMzMwMTEsMzMwMzIsMzMwMjEsMzMwMzQsMzMwMjAsMzMwMDcsMzMyNjEsMzMyNjAsMzMyODAsMzMyOTYsMzMzMjIsMzMzMjMsMzMzMjAsMzMzMjQsMzM0NjcsMzM1NzksMzM2MTgsMzM2MjAsMzM2MTAsMzM1''@;'; put 'put ''OTIsMzM2MTYsMzM2MDksMzM1ODksMzM1ODgsMzM2MTUsMzM1ODYsMzM1OTMsMzM1OTAsMzM1NTksMzM2MDAsMzM1ODUsMzM1NzYsMzM2MDMsMzQzODgsMzQ0NDIsMzQ0NzQsMzQ0NTEsMzQ0NjgsMzQ0NzMsMzQ0NDQsMzQ0NjcsMzQ0NjAsMzQ5MjgsMzQ5MzUsMzQ5NDUsMzQ5NDYsMzQ5NDEs''@;'; put 'put ''MzQ5MzcsMzUzNTIsMzUzNDQsMzUzNDIsMzUzNDAsMzUzNDksMzUzMzgsMzUzNTEsMzUzNDcsMzUzNTAsMzUzNDMsMzUzNDUsMzU5MTIsMzU5NjIsMzU5NjEsMzYwMDEsMzYwMDIsMzYyMTUsMzY1MjQsMzY1NjIsMzY1NjQsMzY1NTksMzY3ODUsMzY4NjUsMzY4NzAsMzY4NTUsMzY4NjQsMzY4''@;'; put 'put ''NTgsMzY4NTIsMzY4NjcsMzY4NjEsMzY4NjksMzY4NTYsMzcwMTMsMzcwODksMzcwODUsMzcwOTAsMzcyMDIsMzcxOTcsMzcxOTYsMzczMzYsMzczNDEsMzczMzUsMzczNDAsMzczMzcsMzgyNzUsMzg0OTgsMzg0OTksMzg0OTcsMzg0OTEsMzg0OTMsMzg1MDAsMzg0ODgsMzg0OTQsMzg1ODcs''@;'; put 'put ''MzkxMzgsMzkzNDAsMzk1OTIsMzk2NDAsMzk3MTcsMzk3MzAsMzk3NDAsMjAwOTQsMjA2MDIsMjA2MDUsMjA1NzIsMjA1NTEsMjA1NDcsMjA1NTYsMjA1NzAsMjA1NTMsMjA1ODEsMjA1OTgsMjA1NTgsMjA1NjUsMjA1OTcsMjA1OTYsMjA1OTksMjA1NTksMjA0OTUsMjA1OTEsMjA1ODksMjA4''@;'; put 'put ''MjgsMjA4ODUsMjA5NzYsMjEwOTgsMjExMDMsMjEyMDIsMjEyMDksMjEyMDgsMjEyMDUsMjEyNjQsMjEyNjMsMjEyNzMsMjEzMTEsMjEzMTIsMjEzMTAsMjE0NDMsMjYzNjQsMjE4MzAsMjE4NjYsMjE4NjIsMjE4MjgsMjE4NTQsMjE4NTcsMjE4MjcsMjE4MzQsMjE4MDksMjE4NDYsMjE4Mzks''@;'; put 'put ''MjE4NDUsMjE4MDcsMjE4NjAsMjE4MTYsMjE4MDYsMjE4NTIsMjE4MDQsMjE4NTksMjE4MTEsMjE4MjUsMjE4NDcsMjIyODAsMjIyODMsMjIyODEsMjI0OTUsMjI1MzMsMjI1MzgsMjI1MzQsMjI0OTYsMjI1MDAsMjI1MjIsMjI1MzAsMjI1ODEsMjI1MTksMjI1MjEsMjI4MTYsMjI4ODIsMjMw''@;'; put 'put ''OTQsMjMxMDUsMjMxMTMsMjMxNDIsMjMxNDYsMjMxMDQsMjMxMDAsMjMxMzgsMjMxMzAsMjMxMTAsMjMxMTQsMjM0MDgsMjM0OTUsMjM0OTMsMjM0OTIsMjM0OTAsMjM0ODcsMjM0OTQsMjM1NjEsMjM1NjAsMjM1NTksMjM2NDgsMjM2NDQsMjM2NDUsMjM4MTUsMjM4MTQsMjM4MjIsMjM4MzUs''@;'; put 'put ''MjM4MzAsMjM4NDIsMjM4MjUsMjM4NDksMjM4MjgsMjM4MzMsMjM4NDQsMjM4NDcsMjM4MzEsMjQwMzQsMjQxMjAsMjQxMTgsMjQxMTUsMjQxMTksMjQyNDcsMjQyNDgsMjQyNDYsMjQyNDUsMjQyNTQsMjQzNzMsMjQzNzUsMjQ0MDcsMjQ0MjgsMjQ0MjUsMjQ0MjcsMjQ0NzEsMjQ0NzMsMjQ0''@;'; put 'put ''NzgsMjQ0NzIsMjQ0ODEsMjQ0ODAsMjQ0NzYsMjQ3MDMsMjQ3MzksMjQ3MTMsMjQ3MzYsMjQ3NDQsMjQ3NzksMjQ3NTYsMjQ4MDYsMjQ3NjUsMjQ3NzMsMjQ3NjMsMjQ3NTcsMjQ3OTYsMjQ3NjQsMjQ3OTIsMjQ3ODksMjQ3NzQsMjQ3OTksMjQ3NjAsMjQ3OTQsMjQ3NzUsMjUxMTQsMjUxMTUs''@;'; put 'put ''MjUxNjAsMjU1MDQsMjU1MTEsMjU0NTgsMjU0OTQsMjU1MDYsMjU1MDksMjU0NjMsMjU0NDcsMjU0OTYsMjU1MTQsMjU0NTcsMjU1MTMsMjU0ODEsMjU0NzUsMjU0OTksMjU0NTEsMjU1MTIsMjU0NzYsMjU0ODAsMjU0OTcsMjU1MDUsMjU1MTYsMjU0OTAsMjU0ODcsMjU0NzIsMjU0NjcsMjU0''@;'; put 'put ''NDksMjU0NDgsMjU0NjYsMjU5NDksMjU5NDIsMjU5MzcsMjU5NDUsMjU5NDMsMjE4NTUsMjU5MzUsMjU5NDQsMjU5NDEsMjU5NDAsMjYwMTIsMjYwMTEsMjYwMjgsMjYwNjMsMjYwNTksMjYwNjAsMjYwNjIsMjYyMDUsMjYyMDIsMjYyMTIsMjYyMTYsMjYyMTQsMjYyMDYsMjYzNjEsMjEyMDcs''@;'; put 'put ''MjYzOTUsMjY3NTMsMjY3OTksMjY3ODYsMjY3NzEsMjY4MDUsMjY3NTEsMjY3NDIsMjY4MDEsMjY3OTEsMjY3NzUsMjY4MDAsMjY3NTUsMjY4MjAsMjY3OTcsMjY3NTgsMjY3NTcsMjY3NzIsMjY3ODEsMjY3OTIsMjY3ODMsMjY3ODUsMjY3NTQsMjc0NDIsMjc1NzgsMjc2MjcsMjc2MjgsMjc2''@;'; put 'put ''OTEsMjgwNDYsMjgwOTIsMjgxNDcsMjgxMjEsMjgwODIsMjgxMjksMjgxMDgsMjgxMzIsMjgxNTUsMjgxNTQsMjgxNjUsMjgxMDMsMjgxMDcsMjgwNzksMjgxMTMsMjgwNzgsMjgxMjYsMjgxNTMsMjgwODgsMjgxNTEsMjgxNDksMjgxMDEsMjgxMTQsMjgxODYsMjgwODUsMjgxMjIsMjgxMzks''@;'; put 'put ''MjgxMjAsMjgxMzgsMjgxNDUsMjgxNDIsMjgxMzYsMjgxMDIsMjgxMDAsMjgwNzQsMjgxNDAsMjgwOTUsMjgxMzQsMjg5MjEsMjg5MzcsMjg5MzgsMjg5MjUsMjg5MTEsMjkyNDUsMjkzMDksMjkzMTMsMjk0NjgsMjk0NjcsMjk0NjIsMjk0NTksMjk0NjUsMjk1NzUsMjk3MDEsMjk3MDYsMjk2''@;'; put 'put ''OTksMjk3MDIsMjk2OTQsMjk3MDksMjk5MjAsMjk5NDIsMjk5NDMsMjk5ODAsMjk5ODYsMzAwNTMsMzAwNTQsMzAwNTAsMzAwNjQsMzAwOTUsMzAxNjQsMzAxNjUsMzAxMzMsMzAxNTQsMzAxNTcsMzAzNTAsMzA0MjAsMzA0MTgsMzA0MjcsMzA1MTksMzA1MjYsMzA1MjQsMzA1MTgsMzA1MjAs''@;'; put 'put ''MzA1MjIsMzA4MjcsMzA3ODcsMzA3OTgsMzEwNzcsMzEwODAsMzEwODUsMzEyMjcsMzEzNzgsMzEzODEsMzE1MjAsMzE1MjgsMzE1MTUsMzE1MzIsMzE1MjYsMzE1MTMsMzE1MTgsMzE1MzQsMzE4OTAsMzE4OTUsMzE4OTMsMzIwNzAsMzIwNjcsMzIxMTMsMzIwNDYsMzIwNTcsMzIwNjAsMzIw''@;'; put 'put ''NjQsMzIwNDgsMzIwNTEsMzIwNjgsMzIwNDcsMzIwNjYsMzIwNTAsMzIwNDksMzI1NzMsMzI2NzAsMzI2NjYsMzI3MTYsMzI3MTgsMzI3MjIsMzI3OTYsMzI4NDIsMzI4MzgsMzMwNzEsMzMwNDYsMzMwNTksMzMwNjcsMzMwNjUsMzMwNzIsMzMwNjAsMzMyODIsMzMzMzMsMzMzMzUsMzMzMzQs''@;'; put 'put ''MzMzMzcsMzM2NzgsMzM2OTQsMzM2ODgsMzM2NTYsMzM2OTgsMzM2ODYsMzM3MjUsMzM3MDcsMzM2ODIsMzM2NzQsMzM2ODMsMzM2NzMsMzM2OTYsMzM2NTUsMzM2NTksMzM2NjAsMzM2NzAsMzM3MDMsMzQzODksMjQ0MjYsMzQ1MDMsMzQ0OTYsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MDIsMzQ1''@;'; put 'put ''MDcsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ4OTksMzQ5NzQsMzQ5NTIsMzQ5ODcsMzQ5NjIsMzQ5NjYsMzQ5NTcsMzQ5NTUsMzUyMTksMzUyMTUsMzUzNzAsMzUzNTcsMzUzNjMsMzUzNjUsMzUzNzcsMzUzNzMsMzUzNTksMzUzNTUsMzUzNjIsMzU5MTMsMzU5MzAsMzYwMDksMzYwMTIsMzYwMTEs''@;'; put 'put ''MzYwMDgsMzYwMTAsMzYwMDcsMzYxOTksMzYxOTgsMzYyODYsMzYyODIsMzY1NzEsMzY1NzUsMzY4ODksMzY4NzcsMzY4OTAsMzY4ODcsMzY4OTksMzY4OTUsMzY4OTMsMzY4ODAsMzY4ODUsMzY4OTQsMzY4OTYsMzY4NzksMzY4OTgsMzY4ODYsMzY4OTEsMzY4ODQsMzcwOTYsMzcxMDEsMzcx''@;'; put 'put ''MTcsMzcyMDcsMzczMjYsMzczNjUsMzczNTAsMzczNDcsMzczNTEsMzczNTcsMzczNTMsMzgyODEsMzg1MDYsMzg1MTcsMzg1MTUsMzg1MjAsMzg1MTIsMzg1MTYsMzg1MTgsMzg1MTksMzg1MDgsMzg1OTIsMzg2MzQsMzg2MzMsMzE0NTYsMzE0NTUsMzg5MTQsMzg5MTUsMzk3NzAsNDAxNjUs''@;'; put 'put ''NDA1NjUsNDA1NzUsNDA2MTMsNDA2MzUsMjA2NDIsMjA2MjEsMjA2MTMsMjA2MzMsMjA2MjUsMjA2MDgsMjA2MzAsMjA2MzIsMjA2MzQsMjYzNjgsMjA5NzcsMjExMDYsMjExMDgsMjExMDksMjEwOTcsMjEyMTQsMjEyMTMsMjEyMTEsMjEzMzgsMjE0MTMsMjE4ODMsMjE4ODgsMjE5MjcsMjE4''@;'; put 'put ''ODQsMjE4OTgsMjE5MTcsMjE5MTIsMjE4OTAsMjE5MTYsMjE5MzAsMjE5MDgsMjE4OTUsMjE4OTksMjE4OTEsMjE5MzksMjE5MzQsMjE5MTksMjE4MjIsMjE5MzgsMjE5MTQsMjE5NDcsMjE5MzIsMjE5MzcsMjE4ODYsMjE4OTcsMjE5MzEsMjE5MTMsMjIyODUsMjI1NzUsMjI1NzAsMjI1ODAs''@;'; put 'put ''MjI1NjQsMjI1NzYsMjI1NzcsMjI1NjEsMjI1NTcsMjI1NjAsMjI3NzcsMjI3NzgsMjI4ODAsMjMxNTksMjMxOTQsMjMxNjcsMjMxODYsMjMxOTUsMjMyMDcsMjM0MTEsMjM0MDksMjM1MDYsMjM1MDAsMjM1MDcsMjM1MDQsMjM1NjIsMjM1NjMsMjM2MDEsMjM4ODQsMjM4ODgsMjM4NjAsMjM4''@;'; put 'put ''NzksMjQwNjEsMjQxMzMsMjQxMjUsMjQxMjgsMjQxMzEsMjQxOTAsMjQyNjYsMjQyNTcsMjQyNTgsMjQyNjAsMjQzODAsMjQ0MjksMjQ0ODksMjQ0OTAsMjQ0ODgsMjQ3ODUsMjQ4MDEsMjQ3NTQsMjQ3NTgsMjQ4MDAsMjQ4NjAsMjQ4NjcsMjQ4MjYsMjQ4NTMsMjQ4MTYsMjQ4MjcsMjQ4MjAs''@;'; put 'put ''MjQ5MzYsMjQ4MTcsMjQ4NDYsMjQ4MjIsMjQ4NDEsMjQ4MzIsMjQ4NTAsMjUxMTksMjUxNjEsMjU1MDcsMjU0ODQsMjU1NTEsMjU1MzYsMjU1NzcsMjU1NDUsMjU1NDIsMjU1NDksMjU1NTQsMjU1NzEsMjU1NTIsMjU1NjksMjU1NTgsMjU1ODEsMjU1ODIsMjU0NjIsMjU1ODgsMjU1NzgsMjU1''@;'; put 'put ''NjMsMjU2ODIsMjU1NjIsMjU1OTMsMjU5NTAsMjU5NTgsMjU5NTQsMjU5NTUsMjYwMDEsMjZlMywyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwy''@;'; put 'put ''NjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5''@;'; put 'put ''NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwy''@;'; put 'put ''ODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTcz''@;'; put 'put ''MCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwz''@;'; put 'put ''MDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEw''@;'; put 'put ''NCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwz''@;'; put 'put ''MzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5''@;'; put 'put ''NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4Miwz''@;'; put 'put ''NTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYw''@;'; put 'put ''MCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4Mywz''@;'; put 'put ''ODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0''@;'; put 'put ''NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwy''@;'; put 'put ''MTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYw''@;'; put 'put ''NCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0Nywy''@;'; put 'put ''NDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYy''@;'; put 'put ''OCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwy''@;'; put 'put ''Njk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0''@;'; put 'put ''OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2Niwy''@;'; put 'put ''OTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1''@;'; put 'put ''NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwz''@;'; put 'put ''MTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4''@;'; put 'put ''MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4Mywz''@;'; put 'put ''Mzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAz''@;'; put 'put ''NywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwz''@;'; put 'put ''NTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkz''@;'; put 'put ''OCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwz''@;'; put 'put ''NzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODky''@;'; put 'put ''MiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywy''@;'; put 'put ''MDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3''@;'; put 'put ''NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwy''@;'; put 'put ''MzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4''@;'; put 'put ''OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2Nywy''@;'; put 'put ''NzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2''@;'; put 'put ''NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwy''@;'; put 'put ''OTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQw''@;'; put 'put ''MSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4Niwz''@;'; put 'put ''MjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1''@;'; put 'put ''NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwz''@;'; put 'put ''NTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0''@;'; put 'put ''OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5Niwz''@;'; put 'put ''NzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4''@;'; put 'put ''NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1Niwy''@;'; put 'put ''MTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5''@;'; put 'put ''NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywy''@;'; put 'put ''NDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTcz''@;'; put 'put ''NiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2Niwy''@;'; put 'put ''NzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUz''@;'; put 'put ''OCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0Niwz''@;'; put 'put ''MDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2''@;'; put 'put ''NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4Nywz''@;'; put 'put ''Mjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2''@;'; put 'put ''MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0Miwz''@;'; put 'put ''NTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4''@;'; put 'put ''MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2Mywz''@;'; put 'put ''NzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4''@;'; put 'put ''NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwy''@;'; put 'put ''MDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5''@;'; put 'put ''NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwy''@;'; put 'put ''NTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1''@;'; put 'put ''MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwy''@;'; put 'put ''OTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQx''@;'; put 'put ''OCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5Mywz''@;'; put 'put ''MzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIz''@;'; put 'put ''OCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2Nywz''@;'; put 'put ''NjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3''@;'; put 'put ''OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwz''@;'; put 'put ''OTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0''@;'; put 'put ''NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwy''@;'; put 'put ''NTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2''@;'; put 'put ''NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywy''@;'; put 'put ''OTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1''@;'; put 'put ''MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwz''@;'; put 'put ''MjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5''@;'; put 'put ''NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwz''@;'; put 'put ''NTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5''@;'; put 'put ''MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwz''@;'; put 'put ''ODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1''@;'; put 'put ''MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwy''@;'; put 'put ''ODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4''@;'; put 'put ''NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwz''@;'; put 'put ''NDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzN2Uz''@;'; put 'put ''LDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4NjIwLDM4NjE3LDM4NjE5LDM4NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4''@;'; put 'put ''OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgyLDM5ODgxLDM5OTMzLDM5ODgwLDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcy''@;'; put 'put ''LDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3MzU3LDI3MzU0LDI3MzQ3LDI4Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4''@;'; put 'put ''NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAzLDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3LDMxODA2LDMxODA3LDMxODAwLDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1''@;'; put 'put ''LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQwLDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0ODA5LDM0ODE0LDM1MTY4LDM1MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1''@;'; put 'put ''NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYwLDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAyLDM3MDAzLDM3Mjk3LDM3Mjk0LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMy''@;'; put 'put ''LDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5ZTMsMzkwMDMsMzkxMDAsMzkyMzcsMzkyNDEsMzk0NDYsMzk0NDksMzk2OTMsMzk5MTIsMzk5''@;'; put 'put ''MTEsMzk4OTQsMzk4OTksNDAzMjksNDAyODksNDAzMDYsNDAyOTgsNDAzMDAsNDA1OTQsNDA1OTksNDA1OTUsNDA2MjgsMjEyNDAsMjIxODQsMjIxOTksMjIxOTgsMjIxOTYsMjIyMDQsMjI3NTYsMjMzNjAsMjMzNjMsMjM0MjEsMjM1NDIsMjQwMDksMjUwODAsMjUwODIsMjU4ODAsMjU4NzYs''@;'; put 'put ''MjU4ODEsMjYzNDIsMjY0MDcsMjczNzIsMjg3MzQsMjg3MjAsMjg3MjIsMjkyMDAsMjk1NjMsMjk5MDMsMzAzMDYsMzAzMDksMzEwMTQsMzEwMTgsMzEwMjAsMzEwMTksMzE0MzEsMzE0NzgsMzE4MjAsMzE4MTEsMzE4MjEsMzE5ODMsMzE5ODQsMzY3ODIsMzIzODEsMzIzODAsMzIzODYsMzI1''@;'; put 'put ''ODgsMzI3NjgsMzMyNDIsMzMzODIsMzQyOTksMzQyOTcsMzQzMjEsMzQyOTgsMzQzMTAsMzQzMTUsMzQzMTEsMzQzMTQsMzQ4MzYsMzQ4MzcsMzUxNzIsMzUyNTgsMzUzMjAsMzU2OTYsMzU2OTIsMzU2ODYsMzU2OTUsMzU2NzksMzU2OTEsMzYxMTEsMzYxMDksMzY0ODksMzY0ODEsMzY0ODUs''@;'; put 'put ''MzY0ODIsMzczMDAsMzczMjMsMzc5MTIsMzc4OTEsMzc4ODUsMzgzNjksMzg3MDQsMzkxMDgsMzkyNTAsMzkyNDksMzkzMzYsMzk0NjcsMzk0NzIsMzk0NzksMzk0NzcsMzk5NTUsMzk5NDksNDA1NjksNDA2MjksNDA2ODAsNDA3NTEsNDA3OTksNDA4MDMsNDA4MDEsMjA3OTEsMjA3OTIsMjIy''@;'; put 'put ''MDksMjIyMDgsMjIyMTAsMjI4MDQsMjM2NjAsMjQwMTMsMjUwODQsMjUwODYsMjU4ODUsMjU4ODQsMjYwMDUsMjYzNDUsMjczODcsMjczOTYsMjczODYsMjc1NzAsMjg3NDgsMjkyMTEsMjkzNTEsMjk5MTAsMjk5MDgsMzAzMTMsMzA2NzUsMzE4MjQsMzIzOTksMzIzOTYsMzI3MDAsMzQzMjcs''@;'; put 'put ''MzQzNDksMzQzMzAsMzQ4NTEsMzQ4NTAsMzQ4NDksMzQ4NDcsMzUxNzgsMzUxODAsMzUyNjEsMzU3MDAsMzU3MDMsMzU3MDksMzYxMTUsMzY0OTAsMzY0OTMsMzY0OTEsMzY3MDMsMzY3ODMsMzczMDYsMzc5MzQsMzc5MzksMzc5NDEsMzc5NDYsMzc5NDQsMzc5MzgsMzc5MzEsMzgzNzAsMzg3''@;'; put 'put ''MTIsMzg3MTMsMzg3MDYsMzg5MTEsMzkwMTUsMzkwMTMsMzkyNTUsMzk0OTMsMzk0OTEsMzk0ODgsMzk0ODYsMzk2MzEsMzk3NjQsMzk3NjEsMzk5ODEsMzk5NzMsNDAzNjcsNDAzNzIsNDAzODYsNDAzNzYsNDA2MDUsNDA2ODcsNDA3MjksNDA3OTYsNDA4MDYsNDA4MDcsMjA3OTYsMjA3OTUs''@;'; put 'put ''MjIyMTYsMjIyMTgsMjIyMTcsMjM0MjMsMjQwMjAsMjQwMTgsMjQzOTgsMjUwODcsMjU4OTIsMjc0MDIsMjc0ODksMjg3NTMsMjg3NjAsMjk1NjgsMjk5MjQsMzAwOTAsMzAzMTgsMzAzMTYsMzExNTUsMzE4NDAsMzE4MzksMzI4OTQsMzI4OTMsMzMyNDcsMzUxODYsMzUxODMsMzUzMjQsMzU3''@;'; put 'put ''MTIsMzYxMTgsMzYxMTksMzY0OTcsMzY0OTksMzY3MDUsMzcxOTIsMzc5NTYsMzc5NjksMzc5NzAsMzg3MTcsMzg3MTgsMzg4NTEsMzg4NDksMzkwMTksMzkyNTMsMzk1MDksMzk1MDEsMzk2MzQsMzk3MDYsNDAwMDksMzk5ODUsMzk5OTgsMzk5OTUsNDA0MDMsNDA0MDcsNDA3NTYsNDA4MTIs''@;'; put 'put ''NDA4MTAsNDA4NTIsMjIyMjAsMjQwMjIsMjUwODgsMjU4OTEsMjU4OTksMjU4OTgsMjYzNDgsMjc0MDgsMjk5MTQsMzE0MzQsMzE4NDQsMzE4NDMsMzE4NDUsMzI0MDMsMzI0MDYsMzI0MDQsMzMyNTAsMzQzNjAsMzQzNjcsMzQ4NjUsMzU3MjIsMzcwMDgsMzcwMDcsMzc5ODcsMzc5ODQsMzc5''@;'; put 'put ''ODgsMzg3NjAsMzkwMjMsMzkyNjAsMzk1MTQsMzk1MTUsMzk1MTEsMzk2MzUsMzk2MzYsMzk2MzMsNDAwMjAsNDAwMjMsNDAwMjIsNDA0MjEsNDA2MDcsNDA2OTIsMjIyMjUsMjI3NjEsMjU5MDAsMjg3NjYsMzAzMjEsMzAzMjIsMzA2NzksMzI1OTIsMzI2NDgsMzQ4NzAsMzQ4NzMsMzQ5MTQs''@;'; put 'put ''MzU3MzEsMzU3MzAsMzU3MzQsMzMzOTksMzYxMjMsMzczMTIsMzc5OTQsMzg3MjIsMzg3MjgsMzg3MjQsMzg4NTQsMzkwMjQsMzk1MTksMzk3MTQsMzk3NjgsNDAwMzEsNDA0NDEsNDA0NDIsNDA1NzIsNDA1NzMsNDA3MTEsNDA4MjMsNDA4MTgsMjQzMDcsMjc0MTQsMjg3NzEsMzE4NTIsMzE4''@;'; put 'put ''NTQsMzQ4NzUsMzUyNjQsMzY1MTMsMzczMTMsMzgwMDIsMzhlMywzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0''@;'; put 'put ''MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4''@;'; put 'put ''NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwy''@;'; put 'put ''NjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEy''@;'; put 'put ''MzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4''@;'; put 'put ''LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEy''@;'; put 'put ''NDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2''@;'; put 'put ''LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEy''@;'; put 'put ''NDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTEx''@;'; put 'put ''LDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwx''@;'; put 'put ''MDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3Niwx''@;'; put 'put ''MDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3''@;'; put 'put ''NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDEx''@;'; put 'put ''OTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIs''@;'; put 'put ''NjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwy''@;'; put 'put ''MTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgz''@;'; put 'put ''MSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywy''@;'; put 'put ''MDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMy''@;'; put 'put ''NCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwy''@;'; put 'put ''NTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3''@;'; put 'put ''OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5Nywy''@;'; put 'put ''MDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4''@;'; put 'put ''OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwy''@;'; put 'put ''Mjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMy''@;'; put 'put ''NSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwy''@;'; put 'put ''NTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3''@;'; put 'put ''NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3Nywy''@;'; put 'put ''OTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQx''@;'; put 'put ''MiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwy''@;'; put 'put ''MDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5''@;'; put 'put ''NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwy''@;'; put 'put ''MjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4''@;'; put 'put ''NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4Nywy''@;'; put 'put ''NDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYy''@;'; put 'put ''MiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwy''@;'; put 'put ''NjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUy''@;'; put 'put ''MSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwy''@;'; put 'put ''Nzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgw''@;'; put 'put ''MywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4Mywz''@;'; put 'put ''MDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3''@;'; put 'put ''MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwz''@;'; put 'put ''NjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQy''@;'; put 'put ''MywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwy''@;'; put 'put ''MTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAw''@;'; put 'put ''OSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwy''@;'; put 'put ''Mzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMy''@;'; put 'put ''NywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwy''@;'; put 'put ''NTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2''@;'; put 'put ''MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwy''@;'; put 'put ''NjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYx''@;'; put 'put ''NiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwy''@;'; put 'put ''NzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQx''@;'; put 'put ''OCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwz''@;'; put 'put ''MDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4''@;'; put 'put ''MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwz''@;'; put 'put ''Mjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5''@;'; put 'put ''NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4Mywz''@;'; put 'put ''NTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5''@;'; put 'put ''OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwy''@;'; put 'put ''MTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1''@;'; put 'put ''MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4Niwy''@;'; put 'put ''MzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2''@;'; put 'put ''OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwy''@;'; put 'put ''NTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4''@;'; put 'put ''NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2Miwy''@;'; put 'put ''NjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1''@;'; put 'put ''MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyOGUzLDI4MDU1LDI4MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4MDA4LDI4MDQzLDI4MDMwLDI4MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4''@;'; put 'put ''MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkwLDI4ODc4LDI4ODk3LDI5MjUwLDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0''@;'; put 'put ''LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5NjU4LDI5NjU1LDI5NjU2LDI5NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5''@;'; put 'put ''OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMwMTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkzLDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgxLDMwNDg1LDMwNDg5LDMwNDkwLDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0''@;'; put 'put ''LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYyLDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMxMDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMxMjAwLDMxMjE0LDMxMjEzLDMxMjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMx''@;'; put 'put ''MzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMxNTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgyLDMxODg0LDMxODgwLDMxODg1LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0''@;'; put 'put ''LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMyNjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMyODMwLDMyODI1LDMzMDE4LDMzMDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMz''@;'; put 'put ''MDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMzNTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4LDMzNTQ0LDMzNTk2LDMzNjEzLDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgz''@;'; put 'put ''LDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0NDU1LDM0NDM4LDM0NDQzLDM0NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0''@;'; put 'put ''NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMyLDM0OTQwLDM1MzQ2LDM1OTExLDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0''@;'; put 'put ''LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3MDg3LDM3MDkzLDM3MDgwLDM3MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3''@;'; put 'put ''MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTczLDIwNTk0LDIwNTUyLDIwNTU3LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAx''@;'; put 'put ''LDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkwLDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIxMDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIxMjkzLDIxNDA0LDIxODc3LDIxODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIx''@;'; put 'put ''ODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIxODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMyLDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5LDIyNTIzLDIyNTQ4LDIyNDk4LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5''@;'; put 'put ''LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIyNTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIyNTEzLDIyNTA1LDIyNTEyLDIyNTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIz''@;'; put 'put ''MTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIzMTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgyLDIzMTAyLDIzMTE3LDIzMDk3LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIx''@;'; put 'put ''LDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIzODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIzODU2LDIzODI2LDIzODQzLDIzODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0''@;'; put 'put ''MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUyLDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0NzkzLDI0Nzk3LDI0Nzc2LDI0NzUzLDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0Nzcx''@;'; put 'put ''LDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAyLDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1NDYxLDI1NTAwLDI1NDUzLDI1NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1''@;'; put 'put ''NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEwLDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMzLDI2NzM0LDI2Nzk4LDI2Nzk1LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2Nzkz''@;'; put 'put ''LDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2NzQ0LDI2NzQ3LDI2NzY5LDI2NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3''@;'; put 'put ''NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYwLDI4MTA0LDI4MTI4LDI4MTI3LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1''@;'; put 'put ''LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4OTIyLDI4OTQxLDI4OTE5LDI4OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4''@;'; put 'put ''OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3LDI5NDY0LDI5NDUwLDI5NDQ4LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2''@;'; put 'put ''LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5NjkyLDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMwMTU1LDMwMTU2LDMwMTYxLDMwMTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMw''@;'; put 'put ''NTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMwNTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2LDMxMDc5LDMxMDgxLDMxMDgyLDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2''@;'; put 'put ''LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQwLDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMxNTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMxNTMzLDMxNTM1LDMxNTM4LDMxNTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMx''@;'; put 'put ''ODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMyMDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYzLDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4LDMyNjY5LDMyNjY3LDMyNzE0LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzEx''@;'; put 'put ''LDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMzMDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMzMDUzLDMzMDU4LDMzMjk3LDMzMzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMz''@;'; put 'put ''Mzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMzNjc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUzLDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkzLDMzNjkxLDMzNzA2LDMzNjc1LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3''@;'; put 'put ''LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0MzkwLDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0NDg4LDM0NTA4LDM0NDg0LDM0NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0''@;'; put 'put ''ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcxLDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4LDM1MjAyLDM1Mjg2LDM1Mjg5LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4''@;'; put 'put ''LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2NTc2LDM2NTc3LDM2OTAwLDM2ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3''@;'; put 'put ''MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAzLDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4LDM3MzQ4LDM3MzY5LDM3MzU0LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2''@;'; put 'put ''LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYyLDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIwNjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIwNjIwLDIwNjIyLDIwNjM3LDIwNTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIw''@;'; put 'put ''ODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIxOTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2LDIxOTI0LDIxODg1LDIxOTAwLDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAy''@;'; put 'put ''LDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIyNTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIyNTczLDIyNTcyLDIyNTg3LDIyODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIz''@;'; put 'put ''MjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIzMDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcxLDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2LDIzMTgzLDIzMTg3LDIzMTk3LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1''@;'; put 'put ''LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgzLDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIzODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIzODk3LDIzODc0LDIzODY1LDIzODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIz''@;'; put 'put ''ODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0NzcyLDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIxLDI0ODUxLDI0ODI0LDI0ODI4LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYx''@;'; put 'put ''LDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUwLDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1NTg2LDI1NTg5LDI1Njk3LDI1NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1''@;'; put 'put ''NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0LDI2MDMwLDI2MDY0LDI2MDY2LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1''@;'; put 'put ''LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIyLDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2ODk2LDI2ODY3LDI2ODQ5LDI2ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2''@;'; put 'put ''ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2LDI2ODM2LDI2ODU3LDI2OTAxLDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1''@;'; put 'put ''LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4MjU4LDI4MjAzLDI4MjIzLDI4MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4''@;'; put 'put ''MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4MjczLDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYxLDI4MTk5LDI4MjgwLDI4MjYwLDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYy''@;'; put 'put ''LDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5MzIwLDI5MzIxLDI5MzE4LDI5MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5''@;'; put 'put ''NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMyLDI5NzMxLDI5NzI1LDI5NzM3LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYz''@;'; put 'put ''LDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMwNTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMwNTM5LDMwNTQwLDMwNjg2LDMwNzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMw''@;'; put 'put ''ODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMxMDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYyLDMxNDYwLDMxNTYyLDMxNTQ3LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUy''@;'; put 'put ''LDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMyMDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMyMTA1LDMyMDgxLDMyMDk1LDMyMDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMy''@;'; put 'put ''Njc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMzMDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcxLDMzMjcyLDMzMjczLDMzMjg0LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1''@;'; put 'put ''LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMzNzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMzNzUyLDMzNzkxLDMzNzYxLDMzNzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMz''@;'; put 'put ''ODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMzNzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMxLDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYyLDMzODE5LDMzNzU1LDMzNzkwLDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMx''@;'; put 'put ''LDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1MDAyLDM1MDMxLDM1MDAxLDM1ZTMsMzUwMDgsMzUwMDYsMzQ5OTgsMzUwMDQsMzQ5OTksMzUwMDUsMzQ5OTQsMzUwNzMsMzUwMTcsMzUyMjEsMzUy''@;'; put 'put ''MjQsMzUyMjMsMzUyOTMsMzUyOTAsMzUyOTEsMzU0MDYsMzU0MDUsMzUzODUsMzU0MTcsMzUzOTIsMzU0MTUsMzU0MTYsMzUzOTYsMzUzOTcsMzU0MTAsMzU0MDAsMzU0MDksMzU0MDIsMzU0MDQsMzU0MDcsMzU5MzUsMzU5NjksMzU5NjgsMzYwMjYsMzYwMzAsMzYwMTYsMzYwMjUsMzYwMjEs''@;'; put 'put ''MzYyMjgsMzYyMjQsMzYyMzMsMzYzMTIsMzYzMDcsMzYzMDEsMzYyOTUsMzYzMTAsMzYzMTYsMzYzMDMsMzYzMDksMzYzMTMsMzYyOTYsMzYzMTEsMzYyOTMsMzY1OTEsMzY1OTksMzY2MDIsMzY2MDEsMzY1ODIsMzY1OTAsMzY1ODEsMzY1OTcsMzY1ODMsMzY1ODQsMzY1OTgsMzY1ODcsMzY1''@;'; put 'put ''OTMsMzY1ODgsMzY1OTYsMzY1ODUsMzY5MDksMzY5MTYsMzY5MTEsMzcxMjYsMzcxNjQsMzcxMjQsMzcxMTksMzcxMTYsMzcxMjgsMzcxMTMsMzcxMTUsMzcxMjEsMzcxMjAsMzcxMjcsMzcxMjUsMzcxMjMsMzcyMTcsMzcyMjAsMzcyMTUsMzcyMTgsMzcyMTYsMzczNzcsMzczODYsMzc0MTMs''@;'; put 'put ''MzczNzksMzc0MDIsMzc0MTQsMzczOTEsMzczODgsMzczNzYsMzczOTQsMzczNzUsMzczNzMsMzczODIsMzczODAsMzc0MTUsMzczNzgsMzc0MDQsMzc0MTIsMzc0MDEsMzczOTksMzczODEsMzczOTgsMzgyNjcsMzgyODUsMzgyODQsMzgyODgsMzg1MzUsMzg1MjYsMzg1MzYsMzg1MzcsMzg1''@;'; put 'put ''MzEsMzg1MjgsMzg1OTQsMzg2MDAsMzg1OTUsMzg2NDEsMzg2NDAsMzg3NjQsMzg3NjgsMzg3NjYsMzg5MTksMzkwODEsMzkxNDcsNDAxNjYsNDA2OTcsMjAwOTksMjAxMDAsMjAxNTAsMjA2NjksMjA2NzEsMjA2NzgsMjA2NTQsMjA2NzYsMjA2ODIsMjA2NjAsMjA2ODAsMjA2NzQsMjA2NTYs''@;'; put 'put ''MjA2NzMsMjA2NjYsMjA2NTcsMjA2ODMsMjA2ODEsMjA2NjIsMjA2NjQsMjA5NTEsMjExMTQsMjExMTIsMjExMTUsMjExMTYsMjE5NTUsMjE5NzksMjE5NjQsMjE5NjgsMjE5NjMsMjE5NjIsMjE5ODEsMjE5NTIsMjE5NzIsMjE5NTYsMjE5OTMsMjE5NTEsMjE5NzAsMjE5MDEsMjE5NjcsMjE5''@;'; put 'put ''NzMsMjE5ODYsMjE5NzQsMjE5NjAsMjIwMDIsMjE5NjUsMjE5NzcsMjE5NTQsMjIyOTIsMjI2MTEsMjI2MzIsMjI2MjgsMjI2MDcsMjI2MDUsMjI2MDEsMjI2MzksMjI2MTMsMjI2MDYsMjI2MjEsMjI2MTcsMjI2MjksMjI2MTksMjI1ODksMjI2MjcsMjI2NDEsMjI3ODAsMjMyMzksMjMyMzYs''@;'; put 'put ''MjMyNDMsMjMyMjYsMjMyMjQsMjMyMTcsMjMyMjEsMjMyMTYsMjMyMzEsMjMyNDAsMjMyMjcsMjMyMzgsMjMyMjMsMjMyMzIsMjMyNDIsMjMyMjAsMjMyMjIsMjMyNDUsMjMyMjUsMjMxODQsMjM1MTAsMjM1MTIsMjM1MTMsMjM1ODMsMjM2MDMsMjM5MjEsMjM5MDcsMjM4ODIsMjM5MDksMjM5''@;'; put 'put ''MjIsMjM5MTYsMjM5MDIsMjM5MTIsMjM5MTEsMjM5MDYsMjQwNDgsMjQxNDMsMjQxNDIsMjQxMzgsMjQxNDEsMjQxMzksMjQyNjEsMjQyNjgsMjQyNjIsMjQyNjcsMjQyNjMsMjQzODQsMjQ0OTUsMjQ0OTMsMjQ4MjMsMjQ5MDUsMjQ5MDYsMjQ4NzUsMjQ5MDEsMjQ4ODYsMjQ4ODIsMjQ4Nzgs''@;'; put 'put ''MjQ5MDIsMjQ4NzksMjQ5MTEsMjQ4NzMsMjQ4OTYsMjUxMjAsMzcyMjQsMjUxMjMsMjUxMjUsMjUxMjQsMjU1NDEsMjU1ODUsMjU1NzksMjU2MTYsMjU2MTgsMjU2MDksMjU2MzIsMjU2MzYsMjU2NTEsMjU2NjcsMjU2MzEsMjU2MjEsMjU2MjQsMjU2NTcsMjU2NTUsMjU2MzQsMjU2MzUsMjU2''@;'; put 'put ''MTIsMjU2MzgsMjU2NDgsMjU2NDAsMjU2NjUsMjU2NTMsMjU2NDcsMjU2MTAsMjU2MjYsMjU2NjQsMjU2MzcsMjU2MzksMjU2MTEsMjU1NzUsMjU2MjcsMjU2NDYsMjU2MzMsMjU2MTQsMjU5NjcsMjYwMDIsMjYwNjcsMjYyNDYsMjYyNTIsMjYyNjEsMjYyNTYsMjYyNTEsMjYyNTAsMjYyNjUs''@;'; put 'put ''MjYyNjAsMjYyMzIsMjY0MDAsMjY5ODIsMjY5NzUsMjY5MzYsMjY5NTgsMjY5NzgsMjY5OTMsMjY5NDMsMjY5NDksMjY5ODYsMjY5MzcsMjY5NDYsMjY5NjcsMjY5NjksMjcwMDIsMjY5NTIsMjY5NTMsMjY5MzMsMjY5ODgsMjY5MzEsMjY5NDEsMjY5ODEsMjY4NjQsMjdlMywyNjkzMiwyNjk4''@;'; put 'put ''NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywy''@;'; put 'put ''NzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMz''@;'; put 'put ''OCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwy''@;'; put 'put ''OTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3''@;'; put 'put ''MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwz''@;'; put 'put ''MDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2''@;'; put 'put ''OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2Nywz''@;'; put 'put ''MTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEy''@;'; put 'put ''NCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0Miwz''@;'; put 'put ''MzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkw''@;'; put 'put ''OCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwz''@;'; put 'put ''Mzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAz''@;'; put 'put ''MCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwz''@;'; put 'put ''NTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMz''@;'; put 'put ''MiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwz''@;'; put 'put ''NzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4''@;'; put 'put ''OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwz''@;'; put 'put ''ODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5''@;'; put 'put ''MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwy''@;'; put 'put ''MjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3''@;'; put 'put ''NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwy''@;'; put 'put ''Mzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0''@;'; put 'put ''NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwy''@;'; put 'put ''NTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAz''@;'; put 'put ''MCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwy''@;'; put 'put ''NzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1''@;'; put 'put ''NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwy''@;'; put 'put ''ODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgx''@;'; put 'put ''MCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwz''@;'; put 'put ''MDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQw''@;'; put 'put ''MCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2Mywz''@;'; put 'put ''MjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2''@;'; put 'put ''MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNGUzLDMzOTQ5LDMz''@;'; put 'put ''OTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMzOTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4LDMzOTM3LDM0NDAxLDM0NjExLDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2''@;'; put 'put ''LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMwLDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0NTk4LDM0NTk5LDM0NjE2LDM0NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1''@;'; put 'put ''MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMzLDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5LDM1NDgxLDM1NDY3LDM1NDc0LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1''@;'; put 'put ''LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2NjIyLDM2NjIxLDM3MTU1LDM3MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3''@;'; put 'put ''MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3LDM3NDk3LDM3NTI3LDM3NTAzLDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1''@;'; put 'put ''LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQzLDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4NzgxLDM4Nzc4LDM4NzgyLDM4Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4''@;'; put 'put ''Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUzLDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAxLDM5NjUxLDM5NjU1LDM5NzQyLDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3''@;'; put 'put ''LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQzLDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIwNzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIyMDg4LDIyMDgyLDIyMDkyLDIyMDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIy''@;'; put 'put ''MTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIyMDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5LDIyNzgzLDIzMjk1LDIzMjg0LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4''@;'; put 'put ''LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIzOTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0MTY5LDI0MTU3LDI0MTYwLDI0MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0''@;'; put 'put ''MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkxLDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDExLDI1MTMzLDI1NzEwLDI1NzEyLDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2''@;'; put 'put ''LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUyLDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2Mjk1LDI2MjgyLDI2Mjg3LDI3MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3''@;'; put 'put ''MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMxLDI3MTQ5LDI3MTMyLDI3MTE1LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUx''@;'; put 'put ''LDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4NTYyLDI4NTU3LDI4NTUzLDI4NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4''@;'; put 'put ''NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEzLDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1LDI4NTIxLDI4NTQzLDI4NTY1LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2''@;'; put 'put ''LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkzLDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5NTIyLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5''@;'; put 'put ''NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2LDMwMjQzLDMwMjM0LDMwMjQ4LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYz''@;'; put 'put ''LDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMwOTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMxMTM4LDMxMTMxLDI3NTEwLDMxMjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMx''@;'; put 'put ''NjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMxOTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUwLDMyMjMwLDMyMjQ2LDMyMjQxLDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0''@;'; put 'put ''LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMzMTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMzMzYzLDMzMzYyLDMzMzYwLDMzMzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0''@;'; put 'put ''MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYwLDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3LDM0MDM1LDM0MDQ0LDM0MDY2LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4''@;'; put 'put ''LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIzLDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0NDAyLDM0NjQ2LDM0NjU5LDM0NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0''@;'; put 'put ''NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0NjcxLDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5LDM0NjgzLDM0Njc3LDM0NjU4LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0''@;'; put 'put ''LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1NTM5LDM1NTM3LDM1NTQwLDM1NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1''@;'; put 'put ''NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUxLDM2Mzg0LDM2Mzg3LDM2Mzg5LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0''@;'; put 'put ''LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2MzgwLDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2OTc5LDM2OTc2LDM2OTc1LDM2OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3''@;'; put 'put ''MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcyLDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5LDM3NTkyLDM3NjA5LDM3NTkxLDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4''@;'; put 'put ''LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4MzE4LDM4MzIwLDM4NTY0LDM4NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4''@;'; put 'put ''NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUxLDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkwLDM5MTkxLDM5MTg5LDM5Mzg4LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0''@;'; put 'put ''LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5Nzk3LDM5NzkyLDM5Nzg0LDM5NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQw''@;'; put 'put ''MTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQwNTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAwLDIxNDczLDIyMTI4LDIyMTEyLDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1''@;'; put 'put ''LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIzMzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIzMzEyLDIzMzE4LDIzMzM2LDIzMzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIz''@;'; put 'put ''OTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIzOTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2LDI0MjkzLDI0Mzk1LDI0NTA4LDI0OTg5LDI1ZTMsMjQ5ODIsMjUwMjksMjUwMTIs''@;'; put 'put ''MjUwMzAsMjUwMjUsMjUwMzYsMjUwMTgsMjUwMjMsMjUwMTYsMjQ5NzIsMjU4MTUsMjU4MTQsMjU4MDgsMjU4MDcsMjU4MDEsMjU3ODksMjU3MzcsMjU3OTUsMjU4MTksMjU4NDMsMjU4MTcsMjU5MDcsMjU5ODMsMjU5ODAsMjYwMTgsMjYzMTIsMjYzMDIsMjYzMDQsMjYzMTQsMjYzMTUsMjYz''@;'; put 'put ''MTksMjYzMDEsMjYyOTksMjYyOTgsMjYzMTYsMjY0MDMsMjcxODgsMjcyMzgsMjcyMDksMjcyMzksMjcxODYsMjcyNDAsMjcxOTgsMjcyMjksMjcyNDUsMjcyNTQsMjcyMjcsMjcyMTcsMjcxNzYsMjcyMjYsMjcxOTUsMjcxOTksMjcyMDEsMjcyNDIsMjcyMzYsMjcyMTYsMjcyMTUsMjcyMjAs''@;'; put 'put ''MjcyNDcsMjcyNDEsMjcyMzIsMjcxOTYsMjcyMzAsMjcyMjIsMjcyMjEsMjcyMTMsMjcyMTQsMjcyMDYsMjc0NzcsMjc0NzYsMjc0NzgsMjc1NTksMjc1NjIsMjc1NjMsMjc1OTIsMjc1OTEsMjc2NTIsMjc2NTEsMjc2NTQsMjg1ODksMjg2MTksMjg1NzksMjg2MTUsMjg2MDQsMjg2MjIsMjg2''@;'; put 'put ''MTYsMjg1MTAsMjg2MTIsMjg2MDUsMjg1NzQsMjg2MTgsMjg1ODQsMjg2NzYsMjg1ODEsMjg1OTAsMjg2MDIsMjg1ODgsMjg1ODYsMjg2MjMsMjg2MDcsMjg2MDAsMjg1NzgsMjg2MTcsMjg1ODcsMjg2MjEsMjg1OTEsMjg1OTQsMjg1OTIsMjkxMjUsMjkxMjIsMjkxMTksMjkxMTIsMjkxNDIs''@;'; put 'put ''MjkxMjAsMjkxMjEsMjkxMzEsMjkxNDAsMjkxMzAsMjkxMjcsMjkxMzUsMjkxMTcsMjkxNDQsMjkxMTYsMjkxMjYsMjkxNDYsMjkxNDcsMjkzNDEsMjkzNDIsMjk1NDUsMjk1NDIsMjk1NDMsMjk1NDgsMjk1NDEsMjk1NDcsMjk1NDYsMjk4MjMsMjk4NTAsMjk4NTYsMjk4NDQsMjk4NDIsMjk4''@;'; put 'put ''NDUsMjk4NTcsMjk5NjMsMzAwODAsMzAyNTUsMzAyNTMsMzAyNTcsMzAyNjksMzAyNTksMzAyNjgsMzAyNjEsMzAyNTgsMzAyNTYsMzAzOTUsMzA0MzgsMzA2MTgsMzA2MjEsMzA2MjUsMzA2MjAsMzA2MTksMzA2MjYsMzA2MjcsMzA2MTMsMzA2MTcsMzA2MTUsMzA5NDEsMzA5NTMsMzA5NDks''@;'; put 'put ''MzA5NTQsMzA5NDIsMzA5NDcsMzA5MzksMzA5NDUsMzA5NDYsMzA5NTcsMzA5NDMsMzA5NDQsMzExNDAsMzEzMDAsMzEzMDQsMzEzMDMsMzE0MTQsMzE0MTYsMzE0MTMsMzE0MDksMzE0MTUsMzE3MTAsMzE3MTUsMzE3MTksMzE3MDksMzE3MDEsMzE3MTcsMzE3MDYsMzE3MjAsMzE3MzcsMzE3''@;'; put 'put ''MDAsMzE3MjIsMzE3MTQsMzE3MDgsMzE3MjMsMzE3MDQsMzE3MTEsMzE5NTQsMzE5NTYsMzE5NTksMzE5NTIsMzE5NTMsMzIyNzQsMzIyODksMzIyNzksMzIyNjgsMzIyODcsMzIyODgsMzIyNzUsMzIyNzAsMzIyODQsMzIyNzcsMzIyODIsMzIyOTAsMzIyNjcsMzIyNzEsMzIyNzgsMzIyNjks''@;'; put 'put ''MzIyNzYsMzIyOTMsMzIyOTIsMzI1NzksMzI2MzUsMzI2MzYsMzI2MzQsMzI2ODksMzI3NTEsMzI4MTAsMzI4MDksMzI4NzYsMzMyMDEsMzMxOTAsMzMxOTgsMzMyMDksMzMyMDUsMzMxOTUsMzMyMDAsMzMxOTYsMzMyMDQsMzMyMDIsMzMyMDcsMzMxOTEsMzMyNjYsMzMzNjUsMzMzNjYsMzMz''@;'; put 'put ''NjcsMzQxMzQsMzQxMTcsMzQxNTUsMzQxMjUsMzQxMzEsMzQxNDUsMzQxMzYsMzQxMTIsMzQxMTgsMzQxNDgsMzQxMTMsMzQxNDYsMzQxMTYsMzQxMjksMzQxMTksMzQxNDcsMzQxMTAsMzQxMzksMzQxNjEsMzQxMjYsMzQxNTgsMzQxNjUsMzQxMzMsMzQxNTEsMzQxNDQsMzQxODgsMzQxNTAs''@;'; put 'put ''MzQxNDEsMzQxMzIsMzQxNDksMzQxNTYsMzQ0MDMsMzQ0MDUsMzQ0MDQsMzQ3MTUsMzQ3MDMsMzQ3MTEsMzQ3MDcsMzQ3MDYsMzQ2OTYsMzQ2ODksMzQ3MTAsMzQ3MTIsMzQ2ODEsMzQ2OTUsMzQ3MjMsMzQ2OTMsMzQ3MDQsMzQ3MDUsMzQ3MTcsMzQ2OTIsMzQ3MDgsMzQ3MTYsMzQ3MTQsMzQ2''@;'; put 'put ''OTcsMzUxMDIsMzUxMTAsMzUxMjAsMzUxMTcsMzUxMTgsMzUxMTEsMzUxMjEsMzUxMDYsMzUxMTMsMzUxMDcsMzUxMTksMzUxMTYsMzUxMDMsMzUzMTMsMzU1NTIsMzU1NTQsMzU1NzAsMzU1NzIsMzU1NzMsMzU1NDksMzU2MDQsMzU1NTYsMzU1NTEsMzU1NjgsMzU1MjgsMzU1NTAsMzU1NTMs''@;'; put 'put ''MzU1NjAsMzU1ODMsMzU1NjcsMzU1NzksMzU5ODUsMzU5ODYsMzU5ODQsMzYwODUsMzYwNzgsMzYwODEsMzYwODAsMzYwODMsMzYyMDQsMzYyMDYsMzYyNjEsMzYyNjMsMzY0MDMsMzY0MTQsMzY0MDgsMzY0MTYsMzY0MjEsMzY0MDYsMzY0MTIsMzY0MTMsMzY0MTcsMzY0MDAsMzY0MTUsMzY1''@;'; put 'put ''NDEsMzY2NjIsMzY2NTQsMzY2NjEsMzY2NTgsMzY2NjUsMzY2NjMsMzY2NjAsMzY5ODIsMzY5ODUsMzY5ODcsMzY5OTgsMzcxMTQsMzcxNzEsMzcxNzMsMzcxNzQsMzcyNjcsMzcyNjQsMzcyNjUsMzcyNjEsMzcyNjMsMzc2NzEsMzc2NjIsMzc2NDAsMzc2NjMsMzc2MzgsMzc2NDcsMzc3NTQs''@;'; put 'put ''Mzc2ODgsMzc2OTIsMzc2NTksMzc2NjcsMzc2NTAsMzc2MzMsMzc3MDIsMzc2NzcsMzc2NDYsMzc2NDUsMzc1NzksMzc2NjEsMzc2MjYsMzc2NjksMzc2NTEsMzc2MjUsMzc2MjMsMzc2ODQsMzc2MzQsMzc2NjgsMzc2MzEsMzc2NzMsMzc2ODksMzc2ODUsMzc2NzQsMzc2NTIsMzc2NDQsMzc2''@;'; put 'put ''NDMsMzc2MzAsMzc2NDEsMzc2MzIsMzc2MjcsMzc2NTQsMzgzMzIsMzgzNDksMzgzMzQsMzgzMjksMzgzMzAsMzgzMjYsMzgzMzUsMzgzMjUsMzgzMzMsMzg1NjksMzg2MTIsMzg2NjcsMzg2NzQsMzg2NzIsMzg4MDksMzg4MDcsMzg4MDQsMzg4OTYsMzg5MDQsMzg5NjUsMzg5NTksMzg5NjIs''@;'; put 'put ''MzkyMDQsMzkxOTksMzkyMDcsMzkyMDksMzkzMjYsMzk0MDYsMzk0MDQsMzkzOTcsMzkzOTYsMzk0MDgsMzkzOTUsMzk0MDIsMzk0MDEsMzkzOTksMzk2MDksMzk2MTUsMzk2MDQsMzk2MTEsMzk2NzAsMzk2NzQsMzk2NzMsMzk2NzEsMzk3MzEsMzk4MDgsMzk4MTMsMzk4MTUsMzk4MDQsMzk4''@;'; put 'put ''MDYsMzk4MDMsMzk4MTAsMzk4MjcsMzk4MjYsMzk4MjQsMzk4MDIsMzk4MjksMzk4MDUsMzk4MTYsNDAyMjksNDAyMTUsNDAyMjQsNDAyMjIsNDAyMTIsNDAyMzMsNDAyMjEsNDAyMTYsNDAyMjYsNDAyMDgsNDAyMTcsNDAyMjMsNDA1ODQsNDA1ODIsNDA1ODMsNDA2MjIsNDA2MjEsNDA2NjEs''@;'; put 'put ''NDA2NjIsNDA2OTgsNDA3MjIsNDA3NjUsMjA3NzQsMjA3NzMsMjA3NzAsMjA3NzIsMjA3NjgsMjA3NzcsMjEyMzYsMjIxNjMsMjIxNTYsMjIxNTcsMjIxNTAsMjIxNDgsMjIxNDcsMjIxNDIsMjIxNDYsMjIxNDMsMjIxNDUsMjI3NDIsMjI3NDAsMjI3MzUsMjI3MzgsMjMzNDEsMjMzMzMsMjMz''@;'; put 'put ''NDYsMjMzMzEsMjMzNDAsMjMzMzUsMjMzMzQsMjMzNDMsMjMzNDIsMjM0MTksMjM1MzcsMjM1MzgsMjM5OTEsMjQxNzIsMjQxNzAsMjQ1MTAsMjQ1MDcsMjUwMjcsMjUwMTMsMjUwMjAsMjUwNjMsMjUwNTYsMjUwNjEsMjUwNjAsMjUwNjQsMjUwNTQsMjU4MzksMjU4MzMsMjU4MjcsMjU4MzUs''@;'; put 'put ''MjU4MjgsMjU4MzIsMjU5ODUsMjU5ODQsMjYwMzgsMjYwNzQsMjYzMjIsMjcyNzcsMjcyODYsMjcyNjUsMjczMDEsMjcyNzMsMjcyOTUsMjcyOTEsMjcyOTcsMjcyOTQsMjcyNzEsMjcyODMsMjcyNzgsMjcyODUsMjcyNjcsMjczMDQsMjczMDAsMjcyODEsMjcyNjMsMjczMDIsMjcyOTAsMjcy''@;'; put 'put ''NjksMjcyNzYsMjcyODIsMjc0ODMsMjc1NjUsMjc2NTcsMjg2MjAsMjg1ODUsMjg2NjAsMjg2MjgsMjg2NDMsMjg2MzYsMjg2NTMsMjg2NDcsMjg2NDYsMjg2MzgsMjg2NTgsMjg2MzcsMjg2NDIsMjg2NDgsMjkxNTMsMjkxNjksMjkxNjAsMjkxNzAsMjkxNTYsMjkxNjgsMjkxNTQsMjk1NTUs''@;'; put 'put ''Mjk1NTAsMjk1NTEsMjk4NDcsMjk4NzQsMjk4NjcsMjk4NDAsMjk4NjYsMjk4NjksMjk4NzMsMjk4NjEsMjk4NzEsMjk5NjgsMjk5NjksMjk5NzAsMjk5NjcsMzAwODQsMzAyNzUsMzAyODAsMzAyODEsMzAyNzksMzAzNzIsMzA0NDEsMzA2NDUsMzA2MzUsMzA2NDIsMzA2NDcsMzA2NDYsMzA2''@;'; put 'put ''NDQsMzA2NDEsMzA2MzIsMzA3MDQsMzA5NjMsMzA5NzMsMzA5NzgsMzA5NzEsMzA5NzIsMzA5NjIsMzA5ODEsMzA5NjksMzA5NzQsMzA5ODAsMzExNDcsMzExNDQsMzEzMjQsMzEzMjMsMzEzMTgsMzEzMjAsMzEzMTYsMzEzMjIsMzE0MjIsMzE0MjQsMzE0MjUsMzE3NDksMzE3NTksMzE3MzAs''@;'; put 'put ''MzE3NDQsMzE3NDMsMzE3MzksMzE3NTgsMzE3MzIsMzE3NTUsMzE3MzEsMzE3NDYsMzE3NTMsMzE3NDcsMzE3NDUsMzE3MzYsMzE3NDEsMzE3NTAsMzE3MjgsMzE3MjksMzE3NjAsMzE3NTQsMzE5NzYsMzIzMDEsMzIzMTYsMzIzMjIsMzIzMDcsMzg5ODQsMzIzMTIsMzIyOTgsMzIzMjksMzIz''@;'; put 'put ''MjAsMzIzMjcsMzIyOTcsMzIzMzIsMzIzMDQsMzIzMTUsMzIzMTAsMzIzMjQsMzIzMTQsMzI1ODEsMzI2MzksMzI2MzgsMzI2MzcsMzI3NTYsMzI3NTQsMzI4MTIsMzMyMTEsMzMyMjAsMzMyMjgsMzMyMjYsMzMyMjEsMzMyMjMsMzMyMTIsMzMyNTcsMzMzNzEsMzMzNzAsMzMzNzIsMzQxNzks''@;'; put 'put ''MzQxNzYsMzQxOTEsMzQyMTUsMzQxOTcsMzQyMDgsMzQxODcsMzQyMTEsMzQxNzEsMzQyMTIsMzQyMDIsMzQyMDYsMzQxNjcsMzQxNzIsMzQxODUsMzQyMDksMzQxNzAsMzQxNjgsMzQxMzUsMzQxOTAsMzQxOTgsMzQxODIsMzQxODksMzQyMDEsMzQyMDUsMzQxNzcsMzQyMTAsMzQxNzgsMzQx''@;'; put 'put ''ODQsMzQxODEsMzQxNjksMzQxNjYsMzQyMDAsMzQxOTIsMzQyMDcsMzQ0MDgsMzQ3NTAsMzQ3MzAsMzQ3MzMsMzQ3NTcsMzQ3MzYsMzQ3MzIsMzQ3NDUsMzQ3NDEsMzQ3NDgsMzQ3MzQsMzQ3NjEsMzQ3NTUsMzQ3NTQsMzQ3NjQsMzQ3NDMsMzQ3MzUsMzQ3NTYsMzQ3NjIsMzQ3NDAsMzQ3NDIs''@;'; put 'put ''MzQ3NTEsMzQ3NDQsMzQ3NDksMzQ3ODIsMzQ3MzgsMzUxMjUsMzUxMjMsMzUxMzIsMzUxMzQsMzUxMzcsMzUxNTQsMzUxMjcsMzUxMzgsMzUyNDUsMzUyNDcsMzUyNDYsMzUzMTQsMzUzMTUsMzU2MTQsMzU2MDgsMzU2MDYsMzU2MDEsMzU1ODksMzU1OTUsMzU2MTgsMzU1OTksMzU2MDIsMzU2''@;'; put 'put ''MDUsMzU1OTEsMzU1OTcsMzU1OTIsMzU1OTAsMzU2MTIsMzU2MDMsMzU2MTAsMzU5MTksMzU5NTIsMzU5NTQsMzU5NTMsMzU5NTEsMzU5ODksMzU5ODgsMzYwODksMzYyMDcsMzY0MzAsMzY0MjksMzY0MzUsMzY0MzIsMzY0MjgsMzY0MjMsMzY2NzUsMzY2NzIsMzY5OTcsMzY5OTAsMzcxNzYs''@;'; put 'put ''MzcyNzQsMzcyODIsMzcyNzUsMzcyNzMsMzcyNzksMzcyODEsMzcyNzcsMzcyODAsMzc3OTMsMzc3NjMsMzc4MDcsMzc3MzIsMzc3MTgsMzc3MDMsMzc3NTYsMzc3MjAsMzc3MjQsMzc3NTAsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MjgsMzc3NDEsMzc3NzUsMzc3MDgsMzc3MzgsMzc3NTMsMzc3''@;'; put 'put ''MTksMzc3MTcsMzc3MTQsMzc3MTEsMzc3NDUsMzc3NTEsMzc3NTUsMzc3MjksMzc3MjYsMzc3MzEsMzc3MzUsMzc3NjAsMzc3MTAsMzc3MjEsMzgzNDMsMzgzMzYsMzgzNDUsMzgzMzksMzgzNDEsMzgzMjcsMzg1NzQsMzg1NzYsMzg1NzIsMzg2ODgsMzg2ODcsMzg2ODAsMzg2ODUsMzg2ODEs''@;'; put 'put ''Mzg4MTAsMzg4MTcsMzg4MTIsMzg4MTQsMzg4MTMsMzg4NjksMzg4NjgsMzg4OTcsMzg5NzcsMzg5ODAsMzg5ODYsMzg5ODUsMzg5ODEsMzg5NzksMzkyMDUsMzkyMTEsMzkyMTIsMzkyMTAsMzkyMTksMzkyMTgsMzkyMTUsMzkyMTMsMzkyMTcsMzkyMTYsMzkzMjAsMzkzMzEsMzkzMjksMzk0''@;'; put 'put ''MjYsMzk0MTgsMzk0MTIsMzk0MTUsMzk0MTcsMzk0MTYsMzk0MTQsMzk0MTksMzk0MjEsMzk0MjIsMzk0MjAsMzk0MjcsMzk2MTQsMzk2NzgsMzk2NzcsMzk2ODEsMzk2NzYsMzk3NTIsMzk4MzQsMzk4NDgsMzk4MzgsMzk4MzUsMzk4NDYsMzk4NDEsMzk4NDUsMzk4NDQsMzk4MTQsMzk4NDIs''@;'; put 'put ''Mzk4NDAsMzk4NTUsNDAyNDMsNDAyNTcsNDAyOTUsNDAyNDYsNDAyMzgsNDAyMzksNDAyNDEsNDAyNDgsNDAyNDAsNDAyNjEsNDAyNTgsNDAyNTksNDAyNTQsNDAyNDcsNDAyNTYsNDAyNTMsMzI3NTcsNDAyMzcsNDA1ODYsNDA1ODUsNDA1ODksNDA2MjQsNDA2NDgsNDA2NjYsNDA2OTksNDA3''@;'; put 'put ''MDMsNDA3NDAsNDA3MzksNDA3MzgsNDA3ODgsNDA4NjQsMjA3ODUsMjA3ODEsMjA3ODIsMjIxNjgsMjIxNzIsMjIxNjcsMjIxNzAsMjIxNzMsMjIxNjksMjI4OTYsMjMzNTYsMjM2NTcsMjM2NTgsMjRlMywyNDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2Niwy''@;'; put 'put ''NTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4''@;'; put 'put ''NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4Niwy''@;'; put 'put ''OTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMy''@;'; put 'put ''NywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwz''@;'; put 'put ''Mjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIz''@;'; put 'put ''OCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwz''@;'; put 'put ''NTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5''@;'; put 'put ''MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwz''@;'; put 'put ''NzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgw''@;'; put 'put ''MCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwz''@;'; put 'put ''ODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1''@;'; put 'put ''NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0''@;'; put 'put ''MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0''@;'; put 'put ''NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwy''@;'; put 'put ''NzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0''@;'; put 'put ''OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwz''@;'; put 'put ''MTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2''@;'; put 'put ''NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwz''@;'; put 'put ''NDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1''@;'; put 'put ''MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwz''@;'; put 'put ''NzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2''@;'; put 'put ''MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwz''@;'; put 'put ''OTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkx''@;'; put 'put ''NiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0''@;'; put 'put ''MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUx''@;'; put 'put ''MywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwy''@;'; put 'put ''ODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0''@;'; put 'put ''MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwz''@;'; put 'put ''NDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4''@;'; put 'put ''NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwz''@;'; put 'put ''Nzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAw''@;'; put 'put ''NywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywz''@;'; put 'put ''OTk0MSwzOTk1NCwzOTkyOCw0ZTQsMzk5NDMsMzk5NTAsMzk5NDIsMzk5NTksMzk5NTYsMzk5NDUsNDAzNTEsNDAzNDUsNDAzNTYsNDAzNDksNDAzMzgsNDAzNDQsNDAzMzYsNDAzNDcsNDAzNTIsNDAzNDAsNDAzNDgsNDAzNjIsNDAzNDMsNDAzNTMsNDAzNDYsNDAzNTQsNDAzNjAsNDAzNTAs''@;'; put 'put ''NDAzNTUsNDAzODMsNDAzNjEsNDAzNDIsNDAzNTgsNDAzNTksNDA2MDEsNDA2MDMsNDA2MDIsNDA2NzcsNDA2NzYsNDA2NzksNDA2NzgsNDA3NTIsNDA3NTAsNDA3OTUsNDA4MDAsNDA3OTgsNDA3OTcsNDA3OTMsNDA4NDksMjA3OTQsMjA3OTMsMjExNDQsMjExNDMsMjIyMTEsMjIyMDUsMjIy''@;'; put 'put ''MDYsMjMzNjgsMjMzNjcsMjQwMTEsMjQwMTUsMjQzMDUsMjUwODUsMjU4ODMsMjczOTQsMjczODgsMjczOTUsMjczODQsMjczOTIsMjg3MzksMjg3NDAsMjg3NDYsMjg3NDQsMjg3NDUsMjg3NDEsMjg3NDIsMjkyMTMsMjkyMTAsMjkyMDksMjk1NjYsMjk5NzUsMzAzMTQsMzA2NzIsMzEwMjEs''@;'; put 'put ''MzEwMjUsMzEwMjMsMzE4MjgsMzE4MjcsMzE5ODYsMzIzOTQsMzIzOTEsMzIzOTIsMzIzOTUsMzIzOTAsMzIzOTcsMzI1ODksMzI2OTksMzI4MTYsMzMyNDUsMzQzMjgsMzQzNDYsMzQzNDIsMzQzMzUsMzQzMzksMzQzMzIsMzQzMjksMzQzNDMsMzQzNTAsMzQzMzcsMzQzMzYsMzQzNDUsMzQz''@;'; put 'put ''MzQsMzQzNDEsMzQ4NTcsMzQ4NDUsMzQ4NDMsMzQ4NDgsMzQ4NTIsMzQ4NDQsMzQ4NTksMzQ4OTAsMzUxODEsMzUxNzcsMzUxODIsMzUxNzksMzUzMjIsMzU3MDUsMzU3MDQsMzU2NTMsMzU3MDYsMzU3MDcsMzYxMTIsMzYxMTYsMzYyNzEsMzY0OTQsMzY0OTIsMzY3MDIsMzY2OTksMzY3MDEs''@;'; put 'put ''MzcxOTAsMzcxODgsMzcxODksMzczMDUsMzc5NTEsMzc5NDcsMzc5NDIsMzc5MjksMzc5NDksMzc5NDgsMzc5MzYsMzc5NDUsMzc5MzAsMzc5NDMsMzc5MzIsMzc5NTIsMzc5MzcsMzgzNzMsMzgzNzIsMzgzNzEsMzg3MDksMzg3MTQsMzg4NDcsMzg4ODEsMzkwMTIsMzkxMTMsMzkxMTAsMzkx''@;'; put 'put ''MDQsMzkyNTYsMzkyNTQsMzk0ODEsMzk0ODUsMzk0OTQsMzk0OTIsMzk0OTAsMzk0ODksMzk0ODIsMzk0ODcsMzk2MjksMzk3MDEsMzk3MDMsMzk3MDQsMzk3MDIsMzk3MzgsMzk3NjIsMzk5NzksMzk5NjUsMzk5NjQsMzk5ODAsMzk5NzEsMzk5NzYsMzk5NzcsMzk5NzIsMzk5NjksNDAzNzUs''@;'; put 'put ''NDAzNzQsNDAzODAsNDAzODUsNDAzOTEsNDAzOTQsNDAzOTksNDAzODIsNDAzODksNDAzODcsNDAzNzksNDAzNzMsNDAzOTgsNDAzNzcsNDAzNzgsNDAzNjQsNDAzOTIsNDAzNjksNDAzNjUsNDAzOTYsNDAzNzEsNDAzOTcsNDAzNzAsNDA1NzAsNDA2MDQsNDA2ODMsNDA2ODYsNDA2ODUsNDA3''@;'; put 'put ''MzEsNDA3MjgsNDA3MzAsNDA3NTMsNDA3ODIsNDA4MDUsNDA4MDQsNDA4NTAsMjAxNTMsMjIyMTQsMjIyMTMsMjIyMTksMjI4OTcsMjMzNzEsMjMzNzIsMjQwMjEsMjQwMTcsMjQzMDYsMjU4ODksMjU4ODgsMjU4OTQsMjU4OTAsMjc0MDMsMjc0MDAsMjc0MDEsMjc2NjEsMjg3NTcsMjg3NTgs''@;'; put 'put ''Mjg3NTksMjg3NTQsMjkyMTQsMjkyMTUsMjkzNTMsMjk1NjcsMjk5MTIsMjk5MDksMjk5MTMsMjk5MTEsMzAzMTcsMzAzODEsMzEwMjksMzExNTYsMzEzNDQsMzEzNDUsMzE4MzEsMzE4MzYsMzE4MzMsMzE4MzUsMzE4MzQsMzE5ODgsMzE5ODUsMzI0MDEsMzI1OTEsMzI2NDcsMzMyNDYsMzMz''@;'; put 'put ''ODcsMzQzNTYsMzQzNTcsMzQzNTUsMzQzNDgsMzQzNTQsMzQzNTgsMzQ4NjAsMzQ4NTYsMzQ4NTQsMzQ4NTgsMzQ4NTMsMzUxODUsMzUyNjMsMzUyNjIsMzUzMjMsMzU3MTAsMzU3MTYsMzU3MTQsMzU3MTgsMzU3MTcsMzU3MTEsMzYxMTcsMzY1MDEsMzY1MDAsMzY1MDYsMzY0OTgsMzY0OTYs''@;'; put 'put ''MzY1MDIsMzY1MDMsMzY3MDQsMzY3MDYsMzcxOTEsMzc5NjQsMzc5NjgsMzc5NjIsMzc5NjMsMzc5NjcsMzc5NTksMzc5NTcsMzc5NjAsMzc5NjEsMzc5NTgsMzg3MTksMzg4ODMsMzkwMTgsMzkwMTcsMzkxMTUsMzkyNTIsMzkyNTksMzk1MDIsMzk1MDcsMzk1MDgsMzk1MDAsMzk1MDMsMzk0''@;'; put 'put ''OTYsMzk0OTgsMzk0OTcsMzk1MDYsMzk1MDQsMzk2MzIsMzk3MDUsMzk3MjMsMzk3MzksMzk3NjYsMzk3NjUsNDAwMDYsNDAwMDgsMzk5OTksNDAwMDQsMzk5OTMsMzk5ODcsNDAwMDEsMzk5OTYsMzk5OTEsMzk5ODgsMzk5ODYsMzk5OTcsMzk5OTAsNDA0MTEsNDA0MDIsNDA0MTQsNDA0MTAs''@;'; put 'put ''NDAzOTUsNDA0MDAsNDA0MTIsNDA0MDEsNDA0MTUsNDA0MjUsNDA0MDksNDA0MDgsNDA0MDYsNDA0MzcsNDA0MDUsNDA0MTMsNDA2MzAsNDA2ODgsNDA3NTcsNDA3NTUsNDA3NTQsNDA3NzAsNDA4MTEsNDA4NTMsNDA4NjYsMjA3OTcsMjExNDUsMjI3NjAsMjI3NTksMjI4OTgsMjMzNzMsMjQw''@;'; put 'put ''MjQsMzQ4NjMsMjQzOTksMjUwODksMjUwOTEsMjUwOTIsMjU4OTcsMjU4OTMsMjYwMDYsMjYzNDcsMjc0MDksMjc0MTAsMjc0MDcsMjc1OTQsMjg3NjMsMjg3NjIsMjkyMTgsMjk1NzAsMjk1NjksMjk1NzEsMzAzMjAsMzA2NzYsMzE4NDcsMzE4NDYsMzI0MDUsMzMzODgsMzQzNjIsMzQzNjgs''@;'; put 'put ''MzQzNjEsMzQzNjQsMzQzNTMsMzQzNjMsMzQzNjYsMzQ4NjQsMzQ4NjYsMzQ4NjIsMzQ4NjcsMzUxOTAsMzUxODgsMzUxODcsMzUzMjYsMzU3MjQsMzU3MjYsMzU3MjMsMzU3MjAsMzU5MDksMzYxMjEsMzY1MDQsMzY3MDgsMzY3MDcsMzczMDgsMzc5ODYsMzc5NzMsMzc5ODEsMzc5NzUsMzc5''@;'; put 'put ''ODIsMzg4NTIsMzg4NTMsMzg5MTIsMzk1MTAsMzk1MTMsMzk3MTAsMzk3MTEsMzk3MTIsNDAwMTgsNDAwMjQsNDAwMTYsNDAwMTAsNDAwMTMsNDAwMTEsNDAwMjEsNDAwMjUsNDAwMTIsNDAwMTQsNDA0NDMsNDA0MzksNDA0MzEsNDA0MTksNDA0MjcsNDA0NDAsNDA0MjAsNDA0MzgsNDA0MTcs''@;'; put 'put ''NDA0MzAsNDA0MjIsNDA0MzQsNDA0MzIsNDA0MTgsNDA0MjgsNDA0MzYsNDA0MzUsNDA0MjQsNDA0MjksNDA2NDIsNDA2NTYsNDA2OTAsNDA2OTEsNDA3MTAsNDA3MzIsNDA3NjAsNDA3NTksNDA3NTgsNDA3NzEsNDA3ODMsNDA4MTcsNDA4MTYsNDA4MTQsNDA4MTUsMjIyMjcsMjIyMjEsMjMz''@;'; put 'put ''NzQsMjM2NjEsMjU5MDEsMjYzNDksMjYzNTAsMjc0MTEsMjg3NjcsMjg3NjksMjg3NjUsMjg3NjgsMjkyMTksMjk5MTUsMjk5MjUsMzA2NzcsMzEwMzIsMzExNTksMzExNTgsMzE4NTAsMzI0MDcsMzI2NDksMzMzODksMzQzNzEsMzQ4NzIsMzQ4NzEsMzQ4NjksMzQ4OTEsMzU3MzIsMzU3MzMs''@;'; put 'put ''MzY1MTAsMzY1MTEsMzY1MTIsMzY1MDksMzczMTAsMzczMDksMzczMTQsMzc5OTUsMzc5OTIsMzc5OTMsMzg2MjksMzg3MjYsMzg3MjMsMzg3MjcsMzg4NTUsMzg4ODUsMzk1MTgsMzk2MzcsMzk3NjksNDAwMzUsNDAwMzksNDAwMzgsNDAwMzQsNDAwMzAsNDAwMzIsNDA0NTAsNDA0NDYsNDA0''@;'; put 'put ''NTUsNDA0NTEsNDA0NTQsNDA0NTMsNDA0NDgsNDA0NDksNDA0NTcsNDA0NDcsNDA0NDUsNDA0NTIsNDA2MDgsNDA3MzQsNDA3NzQsNDA4MjAsNDA4MjEsNDA4MjIsMjIyMjgsMjU5MDIsMjYwNDAsMjc0MTYsMjc0MTcsMjc0MTUsMjc0MTgsMjg3NzAsMjkyMjIsMjkzNTQsMzA2ODAsMzA2ODEs''@;'; put 'put ''MzEwMzMsMzE4NDksMzE4NTEsMzE5OTAsMzI0MTAsMzI0MDgsMzI0MTEsMzI0MDksMzMyNDgsMzMyNDksMzQzNzQsMzQzNzUsMzQzNzYsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTUsMzUzMjcsMzU3MzYsMzU3MzcsMzY1MTcsMzY1MTYsMzY1MTUsMzc5OTgsMzc5OTcsMzc5OTksMzgwMDEsMzgw''@;'; put 'put ''MDMsMzg3MjksMzkwMjYsMzkyNjMsNDAwNDAsNDAwNDYsNDAwNDUsNDA0NTksNDA0NjEsNDA0NjQsNDA0NjMsNDA0NjYsNDA0NjUsNDA2MDksNDA2OTMsNDA3MTMsNDA3NzUsNDA4MjQsNDA4MjcsNDA4MjYsNDA4MjUsMjIzMDIsMjg3NzQsMzE4NTUsMzQ4NzYsMzYyNzQsMzY1MTgsMzczMTUs''@;'; put 'put ''MzgwMDQsMzgwMDgsMzgwMDYsMzgwMDUsMzk1MjAsNDAwNTIsNDAwNTEsNDAwNDksNDAwNTMsNDA0NjgsNDA0NjcsNDA2OTQsNDA3MTQsNDA4NjgsMjg3NzYsMjg3NzMsMzE5OTEsMzQ0MTAsMzQ4NzgsMzQ4NzcsMzQ4NzksMzU3NDIsMzU5OTYsMzY1MjEsMzY1NTMsMzg3MzEsMzkwMjcsMzkw''@;'; put 'put ''MjgsMzkxMTYsMzkyNjUsMzkzMzksMzk1MjQsMzk1MjYsMzk1MjcsMzk3MTYsNDA0NjksNDA0NzEsNDA3NzYsMjUwOTUsMjc0MjIsMjkyMjMsMzQzODAsMzY1MjAsMzgwMTgsMzgwMTYsMzgwMTcsMzk1MjksMzk1MjgsMzk3MjYsNDA0NzMsMjkyMjUsMzQzNzksMzU3NDMsMzgwMTksNDAwNTcs''@;'; put 'put ''NDA2MzEsMzAzMjUsMzk1MzEsNDAwNTgsNDA0NzcsMjg3NzcsMjg3NzgsNDA2MTIsNDA4MzAsNDA3NzcsNDA4NTYsMzA4NDksMzc1NjEsMzUwMjMsMjI3MTUsMjQ2NTgsMzE5MTEsMjMyOTAsOTU1Niw5NTc0LDk1NTksOTU2OCw5NTgwLDk1NzEsOTU2Miw5NTc3LDk1NjUsOTU1NCw5NTcyLDk1''@;'; put 'put ''NTcsOTU2Niw5NTc4LDk1NjksOTU2MCw5NTc1LDk1NjMsOTU1NSw5NTczLDk1NTgsOTU2Nyw5NTc5LDk1NzAsOTU2MSw5NTc2LDk1NjQsOTU1Myw5NTUyLDk1ODEsOTU4Miw5NTg0LDk1ODMsNjU1MTcsMTMyNDIzLDM3NTk1LDEzMjU3NSwxNDczOTcsMzQxMjQsMTcwNzcsMjk2NzksMjA5MTcs''@;'; put 'put ''MTM4OTcsMTQ5ODI2LDE2NjM3MiwzNzcwMCwxMzc2OTEsMzM1MTgsMTQ2NjMyLDMwNzgwLDI2NDM2LDI1MzExLDE0OTgxMSwxNjYzMTQsMTMxNzQ0LDE1ODY0MywxMzU5NDEsMjAzOTUsMTQwNTI1LDIwNDg4LDE1OTAxNywxNjI0MzYsMTQ0ODk2LDE1MDE5MywxNDA1NjMsMjA1MjEsMTMxOTY2''@;'; put 'put ''LDI0NDg0LDEzMTk2OCwxMzE5MTEsMjgzNzksMTMyMTI3LDIwNjA1LDIwNzM3LDEzNDM0LDIwNzUwLDM5MDIwLDE0MTQ3LDMzODE0LDE0OTkyNCwxMzIyMzEsMjA4MzIsMTQ0MzA4LDIwODQyLDEzNDE0MywxMzk1MTYsMTMxODEzLDE0MDU5MiwxMzI0OTQsMTQzOTIzLDEzNzYwMywyMzQyNiwz''@;'; put 'put ''NDY4NSwxMzI1MzEsMTQ2NTg1LDIwOTE0LDIwOTIwLDQwMjQ0LDIwOTM3LDIwOTQzLDIwOTQ1LDE1NTgwLDIwOTQ3LDE1MDE4MiwyMDkxNSwyMDk2MiwyMTMxNCwyMDk3MywzMzc0MSwyNjk0MiwxNDUxOTcsMjQ0NDMsMjEwMDMsMjEwMzAsMjEwNTIsMjExNzMsMjEwNzksMjExNDAsMjExNzcs''@;'; put 'put ''MjExODksMzE3NjUsMzQxMTQsMjEyMTYsMzQzMTcsMTU4NDgzLDIxMjUzLDE2NjYyMiwyMTgzMywyODM3NywxNDczMjgsMTMzNDYwLDE0NzQzNiwyMTI5OSwyMTMxNiwxMzQxMTQsMjc4NTEsMTM2OTk4LDI2NjUxLDI5NjUzLDI0NjUwLDE2MDQyLDE0NTQwLDEzNjkzNiwyOTE0OSwxNzU3MCwy''@;'; put 'put ''MTM1NywyMTM2NCwxNjU1NDcsMjEzNzQsMjEzNzUsMTM2NTk4LDEzNjcyMywzMDY5NCwyMTM5NSwxNjY1NTUsMjE0MDgsMjE0MTksMjE0MjIsMjk2MDcsMTUzNDU4LDE2MjE3LDI5NTk2LDIxNDQxLDIxNDQ1LDI3NzIxLDIwMDQxLDIyNTI2LDIxNDY1LDE1MDE5LDEzNDAzMSwyMTQ3MiwxNDc0''@;'; put 'put ''MzUsMTQyNzU1LDIxNDk0LDEzNDI2MywyMTUyMywyODc5MywyMTgwMywyNjE5OSwyNzk5NSwyMTYxMywxNTg1NDcsMTM0NTE2LDIxODUzLDIxNjQ3LDIxNjY4LDE4MzQyLDEzNjk3MywxMzQ4NzcsMTU3OTYsMTM0NDc3LDE2NjMzMiwxNDA5NTIsMjE4MzEsMTk2OTMsMjE1NTEsMjk3MTksMjE4''@;'; put 'put ''OTQsMjE5MjksMjIwMjEsMTM3NDMxLDE0NzUxNCwxNzc0NiwxNDg1MzMsMjYyOTEsMTM1MzQ4LDIyMDcxLDI2MzE3LDE0NDAxMCwyNjI3NiwyNjI4NSwyMjA5MywyMjA5NSwzMDk2MSwyMjI1NywzODc5MSwyMTUwMiwyMjI3MiwyMjI1NSwyMjI1MywxNjY3NTgsMTM4NTksMTM1NzU5LDIyMzQy''@;'; put 'put ''LDE0Nzg3NywyNzc1OCwyODgxMSwyMjMzOCwxNDAwMSwxNTg4NDYsMjI1MDIsMTM2MjE0LDIyNTMxLDEzNjI3NiwxNDgzMjMsMjI1NjYsMTUwNTE3LDIyNjIwLDIyNjk4LDEzNjY1LDIyNzUyLDIyNzQ4LDEzNTc0MCwyMjc3OSwyMzU1MSwyMjMzOSwxNzIzNjgsMTQ4MDg4LDM3ODQzLDEzNzI5''@;'; put 'put ''LDIyODE1LDI2NzkwLDE0MDE5LDI4MjQ5LDEzNjc2NiwyMzA3NiwyMTg0MywxMzY4NTAsMzQwNTMsMjI5ODUsMTM0NDc4LDE1ODg0OSwxNTkwMTgsMTM3MTgwLDIzMDAxLDEzNzIxMSwxMzcxMzgsMTU5MTQyLDI4MDE3LDEzNzI1NiwxMzY5MTcsMjMwMzMsMTU5MzAxLDIzMjExLDIzMTM5LDE0''@;'; put 'put ''MDU0LDE0OTkyOSwyMzE1OSwxNDA4OCwyMzE5MCwyOTc5NywyMzI1MSwxNTk2NDksMTQwNjI4LDE1NzQ5LDEzNzQ4OSwxNDEzMCwxMzY4ODgsMjQxOTUsMjEyMDAsMjM0MTQsMjU5OTIsMjM0MjAsMTYyMzE4LDE2Mzg4LDE4NTI1LDEzMTU4OCwyMzUwOSwyNDkyOCwxMzc3ODAsMTU0MDYwLDEz''@;'; put 'put ''MjUxNywyMzUzOSwyMzQ1MywxOTcyOCwyMzU1NywxMzgwNTIsMjM1NzEsMjk2NDYsMjM1NzIsMTM4NDA1LDE1ODUwNCwyMzYyNSwxODY1MywyMzY4NSwyMzc4NSwyMzc5MSwyMzk0NywxMzg3NDUsMTM4ODA3LDIzODI0LDIzODMyLDIzODc4LDEzODkxNiwyMzczOCwyNDAyMywzMzUzMiwxNDM4''@;'; put 'put ''MSwxNDk3NjEsMTM5MzM3LDEzOTYzNSwzMzQxNSwxNDM5MCwxNTI5OCwyNDExMCwyNzI3NCwyNDE4MSwyNDE4NiwxNDg2NjgsMTM0MzU1LDIxNDE0LDIwMTUxLDI0MjcyLDIxNDE2LDEzNzA3MywyNDA3MywyNDMwOCwxNjQ5OTQsMjQzMTMsMjQzMTUsMTQ0OTYsMjQzMTYsMjY2ODYsMzc5MTUs''@;'; put 'put ''MjQzMzMsMTMxNTIxLDE5NDcwOCwxNTA3MCwxODYwNiwxMzU5OTQsMjQzNzgsMTU3ODMyLDE0MDI0MCwyNDQwOCwxNDA0MDEsMjQ0MTksMzg4NDUsMTU5MzQyLDI0NDM0LDM3Njk2LDE2NjQ1NCwyNDQ4NywyMzk5MCwxNTcxMSwxNTIxNDQsMTM5MTE0LDE1OTk5MiwxNDA5MDQsMzczMzQsMTMx''@;'; put 'put ''NzQyLDE2NjQ0MSwyNDYyNSwyNjI0NSwxMzczMzUsMTQ2OTEsMTU4MTUsMTM4ODEsMjI0MTYsMTQxMjM2LDMxMDg5LDE1OTM2LDI0NzM0LDI0NzQwLDI0NzU1LDE0OTg5MCwxNDk5MDMsMTYyMzg3LDI5ODYwLDIwNzA1LDIzMjAwLDI0OTMyLDMzODI4LDI0ODk4LDE5NDcyNiwxNTk0NDIsMjQ5''@;'; put 'put ''NjEsMjA5ODAsMTMyNjk0LDI0OTY3LDIzNDY2LDE0NzM4MywxNDE0MDcsMjUwNDMsMTY2ODEzLDE3MDMzMywyNTA0MCwxNDY0MiwxNDE2OTYsMTQxNTA1LDI0NjExLDI0OTI0LDI1ODg2LDI1NDgzLDEzMTM1MiwyNTI4NSwxMzcwNzIsMjUzMDEsMTQyODYxLDI1NDUyLDE0OTk4MywxNDg3MSwy''@;'; put 'put ''NTY1NiwyNTU5MiwxMzYwNzgsMTM3MjEyLDI1NzQ0LDI4NTU0LDE0MjkwMiwzODkzMiwxNDc1OTYsMTUzMzczLDI1ODI1LDI1ODI5LDM4MDExLDE0OTUwLDI1NjU4LDE0OTM1LDI1OTMzLDI4NDM4LDE1MDA1NiwxNTAwNTEsMjU5ODksMjU5NjUsMjU5NTEsMTQzNDg2LDI2MDM3LDE0OTgyNCwx''@;'; put 'put ''OTI1NSwyNjA2NSwxNjYwMCwxMzcyNTcsMjYwODAsMjYwODMsMjQ1NDMsMTQ0Mzg0LDI2MTM2LDE0Mzg2MywxNDM4NjQsMjYxODAsMTQzNzgwLDE0Mzc4MSwyNjE4NywxMzQ3NzMsMjYyMTUsMTUyMDM4LDI2MjI3LDI2MjI4LDEzODgxMywxNDM5MjEsMTY1MzY0LDE0MzgxNiwxNTIzMzksMzA2''@;'; put 'put ''NjEsMTQxNTU5LDM5MzMyLDI2MzcwLDE0ODM4MCwxNTAwNDksMTUxNDcsMjcxMzAsMTQ1MzQ2LDI2NDYyLDI2NDcxLDI2NDY2LDE0NzkxNywxNjgxNzMsMjY1ODMsMTc2NDEsMjY2NTgsMjgyNDAsMzc0MzYsMjY2MjUsMTQ0MzU4LDE1OTEzNiwyNjcxNywxNDQ0OTUsMjcxMDUsMjcxNDcsMTY2''@;'; put 'put ''NjIzLDI2OTk1LDI2ODE5LDE0NDg0NSwyNjg4MSwyNjg4MCwxNTY2NiwxNDg0OSwxNDQ5NTYsMTUyMzIsMjY1NDAsMjY5NzcsMTY2NDc0LDE3MTQ4LDI2OTM0LDI3MDMyLDE1MjY1LDEzMjA0MSwzMzYzNSwyMDYyNCwyNzEyOSwxNDQ5ODUsMTM5NTYyLDI3MjA1LDE0NTE1NSwyNzI5MywxNTM0''@;'; put 'put ''NywyNjU0NSwyNzMzNiwxNjgzNDgsMTUzNzMsMjc0MjEsMTMzNDExLDI0Nzk4LDI3NDQ1LDI3NTA4LDE0MTI2MSwyODM0MSwxNDYxMzksMTMyMDIxLDEzNzU2MCwxNDE0NCwyMTUzNywxNDYyNjYsMjc2MTcsMTQ3MTk2LDI3NjEyLDI3NzAzLDE0MDQyNywxNDk3NDUsMTU4NTQ1LDI3NzM4LDMz''@;'; put 'put ''MzE4LDI3NzY5LDE0Njg3NiwxNzYwNSwxNDY4NzcsMTQ3ODc2LDE0OTc3MiwxNDk3NjAsMTQ2NjMzLDE0MDUzLDE1NTk1LDEzNDQ1MCwzOTgxMSwxNDM4NjUsMTQwNDMzLDMyNjU1LDI2Njc5LDE1OTAxMywxNTkxMzcsMTU5MjExLDI4MDU0LDI3OTk2LDI4Mjg0LDI4NDIwLDE0OTg4NywxNDc1''@;'; put 'put ''ODksMTU5MzQ2LDM0MDk5LDE1OTYwNCwyMDkzNSwyNzgwNCwyODE4OSwzMzgzOCwxNjY2ODksMjgyMDcsMTQ2OTkxLDI5Nzc5LDE0NzMzMCwzMTE4MCwyODIzOSwyMzE4NSwxNDM0MzUsMjg2NjQsMTQwOTMsMjg1NzMsMTQ2OTkyLDI4NDEwLDEzNjM0MywxNDc1MTcsMTc3NDksMzc4NzIsMjg0''@;'; put 'put ''ODQsMjg1MDgsMTU2OTQsMjg1MzIsMTY4MzA0LDE1Njc1LDI4NTc1LDE0Nzc4MCwyODYyNywxNDc2MDEsMTQ3Nzk3LDE0NzUxMywxNDc0NDAsMTQ3MzgwLDE0Nzc3NSwyMDk1OSwxNDc3OTgsMTQ3Nzk5LDE0Nzc3NiwxNTYxMjUsMjg3NDcsMjg3OTgsMjg4MzksMjg4MDEsMjg4NzYsMjg4ODUs''@;'; put 'put ''Mjg4ODYsMjg4OTUsMTY2NDQsMTU4NDgsMjkxMDgsMjkwNzgsMTQ4MDg3LDI4OTcxLDI4OTk3LDIzMTc2LDI5MDAyLDI5MDM4LDIzNzA4LDE0ODMyNSwyOTAwNywzNzczMCwxNDgxNjEsMjg5NzIsMTQ4NTcwLDE1MDA1NSwxNTAwNTAsMjkxMTQsMTY2ODg4LDI4ODYxLDI5MTk4LDM3OTU0LDI5''@;'; put 'put ''MjA1LDIyODAxLDM3OTU1LDI5MjIwLDM3Njk3LDE1MzA5MywyOTIzMCwyOTI0OCwxNDk4NzYsMjY4MTMsMjkyNjksMjkyNzEsMTU5NTcsMTQzNDI4LDI2NjM3LDI4NDc3LDI5MzE0LDI5NDgyLDI5NDgzLDE0OTUzOSwxNjU5MzEsMTg2NjksMTY1ODkyLDI5NDgwLDI5NDg2LDI5NjQ3LDI5NjEw''@;'; put 'put ''LDEzNDIwMiwxNTgyNTQsMjk2NDEsMjk3NjksMTQ3OTM4LDEzNjkzNSwxNTAwNTIsMjYxNDcsMTQwMjEsMTQ5OTQzLDE0OTkwMSwxNTAwMTEsMjk2ODcsMjk3MTcsMjY4ODMsMTUwMDU0LDI5NzUzLDEzMjU0NywxNjA4NywyOTc4OCwxNDE0ODUsMjk3OTIsMTY3NjAyLDI5NzY3LDI5NjY4LDI5''@;'; put 'put ''ODE0LDMzNzIxLDI5ODA0LDE0MTI4LDI5ODEyLDM3ODczLDI3MTgwLDI5ODI2LDE4NzcxLDE1MDE1NiwxNDc4MDcsMTUwMTM3LDE2Njc5OSwyMzM2NiwxNjY5MTUsMTM3Mzc0LDI5ODk2LDEzNzYwOCwyOTk2NiwyOTkyOSwyOTk4MiwxNjc2NDEsMTM3ODAzLDIzNTExLDE2NzU5NiwzNzc2NSwz''@;'; put 'put ''MDAyOSwzMDAyNiwzMDA1NSwzMDA2MiwxNTE0MjYsMTYxMzIsMTUwODAzLDMwMDk0LDI5Nzg5LDMwMTEwLDMwMTMyLDMwMjEwLDMwMjUyLDMwMjg5LDMwMjg3LDMwMzE5LDMwMzI2LDE1NjY2MSwzMDM1MiwzMzI2MywxNDMyOCwxNTc5NjksMTU3OTY2LDMwMzY5LDMwMzczLDMwMzkxLDMwNDEy''@;'; put 'put ''LDE1OTY0NywzMzg5MCwxNTE3MDksMTUxOTMzLDEzODc4MCwzMDQ5NCwzMDUwMiwzMDUyOCwyNTc3NSwxNTIwOTYsMzA1NTIsMTQ0MDQ0LDMwNjM5LDE2NjI0NCwxNjYyNDgsMTM2ODk3LDMwNzA4LDMwNzI5LDEzNjA1NCwxNTAwMzQsMjY4MjYsMzA4OTUsMzA5MTksMzA5MzEsMzg1NjUsMzEw''@;'; put 'put ''MjIsMTUzMDU2LDMwOTM1LDMxMDI4LDMwODk3LDE2MTI5MiwzNjc5MiwzNDk0OCwxNjY2OTksMTU1Nzc5LDE0MDgyOCwzMTExMCwzNTA3MiwyNjg4MiwzMTEwNCwxNTM2ODcsMzExMzMsMTYyNjE3LDMxMDM2LDMxMTQ1LDI4MjAyLDE2MDAzOCwxNjA0MCwzMTE3NCwxNjgyMDUsMzExODhdLCJl''@;'; put 'put ''dWMta3IiOls0NDAzNCw0NDAzNSw0NDAzNyw0NDAzOCw0NDA0Myw0NDA0NCw0NDA0NSw0NDA0Niw0NDA0Nyw0NDA1Niw0NDA2Miw0NDA2Myw0NDA2NSw0NDA2Niw0NDA2Nyw0NDA2OSw0NDA3MCw0NDA3MSw0NDA3Miw0NDA3Myw0NDA3NCw0NDA3NSw0NDA3OCw0NDA4Miw0NDA4Myw0NDA4NCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDA4NSw0NDA4Niw0NDA4Nyw0NDA5MCw0NDA5MSw0NDA5Myw0NDA5NCw0NDA5NSw0NDA5Nyw0NDA5OCw0NDA5OSw0NDEwMCw0NDEwMSw0NDEwMiw0NDEwMyw0NDEwNCw0NDEwNSw0NDEwNiw0NDEwOCw0NDExMCw0NDExMSw0NDExMiw0NDEx''@;'; put 'put ''Myw0NDExNCw0NDExNSw0NDExNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDExOCw0NDExOSw0NDEyMSw0NDEyMiw0NDEyMyw0NDEyNSw0NDEyNiw0NDEyNyw0NDEyOCw0NDEyOSw0NDEzMCw0NDEzMSw0NDEzMiw0NDEzMyw0NDEzNCw0NDEzNSw0NDEzNiw0NDEzNyw0NDEzOCw0''@;'; put 'put ''NDEzOSw0NDE0MCw0NDE0MSw0NDE0Miw0NDE0Myw0NDE0Niw0NDE0Nyw0NDE0OSw0NDE1MCw0NDE1Myw0NDE1NSw0NDE1Niw0NDE1Nyw0NDE1OCw0NDE1OSw0NDE2Miw0NDE2Nyw0NDE2OCw0NDE3Myw0NDE3NCw0NDE3NSw0NDE3Nyw0NDE3OCw0NDE3OSw0NDE4MSw0NDE4Miw0NDE4Myw0NDE4''@;'; put 'put ''NCw0NDE4NSw0NDE4Niw0NDE4Nyw0NDE5MCw0NDE5NCw0NDE5NSw0NDE5Niw0NDE5Nyw0NDE5OCw0NDE5OSw0NDIwMyw0NDIwNSw0NDIwNiw0NDIwOSw0NDIxMCw0NDIxMSw0NDIxMiw0NDIxMyw0NDIxNCw0NDIxNSw0NDIxOCw0NDIyMiw0NDIyMyw0NDIyNCw0NDIyNiw0NDIyNyw0NDIyOSw0''@;'; put 'put ''NDIzMCw0NDIzMSw0NDIzMyw0NDIzNCw0NDIzNSw0NDIzNyw0NDIzOCw0NDIzOSw0NDI0MCw0NDI0MSw0NDI0Miw0NDI0Myw0NDI0NCw0NDI0Niw0NDI0OCw0NDI0OSw0NDI1MCw0NDI1MSw0NDI1Miw0NDI1Myw0NDI1NCw0NDI1NSw0NDI1OCw0NDI1OSw0NDI2MSw0NDI2Miw0NDI2NSw0NDI2''@;'; put 'put ''Nyw0NDI2OSw0NDI3MCw0NDI3NCw0NDI3Niw0NDI3OSw0NDI4MCw0NDI4MSw0NDI4Miw0NDI4Myw0NDI4Niw0NDI4Nyw0NDI4OSw0NDI5MCw0NDI5MSw0NDI5Myw0NDI5NSw0NDI5Niw0NDI5Nyw0NDI5OCw0NDI5OSw0NDMwMiw0NDMwNCw0NDMwNiw0NDMwNyw0NDMwOCw0NDMwOSw0NDMxMCw0''@;'; put 'put ''NDMxMSw0NDMxMyw0NDMxNCw0NDMxNSw0NDMxNyw0NDMxOCw0NDMxOSw0NDMyMSw0NDMyMiw0NDMyMyw0NDMyNCw0NDMyNSw0NDMyNiw0NDMyNyw0NDMyOCw0NDMzMCw0NDMzMSw0NDMzNCw0NDMzNSw0NDMzNiw0NDMzNyw0NDMzOCw0NDMzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw0NDM0Miw0NDM0Myw0NDM0NSw0NDM0Niw0NDM0Nyw0NDM0OSw0NDM1MCw0NDM1MSw0NDM1Miw0NDM1Myw0NDM1NCw0NDM1NSw0NDM1OCw0NDM2MCw0NDM2Miw0NDM2Myw0NDM2NCw0NDM2NSw0NDM2Niw0NDM2Nyw0NDM2OSw0NDM3MCw0NDM3MSw0NDM3Myw0NDM3NCw0NDM3NSxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM3Nyw0NDM3OCw0NDM3OSw0NDM4MCw0NDM4MSw0NDM4Miw0NDM4Myw0NDM4NCw0NDM4Niw0NDM4OCw0NDM4OSw0NDM5MCw0NDM5MSw0NDM5Miw0NDM5Myw0NDM5NCw0NDM5NSw0NDM5OCw0NDM5OSw0NDQwMSw0NDQwMiw0NDQwNyw0NDQwOCw0NDQw''@;'; put 'put ''OSw0NDQxMCw0NDQxNCw0NDQxNiw0NDQxOSw0NDQyMCw0NDQyMSw0NDQyMiw0NDQyMyw0NDQyNiw0NDQyNyw0NDQyOSw0NDQzMCw0NDQzMSw0NDQzMyw0NDQzNCw0NDQzNSw0NDQzNiw0NDQzNyw0NDQzOCw0NDQzOSw0NDQ0MCw0NDQ0MSw0NDQ0Miw0NDQ0Myw0NDQ0Niw0NDQ0Nyw0NDQ0OCw0''@;'; put 'put ''NDQ0OSw0NDQ1MCw0NDQ1MSw0NDQ1Myw0NDQ1NCw0NDQ1NSw0NDQ1Niw0NDQ1Nyw0NDQ1OCw0NDQ1OSw0NDQ2MCw0NDQ2MSw0NDQ2Miw0NDQ2Myw0NDQ2NCw0NDQ2NSw0NDQ2Niw0NDQ2Nyw0NDQ2OCw0NDQ2OSw0NDQ3MCw0NDQ3Miw0NDQ3Myw0NDQ3NCw0NDQ3NSw0NDQ3Niw0NDQ3Nyw0NDQ3''@;'; put 'put ''OCw0NDQ3OSw0NDQ4Miw0NDQ4Myw0NDQ4NSw0NDQ4Niw0NDQ4Nyw0NDQ4OSw0NDQ5MCw0NDQ5MSw0NDQ5Miw0NDQ5Myw0NDQ5NCw0NDQ5NSw0NDQ5OCw0NDUwMCw0NDUwMSw0NDUwMiw0NDUwMyw0NDUwNCw0NDUwNSw0NDUwNiw0NDUwNyw0NDUwOSw0NDUxMCw0NDUxMSw0NDUxMyw0NDUxNCw0''@;'; put 'put ''NDUxNSw0NDUxNyw0NDUxOCw0NDUxOSw0NDUyMCw0NDUyMSw0NDUyMiw0NDUyMyw0NDUyNCw0NDUyNSw0NDUyNiw0NDUyNyw0NDUyOCw0NDUyOSw0NDUzMCw0NDUzMSw0NDUzMiw0NDUzMyw0NDUzNCw0NDUzNSw0NDUzOCw0NDUzOSw0NDU0MSw0NDU0Miw0NDU0Niw0NDU0Nyw0NDU0OCw0NDU0''@;'; put 'put ''OSw0NDU1MCw0NDU1MSw0NDU1NCw0NDU1Niw0NDU1OCw0NDU1OSw0NDU2MCw0NDU2MSw0NDU2Miw0NDU2Myw0NDU2NSw0NDU2Niw0NDU2Nyw0NDU2OCw0NDU2OSw0NDU3MCw0NDU3MSw0NDU3MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDU3Myw0NDU3NCw0NDU3NSw0NDU3Niw0''@;'; put 'put ''NDU3Nyw0NDU3OCw0NDU3OSw0NDU4MCw0NDU4MSw0NDU4Miw0NDU4Myw0NDU4NCw0NDU4NSw0NDU4Niw0NDU4Nyw0NDU4OCw0NDU4OSw0NDU5MCw0NDU5MSw0NDU5NCw0NDU5NSw0NDU5Nyw0NDU5OCw0NDYwMSw0NDYwMyw0NDYwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDYw''@;'; put 'put ''NSw0NDYwNiw0NDYwNyw0NDYxMCw0NDYxMiw0NDYxNSw0NDYxNiw0NDYxNyw0NDYxOSw0NDYyMyw0NDYyNSw0NDYyNiw0NDYyNyw0NDYyOSw0NDYzMSw0NDYzMiw0NDYzMyw0NDYzNCw0NDYzNSw0NDYzOCw0NDY0Miw0NDY0Myw0NDY0NCw0NDY0Niw0NDY0Nyw0NDY1MCw0NDY1MSw0NDY1Myw0''@;'; put 'put ''NDY1NCw0NDY1NSw0NDY1Nyw0NDY1OCw0NDY1OSw0NDY2MCw0NDY2MSw0NDY2Miw0NDY2Myw0NDY2Niw0NDY3MCw0NDY3MSw0NDY3Miw0NDY3Myw0NDY3NCw0NDY3NSw0NDY3OCw0NDY3OSw0NDY4MCw0NDY4MSw0NDY4Miw0NDY4Myw0NDY4NSw0NDY4Niw0NDY4Nyw0NDY4OCw0NDY4OSw0NDY5''@;'; put 'put ''MCw0NDY5MSw0NDY5Miw0NDY5Myw0NDY5NCw0NDY5NSw0NDY5Niw0NDY5Nyw0NDY5OCw0NDY5OSw0NDcwMCw0NDcwMSw0NDcwMiw0NDcwMyw0NDcwNCw0NDcwNSw0NDcwNiw0NDcwNyw0NDcwOCw0NDcwOSw0NDcxMCw0NDcxMSw0NDcxMiw0NDcxMyw0NDcxNCw0NDcxNSw0NDcxNiw0NDcxNyw0''@;'; put 'put ''NDcxOCw0NDcxOSw0NDcyMCw0NDcyMSw0NDcyMiw0NDcyMyw0NDcyNCw0NDcyNSw0NDcyNiw0NDcyNyw0NDcyOCw0NDcyOSw0NDczMCw0NDczMSw0NDczNSw0NDczNyw0NDczOCw0NDczOSw0NDc0MSw0NDc0Miw0NDc0Myw0NDc0NCw0NDc0NSw0NDc0Niw0NDc0Nyw0NDc1MCw0NDc1NCw0NDc1''@;'; put 'put ''NSw0NDc1Niw0NDc1Nyw0NDc1OCw0NDc1OSw0NDc2Miw0NDc2Myw0NDc2NSw0NDc2Niw0NDc2Nyw0NDc2OCw0NDc2OSw0NDc3MCw0NDc3MSw0NDc3Miw0NDc3Myw0NDc3NCw0NDc3NSw0NDc3Nyw0NDc3OCw0NDc4MCw0NDc4Miw0NDc4Myw0NDc4NCw0NDc4NSw0NDc4Niw0NDc4Nyw0NDc4OSw0''@;'; put 'put ''NDc5MCw0NDc5MSw0NDc5Myw0NDc5NCw0NDc5NSw0NDc5Nyw0NDc5OCw0NDc5OSw0NDgwMCw0NDgwMSw0NDgwMiw0NDgwMyw0NDgwNCw0NDgwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgwNiw0NDgwOSw0NDgxMCw0NDgxMSw0NDgxMiw0NDgxNCw0NDgxNSw0NDgxNyw0NDgx''@;'; put 'put ''OCw0NDgxOSw0NDgyMCw0NDgyMSw0NDgyMiw0NDgyMyw0NDgyNCw0NDgyNSw0NDgyNiw0NDgyNyw0NDgyOCw0NDgyOSw0NDgzMCw0NDgzMSw0NDgzMiw0NDgzMyw0NDgzNCw0NDgzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgzNiw0NDgzNyw0NDgzOCw0NDgzOSw0NDg0MCw0''@;'; put 'put ''NDg0MSw0NDg0Miw0NDg0Myw0NDg0Niw0NDg0Nyw0NDg0OSw0NDg1MSw0NDg1Myw0NDg1NCw0NDg1NSw0NDg1Niw0NDg1Nyw0NDg1OCw0NDg1OSw0NDg2Miw0NDg2NCw0NDg2OCw0NDg2OSw0NDg3MCw0NDg3MSw0NDg3NCw0NDg3NSw0NDg3Niw0NDg3Nyw0NDg3OCw0NDg3OSw0NDg4MSw0NDg4''@;'; put 'put ''Miw0NDg4Myw0NDg4NCw0NDg4NSw0NDg4Niw0NDg4Nyw0NDg4OCw0NDg4OSw0NDg5MCw0NDg5MSw0NDg5NCw0NDg5NSw0NDg5Niw0NDg5Nyw0NDg5OCw0NDg5OSw0NDkwMiw0NDkwMyw0NDkwNCw0NDkwNSw0NDkwNiw0NDkwNyw0NDkwOCw0NDkwOSw0NDkxMCw0NDkxMSw0NDkxMiw0NDkxMyw0''@;'; put 'put ''NDkxNCw0NDkxNSw0NDkxNiw0NDkxNyw0NDkxOCw0NDkxOSw0NDkyMCw0NDkyMiw0NDkyMyw0NDkyNCw0NDkyNSw0NDkyNiw0NDkyNyw0NDkyOSw0NDkzMCw0NDkzMSw0NDkzMyw0NDkzNCw0NDkzNSw0NDkzNyw0NDkzOCw0NDkzOSw0NDk0MCw0NDk0MSw0NDk0Miw0NDk0Myw0NDk0Niw0NDk0''@;'; put 'put ''Nyw0NDk0OCw0NDk1MCw0NDk1MSw0NDk1Miw0NDk1Myw0NDk1NCw0NDk1NSw0NDk1Nyw0NDk1OCw0NDk1OSw0NDk2MCw0NDk2MSw0NDk2Miw0NDk2Myw0NDk2NCw0NDk2NSw0NDk2Niw0NDk2Nyw0NDk2OCw0NDk2OSw0NDk3MCw0NDk3MSw0NDk3Miw0NDk3Myw0NDk3NCw0NDk3NSw0NDk3Niw0''@;'; put 'put ''NDk3Nyw0NDk3OCw0NDk3OSw0NDk4MCw0NDk4MSw0NDk4Miw0NDk4Myw0NDk4Niw0NDk4Nyw0NDk4OSw0NDk5MCw0NDk5MSw0NDk5Myw0NDk5NCw0NDk5NSw0NDk5Niw0NDk5Nyw0NDk5OCw0NTAwMiw0NTAwNCw0NTAwNyw0NTAwOCw0NTAwOSw0NTAxMCw0NTAxMSw0NTAxMyw0NTAxNCw0NTAx''@;'; put 'put ''NSw0NTAxNiw0NTAxNyw0NTAxOCw0NTAxOSw0NTAyMSw0NTAyMiw0NTAyMyw0NTAyNCw0NTAyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTAyNiw0NTAyNyw0NTAyOCw0NTAyOSw0NTAzMCw0NTAzMSw0NTAzNCw0NTAzNSw0NTAzNiw0NTAzNyw0NTAzOCw0NTAzOSw0NTA0Miw0''@;'; put 'put ''NTA0Myw0NTA0NSw0NTA0Niw0NTA0Nyw0NTA0OSw0NTA1MCw0NTA1MSw0NTA1Miw0NTA1Myw0NTA1NCw0NTA1NSw0NTA1OCw0NTA1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTA2MSw0NTA2Miw0NTA2Myw0NTA2NCw0NTA2NSw0NTA2Niw0NTA2Nyw0NTA2OSw0NTA3MCw0NTA3''@;'; put 'put ''MSw0NTA3Myw0NTA3NCw0NTA3NSw0NTA3Nyw0NTA3OCw0NTA3OSw0NTA4MCw0NTA4MSw0NTA4Miw0NTA4Myw0NTA4Niw0NTA4Nyw0NTA4OCw0NTA4OSw0NTA5MCw0NTA5MSw0NTA5Miw0NTA5Myw0NTA5NCw0NTA5NSw0NTA5Nyw0NTA5OCw0NTA5OSw0NTEwMCw0NTEwMSw0NTEwMiw0NTEwMyw0''@;'; put 'put ''NTEwNCw0NTEwNSw0NTEwNiw0NTEwNyw0NTEwOCw0NTEwOSw0NTExMCw0NTExMSw0NTExMiw0NTExMyw0NTExNCw0NTExNSw0NTExNiw0NTExNyw0NTExOCw0NTExOSw0NTEyMCw0NTEyMSw0NTEyMiw0NTEyMyw0NTEyNiw0NTEyNyw0NTEyOSw0NTEzMSw0NTEzMyw0NTEzNSw0NTEzNiw0NTEz''@;'; put 'put ''Nyw0NTEzOCw0NTE0Miw0NTE0NCw0NTE0Niw0NTE0Nyw0NTE0OCw0NTE1MCw0NTE1MSw0NTE1Miw0NTE1Myw0NTE1NCw0NTE1NSw0NTE1Niw0NTE1Nyw0NTE1OCw0NTE1OSw0NTE2MCw0NTE2MSw0NTE2Miw0NTE2Myw0NTE2NCw0NTE2NSw0NTE2Niw0NTE2Nyw0NTE2OCw0NTE2OSw0NTE3MCw0''@;'; put 'put ''NTE3MSw0NTE3Miw0NTE3Myw0NTE3NCw0NTE3NSw0NTE3Niw0NTE3Nyw0NTE3OCw0NTE3OSw0NTE4Miw0NTE4Myw0NTE4NSw0NTE4Niw0NTE4Nyw0NTE4OSw0NTE5MCw0NTE5MSw0NTE5Miw0NTE5Myw0NTE5NCw0NTE5NSw0NTE5OCw0NTIwMCw0NTIwMiw0NTIwMyw0NTIwNCw0NTIwNSw0NTIw''@;'; put 'put ''Niw0NTIwNyw0NTIxMSw0NTIxMyw0NTIxNCw0NTIxOSw0NTIyMCw0NTIyMSw0NTIyMiw0NTIyMyw0NTIyNiw0NTIzMiw0NTIzNCw0NTIzOCw0NTIzOSw0NTI0MSw0NTI0Miw0NTI0Myw0NTI0NSw0NTI0Niw0NTI0Nyw0NTI0OCw0NTI0OSw0NTI1MCw0NTI1MSw0NTI1NCw0NTI1OCw0NTI1OSw0''@;'; put 'put ''NTI2MCw0NTI2MSw0NTI2Miw0NTI2Myw0NTI2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI2Nyw0NTI2OSw0NTI3MCw0NTI3MSw0NTI3Myw0NTI3NCw0NTI3NSw0NTI3Niw0NTI3Nyw0NTI3OCw0NTI3OSw0NTI4MSw0NTI4Miw0NTI4Myw0NTI4NCw0NTI4Niw0NTI4Nyw0NTI4''@;'; put 'put ''OCw0NTI4OSw0NTI5MCw0NTI5MSw0NTI5Miw0NTI5Myw0NTI5NCw0NTI5NSw0NTI5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI5Nyw0NTI5OCw0NTI5OSw0NTMwMCw0NTMwMSw0NTMwMiw0NTMwMyw0NTMwNCw0NTMwNSw0NTMwNiw0NTMwNyw0NTMwOCw0NTMwOSw0NTMxMCw0''@;'; put 'put ''NTMxMSw0NTMxMiw0NTMxMyw0NTMxNCw0NTMxNSw0NTMxNiw0NTMxNyw0NTMxOCw0NTMxOSw0NTMyMiw0NTMyNSw0NTMyNiw0NTMyNyw0NTMyOSw0NTMzMiw0NTMzMyw0NTMzNCw0NTMzNSw0NTMzOCw0NTM0Miw0NTM0Myw0NTM0NCw0NTM0NSw0NTM0Niw0NTM1MCw0NTM1MSw0NTM1Myw0NTM1''@;'; put 'put ''NCw0NTM1NSw0NTM1Nyw0NTM1OCw0NTM1OSw0NTM2MCw0NTM2MSw0NTM2Miw0NTM2Myw0NTM2Niw0NTM3MCw0NTM3MSw0NTM3Miw0NTM3Myw0NTM3NCw0NTM3NSw0NTM3OCw0NTM3OSw0NTM4MSw0NTM4Miw0NTM4Myw0NTM4NSw0NTM4Niw0NTM4Nyw0NTM4OCw0NTM4OSw0NTM5MCw0NTM5MSw0''@;'; put 'put ''NTM5NCw0NTM5NSw0NTM5OCw0NTM5OSw0NTQwMSw0NTQwMiw0NTQwMyw0NTQwNSw0NTQwNiw0NTQwNyw0NTQwOSw0NTQxMCw0NTQxMSw0NTQxMiw0NTQxMyw0NTQxNCw0NTQxNSw0NTQxNiw0NTQxNyw0NTQxOCw0NTQxOSw0NTQyMCw0NTQyMSw0NTQyMiw0NTQyMyw0NTQyNCw0NTQyNSw0NTQy''@;'; put 'put ''Niw0NTQyNyw0NTQyOCw0NTQyOSw0NTQzMCw0NTQzMSw0NTQzNCw0NTQzNSw0NTQzNyw0NTQzOCw0NTQzOSw0NTQ0MSw0NTQ0Myw0NTQ0NCw0NTQ0NSw0NTQ0Niw0NTQ0Nyw0NTQ1MCw0NTQ1Miw0NTQ1NCw0NTQ1NSw0NTQ1Niw0NTQ1Nyw0NTQ2MSw0NTQ2Miw0NTQ2Myw0NTQ2NSw0NTQ2Niw0''@;'; put 'put ''NTQ2Nyw0NTQ2OSw0NTQ3MCw0NTQ3MSw0NTQ3Miw0NTQ3Myw0NTQ3NCw0NTQ3NSw0NTQ3Niw0NTQ3Nyw0NTQ3OCw0NTQ3OSw0NTQ4MSw0NTQ4Miw0NTQ4Myw0NTQ4NCw0NTQ4NSw0NTQ4Niw0NTQ4Nyw0NTQ4OCw0NTQ4OSw0NTQ5MCw0NTQ5MSw0NTQ5Miw0NTQ5Myw0NTQ5NCw0NTQ5NSw0NTQ5''@;'; put 'put ''NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTQ5Nyw0NTQ5OCw0NTQ5OSw0NTUwMCw0NTUwMSw0NTUwMiw0NTUwMyw0NTUwNCw0NTUwNSw0NTUwNiw0NTUwNyw0NTUwOCw0NTUwOSw0NTUxMCw0NTUxMSw0NTUxMiw0NTUxMyw0NTUxNCw0NTUxNSw0NTUxNyw0NTUxOCw0NTUxOSw0''@;'; put 'put ''NTUyMSw0NTUyMiw0NTUyMyw0NTUyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTUyNiw0NTUyNyw0NTUyOCw0NTUyOSw0NTUzMCw0NTUzMSw0NTUzNCw0NTUzNiw0NTUzNyw0NTUzOCw0NTUzOSw0NTU0MCw0NTU0MSw0NTU0Miw0NTU0Myw0NTU0Niw0NTU0Nyw0NTU0OSw0NTU1''@;'; put 'put ''MCw0NTU1MSw0NTU1Myw0NTU1NCw0NTU1NSw0NTU1Niw0NTU1Nyw0NTU1OCw0NTU1OSw0NTU2MCw0NTU2Miw0NTU2NCw0NTU2Niw0NTU2Nyw0NTU2OCw0NTU2OSw0NTU3MCw0NTU3MSw0NTU3NCw0NTU3NSw0NTU3Nyw0NTU3OCw0NTU4MSw0NTU4Miw0NTU4Myw0NTU4NCw0NTU4NSw0NTU4Niw0''@;'; put 'put ''NTU4Nyw0NTU5MCw0NTU5Miw0NTU5NCw0NTU5NSw0NTU5Niw0NTU5Nyw0NTU5OCw0NTU5OSw0NTYwMSw0NTYwMiw0NTYwMyw0NTYwNCw0NTYwNSw0NTYwNiw0NTYwNyw0NTYwOCw0NTYwOSw0NTYxMCw0NTYxMSw0NTYxMiw0NTYxMyw0NTYxNCw0NTYxNSw0NTYxNiw0NTYxNyw0NTYxOCw0NTYx''@;'; put 'put ''OSw0NTYyMSw0NTYyMiw0NTYyMyw0NTYyNCw0NTYyNSw0NTYyNiw0NTYyNyw0NTYyOSw0NTYzMCw0NTYzMSw0NTYzMiw0NTYzMyw0NTYzNCw0NTYzNSw0NTYzNiw0NTYzNyw0NTYzOCw0NTYzOSw0NTY0MCw0NTY0MSw0NTY0Miw0NTY0Myw0NTY0NCw0NTY0NSw0NTY0Niw0NTY0Nyw0NTY0OCw0''@;'; put 'put ''NTY0OSw0NTY1MCw0NTY1MSw0NTY1Miw0NTY1Myw0NTY1NCw0NTY1NSw0NTY1Nyw0NTY1OCw0NTY1OSw0NTY2MSw0NTY2Miw0NTY2Myw0NTY2NSw0NTY2Niw0NTY2Nyw0NTY2OCw0NTY2OSw0NTY3MCw0NTY3MSw0NTY3NCw0NTY3NSw0NTY3Niw0NTY3Nyw0NTY3OCw0NTY3OSw0NTY4MCw0NTY4''@;'; put 'put ''MSw0NTY4Miw0NTY4Myw0NTY4Niw0NTY4Nyw0NTY4OCw0NTY4OSw0NTY5MCw0NTY5MSw0NTY5Myw0NTY5NCw0NTY5NSw0NTY5Niw0NTY5Nyw0NTY5OCw0NTY5OSw0NTcwMiw0NTcwMyw0NTcwNCw0NTcwNiw0NTcwNyw0NTcwOCw0NTcwOSw0NTcxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0NTcxMSw0NTcxNCw0NTcxNSw0NTcxNyw0NTcxOCw0NTcxOSw0NTcyMyw0NTcyNCw0NTcyNSw0NTcyNiw0NTcyNyw0NTczMCw0NTczMiw0NTczNSw0NTczNiw0NTczNyw0NTczOSw0NTc0MSw0NTc0Miw0NTc0Myw0NTc0NSw0NTc0Niw0NTc0Nyw0NTc0OSw0NTc1MCw0NTc1MSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTc1Miw0NTc1Myw0NTc1NCw0NTc1NSw0NTc1Niw0NTc1Nyw0NTc1OCw0NTc1OSw0NTc2MCw0NTc2MSw0NTc2Miw0NTc2Myw0NTc2NCw0NTc2NSw0NTc2Niw0NTc2Nyw0NTc3MCw0NTc3MSw0NTc3Myw0NTc3NCw0NTc3NSw0NTc3Nyw0NTc3OSw0''@;'; put 'put ''NTc4MCw0NTc4MSw0NTc4Miw0NTc4Myw0NTc4Niw0NTc4OCw0NTc5MCw0NTc5MSw0NTc5Miw0NTc5Myw0NTc5NSw0NTc5OSw0NTgwMSw0NTgwMiw0NTgwOCw0NTgwOSw0NTgxMCw0NTgxNCw0NTgyMCw0NTgyMSw0NTgyMiw0NTgyNiw0NTgyNyw0NTgyOSw0NTgzMCw0NTgzMSw0NTgzMyw0NTgz''@;'; put 'put ''NCw0NTgzNSw0NTgzNiw0NTgzNyw0NTgzOCw0NTgzOSw0NTg0Miw0NTg0Niw0NTg0Nyw0NTg0OCw0NTg0OSw0NTg1MCw0NTg1MSw0NTg1Myw0NTg1NCw0NTg1NSw0NTg1Niw0NTg1Nyw0NTg1OCw0NTg1OSw0NTg2MCw0NTg2MSw0NTg2Miw0NTg2Myw0NTg2NCw0NTg2NSw0NTg2Niw0NTg2Nyw0''@;'; put 'put ''NTg2OCw0NTg2OSw0NTg3MCw0NTg3MSw0NTg3Miw0NTg3Myw0NTg3NCw0NTg3NSw0NTg3Niw0NTg3Nyw0NTg3OCw0NTg3OSw0NTg4MCw0NTg4MSw0NTg4Miw0NTg4Myw0NTg4NCw0NTg4NSw0NTg4Niw0NTg4Nyw0NTg4OCw0NTg4OSw0NTg5MCw0NTg5MSw0NTg5Miw0NTg5Myw0NTg5NCw0NTg5''@;'; put 'put ''NSw0NTg5Niw0NTg5Nyw0NTg5OCw0NTg5OSw0NTkwMCw0NTkwMSw0NTkwMiw0NTkwMyw0NTkwNCw0NTkwNSw0NTkwNiw0NTkwNyw0NTkxMSw0NTkxMyw0NTkxNCw0NTkxNyw0NTkyMCw0NTkyMSw0NTkyMiw0NTkyMyw0NTkyNiw0NTkyOCw0NTkzMCw0NTkzMiw0NTkzMyw0NTkzNSw0NTkzOCw0''@;'; put 'put ''NTkzOSw0NTk0MSw0NTk0Miw0NTk0Myw0NTk0NSw0NTk0Niw0NTk0Nyw0NTk0OCw0NTk0OSw0NTk1MCw0NTk1MSw0NTk1NCw0NTk1OCw0NTk1OSw0NTk2MCw0NTk2MSw0NTk2Miw0NTk2Myw0NTk2NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk2Niw0NTk2Nyw0NTk2OSw0NTk3''@;'; put 'put ''MCw0NTk3MSw0NTk3Myw0NTk3NCw0NTk3NSw0NTk3Niw0NTk3Nyw0NTk3OCw0NTk3OSw0NTk4MCw0NTk4MSw0NTk4Miw0NTk4Myw0NTk4Niw0NTk4Nyw0NTk4OCw0NTk4OSw0NTk5MCw0NTk5MSw0NTk5Myw0NTk5NCw0NTk5NSw0NTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0''@;'; put 'put ''NTk5OCw0NTk5OSw0NmUzLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMx''@;'; put 'put ''LDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2''@;'; put 'put ''MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4''@;'; put 'put ''LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2''@;'; put 'put ''MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYy''@;'; put 'put ''LDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2''@;'; put 'put ''MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1''@;'; put 'put ''LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2''@;'; put 'put ''MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2Mjgx''@;'; put 'put ''LDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2''@;'; put 'put ''MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5''@;'; put 'put ''LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2''@;'; put 'put ''MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0''@;'; put 'put ''LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2''@;'; put 'put ''NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5''@;'; put 'put ''LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2''@;'; put 'put ''NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2''@;'; put 'put ''LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2''@;'; put 'put ''NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1''@;'; put 'put ''LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2''@;'; put 'put ''NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1''@;'; put 'put ''LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2''@;'; put 'put ''Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIy''@;'; put 'put ''LDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2''@;'; put 'put ''NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0''@;'; put 'put ''LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2''@;'; put 'put ''ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3''@;'; put 'put ''LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2''@;'; put 'put ''ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0''@;'; put 'put ''LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2''@;'; put 'put ''OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2''@;'; put 'put ''LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3''@;'; put 'put ''MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2''@;'; put 'put ''LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3''@;'; put 'put ''MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2''@;'; put 'put ''LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3''@;'; put 'put ''MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQz''@;'; put 'put ''LDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3''@;'; put 'put ''MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3''@;'; put 'put ''MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3''@;'; put 'put ''LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3''@;'; put 'put ''Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3''@;'; put 'put ''LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3''@;'; put 'put ''NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2''@;'; put 'put ''LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3''@;'; put 'put ''NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4''@;'; put 'put ''LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3''@;'; put 'put ''NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQy''@;'; put 'put ''LDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3''@;'; put 'put ''NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEy''@;'; put 'put ''LDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3''@;'; put 'put ''NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3Nzcx''@;'; put 'put ''LDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3''@;'; put 'put ''ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQw''@;'; put 'put ''LDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3''@;'; put 'put ''ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAz''@;'; put 'put ''LDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3''@;'; put 'put ''OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1''@;'; put 'put ''LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3''@;'; put 'put ''OTk5LDQ4ZTMsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgwMDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQsNDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEsNDgwMjIsNDgwMjMsNDgwMjQsNDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjks''@;'; put 'put ''NDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzksNDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgwNDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgwNTMsNDgwNTQsNDgwNTYsNDgwNTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgw''@;'; put 'put ''NjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgwNzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgsNDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYsNDgwODcsNDgwODgsNDgwODksNDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQs''@;'; put 'put ''NDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMsNDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgxMDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgxMTQsNDgxMTUsNDgxMTYsNDgxMTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgx''@;'; put 'put ''MjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgxNDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMsNDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYsNDgxNjgsNDgxNzAsNDgxNzEsNDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzks''@;'; put 'put ''NDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUsNDgxODYsNDgxODcsNDgxODgsNDgxODksNDgxOTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgyMDIsNDgyMDMsNDgyMDYsNDgyMDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgy''@;'; put 'put ''MTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIsNDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgsNDgyMjksNDgyMzAsNDgyMzEsNDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYs''@;'; put 'put ''NDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUsNDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgyNTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgyNTYsNDgyNTcsNDgyNTgsNDgyNTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgy''@;'; put 'put ''NjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgyODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAsNDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTksNDgzMDAsNDgzMDEsNDgzMDIsNDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIs''@;'; put 'put ''NDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUsNDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgzMzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgzNDAsNDgzNDIsNDgzNDMsNDgzNDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgz''@;'; put 'put ''NTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgzNjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQsNDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAsNDgzNzEsNDgzNzUsNDgzNzcsNDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMs''@;'; put 'put ''NDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYsNDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0MDksNDg0MTAsNDg0MTEsNDg0MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYsNDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMsNDg0MzQsNDg0MzUsNDg0MzYsNDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUsNDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0NTksNDg0NjEsNDg0NjIsNDg0NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0''@;'; put 'put ''NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUsNDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIsNDg0OTMsNDg0OTQsNDg0OTUsNDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAs''@;'; put 'put ''NDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDksNDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1MjcsNDg1MzAsNDg1MzIsNDg1MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1''@;'; put 'put ''NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYsNDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMsNDg1NjQsNDg1NjUsNDg1NjYsNDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIs''@;'; put 'put ''NDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEsNDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1OTIsNDg1OTMsNDg1OTQsNDg1OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2''@;'; put 'put ''MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgsNDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2Mjks''@;'; put 'put ''NDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2MzksNDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2NTUsNDg2NTcsNDg2NTgsNDg2NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYsNDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIsNDg2ODMsNDg2ODQsNDg2ODUsNDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAs''@;'; put 'put ''NDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTksNDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3MTMsNDg3MTQsNDg3MTUsNDg3MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3''@;'; put 'put ''MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcsNDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgsNDg3NTksNDg3NjAsNDg3NjEsNDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAs''@;'; put 'put ''NDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIsNDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3OTgsNDg3OTksNDg4MDAsNDg4MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4''@;'; put 'put ''MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAsNDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYsNDg4MjcsNDg4MjgsNDg4MjksNDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQs''@;'; put 'put ''NDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMsNDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4NTMsNDg4NTQsNDg4NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4''@;'; put 'put ''NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAsNDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODks''@;'; put 'put ''NDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTksNDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5MTIsNDg5MTMsNDg5MTQsNDg5MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5''@;'; put 'put ''MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5MzgsNDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQsNDg5NDUsNDg5NDYsNDg5NDcsNDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIs''@;'; put 'put ''NDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMsNDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5NzgsNDg5NzksNDg5ODAsNDg5ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5''@;'; put 'put ''ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5OTYsNDg5OTcsNDg5OTgsNDg5OTksNDllMyw0OTAwMSw0OTAwMiw0OTAwMyw0OTAwNCw0OTAwNSw0OTAwNiw0OTAwNyw0OTAwOCw0OTAwOSw0OTAxMCw0OTAxMSw0OTAxMiw0OTAxMyw0OTAxNCw0''@;'; put 'put ''OTAxNSw0OTAxNiw0OTAxNyw0OTAxOCw0OTAxOSw0OTAyMCw0OTAyMSw0OTAyMiw0OTAyMyw0OTAyNCw0OTAyNSw0OTAyNiw0OTAyNyw0OTAyOCw0OTAyOSw0OTAzMCw0OTAzMSw0OTAzMiw0OTAzMyw0OTAzNCw0OTAzNSw0OTAzNiw0OTAzNyw0OTAzOCw0OTAzOSw0OTA0MCw0OTA0MSw0OTA0''@;'; put 'put ''Miw0OTA0Myw0OTA0NSw0OTA0Niw0OTA0Nyw0OTA0OCw0OTA0OSw0OTA1MCw0OTA1MSw0OTA1Miw0OTA1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA1NCw0OTA1NSw0OTA1Niw0OTA1Nyw0OTA1OCw0OTA1OSw0OTA2MCw0OTA2MSw0OTA2Miw0OTA2Myw0OTA2NCw0OTA2NSw0''@;'; put 'put ''OTA2Niw0OTA2Nyw0OTA2OCw0OTA2OSw0OTA3MCw0OTA3MSw0OTA3Myw0OTA3NCw0OTA3NSw0OTA3Niw0OTA3Nyw0OTA3OCw0OTA3OSw0OTA4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA4MSw0OTA4Miw0OTA4Myw0OTA4NCw0OTA4NSw0OTA4Niw0OTA4Nyw0OTA4OCw0OTA4''@;'; put 'put ''OSw0OTA5MCw0OTA5MSw0OTA5Miw0OTA5NCw0OTA5NSw0OTA5Niw0OTA5Nyw0OTA5OCw0OTA5OSw0OTEwMiw0OTEwMyw0OTEwNSw0OTEwNiw0OTEwNyw0OTEwOSw0OTExMCw0OTExMSw0OTExMiw0OTExMyw0OTExNCw0OTExNSw0OTExNyw0OTExOCw0OTEyMCw0OTEyMiw0OTEyMyw0OTEyNCw0''@;'; put 'put ''OTEyNSw0OTEyNiw0OTEyNyw0OTEyOCw0OTEyOSw0OTEzMCw0OTEzMSw0OTEzMiw0OTEzMyw0OTEzNCw0OTEzNSw0OTEzNiw0OTEzNyw0OTEzOCw0OTEzOSw0OTE0MCw0OTE0MSw0OTE0Miw0OTE0Myw0OTE0NCw0OTE0NSw0OTE0Niw0OTE0Nyw0OTE0OCw0OTE0OSw0OTE1MCw0OTE1MSw0OTE1''@;'; put 'put ''Miw0OTE1Myw0OTE1NCw0OTE1NSw0OTE1Niw0OTE1Nyw0OTE1OCw0OTE1OSw0OTE2MCw0OTE2MSw0OTE2Miw0OTE2Myw0OTE2NCw0OTE2NSw0OTE2Niw0OTE2Nyw0OTE2OCw0OTE2OSw0OTE3MCw0OTE3MSw0OTE3Miw0OTE3Myw0OTE3NCw0OTE3NSw0OTE3Niw0OTE3Nyw0OTE3OCw0OTE3OSw0''@;'; put 'put ''OTE4MCw0OTE4MSw0OTE4Miw0OTE4Myw0OTE4NCw0OTE4NSw0OTE4Niw0OTE4Nyw0OTE4OCw0OTE4OSw0OTE5MCw0OTE5MSw0OTE5Miw0OTE5Myw0OTE5NCw0OTE5NSw0OTE5Niw0OTE5Nyw0OTE5OCw0OTE5OSw0OTIwMCw0OTIwMSw0OTIwMiw0OTIwMyw0OTIwNCw0OTIwNSw0OTIwNiw0OTIw''@;'; put 'put ''Nyw0OTIwOCw0OTIwOSw0OTIxMCw0OTIxMSw0OTIxMyw0OTIxNCw0OTIxNSw0OTIxNiw0OTIxNyw0OTIxOCw0OTIxOSw0OTIyMCw0OTIyMSw0OTIyMiw0OTIyMyw0OTIyNCw0OTIyNSw0OTIyNiw0OTIyNyw0OTIyOCw0OTIyOSw0OTIzMCw0OTIzMSw0OTIzMiw0OTIzNCw0OTIzNSw0OTIzNiw0''@;'; put 'put ''OTIzNyw0OTIzOCw0OTIzOSw0OTI0MSw0OTI0Miw0OTI0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI0NSw0OTI0Niw0OTI0Nyw0OTI0OSw0OTI1MCw0OTI1MSw0OTI1Miw0OTI1Myw0OTI1NCw0OTI1NSw0OTI1OCw0OTI1OSw0OTI2MCw0OTI2MSw0OTI2Miw0OTI2Myw0OTI2''@;'; put 'put ''NCw0OTI2NSw0OTI2Niw0OTI2Nyw0OTI2OCw0OTI2OSw0OTI3MCw0OTI3MSw0OTI3Miw0OTI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI3NCw0OTI3NSw0OTI3Niw0OTI3Nyw0OTI3OCw0OTI3OSw0OTI4MCw0OTI4MSw0OTI4Miw0OTI4Myw0OTI4NCw0OTI4NSw0OTI4Niw0''@;'; put 'put ''OTI4Nyw0OTI4OCw0OTI4OSw0OTI5MCw0OTI5MSw0OTI5Miw0OTI5Myw0OTI5NCw0OTI5NSw0OTI5OCw0OTI5OSw0OTMwMSw0OTMwMiw0OTMwMyw0OTMwNSw0OTMwNiw0OTMwNyw0OTMwOCw0OTMwOSw0OTMxMCw0OTMxMSw0OTMxNCw0OTMxNiw0OTMxOCw0OTMxOSw0OTMyMCw0OTMyMSw0OTMy''@;'; put 'put ''Miw0OTMyMyw0OTMyNiw0OTMyOSw0OTMzMCw0OTMzNSw0OTMzNiw0OTMzNyw0OTMzOCw0OTMzOSw0OTM0Miw0OTM0Niw0OTM0Nyw0OTM0OCw0OTM1MCw0OTM1MSw0OTM1NCw0OTM1NSw0OTM1Nyw0OTM1OCw0OTM1OSw0OTM2MSw0OTM2Miw0OTM2Myw0OTM2NCw0OTM2NSw0OTM2Niw0OTM2Nyw0''@;'; put 'put ''OTM3MCw0OTM3NCw0OTM3NSw0OTM3Niw0OTM3Nyw0OTM3OCw0OTM3OSw0OTM4Miw0OTM4Myw0OTM4NSw0OTM4Niw0OTM4Nyw0OTM4OSw0OTM5MCw0OTM5MSw0OTM5Miw0OTM5Myw0OTM5NCw0OTM5NSw0OTM5OCw0OTQwMCw0OTQwMiw0OTQwMyw0OTQwNCw0OTQwNSw0OTQwNiw0OTQwNyw0OTQw''@;'; put 'put ''OSw0OTQxMCw0OTQxMSw0OTQxMyw0OTQxNCw0OTQxNSw0OTQxNyw0OTQxOCw0OTQxOSw0OTQyMCw0OTQyMSw0OTQyMiw0OTQyMyw0OTQyNSw0OTQyNiw0OTQyNyw0OTQyOCw0OTQzMCw0OTQzMSw0OTQzMiw0OTQzMyw0OTQzNCw0OTQzNSw0OTQ0MSw0OTQ0Miw0OTQ0NSw0OTQ0OCw0OTQ0OSw0''@;'; put 'put ''OTQ1MCw0OTQ1MSw0OTQ1NCw0OTQ1OCw0OTQ1OSw0OTQ2MCw0OTQ2MSw0OTQ2Myw0OTQ2Niw0OTQ2Nyw0OTQ2OSw0OTQ3MCw0OTQ3MSw0OTQ3Myw0OTQ3NCw0OTQ3NSw0OTQ3Niw0OTQ3Nyw0OTQ3OCw0OTQ3OSw0OTQ4Miw0OTQ4Niw0OTQ4Nyw0OTQ4OCw0OTQ4OSw0OTQ5MCw0OTQ5MSw0OTQ5''@;'; put 'put ''NCw0OTQ5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTQ5Nyw0OTQ5OCw0OTQ5OSw0OTUwMSw0OTUwMiw0OTUwMyw0OTUwNCw0OTUwNSw0OTUwNiw0OTUwNyw0OTUxMCw0OTUxNCw0OTUxNSw0OTUxNiw0OTUxNyw0OTUxOCw0OTUxOSw0OTUyMSw0OTUyMiw0OTUyMyw0OTUyNSw0''@;'; put 'put ''OTUyNiw0OTUyNyw0OTUyOSw0OTUzMCw0OTUzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTUzMiw0OTUzMyw0OTUzNCw0OTUzNSw0OTUzNiw0OTUzNyw0OTUzOCw0OTUzOSw0OTU0MCw0OTU0Miw0OTU0Myw0OTU0NCw0OTU0NSw0OTU0Niw0OTU0Nyw0OTU1MSw0OTU1Myw0OTU1''@;'; put 'put ''NCw0OTU1NSw0OTU1Nyw0OTU1OSw0OTU2MCw0OTU2MSw0OTU2Miw0OTU2Myw0OTU2Niw0OTU2OCw0OTU3MCw0OTU3MSw0OTU3Miw0OTU3NCw0OTU3NSw0OTU3OCw0OTU3OSw0OTU4MSw0OTU4Miw0OTU4Myw0OTU4NSw0OTU4Niw0OTU4Nyw0OTU4OCw0OTU4OSw0OTU5MCw0OTU5MSw0OTU5Miw0''@;'; put 'put ''OTU5Myw0OTU5NCw0OTU5NSw0OTU5Niw0OTU5OCw0OTU5OSw0OTYwMCw0OTYwMSw0OTYwMiw0OTYwMyw0OTYwNSw0OTYwNiw0OTYwNyw0OTYwOSw0OTYxMCw0OTYxMSw0OTYxMyw0OTYxNCw0OTYxNSw0OTYxNiw0OTYxNyw0OTYxOCw0OTYxOSw0OTYyMSw0OTYyMiw0OTYyNSw0OTYyNiw0OTYy''@;'; put 'put ''Nyw0OTYyOCw0OTYyOSw0OTYzMCw0OTYzMSw0OTYzMyw0OTYzNCw0OTYzNSw0OTYzNyw0OTYzOCw0OTYzOSw0OTY0MSw0OTY0Miw0OTY0Myw0OTY0NCw0OTY0NSw0OTY0Niw0OTY0Nyw0OTY1MCw0OTY1Miw0OTY1Myw0OTY1NCw0OTY1NSw0OTY1Niw0OTY1Nyw0OTY1OCw0OTY1OSw0OTY2Miw0''@;'; put 'put ''OTY2Myw0OTY2NSw0OTY2Niw0OTY2Nyw0OTY2OSw0OTY3MCw0OTY3MSw0OTY3Miw0OTY3Myw0OTY3NCw0OTY3NSw0OTY3OCw0OTY4MCw0OTY4Miw0OTY4Myw0OTY4NCw0OTY4NSw0OTY4Niw0OTY4Nyw0OTY5MCw0OTY5MSw0OTY5Myw0OTY5NCw0OTY5Nyw0OTY5OCw0OTY5OSw0OTcwMCw0OTcw''@;'; put 'put ''MSw0OTcwMiw0OTcwMyw0OTcwNiw0OTcwOCw0OTcxMCw0OTcxMiw0OTcxNSw0OTcxNyw0OTcxOCw0OTcxOSw0OTcyMCw0OTcyMSw0OTcyMiw0OTcyMyw0OTcyNCw0OTcyNSw0OTcyNiw0OTcyNyw0OTcyOCw0OTcyOSw0OTczMCw0OTczMSw0OTczMiw0OTczMyxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw0OTczNCw0OTczNSw0OTczNyw0OTczOCw0OTczOSw0OTc0MCw0OTc0MSw0OTc0Miw0OTc0Myw0OTc0Niw0OTc0Nyw0OTc0OSw0OTc1MCw0OTc1MSw0OTc1Myw0OTc1NCw0OTc1NSw0OTc1Niw0OTc1Nyw0OTc1OCw0OTc1OSw0OTc2MSw0OTc2Miw0OTc2Myw0OTc2NCw0OTc2''@;'; put 'put ''NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTc2Nyw0OTc2OCw0OTc2OSw0OTc3MCw0OTc3MSw0OTc3NCw0OTc3NSw0OTc3Nyw0OTc3OCw0OTc3OSw0OTc4MSw0OTc4Miw0OTc4Myw0OTc4NCw0OTc4NSw0OTc4Niw0OTc4Nyw0OTc5MCw0OTc5Miw0OTc5NCw0OTc5NSw0OTc5Niw0''@;'; put 'put ''OTc5Nyw0OTc5OCw0OTc5OSw0OTgwMiw0OTgwMyw0OTgwNCw0OTgwNSw0OTgwNiw0OTgwNyw0OTgwOSw0OTgxMCw0OTgxMSw0OTgxMiw0OTgxMyw0OTgxNCw0OTgxNSw0OTgxNyw0OTgxOCw0OTgyMCw0OTgyMiw0OTgyMyw0OTgyNCw0OTgyNSw0OTgyNiw0OTgyNyw0OTgzMCw0OTgzMSw0OTgz''@;'; put 'put ''Myw0OTgzNCw0OTgzNSw0OTgzOCw0OTgzOSw0OTg0MCw0OTg0MSw0OTg0Miw0OTg0Myw0OTg0Niw0OTg0OCw0OTg1MCw0OTg1MSw0OTg1Miw0OTg1Myw0OTg1NCw0OTg1NSw0OTg1Niw0OTg1Nyw0OTg1OCw0OTg1OSw0OTg2MCw0OTg2MSw0OTg2Miw0OTg2Myw0OTg2NCw0OTg2NSw0OTg2Niw0''@;'; put 'put ''OTg2Nyw0OTg2OCw0OTg2OSw0OTg3MCw0OTg3MSw0OTg3Miw0OTg3Myw0OTg3NCw0OTg3NSw0OTg3Niw0OTg3Nyw0OTg3OCw0OTg3OSw0OTg4MCw0OTg4MSw0OTg4Miw0OTg4Myw0OTg4Niw0OTg4Nyw0OTg4OSw0OTg5MCw0OTg5Myw0OTg5NCw0OTg5NSw0OTg5Niw0OTg5Nyw0OTg5OCw0OTkw''@;'; put 'put ''Miw0OTkwNCw0OTkwNiw0OTkwNyw0OTkwOCw0OTkwOSw0OTkxMSw0OTkxNCw0OTkxNyw0OTkxOCw0OTkxOSw0OTkyMSw0OTkyMiw0OTkyMyw0OTkyNCw0OTkyNSw0OTkyNiw0OTkyNyw0OTkzMCw0OTkzMSw0OTkzNCw0OTkzNSw0OTkzNiw0OTkzNyw0OTkzOCw0OTk0Miw0OTk0Myw0OTk0NSw0''@;'; put 'put ''OTk0Niw0OTk0Nyw0OTk0OSw0OTk1MCw0OTk1MSw0OTk1Miw0OTk1Myw0OTk1NCw0OTk1NSw0OTk1OCw0OTk1OSw0OTk2Miw0OTk2Myw0OTk2NCw0OTk2NSw0OTk2Niw0OTk2Nyw0OTk2OCw0OTk2OSw0OTk3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk3MSw0OTk3Miw0OTk3''@;'; put 'put ''Myw0OTk3NCw0OTk3NSw0OTk3Niw0OTk3Nyw0OTk3OCw0OTk3OSw0OTk4MCw0OTk4MSw0OTk4Miw0OTk4Myw0OTk4NCw0OTk4NSw0OTk4Niw0OTk4Nyw0OTk4OCw0OTk5MCw0OTk5MSw0OTk5Miw0OTk5Myw0OTk5NCw0OTk5NSw0OTk5Niw0OTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0OTk5OCw0OTk5OSw1ZTQsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAwMDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAsNTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYsNTAwMTcsNTAwMTgsNTAwMTksNTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYs''@;'; put 'put ''NTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgsNTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAwNDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAwNTQsNTAwNTUsNTAwNTcsNTAwNTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAw''@;'; put 'put ''NjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAwNzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcsNTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMsNTAwODQsNTAwODUsNTAwODYsNTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEs''@;'; put 'put ''NTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAsNTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAxMDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAxMTEsNTAxMTMsNTAxMTQsNTAxMTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAx''@;'; put 'put ''MjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAxMjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMsNTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIsNTAxNDUsNTAxNDcsNTAxNDgsNTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUs''@;'; put 'put ''NTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcsNTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAxNzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAxNzUsNTAxNzYsNTAxNzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAx''@;'; put 'put ''ODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAxOTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcsNTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYs''@;'; put 'put ''NTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYsNTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAyMjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAyMzAsNTAyMzEsNTAyMzIsNTAyMzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAy''@;'; put 'put ''NDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAyNTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQsNTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAsNTAyNjEsNTAyNjIsNTAyNjMsNTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgs''@;'; put 'put ''NTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzksNTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAyODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAyOTQsNTAyOTUsNTAyOTYsNTAyOTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAz''@;'; put 'put ''MDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAzMTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcsNTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMsNTAzMjUsNTAzMjYsNTAzMjcsNTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMs''@;'; put 'put ''NTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIsNTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAzNDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAzNTMsNTAzNTQsNTAzNTUsNTAzNTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAz''@;'; put 'put ''NjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAzNzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcsNTAzNzgsNTAzNzksNTAzODAsNTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUs''@;'; put 'put ''NTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQsNTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAzOTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0MDAsNTA0MDEsNTA0MDIsNTA0MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0''@;'; put 'put ''MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0MjcsNTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYsNTA0MzcsNTA0MzgsNTA0MzksNTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUs''@;'; put 'put ''NTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYsNTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0NjgsNTA0NjksNTA0NzAsNTA0NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0''@;'; put 'put ''NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcsNTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEsNTA1MTIsNTA1MTMsNTA1MTQsNTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1Mjcs''@;'; put 'put ''NTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAsNTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1NTgsNTA1NTksNTA1NjEsNTA1NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1''@;'; put 'put ''NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAsNTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcsNTA1OTgsNTA1OTksNTA2MDAsNTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYs''@;'; put 'put ''NTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2MzcsNTA2MzksNTA2NDIsNTA2NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2''@;'; put 'put ''NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEsNTA2NzMsNTA2NzQsNTA2NzUsNTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMs''@;'; put 'put ''NTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMsNTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3MTksNTA3MjAsNTA3MjEsNTA3MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3''@;'; put 'put ''MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUsNTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMsNTA3NjQsNTA3NjUsNTA3NjYsNTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYs''@;'; put 'put ''NTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgsNTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4MDIsNTA4MDMsNTA4MDQsNTA4MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4''@;'; put 'put ''MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEsNTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4MzksNTA4NDEsNTA4NDIsNTA4NDMsNTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDks''@;'; put 'put ''NTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIsNTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4NzksNTA4ODIsNTA4ODQsNTA4ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4''@;'; put 'put ''OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMsNTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEsNTA5MTQsNTA5MTUsNTA5MTYsNTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMs''@;'; put 'put ''NTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5NDMsNTA5NDQsNTA5NDUsNTA5NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5''@;'; put 'put ''NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIsNTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEsNTA5ODIsNTA5ODMsNTA5ODUsNTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAs''@;'; put 'put ''NTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTFlMyw1MTAwMSw1MTAwMiw1MTAwMyw1MTAwNiw1MTAwNyw1MTAwOSw1MTAxMCw1MTAxMSw1MTAxMyw1MTAxNCw1MTAxNSw1MTAxNiw1MTAxNyw1MTAxOSw1MTAyMiw1MTAyNCw1MTAzMyw1MTAzNCw1MTAzNSw1MTAzNyw1MTAzOCw1MTAzOSw1MTA0''@;'; put 'put ''MSw1MTA0Miw1MTA0Myw1MTA0NCw1MTA0NSw1MTA0Niw1MTA0Nyw1MTA0OSw1MTA1MCw1MTA1Miw1MTA1Myw1MTA1NCw1MTA1NSw1MTA1Niw1MTA1Nyw1MTA1OCw1MTA1OSw1MTA2Miw1MTA2Myw1MTA2NSw1MTA2Niw1MTA2Nyw1MTA3MSw1MTA3Miw1MTA3Myw1MTA3NCw1MTA3OCw1MTA4Myw1''@;'; put 'put ''MTA4NCw1MTA4NSw1MTA4Nyw1MTA5MCw1MTA5MSw1MTA5Myw1MTA5Nyw1MTA5OSw1MTEwMCw1MTEwMSw1MTEwMiw1MTEwMyw1MTEwNiw1MTExMSw1MTExMiw1MTExMyw1MTExNCw1MTExNSw1MTExOCw1MTExOSw1MTEyMSw1MTEyMiw1MTEyMyw1MTEyNSw1MTEyNiw1MTEyNyw1MTEyOCw1MTEy''@;'; put 'put ''OSw1MTEzMCw1MTEzMSw1MTEzNCw1MTEzOCw1MTEzOSw1MTE0MCw1MTE0MSw1MTE0Miw1MTE0Myw1MTE0Niw1MTE0Nyw1MTE0OSw1MTE1MSw1MTE1Myw1MTE1NCw1MTE1NSw1MTE1Niw1MTE1Nyw1MTE1OCw1MTE1OSw1MTE2MSw1MTE2Miw1MTE2Myw1MTE2NCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1MTE2Niw1MTE2Nyw1MTE2OCw1MTE2OSw1MTE3MCw1MTE3MSw1MTE3Myw1MTE3NCw1MTE3NSw1MTE3Nyw1MTE3OCw1MTE3OSw1MTE4MSw1MTE4Miw1MTE4Myw1MTE4NCw1MTE4NSw1MTE4Niw1MTE4Nyw1MTE4OCw1MTE4OSw1MTE5MCw1MTE5MSw1MTE5Miw1MTE5Myw1MTE5''@;'; put 'put ''NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE5NSw1MTE5Niw1MTE5Nyw1MTE5OCw1MTE5OSw1MTIwMiw1MTIwMyw1MTIwNSw1MTIwNiw1MTIwNyw1MTIwOSw1MTIxMSw1MTIxMiw1MTIxMyw1MTIxNCw1MTIxNSw1MTIxOCw1MTIyMCw1MTIyMyw1MTIyNCw1MTIyNSw1MTIyNiw1''@;'; put 'put ''MTIyNyw1MTIzMCw1MTIzMSw1MTIzMyw1MTIzNCw1MTIzNSw1MTIzNyw1MTIzOCw1MTIzOSw1MTI0MCw1MTI0MSw1MTI0Miw1MTI0Myw1MTI0Niw1MTI0OCw1MTI1MCw1MTI1MSw1MTI1Miw1MTI1Myw1MTI1NCw1MTI1NSw1MTI1Nyw1MTI1OCw1MTI1OSw1MTI2MSw1MTI2Miw1MTI2Myw1MTI2''@;'; put 'put ''NSw1MTI2Niw1MTI2Nyw1MTI2OCw1MTI2OSw1MTI3MCw1MTI3MSw1MTI3NCw1MTI3NSw1MTI3OCw1MTI3OSw1MTI4MCw1MTI4MSw1MTI4Miw1MTI4Myw1MTI4NSw1MTI4Niw1MTI4Nyw1MTI4OCw1MTI4OSw1MTI5MCw1MTI5MSw1MTI5Miw1MTI5Myw1MTI5NCw1MTI5NSw1MTI5Niw1MTI5Nyw1''@;'; put 'put ''MTI5OCw1MTI5OSw1MTMwMCw1MTMwMSw1MTMwMiw1MTMwMyw1MTMwNCw1MTMwNSw1MTMwNiw1MTMwNyw1MTMwOCw1MTMwOSw1MTMxMCw1MTMxMSw1MTMxNCw1MTMxNSw1MTMxNyw1MTMxOCw1MTMxOSw1MTMyMSw1MTMyMyw1MTMyNCw1MTMyNSw1MTMyNiw1MTMyNyw1MTMzMCw1MTMzMiw1MTMz''@;'; put 'put ''Niw1MTMzNyw1MTMzOCw1MTM0Miw1MTM0Myw1MTM0NCw1MTM0NSw1MTM0Niw1MTM0Nyw1MTM0OSw1MTM1MCw1MTM1MSw1MTM1Miw1MTM1Myw1MTM1NCw1MTM1NSw1MTM1Niw1MTM1OCw1MTM2MCw1MTM2Miw1MTM2Myw1MTM2NCw1MTM2NSw1MTM2Niw1MTM2Nyw1MTM2OSw1MTM3MCw1MTM3MSw1''@;'; put 'put ''MTM3Miw1MTM3Myw1MTM3NCw1MTM3NSw1MTM3Niw1MTM3Nyw1MTM3OCw1MTM3OSw1MTM4MCw1MTM4MSw1MTM4Miw1MTM4Myw1MTM4NCw1MTM4NSw1MTM4Niw1MTM4Nyw1MTM5MCw1MTM5MSw1MTM5Miw1MTM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTM5NCw1MTM5NSw1MTM5''@;'; put 'put ''Nyw1MTM5OCw1MTM5OSw1MTQwMSw1MTQwMiw1MTQwMyw1MTQwNSw1MTQwNiw1MTQwNyw1MTQwOCw1MTQwOSw1MTQxMCw1MTQxMSw1MTQxNCw1MTQxNiw1MTQxOCw1MTQxOSw1MTQyMCw1MTQyMSw1MTQyMiw1MTQyMyw1MTQyNiw1MTQyNyw1MTQyOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw1MTQzMCw1MTQzMSw1MTQzMiw1MTQzMyw1MTQzNCw1MTQzNSw1MTQzNiw1MTQzNyw1MTQzOCw1MTQzOSw1MTQ0MCw1MTQ0MSw1MTQ0Miw1MTQ0Myw1MTQ0NCw1MTQ0Niw1MTQ0Nyw1MTQ0OCw1MTQ0OSw1MTQ1MCw1MTQ1MSw1MTQ1NCw1MTQ1NSw1MTQ1Nyw1MTQ1OCw1MTQ1OSw1MTQ2''@;'; put 'put ''Myw1MTQ2NCw1MTQ2NSw1MTQ2Niw1MTQ2Nyw1MTQ3MCwxMjI4OCwxMjI4OSwxMjI5MCwxODMsODIyOSw4MjMwLDE2OCwxMjI5MSwxNzMsODIxMyw4NzQxLDY1MzQwLDg3NjQsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMw''@;'; put 'put ''MSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4ODAwLDg4MDQsODgwNSw4NzM0LDg3NTYsMTc2LDgyNDIsODI0Myw4NDUxLDg0OTEsNjU1MDQsNjU1MDUsNjU1MDksOTc5NCw5NzkyLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsMTY3LDgyNTEsOTczNCw5''@;'; put 'put ''NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4NTk0LDg1OTIsODU5Myw4NTk1LDg1OTYsMTIzMDcsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYs''@;'; put 'put ''ODc0NSw4NzQzLDg3NDQsNjU1MDYsNTE0NzIsNTE0NzQsNTE0NzUsNTE0NzYsNTE0NzcsNTE0NzgsNTE0NzksNTE0ODEsNTE0ODIsNTE0ODMsNTE0ODQsNTE0ODUsNTE0ODYsNTE0ODcsNTE0ODgsNTE0ODksNTE0OTAsNTE0OTEsNTE0OTIsNTE0OTMsNTE0OTQsNTE0OTUsNTE0OTYsNTE0OTcs''@;'; put 'put ''NTE0OTgsNTE0OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MDEsNTE1MDIsNTE1MDMsNTE1MDQsNTE1MDUsNTE1MDYsNTE1MDcsNTE1MDksNTE1MTAsNTE1MTEsNTE1MTIsNTE1MTMsNTE1MTQsNTE1MTUsNTE1MTYsNTE1MTcsNTE1MTgsNTE1MTksNTE1MjAsNTE1MjEsNTE1''@;'; put 'put ''MjIsNTE1MjMsNTE1MjQsNTE1MjUsNTE1MjYsNTE1MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MjgsNTE1MjksNTE1MzAsNTE1MzEsNTE1MzIsNTE1MzMsNTE1MzQsNTE1MzUsNTE1MzgsNTE1MzksNTE1NDEsNTE1NDIsNTE1NDMsNTE1NDUsNTE1NDYsNTE1NDcsNTE1NDgs''@;'; put 'put ''NTE1NDksNTE1NTAsNTE1NTEsNTE1NTQsNTE1NTYsNTE1NTcsNTE1NTgsNTE1NTksNTE1NjAsNTE1NjEsNTE1NjIsNTE1NjMsNTE1NjUsNTE1NjYsNTE1NjcsODY1OCw4NjYwLDg3MDQsODcwNywxODAsNjUzNzQsNzExLDcyOCw3MzMsNzMwLDcyOSwxODQsNzMxLDE2MSwxOTEsNzIwLDg3NTAs''@;'; put 'put ''ODcyMSw4NzE5LDE2NCw4NDU3LDgyNDAsOTY2NSw5NjY0LDk2NTUsOTY1NCw5ODI4LDk4MjQsOTgyNSw5ODI5LDk4MzEsOTgyNyw4ODU3LDk2NzIsOTYzNSw5NjgwLDk2ODEsOTYxOCw5NjM2LDk2MzcsOTY0MCw5NjM5LDk2MzgsOTY0MSw5ODMyLDk3NDMsOTc0Miw5NzU2LDk3NTgsMTgyLDgy''@;'; put 'put ''MjQsODIyNSw4NTk3LDg1OTksODYwMSw4NTk4LDg2MDAsOTgzNyw5ODMzLDk4MzQsOTgzNiwxMjkyNywxMjgyOCw4NDcwLDEzMjU1LDg0ODIsMTMyNTAsMTMyNzIsODQ4MSw4MzY0LDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1NjksNTE1NzAsNTE1NzEsNTE1NzMsNTE1NzQsNTE1NzUsNTE1NzYsNTE1NzcsNTE1NzgsNTE1NzksNTE1ODEsNTE1ODIsNTE1ODMsNTE1ODQsNTE1ODUsNTE1ODYsNTE1ODcsNTE1ODgs''@;'; put 'put ''NTE1ODksNTE1OTAsNTE1OTEsNTE1OTQsNTE1OTUsNTE1OTcsNTE1OTgsNTE1OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MDEsNTE2MDIsNTE2MDMsNTE2MDQsNTE2MDUsNTE2MDYsNTE2MDcsNTE2MTAsNTE2MTIsNTE2MTQsNTE2MTUsNTE2MTYsNTE2MTcsNTE2MTgsNTE2''@;'; put 'put ''MTksNTE2MjAsNTE2MjEsNTE2MjIsNTE2MjMsNTE2MjQsNTE2MjUsNTE2MjYsNTE2MjcsNTE2MjgsNTE2MjksNTE2MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MzEsNTE2MzIsNTE2MzMsNTE2MzQsNTE2MzUsNTE2MzYsNTE2MzcsNTE2MzgsNTE2MzksNTE2NDAsNTE2NDEs''@;'; put 'put ''NTE2NDIsNTE2NDMsNTE2NDQsNTE2NDUsNTE2NDYsNTE2NDcsNTE2NTAsNTE2NTEsNTE2NTMsNTE2NTQsNTE2NTcsNTE2NTksNTE2NjAsNTE2NjEsNTE2NjIsNTE2NjMsNTE2NjYsNTE2NjgsNTE2NzEsNTE2NzIsNTE2NzUsNjUyODEsNjUyODIsNjUyODMsNjUyODQsNjUyODUsNjUyODYsNjUy''@;'; put 'put ''ODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQs''@;'; put 'put ''NjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjU1MTAsNjUzNDEsNjUz''@;'; put 'put ''NDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjks''@;'; put 'put ''NjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTE2NzgsNTE2NzksNTE2ODEsNTE2ODMsNTE2ODUsNTE2ODYsNTE2ODgsNTE2ODksNTE2OTAsNTE2OTEsNTE2OTQsNTE2OTgsNTE2OTksNTE3MDAsNTE3MDEsNTE3MDIsNTE3MDMsNTE3MDYsNTE3MDcsNTE3MDksNTE3MTAsNTE3MTEsNTE3''@;'; put 'put ''MTMsNTE3MTQsNTE3MTUsNTE3MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3MTcsNTE3MTgsNTE3MTksNTE3MjIsNTE3MjYsNTE3MjcsNTE3MjgsNTE3MjksNTE3MzAsNTE3MzEsNTE3MzMsNTE3MzQsNTE3MzUsNTE3MzcsNTE3MzgsNTE3MzksNTE3NDAsNTE3NDEsNTE3NDIs''@;'; put 'put ''NTE3NDMsNTE3NDQsNTE3NDUsNTE3NDYsNTE3NDcsNTE3NDgsNTE3NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3NTAsNTE3NTEsNTE3NTIsNTE3NTQsNTE3NTUsNTE3NTYsNTE3NTcsNTE3NTgsNTE3NTksNTE3NjAsNTE3NjEsNTE3NjIsNTE3NjMsNTE3NjQsNTE3NjUsNTE3''@;'; put 'put ''NjYsNTE3NjcsNTE3NjgsNTE3NjksNTE3NzAsNTE3NzEsNTE3NzIsNTE3NzMsNTE3NzQsNTE3NzUsNTE3NzYsNTE3NzcsNTE3NzgsNTE3NzksNTE3ODAsNTE3ODEsNTE3ODIsMTI1OTMsMTI1OTQsMTI1OTUsMTI1OTYsMTI1OTcsMTI1OTgsMTI1OTksMTI2MDAsMTI2MDEsMTI2MDIsMTI2MDMs''@;'; put 'put ''MTI2MDQsMTI2MDUsMTI2MDYsMTI2MDcsMTI2MDgsMTI2MDksMTI2MTAsMTI2MTEsMTI2MTIsMTI2MTMsMTI2MTQsMTI2MTUsMTI2MTYsMTI2MTcsMTI2MTgsMTI2MTksMTI2MjAsMTI2MjEsMTI2MjIsMTI2MjMsMTI2MjQsMTI2MjUsMTI2MjYsMTI2MjcsMTI2MjgsMTI2MjksMTI2MzAsMTI2''@;'; put 'put ''MzEsMTI2MzIsMTI2MzMsMTI2MzQsMTI2MzUsMTI2MzYsMTI2MzcsMTI2MzgsMTI2MzksMTI2NDAsMTI2NDEsMTI2NDIsMTI2NDMsMTI2NDQsMTI2NDUsMTI2NDYsMTI2NDcsMTI2NDgsMTI2NDksMTI2NTAsMTI2NTEsMTI2NTIsMTI2NTMsMTI2NTQsMTI2NTUsMTI2NTYsMTI2NTcsMTI2NTgs''@;'; put 'put ''MTI2NTksMTI2NjAsMTI2NjEsMTI2NjIsMTI2NjMsMTI2NjQsMTI2NjUsMTI2NjYsMTI2NjcsMTI2NjgsMTI2NjksMTI2NzAsMTI2NzEsMTI2NzIsMTI2NzMsMTI2NzQsMTI2NzUsMTI2NzYsMTI2NzcsMTI2NzgsMTI2NzksMTI2ODAsMTI2ODEsMTI2ODIsMTI2ODMsMTI2ODQsMTI2ODUsMTI2''@;'; put 'put ''ODYsNTE3ODMsNTE3ODQsNTE3ODUsNTE3ODYsNTE3ODcsNTE3OTAsNTE3OTEsNTE3OTMsNTE3OTQsNTE3OTUsNTE3OTcsNTE3OTgsNTE3OTksNTE4MDAsNTE4MDEsNTE4MDIsNTE4MDMsNTE4MDYsNTE4MTAsNTE4MTEsNTE4MTIsNTE4MTMsNTE4MTQsNTE4MTUsNTE4MTcsNTE4MTgsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4MTksNTE4MjAsNTE4MjEsNTE4MjIsNTE4MjMsNTE4MjQsNTE4MjUsNTE4MjYsNTE4MjcsNTE4MjgsNTE4MjksNTE4MzAsNTE4MzEsNTE4MzIsNTE4MzMsNTE4MzQsNTE4MzUsNTE4MzYsNTE4MzgsNTE4MzksNTE4NDAsNTE4NDEsNTE4NDIsNTE4''@;'; put 'put ''NDMsNTE4NDUsNTE4NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4NDcsNTE4NDgsNTE4NDksNTE4NTAsNTE4NTEsNTE4NTIsNTE4NTMsNTE4NTQsNTE4NTUsNTE4NTYsNTE4NTcsNTE4NTgsNTE4NTksNTE4NjAsNTE4NjEsNTE4NjIsNTE4NjMsNTE4NjUsNTE4NjYsNTE4Njcs''@;'; put 'put ''NTE4NjgsNTE4NjksNTE4NzAsNTE4NzEsNTE4NzIsNTE4NzMsNTE4NzQsNTE4NzUsNTE4NzYsNTE4NzcsNTE4NzgsNTE4NzksODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU0NCw4NTQ1LDg1NDYsODU0''@;'; put 'put ''Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MTg4MCw1MTg4MSw1MTg4Miw1MTg4Myw1MTg4NCw1MTg4NSw1MTg4Niw1MTg4Nyw1MTg4OCw1MTg4OSw1MTg5MCw1MTg5MSw1MTg5Miw1MTg5Myw1MTg5NCw1MTg5NSw1MTg5Niw1MTg5Nyw1MTg5OCw1MTg5OSw1MTkwMiw1MTkwMyw1MTkwNSw1MTkwNiw1MTkwNyw1MTkwOSxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MTkxMCw1MTkxMSw1MTkxMiw1MTkxMyw1MTkxNCw1MTkxNSw1MTkxOCw1MTkyMCw1MTkyMiw1MTkyNCw1MTkyNSw1MTkyNiw1MTkyNyw1MTkzMCw1MTkzMSw1MTkzMiw1MTkzMyw1MTkzNCw1MTkzNSw1MTkzNyw1MTkzOCw1MTkzOSw1MTk0MCw1MTk0MSw1''@;'; put 'put ''MTk0Miw1MTk0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk0NCw1MTk0NSw1MTk0Niw1MTk0Nyw1MTk0OSw1MTk1MCw1MTk1MSw1MTk1Miw1MTk1Myw1MTk1NCw1MTk1NSw1MTk1Nyw1MTk1OCw1MTk1OSw1MTk2MCw1MTk2MSw1MTk2Miw1MTk2Myw1MTk2NCw1MTk2NSw1MTk2''@;'; put 'put ''Niw1MTk2Nyw1MTk2OCw1MTk2OSw1MTk3MCw1MTk3MSw1MTk3Miw1MTk3Myw1MTk3NCw1MTk3NSw1MTk3Nyw1MTk3OCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1''@;'; put 'put ''MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsOTQ5MCw5NDg5LDk0OTgsOTQ5Nyw5NDk0LDk0OTMsOTQ4Niw5NDg1LDk1MDIsOTUwMyw5NTA1LDk1MDYsOTUxMCw5NTExLDk1MTMsOTUxNCw5NTE3LDk1MTgsOTUyMSw5NTIyLDk1''@;'; put 'put ''MjUsOTUyNiw5NTI5LDk1MzAsOTUzMyw5NTM0LDk1MzYsOTUzNyw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTc5LDUxOTgwLDUxOTgxLDUxOTgyLDUxOTgzLDUxOTg1LDUxOTg2LDUxOTg3LDUxOTg5LDUxOTkwLDUxOTkxLDUxOTkzLDUxOTk0LDUxOTk1LDUxOTk2LDUxOTk3LDUxOTk4LDUxOTk5LDUyMDAyLDUyMDAzLDUy''@;'; put 'put ''MDA0LDUyMDA1LDUyMDA2LDUyMDA3LDUyMDA4LDUyMDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDEwLDUyMDExLDUyMDEyLDUyMDEzLDUyMDE0LDUyMDE1LDUyMDE2LDUyMDE3LDUyMDE4LDUyMDE5LDUyMDIwLDUyMDIxLDUyMDIyLDUyMDIzLDUyMDI0LDUyMDI1LDUyMDI2''@;'; put 'put ''LDUyMDI3LDUyMDI4LDUyMDI5LDUyMDMwLDUyMDMxLDUyMDMyLDUyMDM0LDUyMDM1LDUyMDM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDM3LDUyMDM4LDUyMDM5LDUyMDQyLDUyMDQzLDUyMDQ1LDUyMDQ2LDUyMDQ3LDUyMDQ5LDUyMDUwLDUyMDUxLDUyMDUyLDUyMDUzLDUy''@;'; put 'put ''MDU0LDUyMDU1LDUyMDU4LDUyMDU5LDUyMDYwLDUyMDYyLDUyMDYzLDUyMDY0LDUyMDY1LDUyMDY2LDUyMDY3LDUyMDY5LDUyMDcwLDUyMDcxLDUyMDcyLDUyMDczLDUyMDc0LDUyMDc1LDUyMDc2LDEzMjA1LDEzMjA2LDEzMjA3LDg0NjcsMTMyMDgsMTMyNTIsMTMyMTksMTMyMjAsMTMyMjEs''@;'; put 'put ''MTMyMjIsMTMyMDksMTMyMTAsMTMyMTEsMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTUsMTMyMTYsMTMyMTcsMTMyMTgsMTMyNTgsMTMxOTcsMTMxOTgsMTMxOTksMTMyNjMsMTMxOTIsMTMxOTMsMTMyNTYsMTMyMjMsMTMyMjQsMTMyMzIsMTMyMzMsMTMyMzQsMTMyMzUsMTMyMzYsMTMyMzcsMTMy''@;'; put 'put ''MzgsMTMyMzksMTMyNDAsMTMyNDEsMTMxODQsMTMxODUsMTMxODYsMTMxODcsMTMxODgsMTMyNDIsMTMyNDMsMTMyNDQsMTMyNDUsMTMyNDYsMTMyNDcsMTMyMDAsMTMyMDEsMTMyMDIsMTMyMDMsMTMyMDQsODQ4NiwxMzI0OCwxMzI0OSwxMzE5NCwxMzE5NSwxMzE5NiwxMzI3MCwxMzI1Mywx''@;'; put 'put ''MzIyOSwxMzIzMCwxMzIzMSwxMzI3NSwxMzIyNSwxMzIyNiwxMzIyNywxMzIyOCwxMzI3NywxMzI2NCwxMzI2NywxMzI1MSwxMzI1NywxMzI3NiwxMzI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MjA3Nyw1MjA3OCw1MjA3OSw1MjA4MCw1MjA4MSw1MjA4Miw1MjA4Myw1MjA4NCw1MjA4NSw1MjA4Niw1MjA4Nyw1MjA5MCw1MjA5MSw1MjA5Miw1MjA5Myw1MjA5NCw1MjA5NSw1MjA5Niw1MjA5Nyw1MjA5OCw1MjA5OSw1MjEwMCw1MjEwMSw1MjEwMiw1MjEwMyw1MjEwNCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MjEwNSw1MjEwNiw1MjEwNyw1MjEwOCw1MjEwOSw1MjExMCw1MjExMSw1MjExMiw1MjExMyw1MjExNCw1MjExNSw1MjExNiw1MjExNyw1MjExOCw1MjExOSw1MjEyMCw1MjEyMSw1MjEyMiw1MjEyMyw1MjEyNSw1MjEyNiw1MjEyNyw1MjEyOCw1MjEyOSw1''@;'; put 'put ''MjEzMCw1MjEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEzMiw1MjEzMyw1MjEzNCw1MjEzNSw1MjEzNiw1MjEzNyw1MjEzOCw1MjEzOSw1MjE0MCw1MjE0MSw1MjE0Miw1MjE0Myw1MjE0NCw1MjE0NSw1MjE0Niw1MjE0Nyw1MjE0OCw1MjE0OSw1MjE1MCw1MjE1MSw1MjE1''@;'; put 'put ''Myw1MjE1NCw1MjE1NSw1MjE1Niw1MjE1Nyw1MjE1OCw1MjE1OSw1MjE2MCw1MjE2MSw1MjE2Miw1MjE2Myw1MjE2NCwxOTgsMjA4LDE3MCwyOTQsbnVsbCwzMDYsbnVsbCwzMTksMzIxLDIxNiwzMzgsMTg2LDIyMiwzNTgsMzMwLG51bGwsMTI4OTYsMTI4OTcsMTI4OTgsMTI4OTksMTI5MDAs''@;'; put 'put ''MTI5MDEsMTI5MDIsMTI5MDMsMTI5MDQsMTI5MDUsMTI5MDYsMTI5MDcsMTI5MDgsMTI5MDksMTI5MTAsMTI5MTEsMTI5MTIsMTI5MTMsMTI5MTQsMTI5MTUsMTI5MTYsMTI5MTcsMTI5MTgsMTI5MTksMTI5MjAsMTI5MjEsMTI5MjIsMTI5MjMsOTQyNCw5NDI1LDk0MjYsOTQyNyw5NDI4LDk0''@;'; put 'put ''MjksOTQzMCw5NDMxLDk0MzIsOTQzMyw5NDM0LDk0MzUsOTQzNiw5NDM3LDk0MzgsOTQzOSw5NDQwLDk0NDEsOTQ0Miw5NDQzLDk0NDQsOTQ0NSw5NDQ2LDk0NDcsOTQ0OCw5NDQ5LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkz''@;'; put 'put ''MjQsOTMyNSw5MzI2LDE4OSw4NTMxLDg1MzIsMTg4LDE5MCw4NTM5LDg1NDAsODU0MSw4NTQyLDUyMTY1LDUyMTY2LDUyMTY3LDUyMTY4LDUyMTY5LDUyMTcwLDUyMTcxLDUyMTcyLDUyMTczLDUyMTc0LDUyMTc1LDUyMTc2LDUyMTc3LDUyMTc4LDUyMTc5LDUyMTgxLDUyMTgyLDUyMTgzLDUy''@;'; put 'put ''MTg0LDUyMTg1LDUyMTg2LDUyMTg3LDUyMTg4LDUyMTg5LDUyMTkwLDUyMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTkyLDUyMTkzLDUyMTk0LDUyMTk1LDUyMTk3LDUyMTk4LDUyMjAwLDUyMjAyLDUyMjAzLDUyMjA0LDUyMjA1LDUyMjA2LDUyMjA3LDUyMjA4LDUyMjA5''@;'; put 'put ''LDUyMjEwLDUyMjExLDUyMjEyLDUyMjEzLDUyMjE0LDUyMjE1LDUyMjE2LDUyMjE3LDUyMjE4LDUyMjE5LDUyMjIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMjIxLDUyMjIyLDUyMjIzLDUyMjI0LDUyMjI1LDUyMjI2LDUyMjI3LDUyMjI4LDUyMjI5LDUyMjMwLDUyMjMxLDUy''@;'; put 'put ''MjMyLDUyMjMzLDUyMjM0LDUyMjM1LDUyMjM4LDUyMjM5LDUyMjQxLDUyMjQyLDUyMjQzLDUyMjQ1LDUyMjQ2LDUyMjQ3LDUyMjQ4LDUyMjQ5LDUyMjUwLDUyMjUxLDUyMjU0LDUyMjU1LDUyMjU2LDUyMjU5LDUyMjYwLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjAsMzIyLDI0OCwz''@;'; put 'put ''MzksMjIzLDI1NCwzNTksMzMxLDMyOSwxMjgwMCwxMjgwMSwxMjgwMiwxMjgwMywxMjgwNCwxMjgwNSwxMjgwNiwxMjgwNywxMjgwOCwxMjgwOSwxMjgxMCwxMjgxMSwxMjgxMiwxMjgxMywxMjgxNCwxMjgxNSwxMjgxNiwxMjgxNywxMjgxOCwxMjgxOSwxMjgyMCwxMjgyMSwxMjgyMiwxMjgy''@;'; put 'put ''MywxMjgyNCwxMjgyNSwxMjgyNiwxMjgyNyw5MzcyLDkzNzMsOTM3NCw5Mzc1LDkzNzYsOTM3Nyw5Mzc4LDkzNzksOTM4MCw5MzgxLDkzODIsOTM4Myw5Mzg0LDkzODUsOTM4Niw5Mzg3LDkzODgsOTM4OSw5MzkwLDkzOTEsOTM5Miw5MzkzLDkzOTQsOTM5NSw5Mzk2LDkzOTcsOTMzMiw5MzMz''@;'; put 'put ''LDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsMTg1LDE3OCwxNzksODMwOCw4MzE5LDgzMjEsODMyMiw4MzIzLDgzMjQsNTIyNjEsNTIyNjIsNTIyNjYsNTIyNjcsNTIyNjksNTIyNzEsNTIyNzMsNTIyNzQsNTIyNzUsNTIy''@;'; put 'put ''NzYsNTIyNzcsNTIyNzgsNTIyNzksNTIyODIsNTIyODcsNTIyODgsNTIyODksNTIyOTAsNTIyOTEsNTIyOTQsNTIyOTUsNTIyOTcsNTIyOTgsNTIyOTksNTIzMDEsNTIzMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMDMsNTIzMDQsNTIzMDUsNTIzMDYsNTIzMDcsNTIzMTAs''@;'; put 'put ''NTIzMTQsNTIzMTUsNTIzMTYsNTIzMTcsNTIzMTgsNTIzMTksNTIzMjEsNTIzMjIsNTIzMjMsNTIzMjUsNTIzMjcsNTIzMjksNTIzMzAsNTIzMzEsNTIzMzIsNTIzMzMsNTIzMzQsNTIzMzUsNTIzMzcsNTIzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMzksNTIzNDAsNTIz''@;'; put 'put ''NDIsNTIzNDMsNTIzNDQsNTIzNDUsNTIzNDYsNTIzNDcsNTIzNDgsNTIzNDksNTIzNTAsNTIzNTEsNTIzNTIsNTIzNTMsNTIzNTQsNTIzNTUsNTIzNTYsNTIzNTcsNTIzNTgsNTIzNTksNTIzNjAsNTIzNjEsNTIzNjIsNTIzNjMsNTIzNjQsNTIzNjUsNTIzNjYsNTIzNjcsNTIzNjgsNTIzNjks''@;'; put 'put ''NTIzNzAsNTIzNzEsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIz''@;'; put 'put ''NzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUs''@;'; put 'put ''MTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0''@;'; put 'put ''MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzcyLDUyMzczLDUyMzc0LDUyMzc1LDUyMzc4LDUyMzc5LDUyMzgxLDUyMzgyLDUyMzgzLDUyMzg1LDUyMzg2LDUyMzg3LDUyMzg4LDUyMzg5LDUyMzkwLDUyMzkx''@;'; put 'put ''LDUyMzk0LDUyMzk4LDUyMzk5LDUyNDAwLDUyNDAxLDUyNDAyLDUyNDAzLDUyNDA2LDUyNDA3LDUyNDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDEwLDUyNDExLDUyNDEzLDUyNDE0LDUyNDE1LDUyNDE2LDUyNDE3LDUyNDE4LDUyNDE5LDUyNDIyLDUyNDI0LDUyNDI2LDUy''@;'; put 'put ''NDI3LDUyNDI4LDUyNDI5LDUyNDMwLDUyNDMxLDUyNDMzLDUyNDM0LDUyNDM1LDUyNDM3LDUyNDM4LDUyNDM5LDUyNDQwLDUyNDQxLDUyNDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDQzLDUyNDQ0LDUyNDQ1LDUyNDQ2LDUyNDQ3LDUyNDQ4LDUyNDQ5LDUyNDUwLDUyNDUx''@;'; put 'put ''LDUyNDUzLDUyNDU0LDUyNDU1LDUyNDU2LDUyNDU3LDUyNDU4LDUyNDU5LDUyNDYxLDUyNDYyLDUyNDYzLDUyNDY1LDUyNDY2LDUyNDY3LDUyNDY4LDUyNDY5LDUyNDcwLDUyNDcxLDUyNDcyLDUyNDczLDUyNDc0LDUyNDc1LDUyNDc2LDUyNDc3LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEy''@;'; put 'put ''NDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgw''@;'; put 'put ''LDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEy''@;'; put 'put ''NTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ3OCw1MjQ3OSw1MjQ4MCw1MjQ4Miw1MjQ4Myw1MjQ4NCw1MjQ4NSw1MjQ4Niw1MjQ4Nyw1MjQ5MCw1MjQ5MSw1MjQ5Myw1MjQ5NCw1MjQ5NSw1MjQ5Nyw1MjQ5OCw1MjQ5OSw1MjUwMCw1MjUwMSw1MjUwMiw1MjUwMyw1MjUw''@;'; put 'put ''Niw1MjUwOCw1MjUxMCw1MjUxMSw1MjUxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjUxMyw1MjUxNCw1MjUxNSw1MjUxNyw1MjUxOCw1MjUxOSw1MjUyMSw1MjUyMiw1MjUyMyw1MjUyNSw1MjUyNiw1MjUyNyw1MjUyOCw1MjUyOSw1MjUzMCw1MjUzMSw1MjUzMiw1MjUzMyw1''@;'; put 'put ''MjUzNCw1MjUzNSw1MjUzNiw1MjUzOCw1MjUzOSw1MjU0MCw1MjU0MSw1MjU0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU0Myw1MjU0NCw1MjU0NSw1MjU0Niw1MjU0Nyw1MjU0OCw1MjU0OSw1MjU1MCw1MjU1MSw1MjU1Miw1MjU1Myw1MjU1NCw1MjU1NSw1MjU1Niw1MjU1''@;'; put 'put ''Nyw1MjU1OCw1MjU1OSw1MjU2MCw1MjU2MSw1MjU2Miw1MjU2Myw1MjU2NCw1MjU2NSw1MjU2Niw1MjU2Nyw1MjU2OCw1MjU2OSw1MjU3MCw1MjU3MSw1MjU3Myw1MjU3NCw1MjU3NSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwx''@;'; put 'put ''MDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwx''@;'; put 'put ''MTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTc3LDUyNTc4LDUyNTc5LDUyNTgxLDUyNTgyLDUyNTgzLDUyNTg0LDUyNTg1LDUyNTg2LDUyNTg3LDUyNTkwLDUyNTkyLDUyNTk0LDUyNTk1LDUy''@;'; put 'put ''NTk2LDUyNTk3LDUyNTk4LDUyNTk5LDUyNjAxLDUyNjAyLDUyNjAzLDUyNjA0LDUyNjA1LDUyNjA2LDUyNjA3LDUyNjA4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjA5LDUyNjEwLDUyNjExLDUyNjEyLDUyNjEzLDUyNjE0LDUyNjE1LDUyNjE3LDUyNjE4LDUyNjE5LDUyNjIw''@;'; put 'put ''LDUyNjIxLDUyNjIyLDUyNjIzLDUyNjI0LDUyNjI1LDUyNjI2LDUyNjI3LDUyNjMwLDUyNjMxLDUyNjMzLDUyNjM0LDUyNjM1LDUyNjM3LDUyNjM4LDUyNjM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjQwLDUyNjQxLDUyNjQyLDUyNjQzLDUyNjQ2LDUyNjQ4LDUyNjUwLDUy''@;'; put 'put ''NjUxLDUyNjUyLDUyNjUzLDUyNjU0LDUyNjU1LDUyNjU3LDUyNjU4LDUyNjU5LDUyNjYwLDUyNjYxLDUyNjYyLDUyNjYzLDUyNjY0LDUyNjY1LDUyNjY2LDUyNjY3LDUyNjY4LDUyNjY5LDUyNjcwLDUyNjcxLDUyNjcyLDUyNjczLDUyNjc0LDUyNjc1LDUyNjc3LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NzgsNTI2NzksNTI2ODAsNTI2ODEsNTI2ODIsNTI2ODMsNTI2ODUs''@;'; put 'put ''NTI2ODYsNTI2ODcsNTI2ODksNTI2OTAsNTI2OTEsNTI2OTIsNTI2OTMsNTI2OTQsNTI2OTUsNTI2OTYsNTI2OTcsNTI2OTgsNTI2OTksNTI3MDAsNTI3MDEsNTI3MDIsNTI3MDMsNTI3MDQsNTI3MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MDYsNTI3MDcsNTI3MDgsNTI3''@;'; put 'put ''MDksNTI3MTAsNTI3MTEsNTI3MTMsNTI3MTQsNTI3MTUsNTI3MTcsNTI3MTgsNTI3MTksNTI3MjEsNTI3MjIsNTI3MjMsNTI3MjQsNTI3MjUsNTI3MjYsNTI3MjcsNTI3MzAsNTI3MzIsNTI3MzQsNTI3MzUsNTI3MzYsNTI3MzcsNTI3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTI3MzksNTI3NDEsNTI3NDIsNTI3NDMsNTI3NDUsNTI3NDYsNTI3NDcsNTI3NDksNTI3NTAsNTI3NTEsNTI3NTIsNTI3NTMsNTI3NTQsNTI3NTUsNTI3NTcsNTI3NTgsNTI3NTksNTI3NjAsNTI3NjIsNTI3NjMsNTI3NjQsNTI3NjUsNTI3NjYsNTI3NjcsNTI3NzAsNTI3NzEsNTI3NzMsNTI3''@;'; put 'put ''NzQsNTI3NzUsNTI3NzcsNTI3NzgsNTI3NzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw1Mjc4MCw1Mjc4MSw1Mjc4Miw1Mjc4Myw1Mjc4Niw1Mjc4OCw1Mjc5MCw1Mjc5MSw1Mjc5Miw1Mjc5Myw1Mjc5NCw1Mjc5NSw1Mjc5Niw1Mjc5Nyw1Mjc5OCw1Mjc5OSw1MjgwMCw1MjgwMSw1MjgwMiw1MjgwMyw1MjgwNCw1MjgwNSw1MjgwNiw1MjgwNyw1MjgwOCw1MjgwOSxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjgxMCw1MjgxMSw1MjgxMiw1MjgxMyw1MjgxNCw1MjgxNSw1MjgxNiw1MjgxNyw1MjgxOCw1MjgxOSw1MjgyMCw1MjgyMSw1MjgyMiw1MjgyMyw1MjgyNiw1MjgyNyw1MjgyOSw1MjgzMCw1MjgzNCw1MjgzNSw1MjgzNiw1MjgzNyw1MjgzOCw1Mjgz''@;'; put 'put ''OSw1Mjg0Miw1Mjg0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg0Niw1Mjg0Nyw1Mjg0OCw1Mjg0OSw1Mjg1MCw1Mjg1MSw1Mjg1NCw1Mjg1NSw1Mjg1Nyw1Mjg1OCw1Mjg1OSw1Mjg2MSw1Mjg2Miw1Mjg2Myw1Mjg2NCw1Mjg2NSw1Mjg2Niw1Mjg2Nyw1Mjg3MCw1Mjg3Miw1''@;'; put 'put ''Mjg3NCw1Mjg3NSw1Mjg3Niw1Mjg3Nyw1Mjg3OCw1Mjg3OSw1Mjg4Miw1Mjg4Myw1Mjg4NSw1Mjg4Niw1Mjg4Nyw1Mjg4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODkwLDUyODkxLDUyODkyLDUyODkzLDUyODk0LDUyODk1LDUyODk4LDUyOTAyLDUyOTAzLDUyOTA0LDUyOTA1LDUyOTA2LDUyOTA3LDUyOTEwLDUyOTExLDUyOTEyLDUyOTEzLDUyOTE0LDUyOTE1LDUyOTE2''@;'; put 'put ''LDUyOTE3LDUyOTE4LDUyOTE5LDUyOTIwLDUyOTIxLDUyOTIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTIzLDUyOTI0LDUyOTI1LDUyOTI2LDUyOTI3LDUyOTI4LDUyOTMwLDUyOTMxLDUyOTMyLDUyOTMzLDUyOTM0LDUyOTM1LDUyOTM2LDUyOTM3LDUyOTM4LDUyOTM5LDUy''@;'; put 'put ''OTQwLDUyOTQxLDUyOTQyLDUyOTQzLDUyOTQ0LDUyOTQ1LDUyOTQ2LDUyOTQ3LDUyOTQ4LDUyOTQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTUwLDUyOTUxLDUyOTUyLDUyOTUzLDUyOTU0LDUyOTU1LDUyOTU2LDUyOTU3LDUyOTU4LDUyOTU5LDUyOTYwLDUyOTYxLDUyOTYy''@;'; put 'put ''LDUyOTYzLDUyOTY2LDUyOTY3LDUyOTY5LDUyOTcwLDUyOTczLDUyOTc0LDUyOTc1LDUyOTc2LDUyOTc3LDUyOTc4LDUyOTc5LDUyOTgyLDUyOTg2LDUyOTg3LDUyOTg4LDUyOTg5LDUyOTkwLDUyOTkxLDQ0MDMyLDQ0MDMzLDQ0MDM2LDQ0MDM5LDQ0MDQwLDQ0MDQxLDQ0MDQyLDQ0MDQ4LDQ0''@;'; put 'put ''MDQ5LDQ0MDUwLDQ0MDUxLDQ0MDUyLDQ0MDUzLDQ0MDU0LDQ0MDU1LDQ0MDU3LDQ0MDU4LDQ0MDU5LDQ0MDYwLDQ0MDYxLDQ0MDY0LDQ0MDY4LDQ0MDc2LDQ0MDc3LDQ0MDc5LDQ0MDgwLDQ0MDgxLDQ0MDg4LDQ0MDg5LDQ0MDkyLDQ0MDk2LDQ0MTA3LDQ0MTA5LDQ0MTE2LDQ0MTIwLDQ0MTI0''@;'; put 'put ''LDQ0MTQ0LDQ0MTQ1LDQ0MTQ4LDQ0MTUxLDQ0MTUyLDQ0MTU0LDQ0MTYwLDQ0MTYxLDQ0MTYzLDQ0MTY0LDQ0MTY1LDQ0MTY2LDQ0MTY5LDQ0MTcwLDQ0MTcxLDQ0MTcyLDQ0MTc2LDQ0MTgwLDQ0MTg4LDQ0MTg5LDQ0MTkxLDQ0MTkyLDQ0MTkzLDQ0MjAwLDQ0MjAxLDQ0MjAyLDQ0MjA0LDQ0''@;'; put 'put ''MjA3LDQ0MjA4LDQ0MjE2LDQ0MjE3LDQ0MjE5LDQ0MjIwLDQ0MjIxLDQ0MjI1LDQ0MjI4LDQ0MjMyLDQ0MjM2LDQ0MjQ1LDQ0MjQ3LDQ0MjU2LDQ0MjU3LDQ0MjYwLDQ0MjYzLDQ0MjY0LDQ0MjY2LDQ0MjY4LDQ0MjcxLDQ0MjcyLDQ0MjczLDQ0Mjc1LDQ0Mjc3LDQ0Mjc4LDQ0Mjg0LDQ0Mjg1''@;'; put 'put ''LDQ0Mjg4LDQ0MjkyLDQ0Mjk0LDUyOTk0LDUyOTk1LDUyOTk3LDUyOTk4LDUyOTk5LDUzMDAxLDUzMDAyLDUzMDAzLDUzMDA0LDUzMDA1LDUzMDA2LDUzMDA3LDUzMDEwLDUzMDEyLDUzMDE0LDUzMDE1LDUzMDE2LDUzMDE3LDUzMDE4LDUzMDE5LDUzMDIxLDUzMDIyLDUzMDIzLDUzMDI1LDUz''@;'; put 'put ''MDI2LDUzMDI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDI5LDUzMDMwLDUzMDMxLDUzMDMyLDUzMDMzLDUzMDM0LDUzMDM1LDUzMDM4LDUzMDQyLDUzMDQzLDUzMDQ0LDUzMDQ1LDUzMDQ2LDUzMDQ3LDUzMDQ5LDUzMDUwLDUzMDUxLDUzMDUyLDUzMDUzLDUzMDU0LDUzMDU1''@;'; put 'put ''LDUzMDU2LDUzMDU3LDUzMDU4LDUzMDU5LDUzMDYwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDYxLDUzMDYyLDUzMDYzLDUzMDY0LDUzMDY1LDUzMDY2LDUzMDY3LDUzMDY4LDUzMDY5LDUzMDcwLDUzMDcxLDUzMDcyLDUzMDczLDUzMDc0LDUzMDc1LDUzMDc4LDUzMDc5LDUz''@;'; put 'put ''MDgxLDUzMDgyLDUzMDgzLDUzMDg1LDUzMDg2LDUzMDg3LDUzMDg4LDUzMDg5LDUzMDkwLDUzMDkxLDUzMDk0LDUzMDk2LDUzMDk4LDUzMDk5LDUzMTAwLDQ0MzAwLDQ0MzAxLDQ0MzAzLDQ0MzA1LDQ0MzEyLDQ0MzE2LDQ0MzIwLDQ0MzI5LDQ0MzMyLDQ0MzMzLDQ0MzQwLDQ0MzQxLDQ0MzQ0''@;'; put 'put ''LDQ0MzQ4LDQ0MzU2LDQ0MzU3LDQ0MzU5LDQ0MzYxLDQ0MzY4LDQ0MzcyLDQ0Mzc2LDQ0Mzg1LDQ0Mzg3LDQ0Mzk2LDQ0Mzk3LDQ0NDAwLDQ0NDAzLDQ0NDA0LDQ0NDA1LDQ0NDA2LDQ0NDExLDQ0NDEyLDQ0NDEzLDQ0NDE1LDQ0NDE3LDQ0NDE4LDQ0NDI0LDQ0NDI1LDQ0NDI4LDQ0NDMyLDQ0''@;'; put 'put ''NDQ0LDQ0NDQ1LDQ0NDUyLDQ0NDcxLDQ0NDgwLDQ0NDgxLDQ0NDg0LDQ0NDg4LDQ0NDk2LDQ0NDk3LDQ0NDk5LDQ0NTA4LDQ0NTEyLDQ0NTE2LDQ0NTM2LDQ0NTM3LDQ0NTQwLDQ0NTQzLDQ0NTQ0LDQ0NTQ1LDQ0NTUyLDQ0NTUzLDQ0NTU1LDQ0NTU3LDQ0NTY0LDQ0NTkyLDQ0NTkzLDQ0NTk2''@;'; put 'put ''LDQ0NTk5LDQ0NjAwLDQ0NjAyLDQ0NjA4LDQ0NjA5LDQ0NjExLDQ0NjEzLDQ0NjE0LDQ0NjE4LDQ0NjIwLDQ0NjIxLDQ0NjIyLDQ0NjI0LDQ0NjI4LDQ0NjMwLDQ0NjM2LDQ0NjM3LDQ0NjM5LDQ0NjQwLDQ0NjQxLDQ0NjQ1LDQ0NjQ4LDQ0NjQ5LDQ0NjUyLDQ0NjU2LDQ0NjY0LDUzMTAxLDUz''@;'; put 'put ''MTAyLDUzMTAzLDUzMTA2LDUzMTA3LDUzMTA5LDUzMTEwLDUzMTExLDUzMTEzLDUzMTE0LDUzMTE1LDUzMTE2LDUzMTE3LDUzMTE4LDUzMTE5LDUzMTIxLDUzMTIyLDUzMTIzLDUzMTI0LDUzMTI2LDUzMTI3LDUzMTI4LDUzMTI5LDUzMTMwLDUzMTMxLDUzMTMzLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDUzMTM0LDUzMTM1LDUzMTM2LDUzMTM3LDUzMTM4LDUzMTM5LDUzMTQwLDUzMTQxLDUzMTQyLDUzMTQzLDUzMTQ0LDUzMTQ1LDUzMTQ2LDUzMTQ3LDUzMTQ4LDUzMTQ5LDUzMTUwLDUzMTUxLDUzMTUyLDUzMTU0LDUzMTU1LDUzMTU2LDUzMTU3LDUzMTU4LDUzMTU5LDUz''@;'; put 'put ''MTYxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTYyLDUzMTYzLDUzMTY0LDUzMTY1LDUzMTY2LDUzMTY3LDUzMTY5LDUzMTcwLDUzMTcxLDUzMTcyLDUzMTczLDUzMTc0LDUzMTc1LDUzMTc2LDUzMTc3LDUzMTc4LDUzMTc5LDUzMTgwLDUzMTgxLDUzMTgyLDUzMTgzLDUzMTg0''@;'; put 'put ''LDUzMTg1LDUzMTg2LDUzMTg3LDUzMTg5LDUzMTkwLDUzMTkxLDUzMTkyLDUzMTkzLDUzMTk0LDUzMTk1LDQ0NjY1LDQ0NjY3LDQ0NjY4LDQ0NjY5LDQ0Njc2LDQ0Njc3LDQ0Njg0LDQ0NzMyLDQ0NzMzLDQ0NzM0LDQ0NzM2LDQ0NzQwLDQ0NzQ4LDQ0NzQ5LDQ0NzUxLDQ0NzUyLDQ0NzUzLDQ0''@;'; put 'put ''NzYwLDQ0NzYxLDQ0NzY0LDQ0Nzc2LDQ0Nzc5LDQ0NzgxLDQ0Nzg4LDQ0NzkyLDQ0Nzk2LDQ0ODA3LDQ0ODA4LDQ0ODEzLDQ0ODE2LDQ0ODQ0LDQ0ODQ1LDQ0ODQ4LDQ0ODUwLDQ0ODUyLDQ0ODYwLDQ0ODYxLDQ0ODYzLDQ0ODY1LDQ0ODY2LDQ0ODY3LDQ0ODcyLDQ0ODczLDQ0ODgwLDQ0ODky''@;'; put 'put ''LDQ0ODkzLDQ0OTAwLDQ0OTAxLDQ0OTIxLDQ0OTI4LDQ0OTMyLDQ0OTM2LDQ0OTQ0LDQ0OTQ1LDQ0OTQ5LDQ0OTU2LDQ0OTg0LDQ0OTg1LDQ0OTg4LDQ0OTkyLDQ0OTk5LDQ1ZTMsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUw''@;'; put 'put ''NDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEs''@;'; put 'put ''NTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMy''@;'; put 'put ''MjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMy''@;'; put 'put ''ODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjks''@;'; put 'put ''NDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUz''@;'; put 'put ''MzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYs''@;'; put 'put ''NDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMz''@;'; put 'put ''MDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcs''@;'; put 'put ''NTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMz''@;'; put 'put ''NjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUs''@;'; put 'put ''NTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2''@;'; put 'put ''ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcs''@;'; put 'put ''NDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4''@;'; put 'put ''NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEs''@;'; put 'put ''NTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0''@;'; put 'put ''NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0Nzgs''@;'; put 'put ''NTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5''@;'; put 'put ''MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEs''@;'; put 'put ''NDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYy''@;'; put 'put ''NDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMs''@;'; put 'put ''NDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1''@;'; put 'put ''MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEs''@;'; put 'put ''NTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1''@;'; put 'put ''ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMs''@;'; put 'put ''NDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1''@;'; put 'put ''NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgs''@;'; put 'put ''NDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5''@;'; put 'put ''OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2Mzks''@;'; put 'put ''NTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2''@;'; put 'put ''NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUs''@;'; put 'put ''NTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDdlMyw0NzAwMSw0NzAwNCw0NzAwOCw0NzAxNiw0NzAxNyw0NzAxOSw0NzAyMCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0''@;'; put 'put ''Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEwNCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0NzE0MCw0NzE0MSw0NzE0NCw0NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0''@;'; put 'put ''NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIyNCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4OCw0NzI5Niw0NzI5Nyw0NzI5OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMy''@;'; put 'put ''NSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0NzQ0MSw0NzQ0OCw0NzQ0OSw0NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1''@;'; put 'put ''MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1MzcyNyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1MzczMyw1MzczNCw1MzczNSw1MzczNiw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1Mzc1OCw1Mzc1OSw1Mzc2MCw1Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1''@;'; put 'put ''Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4Myw1Mzc4NCw1Mzc4NSw1Mzc4Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5''@;'; put 'put ''MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1MzgwMCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0NzQ5Nyw0NzQ5OCw0NzUwMSw0NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0''@;'; put 'put ''NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4OCw0NzU4OSw0NzU5Miw0NzU5Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYw''@;'; put 'put ''OSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0NzcwOCw0NzcxNiw0NzcxNyw0NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0''@;'; put 'put ''NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0NzgwMCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0NzgzMiw0NzgzMyw0Nzg2OCw1MzgwMiw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1Mzgx''@;'; put 'put ''MCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1MzgyMiw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1MzgzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1''@;'; put 'put ''MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1OSw1Mzg2MSw1Mzg2Miw1Mzg2Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1Mzg4Myw1Mzg4NCw1Mzg4NSw1Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1''@;'; put 'put ''Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0NzkwNCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0NzkyOCw0NzkzMSw0NzkzMiw0NzkzMyw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0''@;'; put 'put ''NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAwOCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0ODA4MCw0ODA4Myw0ODEyMCw0ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0''@;'; put 'put ''ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2Nyw0ODE2OSw0ODE3Myw0ODE3Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5''@;'; put 'put ''Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1MzkwMyw1MzkwNiw1MzkwNyw1MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1''@;'; put 'put ''MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1MzkzMCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzkzNCw1MzkzNSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0''@;'; put 'put ''MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1''@;'; put 'put ''Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5Nyw1Mzk5OCw1Mzk5OSw1NDAwMiw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAw''@;'; put 'put ''OSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMwNCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0ODMzNiw0ODMzNyw0ODM0MSw0ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0''@;'; put 'put ''ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUxMiw0ODUxMyw0ODUxNiw0ODUxOSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUy''@;'; put 'put ''OSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0ODY1Miw0ODY1Myw0ODY1Niw0ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0''@;'; put 'put ''ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAxMSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAyMCw1NDAyMiw1NDAyMyw1NDAyNCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAz''@;'; put 'put ''Myw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1NDA1OCw1NDA1OSw1NDA2MSw1NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1''@;'; put 'put ''NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA5MCw1NDA5MSw1NDA5Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5''@;'; put 'put ''Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEwNiw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1NDExNyw1NDExOCw1NDExOSw1NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0''@;'; put 'put ''ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1Miw0ODg1NSw0ODg1Niw0ODg2NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5''@;'; put 'put ''Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0OTEwNCw0OTEwOCw0OTExNiw0OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0''@;'; put 'put ''OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMyNSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMzNCw0OTM0MCw0OTM0MSw0OTM0Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1''@;'; put 'put ''Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEyMiw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1NDEzMyw1NDEzNCw1NDEzNSw1NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1''@;'; put 'put ''NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2NCw1NDE2NSw1NDE2Niw1NDE2Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3''@;'; put 'put ''NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1NDE5NSw1NDE5Nyw1NDE5OCw1NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1''@;'; put 'put ''NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIyMyw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIzMCw0OTM4MSw0OTM4NCw0OTM4OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQw''@;'; put 'put ''OCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0OTQ2NCw0OTQ2NSw0OTQ2OCw0OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0''@;'; put 'put ''OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1OCw0OTU2NCw0OTU2NSw0OTU2Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4''@;'; put 'put ''MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYzMiw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0OTY3Nyw0OTY3OSw0OTY4MSw0OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0''@;'; put 'put ''OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0OSw1NDI1MCw1NDI1MSw1NDI1NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2''@;'; put 'put ''MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1NDI4MSw1NDI4Miw1NDI4Myw1NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1''@;'; put 'put ''NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMwNCw1NDMwNSw1NDMwNiw1NDMwNyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMx''@;'; put 'put ''Miw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMyMSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0OTczNiw0OTc0NCw0OTc0NSw0OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0''@;'; put 'put ''OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgyOCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0NSw0OTg0Nyw0OTg0OSw0OTg4NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5''@;'; put 'put ''OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkxNiw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0OTk1Niw0OTk1Nyw0OTk2MCw0OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1''@;'; put 'put ''MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2NCw1MDE2NSw1MDE2OCw1MDE4NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMy''@;'; put 'put ''OCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMzOCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1NDM1MCw1NDM1MSw1NDM1Miw1NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3NSw1NDM3Niw1NDM3Nyw1NDM3OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4''@;'; put 'put ''NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1NDQwNiw1NDQwNyw1NDQxMCw1NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1''@;'; put 'put ''NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIzNyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5Miw1MDI5Myw1MDI5Nyw1MDMwNCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQw''@;'; put 'put ''OSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1MDQ5Myw1MDUwMCw1MDUwMSw1MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1''@;'; put 'put ''MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1Nyw1MDU2MCw1MDU2NCw1MDU2Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4''@;'; put 'put ''MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYxNyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1MDYzNCw1MDYzNiw1MDYzOCw1NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1''@;'; put 'put ''NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1NSw1NDQ1NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1''@;'; put 'put ''OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1NDQ3OSw1NDQ4MSw1NDQ4Miw1NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUwNiw1NDUwNyw1NDUwOSw1NDUxMCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUx''@;'; put 'put ''Niw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1MDY3OCw1MDY3OSw1MDY4NCw1MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1''@;'; put 'put ''MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDczMiw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0MSw1MDc0Myw1MDc0NSw1MDc0Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2''@;'; put 'put ''OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1MDgzNyw1MDg0MCw1MDg0NCw1MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1''@;'; put 'put ''MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkwOCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUyNyw1NDUyOCw1NDUyOSw1NDUzMCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUz''@;'; put 'put ''Nyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU1OCw1NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1''@;'; put 'put ''NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4''@;'; put 'put ''Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1NDYxNCw1NDYxNSw1NDYxOCw1NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1''@;'; put 'put ''NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4NCw1MDk5Miw1MDk5Myw1MDk5NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAw''@;'; put 'put ''OCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAyOCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1MTA2NCw1MTA2OCw1MTA2OSw1MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1''@;'; put 'put ''MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEwNyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEyMCw1MTEyNCw1MTEzMiw1MTEzMyw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0''@;'; put 'put ''NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIwMCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1NDYzOSw1NDY0MCw1NDY0MSw1NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1''@;'; put 'put ''NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3MCw1NDY3MSw1NDY3Myw1NDY3NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3''@;'; put 'put ''OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY5Niw1NDY5Nyw1NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1''@;'; put 'put ''NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcxNiw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcyMiw1NDcyMyw1NDcyNCw1NDcyNSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIx''@;'; put 'put ''OSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1MTMxMyw1MTMxNiw1MTMyMCw1MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1''@;'; put 'put ''MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQwMCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQyNCw1MTQyNSw1MTQyOCw1MTQ0NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2''@;'; put 'put ''MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUzNiw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1MTU5Miw1MTU5Myw1MTU5Niw1MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1''@;'; put 'put ''MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDczNSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0Myw1NDc0Niw1NDc0OCw1NDc1MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1''@;'; put 'put ''NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1NDc3OCw1NDc3OSw1NDc4MCw1NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1''@;'; put 'put ''NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgwOSw1NDgxMCw1NDgxMSw1NDgxMyw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgx''@;'; put 'put ''OSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgzMCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1NDg0Myw1MTY2OSw1MTY3MCw1MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1''@;'; put 'put ''MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcyMSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1Myw1MTc4OCw1MTc4OSw1MTc5Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgw''@;'; put 'put ''OCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkwOCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1MTk3Niw1MTk4NCw1MTk4OCw1MTk5Miw1MmUzLDUyMDAxLDUyMDMzLDUyMDQwLDUy''@;'; put 'put ''MDQxLDUyMDQ0LDUyMDQ4LDUyMDU2LDUyMDU3LDUyMDYxLDUyMDY4LDUyMDg4LDUyMDg5LDUyMTI0LDUyMTUyLDUyMTgwLDUyMTk2LDUyMTk5LDUyMjAxLDUyMjM2LDUyMjM3LDUyMjQwLDUyMjQ0LDUyMjUyLDUyMjUzLDUyMjU3LDUyMjU4LDUyMjYzLDUyMjY0LDUyMjY1LDUyMjY4LDUyMjcw''@;'; put 'put ''LDUyMjcyLDUyMjgwLDUyMjgxLDUyMjgzLDU0ODQ1LDU0ODQ2LDU0ODQ3LDU0ODQ5LDU0ODUwLDU0ODUxLDU0ODUyLDU0ODU0LDU0ODU1LDU0ODU4LDU0ODYwLDU0ODYyLDU0ODYzLDU0ODY0LDU0ODY2LDU0ODY3LDU0ODcwLDU0ODcxLDU0ODczLDU0ODc0LDU0ODc1LDU0ODc3LDU0ODc4LDU0''@;'; put 'put ''ODc5LDU0ODgwLDU0ODgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODgyLDU0ODgzLDU0ODg0LDU0ODg1LDU0ODg2LDU0ODg4LDU0ODkwLDU0ODkxLDU0ODkyLDU0ODkzLDU0ODk0LDU0ODk1LDU0ODk4LDU0ODk5LDU0OTAxLDU0OTAyLDU0OTAzLDU0OTA0LDU0OTA1LDU0OTA2''@;'; put 'put ''LDU0OTA3LDU0OTA4LDU0OTA5LDU0OTEwLDU0OTExLDU0OTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTEzLDU0OTE0LDU0OTE2LDU0OTE4LDU0OTE5LDU0OTIwLDU0OTIxLDU0OTIyLDU0OTIzLDU0OTI2LDU0OTI3LDU0OTI5LDU0OTMwLDU0OTMxLDU0OTMzLDU0OTM0LDU0''@;'; put 'put ''OTM1LDU0OTM2LDU0OTM3LDU0OTM4LDU0OTM5LDU0OTQwLDU0OTQyLDU0OTQ0LDU0OTQ2LDU0OTQ3LDU0OTQ4LDU0OTQ5LDU0OTUwLDU0OTUxLDU0OTUzLDU0OTU0LDUyMjg0LDUyMjg1LDUyMjg2LDUyMjkyLDUyMjkzLDUyMjk2LDUyMzAwLDUyMzA4LDUyMzA5LDUyMzExLDUyMzEyLDUyMzEz''@;'; put 'put ''LDUyMzIwLDUyMzI0LDUyMzI2LDUyMzI4LDUyMzM2LDUyMzQxLDUyMzc2LDUyMzc3LDUyMzgwLDUyMzg0LDUyMzkyLDUyMzkzLDUyMzk1LDUyMzk2LDUyMzk3LDUyNDA0LDUyNDA1LDUyNDA4LDUyNDEyLDUyNDIwLDUyNDIxLDUyNDIzLDUyNDI1LDUyNDMyLDUyNDM2LDUyNDUyLDUyNDYwLDUy''@;'; put 'put ''NDY0LDUyNDgxLDUyNDg4LDUyNDg5LDUyNDkyLDUyNDk2LDUyNTA0LDUyNTA1LDUyNTA3LDUyNTA5LDUyNTE2LDUyNTIwLDUyNTI0LDUyNTM3LDUyNTcyLDUyNTc2LDUyNTgwLDUyNTg4LDUyNTg5LDUyNTkxLDUyNTkzLDUyNjAwLDUyNjE2LDUyNjI4LDUyNjI5LDUyNjMyLDUyNjM2LDUyNjQ0''@;'; put 'put ''LDUyNjQ1LDUyNjQ3LDUyNjQ5LDUyNjU2LDUyNjc2LDUyNjg0LDUyNjg4LDUyNzEyLDUyNzE2LDUyNzIwLDUyNzI4LDUyNzI5LDUyNzMxLDUyNzMzLDUyNzQwLDUyNzQ0LDUyNzQ4LDUyNzU2LDUyNzYxLDUyNzY4LDUyNzY5LDUyNzcyLDUyNzc2LDUyNzg0LDUyNzg1LDUyNzg3LDUyNzg5LDU0''@;'; put 'put ''OTU1LDU0OTU3LDU0OTU4LDU0OTU5LDU0OTYxLDU0OTYyLDU0OTYzLDU0OTY0LDU0OTY1LDU0OTY2LDU0OTY3LDU0OTY4LDU0OTcwLDU0OTcyLDU0OTczLDU0OTc0LDU0OTc1LDU0OTc2LDU0OTc3LDU0OTc4LDU0OTc5LDU0OTgyLDU0OTgzLDU0OTg1LDU0OTg2LDU0OTg3LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDU0OTg5LDU0OTkwLDU0OTkxLDU0OTkyLDU0OTk0LDU0OTk1LDU0OTk3LDU0OTk4LDU1ZTMsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUw''@;'; put 'put ''MjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgs''@;'; put 'put ''NTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4''@;'; put 'put ''NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTNlMyw1''@;'; put 'put ''MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5NSw1MzA5Nyw1MzEwNCw1MzEwNSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEz''@;'; put 'put ''Miw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIzMiw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1MzMwMSw1MzMwNCw1MzMwOCw1NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1''@;'; put 'put ''NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5NSw1NTA5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5''@;'; put 'put ''OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTExMCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1NTEzMCw1NTEzMSw1NTEzMiw1NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2MCw1NTE2MSw1NTE2Miw1NTE2Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3''@;'; put 'put ''MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMxOSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1MzM3Myw1MzM3Nyw1MzQxMiw1MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1''@;'; put 'put ''MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4OCw1MzQ4OSw1MzQ5Niw1MzUxNyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2''@;'; put 'put ''Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1MzY2NSw1MzY2OCw1MzY3Miw1MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1''@;'; put 'put ''MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1MzgyMSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4Miw1NTE4Myw1NTE4NSw1NTE4Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5''@;'; put 'put ''MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1Mzg4OCw1Mzg4OSw1Mzg5Miw1Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1''@;'; put 'put ''MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NGUzLDU0MDAxLDU0MDA0LDU0MDA4LDU0MDE2LDU0MDE3LDU0MDE5LDU0MDIxLDU0MDI4LDU0MDI5''@;'; put 'put ''LDU0MDMwLDU0MDMyLDU0MDM2LDU0MDM4LDU0MDQ0LDU0MDQ1LDU0MDQ3LDU0MDQ4LDU0MDQ5LDU0MDUzLDU0MDU2LDU0MDU3LDU0MDYwLDU0MDY0LDU0MDcyLDU0MDczLDU0MDc1LDU0MDc2LDU0MDc3LDU0MDg0LDU0MDg1LDU0MTQwLDU0MTQxLDU0MTQ0LDU0MTQ4LDU0MTU2LDU0MTU3LDU0''@;'; put 'put ''MTU5LDU0MTYwLDU0MTYxLDU0MTY4LDU0MTY5LDU0MTcyLDU0MTc2LDU0MTg0LDU0MTg1LDU0MTg3LDU0MTg5LDU0MTk2LDU0MjAwLDU0MjA0LDU0MjEyLDU0MjEzLDU0MjE2LDU0MjE3LDU0MjI0LDU0MjMyLDU0MjQxLDU0MjQzLDU0MjUyLDU0MjUzLDU0MjU2LDU0MjYwLDU0MjY4LDU0MjY5''@;'; put 'put ''LDU0MjcxLDU0MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0''@;'; put 'put ''MjgwLDU0MzAxLDU0MzM2LDU0MzQwLDU0MzY0LDU0MzY4LDU0MzcyLDU0MzgxLDU0MzgzLDU0MzkyLDU0MzkzLDU0Mzk2LDU0Mzk5LDU0NDAwLDU0NDAyLDU0NDA4LDU0NDA5LDU0NDExLDU0NDEzLDU0NDIwLDU0NDQxLDU0NDc2LDU0NDgwLDU0NDg0LDU0NDkyLDU0NDk1LDU0NTA0LDU0NTA4''@;'; put 'put ''LDU0NTEyLDU0NTIwLDU0NTIzLDU0NTI1LDU0NTMyLDU0NTM2LDU0NTQwLDU0NTQ4LDU0NTQ5LDU0NTUxLDU0NTg4LDU0NTg5LDU0NTkyLDU0NTk2LDU0NjA0LDU0NjA1LDU0NjA3LDU0NjA5LDU0NjE2LDU0NjE3LDU0NjIwLDU0NjI0LDU0NjI5LDU0NjMyLDU0NjMzLDU0NjM1LDU0NjM3LDU0''@;'; put 'put ''NjQ0LDU0NjQ1LDU0NjQ4LDU0NjUyLDU0NjYwLDU0NjYxLDU0NjYzLDU0NjY0LDU0NjY1LDU0NjcyLDU0NjkzLDU0NzI4LDU0NzI5LDU0NzMyLDU0NzM2LDU0NzM4LDU0NzQ0LDU0NzQ1LDU0NzQ3LDU0NzQ5LDU0NzU2LDU0NzU3LDU0NzYwLDU0NzY0LDU0NzcyLDU0NzczLDU0Nzc1LDU0Nzc3''@;'; put 'put ''LDU0Nzg0LDU0Nzg1LDU0Nzg4LDU0NzkyLDU0ODAwLDU0ODAxLDU0ODAzLDU0ODA0LDU0ODA1LDU0ODEyLDU0ODE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODIwLDU0ODI5LDU0ODQwLDU0ODQxLDU0ODQ0LDU0ODQ4LDU0ODUzLDU0ODU2LDU0ODU3LDU0ODU5LDU0ODYxLDU0ODY1LDU0ODY4LDU0ODY5LDU0ODcyLDU0ODc2LDU0ODg3LDU0ODg5LDU0ODk2''@;'; put 'put ''LDU0ODk3LDU0OTAwLDU0OTE1LDU0OTE3LDU0OTI0LDU0OTI1LDU0OTI4LDU0OTMyLDU0OTQxLDU0OTQzLDU0OTQ1LDU0OTUyLDU0OTU2LDU0OTYwLDU0OTY5LDU0OTcxLDU0OTgwLDU0OTgxLDU0OTg0LDU0OTg4LDU0OTkzLDU0OTk2LDU0OTk5LDU1MDAxLDU1MDA4LDU1MDEyLDU1MDE2LDU1''@;'; put 'put ''MDI0LDU1MDI5LDU1MDM2LDU1MDM3LDU1MDQwLDU1MDQ0LDU1MDU3LDU1MDY0LDU1MDY1LDU1MDY4LDU1MDcyLDU1MDgwLDU1MDgxLDU1MDgzLDU1MDg1LDU1MDkyLDU1MDkzLDU1MDk2LDU1MTAwLDU1MTA4LDU1MTExLDU1MTEzLDU1MTIwLDU1MTIxLDU1MTI0LDU1MTI2LDU1MTI3LDU1MTI4''@;'; put 'put ''LDU1MTI5LDU1MTM2LDU1MTM3LDU1MTM5LDU1MTQxLDU1MTQ1LDU1MTQ4LDU1MTUyLDU1MTU2LDU1MTY0LDU1MTY1LDU1MTY5LDU1MTc2LDU1MTc3LDU1MTgwLDU1MTg0LDU1MTkyLDU1MTkzLDU1MTk1LDU1MTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAyODUsMjAzMzksMjA1NTEsMjA3MjksMjExNTIsMjE0ODcsMjE2MjEsMjE3MzMsMjIwMjUsMjMyMzMsMjM0NzgsMjYyNDcsMjY1NTAsMjY1NTEsMjY2MDcsMjc0NjgsMjk2''@;'; put 'put ''MzQsMzAxNDYsMzEyOTIsMzM0OTksMzM1NDAsMzQ5MDMsMzQ5NTIsMzUzODIsMzYwNDAsMzYzMDMsMzY2MDMsMzY4MzgsMzkzODEsMjEwNTEsMjEzNjQsMjE1MDgsMjQ2ODIsMjQ5MzIsMjc1ODAsMjk2NDcsMzMwNTAsMzUyNTgsMzUyODIsMzgzMDcsMjAzNTUsMjEwMDIsMjI3MTgsMjI5MDQs''@;'; put 'put ''MjMwMTQsMjQxNzgsMjQxODUsMjUwMzEsMjU1MzYsMjY0MzgsMjY2MDQsMjY3NTEsMjg1NjcsMzAyODYsMzA0NzUsMzA5NjUsMzEyNDAsMzE0ODcsMzE3NzcsMzI5MjUsMzMzOTAsMzMzOTMsMzU1NjMsMzgyOTEsMjAwNzUsMjE5MTcsMjYzNTksMjgyMTIsMzA4ODMsMzE0NjksMzM4ODMsMzUw''@;'; put 'put ''ODgsMzQ2MzgsMzg4MjQsMjEyMDgsMjIzNTAsMjI1NzAsMjM4ODQsMjQ4NjMsMjUwMjIsMjUxMjEsMjU5NTQsMjY1NzcsMjcyMDQsMjgxODcsMjk5NzYsMzAxMzEsMzA0MzUsMzA2NDAsMzIwNTgsMzcwMzksMzc5NjksMzc5NzAsNDA4NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEyODMsMjM3MjQsMzAwMDIsMzI5ODcsMzc0NDAsMzgyOTYsMjEwODMsMjI1''@;'; put 'put ''MzYsMjMwMDQsMjM3MTMsMjM4MzEsMjQyNDcsMjQzNzgsMjQzOTQsMjQ5NTEsMjc3NDMsMzAwNzQsMzAwODYsMzE5NjgsMzIxMTUsMzIxNzcsMzI2NTIsMzMxMDgsMzMzMTMsMzQxOTMsMzUxMzcsMzU2MTEsMzc2MjgsMzg0NzcsNDAwMDcsMjAxNzEsMjAyMTUsMjA0OTEsMjA5NzcsMjI2MDcs''@;'; put 'put ''MjQ4ODcsMjQ4OTQsMjQ5MzYsMjU5MTMsMjcxMTQsMjg0MzMsMzAxMTcsMzAzNDIsMzA0MjIsMzE2MjMsMzM0NDUsMzM5OTUsNjM3NDQsMzc3OTksMzgyODMsMjE4ODgsMjM0NTgsMjIzNTMsNjM3NDUsMzE5MjMsMzI2OTcsMzczMDEsMjA1MjAsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjU0''@;'; put 'put ''NTQsMjU4MTgsMjU4MzEsMjgxOTIsMjg4NDQsMzEwNjcsMzYzMTcsMzYzODIsNjM3NDYsMzY5ODksMzc0NDUsMzc2MjQsMjAwOTQsMjAyMTQsMjA1ODEsMjQwNjIsMjQzMTQsMjQ4MzgsMjY5NjcsMzMxMzcsMzQzODgsMzY0MjMsMzc3NDksMzk0NjcsMjAwNjIsMjA2MjUsMjY0ODAsMjY2ODgs''@;'; put 'put ''MjA3NDUsMjExMzMsMjExMzgsMjcyOTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsMzA2NTIsMzczOTIsNDA2NjAsMjExNjMsMjQ2MjMsMzY4NTAsMjA1NTIsMjUwMDEsMjU1ODEsMjU4MDIsMjY2ODQsMjcyNjgsMjg2MDgsMzMxNjAsMzUyMzMsMzg1NDgsMjI1MzMsMjkzMDksMjkzNTYsMjk5NTYsMzIxMjEsMzIzNjUsMzI5MzcsMzUyMTEsMzU3MDAsMzY5NjMs''@;'; put 'put ''NDAyNzMsMjUyMjUsMjc3NzAsMjg1MDAsMzIwODAsMzI1NzAsMzUzNjMsMjA4NjAsMjQ5MDYsMzE2NDUsMzU2MDksMzc0NjMsMzc3NzIsMjAxNDAsMjA0MzUsMjA1MTAsMjA2NzAsMjA3NDIsMjExODUsMjExOTcsMjEzNzUsMjIzODQsMjI2NTksMjQyMTgsMjQ0NjUsMjQ5NTAsMjUwMDQsMjU4''@;'; put 'put ''MDYsMjU5NjQsMjYyMjMsMjYyOTksMjYzNTYsMjY3NzUsMjgwMzksMjg4MDUsMjg5MTMsMjk4NTUsMjk4NjEsMjk4OTgsMzAxNjksMzA4MjgsMzA5NTYsMzE0NTUsMzE0NzgsMzIwNjksMzIxNDcsMzI3ODksMzI4MzEsMzMwNTEsMzM2ODYsMzU2ODYsMzY2MjksMzY4ODUsMzc4NTcsMzg5MTUs''@;'; put 'put ''Mzg5NjgsMzk1MTQsMzk5MTIsMjA0MTgsMjE4NDMsMjI1ODYsMjI4NjUsMjMzOTUsMjM2MjIsMjQ3NjAsMjUxMDYsMjY2OTAsMjY4MDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NTYsMjgzMzAsMzAwMjgsMzAzMjgsMzA5MjYsMzEyOTMsMzE5OTUsMzIzNjMsMzIzODAsMzUzMzYsMzU0ODksMzU5MDMsMzg1NDIsNDAzODgsMjE0NzYsMjE0ODEsMjE1Nzgs''@;'; put 'put ''MjE2MTcsMjIyNjYsMjI5OTMsMjMzOTYsMjM2MTEsMjQyMzUsMjUzMzUsMjU5MTEsMjU5MjUsMjU5NzAsMjYyNzIsMjY1NDMsMjcwNzMsMjc4MzcsMzAyMDQsMzAzNTIsMzA1OTAsMzEyOTUsMzI2NjAsMzI3NzEsMzI5MjksMzMxNjcsMzM1MTAsMzM1MzMsMzM3NzYsMzQyNDEsMzQ4NjUsMzQ5''@;'; put 'put ''OTYsMzU0OTMsNjM3NDcsMzY3NjQsMzc2NzgsMzg1OTksMzkwMTUsMzk2NDAsNDA3MjMsMjE3NDEsMjYwMTEsMjYzNTQsMjY3NjcsMzEyOTYsMzU4OTUsNDAyODgsMjIyNTYsMjIzNzIsMjM4MjUsMjYxMTgsMjY4MDEsMjY4MjksMjg0MTQsMjk3MzYsMzQ5NzQsMzk5MDgsMjc3NTIsNjM3NDgs''@;'; put 'put ''Mzk1OTIsMjAzNzksMjA4NDQsMjA4NDksMjExNTEsMjMzODAsMjQwMzcsMjQ2NTYsMjQ2ODUsMjUzMjksMjU1MTEsMjU5MTUsMjk2NTcsMzEzNTQsMzQ0NjcsMzYwMDIsMzg3OTksMjAwMTgsMjM1MjEsMjUwOTYsMjY1MjQsMjk5MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExODUsMzM3NDcsMzU0NjMsMzU1MDYsMzYzMjgsMzY5NDIsMzc3MDcsMzg5ODIs''@;'; put 'put ''MjQyNzUsMjcxMTIsMzQzMDMsMzcxMDEsNjM3NDksMjA4OTYsMjM0NDgsMjM1MzIsMjQ5MzEsMjY4NzQsMjc0NTQsMjg3NDgsMjk3NDMsMjk5MTIsMzE2NDksMzI1OTIsMzM3MzMsMzUyNjQsMzYwMTEsMzgzNjQsMzkyMDgsMjEwMzgsMjQ2NjksMjUzMjQsMzY4NjYsMjAzNjIsMjA4MDksMjEy''@;'; put 'put ''ODEsMjI3NDUsMjQyOTEsMjYzMzYsMjc5NjAsMjg4MjYsMjkzNzgsMjk2NTQsMzE1NjgsMzMwMDksMzc5NzksMjEzNTAsMjU0OTksMzI2MTksMjAwNTQsMjA2MDgsMjI2MDIsMjI3NTAsMjQ2MTgsMjQ4NzEsMjUyOTYsMjcwODgsMzk3NDUsMjM0MzksMzIwMjQsMzI5NDUsMzY3MDMsMjAxMzIs''@;'; put 'put ''MjA2ODksMjE2NzYsMjE5MzIsMjMzMDgsMjM5NjgsMjQwMzksMjU4OTgsMjU5MzQsMjY2NTcsMjcyMTEsMjk0MDksMzAzNTAsMzA3MDMsMzIwOTQsMzI3NjEsMzMxODQsMzQxMjYsMzQ1MjcsMzY2MTEsMzY2ODYsMzcwNjYsMzkxNzEsMzk1MDksMzk4NTEsMTk5OTIsMjAwMzcsMjAwNjEsMjAx''@;'; put 'put ''NjcsMjA0NjUsMjA4NTUsMjEyNDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsMjEzMTIsMjE0NzUsMjE0NzcsMjE2NDYsMjIwMzYsMjIzODksMjI0MzQsMjM0OTUsMjM5NDMsMjQyNzIsMjUwODQsMjUzMDQsMjU5MzcsMjY1NTIsMjY2MDEsMjcwODMsMjc0NzIsMjc1OTAsMjc2MjgsMjc3MTQsMjgzMTcsMjg3OTIsMjkzOTksMjk1OTAsMjk2OTksMzA2NTUsMzA2''@;'; put 'put ''OTcsMzEzNTAsMzIxMjcsMzI3NzcsMzMyNzYsMzMyODUsMzMyOTAsMzM1MDMsMzQ5MTQsMzU2MzUsMzYwOTIsMzY1NDQsMzY4ODEsMzcwNDEsMzc0NzYsMzc1NTgsMzkzNzgsMzk0OTMsNDAxNjksNDA0MDcsNDA4NjAsMjIyODMsMjM2MTYsMzM3MzgsMzg4MTYsMzg4MjcsNDA2MjgsMjE1MzEs''@;'; put 'put ''MzEzODQsMzI2NzYsMzUwMzMsMzY1NTcsMzcwODksMjI1MjgsMjM2MjQsMjU0OTYsMzEzOTEsMjM0NzAsMjQzMzksMzEzNTMsMzE0MDYsMzM0MjIsMzY1MjQsMjA1MTgsMjEwNDgsMjEyNDAsMjEzNjcsMjIyODAsMjUzMzEsMjU0NTgsMjc0MDIsMjgwOTksMzA1MTksMjE0MTMsMjk1MjcsMzQx''@;'; put 'put ''NTIsMzY0NzAsMzgzNTcsMjY0MjYsMjczMzEsMjg1MjgsMzU0MzcsMzY1NTYsMzkyNDMsNjM3NTAsMjYyMzEsMjc1MTIsMzYwMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzk3NDAsNjM3NTEsMjE0ODMsMjIzMTcsMjI4NjIsMjU1NDIsMjcxMzEsMjk2NzQsMzA3ODksMzE0MTgsMzE0MjksMzE5OTgsMzM5MDksMzUyMTUsMzYyMTEsMzY5MTcsMzgzMTIsMjEy''@;'; put 'put ''NDMsMjIzNDMsMzAwMjMsMzE1ODQsMzM3NDAsMzc0MDYsNjM3NTIsMjcyMjQsMjA4MTEsMjEwNjcsMjExMjcsMjUxMTksMjY4NDAsMjY5OTcsMzg1NTMsMjA2NzcsMjExNTYsMjEyMjAsMjUwMjcsMjYwMjAsMjY2ODEsMjcxMzUsMjk4MjIsMzE1NjMsMzM0NjUsMzM3NzEsMzUyNTAsMzU2NDEs''@;'; put 'put ''MzY4MTcsMzkyNDEsNjM3NTMsMjAxNzAsMjI5MzUsMjU4MTAsMjYxMjksMjcyNzgsMjk3NDgsMzExMDUsMzExNjUsMzM0NDksMzQ5NDIsMzQ5NDMsMzUxNjcsNjM3NTQsMzc2NzAsMjAyMzUsMjE0NTAsMjQ2MTMsMjUyMDEsMjc3NjIsMzIwMjYsMzIxMDIsMjAxMjAsMjA4MzQsMzA2ODQsMzI5''@;'; put 'put ''NDMsMjAyMjUsMjAyMzgsMjA4NTQsMjA4NjQsMjE5ODAsMjIxMjAsMjIzMzEsMjI1MjIsMjI1MjQsMjI4MDQsMjI4NTUsMjI5MzEsMjM0OTIsMjM2OTYsMjM4MjIsMjQwNDksMjQxOTAsMjQ1MjQsMjUyMTYsMjYwNzEsMjYwODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjYzOTgsMjYzOTksMjY0NjIsMjY4MjcsMjY4MjAsMjcyMzEsMjc0NTAsMjc2ODMsMjc3''@;'; put 'put ''NzMsMjc3NzgsMjgxMDMsMjk1OTIsMjk3MzQsMjk3MzgsMjk4MjYsMjk4NTksMzAwNzIsMzAwNzksMzA4NDksMzA5NTksMzEwNDEsMzEwNDcsMzEwNDgsMzEwOTgsMzE2MzcsMzJlMywzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwz''@;'; put 'put ''NzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2''@;'; put 'put ''MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2''@;'; put 'put ''Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywy''@;'; put 'put ''MzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2Mzgx''@;'; put 'put ''MSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2''@;'; put 'put ''MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2Miwz''@;'; put 'put ''NzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2''@;'; put 'put ''NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0''@;'; put 'put ''MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwz''@;'; put 'put ''MTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEw''@;'; put 'put ''OSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywy''@;'; put 'put ''NjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2Mzgz''@;'; put 'put ''NSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwz''@;'; put 'put ''NDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQx''@;'; put 'put ''NCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwy''@;'; put 'put ''MDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1''@;'; put 'put ''NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgw''@;'; put 'put ''NiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwy''@;'; put 'put ''NTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkw''@;'; put 'put ''MywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2''@;'; put 'put ''NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwz''@;'; put 'put ''MjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQz''@;'; put 'put ''MiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1Niwz''@;'; put 'put ''ODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQz''@;'; put 'put ''NSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzN2UzLDE5OTc1LDIxMzI1LDIzMDgxLDI0MDE4LDI0Mzk4LDI0OTMwLDI1NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4''@;'; put 'put ''NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1LDMyMTc4LDMyNTk2LDMzNDI2LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1''@;'; put 'put ''LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMzMDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3NjY3LDI5NDY3LDMwNDUwLDMwNDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIw''@;'; put 'put ''ODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMzOTg2LDM0NzE5LDM3MjI1LDM3NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIx''@;'; put 'put ''MjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYxLDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0LDM1NjI0LDM1OTgwLDI2NDA4LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAy''@;'; put 'put ''LDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0MDQzLDI1MDA2LDI1MDM1LDI1MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3''@;'; put 'put ''NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMyMDExLDMyODYyLDM0NDQyLDM4MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIx''@;'; put 'put ''NjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1LDI0NzU4LDI0ODQ1LDI1MDAzLDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3''@;'; put 'put ''LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMyMjgzLDMzMTYyLDMzMzM0LDM0MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIx''@;'; put 'put ''MzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0LDM0Nzg0LDM2ODIwLDM4OTMwLDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2''@;'; put 'put ''LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2''@;'; put 'put ''Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIzNTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0LDMwOTE3LDMyMDMzLDMyOTM4LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0''@;'; put 'put ''LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIxLDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1MDYxLDM1MDk3LDM2MDY0LDM2NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0''@;'; put 'put ''MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5LDIwOTYxLDI0MDcwLDI2ODA1LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0''@;'; put 'put ''LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYzLDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQyLDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5LDMwNjI5LDQwMDA5LDQwNzEyLDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgz''@;'; put 'put ''LDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUzLDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIyNTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4MjgyLDI4NTQxLDI5NjY4LDI5OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2''@;'; put 'put ''NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMzMTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2LDIwNDcyLDIyODU3LDIzNTUzLDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1''@;'; put 'put ''LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgxLDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIxMTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAwLDI0MjIwLDYzODQ2LDI1MjA2LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4''@;'; put 'put ''LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1LDM1MzMxLDM2ZTMsMzYwNzAsMzYwOTEsMzYyMTIsMzYyODIsMzcwOTYsMzczNDAsMzg0MjgsMzg0NjgsMzkzODUsNDAxNjcsMjEyNzEsMjA5OTgsMjE1NDUsMjIxMzIsMjI3MDcsMjI4NjgsMjI4''@;'; put 'put ''OTQsMjQ1NzUsMjQ5OTYsMjUxOTgsMjYxMjgsMjc3NzQsMjg5NTQsMzA0MDYsMzE4ODEsMzE5NjYsMzIwMjcsMzM0NTIsMzYwMzMsMzg2NDAsNjM4NDcsMjAzMTUsMjQzNDMsMjQ0NDcsMjUyODIsMjM4NDksMjYzNzksMjY4NDIsMzA4NDQsMzIzMjMsNDAzMDAsMTk5ODksMjA2MzMsMjEyNjks''@;'; put 'put ''MjEyOTAsMjEzMjksMjI5MTUsMjMxMzgsMjQxOTksMjQ3NTQsMjQ5NzAsMjUxNjEsMjUyMDksMjZlMywyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkz''@;'; put 'put ''MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwz''@;'; put 'put ''Mzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQy''@;'; put 'put ''NSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwy''@;'; put 'put ''NjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5''@;'; put 'put ''OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2''@;'; put 'put ''MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwy''@;'; put 'put ''OTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5''@;'; put 'put ''NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEw''@;'; put 'put ''OSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4Nywz''@;'; put 'put ''MDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5''@;'; put 'put ''OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5Nixu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEy''@;'; put 'put ''NSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywy''@;'; put 'put ''ODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYw''@;'; put 'put ''NiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywy''@;'; put 'put ''MjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2Niwz''@;'; put 'put ''MTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcw''@;'; put 'put ''NiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwz''@;'; put 'put ''MjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwy''@;'; put 'put ''MTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0''@;'; put 'put ''MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3Miwy''@;'; put 'put ''MzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4Mywy''@;'; put 'put ''OTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzcz''@;'; put 'put ''MSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywy''@;'; put 'put ''MzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1''@;'; put 'put ''MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3''@;'; put 'put ''OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2''@;'; put 'put ''Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQy''@;'; put 'put ''MCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3''@;'; put 'put ''OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwy''@;'; put 'put ''NTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5''@;'; put 'put ''Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3''@;'; put 'put ''MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywy''@;'; put 'put ''OTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMWUzLDIxNDczLDI2MzU1LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMw''@;'; put 'put ''LDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIwMTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIxNTU1LDIxOTc4LDIyNjI2LDIyNzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYz''@;'; put 'put ''OTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEzLDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIzNjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5Nzk3LDMwMjM5LDMxMzM3LDMyMjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5''@;'; put 'put ''OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMxNDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0NjgwLDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgwLDI4MDAzLDI5NjA5LDI5NzE1LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4''@;'; put 'put ''LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMwMDMxLDYzOTMwLDYzOTMxLDIwNzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIz''@;'; put 'put ''MDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYzOTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMzMTM2LDYzOTM4LDM0Nzk5LDM1MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5''@;'; put 'put ''MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIwODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgxLDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQyLDI5MDc2LDI5Nzk0LDI5OTkyLDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYy''@;'; put 'put ''LDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUxLDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMwNDAyLDMxMDU2LDMxMTIxLDMxMTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0''@;'; put 'put ''Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIwLDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4LDI3NTUwLDI4NTYwLDI5MDY1LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0''@;'; put 'put ''MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIyMjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkxLDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0LDI4MzA0LDI5MjMyLDI5NTAzLDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYw''@;'; put 'put ''LDYzOTQyLDM4NDk4LDM5ZTMsNDAyMTksMjYzNzYsMzYyMzQsMzc0NzAsMjAzMDEsMjA1NTMsMjA3MDIsMjEzNjEsMjIyODUsMjI5OTYsMjMwNDEsMjM1NjEsMjQ5NDQsMjYyNTYsMjgyMDUsMjkyMzQsMjk3NzEsMzIyMzksMzI5NjMsMzM4MDYsMzM4OTQsMzQxMTEsMzQ2NTUsMzQ5MDcsMzUw''@;'; put 'put ''OTYsMzU1ODYsMzY5NDksMzg4NTksMzk3NTksMjAwODMsMjAzNjksMjA3NTQsMjA4NDIsNjM5NDMsMjE4MDcsMjE5MjksMjM0MTgsMjM0NjEsMjQxODgsMjQxODksMjQyNTQsMjQ3MzYsMjQ3OTksMjQ4NDAsMjQ4NDEsMjU1NDAsMjU5MTIsMjYzNzcsNjM5NDQsMjY1ODAsMjY1ODYsNjM5NDUs''@;'; put 'put ''MjY5NzcsMjY5NzgsMjc4MzMsMjc5NDMsNjM5NDYsMjgyMTYsNjM5NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg2NDEsMjk0OTQsMjk0OTUsNjM5NDgsMjk3ODgsMzAwMDEsNjM5NDksMzAyOTAsNjM5NTAsNjM5NTEsMzIxNzMsMzMyNzgsMzM4NDgsMzUwMjksMzU0ODAsMzU1NDcsMzU1NjUsMzY0MDAsMzY0MTgsMzY5MzgsMzY5MjYsMzY5ODYsMzcxOTMs''@;'; put 'put ''MzczMjEsMzc3NDIsNjM5NTIsNjM5NTMsMjI1MzcsNjM5NTQsMjc2MDMsMzI5MDUsMzI5NDYsNjM5NTUsNjM5NTYsMjA4MDEsMjI4OTEsMjM2MDksNjM5NTcsNjM5NTgsMjg1MTYsMjk2MDcsMzI5OTYsMzYxMDMsNjM5NTksMzczOTksMzgyODcsNjM5NjAsNjM5NjEsNjM5NjIsNjM5NjMsMzI4''@;'; put 'put ''OTUsMjUxMDIsMjg3MDAsMzIxMDQsMzQ3MDEsNjM5NjQsMjI0MzIsMjQ2ODEsMjQ5MDMsMjc1NzUsMzU1MTgsMzc1MDQsMzg1NzcsMjAwNTcsMjE1MzUsMjgxMzksMzQwOTMsMzg1MTIsMzg4OTksMzkxNTAsMjU1NTgsMjc4NzUsMzcwMDksMjA5NTcsMjUwMzMsMzMyMTAsNDA0NDEsMjAzODEs''@;'; put 'put ''MjA1MDYsMjA3MzYsMjM0NTIsMjQ4NDcsMjUwODcsMjU4MzYsMjY4ODUsMjc1ODksMzAwOTcsMzA2OTEsMzI2ODEsMzMzODAsMzQxOTEsMzQ4MTEsMzQ5MTUsMzU1MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzU2OTYsMzcyOTEsMjAxMDgsMjAxOTcsMjAyMzQsNjM5NjUsNjM5NjYsMjI4MzksMjMwMTYsNjM5NjcsMjQwNTAsMjQzNDcsMjQ0MTEsMjQ2MDks''@;'; put 'put ''NjM5NjgsNjM5NjksNjM5NzAsNjM5NzEsMjkyNDYsMjk2NjksNjM5NzIsMzAwNjQsMzAxNTcsNjM5NzMsMzEyMjcsNjM5NzQsMzI3ODAsMzI4MTksMzI5MDAsMzM1MDUsMzM2MTcsNjM5NzUsNjM5NzYsMzYwMjksMzYwMTksMzY5OTksNjM5NzcsNjM5NzgsMzkxNTYsMzkxODAsNjM5NzksNjM5''@;'; put 'put ''ODAsMjg3MjcsMzA0MTAsMzI3MTQsMzI3MTYsMzI3NjQsMzU2MTAsMjAxNTQsMjAxNjEsMjA5OTUsMjEzNjAsNjM5ODEsMjE2OTMsMjIyNDAsMjMwMzUsMjM0OTMsMjQzNDEsMjQ1MjUsMjgyNzAsNjM5ODIsNjM5ODMsMzIxMDYsMzM1ODksNjM5ODQsMzQ0NTEsMzU0NjksNjM5ODUsMzg3NjUs''@;'; put 'put ''Mzg3NzUsNjM5ODYsNjM5ODcsMTk5NjgsMjAzMTQsMjAzNTAsMjI3NzcsMjYwODUsMjgzMjIsMzY5MjAsMzc4MDgsMzkzNTMsMjAyMTksMjI3NjQsMjI5MjIsMjMwMDEsMjQ2NDEsNjM5ODgsNjM5ODksMzEyNTIsNjM5OTAsMzM2MTUsMzYwMzUsMjA4MzcsMjEzMTYsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM5OTEsNjM5OTIsNjM5OTMsMjAxNzMsMjEwOTcs''@;'; put 'put ''MjMzODEsMzM0NzEsMjAxODAsMjEwNTAsMjE2NzIsMjI5ODUsMjMwMzksMjMzNzYsMjMzODMsMjMzODgsMjQ2NzUsMjQ5MDQsMjgzNjMsMjg4MjUsMjkwMzgsMjk1NzQsMjk5NDMsMzAxMzMsMzA5MTMsMzIwNDMsMzI3NzMsMzMyNTgsMzM1NzYsMzQwNzEsMzQyNDksMzU1NjYsMzYwMzksMzg2''@;'; put 'put ''MDQsMjAzMTYsMjEyNDIsMjIyMDQsMjYwMjcsMjYxNTIsMjg3OTYsMjg4NTYsMjkyMzcsMzIxODksMzM0MjEsMzcxOTYsMzg1OTIsNDAzMDYsMjM0MDksMjY4NTUsMjc1NDQsMjg1MzgsMzA0MzAsMjM2OTcsMjYyODMsMjg1MDcsMzE2NjgsMzE3ODYsMzQ4NzAsMzg2MjAsMTk5NzYsMjAxODMs''@;'; put 'put ''MjEyODAsMjI1ODAsMjI3MTUsMjI3NjcsMjI4OTIsMjM1NTksMjQxMTUsMjQxOTYsMjQzNzMsMjU0ODQsMjYyOTAsMjY0NTQsMjcxNjcsMjcyOTksMjc0MDQsMjg0NzksMjkyNTQsNjM5OTQsMjk1MjAsMjk4MzUsMzE0NTYsMzE5MTEsMzMxNDQsMzMyNDcsMzMyNTUsMzM2NzQsMzM5MDAsMzQw''@;'; put 'put ''ODMsMzQxOTYsMzQyNTUsMzUwMzcsMzYxMTUsMzcyOTIsMzgyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg1NTYsMjA4NzcsMjE3MDUsMjIzMTIsMjM0NzIsMjUxNjUsMjY0NDgsMjY2ODUsMjY3NzEsMjgyMjEsMjgzNzEsMjg3OTcsMzIyODksMzUwMDksMzYwMDEsMzY2MTcsNDA3NzksNDA3ODIsMjkyMjksMzE2MzEsMzU1MzMsMzc2NTgsMjAyOTUsMjAz''@;'; put 'put ''MDIsMjA3ODYsMjE2MzIsMjI5OTIsMjQyMTMsMjUyNjksMjY0ODUsMjY5OTAsMjcxNTksMjc4MjIsMjgxODYsMjk0MDEsMjk0ODIsMzAxNDEsMzE2NzIsMzIwNTMsMzM1MTEsMzM3ODUsMzM4NzksMzQyOTUsMzU0MTksMzYwMTUsMzY0ODcsMzY4ODksMzcwNDgsMzg2MDYsNDA3OTksMjEyMTks''@;'; put 'put ''MjE1MTQsMjMyNjUsMjM0OTAsMjU2ODgsMjU5NzMsMjg0MDQsMjkzODAsNjM5OTUsMzAzNDAsMzEzMDksMzE1MTUsMzE4MjEsMzIzMTgsMzI3MzUsMzM2NTksMzU2MjcsMzYwNDIsMzYxOTYsMzYzMjEsMzY0NDcsMzY4NDIsMzY4NTcsMzY5NjksMzc4NDEsMjAyOTEsMjAzNDYsMjA2NTksMjA4''@;'; put 'put ''NDAsMjA4NTYsMjEwNjksMjEwOTgsMjI2MjUsMjI2NTIsMjI4ODAsMjM1NjAsMjM2MzcsMjQyODMsMjQ3MzEsMjUxMzYsMjY2NDMsMjc1ODMsMjc2NTYsMjg1OTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkwMDYsMjk3MjgsM2U0LDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0LDMxNjI3LDMxNjYxLDMxNjg2LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5''@;'; put 'put ''LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMwLDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMxNjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4ODU3LDMxODk2LDM4NjczLDM5ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5''@;'; put 'put ''OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAyLDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIyLDI2OTg0LDI3MjczLDI3NDkxLDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0''@;'; put 'put ''LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQzLDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3NDc4LDM3NTgwLDM3NjY0LDM4NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NzQ4LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0''@;'; put 'put ''LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMyLDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQwNzc4LDIwNDMwLDIwODA2LDIwOTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1''@;'; put 'put ''NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5LDMxMjY0LDMxMzgxLDMxODk1LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5''@;'; put 'put ''LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5NDY5LDIwNTE5LDIzNDQ3LDI0NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5''@;'; put 'put ''NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUyLDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIwMDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIxNjEwLDIxNjA4LDIyMDE0LDIyODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2''@;'; put 'put ''NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMwMDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYyLDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkwLDM2NjU5LDM2OTEzLDM3MTk4LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5''@;'; put 'put ''LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMxNDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMzNTM3LDIwMDEzLDIwMjEwLDM0ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3''@;'; put 'put ''NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMyMzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQzLDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIyMzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1OTAzLDI2MDg4LDI2MjM0LDI2NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4''@;'; put 'put ''NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMzNDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3LDMyMzQwLDMyODg3LDIxNzY3LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1''@;'; put 'put ''LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMwNjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0OTY3LDM1Mzg2LDM2MDQ5LDM2NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4''@;'; put 'put ''NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMwMTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQxLDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3LDIyNTE5LDI4NTAzLDMyMjIxLDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3ODc4LDM4NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIw''@;'; put 'put ''Mzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMxNjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1LDQwODEwLDI1Nzc2LDI4NTkxLDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYy''@;'; put 'put ''LDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIwNzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2MDI4LDMxNDQ5LDM1NzMwLDM1NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIz''@;'; put 'put ''MTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEyLDIzNDg4LDIzNTI4LDI0NDI1LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgx''@;'; put 'put ''LDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYzOTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0LDM2NDQ4LDM4NDk1LDM4NTg3LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5''@;'; put 'put ''LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4NTUyLDMyMTgwLDM2NjM5LDM2Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4''@;'; put 'put ''MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcxLDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUyLDMyODkzLDMzNzI5LDM1NTMxLDM4NzM3LDM5ODk0LDY0ZTMsMjEwNTksMjYzNjcs''@;'; put 'put ''MjgwNTMsMjgzOTksMzIyMjQsMzU1NTgsMzY5MTAsMzY5NTgsMzk2MzYsMjEwMjEsMjExMTksMjE3MzYsMjQ5ODAsMjUyMjAsMjUzMDcsMjY3ODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4OTgsMjY5NzAsMjcxODksMjg4MTgsMjg5NjYsMzA4MTMsMzA5NzcsMzA5OTAsMzExODYsMzEyNDUsMzI5MTgsMzM0MDAsMzM0OTMsMzM2MDksMzQxMjEsMzU5NzAs''@;'; put 'put ''MzYyMjksMzcyMTgsMzcyNTksMzcyOTQsMjA0MTksMjIyMjUsMjkxNjUsMzA2NzksMzQ1NjAsMzUzMjAsMjM1NDQsMjQ1MzQsMjY0NDksMzcwMzIsMjE0NzQsMjI2MTgsMjM1NDEsMjQ3NDAsMjQ5NjEsMjU2OTYsMzIzMTcsMzI4ODAsMzQwODUsMzc1MDcsMjU3NzQsMjA2NTIsMjM4MjgsMjYz''@;'; put 'put ''NjgsMjI2ODQsMjUyNzcsMjU1MTIsMjY4OTQsMjdlMywyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4Miwz''@;'; put 'put ''MTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwz''@;'; put 'put ''MjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1''@;'; put 'put ''OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1Niwz''@;'; put 'put ''MTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYw''@;'; put 'put ''OSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgx''@;'; put 'put ''MiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwz''@;'; put 'put ''MjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1''@;'; put 'put ''MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1''@;'; put 'put ''OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwz''@;'; put 'put ''ODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYx''@;'; put 'put ''MCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0''@;'; put 'put ''NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwz''@;'; put 'put ''NDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0''@;'; put 'put ''NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4Miwy''@;'; put 'put ''ODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0Nywz''@;'; put 'put ''MzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5''@;'; put 'put ''NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0Niwy''@;'; put 'put ''MzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0Niwy''@;'; put 'put ''NDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0''@;'; put 'put ''OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwy''@;'; put 'put ''ODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2''@;'; put 'put ''NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0''@;'; put 'put ''NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwy''@;'; put 'put ''NDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMx''@;'; put 'put ''MywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0''@;'; put 'put ''OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1Niwy''@;'; put 'put ''Nzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4''@;'; put 'put ''NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxnYjE4MDMwOlsxOTk3MCwxOTk3MiwxOTk3MywxOTk3NCwxOTk4MywxOTk4NiwxOTk5MSwxOTk5OSwyZTQsMjAwMDEsMjAwMDMsMjAwMDYsMjAwMDksMjAwMTQsMjAwMTUsMjAwMTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAw''@;'; put 'put ''MzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAwNTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgsMjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgsMjAwNzksMjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcs''@;'; put 'put ''MjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcsMjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAxMDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAxMjQsMjAxMjUsMjAxMjYsMjAxMzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAx''@;'; put 'put ''NDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAxNzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYsMjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTksMjAyMDEsMjAyMDUsMjAyMDYsMjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcs''@;'; put 'put ''MjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsMjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAyNTMsMjAyNTcsMjAyNTksMjAyNjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAy''@;'; put 'put ''NzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAyODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMjEsMjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEs''@;'; put 'put ''MjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAzNTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAz''@;'; put 'put ''ODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQs''@;'; put 'put ''MjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0NjYsMjA0NjgsMjA0NjksMjA0NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0''@;'; put 'put ''NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEsMjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIsMjA1MDMsMjA1MDcsMjA1MDksMjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYs''@;'; put 'put ''MjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMsMjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDgsMjA1NDksMjA1NTAsMjA1NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1''@;'; put 'put ''NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1NzcsMjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1ODcsMjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMs''@;'; put 'put ''MjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUsMjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2''@;'; put 'put ''MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQsMjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTksMjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQs''@;'; put 'put ''MjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUsMjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2ODYsMjA2ODgsMjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2''@;'; put 'put ''OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIsMjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEsMjA3MjIsMjA3MjQsMjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIs''@;'; put 'put ''MjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEsMjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3NTYsMjA3NTcsMjA3NTgsMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3''@;'; put 'put ''NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3NzgsMjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQsMjA3ODUsMjA3ODYsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIs''@;'; put 'put ''MjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAsMjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4''@;'; put 'put ''MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUsMjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQsMjA4ODgsMjA4OTAsMjA4OTMsMjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIs''@;'; put 'put ''MjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEsMjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5NDIsMjA5NDQsMjA5NDYsMjA5NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5''@;'; put 'put ''NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAsMjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMsMjA5OTAsMjA5OTYsMjA5OTcsMjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgs''@;'; put 'put ''MjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcsMjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEwMzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEwNTIsMjEwNTQsMjEwNjAsMjEwNjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEw''@;'; put 'put ''NjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEwODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgsMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTksMjExMDAsMjExMDEsMjExMDIsMjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDks''@;'; put 'put ''MjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAsMjExMjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjExMzQsMjExMzUsMjExMzcsMjExMzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjEx''@;'; put 'put ''NDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjExNjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQsMjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAsMjExODEsMjExODQsMjExODUsMjExODYsMjExODgsMjExODksMjExOTAsMjExOTIs''@;'; put 'put ''MjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUsMjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEyMTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEyMTksMjEyMjEsMjEyMjIsMjEyMjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEy''@;'; put 'put ''MjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQsMjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUsMjEyNTcsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcs''@;'; put 'put ''MjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEyOTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEz''@;'; put 'put ''MTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEzMzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDksMjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYsMjEzNjksMjEzNzEsMjEzNzIsMjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzks''@;'; put 'put ''MjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUsMjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0MTUsMjE0MTgsMjE0MTksMjE0MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0''@;'; put 'put ''MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMs''@;'; put 'put ''MjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDksMjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1NDYsMjE1NTIsMjE1NTUsMjE1NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1''@;'; put 'put ''NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgsMjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcsMjE2MDksMjE2MTAsMjE2MTEsMjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYs''@;'; put 'put ''MjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2MzksMjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2''@;'; put 'put ''ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMsMjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3MzksMjE3NDAsMjE3NDMsMjE3NDQsMjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEs''@;'; put 'put ''MjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUsMjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3ODMsMjE3ODQsMjE3ODUsMjE3ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3''@;'; put 'put ''OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgsMjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEsMjE4MzIsMjE4MzUsMjE4MzYsMjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIs''@;'; put 'put ''MjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQsMjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4NzQsMjE4NzUsMjE4NzYsMjE4ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4''@;'; put 'put ''OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAsMjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYsMjE5MjgsMjE5MjksMjE5MzAsMjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUs''@;'; put 'put ''MjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5NjgsMjE5NzMsMjE5NzUsMjE5NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5''@;'; put 'put ''ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjJlMywyMjAwMSwyMjAwNCwyMjAwNiwyMjAwOCwyMjAwOSwyMjAxMCwyMjAxMSwyMjAxMiwyMjAxNSwyMjAxOCwyMjAxOSwyMjAyMCwyMjAyMSwyMjAyMiwyMjAyMywyMjAyNiwyMjAyNywyMjAyOSwyMjAzMiwyMjAzMywyMjAzNCwy''@;'; put 'put ''MjAzNSwyMjAzNiwyMjAzNywyMjAzOCwyMjAzOSwyMjA0MSwyMjA0MiwyMjA0NCwyMjA0NSwyMjA0OCwyMjA0OSwyMjA1MCwyMjA1MywyMjA1NCwyMjA1NiwyMjA1NywyMjA1OCwyMjA1OSwyMjA2MiwyMjA2MywyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MiwyMjA3NCwyMjA3NiwyMjA3''@;'; put 'put ''NywyMjA3OCwyMjA4MCwyMjA4MSwyMjA4MiwyMjA4MywyMjA4NCwyMjA4NSwyMjA4NiwyMjA4NywyMjA4OCwyMjA4OSwyMjA5MCwyMjA5MSwyMjA5NSwyMjA5NiwyMjA5NywyMjA5OCwyMjA5OSwyMjEwMSwyMjEwMiwyMjEwNiwyMjEwNywyMjEwOSwyMjExMCwyMjExMSwyMjExMiwyMjExMywy''@;'; put 'put ''MjExNSwyMjExNywyMjExOCwyMjExOSwyMjEyNSwyMjEyNiwyMjEyNywyMjEyOCwyMjEzMCwyMjEzMSwyMjEzMiwyMjEzMywyMjEzNSwyMjEzNiwyMjEzNywyMjEzOCwyMjE0MSwyMjE0MiwyMjE0MywyMjE0NCwyMjE0NSwyMjE0NiwyMjE0NywyMjE0OCwyMjE1MSwyMjE1MiwyMjE1MywyMjE1''@;'; put 'put ''NCwyMjE1NSwyMjE1NiwyMjE1NywyMjE2MCwyMjE2MSwyMjE2MiwyMjE2NCwyMjE2NSwyMjE2NiwyMjE2NywyMjE2OCwyMjE2OSwyMjE3MCwyMjE3MSwyMjE3MiwyMjE3MywyMjE3NCwyMjE3NSwyMjE3NiwyMjE3NywyMjE3OCwyMjE4MCwyMjE4MSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwy''@;'; put 'put ''MjE4NiwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MCwyMjE5MiwyMjE5MywyMjE5NCwyMjE5NSwyMjE5NiwyMjE5NywyMjE5OCwyMjIwMCwyMjIwMSwyMjIwMiwyMjIwMywyMjIwNSwyMjIwNiwyMjIwNywyMjIwOCwyMjIwOSwyMjIxMCwyMjIxMSwyMjIxMiwyMjIxMywyMjIxNCwyMjIxNSwyMjIx''@;'; put 'put ''NiwyMjIxNywyMjIxOSwyMjIyMCwyMjIyMSwyMjIyMiwyMjIyMywyMjIyNCwyMjIyNSwyMjIyNiwyMjIyNywyMjIyOSwyMjIzMCwyMjIzMiwyMjIzMywyMjIzNiwyMjI0MywyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI0OSwyMjI1MCwyMjI1MiwyMjI1NCwyMjI1NSwyMjI1OCwyMjI1OSwy''@;'; put 'put ''MjI2MiwyMjI2MywyMjI2NCwyMjI2NywyMjI2OCwyMjI3MiwyMjI3MywyMjI3NCwyMjI3NywyMjI3OSwyMjI4MywyMjI4NCwyMjI4NSwyMjI4NiwyMjI4NywyMjI4OCwyMjI4OSwyMjI5MCwyMjI5MSwyMjI5MiwyMjI5MywyMjI5NCwyMjI5NSwyMjI5NiwyMjI5NywyMjI5OCwyMjI5OSwyMjMw''@;'; put 'put ''MSwyMjMwMiwyMjMwNCwyMjMwNSwyMjMwNiwyMjMwOCwyMjMwOSwyMjMxMCwyMjMxMSwyMjMxNSwyMjMyMSwyMjMyMiwyMjMyNCwyMjMyNSwyMjMyNiwyMjMyNywyMjMyOCwyMjMzMiwyMjMzMywyMjMzNSwyMjMzNywyMjMzOSwyMjM0MCwyMjM0MSwyMjM0MiwyMjM0NCwyMjM0NSwyMjM0Nywy''@;'; put 'put ''MjM1NCwyMjM1NSwyMjM1NiwyMjM1NywyMjM1OCwyMjM2MCwyMjM2MSwyMjM3MCwyMjM3MSwyMjM3MywyMjM3NSwyMjM4MCwyMjM4MiwyMjM4NCwyMjM4NSwyMjM4NiwyMjM4OCwyMjM4OSwyMjM5MiwyMjM5MywyMjM5NCwyMjM5NywyMjM5OCwyMjM5OSwyMjQwMCwyMjQwMSwyMjQwNywyMjQw''@;'; put 'put ''OCwyMjQwOSwyMjQxMCwyMjQxMywyMjQxNCwyMjQxNSwyMjQxNiwyMjQxNywyMjQyMCwyMjQyMSwyMjQyMiwyMjQyMywyMjQyNCwyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzNywyMjQ0MCwyMjQ0MiwyMjQ0NCwyMjQ0NywyMjQ0OCwyMjQ0OSwyMjQ1MSwyMjQ1Mywy''@;'; put 'put ''MjQ1NCwyMjQ1NSwyMjQ1NywyMjQ1OCwyMjQ1OSwyMjQ2MCwyMjQ2MSwyMjQ2MiwyMjQ2MywyMjQ2NCwyMjQ2NSwyMjQ2OCwyMjQ2OSwyMjQ3MCwyMjQ3MSwyMjQ3MiwyMjQ3MywyMjQ3NCwyMjQ3NiwyMjQ3NywyMjQ4MCwyMjQ4MSwyMjQ4MywyMjQ4NiwyMjQ4NywyMjQ5MSwyMjQ5MiwyMjQ5''@;'; put 'put ''NCwyMjQ5NywyMjQ5OCwyMjQ5OSwyMjUwMSwyMjUwMiwyMjUwMywyMjUwNCwyMjUwNSwyMjUwNiwyMjUwNywyMjUwOCwyMjUxMCwyMjUxMiwyMjUxMywyMjUxNCwyMjUxNSwyMjUxNywyMjUxOCwyMjUxOSwyMjUyMywyMjUyNCwyMjUyNiwyMjUyNywyMjUyOSwyMjUzMSwyMjUzMiwyMjUzMywy''@;'; put 'put ''MjUzNiwyMjUzNywyMjUzOCwyMjU0MCwyMjU0MiwyMjU0MywyMjU0NCwyMjU0NiwyMjU0NywyMjU0OCwyMjU1MCwyMjU1MSwyMjU1MiwyMjU1NCwyMjU1NSwyMjU1NiwyMjU1NywyMjU1OSwyMjU2MiwyMjU2MywyMjU2NSwyMjU2NiwyMjU2NywyMjU2OCwyMjU2OSwyMjU3MSwyMjU3MiwyMjU3''@;'; put 'put ''MywyMjU3NCwyMjU3NSwyMjU3NywyMjU3OCwyMjU3OSwyMjU4MCwyMjU4MiwyMjU4MywyMjU4NCwyMjU4NSwyMjU4NiwyMjU4NywyMjU4OCwyMjU4OSwyMjU5MCwyMjU5MSwyMjU5MiwyMjU5MywyMjU5NCwyMjU5NSwyMjU5NywyMjU5OCwyMjU5OSwyMjYwMCwyMjYwMSwyMjYwMiwyMjYwMywy''@;'; put 'put ''MjYwNiwyMjYwNywyMjYwOCwyMjYxMCwyMjYxMSwyMjYxMywyMjYxNCwyMjYxNSwyMjYxNywyMjYxOCwyMjYxOSwyMjYyMCwyMjYyMSwyMjYyMywyMjYyNCwyMjYyNSwyMjYyNiwyMjYyNywyMjYyOCwyMjYzMCwyMjYzMSwyMjYzMiwyMjYzMywyMjYzNCwyMjYzNywyMjYzOCwyMjYzOSwyMjY0''@;'; put 'put ''MCwyMjY0MSwyMjY0MiwyMjY0MywyMjY0NCwyMjY0NSwyMjY0NiwyMjY0NywyMjY0OCwyMjY0OSwyMjY1MCwyMjY1MSwyMjY1MiwyMjY1MywyMjY1NSwyMjY1OCwyMjY2MCwyMjY2MiwyMjY2MywyMjY2NCwyMjY2NiwyMjY2NywyMjY2OCwyMjY2OSwyMjY3MCwyMjY3MSwyMjY3MiwyMjY3Mywy''@;'; put 'put ''MjY3NiwyMjY3NywyMjY3OCwyMjY3OSwyMjY4MCwyMjY4MywyMjY4NCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5MSwyMjY5MiwyMjY5MywyMjY5NCwyMjY5NSwyMjY5OCwyMjY5OSwyMjcwMCwyMjcwMSwyMjcwMiwyMjcwMywyMjcwNCwyMjcwNSwyMjcwNiwyMjcwNywyMjcwOCwyMjcw''@;'; put 'put ''OSwyMjcxMCwyMjcxMSwyMjcxMiwyMjcxMywyMjcxNCwyMjcxNSwyMjcxNywyMjcxOCwyMjcxOSwyMjcyMCwyMjcyMiwyMjcyMywyMjcyNCwyMjcyNiwyMjcyNywyMjcyOCwyMjcyOSwyMjczMCwyMjczMSwyMjczMiwyMjczMywyMjczNCwyMjczNSwyMjczNiwyMjczOCwyMjczOSwyMjc0MCwy''@;'; put 'put ''Mjc0MiwyMjc0MywyMjc0NCwyMjc0NSwyMjc0NiwyMjc0NywyMjc0OCwyMjc0OSwyMjc1MCwyMjc1MSwyMjc1MiwyMjc1MywyMjc1NCwyMjc1NSwyMjc1NywyMjc1OCwyMjc1OSwyMjc2MCwyMjc2MSwyMjc2MiwyMjc2NSwyMjc2NywyMjc2OSwyMjc3MCwyMjc3MiwyMjc3MywyMjc3NSwyMjc3''@;'; put 'put ''NiwyMjc3OCwyMjc3OSwyMjc4MCwyMjc4MSwyMjc4MiwyMjc4MywyMjc4NCwyMjc4NSwyMjc4NywyMjc4OSwyMjc5MCwyMjc5MiwyMjc5MywyMjc5NCwyMjc5NSwyMjc5NiwyMjc5OCwyMjgwMCwyMjgwMSwyMjgwMiwyMjgwMywyMjgwNywyMjgwOCwyMjgxMSwyMjgxMywyMjgxNCwyMjgxNiwy''@;'; put 'put ''MjgxNywyMjgxOCwyMjgxOSwyMjgyMiwyMjgyNCwyMjgyOCwyMjgzMiwyMjgzNCwyMjgzNSwyMjgzNywyMjgzOCwyMjg0MywyMjg0NSwyMjg0NiwyMjg0NywyMjg0OCwyMjg1MSwyMjg1MywyMjg1NCwyMjg1OCwyMjg2MCwyMjg2MSwyMjg2NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3''@;'; put 'put ''NiwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg4NCwyMjg4NiwyMjg4NywyMjg4OCwyMjg4OSwyMjg5MCwyMjg5MSwyMjg5MiwyMjg5MywyMjg5NCwyMjg5NSwyMjg5NiwyMjg5NywyMjg5OCwyMjkwMSwyMjkwMywyMjkwNiwyMjkwNywyMjkwOCwyMjkxMCwyMjkxMSwyMjkxMiwy''@;'; put 'put ''MjkxNywyMjkyMSwyMjkyMywyMjkyNCwyMjkyNiwyMjkyNywyMjkyOCwyMjkyOSwyMjkzMiwyMjkzMywyMjkzNiwyMjkzOCwyMjkzOSwyMjk0MCwyMjk0MSwyMjk0MywyMjk0NCwyMjk0NSwyMjk0NiwyMjk1MCwyMjk1MSwyMjk1NiwyMjk1NywyMjk2MCwyMjk2MSwyMjk2MywyMjk2NCwyMjk2''@;'; put 'put ''NSwyMjk2NiwyMjk2NywyMjk2OCwyMjk3MCwyMjk3MiwyMjk3MywyMjk3NSwyMjk3NiwyMjk3NywyMjk3OCwyMjk3OSwyMjk4MCwyMjk4MSwyMjk4MywyMjk4NCwyMjk4NSwyMjk4OCwyMjk4OSwyMjk5MCwyMjk5MSwyMjk5NywyMjk5OCwyMzAwMSwyMzAwMywyMzAwNiwyMzAwNywyMzAwOCwy''@;'; put 'put ''MzAwOSwyMzAxMCwyMzAxMiwyMzAxNCwyMzAxNSwyMzAxNywyMzAxOCwyMzAxOSwyMzAyMSwyMzAyMiwyMzAyMywyMzAyNCwyMzAyNSwyMzAyNiwyMzAyNywyMzAyOCwyMzAyOSwyMzAzMCwyMzAzMSwyMzAzMiwyMzAzNCwyMzAzNiwyMzAzNywyMzAzOCwyMzA0MCwyMzA0MiwyMzA1MCwyMzA1''@;'; put 'put ''MSwyMzA1MywyMzA1NCwyMzA1NSwyMzA1NiwyMzA1OCwyMzA2MCwyMzA2MSwyMzA2MiwyMzA2MywyMzA2NSwyMzA2NiwyMzA2NywyMzA2OSwyMzA3MCwyMzA3MywyMzA3NCwyMzA3NiwyMzA3OCwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4MywyMzA4NCwyMzA4NSwyMzA4NiwyMzA4NywyMzA4OCwy''@;'; put 'put ''MzA5MSwyMzA5MywyMzA5NSwyMzA5NiwyMzA5NywyMzA5OCwyMzA5OSwyMzEwMSwyMzEwMiwyMzEwMywyMzEwNSwyMzEwNiwyMzEwNywyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNSwyMzExNiwyMzExNywyMzExOCwyMzExOSwyMzEyMCwyMzEyMSwyMzEyMiwyMzEyMywyMzEyNCwyMzEy''@;'; put 'put ''NiwyMzEyNywyMzEyOCwyMzEyOSwyMzEzMSwyMzEzMiwyMzEzMywyMzEzNCwyMzEzNSwyMzEzNiwyMzEzNywyMzEzOSwyMzE0MCwyMzE0MSwyMzE0MiwyMzE0NCwyMzE0NSwyMzE0NywyMzE0OCwyMzE0OSwyMzE1MCwyMzE1MSwyMzE1MiwyMzE1MywyMzE1NCwyMzE1NSwyMzE2MCwyMzE2MSwy''@;'; put 'put ''MzE2MywyMzE2NCwyMzE2NSwyMzE2NiwyMzE2OCwyMzE2OSwyMzE3MCwyMzE3MSwyMzE3MiwyMzE3MywyMzE3NCwyMzE3NSwyMzE3NiwyMzE3NywyMzE3OCwyMzE3OSwyMzE4MCwyMzE4MSwyMzE4MiwyMzE4MywyMzE4NCwyMzE4NSwyMzE4NywyMzE4OCwyMzE4OSwyMzE5MCwyMzE5MSwyMzE5''@;'; put 'put ''MiwyMzE5MywyMzE5NiwyMzE5NywyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMSwyMzIwMiwyMzIwMywyMzIwNCwyMzIwNSwyMzIwNiwyMzIwNywyMzIwOCwyMzIwOSwyMzIxMSwyMzIxMiwyMzIxMywyMzIxNCwyMzIxNSwyMzIxNiwyMzIxNywyMzIyMCwyMzIyMiwyMzIyMywyMzIyNSwyMzIyNiwy''@;'; put 'put ''MzIyNywyMzIyOCwyMzIyOSwyMzIzMSwyMzIzMiwyMzIzNSwyMzIzNiwyMzIzNywyMzIzOCwyMzIzOSwyMzI0MCwyMzI0MiwyMzI0MywyMzI0NSwyMzI0NiwyMzI0NywyMzI0OCwyMzI0OSwyMzI1MSwyMzI1MywyMzI1NSwyMzI1NywyMzI1OCwyMzI1OSwyMzI2MSwyMzI2MiwyMzI2MywyMzI2''@;'; put 'put ''NiwyMzI2OCwyMzI2OSwyMzI3MSwyMzI3MiwyMzI3NCwyMzI3NiwyMzI3NywyMzI3OCwyMzI3OSwyMzI4MCwyMzI4MiwyMzI4MywyMzI4NCwyMzI4NSwyMzI4NiwyMzI4NywyMzI4OCwyMzI4OSwyMzI5MCwyMzI5MSwyMzI5MiwyMzI5MywyMzI5NCwyMzI5NSwyMzI5NiwyMzI5NywyMzI5OCwy''@;'; put 'put ''MzI5OSwyMzMwMCwyMzMwMSwyMzMwMiwyMzMwMywyMzMwNCwyMzMwNiwyMzMwNywyMzMwOCwyMzMwOSwyMzMxMCwyMzMxMSwyMzMxMiwyMzMxMywyMzMxNCwyMzMxNSwyMzMxNiwyMzMxNywyMzMyMCwyMzMyMSwyMzMyMiwyMzMyMywyMzMyNCwyMzMyNSwyMzMyNiwyMzMyNywyMzMyOCwyMzMy''@;'; put 'put ''OSwyMzMzMCwyMzMzMSwyMzMzMiwyMzMzMywyMzMzNCwyMzMzNSwyMzMzNiwyMzMzNywyMzMzOCwyMzMzOSwyMzM0MCwyMzM0MSwyMzM0MiwyMzM0MywyMzM0NCwyMzM0NSwyMzM0NywyMzM0OSwyMzM1MCwyMzM1MiwyMzM1MywyMzM1NCwyMzM1NSwyMzM1NiwyMzM1NywyMzM1OCwyMzM1OSwy''@;'; put 'put ''MzM2MSwyMzM2MiwyMzM2MywyMzM2NCwyMzM2NSwyMzM2NiwyMzM2NywyMzM2OCwyMzM2OSwyMzM3MCwyMzM3MSwyMzM3MiwyMzM3MywyMzM3NCwyMzM3NSwyMzM3OCwyMzM4MiwyMzM5MCwyMzM5MiwyMzM5MywyMzM5OSwyMzQwMCwyMzQwMywyMzQwNSwyMzQwNiwyMzQwNywyMzQxMCwyMzQx''@;'; put 'put ''MiwyMzQxNCwyMzQxNSwyMzQxNiwyMzQxNywyMzQxOSwyMzQyMCwyMzQyMiwyMzQyMywyMzQyNiwyMzQzMCwyMzQzNCwyMzQzNywyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MiwyMzQ0NCwyMzQ0NiwyMzQ1NSwyMzQ2MywyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MCwyMzQ3MSwyMzQ3Mywy''@;'; put 'put ''MzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4MywyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzQ5MSwyMzQ5NiwyMzQ5NywyMzQ5OCwyMzQ5OSwyMzUwMSwyMzUwMiwyMzUwMywyMzUwNSwyMzUwOCwyMzUwOSwyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUxNSwyMzUxNiwyMzUyMCwyMzUyMiwyMzUy''@;'; put 'put ''MywyMzUyNiwyMzUyNywyMzUyOSwyMzUzMCwyMzUzMSwyMzUzMiwyMzUzMywyMzUzNSwyMzUzNywyMzUzOCwyMzUzOSwyMzU0MCwyMzU0MSwyMzU0MiwyMzU0MywyMzU0OSwyMzU1MCwyMzU1MiwyMzU1NCwyMzU1NSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2MywyMzU2NCwyMzU2NSwyMzU2Niwy''@;'; put 'put ''MzU2OCwyMzU3MCwyMzU3MSwyMzU3NSwyMzU3NywyMzU3OSwyMzU4MiwyMzU4MywyMzU4NCwyMzU4NSwyMzU4NywyMzU5MCwyMzU5MiwyMzU5MywyMzU5NCwyMzU5NSwyMzU5NywyMzU5OCwyMzU5OSwyMzYwMCwyMzYwMiwyMzYwMywyMzYwNSwyMzYwNiwyMzYwNywyMzYxOSwyMzYyMCwyMzYy''@;'; put 'put ''MiwyMzYyMywyMzYyOCwyMzYyOSwyMzYzNCwyMzYzNSwyMzYzNiwyMzYzOCwyMzYzOSwyMzY0MCwyMzY0MiwyMzY0MywyMzY0NCwyMzY0NSwyMzY0NywyMzY1MCwyMzY1MiwyMzY1NSwyMzY1NiwyMzY1NywyMzY1OCwyMzY1OSwyMzY2MCwyMzY2MSwyMzY2NCwyMzY2NiwyMzY2NywyMzY2OCwy''@;'; put 'put ''MzY2OSwyMzY3MCwyMzY3MSwyMzY3MiwyMzY3NSwyMzY3NiwyMzY3NywyMzY3OCwyMzY4MCwyMzY4MywyMzY4NCwyMzY4NSwyMzY4NiwyMzY4NywyMzY4OSwyMzY5MCwyMzY5MSwyMzY5NCwyMzY5NSwyMzY5OCwyMzY5OSwyMzcwMSwyMzcwOSwyMzcxMCwyMzcxMSwyMzcxMiwyMzcxMywyMzcx''@;'; put 'put ''NiwyMzcxNywyMzcxOCwyMzcxOSwyMzcyMCwyMzcyMiwyMzcyNiwyMzcyNywyMzcyOCwyMzczMCwyMzczMiwyMzczNCwyMzczNywyMzczOCwyMzczOSwyMzc0MCwyMzc0MiwyMzc0NCwyMzc0NiwyMzc0NywyMzc0OSwyMzc1MCwyMzc1MSwyMzc1MiwyMzc1MywyMzc1NCwyMzc1NiwyMzc1Nywy''@;'; put 'put ''Mzc1OCwyMzc1OSwyMzc2MCwyMzc2MSwyMzc2MywyMzc2NCwyMzc2NSwyMzc2NiwyMzc2NywyMzc2OCwyMzc3MCwyMzc3MSwyMzc3MiwyMzc3MywyMzc3NCwyMzc3NSwyMzc3NiwyMzc3OCwyMzc3OSwyMzc4MywyMzc4NSwyMzc4NywyMzc4OCwyMzc5MCwyMzc5MSwyMzc5MywyMzc5NCwyMzc5''@;'; put 'put ''NSwyMzc5NiwyMzc5NywyMzc5OCwyMzc5OSwyMzgwMCwyMzgwMSwyMzgwMiwyMzgwNCwyMzgwNSwyMzgwNiwyMzgwNywyMzgwOCwyMzgwOSwyMzgxMiwyMzgxMywyMzgxNiwyMzgxNywyMzgxOCwyMzgxOSwyMzgyMCwyMzgyMSwyMzgyMywyMzgyNCwyMzgyNSwyMzgyNiwyMzgyNywyMzgyOSwy''@;'; put 'put ''MzgzMSwyMzgzMiwyMzgzMywyMzgzNCwyMzgzNiwyMzgzNywyMzgzOSwyMzg0MCwyMzg0MSwyMzg0MiwyMzg0MywyMzg0NSwyMzg0OCwyMzg1MCwyMzg1MSwyMzg1MiwyMzg1NSwyMzg1NiwyMzg1NywyMzg1OCwyMzg1OSwyMzg2MSwyMzg2MiwyMzg2MywyMzg2NCwyMzg2NSwyMzg2NiwyMzg2''@;'; put 'put ''NywyMzg2OCwyMzg3MSwyMzg3MiwyMzg3MywyMzg3NCwyMzg3NSwyMzg3NiwyMzg3NywyMzg3OCwyMzg4MCwyMzg4MSwyMzg4NSwyMzg4NiwyMzg4NywyMzg4OCwyMzg4OSwyMzg5MCwyMzg5MSwyMzg5MiwyMzg5MywyMzg5NCwyMzg5NSwyMzg5NywyMzg5OCwyMzkwMCwyMzkwMiwyMzkwMywy''@;'; put 'put ''MzkwNCwyMzkwNSwyMzkwNiwyMzkwNywyMzkwOCwyMzkwOSwyMzkxMCwyMzkxMSwyMzkxMiwyMzkxNCwyMzkxNywyMzkxOCwyMzkyMCwyMzkyMSwyMzkyMiwyMzkyMywyMzkyNSwyMzkyNiwyMzkyNywyMzkyOCwyMzkyOSwyMzkzMCwyMzkzMSwyMzkzMiwyMzkzMywyMzkzNCwyMzkzNSwyMzkz''@;'; put 'put ''NiwyMzkzNywyMzkzOSwyMzk0MCwyMzk0MSwyMzk0MiwyMzk0MywyMzk0NCwyMzk0NSwyMzk0NiwyMzk0NywyMzk0OCwyMzk0OSwyMzk1MCwyMzk1MSwyMzk1MiwyMzk1MywyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk1OCwyMzk1OSwyMzk2MCwyMzk2MiwyMzk2MywyMzk2NCwyMzk2Niwy''@;'; put 'put ''Mzk2NywyMzk2OCwyMzk2OSwyMzk3MCwyMzk3MSwyMzk3MiwyMzk3MywyMzk3NCwyMzk3NSwyMzk3NiwyMzk3NywyMzk3OCwyMzk3OSwyMzk4MCwyMzk4MSwyMzk4MiwyMzk4MywyMzk4NCwyMzk4NSwyMzk4NiwyMzk4NywyMzk4OCwyMzk4OSwyMzk5MCwyMzk5MiwyMzk5MywyMzk5NCwyMzk5''@;'; put 'put ''NSwyMzk5NiwyMzk5NywyMzk5OCwyMzk5OSwyNGUzLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0''@;'; put 'put ''MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgy''@;'; put 'put ''LDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0''@;'; put 'put ''MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2''@;'; put 'put ''LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0''@;'; put 'put ''MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYy''@;'; put 'put ''LDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0''@;'; put 'put ''Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2''@;'; put 'put ''LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0''@;'; put 'put ''Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0''@;'; put 'put ''LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0''@;'; put 'put ''NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMy''@;'; put 'put ''LDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0''@;'; put 'put ''NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQw''@;'; put 'put ''LDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0''@;'; put 'put ''NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQx''@;'; put 'put ''LDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0''@;'; put 'put ''Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3''@;'; put 'put ''LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0''@;'; put 'put ''ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEy''@;'; put 'put ''LDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0''@;'; put 'put ''OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4''@;'; put 'put ''LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1''@;'; put 'put ''MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4''@;'; put 'put ''LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1''@;'; put 'put ''MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4''@;'; put 'put ''LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1''@;'; put 'put ''MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5''@;'; put 'put ''LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1''@;'; put 'put ''MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3''@;'; put 'put ''LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1''@;'; put 'put ''NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1''@;'; put 'put ''LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1''@;'; put 'put ''NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1''@;'; put 'put ''LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1''@;'; put 'put ''NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQw''@;'; put 'put ''LDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1''@;'; put 'put ''NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2''@;'; put 'put ''LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1''@;'; put 'put ''NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4''@;'; put 'put ''LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1''@;'; put 'put ''ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0''@;'; put 'put ''LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1''@;'; put 'put ''ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQw''@;'; put 'put ''LDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1''@;'; put 'put ''OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2''@;'; put 'put ''LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2''@;'; put 'put ''MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIw''@;'; put 'put ''LDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2''@;'; put 'put ''MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjEx''@;'; put 'put ''LDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2''@;'; put 'put ''MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4''@;'; put 'put ''LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2''@;'; put 'put ''MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUz''@;'; put 'put ''LDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2''@;'; put 'put ''NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUz''@;'; put 'put ''LDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2''@;'; put 'put ''NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2''@;'; put 'put ''LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2''@;'; put 'put ''NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUy''@;'; put 'put ''LDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2''@;'; put 'put ''NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUw''@;'; put 'put ''LDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2''@;'; put 'put ''Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIz''@;'; put 'put ''LDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2''@;'; put 'put ''ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAx''@;'; put 'put ''LDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2''@;'; put 'put ''OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4''@;'; put 'put ''LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3''@;'; put 'put ''MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUy''@;'; put 'put ''LDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3''@;'; put 'put ''MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIz''@;'; put 'put ''LDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3''@;'; put 'put ''MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkw''@;'; put 'put ''LDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3''@;'; put 'put ''MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2''@;'; put 'put ''LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3''@;'; put 'put ''MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIz''@;'; put 'put ''LDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3''@;'; put 'put ''MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4''@;'; put 'put ''LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3''@;'; put 'put ''NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5''@;'; put 'put ''LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3''@;'; put 'put ''NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEy''@;'; put 'put ''LDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3''@;'; put 'put ''NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2''@;'; put 'put ''LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3''@;'; put 'put ''NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3Njkz''@;'; put 'put ''LDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3''@;'; put 'put ''NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3''@;'; put 'put ''LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3''@;'; put 'put ''ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0''@;'; put 'put ''LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3''@;'; put 'put ''OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4''@;'; put 'put ''LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4''@;'; put 'put ''MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1''@;'; put 'put ''LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4''@;'; put 'put ''MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5''@;'; put 'put ''LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4''@;'; put 'put ''MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4Mjgw''@;'; put 'put ''LDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4''@;'; put 'put ''MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYy''@;'; put 'put ''LDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4''@;'; put 'put ''NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0''@;'; put 'put ''LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4''@;'; put 'put ''NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5''@;'; put 'put ''LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4''@;'; put 'put ''NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkw''@;'; put 'put ''LDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4''@;'; put 'put ''NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4''@;'; put 'put ''LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4''@;'; put 'put ''Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3''@;'; put 'put ''LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4''@;'; put 'put ''NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3''@;'; put 'put ''LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4''@;'; put 'put ''ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODcz''@;'; put 'put ''LDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4''@;'; put 'put ''OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUx''@;'; put 'put ''LDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4''@;'; put 'put ''OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5ZTMsMjkwMDEsMjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgs''@;'; put 'put ''MjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMsMjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkwMzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkwNDcsMjkwNDksMjkwNTEsMjkwNTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkw''@;'; put 'put ''NTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkwNjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQsMjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYsMjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMs''@;'; put 'put ''MjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQsMjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkxMTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkx''@;'; put 'put ''MjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkxMzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMsMjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTMsMjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAs''@;'; put 'put ''MjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAsMjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkxNzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkxODIsMjkxODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkx''@;'; put 'put ''OTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjkyMDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQsMjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAsMjkyMTEsMjkyMTIsMjkyMTQsMjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTks''@;'; put 'put ''MjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEsMjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjkyNDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTIsMjkyNTMsMjkyNTQsMjkyNTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjky''@;'; put 'put ''NjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUsMjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYsMjkyOTcsMjkyOTksMjkzMDAsMjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgs''@;'; put 'put ''MjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQsMjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsMjkzMzksMjkzNDAsMjkzNDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkz''@;'; put 'put ''NDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkzNTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUsMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUsMjkzNzYsMjkzODEsMjkzODIsMjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgs''@;'; put 'put ''MjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMsNTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1NzYsNTg1NzcsNTg1NzgsNTg1NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1''@;'; put 'put ''ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcsNTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMsNTg2MDQsNTg2MDUsNTg2MDYsNTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEs''@;'; put 'put ''NTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAsNTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2MzEsNTg2MzIsNTg2MzMsNTg2MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2''@;'; put 'put ''MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIsNTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgsNTg2NTksNTg2NjAsNTg2NjEsMTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEs''@;'; put 'put ''MTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMTAsMTIzMTEsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3''@;'; put 'put ''NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0LDg4MDUsODczNCw4NzU3LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1''@;'; put 'put ''MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LDU4NjYyLDU4NjYzLDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4''@;'; put 'put ''LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4Njg4LDU4Njg5LDU4NjkwLDU4NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4''@;'; put 'put ''Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1LDU4NzE2LDU4NzE3LDU4NzE4LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIz''@;'; put 'put ''LDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMyLDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4NzQzLDU4NzQ0LDU4NzQ1LDU4NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4''@;'; put 'put ''NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTkyNDIsNTkyNDMsOTM1Miw5MzUzLDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5''@;'; put 'put ''LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEy''@;'; put 'put ''LDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTkyNDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUsMTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEsNTkyNDYsNTkyNDcsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4''@;'; put 'put ''NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAsNTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3NzEsNTg3NzIsNTg3NzMsNTg3NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3''@;'; put 'put ''NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIsNTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgsNTg3OTksNTg4MDAsNTg4MDEsNTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYs''@;'; put 'put ''NTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUsNTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4MjYsNTg4MjcsNTg4MjgsNTg4MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4''@;'; put 'put ''MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcsNTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgsNjUyODEsNjUyODIsNjUyODMsNjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgs''@;'; put 'put ''NjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUz''@;'; put 'put ''MTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMs''@;'; put 'put ''NjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUz''@;'; put 'put ''NzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMsNTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4NjksNTg4NzAsNTg4NzEsNTg4NzIsNTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4Nzcs''@;'; put 'put ''NTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYsNTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4OTcsNTg4OTgsNTg4OTksNTg5MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5''@;'; put 'put ''MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgsNTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQsNTg5MjUsNTg5MjYsNTg5MjcsNTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIs''@;'; put 'put ''NTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEsNTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIz''@;'; put 'put ''NjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAs''@;'; put 'put ''MTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0''@;'; put 'put ''MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEsNTkyNTIsNTkyNTMsNTkyNTQsNTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTks''@;'; put 'put ''NTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcsNTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5NjgsNTg5NjksNTg5NzAsNTg5NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5''@;'; put 'put ''NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODksNTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUsNTg5OTYsNTg5OTcsNTg5OTgsNTg5OTksNTllMyw1OTAwMSw1OTAwMiw1OTAwMyw1''@;'; put 'put ''OTAwNCw1OTAwNSw1OTAwNiw1OTAwNyw1OTAwOCw1OTAwOSw1OTAxMCw1OTAxMSw1OTAxMiw1OTAxMyw1OTAxNCw1OTAxNSw1OTAxNiw1OTAxNyw1OTAxOCw1OTAxOSw1OTAyMCw1OTAyMSw1OTAyMiw1OTAyMyw1OTAyNCw1OTAyNSw1OTAyNiw1OTAyNyw1OTAyOCw1OTAyOSw1OTAzMCw1OTAz''@;'; put 'put ''MSw1OTAzMiw1OTAzMyw1OTAzNCw1OTAzNSw1OTAzNiw1OTAzNyw1OTAzOCw1OTAzOSw1OTA0MCw1OTA0MSw1OTA0Miw1OTA0Myw1OTA0NCw1OTA0NSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwx''@;'; put 'put ''MjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4''@;'; put 'put ''OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwx''@;'; put 'put ''MjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCw1OTI2MSw1OTI2Miw1OTI2Myw1OTI2NCw1OTI2NSw1OTI2Niw1OTI2Nyw1OTI2OCw1OTA0Niw1OTA0''@;'; put 'put ''Nyw1OTA0OCw1OTA0OSw1OTA1MCw1OTA1MSw1OTA1Miw1OTA1Myw1OTA1NCw1OTA1NSw1OTA1Niw1OTA1Nyw1OTA1OCw1OTA1OSw1OTA2MCw1OTA2MSw1OTA2Miw1OTA2Myw1OTA2NCw1OTA2NSw1OTA2Niw1OTA2Nyw1OTA2OCw1OTA2OSw1OTA3MCw1OTA3MSw1OTA3Miw1OTA3Myw1OTA3NCw1''@;'; put 'put ''OTA3NSw1OTA3Niw1OTA3Nyw1OTA3OCw1OTA3OSw1OTA4MCw1OTA4MSw1OTA4Miw1OTA4Myw1OTA4NCw1OTA4NSw1OTA4Niw1OTA4Nyw1OTA4OCw1OTA4OSw1OTA5MCw1OTA5MSw1OTA5Miw1OTA5Myw1OTA5NCw1OTA5NSw1OTA5Niw1OTA5Nyw1OTA5OCw1OTA5OSw1OTEwMCw1OTEwMSw1OTEw''@;'; put 'put ''Miw1OTEwMyw1OTEwNCw1OTEwNSw1OTEwNiw1OTEwNyw1OTEwOCw1OTEwOSw1OTExMCw1OTExMSw1OTExMiw1OTExMyw1OTExNCw1OTExNSw1OTExNiw1OTExNyw1OTExOCw1OTExOSw1OTEyMCw1OTEyMSw1OTEyMiw1OTEyMyw1OTEyNCw1OTEyNSw1OTEyNiw1OTEyNyw1OTEyOCw1OTEyOSw1''@;'; put 'put ''OTEzMCw1OTEzMSw1OTEzMiw1OTEzMyw1OTEzNCw1OTEzNSw1OTEzNiw1OTEzNyw1OTEzOCw1OTEzOSw1OTE0MCw1OTE0MSw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkz''@;'; put 'put ''Nyw1OTI2OSw1OTI3MCw1OTI3MSw1OTI3Miw1OTI3Myw1OTI3NCw1OTI3NSw1OTI3Niw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw1OTI3Nyw1OTI3OCw1OTI3OSw1''@;'; put 'put ''OTI4MCw1OTI4MSw1OTI4Miw1OTI4Myw2NTA3Nyw2NTA3OCw2NTA4MSw2NTA4Miw2NTA4Nyw2NTA4OCw2NTA4NSw2NTA4Niw2NTA4OSw2NTA5MCw2NTA5MSw2NTA5Miw1OTI4NCw1OTI4NSw2NTA4Myw2NTA4NCw2NTA3OSw2NTA4MCw2NTA3Myw1OTI4Niw2NTA3NSw2NTA3Niw1OTI4Nyw1OTI4''@;'; put 'put ''OCw1OTI4OSw1OTI5MCw1OTI5MSw1OTI5Miw1OTI5Myw1OTI5NCw1OTI5NSw1OTE0Miw1OTE0Myw1OTE0NCw1OTE0NSw1OTE0Niw1OTE0Nyw1OTE0OCw1OTE0OSw1OTE1MCw1OTE1MSw1OTE1Miw1OTE1Myw1OTE1NCw1OTE1NSw1OTE1Niw1OTE1Nyw1OTE1OCw1OTE1OSw1OTE2MCw1OTE2MSw1''@;'; put 'put ''OTE2Miw1OTE2Myw1OTE2NCw1OTE2NSw1OTE2Niw1OTE2Nyw1OTE2OCw1OTE2OSw1OTE3MCw1OTE3MSw1OTE3Miw1OTE3Myw1OTE3NCw1OTE3NSw1OTE3Niw1OTE3Nyw1OTE3OCw1OTE3OSw1OTE4MCw1OTE4MSw1OTE4Miw1OTE4Myw1OTE4NCw1OTE4NSw1OTE4Niw1OTE4Nyw1OTE4OCw1OTE4''@;'; put 'put ''OSw1OTE5MCw1OTE5MSw1OTE5Miw1OTE5Myw1OTE5NCw1OTE5NSw1OTE5Niw1OTE5Nyw1OTE5OCw1OTE5OSw1OTIwMCw1OTIwMSw1OTIwMiw1OTIwMyw1OTIwNCw1OTIwNSw1OTIwNiw1OTIwNyw1OTIwOCw1OTIwOSw1OTIxMCw1OTIxMSw1OTIxMiw1OTIxMyw1OTIxNCw1OTIxNSw1OTIxNiw1''@;'; put 'put ''OTIxNyw1OTIxOCw1OTIxOSw1OTIyMCw1OTIyMSw1OTIyMiw1OTIyMyw1OTIyNCw1OTIyNSw1OTIyNiw1OTIyNyw1OTIyOCw1OTIyOSw1OTIzMCw1OTIzMSw1OTIzMiw1OTIzMyw1OTIzNCw1OTIzNSw1OTIzNiw1OTIzNywxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYs''@;'; put 'put ''MTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw1OTI5Niw1OTI5Nyw1OTI5OCw1OTI5OSw1OTMwMCw1OTMwMSw1OTMw''@;'; put 'put ''Miw1OTMwMyw1OTMwNCw1OTMwNSw1OTMwNiw1OTMwNyw1OTMwOCw1OTMwOSw1OTMxMCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMs''@;'; put 'put ''MTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw1OTMxMSw1OTMxMiw1OTMxMyw1OTMxNCw1OTMxNSw1OTMxNiw1OTMxNyw1OTMxOCw1OTMxOSw1OTMyMCw1OTMyMSw1OTMyMiw1OTMyMyw3MTQsNzE1LDcyOSw4MjExLDgyMTMsODIyOSw4MjQ1LDg0NTMs''@;'; put 'put ''ODQ1Nyw4NTk4LDg1OTksODYwMCw4NjAxLDg3MjUsODczNSw4NzM5LDg3ODYsODgwNiw4ODA3LDg4OTUsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIs''@;'; put 'put ''OTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk1ODEsOTU4Miw5NTgzLDk1ODQsOTU4NSw5NTg2LDk1ODcsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MDksOTYxMCw5NjExLDk2MTIsOTYxMyw5NjE0LDk2MTUsOTYxOSw5NjIwLDk2MjEs''@;'; put 'put ''OTY2MCw5NjYxLDk2OTgsOTY5OSw5NzAwLDk3MDEsOTczNyw4ODUzLDEyMzA2LDEyMzE3LDEyMzE4LDU5MzI0LDU5MzI1LDU5MzI2LDU5MzI3LDU5MzI4LDU5MzI5LDU5MzMwLDU5MzMxLDU5MzMyLDU5MzMzLDU5MzM0LDI1NywyMjUsNDYyLDIyNCwyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0''@;'; put 'put ''NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MiwyMzQsNTkzLDc3NDMsMzI0LDMyOCw1MDUsNjA5LDU5MzM3LDU5MzM4LDU5MzM5LDU5MzQwLDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3''@;'; put 'put ''LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEy''@;'; put 'put ''NTg1LDU5MzQxLDU5MzQyLDU5MzQzLDU5MzQ0LDU5MzQ1LDU5MzQ2LDU5MzQ3LDU5MzQ4LDU5MzQ5LDU5MzUwLDU5MzUxLDU5MzUyLDU5MzUzLDU5MzU0LDU5MzU1LDU5MzU2LDU5MzU3LDU5MzU4LDU5MzU5LDU5MzYwLDU5MzYxLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2''@;'; put 'put ''LDEyMzI3LDEyMzI4LDEyMzI5LDEyOTYzLDEzMTk4LDEzMTk5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE3LDEzMjUyLDEzMjYyLDEzMjY1LDEzMjY2LDEzMjY5LDY1MDcyLDY1NTA2LDY1NTA4LDU5MzYyLDg0ODEsMTI4NDksNTkzNjMsODIwOCw1OTM2NCw1OTM2NSw1OTM2NiwxMjU0MCwxMjQ0''@;'; put 'put ''MywxMjQ0NCwxMjU0MSwxMjU0MiwxMjI5NCwxMjQ0NSwxMjQ0Niw2NTA5Nyw2NTA5OCw2NTA5OSw2NTEwMCw2NTEwMSw2NTEwMiw2NTEwMyw2NTEwNCw2NTEwNSw2NTEwNiw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw2NTExOSw2''@;'; put 'put ''NTEyMCw2NTEyMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTEyOCw2NTEyOSw2NTEzMCw2NTEzMSwxMjM1MCwxMjI3MiwxMjI3MywxMjI3NCwxMjI3NSwxMjI3NiwxMjI3NywxMjI3OCwxMjI3OSwxMjI4MCwxMjI4MSwxMjI4MiwxMjI4MywxMjI5NSw1OTM4MCw1OTM4MSw1OTM4''@;'; put 'put ''Miw1OTM4Myw1OTM4NCw1OTM4NSw1OTM4Niw1OTM4Nyw1OTM4OCw1OTM4OSw1OTM5MCw1OTM5MSw1OTM5Miw5NDcyLDk0NzMsOTQ3NCw5NDc1LDk0NzYsOTQ3Nyw5NDc4LDk0NzksOTQ4MCw5NDgxLDk0ODIsOTQ4Myw5NDg0LDk0ODUsOTQ4Niw5NDg3LDk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5''@;'; put 'put ''Miw5NDkzLDk0OTQsOTQ5NSw5NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLDk1MDMsOTUwNCw5NTA1LDk1MDYsOTUwNyw5NTA4LDk1MDksOTUxMCw5NTExLDk1MTIsOTUxMyw5NTE0LDk1MTUsOTUxNiw5NTE3LDk1MTgsOTUxOSw5NTIwLDk1MjEsOTUyMiw5NTIzLDk1MjQsOTUy''@;'; put 'put ''NSw5NTI2LDk1MjcsOTUyOCw5NTI5LDk1MzAsOTUzMSw5NTMyLDk1MzMsOTUzNCw5NTM1LDk1MzYsOTUzNyw5NTM4LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LDU5MzkzLDU5Mzk0LDU5Mzk1LDU5Mzk2LDU5Mzk3LDU5Mzk4LDU5Mzk5LDU5NDAwLDU5NDAx''@;'; put 'put ''LDU5NDAyLDU5NDAzLDU5NDA0LDU5NDA1LDU5NDA2LDU5NDA3LDI5NDA0LDI5NDA1LDI5NDA3LDI5NDEwLDI5NDExLDI5NDEyLDI5NDEzLDI5NDE0LDI5NDE1LDI5NDE4LDI5NDE5LDI5NDI5LDI5NDMwLDI5NDMzLDI5NDM3LDI5NDM4LDI5NDM5LDI5NDQwLDI5NDQyLDI5NDQ0LDI5NDQ1LDI5''@;'; put 'put ''NDQ2LDI5NDQ3LDI5NDQ4LDI5NDQ5LDI5NDUxLDI5NDUyLDI5NDUzLDI5NDU1LDI5NDU2LDI5NDU3LDI5NDU4LDI5NDYwLDI5NDY0LDI5NDY1LDI5NDY2LDI5NDcxLDI5NDcyLDI5NDc1LDI5NDc2LDI5NDc4LDI5NDc5LDI5NDgwLDI5NDg1LDI5NDg3LDI5NDg4LDI5NDkwLDI5NDkxLDI5NDkz''@;'; put 'put ''LDI5NDk0LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTA0LDI5NTA1LDI5NTA2LDI5NTA3LDI5NTA4LDI5NTA5LDI5NTEwLDI5NTExLDI5NTEyLDI5NTEzLDI5NTE0LDI5NTE1LDI5NTE2LDI5NTE4LDI5NTE5LDI5NTIxLDI5NTIzLDI5NTI0LDI5NTI1LDI5NTI2LDI5NTI4LDI5NTI5LDI5''@;'; put 'put ''NTMwLDI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM3LDI5NTM4LDI5NTM5LDI5NTQwLDI5NTQxLDI5NTQyLDI5NTQzLDI5NTQ0LDI5NTQ1LDI5NTQ2LDI5NTQ3LDI5NTUwLDI5NTUyLDI5NTUzLDU3MzQ0LDU3MzQ1LDU3MzQ2LDU3MzQ3LDU3MzQ4LDU3MzQ5LDU3MzUwLDU3MzUx''@;'; put 'put ''LDU3MzUyLDU3MzUzLDU3MzU0LDU3MzU1LDU3MzU2LDU3MzU3LDU3MzU4LDU3MzU5LDU3MzYwLDU3MzYxLDU3MzYyLDU3MzYzLDU3MzY0LDU3MzY1LDU3MzY2LDU3MzY3LDU3MzY4LDU3MzY5LDU3MzcwLDU3MzcxLDU3MzcyLDU3MzczLDU3Mzc0LDU3Mzc1LDU3Mzc2LDU3Mzc3LDU3Mzc4LDU3''@;'; put 'put ''Mzc5LDU3MzgwLDU3MzgxLDU3MzgyLDU3MzgzLDU3Mzg0LDU3Mzg1LDU3Mzg2LDU3Mzg3LDU3Mzg4LDU3Mzg5LDU3MzkwLDU3MzkxLDU3MzkyLDU3MzkzLDU3Mzk0LDU3Mzk1LDU3Mzk2LDU3Mzk3LDU3Mzk4LDU3Mzk5LDU3NDAwLDU3NDAxLDU3NDAyLDU3NDAzLDU3NDA0LDU3NDA1LDU3NDA2''@;'; put 'put ''LDU3NDA3LDU3NDA4LDU3NDA5LDU3NDEwLDU3NDExLDU3NDEyLDU3NDEzLDU3NDE0LDU3NDE1LDU3NDE2LDU3NDE3LDU3NDE4LDU3NDE5LDU3NDIwLDU3NDIxLDU3NDIyLDU3NDIzLDU3NDI0LDU3NDI1LDU3NDI2LDU3NDI3LDU3NDI4LDU3NDI5LDU3NDMwLDU3NDMxLDU3NDMyLDU3NDMzLDU3''@;'; put 'put ''NDM0LDU3NDM1LDU3NDM2LDU3NDM3LDI5NTU0LDI5NTU1LDI5NTU2LDI5NTU3LDI5NTU4LDI5NTU5LDI5NTYwLDI5NTYxLDI5NTYyLDI5NTYzLDI5NTY0LDI5NTY1LDI5NTY3LDI5NTY4LDI5NTY5LDI5NTcwLDI5NTcxLDI5NTczLDI5NTc0LDI5NTc2LDI5NTc4LDI5NTgwLDI5NTgxLDI5NTgz''@;'; put 'put ''LDI5NTg0LDI5NTg2LDI5NTg3LDI5NTg4LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTkzLDI5NTk0LDI5NTk2LDI5NTk3LDI5NTk4LDI5NjAwLDI5NjAxLDI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5NjA4LDI5NjEwLDI5NjEyLDI5NjEzLDI5NjE3LDI5NjIwLDI5NjIxLDI5NjIyLDI5''@;'; put 'put ''NjI0LDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMwLDI5NjMxLDI5NjMzLDI5NjM1LDI5NjM2LDI5NjM3LDI5NjM4LDI5NjM5LDI5NjQzLDI5NjQ0LDI5NjQ2LDI5NjUwLDI5NjUxLDI5NjUyLDI5NjUzLDI5NjU0LDI5NjU1LDI5NjU2LDI5NjU4LDI5NjU5LDI5NjYwLDI5NjYxLDI5NjYzLDI5NjY1''@;'; put 'put ''LDI5NjY2LDI5NjY3LDI5NjY4LDI5NjcwLDI5NjcyLDI5Njc0LDI5Njc1LDI5Njc2LDI5Njc4LDI5Njc5LDI5NjgwLDI5NjgxLDI5NjgzLDI5Njg0LDI5Njg1LDI5Njg2LDI5Njg3LDU3NDM4LDU3NDM5LDU3NDQwLDU3NDQxLDU3NDQyLDU3NDQzLDU3NDQ0LDU3NDQ1LDU3NDQ2LDU3NDQ3LDU3''@;'; put 'put ''NDQ4LDU3NDQ5LDU3NDUwLDU3NDUxLDU3NDUyLDU3NDUzLDU3NDU0LDU3NDU1LDU3NDU2LDU3NDU3LDU3NDU4LDU3NDU5LDU3NDYwLDU3NDYxLDU3NDYyLDU3NDYzLDU3NDY0LDU3NDY1LDU3NDY2LDU3NDY3LDU3NDY4LDU3NDY5LDU3NDcwLDU3NDcxLDU3NDcyLDU3NDczLDU3NDc0LDU3NDc1''@;'; put 'put ''LDU3NDc2LDU3NDc3LDU3NDc4LDU3NDc5LDU3NDgwLDU3NDgxLDU3NDgyLDU3NDgzLDU3NDg0LDU3NDg1LDU3NDg2LDU3NDg3LDU3NDg4LDU3NDg5LDU3NDkwLDU3NDkxLDU3NDkyLDU3NDkzLDU3NDk0LDU3NDk1LDU3NDk2LDU3NDk3LDU3NDk4LDU3NDk5LDU3NTAwLDU3NTAxLDU3NTAyLDU3''@;'; put 'put ''NTAzLDU3NTA0LDU3NTA1LDU3NTA2LDU3NTA3LDU3NTA4LDU3NTA5LDU3NTEwLDU3NTExLDU3NTEyLDU3NTEzLDU3NTE0LDU3NTE1LDU3NTE2LDU3NTE3LDU3NTE4LDU3NTE5LDU3NTIwLDU3NTIxLDU3NTIyLDU3NTIzLDU3NTI0LDU3NTI1LDU3NTI2LDU3NTI3LDU3NTI4LDU3NTI5LDU3NTMw''@;'; put 'put ''LDU3NTMxLDI5Njg4LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkyLDI5NjkzLDI5Njk0LDI5Njk1LDI5Njk2LDI5Njk3LDI5Njk4LDI5NzAwLDI5NzAzLDI5NzA0LDI5NzA3LDI5NzA4LDI5NzA5LDI5NzEwLDI5NzEzLDI5NzE0LDI5NzE1LDI5NzE2LDI5NzE3LDI5NzE4LDI5NzE5LDI5NzIwLDI5''@;'; put 'put ''NzIxLDI5NzI0LDI5NzI1LDI5NzI2LDI5NzI3LDI5NzI4LDI5NzI5LDI5NzMxLDI5NzMyLDI5NzM1LDI5NzM3LDI5NzM5LDI5NzQxLDI5NzQzLDI5NzQ1LDI5NzQ2LDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0LDI5NzU1LDI5NzU3LDI5NzU4LDI5NzU5LDI5NzYwLDI5NzYyLDI5NzYzLDI5NzY0''@;'; put 'put ''LDI5NzY1LDI5NzY2LDI5NzY3LDI5NzY4LDI5NzY5LDI5NzcwLDI5NzcxLDI5NzcyLDI5NzczLDI5Nzc0LDI5Nzc1LDI5Nzc2LDI5Nzc3LDI5Nzc4LDI5Nzc5LDI5NzgwLDI5NzgyLDI5Nzg0LDI5Nzg5LDI5NzkyLDI5NzkzLDI5Nzk0LDI5Nzk1LDI5Nzk2LDI5Nzk3LDI5Nzk4LDI5Nzk5LDI5''@;'; put 'put ''ODAwLDI5ODAxLDI5ODAyLDI5ODAzLDI5ODA0LDI5ODA2LDI5ODA3LDI5ODA5LDI5ODEwLDI5ODExLDI5ODEyLDI5ODEzLDI5ODE2LDI5ODE3LDI5ODE4LDU3NTMyLDU3NTMzLDU3NTM0LDU3NTM1LDU3NTM2LDU3NTM3LDU3NTM4LDU3NTM5LDU3NTQwLDU3NTQxLDU3NTQyLDU3NTQzLDU3NTQ0''@;'; put 'put ''LDU3NTQ1LDU3NTQ2LDU3NTQ3LDU3NTQ4LDU3NTQ5LDU3NTUwLDU3NTUxLDU3NTUyLDU3NTUzLDU3NTU0LDU3NTU1LDU3NTU2LDU3NTU3LDU3NTU4LDU3NTU5LDU3NTYwLDU3NTYxLDU3NTYyLDU3NTYzLDU3NTY0LDU3NTY1LDU3NTY2LDU3NTY3LDU3NTY4LDU3NTY5LDU3NTcwLDU3NTcxLDU3''@;'; put 'put ''NTcyLDU3NTczLDU3NTc0LDU3NTc1LDU3NTc2LDU3NTc3LDU3NTc4LDU3NTc5LDU3NTgwLDU3NTgxLDU3NTgyLDU3NTgzLDU3NTg0LDU3NTg1LDU3NTg2LDU3NTg3LDU3NTg4LDU3NTg5LDU3NTkwLDU3NTkxLDU3NTkyLDU3NTkzLDU3NTk0LDU3NTk1LDU3NTk2LDU3NTk3LDU3NTk4LDU3NTk5''@;'; put 'put ''LDU3NjAwLDU3NjAxLDU3NjAyLDU3NjAzLDU3NjA0LDU3NjA1LDU3NjA2LDU3NjA3LDU3NjA4LDU3NjA5LDU3NjEwLDU3NjExLDU3NjEyLDU3NjEzLDU3NjE0LDU3NjE1LDU3NjE2LDU3NjE3LDU3NjE4LDU3NjE5LDU3NjIwLDU3NjIxLDU3NjIyLDU3NjIzLDU3NjI0LDU3NjI1LDI5ODE5LDI5''@;'; put 'put ''ODIwLDI5ODIxLDI5ODIzLDI5ODI2LDI5ODI4LDI5ODI5LDI5ODMwLDI5ODMyLDI5ODMzLDI5ODM0LDI5ODM2LDI5ODM3LDI5ODM5LDI5ODQxLDI5ODQyLDI5ODQzLDI5ODQ0LDI5ODQ1LDI5ODQ2LDI5ODQ3LDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUxLDI5ODUzLDI5ODU1LDI5ODU2LDI5ODU3''@;'; put 'put ''LDI5ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODY2LDI5ODY3LDI5ODY4LDI5ODY5LDI5ODcwLDI5ODcxLDI5ODcyLDI5ODczLDI5ODc0LDI5ODc1LDI5ODc2LDI5ODc3LDI5ODc4LDI5ODc5LDI5ODgwLDI5ODgxLDI5ODgzLDI5ODg0LDI5ODg1LDI5ODg2LDI5ODg3LDI5ODg4LDI5''@;'; put 'put ''ODg5LDI5ODkwLDI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5ODk1LDI5ODk2LDI5ODk3LDI5ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAyLDI5OTAzLDI5OTA0LDI5OTA1LDI5OTA3LDI5OTA4LDI5OTA5LDI5OTEwLDI5OTExLDI5OTEyLDI5OTEzLDI5OTE0LDI5OTE1LDI5OTE3LDI5OTE5''@;'; put 'put ''LDI5OTIxLDI5OTI1LDI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5OTMyLDI5OTMzLDI5OTM2LDI5OTM3LDI5OTM4LDU3NjI2LDU3NjI3LDU3NjI4LDU3NjI5LDU3NjMwLDU3NjMxLDU3NjMyLDU3NjMzLDU3NjM0LDU3NjM1LDU3NjM2LDU3NjM3LDU3NjM4LDU3NjM5LDU3NjQwLDU3''@;'; put 'put ''NjQxLDU3NjQyLDU3NjQzLDU3NjQ0LDU3NjQ1LDU3NjQ2LDU3NjQ3LDU3NjQ4LDU3NjQ5LDU3NjUwLDU3NjUxLDU3NjUyLDU3NjUzLDU3NjU0LDU3NjU1LDU3NjU2LDU3NjU3LDU3NjU4LDU3NjU5LDU3NjYwLDU3NjYxLDU3NjYyLDU3NjYzLDU3NjY0LDU3NjY1LDU3NjY2LDU3NjY3LDU3NjY4''@;'; put 'put ''LDU3NjY5LDU3NjcwLDU3NjcxLDU3NjcyLDU3NjczLDU3Njc0LDU3Njc1LDU3Njc2LDU3Njc3LDU3Njc4LDU3Njc5LDU3NjgwLDU3NjgxLDU3NjgyLDU3NjgzLDU3Njg0LDU3Njg1LDU3Njg2LDU3Njg3LDU3Njg4LDU3Njg5LDU3NjkwLDU3NjkxLDU3NjkyLDU3NjkzLDU3Njk0LDU3Njk1LDU3''@;'; put 'put ''Njk2LDU3Njk3LDU3Njk4LDU3Njk5LDU3NzAwLDU3NzAxLDU3NzAyLDU3NzAzLDU3NzA0LDU3NzA1LDU3NzA2LDU3NzA3LDU3NzA4LDU3NzA5LDU3NzEwLDU3NzExLDU3NzEyLDU3NzEzLDU3NzE0LDU3NzE1LDU3NzE2LDU3NzE3LDU3NzE4LDU3NzE5LDI5OTM5LDI5OTQxLDI5OTQ0LDI5OTQ1''@;'; put 'put ''LDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTQ5LDI5OTUwLDI5OTUyLDI5OTUzLDI5OTU0LDI5OTU1LDI5OTU3LDI5OTU4LDI5OTU5LDI5OTYwLDI5OTYxLDI5OTYyLDI5OTYzLDI5OTY0LDI5OTY2LDI5OTY4LDI5OTcwLDI5OTcyLDI5OTczLDI5OTc0LDI5OTc1LDI5OTc5LDI5OTgxLDI5OTgyLDI5''@;'; put 'put ''OTg0LDI5OTg1LDI5OTg2LDI5OTg3LDI5OTg4LDI5OTkwLDI5OTkxLDI5OTk0LDI5OTk4LDMwMDA0LDMwMDA2LDMwMDA5LDMwMDEyLDMwMDEzLDMwMDE1LDMwMDE3LDMwMDE4LDMwMDE5LDMwMDIwLDMwMDIyLDMwMDIzLDMwMDI1LDMwMDI2LDMwMDI5LDMwMDMyLDMwMDMzLDMwMDM0LDMwMDM1''@;'; put 'put ''LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQ1LDMwMDQ2LDMwMDQ3LDMwMDQ4LDMwMDQ5LDMwMDUwLDMwMDUxLDMwMDUyLDMwMDU1LDMwMDU2LDMwMDU3LDMwMDU5LDMwMDYwLDMwMDYxLDMwMDYyLDMwMDYzLDMwMDY0LDMwMDY1LDMwMDY3LDMwMDY5LDMwMDcwLDMwMDcxLDMwMDc0LDMw''@;'; put 'put ''MDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgwLDMwMDgxLDMwMDgyLDMwMDg0LDMwMDg1LDMwMDg3LDU3NzIwLDU3NzIxLDU3NzIyLDU3NzIzLDU3NzI0LDU3NzI1LDU3NzI2LDU3NzI3LDU3NzI4LDU3NzI5LDU3NzMwLDU3NzMxLDU3NzMyLDU3NzMzLDU3NzM0LDU3NzM1LDU3NzM2LDU3NzM3''@;'; put 'put ''LDU3NzM4LDU3NzM5LDU3NzQwLDU3NzQxLDU3NzQyLDU3NzQzLDU3NzQ0LDU3NzQ1LDU3NzQ2LDU3NzQ3LDU3NzQ4LDU3NzQ5LDU3NzUwLDU3NzUxLDU3NzUyLDU3NzUzLDU3NzU0LDU3NzU1LDU3NzU2LDU3NzU3LDU3NzU4LDU3NzU5LDU3NzYwLDU3NzYxLDU3NzYyLDU3NzYzLDU3NzY0LDU3''@;'; put 'put ''NzY1LDU3NzY2LDU3NzY3LDU3NzY4LDU3NzY5LDU3NzcwLDU3NzcxLDU3NzcyLDU3NzczLDU3Nzc0LDU3Nzc1LDU3Nzc2LDU3Nzc3LDU3Nzc4LDU3Nzc5LDU3NzgwLDU3NzgxLDU3NzgyLDU3NzgzLDU3Nzg0LDU3Nzg1LDU3Nzg2LDU3Nzg3LDU3Nzg4LDU3Nzg5LDU3NzkwLDU3NzkxLDU3Nzky''@;'; put 'put ''LDU3NzkzLDU3Nzk0LDU3Nzk1LDU3Nzk2LDU3Nzk3LDU3Nzk4LDU3Nzk5LDU3ODAwLDU3ODAxLDU3ODAyLDU3ODAzLDU3ODA0LDU3ODA1LDU3ODA2LDU3ODA3LDU3ODA4LDU3ODA5LDU3ODEwLDU3ODExLDU3ODEyLDU3ODEzLDMwMDg4LDMwMDg5LDMwMDkwLDMwMDkyLDMwMDkzLDMwMDk0LDMw''@;'; put 'put ''MDk2LDMwMDk5LDMwMTAxLDMwMTA0LDMwMTA3LDMwMTA4LDMwMTEwLDMwMTE0LDMwMTE4LDMwMTE5LDMwMTIwLDMwMTIxLDMwMTIyLDMwMTI1LDMwMTM0LDMwMTM1LDMwMTM4LDMwMTM5LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTUwLDMwMTU1LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTYwLDMwMTYx''@;'; put 'put ''LDMwMTYzLDMwMTY3LDMwMTY5LDMwMTcwLDMwMTcyLDMwMTczLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgxLDMwMTg1LDMwMTg4LDMwMTg5LDMwMTkwLDMwMTkxLDMwMTk0LDMwMTk1LDMwMTk3LDMwMTk4LDMwMTk5LDMwMjAwLDMwMjAyLDMwMjAzLDMwMjA1LDMwMjA2LDMwMjEwLDMwMjEyLDMw''@;'; put 'put ''MjE0LDMwMjE1LDMwMjE2LDMwMjE3LDMwMjE5LDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI1LDMwMjI2LDMwMjI3LDMwMjI4LDMwMjMwLDMwMjM0LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQxLDMwMjQzLDMwMjQ3LDMwMjQ4LDMwMjUyLDMwMjU0LDMwMjU1LDMwMjU3LDMwMjU4LDMwMjYyLDMwMjYz''@;'; put 'put ''LDMwMjY1LDMwMjY2LDMwMjY3LDMwMjY5LDMwMjczLDMwMjc0LDMwMjc2LDU3ODE0LDU3ODE1LDU3ODE2LDU3ODE3LDU3ODE4LDU3ODE5LDU3ODIwLDU3ODIxLDU3ODIyLDU3ODIzLDU3ODI0LDU3ODI1LDU3ODI2LDU3ODI3LDU3ODI4LDU3ODI5LDU3ODMwLDU3ODMxLDU3ODMyLDU3ODMzLDU3''@;'; put 'put ''ODM0LDU3ODM1LDU3ODM2LDU3ODM3LDU3ODM4LDU3ODM5LDU3ODQwLDU3ODQxLDU3ODQyLDU3ODQzLDU3ODQ0LDU3ODQ1LDU3ODQ2LDU3ODQ3LDU3ODQ4LDU3ODQ5LDU3ODUwLDU3ODUxLDU3ODUyLDU3ODUzLDU3ODU0LDU3ODU1LDU3ODU2LDU3ODU3LDU3ODU4LDU3ODU5LDU3ODYwLDU3ODYx''@;'; put 'put ''LDU3ODYyLDU3ODYzLDU3ODY0LDU3ODY1LDU3ODY2LDU3ODY3LDU3ODY4LDU3ODY5LDU3ODcwLDU3ODcxLDU3ODcyLDU3ODczLDU3ODc0LDU3ODc1LDU3ODc2LDU3ODc3LDU3ODc4LDU3ODc5LDU3ODgwLDU3ODgxLDU3ODgyLDU3ODgzLDU3ODg0LDU3ODg1LDU3ODg2LDU3ODg3LDU3ODg4LDU3''@;'; put 'put ''ODg5LDU3ODkwLDU3ODkxLDU3ODkyLDU3ODkzLDU3ODk0LDU3ODk1LDU3ODk2LDU3ODk3LDU3ODk4LDU3ODk5LDU3OTAwLDU3OTAxLDU3OTAyLDU3OTAzLDU3OTA0LDU3OTA1LDU3OTA2LDU3OTA3LDMwMjc3LDMwMjc4LDMwMjc5LDMwMjgwLDMwMjgxLDMwMjgyLDMwMjgzLDMwMjg2LDMwMjg3''@;'; put 'put ''LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjkzLDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4LDMwMjk5LDMwMzAxLDMwMzAzLDMwMzA0LDMwMzA1LDMwMzA2LDMwMzA4LDMwMzA5LDMwMzEwLDMwMzExLDMwMzEyLDMwMzEzLDMwMzE0LDMwMzE2LDMwMzE3LDMwMzE4LDMwMzIwLDMwMzIxLDMw''@;'; put 'put ''MzIyLDMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI5LDMwMzMwLDMwMzMyLDMwMzM1LDMwMzM2LDMwMzM3LDMwMzM5LDMwMzQxLDMwMzQ1LDMwMzQ2LDMwMzQ4LDMwMzQ5LDMwMzUxLDMwMzUyLDMwMzU0LDMwMzU2LDMwMzU3LDMwMzU5LDMwMzYwLDMwMzYyLDMwMzYzLDMwMzY0''@;'; put 'put ''LDMwMzY1LDMwMzY2LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLDMwMzcxLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc3LDMwMzc4LDMwMzc5LDMwMzgwLDMwMzgxLDMwMzgzLDMwMzg0LDMwMzg3LDMwMzg5LDMwMzkwLDMwMzkxLDMwMzkyLDMwMzkzLDMwMzk0LDMwMzk1LDMwMzk2LDMw''@;'; put 'put ''Mzk3LDMwMzk4LDMwNDAwLDMwNDAxLDMwNDAzLDIxODM0LDM4NDYzLDIyNDY3LDI1Mzg0LDIxNzEwLDIxNzY5LDIxNjk2LDMwMzUzLDMwMjg0LDM0MTA4LDMwNzAyLDMzNDA2LDMwODYxLDI5MjMzLDM4NTUyLDM4Nzk3LDI3Njg4LDIzNDMzLDIwNDc0LDI1MzUzLDI2MjYzLDIzNzM2LDMzMDE4''@;'; put 'put ''LDI2Njk2LDMyOTQyLDI2MTE0LDMwNDE0LDIwOTg1LDI1OTQyLDI5MTAwLDMyNzUzLDM0OTQ4LDIwNjU4LDIyODg1LDI1MDM0LDI4NTk1LDMzNDUzLDI1NDIwLDI1MTcwLDIxNDg1LDIxNTQzLDMxNDk0LDIwODQzLDMwMTE2LDI0MDUyLDI1MzAwLDM2Mjk5LDM4Nzc0LDI1MjI2LDMyNzkzLDIy''@;'; put 'put ''MzY1LDM4NzEyLDMyNjEwLDI5MjQwLDMwMzMzLDI2NTc1LDMwMzM0LDI1NjcwLDIwMzM2LDM2MTMzLDI1MzA4LDMxMjU1LDI2MDAxLDI5Njc3LDI1NjQ0LDI1MjAzLDMzMzI0LDM5MDQxLDI2NDk1LDI5MjU2LDI1MTk4LDI1MjkyLDIwMjc2LDI5OTIzLDIxMzIyLDIxMTUwLDMyNDU4LDM3MDMw''@;'; put 'put ''LDI0MTEwLDI2NzU4LDI3MDM2LDMzMTUyLDMyNDY1LDI2ODM0LDMwOTE3LDM0NDQ0LDM4MjI1LDIwNjIxLDM1ODc2LDMzNTAyLDMyOTkwLDIxMjUzLDM1MDkwLDIxMDkzLDMwNDA0LDMwNDA3LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE5LDMwNDIxLDMwNDI1LDMwNDI2LDMwNDI4LDMwNDI5LDMw''@;'; put 'put ''NDMwLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM4LDMwNDM5LDMwNDQwLDMwNDQxLDMwNDQyLDMwNDQzLDMwNDQ0LDMwNDQ1LDMwNDQ4LDMwNDUxLDMwNDUzLDMwNDU0LDMwNDU1LDMwNDU4LDMwNDU5LDMwNDYxLDMwNDYzLDMwNDY0LDMwNDY2LDMwNDY3LDMwNDY5LDMwNDcw''@;'; put 'put ''LDMwNDc0LDMwNDc2LDMwNDc4LDMwNDc5LDMwNDgwLDMwNDgxLDMwNDgyLDMwNDgzLDMwNDg0LDMwNDg1LDMwNDg2LDMwNDg3LDMwNDg4LDMwNDkxLDMwNDkyLDMwNDkzLDMwNDk0LDMwNDk3LDMwNDk5LDMwNTAwLDMwNTAxLDMwNTAzLDMwNTA2LDMwNTA3LDMwNTA4LDMwNTEwLDMwNTEyLDMw''@;'; put 'put ''NTEzLDMwNTE0LDMwNTE1LDMwNTE2LDMwNTIxLDMwNTIzLDMwNTI1LDMwNTI2LDMwNTI3LDMwNTMwLDMwNTMyLDMwNTMzLDMwNTM0LDMwNTM2LDMwNTM3LDMwNTM4LDMwNTM5LDMwNTQwLDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTQ3LDMwNTQ4LDMwNTQ5LDMwNTUwLDMwNTUxLDMwNTUy''@;'; put 'put ''LDMwNTUzLDMwNTU2LDM0MTgwLDM4NjQ5LDIwNDQ1LDIyNTYxLDM5MjgxLDIzNDUzLDI1MjY1LDI1MjUzLDI2MjkyLDM1OTYxLDQwMDc3LDI5MTkwLDI2NDc5LDMwODY1LDI0NzU0LDIxMzI5LDIxMjcxLDM2NzQ0LDMyOTcyLDM2MTI1LDM4MDQ5LDIwNDkzLDI5Mzg0LDIyNzkxLDI0ODExLDI4''@;'; put 'put ''OTUzLDM0OTg3LDIyODY4LDMzNTE5LDI2NDEyLDMxNTI4LDIzODQ5LDMyNTAzLDI5OTk3LDI3ODkzLDM2NDU0LDM2ODU2LDM2OTI0LDQwNzYzLDI3NjA0LDM3MTQ1LDMxNTA4LDI0NDQ0LDMwODg3LDM0MDA2LDM0MTA5LDI3NjA1LDI3NjA5LDI3NjA2LDI0MDY1LDI0MTk5LDMwMjAxLDM4Mzgx''@;'; put 'put ''LDI1OTQ5LDI0MzMwLDI0NTE3LDM2NzY3LDIyNzIxLDMzMjE4LDM2OTkxLDM4NDkxLDM4ODI5LDM2NzkzLDMyNTM0LDM2MTQwLDI1MTUzLDIwNDE1LDIxNDY0LDIxMzQyLDM2Nzc2LDM2Nzc3LDM2Nzc5LDM2OTQxLDI2NjMxLDI0NDI2LDMzMTc2LDM0OTIwLDQwMTUwLDI0OTcxLDIxMDM1LDMw''@;'; put 'put ''MjUwLDI0NDI4LDI1OTk2LDI4NjI2LDI4MzkyLDIzNDg2LDI1NjcyLDIwODUzLDIwOTEyLDI2NTY0LDE5OTkzLDMxMTc3LDM5MjkyLDI4ODUxLDMwNTU3LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTY0LDMwNTY3LDMwNTY5LDMwNTcwLDMwNTczLDMwNTc0LDMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4''@;'; put 'put ''LDMwNTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg2LDMwNTg3LDMwNTg4LDMwNTkzLDMwNTk0LDMwNTk1LDMwNTk4LDMwNTk5LDMwNjAwLDMwNjAxLDMwNjAyLDMwNjAzLDMwNjA3LDMwNjA4LDMwNjExLDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE1LDMwNjE2LDMwNjE3LDMw''@;'; put 'put ''NjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLDMwNjI1LDMwNjI3LDMwNjI4LDMwNjMwLDMwNjMyLDMwNjM1LDMwNjM3LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQyLDMwNjQ0LDMwNjQ2LDMwNjQ3LDMwNjQ4LDMwNjQ5LDMwNjUwLDMwNjUyLDMwNjU0LDMwNjU2LDMwNjU3LDMwNjU4LDMwNjU5''@;'; put 'put ''LDMwNjYwLDMwNjYxLDMwNjYyLDMwNjYzLDMwNjY0LDMwNjY1LDMwNjY2LDMwNjY3LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjcyLDMwNjczLDMwNjc0LDMwNjc1LDMwNjc2LDMwNjc3LDMwNjc4LDMwNjgwLDMwNjgxLDMwNjgyLDMwNjg1LDMwNjg2LDMwNjg3LDMwNjg4LDMwNjg5LDMwNjkyLDMw''@;'; put 'put ''MTQ5LDI0MTgyLDI5NjI3LDMzNzYwLDI1NzczLDI1MzIwLDM4MDY5LDI3ODc0LDIxMzM4LDIxMTg3LDI1NjE1LDM4MDgyLDMxNjM2LDIwMjcxLDI0MDkxLDMzMzM0LDMzMDQ2LDMzMTYyLDI4MTk2LDI3ODUwLDM5NTM5LDI1NDI5LDIxMzQwLDIxNzU0LDM0OTE3LDIyNDk2LDE5OTgxLDI0MDY3''@;'; put 'put ''LDI3NDkzLDMxODA3LDM3MDk2LDI0NTk4LDI1ODMwLDI5NDY4LDM1MDA5LDI2NDQ4LDI1MTY1LDM2MTMwLDMwNTcyLDM2MzkzLDM3MzE5LDI0NDI1LDMzNzU2LDM0MDgxLDM5MTg0LDIxNDQyLDM0NDUzLDI3NTMxLDI0ODEzLDI0ODA4LDI4Nzk5LDMzNDg1LDMzMzI5LDIwMTc5LDI3ODE1LDM0''@;'; put 'put ''MjU1LDI1ODA1LDMxOTYxLDI3MTMzLDI2MzYxLDMzNjA5LDIxMzk3LDMxNTc0LDIwMzkxLDIwODc2LDI3OTc5LDIzNjE4LDM2NDYxLDI1NTU0LDIxNDQ5LDMzNTgwLDMzNTkwLDI2NTk3LDMwOTAwLDI1NjYxLDIzNTE5LDIzNzAwLDI0MDQ2LDM1ODE1LDI1Mjg2LDI2NjEyLDM1OTYyLDI1NjAw''@;'; put 'put ''LDI1NTMwLDM0NjMzLDM5MzA3LDM1ODYzLDMyNTQ0LDM4MTMwLDIwMTM1LDM4NDE2LDM5MDc2LDI2MTI0LDI5NDYyLDMwNjk0LDMwNjk2LDMwNjk4LDMwNzAzLDMwNzA0LDMwNzA1LDMwNzA2LDMwNzA4LDMwNzA5LDMwNzExLDMwNzEzLDMwNzE0LDMwNzE1LDMwNzE2LDMwNzIzLDMwNzI0LDMw''@;'; put 'put ''NzI1LDMwNzI2LDMwNzI3LDMwNzI4LDMwNzMwLDMwNzMxLDMwNzM0LDMwNzM1LDMwNzM2LDMwNzM5LDMwNzQxLDMwNzQ1LDMwNzQ3LDMwNzUwLDMwNzUyLDMwNzUzLDMwNzU0LDMwNzU2LDMwNzYwLDMwNzYyLDMwNzYzLDMwNzY2LDMwNzY3LDMwNzY5LDMwNzcwLDMwNzcxLDMwNzczLDMwNzc0''@;'; put 'put ''LDMwNzgxLDMwNzgzLDMwNzg1LDMwNzg2LDMwNzg3LDMwNzg4LDMwNzkwLDMwNzkyLDMwNzkzLDMwNzk0LDMwNzk1LDMwNzk3LDMwNzk5LDMwODAxLDMwODAzLDMwODA0LDMwODA4LDMwODA5LDMwODEwLDMwODExLDMwODEyLDMwODE0LDMwODE1LDMwODE2LDMwODE3LDMwODE4LDMwODE5LDMw''@;'; put 'put ''ODIwLDMwODIxLDMwODIyLDMwODIzLDMwODI0LDMwODI1LDMwODMxLDMwODMyLDMwODMzLDMwODM0LDMwODM1LDMwODM2LDMwODM3LDMwODM4LDMwODQwLDMwODQxLDMwODQyLDMwODQzLDMwODQ1LDMwODQ2LDMwODQ3LDMwODQ4LDMwODQ5LDMwODUwLDMwODUxLDIyMzMwLDIzNTgxLDI0MTIw''@;'; put 'put ''LDM4MjcxLDIwNjA3LDMyOTI4LDIxMzc4LDI1OTUwLDMwMDIxLDIxODA5LDIwNTEzLDM2MjI5LDI1MjIwLDM4MDQ2LDI2Mzk3LDIyMDY2LDI4NTI2LDI0MDM0LDIxNTU3LDI4ODE4LDM2NzEwLDI1MTk5LDI1NzY0LDI1NTA3LDI0NDQzLDI4NTUyLDM3MTA4LDMzMjUxLDM2Nzg0LDIzNTc2LDI2''@;'; put 'put ''MjE2LDI0NTYxLDI3Nzg1LDM4NDcyLDM2MjI1LDM0OTI0LDI1NzQ1LDMxMjE2LDIyNDc4LDI3MjI1LDI1MTA0LDIxNTc2LDIwMDU2LDMxMjQzLDI0ODA5LDI4NTQ4LDM1ODAyLDI1MjE1LDM2ODk0LDM5NTYzLDMxMjA0LDIxNTA3LDMwMTk2LDI1MzQ1LDIxMjczLDI3NzQ0LDM2ODMxLDI0MzQ3''@;'; put 'put ''LDM5NTM2LDMyODI3LDQwODMxLDIwMzYwLDIzNjEwLDM2MTk2LDMyNzA5LDI2MDIxLDI4ODYxLDIwODA1LDIwOTE0LDM0NDExLDIzODE1LDIzNDU2LDI1Mjc3LDM3MjI4LDMwMDY4LDM2MzY0LDMxMjY0LDI0ODMzLDMxNjA5LDIwMTY3LDMyNTA0LDMwNTk3LDE5OTg1LDMzMjYxLDIxMDIxLDIw''@;'; put 'put ''OTg2LDI3MjQ5LDIxNDE2LDM2NDg3LDM4MTQ4LDM4NjA3LDI4MzUzLDM4NTAwLDI2OTcwLDMwODUyLDMwODUzLDMwODU0LDMwODU2LDMwODU4LDMwODU5LDMwODYzLDMwODY0LDMwODY2LDMwODY4LDMwODY5LDMwODcwLDMwODczLDMwODc3LDMwODc4LDMwODgwLDMwODgyLDMwODg0LDMwODg2''@;'; put 'put ''LDMwODg4LDMwODg5LDMwODkwLDMwODkxLDMwODkyLDMwODkzLDMwODk0LDMwODk1LDMwOTAxLDMwOTAyLDMwOTAzLDMwOTA0LDMwOTA2LDMwOTA3LDMwOTA4LDMwOTA5LDMwOTExLDMwOTEyLDMwOTE0LDMwOTE1LDMwOTE2LDMwOTE4LDMwOTE5LDMwOTIwLDMwOTI0LDMwOTI1LDMwOTI2LDMw''@;'; put 'put ''OTI3LDMwOTI5LDMwOTMwLDMwOTMxLDMwOTM0LDMwOTM1LDMwOTM2LDMwOTM4LDMwOTM5LDMwOTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTQ2LDMwOTQ3LDMwOTQ4LDMwOTQ5LDMwOTUwLDMwOTUxLDMwOTUzLDMwOTU0LDMwOTU1LDMwOTU3LDMwOTU4LDMwOTU5LDMwOTYw''@;'; put 'put ''LDMwOTYxLDMwOTYzLDMwOTY1LDMwOTY2LDMwOTY4LDMwOTY5LDMwOTcxLDMwOTcyLDMwOTczLDMwOTc0LDMwOTc1LDMwOTc2LDMwOTc4LDMwOTc5LDMwOTgwLDMwOTgyLDMwOTgzLDMwOTg0LDMwOTg1LDMwOTg2LDMwOTg3LDMwOTg4LDMwNzg0LDIwNjQ4LDMwNjc5LDI1NjE2LDM1MzAyLDIy''@;'; put 'put ''Nzg4LDI1NTcxLDI0MDI5LDMxMzU5LDI2OTQxLDIwMjU2LDMzMzM3LDIxOTEyLDIwMDE4LDMwMTI2LDMxMzgzLDI0MTYyLDI0MjAyLDM4MzgzLDIxMDE5LDIxNTYxLDI4ODEwLDI1NDYyLDM4MTgwLDIyNDAyLDI2MTQ5LDI2OTQzLDM3MjU1LDIxNzY3LDI4MTQ3LDMyNDMxLDM0ODUwLDI1MTM5''@;'; put 'put ''LDMyNDk2LDMwMTMzLDMzNTc2LDMwOTEzLDM4NjA0LDM2NzY2LDI0OTA0LDI5OTQzLDM1Nzg5LDI3NDkyLDIxMDUwLDM2MTc2LDI3NDI1LDMyODc0LDMzOTA1LDIyMjU3LDIxMjU0LDIwMTc0LDE5OTk1LDIwOTQ1LDMxODk1LDM3MjU5LDMxNzUxLDIwNDE5LDM2NDc5LDMxNzEzLDMxMzg4LDI1''@;'; put 'put ''NzAzLDIzODI4LDIwNjUyLDMzMDMwLDMwMjA5LDMxOTI5LDI4MTQwLDMyNzM2LDI2NDQ5LDIzMzg0LDIzNTQ0LDMwOTIzLDI1Nzc0LDI1NjE5LDI1NTE0LDI1Mzg3LDM4MTY5LDI1NjQ1LDM2Nzk4LDMxNTcyLDMwMjQ5LDI1MTcxLDIyODIzLDIxNTc0LDI3NTEzLDIwNjQzLDI1MTQwLDI0MTAy''@;'; put 'put ''LDI3NTI2LDIwMTk1LDM2MTUxLDM0OTU1LDI0NDUzLDM2OTEwLDMwOTg5LDMwOTkwLDMwOTkxLDMwOTkyLDMwOTkzLDMwOTk0LDMwOTk2LDMwOTk3LDMwOTk4LDMwOTk5LDMxZTMsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEw''@;'; put 'put ''MTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAs''@;'; put 'put ''MzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEw''@;'; put 'put ''OTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYs''@;'; put 'put ''MjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAz''@;'; put 'put ''NDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIs''@;'; put 'put ''MjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2''@;'; put 'put ''NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgs''@;'; put 'put ''MzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzEx''@;'; put 'put ''OTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYs''@;'; put 'put ''MzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5''@;'; put 'put ''OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgs''@;'; put 'put ''MzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0''@;'; put 'put ''MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMs''@;'; put 'put ''MjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEy''@;'; put 'put ''OTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcs''@;'; put 'put ''MzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEz''@;'; put 'put ''NjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMs''@;'; put 'put ''MjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkx''@;'; put 'put ''MzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIs''@;'; put 'put ''MjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEz''@;'; put 'put ''OTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAs''@;'; put 'put ''MzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0''@;'; put 'put ''NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAs''@;'; put 'put ''MzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYy''@;'; put 'put ''MTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0Mzgs''@;'; put 'put ''MjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3''@;'; put 'put ''MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAs''@;'; put 'put ''MzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1''@;'; put 'put ''ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYs''@;'; put 'put ''MzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2''@;'; put 'put ''NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDks''@;'; put 'put ''MzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEw''@;'; put 'put ''MzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIs''@;'; put 'put ''NDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2''@;'; put 'put ''OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIs''@;'; put 'put ''MzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3''@;'; put 'put ''NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTks''@;'; put 'put ''MzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjVlMywzNzAzOSwzODg4OSwyMTU0NywyODA4NSwyMzUwNiwyMDk4OSwyMTg5OCwzMjU5NywzMjc1MiwyNTc4OCwyNTQyMSwyNjA5''@;'; put 'put ''NywyNTAyMiwyNDcxNywyODkzOCwyNzczNSwyNzcyMSwyMjgzMSwyNjQ3NywzMzMyMiwyMjc0MSwyMjE1OCwzNTk0NiwyNzYyNywzNzA4NSwyMjkwOSwzMjc5MSwyMTQ5NSwyODAwOSwyMTYyMSwyMTkxNywzMzY1NSwzMzc0MywyNjY4MCwzMTE2NiwyMTY0NCwyMDMwOSwyMTUxMiwzMDQxOCwz''@;'; put 'put ''NTk3NywzODQwMiwyNzgyNywyODA4OCwzNjIwMywzNTA4OCw0MDU0OCwzNjE1NCwyMjA3OSw0MDY1NywzMDE2NSwyNDQ1NiwyOTQwOCwyNDY4MCwyMTc1NiwyMDEzNiwyNzE3OCwzNDkxMywyNDY1OCwzNjcyMCwyMTcwMCwyODg4OCwzNDQyNSw0MDUxMSwyNzk0NiwyMzQzOSwyNDM0NCwzMjQx''@;'; put 'put ''OCwyMTg5NywyMDM5OSwyOTQ5MiwyMTU2NCwyMTQwMiwyMDUwNSwyMTUxOCwyMTYyOCwyMDA0NiwyNDU3MywyOTc4NiwyMjc3NCwzMzg5OSwzMjk5MywzNDY3NiwyOTM5MiwzMTk0NiwyODI0NiwzMTgxMSwzMTgxMiwzMTgxMywzMTgxNCwzMTgxNSwzMTgxNiwzMTgxNywzMTgxOCwzMTgxOSwz''@;'; put 'put ''MTgyMCwzMTgyMiwzMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwzMTgyNywzMTgyOCwzMTgyOSwzMTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTgzOSwzMTg0MCwzMTg0MSwzMTg0MiwzMTg0MywzMTg0NCwzMTg0NSwzMTg0NiwzMTg0NywzMTg0''@;'; put 'put ''OCwzMTg0OSwzMTg1MCwzMTg1MSwzMTg1MiwzMTg1MywzMTg1NCwzMTg1NSwzMTg1NiwzMTg1NywzMTg1OCwzMTg2MSwzMTg2MiwzMTg2MywzMTg2NCwzMTg2NSwzMTg2NiwzMTg3MCwzMTg3MSwzMTg3MiwzMTg3MywzMTg3NCwzMTg3NSwzMTg3NiwzMTg3NywzMTg3OCwzMTg3OSwzMTg4MCwz''@;'; put 'put ''MTg4MiwzMTg4MywzMTg4NCwzMTg4NSwzMTg4NiwzMTg4NywzMTg4OCwzMTg5MSwzMTg5MiwzMTg5NCwzMTg5NywzMTg5OCwzMTg5OSwzMTkwNCwzMTkwNSwzMTkwNywzMTkxMCwzMTkxMSwzMTkxMiwzMTkxMywzMTkxNSwzMTkxNiwzMTkxNywzMTkxOSwzMTkyMCwzMTkyNCwzMTkyNSwzMTky''@;'; put 'put ''NiwzMTkyNywzMTkyOCwzMTkzMCwzMTkzMSwyNDM1OSwzNDM4MiwyMTgwNCwyNTI1MiwyMDExNCwyNzgxOCwyNTE0MywzMzQ1NywyMTcxOSwyMTMyNiwyOTUwMiwyODM2OSwzMDAxMSwyMTAxMCwyMTI3MCwzNTgwNSwyNzA4OCwyNDQ1OCwyNDU3NiwyODE0MiwyMjM1MSwyNzQyNiwyOTYxNSwy''@;'; put 'put ''NjcwNywzNjgyNCwzMjUzMSwyNTQ0MiwyNDczOSwyMTc5NiwzMDE4NiwzNTkzOCwyODk0OSwyODA2NywyMzQ2MiwyNDE4NywzMzYxOCwyNDkwOCw0MDY0NCwzMDk3MCwzNDY0NywzMTc4MywzMDM0MywyMDk3NiwyNDgyMiwyOTAwNCwyNjE3OSwyNDE0MCwyNDY1MywzNTg1NCwyODc4NCwyNTM4''@;'; put 'put ''MSwzNjc0NSwyNDUwOSwyNDY3NCwzNDUxNiwyMjIzOCwyNzU4NSwyNDcyNCwyNDkzNSwyMTMyMSwyNDgwMCwyNjIxNCwzNjE1OSwzMTIyOSwyMDI1MCwyODkwNSwyNzcxOSwzNTc2MywzNTgyNiwzMjQ3MiwzMzYzNiwyNjEyNywyMzEzMCwzOTc0NiwyNzk4NSwyODE1MSwzNTkwNSwyNzk2Mywy''@;'; put 'put ''MDI0OSwyODc3OSwzMzcxOSwyNTExMCwyNDc4NSwzODY2OSwzNjEzNSwzMTA5NiwyMDk4NywyMjMzNCwyMjUyMiwyNjQyNiwzMDA3MiwzMTI5MywzMTIxNSwzMTYzNywzMTkzNSwzMTkzNiwzMTkzOCwzMTkzOSwzMTk0MCwzMTk0MiwzMTk0NSwzMTk0NywzMTk1MCwzMTk1MSwzMTk1MiwzMTk1''@;'; put 'put ''MywzMTk1NCwzMTk1NSwzMTk1NiwzMTk2MCwzMTk2MiwzMTk2MywzMTk2NSwzMTk2NiwzMTk2OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3MywzMTk3NCwzMTk3NSwzMTk3NywzMTk3OCwzMTk3OSwzMTk4MCwzMTk4MSwzMTk4MiwzMTk4NCwzMTk4NSwzMTk4NiwzMTk4NywzMTk4OCwzMTk4OSwz''@;'; put 'put ''MTk5MCwzMTk5MSwzMTk5MywzMTk5NCwzMTk5NiwzMTk5NywzMTk5OCwzMTk5OSwzMmUzLDMyMDAxLDMyMDAyLDMyMDAzLDMyMDA0LDMyMDA1LDMyMDA2LDMyMDA3LDMyMDA4LDMyMDA5LDMyMDExLDMyMDEyLDMyMDEzLDMyMDE0LDMyMDE1LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIw''@;'; put 'put ''LDMyMDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LDMyMDI3LDMyMDI4LDMyMDI5LDMyMDMwLDMyMDMxLDMyMDMzLDMyMDM1LDMyMDM2LDMyMDM3LDMyMDM4LDMyMDQwLDMyMDQxLDMyMDQyLDMyMDQ0LDMyMDQ1LDMyMDQ2LDMyMDQ4LDMyMDQ5LDMyMDUwLDMyMDUxLDMyMDUyLDMy''@;'; put 'put ''MDUzLDMyMDU0LDMyOTA4LDM5MjY5LDM2ODU3LDI4NjA4LDM1NzQ5LDQwNDgxLDIzMDIwLDMyNDg5LDMyNTIxLDIxNTEzLDI2NDk3LDI2ODQwLDM2NzUzLDMxODIxLDM4NTk4LDIxNDUwLDI0NjEzLDMwMTQyLDI3NzYyLDIxMzYzLDIzMjQxLDMyNDIzLDI1MzgwLDIwOTYwLDMzMDM0LDI0MDQ5''@;'; put 'put ''LDM0MDE1LDI1MjE2LDIwODY0LDIzMzk1LDIwMjM4LDMxMDg1LDIxMDU4LDI0NzYwLDI3OTgyLDIzNDkyLDIzNDkwLDM1NzQ1LDM1NzYwLDI2MDgyLDI0NTI0LDM4NDY5LDIyOTMxLDMyNDg3LDMyNDI2LDIyMDI1LDI2NTUxLDIyODQxLDIwMzM5LDIzNDc4LDIxMTUyLDMzNjI2LDM5MDUwLDM2''@;'; put 'put ''MTU4LDMwMDAyLDM4MDc4LDIwNTUxLDMxMjkyLDIwMjE1LDI2NTUwLDM5NTUwLDIzMjMzLDI3NTE2LDMwNDE3LDIyMzYyLDIzNTc0LDMxNTQ2LDM4Mzg4LDI5MDA2LDIwODYwLDMyOTM3LDMzMzkyLDIyOTA0LDMyNTE2LDMzNTc1LDI2ODE2LDI2NjA0LDMwODk3LDMwODM5LDI1MzE1LDI1NDQx''@;'; put 'put ''LDMxNjE2LDIwNDYxLDIxMDk4LDIwOTQzLDMzNjE2LDI3MDk5LDM3NDkyLDM2MzQxLDM2MTQ1LDM1MjY1LDM4MTkwLDMxNjYxLDIwMjE0LDMyMDU1LDMyMDU2LDMyMDU3LDMyMDU4LDMyMDU5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDYzLDMyMDY0LDMyMDY1LDMyMDY2LDMyMDY3LDMyMDY4LDMy''@;'; put 'put ''MDY5LDMyMDcwLDMyMDcxLDMyMDcyLDMyMDczLDMyMDc0LDMyMDc1LDMyMDc2LDMyMDc3LDMyMDc4LDMyMDc5LDMyMDgwLDMyMDgxLDMyMDgyLDMyMDgzLDMyMDg0LDMyMDg1LDMyMDg2LDMyMDg3LDMyMDg4LDMyMDg5LDMyMDkwLDMyMDkxLDMyMDkyLDMyMDkzLDMyMDk0LDMyMDk1LDMyMDk2''@;'; put 'put ''LDMyMDk3LDMyMDk4LDMyMDk5LDMyMTAwLDMyMTAxLDMyMTAyLDMyMTAzLDMyMTA0LDMyMTA1LDMyMTA2LDMyMTA3LDMyMTA4LDMyMTA5LDMyMTExLDMyMTEyLDMyMTEzLDMyMTE0LDMyMTE1LDMyMTE2LDMyMTE3LDMyMTE4LDMyMTIwLDMyMTIxLDMyMTIyLDMyMTIzLDMyMTI0LDMyMTI1LDMy''@;'; put 'put ''MTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMyLDMyMTMzLDMyMTM0LDMyMTM1LDMyMTM2LDMyMTM3LDMyMTM4LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQyLDMyMTQzLDMyMTQ0LDMyMTQ1LDMyMTQ2LDMyMTQ3LDMyMTQ4LDMyMTQ5LDMyMTUwLDMyMTUxLDMyMTUyLDIwNTgx''@;'; put 'put ''LDMzMzI4LDIxMDczLDM5Mjc5LDI4MTc2LDI4MjkzLDI4MDcxLDI0MzE0LDIwNzI1LDIzMDA0LDIzNTU4LDI3OTc0LDI3NzQzLDMwMDg2LDMzOTMxLDI2NzI4LDIyODcwLDM1NzYyLDIxMjgwLDM3MjMzLDM4NDc3LDM0MTIxLDI2ODk4LDMwOTc3LDI4OTY2LDMzMDE0LDIwMTMyLDM3MDY2LDI3''@;'; put 'put ''OTc1LDM5NTU2LDIzMDQ3LDIyMjA0LDI1NjA1LDM4MTI4LDMwNjk5LDIwMzg5LDMzMDUwLDI5NDA5LDM1MjgyLDM5MjkwLDMyNTY0LDMyNDc4LDIxMTE5LDI1OTQ1LDM3MjM3LDM2NzM1LDM2NzM5LDIxNDgzLDMxMzgyLDI1NTgxLDI1NTA5LDMwMzQyLDMxMjI0LDM0OTAzLDM4NDU0LDI1MTMw''@;'; put 'put ''LDIxMTYzLDMzNDEwLDI2NzA4LDI2NDgwLDI1NDYzLDMwNTcxLDMxNDY5LDI3OTA1LDMyNDY3LDM1Mjk5LDIyOTkyLDI1MTA2LDM0MjQ5LDMzNDQ1LDMwMDI4LDIwNTExLDIwMTcxLDMwMTE3LDM1ODE5LDIzNjI2LDI0MDYyLDMxNTYzLDI2MDIwLDM3MzI5LDIwMTcwLDI3OTQxLDM1MTY3LDMy''@;'; put 'put ''MDM5LDM4MTgyLDIwMTY1LDM1ODgwLDM2ODI3LDM4NzcxLDI2MTg3LDMxMTA1LDM2ODE3LDI4OTA4LDI4MDI0LDMyMTUzLDMyMTU0LDMyMTU1LDMyMTU2LDMyMTU3LDMyMTU4LDMyMTU5LDMyMTYwLDMyMTYxLDMyMTYyLDMyMTYzLDMyMTY0LDMyMTY1LDMyMTY3LDMyMTY4LDMyMTY5LDMyMTcw''@;'; put 'put ''LDMyMTcxLDMyMTcyLDMyMTczLDMyMTc1LDMyMTc2LDMyMTc3LDMyMTc4LDMyMTc5LDMyMTgwLDMyMTgxLDMyMTgyLDMyMTgzLDMyMTg0LDMyMTg1LDMyMTg2LDMyMTg3LDMyMTg4LDMyMTg5LDMyMTkwLDMyMTkxLDMyMTkyLDMyMTkzLDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMy''@;'; put 'put ''MTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMyMjA2LDMyMjA3LDMyMjA4LDMyMjA5LDMyMjEwLDMyMjExLDMyMjEyLDMyMjEzLDMyMjE0LDMyMjE1LDMyMjE2LDMyMjE3LDMyMjE4LDMyMjE5LDMyMjIwLDMyMjIxLDMyMjIyLDMyMjIzLDMyMjI0LDMyMjI1LDMyMjI2''@;'; put 'put ''LDMyMjI3LDMyMjI4LDMyMjI5LDMyMjMwLDMyMjMxLDMyMjMyLDMyMjMzLDMyMjM0LDMyMjM1LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMyMjQwLDMyMjQxLDMyMjQyLDMyMjQzLDMyMjQ0LDMyMjQ1LDMyMjQ2LDMyMjQ3LDMyMjQ4LDMyMjQ5LDMyMjUwLDIzNjEzLDIxMTcwLDMzNjA2LDIw''@;'; put 'put ''ODM0LDMzNTUwLDMwNTU1LDI2MjMwLDQwMTIwLDIwMTQwLDI0Nzc4LDMxOTM0LDMxOTIzLDMyNDYzLDIwMTE3LDM1Njg2LDI2MjIzLDM5MDQ4LDM4NzQ1LDIyNjU5LDI1OTY0LDM4MjM2LDI0NDUyLDMwMTUzLDM4NzQyLDMxNDU1LDMxNDU0LDIwOTI4LDI4ODQ3LDMxMzg0LDI1NTc4LDMxMzUw''@;'; put 'put ''LDMyNDE2LDI5NTkwLDM4ODkzLDIwMDM3LDI4NzkyLDIwMDYxLDM3MjAyLDIxNDE3LDI1OTM3LDI2MDg3LDMzMjc2LDMzMjg1LDIxNjQ2LDIzNjAxLDMwMTA2LDM4ODE2LDI1MzA0LDI5NDAxLDMwMTQxLDIzNjIxLDM5NTQ1LDMzNzM4LDIzNjE2LDIxNjMyLDMwNjk3LDIwMDMwLDI3ODIyLDMy''@;'; put 'put ''ODU4LDI1Mjk4LDI1NDU0LDI0MDQwLDIwODU1LDM2MzE3LDM2MzgyLDM4MTkxLDIwNDY1LDIxNDc3LDI0ODA3LDI4ODQ0LDIxMDk1LDI1NDI0LDQwNTE1LDIzMDcxLDIwNTE4LDMwNTE5LDIxMzY3LDMyNDgyLDI1NzMzLDI1ODk5LDI1MjI1LDI1NDk2LDIwNTAwLDI5MjM3LDM1MjczLDIwOTE1''@;'; put 'put ''LDM1Nzc2LDMyNDc3LDIyMzQzLDMzNzQwLDM4MDU1LDIwODkxLDIxNTMxLDIzODAzLDMyMjUxLDMyMjUyLDMyMjUzLDMyMjU0LDMyMjU1LDMyMjU2LDMyMjU3LDMyMjU4LDMyMjU5LDMyMjYwLDMyMjYxLDMyMjYyLDMyMjYzLDMyMjY0LDMyMjY1LDMyMjY2LDMyMjY3LDMyMjY4LDMyMjY5LDMy''@;'; put 'put ''MjcwLDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LDMyMjc5LDMyMjgwLDMyMjgxLDMyMjgyLDMyMjgzLDMyMjg0LDMyMjg1LDMyMjg2LDMyMjg3LDMyMjg4LDMyMjg5LDMyMjkwLDMyMjkxLDMyMjkyLDMyMjkzLDMyMjk0LDMyMjk1LDMyMjk2LDMyMjk3''@;'; put 'put ''LDMyMjk4LDMyMjk5LDMyMzAwLDMyMzAxLDMyMzAyLDMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2LDMyMzA3LDMyMzA4LDMyMzA5LDMyMzEwLDMyMzExLDMyMzEyLDMyMzEzLDMyMzE0LDMyMzE2LDMyMzE3LDMyMzE4LDMyMzE5LDMyMzIwLDMyMzIyLDMyMzIzLDMyMzI0LDMyMzI1LDMyMzI2LDMy''@;'; put 'put ''MzI4LDMyMzI5LDMyMzMwLDMyMzMxLDMyMzMyLDMyMzMzLDMyMzM0LDMyMzM1LDMyMzM2LDMyMzM3LDMyMzM4LDMyMzM5LDMyMzQwLDMyMzQxLDMyMzQyLDMyMzQzLDMyMzQ0LDMyMzQ1LDMyMzQ2LDMyMzQ3LDMyMzQ4LDMyMzQ5LDIwNDI2LDMxNDU5LDI3OTk0LDM3MDg5LDM5NTY3LDIxODg4''@;'; put 'put ''LDIxNjU0LDIxMzQ1LDIxNjc5LDI0MzIwLDI1NTc3LDI2OTk5LDIwOTc1LDI0OTM2LDIxMDAyLDIyNTcwLDIxMjA4LDIyMzUwLDMwNzMzLDMwNDc1LDI0MjQ3LDI0OTUxLDMxOTY4LDI1MTc5LDI1MjM5LDIwMTMwLDI4ODIxLDMyNzcxLDI1MzM1LDI4OTAwLDM4NzUyLDIyMzkxLDMzNDk5LDI2''@;'; put 'put ''NjA3LDI2ODY5LDMwOTMzLDM5MDYzLDMxMTg1LDIyNzcxLDIxNjgzLDIxNDg3LDI4MjEyLDIwODExLDIxMDUxLDIzNDU4LDM1ODM4LDMyOTQzLDIxODI3LDIyNDM4LDI0NjkxLDIyMzUzLDIxNTQ5LDMxMzU0LDI0NjU2LDIzMzgwLDI1NTExLDI1MjQ4LDIxNDc1LDI1MTg3LDIzNDk1LDI2NTQz''@;'; put 'put ''LDIxNzQxLDMxMzkxLDMzNTEwLDM3MjM5LDI0MjExLDM1MDQ0LDIyODQwLDIyNDQ2LDI1MzU4LDM2MzI4LDMzMDA3LDIyMzU5LDMxNjA3LDIwMzkzLDI0NTU1LDIzNDg1LDI3NDU0LDIxMjgxLDMxNTY4LDI5Mzc4LDI2Njk0LDMwNzE5LDMwNTE4LDI2MTAzLDIwOTE3LDIwMTExLDMwNDIwLDIz''@;'; put 'put ''NzQzLDMxMzk3LDMzOTA5LDIyODYyLDM5NzQ1LDIwNjA4LDMyMzUwLDMyMzUxLDMyMzUyLDMyMzUzLDMyMzU0LDMyMzU1LDMyMzU2LDMyMzU3LDMyMzU4LDMyMzU5LDMyMzYwLDMyMzYxLDMyMzYyLDMyMzYzLDMyMzY0LDMyMzY1LDMyMzY2LDMyMzY3LDMyMzY4LDMyMzY5LDMyMzcwLDMyMzcx''@;'; put 'put ''LDMyMzcyLDMyMzczLDMyMzc0LDMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgwLDMyMzgxLDMyMzgyLDMyMzgzLDMyMzg0LDMyMzg1LDMyMzg3LDMyMzg4LDMyMzg5LDMyMzkwLDMyMzkxLDMyMzkyLDMyMzkzLDMyMzk0LDMyMzk1LDMyMzk2LDMyMzk3LDMyMzk4LDMyMzk5LDMy''@;'; put 'put ''NDAwLDMyNDAxLDMyNDAyLDMyNDAzLDMyNDA0LDMyNDA1LDMyNDA2LDMyNDA3LDMyNDA4LDMyNDA5LDMyNDEwLDMyNDEyLDMyNDEzLDMyNDE0LDMyNDMwLDMyNDM2LDMyNDQzLDMyNDQ0LDMyNDcwLDMyNDg0LDMyNDkyLDMyNTA1LDMyNTIyLDMyNTI4LDMyNTQyLDMyNTY3LDMyNTY5LDMyNTcx''@;'; put 'put ''LDMyNTcyLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc2LDMyNTc3LDMyNTc5LDMyNTgyLDMyNTgzLDMyNTg0LDMyNTg1LDMyNTg2LDMyNTg3LDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkxLDMyNTk0LDMyNTk1LDM5MzA0LDI0ODcxLDI4MjkxLDIyMzcyLDI2MTE4LDI1NDE0LDIyMjU2LDI1MzI0LDI1''@;'; put 'put ''MTkzLDI0Mjc1LDM4NDIwLDIyNDAzLDI1Mjg5LDIxODk1LDM0NTkzLDMzMDk4LDM2NzcxLDIxODYyLDMzNzEzLDI2NDY5LDM2MTgyLDM0MDEzLDIzMTQ2LDI2NjM5LDI1MzE4LDMxNzI2LDM4NDE3LDIwODQ4LDI4NTcyLDM1ODg4LDI1NTk3LDM1MjcyLDI1MDQyLDMyNTE4LDI4ODY2LDI4Mzg5''@;'; put 'put ''LDI5NzAxLDI3MDI4LDI5NDM2LDI0MjY2LDM3MDcwLDI2MzkxLDI4MDEwLDI1NDM4LDIxMTcxLDI5MjgyLDMyNzY5LDIwMzMyLDIzMDEzLDM3MjI2LDI4ODg5LDI4MDYxLDIxMjAyLDIwMDQ4LDM4NjQ3LDM4MjUzLDM0MTc0LDMwOTIyLDMyMDQ3LDIwNzY5LDIyNDE4LDI1Nzk0LDMyOTA3LDMx''@;'; put 'put ''ODY3LDI3ODgyLDI2ODY1LDI2OTc0LDIwOTE5LDIxNDAwLDI2NzkyLDI5MzEzLDQwNjU0LDMxNzI5LDI5NDMyLDMxMTYzLDI4NDM1LDI5NzAyLDI2NDQ2LDM3MzI0LDQwMTAwLDMxMDM2LDMzNjczLDMzNjIwLDIxNTE5LDI2NjQ3LDIwMDI5LDIxMzg1LDIxMTY5LDMwNzgyLDIxMzgyLDIxMDMz''@;'; put 'put ''LDIwNjE2LDIwMzYzLDIwNDMyLDMyNTk4LDMyNjAxLDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA2LDMyNjA4LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjE1LDMyNjE5LDMyNjIwLDMyNjIxLDMyNjIzLDMyNjI0LDMyNjI3LDMyNjI5LDMyNjMwLDMyNjMxLDMyNjMyLDMyNjM0LDMyNjM1LDMy''@;'; put 'put ''NjM2LDMyNjM3LDMyNjM5LDMyNjQwLDMyNjQyLDMyNjQzLDMyNjQ0LDMyNjQ1LDMyNjQ2LDMyNjQ3LDMyNjQ4LDMyNjQ5LDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjU4LDMyNjU5LDMyNjYxLDMyNjYyLDMyNjYzLDMyNjY0LDMyNjY1LDMyNjY3LDMyNjY4LDMyNjcyLDMyNjc0''@;'; put 'put ''LDMyNjc1LDMyNjc3LDMyNjc4LDMyNjgwLDMyNjgxLDMyNjgyLDMyNjgzLDMyNjg0LDMyNjg1LDMyNjg2LDMyNjg5LDMyNjkxLDMyNjkyLDMyNjkzLDMyNjk0LDMyNjk1LDMyNjk4LDMyNjk5LDMyNzAyLDMyNzA0LDMyNzA2LDMyNzA3LDMyNzA4LDMyNzEwLDMyNzExLDMyNzEyLDMyNzEzLDMy''@;'; put 'put ''NzE1LDMyNzE3LDMyNzE5LDMyNzIwLDMyNzIxLDMyNzIyLDMyNzIzLDMyNzI2LDMyNzI3LDMyNzI5LDMyNzMwLDMyNzMxLDMyNzMyLDMyNzMzLDMyNzM0LDMyNzM4LDMyNzM5LDMwMTc4LDMxNDM1LDMxODkwLDI3ODEzLDM4NTgyLDIxMTQ3LDI5ODI3LDIxNzM3LDIwNDU3LDMyODUyLDMzNzE0''@;'; put 'put ''LDM2ODMwLDM4MjU2LDI0MjY1LDI0NjA0LDI4MDYzLDI0MDg4LDI1OTQ3LDMzMDgwLDM4MTQyLDI0NjUxLDI4ODYwLDMyNDUxLDMxOTE4LDIwOTM3LDI2NzUzLDMxOTIxLDMzMzkxLDIwMDA0LDM2NzQyLDM3MzI3LDI2MjM4LDIwMTQyLDM1ODQ1LDI1NzY5LDMyODQyLDIwNjk4LDMwMTAzLDI5''@;'; put 'put ''MTM0LDIzNTI1LDM2Nzk3LDI4NTE4LDIwMTAyLDI1NzMwLDM4MjQzLDI0Mjc4LDI2MDA5LDIxMDE1LDM1MDEwLDI4ODcyLDIxMTU1LDI5NDU0LDI5NzQ3LDI2NTE5LDMwOTY3LDM4Njc4LDIwMDIwLDM3MDUxLDQwMTU4LDI4MTA3LDIwOTU1LDM2MTYxLDIxNTMzLDI1Mjk0LDI5NjE4LDMzNzc3''@;'; put 'put ''LDM4NjQ2LDQwODM2LDM4MDgzLDIwMjc4LDMyNjY2LDIwOTQwLDI4Nzg5LDM4NTE3LDIzNzI1LDM5MDQ2LDIxNDc4LDIwMTk2LDI4MzE2LDI5NzA1LDI3MDYwLDMwODI3LDM5MzExLDMwMDQxLDIxMDE2LDMwMjQ0LDI3OTY5LDI2NjExLDIwODQ1LDQwODU3LDMyODQzLDIxNjU3LDMxNTQ4LDMx''@;'; put 'put ''NDIzLDMyNzQwLDMyNzQzLDMyNzQ0LDMyNzQ2LDMyNzQ3LDMyNzQ4LDMyNzQ5LDMyNzUxLDMyNzU0LDMyNzU2LDMyNzU3LDMyNzU4LDMyNzU5LDMyNzYwLDMyNzYxLDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzcwLDMyNzc1LDMyNzc2LDMyNzc3LDMyNzc4LDMyNzgyLDMyNzgzLDMyNzg1''@;'; put 'put ''LDMyNzg3LDMyNzk0LDMyNzk1LDMyNzk3LDMyNzk4LDMyNzk5LDMyODAxLDMyODAzLDMyODA0LDMyODExLDMyODEyLDMyODEzLDMyODE0LDMyODE1LDMyODE2LDMyODE4LDMyODIwLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODMzLDMyODM2LDMyODM3LDMyODM5LDMyODQwLDMy''@;'; put 'put ''ODQxLDMyODQ2LDMyODQ3LDMyODQ4LDMyODQ5LDMyODUxLDMyODUzLDMyODU0LDMyODU1LDMyODU3LDMyODU5LDMyODYwLDMyODYxLDMyODYyLDMyODYzLDMyODY0LDMyODY1LDMyODY2LDMyODY3LDMyODY4LDMyODY5LDMyODcwLDMyODcxLDMyODcyLDMyODc1LDMyODc2LDMyODc3LDMyODc4''@;'; put 'put ''LDMyODc5LDMyODgwLDMyODgyLDMyODgzLDMyODg0LDMyODg1LDMyODg2LDMyODg3LDMyODg4LDMyODg5LDMyODkwLDMyODkxLDMyODkyLDMyODkzLDM4NTM0LDIyNDA0LDI1MzE0LDM4NDcxLDI3MDA0LDIzMDQ0LDI1NjAyLDMxNjk5LDI4NDMxLDM4NDc1LDMzNDQ2LDIxMzQ2LDM5MDQ1LDI0''@;'; put 'put ''MjA4LDI4ODA5LDI1NTIzLDIxMzQ4LDM0MzgzLDQwMDY1LDQwNTk1LDMwODYwLDM4NzA2LDM2MzM1LDM2MTYyLDQwNTc1LDI4NTEwLDMxMTA4LDI0NDA1LDM4NDcwLDI1MTM0LDM5NTQwLDIxNTI1LDM4MTA5LDIwMzg3LDI2MDUzLDIzNjUzLDIzNjQ5LDMyNTMzLDM0Mzg1LDI3Njk1LDI0NDU5''@;'; put 'put ''LDI5NTc1LDI4Mzg4LDMyNTExLDIzNzgyLDI1MzcxLDIzNDAyLDI4MzkwLDIxMzY1LDIwMDgxLDI1NTA0LDMwMDUzLDI1MjQ5LDM2NzE4LDIwMjYyLDIwMTc3LDI3ODE0LDMyNDM4LDM1NzcwLDMzODIxLDM0NzQ2LDMyNTk5LDM2OTIzLDM4MTc5LDMxNjU3LDM5NTg1LDM1MDY0LDMzODUzLDI3''@;'; put 'put ''OTMxLDM5NTU4LDMyNDc2LDIyOTIwLDQwNjM1LDI5NTk1LDMwNzIxLDM0NDM0LDM5NTMyLDM5NTU0LDIyMDQzLDIxNTI3LDIyNDc1LDIwMDgwLDQwNjE0LDIxMzM0LDM2ODA4LDMzMDMzLDMwNjEwLDM5MzE0LDM0NTQyLDI4Mzg1LDM0MDY3LDI2MzY0LDI0OTMwLDI4NDU5LDMyODk0LDMyODk3''@;'; put 'put ''LDMyODk4LDMyOTAxLDMyOTA0LDMyOTA2LDMyOTA5LDMyOTEwLDMyOTExLDMyOTEyLDMyOTEzLDMyOTE0LDMyOTE2LDMyOTE3LDMyOTE5LDMyOTIxLDMyOTI2LDMyOTMxLDMyOTM0LDMyOTM1LDMyOTM2LDMyOTQwLDMyOTQ0LDMyOTQ3LDMyOTQ5LDMyOTUwLDMyOTUyLDMyOTUzLDMyOTU1LDMy''@;'; put 'put ''OTY1LDMyOTY3LDMyOTY4LDMyOTY5LDMyOTcwLDMyOTcxLDMyOTc1LDMyOTc2LDMyOTc3LDMyOTc4LDMyOTc5LDMyOTgwLDMyOTgxLDMyOTg0LDMyOTkxLDMyOTkyLDMyOTk0LDMyOTk1LDMyOTk4LDMzMDA2LDMzMDEzLDMzMDE1LDMzMDE3LDMzMDE5LDMzMDIyLDMzMDIzLDMzMDI0LDMzMDI1''@;'; put 'put ''LDMzMDI3LDMzMDI4LDMzMDI5LDMzMDMxLDMzMDMyLDMzMDM1LDMzMDM2LDMzMDQ1LDMzMDQ3LDMzMDQ5LDMzMDUxLDMzMDUyLDMzMDUzLDMzMDU1LDMzMDU2LDMzMDU3LDMzMDU4LDMzMDU5LDMzMDYwLDMzMDYxLDMzMDYyLDMzMDYzLDMzMDY0LDMzMDY1LDMzMDY2LDMzMDY3LDMzMDY5LDMz''@;'; put 'put ''MDcwLDMzMDcyLDMzMDc1LDMzMDc2LDMzMDc3LDMzMDc5LDMzMDgxLDMzMDgyLDMzMDgzLDMzMDg0LDMzMDg1LDMzMDg3LDM1ODgxLDMzNDI2LDMzNTc5LDMwNDUwLDI3NjY3LDI0NTM3LDMzNzI1LDI5NDgzLDMzNTQxLDM4MTcwLDI3NjExLDMwNjgzLDM4MDg2LDIxMzU5LDMzNTM4LDIwODgy''@;'; put 'put ''LDI0MTI1LDM1OTgwLDM2MTUyLDIwMDQwLDI5NjExLDI2NTIyLDI2NzU3LDM3MjM4LDM4NjY1LDI5MDI4LDI3ODA5LDMwNDczLDIzMTg2LDM4MjA5LDI3NTk5LDMyNjU0LDI2MTUxLDIzNTA0LDIyOTY5LDIzMTk0LDM4Mzc2LDM4MzkxLDIwMjA0LDMzODA0LDMzOTQ1LDI3MzA4LDMwNDMxLDM4''@;'; put 'put ''MTkyLDI5NDY3LDI2NzkwLDIzMzkxLDMwNTExLDM3Mjc0LDM4NzUzLDMxOTY0LDM2ODU1LDM1ODY4LDI0MzU3LDMxODU5LDMxMTkyLDM1MjY5LDI3ODUyLDM0NTg4LDIzNDk0LDI0MTMwLDI2ODI1LDMwNDk2LDMyNTAxLDIwODg1LDIwODEzLDIxMTkzLDIzMDgxLDMyNTE3LDM4NzU0LDMzNDk1''@;'; put 'put ''LDI1NTUxLDMwNTk2LDM0MjU2LDMxMTg2LDI4MjE4LDI0MjE3LDIyOTM3LDM0MDY1LDI4NzgxLDI3NjY1LDI1Mjc5LDMwMzk5LDI1OTM1LDI0NzUxLDM4Mzk3LDI2MTI2LDM0NzE5LDQwNDgzLDM4MTI1LDIxNTE3LDIxNjI5LDM1ODg0LDI1NzIwLDMzMDg4LDMzMDg5LDMzMDkwLDMzMDkxLDMz''@;'; put 'put ''MDkyLDMzMDkzLDMzMDk1LDMzMDk3LDMzMTAxLDMzMTAyLDMzMTAzLDMzMTA2LDMzMTEwLDMzMTExLDMzMTEyLDMzMTE1LDMzMTE2LDMzMTE3LDMzMTE4LDMzMTE5LDMzMTIxLDMzMTIyLDMzMTIzLDMzMTI0LDMzMTI2LDMzMTI4LDMzMTMwLDMzMTMxLDMzMTMyLDMzMTM1LDMzMTM4LDMzMTM5''@;'; put 'put ''LDMzMTQxLDMzMTQyLDMzMTQzLDMzMTQ0LDMzMTUzLDMzMTU1LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTU5LDMzMTYxLDMzMTYzLDMzMTY0LDMzMTY1LDMzMTY2LDMzMTY4LDMzMTcwLDMzMTcxLDMzMTcyLDMzMTczLDMzMTc0LDMzMTc1LDMzMTc3LDMzMTc4LDMzMTgyLDMzMTgzLDMzMTg0LDMz''@;'; put 'put ''MTg1LDMzMTg2LDMzMTg4LDMzMTg5LDMzMTkxLDMzMTkzLDMzMTk1LDMzMTk2LDMzMTk3LDMzMTk4LDMzMTk5LDMzMjAwLDMzMjAxLDMzMjAyLDMzMjA0LDMzMjA1LDMzMjA2LDMzMjA3LDMzMjA4LDMzMjA5LDMzMjEyLDMzMjEzLDMzMjE0LDMzMjE1LDMzMjIwLDMzMjIxLDMzMjIzLDMzMjI0''@;'; put 'put ''LDMzMjI1LDMzMjI3LDMzMjI5LDMzMjMwLDMzMjMxLDMzMjMyLDMzMjMzLDMzMjM0LDMzMjM1LDI1NzIxLDM0MzIxLDI3MTY5LDMzMTgwLDMwOTUyLDI1NzA1LDM5NzY0LDI1MjczLDI2NDExLDMzNzA3LDIyNjk2LDQwNjY0LDI3ODE5LDI4NDQ4LDIzNTE4LDM4NDc2LDM1ODUxLDI5Mjc5LDI2''@;'; put 'put ''NTc2LDI1Mjg3LDI5MjgxLDIwMTM3LDIyOTgyLDI3NTk3LDIyNjc1LDI2Mjg2LDI0MTQ5LDIxMjE1LDI0OTE3LDI2NDA4LDMwNDQ2LDMwNTY2LDI5Mjg3LDMxMzAyLDI1MzQzLDIxNzM4LDIxNTg0LDM4MDQ4LDM3MDI3LDIzMDY4LDMyNDM1LDI3NjcwLDIwMDM1LDIyOTAyLDMyNzg0LDIyODU2''@;'; put 'put ''LDIxMzM1LDMwMDA3LDM4NTkwLDIyMjE4LDI1Mzc2LDMzMDQxLDI0NzAwLDM4MzkzLDI4MTE4LDIxNjAyLDM5Mjk3LDIwODY5LDIzMjczLDMzMDIxLDIyOTU4LDM4Njc1LDIwNTIyLDI3ODc3LDIzNjEyLDI1MzExLDIwMzIwLDIxMzExLDMzMTQ3LDM2ODcwLDI4MzQ2LDM0MDkxLDI1Mjg4LDI0''@;'; put 'put ''MTgwLDMwOTEwLDI1NzgxLDI1NDY3LDI0NTY1LDIzMDY0LDM3MjQ3LDQwNDc5LDIzNjE1LDI1NDIzLDMyODM0LDIzNDIxLDIxODcwLDM4MjE4LDM4MjIxLDI4MDM3LDI0NzQ0LDI2NTkyLDI5NDA2LDIwOTU3LDIzNDI1LDMzMjM2LDMzMjM3LDMzMjM4LDMzMjM5LDMzMjQwLDMzMjQxLDMzMjQy''@;'; put 'put ''LDMzMjQzLDMzMjQ0LDMzMjQ1LDMzMjQ2LDMzMjQ3LDMzMjQ4LDMzMjQ5LDMzMjUwLDMzMjUyLDMzMjUzLDMzMjU0LDMzMjU2LDMzMjU3LDMzMjU5LDMzMjYyLDMzMjYzLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcxLDMzMjcyLDMzMjczLDMzMjc0LDMzMjc3LDMzMjc5LDMz''@;'; put 'put ''MjgzLDMzMjg3LDMzMjg4LDMzMjg5LDMzMjkwLDMzMjkxLDMzMjk0LDMzMjk1LDMzMjk3LDMzMjk5LDMzMzAxLDMzMzAyLDMzMzAzLDMzMzA0LDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEyLDMzMzE2LDMzMzE3LDMzMzE4LDMzMzE5LDMzMzIxLDMzMzI2LDMzMzMwLDMzMzM4LDMzMzQwLDMzMzQx''@;'; put 'put ''LDMzMzQzLDMzMzQ0LDMzMzQ1LDMzMzQ2LDMzMzQ3LDMzMzQ5LDMzMzUwLDMzMzUyLDMzMzU0LDMzMzU2LDMzMzU3LDMzMzU4LDMzMzYwLDMzMzYxLDMzMzYyLDMzMzYzLDMzMzY0LDMzMzY1LDMzMzY2LDMzMzY3LDMzMzY5LDMzMzcxLDMzMzcyLDMzMzczLDMzMzc0LDMzMzc2LDMzMzc3LDMz''@;'; put 'put ''Mzc4LDMzMzc5LDMzMzgwLDMzMzgxLDMzMzgyLDMzMzgzLDMzMzg1LDI1MzE5LDI3ODcwLDI5Mjc1LDI1MTk3LDM4MDYyLDMyNDQ1LDMzMDQzLDI3OTg3LDIwODkyLDI0MzI0LDIyOTAwLDIxMTYyLDI0NTk0LDIyODk5LDI2MjYyLDM0Mzg0LDMwMTExLDI1Mzg2LDI1MDYyLDMxOTgzLDM1ODM0''@;'; put 'put ''LDIxNzM0LDI3NDMxLDQwNDg1LDI3NTcyLDM0MjYxLDIxNTg5LDIwNTk4LDI3ODEyLDIxODY2LDM2Mjc2LDI5MjI4LDI0MDg1LDI0NTk3LDI5NzUwLDI1MjkzLDI1NDkwLDI5MjYwLDI0NDcyLDI4MjI3LDI3OTY2LDI1ODU2LDI4NTA0LDMwNDI0LDMwOTI4LDMwNDYwLDMwMDM2LDIxMDI4LDIx''@;'; put 'put ''NDY3LDIwMDUxLDI0MjIyLDI2MDQ5LDMyODEwLDMyOTgyLDI1MjQzLDIxNjM4LDIxMDMyLDI4ODQ2LDM0OTU3LDM2MzA1LDI3ODczLDIxNjI0LDMyOTg2LDIyNTIxLDM1MDYwLDM2MTgwLDM4NTA2LDM3MTk3LDIwMzI5LDI3ODAzLDIxOTQzLDMwNDA2LDMwNzY4LDI1MjU2LDI4OTIxLDI4NTU4''@;'; put 'put ''LDI0NDI5LDM0MDI4LDI2ODQyLDMwODQ0LDMxNzM1LDMzMTkyLDI2Mzc5LDQwNTI3LDI1NDQ3LDMwODk2LDIyMzgzLDMwNzM4LDM4NzEzLDI1MjA5LDI1MjU5LDIxMTI4LDI5NzQ5LDI3NjA3LDMzMzg2LDMzMzg3LDMzMzg4LDMzMzg5LDMzMzkzLDMzMzk3LDMzMzk4LDMzMzk5LDMzNDAwLDMz''@;'; put 'put ''NDAzLDMzNDA0LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEzLDMzNDE0LDMzNDE1LDMzNDE3LDMzNDIwLDMzNDI0LDMzNDI3LDMzNDI4LDMzNDI5LDMzNDMwLDMzNDM0LDMzNDM1LDMzNDM4LDMzNDQwLDMzNDQyLDMzNDQzLDMzNDQ3LDMzNDU4LDMzNDYxLDMzNDYyLDMzNDY2LDMzNDY3LDMzNDY4''@;'; put 'put ''LDMzNDcxLDMzNDcyLDMzNDc0LDMzNDc1LDMzNDc3LDMzNDc4LDMzNDgxLDMzNDg4LDMzNDk0LDMzNDk3LDMzNDk4LDMzNTAxLDMzNTA2LDMzNTExLDMzNTEyLDMzNTEzLDMzNTE0LDMzNTE2LDMzNTE3LDMzNTE4LDMzNTIwLDMzNTIyLDMzNTIzLDMzNTI1LDMzNTI2LDMzNTI4LDMzNTMwLDMz''@;'; put 'put ''NTMyLDMzNTMzLDMzNTM0LDMzNTM1LDMzNTM2LDMzNTQ2LDMzNTQ3LDMzNTQ5LDMzNTUyLDMzNTU0LDMzNTU1LDMzNTU4LDMzNTYwLDMzNTYxLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY4LDMzNTY5LDMzNTcwLDMzNTcxLDMzNTcyLDMzNTczLDMzNTc0LDMzNTc3LDMzNTc4LDMzNTgyLDMzNTg0''@;'; put 'put ''LDMzNTg2LDMzNTkxLDMzNTk1LDMzNTk3LDIxODYwLDMzMDg2LDMwMTMwLDMwMzgyLDIxMzA1LDMwMTc0LDIwNzMxLDIzNjE3LDM1NjkyLDMxNjg3LDIwNTU5LDI5MjU1LDM5NTc1LDM5MTI4LDI4NDE4LDI5OTIyLDMxMDgwLDI1NzM1LDMwNjI5LDI1MzQwLDM5MDU3LDM2MTM5LDIxNjk3LDMy''@;'; put 'put ''ODU2LDIwMDUwLDIyMzc4LDMzNTI5LDMzODA1LDI0MTc5LDIwOTczLDI5OTQyLDM1NzgwLDIzNjMxLDIyMzY5LDI3OTAwLDM5MDQ3LDIzMTEwLDMwNzcyLDM5NzQ4LDM2ODQzLDMxODkzLDIxMDc4LDI1MTY5LDM4MTM4LDIwMTY2LDMzNjcwLDMzODg5LDMzNzY5LDMzOTcwLDIyNDg0LDI2NDIw''@;'; put 'put ''LDIyMjc1LDI2MjIyLDI4MDA2LDM1ODg5LDI2MzMzLDI4Njg5LDI2Mzk5LDI3NDUwLDI2NjQ2LDI1MTE0LDIyOTcxLDE5OTcxLDIwOTMyLDI4NDIyLDI2NTc4LDI3NzkxLDIwODU0LDI2ODI3LDIyODU1LDI3NDk1LDMwMDU0LDIzODIyLDMzMDQwLDQwNzg0LDI2MDcxLDMxMDQ4LDMxMDQxLDM5''@;'; put 'put ''NTY5LDM2MjE1LDIzNjgyLDIwMDYyLDIwMjI1LDIxNTUxLDIyODY1LDMwNzMyLDIyMTIwLDI3NjY4LDM2ODA0LDI0MzIzLDI3NzczLDI3ODc1LDM1NzU1LDI1NDg4LDMzNTk4LDMzNTk5LDMzNjAxLDMzNjAyLDMzNjA0LDMzNjA1LDMzNjA4LDMzNjEwLDMzNjExLDMzNjEyLDMzNjEzLDMzNjE0''@;'; put 'put ''LDMzNjE5LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjI0LDMzNjI1LDMzNjI5LDMzNjM0LDMzNjQ4LDMzNjQ5LDMzNjUwLDMzNjUxLDMzNjUyLDMzNjUzLDMzNjU0LDMzNjU3LDMzNjU4LDMzNjYyLDMzNjYzLDMzNjY0LDMzNjY1LDMzNjY2LDMzNjY3LDMzNjY4LDMzNjcxLDMzNjcyLDMzNjc0LDMz''@;'; put 'put ''Njc1LDMzNjc2LDMzNjc3LDMzNjc5LDMzNjgwLDMzNjgxLDMzNjg0LDMzNjg1LDMzNjg2LDMzNjg3LDMzNjg5LDMzNjkwLDMzNjkzLDMzNjk1LDMzNjk3LDMzNjk4LDMzNjk5LDMzNzAwLDMzNzAxLDMzNzAyLDMzNzAzLDMzNzA4LDMzNzA5LDMzNzEwLDMzNzExLDMzNzE3LDMzNzIzLDMzNzI2''@;'; put 'put ''LDMzNzI3LDMzNzMwLDMzNzMxLDMzNzMyLDMzNzM0LDMzNzM2LDMzNzM3LDMzNzM5LDMzNzQxLDMzNzQyLDMzNzQ0LDMzNzQ1LDMzNzQ2LDMzNzQ3LDMzNzQ5LDMzNzUxLDMzNzUzLDMzNzU0LDMzNzU1LDMzNzU4LDMzNzYyLDMzNzYzLDMzNzY0LDMzNzY2LDMzNzY3LDMzNzY4LDMzNzcxLDMz''@;'; put 'put ''NzcyLDMzNzczLDI0Njg4LDI3OTY1LDI5MzAxLDI1MTkwLDM4MDMwLDM4MDg1LDIxMzE1LDM2ODAxLDMxNjE0LDIwMTkxLDM1ODc4LDIwMDk0LDQwNjYwLDM4MDY1LDM4MDY3LDIxMDY5LDI4NTA4LDM2OTYzLDI3OTczLDM1ODkyLDIyNTQ1LDIzODg0LDI3NDI0LDI3NDY1LDI2NTM4LDIxNTk1''@;'; put 'put ''LDMzMTA4LDMyNjUyLDIyNjgxLDM0MTAzLDI0Mzc4LDI1MjUwLDI3MjA3LDM4MjAxLDI1OTcwLDI0NzA4LDI2NzI1LDMwNjMxLDIwMDUyLDIwMzkyLDI0MDM5LDM4ODA4LDI1NzcyLDMyNzI4LDIzNzg5LDIwNDMxLDMxMzczLDIwOTk5LDMzNTQwLDE5OTg4LDI0NjIzLDMxMzYzLDM4MDU0LDIw''@;'; put 'put ''NDA1LDIwMTQ2LDMxMjA2LDI5NzQ4LDIxMjIwLDMzNDY1LDI1ODEwLDMxMTY1LDIzNTE3LDI3Nzc3LDM4NzM4LDM2NzMxLDI3NjgyLDIwNTQyLDIxMzc1LDI4MTY1LDI1ODA2LDI2MjI4LDI3Njk2LDI0NzczLDM5MDMxLDM1ODMxLDI0MTk4LDI5NzU2LDMxMzUxLDMxMTc5LDE5OTkyLDM3MDQx''@;'; put 'put ''LDI5Njk5LDI3NzE0LDIyMjM0LDM3MTk1LDI3ODQ1LDM2MjM1LDIxMzA2LDM0NTAyLDI2MzU0LDM2NTI3LDIzNjI0LDM5NTM3LDI4MTkyLDMzNzc0LDMzNzc1LDMzNzc5LDMzNzgwLDMzNzgxLDMzNzgyLDMzNzgzLDMzNzg2LDMzNzg3LDMzNzg4LDMzNzkwLDMzNzkxLDMzNzkyLDMzNzk0LDMz''@;'; put 'put ''Nzk3LDMzNzk5LDMzODAwLDMzODAxLDMzODAyLDMzODA4LDMzODEwLDMzODExLDMzODEyLDMzODEzLDMzODE0LDMzODE1LDMzODE3LDMzODE4LDMzODE5LDMzODIyLDMzODIzLDMzODI0LDMzODI1LDMzODI2LDMzODI3LDMzODMzLDMzODM0LDMzODM1LDMzODM2LDMzODM3LDMzODM4LDMzODM5''@;'; put 'put ''LDMzODQwLDMzODQyLDMzODQzLDMzODQ0LDMzODQ1LDMzODQ2LDMzODQ3LDMzODQ5LDMzODUwLDMzODUxLDMzODU0LDMzODU1LDMzODU2LDMzODU3LDMzODU4LDMzODU5LDMzODYwLDMzODYxLDMzODYzLDMzODY0LDMzODY1LDMzODY2LDMzODY3LDMzODY4LDMzODY5LDMzODcwLDMzODcxLDMz''@;'; put 'put ''ODcyLDMzODc0LDMzODc1LDMzODc2LDMzODc3LDMzODc4LDMzODgwLDMzODg1LDMzODg2LDMzODg3LDMzODg4LDMzODkwLDMzODkyLDMzODkzLDMzODk0LDMzODk1LDMzODk2LDMzODk4LDMzOTAyLDMzOTAzLDMzOTA0LDMzOTA2LDMzOTA4LDMzOTExLDMzOTEzLDMzOTE1LDMzOTE2LDIxNDYy''@;'; put 'put ''LDIzMDk0LDQwODQzLDM2MjU5LDIxNDM1LDIyMjgwLDM5MDc5LDI2NDM1LDM3Mjc1LDI3ODQ5LDIwODQwLDMwMTU0LDI1MzMxLDI5MzU2LDIxMDQ4LDIxMTQ5LDMyNTcwLDI4ODIwLDMwMjY0LDIxMzY0LDQwNTIyLDI3MDYzLDMwODMwLDM4NTkyLDM1MDMzLDMyNjc2LDI4OTgyLDI5MTIzLDIw''@;'; put 'put ''ODczLDI2NTc5LDI5OTI0LDIyNzU2LDI1ODgwLDIyMTk5LDM1NzUzLDM5Mjg2LDI1MjAwLDMyNDY5LDI0ODI1LDI4OTA5LDIyNzY0LDIwMTYxLDIwMTU0LDI0NTI1LDM4ODg3LDIwMjE5LDM1NzQ4LDIwOTk1LDIyOTIyLDMyNDI3LDI1MTcyLDIwMTczLDI2MDg1LDI1MTAyLDMzNTkyLDMzOTkz''@;'; put 'put ''LDMzNjM1LDM0NzAxLDI5MDc2LDI4MzQyLDIzNDgxLDMyNDY2LDIwODg3LDI1NTQ1LDI2NTgwLDMyOTA1LDMzNTkzLDM0ODM3LDIwNzU0LDIzNDE4LDIyOTE0LDM2Nzg1LDIwMDgzLDI3NzQxLDIwODM3LDM1MTA5LDM2NzE5LDM4NDQ2LDM0MTIyLDI5NzkwLDM4MTYwLDM4Mzg0LDI4MDcwLDMz''@;'; put 'put ''NTA5LDI0MzY5LDI1NzQ2LDI3OTIyLDMzODMyLDMzMTM0LDQwMTMxLDIyNjIyLDM2MTg3LDE5OTc3LDIxNDQxLDMzOTE3LDMzOTE4LDMzOTE5LDMzOTIwLDMzOTIxLDMzOTIzLDMzOTI0LDMzOTI1LDMzOTI2LDMzOTMwLDMzOTMzLDMzOTM1LDMzOTM2LDMzOTM3LDMzOTM4LDMzOTM5LDMzOTQw''@;'; put 'put ''LDMzOTQxLDMzOTQyLDMzOTQ0LDMzOTQ2LDMzOTQ3LDMzOTQ5LDMzOTUwLDMzOTUxLDMzOTUyLDMzOTU0LDMzOTU1LDMzOTU2LDMzOTU3LDMzOTU4LDMzOTU5LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTYzLDMzOTY0LDMzOTY1LDMzOTY2LDMzOTY4LDMzOTY5LDMzOTcxLDMzOTczLDMzOTc0LDMz''@;'; put 'put ''OTc1LDMzOTc5LDMzOTgwLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTg3LDMzOTg5LDMzOTkwLDMzOTkxLDMzOTkyLDMzOTk1LDMzOTk2LDMzOTk4LDMzOTk5LDM0MDAyLDM0MDA0LDM0MDA1LDM0MDA3LDM0MDA4LDM0MDA5LDM0MDEwLDM0MDExLDM0MDEyLDM0MDE0LDM0MDE3LDM0MDE4LDM0MDIw''@;'; put 'put ''LDM0MDIzLDM0MDI0LDM0MDI1LDM0MDI2LDM0MDI3LDM0MDI5LDM0MDMwLDM0MDMxLDM0MDMzLDM0MDM0LDM0MDM1LDM0MDM2LDM0MDM3LDM0MDM4LDM0MDM5LDM0MDQwLDM0MDQxLDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDQ2LDM0MDQ4LDM0MDQ5LDM0MDUwLDIwMjU0LDI1OTU1LDI2NzA1LDIx''@;'; put 'put ''OTcxLDIwMDA3LDI1NjIwLDM5NTc4LDI1MTk1LDIzMjM0LDI5NzkxLDMzMzk0LDI4MDczLDI2ODYyLDIwNzExLDMzNjc4LDMwNzIyLDI2NDMyLDIxMDQ5LDI3ODAxLDMyNDMzLDIwNjY3LDIxODYxLDI5MDIyLDMxNTc5LDI2MTk0LDI5NjQyLDMzNTE1LDI2NDQxLDIzNjY1LDIxMDI0LDI5MDUz''@;'; put 'put ''LDM0OTIzLDM4Mzc4LDM4NDg1LDI1Nzk3LDM2MTkzLDMzMjAzLDIxODkyLDI3NzMzLDI1MTU5LDMyNTU4LDIyNjc0LDIwMjYwLDIxODMwLDM2MTc1LDI2MTg4LDE5OTc4LDIzNTc4LDM1MDU5LDI2Nzg2LDI1NDIyLDMxMjQ1LDI4OTAzLDMzNDIxLDIxMjQyLDM4OTAyLDIzNTY5LDIxNzM2LDM3''@;'; put 'put ''MDQ1LDMyNDYxLDIyODgyLDM2MTcwLDM0NTAzLDMzMjkyLDMzMjkzLDM2MTk4LDI1NjY4LDIzNTU2LDI0OTEzLDI4MDQxLDMxMDM4LDM1Nzc0LDMwNzc1LDMwMDAzLDIxNjI3LDIwMjgwLDM2NTIzLDI4MTQ1LDIzMDcyLDMyNDUzLDMxMDcwLDI3Nzg0LDIzNDU3LDIzMTU4LDI5OTc4LDMyOTU4''@;'; put 'put ''LDI0OTEwLDI4MTgzLDIyNzY4LDI5OTgzLDI5OTg5LDI5Mjk4LDIxMzE5LDMyNDk5LDM0MDUxLDM0MDUyLDM0MDUzLDM0MDU0LDM0MDU1LDM0MDU2LDM0MDU3LDM0MDU4LDM0MDU5LDM0MDYxLDM0MDYyLDM0MDYzLDM0MDY0LDM0MDY2LDM0MDY4LDM0MDY5LDM0MDcwLDM0MDcyLDM0MDczLDM0''@;'; put 'put ''MDc1LDM0MDc2LDM0MDc3LDM0MDc4LDM0MDgwLDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg2LDM0MDg3LDM0MDg4LDM0MDg5LDM0MDkwLDM0MDkzLDM0MDk0LDM0MDk1LDM0MDk2LDM0MDk3LDM0MDk4LDM0MDk5LDM0MTAwLDM0MTAxLDM0MTAyLDM0MTEwLDM0MTExLDM0MTEyLDM0MTEz''@;'; put 'put ''LDM0MTE0LDM0MTE2LDM0MTE3LDM0MTE4LDM0MTE5LDM0MTIzLDM0MTI0LDM0MTI1LDM0MTI2LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTMyLDM0MTMzLDM0MTM1LDM0MTM2LDM0MTM4LDM0MTM5LDM0MTQwLDM0MTQxLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ3LDM0''@;'; put 'put ''MTQ5LDM0MTUwLDM0MTUxLDM0MTUzLDM0MTU0LDM0MTU1LDM0MTU2LDM0MTU3LDM0MTU4LDM0MTU5LDM0MTYwLDM0MTYxLDM0MTYzLDM0MTY1LDM0MTY2LDM0MTY3LDM0MTY4LDM0MTcyLDM0MTczLDM0MTc1LDM0MTc2LDM0MTc3LDMwNDY1LDMwNDI3LDIxMDk3LDMyOTg4LDIyMzA3LDI0MDcy''@;'; put 'put ''LDIyODMzLDI5NDIyLDI2MDQ1LDI4Mjg3LDM1Nzk5LDIzNjA4LDM0NDE3LDIxMzEzLDMwNzA3LDI1MzQyLDI2MTAyLDIwMTYwLDM5MTM1LDM0NDMyLDIzNDU0LDM1NzgyLDIxNDkwLDMwNjkwLDIwMzUxLDIzNjMwLDM5NTQyLDIyOTg3LDI0MzM1LDMxMDM0LDIyNzYzLDE5OTkwLDI2NjIzLDIw''@;'; put 'put ''MTA3LDI1MzI1LDM1NDc1LDM2ODkzLDIxMTgzLDI2MTU5LDIxOTgwLDIyMTI0LDM2ODY2LDIwMTgxLDIwMzY1LDM3MzIyLDM5MjgwLDI3NjYzLDI0MDY2LDI0NjQzLDIzNDYwLDM1MjcwLDM1Nzk3LDI1OTEwLDI1MTYzLDM5MzE4LDIzNDMyLDIzNTUxLDI1NDgwLDIxODA2LDIxNDYzLDMwMjQ2''@;'; put 'put ''LDIwODYxLDM0MDkyLDI2NTMwLDI2ODAzLDI3NTMwLDI1MjM0LDM2NzU1LDIxNDYwLDMzMjk4LDI4MTEzLDMwMDk1LDIwMDcwLDM2MTc0LDIzNDA4LDI5MDg3LDM0MjIzLDI2MjU3LDI2MzI5LDMyNjI2LDM0NTYwLDQwNjUzLDQwNzM2LDIzNjQ2LDI2NDE1LDM2ODQ4LDI2NjQxLDI2NDYzLDI1''@;'; put 'put ''MTAxLDMxNDQ2LDIyNjYxLDI0MjQ2LDI1OTY4LDI4NDY1LDM0MTc4LDM0MTc5LDM0MTgyLDM0MTg0LDM0MTg1LDM0MTg2LDM0MTg3LDM0MTg4LDM0MTg5LDM0MTkwLDM0MTkyLDM0MTkzLDM0MTk0LDM0MTk1LDM0MTk2LDM0MTk3LDM0MTk4LDM0MTk5LDM0MjAwLDM0MjAxLDM0MjAyLDM0MjA1''@;'; put 'put ''LDM0MjA2LDM0MjA3LDM0MjA4LDM0MjA5LDM0MjEwLDM0MjExLDM0MjEzLDM0MjE0LDM0MjE1LDM0MjE3LDM0MjE5LDM0MjIwLDM0MjIxLDM0MjI1LDM0MjI2LDM0MjI3LDM0MjI4LDM0MjI5LDM0MjMwLDM0MjMyLDM0MjM0LDM0MjM1LDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQwLDM0''@;'; put 'put ''MjQyLDM0MjQzLDM0MjQ0LDM0MjQ1LDM0MjQ2LDM0MjQ3LDM0MjQ4LDM0MjUwLDM0MjUxLDM0MjUyLDM0MjUzLDM0MjU0LDM0MjU3LDM0MjU4LDM0MjYwLDM0MjYyLDM0MjYzLDM0MjY0LDM0MjY1LDM0MjY2LDM0MjY3LDM0MjY5LDM0MjcwLDM0MjcxLDM0MjcyLDM0MjczLDM0Mjc0LDM0Mjc1''@;'; put 'put ''LDM0Mjc3LDM0Mjc4LDM0Mjc5LDM0MjgwLDM0MjgyLDM0MjgzLDM0Mjg0LDM0Mjg1LDM0Mjg2LDM0Mjg3LDM0Mjg4LDM0Mjg5LDM0MjkwLDM0MjkxLDM0MjkyLDM0MjkzLDM0Mjk0LDM0Mjk1LDM0Mjk2LDI0NjYxLDIxMDQ3LDMyNzgxLDI1Njg0LDM0OTI4LDI5OTkzLDI0MDY5LDI2NjQzLDI1''@;'; put 'put ''MzMyLDM4Njg0LDIxNDUyLDI5MjQ1LDM1ODQxLDI3NzAwLDMwNTYxLDMxMjQ2LDIxNTUwLDMwNjM2LDM5MDM0LDMzMzA4LDM1ODI4LDMwODA1LDI2Mzg4LDI4ODY1LDI2MDMxLDI1NzQ5LDIyMDcwLDI0NjA1LDMxMTY5LDIxNDk2LDE5OTk3LDI3NTE1LDMyOTAyLDIzNTQ2LDIxOTg3LDIyMjM1''@;'; put 'put ''LDIwMjgyLDIwMjg0LDM5MjgyLDI0MDUxLDI2NDk0LDMyODI0LDI0NTc4LDM5MDQyLDM2ODY1LDIzNDM1LDM1NzcyLDM1ODI5LDI1NjI4LDMzMzY4LDI1ODIyLDIyMDEzLDMzNDg3LDM3MjIxLDIwNDM5LDMyMDMyLDM2ODk1LDMxOTAzLDIwNzIzLDIyNjA5LDI4MzM1LDIzNDg3LDM1Nzg1LDMy''@;'; put 'put ''ODk5LDM3MjQwLDMzOTQ4LDMxNjM5LDM0NDI5LDM4NTM5LDM4NTQzLDMyNDg1LDM5NjM1LDMwODYyLDIzNjgxLDMxMzE5LDM2OTMwLDM4NTY3LDMxMDcxLDIzMzg1LDI1NDM5LDMxNDk5LDM0MDAxLDI2Nzk3LDIxNzY2LDMyNTUzLDI5NzEyLDMyMDM0LDM4MTQ1LDI1MTUyLDIyNjA0LDIwMTgy''@;'; put 'put ''LDIzNDI3LDIyOTA1LDIyNjEyLDM0Mjk3LDM0Mjk4LDM0MzAwLDM0MzAxLDM0MzAyLDM0MzA0LDM0MzA1LDM0MzA2LDM0MzA3LDM0MzA4LDM0MzEwLDM0MzExLDM0MzEyLDM0MzEzLDM0MzE0LDM0MzE1LDM0MzE2LDM0MzE3LDM0MzE4LDM0MzE5LDM0MzIwLDM0MzIyLDM0MzIzLDM0MzI0LDM0''@;'; put 'put ''MzI1LDM0MzI3LDM0MzI4LDM0MzI5LDM0MzMwLDM0MzMxLDM0MzMyLDM0MzMzLDM0MzM0LDM0MzM1LDM0MzM2LDM0MzM3LDM0MzM4LDM0MzM5LDM0MzQwLDM0MzQxLDM0MzQyLDM0MzQ0LDM0MzQ2LDM0MzQ3LDM0MzQ4LDM0MzQ5LDM0MzUwLDM0MzUxLDM0MzUyLDM0MzUzLDM0MzU0LDM0MzU1''@;'; put 'put ''LDM0MzU2LDM0MzU3LDM0MzU4LDM0MzU5LDM0MzYxLDM0MzYyLDM0MzYzLDM0MzY1LDM0MzY2LDM0MzY3LDM0MzY4LDM0MzY5LDM0MzcwLDM0MzcxLDM0MzcyLDM0MzczLDM0Mzc0LDM0Mzc1LDM0Mzc2LDM0Mzc3LDM0Mzc4LDM0Mzc5LDM0MzgwLDM0Mzg2LDM0Mzg3LDM0Mzg5LDM0MzkwLDM0''@;'; put 'put ''MzkxLDM0MzkyLDM0MzkzLDM0Mzk1LDM0Mzk2LDM0Mzk3LDM0Mzk5LDM0NDAwLDM0NDAxLDM0NDAzLDM0NDA0LDM0NDA1LDM0NDA2LDM0NDA3LDM0NDA4LDM0NDA5LDM0NDEwLDI5NTQ5LDI1Mzc0LDM2NDI3LDM2MzY3LDMyOTc0LDMzNDkyLDI1MjYwLDIxNDg4LDI3ODg4LDM3MjE0LDIyODI2''@;'; put 'put ''LDI0NTc3LDI3NzYwLDIyMzQ5LDI1Njc0LDM2MTM4LDMwMjUxLDI4MzkzLDIyMzYzLDI3MjY0LDMwMTkyLDI4NTI1LDM1ODg1LDM1ODQ4LDIyMzc0LDI3NjMxLDM0OTYyLDMwODk5LDI1NTA2LDIxNDk3LDI4ODQ1LDI3NzQ4LDIyNjE2LDI1NjQyLDIyNTMwLDI2ODQ4LDMzMTc5LDIxNzc2LDMx''@;'; put 'put ''OTU4LDIwNTA0LDM2NTM4LDI4MTA4LDM2MjU1LDI4OTA3LDI1NDg3LDI4MDU5LDI4MzcyLDMyNDg2LDMzNzk2LDI2NjkxLDM2ODY3LDI4MTIwLDM4NTE4LDM1NzUyLDIyODcxLDI5MzA1LDM0Mjc2LDMzMTUwLDMwMTQwLDM1NDY2LDI2Nzk5LDIxMDc2LDM2Mzg2LDM4MTYxLDI1NTUyLDM5MDY0''@;'; put 'put ''LDM2NDIwLDIxODg0LDIwMzA3LDI2MzY3LDIyMTU5LDI0Nzg5LDI4MDUzLDIxMDU5LDIzNjI1LDIyODI1LDI4MTU1LDIyNjM1LDNlNCwyOTk4MCwyNDY4NCwzMzMwMCwzMzA5NCwyNTM2MSwyNjQ2NSwzNjgzNCwzMDUyMiwzNjMzOSwzNjE0OCwzODA4MSwyNDA4NiwyMTM4MSwyMTU0OCwyODg2''@;'; put 'put ''NywzNDQxMywzNDQxNSwzNDQxNiwzNDQxOCwzNDQxOSwzNDQyMCwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNCwzNDQzNSwzNDQzNiwzNDQzNywzNDQzOCwzNDQzOSwzNDQ0MCwzNDQ0MSwzNDQ0NiwzNDQ0NywzNDQ0OCwzNDQ0OSwzNDQ1MCwzNDQ1MiwzNDQ1NCwzNDQ1NSwzNDQ1NiwzNDQ1Nywz''@;'; put 'put ''NDQ1OCwzNDQ1OSwzNDQ2MiwzNDQ2MywzNDQ2NCwzNDQ2NSwzNDQ2NiwzNDQ2OSwzNDQ3MCwzNDQ3NSwzNDQ3NywzNDQ3OCwzNDQ4MiwzNDQ4MywzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5MSwzNDQ5MiwzNDQ5MywzNDQ5NCwzNDQ5NSwzNDQ5NywzNDQ5OCwzNDQ5OSwzNDUwMSwzNDUwNCwzNDUw''@;'; put 'put ''OCwzNDUwOSwzNDUxNCwzNDUxNSwzNDUxNywzNDUxOCwzNDUxOSwzNDUyMiwzNDUyNCwzNDUyNSwzNDUyOCwzNDUyOSwzNDUzMCwzNDUzMSwzNDUzMywzNDUzNCwzNDUzNSwzNDUzNiwzNDUzOCwzNDUzOSwzNDU0MCwzNDU0MywzNDU0OSwzNDU1MCwzNDU1MSwzNDU1NCwzNDU1NSwzNDU1Niwz''@;'; put 'put ''NDU1NywzNDU1OSwzNDU2MSwzNDU2NCwzNDU2NSwzNDU2NiwzNDU3MSwzNDU3MiwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3NywzNDU4MCwzNDU4MiwyNzcxMiwyNDMxMSwyMDU3MiwyMDE0MSwyNDIzNywyNTQwMiwzMzM1MSwzNjg5MCwyNjcwNCwzNzIzMCwzMDY0MywyMTUxNiwzODEwOCwyNDQy''@;'; put 'put ''MCwzMTQ2MSwyNjc0MiwyNTQxMywzMTU3MCwzMjQ3OSwzMDE3MSwyMDU5OSwyNTIzNywyMjgzNiwzNjg3OSwyMDk4NCwzMTE3MSwzMTM2MSwyMjI3MCwyNDQ2NiwzNjg4NCwyODAzNCwyMzY0OCwyMjMwMywyMTUyMCwyMDgyMCwyODIzNywyMjI0MiwyNTUxMiwzOTA1OSwzMzE1MSwzNDU4MSwz''@;'; put 'put ''NTExNCwzNjg2NCwyMTUzNCwyMzY2MywzMzIxNiwyNTMwMiwyNTE3NiwzMzA3Myw0MDUwMSwzODQ2NCwzOTUzNCwzOTU0OCwyNjkyNSwyMjk0OSwyNTI5OSwyMTgyMiwyNTM2NiwyMTcwMywzNDUyMSwyNzk2NCwyMzA0MywyOTkyNiwzNDk3MiwyNzQ5OCwyMjgwNiwzNTkxNiwyNDM2NywyODI4''@;'; put 'put ''NiwyOTYwOSwzOTAzNywyMDAyNCwyODkxOSwyMzQzNiwzMDg3MSwyNTQwNSwyNjIwMiwzMDM1OCwyNDc3OSwyMzQ1MSwyMzExMywxOTk3NSwzMzEwOSwyNzc1NCwyOTU3OSwyMDEyOSwyNjUwNSwzMjU5MywyNDQ0OCwyNjEwNiwyNjM5NSwyNDUzNiwyMjkxNiwyMzA0MSwzNDU4NSwzNDU4Nywz''@;'; put 'put ''NDU4OSwzNDU5MSwzNDU5MiwzNDU5NiwzNDU5OCwzNDU5OSwzNDYwMCwzNDYwMiwzNDYwMywzNDYwNCwzNDYwNSwzNDYwNywzNDYwOCwzNDYxMCwzNDYxMSwzNDYxMywzNDYxNCwzNDYxNiwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyNCwzNDYyNSwzNDYyNiwzNDYyNywzNDYyOCwzNDYy''@;'; put 'put ''OSwzNDYzMCwzNDYzNCwzNDYzNSwzNDYzNywzNDYzOSwzNDY0MCwzNDY0MSwzNDY0MiwzNDY0NCwzNDY0NSwzNDY0NiwzNDY0OCwzNDY1MCwzNDY1MSwzNDY1MiwzNDY1MywzNDY1NCwzNDY1NSwzNDY1NywzNDY1OCwzNDY2MiwzNDY2MywzNDY2NCwzNDY2NSwzNDY2NiwzNDY2NywzNDY2OCwz''@;'; put 'put ''NDY2OSwzNDY3MSwzNDY3MywzNDY3NCwzNDY3NSwzNDY3NywzNDY3OSwzNDY4MCwzNDY4MSwzNDY4MiwzNDY4NywzNDY4OCwzNDY4OSwzNDY5MiwzNDY5NCwzNDY5NSwzNDY5NywzNDY5OCwzNDcwMCwzNDcwMiwzNDcwMywzNDcwNCwzNDcwNSwzNDcwNiwzNDcwOCwzNDcwOSwzNDcxMCwzNDcx''@;'; put 'put ''MiwzNDcxMywzNDcxNCwzNDcxNSwzNDcxNiwzNDcxNywzNDcxOCwzNDcyMCwzNDcyMSwzNDcyMiwzNDcyMywzNDcyNCwyNDAxMywyNDQ5NCwyMTM2MSwzODg4NiwzNjgyOSwyNjY5MywyMjI2MCwyMTgwNywyNDc5OSwyMDAyNiwyODQ5MywzMjUwMCwzMzQ3OSwzMzgwNiwyMjk5NiwyMDI1NSwy''@;'; put 'put ''MDI2NiwyMzYxNCwzMjQyOCwyNjQxMCwzNDA3NCwyMTYxOSwzMDAzMSwzMjk2MywyMTg5MCwzOTc1OSwyMDMwMSwyODIwNSwzNTg1OSwyMzU2MSwyNDk0NCwyMTM1NSwzMDIzOSwyODIwMSwzNDQ0MiwyNTk5MSwzODM5NSwzMjQ0MSwyMTU2MywzMTI4MywzMjAxMCwzODM4MiwyMTk4NSwzMjcw''@;'; put 'put ''NSwyOTkzNCwyNTM3MywzNDU4MywyODA2NSwzMTM4OSwyNTEwNSwyNjAxNywyMTM1MSwyNTU2OSwyNzc3OSwyNDA0MywyMTU5NiwzODA1NiwyMDA0NCwyNzc0NSwzNTgyMCwyMzYyNywyNjA4MCwzMzQzNiwyNjc5MSwyMTU2NiwyMTU1NiwyNzU5NSwyNzQ5NCwyMDExNiwyNTQxMCwyMTMyMCwz''@;'; put 'put ''MzMxMCwyMDIzNywyMDM5OCwyMjM2NiwyNTA5OCwzODY1NCwyNjIxMiwyOTI4OSwyMTI0NywyMTE1MywyNDczNSwzNTgyMywyNjEzMiwyOTA4MSwyNjUxMiwzNTE5OSwzMDgwMiwzMDcxNywyNjIyNCwyMjA3NSwyMTU2MCwzODE3NywyOTMwNiwzNDcyNSwzNDcyNiwzNDcyNywzNDcyOSwzNDcz''@;'; put 'put ''MCwzNDczNCwzNDczNiwzNDczNywzNDczOCwzNDc0MCwzNDc0MiwzNDc0MywzNDc0NCwzNDc0NSwzNDc0NywzNDc0OCwzNDc1MCwzNDc1MSwzNDc1MywzNDc1NCwzNDc1NSwzNDc1NiwzNDc1NywzNDc1OSwzNDc2MCwzNDc2MSwzNDc2NCwzNDc2NSwzNDc2NiwzNDc2NywzNDc2OCwzNDc3Miwz''@;'; put 'put ''NDc3MywzNDc3NCwzNDc3NSwzNDc3NiwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MSwzNDc4MiwzNDc4MywzNDc4NSwzNDc4NiwzNDc4NywzNDc4OCwzNDc5MCwzNDc5MSwzNDc5MiwzNDc5MywzNDc5NSwzNDc5NiwzNDc5NywzNDc5OSwzNDgwMCwzNDgwMSwzNDgwMiwzNDgwMywzNDgwNCwzNDgw''@;'; put 'put ''NSwzNDgwNiwzNDgwNywzNDgwOCwzNDgxMCwzNDgxMSwzNDgxMiwzNDgxMywzNDgxNSwzNDgxNiwzNDgxNywzNDgxOCwzNDgyMCwzNDgyMSwzNDgyMiwzNDgyMywzNDgyNCwzNDgyNSwzNDgyNywzNDgyOCwzNDgyOSwzNDgzMCwzNDgzMSwzNDgzMiwzNDgzMywzNDgzNCwzNDgzNiwzNDgzOSwz''@;'; put 'put ''NDg0MCwzNDg0MSwzNDg0MiwzNDg0NCwzNDg0NSwzNDg0NiwzNDg0NywzNDg0OCwzNDg1MSwzMTIzMiwyNDY4NywyNDA3NiwyNDcxMywzMzE4MSwyMjgwNSwyNDc5NiwyOTA2MCwyODkxMSwyODMzMCwyNzcyOCwyOTMxMiwyNzI2OCwzNDk4OSwyNDEwOSwyMDA2NCwyMzIxOSwyMTkxNiwzODEx''@;'; put 'put ''NSwyNzkyNywzMTk5NSwzODU1MywyNTEwMywzMjQ1NCwzMDYwNiwzNDQzMCwyMTI4MywzODY4NiwzNjc1OCwyNjI0NywyMzc3NywyMDM4NCwyOTQyMSwxOTk3OSwyMTQxNCwyMjc5OSwyMTUyMywyNTQ3MiwzODE4NCwyMDgwOCwyMDE4NSw0MDA5MiwzMjQyMCwyMTY4OCwzNjEzMiwzNDkwMCwz''@;'; put 'put ''MzMzNSwzODM4NiwyODA0NiwyNDM1OCwyMzI0NCwyNjE3NCwzODUwNSwyOTYxNiwyOTQ4NiwyMTQzOSwzMzE0NiwzOTMwMSwzMjY3MywyMzQ2NiwzODUxOSwzODQ4MCwzMjQ0NywzMDQ1NiwyMTQxMCwzODI2MiwzOTMyMSwzMTY2NSwzNTE0MCwyODI0OCwyMDA2NSwzMjcyNCwzMTA3NywzNTgx''@;'; put 'put ''NCwyNDgxOSwyMTcwOSwyMDEzOSwzOTAzMywyNDA1NSwyNzIzMywyMDY4NywyMTUyMSwzNTkzNywzMzgzMSwzMDgxMywzODY2MCwyMTA2NiwyMTc0MiwyMjE3OSwzODE0NCwyODA0MCwyMzQ3NywyODEwMiwyNjE5NSwzNDg1MiwzNDg1MywzNDg1NCwzNDg1NSwzNDg1NiwzNDg1NywzNDg1OCwz''@;'; put 'put ''NDg1OSwzNDg2MCwzNDg2MSwzNDg2MiwzNDg2MywzNDg2NCwzNDg2NSwzNDg2NywzNDg2OCwzNDg2OSwzNDg3MCwzNDg3MSwzNDg3MiwzNDg3NCwzNDg3NSwzNDg3NywzNDg3OCwzNDg3OSwzNDg4MSwzNDg4MiwzNDg4MywzNDg4NiwzNDg4NywzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5''@;'; put 'put ''NCwzNDg5NSwzNDg5NiwzNDg5NywzNDg5OCwzNDg5OSwzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwNywzNDkwOCwzNDkwOSwzNDkxMCwzNDkxMSwzNDkxMiwzNDkxOCwzNDkxOSwzNDkyMiwzNDkyNSwzNDkyNywzNDkyOSwzNDkzMSwzNDkzMiwzNDkzMywzNDkzNCwzNDkzNiwzNDkzNywz''@;'; put 'put ''NDkzOCwzNDkzOSwzNDk0MCwzNDk0NCwzNDk0NywzNDk1MCwzNDk1MSwzNDk1MywzNDk1NCwzNDk1NiwzNDk1OCwzNDk1OSwzNDk2MCwzNDk2MSwzNDk2MywzNDk2NCwzNDk2NSwzNDk2NywzNDk2OCwzNDk2OSwzNDk3MCwzNDk3MSwzNDk3MywzNDk3NCwzNDk3NSwzNDk3NiwzNDk3NywzNDk3''@;'; put 'put ''OSwzNDk4MSwzNDk4MiwzNDk4MywzNDk4NCwzNDk4NSwzNDk4NiwyMzU2NywyMzM4OSwyNjY1NywzMjkxOCwyMTg4MCwzMTUwNSwyNTkyOCwyNjk2NCwyMDEyMywyNzQ2MywzNDYzOCwzODc5NSwyMTMyNywyNTM3NSwyNTY1OCwzNzAzNCwyNjAxMiwzMjk2MSwzNTg1NiwyMDg4OSwyNjgwMCwy''@;'; put 'put ''MTM2OCwzNDgwOSwyNTAzMiwyNzg0NCwyNzg5OSwzNTg3NCwyMzYzMywzNDIxOCwzMzQ1NSwzODE1NiwyNzQyNywzNjc2MywyNjAzMiwyNDU3MSwyNDUxNSwyMDQ0OSwzNDg4NSwyNjE0MywzMzEyNSwyOTQ4MSwyNDgyNiwyMDg1MiwyMTAwOSwyMjQxMSwyNDQxOCwzNzAyNiwzNDg5MiwzNzI2''@;'; put 'put ''NiwyNDE4NCwyNjQ0NywyNDYxNSwyMjk5NSwyMDgwNCwyMDk4MiwzMzAxNiwyMTI1NiwyNzc2OSwzODU5NiwyOTA2NiwyMDI0MSwyMDQ2MiwzMjY3MCwyNjQyOSwyMTk1NywzODE1MiwzMTE2OCwzNDk2NiwzMjQ4MywyMjY4NywyNTEwMCwzODY1NiwzNDM5NCwyMjA0MCwzOTAzNSwyNDQ2NCwz''@;'; put 'put ''NTc2OCwzMzk4OCwzNzIwNywyMTQ2NSwyNjA5MywyNDIwNywzMDA0NCwyNDY3NiwzMjExMCwyMzE2NywzMjQ5MCwzMjQ5MywzNjcxMywyMTkyNywyMzQ1OSwyNDc0OCwyNjA1OSwyOTU3MiwzNDk4OCwzNDk5MCwzNDk5MSwzNDk5MiwzNDk5NCwzNDk5NSwzNDk5NiwzNDk5NywzNDk5OCwzNWUz''@;'; put 'put ''LDM1MDAxLDM1MDAyLDM1MDAzLDM1MDA1LDM1MDA2LDM1MDA3LDM1MDA4LDM1MDExLDM1MDEyLDM1MDE1LDM1MDE2LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIzLDM1MDI0LDM1MDI1LDM1MDI3LDM1MDMwLDM1MDMxLDM1MDM0LDM1MDM1LDM1MDM2LDM1MDM3LDM1MDM4LDM1MDQwLDM1''@;'; put 'put ''MDQxLDM1MDQ2LDM1MDQ3LDM1MDQ5LDM1MDUwLDM1MDUxLDM1MDUyLDM1MDUzLDM1MDU0LDM1MDU1LDM1MDU4LDM1MDYxLDM1MDYyLDM1MDYzLDM1MDY2LDM1MDY3LDM1MDY5LDM1MDcxLDM1MDcyLDM1MDczLDM1MDc1LDM1MDc2LDM1MDc3LDM1MDc4LDM1MDc5LDM1MDgwLDM1MDgxLDM1MDgz''@;'; put 'put ''LDM1MDg0LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDg5LDM1MDkyLDM1MDkzLDM1MDk0LDM1MDk1LDM1MDk2LDM1MTAwLDM1MTAxLDM1MTAyLDM1MTAzLDM1MTA0LDM1MTA2LDM1MTA3LDM1MTA4LDM1MTEwLDM1MTExLDM1MTEyLDM1MTEzLDM1MTE2LDM1MTE3LDM1MTE4LDM1MTE5LDM1MTIxLDM1''@;'; put 'put ''MTIyLDM1MTIzLDM1MTI1LDM1MTI3LDM2ODczLDMwMzA3LDMwNTA1LDMyNDc0LDM4NzcyLDM0MjAzLDIzMzk4LDMxMzQ4LDM4NjM0LDM0ODgwLDIxMTk1LDI5MDcxLDI0NDkwLDI2MDkyLDM1ODEwLDIzNTQ3LDM5NTM1LDI0MDMzLDI3NTI5LDI3NzM5LDM1NzU3LDM1NzU5LDM2ODc0LDM2ODA1''@;'; put 'put ''LDIxMzg3LDI1Mjc2LDQwNDg2LDQwNDkzLDIxNTY4LDIwMDExLDMzNDY5LDI5MjczLDM0NDYwLDIzODMwLDM0OTA1LDI4MDc5LDM4NTk3LDIxNzEzLDIwMTIyLDM1NzY2LDI4OTM3LDIxNjkzLDM4NDA5LDI4ODk1LDI4MTUzLDMwNDE2LDIwMDA1LDMwNzQwLDM0NTc4LDIzNzIxLDI0MzEwLDM1''@;'; put 'put ''MzI4LDM5MDY4LDM4NDE0LDI4ODE0LDI3ODM5LDIyODUyLDI1NTEzLDMwNTI0LDM0ODkzLDI4NDM2LDMzMzk1LDIyNTc2LDI5MTQxLDIxMzg4LDMwNzQ2LDM4NTkzLDIxNzYxLDI0NDIyLDI4OTc2LDIzNDc2LDM1ODY2LDM5NTY0LDI3NTIzLDIyODMwLDQwNDk1LDMxMjA3LDI2NDcyLDI1MTk2''@;'; put 'put ''LDIwMzM1LDMwMTEzLDMyNjUwLDI3OTE1LDM4NDUxLDI3Njg3LDIwMjA4LDMwMTYyLDIwODU5LDI2Njc5LDI4NDc4LDM2OTkyLDMzMTM2LDIyOTM0LDI5ODE0LDM1MTI4LDM1MTI5LDM1MTMwLDM1MTMxLDM1MTMyLDM1MTMzLDM1MTM0LDM1MTM1LDM1MTM2LDM1MTM4LDM1MTM5LDM1MTQxLDM1''@;'; put 'put ''MTQyLDM1MTQzLDM1MTQ0LDM1MTQ1LDM1MTQ2LDM1MTQ3LDM1MTQ4LDM1MTQ5LDM1MTUwLDM1MTUxLDM1MTUyLDM1MTUzLDM1MTU0LDM1MTU1LDM1MTU2LDM1MTU3LDM1MTU4LDM1MTU5LDM1MTYwLDM1MTYxLDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY1LDM1MTY4LDM1MTY5LDM1MTcwLDM1MTcx''@;'; put 'put ''LDM1MTcyLDM1MTczLDM1MTc1LDM1MTc2LDM1MTc3LDM1MTc4LDM1MTc5LDM1MTgwLDM1MTgxLDM1MTgyLDM1MTgzLDM1MTg0LDM1MTg1LDM1MTg2LDM1MTg3LDM1MTg4LDM1MTg5LDM1MTkwLDM1MTkxLDM1MTkyLDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk3LDM1MTk4LDM1MjAwLDM1MjAyLDM1''@;'; put 'put ''MjA0LDM1MjA1LDM1MjA3LDM1MjA4LDM1MjA5LDM1MjEwLDM1MjExLDM1MjEyLDM1MjEzLDM1MjE0LDM1MjE1LDM1MjE2LDM1MjE3LDM1MjE4LDM1MjE5LDM1MjIwLDM1MjIxLDM1MjIyLDM1MjIzLDM1MjI0LDM1MjI1LDM1MjI2LDM1MjI3LDM1MjI4LDM1MjI5LDM1MjMwLDM1MjMxLDM1MjMy''@;'; put 'put ''LDM1MjMzLDI1NjcxLDIzNTkxLDM2OTY1LDMxMzc3LDM1ODc1LDIzMDAyLDIxNjc2LDMzMjgwLDMzNjQ3LDM1MjAxLDMyNzY4LDI2OTI4LDIyMDk0LDMyODIyLDI5MjM5LDM3MzI2LDIwOTE4LDIwMDYzLDM5MDI5LDI1NDk0LDE5OTk0LDIxNDk0LDI2MzU1LDMzMDk5LDIyODEyLDI4MDgyLDE5''@;'; put 'put ''OTY4LDIyNzc3LDIxMzA3LDI1NTU4LDM4MTI5LDIwMzgxLDIwMjM0LDM0OTE1LDM5MDU2LDIyODM5LDM2OTUxLDMxMjI3LDIwMjAyLDMzMDA4LDMwMDk3LDI3Nzc4LDIzNDUyLDIzMDE2LDI0NDEzLDI2ODg1LDM0NDMzLDIwNTA2LDI0MDUwLDIwMDU3LDMwNjkxLDIwMTk3LDMzNDAyLDI1MjMz''@;'; put 'put ''LDI2MTMxLDM3MDA5LDIzNjczLDIwMTU5LDI0NDQxLDMzMjIyLDM2OTIwLDMyOTAwLDMwMTIzLDIwMTM0LDM1MDI4LDI0ODQ3LDI3NTg5LDI0NTE4LDIwMDQxLDMwNDEwLDI4MzIyLDM1ODExLDM1NzU4LDM1ODUwLDM1NzkzLDI0MzIyLDMyNzY0LDMyNzE2LDMyNDYyLDMzNTg5LDMzNjQzLDIy''@;'; put 'put ''MjQwLDI3NTc1LDM4ODk5LDM4NDUyLDIzMDM1LDIxNTM1LDM4MTM0LDI4MTM5LDIzNDkzLDM5Mjc4LDIzNjA5LDI0MzQxLDM4NTQ0LDM1MjM0LDM1MjM1LDM1MjM2LDM1MjM3LDM1MjM4LDM1MjM5LDM1MjQwLDM1MjQxLDM1MjQyLDM1MjQzLDM1MjQ0LDM1MjQ1LDM1MjQ2LDM1MjQ3LDM1MjQ4''@;'; put 'put ''LDM1MjQ5LDM1MjUwLDM1MjUxLDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjU2LDM1MjU3LDM1MjU4LDM1MjU5LDM1MjYwLDM1MjYxLDM1MjYyLDM1MjYzLDM1MjY0LDM1MjY3LDM1Mjc3LDM1MjgzLDM1Mjg0LDM1Mjg1LDM1Mjg3LDM1Mjg4LDM1Mjg5LDM1MjkxLDM1MjkzLDM1Mjk1LDM1''@;'; put 'put ''Mjk2LDM1Mjk3LDM1Mjk4LDM1MzAwLDM1MzAzLDM1MzA0LDM1MzA1LDM1MzA2LDM1MzA4LDM1MzA5LDM1MzEwLDM1MzEyLDM1MzEzLDM1MzE0LDM1MzE2LDM1MzE3LDM1MzE4LDM1MzE5LDM1MzIwLDM1MzIxLDM1MzIyLDM1MzIzLDM1MzI0LDM1MzI1LDM1MzI2LDM1MzI3LDM1MzI5LDM1MzMw''@;'; put 'put ''LDM1MzMxLDM1MzMyLDM1MzMzLDM1MzM0LDM1MzM2LDM1MzM3LDM1MzM4LDM1MzM5LDM1MzQwLDM1MzQxLDM1MzQyLDM1MzQzLDM1MzQ0LDM1MzQ1LDM1MzQ2LDM1MzQ3LDM1MzQ4LDM1MzQ5LDM1MzUwLDM1MzUxLDM1MzUyLDM1MzUzLDM1MzU0LDM1MzU1LDM1MzU2LDM1MzU3LDIxMzYwLDMz''@;'; put 'put ''NTIxLDI3MTg1LDIzMTU2LDQwNTYwLDI0MjEyLDMyNTUyLDMzNzIxLDMzODI4LDMzODI5LDMzNjM5LDM0NjMxLDM2ODE0LDM2MTk0LDMwNDA4LDI0NDMzLDM5MDYyLDMwODI4LDI2MTQ0LDIxNzI3LDI1MzE3LDIwMzIzLDMzMjE5LDMwMTUyLDI0MjQ4LDM4NjA1LDM2MzYyLDM0NTUzLDIxNjQ3''@;'; put 'put ''LDI3ODkxLDI4MDQ0LDI3NzA0LDI0NzAzLDIxMTkxLDI5OTkyLDI0MTg5LDIwMjQ4LDI0NzM2LDI0NTUxLDIzNTg4LDMwMDAxLDM3MDM4LDM4MDgwLDI5MzY5LDI3ODMzLDI4MjE2LDM3MTkzLDI2Mzc3LDIxNDUxLDIxNDkxLDIwMzA1LDM3MzIxLDM1ODI1LDIxNDQ4LDI0MTg4LDM2ODAyLDI4''@;'; put 'put ''MTMyLDIwMTEwLDMwNDAyLDI3MDE0LDM0Mzk4LDI0ODU4LDMzMjg2LDIwMzEzLDIwNDQ2LDM2OTI2LDQwMDYwLDI0ODQxLDI4MTg5LDI4MTgwLDM4NTMzLDIwMTA0LDIzMDg5LDM4NjMyLDE5OTgyLDIzNjc5LDMxMTYxLDIzNDMxLDM1ODIxLDMyNzAxLDI5NTc3LDIyNDk1LDMzNDE5LDM3MDU3''@;'; put 'put ''LDIxNTA1LDM2OTM1LDIxOTQ3LDIzNzg2LDI0NDgxLDI0ODQwLDI3NDQyLDI5NDI1LDMyOTQ2LDM1NDY1LDM1MzU4LDM1MzU5LDM1MzYwLDM1MzYxLDM1MzYyLDM1MzYzLDM1MzY0LDM1MzY1LDM1MzY2LDM1MzY3LDM1MzY4LDM1MzY5LDM1MzcwLDM1MzcxLDM1MzcyLDM1MzczLDM1Mzc0LDM1''@;'; put 'put ''Mzc1LDM1Mzc2LDM1Mzc3LDM1Mzc4LDM1Mzc5LDM1MzgwLDM1MzgxLDM1MzgyLDM1MzgzLDM1Mzg0LDM1Mzg1LDM1Mzg2LDM1Mzg3LDM1Mzg4LDM1Mzg5LDM1MzkxLDM1MzkyLDM1MzkzLDM1Mzk0LDM1Mzk1LDM1Mzk2LDM1Mzk3LDM1Mzk4LDM1Mzk5LDM1NDAxLDM1NDAyLDM1NDAzLDM1NDA0''@;'; put 'put ''LDM1NDA1LDM1NDA2LDM1NDA3LDM1NDA4LDM1NDA5LDM1NDEwLDM1NDExLDM1NDEyLDM1NDEzLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDE3LDM1NDE4LDM1NDE5LDM1NDIwLDM1NDIxLDM1NDIyLDM1NDIzLDM1NDI0LDM1NDI1LDM1NDI2LDM1NDI3LDM1NDI4LDM1NDI5LDM1NDMwLDM1NDMxLDM1''@;'; put 'put ''NDMyLDM1NDMzLDM1NDM0LDM1NDM1LDM1NDM2LDM1NDM3LDM1NDM4LDM1NDM5LDM1NDQwLDM1NDQxLDM1NDQyLDM1NDQzLDM1NDQ0LDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ4LDM1NDUwLDM1NDUxLDM1NDUyLDM1NDUzLDM1NDU0LDM1NDU1LDM1NDU2LDI4MDIwLDIzNTA3LDM1MDI5LDM5MDQ0''@;'; put 'put ''LDM1OTQ3LDM5NTMzLDQwNDk5LDI4MTcwLDIwOTAwLDIwODAzLDIyNDM1LDM0OTQ1LDIxNDA3LDI1NTg4LDM2NzU3LDIyMjUzLDIxNTkyLDIyMjc4LDI5NTAzLDI4MzA0LDMyNTM2LDM2ODI4LDMzNDg5LDI0ODk1LDI0NjE2LDM4NDk4LDI2MzUyLDMyNDIyLDM2MjM0LDM2MjkxLDM4MDUzLDIz''@;'; put 'put ''NzMxLDMxOTA4LDI2Mzc2LDI0NzQyLDM4NDA1LDMyNzkyLDIwMTEzLDM3MDk1LDIxMjQ4LDM4NTA0LDIwODAxLDM2ODE2LDM0MTY0LDM3MjEzLDI2MTk3LDM4OTAxLDIzMzgxLDIxMjc3LDMwNzc2LDI2NDM0LDI2Njg1LDIxNzA1LDI4Nzk4LDIzNDcyLDM2NzMzLDIwODc3LDIyMzEyLDIxNjgx''@;'; put 'put ''LDI1ODc0LDI2MjQyLDM2MTkwLDM2MTYzLDMzMDM5LDMzOTAwLDM2OTczLDMxOTY3LDIwOTkxLDM0Mjk5LDI2NTMxLDI2MDg5LDI4NTc3LDM0NDY4LDM2NDgxLDIyMTIyLDM2ODk2LDMwMzM4LDI4NzkwLDI5MTU3LDM2MTMxLDI1MzIxLDIxMDE3LDI3OTAxLDM2MTU2LDI0NTkwLDIyNjg2LDI0''@;'; put 'put ''OTc0LDI2MzY2LDM2MTkyLDI1MTY2LDIxOTM5LDI4MTk1LDI2NDEzLDM2NzExLDM1NDU3LDM1NDU4LDM1NDU5LDM1NDYwLDM1NDYxLDM1NDYyLDM1NDYzLDM1NDY0LDM1NDY3LDM1NDY4LDM1NDY5LDM1NDcwLDM1NDcxLDM1NDcyLDM1NDczLDM1NDc0LDM1NDc2LDM1NDc3LDM1NDc4LDM1NDc5''@;'; put 'put ''LDM1NDgwLDM1NDgxLDM1NDgyLDM1NDgzLDM1NDg0LDM1NDg1LDM1NDg2LDM1NDg3LDM1NDg4LDM1NDg5LDM1NDkwLDM1NDkxLDM1NDkyLDM1NDkzLDM1NDk0LDM1NDk1LDM1NDk2LDM1NDk3LDM1NDk4LDM1NDk5LDM1NTAwLDM1NTAxLDM1NTAyLDM1NTAzLDM1NTA0LDM1NTA1LDM1NTA2LDM1''@;'; put 'put ''NTA3LDM1NTA4LDM1NTA5LDM1NTEwLDM1NTExLDM1NTEyLDM1NTEzLDM1NTE0LDM1NTE1LDM1NTE2LDM1NTE3LDM1NTE4LDM1NTE5LDM1NTIwLDM1NTIxLDM1NTIyLDM1NTIzLDM1NTI0LDM1NTI1LDM1NTI2LDM1NTI3LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTMxLDM1NTMyLDM1NTMzLDM1NTM0''@;'; put 'put ''LDM1NTM1LDM1NTM2LDM1NTM3LDM1NTM4LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQyLDM1NTQzLDM1NTQ0LDM1NTQ1LDM1NTQ2LDM1NTQ3LDM1NTQ4LDM1NTQ5LDM1NTUwLDM1NTUxLDM1NTUyLDM1NTUzLDM1NTU0LDM1NTU1LDM4MTEzLDM4MzkyLDMwNTA0LDI2NjI5LDI3MDQ4LDIxNjQzLDIw''@;'; put 'put ''MDQ1LDI4ODU2LDM1Nzg0LDI1Njg4LDI1OTk1LDIzNDI5LDMxMzY0LDIwNTM4LDIzNTI4LDMwNjUxLDI3NjE3LDM1NDQ5LDMxODk2LDI3ODM4LDMwNDE1LDI2MDI1LDM2NzU5LDIzODUzLDIzNjM3LDM0MzYwLDI2NjMyLDIxMzQ0LDI1MTEyLDMxNDQ5LDI4MjUxLDMyNTA5LDI3MTY3LDMxNDU2''@;'; put 'put ''LDI0NDMyLDI4NDY3LDI0MzUyLDI1NDg0LDI4MDcyLDI2NDU0LDE5OTc2LDI0MDgwLDM2MTM0LDIwMTgzLDMyOTYwLDMwMjYwLDM4NTU2LDI1MzA3LDI2MTU3LDI1MjE0LDI3ODM2LDM2MjEzLDI5MDMxLDMyNjE3LDIwODA2LDMyOTAzLDIxNDg0LDM2OTc0LDI1MjQwLDIxNzQ2LDM0NTQ0LDM2''@;'; put 'put ''NzYxLDMyNzczLDM4MTY3LDM0MDcxLDM2ODI1LDI3OTkzLDI5NjQ1LDI2MDE1LDMwNDk1LDI5OTU2LDMwNzU5LDMzMjc1LDM2MTI2LDM4MDI0LDIwMzkwLDI2NTE3LDMwMTM3LDM1Nzg2LDM4NjYzLDI1MzkxLDM4MjE1LDM4NDUzLDMzOTc2LDI1Mzc5LDMwNTI5LDI0NDQ5LDI5NDI0LDIwMTA1''@;'; put 'put ''LDI0NTk2LDI1OTcyLDI1MzI3LDI3NDkxLDI1OTE5LDM1NTU2LDM1NTU3LDM1NTU4LDM1NTU5LDM1NTYwLDM1NTYxLDM1NTYyLDM1NTYzLDM1NTY0LDM1NTY1LDM1NTY2LDM1NTY3LDM1NTY4LDM1NTY5LDM1NTcwLDM1NTcxLDM1NTcyLDM1NTczLDM1NTc0LDM1NTc1LDM1NTc2LDM1NTc3LDM1''@;'; put 'put ''NTc4LDM1NTc5LDM1NTgwLDM1NTgxLDM1NTgyLDM1NTgzLDM1NTg0LDM1NTg1LDM1NTg2LDM1NTg3LDM1NTg4LDM1NTg5LDM1NTkwLDM1NTkyLDM1NTkzLDM1NTk0LDM1NTk1LDM1NTk2LDM1NTk3LDM1NTk4LDM1NTk5LDM1NjAwLDM1NjAxLDM1NjAyLDM1NjAzLDM1NjA0LDM1NjA1LDM1NjA2''@;'; put 'put ''LDM1NjA3LDM1NjA4LDM1NjA5LDM1NjEwLDM1NjExLDM1NjEyLDM1NjEzLDM1NjE0LDM1NjE1LDM1NjE2LDM1NjE3LDM1NjE4LDM1NjE5LDM1NjIwLDM1NjIxLDM1NjIzLDM1NjI0LDM1NjI1LDM1NjI2LDM1NjI3LDM1NjI4LDM1NjI5LDM1NjMwLDM1NjMxLDM1NjMyLDM1NjMzLDM1NjM0LDM1''@;'; put 'put ''NjM1LDM1NjM2LDM1NjM3LDM1NjM4LDM1NjM5LDM1NjQwLDM1NjQxLDM1NjQyLDM1NjQzLDM1NjQ0LDM1NjQ1LDM1NjQ2LDM1NjQ3LDM1NjQ4LDM1NjQ5LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDI0MTAzLDMwMTUxLDM3MDczLDM1Nzc3LDMzNDM3LDI2NTI1LDI1OTAzLDIxNTUzLDM0NTg0''@;'; put 'put ''LDMwNjkzLDMyOTMwLDMzMDI2LDI3NzEzLDIwMDQzLDMyNDU1LDMyODQ0LDMwNDUyLDI2ODkzLDI3NTQyLDI1MTkxLDIwNTQwLDIwMzU2LDIyMzM2LDI1MzUxLDI3NDkwLDM2Mjg2LDIxNDgyLDI2MDg4LDMyNDQwLDI0NTM1LDI1MzcwLDI1NTI3LDMzMjY3LDMzMjY4LDMyNjIyLDI0MDkyLDIz''@;'; put 'put ''NzY5LDIxMDQ2LDI2MjM0LDMxMjA5LDMxMjU4LDM2MTM2LDI4ODI1LDMwMTY0LDI4MzgyLDI3ODM1LDMxMzc4LDIwMDEzLDMwNDA1LDI0NTQ0LDM4MDQ3LDM0OTM1LDMyNDU2LDMxMTgxLDMyOTU5LDM3MzI1LDIwMjEwLDIwMjQ3LDMzMzExLDIxNjA4LDI0MDMwLDI3OTU0LDM1Nzg4LDMxOTA5''@;'; put 'put ''LDM2NzI0LDMyOTIwLDI0MDkwLDIxNjUwLDMwMzg1LDIzNDQ5LDI2MTcyLDM5NTg4LDI5NjY0LDI2NjY2LDM0NTIzLDI2NDE3LDI5NDgyLDM1ODMyLDM1ODAzLDM2ODgwLDMxNDgxLDI4ODkxLDI5MDM4LDI1Mjg0LDMwNjMzLDIyMDY1LDIwMDI3LDMzODc5LDI2NjA5LDIxMTYxLDM0NDk2LDM2''@;'; put 'put ''MTQyLDM4MTM2LDMxNTY5LDM1NjU0LDM1NjU1LDM1NjU2LDM1NjU3LDM1NjU4LDM1NjU5LDM1NjYwLDM1NjYxLDM1NjYyLDM1NjYzLDM1NjY0LDM1NjY1LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjY5LDM1NjcwLDM1NjcxLDM1NjcyLDM1NjczLDM1Njc0LDM1Njc1LDM1Njc2LDM1Njc3LDM1Njc4''@;'; put 'put ''LDM1Njc5LDM1NjgwLDM1NjgxLDM1NjgyLDM1NjgzLDM1Njg0LDM1Njg1LDM1Njg3LDM1Njg4LDM1Njg5LDM1NjkwLDM1NjkxLDM1NjkzLDM1Njk0LDM1Njk1LDM1Njk2LDM1Njk3LDM1Njk4LDM1Njk5LDM1NzAwLDM1NzAxLDM1NzAyLDM1NzAzLDM1NzA0LDM1NzA1LDM1NzA2LDM1NzA3LDM1''@;'; put 'put ''NzA4LDM1NzA5LDM1NzEwLDM1NzExLDM1NzEyLDM1NzEzLDM1NzE0LDM1NzE1LDM1NzE2LDM1NzE3LDM1NzE4LDM1NzE5LDM1NzIwLDM1NzIxLDM1NzIyLDM1NzIzLDM1NzI0LDM1NzI1LDM1NzI2LDM1NzI3LDM1NzI4LDM1NzI5LDM1NzMwLDM1NzMxLDM1NzMyLDM1NzMzLDM1NzM0LDM1NzM1''@;'; put 'put ''LDM1NzM2LDM1NzM3LDM1NzM4LDM1NzM5LDM1NzQwLDM1NzQxLDM1NzQyLDM1NzQzLDM1NzU2LDM1NzYxLDM1NzcxLDM1NzgzLDM1NzkyLDM1ODE4LDM1ODQ5LDM1ODcwLDIwMzAzLDI3ODgwLDMxMDY5LDM5NTQ3LDI1MjM1LDI5MjI2LDI1MzQxLDE5OTg3LDMwNzQyLDM2NzE2LDI1Nzc2LDM2''@;'; put 'put ''MTg2LDMxNjg2LDI2NzI5LDI0MTk2LDM1MDEzLDIyOTE4LDI1NzU4LDIyNzY2LDI5MzY2LDI2ODk0LDM4MTgxLDM2ODYxLDM2MTg0LDIyMzY4LDMyNTEyLDM1ODQ2LDIwOTM0LDI1NDE3LDI1MzA1LDIxMzMxLDI2NzAwLDI5NzMwLDMzNTM3LDM3MTk2LDIxODI4LDMwNTI4LDI4Nzk2LDI3OTc4''@;'; put 'put ''LDIwODU3LDIxNjcyLDM2MTY0LDIzMDM5LDI4MzYzLDI4MTAwLDIzMzg4LDMyMDQzLDIwMTgwLDMxODY5LDI4MzcxLDIzMzc2LDMzMjU4LDI4MTczLDIzMzgzLDM5NjgzLDI2ODM3LDM2Mzk0LDIzNDQ3LDMyNTA4LDI0NjM1LDMyNDM3LDM3MDQ5LDM2MjA4LDIyODYzLDI1NTQ5LDMxMTk5LDM2''@;'; put 'put ''Mjc1LDIxMzMwLDI2MDYzLDMxMDYyLDM1NzgxLDM4NDU5LDMyNDUyLDM4MDc1LDMyMzg2LDIyMDY4LDM3MjU3LDI2MzY4LDMyNjE4LDIzNTYyLDM2OTgxLDI2MTUyLDI0MDM4LDIwMzA0LDI2NTkwLDIwNTcwLDIwMzE2LDIyMzUyLDI0MjMxLDU5NDA4LDU5NDA5LDU5NDEwLDU5NDExLDU5NDEy''@;'; put 'put ''LDM1ODk2LDM1ODk3LDM1ODk4LDM1ODk5LDM1OTAwLDM1OTAxLDM1OTAyLDM1OTAzLDM1OTA0LDM1OTA2LDM1OTA3LDM1OTA4LDM1OTA5LDM1OTEyLDM1OTE0LDM1OTE1LDM1OTE3LDM1OTE4LDM1OTE5LDM1OTIwLDM1OTIxLDM1OTIyLDM1OTIzLDM1OTI0LDM1OTI2LDM1OTI3LDM1OTI4LDM1''@;'; put 'put ''OTI5LDM1OTMxLDM1OTMyLDM1OTMzLDM1OTM0LDM1OTM1LDM1OTM2LDM1OTM5LDM1OTQwLDM1OTQxLDM1OTQyLDM1OTQzLDM1OTQ0LDM1OTQ1LDM1OTQ4LDM1OTQ5LDM1OTUwLDM1OTUxLDM1OTUyLDM1OTUzLDM1OTU0LDM1OTU2LDM1OTU3LDM1OTU4LDM1OTU5LDM1OTYzLDM1OTY0LDM1OTY1''@;'; put 'put ''LDM1OTY2LDM1OTY3LDM1OTY4LDM1OTY5LDM1OTcxLDM1OTcyLDM1OTc0LDM1OTc1LDM1OTc2LDM1OTc5LDM1OTgxLDM1OTgyLDM1OTgzLDM1OTg0LDM1OTg1LDM1OTg2LDM1OTg3LDM1OTg5LDM1OTkwLDM1OTkxLDM1OTkzLDM1OTk0LDM1OTk1LDM1OTk2LDM1OTk3LDM1OTk4LDM1OTk5LDM2''@;'; put 'put ''ZTMsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIs''@;'; put 'put ''MjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0''@;'; put 'put ''MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjFlMywyMTAwNiwyMTAzNywyMTA0MywyMTA1NSwyMTA1NiwyMTA2OCwyMTA4NiwyMTA4OSwyMTA4NCwzMzk2NywyMTExNywyMTEyMiwyMTEyMSwyMTEzNiwy''@;'; put 'put ''MTEzOSwyMDg2NiwzMjU5NiwyMDE1NSwyMDE2MywyMDE2OSwyMDE2MiwyMDIwMCwyMDE5MywyMDIwMywyMDE5MCwyMDI1MSwyMDIxMSwyMDI1OCwyMDMyNCwyMDIxMywyMDI2MSwyMDI2MywyMDIzMywyMDI2NywyMDMxOCwyMDMyNywyNTkxMiwyMDMxNCwyMDMxNywzNjAxNCwzNjAxNSwzNjAx''@;'; put 'put ''NiwzNjAxNywzNjAxOCwzNjAxOSwzNjAyMCwzNjAyMSwzNjAyMiwzNjAyMywzNjAyNCwzNjAyNSwzNjAyNiwzNjAyNywzNjAyOCwzNjAyOSwzNjAzMCwzNjAzMSwzNjAzMiwzNjAzMywzNjAzNCwzNjAzNSwzNjAzNiwzNjAzNywzNjAzOCwzNjAzOSwzNjA0MCwzNjA0MSwzNjA0MiwzNjA0Mywz''@;'; put 'put ''NjA0NCwzNjA0NSwzNjA0NiwzNjA0NywzNjA0OCwzNjA0OSwzNjA1MCwzNjA1MSwzNjA1MiwzNjA1MywzNjA1NCwzNjA1NSwzNjA1NiwzNjA1NywzNjA1OCwzNjA1OSwzNjA2MCwzNjA2MSwzNjA2MiwzNjA2MywzNjA2NCwzNjA2NSwzNjA2NiwzNjA2NywzNjA2OCwzNjA2OSwzNjA3MCwzNjA3''@;'; put 'put ''MSwzNjA3MiwzNjA3MywzNjA3NCwzNjA3NSwzNjA3NiwzNjA3NywzNjA3OCwzNjA3OSwzNjA4MCwzNjA4MSwzNjA4MiwzNjA4MywzNjA4NCwzNjA4NSwzNjA4NiwzNjA4NywzNjA4OCwzNjA4OSwzNjA5MCwzNjA5MSwzNjA5MiwzNjA5MywzNjA5NCwzNjA5NSwzNjA5NiwzNjA5NywzNjA5OCwz''@;'; put 'put ''NjA5OSwzNjEwMCwzNjEwMSwzNjEwMiwzNjEwMywzNjEwNCwzNjEwNSwzNjEwNiwzNjEwNywzNjEwOCwzNjEwOSwyMDMxOSwyMDMxMSwyMDI3NCwyMDI4NSwyMDM0MiwyMDM0MCwyMDM2OSwyMDM2MSwyMDM1NSwyMDM2NywyMDM1MCwyMDM0NywyMDM5NCwyMDM0OCwyMDM5NiwyMDM3MiwyMDQ1''@;'; put 'put ''NCwyMDQ1NiwyMDQ1OCwyMDQyMSwyMDQ0MiwyMDQ1MSwyMDQ0NCwyMDQzMywyMDQ0NywyMDQ3MiwyMDUyMSwyMDU1NiwyMDQ2NywyMDUyNCwyMDQ5NSwyMDUyNiwyMDUyNSwyMDQ3OCwyMDUwOCwyMDQ5MiwyMDUxNywyMDUyMCwyMDYwNiwyMDU0NywyMDU2NSwyMDU1MiwyMDU1OCwyMDU4OCwy''@;'; put 'put ''MDYwMywyMDY0NSwyMDY0NywyMDY0OSwyMDY2NiwyMDY5NCwyMDc0MiwyMDcxNywyMDcxNiwyMDcxMCwyMDcxOCwyMDc0MywyMDc0NywyMDE4OSwyNzcwOSwyMDMxMiwyMDMyNSwyMDQzMCw0MDg2NCwyNzcxOCwzMTg2MCwyMDg0NiwyNDA2MSw0MDY0OSwzOTMyMCwyMDg2NSwyMjgwNCwyMTI0''@;'; put 'put ''MSwyMTI2MSwzNTMzNSwyMTI2NCwyMDk3MSwyMjgwOSwyMDgyMSwyMDEyOCwyMDgyMiwyMDE0NywzNDkyNiwzNDk4MCwyMDE0OSwzMzA0NCwzNTAyNiwzMTEwNCwyMzM0OCwzNDgxOSwzMjY5NiwyMDkwNywyMDkxMywyMDkyNSwyMDkyNCwzNjExMCwzNjExMSwzNjExMiwzNjExMywzNjExNCwz''@;'; put 'put ''NjExNSwzNjExNiwzNjExNywzNjExOCwzNjExOSwzNjEyMCwzNjEyMSwzNjEyMiwzNjEyMywzNjEyNCwzNjEyOCwzNjE3NywzNjE3OCwzNjE4MywzNjE5MSwzNjE5NywzNjIwMCwzNjIwMSwzNjIwMiwzNjIwNCwzNjIwNiwzNjIwNywzNjIwOSwzNjIxMCwzNjIxNiwzNjIxNywzNjIxOCwzNjIx''@;'; put 'put ''OSwzNjIyMCwzNjIyMSwzNjIyMiwzNjIyMywzNjIyNCwzNjIyNiwzNjIyNywzNjIzMCwzNjIzMSwzNjIzMiwzNjIzMywzNjIzNiwzNjIzNywzNjIzOCwzNjIzOSwzNjI0MCwzNjI0MiwzNjI0MywzNjI0NSwzNjI0NiwzNjI0NywzNjI0OCwzNjI0OSwzNjI1MCwzNjI1MSwzNjI1MiwzNjI1Mywz''@;'; put 'put ''NjI1NCwzNjI1NiwzNjI1NywzNjI1OCwzNjI2MCwzNjI2MSwzNjI2MiwzNjI2MywzNjI2NCwzNjI2NSwzNjI2NiwzNjI2NywzNjI2OCwzNjI2OSwzNjI3MCwzNjI3MSwzNjI3MiwzNjI3NCwzNjI3OCwzNjI3OSwzNjI4MSwzNjI4MywzNjI4NSwzNjI4OCwzNjI4OSwzNjI5MCwzNjI5MywzNjI5''@;'; put 'put ''NSwzNjI5NiwzNjI5NywzNjI5OCwzNjMwMSwzNjMwNCwzNjMwNiwzNjMwNywzNjMwOCwyMDkzNSwyMDg4NiwyMDg5OCwyMDkwMSwzNTc0NCwzNTc1MCwzNTc1MSwzNTc1NCwzNTc2NCwzNTc2NSwzNTc2NywzNTc3OCwzNTc3OSwzNTc4NywzNTc5MSwzNTc5MCwzNTc5NCwzNTc5NSwzNTc5Niwz''@;'; put 'put ''NTc5OCwzNTgwMCwzNTgwMSwzNTgwNCwzNTgwNywzNTgwOCwzNTgxMiwzNTgxNiwzNTgxNywzNTgyMiwzNTgyNCwzNTgyNywzNTgzMCwzNTgzMywzNTgzNiwzNTgzOSwzNTg0MCwzNTg0MiwzNTg0NCwzNTg0NywzNTg1MiwzNTg1NSwzNTg1NywzNTg1OCwzNTg2MCwzNTg2MSwzNTg2MiwzNTg2''@;'; put 'put ''NSwzNTg2NywzNTg2NCwzNTg2OSwzNTg3MSwzNTg3MiwzNTg3MywzNTg3NywzNTg3OSwzNTg4MiwzNTg4MywzNTg4NiwzNTg4NywzNTg5MCwzNTg5MSwzNTg5MywzNTg5NCwyMTM1MywyMTM3MCwzODQyOSwzODQzNCwzODQzMywzODQ0OSwzODQ0MiwzODQ2MSwzODQ2MCwzODQ2NiwzODQ3Mywz''@;'; put 'put ''ODQ4NCwzODQ5NSwzODUwMywzODUwOCwzODUxNCwzODUxNiwzODUzNiwzODU0MSwzODU1MSwzODU3NiwzNzAxNSwzNzAxOSwzNzAyMSwzNzAxNywzNzAzNiwzNzAyNSwzNzA0NCwzNzA0MywzNzA0NiwzNzA1MCwzNjMwOSwzNjMxMiwzNjMxMywzNjMxNiwzNjMyMCwzNjMyMSwzNjMyMiwzNjMy''@;'; put 'put ''NSwzNjMyNiwzNjMyNywzNjMyOSwzNjMzMywzNjMzNCwzNjMzNiwzNjMzNywzNjMzOCwzNjM0MCwzNjM0MiwzNjM0OCwzNjM1MCwzNjM1MSwzNjM1MiwzNjM1MywzNjM1NCwzNjM1NSwzNjM1NiwzNjM1OCwzNjM1OSwzNjM2MCwzNjM2MywzNjM2NSwzNjM2NiwzNjM2OCwzNjM2OSwzNjM3MCwz''@;'; put 'put ''NjM3MSwzNjM3MywzNjM3NCwzNjM3NSwzNjM3NiwzNjM3NywzNjM3OCwzNjM3OSwzNjM4MCwzNjM4NCwzNjM4NSwzNjM4OCwzNjM4OSwzNjM5MCwzNjM5MSwzNjM5MiwzNjM5NSwzNjM5NywzNjQwMCwzNjQwMiwzNjQwMywzNjQwNCwzNjQwNiwzNjQwNywzNjQwOCwzNjQxMSwzNjQxMiwzNjQx''@;'; put 'put ''NCwzNjQxNSwzNjQxOSwzNjQyMSwzNjQyMiwzNjQyOCwzNjQyOSwzNjQzMCwzNjQzMSwzNjQzMiwzNjQzNSwzNjQzNiwzNjQzNywzNjQzOCwzNjQzOSwzNjQ0MCwzNjQ0MiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0NywzNjQ0OCwzNjQ0OSwzNjQ1MCwzNjQ1MSwzNjQ1MiwzNjQ1Mywz''@;'; put 'put ''NjQ1NSwzNjQ1NiwzNjQ1OCwzNjQ1OSwzNjQ2MiwzNjQ2NSwzNzA0OCwzNzA0MCwzNzA3MSwzNzA2MSwzNzA1NCwzNzA3MiwzNzA2MCwzNzA2MywzNzA3NSwzNzA5NCwzNzA5MCwzNzA4NCwzNzA3OSwzNzA4MywzNzA5OSwzNzEwMywzNzExOCwzNzEyNCwzNzE1NCwzNzE1MCwzNzE1NSwzNzE2''@;'; put 'put ''OSwzNzE2NywzNzE3NywzNzE4NywzNzE5MCwyMTAwNSwyMjg1MCwyMTE1NCwyMTE2NCwyMTE2NSwyMTE4MiwyMTc1OSwyMTIwMCwyMTIwNiwyMTIzMiwyMTQ3MSwyOTE2NiwzMDY2OSwyNDMwOCwyMDk4MSwyMDk4OCwzOTcyNywyMTQzMCwyNDMyMSwzMDA0MiwyNDA0NywyMjM0OCwyMjQ0MSwy''@;'; put 'put ''MjQzMywyMjY1NCwyMjcxNiwyMjcyNSwyMjczNywyMjMxMywyMjMxNiwyMjMxNCwyMjMyMywyMjMyOSwyMjMxOCwyMjMxOSwyMjM2NCwyMjMzMSwyMjMzOCwyMjM3NywyMjQwNSwyMjM3OSwyMjQwNiwyMjM5NiwyMjM5NSwyMjM3NiwyMjM4MSwyMjM5MCwyMjM4NywyMjQ0NSwyMjQzNiwyMjQx''@;'; put 'put ''MiwyMjQ1MCwyMjQ3OSwyMjQzOSwyMjQ1MiwyMjQxOSwyMjQzMiwyMjQ4NSwyMjQ4OCwyMjQ5MCwyMjQ4OSwyMjQ4MiwyMjQ1NiwyMjUxNiwyMjUxMSwyMjUyMCwyMjUwMCwyMjQ5MywzNjQ2NywzNjQ2OSwzNjQ3MSwzNjQ3MiwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ3NywzNjQ3OCwzNjQ4MCwz''@;'; put 'put ''NjQ4MiwzNjQ4MywzNjQ4NCwzNjQ4NiwzNjQ4OCwzNjQ4OSwzNjQ5MCwzNjQ5MSwzNjQ5MiwzNjQ5MywzNjQ5NCwzNjQ5NywzNjQ5OCwzNjQ5OSwzNjUwMSwzNjUwMiwzNjUwMywzNjUwNCwzNjUwNSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMSwzNjUxMiwzNjUxMywzNjUxNCwzNjUxNSwzNjUx''@;'; put 'put ''NiwzNjUxNywzNjUxOCwzNjUxOSwzNjUyMCwzNjUyMSwzNjUyMiwzNjUyNSwzNjUyNiwzNjUyOCwzNjUyOSwzNjUzMSwzNjUzMiwzNjUzMywzNjUzNCwzNjUzNSwzNjUzNiwzNjUzNywzNjUzOSwzNjU0MCwzNjU0MSwzNjU0MiwzNjU0MywzNjU0NCwzNjU0NSwzNjU0NiwzNjU0NywzNjU0OCwz''@;'; put 'put ''NjU0OSwzNjU1MCwzNjU1MSwzNjU1MiwzNjU1MywzNjU1NCwzNjU1NSwzNjU1NiwzNjU1NywzNjU1OSwzNjU2MCwzNjU2MSwzNjU2MiwzNjU2MywzNjU2NCwzNjU2NSwzNjU2NiwzNjU2NywzNjU2OCwzNjU2OSwzNjU3MCwzNjU3MSwzNjU3MiwzNjU3MywzNjU3NCwzNjU3NSwzNjU3NiwzNjU3''@;'; put 'put ''NywzNjU3OCwzNjU3OSwzNjU4MCwyMjUzOSwyMjU0MSwyMjUyNSwyMjUwOSwyMjUyOCwyMjU1OCwyMjU1MywyMjU5NiwyMjU2MCwyMjYyOSwyMjYzNiwyMjY1NywyMjY2NSwyMjY4MiwyMjY1NiwzOTMzNiw0MDcyOSwyNTA4NywzMzQwMSwzMzQwNSwzMzQwNywzMzQyMywzMzQxOCwzMzQ0OCwz''@;'; put 'put ''MzQxMiwzMzQyMiwzMzQyNSwzMzQzMSwzMzQzMywzMzQ1MSwzMzQ2NCwzMzQ3MCwzMzQ1NiwzMzQ4MCwzMzQ4MiwzMzUwNywzMzQzMiwzMzQ2MywzMzQ1NCwzMzQ4MywzMzQ4NCwzMzQ3MywzMzQ0OSwzMzQ2MCwzMzQ0MSwzMzQ1MCwzMzQzOSwzMzQ3NiwzMzQ4NiwzMzQ0NCwzMzUwNSwzMzU0''@;'; put 'put ''NSwzMzUyNywzMzUwOCwzMzU1MSwzMzU0MywzMzUwMCwzMzUyNCwzMzQ5MCwzMzQ5NiwzMzU0OCwzMzUzMSwzMzQ5MSwzMzU1MywzMzU2MiwzMzU0MiwzMzU1NiwzMzU1NywzMzUwNCwzMzQ5MywzMzU2NCwzMzYxNywzMzYyNywzMzYyOCwzMzU0NCwzMzY4MiwzMzU5NiwzMzU4OCwzMzU4NSwz''@;'; put 'put ''MzY5MSwzMzYzMCwzMzU4MywzMzYxNSwzMzYwNywzMzYwMywzMzYzMSwzMzYwMCwzMzU1OSwzMzYzMiwzMzU4MSwzMzU5NCwzMzU4NywzMzYzOCwzMzYzNywzNjU4MSwzNjU4MiwzNjU4MywzNjU4NCwzNjU4NSwzNjU4NiwzNjU4NywzNjU4OCwzNjU4OSwzNjU5MCwzNjU5MSwzNjU5MiwzNjU5''@;'; put 'put ''MywzNjU5NCwzNjU5NSwzNjU5NiwzNjU5NywzNjU5OCwzNjU5OSwzNjYwMCwzNjYwMSwzNjYwMiwzNjYwMywzNjYwNCwzNjYwNSwzNjYwNiwzNjYwNywzNjYwOCwzNjYwOSwzNjYxMCwzNjYxMSwzNjYxMiwzNjYxMywzNjYxNCwzNjYxNSwzNjYxNiwzNjYxNywzNjYxOCwzNjYxOSwzNjYyMCwz''@;'; put 'put ''NjYyMSwzNjYyMiwzNjYyMywzNjYyNCwzNjYyNSwzNjYyNiwzNjYyNywzNjYyOCwzNjYyOSwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzMywzNjYzNCwzNjYzNSwzNjYzNiwzNjYzNywzNjYzOCwzNjYzOSwzNjY0MCwzNjY0MSwzNjY0MiwzNjY0MywzNjY0NCwzNjY0NSwzNjY0NiwzNjY0NywzNjY0''@;'; put 'put ''OCwzNjY0OSwzNjY1MCwzNjY1MSwzNjY1MiwzNjY1MywzNjY1NCwzNjY1NSwzNjY1NiwzNjY1NywzNjY1OCwzNjY1OSwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NCwzNjY2NSwzNjY2NiwzNjY2NywzNjY2OCwzNjY2OSwzNjY3MCwzNjY3MSwzNjY3MiwzNjY3MywzNjY3NCwzNjY3NSwz''@;'; put 'put ''NjY3NiwzMzY0MCwzMzU2MywzMzY0MSwzMzY0NCwzMzY0MiwzMzY0NSwzMzY0NiwzMzcxMiwzMzY1NiwzMzcxNSwzMzcxNiwzMzY5NiwzMzcwNiwzMzY4MywzMzY5MiwzMzY2OSwzMzY2MCwzMzcxOCwzMzcwNSwzMzY2MSwzMzcyMCwzMzY1OSwzMzY4OCwzMzY5NCwzMzcwNCwzMzcyMiwzMzcy''@;'; put 'put ''NCwzMzcyOSwzMzc5MywzMzc2NSwzMzc1MiwyMjUzNSwzMzgxNiwzMzgwMywzMzc1NywzMzc4OSwzMzc1MCwzMzgyMCwzMzg0OCwzMzgwOSwzMzc5OCwzMzc0OCwzMzc1OSwzMzgwNywzMzc5NSwzMzc4NCwzMzc4NSwzMzc3MCwzMzczMywzMzcyOCwzMzgzMCwzMzc3NiwzMzc2MSwzMzg4NCwz''@;'; put 'put ''Mzg3MywzMzg4MiwzMzg4MSwzMzkwNywzMzkyNywzMzkyOCwzMzkxNCwzMzkyOSwzMzkxMiwzMzg1MiwzMzg2MiwzMzg5NywzMzkxMCwzMzkzMiwzMzkzNCwzMzg0MSwzMzkwMSwzMzk4NSwzMzk5NywzNGUzLDM0MDIyLDMzOTgxLDM0MDAzLDMzOTk0LDMzOTgzLDMzOTc4LDM0MDE2LDMzOTUz''@;'; put 'put ''LDMzOTc3LDMzOTcyLDMzOTQzLDM0MDIxLDM0MDE5LDM0MDYwLDI5OTY1LDM0MTA0LDM0MDMyLDM0MTA1LDM0MDc5LDM0MTA2LDM2Njc3LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgxLDM2NjgyLDM2NjgzLDM2Njg0LDM2Njg1LDM2Njg2LDM2Njg3LDM2Njg4LDM2Njg5LDM2NjkwLDM2NjkxLDM2''@;'; put 'put ''NjkyLDM2NjkzLDM2Njk0LDM2Njk1LDM2Njk2LDM2Njk3LDM2Njk4LDM2Njk5LDM2NzAwLDM2NzAxLDM2NzAyLDM2NzAzLDM2NzA0LDM2NzA1LDM2NzA2LDM2NzA3LDM2NzA4LDM2NzA5LDM2NzE0LDM2NzM2LDM2NzQ4LDM2NzU0LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcwLDM2NzcyLDM2Nzcz''@;'; put 'put ''LDM2Nzc0LDM2Nzc1LDM2Nzc4LDM2NzgwLDM2NzgxLDM2NzgyLDM2NzgzLDM2Nzg2LDM2Nzg3LDM2Nzg4LDM2Nzg5LDM2NzkxLDM2NzkyLDM2Nzk0LDM2Nzk1LDM2Nzk2LDM2Nzk5LDM2ODAwLDM2ODAzLDM2ODA2LDM2ODA5LDM2ODEwLDM2ODExLDM2ODEyLDM2ODEzLDM2ODE1LDM2ODE4LDM2''@;'; put 'put ''ODIyLDM2ODIzLDM2ODI2LDM2ODMyLDM2ODMzLDM2ODM1LDM2ODM5LDM2ODQ0LDM2ODQ3LDM2ODQ5LDM2ODUwLDM2ODUyLDM2ODUzLDM2ODU0LDM2ODU4LDM2ODU5LDM2ODYwLDM2ODYyLDM2ODYzLDM2ODcxLDM2ODcyLDM2ODc2LDM2ODc4LDM2ODgzLDM2ODg1LDM2ODg4LDM0MTM0LDM0MTA3''@;'; put 'put ''LDM0MDQ3LDM0MDQ0LDM0MTM3LDM0MTIwLDM0MTUyLDM0MTQ4LDM0MTQyLDM0MTcwLDMwNjI2LDM0MTE1LDM0MTYyLDM0MTcxLDM0MjEyLDM0MjE2LDM0MTgzLDM0MTkxLDM0MTY5LDM0MjIyLDM0MjA0LDM0MTgxLDM0MjMzLDM0MjMxLDM0MjI0LDM0MjU5LDM0MjQxLDM0MjY4LDM0MzAzLDM0''@;'; put 'put ''MzQzLDM0MzA5LDM0MzQ1LDM0MzI2LDM0MzY0LDI0MzE4LDI0MzI4LDIyODQ0LDIyODQ5LDMyODIzLDIyODY5LDIyODc0LDIyODcyLDIxMjYzLDIzNTg2LDIzNTg5LDIzNTk2LDIzNjA0LDI1MTY0LDI1MTk0LDI1MjQ3LDI1Mjc1LDI1MjkwLDI1MzA2LDI1MzAzLDI1MzI2LDI1Mzc4LDI1MzM0''@;'; put 'put ''LDI1NDAxLDI1NDE5LDI1NDExLDI1NTE3LDI1NTkwLDI1NDU3LDI1NDY2LDI1NDg2LDI1NTI0LDI1NDUzLDI1NTE2LDI1NDgyLDI1NDQ5LDI1NTE4LDI1NTMyLDI1NTg2LDI1NTkyLDI1NTY4LDI1NTk5LDI1NTQwLDI1NTY2LDI1NTUwLDI1NjgyLDI1NTQyLDI1NTM0LDI1NjY5LDI1NjY1LDI1''@;'; put 'put ''NjExLDI1NjI3LDI1NjMyLDI1NjEyLDI1NjM4LDI1NjMzLDI1Njk0LDI1NzMyLDI1NzA5LDI1NzUwLDM2ODg5LDM2ODkyLDM2ODk5LDM2OTAwLDM2OTAxLDM2OTAzLDM2OTA0LDM2OTA1LDM2OTA2LDM2OTA3LDM2OTA4LDM2OTEyLDM2OTEzLDM2OTE0LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTIx''@;'; put 'put ''LDM2OTIyLDM2OTI1LDM2OTI3LDM2OTI4LDM2OTMxLDM2OTMzLDM2OTM0LDM2OTM2LDM2OTM3LDM2OTM4LDM2OTM5LDM2OTQwLDM2OTQyLDM2OTQ4LDM2OTQ5LDM2OTUwLDM2OTUzLDM2OTU0LDM2OTU2LDM2OTU3LDM2OTU4LDM2OTU5LDM2OTYwLDM2OTYxLDM2OTY0LDM2OTY2LDM2OTY3LDM2''@;'; put 'put ''OTY5LDM2OTcwLDM2OTcxLDM2OTcyLDM2OTc1LDM2OTc2LDM2OTc3LDM2OTc4LDM2OTc5LDM2OTgyLDM2OTgzLDM2OTg0LDM2OTg1LDM2OTg2LDM2OTg3LDM2OTg4LDM2OTkwLDM2OTkzLDM2OTk2LDM2OTk3LDM2OTk4LDM2OTk5LDM3MDAxLDM3MDAyLDM3MDA0LDM3MDA1LDM3MDA2LDM3MDA3''@;'; put 'put ''LDM3MDA4LDM3MDEwLDM3MDEyLDM3MDE0LDM3MDE2LDM3MDE4LDM3MDIwLDM3MDIyLDM3MDIzLDM3MDI0LDM3MDI4LDM3MDI5LDM3MDMxLDM3MDMyLDM3MDMzLDM3MDM1LDM3MDM3LDM3MDQyLDM3MDQ3LDM3MDUyLDM3MDUzLDM3MDU1LDM3MDU2LDI1NzIyLDI1NzgzLDI1Nzg0LDI1NzUzLDI1''@;'; put 'put ''Nzg2LDI1NzkyLDI1ODA4LDI1ODE1LDI1ODI4LDI1ODI2LDI1ODY1LDI1ODkzLDI1OTAyLDI0MzMxLDI0NTMwLDI5OTc3LDI0MzM3LDIxMzQzLDIxNDg5LDIxNTAxLDIxNDgxLDIxNDgwLDIxNDk5LDIxNTIyLDIxNTI2LDIxNTEwLDIxNTc5LDIxNTg2LDIxNTg3LDIxNTg4LDIxNTkwLDIxNTcx''@;'; put 'put ''LDIxNTM3LDIxNTkxLDIxNTkzLDIxNTM5LDIxNTU0LDIxNjM0LDIxNjUyLDIxNjIzLDIxNjE3LDIxNjA0LDIxNjU4LDIxNjU5LDIxNjM2LDIxNjIyLDIxNjA2LDIxNjYxLDIxNzEyLDIxNjc3LDIxNjk4LDIxNjg0LDIxNzE0LDIxNjcxLDIxNjcwLDIxNzE1LDIxNzE2LDIxNjE4LDIxNjY3LDIx''@;'; put 'put ''NzE3LDIxNjkxLDIxNjk1LDIxNzA4LDIxNzIxLDIxNzIyLDIxNzI0LDIxNjczLDIxNjc0LDIxNjY4LDIxNzI1LDIxNzExLDIxNzI2LDIxNzg3LDIxNzM1LDIxNzkyLDIxNzU3LDIxNzgwLDIxNzQ3LDIxNzk0LDIxNzk1LDIxNzc1LDIxNzc3LDIxNzk5LDIxODAyLDIxODYzLDIxOTAzLDIxOTQx''@;'; put 'put ''LDIxODMzLDIxODY5LDIxODI1LDIxODQ1LDIxODIzLDIxODQwLDIxODIwLDM3MDU4LDM3MDU5LDM3MDYyLDM3MDY0LDM3MDY1LDM3MDY3LDM3MDY4LDM3MDY5LDM3MDc0LDM3MDc2LDM3MDc3LDM3MDc4LDM3MDgwLDM3MDgxLDM3MDgyLDM3MDg2LDM3MDg3LDM3MDg4LDM3MDkxLDM3MDkyLDM3''@;'; put 'put ''MDkzLDM3MDk3LDM3MDk4LDM3MTAwLDM3MTAyLDM3MTA0LDM3MTA1LDM3MTA2LDM3MTA3LDM3MTA5LDM3MTEwLDM3MTExLDM3MTEzLDM3MTE0LDM3MTE1LDM3MTE2LDM3MTE5LDM3MTIwLDM3MTIxLDM3MTIzLDM3MTI1LDM3MTI2LDM3MTI3LDM3MTI4LDM3MTI5LDM3MTMwLDM3MTMxLDM3MTMy''@;'; put 'put ''LDM3MTMzLDM3MTM0LDM3MTM1LDM3MTM2LDM3MTM3LDM3MTM4LDM3MTM5LDM3MTQwLDM3MTQxLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ3LDM3MTQ4LDM3MTQ5LDM3MTUxLDM3MTUyLDM3MTUzLDM3MTU2LDM3MTU3LDM3MTU4LDM3MTU5LDM3MTYwLDM3MTYxLDM3MTYyLDM3MTYzLDM3''@;'; put 'put ''MTY0LDM3MTY1LDM3MTY2LDM3MTY4LDM3MTcwLDM3MTcxLDM3MTcyLDM3MTczLDM3MTc0LDM3MTc1LDM3MTc2LDM3MTc4LDM3MTc5LDM3MTgwLDM3MTgxLDM3MTgyLDM3MTgzLDM3MTg0LDM3MTg1LDM3MTg2LDM3MTg4LDIxODE1LDIxODQ2LDIxODc3LDIxODc4LDIxODc5LDIxODExLDIxODA4''@;'; put 'put ''LDIxODUyLDIxODk5LDIxOTcwLDIxODkxLDIxOTM3LDIxOTQ1LDIxODk2LDIxODg5LDIxOTE5LDIxODg2LDIxOTc0LDIxOTA1LDIxODgzLDIxOTgzLDIxOTQ5LDIxOTUwLDIxOTA4LDIxOTEzLDIxOTk0LDIyMDA3LDIxOTYxLDIyMDQ3LDIxOTY5LDIxOTk1LDIxOTk2LDIxOTcyLDIxOTkwLDIx''@;'; put 'put ''OTgxLDIxOTU2LDIxOTk5LDIxOTg5LDIyMDAyLDIyMDAzLDIxOTY0LDIxOTY1LDIxOTkyLDIyMDA1LDIxOTg4LDM2NzU2LDIyMDQ2LDIyMDI0LDIyMDI4LDIyMDE3LDIyMDUyLDIyMDUxLDIyMDE0LDIyMDE2LDIyMDU1LDIyMDYxLDIyMTA0LDIyMDczLDIyMTAzLDIyMDYwLDIyMDkzLDIyMTE0''@;'; put 'put ''LDIyMTA1LDIyMTA4LDIyMDkyLDIyMTAwLDIyMTUwLDIyMTE2LDIyMTI5LDIyMTIzLDIyMTM5LDIyMTQwLDIyMTQ5LDIyMTYzLDIyMTkxLDIyMjI4LDIyMjMxLDIyMjM3LDIyMjQxLDIyMjYxLDIyMjUxLDIyMjY1LDIyMjcxLDIyMjc2LDIyMjgyLDIyMjgxLDIyMzAwLDI0MDc5LDI0MDg5LDI0''@;'; put 'put ''MDg0LDI0MDgxLDI0MTEzLDI0MTIzLDI0MTI0LDM3MTg5LDM3MTkxLDM3MTkyLDM3MjAxLDM3MjAzLDM3MjA0LDM3MjA1LDM3MjA2LDM3MjA4LDM3MjA5LDM3MjExLDM3MjEyLDM3MjE1LDM3MjE2LDM3MjIyLDM3MjIzLDM3MjI0LDM3MjI3LDM3MjI5LDM3MjM1LDM3MjQyLDM3MjQzLDM3MjQ0''@;'; put 'put ''LDM3MjQ4LDM3MjQ5LDM3MjUwLDM3MjUxLDM3MjUyLDM3MjU0LDM3MjU2LDM3MjU4LDM3MjYyLDM3MjYzLDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcwLDM3MjcxLDM3MjcyLDM3MjczLDM3Mjc2LDM3Mjc3LDM3Mjc4LDM3Mjc5LDM3MjgwLDM3MjgxLDM3Mjg0LDM3Mjg1LDM3Mjg2LDM3Mjg3LDM3''@;'; put 'put ''Mjg4LDM3Mjg5LDM3MjkxLDM3MjkyLDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzAzLDM3MzA0LDM3MzA1LDM3MzA3LDM3MzA4LDM3MzA5LDM3MzEwLDM3MzExLDM3MzEyLDM3MzEzLDM3MzE0LDM3MzE1LDM3MzE2LDM3MzE3LDM3MzE4LDM3MzIwLDM3MzIzLDM3MzI4LDM3MzMw''@;'; put 'put ''LDM3MzMxLDM3MzMyLDM3MzMzLDM3MzM0LDM3MzM1LDM3MzM2LDM3MzM3LDM3MzM4LDM3MzM5LDM3MzQxLDM3MzQyLDM3MzQzLDM3MzQ0LDM3MzQ1LDM3MzQ2LDM3MzQ3LDM3MzQ4LDM3MzQ5LDI0MTE5LDI0MTMyLDI0MTQ4LDI0MTU1LDI0MTU4LDI0MTYxLDIzNjkyLDIzNjc0LDIzNjkzLDIz''@;'; put 'put ''Njk2LDIzNzAyLDIzNjg4LDIzNzA0LDIzNzA1LDIzNjk3LDIzNzA2LDIzNzA4LDIzNzMzLDIzNzE0LDIzNzQxLDIzNzI0LDIzNzIzLDIzNzI5LDIzNzE1LDIzNzQ1LDIzNzM1LDIzNzQ4LDIzNzYyLDIzNzgwLDIzNzU1LDIzNzgxLDIzODEwLDIzODExLDIzODQ3LDIzODQ2LDIzODU0LDIzODQ0''@;'; put 'put ''LDIzODM4LDIzODE0LDIzODM1LDIzODk2LDIzODcwLDIzODYwLDIzODY5LDIzOTE2LDIzODk5LDIzOTE5LDIzOTAxLDIzOTE1LDIzODgzLDIzODgyLDIzOTEzLDIzOTI0LDIzOTM4LDIzOTYxLDIzOTY1LDM1OTU1LDIzOTkxLDI0MDA1LDI0NDM1LDI0NDM5LDI0NDUwLDI0NDU1LDI0NDU3LDI0''@;'; put 'put ''NDYwLDI0NDY5LDI0NDczLDI0NDc2LDI0NDg4LDI0NDkzLDI0NTAxLDI0NTA4LDM0OTE0LDI0NDE3LDI5MzU3LDI5MzYwLDI5MzY0LDI5MzY3LDI5MzY4LDI5Mzc5LDI5Mzc3LDI5MzkwLDI5Mzg5LDI5Mzk0LDI5NDE2LDI5NDIzLDI5NDE3LDI5NDI2LDI5NDI4LDI5NDMxLDI5NDQxLDI5NDI3''@;'; put 'put ''LDI5NDQzLDI5NDM0LDM3MzUwLDM3MzUxLDM3MzUyLDM3MzUzLDM3MzU0LDM3MzU1LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzYyLDM3MzYzLDM3MzY0LDM3MzY1LDM3MzY2LDM3MzY3LDM3MzY4LDM3MzY5LDM3MzcwLDM3MzcxLDM3MzcyLDM3MzczLDM3Mzc0LDM3''@;'; put 'put ''Mzc1LDM3Mzc2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzg3LDM3Mzg4LDM3Mzg5LDM3MzkwLDM3MzkxLDM3MzkyLDM3MzkzLDM3Mzk0LDM3Mzk1LDM3Mzk2LDM3Mzk3LDM3Mzk4LDM3Mzk5LDM3NDAwLDM3NDAxLDM3NDAy''@;'; put 'put ''LDM3NDAzLDM3NDA0LDM3NDA1LDM3NDA2LDM3NDA3LDM3NDA4LDM3NDA5LDM3NDEwLDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE1LDM3NDE2LDM3NDE3LDM3NDE4LDM3NDE5LDM3NDIwLDM3NDIxLDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI1LDM3NDI2LDM3NDI3LDM3NDI4LDM3NDI5LDM3''@;'; put 'put ''NDMwLDM3NDMxLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM1LDM3NDM2LDM3NDM3LDM3NDM4LDM3NDM5LDM3NDQwLDM3NDQxLDM3NDQyLDM3NDQzLDM3NDQ0LDM3NDQ1LDI5NDM1LDI5NDYzLDI5NDU5LDI5NDczLDI5NDUwLDI5NDcwLDI5NDY5LDI5NDYxLDI5NDc0LDI5NDk3LDI5NDc3LDI5NDg0''@;'; put 'put ''LDI5NDk2LDI5NDg5LDI5NTIwLDI5NTE3LDI5NTI3LDI5NTM2LDI5NTQ4LDI5NTUxLDI5NTY2LDMzMzA3LDIyODIxLDM5MTQzLDIyODIwLDIyNzg2LDM5MjY3LDM5MjcxLDM5MjcyLDM5MjczLDM5Mjc0LDM5Mjc1LDM5Mjc2LDM5Mjg0LDM5Mjg3LDM5MjkzLDM5Mjk2LDM5MzAwLDM5MzAzLDM5''@;'; put 'put ''MzA2LDM5MzA5LDM5MzEyLDM5MzEzLDM5MzE1LDM5MzE2LDM5MzE3LDI0MTkyLDI0MjA5LDI0MjAzLDI0MjE0LDI0MjI5LDI0MjI0LDI0MjQ5LDI0MjQ1LDI0MjU0LDI0MjQzLDM2MTc5LDI0Mjc0LDI0MjczLDI0MjgzLDI0Mjk2LDI0Mjk4LDMzMjEwLDI0NTE2LDI0NTIxLDI0NTM0LDI0NTI3''@;'; put 'put ''LDI0NTc5LDI0NTU4LDI0NTgwLDI0NTQ1LDI0NTQ4LDI0NTc0LDI0NTgxLDI0NTgyLDI0NTU0LDI0NTU3LDI0NTY4LDI0NjAxLDI0NjI5LDI0NjE0LDI0NjAzLDI0NTkxLDI0NTg5LDI0NjE3LDI0NjE5LDI0NTg2LDI0NjM5LDI0NjA5LDI0Njk2LDI0Njk3LDI0Njk5LDI0Njk4LDI0NjQyLDM3''@;'; put 'put ''NDQ2LDM3NDQ3LDM3NDQ4LDM3NDQ5LDM3NDUwLDM3NDUxLDM3NDUyLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU2LDM3NDU3LDM3NDU4LDM3NDU5LDM3NDYwLDM3NDYxLDM3NDYyLDM3NDYzLDM3NDY0LDM3NDY1LDM3NDY2LDM3NDY3LDM3NDY4LDM3NDY5LDM3NDcwLDM3NDcxLDM3NDcyLDM3NDcz''@;'; put 'put ''LDM3NDc0LDM3NDc1LDM3NDc2LDM3NDc3LDM3NDc4LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDgyLDM3NDgzLDM3NDg0LDM3NDg1LDM3NDg2LDM3NDg3LDM3NDg4LDM3NDg5LDM3NDkwLDM3NDkxLDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk4LDM3NDk5LDM3NTAwLDM3NTAxLDM3''@;'; put 'put ''NTAyLDM3NTAzLDM3NTA0LDM3NTA1LDM3NTA2LDM3NTA3LDM3NTA4LDM3NTA5LDM3NTEwLDM3NTExLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE1LDM3NTE2LDM3NTE3LDM3NTE5LDM3NTIwLDM3NTIxLDM3NTIyLDM3NTIzLDM3NTI0LDM3NTI1LDM3NTI2LDM3NTI3LDM3NTI4LDM3NTI5LDM3NTMw''@;'; put 'put ''LDM3NTMxLDM3NTMyLDM3NTMzLDM3NTM0LDM3NTM1LDM3NTM2LDM3NTM3LDM3NTM4LDM3NTM5LDM3NTQwLDM3NTQxLDM3NTQyLDM3NTQzLDI0NjgyLDI0NzAxLDI0NzI2LDI0NzMwLDI0NzQ5LDI0NzMzLDI0NzA3LDI0NzIyLDI0NzE2LDI0NzMxLDI0ODEyLDI0NzYzLDI0NzUzLDI0Nzk3LDI0''@;'; put 'put ''NzkyLDI0Nzc0LDI0Nzk0LDI0NzU2LDI0ODY0LDI0ODcwLDI0ODUzLDI0ODY3LDI0ODIwLDI0ODMyLDI0ODQ2LDI0ODc1LDI0OTA2LDI0OTQ5LDI1MDA0LDI0OTgwLDI0OTk5LDI1MDE1LDI1MDQ0LDI1MDc3LDI0NTQxLDM4NTc5LDM4Mzc3LDM4Mzc5LDM4Mzg1LDM4Mzg3LDM4Mzg5LDM4Mzkw''@;'; put 'put ''LDM4Mzk2LDM4Mzk4LDM4NDAzLDM4NDA0LDM4NDA2LDM4NDA4LDM4NDEwLDM4NDExLDM4NDEyLDM4NDEzLDM4NDE1LDM4NDE4LDM4NDIxLDM4NDIyLDM4NDIzLDM4NDI1LDM4NDI2LDIwMDEyLDI5MjQ3LDI1MTA5LDI3NzAxLDI3NzMyLDI3NzQwLDI3NzIyLDI3ODExLDI3NzgxLDI3NzkyLDI3''@;'; put 'put ''Nzk2LDI3Nzg4LDI3NzUyLDI3NzUzLDI3NzY0LDI3NzY2LDI3NzgyLDI3ODE3LDI3ODU2LDI3ODYwLDI3ODIxLDI3ODk1LDI3ODk2LDI3ODg5LDI3ODYzLDI3ODI2LDI3ODcyLDI3ODYyLDI3ODk4LDI3ODgzLDI3ODg2LDI3ODI1LDI3ODU5LDI3ODg3LDI3OTAyLDM3NTQ0LDM3NTQ1LDM3NTQ2''@;'; put 'put ''LDM3NTQ3LDM3NTQ4LDM3NTQ5LDM3NTUxLDM3NTUyLDM3NTUzLDM3NTU0LDM3NTU1LDM3NTU2LDM3NTU3LDM3NTU4LDM3NTU5LDM3NTYwLDM3NTYxLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY2LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTcyLDM3NTczLDM3NTc0LDM3''@;'; put 'put ''NTc1LDM3NTc3LDM3NTc4LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTgzLDM3NTg0LDM3NTg1LDM3NTg2LDM3NTg3LDM3NTg4LDM3NTg5LDM3NTkwLDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk0LDM3NTk1LDM3NTk2LDM3NTk3LDM3NTk4LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAyLDM3NjAz''@;'; put 'put ''LDM3NjA0LDM3NjA1LDM3NjA2LDM3NjA3LDM3NjA4LDM3NjA5LDM3NjEwLDM3NjExLDM3NjEyLDM3NjEzLDM3NjE0LDM3NjE1LDM3NjE2LDM3NjE3LDM3NjE4LDM3NjE5LDM3NjIwLDM3NjIxLDM3NjIyLDM3NjIzLDM3NjI0LDM3NjI1LDM3NjI2LDM3NjI3LDM3NjI4LDM3NjI5LDM3NjMwLDM3''@;'; put 'put ''NjMxLDM3NjMyLDM3NjMzLDM3NjM0LDM3NjM1LDM3NjM2LDM3NjM3LDM3NjM4LDM3NjM5LDM3NjQwLDM3NjQxLDI3OTYxLDI3OTQzLDI3OTE2LDI3OTcxLDI3OTc2LDI3OTExLDI3OTA4LDI3OTI5LDI3OTE4LDI3OTQ3LDI3OTgxLDI3OTUwLDI3OTU3LDI3OTMwLDI3OTgzLDI3OTg2LDI3OTg4''@;'; put 'put ''LDI3OTU1LDI4MDQ5LDI4MDE1LDI4MDYyLDI4MDY0LDI3OTk4LDI4MDUxLDI4MDUyLDI3OTk2LDI4ZTMsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgy''@;'; put 'put ''MDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQs''@;'; put 'put ''MjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2''@;'; put 'put ''NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQs''@;'; put 'put ''Mzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3''@;'; put 'put ''MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAs''@;'; put 'put ''Mzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0''@;'; put 'put ''NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEs''@;'; put 'put ''MzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzdlMywzNjk5NSwzNzAwMywyNDQwMCwyNDQwNywyNDQwNiwyNDQwOCwyMzYxMSwyMTY3''@;'; put 'put ''NSwyMzYzMiwyMzY0MSwyMzQwOSwyMzY1MSwyMzY1NCwzMjcwMCwyNDM2MiwyNDM2MSwyNDM2NSwzMzM5NiwyNDM4MCwzOTczOSwyMzY2MiwyMjkxMywyMjkxNSwyMjkyNSwyMjk1MywyMjk1NCwyMjk0NywzNzc0MCwzNzc0MSwzNzc0MiwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NiwzNzc0Nywz''@;'; put 'put ''Nzc0OCwzNzc0OSwzNzc1MCwzNzc1MSwzNzc1MiwzNzc1MywzNzc1NCwzNzc1NSwzNzc1NiwzNzc1NywzNzc1OCwzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2MywzNzc2NCwzNzc2NSwzNzc2NiwzNzc2NywzNzc2OCwzNzc2OSwzNzc3MCwzNzc3MSwzNzc3MiwzNzc3MywzNzc3NCwzNzc3''@;'; put 'put ''NiwzNzc3NywzNzc3OCwzNzc3OSwzNzc4MCwzNzc4MSwzNzc4MiwzNzc4MywzNzc4NCwzNzc4NSwzNzc4NiwzNzc4NywzNzc4OCwzNzc4OSwzNzc5MCwzNzc5MSwzNzc5MiwzNzc5MywzNzc5NCwzNzc5NSwzNzc5NiwzNzc5NywzNzc5OCwzNzc5OSwzNzgwMCwzNzgwMSwzNzgwMiwzNzgwMywz''@;'; put 'put ''NzgwNCwzNzgwNSwzNzgwNiwzNzgwNywzNzgwOCwzNzgwOSwzNzgxMCwzNzgxMSwzNzgxMiwzNzgxMywzNzgxNCwzNzgxNSwzNzgxNiwzNzgxNywzNzgxOCwzNzgxOSwzNzgyMCwzNzgyMSwzNzgyMiwzNzgyMywzNzgyNCwzNzgyNSwzNzgyNiwzNzgyNywzNzgyOCwzNzgyOSwzNzgzMCwzNzgz''@;'; put 'put ''MSwzNzgzMiwzNzgzMywzNzgzNSwzNzgzNiwzNzgzNywyMjkzNSwyMjk4NiwyMjk1NSwyMjk0MiwyMjk0OCwyMjk5NCwyMjk2MiwyMjk1OSwyMjk5OSwyMjk3NCwyMzA0NSwyMzA0NiwyMzAwNSwyMzA0OCwyMzAxMSwyM2UzLDIzMDMzLDIzMDUyLDIzMDQ5LDIzMDkwLDIzMDkyLDIzMDU3LDIz''@;'; put 'put ''MDc1LDIzMDU5LDIzMTA0LDIzMTQzLDIzMTE0LDIzMTI1LDIzMTAwLDIzMTM4LDIzMTU3LDMzMDA0LDIzMjEwLDIzMTk1LDIzMTU5LDIzMTYyLDIzMjMwLDIzMjc1LDIzMjE4LDIzMjUwLDIzMjUyLDIzMjI0LDIzMjY0LDIzMjY3LDIzMjgxLDIzMjU0LDIzMjcwLDIzMjU2LDIzMjYwLDIzMzA1''@;'; put 'put ''LDIzMzE5LDIzMzE4LDIzMzQ2LDIzMzUxLDIzMzYwLDIzNTczLDIzNTgwLDIzMzg2LDIzMzk3LDIzNDExLDIzMzc3LDIzMzc5LDIzMzk0LDM5NTQxLDM5NTQzLDM5NTQ0LDM5NTQ2LDM5NTUxLDM5NTQ5LDM5NTUyLDM5NTUzLDM5NTU3LDM5NTYwLDM5NTYyLDM5NTY4LDM5NTcwLDM5NTcxLDM5''@;'; put 'put ''NTc0LDM5NTc2LDM5NTc5LDM5NTgwLDM5NTgxLDM5NTgzLDM5NTg0LDM5NTg2LDM5NTg3LDM5NTg5LDM5NTkxLDMyNDE1LDMyNDE3LDMyNDE5LDMyNDIxLDMyNDI0LDMyNDI1LDM3ODM4LDM3ODM5LDM3ODQwLDM3ODQxLDM3ODQyLDM3ODQzLDM3ODQ0LDM3ODQ1LDM3ODQ3LDM3ODQ4LDM3ODQ5''@;'; put 'put ''LDM3ODUwLDM3ODUxLDM3ODUyLDM3ODUzLDM3ODU0LDM3ODU1LDM3ODU2LDM3ODU3LDM3ODU4LDM3ODU5LDM3ODYwLDM3ODYxLDM3ODYyLDM3ODYzLDM3ODY0LDM3ODY1LDM3ODY2LDM3ODY3LDM3ODY4LDM3ODY5LDM3ODcwLDM3ODcxLDM3ODcyLDM3ODczLDM3ODc0LDM3ODc1LDM3ODc2LDM3''@;'; put 'put ''ODc3LDM3ODc4LDM3ODc5LDM3ODgwLDM3ODgxLDM3ODgyLDM3ODgzLDM3ODg0LDM3ODg1LDM3ODg2LDM3ODg3LDM3ODg4LDM3ODg5LDM3ODkwLDM3ODkxLDM3ODkyLDM3ODkzLDM3ODk0LDM3ODk1LDM3ODk2LDM3ODk3LDM3ODk4LDM3ODk5LDM3OTAwLDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA0''@;'; put 'put ''LDM3OTA1LDM3OTA2LDM3OTA3LDM3OTA4LDM3OTA5LDM3OTEwLDM3OTExLDM3OTEyLDM3OTEzLDM3OTE0LDM3OTE1LDM3OTE2LDM3OTE3LDM3OTE4LDM3OTE5LDM3OTIwLDM3OTIxLDM3OTIyLDM3OTIzLDM3OTI0LDM3OTI1LDM3OTI2LDM3OTI3LDM3OTI4LDM3OTI5LDM3OTMwLDM3OTMxLDM3''@;'; put 'put ''OTMyLDM3OTMzLDM3OTM0LDMyNDI5LDMyNDMyLDMyNDQ2LDMyNDQ4LDMyNDQ5LDMyNDUwLDMyNDU3LDMyNDU5LDMyNDYwLDMyNDY0LDMyNDY4LDMyNDcxLDMyNDc1LDMyNDgwLDMyNDgxLDMyNDg4LDMyNDkxLDMyNDk0LDMyNDk1LDMyNDk3LDMyNDk4LDMyNTI1LDMyNTAyLDMyNTA2LDMyNTA3''@;'; put 'put ''LDMyNTEwLDMyNTEzLDMyNTE0LDMyNTE1LDMyNTE5LDMyNTIwLDMyNTIzLDMyNTI0LDMyNTI3LDMyNTI5LDMyNTMwLDMyNTM1LDMyNTM3LDMyNTQwLDMyNTM5LDMyNTQzLDMyNTQ1LDMyNTQ2LDMyNTQ3LDMyNTQ4LDMyNTQ5LDMyNTUwLDMyNTUxLDMyNTU0LDMyNTU1LDMyNTU2LDMyNTU3LDMy''@;'; put 'put ''NTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY1LDI0MTg2LDMwMDc5LDI0MDI3LDMwMDE0LDM3MDEzLDI5NTgyLDI5NTg1LDI5NjE0LDI5NjAyLDI5NTk5LDI5NjQ3LDI5NjM0LDI5NjQ5LDI5NjIzLDI5NjE5LDI5NjMyLDI5NjQxLDI5NjQwLDI5NjY5LDI5NjU3LDM5MDM2LDI5NzA2''@;'; put 'put ''LDI5NjczLDI5NjcxLDI5NjYyLDI5NjI2LDI5NjgyLDI5NzExLDI5NzM4LDI5Nzg3LDI5NzM0LDI5NzMzLDI5NzM2LDI5NzQ0LDI5NzQyLDI5NzQwLDM3OTM1LDM3OTM2LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQxLDM3OTQyLDM3OTQzLDM3OTQ0LDM3OTQ1LDM3OTQ2LDM3OTQ3LDM3''@;'; put 'put ''OTQ4LDM3OTQ5LDM3OTUxLDM3OTUyLDM3OTUzLDM3OTU0LDM3OTU1LDM3OTU2LDM3OTU3LDM3OTU4LDM3OTU5LDM3OTYwLDM3OTYxLDM3OTYyLDM3OTYzLDM3OTY0LDM3OTY1LDM3OTY2LDM3OTY3LDM3OTY4LDM3OTY5LDM3OTcwLDM3OTcxLDM3OTcyLDM3OTczLDM3OTc0LDM3OTc1LDM3OTc2''@;'; put 'put ''LDM3OTc3LDM3OTc4LDM3OTc5LDM3OTgwLDM3OTgxLDM3OTgyLDM3OTgzLDM3OTg0LDM3OTg1LDM3OTg2LDM3OTg3LDM3OTg4LDM3OTg5LDM3OTkwLDM3OTkxLDM3OTkyLDM3OTkzLDM3OTk0LDM3OTk2LDM3OTk3LDM3OTk4LDM3OTk5LDM4ZTMsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgw''@;'; put 'put ''MDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYs''@;'; put 'put ''Mjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0''@;'; put 'put ''NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcs''@;'; put 'put ''MjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4''@;'; put 'put ''MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYs''@;'; put 'put ''MzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgy''@;'; put 'put ''OTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIs''@;'; put 'put ''MzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4''@;'; put 'put ''OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjdlMywyNjkzMiwyNzA4NCwyNzAxNSwyNzAxNiwyNzA4NiwyNzAxNywyNjk4MiwyNjk3OSwyNzAwMSwyNzAzNSwyNzA0NywyNzA2NywyNzA1MSwy''@;'; put 'put ''NzA1MywyNzA5MiwyNzA1NywyNzA3MywyNzA4MiwyNzEwMywyNzAyOSwyNzEwNCwyNzAyMSwyNzEzNSwyNzE4MywyNzExNywyNzE1OSwyNzE2MCwyNzIzNywyNzEyMiwyNzIwNCwyNzE5OCwyNzI5NiwyNzIxNiwyNzIyNywyNzE4OSwyNzI3OCwyNzI1NywyNzE5NywyNzE3NiwyNzIyNCwyNzI2''@;'; put 'put ''MCwyNzI4MSwyNzI4MCwyNzMwNSwyNzI4NywyNzMwNywyOTQ5NSwyOTUyMiwyNzUyMSwyNzUyMiwyNzUyNywyNzUyNCwyNzUzOCwyNzUzOSwyNzUzMywyNzU0NiwyNzU0NywyNzU1MywyNzU2MiwzNjcxNSwzNjcxNywzNjcyMSwzNjcyMiwzNjcyMywzNjcyNSwzNjcyNiwzNjcyOCwzNjcyNywz''@;'; put 'put ''NjcyOSwzNjczMCwzNjczMiwzNjczNCwzNjczNywzNjczOCwzNjc0MCwzNjc0MywzNjc0NywzODM0OCwzODM0OSwzODM1MCwzODM1MSwzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM1NiwzODM1NywzODM1OCwzODM1OSwzODM2MCwzODM2MSwzODM2MiwzODM2MywzODM2NCwzODM2NSwzODM2''@;'; put 'put ''NiwzODM2NywzODM2OCwzODM2OSwzODM3MCwzODM3MSwzODM3MiwzODM3MywzODM3NCwzODM3NSwzODM4MCwzODM5OSwzODQwNywzODQxOSwzODQyNCwzODQyNywzODQzMCwzODQzMiwzODQzNSwzODQzNiwzODQzNywzODQzOCwzODQzOSwzODQ0MCwzODQ0MSwzODQ0MywzODQ0NCwzODQ0NSwz''@;'; put 'put ''ODQ0NywzODQ0OCwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MiwzODQ2NSwzODQ2NywzODQ3NCwzODQ3OCwzODQ3OSwzODQ4MSwzODQ4MiwzODQ4MywzODQ4NiwzODQ4NywzODQ4OCwzODQ4OSwzODQ5MCwzODQ5MiwzODQ5MywzODQ5NCwzODQ5NiwzODQ5OSwzODUwMSwzODUwMiwzODUw''@;'; put 'put ''NywzODUwOSwzODUxMCwzODUxMSwzODUxMiwzODUxMywzODUxNSwzODUyMCwzODUyMSwzODUyMiwzODUyMywzODUyNCwzODUyNSwzODUyNiwzODUyNywzODUyOCwzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNSwzODUzNywzODUzOCwzNjc0OSwzNjc1MCwzNjc1MSwzNjc2MCwzNjc2Miwz''@;'; put 'put ''NjU1OCwyNTA5OSwyNTExMSwyNTExNSwyNTExOSwyNTEyMiwyNTEyMSwyNTEyNSwyNTEyNCwyNTEzMiwzMzI1NSwyOTkzNSwyOTk0MCwyOTk1MSwyOTk2NywyOTk2OSwyOTk3MSwyNTkwOCwyNjA5NCwyNjA5NSwyNjA5NiwyNjEyMiwyNjEzNywyNjQ4MiwyNjExNSwyNjEzMywyNjExMiwyODgw''@;'; put 'put ''NSwyNjM1OSwyNjE0MSwyNjE2NCwyNjE2MSwyNjE2NiwyNjE2NSwzMjc3NCwyNjIwNywyNjE5NiwyNjE3NywyNjE5MSwyNjE5OCwyNjIwOSwyNjE5OSwyNjIzMSwyNjI0NCwyNjI1MiwyNjI3OSwyNjI2OSwyNjMwMiwyNjMzMSwyNjMzMiwyNjM0MiwyNjM0NSwzNjE0NiwzNjE0NywzNjE1MCwz''@;'; put 'put ''NjE1NSwzNjE1NywzNjE2MCwzNjE2NSwzNjE2NiwzNjE2OCwzNjE2OSwzNjE2NywzNjE3MywzNjE4MSwzNjE4NSwzNTI3MSwzNTI3NCwzNTI3NSwzNTI3NiwzNTI3OCwzNTI3OSwzNTI4MCwzNTI4MSwyOTI5NCwyOTM0MywyOTI3NywyOTI4NiwyOTI5NSwyOTMxMCwyOTMxMSwyOTMxNiwyOTMy''@;'; put 'put ''MywyOTMyNSwyOTMyNywyOTMzMCwyNTM1MiwyNTM5NCwyNTUyMCwzODU0MCwzODU0MiwzODU0NSwzODU0NiwzODU0NywzODU0OSwzODU1MCwzODU1NCwzODU1NSwzODU1NywzODU1OCwzODU1OSwzODU2MCwzODU2MSwzODU2MiwzODU2MywzODU2NCwzODU2NSwzODU2NiwzODU2OCwzODU2OSwz''@;'; put 'put ''ODU3MCwzODU3MSwzODU3MiwzODU3MywzODU3NCwzODU3NSwzODU3NywzODU3OCwzODU4MCwzODU4MSwzODU4MywzODU4NCwzODU4NiwzODU4NywzODU5MSwzODU5NCwzODU5NSwzODYwMCwzODYwMiwzODYwMywzODYwOCwzODYwOSwzODYxMSwzODYxMiwzODYxNCwzODYxNSwzODYxNiwzODYx''@;'; put 'put ''NywzODYxOCwzODYxOSwzODYyMCwzODYyMSwzODYyMiwzODYyMywzODYyNSwzODYyNiwzODYyNywzODYyOCwzODYyOSwzODYzMCwzODYzMSwzODYzNSwzODYzNiwzODYzNywzODYzOCwzODY0MCwzODY0MSwzODY0MiwzODY0NCwzODY0NSwzODY0OCwzODY1MCwzODY1MSwzODY1MiwzODY1Mywz''@;'; put 'put ''ODY1NSwzODY1OCwzODY1OSwzODY2MSwzODY2NiwzODY2NywzODY2OCwzODY3MiwzODY3MywzODY3NCwzODY3NiwzODY3NywzODY3OSwzODY4MCwzODY4MSwzODY4MiwzODY4MywzODY4NSwzODY4NywzODY4OCwyNTY2MywyNTgxNiwzMjc3MiwyNzYyNiwyNzYzNSwyNzY0NSwyNzYzNywyNzY0''@;'; put 'put ''MSwyNzY1MywyNzY1NSwyNzY1NCwyNzY2MSwyNzY2OSwyNzY3MiwyNzY3MywyNzY3NCwyNzY4MSwyNzY4OSwyNzY4NCwyNzY5MCwyNzY5OCwyNTkwOSwyNTk0MSwyNTk2MywyOTI2MSwyOTI2NiwyOTI3MCwyOTIzMiwzNDQwMiwyMTAxNCwzMjkyNywzMjkyNCwzMjkxNSwzMjk1NiwyNjM3OCwz''@;'; put 'put ''Mjk1NywzMjk0NSwzMjkzOSwzMjk0MSwzMjk0OCwzMjk1MSwzMjk5OSwzM2UzLDMzMDAxLDMzMDAyLDMyOTg3LDMyOTYyLDMyOTY0LDMyOTg1LDMyOTczLDMyOTgzLDI2Mzg0LDMyOTg5LDMzMDAzLDMzMDA5LDMzMDEyLDMzMDA1LDMzMDM3LDMzMDM4LDMzMDEwLDMzMDIwLDI2Mzg5LDMzMDQy''@;'; put 'put ''LDM1OTMwLDMzMDc4LDMzMDU0LDMzMDY4LDMzMDQ4LDMzMDc0LDMzMDk2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMTEzLDMzMTE0LDMzMTM3LDMzMTIwLDMzMTI5LDMzMTQ4LDMzMTQ5LDMzMTMzLDMzMTI3LDIyNjA1LDIzMjIxLDMzMTYwLDMzMTU0LDMzMTY5LDI4MzczLDMzMTg3LDMzMTk0LDMz''@;'; put 'put ''MjI4LDI2NDA2LDMzMjI2LDMzMjExLDM4Njg5LDM4NjkwLDM4NjkxLDM4NjkyLDM4NjkzLDM4Njk0LDM4Njk1LDM4Njk2LDM4Njk3LDM4Njk5LDM4NzAwLDM4NzAyLDM4NzAzLDM4NzA1LDM4NzA3LDM4NzA4LDM4NzA5LDM4NzEwLDM4NzExLDM4NzE0LDM4NzE1LDM4NzE2LDM4NzE3LDM4NzE5''@;'; put 'put ''LDM4NzIwLDM4NzIxLDM4NzIyLDM4NzIzLDM4NzI0LDM4NzI1LDM4NzI2LDM4NzI3LDM4NzI4LDM4NzI5LDM4NzMwLDM4NzMxLDM4NzMyLDM4NzMzLDM4NzM0LDM4NzM1LDM4NzM2LDM4NzM3LDM4NzQwLDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ4LDM4NzQ5LDM4NzUxLDM4NzU1LDM4''@;'; put 'put ''NzU2LDM4NzU4LDM4NzU5LDM4NzYwLDM4NzYyLDM4NzYzLDM4NzY0LDM4NzY1LDM4NzY2LDM4NzY3LDM4NzY4LDM4NzY5LDM4NzcwLDM4NzczLDM4Nzc1LDM4Nzc2LDM4Nzc3LDM4Nzc4LDM4Nzc5LDM4NzgxLDM4NzgyLDM4NzgzLDM4Nzg0LDM4Nzg1LDM4Nzg2LDM4Nzg3LDM4Nzg4LDM4Nzkw''@;'; put 'put ''LDM4NzkxLDM4NzkyLDM4NzkzLDM4Nzk0LDM4Nzk2LDM4Nzk4LDM4Nzk5LDM4ODAwLDM4ODAzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODExLDM4ODEyLDM4ODEzLDMzMjE3LDMzMTkwLDI3NDI4LDI3NDQ3LDI3NDQ5LDI3NDU5LDI3NDYyLDI3NDgxLDM5MTIxLDM5MTIyLDM5''@;'; put 'put ''MTIzLDM5MTI1LDM5MTI5LDM5MTMwLDI3NTcxLDI0Mzg0LDI3NTg2LDM1MzE1LDI2ZTMsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDks''@;'; put 'put ''Mjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5''@;'; put 'put ''NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1Mjks''@;'; put 'put ''MjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4''@;'; put 'put ''NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQs''@;'; put 'put ''Mzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5''@;'; put 'put ''MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODks''@;'; put 'put ''MjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3''@;'; put 'put ''NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUs''@;'; put 'put ''MzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5''@;'; put 'put ''MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUs''@;'; put 'put ''Mzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5''@;'; put 'put ''ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzllMywzOTAwMSwzOTAwMiwzOTAwMywzOTAwNCwzOTAwNSwzOTAwNiwzOTAwNywzOTAwOCwzOTAwOSwzOTAxMCwz''@;'; put 'put ''OTAxMSwzOTAxMiwzOTAxMywzOTAxNCwzOTAxNSwzOTAxNiwzOTAxNywzOTAxOCwzOTAxOSwzOTAyMCwzOTAyMSwzOTAyMiwzMDU2MiwzMDU2NSwzMDU5MSwzMDYwNSwzMDU4OSwzMDU5MiwzMDYwNCwzMDYwOSwzMDYyMywzMDYyNCwzMDY0MCwzMDY0NSwzMDY1MywzMDAxMCwzMDAxNiwzMDAz''@;'; put 'put ''MCwzMDAyNywzMDAyNCwzMDA0MywzMDA2NiwzMDA3MywzMDA4MywzMjYwMCwzMjYwOSwzMjYwNywzNTQwMCwzMjYxNiwzMjYyOCwzMjYyNSwzMjYzMywzMjY0MSwzMjYzOCwzMDQxMywzMDQzNywzNDg2NiwzODAyMSwzODAyMiwzODAyMywzODAyNywzODAyNiwzODAyOCwzODAyOSwzODAzMSwz''@;'; put 'put ''ODAzMiwzODAzNiwzODAzOSwzODAzNywzODA0MiwzODA0MywzODA0NCwzODA1MSwzODA1MiwzODA1OSwzODA1OCwzODA2MSwzODA2MCwzODA2MywzODA2NCwzODA2NiwzODA2OCwzODA3MCwzODA3MSwzODA3MiwzODA3MywzODA3NCwzODA3NiwzODA3NywzODA3OSwzODA4NCwzODA4OCwzODA4''@;'; put 'put ''OSwzODA5MCwzODA5MSwzODA5MiwzODA5MywzODA5NCwzODA5NiwzODA5NywzODA5OCwzODEwMSwzODEwMiwzODEwMywzODEwNSwzODEwNCwzODEwNywzODExMCwzODExMSwzODExMiwzODExNCwzODExNiwzODExNywzODExOSwzODEyMCwzODEyMiwzOTAyMywzOTAyNCwzOTAyNSwzOTAyNiwz''@;'; put 'put ''OTAyNywzOTAyOCwzOTA1MSwzOTA1NCwzOTA1OCwzOTA2MSwzOTA2NSwzOTA3NSwzOTA4MCwzOTA4MSwzOTA4MiwzOTA4MywzOTA4NCwzOTA4NSwzOTA4NiwzOTA4NywzOTA4OCwzOTA4OSwzOTA5MCwzOTA5MSwzOTA5MiwzOTA5MywzOTA5NCwzOTA5NSwzOTA5NiwzOTA5NywzOTA5OCwzOTA5''@;'; put 'put ''OSwzOTEwMCwzOTEwMSwzOTEwMiwzOTEwMywzOTEwNCwzOTEwNSwzOTEwNiwzOTEwNywzOTEwOCwzOTEwOSwzOTExMCwzOTExMSwzOTExMiwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTExNywzOTExOSwzOTEyMCwzOTEyNCwzOTEyNiwzOTEyNywzOTEzMSwzOTEzMiwzOTEzMywzOTEzNiwz''@;'; put 'put ''OTEzNywzOTEzOCwzOTEzOSwzOTE0MCwzOTE0MSwzOTE0MiwzOTE0NSwzOTE0NiwzOTE0NywzOTE0OCwzOTE0OSwzOTE1MCwzOTE1MSwzOTE1MiwzOTE1MywzOTE1NCwzOTE1NSwzOTE1NiwzOTE1NywzOTE1OCwzOTE1OSwzOTE2MCwzOTE2MSwzOTE2MiwzOTE2MywzOTE2NCwzOTE2NSwzOTE2''@;'; put 'put ''NiwzOTE2NywzOTE2OCwzOTE2OSwzOTE3MCwzOTE3MSwzOTE3MiwzOTE3MywzOTE3NCwzOTE3NSwzODEyMSwzODEyMywzODEyNiwzODEyNywzODEzMSwzODEzMiwzODEzMywzODEzNSwzODEzNywzODE0MCwzODE0MSwzODE0MywzODE0NywzODE0NiwzODE1MCwzODE1MSwzODE1MywzODE1NCwz''@;'; put 'put ''ODE1NywzODE1OCwzODE1OSwzODE2MiwzODE2MywzODE2NCwzODE2NSwzODE2NiwzODE2OCwzODE3MSwzODE3MywzODE3NCwzODE3NSwzODE3OCwzODE4NiwzODE4NywzODE4NSwzODE4OCwzODE5MywzODE5NCwzODE5NiwzODE5OCwzODE5OSwzODIwMCwzODIwNCwzODIwNiwzODIwNywzODIx''@;'; put 'put ''MCwzODE5NywzODIxMiwzODIxMywzODIxNCwzODIxNywzODIyMCwzODIyMiwzODIyMywzODIyNiwzODIyNywzODIyOCwzODIzMCwzODIzMSwzODIzMiwzODIzMywzODIzNSwzODIzOCwzODIzOSwzODIzNywzODI0MSwzODI0MiwzODI0NCwzODI0NSwzODI0NiwzODI0NywzODI0OCwzODI0OSwz''@;'; put 'put ''ODI1MCwzODI1MSwzODI1MiwzODI1NSwzODI1NywzODI1OCwzODI1OSwzODIwMiwzMDY5NSwzMDcwMCwzODYwMSwzMTE4OSwzMTIxMywzMTIwMywzMTIxMSwzMTIzOCwyMzg3OSwzMTIzNSwzMTIzNCwzMTI2MiwzMTI1MiwzOTE3NiwzOTE3NywzOTE3OCwzOTE3OSwzOTE4MCwzOTE4MiwzOTE4''@;'; put 'put ''MywzOTE4NSwzOTE4NiwzOTE4NywzOTE4OCwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5MiwzOTE5MywzOTE5NCwzOTE5NSwzOTE5NiwzOTE5NywzOTE5OCwzOTE5OSwzOTIwMCwzOTIwMSwzOTIwMiwzOTIwMywzOTIwNCwzOTIwNSwzOTIwNiwzOTIwNywzOTIwOCwzOTIwOSwzOTIxMCwzOTIxMSwz''@;'; put 'put ''OTIxMiwzOTIxMywzOTIxNSwzOTIxNiwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyMiwzOTIyMywzOTIyNCwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIyOSwzOTIzMCwzOTIzMSwzOTIzMiwzOTIzMywzOTIzNCwzOTIzNSwzOTIzNiwzOTIzNywzOTIzOCwzOTIzOSwzOTI0''@;'; put 'put ''MCwzOTI0MSwzOTI0MiwzOTI0MywzOTI0NCwzOTI0NSwzOTI0NiwzOTI0NywzOTI0OCwzOTI0OSwzOTI1MCwzOTI1MSwzOTI1NCwzOTI1NSwzOTI1NiwzOTI1NywzOTI1OCwzOTI1OSwzOTI2MCwzOTI2MSwzOTI2MiwzOTI2MywzOTI2NCwzOTI2NSwzOTI2NiwzOTI2OCwzOTI3MCwzOTI4Mywz''@;'; put 'put ''OTI4OCwzOTI4OSwzOTI5MSwzOTI5NCwzOTI5OCwzOTI5OSwzOTMwNSwzMTI4OSwzMTI4NywzMTMxMyw0MDY1NSwzOTMzMywzMTM0NCwzMDM0NCwzMDM1MCwzMDM1NSwzMDM2MSwzMDM3MiwyOTkxOCwyOTkyMCwyOTk5Niw0MDQ4MCw0MDQ4Miw0MDQ4OCw0MDQ4OSw0MDQ5MCw0MDQ5MSw0MDQ5''@;'; put 'put ''Miw0MDQ5OCw0MDQ5Nyw0MDUwMiw0MDUwNCw0MDUwMyw0MDUwNSw0MDUwNiw0MDUxMCw0MDUxMyw0MDUxNCw0MDUxNiw0MDUxOCw0MDUxOSw0MDUyMCw0MDUyMSw0MDUyMyw0MDUyNCw0MDUyNiw0MDUyOSw0MDUzMyw0MDUzNSw0MDUzOCw0MDUzOSw0MDU0MCw0MDU0Miw0MDU0Nyw0MDU1MCw0''@;'; put 'put ''MDU1MSw0MDU1Miw0MDU1Myw0MDU1NCw0MDU1NSw0MDU1Niw0MDU2MSw0MDU1Nyw0MDU2MywzMDA5OCwzMDEwMCwzMDEwMiwzMDExMiwzMDEwOSwzMDEyNCwzMDExNSwzMDEzMSwzMDEzMiwzMDEzNiwzMDE0OCwzMDEyOSwzMDEyOCwzMDE0NywzMDE0NiwzMDE2NiwzMDE1NywzMDE3OSwzMDE4''@;'; put 'put ''NCwzMDE4MiwzMDE4MCwzMDE4NywzMDE4MywzMDIxMSwzMDE5MywzMDIwNCwzMDIwNywzMDIyNCwzMDIwOCwzMDIxMywzMDIyMCwzMDIzMSwzMDIxOCwzMDI0NSwzMDIzMiwzMDIyOSwzMDIzMywzOTMwOCwzOTMxMCwzOTMyMiwzOTMyMywzOTMyNCwzOTMyNSwzOTMyNiwzOTMyNywzOTMyOCwz''@;'; put 'put ''OTMyOSwzOTMzMCwzOTMzMSwzOTMzMiwzOTMzNCwzOTMzNSwzOTMzNywzOTMzOCwzOTMzOSwzOTM0MCwzOTM0MSwzOTM0MiwzOTM0MywzOTM0NCwzOTM0NSwzOTM0NiwzOTM0NywzOTM0OCwzOTM0OSwzOTM1MCwzOTM1MSwzOTM1MiwzOTM1MywzOTM1NCwzOTM1NSwzOTM1NiwzOTM1NywzOTM1''@;'; put 'put ''OCwzOTM1OSwzOTM2MCwzOTM2MSwzOTM2MiwzOTM2MywzOTM2NCwzOTM2NSwzOTM2NiwzOTM2NywzOTM2OCwzOTM2OSwzOTM3MCwzOTM3MSwzOTM3MiwzOTM3MywzOTM3NCwzOTM3NSwzOTM3NiwzOTM3NywzOTM3OCwzOTM3OSwzOTM4MCwzOTM4MSwzOTM4MiwzOTM4MywzOTM4NCwzOTM4NSwz''@;'; put 'put ''OTM4NiwzOTM4NywzOTM4OCwzOTM4OSwzOTM5MCwzOTM5MSwzOTM5MiwzOTM5MywzOTM5NCwzOTM5NSwzOTM5NiwzOTM5NywzOTM5OCwzOTM5OSwzOTQwMCwzOTQwMSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwNSwzOTQwNiwzOTQwNywzOTQwOCwzOTQwOSwzOTQxMCwzOTQxMSwzOTQxMiwzOTQx''@;'; put 'put ''MywzOTQxNCwzOTQxNSwzOTQxNiwzOTQxNywzMDIzNSwzMDI2OCwzMDI0MiwzMDI0MCwzMDI3MiwzMDI1MywzMDI1NiwzMDI3MSwzMDI2MSwzMDI3NSwzMDI3MCwzMDI1OSwzMDI4NSwzMDMwMiwzMDI5MiwzMDMwMCwzMDI5NCwzMDMxNSwzMDMxOSwzMjcxNCwzMTQ2MiwzMTM1MiwzMTM1Mywz''@;'; put 'put ''MTM2MCwzMTM2NiwzMTM2OCwzMTM4MSwzMTM5OCwzMTM5MiwzMTQwNCwzMTQwMCwzMTQwNSwzMTQxMSwzNDkxNiwzNDkyMSwzNDkzMCwzNDk0MSwzNDk0MywzNDk0NiwzNDk3OCwzNTAxNCwzNDk5OSwzNTAwNCwzNTAxNywzNTA0MiwzNTAyMiwzNTA0MywzNTA0NSwzNTA1NywzNTA5OCwzNTA2''@;'; put 'put ''OCwzNTA0OCwzNTA3MCwzNTA1NiwzNTEwNSwzNTA5NywzNTA5MSwzNTA5OSwzNTA4MiwzNTEyNCwzNTExNSwzNTEyNiwzNTEzNywzNTE3NCwzNTE5NSwzMDA5MSwzMjk5NywzMDM4NiwzMDM4OCwzMDY4NCwzMjc4NiwzMjc4OCwzMjc5MCwzMjc5NiwzMjgwMCwzMjgwMiwzMjgwNSwzMjgwNiwz''@;'; put 'put ''MjgwNywzMjgwOSwzMjgwOCwzMjgxNywzMjc3OSwzMjgyMSwzMjgzNSwzMjgzOCwzMjg0NSwzMjg1MCwzMjg3MywzMjg4MSwzNTIwMywzOTAzMiwzOTA0MCwzOTA0MywzOTQxOCwzOTQxOSwzOTQyMCwzOTQyMSwzOTQyMiwzOTQyMywzOTQyNCwzOTQyNSwzOTQyNiwzOTQyNywzOTQyOCwzOTQy''@;'; put 'put ''OSwzOTQzMCwzOTQzMSwzOTQzMiwzOTQzMywzOTQzNCwzOTQzNSwzOTQzNiwzOTQzNywzOTQzOCwzOTQzOSwzOTQ0MCwzOTQ0MSwzOTQ0MiwzOTQ0MywzOTQ0NCwzOTQ0NSwzOTQ0NiwzOTQ0NywzOTQ0OCwzOTQ0OSwzOTQ1MCwzOTQ1MSwzOTQ1MiwzOTQ1MywzOTQ1NCwzOTQ1NSwzOTQ1Niwz''@;'; put 'put ''OTQ1NywzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MSwzOTQ2MiwzOTQ2MywzOTQ2NCwzOTQ2NSwzOTQ2NiwzOTQ2NywzOTQ2OCwzOTQ2OSwzOTQ3MCwzOTQ3MSwzOTQ3MiwzOTQ3MywzOTQ3NCwzOTQ3NSwzOTQ3NiwzOTQ3NywzOTQ3OCwzOTQ3OSwzOTQ4MCwzOTQ4MSwzOTQ4MiwzOTQ4MywzOTQ4''@;'; put 'put ''NCwzOTQ4NSwzOTQ4NiwzOTQ4NywzOTQ4OCwzOTQ4OSwzOTQ5MCwzOTQ5MSwzOTQ5MiwzOTQ5MywzOTQ5NCwzOTQ5NSwzOTQ5NiwzOTQ5NywzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMSwzOTUwMiwzOTUwMywzOTUwNCwzOTUwNSwzOTUwNiwzOTUwNywzOTUwOCwzOTUwOSwzOTUxMCwzOTUxMSwz''@;'; put 'put ''OTUxMiwzOTUxMywzOTA0OSwzOTA1MiwzOTA1MywzOTA1NSwzOTA2MCwzOTA2NiwzOTA2NywzOTA3MCwzOTA3MSwzOTA3MywzOTA3NCwzOTA3NywzOTA3OCwzNDM4MSwzNDM4OCwzNDQxMiwzNDQxNCwzNDQzMSwzNDQyNiwzNDQyOCwzNDQyNywzNDQ3MiwzNDQ0NSwzNDQ0MywzNDQ3NiwzNDQ2''@;'; put 'put ''MSwzNDQ3MSwzNDQ2NywzNDQ3NCwzNDQ1MSwzNDQ3MywzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUxMCwzNDQ4MCwzNDQ5MCwzNDQ4MSwzNDQ3OSwzNDUwNSwzNDUxMSwzNDQ4NCwzNDUzNywzNDU0NSwzNDU0NiwzNDU0MSwzNDU0NywzNDUxMiwzNDU3OSwzNDUyNiwzNDU0OCwzNDUyNywzNDUyMCwz''@;'; put 'put ''NDUxMywzNDU2MywzNDU2NywzNDU1MiwzNDU2OCwzNDU3MCwzNDU3MywzNDU2OSwzNDU5NSwzNDYxOSwzNDU5MCwzNDU5NywzNDYwNiwzNDU4NiwzNDYyMiwzNDYzMiwzNDYxMiwzNDYwOSwzNDYwMSwzNDYxNSwzNDYyMywzNDY5MCwzNDU5NCwzNDY4NSwzNDY4NiwzNDY4MywzNDY1NiwzNDY3''@;'; put 'put ''MiwzNDYzNiwzNDY3MCwzNDY5OSwzNDY0MywzNDY1OSwzNDY4NCwzNDY2MCwzNDY0OSwzNDY2MSwzNDcwNywzNDczNSwzNDcyOCwzNDc3MCwzOTUxNCwzOTUxNSwzOTUxNiwzOTUxNywzOTUxOCwzOTUxOSwzOTUyMCwzOTUyMSwzOTUyMiwzOTUyMywzOTUyNCwzOTUyNSwzOTUyNiwzOTUyNywz''@;'; put 'put ''OTUyOCwzOTUyOSwzOTUzMCwzOTUzMSwzOTUzOCwzOTU1NSwzOTU2MSwzOTU2NSwzOTU2NiwzOTU3MiwzOTU3MywzOTU3NywzOTU5MCwzOTU5MywzOTU5NCwzOTU5NSwzOTU5NiwzOTU5NywzOTU5OCwzOTU5OSwzOTYwMiwzOTYwMywzOTYwNCwzOTYwNSwzOTYwOSwzOTYxMSwzOTYxMywzOTYx''@;'; put 'put ''NCwzOTYxNSwzOTYxOSwzOTYyMCwzOTYyMiwzOTYyMywzOTYyNCwzOTYyNSwzOTYyNiwzOTYyOSwzOTYzMCwzOTYzMSwzOTYzMiwzOTYzNCwzOTYzNiwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MSwzOTY0MiwzOTY0MywzOTY0NCwzOTY0NSwzOTY0NiwzOTY0OCwzOTY1MCwzOTY1MSwzOTY1Miwz''@;'; put 'put ''OTY1MywzOTY1NSwzOTY1NiwzOTY1NywzOTY1OCwzOTY2MCwzOTY2MiwzOTY2NCwzOTY2NSwzOTY2NiwzOTY2NywzOTY2OCwzOTY2OSwzOTY3MCwzOTY3MSwzOTY3MiwzOTY3NCwzOTY3NiwzOTY3NywzOTY3OCwzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4NCwzOTY4NSwzOTY4NiwzNDc1''@;'; put 'put ''OCwzNDY5NiwzNDY5MywzNDczMywzNDcxMSwzNDY5MSwzNDczMSwzNDc4OSwzNDczMiwzNDc0MSwzNDczOSwzNDc2MywzNDc3MSwzNDc0OSwzNDc2OSwzNDc1MiwzNDc2MiwzNDc3OSwzNDc5NCwzNDc4NCwzNDc5OCwzNDgzOCwzNDgzNSwzNDgxNCwzNDgyNiwzNDg0MywzNDg0OSwzNDg3Mywz''@;'; put 'put ''NDg3NiwzMjU2NiwzMjU3OCwzMjU4MCwzMjU4MSwzMzI5NiwzMTQ4MiwzMTQ4NSwzMTQ5NiwzMTQ5MSwzMTQ5MiwzMTUwOSwzMTQ5OCwzMTUzMSwzMTUwMywzMTU1OSwzMTU0NCwzMTUzMCwzMTUxMywzMTUzNCwzMTUzNywzMTUyMCwzMTUyNSwzMTUyNCwzMTUzOSwzMTU1MCwzMTUxOCwzMTU3''@;'; put 'put ''NiwzMTU3OCwzMTU1NywzMTYwNSwzMTU2NCwzMTU4MSwzMTU4NCwzMTU5OCwzMTYxMSwzMTU4NiwzMTYwMiwzMTYwMSwzMTYzMiwzMTY1NCwzMTY1NSwzMTY3MiwzMTY2MCwzMTY0NSwzMTY1NiwzMTYyMSwzMTY1OCwzMTY0NCwzMTY1MCwzMTY1OSwzMTY2OCwzMTY5NywzMTY4MSwzMTY5Miwz''@;'; put 'put ''MTcwOSwzMTcwNiwzMTcxNywzMTcxOCwzMTcyMiwzMTc1NiwzMTc0MiwzMTc0MCwzMTc1OSwzMTc2NiwzMTc1NSwzOTY4NywzOTY4OSwzOTY5MCwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5NywzOTY5OCwzOTcwMCwzOTcwMSwzOTcwMiwzOTcwMywzOTcwNCwzOTcwNSwzOTcw''@;'; put 'put ''NiwzOTcwNywzOTcwOCwzOTcwOSwzOTcxMCwzOTcxMiwzOTcxMywzOTcxNCwzOTcxNiwzOTcxNywzOTcxOCwzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyMywzOTcyNCwzOTcyNSwzOTcyNiwzOTcyOCwzOTcyOSwzOTczMSwzOTczMiwzOTczMywzOTczNCwzOTczNSwzOTczNiwzOTczNywz''@;'; put 'put ''OTczOCwzOTc0MSwzOTc0MiwzOTc0MywzOTc0NCwzOTc1MCwzOTc1NCwzOTc1NSwzOTc1NiwzOTc1OCwzOTc2MCwzOTc2MiwzOTc2MywzOTc2NSwzOTc2NiwzOTc2NywzOTc2OCwzOTc2OSwzOTc3MCwzOTc3MSwzOTc3MiwzOTc3MywzOTc3NCwzOTc3NSwzOTc3NiwzOTc3NywzOTc3OCwzOTc3''@;'; put 'put ''OSwzOTc4MCwzOTc4MSwzOTc4MiwzOTc4MywzOTc4NCwzOTc4NSwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5MSwzOTc5MiwzOTc5MywzOTc5NCwzOTc5NSwzOTc5NiwzOTc5NywzOTc5OCwzOTc5OSwzOTgwMCwzOTgwMSwzOTgwMiwzOTgwMywzMTc3NSwzMTc4NiwzMTc4Miwz''@;'; put 'put ''MTgwMCwzMTgwOSwzMTgwOCwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NCwzMzI2MCwzNDg4NCwzMzMxMywzMzMxNCwzMzMxNSwzMzMyNSwzMzMyNywzMzMyMCwzMzMyMywzMzMzNiwzMzMzOSwzMzMzMSwzMzMzMiwzMzM0MiwzMzM0OCwzMzM1MywzMzM1NSwzMzM1OSwzMzM3MCwzMzM3NSwzMzM4''@;'; put 'put ''NCwzNDk0MiwzNDk0OSwzNDk1MiwzNTAzMiwzNTAzOSwzNTE2NiwzMjY2OSwzMjY3MSwzMjY3OSwzMjY4NywzMjY4OCwzMjY5MCwzMTg2OCwyNTkyOSwzMTg4OSwzMTkwMSwzMTkwMCwzMTkwMiwzMTkwNiwzMTkyMiwzMTkzMiwzMTkzMywzMTkzNywzMTk0MywzMTk0OCwzMTk0OSwzMTk0NCwz''@;'; put 'put ''MTk0MSwzMTk1OSwzMTk3NiwzMzM5MCwyNjI4MCwzMjcwMywzMjcxOCwzMjcyNSwzMjc0MSwzMjczNywzMjc0MiwzMjc0NSwzMjc1MCwzMjc1NSwzMTk5MiwzMjExOSwzMjE2NiwzMjE3NCwzMjMyNywzMjQxMSw0MDYzMiw0MDYyOCwzNjIxMSwzNjIyOCwzNjI0NCwzNjI0MSwzNjI3MywzNjE5''@;'; put 'put ''OSwzNjIwNSwzNTkxMSwzNTkxMywzNzE5NCwzNzIwMCwzNzE5OCwzNzE5OSwzNzIyMCwzOTgwNCwzOTgwNSwzOTgwNiwzOTgwNywzOTgwOCwzOTgwOSwzOTgxMCwzOTgxMSwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNiwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMCwzOTgyMSwzOTgyMiwz''@;'; put 'put ''OTgyMywzOTgyNCwzOTgyNSwzOTgyNiwzOTgyNywzOTgyOCwzOTgyOSwzOTgzMCwzOTgzMSwzOTgzMiwzOTgzMywzOTgzNCwzOTgzNSwzOTgzNiwzOTgzNywzOTgzOCwzOTgzOSwzOTg0MCwzOTg0MSwzOTg0MiwzOTg0MywzOTg0NCwzOTg0NSwzOTg0NiwzOTg0NywzOTg0OCwzOTg0OSwzOTg1''@;'; put 'put ''MCwzOTg1MSwzOTg1MiwzOTg1MywzOTg1NCwzOTg1NSwzOTg1NiwzOTg1NywzOTg1OCwzOTg1OSwzOTg2MCwzOTg2MSwzOTg2MiwzOTg2MywzOTg2NCwzOTg2NSwzOTg2NiwzOTg2NywzOTg2OCwzOTg2OSwzOTg3MCwzOTg3MSwzOTg3MiwzOTg3MywzOTg3NCwzOTg3NSwzOTg3NiwzOTg3Nywz''@;'; put 'put ''OTg3OCwzOTg3OSwzOTg4MCwzOTg4MSwzOTg4MiwzOTg4MywzOTg4NCwzOTg4NSwzOTg4NiwzOTg4NywzOTg4OCwzOTg4OSwzOTg5MCwzOTg5MSwzOTg5MiwzOTg5MywzOTg5NCwzOTg5NSwzOTg5NiwzOTg5NywzOTg5OCwzOTg5OSwzNzIxOCwzNzIxNywzNzIzMiwzNzIyNSwzNzIzMSwzNzI0''@;'; put 'put ''NSwzNzI0NiwzNzIzNCwzNzIzNiwzNzI0MSwzNzI2MCwzNzI1MywzNzI2NCwzNzI2MSwzNzI2NSwzNzI4MiwzNzI4MywzNzI5MCwzNzI5MywzNzI5NCwzNzI5NSwzNzMwMSwzNzMwMCwzNzMwNiwzNTkyNSw0MDU3NCwzNjI4MCwzNjMzMSwzNjM1NywzNjQ0MSwzNjQ1NywzNjI3NywzNjI4Nywz''@;'; put 'put ''NjI4NCwzNjI4MiwzNjI5MiwzNjMxMCwzNjMxMSwzNjMxNCwzNjMxOCwzNjMwMiwzNjMwMywzNjMxNSwzNjI5NCwzNjMzMiwzNjM0MywzNjM0NCwzNjMyMywzNjM0NSwzNjM0NywzNjMyNCwzNjM2MSwzNjM0OSwzNjM3MiwzNjM4MSwzNjM4MywzNjM5NiwzNjM5OCwzNjM4NywzNjM5OSwzNjQx''@;'; put 'put ''MCwzNjQxNiwzNjQwOSwzNjQwNSwzNjQxMywzNjQwMSwzNjQyNSwzNjQxNywzNjQxOCwzNjQzMywzNjQzNCwzNjQyNiwzNjQ2NCwzNjQ3MCwzNjQ3NiwzNjQ2MywzNjQ2OCwzNjQ4NSwzNjQ5NSwzNjUwMCwzNjQ5NiwzNjUwOCwzNjUxMCwzNTk2MCwzNTk3MCwzNTk3OCwzNTk3MywzNTk5Miwz''@;'; put 'put ''NTk4OCwyNjAxMSwzNTI4NiwzNTI5NCwzNTI5MCwzNTI5MiwzOTkwMCwzOTkwMSwzOTkwMiwzOTkwMywzOTkwNCwzOTkwNSwzOTkwNiwzOTkwNywzOTkwOCwzOTkwOSwzOTkxMCwzOTkxMSwzOTkxMiwzOTkxMywzOTkxNCwzOTkxNSwzOTkxNiwzOTkxNywzOTkxOCwzOTkxOSwzOTkyMCwzOTky''@;'; put 'put ''MSwzOTkyMiwzOTkyMywzOTkyNCwzOTkyNSwzOTkyNiwzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMSwzOTkzMiwzOTkzMywzOTkzNCwzOTkzNSwzOTkzNiwzOTkzNywzOTkzOCwzOTkzOSwzOTk0MCwzOTk0MSwzOTk0MiwzOTk0MywzOTk0NCwzOTk0NSwzOTk0NiwzOTk0NywzOTk0OCwz''@;'; put 'put ''OTk0OSwzOTk1MCwzOTk1MSwzOTk1MiwzOTk1MywzOTk1NCwzOTk1NSwzOTk1NiwzOTk1NywzOTk1OCwzOTk1OSwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2MywzOTk2NCwzOTk2NSwzOTk2NiwzOTk2NywzOTk2OCwzOTk2OSwzOTk3MCwzOTk3MSwzOTk3MiwzOTk3MywzOTk3NCwzOTk3NSwzOTk3''@;'; put 'put ''NiwzOTk3NywzOTk3OCwzOTk3OSwzOTk4MCwzOTk4MSwzOTk4MiwzOTk4MywzOTk4NCwzOTk4NSwzOTk4NiwzOTk4NywzOTk4OCwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5MiwzOTk5MywzOTk5NCwzOTk5NSwzNTMwMSwzNTMwNywzNTMxMSwzNTM5MCwzNTYyMiwzODczOSwzODYzMywzODY0Mywz''@;'; put 'put ''ODYzOSwzODY2MiwzODY1NywzODY2NCwzODY3MSwzODY3MCwzODY5OCwzODcwMSwzODcwNCwzODcxOCw0MDgzMiw0MDgzNSw0MDgzNyw0MDgzOCw0MDgzOSw0MDg0MCw0MDg0MSw0MDg0Miw0MDg0NCw0MDcwMiw0MDcxNSw0MDcxNywzODU4NSwzODU4OCwzODU4OSwzODYwNiwzODYxMCwzMDY1''@;'; put 'put ''NSwzODYyNCwzNzUxOCwzNzU1MCwzNzU3NiwzNzY5NCwzNzczOCwzNzgzNCwzNzc3NSwzNzk1MCwzNzk5NSw0MDA2Myw0MDA2Niw0MDA2OSw0MDA3MCw0MDA3MSw0MDA3MiwzMTI2Nyw0MDA3NSw0MDA3OCw0MDA4MCw0MDA4MSw0MDA4Miw0MDA4NCw0MDA4NSw0MDA5MCw0MDA5MSw0MDA5NCw0''@;'; put 'put ''MDA5NSw0MDA5Niw0MDA5Nyw0MDA5OCw0MDA5OSw0MDEwMSw0MDEwMiw0MDEwMyw0MDEwNCw0MDEwNSw0MDEwNyw0MDEwOSw0MDExMCw0MDExMiw0MDExMyw0MDExNCw0MDExNSw0MDExNiw0MDExNyw0MDExOCw0MDExOSw0MDEyMiw0MDEyMyw0MDEyNCw0MDEyNSw0MDEzMiw0MDEzMyw0MDEz''@;'; put 'put ''NCw0MDEzNSw0MDEzOCw0MDEzOSwzOTk5NiwzOTk5NywzOTk5OCwzOTk5OSw0ZTQsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAw''@;'; put 'put ''MjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcs''@;'; put 'put ''NDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAx''@;'; put 'put ''MDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMs''@;'; put 'put ''NDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2''@;'; put 'put ''MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2Mzgs''@;'; put 'put ''MzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3''@;'; put 'put ''NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODks''@;'; put 'put ''NDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAy''@;'; put 'put ''MTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQs''@;'; put 'put ''NDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5''@;'; put 'put ''MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgs''@;'; put 'put ''NTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5''@;'; put 'put ''NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNThlMyw1ODAwMSw0MDI1OSw0MDI2MCw0''@;'; put 'put ''MDI2MSw0MDI2Miw0MDI2Myw0MDI2NCw0MDI2NSw0MDI2Niw0MDI2Nyw0MDI2OCw0MDI2OSw0MDI3MCw0MDI3MSw0MDI3Miw0MDI3Myw0MDI3NCw0MDI3NSw0MDI3Niw0MDI3Nyw0MDI3OCw0MDI3OSw0MDI4MCw0MDI4MSw0MDI4Miw0MDI4Myw0MDI4NCw0MDI4NSw0MDI4Niw0MDI4Nyw0MDI4''@;'; put 'put ''OCw0MDI4OSw0MDI5MCw0MDI5MSw0MDI5Miw0MDI5Myw0MDI5NCw0MDI5NSw0MDI5Niw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwMCw0MDMwMSw0MDMwMiw0MDMwMyw0MDMwNCw0MDMwNSw0MDMwNiw0MDMwNyw0MDMwOCw0MDMwOSw0MDMxMCw0MDMxMSw0MDMxMiw0MDMxMyw0MDMxNCw0MDMxNSw0''@;'; put 'put ''MDMxNiw0MDMxNyw0MDMxOCw0MDMxOSw0MDMyMCw0MDMyMSw0MDMyMiw0MDMyMyw0MDMyNCw0MDMyNSw0MDMyNiw0MDMyNyw0MDMyOCw0MDMyOSw0MDMzMCw0MDMzMSw0MDMzMiw0MDMzMyw0MDMzNCw0MDMzNSw0MDMzNiw0MDMzNyw0MDMzOCw0MDMzOSw0MDM0MCw0MDM0MSw0MDM0Miw0MDM0''@;'; put 'put ''Myw0MDM0NCw0MDM0NSw0MDM0Niw0MDM0Nyw0MDM0OCw0MDM0OSw0MDM1MCw0MDM1MSw0MDM1Miw0MDM1Myw0MDM1NCw1ODAwMiw1ODAwMyw1ODAwNCw1ODAwNSw1ODAwNiw1ODAwNyw1ODAwOCw1ODAwOSw1ODAxMCw1ODAxMSw1ODAxMiw1ODAxMyw1ODAxNCw1ODAxNSw1ODAxNiw1ODAxNyw1''@;'; put 'put ''ODAxOCw1ODAxOSw1ODAyMCw1ODAyMSw1ODAyMiw1ODAyMyw1ODAyNCw1ODAyNSw1ODAyNiw1ODAyNyw1ODAyOCw1ODAyOSw1ODAzMCw1ODAzMSw1ODAzMiw1ODAzMyw1ODAzNCw1ODAzNSw1ODAzNiw1ODAzNyw1ODAzOCw1ODAzOSw1ODA0MCw1ODA0MSw1ODA0Miw1ODA0Myw1ODA0NCw1ODA0''@;'; put 'put ''NSw1ODA0Niw1ODA0Nyw1ODA0OCw1ODA0OSw1ODA1MCw1ODA1MSw1ODA1Miw1ODA1Myw1ODA1NCw1ODA1NSw1ODA1Niw1ODA1Nyw1ODA1OCw1ODA1OSw1ODA2MCw1ODA2MSw1ODA2Miw1ODA2Myw1ODA2NCw1ODA2NSw1ODA2Niw1ODA2Nyw1ODA2OCw1ODA2OSw1ODA3MCw1ODA3MSw1ODA3Miw1''@;'; put 'put ''ODA3Myw1ODA3NCw1ODA3NSw1ODA3Niw1ODA3Nyw1ODA3OCw1ODA3OSw1ODA4MCw1ODA4MSw1ODA4Miw1ODA4Myw1ODA4NCw1ODA4NSw1ODA4Niw1ODA4Nyw1ODA4OCw1ODA4OSw1ODA5MCw1ODA5MSw1ODA5Miw1ODA5Myw1ODA5NCw1ODA5NSw0MDM1NSw0MDM1Niw0MDM1Nyw0MDM1OCw0MDM1''@;'; put 'put ''OSw0MDM2MCw0MDM2MSw0MDM2Miw0MDM2Myw0MDM2NCw0MDM2NSw0MDM2Niw0MDM2Nyw0MDM2OCw0MDM2OSw0MDM3MCw0MDM3MSw0MDM3Miw0MDM3Myw0MDM3NCw0MDM3NSw0MDM3Niw0MDM3Nyw0MDM3OCw0MDM3OSw0MDM4MCw0MDM4MSw0MDM4Miw0MDM4Myw0MDM4NCw0MDM4NSw0MDM4Niw0''@;'; put 'put ''MDM4Nyw0MDM4OCw0MDM4OSw0MDM5MCw0MDM5MSw0MDM5Miw0MDM5Myw0MDM5NCw0MDM5NSw0MDM5Niw0MDM5Nyw0MDM5OCw0MDM5OSw0MDQwMCw0MDQwMSw0MDQwMiw0MDQwMyw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQwOCw0MDQwOSw0MDQxMCw0MDQxMSw0MDQxMiw0MDQxMyw0MDQx''@;'; put 'put ''NCw0MDQxNSw0MDQxNiw0MDQxNyw0MDQxOCw0MDQxOSw0MDQyMCw0MDQyMSw0MDQyMiw0MDQyMyw0MDQyNCw0MDQyNSw0MDQyNiw0MDQyNyw0MDQyOCw0MDQyOSw0MDQzMCw0MDQzMSw0MDQzMiw0MDQzMyw0MDQzNCw0MDQzNSw0MDQzNiw0MDQzNyw0MDQzOCw0MDQzOSw0MDQ0MCw0MDQ0MSw0''@;'; put 'put ''MDQ0Miw0MDQ0Myw0MDQ0NCw0MDQ0NSw0MDQ0Niw0MDQ0Nyw0MDQ0OCw0MDQ0OSw0MDQ1MCw1ODA5Niw1ODA5Nyw1ODA5OCw1ODA5OSw1ODEwMCw1ODEwMSw1ODEwMiw1ODEwMyw1ODEwNCw1ODEwNSw1ODEwNiw1ODEwNyw1ODEwOCw1ODEwOSw1ODExMCw1ODExMSw1ODExMiw1ODExMyw1ODEx''@;'; put 'put ''NCw1ODExNSw1ODExNiw1ODExNyw1ODExOCw1ODExOSw1ODEyMCw1ODEyMSw1ODEyMiw1ODEyMyw1ODEyNCw1ODEyNSw1ODEyNiw1ODEyNyw1ODEyOCw1ODEyOSw1ODEzMCw1ODEzMSw1ODEzMiw1ODEzMyw1ODEzNCw1ODEzNSw1ODEzNiw1ODEzNyw1ODEzOCw1ODEzOSw1ODE0MCw1ODE0MSw1''@;'; put 'put ''ODE0Miw1ODE0Myw1ODE0NCw1ODE0NSw1ODE0Niw1ODE0Nyw1ODE0OCw1ODE0OSw1ODE1MCw1ODE1MSw1ODE1Miw1ODE1Myw1ODE1NCw1ODE1NSw1ODE1Niw1ODE1Nyw1ODE1OCw1ODE1OSw1ODE2MCw1ODE2MSw1ODE2Miw1ODE2Myw1ODE2NCw1ODE2NSw1ODE2Niw1ODE2Nyw1ODE2OCw1ODE2''@;'; put 'put ''OSw1ODE3MCw1ODE3MSw1ODE3Miw1ODE3Myw1ODE3NCw1ODE3NSw1ODE3Niw1ODE3Nyw1ODE3OCw1ODE3OSw1ODE4MCw1ODE4MSw1ODE4Miw1ODE4Myw1ODE4NCw1ODE4NSw1ODE4Niw1ODE4Nyw1ODE4OCw1ODE4OSw0MDQ1MSw0MDQ1Miw0MDQ1Myw0MDQ1NCw0MDQ1NSw0MDQ1Niw0MDQ1Nyw0''@;'; put 'put ''MDQ1OCw0MDQ1OSw0MDQ2MCw0MDQ2MSw0MDQ2Miw0MDQ2Myw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2Nyw0MDQ2OCw0MDQ2OSw0MDQ3MCw0MDQ3MSw0MDQ3Miw0MDQ3Myw0MDQ3NCw0MDQ3NSw0MDQ3Niw0MDQ3Nyw0MDQ3OCw0MDQ4NCw0MDQ4Nyw0MDQ5NCw0MDQ5Niw0MDUwMCw0MDUwNyw0MDUw''@;'; put 'put ''OCw0MDUxMiw0MDUyNSw0MDUyOCw0MDUzMCw0MDUzMSw0MDUzMiw0MDUzNCw0MDUzNyw0MDU0MSw0MDU0Myw0MDU0NCw0MDU0NSw0MDU0Niw0MDU0OSw0MDU1OCw0MDU1OSw0MDU2Miw0MDU2NCw0MDU2NSw0MDU2Niw0MDU2Nyw0MDU2OCw0MDU2OSw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Myw0''@;'; put 'put ''MDU3Niw0MDU3Nyw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Miw0MDU4NSw0MDU4Niw0MDU4OCw0MDU4OSw0MDU5MCw0MDU5MSw0MDU5Miw0MDU5Myw0MDU5Niw0MDU5Nyw0MDU5OCw0MDU5OSw0MDYwMCw0MDYwMSw0MDYwMiw0MDYwMyw0MDYwNCw0MDYwNiw0MDYwOCw0MDYwOSw0MDYxMCw0MDYx''@;'; put 'put ''MSw0MDYxMiw0MDYxMyw0MDYxNSw0MDYxNiw0MDYxNyw0MDYxOCw1ODE5MCw1ODE5MSw1ODE5Miw1ODE5Myw1ODE5NCw1ODE5NSw1ODE5Niw1ODE5Nyw1ODE5OCw1ODE5OSw1ODIwMCw1ODIwMSw1ODIwMiw1ODIwMyw1ODIwNCw1ODIwNSw1ODIwNiw1ODIwNyw1ODIwOCw1ODIwOSw1ODIxMCw1''@;'; put 'put ''ODIxMSw1ODIxMiw1ODIxMyw1ODIxNCw1ODIxNSw1ODIxNiw1ODIxNyw1ODIxOCw1ODIxOSw1ODIyMCw1ODIyMSw1ODIyMiw1ODIyMyw1ODIyNCw1ODIyNSw1ODIyNiw1ODIyNyw1ODIyOCw1ODIyOSw1ODIzMCw1ODIzMSw1ODIzMiw1ODIzMyw1ODIzNCw1ODIzNSw1ODIzNiw1ODIzNyw1ODIz''@;'; put 'put ''OCw1ODIzOSw1ODI0MCw1ODI0MSw1ODI0Miw1ODI0Myw1ODI0NCw1ODI0NSw1ODI0Niw1ODI0Nyw1ODI0OCw1ODI0OSw1ODI1MCw1ODI1MSw1ODI1Miw1ODI1Myw1ODI1NCw1ODI1NSw1ODI1Niw1ODI1Nyw1ODI1OCw1ODI1OSw1ODI2MCw1ODI2MSw1ODI2Miw1ODI2Myw1ODI2NCw1ODI2NSw1''@;'; put 'put ''ODI2Niw1ODI2Nyw1ODI2OCw1ODI2OSw1ODI3MCw1ODI3MSw1ODI3Miw1ODI3Myw1ODI3NCw1ODI3NSw1ODI3Niw1ODI3Nyw1ODI3OCw1ODI3OSw1ODI4MCw1ODI4MSw1ODI4Miw1ODI4Myw0MDYxOSw0MDYyMCw0MDYyMSw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNSw0MDYyNiw0MDYyNyw0MDYy''@;'; put 'put ''OSw0MDYzMCw0MDYzMSw0MDYzMyw0MDYzNCw0MDYzNiw0MDYzOSw0MDY0MCw0MDY0MSw0MDY0Miw0MDY0Myw0MDY0NSw0MDY0Niw0MDY0Nyw0MDY0OCw0MDY1MCw0MDY1MSw0MDY1Miw0MDY1Niw0MDY1OCw0MDY1OSw0MDY2MSw0MDY2Miw0MDY2Myw0MDY2NSw0MDY2Niw0MDY3MCw0MDY3Myw0''@;'; put 'put ''MDY3NSw0MDY3Niw0MDY3OCw0MDY4MCw0MDY4Myw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5MSw0MDY5Miw0MDY5Myw0MDY5NCw0MDY5NSw0MDY5Niw0MDY5OCw0MDcwMSw0MDcwMyw0MDcwNCw0MDcwNSw0MDcwNiw0MDcwNyw0MDcwOCw0MDcwOSw0MDcxMCw0MDcx''@;'; put 'put ''MSw0MDcxMiw0MDcxMyw0MDcxNCw0MDcxNiw0MDcxOSw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNSw0MDcyNiw0MDcyOCw0MDczMCw0MDczMSw0MDczMiw0MDczMyw0MDczNCw0MDczNSw0MDczNyw0MDczOSw0MDc0MCw0MDc0MSw0MDc0Miw0MDc0Myw0MDc0NCw0MDc0NSw0MDc0Niw0MDc0Nyw0''@;'; put 'put ''MDc0OSw0MDc1MCw0MDc1Miw0MDc1Myw1ODI4NCw1ODI4NSw1ODI4Niw1ODI4Nyw1ODI4OCw1ODI4OSw1ODI5MCw1ODI5MSw1ODI5Miw1ODI5Myw1ODI5NCw1ODI5NSw1ODI5Niw1ODI5Nyw1ODI5OCw1ODI5OSw1ODMwMCw1ODMwMSw1ODMwMiw1ODMwMyw1ODMwNCw1ODMwNSw1ODMwNiw1ODMw''@;'; put 'put ''Nyw1ODMwOCw1ODMwOSw1ODMxMCw1ODMxMSw1ODMxMiw1ODMxMyw1ODMxNCw1ODMxNSw1ODMxNiw1ODMxNyw1ODMxOCw1ODMxOSw1ODMyMCw1ODMyMSw1ODMyMiw1ODMyMyw1ODMyNCw1ODMyNSw1ODMyNiw1ODMyNyw1ODMyOCw1ODMyOSw1ODMzMCw1ODMzMSw1ODMzMiw1ODMzMyw1ODMzNCw1''@;'; put 'put ''ODMzNSw1ODMzNiw1ODMzNyw1ODMzOCw1ODMzOSw1ODM0MCw1ODM0MSw1ODM0Miw1ODM0Myw1ODM0NCw1ODM0NSw1ODM0Niw1ODM0Nyw1ODM0OCw1ODM0OSw1ODM1MCw1ODM1MSw1ODM1Miw1ODM1Myw1ODM1NCw1ODM1NSw1ODM1Niw1ODM1Nyw1ODM1OCw1ODM1OSw1ODM2MCw1ODM2MSw1ODM2''@;'; put 'put ''Miw1ODM2Myw1ODM2NCw1ODM2NSw1ODM2Niw1ODM2Nyw1ODM2OCw1ODM2OSw1ODM3MCw1ODM3MSw1ODM3Miw1ODM3Myw1ODM3NCw1ODM3NSw1ODM3Niw1ODM3Nyw0MDc1NCw0MDc1NSw0MDc1Niw0MDc1Nyw0MDc1OCw0MDc2MCw0MDc2Miw0MDc2NCw0MDc2Nyw0MDc2OCw0MDc2OSw0MDc3MCw0''@;'; put 'put ''MDc3MSw0MDc3Myw0MDc3NCw0MDc3NSw0MDc3Niw0MDc3Nyw0MDc3OCw0MDc3OSw0MDc4MCw0MDc4MSw0MDc4Miw0MDc4Myw0MDc4Niw0MDc4Nyw0MDc4OCw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5Myw0MDc5NCw0MDc5NSw0MDc5Niw0MDc5Nyw0MDc5OCw0MDc5OSw0MDgwMCw0MDgw''@;'; put 'put ''MSw0MDgwMiw0MDgwMyw0MDgwNCw0MDgwNSw0MDgwNiw0MDgwNyw0MDgwOCw0MDgwOSw0MDgxMCw0MDgxMSw0MDgxMiw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOCw0MDgxOSw0MDgyMCw0MDgyMSw0MDgyMiw0MDgyMyw0MDgyNCw0MDgyNSw0MDgyNiw0MDgyNyw0MDgyOCw0''@;'; put 'put ''MDgyOSw0MDgzMCw0MDgzMyw0MDgzNCw0MDg0NSw0MDg0Niw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1MSw0MDg1Miw0MDg1Myw0MDg1NCw0MDg1NSw0MDg1Niw0MDg2MCw0MDg2MSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OCw0MDg2OSw2Mzc4OCw2Mzg2NSw2Mzg5Myw2Mzk3''@;'; put 'put ''NSw2Mzk4NSw1ODM3OCw1ODM3OSw1ODM4MCw1ODM4MSw1ODM4Miw1ODM4Myw1ODM4NCw1ODM4NSw1ODM4Niw1ODM4Nyw1ODM4OCw1ODM4OSw1ODM5MCw1ODM5MSw1ODM5Miw1ODM5Myw1ODM5NCw1ODM5NSw1ODM5Niw1ODM5Nyw1ODM5OCw1ODM5OSw1ODQwMCw1ODQwMSw1ODQwMiw1ODQwMyw1''@;'; put 'put ''ODQwNCw1ODQwNSw1ODQwNiw1ODQwNyw1ODQwOCw1ODQwOSw1ODQxMCw1ODQxMSw1ODQxMiw1ODQxMyw1ODQxNCw1ODQxNSw1ODQxNiw1ODQxNyw1ODQxOCw1ODQxOSw1ODQyMCw1ODQyMSw1ODQyMiw1ODQyMyw1ODQyNCw1ODQyNSw1ODQyNiw1ODQyNyw1ODQyOCw1ODQyOSw1ODQzMCw1ODQz''@;'; put 'put ''MSw1ODQzMiw1ODQzMyw1ODQzNCw1ODQzNSw1ODQzNiw1ODQzNyw1ODQzOCw1ODQzOSw1ODQ0MCw1ODQ0MSw1ODQ0Miw1ODQ0Myw1ODQ0NCw1ODQ0NSw1ODQ0Niw1ODQ0Nyw1ODQ0OCw1ODQ0OSw1ODQ1MCw1ODQ1MSw1ODQ1Miw1ODQ1Myw1ODQ1NCw1ODQ1NSw1ODQ1Niw1ODQ1Nyw1ODQ1OCw1''@;'; put 'put ''ODQ1OSw1ODQ2MCw1ODQ2MSw1ODQ2Miw1ODQ2Myw1ODQ2NCw1ODQ2NSw1ODQ2Niw1ODQ2Nyw1ODQ2OCw1ODQ2OSw1ODQ3MCw1ODQ3MSw2NDAxMiw2NDAxMyw2NDAxNCw2NDAxNSw2NDAxNyw2NDAxOSw2NDAyMCw2NDAyNCw2NDAzMSw2NDAzMiw2NDAzMyw2NDAzNSw2NDAzNiw2NDAzOSw2NDA0''@;'; put 'put ''MCw2NDA0MSwxMTkwNSw1OTQxNCw1OTQxNSw1OTQxNiwxMTkwOCwxMzQyNywxMzM4MywxMTkxMiwxMTkxNSw1OTQyMiwxMzcyNiwxMzg1MCwxMzgzOCwxMTkxNiwxMTkyNywxNDcwMiwxNDYxNiw1OTQzMCwxNDc5OSwxNDgxNSwxNDk2MywxNDgwMCw1OTQzNSw1OTQzNiwxNTE4MiwxNTQ3MCwx''@;'; put 'put ''NTU4NCwxMTk0Myw1OTQ0MSw1OTQ0MiwxMTk0NiwxNjQ3MCwxNjczNSwxMTk1MCwxNzIwNywxMTk1NSwxMTk1OCwxMTk1OSw1OTQ1MSwxNzMyOSwxNzMyNCwxMTk2MywxNzM3MywxNzYyMiwxODAxNywxNzk5Niw1OTQ1OSwxODIxMSwxODIxNywxODMwMCwxODMxNywxMTk3OCwxODc1OSwxODgx''@;'; put 'put ''MCwxODgxMywxODgxOCwxODgxOSwxODgyMSwxODgyMiwxODg0NywxODg0MywxODg3MSwxODg3MCw1OTQ3Niw1OTQ3NywxOTYxOSwxOTYxNSwxOTYxNiwxOTYxNywxOTU3NSwxOTYxOCwxOTczMSwxOTczMiwxOTczMywxOTczNCwxOTczNSwxOTczNiwxOTczNywxOTg4Niw1OTQ5Miw1ODQ3Miw1''@;'; put 'put ''ODQ3Myw1ODQ3NCw1ODQ3NSw1ODQ3Niw1ODQ3Nyw1ODQ3OCw1ODQ3OSw1ODQ4MCw1ODQ4MSw1ODQ4Miw1ODQ4Myw1ODQ4NCw1ODQ4NSw1ODQ4Niw1ODQ4Nyw1ODQ4OCw1ODQ4OSw1ODQ5MCw1ODQ5MSw1ODQ5Miw1ODQ5Myw1ODQ5NCw1ODQ5NSw1ODQ5Niw1ODQ5Nyw1ODQ5OCw1ODQ5OSw1ODUw''@;'; put 'put ''MCw1ODUwMSw1ODUwMiw1ODUwMyw1ODUwNCw1ODUwNSw1ODUwNiw1ODUwNyw1ODUwOCw1ODUwOSw1ODUxMCw1ODUxMSw1ODUxMiw1ODUxMyw1ODUxNCw1ODUxNSw1ODUxNiw1ODUxNyw1ODUxOCw1ODUxOSw1ODUyMCw1ODUyMSw1ODUyMiw1ODUyMyw1ODUyNCw1ODUyNSw1ODUyNiw1ODUyNyw1''@;'; put 'put ''ODUyOCw1ODUyOSw1ODUzMCw1ODUzMSw1ODUzMiw1ODUzMyw1ODUzNCw1ODUzNSw1ODUzNiw1ODUzNyw1ODUzOCw1ODUzOSw1ODU0MCw1ODU0MSw1ODU0Miw1ODU0Myw1ODU0NCw1ODU0NSw1ODU0Niw1ODU0Nyw1ODU0OCw1ODU0OSw1ODU1MCw1ODU1MSw1ODU1Miw1ODU1Myw1ODU1NCw1ODU1''@;'; put 'put ''NSw1ODU1Niw1ODU1Nyw1ODU1OCw1ODU1OSw1ODU2MCw1ODU2MSw1ODU2Miw1ODU2Myw1ODU2NCw1ODU2NV0sImdiMTgwMzAtcmFuZ2VzIjpbWzAsMTI4XSxbMzYsMTY1XSxbMzgsMTY5XSxbNDUsMTc4XSxbNTAsMTg0XSxbODEsMjE2XSxbODksMjI2XSxbOTUsMjM1XSxbOTYsMjM4XSxbMTAw''@;'; put 'put ''LDI0NF0sWzEwMywyNDhdLFsxMDQsMjUxXSxbMTA1LDI1M10sWzEwOSwyNThdLFsxMjYsMjc2XSxbMTMzLDI4NF0sWzE0OCwzMDBdLFsxNzIsMzI1XSxbMTc1LDMyOV0sWzE3OSwzMzRdLFsyMDgsMzY0XSxbMzA2LDQ2M10sWzMwNyw0NjVdLFszMDgsNDY3XSxbMzA5LDQ2OV0sWzMxMCw0NzFd''@;'; put 'put ''LFszMTEsNDczXSxbMzEyLDQ3NV0sWzMxMyw0NzddLFszNDEsNTA2XSxbNDI4LDU5NF0sWzQ0Myw2MTBdLFs1NDQsNzEyXSxbNTQ1LDcxNl0sWzU1OCw3MzBdLFs3NDEsOTMwXSxbNzQyLDkzOF0sWzc0OSw5NjJdLFs3NTAsOTcwXSxbODA1LDEwMjZdLFs4MTksMTEwNF0sWzgyMCwxMTA2XSxb''@;'; put 'put ''NzkyMiw4MjA5XSxbNzkyNCw4MjE1XSxbNzkyNSw4MjE4XSxbNzkyNyw4MjIyXSxbNzkzNCw4MjMxXSxbNzk0Myw4MjQxXSxbNzk0NCw4MjQ0XSxbNzk0NSw4MjQ2XSxbNzk1MCw4MjUyXSxbODA2Miw4MzY1XSxbODE0OCw4NDUyXSxbODE0OSw4NDU0XSxbODE1Miw4NDU4XSxbODE2NCw4NDcx''@;'; put 'put ''XSxbODE3NCw4NDgyXSxbODIzNiw4NTU2XSxbODI0MCw4NTcwXSxbODI2Miw4NTk2XSxbODI2NCw4NjAyXSxbODM3NCw4NzEzXSxbODM4MCw4NzIwXSxbODM4MSw4NzIyXSxbODM4NCw4NzI2XSxbODM4OCw4NzMxXSxbODM5MCw4NzM3XSxbODM5Miw4NzQwXSxbODM5Myw4NzQyXSxbODM5NCw4''@;'; put 'put ''NzQ4XSxbODM5Niw4NzUxXSxbODQwMSw4NzYwXSxbODQwNiw4NzY2XSxbODQxNiw4Nzc3XSxbODQxOSw4NzgxXSxbODQyNCw4Nzg3XSxbODQzNyw4ODAyXSxbODQzOSw4ODA4XSxbODQ0NSw4ODE2XSxbODQ4Miw4ODU0XSxbODQ4NSw4ODU4XSxbODQ5Niw4ODcwXSxbODUyMSw4ODk2XSxbODYw''@;'; put 'put ''Myw4OTc5XSxbODkzNiw5MzIyXSxbODk0Niw5MzcyXSxbOTA0Niw5NTQ4XSxbOTA1MCw5NTg4XSxbOTA2Myw5NjE2XSxbOTA2Niw5NjIyXSxbOTA3Niw5NjM0XSxbOTA5Miw5NjUyXSxbOTEwMCw5NjYyXSxbOTEwOCw5NjcyXSxbOTExMSw5Njc2XSxbOTExMyw5NjgwXSxbOTEzMSw5NzAyXSxb''@;'; put 'put ''OTE2Miw5NzM1XSxbOTE2NCw5NzM4XSxbOTIxOCw5NzkzXSxbOTIxOSw5Nzk1XSxbMTEzMjksMTE5MDZdLFsxMTMzMSwxMTkwOV0sWzExMzM0LDExOTEzXSxbMTEzMzYsMTE5MTddLFsxMTM0NiwxMTkyOF0sWzExMzYxLDExOTQ0XSxbMTEzNjMsMTE5NDddLFsxMTM2NiwxMTk1MV0sWzExMzcw''@;'; put 'put ''LDExOTU2XSxbMTEzNzIsMTE5NjBdLFsxMTM3NSwxMTk2NF0sWzExMzg5LDExOTc5XSxbMTE2ODIsMTIyODRdLFsxMTY4NiwxMjI5Ml0sWzExNjg3LDEyMzEyXSxbMTE2OTIsMTIzMTldLFsxMTY5NCwxMjMzMF0sWzExNzE0LDEyMzUxXSxbMTE3MTYsMTI0MzZdLFsxMTcyMywxMjQ0N10sWzEx''@;'; put 'put ''NzI1LDEyNTM1XSxbMTE3MzAsMTI1NDNdLFsxMTczNiwxMjU4Nl0sWzExOTgyLDEyODQyXSxbMTE5ODksMTI4NTBdLFsxMjEwMiwxMjk2NF0sWzEyMzM2LDEzMjAwXSxbMTIzNDgsMTMyMTVdLFsxMjM1MCwxMzIxOF0sWzEyMzg0LDEzMjUzXSxbMTIzOTMsMTMyNjNdLFsxMjM5NSwxMzI2N10s''@;'; put 'put ''WzEyMzk3LDEzMjcwXSxbMTI1MTAsMTMzODRdLFsxMjU1MywxMzQyOF0sWzEyODUxLDEzNzI3XSxbMTI5NjIsMTM4MzldLFsxMjk3MywxMzg1MV0sWzEzNzM4LDE0NjE3XSxbMTM4MjMsMTQ3MDNdLFsxMzkxOSwxNDgwMV0sWzEzOTMzLDE0ODE2XSxbMTQwODAsMTQ5NjRdLFsxNDI5OCwxNTE4''@;'; put 'put ''M10sWzE0NTg1LDE1NDcxXSxbMTQ2OTgsMTU1ODVdLFsxNTU4MywxNjQ3MV0sWzE1ODQ3LDE2NzM2XSxbMTYzMTgsMTcyMDhdLFsxNjQzNCwxNzMyNV0sWzE2NDM4LDE3MzMwXSxbMTY0ODEsMTczNzRdLFsxNjcyOSwxNzYyM10sWzE3MTAyLDE3OTk3XSxbMTcxMjIsMTgwMThdLFsxNzMxNSwx''@;'; put 'put ''ODIxMl0sWzE3MzIwLDE4MjE4XSxbMTc0MDIsMTgzMDFdLFsxNzQxOCwxODMxOF0sWzE3ODU5LDE4NzYwXSxbMTc5MDksMTg4MTFdLFsxNzkxMSwxODgxNF0sWzE3OTE1LDE4ODIwXSxbMTc5MTYsMTg4MjNdLFsxNzkzNiwxODg0NF0sWzE3OTM5LDE4ODQ4XSxbMTc5NjEsMTg4NzJdLFsxODY2''@;'; put 'put ''NCwxOTU3Nl0sWzE4NzAzLDE5NjIwXSxbMTg4MTQsMTk3MzhdLFsxODk2MiwxOTg4N10sWzE5MDQzLDQwODcwXSxbMzM0NjksNTkyNDRdLFszMzQ3MCw1OTMzNl0sWzMzNDcxLDU5MzY3XSxbMzM0ODQsNTk0MTNdLFszMzQ4NSw1OTQxN10sWzMzNDkwLDU5NDIzXSxbMzM0OTcsNTk0MzFdLFsz''@;'; put 'put ''MzUwMSw1OTQzN10sWzMzNTA1LDU5NDQzXSxbMzM1MTMsNTk0NTJdLFszMzUyMCw1OTQ2MF0sWzMzNTM2LDU5NDc4XSxbMzM1NTAsNTk0OTNdLFszNzg0NSw2Mzc4OV0sWzM3OTIxLDYzODY2XSxbMzc5NDgsNjM4OTRdLFszODAyOSw2Mzk3Nl0sWzM4MDM4LDYzOTg2XSxbMzgwNjQsNjQwMTZd''@;'; put 'put ''LFszODA2NSw2NDAxOF0sWzM4MDY2LDY0MDIxXSxbMzgwNjksNjQwMjVdLFszODA3NSw2NDAzNF0sWzM4MDc2LDY0MDM3XSxbMzgwNzgsNjQwNDJdLFszOTEwOCw2NTA3NF0sWzM5MTA5LDY1MDkzXSxbMzkxMTMsNjUxMDddLFszOTExNCw2NTExMl0sWzM5MTE1LDY1MTI3XSxbMzkxMTYsNjUx''@;'; put 'put ''MzJdLFszOTI2NSw2NTM3NV0sWzM5Mzk0LDY1NTEwXSxbMTg5ZTMsNjU1MzZdXSxqaXMwMjA4OlsxMjI4OCwxMjI4OSwxMjI5MCw2NTI5Miw2NTI5NCwxMjUzOSw2NTMwNiw2NTMwNyw2NTMxMSw2NTI4MSwxMjQ0MywxMjQ0NCwxODAsNjUzNDQsMTY4LDY1MzQyLDY1NTA3LDY1MzQzLDEyNTQx''@;'; put 'put ''LDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDgyMTMsODIwOCw2NTI5NSw2NTM0MCw2NTM3NCw4NzQxLDY1MzcyLDgyMzAsODIyOSw4MjE2LDgyMTcsODIyMCw4MjIxLDY1Mjg4LDY1Mjg5LDEyMzA4LDEyMzA5LDY1MzM5LDY1MzQxLDY1Mzcx''@;'; put 'put ''LDY1MzczLDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDY1MjkxLDY1MjkzLDE3NywyMTUsMjQ3LDY1MzA5LDg4MDAsNjUzMDgsNjUzMTAsODgwNiw4ODA3LDg3MzQsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1''@;'; put 'put ''NTA5LDY1Mjg0LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MjgzLDY1Mjg2LDY1MjkwLDY1MzEyLDE2Nyw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDgyNTEsMTIzMDYsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzQzLDg3NDQsNjU1MDYsODY1OCw4NjYwLDg3MDQsODcwNyxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4Niw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4''@;'; put 'put ''NDkxLDgyNDAsOTgzOSw5ODM3LDk4MzQsODIyNCw4MjI1LDE4MixudWxsLG51bGwsbnVsbCxudWxsLDk3MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUz''@;'; put 'put ''MDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2''@;'; put 'put ''NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1''@;'; put 'put ''Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCxudWxsLG51bGwsbnVsbCxudWxsLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYz''@;'; put 'put ''LDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEy''@;'; put 'put ''MzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4''@;'; put 'put ''LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjQ0OSwx''@;'; put 'put ''MjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3''@;'; put 'put ''NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwx''@;'; put 'put ''MjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUz''@;'; put 'put ''MiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDQwLDEwNDEsMTA0MiwxMDQz''@;'; put 'put ''LDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDky''@;'; put 'put ''LDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4''@;'; put 'put ''LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MzEy''@;'; put 'put ''LDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgsOTMyOSw5MzMwLDkzMzEsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLDEzMTI5LDEzMDc2LDEz''@;'; put 'put ''MDkwLDEzMTMzLDEzMDgwLDEzMDk1LDEzMDU5LDEzMTEwLDEzMTM3LDEzMTQzLDEzMDY5LDEzMDk0LDEzMDkxLDEzMDk5LDEzMTMwLDEzMTE1LDEzMjEyLDEzMjEzLDEzMjE0LDEzMTk4LDEzMTk5LDEzMjUyLDEzMjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwx''@;'; put 'put ''MzE3OSwxMjMxNywxMjMxOSw4NDcwLDEzMjYxLDg0ODEsMTI5NjQsMTI5NjUsMTI5NjYsMTI5NjcsMTI5NjgsMTI4NDksMTI4NTAsMTI4NTcsMTMxODIsMTMxODEsMTMxODAsODc4Niw4ODAxLDg3NDcsODc1MCw4NzIxLDg3MzAsODg2OSw4NzM2LDg3MzUsODg5NSw4NzU3LDg3NDUsODc0Nixu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMTI0LDIxNzgyLDIzMDQzLDM4NDYzLDIxNjk2LDI0ODU5LDI1Mzg0''@;'; put 'put ''LDIzMDMwLDM2ODk4LDMzOTA5LDMzNTY0LDMxMzEyLDI0NzQ2LDI1NTY5LDI4MTk3LDI2MDkzLDMzODk0LDMzNDQ2LDM5OTI1LDI2NzcxLDIyMzExLDI2MDE3LDI1MjAxLDIzNDUxLDIyOTkyLDM0NDI3LDM5MTU2LDMyMDk4LDMyMTkwLDM5ODIyLDI1MTEwLDMxOTAzLDM0OTk5LDIzNDMzLDI0''@;'; put 'put ''MjQ1LDI1MzUzLDI2MjYzLDI2Njk2LDM4MzQzLDM4Nzk3LDI2NDQ3LDIwMTk3LDIwMjM0LDIwMzAxLDIwMzgxLDIwNTUzLDIyMjU4LDIyODM5LDIyOTk2LDIzMDQxLDIzNTYxLDI0Nzk5LDI0ODQ3LDI0OTQ0LDI2MTMxLDI2ODg1LDI4ODU4LDMwMDMxLDMwMDY0LDMxMjI3LDMyMTczLDMyMjM5''@;'; put 'put ''LDMyOTYzLDMzODA2LDM0OTE1LDM1NTg2LDM2OTQ5LDM2OTg2LDIxMzA3LDIwMTE3LDIwMTMzLDIyNDk1LDMyOTQ2LDM3MDU3LDMwOTU5LDE5OTY4LDIyNzY5LDI4MzIyLDM2OTIwLDMxMjgyLDMzNTc2LDMzNDE5LDM5OTgzLDIwODAxLDIxMzYwLDIxNjkzLDIxNzI5LDIyMjQwLDIzMDM1LDI0''@;'; put 'put ''MzQxLDM5MTU0LDI4MTM5LDMyOTk2LDM0MDkzLDM4NDk4LDM4NTEyLDM4NTYwLDM4OTA3LDIxNTE1LDIxNDkxLDIzNDMxLDI4ODc5LDMyNzAxLDM2ODAyLDM4NjMyLDIxMzU5LDQwMjg0LDMxNDE4LDE5OTg1LDMwODY3LDMzMjc2LDI4MTk4LDIyMDQwLDIxNzY0LDI3NDIxLDM0MDc0LDM5OTk1''@;'; put 'put ''LDIzMDEzLDIxNDE3LDI4MDA2LDI5OTE2LDM4Mjg3LDIyMDgyLDIwMTEzLDM2OTM5LDM4NjQyLDMzNjE1LDM5MTgwLDIxNDczLDIxOTQyLDIzMzQ0LDI0NDMzLDI2MTQ0LDI2MzU1LDI2NjI4LDI3NzA0LDI3ODkxLDI3OTQ1LDI5Nzg3LDMwNDA4LDMxMzEwLDM4OTY0LDMzNTIxLDM0OTA3LDM1''@;'; put 'put ''NDI0LDM3NjEzLDI4MDgyLDMwMTIzLDMwNDEwLDM5MzY1LDI0NzQyLDM1NTg1LDM2MjM0LDM4MzIyLDI3MDIyLDIxNDIxLDIwODcwLDIyMjkwLDIyNTc2LDIyODUyLDIzNDc2LDI0MzEwLDI0NjE2LDI1NTEzLDI1NTg4LDI3ODM5LDI4NDM2LDI4ODE0LDI4OTQ4LDI5MDE3LDI5MTQxLDI5NTAz''@;'; put 'put ''LDMyMjU3LDMzMzk4LDMzNDg5LDM0MTk5LDM2OTYwLDM3NDY3LDQwMjE5LDIyNjMzLDI2MDQ0LDI3NzM4LDI5OTg5LDIwOTg1LDIyODMwLDIyODg1LDI0NDQ4LDI0NTQwLDI1Mjc2LDI2MTA2LDI3MTc4LDI3NDMxLDI3NTcyLDI5NTc5LDMyNzA1LDM1MTU4LDQwMjM2LDQwMjA2LDQwNjQ0LDIz''@;'; put 'put ''NzEzLDI3Nzk4LDMzNjU5LDIwNzQwLDIzNjI3LDI1MDE0LDMzMjIyLDI2NzQyLDI5MjgxLDIwMDU3LDIwNDc0LDIxMzY4LDI0NjgxLDI4MjAxLDMxMzExLDM4ODk5LDE5OTc5LDIxMjcwLDIwMjA2LDIwMzA5LDIwMjg1LDIwMzg1LDIwMzM5LDIxMTUyLDIxNDg3LDIyMDI1LDIyNzk5LDIzMjMz''@;'; put 'put ''LDIzNDc4LDIzNTIxLDMxMTg1LDI2MjQ3LDI2NTI0LDI2NTUwLDI3NDY4LDI3ODI3LDI4Nzc5LDI5NjM0LDMxMTE3LDMxMTY2LDMxMjkyLDMxNjIzLDMzNDU3LDMzNDk5LDMzNTQwLDMzNjU1LDMzNzc1LDMzNzQ3LDM0NjYyLDM1NTA2LDIyMDU3LDM2MDA4LDM2ODM4LDM2OTQyLDM4Njg2LDM0''@;'; put 'put ''NDQyLDIwNDIwLDIzNzg0LDI1MTA1LDI5MjczLDMwMDExLDMzMjUzLDMzNDY5LDM0NTU4LDM2MDMyLDM4NTk3LDM5MTg3LDM5MzgxLDIwMTcxLDIwMjUwLDM1Mjk5LDIyMjM4LDIyNjAyLDIyNzMwLDI0MzE1LDI0NTU1LDI0NjE4LDI0NzI0LDI0Njc0LDI1MDQwLDI1MTA2LDI1Mjk2LDI1OTEz''@;'; put 'put ''LDM5NzQ1LDI2MjE0LDI2ODAwLDI4MDIzLDI4Nzg0LDMwMDI4LDMwMzQyLDMyMTE3LDMzNDQ1LDM0ODA5LDM4MjgzLDM4NTQyLDM1OTk3LDIwOTc3LDIxMTgyLDIyODA2LDIxNjgzLDIzNDc1LDIzODMwLDI0OTM2LDI3MDEwLDI4MDc5LDMwODYxLDMzOTk1LDM0OTAzLDM1NDQyLDM3Nzk5LDM5''@;'; put 'put ''NjA4LDI4MDEyLDM5MzM2LDM0NTIxLDIyNDM1LDI2NjIzLDM0NTEwLDM3MzkwLDIxMTIzLDIyMTUxLDIxNTA4LDI0Mjc1LDI1MzEzLDI1Nzg1LDI2Njg0LDI2NjgwLDI3NTc5LDI5NTU0LDMwOTA2LDMxMzM5LDM1MjI2LDM1MjgyLDM2MjAzLDM2NjExLDM3MTAxLDM4MzA3LDM4NTQ4LDM4NzYx''@;'; put 'put ''LDIzMzk4LDIzNzMxLDI3MDA1LDM4OTg5LDM4OTkwLDI1NDk5LDMxNTIwLDI3MTc5LDI3MjYzLDI2ODA2LDM5OTQ5LDI4NTExLDIxMTA2LDIxOTE3LDI0Njg4LDI1MzI0LDI3OTYzLDI4MTY3LDI4MzY5LDMzODgzLDM1MDg4LDM2Njc2LDE5OTg4LDM5OTkzLDIxNDk0LDI2OTA3LDI3MTk0LDM4''@;'; put 'put ''Nzg4LDI2NjY2LDIwODI4LDMxNDI3LDMzOTcwLDM3MzQwLDM3NzcyLDIyMTA3LDQwMjMyLDI2NjU4LDMzNTQxLDMzODQxLDMxOTA5LDIxZTMsMzM0NzcsMjk5MjYsMjAwOTQsMjAzNTUsMjA4OTYsMjM1MDYsMjEwMDIsMjEyMDgsMjEyMjMsMjQwNTksMjE5MTQsMjI1NzAsMjMwMTQsMjM0MzYs''@;'; put 'put ''MjM0NDgsMjM1MTUsMjQxNzgsMjQxODUsMjQ3MzksMjQ4NjMsMjQ5MzEsMjUwMjIsMjU1NjMsMjU5NTQsMjY1NzcsMjY3MDcsMjY4NzQsMjc0NTQsMjc0NzUsMjc3MzUsMjg0NTAsMjg1NjcsMjg0ODUsMjk4NzIsMjk5NzYsMzA0MzUsMzA0NzUsMzE0ODcsMzE2NDksMzE3NzcsMzIyMzMsMzI1''@;'; put 'put ''NjYsMzI3NTIsMzI5MjUsMzMzODIsMzM2OTQsMzUyNTEsMzU1MzIsMzYwMTEsMzY5OTYsMzc5NjksMzgyOTEsMzgyODksMzgzMDYsMzg1MDEsMzg4NjcsMzkyMDgsMzMzMDQsMjAwMjQsMjE1NDcsMjM3MzYsMjQwMTIsMjk2MDksMzAyODQsMzA1MjQsMjM3MjEsMzI3NDcsMzYxMDcsMzg1OTMs''@;'; put 'put ''Mzg5MjksMzg5OTYsMzllMywyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3''@;'; put 'put ''MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMmUzLDI0NTA5LDM1MjE1LDM1MzUyLDM2MDIwLDM2MjE1LDM2NTU2LDM2NjM3LDM5MTM4LDM5NDM4LDM5NzQwLDIwMDk2LDIwNjA1LDIwNzM2LDIyOTMxLDIzNDUyLDI1MTM1LDI1MjE2LDI1ODM2LDI3NDUwLDI5MzQ0LDMwMDk3LDMxMDQ3LDMy''@;'; put 'put ''NjgxLDM0ODExLDM1NTE2LDM1Njk2LDI1NTE2LDMzNzM4LDM4ODE2LDIxNTEzLDIxNTA3LDIxOTMxLDI2NzA4LDI3MjI0LDM1NDQwLDMwNzU5LDI2NDg1LDQwNjUzLDIxMzY0LDIzNDU4LDMzMDUwLDM0Mzg0LDM2ODcwLDE5OTkyLDIwMDM3LDIwMTY3LDIwMjQxLDIxNDUwLDIxNTYwLDIzNDcw''@;'; put 'put ''LDI0MzM5LDI0NjEzLDI1OTM3LDI2NDI5LDI3NzE0LDI3NzYyLDI3ODc1LDI4NzkyLDI5Njk5LDMxMzUwLDMxNDA2LDMxNDk2LDMyMDI2LDMxOTk4LDMyMTAyLDI2MDg3LDI5Mjc1LDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1MzEyLDI1MzY5LDI4MTkyLDM0Mzk0LDM1Mzc3LDM2MzE3LDM3''@;'; put 'put ''NjI0LDI4NDE3LDMxMTQyLDM5NzcwLDIwMTM2LDIwMTM5LDIwMTQwLDIwMzc5LDIwMzg0LDIwNjg5LDIwODA3LDMxNDc4LDIwODQ5LDIwOTgyLDIxMzMyLDIxMjgxLDIxMzc1LDIxNDgzLDIxOTMyLDIyNjU5LDIzNzc3LDI0Mzc1LDI0Mzk0LDI0NjIzLDI0NjU2LDI0Njg1LDI1Mzc1LDI1OTQ1''@;'; put 'put ''LDI3MjExLDI3ODQxLDI5Mzc4LDI5NDIxLDMwNzAzLDMzMDE2LDMzMDI5LDMzMjg4LDM0MTI2LDM3MTExLDM3ODU3LDM4OTExLDM5MjU1LDM5NTE0LDIwMjA4LDIwOTU3LDIzNTk3LDI2MjQxLDI2OTg5LDIzNjE2LDI2MzU0LDI2OTk3LDI5NTc3LDI2NzA0LDMxODczLDIwNjc3LDIxMjIwLDIy''@;'; put 'put ''MzQzLDI0MDYyLDM3NjcwLDI2MDIwLDI3NDI3LDI3NDUzLDI5NzQ4LDMxMTA1LDMxMTY1LDMxNTYzLDMyMjAyLDMzNDY1LDMzNzQwLDM0OTQzLDM1MTY3LDM1NjQxLDM2ODE3LDM3MzI5LDIxNTM1LDM3NTA0LDIwMDYxLDIwNTM0LDIxNDc3LDIxMzA2LDI5Mzk5LDI5NTkwLDMwNjk3LDMzNTEw''@;'; put 'put ''LDM2NTI3LDM5MzY2LDM5MzY4LDM5Mzc4LDIwODU1LDI0ODU4LDM0Mzk4LDIxOTM2LDMxMzU0LDIwNTk4LDIzNTA3LDM2OTM1LDM4NTMzLDIwMDE4LDI3MzU1LDM3MzUxLDIzNjMzLDIzNjI0LDI1NDk2LDMxMzkxLDI3Nzk1LDM4NzcyLDM2NzA1LDMxNDAyLDI5MDY2LDM4NTM2LDMxODc0LDI2''@;'; put 'put ''NjQ3LDMyMzY4LDI2NzA1LDM3NzQwLDIxMjM0LDIxNTMxLDM0MjE5LDM1MzQ3LDMyNjc2LDM2NTU3LDM3MDg5LDIxMzUwLDM0OTUyLDMxMDQxLDIwNDE4LDIwNjcwLDIxMDA5LDIwODA0LDIxODQzLDIyMzE3LDI5Njc0LDIyNDExLDIyODY1LDI0NDE4LDI0NDUyLDI0NjkzLDI0OTUwLDI0OTM1''@;'; put 'put ''LDI1MDAxLDI1NTIyLDI1NjU4LDI1OTY0LDI2MjIzLDI2NjkwLDI4MTc5LDMwMDU0LDMxMjkzLDMxOTk1LDMyMDc2LDMyMTUzLDMyMzMxLDMyNjE5LDMzNTUwLDMzNjEwLDM0NTA5LDM1MzM2LDM1NDI3LDM1Njg2LDM2NjA1LDM4OTM4LDQwMzM1LDMzNDY0LDM2ODE0LDM5OTEyLDIxMTI3LDI1''@;'; put 'put ''MTE5LDI1NzMxLDI4NjA4LDM4NTUzLDI2Njg5LDIwNjI1LDI3NDI0LDI3NzcwLDI4NTAwLDMxMzQ4LDMyMDgwLDM0ODgwLDM1MzYzLDI2Mzc2LDIwMjE0LDIwNTM3LDIwNTE4LDIwNTgxLDIwODYwLDIxMDQ4LDIxMDkxLDIxOTI3LDIyMjg3LDIyNTMzLDIzMjQ0LDI0MzE0LDI1MDEwLDI1MDgw''@;'; put 'put ''LDI1MzMxLDI1NDU4LDI2OTA4LDI3MTc3LDI5MzA5LDI5MzU2LDI5NDg2LDMwNzQwLDMwODMxLDMyMTIxLDMwNDc2LDMyOTM3LDM1MjExLDM1NjA5LDM2MDY2LDM2NTYyLDM2OTYzLDM3NzQ5LDM4NTIyLDM4OTk3LDM5NDQzLDQwNTY4LDIwODAzLDIxNDA3LDIxNDI3LDI0MTg3LDI0MzU4LDI4''@;'; put 'put ''MTg3LDI4MzA0LDI5NTcyLDI5Njk0LDMyMDY3LDMzMzM1LDM1MzI4LDM1NTc4LDM4NDgwLDIwMDQ2LDIwNDkxLDIxNDc2LDIxNjI4LDIyMjY2LDIyOTkzLDIzMzk2LDI0MDQ5LDI0MjM1LDI0MzU5LDI1MTQ0LDI1OTI1LDI2NTQzLDI4MjQ2LDI5MzkyLDMxOTQ2LDM0OTk2LDMyOTI5LDMyOTkz''@;'; put 'put ''LDMzNzc2LDM0MzgyLDM1NDYzLDM2MzI4LDM3NDMxLDM4NTk5LDM5MDE1LDQwNzIzLDIwMTE2LDIwMTE0LDIwMjM3LDIxMzIwLDIxNTc3LDIxNTY2LDIzMDg3LDI0NDYwLDI0NDgxLDI0NzM1LDI2NzkxLDI3Mjc4LDI5Nzg2LDMwODQ5LDM1NDg2LDM1NDkyLDM1NzAzLDM3MjY0LDIwMDYyLDM5''@;'; put 'put ''ODgxLDIwMTMyLDIwMzQ4LDIwMzk5LDIwNTA1LDIwNTAyLDIwODA5LDIwODQ0LDIxMTUxLDIxMTc3LDIxMjQ2LDIxNDAyLDIxNDc1LDIxNTIxLDIxNTE4LDIxODk3LDIyMzUzLDIyNDM0LDIyOTA5LDIzMzgwLDIzMzg5LDIzNDM5LDI0MDM3LDI0MDM5LDI0MDU1LDI0MTg0LDI0MTk1LDI0MjE4''@;'; put 'put ''LDI0MjQ3LDI0MzQ0LDI0NjU4LDI0OTA4LDI1MjM5LDI1MzA0LDI1NTExLDI1OTE1LDI2MTE0LDI2MTc5LDI2MzU2LDI2NDc3LDI2NjU3LDI2Nzc1LDI3MDgzLDI3NzQzLDI3OTQ2LDI4MDA5LDI4MjA3LDI4MzE3LDMwMDAyLDMwMzQzLDMwODI4LDMxMjk1LDMxOTY4LDMyMDA1LDMyMDI0LDMy''@;'; put 'put ''MDk0LDMyMTc3LDMyNzg5LDMyNzcxLDMyOTQzLDMyOTQ1LDMzMTA4LDMzMTY3LDMzMzIyLDMzNjE4LDM0ODkyLDM0OTEzLDM1NjExLDM2MDAyLDM2MDkyLDM3MDY2LDM3MjM3LDM3NDg5LDMwNzgzLDM3NjI4LDM4MzA4LDM4NDc3LDM4OTE3LDM5MzIxLDM5NjQwLDQwMjUxLDIxMDgzLDIxMTYz''@;'; put 'put ''LDIxNDk1LDIxNTEyLDIyNzQxLDI1MzM1LDI4NjQwLDM1OTQ2LDM2NzAzLDQwNjMzLDIwODExLDIxMDUxLDIxNTc4LDIyMjY5LDMxMjk2LDM3MjM5LDQwMjg4LDQwNjU4LDI5NTA4LDI4NDI1LDMzMTM2LDI5OTY5LDI0NTczLDI0Nzk0LDM5NTkyLDI5NDAzLDM2Nzk2LDI3NDkyLDM4OTE1LDIw''@;'; put 'put ''MTcwLDIyMjU2LDIyMzcyLDIyNzE4LDIzMTMwLDI0NjgwLDI1MDMxLDI2MTI3LDI2MTE4LDI2NjgxLDI2ODAxLDI4MTUxLDMwMTY1LDMyMDU4LDMzMzkwLDM5NzQ2LDIwMTIzLDIwMzA0LDIxNDQ5LDIxNzY2LDIzOTE5LDI0MDM4LDI0MDQ2LDI2NjE5LDI3ODAxLDI5ODExLDMwNzIyLDM1NDA4''@;'; put 'put ''LDM3NzgyLDM1MDM5LDIyMzUyLDI0MjMxLDI1Mzg3LDIwNjYxLDIwNjUyLDIwODc3LDI2MzY4LDIxNzA1LDIyNjIyLDIyOTcxLDIzNDcyLDI0NDI1LDI1MTY1LDI1NTA1LDI2Njg1LDI3NTA3LDI4MTY4LDI4Nzk3LDM3MzE5LDI5MzEyLDMwNzQxLDMwNzU4LDMxMDg1LDI1OTk4LDMyMDQ4LDMz''@;'; put 'put ''NzU2LDM1MDA5LDM2NjE3LDM4NTU1LDIxMDkyLDIyMzEyLDI2NDQ4LDMyNjE4LDM2MDAxLDIwOTE2LDIyMzM4LDM4NDQyLDIyNTg2LDI3MDE4LDMyOTQ4LDIxNjgyLDIzODIyLDIyNTI0LDMwODY5LDQwNDQyLDIwMzE2LDIxMDY2LDIxNjQzLDI1NjYyLDI2MTUyLDI2Mzg4LDI2NjEzLDMxMzY0''@;'; put 'put ''LDMxNTc0LDMyMDM0LDM3Njc5LDI2NzE2LDM5ODUzLDMxNTQ1LDIxMjczLDIwODc0LDIxMDQ3LDIzNTE5LDI1MzM0LDI1Nzc0LDI1ODMwLDI2NDEzLDI3NTc4LDM0MjE3LDM4NjA5LDMwMzUyLDM5ODk0LDI1NDIwLDM3NjM4LDM5ODUxLDMwMzk5LDI2MTk0LDE5OTc3LDIwNjMyLDIxNDQyLDIz''@;'; put 'put ''NjY1LDI0ODA4LDI1NzQ2LDI1OTU1LDI2NzE5LDI5MTU4LDI5NjQyLDI5OTg3LDMxNjM5LDMyMzg2LDM0NDUzLDM1NzE1LDM2MDU5LDM3MjQwLDM5MTg0LDI2MDI4LDI2MjgzLDI3NTMxLDIwMTgxLDIwMTgwLDIwMjgyLDIwMzUxLDIxMDUwLDIxNDk2LDIxNDkwLDIxOTg3LDIyMjM1LDIyNzYz''@;'; put 'put ''LDIyOTg3LDIyOTg1LDIzMDM5LDIzMzc2LDIzNjI5LDI0MDY2LDI0MTA3LDI0NTM1LDI0NjA1LDI1MzUxLDI1OTAzLDIzMzg4LDI2MDMxLDI2MDQ1LDI2MDg4LDI2NTI1LDI3NDkwLDI3NTE1LDI3NjYzLDI5NTA5LDMxMDQ5LDMxMTY5LDMxOTkyLDMyMDI1LDMyMDQzLDMyOTMwLDMzMDI2LDMz''@;'; put 'put ''MjY3LDM1MjIyLDM1NDIyLDM1NDMzLDM1NDMwLDM1NDY4LDM1NTY2LDM2MDM5LDM2MDYwLDM4NjA0LDM5MTY0LDI3NTAzLDIwMTA3LDIwMjg0LDIwMzY1LDIwODE2LDIzMzgzLDIzNTQ2LDI0OTA0LDI1MzQ1LDI2MTc4LDI3NDI1LDI4MzYzLDI3ODM1LDI5MjQ2LDI5ODg1LDMwMTY0LDMwOTEz''@;'; put 'put ''LDMxMDM0LDMyNzgwLDMyODE5LDMzMjU4LDMzOTQwLDM2NzY2LDI3NzI4LDQwNTc1LDI0MzM1LDM1NjcyLDQwMjM1LDMxNDgyLDM2NjAwLDIzNDM3LDM4NjM1LDE5OTcxLDIxNDg5LDIyNTE5LDIyODMzLDIzMjQxLDIzNDYwLDI0NzEzLDI4Mjg3LDI4NDIyLDMwMTQyLDM2MDc0LDIzNDU1LDM0''@;'; put 'put ''MDQ4LDMxNzEyLDIwNTk0LDI2NjEyLDMzNDM3LDIzNjQ5LDM0MTIyLDMyMjg2LDMzMjk0LDIwODg5LDIzNTU2LDI1NDQ4LDM2MTk4LDI2MDEyLDI5MDM4LDMxMDM4LDMyMDIzLDMyNzczLDM1NjEzLDM2NTU0LDM2OTc0LDM0NTAzLDM3MDM0LDIwNTExLDIxMjQyLDIzNjEwLDI2NDUxLDI4Nzk2''@;'; put 'put ''LDI5MjM3LDM3MTk2LDM3MzIwLDM3Njc1LDMzNTA5LDIzNDkwLDI0MzY5LDI0ODI1LDIwMDI3LDIxNDYyLDIzNDMyLDI1MTYzLDI2NDE3LDI3NTMwLDI5NDE3LDI5NjY0LDMxMjc4LDMzMTMxLDM2MjU5LDM3MjAyLDM5MzE4LDIwNzU0LDIxNDYzLDIxNjEwLDIzNTUxLDI1NDgwLDI3MTkzLDMy''@;'; put 'put ''MTcyLDM4NjU2LDIyMjM0LDIxNDU0LDIxNjA4LDIzNDQ3LDIzNjAxLDI0MDMwLDIwNDYyLDI0ODMzLDI1MzQyLDI3OTU0LDMxMTY4LDMxMTc5LDMyMDY2LDMyMzMzLDMyNzIyLDMzMjYxLDMzMzExLDMzOTM2LDM0ODg2LDM1MTg2LDM1NzI4LDM2NDY4LDM2NjU1LDM2OTEzLDM3MTk1LDM3MjI4''@;'; put 'put ''LDM4NTk4LDM3Mjc2LDIwMTYwLDIwMzAzLDIwODA1LDIxMzEzLDI0NDY3LDI1MTAyLDI2NTgwLDI3NzEzLDI4MTcxLDI5NTM5LDMyMjk0LDM3MzI1LDM3NTA3LDIxNDYwLDIyODA5LDIzNDg3LDI4MTEzLDMxMDY5LDMyMzAyLDMxODk5LDIyNjU0LDI5MDg3LDIwOTg2LDM0ODk5LDM2ODQ4LDIw''@;'; put 'put ''NDI2LDIzODAzLDI2MTQ5LDMwNjM2LDMxNDU5LDMzMzA4LDM5NDIzLDIwOTM0LDI0NDkwLDI2MDkyLDI2OTkxLDI3NTI5LDI4MTQ3LDI4MzEwLDI4NTE2LDMwNDYyLDMyMDIwLDI0MDMzLDM2OTgxLDM3MjU1LDM4OTE4LDIwOTY2LDIxMDIxLDI1MTUyLDI2MjU3LDI2MzI5LDI4MTg2LDI0MjQ2''@;'; put 'put ''LDMyMjEwLDMyNjI2LDI2MzYwLDM0MjIzLDM0Mjk1LDM1NTc2LDIxMTYxLDIxNDY1LDIyODk5LDI0MjA3LDI0NDY0LDI0NjYxLDM3NjA0LDM4NTAwLDIwNjYzLDIwNzY3LDIxMjEzLDIxMjgwLDIxMzE5LDIxNDg0LDIxNzM2LDIxODMwLDIxODA5LDIyMDM5LDIyODg4LDIyOTc0LDIzMTAwLDIz''@;'; put 'put ''NDc3LDIzNTU4LDIzNTY3LDIzNTY5LDIzNTc4LDI0MTk2LDI0MjAyLDI0Mjg4LDI0NDMyLDI1MjE1LDI1MjIwLDI1MzA3LDI1NDg0LDI1NDYzLDI2MTE5LDI2MTI0LDI2MTU3LDI2MjMwLDI2NDk0LDI2Nzg2LDI3MTY3LDI3MTg5LDI3ODM2LDI4MDQwLDI4MTY5LDI4MjQ4LDI4OTg4LDI4OTY2''@;'; put 'put ''LDI5MDMxLDMwMTUxLDMwNDY1LDMwODEzLDMwOTc3LDMxMDc3LDMxMjE2LDMxNDU2LDMxNTA1LDMxOTExLDMyMDU3LDMyOTE4LDMzNzUwLDMzOTMxLDM0MTIxLDM0OTA5LDM1MDU5LDM1MzU5LDM1Mzg4LDM1NDEyLDM1NDQzLDM1OTM3LDM2MDYyLDM3Mjg0LDM3NDc4LDM3NzU4LDM3OTEyLDM4''@;'; put 'put ''NTU2LDM4ODA4LDE5OTc4LDE5OTc2LDE5OTk4LDIwMDU1LDIwODg3LDIxMTA0LDIyNDc4LDIyNTgwLDIyNzMyLDIzMzMwLDI0MTIwLDI0NzczLDI1ODU0LDI2NDY1LDI2NDU0LDI3OTcyLDI5MzY2LDMwMDY3LDMxMzMxLDMzOTc2LDM1Njk4LDM3MzA0LDM3NjY0LDIyMDY1LDIyNTE2LDM5MTY2''@;'; put 'put ''LDI1MzI1LDI2ODkzLDI3NTQyLDI5MTY1LDMyMzQwLDMyODg3LDMzMzk0LDM1MzAyLDM5MTM1LDM0NjQ1LDM2Nzg1LDIzNjExLDIwMjgwLDIwNDQ5LDIwNDA1LDIxNzY3LDIzMDcyLDIzNTE3LDIzNTI5LDI0NTE1LDI0OTEwLDI1MzkxLDI2MDMyLDI2MTg3LDI2ODYyLDI3MDM1LDI4MDI0LDI4''@;'; put 'put ''MTQ1LDMwMDAzLDMwMTM3LDMwNDk1LDMxMDcwLDMxMjA2LDMyMDUxLDMzMjUxLDMzNDU1LDM0MjE4LDM1MjQyLDM1Mzg2LDM2NTIzLDM2NzYzLDM2OTE0LDM3MzQxLDM4NjYzLDIwMTU0LDIwMTYxLDIwOTk1LDIyNjQ1LDIyNzY0LDIzNTYzLDI5OTc4LDIzNjEzLDMzMTAyLDM1MzM4LDM2ODA1''@;'; put 'put ''LDM4NDk5LDM4NzY1LDMxNTI1LDM1NTM1LDM4OTIwLDM3MjE4LDIyMjU5LDIxNDE2LDM2ODg3LDIxNTYxLDIyNDAyLDI0MTAxLDI1NTEyLDI3NzAwLDI4ODEwLDMwNTYxLDMxODgzLDMyNzM2LDM0OTI4LDM2OTMwLDM3MjA0LDM3NjQ4LDM3NjU2LDM4NTQzLDI5NzkwLDM5NjIwLDIzODE1LDIz''@;'; put 'put ''OTEzLDI1OTY4LDI2NTMwLDM2MjY0LDM4NjE5LDI1NDU0LDI2NDQxLDI2OTA1LDMzNzMzLDM4OTM1LDM4NTkyLDM1MDcwLDI4NTQ4LDI1NzIyLDIzNTQ0LDE5OTkwLDI4NzE2LDMwMDQ1LDI2MTU5LDIwOTMyLDIxMDQ2LDIxMjE4LDIyOTk1LDI0NDQ5LDI0NjE1LDI1MTA0LDI1OTE5LDI1OTcy''@;'; put 'put ''LDI2MTQzLDI2MjI4LDI2ODY2LDI2NjQ2LDI3NDkxLDI4MTY1LDI5Mjk4LDI5OTgzLDMwNDI3LDMxOTM0LDMyODU0LDIyNzY4LDM1MDY5LDM1MTk5LDM1NDg4LDM1NDc1LDM1NTMxLDM2ODkzLDM3MjY2LDM4NzM4LDM4NzQ1LDI1OTkzLDMxMjQ2LDMzMDMwLDM4NTg3LDI0MTA5LDI0Nzk2LDI1''@;'; put 'put ''MTE0LDI2MDIxLDI2MTMyLDI2NTEyLDMwNzA3LDMxMzA5LDMxODIxLDMyMzE4LDMzMDM0LDM2MDEyLDM2MTk2LDM2MzIxLDM2NDQ3LDMwODg5LDIwOTk5LDI1MzA1LDI1NTA5LDI1NjY2LDI1MjQwLDM1MzczLDMxMzYzLDMxNjgwLDM1NTAwLDM4NjM0LDMyMTE4LDMzMjkyLDM0NjMzLDIwMTg1''@;'; put 'put ''LDIwODA4LDIxMzE1LDIxMzQ0LDIzNDU5LDIzNTU0LDIzNTc0LDI0MDI5LDI1MTI2LDI1MTU5LDI1Nzc2LDI2NjQzLDI2Njc2LDI3ODQ5LDI3OTczLDI3OTI3LDI2NTc5LDI4NTA4LDI5MDA2LDI5MDUzLDI2MDU5LDMxMzU5LDMxNjYxLDMyMjE4LDMyMzMwLDMyNjgwLDMzMTQ2LDMzMzA3LDMz''@;'; put 'put ''MzM3LDM0MjE0LDM1NDM4LDM2MDQ2LDM2MzQxLDM2OTg0LDM2OTgzLDM3NTQ5LDM3NTIxLDM4Mjc1LDM5ODU0LDIxMDY5LDIxODkyLDI4NDcyLDI4OTgyLDIwODQwLDMxMTA5LDMyMzQxLDMzMjAzLDMxOTUwLDIyMDkyLDIyNjA5LDIzNzIwLDI1NTE0LDI2MzY2LDI2MzY1LDI2OTcwLDI5NDAx''@;'; put 'put ''LDMwMDk1LDMwMDk0LDMwOTkwLDMxMDYyLDMxMTk5LDMxODk1LDMyMDMyLDMyMDY4LDM0MzExLDM1MzgwLDM4NDU5LDM2OTYxLDQwNzM2LDIwNzExLDIxMTA5LDIxNDUyLDIxNDc0LDIwNDg5LDIxOTMwLDIyNzY2LDIyODYzLDI5MjQ1LDIzNDM1LDIzNjUyLDIxMjc3LDI0ODAzLDI0ODE5LDI1''@;'; put 'put ''NDM2LDI1NDc1LDI1NDA3LDI1NTMxLDI1ODA1LDI2MDg5LDI2MzYxLDI0MDM1LDI3MDg1LDI3MTMzLDI4NDM3LDI5MTU3LDIwMTA1LDMwMTg1LDMwNDU2LDMxMzc5LDMxOTY3LDMyMjA3LDMyMTU2LDMyODY1LDMzNjA5LDMzNjI0LDMzOTAwLDMzOTgwLDM0Mjk5LDM1MDEzLDM2MjA4LDM2ODY1''@;'; put 'put ''LDM2OTczLDM3NzgzLDM4Njg0LDM5NDQyLDIwNjg3LDIyNjc5LDI0OTc0LDMzMjM1LDM0MTAxLDM2MTA0LDM2ODk2LDIwNDE5LDIwNTk2LDIxMDYzLDIxMzYzLDI0Njg3LDI1NDE3LDI2NDYzLDI4MjA0LDM2Mjc1LDM2ODk1LDIwNDM5LDIzNjQ2LDM2MDQyLDI2MDYzLDMyMTU0LDIxMzMwLDM0''@;'; put 'put ''OTY2LDIwODU0LDI1NTM5LDIzMzg0LDIzNDAzLDIzNTYyLDI1NjEzLDI2NDQ5LDM2OTU2LDIwMTgyLDIyODEwLDIyODI2LDI3NzYwLDM1NDA5LDIxODIyLDIyNTQ5LDIyOTQ5LDI0ODE2LDI1MTcxLDI2NTYxLDMzMzMzLDI2OTY1LDM4NDY0LDM5MzY0LDM5NDY0LDIwMzA3LDIyNTM0LDIzNTUw''@;'; put 'put ''LDMyNzg0LDIzNzI5LDI0MTExLDI0NDUzLDI0NjA4LDI0OTA3LDI1MTQwLDI2MzY3LDI3ODg4LDI4MzgyLDMyOTc0LDMzMTUxLDMzNDkyLDM0OTU1LDM2MDI0LDM2ODY0LDM2OTEwLDM4NTM4LDQwNjY3LDM5ODk5LDIwMTk1LDIxNDg4LDIyODIzLDMxNTMyLDM3MjYxLDM4OTg4LDQwNDQxLDI4''@;'; put 'put ''MzgxLDI4NzExLDIxMzMxLDIxODI4LDIzNDI5LDI1MTc2LDI1MjQ2LDI1Mjk5LDI3ODEwLDI4NjU1LDI5NzMwLDM1MzUxLDM3OTQ0LDI4NjA5LDM1NTgyLDMzNTkyLDIwOTY3LDM0NTUyLDIxNDgyLDIxNDgxLDIwMjk0LDM2OTQ4LDM2Nzg0LDIyODkwLDMzMDczLDI0MDYxLDMxNDY2LDM2Nzk5''@;'; put 'put ''LDI2ODQyLDM1ODk1LDI5NDMyLDQwMDA4LDI3MTk3LDM1NTA0LDIwMDI1LDIxMzM2LDIyMDIyLDIyMzc0LDI1Mjg1LDI1NTA2LDI2MDg2LDI3NDcwLDI4MTI5LDI4MjUxLDI4ODQ1LDMwNzAxLDMxNDcxLDMxNjU4LDMyMTg3LDMyODI5LDMyOTY2LDM0NTA3LDM1NDc3LDM3NzIzLDIyMjQzLDIy''@;'; put 'put ''NzI3LDI0MzgyLDI2MDI5LDI2MjYyLDI3MjY0LDI3NTczLDMwMDA3LDM1NTI3LDIwNTE2LDMwNjkzLDIyMzIwLDI0MzQ3LDI0Njc3LDI2MjM0LDI3NzQ0LDMwMTk2LDMxMjU4LDMyNjIyLDMzMjY4LDM0NTg0LDM2OTMzLDM5MzQ3LDMxNjg5LDMwMDQ0LDMxNDgxLDMxNTY5LDMzOTg4LDM2ODgw''@;'; put 'put ''LDMxMjA5LDMxMzc4LDMzNTkwLDIzMjY1LDMwNTI4LDIwMDEzLDIwMjEwLDIzNDQ5LDI0NTQ0LDI1Mjc3LDI2MTcyLDI2NjA5LDI3ODgwLDM0NDExLDM0OTM1LDM1Mzg3LDM3MTk4LDM3NjE5LDM5Mzc2LDI3MTU5LDI4NzEwLDI5NDgyLDMzNTExLDMzODc5LDM2MDE1LDE5OTY5LDIwODA2LDIw''@;'; put 'put ''OTM5LDIxODk5LDIzNTQxLDI0MDg2LDI0MTE1LDI0MTkzLDI0MzQwLDI0MzczLDI0NDI3LDI0NTAwLDI1MDc0LDI1MzYxLDI2Mjc0LDI2Mzk3LDI4NTI2LDI5MjY2LDMwMDEwLDMwNTIyLDMyODg0LDMzMDgxLDMzMTQ0LDM0Njc4LDM1NTE5LDM1NTQ4LDM2MjI5LDM2MzM5LDM3NTMwLDM4MjYz''@;'; put 'put ''LDM4OTE0LDQwMTY1LDIxMTg5LDI1NDMxLDMwNDUyLDI2Mzg5LDI3Nzg0LDI5NjQ1LDM2MDM1LDM3ODA2LDM4NTE1LDI3OTQxLDIyNjg0LDI2ODk0LDI3MDg0LDM2ODYxLDM3Nzg2LDMwMTcxLDM2ODkwLDIyNjE4LDI2NjI2LDI1NTI0LDI3MTMxLDIwMjkxLDI4NDYwLDI2NTg0LDM2Nzk1LDM0''@;'; put 'put ''MDg2LDMyMTgwLDM3NzE2LDI2OTQzLDI4NTI4LDIyMzc4LDIyNzc1LDIzMzQwLDMyMDQ0LDI5MjI2LDIxNTE0LDM3MzQ3LDQwMzcyLDIwMTQxLDIwMzAyLDIwNTcyLDIwNTk3LDIxMDU5LDM1OTk4LDIxNTc2LDIyNTY0LDIzNDUwLDI0MDkzLDI0MjEzLDI0MjM3LDI0MzExLDI0MzUxLDI0NzE2''@;'; put 'put ''LDI1MjY5LDI1NDAyLDI1NTUyLDI2Nzk5LDI3NzEyLDMwODU1LDMxMTE4LDMxMjQzLDMyMjI0LDMzMzUxLDM1MzMwLDM1NTU4LDM2NDIwLDM2ODgzLDM3MDQ4LDM3MTY1LDM3MzM2LDQwNzE4LDI3ODc3LDI1Njg4LDI1ODI2LDI1OTczLDI4NDA0LDMwMzQwLDMxNTE1LDM2OTY5LDM3ODQxLDI4''@;'; put 'put ''MzQ2LDIxNzQ2LDI0NTA1LDI1NzY0LDM2Njg1LDM2ODQ1LDM3NDQ0LDIwODU2LDIyNjM1LDIyODI1LDIzNjM3LDI0MjE1LDI4MTU1LDMyMzk5LDI5OTgwLDM2MDI4LDM2NTc4LDM5MDAzLDI4ODU3LDIwMjUzLDI3NTgzLDI4NTkzLDNlNCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwy''@;'; put 'put ''Mjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3''@;'; put 'put ''MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1Mywz''@;'; put 'put ''NDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5''@;'; put 'put ''OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwz''@;'; put 'put ''NTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMz''@;'; put 'put ''NiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwy''@;'; put 'put ''OTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1''@;'; put 'put ''MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwz''@;'; put 'put ''MDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2''@;'; put 'put ''OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwy''@;'; put 'put ''NjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkx''@;'; put 'put ''NSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNmUzLDI3NjA0LDI3ODUyLDMwMTMwLDMwMzgyLDMwODY1LDMxMTkyLDMyMjAzLDMyNjMxLDMyOTMzLDM0OTg3LDM1NTEzLDM2MDI3LDM2OTkxLDM4NzUwLDM5MTMxLDI3MTQ3LDMxODAwLDIwNjMzLDIzNjE0LDI0NDk0LDI2''@;'; put 'put ''NTAzLDI3NjA4LDI5NzQ5LDMwNDczLDMyNjU0LDQwNzYzLDI2NTcwLDMxMjU1LDIxMzA1LDMwMDkxLDM5NjYxLDI0NDIyLDMzMTgxLDMzNzc3LDMyOTIwLDI0MzgwLDI0NTE3LDMwMDUwLDMxNTU4LDM2OTI0LDI2NzI3LDIzMDE5LDIzMTk1LDMyMDE2LDMwMzM0LDM1NjI4LDIwNDY5LDI0NDI2''@;'; put 'put ''LDI3MTYxLDI3NzAzLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1NDEzLDM1OTYxLDI0Mjg3LDI1NTUxLDMwMTQ5LDMxMTg2LDMzNDk1LDM3NjcyLDM3NjE4LDMzOTQ4LDM0NTQxLDM5OTgxLDIxNjk3LDI0NDI4LDI1OTk2LDI3OTk2LDI4NjkzLDM2MDA3LDM2MDUxLDM4OTcxLDI1OTM1LDI5''@;'; put 'put ''OTQyLDE5OTgxLDIwMTg0LDIyNDk2LDIyODI3LDIzMTQyLDIzNTAwLDIwOTA0LDI0MDY3LDI0MjIwLDI0NTk4LDI1MjA2LDI1OTc1LDI2MDIzLDI2MjIyLDI4MDE0LDI5MjM4LDMxNTI2LDMzMTA0LDMzMTc4LDMzNDMzLDM1Njc2LDM2ZTMsMzYwNzAsMzYyMTIsMzg0MjgsMzg0NjgsMjAzOTgs''@;'; put 'put ''MjU3NzEsMjc0OTQsMzMzMTAsMzM4ODksMzQxNTQsMzcwOTYsMjM1NTMsMjY5NjMsMzkwODAsMzM5MTQsMzQxMzUsMjAyMzksMjExMDMsMjQ0ODksMjQxMzMsMjYzODEsMzExMTksMzMxNDUsMzUwNzksMzUyMDYsMjgxNDksMjQzNDMsMjUxNzMsMjc4MzIsMjAxNzUsMjkyODksMzk4MjYsMjA5''@;'; put 'put ''OTgsMjE1NjMsMjIxMzIsMjI3MDcsMjQ5OTYsMjUxOTgsMjg5NTQsMjI4OTQsMzE4ODEsMzE5NjYsMzIwMjcsMzg2NDAsMjU5OTEsMzI4NjIsMTk5OTMsMjAzNDEsMjA4NTMsMjI1OTIsMjQxNjMsMjQxNzksMjQzMzAsMjY1NjQsMjAwMDYsMzQxMDksMzgyODEsMzg0OTEsMzE4NTksMzg5MTMs''@;'; put 'put ''MjA3MzEsMjI3MjEsMzAyOTQsMzA4ODcsMjEwMjksMzA2MjksMzQwNjUsMzE2MjIsMjA1NTksMjI3OTMsMjkyNTUsMzE2ODcsMzIyMzIsMzY3OTQsMzY4MjAsMzY5NDEsMjA0MTUsMjExOTMsMjMwODEsMjQzMjEsMzg4MjksMjA0NDUsMzMzMDMsMzc2MTAsMjIyNzUsMjU0MjksMjc0OTcsMjk5''@;'; put 'put ''OTUsMzUwMzYsMzY2MjgsMzEyOTgsMjEyMTUsMjI2NzUsMjQ5MTcsMjUwOTgsMjYyODYsMjc1OTcsMzE4MDcsMzM3NjksMjA1MTUsMjA0NzIsMjEyNTMsMjE1NzQsMjI1NzcsMjI4NTcsMjM0NTMsMjM3OTIsMjM3OTEsMjM4NDksMjQyMTQsMjUyNjUsMjU0NDcsMjU5MTgsMjYwNDEsMjYzNzks''@;'; put 'put ''Mjc4NjEsMjc4NzMsMjg5MjEsMzA3NzAsMzIyOTksMzI5OTAsMzM0NTksMzM4MDQsMzQwMjgsMzQ1NjIsMzUwOTAsMzUzNzAsMzU5MTQsMzcwMzAsMzc1ODYsMzkxNjUsNDAxNzksNDAzMDAsMjAwNDcsMjAxMjksMjA2MjEsMjEwNzgsMjIzNDYsMjI5NTIsMjQxMjUsMjQ1MzYsMjQ1MzcsMjUx''@;'; put 'put ''NTEsMjYyOTIsMjYzOTUsMjY1NzYsMjY4MzQsMjA4ODIsMzIwMzMsMzI5MzgsMzMxOTIsMzU1ODQsMzU5ODAsMzYwMzEsMzc1MDIsMzg0NTAsMjE1MzYsMzg5NTYsMjEyNzEsMjA2OTMsMjEzNDAsMjI2OTYsMjU3NzgsMjY0MjAsMjkyODcsMzA1NjYsMzEzMDIsMzczNTAsMjExODcsMjc4MDks''@;'; put 'put ''Mjc1MjYsMjI1MjgsMjQxNDAsMjI4NjgsMjY0MTIsMzI3NjMsMjA5NjEsMzA0MDYsMjU3MDUsMzA5NTIsMzk3NjQsNDA2MzUsMjI0NzUsMjI5NjksMjYxNTEsMjY1MjIsMjc1OTgsMjE3MzcsMjcwOTcsMjQxNDksMzMxODAsMjY1MTcsMzk4NTAsMjY2MjIsNDAwMTgsMjY3MTcsMjAxMzQsMjA0''@;'; put 'put ''NTEsMjE0NDgsMjUyNzMsMjY0MTEsMjc4MTksMzY4MDQsMjAzOTcsMzIzNjUsNDA2MzksMTk5NzUsMjQ5MzAsMjgyODgsMjg0NTksMzQwNjcsMjE2MTksMjY0MTAsMzk3NDksMjQwNTEsMzE2MzcsMjM3MjQsMjM0OTQsMzQ1ODgsMjgyMzQsMzQwMDEsMzEyNTIsMzMwMzIsMjI5MzcsMzE4ODUs''@;'; put 'put ''Mjc2NjUsMzA0OTYsMjEyMDksMjI4MTgsMjg5NjEsMjkyNzksMzA2ODMsMzg2OTUsNDAyODksMjY4OTEsMjMxNjcsMjMwNjQsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMzA0MzEsMzY4NTUsMzc1MjgsNDAxODAsMjMwMTgsMjkyNzcsMjgzNTcsMjA4MTMsMjY4MjUsMzIxOTEsMzIyMzYsMzg3''@;'; put 'put ''NTQsNDA2MzQsMjU3MjAsMjcxNjksMzM1MzgsMjI5MTYsMjMzOTEsMjc2MTEsMjk0NjcsMzA0NTAsMzIxNzgsMzI3OTEsMzM5NDUsMjA3ODYsMjY0MDgsNDA2NjUsMzA0NDYsMjY0NjYsMjEyNDcsMzkxNzMsMjM1ODgsMjUxNDcsMzE4NzAsMzYwMTYsMjE4MzksMjQ3NTgsMzIwMTEsMzgyNzIs''@;'; put 'put ''MjEyNDksMjAwNjMsMjA5MTgsMjI4MTIsMjkyNDIsMzI4MjIsMzczMjYsMjQzNTcsMzA2OTAsMjEzODAsMjQ0NDEsMzIwMDQsMzQyMjAsMzUzNzksMzY0OTMsMzg3NDIsMjY2MTEsMzQyMjIsMzc5NzEsMjQ4NDEsMjQ4NDAsMjc4MzMsMzAyOTAsMzU1NjUsMzY2NjQsMjE4MDcsMjAzMDUsMjA3''@;'; put 'put ''NzgsMjExOTEsMjE0NTEsMjM0NjEsMjQxODksMjQ3MzYsMjQ5NjIsMjU1NTgsMjYzNzcsMjY1ODYsMjgyNjMsMjgwNDQsMjk0OTQsMjk0OTUsMzAwMDEsMzEwNTYsMzUwMjksMzU0ODAsMzY5MzgsMzcwMDksMzcxMDksMzg1OTYsMzQ3MDEsMjI4MDUsMjAxMDQsMjAzMTMsMTk5ODIsMzU0NjUs''@;'; put 'put ''MzY2NzEsMzg5MjgsMjA2NTMsMjQxODgsMjI5MzQsMjM0ODEsMjQyNDgsMjU1NjIsMjU1OTQsMjU3OTMsMjYzMzIsMjY5NTQsMjcwOTYsMjc5MTUsMjgzNDIsMjkwNzYsMjk5OTIsMzE0MDcsMzI2NTAsMzI3NjgsMzM4NjUsMzM5OTMsMzUyMDEsMzU2MTcsMzYzNjIsMzY5NjUsMzg1MjUsMzkx''@;'; put 'put ''NzgsMjQ5NTgsMjUyMzMsMjc0NDIsMjc3NzksMjgwMjAsMzI3MTYsMzI3NjQsMjgwOTYsMzI2NDUsMzQ3NDYsMzUwNjQsMjY0NjksMzM3MTMsMzg5NzIsMzg2NDcsMjc5MzEsMzIwOTcsMzM4NTMsMzcyMjYsMjAwODEsMjEzNjUsMjM4ODgsMjczOTYsMjg2NTEsMzQyNTMsMzQzNDksMzUyMzks''@;'; put 'put ''MjEwMzMsMjE1MTksMjM2NTMsMjY0NDYsMjY3OTIsMjk3MDIsMjk4MjcsMzAxNzgsMzUwMjMsMzUwNDEsMzczMjQsMzg2MjYsMzg1MjAsMjQ0NTksMjk1NzUsMzE0MzUsMzM4NzAsMjU1MDQsMzAwNTMsMjExMjksMjc5NjksMjgzMTYsMjk3MDUsMzAwNDEsMzA4MjcsMzE4OTAsMzg1MzQsMzE0''@;'; put 'put ''NTIsNDA4NDUsMjA0MDYsMjQ5NDIsMjYwNTMsMzQzOTYsMjAxMDIsMjAxNDIsMjA2OTgsMjAwMDEsMjA5NDAsMjM1MzQsMjYwMDksMjY3NTMsMjgwOTIsMjk0NzEsMzAyNzQsMzA2MzcsMzEyNjAsMzE5NzUsMzMzOTEsMzU1MzgsMzY5ODgsMzczMjcsMzg1MTcsMzg5MzYsMjExNDcsMzIyMDks''@;'; put 'put ''MjA1MjMsMjE0MDAsMjY1MTksMjgxMDcsMjkxMzYsMjk3NDcsMzMyNTYsMzY2NTAsMzg1NjMsNDAwMjMsNDA2MDcsMjk3OTIsMjI1OTMsMjgwNTcsMzIwNDcsMzkwMDYsMjAxOTYsMjAyNzgsMjAzNjMsMjA5MTksMjExNjksMjM5OTQsMjQ2MDQsMjk2MTgsMzEwMzYsMzM0OTEsMzc0MjgsMzg1''@;'; put 'put ''ODMsMzg2NDYsMzg2NjYsNDA1OTksNDA4MDIsMjYyNzgsMjc1MDgsMjEwMTUsMjExNTUsMjg4NzIsMzUwMTAsMjQyNjUsMjQ2NTEsMjQ5NzYsMjg0NTEsMjkwMDEsMzE4MDYsMzIyNDQsMzI4NzksMzQwMzAsMzY4OTksMzc2NzYsMjE1NzAsMzk3OTEsMjczNDcsMjg4MDksMzYwMzQsMzYzMzUs''@;'; put 'put ''Mzg3MDYsMjExNzIsMjMxMDUsMjQyNjYsMjQzMjQsMjYzOTEsMjcwMDQsMjcwMjgsMjgwMTAsMjg0MzEsMjkyODIsMjk0MzYsMzE3MjUsMzI3NjksMzI4OTQsMzQ2MzUsMzcwNzAsMjA4NDUsNDA1OTUsMzExMDgsMzI5MDcsMzc2ODIsMzU1NDIsMjA1MjUsMjE2NDQsMzU0NDEsMjc0OTgsMzYw''@;'; put 'put ''MzYsMzMwMzEsMjQ3ODUsMjY1MjgsNDA0MzQsMjAxMjEsMjAxMjAsMzk5NTIsMzU0MzUsMzQyNDEsMzQxNTIsMjY4ODAsMjgyODYsMzA4NzEsMzMxMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDMzMiwxOTk4NCwxOTk4OSwyMDAxMCwyMDAx''@;'; put 'put ''NywyMDAyMiwyMDAyOCwyMDAzMSwyMDAzNCwyMDA1NCwyMDA1NiwyMDA5OCwyMDEwMSwzNTk0NywyMDEwNiwzMzI5OCwyNDMzMywyMDExMCwyMDEyNiwyMDEyNywyMDEyOCwyMDEzMCwyMDE0NCwyMDE0NywyMDE1MCwyMDE3NCwyMDE3MywyMDE2NCwyMDE2NiwyMDE2MiwyMDE4MywyMDE5MCwy''@;'; put 'put ''MDIwNSwyMDE5MSwyMDIxNSwyMDIzMywyMDMxNCwyMDI3MiwyMDMxNSwyMDMxNywyMDMxMSwyMDI5NSwyMDM0MiwyMDM2MCwyMDM2NywyMDM3NiwyMDM0NywyMDMyOSwyMDMzNiwyMDM2OSwyMDMzNSwyMDM1OCwyMDM3NCwyMDc2MCwyMDQzNiwyMDQ0NywyMDQzMCwyMDQ0MCwyMDQ0MywyMDQz''@;'; put 'put ''MywyMDQ0MiwyMDQzMiwyMDQ1MiwyMDQ1MywyMDUwNiwyMDUyMCwyMDUwMCwyMDUyMiwyMDUxNywyMDQ4NSwyMDI1MiwyMDQ3MCwyMDUxMywyMDUyMSwyMDUyNCwyMDQ3OCwyMDQ2MywyMDQ5NywyMDQ4NiwyMDU0NywyMDU1MSwyNjM3MSwyMDU2NSwyMDU2MCwyMDU1MiwyMDU3MCwyMDU2Niwy''@;'; put 'put ''MDU4OCwyMDYwMCwyMDYwOCwyMDYzNCwyMDYxMywyMDY2MCwyMDY1OCwyMDY4MSwyMDY4MiwyMDY1OSwyMDY3NCwyMDY5NCwyMDcwMiwyMDcwOSwyMDcxNywyMDcwNywyMDcxOCwyMDcyOSwyMDcyNSwyMDc0NSwyMDczNywyMDczOCwyMDc1OCwyMDc1NywyMDc1NiwyMDc2MiwyMDc2OSwyMDc5''@;'; put 'put ''NCwyMDc5MSwyMDc5NiwyMDc5NSwyMDc5OSwyMDgwMCwyMDgxOCwyMDgxMiwyMDgyMCwyMDgzNCwzMTQ4MCwyMDg0MSwyMDg0MiwyMDg0NiwyMDg2NCwyMDg2NiwyMjIzMiwyMDg3NiwyMDg3MywyMDg3OSwyMDg4MSwyMDg4MywyMDg4NSwyMDg4NiwyMDkwMCwyMDkwMiwyMDg5OCwyMDkwNSwy''@;'; put 'put ''MDkwNiwyMDkwNywyMDkxNSwyMDkxMywyMDkxNCwyMDkxMiwyMDkxNywyMDkyNSwyMDkzMywyMDkzNywyMDk1NSwyMDk2MCwzNDM4OSwyMDk2OSwyMDk3MywyMDk3NiwyMDk4MSwyMDk5MCwyMDk5NiwyMTAwMywyMTAxMiwyMTAwNiwyMTAzMSwyMTAzNCwyMTAzOCwyMTA0MywyMTA0OSwyMTA3''@;'; put 'put ''MSwyMTA2MCwyMTA2NywyMTA2OCwyMTA4NiwyMTA3NiwyMTA5OCwyMTEwOCwyMTA5NywyMTEwNywyMTExOSwyMTExNywyMTEzMywyMTE0MCwyMTEzOCwyMTEwNSwyMTEyOCwyMTEzNywzNjc3NiwzNjc3NSwyMTE2NCwyMTE2NSwyMTE4MCwyMTE3MywyMTE4NSwyMTE5NywyMTIwNywyMTIxNCwy''@;'; put 'put ''MTIxOSwyMTIyMiwzOTE0OSwyMTIxNiwyMTIzNSwyMTIzNywyMTI0MCwyMTI0MSwyMTI1NCwyMTI1NiwzMDAwOCwyMTI2MSwyMTI2NCwyMTI2MywyMTI2OSwyMTI3NCwyMTI4MywyMTI5NSwyMTI5NywyMTI5OSwyMTMwNCwyMTMxMiwyMTMxOCwyMTMxNywxOTk5MSwyMTMyMSwyMTMyNSwyMDk1''@;'; put 'put ''MCwyMTM0MiwyMTM1MywyMTM1OCwyMjgwOCwyMTM3MSwyMTM2NywyMTM3OCwyMTM5OCwyMTQwOCwyMTQxNCwyMTQxMywyMTQyMiwyMTQyNCwyMTQzMCwyMTQ0MywzMTc2MiwzODYxNywyMTQ3MSwyNjM2NCwyOTE2NiwyMTQ4NiwyMTQ4MCwyMTQ4NSwyMTQ5OCwyMTUwNSwyMTU2NSwyMTU2OCwy''@;'; put 'put ''MTU0OCwyMTU0OSwyMTU2NCwyMTU1MCwyMTU1OCwyMTU0NSwyMTUzMywyMTU4MiwyMTY0NywyMTYyMSwyMTY0NiwyMTU5OSwyMTYxNywyMTYyMywyMTYxNiwyMTY1MCwyMTYyNywyMTYzMiwyMTYyMiwyMTYzNiwyMTY0OCwyMTYzOCwyMTcwMywyMTY2NiwyMTY4OCwyMTY2OSwyMTY3NiwyMTcw''@;'; put 'put ''MCwyMTcwNCwyMTY3MiwyMTY3NSwyMTY5OCwyMTY2OCwyMTY5NCwyMTY5MiwyMTcyMCwyMTczMywyMTczNCwyMTc3NSwyMTc4MCwyMTc1NywyMTc0MiwyMTc0MSwyMTc1NCwyMTczMCwyMTgxNywyMTgyNCwyMTg1OSwyMTgzNiwyMTgwNiwyMTg1MiwyMTgyOSwyMTg0NiwyMTg0NywyMTgxNiwy''@;'; put 'put ''MTgxMSwyMTg1MywyMTkxMywyMTg4OCwyMTY3OSwyMTg5OCwyMTkxOSwyMTg4MywyMTg4NiwyMTkxMiwyMTkxOCwyMTkzNCwyMTg4NCwyMTg5MSwyMTkyOSwyMTg5NSwyMTkyOCwyMTk3OCwyMTk1NywyMTk4MywyMTk1NiwyMTk4MCwyMTk4OCwyMTk3MiwyMjAzNiwyMjAwNywyMjAzOCwyMjAx''@;'; put 'put ''NCwyMjAxMywyMjA0MywyMjAwOSwyMjA5NCwyMjA5NiwyOTE1MSwyMjA2OCwyMjA3MCwyMjA2NiwyMjA3MiwyMjEyMywyMjExNiwyMjA2MywyMjEyNCwyMjEyMiwyMjE1MCwyMjE0NCwyMjE1NCwyMjE3NiwyMjE2NCwyMjE1OSwyMjE4MSwyMjE5MCwyMjE5OCwyMjE5NiwyMjIxMCwyMjIwNCwy''@;'; put 'put ''MjIwOSwyMjIxMSwyMjIwOCwyMjIxNiwyMjIyMiwyMjIyNSwyMjIyNywyMjIzMSwyMjI1NCwyMjI2NSwyMjI3MiwyMjI3MSwyMjI3NiwyMjI4MSwyMjI4MCwyMjI4MywyMjI4NSwyMjI5MSwyMjI5NiwyMjI5NCwyMTk1OSwyMjMwMCwyMjMxMCwyMjMyNywyMjMyOCwyMjM1MCwyMjMzMSwyMjMz''@;'; put 'put ''NiwyMjM1MSwyMjM3NywyMjQ2NCwyMjQwOCwyMjM2OSwyMjM5OSwyMjQwOSwyMjQxOSwyMjQzMiwyMjQ1MSwyMjQzNiwyMjQ0MiwyMjQ0OCwyMjQ2NywyMjQ3MCwyMjQ4NCwyMjQ4MiwyMjQ4MywyMjUzOCwyMjQ4NiwyMjQ5OSwyMjUzOSwyMjU1MywyMjU1NywyMjY0MiwyMjU2MSwyMjYyNiwy''@;'; put 'put ''MjYwMywyMjY0MCwyNzU4NCwyMjYxMCwyMjU4OSwyMjY0OSwyMjY2MSwyMjcxMywyMjY4NywyMjY5OSwyMjcxNCwyMjc1MCwyMjcxNSwyMjcxMiwyMjcwMiwyMjcyNSwyMjczOSwyMjczNywyMjc0MywyMjc0NSwyMjc0NCwyMjc1NywyMjc0OCwyMjc1NiwyMjc1MSwyMjc2NywyMjc3OCwyMjc3''@;'; put 'put ''NywyMjc3OSwyMjc4MCwyMjc4MSwyMjc4NiwyMjc5NCwyMjgwMCwyMjgxMSwyNjc5MCwyMjgyMSwyMjgyOCwyMjgyOSwyMjgzNCwyMjg0MCwyMjg0NiwzMTQ0MiwyMjg2OSwyMjg2NCwyMjg2MiwyMjg3NCwyMjg3MiwyMjg4MiwyMjg4MCwyMjg4NywyMjg5MiwyMjg4OSwyMjkwNCwyMjkxMywy''@;'; put 'put ''Mjk0MSwyMDMxOCwyMDM5NSwyMjk0NywyMjk2MiwyMjk4MiwyMzAxNiwyMzAwNCwyMjkyNSwyMzAwMSwyMzAwMiwyMzA3NywyMzA3MSwyMzA1NywyMzA2OCwyMzA0OSwyMzA2NiwyMzEwNCwyMzE0OCwyMzExMywyMzA5MywyMzA5NCwyMzEzOCwyMzE0NiwyMzE5NCwyMzIyOCwyMzIzMCwyMzI0''@;'; put 'put ''MywyMzIzNCwyMzIyOSwyMzI2NywyMzI1NSwyMzI3MCwyMzI3MywyMzI1NCwyMzI5MCwyMzI5MSwyMzMwOCwyMzMwNywyMzMxOCwyMzM0NiwyMzI0OCwyMzMzOCwyMzM1MCwyMzM1OCwyMzM2MywyMzM2NSwyMzM2MCwyMzM3NywyMzM4MSwyMzM4NiwyMzM4NywyMzM5NywyMzQwMSwyMzQwOCwy''@;'; put 'put ''MzQxMSwyMzQxMywyMzQxNiwyNTk5MiwyMzQxOCwyMzQyNCwyMzQyNywyMzQ2MiwyMzQ4MCwyMzQ5MSwyMzQ5NSwyMzQ5NywyMzUwOCwyMzUwNCwyMzUyNCwyMzUyNiwyMzUyMiwyMzUxOCwyMzUyNSwyMzUzMSwyMzUzNiwyMzU0MiwyMzUzOSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2NSwyMzU3''@;'; put 'put ''MSwyMzU4NCwyMzU4NiwyMzU5MiwyMzYwOCwyMzYwOSwyMzYxNywyMzYyMiwyMzYzMCwyMzYzNSwyMzYzMiwyMzYzMSwyMzQwOSwyMzY2MCwyMzY2MiwyMDA2NiwyMzY3MCwyMzY3MywyMzY5MiwyMzY5NywyMzcwMCwyMjkzOSwyMzcyMywyMzczOSwyMzczNCwyMzc0MCwyMzczNSwyMzc0OSwy''@;'; put 'put ''Mzc0MiwyMzc1MSwyMzc2OSwyMzc4NSwyMzgwNSwyMzgwMiwyMzc4OSwyMzk0OCwyMzc4NiwyMzgxOSwyMzgyOSwyMzgzMSwyMzkwMCwyMzgzOSwyMzgzNSwyMzgyNSwyMzgyOCwyMzg0MiwyMzgzNCwyMzgzMywyMzgzMiwyMzg4NCwyMzg5MCwyMzg4NiwyMzg4MywyMzkxNiwyMzkyMywyMzky''@;'; put 'put ''NiwyMzk0MywyMzk0MCwyMzkzOCwyMzk3MCwyMzk2NSwyMzk4MCwyMzk4MiwyMzk5NywyMzk1MiwyMzk5MSwyMzk5NiwyNDAwOSwyNDAxMywyNDAxOSwyNDAxOCwyNDAyMiwyNDAyNywyNDA0MywyNDA1MCwyNDA1MywyNDA3NSwyNDA5MCwyNDA4OSwyNDA4MSwyNDA5MSwyNDExOCwyNDExOSwy''@;'; put 'put ''NDEzMiwyNDEzMSwyNDEyOCwyNDE0MiwyNDE1MSwyNDE0OCwyNDE1OSwyNDE2MiwyNDE2NCwyNDEzNSwyNDE4MSwyNDE4MiwyNDE4Niw0MDYzNiwyNDE5MSwyNDIyNCwyNDI1NywyNDI1OCwyNDI2NCwyNDI3MiwyNDI3MSwyNDI3OCwyNDI5MSwyNDI4NSwyNDI4MiwyNDI4MywyNDI5MCwyNDI4''@;'; put 'put ''OSwyNDI5NiwyNDI5NywyNDMwMCwyNDMwNSwyNDMwNywyNDMwNCwyNDMwOCwyNDMxMiwyNDMxOCwyNDMyMywyNDMyOSwyNDQxMywyNDQxMiwyNDMzMSwyNDMzNywyNDM0MiwyNDM2MSwyNDM2NSwyNDM3NiwyNDM4NSwyNDM5MiwyNDM5NiwyNDM5OCwyNDM2NywyNDQwMSwyNDQwNiwyNDQwNywy''@;'; put 'put ''NDQwOSwyNDQxNywyNDQyOSwyNDQzNSwyNDQzOSwyNDQ1MSwyNDQ1MCwyNDQ0NywyNDQ1OCwyNDQ1NiwyNDQ2NSwyNDQ1NSwyNDQ3OCwyNDQ3MywyNDQ3MiwyNDQ4MCwyNDQ4OCwyNDQ5MywyNDUwOCwyNDUzNCwyNDU3MSwyNDU0OCwyNDU2OCwyNDU2MSwyNDU0MSwyNDc1NSwyNDU3NSwyNDYw''@;'; put 'put ''OSwyNDY3MiwyNDYwMSwyNDU5MiwyNDYxNywyNDU5MCwyNDYyNSwyNDYwMywyNDU5NywyNDYxOSwyNDYxNCwyNDU5MSwyNDYzNCwyNDY2NiwyNDY0MSwyNDY4MiwyNDY5NSwyNDY3MSwyNDY1MCwyNDY0NiwyNDY1MywyNDY3NSwyNDY0MywyNDY3NiwyNDY0MiwyNDY4NCwyNDY4MywyNDY2NSwy''@;'; put 'put ''NDcwNSwyNDcxNywyNDgwNywyNDcwNywyNDczMCwyNDcwOCwyNDczMSwyNDcyNiwyNDcyNywyNDcyMiwyNDc0MywyNDcxNSwyNDgwMSwyNDc2MCwyNDgwMCwyNDc4NywyNDc1NiwyNDU2MCwyNDc2NSwyNDc3NCwyNDc1NywyNDc5MiwyNDkwOSwyNDg1MywyNDgzOCwyNDgyMiwyNDgyMywyNDgz''@;'; put 'put ''MiwyNDgyMCwyNDgyNiwyNDgzNSwyNDg2NSwyNDgyNywyNDgxNywyNDg0NSwyNDg0NiwyNDkwMywyNDg5NCwyNDg3MiwyNDg3MSwyNDkwNiwyNDg5NSwyNDg5MiwyNDg3NiwyNDg4NCwyNDg5MywyNDg5OCwyNDkwMCwyNDk0NywyNDk1MSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkzOSwyNDk0OCwy''@;'; put 'put ''NDk0MywyNDkzMywyNDk0NSwyNDkyNywyNDkyNSwyNDkxNSwyNDk0OSwyNDk4NSwyNDk4MiwyNDk2NywyNTAwNCwyNDk4MCwyNDk4NiwyNDk3MCwyNDk3NywyNTAwMywyNTAwNiwyNTAzNiwyNTAzNCwyNTAzMywyNTA3OSwyNTAzMiwyNTAyNywyNTAzMCwyNTAxOCwyNTAzNSwzMjYzMywyNTAz''@;'; put 'put ''NywyNTA2MiwyNTA1OSwyNTA3OCwyNTA4MiwyNTA3NiwyNTA4NywyNTA4NSwyNTA4NCwyNTA4NiwyNTA4OCwyNTA5NiwyNTA5NywyNTEwMSwyNTEwMCwyNTEwOCwyNTExNSwyNTExOCwyNTEyMSwyNTEzMCwyNTEzNCwyNTEzNiwyNTEzOCwyNTEzOSwyNTE1MywyNTE2NiwyNTE4MiwyNTE4Nywy''@;'; put 'put ''NTE3OSwyNTE4NCwyNTE5MiwyNTIxMiwyNTIxOCwyNTIyNSwyNTIxNCwyNTIzNCwyNTIzNSwyNTIzOCwyNTMwMCwyNTIxOSwyNTIzNiwyNTMwMywyNTI5NywyNTI3NSwyNTI5NSwyNTM0MywyNTI4NiwyNTgxMiwyNTI4OCwyNTMwOCwyNTI5MiwyNTI5MCwyNTI4MiwyNTI4NywyNTI0MywyNTI4''@;'; put 'put ''OSwyNTM1NiwyNTMyNiwyNTMyOSwyNTM4MywyNTM0NiwyNTM1MiwyNTMyNywyNTMzMywyNTQyNCwyNTQwNiwyNTQyMSwyNTYyOCwyNTQyMywyNTQ5NCwyNTQ4NiwyNTQ3MiwyNTUxNSwyNTQ2MiwyNTUwNywyNTQ4NywyNTQ4MSwyNTUwMywyNTUyNSwyNTQ1MSwyNTQ0OSwyNTUzNCwyNTU3Nywy''@;'; put 'put ''NTUzNiwyNTU0MiwyNTU3MSwyNTU0NSwyNTU1NCwyNTU5MCwyNTU0MCwyNTYyMiwyNTY1MiwyNTYwNiwyNTYxOSwyNTYzOCwyNTY1NCwyNTg4NSwyNTYyMywyNTY0MCwyNTYxNSwyNTcwMywyNTcxMSwyNTcxOCwyNTY3OCwyNTg5OCwyNTc0OSwyNTc0NywyNTc2NSwyNTc2OSwyNTczNiwyNTc4''@;'; put 'put ''OCwyNTgxOCwyNTgxMCwyNTc5NywyNTc5OSwyNTc4NywyNTgxNiwyNTc5NCwyNTg0MSwyNTgzMSwzMzI4OSwyNTgyNCwyNTgyNSwyNTI2MCwyNTgyNywyNTgzOSwyNTkwMCwyNTg0NiwyNTg0NCwyNTg0MiwyNTg1MCwyNTg1NiwyNTg1MywyNTg4MCwyNTg4NCwyNTg2MSwyNTg5MiwyNTg5MSwy''@;'; put 'put ''NTg5OSwyNTkwOCwyNTkwOSwyNTkxMSwyNTkxMCwyNTkxMiwzMDAyNywyNTkyOCwyNTk0MiwyNTk0MSwyNTkzMywyNTk0NCwyNTk1MCwyNTk0OSwyNTk3MCwyNTk3NiwyNTk4NiwyNTk4NywzNTcyMiwyNjAxMSwyNjAxNSwyNjAyNywyNjAzOSwyNjA1MSwyNjA1NCwyNjA0OSwyNjA1MiwyNjA2''@;'; put 'put ''MCwyNjA2NiwyNjA3NSwyNjA3MywyNjA4MCwyNjA4MSwyNjA5NywyNjQ4MiwyNjEyMiwyNjExNSwyNjEwNywyNjQ4MywyNjE2NSwyNjE2NiwyNjE2NCwyNjE0MCwyNjE5MSwyNjE4MCwyNjE4NSwyNjE3NywyNjIwNiwyNjIwNSwyNjIxMiwyNjIxNSwyNjIxNiwyNjIwNywyNjIxMCwyNjIyNCwy''@;'; put 'put ''NjI0MywyNjI0OCwyNjI1NCwyNjI0OSwyNjI0NCwyNjI2NCwyNjI2OSwyNjMwNSwyNjI5NywyNjMxMywyNjMwMiwyNjMwMCwyNjMwOCwyNjI5NiwyNjMyNiwyNjMzMCwyNjMzNiwyNjE3NSwyNjM0MiwyNjM0NSwyNjM1MiwyNjM1NywyNjM1OSwyNjM4MywyNjM5MCwyNjM5OCwyNjQwNiwyNjQw''@;'; put 'put ''NywzODcxMiwyNjQxNCwyNjQzMSwyNjQyMiwyNjQzMywyNjQyNCwyNjQyMywyNjQzOCwyNjQ2MiwyNjQ2NCwyNjQ1NywyNjQ2NywyNjQ2OCwyNjUwNSwyNjQ4MCwyNjUzNywyNjQ5MiwyNjQ3NCwyNjUwOCwyNjUwNywyNjUzNCwyNjUyOSwyNjUwMSwyNjU1MSwyNjYwNywyNjU0OCwyNjYwNCwy''@;'; put 'put ''NjU0NywyNjYwMSwyNjU1MiwyNjU5NiwyNjU5MCwyNjU4OSwyNjU5NCwyNjYwNiwyNjU1MywyNjU3NCwyNjU2NiwyNjU5OSwyNzI5MiwyNjY1NCwyNjY5NCwyNjY2NSwyNjY4OCwyNjcwMSwyNjY3NCwyNjcwMiwyNjgwMywyNjY2NywyNjcxMywyNjcyMywyNjc0MywyNjc1MSwyNjc4MywyNjc2''@;'; put 'put ''NywyNjc5NywyNjc3MiwyNjc4MSwyNjc3OSwyNjc1NSwyNzMxMCwyNjgwOSwyNjc0MCwyNjgwNSwyNjc4NCwyNjgxMCwyNjg5NSwyNjc2NSwyNjc1MCwyNjg4MSwyNjgyNiwyNjg4OCwyNjg0MCwyNjkxNCwyNjkxOCwyNjg0OSwyNjg5MiwyNjgyOSwyNjgzNiwyNjg1NSwyNjgzNywyNjkzNCwy''@;'; put 'put ''Njg5OCwyNjg4NCwyNjgzOSwyNjg1MSwyNjkxNywyNjg3MywyNjg0OCwyNjg2MywyNjkyMCwyNjkyMiwyNjkwNiwyNjkxNSwyNjkxMywyNjgyMiwyNzAwMSwyNjk5OSwyNjk3MiwyN2UzLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3''@;'; put 'put ''LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3''@;'; put 'put ''MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTky''@;'; put 'put ''LDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5''@;'; put 'put ''NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYy''@;'; put 'put ''LDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3''@;'; put 'put ''Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3''@;'; put 'put ''LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4''@;'; put 'put ''MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1''@;'; put 'put ''LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4''@;'; put 'put ''Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0''@;'; put 'put ''LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4''@;'; put 'put ''ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3''@;'; put 'put ''LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5''@;'; put 'put ''MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUw''@;'; put 'put ''LDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5''@;'; put 'put ''ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIz''@;'; put 'put ''LDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMw''@;'; put 'put ''MDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0''@;'; put 'put ''LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMw''@;'; put 'put ''MzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0''@;'; put 'put ''LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMw''@;'; put 'put ''NTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUy''@;'; put 'put ''LDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMw''@;'; put 'put ''OTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAz''@;'; put 'put ''LDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMx''@;'; put 'put ''NDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEz''@;'; put 'put ''LDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMx''@;'; put 'put ''NjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1''@;'; put 'put ''LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMx''@;'; put 'put ''OTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcw''@;'; put 'put ''LDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMy''@;'; put 'put ''MTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5''@;'; put 'put ''LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMy''@;'; put 'put ''NTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3''@;'; put 'put ''LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMy''@;'; put 'put ''ODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1''@;'; put 'put ''LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMz''@;'; put 'put ''MTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1''@;'; put 'put ''LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMz''@;'; put 'put ''NDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2''@;'; put 'put ''LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMz''@;'; put 'put ''ODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAy''@;'; put 'put ''LDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0ZTMsMzM5ODUsMzM5OTAsMzQwMDYsMzM5NTMsMzQwODEsMzQwNDcsMzQwMzYsMzQwNzEsMzQwNzIsMzQwOTIsMzQw''@;'; put 'put ''NzksMzQwNjksMzQwNjgsMzQwNDQsMzQxMTIsMzQxNDcsMzQxMzYsMzQxMjAsMzQxMTMsMzQzMDYsMzQxMjMsMzQxMzMsMzQxNzYsMzQyMTIsMzQxODQsMzQxOTMsMzQxODYsMzQyMTYsMzQxNTcsMzQxOTYsMzQyMDMsMzQyODIsMzQxODMsMzQyMDQsMzQxNjcsMzQxNzQsMzQxOTIsMzQyNDks''@;'; put 'put ''MzQyMzQsMzQyNTUsMzQyMzMsMzQyNTYsMzQyNjEsMzQyNjksMzQyNzcsMzQyNjgsMzQyOTcsMzQzMTQsMzQzMjMsMzQzMTUsMzQzMDIsMzQyOTgsMzQzMTAsMzQzMzgsMzQzMzAsMzQzNTIsMzQzNjcsMzQzODEsMjAwNTMsMzQzODgsMzQzOTksMzQ0MDcsMzQ0MTcsMzQ0NTEsMzQ0NjcsMzQ0''@;'; put 'put ''NzMsMzQ0NzQsMzQ0NDMsMzQ0NDQsMzQ0ODYsMzQ0NzksMzQ1MDAsMzQ1MDIsMzQ0ODAsMzQ1MDUsMzQ4NTEsMzQ0NzUsMzQ1MTYsMzQ1MjYsMzQ1MzcsMzQ1NDAsMzQ1MjcsMzQ1MjMsMzQ1NDMsMzQ1NzgsMzQ1NjYsMzQ1NjgsMzQ1NjAsMzQ1NjMsMzQ1NTUsMzQ1NzcsMzQ1NjksMzQ1NzMs''@;'; put 'put ''MzQ1NTMsMzQ1NzAsMzQ2MTIsMzQ2MjMsMzQ2MTUsMzQ2MTksMzQ1OTcsMzQ2MDEsMzQ1ODYsMzQ2NTYsMzQ2NTUsMzQ2ODAsMzQ2MzYsMzQ2MzgsMzQ2NzYsMzQ2NDcsMzQ2NjQsMzQ2NzAsMzQ2NDksMzQ2NDMsMzQ2NTksMzQ2NjYsMzQ4MjEsMzQ3MjIsMzQ3MTksMzQ2OTAsMzQ3MzUsMzQ3''@;'; put 'put ''NjMsMzQ3NDksMzQ3NTIsMzQ3NjgsMzg2MTQsMzQ3MzEsMzQ3NTYsMzQ3MzksMzQ3NTksMzQ3NTgsMzQ3NDcsMzQ3OTksMzQ4MDIsMzQ3ODQsMzQ4MzEsMzQ4MjksMzQ4MTQsMzQ4MDYsMzQ4MDcsMzQ4MzAsMzQ3NzAsMzQ4MzMsMzQ4MzgsMzQ4MzcsMzQ4NTAsMzQ4NDksMzQ4NjUsMzQ4NzAs''@;'; put 'put ''MzQ4NzMsMzQ4NTUsMzQ4NzUsMzQ4ODQsMzQ4ODIsMzQ4OTgsMzQ5MDUsMzQ5MTAsMzQ5MTQsMzQ5MjMsMzQ5NDUsMzQ5NDIsMzQ5NzQsMzQ5MzMsMzQ5NDEsMzQ5OTcsMzQ5MzAsMzQ5NDYsMzQ5NjcsMzQ5NjIsMzQ5OTAsMzQ5NjksMzQ5NzgsMzQ5NTcsMzQ5ODAsMzQ5OTIsMzUwMDcsMzQ5''@;'; put 'put ''OTMsMzUwMTEsMzUwMTIsMzUwMjgsMzUwMzIsMzUwMzMsMzUwMzcsMzUwNjUsMzUwNzQsMzUwNjgsMzUwNjAsMzUwNDgsMzUwNTgsMzUwNzYsMzUwODQsMzUwODIsMzUwOTEsMzUxMzksMzUxMDIsMzUxMDksMzUxMTQsMzUxMTUsMzUxMzcsMzUxNDAsMzUxMzEsMzUxMjYsMzUxMjgsMzUxNDgs''@;'; put 'put ''MzUxMDEsMzUxNjgsMzUxNjYsMzUxNzQsMzUxNzIsMzUxODEsMzUxNzgsMzUxODMsMzUxODgsMzUxOTEsMzUxOTgsMzUyMDMsMzUyMDgsMzUyMTAsMzUyMTksMzUyMjQsMzUyMzMsMzUyNDEsMzUyMzgsMzUyNDQsMzUyNDcsMzUyNTAsMzUyNTgsMzUyNjEsMzUyNjMsMzUyNjQsMzUyOTAsMzUy''@;'; put 'put ''OTIsMzUyOTMsMzUzMDMsMzUzMTYsMzUzMjAsMzUzMzEsMzUzNTAsMzUzNDQsMzUzNDAsMzUzNTUsMzUzNTcsMzUzNjUsMzUzODIsMzUzOTMsMzU0MTksMzU0MTAsMzUzOTgsMzU0MDAsMzU0NTIsMzU0MzcsMzU0MzYsMzU0MjYsMzU0NjEsMzU0NTgsMzU0NjAsMzU0OTYsMzU0ODksMzU0NzMs''@;'; put 'put ''MzU0OTMsMzU0OTQsMzU0ODIsMzU0OTEsMzU1MjQsMzU1MzMsMzU1MjIsMzU1NDYsMzU1NjMsMzU1NzEsMzU1NTksMzU1NTYsMzU1NjksMzU2MDQsMzU1NTIsMzU1NTQsMzU1NzUsMzU1NTAsMzU1NDcsMzU1OTYsMzU1OTEsMzU2MTAsMzU1NTMsMzU2MDYsMzU2MDAsMzU2MDcsMzU2MTYsMzU2''@;'; put 'put ''MzUsMzg4MjcsMzU2MjIsMzU2MjcsMzU2NDYsMzU2MjQsMzU2NDksMzU2NjAsMzU2NjMsMzU2NjIsMzU2NTcsMzU2NzAsMzU2NzUsMzU2NzQsMzU2OTEsMzU2NzksMzU2OTIsMzU2OTUsMzU3MDAsMzU3MDksMzU3MTIsMzU3MjQsMzU3MjYsMzU3MzAsMzU3MzEsMzU3MzQsMzU3MzcsMzU3Mzgs''@;'; put 'put ''MzU4OTgsMzU5MDUsMzU5MDMsMzU5MTIsMzU5MTYsMzU5MTgsMzU5MjAsMzU5MjUsMzU5MzgsMzU5NDgsMzU5NjAsMzU5NjIsMzU5NzAsMzU5NzcsMzU5NzMsMzU5NzgsMzU5ODEsMzU5ODIsMzU5ODgsMzU5NjQsMzU5OTIsMjUxMTcsMzYwMTMsMzYwMTAsMzYwMjksMzYwMTgsMzYwMTksMzYw''@;'; put 'put ''MTQsMzYwMjIsMzYwNDAsMzYwMzMsMzYwNjgsMzYwNjcsMzYwNTgsMzYwOTMsMzYwOTAsMzYwOTEsMzYxMDAsMzYxMDEsMzYxMDYsMzYxMDMsMzYxMTEsMzYxMDksMzYxMTIsNDA3ODIsMzYxMTUsMzYwNDUsMzYxMTYsMzYxMTgsMzYxOTksMzYyMDUsMzYyMDksMzYyMTEsMzYyMjUsMzYyNDks''@;'; put 'put ''MzYyOTAsMzYyODYsMzYyODIsMzYzMDMsMzYzMTQsMzYzMTAsMzYzMDAsMzYzMTUsMzYyOTksMzYzMzAsMzYzMzEsMzYzMTksMzYzMjMsMzYzNDgsMzYzNjAsMzYzNjEsMzYzNTEsMzYzODEsMzYzODIsMzYzNjgsMzYzODMsMzY0MTgsMzY0MDUsMzY0MDAsMzY0MDQsMzY0MjYsMzY0MjMsMzY0''@;'; put 'put ''MjUsMzY0MjgsMzY0MzIsMzY0MjQsMzY0NDEsMzY0NTIsMzY0NDgsMzYzOTQsMzY0NTEsMzY0MzcsMzY0NzAsMzY0NjYsMzY0NzYsMzY0ODEsMzY0ODcsMzY0ODUsMzY0ODQsMzY0OTEsMzY0OTAsMzY0OTksMzY0OTcsMzY1MDAsMzY1MDUsMzY1MjIsMzY1MTMsMzY1MjQsMzY1MjgsMzY1NTAs''@;'; put 'put ''MzY1MjksMzY1NDIsMzY1NDksMzY1NTIsMzY1NTUsMzY1NzEsMzY1NzksMzY2MDQsMzY2MDMsMzY1ODcsMzY2MDYsMzY2MTgsMzY2MTMsMzY2MjksMzY2MjYsMzY2MzMsMzY2MjcsMzY2MzYsMzY2MzksMzY2MzUsMzY2MjAsMzY2NDYsMzY2NTksMzY2NjcsMzY2NjUsMzY2NzcsMzY2NzQsMzY2''@;'; put 'put ''NzAsMzY2ODQsMzY2ODEsMzY2NzgsMzY2ODYsMzY2OTUsMzY3MDAsMzY3MDYsMzY3MDcsMzY3MDgsMzY3NjQsMzY3NjcsMzY3NzEsMzY3ODEsMzY3ODMsMzY3OTEsMzY4MjYsMzY4MzcsMzY4MzQsMzY4NDIsMzY4NDcsMzY5OTksMzY4NTIsMzY4NjksMzY4NTcsMzY4NTgsMzY4ODEsMzY4ODUs''@;'; put 'put ''MzY4OTcsMzY4NzcsMzY4OTQsMzY4ODYsMzY4NzUsMzY5MDMsMzY5MTgsMzY5MTcsMzY5MjEsMzY4NTYsMzY5NDMsMzY5NDQsMzY5NDUsMzY5NDYsMzY4NzgsMzY5MzcsMzY5MjYsMzY5NTAsMzY5NTIsMzY5NTgsMzY5NjgsMzY5NzUsMzY5ODIsMzg1NjgsMzY5NzgsMzY5OTQsMzY5ODksMzY5''@;'; put 'put ''OTMsMzY5OTIsMzcwMDIsMzcwMDEsMzcwMDcsMzcwMzIsMzcwMzksMzcwNDEsMzcwNDUsMzcwOTAsMzcwOTIsMjUxNjAsMzcwODMsMzcxMjIsMzcxMzgsMzcxNDUsMzcxNzAsMzcxNjgsMzcxOTQsMzcyMDYsMzcyMDgsMzcyMTksMzcyMjEsMzcyMjUsMzcyMzUsMzcyMzQsMzcyNTksMzcyNTcs''@;'; put 'put ''MzcyNTAsMzcyODIsMzcyOTEsMzcyOTUsMzcyOTAsMzczMDEsMzczMDAsMzczMDYsMzczMTIsMzczMTMsMzczMjEsMzczMjMsMzczMjgsMzczMzQsMzczNDMsMzczNDUsMzczMzksMzczNzIsMzczNjUsMzczNjYsMzc0MDYsMzczNzUsMzczOTYsMzc0MjAsMzczOTcsMzczOTMsMzc0NzAsMzc0''@;'; put 'put ''NjMsMzc0NDUsMzc0NDksMzc0NzYsMzc0NDgsMzc1MjUsMzc0MzksMzc0NTEsMzc0NTYsMzc1MzIsMzc1MjYsMzc1MjMsMzc1MzEsMzc0NjYsMzc1ODMsMzc1NjEsMzc1NTksMzc2MDksMzc2NDcsMzc2MjYsMzc3MDAsMzc2NzgsMzc2NTcsMzc2NjYsMzc2NTgsMzc2NjcsMzc2OTAsMzc2ODUs''@;'; put 'put ''Mzc2OTEsMzc3MjQsMzc3MjgsMzc3NTYsMzc3NDIsMzc3MTgsMzc4MDgsMzc4MDQsMzc4MDUsMzc3ODAsMzc4MTcsMzc4NDYsMzc4NDcsMzc4NjQsMzc4NjEsMzc4NDgsMzc4MjcsMzc4NTMsMzc4NDAsMzc4MzIsMzc4NjAsMzc5MTQsMzc5MDgsMzc5MDcsMzc4OTEsMzc4OTUsMzc5MDQsMzc5''@;'; put 'put ''NDIsMzc5MzEsMzc5NDEsMzc5MjEsMzc5NDYsMzc5NTMsMzc5NzAsMzc5NTYsMzc5NzksMzc5ODQsMzc5ODYsMzc5ODIsMzc5OTQsMzc0MTcsMzhlMywzODAwNSwzODAwNywzODAxMywzNzk3OCwzODAxMiwzODAxNCwzODAxNywzODAxNSwzODI3NCwzODI3OSwzODI4MiwzODI5MiwzODI5NCwz''@;'; put 'put ''ODI5NiwzODI5NywzODMwNCwzODMxMiwzODMxMSwzODMxNywzODMzMiwzODMzMSwzODMyOSwzODMzNCwzODM0NiwyODY2MiwzODMzOSwzODM0OSwzODM0OCwzODM1NywzODM1NiwzODM1OCwzODM2NCwzODM2OSwzODM3MywzODM3MCwzODQzMywzODQ0MCwzODQ0NiwzODQ0NywzODQ2NiwzODQ3''@;'; put 'put ''NiwzODQ3OSwzODQ3NSwzODUxOSwzODQ5MiwzODQ5NCwzODQ5MywzODQ5NSwzODUwMiwzODUxNCwzODUwOCwzODU0MSwzODU1MiwzODU0OSwzODU1MSwzODU3MCwzODU2NywzODU3NywzODU3OCwzODU3NiwzODU4MCwzODU4MiwzODU4NCwzODU4NSwzODYwNiwzODYwMywzODYwMSwzODYwNSwz''@;'; put 'put ''NTE0OSwzODYyMCwzODY2OSwzODYxMywzODY0OSwzODY2MCwzODY2MiwzODY2NCwzODY3NSwzODY3MCwzODY3MywzODY3MSwzODY3OCwzODY4MSwzODY5MiwzODY5OCwzODcwNCwzODcxMywzODcxNywzODcxOCwzODcyNCwzODcyNiwzODcyOCwzODcyMiwzODcyOSwzODc0OCwzODc1MiwzODc1''@;'; put 'put ''NiwzODc1OCwzODc2MCwyMTIwMiwzODc2MywzODc2OSwzODc3NywzODc4OSwzODc4MCwzODc4NSwzODc3OCwzODc5MCwzODc5NSwzODc5OSwzODgwMCwzODgxMiwzODgyNCwzODgyMiwzODgxOSwzODgzNSwzODgzNiwzODg1MSwzODg1NCwzODg1NiwzODg1OSwzODg3NiwzODg5Myw0MDc4Mywz''@;'; put 'put ''ODg5OCwzMTQ1NSwzODkwMiwzODkwMSwzODkyNywzODkyNCwzODk2OCwzODk0OCwzODk0NSwzODk2NywzODk3MywzODk4MiwzODk5MSwzODk4NywzOTAxOSwzOTAyMywzOTAyNCwzOTAyNSwzOTAyOCwzOTAyNywzOTA4MiwzOTA4NywzOTA4OSwzOTA5NCwzOTEwOCwzOTEwNywzOTExMCwzOTE0''@;'; put 'put ''NSwzOTE0NywzOTE3MSwzOTE3NywzOTE4NiwzOTE4OCwzOTE5MiwzOTIwMSwzOTE5NywzOTE5OCwzOTIwNCwzOTIwMCwzOTIxMiwzOTIxNCwzOTIyOSwzOTIzMCwzOTIzNCwzOTI0MSwzOTIzNywzOTI0OCwzOTI0MywzOTI0OSwzOTI1MCwzOTI0NCwzOTI1MywzOTMxOSwzOTMyMCwzOTMzMywz''@;'; put 'put ''OTM0MSwzOTM0MiwzOTM1NiwzOTM5MSwzOTM4NywzOTM4OSwzOTM4NCwzOTM3NywzOTQwNSwzOTQwNiwzOTQwOSwzOTQxMCwzOTQxOSwzOTQxNiwzOTQyNSwzOTQzOSwzOTQyOSwzOTM5NCwzOTQ0OSwzOTQ2NywzOTQ3OSwzOTQ5MywzOTQ5MCwzOTQ4OCwzOTQ5MSwzOTQ4NiwzOTUwOSwzOTUw''@;'; put 'put ''MSwzOTUxNSwzOTUxMSwzOTUxOSwzOTUyMiwzOTUyNSwzOTUyNCwzOTUyOSwzOTUzMSwzOTUzMCwzOTU5NywzOTYwMCwzOTYxMiwzOTYxNiwzOTYzMSwzOTYzMywzOTYzNSwzOTYzNiwzOTY0NiwzOTY0NywzOTY1MCwzOTY1MSwzOTY1NCwzOTY2MywzOTY1OSwzOTY2MiwzOTY2OCwzOTY2NSwz''@;'; put 'put ''OTY3MSwzOTY3NSwzOTY4NiwzOTcwNCwzOTcwNiwzOTcxMSwzOTcxNCwzOTcxNSwzOTcxNywzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyNiwzOTcyNywzOTczMCwzOTc0OCwzOTc0NywzOTc1OSwzOTc1NywzOTc1OCwzOTc2MSwzOTc2OCwzOTc5NiwzOTgyNywzOTgxMSwzOTgyNSwzOTgz''@;'; put 'put ''MCwzOTgzMSwzOTgzOSwzOTg0MCwzOTg0OCwzOTg2MCwzOTg3MiwzOTg4MiwzOTg2NSwzOTg3OCwzOTg4NywzOTg4OSwzOTg5MCwzOTkwNywzOTkwNiwzOTkwOCwzOTg5MiwzOTkwNSwzOTk5NCwzOTkyMiwzOTkyMSwzOTkyMCwzOTk1NywzOTk1NiwzOTk0NSwzOTk1NSwzOTk0OCwzOTk0Miwz''@;'; put 'put ''OTk0NCwzOTk1NCwzOTk0NiwzOTk0MCwzOTk4MiwzOTk2MywzOTk3MywzOTk3MiwzOTk2OSwzOTk4NCw0MDAwNywzOTk4Niw0MDAwNiwzOTk5OCw0MDAyNiw0MDAzMiw0MDAzOSw0MDA1NCw0MDA1Niw0MDE2Nyw0MDE3Miw0MDE3Niw0MDIwMSw0MDIwMCw0MDE3MSw0MDE5NSw0MDE5OCw0MDIz''@;'; put 'put ''NCw0MDIzMCw0MDM2Nyw0MDIyNyw0MDIyMyw0MDI2MCw0MDIxMyw0MDIxMCw0MDI1Nyw0MDI1NSw0MDI1NCw0MDI2Miw0MDI2NCw0MDI4NSw0MDI4Niw0MDI5Miw0MDI3Myw0MDI3Miw0MDI4MSw0MDMwNiw0MDMyOSw0MDMyNyw0MDM2Myw0MDMwMyw0MDMxNCw0MDM0Niw0MDM1Niw0MDM2MSw0''@;'; put 'put ''MDM3MCw0MDM4OCw0MDM4NSw0MDM3OSw0MDM3Niw0MDM3OCw0MDM5MCw0MDM5OSw0MDM4Niw0MDQwOSw0MDQwMyw0MDQ0MCw0MDQyMiw0MDQyOSw0MDQzMSw0MDQ0NSw0MDQ3NCw0MDQ3NSw0MDQ3OCw0MDU2NSw0MDU2OSw0MDU3Myw0MDU3Nyw0MDU4NCw0MDU4Nyw0MDU4OCw0MDU5NCw0MDU5''@;'; put 'put ''Nyw0MDU5Myw0MDYwNSw0MDYxMyw0MDYxNyw0MDYzMiw0MDYxOCw0MDYyMSwzODc1Myw0MDY1Miw0MDY1NCw0MDY1NSw0MDY1Niw0MDY2MCw0MDY2OCw0MDY3MCw0MDY2OSw0MDY3Miw0MDY3Nyw0MDY4MCw0MDY4Nyw0MDY5Miw0MDY5NCw0MDY5NSw0MDY5Nyw0MDY5OSw0MDcwMCw0MDcwMSw0''@;'; put 'put ''MDcxMSw0MDcxMiwzMDM5MSw0MDcyNSw0MDczNyw0MDc0OCw0MDc2Niw0MDc3OCw0MDc4Niw0MDc4OCw0MDgwMyw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwNiw0MDgwNyw0MDgxMiw0MDgxMCw0MDgyMyw0MDgxOCw0MDgyMiw0MDg1Myw0MDg2MCw0MDg2NCwyMjU3NSwyNzA3OSwzNjk1MywyOTc5''@;'; put 'put ''NiwyMDk1NiwyOTA4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0''@;'; put 'put ''MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0Njks''@;'; put 'put ''NjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1''@;'; put 'put ''ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQs''@;'; put 'put ''MjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1''@;'; put 'put ''NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQs''@;'; put 'put ''MjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkz''@;'; put 'put ''NzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcs''@;'; put 'put ''MzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2''@;'; put 'put ''MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQs''@;'; put 'put ''MzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0''@;'; put 'put ''NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcs''@;'; put 'put ''Mzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4''@;'; put 'put ''NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''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 ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1''@;'; put 'put ''NTMsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDg3NTcsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAz''@;'; put 'put ''NzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQs''@;'; put 'put ''MjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0''@;'; put 'put ''ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgs''@;'; put 'put ''MjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYz''@;'; put 'put ''NjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYs''@;'; put 'put ''Mjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQw''@;'; put 'put ''MjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMs''@;'; put 'put ''MzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1''@;'; put 'put ''ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2Njcs''@;'; put 'put ''MzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0''@;'; put 'put ''NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAs''@;'; put 'put ''Mzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3''@;'; put 'put ''OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxqaXMwMjEyOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw3MjgsNzExLDE4NCw3MjksNzMzLDE3NSw3MzEsNzMwLDY1Mzc0LDkwMCw5MDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MSwxNjYsMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxODYsMTcwLDE2OSwxNzQsODQ4MiwxNjQsODQ3MCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTAyLDkwNCw5MDUsOTA2LDkzOCxudWxs''@;'; put 'put ''LDkwOCxudWxsLDkxMCw5MzksbnVsbCw5MTEsbnVsbCxudWxsLG51bGwsbnVsbCw5NDAsOTQxLDk0Miw5NDMsOTcwLDkxMiw5NzIsOTYyLDk3Myw5NzEsOTQ0LDk3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzgs''@;'; put 'put ''MTAzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTgsMTExOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OCwyNzIsbnVsbCwyOTQsbnVsbCwzMDYsbnVsbCwzMjEsMzE5LG51bGwsMzMwLDIxNiwzMzgsbnVsbCwzNTgsMjIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMiwzMjAsMzI5LDMzMSwyNDgsMzM5LDIyMywzNTksMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsMTkzLDE5MiwxOTYsMTk0LDI1OCw0NjEsMjU2LDI2MCwxOTcsMTk1LDI2MiwyNjQsMjY4LDE5OSwyNjYsMjcwLDIwMSwyMDAsMjAzLDIwMiwyODIsMjc4LDI3NCwyODAsbnVsbCwyODQsMjg2LDI5MCwyODgsMjkyLDIwNSwyMDQsMjA3LDIwNiw0NjMsMzA0LDI5OCwzMDIsMjk2LDMwOCwz''@;'; put 'put ''MTAsMzEzLDMxNywzMTUsMzIzLDMyNywzMjUsMjA5LDIxMSwyMTAsMjE0LDIxMiw0NjUsMzM2LDMzMiwyMTMsMzQwLDM0NCwzNDIsMzQ2LDM0OCwzNTIsMzUwLDM1NiwzNTQsMjE4LDIxNywyMjAsMjE5LDM2NCw0NjcsMzY4LDM2MiwzNzAsMzY2LDM2MCw0NzEsNDc1LDQ3Myw0NjksMzcyLDIy''@;'; put 'put ''MSwzNzYsMzc0LDM3NywzODEsMzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjI1LDIyNCwyMjgsMjI2LDI1OSw0NjIsMjU3LDI2MSwyMjksMjI3LDI2MywyNjUsMjY5LDIzMSwyNjcsMjcxLDIzMywyMzIsMjM1LDIzNCwyODMsMjc5LDI3NSwyODEsNTAxLDI4NSwyODcs''@;'; put 'put ''bnVsbCwyODksMjkzLDIzNywyMzYsMjM5LDIzOCw0NjQsbnVsbCwyOTksMzAzLDI5NywzMDksMzExLDMxNCwzMTgsMzE2LDMyNCwzMjgsMzI2LDI0MSwyNDMsMjQyLDI0NiwyNDQsNDY2LDMzNywzMzMsMjQ1LDM0MSwzNDUsMzQzLDM0NywzNDksMzUzLDM1MSwzNTcsMzU1LDI1MCwyNDksMjUy''@;'; put 'put ''LDI1MSwzNjUsNDY4LDM2OSwzNjMsMzcxLDM2NywzNjEsNDcyLDQ3Niw0NzQsNDcwLDM3MywyNTMsMjU1LDM3NSwzNzgsMzgyLDM4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsMTk5NzAsMTk5NzIsMTk5NzMsMTk5ODAsMTk5ODYsMTk5OTksMjAwMDMsMjAwMDQsMjAwMDgsMjAwMTEsMjAwMTQsMjAwMTUsMjAwMTYsMjAwMjEsMjAwMzIsMjAwMzMsMjAwMzYsMjAwMzksMjAwNDksMjAwNTgsMjAwNjAsMjAwNjcsMjAwNzIsMjAwNzMsMjAwODQsMjAw''@;'; put 'put ''ODUsMjAwODksMjAwOTUsMjAxMDksMjAxMTgsMjAxMTksMjAxMjUsMjAxNDMsMjAxNTMsMjAxNjMsMjAxNzYsMjAxODYsMjAxODcsMjAxOTIsMjAxOTMsMjAxOTQsMjAyMDAsMjAyMDcsMjAyMDksMjAyMTEsMjAyMTMsMjAyMjEsMjAyMjIsMjAyMjMsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMzIs''@;'; put 'put ''MjAyMzUsMjAyMzYsMjAyNDIsMjAyNDUsMjAyNDYsMjAyNDcsMjAyNDksMjAyNzAsMjAyNzMsMjAzMjAsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODgsMjAyOTAsMjAyOTYsMjAyOTcsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMTIsMjAzMTksMjAz''@;'; put 'put ''MjMsMjAzMzAsMjAzMzIsMjAzMzQsMjAzMzcsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTAsMjAzNTMsMjAzNTQsMjAzNTYsMjAzNTcsMjAzNjEsMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzIsMjAzNzUsMjAzNzcsMjAzNzgsMjAzODIsMjAzODMs''@;'; put 'put ''MjA0MDIsMjA0MDcsMjA0MDksMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MjEsMjA0MjIsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzEsMjA0MzQsMjA0NDQsMjA0NDgsMjA0NTAsMjA0NjQsMjA0NjYsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0''@;'; put 'put ''ODEsMjA0ODQsMjA0ODcsMjA0OTAsMjA0OTIsMjA0OTQsMjA0OTYsMjA0OTksMjA1MDMsMjA1MDQsMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAsMjA1MTQsMjA1MTksMjA1MjYsMjA1MjgsMjA1MzAsMjA1MzEsMjA1MzMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDksMjA1NTAsMjA1NTQsMjA1NTYs''@;'; put 'put ''MjA1NTgsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjcsMjA1NjksMjA1NzUsMjA1NzYsMjA1NzgsMjA1NzksMjA1ODIsMjA1ODMsMjA1ODYsMjA1ODksMjA1OTIsMjA1OTMsMjA1MzksMjA2MDksMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTgsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjYsMjA2MjcsMjA2''@;'; put 'put ''MjgsMjA2MzAsMjA2MzUsMjA2MzYsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NTAsMjA2NTUsMjA2NTYsMjA2NjUsMjA2NjYsMjA2NjksMjA2NzIsMjA2NzUsMjA2NzYsMjA2NzksMjA2ODQsMjA2ODYsMjA2ODgsMjA2OTEsMjA2OTIsMjA2OTYsMjA3MDAsMjA3MDEsMjA3MDMs''@;'; put 'put ''MjA3MDYsMjA3MDgsMjA3MTAsMjA3MTIsMjA3MTMsMjA3MTksMjA3MjEsMjA3MjYsMjA3MzAsMjA3MzQsMjA3MzksMjA3NDIsMjA3NDMsMjA3NDQsMjA3NDcsMjA3NDgsMjA3NDksMjA3NTAsMjA3MjIsMjA3NTIsMjA3NTksMjA3NjEsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NzEsMjA3''@;'; put 'put ''NzUsMjA3NzYsMjA3ODAsMjA3ODEsMjA3ODMsMjA3ODUsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTIsMjA3OTMsMjA4MDIsMjA4MTAsMjA4MTUsMjA4MTksMjA4MjEsMjA4MjMsMjA4MjQsMjA4MzEsMjA4MzYsMjA4MzgsMjA4NjIsMjA4NjcsMjA4NjgsMjA4NzUsMjA4NzgsMjA4ODgsMjA4OTMs''@;'; put 'put ''MjA4OTcsMjA4OTksMjA5MDksMjA5MjAsMjA5MjIsMjA5MjQsMjA5MjYsMjA5MjcsMjA5MzAsMjA5MzYsMjA5NDMsMjA5NDUsMjA5NDYsMjA5NDcsMjA5NDksMjA5NTIsMjA5NTgsMjA5NjIsMjA5NjUsMjA5NzQsMjA5NzgsMjA5NzksMjA5ODAsMjA5ODMsMjA5OTMsMjA5OTQsMjA5OTcsMjEw''@;'; put 'put ''MTAsMjEwMTEsMjEwMTMsMjEwMTQsMjEwMTYsMjEwMjYsMjEwMzIsMjEwNDEsMjEwNDIsMjEwNDUsMjEwNTIsMjEwNjEsMjEwNjUsMjEwNzcsMjEwNzksMjEwODAsMjEwODIsMjEwODQsMjEwODcsMjEwODgsMjEwODksMjEwOTQsMjExMDIsMjExMTEsMjExMTIsMjExMTMsMjExMjAsMjExMjIs''@;'; put 'put ''MjExMjUsMjExMzAsMjExMzIsMjExMzksMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjcsMjExNjgsMjExNzQsMjExNzUsMjExNzYsMjExNzgsMjExNzksMjExODEsMjExODQsMjExODgsMjExOTAsMjExOTIsMjExOTYsMjEx''@;'; put 'put ''OTksMjEyMDEsMjEyMDQsMjEyMDYsMjEyMTEsMjEyMTIsMjEyMTcsMjEyMjEsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjgsMjEyMzIsMjEyMzMsMjEyMzYsMjEyMzgsMjEyMzksMjEyNDgsMjEyNTEsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjUsMjEyNjcsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgs''@;'; put 'put ''MjEyNzksMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTYsMjEyOTgsMjEzMDEsMjEzMDgsMjEzMDksMjEzMTAsMjEzMTQsMjEzMjQsMjEzMjMsMjEzMzcsMjEzMzksMjEzNDUsMjEzNDcsMjEzNDksMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjksMjEzNzQsMjEz''@;'; put 'put ''NzksMjEzODMsMjEzODQsMjEzOTAsMjEzOTUsMjEzOTYsMjE0MDEsMjE0MDUsMjE0MDksMjE0MTIsMjE0MTgsMjE0MTksMjE0MjMsMjE0MjYsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzQsMjE0MzcsMjE0NDAsMjE0NDUsMjE0NTUsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0Njks''@;'; put 'put ''MjE0NzAsMjE0NzIsMjE0NzgsMjE0NzksMjE0OTMsMjE1MDYsMjE1MjMsMjE1MzAsMjE1MzcsMjE1NDMsMjE1NDQsMjE1NDYsMjE1NTEsMjE1NTMsMjE1NTYsMjE1NTcsMjE1NzEsMjE1NzIsMjE1NzUsMjE1ODEsMjE1ODMsMjE1OTgsMjE2MDIsMjE2MDQsMjE2MDYsMjE2MDcsMjE2MDksMjE2''@;'; put 'put ''MTEsMjE2MTMsMjE2MTQsMjE2MjAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2NDAsMjE2NDEsMjE2NDUsMjE2NDksMjE2NTMsMjE2NTQsMjE2NjAsMjE2NjMsMjE2NjUsMjE2NzAsMjE2NzEsMjE2NzMsMjE2NzQsMjE2NzcsMjE2NzgsMjE2ODEsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTEs''@;'; put 'put ''MjE2OTUsMjE3MDIsMjE3MDYsMjE3MDksMjE3MTAsMjE3MjgsMjE3MzgsMjE3NDAsMjE3NDMsMjE3NTAsMjE3NTYsMjE3NTgsMjE3NTksMjE3NjAsMjE3NjEsMjE3NjUsMjE3NjgsMjE3NjksMjE3NzIsMjE3NzMsMjE3NzQsMjE3ODEsMjE4MDIsMjE4MDMsMjE4MTAsMjE4MTMsMjE4MTQsMjE4''@;'; put 'put ''MTksMjE4MjAsMjE4MjEsMjE4MjUsMjE4MzEsMjE4MzMsMjE4MzQsMjE4MzcsMjE4NDAsMjE4NDEsMjE4NDgsMjE4NTAsMjE4NTEsMjE4NTQsMjE4NTYsMjE4NTcsMjE4NjAsMjE4NjIsMjE4ODcsMjE4ODksMjE4OTAsMjE4OTQsMjE4OTYsMjE5MDIsMjE5MDMsMjE5MDUsMjE5MDYsMjE5MDcs''@;'; put 'put ''MjE5MDgsMjE5MTEsMjE5MjMsMjE5MjQsMjE5MzMsMjE5MzgsMjE5NTEsMjE5NTMsMjE5NTUsMjE5NTgsMjE5NjEsMjE5NjMsMjE5NjQsMjE5NjYsMjE5NjksMjE5NzAsMjE5NzEsMjE5NzUsMjE5NzYsMjE5NzksMjE5ODIsMjE5ODYsMjE5OTMsMjIwMDYsMjIwMTUsMjIwMjEsMjIwMjQsMjIw''@;'; put 'put ''MjYsMjIwMjksMjIwMzAsMjIwMzEsMjIwMzIsMjIwMzMsMjIwMzQsMjIwNDEsMjIwNjAsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzMsMjIwNzUsMjIwNzYsMjIwNzcsMjIwNzksMjIwODAsMjIwODEsMjIwODMsMjIwODQsMjIwODYsMjIwODksMjIwOTEsMjIwOTMsMjIwOTUsMjIxMDAs''@;'; put 'put ''MjIxMTAsMjIxMTIsMjIxMTMsMjIxMTQsMjIxMTUsMjIxMTgsMjIxMjEsMjIxMjUsMjIxMjcsMjIxMjksMjIxMzAsMjIxMzMsMjIxNDgsMjIxNDksMjIxNTIsMjIxNTUsMjIxNTYsMjIxNjUsMjIxNjksMjIxNzAsMjIxNzMsMjIxNzQsMjIxNzUsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIx''@;'; put 'put ''ODcsMjIxODgsMjIxODksMjIxOTMsMjIxOTUsMjIxOTksMjIyMDYsMjIyMTMsMjIyMTcsMjIyMTgsMjIyMTksMjIyMjMsMjIyMjQsMjIyMjAsMjIyMjEsMjIyMzMsMjIyMzYsMjIyMzcsMjIyMzksMjIyNDEsMjIyNDQsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNTcsMjIyNTEsMjIyNTMs''@;'; put 'put ''MjIyNjIsMjIyNjMsMjIyNzMsMjIyNzQsMjIyNzksMjIyODIsMjIyODQsMjIyODksMjIyOTMsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDQsMjIzMDYsMjIzMDcsMjIzMDgsMjIzMDksMjIzMTMsMjIzMTQsMjIzMTYsMjIzMTgsMjIzMTksMjIzMjMsMjIzMjQsMjIzMzMsMjIzMzQsMjIzMzUsMjIz''@;'; put 'put ''NDEsMjIzNDIsMjIzNDgsMjIzNDksMjIzNTQsMjIzNzAsMjIzNzMsMjIzNzUsMjIzNzYsMjIzNzksMjIzODEsMjIzODIsMjIzODMsMjIzODQsMjIzODUsMjIzODcsMjIzODgsMjIzODksMjIzOTEsMjIzOTMsMjIzOTQsMjIzOTUsMjIzOTYsMjIzOTgsMjI0MDEsMjI0MDMsMjI0MTIsMjI0MjAs''@;'; put 'put ''MjI0MjMsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzMsMjI0MjEsMjI0MzksMjI0NDAsMjI0NDEsMjI0NDQsMjI0NTYsMjI0NjEsMjI0NzEsMjI0NzIsMjI0NzYsMjI0NzksMjI0ODUsMjI0OTMsMjI0OTQsMjI1MDAsMjI1MDIsMjI1MDMsMjI1MDUsMjI1MDksMjI1''@;'; put 'put ''MTIsMjI1MTcsMjI1MTgsMjI1MjAsMjI1MjUsMjI1MjYsMjI1MjcsMjI1MzEsMjI1MzIsMjI1MzYsMjI1MzcsMjI0OTcsMjI1NDAsMjI1NDEsMjI1NTUsMjI1NTgsMjI1NTksMjI1NjAsMjI1NjYsMjI1NjcsMjI1NzMsMjI1NzgsMjI1ODUsMjI1OTEsMjI2MDEsMjI2MDQsMjI2MDUsMjI2MDcs''@;'; put 'put ''MjI2MDgsMjI2MTMsMjI2MjMsMjI2MjUsMjI2MjgsMjI2MzEsMjI2MzIsMjI2NDgsMjI2NTIsMjI2NTUsMjI2NTYsMjI2NTcsMjI2NjMsMjI2NjQsMjI2NjUsMjI2NjYsMjI2NjgsMjI2NjksMjI2NzEsMjI2NzIsMjI2NzYsMjI2NzgsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTQsMjI2''@;'; put 'put ''OTcsMjI3MDUsMjI3MDYsMjI3MjQsMjI3MTYsMjI3MjIsMjI3MjgsMjI3MzMsMjI3MzQsMjI3MzYsMjI3MzgsMjI3NDAsMjI3NDIsMjI3NDYsMjI3NDksMjI3NTMsMjI3NTQsMjI3NjEsMjI3NzEsMjI3ODksMjI3OTAsMjI3OTUsMjI3OTYsMjI4MDIsMjI4MDMsMjI4MDQsMzQzNjksMjI4MTMs''@;'; put 'put ''MjI4MTcsMjI4MTksMjI4MjAsMjI4MjQsMjI4MzEsMjI4MzIsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDcsMjI4NTEsMjI4NTQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4OTEsMjI4OTMsMjI4OTUsMjI4OTgsMjI5MDEsMjI5MDIsMjI5''@;'; put 'put ''MDUsMjI5MDcsMjI5MDgsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MzAsMjI5MzMsMjI5MzUsMjI5NDMsMjI5NDgsMjI5NTEsMjI5NTcsMjI5NTgsMjI5NTksMjI5NjAsMjI5NjMsMjI5NjcsMjI5NzAsMjI5NzIsMjI5NzcsMjI5NzksMjI5ODAsMjI5ODQsMjI5ODYsMjI5ODksMjI5OTQsMjMwMDUs''@;'; put 'put ''MjMwMDYsMjMwMDcsMjMwMTEsMjMwMTIsMjMwMTUsMjMwMjIsMjMwMjMsMjMwMjUsMjMwMjYsMjMwMjgsMjMwMzEsMjMwNDAsMjMwNDQsMjMwNTIsMjMwNTMsMjMwNTQsMjMwNTgsMjMwNTksMjMwNzAsMjMwNzUsMjMwNzYsMjMwNzksMjMwODAsMjMwODIsMjMwODUsMjMwODgsMjMxMDgsMjMx''@;'; put 'put ''MDksMjMxMTEsMjMxMTIsMjMxMTYsMjMxMjAsMjMxMjUsMjMxMzQsMjMxMzksMjMxNDEsMjMxNDMsMjMxNDksMjMxNTksMjMxNjIsMjMxNjMsMjMxNjYsMjMxNzksMjMxODQsMjMxODcsMjMxOTAsMjMxOTMsMjMxOTYsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDIsMjMyMDcsMjMyMTIsMjMyMTcs''@;'; put 'put ''MjMyMTgsMjMyMTksMjMyMjEsMjMyMjQsMjMyMjYsMjMyMjcsMjMyMzEsMjMyMzYsMjMyMzgsMjMyNDAsMjMyNDcsMjMyNTgsMjMyNjAsMjMyNjQsMjMyNjksMjMyNzQsMjMyNzgsMjMyODUsMjMyODYsMjMyOTMsMjMyOTYsMjMyOTcsMjMzMDQsMjMzMTksMjMzNDgsMjMzMjEsMjMzMjMsMjMz''@;'; put 'put ''MjUsMjMzMjksMjMzMzMsMjMzNDEsMjMzNTIsMjMzNjEsMjMzNzEsMjMzNzIsMjMzNzgsMjMzODIsMjMzOTAsMjM0MDAsMjM0MDYsMjM0MDcsMjM0MjAsMjM0MjEsMjM0MjIsMjM0MjMsMjM0MjUsMjM0MjgsMjM0MzAsMjM0MzQsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDMsMjM0NDQsMjM0NDYs''@;'; put 'put ''MjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODQsMjM0ODgsMjM0ODksMjM1MDEsMjM1MDMsMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MjAsMjM1MzUsMjM1MzcsMjM1NDAsMjM1NDksMjM1NjQsMjM1NzUsMjM1ODIsMjM1''@;'; put 'put ''ODMsMjM1ODcsMjM1OTAsMjM1OTMsMjM1OTUsMjM1OTYsMjM1OTgsMjM2MDAsMjM2MDIsMjM2MDUsMjM2MDYsMjM2NDEsMjM2NDIsMjM2NDQsMjM2NTAsMjM2NTEsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NjEsMjM2NjQsMjM2NjgsMjM2NjksMjM2NzQsMjM2NzUsMjM2NzYsMjM2NzcsMjM2ODcs''@;'; put 'put ''MjM2ODgsMjM2OTAsMjM2OTUsMjM2OTgsMjM3MDksMjM3MTEsMjM3MTIsMjM3MTQsMjM3MTUsMjM3MTgsMjM3MjIsMjM3MzAsMjM3MzIsMjM3MzMsMjM3MzgsMjM3NTMsMjM3NTUsMjM3NjIsMjM3NzMsMjM3NjcsMjM3OTAsMjM3OTMsMjM3OTQsMjM3OTYsMjM4MDksMjM4MTQsMjM4MjEsMjM4''@;'; put 'put ''MjYsMjM4NTEsMjM4NDMsMjM4NDQsMjM4NDYsMjM4NDcsMjM4NTcsMjM4NjAsMjM4NjUsMjM4NjksMjM4NzEsMjM4NzQsMjM4NzUsMjM4NzgsMjM4ODAsMjM4OTMsMjM4ODksMjM4OTcsMjM4ODIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDgsMjM5MTQsMjM5MTcsMjM5MjAsMjM5Mjks''@;'; put 'put ''MjM5MzAsMjM5MzQsMjM5MzUsMjM5MzcsMjM5MzksMjM5NDQsMjM5NDYsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NjEsMjM5NjMsMjM5NjcsMjM5NjgsMjM5NzUsMjM5NzksMjM5ODQsMjM5ODgsMjM5OTIsMjM5OTMsMjQwMDMsMjQwMDcsMjQwMTEsMjQwMTYsMjQwMTQsMjQwMjQsMjQw''@;'; put 'put ''MjUsMjQwMzIsMjQwMzYsMjQwNDEsMjQwNTYsMjQwNTcsMjQwNjQsMjQwNzEsMjQwNzcsMjQwODIsMjQwODQsMjQwODUsMjQwODgsMjQwOTUsMjQwOTYsMjQxMTAsMjQxMDQsMjQxMTQsMjQxMTcsMjQxMjYsMjQxMzksMjQxNDQsMjQxMzcsMjQxNDUsMjQxNTAsMjQxNTIsMjQxNTUsMjQxNTYs''@;'; put 'put ''MjQxNTgsMjQxNjgsMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzYsMjQxOTIsMjQyMDMsMjQyMDYsMjQyMjYsMjQyMjgsMjQyMjksMjQyMzIsMjQyMzQsMjQyMzYsMjQyNDEsMjQyNDMsMjQyNTMsMjQyNTQsMjQyNTUsMjQyNjIsMjQyNjgsMjQyNjcsMjQyNzAsMjQyNzMsMjQy''@;'; put 'put ''NzQsMjQyNzYsMjQyNzcsMjQyODQsMjQyODYsMjQyOTMsMjQyOTksMjQzMjIsMjQzMjYsMjQzMjcsMjQzMjgsMjQzMzQsMjQzNDUsMjQzNDgsMjQzNDksMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzIsMjQzNzQsMjQzNzksMjQzODEs''@;'; put 'put ''MjQzODMsMjQzODQsMjQzODgsMjQzODksMjQzOTEsMjQzOTcsMjQ0MDAsMjQ0MDQsMjQ0MDgsMjQ0MTEsMjQ0MTYsMjQ0MTksMjQ0MjAsMjQ0MjMsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NTcsMjQ0NjEsMjQ0NjMsMjQ0NzAsMjQ0NzYsMjQ0''@;'; put 'put ''NzcsMjQ0ODIsMjQ0ODcsMjQ0OTEsMjQ0ODQsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ1MDQsMjQ1MTYsMjQ1MTksMjQ1MjAsMjQ1MjEsMjQ1MjMsMjQ1MjgsMjQ1MjksMjQ1MzAsMjQ1MzEsMjQ1MzIsMjQ1NDIsMjQ1NDUsMjQ1NDYsMjQ1NTIsMjQ1NTMsMjQ1NTQsMjQ1NTYsMjQ1NTcs''@;'; put 'put ''MjQ1NTgsMjQ1NTksMjQ1NjIsMjQ1NjMsMjQ1NjYsMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODYsMjQ1ODksMjQ1OTUsMjQ1OTYsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDcsMjQ2MTIsMjQ2MjEsMjQ2MjcsMjQ2MjksMjQ2NDAsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTIsMjQ2NTcsMjQ2NjAsMjQ2''@;'; put 'put ''NjIsMjQ2NjMsMjQ2NjksMjQ2NzMsMjQ2NzksMjQ2ODksMjQ3MDIsMjQ3MDMsMjQ3MDYsMjQ3MTAsMjQ3MTIsMjQ3MTQsMjQ3MTgsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjgsMjQ3MzMsMjQ3MzQsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDQsMjQ3NTIsMjQ3NTMsMjQ3NTksMjQ3NjMsMjQ3NjYs''@;'; put 'put ''MjQ3NzAsMjQ3NzIsMjQ3NzYsMjQ3NzcsMjQ3NzgsMjQ3NzksMjQ3ODIsMjQ3ODMsMjQ3ODgsMjQ3ODksMjQ3OTMsMjQ3OTUsMjQ3OTcsMjQ3OTgsMjQ4MDIsMjQ4MDUsMjQ4MTgsMjQ4MjEsMjQ4MjQsMjQ4MjgsMjQ4MjksMjQ4MzQsMjQ4MzksMjQ4NDIsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4''@;'; put 'put ''NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTcsMjQ4NjAsMjQ4NjIsMjQ4NjYsMjQ4NzQsMjQ4NzUsMjQ4ODAsMjQ4ODEsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODksMjQ4OTcsMjQ5MDEsMjQ5MDIsMjQ5MDUsMjQ5MjYsMjQ5MjgsMjQ5NDAsMjQ5NDYsMjQ5NTIsMjQ5NTUsMjQ5NTYs''@;'; put 'put ''MjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjMsMjQ5NjQsMjQ5NzEsMjQ5NzMsMjQ5NzgsMjQ5NzksMjQ5ODMsMjQ5ODQsMjQ5ODgsMjQ5ODksMjQ5OTEsMjQ5OTIsMjQ5OTcsMjVlMywyNTAwMiwyNTAwNSwyNTAxNiwyNTAxNywyNTAyMCwyNTAyNCwyNTAyNSwyNTAyNiwyNTAzOCwyNTAzOSwyNTA0''@;'; put 'put ''NSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NywyNTA1OCwyNTA2MywyNTA2NSwyNTA2MSwyNTA2OCwyNTA2OSwyNTA3MSwyNTA4OSwyNTA5MSwyNTA5MiwyNTA5NSwyNTEwNywyNTEwOSwyNTExNiwyNTEyMCwyNTEyMiwyNTEyMywyNTEyNywyNTEyOSwyNTEzMSwyNTE0NSwyNTE0OSwy''@;'; put 'put ''NTE1NCwyNTE1NSwyNTE1NiwyNTE1OCwyNTE2NCwyNTE2OCwyNTE2OSwyNTE3MCwyNTE3MiwyNTE3NCwyNTE3OCwyNTE4MCwyNTE4OCwyNTE5NywyNTE5OSwyNTIwMywyNTIxMCwyNTIxMywyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTI1NCwyNTI1NiwyNTI2NywyNTI3MCwyNTI3MSwyNTI3''@;'; put 'put ''NCwyNTI3OCwyNTI3OSwyNTI4NCwyNTI5NCwyNTMwMSwyNTMwMiwyNTMwNiwyNTMyMiwyNTMzMCwyNTMzMiwyNTM0MCwyNTM0MSwyNTM0NywyNTM0OCwyNTM1NCwyNTM1NSwyNTM1NywyNTM2MCwyNTM2MywyNTM2NiwyNTM2OCwyNTM4NSwyNTM4NiwyNTM4OSwyNTM5NywyNTM5OCwyNTQwMSwy''@;'; put 'put ''NTQwNCwyNTQwOSwyNTQxMCwyNTQxMSwyNTQxMiwyNTQxNCwyNTQxOCwyNTQxOSwyNTQyMiwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMiwyNTQzNSwyNTQ0NSwyNTQ0NiwyNTQ1MiwyNTQ1MywyNTQ1NywyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2OCwyNTQ2OSwyNTQ3MSwyNTQ3NCwyNTQ3NiwyNTQ3''@;'; put 'put ''OSwyNTQ4MiwyNTQ4OCwyNTQ5MiwyNTQ5MywyNTQ5NywyNTQ5OCwyNTUwMiwyNTUwOCwyNTUxMCwyNTUxNywyNTUxOCwyNTUxOSwyNTUzMywyNTUzNywyNTU0MSwyNTU0NCwyNTU1MCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU2NCwyNTU2OCwyNTU3MywyNTU3OCwyNTU4MCwyNTU4Niwy''@;'; put 'put ''NTU4NywyNTU4OSwyNTU5MiwyNTU5MywyNTYwOSwyNTYxMCwyNTYxNiwyNTYxOCwyNTYyMCwyNTYyNCwyNTYzMCwyNTYzMiwyNTYzNCwyNTYzNiwyNTYzNywyNTY0MSwyNTY0MiwyNTY0NywyNTY0OCwyNTY1MywyNTY2MSwyNTY2MywyNTY3NSwyNTY3OSwyNTY4MSwyNTY4MiwyNTY4MywyNTY4''@;'; put 'put ''NCwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OSwyNTcwOSwyNTcxNSwyNTcxNiwyNTcyMywyNTcyNSwyNTczMywyNTczNSwyNTc0MywyNTc0NCwyNTc0NSwyNTc1MiwyNTc1MywyNTc1NSwyNTc1NywyNTc1OSwyNTc2MSwyNTc2MywyNTc2NiwyNTc2OCwy''@;'; put 'put ''NTc3MiwyNTc3OSwyNTc4OSwyNTc5MCwyNTc5MSwyNTc5NiwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNiwyNTgwOCwyNTgwOSwyNTgxMywyNTgxNSwyNTgyOCwyNTgyOSwyNTgzMywyNTgzNCwyNTgzNywyNTg0MCwyNTg0NSwyNTg0NywyNTg1MSwyNTg1NSwyNTg1NywyNTg2MCwyNTg2''@;'; put 'put ''NCwyNTg2NSwyNTg2NiwyNTg3MSwyNTg3NSwyNTg3NiwyNTg3OCwyNTg4MSwyNTg4MywyNTg4NiwyNTg4NywyNTg5MCwyNTg5NCwyNTg5NywyNTkwMiwyNTkwNSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMywyNTkyNywyNTkyOSwyNTkzNiwyNTkzOCwyNTk0MCwyNTk1MSwyNTk1MiwyNTk1OSwy''@;'; put 'put ''NTk2MywyNTk3OCwyNTk4MSwyNTk4NSwyNTk4OSwyNTk5NCwyNjAwMiwyNjAwNSwyNjAwOCwyNjAxMywyNjAxNiwyNjAxOSwyNjAyMiwyNjAzMCwyNjAzNCwyNjAzNSwyNjAzNiwyNjA0NywyNjA1MCwyNjA1NiwyNjA1NywyNjA2MiwyNjA2NCwyNjA2OCwyNjA3MCwyNjA3MiwyNjA3OSwyNjA5''@;'; put 'put ''NiwyNjA5OCwyNjEwMCwyNjEwMSwyNjEwNSwyNjExMCwyNjExMSwyNjExMiwyNjExNiwyNjEyMCwyNjEyMSwyNjEyNSwyNjEyOSwyNjEzMCwyNjEzMywyNjEzNCwyNjE0MSwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwy''@;'; put 'put ''NjE2MCwyNjE2MSwyNjE2MywyNjE2OSwyNjE2NywyNjE3NiwyNjE4MSwyNjE4MiwyNjE4NiwyNjE4OCwyNjE5MywyNjE5MCwyNjE5OSwyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwOCwyNjIwOSwyNjM2MywyNjIxOCwyNjIxOSwyNjIyMCwyNjIzOCwyNjIyNywyNjIyOSwyNjIzOSwyNjIz''@;'; put 'put ''MSwyNjIzMiwyNjIzMywyNjIzNSwyNjI0MCwyNjIzNiwyNjI1MSwyNjI1MiwyNjI1MywyNjI1NiwyNjI1OCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MSwyNjI3MiwyNjI3NiwyNjI4NSwyNjI4OSwyNjI5MCwyNjI5MywyNjI5OSwyNjMwMywyNjMwNCwyNjMwNiwyNjMwNywyNjMxMiwy''@;'; put 'put ''NjMxNiwyNjMxOCwyNjMxOSwyNjMyNCwyNjMzMSwyNjMzNSwyNjM0NCwyNjM0NywyNjM0OCwyNjM1MCwyNjM2MiwyNjM3MywyNjM3NSwyNjM4MiwyNjM4NywyNjM5MywyNjM5NiwyNjQwMCwyNjQwMiwyNjQxOSwyNjQzMCwyNjQzNywyNjQzOSwyNjQ0MCwyNjQ0NCwyNjQ1MiwyNjQ1MywyNjQ2''@;'; put 'put ''MSwyNjQ3MCwyNjQ3NiwyNjQ3OCwyNjQ4NCwyNjQ4NiwyNjQ5MSwyNjQ5NywyNjUwMCwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNSwyNjUxOCwyNjUyMCwyNjUyMSwyNjUyMywyNjU0NCwyNjU0NSwyNjU0NiwyNjU0OSwyNjU1NSwyNjU1NiwyNjU1NywyNjYxNywyNjU2MCwyNjU2MiwyNjU2Mywy''@;'; put 'put ''NjU2NSwyNjU2OCwyNjU2OSwyNjU3OCwyNjU4MywyNjU4NSwyNjU4OCwyNjU5MywyNjU5OCwyNjYwOCwyNjYxMCwyNjYxNCwyNjYxNSwyNjcwNiwyNjY0NCwyNjY0OSwyNjY1MywyNjY1NSwyNjY2NCwyNjY2MywyNjY2OCwyNjY2OSwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NSwyNjY4MywyNjY4''@;'; put 'put ''NywyNjY5MiwyNjY5MywyNjY5OCwyNjcwMCwyNjcwOSwyNjcxMSwyNjcxMiwyNjcxNSwyNjczMSwyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjc0MSwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc1NCwyNjc1NiwyNjc1OCwyNjc2MCwyNjc3NCwyNjc3NiwyNjc3OCwyNjc4MCwy''@;'; put 'put ''Njc4NSwyNjc4NywyNjc4OSwyNjc5MywyNjc5NCwyNjc5OCwyNjgwMiwyNjgxMSwyNjgyMSwyNjgyNCwyNjgyOCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzOCwyNjg0MSwyNjg0NCwyNjg0NSwyNjg1MywyNjg1NiwyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2NCwyNjg2NSwyNjg2''@;'; put 'put ''OSwyNjg3MCwyNjg3NSwyNjg3NiwyNjg3NywyNjg4NiwyNjg4OSwyNjg5MCwyNjg5NiwyNjg5NywyNjg5OSwyNjkwMiwyNjkwMywyNjkyOSwyNjkzMSwyNjkzMywyNjkzNiwyNjkzOSwyNjk0NiwyNjk0OSwyNjk1MywyNjk1OCwyNjk2NywyNjk3MSwyNjk3OSwyNjk4MCwyNjk4MSwyNjk4Miwy''@;'; put 'put ''Njk4NCwyNjk4NSwyNjk4OCwyNjk5MiwyNjk5MywyNjk5NCwyNzAwMiwyNzAwMywyNzAwNywyNzAwOCwyNzAyMSwyNzAyNiwyNzAzMCwyNzAzMiwyNzA0MSwyNzA0NSwyNzA0NiwyNzA0OCwyNzA1MSwyNzA1MywyNzA1NSwyNzA2MywyNzA2NCwyNzA2NiwyNzA2OCwyNzA3NywyNzA4MCwyNzA4''@;'; put 'put ''OSwyNzA5NCwyNzA5NSwyNzEwNiwyNzEwOSwyNzExOCwyNzExOSwyNzEyMSwyNzEyMywyNzEyNSwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOSwyNzE1MSwyNzE1MywyNzE1NywyNzE2MiwyNzE2NSwyNzE2OCwyNzE3MiwyNzE3NiwyNzE4NCwyNzE4NiwyNzE4OCwyNzE5MSwyNzE5NSwyNzE5OCwy''@;'; put 'put ''NzE5OSwyNzIwNSwyNzIwNiwyNzIwOSwyNzIxMCwyNzIxNCwyNzIxNiwyNzIxNywyNzIxOCwyNzIyMSwyNzIyMiwyNzIyNywyNzIzNiwyNzIzOSwyNzI0MiwyNzI0OSwyNzI1MSwyNzI2MiwyNzI2NSwyNzI2NywyNzI3MCwyNzI3MSwyNzI3MywyNzI3NSwyNzI4MSwyNzI5MSwyNzI5MywyNzI5''@;'; put 'put ''NCwyNzI5NSwyNzMwMSwyNzMwNywyNzMxMSwyNzMxMiwyNzMxMywyNzMxNiwyNzMyNSwyNzMyNiwyNzMyNywyNzMzNCwyNzMzNywyNzMzNiwyNzM0MCwyNzM0NCwyNzM0OCwyNzM0OSwyNzM1MCwyNzM1NiwyNzM1NywyNzM2NCwyNzM2NywyNzM3MiwyNzM3NiwyNzM3NywyNzM3OCwyNzM4OCwy''@;'; put 'put ''NzM4OSwyNzM5NCwyNzM5NSwyNzM5OCwyNzM5OSwyNzQwMSwyNzQwNywyNzQwOCwyNzQwOSwyNzQxNSwyNzQxOSwyNzQyMiwyNzQyOCwyNzQzMiwyNzQzNSwyNzQzNiwyNzQzOSwyNzQ0NSwyNzQ0NiwyNzQ1MSwyNzQ1NSwyNzQ2MiwyNzQ2NiwyNzQ2OSwyNzQ3NCwyNzQ3OCwyNzQ4MCwyNzQ4''@;'; put 'put ''NSwyNzQ4OCwyNzQ5NSwyNzQ5OSwyNzUwMiwyNzUwNCwyNzUwOSwyNzUxNywyNzUxOCwyNzUyMiwyNzUyNSwyNzU0MywyNzU0NywyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU2MCwyNzU2MSwyNzU2NCwyNzU2NSwyNzU2NiwyNzU2OCwyNzU3NiwyNzU3NywyNzU4MSwyNzU4MiwyNzU4Nywy''@;'; put 'put ''NzU4OCwyNzU5MywyNzU5NiwyNzYwNiwyNzYxMCwyNzYxNywyNzYxOSwyNzYyMiwyNzYyMywyNzYzMCwyNzYzMywyNzYzOSwyNzY0MSwyNzY0NywyNzY1MCwyNzY1MiwyNzY1MywyNzY1NywyNzY2MSwyNzY2MiwyNzY2NCwyNzY2NiwyNzY3MywyNzY3OSwyNzY4NiwyNzY4NywyNzY4OCwyNzY5''@;'; put 'put ''MiwyNzY5NCwyNzY5OSwyNzcwMSwyNzcwMiwyNzcwNiwyNzcwNywyNzcxMSwyNzcyMiwyNzcyMywyNzcyNSwyNzcyNywyNzczMCwyNzczMiwyNzczNywyNzczOSwyNzc0MCwyNzc1NSwyNzc1NywyNzc1OSwyNzc2NCwyNzc2NiwyNzc2OCwyNzc2OSwyNzc3MSwyNzc4MSwyNzc4MiwyNzc4Mywy''@;'; put 'put ''Nzc4NSwyNzc5NiwyNzc5NywyNzc5OSwyNzgwMCwyNzgwNCwyNzgwNywyNzgyNCwyNzgyNiwyNzgyOCwyNzg0MiwyNzg0NiwyNzg1MywyNzg1NSwyNzg1NiwyNzg1NywyNzg1OCwyNzg2MCwyNzg2MiwyNzg2NiwyNzg2OCwyNzg3MiwyNzg3OSwyNzg4MSwyNzg4MywyNzg4NCwyNzg4NiwyNzg5''@;'; put 'put ''MCwyNzg5MiwyNzkwOCwyNzkxMSwyNzkxNCwyNzkxOCwyNzkxOSwyNzkyMSwyNzkyMywyNzkzMCwyNzk0MiwyNzk0MywyNzk0NCwyNzc1MSwyNzk1MCwyNzk1MSwyNzk1MywyNzk2MSwyNzk2NCwyNzk2NywyNzk5MSwyNzk5OCwyNzk5OSwyODAwMSwyODAwNSwyODAwNywyODAxNSwyODAxNiwy''@;'; put 'put ''ODAyOCwyODAzNCwyODAzOSwyODA0OSwyODA1MCwyODA1MiwyODA1NCwyODA1NSwyODA1NiwyODA3NCwyODA3NiwyODA4NCwyODA4NywyODA4OSwyODA5MywyODA5NSwyODEwMCwyODEwNCwyODEwNiwyODExMCwyODExMSwyODExOCwyODEyMywyODEyNSwyODEyNywyODEyOCwyODEzMCwyODEz''@;'; put 'put ''MywyODEzNywyODE0MywyODE0NCwyODE0OCwyODE1MCwyODE1NiwyODE2MCwyODE2NCwyODE5MCwyODE5NCwyODE5OSwyODIxMCwyODIxNCwyODIxNywyODIxOSwyODIyMCwyODIyOCwyODIyOSwyODIzMiwyODIzMywyODIzNSwyODIzOSwyODI0MSwyODI0MiwyODI0MywyODI0NCwyODI0Nywy''@;'; put 'put ''ODI1MiwyODI1MywyODI1NCwyODI1OCwyODI1OSwyODI2NCwyODI3NSwyODI4MywyODI4NSwyODMwMSwyODMwNywyODMxMywyODMyMCwyODMyNywyODMzMywyODMzNCwyODMzNywyODMzOSwyODM0NywyODM1MSwyODM1MiwyODM1MywyODM1NSwyODM1OSwyODM2MCwyODM2MiwyODM2NSwyODM2''@;'; put 'put ''NiwyODM2NywyODM5NSwyODM5NywyODM5OCwyODQwOSwyODQxMSwyODQxMywyODQyMCwyODQyNCwyODQyNiwyODQyOCwyODQyOSwyODQzOCwyODQ0MCwyODQ0MiwyODQ0MywyODQ1NCwyODQ1NywyODQ1OCwyODQ2MywyODQ2NCwyODQ2NywyODQ3MCwyODQ3NSwyODQ3NiwyODQ2MSwyODQ5NSwy''@;'; put 'put ''ODQ5NywyODQ5OCwyODQ5OSwyODUwMywyODUwNSwyODUwNiwyODUwOSwyODUxMCwyODUxMywyODUxNCwyODUyMCwyODUyNCwyODU0MSwyODU0MiwyODU0NywyODU1MSwyODU1MiwyODU1NSwyODU1NiwyODU1NywyODU2MCwyODU2MiwyODU2MywyODU2NCwyODU2NiwyODU3MCwyODU3NSwyODU3''@;'; put 'put ''NiwyODU4MSwyODU4MiwyODU4MywyODU4NCwyODU5MCwyODU5MSwyODU5MiwyODU5NywyODU5OCwyODYwNCwyODYxMywyODYxNSwyODYxNiwyODYxOCwyODYzNCwyODYzOCwyODY0OCwyODY0OSwyODY1NiwyODY2MSwyODY2NSwyODY2OCwyODY2OSwyODY3MiwyODY3NywyODY3OCwyODY3OSwy''@;'; put 'put ''ODY4NSwyODY5NSwyODcwNCwyODcwNywyODcxOSwyODcyNCwyODcyNywyODcyOSwyODczMiwyODczOSwyODc0MCwyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc1NiwyODc1NywyODc2NSwyODc2NiwyODc1MCwyODc3MiwyODc3MywyODc4MCwyODc4MiwyODc4OSwyODc5MCwyODc5OCwyODgw''@;'; put 'put ''MSwyODgwNSwyODgwNiwyODgyMCwyODgyMSwyODgyMiwyODgyMywyODgyNCwyODgyNywyODgzNiwyODg0MywyODg0OCwyODg0OSwyODg1MiwyODg1NSwyODg3NCwyODg4MSwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4OCwyODg5MiwyODkwMCwyODkyMiwyODkzMSwyODkzMiwyODkzMywy''@;'; put 'put ''ODkzNCwyODkzNSwyODkzOSwyODk0MCwyODk0MywyODk1OCwyODk2MCwyODk3MSwyODk3MywyODk3NSwyODk3NiwyODk3NywyODk4NCwyODk5MywyODk5NywyODk5OCwyODk5OSwyOTAwMiwyOTAwMywyOTAwOCwyOTAxMCwyOTAxNSwyOTAxOCwyOTAyMCwyOTAyMiwyOTAyNCwyOTAzMiwyOTA0''@;'; put 'put ''OSwyOTA1NiwyOTA2MSwyOTA2MywyOTA2OCwyOTA3NCwyOTA4MiwyOTA4MywyOTA4OCwyOTA5MCwyOTEwMywyOTEwNCwyOTEwNiwyOTEwNywyOTExNCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyNCwyOTEzMSwyOTEzMiwyOTEzOSwyOTE0MiwyOTE0NSwyOTE0NiwyOTE0OCwyOTE3NiwyOTE4Miwy''@;'; put 'put ''OTE4NCwyOTE5MSwyOTE5MiwyOTE5MywyOTIwMywyOTIwNywyOTIxMCwyOTIxMywyOTIxNSwyOTIyMCwyOTIyNywyOTIzMSwyOTIzNiwyOTI0MCwyOTI0MSwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MywyOTI2MiwyOTI2MywyOTI2NCwyOTI2NywyOTI2OSwyOTI3MCwyOTI3NCwyOTI3NiwyOTI3''@;'; put 'put ''OCwyOTI4MCwyOTI4MywyOTI4OCwyOTI5MSwyOTI5NCwyOTI5NSwyOTI5NywyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMxMSwyOTMxNiwyOTMyMSwyOTMyNSwyOTMyNiwyOTMzMSwyOTMzOSwyOTM1MiwyOTM1NywyOTM1OCwyOTM2MSwyOTM2NCwyOTM3NCwyOTM3NywyOTM4MywyOTM4NSwy''@;'; put 'put ''OTM4OCwyOTM5NywyOTM5OCwyOTQwMCwyOTQwNywyOTQxMywyOTQyNywyOTQyOCwyOTQzNCwyOTQzNSwyOTQzOCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NywyOTQ1MSwyOTQ1MywyOTQ1OCwyOTQ1OSwyOTQ2NCwyOTQ2NSwyOTQ3MCwyOTQ3NCwyOTQ3NiwyOTQ3OSwyOTQ4MCwyOTQ4NCwyOTQ4''@;'; put 'put ''OSwyOTQ5MCwyOTQ5MywyOTQ5OCwyOTQ5OSwyOTUwMSwyOTUwNywyOTUxNywyOTUyMCwyOTUyMiwyOTUyNiwyOTUyOCwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNiwyOTU0MiwyOTU0MywyOTU0NSwyOTU0NywyOTU0OCwyOTU1MCwyOTU1MSwyOTU1MywyOTU1OSwyOTU2MSwyOTU2NCwyOTU2OCwy''@;'; put 'put ''OTU2OSwyOTU3MSwyOTU3MywyOTU3NCwyOTU4MiwyOTU4NCwyOTU4NywyOTU4OSwyOTU5MSwyOTU5MiwyOTU5NiwyOTU5OCwyOTU5OSwyOTYwMCwyOTYwMiwyOTYwNSwyOTYwNiwyOTYxMCwyOTYxMSwyOTYxMywyOTYyMSwyOTYyMywyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMSwyOTYzNywyOTYz''@;'; put 'put ''OCwyOTY0MSwyOTY0MywyOTY0NCwyOTY0NywyOTY1MCwyOTY1MSwyOTY1NCwyOTY1NywyOTY2MSwyOTY2NSwyOTY2NywyOTY3MCwyOTY3MSwyOTY3MywyOTY4NCwyOTY4NSwyOTY4NywyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MywyOTY5NSwyOTY5NiwyOTY5NywyOTcwMCwyOTcwMywyOTcwNiwy''@;'; put 'put ''OTcxMywyOTcyMiwyOTcyMywyOTczMiwyOTczNCwyOTczNiwyOTczNywyOTczOCwyOTczOSwyOTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0NCwyOTc0NSwyOTc1MywyOTc2MCwyOTc2MywyOTc2NCwyOTc2NiwyOTc2NywyOTc3MSwyOTc3MywyOTc3NywyOTc3OCwyOTc4MywyOTc4OSwyOTc5''@;'; put 'put ''NCwyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMywyOTgwNSwyOTgwNiwyOTgwOSwyOTgxMCwyOTgyNCwyOTgyNSwyOTgyOSwyOTgzMCwyOTgzMSwyOTgzMywyOTgzOSwyOTg0MCwyOTg0MSwyOTg0MiwyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MiwyOTg1NSwyOTg1NiwyOTg1NywyOTg1OSwyOTg2Miwy''@;'; put 'put ''OTg2NCwyOTg2NSwyOTg2NiwyOTg2NywyOTg3MCwyOTg3MSwyOTg3MywyOTg3NCwyOTg3NywyOTg4MSwyOTg4MywyOTg4NywyOTg5NiwyOTg5NywyOTkwMCwyOTkwNCwyOTkwNywyOTkxMiwyOTkxNCwyOTkxNSwyOTkxOCwyOTkxOSwyOTkyNCwyOTkyOCwyOTkzMCwyOTkzMSwyOTkzNSwyOTk0''@;'; put 'put ''MCwyOTk0NiwyOTk0NywyOTk0OCwyOTk1MSwyOTk1OCwyOTk3MCwyOTk3NCwyOTk3NSwyOTk4NCwyOTk4NSwyOTk4OCwyOTk5MSwyOTk5MywyOTk5NCwyOTk5OSwzMDAwNiwzMDAwOSwzMDAxMywzMDAxNCwzMDAxNSwzMDAxNiwzMDAxOSwzMDAyMywzMDAyNCwzMDAzMCwzMDAzMiwzMDAzNCwz''@;'; put 'put ''MDAzOSwzMDA0NiwzMDA0NywzMDA0OSwzMDA2MywzMDA2NSwzMDA3MywzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MSwzMDA4NSwzMDA5NiwzMDA5OCwzMDA5OSwzMDEwMSwzMDEwNSwzMDEwOCwzMDExNCwzMDExNiwzMDEzMiwzMDEzOCwzMDE0MywzMDE0NCwzMDE0NSwzMDE0''@;'; put 'put ''OCwzMDE1MCwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2NywzMDE3MiwzMDE3NSwzMDE3NiwzMDE3NywzMDE4MCwzMDE4MywzMDE4OCwzMDE5MCwzMDE5MSwzMDE5MywzMDIwMSwzMDIwOCwzMDIxMCwzMDIxMSwzMDIxMiwzMDIxNSwzMDIxNiwzMDIxOCwzMDIyMCwzMDIyMywzMDIyNiwzMDIyNywz''@;'; put 'put ''MDIyOSwzMDIzMCwzMDIzMywzMDIzNSwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MywzMDI0NSwzMDI0NiwzMDI0OSwzMDI1MywzMDI1OCwzMDI1OSwzMDI2MSwzMDI2NCwzMDI2NSwzMDI2NiwzMDI2OCwzMDI4MiwzMDI3MiwzMDI3MywzMDI3NSwzMDI3NiwzMDI3NywzMDI4MSwzMDI4MywzMDI5''@;'; put 'put ''MywzMDI5NywzMDMwMywzMDMwOCwzMDMwOSwzMDMxNywzMDMxOCwzMDMxOSwzMDMyMSwzMDMyNCwzMDMzNywzMDM0MSwzMDM0OCwzMDM0OSwzMDM1NywzMDM2MywzMDM2NCwzMDM2NSwzMDM2NywzMDM2OCwzMDM3MCwzMDM3MSwzMDM3MiwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3OCwz''@;'; put 'put ''MDM4MSwzMDM5NywzMDQwMSwzMDQwNSwzMDQwOSwzMDQxMSwzMDQxMiwzMDQxNCwzMDQyMCwzMDQyNSwzMDQzMiwzMDQzOCwzMDQ0MCwzMDQ0NCwzMDQ0OCwzMDQ0OSwzMDQ1NCwzMDQ1NywzMDQ2MCwzMDQ2NCwzMDQ3MCwzMDQ3NCwzMDQ3OCwzMDQ4MiwzMDQ4NCwzMDQ4NSwzMDQ4NywzMDQ4''@;'; put 'put ''OSwzMDQ5MCwzMDQ5MiwzMDQ5OCwzMDUwNCwzMDUwOSwzMDUxMCwzMDUxMSwzMDUxNiwzMDUxNywzMDUxOCwzMDUyMSwzMDUyNSwzMDUyNiwzMDUzMCwzMDUzMywzMDUzNCwzMDUzOCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU1MCwzMDU1MSwzMDU1NiwzMDU1OCwzMDU1OSwzMDU2MCwz''@;'; put 'put ''MDU2MiwzMDU2NCwzMDU2NywzMDU3MCwzMDU3MiwzMDU3NiwzMDU3OCwzMDU3OSwzMDU4MCwzMDU4NiwzMDU4OSwzMDU5MiwzMDU5NiwzMDYwNCwzMDYwNSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxOCwzMDYyMywzMDYyNiwzMDYzMSwzMDYzNCwzMDYzOCwzMDYzOSwzMDY0MSwzMDY0NSwzMDY1''@;'; put 'put ''NCwzMDY1OSwzMDY2NSwzMDY3MywzMDY3NCwzMDY3NywzMDY4MSwzMDY4NiwzMDY4NywzMDY4OCwzMDY5MiwzMDY5NCwzMDY5OCwzMDcwMCwzMDcwNCwzMDcwNSwzMDcwOCwzMDcxMiwzMDcxNSwzMDcyNSwzMDcyNiwzMDcyOSwzMDczMywzMDczNCwzMDczNywzMDc0OSwzMDc1MywzMDc1NCwz''@;'; put 'put ''MDc1NSwzMDc2NSwzMDc2NiwzMDc2OCwzMDc3MywzMDc3NSwzMDc4NywzMDc4OCwzMDc5MSwzMDc5MiwzMDc5NiwzMDc5OCwzMDgwMiwzMDgxMiwzMDgxNCwzMDgxNiwzMDgxNywzMDgxOSwzMDgyMCwzMDgyNCwzMDgyNiwzMDgzMCwzMDg0MiwzMDg0NiwzMDg1OCwzMDg2MywzMDg2OCwzMDg3''@;'; put 'put ''MiwzMDg4MSwzMDg3NywzMDg3OCwzMDg3OSwzMDg4NCwzMDg4OCwzMDg5MiwzMDg5MywzMDg5NiwzMDg5NywzMDg5OCwzMDg5OSwzMDkwNywzMDkwOSwzMDkxMSwzMDkxOSwzMDkyMCwzMDkyMSwzMDkyNCwzMDkyNiwzMDkzMCwzMDkzMSwzMDkzMywzMDkzNCwzMDk0OCwzMDkzOSwzMDk0Mywz''@;'; put 'put ''MDk0NCwzMDk0NSwzMDk1MCwzMDk1NCwzMDk2MiwzMDk2MywzMDk3NiwzMDk2NiwzMDk2NywzMDk3MCwzMDk3MSwzMDk3NSwzMDk4MiwzMDk4OCwzMDk5MiwzMTAwMiwzMTAwNCwzMTAwNiwzMTAwNywzMTAwOCwzMTAxMywzMTAxNSwzMTAxNywzMTAyMSwzMTAyNSwzMTAyOCwzMTAyOSwzMTAz''@;'; put 'put ''NSwzMTAzNywzMTAzOSwzMTA0NCwzMTA0NSwzMTA0NiwzMTA1MCwzMTA1MSwzMTA1NSwzMTA1NywzMTA2MCwzMTA2NCwzMTA2NywzMTA2OCwzMTA3OSwzMTA4MSwzMTA4MywzMTA5MCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMiwzMTExNSwzMTExNiwzMTEyMSwzMTEyMywzMTEyNCwzMTEyNSwz''@;'; put 'put ''MTEyNiwzMTEyOCwzMTEzMSwzMTEzMiwzMTEzNywzMTE0NCwzMTE0NSwzMTE0NywzMTE1MSwzMTE1MywzMTE1NiwzMTE2MCwzMTE2MywzMTE3MCwzMTE3MiwzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MywzMTE4OCwzMTE5MCwzMTE5NCwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMiwzMTIwNSwzMTIx''@;'; put 'put ''MCwzMTIxMSwzMTIxMywzMTIxNywzMTIyNCwzMTIyOCwzMTIzNCwzMTIzNSwzMTIzOSwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0OSwzMTI1MywzMTI1OSwzMTI2MiwzMTI2NSwzMTI3MSwzMTI3NSwzMTI3NywzMTI3OSwzMTI4MCwzMTI4NCwzMTI4NSwzMTI4OCwzMTI4OSwzMTI5MCwzMTMwMCwz''@;'; put 'put ''MTMwMSwzMTMwMywzMTMwNCwzMTMwOCwzMTMxNywzMTMxOCwzMTMyMSwzMTMyNCwzMTMyNSwzMTMyNywzMTMyOCwzMTMzMywzMTMzNSwzMTMzOCwzMTM0MSwzMTM0OSwzMTM1MiwzMTM1OCwzMTM2MCwzMTM2MiwzMTM2NSwzMTM2NiwzMTM3MCwzMTM3MSwzMTM3NiwzMTM3NywzMTM4MCwzMTM5''@;'; put 'put ''MCwzMTM5MiwzMTM5NSwzMTQwNCwzMTQxMSwzMTQxMywzMTQxNywzMTQxOSwzMTQyMCwzMTQzMCwzMTQzMywzMTQzNiwzMTQzOCwzMTQ0MSwzMTQ1MSwzMTQ2NCwzMTQ2NSwzMTQ2NywzMTQ2OCwzMTQ3MywzMTQ3NiwzMTQ4MywzMTQ4NSwzMTQ4NiwzMTQ5NSwzMTUwOCwzMTUxOSwzMTUyMywz''@;'; put 'put ''MTUyNywzMTUyOSwzMTUzMCwzMTUzMSwzMTUzMywzMTUzNCwzMTUzNSwzMTUzNiwzMTUzNywzMTU0MCwzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1OSwzMTU2NiwzMTU3MywzMTU4NCwzMTU4OCwzMTU5MCwzMTU5MywzMTU5NCwzMTU5NywzMTU5OSwzMTYwMiwzMTYwMywzMTYwNywzMTYy''@;'; put 'put ''MCwzMTYyNSwzMTYzMCwzMTYzMiwzMTYzMywzMTYzOCwzMTY0MywzMTY0NiwzMTY0OCwzMTY1MywzMTY2MCwzMTY2MywzMTY2NCwzMTY2NiwzMTY2OSwzMTY3MCwzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY4MiwzMTY4NSwzMTY4OCwzMTY5MCwzMTcwMCwzMTcwMiwzMTcwMywzMTcwNSwz''@;'; put 'put ''MTcwNiwzMTcwNywzMTcyMCwzMTcyMiwzMTczMCwzMTczMiwzMTczMywzMTczNiwzMTczNywzMTczOCwzMTc0MCwzMTc0MiwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc1MCwzMTc1MywzMTc1NSwzMTc1NiwzMTc1OCwzMTc1OSwzMTc2OSwzMTc3MSwzMTc3NiwzMTc4MSwzMTc4MiwzMTc4''@;'; put 'put ''NCwzMTc4OCwzMTc5MywzMTc5NSwzMTc5NiwzMTc5OCwzMTgwMSwzMTgwMiwzMTgxNCwzMTgxOCwzMTgyOSwzMTgyNSwzMTgyNiwzMTgyNywzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTg0MSwzMTg0MywzMTg0NywzMTg0OSwzMTg1MywzMTg1NCwzMTg1NiwzMTg1OCwz''@;'; put 'put ''MTg2NSwzMTg2OCwzMTg2OSwzMTg3OCwzMTg3OSwzMTg4NywzMTg5MiwzMTkwMiwzMTkwNCwzMTkxMCwzMTkyMCwzMTkyNiwzMTkyNywzMTkzMCwzMTkzMSwzMTkzMiwzMTkzNSwzMTk0MCwzMTk0MywzMTk0NCwzMTk0NSwzMTk0OSwzMTk1MSwzMTk1NSwzMTk1NiwzMTk1NywzMTk1OSwzMTk2''@;'; put 'put ''MSwzMTk2MiwzMTk2NSwzMTk3NCwzMTk3NywzMTk3OSwzMTk4OSwzMjAwMywzMjAwNywzMjAwOCwzMjAwOSwzMjAxNSwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMiwzMjAyOSwzMjAzMCwzMjAzNSwzMjAzOCwzMjA0MiwzMjA0NSwzMjA0OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2NCwzMjA2NSwz''@;'; put 'put ''MjA3MSwzMjA3MiwzMjA3NywzMjA4MSwzMjA4MywzMjA4NywzMjA4OSwzMjA5MCwzMjA5MiwzMjA5MywzMjEwMSwzMjEwMywzMjEwNiwzMjExMiwzMjEyMCwzMjEyMiwzMjEyMywzMjEyNywzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMywzMjEzNCwzMjEzNiwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0''@;'; put 'put ''NSwzMjE1MCwzMjE1MSwzMjE1NywzMjE1OCwzMjE2NiwzMjE2NywzMjE3MCwzMjE3OSwzMjE4MiwzMjE4MywzMjE4NSwzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjIwNCwzMjIwNSwzMjIwNiwzMjIxNSwzMjIxNywzMjI1NiwzMjIyNiwzMjIyOSwzMjIzMCwzMjIzNCwzMjIzNSwz''@;'; put 'put ''MjIzNywzMjI0MSwzMjI0NSwzMjI0NiwzMjI0OSwzMjI1MCwzMjI2NCwzMjI3MiwzMjI3MywzMjI3NywzMjI3OSwzMjI4NCwzMjI4NSwzMjI4OCwzMjI5NSwzMjI5NiwzMjMwMCwzMjMwMSwzMjMwMywzMjMwNywzMjMxMCwzMjMxOSwzMjMyNCwzMjMyNSwzMjMyNywzMjMzNCwzMjMzNiwzMjMz''@;'; put 'put ''OCwzMjM0NCwzMjM1MSwzMjM1MywzMjM1NCwzMjM1NywzMjM2MywzMjM2NiwzMjM2NywzMjM3MSwzMjM3NiwzMjM4MiwzMjM4NSwzMjM5MCwzMjM5MSwzMjM5NCwzMjM5NywzMjQwMSwzMjQwNSwzMjQwOCwzMjQxMCwzMjQxMywzMjQxNCwzMjU3MiwzMjU3MSwzMjU3MywzMjU3NCwzMjU3NSwz''@;'; put 'put ''MjU3OSwzMjU4MCwzMjU4MywzMjU5MSwzMjU5NCwzMjU5NSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwOSwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYyMSwzMjYyNSwzMjYzNywzMjYzOCwzMjYzOSwzMjY0MCwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY2MiwzMjY2MywzMjY2''@;'; put 'put ''OCwzMjY3MywzMjY3NCwzMjY3OCwzMjY4MiwzMjY4NSwzMjY5MiwzMjcwMCwzMjcwMywzMjcwNCwzMjcwNywzMjcxMiwzMjcxOCwzMjcxOSwzMjczMSwzMjczNSwzMjczOSwzMjc0MSwzMjc0NCwzMjc0OCwzMjc1MCwzMjc1MSwzMjc1NCwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3NSwz''@;'; put 'put ''Mjc3NiwzMjc3OCwzMjc4MSwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc4OCwzMjc5MCwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMCwzMjgwNCwzMjgwNiwzMjgxMiwzMjgxNCwzMjgxNiwzMjgyMCwzMjgyMSwzMjgyMywzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzNiwzMjg2''@;'; put 'put ''NCwzMjg2OCwzMjg3MCwzMjg3NywzMjg4MSwzMjg4NSwzMjg5NywzMjkwNCwzMjkxMCwzMjkyNCwzMjkyNiwzMjkzNCwzMjkzNSwzMjkzOSwzMjk1MiwzMjk1MywzMjk2OCwzMjk3MywzMjk3NSwzMjk3OCwzMjk4MCwzMjk4MSwzMjk4MywzMjk4NCwzMjk5MiwzMzAwNSwzMzAwNiwzMzAwOCwz''@;'; put 'put ''MzAxMCwzMzAxMSwzMzAxNCwzMzAxNywzMzAxOCwzMzAyMiwzMzAyNywzMzAzNSwzMzA0NiwzMzA0NywzMzA0OCwzMzA1MiwzMzA1NCwzMzA1NiwzMzA2MCwzMzA2MywzMzA2OCwzMzA3MiwzMzA3NywzMzA4MiwzMzA4NCwzMzA5MywzMzA5NSwzMzA5OCwzMzEwMCwzMzEwNiwzMzExMSwzMzEy''@;'; put 'put ''MCwzMzEyMSwzMzEyNywzMzEyOCwzMzEyOSwzMzEzMywzMzEzNSwzMzE0MywzMzE1MywzMzE2OCwzMzE1NiwzMzE1NywzMzE1OCwzMzE2MywzMzE2NiwzMzE3NCwzMzE3NiwzMzE3OSwzMzE4MiwzMzE4NiwzMzE5OCwzMzIwMiwzMzIwNCwzMzIxMSwzMzIyNywzMzIxOSwzMzIyMSwzMzIyNiwz''@;'; put 'put ''MzIzMCwzMzIzMSwzMzIzNywzMzIzOSwzMzI0MywzMzI0NSwzMzI0NiwzMzI0OSwzMzI1MiwzMzI1OSwzMzI2MCwzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MiwzMzI3MywzMzI3NywzMzI3OSwzMzI4MCwzMzI4MywzMzI5NSwzMzI5OSwzMzMwMCwzMzMwNSwzMzMwNiwzMzMw''@;'; put 'put ''OSwzMzMxMywzMzMxNCwzMzMyMCwzMzMzMCwzMzMzMiwzMzMzOCwzMzM0NywzMzM0OCwzMzM0OSwzMzM1MCwzMzM1NSwzMzM1OCwzMzM1OSwzMzM2MSwzMzM2NiwzMzM3MiwzMzM3NiwzMzM3OSwzMzM4MywzMzM4OSwzMzM5NiwzMzQwMywzMzQwNSwzMzQwNywzMzQwOCwzMzQwOSwzMzQxMSwz''@;'; put 'put ''MzQxMiwzMzQxNSwzMzQxNywzMzQxOCwzMzQyMiwzMzQyNSwzMzQyOCwzMzQzMCwzMzQzMiwzMzQzNCwzMzQzNSwzMzQ0MCwzMzQ0MSwzMzQ0MywzMzQ0NCwzMzQ0NywzMzQ0OCwzMzQ0OSwzMzQ1MCwzMzQ1NCwzMzQ1NiwzMzQ1OCwzMzQ2MCwzMzQ2MywzMzQ2NiwzMzQ2OCwzMzQ3MCwzMzQ3''@;'; put 'put ''MSwzMzQ3OCwzMzQ4OCwzMzQ5MywzMzQ5OCwzMzUwNCwzMzUwNiwzMzUwOCwzMzUxMiwzMzUxNCwzMzUxNywzMzUxOSwzMzUyNiwzMzUyNywzMzUzMywzMzUzNCwzMzUzNiwzMzUzNywzMzU0MywzMzU0NCwzMzU0NiwzMzU0NywzMzYyMCwzMzU2MywzMzU2NSwzMzU2NiwzMzU2NywzMzU2OSwz''@;'; put 'put ''MzU3MCwzMzU4MCwzMzU4MSwzMzU4MiwzMzU4NCwzMzU4NywzMzU5MSwzMzU5NCwzMzU5NiwzMzU5NywzMzYwMiwzMzYwMywzMzYwNCwzMzYwNywzMzYxMywzMzYxNCwzMzYxNywzMzYyMSwzMzYyMiwzMzYyMywzMzY0OCwzMzY1NiwzMzY2MSwzMzY2MywzMzY2NCwzMzY2NiwzMzY2OCwzMzY3''@;'; put 'put ''MCwzMzY3NywzMzY4MiwzMzY4NCwzMzY4NSwzMzY4OCwzMzY4OSwzMzY5MSwzMzY5MiwzMzY5MywzMzcwMiwzMzcwMywzMzcwNSwzMzcwOCwzMzcyNiwzMzcyNywzMzcyOCwzMzczNSwzMzczNywzMzc0MywzMzc0NCwzMzc0NSwzMzc0OCwzMzc1NywzMzYxOSwzMzc2OCwzMzc3MCwzMzc4Miwz''@;'; put 'put ''Mzc4NCwzMzc4NSwzMzc4OCwzMzc5MywzMzc5OCwzMzgwMiwzMzgwNywzMzgwOSwzMzgxMywzMzgxNywzMzcwOSwzMzgzOSwzMzg0OSwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NiwzMzg2OSwzMzg3MSwzMzg3MywzMzg3NCwzMzg3OCwzMzg4MCwzMzg4MSwzMzg4MiwzMzg4NCwzMzg4OCwzMzg5''@;'; put 'put ''MiwzMzg5MywzMzg5NSwzMzg5OCwzMzkwNCwzMzkwNywzMzkwOCwzMzkxMCwzMzkxMiwzMzkxNiwzMzkxNywzMzkyMSwzMzkyNSwzMzkzOCwzMzkzOSwzMzk0MSwzMzk1MCwzMzk1OCwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2NywzMzk2OSwzMzk3MiwzMzk3OCwzMzk4MSwzMzk4MiwzMzk4NCwz''@;'; put 'put ''Mzk4NiwzMzk5MSwzMzk5MiwzMzk5NiwzMzk5OSwzNDAwMywzNDAxMiwzNDAyMywzNDAyNiwzNDAzMSwzNDAzMiwzNDAzMywzNDAzNCwzNDAzOSwzNDA5OCwzNDA0MiwzNDA0MywzNDA0NSwzNDA1MCwzNDA1MSwzNDA1NSwzNDA2MCwzNDA2MiwzNDA2NCwzNDA3NiwzNDA3OCwzNDA4MiwzNDA4''@;'; put 'put ''MywzNDA4NCwzNDA4NSwzNDA4NywzNDA5MCwzNDA5MSwzNDA5NSwzNDA5OSwzNDEwMCwzNDEwMiwzNDExMSwzNDExOCwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzNCwzNDEzNywzNDE0MCwzNDE0MSwzNDE0MiwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0OCwzNDE1NSwz''@;'; put 'put ''NDE1OSwzNDE2OSwzNDE3MCwzNDE3MSwzNDE3MywzNDE3NSwzNDE3NywzNDE4MSwzNDE4MiwzNDE4NSwzNDE4NywzNDE4OCwzNDE5MSwzNDE5NSwzNDIwMCwzNDIwNSwzNDIwNywzNDIwOCwzNDIxMCwzNDIxMywzNDIxNSwzNDIyOCwzNDIzMCwzNDIzMSwzNDIzMiwzNDIzNiwzNDIzNywzNDIz''@;'; put 'put ''OCwzNDIzOSwzNDI0MiwzNDI0NywzNDI1MCwzNDI1MSwzNDI1NCwzNDIyMSwzNDI2NCwzNDI2NiwzNDI3MSwzNDI3MiwzNDI3OCwzNDI4MCwzNDI4NSwzNDI5MSwzNDI5NCwzNDMwMCwzNDMwMywzNDMwNCwzNDMwOCwzNDMwOSwzNDMxNywzNDMxOCwzNDMyMCwzNDMyMSwzNDMyMiwzNDMyOCwz''@;'; put 'put ''NDMyOSwzNDMzMSwzNDMzNCwzNDMzNywzNDM0MywzNDM0NSwzNDM1OCwzNDM2MCwzNDM2MiwzNDM2NCwzNDM2NSwzNDM2OCwzNDM3MCwzNDM3NCwzNDM4NiwzNDM4NywzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NywzNDQwMCwzNDQwMSwzNDQwMiwzNDQwMywzNDQwNCwzNDQwOSwzNDQx''@;'; put 'put ''MiwzNDQxNSwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNiwzNDQ0NSwzNDQ0OSwzNDQ1NCwzNDQ1NiwzNDQ1OCwzNDQ2MCwzNDQ2NSwzNDQ3MCwzNDQ3MSwzNDQ3MiwzNDQ3NywzNDQ4MSwzNDQ4MywzNDQ4NCwzNDQ4NSwzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5NSwzNDQ5NiwzNDQ5NywzNDQ5OSwz''@;'; put 'put ''NDUwMSwzNDUxMywzNDUxNCwzNDUxNywzNDUxOSwzNDUyMiwzNDUyNCwzNDUyOCwzNDUzMSwzNDUzMywzNDUzNSwzNDQ0MCwzNDU1NCwzNDU1NiwzNDU1NywzNDU2NCwzNDU2NSwzNDU2NywzNDU3MSwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3OSwzNDU4MCwzNDU4NSwzNDU5MCwzNDU5MSwzNDU5''@;'; put 'put ''MywzNDU5NSwzNDYwMCwzNDYwNiwzNDYwNywzNDYwOSwzNDYxMCwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyMiwzNDYyNCwzNDYyNywzNDYyOSwzNDYzNywzNDY0OCwzNDY1MywzNDY1NywzNDY2MCwzNDY2MSwzNDY3MSwzNDY3MywzNDY3NCwzNDY4MywzNDY5MSwzNDY5MiwzNDY5Mywz''@;'; put 'put ''NDY5NCwzNDY5NSwzNDY5NiwzNDY5NywzNDY5OSwzNDcwMCwzNDcwNCwzNDcwNywzNDcwOSwzNDcxMSwzNDcxMiwzNDcxMywzNDcxOCwzNDcyMCwzNDcyMywzNDcyNywzNDczMiwzNDczMywzNDczNCwzNDczNywzNDc0MSwzNDc1MCwzNDc1MSwzNDc1MywzNDc2MCwzNDc2MSwzNDc2MiwzNDc2''@;'; put 'put ''NiwzNDc3MywzNDc3NCwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MywzNDc4NiwzNDc4NywzNDc4OCwzNDc5NCwzNDc5NSwzNDc5NywzNDgwMSwzNDgwMywzNDgwOCwzNDgxMCwzNDgxNSwzNDgxNywzNDgxOSwzNDgyMiwzNDgyNSwzNDgyNiwzNDgyNywzNDgzMiwzNDg0MSwzNDgzNCwzNDgzNSwz''@;'; put 'put ''NDgzNiwzNDg0MCwzNDg0MiwzNDg0MywzNDg0NCwzNDg0NiwzNDg0NywzNDg1NiwzNDg2MSwzNDg2MiwzNDg2NCwzNDg2NiwzNDg2OSwzNDg3NCwzNDg3NiwzNDg4MSwzNDg4MywzNDg4NSwzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NywzNDkwMSwzNDkwMiwzNDkwNCwzNDkw''@;'; put 'put ''NiwzNDkwOCwzNDkxMSwzNDkxMiwzNDkxNiwzNDkyMSwzNDkyOSwzNDkzNywzNDkzOSwzNDk0NCwzNDk2OCwzNDk3MCwzNDk3MSwzNDk3MiwzNDk3NSwzNDk3NiwzNDk4NCwzNDk4NiwzNTAwMiwzNTAwNSwzNTAwNiwzNTAwOCwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMiwzNTAyNSwz''@;'; put 'put ''NTAyNiwzNTAyNywzNTAzNSwzNTAzOCwzNTA0NywzNTA1NSwzNTA1NiwzNTA1NywzNTA2MSwzNTA2MywzNTA3MywzNTA3OCwzNTA4NSwzNTA4NiwzNTA4NywzNTA5MywzNTA5NCwzNTA5NiwzNTA5NywzNTA5OCwzNTEwMCwzNTEwNCwzNTExMCwzNTExMSwzNTExMiwzNTEyMCwzNTEyMSwzNTEy''@;'; put 'put ''MiwzNTEyNSwzNTEyOSwzNTEzMCwzNTEzNCwzNTEzNiwzNTEzOCwzNTE0MSwzNTE0MiwzNTE0NSwzNTE1MSwzNTE1NCwzNTE1OSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3OSwzNTE4MiwzNTE4NCwzNTE4NywzNTE4OSwzNTE5NCwzNTE5NSwzNTE5NiwzNTE5Nywz''@;'; put 'put ''NTIwOSwzNTIxMywzNTIxNiwzNTIyMCwzNTIyMSwzNTIyNywzNTIyOCwzNTIzMSwzNTIzMiwzNTIzNywzNTI0OCwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI2MCwzNTI4NCwzNTI4NSwzNTI4NiwzNTI4NywzNTI4OCwzNTMwMSwzNTMwNSwzNTMwNywzNTMwOSwzNTMxMywzNTMxNSwzNTMx''@;'; put 'put ''OCwzNTMyMSwzNTMyNSwzNTMyNywzNTMzMiwzNTMzMywzNTMzNSwzNTM0MywzNTM0NSwzNTM0NiwzNTM0OCwzNTM0OSwzNTM1OCwzNTM2MCwzNTM2MiwzNTM2NCwzNTM2NiwzNTM3MSwzNTM3MiwzNTM3NSwzNTM4MSwzNTM4MywzNTM4OSwzNTM5MCwzNTM5MiwzNTM5NSwzNTM5NywzNTM5OSwz''@;'; put 'put ''NTQwMSwzNTQwNSwzNTQwNiwzNTQxMSwzNTQxNCwzNTQxNSwzNTQxNiwzNTQyMCwzNTQyMSwzNTQyNSwzNTQyOSwzNTQzMSwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OSwzNTQ1MCwzNTQ1MSwzNTQ1NCwzNTQ1NSwzNTQ1NiwzNTQ1OSwzNTQ2MiwzNTQ2NywzNTQ3MSwzNTQ3MiwzNTQ3NCwzNTQ3''@;'; put 'put ''OCwzNTQ3OSwzNTQ4MSwzNTQ4NywzNTQ5NSwzNTQ5NywzNTUwMiwzNTUwMywzNTUwNywzNTUxMCwzNTUxMSwzNTUxNSwzNTUxOCwzNTUyMywzNTUyNiwzNTUyOCwzNTUyOSwzNTUzMCwzNTUzNywzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MywzNTU0OSwzNTU1MSwzNTU2NCwzNTU2OCwzNTU3Miwz''@;'; put 'put ''NTU3MywzNTU3NCwzNTU4MCwzNTU4MywzNTU4OSwzNTU5MCwzNTU5NSwzNTYwMSwzNTYxMiwzNTYxNCwzNTYxNSwzNTU5NCwzNTYyOSwzNTYzMiwzNTYzOSwzNTY0NCwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywzNTY1NCwzNTY1NiwzNTY2NiwzNTY2NywzNTY2OCwzNTY3MywzNTY2MSwzNTY3''@;'; put 'put ''OCwzNTY4MywzNTY5MywzNTcwMiwzNTcwNCwzNTcwNSwzNTcwOCwzNTcxMCwzNTcxMywzNTcxNiwzNTcxNywzNTcyMywzNTcyNSwzNTcyNywzNTczMiwzNTczMywzNTc0MCwzNTc0MiwzNTc0MywzNTg5NiwzNTg5NywzNTkwMSwzNTkwMiwzNTkwOSwzNTkxMSwzNTkxMywzNTkxNSwzNTkxOSwz''@;'; put 'put ''NTkyMSwzNTkyMywzNTkyNCwzNTkyNywzNTkyOCwzNTkzMSwzNTkzMywzNTkyOSwzNTkzOSwzNTk0MCwzNTk0MiwzNTk0NCwzNTk0NSwzNTk0OSwzNTk1NSwzNTk1NywzNTk1OCwzNTk2MywzNTk2NiwzNTk3NCwzNTk3NSwzNTk3OSwzNTk4NCwzNTk4NiwzNTk4NywzNTk5MywzNTk5NSwzNTk5''@;'; put 'put ''NiwzNjAwNCwzNjAyNSwzNjAyNiwzNjAzNywzNjAzOCwzNjA0MSwzNjA0MywzNjA0NywzNjA1NCwzNjA1MywzNjA1NywzNjA2MSwzNjA2NSwzNjA3MiwzNjA3NiwzNjA3OSwzNjA4MCwzNjA4MiwzNjA4NSwzNjA4NywzNjA4OCwzNjA5NCwzNjA5NSwzNjA5NywzNjA5OSwzNjEwNSwzNjExNCwz''@;'; put 'put ''NjExOSwzNjEyMywzNjE5NywzNjIwMSwzNjIwNCwzNjIwNiwzNjIyMywzNjIyNiwzNjIyOCwzNjIzMiwzNjIzNywzNjI0MCwzNjI0MSwzNjI0NSwzNjI1NCwzNjI1NSwzNjI1NiwzNjI2MiwzNjI2NywzNjI2OCwzNjI3MSwzNjI3NCwzNjI3NywzNjI3OSwzNjI4MSwzNjI4MywzNjI4OCwzNjI5''@;'; put 'put ''MywzNjI5NCwzNjI5NSwzNjI5NiwzNjI5OCwzNjMwMiwzNjMwNSwzNjMwOCwzNjMwOSwzNjMxMSwzNjMxMywzNjMyNCwzNjMyNSwzNjMyNywzNjMzMiwzNjMzNiwzNjI4NCwzNjMzNywzNjMzOCwzNjM0MCwzNjM0OSwzNjM1MywzNjM1NiwzNjM1NywzNjM1OCwzNjM2MywzNjM2OSwzNjM3Miwz''@;'; put 'put ''NjM3NCwzNjM4NCwzNjM4NSwzNjM4NiwzNjM4NywzNjM5MCwzNjM5MSwzNjQwMSwzNjQwMywzNjQwNiwzNjQwNywzNjQwOCwzNjQwOSwzNjQxMywzNjQxNiwzNjQxNywzNjQyNywzNjQyOSwzNjQzMCwzNjQzMSwzNjQzNiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0OSwzNjQ1MCwzNjQ1''@;'; put 'put ''NywzNjQ2MCwzNjQ2MSwzNjQ2MywzNjQ2NCwzNjQ2NSwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ4MiwzNjQ4MywzNjQ4OSwzNjQ5NiwzNjQ5OCwzNjUwMSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMCwzNjUxNCwzNjUxOSwzNjUyMSwzNjUyNSwzNjUyNiwzNjUzMSwzNjUzMywzNjUzOCwzNjUzOSwz''@;'; put 'put ''NjU0NCwzNjU0NSwzNjU0NywzNjU0OCwzNjU1MSwzNjU1OSwzNjU2MSwzNjU2NCwzNjU3MiwzNjU4NCwzNjU5MCwzNjU5MiwzNjU5MywzNjU5OSwzNjYwMSwzNjYwMiwzNjU4OSwzNjYwOCwzNjYxMCwzNjYxNSwzNjYxNiwzNjYyMywzNjYyNCwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzOCwzNjY0''@;'; put 'put ''MCwzNjY0MSwzNjY0MywzNjY0NSwzNjY0NywzNjY0OCwzNjY1MiwzNjY1MywzNjY1NCwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NiwzNjY3MiwzNjY3MywzNjY3NSwzNjY3OSwzNjY4NywzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NiwzNjcwMSwzNjcwMiwzNjcwOSwz''@;'; put 'put ''Njc2NSwzNjc2OCwzNjc2OSwzNjc3MiwzNjc3MywzNjc3NCwzNjc4OSwzNjc5MCwzNjc5MiwzNjc5OCwzNjgwMCwzNjgwMSwzNjgwNiwzNjgxMCwzNjgxMSwzNjgxMywzNjgxNiwzNjgxOCwzNjgxOSwzNjgyMSwzNjgzMiwzNjgzNSwzNjgzNiwzNjg0MCwzNjg0NiwzNjg0OSwzNjg1MywzNjg1''@;'; put 'put ''NCwzNjg1OSwzNjg2MiwzNjg2NiwzNjg2OCwzNjg3MiwzNjg3NiwzNjg4OCwzNjg5MSwzNjkwNCwzNjkwNSwzNjkxMSwzNjkwNiwzNjkwOCwzNjkwOSwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyNywzNjkzMSwzNjkzMiwzNjk0MCwzNjk1NSwzNjk1NywzNjk2MiwzNjk2NiwzNjk2NywzNjk3Miwz''@;'; put 'put ''Njk3NiwzNjk4MCwzNjk4NSwzNjk5NywzN2UzLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYw''@;'; put 'put ''LDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3''@;'; put 'put ''MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3''@;'; put 'put ''LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3''@;'; put 'put ''MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5''@;'; put 'put ''LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3''@;'; put 'put ''NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3''@;'; put 'put ''LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3''@;'; put 'put ''NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkx''@;'; put 'put ''LDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3''@;'; put 'put ''NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQx''@;'; put 'put ''LDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3''@;'; put 'put ''ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgy''@;'; put 'put ''LDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3''@;'; put 'put ''OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1''@;'; put 'put ''LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4''@;'; put 'put ''NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMw''@;'; put 'put ''LDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4''@;'; put 'put ''NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2''@;'; put 'put ''LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4''@;'; put 'put ''ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0''@;'; put 'put ''LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4''@;'; put 'put ''OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQx''@;'; put 'put ''LDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5''@;'; put 'put ''MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3''@;'; put 'put ''LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5''@;'; put 'put ''NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAy''@;'; put 'put ''LDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5''@;'; put 'put ''NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMx''@;'; put 'put ''LDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5''@;'; put 'put ''ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3''@;'; put 'put ''LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5''@;'; put 'put ''OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1''@;'; put 'put ''LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQw''@;'; put 'put ''MjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5''@;'; put 'put ''LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQw''@;'; put 'put ''Mzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2''@;'; put 'put ''LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQw''@;'; put 'put ''NjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3''@;'; put 'put ''LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQw''@;'; put 'put ''NzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5''@;'; 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 ''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 ''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 ''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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0saWJtODY2OlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIs''@;'; put 'put ''MTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4Nyw5NjE3LDk2MTgsOTYxOSw5NDc0LDk1MDgsOTU2OSw5NTcwLDk1NTgs''@;'; put 'put ''OTU1Nyw5NTcxLDk1NTMsOTU1OSw5NTY1LDk1NjQsOTU2Myw5NDg4LDk0OTIsOTUyNCw5NTE2LDk1MDAsOTQ3Miw5NTMyLDk1NjYsOTU2Nyw5NTYyLDk1NTYsOTU3Nyw5NTc0LDk1NjgsOTU1Miw5NTgwLDk1NzUsOTU3Niw5NTcyLDk1NzMsOTU2MSw5NTYwLDk1NTQsOTU1NSw5NTc5LDk1Nzgs''@;'; put 'put ''OTQ5Niw5NDg0LDk2MDgsOTYwNCw5NjEyLDk2MTYsOTYwMCwxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDEwMjUsMTEwNSwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzgsMTExOCwxNzYsODcyOSwx''@;'; put 'put ''ODMsODczMCw4NDcwLDE2NCw5NjMyLDE2MF0sImlzby04ODU5LTIiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgs''@;'; put 'put ''MTU5LDE2MCwyNjAsNzI4LDMyMSwxNjQsMzE3LDM0NiwxNjcsMTY4LDM1MiwzNTAsMzU2LDM3NywxNzMsMzgxLDM3OSwxNzYsMjYxLDczMSwzMjIsMTgwLDMxOCwzNDcsNzExLDE4NCwzNTMsMzUxLDM1NywzNzgsNzMzLDM4MiwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwy''@;'; put 'put ''NjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMy''@;'; put 'put ''NCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwiaXNvLTg4NTktMyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAs''@;'; put 'put ''MTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI5NCw3MjgsMTYzLDE2NCxudWxsLDI5MiwxNjcsMTY4LDMwNCwzNTAsMjg2LDMwOCwxNzMsbnVsbCwzNzksMTc2LDI5NSwxNzgsMTc5LDE4MCwxODEsMjkzLDE4MywxODQsMzA1LDM1MSwyODcsMzA5LDE4OSxudWxsLDM4''@;'; put 'put ''MCwxOTIsMTkzLDE5NCxudWxsLDE5NiwyNjYsMjY0LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LG51bGwsMjA5LDIxMCwyMTEsMjEyLDI4OCwyMTQsMjE1LDI4NCwyMTcsMjE4LDIxOSwyMjAsMzY0LDM0OCwyMjMsMjI0LDIyNSwyMjYsbnVsbCwyMjgsMjY3LDI2NSwyMzEs''@;'; put 'put ''MjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSxudWxsLDI0MSwyNDIsMjQzLDI0NCwyODksMjQ2LDI0NywyODUsMjQ5LDI1MCwyNTEsMjUyLDM2NSwzNDksNzI5XSwiaXNvLTg4NTktNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwx''@;'; put 'put ''NDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwzMTIsMzQyLDE2NCwyOTYsMzE1LDE2NywxNjgsMzUyLDI3NCwyOTAsMzU4LDE3MywzODEsMTc1LDE3NiwyNjEsNzMxLDM0MywxODAsMjk3LDMx''@;'; put 'put ''Niw3MTEsMTg0LDM1MywyNzUsMjkxLDM1OSwzMzAsMzgyLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyOTgsMjcyLDMyNSwzMzIsMzEwLDIxMiwyMTMsMjE0LDIxNSwyMTYsMzcwLDIxOCwyMTksMjIwLDM2MCwzNjIsMjIz''@;'; put 'put ''LDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDI5OSwyNzMsMzI2LDMzMywzMTEsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwzNzEsMjUwLDI1MSwyNTIsMzYxLDM2Myw3MjldLCJpc28tODg1OS01IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwx''@;'; put 'put ''MzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1''@;'; put 'put ''LDEwMzYsMTczLDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgs''@;'; put 'put ''MTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEs''@;'; put 'put ''MTEwMiwxMTAzLDg0NzAsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTY3LDExMTgsMTExOV0sImlzby04ODU5LTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0Miwx''@;'; put 'put ''NDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLG51bGwsbnVsbCwxNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTQ4LDE3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NjMsbnVsbCxudWxsLG51bGwsMTU2NyxudWxsLDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwx''@;'; put 'put ''NTg5LDE1OTAsMTU5MSwxNTkyLDE1OTMsMTU5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYwMCwxNjAxLDE2MDIsMTYwMywxNjA0LDE2MDUsMTYwNiwxNjA3LDE2MDgsMTYwOSwxNjEwLDE2MTEsMTYxMiwxNjEzLDE2MTQsMTYxNSwxNjE2LDE2MTcsMTYxOCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwiaXNvLTg4NTktNyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1Miwx''@;'; put 'put ''NTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMTYsODIxNywxNjMsODM2NCw4MzY3LDE2NiwxNjcsMTY4LDE2OSw4OTAsMTcxLDE3MiwxNzMsbnVsbCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsOTAxLDkwMiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIs''@;'; put 'put ''OTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMs''@;'; put 'put ''OTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sImlzby04ODU5LTgiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0Miwx''@;'; put 'put ''NDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4Mywx''@;'; put 'put ''ODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDgyMTUsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVs''@;'; put 'put ''bCxudWxsLDgyMDYsODIwNyxudWxsXSwiaXNvLTg4NTktMTAiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5''@;'; put 'put ''LDE2MCwyNjAsMjc0LDI5MCwyOTgsMjk2LDMxMCwxNjcsMzE1LDI3MiwzNTIsMzU4LDM4MSwxNzMsMzYyLDMzMCwxNzYsMjYxLDI3NSwyOTEsMjk5LDI5NywzMTEsMTgzLDMxNiwyNzMsMzUzLDM1OSwzODIsODIxMywzNjMsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4''@;'; put 'put ''LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDIwNywyMDgsMzI1LDMzMiwyMTEsMjEyLDIxMywyMTQsMzYwLDIxNiwzNzAsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjM5LDI0MCwzMjYs''@;'; put 'put ''MzMzLDI0MywyNDQsMjQ1LDI0NiwzNjEsMjQ4LDM3MSwyNTAsMjUxLDI1MiwyNTMsMjU0LDMxMl0sImlzby04ODU5LTEzIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwx''@;'; put 'put ''NTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIyMSwxNjIsMTYzLDE2NCw4MjIyLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksODIyMCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMw''@;'; put 'put ''LDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjks''@;'; put 'put ''MjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDgyMTddLCJpc28tODg1OS0xNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEs''@;'; put 'put ''MTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDc2ODIsNzY4MywxNjMsMjY2LDI2Nyw3NjkwLDE2Nyw3ODA4LDE2OSw3ODEwLDc2OTEsNzkyMiwxNzMsMTc0LDM3Niw3NzEwLDc3MTEsMjg4LDI4OSw3NzQ0''@;'; put 'put ''LDc3NDUsMTgyLDc3NjYsNzgwOSw3NzY3LDc4MTEsNzc3Niw3OTIzLDc4MTIsNzgxMyw3Nzc3LDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywzNzIsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsNzc4NiwyMTYsMjE3LDIxOCwy''@;'; put 'put ''MTksMjIwLDIyMSwzNzQsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwzNzMsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsNzc4NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywzNzUsMjU1XSwiaXNvLTg4NTktMTUiOlsx''@;'; put 'put ''MjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzY0LDE2NSwzNTIsMTY3LDM1Mywx''@;'; put 'put ''NjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDM4MSwxODEsMTgyLDE4MywzODIsMTg1LDE4NiwxODcsMzM4LDMzOSwzNzYsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIx''@;'; put 'put ''MCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUx''@;'; put 'put ''LDI1MiwyNTMsMjU0LDI1NV0sImlzby04ODU5LTE2IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAs''@;'; put 'put ''MjYwLDI2MSwzMjEsODM2NCw4MjIyLDM1MiwxNjcsMzUzLDE2OSw1MzYsMTcxLDM3NywxNzMsMzc4LDM3OSwxNzYsMTc3LDI2OCwzMjIsMzgxLDgyMjEsMTgyLDE4MywzODIsMjY5LDUzNywxODcsMzM4LDMzOSwzNzYsMzgwLDE5MiwxOTMsMTk0LDI1OCwxOTYsMjYyLDE5OCwxOTksMjAwLDIw''@;'; put 'put ''MSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyNzIsMzIzLDIxMCwyMTEsMjEyLDMzNiwyMTQsMzQ2LDM2OCwyMTcsMjE4LDIxOSwyMjAsMjgwLDUzOCwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyNjMsMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI3MywzMjQsMjQy''@;'; put 'put ''LDI0MywyNDQsMzM3LDI0NiwzNDcsMzY5LDI0OSwyNTAsMjUxLDI1MiwyODEsNTM5LDI1NV0sImtvaTgtciI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5''@;'; put 'put ''NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDk1NzAsOTU3MSw5''@;'; put 'put ''NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEw''@;'; put 'put ''NzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEw''@;'; put 'put ''NjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sImtvaTgtdSI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4''@;'; put 'put ''Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSwxMTA4LDk1NTYsMTExMCwxMTExLDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2MywxMTY5LDExMTgsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDEwMjgsOTU3MSwxMDMwLDEwMzEsOTU3NCw5''@;'; put 'put ''NTc1LDk1NzYsOTU3Nyw5NTc4LDExNjgsMTAzOCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEw''@;'; put 'put ''NzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEw''@;'; put 'put ''NjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sbWFjaW50b3NoOlsxOTYsMTk3LDE5OSwyMDEsMjA5LDIxNCwyMjAsMjI1LDIyNCwyMjYsMjI4LDIyNywyMjksMjMxLDIzMywyMzIsMjM0LDIzNSwyMzcsMjM2LDIzOCwyMzksMjQxLDI0MywyNDIsMjQ0LDI0NiwyNDUsMjUwLDI0OSwyNTEsMjUyLDgy''@;'; put 'put ''MjQsMTc2LDE2MiwxNjMsMTY3LDgyMjYsMTgyLDIyMywxNzQsMTY5LDg0ODIsMTgwLDE2OCw4ODAwLDE5OCwyMTYsODczNCwxNzcsODgwNCw4ODA1LDE2NSwxODEsODcwNiw4NzIxLDg3MTksOTYwLDg3NDcsMTcwLDE4Niw5MzcsMjMwLDI0OCwxOTEsMTYxLDE3Miw4NzMwLDQwMiw4Nzc2LDg3''@;'; put 'put ''MTAsMTcxLDE4Nyw4MjMwLDE2MCwxOTIsMTk1LDIxMywzMzgsMzM5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw5Njc0LDI1NSwzNzYsODI2MCw4MzY0LDgyNDksODI1MCw2NDI1Nyw2NDI1OCw4MjI1LDE4Myw4MjE4LDgyMjIsODI0MCwxOTQsMjAyLDE5MywyMDMsMjAwLDIw''@;'; put 'put ''NSwyMDYsMjA3LDIwNCwyMTEsMjEyLDYzNzQzLDIxMCwyMTgsMjE5LDIxNywzMDUsNzEwLDczMiwxNzUsNzI4LDcyOSw3MzAsMTg0LDczMyw3MzEsNzExXSwid2luZG93cy04NzQiOls4MzY0LDEyOSwxMzAsMTMxLDEzMiw4MjMwLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQy''@;'; put 'put ''LDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwzNTg1LDM1ODYsMzU4NywzNTg4LDM1ODksMzU5MCwzNTkxLDM1OTIsMzU5MywzNTk0LDM1OTUsMzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAwLDM2MDEs''@;'; put 'put ''MzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LDM2MTAsMzYxMSwzNjEyLDM2MTMsMzYxNCwzNjE1LDM2MTYsMzYxNywzNjE4LDM2MTksMzYyMCwzNjIxLDM2MjIsMzYyMywzNjI0LDM2MjUsMzYyNiwzNjI3LDM2MjgsMzYyOSwzNjMwLDM2MzEsMzYzMiwzNjMzLDM2MzQs''@;'; put 'put ''MzYzNSwzNjM2LDM2MzcsMzYzOCwzNjM5LDM2NDAsMzY0MSwzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsMzY0NywzNjQ4LDM2NDksMzY1MCwzNjUxLDM2NTIsMzY1MywzNjU0LDM2NTUsMzY1NiwzNjU3LDM2NTgsMzY1OSwzNjYwLDM2NjEsMzY2MiwzNjYzLDM2NjQsMzY2NSwzNjY2LDM2Njcs''@;'; put 'put ''MzY2OCwzNjY5LDM2NzAsMzY3MSwzNjcyLDM2NzMsMzY3NCwzNjc1LG51bGwsbnVsbCxudWxsLG51bGxdLCJ3aW5kb3dzLTEyNTAiOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDM1Miw4MjQ5LDM0NiwzNTYsMzgxLDM3NywxNDQsODIxNiw4MjE3LDgy''@;'; put 'put ''MjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwzNTMsODI1MCwzNDcsMzU3LDM4MiwzNzgsMTYwLDcxMSw3MjgsMzIxLDE2NCwyNjAsMTY2LDE2NywxNjgsMTY5LDM1MCwxNzEsMTcyLDE3MywxNzQsMzc5LDE3NiwxNzcsNzMxLDMyMiwxODAsMTgxLDE4MiwxODMsMTg0LDI2MSwzNTEs''@;'; put 'put ''MTg3LDMxNyw3MzMsMzE4LDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwy''@;'; put 'put ''MjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJ3aW5kb3dzLTEyNTEiOlsxMDI2LDEwMjcsODIxOCwxMTA3LDgyMjIsODIzMCw4MjI0LDgy''@;'; put 'put ''MjUsODM2NCw4MjQwLDEwMzMsODI0OSwxMDM0LDEwMzYsMTAzNSwxMDM5LDExMDYsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxMTEzLDgyNTAsMTExNCwxMTE2LDExMTUsMTExOSwxNjAsMTAzOCwxMTE4LDEwMzIsMTY0LDExNjgsMTY2LDE2NywxMDI1LDE2''@;'; put 'put ''OSwxMDI4LDE3MSwxNzIsMTczLDE3NCwxMDMxLDE3NiwxNzcsMTAzMCwxMTEwLDExNjksMTgxLDE4MiwxODMsMTEwNSw4NDcwLDExMDgsMTg3LDExMTIsMTAyOSwxMTA5LDExMTEsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1''@;'; put 'put ''MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4''@;'; put 'put ''NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwM10sIndpbmRvd3MtMTI1MiI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDks''@;'; put 'put ''MzM4LDE0MSwzODEsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMzgyLDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgs''@;'; put 'put ''MTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwy''@;'; put 'put ''MjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sIndpbmRvd3MtMTI1MyI6WzgzNjQs''@;'; put 'put ''MTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsOTAxLDkwMiwxNjMsMTY0LDE2NSwx''@;'; put 'put ''NjYsMTY3LDE2OCwxNjksbnVsbCwxNzEsMTcyLDE3MywxNzQsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDE4MSwxODIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYs''@;'; put 'put ''OTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5Njcs''@;'; put 'put ''OTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJ3aW5kb3dzLTEyNTQiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIs''@;'; put 'put ''ODQ4MiwzNTMsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkz''@;'; put 'put ''LDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjg2LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDMwNCwzNTAsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQs''@;'; put 'put ''MjM1LDIzNiwyMzcsMjM4LDIzOSwyODcsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMzA1LDM1MSwyNTVdLCJ3aW5kb3dzLTEyNTUiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEs''@;'; put 'put ''MTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjIsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgw''@;'; put 'put ''LDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCwxOTEsMTQ1NiwxNDU3LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2MiwxNDYzLDE0NjQsMTQ2NSwxNDY2LDE0NjcsMTQ2OCwxNDY5LDE0NzAsMTQ3MSwxNDcyLDE0NzMsMTQ3NCwxNDc1LDE1MjAsMTUyMSwxNTIyLDE1MjMs''@;'; put 'put ''MTUyNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIs''@;'; put 'put ''MTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sIndpbmRvd3MtMTI1NiI6WzgzNjQsMTY2Miw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDE2NTcsODI0OSwzMzgsMTY3MCwxNjg4LDE2NzIsMTcxMSw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4''@;'; put 'put ''MjEyLDE3MDUsODQ4MiwxNjgxLDgyNTAsMzM5LDgyMDQsODIwNSwxNzIyLDE2MCwxNTQ4LDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcyNiwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxNTYzLDE4NywxODgsMTg5''@;'; put 'put ''LDE5MCwxNTY3LDE3MjksMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwyMTUsMTU5MSwxNTkyLDE1OTMsMTU5NCwxNjAwLDE2MDEsMTYwMiwx''@;'; put 'put ''NjAzLDIyNCwxNjA0LDIyNiwxNjA1LDE2MDYsMTYwNywxNjA4LDIzMSwyMzIsMjMzLDIzNCwyMzUsMTYwOSwxNjEwLDIzOCwyMzksMTYxMSwxNjEyLDE2MTMsMTYxNCwyNDQsMTYxNSwxNjE2LDI0NywxNjE3LDI0OSwxNjE4LDI1MSwyNTIsODIwNiw4MjA3LDE3NDZdLCJ3aW5kb3dzLTEyNTci''@;'; put 'put ''Ols4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNjgsNzExLDE4NCwxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTc1LDczMSwxNTksMTYwLG51bGwsMTYyLDE2Mywx''@;'; put 'put ''NjQsbnVsbCwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwz''@;'; put 'put ''MTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0''@;'; put 'put ''NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDcyOV0sIndpbmRvd3MtMTI1OCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEy''@;'; put 'put ''LDczMiw4NDgyLDE1NCw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5''@;'; put 'put ''MiwxOTMsMTk0LDI1OCwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDc2OCwyMDUsMjA2LDIwNywyNzIsMjA5LDc3NywyMTEsMjEyLDQxNiwyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsNDMxLDc3MSwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMz''@;'; put 'put ''LDIzNCwyMzUsNzY5LDIzNywyMzgsMjM5LDI3MywyNDEsODAzLDI0MywyNDQsNDE3LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miw0MzIsODM2MywyNTVdLCJ4LW1hYy1jeXJpbGxpYyI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwx''@;'; put 'put ''MDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw4MjI0LDE3NiwxMTY4LDE2MywxNjcsODIyNiwxODIsMTAzMCwxNzQsMTY5LDg0ODIsMTAyNiwxMTA2LDg4''@;'; put 'put ''MDAsMTAyNywxMTA3LDg3MzQsMTc3LDg4MDQsODgwNSwxMTEwLDE4MSwxMTY5LDEwMzIsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDMzLDExMTMsMTAzNCwxMTE0LDExMTIsMTAyOSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTAzNSwxMTE1LDEwMzYsMTExNiwxMTA5''@;'; put 'put ''LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw4MjIyLDEwMzgsMTExOCwxMDM5LDExMTksODQ3MCwxMDI1LDExMDUsMTEwMywxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgs''@;'; put 'put ''MTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDgzNjRdfX0odGhpc3x8e30pfSw2NDMxODpmdW5jdGlvbih1ZSxYLHkpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhBZSxfdCxudCl7cmV0dXJu''@;'; put 'put ''IF90PD1BZSYmQWU8PW50fXVlLmV4cG9ydHMmJiFJWyJlbmNvZGluZy1pbmRleGVzIl0mJihJWyJlbmNvZGluZy1pbmRleGVzIl09eSg2Nzk1MSlbImVuY29kaW5nLWluZGV4ZXMiXSk7dmFyIEI9TWF0aC5mbG9vcjtmdW5jdGlvbiB3KEFlKXtpZih2b2lkIDA9PT1BZSlyZXR1cm57fTtpZihB''@;'; put 'put ''ZT09PU9iamVjdChBZSkpcmV0dXJuIEFlO3Rocm93IFR5cGVFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgdG8gZGljdGlvbmFyeSIpfWZ1bmN0aW9uIE8oQWUpe3JldHVybiAwPD1BZSYmQWU8PTEyN312YXIgej1PLE49LTE7ZnVuY3Rpb24gTChBZSl7dGhpcy50b2tlbnM9W10u''@;'; put 'put ''c2xpY2UuY2FsbChBZSksdGhpcy50b2tlbnMucmV2ZXJzZSgpfUwucHJvdG90eXBlPXtlbmRPZlN0cmVhbTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnRva2Vucy5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zLnBvcCgpOk59LHBy''@;'; put 'put ''ZXBlbmQ6ZnVuY3Rpb24oQWUpe2lmKEFycmF5LmlzQXJyYXkoQWUpKWZvcih2YXIgX3Q9QWU7X3QubGVuZ3RoOyl0aGlzLnRva2Vucy5wdXNoKF90LnBvcCgpKTtlbHNlIHRoaXMudG9rZW5zLnB1c2goQWUpfSxwdXNoOmZ1bmN0aW9uKEFlKXtpZihBcnJheS5pc0FycmF5KEFlKSlmb3IodmFy''@;'; put 'put ''IF90PUFlO190Lmxlbmd0aDspdGhpcy50b2tlbnMudW5zaGlmdChfdC5zaGlmdCgpKTtlbHNlIHRoaXMudG9rZW5zLnVuc2hpZnQoQWUpfX07dmFyIEs9LTE7ZnVuY3Rpb24gVShBZSxfdCl7aWYoQWUpdGhyb3cgVHlwZUVycm9yKCJEZWNvZGVyIGVycm9yIik7cmV0dXJuIF90fHw2NTUzM31m''@;'; put 'put ''dW5jdGlvbiBXKEFlKXt0aHJvdyBUeXBlRXJyb3IoIlRoZSBjb2RlIHBvaW50ICIrQWUrIiBjb3VsZCBub3QgYmUgZW5jb2RlZC4iKX1mdW5jdGlvbiBlZShBZSl7cmV0dXJuIEFlPVN0cmluZyhBZSkudHJpbSgpLnRvTG93ZXJDYXNlKCksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKG5lLEFlKT9uZVtBZV06bnVsbH12YXIgSj1be2VuY29kaW5nczpbe2xhYmVsczpbInVuaWNvZGUtMS0xLXV0Zi04IiwidXRmLTgiLCJ1dGY4Il0sbmFtZToiVVRGLTgifV0saGVhZGluZzoiVGhlIEVuY29kaW5nIn0se2VuY29kaW5nczpbe2xhYmVsczpbIjg2NiIsImNwODY2Iiwi''@;'; put 'put ''Y3NpYm04NjYiLCJpYm04NjYiXSxuYW1lOiJJQk04NjYifSx7bGFiZWxzOlsiY3Npc29sYXRpbjIiLCJpc28tODg1OS0yIiwiaXNvLWlyLTEwMSIsImlzbzg4NTktMiIsImlzbzg4NTkyIiwiaXNvXzg4NTktMiIsImlzb184ODU5LTI6MTk4NyIsImwyIiwibGF0aW4yIl0sbmFtZToiSVNPLTg4''@;'; put 'put ''NTktMiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMyIsImlzby04ODU5LTMiLCJpc28taXItMTA5IiwiaXNvODg1OS0zIiwiaXNvODg1OTMiLCJpc29fODg1OS0zIiwiaXNvXzg4NTktMzoxOTg4IiwibDMiLCJsYXRpbjMiXSxuYW1lOiJJU08tODg1OS0zIn0se2xhYmVsczpbImNzaXNvbGF0aW40''@;'; put 'put ''IiwiaXNvLTg4NTktNCIsImlzby1pci0xMTAiLCJpc284ODU5LTQiLCJpc284ODU5NCIsImlzb184ODU5LTQiLCJpc29fODg1OS00OjE5ODgiLCJsNCIsImxhdGluNCJdLG5hbWU6IklTTy04ODU5LTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbmN5cmlsbGljIiwiY3lyaWxsaWMiLCJpc28tODg1''@;'; put 'put ''OS01IiwiaXNvLWlyLTE0NCIsImlzbzg4NTktNSIsImlzbzg4NTk1IiwiaXNvXzg4NTktNSIsImlzb184ODU5LTU6MTk4OCJdLG5hbWU6IklTTy04ODU5LTUifSx7bGFiZWxzOlsiYXJhYmljIiwiYXNtby03MDgiLCJjc2lzbzg4NTk2ZSIsImNzaXNvODg1OTZpIiwiY3Npc29sYXRpbmFyYWJp''@;'; put 'put ''YyIsImVjbWEtMTE0IiwiaXNvLTg4NTktNiIsImlzby04ODU5LTYtZSIsImlzby04ODU5LTYtaSIsImlzby1pci0xMjciLCJpc284ODU5LTYiLCJpc284ODU5NiIsImlzb184ODU5LTYiLCJpc29fODg1OS02OjE5ODciXSxuYW1lOiJJU08tODg1OS02In0se2xhYmVsczpbImNzaXNvbGF0aW5n''@;'; put 'put ''cmVlayIsImVjbWEtMTE4IiwiZWxvdF85MjgiLCJncmVlayIsImdyZWVrOCIsImlzby04ODU5LTciLCJpc28taXItMTI2IiwiaXNvODg1OS03IiwiaXNvODg1OTciLCJpc29fODg1OS03IiwiaXNvXzg4NTktNzoxOTg3Iiwic3VuX2V1X2dyZWVrIl0sbmFtZToiSVNPLTg4NTktNyJ9LHtsYWJl''@;'; put 'put ''bHM6WyJjc2lzbzg4NTk4ZSIsImNzaXNvbGF0aW5oZWJyZXciLCJoZWJyZXciLCJpc28tODg1OS04IiwiaXNvLTg4NTktOC1lIiwiaXNvLWlyLTEzOCIsImlzbzg4NTktOCIsImlzbzg4NTk4IiwiaXNvXzg4NTktOCIsImlzb184ODU5LTg6MTk4OCIsInZpc3VhbCJdLG5hbWU6IklTTy04ODU5''@;'; put 'put ''LTgifSx7bGFiZWxzOlsiY3Npc284ODU5OGkiLCJpc28tODg1OS04LWkiLCJsb2dpY2FsIl0sbmFtZToiSVNPLTg4NTktOC1JIn0se2xhYmVsczpbImNzaXNvbGF0aW42IiwiaXNvLTg4NTktMTAiLCJpc28taXItMTU3IiwiaXNvODg1OS0xMCIsImlzbzg4NTkxMCIsImw2IiwibGF0aW42Il0s''@;'; put 'put ''bmFtZToiSVNPLTg4NTktMTAifSx7bGFiZWxzOlsiaXNvLTg4NTktMTMiLCJpc284ODU5LTEzIiwiaXNvODg1OTEzIl0sbmFtZToiSVNPLTg4NTktMTMifSx7bGFiZWxzOlsiaXNvLTg4NTktMTQiLCJpc284ODU5LTE0IiwiaXNvODg1OTE0Il0sbmFtZToiSVNPLTg4NTktMTQifSx7bGFiZWxz''@;'; put 'put ''OlsiY3Npc29sYXRpbjkiLCJpc28tODg1OS0xNSIsImlzbzg4NTktMTUiLCJpc284ODU5MTUiLCJpc29fODg1OS0xNSIsImw5Il0sbmFtZToiSVNPLTg4NTktMTUifSx7bGFiZWxzOlsiaXNvLTg4NTktMTYiXSxuYW1lOiJJU08tODg1OS0xNiJ9LHtsYWJlbHM6WyJjc2tvaThyIiwia29pIiwi''@;'; put 'put ''a29pOCIsImtvaTgtciIsImtvaThfciJdLG5hbWU6IktPSTgtUiJ9LHtsYWJlbHM6WyJrb2k4LXJ1Iiwia29pOC11Il0sbmFtZToiS09JOC1VIn0se2xhYmVsczpbImNzbWFjaW50b3NoIiwibWFjIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW4iXSxuYW1lOiJtYWNpbnRvc2gifSx7bGFiZWxz''@;'; put 'put ''OlsiZG9zLTg3NCIsImlzby04ODU5LTExIiwiaXNvODg1OS0xMSIsImlzbzg4NTkxMSIsInRpcy02MjAiLCJ3aW5kb3dzLTg3NCJdLG5hbWU6IndpbmRvd3MtODc0In0se2xhYmVsczpbImNwMTI1MCIsIndpbmRvd3MtMTI1MCIsIngtY3AxMjUwIl0sbmFtZToid2luZG93cy0xMjUwIn0se2xh''@;'; put 'put ''YmVsczpbImNwMTI1MSIsIndpbmRvd3MtMTI1MSIsIngtY3AxMjUxIl0sbmFtZToid2luZG93cy0xMjUxIn0se2xhYmVsczpbImFuc2lfeDMuNC0xOTY4IiwiYXNjaWkiLCJjcDEyNTIiLCJjcDgxOSIsImNzaXNvbGF0aW4xIiwiaWJtODE5IiwiaXNvLTg4NTktMSIsImlzby1pci0xMDAiLCJp''@;'; put 'put ''c284ODU5LTEiLCJpc284ODU5MSIsImlzb184ODU5LTEiLCJpc29fODg1OS0xOjE5ODciLCJsMSIsImxhdGluMSIsInVzLWFzY2lpIiwid2luZG93cy0xMjUyIiwieC1jcDEyNTIiXSxuYW1lOiJ3aW5kb3dzLTEyNTIifSx7bGFiZWxzOlsiY3AxMjUzIiwid2luZG93cy0xMjUzIiwieC1jcDEy''@;'; put 'put ''NTMiXSxuYW1lOiJ3aW5kb3dzLTEyNTMifSx7bGFiZWxzOlsiY3AxMjU0IiwiY3Npc29sYXRpbjUiLCJpc28tODg1OS05IiwiaXNvLWlyLTE0OCIsImlzbzg4NTktOSIsImlzbzg4NTk5IiwiaXNvXzg4NTktOSIsImlzb184ODU5LTk6MTk4OSIsImw1IiwibGF0aW41Iiwid2luZG93cy0xMjU0''@;'; put 'put ''IiwieC1jcDEyNTQiXSxuYW1lOiJ3aW5kb3dzLTEyNTQifSx7bGFiZWxzOlsiY3AxMjU1Iiwid2luZG93cy0xMjU1IiwieC1jcDEyNTUiXSxuYW1lOiJ3aW5kb3dzLTEyNTUifSx7bGFiZWxzOlsiY3AxMjU2Iiwid2luZG93cy0xMjU2IiwieC1jcDEyNTYiXSxuYW1lOiJ3aW5kb3dzLTEyNTYi''@;'; put 'put ''fSx7bGFiZWxzOlsiY3AxMjU3Iiwid2luZG93cy0xMjU3IiwieC1jcDEyNTciXSxuYW1lOiJ3aW5kb3dzLTEyNTcifSx7bGFiZWxzOlsiY3AxMjU4Iiwid2luZG93cy0xMjU4IiwieC1jcDEyNTgiXSxuYW1lOiJ3aW5kb3dzLTEyNTgifSx7bGFiZWxzOlsieC1tYWMtY3lyaWxsaWMiLCJ4LW1h''@;'; put 'put ''Yy11a3JhaW5pYW4iXSxuYW1lOiJ4LW1hYy1jeXJpbGxpYyJ9XSxoZWFkaW5nOiJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNoaW5lc2UiLCJjc2diMjMxMiIsImNzaXNvNThnYjIzMTI4MCIsImdiMjMxMiIsImdiXzIzMTIiLCJnYl8yMzEy''@;'; put 'put ''LTgwIiwiZ2JrIiwiaXNvLWlyLTU4IiwieC1nYmsiXSxuYW1lOiJHQksifSx7bGFiZWxzOlsiZ2IxODAzMCJdLG5hbWU6ImdiMTgwMzAifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImJp''@;'; put 'put ''ZzUiLCJiaWc1LWhrc2NzIiwiY24tYmlnNSIsImNzYmlnNSIsIngteC1iaWc1Il0sbmFtZToiQmlnNSJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVjcGtkZm10amFwYW5lc2Ui''@;'; put 'put ''LCJldWMtanAiLCJ4LWV1Yy1qcCJdLG5hbWU6IkVVQy1KUCJ9LHtsYWJlbHM6WyJjc2lzbzIwMjJqcCIsImlzby0yMDIyLWpwIl0sbmFtZToiSVNPLTIwMjItSlAifSx7bGFiZWxzOlsiY3NzaGlmdGppcyIsIm1zOTMyIiwibXNfa2FuamkiLCJzaGlmdC1qaXMiLCJzaGlmdF9qaXMiLCJzamlz''@;'; put 'put ''Iiwid2luZG93cy0zMWoiLCJ4LXNqaXMiXSxuYW1lOiJTaGlmdF9KSVMifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVja3IiLCJjc2tzYzU2MDExOTg3IiwiZXVjLWtyIiwiaXNvLWlyLTE0OSIsImtv''@;'; put 'put ''cmVhbiIsImtzX2NfNTYwMS0xOTg3Iiwia3NfY181NjAxLTE5ODkiLCJrc2M1NjAxIiwia3NjXzU2MDEiLCJ3aW5kb3dzLTk0OSJdLG5hbWU6IkVVQy1LUiJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzaXNv''@;'; put 'put ''MjAyMmtyIiwiaHotZ2ItMjMxMiIsImlzby0yMDIyLWNuIiwiaXNvLTIwMjItY24tZXh0IiwiaXNvLTIwMjIta3IiXSxuYW1lOiJyZXBsYWNlbWVudCJ9LHtsYWJlbHM6WyJ1dGYtMTZiZSJdLG5hbWU6IlVURi0xNkJFIn0se2xhYmVsczpbInV0Zi0xNiIsInV0Zi0xNmxlIl0sbmFtZToiVVRG''@;'; put 'put ''LTE2TEUifSx7bGFiZWxzOlsieC11c2VyLWRlZmluZWQiXSxuYW1lOiJ4LXVzZXItZGVmaW5lZCJ9XSxoZWFkaW5nOiJMZWdhY3kgbWlzY2VsbGFuZW91cyBlbmNvZGluZ3MifV0sbmU9e307Si5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtBZS5lbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihfdCl7''@;'; put 'put ''X3QubGFiZWxzLmZvckVhY2goZnVuY3Rpb24obnQpe25lW250XT1fdH0pfSl9KTt2YXIgcCxpZT17fSxsZT17fTtmdW5jdGlvbiBtZShBZSxfdCl7cmV0dXJuIF90JiZfdFtBZV18fG51bGx9ZnVuY3Rpb24gX2UoQWUsX3Qpe3ZhciBudD1fdC5pbmRleE9mKEFlKTtyZXR1cm4tMT09PW50P251''@;'; put 'put ''bGw6bnR9ZnVuY3Rpb24gVGUoQWUpe2lmKCEoImVuY29kaW5nLWluZGV4ZXMiaW4gSSkpdGhyb3cgRXJyb3IoIkluZGV4ZXMgbWlzc2luZy4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3JldHVybiBJWyJlbmNvZGluZy1pbmRleGVzIl1b''@;'; put 'put ''QWVdfXZhciB4LEM9InV0Zi04IjtmdW5jdGlvbiBUKEFlLF90KXtpZighKHRoaXMgaW5zdGFuY2VvZiBUKSl0aHJvdyBUeXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8iKTtBZT12b2lkIDAhPT1BZT9TdHJpbmcoQWUpOkMsX3Q9dyhfdCksdGhp''@;'; put 'put ''cy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5faWdub3JlQk9NPSExLHRoaXMuX0JPTXNlZW49ITEsdGhpcy5fZXJyb3JfbW9kZT0icmVwbGFjZW1lbnQiLHRoaXMuX2RvX25vdF9mbHVzaD0hMTt2YXIgbnQ9ZWUoQWUpO2lmKG51bGw9PT1udHx8InJlcGxhY2VtZW50''@;'; put 'put ''Ij09PW50Lm5hbWUpdGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBZSk7aWYoIWxlW250Lm5hbWVdKXRocm93IEVycm9yKCJEZWNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dmFyIFFl''@;'; put 'put ''PXRoaXM7cmV0dXJuIFFlLl9lbmNvZGluZz1udCxfdC5mYXRhbCYmKFFlLl9lcnJvcl9tb2RlPSJmYXRhbCIpLF90Lmlnbm9yZUJPTSYmKFFlLl9pZ25vcmVCT009ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9UWUuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSx0aGlzLmZhdGFsPSJmYXRhbCI9PT1RZS5fZXJyb3JfbW9kZSx0aGlzLmlnbm9yZUJPTT1RZS5faWdub3JlQk9NKSxRZX1mdW5jdGlvbiBIKEFlLF90KXtpZighKHRoaXMgaW5zdGFuY2VvZiBIKSl0aHJvdyBUeXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdl''@;'; put 'put ''dCAnbmV3Jz8iKTtpZihfdD13KF90KSx0aGlzLl9lbmNvZGluZz1udWxsLHRoaXMuX2VuY29kZXI9bnVsbCx0aGlzLl9kb19ub3RfZmx1c2g9ITEsdGhpcy5fZmF0YWw9X3QuZmF0YWw/ImZhdGFsIjoicmVwbGFjZW1lbnQiLF90Lk5PTlNUQU5EQVJEX2FsbG93TGVnYWN5RW5jb2Rpbmcpe3Zh''@;'; put 'put ''ciBRZT1lZShBZT12b2lkIDAhPT1BZT9TdHJpbmcoQWUpOkMpO2lmKG51bGw9PT1RZXx8InJlcGxhY2VtZW50Ij09PVFlLm5hbWUpdGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBZSk7aWYoIWllW1FlLm5hbWVdKXRocm93IEVycm9yKCJFbmNvZGVyIG5vdCBwcmVzZW50''@;'; put 'put ''LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dGhpcy5fZW5jb2Rpbmc9UWV9ZWxzZSB0aGlzLl9lbmNvZGluZz1lZSgidXRmLTgiKSx2b2lkIDAhPT1BZSYmImNvbnNvbGUiaW4gSSYmY29uc29sZS53YXJuKCJUZXh0RW5jb2RlciBjb25z''@;'; put 'put ''dHJ1Y3RvciBjYWxsZWQgd2l0aCBlbmNvZGluZyBsYWJlbCwgd2hpY2ggaXMgaWdub3JlZC4iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz10aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCkpLHRoaXN9ZnVuY3Rpb24gaihBZSl7dmFyIF90PUFl''@;'; put 'put ''LmZhdGFsLG50PTAsUWU9MCx1bj0wLHl0PTEyOCxNdD0xOTE7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKER0LGl0KXtpZihpdD09PU4mJjAhPT11bilyZXR1cm4gdW49MCxVKF90KTtpZihpdD09PU4pcmV0dXJuIEs7aWYoMD09PXVuKXtpZihfKGl0LDAsMTI3KSlyZXR1cm4gaXQ7aWYoXyhpdCwx''@;'; put 'put ''OTQsMjIzKSl1bj0xLG50PTMxJml0O2Vsc2UgaWYoXyhpdCwyMjQsMjM5KSkyMjQ9PT1pdCYmKHl0PTE2MCksMjM3PT09aXQmJihNdD0xNTkpLHVuPTIsbnQ9MTUmaXQ7ZWxzZXtpZighXyhpdCwyNDAsMjQ0KSlyZXR1cm4gVShfdCk7MjQwPT09aXQmJih5dD0xNDQpLDI0ND09PWl0JiYoTXQ9''@;'; put 'put ''MTQzKSx1bj0zLG50PTcmaXR9cmV0dXJuIG51bGx9aWYoIV8oaXQseXQsTXQpKXJldHVybiBudD11bj1RZT0wLHl0PTEyOCxNdD0xOTEsRHQucHJlcGVuZChpdCksVShfdCk7aWYoeXQ9MTI4LE10PTE5MSxudD1udDw8Nnw2MyZpdCwoUWUrPTEpIT09dW4pcmV0dXJuIG51bGw7dmFyICRlPW50''@;'; put 'put ''O3JldHVybiBudD11bj1RZT0wLCRlfX1mdW5jdGlvbiBFKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7dmFyIHVuLHl0O18oUWUsMTI4LDIwNDcpPyh1bj0xLHl0PTE5Mik6XyhRZSwyMDQ4LDY1NTM1KT8odW49''@;'; put 'put ''Mix5dD0yMjQpOl8oUWUsNjU1MzYsMTExNDExMSkmJih1bj0zLHl0PTI0MCk7Zm9yKHZhciBNdD1bKFFlPj42KnVuKSt5dF07dW4+MDspTXQucHVzaCgxMjh8NjMmUWU+PjYqKHVuLTEpKSx1bi09MTtyZXR1cm4gTXR9fWZ1bmN0aW9uIG0oQWUsX3Qpe3ZhciBudD1fdC5mYXRhbDt0aGlzLmhh''@;'; put 'put ''bmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TilyZXR1cm4gSztpZihPKHVuKSlyZXR1cm4gdW47dmFyIHl0PUFlW3VuLTEyOF07cmV0dXJuIG51bGw9PT15dD9VKG50KTp5dH19ZnVuY3Rpb24gQShBZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLHVuKXtpZih1bj09PU4pcmV0''@;'; put 'put ''dXJuIEs7aWYoeih1bikpcmV0dXJuIHVuO3ZhciB5dD1fZSh1bixBZSk7cmV0dXJuIG51bGw9PT15dCYmVyh1bikseXQrMTI4fX1mdW5jdGlvbiBhZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PTAsUWU9MCx1bj0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih5dCxNdCl7aWYoTXQ9PT1OJiYwPT09''@;'; put 'put ''bnQmJjA9PT1RZSYmMD09PXVuKXJldHVybiBLO3ZhciBEdDtpZihNdD09PU4mJigwIT09bnR8fDAhPT1RZXx8MCE9PXVuKSYmKG50PTAsUWU9MCx1bj0wLFUoX3QpKSwwIT09dW4pe0R0PW51bGwsXyhNdCw0OCw1NykmJihEdD1mdW5jdGlvbiBTZShBZSl7aWYoQWU+Mzk0MTkmJkFlPDE4OWUz''@;'; put 'put ''fHxBZT4xMjM3NTc1KXJldHVybiBudWxsO2lmKDc0NTc9PT1BZSlyZXR1cm4gNTkzMzU7dmFyIHVuLF90PTAsbnQ9MCxRZT1UZSgiZ2IxODAzMC1yYW5nZXMiKTtmb3IodW49MDt1bjxRZS5sZW5ndGg7Kyt1bil7dmFyIHl0PVFlW3VuXTtpZighKHl0WzBdPD1BZSkpYnJlYWs7X3Q9eXRbMF0s''@;'; put 'put ''bnQ9eXRbMV19cmV0dXJuIG50K0FlLV90fSgxMCooMTI2KigxMCoobnQtMTI5KStRZS00OCkrdW4tMTI5KStNdC00OCkpO3ZhciBpdD1bUWUsdW4sTXRdO3JldHVybiBudD0wLFFlPTAsdW49MCxudWxsPT09RHQ/KHl0LnByZXBlbmQoaXQpLFUoX3QpKTpEdH1pZigwIT09UWUpcmV0dXJuIF8o''@;'; put 'put ''TXQsMTI5LDI1NCk/KHVuPU10LG51bGwpOih5dC5wcmVwZW5kKFtRZSxNdF0pLG50PTAsUWU9MCxVKF90KSk7aWYoMCE9PW50KXtpZihfKE10LDQ4LDU3KSlyZXR1cm4gUWU9TXQsbnVsbDt2YXIgJGU9bnQsdHQ9bnVsbDtudD0wO3ZhciBIZT1NdDwxMjc/NjQ6NjU7cmV0dXJuKF8oTXQsNjQs''@;'; put 'put ''MTI2KXx8XyhNdCwxMjgsMjU0KSkmJih0dD0xOTAqKCRlLTEyOSkrKE10LUhlKSksbnVsbD09PShEdD1udWxsPT09dHQ/bnVsbDptZSh0dCxUZSgiZ2IxODAzMCIpKSkmJk8oTXQpJiZ5dC5wcmVwZW5kKE10KSxudWxsPT09RHQ/VShfdCk6RHR9cmV0dXJuIE8oTXQpP010OjEyOD09PU10Pzgz''@;'; put 'put ''NjQ6XyhNdCwxMjksMjU0KT8obnQ9TXQsbnVsbCk6VShfdCl9fWZ1bmN0aW9uIHRlKEFlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TilyZXR1cm4gSztpZih6KHVuKSlyZXR1cm4gdW47aWYoNTg4NTM9PT11bilyZXR1cm4gVyh1bik7aWYoX3QmJjgzNjQ9PT11''@;'; put 'put ''bilyZXR1cm4gMTI4O3ZhciB5dD1fZSh1bixUZSgiZ2IxODAzMCIpKTtpZihudWxsIT09eXQpe3ZhciBEdD15dCUxOTA7cmV0dXJuW0IoeXQvMTkwKSsxMjksRHQrKER0PDYzPzY0OjY1KV19aWYoX3QpcmV0dXJuIFcodW4pO3l0PWZ1bmN0aW9uIHplKEFlKXtpZig1OTMzNT09PUFlKXJldHVy''@;'; put 'put ''biA3NDU3O3ZhciB1bixfdD0wLG50PTAsUWU9VGUoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKHVuPTA7dW48UWUubGVuZ3RoOysrdW4pe3ZhciB5dD1RZVt1bl07aWYoISh5dFsxXTw9QWUpKWJyZWFrO190PXl0WzFdLG50PXl0WzBdfXJldHVybiBudCtBZS1fdH0odW4pO3ZhciAkZT1CKHl0LzEw''@;'; put 'put ''LzEyNi8xMCksdHQ9QigoeXQtPTEwKiRlKjEyNioxMCkvMTAvMTI2KSxIZT1CKCh5dC09MTAqdHQqMTI2KS8xMCk7cmV0dXJuWyRlKzEyOSx0dCs0OCxIZSsxMjkseXQtMTAqSGUrNDhdfX1mdW5jdGlvbiBzZShBZSl7dmFyIF90PUFlLmZhdGFsLG50PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9u''@;'; put 'put ''KFFlLHVuKXtpZih1bj09PU4mJjAhPT1udClyZXR1cm4gbnQ9MCxVKF90KTtpZih1bj09PU4mJjA9PT1udClyZXR1cm4gSztpZigwIT09bnQpe3ZhciB5dD1udCxNdD1udWxsO250PTA7dmFyIER0PXVuPDEyNz82NDo5ODtzd2l0Y2goKF8odW4sNjQsMTI2KXx8Xyh1biwxNjEsMjU0KSkmJihN''@;'; put 'put ''dD0xNTcqKHl0LTEyOSkrKHVuLUR0KSksTXQpe2Nhc2UgMTEzMzpyZXR1cm5bMjAyLDc3Ml07Y2FzZSAxMTM1OnJldHVyblsyMDIsNzgwXTtjYXNlIDExNjQ6cmV0dXJuWzIzNCw3NzJdO2Nhc2UgMTE2NjpyZXR1cm5bMjM0LDc4MF19dmFyIGl0PW51bGw9PT1NdD9udWxsOm1lKE10LFRlKCJi''@;'; put 'put ''aWc1IikpO3JldHVybiBudWxsPT09aXQmJk8odW4pJiZRZS5wcmVwZW5kKHVuKSxudWxsPT09aXQ/VShfdCk6aXR9cmV0dXJuIE8odW4pP3VuOl8odW4sMTI5LDI1NCk/KG50PXVuLG51bGwpOlUoX3QpfX1mdW5jdGlvbiB3ZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtpZihR''@;'; put 'put ''ZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFlO3ZhciB1bj1mdW5jdGlvbiBiKEFlKXt2YXIgX3Q9eD14fHxUZSgiYmlnNSIpLm1hcChmdW5jdGlvbihudCxRZSl7cmV0dXJuIFFlPDUwMjQ/bnVsbDpudH0pO3JldHVybiA5NTUyPT09QWV8fDk1NjY9PT1BZXx8OTU2OT09PUFlfHw5''@;'; put 'put ''NTc4PT09QWV8fDIxMzEzPT09QWV8fDIxMzE3PT09QWU/X3QubGFzdEluZGV4T2YoQWUpOl9lKEFlLF90KX0oUWUpO2lmKG51bGw9PT11bilyZXR1cm4gVyhRZSk7dmFyIHl0PUIodW4vMTU3KSsxMjk7aWYoeXQ8MTYxKXJldHVybiBXKFFlKTt2YXIgTXQ9dW4lMTU3O3JldHVyblt5dCxNdCso''@;'; put 'put ''TXQ8NjM/NjQ6OTgpXX19ZnVuY3Rpb24gVWUoQWUpe3ZhciBfdD1BZS5mYXRhbCxudD0hMSxRZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih1bix5dCl7aWYoeXQ9PT1OJiYwIT09UWUpcmV0dXJuIFFlPTAsVShfdCk7aWYoeXQ9PT1OJiYwPT09UWUpcmV0dXJuIEs7aWYoMTQyPT09UWUmJl8o''@;'; put 'put ''eXQsMTYxLDIyMykpcmV0dXJuIFFlPTAsNjUyMTYreXQ7aWYoMTQzPT09UWUmJl8oeXQsMTYxLDI1NCkpcmV0dXJuIG50PSEwLFFlPXl0LG51bGw7aWYoMCE9PVFlKXt2YXIgTXQ9UWU7UWU9MDt2YXIgRHQ9bnVsbDtyZXR1cm4gXyhNdCwxNjEsMjU0KSYmXyh5dCwxNjEsMjU0KSYmKER0PW1l''@;'; put 'put ''KDk0KihNdC0xNjEpKyh5dC0xNjEpLFRlKG50PyJqaXMwMjEyIjoiamlzMDIwOCIpKSksbnQ9ITEsXyh5dCwxNjEsMjU0KXx8dW4ucHJlcGVuZCh5dCksbnVsbD09PUR0P1UoX3QpOkR0fXJldHVybiBPKHl0KT95dDoxNDI9PT15dHx8MTQzPT09eXR8fF8oeXQsMTYxLDI1NCk/KFFlPXl0LG51''@;'; put 'put ''bGwpOlUoX3QpfX1mdW5jdGlvbiBKZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFlO2lmKDE2NT09PVFlKXJldHVybiA5MjtpZig4MjU0PT09UWUpcmV0dXJuIDEyNjtpZihfKFFlLDY1Mzc3LDY1NDM5KSlyZXR1''@;'; put 'put ''cm5bMTQyLFFlLTY1Mzc3KzE2MV07ODcyMj09PVFlJiYoUWU9NjUyOTMpO3ZhciB1bj1fZShRZSxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PXVuP1coUWUpOltCKHVuLzk0KSsxNjEsdW4lOTQrMTYxXX19ZnVuY3Rpb24gb3QoQWUpe3ZhciBfdD1BZS5mYXRhbCxRZT0wLHl0PTAsTXQ9''@;'; put 'put ''ITE7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKER0LGl0KXtzd2l0Y2goUWUpe2RlZmF1bHQ6Y2FzZSAwOnJldHVybiAyNz09PWl0PyhRZT01LG51bGwpOl8oaXQsMCwxMjcpJiYxNCE9PWl0JiYxNSE9PWl0JiYyNyE9PWl0PyhNdD0hMSxpdCk6aXQ9PT1OP0s6KE10PSExLFUoX3QpKTtjYXNlIDE6''@;'; put 'put ''cmV0dXJuIDI3PT09aXQ/KFFlPTUsbnVsbCk6OTI9PT1pdD8oTXQ9ITEsMTY1KToxMjY9PT1pdD8oTXQ9ITEsODI1NCk6XyhpdCwwLDEyNykmJjE0IT09aXQmJjE1IT09aXQmJjI3IT09aXQmJjkyIT09aXQmJjEyNiE9PWl0PyhNdD0hMSxpdCk6aXQ9PT1OP0s6KE10PSExLFUoX3QpKTtjYXNl''@;'; put 'put ''IDI6cmV0dXJuIDI3PT09aXQ/KFFlPTUsbnVsbCk6XyhpdCwzMyw5NSk/KE10PSExLDY1MzQ0K2l0KTppdD09PU4/SzooTXQ9ITEsVShfdCkpO2Nhc2UgMzpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTpfKGl0LDMzLDEyNik/KE10PSExLHl0PWl0LFFlPTQsbnVsbCk6aXQ9PT1OP0s6KE10''@;'; put 'put ''PSExLFUoX3QpKTtjYXNlIDQ6aWYoMjc9PT1pdClyZXR1cm4gUWU9NSxVKF90KTtpZihfKGl0LDMzLDEyNikpe1FlPTM7dmFyIHR0PW1lKDk0Kih5dC0zMykraXQtMzMsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT10dD9VKF90KTp0dH1yZXR1cm4gaXQ9PT1OPyhRZT0zLER0LnByZXBl''@;'; put 'put ''bmQoaXQpLFUoX3QpKTooUWU9MyxVKF90KSk7Y2FzZSA1OnJldHVybiAzNj09PWl0fHw0MD09PWl0Pyh5dD1pdCxRZT02LG51bGwpOihEdC5wcmVwZW5kKGl0KSxNdD0hMSxRZT0wLFUoX3QpKTtjYXNlIDY6dmFyIEhlPXl0O3l0PTA7dmFyIHV0PW51bGw7aWYoNDA9PT1IZSYmNjY9PT1pdCYm''@;'; put 'put ''KHV0PTApLDQwPT09SGUmJjc0PT09aXQmJih1dD0xKSw0MD09PUhlJiY3Mz09PWl0JiYodXQ9MiksMzY9PT1IZSYmKDY0PT09aXR8fDY2PT09aXQpJiYodXQ9MyksbnVsbCE9PXV0KXtRZT1RZT11dDt2YXIgcXQ9TXQ7cmV0dXJuIE10PSEwLHF0P1UoX3QpOm51bGx9cmV0dXJuIER0LnByZXBl''@;'; put 'put ''bmQoW0hlLGl0XSksTXQ9ITEsUWU9MCxVKF90KX19fWZ1bmN0aW9uIE1lKEFlKXt2YXIgUWU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24odW4seXQpe2lmKHl0PT09TiYmMCE9PVFlKXJldHVybiB1bi5wcmVwZW5kKHl0KSxRZT0wLFsyNyw0MCw2Nl07aWYoeXQ9PT1OJiYwPT09UWUpcmV0dXJu''@;'; put 'put ''IEs7aWYoISgwIT09UWUmJjEhPT1RZXx8MTQhPT15dCYmMTUhPT15dCYmMjchPT15dCkpcmV0dXJuIFcoNjU1MzMpO2lmKDA9PT1RZSYmeih5dCkpcmV0dXJuIHl0O2lmKDE9PT1RZSYmKHooeXQpJiY5MiE9PXl0JiYxMjYhPT15dHx8MTY1PT15dHx8ODI1ND09eXQpKXtpZih6KHl0KSlyZXR1''@;'; put 'put ''cm4geXQ7aWYoMTY1PT09eXQpcmV0dXJuIDkyO2lmKDgyNTQ9PT15dClyZXR1cm4gMTI2fWlmKHooeXQpJiYwIT09UWUpcmV0dXJuIHVuLnByZXBlbmQoeXQpLFFlPTAsWzI3LDQwLDY2XTtpZigoMTY1PT09eXR8fDgyNTQ9PT15dCkmJjEhPT1RZSlyZXR1cm4gdW4ucHJlcGVuZCh5dCksUWU9''@;'; put 'put ''MSxbMjcsNDAsNzRdOzg3MjI9PT15dCYmKHl0PTY1MjkzKTt2YXIgTXQ9X2UoeXQsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1NdD9XKHl0KToyIT09UWU/KHVuLnByZXBlbmQoeXQpLFFlPTIsWzI3LDM2LDY2XSk6W0IoTXQvOTQpKzMzLE10JTk0KzMzXX19ZnVuY3Rpb24gdmUoQWUp''@;'; put 'put ''e3ZhciBfdD1BZS5mYXRhbCxudD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OJiYwIT09bnQpcmV0dXJuIG50PTAsVShfdCk7aWYodW49PT1OJiYwPT09bnQpcmV0dXJuIEs7aWYoMCE9PW50KXt2YXIgeXQ9bnQsTXQ9bnVsbDtudD0wO3ZhciBEdD11bjwxMjc/NjQ6''@;'; put 'put ''NjUsaXQ9eXQ8MTYwPzEyOToxOTM7aWYoKF8odW4sNjQsMTI2KXx8Xyh1biwxMjgsMjUyKSkmJihNdD0xODgqKHl0LWl0KSt1bi1EdCksXyhNdCw4ODM2LDEwNzE1KSlyZXR1cm4gNDg1MDgrTXQ7dmFyICRlPW51bGw9PT1NdD9udWxsOm1lKE10LFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxs''@;'; put 'put ''PT09JGUmJk8odW4pJiZRZS5wcmVwZW5kKHVuKSxudWxsPT09JGU/VShfdCk6JGV9cmV0dXJuIE8odW4pfHwxMjg9PT11bj91bjpfKHVuLDE2MSwyMjMpPzY1MjE2K3VuOl8odW4sMTI5LDE1OSl8fF8odW4sMjI0LDI1Mik/KG50PXVuLG51bGwpOlUoX3QpfX1mdW5jdGlvbiBYZShBZSl7dGhp''@;'; put 'put ''cy5oYW5kbGVyPWZ1bmN0aW9uKG50LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSl8fDEyOD09PVFlKXJldHVybiBRZTtpZigxNjU9PT1RZSlyZXR1cm4gOTI7aWYoODI1ND09PVFlKXJldHVybiAxMjY7aWYoXyhRZSw2NTM3Nyw2NTQzOSkpcmV0dXJuIFFlLTY1Mzc3KzE2MTs4NzIy''@;'; put 'put ''PT09UWUmJihRZT02NTI5Myk7dmFyIHVuPWZ1bmN0aW9uIFYoQWUpe3JldHVybihwPXB8fFRlKCJqaXMwMjA4IikubWFwKGZ1bmN0aW9uKG50LFFlKXtyZXR1cm4gXyhRZSw4MjcyLDg4MzUpP251bGw6bnR9KSkuaW5kZXhPZihBZSl9KFFlKTtpZihudWxsPT09dW4pcmV0dXJuIFcoUWUpO3Zh''@;'; put 'put ''ciB5dD1CKHVuLzE4OCksRHQ9dW4lMTg4O3JldHVyblt5dCsoeXQ8MzE/MTI5OjE5MyksRHQrKER0PDYzPzY0OjY1KV19fWZ1bmN0aW9uIGplKEFlKXt2YXIgX3Q9QWUuZmF0YWwsbnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsdW4pe2lmKHVuPT09TiYmMCE9PW50KXJldHVybiBudD0w''@;'; put 'put ''LFUoX3QpO2lmKHVuPT09TiYmMD09PW50KXJldHVybiBLO2lmKDAhPT1udCl7dmFyIHl0PW50LE10PW51bGw7bnQ9MCxfKHVuLDY1LDI1NCkmJihNdD0xOTAqKHl0LTEyOSkrKHVuLTY1KSk7dmFyIER0PW51bGw9PT1NdD9udWxsOm1lKE10LFRlKCJldWMta3IiKSk7cmV0dXJuIG51bGw9PT1N''@;'; put 'put ''dCYmTyh1bikmJlFlLnByZXBlbmQodW4pLG51bGw9PT1EdD9VKF90KTpEdH1yZXR1cm4gTyh1bik/dW46Xyh1biwxMjksMjU0KT8obnQ9dW4sbnVsbCk6VShfdCl9fWZ1bmN0aW9uIERlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFl''@;'; put 'put ''KSlyZXR1cm4gUWU7dmFyIHVuPV9lKFFlLFRlKCJldWMta3IiKSk7cmV0dXJuIG51bGw9PT11bj9XKFFlKTpbQih1bi8xOTApKzEyOSx1biUxOTArNjVdfX1mdW5jdGlvbiBGZShBZSxfdCl7dmFyIG50PUFlPj44LFFlPTI1NSZBZTtyZXR1cm4gX3Q/W250LFFlXTpbUWUsbnRdfWZ1bmN0aW9u''@;'; put 'put ''IFJlKEFlLF90KXt2YXIgbnQ9X3QuZmF0YWwsUWU9bnVsbCx1bj1udWxsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih5dCxNdCl7aWYoTXQ9PT1OJiYobnVsbCE9PVFlfHxudWxsIT09dW4pKXJldHVybiBVKG50KTtpZihNdD09PU4mJm51bGw9PT1RZSYmbnVsbD09PXVuKXJldHVybiBLO2lmKG51''@;'; put 'put ''bGw9PT1RZSlyZXR1cm4gUWU9TXQsbnVsbDt2YXIgRHQ7aWYoRHQ9QWU/KFFlPDw4KStNdDooTXQ8PDgpK1FlLFFlPW51bGwsbnVsbCE9PXVuKXt2YXIgaXQ9dW47cmV0dXJuIHVuPW51bGwsXyhEdCw1NjMyMCw1NzM0Myk/NjU1MzYrMTAyNCooaXQtNTUyOTYpKyhEdC01NjMyMCk6KHl0LnBy''@;'; put 'put ''ZXBlbmQoRmUoRHQsQWUpKSxVKG50KSl9cmV0dXJuIF8oRHQsNTUyOTYsNTYzMTkpPyh1bj1EdCxudWxsKTpfKER0LDU2MzIwLDU3MzQzKT9VKG50KTpEdH19ZnVuY3Rpb24gSWUoQWUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSx1bil7aWYodW49PT1OKXJldHVybiBLO2lmKF8odW4s''@;'; put 'put ''MCw2NTUzNSkpcmV0dXJuIEZlKHVuLEFlKTt2YXIgeXQ9RmUoNTUyOTYrKHVuLTY1NTM2Pj4xMCksQWUpLE10PUZlKDU2MzIwKyh1bi02NTUzNiYxMDIzKSxBZSk7cmV0dXJuIHl0LmNvbmNhdChNdCl9fWZ1bmN0aW9uIFZlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe3JldHVy''@;'; put 'put ''biBRZT09PU4/SzpPKFFlKT9RZTo2MzM2MCtRZS0xMjh9fWZ1bmN0aW9uIGtlKEFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obnQsUWUpe3JldHVybiBRZT09PU4/Szp6KFFlKT9RZTpfKFFlLDYzMzYwLDYzNDg3KT9RZS02MzM2MCsxMjg6VyhRZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYm''@;'; put 'put ''KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwiZW5jb2RpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwiZmF0YWwiLHtnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4iZmF0YWwiPT09dGhpcy5fZXJyb3JfbW9kZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImlnbm9yZUJPTSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZ25vcmVCT019fSkpLFQucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihfdCxudCl7dmFyIFFl''@;'; put 'put ''O1FlPSJvYmplY3QiPT10eXBlb2YgX3QmJl90IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkoX3QpOiJvYmplY3QiPT10eXBlb2YgX3QmJiJidWZmZXIiaW4gX3QmJl90LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KF90LmJ1ZmZlcixf''@;'; put 'put ''dC5ieXRlT2Zmc2V0LF90LmJ5dGVMZW5ndGgpOm5ldyBVaW50OEFycmF5KDApLG50PXcobnQpLHRoaXMuX2RvX25vdF9mbHVzaHx8KHRoaXMuX2RlY29kZXI9bGVbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfSksdGhpcy5fQk9Nc2Vlbj0h''@;'; put 'put ''MSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhbnQuc3RyZWFtO2Zvcih2YXIgTXQsdW49bmV3IEwoUWUpLHl0PVtdOzspe3ZhciBEdD11bi5yZWFkKCk7aWYoRHQ9PT1OfHwoTXQ9dGhpcy5fZGVjb2Rlci5oYW5kbGVyKHVuLER0KSk9PT1LKWJyZWFrO251bGwhPT1NdCYmKEFycmF5LmlzQXJyYXko''@;'; put 'put ''TXQpP3l0LnB1c2guYXBwbHkoeXQsTXQpOnl0LnB1c2goTXQpKX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtkb3tpZigoTXQ9dGhpcy5fZGVjb2Rlci5oYW5kbGVyKHVuLHVuLnJlYWQoKSkpPT09SylicmVhaztudWxsIT09TXQmJihBcnJheS5pc0FycmF5KE10KT95dC5wdXNoLmFwcGx5KHl0''@;'; put 'put ''LE10KTp5dC5wdXNoKE10KSl9d2hpbGUoIXVuLmVuZE9mU3RyZWFtKCkpO3RoaXMuX2RlY29kZXI9bnVsbH1yZXR1cm4gZnVuY3Rpb24gaXQoJGUpe3JldHVybiBmdW5jdGlvbiBnKEFlLF90KXtyZXR1cm4tMSE9PUFlLmluZGV4T2YoX3QpfShbIlVURi04IiwiVVRGLTE2TEUiLCJVVEYtMTZC''@;'; put 'put ''RSJdLHRoaXMuX2VuY29kaW5nLm5hbWUpJiYhdGhpcy5faWdub3JlQk9NJiYhdGhpcy5fQk9Nc2VlbiYmKCRlLmxlbmd0aD4wJiY2NTI3OT09PSRlWzBdPyh0aGlzLl9CT01zZWVuPSEwLCRlLnNoaWZ0KCkpOiRlLmxlbmd0aD4wJiYodGhpcy5fQk9Nc2Vlbj0hMCkpLGZ1bmN0aW9uIEYoQWUp''@;'; put 'put ''e2Zvcih2YXIgX3Q9IiIsbnQ9MDtudDxBZS5sZW5ndGg7KytudCl7dmFyIFFlPUFlW250XTtRZTw9NjU1MzU/X3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoUWUpOihRZS09NjU1MzYsX3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKFFlPj4xMCksNTYzMjArKDEwMjMmUWUpKSl9cmV0dXJu''@;'; put 'put ''IF90fSgkZSl9LmNhbGwodGhpcyx5dCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksSC5wcm90b3R5cGUu''@;'; put 'put ''ZW5jb2RlPWZ1bmN0aW9uKF90LG50KXtfdD12b2lkIDA9PT1fdD8iIjpTdHJpbmcoX3QpLG50PXcobnQpLHRoaXMuX2RvX25vdF9mbHVzaHx8KHRoaXMuX2VuY29kZXI9aWVbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiJmYXRhbCI9PT10aGlzLl9mYXRhbH0pKSx0aGlzLl9kb19ub3Rf''@;'; put 'put ''Zmx1c2g9ISFudC5zdHJlYW07Zm9yKHZhciB5dCxRZT1uZXcgTChmdW5jdGlvbiBQKEFlKXtmb3IodmFyIF90PVN0cmluZyhBZSksbnQ9X3QubGVuZ3RoLFFlPTAsdW49W107UWU8bnQ7KXt2YXIgeXQ9X3QuY2hhckNvZGVBdChRZSk7aWYoeXQ8NTUyOTZ8fHl0PjU3MzQzKXVuLnB1c2goeXQp''@;'; put 'put ''O2Vsc2UgaWYoNTYzMjA8PXl0JiZ5dDw9NTczNDMpdW4ucHVzaCg2NTUzMyk7ZWxzZSBpZig1NTI5Njw9eXQmJnl0PD01NjMxOSlpZihRZT09PW50LTEpdW4ucHVzaCg2NTUzMyk7ZWxzZXt2YXIgTXQ9X3QuY2hhckNvZGVBdChRZSsxKTs1NjMyMDw9TXQmJk10PD01NzM0Mz8odW4ucHVzaCg2''@;'; put 'put ''NTUzNisoKDEwMjMmeXQpPDwxMCkrKDEwMjMmTXQpKSxRZSs9MSk6dW4ucHVzaCg2NTUzMyl9UWUrPTF9cmV0dXJuIHVufShfdCkpLHVuPVtdOzspe3ZhciBNdD1RZS5yZWFkKCk7aWYoTXQ9PT1OfHwoeXQ9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFFlLE10KSk9PT1LKWJyZWFrO0FycmF5Lmlz''@;'; put 'put ''QXJyYXkoeXQpP3VuLnB1c2guYXBwbHkodW4seXQpOnVuLnB1c2goeXQpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Zvcig7KHl0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihRZSxRZS5yZWFkKCkpKSE9PUs7KUFycmF5LmlzQXJyYXkoeXQpP3VuLnB1c2guYXBwbHkodW4seXQpOnVuLnB1c2go''@;'; put 'put ''eXQpO3RoaXMuX2VuY29kZXI9bnVsbH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkodW4pfSxpZVsiVVRGLTgiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBFKEFlKX0sbGVbIlVURi04Il09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgaihBZSl9LCJlbmNvZGluZy1pbmRleGVzImluIEkmJkouZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihBZSl7IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MiPT09QWUuaGVhZGluZyYmQWUuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oX3Qpe3ZhciBudD1fdC5uYW1lLFFlPVRlKG50LnRvTG93ZXJDYXNlKCkpO2xlW250XT1mdW5jdGlvbih1bil7cmV0dXJuIG5l''@;'; put 'put ''dyBtKFFlLHVuKX0saWVbbnRdPWZ1bmN0aW9uKHVuKXtyZXR1cm4gbmV3IEEoUWUsdW4pfX0pfSksbGUuR0JLPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGFlKEFlKX0saWUuR0JLPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHRlKEFlLCEwKX0saWUuZ2IxODAzMD1mdW5jdGlvbihBZSl7cmV0''@;'; put 'put ''dXJuIG5ldyB0ZShBZSl9LGxlLmdiMTgwMzA9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgYWUoQWUpfSxpZS5CaWc1PWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHdlKEFlKX0sbGUuQmlnNT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBzZShBZSl9LGllWyJFVUMtSlAiXT1mdW5jdGlvbihBZSl7''@;'; put 'put ''cmV0dXJuIG5ldyBKZShBZSl9LGxlWyJFVUMtSlAiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBVZShBZSl9LGllWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IE1lKEFlKX0sbGVbIklTTy0yMDIyLUpQIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgb3QoQWUpfSxp''@;'; put 'put ''ZS5TaGlmdF9KSVM9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgWGUoQWUpfSxsZS5TaGlmdF9KSVM9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgdmUoQWUpfSxpZVsiRVVDLUtSIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgRGUoQWUpfSxsZVsiRVVDLUtSIl09ZnVuY3Rpb24oQWUpe3JldHVy''@;'; put 'put ''biBuZXcgamUoQWUpfSxpZVsiVVRGLTE2QkUiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBJZSghMCxBZSl9LGxlWyJVVEYtMTZCRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IFJlKCEwLEFlKX0saWVbIlVURi0xNkxFIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgSWUoITEsQWUpfSxs''@;'; put 'put ''ZVsiVVRGLTE2TEUiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBSZSghMSxBZSl9LGllWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGtlKEFlKX0sbGVbIngtdXNlci1kZWZpbmVkIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgVmUoQWUpfSxJLlRleHRFbmNv''@;'; put 'put ''ZGVyfHwoSS5UZXh0RW5jb2Rlcj1IKSxJLlRleHREZWNvZGVyfHwoSS5UZXh0RGVjb2Rlcj1UKSx1ZS5leHBvcnRzJiYodWUuZXhwb3J0cz17VGV4dEVuY29kZXI6SS5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjpJLlRleHREZWNvZGVyLEVuY29kaW5nSW5kZXhlczpJWyJlbmNvZGluZy1pbmRl''@;'; put 'put ''eGVzIl19KX0odGhpc3x8e30pfSwzMzk4OnVlPT57ZnVuY3Rpb24geShJKXt0cnl7aWYoIWdsb2JhbC5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIF89Z2xvYmFsLmxvY2FsU3RvcmFnZVtJXTtyZXR1cm4gbnVsbCE9XyYmInRydWUiPT09U3RyaW5nKF8pLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9dWUuZXhwb3J0cz1mdW5jdGlvbiBYKEksXyl7aWYoeSgibm9EZXByZWNhdGlvbiIpKXJldHVybiBJO3ZhciBnPSExO3JldHVybiBmdW5jdGlvbiBCKCl7aWYoIWcpe2lmKHkoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3IoXyk7eSgidHJhY2VEZXByZWNhdGlv''@;'; put 'put ''biIpP2NvbnNvbGUudHJhY2UoXyk6Y29uc29sZS53YXJuKF8pLGc9ITB9cmV0dXJuIEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LDEyOTU0Oih1ZSxYLHkpPT57IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmV4cG9ydHMuaXNfdXJpPWcsSS5leHBvcnRzLmlzX2h0dHBfdXJpPUIsSS5l''@;'; put 'put ''eHBvcnRzLmlzX2h0dHBzX3VyaT13LEkuZXhwb3J0cy5pc193ZWJfdXJpPVAsSS5leHBvcnRzLmlzVXJpPWcsSS5leHBvcnRzLmlzSHR0cFVyaT1CLEkuZXhwb3J0cy5pc0h0dHBzVXJpPXcsSS5leHBvcnRzLmlzV2ViVXJpPVA7dmFyIF89ZnVuY3Rpb24oRil7cmV0dXJuIEYubWF0Y2goLyg/''@;'; put 'put ''OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIGcoRil7aWYoRiYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChGKSYmIS8lW14w''@;'; put 'put ''LTlhLWZdL2kudGVzdChGKSYmIS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KEYpKXt2YXIgTyxOLEwsSyxVLHo9IiIsVz0iIjtpZihOPShPPV8oRikpWzJdLEw9T1szXSxLPU9bNF0sVT1PWzVdLCh6PU9bMV0pJiZ6Lmxlbmd0aCYmTC5sZW5ndGg+PTApe2lmKE4mJk4ubGVuZ3Ro''@;'; put 'put ''KXtpZigwIT09TC5sZW5ndGgmJiEvXlwvLy50ZXN0KEwpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChMKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3Qoei50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gVys9eisiOiIsTiYmTi5sZW5ndGgmJihXKz0iLy8iK04pLFcr''@;'; put 'put ''PUwsSyYmSy5sZW5ndGgmJihXKz0iPyIrSyksVSYmVS5sZW5ndGgmJihXKz0iIyIrVSksV319fWZ1bmN0aW9uIEIoRixPKXtpZihnKEYpKXt2YXIgeixLLFcsWSxOPSIiLEw9IiIsVT0iIixxPSIiO2lmKEw9KHo9XyhGKSlbMl0sSz16WzNdLFc9els0XSxZPXpbNV0sTj16WzFdKXtpZihPKXtp''@;'; put 'put ''ZigiaHR0cHMiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKEwpcmV0dXJuLzooXGQrKSQvLnRlc3QoTCkmJihVPUwubWF0Y2goLzooXGQrKSQvKVswXSxMPUwucmVwbGFjZSgvOlxkKyQvLCIiKSkscSs9TisiOiIscSs9''@;'; put 'put ''Ii8vIitMLFUmJihxKz1VKSxxKz1LLFcmJlcubGVuZ3RoJiYocSs9Ij8iK1cpLFkmJlkubGVuZ3RoJiYocSs9IiMiK1kpLHF9fX1mdW5jdGlvbiB3KEYpe3JldHVybiBCKEYsITApfWZ1bmN0aW9uIFAoRil7cmV0dXJuIEIoRil8fHcoRil9fSh1ZT15Lm5tZCh1ZSkpfSw4NjYxOih1ZSxYLHkp''@;'; put 'put ''PT57dWUuZXhwb3J0cz15KDg2NjEpfSwzNTM1ODoodWUsWCx5KT0+e3ZhciBJPXsiLi9hZiI6MTE1NDQsIi4vYWYuanMiOjExNTQ0LCIuL2FyIjozMzEwOCwiLi9hci1keiI6NTIxNTUsIi4vYXItZHouanMiOjUyMTU1LCIuL2FyLWt3Ijo1MzU4MywiLi9hci1rdy5qcyI6NTM1ODMsIi4vYXIt''@;'; put 'put ''bHkiOjQxNjM4LCIuL2FyLWx5LmpzIjo0MTYzOCwiLi9hci1tYSI6ODc4MjMsIi4vYXItbWEuanMiOjg3ODIzLCIuL2FyLXBzIjo3NzEyLCIuL2FyLXBzLmpzIjo3NzEyLCIuL2FyLXNhIjo3ODI2MSwiLi9hci1zYS5qcyI6NzgyNjEsIi4vYXItdG4iOjU2NzAzLCIuL2FyLXRuLmpzIjo1Njcw''@;'; put 'put ''MywiLi9hci5qcyI6MzMxMDgsIi4vYXoiOjQ2NTA4LCIuL2F6LmpzIjo0NjUwOCwiLi9iZSI6MTY3NjYsIi4vYmUuanMiOjE2NzY2LCIuL2JnIjoyODU2NCwiLi9iZy5qcyI6Mjg1NjQsIi4vYm0iOjk3NDYyLCIuL2JtLmpzIjo5NzQ2MiwiLi9ibiI6MTcxMDcsIi4vYm4tYmQiOjQzNDM4LCIu''@;'; put 'put ''L2JuLWJkLmpzIjo0MzQzOCwiLi9ibi5qcyI6MTcxMDcsIi4vYm8iOjkwMDQsIi4vYm8uanMiOjkwMDQsIi4vYnIiOjUwOTI3LCIuL2JyLmpzIjo1MDkyNywiLi9icyI6ODc3NjgsIi4vYnMuanMiOjg3NzY4LCIuL2NhIjo1NjI5MSwiLi9jYS5qcyI6NTYyOTEsIi4vY3MiOjg1MzAxLCIuL2Nz''@;'; put 'put ''LmpzIjo4NTMwMSwiLi9jdiI6NjY2NjYsIi4vY3YuanMiOjY2NjY2LCIuL2N5Ijo1NTE2MywiLi9jeS5qcyI6NTUxNjMsIi4vZGEiOjg3MzYwLCIuL2RhLmpzIjo4NzM2MCwiLi9kZSI6NDU5MzIsIi4vZGUtYXQiOjQzMjQ4LCIuL2RlLWF0LmpzIjo0MzI0OCwiLi9kZS1jaCI6ODMyMjIsIi4v''@;'; put 'put ''ZGUtY2guanMiOjgzMjIyLCIuL2RlLmpzIjo0NTkzMiwiLi9kdiI6NjQwNSwiLi9kdi5qcyI6NjQwNSwiLi9lbCI6NjA3MTgsIi4vZWwuanMiOjYwNzE4LCIuL2VuLWF1IjozNjMxOSwiLi9lbi1hdS5qcyI6MzYzMTksIi4vZW4tY2EiOjgwNTk3LCIuL2VuLWNhLmpzIjo4MDU5NywiLi9lbi1n''@;'; put 'put ''YiI6NTE4MDAsIi4vZW4tZ2IuanMiOjUxODAwLCIuL2VuLWllIjo4MDcsIi4vZW4taWUuanMiOjgwNywiLi9lbi1pbCI6OTU5NjAsIi4vZW4taWwuanMiOjk1OTYwLCIuL2VuLWluIjo4NDQxOCwiLi9lbi1pbi5qcyI6ODQ0MTgsIi4vZW4tbnoiOjQ2ODY1LCIuL2VuLW56LmpzIjo0Njg2NSwi''@;'; put 'put ''Li9lbi1zZyI6MzI2NDcsIi4vZW4tc2cuanMiOjMyNjQ3LCIuL2VvIjo2MTkzMSwiLi9lby5qcyI6NjE5MzEsIi4vZXMiOjQ2Njc5LCIuL2VzLWRvIjo0MTgwNSwiLi9lcy1kby5qcyI6NDE4MDUsIi4vZXMtbXgiOjgzNDQ1LCIuL2VzLW14LmpzIjo4MzQ0NSwiLi9lcy11cyI6ODE1MTYsIi4v''@;'; put 'put ''ZXMtdXMuanMiOjgxNTE2LCIuL2VzLmpzIjo0NjY3OSwiLi9ldCI6ODgxNTAsIi4vZXQuanMiOjg4MTUwLCIuL2V1Ijo4MDc1NywiLi9ldS5qcyI6ODA3NTcsIi4vZmEiOjY1NzQyLCIuL2ZhLmpzIjo2NTc0MiwiLi9maSI6MzM5NTgsIi4vZmkuanMiOjMzOTU4LCIuL2ZpbCI6NDY3MjAsIi4v''@;'; put 'put ''ZmlsLmpzIjo0NjcyMCwiLi9mbyI6OTgzNTIsIi4vZm8uanMiOjk4MzUyLCIuL2ZyIjo0MDU5LCIuL2ZyLWNhIjo0MjA5NiwiLi9mci1jYS5qcyI6NDIwOTYsIi4vZnItY2giOjk1NzU5LCIuL2ZyLWNoLmpzIjo5NTc1OSwiLi9mci5qcyI6NDA1OSwiLi9meSI6MTU5NTgsIi4vZnkuanMiOjE1''@;'; put 'put ''OTU4LCIuL2dhIjo5NDE0MywiLi9nYS5qcyI6OTQxNDMsIi4vZ2QiOjY3MDI4LCIuL2dkLmpzIjo2NzAyOCwiLi9nbCI6ODA0MjgsIi4vZ2wuanMiOjgwNDI4LCIuL2dvbS1kZXZhIjo3Njg2MSwiLi9nb20tZGV2YS5qcyI6NzY4NjEsIi4vZ29tLWxhdG4iOjU3NzE4LCIuL2dvbS1sYXRuLmpz''@;'; put 'put ''Ijo1NzcxOCwiLi9ndSI6MjY4MjcsIi4vZ3UuanMiOjI2ODI3LCIuL2hlIjoyMTkzNiwiLi9oZS5qcyI6MjE5MzYsIi4vaGkiOjMxMzMyLCIuL2hpLmpzIjozMTMzMiwiLi9ociI6OTE5NTcsIi4vaHIuanMiOjkxOTU3LCIuL2h1Ijo0ODkyOCwiLi9odS5qcyI6NDg5MjgsIi4vaHktYW0iOjU2''@;'; put 'put ''MjE1LCIuL2h5LWFtLmpzIjo1NjIxNSwiLi9pZCI6NTg2LCIuL2lkLmpzIjo1ODYsIi4vaXMiOjkwMjExLCIuL2lzLmpzIjo5MDIxMSwiLi9pdCI6NzAxNzAsIi4vaXQtY2giOjIyMzQwLCIuL2l0LWNoLmpzIjoyMjM0MCwiLi9pdC5qcyI6NzAxNzAsIi4vamEiOjM5NzcwLCIuL2phLmpzIjoz''@;'; put 'put ''OTc3MCwiLi9qdiI6NzM4NzUsIi4vanYuanMiOjczODc1LCIuL2thIjo3OTQ5OSwiLi9rYS5qcyI6Nzk0OTksIi4va2siOjkzNTczLCIuL2trLmpzIjo5MzU3MywiLi9rbSI6Njg4MDcsIi4va20uanMiOjY4ODA3LCIuL2tuIjo2NTA4MiwiLi9rbi5qcyI6NjUwODIsIi4va28iOjIwMTM3LCIu''@;'; put 'put ''L2tvLmpzIjoyMDEzNywiLi9rdSI6NzAxMTEsIi4va3Uta21yIjo2Mzc0NCwiLi9rdS1rbXIuanMiOjYzNzQ0LCIuL2t1LmpzIjo3MDExMSwiLi9reSI6OTkxODcsIi4va3kuanMiOjk5MTg3LCIuL2xiIjozNTk2OSwiLi9sYi5qcyI6MzU5NjksIi4vbG8iOjMzNTI2LCIuL2xvLmpzIjozMzUy''@;'; put 'put ''NiwiLi9sdCI6OTA0MTEsIi4vbHQuanMiOjkwNDExLCIuL2x2IjozMjYyMSwiLi9sdi5qcyI6MzI2MjEsIi4vbWUiOjg1ODY5LCIuL21lLmpzIjo4NTg2OSwiLi9taSI6MzU4ODEsIi4vbWkuanMiOjM1ODgxLCIuL21rIjo5MjM5MSwiLi9tay5qcyI6OTIzOTEsIi4vbWwiOjIxMTI2LCIuL21s''@;'; put 'put ''LmpzIjoyMTEyNiwiLi9tbiI6NDQ4OTIsIi4vbW4uanMiOjQ0ODkyLCIuL21yIjo1OTA4MCwiLi9tci5qcyI6NTkwODAsIi4vbXMiOjcwMzk5LCIuL21zLW15IjoyNTk1MCwiLi9tcy1teS5qcyI6MjU5NTAsIi4vbXMuanMiOjcwMzk5LCIuL210Ijo3OTkwMiwiLi9tdC5qcyI6Nzk5MDIsIi4v''@;'; put 'put ''bXkiOjcyOTg1LCIuL215LmpzIjo3Mjk4NSwiLi9uYiI6Njc4NTksIi4vbmIuanMiOjY3ODU5LCIuL25lIjoxMzY0MiwiLi9uZS5qcyI6MTM2NDIsIi4vbmwiOjY1NDQxLCIuL25sLWJlIjo5OTg3NSwiLi9ubC1iZS5qcyI6OTk4NzUsIi4vbmwuanMiOjY1NDQxLCIuL25uIjo4MTMxMSwiLi9u''@;'; put 'put ''bi5qcyI6ODEzMTEsIi4vb2MtbG5jIjo3MjU2NywiLi9vYy1sbmMuanMiOjcyNTY3LCIuL3BhLWluIjo1Njk2MiwiLi9wYS1pbi5qcyI6NTY5NjIsIi4vcGwiOjYxMDYzLCIuL3BsLmpzIjo2MTA2MywiLi9wdCI6Nzg3MTksIi4vcHQtYnIiOjk3NDc2LCIuL3B0LWJyLmpzIjo5NzQ3NiwiLi9w''@;'; put 'put ''dC5qcyI6Nzg3MTksIi4vcm8iOjUxMDA0LCIuL3JvLmpzIjo1MTAwNCwiLi9ydSI6NTEzMjYsIi4vcnUuanMiOjUxMzI2LCIuL3NkIjo3MjYwOCwiLi9zZC5qcyI6NzI2MDgsIi4vc2UiOjEzOTExLCIuL3NlLmpzIjoxMzkxMSwiLi9zaSI6MjUxNDcsIi4vc2kuanMiOjI1MTQ3LCIuL3NrIjoy''@;'; put 'put ''Mzc0MSwiLi9zay5qcyI6MjM3NDEsIi4vc2wiOjkzZTMsIi4vc2wuanMiOjkzZTMsIi4vc3EiOjYwNDUxLCIuL3NxLmpzIjo2MDQ1MSwiLi9zciI6NTUwNDYsIi4vc3ItY3lybCI6NDA5MDUsIi4vc3ItY3lybC5qcyI6NDA5MDUsIi4vc3IuanMiOjU1MDQ2LCIuL3NzIjo4NTc2NSwiLi9zcy5q''@;'; put 'put ''cyI6ODU3NjUsIi4vc3YiOjk5MjkwLCIuL3N2LmpzIjo5OTI5MCwiLi9zdyI6NTM0NDksIi4vc3cuanMiOjUzNDQ5LCIuL3RhIjo3MjY4OCwiLi90YS5qcyI6NzI2ODgsIi4vdGUiOjMyMDYwLCIuL3RlLmpzIjozMjA2MCwiLi90ZXQiOjkzMjkwLCIuL3RldC5qcyI6OTMyOTAsIi4vdGciOjgy''@;'; put 'put ''OTQsIi4vdGcuanMiOjgyOTQsIi4vdGgiOjEyMzEsIi4vdGguanMiOjEyMzEsIi4vdGsiOjM3NDYsIi4vdGsuanMiOjM3NDYsIi4vdGwtcGgiOjQ5MDQwLCIuL3RsLXBoLmpzIjo0OTA0MCwiLi90bGgiOjE3MTg3LCIuL3RsaC5qcyI6MTcxODcsIi4vdHIiOjYwMTUzLCIuL3RyLmpzIjo2MDE1''@;'; put 'put ''MywiLi90emwiOjg4NTIxLCIuL3R6bC5qcyI6ODg1MjEsIi4vdHptIjoxODAxMCwiLi90em0tbGF0biI6MjIyMzQsIi4vdHptLWxhdG4uanMiOjIyMjM0LCIuL3R6bS5qcyI6MTgwMTAsIi4vdWctY24iOjYzMzQ5LCIuL3VnLWNuLmpzIjo2MzM0OSwiLi91ayI6Njg0NzksIi4vdWsuanMiOjY4''@;'; put 'put ''NDc5LCIuL3VyIjo0MzAyNCwiLi91ci5qcyI6NDMwMjQsIi4vdXoiOjE5ODAwLCIuL3V6LWxhdG4iOjcyMzc2LCIuL3V6LWxhdG4uanMiOjcyMzc2LCIuL3V6LmpzIjoxOTgwMCwiLi92aSI6ODkzNjYsIi4vdmkuanMiOjg5MzY2LCIuL3gtcHNldWRvIjo2OTcwMiwiLi94LXBzZXVkby5qcyI6''@;'; put 'put ''Njk3MDIsIi4veW8iOjcyNjU1LCIuL3lvLmpzIjo3MjY1NSwiLi96aC1jbiI6NTc1LCIuL3poLWNuLmpzIjo1NzUsIi4vemgtaGsiOjE4MzUxLCIuL3poLWhrLmpzIjoxODM1MSwiLi96aC1tbyI6NTE2MjYsIi4vemgtbW8uanMiOjUxNjI2LCIuL3poLXR3Ijo4ODg3LCIuL3poLXR3LmpzIjo4''@;'; put 'put ''ODg3fTtmdW5jdGlvbiBfKEIpe3ZhciB3PWcoQik7cmV0dXJuIHkodyl9ZnVuY3Rpb24gZyhCKXtpZigheS5vKEksQikpe3ZhciB3PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0IrIiciKTt0aHJvdyB3LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHd9cmV0dXJuIElbQl19Xy5r''@;'; put 'put ''ZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEkpfSxfLnJlc29sdmU9Zyx1ZS5leHBvcnRzPV8sXy5pZD0zNTM1OH0sODMzMzc6KCk9Pnt9LDc4OTgyOigpPT57fSw0Nzc5MDooKT0+e30sNzc5NjU6KCk9Pnt9LDY2MDg5OigpPT57fSw3OTM2ODooKT0+e30sMTU3OTE6KCk9Pnt9''@;'; put 'put ''LDYxMDkzOigpPT57fSw2NDY4ODooKT0+e30sNTEwNjk6KCk9Pnt9LDE1MzQwOigpPT57fSw3OTgzODooKT0+e30sNjM3Nzk6KCk9Pnt9LDc3MTk5OigpPT57fSwyNTE3Mjp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gWCh5LEkpe3RoaXMudj15LHRoaXMuaz1JfSx1ZS5leHBvcnRzLl9fZXNN''@;'; put 'put ''b2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDkzNTEzOih1ZSxYLHkpPT57dmFyIEk9eSgyNTE3Mik7dWUuZXhwb3J0cz1mdW5jdGlvbiBfKGcpe3ZhciBCPXt9LHc9ITE7ZnVuY3Rpb24gUChGLE8pe3JldHVybiB3PSEwLE89bmV3IFByb21pc2UoZnVuY3Rpb24oeil7''@;'; put 'put ''eihnW0ZdKE8pKX0pLHtkb25lOiExLHZhbHVlOm5ldyBJKE8sMSl9fXJldHVybiBCW3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQi5uZXh0PWZ1bmN0aW9uKEYpe3JldHVybiB3Pyh3PSExLEYpOlAoIm5l''@;'; put 'put ''eHQiLEYpfSwiZnVuY3Rpb24iPT10eXBlb2YgZy50aHJvdyYmKEIudGhyb3c9ZnVuY3Rpb24oRil7aWYodyl0aHJvdyB3PSExLEY7cmV0dXJuIFAoInRocm93IixGKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBnLnJldHVybiYmKEIucmV0dXJuPWZ1bmN0aW9uKEYpe3JldHVybiB3Pyh3PSExLEYp''@;'; put 'put ''OlAoInJldHVybiIsRil9KSxCfSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDgyODgxOnVlPT57ZnVuY3Rpb24geShJKXtmdW5jdGlvbiBfKGcpe2lmKE9iamVjdChnKSE9PWcpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoZysiIGlzIG5vdCBhbiBvYmplY3QuIikpO3ZhciBCPWcuZG9uZTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGcudmFsdWUpLnRoZW4oZnVuY3Rpb24odyl7cmV0dXJue3ZhbHVlOncsZG9uZTpCfX0pfXJldHVybih5PWZ1bmN0aW9uKEIpe3RoaXMucz1CLHRoaXMubj1CLm5leHR9KS5wcm90''@;'; put 'put ''b3R5cGU9e3M6bnVsbCxuOm51bGwsbmV4dDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMubi5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9LHJldHVybjpmdW5jdGlvbihCKXt2YXIgdz10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT13P1Byb21pc2UucmVzb2x2ZSh7dmFsdWU6Qixkb25l''@;'; put 'put ''OiEwfSk6Xyh3LmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0sdGhyb3c6ZnVuY3Rpb24oQil7dmFyIHc9dGhpcy5zLnJldHVybjtyZXR1cm4gdm9pZCAwPT09dz9Qcm9taXNlLnJlamVjdChCKTpfKHcuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfX0sbmV3IHkoSSl9dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbiBYKEkpe3ZhciBfLGcsQix3PTI7Zm9yKHR5cGVvZiBTeW1ib2w8InUiJiYoZz1TeW1ib2wuYXN5bmNJdGVyYXRvcixCPVN5bWJvbC5pdGVyYXRvcik7dy0tOyl7aWYoZyYmbnVsbCE9KF89SVtnXSkpcmV0dXJuIF8uY2FsbChJKTtpZihCJiZudWxsIT0oXz1JW0JdKSlyZXR1cm4gbmV3''@;'; put 'put ''IHkoXy5jYWxsKEkpKTtnPSJAQGFzeW5jSXRlcmF0b3IiLEI9IkBAaXRlcmF0b3IifXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBpcyBub3QgYXN5bmMgaXRlcmFibGUiKX0sdWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSwyOTI5Mzp1''@;'; put 'put ''ZT0+e2Z1bmN0aW9uIFgoSSxfLGcsQix3LFAsRil7dHJ5e3ZhciBPPUlbUF0oRiksej1PLnZhbHVlfWNhdGNoKE4pe3JldHVybiB2b2lkIGcoTil9Ty5kb25lP18oeik6UHJvbWlzZS5yZXNvbHZlKHopLnRoZW4oQix3KX11ZS5leHBvcnRzPWZ1bmN0aW9uIHkoSSl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIF89dGhpcyxnPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oQix3KXt2YXIgUD1JLmFwcGx5KF8sZyk7ZnVuY3Rpb24gRih6KXtYKFAsQix3LEYsTywibmV4dCIseil9ZnVuY3Rpb24gTyh6KXtYKFAsQix3LEYsTywidGhyb3ciLHopfUYodm9pZCAwKX0pfX0s''@;'; put 'put ''dWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSw1MzM0NDoodWUsWCx5KT0+e3ZhciBJPXkoMjUxNzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24gXyhnKXtyZXR1cm4gbmV3IEkoZywwKX0sdWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9y''@;'; put 'put ''dHMuZGVmYXVsdD11ZS5leHBvcnRzfSw0Mjk1ODoodWUsWCx5KT0+e3ZhciBJPXkoMjUxNzIpO2Z1bmN0aW9uIGcoQil7dmFyIHcsUDtmdW5jdGlvbiBGKHosTil7dHJ5e3ZhciBMPUJbel0oTiksSz1MLnZhbHVlLFU9SyBpbnN0YW5jZW9mIEk7UHJvbWlzZS5yZXNvbHZlKFU/Sy52OkspLnRo''@;'; put 'put ''ZW4oZnVuY3Rpb24oVyl7aWYoVSl7dmFyIFk9InJldHVybiI9PT16PyJyZXR1cm4iOiJuZXh0IjtpZighSy5rfHxXLmRvbmUpcmV0dXJuIEYoWSxXKTtXPUJbWV0oVykudmFsdWV9TyhMLmRvbmU/InJldHVybiI6Im5vcm1hbCIsVyl9LGZ1bmN0aW9uKFcpe0YoInRocm93IixXKX0pfWNhdGNo''@;'; put 'put ''KFcpe08oInRocm93IixXKX19ZnVuY3Rpb24gTyh6LE4pe3N3aXRjaCh6KXtjYXNlInJldHVybiI6dy5yZXNvbHZlKHt2YWx1ZTpOLGRvbmU6ITB9KTticmVhaztjYXNlInRocm93Ijp3LnJlamVjdChOKTticmVhaztkZWZhdWx0OncucmVzb2x2ZSh7dmFsdWU6Tixkb25lOiExfSl9KHc9dy5u''@;'; put 'put ''ZXh0KT9GKHcua2V5LHcuYXJnKTpQPW51bGx9dGhpcy5faW52b2tlPWZ1bmN0aW9uKHosTil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEwsSyl7dmFyIFU9e2tleTp6LGFyZzpOLHJlc29sdmU6TCxyZWplY3Q6SyxuZXh0Om51bGx9O1A/UD1QLm5leHQ9VToodz1QPVUsRih6LE4pKX0p''@;'; put 'put ''fSwiZnVuY3Rpb24iIT10eXBlb2YgQi5yZXR1cm4mJih0aGlzLnJldHVybj12b2lkIDApfWcucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZy5wcm90b3R5''@;'; put 'put ''cGUubmV4dD1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5faW52b2tlKCJuZXh0IixCKX0sZy5wcm90b3R5cGUudGhyb3c9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2ludm9rZSgidGhyb3ciLEIpfSxnLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2ludm9rZSgi''@;'; put 'put ''cmV0dXJuIixCKX0sdWUuZXhwb3J0cz1mdW5jdGlvbiBfKEIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgZyhCLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSx1ZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsdWUuZXhwb3J0cy5kZWZhdWx0PXVlLmV4cG9ydHN9LDMxNDgzOih1ZSxYLHkp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTkxNTApLF89eSg3NTIxMiksZz1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtpZihJKEIpKXJldHVybiBCO3Rocm93IG5ldyBnKF8oQikrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sMjc2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST15KDQzNDA2KSxfPVN0cmluZyxnPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe2lmKEkoQikpcmV0dXJuIEI7dGhyb3cgbmV3IGcoIkNhbid0IHNldCAiK18oQikrIiBhcyBhIHByb3RvdHlwZSIpfX0sMzc3MzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5''@;'; put 'put ''NzU0MSkuaGFzO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIEkoXyksX319LDcwODI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTgwMTIpLF89eSg5Nzk1MSksZz15KDQ0NjQ4KS5mLEI9SSgidW5zY29wYWJsZXMiKSx3PUFycmF5LnByb3RvdHlwZTt2b2lkIDA9PT13''@;'; put 'put ''W0JdJiZnKHcsQix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOl8obnVsbCl9KSx1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3dbQl1bUF09ITB9fSw2MzMzNjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OCksXz1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe2lmKEko''@;'; put 'put ''QixnKSlyZXR1cm4gZzt0aHJvdyBuZXcgXygiSW5jb3JyZWN0IGludm9jYXRpb24iKX19LDExMDg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMjYzMyksXz1TdHJpbmcsZz1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtpZihJKEIpKXJldHVybiBCO3Rocm93IG5l''@;'; put 'put ''dyBnKF8oQikrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSwzODgxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNzE3MSk7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcsQil7Zm9yKHZhciB3PTAsUD1hcmd1bWVudHMubGVuZ3RoPjI/QjpJKGcpLEY9bmV3IF8oUCk7UD53OylGW3ddPWdb''@;'; put 'put ''dysrXTtyZXR1cm4gRn19LDc0ODI0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTMxNjIpLF89eSg3NDg1KSxnPXkoNzE3MSksQj1mdW5jdGlvbih3KXtyZXR1cm4gZnVuY3Rpb24oUCxGLE8pe3ZhciB6PUkoUCksTj1nKHopO2lmKDA9PT1OKXJldHVybiF3JiYtMTt2YXIgSyxM''@;'; put 'put ''PV8oTyxOKTtpZih3JiZGIT1GKXtmb3IoO04+TDspaWYoKEs9eltMKytdKSE9SylyZXR1cm4hMH1lbHNlIGZvcig7Tj5MO0wrKylpZigod3x8TCBpbiB6KSYmeltMXT09PUYpcmV0dXJuIHd8fEx8fDA7cmV0dXJuIXcmJi0xfX07dWUuZXhwb3J0cz17aW5jbHVkZXM6QighMCksaW5kZXhPZjpC''@;'; put 'put ''KCExKX19LDM5MjA2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg2NzI3NyksZz1UeXBlRXJyb3IsQj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHc9SSYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcylyZXR1cm4hMDt0cnl7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKFApe3JldHVybiBQIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKTt1ZS5leHBvcnRzPXc/ZnVuY3Rpb24oUCxGKXtpZihfKFApJiYhQihQLCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBuZXcgZygi''@;'; put 'put ''Q2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCIpO3JldHVybiBQLmxlbmd0aD1GfTpmdW5jdGlvbihQLEYpe3JldHVybiBQLmxlbmd0aD1GfX0sNzc2Mzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyk7dWUuZXhwb3J0cz1JKFtdLnNsaWNlKX0sNDI5MjY6KHVlLFgs''@;'; put 'put ''eSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMTA4KSxfPXkoNjY1NDIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCLHcsUCl7dHJ5e3JldHVybiBQP0IoSSh3KVswXSx3WzFdKTpCKHcpfWNhdGNoKEYpe18oZywidGhyb3ciLEYpfX19LDg2Njc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPXkoNTg2MDcpLF89SSh7fS50b1N0cmluZyksZz1JKCIiLnNsaWNlKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe3JldHVybiBnKF8oQiksOCwtMSl9fSw3MTgyNDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM4NTk1KSxfPXkoMTkxNTApLGc9eSg4NjY3NSksdz15KDU4MDEy''@;'; put 'put ''KSgidG9TdHJpbmdUYWciKSxQPU9iamVjdCxGPSJBcmd1bWVudHMiPT09ZyhmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO3VlLmV4cG9ydHM9ST9nOmZ1bmN0aW9uKHope3ZhciBOLEwsSztyZXR1cm4gdm9pZCAwPT09ej8iVW5kZWZpbmVkIjpudWxsPT09ej8iTnVsbCI6InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZihMPWZ1bmN0aW9uKHosTil7dHJ5e3JldHVybiB6W05dfWNhdGNoe319KE49UCh6KSx3KSk/TDpGP2coTik6Ik9iamVjdCI9PT0oSz1nKE4pKSYmXyhOLmNhbGxlZSk/IkFyZ3VtZW50cyI6S319LDQ4NjM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzhlMyks''@;'; put 'put ''Xz15KDg4MDc4KSxnPXkoNTQxMjIpLEI9eSg0NDY0OCk7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFAsRil7Zm9yKHZhciBPPV8oUCksej1CLmYsTj1nLmYsTD0wO0w8Ty5sZW5ndGg7TCsrKXt2YXIgSz1PW0xdOyFJKHcsSykmJighRnx8IUkoRixLKSkmJnoodyxLLE4oUCxLKSl9fX0sODI4MzQ6''@;'; put 'put ''KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTU5Mik7dWUuZXhwb3J0cz0hSShmdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt9cmV0dXJuIF8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBfKSE9PV8ucHJvdG90eXBlfSl9LDU4OTc4''@;'; put 'put ''OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24oWCx5KXtyZXR1cm57dmFsdWU6WCxkb25lOnl9fX0sMzY2Nzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDQ0NjQ4KSxnPXkoNzc3NzMpO3VlLmV4cG9ydHM9ST9mdW5jdGlvbihCLHcsUCl7''@;'; put 'put ''cmV0dXJuIF8uZihCLHcsZygxLFApKX06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCW3ddPVAsQn19LDc3NzczOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24oWCx5KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmWCksY29uZmlndXJhYmxlOiEoMiZYKSx3cml0YWJsZTohKDQm''@;'; put 'put ''WCksdmFsdWU6eX19fSw1ODc5NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNDQ2NDgpLGc9eSg3Nzc3Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcsUCl7ST9fLmYoQix3LGcoMCxQKSk6Qlt3XT1QfX0sNDQwMzk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEk9eSgxNjk4MCksXz15KDQ0NjQ4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gdy5nZXQmJkkody5nZXQsQix7Z2V0dGVyOiEwfSksdy5zZXQmJkkody5zZXQsQix7c2V0dGVyOiEwfSksXy5mKGcsQix3KX19LDMxMDgzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPXkoMTkxNTApLF89eSg0NDY0OCksZz15KDE2OTgwKSxCPXkoNDgxMDQpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQLEYsTyl7T3x8KE89e30pO3ZhciB6PU8uZW51bWVyYWJsZSxOPXZvaWQgMCE9PU8ubmFtZT9PLm5hbWU6UDtpZihJKEYpJiZnKEYsTixPKSxPLmdsb2JhbCl6P3dbUF09''@;'; put 'put ''RjpCKFAsRik7ZWxzZXt0cnl7Ty51bnNhZmU/d1tQXSYmKHo9ITApOmRlbGV0ZSB3W1BdfWNhdGNoe316P3dbUF09RjpfLmYodyxQLHt2YWx1ZTpGLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFPLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohTy5ub25Xcml0YWJsZX0pfXJldHVybiB3''@;'; put 'put ''fX0sMTQ3NTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTA4Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcsQil7Zm9yKHZhciB3IGluIGcpSShfLHcsZ1t3XSxCKTtyZXR1cm4gX319LDQ4MTA0Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5O3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXt0cnl7XyhJLGcse3ZhbHVlOkIsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2h7SVtnXT1CfXJldHVybiBCfX0sNDMxOTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NTIxMiksXz1U''@;'; put 'put ''eXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIpe2lmKCFkZWxldGUgZ1tCXSl0aHJvdyBuZXcgXygiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK0koQikrIiBvZiAiK0koZykpfX0sNDYzODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTU5Mik7dWUuZXhwb3J0cz0h''@;'; put 'put ''SShmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSl9LDU1OTg4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89eSgzMjYzMyksZz1JLmRvY3VtZW50LEI9XyhnKSYmXyhn''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIEI/Zy5jcmVhdGVFbGVtZW50KHcpOnt9fX0sMzMxNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihJKXtpZihJPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgWCgi''@;'; put 'put ''TWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIEl9fSw1ODU0MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5n''@;'; put 'put ''IiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDQ0MTM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjM1OCk7dWUuZXhwb3J0cz0vKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdChJKX0sMjE1MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0''@;'; put 'put ''NzA5Mik7dWUuZXhwb3J0cz0iTk9ERSI9PT1JfSwyMzU4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBfPXkoMzM5NjMpLm5hdmlnYXRvcixnPV8mJl8udXNlckFnZW50O3VlLmV4cG9ydHM9Zz9TdHJpbmcoZyk6IiJ9LDQ0MDY2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBGLE8s''@;'; put 'put ''ST15KDMzOTYzKSxfPXkoMjM1OCksZz1JLnByb2Nlc3MsQj1JLkRlbm8sdz1nJiZnLnZlcnNpb25zfHxCJiZCLnZlcnNpb24sUD13JiZ3LnY4O1AmJihPPShGPVAuc3BsaXQoIi4iKSlbMF0+MCYmRlswXTw0PzE6KyhGWzBdK0ZbMV0pKSwhTyYmXyYmKCEoRj1fLm1hdGNoKC9FZGdlXC8oXGQr''@;'; put 'put ''KS8pKXx8RlsxXT49NzQpJiYoRj1fLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoTz0rRlsxXSksdWUuZXhwb3J0cz1PfSw0NzA5MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKSxfPXkoMjM1OCksZz15KDg2Njc1KSxCPWZ1bmN0aW9uKHcpe3JldHVybiBfLnNsaWNl''@;'; put 'put ''KDAsdy5sZW5ndGgpPT09d307dWUuZXhwb3J0cz1CKCJCdW4vIik/IkJVTiI6QigiQ2xvdWRmbGFyZS1Xb3JrZXJzIik/IkNMT1VERkxBUkUiOkIoIkRlbm8vIik/IkRFTk8iOkIoIk5vZGUuanMvIik/Ik5PREUiOkkuQnVuJiYic3RyaW5nIj09dHlwZW9mIEJ1bi52ZXJzaW9uPyJCVU4iOkku''@;'; put 'put ''RGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb24/IkRFTk8iOiJwcm9jZXNzIj09PWcoSS5wcm9jZXNzKT8iTk9ERSI6SS53aW5kb3cmJkkuZG9jdW1lbnQ/IkJST1dTRVIiOiJSRVNUIn0sOTg4NTQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz1FcnJv''@;'; put 'put ''cixnPUkoIiIucmVwbGFjZSksQj1TdHJpbmcobmV3IF8oInp4Y2FzZCIpLnN0YWNrKSx3PS9cblxzKmF0IFteOl0qOlteXG5dKi8sUD13LnRlc3QoQik7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe2lmKFAmJiJzdHJpbmciPT10eXBlb2YgRiYmIV8ucHJlcGFyZVN0YWNrVHJhY2UpZm9yKDtP''@;'; put 'put ''LS07KUY9ZyhGLHcsIiIpO3JldHVybiBGfX0sMjIzMDQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNjY3OCksXz15KDk4ODU0KSxnPXkoNzQ5NjQpLEI9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7dWUuZXhwb3J0cz1mdW5jdGlvbih3LFAsRixPKXtnJiYoQj9CKHcsUCk6SSh3''@;'; put 'put ''LCJzdGFjayIsXyhGLE8pKSl9fSw3NDk2NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKSxfPXkoNzc3NzMpO3VlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXt2YXIgZz1uZXcgRXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBnKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShnLCJzdGFjayIsXygxLDcpKSw3IT09Zy5zdGFjayl9KX0sMjgzNjc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDU0MTIyKS5mLGc9eSgzNjY3OCksQj15KDMxMDgzKSx3PXkoNDgxMDQpLFA9eSg0ODYzOSksRj15KDE2MzYzKTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKE8seil7dmFyIFcsWSxxLGVlLEosTj1PLnRhcmdldCxMPU8uZ2xvYmFsLEs9Ty5zdGF0O2lmKFc9TD9JOks/SVtOXXx8dyhOLHt9KTpJW05dJiZJW05dLnByb3RvdHlwZSlmb3IoWSBpbiB6KXtpZihlZT16W1ldLHE9Ty5kb250Q2FsbEdldFNldD8oSj1fKFcsWSkpJiZKLnZhbHVlOldb''@;'; put 'put ''WV0sIUYoTD9ZOk4rKEs/Ii4iOiIjIikrWSxPLmZvcmNlZCkmJnZvaWQgMCE9PXEpe2lmKHR5cGVvZiBlZT09dHlwZW9mIHEpY29udGludWU7UChlZSxxKX0oTy5zaGFtfHxxJiZxLnNoYW0pJiZnKGVlLCJzaGFtIiwhMCksQihXLFksZWUsTyl9fX0sNTU1OTI6dWU9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbihYKXt0cnl7cmV0dXJuISFYKCl9Y2F0Y2h7cmV0dXJuITB9fX0sNDAyMjA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUsZz1fLmFwcGx5LEI9Xy5jYWxsO3VlLmV4cG9ydHM9Im9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoST9CLmJpbmQoZyk6ZnVuY3Rpb24oKXtyZXR1cm4gQi5hcHBseShnLGFyZ3VtZW50cyl9KX0sNzg4MTE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNjI5KSxfPXkoMzE0ODMpLGc9eSg3NTE1NyksQj1JKEkuYmluZCk7dWUu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbih3LFApe3JldHVybiBfKHcpLHZvaWQgMD09PVA/dzpnP0IodyxQKTpmdW5jdGlvbigpe3JldHVybiB3LmFwcGx5KFAsYXJndW1lbnRzKX19fSw3NTE1NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIF89ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgX3x8Xy5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KX0sNDY5MjY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDt1ZS5l''@;'; put 'put ''eHBvcnRzPUk/Xy5iaW5kKF8pOmZ1bmN0aW9uKCl7cmV0dXJuIF8uYXBwbHkoXyxhcmd1bWVudHMpfX0sODk5ODE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDM4ZTMpLGc9RnVuY3Rpb24ucHJvdG90eXBlLEI9SSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVz''@;'; put 'put ''Y3JpcHRvcix3PV8oZywibmFtZSIpLFA9dyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSxGPXcmJighSXx8SSYmQihnLCJuYW1lIikuY29uZmlndXJhYmxlKTt1ZS5leHBvcnRzPXtFWElTVFM6dyxQUk9QRVI6UCxDT05GSUdVUkFCTEU6Rn19LDY5MjI3Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgzMTQ4Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihnLEIsdyl7dHJ5e3JldHVybiBJKF8oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnLEIpW3ddKSl9Y2F0Y2h7fX19LDM2Mjk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''eSg4NjY3NSksXz15KDU4NjA3KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2lmKCJGdW5jdGlvbiI9PT1JKGcpKXJldHVybiBfKGcpfX0sNTg2MDc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUsZz1fLmNhbGwsQj1JJiZfLmJpbmQu''@;'; put 'put ''YmluZChnLGcpO3VlLmV4cG9ydHM9ST9COmZ1bmN0aW9uKHcpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnLmFwcGx5KHcsYXJndW1lbnRzKX19fSw2NjUwMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMzOTYzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyl7dmFyIEI9SVtf''@;'; put 'put ''XSx3PUImJkIucHJvdG90eXBlO3JldHVybiB3JiZ3W2ddfX0sMTIyMDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDE5MTUwKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9mdW5jdGlvbihCKXtyZXR1cm4gXyhC''@;'; put 'put ''KT9COnZvaWQgMH0oSVtCXSk6SVtCXSYmSVtCXVt3XX19LDc1NDI0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7cmV0dXJue2l0ZXJhdG9yOlgsbmV4dDpYLm5leHQsZG9uZTohMX19fSw2MzYyNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2''@;'; put 'put ''KSxfPXkoMTEwOCksZz15KDc1NDI0KSxCPXkoMzY5MzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXsoIVB8fCJzdHJpbmciIT10eXBlb2YgdykmJl8odyk7dmFyIEY9Qih3KTtyZXR1cm4gZyhfKHZvaWQgMCE9PUY/SShGLHcpOncpKX19LDM2OTMyOih1ZSxYLHkpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXkoNzE4MjQpLF89eSg4NjExNSksZz15KDk0NDY4KSxCPXkoMTkyNTgpLFA9eSg1ODAxMikoIml0ZXJhdG9yIik7dWUuZXhwb3J0cz1mdW5jdGlvbihGKXtpZighZyhGKSlyZXR1cm4gXyhGLFApfHxfKEYsIkBAaXRlcmF0b3IiKXx8QltJKEYpXX19LDQzNTg0Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSgzMTQ4MyksZz15KDExMDgpLEI9eSg3NTIxMiksdz15KDM2OTMyKSxQPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIHo9YXJndW1lbnRzLmxlbmd0aDwyP3coRik6TztpZihfKHopKXJldHVybiBnKEkoeixGKSk7''@;'; put 'put ''dGhyb3cgbmV3IFAoQihGKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sODQ1MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDY3Mjc3KSxnPXkoMTkxNTApLEI9eSg4NjY3NSksdz15KDY4MzMyKSxQPUkoW10ucHVzaCk7dWUuZXhwb3J0cz1mdW5jdGlvbihGKXtp''@;'; put 'put ''ZihnKEYpKXJldHVybiBGO2lmKF8oRikpe2Zvcih2YXIgTz1GLmxlbmd0aCx6PVtdLE49MDtOPE87TisrKXt2YXIgTD1GW05dOyJzdHJpbmciPT10eXBlb2YgTD9QKHosTCk6KCJudW1iZXIiPT10eXBlb2YgTHx8Ik51bWJlciI9PT1CKEwpfHwiU3RyaW5nIj09PUIoTCkpJiZQKHosdyhMKSl9''@;'; put 'put ''dmFyIEs9ei5sZW5ndGgsVT0hMDtyZXR1cm4gZnVuY3Rpb24oVyxZKXtpZihVKXJldHVybiBVPSExLFk7aWYoXyh0aGlzKSlyZXR1cm4gWTtmb3IodmFyIHE9MDtxPEs7cSsrKWlmKHpbcV09PT1XKXJldHVybiBZfX19fSw4NjExNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMx''@;'; put 'put ''NDgzKSxfPXkoOTQ0NjgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXt2YXIgdz1nW0JdO3JldHVybiBfKHcpP3ZvaWQgMDpJKHcpfX0sNDM2MzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMTQ4MyksXz15KDExMDgpLGc9eSg0NjkyNiksQj15KDY0NTUwKSx3PXkoNzU0MjQp''@;'; put 'put ''LFA9IkludmFsaWQgc2l6ZSIsRj1SYW5nZUVycm9yLE89VHlwZUVycm9yLHo9TWF0aC5tYXgsTj1mdW5jdGlvbihMLEspe3RoaXMuc2V0PUwsdGhpcy5zaXplPXooSywwKSx0aGlzLmhhcz1JKEwuaGFzKSx0aGlzLmtleXM9SShMLmtleXMpfTtOLnByb3RvdHlwZT17Z2V0SXRlcmF0b3I6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdyhfKGcodGhpcy5rZXlzLHRoaXMuc2V0KSkpfSxpbmNsdWRlczpmdW5jdGlvbihMKXtyZXR1cm4gZyh0aGlzLmhhcyx0aGlzLnNldCxMKX19LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7XyhMKTt2YXIgSz0rTC5zaXplO2lmKEshPUspdGhyb3cgbmV3IE8oUCk7dmFy''@;'; put 'put ''IFU9QihLKTtpZihVPDApdGhyb3cgbmV3IEYoUCk7cmV0dXJuIG5ldyBOKEwsVSl9fSw5NjMzOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoMzE5NTApLGc9TWF0aC5mbG9vcixCPUkoIiIuY2hhckF0KSx3PUkoIiIucmVwbGFjZSksUD1JKCIiLnNsaWNlKSxG''@;'; put 'put ''PS9cJChbJCYnYF18XGR7MSwyfXw8W14+XSo+KS9nLE89L1wkKFskJidgXXxcZHsxLDJ9KS9nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOLEwsSyxVLFcpe3ZhciBZPUwrei5sZW5ndGgscT1LLmxlbmd0aCxlZT1PO3JldHVybiB2b2lkIDAhPT1VJiYoVT1fKFUpLGVlPUYpLHcoVyxlZSxmdW5j''@;'; put 'put ''dGlvbihKLG5lKXt2YXIgaWU7c3dpdGNoKEIobmUsMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIHo7Y2FzZSJgIjpyZXR1cm4gUChOLDAsTCk7Y2FzZSInIjpyZXR1cm4gUChOLFkpO2Nhc2UiPCI6aWU9VVtQKG5lLDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBsZT0rbmU7''@;'; put 'put ''aWYoMD09PWxlKXJldHVybiBKO2lmKGxlPnEpe3ZhciBtZT1nKGxlLzEwKTtyZXR1cm4gMD09PW1lP0o6bWU8PXE/dm9pZCAwPT09S1ttZS0xXT9CKG5lLDEpOktbbWUtMV0rQihuZSwxKTpKfWllPUtbbGUtMV19cmV0dXJuIHZvaWQgMD09PWllPyIiOmllfSl9fSwzMzk2MzpmdW5jdGlvbih1''@;'; put 'put ''ZSl7InVzZSBzdHJpY3QiO3ZhciBYPWZ1bmN0aW9uKHkpe3JldHVybiB5JiZ5Lk1hdGg9PT1NYXRoJiZ5fTt1ZS5leHBvcnRzPVgoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8WCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8WCgib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHNlbGYmJnNlbGYpfHxYKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxYKCJvYmplY3QiPT10eXBlb2YgdGhpcyYmdGhpcyl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDM4ZTM6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDMxOTUwKSxnPUkoe30uaGFzT3duUHJvcGVydHkpO3VlLmV4cG9ydHM9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24odyxQKXtyZXR1cm4gZyhfKHcpLFApfX0sMzQ2NzA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17fX0sODczNzI6KHVlLFgs''@;'; put 'put ''eSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMjIwMik7dWUuZXhwb3J0cz1JKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSw1NzI0NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNTU1OTIpLGc9eSg1NTk4OCk7dWUuZXhwb3J0cz0hSSYmIV8oZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShnKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sNTU4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSg1NTU5MiksZz15KDg2Njc1KSxCPU9iamVjdCx3PUko''@;'; put 'put ''IiIuc3BsaXQpO3VlLmV4cG9ydHM9XyhmdW5jdGlvbigpe3JldHVybiFCKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KT9mdW5jdGlvbihQKXtyZXR1cm4iU3RyaW5nIj09PWcoUCk/dyhQLCIiKTpCKFApfTpCfSwxNzI5NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDE5''@;'; put 'put ''MTUwKSxfPXkoMzI2MzMpLGc9eSgyMTYxMik7dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcsUCl7dmFyIEYsTztyZXR1cm4gZyYmSShGPXcuY29uc3RydWN0b3IpJiZGIT09UCYmXyhPPUYucHJvdG90eXBlKSYmTyE9PVAucHJvdG90eXBlJiZnKEIsTyksQn19LDI2OTMxOih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgxOTE1MCksZz15KDQ4MzU2KSxCPUkoRnVuY3Rpb24udG9TdHJpbmcpO18oZy5pbnNwZWN0U291cmNlKXx8KGcuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih3KXtyZXR1cm4gQih3KX0pLHVlLmV4cG9ydHM9Zy5pbnNwZWN0U291cmNlfSw2NDg1''@;'; put 'put ''NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMyNjMzKSxfPXkoMzY2NzgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtJKEIpJiYiY2F1c2UiaW4gQiYmXyhnLCJjYXVzZSIsQi5jYXVzZSl9fSw0NzM2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBLLFUsVyxJPXkoNDg2''@;'; put 'put ''OTEpLF89eSgzMzk2MyksZz15KDMyNjMzKSxCPXkoMzY2NzgpLHc9eSgzOGUzKSxQPXkoNDgzNTYpLEY9eSg3OTY2MiksTz15KDM0NjcwKSx6PSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsTj1fLlR5cGVFcnJvcjtpZihJfHxQLnN0YXRlKXt2YXIgZWU9UC5zdGF0ZXx8KFAuc3RhdGU9''@;'; put 'put ''bmV3KDAsXy5XZWFrTWFwKSk7ZWUuZ2V0PWVlLmdldCxlZS5oYXM9ZWUuaGFzLGVlLnNldD1lZS5zZXQsSz1mdW5jdGlvbihuZSxpZSl7aWYoZWUuaGFzKG5lKSl0aHJvdyBuZXcgTih6KTtyZXR1cm4gaWUuZmFjYWRlPW5lLGVlLnNldChuZSxpZSksaWV9LFU9ZnVuY3Rpb24obmUpe3JldHVy''@;'; put 'put ''biBlZS5nZXQobmUpfHx7fX0sVz1mdW5jdGlvbihuZSl7cmV0dXJuIGVlLmhhcyhuZSl9fWVsc2V7dmFyIEo9Rigic3RhdGUiKTtPW0pdPSEwLEs9ZnVuY3Rpb24obmUsaWUpe2lmKHcobmUsSikpdGhyb3cgbmV3IE4oeik7cmV0dXJuIGllLmZhY2FkZT1uZSxCKG5lLEosaWUpLGllfSxVPWZ1''@;'; put 'put ''bmN0aW9uKG5lKXtyZXR1cm4gdyhuZSxKKT9uZVtKXTp7fX0sVz1mdW5jdGlvbihuZSl7cmV0dXJuIHcobmUsSil9fXVlLmV4cG9ydHM9e3NldDpLLGdldDpVLGhhczpXLGVuZm9yY2U6ZnVuY3Rpb24obmUpe3JldHVybiBXKG5lKT9VKG5lKTpLKG5lLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9u''@;'; put 'put ''KG5lKXtyZXR1cm4gZnVuY3Rpb24oaWUpe3ZhciBsZTtpZighZyhpZSl8fChsZT1VKGllKSkudHlwZSE9PW5lKXRocm93IG5ldyBOKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrbmUrIiByZXF1aXJlZCIpO3JldHVybiBsZX19fX0sNjY3OTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9eSg1ODAxMiksXz15KDE5MjU4KSxnPUkoIml0ZXJhdG9yIiksQj1BcnJheS5wcm90b3R5cGU7dWUuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4gdm9pZCAwIT09dyYmKF8uQXJyYXk9PT13fHxCW2ddPT09dyl9fSw2NzI3NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg2''@;'; put 'put ''Njc1KTt1ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGcpe3JldHVybiJBcnJheSI9PT1JKGcpfX0sMTkxNTA6dWU9PnsidXNlIHN0cmljdCI7dmFyIFg9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsO3VlLmV4cG9ydHM9dHlwZW9mIFg+InUiJiZ2b2lk''@;'; put 'put ''IDAhPT1YP2Z1bmN0aW9uKHkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB5fHx5PT09WH06ZnVuY3Rpb24oeSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHl9fSwxNjM2MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU1NTkyKSxfPXkoMTkxNTApLGc9LyN8XC5wcm90b3R5''@;'; put 'put ''cGVcLi8sQj1mdW5jdGlvbih6LE4pe3ZhciBMPVBbdyh6KV07cmV0dXJuIEw9PT1PfHxMIT09RiYmKF8oTik/SShOKTohIU4pfSx3PUIubm9ybWFsaXplPWZ1bmN0aW9uKHope3JldHVybiBTdHJpbmcoeikucmVwbGFjZShnLCIuIikudG9Mb3dlckNhc2UoKX0sUD1CLmRhdGE9e30sRj1CLk5B''@;'; put 'put ''VElWRT0iTiIsTz1CLlBPTFlGSUxMPSJQIjt1ZS5leHBvcnRzPUJ9LDk0NDY4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7cmV0dXJuIG51bGw9PVh9fSwzMjYzMzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDE5MTUwKTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKF8pe3JldHVybiJvYmplY3QiPT10eXBlb2YgXz9udWxsIT09XzpJKF8pfX0sNDM0MDY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMjYzMyk7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKXx8bnVsbD09PV99fSw4ODc4ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1''@;'; put 'put ''ZS5leHBvcnRzPSExfSw4ODg2NzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDMyNjMzKSxfPXkoODY2NzUpLEI9eSg1ODAxMikoIm1hdGNoIik7dWUuZXhwb3J0cz1mdW5jdGlvbih3KXt2YXIgUDtyZXR1cm4gSSh3KSYmKHZvaWQgMCE9PShQPXdbQl0pPyEhUDoiUmVnRXhwIj09''@;'; put 'put ''PV8odykpfX0sOTI5OTg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMjIwMiksXz15KDE5MTUwKSxnPXkoNDY4KSxCPXkoNjY5OTUpLHc9T2JqZWN0O3VlLmV4cG9ydHM9Qj9mdW5jdGlvbihQKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFB9OmZ1bmN0aW9uKFApe3ZhciBGPUko''@;'; put 'put ''IlN5bWJvbCIpO3JldHVybiBfKEYpJiZnKEYucHJvdG90eXBlLHcoUCkpfX0sMTEzODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2OTI2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxCKXtmb3IodmFyIEYsTyx3PUI/XzpfLml0ZXJhdG9yLFA9Xy5uZXh0OyEoRj1JKFAsdykp''@;'; put 'put ''LmRvbmU7KWlmKHZvaWQgMCE9PShPPWcoRi52YWx1ZSkpKXJldHVybiBPfX0sMzA3ODc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3ODgxMSksXz15KDQ2OTI2KSxnPXkoMTEwOCksQj15KDc1MjEyKSx3PXkoNjY3OTIpLFA9eSg3MTcxKSxGPXkoNDY4KSxPPXkoNDM1ODQpLHo9''@;'; put 'put ''eSgzNjkzMiksTj15KDY2NTQyKSxMPVR5cGVFcnJvcixLPWZ1bmN0aW9uKFcsWSl7dGhpcy5zdG9wcGVkPVcsdGhpcy5yZXN1bHQ9WX0sVT1LLnByb3RvdHlwZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFcsWSxxKXt2YXIgX2UsVGUsU2UsemUsVixwLGIsSj0hKCFxfHwhcS5BU19FTlRSSUVTKSxu''@;'; put 'put ''ZT0hKCFxfHwhcS5JU19SRUNPUkQpLGllPSEoIXF8fCFxLklTX0lURVJBVE9SKSxsZT0hKCFxfHwhcS5JTlRFUlJVUFRFRCksbWU9SShZLHEmJnEudGhhdCkseD1mdW5jdGlvbihUKXtyZXR1cm4gX2UmJk4oX2UsIm5vcm1hbCIsVCksbmV3IEsoITAsVCl9LEM9ZnVuY3Rpb24oVCl7cmV0dXJu''@;'; put 'put ''IEo/KGcoVCksbGU/bWUoVFswXSxUWzFdLHgpOm1lKFRbMF0sVFsxXSkpOmxlP21lKFQseCk6bWUoVCl9O2lmKG5lKV9lPVcuaXRlcmF0b3I7ZWxzZSBpZihpZSlfZT1XO2Vsc2V7aWYoIShUZT16KFcpKSl0aHJvdyBuZXcgTChCKFcpKyIgaXMgbm90IGl0ZXJhYmxlIik7aWYodyhUZSkpe2Zv''@;'; put 'put ''cihTZT0wLHplPVAoVyk7emU+U2U7U2UrKylpZigoVj1DKFdbU2VdKSkmJkYoVSxWKSlyZXR1cm4gVjtyZXR1cm4gbmV3IEsoITEpfV9lPU8oVyxUZSl9Zm9yKHA9bmU/Vy5uZXh0Ol9lLm5leHQ7IShiPV8ocCxfZSkpLmRvbmU7KXt0cnl7Vj1DKGIudmFsdWUpfWNhdGNoKFQpe04oX2UsInRo''@;'; put 'put ''cm93IixUKX1pZigib2JqZWN0Ij09dHlwZW9mIFYmJlYmJkYoVSxWKSlyZXR1cm4gVn1yZXR1cm4gbmV3IEsoITEpfX0sNjY1NDI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDExMDgpLGc9eSg4NjExNSk7dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcsUCl7dmFy''@;'; put 'put ''IEYsTztfKEIpO3RyeXtpZighKEY9ZyhCLCJyZXR1cm4iKSkpe2lmKCJ0aHJvdyI9PT13KXRocm93IFA7cmV0dXJuIFB9Rj1JKEYsQil9Y2F0Y2goeil7Tz0hMCxGPXp9aWYoInRocm93Ij09PXcpdGhyb3cgUDtpZihPKXRocm93IEY7cmV0dXJuIF8oRiksUH19LDY5OTE3Oih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoNDY5MjYpLF89eSg5Nzk1MSksZz15KDM2Njc4KSxCPXkoMTQ3NTApLHc9eSg1ODAxMiksUD15KDQ3MzYpLEY9eSg4NjExNSksTz15KDc4OTY4KS5JdGVyYXRvclByb3RvdHlwZSx6PXkoNTg5NzgpLE49eSg2NjU0MiksTD13KCJ0b1N0cmluZ1RhZyIpLEs9''@;'; put 'put ''Ikl0ZXJhdG9ySGVscGVyIixVPSJXcmFwRm9yVmFsaWRJdGVyYXRvciIsVz1QLnNldCxZPWZ1bmN0aW9uKEope3ZhciBuZT1QLmdldHRlckZvcihKP1U6Syk7cmV0dXJuIEIoXyhPKSx7bmV4dDpmdW5jdGlvbigpe3ZhciBsZT1uZSh0aGlzKTtpZihKKXJldHVybiBsZS5uZXh0SGFuZGxlcigp''@;'; put 'put ''O2lmKGxlLmRvbmUpcmV0dXJuIHoodm9pZCAwLCEwKTt0cnl7dmFyIG1lPWxlLm5leHRIYW5kbGVyKCk7cmV0dXJuIGxlLnJldHVybkhhbmRsZXJSZXN1bHQ/bWU6eihtZSxsZS5kb25lKX1jYXRjaChfZSl7dGhyb3cgbGUuZG9uZT0hMCxfZX19LHJldHVybjpmdW5jdGlvbigpe3ZhciBpZT1u''@;'; put 'put ''ZSh0aGlzKSxsZT1pZS5pdGVyYXRvcjtpZihpZS5kb25lPSEwLEope3ZhciBtZT1GKGxlLCJyZXR1cm4iKTtyZXR1cm4gbWU/SShtZSxsZSk6eih2b2lkIDAsITApfWlmKGllLmlubmVyKXRyeXtOKGllLmlubmVyLml0ZXJhdG9yLCJub3JtYWwiKX1jYXRjaChfZSl7cmV0dXJuIE4obGUsInRo''@;'; put 'put ''cm93IixfZSl9cmV0dXJuIGxlJiZOKGxlLCJub3JtYWwiKSx6KHZvaWQgMCwhMCl9fSl9LHE9WSghMCksZWU9WSghMSk7ZyhlZSxMLCJJdGVyYXRvciBIZWxwZXIiKSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEosbmUsaWUpe3ZhciBsZT1mdW5jdGlvbihfZSxUZSl7VGU/KFRlLml0ZXJhdG9yPV9l''@;'; put 'put ''Lml0ZXJhdG9yLFRlLm5leHQ9X2UubmV4dCk6VGU9X2UsVGUudHlwZT1uZT9VOkssVGUucmV0dXJuSGFuZGxlclJlc3VsdD0hIWllLFRlLm5leHRIYW5kbGVyPUosVGUuY291bnRlcj0wLFRlLmRvbmU9ITEsVyh0aGlzLFRlKX07cmV0dXJuIGxlLnByb3RvdHlwZT1uZT9xOmVlLGxlfX0sNDEy''@;'; put 'put ''NTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcpe3ZhciBCPUkuSXRlcmF0b3Isdz1CJiZCLnByb3RvdHlwZSxQPXcmJndbX10sRj0hMTtpZihQKXRyeXtQLmNhbGwoe25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19''@;'; put 'put ''LHJldHVybjpmdW5jdGlvbigpe0Y9ITB9fSwtMSl9Y2F0Y2goTyl7TyBpbnN0YW5jZW9mIGd8fChGPSExKX1pZighRilyZXR1cm4gUH19LDc4OTY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBMLEssVSxJPXkoNTU1OTIpLF89eSgxOTE1MCksZz15KDMyNjMzKSxCPXkoOTc5NTEpLHc9''@;'; put 'put ''eSgyNjQwMCksUD15KDMxMDgzKSxGPXkoNTgwMTIpLE89eSg4ODc4OCksej1GKCJpdGVyYXRvciIpLE49ITE7W10ua2V5cyYmKCJuZXh0ImluKFU9W10ua2V5cygpKT8oSz13KHcoVSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihMPUspOk49ITApLCFnKEwpfHxJKGZ1bmN0aW9uKCl7dmFyIFk9''@;'; put 'put ''e307cmV0dXJuIExbel0uY2FsbChZKSE9PVl9KT9MPXt9Ok8mJihMPUIoTCkpLF8oTFt6XSl8fFAoTCx6LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1ZS5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpMLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6Tn19LDE5MjU4OnVlPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3VlLmV4cG9ydHM9e319LDcxNzE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg5NDIzNyk7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfLmxlbmd0aCl9fSwxNjk4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPXkoNTU1OTIpLGc9''@;'; put 'put ''eSgxOTE1MCksQj15KDM4ZTMpLHc9eSg0NjM4NyksUD15KDg5OTgxKS5DT05GSUdVUkFCTEUsRj15KDI2OTMxKSxPPXkoNDczNiksej1PLmVuZm9yY2UsTj1PLmdldCxMPVN0cmluZyxLPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxVPUkoIiIuc2xpY2UpLFc9SSgiIi5yZXBsYWNlKSxZPUkoW10u''@;'; put 'put ''am9pbikscT13JiYhXyhmdW5jdGlvbigpe3JldHVybiA4IT09SyhmdW5jdGlvbigpe30sImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSxlZT1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksSj11ZS5leHBvcnRzPWZ1bmN0aW9uKG5lLGllLGxlKXsiU3ltYm9sKCI9PT1VKEwoaWUp''@;'; put 'put ''LDAsNykmJihpZT0iWyIrVyhMKGllKSwvXlN5bWJvbFwoKFteKV0qKVwpLiokLywiJDEiKSsiXSIpLGxlJiZsZS5nZXR0ZXImJihpZT0iZ2V0ICIraWUpLGxlJiZsZS5zZXR0ZXImJihpZT0ic2V0ICIraWUpLCghQihuZSwibmFtZSIpfHxQJiZuZS5uYW1lIT09aWUpJiYodz9LKG5lLCJuYW1l''@;'; put 'put ''Iix7dmFsdWU6aWUsY29uZmlndXJhYmxlOiEwfSk6bmUubmFtZT1pZSkscSYmbGUmJkIobGUsImFyaXR5IikmJm5lLmxlbmd0aCE9PWxlLmFyaXR5JiZLKG5lLCJsZW5ndGgiLHt2YWx1ZTpsZS5hcml0eX0pO3RyeXtsZSYmQihsZSwiY29uc3RydWN0b3IiKSYmbGUuY29uc3RydWN0b3I/dyYm''@;'; put 'put ''SyhuZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTpuZS5wcm90b3R5cGUmJihuZS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaHt9dmFyIG1lPXoobmUpO3JldHVybiBCKG1lLCJzb3VyY2UiKXx8KG1lLnNvdXJjZT1ZKGVlLCJzdHJpbmciPT10eXBlb2YgaWU/aWU6IiIpKSxuZX07RnVuY3Rp''@;'; put 'put ''b24ucHJvdG90eXBlLnRvU3RyaW5nPUooZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKSYmTih0aGlzKS5zb3VyY2V8fEYodGhpcyl9LCJ0b1N0cmluZyIpfSwxODU1Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1NYXRoLmNlaWwseT1NYXRoLmZsb29yO3VlLmV4cG9ydHM9TWF0aC50cnVuY3x8''@;'; put 'put ''ZnVuY3Rpb24oXyl7dmFyIGc9K187cmV0dXJuKGc+MD95OlgpKGcpfX0sMzkxMTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2ODMzMik7dWUuZXhwb3J0cz1mdW5jdGlvbihfLGcpe3JldHVybiB2b2lkIDA9PT1fP2FyZ3VtZW50cy5sZW5ndGg8Mj8iIjpnOkkoXyl9fSw5Nzk1''@;'; put 'put ''MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWUsST15KDExMDgpLF89eSg3MTE2OCksZz15KDU4NTQwKSxCPXkoMzQ2NzApLHc9eSg4NzM3MiksUD15KDU1OTg4KSxGPXkoNzk2NjIpLE49InByb3RvdHlwZSIsTD0ic2NyaXB0IixLPUYoIklFX1BST1RPIiksVT1mdW5jdGlvbigpe30s''@;'; put 'put ''Vz1mdW5jdGlvbihuZSl7cmV0dXJuIjwiK0wrIj4iK25lKyI8LyIrTCsiPiJ9LFk9ZnVuY3Rpb24obmUpe25lLndyaXRlKFcoIiIpKSxuZS5jbG9zZSgpO3ZhciBpZT1uZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBuZT1udWxsLGllfSxKPWZ1bmN0aW9uKCl7dHJ5e2VlPW5ldyBBY3Rp''@;'; put 'put ''dmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoe31KPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuZG9tYWluJiZlZT9ZKGVlKTpmdW5jdGlvbigpe3ZhciBsZSxuZT1QKCJpZnJhbWUiKSxpZT0iamF2YSIrTCsiOiI7cmV0dXJuIG5lLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHcuYXBwZW5k''@;'; put 'put ''Q2hpbGQobmUpLG5lLnNyYz1TdHJpbmcoaWUpLChsZT1uZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksbGUud3JpdGUoVygiZG9jdW1lbnQuRj1PYmplY3QiKSksbGUuY2xvc2UoKSxsZS5GfSgpOlkoZWUpO2Zvcih2YXIgbmU9Zy5sZW5ndGg7bmUtLTspZGVsZXRlIEpbTl1bZ1tu''@;'; put 'put ''ZV1dO3JldHVybiBKKCl9O0JbS109ITAsdWUuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihpZSxsZSl7dmFyIG1lO3JldHVybiBudWxsIT09aWU/KFVbTl09SShpZSksbWU9bmV3IFUsVVtOXT1udWxsLG1lW0tdPWllKTptZT1KKCksdm9pZCAwPT09bGU/bWU6Xy5mKG1lLGxlKX19''@;'; put 'put ''LDcxMTY4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSgyNjkyOSksZz15KDQ0NjQ4KSxCPXkoMTEwOCksdz15KDkzMTYyKSxQPXkoMTAxNDMpO1guZj1JJiYhXz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihPLHope0IoTyk7Zm9yKHZhciBXLE49''@;'; put 'put ''dyh6KSxMPVAoeiksSz1MLmxlbmd0aCxVPTA7Sz5VOylnLmYoTyxXPUxbVSsrXSxOW1ddKTtyZXR1cm4gT319LDQ0NjQ4Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDYzODcpLF89eSg1NzI0NCksZz15KDI2OTI5KSxCPXkoMTEwOCksdz15KDU5NDEwKSxQPVR5cGVFcnJvcixG''@;'; put 'put ''PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxPPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isej0iZW51bWVyYWJsZSIsTj0iY29uZmlndXJhYmxlIixMPSJ3cml0YWJsZSI7WC5mPUk/Zz9mdW5jdGlvbihVLFcsWSl7aWYoQihVKSxXPXcoVyksQihZKSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''VSYmInByb3RvdHlwZSI9PT1XJiYidmFsdWUiaW4gWSYmTCBpbiBZJiYhWVtMXSl7dmFyIHE9TyhVLFcpO3EmJnFbTF0mJihVW1ddPVkudmFsdWUsWT17Y29uZmlndXJhYmxlOk4gaW4gWT9ZW05dOnFbTl0sZW51bWVyYWJsZTp6IGluIFk/WVt6XTpxW3pdLHdyaXRhYmxlOiExfSl9cmV0dXJu''@;'; put 'put ''IEYoVSxXLFkpfTpGOmZ1bmN0aW9uKFUsVyxZKXtpZihCKFUpLFc9dyhXKSxCKFkpLF8pdHJ5e3JldHVybiBGKFUsVyxZKX1jYXRjaHt9aWYoImdldCJpbiBZfHwic2V0ImluIFkpdGhyb3cgbmV3IFAoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIFkmJihVW1dd''@;'; put 'put ''PVkudmFsdWUpLFV9fSw1NDEyMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ2Mzg3KSxfPXkoNDY5MjYpLGc9eSgzOTYyKSxCPXkoNzc3NzMpLHc9eSg5MzE2MiksUD15KDU5NDEwKSxGPXkoMzhlMyksTz15KDU3MjQ0KSx6PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0''@;'; put 'put ''b3I7WC5mPUk/ejpmdW5jdGlvbihMLEspe2lmKEw9dyhMKSxLPVAoSyksTyl0cnl7cmV0dXJuIHooTCxLKX1jYXRjaHt9aWYoRihMLEspKXJldHVybiBCKCFfKGcuZixMLEspLExbS10pfX0sMzYxNDM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyMzMxMyksZz15KDU4NTQwKS5j''@;'; put 'put ''b25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO1guZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odyl7cmV0dXJuIEkodyxnKX19LDI4MDcwOih1ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sMjY0MDA6KHVlLFgseSk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzOGUzKSxfPXkoMTkxNTApLGc9eSgzMTk1MCksQj15KDc5NjYyKSx3PXkoODI4MzQpLFA9QigiSUVfUFJPVE8iKSxGPU9iamVjdCxPPUYucHJvdG90eXBlO3VlLmV4cG9ydHM9dz9GLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHope3ZhciBOPWcoeik7''@;'; put 'put ''aWYoSShOLFApKXJldHVybiBOW1BdO3ZhciBMPU4uY29uc3RydWN0b3I7cmV0dXJuIF8oTCkmJk4gaW5zdGFuY2VvZiBMP0wucHJvdG90eXBlOk4gaW5zdGFuY2VvZiBGP086bnVsbH19LDQ2ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KTt1ZS5leHBvcnRzPUkoe30u''@;'; put 'put ''aXNQcm90b3R5cGVPZil9LDIzMzEzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNTg2MDcpLF89eSgzOGUzKSxnPXkoOTMxNjIpLEI9eSg3NDgyNCkuaW5kZXhPZix3PXkoMzQ2NzApLFA9SShbXS5wdXNoKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIEssej1nKEYpLE49''@;'; put 'put ''MCxMPVtdO2ZvcihLIGluIHopIV8odyxLKSYmXyh6LEspJiZQKEwsSyk7Zm9yKDtPLmxlbmd0aD5OOylfKHosSz1PW04rK10pJiYofkIoTCxLKXx8UChMLEspKTtyZXR1cm4gTH19LDEwMTQzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjMzMTMpLF89eSg1ODU0MCk7dWUuZXhw''@;'; put 'put ''b3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oQil7cmV0dXJuIEkoQixfKX19LDM5NjI6KHVlLFgpPT57InVzZSBzdHJpY3QiO3ZhciB5PXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixfPUkmJiF5LmNhbGwoezE6Mn0sMSk7WC5mPV8/''@;'; put 'put ''ZnVuY3Rpb24oQil7dmFyIHc9SSh0aGlzLEIpO3JldHVybiEhdyYmdy5lbnVtZXJhYmxlfTp5fSwyMTYxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDY5MjI3KSxfPXkoMzI2MzMpLGc9eSg4ODI3NSksQj15KDI3NjcpO3VlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9m''@;'; put 'put ''fHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIEYsdz0hMSxQPXt9O3RyeXsoRj1JKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIsInNldCIpKShQLFtdKSx3PVAgaW5zdGFuY2VvZiBBcnJheX1jYXRjaHt9cmV0dXJuIGZ1bmN0aW9uKHosTil7cmV0dXJuIGcoeiksQihOKSxf''@;'; put 'put ''KHopJiYodz9GKHosTik6ei5fX3Byb3RvX189Tiksen19KCk6dm9pZCAwKX0sOTM4NjU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDE5MTUwKSxnPXkoMzI2MzMpLEI9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRixPO2lmKCJzdHJp''@;'; put 'put ''bmciPT09UCYmXyhGPXcudG9TdHJpbmcpJiYhZyhPPUkoRix3KSl8fF8oRj13LnZhbHVlT2YpJiYhZyhPPUkoRix3KSl8fCJzdHJpbmciIT09UCYmXyhGPXcudG9TdHJpbmcpJiYhZyhPPUkoRix3KSkpcmV0dXJuIE87dGhyb3cgbmV3IEIoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1p''@;'; put 'put ''dGl2ZSB2YWx1ZSIpfX0sODgwNzg6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgxMjIwMiksXz15KDU4NjA3KSxnPXkoMzYxNDMpLEI9eSgyODA3MCksdz15KDExMDgpLFA9XyhbXS5jb25jYXQpO3VlLmV4cG9ydHM9SSgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oTyl7''@;'; put 'put ''dmFyIHo9Zy5mKHcoTykpLE49Qi5mO3JldHVybiBOP1AoeixOKE8pKTp6fX0sNjAzMjE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NDY0OCkuZjt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sZyxCKXtCIGluIF98fEkoXyxCLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGdbQl19LHNldDpmdW5jdGlvbih3KXtnW0JdPXd9fSl9fSwyMjc1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDExMDgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgXz1JKHRoaXMpLGc9IiI7cmV0dXJuIF8uaGFzSW5kaWNlcyYmKGcrPSJkIiksXy5nbG9iYWwm''@;'; put 'put ''JihnKz0iZyIpLF8uaWdub3JlQ2FzZSYmKGcrPSJpIiksXy5tdWx0aWxpbmUmJihnKz0ibSIpLF8uZG90QWxsJiYoZys9InMiKSxfLnVuaWNvZGUmJihnKz0idSIpLF8udW5pY29kZVNldHMmJihnKz0idiIpLF8uc3RpY2t5JiYoZys9InkiKSxnfX0sMzcwNzU6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDM4ZTMpLGc9eSg0NjgpLEI9eSgyMjc1NCksdz1SZWdFeHAucHJvdG90eXBlO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9UC5mbGFncztyZXR1cm4gdm9pZCAwIT09Rnx8ImZsYWdzImluIHd8fF8oUCwiZmxhZ3MiKXx8IWcodyxQKT9GOkko''@;'; put 'put ''QixQKX19LDg4Mjc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoOTQ0NjgpLF89VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7aWYoSShnKSl0aHJvdyBuZXcgXygiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitnKTtyZXR1cm4gZ319LDQzMjQ5Oih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBOLEk9eSgzMzk2MyksXz15KDQwMjIwKSxnPXkoMTkxNTApLEI9eSg0NzA5Miksdz15KDIzNTgpLFA9eSg3NzYzOSksRj15KDI3OTY3KSxPPUkuRnVuY3Rpb24sej0vTVNJRSAuXC4vLnRlc3Qodyl8fCJCVU4iPT09QiYmKChOPUkuQnVuLnZlcnNpb24uc3BsaXQoIi4i''@;'; put 'put ''KSkubGVuZ3RoPDN8fCIwIj09PU5bMF0mJihOWzFdPDN8fCIzIj09PU5bMV0mJiIwIj09PU5bMl0pKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKE4sTCl7dmFyIEs9TD8yOjE7cmV0dXJuIHo/ZnVuY3Rpb24oVSxXKXt2YXIgWT1GKGFyZ3VtZW50cy5sZW5ndGgsMSk+SyxxPWcoVSk/VTpPKFUpLGVl''@;'; put 'put ''PVk/UChhcmd1bWVudHMsSyk6W10sSj1ZP2Z1bmN0aW9uKCl7XyhxLHRoaXMsZWUpfTpxO3JldHVybiBMP04oSixXKTpOKEopfTpOfX0sMTQ0NToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDk3NTQxKSxfPXkoMjE5MTApLGc9SS5TZXQsQj1JLmFkZDt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKHcpe3ZhciBQPW5ldyBnO3JldHVybiBfKHcsZnVuY3Rpb24oRil7QihQLEYpfSksUH19LDgwMjEzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSksZz15KDE0NDUpLEI9eSgzMDMzOSksdz15KDQzNjMyKSxQPXkoMjE5MTApLEY9eSgxMTM4KSxP''@;'; put 'put ''PV8uaGFzLHo9Xy5yZW1vdmU7dWUuZXhwb3J0cz1mdW5jdGlvbihMKXt2YXIgSz1JKHRoaXMpLFU9dyhMKSxXPWcoSyk7cmV0dXJuIEIoSyk8PVUuc2l6ZT9QKEssZnVuY3Rpb24oWSl7VS5pbmNsdWRlcyhZKSYmeihXLFkpfSk6RihVLmdldEl0ZXJhdG9yKCksZnVuY3Rpb24oWSl7TyhLLFkp''@;'; put 'put ''JiZ6KFcsWSl9KSxXfX0sOTc1NDE6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz1TZXQucHJvdG90eXBlO3VlLmV4cG9ydHM9e1NldCxhZGQ6SShfLmFkZCksaGFzOkkoXy5oYXMpLHJlbW92ZTpJKF8uZGVsZXRlKSxwcm90bzpffX0sNjE4Nzk6KHVlLFgseSk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDk3NTQxKSxnPXkoMzAzMzkpLEI9eSg0MzYzMiksdz15KDIxOTEwKSxQPXkoMTEzOCksRj1fLlNldCxPPV8uYWRkLHo9Xy5oYXM7dWUuZXhwb3J0cz1mdW5jdGlvbihMKXt2YXIgSz1JKHRoaXMpLFU9QihMKSxXPW5ldyBGO3JldHVybiBn''@;'; put 'put ''KEspPlUuc2l6ZT9QKFUuZ2V0SXRlcmF0b3IoKSxmdW5jdGlvbihZKXt6KEssWSkmJk8oVyxZKX0pOncoSyxmdW5jdGlvbihZKXtVLmluY2x1ZGVzKFkpJiZPKFcsWSl9KSxXfX0sNzM2MjQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzNzczMSksXz15KDk3NTQxKS5oYXMsZz15''@;'; put 'put ''KDMwMzM5KSxCPXkoNDM2MzIpLHc9eSgyMTkxMCksUD15KDExMzgpLEY9eSg2NjU0Mik7dWUuZXhwb3J0cz1mdW5jdGlvbih6KXt2YXIgTj1JKHRoaXMpLEw9Qih6KTtpZihnKE4pPD1MLnNpemUpcmV0dXJuITEhPT13KE4sZnVuY3Rpb24oVSl7aWYoTC5pbmNsdWRlcyhVKSlyZXR1cm4hMX0s''@;'; put 'put ''ITApO3ZhciBLPUwuZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PVAoSyxmdW5jdGlvbihVKXtpZihfKE4sVSkpcmV0dXJuIEYoSywibm9ybWFsIiwhMSl9KX19LDc0ODM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSgzMDMzOSksZz15KDIxOTEwKSxCPXkoNDM2''@;'; put 'put ''MzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9SSh0aGlzKSxPPUIoUCk7cmV0dXJuIShfKEYpPk8uc2l6ZSkmJiExIT09ZyhGLGZ1bmN0aW9uKHope2lmKCFPLmluY2x1ZGVzKHopKXJldHVybiExfSwhMCl9fSw5NjA2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3''@;'; put 'put ''NzMxKSxfPXkoOTc1NDEpLmhhcyxnPXkoMzAzMzkpLEI9eSg0MzYzMiksdz15KDExMzgpLFA9eSg2NjU0Mik7dWUuZXhwb3J0cz1mdW5jdGlvbihPKXt2YXIgej1JKHRoaXMpLE49QihPKTtpZihnKHopPE4uc2l6ZSlyZXR1cm4hMTt2YXIgTD1OLmdldEl0ZXJhdG9yKCk7cmV0dXJuITEhPT13''@;'; put 'put ''KEwsZnVuY3Rpb24oSyl7aWYoIV8oeixLKSlyZXR1cm4gUChMLCJub3JtYWwiLCExKX0pfX0sMjE5MTA6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1ODYwNyksXz15KDExMzgpLGc9eSg5NzU0MSksQj1nLlNldCx3PWcucHJvdG8sUD1JKHcuZm9yRWFjaCksRj1JKHcua2V5cyks''@;'; put 'put ''Tz1GKG5ldyBCKS5uZXh0O3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOLEwpe3JldHVybiBMP18oe2l0ZXJhdG9yOkYoeiksbmV4dDpPfSxOKTpQKHosTil9fSw1MzUwNToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDEyMjAyKSxfPWZ1bmN0aW9uKEIpe3JldHVybntzaXplOkIsaGFz''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuITF9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEwfX19fX19LGc9ZnVuY3Rpb24oQil7cmV0dXJue3NpemU6QixoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sa2V5czpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cigiZSIpfX19O3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3KXt2YXIgUD1JKCJTZXQiKTt0cnl7KG5ldyBQKVtCXShfKDApKTt0cnl7cmV0dXJuKG5ldyBQKVtCXShfKC0xKSksITF9Y2F0Y2h7aWYoIXcpcmV0dXJuITA7dHJ5e3JldHVybihuZXcgUClbQl0oZygtMS8wKSksITF9Y2F0Y2h7dmFy''@;'; put 'put ''IEY9bmV3IFA7cmV0dXJuIEYuYWRkKDEpLEYuYWRkKDIpLHcoRltCXShnKDEvMCkpKX19fWNhdGNoe3JldHVybiExfX19LDMwMzM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjkyMjcpLF89eSg5NzU0MSk7dWUuZXhwb3J0cz1JKF8ucHJvdG8sInNpemUiLCJnZXQiKXx8ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIGcuc2l6ZX19LDg1MDM5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzc3MzEpLF89eSg5NzU0MSksZz15KDE0NDUpLEI9eSg0MzYzMiksdz15KDExMzgpLFA9Xy5hZGQsRj1fLmhhcyxPPV8ucmVtb3ZlO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTil7dmFy''@;'; put 'put ''IEw9SSh0aGlzKSxLPUIoTikuZ2V0SXRlcmF0b3IoKSxVPWcoTCk7cmV0dXJuIHcoSyxmdW5jdGlvbihXKXtGKEwsVyk/TyhVLFcpOlAoVSxXKX0pLFV9fSwyMDUwNzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDM3NzMxKSxfPXkoOTc1NDEpLmFkZCxnPXkoMTQ0NSksQj15KDQz''@;'; put 'put ''NjMyKSx3PXkoMTEzOCk7dWUuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgTz1JKHRoaXMpLHo9QihGKS5nZXRJdGVyYXRvcigpLE49ZyhPKTtyZXR1cm4gdyh6LGZ1bmN0aW9uKEwpe18oTixMKX0pLE59fSw3OTY2MjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg3NDg0KSxfPXko''@;'; put 'put ''NjM5NTEpLGc9SSgia2V5cyIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJuIGdbQl18fChnW0JdPV8oQikpfX0sNDgzNTY6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg4ODc4OCksXz15KDMzOTYzKSxnPXkoNDgxMDQpLEI9Il9fY29yZS1qc19zaGFyZWRfXyIsdz11ZS5l''@;'; put 'put ''eHBvcnRzPV9bQl18fGcoQix7fSk7KHcudmVyc2lvbnN8fCh3LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy40Mi4wIixtb2RlOkk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE0LTIwMjUgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGxpY2Vuc2U6Imh0''@;'; put 'put ''dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pfSw4NzQ4NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDQ4MzU2KTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKF8sZyl7cmV0dXJuIElbX118fChJW19dPWd8fHt9KX19LDM2NTA2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNDQwNjYpLF89eSg1NTU5MiksQj15KDMzOTYzKS5TdHJpbmc7dWUuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFfKGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHc9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIUIodyl8fCEoT2JqZWN0KHcpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJkkmJkk8NDF9KX0sNzU5NjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgX2UsVGUsU2UsemUsST15KDMzOTYzKSxfPXko''@;'; put 'put ''NDAyMjApLGc9eSg3ODgxMSksQj15KDE5MTUwKSx3PXkoMzhlMyksUD15KDU1NTkyKSxGPXkoODczNzIpLE89eSg3NzYzOSksej15KDU1OTg4KSxOPXkoMjc5NjcpLEw9eSg0NDEzNyksSz15KDIxNTEwKSxVPUkuc2V0SW1tZWRpYXRlLFc9SS5jbGVhckltbWVkaWF0ZSxZPUkucHJvY2Vzcyxx''@;'; put 'put ''PUkuRGlzcGF0Y2gsZWU9SS5GdW5jdGlvbixKPUkuTWVzc2FnZUNoYW5uZWwsbmU9SS5TdHJpbmcsaWU9MCxsZT17fSxtZT0ib25yZWFkeXN0YXRlY2hhbmdlIjtQKGZ1bmN0aW9uKCl7X2U9SS5sb2NhdGlvbn0pO3ZhciBWPWZ1bmN0aW9uKEMpe2lmKHcobGUsQykpe3ZhciBUPWxlW0NdO2Rl''@;'; put 'put ''bGV0ZSBsZVtDXSxUKCl9fSxwPWZ1bmN0aW9uKEMpe3JldHVybiBmdW5jdGlvbigpe1YoQyl9fSxiPWZ1bmN0aW9uKEMpe1YoQy5kYXRhKX0seD1mdW5jdGlvbihDKXtJLnBvc3RNZXNzYWdlKG5lKEMpLF9lLnByb3RvY29sKyIvLyIrX2UuaG9zdCl9OyghVXx8IVcpJiYoVT1mdW5jdGlvbihU''@;'; put 'put ''KXtOKGFyZ3VtZW50cy5sZW5ndGgsMSk7dmFyIEg9QihUKT9UOmVlKFQpLGo9Tyhhcmd1bWVudHMsMSk7cmV0dXJuIGxlWysraWVdPWZ1bmN0aW9uKCl7XyhILHZvaWQgMCxqKX0sVGUoaWUpLGllfSxXPWZ1bmN0aW9uKFQpe2RlbGV0ZSBsZVtUXX0sSz9UZT1mdW5jdGlvbihDKXtZLm5leHRU''@;'; put 'put ''aWNrKHAoQykpfTpxJiZxLm5vdz9UZT1mdW5jdGlvbihDKXtxLm5vdyhwKEMpKX06SiYmIUw/KHplPShTZT1uZXcgSikucG9ydDIsU2UucG9ydDEub25tZXNzYWdlPWIsVGU9Zyh6ZS5wb3N0TWVzc2FnZSx6ZSkpOkkuYWRkRXZlbnRMaXN0ZW5lciYmQihJLnBvc3RNZXNzYWdlKSYmIUkuaW1w''@;'; put 'put ''b3J0U2NyaXB0cyYmX2UmJiJmaWxlOiIhPT1fZS5wcm90b2NvbCYmIVAoeCk/KFRlPXgsSS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6VGU9bWUgaW4geigic2NyaXB0Iik/ZnVuY3Rpb24oQyl7Ri5hcHBlbmRDaGlsZCh6KCJzY3JpcHQiKSlbbWVdPWZ1bmN0aW9uKCl7Ri5y''@;'; put 'put ''ZW1vdmVDaGlsZCh0aGlzKSxWKEMpfX06ZnVuY3Rpb24oQyl7c2V0VGltZW91dChwKEMpLDApfSksdWUuZXhwb3J0cz17c2V0OlUsY2xlYXI6V319LDc0ODU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg2NDU1MCksXz1NYXRoLm1heCxnPU1hdGgubWluO3VlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oQix3KXt2YXIgUD1JKEIpO3JldHVybiBQPDA/XyhQK3csMCk6ZyhQLHcpfX0sOTMxNjI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg1NTgpLF89eSg4ODI3NSk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4gSShfKGcpKX19LDY0NTUwOih1ZSxYLHkpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPXkoMTg1NTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7dmFyIGc9K187cmV0dXJuIGchPWd8fDA9PT1nPzA6SShnKX19LDk0MjM3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoNjQ1NTApLF89TWF0aC5taW47dWUuZXhwb3J0cz1mdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgQj1JKGcpO3JldHVybiBCPjA/XyhCLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwzMTk1MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDg4Mjc1KSxfPU9iamVjdDt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe3JldHVybiBfKEkoZykpfX0sODU2NTY6KHVlLFgseSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9eSg0NjkyNiksXz15KDMyNjMzKSxnPXkoOTI5OTgpLEI9eSg4NjExNSksdz15KDkzODY1KSxQPXkoNTgwMTIpLEY9VHlwZUVycm9yLE89UCgidG9QcmltaXRpdmUiKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTil7aWYoIV8oeil8fGcoeikpcmV0dXJuIHo7dmFyIEssTD1C''@;'; put 'put ''KHosTyk7aWYoTCl7aWYodm9pZCAwPT09TiYmKE49ImRlZmF1bHQiKSxLPUkoTCx6LE4pLCFfKEspfHxnKEspKXJldHVybiBLO3Rocm93IG5ldyBGKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX1yZXR1cm4gdm9pZCAwPT09TiYmKE49Im51bWJlciIpLHcoeixO''@;'; put 'put ''KX19LDU5NDEwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoODU2NTYpLF89eSg5Mjk5OCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXt2YXIgQj1JKGcsInN0cmluZyIpO3JldHVybiBfKEIpP0I6QisiIn19LDM4NTk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBnPXt9O2db''@;'; put 'put ''eSg1ODAxMikoInRvU3RyaW5nVGFnIildPSJ6Iix1ZS5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhnKX0sNjgzMzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg3MTgyNCksXz1TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtpZigiU3ltYm9sIj09PUkoZykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gXyhnKX19LDc1MjEyOnVlPT57InVzZSBzdHJpY3QiO3ZhciBYPVN0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3RyeXtyZXR1cm4gWCh5KX1jYXRjaHtyZXR1cm4i''@;'; put 'put ''T2JqZWN0In19fSw2Mzk1MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDU4NjA3KSxfPTAsZz1NYXRoLnJhbmRvbSgpLEI9SSgxLi50b1N0cmluZyk7dWUuZXhwb3J0cz1mdW5jdGlvbih3KXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PXc/IiI6dykrIilfIitCKCsrXytnLDM2''@;'; put 'put ''KX19LDY2OTk1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzY1MDYpO3VlLmV4cG9ydHM9SSYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcn0sMjY5Mjk6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSg0NjM4NyksXz15KDU1NTky''@;'; put 'put ''KTt1ZS5leHBvcnRzPUkmJl8oZnVuY3Rpb24oKXtyZXR1cm4gNDIhPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pfSwyNzk2Nzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1UeXBlRXJyb3I7''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbih5LEkpe2lmKHk8SSl0aHJvdyBuZXcgWCgiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4geX19LDQ4NjkxOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMzM5NjMpLF89eSgxOTE1MCksZz1JLldlYWtNYXA7dWUuZXhwb3J0cz1fKGcpJiYv''@;'; put 'put ''bmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKGcpKX0sNTgwMTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgzMzk2MyksXz15KDg3NDg0KSxnPXkoMzhlMyksQj15KDYzOTUxKSx3PXkoMzY1MDYpLFA9eSg2Njk5NSksRj1JLlN5bWJvbCxPPV8oIndrcyIpLHo9UD9GLmZvcnx8RjpG''@;'; put 'put ''JiZGLndpdGhvdXRTZXR0ZXJ8fEI7dWUuZXhwb3J0cz1mdW5jdGlvbihOKXtyZXR1cm4gZyhPLE4pfHwoT1tOXT13JiZnKEYsTik/RltOXTp6KCJTeW1ib2wuIitOKSksT1tOXX19LDMyOTMwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMTIyMDIpLF89eSgzOGUzKSxnPXkoMzY2''@;'; put 'put ''NzgpLEI9eSg0NjgpLHc9eSgyMTYxMiksUD15KDQ4NjM5KSxGPXkoNjAzMjEpLE89eSgxNzI5Niksej15KDM5MTE2KSxOPXkoNjQ4NTUpLEw9eSgyMjMwNCksSz15KDQ2Mzg3KSxVPXkoODg3ODgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVyxZLHEsZWUpe3ZhciBKPSJzdGFja1RyYWNlTGltaXQi''@;'; put 'put ''LG5lPWVlPzI6MSxpZT1XLnNwbGl0KCIuIiksbGU9aWVbaWUubGVuZ3RoLTFdLG1lPUkuYXBwbHkobnVsbCxpZSk7aWYobWUpe3ZhciBfZT1tZS5wcm90b3R5cGU7aWYoIVUmJl8oX2UsImNhdXNlIikmJmRlbGV0ZSBfZS5jYXVzZSwhcSlyZXR1cm4gbWU7dmFyIFRlPUkoIkVycm9yIiksU2U9''@;'; put 'put ''WShmdW5jdGlvbih6ZSxWKXt2YXIgcD16KGVlP1Y6emUsdm9pZCAwKSxiPWVlP25ldyBtZSh6ZSk6bmV3IG1lO3JldHVybiB2b2lkIDAhPT1wJiZnKGIsIm1lc3NhZ2UiLHApLEwoYixTZSxiLnN0YWNrLDIpLHRoaXMmJkIoX2UsdGhpcykmJk8oYix0aGlzLFNlKSxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''Pm5lJiZOKGIsYXJndW1lbnRzW25lXSksYn0pO2lmKFNlLnByb3RvdHlwZT1fZSwiRXJyb3IiIT09bGU/dz93KFNlLFRlKTpQKFNlLFRlLHtuYW1lOiEwfSk6SyYmSiBpbiBtZSYmKEYoU2UsbWUsSiksRihTZSxtZSwicHJlcGFyZVN0YWNrVHJhY2UiKSksUChTZSxtZSksIVUpdHJ5e19lLm5h''@;'; put 'put ''bWUhPT1sZSYmZyhfZSwibmFtZSIsbGUpLF9lLmNvbnN0cnVjdG9yPVNlfWNhdGNoe31yZXR1cm4gU2V9fX0sMzkwOTI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMxOTUwKSxnPXkoNzE3MSksQj15KDY0NTUwKSx3PXkoNzA4MjQpO0koe3RhcmdldDoiQXJy''@;'; put 'put ''YXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oRil7dmFyIE89Xyh0aGlzKSx6PWcoTyksTj1CKEYpLEw9Tj49MD9OOnorTjtyZXR1cm4gTDwwfHxMPj16P3ZvaWQgMDpPW0xdfX0pLHcoImF0Iil9LDc3NTI1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMTk1''@;'; put 'put ''MCksZz15KDcxNzEpLEI9eSgzOTIwNiksdz15KDMzMTYpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOnkoNTU1OTIpKGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pfHwhZnVuY3Rpb24o''@;'; put 'put ''KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnB1c2goKX1jYXRjaChOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uKEwpe3ZhciBLPV8odGhpcyksVT1nKEspLFc9YXJndW1lbnRzLmxlbmd0aDt3''@;'; put 'put ''KFUrVyk7Zm9yKHZhciBZPTA7WTxXO1krKylLW1VdPWFyZ3VtZW50c1tZXSxVKys7cmV0dXJuIEIoSyxVKSxVfX0pfSwyMzAxMjoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNTg2MDcpLGc9eSgzMTQ4MyksQj15KDkzMTYyKSx3PXkoMzg4MSksUD15KDY2NTAz''@;'; put 'put ''KSxGPXkoNzA4MjQpLE89QXJyYXksej1fKFAoIkFycmF5Iiwic29ydCIpKTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se3RvU29ydGVkOmZ1bmN0aW9uKEwpe3ZvaWQgMCE9PUwmJmcoTCk7dmFyIEs9Qih0aGlzKSxVPXcoTyxLKTtyZXR1cm4geihVLEwpfX0pLEYoInRvU29ydGVkIil9''@;'; put 'put ''LDY4MTQ2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koNzA4MjQpKCJmbGF0TWFwIil9LDkzOTA5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koNzA4MjQpKCJmbGF0Iil9LDI5NzYwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMTk1MCksZz15KDcxNzEp''@;'; put 'put ''LEI9eSgzOTIwNiksdz15KDQzMTk1KSxQPXkoMzMxNik7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6MSE9PVtdLnVuc2hpZnQoMCl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkudW5zaGlm''@;'; put 'put ''dCgpfWNhdGNoKE4pe3JldHVybiBOIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3Vuc2hpZnQ6ZnVuY3Rpb24oTCl7dmFyIEs9Xyh0aGlzKSxVPWcoSyksVz1hcmd1bWVudHMubGVuZ3RoO2lmKFcpe1AoVStXKTtmb3IodmFyIFk9VTtZLS07KXt2YXIgcT1ZK1c7WSBpbiBLP0tbcV09S1tZ''@;'; put 'put ''XTp3KEsscSl9Zm9yKHZhciBlZT0wO2VlPFc7ZWUrKylLW2VlXT1hcmd1bWVudHNbZWVdfXJldHVybiBCKEssVStXKX19KX0sNDk1Mzc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMzOTYzKSxnPXkoNDAyMjApLEI9eSgzMjkzMCksdz0iV2ViQXNzZW1ibHki''@;'; put 'put ''LFA9X1t3XSxGPTchPT1uZXcgRXJyb3IoImUiLHtjYXVzZTo3fSkuY2F1c2UsTz1mdW5jdGlvbihOLEwpe3ZhciBLPXt9O0tbTl09QihOLEwsRiksSSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOkZ9LEspfSx6PWZ1bmN0aW9uKE4sTCl7aWYoUCYmUFtOXSl7dmFy''@;'; put 'put ''IEs9e307S1tOXT1CKHcrIi4iK04sTCxGKSxJKHt0YXJnZXQ6dyxzdGF0OiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOkZ9LEspfX07TygiRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJFdmFsRXJy''@;'; put 'put ''b3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJSYW5nZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiUmVmZXJlbmNlRXJyb3IiLGZ1bmN0''@;'; put 'put ''aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJTeW50YXhFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlR5cGVFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8oIlVSSUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSkseigiQ29tcGlsZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7''@;'; put 'put ''cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSkseigiTGlua0Vycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSkseigiUnVudGltZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9fSl9LDk2MTgwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgzMzk2MyksZz15KDYzMzM2KSxCPXkoMTEwOCksdz15KDE5MTUwKSxQPXkoMjY0MDApLEY9eSg0NDAzOSksTz15KDU4Nzk1KSx6PXkoNTU1OTIpLE49eSgzOGUzKSxMPXko''@;'; put 'put ''NTgwMTIpLEs9eSg3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUsVT15KDQ2Mzg3KSxXPXkoODg3ODgpLFk9ImNvbnN0cnVjdG9yIixxPSJJdGVyYXRvciIsZWU9TCgidG9TdHJpbmdUYWciKSxKPVR5cGVFcnJvcixuZT1fW3FdLGllPVd8fCF3KG5lKXx8bmUucHJvdG90eXBlIT09S3x8IXooZnVu''@;'; put 'put ''Y3Rpb24oKXtuZSh7fSl9KSxsZT1mdW5jdGlvbigpe2lmKGcodGhpcyxLKSxQKHRoaXMpPT09Syl0aHJvdyBuZXcgSigiQWJzdHJhY3QgY2xhc3MgSXRlcmF0b3Igbm90IGRpcmVjdGx5IGNvbnN0cnVjdGFibGUiKX0sbWU9ZnVuY3Rpb24oX2UsVGUpe1U/RihLLF9lLHtjb25maWd1cmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRlfSxzZXQ6ZnVuY3Rpb24oU2Upe2lmKEIodGhpcyksdGhpcz09PUspdGhyb3cgbmV3IEooIllvdSBjYW4ndCByZWRlZmluZSB0aGlzIHByb3BlcnR5Iik7Tih0aGlzLF9lKT90aGlzW19lXT1TZTpPKHRoaXMsX2UsU2UpfX0pOktbX2VdPVRlfTtO''@;'; put 'put ''KEssZWUpfHxtZShlZSxxKSwoaWV8fCFOKEssWSl8fEtbWV09PT1PYmplY3QpJiZtZShZLGxlKSxsZS5wcm90b3R5cGU9SyxJKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2VkOmllfSx7SXRlcmF0b3I6bGV9KX0sMzk1OTU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgy''@;'; put 'put ''ODM2NyksXz15KDQ2OTI2KSxnPXkoMzA3ODcpLEI9eSgzMTQ4Myksdz15KDExMDgpLFA9eSg3NTQyNCksRj15KDY2NTQyKSx6PXkoNDEyNTIpKCJldmVyeSIsVHlwZUVycm9yKTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDp6fSx7ZXZlcnk6ZnVuY3Rpb24o''@;'; put 'put ''TCl7dyh0aGlzKTt0cnl7QihMKX1jYXRjaChXKXtGKHRoaXMsInRocm93IixXKX1pZih6KXJldHVybiBfKHosdGhpcyxMKTt2YXIgSz1QKHRoaXMpLFU9MDtyZXR1cm4hZyhLLGZ1bmN0aW9uKFcsWSl7aWYoIUwoVyxVKyspKXJldHVybiBZKCl9LHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6''@;'; put 'put ''ITB9KS5zdG9wcGVkfX0pfSw5MjU4MDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMTQ4MyksQj15KDExMDgpLHc9eSg3NTQyNCksUD15KDY5OTE3KSxGPXkoNDI5MjYpLE89eSg4ODc4OCksej15KDY2NTQyKSxOPXkoNDEyNTIpLEw9IU8m''@;'; put 'put ''Jk4oImZpbHRlciIsVHlwZUVycm9yKSxLPVAoZnVuY3Rpb24oKXtmb3IodmFyIHEsSixVPXRoaXMuaXRlcmF0b3IsVz10aGlzLnByZWRpY2F0ZSxZPXRoaXMubmV4dDs7KXtpZihxPUIoXyhZLFUpKSx0aGlzLmRvbmU9ISFxLmRvbmUpcmV0dXJuO2lmKEYoVSxXLFtKPXEudmFsdWUsdGhpcy5j''@;'; put 'put ''b3VudGVyKytdLCEwKSlyZXR1cm4gSn19KTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpPfHxMfSx7ZmlsdGVyOmZ1bmN0aW9uKFcpe0IodGhpcyk7dHJ5e2coVyl9Y2F0Y2goWSl7eih0aGlzLCJ0aHJvdyIsWSl9cmV0dXJuIEw/XyhMLHRoaXMsVyk6bmV3''@;'; put 'put ''IEsodyh0aGlzKSx7cHJlZGljYXRlOld9KX19KX0sMjYzNTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDQ2OTI2KSxnPXkoMzA3ODcpLEI9eSgzMTQ4Myksdz15KDExMDgpLFA9eSg3NTQyNCksRj15KDY2NTQyKSx6PXkoNDEyNTIpKCJmaW5kIixUeXBlRXJy''@;'; put 'put ''b3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtmaW5kOmZ1bmN0aW9uKEwpe3codGhpcyk7dHJ5e0IoTCl9Y2F0Y2goVyl7Rih0aGlzLCJ0aHJvdyIsVyl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTCk7dmFyIEs9UCh0aGlzKSxVPTA7cmV0dXJuIGco''@;'; put 'put ''SyxmdW5jdGlvbihXLFkpe2lmKEwoVyxVKyspKXJldHVybiBZKFcpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkucmVzdWx0fX0pfSwzNjU3ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMTQ4MyksQj15KDExMDgpLHc9eSg3''@;'; put 'put ''NTQyNCksUD15KDYzNjI3KSxGPXkoNjk5MTcpLE89eSg2NjU0Miksej15KDg4Nzg4KSxOPXkoNDEyNTIpLEw9IXomJk4oImZsYXRNYXAiLFR5cGVFcnJvciksSz1GKGZ1bmN0aW9uKCl7Zm9yKHZhciBZLHEsVT10aGlzLml0ZXJhdG9yLFc9dGhpcy5tYXBwZXI7Oyl7aWYocT10aGlzLmlubmVy''@;'; put 'put ''KXRyeXtpZighKFk9QihfKHEubmV4dCxxLml0ZXJhdG9yKSkpLmRvbmUpcmV0dXJuIFkudmFsdWU7dGhpcy5pbm5lcj1udWxsfWNhdGNoKGVlKXtPKFUsInRocm93IixlZSl9aWYoWT1CKF8odGhpcy5uZXh0LFUpKSx0aGlzLmRvbmU9ISFZLmRvbmUpcmV0dXJuO3RyeXt0aGlzLmlubmVyPVAo''@;'; put 'put ''VyhZLnZhbHVlLHRoaXMuY291bnRlcisrKSwhMSl9Y2F0Y2goZWUpe08oVSwidGhyb3ciLGVlKX19fSk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6enx8TH0se2ZsYXRNYXA6ZnVuY3Rpb24oVyl7Qih0aGlzKTt0cnl7ZyhXKX1jYXRjaChZKXtPKHRoaXMs''@;'; put 'put ''InRocm93IixZKX1yZXR1cm4gTD9fKEwsdGhpcyxXKTpuZXcgSyh3KHRoaXMpLHttYXBwZXI6Vyxpbm5lcjpudWxsfSl9fSl9LDMxMzUzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg0NjkyNiksZz15KDMwNzg3KSxCPXkoMzE0ODMpLHc9eSgxMTA4KSxQPXko''@;'; put 'put ''NzU0MjQpLEY9eSg2NjU0Miksej15KDQxMjUyKSgiZm9yRWFjaCIsVHlwZUVycm9yKTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDp6fSx7Zm9yRWFjaDpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtCKEwpfWNhdGNoKFcpe0YodGhpcywidGhyb3ciLFcpfWlm''@;'; put 'put ''KHopcmV0dXJuIF8oeix0aGlzLEwpO3ZhciBLPVAodGhpcyksVT0wO2coSyxmdW5jdGlvbihXKXtMKFcsVSsrKX0se0lTX1JFQ09SRDohMH0pfX0pfSw3MTM1NDoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMTQ4MyksQj15KDExMDgpLHc9''@;'; put 'put ''eSg3NTQyNCksUD15KDY5OTE3KSxGPXkoNDI5MjYpLE89eSg2NjU0Miksej15KDQxMjUyKSxOPXkoODg3ODgpLEw9IU4mJnooIm1hcCIsVHlwZUVycm9yKSxLPVAoZnVuY3Rpb24oKXt2YXIgVT10aGlzLml0ZXJhdG9yLFc9QihfKHRoaXMubmV4dCxVKSk7aWYoISh0aGlzLmRvbmU9ISFXLmRv''@;'; put 'put ''bmUpKXJldHVybiBGKFUsdGhpcy5tYXBwZXIsW1cudmFsdWUsdGhpcy5jb3VudGVyKytdLCEwKX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOk58fEx9LHttYXA6ZnVuY3Rpb24oVyl7Qih0aGlzKTt0cnl7ZyhXKX1jYXRjaChZKXtPKHRoaXMsInRocm93''@;'; put 'put ''IixZKX1yZXR1cm4gTD9fKEwsdGhpcyxXKTpuZXcgSyh3KHRoaXMpLHttYXBwZXI6V30pfX0pfSw1MzM0ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzA3ODcpLGc9eSgzMTQ4MyksQj15KDExMDgpLHc9eSg3NTQyNCksUD15KDY2NTQyKSxGPXkoNDEyNTIp''@;'; put 'put ''LE89eSg0MDIyMCksej15KDU1NTkyKSxOPVR5cGVFcnJvcixMPXooZnVuY3Rpb24oKXtbXS5rZXlzKCkucmVkdWNlKGZ1bmN0aW9uKCl7fSx2b2lkIDApfSksSz0hTCYmRigicmVkdWNlIixOKTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpMfHxLfSx7cmVk''@;'; put 'put ''dWNlOmZ1bmN0aW9uKFcpe0IodGhpcyk7dHJ5e2coVyl9Y2F0Y2gobmUpe1AodGhpcywidGhyb3ciLG5lKX12YXIgWT1hcmd1bWVudHMubGVuZ3RoPDIscT1ZP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoSylyZXR1cm4gTyhLLHRoaXMsWT9bV106W1cscV0pO3ZhciBlZT13KHRoaXMpLEo9MDtp''@;'; put 'put ''ZihfKGVlLGZ1bmN0aW9uKG5lKXtZPyhZPSExLHE9bmUpOnE9VyhxLG5lLEopLEorK30se0lTX1JFQ09SRDohMH0pLFkpdGhyb3cgbmV3IE4oIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gcX19KX0sOTM3ODoodWUsWCx5KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNDY5MjYpLGc9eSgzMDc4NyksQj15KDMxNDgzKSx3PXkoMTEwOCksUD15KDc1NDI0KSxGPXkoNjY1NDIpLHo9eSg0MTI1MikoInNvbWUiLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0s''@;'; put 'put ''e3NvbWU6ZnVuY3Rpb24oTCl7dyh0aGlzKTt0cnl7QihMKX1jYXRjaChXKXtGKHRoaXMsInRocm93IixXKX1pZih6KXJldHVybiBfKHosdGhpcyxMKTt2YXIgSz1QKHRoaXMpLFU9MDtyZXR1cm4gZyhLLGZ1bmN0aW9uKFcsWSl7aWYoTChXLFUrKykpcmV0dXJuIFkoKX0se0lTX1JFQ09SRDoh''@;'; put 'put ''MCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDk1NDkzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSgxMjIwMiksZz15KDQwMjIwKSxCPXkoNDY5MjYpLHc9eSg1ODYwNyksUD15KDU1NTkyKSxGPXkoMTkxNTApLE89eSg5Mjk5OCksej15KDc3NjM5KSxO''@;'; put 'put ''PXkoODQ1MjQpLEw9eSgzNjUwNiksSz1TdHJpbmcsVT1fKCJKU09OIiwic3RyaW5naWZ5IiksVz13KC8uLy5leGVjKSxZPXcoIiIuY2hhckF0KSxxPXcoIiIuY2hhckNvZGVBdCksZWU9dygiIi5yZXBsYWNlKSxKPXcoMS4udG9TdHJpbmcpLG5lPS9bXHVEODAwLVx1REZGRl0vZyxpZT0vXltc''@;'; put 'put ''dUQ4MDAtXHVEQkZGXSQvLGxlPS9eW1x1REMwMC1cdURGRkZdJC8sbWU9IUx8fFAoZnVuY3Rpb24oKXt2YXIgemU9XygiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PVUoW3plXSl8fCJ7fSIhPT1VKHthOnplfSl8fCJ7fSIhPT1VKE9iamVjdCh6ZSkp''@;'; put 'put ''fSksX2U9UChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PVUoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PVUoIlx1ZGVhZCIpfSksVGU9ZnVuY3Rpb24oemUsVil7dmFyIHA9eihhcmd1bWVudHMpLGI9TihWKTtpZihGKGIpfHx2b2lkIDAhPT16ZSYmIU8oemUp''@;'; put 'put ''KXJldHVybiBwWzFdPWZ1bmN0aW9uKHgsQyl7aWYoRihiKSYmKEM9QihiLHRoaXMsSyh4KSxDKSksIU8oQykpcmV0dXJuIEN9LGcoVSxudWxsLHApfSxTZT1mdW5jdGlvbih6ZSxWLHApe3ZhciBiPVkocCxWLTEpLHg9WShwLFYrMSk7cmV0dXJuIFcoaWUsemUpJiYhVyhsZSx4KXx8VyhsZSx6''@;'; put 'put ''ZSkmJiFXKGllLGIpPyJcXHUiK0oocSh6ZSwwKSwxNik6emV9O1UmJkkoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDptZXx8X2V9LHtzdHJpbmdpZnk6ZnVuY3Rpb24oVixwLGIpe3ZhciB4PXooYXJndW1lbnRzKSxDPWcobWU/VGU6VSxudWxsLHgpO3JldHVybiBfZSYm''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBDP2VlKEMsbmUsU2UpOkN9fSl9LDU3NzI6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDMwNzg3KSxnPXkoNTg3OTUpO0koe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZnJvbUVudHJpZXM6ZnVuY3Rpb24odyl7dmFyIFA9e307''@;'; put 'put ''cmV0dXJuIF8odyxmdW5jdGlvbihGLE8pe2coUCxGLE8pfSx7QVNfRU5UUklFUzohMH0pLFB9fSl9LDY5ODc1Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg4MDIxMyk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiF5KDUzNTA1KSgi''@;'; put 'put ''ZGlmZmVyZW5jZSIsZnVuY3Rpb24odyl7cmV0dXJuIDA9PT13LnNpemV9KX0se2RpZmZlcmVuY2U6X30pfSwxNjA5MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNTU1OTIpLGc9eSg2MTg3OSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9y''@;'; put 'put ''Y2VkOiF5KDUzNTA1KSgiaW50ZXJzZWN0aW9uIixmdW5jdGlvbihQKXtyZXR1cm4gMj09PVAuc2l6ZSYmUC5oYXMoMSkmJlAuaGFzKDIpfSl8fF8oZnVuY3Rpb24oKXtyZXR1cm4iMywyIiE9PVN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsMiwzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQo''@;'; put 'put ''WzMsMl0pKSkpfSl9LHtpbnRlcnNlY3Rpb246Z30pfSw5NTYwODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNzM2MjQpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSkoImlzRGlzam9pbnRGcm9tIixmdW5jdGlvbih3''@;'; put 'put ''KXtyZXR1cm4hd30pfSx7aXNEaXNqb2ludEZyb206X30pfSwxNjQ5MzoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoNzQ4MzkpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSkoImlzU3Vic2V0T2YiLGZ1bmN0aW9uKHcp''@;'; put 'put ''e3JldHVybiB3fSl9LHtpc1N1YnNldE9mOl99KX0sNjE5MzQ6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7dmFyIEk9eSgyODM2NyksXz15KDk2MDYyKTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXkoNTM1MDUpKCJpc1N1cGVyc2V0T2YiLGZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiF3fSl9LHtpc1N1cGVyc2V0T2Y6X30pfSwxMDEwMToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoODUwMzkpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSkoInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1l''@;'; put 'put ''dHJpY0RpZmZlcmVuY2U6X30pfSwyNjg4OToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMjA1MDcpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoheSg1MzUwNSkoInVuaW9uIil9LHt1bmlvbjpffSl9LDE0MzYwOih1ZSxYLHkpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89eSg1ODYwNyksZz15KDg4Mjc1KSxCPXkoNjQ1NTApLHc9eSg2ODMzMiksUD15KDU1NTkyKSxGPV8oIiIuY2hhckF0KTtJKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOlAoZnVuY3Rpb24oKXtyZXR1cm4iXHVkODQyIiE9PSJc''@;'; put 'put ''dXsyMGJiN30iLmF0KC0yKX0pfSx7YXQ6ZnVuY3Rpb24oTil7dmFyIEw9dyhnKHRoaXMpKSxLPUwubGVuZ3RoLFU9QihOKSxXPVU+PTA/VTpLK1U7cmV0dXJuIFc8MHx8Vz49Sz92b2lkIDA6RihMLFcpfX0pfSwxNjIyOToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxf''@;'; put 'put ''PXkoNDY5MjYpLGc9eSg1ODYwNyksQj15KDg4Mjc1KSx3PXkoMTkxNTApLFA9eSgzMjYzMyksRj15KDg4ODY3KSxPPXkoNjgzMzIpLHo9eSg4NjExNSksTj15KDM3MDc1KSxMPXkoOTYzMzkpLEs9eSg1ODAxMiksVT15KDg4Nzg4KSxXPUsoInJlcGxhY2UiKSxZPVR5cGVFcnJvcixxPWcoIiIu''@;'; put 'put ''aW5kZXhPZiksZWU9ZygiIi5yZXBsYWNlKSxKPWcoIiIuc2xpY2UpLG5lPU1hdGgubWF4O0koe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGxhY2VBbGw6ZnVuY3Rpb24obGUsbWUpe3ZhciBUZSxTZSx6ZSxWLHAsYix4LEMsVCxILF9lPUIodGhpcyksaj0wLEU9IiI7aWYoUChsZSkp''@;'; put 'put ''e2lmKChUZT1GKGxlKSkmJihTZT1PKEIoTihsZSkpKSwhfnEoU2UsImciKSkpdGhyb3cgbmV3IFkoImAucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzIik7aWYoemU9eihsZSxXKSlyZXR1cm4gXyh6ZSxsZSxfZSxtZSk7aWYoVSYmVGUpcmV0dXJuIGVlKE8o''@;'; put 'put ''X2UpLGxlLG1lKX1mb3IoVj1PKF9lKSxwPU8obGUpLChiPXcobWUpKXx8KG1lPU8obWUpKSxDPW5lKDEseD1wLmxlbmd0aCksVD1xKFYscCk7LTEhPT1UOylIPWI/TyhtZShwLFQsVikpOkwocCxWLFQsW10sdm9pZCAwLG1lKSxFKz1KKFYsaixUKStILGo9VCt4LFQ9VCtDPlYubGVuZ3RoPy0x''@;'; put 'put ''OnEoVixwLFQrQyk7cmV0dXJuIGo8Vi5sZW5ndGgmJihFKz1KKFYsaikpLEV9fSl9LDQzMjg3Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koOTYxODApfSwxMzkwODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDM5NTk1KX0sNjU3NDU6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg5MjU4''@;'; put 'put ''MCl9LDgxMjYwOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koMjYzNTcpfSw3NDk5Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koMzY1NzgpfSwyOTcwODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDMxMzUzKX0sNjUxMTc6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg3MTM1NCl9LDQ0''@;'; put 'put ''MjEzOih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3koNTMzNDgpfSwyMDI5MToodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt5KDkzNzgpfSw2ODc2ODoodWUsWCx5KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST15KDI4MzY3KSxfPXkoMzM5NjMpLGc9eSg3NTk2KS5jbGVhcjtJKHtnbG9iYWw6ITAsYmlu''@;'; put 'put ''ZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDpfLmNsZWFySW1tZWRpYXRlIT09Z30se2NsZWFySW1tZWRpYXRlOmd9KX0sMTAzNjM6KHVlLFgseSk9PnsidXNlIHN0cmljdCI7eSg2ODc2OCkseSg4MjMwNil9LDgyMzA2Oih1ZSxYLHkpPT57InVzZSBzdHJpY3QiO3ZhciBJPXkoMjgzNjcpLF89''@;'; put 'put ''eSgzMzk2MyksZz15KDc1OTYpLnNldCxCPXkoNDMyNDkpLHc9Xy5zZXRJbW1lZGlhdGU/QihnLCExKTpnO0koe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOl8uc2V0SW1tZWRpYXRlIT09d30se3NldEltbWVkaWF0ZTp3fSl9LDMyMTk6dWU9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBl''@;'; put 'put ''IjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwi''@;'; put 'put ''YWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJj''@;'; put 'put ''aXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1''@;'; put 'put ''NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYs''@;'; put 'put ''Im1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoi''@;'; put 'put ''Q0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgi''@;'; put 'put ''LCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlw''@;'; put 'put ''ZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3Ry''@;'; put 'put ''ZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFl''@;'; put 'put ''cy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3Ry''@;'; put 'put ''Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDYyOTUxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9y''@;'; put 'put ''dHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIy''@;'; put 'put ''NCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYi''@;'; put 'put ''Onsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgw''@;'; put 'put ''MTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6''@;'; put 'put ''InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsi''@;'; put 'put ''c2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJp''@;'; put 'put ''ZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hB''@;'; put 'put ''Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhh''@;'; put 'put ''c2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6''@;'; put 'put ''InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2gi''@;'; put 'put ''OiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2gi''@;'; put 'put ''OiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6''@;'; put 'put ''InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sNjQ1ODk6dWU9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEu''@;'; put 'put ''My4xMzIuMC4zNSI6InA1MjEifScpfSwyMzI0MTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQw''@;'; put 'put ''MjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYz''@;'; put 'put ''N2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2Qx''@;'; put 'put ''MjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYy''@;'; put 'put ''NDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0''@;'; put 'put ''Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2''@;'; put 'put ''NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdj''@;'; put 'put ''ZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEz''@;'; put 'put ''OWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2Rj''@;'; put 'put ''MjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgz''@;'; put 'put ''YTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZl''@;'; put 'put ''MWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhl''@;'; put 'put ''NGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1''@;'; put 'put ''MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYx''@;'; put 'put ''YzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUy''@;'; put 'put ''YzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4''@;'; put 'put ''Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEy''@;'; put 'put ''YTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJk''@;'; put 'put ''N2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRj''@;'; put 'put ''NGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZi''@;'; put 'put ''ZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2Ex''@;'; put 'put ''ODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0''@;'; put 'put ''ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4''@;'; put 'put ''OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFm''@;'; put 'put ''YmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAy''@;'; put 'put ''NmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4''@;'; put 'put ''ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2Vi''@;'; put 'put ''ZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQw''@;'; put 'put ''MjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMw''@;'; put 'put ''MmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2Zh''@;'; put 'put ''OGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4''@;'; put 'put ''MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRj''@;'; put 'put ''ZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlh''@;'; put 'put ''MTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3''@;'; put 'put ''MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMx''@;'; put 'put ''MTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0''@;'; put 'put ''MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEz''@;'; put 'put ''MTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdl''@;'; put 'put ''ZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4''@;'; put 'put ''MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0''@;'; put 'put ''ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sMTYzNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXtyRToi''@;'; put 'put ''Ni42LjEifX0sNDMyNjc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyI4NzQwIiwiXHU0M2YwXHU0YzMyXHU0NjAzXHU0NWE2XHU0NTc4XHV7MjcyNjd9XHU0ZDc3XHU0NWIzXHV7MjdjYjF9XHU0Y2UyXHV7MjdjYzV9XHUzYjk1XHU0NzM2XHU0NzQ0XHU0YzQ3''@;'; put 'put ''XHU0YzQwXHV7MjQyYmZ9XHV7MjM2MTd9XHV7MjczNTJ9XHV7MjZlOGJ9XHV7MjcwZDJ9XHU0YzU3XHV7MmEzNTF9XHU0NzRmXHU0NWRhXHU0Yzg1XHV7MjdjNmN9XHU0ZDA3XHU0YWE0XHU0NmExXHV7MjZiMjN9XHU3MjI1XHV7MjVhNTR9XHV7MjFhNjN9XHV7MjNlMDZ9XHV7MjNmNjF9XHU2''@;'; put 'put ''NjRkXHU1NmZiIl0sWyI4NzY3IiwiXHU3ZDk1XHU1OTFkXHV7MjhiYjl9XHUzZGY0XHU5NzM0XHV7MjdiZWZ9XHU1YmRiXHV7MjFkNWV9XHU1YWE0XHUzNjI1XHV7MjllYjB9XHU1YWQxXHU1YmI3XHU1Y2ZjXHU2NzZlXHU4NTkzXHV7Mjk5NDV9XHU3NDYxXHU3NDlkXHUzODc1XHV7MjFkNTN9''@;'; put 'put ''XHV7MjM2OWV9XHV7MjYwMjF9XHUzZWVjIl0sWyI4N2ExIiwiXHV7MjU4ZGV9XHUzYWY1XHU3YWZjXHU5Zjk3XHV7MjQxNjF9XHV7Mjg5MGR9XHV7MjMxZWF9XHV7MjBhOGF9XHV7MjMyNWV9XHU0MzBhXHU4NDg0XHU5Zjk2XHU5NDJmXHU0OTMwXHU4NjEzXHU1ODk2XHU5NzRhXHU5MjE4XHU3''@;'; put 'put ''OWQwXHU3YTMyXHU2NjYwXHU2YTI5XHU4ODlkXHU3NDRjXHU3YmM1XHU2NzgyXHU3YTJjXHU1MjRmXHU5MDQ2XHUzNGU2XHU3M2M0XHV7MjVkYjl9XHU3NGM2XHU5ZmM3XHU1N2IzXHU0OTJmXHU1NDRjXHU0MTMxXHV7MjM2OGV9XHU1ODE4XHU3YTcyXHV7MjdiNjV9XHU4YjhmXHU0NmFlXHV7''@;'; put 'put ''MjZlODh9XHU0MTgxXHV7MjVkOTl9XHU3YmFlXHV7MjI0YmN9XHU5ZmM4XHV7MjI0YzF9XHV7MjI0Yzl9XHV7MjI0Y2N9XHU5ZmM5XHU4NTA0XHV7MjM1YmJ9XHU0MGI0XHU5ZmNhXHU0NGUxXHV7MmFkZmZ9XHU2MmMxXHU3MDZlXHU5ZmNiIl0sWyI4ODQwIiwiXHUzMWMwIiw0LCJcdXsyMDEw''@;'; put 'put ''Y31cdTMxYzVcdXsyMDBkMX1cdXsyMDBjZH1cdTMxYzZcdTMxYzdcdXsyMDBjYn1cdXsyMWZlOH1cdTMxYzhcdXsyMDBjYX1cdTMxYzlcdTMxY2FcdTMxY2JcdTMxY2NcdXsyMDEwZX1cdTMxY2RcdTMxY2VcdTAxMDBceGMxXHUwMWNkXHhjMFx1MDExMlx4YzlcdTAxMWFceGM4XHUwMTRjXHhk''@;'; put 'put ''M1x1MDFkMVx4ZDJcdTBmZmZceGNhXHUwMzA0XHUxZWJlXHUwZmZmXHhjYVx1MDMwY1x1MWVjMFx4Y2FcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDI1MVx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5''@;'; put 'put ''XHUwMWQ2XHUwMWQ4XHUwMWRhIl0sWyI4OGExIiwiXHUwMWRjXHhmY1x1MGZmZlx4ZWFcdTAzMDRcdTFlYmZcdTBmZmZceGVhXHUwMzBjXHUxZWMxXHhlYVx1MDI2MVx1MjNkYVx1MjNkYiJdLFsiODk0MCIsIlx1ezJhM2E5fVx1ezIxMTQ1fSJdLFsiODk0MyIsIlx1NjUwYSJdLFsiODk0NiIs''@;'; put 'put ''Ilx1NGUzZFx1NmVkZFx1OWQ0ZVx1OTFkZiJdLFsiODk0YyIsIlx1ezI3NzM1fVx1NjQ5MVx1NGYxYVx1NGYyOFx1NGZhOFx1NTE1Nlx1NTE3NFx1NTE5Y1x1NTFlNFx1NTJhMVx1NTJhOFx1NTMzYlx1NTM0ZVx1NTNkMVx1NTNkOFx1NTZlMlx1NThmMFx1NTkwNFx1NTkwN1x1NTkzMlx1NTkz''@;'; put 'put ''NFx1NWI2Nlx1NWI5ZVx1NWI5Zlx1NWM5YVx1NWU4Nlx1NjAzYlx1NjU4OVx1NjdmZVx1NjgwNFx1Njg2NVx1NmQ0ZVx1NzBiY1x1NzUzNVx1N2VhNFx1N2VhY1x1N2ViYVx1N2VjN1x1N2VjZlx1N2VkZlx1N2YwNlx1N2YzN1x1ODI3YVx1ODJjZlx1ODM2Zlx1ODljNlx1OGJiZVx1OGJlMlx1''@;'; put 'put ''OGY2Nlx1OGY2N1x1OGY2ZSJdLFsiODlhMSIsIlx1NzQxMVx1N2NmY1x1N2RjZFx1Njk0Nlx1N2FjOVx1NTIyNyJdLFsiODlhYiIsIlx1OTE4Y1x1NzhiOFx1OTE1ZVx1ODBiYyJdLFsiODliMCIsIlx1OGQwYlx1ODBmNlx1ezIwOWU3fSJdLFsiODliNSIsIlx1ODA5Zlx1OWVjN1x1NGNjZFx1''@;'; put 'put ''OWRjOVx1OWUwY1x1NGMzZVx1ezI5ZGY2fVx1ezI3MDBlfVx1OWUwYVx1ezJhMTMzfVx1MzVjMSJdLFsiODljMSIsIlx1NmU5YVx1ODIzZVx1NzUxOSJdLFsiODljNSIsIlx1NDkxMVx1OWE2Y1x1OWE4Zlx1OWY5OVx1Nzk4N1x1ezI4NDZjfVx1ezIxZGNhfVx1ezIwNWQwfVx1ezIyYWU2fVx1''@;'; put 'put ''NGUyNFx1NGU4MVx1NGU4MFx1NGU4N1x1NGViZlx1NGVlYlx1NGYzN1x1MzQ0Y1x1NGZiZFx1M2U0OFx1NTAwM1x1NTA4OFx1MzQ3ZFx1MzQ5M1x1MzRhNVx1NTE4Nlx1NTkwNVx1NTFkYlx1NTFmY1x1NTIwNVx1NGU4OVx1NTI3OVx1NTI5MFx1NTMyN1x1MzVjN1x1NTNhOVx1MzU1MVx1NTNi''@;'; put 'put ''MFx1MzU1M1x1NTNjMlx1NTQyM1x1MzU2ZFx1MzU3Mlx1MzY4MVx1NTQ5M1x1NTRhM1x1NTRiNFx1NTRiOVx1NTRkMFx1NTRlZlx1NTUxOFx1NTUyM1x1NTUyOFx1MzU5OFx1NTUzZlx1MzVhNVx1MzViZlx1NTVkN1x1MzVjNSJdLFsiOGE0MCIsIlx1ezI3ZDg0fVx1NTUyNSJdLFsiOGE0MyIs''@;'; put 'put ''Ilx1ezIwYzQyfVx1ezIwZDE1fVx1ezI1MTJifVx1NTU5MFx1ezIyY2M2fVx1MzllY1x1ezIwMzQxfVx1OGU0Nlx1ezI0ZGI4fVx1ezI5NGU1fVx1NDA1M1x1ezI4MGJlfVx1Nzc3YVx1ezIyYzM4fVx1M2EzNFx1NDdkNVx1ezI4MTVkfVx1ezI2OWYyfVx1ezI0ZGVhfVx1NjRkZFx1ezIwZDdj''@;'; put 'put ''fVx1ezIwZmI0fVx1ezIwY2Q1fVx1ezIxMGY0fVx1NjQ4ZFx1OGU3ZVx1ezIwZTk2fVx1ezIwYzBifVx1ezIwZjY0fVx1ezIyY2E5fVx1ezI4MjU2fVx1ezI0NGQzfSJdLFsiOGE2NCIsIlx1ezIwZDQ2fVx1ezI5YTRkfVx1ezI4MGU5fVx1NDdmNFx1ezI0ZWE3fVx1ezIyY2MyfVx1OWFiMlx1''@;'; put 'put ''M2E2N1x1ezI5NWY0fVx1M2ZlZFx1MzUwNlx1ezI1MmM3fVx1ezI5N2Q0fVx1ezI3OGM4fVx1ezIyZDQ0fVx1OWQ2ZVx1OTgxNSJdLFsiOGE3NiIsIlx1NDNkOVx1ezI2MGE1fVx1NjRiNFx1NTRlM1x1ezIyZDRjfVx1ezIyYmNhfVx1ezIxMDc3fVx1MzlmYlx1ezIxMDZmfSJdLFsiOGFhMSIs''@;'; put 'put ''Ilx1ezI2NmRhfVx1ezI2NzE2fVx1ezI3OWEwfVx1NjRlYVx1ezI1MDUyfVx1ezIwYzQzfVx1OGU2OFx1ezIyMWExfVx1ezI4YjRjfVx1ezIwNzMxfSJdLFsiOGFhYyIsIlx1NDgwYlx1ezIwMWE5fVx1M2ZmYVx1NTg3M1x1ezIyZDhkfSJdLFsiOGFiMiIsIlx1ezI0NWM4fVx1ezIwNGZjfVx1''@;'; put 'put ''ezI2MDk3fVx1ezIwZjRjfVx1ezIwZDk2fVx1NTU3OVx1NDBiYlx1NDNiYSJdLFsiOGFiYiIsIlx1NGFiNFx1ezIyYTY2fVx1ezIxMDlkfVx1ODFhYVx1OThmNVx1ezIwZDljfVx1NjM3OVx1MzlmZVx1ezIyNzc1fVx1OGRjMFx1NTZhMVx1NjQ3Y1x1M2U0MyJdLFsiOGFjOSIsIlx1ezJhNjAx''@;'; put 'put ''fVx1ezIwZTA5fVx1ezIyYWNmfVx1ezIyY2M5fSJdLFsiOGFjZSIsIlx1ezIxMGM4fVx1ezIzOWMyfVx1Mzk5Mlx1M2EwNlx1ezI4MjlifVx1MzU3OFx1ezI1ZTQ5fVx1ezIyMGM3fVx1NTY1Mlx1ezIwZjMxfVx1ezIyY2IyfVx1ezI5NzIwfVx1MzRiY1x1NmMzZFx1ezI0ZTNifSJdLFsiOGFk''@;'; put 'put ''ZiIsIlx1ezI3NTc0fVx1ezIyZThifVx1ezIyMjA4fVx1ezJhNjVifVx1ezI4Y2NkfVx1ezIwZTdhfVx1ezIwYzM0fVx1ezI2ODFjfVx1N2Y5M1x1ezIxMGNmfVx1ezIyODAzfVx1ezIyOTM5fVx1MzVmYlx1ezI1MWUzfVx1ezIwZThjfVx1ezIwZjhkfVx1ezIwZWFhfVx1M2Y5M1x1ezIwZjMw''@;'; put 'put ''fVx1ezIwZDQ3fVx1ezIxMTRmfVx1ezIwZTRjfSJdLFsiOGFmNiIsIlx1ezIwZWFifVx1ezIwYmE5fVx1ezIwZDQ4fVx1ezIxMGMwfVx1ezIxMTNkfVx1M2ZmOVx1ezIyNjk2fVx1NjQzMlx1ezIwZmFkfSJdLFsiOGI0MCIsIlx1ezIzM2Y0fVx1ezI3NjM5fVx1ezIyYmNlfVx1ezIwZDdlfVx1''@;'; put 'put ''ezIwZDdmfVx1ezIyYzUxfVx1ezIyYzU1fVx1M2ExOFx1ezIwZTk4fVx1ezIxMGM3fVx1ezIwZjJlfVx1ezJhNjMyfVx1ezI2YjUwfVx1ezI4Y2QyfVx1ezI4ZDk5fVx1ezI4Y2NhfVx1OTVhYVx1NTRjY1x1ODJjNFx1NTViOSJdLFsiOGI1NSIsIlx1ezI5ZWMzfVx1OWMyNlx1OWFiNlx1ezI3''@;'; put 'put ''NzVlfVx1ezIyZGVlfVx1NzE0MFx1ODE2ZFx1ODBlY1x1NWMxY1x1ezI2NTcyfVx1ODEzNFx1Mzc5N1x1NTM1Zlx1ezI4MGJkfVx1OTFiNlx1ezIwZWZhfVx1ezIwZTBmfVx1ezIwZTc3fVx1ezIwZWZifVx1MzVkZFx1ezI0ZGVifVx1MzYwOVx1ezIwY2Q2fVx1NTZhZlx1ezIyN2I1fVx1ezIx''@;'; put 'put ''MGM5fVx1ezIwZTEwfVx1ezIwZTc4fVx1ezIxMDc4fVx1ezIxMTQ4fVx1ezI4MjA3fVx1ezIxNDU1fVx1ezIwZTc5fVx1ezI0ZTUwfVx1ezIyZGE0fVx1NWE1NFx1ezIxMDFkfVx1ezIxMDFlfVx1ezIxMGY1fVx1ezIxMGY2fVx1NTc5Y1x1ezIwZTExfSJdLFsiOGJhMSIsIlx1ezI3Njk0fVx1''@;'; put 'put ''ezI4MmNkfVx1ezIwZmI1fVx1ezIwZTdifVx1ezI1MTdlfVx1MzcwM1x1ezIwZmI2fVx1ezIxMTgwfVx1ezI1MmQ4fVx1ezJhMmJkfVx1ezI0OWRhfVx1ezIxODNhfVx1ezI0MTc3fVx1ezI4MjdjfVx1NTg5OVx1NTI2OFx1MzYxYVx1ezI1NzNkfVx1N2JiMlx1NWI2OFx1NDgwMFx1NGIyY1x1''@;'; put 'put ''OWYyN1x1NDllN1x1OWMxZlx1OWI4ZFx1ezI1Yjc0fVx1ezIzMTNkfVx1NTVmYlx1MzVmMlx1NTY4OVx1NGUyOFx1NTkwMlx1ezIxYmMxfVx1ezJmODc4fVx1OTc1MVx1ezIwMDg2fVx1NGU1Ylx1NGViYlx1MzUzZVx1NWMyM1x1NWY1MVx1NWZjNFx1MzhmYVx1NjI0Y1x1NjUzNVx1NmI3YVx1''@;'; put 'put ''NmMzNVx1NmMzYVx1NzA2Y1x1NzIyYlx1NGUyY1x1NzJhZFx1ezI0OGU5fVx1N2Y1Mlx1NzkzYlx1N2NmOVx1N2Y1M1x1ezI2MjZhfVx1MzRjMSJdLFsiOGJkZSIsIlx1ezI2MzRifVx1ODAwMlx1ODA4MFx1ezI2NjEyfVx1ezI2OTUxfVx1NTM1ZFx1ODg2NFx1ODljMVx1ezI3OGIyfVx1OGJh''@;'; put 'put ''MFx1OGQxZFx1OTQ4NVx1OTU3OFx1OTU3Zlx1OTVlOFx1ezI4ZTBmfVx1OTdlNlx1OTg3NVx1OThjZVx1OThkZVx1OTk2M1x1ezI5ODEwfVx1OWM3Y1x1OWUxZlx1OWVjNFx1NmI2Zlx1ZjkwN1x1NGUzN1x1ezIwMDg3fVx1OTYxZFx1NjIzN1x1OTRhMiJdLFsiOGM0MCIsIlx1NTAzYlx1NmRm''@;'; put 'put ''ZVx1ezI5YzczfVx1OWZhNlx1M2RjOVx1ODg4Zlx1ezI0MTRlfVx1NzA3N1x1NWNmNVx1NGIyMFx1ezI1MWNkfVx1MzU1OVx1ezI1ZDMwfVx1NjEyMlx1ezI4YTMyfVx1OGZhN1x1OTFmNlx1NzE5MVx1NjcxOVx1NzNiYVx1ezIzMjgxfVx1ezJhMTA3fVx1M2M4Ylx1ezIxOTgwfVx1NGIxMFx1''@;'; put 'put ''NzhlNFx1NzQwMlx1NTFhZVx1ezI4NzBmfVx1NDAwOVx1NmE2M1x1ezJhMmJhfVx1NDIyM1x1ODYwZlx1ezIwYTZmfVx1N2EyYVx1ezI5OTQ3fVx1ezI4YWVhfVx1OTc1NVx1NzA0ZFx1NTMyNFx1ezIyMDdlfVx1OTNmNFx1NzZkOVx1ezI4OWUzfVx1OWZhN1x1NzdkZFx1NGVhM1x1NGZmMFx1''@;'; put 'put ''NTBiY1x1NGUyZlx1NGYxN1x1OWZhOFx1NTQzNFx1N2Q4Ylx1NTg5Mlx1NThkMFx1ezIxZGI2fVx1NWU5Mlx1NWU5OVx1NWZjMlx1ezIyNzEyfVx1NjU4YiJdLFsiOGNhMSIsIlx1ezIzM2Y5fVx1NjkxOVx1NmE0M1x1ezIzYzYzfVx1NmNmZiJdLFsiOGNhNyIsIlx1NzIwMFx1ezI0NTA1fVx1''@;'; put 'put ''NzM4Y1x1M2VkYlx1ezI0YTEzfVx1NWIxNVx1NzRiOVx1OGI4M1x1ezI1Y2E0fVx1ezI1Njk1fVx1N2E5M1x1N2JlY1x1N2NjM1x1N2U2Y1x1ODJmOFx1ODU5N1x1OWZhOVx1ODg5MFx1OWZhYVx1OGViOVx1OWZhYlx1OGZjZlx1ODU1Zlx1OTllMFx1OTIyMVx1OWZhY1x1ezI4ZGI5fVx1ezIx''@;'; put 'put ''NDNmfVx1NDA3MVx1NDJhMlx1NWExYSJdLFsiOGNjOSIsIlx1OTg2OFx1Njc2Ylx1NDI3Nlx1NTczZCJdLFsiOGNjZSIsIlx1ODVkNlx1ezI0OTdifVx1ODJiZlx1ezI3MTBkfVx1NGM4MVx1ezI2ZDc0fVx1NWQ3Ylx1ezI2YjE1fVx1ezI2ZmJlfVx1OWZhZFx1OWZhZVx1NWI5Nlx1OWZhZlx1''@;'; put 'put ''NjZlN1x1N2U1Ylx1NmU1N1x1NzljYVx1M2Q4OFx1NDRjM1x1ezIzMjU2fVx1ezIyNzk2fVx1NDM5YVx1NDUzNiJdLFsiOGNlNiIsIlx1NWNkNVx1ezIzYjFhfVx1OGFmOVx1NWM3OFx1M2QxMlx1ezIzNTUxfVx1NWQ3OFx1OWZiMlx1NzE1N1x1NDU1OFx1ezI0MGVjfVx1ezIxZTIzfVx1NGM3''@;'; put 'put ''N1x1Mzk3OFx1MzQ0YVx1ezIwMWE0fVx1ezI2YzQxfVx1OGFjY1x1NGZiNFx1ezIwMjM5fVx1NTliZlx1ODE2Y1x1OTg1Nlx1ezI5OGZhfVx1NWYzYiJdLFsiOGQ0MCIsIlx1ezIwYjlmfSJdLFsiOGQ0MiIsIlx1ezIyMWMxfVx1ezI4OTZkfVx1NDEwMlx1NDZiYlx1ezI5MDc5fVx1M2YwN1x1''@;'; put 'put ''OWZiM1x1ezJhMWI1fVx1NDBmOFx1MzdkNlx1NDZmN1x1ezI2YzQ2fVx1NDE3Y1x1ezI4NmIyfVx1ezI3M2ZmfVx1NDU2ZFx1MzhkNFx1ezI1NDlhfVx1NDU2MVx1NDUxYlx1NGQ4OVx1NGM3Ylx1NGQ3Nlx1NDVlYVx1M2ZjOFx1ezI0YjBmfVx1MzY2MVx1NDRkZVx1NDRiZFx1NDFlZFx1NWQz''@;'; put 'put ''ZVx1NWQ0OFx1NWQ1Nlx1M2RmY1x1MzgwZlx1NWRhNFx1NWRiOVx1MzgyMFx1MzgzOFx1NWU0Mlx1NWViZFx1NWYyNVx1NWY4M1x1MzkwOFx1MzkxNFx1MzkzZlx1Mzk0ZFx1NjBkN1x1NjEzZFx1NWNlNVx1Mzk4OVx1NjFiN1x1NjFiOVx1NjFjZlx1MzliOFx1NjIyY1x1NjI5MFx1NjJlNVx1''@;'; put 'put ''NjMxOFx1MzlmOFx1NTZiMSJdLFsiOGRhMSIsIlx1M2EwM1x1NjNlMlx1NjNmYlx1NjQwN1x1NjQ1YVx1M2E0Ylx1NjRjMFx1NWQxNVx1NTYyMVx1OWY5Zlx1M2E5N1x1NjU4Nlx1M2FiZFx1NjVmZlx1NjY1M1x1M2FmMlx1NjY5Mlx1M2IyMlx1NjcxNlx1M2I0Mlx1NjdhNFx1NjgwMFx1M2I1''@;'; put 'put ''OFx1Njg0YVx1Njg4NFx1M2I3Mlx1M2I3MVx1M2I3Ylx1NjkwOVx1Njk0M1x1NzI1Y1x1Njk2NFx1Njk5Zlx1Njk4NVx1M2JiY1x1NjlkNlx1M2JkZFx1NmE2NVx1NmE3NFx1NmE3MVx1NmE4Mlx1M2JlY1x1NmE5OVx1M2JmMlx1NmFhYlx1NmFiNVx1NmFkNFx1NmFmNlx1NmI4MVx1NmJjMVx1''@;'; put 'put ''NmJlYVx1NmM3NVx1NmNhYVx1M2NjYlx1NmQwMlx1NmQwNlx1NmQyNlx1NmQ4MVx1M2NlZlx1NmRhNFx1NmRiMVx1NmUxNVx1NmUxOFx1NmUyOVx1NmU4Nlx1ezI4OWMwfVx1NmViYlx1NmVlMlx1NmVkYVx1OWY3Zlx1NmVlOFx1NmVlOVx1NmYyNFx1NmYzNFx1M2Q0Nlx1ezIzZjQxfVx1NmY4''@;'; put 'put ''MVx1NmZiZVx1M2Q2YVx1M2Q3NVx1NzFiN1x1NWM5OVx1M2Q4YVx1NzAyY1x1M2Q5MVx1NzA1MFx1NzA1NFx1NzA2Zlx1NzA3Zlx1NzA4OVx1ezIwMzI1fVx1NDNjMVx1MzVmMVx1ezIwZWQ4fSJdLFsiOGU0MCIsIlx1ezIzZWQ3fVx1NTdiZVx1ezI2ZWQzfVx1NzEzZVx1ezI1N2UwfVx1MzY0''@;'; put 'put ''ZVx1NjlhMlx1ezI4YmU5fVx1NWI3NFx1N2E0OVx1ezI1OGUxfVx1ezI5NGQ5fVx1N2E2NVx1N2E3ZFx1ezI1OWFjfVx1N2FiYlx1N2FiMFx1N2FjMlx1N2FjM1x1NzFkMVx1ezI2NDhkfVx1NDFjYVx1N2FkYVx1N2FkZFx1N2FlYVx1NDFlZlx1NTRiMlx1ezI1YzAxfVx1N2IwYlx1N2I1NVx1''@;'; put 'put ''N2IyOVx1ezI1MzBlfVx1ezI1Y2ZlfVx1N2JhMlx1N2I2Zlx1ODM5Y1x1ezI1YmI0fVx1ezI2YzdmfVx1N2JkMFx1ODQyMVx1N2I5Mlx1N2JiOFx1ezI1ZDIwfVx1M2RhZFx1ezI1YzY1fVx1ODQ5Mlx1N2JmYVx1N2MwNlx1N2MzNVx1ezI1Y2MxfVx1N2M0NFx1N2M4M1x1ezI0ODgyfVx1N2Nh''@;'; put 'put ''Nlx1NjY3ZFx1ezI0NTc4fVx1N2NjOVx1N2NjN1x1N2NlNlx1N2M3NFx1N2NmM1x1N2NmNVx1N2NjZSJdLFsiOGVhMSIsIlx1N2U2N1x1NDUxZFx1ezI2ZTQ0fVx1N2Q1ZFx1ezI2ZWQ2fVx1NzQ4ZFx1N2Q4OVx1N2RhYlx1NzEzNVx1N2RiM1x1N2RkMlx1ezI0MDU3fVx1ezI2MDI5fVx1N2Rl''@;'; put 'put ''NFx1M2QxM1x1N2RmNVx1ezIxN2Y5fVx1N2RlNVx1ezI4MzZkfVx1N2UxZFx1ezI2MTIxfVx1ezI2MTVhfVx1N2U2ZVx1N2U5Mlx1NDMyYlx1OTQ2Y1x1N2UyN1x1N2Y0MFx1N2Y0MVx1N2Y0N1x1NzkzNlx1ezI2MmQwfVx1OTllMVx1N2Y5N1x1ezI2MzUxfVx1N2ZhM1x1ezIxNjYxfVx1ezIw''@;'; put 'put ''MDY4fVx1NDU1Y1x1ezIzNzY2fVx1NDUwM1x1ezI4MzNhfVx1N2ZmYVx1ezI2NDg5fVx1ODAwNVx1ODAwOFx1ODAxZFx1ODAyOFx1ODAyZlx1ezJhMDg3fVx1ezI2Y2MzfVx1ODAzYlx1ODAzY1x1ODA2MVx1ezIyNzE0fVx1NDk4OVx1ezI2NjI2fVx1ezIzZGUzfVx1ezI2NmU4fVx1NjcyNVx1''@;'; put 'put ''ODBhN1x1ezI4YTQ4fVx1ODEwN1x1ODExYVx1NThiMFx1ezIyNmY2fVx1NmM3Zlx1ezI2NDk4fVx1ezI0ZmI4fVx1NjRlN1x1ezIxNDhhfVx1ODIxOFx1ezIxODVlfVx1NmE1M1x1ezI0YTY1fVx1ezI0YTk1fVx1NDQ3YVx1ODIyOVx1ezIwYjBkfVx1ezI2YTUyfVx1ezIzZDdlfVx1NGZmOVx1''@;'; put 'put ''ezIxNGZkfVx1ODRlMlx1ODM2Mlx1ezI2YjBhfVx1ezI0OWE3fVx1ezIzNTMwfVx1ezIxNzczfVx1ezIzZGY4fVx1ODJhYVx1NjkxYlx1ezJmOTk0fVx1NDFkYiJdLFsiOGY0MCIsIlx1ODU0Ylx1ODJkMFx1ODMxYVx1ezIwZTE2fVx1ezIxN2I0fVx1MzZjMVx1ezIzMTdkfVx1ezIzNTVhfVx1''@;'; put 'put ''ODI3Ylx1ODJlMlx1ODMxOFx1ezIzZThifVx1ezI2ZGEzfVx1ezI2YjA1fVx1ezI2Yjk3fVx1ezIzNWNlfVx1M2RiZlx1ODMxZFx1NTVlY1x1ODM4NVx1NDUwYlx1ezI2ZGE1fVx1ODNhY1x1ODNjMVx1ODNkM1x1MzQ3ZVx1ezI2ZWQ0fVx1NmE1N1x1ODU1YVx1MzQ5Nlx1ezI2ZTQyfVx1ezIy''@;'; put 'put ''ZWVmfVx1ODQ1OFx1ezI1YmU0fVx1ODQ3MVx1M2RkM1x1NDRlNFx1NmFhN1x1ODQ0YVx1ezIzY2I1fVx1Nzk1OFx1ODRhOFx1ezI2Yjk2fVx1ezI2ZTc3fVx1ezI2ZTQzfVx1ODRkZVx1ODQwZlx1ODM5MVx1NDRhMFx1ODQ5M1x1ODRlNFx1ezI1YzkxfVx1NDI0MFx1ezI1Y2MwfVx1NDU0M1x1''@;'; put 'put ''ODUzNFx1NWFmMlx1ezI2ZTk5fVx1NDUyN1x1ODU3M1x1NDUxNlx1NjdiZlx1ODYxNiJdLFsiOGZhMSIsIlx1ezI4NjI1fVx1ezI4NjNifVx1ODVjMVx1ezI3MDg4fVx1ODYwMlx1ezIxNTgyfVx1ezI3MGNkfVx1ezJmOWIyfVx1NDU2YVx1ODYyOFx1MzY0OFx1ezIxOGEyfVx1NTNmN1x1ezI3''@;'; put 'put ''MzlhfVx1ODY3ZVx1ODc3MVx1ezJhMGY4fVx1ODdlZVx1ezIyYzI3fVx1ODdiMVx1ODdkYVx1ODgwZlx1NTY2MVx1ODY2Y1x1Njg1Nlx1NDYwZlx1ODg0NVx1ODg0Nlx1ezI3NWUwfVx1ezIzZGI5fVx1ezI3NWU0fVx1ODg1ZVx1ODg5Y1x1NDY1Ylx1ODhiNFx1ODhiNVx1NjNjMVx1ODhjNVx1''@;'; put 'put ''Nzc3N1x1ezI3NzBmfVx1ODk4N1x1ODk4YVx1ODlhNlx1ODlhOVx1ODlhN1x1ODliY1x1ezI4YTI1fVx1ODllN1x1ezI3OTI0fVx1ezI3YWJkfVx1OGE5Y1x1Nzc5M1x1OTFmZVx1OGE5MFx1ezI3YTU5fVx1N2FlOVx1ezI3YjNhfVx1ezIzZjhmfVx1NDcxM1x1ezI3YjM4fVx1NzE3Y1x1OGIw''@;'; put 'put ''Y1x1OGIxZlx1ezI1NDMwfVx1ezI1NTY1fVx1OGIzZlx1OGI0Y1x1OGI0ZFx1OGFhOVx1ezI0YTdhfVx1OGI5MFx1OGI5Ylx1OGFhZlx1ezIxNmRmfVx1NDYxNVx1ODg0Zlx1OGM5Ylx1ezI3ZDU0fVx1ezI3ZDhmfVx1ezJmOWQ0fVx1MzcyNVx1ezI3ZDUzfVx1OGNkNlx1ezI3ZDk4fVx1ezI3''@;'; put 'put ''ZGJkfVx1OGQxMlx1OGQwM1x1ezIxOTEwfVx1OGNkYlx1NzA1Y1x1OGQxMVx1ezI0Y2M5fVx1M2VkMFx1OGQ3NyJdLFsiOTA0MCIsIlx1OGRhOVx1ezI4MDAyfVx1ezIxMDE0fVx1ezI0OThhfVx1M2I3Y1x1ezI4MWJjfVx1ezI3MTBjfVx1N2FlN1x1OGVhZFx1OGViNlx1OGVjM1x1OTJkNFx1''@;'; put 'put ''OGYxOVx1OGYyZFx1ezI4MzY1fVx1ezI4NDEyfVx1OGZhNVx1OTMwM1x1ezJhMjlmfVx1ezIwYTUwfVx1OGZiM1x1NDkyYVx1ezI4OWRlfVx1ezI4NTNkfVx1ezIzZGJifVx1NWVmOFx1ezIzMjYyfVx1OGZmOVx1ezJhMDE0fVx1ezI4NmJjfVx1ezI4NTAxfVx1ezIyMzI1fVx1Mzk4MFx1ezI2''@;'; put 'put ''ZWQ3fVx1OTAzN1x1ezI4NTNjfVx1ezI3YWJlfVx1OTA2MVx1ezI4NTZjfVx1ezI4NjBifVx1OTBhOFx1ezI4NzEzfVx1OTBjNFx1ezI4NmU2fVx1OTBhZVx1OTBmZFx1OTE2N1x1M2FmMFx1OTFhOVx1OTFjNFx1N2NhY1x1ezI4OTMzfVx1ezIxZTg5fVx1OTIwZVx1NmM5Zlx1OTI0MVx1OTI2''@;'; put 'put ''Mlx1ezI1NWI5fVx1OTJiOVx1ezI4YWM2fVx1ezIzYzlifVx1ezI4YjBjfVx1ezI1NWRifSJdLFsiOTBhMSIsIlx1ezIwZDMxfVx1OTMyY1x1OTM2Ylx1ezI4YWUxfVx1ezI4YmVifVx1NzA4Zlx1NWFjM1x1ezI4YWUyfVx1ezI4YWU1fVx1NDk2NVx1OTI0NFx1ezI4YmVjfVx1ezI4YzM5fVx1''@;'; put 'put ''ezI4YmZmfVx1OTM3M1x1OTQ1Ylx1OGViY1x1OTU4NVx1OTVhNlx1OTQyNlx1OTVhMFx1NmZmNlx1NDJiOVx1ezIyNjdhfVx1ezI4NmQ4fVx1ezIxMjdjfVx1ezIzZTJlfVx1NDlkZlx1NmMxY1x1OTY3Ylx1OTY5Nlx1NDE2Y1x1OTZhM1x1ezI2ZWQ1fVx1NjFkYVx1OTZiNlx1NzhmNVx1ezI4''@;'; put 'put ''YWUwfVx1OTZiZFx1NTNjY1x1NDlhMVx1ezI2Y2I4fVx1ezIwMjc0fVx1ezI2NDEwfVx1ezI5MGFmfVx1ezI5MGU1fVx1ezI0YWQxfVx1ezIxOTE1fVx1ezIzMzBhfVx1OTczMVx1ODY0Mlx1OTczNlx1NGEwZlx1NDUzZFx1NDU4NVx1ezI0YWU5fVx1NzA3NVx1NWI0MVx1OTcxYlx1OTc1Y1x1''@;'; put 'put ''ezI5MWQ1fVx1OTc1N1x1NWI0YVx1ezI5MWVifVx1OTc1Zlx1OTQyNVx1NTBkMFx1ezIzMGI3fVx1ezIzMGJjfVx1OTc4OVx1OTc5Zlx1OTdiMVx1OTdiZVx1OTdjMFx1OTdkMlx1OTdlMFx1ezI1NDZjfVx1OTdlZVx1NzQxY1x1ezI5NDMzfVx1OTdmZlx1OTdmNVx1ezI5NDFkfVx1ezI3OTdh''@;'; put 'put ''fVx1NGFkMVx1OTgzNFx1OTgzM1x1OTg0Ylx1OTg2Nlx1M2IwZVx1ezI3MTc1fVx1M2Q1MVx1ezIwNjMwfVx1ezI0MTVjfSJdLFsiOTE0MCIsIlx1ezI1NzA2fVx1OThjYVx1OThiN1x1OThjOFx1OThjN1x1NGFmZlx1ezI2ZDI3fVx1ezIxNmQzfVx1NTViMFx1OThlMVx1OThlNlx1OThlY1x1''@;'; put 'put ''OTM3OFx1OTkzOVx1ezI0YTI5fVx1NGI3Mlx1ezI5ODU3fVx1ezI5OTA1fVx1OTlmNVx1OWEwY1x1OWEzYlx1OWExMFx1OWE1OFx1ezI1NzI1fVx1MzZjNFx1ezI5MGIxfVx1ezI5YmQ1fVx1OWFlMFx1OWFlMlx1ezI5YjA1fVx1OWFmNFx1NGMwZVx1OWIxNFx1OWIyZFx1ezI4NjAwfVx1NTAz''@;'; put 'put ''NFx1OWIzNFx1ezI2OWE4fVx1MzhjM1x1ezIzMDdkfVx1OWI1MFx1OWI0MFx1ezI5ZDNlfVx1NWE0NVx1ezIxODYzfVx1OWI4ZVx1ezI0MjRifVx1OWMwMlx1OWJmZlx1OWMwY1x1ezI5ZTY4fVx1OWRkNFx1ezI5ZmI3fVx1ezJhMTkyfVx1ezJhMWFifVx1ezJhMGUxfVx1ezJhMTIzfVx1ezJh''@;'; put 'put ''MWRmfVx1OWQ3ZVx1OWQ4M1x1ezJhMTM0fVx1OWUwZVx1Njg4OCJdLFsiOTFhMSIsIlx1OWRjNFx1ezIyMTVifVx1ezJhMTkzfVx1ezJhMjIwfVx1ezIxOTNifVx1ezJhMjMzfVx1OWQzOVx1ezJhMGI5fVx1ezJhMmI0fVx1OWU5MFx1OWU5NVx1OWU5ZVx1OWVhMlx1NGQzNFx1OWVhYVx1OWVh''@;'; put 'put ''Zlx1ezI0MzY0fVx1OWVjMVx1M2I2MFx1MzllNVx1M2QxZFx1NGYzMlx1MzdiZVx1ezI4YzJifVx1OWYwMlx1OWYwOFx1NGI5Nlx1OTQyNFx1ezI2ZGEyfVx1OWYxN1x1OWYxNlx1OWYzOVx1NTY5Zlx1NTY4YVx1OWY0NVx1OTliOFx1ezI5MDhifVx1OTdmMlx1ODQ3Zlx1OWY2Mlx1OWY2OVx1''@;'; put 'put ''N2FkY1x1OWY4ZVx1NzIxNlx1NGJiZVx1ezI0OTc1fVx1ezI0OWJifVx1NzE3N1x1ezI0OWY4fVx1ezI0MzQ4fVx1ezI0YTUxfVx1NzM5ZVx1ezI4YmRhfVx1ezIxOGZhfVx1Nzk5Zlx1ezI4OTdlfVx1ezI4ZTM2fVx1OTM2OVx1OTNmM1x1ezI4YTQ0fVx1OTJlY1x1OTM4MVx1OTNjYlx1ezI4''@;'; put 'put ''OTZjfVx1ezI0NGI5fVx1NzIxN1x1M2VlYlx1Nzc3Mlx1N2E0M1x1NzBkMFx1ezI0NDczfVx1ezI0M2Y4fVx1NzE3ZVx1ezIxN2VmfVx1NzBhM1x1ezIxOGJlfVx1ezIzNTk5fVx1M2VjN1x1ezIxODg1fVx1ezI1NDJmfVx1ezIxN2Y4fVx1MzcyMlx1ezIxNmZifVx1ezIxODM5fVx1MzZlMVx1''@;'; put 'put ''ezIxNzc0fVx1ezIxOGQxfVx1ezI1ZjRifVx1MzcyM1x1ezIxNmMwfVx1NTc1Ylx1ezI0YTI1fVx1ezIxM2ZlfVx1ezIxMmE4fSJdLFsiOTI0MCIsIlx1ezIxM2M2fVx1ezIxNGI2fVx1ODUwM1x1ezIzNmE2fVx1ODUwM1x1ODQ1NVx1ezI0OTk0fVx1ezI3MTY1fVx1ezIzZTMxfVx1ezI1NTVj''@;'; put 'put ''fVx1ezIzZWZifVx1ezI3MDUyfVx1NDRmNFx1ezIzNmVlfVx1ezI5OTlkfVx1ezI2ZjI2fVx1NjdmOVx1MzczM1x1M2MxNVx1M2RlN1x1NTg2Y1x1ezIxOTIyfVx1NjgxMFx1NDA1N1x1ezIzNzNmfVx1ezI0MGUxfVx1ezI0MDhifVx1ezI0MTBmfVx1ezI2YzIxfVx1NTRjYlx1NTY5ZVx1ezI2''@;'; put 'put ''NmIxfVx1NTY5Mlx1ezIwZmRmfVx1ezIwYmE4fVx1ezIwZTBkfVx1OTNjNlx1ezI4YjEzfVx1OTM5Y1x1NGVmOFx1NTEyYlx1MzgxOVx1ezI0NDM2fVx1NGViY1x1ezIwNDY1fVx1ezIwMzdmfVx1NGY0Ylx1NGY4YVx1ezI1NjUxfVx1NWE2OFx1ezIwMWFifVx1ezIwM2NifVx1Mzk5OVx1ezIw''@;'; put 'put ''MzBhfVx1ezIwNDE0fVx1MzQzNVx1NGYyOVx1ezIwMmMwfVx1ezI4ZWIzfVx1ezIwMjc1fVx1OGFkYVx1ezIwMjBjfVx1NGU5OCJdLFsiOTJhMSIsIlx1NTBjZFx1NTEwZFx1NGZhMlx1NGYwM1x1ezI0YTBlfVx1ezIzZThhfVx1NGY0Mlx1NTAyZVx1NTA2Y1x1NTA4MVx1NGZjY1x1NGZlNVx1''@;'; put 'put ''NTA1OFx1NTBmY1x1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NmU3Nlx1ezIzNTk1fVx1ezIzZTM5fVx1ezIzZWJmfVx1NmQ3Mlx1ezIxODg0fVx1ezIzZTg5fVx1NTFhOFx1NTFjM1x1ezIwNWUwfVx1NDRkZFx1ezIwNGEzfVx1ezIwNDkyfVx1ezIwNDkxfVx1OGQ3YVx1ezI4YTljfVx1ezIw''@;'; put 'put ''NzBlfVx1NTI1OVx1NTJhNFx1ezIwODczfVx1NTJlMVx1OTM2ZVx1NDY3YVx1NzE4Y1x1ezI0MzhjfVx1ezIwYzIwfVx1ezI0OWFjfVx1ezIxMGU0fVx1NjlkMVx1ezIwZTFkfVx1NzQ3OVx1M2VkZVx1NzQ5OVx1NzQxNFx1NzQ1Nlx1NzM5OFx1NGI4ZVx1ezI0YWJjfVx1ezI0MDhkfVx1NTNk''@;'; put 'put ''MFx1MzU4NFx1NzIwZlx1ezI0MGM5fVx1NTViNFx1ezIwMzQ1fVx1NTRjZFx1ezIwYmM2fVx1NTcxZFx1OTI1ZFx1OTZmNFx1OTM2Nlx1NTdkZFx1NTc4ZFx1NTc3Zlx1MzYzZVx1NThjYlx1NWE5OVx1ezI4YTQ2fVx1ezIxNmZhfVx1ezIxNzZmfVx1ezIxNzEwfVx1NWEyY1x1NTliOFx1OTI4''@;'; put 'put ''Zlx1NWE3ZVx1NWFjZlx1NWExMlx1ezI1OTQ2fVx1ezIxOWYzfVx1ezIxODYxfVx1ezI0Mjk1fVx1MzZmNVx1NmQwNVx1NzQ0M1x1NWEyMVx1ezI1ZTgzfSJdLFsiOTM0MCIsIlx1NWE4MVx1ezI4YmQ3fVx1ezIwNDEzfVx1OTNlMFx1NzQ4Y1x1ezIxMzAzfVx1NzEwNVx1NDk3Mlx1OTQwOFx1''@;'; put 'put ''ezI4OWZifVx1OTNiZFx1MzdhMFx1NWMxZVx1NWM5ZVx1NWU1ZVx1NWU0OFx1ezIxOTk2fVx1ezIxOTdjfVx1ezIzYWVlfVx1NWVjZFx1NWI0Zlx1ezIxOTAzfVx1ezIxOTA0fVx1MzcwMVx1ezIxOGEwfVx1MzZkZFx1ezIxNmZlfVx1MzZkM1x1ODEyYVx1ezI4YTQ3fVx1ezIxZGJhfVx1ezIz''@;'; put 'put ''NDcyfVx1ezI4OWE4fVx1NWYwY1x1NWYwZVx1ezIxOTI3fVx1ezIxN2FifVx1NWE2Ylx1ezIxNzNifVx1NWI0NFx1ODYxNFx1ezI3NWZkfVx1ODg2MFx1NjA3ZVx1ezIyODYwfVx1ezIyNjJifVx1NWZkYlx1M2ViOFx1ezIyNWFmfVx1ezIyNWJlfVx1ezI5MDg4fVx1ezI2ZjczfVx1NjFjMFx1''@;'; put 'put ''ezIwMDNlfVx1ezIwMDQ2fVx1ezIyNjFifVx1NjE5OVx1NjE5OFx1NjA3NVx1ezIyYzlifVx1ezIyZDA3fVx1ezI0NmQ0fVx1ezI5MTRkfSJdLFsiOTNhMSIsIlx1NjQ3MVx1ezI0NjY1fVx1ezIyYjZhfVx1M2EyOVx1ezIyYjIyfVx1ezIzNDUwfVx1ezI5OGVhfVx1ezIyZTc4fVx1NjMzN1x1''@;'; put 'put ''ezJhNDVifVx1NjRiNlx1NjMzMVx1NjNkMVx1ezI0OWUzfVx1ezIyZDY3fVx1NjJhNFx1ezIyY2ExfVx1NjQzYlx1NjU2Ylx1Njk3Mlx1M2JmNFx1ezIzMDhlfVx1ezIzMmFkfVx1ezI0OTg5fVx1ezIzMmFifVx1NTUwZFx1ezIzMmUwfVx1ezIxOGQ5fVx1ezI5NDNmfVx1NjZjZVx1ezIzMjg5''@;'; put 'put ''fVx1ezIzMWIzfVx1M2FlMFx1NDE5MFx1ezI1NTg0fVx1ezI4YjIyfVx1ezI1NThmfVx1ezIxNmZjfVx1ezI1NTVifVx1ezI1NDI1fVx1NzhlZVx1ezIzMTAzfVx1ezIxODJhfVx1ezIzMjM0fVx1MzQ2NFx1ezIzMjBmfVx1ezIzMTgyfVx1ezI0MmM5fVx1NjY4ZVx1ezI2ZDI0fVx1NjY2Ylx1''@;'; put 'put ''NGI5M1x1NjYzMFx1ezI3ODcwfVx1ezIxZGVifVx1NjY2M1x1ezIzMmQyfVx1ezIzMmUxfVx1NjYxZVx1ezI1ODcyfVx1MzhkMVx1ezIzODNhfVx1ezIzN2JjfVx1M2I5OVx1ezIzN2EyfVx1ezIzM2ZlfVx1NzRkMFx1M2I5Nlx1Njc4Zlx1ezI0NjJhfVx1NjhiNlx1NjgxZVx1M2JjNFx1NmFi''@;'; put 'put ''ZVx1Mzg2M1x1ezIzN2Q1fVx1ezI0NDg3fVx1NmEzM1x1NmE1Mlx1NmFjOVx1NmIwNVx1ezIxOTEyfVx1NjUxMVx1Njg5OFx1NmE0Y1x1M2JkN1x1NmE3YVx1NmI1N1x1ezIzZmMwfVx1ezIzYzlhfVx1OTNhMFx1OTJmMlx1ezI4YmVhfVx1ezI4YWNifSJdLFsiOTQ0MCIsIlx1OTI4OVx1ezI4''@;'; put 'put ''MDFlfVx1ezI4OWRjfVx1OTQ2N1x1NmRhNVx1NmYwYlx1ezI0OWVjfVx1NmQ2N1x1ezIzZjdmfVx1M2Q4Zlx1NmUwNFx1ezI0MDNjfVx1NWEzZFx1NmUwYVx1NTg0N1x1NmQyNFx1Nzg0Mlx1NzEzYlx1ezI0MzFhfVx1ezI0Mjc2fVx1NzBmMVx1NzI1MFx1NzI4N1x1NzI5NFx1ezI0NzhmfVx1''@;'; put 'put ''ezI0NzI1fVx1NTE3OVx1ezI0YWE0fVx1ezIwNWVifVx1NzQ3YVx1ezIzZWY4fVx1ezIzNjVmfVx1ezI0YTRhfVx1ezI0OTE3fVx1ezI1ZmUxfVx1M2YwNlx1M2ViMVx1ezI0YWRmfVx1ezI4YzIzfVx1ezIzZjM1fVx1NjBhN1x1M2VmM1x1NzRjY1x1NzQzY1x1OTM4N1x1NzQzN1x1NDQ5Zlx1''@;'; put 'put ''ezI2ZGVhfVx1NDU1MVx1NzU4M1x1M2Y2M1x1ezI0Y2Q5fVx1ezI0ZDA2fVx1M2Y1OFx1NzU1NVx1NzY3M1x1ezJhNWM2fVx1M2IxOVx1NzQ2OFx1ezI4YWNjfVx1ezI0OWFifVx1ezI0OThlfVx1M2FmYiJdLFsiOTRhMSIsIlx1M2RjZFx1ezI0YTRlfVx1M2VmZlx1ezI0OWM1fVx1ezI0OGYz''@;'; put 'put ''fVx1OTFmYVx1NTczMlx1OTM0Mlx1ezI4YWUzfVx1ezIxODY0fVx1NTBkZlx1ezI1MjIxfVx1ezI1MWU3fVx1Nzc3OFx1ezIzMjMyfVx1NzcwZVx1NzcwZlx1Nzc3Ylx1ezI0Njk3fVx1ezIzNzgxfVx1M2E1ZVx1ezI0OGYwfVx1NzQzOFx1NzQ5Ylx1M2ViZlx1ezI0YWJhfVx1ezI0YWM3fVx1''@;'; put 'put ''NDBjOFx1ezI0YTk2fVx1ezI2MWFlfVx1OTMwN1x1ezI1NTgxfVx1NzgxZVx1Nzg4ZFx1Nzg4OFx1NzhkMlx1NzNkMFx1Nzk1OVx1ezI3NzQxfVx1ezI1NmUzfVx1NDEwZVx1Nzk5Ylx1ODQ5Nlx1NzlhNVx1NmEyZFx1ezIzZWZhfVx1N2EzYVx1NzlmNFx1NDE2ZVx1ezIxNmU2fVx1NDEzMlx1''@;'; put 'put ''OTIzNVx1NzlmMVx1ezIwZDRjfVx1ezI0OThjfVx1ezIwMjk5fVx1ezIzZGJhfVx1ezIxNzZlfVx1MzU5N1x1NTU2Ylx1MzU3MFx1MzZhYVx1ezIwMWQ0fVx1ezIwYzBkfVx1N2FlMlx1NWE1OVx1ezIyNmY1fVx1ezI1YWFmfVx1ezI1YTljfVx1NWEwZFx1ezIwMjVifVx1NzhmMFx1NWEyYVx1''@;'; put 'put ''ezI1YmM2fVx1N2FmZVx1NDFmOVx1N2M1ZFx1N2M2ZFx1NDIxMVx1ezI1YmIzfVx1ezI1ZWJjfVx1ezI1ZWE2fVx1N2NjZFx1ezI0OWY5fVx1ezIxN2IwfVx1N2M4ZVx1N2M3Y1x1N2NhZVx1NmFiMlx1N2RkY1x1N2UwN1x1N2RkM1x1N2Y0ZVx1ezI2MjYxfSJdLFsiOTU0MCIsIlx1ezI2MTVj''@;'; put 'put ''fVx1ezI3YjQ4fVx1N2Q5N1x1ezI1ZTgyfVx1NDI2YVx1ezI2Yjc1fVx1ezIwOTE2fVx1NjdkNlx1ezIwMDRlfVx1ezIzNWNmfVx1NTdjNFx1ezI2NDEyfVx1ezI2M2Y4fVx1ezI0OTYyfVx1N2ZkZFx1N2IyN1x1ezIwODJjfVx1ezI1YWU5fVx1ezI1ZDQzfVx1N2IwY1x1ezI1ZTBlfVx1OTll''@;'; put 'put ''Nlx1ODY0NVx1OWE2M1x1NmExY1x1ezIzNDNmfVx1MzllMlx1ezI0OWY3fVx1ezI2NWFkfVx1OWExZlx1ezI2NWEwfVx1ODQ4MFx1ezI3MTI3fVx1ezI2Y2QxfVx1NDRlYVx1ODEzN1x1NDQwMlx1ODBjNlx1ODEwOVx1ODE0Mlx1ezI2N2I0fVx1OThjM1x1ezI2YTQyfVx1ODI2Mlx1ODI2NVx1''@;'; put 'put ''ezI2YTUxfVx1ODQ1M1x1ezI2ZGE3fVx1ODYxMFx1ezI3MjFifVx1NWE4Nlx1NDE3Zlx1ezIxODQwfVx1NWIyYlx1ezIxOGExfVx1NWFlNFx1ezIxOGQ4fVx1ODZhMFx1ezJmOWJjfVx1ezIzZDhmfVx1ODgyZFx1ezI3NDIyfVx1NWEwMiJdLFsiOTVhMSIsIlx1ODg2ZVx1NGY0NVx1ODg4N1x1''@;'; put 'put ''ODhiZlx1ODhlNlx1ODk2NVx1ODk0ZFx1ezI1NjgzfVx1ODk1NFx1ezI3Nzg1fVx1ezI3Nzg0fVx1ezI4YmY1fVx1ezI4YmQ5fVx1ezI4YjljfVx1ezI4OWY5fVx1M2VhZFx1ODRhM1x1NDZmNVx1NDZjZlx1MzdmMlx1OGEzZFx1OGExY1x1ezI5NDQ4fVx1NWY0ZFx1OTIyYlx1ezI0Mjg0fVx1''@;'; put 'put ''NjVkNFx1NzEyOVx1NzBjNFx1ezIxODQ1fVx1OWQ2ZFx1OGM5Zlx1OGNlOVx1ezI3ZGRjfVx1NTk5YVx1NzdjM1x1NTlmMFx1NDM2ZVx1MzZkNFx1OGUyYVx1OGVhN1x1ezI0YzA5fVx1OGYzMFx1OGY0YVx1NDJmNFx1NmM1OFx1NmZiYlx1ezIyMzIxfVx1NDg5Ylx1NmY3OVx1NmU4Ylx1ezIx''@;'; put 'put ''N2RhfVx1OWJlOVx1MzZiNVx1ezI0OTJmfVx1OTBiYlx1OTA5N1x1NTU3MVx1NDkwNlx1OTFiYlx1OTQwNFx1ezI4YTRifVx1NDA2Mlx1ezI4YWZjfVx1OTQyN1x1ezI4YzFkfVx1ezI4YzNifVx1ODRlNVx1OGEyYlx1OTU5OVx1OTVhN1x1OTU5N1x1OTU5Nlx1ezI4ZDM0fVx1NzQ0NVx1M2Vj''@;'; put 'put ''Mlx1ezI0OGZmfVx1ezI0YTQyfVx1ezI0M2VhfVx1M2VlN1x1ezIzMjI1fVx1OTY4Zlx1ezI4ZWU3fVx1ezI4ZTY2fVx1ezI4ZTY1fVx1M2VjY1x1ezI0OWVkfVx1ezI0YTc4fVx1ezIzZmVlfVx1NzQxMlx1NzQ2Ylx1M2VmY1x1OTc0MVx1ezI5MGIwfSJdLFsiOTY0MCIsIlx1Njg0N1x1NGEx''@;'; put 'put ''ZFx1ezI5MDkzfVx1ezI1N2RmfVx1OTc1ZFx1OTM2OFx1ezI4OTg5fVx1ezI4YzI2fVx1ezI4YjJmfVx1ezI2M2JlfVx1OTJiYVx1NWIxMVx1OGI2OVx1NDkzY1x1NzNmOVx1ezI0MjFifVx1OTc5Ylx1OTc3MVx1OTkzOFx1ezIwZjI2fVx1NWRjMVx1ezI4YmM1fVx1ezI0YWIyfVx1OTgxZlx1''@;'; put 'put ''ezI5NGRhfVx1OTJmNlx1ezI5NWQ3fVx1OTFlNVx1NDRjMFx1ezI4YjUwfVx1ezI0YTY3fVx1ezI4YjY0fVx1OThkY1x1ezI4YTQ1fVx1M2YwMFx1OTIyYVx1NDkyNVx1ODQxNFx1OTkzYlx1OTk0ZFx1ezI3YjA2fVx1M2RmZFx1OTk5Ylx1NGI2Zlx1OTlhYVx1OWE1Y1x1ezI4YjY1fVx1ezI1''@;'; put 'put ''OGM4fVx1NmE4Zlx1OWEyMVx1NWFmZVx1OWEyZlx1ezI5OGYxfVx1NGI5MFx1ezI5OTQ4fVx1OTliY1x1NGJiZFx1NGI5N1x1OTM3ZFx1NTg3Mlx1ezIxMzAyfVx1NTgyMlx1ezI0OWI4fSJdLFsiOTZhMSIsIlx1ezIxNGU4fVx1Nzg0NFx1ezIyNzFmfVx1ezIzZGI4fVx1NjhjNVx1M2Q3ZFx1''@;'; put 'put ''OTQ1OFx1MzkyN1x1NjE1MFx1ezIyNzgxfVx1ezIyOTZifVx1NjEwN1x1OWM0Zlx1OWM1M1x1OWM3Ylx1OWMzNVx1OWMxMFx1OWI3Zlx1OWJjZlx1ezI5ZTJkfVx1OWI5Zlx1ezJhMWY1fVx1ezJhMGZlfVx1OWQyMVx1NGNhZVx1ezI0MTA0fVx1OWUxOFx1NGNiMFx1OWQwY1x1ezJhMWI0fVx1''@;'; put 'put ''ezJhMGVkfVx1ezJhMGYzfVx1ezI5OTJmfVx1OWRhNVx1ODRiZFx1ezI2ZTEyfVx1ezI2ZmRmfVx1ezI2YjgyfVx1ODVmY1x1NDUzM1x1ezI2ZGE0fVx1ezI2ZTg0fVx1ezI2ZGYwfVx1ODQyMFx1ODVlZVx1ezI2ZTAwfVx1ezIzN2Q3fVx1ezI2MDY0fVx1NzllMlx1ezIzNTljfVx1ezIzNjQw''@;'; put 'put ''fVx1NDkyZFx1ezI0OWRlfVx1M2Q2Mlx1OTNkYlx1OTJiZVx1OTM0OFx1ezIwMmJmfVx1NzhiOVx1OTI3N1x1OTQ0ZFx1NGZlNFx1MzQ0MFx1OTA2NFx1ezI1NTVkfVx1NzgzZFx1Nzg1NFx1NzhiNlx1Nzg0Ylx1ezIxNzU3fVx1ezIzMWM5fVx1ezI0OTQxfVx1MzY5YVx1NGY3Mlx1NmZkYVx1''@;'; put 'put ''NmZkOVx1NzAxZVx1NzAxZVx1NTQxNFx1ezI0MWI1fVx1NTdiYlx1NThmM1x1NTc4YVx1OWQxNlx1NTdkN1x1NzEzNFx1MzRhZlx1ezI0MWFjfVx1NzFlYlx1ezI2YzQwfVx1ezI0Zjk3fVx1NWIyOFx1ezIxN2I1fVx1ezI4YTQ5fSJdLFsiOTc0MCIsIlx1NjEwY1x1NWFjZVx1NWEwYlx1NDJi''@;'; put 'put ''Y1x1ezI0NDg4fVx1MzcyY1x1NGI3Ylx1ezI4OWZjfVx1OTNiYlx1OTNiOFx1ezIxOGQ2fVx1ezIwZjFkfVx1ODQ3Mlx1ezI2Y2MwfVx1ezIxNDEzfVx1ezI0MmZhfVx1ezIyYzI2fVx1ezI0M2MxfVx1NTk5NFx1ezIzZGI3fVx1ezI2NzQxfVx1N2RhOFx1ezI2MTVifVx1ezI2MGE0fVx1ezI0''@;'; put 'put ''OWI5fVx1ezI0OThifVx1ezI4OWZhfVx1OTJlNVx1NzNlMlx1M2VlOVx1NzRiNFx1ezI4YjYzfVx1ezIxODlmfVx1M2VlMVx1ezI0YWIzfVx1NmFkOFx1NzNmM1x1NzNmYlx1M2VkNlx1ezI0YTNlfVx1ezI0YTk0fVx1ezIxN2Q5fVx1ezI0YTY2fVx1ezIwM2E3fVx1ezIxNDI0fVx1ezI0OWU1''@;'; put 'put ''fVx1NzQ0OFx1ezI0OTE2fVx1NzBhNVx1ezI0OTc2fVx1OTI4NFx1NzNlNlx1OTM1Zlx1ezIwNGZlfVx1OTMzMVx1ezI4YWNlfVx1ezI4YTE2fVx1OTM4Nlx1ezI4YmU3fVx1ezI1NWQ1fVx1NDkzNVx1ezI4YTgyfVx1NzE2YiJdLFsiOTdhMSIsIlx1ezI0OTQzfVx1ezIwY2ZmfVx1NTZhNFx1''@;'; put 'put ''ezIwNjFhfVx1ezIwYmVifVx1ezIwY2I4fVx1NTUwMlx1NzljNFx1ezIxN2ZhfVx1N2RmZVx1ezIxNmMyfVx1ezI0YTUwfVx1ezIxODUyfVx1NDUyZVx1OTQwMVx1MzcwYVx1ezI4YWMwfVx1ezI0OWFkfVx1NTliMFx1ezIxOGJmfVx1ezIxODgzfVx1ezI3NDg0fVx1NWFhMVx1MzZlMlx1ezIz''@;'; put 'put ''ZDVifVx1MzZiMFx1OTI1Zlx1NWE3OVx1ezI4YTgxfVx1ezIxODYyfVx1OTM3NFx1M2NjZFx1ezIwYWI0fVx1NGE5Nlx1Mzk4YVx1NTBmNFx1M2Q2OVx1M2Q0Y1x1ezIxMzljfVx1NzE3NVx1NDJmYlx1ezI4MjE4fVx1NmUwZlx1ezI5MGU0fVx1NDRlYlx1NmQ1N1x1ezI3ZTRmfVx1NzA2N1x1''@;'; put 'put ''NmNhZlx1M2NkNlx1ezIzZmVkfVx1ezIzZTJkfVx1NmUwMlx1NmYwY1x1M2Q2Zlx1ezIwM2Y1fVx1NzU1MVx1MzZiY1x1MzRjOFx1NDY4MFx1M2VkYVx1NDg3MVx1NTljNFx1OTI2ZVx1NDkzZVx1OGY0MVx1ezI4YzFjfVx1ezI2YmMwfVx1NTgxMlx1NTdjOFx1MzZkNlx1ezIxNDUyfVx1NzBm''@;'; put 'put ''ZVx1ezI0MzYyfVx1ezI0YTcxfVx1ezIyZmUzfVx1ezIxMmIwfVx1ezIyM2JkfVx1NjhiOVx1Njk2N1x1ezIxMzk4fVx1ezIzNGU1fVx1ezI3YmY0fVx1ezIzNmRmfVx1ezI4YTgzfVx1ezIzN2Q2fVx1ezIzM2ZhfVx1ezI0YzlmfVx1NmExYVx1ezIzNmFkfVx1ezI2Y2I3fVx1ODQzZVx1NDRk''@;'; put 'put ''Zlx1NDRjZSJdLFsiOTg0MCIsIlx1ezI2ZDI2fVx1ezI2ZDUxfVx1ezI2YzgyfVx1ezI2ZmRlfVx1NmYxN1x1ezI3MTA5fVx1ODMzZFx1ezIxNzNhfVx1ODNlZFx1ezI2YzgwfVx1ezI3MDUzfVx1ezIxN2RifVx1NTk4OVx1NWE4Mlx1ezIxN2IzfVx1NWE2MVx1NWE3MVx1ezIxOTA1fVx1ezI0''@;'; put 'put ''MWZjfVx1MzcyZFx1NTllZlx1ezIxNzNjfVx1MzZjN1x1NzE4ZVx1OTM5MFx1NjY5YVx1ezI0MmE1fVx1NWE2ZVx1NWEyYlx1ezI0MjkzfVx1NmEyYlx1ezIzZWY5fVx1ezI3NzM2fVx1ezI0NDVifVx1ezI0MmNhfVx1NzExZFx1ezI0MjU5fVx1ezI4OWUxfVx1NGZiMFx1ezI2ZDI4fVx1NWNj''@;'; put 'put ''Mlx1ezI0NGNlfVx1ezI3ZTRkfVx1ezI0M2JkfVx1NmEwY1x1ezI0MjU2fVx1ezIxMzA0fVx1NzBhNlx1NzEzM1x1ezI0M2U5fVx1M2RhNVx1NmNkZlx1ezJmODI1fVx1ezI0YTRmfVx1N2U2NVx1NTllYlx1NWQyZlx1M2RmM1x1NWY1Y1x1ezI0YTVkfVx1ezIxN2RmfVx1N2RhNFx1ODQyNiJd''@;'; put 'put ''LFsiOThhMSIsIlx1NTQ4NVx1ezIzYWZhfVx1ezIzMzAwfVx1ezIwMjE0fVx1NTc3ZVx1ezIwOGQ1fVx1ezIwNjE5fVx1M2ZlNVx1ezIxZjllfVx1ezJhMmI2fVx1NzAwM1x1ezI5MTVifVx1NWQ3MFx1NzM4Zlx1N2NkM1x1ezI4YTU5fVx1ezI5NDIwfVx1NGZjOFx1N2ZlN1x1NzJjZFx1NzMx''@;'; put 'put ''MFx1ezI3YWY0fVx1NzMzOFx1NzMzOVx1ezI1NmY2fVx1NzM0MVx1NzM0OFx1M2VhOVx1ezI3YjE4fVx1OTA2Y1x1NzFmNVx1ezI0OGYyfVx1NzNlMVx1ODFmNlx1M2VjYVx1NzcwY1x1M2VkMVx1NmNhMlx1NTZmZFx1NzQxOVx1NzQxZVx1NzQxZlx1M2VlMlx1M2VmMFx1M2VmNFx1M2VmYVx1''@;'; put 'put ''NzRkM1x1M2YwZVx1M2Y1M1x1NzU0Mlx1NzU2ZFx1NzU3Mlx1NzU4ZFx1M2Y3Y1x1NzVjOFx1NzVkY1x1M2ZjMFx1NzY0ZFx1M2ZkN1x1NzY3NFx1M2ZkY1x1NzY3YVx1ezI0ZjVjfVx1NzE4OFx1NTYyM1x1ODk4MFx1NTg2OVx1NDAxZFx1Nzc0M1x1NDAzOVx1Njc2MVx1NDA0NVx1MzVkYlx1''@;'; put 'put ''Nzc5OFx1NDA2YVx1NDA2Zlx1NWM1ZVx1NzdiZVx1NzdjYlx1NThmMlx1NzgxOFx1NzBiOVx1NzgxY1x1NDBhOFx1NzgzOVx1Nzg0N1x1Nzg1MVx1Nzg2Nlx1ODQ0OFx1ezI1NTM1fVx1NzkzM1x1NjgwM1x1NzkzMlx1NDEwMyJdLFsiOTk0MCIsIlx1NDEwOVx1Nzk5MVx1Nzk5OVx1OGZiYlx1''@;'; put 'put ''N2EwNlx1OGZiY1x1NDE2N1x1N2E5MVx1NDFiMlx1N2FiY1x1ODI3OVx1NDFjNFx1N2FjZlx1N2FkYlx1NDFjZlx1NGUyMVx1N2I2Mlx1N2I2Y1x1N2I3Ylx1N2MxMlx1N2MxYlx1NDI2MFx1NDI3YVx1N2M3Ylx1N2M5Y1x1NDI4Y1x1N2NiOFx1NDI5NFx1N2NlZFx1OGY5M1x1NzBjMFx1ezIw''@;'; put 'put ''Y2NmfVx1N2RjZlx1N2RkNFx1N2RkMFx1N2RmZFx1N2ZhZVx1N2ZiNFx1NzI5Zlx1NDM5N1x1ODAyMFx1ODAyNVx1N2IzOVx1ODAyZVx1ODAzMVx1ODA1NFx1M2RjY1x1NTdiNFx1NzBhMFx1ODBiN1x1ODBlOVx1NDNlZFx1ODEwY1x1NzMyYVx1ODEwZVx1ODExMlx1NzU2MFx1ODExNFx1NDQw''@;'; put 'put ''MVx1M2IzOVx1ODE1Nlx1ODE1OVx1ODE1YSJdLFsiOTlhMSIsIlx1NDQxM1x1NTgzYVx1ODE3Y1x1ODE4NFx1NDQyNVx1ODE5M1x1NDQyZFx1ODFhNVx1NTdlZlx1ODFjMVx1ODFlNFx1ODI1NFx1NDQ4Zlx1ODJhNlx1ODI3Nlx1ODJjYVx1ODJkOFx1ODJmZlx1NDRiMFx1ODM1N1x1OTY2OVx1''@;'; put 'put ''Njk4YVx1ODQwNVx1NzBmNVx1ODQ2NFx1NjBlM1x1ODQ4OFx1NDUwNFx1ODRiZVx1ODRlMVx1ODRmOFx1ODUxMFx1ODUzOFx1ODU1Mlx1NDUzYlx1ODU2Zlx1ODU3MFx1ODVlMFx1NDU3N1x1ODY3Mlx1ODY5Mlx1ODZiMlx1ODZlZlx1OTY0NVx1ODc4Ylx1NDYwNlx1NDYxN1x1ODhhZVx1ODhm''@;'; put 'put ''Zlx1ODkyNFx1ODk0N1x1ODk5MVx1ezI3OTY3fVx1OGEyOVx1OGEzOFx1OGE5NFx1OGFiNFx1OGM1MVx1OGNkNFx1OGNmMlx1OGQxY1x1NDc5OFx1NTg1Zlx1OGRjM1x1NDdlZFx1NGVlZVx1OGUzYVx1NTVkOFx1NTc1NFx1OGU3MVx1NTVmNVx1OGViMFx1NDgzN1x1OGVjZVx1OGVlMlx1OGVl''@;'; put 'put ''NFx1OGVlZFx1OGVmMlx1OGZiN1x1OGZjMVx1OGZjYVx1OGZjY1x1OTAzM1x1OTljNFx1NDhhZFx1OThlMFx1OTIxM1x1NDkxZVx1OTIyOFx1OTI1OFx1OTI2Ylx1OTJiMVx1OTJhZVx1OTJiZiJdLFsiOWE0MCIsIlx1OTJlM1x1OTJlYlx1OTJmM1x1OTJmNFx1OTJmZFx1OTM0M1x1OTM4NFx1''@;'; put 'put ''OTNhZFx1NDk0NVx1NDk1MVx1OWViZlx1OTQxN1x1NTMwMVx1OTQxZFx1OTQyZFx1OTQzZVx1NDk2YVx1OTQ1NFx1OTQ3OVx1OTUyZFx1OTVhMlx1NDlhN1x1OTVmNFx1OTYzM1x1NDllNVx1NjdhMFx1NGEyNFx1OTc0MFx1NGEzNVx1OTdiMlx1OTdjMlx1NTY1NFx1NGFlNFx1NjBlOFx1OThi''@;'; put 'put ''OVx1NGIxOVx1OThmMVx1NTg0NFx1OTkwZVx1OTkxOVx1NTFiNFx1OTkxY1x1OTkzN1x1OTk0Mlx1OTk1ZFx1OTk2Mlx1NGI3MFx1OTljNVx1NGI5ZFx1OWEzY1x1OWIwZlx1N2E4M1x1OWI2OVx1OWI4MVx1OWJkZFx1OWJmMVx1OWJmNFx1NGM2ZFx1OWMyMFx1Mzc2Zlx1ezIxYmMyfVx1OWQ0''@;'; put 'put ''OVx1OWMzYSJdLFsiOWFhMSIsIlx1OWVmZVx1NTY1MFx1OWQ5M1x1OWRiZFx1OWRjMFx1OWRmY1x1OTRmNlx1OGZiNlx1OWU3Ylx1OWVhY1x1OWViMVx1OWViZFx1OWVjNlx1OTRkY1x1OWVlMlx1OWVmMVx1OWVmOFx1N2FjOFx1OWY0NFx1ezIwMDk0fVx1ezIwMmI3fVx1ezIwM2EwfVx1Njkx''@;'; put 'put ''YVx1OTRjM1x1NTlhY1x1ezIwNGQ3fVx1NTg0MFx1OTRjMVx1MzdiOVx1ezIwNWQ1fVx1ezIwNjE1fVx1ezIwNjc2fVx1ezIxNmJhfVx1NTc1N1x1NzE3M1x1ezIwYWMyfVx1ezIwYWNkfVx1ezIwYmJmfVx1NTQ2YVx1ezJmODNifVx1ezIwYmNifVx1NTQ5ZVx1ezIwYmZifVx1ezIwYzNifVx1''@;'; put 'put ''ezIwYzUzfVx1ezIwYzY1fVx1ezIwYzdjfVx1NjBlN1x1ezIwYzhkfVx1NTY3YVx1ezIwY2I1fVx1ezIwY2RkfVx1ezIwY2VkfVx1ezIwZDZmfVx1ezIwZGIyfVx1ezIwZGM4fVx1Njk1NVx1OWMyZlx1ODdhNVx1ezIwZTA0fVx1ezIwZTBlfVx1ezIwZWQ3fVx1ezIwZjkwfVx1ezIwZjJkfVx1''@;'; put 'put ''ezIwZTczfVx1NWMyMFx1ezIwZmJjfVx1NWUwYlx1ezIxMDVjfVx1ezIxMDRmfVx1ezIxMDc2fVx1NjcxZVx1ezIxMDdifVx1ezIxMDg4fVx1ezIxMDk2fVx1MzY0N1x1ezIxMGJmfVx1ezIxMGQzfVx1ezIxMTJmfVx1ezIxMTNifVx1NTM2NFx1ODRhZFx1ezIxMmUzfVx1ezIxMzc1fVx1ezIx''@;'; put 'put ''MzM2fVx1OGI4MVx1ezIxNTc3fVx1ezIxNjE5fVx1ezIxN2MzfVx1ezIxN2M3fVx1NGU3OFx1NzBiYlx1ezIxODJkfVx1ezIxOTZhfSJdLFsiOWI0MCIsIlx1ezIxYTJkfVx1ezIxYTQ1fVx1ezIxYzJhfVx1ezIxYzcwfVx1ezIxY2FjfVx1ezIxZWM4fVx1NjJjM1x1ezIxZWQ1fVx1ezIxZjE1''@;'; put 'put ''fVx1NzE5OFx1Njg1NVx1ezIyMDQ1fVx1NjllOVx1MzZjOFx1ezIyMjdjfVx1ezIyM2Q3fVx1ezIyM2ZhfVx1ezIyNzJhfVx1ezIyODcxfVx1ezIyOTRmfVx1ODJmZFx1ezIyOTY3fVx1ezIyOTkzfVx1ezIyYWQ1fVx1ODlhNVx1ezIyYWU4fVx1OGZhMFx1ezIyYjBlfVx1OTdiOFx1ezIyYjNm''@;'; put 'put ''fVx1OTg0N1x1OWFiZFx1ezIyYzRjfSJdLFsiOWI2MiIsIlx1ezIyYzg4fVx1ezIyY2I3fVx1ezI1YmU4fVx1ezIyZDA4fVx1ezIyZDEyfVx1ezIyZGI3fVx1ezIyZDk1fVx1ezIyZTQyfVx1ezIyZjc0fVx1ezIyZmNjfVx1ezIzMDMzfVx1ezIzMDY2fVx1ezIzMzFmfVx1ezIzM2RlfVx1NWZi''@;'; put 'put ''MVx1NjY0OFx1NjZiZlx1ezI3YTc5fVx1ezIzNTY3fVx1ezIzNWYzfVx1NzIwMVx1ezI0OWJhfVx1NzdkN1x1ezIzNjFhfVx1ezIzNzE2fVx1N2U4N1x1ezIwMzQ2fVx1NThiNVx1NjcwZSJdLFsiOWJhMSIsIlx1NjkxOFx1ezIzYWE3fVx1ezI3NjU3fVx1ezI1ZmUyfVx1ezIzZTExfVx1ezIz''@;'; put 'put ''ZWI5fVx1ezI3NWZlfVx1ezIyMDlhfVx1NDhkMFx1NGFiOFx1ezI0MTE5fVx1ezI4YTlhfVx1ezI0MmVlfVx1ezI0MzBkfVx1ezI0MDNifVx1ezI0MzM0fVx1ezI0Mzk2fVx1ezI0YTQ1fVx1ezIwNWNhfVx1NTFkMlx1ezIwNjExfVx1NTk5Zlx1ezIxZWE4fVx1M2JiZVx1ezIzY2ZmfVx1ezI0''@;'; put 'put ''NDA0fVx1ezI0NGQ2fVx1NTc4OFx1ezI0Njc0fVx1Mzk5Ylx1ezI0NzJmfVx1ezI4NWU4fVx1ezI5OWM5fVx1Mzc2Mlx1ezIyMWMzfVx1OGI1ZVx1ezI4YjRlfVx1OTlkNlx1ezI0ODEyfVx1ezI0OGZifVx1ezI0YTE1fVx1NzIwOVx1ezI0YWMwfVx1ezIwYzc4fVx1NTk2NVx1ezI0ZWE1fVx1''@;'; put 'put ''ezI0Zjg2fVx1ezIwNzc5fVx1OGVkYVx1ezI1MDJjfVx1NTI4Zlx1NTczZlx1NzE3MVx1ezI1Mjk5fVx1ezI1NDE5fVx1ezIzZjRhfVx1ezI0YWE3fVx1NTViY1x1ezI1NDQ2fVx1ezI1NDZlfVx1ezI2YjUyfVx1OTFkNFx1MzQ3M1x1ezI1NTNmfVx1ezI3NjMyfVx1ezI1NTVlfVx1NDcxOFx1''@;'; put 'put ''ezI1NTYyfVx1ezI1NTY2fVx1ezI1N2M3fVx1ezI0OTNmfVx1ezI1ODVkfVx1NTA2Nlx1MzRmYlx1ezIzM2NjfVx1NjBkZVx1ezI1OTAzfVx1NDc3Y1x1ezI4OTQ4fVx1ezI1YWFlfVx1ezI1Yjg5fVx1ezI1YzA2fVx1ezIxZDkwfVx1NTdhMVx1NzE1MVx1NmZiNlx1ezI2MTAyfVx1ezI3YzEy''@;'; put 'put ''fVx1OTA1Nlx1ezI2MWIyfVx1ezI0ZjlhfVx1OGI2Mlx1ezI2NDAyfVx1ezI2NDRhfSJdLFsiOWM0MCIsIlx1NWQ1Ylx1ezI2YmY3fVx1OGYzNlx1ezI2NDg0fVx1ezIxOTFjfVx1OGFlYVx1ezI0OWY2fVx1ezI2NDg4fVx1ezIzZmVmfVx1ezI2NTEyfVx1NGJjMFx1ezI2NWJmfVx1ezI2NmI1''@;'; put 'put ''fVx1ezIyNzFifVx1OTQ2NVx1ezI1N2UxfVx1NjE5NVx1NWEyN1x1ezJmOGNkfVx1NGZiYlx1NTZiOVx1ezI0NTIxfVx1ezI2NmZjfVx1NGU2YVx1ezI0OTM0fVx1OTY1Nlx1NmQ4Zlx1ezI2Y2JkfVx1MzYxOFx1ODk3N1x1ezI2Nzk5fVx1ezI2ODZlfVx1ezI2NDExfVx1ezI2ODVlfVx1NzFk''@;'; put 'put ''Zlx1ezI2OGM3fVx1N2I0Mlx1ezI5MGMwfVx1ezIwYTExfVx1ezI2OTI2fVx1OTEwNFx1ezI2OTM5fVx1N2E0NVx1OWRmMFx1ezI2OWZhfVx1OWEyNlx1ezI2YTJkfVx1MzY1Zlx1ezI2NDY5fVx1ezIwMDIxfVx1Nzk4M1x1ezI2YTM0fVx1ezI2YjVifVx1NWQyY1x1ezIzNTE5fVx1ODNjZlx1''@;'; put 'put ''ezI2YjlkfVx1NDZkMFx1ezI2Y2E0fVx1NzUzYlx1ODg2NVx1ezI2ZGFlfVx1NThiNiJdLFsiOWNhMSIsIlx1MzcxY1x1ezIyNThkfVx1ezI3MDRifVx1ezI3MWNkfVx1M2M1NFx1ezI3MjgwfVx1ezI3Mjg1fVx1OTI4MVx1ezIyMTdhfVx1ezI3MjhifVx1OTMzMFx1ezI3MmU2fVx1ezI0OWQw''@;'; put 'put ''fVx1NmMzOVx1OTQ5Zlx1ezI3NDUwfVx1ezIwZWY4fVx1ODgyN1x1ODhmNVx1ezIyOTI2fVx1ezI4NDczfVx1ezIxN2IxfVx1NmViOFx1ezI0YTJhfVx1ezIxODIwfVx1MzlhNFx1MzZiOVx1NWMxMFx1NzllM1x1NDUzZlx1NjZiNlx1ezI5Y2FkfVx1ezI5OGE0fVx1ODk0M1x1ezI3N2NjfVx1''@;'; put 'put ''ezI3ODU4fVx1NTZkNlx1NDBkZlx1ezIxNjBhfVx1MzlhMVx1ezIzNzJmfVx1ezI4MGU4fVx1ezIxM2M1fVx1NzFhZFx1ODM2Nlx1ezI3OWRkfVx1ezI5MWE4fVx1NWE2N1x1NGNiN1x1ezI3MGFmfVx1ezI4OWFifVx1ezI3OWZkfVx1ezI3YTBhfVx1ezI3YjBifVx1ezI3ZDY2fVx1ezI0MTdh''@;'; put 'put ''fVx1N2I0M1x1Nzk3ZVx1ezI4MDA5fVx1NmZiNVx1ezJhMmRmfVx1NmEwM1x1ezI4MzE4fVx1NTNhMlx1ezI2ZTA3fVx1OTNiZlx1NjgzNlx1OTc1ZFx1ezI4MTZmfVx1ezI4MDIzfVx1ezI2OWI1fVx1ezIxM2VkfVx1ezIzMjJmfVx1ezI4MDQ4fVx1NWQ4NVx1ezI4YzMwfVx1ezI4MDgzfVx1''@;'; put 'put ''NTcxNVx1OTgyM1x1ezI4OTQ5fVx1NWRhYlx1ezI0OTg4fVx1NjViZVx1NjlkNVx1NTNkMlx1ezI0YWE1fVx1ezIzZjgxfVx1M2MxMVx1NjczNlx1ezI4MDkwfVx1ezI4MGY0fVx1ezI4MTJlfVx1ezIxZmExfVx1ezI4MTRmfSJdLFsiOWQ0MCIsIlx1ezI4MTg5fVx1ezI4MWFmfVx1ezI4MjFh''@;'; put 'put ''fVx1ezI4MzA2fVx1ezI4MzJmfVx1ezI4MzhhfVx1MzVjYVx1ezI4NDY4fVx1ezI4NmFhfVx1NDhmYVx1NjNlNlx1ezI4OTU2fVx1NzgwOFx1OTI1NVx1ezI4OWI4fVx1NDNmMlx1ezI4OWU3fVx1NDNkZlx1ezI4OWU4fVx1ezI4YjQ2fVx1ezI4YmQ0fVx1NTlmOFx1ezI4YzA5fVx1OGYwYlx1''@;'; put 'put ''ezI4ZmM1fVx1ezI5MGVjfVx1N2I1MVx1ezI5MTEwfVx1ezI5MTNjfVx1M2RmN1x1ezI5MTVlfVx1ezI0YWNhfVx1OGZkMFx1NzI4Zlx1NTY4Ylx1ezI5NGU3fVx1ezI5NWU5fVx1ezI5NWIwfVx1ezI5NWI4fVx1ezI5NzMyfVx1ezI5OGQxfVx1ezI5OTQ5fVx1ezI5OTZhfVx1ezI5OWMzfVx1''@;'; put 'put ''ezI5YTI4fVx1ezI5YjBlfVx1ezI5ZDVhfVx1ezI5ZDlifVx1N2U5Zlx1ezI5ZWY4fVx1ezI5ZjIzfVx1NGNhNFx1OTU0N1x1ezJhMjkzfVx1NzFhMlx1ezJhMmZmfVx1NGQ5MVx1OTAxMlx1ezJhNWNifVx1NGQ5Y1x1ezIwYzljfVx1OGZiZVx1NTVjMSJdLFsiOWRhMSIsIlx1OGZiYVx1ezIy''@;'; put 'put ''NGIwfVx1OGZiOVx1ezI0YTkzfVx1NDUwOVx1N2U3Zlx1NmY1Nlx1NmFiMVx1NGVlYVx1MzRlNFx1ezI4YjJjfVx1ezI3ODlkfVx1MzczYVx1OGU4MFx1ezIxN2Y1fVx1ezI4MDI0fVx1ezI4YjZjfVx1ezI4Yjk5fVx1ezI3YTNlfVx1ezI2NmFmfVx1M2RlYlx1ezI3NjU1fVx1ezIzY2I3fVx1''@;'; put 'put ''ezI1NjM1fVx1ezI1OTU2fVx1NGU5YVx1ezI1ZTgxfVx1ezI2MjU4fVx1NTZiZlx1ezIwZTZkfVx1OGUwZVx1NWI2ZFx1ezIzZTg4fVx1ezI0YzllfVx1NjNkZVx1NjJkMFx1ezIxN2Y2fVx1ezIxODdifVx1NjUzMFx1NTYyZFx1ezI1YzRhfVx1NTQxYVx1ezI1MzExfVx1M2RjNlx1ezI5ZDk4''@;'; put 'put ''fVx1NGM3ZFx1NTYyMlx1NTYxZVx1N2Y0OVx1ezI1ZWQ4fVx1NTk3NVx1ezIzZDQwfVx1ODc3MFx1NGUxY1x1ezIwZmVhfVx1ezIwZDQ5fVx1ezIzNmJhfVx1ODExN1x1OWQ1ZVx1OGQxOFx1NzYzYlx1OWM0NVx1NzY0ZVx1NzdiOVx1OTM0NVx1NTQzMlx1ODE0OFx1ODJmN1x1NTYyNVx1ODEz''@;'; put 'put ''Mlx1ODQxOFx1ODBiZFx1NTVlYVx1Nzk2Mlx1NTY0M1x1NTQxNlx1ezIwZTlkfVx1MzVjZVx1NTYwNVx1NTVmMVx1NjZmMVx1ezI4MmUyfVx1MzYyZFx1NzUzNFx1NTVmMFx1NTViYVx1NTQ5N1x1NTU3Mlx1ezIwYzQxfVx1ezIwYzk2fVx1NWVkMFx1ezI1MTQ4fVx1ezIwZTc2fVx1ezIyYzYy''@;'; put 'put ''fSJdLFsiOWU0MCIsIlx1ezIwZWEyfVx1OWVhYlx1N2Q1YVx1NTVkZVx1ezIxMDc1fVx1NjI5ZFx1OTc2ZFx1NTQ5NFx1OGNjZFx1NzFmNlx1OTE3Nlx1NjNmY1x1NjNiOVx1NjNmZVx1NTU2OVx1ezIyYjQzfVx1OWM3Mlx1ezIyZWIzfVx1NTE5YVx1MzRkZlx1ezIwZGE3fVx1NTFhN1x1NTQ0''@;'; put 'put ''ZFx1NTUxZVx1NTUxM1x1NzY2Nlx1OGUyZFx1ezI2ODhhfVx1NzViMVx1ODBiNlx1ODgwNFx1ODc4Nlx1ODhjN1x1ODFiNlx1ODQxY1x1ezIxMGMxfVx1NDRlY1x1NzMwNFx1ezI0NzA2fVx1NWI5MFx1ODMwYlx1ezI2ODkzfVx1NTY3Ylx1ezIyNmY0fVx1ezI3ZDJmfVx1ezI0MWEzfVx1ezI3''@;'; put 'put ''ZDczfVx1ezI2ZWQwfVx1ezI3MmI2fVx1OTE3MFx1ezIxMWQ5fVx1OTIwOFx1ezIzY2ZjfVx1ezJhNmE5fVx1ezIwZWFjfVx1ezIwZWY5fVx1NzI2Nlx1ezIxY2EyfVx1NDc0ZVx1ezI0ZmMyfVx1ezI3ZmY5fVx1ezIwZmVifVx1NDBmYSJdLFsiOWVhMSIsIlx1OWM1ZFx1NjUxZlx1ezIyZGEw''@;'; put 'put ''fVx1NDhmM1x1ezI0N2UwfVx1ezI5ZDdjfVx1ezIwZmVjfVx1ezIwZTBhfVx1NjA2Mlx1ezI3NWEzfVx1ezIwZmVkfSJdLFsiOWVhZCIsIlx1ezI2MDQ4fVx1ezIxMTg3fVx1NzFhM1x1N2U4ZVx1OWQ1MFx1NGUxYVx1NGUwNFx1MzU3N1x1NWIwZFx1NmNiMlx1NTM2N1x1MzZhY1x1MzlkY1x1''@;'; put 'put ''NTM3ZFx1MzZhNVx1ezI0NjE4fVx1NTg5YVx1ezI0YjZlfVx1ODIyZFx1NTQ0Ylx1NTdhYVx1ezI1YTk1fVx1ezIwOTc5fSJdLFsiOWVjNSIsIlx1M2E1Mlx1ezIyNDY1fVx1NzM3NFx1ezI5ZWFjfVx1NGQwOVx1OWJlZFx1ezIzY2ZlfVx1ezI5ZjMwfVx1NGM1Ylx1ezI0ZmE5fVx1ezI5NTll''@;'; put 'put ''fVx1ezI5ZmRlfVx1ODQ1Y1x1ezIzZGI2fVx1ezI3MmIyfVx1ezI2N2IzfVx1ezIzNzIwfVx1NjMyZVx1N2QyNVx1ezIzZWY3fVx1ezIzZTJjfVx1M2EyYVx1OTAwOFx1NTJjY1x1M2U3NFx1MzY3YVx1NDVlOVx1ezIwNDhlfVx1NzY0MFx1NWFmMFx1ezIwZWI2fVx1Nzg3YVx1ezI3ZjJlfVx1''@;'; put 'put ''NThhN1x1NDBiZlx1NTY3Y1x1OWI4Ylx1NWQ3NFx1NzY1NFx1ezJhNDM0fVx1OWU4NVx1NGNlMVx1NzVmOVx1MzdmYlx1NjExOVx1ezIzMGRhfVx1ezI0M2YyfSJdLFsiOWVmNSIsIlx1NTY1ZFx1ezIxMmE5fVx1NTdhN1x1ezI0OTYzfVx1ezI5ZTA2fVx1NTIzNFx1ezI3MGFlfVx1MzVhZFx1''@;'; put 'put ''NmM0YVx1OWQ3YyJdLFsiOWY0MCIsIlx1N2M1Nlx1OWIzOVx1NTdkZVx1ezIxNzZjfVx1NWM1M1x1NjRkM1x1ezI5NGQwfVx1ezI2MzM1fVx1ezI3MTY0fVx1ODZhZFx1ezIwZDI4fVx1ezI2ZDIyfVx1ezI0YWUyfVx1ezIwZDcxfSJdLFsiOWY0ZiIsIlx1NTFmZVx1ezIxZjBmfVx1NWQ4ZVx1''@;'; put 'put ''OTcwM1x1ezIxZGQxfVx1OWU4MVx1OTA0Y1x1N2IxZlx1OWIwMlx1NWNkMVx1N2JhM1x1NjI2OFx1NjMzNVx1OWFmZlx1N2JjZlx1OWIyYVx1N2M3ZVx1OWIyZVx1N2M0Mlx1N2M4Nlx1OWMxNVx1N2JmY1x1OWIwOVx1OWYxN1x1OWMxYlx1ezI0OTNlfVx1OWY1YVx1NTU3M1x1NWJjM1x1NGZm''@;'; put 'put ''ZFx1OWU5OFx1NGZmMlx1NTI2MFx1M2UwNlx1NTJkMVx1NTc2N1x1NTA1Nlx1NTliN1x1NWUxMlx1OTdjOFx1OWRhYlx1OGY1Y1x1NTQ2OVx1OTdiNFx1OTk0MFx1OTdiYVx1NTMyY1x1NjEzMCJdLFsiOWZhMSIsIlx1NjkyY1x1NTNkYVx1OWMwYVx1OWQwMlx1NGMzYlx1OTY0MVx1Njk4MFx1''@;'; put 'put ''NTBhNlx1NzU0Nlx1ezIxNzZkfVx1OTlkYVx1NTI3MyJdLFsiOWZhZSIsIlx1OTE1OVx1OTY4MVx1OTE1YyJdLFsiOWZiMiIsIlx1OTE1MVx1ezI4ZTk3fVx1NjM3Zlx1ezI2ZDIzfVx1NmFjYVx1NTYxMVx1OTE4ZVx1NzU3YVx1NjI4NVx1ezIwM2ZjfVx1NzM0Zlx1N2M3MFx1ezI1YzIxfVx1''@;'; put 'put ''ezIzY2ZkfSJdLFsiOWZjMSIsIlx1ezI0OTE5fVx1NzZkNlx1OWI5ZFx1NGUyYVx1ezIwY2Q0fVx1ODNiZVx1ODg0MiJdLFsiOWZjOSIsIlx1NWM0YVx1NjljMFx1NTBlZFx1NTc3YVx1NTIxZlx1NWRmNVx1NGVjZVx1NmMzMVx1ezIwMWYyfVx1NGYzOVx1NTQ5Y1x1NTRkYVx1NTI5YVx1OGQ4''@;'; put 'put ''Mlx1MzVmZVx1NWYwY1x1MzVmMyJdLFsiOWZkYiIsIlx1NmI1Mlx1OTE3Y1x1OWZhNVx1OWI5N1x1OTgyZVx1OThiNFx1OWFiYVx1OWVhOFx1OWU4NFx1NzE3YVx1N2IxNCJdLFsiOWZlNyIsIlx1NmJmYVx1ODgxOFx1N2Y3OCJdLFsiOWZlYiIsIlx1NTYyMFx1ezJhNjRhfVx1OGU3N1x1OWY1''@;'; put 'put ''MyJdLFsiOWZmMCIsIlx1OGRkNFx1OGU0Zlx1OWUxY1x1OGUwMVx1NjI4Mlx1ezI4MzdkfVx1OGUyOFx1OGU3NVx1N2FkM1x1ezI0YTc3fVx1N2EzZVx1NzhkOFx1NmNlYVx1OGE2N1x1NzYwNyJdLFsiYTA0MCIsIlx1ezI4YTVhfVx1OWYyNlx1NmNjZVx1ODdkNlx1NzVjM1x1ezJhMmIyfVx1''@;'; put 'put ''Nzg1M1x1ezJmODQwfVx1OGQwY1x1NzJlMlx1NzM3MVx1OGIyZFx1NzMwMlx1NzRmMVx1OGNlYlx1ezI0YWJifVx1ODYyZlx1NWZiYVx1ODhhMFx1NDRiNyJdLFsiYTA1NSIsIlx1ezIxODNifVx1ezI2ZTA1fSJdLFsiYTA1OCIsIlx1OGE3ZVx1ezIyNTFifSJdLFsiYTA1YiIsIlx1NjBmZFx1''@;'; put 'put ''NzY2N1x1OWFkN1x1OWQ0NFx1OTM2ZVx1OWI4Zlx1ODdmNSJdLFsiYTA2MyIsIlx1ODgwZlx1OGNmN1x1NzMyY1x1OTcyMVx1OWJiMFx1MzVkNlx1NzJiMlx1NGMwN1x1N2M1MVx1OTk0YVx1ezI2MTU5fVx1NjE1OVx1NGMwNFx1OWU5Nlx1NjE3ZCJdLFsiYTA3MyIsIlx1NTc1Zlx1NjE2Zlx1''@;'; put 'put ''NjJhNlx1NjIzOVx1NjJjZVx1M2E1Y1x1NjFlMlx1NTNhYVx1ezIzM2Y1fVx1NjM2NFx1NjgwMlx1MzVkMiJdLFsiYTBhMSIsIlx1NWQ1N1x1ezI4YmMyfVx1OGZkYVx1ezI4ZTM5fSJdLFsiYTBhNiIsIlx1NTBkOVx1ezIxZDQ2fVx1NzkwNlx1NTMzMlx1OTYzOFx1ezIwZjNifVx1NDA2NSJd''@;'; put 'put ''LFsiYTBhZSIsIlx1NzdmZSJdLFsiYTBiMCIsIlx1N2NjMlx1ezI1ZjFhfVx1N2NkYVx1N2EyZFx1ODA2Nlx1ODA2M1x1N2Q0ZFx1NzUwNVx1NzRmMlx1ODk5NFx1ODIxYVx1NjcwY1x1ODA2Mlx1ezI3NDg2fVx1ODA1Ylx1NzRmMFx1ODEwM1x1NzcyNFx1ODk4OVx1ezI2N2NjfVx1NzU1M1x1''@;'; put 'put ''ezI2ZWQxfVx1ODdhOVx1ODdjZVx1ODFjOFx1ODc4Y1x1OGE0OVx1OGNhZFx1OGI0M1x1NzcyYlx1NzRmOFx1ODRkYVx1MzYzNVx1NjliMlx1OGRhNiJdLFsiYTBkNCIsIlx1ODlhOVx1NzQ2OFx1NmRiOVx1ODdjMVx1ezI0MDExfVx1NzRlN1x1M2RkYlx1NzE3Nlx1NjBhNFx1NjE5Y1x1M2Nk''@;'; put 'put ''MVx1NzE2Mlx1NjA3NyJdLFsiYTBlMiIsIlx1N2Y3MVx1ezI4YjJkfVx1NzI1MFx1NjBlOVx1NGI3ZVx1NTIyMFx1M2MxOFx1ezIzY2M3fVx1ezI1ZWQ3fVx1ezI3NjU2fVx1ezI1NTMxfVx1ezIxOTQ0fVx1ezIxMmZlfVx1ezI5OTAzfVx1ezI2ZGRjfVx1ezI3MGFkfVx1NWNjMVx1ezI2MWFk''@;'; put 'put ''fVx1ezI4YTBmfVx1ezIzNjc3fVx1ezIwMGVlfVx1ezI2ODQ2fVx1ezI0ZjBlfVx1NDU2Mlx1NWIxZlx1ezI2MzRjfVx1OWY1MFx1OWVhNlx1ezI2MjZifSJdLFsiYTNjMCIsIlx1MjQwMCIsMzEsIlx1MjQyMSJdLFsiYzZhMSIsIlx1MjQ2MCIsOSwiXHUyNDc0Iiw5LCJcdTIxNzAiLDksIlx1''@;'; put 'put ''NGUzNlx1NGUzZlx1NGU4NVx1NGVhMFx1NTE4Mlx1NTE5Nlx1NTFhYlx1NTJmOVx1NTMzOFx1NTM2OVx1NTNiNlx1NTkwYVx1NWI4MFx1NWRkYlx1MmYzM1x1NWU3Zlx1NWVmNFx1NWY1MFx1NWY2MVx1NjUzNFx1NjVlMFx1NzU5Mlx1NzY3Nlx1OGZiNVx1OTZiNlx4YThcdTAyYzZcdTMwZmRc''@;'; put 'put ''dTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdWZmM2JcdWZmM2RcdTI3M2RcdTMwNDEiLDIzXSxbImM3NDAiLCJcdTMwNTkiLDU4LCJcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTQiXSxbImM3YTEiLCJcdTMwYTUiLDgxLCJcdTA0MTAiLDUsIlx1''@;'; put 'put ''MDQwMVx1MDQxNiIsNF0sWyJjODQwIiwiXHUwNDFiIiwyNiwiXHUwNDUxXHUwNDM2IiwyNSwiXHUyMWU3XHUyMWI4XHUyMWI5XHUzMWNmXHV7MjAwY2N9XHU0ZTVhXHV7MjAwOGF9XHU1MjAyXHU0NDkxIl0sWyJjOGExIiwiXHU5ZmIwXHU1MTg4XHU5ZmIxXHV7Mjc2MDd9Il0sWyJjOGNkIiwi''@;'; put 'put ''XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUzMDliXHUzMDljXHUyZTgwXHUyZTg0XHUyZTg2XHUyZTg3XHUyZTg4XHUyZThhXHUyZThjXHUyZThkXHUyZTk1XHUyZTljXHUyZTlkXHUyZWE1XHUyZWE3XHUyZWFhXHUyZWFjXHUyZWFlXHUyZWI2XHUyZWJjXHUy''@;'; put 'put ''ZWJlXHUyZWM2XHUyZWNhXHUyZWNjXHUyZWNkXHUyZWNmXHUyZWQ2XHUyZWQ3XHUyZWRlXHUyZWUzIl0sWyJjOGY1IiwiXHUwMjgzXHUwMjUwXHUwMjViXHUwMjU0XHUwMjc1XHUwMTUzXHhmOFx1MDE0Ylx1MDI4YVx1MDI2YSJdLFsiZjlmZSIsIlx1ZmZlZCJdLFsiZmE0MCIsIlx1ezIwNTQ3''@;'; put 'put ''fVx1OTJkYlx1ezIwNWRmfVx1ezIzZmM1fVx1ODU0Y1x1NDJiNVx1NzNlZlx1NTFiNVx1MzY0OVx1ezI0OTQyfVx1ezI4OWU0fVx1OTM0NFx1ezIxOWRifVx1ODJlZVx1ezIzY2M4fVx1NzgzY1x1Njc0NFx1NjJkZlx1ezI0OTMzfVx1ezI4OWFhfVx1ezIwMmEwfVx1ezI2YmIzfVx1ezIxMzA1''@;'; put 'put ''fVx1NGZhYlx1ezIyNGVkfVx1NTAwOFx1ezI2ZDI5fVx1ezI3YTg0fVx1ezIzNjAwfVx1ezI0YWIxfVx1ezIyNTEzfVx1NTAyOVx1ezIwMzdlfVx1NWZhNFx1ezIwMzgwfVx1ezIwMzQ3fVx1NmVkYlx1ezIwNDFmfVx1NTA3ZFx1NTEwMVx1MzQ3YVx1NTEwZVx1OTg2Y1x1Mzc0M1x1ODQxNlx1''@;'; put 'put ''ezI0OWE0fVx1ezIwNDg3fVx1NTE2MFx1ezIzM2I0fVx1NTE2YVx1ezIwYmZmfVx1ezIyMGZjfVx1ezIwMmU1fVx1ezIyNTMwfVx1ezIwNThlfVx1ezIzMjMzfVx1ezIxOTgzfVx1NWI4Mlx1ODc3ZFx1ezIwNWIzfVx1ezIzYzk5fVx1NTFiMlx1NTFiOCJdLFsiZmFhMSIsIlx1OWQzNFx1NTFj''@;'; put 'put ''OVx1NTFjZlx1NTFkMVx1M2NkY1x1NTFkM1x1ezI0YWE2fVx1NTFiM1x1NTFlMlx1NTM0Mlx1NTFlZFx1ODNjZFx1NjkzZVx1ezIzNzJkfVx1NWY3Ylx1NTIwYlx1NTIyNlx1NTIzY1x1NTJiNVx1NTI1N1x1NTI5NFx1NTJiOVx1NTJjNVx1N2MxNVx1ODU0Mlx1NTJlMFx1ODYwZFx1ezI2YjEz''@;'; put 'put ''fVx1NTMwNVx1ezI4YWRlfVx1NTU0OVx1NmVkOVx1ezIzZjgwfVx1ezIwOTU0fVx1ezIzZmVjfVx1NTMzM1x1NTM0NFx1ezIwYmUyfVx1NmNjYlx1ezIxNzI2fVx1NjgxYlx1NzNkNVx1NjA0YVx1M2VhYVx1MzhjY1x1ezIxNmU4fVx1NzFkZFx1NDRhMlx1NTM2ZFx1NTM3NFx1ezI4NmFifVx1''@;'; put 'put ''NTM3ZVx1NTM3Zlx1ezIxNTk2fVx1ezIxNjEzfVx1NzdlNlx1NTM5M1x1ezI4YTlifVx1NTNhMFx1NTNhYlx1NTNhZVx1NzNhN1x1ezI1NzcyfVx1M2Y1OVx1NzM5Y1x1NTNjMVx1NTNjNVx1NmM0OVx1NGU0OVx1NTdmZVx1NTNkOVx1M2FhYlx1ezIwYjhmfVx1NTNlMFx1ezIzZmVifVx1ezIy''@;'; put 'put ''ZGEzfVx1NTNmNlx1ezIwYzc3fVx1NTQxM1x1NzA3OVx1NTUyYlx1NjY1N1x1NmQ1Ylx1NTQ2ZFx1ezI2YjUzfVx1ezIwZDc0fVx1NTU1ZFx1NTQ4Zlx1NTRhNFx1NDdhNlx1ezIxNzBkfVx1ezIwZWRkfVx1M2RiNFx1ezIwZDRkfSJdLFsiZmI0MCIsIlx1ezI4OWJjfVx1ezIyNjk4fVx1NTU0''@;'; put 'put ''N1x1NGNlZFx1NTQyZlx1NzQxN1x1NTU4Nlx1NTVhOVx1NTYwNVx1ezIxOGQ3fVx1ezI0MDNhfVx1NDU1Mlx1ezI0NDM1fVx1NjZiM1x1ezIxMGI0fVx1NTYzN1x1NjZjZFx1ezIzMjhhfVx1NjZhNFx1NjZhZFx1NTY0ZFx1NTY0Zlx1NzhmMVx1NTZmMVx1OTc4N1x1NTNmZVx1NTcwMFx1NTZl''@;'; put 'put ''Zlx1NTZlZFx1ezI4YjY2fVx1MzYyM1x1ezIxMjRmfVx1NTc0Nlx1ezI0MWE1fVx1NmM2ZVx1NzA4Ylx1NTc0Mlx1MzZiMVx1ezI2YzdlfVx1NTdlNlx1ezIxNDE2fVx1NTgwM1x1ezIxNDU0fVx1ezI0MzYzfVx1NTgyNlx1ezI0YmY1fVx1NTg1Y1x1NThhYVx1MzU2MVx1NThlMFx1NThkY1x1''@;'; put 'put ''ezIxMjNjfVx1NThmYlx1NWJmZlx1NTc0M1x1ezJhMTUwfVx1ezI0Mjc4fVx1OTNkM1x1MzVhMVx1NTkxZlx1NjhhNlx1MzZjM1x1NmU1OSJdLFsiZmJhMSIsIlx1ezIxNjNlfVx1NWEyNFx1NTU1M1x1ezIxNjkyfVx1ODUwNVx1NTljOVx1ezIwZDRlfVx1ezI2YzgxfVx1ezI2ZDJhfVx1ezIx''@;'; put 'put ''N2RjfVx1NTlkOVx1ezIxN2ZifVx1ezIxN2IyfVx1ezI2ZGE2fVx1NmQ3MVx1ezIxODI4fVx1ezIxNmQ1fVx1NTlmOVx1ezI2ZTQ1fVx1NWFhYlx1NWE2M1x1MzZlNlx1ezI0OWE5fVx1NWE3N1x1MzcwOFx1NWE5Nlx1NzQ2NVx1NWFkM1x1ezI2ZmExfVx1ezIyNTU0fVx1M2Q4NVx1ezIxOTEx''@;'; put 'put ''fVx1MzczMlx1ezIxNmI4fVx1NWU4M1x1NTJkMFx1NWI3Nlx1NjU4OFx1NWI3Y1x1ezI3YTBlfVx1NDAwNFx1NDg1ZFx1ezIwMjA0fVx1NWJkNVx1NjE2MFx1ezIxYTM0fVx1ezI1OWNjfVx1ezIwNWE1fVx1NWJmM1x1NWI5ZFx1NGQxMFx1NWMwNVx1ezIxYjQ0fVx1NWMxM1x1NzNjZVx1NWMx''@;'; put 'put ''NFx1ezIxY2E1fVx1ezI2YjI4fVx1NWM0OVx1NDhkZFx1NWM4NVx1NWNlOVx1NWNlZlx1NWQ4Ylx1ezIxZGY5fVx1ezIxZTM3fVx1NWQxMFx1NWQxOFx1NWQ0Nlx1ezIxZWE0fVx1NWNiYVx1NWRkN1x1ODJmY1x1MzgyZFx1ezI0OTAxfVx1ezIyMDQ5fVx1ezIyMTczfVx1ODI4N1x1MzgzNlx1''@;'; put 'put ''M2JjMlx1NWUyZVx1NmE4YVx1NWU3NVx1NWU3YVx1ezI0NGJjfVx1ezIwY2QzfVx1NTNhNlx1NGViN1x1NWVkMFx1NTNhOFx1ezIxNzcxfVx1NWUwOVx1NWVmNFx1ezI4NDgyfSJdLFsiZmM0MCIsIlx1NWVmOVx1NWVmYlx1MzhhMFx1NWVmY1x1NjgzZVx1OTQxYlx1NWYwZFx1ezIwMWMxfVx1''@;'; put 'put ''ezJmODk0fVx1M2FkZVx1NDhhZVx1ezIxMzNhfVx1NWYzYVx1ezI2ODg4fVx1ezIyM2QwfVx1NWY1OFx1ezIyNDcxfVx1NWY2M1x1OTdiZFx1ezI2ZTZlfVx1NWY3Mlx1OTM0MFx1ezI4YTM2fVx1NWZhN1x1NWRiNlx1M2Q1Zlx1ezI1MjUwfVx1ezIxZjZhfVx1ezI3MGY4fVx1ezIyNjY4fVx1''@;'; put 'put ''OTFkNlx1ezIwMjllfVx1ezI4YTI5fVx1NjAzMVx1NjY4NVx1ezIxODc3fVx1Mzk2M1x1M2RjN1x1MzYzOVx1NTc5MFx1ezIyN2I0fVx1Nzk3MVx1M2U0MFx1NjA5ZVx1NjBhNFx1NjBiM1x1ezI0OTgyfVx1ezI0OThmfVx1ezI3YTUzfVx1NzRhNFx1NTBlMVx1NWFhMFx1NjE2NFx1ODQyNFx1''@;'; put 'put ''NjE0Mlx1ezJmOGE2fVx1ezI2ZWQyfVx1NjE4MVx1NTFmNFx1ezIwNjU2fVx1NjE4N1x1NWJhYVx1ezIzZmI3fSJdLFsiZmNhMSIsIlx1ezIyODVmfVx1NjFkM1x1ezI4YjlkfVx1ezI5OTVkfVx1NjFkMFx1MzkzMlx1ezIyOTgwfVx1ezIyOGMxfVx1NjAyM1x1NjE1Y1x1NjUxZVx1NjM4Ylx1''@;'; put 'put ''ezIwMTE4fVx1NjJjNVx1ezIxNzcwfVx1NjJkNVx1ezIyZTBkfVx1NjM2Y1x1ezI0OWRmfVx1M2ExN1x1NjQzOFx1NjNmOFx1ezIxMzhlfVx1ezIxN2ZjfVx1NjQ5MFx1NmY4YVx1ezIyZTM2fVx1OTgxNFx1ezI0MDhjfVx1ezI1NzFkfVx1NjRlMVx1NjRlNVx1OTQ3Ylx1M2E2Nlx1NjQzYVx1''@;'; put 'put ''M2E1N1x1NjU0ZFx1NmYxNlx1ezI0YTI4fVx1ezI0YTIzfVx1NjU4NVx1NjU2ZFx1NjU1Zlx1ezIzMDdlfVx1NjViNVx1ezI0OTQwfVx1NGIzN1x1NjVkMVx1NDBkOFx1ezIxODI5fVx1NjVlMFx1NjVlM1x1NWZkZlx1ezIzNDAwfVx1NjYxOFx1ezIzMWY3fVx1ezIzMWY4fVx1NjY0NFx1ezIz''@;'; put 'put ''MWE0fVx1ezIzMWE1fVx1NjY0Ylx1ezIwZTc1fVx1NjY2N1x1ezI1MWU2fVx1NjY3M1x1NjY3NFx1ezIxZTNkfVx1ezIzMjMxfVx1ezI4NWY0fVx1ezIzMWM4fVx1ezI1MzEzfVx1NzdjNVx1ezIyOGY3fVx1OTlhNFx1NjcwMlx1ezI0MzljfVx1ezI0YTIxfVx1M2IyYlx1NjlmYVx1ezIzN2My''@;'; put 'put ''fVx1Njc1ZVx1Njc2N1x1Njc2Mlx1ezI0MWNkfVx1ezI5MGVkfVx1NjdkN1x1NDRlOVx1NjgyMlx1NmU1MFx1OTIzY1x1NjgwMVx1ezIzM2U2fVx1ezI2ZGEwfVx1Njg1ZCJdLFsiZmQ0MCIsIlx1ezIzNDZmfVx1NjllMVx1NmEwYlx1ezI4YWRmfVx1Njk3M1x1NjhjM1x1ezIzNWNkfVx1Njkw''@;'; put 'put ''MVx1NjkwMFx1M2QzMlx1M2EwMVx1ezIzNjNjfVx1M2I4MFx1NjdhY1x1Njk2MVx1ezI4YTRhfVx1NDJmY1x1NjkzNlx1Njk5OFx1M2JhMVx1ezIwM2M5fVx1ODM2M1x1NTA5MFx1NjlmOVx1ezIzNjU5fVx1ezIyMTJhfVx1NmE0NVx1ezIzNzAzfVx1NmE5ZFx1M2JmM1x1NjdiMVx1NmFjOFx1''@;'; put 'put ''ezI5MTljfVx1M2MwZFx1NmIxZFx1ezIwOTIzfVx1NjBkZVx1NmIzNVx1NmI3NFx1ezIyN2NkfVx1NmViNVx1ezIzYWRifVx1ezIwM2I1fVx1ezIxOTU4fVx1Mzc0MFx1NTQyMVx1ezIzYjVhfVx1NmJlMVx1ezIzZWZjfVx1NmJkY1x1NmMzN1x1ezIyNDhifVx1ezI0OGYxfVx1ezI2YjUxfVx1''@;'; put 'put ''NmM1YVx1ODIyNlx1NmM3OVx1ezIzZGJjfVx1NDRjNVx1ezIzZGJkfVx1ezI0MWE0fVx1ezI0OTBjfVx1ezI0OTAwfSJdLFsiZmRhMSIsIlx1ezIzY2M5fVx1MzZlNVx1M2NlYlx1ezIwZDMyfVx1OWI4M1x1ezIzMWY5fVx1ezIyNDkxfVx1N2Y4Zlx1NjgzN1x1ezI2ZDI1fVx1ezI2ZGExfVx1''@;'; put 'put ''ezI2ZGVifVx1NmQ5Nlx1NmQ1Y1x1NmU3Y1x1NmYwNFx1ezI0OTdmfVx1ezI0MDg1fVx1ezI2ZTcyfVx1ODUzM1x1ezI2Zjc0fVx1NTFjN1x1NmM5Y1x1NmUxZFx1ODQyZVx1ezI4YjIxfVx1NmUyZlx1ezIzZTJmfVx1NzQ1M1x1ezIzZjgyfVx1NzljY1x1NmU0Zlx1NWE5MVx1ezIzMDRifVx1''@;'; put 'put ''NmZmOFx1MzcwZFx1NmY5ZFx1ezIzZTMwfVx1NmVmYVx1ezIxNDk3fVx1ezI0MDNkfVx1NDU1NVx1OTNmMFx1NmY0NFx1NmY1Y1x1M2Q0ZVx1NmY3NFx1ezI5MTcwfVx1M2QzYlx1NmY5Zlx1ezI0MTQ0fVx1NmZkM1x1ezI0MDkxfVx1ezI0MTU1fVx1ezI0MDM5fVx1ezIzZmYwfVx1ezIzZmI0''@;'; put 'put ''fVx1ezI0MTNmfVx1NTFkZlx1ezI0MTU2fVx1ezI0MTU3fVx1ezI0MTQwfVx1ezI2MWRkfVx1NzA0Ylx1NzA3ZVx1NzBhN1x1NzA4MVx1NzBjY1x1NzBkNVx1NzBkNlx1NzBkZlx1NDEwNFx1M2RlOFx1NzFiNFx1NzE5Nlx1ezI0Mjc3fVx1NzEyYlx1NzE0NVx1NWE4OFx1NzE0YVx1NzE2ZVx1''@;'; put 'put ''NWM5Y1x1ezI0MzY1fVx1NzE0Zlx1OTM2Mlx1ezI0MmMxfVx1NzEyY1x1ezI0NDVhfVx1ezI0YTI3fVx1ezI0YTIyfVx1NzFiYVx1ezI4YmU4fVx1NzBiZFx1NzIwZSJdLFsiZmU0MCIsIlx1OTQ0Mlx1NzIxNVx1NTkxMVx1OTQ0M1x1NzIyNFx1OTM0MVx1ezI1NjA1fVx1NzIyZVx1NzI0MFx1''@;'; put 'put ''ezI0OTc0fVx1NjhiZFx1NzI1NVx1NzI1N1x1M2U1NVx1ezIzMDQ0fVx1NjgwZFx1NmYzZFx1NzI4Mlx1NzMyYVx1NzMyYlx1ezI0ODIzfVx1ezI4ODJifVx1NDhlZFx1ezI4ODA0fVx1NzMyOFx1NzMyZVx1NzNjZlx1NzNhYVx1ezIwYzNhfVx1ezI2YTJlfVx1NzNjOVx1NzQ0OVx1ezI0MWUy''@;'; put 'put ''fVx1ezIxNmU3fVx1ezI0YTI0fVx1NjYyM1x1MzZjNVx1ezI0OWI3fVx1ezI0OThkfVx1ezI0OWZifVx1NzNmN1x1NzQxNVx1NjkwM1x1ezI0YTI2fVx1NzQzOVx1ezIwNWMzfVx1M2VkN1x1NzQ1Y1x1ezIyOGFkfVx1NzQ2MFx1ezI4ZWIyfVx1NzQ0N1x1NzNlNFx1NzQ3Nlx1ODNiOVx1NzQ2''@;'; put 'put ''Y1x1MzczMFx1NzQ3NFx1OTNmMVx1NmEyY1x1NzQ4Mlx1NDk1M1x1ezI0YThjfSJdLFsiZmVhMSIsIlx1ezI0MTVmfVx1ezI0YTc5fVx1ezI4YjhmfVx1NWI0Nlx1ezI4YzAzfVx1ezIxODllfVx1NzRjOFx1ezIxOTg4fVx1NzUwZVx1NzRlOVx1NzUxZVx1ezI4ZWQ5fVx1ezIxYTRifVx1NWJk''@;'; put 'put ''N1x1ezI4ZWFjfVx1OTM4NVx1NzU0ZFx1NzU0YVx1NzU2N1x1NzU2ZVx1ezI0ZjgyfVx1M2YwNFx1ezI0ZDEzfVx1NzU4ZVx1NzQ1ZFx1NzU5ZVx1NzViNFx1NzYwMlx1NzYyY1x1NzY1MVx1NzY0Zlx1NzY2Zlx1NzY3Nlx1ezI2M2Y1fVx1NzY5MFx1ODFlZlx1MzdmOFx1ezI2OTExfVx1ezI2''@;'; put 'put ''OTBlfVx1NzZhMVx1NzZhNVx1NzZiN1x1NzZjY1x1ezI2ZjlmfVx1ODQ2Mlx1ezI1MDlkfVx1ezI1MTdkfVx1ezIxZTFjfVx1NzcxZVx1NzcyNlx1Nzc0MFx1NjRhZlx1ezI1MjIwfVx1Nzc1OFx1ezIzMmFjfVx1NzdhZlx1ezI4OTY0fVx1ezI4OTY4fVx1ezIxNmMxfVx1NzdmNFx1NzgwOVx1''@;'; put 'put ''ezIxMzc2fVx1ezI0YTEyfVx1NjhjYVx1NzhhZlx1NzhjN1x1NzhkM1x1OTZhNVx1NzkyZVx1ezI1NWUwfVx1NzhkN1x1NzkzNFx1NzhiMVx1ezI3NjBjfVx1OGZiOFx1ODg4NFx1ezI4YjJifVx1ezI2MDgzfVx1ezIyNjFjfVx1Nzk4Nlx1ODkwMFx1NjkwMlx1Nzk4MFx1ezI1ODU3fVx1Nzk5''@;'; put 'put ''ZFx1ezI3YjM5fVx1NzkzY1x1NzlhOVx1NmUyYVx1ezI3MTI2fVx1M2VhOFx1NzljNlx1ezI5MTBkfVx1NzlkNCJdXScpfSw3NDQ4ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjcsIlx1MjBhYyJdLFsiODE0MCIsIlx1NGUwMlx1''@;'; put 'put ''NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1''@;'; put 'put ''N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YSIsNSwiXHU0ZTcyXHU0ZTc0Iiw5LCJcdTRlN2YiLDYsIlx1NGU4N1x1NGU4YSJdLFsiODE4MCIsIlx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVh''@;'; put 'put ''YVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1''@;'; put 'put ''NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMiIsNiwiXHU0ZjBiXHU0ZjBjXHU0ZjEyIiw0LCJcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlc''@;'; put 'put ''dTRmM2JcdTRmM2UiLDQsIlx1NGY0NFx1NGY0NVx1NGY0NyIsNSwiXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0ZjY4XHU0ZjZhXHU0ZjZiXHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0ZjcyXHU0Zjc1XHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0Zjgx''@;'; put 'put ''XHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4XHU0Zjk5XHU0ZjlhXHU0ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0ZmEyIl0sWyI4MjQwIiwiXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwIiw0LCJcdTRm''@;'; put 'put ''YjYiLDgsIlx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMiIsNCwiXHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0''@;'; put 'put ''ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmIiwxMV0sWyI4MjgwIiwiXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmIiwxMCwiXHU1''@;'; put 'put ''MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwIiw0LCJcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWQiLDcsIlx1NTA2NiIsNSwiXHU1MDZkIiw4LCJcdTUwNzhcdTUwNzlcdTUw''@;'; put 'put ''N2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGUiLDIwLCJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWQiLDQsIlx1NTBiMyIsNiwiXHU1MGJjIl0sWyI4MzQwIiwiXHU1MGJkIiwxNywiXHU1''@;'; put 'put ''MGQwIiw1LCJcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGIiLDEwLCJcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjYiLDQsIlx1NTBmYyIsOSwiXHU1MTA4Il0sWyI4MzgwIiwiXHU1MTA5XHU1MTBhXHU1MTBjIiw1LCJcdTUxMTMiLDEz''@;'; put 'put ''LCJcdTUxMjIiLDI4LCJcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWQiLDQsIlx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1''@;'; put 'put ''NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNiIsNCwiXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJh''@;'; put 'put ''XHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyIiw1XSxbIjg0NDAiLCJcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTUiLDUsIlx1NTFlY1x1NTFlZVx1NTFmMVx1''@;'; put 'put ''NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIz''@;'; put 'put ''Mlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NCIsNSwiXHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4Il0sWyI4NDgwIiwiXHU1MjU5XHU1MjVhXHU1MjViXHU1MjVkXHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1''@;'; put 'put ''MjZiXHU1MjZjXHU1MjZkXHU1MjZlXHU1MjcwXHU1MjcxXHU1MjczIiw5LCJcdTUyN2VcdTUyODBcdTUyODMiLDQsIlx1NTI4OSIsNiwiXHU1MjkxXHU1MjkyXHU1Mjk0Iiw2LCJcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjQiLDksIlx1NTJj''@;'; put 'put ''MFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOSIsNSwiXHU1MmUwXHU1MmUxXHU1MmUyXHU1MmUzXHU1MmU1IiwxMCwiXHU1MmYxIiw3LCJcdTUyZmJcdTUy''@;'; put 'put ''ZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGUiXSxbIjg1NDAiLCJcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhc''@;'; put 'put ''dTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmYiLDksIlx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3''@;'; put 'put ''Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4ZiJdLFsiODU4MCIsIlx1NTM5MCIsNCwiXHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1''@;'; put 'put ''M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmIiw2LCJcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzMiLDQsIlx1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1''@;'; put 'put ''NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0''@;'; put 'put ''Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZCIsNCwiXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5Iiw3LCJcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0''@;'; put 'put ''ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTEiXSxbIjg2NDAiLCJcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVc''@;'; put 'put ''dTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTAiLDQsIlx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNCIsNSwiXHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhIiw0LCJcdTU1MTJcdTU1MTNcdTU1MTUiLDUsIlx1''@;'; put 'put ''NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNiJdLFsiODY4MCIsIlx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0''@;'; put 'put ''YiIsNCwiXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3Iiw0LCJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmYiLDUsIlx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5''@;'; put 'put ''MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMCIsNiwiXHU1NWE4Iiw4LCJcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmYiLDQsIlx1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVk''@;'; put 'put ''MFx1NTVkNVx1NTVkNyIsNCwiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4Iiw0LCJcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDUiXSxbIjg3NDAiLCJcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2''@;'; put 'put ''MGRcdTU2MTAiLDcsIlx1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MCIs''@;'; put 'put ''MTEsIlx1NTY0ZiIsNCwiXHU1NjU1XHU1NjU2XHU1NjVhXHU1NjViXHU1NjVkIiw0XSxbIjg3ODAiLCJcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2QiLDcs''@;'; put 'put ''Ilx1NTY4NyIsNiwiXHU1NjkwXHU1NjkxXHU1NjkyXHU1Njk0IiwxNCwiXHU1NmE0IiwxMCwiXHU1NmIwIiw2LCJcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmQiLDEyLCJcdTU2Y2IiLDgsIlx1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNSIsNSwiXHU1NmVj''@;'; put 'put ''XHU1NmVlXHU1NmVmXHU1NmYyXHU1NmYzXHU1NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiIiw2XSxbIjg4NDAiLCJcdTU3MTIiLDksIlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1''@;'; put 'put ''NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTczNCIsNCwiXHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyIiw0LCJcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBc''@;'; put 'put ''dTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODAiXSxbIjg4ODAiLCJcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGQiLDQsIlx1NTc5NCIsNiwiXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4''@;'; put 'put ''XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5Iiw4LCJcdTU3YzQiLDYsIlx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNSIsNywi''@;'; put 'put ''XHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1''@;'; put 'put ''ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1Iiw0LCJcdTU4MmIiLDQsIlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNiIsN10sWyI4OTQwIiwiXHU1ODNlIiw1LCJcdTU4NDUiLDYsIlx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1''@;'; put 'put ''NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OSIsNCwiXHU1ODVmIiw1LCJcdTU4NjYiLDQsIlx1NTg2ZCIsMTYsIlx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4YyJdLFsiODk4MCIsIlx1NTg4ZCIsNCwiXHU1ODk0Iiw0LCJcdTU4OWJcdTU4''@;'; put 'put ''OWNcdTU4OWRcdTU4YTAiLDcsIlx1NThhYSIsMTcsIlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNiIsMTAsIlx1NThkMlx1NThkM1x1NThkNFx1NThkNiIsMTMsIlx1NThlNSIsNSwiXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1''@;'; put 'put ''OGY3XHU1OGY4XHU1OGZhIiw3LCJcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDgiLDQsIlx1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1''@;'; put 'put ''NTkzM1x1NTkzNVx1NTkzNlx1NTkzYiJdLFsiOGE0MCIsIlx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1YiIsNCwiXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2IiwxMiwiXHU1OTc1''@;'; put 'put ''XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1OTdlXHU1OTdmXHU1OTgwXHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1OTliXHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2Il0s''@;'; put 'put ''WyI4YTgwIiwiXHU1OWE3XHU1OWFjXHU1OWFkXHU1OWIwXHU1OWIxXHU1OWIzIiw1LCJcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmYiLDYsIlx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZSIsNCwiXHU1OWU0XHU1''@;'; put 'put ''OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWViXHU1OWVkIiwxMSwiXHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1YTBhXHU1YTBiXHU1YTBkXHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEyXHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1YTFiXHU1YTFk''@;'; put 'put ''XHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1YTI2XHU1YTI3XHU1YTI4XHU1YTJhIiw2LCJcdTVhMzNcdTVhMzVcdTVhMzciLDQsIlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MSIsNCwiXHU1YTQ3XHU1YTQ4XHU1YTRiIiw5LCJcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWIiLDVdLFsi''@;'; put 'put ''OGI0MCIsIlx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2YiIsOCwiXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwIiwxNywiXHU1YTkzIiw2LCJcdTVhOWMiLDEzLCJcdTVhYWJcdTVhYWMiXSxbIjhiODAiLCJcdTVhYWQiLDQs''@;'; put 'put ''Ilx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOSIsNCwiXHU1YWJmXHU1YWMwXHU1YWMzIiw1LCJcdTVhY2FcdTVhY2JcdTVhY2QiLDQsIlx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFl''@;'; put 'put ''YVx1NWFlYyIsNCwiXHU1YWYyIiwyMiwiXHU1YjBhIiwxMSwiXHU1YjE4IiwyNSwiXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4Iiw3LCJcdTViNDEiLDZdLFsiOGM0MCIsIlx1NWI0OCIsNywiXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1''@;'; put 'put ''YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFk''@;'; put 'put ''XHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmIl0sWyI4YzgwIiwiXHU1YmQxXHU1YmQ0Iiw4LCJcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTVi''@;'; put 'put ''ZTdcdTViZTkiLDQsIlx1NWJlZlx1NWJmMSIsNiwiXHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1''@;'; put 'put ''YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVh''@;'; put 'put ''XHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3Iiw2LCJcdTVjNzBcdTVjNzIiLDYsIlx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4MyIsNCwiXHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkIiw0LCJc''@;'; put 'put ''dTVjYTQiLDRdLFsiOGQ0MCIsIlx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNSIsNSwiXHU1Y2NjIiw1LCJcdTVjZDMiLDUsIlx1NWNkYSIsNiwiXHU1Y2UyXHU1Y2Uz''@;'; put 'put ''XHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1Y2VlXHU1Y2VmXHU1Y2YxIiw5LCJcdTVjZmMiLDRdLFsiOGQ4MCIsIlx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOCIsNSwiXHU1ZDBmIiw0LCJcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWYiLDQsIlx1NWQy''@;'; put 'put ''NVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZiIsNCwiXHU1ZDM1Iiw3LCJcdTVkM2YiLDcsIlx1NWQ0OFx1NWQ0OVx1NWQ0ZCIsMTAsIlx1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZSIsMTAsIlx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NSIsMTIs''@;'; put 'put ''Ilx1NWQ4MyIsMjEsIlx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMCJdLFsiOGU0MCIsIlx1NWRhMSIsMjEsIlx1NWRiOCIsMTIsIlx1NWRjNiIsNiwiXHU1ZGNlIiwxMiwiXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkIl0sWyI4ZTgw''@;'; put 'put ''IiwiXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4Iiw0LCJcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWUiLDcsIlx1NWUyOCIsNCwiXHU1ZTJmXHU1ZTMwXHU1ZTMyIiw0LCJcdTVlMzlcdTVlM2FcdTVl''@;'; put 'put ''M2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDYiLDUsIlx1NWU0ZCIsNiwiXHU1ZTU2Iiw0LCJcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjMiLDE0LCJcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVl''@;'; put 'put ''OGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYTgiLDQsIlx1NWVhZSIsNCwiXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmIiw2XSxbIjhmNDAiLCJcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2IiLDUsIlx1NWVkNFx1''@;'; put 'put ''NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkYyIsMTEsIlx1NWVlOVx1NWVlYiIsOCwiXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5''@;'; put 'put ''XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0Il0sWyI4ZjgwIiwiXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyIiw2LCJcdTVmM2JcdTVmM2RcdTVmM2VcdTVmM2ZcdTVmNDEiLDE0LCJcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVm''@;'; put 'put ''NWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNc''@;'; put 'put ''dTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVmYTIiLDUsIlx1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZiIsNSwiXHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlIiw0LCJcdTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNc''@;'; put 'put ''dTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYwMDciXSxbIjkwNDAiLCJcdTYw''@;'; put 'put ''MDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzAiLDQsIlx1NjAzNiIsNCwiXHU2MDNkXHU2MDNlXHU2MDQwXHU2MDQ0Iiw2LCJcdTYwNGNcdTYw''@;'; put 'put ''NGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODAiXSxbIjkwODAiLCJcdTYwODFcdTYwODJc''@;'; put 'put ''dTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYw''@;'; put 'put ''YjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmQiLDcsIlx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjYyIsNCwiXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2MGUxIiw0LCJcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYw''@;'; put 'put ''ZmIiLDQsIlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE4XHU2MTE5XHU2MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2MTIxXHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjIiwxOCwiXHU2''@;'; put 'put ''MTQwIiw2XSxbIjkxNDAiLCJcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTYiLDYsIlx1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OSIsNiwiXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0''@;'; put 'put ''XHU2MTc2XHU2MTc4IiwxOCwiXHU2MThjXHU2MThkXHU2MThmIiw0LCJcdTYxOTUiXSxbIjkxODAiLCJcdTYxOTYiLDYsIlx1NjE5ZSIsOCwiXHU2MWFhXHU2MWFiXHU2MWFkIiw5LCJcdTYxYjgiLDUsIlx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjMyIsNCwiXHU2MWM5XHU2MWNjIiw0LCJcdTYx''@;'; put 'put ''ZDNcdTYxZDUiLDE2LCJcdTYxZTciLDEzLCJcdTYxZjYiLDgsIlx1NjIwMCIsNSwiXHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2''@;'; put 'put ''MjMyXHU2MjM1XHU2MjM2XHU2MjM4Iiw0LCJcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGEiXSxbIjkyNDAiLCJcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWMiLDYsIlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1''@;'; put 'put ''NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4YiIsNSwiXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIw''@;'; put 'put ''XHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxIl0sWyI5MjgwIiwiXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2''@;'; put 'put ''MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJk''@;'; put 'put ''XHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzIiw1LCJcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNTYiLDcsIlx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2''@;'; put 'put ''Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OSIsNiwiXHU2''@;'; put 'put ''M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwIl0sWyI5MzQwIiwiXHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2M2QzXHU2M2Q0''@;'; put 'put ''XHU2M2Q1XHU2M2Q3Iiw2LCJcdTYzZGZcdTYzZTJcdTYzZTQiLDQsIlx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNiIsNCwiXHU2NDBkXHU2NDBlXHU2NDEx''@;'; put 'put ''XHU2NDEyXHU2NDE1Iiw1LCJcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjQiXSxbIjkzODAiLCJcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmUiLDUsIlx1NjQzNSIsNCwiXHU2NDNiXHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiIiw2LCJc''@;'; put 'put ''dTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTkiLDQsIlx1NjQ1ZiIsNywiXHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlIiw5LCJcdTY0N2IiLDYsIlx1NjQ4M1x1NjQ4Nlx1NjQ4OCIsOCwiXHU2NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlhXHU2NDliXHU2NDljXHU2NDlkXHU2''@;'; put 'put ''NDlmIiw0LCJcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzYiLDYsIlx1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1''@;'; put 'put ''NjRkNVx1NjRkNlx1NjRkOVx1NjRkYSJdLFsiOTQ0MCIsIlx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlNyIsMjQsIlx1NjUwMSIsNywiXHU2NTBhIiw3LCJcdTY1MTMiLDQsIlx1NjUxOSIsOF0sWyI5NDgwIiwiXHU2NTIyXHU2NTIzXHU2NTI0''@;'; put 'put ''XHU2NTI2Iiw0LCJcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDAiLDQsIlx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1''@;'; put 'put ''Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OCIsMTQsIlx1NjU4OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1''@;'; put 'put ''NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMSIsNywiXHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQx''@;'; put 'put ''XHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4Iiw3LCJcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWIiXSxbIjk1NDAiLCJcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmIiLDQsIlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYw''@;'; put 'put ''ZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzNyIsNCwiXHU2NjNkXHU2NjNmXHU2''@;'; put 'put ''NjQwXHU2NjQyXHU2NjQ0Iiw2LCJcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NTgiXSxbIjk1ODAiLCJcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjkiLDQsIlx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1''@;'; put 'put ''NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OCIsNCwiXHU2NjllIiw4LCJcdTY2YTkiLDQsIlx1''@;'; put 'put ''NjZhZiIsNCwiXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmIiwyNSwiXHU2NmRhXHU2NmRlIiw3LCJcdTY2ZTdcdTY2ZThcdTY2ZWEiLDUsIlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1''@;'; put 'put ''NjcwMyJdLFsiOTY0MCIsIlx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMCIsNSwiXHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2''@;'; put 'put ''XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNiXHU2NzNjXHU2NzNlXHU2NzNmXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2NzU0XHU2NzU1XHU2NzU3Iiw0LCJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3''@;'; put 'put ''NmVcdTY3NzFcdTY3NzRcdTY3NzYiXSxbIjk2ODAiLCJcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlc''@;'; put 'put ''dTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjkiLDcsIlx1NjdjMlx1NjdjNSIsOSwiXHU2N2Q1XHU2N2Q2XHU2N2Q3XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4''@;'; put 'put ''XHU2N2VhXHU2N2ViXHU2N2VkXHU2N2VlXHU2N2YyXHU2N2Y1Iiw3LCJcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MTgiLDQsIlx1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMiIsNiwiXHU2ODJiIiw2LCJcdTY4MzRc''@;'; put 'put ''dTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTYiLDVdLFsiOTc0MCIsIlx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2YyIsNywiXHU2ODc1XHU2ODc4Iiw4LCJcdTY4ODJcdTY4ODRcdTY4ODciLDcsIlx1Njg5''@;'; put 'put ''MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OCIsOSwiXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4Il0sWyI5NzgwIiwiXHU2OGI5Iiw2LCJcdTY4YzFcdTY4YzMiLDUs''@;'; put 'put ''Ilx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYiIsNCwiXHU2OGUxXHU2OGUyXHU2OGU0Iiw5LCJcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4''@;'; put 'put ''ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDYiLDQsIlx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxMyIsMTEsIlx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNSIsNywiXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2''@;'; put 'put ''OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQzIiwxNiwiXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmIl0sWyI5ODQwIiwiXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcy''@;'; put 'put ''Iiw0LCJcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGUiLDUsIlx1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZCIsOSwiXHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIz''@;'; put 'put ''XHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkIl0sWyI5ODgwIiwiXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyIiw3LCJcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDUiLDUsIlx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMSIsMTEsIlx1Njll''@;'; put 'put ''ZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmMyIsOSwiXHU2OWZlXHU2YTAwIiw5LCJcdTZhMGIiLDExLCJcdTZhMTkiLDUsIlx1NmEyMFx1NmEyMiIsNSwiXHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2Iiw2LCJcdTZhM2YiLDQsIlx1''@;'; put 'put ''NmE0NVx1NmE0Nlx1NmE0OCIsNywiXHU2YTUxIiw2LCJcdTZhNWEiXSxbIjk5NDAiLCJcdTZhNWMiLDQsIlx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2NiIsMTAsIlx1NmE3MiIsNiwiXHU2YTdhXHU2YTdiXHU2YTdkXHU2YTdlXHU2YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1Iiw4LCJcdTZh''@;'; put 'put ''OGZcdTZhOTIiLDQsIlx1NmE5OCIsNywiXHU2YWExIiw1XSxbIjk5ODAiLCJcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWQiLDExNCwiXHU2YjI1XHU2YjI2XHU2YjI4Iiw2XSxbIjlhNDAiLCJcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZi''@;'; put 'put ''M2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGQiLDExLCJcdTZiNWEiLDcsIlx1NmI2OFx1NmI2OVx1NmI2YiIsMTMsIlx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OCJdLFsiOWE4MCIsIlx1''@;'; put 'put ''NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5YyIsNCwiXHU2YmEyIiw3LCJcdTZiYWIiLDcsIlx1NmJiNlx1NmJiOCIsNiwiXHU2YmMwXHU2YmMzXHU2YmM0XHU2YmM2Iiw0LCJcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZi''@;'; put 'put ''ZDhcdTZiZGFcdTZiZGMiLDQsIlx1NmJlMiIsNywiXHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlIiw2LCJcdTZjMDgiLDQsIlx1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMx''@;'; put 'put ''ZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0YiIsNCwiXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4Il0s''@;'; put 'put ''WyI5YjQwIiwiXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiIiw0LCJcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFc''@;'; put 'put ''dTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZj''@;'; put 'put ''Y2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDgiXSxbIjliODAiLCJcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVc''@;'; put 'put ''dTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWYiLDUsIlx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQz''@;'; put 'put ''OFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1''@;'; put 'put ''NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZCIsNCwiXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2Iiw0LCJcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNc''@;'; put 'put ''dTZkYjRcdTZkYjZcdTZkYjdcdTZkYjkiLDUsIlx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYSJdLFsiOWM0MCIsIlx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRl''@;'; put 'put ''M1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZCIsNywiXHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2ZTE5XHU2''@;'; put 'put ''ZTFiXHU2ZTFjXHU2ZTFlXHU2ZTFmXHU2ZTIyXHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMzXHU2ZTM1Il0sWyI5YzgwIiwiXHU2ZTM2XHU2ZTM3XHU2ZTM5XHU2ZTNiIiw3LCJcdTZlNDUiLDcsIlx1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1''@;'; put 'put ''NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MCIsMTAsIlx1NmU2Y1x1NmU2ZFx1NmU2ZiIsMTQsIlx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YSIsNCwiXHU2ZTkxIiw2LCJcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVc''@;'; put 'put ''dTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZl''@;'; put 'put ''Y2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWEiLDVdLFsiOWQ0MCIsIlx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYSIsNywiXHU2ZjAzXHU2ZjA0''@;'; put 'put ''XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhIiw0LCJcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTYiLDksIlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzNyIsNiwiXHU2ZjNmXHU2ZjQwXHU2ZjQx''@;'; put 'put ''XHU2ZjQyIl0sWyI5ZDgwIiwiXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlIiw5LCJcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjciLDUsIlx1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3''@;'; put 'put ''M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZCIsNiwiXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmIiwxMiwiXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyIiw0LCJcdTZmYTgiLDEwLCJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmEiLDUs''@;'; put 'put ''Ilx1NmZjMVx1NmZjMyIsNSwiXHU2ZmNhIiw2LCJcdTZmZDMiLDEwLCJcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTUiXSxbIjllNDAiLCJcdTZmZTYiLDcsIlx1NmZmMCIsMzIsIlx1NzAxMiIsNywiXHU3MDFjIiw2LCJcdTcwMjQiLDZdLFsiOWU4MCIsIlx1NzAyYiIsOSwiXHU3MDM2''@;'; put 'put ''XHU3MDM3XHU3MDM4XHU3MDNhIiwxNywiXHU3MDRkXHU3MDRlXHU3MDUwIiwxMywiXHU3MDVmIiwxMSwiXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3''@;'; put 'put ''MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllIiwxMiwiXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiIiwxMiwi''@;'; put 'put ''XHU3MGRhIl0sWyI5ZjQwIiwiXHU3MGRjXHU3MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwIiw2LCJcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmUiLDEwLCJcdTcxMGIiLDQsIlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzEx''@;'; put 'put ''YiIsMTAsIlx1NzEyNyIsNywiXHU3MTMyXHU3MTMzXHU3MTM0Il0sWyI5ZjgwIiwiXHU3MTM1XHU3MTM3IiwxMywiXHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3MTRiXHU3MTRkXHU3MTRmIiwxMiwiXHU3MTVkXHU3MTVmIiw0LCJcdTcxNjVcdTcxNjkiLDQsIlx1NzE2Zlx1NzE3MFx1NzE3''@;'; put 'put ''MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZSIsNSwiXHU3MTg1Iiw0LCJcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWEiLDQsIlx1NzFhMSIsNiwiXHU3MWE5XHU3MWFh''@;'; put 'put ''XHU3MWFiXHU3MWFkIiw1LCJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmEiLDgsIlx1NzFjNCIsOSwiXHU3MWNmIiw0XSxbImEwNDAiLCJcdTcxZDYiLDksIlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOCIsNSwiXHU3MWVmIiw5LCJcdTcxZmEiLDExLCJcdTcyMDci''@;'; put 'put ''LDE5XSxbImEwODAiLCJcdTcyMWJcdTcyMWNcdTcyMWUiLDksIlx1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MCIsNiwiXHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3''@;'; put 'put ''MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3Mjgz''@;'; put 'put ''XHU3Mjg1Iiw0LCJcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTMiLDExLCJcdTcyYTAiLDExLCJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmEiLDYsIlx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJk''@;'; put 'put ''NFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYiJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw3LCJc''@;'; put 'put ''dTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIy''@;'; put 'put ''MWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZc''@;'; put 'put ''dTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYTEiLCJcdTIxNzAiLDldLFsiYTJiMSIsIlx1MjQ4OCIsMTksIlx1MjQ3NCIsMTksIlx1MjQ2MCIsOV0sWyJhMmU1IiwiXHUzMjIwIiw5XSxbImEyZjEiLCJcdTIxNjAiLDEx''@;'; put 'put ''XSxbImEzYTEiLCJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDUiLDg4LCJcdWZmZTMiXSxbImE0YTEiLCJcdTMwNDEiLDgyXSxbImE1YTEiLCJcdTMwYTEiLDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJh''@;'; put 'put ''NmUwIiwiXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0Il0sWyJhNmVlIiwiXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxIl0sWyJhNmY0IiwiXHVmZTMzXHVmZTM0Il0sWyJhN2ExIiwiXHUwNDEwIiw1''@;'; put 'put ''LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYTg0MCIsIlx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1''@;'; put 'put ''MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MCIsMzUsIlx1MjU4MSIsNl0sWyJhODgwIiwiXHUyNTg4Iiw3LCJcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1ZTVcdTI2MDlcdTIyOTVcdTMwMTJcdTMwMWRcdTMwMWUiXSxbImE4YTEiLCJcdTAx''@;'; put 'put ''MDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdTAyNTEiXSxbImE4YmQiLCJcdTAxNDRcdTAxNDgiXSxbImE4''@;'; put 'put ''YzAiLCJcdTAyNjEiXSxbImE4YzUiLCJcdTMxMDUiLDM2XSxbImE5NDAiLCJcdTMwMjEiLDgsIlx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNCJdLFsiYTk1OSIsIlx1MjEyMVx1''@;'; put 'put ''MzIzMSJdLFsiYTk1YyIsIlx1MjAxMCJdLFsiYTk2MCIsIlx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OSIsOSwiXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5Iiw4XSxbImE5ODAiLCJcdWZlNjIiLDQsIlx1ZmU2OFx1ZmU2OVx1ZmU2''@;'; put 'put ''YVx1ZmU2YiJdLFsiYTk5NiIsIlx1MzAwNyJdLFsiYTlhNCIsIlx1MjUwMCIsNzVdLFsiYWE0MCIsIlx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMiIsNSwiXHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0Iiw1LCJcdTczMGJc''@;'; put 'put ''dTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTcz''@;'; put 'put ''M2RcdTczNDAiLDhdLFsiYWE4MCIsIlx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OCIsNywiXHU3MzYxIiwxMCwiXHU3MzZlXHU3MzcwXHU3MzcxIl0sWyJhYjQwIiwiXHU3MzcyIiwxMSwiXHU3MzdmIiw0LCJc''@;'; put 'put ''dTczODVcdTczODZcdTczODhcdTczOGFcdTczOGNcdTczOGRcdTczOGZcdTczOTBcdTczOTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTczOWFcdTczOWNcdTczOWRcdTczOWVcdTczYTBcdTczYTFcdTczYTMiLDUsIlx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNi''@;'; put 'put ''NFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjMyIsNF0sWyJhYjgwIiwiXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyIiw2LCJcdTczZGFcdTczZGJcdTczZGNcdTczZGRcdTczZGZcdTczZTFcdTczZTJcdTczZTNcdTczZTRcdTczZTZc''@;'; put 'put ''dTczZThcdTczZWFcdTczZWJcdTczZWNcdTczZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjMiLDRdLFsiYWM0MCIsIlx1NzNmOCIsMTAsIlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMSIsOCwiXHU3NDFjIiw1LCJcdTc0MjNcdTc0MjRcdTc0MjdcdTc0''@;'; put 'put ''MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzciLDQsIlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0MiIsMTFdLFsiYWM4MCIsIlx1NzQ0ZSIsNiwiXHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwIiwxMiwiXHU3NDZlXHU3NDZmXHU3NDcxIiw0LCJcdTc0NzhcdTc0Nzlc''@;'; put 'put ''dTc0N2EiXSxbImFkNDAiLCJcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTEiLDEwLCJcdTc0OWRcdTc0OWYiLDcsIlx1NzRhYSIsMTUsIlx1NzRiYiIsMTJdLFsiYWQ4MCIsIlx1''@;'; put 'put ''NzRjOCIsOSwiXHU3NGQzIiw4LCJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTciLDYsIlx1NzRmMFx1NzRmMVx1NzRmMiJdLFsiYWU0MCIsIlx1NzRmM1x1NzRmNVx1NzRmOCIsNiwiXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1Iiw3LCJcdTc1MGVcdTc1MTBcdTc1MTJcdTc1''@;'; put 'put ''MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJcdTc1MWRcdTc1MWVcdTc1MjAiLDQsIlx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1''@;'; put 'put ''NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OCJdLFsiYWU4MCIsIlx1NzU1ZCIsNywiXHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiIiw2LCJcdTc1NzNcdTc1NzVcdTc1NzZcdTc1NzdcdTc1N2EiLDQsIlx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1''@;'; put 'put ''NzU4NyJdLFsiYWY0MCIsIlx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNiIsNCwiXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2''@;'; put 'put ''XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3''@;'; put 'put ''NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3Il0sWyJhZjgwIiwiXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3''@;'; put 'put ''XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0Il0sWyJiMDQwIiwiXHU3NjQ1Iiw2LCJcdTc2NGUiLDUsIlx1NzY1NVx1NzY1NyIsNCwiXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYx''@;'; put 'put ''XHU3NjYyXHU3NjY0Iiw2LCJcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzAiLDcsIlx1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5''@;'; put 'put ''YVx1NzY5YiJdLFsiYjA4MCIsIlx1NzY5YyIsNywiXHU3NmE1Iiw4LCJcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjUiLDksIlx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4''@;'; put 'put ''ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1''@;'; put 'put ''NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4''@;'; put 'put ''MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NSJdLFsiYjE0''@;'; put 'put ''MCIsIlx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMCIsNCwiXHU3NmU2Iiw3LCJcdTc2ZjBcdTc2ZjNcdTc2ZjVcdTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJc''@;'; put 'put ''dTc3MDNcdTc3MDVcdTc3MDZcdTc3MGFcdTc3MGNcdTc3MGUiLDEwLCJcdTc3MWJcdTc3MWNcdTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3MjdcdTc3MmFcdTc3MmIiXSxbImIxODAiLCJcdTc3MmNcdTc3MmVcdTc3MzAiLDQsIlx1NzczOVx1NzczYlx1NzczZFx1Nzcz''@;'; put 'put ''ZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OCIsNywiXHU3NzUyIiw3LCJcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThm''@;'; put 'put ''ODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZc''@;'; put 'put ''dTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkw''@;'; put 'put ''NGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjMiXSxbImIyNDAiLCJcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBc''@;'; put 'put ''dTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmQiLDExLCJcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODYiLDUsIlx1Nzc4Zlx1Nzc5MFx1Nzc5MyIsMTEsIlx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1Nzdi''@;'; put 'put ''MVx1NzdiMlx1NzdiNFx1NzdiNiIsNF0sWyJiMjgwIiwiXHU3N2JjXHU3N2JlXHU3N2MwIiwxMiwiXHU3N2NlIiw4LCJcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGQiLDQsIlx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1''@;'; put 'put ''NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQy''@;'; put 'put ''Mlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1''@;'; put 'put ''NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYw''@;'; put 'put ''Y1x1NzMxNiJdLFsiYjM0MCIsIlx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwMyIsNSwiXHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3''@;'; put 'put ''ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRk''@;'; put 'put ''XHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhIl0sWyJiMzgwIiwiXHU3ODViXHU3ODVjXHU3ODVlIiwxMSwiXHU3ODZmIiw3LCJcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2QiLDYsIlx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4''@;'; put 'put ''Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1''@;'; put 'put ''OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4''@;'; put 'put ''OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1''@;'; put 'put ''OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YSJdLFsiYjQ0MCIsIlx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOCIsNywi''@;'; put 'put ''XHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhIiw5''@;'; put 'put ''XSxbImI0ODAiLCJcdTc4ZTRcdTc4ZTVcdTc4ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWQiLDQsIlx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYiIsNSwiXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2Iiw2LCJcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZc''@;'; put 'put ''dTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYy''@;'; put 'put ''MzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNc''@;'; put 'put ''dTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVl''@;'; put 'put ''MjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmUiXSxbImI1NDAiLCJcdTc5MGQiLDUsIlx1NzkxNCIsOSwiXHU3OTFmIiw0LCJcdTc5MjUiLDE0LCJcdTc5MzUiLDQsIlx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YSIsOCwiXHU3OTU0''@;'; put 'put ''XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzIl0sWyJiNTgwIiwiXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwIiw2LCJcdTc5NzlcdTc5N2IiLDQsIlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4''@;'; put 'put ''ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1''@;'; put 'put ''OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRh''@;'; put 'put ''NFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1''@;'; put 'put ''Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMCJdLFsiYjY0MCIsIlx1Nzk5MyIsNiwiXHU3OTliIiwxMSwiXHU3OWE4IiwxMCwiXHU3OWI0Iiw0LCJcdTc5YmNcdTc5YmZc''@;'; put 'put ''dTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDkiLDUsIlx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYSJdLFsiYjY4MCIsIlx1NzllY1x1NzllZVx1NzlmMSIsNiwi''@;'; put 'put ''XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmIiw0LCJcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1''@;'; put 'put ''MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVc''@;'; put 'put ''dTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYz''@;'; put 'put ''ODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2Zc''@;'; put 'put ''dTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGMiXSxbImI3NDAiLCJcdTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjQiLDE0LCJcdTdhMzRcdTdhMzVcdTdhMzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdhNDAiLDUsIlx1N2E0NyIsOSwiXHU3YTUyIiw0LCJcdTdhNTgiLDE2XSxbImI3ODAi''@;'; put 'put ''LCJcdTdhNjkiLDYsIlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1''@;'; put 'put ''N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0''@;'; put 'put ''YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1''@;'; put 'put ''N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTky''@;'; put 'put ''Ylx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZCJdLFsiYjg0MCIsIlx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZSIsNCwiXHU3YWI0IiwxMCwiXHU3YWMwIiwxMCwiXHU3YWNjIiw5''@;'; put 'put ''LCJcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTciLDUsIlx1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmMyJdLFsiYjg4MCIsIlx1N2FmNCIsNCwiXHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3''@;'; put 'put ''YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2Mjlh''@;'; put 'put ''XHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4''@;'; put 'put ''YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3Njhi''@;'; put 'put ''XHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4''@;'; put 'put ''ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5Il0sWyJiOTQwIiwiXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmIiw1LCJcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlc''@;'; put 'put ''dTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjMiLDEwLCJcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODYiLDYsIlx1N2I4ZVx1N2I4ZiJdLFsiYjk4MCIsIlx1N2I5MVx1N2I5''@;'; put 'put ''Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOSIsNywiXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2''@;'; put 'put ''ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1''@;'; put 'put ''XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1''@;'; put 'put ''MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4Zjhh''@;'; put 'put ''XHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4Il0sWyJiYTQwIiwiXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0Iiw0LCJcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdi''@;'; put 'put ''ZTBcdTdiZTJcdTdiZTNcdTdiZTRcdTdiZTdcdTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjIiLDQsIlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZiIsNywiXHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwIiw1LCJcdTdj''@;'; put 'put ''MTdcdTdjMThcdTdjMTkiXSxbImJhODAiLCJcdTdjMWEiLDQsIlx1N2MyMCIsNSwiXHU3YzI4XHU3YzI5XHU3YzJiIiwxMiwiXHU3YzM5Iiw1LCJcdTdjNDJcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZk''@;'; put 'put ''YjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRc''@;'; put 'put ''dTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThm''@;'; put 'put ''NzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTYiXSxbImJi''@;'; put 'put ''NDAiLCJcdTdjNDMiLDksIlx1N2M0ZSIsMzYsIlx1N2M3NSIsNSwiXHU3YzdlIiw5XSxbImJiODAiLCJcdTdjODhcdTdjOGEiLDYsIlx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2Nh''@;'; put 'put ''Y1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNCIsNCwiXHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1''@;'; put 'put ''NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRk''@;'; put 'put ''XHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2''@;'; put 'put ''ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1Il0sWyJiYzQwIiwiXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5''@;'; put 'put ''XHU3Y2NiXHU3Y2NlIiw2LCJcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTEiLDYsIlx1N2NlOSIsNSwiXHU3Y2YwIiw3LCJcdTdjZjlcdTdjZmFcdTdjZmMiLDEzLCJcdTdkMGIiLDVdLFsiYmM4MCIsIlx1N2QxMSIsMTQsIlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2Qy''@;'; put 'put ''Nlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMCIsNiwiXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1''@;'; put 'put ''MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3''@;'; put 'put ''XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4''@;'; put 'put ''MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2Il0sWyJiZDQwIiwiXHU3ZDM3Iiw1NCwiXHU3ZDZmIiw3XSxbImJkODAiLCJcdTdk''@;'; put 'put ''NzgiLDMyLCJcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZc''@;'; put 'put ''dTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4''@;'; put 'put ''NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2Fc''@;'; put 'put ''dTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzgiXSxbImJlNDAiLCJcdTdkOTkiLDEyLCJcdTdkYTciLDYsIlx1N2RhZiIsNDJdLFsiYmU4MCIsIlx1N2RkYSIsMzIsIlx1NWMzZFx1NTJiMlx1ODM0Nlx1''@;'; put 'put ''NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3''@;'; put 'put ''Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1''@;'; put 'put ''ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFi''@;'; put 'put ''M1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYiJdLFsiYmY0MCIsIlx1N2RmYiIsNjJdLFsiYmY4MCIsIlx1N2UzYVx1N2UzYyIsNCwiXHU3ZTQyIiw0LCJcdTdlNDgiLDIxLCJcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZc''@;'; put 'put ''dTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4''@;'; put 'put ''ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRc''@;'; put 'put ''dTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdh''@;'; put 'put ''YTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODAiXSxbImMwNDAiLCJcdTdlNWUiLDM1LCJcdTdlODMiLDIzLCJcdTdlOWNcdTdlOWRcdTdlOWUiXSxbImMwODAiLCJcdTdlYWVcdTdlYjRcdTdlYmJcdTdlYmNcdTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdc''@;'; put 'put ''dTdmMzlcdTdmM2IiLDYsIlx1N2Y0M1x1N2Y0NiIsOSwiXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1''@;'; put 'put ''XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0''@;'; put 'put ''ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJi''@;'; put 'put ''XHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwIl0sWyJjMTQwIiwiXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3''@;'; put 'put ''ZjYwXHU3ZjYzIiw0LCJcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODIiLDcsIlx1N2Y4Ylx1N2Y4ZFx1N2Y4ZiIsNCwiXHU3Zjk1Iiw0LCJcdTdmOWJcdTdm''@;'; put 'put ''OWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYTgiLDYsIlx1N2ZiMSJdLFsiYzE4MCIsIlx1N2ZiMyIsNCwiXHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmIiw0LCJcdTdm''@;'; put 'put ''ZDZcdTdmZDdcdTdmZDkiLDUsIlx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1''@;'; put 'put ''N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBj''@;'; put 'put ''OFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1''@;'; put 'put ''NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZiJdLFsiYzI0MCIsIlx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2Zm''@;'; put 'put ''Mlx1N2ZmNCIsNiwiXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiIiw1LCJcdTgwMzJcdTgwMzRcdTgwMzlcdTgw''@;'; put 'put ''M2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTciXSxbImMyODAiLCJcdTgwNTlcdTgwNWIiLDEzLCJcdTgwNmIiLDUsIlx1ODA3MiIsMTEsIlx1OTY4Nlx1''@;'; put 'put ''NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0''@;'; put 'put ''Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1''@;'; put 'put ''NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1''@;'; put 'put ''Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYiJdLFsiYzM0MCIsIlx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZCIsNSwiXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4''@;'; put 'put ''MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3Iiw0LCJcdTgwY2YiLDYsIlx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1''@;'; put 'put ''ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYiJdLFsiYzM4MCIsIlx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZiIsMTIsIlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOSIsNCwi''@;'; put 'put ''XHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2''@;'; put 'put ''Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1''@;'; put 'put ''XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2''@;'; put 'put ''MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4Il0sWyJjNDQwIiwiXHU4MTQwIiw1LCJcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWIiLDQsIlx1''@;'; put 'put ''ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4MyIsNCwiXHU4MTg5XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyIiw1LCJcdTgxOTlc''@;'; put 'put ''dTgxOWFcdTgxOWUiLDQsIlx1ODFhNFx1ODFhNSJdLFsiYzQ4MCIsIlx1ODFhN1x1ODFhOVx1ODFhYiIsNywiXHU4MWI0Iiw1LCJcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2QiLDYsIlx1NjQ3OVx1ODYxMVx1NmEyMVx1''@;'; put 'put ''ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZl''@;'; put 'put ''ZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1''@;'; put 'put ''NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2''@;'; put 'put ''ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MSJdLFsiYzU0MCIsIlx1ODFkNCIsMTQsIlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZSIsNCwiXHU4MWY1Iiw1LCJcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDciLDQsIlx1ODIw''@;'; put 'put ''ZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNSIsNSwiXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmIl0sWyJjNTgwIiwiXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4''@;'; put 'put ''MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwIiw3LCJcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjAiLDcsIlx1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1''@;'; put 'put ''NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUw''@;'; put 'put ''MFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1''@;'; put 'put ''NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkNyJdLFsiYzY0MCIsIlx1ODI2''@;'; put 'put ''YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1''@;'; put 'put ''ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJl''@;'; put 'put ''ZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOCJdLFsiYzY4MCIsIlx1ODJmYVx1ODJmYyIsNCwiXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkIiw5LCJcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgz''@;'; put 'put ''MzJcdTgzMzdcdTgzM2JcdTgzM2RcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThc''@;'; put 'put ''dTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3''@;'; put 'put ''MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFc''@;'; put 'put ''dThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTAiXSxbImM3NDAiLCJcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGEiLDQsIlx1ODM1M1x1ODM1''@;'; put 'put ''NSIsNCwiXHU4MzVkXHU4MzYyXHU4MzcwIiw2LCJcdTgzNzlcdTgzN2FcdTgzN2UiLDYsIlx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMSIsNiwi''@;'; put 'put ''XHU4M2FjXHU4M2FkXHU4M2FlIl0sWyJjNzgwIiwiXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4''@;'; put 'put ''M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVj''@;'; put 'put ''XHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1''@;'; put 'put ''Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMw''@;'; put 'put ''XHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwIl0sWyJjODQwIiwiXHU4M2VlXHU4M2VmXHU4M2YzIiw0''@;'; put 'put ''LCJcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTIiLDUsIlx1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZSIsNSwiXHU4NDI5Iiw3LCJcdTg0MzIiLDUsIlx1ODQzOVx1ODQzYVx1ODQzYlx1ODQz''@;'; put 'put ''ZSIsNywiXHU4NDQ3XHU4NDQ4XHU4NDQ5Il0sWyJjODgwIiwiXHU4NDRhIiw2LCJcdTg0NTIiLDQsIlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NCIsNCwiXHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdj''@;'; put 'put ''XHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3''@;'; put 'put ''MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4''@;'; put 'put ''XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2''@;'; put 'put ''ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxIl0sWyJjOTQwIiwiXHU4NDdkIiw0LCJcdTg0ODNcdTg0ODRcdTg0ODVcdTg0ODZcdTg0OGFcdTg0OGRcdTg0OGYiLDcsIlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1''@;'; put 'put ''ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMiIsMTIsIlx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRk''@;'; put 'put ''NVx1ODRkNyJdLFsiYzk4MCIsIlx1ODRkOCIsNCwiXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3Iiw0LCJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjEiLDEwLCJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1MDFcdTg1MDJcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlh''@;'; put 'put ''OWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVc''@;'; put 'put ''dTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThk''@;'; put 'put ''NGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBc''@;'; put 'put ''dTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjMiXSxbImNhNDAiLCJcdTg1MDMiLDgsIlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMiIsOCwiXHU4NTJkIiw5LCJc''@;'; put 'put ''dTg1M2UiLDQsIlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0YiIsMTBdLFsiY2E4MCIsIlx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1ZiIsNCwiXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5Iiw4LCJcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1''@;'; put 'put ''N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJc''@;'; put 'put ''dTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5''@;'; put 'put ''YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFc''@;'; put 'put ''dTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzEiXSxbImNiNDAiLCJcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODgiLDYsIlx1ODU5MCIsMTAsIlx1ODU5ZCIsNiwiXHU4NWE1''@;'; put 'put ''XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxIiw1LCJcdTg1YjhcdTg1YmEiLDYsIlx1ODVjMiIsNiwiXHU4NWNhIiw0LCJcdTg1ZDFcdTg1ZDIiXSxbImNiODAiLCJcdTg1ZDRcdTg1ZDYiLDUsIlx1ODVkZCIsNiwiXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4''@;'; put 'put ''NWVhIiwxNCwiXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1''@;'; put 'put ''XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5''@;'; put 'put ''MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBi''@;'; put 'put ''XHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0Il0sWyJjYzQwIiwiXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwIiw0LCJcdTg2MDYiLDEwLCJcdTg2MTJcdTg2MTNcdTg2MTRcdTg2''@;'; put 'put ''MTVcdTg2MTciLDE1LCJcdTg2MjhcdTg2MmEiLDEzLCJcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDAiXSxbImNjODAiLCJcdTg2NDEiLDExLCJcdTg2NTJcdTg2NTNcdTg2NTUiLDQsIlx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2MyIs''@;'; put 'put ''NywiXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODky''@;'; put 'put ''XHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1''@;'; put 'put ''OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0''@;'; put 'put ''XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzIl0sWyJjZDQwIiwiXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyIiw2LCJcdTg2ODMiLDYsIlx1ODY4ZSIsNCwiXHU4Njk0XHU4Njk2Iiw1LCJcdTg2OWUiLDQsIlx1''@;'; put 'put ''ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYiIsNCwiXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjIl0sWyJjZDgwIiwi''@;'; put 'put ''XHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4''@;'; put 'put ''NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1''@;'; put 'put ''XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5''@;'; put 'put ''ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVh''@;'; put 'put ''XHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxIl0sWyJjZTQwIiwiXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4''@;'; put 'put ''NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwIiw2LCJcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZc''@;'; put 'put ''dTg3NThcdTg3NWEiLDUsIlx1ODc2MVx1ODc2Mlx1ODc2NiIsNywiXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1Il0sWyJjZTgwIiwiXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4Nzhl''@;'; put 'put ''Iiw0LCJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OTgiLDYsIlx1ODdhMCIsNCwiXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJh''@;'; put 'put ''XHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2''@;'; put 'put ''ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVl''@;'; put 'put ''XHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhIl0sWyJjZjQwIiwiXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4''@;'; put 'put ''N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxIiw0LCJcdTg3YzdcdTg3YzhcdTg3YzlcdTg3Y2MiLDQsIlx1ODdkNCIsNiwiXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4''@;'; put 'put ''N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmIiw5XSxbImNmODAiLCJcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDQiLDUsIlx1ODgwYiIsNywiXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFh''@;'; put 'put ''XHU4ODFjIiw0LCJcdTg4MjNcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3''@;'; put 'put ''OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2Vc''@;'; put 'put ''dTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZh''@;'; put 'put ''NjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTMiXSxbImQwNDAiLCJcdTg4MjQiLDEzLCJcdTg4MzMiLDUsIlx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1''@;'; put 'put ''ODg0M1x1ODg0NiIsNSwiXHU4ODRlIiw1LCJcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWEiLDYsIlx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YSJdLFsiZDA4MCIsIlx1ODg3Ylx1ODg3Y1x1ODg4MFx1''@;'; put 'put ''ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5NyIsNCwiXHU4ODlkIiw0LCJcdTg4YTNcdTg4YTUiLDUsIlx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1''@;'; put 'put ''NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZj''@;'; put 'put ''M1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1''@;'; put 'put ''NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJh''@;'; put 'put ''M1x1NjBhY1x1NjVjYlx1NzM4NCJdLFsiZDE0MCIsIlx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMiIsNCwiXHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4''@;'; put 'put ''OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhIiw0LCJcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTkiLDYsIlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwMyIsNV0sWyJkMTgwIiwiXHU4OTA5''@;'; put 'put ''XHU4OTBiIiw0LCJcdTg5MTFcdTg5MTQiLDQsIlx1ODkxYyIsNCwiXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0''@;'; put 'put ''XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4''@;'; put 'put ''NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRk''@;'; put 'put ''XHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1''@;'; put 'put ''MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2Il0sWyJkMjQwIiwiXHU4OTM4Iiw4LCJcdTg5NDJcdTg5NDNcdTg5NDUiLDI0LCJcdTg5NjAiLDUsIlx1ODk2NyIsMTksIlx1ODk3YyJdLFsiZDI4MCIsIlx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1''@;'; put 'put ''ODk4NyIsMjYsIlx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRi''@;'; put 'put ''Mlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1''@;'; put 'put ''NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2''@;'; put 'put ''Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MCJdLFsiZDM0MCIsIlx1ODlhMiIsMzAsIlx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1''@;'; put 'put ''ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNCIsNl0sWyJkMzgwIiwiXHU4OWZiIiw0LCJcdThhMDEiLDUsIlx1OGEwOCIsMjEsIlx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3''@;'; put 'put ''NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1''@;'; put 'put ''NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZj''@;'; put 'put ''Mlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1''@;'; put 'put ''NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OSJdLFsiZDQ0MCIsIlx1OGExZSIsMzEsIlx1OGEzZiIsOCwiXHU4YTQ5IiwyMV0sWyJkNDgwIiwiXHU4YTVmIiwyNSwiXHU4YTdhIiw2LCJcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTll''@;'; put 'put ''MzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhc''@;'; put 'put ''dTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThk''@;'; put 'put ''NWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBc''@;'; put 'put ''dTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjciXSxbImQ1NDAiLCJcdThhODEiLDcsIlx1OGE4YiIsNywiXHU4YTk0Iiw0Nl0sWyJkNTgwIiwiXHU4YWMzIiwzMiwiXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1''@;'; put 'put ''Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4''@;'; put 'put ''XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2''@;'; put 'put ''ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNm''@;'; put 'put ''Il0sWyJkNjQwIiwiXHU4YWU0IiwzNCwiXHU4YjA4IiwyN10sWyJkNjgwIiwiXHU4YjI0XHU4YjI1XHU4YjI3IiwzMCwiXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRj''@;'; put 'put ''XHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3''@;'; put 'put ''NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNj''@;'; put 'put ''XHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxIl0sWyJkNzQwIiwiXHU4YjQ2IiwzMSwiXHU4''@;'; put 'put ''YjY3Iiw0LCJcdThiNmQiLDI1XSxbImQ3ODAiLCJcdThiODciLDI0LCJcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdi''@;'; put 'put ''YzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlc''@;'; put 'put ''dTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUz''@;'; put 'put ''NTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTciXSxbImQ4NDAiLCJcdThjMzgiLDgsIlx1OGM0Mlx1OGM0M1x1''@;'; put 'put ''OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZCIsNywiXHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViIiw1LCJcdThjNjMiLDYsIlx1OGM2YyIsNiwiXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiIiw2LCJcdThjODNcdThjODRcdThjODZcdThjODciXSxbImQ4ODAi''@;'; put 'put ''LCJcdThjODhcdThjOGJcdThjOGQiLDYsIlx1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OSIsMjAsIlx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1''@;'; put 'put ''NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMx''@;'; put 'put ''YVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1''@;'; put 'put ''NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZCJdLFsiZDk0MCIsIlx1OGNhZSIsNjJdLFsiZDk4MCIsIlx1OGNlZCIs''@;'; put 'put ''MzIsIlx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAy''@;'; put 'put ''OVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1''@;'; put 'put ''NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2''@;'; put 'put ''ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiYyJdLFsiZGE0MCIsIlx1OGQwZSIsMTQsIlx1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1''@;'; put 'put ''OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OCIsOCwiXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjIiw0LCJcdThkOTJcdThkOTNcdThkOTUiLDksIlx1OGRhMFx1OGRhMSJdLFsiZGE4MCIsIlx1OGRhMlx1OGRhNCIsMTIsIlx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1''@;'; put 'put ''OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJj''@;'; put 'put ''M1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1''@;'; put 'put ''OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYy''@;'; put 'put ''MVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYSJdLFsiZGI0''@;'; put 'put ''MCIsIlx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZSIsNiwiXHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBl''@;'; put 'put ''XHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1Iiw3LCJcdThlMjBcdThlMjFcdThlMjQiLDQsIlx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZSJdLFsiZGI4MCIsIlx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0''@;'; put 'put ''Nlx1OGU0YyIsNCwiXHU4ZTUzIiw1LCJcdThlNWEiLDExLCJcdThlNjdcdThlNjhcdThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkw''@;'; put 'put ''ZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZc''@;'; put 'put ''dTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3''@;'; put 'put ''NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGQiXSxbImRjNDAiLCJcdThlNzNcdThlNzVc''@;'; put 'put ''dThlNzciLDQsIlx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OCIsNiwiXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1Iiw2LCJcdThlOWRcdThlOWYiLDExLCJcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjMiLDYsIlx1OGViYiIsN10sWyJkYzgwIiwi''@;'; put 'put ''XHU4ZWMzIiwxMCwiXHU4ZWNmIiwyMSwiXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4''@;'; put 'put ''MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUx''@;'; put 'put ''XHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4''@;'; put 'put ''MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1Il0sWyJkZDQwIiwiXHU4ZWU1Iiw2Ml0sWyJkZDgwIiwiXHU4ZjI0IiwzMiwiXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4''@;'; put 'put ''MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3''@;'; put 'put ''XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4''@;'; put 'put ''NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUz''@;'; put 'put ''XHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhIl0sWyJkZTQwIiwiXHU4ZjQ1IiwzMiwiXHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4''@;'; put 'put ''ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2Il0sWyJkZTgwIiwiXHU4ZmM5Iiw0LCJcdThmY2ZcdThmZDJcdThmZDZcdThmZDdcdThmZGFcdThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNc''@;'; put 'put ''dThmZWZcdThmZjFcdThmZjJcdThmZjRcdThmZjVcdThmZjZcdThmZmFcdThmZmJcdThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkwMTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1''@;'; put 'put ''N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2Nc''@;'; put 'put ''dTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYz''@;'; put 'put ''OGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRc''@;'; put 'put ''dTY0NmRcdTY0OTYiXSxbImRmNDAiLCJcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjciLDUsIlx1OTAzMCIsNCwiXHU5MDM3XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4Iiw0LCJcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZc''@;'; put 'put ''dTkwNTlcdTkwNWFcdTkwNWMiLDUsIlx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2ZiIsNCwiXHU5MDc2Iiw2LCJcdTkwN2VcdTkwODEiXSxbImRmODAiLCJcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGMiLDQsIlx1OTA5Mlx1''@;'; put 'put ''OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRk''@;'; put 'put ''MFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1''@;'; put 'put ''NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRi''@;'; put 'put ''Zlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1''@;'; put 'put ''NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzYyJdLFsiZTA0MCIsIlx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBl''@;'; put 'put ''NVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNSIsMTksIlx1OTExYVx1OTExYlx1OTExYyJdLFsiZTA4MCIsIlx1OTExZFx1''@;'; put 'put ''OTExZlx1OTEyMFx1OTEyMVx1OTEyNCIsMTAsIlx1OTEzMFx1OTEzMiIsNiwiXHU5MTNhIiw4LCJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2Vc''@;'; put 'put ''dTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1''@;'; put 'put ''ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2Nc''@;'; put 'put ''dTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2MiXSxbImUxNDAiLCJcdTkxNDVcdTkxNDdcdTkxNDhcdTkx''@;'; put 'put ''NTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZcdTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZcdTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkxNmRcdTkxNzNcdTkxN2FcdTkxN2JcdTkxN2NcdTkxODAiLDQsIlx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5MyIs''@;'; put 'put ''NiwiXHU5MTljIiw1LCJcdTkxYTQiLDUsIlx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYiJdLFsiZTE4MCIsIlx1OTFiYyIsMTAsIlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMiIsOSwiXHU5MWRkIiw4LCJcdTVlMzdcdTVl''@;'; put 'put ''NDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRc''@;'; put 'put ''dTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThj''@;'; put 'put ''NzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJc''@;'; put 'put ''dTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmEiXSxbImUyNDAiLCJcdTkxZTYiLDYyXSxbImUyODAiLCJcdTkyMjUiLDMyLCJcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlc''@;'; put 'put ''dTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjciLDUsIlx1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5''@;'; put 'put ''MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1''@;'; put 'put ''NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0MiJdLFsiZTM0MCIsIlx1OTI0''@;'; put 'put ''NiIsNDUsIlx1OTI3NSIsMTZdLFsiZTM4MCIsIlx1OTI4NiIsNywiXHU5MjhmIiwyNCwiXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIw''@;'; put 'put ''XHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5''@;'; put 'put ''NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0''@;'; put 'put ''XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlIl0sWyJlNDQwIiwiXHU5MmE4Iiw1LCJcdTkyYWYiLDI0LCJcdTkyYzkiLDMx''@;'; put 'put ''XSxbImU0ODAiLCJcdTkyZTkiLDMyLCJcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZk''@;'; put 'put ''OTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZc''@;'; put 'put ''dTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZl''@;'; put 'put ''ZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDEiXSxbImU1NDAiLCJcdTkzMGEiLDUxLCJcdTkzM2YiLDEwXSxbImU1ODAiLCJcdTkzNGEiLDMxLCJcdTkzNmJcdTZmYzlcdTZm''@;'; put 'put ''YTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBc''@;'; put 'put ''dTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkw''@;'; put 'put ''NTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRc''@;'; put 'put ''dTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTMiXSxbImU2NDAiLCJcdTkzNmMiLDM0LCJcdTkzOTAiLDI3XSxbImU2ODAiLCJcdTkzYWMiLDI5LCJcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRc''@;'; put 'put ''dTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVh''@;'; put 'put ''YWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNc''@;'; put 'put ''dTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlh''@;'; put 'put ''YTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTkiXSxbImU3NDAiLCJcdTkzY2UiLDcsIlx1OTNkNyIsNTRdLFsiZTc4MCIsIlx1OTQwZSIsMzIsIlx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2Vk''@;'; put 'put ''N1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1''@;'; put 'put ''N2YxYlx1N2YxZlx1N2YyMSIsNiwiXHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmIiw0LCJcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlc''@;'; put 'put ''dTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmMiXSxbImU4NDAiLCJcdTk0MmYiLDE0LCJcdTk0M2YiLDQzLCJcdTk0NmNcdTk0NmRcdTk0''@;'; put 'put ''NmVcdTk0NmYiXSxbImU4ODAiLCJcdTk0NzAiLDIwLCJcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2Vc''@;'; put 'put ''dTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3''@;'; put 'put ''NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNc''@;'; put 'put ''dTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5''@;'; put 'put ''MjBcdTY4ZjkiXSxbImU5NDAiLCJcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzciLDcsIlx1OTU4MCIsNDJdLFsiZTk4MCIsIlx1OTVhYiIsMzIsIlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1''@;'; put 'put ''N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1''@;'; put 'put ''NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5''@;'; put 'put ''MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1''@;'; put 'put ''OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4YiJdLFsiZWE0MCIsIlx1OTVjYyIsMjcsIlx1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyMyIsNiwiXHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4''@;'; put 'put ''XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3Il0sWyJlYTgwIiwiXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkIiw0''@;'; put 'put ''LCJcdTk2NzNcdTk2NzgiLDEyLCJcdTk2ODdcdTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFc''@;'; put 'put ''dTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2''@;'; put 'put ''ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2Vc''@;'; put 'put ''dTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjAiXSxbImViNDAiLCJcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2''@;'; put 'put ''OWFcdTk2OWJcdTk2OWQiLDksIlx1OTZhOCIsNywiXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2Iiw5LCJcdTk2ZTEiLDYsIlx1OTZl''@;'; put 'put ''YiJdLFsiZWI4MCIsIlx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1''@;'; put 'put ''OTcxNyIsNCwiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1''@;'; put 'put ''XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4''@;'; put 'put ''MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5''@;'; put 'put ''XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiIl0sWyJlYzQwIiwiXHU5NzIxIiw4LCJcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzMiLDQsIlx1OTcz''@;'; put 'put ''YVx1OTczYlx1OTczY1x1OTczZFx1OTczZiIsMTgsIlx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YSIsN10sWyJlYzgwIiwiXHU5NzcyXHU5Nzc1XHU5Nzc3Iiw0LCJcdTk3N2QiLDcsIlx1''@;'; put 'put ''OTc4NiIsNCwiXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5Iiw0LCJcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBc''@;'; put 'put ''dTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcx''@;'; put 'put ''MmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNc''@;'; put 'put ''dTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDAiXSxbImVkNDAiLCJcdTk3OWVcdTk3OWZcdTk3''@;'; put 'put ''YTFcdTk3YTJcdTk3YTQiLDYsIlx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNSIsNDZdLFsiZWQ4MCIsIlx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZSIsNCwiXHU5N2Y0XHU5N2Y3IiwyMywiXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFi''@;'; put 'put ''XHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3''@;'; put 'put ''ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5''@;'; put 'put ''XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3''@;'; put 'put ''NzQ3XHU3NzQzXHU3NzVhXHU3NzY4Il0sWyJlZTQwIiwiXHU5ODBmIiw2Ml0sWyJlZTgwIiwiXHU5ODRlIiwzMiwiXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3''@;'; put 'put ''NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkw''@;'; put 'put ''XHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2Iiw0LCJcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzgiLDYsIlx1OTRkMFx1OTRkMVx1OTRkMlx1OTRk''@;'; put 'put ''NVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYSJdLFsiZWY0MCIsIlx1OTg2ZiIsNSwiXHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4IiwzNywiXHU5OGNmXHU5''@;'; put 'put ''OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwIiw0XSxbImVmODAiLCJcdTk4ZTVcdTk4ZTZcdTk4ZTkiLDMwLCJcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1''@;'; put 'put ''MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTIiLDQsIlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1''@;'; put 'put ''OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NCIsOCwiXHU5NTZmXHU5NTcxXHU5NTcy''@;'; put 'put ''XHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0Il0sWyJmMDQwIiwiXHU5OTA4Iiw0LCJcdTk5MGVcdTk5MGZcdTk5MTEiLDI4LCJcdTk5MmYiLDI2XSxbImYwODAiLCJcdTk5NGEi''@;'; put 'put ''LDksIlx1OTk1NiIsMTIsIlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUy''@;'; put 'put ''MFx1OWUyMlx1OWUyOCIsNCwiXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5''@;'; put 'put ''ZTVlXHU5ZTYzXHU5ZTY2Iiw2LCJcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRc''@;'; put 'put ''dTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTkiXSxbImYxNDAiLCJcdTk5OGNcdTk5OGVcdTk5OWEiLDEwLCJcdTk5YTZcdTk5YTdcdTk5YTkiLDQ3XSxbImYxODAiLCJc''@;'; put 'put ''dTk5ZDkiLDMyLCJcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdh''@;'; put 'put ''ODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVc''@;'; put 'put ''dTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgw''@;'; put 'put ''MjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODMiXSxbImYyNDAiLCJcdTk5ZmEiLDYyXSxbImYyODAiLCJcdTlhMzkiLDMyLCJcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4''@;'; put 'put ''OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVc''@;'; put 'put ''dTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3''@;'; put 'put ''MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlc''@;'; put 'put ''dTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDIiXSxbImYzNDAiLCJcdTlhNWEiLDE3LCJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlhOTVcdTlhOTlcdTlhYTZcdTlhYTkiLDYsIlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFi''@;'; put 'put ''ZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNiIsNCwiXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjIl0sWyJmMzgwIiwiXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5''@;'; put 'put ''YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwIiw4LCJcdTlhZmFcdTlhZmMiLDYsIlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1''@;'; put 'put ''ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2Iy''@;'; put 'put ''Ylx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1''@;'; put 'put ''N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYiJdLFsiZjQ0MCIsIlx1OWIw''@;'; put 'put ''N1x1OWIwOSIsNSwiXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0IiwxMCwiXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0IiwxMCwiXHU5YjMwXHU5YjMxXHU5YjMzIiw3LCJcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTli''@;'; put 'put ''NTNcdTliNTUiLDVdLFsiZjQ4MCIsIlx1OWI1YiIsMzIsIlx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIz''@;'; put 'put ''M1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1''@;'; put 'put ''N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0''@;'; put 'put ''N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NCJdLFsiZjU0MCIsIlx1OWI3YyIsNjJdLFsiZjU4MCIsIlx1OWJiYiIsMzIsIlx1OTE2Mlx1OTE2MVx1OTE3''@;'; put 'put ''MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1''@;'; put 'put ''OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUy''@;'; put 'put ''ZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1''@;'; put 'put ''OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkYyJdLFsiZjY0MCIsIlx1OWJkYyIsNjJdLFsiZjY4MCIsIlx1OWMxYiIsMzIsIlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1''@;'; put 'put ''OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NSIsNSwiXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2Nh''@;'; put 'put ''XHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllIiw1LCJcdTljYTUiLDQsIlx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMCIsNywi''@;'; put 'put ''XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiIl0sWyJmNzQwIiwiXHU5YzNjIiw2Ml0sWyJmNzgwIiwiXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2''@;'; put 'put ''XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlIiw0LCJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2MiLDQsIlx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNk''@;'; put 'put ''ZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1''@;'; put 'put ''OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4''@;'; put 'put ''Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NCJdLFsiZjg0''@;'; put 'put ''MCIsIlx1OWNlMyIsNjJdLFsiZjg4MCIsIlx1OWQyMiIsMzJdLFsiZjk0MCIsIlx1OWQ0MyIsNjJdLFsiZjk4MCIsIlx1OWQ4MiIsMzJdLFsiZmE0MCIsIlx1OWRhMyIsNjJdLFsiZmE4MCIsIlx1OWRlMiIsMzJdLFsiZmI0MCIsIlx1OWUwMyIsMjcsIlx1OWUyNFx1OWUyN1x1OWUyZVx1OWUz''@;'; put 'put ''MFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NCIsOSwiXHU5ZTgwIl0sWyJmYjgwIiwiXHU5ZTgxXHU5ZTgzXHU5''@;'; put 'put ''ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjIiw1LCJcdTllOTQiLDgsIlx1OWU5ZVx1OWVhMCIsNSwiXHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhIl0sWyJmYzQwIiwiXHU5ZWFiIiw4LCJcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmYiLDQsIlx1OWVj''@;'; put 'put ''NVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMCIsOCwiXHU5ZWZhXHU5''@;'; put 'put ''ZWZkXHU5ZWZmIiw2XSxbImZjODAiLCJcdTlmMDYiLDQsIlx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYSIsNSwiXHU5ZjIxXHU5ZjIzIiw4LCJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzEiXSxbImZkNDAiLCJcdTlmMzIiLDQsIlx1OWYzOFx1''@;'; put 'put ''OWYzYVx1OWYzY1x1OWYzZiIsNCwiXHU5ZjQ1IiwxMCwiXHU5ZjUyIiwzOF0sWyJmZDgwIiwiXHU5Zjc5Iiw1LCJcdTlmODFcdTlmODJcdTlmOGQiLDExLCJcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTEiLDQsIlx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMSJdLFsiZmU0MCIsIlx1ZmEw''@;'; put 'put ''Y1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOSJdXScpfSwyMTE2Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjdd''@;'; put 'put ''LFsiODE0MSIsIlx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYiIsNCwiXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1Iiw2LCJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzQiXSxbIjgxNjEiLCJcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFjM2JcdWFjM2Rc''@;'; put 'put ''dWFjM2VcdWFjM2ZcdWFjNDEiLDksIlx1YWM0Y1x1YWM0ZSIsNSwiXHVhYzU1Il0sWyI4MTgxIiwiXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkIiwxOCwiXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiIiw0LCJcdWFjODJcdWFjODdcdWFjODhcdWFjOGRc''@;'; put 'put ''dWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTUiLDYsIlx1YWM5ZVx1YWNhMiIsNSwiXHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxIiw2LCJcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2Qi''@;'; put 'put ''LDcsIlx1YWNkNlx1YWNkOCIsNywiXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3Iiw0LCJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDciLDQsIlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxMyJd''@;'; put 'put ''LFsiODI0MSIsIlx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMSIsNywiXHVhZDJhXHVhZDJiXHVhZDJlIiw1XSxbIjgyNjEiLCJcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2QiLDYsIlx1YWQ0Nlx1YWQ0''@;'; put 'put ''OFx1YWQ0YSIsNSwiXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3Il0sWyI4MjgxIiwiXHVhZDU5Iiw3LCJcdWFkNjJcdWFkNjQiLDcsIlx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4MyIsNCwiXHVhZDhh''@;'; put 'put ''XHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxIiwxMCwiXHVhZDllIiw1LCJcdWFkYTUiLDE3LCJcdWFkYjgiLDcsIlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOSIsNiwiXHVhZGQyXHVhZGQ0Iiw3LCJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNc''@;'; put 'put ''dWFkZTUiLDE4XSxbIjgzNDEiLCJcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDIiLDUsIlx1YWUwYVx1YWUwY1x1YWUwZSIsNSwiXHVhZTE1Iiw3XSxbIjgzNjEiLCJcdWFlMWQiLDE4LCJcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2MiXSxbIjgzODEiLCJc''@;'; put 'put ''dWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTciLDQsIlx1YWU1ZVx1YWU2Mlx1YWU2M1x1YWU2NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1YWU2Zlx1YWU3''@;'; put 'put ''MSIsNiwiXHVhZTdhXHVhZTdlIiw1LCJcdWFlODYiLDUsIlx1YWU4ZCIsNDYsIlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNSIsNiwiXHVhZWNlXHVhZWQyIiw1LCJcdWFlZGFcdWFlZGJcdWFlZGQiLDhdLFsiODQ0MSIsIlx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVl''@;'; put 'put ''ZSIsNSwiXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkIiw4XSxbIjg0NjEiLCJcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTEiLDE4XSxbIjg0ODEiLCJcdWFmMjQiLDcsIlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYz''@;'; put 'put ''NSIsNiwiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhIiw1LCJcdWFmNTEiLDEwLCJcdWFmNWUiLDUsIlx1YWY2NiIsMTgsIlx1YWY3YSIsNSwiXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5Iiw2LCJcdWFmOTJcdWFmOTNcdWFmOTRc''@;'; put 'put ''dWFmOTYiLDUsIlx1YWY5ZCIsMjYsIlx1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZSJdLFsiODU0MSIsIlx1YWZiZlx1YWZjMSIsNSwiXHVhZmNhXHVhZmNjXHVhZmNmIiw0LCJcdWFmZDUiLDYsIlx1YWZkZCIsNF0sWyI4NTYxIiwiXHVhZmUyIiw1LCJcdWFmZWEiLDUsIlx1YWZmMlx1YWZmM1x1''@;'; put 'put ''YWZmNVx1YWZmNlx1YWZmN1x1YWZmOSIsNiwiXHViMDAyXHViMDAzIl0sWyI4NTgxIiwiXHViMDA1Iiw2LCJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTUiLDYsIlx1YjAxZSIsOSwiXHViMDI5IiwyNiwiXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHVi''@;'; put 'put ''MDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlIiwyOSwiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1Iiw2LCJcdWIwOGVcdWIwOTBcdWIwOTIiLDUsIlx1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNCJdLFsiODY0''@;'; put 'put ''MSIsIlx1YjBhNVx1YjBhNlx1YjBhN1x1YjBhYVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBiYlx1YjBiZCIsNiwiXHViMGM2XHViMGNhIiw1LCJcdWIwZDIiXSxbIjg2NjEiLCJcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDkiLDYsIlx1YjBlMVx1YjBlMlx1''@;'; put 'put ''YjBlM1x1YjBlNFx1YjBlNiIsMTBdLFsiODY4MSIsIlx1YjBmMSIsMjIsIlx1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZSIsNCwiXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkIiw2LCJcdWIxMzZcdWIx''@;'; put 'put ''M2EiLDUsIlx1YjE0Mlx1YjE0M1x1YjE0NVx1YjE0Nlx1YjE0N1x1YjE0OSIsNiwiXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxIiwyMiwiXHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzIiw0''@;'; put 'put ''LCJcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWQiXSxbIjg3NDEiLCJcdWIxOWUiLDksIlx1YjFhOSIsMTVdLFsiODc2MSIsIlx1YjFiOSIsMTgsIlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFk''@;'; put 'put ''Mlx1YjFkM1x1YjFkNSJdLFsiODc4MSIsIlx1YjFkNiIsNSwiXHViMWRlXHViMWUwIiw3LCJcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjEiLDcsIlx1YjFmYVx1YjFmY1x1YjFmZSIsNSwiXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkIiw2LCJcdWIyMTZcdWIyMThc''@;'; put 'put ''dWIyMWEiLDUsIlx1YjIyMSIsMTgsIlx1YjIzNSIsNiwiXHViMjNkIiwyNiwiXHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxIiw2LCJcdWIyNmEiLDRdLFsiODg0MSIsIlx1YjI2ZiIsNCwiXHViMjc2Iiw1LCJcdWIyN2QiLDYsIlx1YjI4Nlx1YjI4N1x1YjI4OFx1''@;'; put 'put ''YjI4YSIsNF0sWyI4ODYxIiwiXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliIiw0LCJcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjciXSxbIjg4ODEi''@;'; put 'put ''LCJcdWIyYjgiLDE1LCJcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDMiLDQsIlx1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1''@;'; put 'put ''YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOSIsNiwiXHViMzEyXHViMzE2Iiw1LCJcdWIzMWQiLDU0LCJcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjMiXSxbIjg5NDEiLCJcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZc''@;'; put 'put ''dWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzkiLDYsIlx1YjM4Mlx1YjM4NiIsNSwiXHViMzhkIl0sWyI4OTYxIiwiXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1IiwxMCwiXHViM2EyIiw1LCJcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWQiXSxbIjg5ODEiLCJc''@;'; put 'put ''dWIzYWUiLDIxLCJcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTkiLDE4LCJcdWIzZmQiLDE4LCJcdWI0''@;'; put 'put ''MTEiLDYsIlx1YjQxOVx1YjQxYVx1YjQxYlx1YjQxZFx1YjQxZVx1YjQxZlx1YjQyMSIsNiwiXHViNDJhXHViNDJjIiw3LCJcdWI0MzUiLDE1XSxbIjhhNDEiLCJcdWI0NDUiLDEwLCJcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTkiLDYsIlx1YjQ2Mlx1YjQ2NFx1YjQ2NiJd''@;'; put 'put ''LFsiOGE2MSIsIlx1YjQ2NyIsNCwiXHViNDZkIiwxOCwiXHViNDgxXHViNDgyIl0sWyI4YTgxIiwiXHViNDgzIiw0LCJcdWI0ODkiLDE5LCJcdWI0OWUiLDUsIlx1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZCIsNywiXHViNGI2XHViNGI4XHViNGJhIiw1LCJcdWI0''@;'; put 'put ''YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzkiLDYsIlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNiIsNSwiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3Iiw0LCJcdWI0ZWVcdWI0ZjBcdWI0ZjIiLDUsIlx1YjRmOSIsMjYsIlx1YjUxNlx1YjUx''@;'; put 'put ''N1x1YjUxOVx1YjUxYVx1YjUxZCJdLFsiOGI0MSIsIlx1YjUxZSIsNSwiXHViNTI2XHViNTJiIiw0LCJcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzkiLDYsIlx1YjU0Mlx1YjU0NiJdLFsiOGI2MSIsIlx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1''@;'; put 'put ''MVx1YjU1Mlx1YjU1M1x1YjU1NSIsNiwiXHViNTVlXHViNTYyIiw4XSxbIjhiODEiLCJcdWI1NmIiLDUyLCJcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjYiLDQsIlx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1''@;'; put 'put ''YjVjM1x1YjVjNSIsNiwiXHViNWNlXHViNWQyIiw1LCJcdWI1ZDkiLDE4LCJcdWI1ZWQiLDE4XSxbIjhjNDEiLCJcdWI2MDAiLDE1LCJcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTkiLDRdLFsiOGM2MSIsIlx1YjYxZSIsNiwiXHViNjI2Iiw1LCJcdWI2MmQiLDYsIlx1YjYz''@;'; put 'put ''NSIsNV0sWyI4YzgxIiwiXHViNjNiIiwxMiwiXHViNjQ5IiwyNiwiXHViNjY1XHViNjY2XHViNjY3XHViNjY5Iiw1MCwiXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1Iiw1LCJcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjIiLDE2XSxbIjhkNDEiLCJcdWI2YzMiLDE2''@;'; put 'put ''LCJcdWI2ZDUiLDhdLFsiOGQ2MSIsIlx1YjZkZSIsMTcsIlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYSJdLFsiOGQ4MSIsIlx1YjZmYiIsNCwiXHViNzAyXHViNzAzXHViNzA0XHViNzA2IiwzMywiXHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMx''@;'; put 'put ''Iiw2LCJcdWI3M2FcdWI3M2MiLDcsIlx1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZCIsNiwiXHViNzU2Iiw5LCJcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjkiLDYsIlx1Yjc3Mlx1Yjc3NFx1Yjc3NiIsNSwiXHViNzdlXHViNzdmXHVi''@;'; put 'put ''NzgxXHViNzgyXHViNzgzXHViNzg1Iiw2LCJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWUiXSxbIjhlNDEiLCJcdWI3OWZcdWI3YTEiLDYsIlx1YjdhYVx1YjdhZSIsNSwiXHViN2I2XHViN2I3XHViN2I5Iiw4XSxbIjhlNjEiLCJcdWI3YzIiLDQsIlx1''@;'; put 'put ''YjdjOFx1YjdjYSIsMTldLFsiOGU4MSIsIlx1YjdkZSIsMTMsIlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNSIsNiwiXHViN2ZlXHViODAyIiw0LCJcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTEiLDYsIlx1YjgxYVx1YjgxY1x1YjgxZSIsNSwiXHViODI2''@;'; put 'put ''XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkIiw2LCJcdWI4MzZcdWI4M2EiLDUsIlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NSIsMTEsIlx1Yjg1Mlx1Yjg1NCIsNywiXHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1Iiw2LCJcdWI4NmVcdWI4NzBcdWI4NzIiLDUsIlx1''@;'; put 'put ''Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZCIsN10sWyI4ZjQxIiwiXHViODg1Iiw3LCJcdWI4OGUiLDE3XSxbIjhmNjEiLCJcdWI4YTAiLDcsIlx1YjhhOSIsNiwiXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5Iiw0XSxbIjhmODEiLCJcdWI4YmVcdWI4YmZcdWI4YzJc''@;'; put 'put ''dWI4YzRcdWI4YzYiLDUsIlx1YjhjZFx1YjhjZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNSIsNywiXHViOGRlXHViOGUwXHViOGUyIiw1LCJcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjEiLDYsIlx1YjhmYVx1YjhmY1x1YjhmZSIsNSwiXHViOTA1IiwxOCwiXHVi''@;'; put 'put ''OTE5Iiw2LCJcdWI5MjEiLDI2LCJcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDUiLDYsIlx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1MiIsNV0sWyI5MDQxIiwiXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxIiw2LCJcdWI5NmFcdWI5NmNcdWI5NmUiLDUsIlx1''@;'; put 'put ''Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZCJdLFsiOTA2MSIsIlx1Yjk3ZSIsNSwiXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmIiwxNV0sWyI5MDgxIiwiXHViOTlmIiwxMiwiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1Iiw2LCJcdWI5YmVcdWI5''@;'; put 'put ''YzBcdWI5YzIiLDUsIlx1YjljYVx1YjljYlx1YjljZFx1YjlkMyIsNCwiXHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkIiw2LCJcdWI5ZjZcdWI5ZmIiLDQsIlx1YmEwMiIsNSwiXHViYTA5IiwxMSwiXHViYTE2IiwzMywi''@;'; put 'put ''XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2Il0sWyI5MTQxIiwiXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkIiw2LCJcdWJhNjZcdWJh''@;'; put 'put ''NmEiLDVdLFsiOTE2MSIsIlx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OSIsOSwiXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkIiw1XSxbIjkxODEiLCJcdWJhOTMiLDIwLCJcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjMiLDQsIlx1YmFi''@;'; put 'put ''YVx1YmFiY1x1YmFiZSIsNSwiXHViYWM1XHViYWM2XHViYWM3XHViYWM5IiwxNCwiXHViYWRhIiwzMywiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1Iiw3LCJcdWJiMGVcdWJiMTBcdWJiMTIiLDUsIlx1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIx''@;'; put 'put ''Zlx1YmIyMSIsNl0sWyI5MjQxIiwiXHViYjI4XHViYjJhXHViYjJjIiw3LCJcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2YiLDQsIlx1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1YmI1MiJdLFsiOTI2MSIsIlx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1N1x1YmI1OSIs''@;'; put 'put ''NywiXHViYjYyXHViYjY0Iiw3LCJcdWJiNmQiLDRdLFsiOTI4MSIsIlx1YmI3MiIsMjEsIlx1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MSIsMTgsIlx1YmJhNVx1YmJhNlx1YmJhN1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZCIsNiwiXHViYmI1XHViYmI2XHViYmI4''@;'; put 'put ''Iiw3LCJcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzkiLDYsIlx1YmJkMVx1YmJkMlx1YmJkNCIsMzUsIlx1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMSJdLFsiOTM0MSIsIlx1YmMwMyIsNCwiXHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5''@;'; put 'put ''XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1Il0sWyI5MzYxIiwiXHViYzM2XHViYzM3XHViYzM5Iiw2LCJcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJj''@;'; put 'put ''NGVcdWJjNGZcdWJjNTEiLDhdLFsiOTM4MSIsIlx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZSIsMzcsIlx1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4ZiIsNCwiXHViYzk2XHViYzk4XHViYzliIiw0LCJcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTkiLDYsIlx1YmNiMlx1''@;'; put 'put ''YmNiNiIsNSwiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1Iiw3LCJcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGQiLDIyLCJcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmQiXSxbIjk0NDEiLCJcdWJjZmUi''@;'; put 'put ''LDUsIlx1YmQwNlx1YmQwOFx1YmQwYSIsNSwiXHViZDExXHViZDEyXHViZDEzXHViZDE1Iiw4XSxbIjk0NjEiLCJcdWJkMWUiLDUsIlx1YmQyNSIsNiwiXHViZDJkIiwxMl0sWyI5NDgxIiwiXHViZDNhIiw1LCJcdWJkNDEiLDYsIlx1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1''@;'; put 'put ''MSIsNiwiXHViZDVhIiw5LCJcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjkiLDIyLCJcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGIiLDQsIlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZCIsNiwiXHViZGE1IiwxMCwiXHViZGIxIiw2LCJcdWJkYjkiLDI0XSxb''@;'; put 'put ''Ijk1NDEiLCJcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGQiLDExLCJcdWJkZWEiLDUsIlx1YmRmMSJdLFsiOTU2MSIsIlx1YmRmMlx1YmRmM1x1YmRmNVx1YmRmNlx1YmRmN1x1YmRmOSIsNiwiXHViZTAxXHViZTAyXHViZTA0XHViZTA2Iiw1LCJcdWJl''@;'; put 'put ''MGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTMiXSxbIjk1ODEiLCJcdWJlMTUiLDYsIlx1YmUxZVx1YmUyMCIsMzUsIlx1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0ZiIsNCwiXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHVi''@;'; put 'put ''ZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiIiw0LCJcdWJlNzJcdWJlNzYiLDQsIlx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4Mlx1YmU4M1x1YmU4NSIsNiwiXHViZThlXHViZTkyIiw1LCJcdWJlOWEiLDEzLCJcdWJlYTkiLDE0XSxbIjk2NDEiLCJcdWJlYjgiLDIzLCJcdWJlZDJcdWJlZDMi''@;'; put 'put ''XSxbIjk2NjEiLCJcdWJlZDVcdWJlZDZcdWJlZDkiLDYsIlx1YmVlMVx1YmVlMlx1YmVlNiIsNSwiXHViZWVkIiw4XSxbIjk2ODEiLCJcdWJlZjYiLDEwLCJcdWJmMDIiLDUsIlx1YmYwYSIsMTMsIlx1YmYxYVx1YmYxZSIsMzMsIlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0''@;'; put 'put ''OSIsNiwiXHViZjUyXHViZjUzXHViZjU0XHViZjU2Iiw0NF0sWyI5NzQxIiwiXHViZjgzIiwxNiwiXHViZjk1Iiw4XSxbIjk3NjEiLCJcdWJmOWUiLDE3LCJcdWJmYjEiLDddLFsiOTc4MSIsIlx1YmZiOSIsMTEsIlx1YmZjNiIsNSwiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHVi''@;'; put 'put ''ZmQ1Iiw2LCJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTIiLDg5LCJcdWMwM2RcdWMwM2VcdWMwM2YiXSxbIjk4NDEiLCJcdWMwNDAiLDE2LCJcdWMwNTIiLDUsIlx1YzA1OVx1YzA1YVx1YzA1YiJdLFsiOTg2MSIsIlx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MSIsNiwiXHVjMDZhIiwxNV0sWyI5''@;'; put 'put ''ODgxIiwiXHVjMDdhIiwyMSwiXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5Iiw2LCJcdWMwYTJcdWMwYTRcdWMwYTYiLDUsIlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiNyIsNCwiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNk''@;'; put 'put ''XHVjMGNlXHVjMGNmXHVjMGQxIiw2LCJcdWMwZGFcdWMwZGUiLDUsIlx1YzBlNlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZCIsNiwiXHVjMGY2XHVjMGY4XHVjMGZhIiw1LCJcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDkiLDYsIlx1YzExMVx1YzExMlx1''@;'; put 'put ''YzExM1x1YzExNFx1YzExNiIsNSwiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlIl0sWyI5OTQxIiwiXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxIiw2LCJcdWMxNGFcdWMxNGUi''@;'; put 'put ''LDUsIlx1YzE1Nlx1YzE1NyJdLFsiOTk2MSIsIlx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZCIsNiwiXHVjMTY2XHVjMTZhIiw1LCJcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2IiXSxbIjk5ODEiLCJcdWMxN2MiLDgsIlx1YzE4NiIsNSwiXHVj''@;'; put 'put ''MThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3Iiw0LCJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjEiLDExLCJcdWMxYmUiLDUsIlx1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1''@;'; put 'put ''YzFjYlx1YzFjZCIsNiwiXHVjMWQ1XHVjMWQ2XHVjMWQ5Iiw2LCJcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTkiLDYsIlx1YzFmMlx1YzFmNCIsNywiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1Iiw2LCJcdWMyMGVcdWMyMTBcdWMyMTIiLDUs''@;'; put 'put ''Ilx1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyMyJdLFsiOWE0MSIsIlx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNSIsMTZdLFsiOWE2MSIsIlx1YzI0Nlx1YzI0N1x1YzI0OSIsNiwiXHVjMjUyXHVjMjUz''@;'; put 'put ''XHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5Iiw2LCJcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjYiXSxbIjlhODEiLCJcdWMyNjciLDQsIlx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NSIsNiwiXHVjMjdlXHVjMjgwXHVjMjgyIiw1LCJcdWMyOGEiLDUsIlx1YzI5MSIs''@;'; put 'put ''NiwiXHVjMjk5XHVjMjlhXHVjMjljXHVjMjllIiw1LCJcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWUiLDUsIlx1YzJiNlx1YzJiOFx1YzJiYSIsMzMsIlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNSIsNSwiXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVj''@;'; put 'put ''MmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxIiw2LCJcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGYiXSxbIjliNDEiLCJcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWQiLDYsIlx1YzMyNlx1YzMyN1x1YzMyYSIsOF0sWyI5''@;'; put 'put ''YjYxIiwiXHVjMzMzIiwxNywiXHVjMzQ2Iiw3XSxbIjliODEiLCJcdWMzNGUiLDI1LCJcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzMiLDQsIlx1YzM3YVx1YzM3Ylx1YzM3ZSIsNSwiXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkIiw1''@;'; put 'put ''MCwiXHVjM2MxIiwyMiwiXHVjM2RhIl0sWyI5YzQxIiwiXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzIiw0LCJcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWUiLDUsIlx1YzNmNlx1YzNmN1x1YzNmOSIsNV0sWyI5YzYxIiwiXHVjM2ZmIiw4LCJcdWM0MDkiLDYsIlx1YzQxMSIsOV0sWyI5''@;'; put 'put ''YzgxIiwiXHVjNDFiIiw4LCJcdWM0MjUiLDYsIlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNSIsNiwiXHVjNDNlIiw5LCJcdWM0NDkiLDI2LCJcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmQiLDYsIlx1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YSIs''@;'; put 'put ''NSwiXHVjNDgxIiwxOCwiXHVjNDk1Iiw2LCJcdWM0OWQiLDEyXSxbIjlkNDEiLCJcdWM0YWEiLDEzLCJcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmQiLDhdLFsiOWQ2MSIsIlx1YzRjNiIsMjVdLFsiOWQ4MSIsIlx1YzRlMCIsOCwiXHVjNGVhIiw1LCJcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZc''@;'; put 'put ''dWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDIiLDksIlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNSIsNiwiXHVjNTFkIiwxMCwiXHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxIiw2LCJcdWM1M2FcdWM1M2NcdWM1M2Ui''@;'; put 'put ''LDUsIlx1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OSIsNiwiXHVjNTcyXHVjNTc2Iiw1LCJcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNc''@;'; put 'put ''dWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTQiXSxbIjllNDEiLCJcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTEiLDcsIlx1YzVhYSIsOSwiXHVjNWI2Il0sWyI5ZTYxIiwiXHVjNWI3''@;'; put 'put ''XHVjNWJhXHVjNWJmIiw0LCJcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDkiLDYsIlx1YzVlMlx1YzVlNFx1YzVlNlx1YzVlNyJdLFsiOWU4MSIsIlx1YzVlOFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1YzVmM1x1YzVm''@;'; put 'put ''NVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMSIsNiwiXHVjNjFhXHVjNjFkIiw2LCJcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2''@;'; put 'put ''MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDkiLDYsIlx1YzY1Mlx1YzY1NiIsNSwiXHVjNjVlXHVjNjVmXHVjNjYxIiwxMCwiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyIiw1LCJcdWM2N2FcdWM2N2JcdWM2N2RcdWM2''@;'; put 'put ''N2VcdWM2N2ZcdWM2ODEiLDYsIlx1YzY4YVx1YzY4Y1x1YzY4ZSIsNSwiXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkIiw2LCJcdWM2YTYiXSxbIjlmNDEiLCJcdWM2YThcdWM2YWEiLDUsIlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYiIsNCwiXHVjNmMy''@;'; put 'put ''XHVjNmM0XHVjNmM2Iiw1LCJcdWM2Y2UiXSxbIjlmNjEiLCJcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDUiLDYsIlx1YzZkZVx1YzZkZlx1YzZlMiIsNSwiXHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyIl0sWyI5ZjgxIiwiXHVjNmYzIiw0LCJcdWM2ZmFc''@;'; put 'put ''dWM2ZmJcdWM2ZmNcdWM2ZmUiLDUsIlx1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZCIsNiwiXHVjNzE2XHVjNzE4XHVjNzFhIiw1LCJcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjkiLDYsIlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1''@;'; put 'put ''YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NSIsNCwiXHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxIiw2LCJcdWM3NjlcdWM3NmFcdWM3NmMiLDcsIlx1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1''@;'; put 'put ''Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5YiIsNCwiXHVjN2EyXHVjN2E3Iiw0LCJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjciXSxbImEwNDEiLCJc''@;'; put 'put ''dWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzIiLDUsIlx1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMSIsNiwiXHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjIl0sWyJhMDYxIiwiXHVjN2RlIiw1LCJcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWQi''@;'; put 'put ''LDEzXSxbImEwODEiLCJcdWM3ZmIiLDQsIlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYiIsNCwiXHVjODEyXHVjODE0XHVjODE3Iiw0LCJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjUiLDYsIlx1YzgyZVx1YzgzMFx1YzgzMiIsNSwiXHVjODM5''@;'; put 'put ''XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxIiw2LCJcdWM4NGFcdWM4NGJcdWM4NGUiLDUsIlx1Yzg1NSIsMjYsIlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3YiIsNCwiXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlIiw1LCJc''@;'; put 'put ''dWM4OTUiLDcsIlx1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNCJdLFsiYTE0MSIsIlx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOSIsMTgsIlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMSJdLFsiYTE2MSIsIlx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1YzhjYVx1Yzhj''@;'; put 'put ''Ylx1YzhjZCIsNiwiXHVjOGQ2XHVjOGQ4XHVjOGRhIiw1LCJcdWM4ZTJcdWM4ZTNcdWM4ZTUiXSxbImExODEiLCJcdWM4ZTYiLDE0LCJcdWM4ZjYiLDUsIlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1YzkwM1x1YzkwNyIsNCwiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1''@;'; put 'put ''MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw5LCJceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUw''@;'; put 'put ''XHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5''@;'; put 'put ''MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMiJdLFsiYTI0MSIsIlx1YzkxMFx1YzkxMiIs''@;'; put 'put ''NSwiXHVjOTE5IiwxOF0sWyJhMjYxIiwiXHVjOTJkIiw2LCJcdWM5MzUiLDE4XSxbImEyODEiLCJcdWM5NDgiLDcsIlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OSIsNiwiXHVjOTYyXHVjOTY0Iiw3LCJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIy''@;'; put 'put ''MDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5''@;'; put 'put ''OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2''@;'; put 'put ''NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlIl0sWyJhMzQxIiwiXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1Iiw2LCJcdWM5N2QiLDEwLCJcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGYiXSxbImEzNjEiLCJcdWM5OTEiLDYs''@;'; put 'put ''Ilx1Yzk5YVx1Yzk5Y1x1Yzk5ZSIsMTZdLFsiYTM4MSIsIlx1YzlhZiIsMTYsIlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYiIsNCwiXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxIiw1OCwiXHVmZmU2XHVmZjNkIiwzMiwiXHVmZmUzIl0sWyJhNDQxIiwi''@;'; put 'put ''XHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyIiw1LCJcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDQiXSxbImE0NjEiLCJcdWNhMDVcdWNhMDZcdWNhMDdcdWNh''@;'; put 'put ''MGFcdWNhMGUiLDUsIlx1Y2ExNVx1Y2ExNlx1Y2ExN1x1Y2ExOSIsMTJdLFsiYTQ4MSIsIlx1Y2EyNlx1Y2EyN1x1Y2EyOFx1Y2EyYSIsMjgsIlx1MzEzMSIsOTNdLFsiYTU0MSIsIlx1Y2E0NyIsNCwiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1Iiw2LCJcdWNhNWVcdWNh''@;'; put 'put ''NjIiLDUsIlx1Y2E2OVx1Y2E2YSJdLFsiYTU2MSIsIlx1Y2E2YiIsMTcsIlx1Y2E3ZSIsNSwiXHVjYTg1XHVjYTg2Il0sWyJhNTgxIiwiXHVjYTg3IiwxNiwiXHVjYTk5IiwxNCwiXHUyMTcwIiw5XSxbImE1YjAiLCJcdTIxNjAiLDldLFsiYTVjMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0s''@;'; put 'put ''WyJhNWUxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2NDEiLCJcdWNhYTgiLDE5LCJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzUiXSxbImE2NjEiLCJcdWNhYzYiLDUsIlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYSIsNSwi''@;'; put 'put ''XHVjYWUxIiw2XSxbImE2ODEiLCJcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWQiLDYsIlx1Y2FmNSIsMTgsIlx1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1''@;'; put 'put ''MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUx''@;'; put 'put ''Zlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0MyIsN10sWyJhNzQxIiwiXHVjYjBiIiw0LCJcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVc''@;'; put 'put ''dWNiMTZcdWNiMTdcdWNiMTkiLDYsIlx1Y2IyMiIsN10sWyJhNzYxIiwiXHVjYjJhIiwyMiwiXHVjYjQyXHVjYjQzXHVjYjQ0Il0sWyJhNzgxIiwiXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxIiw2LCJcdWNiNWFcdWNiNWJcdWNiNWNcdWNi''@;'; put 'put ''NWUiLDUsIlx1Y2I2NSIsNywiXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5Iiw5LCJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjAiLDksIlx1MzM4''@;'; put 'put ''MCIsNCwiXHUzM2JhIiw1LCJcdTMzOTAiLDQsIlx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNhYlx1MzNhY1x1MzNkZFx1MzNkMFx1MzNkM1x1MzNjM1x1MzNjOVx1MzNkY1x1MzNj''@;'; put 'put ''NiJdLFsiYTg0MSIsIlx1Y2I2ZCIsMTAsIlx1Y2I3YSIsMTRdLFsiYTg2MSIsIlx1Y2I4OSIsMTgsIlx1Y2I5ZCIsNl0sWyJhODgxIiwiXHVjYmE0IiwxOSwiXHVjYmI5IiwxMSwiXHhjNlx4ZDBceGFhXHUwMTI2Il0sWyJhOGE2IiwiXHUwMTMyIl0sWyJhOGE4IiwiXHUwMTNmXHUwMTQxXHhk''@;'; put 'put ''OFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhIl0sWyJhOGIxIiwiXHUzMjYwIiwyNywiXHUyNGQwIiwyNSwiXHUyNDYwIiwxNCwiXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlIl0sWyJhOTQxIiwiXHVjYmM1IiwxNCwiXHVjYmQ1IiwxMF0sWyJhOTYx''@;'; put 'put ''IiwiXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhIiwxOF0sWyJhOTgxIiwiXHVjYmZkIiwxNCwiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1Iiw2LCJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1''@;'; put 'put ''MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMCIsMjcsIlx1MjQ5YyIsMjUsIlx1MjQ3NCIsMTQsIlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NCJdLFsiYWE0MSIs''@;'; put 'put ''Ilx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMSIsNiwiXHVjYzNhXHVjYzNmIiw0LCJcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGUiXSxbImFhNjEiLCJcdWNjNGYiLDQsIlx1Y2M1Nlx1Y2M1YSIsNSwiXHVjYzYxXHVjYzYyXHVjYzYz''@;'; put 'put ''XHVjYzY1XHVjYzY3XHVjYzY5Iiw2LCJcdWNjNzFcdWNjNzIiXSxbImFhODEiLCJcdWNjNzNcdWNjNzRcdWNjNzYiLDI5LCJcdTMwNDEiLDgyXSxbImFiNDEiLCJcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTEiLDYsIlx1Y2NhYVx1''@;'; put 'put ''Y2NhZSIsNSwiXHVjY2I2XHVjY2I3XHVjY2I5Il0sWyJhYjYxIiwiXHVjY2JhXHVjY2JiXHVjY2JkIiw2LCJcdWNjYzZcdWNjYzhcdWNjY2EiLDUsIlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNSIsNV0sWyJhYjgxIiwiXHVjY2RiIiw4LCJcdWNjZTUiLDYsIlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1''@;'; put 'put ''Y2NmMSIsMTIsIlx1MzBhMSIsODVdLFsiYWM0MSIsIlx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMiIsNSwiXHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExIiw2LCJcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjAiXSxbImFjNjEiLCJcdWNkMjFcdWNkMjJcdWNkMjNcdWNk''@;'; put 'put ''MjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmQiLDExLCJcdWNkM2EiLDRdLFsiYWM4MSIsIlx1Y2QzZiIsMjgsIlx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhY2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImFk''@;'; put 'put ''NDEiLCJcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjUiLDYsIlx1Y2Q2ZVx1Y2Q3MFx1Y2Q3MiIsNSwiXHVjZDc5Iiw3XSxbImFkNjEiLCJcdWNkODEiLDYsIlx1Y2Q4OSIsMTAsIlx1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5ZiJdLFsiYWQ4MSIsIlx1Y2Rh''@;'; put 'put ''MFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYSIsNSwiXHVjZGIxIiwxOCwiXHVjZGM1Il0sWyJhZTQxIiwiXHVjZGM2Iiw1LCJcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDEiLDE2XSxbImFlNjEiLCJcdWNkZTIiLDUsIlx1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1''@;'; put 'put ''Y2RlZlx1Y2RmMSIsNiwiXHVjZGZhXHVjZGZjXHVjZGZlIiw0XSxbImFlODEiLCJcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGQiLDYsIlx1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYSIsNSwiXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3''@;'; put 'put ''XHVjZTI5XHVjZTJhXHVjZTJiIl0sWyJhZjQxIiwiXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2IiwxOV0sWyJhZjYxIiwiXHVjZTRhIiwxMywiXHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyIiw1LCJcdWNlNmFcdWNlNmMiXSxbImFmODEiLCJcdWNlNmUi''@;'; put 'put ''LDUsIlx1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZCIsNiwiXHVjZTg2XHVjZTg4XHVjZThhIiw1LCJcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTkiXSxbImIwNDEiLCJcdWNlOWEiLDUsIlx1Y2VhMlx1Y2VhNiIsNSwiXHVjZWFlIiwxMl0sWyJiMDYxIiwi''@;'; put 'put ''XHVjZWJiIiw1LCJcdWNlYzIiLDE5XSxbImIwODEiLCJcdWNlZDYiLDEzLCJcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWQiLDYsIlx1Y2VmNlx1Y2VmYSIsNSwiXHVhYzAwXHVhYzAxXHVhYzA0XHVhYzA3XHVhYzA4XHVhYzA5XHVhYzBhXHVhYzEwIiw3LCJcdWFjMTkiLDQsIlx1YWMy''@;'; put 'put ''MFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1''@;'; put 'put ''YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNk''@;'; put 'put ''N1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNiJdLFsiYjE0MSIsIlx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOSIsNiwiXHVj''@;'; put 'put ''ZjEyXHVjZjE0XHVjZjE2Iiw1LCJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjMiXSxbImIxNjEiLCJcdWNmMjUiLDYsIlx1Y2YyZVx1Y2YzMiIsNSwiXHVjZjM5IiwxMV0sWyJiMTgxIiwiXHVjZjQ1IiwxNCwiXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVk''@;'; put 'put ''Iiw2LCJcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFk''@;'; put 'put ''NjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBc''@;'; put 'put ''dWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFl''@;'; put 'put ''NGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzgiXSxbImIyNDEiLCJcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdc''@;'; put 'put ''dWNmNzkiLDYsIlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4NiIsNSwiXHVjZjhkIl0sWyJiMjYxIiwiXHVjZjhlIiwxOCwiXHVjZmEyIiw1LCJcdWNmYTkiXSxbImIyODEiLCJcdWNmYWEiLDUsIlx1Y2ZiMSIsMTgsIlx1Y2ZjNSIsNiwiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVh''@;'; put 'put ''ZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJk''@;'; put 'put ''XHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVh''@;'; put 'put ''ZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRh''@;'; put 'put ''XHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5Il0sWyJiMzQxIiwiXHVjZmNjIiwxOSwiXHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5Il0sWyJiMzYxIiwiXHVjZmVhIiw1LCJcdWNmZjJcdWNmZjRcdWNmZjYiLDUsIlx1Y2ZmZFx1Y2ZmZVx1Y2Zm''@;'; put 'put ''Zlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNSIsNV0sWyJiMzgxIiwiXHVkMDBiIiw1LCJcdWQwMTIiLDUsIlx1ZDAxOSIsMTksIlx1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1''@;'; put 'put ''YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYiIsNCwiXHViMGIxXHViMGIzXHViMGI0XHViMGI1XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4XHViMGM5XHViMGQwXHViMGQxXHViMGQ0XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHViMTA5XHViMTBiXHViMTBjXHViMTEw''@;'; put 'put ''XHViMTEyXHViMTEzXHViMTE4XHViMTE5XHViMTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHViMTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHViMTM4XHViMTM5XHViMTQwXHViMTQxXHViMTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0XHViMTU1XHViMTU4XHViMTVjXHVi''@;'; put 'put ''MTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgwXHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThkXHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4XHViMWNjXHViMWQwXHViMWQ0XHViMWRjXHViMWRkIl0sWyJiNDQxIiwiXHVkMDJlIiw1LCJcdWQwMzZcdWQwMzdcdWQwMzlc''@;'; put 'put ''dWQwM2FcdWQwM2JcdWQwM2QiLDYsIlx1ZDA0Nlx1ZDA0OFx1ZDA0YSIsNV0sWyJiNDYxIiwiXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5Iiw2LCJcdWQwNjEiLDEwLCJcdWQwNmVcdWQwNmYiXSxbImI0ODEiLCJcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzUiLDYs''@;'; put 'put ''Ilx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4MiIsMTgsIlx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1''@;'; put 'put ''YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJk''@;'; put 'put ''MFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYiIsNCwiXHViMmYzXHViMmY0XHViMmY1XHViMmY3Iiw0LCJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIz''@;'; put 'put ''MWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjUiXSxbImI1NDEiLCJcdWQwOTUiLDE0LCJcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWQiLDVdLFsiYjU2MSIsIlx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYSIsNSwi''@;'; put 'put ''XHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhIiw1LCJcdWQwZDJcdWQwZDYiLDRdLFsiYjU4MSIsIlx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNSIsNiwiXHVkMGVlXHVkMGYyIiw1LCJcdWQwZjkiLDExLCJcdWIzNjdcdWIzNjlcdWIzNmJcdWIz''@;'; put 'put ''NmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIzZDdcdWIzZDlc''@;'; put 'put ''dWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRcdWI0YTRcdWI0''@;'; put 'put ''YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1MjRcdWI1MjVc''@;'; put 'put ''dWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzgiXSxbImI2NDEiLCJcdWQxMDUiLDcsIlx1ZDEwZSIsMTddLFsiYjY2MSIsIlx1ZDEyMCIsMTUsIlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZSJd''@;'; put 'put ''LFsiYjY4MSIsIlx1ZDEzZlx1ZDE0Mlx1ZDE0NiIsNSwiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVkMTU1Iiw2LCJcdWQxNWVcdWQxNjBcdWQxNjIiLDUsIlx1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1''@;'; put 'put ''YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVk''@;'; put 'put ''MFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1''@;'; put 'put ''YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5''@;'; put 'put ''MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5NyJdLFsiYjc0MSIsIlx1ZDE2ZSIsMTMsIlx1ZDE3ZCIsNiwiXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhIl0sWyJiNzYxIiwiXHVkMThiIiwyMCwiXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3Il0sWyJiNzgxIiwiXHVkMWE5Iiw2''@;'; put 'put ''LCJcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzEiLDE0LCJcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNc''@;'; put 'put ''dWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4''@;'; put 'put ''NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFc''@;'; put 'put ''dWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjkiXSxbImI4NDEiLCJcdWQxZDAiLDcs''@;'; put 'put ''Ilx1ZDFkOSIsMTddLFsiYjg2MSIsIlx1ZDFlYiIsOCwiXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5IiwxM10sWyJiODgxIiwiXHVkMjA4XHVkMjBhIiw1LCJcdWQyMTEiLDI0LCJcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5''@;'; put 'put ''OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2UiLDQsIlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1''@;'; put 'put ''YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2''@;'; put 'put ''OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmYyJdLFsiYjk0MSIsIlx1''@;'; put 'put ''ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNSIsNiwiXHVkMjNlXHVkMjQwXHVkMjQyIiw1LCJcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGMiXSxbImI5NjEiLCJcdWQyNGQiLDE0LCJcdWQyNWQiLDYsIlx1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OCJdLFsiYjk4''@;'; put 'put ''MSIsIlx1ZDI2OSIsMjIsIlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIz''@;'; put 'put ''Y1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1''@;'; put 'put ''YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNCIsNCwiXHViYzFiIiw0LCJcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFc''@;'; put 'put ''dWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTciXSxbImJhNDEiLCJcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTYiLDUsIlx1ZDI5''@;'; put 'put ''ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNSIsNiwiXHVkMmFkIl0sWyJiYTYxIiwiXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyIiw1LCJcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzMiLDQsIlx1ZDJjYVx1ZDJjYyIsNV0sWyJiYTgxIiwiXHVkMmQyXHVk''@;'; put 'put ''MmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRhXHVkMmRiXHVkMmRkIiw2LCJcdWQyZTYiLDksIlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1''@;'; put 'put ''YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0''@;'; put 'put ''OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1''@;'; put 'put ''YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2''@;'; put 'put ''MVx1YmU2NCJdLFsiYmI0MSIsIlx1ZDJmYiIsNCwiXHVkMzAyXHVkMzA0XHVkMzA2Iiw1LCJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTciLDQsIlx1ZDMxZVx1ZDMyMlx1ZDMyMyJdLFsiYmI2MSIsIlx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMy''@;'; put 'put ''ZVx1ZDMyZlx1ZDMzMSIsNiwiXHVkMzNhXHVkMzNlIiw1LCJcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDkiXSxbImJiODEiLCJcdWQzNGEiLDMxLCJcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJl''@;'; put 'put ''OGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRc''@;'; put 'put ''dWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMw''@;'; put 'put ''YTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTQiXSxbImJjNDEiLCJc''@;'; put 'put ''dWQzNmEiLDE3LCJcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODciXSxbImJjNjEiLCJcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTIiLDUsIlx1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMSIsNiwiXHVkM2FhXHVkM2Fj''@;'; put 'put ''XHVkM2FlIl0sWyJiYzgxIiwiXHVkM2FmIiw0LCJcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmQiLDYsIlx1ZDNjNlx1ZDNjN1x1ZDNjYSIsNSwiXHVkM2QxIiw1LCJcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRc''@;'; put 'put ''dWMxMDhcdWMxMTBcdWMxMTVcdWMxMWMiLDQsIlx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1''@;'; put 'put ''Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1''@;'; put 'put ''YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZCJdLFsi''@;'; put 'put ''YmQ0MSIsIlx1ZDNkN1x1ZDNkOSIsNywiXHVkM2UyXHVkM2U0Iiw3LCJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjciXSxbImJkNjEiLCJcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDIiLDUsIlx1ZDQwOSIsMTNdLFsiYmQ4''@;'; put 'put ''MSIsIlx1ZDQxNyIsNSwiXHVkNDFlIiwyNSwiXHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4''@;'; put 'put ''XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVj''@;'; put 'put ''MzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4''@;'; put 'put ''XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwIl0sWyJiZTQxIiwiXHVkNDM4Iiw3LCJcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDUiLDE0XSxbImJlNjEiLCJcdWQ0NTQi''@;'; put 'put ''LDcsIlx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NSIsNywiXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyIl0sWyJiZTgxIiwiXHVkNDczIiw0LCJcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODMiLDQsIlx1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZSIsNSwiXHVk''@;'; put 'put ''NDk1Iiw4LCJcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNc''@;'; put 'put ''dWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1''@;'; put 'put ''NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1Yjlc''@;'; put 'put ''dWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzQiLDYsIlx1YzVjY1x1YzVjZSJdLFsiYmY0MSIsIlx1ZDQ5ZSIsMTAsIlx1ZDRhYSIsMTRdLFsiYmY2MSIsIlx1ZDRiOSIsMTgsIlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNSJdLFsiYmY4MSIsIlx1ZDRkNiIs''@;'; put 'put ''NSwiXHVkNGRkXHVkNGRlXHVkNGUwIiw3LCJcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjEiLDYsIlx1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1''@;'; put 'put ''YzVmNFx1YzVmNlx1YzVmN1x1YzVmYyIsNSwiXHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVjNjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVjNjJkXHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVjNjM5XHVjNjNi''@;'; put 'put ''XHVjNjQwXHVjNjQxXHVjNjQ0XHVjNjQ4XHVjNjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcxXHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgwXHVjNjg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4XHVjNjljXHVj''@;'; put 'put ''NmE0XHVjNmE1XHVjNmE3XHVjNmE5XHVjNmIwXHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVjNmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVjNmRkXHVjNmUwXHVjNmUxXHVjNmU4Il0sWyJjMDQxIiwiXHVkNGZlIiw1LCJcdWQ1MDVc''@;'; put 'put ''dWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGQiLDYsIlx1ZDUxNlx1ZDUxOCIsNV0sWyJjMDYxIiwiXHVkNTFlIiwyNV0sWyJjMDgxIiwiXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1Iiw2LCJcdWQ1NGVcdWQ1NTBc''@;'; put 'put ''dWQ1NTIiLDUsIlx1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1Yzcy''@;'; put 'put ''OFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MSIsNywiXHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVj''@;'; put 'put ''Nzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2Mx''@;'; put 'put ''XHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhIl0sWyJjMTQxIiwiXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlIiw1LCJcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1''@;'; put 'put ''N2FcdWQ1N2JcdWQ1N2QiLDYsIlx1ZDU4Nlx1ZDU4YVx1ZDU4YiJdLFsiYzE2MSIsIlx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MSIsMTksIlx1ZDVhNlx1ZDVhNyJdLFsiYzE4MSIsIlx1ZDVhOCIsMzEsIlx1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1''@;'; put 'put ''YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4''@;'; put 'put ''ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1''@;'; put 'put ''YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1Yzlj''@;'; put 'put ''OFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkMyJdLFsiYzI0MSIsIlx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkMyIsNCwiXHVkNWRhXHVkNWRjXHVkNWRlIiw1LCJcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWUiXSxbImMyNjEiLCJcdWQ1''@;'; put 'put ''ZWYiLDQsIlx1ZDVmNlx1ZDVmOFx1ZDVmYSIsNSwiXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5Iiw2LCJcdWQ2MTIiXSxbImMyODEiLCJcdWQ2MTYiLDUsIlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNSIsNywiXHVkNjJlIiw5LCJcdWQ2M2Fc''@;'; put 'put ''dWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNh''@;'; put 'put ''MjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRc''@;'; put 'put ''dWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNj''@;'; put 'put ''MWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2IiXSxbImMzNDEiLCJcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZc''@;'; put 'put ''dWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWQiLDRdLFsiYzM2MSIsIlx1ZDY2MiIsNCwiXHVkNjY4XHVkNjZhIiw1LCJcdWQ2NzJcdWQ2NzNcdWQ2NzUiLDExXSxbImMzODEiLCJcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODYiLDUsIlx1ZDY4ZVx1''@;'; put 'put ''ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NSIsNywiXHVkNjllXHVkNmEwXHVkNmEyIiw1LCJcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhc''@;'; put 'put ''dWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNk''@;'; put 'put ''MGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBc''@;'; put 'put ''dWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzUiXSxbImM0NDEiLCJcdWQ2YWJcdWQ2YWRcdWQ2''@;'; put 'put ''YWVcdWQ2YWZcdWQ2YjEiLDcsIlx1ZDZiYVx1ZDZiYyIsNywiXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiIl0sWyJjNDYxIiwiXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhIiw1LCJcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2''@;'; put 'put ''ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTkiLDRdLFsiYzQ4MSIsIlx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNiIsNSwiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1IiwxMSwiXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVm''@;'; put 'put ''XHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVj''@;'; put 'put ''ZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1''@;'; put 'put ''XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVk''@;'; put 'put ''MDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjIl0sWyJjNTQxIiwiXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVkNzFkXHVkNzFlXHVkNzFmXHVkNzIxIiw2LCJcdWQ3MmFcdWQ3MmNcdWQ3MmUiLDUsIlx1ZDczNlx1ZDczN1x1ZDczOSJdLFsiYzU2''@;'; put 'put ''MSIsIlx1ZDczYVx1ZDczYlx1ZDczZCIsNiwiXHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhIiw1LCJcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWEiLDRdLFsiYzU4MSIsIlx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3''@;'; put 'put ''MVx1ZDc3Mlx1ZDc3M1x1ZDc3NSIsNiwiXHVkNzdlXHVkNzdmXHVkNzgwXHVkNzgyIiw1LCJcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQw''@;'; put 'put ''YTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRc''@;'; put 'put ''dWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQx''@;'; put 'put ''YjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWMiXSxbImM2NDEiLCJcdWQ3OGRcdWQ3OGVcdWQ3OGZc''@;'; put 'put ''dWQ3OTEiLDYsIlx1ZDc5YVx1ZDc5Y1x1ZDc5ZSIsNV0sWyJjNmExIiwiXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVk''@;'; put 'put ''MmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4''@;'; put 'put ''XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVk''@;'; put 'put ''M2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxIl0sWyJjN2ExIiwiXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0''@;'; put 'put ''XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVk''@;'; put 'put ''NTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3''@;'; put 'put ''XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVk''@;'; put 'put ''NjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwIl0sWyJjOGExIiwiXHVkNjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0XHVkNjU1XHVkNjU4XHVkNjVjXHVkNjY3XHVkNjY5XHVkNjcwXHVkNjcxXHVkNjc0''@;'; put 'put ''XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVkNjkwXHVkNjk0XHVkNjlkXHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVkNmQ0XHVkNmQ3XHVkNmQ5XHVkNmUwXHVkNmU0XHVkNmU4XHVkNmYwXHVkNmY1XHVk''@;'; put 'put ''NmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzExXHVkNzE4XHVkNzE5XHVkNzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5XHVkNzUwXHVkNzUxXHVkNzU0XHVkNzU2XHVkNzU3XHVkNzU4XHVkNzU5XHVkNzYw''@;'; put 'put ''XHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVkNzZjXHVkNzcwXHVkNzc0XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkIl0sWyJjYWExIiwiXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1''@;'; put 'put ''NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJj''@;'; put 'put ''XHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4''@;'; put 'put ''YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNh''@;'; put 'put ''XHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1Il0sWyJjYmExIiwiXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3''@;'; put 'put ''ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3''@;'; put 'put ''XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1''@;'; put 'put ''MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyIl0sWyJjY2ExIiwiXHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1MDQ4XHU2MWE5''@;'; put 'put ''XHU2M2VkXHU2NGNhXHU2ODNjXHU2YTg0XHU2ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZkXHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdjXHU2MTRhXHU3''@;'; put 'put ''YjlkXHU4YjE5XHU5MjU3XHU5MzhjXHU0ZWFjXHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZjXHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3MGYxXHU3NDlm''@;'; put 'put ''XHU3NGE1XHU3NGNhXHU3NWQ5XHU3ODZjXHU3OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYzXHU1YzQ2XHU2''@;'; put 'put ''MGI4XHU2MjEyXHU2ODQyXHU2OGIwIl0sWyJjZGExIiwiXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1YjY0XHU1YzNi''@;'; put 'put ''XHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4ZjljXHU5MzJlXHU5''@;'; put 'put ''NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1MTcxXHU1Mjlm''@;'; put 'put ''XHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjIl0sWyJjZWExIiwiXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1''@;'; put 'put ''ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIx''@;'; put 'put ''XHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1''@;'; put 'put ''MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3''@;'; put 'put ''XHU0ZmYxXHU1MTc3XHU1MmZlIl0sWyJjZmExIiwiXHU1MzQwXHU1M2UzXHU1M2U1XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2N2U5XHU2OWNiXHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlkXHU3MDc4XHU3''@;'; put 'put ''MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5XHU3YTc2XHU3ZDdmXHU4MDA5XHU4MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2XHU5OWQyXHU5YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1YzQwXHU4M2Nh''@;'; put 'put ''XHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3YTk4XHU3ZmE0XHU4OGQ5XHU4ZWNkXHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1MDI2XHU1MjM4XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2MzcyXHU2YjBhXHU2''@;'; put 'put ''ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4XHU4ZTc2XHU5NWQ1XHU2NzNhXHU2YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0Il0sWyJkMGExIiwiXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1''@;'; put 'put ''XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2''@;'; put 'put ''NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2Nh''@;'; put 'put ''XHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2''@;'; put 'put ''MjgwXHU2NWQ3XHU2NWUzIl0sWyJkMWExIiwiXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4''@;'; put 'put ''XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1''@;'; put 'put ''MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlIiw1LCJcdTkwYTNcdWY5MTQiLDQsIlx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1''@;'; put 'put ''ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNSJdLFsiZDJhMSIsIlx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOCIsNCwiXHU0ZTQzXHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1OTczXHU1ZTc0''@;'; put 'put ''XHU2NDlhXHU3OWNhXHU1ZmY1XHU2MDZjXHU2MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVmOTMzIiw1LCJcdTk5ZDFcdWY5MzkiLDEwLCJcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYw''@;'; put 'put ''ZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGEiLDcsIlx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1MiIsNSwiXHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1MzNmXHU2ZWJhXHU1OTFhXHU4MzM2Il0sWyJkM2ExIiwiXHU0ZTM5XHU0ZWI2XHU0''@;'; put 'put ''ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3''@;'; put 'put ''XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5''@;'; put 'put ''ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYw''@;'; put 'put ''XHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzIl0sWyJkNGExIiwiXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5''@;'; put 'put ''MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZk''@;'; put 'put ''XHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5''@;'; put 'put ''MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1Il0sWyJkNWExIiwiXHU4NjNmXHU4N2JhXHU4OGY4''@;'; put 'put ''XHU5MDhmXHVmOTVjXHU2ZDFiXHU3MGQ5XHU3M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0XHU2YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmViXHU3YzQzXHU3''@;'; put 'put ''ZTljXHU4NWNkXHU4OTY0XHU4OWJkXHU2MmM5XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5MGRlXHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2ODgxXHU2YTEx''@;'; put 'put ''XHU3Y2FlXHU3Y2IxXHU3Y2U3XHU4MjZmXHU4YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNlXHU2NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1MjliXHU2NmM2XHU2''@;'; put 'put ''Yjc3XHU3MDFkXHU3OTJiXHU4ZjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzIl0sWyJkNmExIiwiXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFl''@;'; put 'put ''XHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVm''@;'; put 'put ''OTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3''@;'; put 'put ''XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjIl0sWyJkN2ExIiwiXHU5MDdjXHU5YjI3XHU5ZjhkXHU1''@;'; put 'put ''OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZk''@;'; put 'put ''XHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1''@;'; put 'put ''YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEz''@;'; put 'put ''XHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjIl0sWyJkOGExIiwiXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5YjU0XHU5ZWJiXHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2FiXHU5MDg4XHU0''@;'; put 'put ''ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRlXHU2MTYyXHU2MzNkXHU2NjY5XHU2NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFjXHU2MmI5XHU2NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0ZWExXHU1OTg0''@;'; put 'put ''XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3ZjU0XHU4MjkyXHU4MzJiXHU4M2JkXHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3Zjc1XHU4Y2I3XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4YzhhXHU5NjRjXHU5''@;'; put 'put ''YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFiXHU3NmYyXHU3NmRmXHU4NDBjXHU1MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWI1XHU2ZWM1Il0sWyJkOWExIiwiXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdk''@;'; put 'put ''XHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3''@;'; put 'put ''MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0''@;'; put 'put ''XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5''@;'; put 'put ''ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3Il0sWyJkYWExIiwiXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2''@;'; put 'put ''XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1''@;'; put 'put ''MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMz''@;'; put 'put ''XHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxIl0sWyJkYmExIiwiXHU3NjdjXHU4ZGNiXHU5MWIxXHU5MjYyXHU5''@;'; put 'put ''YWVlXHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRhXHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFhXHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4YjE3XHU5MGE2''@;'; put 'put ''XHU5NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVmOTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRhXHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2NmXHU2ODIyXHU3''@;'; put 'put ''NjdkXHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBhXHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2Y2Q1XHU3NDNh''@;'; put 'put ''XHU1MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2YTk3XHU3NGE3XHU3NjU2Il0sWyJkY2ExIiwiXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1''@;'; put 'put ''YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEz''@;'; put 'put ''XHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2''@;'; put 'put ''OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2Il0sWyJkZGExIiwiXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2''@;'; put 'put ''XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1''@;'; put 'put ''MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRh''@;'; put 'put ''XHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3''@;'; put 'put ''ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1Il0sWyJkZWExIiwiXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRiXHU5ZjNiXHU1NmFjXHU1YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2YmFmXHU2ZDVj''@;'; put 'put ''XHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4Y2E3XHU4Y2QzXHU5ODNiXHU2MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1MGZmXHU1M2YyXHU1M2Y4XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGViXHU1OTYyXHU1''@;'; put 'put ''YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYzXHU1ZTJiXHU1Zjk5XHU2MDFkXHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNlXHU3OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3ZDE3XHU3ZDcy''@;'; put 'put ''XHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4NmM3XHU4OGRmXHU4YTUwXHU4YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVmOTZhIl0sWyJkZmExIiwiXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3''@;'; put 'put ''M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFm''@;'; put 'put ''XHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1''@;'; put 'put ''ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYy''@;'; put 'put ''XHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyIl0sWyJlMGExIiwiXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3''@;'; put 'put ''N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5''@;'; put 'put ''XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4''@;'; put 'put ''ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjIl0sWyJlMWExIiwiXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5MTkyXHU0ZTE2''@;'; put 'put ''XHU1MmUyXHU2YjcyXHU2ZDE3XHU3YTA1XHU3YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBmXHU1YzExXHU1ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQyXHU3NTI2XHU3''@;'; put 'put ''NThmXHU3NThlXHU3NjE5XHU3YjExXHU3YmUwXHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5MDYxXHU5MGI1XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZjXHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5MDFmXHU1YjZi''@;'; put 'put ''XHU1ZGZkXHU2NDBkXHU4NGMwXHU5MDVjXHU5OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAxXHU5ODBjXHU1MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1NzgyXHU1OGZkXHU1''@;'; put 'put ''YWMyXHU1Yjg4XHU1Y2FiXHU1Y2MwXHU1ZTI1XHU2MTAxIl0sWyJlMmExIiwiXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3''@;'; put 'put ''XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5''@;'; put 'put ''YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2Fj''@;'; put 'put ''XHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3Il0sWyJlM2ExIiwiXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3''@;'; put 'put ''ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2Jl''@;'; put 'put ''XHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5''@;'; put 'put ''OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2''@;'; put 'put ''XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxIl0sWyJlNGExIiwiXHVmOTcyXHU2ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0ZmM0XHU1MTUyXHU1NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5XHU4MmJkXHU4''@;'; put 'put ''M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNmXHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVkXHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0XHU5ODRlXHU5YzEwXHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2NjRmXHU2ODQ4''@;'; put 'put ''XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3MmNlXHU5ZDI4XHU0ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2YjgzXHU3OWU3XHU5''@;'; put 'put ''ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhkXHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkIl0sWyJlNWExIiwiXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2''@;'; put 'put ''XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2''@;'; put 'put ''Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTll''@;'; put 'put ''XHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVm''@;'; put 'put ''OTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyIl0sWyJlNmExIiwiXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5''@;'; put 'put ''XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2''@;'; put 'put ''ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTll''@;'; put 'put ''XHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyIl0sWyJlN2ExIiwiXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3XHU3MWMxXHU4''@;'; put 'put ''NDQ5XHVmOWE4XHVmOWE5XHU1ODRiXHVmOWFhXHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJmXHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3NGQ0XHU3NmM4''@;'; put 'put ''XHU3YTRlXHU3ZTkzXHVmOWFmXHVmOWIwXHU4MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVmOWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRkXHU4NjAyXHVm''@;'; put 'put ''OWI2XHU4OGQ0XHU4YTYzXHU4YjdkXHU4YzZiXHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNlXHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJhXHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2NTU2XHU2NWZm''@;'; put 'put ''XHU2NjY0XHU2OGE3XHU2YzVhXHU2ZmIzIl0sWyJlOGExIiwiXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2''@;'; put 'put ''NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmVi''@;'; put 'put ''XHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1''@;'; put 'put ''OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxIl0sWyJlOWExIiwiXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2Vm''@;'; put 'put ''XHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3''@;'; put 'put ''NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkx''@;'; put 'put ''XHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3''@;'; put 'put ''MTg5XHU4MDE4XHU4MmI4XHU4NTUzIl0sWyJlYWExIiwiXHU5MDRiXHU5Njk1XHU5NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEyXHU1N2EzXHU1YTliXHU1YWM0XHU1YmMzXHU2MDI4XHU2MTNmXHU2M2Y0XHU2Yzg1''@;'; put 'put ''XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3MzNmXHU3NDU3XHU4MmQxXHU4ODgxXHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1MGRlXHU1MzcxXHU1NzBkXHU1OWQ0XHU1YTAxXHU1YzA5XHU2MTcwXHU2NjkwXHU2''@;'; put 'put ''ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMzXHU4NDBlXHU4NDY2XHU4NTNmXHU4NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3XHU1NTJmXHU1NWE5XHU1YjdhXHU1YmE1XHU1ZTdjXHU1ZTdkXHU1ZWJlXHU2MGEw''@;'; put 'put ''XHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2NTM4XHU2NzA5XHVmOWM4XHU2N2Q0XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiIl0sWyJlYmExIiwiXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVm''@;'; put 'put ''OWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZi''@;'; put 'put ''XHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0''@;'; put 'put ''ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThm''@;'; put 'put ''XHU4N2ZiXHU4ODYzXHU4YWJjIl0sWyJlY2ExIiwiXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3''@;'; put 'put ''NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMx''@;'; put 'put ''XHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2''@;'; put 'put ''ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0Il0sWyJlZGExIiwiXHVmOWY3XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0ZWQ0XHU1MjNh''@;'; put 'put ''XHU1NGE4XHU1OWM5XHU1OWZmXHU1YjUwXHU1YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3Mzg2XHU3NGY3XHU3NWI1XHU3OGMxXHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZhXHU1NmJjXHU2''@;'; put 'put ''NWFiXHU2NjI4XHU3MDdjXHU3MGI4XHU3MjM1XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJhXHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1OGJiXHU1OGVm''@;'; put 'put ''XHU1OTZjXHU1YzA3XHU1ZTMzXHU1ZTg0XHU1ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2ZjNmXHU3MjQ2XHVmOWZhXHU3MzUwXHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNmXHU4OGRkXHU4''@;'; put 'put ''ZDEzXHU5MWFjXHU5NTc3Il0sWyJlZWExIiwiXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3''@;'; put 'put ''XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1''@;'; put 'put ''MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIz''@;'; put 'put ''XHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxIl0sWyJlZmExIiwiXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3''@;'; put 'put ''YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzEx''@;'; put 'put ''XHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2''@;'; put 'put ''YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIw''@;'; put 'put ''XHU5NzA2XHU5NzU2Il0sWyJmMGExIiwiXHU5NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1MjkxXHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZkXHU3YjJjXHU4MWNkXHU4NWJhXHU4OGZkXHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0XHU5NjliXHU5''@;'; put 'put ''NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2OGQ3XHU2OWZkXHU2ZjE1XHU2ZjZlXHU3MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3NzNhXHU3OTU2''@;'; put 'put ''XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUzXHU5NjNiXHU5NmQ1XHU5Y2U1XHU2NWNmXHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4XHU1YzBhXHU1''@;'; put 'put ''MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiIl0sWyJmMWExIiwiXHU4ZTJhXHU4ZTM1XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZh''@;'; put 'put ''XHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3''@;'; put 'put ''ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZm''@;'; put 'put ''XHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0''@;'; put 'put ''ZTRiXHU1M2VhIl0sWyJmMmExIiwiXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYz''@;'; put 'put ''XHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3''@;'; put 'put ''NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2''@;'; put 'put ''XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmIl0sWyJmM2ExIiwiXHU5M2Y2XHU5NmM2XHU1ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1MDFmXHU1M2M5XHU1NWRmXHU1''@;'; put 'put ''ZDZmXHU1ZGVlXHU2YjIxXHU2YjY0XHU3OGNiXHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgyXHU3Y2IyXHU3ZTk4XHU4Yjlh''@;'; put 'put ''XHU4ZDBhXHU5NDdkXHU5OTEwXHU5OTRjXHU1MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFjXHU3YWQ5XHU4YjkyXHU4Yjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1ZWUwXHU1ZjcwXHU2MTM0XHU2''@;'; put 'put ''NTVlXHU2NjBjXHU2NjM2XHU2NmEyXHU2OWNkXHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1YmMwXHU1YmU4XHU1ZjY5XHU2M2ExXHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3XHU5MWY1XHU1MThhXHU2N2Y1''@;'; put 'put ''XHU3YjU2Il0sWyJmNGExIiwiXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1''@;'; put 'put ''ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2Jl''@;'; put 'put ''XHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2''@;'; put 'put ''NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyIl0sWyJmNWExIiwiXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2''@;'; put 'put ''XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4''@;'; put 'put ''NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2''@;'; put 'put ''XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4''@;'; put 'put ''NDAzIl0sWyJmNmExIiwiXHU4ZDA1XHU1M2Q2XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMxXHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0XHU1M2EwXHU2MGZiXHU2ZTJjXHU1YzY0XHU0Zjg4XHU1MDI0XHU1NWU0XHU1Y2Q5''@;'; put 'put ''XHU1ZTVmXHU2MDY1XHU2ODk0XHU2Y2JiXHU2ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5ZjUyXHU1MjQ3XHU1MmM1XHU5OGVkXHU4OWFhXHU0ZTAzXHU2N2QyXHU2ZjA2XHU0''@;'; put 'put ''ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4XHU2ZDc4XHU3NDFiXHU3ODI3XHU5MWRkXHU5MzdjXHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUzXHU2MmQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OWIxXHU5OWRkXHU1MDJj''@;'; put 'put ''XHU1MzUzXHU1NTQ0XHU1NzdjXHVmYTAxXHU2MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3Il0sWyJmN2ExIiwiXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1''@;'; put 'put ''OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIx''@;'; put 'put ''XHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5''@;'; put 'put ''YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjEx''@;'; put 'put ''Il0sWyJmOGExIiwiXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3''@;'; put 'put ''ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAz''@;'; put 'put ''XHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0''@;'; put 'put ''ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzIl0sWyJmOWExIiwiXHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3NmFlXHU4OGFi''@;'; put 'put ''XHU5MDdmXHU5NjQyXHU1MzM5XHU1ZjNjXHU1ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUwXHU5NzFlXHU5''@;'; put 'put ''YzE1XHU1OGQxXHU1Yjc4XHU4NjUwXHU4YjE0XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N2QzXHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1NThhXHU2YWJi''@;'; put 'put ''XHU2ZGI1XHU3ZGQ4XHU4MjY2XHU5MjljXHU5Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDliXHU4MjJhIl0s''@;'; put 'put ''WyJmYWExIiwiXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRm''@;'; put 'put ''XHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1''@;'; put 'put ''Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNl''@;'; put 'put ''XHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiIl0sWyJmYmExIiwiXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5''@;'; put 'put ''MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNm''@;'; put 'put ''XHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2''@;'; put 'put ''MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1Il0sWyJm''@;'; put 'put ''Y2ExIiwiXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3''@;'; put 'put ''NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMx''@;'; put 'put ''XHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3''@;'; put 'put ''MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2Il0sWyJmZGExIiwiXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1Zjhj''@;'; put 'put ''XHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4''@;'; put 'put ''YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2''@;'; put 'put ''XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwIl1dJyl9LDcy''@;'; put 'put ''MzI0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyJhMTQwIiwiXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUx''@;'; put 'put ''XHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAx''@;'; put 'put ''MVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YSJdLFsiYTFhMSIsIlx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1''@;'; put 'put ''MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVc''@;'; put 'put ''eGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYy''@;'; put 'put ''Iiw0LCJcdWZmNWVcdTIyMjlcdTIyMmFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIy''@;'; put 'put ''MjNcdWZmMGYiXSxbImEyNDAiLCJcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRc''@;'; put 'put ''eGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxIiw3LCJcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVc''@;'; put 'put ''dTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmQiXSxbImEyYTEiLCJcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTAiLDksIlx1MjE2MCIsOSwiXHUzMDIxIiw4LCJcdTUzNDFc''@;'; put 'put ''dTUzNDRcdTUzNDVcdWZmMjEiLDI1LCJcdWZmNDEiLDIxXSxbImEzNDAiLCJcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTEiLDE2LCJcdTAzYTMiLDYsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNiwiXHUzMTA1IiwxMF0sWyJhM2ExIiwiXHUzMTEwIiwyNSwiXHUwMmQ5XHUwMmM5XHUwMmNh''@;'; put 'put ''XHUwMmM3XHUwMmNiIl0sWyJhM2UxIiwiXHUyMGFjIl0sWyJhNDQwIiwiXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0''@;'; put 'put ''ZTA5XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4''@;'; put 'put ''XHU1YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkIl0sWyJhNGExIiwiXHU0ZTExXHU0ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0''@;'; put 'put ''ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMxXHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2''@;'; put 'put ''XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2''@;'; put 'put ''MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3Mzhi''@;'; put 'put ''XHU0ZTE5Il0sWyJhNTQwIiwiXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1''@;'; put 'put ''MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2Vi''@;'; put 'put ''XHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2Il0sWyJhNWExIiwiXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1''@;'; put 'put ''ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRj''@;'; put 'put ''XHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0''@;'; put 'put ''ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4Il0sWyJhNjQwIiwiXHU1MTcx''@;'; put 'put ''XHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1''@;'; put 'put ''NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5''@;'; put 'put ''XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0Il0sWyJhNmExIiwiXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2''@;'; put 'put ''NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2''@;'; put 'put ''XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0''@;'; put 'put ''ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzIl0sWyJhNzQwIiwiXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2''@;'; put 'put ''XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRjXHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1''@;'; put 'put ''NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRh''@;'; put 'put ''XHU1NzUxXHU1NzQwXHU1NzRkIl0sWyJhN2ExIiwiXHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1''@;'; put 'put ''YjVhXHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNj''@;'; put 'put ''XHU1ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2''@;'; put 'put ''Mjg2XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwIl0sWyJhODQwIiwiXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4''@;'; put 'put ''XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3''@;'; put 'put ''MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyIl0sWyJh''@;'; put 'put ''OGExIiwiXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5''@;'; put 'put ''MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1''@;'; put 'put ''XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1''@;'; put 'put ''MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1Il0sWyJhOTQwIiwiXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2''@;'; put 'put ''XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1''@;'; put 'put ''OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1Il0sWyJhOWExIiwiXHU1YzQ2XHU1Y2I3XHU1Y2Ex''@;'; put 'put ''XHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1''@;'; put 'put ''ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQy''@;'; put 'put ''XHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2''@;'; put 'put ''NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhIl0sWyJhYTQwIiwiXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5''@;'; put 'put ''XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2''@;'; put 'put ''Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwIl0sWyJhYWExIiwiXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJk''@;'; put 'put ''XHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3''@;'; put 'put ''OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJk''@;'; put 'put ''XHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5''@;'; put 'put ''NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0Il0sWyJhYjQwIiwiXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNh''@;'; put 'put ''XHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1''@;'; put 'put ''MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxIl0sWyJhYmExIiwiXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1Nzgy''@;'; put 'put ''XHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1''@;'; put 'put ''YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5''@;'; put 'put ''XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2''@;'; put 'put ''MmY3Il0sWyJhYzQwIiwiXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0''@;'; put 'put ''XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2''@;'; put 'put ''YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3Il0sWyJhY2ExIiwiXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFi''@;'; put 'put ''XHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3''@;'; put 'put ''NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2''@;'; put 'put ''XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0Il0sWyJhZDQwIiwiXHU4MDEwXHU4''@;'; put 'put ''MDBkXHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQy''@;'; put 'put ''XHU4MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4''@;'; put 'put ''ZWNkXHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4ZmVhXHU4ZmU1Il0sWyJhZGExIiwiXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNkXHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2Ni''@;'; put 'put ''XHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRiXHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1''@;'; put 'put ''MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNjXHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJh''@;'; put 'put ''XHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1NGVhIl0sWyJhZTQwIiwiXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1''@;'; put 'put ''NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIz''@;'; put 'put ''XHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1''@;'; put 'put ''ZjkxXHU1ZjkwXHU2MDU5Il0sWyJhZWExIiwiXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1''@;'; put 'put ''XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2''@;'; put 'put ''NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5''@;'; put 'put ''XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzIl0sWyJhZjQwIiwiXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2''@;'; put 'put ''ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5''@;'; put 'put ''XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3Il0sWyJhZmEx''@;'; put 'put ''IiwiXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5''@;'; put 'put ''XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4''@;'; put 'put ''MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUw''@;'; put 'put ''XHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzIl0sWyJiMDQwIiwiXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4''@;'; put 'put ''ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAw''@;'; put 'put ''XHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5NjYyXHU5NjYzXHU5NjYxIl0sWyJiMGExIiwiXHU5NjViXHU5NjVkXHU5NjY0XHU5''@;'; put 'put ''NjU4XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFjXHU5YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBm''@;'; put 'put ''XHU1MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1MWYwXHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1''@;'; put 'put ''NTMxXHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJmXHU1NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5''@;'; put 'put ''XHU1OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1YTQ5XHU1YTY2XHU1YTZhXHU1YTQwIl0sWyJiMTQwIiwiXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1''@;'; put 'put ''YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZj''@;'; put 'put ''XHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkIl0sWyJiMWExIiwiXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2''@;'; put 'put ''MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5''@;'; put 'put ''XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2''@;'; put 'put ''NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlm''@;'; put 'put ''XHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhIl0sWyJiMjQwIiwiXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2''@;'; put 'put ''ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3Mjgx''@;'; put 'put ''XHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2Il0sWyJiMmExIiwiXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3''@;'; put 'put ''NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFl''@;'; put 'put ''XHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4''@;'; put 'put ''MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4Mzdj''@;'; put 'put ''Il0sWyJiMzQwIiwiXHU4Mzg2XHU4M2E3XHU4NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4''@;'; put 'put ''YTFkXHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFm''@;'; put 'put ''XHU5MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0Il0sWyJiM2ExIiwiXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5''@;'; put 'put ''Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlh''@;'; put 'put ''XHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1''@;'; put 'put ''NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwIl0sWyJiNDQwIiwiXHU1YTc3XHU1YTlh''@;'; put 'put ''XHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1''@;'; put 'put ''ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2Mzhj''@;'; put 'put ''XHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkIl0sWyJiNGExIiwiXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2''@;'; put 'put ''NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYy''@;'; put 'put ''XHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2''@;'; put 'put ''ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiIl0sWyJiNTQwIiwiXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcy''@;'; put 'put ''XHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3''@;'; put 'put ''NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1''@;'; put 'put ''XHU3YTAwXHU3YTk4Il0sWyJiNWExIiwiXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3''@;'; put 'put ''ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBk''@;'; put 'put ''XHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4''@;'; put 'put ''NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxIl0sWyJiNjQwIiwiXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4Yzgy''@;'; put 'put ''XHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5''@;'; put 'put ''MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxIl0sWyJiNmExIiwi''@;'; put 'put ''XHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5NjhlXHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5''@;'; put 'put ''OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJm''@;'; put 'put ''XHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNlXHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1''@;'; put 'put ''ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjIl0sWyJiNzQwIiwiXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFh''@;'; put 'put ''XHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2''@;'; put 'put ''NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkIl0sWyJiN2ExIiwiXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0''@;'; put 'put ''XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2''@;'; put 'put ''ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4''@;'; put 'put ''XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3''@;'; put 'put ''NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzIl0sWyJiODQwIiwiXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdm''@;'; put 'put ''XHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3''@;'; put 'put ''ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiIl0sWyJiOGExIiwiXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNk''@;'; put 'put ''XHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4''@;'; put 'put ''NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYy''@;'; put 'put ''XHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4''@;'; put 'put ''ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhIl0sWyJiOTQwIiwiXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5''@;'; put 'put ''XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNkXHU5MjQwXHU5MjNlXHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5''@;'; put 'put ''NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0Il0sWyJiOWExIiwiXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3''@;'; put 'put ''XHU1MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1''@;'; put 'put ''NWY3XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEwXHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4''@;'; put 'put ''XHU1YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3Il0s''@;'; put 'put ''WyJiYTQwIiwiXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2''@;'; put 'put ''XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2''@;'; put 'put ''ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyIl0sWyJiYWExIiwiXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNj''@;'; put 'put ''XHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3''@;'; put 'put ''NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3''@;'; put 'put ''XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjIl0sWyJiYjQwIiwiXHU3ZjcwXHU3ZmUwXHU3''@;'; put 'put ''ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4''@;'; put 'put ''XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4''@;'; put 'put ''YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0Il0sWyJiYmExIiwiXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1''@;'; put 'put ''XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5''@;'; put 'put ''MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIw''@;'; put 'put ''XHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjIl0sWyJiYzQwIiwiXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1''@;'; put 'put ''M2IyXHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMyXHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1''@;'; put 'put ''XHU1YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUzXHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2''@;'; put 'put ''MTU1XHU2MTgyIl0sWyJiY2ExIiwiXHU2MTdjXHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkz''@;'; put 'put ''XHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2''@;'; put 'put ''YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4''@;'; put 'put ''XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3NDhiXHU3NDgzIl0sWyJiZDQwIiwiXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3''@;'; put 'put ''NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0''@;'; put 'put ''XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmIl0sWyJiZGExIiwiXHU3''@;'; put 'put ''ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2''@;'; put 'put ''XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4''@;'; put 'put ''YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFm''@;'; put 'put ''XHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlIl0sWyJiZTQwIiwiXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5''@;'; put 'put ''MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBh''@;'; put 'put ''XHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5Il0sWyJiZWExIiwiXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1''@;'; put 'put ''OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMx''@;'; put 'put ''XHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2''@;'; put 'put ''NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVm''@;'; put 'put ''XHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExIl0sWyJiZjQwIiwiXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5XHU3''@;'; put 'put ''MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3OWE2''@;'; put 'put ''XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhIl0sWyJiZmExIiwiXHU3ZTExXHU3ZTA4XHU3ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3''@;'; put 'put ''Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZhXHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4Nzhk''@;'; put 'put ''XHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJiXHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4''@;'; put 'put ''Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIwXHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZj''@;'; put 'put ''XHU5MzJiXHU5MzA0XHU5MzFhIl0sWyJjMDQwIiwiXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5''@;'; put 'put ''ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4''@;'; put 'put ''XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3Il0sWyJjMGExIiwiXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1''@;'; put 'put ''ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgw''@;'; put 'put ''XHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2''@;'; put 'put ''ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjIl0sWyJj''@;'; put 'put ''MTQwIiwiXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3''@;'; put 'put ''ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMy''@;'; put 'put ''XHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhIl0sWyJjMWExIiwiXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4''@;'; put 'put ''N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2Zi''@;'; put 'put ''XHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5''@;'; put 'put ''MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxIl0sWyJjMjQwIiwiXHU5OWZmXHU5YmFlXHU5YmFi''@;'; put 'put ''XHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2''@;'; put 'put ''NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2YWFjXHU2YWMzXHU2YWJiXHU2YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1''@;'; put 'put ''XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4Il0sWyJjMmExIiwiXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3''@;'; put 'put ''ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3ZTUyXHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2''@;'; put 'put ''XHU4OWIyXHU4OWY0XHU4YjI4XHU4YjM5XHU4YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5''@;'; put 'put ''M2IzXHU5M2FlXHU5M2FjXHU5M2IwXHU5Mzk4XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2Il0sWyJjMzQwIiwiXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUz''@;'; put 'put ''XHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1''@;'; put 'put ''OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEy''@;'; put 'put ''XHU3Mzc4Il0sWyJjM2ExIiwiXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3''@;'; put 'put ''Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRl''@;'; put 'put ''XHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5''@;'; put 'put ''M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlIl0sWyJjNDQwIiwiXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2''@;'; put 'put ''XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2''@;'; put 'put ''NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjIl0sWyJjNGExIiwiXHU3ZTgy''@;'; put 'put ''XHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4''@;'; put 'put ''ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4''@;'; put 'put ''XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4''@;'; put 'put ''NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0Il0sWyJjNTQwIiwiXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThkXHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMy''@;'; put 'put ''XHU5NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5''@;'; put 'put ''ZjY3XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNhXHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0XHU3NThhXHU3NjZlXHU3NjZjIl0sWyJjNWExIiwiXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdk''@;'; put 'put ''XHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUxXHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5''@;'; put 'put ''YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4Yjhh''@;'; put 'put ''XHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3''@;'; put 'put ''ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4YjkzXHU4YjkyIl0sWyJjNjQwIiwiXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3''@;'; put 'put ''XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4''@;'; put 'put ''ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyIl0sWyJjOTQwIiwiXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThk''@;'; put 'put ''XHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0''@;'; put 'put ''ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1Il0sWyJj''@;'; put 'put ''OWExIiwiXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0''@;'; put 'put ''ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1Yzdj''@;'; put 'put ''XHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2''@;'; put 'put ''NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiIl0sWyJjYTQwIiwiXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4Mjgw''@;'; put 'put ''XHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0''@;'; put 'put ''ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4Il0sWyJjYWExIiwiXHU1NDNkXHU1NDRmXHU1NDQx''@;'; put 'put ''XHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1''@;'; put 'put ''YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4''@;'; put 'put ''XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2''@;'; put 'put ''Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3Il0sWyJjYjQwIiwiXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2Yzhm''@;'; put 'put ''XHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3''@;'; put 'put ''MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzIl0sWyJjYmExIiwiXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlm''@;'; put 'put ''XHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0''@;'; put 'put ''Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkx''@;'; put 'put ''XHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1''@;'; put 'put ''Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyIl0sWyJjYzQwIiwiXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3''@;'; put 'put ''XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1''@;'; put 'put ''ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiIl0sWyJjY2ExIiwiXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJl''@;'; put 'put ''XHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2''@;'; put 'put ''NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5''@;'; put 'put ''XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2''@;'; put 'put ''Y2YyIl0sWyJjZDQwIiwiXHU2Y2QyXHU2Y2RkXHU2Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgy''@;'; put 'put ''XHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRkXHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3''@;'; put 'put ''NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhIl0sWyJjZGExIiwiXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdiXHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1''@;'; put 'put ''XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4''@;'; put 'put ''YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNkXHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNkXHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5''@;'; put 'put ''XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmIl0sWyJjZTQwIiwiXHU1NGMzXHU4''@;'; put 'put ''MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1''@;'; put 'put ''XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1''@;'; put 'put ''YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiIl0sWyJjZWExIiwiXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIw''@;'; put 'put ''XHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2''@;'; put 'put ''MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJm''@;'; put 'put ''XHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhIl0sWyJjZjQwIiwiXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2''@;'; put 'put ''N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2Nh''@;'; put 'put ''XHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2''@;'; put 'put ''ZDAwXHU2ZDFkXHU2ZDQyIl0sWyJjZmExIiwiXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQx''@;'; put 'put ''XHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3''@;'; put 'put ''M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEw''@;'; put 'put ''XHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwIl0sWyJkMDQwIiwiXHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3''@;'; put 'put ''YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4XHU3ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNm''@;'; put 'put ''XHU4MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4MjIxXHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhIl0sWyJkMGEx''@;'; put 'put ''IiwiXHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1''@;'; put 'put ''XHU5MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1''@;'; put 'put ''MDFjXHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3''@;'; put 'put ''XHU1NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxIl0sWyJkMTQwIiwiXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1''@;'; put 'put ''N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFj''@;'; put 'put ''XHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3Il0sWyJkMWExIiwiXHU2MDQxXHU2MGEyXHU2MDg4XHU2''@;'; put 'put ''MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQx''@;'; put 'put ''XHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2''@;'; put 'put ''ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJm''@;'; put 'put ''XHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0Il0sWyJkMjQwIiwiXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2''@;'; put 'put ''ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQx''@;'; put 'put ''XHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4Il0sWyJkMmExIiwiXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3''@;'; put 'put ''MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIw''@;'; put 'put ''XHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3''@;'; put 'put ''ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThj''@;'; put 'put ''XHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwIl0sWyJkMzQwIiwiXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3''@;'; put 'put ''ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAx''@;'; put 'put ''XHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyIl0sWyJkM2ExIiwiXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4''@;'; put 'put ''MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmEx''@;'; put 'put ''XHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4NjlkXHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4''@;'; put 'put ''ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUw''@;'; put 'put ''Il0sWyJkNDQwIiwiXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1''@;'; put 'put ''MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRk''@;'; put 'put ''XHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1Il0sWyJkNGExIiwiXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1''@;'; put 'put ''N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBk''@;'; put 'put ''XHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1''@;'; put 'put ''YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmIl0sWyJkNTQwIiwiXHU1ZDMwXHU1ZDEy''@;'; put 'put ''XHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2''@;'; put 'put ''MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2Mzlj''@;'; put 'put ''XHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmIl0sWyJkNWExIiwiXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2''@;'; put 'put ''ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0''@;'; put 'put ''XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2''@;'; put 'put ''ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5Il0sWyJkNjQwIiwiXHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNk''@;'; put 'put ''XHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3''@;'; put 'put ''MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNl''@;'; put 'put ''XHU3NWQyXHU3NWNmIl0sWyJkNmExIiwiXHU3NWNiXHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3''@;'; put 'put ''ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4''@;'; put 'put ''XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJkXHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3''@;'; put 'put ''ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmIl0sWyJkNzQwIiwiXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJk''@;'; put 'put ''XHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4''@;'; put 'put ''Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3Il0sWyJkN2ExIiwi''@;'; put 'put ''XHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4''@;'; put 'put ''OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMy''@;'; put 'put ''XHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5''@;'; put 'put ''MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhIl0sWyJkODQwIiwiXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZh''@;'; put 'put ''XHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1''@;'; put 'put ''NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3Il0sWyJkOGExIiwiXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIz''@;'; put 'put ''XHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1''@;'; put 'put ''YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZi''@;'; put 'put ''XHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1''@;'; put 'put ''ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0Il0sWyJkOTQwIiwiXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRh''@;'; put 'put ''XHU2Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2M2U1XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2''@;'; put 'put ''M2NiXHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5XHU2NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyIl0sWyJkOWExIiwiXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2Njcy''@;'; put 'put ''XHU2NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2''@;'; put 'put ''OTE0XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZjXHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3''@;'; put 'put ''XHU2Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2''@;'; put 'put ''ZTNiXHU2ZTAzXHU2ZTJlXHU2ZTVlIl0sWyJkYTQwIiwiXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1''@;'; put 'put ''XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3''@;'; put 'put ''MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2Il0sWyJkYWExIiwiXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJm''@;'; put 'put ''XHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3''@;'; put 'put ''ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRl''@;'; put 'put ''XHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1Il0s''@;'; put 'put ''WyJkYjQwIiwiXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNk''@;'; put 'put ''XHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4''@;'; put 'put ''M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzIl0sWyJkYmExIiwiXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2Zl''@;'; put 'put ''XHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4''@;'; put 'put ''OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4Yzgw''@;'; put 'put ''XHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhIl0sWyJkYzQwIiwiXHU4ZWY5XHU4ZWU2XHU4''@;'; put 'put ''ZWVlXHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYx''@;'; put 'put ''XHU5MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5''@;'; put 'put ''NThkXHU5NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5Njg4Il0sWyJkY2ExIiwiXHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJk''@;'; put 'put ''XHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNhXHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1''@;'; put 'put ''NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVk''@;'; put 'put ''XHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYzXHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2Il0sWyJkZDQwIiwiXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1''@;'; put 'put ''YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3''@;'; put 'put ''XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2''@;'; put 'put ''NDIwXHU2NDI0Il0sWyJkZGExIiwiXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFi''@;'; put 'put ''XHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2''@;'; put 'put ''OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUx''@;'; put 'put ''XHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjIl0sWyJkZTQwIiwiXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2''@;'; put 'put ''ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIz''@;'; put 'put ''XHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzIl0sWyJkZWExIiwiXHU3''@;'; put 'put ''MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2''@;'; put 'put ''XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3''@;'; put 'put ''NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdj''@;'; put 'put ''XHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzIl0sWyJkZjQwIiwiXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3''@;'; put 'put ''YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3''@;'; put 'put ''XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZmIl0sWyJkZmExIiwiXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4''@;'; put 'put ''MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNh''@;'; put 'put ''XHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMyXHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4''@;'; put 'put ''NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRh''@;'; put 'put ''XHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRmXHU4OWU1XHU4OWU0Il0sWyJlMDQwIiwiXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4''@;'; put 'put ''YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5''@;'; put 'put ''XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmIl0sWyJlMGExIiwiXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5''@;'; put 'put ''MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0''@;'; put 'put ''XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5''@;'; put 'put ''ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYw''@;'; put 'put ''XHU1MGVmXHU1MGUzXHU1MGUwIl0sWyJlMTQwIiwiXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1''@;'; put 'put ''ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVk''@;'; put 'put ''XHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwIl0sWyJlMWExIiwiXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1''@;'; put 'put ''ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUy''@;'; put 'put ''XHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2''@;'; put 'put ''NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5Il0sWyJl''@;'; put 'put ''MjQwIiwiXHU2OWEwXHU2OWNlXHU2OTk2XHU2OWIwXHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2''@;'; put 'put ''OWExXHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkwXHU2OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5''@;'; put 'put ''XHU2ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2ZjE4XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhIl0sWyJlMmExIiwiXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2''@;'; put 'put ''ZjM5XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFmXHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUx''@;'; put 'put ''XHU3MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3''@;'; put 'put ''NzZmXHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFhXHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzIl0sWyJlMzQwIiwiXHU3OTk3XHU3OTg4XHU3OTky''@;'; put 'put ''XHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3''@;'; put 'put ''Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5''@;'; put 'put ''XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlIl0sWyJlM2ExIiwiXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4''@;'; put 'put ''NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQy''@;'; put 'put ''XHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4''@;'; put 'put ''NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiIl0sWyJlNDQwIiwiXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTll''@;'; put 'put ''XHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4''@;'; put 'put ''ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFh''@;'; put 'put ''XHU5MjhkIl0sWyJlNGExIiwiXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5''@;'; put 'put ''MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5''@;'; put 'put ''XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1''@;'; put 'put ''MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4Il0sWyJlNTQwIiwiXHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFi''@;'; put 'put ''XHU1ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1''@;'; put 'put ''ZGEyXHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDljXHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5Il0sWyJlNWExIiwiXHU2MTli''@;'; put 'put ''XHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTkyXHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2''@;'; put 'put ''NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZl''@;'; put 'put ''XHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2''@;'; put 'put ''YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyIl0sWyJlNjQwIiwiXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUw''@;'; put 'put ''XHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3''@;'; put 'put ''MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5Il0sWyJlNmExIiwiXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2''@;'; put 'put ''XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3''@;'; put 'put ''OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5''@;'; put 'put ''XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3''@;'; put 'put ''ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmIl0sWyJlNzQwIiwiXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5''@;'; put 'put ''XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4''@;'; put 'put ''NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyIl0sWyJlN2ExIiwiXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzVi''@;'; put 'put ''XHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4''@;'; put 'put ''OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4''@;'; put 'put ''XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4''@;'; put 'put ''ZTE5XHU4ZTI2XHU4ZTI3Il0sWyJlODQwIiwiXHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5''@;'; put 'put ''XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5''@;'; put 'put ''MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzIl0sWyJlOGExIiwiXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1''@;'; put 'put ''XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5NzhlXHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5''@;'; put 'put ''OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2Zj''@;'; put 'put ''XHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlIl0sWyJlOTQw''@;'; put 'put ''IiwiXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFh''@;'; put 'put ''XHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2''@;'; put 'put ''MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhIl0sWyJlOWExIiwiXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdj''@;'; put 'put ''XHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2''@;'; put 'put ''YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2''@;'; put 'put ''XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4Il0sWyJlYTQwIiwiXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2''@;'; put 'put ''ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZj''@;'; put 'put ''XHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3''@;'; put 'put ''NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5Il0sWyJlYWExIiwiXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIx''@;'; put 'put ''XHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3''@;'; put 'put ''ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1''@;'; put 'put ''XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4Il0sWyJlYjQwIiwiXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4''@;'; put 'put ''NTQ3XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcxXHU4NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2''@;'; put 'put ''XHU4Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4Nzg1XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4''@;'; put 'put ''YWUwIl0sWyJlYmExIiwiXHU4YWUyXHU4YWYyXHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZj''@;'; put 'put ''XHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5''@;'; put 'put ''MTMzXHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkwXHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZh''@;'; put 'put ''XHU5MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjIl0sWyJlYzQwIiwiXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5''@;'; put 'put ''NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUz''@;'; put 'put ''XHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1Il0sWyJlY2ExIiwiXHU5YjdkXHU5''@;'; put 'put ''Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIw''@;'; put 'put ''XHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1''@;'; put 'put ''YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2''@;'; put 'put ''XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlIl0sWyJlZDQwIiwiXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2''@;'; put 'put ''ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFh''@;'; put 'put ''XHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2Il0sWyJlZGExIiwiXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3''@;'; put 'put ''OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0''@;'; put 'put ''XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3''@;'; put 'put ''ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEw''@;'; put 'put ''XHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllIl0sWyJlZTQwIiwiXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4''@;'; put 'put ''NTc2XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2Jk''@;'; put 'put ''XHU4N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlIl0sWyJlZWExIiwiXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4''@;'; put 'put ''YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlh''@;'; put 'put ''XHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWExXHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5''@;'; put 'put ''MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5Nzlh''@;'; put 'put ''XHU5N2ExXHU5NzljIl0sWyJlZjQwIiwiXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5''@;'; put 'put ''OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2''@;'; put 'put ''XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwIl0sWyJlZmExIiwiXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5''@;'; put 'put ''ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVk''@;'; put 'put ''XHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2''@;'; put 'put ''YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2Il0sWyJmMDQwIiwi''@;'; put 'put ''XHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3''@;'; put 'put ''OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3''@;'; put 'put ''XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyIl0sWyJmMGExIiwiXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4''@;'; put 'put ''NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5''@;'; put 'put ''XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4''@;'; put 'put ''YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3Il0sWyJmMTQwIiwiXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVk''@;'; put 'put ''XHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5''@;'; put 'put ''Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2Fl''@;'; put 'put ''XHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhIl0sWyJmMWExIiwiXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5''@;'; put 'put ''YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRm''@;'; put 'put ''XHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1''@;'; put 'put ''Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwIl0sWyJmMjQwIiwiXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBl''@;'; put 'put ''XHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3''@;'; put 'put ''MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFi''@;'; put 'put ''Il0sWyJmMmExIiwiXHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3''@;'; put 'put ''ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQx''@;'; put 'put ''XHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4''@;'; put 'put ''OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1Il0sWyJmMzQwIiwiXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFj''@;'; put 'put ''XHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5''@;'; put 'put ''M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2Il0sWyJmM2ExIiwiXHU5N2IzXHU5N2I3''@;'; put 'put ''XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5''@;'; put 'put ''YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgx''@;'; put 'put ''XHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5''@;'; put 'put ''ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyIl0sWyJmNDQwIiwiXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRm''@;'; put 'put ''XHU2NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3''@;'; put 'put ''MjE0XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJhXHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5Il0sWyJmNGExIiwiXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5''@;'; put 'put ''XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4''@;'; put 'put ''NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODExXHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1''@;'; put 'put ''XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5''@;'; put 'put ''NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBhXHU5M2ZmIl0sWyJmNTQwIiwiXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMy''@;'; put 'put ''XHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5''@;'; put 'put ''YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliIl0sWyJmNWExIiwiXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDll''@;'; put 'put ''XHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1''@;'; put 'put ''NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJk''@;'; put 'put ''XHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4''@;'; put 'put ''NjFlXHU4NjI1Il0sWyJmNjQwIiwiXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVl''@;'; put 'put ''XHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5''@;'; put 'put ''OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhIl0sWyJmNmExIiwiXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4''@;'; put 'put ''XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5''@;'; put 'put ''ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4''@;'; put 'put ''XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhIl0sWyJmNzQwIiwiXHU3''@;'; put 'put ''Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4Yjdm''@;'; put 'put ''XHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5''@;'; put 'put ''OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRjXHU5YTRmXHU5YTQ4XHU5YTRhIl0sWyJmN2ExIiwiXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3''@;'; put 'put ''XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRiXHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5''@;'; put 'put ''Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3Mzgz''@;'; put 'put ''XHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlIl0sWyJmODQwIiwiXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4''@;'; put 'put ''YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRj''@;'; put 'put ''XHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5''@;'; put 'put ''ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmIl0sWyJmOGExIiwiXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3''@;'; put 'put ''XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5''@;'; put 'put ''N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2''@;'; put 'put ''XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhIl0sWyJmOTQwIiwiXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4''@;'; put 'put ''OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWEx''@;'; put 'put ''XHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhIl0s''@;'; put 'put ''WyJmOWExIiwiXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3''@;'; put 'put ''XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3''@;'; put 'put ''ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2''@;'; put 'put ''XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzIl1dJyl9LDU2NDA2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4ZWExIiwiXHVm''@;'; put 'put ''ZjYxIiw2Ml0sWyJhMWExIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVc''@;'; put 'put ''dTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYwYlx1ZmYw''@;'; put 'put ''ZFx4YjFceGQ3XHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1''@;'; put 'put ''XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3Il0sWyJhMmExIiwiXHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmJhIiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUy''@;'; put 'put ''MjgzXHUyMjJhXHUyMjI5Il0sWyJhMmNhIiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyJhMmRjIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJi''@;'; put 'put ''XHUyMjJjIl0sWyJhMmYyIiwiXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiYTJmZSIsIlx1MjVlZiJdLFsiYTNiMCIsIlx1ZmYxMCIsOV0sWyJhM2MxIiwiXHVmZjIxIiwyNV0sWyJhM2UxIiwiXHVmZjQxIiwyNV0sWyJhNGExIiwiXHUzMDQxIiw4''@;'; put 'put ''Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmExIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTdhMSIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxb''@;'; put 'put ''ImE4YTEiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1Mzdc''@;'; put 'put ''dTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDIiXSxbImFkYTEiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiYWRjMCIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1''@;'; put 'put ''MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiYWRkZiIsIlx1MzM3Ylx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJi''@;'; put 'put ''XHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyJiMGExIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2''@;'; put 'put ''NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBh''@;'; put 'put ''XHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0''@;'; put 'put ''ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyJiMWExIiwiXHU5NjYyXHU5Njcw''@;'; put 'put ''XHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0''@;'; put 'put ''ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2''@;'; put 'put ''XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2XHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5''@;'; put 'put ''ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjIl0sWyJiMmExIiwiXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRi''@;'; put 'put ''XHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2''@;'; put 'put ''NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5''@;'; put 'put ''XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyJiM2ExIiwiXHU5YjQxXHU2NjY2XHU2''@;'; put 'put ''OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4''@;'; put 'put ''XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2''@;'; put 'put ''OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVj''@;'; put 'put ''XHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxIl0sWyJiNGExIiwiXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1''@;'; put 'put ''Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2''@;'; put 'put ''XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5''@;'; put 'put ''ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0sWyJiNWExIiwiXHU2YTVmXHU1ZTMwXHU2YmM1''@;'; put 'put ''XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3''@;'; put 'put ''NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2Nh''@;'; put 'put ''XHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4''@;'; put 'put ''YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjIl0sWyJiNmExIiwiXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJm''@;'; put 'put ''XHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2''@;'; put 'put ''ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNh''@;'; put 'put ''XHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyJiN2ExIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5''@;'; put 'put ''Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1Nzhi''@;'; put 'put ''XHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5''@;'; put 'put ''ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3''@;'; put 'put ''XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyIl0sWyJiOGExIiwiXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5''@;'; put 'put ''ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4''@;'; put 'put ''XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2''@;'; put 'put ''YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyJiOWExIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2Ey''@;'; put 'put ''XHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2''@;'; put 'put ''ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5Mjcx''@;'; put 'put ''XHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2''@;'; put 'put ''ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjIl0sWyJiYWExIiwiXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQy''@;'; put 'put ''XHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2''@;'; put 'put ''M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIy''@;'; put 'put ''XHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyJiYmExIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2''@;'; put 'put ''NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4''@;'; put 'put ''XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2''@;'; put 'put ''NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNj''@;'; put 'put ''XHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyIl0sWyJiY2ExIiwiXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3''@;'; put 'put ''YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4''@;'; put 'put ''XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2''@;'; put 'put ''MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4Il0sWyJiZGExIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAx''@;'; put 'put ''XHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2''@;'; put 'put ''YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVj''@;'; put 'put ''XHU2OTZmXHU2Yjg5XHU2ZGYzXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1''@;'; put 'put ''ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmIl0sWyJiZWExIiwiXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUw''@;'; put 'put ''XHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3''@;'; put 'put ''YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1Mjcw''@;'; put 'put ''XHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlIl0sWyJiZmExIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4''@;'; put 'put ''MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2''@;'; put 'put ''XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5''@;'; put 'put ''MTYyXHU1NmYzXHU1M2E4XHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZl''@;'; put 'put ''XHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlIl0sWyJjMGExIiwiXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2''@;'; put 'put ''ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2Nzkw''@;'; put 'put ''XHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1''@;'; put 'put ''YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhIl0sWyJjMWExIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2''@;'; put 'put ''XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3''@;'; put 'put ''NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2Mzgz''@;'; put 'put ''XHU2MzNmXHU2M2JiXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5''@;'; put 'put ''Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlIl0sWyJjMmExIiwiXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUy''@;'; put 'put ''XHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1''@;'; put 'put ''YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5''@;'; put 'put ''XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhIl0sWyJjM2ExIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1''@;'; put 'put ''ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1''@;'; put 'put ''XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3''@;'; put 'put ''YjUxXHU4NGM0XHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2Fm''@;'; put 'put ''XHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1Il0sWyJjNGExIiwiXHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4''@;'; put 'put ''YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZi''@;'; put 'put ''XHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1''@;'; put 'put ''ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzIl0sWyJjNWExIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUy''@;'; put 'put ''XHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2''@;'; put 'put ''ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVh''@;'; put 'put ''XHU1MWFjXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3''@;'; put 'put ''YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwIl0sWyJjNmExIiwiXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDll''@;'; put 'put ''XHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4''@;'; put 'put ''MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0''@;'; put 'put ''XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1Il0sWyJjN2ExIiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2''@;'; put 'put ''ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0''@;'; put 'put ''XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2''@;'; put 'put ''ODg1XHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2''@;'; put 'put ''XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2Il0sWyJjOGExIiwiXHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5''@;'; put 'put ''NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5''@;'; put 'put ''XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3''@;'; put 'put ''Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlIl0sWyJjOWExIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlk''@;'; put 'put ''XHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4''@;'; put 'put ''MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3''@;'; put 'put ''XHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1''@;'; put 'put ''MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkIl0sWyJjYWExIiwiXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFi''@;'; put 'put ''XHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3''@;'; put 'put ''MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNm''@;'; put 'put ''XHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0sWyJjYmExIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4''@;'; put 'put ''NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4''@;'; put 'put ''XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHU2''@;'; put 'put ''NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJm''@;'; put 'put ''XHU0ZTA3XHU2MTYyXHU2ZTgwIl0sWyJjY2ExIiwiXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3''@;'; put 'put ''N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVm''@;'; put 'put ''XHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5''@;'; put 'put ''MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyJjZGExIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdk''@;'; put 'put ''XHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1''@;'; put 'put ''OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHU2Yzgz''@;'; put 'put ''XHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2''@;'; put 'put ''OGE4XHU3NDA2XHU3NDgzIl0sWyJjZWExIiwiXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2''@;'; put 'put ''XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2''@;'; put 'put ''Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBh''@;'; put 'put ''XHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyJjZmExIiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5''@;'; put 'put ''NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0''@;'; put 'put ''XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyJkMGExIiwiXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0''@;'; put 'put ''ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjVi''@;'; put 'put ''XHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1''@;'; put 'put ''MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIy''@;'; put 'put ''Il0sWyJkMWExIiwiXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1''@;'; put 'put ''MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIy''@;'; put 'put ''XHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1''@;'; put 'put ''MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4Il0sWyJkMmExIiwiXHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVk''@;'; put 'put ''XHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1''@;'; put 'put ''MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNj''@;'; put 'put ''XHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0s''@;'; put 'put ''WyJkM2ExIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMz''@;'; put 'put ''XHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1''@;'; put 'put ''NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMx''@;'; put 'put ''XHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5Il0sWyJkNGExIiwiXHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1''@;'; put 'put ''NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIx''@;'; put 'put ''XHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1''@;'; put 'put ''OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyJk''@;'; put 'put ''NWExIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1''@;'; put 'put ''YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjVi''@;'; put 'put ''XHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1''@;'; put 'put ''YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzIl0sWyJkNmExIiwiXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2Fi''@;'; put 'put ''XHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1''@;'; put 'put ''ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFh''@;'; put 'put ''XHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyJkN2Ex''@;'; put 'put ''IiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQx''@;'; put 'put ''XHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1''@;'; put 'put ''ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRk''@;'; put 'put ''XHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhIl0sWyJkOGExIiwiXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2''@;'; put 'put ''MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNk''@;'; put 'put ''XHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2''@;'; put 'put ''MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyJkOWExIiwi''@;'; put 'put ''XHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2''@;'; put 'put ''MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2Mzgw''@;'; put 'put ''XHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2''@;'; put 'put ''NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjIl0sWyJkYWExIiwiXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUz''@;'; put 'put ''XHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2''@;'; put 'put ''NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0''@;'; put 'put ''XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyJkYmExIiwiXHU2''@;'; put 'put ''NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYz''@;'; put 'put ''XHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2''@;'; put 'put ''YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBm''@;'; put 'put ''XHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkIl0sWyJkY2ExIiwiXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2''@;'; put 'put ''OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQz''@;'; put 'put ''XHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2''@;'; put 'put ''YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyJkZGExIiwiXHU2YTk3''@;'; put 'put ''XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2''@;'; put 'put ''YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2''@;'; put 'put ''XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2''@;'; put 'put ''YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlIl0sWyJkZWExIiwiXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEy''@;'; put 'put ''XHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2''@;'; put 'put ''ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5''@;'; put 'put ''XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJkZmExIiwiXHU2ZjNlXHU2''@;'; put 'put ''ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVj''@;'; put 'put ''XHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3''@;'; put 'put ''MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5''@;'; put 'put ''XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjIl0sWyJlMGExIiwiXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3''@;'; put 'put ''MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2''@;'; put 'put ''XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3''@;'; put 'put ''NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMWExIiwiXHU3NGUwXHU3NGUz''@;'; put 'put ''XHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3''@;'; put 'put ''NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNh''@;'; put 'put ''XHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3''@;'; put 'put ''NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwIl0sWyJlMmExIiwiXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4''@;'; put 'put ''XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3''@;'; put 'put ''NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEy''@;'; put 'put ''XHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlM2ExIiwiXHU3OGU3XHU3OGRhXHU3''@;'; put 'put ''OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1''@;'; put 'put ''XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3''@;'; put 'put ''YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBh''@;'; put 'put ''XHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwIl0sWyJlNGExIiwiXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3''@;'; put 'put ''YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3''@;'; put 'put ''XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3''@;'; put 'put ''Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlNWExIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1''@;'; put 'put ''XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3''@;'; put 'put ''ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2''@;'; put 'put ''XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3''@;'; put 'put ''ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhIl0sWyJlNmExIiwiXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2''@;'; put 'put ''XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4''@;'; put 'put ''MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2''@;'; put 'put ''XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJlN2ExIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4''@;'; put 'put ''MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJh''@;'; put 'put ''XHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4''@;'; put 'put ''MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4Mzkz''@;'; put 'put ''XHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5Il0sWyJlOGExIiwiXHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4''@;'; put 'put ''M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIy''@;'; put 'put ''XHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4''@;'; put 'put ''NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlOWExIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1''@;'; put 'put ''XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4''@;'; put 'put ''NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFi''@;'; put 'put ''XHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4''@;'; put 'put ''Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5Il0sWyJlYWExIiwiXHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2''@;'; put 'put ''XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4''@;'; put 'put ''ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZj''@;'; put 'put ''XHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlYmExIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4''@;'; put 'put ''OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEw''@;'; put 'put ''XHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4''@;'; put 'put ''YWRhXHU4YWViXHU4YWYzXHU4YWU3XHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRj''@;'; put 'put ''XHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiIl0sWyJlY2ExIiwiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4''@;'; put 'put ''YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2Uz''@;'; put 'put ''XHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4''@;'; put 'put ''ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlZGExIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4''@;'; put 'put ''XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4''@;'; put 'put ''ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2''@;'; put 'put ''XHU4ZjRlXHU4ZjU3XHU4ZjVjXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5''@;'; put 'put ''MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4Il0sWyJlZWExIiwiXHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgw''@;'; put 'put ''XHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5''@;'; put 'put ''MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1''@;'; put 'put ''XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlIl0sWyJlZmExIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5''@;'; put 'put ''MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEw''@;'; put 'put ''XHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5''@;'; put 'put ''NTk2XHU5NTk4XHU5NTk5XHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQy''@;'; put 'put ''XHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlIl0sWyJmMGExIiwiXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5''@;'; put 'put ''NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5''@;'; put 'put ''XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5''@;'; put 'put ''N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwIl0sWyJmMWExIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIx''@;'; put 'put ''XHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5''@;'; put 'put ''OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQy''@;'; put 'put ''XHU5YTQwXHU5YTQzXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5''@;'; put 'put ''YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3Il0sWyJmMmExIiwiXHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRl''@;'; put 'put ''XHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5''@;'; put 'put ''YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2Vj''@;'; put 'put ''XHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4Il0sWyJmM2ExIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5''@;'; put 'put ''ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFl''@;'; put 'put ''XHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5''@;'; put 'put ''ZWU4XHU5ZWVmXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3''@;'; put 'put ''XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwIl0sWyJmNGExIiwiXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJmOWExIiwiXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0''@;'; put 'put ''ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1''@;'; put 'put ''XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1''@;'; put 'put ''OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3Il0sWyJm''@;'; put 'put ''YWExIiwiXHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2''@;'; put 'put ''NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTcz''@;'; put 'put ''XHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3''@;'; put 'put ''MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJmYmExIiwiXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJh''@;'; put 'put ''XHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3''@;'; put 'put ''YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIx''@;'; put 'put ''XHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhIl0sWyJmY2Ex''@;'; put 'put ''IiwiXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUw''@;'; put 'put ''XHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5''@;'; put 'put ''NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJmY2YxIiwiXHUyMTcwIiw5LCJc''@;'; put 'put ''dWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbIjhmYTJhZiIsIlx1MDJkOFx1MDJjN1x4YjhcdTAyZDlcdTAyZGRceGFmXHUwMmRiXHUwMmRhXHVmZjVlXHUwMzg0XHUwMzg1Il0sWyI4ZmEyYzIiLCJceGExXHhhNlx4YmYiXSxbIjhmYTJlYiIsIlx4YmFceGFhXHhhOVx4YWVcdTIxMjJceGE0''@;'; put 'put ''XHUyMTE2Il0sWyI4ZmE2ZTEiLCJcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzYWEiXSxbIjhmYTZlNyIsIlx1MDM4YyJdLFsiOGZhNmU5IiwiXHUwMzhlXHUwM2FiIl0sWyI4ZmE2ZWMiLCJcdTAzOGYiXSxbIjhmYTZmMSIsIlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5''@;'; put 'put ''MFx1MDNjY1x1MDNjMlx1MDNjZFx1MDNjYlx1MDNiMFx1MDNjZSJdLFsiOGZhN2MyIiwiXHUwNDAyIiwxMCwiXHUwNDBlXHUwNDBmIl0sWyI4ZmE3ZjIiLCJcdTA0NTIiLDEwLCJcdTA0NWVcdTA0NWYiXSxbIjhmYTlhMSIsIlx4YzZcdTAxMTAiXSxbIjhmYTlhNCIsIlx1MDEyNiJdLFsiOGZh''@;'; put 'put ''OWE2IiwiXHUwMTMyIl0sWyI4ZmE5YTgiLCJcdTAxNDFcdTAxM2YiXSxbIjhmYTlhYiIsIlx1MDE0YVx4ZDhcdTAxNTIiXSxbIjhmYTlhZiIsIlx1MDE2Nlx4ZGUiXSxbIjhmYTljMSIsIlx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQyXHUwMTQwXHUwMTQ5XHUw''@;'; put 'put ''MTRiXHhmOFx1MDE1M1x4ZGZcdTAxNjdceGZlIl0sWyI4ZmFhYTEiLCJceGMxXHhjMFx4YzRceGMyXHUwMTAyXHUwMWNkXHUwMTAwXHUwMTA0XHhjNVx4YzNcdTAxMDZcdTAxMDhcdTAxMGNceGM3XHUwMTBhXHUwMTBlXHhjOVx4YzhceGNiXHhjYVx1MDExYVx1MDExNlx1MDExMlx1MDExOCJd''@;'; put 'put ''LFsiOGZhYWJhIiwiXHUwMTFjXHUwMTFlXHUwMTIyXHUwMTIwXHUwMTI0XHhjZFx4Y2NceGNmXHhjZVx1MDFjZlx1MDEzMFx1MDEyYVx1MDEyZVx1MDEyOFx1MDEzNFx1MDEzNlx1MDEzOVx1MDEzZFx1MDEzYlx1MDE0M1x1MDE0N1x1MDE0NVx4ZDFceGQzXHhkMlx4ZDZceGQ0XHUwMWQxXHUw''@;'; put 'put ''MTUwXHUwMTRjXHhkNVx1MDE1NFx1MDE1OFx1MDE1Nlx1MDE1YVx1MDE1Y1x1MDE2MFx1MDE1ZVx1MDE2NFx1MDE2Mlx4ZGFceGQ5XHhkY1x4ZGJcdTAxNmNcdTAxZDNcdTAxNzBcdTAxNmFcdTAxNzJcdTAxNmVcdTAxNjhcdTAxZDdcdTAxZGJcdTAxZDlcdTAxZDVcdTAxNzRceGRkXHUwMTc4''@;'; put 'put ''XHUwMTc2XHUwMTc5XHUwMTdkXHUwMTdiIl0sWyI4ZmFiYTEiLCJceGUxXHhlMFx4ZTRceGUyXHUwMTAzXHUwMWNlXHUwMTAxXHUwMTA1XHhlNVx4ZTNcdTAxMDdcdTAxMDlcdTAxMGRceGU3XHUwMTBiXHUwMTBmXHhlOVx4ZThceGViXHhlYVx1MDExYlx1MDExN1x1MDExM1x1MDExOVx1MDFm''@;'; put 'put ''NVx1MDExZFx1MDExZiJdLFsiOGZhYmJkIiwiXHUwMTIxXHUwMTI1XHhlZFx4ZWNceGVmXHhlZVx1MDFkMCJdLFsiOGZhYmM1IiwiXHUwMTJiXHUwMTJmXHUwMTI5XHUwMTM1XHUwMTM3XHUwMTNhXHUwMTNlXHUwMTNjXHUwMTQ0XHUwMTQ4XHUwMTQ2XHhmMVx4ZjNceGYyXHhmNlx4ZjRcdTAx''@;'; put 'put ''ZDJcdTAxNTFcdTAxNGRceGY1XHUwMTU1XHUwMTU5XHUwMTU3XHUwMTViXHUwMTVkXHUwMTYxXHUwMTVmXHUwMTY1XHUwMTYzXHhmYVx4ZjlceGZjXHhmYlx1MDE2ZFx1MDFkNFx1MDE3MVx1MDE2Ylx1MDE3M1x1MDE2Zlx1MDE2OVx1MDFkOFx1MDFkY1x1MDFkYVx1MDFkNlx1MDE3NVx4ZmRc''@;'; put 'put ''eGZmXHUwMTc3XHUwMTdhXHUwMTdlXHUwMTdjIl0sWyI4ZmIwYTEiLCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMGNcdTRlMTJcdTRlMWZcdTRlMjNcdTRlMjRcdTRlMjhcdTRlMmJcdTRlMmVcdTRlMmZcdTRlMzBcdTRlMzVcdTRlNDBcdTRlNDFcdTRlNDRcdTRlNDdcdTRlNTFcdTRlNWFcdTRl''@;'; put 'put ''NWNcdTRlNjNcdTRlNjhcdTRlNjlcdTRlNzRcdTRlNzVcdTRlNzlcdTRlN2ZcdTRlOGRcdTRlOTZcdTRlOTdcdTRlOWRcdTRlYWZcdTRlYjlcdTRlYzNcdTRlZDBcdTRlZGFcdTRlZGJcdTRlZTBcdTRlZTFcdTRlZTJcdTRlZThcdTRlZWZcdTRlZjFcdTRlZjNcdTRlZjVcdTRlZmRcdTRlZmVc''@;'; put 'put ''dTRlZmZcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTVcdTRmMTZcdTRmMTdcdTRmMTlcdTRmMmVcdTRmMzFcdTRmNjBcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmNDBcdTRmNDJcdTRmNDhcdTRmNDlcdTRmNGJcdTRmNGNcdTRm''@;'; put 'put ''NTJcdTRmNTRcdTRmNTZcdTRmNThcdTRmNWZcdTRmNjNcdTRmNmFcdTRmNmNcdTRmNmVcdTRmNzFcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmN2VcdTRmODFcdTRmODJcdTRmODQiXSxbIjhmYjFhMSIsIlx1NGY4NVx1NGY4OVx1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5''@;'; put 'put ''Mlx1NGY5M1x1NGY5NFx1NGY5N1x1NGY5OVx1NGY5YVx1NGY5ZVx1NGY5Zlx1NGZiMlx1NGZiN1x1NGZiOVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjNVx1NGZjNlx1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZjZlx1NGZkMlx1NGZkY1x1NGZlMFx1''@;'; put 'put ''NGZlMlx1NGZmMFx1NGZmMlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwNFx1NTAwN1x1NTAwYVx1NTAwY1x1NTAwZVx1NTAxMFx1NTAxM1x1NTAxN1x1NTAxOFx1NTAxYlx1NTAxY1x1NTAxZFx1NTAxZVx1NTAyMlx1NTAyN1x1NTAyZVx1NTAzMFx1NTAzMlx1NTAzM1x1NTAz''@;'; put 'put ''NVx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NVx1NTA0Nlx1NTA0YVx1NTA0Y1x1NTA0ZVx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1N1x1NTA1OVx1NTA1Zlx1NTA2MFx1NTA2Mlx1NTA2M1x1NTA2Nlx1NTA2N1x1NTA2YVx1NTA2ZFx1NTA3MFx1NTA3MVx1NTAzYlx1NTA4MVx1NTA4M1x1NTA4NFx1''@;'; put 'put ''NTA4Nlx1NTA4YVx1NTA4ZVx1NTA4Zlx1NTA5MCJdLFsiOGZiMmExIiwiXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk2XHU1MDliXHU1MDljXHU1MDllIiw0LCJcdTUwYWFcdTUwYWZcdTUwYjBcdTUwYjlcdTUwYmFcdTUwYmRcdTUwYzBcdTUwYzNcdTUwYzRcdTUwYzdcdTUwY2NcdTUwY2VcdTUw''@;'; put 'put ''ZDBcdTUwZDNcdTUwZDRcdTUwZDhcdTUwZGNcdTUwZGRcdTUwZGZcdTUwZTJcdTUwZTRcdTUwZTZcdTUwZThcdTUwZTlcdTUwZWZcdTUwZjFcdTUwZjZcdTUwZmFcdTUwZmVcdTUxMDNcdTUxMDZcdTUxMDdcdTUxMDhcdTUxMGJcdTUxMGNcdTUxMGRcdTUxMGVcdTUwZjJcdTUxMTBcdTUxMTdc''@;'; put 'put ''dTUxMTlcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMjNcdTUxMjdcdTUxMjhcdTUxMmNcdTUxMmRcdTUxMmZcdTUxMzFcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzhcdTUxMzlcdTUxNDJcdTUxNGFcdTUxNGZcdTUxNTNcdTUxNTVcdTUxNTdcdTUxNThcdTUxNWZcdTUxNjRcdTUxNjZcdTUx''@;'; put 'put ''N2VcdTUxODNcdTUxODRcdTUxOGJcdTUxOGVcdTUxOThcdTUxOWRcdTUxYTFcdTUxYTNcdTUxYWRcdTUxYjhcdTUxYmFcdTUxYmNcdTUxYmVcdTUxYmZcdTUxYzIiXSxbIjhmYjNhMSIsIlx1NTFjOFx1NTFjZlx1NTFkMVx1NTFkMlx1NTFkM1x1NTFkNVx1NTFkOFx1NTFkZVx1NTFlMlx1NTFl''@;'; put 'put ''NVx1NTFlZVx1NTFmMlx1NTFmM1x1NTFmNFx1NTFmN1x1NTIwMVx1NTIwMlx1NTIwNVx1NTIxMlx1NTIxM1x1NTIxNVx1NTIxNlx1NTIxOFx1NTIyMlx1NTIyOFx1NTIzMVx1NTIzMlx1NTIzNVx1NTIzY1x1NTI0NVx1NTI0OVx1NTI1NVx1NTI1N1x1NTI1OFx1NTI1YVx1NTI1Y1x1NTI1Zlx1''@;'; put 'put ''NTI2MFx1NTI2MVx1NTI2Nlx1NTI2ZVx1NTI3N1x1NTI3OFx1NTI3OVx1NTI4MFx1NTI4Mlx1NTI4NVx1NTI4YVx1NTI4Y1x1NTI5M1x1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZlx1NTJiMFx1NTJiNlx1NTJiN1x1NTJi''@;'; put 'put ''OFx1NTJiYVx1NTJiYlx1NTJiZFx1NTJjMFx1NTJjNFx1NTJjNlx1NTJjOFx1NTJjY1x1NTJjZlx1NTJkMVx1NTJkNFx1NTJkNlx1NTJkYlx1NTJkY1x1NTJlMVx1NTJlNVx1NTJlOFx1NTJlOVx1NTJlYVx1NTJlY1x1NTJmMFx1NTJmMVx1NTJmNFx1NTJmNlx1NTJmN1x1NTMwMFx1NTMwM1x1''@;'; put 'put ''NTMwYVx1NTMwYiJdLFsiOGZiNGExIiwiXHU1MzBjXHU1MzExXHU1MzEzXHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzMwXHU1MzMyXHU1MzM1XHU1MzNjXHU1MzNkXHU1MzNlXHU1MzQyXHU1MzRjXHU1''@;'; put 'put ''MzRiXHU1MzU5XHU1MzViXHU1MzYxXHU1MzYzXHU1MzY1XHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc5XHU1MzdlXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhlXHU1MzkzXHU1Mzk0XHU1Mzk5XHU1MzlkXHU1M2ExXHU1M2E0XHU1M2FhXHU1M2FiXHU1M2FmXHU1M2IyXHU1M2I0XHU1M2I1XHU1M2I3''@;'; put 'put ''XHU1M2I4XHU1M2JhXHU1M2JkXHU1M2MwXHU1M2M1XHU1M2NmXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RkXHU1M2RlXHU1M2UwXHU1M2U2XHU1M2U3XHU1M2Y1XHU1NDAyXHU1NDEzXHU1NDFhXHU1NDIxXHU1NDI3XHU1NDI4XHU1NDJhXHU1NDJmXHU1NDMxXHU1NDM0XHU1NDM1XHU1''@;'; put 'put ''NDQzXHU1NDQ0XHU1NDQ3XHU1NDRkXHU1NDRmXHU1NDVlXHU1NDYyXHU1NDY0XHU1NDY2XHU1NDY3XHU1NDY5XHU1NDZiXHU1NDZkXHU1NDZlXHU1NDc0XHU1NDdmIl0sWyI4ZmI1YTEiLCJcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODhcdTU0ODlcdTU0OGRcdTU0OTFcdTU0OTVcdTU0OTZcdTU0''@;'; put 'put ''OWNcdTU0OWZcdTU0YTFcdTU0YTZcdTU0YTdcdTU0YTlcdTU0YWFcdTU0YWRcdTU0YWVcdTU0YjFcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmJcdTU0YmZcdTU0YzZcdTU0Y2FcdTU0Y2RcdTU0Y2VcdTU0ZTBcdTU0ZWFcdTU0ZWNcdTU0ZWZcdTU0ZjZcdTU0ZmNcdTU0ZmVcdTU0ZmZcdTU1MDBc''@;'; put 'put ''dTU1MDFcdTU1MDVcdTU1MDhcdTU1MDlcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTVcdTU1MmFcdTU1MmJcdTU1MzJcdTU1MzVcdTU1MzZcdTU1M2JcdTU1M2NcdTU1M2RcdTU1NDFcdTU1NDdcdTU1NDlcdTU1NGFcdTU1NGRcdTU1NTBcdTU1NTFcdTU1NThcdTU1NWFcdTU1NWJcdTU1NWVcdTU1''@;'; put 'put ''NjBcdTU1NjFcdTU1NjRcdTU1NjZcdTU1N2ZcdTU1ODFcdTU1ODJcdTU1ODZcdTU1ODhcdTU1OGVcdTU1OGZcdTU1OTFcdTU1OTJcdTU1OTNcdTU1OTRcdTU1OTdcdTU1YTNcdTU1YTRcdTU1YWRcdTU1YjJcdTU1YmZcdTU1YzFcdTU1YzNcdTU1YzZcdTU1YzlcdTU1Y2JcdTU1Y2NcdTU1Y2Vc''@;'; put 'put ''dTU1ZDFcdTU1ZDIiXSxbIjhmYjZhMSIsIlx1NTVkM1x1NTVkN1x1NTVkOFx1NTVkYlx1NTVkZVx1NTVlMlx1NTVlOVx1NTVmNlx1NTVmZlx1NTYwNVx1NTYwOFx1NTYwYVx1NTYwZCIsNSwiXHU1NjE5XHU1NjJjXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM5XHU1NjNiXHU1NjNjXHU1''@;'; put 'put ''NjNkXHU1NjNmXHU1NjQwXHU1NjQxXHU1NjQzXHU1NjQ0XHU1NjQ2XHU1NjQ5XHU1NjRiXHU1NjRkXHU1NjRmXHU1NjU0XHU1NjVlXHU1NjYwXHU1NjYxXHU1NjYyXHU1NjYzXHU1NjY2XHU1NjY5XHU1NjZkXHU1NjZmXHU1NjcxXHU1NjcyXHU1Njc1XHU1Njg0XHU1Njg1XHU1Njg4XHU1Njhi''@;'; put 'put ''XHU1NjhjXHU1Njk1XHU1Njk5XHU1NjlhXHU1NjlkXHU1NjllXHU1NjlmXHU1NmE2XHU1NmE3XHU1NmE4XHU1NmE5XHU1NmFiXHU1NmFjXHU1NmFkXHU1NmIxXHU1NmIzXHU1NmI3XHU1NmJlXHU1NmM1XHU1NmM5XHU1NmNhXHU1NmNiXHU1NmNmXHU1NmQwXHU1NmNjXHU1NmNkXHU1NmQ5XHU1''@;'; put 'put ''NmRjXHU1NmRkXHU1NmRmXHU1NmUxXHU1NmU0Iiw0LCJcdTU2ZjFcdTU2ZWJcdTU2ZWQiXSxbIjhmYjdhMSIsIlx1NTZmNlx1NTZmN1x1NTcwMVx1NTcwMlx1NTcwN1x1NTcwYVx1NTcwY1x1NTcxMVx1NTcxNVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcyMFx1NTcyMlx1NTcyM1x1NTcyNFx1NTcy''@;'; put 'put ''NVx1NTcyOVx1NTcyYVx1NTcyY1x1NTcyZVx1NTcyZlx1NTczM1x1NTczNFx1NTczZFx1NTczZVx1NTczZlx1NTc0NVx1NTc0Nlx1NTc0Y1x1NTc0ZFx1NTc1Mlx1NTc2Mlx1NTc2NVx1NTc2N1x1NTc2OFx1NTc2Ylx1NTc2ZCIsNCwiXHU1NzczXHU1Nzc0XHU1Nzc1XHU1Nzc3XHU1Nzc5XHU1''@;'; put 'put ''NzdhXHU1NzdiXHU1NzdjXHU1NzdlXHU1NzgxXHU1NzgzXHU1NzhjXHU1Nzk0XHU1Nzk3XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2ExXHU1Nzk1XHU1N2E3XHU1N2E4XHU1N2E5XHU1N2FjXHU1N2I4XHU1N2JkXHU1N2M3XHU1N2M4XHU1N2NjXHU1N2NmXHU1N2Q1''@;'; put 'put ''XHU1N2RkXHU1N2RlXHU1N2U0XHU1N2U2XHU1N2U3XHU1N2U5XHU1N2VkXHU1N2YwXHU1N2Y1XHU1N2Y2XHU1N2Y4XHU1N2ZkXHU1N2ZlXHU1N2ZmXHU1ODAzXHU1ODA0XHU1ODA4XHU1ODA5XHU1N2UxIl0sWyI4ZmI4YTEiLCJcdTU4MGNcdTU4MGRcdTU4MWJcdTU4MWVcdTU4MWZcdTU4MjBc''@;'; put 'put ''dTU4MjZcdTU4MjdcdTU4MmRcdTU4MzJcdTU4MzlcdTU4M2ZcdTU4NDlcdTU4NGNcdTU4NGRcdTU4NGZcdTU4NTBcdTU4NTVcdTU4NWZcdTU4NjFcdTU4NjRcdTU4NjdcdTU4NjhcdTU4NzhcdTU4N2NcdTU4N2ZcdTU4ODBcdTU4ODFcdTU4ODdcdTU4ODhcdTU4ODlcdTU4OGFcdTU4OGNcdTU4''@;'; put 'put ''OGRcdTU4OGZcdTU4OTBcdTU4OTRcdTU4OTZcdTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTZcdTU4YTlcdTU4YjFcdTU4YjJcdTU4YzRcdTU4YmNcdTU4YzJcdTU4YzhcdTU4Y2RcdTU4Y2VcdTU4ZDBcdTU4ZDJcdTU4ZDRcdTU4ZDZcdTU4ZGFcdTU4ZGRcdTU4ZTFcdTU4ZTJcdTU4ZTlc''@;'; put 'put ''dTU4ZjNcdTU5MDVcdTU5MDZcdTU5MGJcdTU5MGNcdTU5MTJcdTU5MTNcdTU5MTRcdTg2NDFcdTU5MWRcdTU5MjFcdTU5MjNcdTU5MjRcdTU5MjhcdTU5MmZcdTU5MzBcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2ZcdTU5NDNcdTU5NDZcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWRcdTU5''@;'; put 'put ''NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NmJcdTU5NmQiXSxbIjhmYjlhMSIsIlx1NTk2Zlx1NTk3Mlx1NTk3NVx1NTk3Nlx1NTk3OVx1NTk3Ylx1NTk3Y1x1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk5Mlx1NTk5NVx1NTk5N1x1NTk5Zlx1NTlhNFx1NTlhN1x1NTlhZFx1NTlhZVx1NTlhZlx1NTli''@;'; put 'put ''MFx1NTliM1x1NTliN1x1NTliYVx1NTliY1x1NTljMVx1NTljM1x1NTljNFx1NTljOFx1NTljYVx1NTljZFx1NTlkMlx1NTlkZFx1NTlkZVx1NTlkZlx1NTllM1x1NTllNFx1NTllN1x1NTllZVx1NTllZlx1NTlmMVx1NTlmMlx1NTlmNFx1NTlmN1x1NWEwMFx1NWEwNFx1NWEwY1x1NWEwZFx1''@;'; put 'put ''NWEwZVx1NWExMlx1NWExM1x1NWExZVx1NWEyM1x1NWEyNFx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyZFx1NWEzMFx1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Y1x1NWE1MFx1NWE1NVx1NWE1ZVx1NWE2M1x1NWE2NVx1NWE2N1x1NWE2ZFx1NWE3N1x1NWE3YVx1NWE3Ylx1NWE3ZVx1NWE4''@;'; put 'put ''Ylx1NWE5MFx1NWE5M1x1NWE5Nlx1NWE5OVx1NWE5Y1x1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMlx1NWFhN1x1NWFhY1x1NWFiMVx1NWFiMlx1NWFiM1x1NWFiNVx1NWFiOFx1NWFiYVx1NWFiYlx1NWFiZiJdLFsiOGZiYWExIiwiXHU1YWM0XHU1YWM2XHU1YWM4XHU1YWNmXHU1YWRhXHU1YWRj''@;'; put 'put ''XHU1YWUwXHU1YWU1XHU1YWVhXHU1YWVlXHU1YWY1XHU1YWY2XHU1YWZkXHU1YjAwXHU1YjAxXHU1YjA4XHU1YjE3XHU1YjM0XHU1YjE5XHU1YjFiXHU1YjFkXHU1YjIxXHU1YjI1XHU1YjJkXHU1YjM4XHU1YjQxXHU1YjRiXHU1YjRjXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjY4XHU1YjZlXHU1''@;'; put 'put ''YjZmXHU1YjdjXHU1YjdkXHU1YjdlXHU1YjdmXHU1YjgxXHU1Yjg0XHU1Yjg2XHU1YjhhXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkzXHU1Yjk0XHU1Yjk2XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmNk''@;'; put 'put ''XHU1YmNmXHU1YmQ2Iiw0LCJcdTViZTBcdTViZWZcdTViZjFcdTViZjRcdTViZmRcdTVjMGNcdTVjMTdcdTVjMWVcdTVjMWZcdTVjMjNcdTVjMjZcdTVjMjlcdTVjMmJcdTVjMmNcdTVjMmVcdTVjMzBcdTVjMzJcdTVjMzVcdTVjMzZcdTVjNTlcdTVjNWFcdTVjNWNcdTVjNjJcdTVjNjNcdTVj''@;'; put 'put ''NjdcdTVjNjhcdTVjNjkiXSxbIjhmYmJhMSIsIlx1NWM2ZFx1NWM3MFx1NWM3NFx1NWM3NVx1NWM3YVx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM4N1x1NWM4OFx1NWM4YVx1NWM4Zlx1NWM5Mlx1NWM5ZFx1NWM5Zlx1NWNhMFx1NWNhMlx1NWNhM1x1NWNhNlx1NWNhYVx1NWNiMlx1NWNiNFx1NWNi''@;'; put 'put ''NVx1NWNiYVx1NWNjOVx1NWNjYlx1NWNkMlx1NWNkZFx1NWNkN1x1NWNlZVx1NWNmMVx1NWNmMlx1NWNmNFx1NWQwMVx1NWQwNlx1NWQwZFx1NWQxMlx1NWQyYlx1NWQyM1x1NWQyNFx1NWQyNlx1NWQyN1x1NWQzMVx1NWQzNFx1NWQzOVx1NWQzZFx1NWQzZlx1NWQ0Mlx1NWQ0M1x1NWQ0Nlx1''@;'; put 'put ''NWQ0OFx1NWQ1NVx1NWQ1MVx1NWQ1OVx1NWQ0YVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2NFx1NWQ2YVx1NWQ2ZFx1NWQ3MFx1NWQ3OVx1NWQ3YVx1NWQ3ZVx1NWQ3Zlx1NWQ4MVx1NWQ4M1x1NWQ4OFx1NWQ4YVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5OVx1NWQ5Ylx1NWQ5''@;'; put 'put ''Zlx1NWRhMFx1NWRhN1x1NWRhYlx1NWRiMFx1NWRiNFx1NWRiOFx1NWRiOVx1NWRjM1x1NWRjN1x1NWRjYlx1NWRkMFx1NWRjZVx1NWRkOFx1NWRkOVx1NWRlMFx1NWRlNCJdLFsiOGZiY2ExIiwiXHU1ZGU5XHU1ZGY4XHU1ZGY5XHU1ZTAwXHU1ZTA3XHU1ZTBkXHU1ZTEyXHU1ZTE0XHU1ZTE1''@;'; put 'put ''XHU1ZTE4XHU1ZTFmXHU1ZTIwXHU1ZTJlXHU1ZTI4XHU1ZTMyXHU1ZTM1XHU1ZTNlXHU1ZTRiXHU1ZTUwXHU1ZTQ5XHU1ZTUxXHU1ZTU2XHU1ZTU4XHU1ZTViXHU1ZTVjXHU1ZTVlXHU1ZTY4XHU1ZTZhIiw0LCJcdTVlNzBcdTVlODBcdTVlOGJcdTVlOGVcdTVlYTJcdTVlYTRcdTVlYTVcdTVl''@;'; put 'put ''YThcdTVlYWFcdTVlYWNcdTVlYjFcdTVlYjNcdTVlYmRcdTVlYmVcdTVlYmZcdTVlYzZcdTVlY2NcdTVlY2JcdTVlY2VcdTVlZDFcdTVlZDJcdTVlZDRcdTVlZDVcdTVlZGNcdTVlZGVcdTVlZTVcdTVlZWJcdTVmMDJcdTVmMDZcdTVmMDdcdTVmMDhcdTVmMGVcdTVmMTlcdTVmMWNcdTVmMWRc''@;'; put 'put ''dTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzRcdTVmMzZcdTVmM2JcdTVmM2RcdTVmM2ZcdTVmNDBcdTVmNDRcdTVmNDVcdTVmNDdcdTVmNGRcdTVmNTBcdTVmNTRcdTVmNThcdTVmNWJcdTVmNjBcdTVmNjNcdTVmNjRcdTVmNjciXSxb''@;'; put 'put ''IjhmYmRhMSIsIlx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY4OVx1NWY4ZFx1NWY4Zlx1NWY5Nlx1NWY5Y1x1NWY5ZFx1NWZhMlx1NWZhN1x1NWZhYlx1NWZhNFx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiOFx1NWZjNFx1NWZjN1x1NWZj''@;'; put 'put ''OFx1NWZjOVx1NWZjYlx1NWZkMCIsNCwiXHU1ZmRlXHU1ZmUxXHU1ZmUyXHU1ZmU4XHU1ZmU5XHU1ZmVhXHU1ZmVjXHU1ZmVkXHU1ZmVlXHU1ZmVmXHU1ZmYyXHU1ZmYzXHU1ZmY2XHU1ZmZhXHU1ZmZjXHU2MDA3XHU2MDBhXHU2MDBkXHU2MDEzXHU2MDE0XHU2MDE3XHU2MDE4XHU2MDFhXHU2''@;'; put 'put ''MDFmXHU2MDI0XHU2MDJkXHU2MDMzXHU2MDM1XHU2MDQwXHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRjXHU2MDUxXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDVkXHU2MDYxXHU2MDY3XHU2MDcxXHU2MDdlXHU2MDdmXHU2MDgyXHU2MDg2XHU2MDg4XHU2MDhhXHU2MDhlXHU2MDkxXHU2MDkzXHU2MDk1''@;'; put 'put ''XHU2MDk4XHU2MDlkXHU2MDllXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE4XHU2MGIwXHU2MGIxXHU2MGI3Il0sWyI4ZmJlYTEiLCJcdTYwYmJcdTYwYmVcdTYwYzJcdTYwYzRcdTYwYzhcdTYwYzlcdTYwY2FcdTYwY2JcdTYwY2VcdTYwY2ZcdTYwZDRcdTYwZDVcdTYwZDlcdTYwZGJcdTYwZGRc''@;'; put 'put ''dTYwZGVcdTYwZTJcdTYwZTVcdTYwZjJcdTYwZjVcdTYwZjhcdTYwZmNcdTYwZmRcdTYxMDJcdTYxMDdcdTYxMGFcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOVx1NjExY1x1NjExZVx1NjEyMlx1NjEyYVx1NjEyYlx1NjEzMFx1NjEzMVx1NjEzNVx1NjEzNlx1NjEzN1x1NjEz''@;'; put 'put ''OVx1NjE0MVx1NjE0NVx1NjE0Nlx1NjE0OVx1NjE1ZVx1NjE2MFx1NjE2Y1x1NjE3Mlx1NjE3OFx1NjE3Ylx1NjE3Y1x1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4M1x1NjE4NFx1NjE4Ylx1NjE4ZFx1NjE5Mlx1NjE5M1x1NjE5N1x1NjE5OFx1NjE5Y1x1NjE5ZFx1NjE5Zlx1NjFhMFx1NjFhNVx1''@;'; put 'put ''NjFhOFx1NjFhYVx1NjFhZFx1NjFiOFx1NjFiOVx1NjFiY1x1NjFjMFx1NjFjMVx1NjFjMlx1NjFjZVx1NjFjZlx1NjFkNVx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMVx1NjFlMlx1NjFlN1x1NjFlOVx1NjFlNSJdLFsiOGZiZmExIiwiXHU2MWVjXHU2MWVkXHU2MWVmXHU2MjAxXHU2''@;'; put 'put ''MjAzXHU2MjA0XHU2MjA3XHU2MjEzXHU2MjE1XHU2MjFjXHU2MjIwXHU2MjIyXHU2MjIzXHU2MjI3XHU2MjI5XHU2MjJiXHU2MjM5XHU2MjNkXHU2MjQyXHU2MjQzXHU2MjQ0XHU2MjQ2XHU2MjRjXHU2MjUwXHU2MjUxXHU2MjUyXHU2MjU0XHU2MjU2XHU2MjVhXHU2MjVjXHU2MjY0XHU2MjZk''@;'; put 'put ''XHU2MjZmXHU2MjczXHU2MjdhXHU2MjdkXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2MmE2XHU2MmE4XHU2MmIzXHU2MmI2XHU2MmI3XHU2MmJhXHU2MmJlXHU2MmJmXHU2MmM0XHU2MmNlXHU2MmQ1XHU2MmQ2XHU2MmRhXHU2MmVhXHU2MmYyXHU2MmY0XHU2MmZjXHU2MmZkXHU2MzAzXHU2''@;'; put 'put ''MzA0XHU2MzBhXHU2MzBiXHU2MzBkXHU2MzEwXHU2MzEzXHU2MzE2XHU2MzE4XHU2MzI5XHU2MzJhXHU2MzJkXHU2MzM1XHU2MzM2XHU2MzM5XHU2MzNjXHU2MzQxXHU2MzQyXHU2MzQzXHU2MzQ0XHU2MzQ2XHU2MzRhXHU2MzRiXHU2MzRlXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU4XHU2MzVi''@;'; put 'put ''XHU2MzY1XHU2MzY2XHU2MzZjXHU2MzZkXHU2MzcxXHU2Mzc0XHU2Mzc1Il0sWyI4ZmMwYTEiLCJcdTYzNzhcdTYzN2NcdTYzN2RcdTYzN2ZcdTYzODJcdTYzODRcdTYzODdcdTYzOGFcdTYzOTBcdTYzOTRcdTYzOTVcdTYzOTlcdTYzOWFcdTYzOWVcdTYzYTRcdTYzYTZcdTYzYWRcdTYzYWVc''@;'; put 'put ''dTYzYWZcdTYzYmRcdTYzYzFcdTYzYzVcdTYzYzhcdTYzY2VcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZGNcdTYzZTBcdTYzZTVcdTYzZWFcdTYzZWNcdTYzZjJcdTYzZjNcdTYzZjVcdTYzZjhcdTYzZjlcdTY0MDlcdTY0MGFcdTY0MTBcdTY0MTJcdTY0MTRcdTY0MThcdTY0MWVcdTY0''@;'; put 'put ''MjBcdTY0MjJcdTY0MjRcdTY0MjVcdTY0MjlcdTY0MmFcdTY0MmZcdTY0MzBcdTY0MzVcdTY0M2RcdTY0M2ZcdTY0NGJcdTY0NGZcdTY0NTFcdTY0NTJcdTY0NTNcdTY0NTRcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjNcdTY0NmRcdTY0NzNcdTY0NzRc''@;'; put 'put ''dTY0N2JcdTY0N2RcdTY0ODVcdTY0ODdcdTY0OGZcdTY0OTBcdTY0OTFcdTY0OThcdTY0OTlcdTY0OWJcdTY0OWRcdTY0OWZcdTY0YTFcdTY0YTNcdTY0YTZcdTY0YThcdTY0YWNcdTY0YjNcdTY0YmRcdTY0YmVcdTY0YmYiXSxbIjhmYzFhMSIsIlx1NjRjNFx1NjRjOVx1NjRjYVx1NjRjYlx1''@;'; put 'put ''NjRjY1x1NjRjZVx1NjRkMFx1NjRkMVx1NjRkNVx1NjRkN1x1NjRlNFx1NjRlNVx1NjRlOVx1NjRlYVx1NjRlZFx1NjRmMFx1NjRmNVx1NjRmN1x1NjRmYlx1NjRmZlx1NjUwMVx1NjUwNFx1NjUwOFx1NjUwOVx1NjUwYVx1NjUwZlx1NjUxM1x1NjUxNFx1NjUxNlx1NjUxOVx1NjUxYlx1NjUx''@;'; put 'put ''ZVx1NjUxZlx1NjUyMlx1NjUyNlx1NjUyOVx1NjUyZVx1NjUzMVx1NjUzYVx1NjUzY1x1NjUzZFx1NjU0M1x1NjU0N1x1NjU0OVx1NjU1MFx1NjU1Mlx1NjU1NFx1NjU1Zlx1NjU2MFx1NjU2N1x1NjU2Ylx1NjU3YVx1NjU3ZFx1NjU4MVx1NjU4NVx1NjU4YVx1NjU5Mlx1NjU5NVx1NjU5OFx1''@;'; put 'put ''NjU5ZFx1NjVhMFx1NjVhM1x1NjVhNlx1NjVhZVx1NjViMlx1NjViM1x1NjViNFx1NjViZlx1NjVjMlx1NjVjOFx1NjVjOVx1NjVjZVx1NjVkMFx1NjVkNFx1NjVkNlx1NjVkOFx1NjVkZlx1NjVmMFx1NjVmMlx1NjVmNFx1NjVmNVx1NjVmOVx1NjVmZVx1NjVmZlx1NjYwMFx1NjYwNFx1NjYw''@;'; put 'put ''OFx1NjYwOVx1NjYwZFx1NjYxMVx1NjYxMlx1NjYxNVx1NjYxNlx1NjYxZCJdLFsiOGZjMmExIiwiXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMxXHU2NjMzXHU2NjM5XHU2NjM3XHU2NjQwXHU2NjQ1''@;'; put 'put ''XHU2NjQ2XHU2NjRhXHU2NjRjXHU2NjUxXHU2NjRlXHU2NjU3XHU2NjU4XHU2NjU5XHU2NjViXHU2NjVjXHU2NjYwXHU2NjYxXHU2NmZiXHU2NjZhXHU2NjZiXHU2NjZjXHU2NjdlXHU2NjczXHU2Njc1XHU2NjdmXHU2Njc3XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjgwXHU2NjdjXHU2NjhiXHU2''@;'; put 'put ''NjhjXHU2NjhkXHU2NjkwXHU2NjkyXHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjlmXHU2NmEwXHU2NmE0XHU2NmFkXHU2NmIxXHU2NmIyXHU2NmI1XHU2NmJiXHU2NmJmXHU2NmMwXHU2NmMyXHU2NmMzXHU2NmM4XHU2NmNjXHU2NmNlXHU2NmNmXHU2NmQ0XHU2NmRiXHU2NmRmXHU2NmU4''@;'; put 'put ''XHU2NmViXHU2NmVjXHU2NmVlXHU2NmZhXHU2NzA1XHU2NzA3XHU2NzBlXHU2NzEzXHU2NzE5XHU2NzFjXHU2NzIwXHU2NzIyXHU2NzMzXHU2NzNlXHU2NzQ1XHU2NzQ3XHU2NzQ4XHU2NzRjXHU2NzU0XHU2NzU1XHU2NzVkIl0sWyI4ZmMzYTEiLCJcdTY3NjZcdTY3NmNcdTY3NmVcdTY3NzRc''@;'; put 'put ''dTY3NzZcdTY3N2JcdTY3ODFcdTY3ODRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTNcdTY3OTZcdTY3OThcdTY3OTlcdTY3OWJcdTY3YjBcdTY3YjFcdTY3YjJcdTY3YjVcdTY3YmJcdTY3YmNcdTY3YmRcdTY3ZjlcdTY3YzBcdTY3YzJcdTY3YzNcdTY3YzVcdTY3YzhcdTY3YzlcdTY3ZDJcdTY3''@;'; put 'put ''ZDdcdTY3ZDlcdTY3ZGNcdTY3ZTFcdTY3ZTZcdTY3ZjBcdTY3ZjJcdTY3ZjZcdTY3ZjdcdTY4NTJcdTY4MTRcdTY4MTlcdTY4MWRcdTY4MWZcdTY4MjhcdTY4MjdcdTY4MmNcdTY4MmRcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzNcdTY4M2JcdTY4M2ZcdTY4NDRcdTY4NDVcdTY4NGFcdTY4NGNc''@;'; put 'put ''dTY4NTVcdTY4NTdcdTY4NThcdTY4NWJcdTY4NmJcdTY4NmUiLDQsIlx1Njg3NVx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg4Mlx1Njg4NFx1Njg4Nlx1Njg4OFx1Njg5Nlx1Njg5OFx1Njg5YVx1Njg5Y1x1NjhhMVx1NjhhM1x1NjhhNVx1NjhhOVx1NjhhYVx1NjhhZVx1NjhiMlx1Njhi''@;'; put 'put ''Ylx1NjhjNVx1NjhjOFx1NjhjY1x1NjhjZiJdLFsiOGZjNGExIiwiXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ2XHU2OGQ5XHU2OGRjXHU2OGRkXHU2OGU1XHU2OGU4XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGYwXHU2OGYxXHU2OGY1XHU2OGY2XHU2OGZiXHU2OGZjXHU2OGZkXHU2OTA2''@;'; put 'put ''XHU2OTA5XHU2OTBhXHU2OTEwXHU2OTExXHU2OTEzXHU2OTE2XHU2OTE3XHU2OTMxXHU2OTMzXHU2OTM1XHU2OTM4XHU2OTNiXHU2OTQyXHU2OTQ1XHU2OTQ5XHU2OTRlXHU2OTU3XHU2OTViXHU2OTYzXHU2OTY0XHU2OTY1XHU2OTY2XHU2OTY4XHU2OTY5XHU2OTZjXHU2OTcwXHU2OTcxXHU2''@;'; put 'put ''OTcyXHU2OTdhXHU2OTdiXHU2OTdmXHU2OTgwXHU2OThkXHU2OTkyXHU2OTk2XHU2OTk4XHU2OWExXHU2OWE1XHU2OWE2XHU2OWE4XHU2OWFiXHU2OWFkXHU2OWFmXHU2OWI3XHU2OWI4XHU2OWJhXHU2OWJjXHU2OWM1XHU2OWM4XHU2OWQxXHU2OWQ2XHU2OWQ3XHU2OWUyXHU2OWU1XHU2OWVl''@;'; put 'put ''XHU2OWVmXHU2OWYxXHU2OWYzXHU2OWY1XHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAzXHU2YTBmXHU2YTExXHU2YTE1XHU2YTFhXHU2YTFkXHU2YTIwXHU2YTI0XHU2YTI4XHU2YTMwXHU2YTMyIl0sWyI4ZmM1YTEiLCJcdTZhMzRcdTZhMzdcdTZhM2JcdTZhM2VcdTZhM2ZcdTZhNDVcdTZhNDZc''@;'; put 'put ''dTZhNDlcdTZhNGFcdTZhNGVcdTZhNTBcdTZhNTFcdTZhNTJcdTZhNTVcdTZhNTZcdTZhNWJcdTZhNjRcdTZhNjdcdTZhNmFcdTZhNzFcdTZhNzNcdTZhN2VcdTZhODFcdTZhODNcdTZhODZcdTZhODdcdTZhODlcdTZhOGJcdTZhOTFcdTZhOWJcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTVcdTZh''@;'; put 'put ''YWJcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjRcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzZcdTZhYzlcdTZhYzhcdTZhY2NcdTZhZDBcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZGNcdTZhZGRcdTZhZTRcdTZhZTdcdTZhZWNcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZmNcdTZhZmRcdTZiMDJcdTZiMDNc''@;'; put 'put ''dTZiMDZcdTZiMDdcdTZiMDlcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTdcdTZiMWJcdTZiMWVcdTZiMjRcdTZiMjhcdTZiMmJcdTZiMmNcdTZiMmZcdTZiMzVcdTZiMzZcdTZiM2JcdTZiM2ZcdTZiNDZcdTZiNGFcdTZiNGRcdTZiNTJcdTZiNTZcdTZiNThcdTZiNWRcdTZiNjBcdTZiNjdcdTZi''@;'; put 'put ''NmJcdTZiNmVcdTZiNzBcdTZiNzVcdTZiN2QiXSxbIjhmYzZhMSIsIlx1NmI3ZVx1NmI4Mlx1NmI4NVx1NmI5N1x1NmI5Ylx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhOFx1NmJhOVx1NmJhY1x1NmJhZFx1NmJhZVx1NmJiMFx1NmJiOFx1NmJiOVx1NmJiZFx1NmJiZVx1NmJjM1x1NmJj''@;'; put 'put ''NFx1NmJjOVx1NmJjY1x1NmJkNlx1NmJkYVx1NmJlMVx1NmJlM1x1NmJlNlx1NmJlN1x1NmJlZVx1NmJmMVx1NmJmN1x1NmJmOVx1NmJmZlx1NmMwMlx1NmMwNFx1NmMwNVx1NmMwOVx1NmMwZFx1NmMwZVx1NmMxMFx1NmMxMlx1NmMxOVx1NmMxZlx1NmMyNlx1NmMyN1x1NmMyOFx1NmMyY1x1''@;'; put 'put ''NmMyZVx1NmMzM1x1NmMzNVx1NmMzNlx1NmMzYVx1NmMzYlx1NmMzZlx1NmM0YVx1NmM0Ylx1NmM0ZFx1NmM0Zlx1NmM1Mlx1NmM1NFx1NmM1OVx1NmM1Ylx1NmM1Y1x1NmM2Ylx1NmM2ZFx1NmM2Zlx1NmM3NFx1NmM3Nlx1NmM3OFx1NmM3OVx1NmM3Ylx1NmM4NVx1NmM4Nlx1NmM4N1x1NmM4''@;'; put 'put ''OVx1NmM5NFx1NmM5NVx1NmM5N1x1NmM5OFx1NmM5Y1x1NmM5Zlx1NmNiMFx1NmNiMlx1NmNiNFx1NmNjMlx1NmNjNlx1NmNjZFx1NmNjZlx1NmNkMFx1NmNkMVx1NmNkMlx1NmNkNFx1NmNkNiJdLFsiOGZjN2ExIiwiXHU2Y2RhXHU2Y2RjXHU2Y2UwXHU2Y2U3XHU2Y2U5XHU2Y2ViXHU2Y2Vj''@;'; put 'put ''XHU2Y2VlXHU2Y2YyXHU2Y2Y0XHU2ZDA0XHU2ZDA3XHU2ZDBhXHU2ZDBlXHU2ZDBmXHU2ZDExXHU2ZDEzXHU2ZDFhXHU2ZDI2XHU2ZDI3XHU2ZDI4XHU2YzY3XHU2ZDJlXHU2ZDJmXHU2ZDMxXHU2ZDM5XHU2ZDNjXHU2ZDNmXHU2ZDU3XHU2ZDVlXHU2ZDVmXHU2ZDYxXHU2ZDY1XHU2ZDY3XHU2''@;'; put 'put ''ZDZmXHU2ZDcwXHU2ZDdjXHU2ZDgyXHU2ZDg3XHU2ZDkxXHU2ZDkyXHU2ZDk0XHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZGFhXHU2ZGFjXHU2ZGI0XHU2ZGI3XHU2ZGI5XHU2ZGJkXHU2ZGJmXHU2ZGM0XHU2ZGM4XHU2ZGNhXHU2ZGNlXHU2ZGNmXHU2ZGQ2XHU2ZGRiXHU2ZGRkXHU2ZGRmXHU2ZGUw''@;'; put 'put ''XHU2ZGUyXHU2ZGU1XHU2ZGU5XHU2ZGVmXHU2ZGYwXHU2ZGY0XHU2ZGY2XHU2ZGZjXHU2ZTAwXHU2ZTA0XHU2ZTFlXHU2ZTIyXHU2ZTI3XHU2ZTMyXHU2ZTM2XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTQ0XHU2ZTQ1XHU2ZTQ4XHU2ZTQ5XHU2ZTRiXHU2ZTRmXHU2ZTUxXHU2ZTUyXHU2ZTUzXHU2''@;'; put 'put ''ZTU0XHU2ZTU3XHU2ZTVjXHU2ZTVkXHU2ZTVlIl0sWyI4ZmM4YTEiLCJcdTZlNjJcdTZlNjNcdTZlNjhcdTZlNzNcdTZlN2JcdTZlN2RcdTZlOGRcdTZlOTNcdTZlOTlcdTZlYTBcdTZlYTdcdTZlYWRcdTZlYWVcdTZlYjFcdTZlYjNcdTZlYmJcdTZlYmZcdTZlYzBcdTZlYzFcdTZlYzNcdTZl''@;'; put 'put ''YzdcdTZlYzhcdTZlY2FcdTZlY2RcdTZlY2VcdTZlY2ZcdTZlZWJcdTZlZWRcdTZlZWVcdTZlZjlcdTZlZmJcdTZlZmRcdTZmMDRcdTZmMDhcdTZmMGFcdTZmMGNcdTZmMGRcdTZmMTZcdTZmMThcdTZmMWFcdTZmMWJcdTZmMjZcdTZmMjlcdTZmMmFcdTZmMmZcdTZmMzBcdTZmMzNcdTZmMzZc''@;'; put 'put ''dTZmM2JcdTZmM2NcdTZmMmRcdTZmNGZcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWRcdTZmNWVcdTZmNjFcdTZmNjJcdTZmNjhcdTZmNmNcdTZmN2RcdTZmN2VcdTZmODNcdTZmODdcdTZmODhcdTZmOGJcdTZmOGNcdTZmOGRcdTZmOTBcdTZmOTJcdTZmOTNcdTZm''@;'; put 'put ''OTRcdTZmOTZcdTZmOWFcdTZmOWZcdTZmYTBcdTZmYTVcdTZmYTZcdTZmYTdcdTZmYThcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjVcdTZmYjZcdTZmYmNcdTZmYzVcdTZmYzdcdTZmYzhcdTZmY2EiXSxbIjhmYzlhMSIsIlx1NmZkYVx1NmZkZVx1NmZlOFx1NmZlOVx1NmZmMFx1NmZmNVx1NmZm''@;'; put 'put ''OVx1NmZmY1x1NmZmZFx1NzAwMFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAwZFx1NzAxN1x1NzAyMFx1NzAyM1x1NzAyZlx1NzAzNFx1NzAzN1x1NzAzOVx1NzAzY1x1NzA0M1x1NzA0NFx1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA1NFx1NzA1NVx1NzA1ZFx1NzA1ZVx1NzA0ZVx1NzA2NFx1''@;'; put 'put ''NzA2NVx1NzA2Y1x1NzA2ZVx1NzA3NVx1NzA3Nlx1NzA3ZVx1NzA4MVx1NzA4NVx1NzA4Nlx1NzA5NCIsNCwiXHU3MDliXHU3MGE0XHU3MGFiXHU3MGIwXHU3MGIxXHU3MGI0XHU3MGI3XHU3MGNhXHU3MGQxXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ4XHU3MGRjXHU3MGU0XHU3MGZh''@;'; put 'put ''XHU3MTAzIiw0LCJcdTcxMGJcdTcxMGNcdTcxMGZcdTcxMWVcdTcxMjBcdTcxMmJcdTcxMmRcdTcxMmZcdTcxMzBcdTcxMzFcdTcxMzhcdTcxNDFcdTcxNDVcdTcxNDZcdTcxNDdcdTcxNGFcdTcxNGJcdTcxNTBcdTcxNTJcdTcxNTdcdTcxNWFcdTcxNWNcdTcxNWVcdTcxNjAiXSxbIjhmY2Fh''@;'; put 'put ''MSIsIlx1NzE2OFx1NzE3OVx1NzE4MFx1NzE4NVx1NzE4N1x1NzE4Y1x1NzE5Mlx1NzE5YVx1NzE5Ylx1NzFhMFx1NzFhMlx1NzFhZlx1NzFiMFx1NzFiMlx1NzFiM1x1NzFiYVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjNFx1NzFjYlx1NzFjY1x1NzFkM1x1NzFkNlx1NzFkOVx1NzFkYVx1NzFk''@;'; put 'put ''Y1x1NzFmOFx1NzFmZVx1NzIwMFx1NzIwN1x1NzIwOFx1NzIwOVx1NzIxM1x1NzIxN1x1NzIxYVx1NzIxZFx1NzIxZlx1NzIyNFx1NzIyYlx1NzIyZlx1NzIzNFx1NzIzOFx1NzIzOVx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NVx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1M1x1NzI1NVx1NzI1Nlx1''@;'; put 'put ''NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2OFx1NzI2Ylx1NzI2ZVx1NzI2Zlx1NzI3MVx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzI4NFx1NzI4OVx1NzI4ZFx1NzI4ZVx1NzI5M1x1NzI5Ylx1NzJhOFx1NzJhZFx1NzJhZVx1NzJiMVx1NzJiNFx1NzJiZVx1NzJj''@;'; put 'put ''MVx1NzJjN1x1NzJjOVx1NzJjY1x1NzJkNVx1NzJkNlx1NzJkOFx1NzJkZlx1NzJlNVx1NzJmM1x1NzJmNFx1NzJmYVx1NzJmYiJdLFsiOGZjYmExIiwiXHU3MmZlXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA3XHU3MzBiXHU3MzBkXHU3MzEyXHU3MzEzXHU3MzE4XHU3MzE5XHU3MzFlXHU3MzIy''@;'; put 'put ''XHU3MzI0XHU3MzI3XHU3MzI4XHU3MzJjXHU3MzMxXHU3MzMyXHU3MzM1XHU3MzNhXHU3MzNiXHU3MzNkXHU3MzQzXHU3MzRkXHU3MzUwXHU3MzUyXHU3MzU2XHU3MzU4XHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzY2XHU3MzY3XHU3MzY5XHU3MzZiXHU3MzZjXHU3MzZlXHU3MzZmXHU3''@;'; put 'put ''MzcxXHU3Mzc3XHU3Mzc5XHU3MzdjXHU3MzgwXHU3MzgxXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3MzhlXHU3MzkwXHU3MzkzXHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3MzljXHU3MzllXHU3MzlmXHU3M2EwXHU3M2EyXHU3M2E1XHU3M2E2XHU3M2FhXHU3M2FiXHU3M2FkXHU3M2I1XHU3M2I3XHU3M2I5''@;'; put 'put ''XHU3M2JjXHU3M2JkXHU3M2JmXHU3M2M1XHU3M2M2XHU3M2M5XHU3M2NiXHU3M2NjXHU3M2NmXHU3M2QyXHU3M2QzXHU3M2Q2XHU3M2Q5XHU3M2RkXHU3M2UxXHU3M2UzXHU3M2U2XHU3M2U3XHU3M2U5XHU3M2Y0XHU3M2Y1XHU3M2Y3XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZkIl0sWyI4ZmNj''@;'; put 'put ''YTEiLCJcdTczZmZcdTc0MDBcdTc0MDFcdTc0MDRcdTc0MDdcdTc0MGFcdTc0MTFcdTc0MWFcdTc0MWJcdTc0MjRcdTc0MjZcdTc0MjgiLDksIlx1NzQzOVx1NzQ0MFx1NzQ0M1x1NzQ0NFx1NzQ0Nlx1NzQ0N1x1NzQ0Ylx1NzQ0ZFx1NzQ1MVx1NzQ1Mlx1NzQ1N1x1NzQ1ZFx1NzQ2Mlx1NzQ2''@;'; put 'put ''Nlx1NzQ2N1x1NzQ2OFx1NzQ2Ylx1NzQ2ZFx1NzQ2ZVx1NzQ3MVx1NzQ3Mlx1NzQ4MFx1NzQ4MVx1NzQ4NVx1NzQ4Nlx1NzQ4N1x1NzQ4OVx1NzQ4Zlx1NzQ5MFx1NzQ5MVx1NzQ5Mlx1NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Y1x1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhM1x1NzRhNlx1NzRhOFx1''@;'; put 'put ''NzRhOVx1NzRhYVx1NzRhYlx1NzRhZVx1NzRhZlx1NzRiMVx1NzRiMlx1NzRiNVx1NzRiOVx1NzRiYlx1NzRiZlx1NzRjOFx1NzRjOVx1NzRjY1x1NzRkMFx1NzRkM1x1NzRkOFx1NzRkYVx1NzRkYlx1NzRkZVx1NzRkZlx1NzRlNFx1NzRlOFx1NzRlYVx1NzRlYlx1NzRlZlx1NzRmNFx1NzRm''@;'; put 'put ''YVx1NzRmYlx1NzRmY1x1NzRmZlx1NzUwNiJdLFsiOGZjZGExIiwiXHU3NTEyXHU3NTE2XHU3NTE3XHU3NTIwXHU3NTIxXHU3NTI0XHU3NTI3XHU3NTI5XHU3NTJhXHU3NTJmXHU3NTM2XHU3NTM5XHU3NTNkXHU3NTNlXHU3NTNmXHU3NTQwXHU3NTQzXHU3NTQ3XHU3NTQ4XHU3NTRlXHU3NTUw''@;'; put 'put ''XHU3NTUyXHU3NTU3XHU3NTVlXHU3NTVmXHU3NTYxXHU3NTZmXHU3NTcxXHU3NTc5Iiw1LCJcdTc1ODFcdTc1ODVcdTc1OTBcdTc1OTJcdTc1OTNcdTc1OTVcdTc1OTlcdTc1OWNcdTc1YTJcdTc1YTRcdTc1YjRcdTc1YmFcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzRcdTc1YzZcdTc1Y2NcdTc1''@;'; put 'put ''Y2VcdTc1Y2ZcdTc1ZDdcdTc1ZGNcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTRcdTc1ZTdcdTc1ZWNcdTc1ZWVcdTc1ZWZcdTc1ZjFcdTc1ZjlcdTc2MDBcdTc2MDJcdTc2MDNcdTc2MDRcdTc2MDdcdTc2MDhcdTc2MGFcdTc2MGNcdTc2MGZcdTc2MTJcdTc2MTNcdTc2MTVcdTc2MTZcdTc2MTlc''@;'; put 'put ''dTc2MWJcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjNcdTc2MjVcdTc2MjZcdTc2MjlcdTc2MmRcdTc2MzJcdTc2MzNcdTc2MzVcdTc2MzhcdTc2MzkiXSxbIjhmY2VhMSIsIlx1NzYzYVx1NzYzY1x1NzY0YVx1NzY0MFx1NzY0MVx1NzY0M1x1NzY0NFx1NzY0NVx1NzY0OVx1NzY0Ylx1NzY1NVx1''@;'; put 'put ''NzY1OVx1NzY1Zlx1NzY2NFx1NzY2NVx1NzY2ZFx1NzY2ZVx1NzY2Zlx1NzY3MVx1NzY3NFx1NzY4MVx1NzY4NVx1NzY4Y1x1NzY4ZFx1NzY5NVx1NzY5Ylx1NzY5Y1x1NzY5ZFx1NzY5Zlx1NzZhMFx1NzZhMiIsNiwiXHU3NmFhXHU3NmFkXHU3NmJkXHU3NmMxXHU3NmM1XHU3NmM5XHU3NmNi''@;'; put 'put ''XHU3NmNjXHU3NmNlXHU3NmQ0XHU3NmQ5XHU3NmUwXHU3NmU2XHU3NmU4XHU3NmVjXHU3NmYwXHU3NmYxXHU3NmY2XHU3NmY5XHU3NmZjXHU3NzAwXHU3NzA2XHU3NzBhXHU3NzBlXHU3NzEyXHU3NzE0XHU3NzE1XHU3NzE3XHU3NzE5XHU3NzFhXHU3NzFjXHU3NzIyXHU3NzI4XHU3NzJkXHU3''@;'; put 'put ''NzJlXHU3NzJmXHU3NzM0XHU3NzM1XHU3NzM2XHU3NzM5XHU3NzNkXHU3NzNlXHU3NzQyXHU3NzQ1XHU3NzQ2XHU3NzRhXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzU2XHU3NzU3XHU3NzVjXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzYyIl0sWyI4ZmNmYTEiLCJcdTc3NjRcdTc3NjdcdTc3''@;'; put 'put ''NmFcdTc3NmNcdTc3NzBcdTc3NzJcdTc3NzNcdTc3NzRcdTc3N2FcdTc3N2RcdTc3ODBcdTc3ODRcdTc3OGNcdTc3OGRcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OWFcdTc3OWZcdTc3YTJcdTc3YTdcdTc3YWFcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjVcdTc3YmVcdTc3YzNcdTc3YzlcdTc3ZDFc''@;'; put 'put ''dTc3ZDJcdTc3ZDVcdTc3ZDlcdTc3ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTRcdTc3ZTZcdTc3ZWFcdTc3ZWNcdTc3ZjBcdTc3ZjFcdTc3ZjRcdTc3ZjhcdTc3ZmJcdTc4MDVcdTc4MDZcdTc4MDlcdTc4MGRcdTc4MGVcdTc4MTFcdTc4MWRcdTc4MjFcdTc4MjJcdTc4MjNcdTc4MmRcdTc4MmVcdTc4''@;'; put 'put ''MzBcdTc4MzVcdTc4MzdcdTc4NDNcdTc4NDRcdTc4NDdcdTc4NDhcdTc4NGNcdTc4NGVcdTc4NTJcdTc4NWNcdTc4NWVcdTc4NjBcdTc4NjFcdTc4NjNcdTc4NjRcdTc4NjhcdTc4NmFcdTc4NmVcdTc4N2FcdTc4N2VcdTc4OGFcdTc4OGZcdTc4OTRcdTc4OThcdTc4YTFcdTc4OWRcdTc4OWVc''@;'; put 'put ''dTc4OWZcdTc4YTRcdTc4YThcdTc4YWNcdTc4YWRcdTc4YjBcdTc4YjFcdTc4YjJcdTc4YjMiXSxbIjhmZDBhMSIsIlx1NzhiYlx1NzhiZFx1NzhiZlx1NzhjN1x1NzhjOFx1NzhjOVx1NzhjY1x1NzhjZVx1NzhkMlx1NzhkM1x1NzhkNVx1NzhkNlx1NzhlNFx1NzhkYlx1NzhkZlx1NzhlMFx1''@;'; put 'put ''NzhlMVx1NzhlNlx1NzhlYVx1NzhmMlx1NzhmM1x1NzkwMFx1NzhmNlx1NzhmN1x1NzhmYVx1NzhmYlx1NzhmZlx1NzkwNlx1NzkwY1x1NzkxMFx1NzkxYVx1NzkxY1x1NzkxZVx1NzkxZlx1NzkyMFx1NzkyNVx1NzkyN1x1NzkyOVx1NzkyZFx1NzkzMVx1NzkzNFx1NzkzNVx1NzkzYlx1Nzkz''@;'; put 'put ''ZFx1NzkzZlx1Nzk0NFx1Nzk0NVx1Nzk0Nlx1Nzk0YVx1Nzk0Ylx1Nzk0Zlx1Nzk1MVx1Nzk1NFx1Nzk1OFx1Nzk1Ylx1Nzk1Y1x1Nzk2N1x1Nzk2OVx1Nzk2Ylx1Nzk3Mlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZVx1Nzk4Ylx1Nzk4Y1x1Nzk5MVx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1''@;'; put 'put ''Nzk5OFx1Nzk5Ylx1Nzk5Y1x1NzlhMVx1NzlhOFx1NzlhOVx1NzlhYlx1NzlhZlx1NzliMVx1NzliNFx1NzliOFx1NzliYlx1NzljMlx1NzljNFx1NzljN1x1NzljOFx1NzljYVx1NzljZlx1NzlkNFx1NzlkNlx1NzlkYVx1NzlkZFx1NzlkZSJdLFsiOGZkMWExIiwiXHU3OWUwXHU3OWUyXHU3''@;'; put 'put ''OWU1XHU3OWVhXHU3OWViXHU3OWVkXHU3OWYxXHU3OWY4XHU3OWZjXHU3YTAyXHU3YTAzXHU3YTA3XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTExXHU3YTE1XHU3YTFiXHU3YTFlXHU3YTIxXHU3YTI3XHU3YTJiXHU3YTJkXHU3YTJmXHU3YTMwXHU3YTM0XHU3YTM1XHU3YTM4XHU3YTM5XHU3YTNh''@;'; put 'put ''XHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTRjXHU3YTU1XHU3YTU2XHU3YTU5XHU3YTVjXHU3YTVkXHU3YTVmXHU3YTYwXHU3YTY1XHU3YTY3XHU3YTZhXHU3YTZkXHU3YTc1XHU3YTc4XHU3YTdlXHU3YTgwXHU3YTgyXHU3YTg1XHU3YTg2XHU3YThhXHU3YThiXHU3YTkwXHU3YTkxXHU3''@;'; put 'put ''YTk0XHU3YTllXHU3YWEwXHU3YWEzXHU3YWFjXHU3YWIzXHU3YWI1XHU3YWI5XHU3YWJiXHU3YWJjXHU3YWM2XHU3YWM5XHU3YWNjXHU3YWNlXHU3YWQxXHU3YWRiXHU3YWU4XHU3YWU5XHU3YWViXHU3YWVjXHU3YWYxXHU3YWY0XHU3YWZiXHU3YWZkXHU3YWZlXHU3YjA3XHU3YjE0XHU3YjFm''@;'; put 'put ''XHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJhXHU3YjJiXHU3YjJkXHU3YjJlXHU3YjJmXHU3YjMwIl0sWyI4ZmQyYTEiLCJcdTdiMzFcdTdiMzRcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDdcdTdiNGVcdTdiNTVcdTdiNjBcdTdiNjRcdTdiNjZcdTdiNjlcdTdiNmFcdTdiNmRcdTdiNmZc''@;'; put 'put ''dTdiNzJcdTdiNzNcdTdiNzdcdTdiODRcdTdiODlcdTdiOGVcdTdiOTBcdTdiOTFcdTdiOTZcdTdiOWJcdTdiOWVcdTdiYTBcdTdiYTVcdTdiYWNcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjVcdTdiYjZcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYzJcdTdiYzVcdTdiYzhcdTdiY2FcdTdi''@;'; put 'put ''ZDRcdTdiZDZcdTdiZDdcdTdiZDlcdTdiZGFcdTdiZGJcdTdiZThcdTdiZWFcdTdiZjJcdTdiZjRcdTdiZjVcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmNcdTdiZmVcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRcdTdjMDZcdTdjMDlcdTdjMGJcdTdjMGNcdTdjMGVcdTdjMGZcdTdjMTlcdTdjMWJc''@;'; put 'put ''dTdjMjBcdTdjMjVcdTdjMjZcdTdjMjhcdTdjMmNcdTdjMzFcdTdjMzNcdTdjMzRcdTdjMzZcdTdjMzlcdTdjM2FcdTdjNDZcdTdjNGFcdTdjNTVcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTkiLDVdLFsiOGZkM2ExIiwiXHU3YzYxXHU3YzYzXHU3YzY3XHU3YzY5XHU3YzZkXHU3YzZlXHU3Yzcw''@;'; put 'put ''XHU3YzcyXHU3Yzc5XHU3YzdjXHU3YzdkXHU3Yzg2XHU3Yzg3XHU3YzhmXHU3Yzk0XHU3YzllXHU3Y2EwXHU3Y2E2XHU3Y2IwXHU3Y2I2XHU3Y2I3XHU3Y2JhXHU3Y2JiXHU3Y2JjXHU3Y2JmXHU3Y2M0XHU3Y2M3XHU3Y2M4XHU3Y2M5XHU3Y2NkXHU3Y2NmXHU3Y2QzXHU3Y2Q0XHU3Y2Q1XHU3''@;'; put 'put ''Y2Q3XHU3Y2Q5XHU3Y2RhXHU3Y2RkXHU3Y2U2XHU3Y2U5XHU3Y2ViXHU3Y2Y1XHU3ZDAzXHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBmXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE2XHU3ZDFkXHU3ZDFlXHU3ZDIzXHU3ZDI2XHU3ZDJhXHU3ZDJkXHU3ZDMxXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDQw''@;'; put 'put ''XHU3ZDQxXHU3ZDQ3XHU3ZDQ4XHU3ZDRkXHU3ZDUxXHU3ZDUzXHU3ZDU3XHU3ZDU5XHU3ZDVhXHU3ZDVjXHU3ZDVkXHU3ZDY1XHU3ZDY3XHU3ZDZhXHU3ZDcwXHU3ZDc4XHU3ZDdhXHU3ZDdiXHU3ZDdmXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg1XHU3ZDg2XHU3ZDg4XHU3ZDhiXHU3ZDhjXHU3''@;'; put 'put ''ZDhkXHU3ZDkxXHU3ZDk2XHU3ZDk3XHU3ZDlkIl0sWyI4ZmQ0YTEiLCJcdTdkOWVcdTdkYTZcdTdkYTdcdTdkYWFcdTdkYjNcdTdkYjZcdTdkYjdcdTdkYjlcdTdkYzIiLDQsIlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RkN1x1N2RkOVx1N2UwMFx1N2RlMlx1N2RlNVx1N2RlNlx1N2RlYVx1N2Rl''@;'; put 'put ''Ylx1N2RlZFx1N2RmMVx1N2RmNVx1N2RmNlx1N2RmOVx1N2RmYVx1N2UwOFx1N2UxMFx1N2UxMVx1N2UxNVx1N2UxN1x1N2UxY1x1N2UxZFx1N2UyMFx1N2UyN1x1N2UyOFx1N2UyY1x1N2UyZFx1N2UyZlx1N2UzM1x1N2UzNlx1N2UzZlx1N2U0NFx1N2U0NVx1N2U0N1x1N2U0ZVx1N2U1MFx1''@;'; put 'put ''N2U1Mlx1N2U1OFx1N2U1Zlx1N2U2MVx1N2U2Mlx1N2U2NVx1N2U2Ylx1N2U2ZVx1N2U2Zlx1N2U3M1x1N2U3OFx1N2U3ZVx1N2U4MVx1N2U4Nlx1N2U4N1x1N2U4YVx1N2U4ZFx1N2U5MVx1N2U5NVx1N2U5OFx1N2U5YVx1N2U5ZFx1N2U5ZVx1N2YzY1x1N2YzYlx1N2YzZFx1N2YzZVx1N2Yz''@;'; put 'put ''Zlx1N2Y0M1x1N2Y0NFx1N2Y0N1x1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y2MVx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2ZCJdLFsiOGZkNWExIiwiXHU3ZjcxXHU3ZjdkXHU3ZjdlXHU3ZjdmXHU3ZjgwXHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3Zjkx''@;'; put 'put ''XHU3Zjk2XHU3Zjk3XHU3ZjljXHU3ZmExXHU3ZmEyXHU3ZmE2XHU3ZmFhXHU3ZmFkXHU3ZmI0XHU3ZmJjXHU3ZmJmXHU3ZmMwXHU3ZmMzXHU3ZmM4XHU3ZmNlXHU3ZmNmXHU3ZmRiXHU3ZmRmXHU3ZmUzXHU3ZmU1XHU3ZmU4XHU3ZmVjXHU3ZmVlXHU3ZmVmXHU3ZmYyXHU3ZmZhXHU3ZmZkXHU3''@;'; put 'put ''ZmZlXHU3ZmZmXHU4MDA3XHU4MDA4XHU4MDBhXHU4MDBkXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDE0XHU4MDE2XHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIwXHU4MDI0XHU4MDI2XHU4MDJjXHU4MDJlXHU4MDMwXHU4MDM0XHU4MDM1XHU4MDM3XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNl''@;'; put 'put ''XHU4MDQwXHU4MDQ0XHU4MDYwXHU4MDY0XHU4MDY2XHU4MDZkXHU4MDcxXHU4MDc1XHU4MDgxXHU4MDg4XHU4MDhlXHU4MDljXHU4MDllXHU4MGE2XHU4MGE3XHU4MGFiXHU4MGI4XHU4MGI5XHU4MGM4XHU4MGNkXHU4MGNmXHU4MGQyXHU4MGQ0XHU4MGQ1XHU4MGQ3XHU4MGQ4XHU4MGUwXHU4''@;'; put 'put ''MGVkXHU4MGVlIl0sWyI4ZmQ2YTEiLCJcdTgwZjBcdTgwZjJcdTgwZjNcdTgwZjZcdTgwZjlcdTgwZmFcdTgwZmVcdTgxMDNcdTgxMGJcdTgxMTZcdTgxMTdcdTgxMThcdTgxMWNcdTgxMWVcdTgxMjBcdTgxMjRcdTgxMjdcdTgxMmNcdTgxMzBcdTgxMzVcdTgxM2FcdTgxM2NcdTgxNDVcdTgx''@;'; put 'put ''NDdcdTgxNGFcdTgxNGNcdTgxNTJcdTgxNTdcdTgxNjBcdTgxNjFcdTgxNjdcdTgxNjhcdTgxNjlcdTgxNmRcdTgxNmZcdTgxNzdcdTgxODFcdTgxOTBcdTgxODRcdTgxODVcdTgxODZcdTgxOGJcdTgxOGVcdTgxOTZcdTgxOThcdTgxOWJcdTgxOWVcdTgxYTJcdTgxYWVcdTgxYjJcdTgxYjRc''@;'; put 'put ''dTgxYmJcdTgxY2JcdTgxYzNcdTgxYzVcdTgxY2FcdTgxY2VcdTgxY2ZcdTgxZDVcdTgxZDdcdTgxZGJcdTgxZGRcdTgxZGVcdTgxZTFcdTgxZTRcdTgxZWJcdTgxZWNcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjhcdTgxZjlcdTgxZmRcdTgxZmZcdTgyMDBcdTgyMDNcdTgy''@;'; put 'put ''MGZcdTgyMTNcdTgyMTRcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjFcdTgyMjJcdTgyMjhcdTgyMzJcdTgyMzRcdTgyM2FcdTgyNDNcdTgyNDRcdTgyNDVcdTgyNDYiXSxbIjhmZDdhMSIsIlx1ODI0Ylx1ODI0ZVx1ODI0Zlx1ODI1MVx1ODI1Nlx1ODI1Y1x1ODI2MFx1ODI2M1x1ODI2N1x1ODI2''@;'; put 'put ''ZFx1ODI3NFx1ODI3Ylx1ODI3ZFx1ODI3Zlx1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NFx1ODI4N1x1ODI4OVx1ODI4YVx1ODI4ZVx1ODI5MVx1ODI5NFx1ODI5Nlx1ODI5OFx1ODI5YVx1ODI5Ylx1ODJhMFx1ODJhMVx1ODJhM1x1ODJhNFx1ODJhN1x1ODJhOFx1ODJhOVx1ODJhYVx1ODJhZVx1''@;'; put 'put ''ODJiMFx1ODJiMlx1ODJiNFx1ODJiN1x1ODJiYVx1ODJiY1x1ODJiZVx1ODJiZlx1ODJjNlx1ODJkMFx1ODJkNVx1ODJkYVx1ODJlMFx1ODJlMlx1ODJlNFx1ODJlOFx1ODJlYVx1ODJlZFx1ODJlZlx1ODJmNlx1ODJmN1x1ODJmZFx1ODJmZVx1ODMwMFx1ODMwMVx1ODMwN1x1ODMwOFx1ODMw''@;'; put 'put ''YVx1ODMwYlx1ODM1NFx1ODMxYlx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMVx1ODMyMlx1ODMyY1x1ODMyZFx1ODMyZVx1ODMzMFx1ODMzM1x1ODMzN1x1ODMzYVx1ODMzY1x1ODMzZFx1ODM0Mlx1ODM0M1x1ODM0NFx1ODM0N1x1ODM0ZFx1ODM0ZVx1ODM1MVx1ODM1NVx1ODM1Nlx1ODM1N1x1''@;'; put 'put ''ODM3MFx1ODM3OCJdLFsiOGZkOGExIiwiXHU4MzdkXHU4MzdmXHU4MzgwXHU4MzgyXHU4Mzg0XHU4Mzg2XHU4MzhkXHU4MzkyXHU4Mzk0XHU4Mzk1XHU4Mzk4XHU4Mzk5XHU4MzliXHU4MzljXHU4MzlkXHU4M2E2XHU4M2E3XHU4M2E5XHU4M2FjXHU4M2JlXHU4M2JmXHU4M2MwXHU4M2M3XHU4''@;'; put 'put ''M2M5XHU4M2NmXHU4M2QwXHU4M2QxXHU4M2Q0XHU4M2RkXHU4MzUzXHU4M2U4XHU4M2VhXHU4M2Y2XHU4M2Y4XHU4M2Y5XHU4M2ZjXHU4NDAxXHU4NDA2XHU4NDBhXHU4NDBmXHU4NDExXHU4NDE1XHU4NDE5XHU4M2FkXHU4NDJmXHU4NDM5XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDRhXHU4NDRk''@;'; put 'put ''XHU4NDRmXHU4NDUxXHU4NDUyXHU4NDU2XHU4NDU4XHU4NDU5XHU4NDVhXHU4NDVjXHU4NDYwXHU4NDY0XHU4NDY1XHU4NDY3XHU4NDZhXHU4NDcwXHU4NDczXHU4NDc0XHU4NDc2XHU4NDc4XHU4NDdjXHU4NDdkXHU4NDgxXHU4NDg1XHU4NDkyXHU4NDkzXHU4NDk1XHU4NDllXHU4NGE2XHU4''@;'; put 'put ''NGE4XHU4NGE5XHU4NGFhXHU4NGFmXHU4NGIxXHU4NGI0XHU4NGJhXHU4NGJkXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGM3XHU4NGM4XHU4NGNjXHU4NGNmXHU4NGQzIl0sWyI4ZmQ5YTEiLCJcdTg0ZGNcdTg0ZTdcdTg0ZWFcdTg0ZWZcdTg0ZjBcdTg0ZjFcdTg0ZjJcdTg0ZjdcdTg1MzJcdTg0''@;'; put 'put ''ZmFcdTg0ZmJcdTg0ZmRcdTg1MDJcdTg1MDNcdTg1MDdcdTg1MGNcdTg1MGVcdTg1MTBcdTg1MWNcdTg1MWVcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjdcdTg1MmFcdTg1MmJcdTg1MmZcdTg1MzNcdTg1MzRcdTg1MzZcdTg1M2ZcdTg1NDZcdTg1NGYiLDQsIlx1ODU1Nlx1ODU1OVx1''@;'; put 'put ''ODU1YyIsNiwiXHU4NTY0XHU4NTZiXHU4NTZmXHU4NTc5XHU4NTdhXHU4NTdiXHU4NTdkXHU4NTdmXHU4NTgxXHU4NTg1XHU4NTg2XHU4NTg5XHU4NThiXHU4NThjXHU4NThmXHU4NTkzXHU4NTk4XHU4NTlkXHU4NTlmXHU4NWEwXHU4NWEyXHU4NWE1XHU4NWE3XHU4NWI0XHU4NWI2XHU4NWI3''@;'; put 'put ''XHU4NWI4XHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMyXHU4NWM3XHU4NWNhXHU4NWNiXHU4NWNlXHU4NWFkXHU4NWQ4XHU4NWRhXHU4NWRmXHU4NWUwXHU4NWU2XHU4NWU4XHU4NWVkXHU4NWYzXHU4NWY2XHU4NWZjIl0sWyI4ZmRhYTEiLCJcdTg1ZmZcdTg2MDBcdTg2MDRcdTg2MDVc''@;'; put 'put ''dTg2MGRcdTg2MGVcdTg2MTBcdTg2MTFcdTg2MTJcdTg2MThcdTg2MTlcdTg2MWJcdTg2MWVcdTg2MjFcdTg2MjdcdTg2MjlcdTg2MzZcdTg2MzhcdTg2M2FcdTg2M2NcdTg2M2RcdTg2NDBcdTg2NDJcdTg2NDZcdTg2NTJcdTg2NTNcdTg2NTZcdTg2NTdcdTg2NThcdTg2NTlcdTg2NWRcdTg2''@;'; put 'put ''NjAiLDQsIlx1ODY2OVx1ODY2Y1x1ODY2Zlx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3YVx1ODY4ZFx1ODY5MVx1ODY5Nlx1ODY5OFx1ODY5YVx1ODY5Y1x1ODZhMVx1ODZhNlx1ODZhN1x1ODZhOFx1ODZhZFx1ODZiMVx1ODZiM1x1ODZiNFx1ODZiNVx1ODZiN1x1ODZiOFx1ODZiOVx1ODZiZlx1''@;'; put 'put ''ODZjMFx1ODZjMVx1ODZjM1x1ODZjNVx1ODZkMVx1ODZkMlx1ODZkNVx1ODZkN1x1ODZkYVx1ODZkY1x1ODZlMFx1ODZlM1x1ODZlNVx1ODZlN1x1ODY4OFx1ODZmYVx1ODZmY1x1ODZmZFx1ODcwNFx1ODcwNVx1ODcwN1x1ODcwYlx1ODcwZVx1ODcwZlx1ODcxMFx1ODcxM1x1ODcxNFx1ODcx''@;'; put 'put ''OVx1ODcxZVx1ODcxZlx1ODcyMVx1ODcyMyJdLFsiOGZkYmExIiwiXHU4NzI4XHU4NzJlXHU4NzJmXHU4NzMxXHU4NzMyXHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzNlXHU4NzQwXHU4NzQzXHU4NzQ1XHU4NzRkXHU4NzU4XHU4NzVkXHU4NzYxXHU4NzY0XHU4NzY1XHU4NzZmXHU4Nzcx''@;'; put 'put ''XHU4NzcyXHU4NzdiXHU4NzgzIiw2LCJcdTg3OGJcdTg3OGNcdTg3OTBcdTg3OTNcdTg3OTVcdTg3OTdcdTg3OThcdTg3OTlcdTg3OWVcdTg3YTBcdTg3YTNcdTg3YTdcdTg3YWNcdTg3YWRcdTg3YWVcdTg3YjFcdTg3YjVcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzhcdTg3YzlcdTg3Y2FcdTg3''@;'; put 'put ''Y2VcdTg3ZDVcdTg3ZDZcdTg3ZDlcdTg3ZGFcdTg3ZGNcdTg3ZGZcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZWFcdTg3ZWJcdTg3ZWRcdTg3ZjFcdTg3ZjNcdTg3ZjhcdTg3ZmFcdTg3ZmZcdTg4MDFcdTg4MDNcdTg4MDZcdTg4MDlcdTg4MGFcdTg4MGJcdTg4MTBcdTg4MTlcdTg4MTJcdTg4MTNc''@;'; put 'put ''dTg4MTRcdTg4MThcdTg4MWFcdTg4MWJcdTg4MWNcdTg4MWVcdTg4MWZcdTg4MjhcdTg4MmRcdTg4MmVcdTg4MzBcdTg4MzJcdTg4MzUiXSxbIjhmZGNhMSIsIlx1ODgzYVx1ODgzY1x1ODg0MVx1ODg0M1x1ODg0NVx1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg1MVx1ODg1NVx1''@;'; put 'put ''ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Y1x1ODg1Zlx1ODg2MFx1ODg2NFx1ODg2OVx1ODg3MVx1ODg3OVx1ODg3Ylx1ODg4MFx1ODg5OFx1ODg5YVx1ODg5Ylx1ODg5Y1x1ODg5Zlx1ODhhMFx1ODhhOFx1ODhhYVx1ODhiYVx1ODhiZFx1ODhiZVx1ODhjMFx1ODhjYSIsNCwiXHU4OGQxXHU4OGQy''@;'; put 'put ''XHU4OGQzXHU4OGRiXHU4OGRlXHU4OGU3XHU4OGVmXHU4OGYwXHU4OGYxXHU4OGY1XHU4OGY3XHU4OTAxXHU4OTA2XHU4OTBkXHU4OTBlXHU4OTBmXHU4OTE1XHU4OTE2XHU4OTE4XHU4OTE5XHU4OTFhXHU4OTFjXHU4OTIwXHU4OTI2XHU4OTI3XHU4OTI4XHU4OTMwXHU4OTMxXHU4OTMyXHU4''@;'; put 'put ''OTM1XHU4OTM5XHU4OTNhXHU4OTNlXHU4OTQwXHU4OTQyXHU4OTQ1XHU4OTQ2XHU4OTQ5XHU4OTRmXHU4OTUyXHU4OTU3XHU4OTVhXHU4OTViXHU4OTVjXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTZiXHU4OTZlXHU4OTcwXHU4OTczXHU4OTc1XHU4OTdhIl0sWyI4ZmRkYTEiLCJcdTg5N2JcdTg5''@;'; put 'put ''N2NcdTg5N2RcdTg5ODlcdTg5OGRcdTg5OTBcdTg5OTRcdTg5OTVcdTg5OWJcdTg5OWNcdTg5OWZcdTg5YTBcdTg5YTVcdTg5YjBcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YmNcdTg5ZDQiLDQsIlx1ODllNVx1ODllOVx1ODllYlx1ODllZFx1ODlmMVx1ODlmM1x1ODlmNlx1ODlmOVx1''@;'; put 'put ''ODlmZFx1ODlmZlx1OGEwNFx1OGEwNVx1OGEwN1x1OGEwZlx1OGExMVx1OGExMlx1OGExNFx1OGExNVx1OGExZVx1OGEyMFx1OGEyMlx1OGEyNFx1OGEyNlx1OGEyYlx1OGEyY1x1OGEyZlx1OGEzNVx1OGEzN1x1OGEzZFx1OGEzZVx1OGE0MFx1OGE0M1x1OGE0NVx1OGE0N1x1OGE0OVx1OGE0''@;'; put 'put ''ZFx1OGE0ZVx1OGE1M1x1OGE1Nlx1OGE1N1x1OGE1OFx1OGE1Y1x1OGE1ZFx1OGE2MVx1OGE2NVx1OGE2N1x1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OVx1OGE3YVx1OGE3Ylx1OGE3ZVx1OGE3Zlx1OGE4MFx1OGE4M1x1OGE4Nlx1OGE4Ylx1OGE4Zlx1OGE5MFx1OGE5Mlx1OGE5Nlx1OGE5N1x1''@;'; put 'put ''OGE5OVx1OGE5Zlx1OGFhN1x1OGFhOVx1OGFhZVx1OGFhZlx1OGFiMyJdLFsiOGZkZWExIiwiXHU4YWI2XHU4YWI3XHU4YWJiXHU4YWJlXHU4YWMzXHU4YWM2XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWQxXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ3XHU4YWRkXHU4YWRmXHU4YWVjXHU4YWYwXHU4''@;'; put 'put ''YWY0XHU4YWY1XHU4YWY2XHU4YWZjXHU4YWZmXHU4YjA1XHU4YjA2XHU4YjBiXHU4YjExXHU4YjFjXHU4YjFlXHU4YjFmXHU4YjBhXHU4YjJkXHU4YjMwXHU4YjM3XHU4YjNjXHU4YjQyIiw0LCJcdThiNDhcdThiNTJcdThiNTNcdThiNTRcdThiNTlcdThiNGRcdThiNWVcdThiNjNcdThiNmRc''@;'; put 'put ''dThiNzZcdThiNzhcdThiNzlcdThiN2NcdThiN2VcdThiODFcdThiODRcdThiODVcdThiOGJcdThiOGRcdThiOGZcdThiOTRcdThiOTVcdThiOWNcdThiOWVcdThiOWZcdThjMzhcdThjMzlcdThjM2RcdThjM2VcdThjNDVcdThjNDdcdThjNDlcdThjNGJcdThjNGZcdThjNTFcdThjNTNcdThj''@;'; put 'put ''NTRcdThjNTdcdThjNThcdThjNWJcdThjNWRcdThjNTlcdThjNjNcdThjNjRcdThjNjZcdThjNjhcdThjNjlcdThjNmRcdThjNzNcdThjNzVcdThjNzZcdThjN2JcdThjN2VcdThjODYiXSxbIjhmZGZhMSIsIlx1OGM4N1x1OGM4Ylx1OGM5MFx1OGM5Mlx1OGM5M1x1OGM5OVx1OGM5Ylx1OGM5''@;'; put 'put ''Y1x1OGNhNFx1OGNiOVx1OGNiYVx1OGNjNVx1OGNjNlx1OGNjOVx1OGNjYlx1OGNjZlx1OGNkNlx1OGNkNVx1OGNkOVx1OGNkZFx1OGNlMVx1OGNlOFx1OGNlY1x1OGNlZlx1OGNmMFx1OGNmMlx1OGNmNVx1OGNmN1x1OGNmOFx1OGNmZVx1OGNmZlx1OGQwMVx1OGQwM1x1OGQwOVx1OGQxMlx1''@;'; put 'put ''OGQxN1x1OGQxYlx1OGQ2NVx1OGQ2OVx1OGQ2Y1x1OGQ2ZVx1OGQ3Zlx1OGQ4Mlx1OGQ4NFx1OGQ4OFx1OGQ4ZFx1OGQ5MFx1OGQ5MVx1OGQ5NVx1OGQ5ZVx1OGQ5Zlx1OGRhMFx1OGRhNlx1OGRhYlx1OGRhY1x1OGRhZlx1OGRiMlx1OGRiNVx1OGRiN1x1OGRiOVx1OGRiYlx1OGRjMFx1OGRj''@;'; put 'put ''NVx1OGRjNlx1OGRjN1x1OGRjOFx1OGRjYVx1OGRjZVx1OGRkMVx1OGRkNFx1OGRkNVx1OGRkN1x1OGRkOVx1OGRlNFx1OGRlNVx1OGRlN1x1OGRlY1x1OGRmMFx1OGRiY1x1OGRmMVx1OGRmMlx1OGRmNFx1OGRmZFx1OGUwMVx1OGUwNFx1OGUwNVx1OGUwNlx1OGUwYlx1OGUxMVx1OGUxNFx1''@;'; put 'put ''OGUxNlx1OGUyMFx1OGUyMVx1OGUyMiJdLFsiOGZlMGExIiwiXHU4ZTIzXHU4ZTI2XHU4ZTI3XHU4ZTMxXHU4ZTMzXHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTM5XHU4ZTNkXHU4ZTQwXHU4ZTQxXHU4ZTRiXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTU0XHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4''@;'; put 'put ''ZTYxXHU4ZTYyXHU4ZTY5XHU4ZTZjXHU4ZTZkXHU4ZTZmXHU4ZTcwXHU4ZTcxXHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTgyXHU4ZTgzXHU4ZTg5XHU4ZTkwXHU4ZTkyXHU4ZTk1XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTllXHU4ZWEyXHU4ZWE3XHU4ZWE5XHU4ZWFkXHU4ZWFlXHU4ZWIzXHU4ZWI1''@;'; put 'put ''XHU4ZWJhXHU4ZWJiXHU4ZWMwXHU4ZWMxXHU4ZWMzXHU4ZWM0XHU4ZWM3XHU4ZWNmXHU4ZWQxXHU4ZWQ0XHU4ZWRjXHU4ZWU4XHU4ZWVlXHU4ZWYwXHU4ZWYxXHU4ZWY3XHU4ZWY5XHU4ZWZhXHU4ZWVkXHU4ZjAwXHU4ZjAyXHU4ZjA3XHU4ZjA4XHU4ZjBmXHU4ZjEwXHU4ZjE2XHU4ZjE3XHU4''@;'; put 'put ''ZjE4XHU4ZjFlXHU4ZjIwXHU4ZjIxXHU4ZjIzXHU4ZjI1XHU4ZjI3XHU4ZjI4XHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjNhXHU4ZjQwXHU4ZjQxIl0sWyI4ZmUxYTEiLCJcdThmNDNcdThmNDdcdThmNGZcdThmNTEiLDQsIlx1OGY1OFx1OGY1ZFx1OGY1''@;'; put 'put ''ZVx1OGY2NVx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhNFx1OGZhNVx1OGZhNlx1OGZiNVx1OGZiNlx1OGZiOFx1OGZiZVx1OGZjMFx1OGZjMVx1OGZjNlx1OGZjYVx1OGZjYlx1OGZjZFx1OGZkMFx1OGZkMlx1OGZkM1x1OGZkNVx1OGZlMFx1OGZlM1x1OGZlNFx1OGZlOFx1OGZlZVx1OGZmMVx1''@;'; put 'put ''OGZmNVx1OGZmNlx1OGZmYlx1OGZmZVx1OTAwMlx1OTAwNFx1OTAwOFx1OTAwY1x1OTAxOFx1OTAxYlx1OTAyOFx1OTAyOVx1OTAyZlx1OTAyYVx1OTAyY1x1OTAyZFx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzZlx1OTA0M1x1OTA0NFx1OTA0Y1x1OTA1Ylx1OTA1ZFx1OTA2Mlx1OTA2Nlx1OTA2''@;'; put 'put ''N1x1OTA2Y1x1OTA3MFx1OTA3NFx1OTA3OVx1OTA4NVx1OTA4OFx1OTA4Ylx1OTA4Y1x1OTA4ZVx1OTA5MFx1OTA5NVx1OTA5N1x1OTA5OFx1OTA5OVx1OTA5Ylx1OTBhMFx1OTBhMVx1OTBhMlx1OTBhNVx1OTBiMFx1OTBiMlx1OTBiM1x1OTBiNFx1OTBiNlx1OTBiZFx1OTBjY1x1OTBiZVx1''@;'; put 'put ''OTBjMyJdLFsiOGZlMmExIiwiXHU5MGM0XHU5MGM1XHU5MGM3XHU5MGM4XHU5MGQ1XHU5MGQ3XHU5MGQ4XHU5MGQ5XHU5MGRjXHU5MGRkXHU5MGRmXHU5MGU1XHU5MGQyXHU5MGY2XHU5MGViXHU5MGVmXHU5MGYwXHU5MGY0XHU5MGZlXHU5MGZmXHU5MTAwXHU5MTA0XHU5MTA1XHU5MTA2XHU5''@;'; put 'put ''MTA4XHU5MTBkXHU5MTEwXHU5MTE0XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFjXHU5MTFlXHU5MTIwXHU5MTI1XHU5MTIyXHU5MTIzXHU5MTI3XHU5MTI5XHU5MTJlXHU5MTJmXHU5MTMxXHU5MTM0XHU5MTM2XHU5MTM3XHU5MTM5XHU5MTNhXHU5MTNjXHU5MTNkXHU5MTQzXHU5MTQ3''@;'; put 'put ''XHU5MTQ4XHU5MTRmXHU5MTUzXHU5MTU3XHU5MTU5XHU5MTVhXHU5MTViXHU5MTYxXHU5MTY0XHU5MTY3XHU5MTZkXHU5MTc0XHU5MTc5XHU5MTdhXHU5MTdiXHU5MTgxXHU5MTgzXHU5MTg1XHU5MTg2XHU5MThhXHU5MThlXHU5MTkxXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk4XHU5MTllXHU5''@;'; put 'put ''MWExXHU5MWE2XHU5MWE4XHU5MWFjXHU5MWFkXHU5MWFlXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWJiXHU5MWJjXHU5MWJkXHU5MWJmIl0sWyI4ZmUzYTEiLCJcdTkxYzJcdTkxYzNcdTkxYzVcdTkxZDNcdTkxZDRcdTkxZDdcdTkxZDlcdTkxZGFcdTkxZGVcdTkxZTRcdTkx''@;'; put 'put ''ZTVcdTkxZTlcdTkxZWFcdTkxZWMiLDUsIlx1OTFmN1x1OTFmOVx1OTFmYlx1OTFmZFx1OTIwMFx1OTIwMVx1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOVx1OTIwYVx1OTIwY1x1OTIxMFx1OTIxMlx1OTIxM1x1OTIxNlx1OTIxOFx1OTIxY1x1OTIxZFx1OTIyM1x1OTIyNFx1OTIyNVx1''@;'; put 'put ''OTIyNlx1OTIyOFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzM1x1OTIzNVx1OTIzNlx1OTIzOFx1OTIzOVx1OTIzYVx1OTIzY1x1OTIzZVx1OTI0MFx1OTI0Mlx1OTI0M1x1OTI0Nlx1OTI0N1x1OTI0YVx1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MVx1OTI1OFx1OTI1OVx1OTI1Y1x1OTI1ZFx1OTI2''@;'; put 'put ''MFx1OTI2MVx1OTI2NVx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3NSIsNCwiXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdmXHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhkXHU5MjhlXHU5MjkyXHU5Mjk3Il0sWyI4ZmU0YTEiLCJcdTkyOTlcdTkyOWZcdTkyYTBcdTkyYTRc''@;'; put 'put ''dTkyYTVcdTkyYTdcdTkyYThcdTkyYWJcdTkyYWZcdTkyYjJcdTkyYjZcdTkyYjhcdTkyYmFcdTkyYmJcdTkyYmNcdTkyYmRcdTkyYmYiLDQsIlx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOFx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJkMFx1OTJkM1x1OTJkNVx1OTJkN1x1OTJkOFx1OTJk''@;'; put 'put ''OVx1OTJkY1x1OTJkZFx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlM1x1OTJlNVx1OTJlN1x1OTJlOFx1OTJlY1x1OTJlZVx1OTJmMFx1OTJmOVx1OTJmYlx1OTJmZlx1OTMwMFx1OTMwMlx1OTMwOFx1OTMwZFx1OTMxMVx1OTMxNFx1OTMxNVx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMVx1''@;'; put 'put ''OTMyNFx1OTMyNVx1OTMyN1x1OTMyOVx1OTMyYVx1OTMzM1x1OTMzNFx1OTMzNlx1OTMzN1x1OTM0N1x1OTM0OFx1OTM0OVx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1NVx1OTM1N1x1OTM1OFx1OTM1YVx1OTM1ZVx1OTM2NFx1OTM2NVx1OTM2N1x1OTM2OVx1OTM2YVx1OTM2ZFx1OTM2Zlx1OTM3''@;'; put 'put ''MFx1OTM3MVx1OTM3M1x1OTM3NFx1OTM3NiJdLFsiOGZlNWExIiwiXHU5MzdhXHU5MzdkXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5Mzg4XHU5MzhhXHU5MzhiXHU5MzhkXHU5MzhmXHU5MzkyXHU5Mzk1XHU5Mzk4XHU5MzliXHU5MzllXHU5M2ExXHU5M2EzXHU5M2E0XHU5M2E2XHU5M2E4''@;'; put 'put ''XHU5M2FiXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2JhXHU5M2E5XHU5M2MxXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M5Iiw0LCJcdTkzZDNcdTkzZDlcdTkzZGNcdTkzZGVcdTkzZGZcdTkzZTJcdTkzZTZcdTkzZTdcdTkzZjlcdTkzZjdcdTkzZjhcdTkzZmFcdTkzZmJcdTkzZmRcdTk0''@;'; put 'put ''MDFcdTk0MDJcdTk0MDRcdTk0MDhcdTk0MDlcdTk0MGRcdTk0MGVcdTk0MGZcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MWZcdTk0MmVcdTk0MmZcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0M2JcdTk0M2ZcdTk0M2RcdTk0NDNcdTk0NDVcdTk0NDhcdTk0NGFcdTk0NGNcdTk0NTVcdTk0NTlc''@;'; put 'put ''dTk0NWNcdTk0NWZcdTk0NjFcdTk0NjNcdTk0NjhcdTk0NmJcdTk0NmRcdTk0NmVcdTk0NmZcdTk0NzFcdTk0NzJcdTk0ODRcdTk0ODNcdTk1NzhcdTk1NzkiXSxbIjhmZTZhMSIsIlx1OTU3ZVx1OTU4NFx1OTU4OFx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMVx1''@;'; put 'put ''OTVhNlx1OTVhOVx1OTVhYlx1OTVhY1x1OTViNFx1OTViNlx1OTViYVx1OTViZFx1OTViZlx1OTVjNlx1OTVjOFx1OTVjOVx1OTVjYlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkOVx1OTVkYVx1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlNFx1OTVlNlx1OTYxZFx1OTYxZVx1OTYy''@;'; put 'put ''Mlx1OTYyNFx1OTYyNVx1OTYyNlx1OTYyY1x1OTYzMVx1OTYzM1x1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzY1x1OTYzZFx1OTY0MVx1OTY1Mlx1OTY1NFx1OTY1Nlx1OTY1N1x1OTY1OFx1OTY2MVx1OTY2ZVx1OTY3NFx1OTY3Ylx1OTY3Y1x1OTY3ZVx1OTY3Zlx1OTY4MVx1OTY4Mlx1''@;'; put 'put ''OTY4M1x1OTY4NFx1OTY4OVx1OTY5MVx1OTY5Nlx1OTY5YVx1OTY5ZFx1OTY5Zlx1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOVx1OTZhZVx1OTZhZlx1OTZiM1x1OTZiYVx1OTZjYVx1OTZkMlx1NWRiMlx1OTZkOFx1OTZkYVx1OTZkZFx1OTZkZVx1OTZkZlx1OTZlOVx1OTZlZlx1OTZmMVx1OTZm''@;'; put 'put ''YVx1OTcwMiJdLFsiOGZlN2ExIiwiXHU5NzAzXHU5NzA1XHU5NzA5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI4XHU5NzMxXHU5NzMzXHU5NzQxXHU5NzQzXHU5NzRhXHU5NzRlXHU5NzRmXHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzViXHU5NzYzXHU5NzY3''@;'; put 'put ''XHU5NzZhXHU5NzZlXHU5NzczXHU5Nzc2XHU5Nzc3XHU5Nzc4XHU5NzdiXHU5NzdkXHU5NzdmXHU5NzgwXHU5Nzg5XHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzllXHU5NzlmXHU5N2EyXHU5N2FjXHU5N2FlXHU5N2IxXHU5N2IyXHU5N2I1XHU5N2I2XHU5N2I4XHU5N2I5XHU5''@;'; put 'put ''N2JhXHU5N2JjXHU5N2JlXHU5N2JmXHU5N2MxXHU5N2M0XHU5N2M1XHU5N2M3XHU5N2M5XHU5N2NhXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2QwXHU5N2QxXHU5N2Q0XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RkXHU5N2RlXHU5N2UwXHU5N2RiXHU5N2UxXHU5N2U0XHU5N2VmXHU5N2YxXHU5N2Y0''@;'; put 'put ''XHU5N2Y3XHU5N2Y4XHU5N2ZhXHU5ODA3XHU5ODBhXHU5ODE5XHU5ODBkXHU5ODBlXHU5ODE0XHU5ODE2XHU5ODFjXHU5ODFlXHU5ODIwXHU5ODIzXHU5ODI2Il0sWyI4ZmU4YTEiLCJcdTk4MmJcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzJcdTk4MzNcdTk4MzVcdTk4MjVcdTk4M2VcdTk4NDRc''@;'; put 'put ''dTk4NDdcdTk4NGFcdTk4NTFcdTk4NTJcdTk4NTNcdTk4NTZcdTk4NTdcdTk4NTlcdTk4NWFcdTk4NjJcdTk4NjNcdTk4NjVcdTk4NjZcdTk4NmFcdTk4NmNcdTk4YWJcdTk4YWRcdTk4YWVcdTk4YjBcdTk4YjRcdTk4YjdcdTk4YjhcdTk4YmFcdTk4YmJcdTk4YmZcdTk4YzJcdTk4YzVcdTk4''@;'; put 'put ''YzhcdTk4Y2NcdTk4ZTFcdTk4ZTNcdTk4ZTVcdTk4ZTZcdTk4ZTdcdTk4ZWFcdTk4ZjNcdTk4ZjZcdTk5MDJcdTk5MDdcdTk5MDhcdTk5MTFcdTk5MTVcdTk5MTZcdTk5MTdcdTk5MWFcdTk5MWJcdTk5MWNcdTk5MWZcdTk5MjJcdTk5MjZcdTk5MjdcdTk5MmJcdTk5MzEiLDQsIlx1OTkzOVx1''@;'; put 'put ''OTkzYVx1OTkzYlx1OTkzY1x1OTk0MFx1OTk0MVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0ZFx1OTk0ZVx1OTk1NFx1OTk1OFx1OTk1OVx1OTk1Ylx1OTk1Y1x1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk5Ylx1OTk5ZFx1OTk5Zlx1OTlhNlx1OTliMFx1OTliMVx1OTliMlx1OTliNSJdLFsiOGZlOWEx''@;'; put 'put ''IiwiXHU5OWI5XHU5OWJhXHU5OWJkXHU5OWJmXHU5OWMzXHU5OWM5XHU5OWQzXHU5OWQ0XHU5OWQ5XHU5OWRhXHU5OWRjXHU5OWRlXHU5OWU3XHU5OWVhXHU5OWViXHU5OWVjXHU5OWYwXHU5OWY0XHU5OWY1XHU5OWY5XHU5OWZkXHU5OWZlXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTBiXHU5YTBj''@;'; put 'put ''XHU5YTEwXHU5YTExXHU5YTE2XHU5YTFlXHU5YTIwXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI3XHU5YTJkXHU5YTJlXHU5YTMzXHU5YTM1XHU5YTM2XHU5YTM4XHU5YTQ3XHU5YTQxXHU5YTQ0XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRlXHU5YTUxXHU5YTU0XHU5YTU2XHU5YTVkXHU5YWFhXHU5''@;'; put 'put ''YWFjXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWI0XHU5YWI1XHU5YWI2XHU5YWI5XHU5YWJiXHU5YWJlXHU5YWJmXHU5YWMxXHU5YWMzXHU5YWM2XHU5YWM4XHU5YWNlXHU5YWQwXHU5YWQyXHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWRiXHU5YWRjXHU5YWUwXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU5''@;'; put 'put ''XHU5YWVjXHU5YWYyXHU5YWYzXHU5YWY1XHU5YWY5XHU5YWZhXHU5YWZkXHU5YWZmIiw0XSxbIjhmZWFhMSIsIlx1OWIwNFx1OWIwNVx1OWIwOFx1OWIwOVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMlx1OWIxNlx1OWIxOVx1OWIxYlx1OWIxY1x1OWIyMFx1OWIyNlx1OWIy''@;'; put 'put ''Ylx1OWIyZFx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzN1x1OWIzOVx1OWIzYVx1OWIzZFx1OWI0OFx1OWI0Ylx1OWI0Y1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1Ylx1OWI1ZVx1OWI2MVx1OWI2M1x1OWI2NVx1OWI2Nlx1OWI2OFx1OWI2YSIsNCwiXHU5YjczXHU5Yjc1XHU5Yjc3XHU5Yjc4XHU5''@;'; put 'put ''Yjc5XHU5YjdmXHU5YjgwXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhkXHU5YjhmXHU5YjkwXHU5Yjk0XHU5YjlhXHU5YjlkXHU5YjllXHU5YmE2XHU5YmE3XHU5YmE5XHU5YmFjXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmI3XHU5YmI4XHU5YmJiXHU5YmJj''@;'; put 'put ''XHU5YmJlXHU5YmJmXHU5YmMxXHU5YmM3XHU5YmM4XHU5YmNlXHU5YmQwXHU5YmQ3XHU5YmQ4XHU5YmRkXHU5YmRmXHU5YmU1XHU5YmU3XHU5YmVhXHU5YmViXHU5YmVmXHU5YmYzXHU5YmY3XHU5YmY4Il0sWyI4ZmViYTEiLCJcdTliZjlcdTliZmFcdTliZmRcdTliZmZcdTljMDBcdTljMDJc''@;'; put 'put ''dTljMGJcdTljMGZcdTljMTFcdTljMTZcdTljMThcdTljMTlcdTljMWFcdTljMWNcdTljMWVcdTljMjJcdTljMjNcdTljMjYiLDQsIlx1OWMzMVx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzZFx1OWM0MVx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0OVx1OWM0YVx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1''@;'; put 'put ''M1x1OWM1NFx1OWM1Nlx1OWM1OFx1OWM1Ylx1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2M1x1OWM2OVx1OWM2YVx1OWM1Y1x1OWM2Ylx1OWM2OFx1OWM2ZVx1OWM3MFx1OWM3Mlx1OWM3NVx1OWM3N1x1OWM3Ylx1OWNlNlx1OWNmMlx1OWNmN1x1OWNmOVx1OWQwYlx1OWQwMlx1OWQxMVx1OWQxN1x1''@;'; put 'put ''OWQxOFx1OWQxY1x1OWQxZFx1OWQxZVx1OWQyZlx1OWQzMFx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzYVx1OWQzY1x1OWQ0NVx1OWQzZFx1OWQ0Mlx1OWQ0M1x1OWQ0N1x1OWQ0YVx1OWQ1M1x1OWQ1NFx1OWQ1Zlx1OWQ2M1x1OWQ2Mlx1OWQ2NVx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ3MFx1OWQ3''@;'; put 'put ''Nlx1OWQ3N1x1OWQ3YiJdLFsiOGZlY2ExIiwiXHU5ZDdjXHU5ZDdlXHU5ZDgzXHU5ZDg0XHU5ZDg2XHU5ZDhhXHU5ZDhkXHU5ZDhlXHU5ZDkyXHU5ZDkzXHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZGExXHU5ZGFhXHU5ZGFjXHU5ZGFlXHU5ZGIxXHU5ZGI1XHU5ZGI5XHU5ZGJjXHU5ZGJm''@;'; put 'put ''XHU5ZGMzXHU5ZGM3XHU5ZGM5XHU5ZGNhXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGRhXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGU1XHU5ZGU3XHU5ZGU5XHU5ZGViXHU5ZGVlXHU5ZGYwXHU5ZGYzXHU5ZGY0XHU5ZGZlXHU5ZTBhXHU5ZTAyXHU5ZTA3XHU5ZTBlXHU5ZTEwXHU5ZTExXHU5''@;'; put 'put ''ZTEyXHU5ZTE1XHU5ZTE2XHU5ZTE5XHU5ZTFjXHU5ZTFkXHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTgwXHU5ZTgyXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg3XHU5ZThlXHU5ZThmXHU5ZTk2XHU5ZTk4XHU5ZTliXHU5ZTllXHU5ZWE0XHU5ZWE4XHU5ZWFjXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIz''@;'; put 'put ''XHU5ZWI0XHU5ZWI1XHU5ZWM2XHU5ZWM4XHU5ZWNiXHU5ZWQ1XHU5ZWRmXHU5ZWU0XHU5ZWU3XHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWY1Il0sWyI4ZmVkYTEiLCJcdTllZjhcdTllZmZcdTlmMDJcdTlmMDNcdTlmMDlcdTlmMGZcdTlmMTBcdTlmMTFcdTlmMTJc''@;'; put 'put ''dTlmMTRcdTlmMTZcdTlmMTdcdTlmMTlcdTlmMWFcdTlmMWJcdTlmMWZcdTlmMjJcdTlmMjZcdTlmMmFcdTlmMmJcdTlmMmZcdTlmMzFcdTlmMzJcdTlmMzRcdTlmMzdcdTlmMzlcdTlmM2FcdTlmM2NcdTlmM2RcdTlmM2ZcdTlmNDFcdTlmNDMiLDQsIlx1OWY1M1x1OWY1NVx1OWY1Nlx1OWY1''@;'; put 'put ''N1x1OWY1OFx1OWY1YVx1OWY1ZFx1OWY1ZVx1OWY2OFx1OWY2OVx1OWY2ZCIsNCwiXHU5ZjczXHU5Zjc1XHU5ZjdhXHU5ZjdkXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5Zjk0XHU5Zjk2XHU5Zjk3XHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE1Il1dJyl9LDk5MTI5OnVlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJ1Q2hhcnMiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1''@;'; put 'put ''OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYs''@;'; put 'put ''ODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUs''@;'; put 'put ''OTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAs''@;'; put 'put ''MTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2''@;'; put 'put ''MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0Mzcs''@;'; put 'put ''NTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLCJnYkNoYXJz''@;'; put 'put ''IjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDM0MSw0MjgsNDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgyMCw3OTIy''@;'; put 'put ''LDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgzODQsODM4OCw4MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQxOSw4NDI0''@;'; put 'put ''LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkxNjIsOTE2NCw5MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEzNjEsMTEz''@;'; put 'put ''NjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUsMTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5ODksMTIxMDIsMTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcsMTI1MTAs''@;'; put 'put ''MTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEsMTY3MjksMTcxMDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5MDksMTc5''@;'; put 'put ''MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5MzksMTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1MDEsMzM1MDUsMzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgsMzgwMjks''@;'; put 'put ''MzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgwNjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX0nKX0sNTU5MTQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyJhMTQwIiwi''@;'; put 'put ''XHVlNGM2Iiw2Ml0sWyJhMTgwIiwiXHVlNTA1IiwzMl0sWyJhMjQwIiwiXHVlNTI2Iiw2Ml0sWyJhMjgwIiwiXHVlNTY1IiwzMl0sWyJhMmFiIiwiXHVlNzY2Iiw1XSxbImEyZTMiLCJcdTIwYWNcdWU3NmQiXSxbImEyZWYiLCJcdWU3NmVcdWU3NmYiXSxbImEyZmQiLCJcdWU3NzBcdWU3NzEi''@;'; put 'put ''XSxbImEzNDAiLCJcdWU1ODYiLDYyXSxbImEzODAiLCJcdWU1YzUiLDMxLCJcdTMwMDAiXSxbImE0NDAiLCJcdWU1ZTYiLDYyXSxbImE0ODAiLCJcdWU2MjUiLDMyXSxbImE0ZjQiLCJcdWU3NzIiLDEwXSxbImE1NDAiLCJcdWU2NDYiLDYyXSxbImE1ODAiLCJcdWU2ODUiLDMyXSxbImE1Zjci''@;'; put 'put ''LCJcdWU3N2QiLDddLFsiYTY0MCIsIlx1ZTZhNiIsNjJdLFsiYTY4MCIsIlx1ZTZlNSIsMzJdLFsiYTZiOSIsIlx1ZTc4NSIsN10sWyJhNmQ5IiwiXHVlNzhkIiw2XSxbImE2ZWMiLCJcdWU3OTRcdWU3OTUiXSxbImE2ZjMiLCJcdWU3OTYiXSxbImE2ZjYiLCJcdWU3OTciLDhdLFsiYTc0MCIs''@;'; put 'put ''Ilx1ZTcwNiIsNjJdLFsiYTc4MCIsIlx1ZTc0NSIsMzJdLFsiYTdjMiIsIlx1ZTdhMCIsMTRdLFsiYTdmMiIsIlx1ZTdhZiIsMTJdLFsiYTg5NiIsIlx1ZTdiYyIsMTBdLFsiYThiYyIsIlx1ZTdjNyJdLFsiYThiZiIsIlx1MDFmOSJdLFsiYThjMSIsIlx1ZTdjOVx1ZTdjYVx1ZTdjYlx1ZTdj''@;'; put 'put ''YyJdLFsiYThlYSIsIlx1ZTdjZCIsMjBdLFsiYTk1OCIsIlx1ZTdlMiJdLFsiYTk1YiIsIlx1ZTdlMyJdLFsiYTk1ZCIsIlx1ZTdlNFx1ZTdlNVx1ZTdlNiJdLFsiYTk4OSIsIlx1MzAzZVx1MmZmMCIsMTFdLFsiYTk5NyIsIlx1ZTdmNCIsMTJdLFsiYTlmMCIsIlx1ZTgwMSIsMTRdLFsiYWFh''@;'; put 'put ''MSIsIlx1ZTAwMCIsOTNdLFsiYWJhMSIsIlx1ZTA1ZSIsOTNdLFsiYWNhMSIsIlx1ZTBiYyIsOTNdLFsiYWRhMSIsIlx1ZTExYSIsOTNdLFsiYWVhMSIsIlx1ZTE3OCIsOTNdLFsiYWZhMSIsIlx1ZTFkNiIsOTNdLFsiZDdmYSIsIlx1ZTgxMCIsNF0sWyJmOGExIiwiXHVlMjM0Iiw5M10sWyJm''@;'; put 'put ''OWExIiwiXHVlMjkyIiw5M10sWyJmYWExIiwiXHVlMmYwIiw5M10sWyJmYmExIiwiXHVlMzRlIiw5M10sWyJmY2ExIiwiXHVlM2FjIiw5M10sWyJmZGExIiwiXHVlNDBhIiw5M10sWyJmZTUwIiwiXHUyZTgxXHVlODE2XHVlODE3XHVlODE4XHUyZTg0XHUzNDczXHUzNDQ3XHUyZTg4XHUyZThi''@;'; put 'put ''XHVlODFlXHUzNTllXHUzNjFhXHUzNjBlXHUyZThjXHUyZTk3XHUzOTZlXHUzOTE4XHVlODI2XHUzOWNmXHUzOWRmXHUzYTczXHUzOWQwXHVlODJiXHVlODJjXHUzYjRlXHUzYzZlXHUzY2UwXHUyZWE3XHVlODMxXHVlODMyXHUyZWFhXHU0MDU2XHU0MTVmXHUyZWFlXHU0MzM3XHUyZWIzXHUy''@;'; put 'put ''ZWI2XHUyZWI3XHVlODNiXHU0M2IxXHU0M2FjXHUyZWJiXHU0M2RkXHU0NGQ2XHU0NjYxXHU0NjRjXHVlODQzIl0sWyJmZTgwIiwiXHU0NzIzXHU0NzI5XHU0NzdjXHU0NzhkXHUyZWNhXHU0OTQ3XHU0OTdhXHU0OTdkXHU0OTgyXHU0OTgzXHU0OTg1XHU0OTg2XHU0OTlmXHU0OTliXHU0OWI3''@;'; put 'put ''XHU0OWI2XHVlODU0XHVlODU1XHU0Y2EzXHU0YzlmXHU0Y2EwXHU0Y2ExXHU0Yzc3XHU0Y2EyXHU0ZDEzIiw2LCJcdTRkYWVcdWU4NjRcdWU0NjgiLDkzXV0nKX0sNDA2Nzk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI4XSxbImEx''@;'; put 'put ''IiwiXHVmZjYxIiw2Ml0sWyI4MTQwIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRc''@;'; put 'put ''dTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYw''@;'; put 'put ''Ylx1ZmYwZFx4YjFceGQ3Il0sWyI4MTgwIiwiXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZm''@;'; put 'put ''MjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyI4MWI4IiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUy''@;'; put 'put ''MjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyI4MWM4IiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyI4MWRhIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1''@;'; put 'put ''XHUyMjJiXHUyMjJjIl0sWyI4MWYwIiwiXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiODFmYyIsIlx1MjVlZiJdLFsiODI0ZiIsIlx1ZmYxMCIsOV0sWyI4MjYwIiwiXHVmZjIxIiwyNV0sWyI4MjgxIiwiXHVmZjQxIiwyNV0sWyI4MjlmIiwiXHUz''@;'; put 'put ''MDQxIiw4Ml0sWyI4MzQwIiwiXHUzMGExIiw2Ml0sWyI4MzgwIiwiXHUzMGUwIiwyMl0sWyI4MzlmIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbIjgzYmYiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiODQ0MCIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyI4NDcwIiwiXHUw''@;'; put 'put ''NDMwIiw1LCJcdTA0NTFcdTA0MzYiLDddLFsiODQ4MCIsIlx1MDQzZSIsMTddLFsiODQ5ZiIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1''@;'; put 'put ''MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiODc0MCIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyI4NzVmIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUz''@;'; put 'put ''MzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyI4NzdlIiwiXHUzMzdiIl0sWyI4NzgwIiwiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0''@;'; put 'put ''Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbIjg4OWYiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYx''@;'; put 'put ''MWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4Yjdc''@;'; put 'put ''dTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdk''@;'; put 'put ''YWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBc''@;'; put 'put ''dTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbIjg5NDAiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1''@;'; put 'put ''MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVc''@;'; put 'put ''dTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODYiXSxbIjg5ODAiLCJcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZm''@;'; put 'put ''MTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJc''@;'; put 'put ''dTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRm''@;'; put 'put ''NzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJc''@;'; put 'put ''dTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYw''@;'; put 'put ''OTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbIjhhNDAiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhc''@;'; put 'put ''dTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5''@;'; put 'put ''OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmIiXSxbIjhhODAiLCJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdc''@;'; put 'put ''dTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUx''@;'; put 'put ''YTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdc''@;'; put 'put ''dTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0''@;'; put 'put ''MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2Fc''@;'; put 'put ''dTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbIjhiNDAiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRl''@;'; put 'put ''ODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2Rc''@;'; put 'put ''dTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTEiXSxbIjhiODAiLCJcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdj''@;'; put 'put ''ZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZc''@;'; put 'put ''dTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlh''@;'; put 'put ''NWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2Zc''@;'; put 'put ''dTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRl''@;'; put 'put ''MzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbIjhjNDAiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZc''@;'; put 'put ''dTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdk''@;'; put 'put ''OTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZTgiXSxbIjhjODAiLCJcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRc''@;'; put 'put ''dTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdk''@;'; put 'put ''NzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVc''@;'; put 'put ''dTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRl''@;'; put 'put ''OTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlc''@;'; put 'put ''dTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbIjhkNDAiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1''@;'; put 'put ''M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZc''@;'; put 'put ''dTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGQiXSxbIjhkODAiLCJcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThj''@;'; put 'put ''NmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhc''@;'; put 'put ''dTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUw''@;'; put 'put ''YjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3Mjhc''@;'; put 'put ''dTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdi''@;'; put 'put ''MzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbIjhlNDAiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNc''@;'; put 'put ''dTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTVi''@;'; put 'put ''NTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjIiXSxbIjhlODAiLCJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZc''@;'; put 'put ''dThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgw''@;'; put 'put ''MGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBc''@;'; put 'put ''dTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkx''@;'; put 'put ''NGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBc''@;'; put 'put ''dTU2ZGFcdTUzY2VcdTU0NjgiXSxbIjhmNDAiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkx''@;'; put 'put ''NmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBc''@;'; put 'put ''dTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjMiXSxbIjhmODAiLCJcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2''@;'; put 'put ''ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5Njhc''@;'; put 'put ''dTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZl''@;'; put 'put ''NThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZc''@;'; put 'put ''dTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2''@;'; put 'put ''MzFcdTU3ZjRcdTk4ZmUiXSxbIjkwNDAiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBc''@;'; put 'put ''dTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1''@;'; put 'put ''MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYTgiXSxbIjkwODAiLCJcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRc''@;'; put 'put ''dTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUy''@;'; put 'put ''ZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlc''@;'; put 'put ''dTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdi''@;'; put 'put ''YzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2Zc''@;'; put 'put ''dTdiYWRcdTdkZGEiXSxbIjkxNDAiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdj''@;'; put 'put ''Y2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFc''@;'; put 'put ''dTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmIiXSxbIjkxODAiLCJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdk''@;'; put 'put ''Y2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlc''@;'; put 'put ''dTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYw''@;'; put 'put ''ZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVc''@;'; put 'put ''dTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2''@;'; put 'put ''ZjhcdTUzZWEiXSxbIjkyNDAiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFc''@;'; put 'put ''dTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1''@;'; put 'put ''ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzQiXSxbIjkyODAiLCJcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThc''@;'; put 'put ''dTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3''@;'; put 'put ''MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNc''@;'; put 'put ''dTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRl''@;'; put 'put ''YWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRc''@;'; put 'put ''dTkwMTMiXSxbIjkzNDAiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVl''@;'; put 'put ''OTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRc''@;'; put 'put ''dTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWMiXSxbIjkzODAiLCJcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4''@;'; put 'put ''YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZc''@;'; put 'put ''dTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZi''@;'; put 'put ''ZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVc''@;'; put 'put ''dTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUx''@;'; put 'put ''NjUiXSxbIjk0NDAiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJc''@;'; put 'put ''dTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3''@;'; put 'put ''NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODUiXSxbIjk0ODAiLCJcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFc''@;'; put 'put ''dTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUx''@;'; put 'put ''NmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhc''@;'; put 'put ''dTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYy''@;'; put 'put ''NzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGUi''@;'; put 'put ''XSxbIjk1NDAiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZm''@;'; put 'put ''MDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhc''@;'; put 'put ''dTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzciXSxbIjk1ODAiLCJcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0''@;'; put 'put ''YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZc''@;'; put 'put ''dTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUw''@;'; put 'put ''ZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJc''@;'; put 'put ''dTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIiXSxb''@;'; put 'put ''Ijk2NDAiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhc''@;'; put 'put ''dTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUy''@;'; put 'put ''YzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzYiXSxbIjk2ODAiLCJcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVc''@;'; put 'put ''dTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdh''@;'; put 'put ''MTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRc''@;'; put 'put ''dTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1''@;'; put 'put ''NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxbIjk3''@;'; put 'put ''NDAiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3''@;'; put 'put ''OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0Yzlc''@;'; put 'put ''dTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzIiXSxbIjk3ODAiLCJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRl''@;'; put 'put ''NzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlc''@;'; put 'put ''dTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgy''@;'; put 'put ''NmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdc''@;'; put 'put ''dTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbIjk4NDAi''@;'; put 'put ''LCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRc''@;'; put 'put ''dTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbIjk4OWYiLCJcdTVmMGNcdTRl''@;'; put 'put ''MTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZc''@;'; put 'put ''dTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRm''@;'; put 'put ''Y2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBc''@;'; put 'put ''dTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbIjk5NDAiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUx''@;'; put 'put ''MTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVc''@;'; put 'put ''dTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWQiXSxbIjk5ODAiLCJcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUy''@;'; put 'put ''MTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNc''@;'; put 'put ''dTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUz''@;'; put 'put ''MzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVc''@;'; put 'put ''dTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0''@;'; put 'put ''OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbIjlhNDAiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1Mzlc''@;'; put 'put ''dTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1''@;'; put 'put ''YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzgiXSxbIjlhODAiLCJcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZc''@;'; put 'put ''dTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3''@;'; put 'put ''MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRc''@;'; put 'put ''dTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4''@;'; put 'put ''ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVc''@;'; put 'put ''dTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbIjliNDAiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVh''@;'; put 'put ''MWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBc''@;'; put 'put ''dTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODAiXSxbIjliODAiLCJcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTVi''@;'; put 'put ''ZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFc''@;'; put 'put ''dTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVk''@;'; put 'put ''NWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlc''@;'; put 'put ''dTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVl''@;'; put 'put ''N2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbIjljNDAiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNc''@;'; put 'put ''dTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVm''@;'; put 'put ''OTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjAiXSxbIjljODAiLCJcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVc''@;'; put 'put ''dTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYw''@;'; put 'put ''OTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVc''@;'; put 'put ''dTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYx''@;'; put 'put ''OTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNc''@;'; put 'put ''dTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbIjlkNDAiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYy''@;'; put 'put ''N2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhc''@;'; put 'put ''dTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmIiXSxbIjlkODAiLCJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYz''@;'; put 'put ''ZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0Yzdc''@;'; put 'put ''dTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1''@;'; put 'put ''MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBc''@;'; put 'put ''dTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2''@;'; put 'put ''ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbIjllNDAiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVc''@;'; put 'put ''dTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3''@;'; put 'put ''YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGUiXSxbIjllODAiLCJcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZc''@;'; put 'put ''dTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5''@;'; put 'put ''MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFc''@;'; put 'put ''dTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZh''@;'; put 'put ''MWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhc''@;'; put 'put ''dTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbIjlmNDAiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZi''@;'; put 'put ''MTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVc''@;'; put 'put ''dTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWYiXSxbIjlmODAiLCJcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZj''@;'; put 'put ''NTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFc''@;'; put 'put ''dTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZk''@;'; put 'put ''YjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNc''@;'; put 'put ''dTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZl''@;'; put 'put ''ZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImUwNDAiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZc''@;'; put 'put ''dTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcw''@;'; put 'put ''MWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGQiXSxbImUwODAiLCJcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZc''@;'; put 'put ''dTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcy''@;'; put 'put ''MjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJc''@;'; put 'put ''dTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTcz''@;'; put 'put ''YzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJc''@;'; put 'put ''dTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxNDAiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1''@;'; put 'put ''MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNc''@;'; put 'put ''dTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmYiXSxbImUxODAiLCJcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2''@;'; put 'put ''MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNc''@;'; put 'put ''dTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3''@;'; put 'put ''MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJc''@;'; put 'put ''dTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4''@;'; put 'put ''ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUyNDAiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFc''@;'; put 'put ''dTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdh''@;'; put 'put ''NDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjAiXSxbImUyODAiLCJcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVc''@;'; put 'put ''dTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdi''@;'; put 'put ''NzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFc''@;'; put 'put ''dTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdj''@;'; put 'put ''NjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZc''@;'; put 'put ''dTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImUzNDAiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdk''@;'; put 'put ''ODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFc''@;'; put 'put ''dTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzciXSxbImUzODAiLCJcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdl''@;'; put 'put ''NjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVc''@;'; put 'put ''dTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdm''@;'; put 'put ''YzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJc''@;'; put 'put ''dTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgx''@;'; put 'put ''MWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU0NDAiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZc''@;'; put 'put ''dTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgy''@;'; put 'put ''MGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjQiXSxbImU0ODAiLCJcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJc''@;'; put 'put ''dTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgz''@;'; put 'put ''NTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRc''@;'; put 'put ''dTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0''@;'; put 'put ''MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNc''@;'; put 'put ''dTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU1NDAiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1''@;'; put 'put ''Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFc''@;'; put 'put ''dTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWMiXSxbImU1ODAiLCJcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3''@;'; put 'put ''MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZc''@;'; put 'put ''dTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4''@;'; put 'put ''MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZc''@;'; put 'put ''dTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5''@;'; put 'put ''NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImU2NDAiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZc''@;'; put 'put ''dTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThh''@;'; put 'put ''YThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTciXSxbImU2ODAiLCJcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFc''@;'; put 'put ''dThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThi''@;'; put 'put ''OTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRc''@;'; put 'put ''dThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThk''@;'; put 'put ''NmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVc''@;'; put 'put ''dThlMzBcdThlMzRcdThlNGEiXSxbImU3NDAiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThl''@;'; put 'put ''OTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNc''@;'; put 'put ''dThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWMiXSxbImU3ODAiLCJcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThm''@;'; put 'put ''ZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThc''@;'; put 'put ''dTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkx''@;'; put 'put ''NTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVc''@;'; put 'put ''dTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTky''@;'; put 'put ''ZmFcdTkzNDRcdTkzMmUiXSxbImU4NDAiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNc''@;'; put 'put ''dTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0''@;'; put 'put ''N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTkiXSxbImU4ODAiLCJcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2Nc''@;'; put 'put ''dTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2''@;'; put 'put ''YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRc''@;'; put 'put ''dTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3''@;'; put 'put ''OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJc''@;'; put 'put ''dTk4NmZcdTk4NzAiXSxbImU5NDAiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5''@;'; put 'put ''MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJc''@;'; put 'put ''dTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDMiXSxbImU5ODAiLCJcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlh''@;'; put 'put ''YjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhc''@;'; put 'put ''dTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTli''@;'; put 'put ''ZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdc''@;'; put 'put ''dTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlk''@;'; put 'put ''NDZcdTlkNDgiXSxbImVhNDAiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJc''@;'; put 'put ''dTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTll''@;'; put 'put ''Y2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWYiXSxbImVhODAiLCJcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2Vc''@;'; put 'put ''dTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImVkNDAiLCJcdTdlOGFcdTg5MWNcdTkz''@;'; put 'put ''NDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBc''@;'; put 'put ''dTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3''@;'; put 'put ''NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGYiXSxbImVkODAiLCJcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdc''@;'; put 'put ''dTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0''@;'; put 'put ''OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRc''@;'; put 'put ''dTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZk''@;'; put 'put ''ZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjEiXSxbImVlNDAiLCJcdTcyYmVcdTczMjRcdWZhMTZc''@;'; put 'put ''dTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4''@;'; put 'put ''NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdc''@;'; put 'put ''dTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTkiXSxbImVlODAiLCJcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThk''@;'; put 'put ''NzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdc''@;'; put 'put ''dTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0''@;'; put 'put ''NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJc''@;'; put 'put ''dTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImVlZWYiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiZjA0MCIsIlx1ZTAwMCIsNjJdLFsiZjA4MCIsIlx1ZTAzZiIsMTI0XSxbImYxNDAiLCJcdWUwYmMiLDYyXSxbImYxODAiLCJcdWUwZmIi''@;'; put 'put ''LDEyNF0sWyJmMjQwIiwiXHVlMTc4Iiw2Ml0sWyJmMjgwIiwiXHVlMWI3IiwxMjRdLFsiZjM0MCIsIlx1ZTIzNCIsNjJdLFsiZjM4MCIsIlx1ZTI3MyIsMTI0XSxbImY0NDAiLCJcdWUyZjAiLDYyXSxbImY0ODAiLCJcdWUzMmYiLDEyNF0sWyJmNTQwIiwiXHVlM2FjIiw2Ml0sWyJmNTgwIiwi''@;'; put 'put ''XHVlM2ViIiwxMjRdLFsiZjY0MCIsIlx1ZTQ2OCIsNjJdLFsiZjY4MCIsIlx1ZTRhNyIsMTI0XSxbImY3NDAiLCJcdWU1MjQiLDYyXSxbImY3ODAiLCJcdWU1NjMiLDEyNF0sWyJmODQwIiwiXHVlNWUwIiw2Ml0sWyJmODgwIiwiXHVlNjFmIiwxMjRdLFsiZjk0MCIsIlx1ZTY5YyJdLFsiZmE0''@;'; put 'put ''MCIsIlx1MjE3MCIsOSwiXHUyMTYwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNc''@;'; put 'put ''dTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGEiXSxbImZhODAiLCJcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUy''@;'; put 'put ''OWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNc''@;'; put 'put ''dTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYw''@;'; put 'put ''NWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlc''@;'; put 'put ''dWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZh''@;'; put 'put ''ZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmYiXSxbImZiNDAiLCJcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdc''@;'; put 'put ''dTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0''@;'; put 'put ''NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTkiXSxbImZiODAiLCJcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdc''@;'; put 'put ''dWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4''@;'; put 'put ''MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVc''@;'; put 'put ''dTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkz''@;'; put 'put ''MjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVc''@;'; put 'put ''dTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDkiXSxbImZjNDAiLCJcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXV0nKX0sMTU1Nzk6dWU9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4x''@;'; put 'put ''LjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0Ijoi''@;'; put 'put ''YWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0y''@;'; put 'put ''NTYtY2ZiIn0nKX19LHVlPT57dWUodWUucz0zNjA5NSl9XSk7'';'; 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.6a46b4c3bee2c41a-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 ''ayBzcGFuLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXZhdGFyLWltZ3t3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MHB4fWJvZHlbY2RzLXRoZW1lPWRhcmtde3Njcm9sbGJhci13aWR0aDp0aGluO3Nj''@;'; put 'put ''cm9sbGJhci1jb2xvcjojM2I1MjY4ICMyNzM4NDl9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjExcHh9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNre2JhY2tncm91bmQ6IzNiNTI2OH1ib2R5W2Nkcy10aGVtZT1kYXJr''@;'; put 'put ''XTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojMjczODQ5O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjozcHggc29saWQgIzNiNTI2OH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBjbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojNGVjMGZmfWJvZHksaHRtbHtmb250''@;'; put 'put ''LXdlaWdodDo0MDAhaW1wb3J0YW50O3BhZGRpbmc6MDttYXJnaW46MH1ib2R5LnNob3VsZC1sb2dpbiBjbHItbW9kYWwsaHRtbC5zaG91bGQtbG9naW4gY2xyLW1vZGFse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gYnV0dG9uOmZvY3Vze291dGxpbmU6bm9u''@;'; put 'put ''ZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBidXR0b246Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjFweCBzb2xpZCByZ2IoMjU1LDI1NSwyNTUpfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBidXR0b246Zm9jdXN7b3V0bGluZTpub25lfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBidXR0b246Zm9jdXMtdmlz''@;'; put 'put ''aWJsZXtvdXRsaW5lOjFweCBzb2xpZCByZ2IoMCwwLDApfS5zZWxlY3QtdGFibGUtaWNvbiwuc2VsZWN0LWxpYnJhcnktaWNvbnt3aWR0aDo4MHB4fVtjZHMtdGV4dD1sYWJlbF17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMCl9W2Nkcy10ZXh0PWxhYmVsTGlu''@;'; put 'put ''a117bGluZS1oZWlnaHQ6MS44IWltcG9ydGFudH1bY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13''@;'; put 'put ''ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5dOmFmdGVy''@;'; put 'put ''LFtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXTpiZWZvcmV7ZGlzcGxheTpub25lfS5tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nOjE1cHh9Lm1vZGFsIC5tb2RhbC1mb290ZXJ7cGFkZGluZzowIDE1cHggMTVweH0ubG9nLXdyYXBwZXJ7bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJn''@;'; put 'put ''aW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2hlaWdodDo0OHZoO292ZXJmbG93OmF1dG99LnNsaWRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMjBweDttYXJnaW4tbGVmdDo3NXB4O21hcmdpbi10''@;'; put 'put ''b3A6NzBweDtoZWlnaHQ6NXB4O292ZXJmbG93LXg6aGlkZGVufS5saW5le3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6LjQ7YmFja2dyb3VuZDojNzNkNTQ0O3dpZHRoOjE1MCU7aGVpZ2h0OjVweH0uc3VibGluZXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiM3M2Q1NDQ7aGVpZ2h0''@;'; put 'put ''OjVweH0uaW5je2FuaW1hdGlvbjppbmNyZWFzZSAycyBpbmZpbml0ZX0uZGVje2FuaW1hdGlvbjpkZWNyZWFzZSAycyAuNXMgaW5maW5pdGV9QGtleWZyYW1lcyBpbmNyZWFzZXswJXtsZWZ0Oi01JTt3aWR0aDo1JX10b3tsZWZ0OjEzMCU7d2lkdGg6MTAwJX19QGtleWZyYW1lcyBkZWNyZWFz''@;'; put 'put ''ZXswJXtsZWZ0Oi04MCU7d2lkdGg6ODAlfXRve2xlZnQ6MTEwJTt3aWR0aDoxMCV9fS5hcHAtbG9hZGluZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6IzMxNDM1MTtmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW47ei1pbmRleDoyMDAwO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjB9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5oLWF1dG97aGVpZ2h0OmF1dG99LmgtdW5zZXQtaXtoZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5taW4taC01MHZoe21p''@;'; put 'put ''bi1oZWlnaHQ6NTB2aH0uaC0yNHZoLC5oLTI1dmh7aGVpZ2h0OjI1dmh9LmgtNzB2aHtoZWlnaHQ6NzB2aH0uaC04MHZoe2hlaWdodDo4MHZofS5oLTEwMHtoZWlnaHQ6MTAwJX0udy01MHZ3e3dpZHRoOjUwdnd9LnctMTAwe3dpZHRoOjEwMCV9LnctMTAwLWl7d2lkdGg6MTAwJSFpbXBvcnRh''@;'; put 'put ''bnR9LnctNDB7d2lkdGg6NDAlfS5taW4tdy0we21pbi13aWR0aDowcHh9Lm14LTV7bWFyZ2luOjAgNXB4fS5teS01e21hcmdpbjo1cHggMH0ubXktMTV7bWFyZ2luOjE1cHggMH0ubXktMTAtbXgtYXV0b3ttYXJnaW46MTBweCBhdXRvfS5tLTB7bWFyZ2luOjAhaW1wb3J0YW50fS5tLTEwe21h''@;'; put 'put ''cmdpbjoxMHB4fS5tdC0we21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LTMtbmVnYXRpdmV7bWFyZ2luLXRvcDotM3B4fS5tdC01e21hcmdpbi10b3A6NXB4fS5tdC01LWl7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fS5tdC0ye21hcmdpbi10b3A6MnB4fS5tdC0yLWl7bWFyZ2luLXRvcDoy''@;'; put 'put ''cHghaW1wb3J0YW50fS5tdC0xMHttYXJnaW4tdG9wOjEwcHh9Lm10LTE1e21hcmdpbi10b3A6MTVweH0ubXQtMjB7bWFyZ2luLXRvcDoyMHB4fS5tbC0we21hcmdpbi1sZWZ0OjB9Lm1sLTN7bWFyZ2luLWxlZnQ6M3B4fS5tbC01e21hcmdpbi1sZWZ0OjVweH0ubWwtNS1pe21hcmdpbi1sZWZ0''@;'; put 'put ''OjVweCFpbXBvcnRhbnR9Lm1sLTEwe21hcmdpbi1sZWZ0OjEwcHh9Lm1sLTE1e21hcmdpbi1sZWZ0OjE1cHh9Lm1sLTIwe21hcmdpbi1sZWZ0OjIwcHh9Lm1sLTIwLWl7bWFyZ2luLWxlZnQ6MjBweCFpbXBvcnRhbnR9Lm1yLTB7bWFyZ2luLXJpZ2h0OjB9Lm1yLTV7bWFyZ2luLXJpZ2h0OjVw''@;'; put 'put ''eH0ubXItNWl7bWFyZ2luLXJpZ2h0OjVweCFpbXBvcnRhbnR9Lm1yLTEwe21hcmdpbi1yaWdodDoxMHB4fS5tci0xMnttYXJnaW4tcmlnaHQ6MTJweH0ubXItMjB7bWFyZ2luLXJpZ2h0OjIwcHh9Lm1iLTB7bWFyZ2luLWJvdHRvbTowfS5tYi0waXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50''@;'; put 'put ''fS5tYi01e21hcmdpbi1ib3R0b206NXB4fS5tYi0xMHttYXJnaW4tYm90dG9tOjEwcHh9Lm1iLTEwLWl7bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFudH0ubWItMTV7bWFyZ2luLWJvdHRvbToxNXB4fS5tYi0yMHttYXJnaW4tYm90dG9tOjIwcHh9Lm1iLTMwe21hcmdpbi1ib3R0b206MzBw''@;'; put 'put ''eH0ucC0we3BhZGRpbmc6MH0ucC0xMHtwYWRkaW5nOjEwcHh9LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGItMTB7cGFkZGluZy1ib3R0b206MTBweH0ucHktNXtwYWRkaW5nOjVweCAwfS5weS0xMHtwYWRkaW5nOjEwcHggMH0uYmFja2dyb3VuZC10cmFuc3BhcmVudHtiYWNrZ3JvdW5kOnRy''@;'; put 'put ''YW5zcGFyZW50fS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWl7YmFja2dyb3VuZDp0cmFuc3BhcmVudCFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1ncmF5e2NvbG9yOiM1YTVhNWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1kYXJrLWdyYXl7Y29sb3I6IzQ5''@;'; put 'put ''NTk2N31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbG9yLWRhcmtlci1ncmF5e2NvbG9yOiMzMTQzNTF9LmNvbG9yLXdoaXRle2NvbG9yOiNmZmZ9LmNvbG9yLXdoaXRlLWl7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbG9yLWdyZWVue2NvbG9yOiM0YjllNGJ9LmNvbG9yLWRjLWdyZWVue2Nv''@;'; put 'put ''bG9yOiM4MWI0NDB9LmNvbG9yLXJlZHtjb2xvcjojZTQ1NDU0fS5jb2xvci1vcmFuZ2V7Y29sb3I6I2U2N2UyMn0uY29sb3ItYmx1ZXtjb2xvcjojM2Y4Y2MzfS5jb2xvci15ZWxsb3d7Y29sb3I6I2YxYzQwZn0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1kZWZ1YWx0''@;'; put 'put ''e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3ItZGVmYXVsdC1pe2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LndoaXRlc3BhY2Ut''@;'; put 'put ''bm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmZvbnQtc2l6ZS0xNXtmb250LXNpemU6MTVweH0uZm9udC1zaXplLTE4e2ZvbnQtc2l6ZToxOHB4fS5mb250LWJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5mb250LWJvbGQtaXtmb250LXdlaWdo''@;'; put 'put ''dDo3MDAhaW1wb3J0YW50fS5mb250LXdlaWdodC0zMDB7Zm9udC13ZWlnaHQ6MzAwfS5mb250LXdlaWdodC03MDB7Zm9udC13ZWlnaHQ6NzAwfS53b3JkLWJyZWFre3dvcmQtYnJlYWs6YnJlYWstd29yZH0ud29yZC1icmVhay1hbGx7d29yZC1icmVhazpicmVhay1hbGx9LnBvc2l0aW9uLXJl''@;'; put 'put ''bGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5wb3NpdGlvbi1hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZC1ub25le2Rpc3BsYXk6bm9uZX0uZC1ibG9ja3tkaXNwbGF5OmJsb2NrfS5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZC1mbGV4e2Rpc3BsYXk6ZmxleH0u''@;'; put 'put ''ZC1jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4LXVuc2V0e2ZsZXg6dW5zZXR9LmFsaWduLXNlbGYtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmR9LmFsaWduLXNlbGYtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5hbGlnbi1pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''fS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXItaXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5qdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY29udGVudC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC1jb2x1bW57ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246Y29sdW1ufS5jbHItZ2FwLTV7Z2FwOjVweH0uY2xyLWdhcC0we2dhcDowfS5vdmVyZmxvdy1hdXRve292ZXJmbG93OmF1dG99LnotaW5kZXgtaGlnaGVzdHt6LWluZGV4OjEwMDAwMDAwfS52ZXJ0aWNhbC1hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5pY29u''@;'; put 'put ''LWRjLWZpbGx7ZmlsbDojODFiNDQwfS5kYXRhZ3JpZC1jdXN0b20tZm9vdGVyIC5kYXRhZ3JpZC1vdXRlci13cmFwcGVyLC50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLC50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRh''@;'; put 'put ''cmVhe3dpZHRoOjEwMCV9LnRleHQtYXJlYS1mdWxsLXdpZHRoIGNsci10ZXh0YXJlYS1jb250YWluZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS5wcm9ncmVzU3RhdGlje21hcmdpbi10''@;'; put 'put ''b3A6LTZweCFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O3otaW5kZXg6MTAwMDAhaW1wb3J0YW50fS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6I2Y1ZjZmZTtib3JkZXItcmFkaXVzOjA7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjZw''@;'; put 'put ''eDttYXJnaW46MDttYXgtaGVpZ2h0Oi41ODMzMzNyZW07bWluLWhlaWdodDouMTY2NjY3cmVtO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOmNhbGMoMTAwJSAtIDYzcHgpfS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDEuNXMg''@;'; put 'put ''ZWFzZS1pbi1vdXQgaW5maW5pdGU7Y29udGVudDoiICI7dG9wOi4xNjY2NjdyZW07Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjojNjBiNTE1O3dpZHRoOjc1JX0uYmFkZ2Utd2FybmluZ3tjb2xvcjojZmZmIWltcG9ydGFu''@;'; put 'put ''dH0uY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSAuY2FyZC1oZWFkZXIgaDN7bWFyZ2luLXRvcDoxMHB4fS5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7cGFkZGluZzoxNXB4IDE1cHggMH0ubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5Om5v''@;'; put 'put ''bmV9LnNob3ctY2xvc2UgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xOHB4O3JpZ2h0Oi0xMHB4fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2Q5NGIy''@;'; put 'put ''ZTtjb2xvcjojZmZmO2JvcmRlcjpub25lfS5jYXJkLWhlYWRlcntmb250LXdlaWdodDozMDB9LnNlbGVjdCBzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQ5NTk2NztiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQgOTUlLCM0OTVhNjcg''@;'; put 'put ''MCkgbm8tcmVwZWF0fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6LjJyZW0haW1wb3J0YW50fS50YWJsZS1hY3RpdmU6Zm9jdXN7YmFja2dyb3VuZDojZDhlM2U5fWNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIsY2xyLXNlbGVjdC1jb250YWlu''@;'; put 'put ''ZXIgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyLGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHt3aWR0aDoxMDAlfXRib2R5e2ZvbnQtd2VpZ2h0OjQwMH1oMyxoNHtjb2xvcjojNTg1ODU4O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7''@;'; put 'put ''bGluZS1oZWlnaHQ6MXJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWgxLGgye2NvbG9yOiM1ODU4NTg7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoycmVtO21hcmdpbi10b3A6MXJlbTttYXJnaW4tYm90dG9tOjB9Y2xyLWljb24u''@;'; put 'put ''aXMtaW5mb3tmaWxsOiM4MGI0NDF9LmRhdGFncmlkLWhvc3QsLmRhdGFncmlkLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6LXdlYmtpdC1ib3ghaW1wb3J0YW50fS5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250ZW50e2p1c3RpZnktY29udGVudDpjZW50ZXJ9''@;'; put 'put ''LmJ0bi5idG4tZGFuZ2VyLC5idG4uYnRuLXdhcm5pbmd7Ym9yZGVyLWNvbG9yOiNlZjRmMmU7YmFja2dyb3VuZC1jb2xvcjojZDk0YjJlO2NvbG9yOiNmZmZ9LmJ0bi5idG4tc206aGFzKGNsci1pY29uKXtsaW5lLWhlaWdodDoyfS5kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1i''@;'; put 'put ''bG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uY2xyLWZsZXgtMXtmbGV4OjF9LmNsci1mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmJvcmRlci0we2JvcmRlcjowfS5ib3gtc2hhZG93LW5vbmV7Ym94LXNoYWRv''@;'; put 'put ''dzpub25lfS5ib3gtc2hhZG93LW5vbmUtaXtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5odEN1c3RvbUhpZGRlbntkaXNwbGF5Om5vbmV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmh0RGFya3tiYWNrZ3JvdW5kOiM4ODg7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odERhcmt7YmFja2dyb3VuZDojM2M1NjYyO2NvbG9yOiNlZWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuZGFya1RIOm5vdCgucHJpbWFyeUtleUhlYWRlclN0eWxlKXtiYWNrZ3JvdW5kOiM0ODdkOTY7Y29sb3I6I2VlZX1ib2R5W2Nkcy10aGVtZT1kYXJr''@;'; put 'put ''XSAuaGFuZHNvbnRhYmxlIC5kYXJrVEguaHRfX2hpZ2hsaWdodHtiYWNrZ3JvdW5kOiMzYjZiODF9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tjb2xvcjojODI4MjgyfS5oYW5kc29udGFibGUubGlzdGJveHtwYWRkaW5nOjVweCAwIDVweCA1cHg7Ym94LXNoYWRvdzowIDRw''@;'; put 'put ''eCAyMHB4ICMwMDAwMDA3MH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kOiNlNjI3MDBhZCFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCByZWQhaW1wb3J0YW50O2NvbG9yOiNmZmYhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLm51bWVyaWNMaXN0Ym94e3RleHQtYWxp''@;'; put 'put ''Z246cmlnaHR9Lm1hcmdpbi10b3AtMjB7bWFyZ2luLXRvcDoyMHB4fS5oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0udW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5uby1ib3JkZXJze2JvcmRlcjowfS5jYXJkLm5vLWJvcmRlcnMsLmNhcmQubm8tYm9yZGVycyAuY2FyZC1oZWFk''@;'; put 'put ''ZXIsLmNhcmQubm8tYm9yZGVycyAuY2FyZC1ibG9jaywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWZvb3RlciwuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtZm9v''@;'; put 'put ''dGVye2JvcmRlcjowO2JveC1zaGFkb3c6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpey5kLXNtLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1zbS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLXNtLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9j''@;'; put 'put ''ayFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtc20tdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtc20tdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0u''@;'; put 'put ''ZC1zbS1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtc20tY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1zbS01e2dhcDo1cHh9LmNsci1nYXAtc20tMHtnYXA6''@;'; put 'put ''MH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsuZC1tZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1tZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLW1kLWJsb2Nre2Rp''@;'; put 'put ''c3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLW1kLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1tZC1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTpp''@;'; put 'put ''bmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LW1kLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtbWQtNXtnYXA6NXB4fS5jbHItZ2FwLW1kLTB7Z2FwOjB9fUBtZWRpYSAobWluLXdpZHRoOiA5OTJw''@;'; put 'put ''eCl7LmQtbGctbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1sZy1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1s''@;'; put 'put ''Zy10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1sZy10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtbGctZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1sZy1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLWxnLTV7Z2FwOjVweH0uY2xyLWdhcC1sZy0we2dhcDowfX0uZGF0YWdyaWQtYm9keXtwYWRkaW5nLWJvdHRvbToycmVtIWltcG9ydGFudH0uYWJv''@;'; put 'put ''cnRNc2d7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfSNncmFwaCBzdmd7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubm8tdGFibGUtc2VsZWN0ZWR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpO3otaW5kZXg6MTA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MH0uY29weVJpZ2h0e2JhY2tncm91bmQ6IzQ5NTk2NyFpbXBvcnRhbnQ7Y29sb3I6I2Zm''@;'; put 'put ''ZjtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6NXB4IDAgNHB4O3otaW5kZXg6MTAwfS5uYXYtdHJlZT5jbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9''@;'; put 'put ''Y2xyLXRyZWUtbm9kZXtvdmVyZmxvdy15OnZpc2libGV9Y2xyLXRyZWUtbm9kZTpmb2N1c3tvdXRsaW5lOm5vbmUhaW1wb3J0YW50fWNsci10cmVlLW5vZGUgLmNsci10cmVlbm9kZS1jYXJldHt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9k''@;'; put 'put ''ZSAuY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVye3BhZGRpbmc6MCA4cHg7d2lkdGg6YXV0bztoZWlnaHQ6YXV0bzthbGlnbi1pdGVtczpjZW50ZXJ9Y2xyLXRyZWUtbm9kZSAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1c3tvdXRsaW5lOm5vbmUhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItdHJlZW5vZGUtY29udGVudCBwe3doaXRlLXNwYWNlOm5vd3JhcH0uc2VhcmNoLW5vZGV7bWFyZ2luLWJvdHRvbTo1cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0udHJlZS1zZWFyY2gtd3JhcHBl''@;'; put 'put ''ciBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbjowfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOjAgMCAzcHg7Y3Vyc29yOnBvaW50ZXJ9LmNsci10cmVlLW5vZGV7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRh''@;'; put 'put ''bnR9LmNvbnRlbnQtY29udGFpbmVye3dpZHRoOjEwMCV9QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey53dEhvbGRlcnt3aWR0aDoxMDAlIWltcG9ydGFudH19aW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9QG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwo''@;'; put 'put ''LW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5kZWR7cGFkZGluZy1ib3R0b206MjBweDttaW4taGVpZ2h0OmF1dG99LmNsci10cmVlLW5vZGV7bWluLWhlaWdodDoyNHB4fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCBjbHItaWNvbnttaW4td2lkdGg6MTZweDttaW4taGVpZ2h0OjE2cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257Ym90dG9tOjJweH0uY29udGVudC1jb250YWluZXJ7aGVpZ2h0''@;'; put 'put ''OjEwMCV9LmNvbnRlbnQtYXJlYT4uY2FyZHttYXJnaW4tYm90dG9tOjIwcHh9LnJlY29yZC1lZGl0LW1vZGFsIHRleHRhcmVhe21pbi1oZWlnaHQ6NDJweH19LmJvcmRlci1ib3R0b20tZGl2aWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDNkM2QzfS5sb2FkaW5nU3Bpbm5lcntoZWln''@;'; put 'put ''aHQ6NzB2aDtmbGV4OjE7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2Vyey13ZWJraXQtdGV4dC1zZWN1cml0eTpkaXNjOy1tb3otdGV4dC1zZWN1cml0eTpk''@;'; put 'put ''aXNjO3RleHQtc2VjdXJpdHk6ZGlzYztmb250LWZhbWlseTp0ZXh0LXNlY3VyaXR5LWRpc2N9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfWhyLmxpZ2h0e2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZWRlZGV9LnNwaW5uZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3Jl''@;'; put 'put ''ZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zcGlubmVyLjE2Zjc2M2NlYmM2YjY0ZGYtc3ZnKSFpbXBvcnRhbnR9LmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntiYWNrZ3JvdW5kOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09''@;'; put 'put ''cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2NhcmV0LjY1ZjFmYzBhY2JlNGM3ZmYtc3ZnKSFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gLnRhYmxlLXNlYXJjaC13cmFwcGVye2JhY2tncm91bmQ6IzIxMzMzYn0udGFibGUtc2VhcmNoLXdyYXBwZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojZmZmfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTttaW4td2lkdGg6MTcwcHh9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29uLC50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3Jh''@;'; put 'put ''cHBlciAuc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxOXB4O3RvcDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBjbHItaWNvbntjdXJzb3I6cG9pbnRlcn0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgW25hbWU9c2VhcmNoLWlucHV0''@;'; put 'put ''XXtwYWRkaW5nLXJpZ2h0OjI1cHh9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luLXRvcDotNXB4O21hcmdpbi1yaWdodDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVyIGxhYmVse2Rpc3BsYXk6bm9uZX0udGFibGUtc2Vh''@;'; put 'put ''cmNoLXdyYXBwZXIgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLC50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0''@;'; put 'put ''LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXRbdHlwZT1udW1iZXJdey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmRjLWxvY2tlZC1jb250cm9se29wYWNpdHk6LjQ7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH0ubGluay1pdHtjdXJz''@;'; put 'put ''b3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQo='';'; 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;